{"version":3,"file":"js/chunk-vendors.52276960.js","mappings":";;;;;;;;;;;;;;;;;AAqBa,MAAAA,EAAY,CAIvBC,aAAa,EAIbC,YAAY,EAKZC,YAAa,qBCZFC,EAAS,SAAUC,EAAoBC,GAClD,IAAKD,EACH,MAAME,EAAeD,EAEzB,EAKaC,EAAiB,SAAUD,GACtC,OAAO,IAAIE,MACT,sBACER,EAAUG,YACV,6BACAG,EAEN,ECrBMG,EAAoB,SAAUC,GAElC,MAAMC,EAAgB,GACtB,IAAIC,EAAI,EACR,IAAK,IAAIC,EAAI,EAAGA,EAAIH,EAAII,OAAQD,IAAK,CACnC,IAAIE,EAAIL,EAAIM,WAAWH,GACnBE,EAAI,IACNJ,EAAIC,KAAOG,EACFA,EAAI,MACbJ,EAAIC,KAAQG,GAAK,EAAK,IACtBJ,EAAIC,KAAY,GAAJG,EAAU,KAEL,SAAZ,MAAJA,IACDF,EAAI,EAAIH,EAAII,QACyB,SAAZ,MAAxBJ,EAAIM,WAAWH,EAAI,KAGpBE,EAAI,QAAgB,KAAJA,IAAe,KAA6B,KAAtBL,EAAIM,aAAaH,IACvDF,EAAIC,KAAQG,GAAK,GAAM,IACvBJ,EAAIC,KAASG,GAAK,GAAM,GAAM,IAC9BJ,EAAIC,KAASG,GAAK,EAAK,GAAM,IAC7BJ,EAAIC,KAAY,GAAJG,EAAU,MAEtBJ,EAAIC,KAAQG,GAAK,GAAM,IACvBJ,EAAIC,KAASG,GAAK,EAAK,GAAM,IAC7BJ,EAAIC,KAAY,GAAJG,EAAU,I,CAG1B,OAAOJ,CACT,EAQMM,EAAoB,SAAUC,GAElC,MAAMP,EAAgB,GACtB,IAAIQ,EAAM,EACRJ,EAAI,EACN,MAAOI,EAAMD,EAAMJ,OAAQ,CACzB,MAAMM,EAAKF,EAAMC,KACjB,GAAIC,EAAK,IACPT,EAAII,KAAOM,OAAOC,aAAaF,QAC1B,GAAIA,EAAK,KAAOA,EAAK,IAAK,CAC/B,MAAMG,EAAKL,EAAMC,KACjBR,EAAII,KAAOM,OAAOC,cAAoB,GAALF,IAAY,EAAW,GAALG,E,MAC9C,GAAIH,EAAK,KAAOA,EAAK,IAAK,CAE/B,MAAMG,EAAKL,EAAMC,KACXK,EAAKN,EAAMC,KACXM,EAAKP,EAAMC,KACXO,IACI,EAALN,IAAW,IAAa,GAALG,IAAY,IAAa,GAALC,IAAY,EAAW,GAALC,GAC5D,MACFd,EAAII,KAAOM,OAAOC,aAAa,OAAUI,GAAK,KAC9Cf,EAAII,KAAOM,OAAOC,aAAa,OAAc,KAAJI,G,KACpC,CACL,MAAMH,EAAKL,EAAMC,KACXK,EAAKN,EAAMC,KACjBR,EAAII,KAAOM,OAAOC,cACT,GAALF,IAAY,IAAa,GAALG,IAAY,EAAW,GAALC,E,EAI9C,OAAOb,EAAIgB,KAAK,GAClB,EAsBaC,EAAiB,CAI5BC,eAAgB,KAKhBC,eAAgB,KAMhBC,sBAAuB,KAMvBC,sBAAuB,KAMvBC,kBACE,iEAKF,gBAAIC,GACF,OAAOC,KAAKF,kBAAoB,K,EAMlC,wBAAIG,GACF,OAAOD,KAAKF,kBAAoB,K,EAUlCI,mBAAoC,oBAATC,KAW3BC,eAAAA,CAAgBC,EAA8BC,GAC5C,IAAKC,MAAMC,QAAQH,GACjB,MAAMhC,MAAM,iDAGd2B,KAAKS,QAEL,MAAMC,EAAgBJ,EAClBN,KAAKJ,sBACLI,KAAKN,eAEHiB,EAAS,GAEf,IAAK,IAAIjC,EAAI,EAAGA,EAAI2B,EAAM1B,OAAQD,GAAK,EAAG,CACxC,MAAMkC,EAAQP,EAAM3B,GACdmC,EAAYnC,EAAI,EAAI2B,EAAM1B,OAC1BmC,EAAQD,EAAYR,EAAM3B,EAAI,GAAK,EACnCqC,EAAYrC,EAAI,EAAI2B,EAAM1B,OAC1BqC,EAAQD,EAAYV,EAAM3B,EAAI,GAAK,EAEnCuC,EAAWL,GAAS,EACpBM,GAAqB,EAARN,IAAiB,EAAME,GAAS,EACnD,IAAIK,GAAqB,GAARL,IAAiB,EAAME,GAAS,EAC7CI,EAAmB,GAARJ,EAEVD,IACHK,EAAW,GAENP,IACHM,EAAW,KAIfR,EAAOU,KACLX,EAAcO,GACdP,EAAcQ,GACdR,EAAcS,GACdT,EAAcU,G,CAIlB,OAAOT,EAAOnB,KAAK,G,EAWrB8B,YAAAA,CAAajB,EAAeC,GAG1B,OAAIN,KAAKE,qBAAuBI,EACvBiB,KAAKlB,GAEPL,KAAKI,gBAAgB9B,EAAkB+B,GAAQC,E,EAWxDkB,YAAAA,CAAanB,EAAeC,GAG1B,OAAIN,KAAKE,qBAAuBI,EACvBH,KAAKE,GAEPvB,EAAkBkB,KAAKyB,wBAAwBpB,EAAOC,G,EAkB/DmB,uBAAAA,CAAwBpB,EAAeC,GACrCN,KAAKS,QAEL,MAAMiB,EAAgBpB,EAClBN,KAAKH,sBACLG,KAAKL,eAEHgB,EAAmB,GAEzB,IAAK,IAAIjC,EAAI,EAAGA,EAAI2B,EAAM1B,QAAU,CAClC,MAAMiC,EAAQc,EAAcrB,EAAMsB,OAAOjD,MAEnCmC,EAAYnC,EAAI2B,EAAM1B,OACtBmC,EAAQD,EAAYa,EAAcrB,EAAMsB,OAAOjD,IAAM,IACzDA,EAEF,MAAMqC,EAAYrC,EAAI2B,EAAM1B,OACtBqC,EAAQD,EAAYW,EAAcrB,EAAMsB,OAAOjD,IAAM,KACzDA,EAEF,MAAMkD,EAAYlD,EAAI2B,EAAM1B,OACtBkD,EAAQD,EAAYF,EAAcrB,EAAMsB,OAAOjD,IAAM,GAG3D,KAFEA,EAEW,MAATkC,GAA0B,MAATE,GAA0B,MAATE,GAA0B,MAATa,EACrD,MAAM,IAAIC,EAGZ,MAAMb,EAAYL,GAAS,EAAME,GAAS,EAG1C,GAFAH,EAAOU,KAAKJ,GAEE,KAAVD,EAAc,CAChB,MAAME,EAAaJ,GAAS,EAAK,IAASE,GAAS,EAGnD,GAFAL,EAAOU,KAAKH,GAEE,KAAVW,EAAc,CAChB,MAAMV,EAAaH,GAAS,EAAK,IAAQa,EACzClB,EAAOU,KAAKF,E,GAKlB,OAAOR,C,EAQTF,KAAAA,GACE,IAAKT,KAAKN,eAAgB,CACxBM,KAAKN,eAAiB,CAAC,EACvBM,KAAKL,eAAiB,CAAC,EACvBK,KAAKJ,sBAAwB,CAAC,EAC9BI,KAAKH,sBAAwB,CAAC,EAG9B,IAAK,IAAInB,EAAI,EAAGA,EAAIsB,KAAKD,aAAapB,OAAQD,IAC5CsB,KAAKN,eAAehB,GAAKsB,KAAKD,aAAa4B,OAAOjD,GAClDsB,KAAKL,eAAeK,KAAKN,eAAehB,IAAMA,EAC9CsB,KAAKJ,sBAAsBlB,GAAKsB,KAAKC,qBAAqB0B,OAAOjD,GACjEsB,KAAKH,sBAAsBG,KAAKJ,sBAAsBlB,IAAMA,EAGxDA,GAAKsB,KAAKF,kBAAkBnB,SAC9BqB,KAAKL,eAAeK,KAAKC,qBAAqB0B,OAAOjD,IAAMA,EAC3DsB,KAAKH,sBAAsBG,KAAKD,aAAa4B,OAAOjD,IAAMA,E;;;;;;;;;;;;;;;;GAU9D,MAAOoD,UAAgCzD,MAA7C0D,WAAAA,G,oBACW,KAAIC,KAAG,yB,EAMX,MAAMC,EAAe,SAAU1D,GACpC,MAAM2D,EAAY5D,EAAkBC,GACpC,OAAOkB,EAAOW,gBAAgB8B,GAAW,EAC3C,EAMaC,EAAgC,SAAU5D,GAErD,OAAO0D,EAAa1D,GAAK6D,QAAQ,MAAO,GAC1C,EAWaC,EAAe,SAAU9D,GACpC,IACE,OAAOkB,EAAO+B,aAAajD,GAAK,E,CAChC,MAAO+D,GACPC,QAAQC,MAAM,wBAAyBF,E,CAEzC,OAAO,IACT;;;;;;;;;;;;;;;;;ACpWM,SAAUG,EAAYC,GAC1B,OAAOC,OAAWC,EAAWF,EAC/B,CAgBgB,SAAAC,EAAWE,EAAiBC,GAC1C,KAAMA,aAAkBC,QACtB,OAAOD,EAGT,OAAQA,EAAOf,aACb,KAAKiB,KAGH,MAAMC,EAAYH,EAClB,OAAO,IAAIE,KAAKC,EAAUC,WAE5B,KAAKH,YACYH,IAAXC,IACFA,EAAS,CAAC,GAEZ,MACF,KAAKtC,MAEHsC,EAAS,GACT,MAEF,QAEE,OAAOC,EAGX,IAAK,MAAMK,KAAQL,EAEZA,EAAOM,eAAeD,IAAUE,EAAWF,KAG/CN,EAAmCM,GAAQR,EACzCE,EAAmCM,GACnCL,EAAmCK,KAIxC,OAAON,CACT,CAEA,SAASQ,EAAWC,GAClB,MAAe,cAARA,CACT;;;;;;;;;;;;;;;;YC3DgBC,IACd,GAAoB,qBAATC,KACT,OAAOA,KAET,GAAsB,qBAAXC,OACT,OAAOA,OAET,GAAsB,qBAAXC,EAAAA,EACT,OAAOA,EAAAA,EAET,MAAM,IAAIrF,MAAM,kCAClB;;;;;;;;;;;;;;;;GCsBA,MAAMsF,EAAwBA,IAC5BJ,IAAYK,sBAURC,EAA6BA,KACjC,GAAuB,qBAAZC,QACT,OAEF,MAAMC,EAAqBD,CAAAA,SAAAA,aAAAA,SAAAA,KAAYF,sBACvC,OAAIG,EACKC,KAAKC,MAAMF,QADpB,C,EAKIG,EAAwBA,KAC5B,GAAwB,qBAAbC,SACT,OAEF,IAAIC,EACJ,IACEA,EAAQD,SAASE,OAAOD,MAAM,gC,CAC9B,MAAO9B,GAGP,M,CAEF,MAAMgC,EAAUF,GAAS/B,EAAa+B,EAAM,IAC5C,OAAOE,GAAWN,KAAKC,MAAMK,EAAQ,EAU1BC,EAAcA,KACzB,IACE,OACEZ,KACAE,KACAK,G,CAEF,MAAO5B,GAQP,YADAC,QAAQiC,KAAK,+CAA+ClC,I,GAWnDmC,EACXC,IACuB,IAAAC,EAAAC,EAAA,OAA4B,QAA5BA,EAAe,QAAfD,EAAAJ,WAAe,IAAAI,OAAA,EAAAA,EAAAE,qBAAa,IAAAD,OAAA,EAAAA,EAAGF,EAAY,EAQvDI,EACXJ,IAEA,MAAMK,EAAON,EAAuBC,GACpC,IAAKK,EACH,OAEF,MAAMC,EAAiBD,EAAKE,YAAY,KACxC,GAAID,GAAkB,GAAKA,EAAiB,IAAMD,EAAKpG,OACrD,MAAM,IAAIN,MAAM,gBAAgB0G,yCAGlC,MAAMG,EAAOC,SAASJ,EAAKK,UAAUJ,EAAiB,GAAI,IAC1D,MAAgB,MAAZD,EAAK,GAEA,CAACA,EAAKK,UAAU,EAAGJ,EAAiB,GAAIE,GAExC,CAACH,EAAKK,UAAU,EAAGJ,GAAiBE,E,EAQlCG,EAAsBA,KAAyC,IAAAV,EAC1E,OAAa,QAAbA,EAAAJ,WAAa,IAAAI,OAAA,EAAAA,EAAEW,MAAM;;;;;;;;;;;;;;;;;MC/IVC,EAIXxD,WAAAA,GAFA,KAAAyD,OAAoC,OACpC,KAAAC,QAAqC,OAEnCzF,KAAK0F,QAAU,IAAIC,SAAQ,CAACF,EAASD,KACnCxF,KAAKyF,QAAUA,EACfzF,KAAKwF,OAASA,CAAmC,G,CASrDI,YAAAA,CACEC,GAEA,MAAO,CAACrD,EAAOE,KACTF,EACFxC,KAAKwF,OAAOhD,GAEZxC,KAAKyF,QAAQ/C,GAES,oBAAbmD,IAGT7F,KAAK0F,QAAQI,OAAM,SAIK,IAApBD,EAASlH,OACXkH,EAASrD,GAETqD,EAASrD,EAAOE,G;;;;;;;;;;;;;;;;GC0CV,SAAAqD,EACdC,EACAC,GAEA,GAAID,EAAME,IACR,MAAM,IAAI7H,MACR,gHAIJ,MAAM8H,EAAS,CACbC,IAAK,OACLC,KAAM,OAGFC,EAAUL,GAAa,eACvBM,EAAMP,EAAMO,KAAO,EACnBC,EAAMR,EAAMQ,KAAOR,EAAMS,QAC/B,IAAKD,EACH,MAAM,IAAInI,MAAM,wDAGlB,MAAMqI,EAAO3D,OAAA4D,OAAA,CAEXC,IAAK,kCAAkCN,IACvCO,IAAKP,EACLC,MACAO,IAAKP,EAAM,KACXQ,UAAWR,EACXC,MACAC,QAASD,EACTQ,SAAU,CACRC,iBAAkB,SAClBC,WAAY,CAAC,IAIZlB,GAICmB,EAAY,GAClB,MAAO,CACLhF,EAA8B6B,KAAKoD,UAAUjB,IAC7ChE,EAA8B6B,KAAKoD,UAAUV,IAC7CS,GACA3H,KAAK,IACT;;;;;;;;;;;;;;;;YChHgB6H,IACd,MACuB,qBAAdC,WAC2B,kBAA3BA,UAAU,aAEVA,UAAU,aAEV,EAEX,C,SASgBC,IACd,MACoB,qBAAX9D,WAGJA,OAAO,YAAcA,OAAO,aAAeA,OAAO,cACrD,oDAAoD+D,KAAKH,IAE7D,C,SA+EgBI,IACd,MACuB,kBAAdH,WAAmD,gBAAzBA,UAAU,UAE/C,C,SAuBgBI,IACd,OAAiC,IAA1B7J,EAAUC,cAAiD,IAAzBD,EAAUE,UACrD,C,SAgBgB4J,IACd,IACE,MAA4B,kBAAdC,S,CACd,MAAOtF,GACP,OAAO,C,CAEX,C,SASgBuF,IACd,OAAO,IAAIlC,SAAQ,CAACF,EAASD,KAC3B,IACE,IAAIsC,GAAoB,EACxB,MAAMC,EACJ,0DACIC,EAAUxE,KAAKoE,UAAUK,KAAKF,GACpCC,EAAQE,UAAY,KAClBF,EAAQG,OAAOC,QAEVN,GACHtE,KAAKoE,UAAUS,eAAeN,GAEhCtC,GAAQ,EAAK,EAEfuC,EAAQM,gBAAkB,KACxBR,GAAW,CAAK,EAGlBE,EAAQO,QAAU,K,MAChB/C,GAAoB,QAAbb,EAAAqD,EAAQxF,aAAK,IAAAmC,OAAA,EAAAA,EAAExG,UAAW,GAAG,C,CAEtC,MAAOqE,GACPgD,EAAOhD,E,IAGb;;;;;;;;;;;;;;;;;AC/JA,MAAMgG,EAAa,gBAYb,MAAOC,UAAsBpK,MAIjC0D,WAAAA,CAEW2G,EACTvK,EAEOwK,GAEPC,MAAMzK,GALG,KAAIuK,KAAJA,EAGF,KAAUC,WAAVA,EAPA,KAAI3G,KAAWwG,EAetBzF,OAAO8F,eAAe7I,KAAMyI,EAAcK,WAItCzK,MAAM0K,mBACR1K,MAAM0K,kBAAkB/I,KAAMgJ,EAAaF,UAAUG,O,QAK9CD,EAIXjH,WAAAA,CACmBmH,EACAC,EACAC,GAFA,KAAOF,QAAPA,EACA,KAAWC,YAAXA,EACA,KAAMC,OAANA,C,CAGnBH,MAAAA,CACEP,KACGW,GAEH,MAAMV,EAAcU,EAAK,IAAoB,CAAC,EACxCC,EAAW,GAAGtJ,KAAKkJ,WAAWR,IAC9Ba,EAAWvJ,KAAKoJ,OAAOV,GAEvBvK,EAAUoL,EAAWC,EAAgBD,EAAUZ,GAAc,QAE7Dc,EAAc,GAAGzJ,KAAKmJ,gBAAgBhL,MAAYmL,MAElD9G,EAAQ,IAAIiG,EAAca,EAAUG,EAAad,GAEvD,OAAOnG,C,EAIX,SAASgH,EAAgBD,EAAkBF,GACzC,OAAOE,EAASnH,QAAQsH,GAAS,CAACC,EAAGrG,KACnC,MAAMZ,EAAQ2G,EAAK/F,GACnB,OAAgB,MAATZ,EAAgBxD,OAAOwD,GAAS,IAAIY,KAAO,GAEtD,CAEA,MAAMoG,EAAU;;;;;;;;;;;;;;;;GChHV,SAAUE,EAASrL,GACvB,OAAOyF,KAAKC,MAAM1F,EACpB,CAOM,SAAU6I,EAAUiC,GACxB,OAAOrF,KAAKoD,UAAUiC,EACxB;;;;;;;;;;;;;;;;GCIO,MAAMQ,EAAS,SAAU7D,GAC9B,IAAIG,EAAS,CAAC,EACZ2D,EAAiB,CAAC,EAClBT,EAAO,CAAC,EACRlC,EAAY,GAEd,IACE,MAAM4C,EAAQ/D,EAAMgE,MAAM,KAC1B7D,EAASyD,EAASvH,EAAa0H,EAAM,KAAO,IAC5CD,EAASF,EAASvH,EAAa0H,EAAM,KAAO,IAC5C5C,EAAY4C,EAAM,GAClBV,EAAOS,EAAO,MAAQ,CAAC,SAChBA,EAAO,I,CACd,MAAOxH,GAAI,CAEb,MAAO,CACL6D,SACA2D,SACAT,OACAlC,YAEJ,EAqEa8C,EAAgB,SAAUjE,GACrC,MAAM1B,EAAUuF,EAAO7D,GACrB8D,EAASxF,EAAQwF,OAEnB,QAASA,GAA4B,kBAAXA,GAAuBA,EAAO1G,eAAe,MACzE,EASa8G,EAAU,SAAUlE,GAC/B,MAAM8D,EAAiBD,EAAO7D,GAAO8D,OACrC,MAAyB,kBAAXA,IAA2C,IAApBA,EAAO,QAC9C;;;;;;;;;;;;;;;;;AChIgB,SAAAK,EAA2BC,EAAQ9G,GACjD,OAAOP,OAAO+F,UAAU1F,eAAeiH,KAAKD,EAAK9G,EACnD,CAEgB,SAAAgH,EACdF,EACA9G,GAEA,OAAIP,OAAO+F,UAAU1F,eAAeiH,KAAKD,EAAK9G,GACrC8G,EAAI9G,QAEX,CAEJ,CAEM,SAAUiH,EAAQH,GACtB,IAAK,MAAM9G,KAAO8G,EAChB,GAAIrH,OAAO+F,UAAU1F,eAAeiH,KAAKD,EAAK9G,GAC5C,OAAO,EAGX,OAAO,CACT,C,SAEgBkH,EACdJ,EACAK,EACAC,GAEA,MAAMC,EAAkC,CAAC,EACzC,IAAK,MAAMrH,KAAO8G,EACZrH,OAAO+F,UAAU1F,eAAeiH,KAAKD,EAAK9G,KAC5CqH,EAAIrH,GAAOmH,EAAGJ,KAAKK,EAAYN,EAAI9G,GAAMA,EAAK8G,IAGlD,OAAOO,CACT,CAKgB,SAAAC,EAAUC,EAAWC,GACnC,GAAID,IAAMC,EACR,OAAO,EAGT,MAAMC,EAAQhI,OAAOiI,KAAKH,GACpBI,EAAQlI,OAAOiI,KAAKF,GAC1B,IAAK,MAAMI,KAAKH,EAAO,CACrB,IAAKE,EAAME,SAASD,GAClB,OAAO,EAGT,MAAME,EAASP,EAA8BK,GACvCG,EAASP,EAA8BI,GAC7C,GAAII,EAASF,IAAUE,EAASD,IAC9B,IAAKT,EAAUQ,EAAOC,GACpB,OAAO,OAEJ,GAAID,IAAUC,EACnB,OAAO,C,CAIX,IAAK,MAAMH,KAAKD,EACd,IAAKF,EAAMI,SAASD,GAClB,OAAO,EAGX,OAAO,CACT,CAEA,SAASI,EAASC,GAChB,OAAiB,OAAVA,GAAmC,kBAAVA,CAClC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrEM,SAAUC,EAAYC,GAG1B,MAAMC,EAAS,GACf,IAAK,MAAOpI,EAAKZ,KAAUK,OAAO4I,QAAQF,GACpClL,MAAMC,QAAQkC,GAChBA,EAAMkJ,SAAQC,IACZH,EAAOrK,KACLyK,mBAAmBxI,GAAO,IAAMwI,mBAAmBD,GACpD,IAGHH,EAAOrK,KAAKyK,mBAAmBxI,GAAO,IAAMwI,mBAAmBpJ,IAGnE,OAAOgJ,EAAO/M,OAAS,IAAM+M,EAAOlM,KAAK,KAAO,EAClD;;;;;;;;;;;;;;;;;MCGauM,EAuCXhK,WAAAA,GAjCQ,KAAMiK,OAAa,GAMnB,KAAIC,KAAa,GAOjB,KAAEC,GAAa,GAMf,KAAIC,KAAa,GAKjB,KAAMC,OAAW,EAKjB,KAAMC,OAAW,EAKvBrM,KAAKsM,UAAY,GAEjBtM,KAAKmM,KAAK,GAAK,IACf,IAAK,IAAIzN,EAAI,EAAGA,EAAIsB,KAAKsM,YAAa5N,EACpCsB,KAAKmM,KAAKzN,GAAK,EAGjBsB,KAAKuM,O,CAGPA,KAAAA,GACEvM,KAAKgM,OAAO,GAAK,WACjBhM,KAAKgM,OAAO,GAAK,WACjBhM,KAAKgM,OAAO,GAAK,WACjBhM,KAAKgM,OAAO,GAAK,UACjBhM,KAAKgM,OAAO,GAAK,WAEjBhM,KAAKoM,OAAS,EACdpM,KAAKqM,OAAS,C,CAShBG,SAAAA,CAAUC,EAAqCC,GACxCA,IACHA,EAAS,GAGX,MAAMC,EAAI3M,KAAKkM,GAGf,GAAmB,kBAARO,EACT,IAAK,IAAI/N,EAAI,EAAGA,EAAI,GAAIA,IAStBiO,EAAEjO,GACC+N,EAAI5N,WAAW6N,IAAW,GAC1BD,EAAI5N,WAAW6N,EAAS,IAAM,GAC9BD,EAAI5N,WAAW6N,EAAS,IAAM,EAC/BD,EAAI5N,WAAW6N,EAAS,GAC1BA,GAAU,OAGZ,IAAK,IAAIhO,EAAI,EAAGA,EAAI,GAAIA,IACtBiO,EAAEjO,GACC+N,EAAIC,IAAW,GACfD,EAAIC,EAAS,IAAM,GACnBD,EAAIC,EAAS,IAAM,EACpBD,EAAIC,EAAS,GACfA,GAAU,EAKd,IAAK,IAAIhO,EAAI,GAAIA,EAAI,GAAIA,IAAK,CAC5B,MAAMkO,EAAID,EAAEjO,EAAI,GAAKiO,EAAEjO,EAAI,GAAKiO,EAAEjO,EAAI,IAAMiO,EAAEjO,EAAI,IAClDiO,EAAEjO,GAA+B,YAAxBkO,GAAK,EAAMA,IAAM,G,CAG5B,IAKIC,EAAG3B,EALHL,EAAI7K,KAAKgM,OAAO,GAChBlB,EAAI9K,KAAKgM,OAAO,GAChBpN,EAAIoB,KAAKgM,OAAO,GAChBc,EAAI9M,KAAKgM,OAAO,GAChB1J,EAAItC,KAAKgM,OAAO,GAIpB,IAAK,IAAItN,EAAI,EAAGA,EAAI,GAAIA,IAAK,CACvBA,EAAI,GACFA,EAAI,IACNmO,EAAIC,EAAKhC,GAAKlM,EAAIkO,GAClB5B,EAAI,aAEJ2B,EAAI/B,EAAIlM,EAAIkO,EACZ5B,EAAI,YAGFxM,EAAI,IACNmO,EAAK/B,EAAIlM,EAAMkO,GAAKhC,EAAIlM,GACxBsM,EAAI,aAEJ2B,EAAI/B,EAAIlM,EAAIkO,EACZ5B,EAAI,YAIR,MAAM0B,GAAO/B,GAAK,EAAMA,IAAM,IAAOgC,EAAIvK,EAAI4I,EAAIyB,EAAEjO,GAAM,WACzD4D,EAAIwK,EACJA,EAAIlO,EACJA,EAA8B,YAAxBkM,GAAK,GAAOA,IAAM,GACxBA,EAAID,EACJA,EAAI+B,C,CAGN5M,KAAKgM,OAAO,GAAMhM,KAAKgM,OAAO,GAAKnB,EAAK,WACxC7K,KAAKgM,OAAO,GAAMhM,KAAKgM,OAAO,GAAKlB,EAAK,WACxC9K,KAAKgM,OAAO,GAAMhM,KAAKgM,OAAO,GAAKpN,EAAK,WACxCoB,KAAKgM,OAAO,GAAMhM,KAAKgM,OAAO,GAAKc,EAAK,WACxC9M,KAAKgM,OAAO,GAAMhM,KAAKgM,OAAO,GAAK1J,EAAK,U,CAG1CyK,MAAAA,CAAOhO,EAAwCJ,GAE7C,GAAa,MAATI,EACF,YAGa6D,IAAXjE,IACFA,EAASI,EAAMJ,QAGjB,MAAMqO,EAAmBrO,EAASqB,KAAKsM,UACvC,IAAIW,EAAI,EAER,MAAMR,EAAMzM,KAAKiM,KACjB,IAAIiB,EAAQlN,KAAKoM,OAGjB,MAAOa,EAAItO,EAAQ,CAKjB,GAAc,IAAVuO,EACF,MAAOD,GAAKD,EACVhN,KAAKwM,UAAUzN,EAAOkO,GACtBA,GAAKjN,KAAKsM,UAId,GAAqB,kBAAVvN,GACT,MAAOkO,EAAItO,EAIT,GAHA8N,EAAIS,GAASnO,EAAMF,WAAWoO,KAC5BC,IACAD,EACEC,IAAUlN,KAAKsM,UAAW,CAC5BtM,KAAKwM,UAAUC,GACfS,EAAQ,EAER,K,OAIJ,MAAOD,EAAItO,EAIT,GAHA8N,EAAIS,GAASnO,EAAMkO,KACjBC,IACAD,EACEC,IAAUlN,KAAKsM,UAAW,CAC5BtM,KAAKwM,UAAUC,GACfS,EAAQ,EAER,K,EAMRlN,KAAKoM,OAASc,EACdlN,KAAKqM,QAAU1N,C,CAIjBwO,MAAAA,GACE,MAAMA,EAAmB,GACzB,IAAIC,EAA0B,EAAdpN,KAAKqM,OAGjBrM,KAAKoM,OAAS,GAChBpM,KAAK+M,OAAO/M,KAAKmM,KAAM,GAAKnM,KAAKoM,QAEjCpM,KAAK+M,OAAO/M,KAAKmM,KAAMnM,KAAKsM,WAAatM,KAAKoM,OAAS,KAIzD,IAAK,IAAI1N,EAAIsB,KAAKsM,UAAY,EAAG5N,GAAK,GAAIA,IACxCsB,KAAKiM,KAAKvN,GAAiB,IAAZ0O,EACfA,GAAa,IAGfpN,KAAKwM,UAAUxM,KAAKiM,MAEpB,IAAIgB,EAAI,EACR,IAAK,IAAIvO,EAAI,EAAGA,EAAI,EAAGA,IACrB,IAAK,IAAI2O,EAAI,GAAIA,GAAK,EAAGA,GAAK,EAC5BF,EAAOF,GAAMjN,KAAKgM,OAAOtN,IAAM2O,EAAK,MAClCJ,EAGN,OAAOE,C,EC7NK,SAAAG,EAAYC,EAAgBC,GAC1C,MAAO,GAAGD,aAAkBC,aAC9B;;;;;;;;;;;;;;;;;AC1BO,MAAMC,EAAoB,SAAUlP,GACzC,MAAMC,EAAgB,GACtB,IAAIC,EAAI,EACR,IAAK,IAAIC,EAAI,EAAGA,EAAIH,EAAII,OAAQD,IAAK,CACnC,IAAIE,EAAIL,EAAIM,WAAWH,GAGvB,GAAIE,GAAK,OAAUA,GAAK,MAAQ,CAC9B,MAAM8O,EAAO9O,EAAI,MACjBF,IACAT,EAAOS,EAAIH,EAAII,OAAQ,2CACvB,MAAMgP,EAAMpP,EAAIM,WAAWH,GAAK,MAChCE,EAAI,OAAW8O,GAAQ,IAAMC,C,CAG3B/O,EAAI,IACNJ,EAAIC,KAAOG,EACFA,EAAI,MACbJ,EAAIC,KAAQG,GAAK,EAAK,IACtBJ,EAAIC,KAAY,GAAJG,EAAU,KACbA,EAAI,OACbJ,EAAIC,KAAQG,GAAK,GAAM,IACvBJ,EAAIC,KAASG,GAAK,EAAK,GAAM,IAC7BJ,EAAIC,KAAY,GAAJG,EAAU,MAEtBJ,EAAIC,KAAQG,GAAK,GAAM,IACvBJ,EAAIC,KAASG,GAAK,GAAM,GAAM,IAC9BJ,EAAIC,KAASG,GAAK,EAAK,GAAM,IAC7BJ,EAAIC,KAAY,GAAJG,EAAU,I,CAG1B,OAAOJ,CACT,EAOaoP,EAAe,SAAUrP,GACpC,IAAIE,EAAI,EACR,IAAK,IAAIC,EAAI,EAAGA,EAAIH,EAAII,OAAQD,IAAK,CACnC,MAAME,EAAIL,EAAIM,WAAWH,GACrBE,EAAI,IACNH,IACSG,EAAI,KACbH,GAAK,EACIG,GAAK,OAAUA,GAAK,OAE7BH,GAAK,EACLC,KAEAD,GAAK,C,CAGT,OAAOA,CACT;;;;;;;;;;;;;;;;;ACrEM,SAAUoP,EACd3E,GAEA,OAAIA,GAAYA,EAA+B4E,UACrC5E,EAA+B4E,UAEhC5E,CAEX,C,o7BClBA,IAAI6E,EAoGAC,EAnGJ,MAAMC,EACJlM,WAAAA,CAAYmM,GAAW,GACrBlO,KAAKkO,SAAWA,EAIhBlO,KAAKmO,SAAU,EAIfnO,KAAKoO,QAAU,GAIfpO,KAAKqO,SAAW,GAChBrO,KAAKsO,OAASP,GACTG,GAAYH,IACf/N,KAAKuO,OAASR,EAAkBS,SAAWT,EAAkBS,OAAS,KAAKnN,KACzErB,MACE,EAER,CACA,UAAIyO,GACF,OAAOzO,KAAKmO,OACd,CACAO,GAAAA,CAAIjE,GACF,GAAIzK,KAAKmO,QAAS,CAChB,MAAMQ,EAAqBZ,EAC3B,IAEE,OADAA,EAAoB/N,KACbyK,GACT,CAAE,QACAsD,EAAoBY,CACtB,CACF,MAAW,CAGb,CAKAC,EAAAA,GACEb,EAAoB/N,IACtB,CAKA6O,GAAAA,GACEd,EAAoB/N,KAAKsO,MAC3B,CACAQ,IAAAA,CAAKC,GACH,GAAI/O,KAAKmO,QAAS,CAChB,IAAIzP,EAAGsQ,EACP,IAAKtQ,EAAI,EAAGsQ,EAAIhP,KAAKoO,QAAQzP,OAAQD,EAAIsQ,EAAGtQ,IAC1CsB,KAAKoO,QAAQ1P,GAAGoQ,OAElB,IAAKpQ,EAAI,EAAGsQ,EAAIhP,KAAKqO,SAAS1P,OAAQD,EAAIsQ,EAAGtQ,IAC3CsB,KAAKqO,SAAS3P,KAEhB,GAAIsB,KAAKwO,OACP,IAAK9P,EAAI,EAAGsQ,EAAIhP,KAAKwO,OAAO7P,OAAQD,EAAIsQ,EAAGtQ,IACzCsB,KAAKwO,OAAO9P,GAAGoQ,MAAK,GAGxB,IAAK9O,KAAKkO,UAAYlO,KAAKsO,SAAWS,EAAY,CAChD,MAAME,EAAOjP,KAAKsO,OAAOE,OAAOU,MAC5BD,GAAQA,IAASjP,OACnBA,KAAKsO,OAAOE,OAAOxO,KAAKuO,OAASU,EACjCA,EAAKV,MAAQvO,KAAKuO,MAEtB,CACAvO,KAAKsO,YAAS,EACdtO,KAAKmO,SAAU,CACjB,CACF,EAEF,SAASgB,EAAYjB,GACnB,OAAO,IAAID,EAAYC,EACzB,CACA,SAASkB,EAAkBC,EAAQC,EAAQvB,GACrCuB,GAASA,EAAMb,QACjBa,EAAMlB,QAAQ/M,KAAKgO,EAEvB,CACA,SAASE,IACP,OAAOxB,CACT,CACA,SAASyB,EAAe/E,GAClBsD,GACFA,EAAkBM,SAAShN,KAAKoJ,EAMpC,CAGA,MAAMgF,EACJ1N,WAAAA,CAAY0I,EAAIiF,EAASC,EAAWL,GAClCtP,KAAKyK,GAAKA,EACVzK,KAAK0P,QAAUA,EACf1P,KAAK2P,UAAYA,EACjB3P,KAAKyO,QAAS,EACdzO,KAAK4P,KAAO,GAIZ5P,KAAK6P,YAAc,EAInB7P,KAAK8P,SAAW,EAIhB9P,KAAK+P,UAAY,EAIjB/P,KAAKgQ,iBAAkB,EAIvBhQ,KAAKiQ,YAAc,EACnBb,EAAkBpP,KAAMsP,EAC1B,CACA,SAAIY,GACF,GAAyB,IAArBlQ,KAAK6P,aAA0C,IAArB7P,KAAK6P,YAAmB,CACpD7P,KAAK6P,YAAc,EACnBM,IACA,IAAK,IAAIzR,EAAI,EAAGA,EAAIsB,KAAKiQ,YAAavR,IAAK,CACzC,MAAM0R,EAAMpQ,KAAK4P,KAAKlR,GACtB,GAAI0R,EAAIC,WACNC,EAAgBF,EAAIC,UAChBrQ,KAAK6P,aAAe,GACtB,KAGN,CACyB,IAArB7P,KAAK6P,cACP7P,KAAK6P,YAAc,GAErBU,GACF,CACA,OAAOvQ,KAAK6P,aAAe,CAC7B,CACA,SAAIK,CAAMM,GACRxQ,KAAK6P,YAAcW,EAAI,EAAI,CAC7B,CACA9B,GAAAA,GAEE,GADA1O,KAAK6P,YAAc,GACd7P,KAAKyO,OACR,OAAOzO,KAAKyK,KAEd,IAAIgG,EAAkBC,EAClBC,EAAa3C,EACjB,IAKE,OAJA0C,GAAc,EACd1C,EAAehO,KACfA,KAAK+P,YACLa,EAAiB5Q,MACVA,KAAKyK,IACd,CAAE,QACAoG,EAAkB7Q,MAClBA,KAAK+P,YACL/B,EAAe2C,EACfD,EAAcD,CAChB,CACF,CACA3B,IAAAA,GACM9O,KAAKyO,SACPmC,EAAiB5Q,MACjB6Q,EAAkB7Q,MAClBA,KAAK8Q,QAAU9Q,KAAK8Q,SACpB9Q,KAAKyO,QAAS,EAElB,EAEF,SAAS6B,EAAgBD,GACvB,OAAOA,EAAS3N,KAClB,CACA,SAASkO,EAAiBG,GACxBA,EAAQjB,WACRiB,EAAQd,YAAc,CACxB,CACA,SAASY,EAAkBE,GACzB,GAAIA,EAAQnB,KAAKjR,OAASoS,EAAQd,YAAa,CAC7C,IAAK,IAAIvR,EAAIqS,EAAQd,YAAavR,EAAIqS,EAAQnB,KAAKjR,OAAQD,IACzDsS,EAAiBD,EAAQnB,KAAKlR,GAAIqS,GAEpCA,EAAQnB,KAAKjR,OAASoS,EAAQd,WAChC,CACF,CACA,SAASe,EAAiBZ,EAAKW,GAC7B,MAAME,EAAUb,EAAIc,IAAIH,QACR,IAAZE,GAAsBF,EAAQjB,WAAamB,IAC7Cb,EAAIe,OAAOJ,GACM,IAAbX,EAAIgB,MACNhB,EAAIiB,UAGV,CACA,SAAShC,EAAO5E,EAAI6G,GACd7G,EAAG4E,kBAAkBI,IACvBhF,EAAKA,EAAG4E,OAAO5E,IAEjB,MAAM8G,EAAU,IAAI9B,EAAehF,EAAI+G,EAAAA,IAAM,KACvCD,EAAQrB,OACVqB,EAAQ7C,KACV,IAEE4C,KACFG,EAAAA,EAAAA,IAAOF,EAASD,GACZA,EAAQhC,OACVF,EAAkBmC,EAASD,EAAQhC,QAElCgC,GAAYA,EAAQI,MACvBH,EAAQ7C,MAEV,MAAMiD,EAASJ,EAAQ7C,IAAIkD,KAAKL,GAEhC,OADAI,EAAOtC,OAASkC,EACTI,CACT,CACA,SAAS7C,EAAK6C,GACZA,EAAOtC,OAAOP,MAChB,CACA,IAAI4B,GAAc,EACdmB,EAAqB,EACzB,MAAMC,EAAa,GACnB,SAAS3B,IACP2B,EAAWzQ,KAAKqP,GAChBA,GAAc,CAChB,CAKA,SAASH,IACP,MAAMtB,EAAO6C,EAAW5C,MACxBwB,OAAuB,IAATzB,GAAyBA,CACzC,CACA,SAAS8C,IACPF,GACF,CACA,SAASG,IACPH,IACA,OAAQA,GAAsBI,EAAsBtT,OAClDsT,EAAsBC,OAAtBD,EAEJ,CACA,SAASE,EAAYpB,EAASX,EAAKgC,GAEjC,GAAIhC,EAAIc,IAAIH,KAAaA,EAAQjB,SAAU,CACzCM,EAAIiC,IAAItB,EAASA,EAAQjB,UACzB,MAAMwC,EAASvB,EAAQnB,KAAKmB,EAAQd,aAChCqC,IAAWlC,GACTkC,GACFtB,EAAiBsB,EAAQvB,GAE3BA,EAAQnB,KAAKmB,EAAQd,eAAiBG,GAEtCW,EAAQd,aAKZ,CACF,CACA,MAAMgC,EAAwB,GAC9B,SAASM,EAAenC,EAAKoC,EAAYJ,GAEvCL,IACA,IAAK,MAAMhB,KAAWX,EAAIpF,OAAQ,CAChC,IAAIyH,EACA1B,EAAQlB,YAAc2C,IAA2B,MAAZC,EAAmBA,EAAWA,EAAWrC,EAAIc,IAAIH,KAAaA,EAAQjB,YAC7GiB,EAAQf,kBAAoBe,EAAQf,gBAA0C,IAAxBe,EAAQlB,aAC9DkB,EAAQlB,YAAc2C,GAEpBzB,EAAQf,kBAAgC,MAAZyC,EAAmBA,EAAWA,EAAWrC,EAAIc,IAAIH,KAAaA,EAAQjB,YAIpGiB,EAAQrB,UACFqB,EAAQhB,YAAagB,EAAQ2B,cAAyC,IAAxB3B,EAAQlB,cAC1DkB,EAAQf,iBAAkB,EACtBe,EAAQpB,WACVsC,EAAsB5Q,KAAK0P,EAAQpB,YAI3C,CACAqC,GACF,CAEA,MAAMW,EAAYA,CAACtB,EAAShB,KAC1B,MAAMD,EAAsB,IAAIwC,IAGhC,OAFAxC,EAAIiB,QAAUA,EACdjB,EAAIC,SAAWA,EACRD,CAAG,EAGNyC,EAA4B,IAAIC,QAChCC,EAAcC,OAA+D,IAC7EC,EAAsBD,OAAuE,IACnG,SAASE,EAAMrQ,EAAQwD,EAAM/C,GAC3B,GAAIoN,GAAe1C,EAAc,CAC/B,IAAImF,EAAUN,EAAU3B,IAAIrO,GACvBsQ,GACHN,EAAUR,IAAIxP,EAAQsQ,EAA0B,IAAIP,KAEtD,IAAIxC,EAAM+C,EAAQjC,IAAI5N,GACjB8M,GACH+C,EAAQd,IAAI/O,EAAK8M,EAAMuC,GAAU,IAAMQ,EAAQhC,OAAO7N,MAExD6O,EACEnE,EACAoC,OAKI,EAER,CACF,CACA,SAASV,EAAQ7M,EAAQwD,EAAM/C,EAAK8P,EAAUC,EAAUC,GACtD,MAAMH,EAAUN,EAAU3B,IAAIrO,GAC9B,IAAKsQ,EACH,OAEF,IAAIvD,EAAO,GACX,GAAa,UAATvJ,EACFuJ,EAAO,IAAIuD,EAAQI,eACd,GAAY,WAARjQ,IAAoB9C,EAAAA,EAAAA,IAAQqC,GAAS,CAC9C,MAAM2Q,EAAYC,OAAOL,GACzBD,EAAQvH,SAAQ,CAACwE,EAAKsD,MACP,WAATA,KAAsBC,EAAAA,EAAAA,IAASD,IAASA,GAAQF,IAClD5D,EAAKvO,KAAK+O,EACZ,GAEJ,MAIE,YAHY,IAAR9M,GACFsM,EAAKvO,KAAK8R,EAAQjC,IAAI5N,IAEhB+C,GACN,IAAK,OACE7F,EAAAA,EAAAA,IAAQqC,IAKF+Q,EAAAA,EAAAA,IAAatQ,IACtBsM,EAAKvO,KAAK8R,EAAQjC,IAAI,YALtBtB,EAAKvO,KAAK8R,EAAQjC,IAAI6B,KAClBc,EAAAA,EAAAA,IAAMhR,IACR+M,EAAKvO,KAAK8R,EAAQjC,IAAI+B,KAK1B,MACF,IAAK,UACEzS,EAAAA,EAAAA,IAAQqC,KACX+M,EAAKvO,KAAK8R,EAAQjC,IAAI6B,KAClBc,EAAAA,EAAAA,IAAMhR,IACR+M,EAAKvO,KAAK8R,EAAQjC,IAAI+B,KAG1B,MACF,IAAK,OACCY,EAAAA,EAAAA,IAAMhR,IACR+M,EAAKvO,KAAK8R,EAAQjC,IAAI6B,IAExB,MAGNhB,IACA,IAAK,MAAM3B,KAAOR,EACZQ,GACFmC,EACEnC,EACA,OAQI,GAIV4B,GACF,CACA,SAAS8B,EAAmBC,EAAQzQ,GAClC,MAAM6P,EAAUN,EAAU3B,IAAI6C,GAC9B,OAAOZ,GAAWA,EAAQjC,IAAI5N,EAChC,CAEA,MAAM0Q,GAAqCC,EAAAA,EAAAA,IAAQ,+BAC7CC,EAAiB,IAAIC,IACTpR,OAAOqR,oBAAoBpB,QAAQqB,QAAQ/Q,GAAgB,cAARA,GAA+B,WAARA,IAAkBkH,KAAKlH,GAAQ0P,OAAO1P,KAAM+Q,OAAOV,EAAAA,KAEzIW,EAAwCC,IAC9C,SAASA,IACP,MAAMC,EAAmB,CAAC,EAyB1B,MAxBA,CAAC,WAAY,UAAW,eAAe5I,SAAStI,IAC9CkR,EAAiBlR,GAAO,YAAYmR,GAClC,MAAMC,EAAMC,GAAM3U,MAClB,IAAK,IAAItB,EAAI,EAAGsQ,EAAIhP,KAAKrB,OAAQD,EAAIsQ,EAAGtQ,IACtCwU,EAAMwB,EAAK,MAAOhW,EAAI,IAExB,MAAMiM,EAAM+J,EAAIpR,MAAQmR,GACxB,OAAa,IAAT9J,IAAsB,IAARA,EACT+J,EAAIpR,MAAQmR,EAAKjK,IAAImK,KAErBhK,CAEX,CAAC,IAEH,CAAC,OAAQ,MAAO,QAAS,UAAW,UAAUiB,SAAStI,IACrDkR,EAAiBlR,GAAO,YAAYmR,GAClCtE,IACA4B,IACA,MAAMpH,EAAMgK,GAAM3U,MAAMsD,GAAKsR,MAAM5U,KAAMyU,GAGzC,OAFAzC,IACAzB,IACO5F,CACT,CAAC,IAEI6J,CACT,CACA,SAASpR,EAAeE,IACjBqQ,EAAAA,EAAAA,IAASrQ,KACZA,EAAMpE,OAAOoE,IACf,MAAM8G,EAAMuK,GAAM3U,MAElB,OADAkT,EAAM9I,EAAK,MAAO9G,GACX8G,EAAIhH,eAAeE,EAC5B,CACA,MAAMuR,EACJ9S,WAAAA,CAAY+S,GAAc,EAAOC,GAAa,GAC5C/U,KAAK8U,YAAcA,EACnB9U,KAAK+U,WAAaA,CACpB,CACA7D,GAAAA,CAAIrO,EAAQS,EAAK0R,GACf,MAAMC,EAAcjV,KAAK8U,YAAaI,EAAalV,KAAK+U,WACxD,GAAY,mBAARzR,EACF,OAAQ2R,EACH,GAAY,mBAAR3R,EACT,OAAO2R,EACF,GAAY,kBAAR3R,EACT,OAAO4R,EACF,GAAY,YAAR5R,EACT,OAAI0R,KAAcC,EAAcC,EAAaC,GAAqBC,GAAcF,EAAaG,GAAqBC,IAAapE,IAAIrO,IAEnIE,OAAOwS,eAAe1S,KAAYE,OAAOwS,eAAeP,GAC/CnS,OAET,EAEF,MAAM2S,GAAgBhV,EAAAA,EAAAA,IAAQqC,GAC9B,IAAKoS,EAAa,CAChB,GAAIO,IAAiBC,EAAAA,EAAAA,IAAOnB,EAAuBhR,GACjD,OAAOoS,QAAQxE,IAAIoD,EAAuBhR,EAAK0R,GAEjD,GAAY,mBAAR1R,EACF,OAAOF,CAEX,CACA,MAAMuH,EAAM+K,QAAQxE,IAAIrO,EAAQS,EAAK0R,GACrC,QAAIrB,EAAAA,EAAAA,IAASrQ,GAAO4Q,EAAeyB,IAAIrS,GAAO0Q,EAAmB1Q,IACxDqH,GAEJsK,GACH/B,EAAMrQ,EAAQ,MAAOS,GAEnB4R,EACKvK,EAELiL,GAAMjL,GACD6K,IAAiB5B,EAAAA,EAAAA,IAAatQ,GAAOqH,EAAMA,EAAIjI,OAEpD4I,EAAAA,EAAAA,IAASX,GACJsK,EAAcY,GAASlL,GAAOmL,GAASnL,GAEzCA,EACT,EAEF,MAAMoL,UAA+BlB,EACnC9S,WAAAA,CAAYmT,GAAa,GACvBtM,OAAM,EAAOsM,EACf,CACA7C,GAAAA,CAAIxP,EAAQS,EAAKZ,EAAOsS,GACtB,IAAI3B,EAAWxQ,EAAOS,GACtB,IAAKtD,KAAK+U,WAAY,CACpB,MAAMiB,EAAqBC,GAAW5C,GAKtC,GAJK6C,GAAUxT,IAAWuT,GAAWvT,KACnC2Q,EAAWsB,GAAMtB,GACjB3Q,EAAQiS,GAAMjS,MAEXlC,EAAAA,EAAAA,IAAQqC,IAAW+S,GAAMvC,KAAcuC,GAAMlT,GAChD,OAAIsT,IAGF3C,EAAS3Q,MAAQA,GACV,EAGb,CACA,MAAMyT,GAAS3V,EAAAA,EAAAA,IAAQqC,KAAW+Q,EAAAA,EAAAA,IAAatQ,GAAOmQ,OAAOnQ,GAAOT,EAAOlE,QAAS8W,EAAAA,EAAAA,IAAO5S,EAAQS,GAC7F6E,EAASuN,QAAQrD,IAAIxP,EAAQS,EAAKZ,EAAOsS,GAQ/C,OAPInS,IAAW8R,GAAMK,KACdmB,GAEMC,EAAAA,EAAAA,IAAW1T,EAAO2Q,IAC3B3D,EAAQ7M,EAAQ,MAAOS,EAAKZ,EAAO2Q,GAFnC3D,EAAQ7M,EAAQ,MAAOS,EAAKZ,IAKzByF,CACT,CACAkO,cAAAA,CAAexT,EAAQS,GACrB,MAAM6S,GAASV,EAAAA,EAAAA,IAAO5S,EAAQS,GACxB+P,EAAWxQ,EAAOS,GAClB6E,EAASuN,QAAQW,eAAexT,EAAQS,GAI9C,OAHI6E,GAAUgO,GACZzG,EAAQ7M,EAAQ,SAAUS,OAAK,EAAQ+P,GAElClL,CACT,CACAwN,GAAAA,CAAI9S,EAAQS,GACV,MAAM6E,EAASuN,QAAQC,IAAI9S,EAAQS,GAInC,OAHKqQ,EAAAA,EAAAA,IAASrQ,IAAS4Q,EAAeyB,IAAIrS,IACxC4P,EAAMrQ,EAAQ,MAAOS,GAEhB6E,CACT,CACAmO,OAAAA,CAAQzT,GAMN,OALAqQ,EACErQ,EACA,WACArC,EAAAA,EAAAA,IAAQqC,GAAU,SAAWkQ,GAExB2C,QAAQY,QAAQzT,EACzB,EAEF,MAAM0T,UAAgC1B,EACpC9S,WAAAA,CAAYmT,GAAa,GACvBtM,OAAM,EAAMsM,EACd,CACA7C,GAAAA,CAAIxP,EAAQS,GAOV,OAAO,CACT,CACA+S,cAAAA,CAAexT,EAAQS,GAOrB,OAAO,CACT,EAEF,MAAMkT,EAAkC,IAAIT,EACtCU,EAAmC,IAAIF,EACvCG,EAA0C,IAAIX,GAClD,GAEIY,EAA0C,IAAIJ,GAAwB,GAEtEK,EAAalU,GAAUA,EACvBmU,EAAYrG,GAAMkF,QAAQH,eAAe/E,GAC/C,SAASU,EAAIrO,EAAQS,EAAK2S,GAAa,EAAOC,GAAY,GACxDrT,EAASA,EAAO,WAChB,MAAMiU,EAAYnC,GAAM9R,GAClBkU,EAASpC,GAAMrR,GAChB2S,KACCG,EAAAA,EAAAA,IAAW9S,EAAKyT,IAClB7D,EAAM4D,EAAW,MAAOxT,GAE1B4P,EAAM4D,EAAW,MAAOC,IAE1B,MAAQpB,IAAKqB,GAASH,EAASC,GACzBG,EAAOf,EAAYU,EAAYX,EAAaiB,GAAaC,GAC/D,OAAIH,EAAK3M,KAAKyM,EAAWxT,GAChB2T,EAAKpU,EAAOqO,IAAI5N,IACd0T,EAAK3M,KAAKyM,EAAWC,GACvBE,EAAKpU,EAAOqO,IAAI6F,SACdlU,IAAWiU,GACpBjU,EAAOqO,IAAI5N,GAEf,CACA,SAASqS,EAAIrS,EAAK2S,GAAa,GAC7B,MAAMpT,EAAS7C,KAAK,WACd8W,EAAYnC,GAAM9R,GAClBkU,EAASpC,GAAMrR,GAOrB,OANK2S,KACCG,EAAAA,EAAAA,IAAW9S,EAAKyT,IAClB7D,EAAM4D,EAAW,MAAOxT,GAE1B4P,EAAM4D,EAAW,MAAOC,IAEnBzT,IAAQyT,EAASlU,EAAO8S,IAAIrS,GAAOT,EAAO8S,IAAIrS,IAAQT,EAAO8S,IAAIoB,EAC1E,CACA,SAAS3F,EAAKvO,EAAQoT,GAAa,GAGjC,OAFApT,EAASA,EAAO,YACfoT,GAAc/C,EAAMyB,GAAM9R,GAAS,UAAWkQ,GACxC2C,QAAQxE,IAAIrO,EAAQ,OAAQA,EACrC,CACA,SAASuU,EAAI1U,GACXA,EAAQiS,GAAMjS,GACd,MAAMG,EAAS8R,GAAM3U,MACfqX,EAAQR,EAAShU,GACjBsT,EAASkB,EAAM1B,IAAItL,KAAKxH,EAAQH,GAKtC,OAJKyT,IACHtT,EAAOuU,IAAI1U,GACXgN,EAAQ7M,EAAQ,MAAOH,EAAOA,IAEzB1C,IACT,CACA,SAASqS,EAAI/O,EAAKZ,GAChBA,EAAQiS,GAAMjS,GACd,MAAMG,EAAS8R,GAAM3U,OACb2V,IAAKqB,EAAM9F,IAAKoG,GAAST,EAAShU,GAC1C,IAAIsT,EAASa,EAAK3M,KAAKxH,EAAQS,GAC1B6S,IACH7S,EAAMqR,GAAMrR,GACZ6S,EAASa,EAAK3M,KAAKxH,EAAQS,IAI7B,MAAM+P,EAAWiE,EAAKjN,KAAKxH,EAAQS,GAOnC,OANAT,EAAOwP,IAAI/O,EAAKZ,GACXyT,GAEMC,EAAAA,EAAAA,IAAW1T,EAAO2Q,IAC3B3D,EAAQ7M,EAAQ,MAAOS,EAAKZ,EAAO2Q,GAFnC3D,EAAQ7M,EAAQ,MAAOS,EAAKZ,GAIvB1C,IACT,CACA,SAASuX,GAAYjU,GACnB,MAAMT,EAAS8R,GAAM3U,OACb2V,IAAKqB,EAAM9F,IAAKoG,GAAST,EAAShU,GAC1C,IAAIsT,EAASa,EAAK3M,KAAKxH,EAAQS,GAC1B6S,IACH7S,EAAMqR,GAAMrR,GACZ6S,EAASa,EAAK3M,KAAKxH,EAAQS,IAI7B,MAAM+P,EAAWiE,EAAOA,EAAKjN,KAAKxH,EAAQS,QAAO,EAC3C6E,EAAStF,EAAOsO,OAAO7N,GAI7B,OAHI6S,GACFzG,EAAQ7M,EAAQ,SAAUS,OAAK,EAAQ+P,GAElClL,CACT,CACA,SAASqP,KACP,MAAM3U,EAAS8R,GAAM3U,MACfyX,EAA2B,IAAhB5U,EAAOuO,KAClBkC,OAA4G,EAC5GnL,EAAStF,EAAO2U,QAItB,OAHIC,GACF/H,EAAQ7M,EAAQ,aAAS,OAAQ,EAAQyQ,GAEpCnL,CACT,CACA,SAASuP,GAAczB,EAAYC,GACjC,OAAO,SAAiBrQ,EAAU8R,GAChC,MAAMC,EAAW5X,KACX6C,EAAS+U,EAAS,WAClBd,EAAYnC,GAAM9R,GAClBoU,EAAOf,EAAYU,EAAYX,EAAaiB,GAAaC,GAE/D,OADClB,GAAc/C,EAAM4D,EAAW,UAAW/D,GACpClQ,EAAO+I,SAAQ,CAAClJ,EAAOY,IACrBuC,EAASwE,KAAKsN,EAASV,EAAKvU,GAAQuU,EAAK3T,GAAMsU,IAE1D,CACF,CACA,SAASC,GAAqBC,EAAQ7B,EAAYC,GAChD,OAAO,YAAYzB,GACjB,MAAM5R,EAAS7C,KAAK,WACd8W,EAAYnC,GAAM9R,GAClBkV,GAAclE,EAAAA,EAAAA,IAAMiD,GACpBkB,EAAoB,YAAXF,GAAwBA,IAAW9E,OAAOiF,UAAYF,EAC/DG,EAAuB,SAAXJ,GAAqBC,EACjCI,EAAgBtV,EAAOiV,MAAWrD,GAClCwC,EAAOf,EAAYU,EAAYX,EAAaiB,GAAaC,GAM/D,OALClB,GAAc/C,EACb4D,EACA,UACAoB,EAAYjF,EAAsBF,GAE7B,CAELqF,IAAAA,GACE,MAAM,MAAE1V,EAAK,KAAE2V,GAASF,EAAcC,OACtC,OAAOC,EAAO,CAAE3V,QAAO2V,QAAS,CAC9B3V,MAAOsV,EAAS,CAACf,EAAKvU,EAAM,IAAKuU,EAAKvU,EAAM,KAAOuU,EAAKvU,GACxD2V,OAEJ,EAEA,CAACrF,OAAOiF,YACN,OAAOjY,IACT,EAEJ,CACF,CACA,SAASsY,GAAqBjS,GAC5B,OAAO,YAAYoO,GAQjB,MAAgB,WAATpO,IAAqC,UAATA,OAAmB,EAASrG,KACjE,CACF,CACA,SAASuY,KACP,MAAMC,EAA2B,CAC/BtH,GAAAA,CAAI5N,GACF,OAAO4N,EAAIlR,KAAMsD,EACnB,EACA,QAAI8N,GACF,OAAOA,EAAKpR,KACd,EACA2V,MACAyB,MACA/E,MACAlB,OAAQoG,GACRC,SACA5L,QAAS8L,IAAc,GAAO,IAE1Be,EAA2B,CAC/BvH,GAAAA,CAAI5N,GACF,OAAO4N,EAAIlR,KAAMsD,GAAK,GAAO,EAC/B,EACA,QAAI8N,GACF,OAAOA,EAAKpR,KACd,EACA2V,MACAyB,MACA/E,MACAlB,OAAQoG,GACRC,SACA5L,QAAS8L,IAAc,GAAO,IAE1BgB,EAA4B,CAChCxH,GAAAA,CAAI5N,GACF,OAAO4N,EAAIlR,KAAMsD,GAAK,EACxB,EACA,QAAI8N,GACF,OAAOA,EAAKpR,MAAM,EACpB,EACA2V,GAAAA,CAAIrS,GACF,OAAOqS,EAAItL,KAAKrK,KAAMsD,GAAK,EAC7B,EACA8T,IAAKkB,GAAqB,OAC1BjG,IAAKiG,GAAqB,OAC1BnH,OAAQmH,GAAqB,UAC7Bd,MAAOc,GAAqB,SAC5B1M,QAAS8L,IAAc,GAAM,IAEzBiB,EAAmC,CACvCzH,GAAAA,CAAI5N,GACF,OAAO4N,EAAIlR,KAAMsD,GAAK,GAAM,EAC9B,EACA,QAAI8N,GACF,OAAOA,EAAKpR,MAAM,EACpB,EACA2V,GAAAA,CAAIrS,GACF,OAAOqS,EAAItL,KAAKrK,KAAMsD,GAAK,EAC7B,EACA8T,IAAKkB,GAAqB,OAC1BjG,IAAKiG,GAAqB,OAC1BnH,OAAQmH,GAAqB,UAC7Bd,MAAOc,GAAqB,SAC5B1M,QAAS8L,IAAc,GAAM,IAEzBkB,EAAkB,CACtB,OACA,SACA,UACA5F,OAAOiF,UAYT,OAVAW,EAAgBhN,SAASkM,IACvBU,EAAyBV,GAAUD,GAAqBC,GAAQ,GAAO,GACvEY,EAA0BZ,GAAUD,GAAqBC,GAAQ,GAAM,GACvEW,EAAyBX,GAAUD,GAAqBC,GAAQ,GAAO,GACvEa,EAAiCb,GAAUD,GACzCC,GACA,GACA,EACD,IAEI,CACLU,EACAE,EACAD,EACAE,EAEJ,CACA,MACEE,GACAC,GACAC,GACAC,IACkBT,KACpB,SAASU,GAA4BhD,EAAYiD,GAC/C,MAAM1E,EAAmB0E,EAAUjD,EAAa+C,GAAkCD,GAA0B9C,EAAa6C,GAA2BD,GACpJ,MAAO,CAAChW,EAAQS,EAAK0R,IACP,mBAAR1R,GACM2S,EACS,mBAAR3S,EACF2S,EACU,YAAR3S,EACFT,EAEF6S,QAAQxE,KACbuE,EAAAA,EAAAA,IAAOjB,EAAkBlR,IAAQA,KAAOT,EAAS2R,EAAmB3R,EACpES,EACA0R,EAGN,CACA,MAAMmE,GAA4B,CAChCjI,IAAqB+H,IAA4B,GAAO,IAEpDG,GAA4B,CAChClI,IAAqB+H,IAA4B,GAAO,IAEpDI,GAA6B,CACjCnI,IAAqB+H,IAA4B,GAAM,IAEnDK,GAAoC,CACxCpI,IAAqB+H,IAA4B,GAAM,IAYzD,MAAM3D,GAA8B,IAAIxC,QAClCuC,GAAqC,IAAIvC,QACzCsC,GAA8B,IAAItC,QAClCqC,GAAqC,IAAIrC,QAC/C,SAASyG,GAAcC,GACrB,OAAQA,GACN,IAAK,SACL,IAAK,QACH,OAAO,EACT,IAAK,MACL,IAAK,MACL,IAAK,UACL,IAAK,UACH,OAAO,EACT,QACE,OAAO,EAEb,CACA,SAASC,GAAc/W,GACrB,OAAOA,EAAM,cAAgBK,OAAO2W,aAAahX,GAAS,EAAkB6W,IAAcI,EAAAA,EAAAA,IAAUjX,GACtG,CACA,SAASoT,GAASjT,GAChB,OAAIoT,GAAWpT,GACNA,EAEF+W,GACL/W,GACA,EACA2T,EACA2C,GACA7D,GAEJ,CACA,SAASuE,GAAgBhX,GACvB,OAAO+W,GACL/W,GACA,EACA6T,EACA0C,GACA/D,GAEJ,CACA,SAASQ,GAAShT,GAChB,OAAO+W,GACL/W,GACA,EACA4T,EACA4C,GACAjE,GAEJ,CACA,SAAS0E,GAAgBjX,GACvB,OAAO+W,GACL/W,GACA,EACA8T,EACA2C,GACAnE,GAEJ,CACA,SAASyE,GAAqB/W,EAAQoS,EAAa8E,EAAcC,EAAoBC,GACnF,KAAK3O,EAAAA,EAAAA,IAASzI,GAIZ,OAAOA,EAET,GAAIA,EAAO,cAAgBoS,IAAepS,EAAO,mBAC/C,OAAOA,EAET,MAAMqX,EAAgBD,EAAS/I,IAAIrO,GACnC,GAAIqX,EACF,OAAOA,EAET,MAAMC,EAAaV,GAAc5W,GACjC,GAAmB,IAAfsX,EACF,OAAOtX,EAET,MAAMuX,EAAQ,IAAIC,MAChBxX,EACe,IAAfsX,EAAoCH,EAAqBD,GAG3D,OADAE,EAAS5H,IAAIxP,EAAQuX,GACdA,CACT,CACA,SAASE,GAAW5X,GAClB,OAAIuT,GAAWvT,GACN4X,GAAW5X,EAAM,eAEhBA,IAASA,EAAM,kBAC3B,CACA,SAASuT,GAAWvT,GAClB,SAAUA,IAASA,EAAM,kBAC3B,CACA,SAASwT,GAAUxT,GACjB,SAAUA,IAASA,EAAM,iBAC3B,CACA,SAAS6X,GAAQ7X,GACf,QAAOA,KAAUA,EAAM,UACzB,CACA,SAASiS,GAAMiD,GACb,MAAM4C,EAAM5C,GAAYA,EAAS,WACjC,OAAO4C,EAAM7F,GAAM6F,GAAO5C,CAC5B,CACA,SAAS6C,GAAQ/X,GAIf,OAHIK,OAAO2W,aAAahX,KACtBgY,EAAAA,EAAAA,IAAIhY,EAAO,YAAY,GAElBA,CACT,CACA,MAAMyU,GAAczU,IAAU4I,EAAAA,EAAAA,IAAS5I,GAASoT,GAASpT,GAASA,EAC5DwU,GAAcxU,IAAU4I,EAAAA,EAAAA,IAAS5I,GAASmT,GAASnT,GAASA,EAGlE,MAAMiY,GACJ5Y,WAAAA,CAAY6Y,EAAQC,EAAS5E,EAAY6E,GACvC9a,KAAK4a,OAASA,EACd5a,KAAK6a,QAAUA,EACf7a,KAAKoQ,SAAM,EACXpQ,KAAK+a,WAAY,EACjB/a,KAAK,mBAAoB,EACzBA,KAAKqP,OAAS,IAAII,GAChB,IAAMmL,EAAO5a,KAAKgb,UAClB,IAAMC,GACJjb,KAC4B,IAA5BA,KAAKqP,OAAOQ,YAAoB,EAAI,KAGxC7P,KAAKqP,OAAOgB,SAAWrQ,KACvBA,KAAKqP,OAAOZ,OAASzO,KAAKkb,YAAcJ,EACxC9a,KAAK,kBAAoBiW,CAC3B,CACA,SAAIvT,GACF,MAAMc,EAAOmR,GAAM3U,MAanB,OAZMwD,EAAK0X,aAAc1X,EAAK6L,OAAOa,SAAUkG,EAAAA,EAAAA,IAAW5S,EAAKwX,OAAQxX,EAAKwX,OAASxX,EAAK6L,OAAOX,QAC/FuM,GAAgBzX,EAAM,GAExB2X,GAAc3X,GACVA,EAAK6L,OAAOQ,aAAe,GAM7BoL,GAAgBzX,EAAM,GAEjBA,EAAKwX,MACd,CACA,SAAItY,CAAM0Q,GACRpT,KAAK6a,QAAQzH,EACf,CAEA,UAAIgI,GACF,OAAOpb,KAAKqP,OAAOa,KACrB,CACA,UAAIkL,CAAO5K,GACTxQ,KAAKqP,OAAOa,MAAQM,CACtB,EAGF,SAASH,GAASgL,EAAiBC,EAAcR,GAAQ,GACvD,IAAIF,EACAW,EACJ,MAAMC,GAAaC,EAAAA,EAAAA,IAAWJ,GAC1BG,GACFZ,EAASS,EACTE,EAEI/J,EAAAA,KAEJoJ,EAASS,EAAgBnK,IACzBqK,EAASF,EAAgBhJ,KAE3B,MAAMqJ,EAAO,IAAIf,GAAgBC,EAAQW,EAAQC,IAAeD,EAAQT,GAKxE,OAAOY,CACT,CAEA,SAASP,GAAcQ,GACrB,IAAIhX,EACA+L,GAAe1C,IACjB2N,EAAOhH,GAAMgH,GACbxJ,EACEnE,EACmB,OAAlBrJ,EAAKgX,EAAKvL,KAAezL,EAAKgX,EAAKvL,IAAMuC,GACxC,IAAMgJ,EAAKvL,SAAM,GACjBuL,aAAgBhB,GAAkBgB,OAAO,QAMvC,GAGV,CACA,SAASV,GAAgBU,EAAMnJ,EAAa,EAAGoJ,GAC7CD,EAAOhH,GAAMgH,GACb,MAAMvL,EAAMuL,EAAKvL,IACbA,GACFmC,EACEnC,EACAoC,OAMI,EAGV,CACA,SAASoD,GAAMiG,GACb,SAAUA,IAAqB,IAAhBA,EAAEd,UACnB,CACA,SAASe,GAAIpZ,GACX,OAAOqZ,GAAUrZ,GAAO,EAC1B,CACA,SAASsZ,GAAWtZ,GAClB,OAAOqZ,GAAUrZ,GAAO,EAC1B,CACA,SAASqZ,GAAUE,EAAU/C,GAC3B,OAAItD,GAAMqG,GACDA,EAEF,IAAIC,GAAQD,EAAU/C,EAC/B,CACA,MAAMgD,GACJna,WAAAA,CAAYW,EAAOyZ,GACjBnc,KAAKmc,cAAgBA,EACrBnc,KAAKoQ,SAAM,EACXpQ,KAAK+a,WAAY,EACjB/a,KAAKoc,UAAYD,EAAgBzZ,EAAQiS,GAAMjS,GAC/C1C,KAAKgb,OAASmB,EAAgBzZ,EAAQyU,GAAWzU,EACnD,CACA,SAAIA,GAEF,OADAyY,GAAcnb,MACPA,KAAKgb,MACd,CACA,SAAItY,CAAMkZ,GACR,MAAMS,EAAiBrc,KAAKmc,eAAiBjG,GAAU0F,IAAW3F,GAAW2F,GAC7EA,EAASS,EAAiBT,EAASjH,GAAMiH,IACrCxF,EAAAA,EAAAA,IAAWwF,EAAQ5b,KAAKoc,aAC1Bpc,KAAKoc,UAAYR,EACjB5b,KAAKgb,OAASqB,EAAiBT,EAASzE,GAAWyE,GACnDX,GAAgBjb,KAAM,EAAG4b,GAE7B,EAEF,SAASU,GAAWX,GAClBV,GAAgBU,EAAM,OAA4D,EACpF,CACA,SAASY,GAAMZ,GACb,OAAO/F,GAAM+F,GAAQA,EAAKjZ,MAAQiZ,CACpC,CACA,SAASa,GAAQ1Z,GACf,OAAO2Y,EAAAA,EAAAA,IAAW3Y,GAAUA,IAAWyZ,GAAMzZ,EAC/C,CACA,MAAM2Z,GAAwB,CAC5BvL,IAAKA,CAACrO,EAAQS,EAAK0R,IAAauH,GAAM7G,QAAQxE,IAAIrO,EAAQS,EAAK0R,IAC/D3C,IAAKA,CAACxP,EAAQS,EAAKZ,EAAOsS,KACxB,MAAM3B,EAAWxQ,EAAOS,GACxB,OAAIsS,GAAMvC,KAAcuC,GAAMlT,IAC5B2Q,EAAS3Q,MAAQA,GACV,GAEAgT,QAAQrD,IAAIxP,EAAQS,EAAKZ,EAAOsS,EACzC,GAGJ,SAAS0H,GAAUC,GACjB,OAAOrC,GAAWqC,GAAkBA,EAAiB,IAAItC,MAAMsC,EAAgBF,GACjF,CACA,MAAMG,GACJ7a,WAAAA,CAAY8a,GACV7c,KAAKoQ,SAAM,EACXpQ,KAAK+a,WAAY,EACjB,MAAM,IAAE7J,EAAG,IAAEmB,GAAQwK,GACnB,IAAM1B,GAAcnb,QACpB,IAAMib,GAAgBjb,QAExBA,KAAK8c,KAAO5L,EACZlR,KAAK+c,KAAO1K,CACd,CACA,SAAI3P,GACF,OAAO1C,KAAK8c,MACd,CACA,SAAIpa,CAAMkZ,GACR5b,KAAK+c,KAAKnB,EACZ,EAEF,SAASoB,GAAUH,GACjB,OAAO,IAAID,GAAcC,EAC3B,CACA,SAASI,GAAOlJ,GAId,MAAMmJ,GAAM1c,EAAAA,EAAAA,IAAQuT,GAAU,IAAIxT,MAAMwT,EAAOpV,QAAU,CAAC,EAC1D,IAAK,MAAM2E,KAAOyQ,EAChBmJ,EAAI5Z,GAAO6Z,GAAcpJ,EAAQzQ,GAEnC,OAAO4Z,CACT,CACA,MAAME,GACJrb,WAAAA,CAAYsb,EAASC,EAAMC,GACzBvd,KAAKqd,QAAUA,EACfrd,KAAKsd,KAAOA,EACZtd,KAAKud,cAAgBA,EACrBvd,KAAK+a,WAAY,CACnB,CACA,SAAIrY,GACF,MAAM8a,EAAMxd,KAAKqd,QAAQrd,KAAKsd,MAC9B,YAAe,IAARE,EAAiBxd,KAAKud,cAAgBC,CAC/C,CACA,SAAI9a,CAAMkZ,GACR5b,KAAKqd,QAAQrd,KAAKsd,MAAQ1B,CAC5B,CACA,OAAIxL,GACF,OAAO0D,EAAmBa,GAAM3U,KAAKqd,SAAUrd,KAAKsd,KACtD,EAEF,MAAMG,GACJ1b,WAAAA,CAAY2b,GACV1d,KAAK0d,QAAUA,EACf1d,KAAK+a,WAAY,EACjB/a,KAAK2d,gBAAiB,CACxB,CACA,SAAIjb,GACF,OAAO1C,KAAK0d,SACd,EAEF,SAASE,GAAM9a,EAAQQ,EAAKua,GAC1B,OAAIjI,GAAM9S,GACDA,GACE2Y,EAAAA,EAAAA,IAAW3Y,GACb,IAAI2a,GAAc3a,IAChBwI,EAAAA,EAAAA,IAASxI,IAAWgb,UAAUnf,OAAS,EACzCwe,GAAcra,EAAQQ,EAAKua,GAE3B/B,GAAIhZ,EAEf,CACA,SAASqa,GAAcra,EAAQQ,EAAKua,GAClC,MAAML,EAAM1a,EAAOQ,GACnB,OAAOsS,GAAM4H,GAAOA,EAAM,IAAIJ,GAActa,EAAQQ,EAAKua,EAC3D,CAEA,MAEME,GAAe,CACnB,IAAO,MACP,IAAO,MACP,QAAW,WAEPC,GAAiB,CACrB,IAAO,MACP,IAAO,MACP,OAAU,SACV,MAAS,Q;;;;;;ACjsCX,MAAMC,EAAQ,GAOd,SAASC,EAAOC,KAAQ1J,IACtBtE,EAAAA,EAAAA,MACA,MAAMiO,EAAWH,EAAMtf,OAASsf,EAAMA,EAAMtf,OAAS,GAAG0f,UAAY,KAC9DC,EAAiBF,GAAYA,EAASG,WAAWjZ,OAAOkZ,YACxDC,EAAQC,IACd,GAAIJ,EACFK,EACEL,EACAF,EACA,GACA,CACED,EAAM1J,EAAKjK,KAAKK,IACd,IAAIlG,EAAIC,EACR,OAAiE,OAAzDA,EAA0B,OAApBD,EAAKkG,EAAE+T,eAAoB,EAASja,EAAG0F,KAAKQ,IAAcjG,EAAKZ,KAAKoD,UAAUyD,EAAE,IAC7FrL,KAAK,IACR4e,GAAYA,EAAShE,MACrBqE,EAAMjU,KACJ,EAAGqU,WAAY,OAAOC,GAAoBV,EAAUS,EAAMxY,WAC1D7G,KAAK,MACPif,QAGC,CACL,MAAMM,EAAW,CAAC,eAAeZ,OAAU1J,GACvCgK,EAAM9f,QAERogB,EAAS1d,KAAK,QACd2d,EAAYP,IAEdlc,QAAQ0c,QAAQF,EAClB,EACAxO,EAAAA,EAAAA,KACF,CACA,SAASmO,IACP,IAAIQ,EAAejB,EAAMA,EAAMtf,OAAS,GACxC,IAAKugB,EACH,MAAO,GAET,MAAMC,EAAkB,GACxB,MAAOD,EAAc,CACnB,MAAMjQ,EAAOkQ,EAAgB,GACzBlQ,GAAQA,EAAK4P,QAAUK,EACzBjQ,EAAKmQ,eAELD,EAAgB9d,KAAK,CACnBwd,MAAOK,EACPE,aAAc,IAGlB,MAAMC,EAAiBH,EAAab,WAAaa,EAAab,UAAU/P,OACxE4Q,EAAeG,GAAkBA,EAAeR,KAClD,CACA,OAAOM,CACT,CACA,SAASH,EAAYP,GACnB,MAAMa,EAAO,GAKb,OAJAb,EAAM7S,SAAQ,CAAC2T,EAAO7gB,KACpB4gB,EAAKje,QAAc,IAAN3C,EAAU,GAAK,CAAC,SAC1B8gB,EAAiBD,GAAO,IAEtBD,CACT,CACA,SAASE,GAAiB,MAAEX,EAAK,aAAEO,IACjC,MAAMK,EAAUL,EAAe,EAAI,QAAQA,qBAAkC,GACvEM,IAASb,EAAMR,WAAsC,MAA1BQ,EAAMR,UAAU/P,OAC3CrG,EAAO,QAAQ6W,GACnBD,EAAMR,UACNQ,EAAMxY,KACNqZ,KAEItX,EAAQ,IAAMqX,EACpB,OAAOZ,EAAMc,MAAQ,CAAC1X,KAAS2X,EAAYf,EAAMc,OAAQvX,GAAS,CAACH,EAAOG,EAC5E,CACA,SAASwX,EAAYD,GACnB,MAAMhV,EAAM,GACNK,EAAOjI,OAAOiI,KAAK2U,GAOzB,OANA3U,EAAK6U,MAAM,EAAG,GAAGjU,SAAStI,IACxBqH,EAAItJ,QAAQye,EAAWxc,EAAKqc,EAAMrc,IAAM,IAEtC0H,EAAKrM,OAAS,GAChBgM,EAAItJ,KAAK,QAEJsJ,CACT,CACA,SAASmV,EAAWxc,EAAKZ,EAAO8X,GAC9B,OAAIuF,EAAAA,EAAAA,IAASrd,IACXA,EAAQsB,KAAKoD,UAAU1E,GAChB8X,EAAM9X,EAAQ,CAAC,GAAGY,KAAOZ,MACN,kBAAVA,GAAuC,mBAAVA,GAAgC,MAATA,EAC7D8X,EAAM9X,EAAQ,CAAC,GAAGY,KAAOZ,MACvBkT,EAAAA,EAAAA,IAAMlT,IACfA,EAAQod,EAAWxc,GAAKqR,EAAAA,EAAAA,IAAMjS,EAAMA,QAAQ,GACrC8X,EAAM9X,EAAQ,CAAC,GAAGY,SAAYZ,EAAO,OACnC+Y,EAAAA,EAAAA,IAAW/Y,GACb,CAAC,GAAGY,OAASZ,EAAMV,KAAO,IAAIU,EAAMV,QAAU,OAErDU,GAAQiS,EAAAA,EAAAA,IAAMjS,GACP8X,EAAM9X,EAAQ,CAAC,GAAGY,KAAQZ,GAErC,CACA,SAASsd,EAAaxC,EAAKnX,GAU3B,CAEA,MAAM4Z,EAAa,CACjB,eAAkB,EAClB,EAAK,iBACL,gBAAmB,EACnB,EAAK,kBACL,aAAgB,EAChB,EAAK,eACL,eAAkB,EAClB,EAAK,iBACL,cAAiB,EACjB,EAAK,gBACL,qBAAwB,EACxB,EAAK,uBACL,wBAA2B,EAC3B,EAAK,0BACL,WAAc,EACd,EAAK,aACL,eAAkB,EAClB,EAAK,iBACL,gBAAmB,EACnB,EAAK,kBACL,kBAAqB,GACrB,GAAM,oBACN,iBAAoB,GACpB,GAAM,mBACN,aAAgB,GAChB,GAAM,eACN,uBAA0B,GAC1B,GAAM,yBACN,UAAa,GACb,GAAM,aAEFC,EAAqB,CACzB,CAAC,MAAO,sBACR,CAAC,MAAO,oBACR,CAAC,KAAM,eACP,CAAC,MAAO,mBACR,CAAC,KAAM,eACP,CAAC,MAAO,oBACR,CAAC,KAAM,UACP,CAAC,OAAQ,qBACT,CAAC,MAAO,iBACR,CAAC,KAAM,iBACP,CAAC,MAAO,mBACR,CAAC,MAAO,qBACR,CAAC,OAAQ,qBACT,CAAC,OAAQ,uBACT,CAAC,GAAI,iBACL,CAAC,GAAI,kBACL,CAAC,GAAI,iBACL,CAAC,GAAI,mBACL,CAAC,GAAI,2BACL,CAAC,GAAI,uBACL,CAAC,GAAI,0BACL,CAAC,GAAI,aACL,CAAC,GAAI,iBACL,CAAC,GAAI,kBACL,CAAC,IAAK,mBACN,CAAC,IAAK,kBACN,CAAC,IAAK,eACN,CAAC,IAAK,yBACN,CAAC,IAAK,gHAER,SAASvB,EAAsBlU,EAAI2T,EAAU/X,EAAMoO,GACjD,IACE,OAAOA,EAAOhK,KAAMgK,GAAQhK,GAC9B,CAAE,MAAO0V,GACPC,EAAYD,EAAK/B,EAAU/X,EAC7B,CACF,CACA,SAASga,EAA2B5V,EAAI2T,EAAU/X,EAAMoO,GACtD,IAAIgH,EAAAA,EAAAA,IAAWhR,GAAK,CAClB,MAAME,EAAMgU,EAAsBlU,EAAI2T,EAAU/X,EAAMoO,GAMtD,OALI9J,IAAO2V,EAAAA,EAAAA,IAAU3V,IACnBA,EAAI7E,OAAOqa,IACTC,EAAYD,EAAK/B,EAAU/X,EAAK,IAG7BsE,CACT,CACA,IAAInK,EAAAA,EAAAA,IAAQiK,GAAK,CACf,MAAM8I,EAAS,GACf,IAAK,IAAI7U,EAAI,EAAGA,EAAI+L,EAAG9L,OAAQD,IAC7B6U,EAAOlS,KAAKgf,EAA2B5V,EAAG/L,GAAI0f,EAAU/X,EAAMoO,IAEhE,OAAOlB,CACT,CAKF,CACA,SAAS6M,EAAYD,EAAK/B,EAAU/X,EAAMka,GAAa,GACrD,MAAMC,EAAepC,EAAWA,EAASS,MAAQ,KACjD,GAAIT,EAAU,CACZ,IAAIqC,EAAMrC,EAAS9P,OACnB,MAAMoS,EAAkBtC,EAAShE,MAC3BuG,EAAmF,8CAA8Cta,IACvI,MAAOoa,EAAK,CACV,MAAMG,EAAqBH,EAAII,GAC/B,GAAID,EACF,IAAK,IAAIliB,EAAI,EAAGA,EAAIkiB,EAAmBjiB,OAAQD,IAC7C,IAA+D,IAA3DkiB,EAAmBliB,GAAGyhB,EAAKO,EAAiBC,GAC9C,OAINF,EAAMA,EAAInS,MACZ,CACA,MAAMwS,EAAkB1C,EAASG,WAAWjZ,OAAOyb,aACnD,GAAID,EASF,OARA3Q,EAAAA,EAAAA,MACAwO,EACEmC,EACA,KACA,GACA,CAACX,EAAKO,EAAiBC,SAEzBpQ,EAAAA,EAAAA,KAGJ,CACAyQ,EAASb,EAAK9Z,EAAMma,EAAcD,EACpC,CACA,SAASS,EAASb,EAAK9Z,EAAMma,EAAcD,GAAa,GAgBpDhe,QAAQC,MAAM2d,EAElB,CAEA,IAAIc,GAAa,EACbC,GAAiB,EACrB,MAAMC,EAAQ,GACd,IAAIC,EAAa,EACjB,MAAMC,EAAsB,GAC5B,IAAIC,EAAqB,KACrBC,EAAiB,EACrB,MAAMC,EAAkC7b,QAAQF,UAChD,IAAIgc,EAAsB,KAE1B,SAASC,EAASjX,GAChB,MAAMhM,EAAIgjB,GAAuBD,EACjC,OAAO/W,EAAKhM,EAAEkjB,KAAK3hB,KAAOyK,EAAGmH,KAAK5R,MAAQyK,GAAMhM,CAClD,CACA,SAASmjB,EAAmBC,GAC1B,IAAIC,EAAQV,EAAa,EACrBW,EAAMZ,EAAMxiB,OAChB,MAAOmjB,EAAQC,EAAK,CAClB,MAAMC,EAASF,EAAQC,IAAQ,EACzBE,EAAYd,EAAMa,GAClBE,EAAcC,EAAMF,GACtBC,EAAcL,GAAMK,IAAgBL,GAAMI,EAAUG,IACtDN,EAAQE,EAAS,EAEjBD,EAAMC,CAEV,CACA,OAAOF,CACT,CACA,SAASO,EAASC,GACXnB,EAAMxiB,QAAWwiB,EAAMhW,SAC1BmX,EACArB,GAAcqB,EAAI5P,aAAe0O,EAAa,EAAIA,KAEpC,MAAVkB,EAAIT,GACNV,EAAM9f,KAAKihB,GAEXnB,EAAMoB,OAAOX,EAAmBU,EAAIT,IAAK,EAAGS,GAE9CE,IAEJ,CACA,SAASA,IACFvB,GAAeC,IAClBA,GAAiB,EACjBO,EAAsBD,EAAgBG,KAAKc,GAE/C,CACA,SAASC,EAAcJ,GACrB,MAAM5jB,EAAIyiB,EAAMwB,QAAQL,GACpB5jB,EAAI0iB,GACND,EAAMoB,OAAO7jB,EAAG,EAEpB,CACA,SAASkkB,EAAiBC,IACnBriB,EAAAA,EAAAA,IAAQqiB,GAQXxB,EAAoBhgB,QAAQwhB,GAPvBvB,GAAuBA,EAAmBnW,SAC7C0X,EACAA,EAAGnQ,aAAe6O,EAAiB,EAAIA,IAEvCF,EAAoBhgB,KAAKwhB,GAK7BL,GACF,CACA,SAASM,EAAiB1E,EAAU2E,EAAMrkB,GAAIuiB,EAAaG,EAAa,EAAI,IAI1E,IAHI,EAGG1iB,EAAIyiB,EAAMxiB,OAAQD,IAAK,CAC5B,MAAMmkB,EAAK1B,EAAMziB,GACjB,GAAImkB,GAAMA,EAAGT,IAAK,CAChB,GAAIhE,GAAYyE,EAAGhB,KAAOzD,EAASlY,IACjC,SAEE,EAGJib,EAAMoB,OAAO7jB,EAAG,GAChBA,IACAmkB,GACF,CACF,CACF,CACA,SAASG,EAAkBD,GACzB,GAAI1B,EAAoB1iB,OAAQ,CAC9B,MAAMskB,EAAU,IAAI,IAAI9O,IAAIkN,IAAsB6B,MAChD,CAACrY,EAAGC,IAAMqX,EAAMtX,GAAKsX,EAAMrX,KAG7B,GADAuW,EAAoB1iB,OAAS,EACzB2iB,EAEF,YADAA,EAAmBjgB,QAAQ4hB,GAO7B,IAJA3B,EAAqB2B,EAIhB1B,EAAiB,EAAGA,EAAiBD,EAAmB3iB,OAAQ4iB,IAInED,EAAmBC,KAErBD,EAAqB,KACrBC,EAAiB,CACnB,CACF,CACA,MAAMY,EAASG,GAAkB,MAAVA,EAAIT,GAAasB,IAAWb,EAAIT,GACjDuB,EAAaA,CAACvY,EAAGC,KACrB,MAAMuY,EAAOlB,EAAMtX,GAAKsX,EAAMrX,GAC9B,GAAa,IAATuY,EAAY,CACd,GAAIxY,EAAEuX,MAAQtX,EAAEsX,IACd,OAAQ,EACV,GAAItX,EAAEsX,MAAQvX,EAAEuX,IACd,OAAO,CACX,CACA,OAAOiB,CAAI,EAEb,SAASZ,EAAUM,GACjB7B,GAAiB,EACjBD,GAAa,EAIbE,EAAM+B,KAAKE,GAC2F5R,EAAAA,GACtG,IACE,IAAK4P,EAAa,EAAGA,EAAaD,EAAMxiB,OAAQyiB,IAAc,CAC5D,MAAMkB,EAAMnB,EAAMC,GACdkB,IAAsB,IAAfA,EAAI7T,QAIbkQ,EAAsB2D,EAAK,KAAM,GAErC,CACF,CAAE,QACAlB,EAAa,EACbD,EAAMxiB,OAAS,EACfqkB,EAAkBD,GAClB9B,GAAa,EACbQ,EAAsB,MAClBN,EAAMxiB,QAAU0iB,EAAoB1iB,SACtC8jB,EAAUM,EAEd,CACF,CA0IA,IAAIO,EACAC,EAAS,GACTC,GAAuB,EAQ3B,SAASC,EAAkBC,EAAM7gB,GAC/B,IAAI8B,EAAIC,EAER,GADA0e,EAAaI,EACTJ,EACFA,EAAWK,SAAU,EACrBJ,EAAO3X,SAAQ,EAAGgY,QAAOnP,UAAW6O,EAAWO,KAAKD,KAAUnP,KAC9D8O,EAAS,QACJ,GAIa,qBAAX9f,QACPA,OAAOqgB,eAC6D,OAAjElf,EAAgC,OAA1BD,EAAKlB,OAAO6D,gBAAqB,EAAS3C,EAAGof,gBAAqB,EAASnf,EAAGuG,SAAS,UAChG,CACA,MAAM6Y,EAASnhB,EAAOohB,6BAA+BphB,EAAOohB,8BAAgC,GAC5FD,EAAO3iB,MAAM6iB,IACXT,EAAkBS,EAASrhB,EAAO,IAEpCshB,YAAW,KACJb,IACHzgB,EAAOohB,6BAA+B,KACtCT,GAAuB,EACvBD,EAAS,GACX,GACC,IACL,MACEC,GAAuB,EACvBD,EAAS,EAEb,CA2DA,SAASM,EAAKzF,EAAUwF,KAAUQ,GAChC,GAAIhG,EAASiG,YACX,OACF,MAAM1E,EAAQvB,EAASS,MAAMc,OAAS2E,EAAAA,GA0BtC,IAAI7P,EAAO2P,EACX,MAAMG,EAAkBX,EAAMY,WAAW,WACnCC,EAAWF,GAAmBX,EAAM/D,MAAM,GAChD,GAAI4E,GAAYA,KAAY9E,EAAO,CACjC,MAAM+E,EAAe,GAAgB,eAAbD,EAA4B,QAAUA,cACxD,OAAEE,EAAM,KAAEC,GAASjF,EAAM+E,IAAiBJ,EAAAA,GAC5CM,IACFnQ,EAAO2P,EAAQ5Z,KAAKK,IAAMkV,EAAAA,EAAAA,IAASlV,GAAKA,EAAE+Z,OAAS/Z,KAEjD8Z,IACFlQ,EAAO2P,EAAQ5Z,IAAIqa,EAAAA,IAEvB,CAiBA,IAAIC,EACJ,IAAIC,EAAUpF,EAAMmF,GAAcE,EAAAA,EAAAA,IAAapB,KAC/CjE,EAAMmF,GAAcE,EAAAA,EAAAA,KAAaC,EAAAA,EAAAA,IAASrB,MACrCmB,GAAWR,IACdQ,EAAUpF,EAAMmF,GAAcE,EAAAA,EAAAA,KAAaE,EAAAA,EAAAA,IAAUtB,MAEnDmB,GACF1E,EACE0E,EACA3G,EACA,EACA3J,GAGJ,MAAM0Q,EAAcxF,EAAMmF,EAAc,QACxC,GAAIK,EAAa,CACf,GAAK/G,EAASgH,SAEP,GAAIhH,EAASgH,QAAQN,GAC1B,YAFA1G,EAASgH,QAAU,CAAC,EAItBhH,EAASgH,QAAQN,IAAe,EAChCzE,EACE8E,EACA/G,EACA,EACA3J,EAEJ,CACF,CACA,SAAS4Q,EAAsBC,EAAM/G,EAAYgH,GAAU,GACzD,MAAMC,EAAQjH,EAAWkH,WACnBC,EAASF,EAAMtU,IAAIoU,GACzB,QAAe,IAAXI,EACF,OAAOA,EAET,MAAMlL,EAAM8K,EAAKK,MACjB,IAAIC,EAAa,CAAC,EACdC,GAAa,EACjB,KAA4BpK,EAAAA,EAAAA,IAAW6J,GAAO,CAC5C,MAAMQ,EAAeC,IACnB,MAAMC,EAAuBX,EAAsBU,EAAMxH,GAAY,GACjEyH,IACFH,GAAa,GACbpU,EAAAA,EAAAA,IAAOmU,EAAYI,GACrB,GAEGT,GAAWhH,EAAW0H,OAAOtnB,QAChC4f,EAAW0H,OAAOra,QAAQka,GAExBR,EAAKY,SACPJ,EAAYR,EAAKY,SAEfZ,EAAKW,QACPX,EAAKW,OAAOra,QAAQka,EAExB,CACA,OAAKtL,GAAQqL,IAMTrlB,EAAAA,EAAAA,IAAQga,GACVA,EAAI5O,SAAStI,GAAQsiB,EAAWtiB,GAAO,QAEvCmO,EAAAA,EAAAA,IAAOmU,EAAYpL,IAEjBlP,EAAAA,EAAAA,IAASga,IACXE,EAAMnT,IAAIiT,EAAMM,GAEXA,KAbDta,EAAAA,EAAAA,IAASga,IACXE,EAAMnT,IAAIiT,EAAM,MAEX,KAWX,CACA,SAASa,EAAe7U,EAAShO,GAC/B,SAAKgO,KAAY8U,EAAAA,EAAAA,IAAK9iB,MAGtBA,EAAMA,EAAIuc,MAAM,GAAGzd,QAAQ,QAAS,KAC7BqT,EAAAA,EAAAA,IAAOnE,EAAShO,EAAI,GAAG+iB,cAAgB/iB,EAAIuc,MAAM,MAAOpK,EAAAA,EAAAA,IAAOnE,GAAS4T,EAAAA,EAAAA,IAAU5hB,MAASmS,EAAAA,EAAAA,IAAOnE,EAAShO,GACpH,CAEA,IAAIgjB,EAA2B,KAC3BC,EAAiB,KACrB,SAASC,EAA4BpI,GACnC,MAAMqI,EAAOH,EAGb,OAFAA,EAA2BlI,EAC3BmI,EAAiBnI,GAAYA,EAAS/X,KAAKqgB,WAAa,KACjDD,CACT,CACA,SAASE,EAAY9E,GACnB0E,EAAiB1E,CACnB,CACA,SAAS+E,IACPL,EAAiB,IACnB,CACA,MAAMM,EAAeC,GAAQC,EAC7B,SAASA,EAAQtc,EAAIuc,EAAMV,EAA0BW,GACnD,IAAKD,EACH,OAAOvc,EACT,GAAIA,EAAGyc,GACL,OAAOzc,EAET,MAAM0c,EAAsBA,IAAI1S,KAC1B0S,EAAoBC,IACtBC,IAAkB,GAEpB,MAAMC,EAAed,EAA4BQ,GACjD,IAAIrc,EACJ,IACEA,EAAMF,KAAMgK,EACd,CAAE,QACA+R,EAA4Bc,GACxBH,EAAoBC,IACtBC,GAAiB,EAErB,CAIA,OAAO1c,CAAG,EAKZ,OAHAwc,EAAoBD,IAAK,EACzBC,EAAoBI,IAAK,EACzBJ,EAAoBC,IAAK,EAClBD,CACT,CAMA,SAASK,EAAoBpJ,GAC3B,MACE/X,KAAMohB,EAAS,MACf5I,EAAK,MACLzE,EAAK,UACLsN,EACAC,cAAeA,GAAa,MAC5BC,EAAK,MACLC,EAAK,KACLhE,EAAI,OACJiE,EAAM,YACNC,EAAW,MACXpI,EAAK,KACLtW,EAAI,WACJ2e,EAAU,IACVhB,EAAG,aACHiB,GACE7J,EACEqI,EAAOD,EAA4BpI,GACzC,IAAIjW,EACA+f,EAIJ,IACE,GAAsB,EAAlBrJ,EAAMsJ,UAAe,CACvB,MAAMC,EAAaV,GAAatN,EAC1BiO,EASDD,EACLjgB,EAASmgB,GACPR,EAAOzd,KACLge,EACAD,EACAL,EACqEpI,EACrEqI,EACA3e,EACA2d,IAGJkB,EAAmBL,CACrB,KAAO,CACL,MAAMU,EAAUd,EACZ,EAGJtf,EAASmgB,GACPC,EAAQ5pB,OAAS,EAAI4pB,EACkD5I,EAQjE,CAAEkI,QAAOD,QAAO/D,SAClB0E,EACmE5I,EACrE,OAGJuI,EAAmBT,EAAU9H,MAAQkI,EAAQW,GAAyBX,EACxE,CACF,CAAE,MAAO1H,GACPsI,GAAW9pB,OAAS,EACpByhB,EAAYD,EAAK/B,EAAU,GAC3BjW,EAASugB,GAAYC,GACvB,CACA,IAAIC,EAAOzgB,EAKX,GAAI+f,IAAqC,IAAjBD,EAAwB,CAC9C,MAAMjd,EAAOjI,OAAOiI,KAAKkd,IACnB,UAAEC,GAAcS,EAClB5d,EAAKrM,QACS,EAAZwpB,IACER,GAAgB3c,EAAK6d,KAAKtE,EAAAA,MAC5B2D,EAAmBY,GACjBZ,EACAP,IAGJiB,EAAOG,GAAWH,EAAMV,GAAkB,GAAO,GA2BvD,CAwBA,OAvBIrJ,EAAMmK,OAMRJ,EAAOG,GAAWH,EAAM,MAAM,GAAO,GACrCA,EAAKI,KAAOJ,EAAKI,KAAOJ,EAAKI,KAAKC,OAAOpK,EAAMmK,MAAQnK,EAAMmK,MAE3DnK,EAAMqK,aAMRN,EAAKM,WAAarK,EAAMqK,YAKxB/gB,EAASygB,EAEXpC,EAA4BC,GACrBte,CACT,CAwBA,SAASghB,GAAiBC,EAAUC,GAAU,GAC5C,IAAIC,EACJ,IAAK,IAAI5qB,EAAI,EAAGA,EAAI0qB,EAASzqB,OAAQD,IAAK,CACxC,MAAM6qB,EAAQH,EAAS1qB,GACvB,IAAI8qB,GAAQD,GAYV,OAXA,GAAIA,EAAMljB,OAASsiB,IAA8B,SAAnBY,EAAMH,SAAqB,CACvD,GAAIE,EACF,OAEAA,EAAaC,CAKjB,CAIJ,CACA,OAAOD,CACT,CACA,MAAMd,GAA4BX,IAChC,IAAIld,EACJ,IAAK,MAAMrH,KAAOukB,GACJ,UAARvkB,GAA2B,UAARA,IAAmB8iB,EAAAA,EAAAA,IAAK9iB,OAC5CqH,IAAQA,EAAM,CAAC,IAAIrH,GAAOukB,EAAMvkB,IAGrC,OAAOqH,CAAG,EAENme,GAAuBA,CAACjB,EAAOlI,KACnC,MAAMhV,EAAM,CAAC,EACb,IAAK,MAAMrH,KAAOukB,GACXtD,EAAAA,EAAAA,IAAgBjhB,IAAUA,EAAIuc,MAAM,KAAMF,IAC7ChV,EAAIrH,GAAOukB,EAAMvkB,IAGrB,OAAOqH,CAAG,EAKZ,SAAS8e,GAAsBC,EAAWC,EAAWC,GACnD,MAAQjK,MAAOkK,EAAWT,SAAUU,EAAY,UAAEzL,GAAcqL,GACxD/J,MAAOoK,EAAWX,SAAUY,EAAY,UAAEC,GAAcN,EAC1DhE,EAAQtH,EAAU6L,aAIxB,GAAIP,EAAUX,MAAQW,EAAUT,WAC9B,OAAO,EAET,KAAIU,GAAaK,GAAa,GAmB5B,SAAIH,IAAgBE,GACbA,GAAiBA,EAAaG,UAIjCN,IAAcE,IAGbF,GAGAE,GAGEK,GAAgBP,EAAWE,EAAWpE,KALlCoE,GA3BX,GAAgB,KAAZE,EACF,OAAO,EAET,GAAgB,GAAZA,EACF,OAAKJ,EAGEO,GAAgBP,EAAWE,EAAWpE,KAFlCoE,EAGN,GAAgB,EAAZE,EAAe,CACxB,MAAMI,EAAeV,EAAUU,aAC/B,IAAK,IAAI3rB,EAAI,EAAGA,EAAI2rB,EAAa1rB,OAAQD,IAAK,CAC5C,MAAM4E,EAAM+mB,EAAa3rB,GACzB,GAAIqrB,EAAUzmB,KAASumB,EAAUvmB,KAAS6iB,EAAeR,EAAOriB,GAC9D,OAAO,CAEX,CACF,CAkBF,OAAO,CACT,CACA,SAAS8mB,GAAgBP,EAAWE,EAAWG,GAC7C,MAAMI,EAAWvnB,OAAOiI,KAAK+e,GAC7B,GAAIO,EAAS3rB,SAAWoE,OAAOiI,KAAK6e,GAAWlrB,OAC7C,OAAO,EAET,IAAK,IAAID,EAAI,EAAGA,EAAI4rB,EAAS3rB,OAAQD,IAAK,CACxC,MAAM4E,EAAMgnB,EAAS5rB,GACrB,GAAIqrB,EAAUzmB,KAASumB,EAAUvmB,KAAS6iB,EAAe+D,EAAc5mB,GACrE,OAAO,CAEX,CACA,OAAO,CACT,CACA,SAASinB,IAAgB,MAAE1L,EAAK,OAAEvQ,GAAUkc,GAC1C,MAAOlc,EAAQ,CACb,MAAMsa,EAAOta,EAAOmc,QAIpB,GAHI7B,EAAK8B,UAAY9B,EAAK8B,SAASC,eAAiB9L,IAClD+J,EAAK4B,GAAK3L,EAAM2L,IAEd5B,IAAS/J,EAIX,OAHCA,EAAQvQ,EAAOuQ,OAAO2L,GAAKA,EAC5Blc,EAASA,EAAOA,MAIpB,CACF,CAEA,MAAMsc,GAAa,aACbC,GAAa,aACnB,SAASC,GAAiB9oB,EAAM+oB,GAC9B,OAAOC,GAAaJ,GAAY5oB,GAAM,EAAM+oB,IAAuB/oB,CACrE,CACA,MAAMipB,GAAyBjY,OAAOkY,IAAI,SAC1C,SAASC,GAAwB9M,GAC/B,OAAI0B,EAAAA,EAAAA,IAAS1B,GACJ2M,GAAaJ,GAAYvM,GAAW,IAAUA,EAE9CA,GAAa4M,EAExB,CACA,SAASG,GAAiBppB,GACxB,OAAOgpB,GAAaH,GAAY7oB,EAClC,CACA,SAASgpB,GAAa3kB,EAAMrE,EAAMqpB,GAAc,EAAMN,GAAqB,GACzE,MAAM3M,EAAWkI,GAA4BgF,GAC7C,GAAIlN,EAAU,CACZ,MAAMqJ,EAAYrJ,EAAS/X,KAC3B,GAAIA,IAASukB,GAAY,CACvB,MAAMW,EAAWC,GACf/D,GACA,GAEF,GAAI8D,IAAaA,IAAavpB,GAAQupB,KAAatG,EAAAA,EAAAA,IAASjjB,IAASupB,KAAaE,EAAAA,EAAAA,KAAWxG,EAAAA,EAAAA,IAASjjB,KACpG,OAAOylB,CAEX,CACA,MAAM9c,EAGJlF,GAAQ2Y,EAAS/X,IAASohB,EAAUphB,GAAOrE,IAC3CyD,GAAQ2Y,EAASG,WAAWlY,GAAOrE,GAErC,OAAK2I,GAAOogB,EACHtD,EAOF9c,CACT,CAKF,CACA,SAASlF,GAAQimB,EAAU1pB,GACzB,OAAO0pB,IAAaA,EAAS1pB,IAAS0pB,GAASzG,EAAAA,EAAAA,IAASjjB,KAAU0pB,GAASD,EAAAA,EAAAA,KAAWxG,EAAAA,EAAAA,IAASjjB,KACjG,CAEA,MAAM2pB,GAActlB,GAASA,EAAKulB,aAClC,IAAIC,GAAa,EACjB,MAAMC,GAAe,CACnB9pB,KAAM,WAKN4pB,cAAc,EACd9nB,OAAAA,CAAQioB,EAAIC,EAAIC,EAAWC,EAAQC,EAAiBC,EAAgBC,EAAWC,EAAc1C,EAAW2C,GACtG,GAAU,MAANR,EACFS,GACER,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACA1C,EACA2C,OAEG,CACL,GAAIH,GAAkBA,EAAexc,KAAO,IAAMmc,EAAGrB,SAAS+B,aAI5D,OAHAT,EAAGtB,SAAWqB,EAAGrB,SACjBsB,EAAGtB,SAAS7L,MAAQmN,OACpBA,EAAGxB,GAAKuB,EAAGvB,IAGbkC,GACEX,EACAC,EACAC,EACAC,EACAC,EACAE,EACAC,EACA1C,EACA2C,EAEJ,CACF,EACAI,QAASC,GACT3jB,OAAQ4jB,GACRC,UAAWC,IAEPC,GAAWlB,GACjB,SAASmB,GAAapO,EAAO7c,GAC3B,MAAMkrB,EAAgBrO,EAAMc,OAASd,EAAMc,MAAM3d,IAC7CyZ,EAAAA,EAAAA,IAAWyR,IACbA,GAEJ,CACA,SAASV,GAAc3N,EAAOoN,EAAWC,EAAQC,EAAiBC,EAAgBC,EAAWC,EAAc1C,EAAW2C,GACpH,MACE9tB,EAAG0uB,EACHC,GAAG,cAAEC,IACHd,EACEe,EAAkBD,EAAc,OAChC3C,EAAW7L,EAAM6L,SAAWmC,GAChChO,EACAuN,EACAD,EACAF,EACAqB,EACApB,EACAG,EACAC,EACA1C,EACA2C,GAEFY,EACE,KACAzC,EAAS6C,cAAgB1O,EAAM2O,UAC/BF,EACA,KACAnB,EACAzB,EACA2B,EACAC,GAEE5B,EAAS9a,KAAO,GAClBqd,GAAapO,EAAO,aACpBoO,GAAapO,EAAO,cACpBsO,EACE,KACAtO,EAAM4O,WACNxB,EACAC,EACAC,EACA,KAEAE,EACAC,GAEFoB,GAAgBhD,EAAU7L,EAAM4O,aAEhC/C,EAASjlB,SAAQ,GAAO,EAE5B,CACA,SAASinB,GAAcX,EAAIC,EAAIC,EAAWC,EAAQC,EAAiBE,EAAWC,EAAc1C,GAAanrB,EAAG0uB,EAAOQ,GAAIC,EAASR,GAAG,cAAEC,KACnI,MAAM3C,EAAWsB,EAAGtB,SAAWqB,EAAGrB,SAClCA,EAAS7L,MAAQmN,EACjBA,EAAGxB,GAAKuB,EAAGvB,GACX,MAAMqD,EAAY7B,EAAGwB,UACfM,EAAc9B,EAAGyB,YACjB,aAAE9C,EAAY,cAAE4C,EAAa,aAAEd,EAAY,YAAEsB,GAAgBrD,EACnE,GAAI6C,EACF7C,EAAS6C,cAAgBM,EACrBG,GAAgBH,EAAWN,IAC7BJ,EACEI,EACAM,EACAnD,EAAS4C,gBACT,KACAnB,EACAzB,EACA2B,EACAC,EACA1C,GAEEc,EAAS9a,MAAQ,EACnB8a,EAASjlB,UACAgnB,IACJsB,IACHZ,EACExC,EACAmD,EACA7B,EACAC,EACAC,EACA,KAEAE,EACAC,EACA1C,GAEF8D,GAAgBhD,EAAUoD,OAI9BpD,EAASuD,UAAYpC,KACjBkC,GACFrD,EAASqD,aAAc,EACvBrD,EAASC,aAAe4C,GAExBK,EAAQL,EAAepB,EAAiBzB,GAE1CA,EAAS9a,KAAO,EAChB8a,EAAStc,QAAQzP,OAAS,EAC1B+rB,EAAS4C,gBAAkBD,EAAc,OACrCZ,GACFU,EACE,KACAU,EACAnD,EAAS4C,gBACT,KACAnB,EACAzB,EACA2B,EACAC,EACA1C,GAEEc,EAAS9a,MAAQ,EACnB8a,EAASjlB,WAET0nB,EACExC,EACAmD,EACA7B,EACAC,EACAC,EACA,KAEAE,EACAC,EACA1C,GAEF8D,GAAgBhD,EAAUoD,KAEnBnD,GAAgBqD,GAAgBH,EAAWlD,IACpDwC,EACExC,EACAkD,EACA5B,EACAC,EACAC,EACAzB,EACA2B,EACAC,EACA1C,GAEFc,EAASjlB,SAAQ,KAEjB0nB,EACE,KACAU,EACAnD,EAAS4C,gBACT,KACAnB,EACAzB,EACA2B,EACAC,EACA1C,GAEEc,EAAS9a,MAAQ,GACnB8a,EAASjlB,iBAKf,GAAIklB,GAAgBqD,GAAgBH,EAAWlD,GAC7CwC,EACExC,EACAkD,EACA5B,EACAC,EACAC,EACAzB,EACA2B,EACAC,EACA1C,GAEF8D,GAAgBhD,EAAUmD,QAoB1B,GAlBAZ,GAAajB,EAAI,aACjBtB,EAAS6C,cAAgBM,EACC,IAAtBA,EAAU1F,UACZuC,EAASuD,UAAYJ,EAAUxP,UAAUwN,WAEzCnB,EAASuD,UAAYpC,KAEvBsB,EACE,KACAU,EACAnD,EAAS4C,gBACT,KACAnB,EACAzB,EACA2B,EACAC,EACA1C,GAEEc,EAAS9a,MAAQ,EACnB8a,EAASjlB,cACJ,CACL,MAAM,QAAEyoB,EAAO,UAAED,GAAcvD,EAC3BwD,EAAU,EACZ/J,YAAW,KACLuG,EAASuD,YAAcA,GACzBvD,EAASyD,SAASL,EACpB,GACCI,GACkB,IAAZA,GACTxD,EAASyD,SAASL,EAEtB,CAGN,CAEA,SAASjB,GAAuBhO,EAAOuN,EAAgBD,EAAiBF,EAAWqB,EAAiBpB,EAAQG,EAAWC,EAAc1C,EAAW2C,EAAmBwB,GAAc,GAO/K,MACEtvB,EAAG0uB,EACHiB,EAAGC,EACHV,GAAIC,EACJ3gB,EAAGmL,EACHgV,GAAG,WAAEkB,EAAU,OAAEC,IACfhC,EACJ,IAAIiC,EACJ,MAAMC,EAAgBC,GAAmB7P,GACrC4P,GACErC,GAAkBA,EAAemB,gBACnCiB,EAAmBpC,EAAe6B,UAClC7B,EAAexc,QAGnB,MAAMse,EAAUrP,EAAMc,OAAQgP,EAAAA,EAAAA,IAAS9P,EAAMc,MAAMuO,cAAW,EAI9D,MAAMU,EAAgB1C,EAChBxB,EAAW,CACf7L,QACAvQ,OAAQ8d,EACRD,kBACAE,YACAJ,YACAqB,kBACA1d,KAAM,EACNqe,UAAWpC,KACXqC,QAA4B,kBAAZA,EAAuBA,GAAW,EAClDvD,aAAc,KACd4C,cAAe,KACfd,cAAesB,EACfA,cACA1J,aAAa,EACbjW,QAAS,GACT3I,OAAAA,CAAQopB,GAAS,EAAOC,GAAO,GAa7B,MACEjQ,MAAOkQ,EAAM,aACbpE,EAAY,cACZ4C,EAAa,UACbU,EAAS,QACT7f,EACA+d,gBAAiB6C,EACjB/C,UAAWgD,GACTvE,EACJ,IAAIwE,GAAa,EACbxE,EAASqD,YACXrD,EAASqD,aAAc,EACbc,IACVK,EAAavE,GAAgB4C,EAAcrE,YAAgD,WAAlCqE,EAAcrE,WAAWiG,KAC9ED,IACFvE,EAAazB,WAAWkG,WAAa,KAC/BnB,IAAcvD,EAASuD,YACzBI,EACEd,EACA0B,EACA/C,IAAW0C,EAAgBxW,EAAKuS,GAAgBuB,EAChD,GAEFtJ,EAAiBxU,GACnB,GAGAuc,IACE2D,EAAW3D,EAAaH,MAAQE,EAAS4C,kBAC3CpB,EAAS9T,EAAKuS,IAEhBiD,EAAQjD,EAAcqE,EAAkBtE,GAAU,IAE/CwE,GACHb,EAAKd,EAAe0B,EAAY/C,EAAQ,IAG5CwB,GAAgBhD,EAAU6C,GAC1B7C,EAAS6C,cAAgB,KACzB7C,EAAS+B,cAAe,EACxB,IAAIne,EAASoc,EAASpc,OAClB+gB,GAAwB,EAC5B,MAAO/gB,EAAQ,CACb,GAAIA,EAAOif,cAAe,CACxBjf,EAAOF,QAAQ/M,QAAQ+M,GACvBihB,GAAwB,EACxB,KACF,CACA/gB,EAASA,EAAOA,MAClB,CACK+gB,GAA0BH,GAC7BtM,EAAiBxU,GAEnBsc,EAAStc,QAAU,GACfqgB,GACErC,GAAkBA,EAAemB,eAAiBiB,IAAqBpC,EAAe6B,YACxF7B,EAAexc,OACa,IAAxBwc,EAAexc,MAAekf,GAChC1C,EAAe3mB,WAIrBwnB,GAAa8B,EAAQ,YACvB,EACAZ,QAAAA,CAASmB,GACP,IAAK5E,EAAS6C,cACZ,OAEF,MAAQ1O,MAAOkQ,EAAM,aAAEpE,EAAcwB,gBAAiB6C,EAAkB/C,UAAWgD,EAAY5C,UAAWkD,GAAe7E,EACzHuC,GAAa8B,EAAQ,cACrB,MAAMS,EAAUpX,EAAKuS,GACf8E,EAAgBA,KACf/E,EAAS+B,eAGdU,EACE,KACAmC,EACAL,EACAO,EACAR,EACA,KAEAO,EACAjD,EACA1C,GAEF8D,GAAgBhD,EAAU4E,GAAc,EAEpCJ,EAAaI,EAAcpG,YAAgD,WAAlCoG,EAAcpG,WAAWiG,KACpED,IACFvE,EAAazB,WAAWkG,WAAaK,GAEvC/E,EAAS+B,cAAe,EACxBmB,EACEjD,EACAqE,EACA,MAEA,GAGGE,GACHO,GAEJ,EACApB,IAAAA,CAAKY,EAAYO,EAASnpB,GACxBqkB,EAASC,cAAgB0D,EAAK3D,EAASC,aAAcsE,EAAYO,EAASnpB,GAC1EqkB,EAASuB,UAAYgD,CACvB,EACA7W,IAAAA,GACE,OAAOsS,EAASC,cAAgBvS,EAAKsS,EAASC,aAChD,EACA+E,WAAAA,CAAYtR,EAAUuR,GACpB,MAAMC,IAAwBlF,EAAS6C,cACnCqC,GACFlF,EAAS9a,OAEX,MAAMigB,EAAazR,EAASS,MAAM2L,GAClCpM,EAAS0R,SAAShqB,OAAOqa,IACvBC,EAAYD,EAAK/B,EAAU,EAAE,IAC5BuD,MAAMoO,IACP,GAAI3R,EAASiG,aAAeqG,EAASrG,aAAeqG,EAASuD,YAAc7P,EAASyN,WAClF,OAEFzN,EAAS4R,eAAgB,EACzB,MAAQnR,MAAOkQ,GAAW3Q,EAI1B6R,GAAkB7R,EAAU2R,GAAkB,GAC1CF,IACFd,EAAOvE,GAAKqF,GAEd,MAAMK,GAAeL,GAAczR,EAASqM,QAAQD,GACpDmF,EACEvR,EACA2Q,EAIAT,EAAWuB,GAAczR,EAASqM,QAAQD,IAG1CqF,EAAa,KAAOzX,EAAKgG,EAASqM,SAClCC,EACA2B,EACAzC,GAEEsG,GACF3B,EAAO2B,GAET3F,GAAgBnM,EAAU2Q,EAAOvE,IAI7BoF,GAA2C,MAAlBlF,EAAS9a,MACpC8a,EAASjlB,SACX,GAEJ,EACAmoB,OAAAA,CAAQuC,EAAiBC,GACvB1F,EAASrG,aAAc,EACnBqG,EAASC,cACXiD,EACElD,EAASC,aACTwB,EACAgE,EACAC,GAGA1F,EAAS6C,eACXK,EACElD,EAAS6C,cACTpB,EACAgE,EACAC,EAGN,GAEF,OAAO1F,CACT,CACA,SAASkC,GAAgByD,EAAMxR,EAAOsN,EAAiBC,EAAgBC,EAAWC,EAAc1C,EAAW2C,EAAmB+D,GAC5H,MAAM5F,EAAW7L,EAAM6L,SAAWmC,GAChChO,EACAuN,EACAD,EACAkE,EAAK/B,WAELnqB,SAASkpB,cAAc,OACvB,KACAhB,EACAC,EACA1C,EACA2C,GACA,GAEIpkB,EAASmoB,EACbD,EACA3F,EAAS6C,cAAgB1O,EAAM2O,UAC/BrB,EACAzB,EACA4B,EACA1C,GAKF,OAHsB,IAAlBc,EAAS9a,MACX8a,EAASjlB,SAAQ,GAAO,GAEnB0C,CACT,CACA,SAAS4kB,GAA0BlO,GACjC,MAAM,UAAEsJ,EAAS,SAAEiB,GAAavK,EAC1B0R,EAA6B,GAAZpI,EACvBtJ,EAAM2O,UAAYgD,GAChBD,EAAiBnH,EAASqH,QAAUrH,GAEtCvK,EAAM4O,WAAa8C,EAAiBC,GAAsBpH,EAAS+E,UAAYzF,GAAYC,GAC7F,CACA,SAAS6H,GAAsBE,GAC7B,IAAIC,EACJ,IAAIlV,EAAAA,EAAAA,IAAWiV,GAAI,CACjB,MAAME,EAAaC,IAAsBH,EAAEnJ,GACvCqJ,IACFF,EAAEtJ,IAAK,EACP0J,MAEFJ,EAAIA,IACAE,IACFF,EAAEtJ,IAAK,EACPuJ,EAAQI,GACRC,KAEJ,CACA,IAAIxwB,EAAAA,EAAAA,IAAQkwB,GAAI,CACd,MAAMO,EAAc9H,GAAiBuH,GACjC,EAGJA,EAAIO,CACN,CAKA,OAJAP,EAAIpI,GAAeoI,GACfC,IAAUD,EAAEQ,kBACdR,EAAEQ,gBAAkBP,EAAMtc,QAAQzV,GAAMA,IAAM8xB,KAEzCA,CACT,CACA,SAASS,GAAwB1mB,EAAIigB,GAC/BA,GAAYA,EAAS6C,eACnB/sB,EAAAA,EAAAA,IAAQiK,GACVigB,EAAStc,QAAQ/M,QAAQoJ,GAEzBigB,EAAStc,QAAQ/M,KAAKoJ,GAGxBmY,EAAiBnY,EAErB,CACA,SAASijB,GAAgBhD,EAAU0G,GACjC1G,EAASC,aAAeyG,EACxB,MAAM,MAAEvS,EAAK,gBAAEsN,GAAoBzB,EACnC,IAAIF,EAAK4G,EAAO5G,GAChB,OAAQA,GAAM4G,EAAO/S,UACnB+S,EAASA,EAAO/S,UAAUoM,QAC1BD,EAAK4G,EAAO5G,GAEd3L,EAAM2L,GAAKA,EACP2B,GAAmBA,EAAgB1B,UAAY5L,IACjDsN,EAAgBtN,MAAM2L,GAAKA,EAC3BD,GAAgB4B,EAAiB3B,GAErC,CACA,SAASkE,GAAmB7P,GAC1B,MAAMwS,EAAcxS,EAAMc,OAASd,EAAMc,MAAM0R,YAC/C,OAAsB,MAAfA,IAAuC,IAAhBA,CAChC,CAEA,MAAMC,GAAgBte,OAAOkY,IAAI,SAC3BqG,GAAgBA,KACpB,CACE,MAAMvK,EAAMwK,GAAOF,IAMnB,OAAOtK,CACT,GAGF,SAASyK,GAAYpiB,EAAQiC,GAC3B,OAAOogB,GAAQriB,EAAQ,KAAMiC,EAC/B,CACA,SAASqgB,GAAgBtiB,EAAQiC,GAC/B,OAAOogB,GACLriB,EACA,KACqF,CAAEuiB,MAAO,QAElG,CACA,SAASC,GAAgBxiB,EAAQiC,GAC/B,OAAOogB,GACLriB,EACA,KACqF,CAAEuiB,MAAO,QAElG,CACA,MAAME,GAAwB,CAAC,EAC/B,SAASC,GAAMjvB,EAAQ+f,EAAIvR,GAMzB,OAAOogB,GAAQ5uB,EAAQ+f,EAAIvR,EAC7B,CACA,SAASogB,GAAQ5uB,EAAQ+f,GAAI,UAC3BmP,EAAS,KACTC,EAAI,MACJL,EAAK,KACLM,EAAI,QACJC,EAAO,UACPC,GACE9N,EAAAA,IACF,GAAIzB,GAAMqP,EAAM,CACd,MAAMG,EAAMxP,EACZA,EAAKA,IAAIpO,KACP4d,KAAO5d,GACP6d,GAAS,CAEb,CAuBA,MAOMlU,EAAWkN,GACXiH,EAAkBC,IAAqB,IAATP,EAAgBO,EAElDC,GAASD,GAAkB,IAATP,EAAiB,OAAI,GAEzC,IAAIrX,EA+CAvJ,EA9CAqhB,GAAe,EACfC,GAAgB,EAyCpB,IAxCI/c,EAAAA,EAAAA,IAAM9S,IACR8X,EAASA,IAAM9X,EAAOJ,MACtBgwB,GAAexc,EAAAA,EAAAA,IAAUpT,KAChBwX,EAAAA,EAAAA,IAAWxX,IACpB8X,EAASA,IAAM2X,EAAezvB,GAC9B4vB,GAAe,IACNlyB,EAAAA,EAAAA,IAAQsC,IACjB6vB,GAAgB,EAChBD,EAAe5vB,EAAO+lB,MAAM6H,IAAMpW,EAAAA,EAAAA,IAAWoW,KAAMxa,EAAAA,EAAAA,IAAUwa,KAC7D9V,EAASA,IAAM9X,EAAO0H,KAAKkmB,IACrB9a,EAAAA,EAAAA,IAAM8a,GACDA,EAAEhuB,OACA4X,EAAAA,EAAAA,IAAWoW,GACb6B,EAAe7B,IACbjV,EAAAA,EAAAA,IAAWiV,GACb/R,EAAsB+R,EAAGtS,EAAU,QADrC,KAQPxD,GAFOa,EAAAA,EAAAA,IAAW3Y,GAChB+f,EACOjI,IAAM+D,EAAsB7b,EAAQsb,EAAU,GAE9CxD,KACHvJ,GACFA,IAEKgP,EACLvd,EACAsb,EACA,EACA,CAACwU,KAKEphB,EAAAA,GAGPqR,GAAMoP,EAAM,CACd,MAAMY,EAAajY,EACnBA,EAASA,IAAM6X,GAASI,IAC1B,CAEA,IAMIC,EANAF,EAAanoB,IACf4G,EAAUhC,EAAOyB,OAAS,KACxB6N,EAAsBlU,EAAI2T,EAAU,GACpC/M,EAAUhC,EAAOyB,YAAS,CAAM,CACjC,EAGH,GAAIiiB,GAAuB,CAWzB,GAVAH,EAAYphB,EAAAA,GACPqR,EAEMmP,GACT3R,EAA2BwC,EAAIzE,EAAU,EAAG,CAC1CxD,IACA+X,EAAgB,QAAK,EACrBC,IALFhY,IAQY,SAAVgX,EAIF,OAAOpgB,EAAAA,GAJa,CACpB,MAAMwV,EAAMuK,KACZuB,EAAa9L,EAAIgM,mBAAqBhM,EAAIgM,iBAAmB,GAC/D,CAGF,CACA,IAAI3f,EAAWsf,EAAgB,IAAIpyB,MAAMuC,EAAOnE,QAAQs0B,KAAKnB,IAAyBA,GACtF,MAAMxP,EAAMA,KACV,GAAKjT,EAAOZ,QAAWY,EAAOa,MAG9B,GAAI2S,EAAI,CACN,MAAMzP,EAAW/D,EAAOX,OACpBujB,GAAQS,IAAiBC,EAAgBvf,EAASyV,MAAK,CAACrY,EAAG9R,KAAM0X,EAAAA,EAAAA,IAAW5F,EAAG6C,EAAS3U,OAAO0X,EAAAA,EAAAA,IAAWhD,EAAUC,OAClHhC,GACFA,IAEFgP,EAA2BwC,EAAIzE,EAAU,EAAG,CAC1ChL,EAEAC,IAAaye,QAAwB,EAASa,GAAiBtf,EAAS,KAAOye,GAAwB,GAAKze,EAC5Guf,IAEFvf,EAAWD,EAEf,MACE/D,EAAOX,KACT,EAGF,IAAIiB,EADJ2S,EAAI5P,eAAiBmQ,EAEP,SAAV+O,EACFjiB,EAAY2S,EACO,SAAVsP,EACTjiB,EAAYA,IAAMujB,GAAsB5Q,EAAKlE,GAAYA,EAASsM,WAElEpI,EAAIF,KAAM,EACNhE,IACFkE,EAAIT,GAAKzD,EAASlY,KACpByJ,EAAYA,IAAM0S,EAASC,IAE7B,MAAMjT,EAAS,IAAII,EAAAA,GAAemL,EAAQpJ,EAAAA,GAAM7B,GAC1CL,GAAQC,EAAAA,EAAAA,MACR+iB,EAAUA,KACdjjB,EAAOP,OACHQ,IACFif,EAAAA,EAAAA,IAAOjf,EAAMlB,QAASiB,EACxB,EAsBF,OAhBIwT,EACEmP,EACF1P,IAEAjP,EAAWhE,EAAOX,MAED,SAAVkjB,EACTsB,GACE7jB,EAAOX,IAAIkD,KAAKvC,GAChB+O,GAAYA,EAASsM,UAGvBrb,EAAOX,MAELokB,GACFA,EAAWzxB,KAAKixB,GACXA,CACT,CACA,SAASa,GAAcrwB,EAAQJ,EAAO4O,GACpC,MAAM8hB,EAAapzB,KAAKoa,MAClBQ,GAASmF,EAAAA,EAAAA,IAASjd,GAAUA,EAAOqI,SAAS,KAAOkoB,GAAiBD,EAAYtwB,GAAU,IAAMswB,EAAWtwB,GAAUA,EAAO8O,KAAKwhB,EAAYA,GACnJ,IAAIvQ,GACApH,EAAAA,EAAAA,IAAW/Y,GACbmgB,EAAKngB,GAELmgB,EAAKngB,EAAMqiB,QACXzT,EAAU5O,GAEZ,MAAM6J,EAAQ+mB,GAAmBtzB,MAC3B2K,EAAM+mB,GAAQ9W,EAAQiI,EAAGjR,KAAKwhB,GAAa9hB,GAEjD,OADA/E,IACO5B,CACT,CACA,SAAS0oB,GAAiBrM,EAAKuM,GAC7B,MAAMC,EAAWD,EAAKvpB,MAAM,KAC5B,MAAO,KACL,IAAIyW,EAAMuG,EACV,IAAK,IAAItoB,EAAI,EAAGA,EAAI80B,EAAS70B,QAAU8hB,EAAK/hB,IAC1C+hB,EAAMA,EAAI+S,EAAS90B,IAErB,OAAO+hB,CAAG,CAEd,CACA,SAASgS,GAAS/vB,EAAO+wB,EAAQtQ,IAAUJ,GACzC,GAAI0Q,GAAS,KAAMnoB,EAAAA,EAAAA,IAAS5I,IAAUA,EAAM,YAC1C,OAAOA,EAGT,GADAqgB,EAAOA,GAAwB,IAAI5O,IAC/B4O,EAAKpN,IAAIjT,GACX,OAAOA,EAIT,GAFAqgB,EAAK3L,IAAI1U,GACT+wB,KACI7d,EAAAA,EAAAA,IAAMlT,GACR+vB,GAAS/vB,EAAMA,MAAO+wB,EAAO1Q,QACxB,IAAIviB,EAAAA,EAAAA,IAAQkC,GACjB,IAAK,IAAIhE,EAAI,EAAGA,EAAIgE,EAAM/D,OAAQD,IAChC+zB,GAAS/vB,EAAMhE,GAAI+0B,EAAO1Q,QAEvB,IAAI2Q,EAAAA,EAAAA,IAAMhxB,KAAUmR,EAAAA,EAAAA,IAAMnR,GAC/BA,EAAMkJ,SAAS4E,IACbiiB,GAASjiB,EAAGijB,EAAO1Q,EAAK,SAErB,IAAI4Q,EAAAA,EAAAA,IAAcjxB,GACvB,IAAK,MAAMY,KAAOZ,EAChB+vB,GAAS/vB,EAAMY,GAAMmwB,EAAO1Q,GAGhC,OAAOrgB,CACT,CAOA,SAASkxB,GAAe/U,EAAOgV,GAC7B,GAAiC,OAA7BvN,EAEF,OAAOzH,EAET,MAAMT,EAAW0V,GAAexN,IAA6BA,EAAyBlM,MAChF2Z,EAAWlV,EAAMmK,OAASnK,EAAMmK,KAAO,IAC7C,IAAK,IAAItqB,EAAI,EAAGA,EAAIm1B,EAAWl1B,OAAQD,IAAK,CAC1C,IAAKs1B,EAAKtxB,EAAOuxB,EAAKC,EAAY5P,EAAAA,IAAauP,EAAWn1B,GACtDs1B,KACEvY,EAAAA,EAAAA,IAAWuY,KACbA,EAAM,CACJG,QAASH,EACTI,QAASJ,IAGTA,EAAI/B,MACNQ,GAAS/vB,GAEXqxB,EAAS1yB,KAAK,CACZ2yB,MACA5V,WACA1b,QACA2Q,cAAU,EACV4gB,MACAC,cAGN,CACA,OAAOrV,CACT,CACA,SAASwV,GAAoBxV,EAAO6K,EAAWtL,EAAUpc,GACvD,MAAM+xB,EAAWlV,EAAMmK,KACjBsL,EAAc5K,GAAaA,EAAUV,KAC3C,IAAK,IAAItqB,EAAI,EAAGA,EAAIq1B,EAASp1B,OAAQD,IAAK,CACxC,MAAM61B,EAAUR,EAASr1B,GACrB41B,IACFC,EAAQlhB,SAAWihB,EAAY51B,GAAGgE,OAEpC,IAAIghB,EAAO6Q,EAAQP,IAAIhyB,GACnB0hB,KACFvT,EAAAA,EAAAA,MACAkQ,EAA2BqD,EAAMtF,EAAU,EAAG,CAC5CS,EAAM2L,GACN+J,EACA1V,EACA6K,KAEFnZ,EAAAA,EAAAA,MAEJ,CACF,CAEA,MAAMikB,GAAaxhB,OAAO,YACpByhB,GAAazhB,OAAO,YAC1B,SAAS0hB,KACP,MAAMC,EAAQ,CACZC,WAAW,EACXC,WAAW,EACXC,cAAc,EACdC,cAA+B,IAAIniB,KAQrC,OANAoiB,IAAU,KACRL,EAAMC,WAAY,CAAI,IAExBK,IAAgB,KACdN,EAAMG,cAAe,CAAI,IAEpBH,CACT,CACA,MAAMO,GAA0B,CAACC,SAAU50B,OACrC60B,GAAgC,CACpCjG,KAAMjwB,OACNm2B,OAAQC,QACRC,UAAWD,QAEXE,cAAeN,GACfO,QAASP,GACTQ,aAAcR,GACdS,iBAAkBT,GAElBU,cAAeV,GACfW,QAASX,GACTY,aAAcZ,GACda,iBAAkBb,GAElBc,eAAgBd,GAChBe,SAAUf,GACVgB,cAAehB,GACfiB,kBAAmBjB,IAEfkB,GAAqB,CACzBp0B,KAAM,iBACN2d,MAAOyV,GACPiB,KAAAA,CAAM1W,GAAO,MAAEiI,IACb,MAAMxJ,EAAWkY,KACX3B,EAAQD,KACd,MAAO,KACL,MAAMtL,EAAWxB,EAAM6I,SAAW8F,GAAyB3O,EAAM6I,WAAW,GAC5E,IAAKrH,IAAaA,EAASzqB,OACzB,OAEF,IAAI4qB,EAAQH,EAAS,GACrB,GAAIA,EAASzqB,OAAS,EAAG,CACvB,IAAI63B,GAAW,EACf,IAAK,MAAM53B,KAAKwqB,EACd,GAAIxqB,EAAEyH,OAASsiB,GAAS,CAClB,EAMJY,EAAQ3qB,EACR43B,GAAW,EAET,KACJ,CAEJ,CACA,MAAMC,GAAW9hB,EAAAA,EAAAA,IAAMgL,IACjB,KAAEwP,GAASsH,EAIjB,GAAI9B,EAAME,UACR,OAAO6B,GAAiBnN,GAE1B,MAAMoN,EAAaC,GAAkBrN,GACrC,IAAKoN,EACH,OAAOD,GAAiBnN,GAE1B,MAAMsN,EAAaC,GACjBH,EACAF,EACA9B,EACAvW,GAEF2Y,GAAmBJ,EAAYE,GAC/B,MAAMG,EAAW5Y,EAASqM,QACpBwM,EAAgBD,GAAYJ,GAAkBI,GACpD,GAAIC,GAAiBA,EAAc5wB,OAASsiB,KAAYqF,GAAgB2I,EAAYM,GAAgB,CAClG,MAAMC,EAAeJ,GACnBG,EACAR,EACA9B,EACAvW,GAGF,GADA2Y,GAAmBE,EAAeC,GACrB,WAAT/H,GAAqBwH,EAAWtwB,OAASsiB,GAS3C,OARAgM,EAAME,WAAY,EAClBqC,EAAa9H,WAAa,KACxBuF,EAAME,WAAY,GACa,IAA3BzW,EAASrR,OAAO0B,SAClB2P,EAAS/O,OAAOa,OAAQ,EACxBkO,EAASrR,SACX,EAEK2pB,GAAiBnN,GACN,WAAT4F,GAAqBwH,EAAWtwB,OAASsiB,KAClDuO,EAAaC,WAAa,CAAC3M,EAAI4M,EAAaC,KAC1C,MAAMC,EAAqBC,GACzB5C,EACAsC,GAEFK,EAAmBp4B,OAAO+3B,EAAc3zB,MAAQ2zB,EAChDzM,EAAGgK,IAAc,KACf4C,IACA5M,EAAGgK,SAAc,SACVqC,EAAWQ,YAAY,EAEhCR,EAAWQ,aAAeA,CAAY,EAG5C,CACA,OAAO9N,CAAK,CAEhB,GAEIiO,GAAiBpB,GACvB,SAASmB,GAAuB5C,EAAO9V,GACrC,MAAM,cAAEkW,GAAkBJ,EAC1B,IAAI2C,EAAqBvC,EAAc7jB,IAAI2N,EAAMxY,MAKjD,OAJKixB,IACHA,EAAqCv0B,OAAOkG,OAAO,MACnD8rB,EAAc1iB,IAAIwM,EAAMxY,KAAMixB,IAEzBA,CACT,CACA,SAASR,GAAuBjY,EAAOc,EAAOgV,EAAOvW,GACnD,MAAM,OACJiX,EAAM,KACNlG,EAAI,UACJoG,GAAY,EAAK,cACjBC,EAAa,QACbC,EAAO,aACPC,EAAY,iBACZC,EAAgB,cAChBC,EAAa,QACbC,EAAO,aACPC,EAAY,iBACZC,EAAgB,eAChBC,EAAc,SACdC,EAAQ,cACRC,EAAa,kBACbC,GACExW,EACErc,EAAMpE,OAAO2f,EAAMvb,KACnBg0B,EAAqBC,GAAuB5C,EAAO9V,GACnD4Y,EAAWA,CAAC/T,EAAMjP,KACtBiP,GAAQrD,EACNqD,EACAtF,EACA,EACA3J,EACD,EAEGijB,EAAgBA,CAAChU,EAAMjP,KAC3B,MAAM4D,EAAO5D,EAAK,GAClBgjB,EAAS/T,EAAMjP,IACXjU,EAAAA,EAAAA,IAAQkjB,GACNA,EAAKiU,OAAOC,GAAUA,EAAMj5B,QAAU,KACxC0Z,IACOqL,EAAK/kB,QAAU,GACxB0Z,GACF,EAEIwf,EAAQ,CACZ1I,OACAoG,YACAuC,WAAAA,CAAYtN,GACV,IAAI9G,EAAO8R,EACX,IAAKb,EAAMC,UAAW,CACpB,IAAIS,EAGF,OAFA3R,EAAOsS,GAAkBR,CAI7B,CACIhL,EAAGgK,KACLhK,EAAGgK,KACD,GAIJ,MAAMuD,EAAeT,EAAmBh0B,GACpCy0B,GAAgB/J,GAAgBnP,EAAOkZ,IAAiBA,EAAavN,GAAGgK,KAC1EuD,EAAavN,GAAGgK,MAElBiD,EAAS/T,EAAM,CAAC8G,GAClB,EACAwN,KAAAA,CAAMxN,GACJ,IAAI9G,EAAO+R,EACPwC,EAAYvC,EACZwC,EAAavC,EACjB,IAAKhB,EAAMC,UAAW,CACpB,IAAIS,EAKF,OAJA3R,EAAOuS,GAAYR,EACnBwC,EAAY/B,GAAiBR,EAC7BwC,EAAa/B,GAAqBR,CAItC,CACA,IAAIwC,GAAS,EACb,MAAM9f,EAAOmS,EAAGiK,IAAe2D,IACzBD,IAEJA,GAAS,EAEPV,EADEW,EACOF,EAEAD,EAFY,CAACzN,IAIpBqN,EAAMR,cACRQ,EAAMR,eAER7M,EAAGiK,SAAc,EAAM,EAErB/Q,EACFgU,EAAchU,EAAM,CAAC8G,EAAInS,IAEzBA,GAEJ,EACAggB,KAAAA,CAAM7N,EAAI+D,GACR,MAAM7a,EAAOxU,OAAO2f,EAAMvb,KAO1B,GANIknB,EAAGiK,KACLjK,EAAGiK,KACD,GAIAE,EAAMG,aACR,OAAOvG,IAETkJ,EAAS7B,EAAe,CAACpL,IACzB,IAAI2N,GAAS,EACb,MAAM9f,EAAOmS,EAAGgK,IAAe4D,IACzBD,IAEJA,GAAS,EACT5J,IAEEkJ,EADEW,EACOrC,EAEAD,EAFkB,CAACtL,IAI9BA,EAAGgK,SAAc,EACb8C,EAAmB5jB,KAAUmL,UACxByY,EAAmB5jB,GAC5B,EAEF4jB,EAAmB5jB,GAAQmL,EACvBgX,EACF6B,EAAc7B,EAAS,CAACrL,EAAInS,IAE5BA,GAEJ,EACAigB,KAAAA,CAAMvJ,GACJ,OAAO+H,GAAuB/H,EAAQpP,EAAOgV,EAAOvW,EACtD,GAEF,OAAOyZ,CACT,CACA,SAASnB,GAAiB7X,GACxB,GAAI0Z,GAAY1Z,GAGd,OAFAA,EAAQkK,GAAWlK,GACnBA,EAAMuK,SAAW,KACVvK,CAEX,CACA,SAAS+X,GAAkB/X,GACzB,IAAK0Z,GAAY1Z,GACf,OAAOA,EAKT,MAAM,UAAEsJ,EAAS,SAAEiB,GAAavK,EAChC,GAAIuK,EAAU,CACZ,GAAgB,GAAZjB,EACF,OAAOiB,EAAS,GAElB,GAAgB,GAAZjB,IAAkB1M,EAAAA,EAAAA,IAAW2N,EAASqH,SACxC,OAAOrH,EAASqH,SAEpB,CACF,CACA,SAASsG,GAAmBlY,EAAOgZ,GACX,EAAlBhZ,EAAMsJ,WAAiBtJ,EAAMR,UAC/B0Y,GAAmBlY,EAAMR,UAAUoM,QAASoN,GACjB,IAAlBhZ,EAAMsJ,WACftJ,EAAM2O,UAAUtE,WAAa2O,EAAMS,MAAMzZ,EAAM2O,WAC/C3O,EAAM4O,WAAWvE,WAAa2O,EAAMS,MAAMzZ,EAAM4O,aAEhD5O,EAAMqK,WAAa2O,CAEvB,CACA,SAAStB,GAAyBnN,EAAUoP,GAAc,EAAOC,GAC/D,IAAIvb,EAAM,GACNwb,EAAqB,EACzB,IAAK,IAAIh6B,EAAI,EAAGA,EAAI0qB,EAASzqB,OAAQD,IAAK,CACxC,IAAI6qB,EAAQH,EAAS1qB,GACrB,MAAM4E,EAAmB,MAAbm1B,EAAoBlP,EAAMjmB,IAAMpE,OAAOu5B,GAAav5B,OAAoB,MAAbqqB,EAAMjmB,IAAcimB,EAAMjmB,IAAM5E,GACnG6qB,EAAMljB,OAASsyB,IACK,IAAlBpP,EAAMU,WACRyO,IACFxb,EAAMA,EAAI+L,OACRsN,GAAyBhN,EAAMH,SAAUoP,EAAal1B,MAE/Ck1B,GAAejP,EAAMljB,OAASsiB,KACvCzL,EAAI7b,KAAY,MAAPiC,EAAcylB,GAAWQ,EAAO,CAAEjmB,QAASimB,EAExD,CACA,GAAImP,EAAqB,EACvB,IAAK,IAAIh6B,EAAI,EAAGA,EAAIwe,EAAIve,OAAQD,IAC9Bwe,EAAIxe,GAAGurB,WAAa,EAGxB,OAAO/M,CACT;2BAIA,SAAS0b,GAAgBtnB,EAASunB,GAChC,OAAOpd,EAAAA,EAAAA,IAAWnK,GAGA,MAAOG,EAAAA,EAAAA,IAAO,CAAEzP,KAAMsP,EAAQtP,MAAQ62B,EAAc,CAAExC,MAAO/kB,IAA7D,GACdA,CACN,CAEA,MAAMwnB,GAAkBp6B,KAAQA,EAAE2H,KAAK0yB;4BAGvC,SAASC,GAAqBl2B,IACxB2Y,EAAAA,EAAAA,IAAW3Y,KACbA,EAAS,CAAEm2B,OAAQn2B,IAErB,MAAM,OACJm2B,EAAM,iBACNC,EAAgB,eAChBC,EAAc,MACdC,EAAQ,IAAG,QACXlL,EAAO,YAEPmD,GAAc,EACdgI,QAASC,GACPx2B,EACJ,IACIy2B,EADAC,EAAiB,KAEjBC,EAAU,EACd,MAAMC,EAAQA,KACZD,IACAD,EAAiB,KACVG,KAEHA,EAAOA,KACX,IAAIC,EACJ,OAAOJ,IAAmBI,EAAcJ,EAAiBP,IAASnzB,OAAOqa,IAEvE,GADAA,EAAMA,aAAe9hB,MAAQ8hB,EAAM,IAAI9hB,MAAMa,OAAOihB,IAChDmZ,EACF,OAAO,IAAI3zB,SAAQ,CAACF,EAASD,KAC3B,MAAMq0B,EAAYA,IAAMp0B,EAAQi0B,KAC1BI,EAAWA,IAAMt0B,EAAO2a,GAC9BmZ,EAAYnZ,EAAK0Z,EAAWC,EAAUL,EAAU,EAAE,IAGpD,MAAMtZ,CACR,IACCwB,MAAM2D,GACHsU,IAAgBJ,GAAkBA,EAC7BA,GAOLlU,IAASA,EAAKyU,YAA2C,WAA7BzU,EAAKtS,OAAOgnB,gBAC1C1U,EAAOA,EAAKmL,SAKd8I,EAAejU,EACRA,KACN,EAEL,OAAOsT,GAAgB,CACrB52B,KAAM,wBACN+2B,cAAeY,EACf,mBAAIM,GACF,OAAOV,CACT,EACAlD,KAAAA,GACE,MAAMjY,EAAWkN,GACjB,GAAIiO,EACF,MAAO,IAAMW,GAAgBX,EAAcnb,GAE7C,MAAMib,EAAWlZ,IACfqZ,EAAiB,KACjBpZ,EACED,EACA/B,EACA,IACC+a,EACF,EAEH,GAAI9H,GAAejT,EAASsM,UAAYqI,GACtC,OAAO4G,IAAOhY,MAAM2D,GACX,IAAM4U,GAAgB5U,EAAMlH,KAClCtY,OAAOqa,IACRkZ,EAAQlZ,GACD,IAAMgZ,EAAiBzQ,GAAYyQ,EAAgB,CACxD32B,MAAO2d,IACJ,QAGT,MAAMga,GAASre,EAAAA,EAAAA,KAAI,GACbtZ,GAAQsZ,EAAAA,EAAAA,MACRse,GAAUte,EAAAA,EAAAA,MAAMsd,GA2BtB,OA1BIA,GACFjV,YAAW,KACTiW,EAAQ13B,OAAQ,CAAK,GACpB02B,GAEU,MAAXlL,GACF/J,YAAW,KACT,IAAKgW,EAAOz3B,QAAUF,EAAME,MAAO,CACjC,MAAMyd,EAAM,IAAI9hB,MACd,mCAAmC6vB,QAErCmL,EAAQlZ,GACR3d,EAAME,MAAQyd,CAChB,IACC+N,GAELyL,IAAOhY,MAAK,KACVwY,EAAOz3B,OAAQ,EACX0b,EAAS9P,QAAUiqB,GAAYna,EAAS9P,OAAOuQ,SACjDT,EAAS9P,OAAOe,OAAOa,OAAQ,EAC/BmS,EAASjE,EAAS9P,OAAOvB,QAC3B,IACCjH,OAAOqa,IACRkZ,EAAQlZ,GACR3d,EAAME,MAAQyd,CAAG,IAEZ,IACDga,EAAOz3B,OAAS62B,EACXW,GAAgBX,EAAcnb,GAC5B5b,EAAME,OAASy2B,EACjBzQ,GAAYyQ,EAAgB,CACjC32B,MAAOA,EAAME,QAENw2B,IAAqBkB,EAAQ13B,MAC/BgmB,GAAYwQ,QADd,CAIX,GAEJ,CACA,SAASgB,GAAgB5U,EAAMhX,GAC7B,MAAQwN,IAAKH,EAAI,MAAEgE,EAAK,SAAEyJ,EAAQ,GAAEiR,GAAO/rB,EAAOuQ,MAC5CA,EAAQ6J,GAAYpD,EAAM3F,EAAOyJ,GAIvC,OAHAvK,EAAM/C,IAAMH,EACZkD,EAAMwb,GAAKA,SACJ/rB,EAAOuQ,MAAMwb,GACbxb,CACT,CAEA,MAAM0Z,GAAe1Z,GAAUA,EAAMxY,KAAKi0B,cACpCC,GAAgB,CACpBv4B,KAAM,YAINs4B,eAAe,EACf3a,MAAO,CACL6a,QAAS,CAACt7B,OAAQu7B,OAAQl6B,OAC1Bm6B,QAAS,CAACx7B,OAAQu7B,OAAQl6B,OAC1Bo6B,IAAK,CAACz7B,OAAQuU,SAEhB4iB,KAAAA,CAAM1W,GAAO,MAAEiI,IACb,MAAMxJ,EAAWkY,KACXsE,EAAgBxc,EAAS4I,IAC/B,IAAK4T,EAAcC,SACjB,MAAO,KACL,MAAMzR,EAAWxB,EAAM6I,SAAW7I,EAAM6I,UACxC,OAAOrH,GAAgC,IAApBA,EAASzqB,OAAeyqB,EAAS,GAAKA,CAAQ,EAGrE,MAAM5D,EAAwB,IAAI5S,IAC5B5H,EAAuB,IAAImJ,IACjC,IAAI2mB,EAAU,KAId,MAAM1O,EAAiBhO,EAASsM,UAE9BmQ,UACEp8B,EAAG0uB,EACHiB,EAAGC,EACHV,GAAIoN,EACJ3N,GAAG,cAAEC,KAELuN,EACEI,EAAmB3N,EAAc,OA8CvC,SAASO,EAAQ/O,GACfoc,GAAepc,GACfkc,EAASlc,EAAOT,EAAUgO,GAAgB,EAC5C,CACA,SAAS8O,EAAW7mB,GAClBmR,EAAM5Z,SAAQ,CAACiT,EAAOvb,KACpB,MAAMtB,EAAOwpB,GAAiB3M,EAAMxY,OAChCrE,GAAUqS,GAAWA,EAAOrS,IAC9Bm5B,EAAgB73B,EAClB,GAEJ,CACA,SAAS63B,EAAgB73B,GACvB,MAAMoiB,EAASF,EAAMtU,IAAI5N,GACpBw3B,GAAY9M,GAAgBtI,EAAQoV,GAE9BA,GACTG,GAAeH,GAFflN,EAAQlI,GAIVF,EAAMrU,OAAO7N,GACb0H,EAAKmG,OAAO7N,EACd,CAlEAs3B,EAAcQ,SAAW,CAACvc,EAAOoN,EAAWC,EAAQG,EAAWzC,KAC7D,MAAMyR,EAAYxc,EAAMR,UACxBgQ,EAAKxP,EAAOoN,EAAWC,EAAQ,EAAGE,GAClCe,EACEkO,EAAUxc,MACVA,EACAoN,EACAC,EACAmP,EACAjP,EACAC,EACAxN,EAAMyN,aACN1C,GAEFsJ,IAAsB,KACpBmI,EAAUC,eAAgB,EACtBD,EAAUxwB,IACZ0wB,EAAAA,EAAAA,IAAeF,EAAUxwB,GAE3B,MAAM2wB,EAAY3c,EAAMc,OAASd,EAAMc,MAAM8b,eACzCD,GACFE,GAAgBF,EAAWH,EAAU/sB,OAAQuQ,EAC/C,GACCuN,EACsE,EAI3EwO,EAAce,WAAc9c,IAC1B,MAAMwc,EAAYxc,EAAMR,UACxBgQ,EAAKxP,EAAOmc,EAAkB,KAAM,EAAG5O,GACvC8G,IAAsB,KAChBmI,EAAUO,KACZL,EAAAA,EAAAA,IAAeF,EAAUO,IAE3B,MAAMJ,EAAY3c,EAAMc,OAASd,EAAMc,MAAMkc,iBACzCL,GACFE,GAAgBF,EAAWH,EAAU/sB,OAAQuQ,GAE/Cwc,EAAUC,eAAgB,CAAI,GAC7BlP,EACsE,EA0B3E2F,IACE,IAAM,CAACpS,EAAM6a,QAAS7a,EAAM+a,WAC5B,EAAEF,EAASE,MACTF,GAAWU,GAAYl5B,GAAS85B,GAAQtB,EAASx4B,KACjD04B,GAAWQ,GAAYl5B,IAAU85B,GAAQpB,EAAS14B,IAAM,GAG1D,CAAE4vB,MAAO,OAAQK,MAAM,IAEzB,IAAI8J,EAAkB,KACtB,MAAMC,EAAeA,KACI,MAAnBD,GACFvW,EAAMnT,IAAI0pB,EAAiBE,GAAc7d,EAASqM,SACpD,EAiBF,OAfAuK,GAAUgH,GACVE,GAAUF,GACV/G,IAAgB,KACdzP,EAAM5Z,SAAS8Z,IACb,MAAM,QAAE+E,EAAO,SAAEC,GAAatM,EACxBS,EAAQod,GAAcxR,GAC5B,GAAI/E,EAAOrf,OAASwY,EAAMxY,MAAQqf,EAAOpiB,MAAQub,EAAMvb,IAMvDsqB,EAAQlI,OANR,CACEuV,GAAepc,GACf,MAAM+c,EAAK/c,EAAMR,UAAUud,GAC3BA,GAAM1I,GAAsB0I,EAAIlR,EAElC,CACe,GACf,IAEG,KAEL,GADAqR,EAAkB,MACbnU,EAAM6I,QACT,OAAO,KAET,MAAMrH,EAAWxB,EAAM6I,UACjB0L,EAAW/S,EAAS,GAC1B,GAAIA,EAASzqB,OAAS,EAKpB,OADAm8B,EAAU,KACH1R,EACF,IAAKI,GAAQ2S,MAAoC,EAArBA,EAAShU,cAAyC,IAArBgU,EAAShU,WAEvE,OADA2S,EAAU,KACHqB,EAET,IAAItd,EAAQod,GAAcE,GAC1B,MAAM7W,EAAOzG,EAAMxY,KACbrE,EAAOwpB,GACXsN,GAAeja,GAASA,EAAMxY,KAAK4zB,iBAAmB,CAAC,EAAI3U,IAEvD,QAAEkV,EAAO,QAAEE,EAAO,IAAEC,GAAQhb,EAClC,GAAI6a,KAAax4B,IAAS85B,GAAQtB,EAASx4B,KAAU04B,GAAW14B,GAAQ85B,GAAQpB,EAAS14B,GAEvF,OADA84B,EAAUjc,EACHsd,EAET,MAAM74B,EAAmB,MAAbub,EAAMvb,IAAcgiB,EAAOzG,EAAMvb,IACvC84B,EAAc5W,EAAMtU,IAAI5N,GAyB9B,OAxBIub,EAAM2L,KACR3L,EAAQkK,GAAWlK,GACM,IAArBsd,EAAShU,YACXgU,EAAS3O,UAAY3O,IAGzBkd,EAAkBz4B,EACd84B,GACFvd,EAAM2L,GAAK4R,EAAY5R,GACvB3L,EAAMR,UAAY+d,EAAY/d,UAC1BQ,EAAMqK,YACR6N,GAAmBlY,EAAOA,EAAMqK,YAElCrK,EAAMsJ,WAAa,IACnBnd,EAAKmG,OAAO7N,GACZ0H,EAAKoM,IAAI9T,KAET0H,EAAKoM,IAAI9T,GACLq3B,GAAO3vB,EAAKoG,KAAOjM,SAASw1B,EAAK,KACnCQ,EAAgBnwB,EAAKuI,SAAS6E,OAAO1V,QAGzCmc,EAAMsJ,WAAa,IACnB2S,EAAUjc,EACH8M,GAAWwQ,EAAS91B,MAAQ81B,EAAWtd,CAAK,CAEvD,GAEIwd,GAAY9B,GAClB,SAASuB,GAAQQ,EAASt6B,GACxB,OAAIxB,EAAAA,EAAAA,IAAQ87B,GACHA,EAAQzT,MAAMpqB,GAAMq9B,GAAQr9B,EAAGuD,MAC7B+d,EAAAA,EAAAA,IAASuc,GACXA,EAAQtyB,MAAM,KAAKmB,SAASnJ,MAC1Bu6B,EAAAA,EAAAA,IAASD,IACXA,EAAQ90B,KAAKxF,EAGxB,CACA,SAASw6B,GAAY9Y,EAAM7gB,GACzB45B,GAAsB/Y,EAAM,IAAK7gB,EACnC,CACA,SAAS65B,GAAchZ,EAAM7gB,GAC3B45B,GAAsB/Y,EAAM,KAAM7gB,EACpC,CACA,SAAS45B,GAAsB/Y,EAAMrd,EAAMxD,EAASyoB,IAClD,MAAMqR,EAAcjZ,EAAKkZ,QAAUlZ,EAAKkZ,MAAQ,KAC9C,IAAI9B,EAAUj4B,EACd,MAAOi4B,EAAS,CACd,GAAIA,EAAQQ,cACV,OAEFR,EAAUA,EAAQxsB,MACpB,CACA,OAAOoV,GAAM,GAGf,GADAmZ,GAAWx2B,EAAMs2B,EAAa95B,GAC1BA,EAAQ,CACV,IAAIi4B,EAAUj4B,EAAOyL,OACrB,MAAOwsB,GAAWA,EAAQxsB,OACpBiqB,GAAYuC,EAAQxsB,OAAOuQ,QAC7Bie,GAAsBH,EAAat2B,EAAMxD,EAAQi4B,GAEnDA,EAAUA,EAAQxsB,MAEtB,CACF,CACA,SAASwuB,GAAsBpZ,EAAMrd,EAAMxD,EAAQk6B,GACjD,MAAMC,EAAWH,GACfx2B,EACAqd,EACAqZ,GACA,GAGFE,IAAY,MACV1O,EAAAA,EAAAA,IAAOwO,EAAc12B,GAAO22B,EAAS,GACpCn6B,EACL,CACA,SAASo4B,GAAepc,GACtBA,EAAMsJ,YAAa,IACnBtJ,EAAMsJ,YAAa,GACrB,CACA,SAAS8T,GAAcpd,GACrB,OAAyB,IAAlBA,EAAMsJ,UAAkBtJ,EAAM2O,UAAY3O,CACnD,CAEA,SAASge,GAAWx2B,EAAMqd,EAAM7gB,EAASyoB,GAAiB4R,GAAU,GAClE,GAAIr6B,EAAQ,CACV,MAAMg1B,EAAQh1B,EAAOwD,KAAUxD,EAAOwD,GAAQ,IACxCs2B,EAAcjZ,EAAKyZ,QAAUzZ,EAAKyZ,MAAQ,IAAI1oB,KAClD,GAAI5R,EAAOwhB,YACT,QAEFlU,EAAAA,EAAAA,MACA,MAAM5D,EAAQ+mB,GAAmBzwB,GAC3B8H,EAAM0V,EAA2BqD,EAAM7gB,EAAQwD,EAAMoO,GAG3D,OAFAlI,KACAgE,EAAAA,EAAAA,MACO5F,CAAG,GAOZ,OALIuyB,EACFrF,EAAMuF,QAAQT,GAEd9E,EAAMx2B,KAAKs7B,GAENA,CACT,CAMF,CACA,MAAMU,GAAcC,GAAc,CAAC5Z,EAAM7gB,EAASyoB,OAE9CyH,IAAuC,OAAduK,IAAuBT,GAAWS,GAAW,IAAI7oB,IAASiP,KAAQjP,IAAO5R,GAEhG06B,GAAgBF,GAAW,MAC3BrI,GAAYqI,GAAW,KACvBG,GAAiBH,GAAW,MAC5BnB,GAAYmB,GAAW,KACvBpI,GAAkBoI,GAAW,OAC7BJ,GAAcI,GAAW,MACzBI,GAAmBJ,GAAW,MAC9BK,GAAoBL,GACxB,OAEIM,GAAkBN,GACtB,OAEF,SAASO,GAAgBla,EAAM7gB,EAASyoB,IACtCuR,GAAW,KAAMnZ,EAAM7gB,EACzB,CAEA,SAASg7B,GAAW/6B,EAAQg7B,EAAYtY,EAAOjX,GAC7C,IAAI2O,EACJ,MAAMwI,EAASF,GAASA,EAAMjX,GAC9B,IAAI/N,EAAAA,EAAAA,IAAQsC,KAAWid,EAAAA,EAAAA,IAASjd,GAAS,CACvCoa,EAAM,IAAI3c,MAAMuC,EAAOnE,QACvB,IAAK,IAAID,EAAI,EAAGsQ,EAAIlM,EAAOnE,OAAQD,EAAIsQ,EAAGtQ,IACxCwe,EAAIxe,GAAKo/B,EAAWh7B,EAAOpE,GAAIA,OAAG,EAAQgnB,GAAUA,EAAOhnB,GAE/D,MAAO,GAAsB,kBAAXoE,EAAqB,CACjC,EAGJoa,EAAM,IAAI3c,MAAMuC,GAChB,IAAK,IAAIpE,EAAI,EAAGA,EAAIoE,EAAQpE,IAC1Bwe,EAAIxe,GAAKo/B,EAAWp/B,EAAI,EAAGA,OAAG,EAAQgnB,GAAUA,EAAOhnB,GAE3D,MAAO,IAAI4M,EAAAA,EAAAA,IAASxI,GAClB,GAAIA,EAAOkQ,OAAOiF,UAChBiF,EAAM3c,MAAMw9B,KACVj7B,GACA,CAACk7B,EAAMt/B,IAAMo/B,EAAWE,EAAMt/B,OAAG,EAAQgnB,GAAUA,EAAOhnB,UAEvD,CACL,MAAMsM,EAAOjI,OAAOiI,KAAKlI,GACzBoa,EAAM,IAAI3c,MAAMyK,EAAKrM,QACrB,IAAK,IAAID,EAAI,EAAGsQ,EAAIhE,EAAKrM,OAAQD,EAAIsQ,EAAGtQ,IAAK,CAC3C,MAAM4E,EAAM0H,EAAKtM,GACjBwe,EAAIxe,GAAKo/B,EAAWh7B,EAAOQ,GAAMA,EAAK5E,EAAGgnB,GAAUA,EAAOhnB,GAC5D,CACF,MAEAwe,EAAM,GAKR,OAHIsI,IACFA,EAAMjX,GAAS2O,GAEVA,CACT,CAEA,SAAS+gB,GAAYrW,EAAOsW,GAC1B,IAAK,IAAIx/B,EAAI,EAAGA,EAAIw/B,EAAav/B,OAAQD,IAAK,CAC5C,MAAMy/B,EAAOD,EAAax/B,GAC1B,IAAI8B,EAAAA,EAAAA,IAAQ29B,GACV,IAAK,IAAI9wB,EAAI,EAAGA,EAAI8wB,EAAKx/B,OAAQ0O,IAC/Bua,EAAMuW,EAAK9wB,GAAGrL,MAAQm8B,EAAK9wB,GAAG5C,QAEvB0zB,IACTvW,EAAMuW,EAAKn8B,MAAQm8B,EAAK76B,IAAM,IAAImR,KAChC,MAAM9J,EAAMwzB,EAAK1zB,MAAMgK,GAGvB,OAFI9J,IACFA,EAAIrH,IAAM66B,EAAK76B,KACVqH,CAAG,EACRwzB,EAAK1zB,GAEb,CACA,OAAOmd,CACT,CAEA,SAASwW,GAAWxW,EAAO5lB,EAAM2d,EAAQ,CAAC,EAAGwO,EAAUkQ,GACrD,GAAI/X,EAAyBgY,MAAQhY,EAAyBhY,QAAUwqB,GAAexS,EAAyBhY,SAAWgY,EAAyBhY,OAAOgwB,KAGzJ,MAFa,YAATt8B,IACF2d,EAAM3d,KAAOA,GACR0mB,GAAY,OAAQ/I,EAAOwO,GAAYA,KAEhD,IAAIgQ,EAAOvW,EAAM5lB,GAObm8B,GAAQA,EAAK5W,KACf4W,EAAK/W,IAAK,GAEZ0J,KACA,MAAMyN,EAAmBJ,GAAQK,GAAiBL,EAAKxe,IACjD8e,EAAWC,GACf/F,GACA,CACEr1B,IAAKqc,EAAMrc,KAEXi7B,GAAoBA,EAAiBj7B,KAAO,IAAItB,KAElDu8B,IAAqBpQ,EAAWA,IAAa,IAC7CoQ,GAAgC,IAAZ3W,EAAMje,EAAU,IAAM,GAQ5C,OANK00B,GAAaI,EAASE,UACzBF,EAASnS,aAAe,CAACmS,EAASE,QAAU,OAE1CR,GAAQA,EAAK5W,KACf4W,EAAK/W,IAAK,GAELqX,CACT,CACA,SAASD,GAAiBI,GACxB,OAAOA,EAAO/V,MAAMU,IACbC,GAAQD,IAETA,EAAMljB,OAASsiB,MAEfY,EAAMljB,OAASsyB,KAAa6F,GAAiBjV,EAAMH,aAGpDwV,EAAS,IAChB,CAEA,SAASC,GAAWz0B,EAAK00B,GACvB,MAAM5hB,EAAM,CAAC,EAKb,IAAK,MAAM5Z,KAAO8G,EAChB8S,EAAI4hB,GAA2B,QAAQt3B,KAAKlE,GAAO,MAAMA,KAAQ0hB,EAAAA,EAAAA,IAAa1hB,IAAQ8G,EAAI9G,GAE5F,OAAO4Z,CACT,CAEA,MAAM6hB,GAAqBrgC,GACpBA,EAEDsgC,GAAoBtgC,GACfo1B,GAAep1B,IAAMA,EAAE0b,MACzB2kB,GAAkBrgC,EAAE4P,QAHlB,KAKL2wB,IAGYxtB,EAAAA,EAAAA,IAAuB1O,OAAOkG,OAAO,MAAO,CAC1Di2B,EAAIxgC,GAAMA,EACVygC,IAAMzgC,GAAMA,EAAEmgB,MAAM2L,GACpB4U,MAAQ1gC,GAAMA,EAAE2K,KAChBg2B,OAAS3gC,GAA6EA,EAAEihB,MACxF2f,OAAS5gC,GAA6EA,EAAEmpB,MACxF0X,OAAS7gC,GAA6EA,EAAEkpB,MACxF4X,MAAQ9gC,GAA4EA,EAAE+gC,KACtFC,QAAUhhC,GAAMqgC,GAAkBrgC,EAAE4P,QACpCqxB,MAAQjhC,GAAMqgC,GAAkBrgC,EAAEkqB,MAClCgX,MAAQlhC,GAAMA,EAAEmlB,KAChBgc,SAAWnhC,GAA4BohC,GAAqBphC,GAC5DqhC,aAAerhC,GAAMA,EAAEmO,IAAMnO,EAAEmO,EAAI,KACjCnO,EAAE2Q,OAAOa,OAAQ,EACjBmS,EAAS3jB,EAAEqO,OAAO,GAEpBizB,UAAYthC,GAAMA,EAAEuO,IAAMvO,EAAEuO,EAAIyU,EAAS9P,KAAKlT,EAAE0b,QAChD6lB,OAASvhC,GAA4By0B,GAAcvhB,KAAKlT,KAItDwhC,GAAkBA,CAACvL,EAAOrxB,IAAQqxB,IAAUrQ,EAAAA,KAAcqQ,EAAMwL,kBAAmB1qB,EAAAA,EAAAA,IAAOkf,EAAOrxB,GACjG88B,GAA8B,CAClClvB,GAAAA,EAAMvH,EAAGyU,GAAY9a,GACnB,GAAY,aAARA,EACF,OAAO,EAET,MAAM,IAAE0jB,EAAG,WAAEgB,EAAU,KAAE3e,EAAI,MAAEsW,EAAK,YAAE0gB,EAAW,KAAEh6B,EAAI,WAAEkY,GAAeH,EAIxE,IAAIkiB,EACJ,GAAe,MAAXh9B,EAAI,GAAY,CAClB,MAAM2J,EAAIozB,EAAY/8B,GACtB,QAAU,IAAN2J,EACF,OAAQA,GACN,KAAK,EACH,OAAO+a,EAAW1kB,GACpB,KAAK,EACH,OAAO+F,EAAK/F,GACd,KAAK,EACH,OAAO0jB,EAAI1jB,GACb,KAAK,EACH,OAAOqc,EAAMrc,OAEZ,IAAI48B,GAAgBlY,EAAY1kB,GAErC,OADA+8B,EAAY/8B,GAAO,EACZ0kB,EAAW1kB,GACb,GAAI+F,IAASib,EAAAA,KAAa7O,EAAAA,EAAAA,IAAOpM,EAAM/F,GAE5C,OADA+8B,EAAY/8B,GAAO,EACZ+F,EAAK/F,GACP,IAGJg9B,EAAkBliB,EAASuJ,aAAa,MAAOlS,EAAAA,EAAAA,IAAO6qB,EAAiBh9B,GAGxE,OADA+8B,EAAY/8B,GAAO,EACZqc,EAAMrc,GACR,GAAI0jB,IAAQ1C,EAAAA,KAAa7O,EAAAA,EAAAA,IAAOuR,EAAK1jB,GAE1C,OADA+8B,EAAY/8B,GAAO,EACZ0jB,EAAI1jB,GACsBi9B,KACjCF,EAAY/8B,GAAO,EACrB,CACF,CACA,MAAMk9B,EAAevB,GAAoB37B,GACzC,IAAIm9B,EAAWC,EACf,OAAIF,GACU,WAARl9B,IACF4P,EAAAA,EAAAA,IAAMkL,EAASyJ,MAAO,MAAO,IAKxB2Y,EAAapiB,KAGnBqiB,EAAYp6B,EAAKs6B,gBAAkBF,EAAYA,EAAUn9B,IAEnDm9B,EACEzZ,IAAQ1C,EAAAA,KAAa7O,EAAAA,EAAAA,IAAOuR,EAAK1jB,IAC1C+8B,EAAY/8B,GAAO,EACZ0jB,EAAI1jB,KAGXo9B,EAAmBniB,EAAWjZ,OAAOo7B,kBAAkBjrB,EAAAA,EAAAA,IAAOirB,EAAkBp9B,GAGvEo9B,EAAiBp9B,QALrB,EAsBT,EACA+O,GAAAA,EAAM1I,EAAGyU,GAAY9a,EAAKZ,GACxB,MAAM,KAAE2G,EAAI,WAAE2e,EAAU,IAAEhB,GAAQ5I,EAClC,OAAI8hB,GAAgBlY,EAAY1kB,IAC9B0kB,EAAW1kB,GAAOZ,GACX,GAIE2G,IAASib,EAAAA,KAAa7O,EAAAA,EAAAA,IAAOpM,EAAM/F,IAC5C+F,EAAK/F,GAAOZ,GACL,KACE+S,EAAAA,EAAAA,IAAO2I,EAASuB,MAAOrc,MAInB,MAAXA,EAAI,MAAcA,EAAIuc,MAAM,KAAMzB,MAalC4I,EAAI1jB,GAAOZ,GAGR,GACT,EACAiT,GAAAA,EACEhM,GAAG,KAAEN,EAAI,WAAE2e,EAAU,YAAEqY,EAAW,IAAErZ,EAAG,WAAEzI,EAAU,aAAEoJ,IACpDrkB,GACD,IAAIg9B,EACJ,QAASD,EAAY/8B,IAAQ+F,IAASib,EAAAA,KAAa7O,EAAAA,EAAAA,IAAOpM,EAAM/F,IAAQ48B,GAAgBlY,EAAY1kB,KAASg9B,EAAkB3Y,EAAa,MAAOlS,EAAAA,EAAAA,IAAO6qB,EAAiBh9B,KAAQmS,EAAAA,EAAAA,IAAOuR,EAAK1jB,KAAQmS,EAAAA,EAAAA,IAAOwpB,GAAqB37B,KAAQmS,EAAAA,EAAAA,IAAO8I,EAAWjZ,OAAOo7B,iBAAkBp9B,EACxR,EACAs9B,cAAAA,CAAe/9B,EAAQS,EAAKu9B,GAM1B,OALsB,MAAlBA,EAAW3vB,IACbrO,EAAO8G,EAAE02B,YAAY/8B,GAAO,GACnBmS,EAAAA,EAAAA,IAAOorB,EAAY,UAC5B7gC,KAAKqS,IAAIxP,EAAQS,EAAKu9B,EAAWn+B,MAAO,MAEnCgT,QAAQkrB,eAAe/9B,EAAQS,EAAKu9B,EAC7C,GAUF,MAAMC,IAA6DrvB,EAAAA,EAAAA,IACjE,CAAC,EACD2uB,GACA,CACElvB,GAAAA,CAAIrO,EAAQS,GACV,GAAIA,IAAQ0P,OAAO+tB,YAGnB,OAAOX,GAA4BlvB,IAAIrO,EAAQS,EAAKT,EACtD,EACA8S,GAAAA,CAAIhM,EAAGrG,GACL,MAAMqS,EAAiB,MAAXrS,EAAI,MAAe09B,EAAAA,EAAAA,IAAkB19B,GAQjD,OAAOqS,CACT,IA+DJ,SAASsrB,KAIP,OAAO,IACT,CACA,SAASC,KAIP,OAAO,IACT,CACA,SAASC,GAAaC,GAChB,CAGN,CACA,SAASC,GAAc/vB,GACjB,CAGN,CACA,SAASgwB,KAIP,OAAO,IACT,CACA,SAASC,KACH,CAGN,CACA,SAASC,GAAa7hB,EAAO8hB,GAI3B,OAAO,IACT,CACA,SAASC,KACP,OAAOC,KAAa/Z,KACtB,CACA,SAASga,KACP,OAAOD,KAAa9Z,KACtB,CACA,SAAS8Z,KACP,MAAMjjC,EAAI43B,KAIV,OAAO53B,EAAEmjC,eAAiBnjC,EAAEmjC,aAAeC,GAAmBpjC,GAChE,CACA,SAASqjC,GAAsBpiB,GAC7B,OAAOnf,EAAAA,EAAAA,IAAQmf,GAASA,EAAMqiB,QAC5B,CAACpc,EAAYnnB,KAAOmnB,EAAWnnB,GAAK,KAAMmnB,IAC1C,CAAC,GACCjG,CACN,CACA,SAASsiB,GAAcznB,EAAKinB,GAC1B,MAAM9hB,EAAQoiB,GAAsBvnB,GACpC,IAAK,MAAMlX,KAAOm+B,EAAU,CAC1B,GAAIn+B,EAAIkhB,WAAW,UACjB,SACF,IAAI0d,EAAMviB,EAAMrc,GACZ4+B,GACE1hC,EAAAA,EAAAA,IAAQ0hC,KAAQzmB,EAAAA,EAAAA,IAAWymB,GAC7BA,EAAMviB,EAAMrc,GAAO,CAAE+C,KAAM67B,EAAKzR,QAASgR,EAASn+B,IAElD4+B,EAAIzR,QAAUgR,EAASn+B,GAER,OAAR4+B,IACTA,EAAMviB,EAAMrc,GAAO,CAAEmtB,QAASgR,EAASn+B,KAIrC4+B,GAAOT,EAAS,UAAUn+B,OAC5B4+B,EAAIC,aAAc,EAEtB,CACA,OAAOxiB,CACT,CACA,SAASyiB,GAAYv3B,EAAGC,GACtB,OAAKD,GAAMC,GAEPtK,EAAAA,EAAAA,IAAQqK,KAAMrK,EAAAA,EAAAA,IAAQsK,GACjBD,EAAEoe,OAAOne,IACX2G,EAAAA,EAAAA,IAAO,CAAC,EAAGswB,GAAsBl3B,GAAIk3B,GAAsBj3B,IAHzDD,GAAKC,CAIhB,CACA,SAASu3B,GAAqB1iB,EAAO2iB,GACnC,MAAMplB,EAAM,CAAC,EACb,IAAK,MAAM5Z,KAAOqc,EACX2iB,EAAan3B,SAAS7H,IACzBP,OAAO69B,eAAe1jB,EAAK5Z,EAAK,CAC9Bi/B,YAAY,EACZrxB,IAAKA,IAAMyO,EAAMrc,KAIvB,OAAO4Z,CACT,CACA,SAASslB,GAAiBC,GACxB,MAAMzb,EAAMsP,KAMZ,IAAIoM,EAAYD,IAQhB,OAPAE,MACIriB,EAAAA,EAAAA,IAAUoiB,KACZA,EAAYA,EAAU58B,OAAOxD,IAE3B,MADAgxB,GAAmBtM,GACb1kB,CAAC,KAGJ,CAACogC,EAAW,IAAMpP,GAAmBtM,GAC9C,CAYA,IAAIuZ,IAAoB,EACxB,SAASqC,GAAaxkB,GACpB,MAAM9M,EAAUwuB,GAAqB1hB,GAC/BgV,EAAahV,EAAShE,MACtB4M,EAAM5I,EAAS4I,IACrBuZ,IAAoB,EAChBjvB,EAAQuxB,cACVpL,GAASnmB,EAAQuxB,aAAczkB,EAAU,MAE3C,MAEE/U,KAAMy5B,EACNzyB,SAAU0yB,EAAe,QACzBC,EACAjR,MAAOkR,EACPC,QAASC,EACT3R,OAAQ4R,EAAa,QAErBC,EAAO,YACPC,EAAW,QACXnP,EAAO,aACPoP,EAAY,QACZnP,EAAO,UACPoP,EAAS,YACTC,EAAW,cACXC,EAAa,cACbC,EAAa,UACbC,EAAS,UACTC,EAAS,OACT/b,EAAM,cACNgc,EAAa,gBACbC,EAAe,cACfC,EAAa,eACbC,EAAc,OAEdC,EAAM,aACNjc,EAAY,WAEZkc,EAAU,WACVtQ,EAAU,QACVuQ,GACE9yB,EACE+yB,EAAkG,KAYxG,GAHIjB,GACFkB,GAAkBlB,EAAepc,EAAKqd,GAEpCrB,EACF,IAAK,MAAM1/B,KAAO0/B,EAAS,CACzB,MAAMuB,EAAgBvB,EAAQ1/B,IAC1BmY,EAAAA,EAAAA,IAAW8oB,KASXvd,EAAI1jB,GAAOihC,EAAc3yB,KAAKwhB,GAUpC,CAEF,GAAI0P,EAAa,CACX,EAKJ,MAAMz5B,EAAOy5B,EAAYz4B,KAAK+oB,EAAYA,GACtC,GAKC9nB,EAAAA,EAAAA,IAASjC,KAGZ+U,EAAS/U,MAAOyM,EAAAA,EAAAA,IAASzM,GAe7B,CAEA,GADAk3B,IAAoB,EAChBwC,EACF,IAAK,MAAMz/B,KAAOy/B,EAAiB,CACjC,MAAMb,EAAMa,EAAgBz/B,GACtB4N,GAAMuK,EAAAA,EAAAA,IAAWymB,GAAOA,EAAItwB,KAAKwhB,EAAYA,IAAc3X,EAAAA,EAAAA,IAAWymB,EAAIhxB,KAAOgxB,EAAIhxB,IAAIU,KAAKwhB,EAAYA,GAAc5hB,EAAAA,GAC1H,EAGJ,MAAMa,IAAOoJ,EAAAA,EAAAA,IAAWymB,KAAQzmB,EAAAA,EAAAA,IAAWymB,EAAI7vB,KAAO6vB,EAAI7vB,IAAIT,KAAKwhB,GAI/D5hB,EAAAA,GACE5S,EAAIyR,GAAS,CACjBa,MACAmB,QAEFtP,OAAO69B,eAAe5Z,EAAK1jB,EAAK,CAC9Bi/B,YAAY,EACZiC,cAAc,EACdtzB,IAAKA,IAAMtS,EAAE8D,MACb2P,IAAM7B,GAAM5R,EAAE8D,MAAQ8N,GAK1B,CAEF,GAAIyyB,EACF,IAAK,MAAM3/B,KAAO2/B,EAChBwB,GAAcxB,EAAa3/B,GAAM0jB,EAAKoM,EAAY9vB,GAGtD,GAAI6/B,EAAgB,CAClB,MAAMuB,GAAWjpB,EAAAA,EAAAA,IAAW0nB,GAAkBA,EAAe94B,KAAK+oB,GAAc+P,EAChFztB,QAAQY,QAAQouB,GAAU94B,SAAStI,IACjC4/B,GAAQ5/B,EAAKohC,EAASphC,GAAK,GAE/B,CAIA,SAASqhC,EAAsBC,EAAUlhB,IACnCljB,EAAAA,EAAAA,IAAQkjB,GACVA,EAAK9X,SAASi5B,GAAUD,EAASC,EAAMjzB,KAAKwhB,MACnC1P,GACTkhB,EAASlhB,EAAK9R,KAAKwhB,GAEvB,CAaA,GAtBIiQ,GACF5L,GAAS4L,EAASjlB,EAAU,KAS9BumB,EAAsBpH,GAAe+F,GACrCqB,EAAsB3P,GAAWb,GACjCwQ,EAAsBnH,GAAgB+F,GACtCoB,EAAsBzI,GAAW9H,GACjCuQ,EAAsBnI,GAAagH,GACnCmB,EAAsBjI,GAAe+G,GACrCkB,EAAsB/G,GAAiBoG,GACvCW,EAAsBhH,GAAiBmG,GACvCa,EAAsBjH,GAAmBqG,GACzCY,EAAsB1P,GAAiB0O,GACvCgB,EAAsB1H,GAAa4G,GACnCc,EAAsBlH,GAAkBwG,IACpCzjC,EAAAA,EAAAA,IAAQ0jC,GACV,GAAIA,EAAOvlC,OAAQ,CACjB,MAAMyiC,EAAUhjB,EAASgjB,UAAYhjB,EAASgjB,QAAU,CAAC,GACzD8C,EAAOt4B,SAAStI,IACdP,OAAO69B,eAAeQ,EAAS99B,EAAK,CAClC4N,IAAKA,IAAMkiB,EAAW9vB,GACtB+O,IAAMmL,GAAQ4V,EAAW9vB,GAAOka,GAChC,GAEN,MAAYY,EAASgjB,UACnBhjB,EAASgjB,QAAU,CAAC,GAGpBtZ,GAAU1J,EAAS0J,SAAWtW,EAAAA,KAChC4M,EAAS0J,OAASA,GAEA,MAAhBG,IACF7J,EAAS6J,aAAeA,GAEtBkc,IACF/lB,EAAS+lB,WAAaA,GACpBtQ,IACFzV,EAASyV,WAAaA,EAC1B,CACA,SAASyQ,GAAkBlB,EAAepc,EAAKqd,EAA2B7yB,EAAAA,KACpEhR,EAAAA,EAAAA,IAAQ4iC,KACVA,EAAgB0B,GAAgB1B,IAElC,IAAK,MAAM9/B,KAAO8/B,EAAe,CAC/B,MAAMlB,EAAMkB,EAAc9/B,GAC1B,IAAI05B,EAGAA,GAFA1xB,EAAAA,EAAAA,IAAS42B,GACP,YAAaA,EACJ1Q,GACT0Q,EAAInE,MAAQz6B,EACZ4+B,EAAIzR,SACJ,GAGSe,GAAO0Q,EAAInE,MAAQz6B,GAGrBkuB,GAAO0Q,IAEhBtsB,EAAAA,EAAAA,IAAMonB,GACRj6B,OAAO69B,eAAe5Z,EAAK1jB,EAAK,CAC9Bi/B,YAAY,EACZiC,cAAc,EACdtzB,IAAKA,IAAM8rB,EAASt6B,MACpB2P,IAAM7B,GAAMwsB,EAASt6B,MAAQ8N,IAG/BwW,EAAI1jB,GAAO05B,CAKf,CACF,CACA,SAASvF,GAAS/T,EAAMtF,EAAU/X,GAChCga,GACE7f,EAAAA,EAAAA,IAAQkjB,GAAQA,EAAKlZ,KAAKu6B,GAAMA,EAAEnzB,KAAKwM,EAAShE,SAAUsJ,EAAK9R,KAAKwM,EAAShE,OAC7EgE,EACA/X,EAEJ,CACA,SAASo+B,GAAcjqB,EAAKwM,EAAKoM,EAAY9vB,GAC3C,MAAMsX,EAAStX,EAAI6H,SAAS,KAAOkoB,GAAiBD,EAAY9vB,GAAO,IAAM8vB,EAAW9vB,GACxF,IAAIyc,EAAAA,EAAAA,IAASvF,GAAM,CACjB,MAAMuK,EAAUiC,EAAIxM,IAChBiB,EAAAA,EAAAA,IAAWsJ,IACbgN,GAAMnX,EAAQmK,EAIlB,MAAO,IAAItJ,EAAAA,EAAAA,IAAWjB,GACpBuX,GAAMnX,EAAQJ,EAAI5I,KAAKwhB,SAClB,IAAI9nB,EAAAA,EAAAA,IAASkP,GAClB,IAAIha,EAAAA,EAAAA,IAAQga,GACVA,EAAI5O,SAASiQ,GAAM4oB,GAAc5oB,EAAGmL,EAAKoM,EAAY9vB,SAChD,CACL,MAAMyhB,GAAUtJ,EAAAA,EAAAA,IAAWjB,EAAIuK,SAAWvK,EAAIuK,QAAQnT,KAAKwhB,GAAcpM,EAAIxM,EAAIuK,UAC7EtJ,EAAAA,EAAAA,IAAWsJ,IACbgN,GAAMnX,EAAQmK,EAASvK,EAI3B,MACS,CAGb,CACA,SAASslB,GAAqB1hB,GAC5B,MAAM4mB,EAAO5mB,EAAS/X,MAChB,OAAE4f,EAAQC,QAAS+e,GAAmBD,GAE1C/e,OAAQif,EACRC,aAAc3f,EACdlgB,QAAQ,sBAAE8/B,IACRhnB,EAASG,WACPmH,EAASF,EAAMtU,IAAI8zB,GACzB,IAAIK,EAmBJ,OAlBI3f,EACF2f,EAAW3f,EACDwf,EAAavmC,QAAWsnB,GAAWgf,GAK7CI,EAAW,CAAC,EACRH,EAAavmC,QACfumC,EAAat5B,SACVwiB,GAAMkX,GAAaD,EAAUjX,EAAGgX,GAAuB,KAG5DE,GAAaD,EAAUL,EAAMI,IAT3BC,EAAWL,GAWX15B,EAAAA,EAAAA,IAAS05B,IACXxf,EAAMnT,IAAI2yB,EAAMK,GAEXA,CACT,CACA,SAASC,GAAaC,EAAIxH,EAAMyH,EAAQjgB,GAAU,GAChD,MAAM,OAAEU,EAAQC,QAAS+e,GAAmBlH,EACxCkH,GACFK,GAAaC,EAAIN,EAAgBO,GAAQ,GAEvCvf,GACFA,EAAOra,SACJwiB,GAAMkX,GAAaC,EAAInX,EAAGoX,GAAQ,KAGvC,IAAK,MAAMliC,KAAOy6B,EAChB,GAAIxY,GAAmB,WAARjiB,OAIR,CACL,MAAMmiC,EAAQC,GAA0BpiC,IAAQkiC,GAAUA,EAAOliC,GACjEiiC,EAAGjiC,GAAOmiC,EAAQA,EAAMF,EAAGjiC,GAAMy6B,EAAKz6B,IAAQy6B,EAAKz6B,EACrD,CAEF,OAAOiiC,CACT,CACA,MAAMG,GAA4B,CAChCr8B,KAAMs8B,GACNhmB,MAAOimB,GACPjgB,MAAOigB,GAEP5C,QAAS6C,GACTx1B,SAAUw1B,GAEVhD,aAAciD,GACdzC,QAASyC,GACTxC,YAAawC,GACb3R,QAAS2R,GACTvC,aAAcuC,GACd1R,QAAS0R,GACTpC,cAAeoC,GACfnC,cAAemC,GACflC,UAAWkC,GACXjC,UAAWiC,GACXtC,UAAWsC,GACXrC,YAAaqC,GACb9B,cAAe8B,GACf7B,eAAgB6B,GAEhB3B,WAAY0B,GACZhS,WAAYgS,GAEZ9T,MAAOgU,GAEP7C,QAASyC,GACTnU,OAAQwU,IAEV,SAASL,GAAYJ,EAAIxH,GACvB,OAAKA,EAGAwH,EAGE,WACL,OAAQ9zB,EAAAA,EAAAA,KACNgK,EAAAA,EAAAA,IAAW8pB,GAAMA,EAAGl7B,KAAKrK,KAAMA,MAAQulC,GACvC9pB,EAAAA,EAAAA,IAAWsiB,GAAQA,EAAK1zB,KAAKrK,KAAMA,MAAQ+9B,EAE/C,EAPSA,EAHAwH,CAWX,CACA,SAASS,GAAYT,EAAIxH,GACvB,OAAO8H,GAAmBf,GAAgBS,GAAKT,GAAgB/G,GACjE,CACA,SAAS+G,GAAgBtqB,GACvB,IAAIha,EAAAA,EAAAA,IAAQga,GAAM,CAChB,MAAM7P,EAAM,CAAC,EACb,IAAK,IAAIjM,EAAI,EAAGA,EAAI8b,EAAI7b,OAAQD,IAC9BiM,EAAI6P,EAAI9b,IAAM8b,EAAI9b,GAEpB,OAAOiM,CACT,CACA,OAAO6P,CACT,CACA,SAASsrB,GAAaP,EAAIxH,GACxB,OAAOwH,EAAK,IAAI,IAAIpxB,IAAI,GAAG8U,OAAOsc,EAAIxH,KAAUA,CAClD,CACA,SAAS8H,GAAmBN,EAAIxH,GAC9B,OAAOwH,GAAK9zB,EAAAA,EAAAA,IAAuB1O,OAAOkG,OAAO,MAAOs8B,EAAIxH,GAAQA,CACtE,CACA,SAAS6H,GAAyBL,EAAIxH,GACpC,OAAIwH,GACE/kC,EAAAA,EAAAA,IAAQ+kC,KAAO/kC,EAAAA,EAAAA,IAAQu9B,GAClB,IAAoB,IAAI5pB,IAAI,IAAIoxB,KAAOxH,MAEzCtsB,EAAAA,EAAAA,IACW1O,OAAOkG,OAAO,MAC9B84B,GAAsBwD,GACtBxD,GAA8B,MAARhE,EAAeA,EAAO,CAAC,IAGxCA,CAEX,CACA,SAASgI,GAAkBR,EAAIxH,GAC7B,IAAKwH,EACH,OAAOxH,EACT,IAAKA,EACH,OAAOwH,EACT,MAAMU,GAASx0B,EAAAA,EAAAA,IAAuB1O,OAAOkG,OAAO,MAAOs8B,GAC3D,IAAK,MAAMjiC,KAAOy6B,EAChBkI,EAAO3iC,GAAOwiC,GAAaP,EAAGjiC,GAAMy6B,EAAKz6B,IAE3C,OAAO2iC,CACT,CAEA,SAASC,KACP,MAAO,CACLC,IAAK,KACL7gC,OAAQ,CACN8gC,YAAaC,EAAAA,GACbC,aAAa,EACb5F,iBAAkB,CAAC,EACnB0E,sBAAuB,CAAC,EACxBrkB,kBAAc,EACdvC,iBAAa,EACb+nB,gBAAiB,CAAC,GAEpBtgB,OAAQ,GACRke,WAAY,CAAC,EACbtQ,WAAY,CAAC,EACb6Q,SAA0B3hC,OAAOkG,OAAO,MACxCk8B,aAA8B,IAAIryB,QAClC0zB,WAA4B,IAAI1zB,QAChC2S,WAA4B,IAAI3S,QAEpC,CACA,IAAI2zB,GAAQ,EACZ,SAASC,GAAa5e,EAAQ6E,GAC5B,OAAO,SAAmBga,EAAeC,EAAY,OAC9CnrB,EAAAA,EAAAA,IAAWkrB,KACdA,GAAgBl1B,EAAAA,EAAAA,IAAO,CAAC,EAAGk1B,IAEZ,MAAbC,IAAsBt7B,EAAAA,EAAAA,IAASs7B,KAEjCA,EAAY,MAEd,MAAMC,EAAUX,KACVY,EAAmC,IAAIC,QAC7C,IAAInS,GAAY,EAChB,MAAMuR,EAAMU,EAAQV,IAAM,CACxBa,KAAMP,KACNQ,WAAYN,EACZO,OAAQN,EACRO,WAAY,KACZC,SAAUP,EACVQ,UAAW,KACXC,WACA,UAAIhiC,GACF,OAAOuhC,EAAQvhC,MACjB,EACA,UAAIA,CAAOkL,GACL,CAKN,EACA+2B,GAAAA,CAAIC,KAAWl2B,GAcb,OAbIw1B,EAAiBnxB,IAAI6xB,KAEdA,IAAU/rB,EAAAA,EAAAA,IAAW+rB,EAAOC,UACrCX,EAAiB1vB,IAAIowB,GACrBA,EAAOC,QAAQtB,KAAQ70B,KACdmK,EAAAA,EAAAA,IAAW+rB,KACpBV,EAAiB1vB,IAAIowB,GACrBA,EAAOrB,KAAQ70B,KAMV60B,CACT,EACAuB,KAAAA,CAAMA,GAYJ,OAVOb,EAAQ5gB,OAAO9a,SAASu8B,IAC3Bb,EAAQ5gB,OAAO5kB,KAAKqmC,GASjBvB,CACT,EACA9nB,SAAAA,CAAUrc,EAAMqc,GAId,OAAKA,GAMLwoB,EAAQ1C,WAAWniC,GAAQqc,EACpB8nB,GANEU,EAAQ1C,WAAWniC,EAO9B,EACA2lC,SAAAA,CAAU3lC,EAAM2lC,GAId,OAAKA,GAMLd,EAAQhT,WAAW7xB,GAAQ2lC,EACpBxB,GANEU,EAAQhT,WAAW7xB,EAO9B,EACA4lC,KAAAA,CAAMC,EAAeC,EAAWzb,GAC9B,IAAKuI,EAAW,CACV,EAMJ,MAAM/V,EAAQ6J,GAAYie,EAAeC,GA4BzC,OA3BA/nB,EAAMN,WAAasoB,GACD,IAAdxa,EACFA,EAAY,OACW,IAAdA,IACTA,OAAY,GAWVyb,GAAanb,EACfA,EAAQ9N,EAAOgpB,GAEf/f,EAAOjJ,EAAOgpB,EAAexb,GAE/BuI,GAAY,EACZuR,EAAIgB,WAAaU,EACjBA,EAAcE,YAAc5B,EAKrBrS,GAAejV,EAAMR,YAAcQ,EAAMR,UAAUjE,KAC5D,CAMF,EACAwT,OAAAA,GACMgH,IACF9M,EAAO,KAAMqe,EAAIgB,mBAKVhB,EAAIgB,WAAWY,YAI1B,EACA7E,OAAAA,CAAQ5/B,EAAKZ,GAOX,OADAmkC,EAAQnC,SAASphC,GAAOZ,EACjByjC,CACT,EACA6B,cAAAA,CAAev9B,GACb,MAAMw9B,EAAUC,GAChBA,GAAa/B,EACb,IACE,OAAO17B,GACT,CAAE,QACAy9B,GAAaD,CACf,CACF,GAEF,OAAO9B,CACT,CACF,CACA,IAAI+B,GAAa,KAEjB,SAAShF,GAAQ5/B,EAAKZ,GACpB,GAAK4oB,GAIE,CACL,IAAIoZ,EAAWpZ,GAAgBoZ,SAC/B,MAAMyD,EAAiB7c,GAAgBhd,QAAUgd,GAAgBhd,OAAOo2B,SACpEyD,IAAmBzD,IACrBA,EAAWpZ,GAAgBoZ,SAAW3hC,OAAOkG,OAAOk/B,IAEtDzD,EAASphC,GAAOZ,CAClB,MAVM,CAWR,CACA,SAAS8uB,GAAOluB,EAAKua,EAAcuqB,GAAwB,GACzD,MAAMhqB,EAAWkN,IAAmBhF,EACpC,GAAIlI,GAAY8pB,GAAY,CAC1B,MAAMxD,EAAWtmB,EAA8B,MAAnBA,EAAS9P,OAAiB8P,EAASS,MAAMN,YAAcH,EAASS,MAAMN,WAAWmmB,SAAWtmB,EAAS9P,OAAOo2B,SAAWwD,GAAWd,SAAS1C,SACvK,GAAIA,GAAYphC,KAAOohC,EACrB,OAAOA,EAASphC,GACX,GAAIwa,UAAUnf,OAAS,EAC5B,OAAOypC,IAAyB3sB,EAAAA,EAAAA,IAAWoC,GAAgBA,EAAaxT,KAAK+T,GAAYA,EAAShE,OAASyD,CAI/G,MAAW,CAGb,CACA,SAASwqB,KACP,SAAU/c,IAAmBhF,GAA4B4hB,GAC3D,CAEA,MAAMI,GAAsB,CAAC,EACvBC,GAAuBA,IAAMxlC,OAAOkG,OAAOq/B,IAC3CE,GAAoBp+B,GAAQrH,OAAOwS,eAAenL,KAASk+B,GAEjE,SAASG,GAAUrqB,EAAUqY,EAAUiS,EAAY5tB,GAAQ,GACzD,MAAM6E,EAAQ,CAAC,EACTkI,EAAQ0gB,KACdnqB,EAASuqB,cAAgC5lC,OAAOkG,OAAO,MACvD2/B,GAAaxqB,EAAUqY,EAAU9W,EAAOkI,GACxC,IAAK,MAAMvkB,KAAO8a,EAASuJ,aAAa,GAChCrkB,KAAOqc,IACXA,EAAMrc,QAAO,GAMbolC,EACFtqB,EAASuB,MAAQ7E,EAAQ6E,GAAQ9F,EAAAA,EAAAA,IAAgB8F,GAE5CvB,EAAS/X,KAAKsZ,MAGjBvB,EAASuB,MAAQA,EAFjBvB,EAASuB,MAAQkI,EAKrBzJ,EAASyJ,MAAQA,CACnB,CAQA,SAASghB,GAAYzqB,EAAUqY,EAAUqS,EAAclf,GACrD,MAAM,MACJjK,EAAK,MACLkI,EACAhJ,OAAO,UAAEoL,IACP7L,EACE2qB,GAAkBp0B,EAAAA,EAAAA,IAAMgL,IACvBrO,GAAW8M,EAASuJ,aAC3B,IAAIqhB,GAAkB,EACtB,KAI+Epf,GAAaK,EAAY,IAAoB,GAAZA,EAmCzG,CAIL,IAAIgf,EAHAL,GAAaxqB,EAAUqY,EAAU9W,EAAOkI,KAC1CmhB,GAAkB,GAGpB,IAAK,MAAM1lC,KAAOylC,EACXtS,KACJhhB,EAAAA,EAAAA,IAAOghB,EAAUnzB,KAEhB2lC,GAAW/jB,EAAAA,EAAAA,IAAU5hB,MAAUA,IAAQmS,EAAAA,EAAAA,IAAOghB,EAAUwS,MACpD33B,GACEw3B,QACmB,IAAtBA,EAAaxlC,SACa,IAA3BwlC,EAAaG,KACXtpB,EAAMrc,GAAO4lC,GACX53B,EACAy3B,EACAzlC,OACA,EACA8a,GACA,WAIGuB,EAAMrc,IAInB,GAAIukB,IAAUkhB,EACZ,IAAK,MAAMzlC,KAAOukB,EACX4O,IAAahhB,EAAAA,EAAAA,IAAOghB,EAAUnzB,YAC1BukB,EAAMvkB,GACb0lC,GAAkB,EAI1B,MArEE,GAAgB,EAAZ/e,EAAe,CACjB,MAAMkf,EAAgB/qB,EAASS,MAAMwL,aACrC,IAAK,IAAI3rB,EAAI,EAAGA,EAAIyqC,EAAcxqC,OAAQD,IAAK,CAC7C,IAAI4E,EAAM6lC,EAAczqC,GACxB,GAAIynB,EAAe/H,EAAS8L,aAAc5mB,GACxC,SAEF,MAAMZ,EAAQ+zB,EAASnzB,GACvB,GAAIgO,EACF,IAAImE,EAAAA,EAAAA,IAAOoS,EAAOvkB,GACZZ,IAAUmlB,EAAMvkB,KAClBukB,EAAMvkB,GAAOZ,EACbsmC,GAAkB,OAEf,CACL,MAAMI,GAAenkB,EAAAA,EAAAA,IAAS3hB,GAC9Bqc,EAAMypB,GAAgBF,GACpB53B,EACAy3B,EACAK,EACA1mC,EACA0b,GACA,EAEJ,MAEI1b,IAAUmlB,EAAMvkB,KAClBukB,EAAMvkB,GAAOZ,EACbsmC,GAAkB,EAGxB,CACF,CAsCEA,IACFt5B,EAAAA,EAAAA,IAAQ0O,EAASyJ,MAAO,MAAO,GAKnC,CACA,SAAS+gB,GAAaxqB,EAAUqY,EAAU9W,EAAOkI,GAC/C,MAAOvW,EAAS+3B,GAAgBjrB,EAASuJ,aACzC,IACI2hB,EADAN,GAAkB,EAEtB,GAAIvS,EACF,IAAK,IAAInzB,KAAOmzB,EAAU,CACxB,IAAI8S,EAAAA,EAAAA,IAAejmC,GACjB,SAEF,MAAMZ,EAAQ+zB,EAASnzB,GACvB,IAAIkmC,EACAl4B,IAAWmE,EAAAA,EAAAA,IAAOnE,EAASk4B,GAAWvkB,EAAAA,EAAAA,IAAS3hB,IAC5C+lC,GAAiBA,EAAal+B,SAASq+B,IAGzCF,IAAkBA,EAAgB,CAAC,IAAIE,GAAY9mC,EAFpDid,EAAM6pB,GAAY9mC,EAIVyjB,EAAe/H,EAAS8L,aAAc5mB,IAC1CA,KAAOukB,GAAUnlB,IAAUmlB,EAAMvkB,KACrCukB,EAAMvkB,GAAOZ,EACbsmC,GAAkB,EAGxB,CAEF,GAAIK,EAAc,CAChB,MAAMN,GAAkBp0B,EAAAA,EAAAA,IAAMgL,GACxB8pB,EAAaH,GAAiBhlB,EAAAA,GACpC,IAAK,IAAI5lB,EAAI,EAAGA,EAAI2qC,EAAa1qC,OAAQD,IAAK,CAC5C,MAAM4E,EAAM+lC,EAAa3qC,GACzBihB,EAAMrc,GAAO4lC,GACX53B,EACAy3B,EACAzlC,EACAmmC,EAAWnmC,GACX8a,IACC3I,EAAAA,EAAAA,IAAOg0B,EAAYnmC,GAExB,CACF,CACA,OAAO0lC,CACT,CACA,SAASE,GAAiB53B,EAASqO,EAAOrc,EAAKZ,EAAO0b,EAAUsrB,GAC9D,MAAMxH,EAAM5wB,EAAQhO,GACpB,GAAW,MAAP4+B,EAAa,CACf,MAAMyH,GAAal0B,EAAAA,EAAAA,IAAOysB,EAAK,WAC/B,GAAIyH,QAAwB,IAAVjnC,EAAkB,CAClC,MAAMmb,EAAeqkB,EAAIzR,QACzB,GAAIyR,EAAI77B,OAAS8uB,WAAa+M,EAAIC,cAAe1mB,EAAAA,EAAAA,IAAWoC,GAAe,CACzE,MAAM,cAAE8qB,GAAkBvqB,EAC1B,GAAI9a,KAAOqlC,EACTjmC,EAAQimC,EAAcrlC,OACjB,CACL,MAAMiJ,EAAQ+mB,GAAmBlV,GACjC1b,EAAQimC,EAAcrlC,GAAOua,EAAaxT,KACxC,KACAsV,GAEFpT,GACF,CACF,MACE7J,EAAQmb,CAEZ,CACIqkB,EAAI,KACFwH,IAAaC,EACfjnC,GAAQ,GACCw/B,EAAI,IAAsC,KAAVx/B,GAAgBA,KAAUwiB,EAAAA,EAAAA,IAAU5hB,KAC7EZ,GAAQ,GAGd,CACA,OAAOA,CACT,CACA,SAASknC,GAAsBtkB,EAAM/G,EAAYgH,GAAU,GACzD,MAAMC,EAAQjH,EAAWioB,WACnB9gB,EAASF,EAAMtU,IAAIoU,GACzB,GAAII,EACF,OAAOA,EAET,MAAMlL,EAAM8K,EAAK3F,MACXiG,EAAa,CAAC,EACdyjB,EAAe,GACrB,IAAIxjB,GAAa,EACjB,KAA4BpK,EAAAA,EAAAA,IAAW6J,GAAO,CAC5C,MAAMukB,EAAe9jB,IACnBF,GAAa,EACb,MAAOlG,EAAO3U,GAAQ4+B,GAAsB7jB,EAAMxH,GAAY,IAC9D9M,EAAAA,EAAAA,IAAOmU,EAAYjG,GACf3U,GACFq+B,EAAahoC,QAAQ2J,EAAK,GAEzBua,GAAWhH,EAAW0H,OAAOtnB,QAChC4f,EAAW0H,OAAOra,QAAQi+B,GAExBvkB,EAAKY,SACP2jB,EAAYvkB,EAAKY,SAEfZ,EAAKW,QACPX,EAAKW,OAAOra,QAAQi+B,EAExB,CACA,IAAKrvB,IAAQqL,EAIX,OAHIva,EAAAA,EAAAA,IAASga,IACXE,EAAMnT,IAAIiT,EAAMwkB,EAAAA,IAEXA,EAAAA,GAET,IAAItpC,EAAAA,EAAAA,IAAQga,GACV,IAAK,IAAI9b,EAAI,EAAGA,EAAI8b,EAAI7b,OAAQD,IAAK,CAC/B,EAGJ,MAAMqrC,GAAgB9kB,EAAAA,EAAAA,IAASzK,EAAI9b,IAC/BsrC,GAAiBD,KACnBnkB,EAAWmkB,GAAiBzlB,EAAAA,GAEhC,MACK,GAAI9J,EAAK,CACV,EAGJ,IAAK,MAAMlX,KAAOkX,EAAK,CACrB,MAAMuvB,GAAgB9kB,EAAAA,EAAAA,IAAS3hB,GAC/B,GAAI0mC,GAAiBD,GAAgB,CACnC,MAAM7H,EAAM1nB,EAAIlX,GACVH,EAAOyiB,EAAWmkB,IAAiBvpC,EAAAA,EAAAA,IAAQ0hC,KAAQzmB,EAAAA,EAAAA,IAAWymB,GAAO,CAAE77B,KAAM67B,IAAQzwB,EAAAA,EAAAA,IAAO,CAAC,EAAGywB,GACtG,GAAI/+B,EAAM,CACR,MAAM8mC,EAAeC,GAAa5U,QAASnyB,EAAKkD,MAC1C8jC,EAAcD,GAAahrC,OAAQiE,EAAKkD,MAC9ClD,EAAK,GAAsB8mC,GAAgB,EAC3C9mC,EAAK,GAA0BgnC,EAAc,GAAKF,EAAeE,GAC7DF,GAAgB,IAAKx0B,EAAAA,EAAAA,IAAOtS,EAAM,aACpCkmC,EAAahoC,KAAK0oC,EAEtB,CACF,CACF,CACF,CACA,MAAMp/B,EAAM,CAACib,EAAYyjB,GAIzB,OAHI/9B,EAAAA,EAAAA,IAASga,IACXE,EAAMnT,IAAIiT,EAAM3a,GAEXA,CACT,CACA,SAASq/B,GAAiB1mC,GACxB,MAAe,MAAXA,EAAI,MAAeimC,EAAAA,EAAAA,IAAejmC,EAMxC,CACA,SAAS8mC,GAAQC,GACf,GAAa,OAATA,EACF,MAAO,OAET,GAAoB,oBAATA,EACT,OAAOA,EAAKroC,MAAQ,GACf,GAAoB,kBAATqoC,EAAmB,CACnC,MAAMroC,EAAOqoC,EAAKtoC,aAAesoC,EAAKtoC,YAAYC,KAClD,OAAOA,GAAQ,EACjB,CACA,MAAO,EACT,CACA,SAASsoC,GAAWz/B,EAAGC,GACrB,OAAOs/B,GAAQv/B,KAAOu/B,GAAQt/B,EAChC,CACA,SAASo/B,GAAa7jC,EAAMkkC,GAC1B,OAAI/pC,EAAAA,EAAAA,IAAQ+pC,GACHA,EAAcC,WAAW59B,GAAM09B,GAAW19B,EAAGvG,MAC3CoV,EAAAA,EAAAA,IAAW8uB,IACbD,GAAWC,EAAelkC,GAAQ,GAEnC,CACV,CAyGA,MAAMokC,GAAiBnnC,GAAmB,MAAXA,EAAI,IAAsB,YAARA,EAC3ConC,GAAsBhoC,IAAUlC,EAAAA,EAAAA,IAAQkC,GAASA,EAAM8H,IAAI8d,IAAkB,CAACA,GAAe5lB,IAC7FioC,GAAgBA,CAACrnC,EAAKsnC,EAAS5jB,KACnC,GAAI4jB,EAAQ1jB,GACV,OAAO0jB,EAET,MAAMhlB,EAAamB,GAAQ,IAAItS,IAMtBi2B,GAAmBE,KAAWn2B,KACpCuS,GAEH,OADApB,EAAW2B,IAAK,EACT3B,CAAU,EAEbilB,GAAuBA,CAACC,EAAUljB,EAAOxJ,KAC7C,MAAM4I,EAAM8jB,EAASC,KACrB,IAAK,MAAMznC,KAAOwnC,EAAU,CAC1B,GAAIL,GAAcnnC,GAChB,SACF,MAAMZ,EAAQooC,EAASxnC,GACvB,IAAImY,EAAAA,EAAAA,IAAW/Y,GACbklB,EAAMtkB,GAAOqnC,GAAcrnC,EAAKZ,EAAOskB,QAClC,GAAa,MAATtkB,EAAe,CACpB,EAKJ,MAAMkjB,EAAa8kB,GAAmBhoC,GACtCklB,EAAMtkB,GAAO,IAAMsiB,CACrB,CACF,GAEIolB,GAAsBA,CAAC5sB,EAAUgL,KAMrC,MAAMxD,EAAa8kB,GAAmBthB,GACtChL,EAASwJ,MAAM6I,QAAU,IAAM7K,CAAU,EAErCqlB,GAAYA,CAAC7sB,EAAUgL,KAC3B,MAAMxB,EAAQxJ,EAASwJ,MAAQ2gB,KAC/B,GAA+B,GAA3BnqB,EAASS,MAAMsJ,UAAgB,CACjC,MAAM9hB,EAAO+iB,EAASzf,EAClBtD,IACFoL,EAAAA,EAAAA,IAAOmW,EAAOwB,IACd1O,EAAAA,EAAAA,IAAIkN,EAAO,IAAKvhB,GAAM,IAEtBwkC,GAAqBzhB,EAAUxB,EAEnC,MAAWwB,GACT4hB,GAAoB5sB,EAAUgL,EAChC,EAEI8hB,GAAcA,CAAC9sB,EAAUgL,EAAUQ,KACvC,MAAM,MAAE/K,EAAK,MAAE+I,GAAUxJ,EACzB,IAAI+sB,GAAoB,EACpBC,EAA2B9mB,EAAAA,GAC/B,GAAsB,GAAlBzF,EAAMsJ,UAAgB,CACxB,MAAM9hB,EAAO+iB,EAASzf,EAClBtD,EAISujB,GAAsB,IAATvjB,EACtB8kC,GAAoB,IAEpB15B,EAAAA,EAAAA,IAAOmW,EAAOwB,GACTQ,GAAsB,IAATvjB,UACTuhB,EAAMje,IAIjBwhC,GAAqB/hB,EAASe,QAC9B0gB,GAAqBzhB,EAAUxB,IAEjCwjB,EAA2BhiB,CAC7B,MAAWA,IACT4hB,GAAoB5sB,EAAUgL,GAC9BgiB,EAA2B,CAAE3a,QAAS,IAExC,GAAI0a,EACF,IAAK,MAAM7nC,KAAOskB,EACX6iB,GAAcnnC,IAAyC,MAAjC8nC,EAAyB9nC,WAC3CskB,EAAMtkB,EAGnB,EAGF,SAAS+nC,GAAOC,EAAQC,EAAWnf,EAAgBvN,EAAO2sB,GAAY,GACpE,IAAIhrC,EAAAA,EAAAA,IAAQ8qC,GAUV,YATAA,EAAO1/B,SACL,CAACiQ,EAAGnd,IAAM2sC,GACRxvB,EACA0vB,KAAc/qC,EAAAA,EAAAA,IAAQ+qC,GAAaA,EAAU7sC,GAAK6sC,GAClDnf,EACAvN,EACA2sB,KAKN,GAAI1S,GAAeja,KAAW2sB,EAC5B,OAEF,MAAMC,EAA6B,EAAlB5sB,EAAMsJ,UAAgB2L,GAAejV,EAAMR,YAAcQ,EAAMR,UAAUjE,MAAQyE,EAAM2L,GAClG9nB,EAAQ8oC,EAAY,KAAOC,GACzB/sC,EAAGgtC,EAAO7vB,EAAGC,GAAQwvB,EAO7B,MAAMK,EAASJ,GAAaA,EAAU1vB,EAChC4jB,EAAOiM,EAAMjM,OAASnb,EAAAA,GAAYonB,EAAMjM,KAAO,CAAC,EAAIiM,EAAMjM,KAC1DzX,EAAa0jB,EAAM1jB,WAWzB,GAVc,MAAV2jB,GAAkBA,IAAW7vB,KAC3BiE,EAAAA,EAAAA,IAAS4rB,IACXlM,EAAKkM,GAAU,MACXl2B,EAAAA,EAAAA,IAAOuS,EAAY2jB,KACrB3jB,EAAW2jB,GAAU,QAEd/1B,EAAAA,EAAAA,IAAM+1B,KACfA,EAAOjpC,MAAQ,QAGf+Y,EAAAA,EAAAA,IAAWK,GACb6C,EAAsB7C,EAAK4vB,EAAO,GAAI,CAAChpC,EAAO+8B,QACzC,CACL,MAAMmM,GAAY7rB,EAAAA,EAAAA,IAASjE,GACrB+vB,GAASj2B,EAAAA,EAAAA,IAAMkG,GACrB,GAAI8vB,GAAaC,EAAQ,CACvB,MAAMC,EAAQA,KACZ,GAAIR,EAAOz+B,EAAG,CACZ,MAAMk/B,EAAWH,GAAYn2B,EAAAA,EAAAA,IAAOuS,EAAYlM,GAAOkM,EAAWlM,GAAO2jB,EAAK3jB,GAAOA,EAAIpZ,MACrF8oC,GACFhrC,EAAAA,EAAAA,IAAQurC,KAAaxd,EAAAA,EAAAA,IAAOwd,EAAUN,IAEjCjrC,EAAAA,EAAAA,IAAQurC,GAWDA,EAAS5gC,SAASsgC,IAC5BM,EAAS1qC,KAAKoqC,GAXVG,GACFnM,EAAK3jB,GAAO,CAAC2vB,IACTh2B,EAAAA,EAAAA,IAAOuS,EAAYlM,KACrBkM,EAAWlM,GAAO2jB,EAAK3jB,MAGzBA,EAAIpZ,MAAQ,CAAC+oC,GACTH,EAAOpgC,IACTu0B,EAAK6L,EAAOpgC,GAAK4Q,EAAIpZ,OAM/B,MAAWkpC,GACTnM,EAAK3jB,GAAOpZ,GACR+S,EAAAA,EAAAA,IAAOuS,EAAYlM,KACrBkM,EAAWlM,GAAOpZ,IAEXmpC,IACT/vB,EAAIpZ,MAAQA,EACR4oC,EAAOpgC,IACTu0B,EAAK6L,EAAOpgC,GAAKxI,GACkC,EAIrDA,GACFopC,EAAMjqB,IAAM,EACZqR,GAAsB4Y,EAAO1f,IAE7B0f,GAEJ,MAAW,CAGb,CACF,CAEA,IAAIE,IAAc,EAClB,MAAMC,GAAkBhgB,GAAcA,EAAUigB,aAAa/gC,SAAS,QAAgC,kBAAtB8gB,EAAUkgB,QACpFC,GAAqBngB,GAAcA,EAAUigB,aAAa/gC,SAAS,UACnEkhC,GAAoBpgB,GACpBggB,GAAehgB,GACV,MACLmgB,GAAkBngB,GACb,cADT,EAIIqgB,GAAajc,GAA2B,IAAlBA,EAAKkc,SACjC,SAASC,GAAyBjgB,GAChC,MACEkgB,GAAIC,EACJjuC,EAAG0uB,EACHC,GAAG,UACDuf,EAAS,WACTC,EAAU,YACVC,EAAW,WACXve,EAAU,OACVC,EAAM,OACNue,EAAM,cACNC,IAEAxgB,EACEI,EAAUA,CAAC9N,EAAOoN,KACtB,IAAKA,EAAU+gB,gBAOb,OAN8CC,yCAA4C/uB,EACxF,gGAEFiP,EAAM,KAAMtO,EAAOoN,GACnBjJ,SACAiJ,EAAUihB,OAASruB,GAGrBmtB,IAAc,EACd1b,EAAYrE,EAAUkhB,WAAYtuB,EAAO,KAAM,KAAM,MACrDmE,IACAiJ,EAAUihB,OAASruB,EACfmtB,IACFzpC,QAAQC,MAAM,+CAChB,EAEI8tB,EAAcA,CAACD,EAAMxR,EAAOsN,EAAiBC,EAAgBE,EAAc1C,GAAY,KAC3FA,EAAYA,KAAe/K,EAAMqS,gBACjC,MAAMkc,EAAkBd,GAAUjc,IAAuB,MAAdA,EAAKhnB,KAC1CgkC,EAAaA,IAAMC,EACvBjd,EACAxR,EACAsN,EACAC,EACAE,EACA8gB,IAEI,KAAE/mC,EAAI,IAAEyV,EAAG,UAAEqM,EAAS,UAAE8B,GAAcpL,EAC5C,IAAI0uB,EAAUld,EAAKkc,SACnB1tB,EAAM2L,GAAK6F,GAeQ,IAAfpG,IACFL,GAAY,EACZ/K,EAAMqS,gBAAkB,MAE1B,IAAIsc,EAAW,KACf,OAAQnnC,GACN,KAAKonC,GACa,IAAZF,EACqB,KAAnB1uB,EAAMuK,UACR0jB,EAAOjuB,EAAM2L,GAAKoiB,EAAW,IAAKte,EAAW+B,GAAOA,GACpDmd,EAAWnd,GAEXmd,EAAWH,KAGThd,EAAKhnB,OAASwV,EAAMuK,WACtB4iB,IAAc,EACgCiB,yCAA4C/uB,EACxF,6BACAmS,EAAK/B,WACL,6BACYtqB,KAAKoD,UACfipB,EAAKhnB,kCAEKrF,KAAKoD,UAAUyX,EAAMuK,aAEnCiH,EAAKhnB,KAAOwV,EAAMuK,UAEpBokB,EAAWX,EAAYxc,IAEzB,MACF,KAAK1H,GACC+kB,EAAerd,IACjBmd,EAAWX,EAAYxc,GACvBsd,EACE9uB,EAAM2L,GAAK6F,EAAKud,QAAQT,WACxB9c,EACAlE,IAGFqhB,EADqB,IAAZD,GAA+BH,EAC7BC,IAEAR,EAAYxc,GAEzB,MACF,KAAKwd,GAKH,GAJIT,IACF/c,EAAOwc,EAAYxc,GACnBkd,EAAUld,EAAKkc,UAED,IAAZgB,GAA2C,IAAZA,EAA0B,CAC3DC,EAAWnd,EACX,MAAMyd,GAAsBjvB,EAAMuK,SAASzqB,OAC3C,IAAK,IAAID,EAAI,EAAGA,EAAImgB,EAAMkvB,YAAarvC,IACjCovC,IACFjvB,EAAMuK,UAAkC,IAAtBokB,EAASjB,SAA+BiB,EAASQ,UAAYR,EAASnkC,MACtF3K,IAAMmgB,EAAMkvB,YAAc,IAC5BlvB,EAAMqN,OAASshB,GAEjBA,EAAWX,EAAYW,GAEzB,OAAOJ,EAAkBP,EAAYW,GAAYA,CACnD,CACEH,IAEF,MACF,KAAK1U,GAID6U,EAHGJ,EAGQa,EACT5d,EACAxR,EACAsN,EACAC,EACAE,EACA1C,GARSyjB,IAWb,MACF,QACE,GAAgB,EAAZllB,EAIAqlB,EAHe,IAAZD,GAA+B1uB,EAAMxY,KAAKggB,gBAAkBgK,EAAK8b,QAAQ9lB,eAAmBqnB,EAAerd,GAGnG6d,EACT7d,EACAxR,EACAsN,EACAC,EACAE,EACA1C,GARSyjB,SAWR,GAAgB,EAAZllB,EAAe,CACxBtJ,EAAMyN,aAAeA,EACrB,MAAML,EAAYqC,EAAW+B,GAiB7B,GAfEmd,EADEJ,EACSe,EAAoB9d,GACtBic,GAAUjc,IAAuB,mBAAdA,EAAKhnB,KACtB8kC,EAAoB9d,EAAMA,EAAKhnB,KAAM,gBAErCwjC,EAAYxc,GAEzBqc,EACE7tB,EACAoN,EACA,KACAE,EACAC,EACAigB,GAAiBpgB,GACjBrC,GAEEkP,GAAeja,GAAQ,CACzB,IAAI4L,EACA2iB,GACF3iB,EAAU/B,GAAYiQ,IACtBlO,EAAQyB,OAASshB,EAAWA,EAASY,gBAAkBniB,EAAUoiB,WAEjE5jB,EAA4B,IAAlB4F,EAAKkc,SAAiB+B,GAAgB,IAAM5lB,GAAY,OAEpE+B,EAAQD,GAAK6F,EACbxR,EAAMR,UAAUoM,QAAUA,CAC5B,CACF,MAAuB,GAAZtC,EAEPqlB,EADc,IAAZD,EACSF,IAEAxuB,EAAMxY,KAAKsmB,QACpB0D,EACAxR,EACAsN,EACAC,EACAE,EACA1C,EACA2C,EACAgiB,GAGiB,IAAZpmB,EACTqlB,EAAW3uB,EAAMxY,KAAKsmB,QACpB0D,EACAxR,EACAsN,EACAC,EACAigB,GAAiB/d,EAAW+B,IAC5B/D,EACA1C,EACA2C,EACA+D,GAEoD2c,yCACtD/uB,EAAO,0BAA2B7X,EAAM,WAAWA,MAMzD,OAHW,MAAPyV,GACFuvB,GAAOvvB,EAAK,KAAMsQ,EAAgBvN,GAE7B2uB,CAAQ,EAEXU,EAAiBA,CAAC1jB,EAAI3L,EAAOsN,EAAiBC,EAAgBE,EAAc1C,KAChFA,EAAYA,KAAe/K,EAAMqS,gBACjC,MAAM,KAAE7qB,EAAI,MAAEsZ,EAAK,UAAEsK,EAAS,UAAE9B,EAAS,KAAEa,EAAI,WAAEE,GAAerK,EAC1D2vB,EAAsB,UAATnoC,GAA6B,WAATA,EACvC,GAAiDmoC,IAA6B,IAAfvkB,EAAkB,CAC3EjB,GACFqL,GAAoBxV,EAAO,KAAMsN,EAAiB,WAEpD,IAiFIsiB,EAjFAC,GAA0B,EAC9B,GAAIhB,EAAeljB,GAAK,CACtBkkB,EAA0BC,GAAeviB,EAAgBlD,IAAeiD,GAAmBA,EAAgBtN,MAAMc,OAASwM,EAAgBtN,MAAMc,MAAM0V,OACtJ,MAAMuY,EAAUpjB,EAAGojB,QAAQT,WACvBuB,GACFxlB,EAAW4O,YAAY8V,GAEzBD,EAAYC,EAASpjB,EAAI2B,GACzBtN,EAAM2L,GAAKA,EAAKojB,CAClB,CACA,GAAgB,GAAZzlB,KACFxI,IAAUA,EAAMivB,YAAajvB,EAAMkvB,aAAe,CAClD,IAAIz2B,EAAOm2B,EACT/jB,EAAG2iB,WACHtuB,EACA2L,EACA2B,EACAC,EACAE,EACA1C,GAEEklB,GAAY,EAChB,MAAO12B,EAAM,CACX4zB,IAAc,EACoCiB,0CAA6C6B,IAC7F5wB,EACE,iCACAsM,EACA,yEAGFskB,GAAY,GAEd,MAAMruB,EAAMrI,EACZA,EAAOA,EAAKy0B,YACZte,EAAO9N,EACT,CACF,MAAuB,EAAZ0H,GACLqC,EAAGqkB,cAAgBhwB,EAAMuK,WAC3B4iB,IAAc,EACgCiB,yCAA4C/uB,EACxF,qCACAsM,EACA,6BACcA,EAAGqkB,wCACHhwB,EAAMuK,YAEtBoB,EAAGqkB,YAAchwB,EAAMuK,UAG3B,GAAIzJ,EACF,GAAiDstB,yCAA2CuB,IAAe5kB,GAAyB,GAAZK,EACtH,IAAK,MAAM3mB,KAAOqc,EACkCstB,yCAA4C8B,GAAgBvkB,EAAIlnB,EAAKqc,EAAMrc,GAAMub,EAAOsN,KACxI6f,IAAc,IAEZwC,IAAelrC,EAAI0rC,SAAS,UAAoB,kBAAR1rC,KAA4B8iB,EAAAA,EAAAA,IAAK9iB,MAASimC,EAAAA,EAAAA,IAAejmC,IAC1F,MAAXA,EAAI,KACFqpC,EACEniB,EACAlnB,EACA,KACAqc,EAAMrc,QACN,OACA,EACA6oB,QAIGxM,EAAMsvB,SACftC,EACEniB,EACA,UACA,KACA7K,EAAMsvB,aACN,OACA,EACA9iB,IAKFsiB,EAAa9uB,GAASA,EAAMuvB,qBAC9BxT,GAAgB+S,EAAYtiB,EAAiBtN,GAE3CmK,GACFqL,GAAoBxV,EAAO,KAAMsN,EAAiB,iBAE/CsiB,EAAa9uB,GAASA,EAAM8b,iBAAmBzS,GAAQ0lB,IAC1Dvd,IAAwB,KACtBsd,GAAc/S,GAAgB+S,EAAYtiB,EAAiBtN,GAC3D6vB,GAA2BxlB,EAAW8O,MAAMxN,GAC5CxB,GAAQqL,GAAoBxV,EAAO,KAAMsN,EAAiB,UAAU,GACnEC,EAEP,CACA,OAAO5B,EAAGqiB,WAAW,EAEjB0B,EAAkBA,CAACle,EAAM8e,EAAaljB,EAAWE,EAAiBC,EAAgBE,EAAc1C,KACpGA,EAAYA,KAAeulB,EAAYje,gBACvC,MAAM9H,EAAW+lB,EAAY/lB,SACvBpa,EAAIoa,EAASzqB,OACnB,IAAImwC,GAAY,EAChB,IAAK,IAAIpwC,EAAI,EAAGA,EAAIsQ,EAAGtQ,IAAK,CAC1B,MAAMmgB,EAAQ+K,EAAYR,EAAS1qB,GAAK0qB,EAAS1qB,GAAK4pB,GAAec,EAAS1qB,IAC9E,GAAI2xB,EACFA,EAAOC,EACLD,EACAxR,EACAsN,EACAC,EACAE,EACA1C,OAEG,IAAI/K,EAAMxY,OAASonC,KAAS5uB,EAAMuK,SACvC,SAEA4iB,IAAc,EACoCiB,0CAA6C6B,IAC7F5wB,EACE,iCACA+N,EACA,0EAGF6iB,GAAY,GAEd3hB,EACE,KACAtO,EACAoN,EACA,KACAE,EACAC,EACAigB,GAAiBpgB,GACjBK,EAEJ,CACF,CACA,OAAO+D,CAAI,EAEP4d,EAAkBA,CAAC5d,EAAMxR,EAAOsN,EAAiBC,EAAgBE,EAAc1C,KACnF,MAAQ0C,aAAc8iB,GAAyBvwB,EAC3CuwB,IACF9iB,EAAeA,EAAeA,EAAarD,OAAOmmB,GAAwBA,GAE5E,MAAMnjB,EAAYqC,EAAW+B,GACvBjY,EAAOm2B,EACX1B,EAAYxc,GACZxR,EACAoN,EACAE,EACAC,EACAE,EACA1C,GAEF,OAAIxR,GAAQk0B,GAAUl0B,IAAuB,MAAdA,EAAK/O,KAC3BwjC,EAAYhuB,EAAMqN,OAAS9T,IAElC4zB,IAAc,EACdc,EAAOjuB,EAAMqN,OAAS6gB,EAAc,KAAM9gB,EAAW7T,GAC9CA,EACT,EAEIk1B,EAAiBA,CAACjd,EAAMxR,EAAOsN,EAAiBC,EAAgBE,EAAc+iB,KAYlF,GAXArD,IAAc,EACgCiB,yCAA4C/uB,EACxF,kDAEAmS,EACkB,IAAlBA,EAAKkc,SAA4B,SAAWD,GAAUjc,IAAuB,MAAdA,EAAKhnB,KAAe,sBAAwB,GAC3G,0BAEAwV,EAAMxY,MAERwY,EAAM2L,GAAK,KACP6kB,EAAY,CACd,MAAMttB,EAAMosB,EAAoB9d,GAChC,MAAO,EAAM,CACX,MAAMif,EAAQzC,EAAYxc,GAC1B,IAAIif,GAASA,IAAUvtB,EAGrB,MAFAwM,EAAO+gB,EAIX,CACF,CACA,MAAMl3B,EAAOy0B,EAAYxc,GACnBpE,EAAYqC,EAAW+B,GAY7B,OAXA9B,EAAO8B,GACPlD,EACE,KACAtO,EACAoN,EACA7T,EACA+T,EACAC,EACAigB,GAAiBpgB,GACjBK,GAEKlU,CAAI,EAEP+1B,EAAsBA,CAAC9d,EAAMpoB,EAAO,IAAKG,EAAQ,OACrD,IAAIhE,EAAQ,EACZ,MAAOisB,EAEL,GADAA,EAAOwc,EAAYxc,GACfA,GAAQic,GAAUjc,KAChBA,EAAKhnB,OAASpB,GAChB7D,IACEisB,EAAKhnB,OAASjB,GAAO,CACvB,GAAc,IAAVhE,EACF,OAAOyoC,EAAYxc,GAEnBjsB,GAEJ,CAGJ,OAAOisB,CAAI,EAEPsd,EAAcA,CAAC4B,EAASC,EAASrjB,KACrC,MAAMsjB,EAAcD,EAAQlhB,WACxBmhB,GACFA,EAAYC,aAAaH,EAASC,GAEpC,IAAIlhC,EAAS6d,EACb,MAAO7d,EACDA,EAAOuQ,MAAM2L,KAAOglB,IACtBlhC,EAAOuQ,MAAM2L,GAAKlc,EAAOmc,QAAQD,GAAK+kB,GAExCjhC,EAASA,EAAOA,MAClB,EAEIo/B,EAAkBrd,GACG,IAAlBA,EAAKkc,UAA+D,aAA/Blc,EAAK8b,QAAQ9lB,cAE3D,MAAO,CAACsG,EAAS2D,EACnB,CACA,SAASye,GAAgBvkB,EAAIlnB,EAAKqsC,EAAa9wB,EAAOT,GACpD,IAAIzZ,EACJ,IAAIirC,EACAC,EACAC,EACAC,EACJ,GAAY,UAARzsC,EACFwsC,EAAStlB,EAAGwlB,aAAa,SACzBD,GAAWE,EAAAA,EAAAA,IAAeN,GACrBO,GAAWC,GAAWL,GAAU,IAAKK,GAAWJ,MACnDH,EAAeC,EAAc,cAE1B,GAAY,UAARvsC,EAAiB,CAC1BwsC,EAAStlB,EAAGwlB,aAAa,UAAY,GACrCD,GAAWhwB,EAAAA,EAAAA,IAAS4vB,GAAeA,GAAcS,EAAAA,EAAAA,KAAeC,EAAAA,EAAAA,IAAeV,IAC/E,MAAMW,EAAYC,GAAWT,GACvBU,EAAcD,GAAWR,GAC/B,GAAIlxB,EAAMmK,KACR,IAAK,MAAM,IAAEgL,EAAG,MAAEtxB,KAAWmc,EAAMmK,KAChB,SAAbgL,EAAIhyB,MAAoBU,GAC1B8tC,EAAYn+B,IAAI,UAAW,QAIjC,MAAMuW,EAAmB,MAAZxK,OAAmB,EAASA,EAASqM,QAClD,GAAI5L,IAAU+J,IAAiB,MAARA,OAAe,EAASA,EAAKviB,QAAUsyB,IAAY/P,EAAKQ,SAASje,SAAS0T,GAAQ,CACvG,MAAM4xB,EAAoE,OAAzD9rC,EAAiB,MAAZyZ,OAAmB,EAASA,EAASsyB,iBAAsB,EAAS/rC,EAAG0F,KAAK+T,GAClG,IAAK,MAAM1K,KAAQ+8B,EACjBD,EAAYn+B,IAAI,KAAKqB,IAAQxU,OAAOuxC,EAAQ/8B,IAEhD,CACKi9B,GAAWL,EAAWE,KACzBZ,EAAeC,EAAc,QAEjC,MAAWrlB,aAAcomB,aAAcC,EAAAA,EAAAA,IAAevtC,IAAQknB,aAAc1G,eAAgBgtB,EAAAA,EAAAA,IAAcxtC,KAAQytC,EAAAA,EAAAA,IAAgBztC,QAC5HwtC,EAAAA,EAAAA,IAAcxtC,IAChBwsC,EAAStlB,EAAGwmB,aAAa1tC,GACzBysC,GAAWkB,EAAAA,EAAAA,IAAmBtB,IACN,MAAfA,GACTG,EAAStlB,EAAGwmB,aAAa1tC,GACzBysC,GAAW,IAGTD,EADEtlB,EAAGwmB,aAAa1tC,GACTknB,EAAGwlB,aAAa1sC,GACR,UAARA,GAAkC,aAAfknB,EAAG2hB,SACtB3hB,EAAG9nB,MAIdqtC,KAAWmB,EAAAA,EAAAA,IAAsBvB,IAAezwC,OAAOywC,IAErDG,IAAWC,IACbH,EAAe,YACfC,EAAcvsC,IAGlB,GAAIssC,EAAc,CAChB,MAAMuB,EAAU3gC,IAAY,IAANA,EAAc,iBAAmB,GAAGq/B,MAAgBr/B,KACpE4gC,EAAa,aAAaxB,gBAC1ByB,EAAc,6BACEF,EAAOrB,+BACPqB,EAAOpB,kKAM7B,OAFE7xB,EAAOkzB,EAAY5mB,EAAI6mB,IAElB,CACT,CACA,OAAO,CACT,CACA,SAASlB,GAAW5xC,GAClB,OAAO,IAAI4V,IAAI5V,EAAIqmB,OAAO5a,MAAM,OAClC,CACA,SAASkmC,GAAWrlC,EAAGC,GACrB,GAAID,EAAEuG,OAAStG,EAAEsG,KACf,OAAO,EAET,IAAK,MAAMsf,KAAK7lB,EACd,IAAKC,EAAE6K,IAAI+a,GACT,OAAO,EAGX,OAAO,CACT,CACA,SAAS6f,GAAWhyC,GAClB,MAAM+yC,EAA2B,IAAI1+B,IACrC,IAAK,MAAMorB,KAAQz/B,EAAIyL,MAAM,KAAM,CACjC,IAAK1G,EAAKZ,GAASs7B,EAAKh0B,MAAM,KAC9B1G,EAAa,MAAPA,OAAc,EAASA,EAAIshB,OACjCliB,EAAiB,MAATA,OAAgB,EAASA,EAAMkiB,OACnCthB,GAAOZ,GACT4uC,EAASj/B,IAAI/O,EAAKZ,EAEtB,CACA,OAAO4uC,CACT,CACA,SAASX,GAAW9lC,EAAGC,GACrB,GAAID,EAAEuG,OAAStG,EAAEsG,KACf,OAAO,EAET,IAAK,MAAO9N,EAAKZ,KAAUmI,EACzB,GAAInI,IAAUoI,EAAEoG,IAAI5N,GAClB,OAAO,EAGX,OAAO,CACT,CA0CA,SAASiuC,KAUgD,mBAA5CtE,2CAETuE,EAAAA,EAAAA,MAAgBvE,yCAA0C,EAU9D,CAEA,MAAM/Z,GAAwB/B,GAC9B,SAASsgB,GAAengC,GACtB,OAAOogC,GAAmBpgC,EAC5B,CACA,SAASqgC,GAAwBrgC,GAC/B,OAAOogC,GAAmBpgC,EAASk7B,GACrC,CACA,SAASkF,GAAmBpgC,EAASsgC,GAEjCL,KAEF,MAAM1uC,GAAS2uC,EAAAA,EAAAA,MACf3uC,EAAOgvC,SAAU,EAIjB,MACE/E,OAAQgF,EACRvjB,OAAQwjB,EACRpF,UAAWqF,EACX3kB,cAAe4kB,EACfrF,WAAYsF,EACZnF,cAAeoF,EACfC,QAASC,EACTC,eAAgBC,EAChBjkB,WAAYkkB,EACZ3F,YAAa4F,EACbC,WAAYC,EAAiBnhC,EAAAA,GAC7BohC,oBAAqBC,GACnBvhC,EACE6b,EAAQA,CAACpB,EAAIC,EAAIC,EAAWC,EAAS,KAAMC,EAAkB,KAAMC,EAAiB,KAAMC,OAAY,EAAQC,EAAe,KAAM1C,IAAmFoC,EAAGkF,mBAC7N,GAAInF,IAAOC,EACT,OAEED,IAAOiC,GAAgBjC,EAAIC,KAC7BE,EAAS4mB,EAAgB/mB,GACzB6B,EAAQ7B,EAAII,EAAiBC,GAAgB,GAC7CL,EAAK,OAEe,IAAlBC,EAAG/B,YACLL,GAAY,EACZoC,EAAGkF,gBAAkB,MAEvB,MAAM,KAAE7qB,EAAI,IAAEyV,EAAG,UAAEqM,GAAc6D,EACjC,OAAQ3lB,GACN,KAAKonC,GACHsF,EAAYhnB,EAAIC,EAAIC,EAAWC,GAC/B,MACF,KAAKvD,GACHqqB,EAAmBjnB,EAAIC,EAAIC,EAAWC,GACtC,MACF,KAAK2hB,GACO,MAAN9hB,GACFknB,EAAgBjnB,EAAIC,EAAWC,EAAQG,GAIzC,MACF,KAAKsM,GACHua,EACEnnB,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACA1C,GAEF,MACF,QACkB,EAAZzB,EACFgrB,EACEpnB,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACA1C,GAEmB,EAAZzB,EACTirB,EACErnB,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACA1C,IAEmB,GAAZzB,GAaY,IAAZA,IAZT9hB,EAAKvC,QACHioB,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACA1C,EACAypB,GAmBG,MAAPv3B,GAAeqQ,GACjBkf,GAAOvvB,EAAKiQ,GAAMA,EAAGjQ,IAAKsQ,EAAgBJ,GAAMD,GAAKC,EACvD,EAEI+mB,EAAcA,CAAChnB,EAAIC,EAAIC,EAAWC,KACtC,GAAU,MAANH,EACF+lB,EACE9lB,EAAGxB,GAAK0nB,EAAelmB,EAAG5C,UAC1B6C,EACAC,OAEG,CACL,MAAM1B,EAAKwB,EAAGxB,GAAKuB,EAAGvB,GAClBwB,EAAG5C,WAAa2C,EAAG3C,UACrBipB,EAAY7nB,EAAIwB,EAAG5C,SAEvB,GAEI4pB,EAAqBA,CAACjnB,EAAIC,EAAIC,EAAWC,KACnC,MAANH,EACF+lB,EACE9lB,EAAGxB,GAAK2nB,EAAkBnmB,EAAG5C,UAAY,IACzC6C,EACAC,GAGFF,EAAGxB,GAAKuB,EAAGvB,EACb,EAEIyoB,EAAkBA,CAACjnB,EAAIC,EAAWC,EAAQG,MAC7CL,EAAGxB,GAAIwB,EAAGE,QAAU2mB,EACnB7mB,EAAG5C,SACH6C,EACAC,EACAG,EACAL,EAAGxB,GACHwB,EAAGE,OACJ,EAiBGonB,EAAiBA,EAAG9oB,KAAI0B,UAAUD,EAAW4gB,KACjD,IAAIz0B,EACJ,MAAOoS,GAAMA,IAAO0B,EAClB9T,EAAOq6B,EAAgBjoB,GACvBsnB,EAAWtnB,EAAIyB,EAAW4gB,GAC1BriB,EAAKpS,EAEP05B,EAAW5lB,EAAQD,EAAW4gB,EAAY,EAEtC0G,EAAmBA,EAAG/oB,KAAI0B,aAC9B,IAAI9T,EACJ,MAAOoS,GAAMA,IAAO0B,EAClB9T,EAAOq6B,EAAgBjoB,GACvBunB,EAAWvnB,GACXA,EAAKpS,EAEP25B,EAAW7lB,EAAO,EAEdinB,EAAiBA,CAACpnB,EAAIC,EAAIC,EAAWC,EAAQC,EAAiBC,EAAgBC,EAAWC,EAAc1C,KAC3F,QAAZoC,EAAG3lB,KACLgmB,EAAY,MACS,SAAZL,EAAG3lB,OACZgmB,EAAY,UAEJ,MAANN,EACFynB,EACExnB,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACA1C,GAGF6pB,EACE1nB,EACAC,EACAG,EACAC,EACAC,EACAC,EACA1C,EAEJ,EAEI4pB,EAAeA,CAAC30B,EAAOoN,EAAWC,EAAQC,EAAiBC,EAAgBC,EAAWC,EAAc1C,KACxG,IAAIY,EACAgR,EACJ,MAAM,MAAE7b,EAAK,UAAEwI,EAAS,WAAEe,EAAU,KAAEF,GAASnK,EAyB/C,GAxBA2L,EAAK3L,EAAM2L,GAAKynB,EACdpzB,EAAMxY,KACNgmB,EACA1M,GAASA,EAAM+zB,GACf/zB,GAEc,EAAZwI,EACFoqB,EAAmB/nB,EAAI3L,EAAMuK,UACR,GAAZjB,GACTwrB,EACE90B,EAAMuK,SACNoB,EACA,KACA2B,EACAC,EACAwnB,GAAyB/0B,EAAOwN,GAChCC,EACA1C,GAGAZ,GACFqL,GAAoBxV,EAAO,KAAMsN,EAAiB,WAEpDumB,EAAWloB,EAAI3L,EAAOA,EAAM8f,QAASrS,EAAcH,GAC/CxM,EAAO,CACT,IAAK,MAAMrc,KAAOqc,EACJ,UAARrc,IAAoBimC,EAAAA,EAAAA,IAAejmC,IACrC0uC,EACExnB,EACAlnB,EACA,KACAqc,EAAMrc,GACN+oB,EACAxN,EAAMuK,SACN+C,EACAC,EACAynB,GAIF,UAAWl0B,GACbqyB,EAAcxnB,EAAI,QAAS,KAAM7K,EAAMjd,MAAO2pB,IAE5CmP,EAAY7b,EAAMuvB,qBACpBxT,GAAgBF,EAAWrP,EAAiBtN,EAEhD,CAWImK,GACFqL,GAAoBxV,EAAO,KAAMsN,EAAiB,eAEpD,MAAMuiB,EAA0BC,GAAeviB,EAAgBlD,GAC3DwlB,GACFxlB,EAAW4O,YAAYtN,GAEzBsnB,EAAWtnB,EAAIyB,EAAWC,KACrBsP,EAAY7b,GAASA,EAAM8b,iBAAmBiT,GAA2B1lB,IAC5EkK,IAAsB,KACpBsI,GAAaE,GAAgBF,EAAWrP,EAAiBtN,GACzD6vB,GAA2BxlB,EAAW8O,MAAMxN,GAC5CxB,GAAQqL,GAAoBxV,EAAO,KAAMsN,EAAiB,UAAU,GACnEC,EACL,EAEIsmB,EAAaA,CAACloB,EAAI3L,EAAO8f,EAASrS,EAAcH,KAIpD,GAHIwS,GACFgU,EAAenoB,EAAImU,GAEjBrS,EACF,IAAK,IAAI5tB,EAAI,EAAGA,EAAI4tB,EAAa3tB,OAAQD,IACvCi0C,EAAenoB,EAAI8B,EAAa5tB,IAGpC,GAAIytB,EAAiB,CACnB,IAAI1B,EAAU0B,EAAgB1B,QAI9B,GAAI5L,IAAU4L,EAAS,CACrB,MAAM0kB,EAAchjB,EAAgBtN,MACpC6zB,EACEloB,EACA2kB,EACAA,EAAYxQ,QACZwQ,EAAY7iB,aACZH,EAAgB7d,OAEpB,CACF,GAEIqlC,EAAgBA,CAACvqB,EAAU6C,EAAWC,EAAQC,EAAiBC,EAAgBC,EAAWC,EAAc1C,EAAW9H,EAAQ,KAC/H,IAAK,IAAIpjB,EAAIojB,EAAOpjB,EAAI0qB,EAASzqB,OAAQD,IAAK,CAC5C,MAAM6qB,EAAQH,EAAS1qB,GAAKkrB,EAAYkqB,GAAe1qB,EAAS1qB,IAAM4pB,GAAec,EAAS1qB,IAC9FyuB,EACE,KACA5D,EACA0C,EACAC,EACAC,EACAC,EACAC,EACAC,EACA1C,EAEJ,GAEI6pB,EAAeA,CAAC1nB,EAAIC,EAAIG,EAAiBC,EAAgBC,EAAWC,EAAc1C,KACtF,MAAMY,EAAKwB,EAAGxB,GAAKuB,EAAGvB,GACtB,IAAI,UAAEP,EAAS,gBAAEiH,EAAe,KAAElI,GAASgD,EAC3C/B,GAA4B,GAAf8B,EAAG9B,UAChB,MAAM8pB,EAAWhoB,EAAGpM,OAAS2E,EAAAA,GACvB0vB,EAAWhoB,EAAGrM,OAAS2E,EAAAA,GAC7B,IAAIkX,EAwCJ,GAvCArP,GAAmB8nB,GAAc9nB,GAAiB,IAC9CqP,EAAYwY,EAASE,sBACvBxY,GAAgBF,EAAWrP,EAAiBH,EAAID,GAE9C/C,GACFqL,GAAoBrI,EAAID,EAAII,EAAiB,gBAE/CA,GAAmB8nB,GAAc9nB,GAAiB,GAM9C+E,EACFijB,EACEpoB,EAAGmF,gBACHA,EACA1G,EACA2B,EACAC,EACAwnB,GAAyB5nB,EAAIK,GAC7BC,GAKQ1C,GACVwqB,EACEroB,EACAC,EACAxB,EACA,KACA2B,EACAC,EACAwnB,GAAyB5nB,EAAIK,GAC7BC,GACA,GAGArC,EAAY,EAAG,CACjB,GAAgB,GAAZA,EACFoqB,EACE7pB,EACAwB,EACA+nB,EACAC,EACA7nB,EACAC,EACAC,QAWF,GARgB,EAAZpC,GACE8pB,EAASO,QAAUN,EAASM,OAC9BtC,EAAcxnB,EAAI,QAAS,KAAMwpB,EAASM,MAAOjoB,GAGrC,EAAZpC,GACF+nB,EAAcxnB,EAAI,QAASupB,EAASQ,MAAOP,EAASO,MAAOloB,GAE7C,EAAZpC,EAAe,CACjB,MAAMkf,EAAgBnd,EAAG3B,aACzB,IAAK,IAAI3rB,EAAI,EAAGA,EAAIyqC,EAAcxqC,OAAQD,IAAK,CAC7C,MAAM4E,EAAM6lC,EAAczqC,GACpB+nB,EAAOstB,EAASzwC,GAChB8U,EAAO47B,EAAS1wC,GAClB8U,IAASqO,GAAgB,UAARnjB,GACnB0uC,EACExnB,EACAlnB,EACAmjB,EACArO,EACAiU,EACAN,EAAG3C,SACH+C,EACAC,EACAynB,EAGN,CACF,CAEc,EAAZ5pB,GACE8B,EAAG3C,WAAa4C,EAAG5C,UACrBmpB,EAAmB/nB,EAAIwB,EAAG5C,SAGhC,MAAYQ,GAAgC,MAAnBsH,GACvBmjB,EACE7pB,EACAwB,EACA+nB,EACAC,EACA7nB,EACAC,EACAC,KAGCmP,EAAYwY,EAASQ,iBAAmBxrB,IAC3CkK,IAAsB,KACpBsI,GAAaE,GAAgBF,EAAWrP,EAAiBH,EAAID,GAC7D/C,GAAQqL,GAAoBrI,EAAID,EAAII,EAAiB,UAAU,GAC9DC,EACL,EAEI+nB,EAAqBA,CAACM,EAAaC,EAAaC,EAAmBxoB,EAAiBC,EAAgBC,EAAWC,KACnH,IAAK,IAAI5tB,EAAI,EAAGA,EAAIg2C,EAAY/1C,OAAQD,IAAK,CAC3C,MAAMk2C,EAAWH,EAAY/1C,GACvBm2C,EAAWH,EAAYh2C,GACvButB,EAGJ2oB,EAASpqB,KAERoqB,EAASvuC,OAASsyB,KAElB3K,GAAgB4mB,EAAUC,IACN,GAArBD,EAASzsB,WAAwBqqB,EAAeoC,EAASpqB,IAGvDmqB,EAGJxnB,EACEynB,EACAC,EACA5oB,EACA,KACAE,EACAC,EACAC,EACAC,GACA,EAEJ,GAEI+nB,EAAaA,CAAC7pB,EAAI3L,EAAOk1B,EAAUC,EAAU7nB,EAAiBC,EAAgBC,KAClF,GAAI0nB,IAAaC,EAAU,CACzB,GAAID,IAAazvB,EAAAA,GACf,IAAK,MAAMhhB,KAAOywC,GACXxK,EAAAA,EAAAA,IAAejmC,IAAUA,KAAO0wC,GACnChC,EACExnB,EACAlnB,EACAywC,EAASzwC,GACT,KACA+oB,EACAxN,EAAMuK,SACN+C,EACAC,EACAynB,GAKR,IAAK,MAAMvwC,KAAO0wC,EAAU,CAC1B,IAAIzK,EAAAA,EAAAA,IAAejmC,GACjB,SACF,MAAM8U,EAAO47B,EAAS1wC,GAChBmjB,EAAOstB,EAASzwC,GAClB8U,IAASqO,GAAgB,UAARnjB,GACnB0uC,EACExnB,EACAlnB,EACAmjB,EACArO,EACAiU,EACAxN,EAAMuK,SACN+C,EACAC,EACAynB,EAGN,CACI,UAAWG,GACbhC,EAAcxnB,EAAI,QAASupB,EAASrxC,MAAOsxC,EAAStxC,MAAO2pB,EAE/D,GAEI6mB,EAAkBA,CAACnnB,EAAIC,EAAIC,EAAWC,EAAQC,EAAiBC,EAAgBC,EAAWC,EAAc1C,KAC5G,MAAMkrB,EAAsB9oB,EAAGxB,GAAKuB,EAAKA,EAAGvB,GAAK0nB,EAAe,IAC1D6C,EAAoB/oB,EAAGE,OAASH,EAAKA,EAAGG,OAASgmB,EAAe,IACtE,IAAI,UAAEjoB,EAAS,gBAAEiH,EAAiB5E,aAAc8iB,GAAyBpjB,EAOrEojB,IACF9iB,EAAeA,EAAeA,EAAarD,OAAOmmB,GAAwBA,GAElE,MAANrjB,GACF+lB,EAAWgD,EAAqB7oB,EAAWC,GAC3C4lB,EAAWiD,EAAmB9oB,EAAWC,GACzCynB,EAKE3nB,EAAG5C,UAAY,GACf6C,EACA8oB,EACA5oB,EACAC,EACAC,EACAC,EACA1C,IAGEK,EAAY,GAAiB,GAAZA,GAAkBiH,GAEvCnF,EAAGmF,iBACDijB,EACEpoB,EAAGmF,gBACHA,EACAjF,EACAE,EACAC,EACAC,EACAC,IASU,MAAVN,EAAG1oB,KAAe6oB,GAAmBH,IAAOG,EAAgB1B,UAE5DuqB,GACEjpB,EACAC,GACA,IAKJooB,EACEroB,EACAC,EACAC,EACA8oB,EACA5oB,EACAC,EACAC,EACAC,EACA1C,EAGN,EAEIwpB,EAAmBA,CAACrnB,EAAIC,EAAIC,EAAWC,EAAQC,EAAiBC,EAAgBC,EAAWC,EAAc1C,KAC7GoC,EAAGM,aAAeA,EACR,MAANP,EACiB,IAAfC,EAAG7D,UACLgE,EAAgBnF,IAAIoU,SAClBpP,EACAC,EACAC,EACAG,EACAzC,GAGF8iB,EACE1gB,EACAC,EACAC,EACAC,EACAC,EACAC,EACAzC,GAIJqrB,EAAgBlpB,EAAIC,EAAIpC,EAC1B,EAEI8iB,EAAiBA,CAACwI,EAAcjpB,EAAWC,EAAQC,EAAiBC,EAAgBC,EAAWzC,KACnG,MAAMxL,EAAY82B,EAAa72B,UAAY82B,GACzCD,EACA/oB,EACAC,GAqBF,GAZImM,GAAY2c,KACd92B,EAAS4I,IAAI6T,SAAWwY,GAMxB+B,GAAeh3B,GAKbA,EAAS0R,UAEX,GADA1D,GAAkBA,EAAesD,YAAYtR,EAAUuR,IAClDulB,EAAa1qB,GAAI,CACpB,MAAM0F,EAAc9R,EAASqM,QAAU/B,GAAYC,IACnDqqB,EAAmB,KAAM9iB,EAAajE,EAAWC,EACnD,OAEAyD,EACEvR,EACA82B,EACAjpB,EACAC,EACAE,EACAC,EACAzC,EAG4C,EAK5CqrB,EAAkBA,CAAClpB,EAAIC,EAAIpC,KAC/B,MAAMxL,EAAW4N,EAAG3N,UAAY0N,EAAG1N,UACnC,GAAIoL,GAAsBsC,EAAIC,EAAIpC,GAAY,CAC5C,GAAIxL,EAAS0R,WAAa1R,EAAS4R,cAQjC,YAJAqlB,EAAyBj3B,EAAU4N,EAAIpC,GAMvCxL,EAAShG,KAAO4T,EAChBtJ,EAActE,EAASrR,QACvBqR,EAAS/O,OAAOa,OAAQ,EACxBkO,EAASrR,QAEb,MACEif,EAAGxB,GAAKuB,EAAGvB,GACXpM,EAASS,MAAQmN,CACnB,EAEI2D,EAAoBA,CAACvR,EAAU82B,EAAcjpB,EAAWC,EAAQE,EAAgBC,EAAWzC,KAC/F,MAAM0rB,EAAoBA,KACxB,GAAKl3B,EAASwW,UA0FP,CACL,IAAI,KAAExc,EAAI,GAAEm9B,EAAE,EAAEh2C,EAAC,OAAE+O,EAAM,MAAEuQ,GAAUT,EACrC,CACE,MAAMo3B,EAAuBC,GAA2Br3B,GACxD,GAAIo3B,EAUF,OATIp9B,IACFA,EAAKoS,GAAK3L,EAAM2L,GAChB6qB,EAAyBj3B,EAAUhG,EAAMwR,SAE3C4rB,EAAqB1lB,SAASnO,MAAK,KAC5BvD,EAASiG,aACZixB,GACF,GAIN,CACA,IACI9Z,EADAka,EAAat9B,EAEb,EAGJ67B,GAAc71B,GAAU,GACpBhG,GACFA,EAAKoS,GAAK3L,EAAM2L,GAChB6qB,EAAyBj3B,EAAUhG,EAAMwR,IAEzCxR,EAAOyG,EAEL02B,IACFha,EAAAA,EAAAA,IAAega,IAEb/Z,EAAYpjB,EAAKuH,OAASvH,EAAKuH,MAAMu0B,sBACvCxY,GAAgBF,EAAWltB,EAAQ8J,EAAMyG,GAE3Co1B,GAAc71B,GAAU,GAIxB,MAAMu3B,EAAWnuB,EAAoBpJ,GACjC,EAGJ,MAAMw3B,EAAWx3B,EAASqM,QAC1BrM,EAASqM,QAAUkrB,EAInBxoB,EACEyoB,EACAD,EAEAnD,EAAeoD,EAASprB,IAExBsoB,EAAgB8C,GAChBx3B,EACAgO,EACAC,GAKFjU,EAAKoS,GAAKmrB,EAASnrB,GACA,OAAfkrB,GACFnrB,GAAgBnM,EAAUu3B,EAASnrB,IAEjCjrB,GACF2zB,GAAsB3zB,EAAG6sB,IAEvBoP,EAAYpjB,EAAKuH,OAASvH,EAAKuH,MAAM60B,iBACvCthB,IACE,IAAMwI,GAAgBF,EAAWltB,EAAQ8J,EAAMyG,IAC/CuN,EASN,KA3KyB,CACvB,IAAIoP,EACJ,MAAM,GAAEhR,EAAE,MAAE7K,GAAUu1B,GAChB,GAAEW,EAAE,EAAEznB,EAAC,OAAE9f,GAAW8P,EACpB03B,EAAsBhd,GAAeoc,GAS3C,GARAjB,GAAc71B,GAAU,GACpBy3B,IACFta,EAAAA,EAAAA,IAAesa,IAEZC,IAAwBta,EAAY7b,GAASA,EAAMuvB,qBACtDxT,GAAgBF,EAAWltB,EAAQ4mC,GAErCjB,GAAc71B,GAAU,GACpBoM,GAAM8F,GAAa,CACrB,MAAMylB,EAAiBA,KAIrB33B,EAASqM,QAAUjD,EAAoBpJ,GAOvCkS,GACE9F,EACApM,EAASqM,QACTrM,EACAgO,EACA,KAE8C,EAI9C0pB,EACFZ,EAAa7uC,KAAK0yB,gBAAgBpX,MAKhC,KAAOvD,EAASiG,aAAe0xB,MAGjCA,GAEJ,KAAO,CACD,EAGJ,MAAMtrB,EAAUrM,EAASqM,QAAUjD,EAAoBpJ,GACnD,EAMJ+O,EACE,KACA1C,EACAwB,EACAC,EACA9N,EACAgO,EACAC,GAKF6oB,EAAa1qB,GAAKC,EAAQD,EAC5B,CAIA,GAHI4D,GACF8E,GAAsB9E,EAAGhC,IAEtB0pB,IAAwBta,EAAY7b,GAASA,EAAM8b,gBAAiB,CACvE,MAAMua,EAAqBd,EAC3BhiB,IACE,IAAMwI,GAAgBF,EAAWltB,EAAQ0nC,IACzC5pB,EAEJ,EAC6B,IAAzB8oB,EAAa/sB,WAAmB7Z,GAAUwqB,GAAexqB,EAAOuQ,QAAmC,IAAzBvQ,EAAOuQ,MAAMsJ,YACzF/J,EAASvT,GAAKqoB,GAAsB9U,EAASvT,EAAGuhB,GAElDhO,EAASwW,WAAY,EAIrBsgB,EAAejpB,EAAYC,EAAS,IACtC,CAiFA,EAEI7c,EAAS+O,EAAS/O,OAAS,IAAII,EAAAA,GACnC6lC,EACA9jC,EAAAA,IACA,IAAM6Q,EAAStV,IACfqR,EAAS9O,OAGLvC,EAASqR,EAASrR,OAAS,KAC3BsC,EAAOa,OACTb,EAAOX,KACT,EAEF3B,EAAO8U,GAAKzD,EAASlY,IACrB+tC,GAAc71B,GAAU,GAMxBrR,GAAQ,EAEJsoC,EAA2BA,CAACj3B,EAAUuL,EAAWC,KACrDD,EAAUtL,UAAYD,EACtB,MAAMyL,EAAYzL,EAASS,MAAMc,MACjCvB,EAASS,MAAQ8K,EACjBvL,EAAShG,KAAO,KAChBywB,GAAYzqB,EAAUuL,EAAUhK,MAAOkK,EAAWD,GAClDshB,GAAY9sB,EAAUuL,EAAUP,SAAUQ,IAC1CzZ,EAAAA,EAAAA,MACA2S,EAAiB1E,IACjB7N,EAAAA,EAAAA,KAAe,EAEX6jC,EAAgBA,CAACroB,EAAIC,EAAIC,EAAWC,EAAQC,EAAiBC,EAAgBC,EAAWC,EAAc1C,GAAY,KACtH,MAAM3qB,EAAK8sB,GAAMA,EAAG3C,SACd6sB,EAAgBlqB,EAAKA,EAAG5D,UAAY,EACpC/oB,EAAK4sB,EAAG5C,UACR,UAAEa,EAAS,UAAE9B,GAAc6D,EACjC,GAAI/B,EAAY,EAAG,CACjB,GAAgB,IAAZA,EAYF,YAXAisB,EACEj3C,EACAG,EACA6sB,EACAC,EACAC,EACAC,EACAC,EACAC,EACA1C,GAGG,GAAgB,IAAZK,EAYT,YAXAksB,EACEl3C,EACAG,EACA6sB,EACAC,EACAC,EACAC,EACAC,EACAC,EACA1C,EAIN,CACgB,EAAZzB,GACkB,GAAhB8tB,GACFpC,EAAgB50C,EAAIktB,EAAiBC,GAEnChtB,IAAOH,GACTszC,EAAmBtmB,EAAW7sB,IAGZ,GAAhB62C,EACc,GAAZ9tB,EACF+tB,EACEj3C,EACAG,EACA6sB,EACAC,EACAC,EACAC,EACAC,EACAC,EACA1C,GAGFiqB,EAAgB50C,EAAIktB,EAAiBC,GAAgB,IAGnC,EAAhB6pB,GACF1D,EAAmBtmB,EAAW,IAEhB,GAAZ9D,GACFwrB,EACEv0C,EACA6sB,EACAC,EACAC,EACAC,EACAC,EACAC,EACA1C,GAIR,EAEIusB,EAAuBA,CAACl3C,EAAIG,EAAI6sB,EAAWC,EAAQC,EAAiBC,EAAgBC,EAAWC,EAAc1C,KACjH3qB,EAAKA,GAAM6qC,EAAAA,GACX1qC,EAAKA,GAAM0qC,EAAAA,GACX,MAAMsM,EAAYn3C,EAAGN,OACf6U,EAAYpU,EAAGT,OACf03C,EAAeC,KAAKC,IAAIH,EAAW5iC,GACzC,IAAI9U,EACJ,IAAKA,EAAI,EAAGA,EAAI23C,EAAc33C,IAAK,CACjC,MAAM83C,EAAYp3C,EAAGV,GAAKkrB,EAAYkqB,GAAe10C,EAAGV,IAAM4pB,GAAelpB,EAAGV,IAChFyuB,EACEluB,EAAGP,GACH83C,EACAvqB,EACA,KACAE,EACAC,EACAC,EACAC,EACA1C,EAEJ,CACIwsB,EAAY5iC,EACdqgC,EACE50C,EACAktB,EACAC,GACA,GACA,EACAiqB,GAGF1C,EACEv0C,EACA6sB,EACAC,EACAC,EACAC,EACAC,EACAC,EACA1C,EACAysB,EAEJ,EAEIH,EAAqBA,CAACj3C,EAAIG,EAAI6sB,EAAWwqB,EAActqB,EAAiBC,EAAgBC,EAAWC,EAAc1C,KACrH,IAAIlrB,EAAI,EACR,MAAMg4C,EAAKt3C,EAAGT,OACd,IAAIg4C,EAAK13C,EAAGN,OAAS,EACjBi4C,EAAKF,EAAK,EACd,MAAOh4C,GAAKi4C,GAAMj4C,GAAKk4C,EAAI,CACzB,MAAM7qB,EAAK9sB,EAAGP,GACRstB,EAAK5sB,EAAGV,GAAKkrB,EAAYkqB,GAAe10C,EAAGV,IAAM4pB,GAAelpB,EAAGV,IACzE,IAAIsvB,GAAgBjC,EAAIC,GAatB,MAZAmB,EACEpB,EACAC,EACAC,EACA,KACAE,EACAC,EACAC,EACAC,EACA1C,GAKJlrB,GACF,CACA,MAAOA,GAAKi4C,GAAMj4C,GAAKk4C,EAAI,CACzB,MAAM7qB,EAAK9sB,EAAG03C,GACR3qB,EAAK5sB,EAAGw3C,GAAMhtB,EAAYkqB,GAAe10C,EAAGw3C,IAAOtuB,GAAelpB,EAAGw3C,IAC3E,IAAI5oB,GAAgBjC,EAAIC,GAatB,MAZAmB,EACEpB,EACAC,EACAC,EACA,KACAE,EACAC,EACAC,EACAC,EACA1C,GAKJ+sB,IACAC,GACF,CACA,GAAIl4C,EAAIi4C,GACN,GAAIj4C,GAAKk4C,EAAI,CACX,MAAMC,EAAUD,EAAK,EACf1qB,EAAS2qB,EAAUH,EAAKt3C,EAAGy3C,GAASrsB,GAAKisB,EAC/C,MAAO/3C,GAAKk4C,EACVzpB,EACE,KACA/tB,EAAGV,GAAKkrB,EAAYkqB,GAAe10C,EAAGV,IAAM4pB,GAAelpB,EAAGV,IAC9DutB,EACAC,EACAC,EACAC,EACAC,EACAC,EACA1C,GAEFlrB,GAEJ,OACK,GAAIA,EAAIk4C,EACb,MAAOl4C,GAAKi4C,EACV/oB,EAAQ3uB,EAAGP,GAAIytB,EAAiBC,GAAgB,GAChD1tB,QAEG,CACL,MAAMo4C,EAAKp4C,EACLq4C,EAAKr4C,EACLs4C,EAAmC,IAAIpkC,IAC7C,IAAKlU,EAAIq4C,EAAIr4C,GAAKk4C,EAAIl4C,IAAK,CACzB,MAAM83C,EAAYp3C,EAAGV,GAAKkrB,EAAYkqB,GAAe10C,EAAGV,IAAM4pB,GAAelpB,EAAGV,IAC3D,MAAjB83C,EAAUlzC,KAQZ0zC,EAAiB3kC,IAAImkC,EAAUlzC,IAAK5E,EAExC,CACA,IAAI2O,EACA4pC,EAAU,EACd,MAAMC,EAAcN,EAAKG,EAAK,EAC9B,IAAII,GAAQ,EACRC,EAAmB,EACvB,MAAMC,EAAwB,IAAI92C,MAAM22C,GACxC,IAAKx4C,EAAI,EAAGA,EAAIw4C,EAAax4C,IAC3B24C,EAAsB34C,GAAK,EAC7B,IAAKA,EAAIo4C,EAAIp4C,GAAKi4C,EAAIj4C,IAAK,CACzB,MAAM44C,EAAYr4C,EAAGP,GACrB,GAAIu4C,GAAWC,EAAa,CAC1BtpB,EAAQ0pB,EAAWnrB,EAAiBC,GAAgB,GACpD,QACF,CACA,IAAImrB,EACJ,GAAqB,MAAjBD,EAAUh0C,IACZi0C,EAAWP,EAAiB9lC,IAAIomC,EAAUh0C,UAE1C,IAAK+J,EAAI0pC,EAAI1pC,GAAKupC,EAAIvpC,IACpB,GAAsC,IAAlCgqC,EAAsBhqC,EAAI0pC,IAAa/oB,GAAgBspB,EAAWl4C,EAAGiO,IAAK,CAC5EkqC,EAAWlqC,EACX,KACF,MAGa,IAAbkqC,EACF3pB,EAAQ0pB,EAAWnrB,EAAiBC,GAAgB,IAEpDirB,EAAsBE,EAAWR,GAAMr4C,EAAI,EACvC64C,GAAYH,EACdA,EAAmBG,EAEnBJ,GAAQ,EAEVhqB,EACEmqB,EACAl4C,EAAGm4C,GACHtrB,EACA,KACAE,EACAC,EACAC,EACAC,EACA1C,GAEFqtB,IAEJ,CACA,MAAMO,EAA6BL,EAAQM,GAAYJ,GAAyBvN,EAAAA,GAEhF,IADAz8B,EAAImqC,EAA2B74C,OAAS,EACnCD,EAAIw4C,EAAc,EAAGx4C,GAAK,EAAGA,IAAK,CACrC,MAAMg5C,EAAYX,EAAKr4C,EACjB83C,EAAYp3C,EAAGs4C,GACfxrB,EAASwrB,EAAY,EAAIhB,EAAKt3C,EAAGs4C,EAAY,GAAGltB,GAAKisB,EAC1B,IAA7BY,EAAsB34C,GACxByuB,EACE,KACAqpB,EACAvqB,EACAC,EACAC,EACAC,EACAC,EACAC,EACA1C,GAEOutB,IACL9pC,EAAI,GAAK3O,IAAM84C,EAA2BnqC,GAC5CghB,EAAKmoB,EAAWvqB,EAAWC,EAAQ,GAEnC7e,IAGN,CACF,GAEIghB,EAAOA,CAACxP,EAAOoN,EAAWC,EAAQyrB,EAAUvrB,EAAiB,QACjE,MAAM,GAAE5B,EAAE,KAAEnkB,EAAI,WAAE6iB,EAAU,SAAEE,EAAQ,UAAEjB,GAActJ,EACtD,GAAgB,EAAZsJ,EAEF,YADAkG,EAAKxP,EAAMR,UAAUoM,QAASwB,EAAWC,EAAQyrB,GAGnD,GAAgB,IAAZxvB,EAEF,YADAtJ,EAAM6L,SAAS2D,KAAKpC,EAAWC,EAAQyrB,GAGzC,GAAgB,GAAZxvB,EAEF,YADA9hB,EAAKgoB,KAAKxP,EAAOoN,EAAWC,EAAQmnB,GAGtC,GAAIhtC,IAASsyB,GAAU,CACrBmZ,EAAWtnB,EAAIyB,EAAWC,GAC1B,IAAK,IAAIxtB,EAAI,EAAGA,EAAI0qB,EAASzqB,OAAQD,IACnC2vB,EAAKjF,EAAS1qB,GAAIutB,EAAWC,EAAQyrB,GAGvC,YADA7F,EAAWjzB,EAAMqN,OAAQD,EAAWC,EAEtC,CACA,GAAI7lB,IAASwnC,GAEX,YADAyF,EAAez0B,EAAOoN,EAAWC,GAGnC,MAAM0rB,EAA+B,IAAbD,GAA8B,EAAZxvB,GAAiBe,EAC3D,GAAI0uB,EACF,GAAiB,IAAbD,EACFzuB,EAAW4O,YAAYtN,GACvBsnB,EAAWtnB,EAAIyB,EAAWC,GAC1BgH,IAAsB,IAAMhK,EAAW8O,MAAMxN,IAAK4B,OAC7C,CACL,MAAM,MAAEiM,EAAK,WAAElB,EAAU,WAAE/H,GAAelG,EACpC2uB,EAAUA,IAAM/F,EAAWtnB,EAAIyB,EAAWC,GAC1C4rB,EAAeA,KACnBzf,EAAM7N,GAAI,KACRqtB,IACAzoB,GAAcA,GAAY,GAC1B,EAEA+H,EACFA,EAAW3M,EAAIqtB,EAASC,GAExBA,GAEJ,MAEAhG,EAAWtnB,EAAIyB,EAAWC,EAC5B,EAEI0B,EAAUA,CAAC/O,EAAOsN,EAAiBC,EAAgBgE,GAAW,EAAOxG,GAAY,KACrF,MAAM,KACJvjB,EAAI,MACJsZ,EAAK,IACL7D,EAAG,SACHsN,EAAQ,gBACR8H,EAAe,UACf/I,EAAS,UACT8B,EAAS,KACTjB,GACEnK,EAIJ,GAHW,MAAP/C,GACFuvB,GAAOvvB,EAAK,KAAMsQ,EAAgBvN,GAAO,GAE3B,IAAZsJ,EAEF,YADAgE,EAAgBnF,IAAI2U,WAAW9c,GAGjC,MAAMk5B,EAA+B,EAAZ5vB,GAAiBa,EACpCgvB,GAAyBlf,GAAeja,GAC9C,IAAI2c,EAIJ,GAHIwc,IAA0Bxc,EAAY7b,GAASA,EAAMs4B,uBACvDvc,GAAgBF,EAAWrP,EAAiBtN,GAE9B,EAAZsJ,EACF+vB,EAAiBr5B,EAAMR,UAAW+N,EAAgBgE,OAC7C,CACL,GAAgB,IAAZjI,EAEF,YADAtJ,EAAM6L,SAASkD,QAAQxB,EAAgBgE,GAGrC2nB,GACF1jB,GAAoBxV,EAAO,KAAMsN,EAAiB,iBAEpC,GAAZhE,EACFtJ,EAAMxY,KAAKkoB,OACT1P,EACAsN,EACAC,EACAxC,EACAypB,EACAjjB,GAEOc,IACV7qB,IAASsyB,IAAY1O,EAAY,GAAiB,GAAZA,GACrC4pB,EACE3iB,EACA/E,EACAC,GACA,GACA,IAEO/lB,IAASsyB,IAAwB,IAAZ1O,IAA4BL,GAAyB,GAAZzB,IACvE0rB,EAAgBzqB,EAAU+C,EAAiBC,GAEzCgE,GACF7B,EAAO1P,EAEX,EACIm5B,IAA0Bxc,EAAY7b,GAASA,EAAMkc,mBAAqBkc,IAC5E7kB,IAAsB,KACpBsI,GAAaE,GAAgBF,EAAWrP,EAAiBtN,GACzDk5B,GAAoB1jB,GAAoBxV,EAAO,KAAMsN,EAAiB,YAAY,GACjFC,EACL,EAEImC,EAAU1P,IACd,MAAM,KAAExY,EAAI,GAAEmkB,EAAE,OAAE0B,EAAM,WAAEhD,GAAerK,EACzC,GAAIxY,IAASsyB,GAYX,YAFEwf,EAAe3tB,EAAI0B,GAIvB,GAAI7lB,IAASwnC,GAEX,YADA0F,EAAiB10B,GAGnB,MAAMu5B,EAAgBA,KACpBrG,EAAWvnB,GACPtB,IAAeA,EAAWqM,WAAarM,EAAWkG,YACpDlG,EAAWkG,YACb,EAEF,GAAsB,EAAlBvQ,EAAMsJ,WAAiBe,IAAeA,EAAWqM,UAAW,CAC9D,MAAM,MAAE8C,EAAK,WAAElB,GAAejO,EACxB4uB,EAAeA,IAAMzf,EAAM7N,EAAI4tB,GACjCjhB,EACFA,EAAWtY,EAAM2L,GAAI4tB,EAAeN,GAEpCA,GAEJ,MACEM,GACF,EAEID,EAAiBA,CAAC13B,EAAKsB,KAC3B,IAAI3J,EACJ,MAAOqI,IAAQsB,EACb3J,EAAOq6B,EAAgBhyB,GACvBsxB,EAAWtxB,GACXA,EAAMrI,EAER25B,EAAWhwB,EAAI,EAEXm2B,EAAmBA,CAAC95B,EAAUgO,EAAgBgE,KAIlD,MAAM,IAAEioB,EAAG,MAAE/oC,EAAK,OAAEvC,EAAM,QAAE0d,EAAO,GAAEkD,GAAOvP,EACxCi6B,IACF9c,EAAAA,EAAAA,IAAe8c,GAEjB/oC,EAAMR,OACF/B,IACFA,EAAO0B,QAAS,EAChBmf,EAAQnD,EAASrM,EAAUgO,EAAgBgE,IAEzCzC,GACFuF,GAAsBvF,EAAIvB,GAE5B8G,IAAsB,KACpB9U,EAASiG,aAAc,CAAI,GAC1B+H,GACCA,GAAkBA,EAAemB,gBAAkBnB,EAAe/H,aAAejG,EAAS0R,WAAa1R,EAAS4R,eAAiB5R,EAASyN,aAAeO,EAAe6B,YAC1K7B,EAAexc,OACa,IAAxBwc,EAAexc,MACjBwc,EAAe3mB,UAGsD,EAIrEouC,EAAkBA,CAACzqB,EAAU+C,EAAiBC,EAAgBgE,GAAW,EAAOxG,GAAY,EAAO9H,EAAQ,KAC/G,IAAK,IAAIpjB,EAAIojB,EAAOpjB,EAAI0qB,EAASzqB,OAAQD,IACvCkvB,EAAQxE,EAAS1qB,GAAIytB,EAAiBC,EAAgBgE,EAAUxG,EAClE,EAEIkpB,EAAmBj0B,GACD,EAAlBA,EAAMsJ,UACD2qB,EAAgBj0B,EAAMR,UAAUoM,SAEnB,IAAlB5L,EAAMsJ,UACDtJ,EAAM6L,SAAStS,OAEjBq6B,EAAgB5zB,EAAMqN,QAAUrN,EAAM2L,IAE/C,IAAIvJ,GAAa,EACjB,MAAM6G,EAASA,CAACjJ,EAAOoN,EAAWI,KACnB,MAATxN,EACEoN,EAAUihB,QACZtf,EAAQ3B,EAAUihB,OAAQ,KAAM,MAAM,GAGxC/f,EACElB,EAAUihB,QAAU,KACpBruB,EACAoN,EACA,KACA,KACA,KACAI,GAGCpL,IACHA,GAAa,EACb6B,IACAE,IACA/B,GAAa,GAEfgL,EAAUihB,OAASruB,CAAK,EAEpBw0B,EAAY,CAChB50C,EAAG0uB,EACHQ,GAAIC,EACJQ,EAAGC,EACHxS,EAAG0S,EACHke,GAAIC,EACJ4L,GAAI3E,EACJ4E,GAAInE,EACJoE,IAAKrE,EACLlnC,EAAG6lC,EACH1lB,EAAG9b,GAEL,IAAIqb,GACA2D,GAMJ,OALIshB,KACDjlB,GAAS2D,IAAeshB,EACvByB,IAGG,CACLvrB,SACA6E,WACA8rB,UAAW/R,GAAa5e,EAAQ6E,IAEpC,CACA,SAASinB,IAAyB,KAAEvtC,EAAI,MAAEsZ,GAAS+4B,GACjD,MAA4B,QAArBA,GAAuC,kBAATryC,GAAiD,WAArBqyC,GAA0C,mBAATryC,GAA6BsZ,GAASA,EAAMg5B,UAAYh5B,EAAMg5B,SAASxtC,SAAS,aAAU,EAASutC,CACvM,CACA,SAASzE,IAAc,OAAE5kC,EAAM,OAAEtC,GAAU6rC,GACzCvpC,EAAOqD,aAAe3F,EAAO2F,aAAekmC,CAC9C,CACA,SAASjK,GAAeviB,EAAgBlD,GACtC,QAASkD,GAAkBA,IAAmBA,EAAemB,gBAAkBrE,IAAeA,EAAWqM,SAC3G,CACA,SAASyf,GAAuBjpB,EAAIC,EAAI9S,GAAU,GAChD,MAAM2/B,EAAM9sB,EAAG3C,SACT0vB,EAAM9sB,EAAG5C,SACf,IAAI5oB,EAAAA,EAAAA,IAAQq4C,KAAQr4C,EAAAA,EAAAA,IAAQs4C,GAC1B,IAAK,IAAIp6C,EAAI,EAAGA,EAAIm6C,EAAIl6C,OAAQD,IAAK,CACnC,MAAMO,EAAK45C,EAAIn6C,GACf,IAAIU,EAAK05C,EAAIp6C,GACM,EAAfU,EAAG+oB,YAAkB/oB,EAAG8xB,mBACtB9xB,EAAG6qB,WAAa,GAAsB,KAAjB7qB,EAAG6qB,aAC1B7qB,EAAK05C,EAAIp6C,GAAKo1C,GAAegF,EAAIp6C,IACjCU,EAAGorB,GAAKvrB,EAAGurB,IAERtR,GACH87B,GAAuB/1C,EAAIG,IAE3BA,EAAGiH,OAASonC,KACdruC,EAAGorB,GAAKvrB,EAAGurB,GAKf,CAEJ,CACA,SAASitB,GAAY/iC,GACnB,MAAMjW,EAAIiW,EAAImL,QACR1X,EAAS,CAAC,GAChB,IAAIzJ,EAAG2O,EAAG9N,EAAGiR,EAAG5R,EAChB,MAAMm6C,EAAMrkC,EAAI/V,OAChB,IAAKD,EAAI,EAAGA,EAAIq6C,EAAKr6C,IAAK,CACxB,MAAMs6C,EAAOtkC,EAAIhW,GACjB,GAAa,IAATs6C,EAAY,CAEd,GADA3rC,EAAIlF,EAAOA,EAAOxJ,OAAS,GACvB+V,EAAIrH,GAAK2rC,EAAM,CACjBv6C,EAAEC,GAAK2O,EACPlF,EAAO9G,KAAK3C,GACZ,QACF,CACAa,EAAI,EACJiR,EAAIrI,EAAOxJ,OAAS,EACpB,MAAOY,EAAIiR,EACT5R,EAAIW,EAAIiR,GAAK,EACTkE,EAAIvM,EAAOvJ,IAAMo6C,EACnBz5C,EAAIX,EAAI,EAER4R,EAAI5R,EAGJo6C,EAAOtkC,EAAIvM,EAAO5I,MAChBA,EAAI,IACNd,EAAEC,GAAKyJ,EAAO5I,EAAI,IAEpB4I,EAAO5I,GAAKb,EAEhB,CACF,CACAa,EAAI4I,EAAOxJ,OACX6R,EAAIrI,EAAO5I,EAAI,GACf,MAAOA,KAAM,EACX4I,EAAO5I,GAAKiR,EACZA,EAAI/R,EAAE+R,GAER,OAAOrI,CACT,CACA,SAASstC,GAA2Br3B,GAClC,MAAM66B,EAAe76B,EAASqM,QAAQpM,UACtC,GAAI46B,EACF,OAAIA,EAAanpB,WAAampB,EAAajpB,cAClCipB,EAEAxD,GAA2BwD,EAGxC,CAEA,MAAMC,GAAc7yC,GAASA,EAAK8yC,aAC5BC,GAAsBz5B,GAAUA,IAAUA,EAAM05B,UAA+B,KAAnB15B,EAAM05B,UAClEC,GAAez2C,GAAiC,qBAAf+tC,YAA8B/tC,aAAkB+tC,WACjF2I,GAAkB12C,GAAoC,oBAAlB22C,eAAgC32C,aAAkB22C,cACtFC,GAAgBA,CAAC95B,EAAO+5B,KAC5B,MAAMC,EAAiBh6B,GAASA,EAAM4lB,GACtC,IAAIxlB,EAAAA,EAAAA,IAAS45B,GAAiB,CAC5B,GAAKD,EAKE,CACL,MAAM72C,EAAS62C,EAAOC,GAMtB,OAAO92C,CACT,CATE,OAAO,IAUX,CAIE,OAAO82C,CACT,EAEIC,GAAe,CACnB53C,KAAM,WACNm3C,cAAc,EACdr1C,OAAAA,CAAQioB,EAAIC,EAAIC,EAAWC,EAAQC,EAAiBC,EAAgBC,EAAWC,EAAc1C,EAAWypB,GACtG,MACEiF,GAAI3E,EACJ4E,GAAInE,EACJoE,IAAKrE,EACL/mB,GAAG,OAAE0f,EAAM,cAAE+M,EAAa,WAAEjN,EAAU,cAAEG,IACtCsG,EACEgG,EAAWD,GAAmBptB,EAAGrM,OACvC,IAAI,UAAEwI,EAAS,SAAEiB,EAAQ,gBAAE8H,GAAoBlF,EAK/C,GAAU,MAAND,EAAY,CACd,MAAMmE,EAAclE,EAAGxB,GAAmFoiB,EAAW,IAC/GkN,EAAa9tB,EAAGE,OAAqF0gB,EAAW,IACtHE,EAAO5c,EAAajE,EAAWC,GAC/B4gB,EAAOgN,EAAY7tB,EAAWC,GAC9B,MAAMrpB,EAASmpB,EAAGnpB,OAAS42C,GAAcztB,EAAGrM,MAAOk6B,GAC7CE,EAAe/tB,EAAG+tB,aAAenN,EAAW,IAC9C/pC,IACFiqC,EAAOiN,EAAcl3C,GACH,QAAdwpB,GAAuBitB,GAAYz2C,GACrCwpB,EAAY,OACW,WAAdA,GAA0BktB,GAAe12C,MAClDwpB,EAAY,WAKhB,MAAMub,EAAQA,CAAC3Y,EAAYO,KACT,GAAZrH,GACFwrB,EACEvqB,EACA6F,EACAO,EACArD,EACAC,EACAC,EACAC,EACA1C,EAEJ,EAEEyvB,EACFzR,EAAM3b,EAAW6tB,GACRj3C,GACT+kC,EAAM/kC,EAAQk3C,EAElB,KAAO,CACL/tB,EAAGxB,GAAKuB,EAAGvB,GACX,MAAMsvB,EAAa9tB,EAAGE,OAASH,EAAGG,OAC5BrpB,EAASmpB,EAAGnpB,OAASkpB,EAAGlpB,OACxBk3C,EAAe/tB,EAAG+tB,aAAehuB,EAAGguB,aACpCC,EAAcZ,GAAmBrtB,EAAGpM,OACpCs6B,EAAmBD,EAAc/tB,EAAYppB,EAC7Cq3C,EAAgBF,EAAcF,EAAaC,EA8BjD,GA7BkB,QAAd1tB,GAAuBitB,GAAYz2C,GACrCwpB,EAAY,OACW,WAAdA,GAA0BktB,GAAe12C,MAClDwpB,EAAY,UAEV6E,GACFijB,EACEpoB,EAAGmF,gBACHA,EACA+oB,EACA9tB,EACAC,EACAC,EACAC,GAEF0oB,GAAuBjpB,EAAIC,GAAI,IACrBpC,GACVwqB,EACEroB,EACAC,EACAiuB,EACAC,EACA/tB,EACAC,EACAC,EACAC,GACA,GAGA+sB,EACGW,EASChuB,EAAGrM,OAASoM,EAAGpM,OAASqM,EAAGrM,MAAM4lB,KAAOxZ,EAAGpM,MAAM4lB,KACnDvZ,EAAGrM,MAAM4lB,GAAKxZ,EAAGpM,MAAM4lB,IATzB4U,GACEnuB,EACAC,EACA6tB,EACAzG,EACA,QAQJ,IAAKrnB,EAAGrM,OAASqM,EAAGrM,MAAM4lB,OAASxZ,EAAGpM,OAASoM,EAAGpM,MAAM4lB,IAAK,CAC3D,MAAM6U,EAAapuB,EAAGnpB,OAAS42C,GAC7BztB,EAAGrM,MACHk6B,GAEEO,GACFD,GACEnuB,EACAouB,EACA,KACA/G,EACA,EASN,MAAW2G,GACTG,GACEnuB,EACAnpB,EACAk3C,EACA1G,EACA,EAIR,CACAgH,GAAcruB,EAChB,EACAuC,MAAAA,CAAO1P,EAAOsN,EAAiBC,EAAgBxC,GAAa+D,GAAIC,EAASR,GAAKmB,OAAQwjB,IAAgB3hB,GACpG,MAAM,UAAEjI,EAAS,SAAEiB,EAAQ,OAAE8C,EAAM,aAAE6tB,EAAY,OAAEl3C,EAAM,MAAE8c,GAAUd,EAKrE,GAJIhc,GACFkvC,EAAWgI,GAEb3pB,GAAY2hB,EAAW7lB,GACP,GAAZ/D,EAAgB,CAClB,MAAMmyB,EAAelqB,IAAagpB,GAAmBz5B,GACrD,IAAK,IAAIjhB,EAAI,EAAGA,EAAI0qB,EAASzqB,OAAQD,IAAK,CACxC,MAAM6qB,EAAQH,EAAS1qB,GACvBkvB,EACErE,EACA4C,EACAC,EACAkuB,IACE/wB,EAAM2H,gBAEZ,CACF,CACF,EACA7C,KAAM8rB,GACNxtB,QAAS4tB,IAEX,SAASJ,GAAat7B,EAAOoN,EAAWwqB,GAAgBrpB,GAAG,OAAE0f,GAAU1e,EAAGC,GAAQspB,EAAW,GAC1E,IAAbA,GACF7K,EAAOjuB,EAAMk7B,aAAc9tB,EAAWwqB,GAExC,MAAM,GAAEjsB,EAAE,OAAE0B,EAAM,UAAE/D,EAAS,SAAEiB,EAAQ,MAAEzJ,GAAUd,EAC7C27B,EAAyB,IAAb7C,EAIlB,GAHI6C,GACF1N,EAAOtiB,EAAIyB,EAAWwqB,KAEnB+D,GAAapB,GAAmBz5B,KACnB,GAAZwI,EACF,IAAK,IAAIzpB,EAAI,EAAGA,EAAI0qB,EAASzqB,OAAQD,IACnC2vB,EACEjF,EAAS1qB,GACTutB,EACAwqB,EACA,GAKJ+D,GACF1N,EAAO5gB,EAAQD,EAAWwqB,EAE9B,CACA,SAAS8D,GAAgBlqB,EAAMxR,EAAOsN,EAAiBC,EAAgBE,EAAc1C,GACnFwD,GAAG,YAAEyf,EAAW,WAAEve,EAAU,cAAEurB,IAC7BtL,GACD,MAAM1rC,EAASgc,EAAMhc,OAAS42C,GAC5B56B,EAAMc,MACNk6B,GAEF,GAAIh3C,EAAQ,CACV,MAAM43C,EAAa53C,EAAO63C,MAAQ73C,EAAOsqC,WACzC,GAAsB,GAAlBtuB,EAAMsJ,UACR,GAAIixB,GAAmBv6B,EAAMc,OAC3Bd,EAAMqN,OAASqiB,EACb1B,EAAYxc,GACZxR,EACAyP,EAAW+B,GACXlE,EACAC,EACAE,EACA1C,GAEF/K,EAAMk7B,aAAeU,MAChB,CACL57B,EAAMqN,OAAS2gB,EAAYxc,GAC3B,IAAI0pB,EAAeU,EACnB,MAAOV,EAEL,GADAA,EAAelN,EAAYkN,GACvBA,GAA0C,IAA1BA,EAAaxN,UAAwC,oBAAtBwN,EAAa1wC,KAA4B,CAC1FwV,EAAMk7B,aAAeA,EACrBl3C,EAAO63C,KAAO77B,EAAMk7B,cAAgBlN,EAAYhuB,EAAMk7B,cACtD,KACF,CAEFxL,EACEkM,EACA57B,EACAhc,EACAspB,EACAC,EACAE,EACA1C,EAEJ,CAEFywB,GAAcx7B,EAChB,CACA,OAAOA,EAAMqN,QAAU2gB,EAAYhuB,EAAMqN,OAC3C,CACA,MAAMyuB,GAAWf,GACjB,SAASS,GAAcx7B,GACrB,MAAMmI,EAAMnI,EAAMmI,IAClB,GAAIA,GAAOA,EAAI4zB,GAAI,CACjB,IAAIvqB,EAAOxR,EAAMuK,SAAS,GAAGoB,GAC7B,MAAO6F,GAAQA,IAASxR,EAAMk7B,aACN,IAAlB1pB,EAAKkc,UACPlc,EAAKwqB,aAAa,eAAgB7zB,EAAI9gB,KACxCmqB,EAAOA,EAAKwc,YAEd7lB,EAAI4zB,IACN,CACF,CAEA,MAAMjiB,GAAW3lB,OAAOkY,IAAI,SACtBuiB,GAAOz6B,OAAOkY,IAAI,SAClBvC,GAAU3V,OAAOkY,IAAI,SACrB2iB,GAAS76B,OAAOkY,IAAI,SACpBzC,GAAa,GACnB,IAAIsI,GAAe,KACnB,SAASD,GAAUgqB,GAAkB,GACnCryB,GAAWpnB,KAAK0vB,GAAe+pB,EAAkB,KAAO,GAC1D,CACA,SAAS9pB,KACPvI,GAAWvZ,MACX6hB,GAAetI,GAAWA,GAAW9pB,OAAS,IAAM,IACtD,CACA,IAgDIo8C,GAhDAlqB,GAAqB,EACzB,SAASxJ,GAAiB3kB,GACxBmuB,IAAsBnuB,CACxB,CACA,SAASs4C,GAAWn8B,GAMlB,OALAA,EAAMqS,gBAAkBL,GAAqB,EAAIE,IAAgB+Y,EAAAA,GAAY,KAC7E9Y,KACIH,GAAqB,GAAKE,IAC5BA,GAAa1vB,KAAKwd,GAEbA,CACT,CACA,SAASo8B,GAAmB50C,EAAMsZ,EAAOyJ,EAAUa,EAAWI,EAAclC,GAC1E,OAAO6yB,GACLE,GACE70C,EACAsZ,EACAyJ,EACAa,EACAI,EACAlC,GACA,GAGN,CACA,SAASuW,GAAYr4B,EAAMsZ,EAAOyJ,EAAUa,EAAWI,GACrD,OAAO2wB,GACLtyB,GACEriB,EACAsZ,EACAyJ,EACAa,EACAI,GACA,GAGN,CACA,SAASb,GAAQ9mB,GACf,QAAOA,IAA8B,IAAtBA,EAAMy4C,WACvB,CACA,SAASntB,GAAgBjC,EAAIC,GAM3B,OAAOD,EAAG1lB,OAAS2lB,EAAG3lB,MAAQ0lB,EAAGzoB,MAAQ0oB,EAAG1oB,GAC9C,CAEA,SAAS83C,GAAmBC,GAC1BN,GAAuBM,CACzB,CACA,MAKMC,GAAeA,EAAGh4C,SAAiB,MAAPA,EAAcA,EAAM,KAChDi4C,GAAeA,EACnBz/B,MACA0/B,UACAC,cAEmB,kBAAR3/B,IACTA,EAAM,GAAKA,GAEC,MAAPA,GAAciE,EAAAA,EAAAA,IAASjE,KAAQlG,EAAAA,EAAAA,IAAMkG,KAAQL,EAAAA,EAAAA,IAAWK,GAAO,CAAEpd,EAAG4nB,EAA0BzK,EAAGC,EAAK5Q,EAAGswC,EAAS3uC,IAAK4uC,GAAY3/B,EAAM,MAElJ,SAASo/B,GAAgB70C,EAAMsZ,EAAQ,KAAMyJ,EAAW,KAAMa,EAAY,EAAGI,EAAe,KAAMlC,GAAY9hB,IAASsyB,GAAW,EAAI,GAAG+iB,GAAc,EAAOC,GAAgC,GAC5L,MAAM98B,EAAQ,CACZs8B,aAAa,EACbS,UAAU,EACVv1C,OACAsZ,QACArc,IAAKqc,GAAS27B,GAAa37B,GAC3B7D,IAAK6D,GAAS47B,GAAa57B,GAC3Bgf,QAASpY,EACT+F,aAAc,KACdlD,WACA/K,UAAW,KACXqM,SAAU,KACV8C,UAAW,KACXC,WAAY,KACZzE,KAAM,KACNE,WAAY,KACZsB,GAAI,KACJ0B,OAAQ,KACRrpB,OAAQ,KACRk3C,aAAc,KACdhM,YAAa,EACb5lB,YACA8B,YACAI,eACA6G,gBAAiB,KACjB3S,WAAY,KACZyI,IAAKV,GAwBP,OAtBIq1B,GACFE,GAAkBh9B,EAAOuK,GACT,IAAZjB,GACF9hB,EAAKymB,UAAUjO,IAERuK,IACTvK,EAAMsJ,YAAapI,EAAAA,EAAAA,IAASqJ,GAAY,EAAI,IAK1CyH,GAAqB,IACxB6qB,GACD3qB,KAIClS,EAAMoL,UAAY,GAAiB,EAAZ9B,IAEJ,KAApBtJ,EAAMoL,WACJ8G,GAAa1vB,KAAKwd,GAEbA,CACT,CACA,MAAM6J,GAAyFozB,GAC/F,SAASA,GAAaz1C,EAAMsZ,EAAQ,KAAMyJ,EAAW,KAAMa,EAAY,EAAGI,EAAe,KAAMqxB,GAAc,GAO3G,GANKr1C,GAAQA,IAAS4kB,KAIpB5kB,EAAOsiB,IAELa,GAAQnjB,GAAO,CACjB,MAAM01C,EAAShzB,GACb1iB,EACAsZ,GACA,GAcF,OAXIyJ,GACFyyB,GAAkBE,EAAQ3yB,GAExByH,GAAqB,IAAM6qB,GAAe3qB,KACrB,EAAnBgrB,EAAO5zB,UACT4I,GAAaA,GAAapO,QAAQtc,IAAS01C,EAE3ChrB,GAAa1vB,KAAK06C,IAGtBA,EAAO9xB,YAAc,EACd8xB,CACT,CAIA,GAHIC,GAAiB31C,KACnBA,EAAOA,EAAK41C,WAEVt8B,EAAO,CACTA,EAAQu8B,GAAmBv8B,GAC3B,IAAM20B,MAAO6H,EAAK,MAAE5H,GAAU50B,EAC1Bw8B,KAAUp8B,EAAAA,EAAAA,IAASo8B,KACrBx8B,EAAM20B,OAAQrE,EAAAA,EAAAA,IAAekM,KAE3B7wC,EAAAA,EAAAA,IAASipC,MACPh6B,EAAAA,EAAAA,IAAQg6B,MAAW/zC,EAAAA,EAAAA,IAAQ+zC,KAC7BA,GAAQ9iC,EAAAA,EAAAA,IAAO,CAAC,EAAG8iC,IAErB50B,EAAM40B,OAAQlE,EAAAA,EAAAA,IAAekE,GAEjC,CACA,MAAMpsB,GAAYpI,EAAAA,EAAAA,IAAS1Z,GAAQ,EAAIslB,GAAWtlB,GAAQ,IAAM6yC,GAAW7yC,GAAQ,IAAKiF,EAAAA,EAAAA,IAASjF,GAAQ,GAAIoV,EAAAA,EAAAA,IAAWpV,GAAQ,EAAI,EAUpI,OAAO60C,GACL70C,EACAsZ,EACAyJ,EACAa,EACAI,EACAlC,EACAuzB,GACA,EAEJ,CACA,SAASQ,GAAmBv8B,GAC1B,OAAKA,GAEEpF,EAAAA,EAAAA,IAAQoF,IAAU6oB,GAAiB7oB,IAASlO,EAAAA,EAAAA,IAAO,CAAC,EAAGkO,GAASA,EAD9D,IAEX,CACA,SAASoJ,GAAWlK,EAAOu9B,EAAYC,GAAW,EAAOC,GAAkB,GACzE,MAAM,MAAE38B,EAAK,IAAE7D,EAAG,UAAEmO,EAAS,SAAEb,EAAQ,WAAEF,GAAerK,EAClD09B,EAAcH,EAAaI,GAAW78B,GAAS,CAAC,EAAGy8B,GAAcz8B,EACjEo8B,EAAS,CACbZ,aAAa,EACbS,UAAU,EACVv1C,KAAMwY,EAAMxY,KACZsZ,MAAO48B,EACPj5C,IAAKi5C,GAAejB,GAAaiB,GACjCzgC,IAAKsgC,GAAcA,EAAWtgC,IAI5BugC,GAAYvgC,GAAMtb,EAAAA,EAAAA,IAAQsb,GAAOA,EAAImN,OAAOsyB,GAAaa,IAAe,CAACtgC,EAAKy/B,GAAaa,IAAeb,GAAaa,GACrHtgC,EACJ6iB,QAAS9f,EAAM8f,QACfrS,aAAczN,EAAMyN,aACpBlD,SAA8HA,EAC9HvmB,OAAQgc,EAAMhc,OACdk3C,aAAcl7B,EAAMk7B,aACpBhM,YAAalvB,EAAMkvB,YACnB5lB,UAAWtJ,EAAMsJ,UAKjB8B,UAAWmyB,GAAcv9B,EAAMxY,OAASsyB,IAA0B,IAAf1O,EAAmB,GAAiB,GAAZA,EAAiBA,EAC5FI,aAAcxL,EAAMwL,aACpB6G,gBAAiBrS,EAAMqS,gBACvB3S,WAAYM,EAAMN,WAClByK,KAAMnK,EAAMmK,KACZE,aAKA7K,UAAWQ,EAAMR,UACjBqM,SAAU7L,EAAM6L,SAChB8C,UAAW3O,EAAM2O,WAAazE,GAAWlK,EAAM2O,WAC/CC,WAAY5O,EAAM4O,YAAc1E,GAAWlK,EAAM4O,YACjDjD,GAAI3L,EAAM2L,GACV0B,OAAQrN,EAAMqN,OACdlF,IAAKnI,EAAMmI,IACXqT,GAAIxb,EAAMwb,IAKZ,OAHInR,GAAcozB,IAChBP,EAAO7yB,WAAaA,EAAWoP,MAAMyjB,IAEhCA,CACT,CAQA,SAASzN,GAAgBmO,EAAO,IAAKC,EAAO,GAC1C,OAAOh0B,GAAY+kB,GAAM,KAAMgP,EAAMC,EACvC,CACA,SAASC,GAAkB/O,EAASgP,GAClC,MAAM/9B,EAAQ6J,GAAYmlB,GAAQ,KAAMD,GAExC,OADA/uB,EAAMkvB,YAAc6O,EACb/9B,CACT,CACA,SAASg+B,GAAmBJ,EAAO,GAAIK,GAAU,GAC/C,OAAOA,GAAWhsB,KAAa4N,GAAY/V,GAAS,KAAM8zB,IAAS/zB,GAAYC,GAAS,KAAM8zB,EAChG,CACA,SAASn0B,GAAeiB,GACtB,OAAa,MAATA,GAAkC,mBAAVA,EACnBb,GAAYC,KACVnoB,EAAAA,EAAAA,IAAQ+oB,GACVb,GACLiQ,GACA,KAEApP,EAAM1J,SAEkB,kBAAV0J,EACTuqB,GAAevqB,GAEfb,GAAY+kB,GAAM,KAAMvuC,OAAOqqB,GAE1C,CACA,SAASuqB,GAAevqB,GACtB,OAAoB,OAAbA,EAAMiB,KAAoC,IAArBjB,EAAMU,WAAoBV,EAAMwzB,KAAOxzB,EAAQR,GAAWQ,EACxF,CACA,SAASsyB,GAAkBh9B,EAAOuK,GAChC,IAAI/iB,EAAO,EACX,MAAM,UAAE8hB,GAActJ,EACtB,GAAgB,MAAZuK,EACFA,EAAW,UACN,IAAI5oB,EAAAA,EAAAA,IAAQ4oB,GACjB/iB,EAAO,QACF,GAAwB,kBAAb+iB,EAAuB,CACvC,GAAgB,GAAZjB,EAAsB,CACxB,MAAMgW,EAAO/U,EAASqH,QAMtB,YALI0N,IACFA,EAAK5W,KAAO4W,EAAK/W,IAAK,GACtBy0B,GAAkBh9B,EAAOsf,KACzBA,EAAK5W,KAAO4W,EAAK/W,IAAK,IAG1B,CAAO,CACL/gB,EAAO,GACP,MAAM22C,EAAW5zB,EAASzf,EACrBqzC,GAAaxU,GAAiBpf,GAEX,IAAb4zB,GAAkB12B,IACc,IAArCA,EAAyBsB,MAAMje,EACjCyf,EAASzf,EAAI,GAEbyf,EAASzf,EAAI,EACbkV,EAAMoL,WAAa,OANrBb,EAAS2hB,KAAOzkB,CASpB,CACF,MAAW7K,EAAAA,EAAAA,IAAW2N,IACpBA,EAAW,CAAEqH,QAASrH,EAAU2hB,KAAMzkB,GACtCjgB,EAAO,KAEP+iB,EAAWlqB,OAAOkqB,GACF,GAAZjB,GACF9hB,EAAO,GACP+iB,EAAW,CAACklB,GAAgBllB,KAE5B/iB,EAAO,GAGXwY,EAAMuK,SAAWA,EACjBvK,EAAMsJ,WAAa9hB,CACrB,CACA,SAASm2C,MAAc/nC,GACrB,MAAMyI,EAAM,CAAC,EACb,IAAK,IAAIxe,EAAI,EAAGA,EAAI+V,EAAK9V,OAAQD,IAAK,CACpC,MAAMu+C,EAAUxoC,EAAK/V,GACrB,IAAK,MAAM4E,KAAO25C,EAChB,GAAY,UAAR35C,EACE4Z,EAAIo3B,QAAU2I,EAAQ3I,QACxBp3B,EAAIo3B,OAAQrE,EAAAA,EAAAA,IAAe,CAAC/yB,EAAIo3B,MAAO2I,EAAQ3I,cAE5C,GAAY,UAARhxC,EACT4Z,EAAIq3B,OAAQlE,EAAAA,EAAAA,IAAe,CAACnzB,EAAIq3B,MAAO0I,EAAQ1I,aAC1C,IAAInuB,EAAAA,EAAAA,IAAK9iB,GAAM,CACpB,MAAMyoC,EAAW7uB,EAAI5Z,GACf45C,EAAWD,EAAQ35C,IACrB45C,GAAYnR,IAAamR,IAAc18C,EAAAA,EAAAA,IAAQurC,IAAaA,EAAS5gC,SAAS+xC,KAChFhgC,EAAI5Z,GAAOyoC,EAAW,GAAG9iB,OAAO8iB,EAAUmR,GAAYA,EAE1D,KAAmB,KAAR55C,IACT4Z,EAAI5Z,GAAO25C,EAAQ35C,GAGzB,CACA,OAAO4Z,CACT,CACA,SAASwe,GAAgBhY,EAAMtF,EAAUS,EAAO6K,EAAY,MAC1DrJ,EAA2BqD,EAAMtF,EAAU,EAAG,CAC5CS,EACA6K,GAEJ,CAEA,MAAMyzB,GAAkBjX,KACxB,IAAIhgC,GAAM,EACV,SAASivC,GAAwBt2B,EAAOvQ,EAAQoc,GAC9C,MAAMrkB,EAAOwY,EAAMxY,KACbkY,GAAcjQ,EAASA,EAAOiQ,WAAaM,EAAMN,aAAe4+B,GAChE/+B,EAAW,CACflY,IAAKA,KACL2Y,QACAxY,OACAiI,SACAiQ,aACAqK,KAAM,KAENxQ,KAAM,KACNqS,QAAS,KAETpb,OAAQ,KACRtC,OAAQ,KAERuC,MAAO,IAAIrB,EAAAA,IACT,GAGF6Z,OAAQ,KACR1N,MAAO,KACPgnB,QAAS,KACTgc,YAAa,KACb11B,UAAW,KACXgd,SAAUp2B,EAASA,EAAOo2B,SAAW3hC,OAAOkG,OAAOsV,EAAWmmB,UAC9DrE,YAAa,KACbtY,YAAa,GAEboc,WAAY,KACZtQ,WAAY,KAEZlM,aAAciiB,GAAsBvjC,EAAMkY,GAC1C2L,aAAc7E,EAAsBhf,EAAMkY,GAE1CsF,KAAM,KAENuB,QAAS,KAETujB,cAAerkB,EAAAA,GAEf2D,aAAc5hB,EAAK4hB,aAEnBjB,IAAK1C,EAAAA,GACLjb,KAAMib,EAAAA,GACN3E,MAAO2E,EAAAA,GACPuD,MAAOvD,EAAAA,GACPsD,MAAOtD,EAAAA,GACPmb,KAAMnb,EAAAA,GACN0D,WAAY1D,EAAAA,GACZud,aAAc,KACdwb,WAAY,KACZC,WAAY,KAEZ5yB,WACAmB,WAAYnB,EAAWA,EAASuD,UAAY,EAC5C6B,SAAU,KACVE,eAAe,EAGf4E,WAAW,EACXvQ,aAAa,EACbiX,eAAe,EACfiiB,GAAI,KACJ3+C,EAAG,KACHi3C,GAAI,KACJznB,EAAG,KACHmnB,GAAI,KACJh2C,EAAG,KACHouB,GAAI,KACJ0qB,IAAK,KACLzc,GAAI,KACJ/wB,EAAG,KACH2yC,IAAK,KACLC,IAAK,KACL58B,GAAI,KACJ68B,GAAI,MAYN,OAPEt/B,EAAS4I,IAAM,CAAErd,EAAGyU,GAEtBA,EAASwK,KAAOta,EAASA,EAAOsa,KAAOxK,EACvCA,EAASyF,KAAOA,EAAKjS,KAAK,KAAMwM,GAC5BS,EAAMwb,IACRxb,EAAMwb,GAAGjc,GAEJA,CACT,CACA,IAAIkN,GAAkB,KACtB,MAAMgL,GAAqBA,IAAMhL,IAAmBhF,EACpD,IAAIq3B,GACAC,GACJ,CACE,MAAMC,GAAIrM,EAAAA,EAAAA,MACJsM,EAAuBA,CAACx6C,EAAKiY,KACjC,IAAIwiC,EAIJ,OAHMA,EAAUF,EAAEv6C,MAChBy6C,EAAUF,EAAEv6C,GAAO,IACrBy6C,EAAQ18C,KAAKka,GACL/K,IACFutC,EAAQp/C,OAAS,EACnBo/C,EAAQnyC,SAASyG,GAAQA,EAAI7B,KAE7ButC,EAAQ,GAAGvtC,EAAE,CAChB,EAEHmtC,GAA6BG,EAC3B,4BACCttC,GAAM8a,GAAkB9a,IAE3BotC,GAAqBE,EACnB,uBACCttC,GAAMuiB,GAAwBviB,GAEnC,CACA,MAAM8iB,GAAsBlV,IAC1B,MAAMqI,EAAO6E,GAGb,OAFAqyB,GAA2Bv/B,GAC3BA,EAAS9O,MAAMV,KACR,KACLwP,EAAS9O,MAAMT,MACf8uC,GAA2Bl3B,EAAK,CACjC,EAEGkc,GAAuBA,KAC3BrX,IAAmBA,GAAgBhc,MAAMT,MACzC8uC,GAA2B,KAAK,EAUlC,SAAS3e,GAAoB5gB,GAC3B,OAAkC,EAA3BA,EAASS,MAAMsJ,SACxB,CACA,IA4GI61B,GACAC,GA7GAlrB,IAAwB,EAC5B,SAASqiB,GAAeh3B,EAAUtD,GAAQ,GACxCA,GAAS8iC,GAAmB9iC,GAC5B,MAAM,MAAE6E,EAAK,SAAEyJ,GAAahL,EAASS,MAC/B6pB,EAAa1J,GAAoB5gB,GACvCqqB,GAAUrqB,EAAUuB,EAAO+oB,EAAY5tB,GACvCmwB,GAAU7sB,EAAUgL,GACpB,MAAM80B,EAAcxV,EAAayV,GAAuB//B,EAAUtD,QAAS,EAE3E,OADAA,GAAS8iC,IAAmB,GACrBM,CACT,CACA,SAASC,GAAuB//B,EAAUtD,GAExC,MAAM2M,EAAYrJ,EAAS/X,KAuB3B+X,EAASiiB,YAA8Bt9B,OAAOkG,OAAO,MACrDmV,EAAShE,MAAQ,IAAIC,MAAM+D,EAAS4I,IAAKoZ,IAIzC,MAAM,MAAE/J,GAAU5O,EAClB,GAAI4O,EAAO,CACT,MAAMwL,EAAezjB,EAASyjB,aAAexL,EAAM13B,OAAS,EAAImjC,GAAmB1jB,GAAY,KACzF7R,EAAQ+mB,GAAmBlV,IACjCjO,EAAAA,EAAAA,MACA,MAAM+tC,EAAcv/B,EAClB0X,EACAjY,EACA,EACA,CACgFA,EAASuB,MACvFkiB,IAKJ,IAFAtxB,EAAAA,EAAAA,MACAhE,KACI+T,EAAAA,EAAAA,IAAU49B,GAAc,CAE1B,GADAA,EAAYv8B,KAAKghB,GAAsBA,IACnC7nB,EACF,OAAOojC,EAAYv8B,MAAMy8B,IACvBnuB,GAAkB7R,EAAUggC,EAAgBtjC,EAAM,IACjDhV,OAAOxD,IACR8d,EAAY9d,EAAG8b,EAAU,EAAE,IAG7BA,EAAS0R,SAAWouB,CAQxB,MACEjuB,GAAkB7R,EAAU8/B,EAAapjC,EAE7C,MACEujC,GAAqBjgC,EAAUtD,EAEnC,CACA,SAASmV,GAAkB7R,EAAU8/B,EAAapjC,IAC5CW,EAAAA,EAAAA,IAAWyiC,GACT9/B,EAAS/X,KAAKi4C,kBAChBlgC,EAASmgC,UAAYL,EAErB9/B,EAAS0J,OAASo2B,GAEX5yC,EAAAA,EAAAA,IAAS4yC,KASlB9/B,EAAS4J,YAAatL,EAAAA,EAAAA,IAAUwhC,IASlCG,GAAqBjgC,EAAUtD,EACjC,CAGA,SAAS0jC,GAAwBC,GAC/BT,GAAUS,EACVR,GAAoBv/C,IACdA,EAAEopB,OAAO42B,MACXhgD,EAAEgpB,UAAY,IAAIrN,MAAM3b,EAAEsoB,IAAK8Z,IACjC,CAEJ,CACA,MAAM6d,GAAgBA,KAAOX,GAC7B,SAASK,GAAqBjgC,EAAUtD,EAAO8jC,GAC7C,MAAMn3B,EAAYrJ,EAAS/X,KAC3B,IAAK+X,EAAS0J,OAAQ,CACpB,IAAKhN,GAASkjC,KAAYv2B,EAAUK,OAAQ,CAC1C,MAAMve,EAAWke,EAAUle,UAAYu2B,GAAqB1hB,GAAU7U,SACtE,GAAIA,EAAU,CACR,EAGJ,MAAM,gBAAEs1C,EAAe,gBAAEtY,GAAoBnoB,EAASG,WAAWjZ,QAC3D,WAAEw5C,EAAYvY,gBAAiBwY,GAA6Bt3B,EAC5Du3B,GAAuBvtC,EAAAA,EAAAA,KAC3BA,EAAAA,EAAAA,IACE,CACEotC,kBACAC,cAEFvY,GAEFwY,GAEFt3B,EAAUK,OAASk2B,GAAQz0C,EAAUy1C,EAIvC,CACF,CACA5gC,EAAS0J,OAASL,EAAUK,QAAUtW,EAAAA,GAClCysC,IACFA,GAAiB7/B,EAErB,CACiC,CAC/B,MAAM7R,EAAQ+mB,GAAmBlV,IACjCjO,EAAAA,EAAAA,MACA,IACEyyB,GAAaxkB,EACf,CAAE,SACA7N,EAAAA,EAAAA,MACAhE,GACF,CACF,CAUF,CACA,MAAM0yC,GAcF,CACF/tC,GAAAA,CAAIrO,EAAQS,GAEV,OADA4P,EAAAA,EAAAA,IAAMrQ,EAAQ,MAAO,IACdA,EAAOS,EAChB,GAUF,SAASw+B,GAAmB1jB,GAC1B,MAAM8lB,EAAU9C,IAqBdhjB,EAASgjB,QAAUA,GAAW,CAAC,CAAC,EAiBhC,MAAO,CACLvZ,MAAO,IAAIxN,MAAM+D,EAASyJ,MAAOo3B,IACjCr3B,MAAOxJ,EAASwJ,MAChB/D,KAAMzF,EAASyF,KACfqgB,SAGN,CACA,SAASpQ,GAAe1V,GACtB,GAAIA,EAASgjB,QACX,OAAOhjB,EAASg/B,cAAgBh/B,EAASg/B,YAAc,IAAI/iC,OAAMqC,EAAAA,EAAAA,KAAUjC,EAAAA,EAAAA,IAAQ2D,EAASgjB,UAAW,CACrGlwB,GAAAA,CAAIrO,EAAQS,GACV,OAAIA,KAAOT,EACFA,EAAOS,GACLA,KAAO27B,GACTA,GAAoB37B,GAAK8a,QAD3B,CAGT,EACAzI,GAAAA,CAAI9S,EAAQS,GACV,OAAOA,KAAOT,GAAUS,KAAO27B,EACjC,IAGN,CACA,MAAMigB,GAAa,kBACbC,GAAY5gD,GAAQA,EAAI6D,QAAQ88C,IAAatgD,GAAMA,EAAEwgD,gBAAeh9C,QAAQ,QAAS,IAC3F,SAASopB,GAAiB/D,EAAW43B,GAAkB,GACrD,OAAO5jC,EAAAA,EAAAA,IAAWgM,GAAaA,EAAU63B,aAAe73B,EAAUzlB,KAAOylB,EAAUzlB,MAAQq9C,GAAmB53B,EAAU83B,MAC1H,CACA,SAASzgC,GAAoBV,EAAUqJ,EAAW/H,GAAS,GACzD,IAAI1d,EAAOwpB,GAAiB/D,GAC5B,IAAKzlB,GAAQylB,EAAU+3B,OAAQ,CAC7B,MAAMp7C,EAAQqjB,EAAU+3B,OAAOp7C,MAAM,mBACjCA,IACFpC,EAAOoC,EAAM,GAEjB,CACA,IAAKpC,GAAQoc,GAAYA,EAAS9P,OAAQ,CACxC,MAAMmxC,EAAqB/zB,IACzB,IAAK,MAAMpoB,KAAOooB,EAChB,GAAIA,EAASpoB,KAASmkB,EACpB,OAAOnkB,CAEX,EAEFtB,EAAOy9C,EACLrhC,EAAS+lB,YAAc/lB,EAAS9P,OAAOjI,KAAK89B,aACzCsb,EAAkBrhC,EAASG,WAAW4lB,WAC7C,CACA,OAAOniC,EAAOm9C,GAASn9C,GAAQ0d,EAAS,MAAQ,WAClD,CACA,SAASs8B,GAAiBt5C,GACxB,OAAO+Y,EAAAA,EAAAA,IAAW/Y,IAAU,cAAeA,CAC7C,CAEA,MAAM2N,GAAWA,CAACgL,EAAiBC,KACjC,MAAM1c,GAAI8gD,EAAAA,EAAAA,IAAWrkC,EAAiBC,EAAcyX,IAOpD,OAAOn0B,CAAC,EAGV,SAAS+gD,GAAShgC,EAAO3d,EAAMsP,EAAUgT,EAAAA,IACvC,MAAM5lB,EAAI43B,KASV,MAAMspB,GAAgB36B,EAAAA,EAAAA,IAASjjB,GACzB69C,GAAiB36B,EAAAA,EAAAA,IAAUljB,GAC3B2I,GAAMqS,EAAAA,EAAAA,KAAU,CAAC9J,EAAOxD,KAC5B,IAAIowC,EAQJ,OAPAjuB,IAAgB,KACd,MAAMkuB,EAAYpgC,EAAM3d,IACpBoU,EAAAA,EAAAA,IAAW0pC,EAAYC,KACzBD,EAAaC,EACbrwC,IACF,IAEK,CACLwB,GAAAA,GAEE,OADAgC,IACO5B,EAAQJ,IAAMI,EAAQJ,IAAI4uC,GAAcA,CACjD,EACAztC,GAAAA,CAAI3P,GACF,MAAM+zB,EAAW/3B,EAAEmgB,MAAMc,MACnB8W,IACLz0B,KAAQy0B,GAAYmpB,KAAiBnpB,GAAYopB,KAAkBppB,KAAc,YAAYz0B,MAAUy0B,GAAY,YAAYmpB,MAAmBnpB,GAAY,YAAYopB,MAAoBppB,MAAcrgB,EAAAA,EAAAA,IAAW1T,EAAOo9C,KAC7NA,EAAap9C,EACbgN,KAEFhR,EAAEmlB,KAAK,UAAU7hB,IAAQsP,EAAQe,IAAMf,EAAQe,IAAI3P,GAASA,EAC9D,EACD,IAEGs9C,EAAuB,eAATh+C,EAAwB,iBAAmB,GAAGA,aAalE,OAZA2I,EAAIqI,OAAOiF,UAAY,KACrB,IAAIgoC,EAAK,EACT,MAAO,CACL7nC,IAAAA,GACE,OAAI6nC,EAAK,EACA,CAAEv9C,MAAOu9C,IAAOtgC,EAAMqgC,IAAgB,CAAC,EAAIr1C,EAAK0N,MAAM,GAEtD,CAAEA,MAAM,EAEnB,EACD,EAEI1N,CACT,CAEA,SAASo6B,GAAE1+B,EAAM65C,EAAiB92B,GAChC,MAAMpa,EAAI8O,UAAUnf,OACpB,OAAU,IAANqQ,GACE1D,EAAAA,EAAAA,IAAS40C,MAAqB1/C,EAAAA,EAAAA,IAAQ0/C,GACpC12B,GAAQ02B,GACHx3B,GAAYriB,EAAM,KAAM,CAAC65C,IAE3Bx3B,GAAYriB,EAAM65C,GAElBx3B,GAAYriB,EAAM,KAAM65C,IAG7BlxC,EAAI,EACNoa,EAAW7oB,MAAMuI,UAAU+W,MAAMxV,KAAKyT,UAAW,GAClC,IAAN9O,GAAWwa,GAAQJ,KAC5BA,EAAW,CAACA,IAEPV,GAAYriB,EAAM65C,EAAiB92B,GAE9C,CAEA,SAAS+2B,KAEL,aA4KJ,CAEA,SAASC,GAASrD,EAAMj1B,EAAQtC,EAAOjX,GACrC,MAAMmX,EAASF,EAAMjX,GACrB,GAAImX,GAAU26B,GAAW36B,EAAQq3B,GAC/B,OAAOr3B,EAET,MAAMxI,EAAM4K,IAEZ,OADA5K,EAAI6/B,KAAOA,EAAKl9B,QACT2F,EAAMjX,GAAS2O,CACxB,CACA,SAASmjC,GAAW36B,EAAQq3B,GAC1B,MAAMt2B,EAAOf,EAAOq3B,KACpB,GAAIt2B,EAAK9nB,QAAUo+C,EAAKp+C,OACtB,OAAO,EAET,IAAK,IAAID,EAAI,EAAGA,EAAI+nB,EAAK9nB,OAAQD,IAC/B,IAAI0X,EAAAA,EAAAA,IAAWqQ,EAAK/nB,GAAIq+C,EAAKr+C,IAC3B,OAAO,EAMX,OAHImyB,GAAqB,GAAKE,IAC5BA,GAAa1vB,KAAKqkB,IAEb,CACT,CAEA,MAAM4hB,GAAU,SACVroB,GAA4DzN,EAAAA,GAC5D8uC,GAAmBpgC,EACnBqgC,GAA+Dj9B,EAC/Dk9B,GAAsE/8B,EACtEg9B,GAAY,CAChBtL,2BACAC,kBACA5tB,sBACAhB,8BACAgD,QAASA,GACTlB,mBAEIo4B,GAAWD,GACXE,GAAgB,KAChBC,GAAc,KACdC,GAAmB,I;;;;;;ACz+PzB,MAAMC,EAAQ,6BACRC,EAAW,qCACXC,EAA0B,qBAAb78C,SAA2BA,SAAW,KACnD88C,EAAoBD,GAAuBA,EAAI3zB,cAAc,YAC7D6zB,EAAU,CACdpU,OAAQA,CAACvjB,EAAOjb,EAAQ4d,KACtB5d,EAAO6yC,aAAa53B,EAAO2C,GAAU,KAAK,EAE5CqC,OAAShF,IACP,MAAMjb,EAASib,EAAM+E,WACjBhgB,GACFA,EAAO8yC,YAAY73B,EACrB,EAEF8D,cAAeA,CAACg0B,EAAKh1B,EAAWqnB,EAAI/zB,KAClC,MAAM6K,EAAmB,QAAd6B,EAAsB20B,EAAIM,gBAAgBR,EAAOO,GAAqB,WAAdh1B,EAAyB20B,EAAIM,gBAAgBP,EAAUM,GAAOL,EAAI3zB,cAAcg0B,EAAK3N,EAAK,CAAEA,WAAO,GAItK,MAHY,WAAR2N,GAAoB1hC,GAA2B,MAAlBA,EAAM4hC,UACrC/2B,EAAGqwB,aAAa,WAAYl7B,EAAM4hC,UAE7B/2B,CAAE,EAEXoiB,WAAa6P,GAASuE,EAAIQ,eAAe/E,GACzC1P,cAAgB0P,GAASuE,EAAIjU,cAAc0P,GAC3CrK,QAASA,CAAC/hB,EAAMosB,KACdpsB,EAAKoxB,UAAYhF,CAAI,EAEvBnK,eAAgBA,CAAC9nB,EAAIiyB,KACnBjyB,EAAGqkB,YAAc4N,CAAI,EAEvBnuB,WAAa+B,GAASA,EAAK/B,WAC3Bue,YAAcxc,GAASA,EAAKwc,YAC5BgN,cAAgB6H,GAAaV,EAAInH,cAAc6H,GAC/ChP,UAAAA,CAAWloB,EAAI3I,GACb2I,EAAGqwB,aAAah5B,EAAI,GACtB,EAKA+wB,mBAAAA,CAAoBhF,EAASt/B,EAAQ4d,EAAQG,EAAWvK,EAAOC,GAC7D,MAAM4/B,EAASz1B,EAASA,EAAOkiB,gBAAkB9/B,EAAO+/B,UACxD,GAAIvsB,IAAUA,IAAUC,GAAOD,EAAM+qB,cACnC,MAAO,EAEL,GADAv+B,EAAO6yC,aAAar/B,EAAM8/B,WAAU,GAAO11B,GACvCpK,IAAUC,KAASD,EAAQA,EAAM+qB,aACnC,UAEC,CACLoU,EAAkBrS,UAA0B,QAAdviB,EAAsB,QAAQuhB,UAAgC,WAAdvhB,EAAyB,SAASuhB,WAAmBA,EACnI,MAAMrkC,EAAW03C,EAAkBrT,QACnC,GAAkB,QAAdvhB,GAAqC,WAAdA,EAAwB,CACjD,MAAMw1B,EAAUt4C,EAAS4jC,WACzB,MAAO0U,EAAQ1U,WACb5jC,EAASu4C,YAAYD,EAAQ1U,YAE/B5jC,EAAS63C,YAAYS,EACvB,CACAvzC,EAAO6yC,aAAa53C,EAAU2iB,EAChC,CACA,MAAO,CAELy1B,EAASA,EAAO9U,YAAcv+B,EAAO6+B,WAErCjhB,EAASA,EAAOkiB,gBAAkB9/B,EAAO+/B,UAE7C,GAGI0T,EAAa,aACbC,EAAY,YACZC,EAASjvC,OAAO,QAChBkvC,EAAaA,CAACviC,GAASiI,YAAYmd,EAAAA,EAAAA,GAAEvN,EAAAA,GAAgB2qB,EAAuBxiC,GAAQiI,GAC1Fs6B,EAAW5C,YAAc,aACzB,MAAM8C,EAA+B,CACnCpgD,KAAM9C,OACNmH,KAAMnH,OACNmjD,IAAK,CACHh8C,KAAMivB,QACN7E,SAAS,GAEX6xB,SAAU,CAACpjD,OAAQuU,OAAQ1Q,QAC3Bw/C,eAAgBrjD,OAChBsjD,iBAAkBtjD,OAClBujD,aAAcvjD,OACdwjD,gBAAiBxjD,OACjByjD,kBAAmBzjD,OACnB0jD,cAAe1jD,OACf2jD,eAAgB3jD,OAChB4jD,iBAAkB5jD,OAClB6jD,aAAc7jD,QAEV8jD,EAA4Bd,EAAWviC,OAAwBlO,EAAAA,EAAAA,IACnE,CAAC,EACD2jB,EAAAA,GACAgtB,GAEI3qB,EAAWA,CAAC/T,EAAMjP,EAAO,OACzBjU,EAAAA,EAAAA,IAAQkjB,GACVA,EAAK9X,SAASq3C,GAAOA,KAAMxuC,KAClBiP,GACTA,KAAQjP,EACV,EAEIyuC,EAAuBx/B,KACpBA,KAAOljB,EAAAA,EAAAA,IAAQkjB,GAAQA,EAAKmF,MAAMo6B,GAAOA,EAAGtkD,OAAS,IAAK+kB,EAAK/kB,OAAS,GAEjF,SAASwjD,EAAuB1rB,GAC9B,MAAM0sB,EAAY,CAAC,EACnB,IAAK,MAAM7/C,KAAOmzB,EACVnzB,KAAO8+C,IACXe,EAAU7/C,GAAOmzB,EAASnzB,IAG9B,IAAqB,IAAjBmzB,EAAS4rB,IACX,OAAOc,EAET,MAAM,KACJnhD,EAAO,IAAG,KACVqE,EAAI,SACJi8C,EAAQ,eACRC,EAAiB,GAAGvgD,eAAiB,iBACrCwgD,EAAmB,GAAGxgD,iBAAmB,aACzCygD,EAAe,GAAGzgD,aAAe,gBACjC0gD,EAAkBH,EAAc,kBAChCI,EAAoBH,EAAgB,cACpCI,EAAgBH,EAAY,eAC5BI,EAAiB,GAAG7gD,eAAiB,iBACrC8gD,EAAmB,GAAG9gD,iBAAmB,aACzC+gD,EAAe,GAAG/gD,cAChBy0B,EACE2sB,EAAYC,EAAkBf,GAC9BgB,EAAgBF,GAAaA,EAAU,GACvCG,EAAgBH,GAAaA,EAAU,IACvC,cACJ5tB,EAAa,QACbC,EAAO,iBACPE,EAAgB,QAChBE,EAAO,iBACPE,EAAgB,eAChBC,EAAiBR,EAAa,SAC9BS,EAAWR,EAAO,kBAClBU,EAAoBR,GAClBwtB,EACEK,EAAcA,CAACh5B,EAAIi5B,EAAUprC,KACjCqrC,EAAsBl5B,EAAIi5B,EAAWb,EAAgBH,GACrDiB,EAAsBl5B,EAAIi5B,EAAWd,EAAoBH,GACzDnqC,GAAQA,GAAM,EAEVsrC,EAAcA,CAACn5B,EAAInS,KACvBmS,EAAGo5B,YAAa,EAChBF,EAAsBl5B,EAAIq4B,GAC1Ba,EAAsBl5B,EAAIu4B,GAC1BW,EAAsBl5B,EAAIs4B,GAC1BzqC,GAAQA,GAAM,EAEVwrC,EAAiBJ,GACd,CAACj5B,EAAInS,KACV,MAAMqL,EAAO+/B,EAAWxtB,EAAWR,EAC7BhwB,EAAUA,IAAM+9C,EAAYh5B,EAAIi5B,EAAUprC,GAChDof,EAAS/T,EAAM,CAAC8G,EAAI/kB,IACpBq+C,GAAU,KACRJ,EAAsBl5B,EAAIi5B,EAAWf,EAAkBH,GACvDwB,EAAmBv5B,EAAIi5B,EAAWb,EAAgBH,GAC7CS,EAAoBx/B,IACvBsgC,EAAmBx5B,EAAInkB,EAAMi9C,EAAe79C,EAC9C,GACA,EAGN,OAAOgM,EAAAA,EAAAA,IAAO0xC,EAAW,CACvB3tB,aAAAA,CAAchL,GACZiN,EAASjC,EAAe,CAAChL,IACzBu5B,EAAmBv5B,EAAI+3B,GACvBwB,EAAmBv5B,EAAIg4B,EACzB,EACAxsB,cAAAA,CAAexL,GACbiN,EAASzB,EAAgB,CAACxL,IAC1Bu5B,EAAmBv5B,EAAIk4B,GACvBqB,EAAmBv5B,EAAIm4B,EACzB,EACAltB,QAASouB,GAAc,GACvB5tB,SAAU4tB,GAAc,GACxBhuB,OAAAA,CAAQrL,EAAInS,GACVmS,EAAGo5B,YAAa,EAChB,MAAMn+C,EAAUA,IAAMk+C,EAAYn5B,EAAInS,GACtC0rC,EAAmBv5B,EAAIq4B,GACvBkB,EAAmBv5B,EAAIs4B,GACvBmB,IACAH,GAAU,KACHt5B,EAAGo5B,aAGRF,EAAsBl5B,EAAIq4B,GAC1BkB,EAAmBv5B,EAAIu4B,GAClBG,EAAoBrtB,IACvBmuB,EAAmBx5B,EAAInkB,EAAMk9C,EAAe99C,GAC9C,IAEFgyB,EAAS5B,EAAS,CAACrL,EAAI/kB,GACzB,EACAkwB,gBAAAA,CAAiBnL,GACfg5B,EAAYh5B,GAAI,GAChBiN,EAAS9B,EAAkB,CAACnL,GAC9B,EACA2L,iBAAAA,CAAkB3L,GAChBg5B,EAAYh5B,GAAI,GAChBiN,EAAStB,EAAmB,CAAC3L,GAC/B,EACAuL,gBAAAA,CAAiBvL,GACfm5B,EAAYn5B,GACZiN,EAAS1B,EAAkB,CAACvL,GAC9B,GAEJ,CACA,SAAS64B,EAAkBf,GACzB,GAAgB,MAAZA,EACF,OAAO,KACF,IAAIh3C,EAAAA,EAAAA,IAASg3C,GAClB,MAAO,CAAC4B,EAAS5B,EAAStqB,OAAQksB,EAAS5B,EAASjqB,QAC/C,CACL,MAAMprB,EAAIi3C,EAAS5B,GACnB,MAAO,CAACr1C,EAAGA,EACb,CACF,CACA,SAASi3C,EAAS1mC,GAChB,MAAM7S,GAAMgkB,EAAAA,EAAAA,IAASnR,GAIrB,OAAO7S,CACT,CACA,SAASo5C,EAAmBv5B,EAAI25B,GAC9BA,EAAIn6C,MAAM,OAAO4B,SAAShN,GAAMA,GAAK4rB,EAAG45B,UAAUhtC,IAAIxY,MACrD4rB,EAAGy3B,KAAYz3B,EAAGy3B,GAA0B,IAAI9tC,MAAQiD,IAAI+sC,EAC/D,CACA,SAAST,EAAsBl5B,EAAI25B,GACjCA,EAAIn6C,MAAM,OAAO4B,SAAShN,GAAMA,GAAK4rB,EAAG45B,UAAU71B,OAAO3vB,KACzD,MAAMylD,EAAO75B,EAAGy3B,GACZoC,IACFA,EAAKlzC,OAAOgzC,GACPE,EAAKjzC,OACRoZ,EAAGy3B,QAAU,GAGnB,CACA,SAAS6B,EAAUjhC,GACjByhC,uBAAsB,KACpBA,sBAAsBzhC,EAAG,GAE7B,CACA,IAAI0hC,EAAQ,EACZ,SAASP,EAAmBx5B,EAAIg6B,EAAcC,EAAiBh/C,GAC7D,MAAMoc,EAAK2I,EAAGk6B,SAAWH,EACnBI,EAAoBA,KACpB9iC,IAAO2I,EAAGk6B,QACZj/C,GACF,EAEF,GAAIg/C,EACF,OAAOtgC,WAAWwgC,EAAmBF,GAEvC,MAAM,KAAEp+C,EAAI,QAAE6nB,EAAO,UAAE02B,GAAcC,EAAkBr6B,EAAIg6B,GAC3D,IAAKn+C,EACH,OAAOZ,IAET,MAAMq/C,EAAWz+C,EAAO,MACxB,IAAI0+C,EAAQ,EACZ,MAAMhjC,EAAMA,KACVyI,EAAGw6B,oBAAoBF,EAAUG,GACjCN,GAAmB,EAEfM,EAAS3iD,IACTA,EAAEO,SAAW2nB,KAAQu6B,GAASH,GAChC7iC,GACF,EAEFoC,YAAW,KACL4gC,EAAQH,GACV7iC,GACF,GACCmM,EAAU,GACb1D,EAAG06B,iBAAiBJ,EAAUG,EAChC,CACA,SAASJ,EAAkBr6B,EAAIg6B,GAC7B,MAAMW,EAAS1hD,OAAO2hD,iBAAiB56B,GACjC66B,EAAsB/hD,IAAS6hD,EAAO7hD,IAAQ,IAAI0G,MAAM,MACxDs7C,EAAmBD,EAAmB,GAAGtD,UACzCwD,EAAsBF,EAAmB,GAAGtD,aAC5CyD,EAAoBC,EAAWH,EAAkBC,GACjDG,EAAkBL,EAAmB,GAAGrD,UACxC2D,EAAqBN,EAAmB,GAAGrD,aAC3C4D,EAAmBH,EAAWC,EAAiBC,GACrD,IAAIt/C,EAAO,KACP6nB,EAAU,EACV02B,EAAY,EACZJ,IAAiBzC,EACfyD,EAAoB,IACtBn/C,EAAO07C,EACP7zB,EAAUs3B,EACVZ,EAAYW,EAAoB5mD,QAEzB6lD,IAAiBxC,EACtB4D,EAAmB,IACrBv/C,EAAO27C,EACP9zB,EAAU03B,EACVhB,EAAYe,EAAmBhnD,SAGjCuvB,EAAUooB,KAAK3b,IAAI6qB,EAAmBI,GACtCv/C,EAAO6nB,EAAU,EAAIs3B,EAAoBI,EAAmB7D,EAAaC,EAAY,KACrF4C,EAAYv+C,EAAOA,IAAS07C,EAAawD,EAAoB5mD,OAASgnD,EAAmBhnD,OAAS,GAEpG,MAAMknD,EAAex/C,IAAS07C,GAAc,yBAAyBv6C,KACnE69C,EAAmB,GAAGtD,aAAsBnjC,YAE9C,MAAO,CACLvY,OACA6nB,UACA02B,YACAiB,eAEJ,CACA,SAASJ,EAAWK,EAAQ1C,GAC1B,MAAO0C,EAAOnnD,OAASykD,EAAUzkD,OAC/BmnD,EAASA,EAAO78B,OAAO68B,GAEzB,OAAOxP,KAAK3b,OAAOyoB,EAAU54C,KAAI,CAACsC,EAAGpO,IAAMqnD,EAAKj5C,GAAKi5C,EAAKD,EAAOpnD,MACnE,CACA,SAASqnD,EAAKr1B,GACZ,MAAU,SAANA,EACK,EACyC,IAA3Cjd,OAAOid,EAAE7Q,MAAM,GAAI,GAAGzd,QAAQ,IAAK,KAC5C,CACA,SAAS6hD,IACP,OAAO9/C,SAAS6hD,KAAKC,YACvB,CAEA,SAASC,EAAW17B,EAAI9nB,EAAOyjD,GAC7B,MAAMC,EAAoB57B,EAAGy3B,GACzBmE,IACF1jD,GAASA,EAAQ,CAACA,KAAU0jD,GAAqB,IAAIA,IAAoB5mD,KAAK,MAEnE,MAATkD,EACF8nB,EAAG67B,gBAAgB,SACVF,EACT37B,EAAGqwB,aAAa,QAASn4C,GAEzB8nB,EAAG87B,UAAY5jD,CAEnB,CAEA,MAAM6jD,EAAuBvzC,OAAO,QAC9BwzC,EAAcxzC,OAAO,QACrByzC,EAAQ,CACZnjB,WAAAA,CAAY9Y,GAAI,MAAE9nB,IAAS,WAAEwmB,IAC3BsB,EAAG+7B,GAA6C,SAArB/7B,EAAG+pB,MAAMmS,QAAqB,GAAKl8B,EAAG+pB,MAAMmS,QACnEx9B,GAAcxmB,EAChBwmB,EAAW4O,YAAYtN,GAEvBm8B,EAAWn8B,EAAI9nB,EAEnB,EACAyxB,OAAAA,CAAQ3J,GAAI,MAAE9nB,IAAS,WAAEwmB,IACnBA,GAAcxmB,GAChBwmB,EAAW8O,MAAMxN,EAErB,EACA4J,OAAAA,CAAQ5J,GAAI,MAAE9nB,EAAK,SAAE2Q,IAAY,WAAE6V,KAC5BxmB,KAAW2Q,IAEZ6V,EACExmB,GACFwmB,EAAW4O,YAAYtN,GACvBm8B,EAAWn8B,GAAI,GACftB,EAAW8O,MAAMxN,IAEjBtB,EAAWmP,MAAM7N,GAAI,KACnBm8B,EAAWn8B,GAAI,EAAM,IAIzBm8B,EAAWn8B,EAAI9nB,GAEnB,EACAihC,aAAAA,CAAcnZ,GAAI,MAAE9nB,IAClBikD,EAAWn8B,EAAI9nB,EACjB,GAKF,SAASikD,EAAWn8B,EAAI9nB,GACtB8nB,EAAG+pB,MAAMmS,QAAUhkD,EAAQ8nB,EAAG+7B,GAAwB,OACtD/7B,EAAGg8B,IAAgB9jD,CACrB,CACA,SAASkkD,IACPH,EAAMI,YAAc,EAAGnkD,YACrB,IAAKA,EACH,MAAO,CAAE6xC,MAAO,CAAEmS,QAAS,QAC7B,CAEJ,CAEA,MAAMI,EAAe9zC,OAAoE,IACzF,SAAS+zC,EAAWnsC,GAClB,MAAMwD,GAAWkY,EAAAA,EAAAA,MACjB,IAAKlY,EAEH,OAEF,MAAM4oC,EAAkB5oC,EAASw8B,GAAK,CAACqM,EAAOrsC,EAAOwD,EAAShE,UAC5D7Z,MAAMw9B,KACJ55B,SAAS+iD,iBAAiB,kBAAkB9oC,EAASlY,UACrD0F,SAASykB,GAAS82B,EAAc92B,EAAM42B,IAAM,EAKhD,MAAMG,EAAUA,KACd,MAAMH,EAAOrsC,EAAOwD,EAAShE,OAC7BitC,EAAejpC,EAASqM,QAASw8B,GACjCD,EAAgBC,EAAK,GAEvBjyB,EAAAA,EAAAA,KAAU,MACRrD,EAAAA,EAAAA,IAAgBy1B,GAChB,MAAME,EAAK,IAAIC,iBAAiBH,GAChCE,EAAGE,QAAQppC,EAASqM,QAAQD,GAAG8D,WAAY,CAAEm5B,WAAW,KACxDxqB,EAAAA,EAAAA,KAAY,IAAMqqB,EAAGI,cAAa,GAEtC,CACA,SAASL,EAAexoC,EAAOooC,GAC7B,GAAsB,IAAlBpoC,EAAMsJ,UAAiB,CACzB,MAAMuC,EAAW7L,EAAM6L,SACvB7L,EAAQ6L,EAASC,aACbD,EAAS6C,gBAAkB7C,EAASqD,aACtCrD,EAAStc,QAAQ/M,MAAK,KACpBgmD,EAAe38B,EAASC,aAAcs8B,EAAK,GAGjD,CACA,MAAOpoC,EAAMR,UACXQ,EAAQA,EAAMR,UAAUoM,QAE1B,GAAsB,EAAlB5L,EAAMsJ,WAAiBtJ,EAAM2L,GAC/B28B,EAActoC,EAAM2L,GAAIy8B,QACnB,GAAIpoC,EAAMxY,OAASsyB,EAAAA,GACxB9Z,EAAMuK,SAASxd,SAAShN,GAAMyoD,EAAezoD,EAAGqoD,UAC3C,GAAIpoC,EAAMxY,OAASwnC,EAAAA,GAAQ,CAChC,IAAI,GAAErjB,EAAE,OAAE0B,GAAWrN,EACrB,MAAO2L,EAAI,CAET,GADA28B,EAAc38B,EAAIy8B,GACdz8B,IAAO0B,EACT,MACF1B,EAAKA,EAAGqiB,WACV,CACF,CACF,CACA,SAASsa,EAAc38B,EAAIy8B,GACzB,GAAoB,IAAhBz8B,EAAG+hB,SAAgB,CACrB,MAAMgI,EAAQ/pB,EAAG+pB,MACjB,IAAIoT,EAAU,GACd,IAAK,MAAMrkD,KAAO2jD,EAChB1S,EAAMqT,YAAY,KAAKtkD,IAAO2jD,EAAK3jD,IACnCqkD,GAAW,KAAKrkD,MAAQ2jD,EAAK3jD,MAE/BixC,EAAMuS,GAAgBa,CACxB,CACF,CAEA,MAAME,EAAY,sBAClB,SAASC,EAAWt9B,EAAI/D,EAAMrO,GAC5B,MAAMm8B,EAAQ/pB,EAAG+pB,MACXwT,GAAchoC,EAAAA,EAAAA,IAAS3H,GAC7B,IAAI4vC,GAAuB,EAC3B,GAAI5vC,IAAS2vC,EAAa,CACxB,GAAIthC,EACF,IAAK1G,EAAAA,EAAAA,IAAS0G,GAOZ,IAAK,MAAMwhC,KAAaxhC,EAAKzc,MAAM,KAAM,CACvC,MAAM1G,EAAM2kD,EAAUpoC,MAAM,EAAGooC,EAAUtlC,QAAQ,MAAMiC,OACtC,MAAbxM,EAAK9U,IACP4kD,EAAS3T,EAAOjxC,EAAK,GAEzB,MAXA,IAAK,MAAMA,KAAOmjB,EACC,MAAbrO,EAAK9U,IACP4kD,EAAS3T,EAAOjxC,EAAK,IAY7B,IAAK,MAAMA,KAAO8U,EACJ,YAAR9U,IACF0kD,GAAuB,GAEzBE,EAAS3T,EAAOjxC,EAAK8U,EAAK9U,GAE9B,MACE,GAAIykD,GACF,GAAIthC,IAASrO,EAAM,CACjB,MAAM+vC,EAAa5T,EAAMuS,GACrBqB,IACF/vC,GAAQ,IAAM+vC,GAEhB5T,EAAMoT,QAAUvvC,EAChB4vC,EAAuBH,EAAUrgD,KAAK4Q,EACxC,OACSqO,GACT+D,EAAG67B,gBAAgB,SAGnBE,KAAwB/7B,IAC1BA,EAAG+7B,GAAwByB,EAAuBzT,EAAMmS,QAAU,GAC9Dl8B,EAAGg8B,KACLjS,EAAMmS,QAAU,QAGtB,CACA,MACM0B,EAAc,iBACpB,SAASF,EAAS3T,EAAOvyC,EAAMwb,GAC7B,IAAIhd,EAAAA,EAAAA,IAAQgd,GACVA,EAAI5R,SAAS4E,GAAM03C,EAAS3T,EAAOvyC,EAAMwO,UAWzC,GATW,MAAPgN,IACFA,EAAM,IAQJxb,EAAKwiB,WAAW,MAClB+vB,EAAMqT,YAAY5lD,EAAMwb,OACnB,CACL,MAAM6qC,EAAWC,EAAW/T,EAAOvyC,GAC/BomD,EAAY5gD,KAAKgW,GACnB+2B,EAAMqT,aACJ1iC,EAAAA,EAAAA,IAAUmjC,GACV7qC,EAAIpb,QAAQgmD,EAAa,IACzB,aAGF7T,EAAM8T,GAAY7qC,CAEtB,CAEJ,CACA,MAAM+qC,EAAW,CAAC,SAAU,MAAO,MAC7BC,EAAc,CAAC,EACrB,SAASF,EAAW/T,EAAOkU,GACzB,MAAM/iC,EAAS8iC,EAAYC,GAC3B,GAAI/iC,EACF,OAAOA,EAET,IAAI1jB,GAAOijB,EAAAA,EAAAA,IAASwjC,GACpB,GAAa,WAATzmD,GAAqBA,KAAQuyC,EAC/B,OAAOiU,EAAYC,GAAWzmD,EAEhCA,GAAOypB,EAAAA,EAAAA,IAAWzpB,GAClB,IAAK,IAAItD,EAAI,EAAGA,EAAI6pD,EAAS5pD,OAAQD,IAAK,CACxC,MAAM2pD,EAAWE,EAAS7pD,GAAKsD,EAC/B,GAAIqmD,KAAY9T,EACd,OAAOiU,EAAYC,GAAWJ,CAElC,CACA,OAAOI,CACT,CAEA,MAAMC,EAAU,+BAChB,SAASC,EAAUn+B,EAAIlnB,EAAKZ,EAAOyjD,EAAO/nC,GACxC,GAAI+nC,GAAS7iD,EAAIkhB,WAAW,UACb,MAAT9hB,EACF8nB,EAAGo+B,kBAAkBF,EAASplD,EAAIuc,MAAM,EAAGvc,EAAI3E,SAE/C6rB,EAAGq+B,eAAeH,EAASplD,EAAKZ,OAE7B,CACL,MAAMomD,GAAYC,EAAAA,EAAAA,IAAqBzlD,GAC1B,MAATZ,GAAiBomD,KAAc7X,EAAAA,EAAAA,IAAmBvuC,GACpD8nB,EAAG67B,gBAAgB/iD,GAEnBknB,EAAGqwB,aAAav3C,EAAKwlD,EAAY,GAAKpmD,EAE1C,CACF,CAEA,SAASsmD,EAAax+B,EAAIlnB,EAAKZ,EAAOonB,EAAcqC,EAAiBC,EAAgBynB,GACnF,GAAY,cAARvwC,GAA+B,gBAARA,EAKzB,OAJIwmB,GACF+pB,EAAgB/pB,EAAcqC,EAAiBC,QAEjD5B,EAAGlnB,GAAgB,MAATZ,EAAgB,GAAKA,GAGjC,MAAM2+C,EAAM72B,EAAG2hB,QACf,GAAY,UAAR7oC,GAA2B,aAAR+9C,IACtBA,EAAIl2C,SAAS,KAAM,CAClB,MAAMkI,EAAmB,WAARguC,EAAmB72B,EAAGwlB,aAAa,UAAY,GAAKxlB,EAAG9nB,MAClE0Q,EAAoB,MAAT1Q,EAAgB,GAAKA,EAQtC,OAPI2Q,IAAaD,GAAc,WAAYoX,IACzCA,EAAG9nB,MAAQ0Q,GAEA,MAAT1Q,GACF8nB,EAAG67B,gBAAgB/iD,QAErBknB,EAAGxP,OAAStY,EAEd,CACA,IAAIumD,GAAa,EACjB,GAAc,KAAVvmD,GAAyB,MAATA,EAAe,CACjC,MAAM2D,SAAcmkB,EAAGlnB,GACV,YAAT+C,EACF3D,GAAQuuC,EAAAA,EAAAA,IAAmBvuC,GACT,MAATA,GAA0B,WAAT2D,GAC1B3D,EAAQ,GACRumD,GAAa,GACK,WAAT5iD,IACT3D,EAAQ,EACRumD,GAAa,EAEjB,CACA,IACEz+B,EAAGlnB,GAAOZ,CACZ,CAAE,MAAOJ,GACH,CAMN,CACA2mD,GAAcz+B,EAAG67B,gBAAgB/iD,EACnC,CAEA,SAAS4hD,EAAiB16B,EAAI5G,EAAOmB,EAASzT,GAC5CkZ,EAAG06B,iBAAiBthC,EAAOmB,EAASzT,EACtC,CACA,SAAS0zC,EAAoBx6B,EAAI5G,EAAOmB,EAASzT,GAC/CkZ,EAAGw6B,oBAAoBphC,EAAOmB,EAASzT,EACzC,CACA,MAAM43C,EAASl2C,OAAO,QACtB,SAASm2C,GAAW3+B,EAAIi+B,EAASW,EAAWC,EAAWjrC,EAAW,MAChE,MAAMkrC,EAAW9+B,EAAG0+B,KAAY1+B,EAAG0+B,GAAU,CAAC,GACxCK,EAAkBD,EAASb,GACjC,GAAIY,GAAaE,EACfA,EAAgB7mD,MAA6F2mD,MACxG,CACL,MAAOrnD,EAAMsP,GAAWk4C,GAAUf,GAClC,GAAIY,EAAW,CACb,MAAMI,EAAUH,EAASb,GAAWiB,GACmDL,EACrFjrC,GAEF8mC,EAAiB16B,EAAIxoB,EAAMynD,EAASn4C,EACtC,MAAWi4C,IACTvE,EAAoBx6B,EAAIxoB,EAAMunD,EAAiBj4C,GAC/Cg4C,EAASb,QAAW,EAExB,CACF,CACA,MAAMkB,GAAoB,4BAC1B,SAASH,GAAUxnD,GACjB,IAAIsP,EACJ,GAAIq4C,GAAkBniD,KAAKxF,GAAO,CAEhC,IAAIosB,EADJ9c,EAAU,CAAC,EAEX,MAAO8c,EAAIpsB,EAAKoC,MAAMulD,IACpB3nD,EAAOA,EAAK6d,MAAM,EAAG7d,EAAKrD,OAASyvB,EAAE,GAAGzvB,QACxC2S,EAAQ8c,EAAE,GAAG/H,gBAAiB,CAElC,CACA,MAAMzC,EAAoB,MAAZ5hB,EAAK,GAAaA,EAAK6d,MAAM,IAAKqF,EAAAA,EAAAA,IAAUljB,EAAK6d,MAAM,IACrE,MAAO,CAAC+D,EAAOtS,EACjB,CACA,IAAIs4C,GAAY,EAChB,MAAMnrD,GAAoBkH,QAAQF,UAC5BokD,GAASA,IAAMD,KAAcnrD,GAAEkjB,MAAK,IAAMioC,GAAY,IAAIA,GAAY5mD,KAAK8mD,OACjF,SAASJ,GAAcK,EAAc3rC,GACnC,MAAMqrC,EAAWnnD,IACf,GAAKA,EAAE0nD,MAEA,GAAI1nD,EAAE0nD,MAAQP,EAAQQ,SAC3B,YAFA3nD,EAAE0nD,KAAOhnD,KAAK8mD,OAIhBzpC,EAAAA,EAAAA,IACE6pC,GAA8B5nD,EAAGmnD,EAAQ/mD,OACzC0b,EACA,EACA,CAAC9b,GACF,EAIH,OAFAmnD,EAAQ/mD,MAAQqnD,EAChBN,EAAQQ,SAAWJ,KACZJ,CACT,CAWA,SAASS,GAA8B5nD,EAAGI,GACxC,IAAIlC,EAAAA,EAAAA,IAAQkC,GAAQ,CAClB,MAAMynD,EAAe7nD,EAAE8nD,yBAKvB,OAJA9nD,EAAE8nD,yBAA2B,KAC3BD,EAAa9/C,KAAK/H,GAClBA,EAAE+nD,UAAW,CAAI,EAEZ3nD,EAAM8H,KACVC,GAAQmsC,IAAQA,EAAGyT,UAAY5/C,GAAMA,EAAGmsC,IAE7C,CACE,OAAOl0C,CAEX,CAEA,MAAM4nD,GAAchnD,GAA8B,MAAtBA,EAAIzE,WAAW,IAAoC,MAAtByE,EAAIzE,WAAW,IACxEyE,EAAIzE,WAAW,GAAK,IAAMyE,EAAIzE,WAAW,GAAK,IACxC8tC,GAAYA,CAACniB,EAAIlnB,EAAK8lD,EAAWC,EAAWh9B,EAAWvC,EAAcqC,EAAiBC,EAAgBynB,KAC1G,MAAMsS,EAAsB,QAAd95B,EACF,UAAR/oB,EACF4iD,EAAW17B,EAAI6+B,EAAWlD,GACT,UAAR7iD,EACTwkD,EAAWt9B,EAAI4+B,EAAWC,IACjBjjC,EAAAA,EAAAA,IAAK9iB,IACTihB,EAAAA,EAAAA,IAAgBjhB,IACnB6lD,GAAW3+B,EAAIlnB,EAAK8lD,EAAWC,EAAWl9B,IAExB,MAAX7oB,EAAI,IAAcA,EAAMA,EAAIuc,MAAM,GAAI,GAAmB,MAAXvc,EAAI,IAAcA,EAAMA,EAAIuc,MAAM,GAAI,GAAS0qC,GAAgB//B,EAAIlnB,EAAK+lD,EAAWlD,IAC1I6C,EACEx+B,EACAlnB,EACA+lD,EACAv/B,EACAqC,EACAC,EACAynB,IAGU,eAARvwC,EACFknB,EAAGggC,WAAanB,EACC,gBAAR/lD,IACTknB,EAAGigC,YAAcpB,GAEnBV,EAAUn+B,EAAIlnB,EAAK+lD,EAAWlD,GAChC,EAEF,SAASoE,GAAgB//B,EAAIlnB,EAAKZ,EAAOyjD,GACvC,GAAIA,EACF,MAAY,cAAR7iD,GAA+B,gBAARA,MAGvBA,KAAOknB,GAAM8/B,GAAWhnD,KAAQmY,EAAAA,EAAAA,IAAW/Y,IAKjD,GAAY,eAARY,GAAgC,cAARA,GAA+B,cAARA,EACjD,OAAO,EAET,GAAY,SAARA,EACF,OAAO,EAET,GAAY,SAARA,GAAiC,UAAfknB,EAAG2hB,QACvB,OAAO,EAET,GAAY,SAAR7oC,GAAiC,aAAfknB,EAAG2hB,QACvB,OAAO,EAET,GAAY,UAAR7oC,GAA2B,WAARA,EAAkB,CACvC,MAAM+9C,EAAM72B,EAAG2hB,QACf,GAAY,QAARkV,GAAyB,UAARA,GAA2B,WAARA,GAA4B,WAARA,EAC1D,OAAO,CAEX,CACA,QAAIiJ,GAAWhnD,MAAQyc,EAAAA,EAAAA,IAASrd,KAGzBY,KAAOknB,CAChB;2BAIA,SAASkgC,GAAoBp5C,EAASq5C,GACpC,MAAMC,GAAOhyB,EAAAA,EAAAA,IAAgBtnB,GAC7B,MAAMu5C,UAAyBC,GAC7B/oD,WAAAA,CAAYgpD,GACVniD,MAAMgiD,EAAMG,EAAcJ,EAC5B,EAGF,OADAE,EAAiBnwC,IAAMkwC,EAChBC,CACT;2BAEA,MAAMG,GAAqD15C,GAClCo5C,GAAoBp5C,EAASqb,IAEhDs+B,GAAmC,qBAAhBnnC,YAA8BA,YAAc,QAErE,MAAMgnC,WAAmBG,GACvBlpD,WAAAA,CAAYmpD,EAAMhkB,EAAS,CAAC,EAAGyjB,GAC7B/hD,QACA5I,KAAKkrD,KAAOA,EACZlrD,KAAKknC,OAASA,EAIdlnC,KAAKqnC,UAAY,KACjBrnC,KAAKmrD,YAAa,EAClBnrD,KAAKorD,WAAY,EACjBprD,KAAKqrD,aAAe,KACpBrrD,KAAKsrD,IAAM,KACPtrD,KAAKurD,YAAcZ,EACrBA,EAAS3qD,KAAK87C,eAAgB97C,KAAKurD,aAOnCvrD,KAAKwrD,aAAa,CAAEr8B,KAAM,SACrBnvB,KAAKkrD,KAAKnyB,eACb/4B,KAAKyrD,cAAczrD,KAAKkrD,MAG9B,CACAQ,iBAAAA,GACE1rD,KAAKmrD,YAAa,EACbnrD,KAAKqnC,YACJrnC,KAAKorD,UACPprD,KAAK2rD,UAEL3rD,KAAK4rD,cAGX,CACAC,oBAAAA,GACE7rD,KAAKmrD,YAAa,EACdnrD,KAAKsrD,MACPtrD,KAAKsrD,IAAI5D,aACT1nD,KAAKsrD,IAAM,OAEb5pC,EAAAA,EAAAA,KAAS,KACF1hB,KAAKmrD,aACRrjC,GAAO,KAAM9nB,KAAKurD,YAClBvrD,KAAKqnC,UAAY,KACnB,GAEJ,CAIAukB,WAAAA,GACE5rD,KAAKorD,WAAY,EACjB,IAAK,IAAI1sD,EAAI,EAAGA,EAAIsB,KAAK8rD,WAAWntD,OAAQD,IAC1CsB,KAAK+rD,SAAS/rD,KAAK8rD,WAAWptD,GAAGsD,MAEnChC,KAAKsrD,IAAM,IAAI/D,kBAAkByE,IAC/B,IAAK,MAAM59B,KAAK49B,EACdhsD,KAAK+rD,SAAS39B,EAAE69B,cAClB,IAEFjsD,KAAKsrD,IAAI9D,QAAQxnD,KAAM,CAAE8rD,YAAY,IACrC,MAAMrmD,EAAUA,CAACiV,EAAKwxC,GAAU,KAC9B,MAAM,MAAEvsC,EAAK,OAAEwlC,GAAWzqC,EAC1B,IAAIyxC,EACJ,GAAIxsC,KAAUnf,EAAAA,EAAAA,IAAQmf,GACpB,IAAK,MAAMrc,KAAOqc,EAAO,CACvB,MAAMuiB,EAAMviB,EAAMrc,IACd4+B,IAAQzuB,QAAUyuB,GAAOA,EAAI77B,OAASoN,UACpCnQ,KAAOtD,KAAKknC,SACdlnC,KAAKknC,OAAO5jC,IAAOqrB,EAAAA,EAAAA,IAAS3uB,KAAKknC,OAAO5jC,MAEzC6oD,IAAgBA,EAA8BppD,OAAOkG,OAAO,SAAQmjD,EAAAA,EAAAA,IAAW9oD,KAAQ,EAE5F,CAEFtD,KAAKqrD,aAAec,EAChBD,GACFlsD,KAAKyrD,cAAc/wC,GAErB1a,KAAKqsD,aAAalH,GAClBnlD,KAAK2rD,SAAS,EAEVW,EAAWtsD,KAAKkrD,KAAKnyB,cACvBuzB,EACFA,IAAW3qC,MAAMjH,GAAQjV,EAAQiV,GAAK,KAEtCjV,EAAQzF,KAAKkrD,KAEjB,CACAO,aAAAA,CAAc/wC,GACZ,MAAM,MAAEiF,GAAUjF,EACZ6xC,GAAmB/rD,EAAAA,EAAAA,IAAQmf,GAASA,EAAQ5c,OAAOiI,KAAK2U,GAAS,CAAC,GACxE,IAAK,MAAMrc,KAAOP,OAAOiI,KAAKhL,MACb,MAAXsD,EAAI,IAAcipD,EAAiBphD,SAAS7H,IAC9CtD,KAAKwsD,SAASlpD,EAAKtD,KAAKsD,IAAM,GAAM,GAGxC,IAAK,MAAMA,KAAOipD,EAAiB/hD,IAAI4hD,EAAAA,IACrCrpD,OAAO69B,eAAe5gC,KAAMsD,EAAK,CAC/B4N,GAAAA,GACE,OAAOlR,KAAKysD,SAASnpD,EACvB,EACA+O,GAAAA,CAAImL,GACFxd,KAAKwsD,SAASlpD,EAAKka,EACrB,GAGN,CACAuuC,QAAAA,CAASzoD,GACP,IAAIZ,EAAQ1C,KAAKgxC,aAAa1tC,GAAOtD,KAAKgwC,aAAa1sC,QAAO,EAC9D,MAAMkmC,GAAW4iB,EAAAA,EAAAA,IAAW9oD,GACxBtD,KAAKqrD,cAAgBrrD,KAAKqrD,aAAa7hB,KACzC9mC,GAAQisB,EAAAA,EAAAA,IAASjsB,IAEnB1C,KAAKwsD,SAAShjB,EAAU9mC,GAAO,EACjC,CAIA+pD,QAAAA,CAASnpD,GACP,OAAOtD,KAAKknC,OAAO5jC,EACrB,CAIAkpD,QAAAA,CAASlpD,EAAKka,EAAKkvC,GAAgB,EAAMC,GAAe,GAClDnvC,IAAQxd,KAAKknC,OAAO5jC,KACtBtD,KAAKknC,OAAO5jC,GAAOka,EACfmvC,GAAgB3sD,KAAKqnC,WACvBrnC,KAAK2rD,UAEHe,KACU,IAARlvC,EACFxd,KAAK66C,cAAa31B,EAAAA,EAAAA,IAAU5hB,GAAM,IACV,kBAARka,GAAmC,kBAARA,EAC3Cxd,KAAK66C,cAAa31B,EAAAA,EAAAA,IAAU5hB,GAAMka,EAAM,IAC9BA,GACVxd,KAAKqmD,iBAAgBnhC,EAAAA,EAAAA,IAAU5hB,KAIvC,CACAqoD,OAAAA,GACE7jC,GAAO9nB,KAAK87C,eAAgB97C,KAAKurD,WACnC,CACAzP,YAAAA,GACE,MAAMj9B,GAAQ6J,EAAAA,EAAAA,IAAY1oB,KAAKkrD,MAAMz5C,EAAAA,EAAAA,IAAO,CAAC,EAAGzR,KAAKknC,SAuCrD,OAtCKlnC,KAAKqnC,YACRxoB,EAAMwb,GAAMjc,IACVpe,KAAKqnC,UAAYjpB,EACjBA,EAASkgB,MAAO,EAYhB,MAAMsuB,EAAWA,CAAChpC,EAAOnP,KACvBzU,KAAK6sD,cACH,IAAIC,YAAYlpC,EAAO,CACrBmpC,OAAQt4C,IAEX,EAEH2J,EAASyF,KAAO,CAACD,KAAUnP,KACzBm4C,EAAShpC,EAAOnP,IACZyQ,EAAAA,EAAAA,IAAUtB,KAAWA,GACvBgpC,GAAS1nC,EAAAA,EAAAA,IAAUtB,GAAQnP,EAC7B,EAEF,IAAInG,EAAStO,KACb,MAAOsO,EAASA,IAAWA,EAAOggB,YAAchgB,EAAOvJ,MACrD,GAAIuJ,aAAkBw8C,GAAY,CAChC1sC,EAAS9P,OAASA,EAAO+4B,UACzBjpB,EAASsmB,SAAWp2B,EAAO+4B,UAAU3C,SACrC,KACF,CACF,GAGG7lB,CACT,CACAwtC,YAAAA,CAAalH,GACPA,GACFA,EAAOv5C,SAASy2C,IACd,MAAM3xB,EAAIvsB,SAASkpB,cAAc,SACjCqD,EAAEme,YAAcwT,EAChBriD,KAAKurD,WAAWzJ,YAAYpxB,EACoB,GAKtD,EAGF,SAASs8B,GAAahrD,EAAO,UAC3B,CACE,MAAMoc,GAAWkY,EAAAA,EAAAA,MACjB,IAAKlY,EAEH,OAAOkG,EAAAA,GAET,MAAM2oC,EAAU7uC,EAAS/X,KAAKs6B,aAC9B,IAAKssB,EAEH,OAAO3oC,EAAAA,GAET,MAAM4oC,EAAMD,EAAQjrD,GACpB,OAAKkrD,GAEI5oC,EAAAA,EAGX,CACF,CAEA,MAAM6oC,GAA8B,IAAIr6C,QAClCs6C,GAAiC,IAAIt6C,QACrCu6C,GAAYr6C,OAAO,WACnByhB,GAAazhB,OAAO,YACpBs6C,GAAsB,CAC1BtrD,KAAM,kBACN2d,OAAuBlO,EAAAA,EAAAA,IAAO,CAAC,EAAGuxC,EAA2B,CAC3D3B,IAAKniD,OACLquD,UAAWruD,SAEbm3B,KAAAA,CAAM1W,GAAO,MAAEiI,IACb,MAAMxJ,GAAWkY,EAAAA,EAAAA,MACX3B,GAAQD,EAAAA,EAAAA,MACd,IAAI5K,EACAV,EAmCJ,OAlCA8S,EAAAA,EAAAA,KAAU,KACR,IAAKpS,EAAanrB,OAChB,OAEF,MAAM4uD,EAAY5tC,EAAM4tC,WAAa,GAAG5tC,EAAM3d,MAAQ,WACtD,IAAKwrD,GACH1jC,EAAa,GAAGU,GAChBpM,EAASS,MAAM2L,GACf+iC,GAEA,OAEFzjC,EAAale,QAAQ6hD,IACrB3jC,EAAale,QAAQ8hD,IACrB,MAAMC,EAAgB7jC,EAAazV,OAAOu5C,IAC1C3J,IACA0J,EAAc/hD,SAAShN,IACrB,MAAM4rB,EAAK5rB,EAAE4rB,GACP+pB,EAAQ/pB,EAAG+pB,MACjBwP,EAAmBv5B,EAAI+iC,GACvBhZ,EAAMsZ,UAAYtZ,EAAMuZ,gBAAkBvZ,EAAMwZ,mBAAqB,GACrE,MAAMlrC,EAAK2H,EAAG6iC,IAAc/qD,IACtBA,GAAKA,EAAEO,SAAW2nB,GAGjBloB,IAAK,aAAakF,KAAKlF,EAAE0rD,gBAC5BxjC,EAAGw6B,oBAAoB,gBAAiBniC,GACxC2H,EAAG6iC,IAAa,KAChB3J,EAAsBl5B,EAAI+iC,GAC5B,EAEF/iC,EAAG06B,iBAAiB,gBAAiBriC,EAAG,GACxC,IAEG,KACL,MAAM4T,GAAW9hB,EAAAA,EAAAA,IAAMgL,GACjBsuC,EAAqB9L,EAAuB1rB,GAClD,IAAI4qB,EAAM5qB,EAAS4qB,KAAO1oB,EAAAA,GAE1B,GADA7O,EAAe,GACXV,EACF,IAAK,IAAI1qB,EAAI,EAAGA,EAAI0qB,EAASzqB,OAAQD,IAAK,CACxC,MAAM6qB,EAAQH,EAAS1qB,GACnB6qB,EAAMiB,IAAMjB,EAAMiB,cAAc0jC,UAClCpkC,EAAazoB,KAAKkoB,IAClBwN,EAAAA,EAAAA,IACExN,GACAuN,EAAAA,EAAAA,IACEvN,EACA0kC,EACAt5B,EACAvW,IAGJ+uC,GAAY96C,IACVkX,EACAA,EAAMiB,GAAG2jC,yBAGf,CAEF/kC,EAAWxB,EAAM6I,SAAU8F,EAAAA,EAAAA,IAAyB3O,EAAM6I,WAAa,GACvE,IAAK,IAAI/xB,EAAI,EAAGA,EAAI0qB,EAASzqB,OAAQD,IAAK,CACxC,MAAM6qB,EAAQH,EAAS1qB,GACN,MAAb6qB,EAAMjmB,MACRyzB,EAAAA,EAAAA,IACExN,GACAuN,EAAAA,EAAAA,IAAuBvN,EAAO0kC,EAAoBt5B,EAAOvW,GAK/D,CACA,OAAOsK,EAAAA,EAAAA,IAAY24B,EAAK,KAAMj4B,EAAS,CAE3C,GAGyBkkC,GAAoB3tC,MAC/C,MAAMyuC,GAAkBd,GACxB,SAASG,GAAe7uD,GACtB,MAAM4rB,EAAK5rB,EAAE4rB,GACTA,EAAG6iC,KACL7iC,EAAG6iC,MAED7iC,EAAGiK,KACLjK,EAAGiK,KAEP,CACA,SAASi5B,GAAe9uD,GACtBwuD,GAAe/6C,IAAIzT,EAAGA,EAAE4rB,GAAG2jC,wBAC7B,CACA,SAASP,GAAiBhvD,GACxB,MAAMyvD,EAASlB,GAAYj8C,IAAItS,GACzB0vD,EAASlB,GAAel8C,IAAItS,GAC5B2vD,EAAKF,EAAOG,KAAOF,EAAOE,KAC1BC,EAAKJ,EAAOK,IAAMJ,EAAOI,IAC/B,GAAIH,GAAME,EAAI,CACZ,MAAM/9B,EAAI9xB,EAAE4rB,GAAG+pB,MAGf,OAFA7jB,EAAEm9B,UAAYn9B,EAAEo9B,gBAAkB,aAAaS,OAAQE,OACvD/9B,EAAEq9B,mBAAqB,KAChBnvD,CACT,CACF,CACA,SAAS4uD,GAAgBhjC,EAAI5B,EAAM2kC,GACjC,MAAMj1B,EAAQ9N,EAAGo3B,YACXyC,EAAO75B,EAAGy3B,GACZoC,GACFA,EAAKz4C,SAASu4C,IACZA,EAAIn6C,MAAM,OAAO4B,SAAShN,GAAMA,GAAK05B,EAAM8rB,UAAU71B,OAAO3vB,IAAG,IAGnE2uD,EAAUvjD,MAAM,OAAO4B,SAAShN,GAAMA,GAAK05B,EAAM8rB,UAAUhtC,IAAIxY,KAC/D05B,EAAMic,MAAMmS,QAAU,OACtB,MAAMz6B,EAA8B,IAAlBrD,EAAK2jB,SAAiB3jB,EAAOA,EAAK0F,WACpDrC,EAAU61B,YAAYxpB,GACtB,MAAM,aAAEutB,GAAiBhB,EAAkBvsB,GAE3C,OADArM,EAAUm1B,YAAY9oB,GACfutB,CACT,CAEA,MAAM8I,GAAoB9vC,IACxB,MAAMpU,EAAKoU,EAAMc,MAAM,yBAA0B,EACjD,OAAOnf,EAAAA,EAAAA,IAAQiK,GAAO/H,IAAU64B,EAAAA,EAAAA,IAAe9wB,EAAI/H,GAAS+H,CAAE,EAEhE,SAASmkD,GAAmBtsD,GAC1BA,EAAEO,OAAOgsD,WAAY,CACvB,CACA,SAASC,GAAiBxsD,GACxB,MAAMO,EAASP,EAAEO,OACbA,EAAOgsD,YACThsD,EAAOgsD,WAAY,EACnBhsD,EAAOgqD,cAAc,IAAIkC,MAAM,UAEnC,CACA,MAAMC,GAAYh8C,OAAO,WACnBi8C,GAAa,CACjB5rB,OAAAA,CAAQ7Y,GAAM0J,WAAW,KAAExiB,EAAI,KAAEkT,EAAI,OAAED,IAAY9F,GACjD2L,EAAGwkC,IAAaL,GAAiB9vC,GACjC,MAAMqwC,EAAevqC,GAAU9F,EAAMc,OAA8B,WAArBd,EAAMc,MAAMtZ,KAC1D6+C,EAAiB16B,EAAI9Y,EAAO,SAAW,SAAUpP,IAC/C,GAAIA,EAAEO,OAAOgsD,UACX,OACF,IAAIM,EAAW3kC,EAAG9nB,MACdkiB,IACFuqC,EAAWA,EAASvqC,QAElBsqC,IACFC,GAAWtqC,EAAAA,EAAAA,IAAcsqC,IAE3B3kC,EAAGwkC,IAAWG,EAAS,IAErBvqC,GACFsgC,EAAiB16B,EAAI,UAAU,KAC7BA,EAAG9nB,MAAQ8nB,EAAG9nB,MAAMkiB,MAAM,IAGzBlT,IACHwzC,EAAiB16B,EAAI,mBAAoBokC,IACzC1J,EAAiB16B,EAAI,iBAAkBskC,IACvC5J,EAAiB16B,EAAI,SAAUskC,IAEnC,EAEA36B,OAAAA,CAAQ3J,GAAI,MAAE9nB,IACZ8nB,EAAG9nB,MAAiB,MAATA,EAAgB,GAAKA,CAClC,EACA6gC,YAAAA,CAAa/Y,GAAI,MAAE9nB,EAAOwxB,WAAW,KAAExiB,EAAI,KAAEkT,EAAI,OAAED,IAAY9F,GAE7D,GADA2L,EAAGwkC,IAAaL,GAAiB9vC,GAC7B2L,EAAGqkC,UACL,OACF,MAAMO,GAAWzqC,GAAsB,WAAZ6F,EAAGnkB,MAAuB,OAAOmB,KAAKgjB,EAAG9nB,OAAmC8nB,EAAG9nB,OAA7BmiB,EAAAA,EAAAA,IAAc2F,EAAG9nB,OACxF0Q,EAAoB,MAAT1Q,EAAgB,GAAKA,EACtC,GAAI0sD,IAAYh8C,EAAhB,CAGA,GAAIjP,SAASkrD,gBAAkB7kC,GAAkB,UAAZA,EAAGnkB,KAAkB,CACxD,GAAIqL,EACF,OAEF,GAAIkT,GAAQ4F,EAAG9nB,MAAMkiB,SAAWxR,EAC9B,MAEJ,CACAoX,EAAG9nB,MAAQ0Q,CATX,CAUF,GAEIk8C,GAAiB,CAErBr9B,MAAM,EACNoR,OAAAA,CAAQ7Y,EAAI7gB,EAAGkV,GACb2L,EAAGwkC,IAAaL,GAAiB9vC,GACjCqmC,EAAiB16B,EAAI,UAAU,KAC7B,MAAM+kC,EAAa/kC,EAAGglC,YAChBC,EAAeC,GAASllC,GACxBmlC,EAAUnlC,EAAGmlC,QACbhpD,EAAS6jB,EAAGwkC,IAClB,IAAIxuD,EAAAA,EAAAA,IAAQ+uD,GAAa,CACvB,MAAMhhD,GAAQqhD,EAAAA,EAAAA,IAAaL,EAAYE,GACjCI,GAAmB,IAAXthD,EACd,GAAIohD,IAAYE,EACdlpD,EAAO4oD,EAAWtmC,OAAOwmC,SACpB,IAAKE,GAAWE,EAAO,CAC5B,MAAMC,EAAW,IAAIP,GACrBO,EAASvtC,OAAOhU,EAAO,GACvB5H,EAAOmpD,EACT,CACF,MAAO,IAAIp8B,EAAAA,EAAAA,IAAM67B,GAAa,CAC5B,MAAMxT,EAAS,IAAI5nC,IAAIo7C,GACnBI,EACF5T,EAAO3kC,IAAIq4C,GAEX1T,EAAO5qC,OAAOs+C,GAEhB9oD,EAAOo1C,EACT,MACEp1C,EAAOopD,GAAiBvlC,EAAImlC,GAC9B,GAEJ,EAEAx7B,QAAS67B,GACTzsB,YAAAA,CAAa/Y,EAAI+J,EAAS1V,GACxB2L,EAAGwkC,IAAaL,GAAiB9vC,GACjCmxC,GAAWxlC,EAAI+J,EAAS1V,EAC1B,GAEF,SAASmxC,GAAWxlC,GAAI,MAAE9nB,EAAK,SAAE2Q,GAAYwL,GAC3C2L,EAAGglC,YAAc9sD,GACblC,EAAAA,EAAAA,IAAQkC,GACV8nB,EAAGmlC,SAAUC,EAAAA,EAAAA,IAAaltD,EAAOmc,EAAMc,MAAMjd,QAAU,GAC9CgxB,EAAAA,EAAAA,IAAMhxB,GACf8nB,EAAGmlC,QAAUjtD,EAAMiT,IAAIkJ,EAAMc,MAAMjd,OAC1BA,IAAU2Q,IACnBmX,EAAGmlC,SAAUM,EAAAA,EAAAA,IAAWvtD,EAAOqtD,GAAiBvlC,GAAI,IAExD,CACA,MAAM0lC,GAAc,CAClB7sB,OAAAA,CAAQ7Y,GAAI,MAAE9nB,GAASmc,GACrB2L,EAAGmlC,SAAUM,EAAAA,EAAAA,IAAWvtD,EAAOmc,EAAMc,MAAMjd,OAC3C8nB,EAAGwkC,IAAaL,GAAiB9vC,GACjCqmC,EAAiB16B,EAAI,UAAU,KAC7BA,EAAGwkC,IAAWU,GAASllC,GAAI,GAE/B,EACA+Y,YAAAA,CAAa/Y,GAAI,MAAE9nB,EAAK,SAAE2Q,GAAYwL,GACpC2L,EAAGwkC,IAAaL,GAAiB9vC,GAC7Bnc,IAAU2Q,IACZmX,EAAGmlC,SAAUM,EAAAA,EAAAA,IAAWvtD,EAAOmc,EAAMc,MAAMjd,OAE/C,GAEIytD,GAAe,CAEnBl+B,MAAM,EACNoR,OAAAA,CAAQ7Y,GAAI,MAAE9nB,EAAOwxB,WAAW,OAAEvP,IAAY9F,GAC5C,MAAMuxC,GAAa18B,EAAAA,EAAAA,IAAMhxB,GACzBwiD,EAAiB16B,EAAI,UAAU,KAC7B,MAAM6lC,EAAc9vD,MAAMuI,UAAUuL,OAAOhK,KAAKmgB,EAAGlZ,SAAU8b,GAAMA,EAAEkjC,WAAU9lD,KAC5E4iB,GAAMzI,GAASE,EAAAA,EAAAA,IAAc6qC,GAAStiC,IAAMsiC,GAAStiC,KAExD5C,EAAGwkC,IACDxkC,EAAG+2B,SAAW6O,EAAa,IAAIj8C,IAAIk8C,GAAeA,EAAcA,EAAY,IAE9E7lC,EAAG+lC,YAAa,GAChB7uC,EAAAA,EAAAA,KAAS,KACP8I,EAAG+lC,YAAa,CAAK,GACrB,IAEJ/lC,EAAGwkC,IAAaL,GAAiB9vC,EACnC,EAGAsV,OAAAA,CAAQ3J,GAAI,MAAE9nB,EAAOwxB,WAAW,OAAEvP,KAChC6rC,GAAYhmC,EAAI9nB,EAClB,EACA6gC,YAAAA,CAAa/Y,EAAIimC,EAAU5xC,GACzB2L,EAAGwkC,IAAaL,GAAiB9vC,EACnC,EACAuV,OAAAA,CAAQ5J,GAAI,MAAE9nB,EAAOwxB,WAAW,OAAEvP,KAC3B6F,EAAG+lC,YACNC,GAAYhmC,EAAI9nB,EAEpB,GAEF,SAAS8tD,GAAYhmC,EAAI9nB,EAAOiiB,GAC9B,MAAM+rC,EAAalmC,EAAG+2B,SAChBoP,GAAenwD,EAAAA,EAAAA,IAAQkC,GAC7B,IAAIguD,GAAeC,IAAiBj9B,EAAAA,EAAAA,IAAMhxB,GAA1C,CAMA,IAAK,IAAIhE,EAAI,EAAGsQ,EAAIwb,EAAGlZ,QAAQ3S,OAAQD,EAAIsQ,EAAGtQ,IAAK,CACjD,MAAMkyD,EAASpmC,EAAGlZ,QAAQ5S,GACpBmyD,EAAcnB,GAASkB,GAC7B,GAAIF,EACF,GAAIC,EAAc,CAChB,MAAMG,SAAoBD,EAExBD,EAAON,SADU,WAAfQ,GAA0C,WAAfA,EACXpuD,EAAMmmB,MAAMrY,GAAMtR,OAAOsR,KAAOtR,OAAO2xD,MAEvCjB,EAAAA,EAAAA,IAAaltD,EAAOmuD,IAAgB,CAE1D,MACED,EAAON,SAAW5tD,EAAMiT,IAAIk7C,QAEzB,IAAIZ,EAAAA,EAAAA,IAAWP,GAASkB,GAASluD,GAGtC,YAFI8nB,EAAGumC,gBAAkBryD,IACvB8rB,EAAGumC,cAAgBryD,GAGzB,CACKgyD,IAAoC,IAAtBlmC,EAAGumC,gBACpBvmC,EAAGumC,eAAiB,EAtBtB,CAwBF,CACA,SAASrB,GAASllC,GAChB,MAAO,WAAYA,EAAKA,EAAGxP,OAASwP,EAAG9nB,KACzC,CACA,SAASqtD,GAAiBvlC,EAAImlC,GAC5B,MAAMrsD,EAAMqsD,EAAU,aAAe,cACrC,OAAOrsD,KAAOknB,EAAKA,EAAGlnB,GAAOqsD,CAC/B,CACA,MAAMqB,GAAgB,CACpB3tB,OAAAA,CAAQ7Y,EAAI+J,EAAS1V,GACnBoyC,GAAczmC,EAAI+J,EAAS1V,EAAO,KAAM,UAC1C,EACAsV,OAAAA,CAAQ3J,EAAI+J,EAAS1V,GACnBoyC,GAAczmC,EAAI+J,EAAS1V,EAAO,KAAM,UAC1C,EACA0kB,YAAAA,CAAa/Y,EAAI+J,EAAS1V,EAAO6K,GAC/BunC,GAAczmC,EAAI+J,EAAS1V,EAAO6K,EAAW,eAC/C,EACA0K,OAAAA,CAAQ5J,EAAI+J,EAAS1V,EAAO6K,GAC1BunC,GAAczmC,EAAI+J,EAAS1V,EAAO6K,EAAW,UAC/C,GAEF,SAASwnC,GAAoB/kB,EAAS9lC,GACpC,OAAQ8lC,GACN,IAAK,SACH,OAAOgkB,GACT,IAAK,WACH,OAAOlB,GACT,QACE,OAAQ5oD,GACN,IAAK,WACH,OAAOipD,GACT,IAAK,QACH,OAAOY,GACT,QACE,OAAOjB,IAGjB,CACA,SAASgC,GAAczmC,EAAI+J,EAAS1V,EAAO6K,EAAWhG,GACpD,MAAMytC,EAAaD,GACjB1mC,EAAG2hB,QACHttB,EAAMc,OAASd,EAAMc,MAAMtZ,MAEvBoE,EAAK0mD,EAAWztC,GACtBjZ,GAAMA,EAAG+f,EAAI+J,EAAS1V,EAAO6K,EAC/B,CACA,SAAS0nC,KACPnC,GAAWpI,YAAc,EAAGnkD,YAAY,CAAGA,UAC3CwtD,GAAYrJ,YAAc,EAAGnkD,SAASmc,KACpC,GAAIA,EAAMc,QAASswC,EAAAA,EAAAA,IAAWpxC,EAAMc,MAAMjd,MAAOA,GAC/C,MAAO,CAAEitD,SAAS,EACpB,EAEFL,GAAezI,YAAc,EAAGnkD,SAASmc,KACvC,IAAIre,EAAAA,EAAAA,IAAQkC,IACV,GAAImc,EAAMc,QAASiwC,EAAAA,EAAAA,IAAaltD,EAAOmc,EAAMc,MAAMjd,QAAU,EAC3D,MAAO,CAAEitD,SAAS,QAEf,IAAIj8B,EAAAA,EAAAA,IAAMhxB,IACf,GAAImc,EAAMc,OAASjd,EAAMiT,IAAIkJ,EAAMc,MAAMjd,OACvC,MAAO,CAAEitD,SAAS,QAEf,GAAIjtD,EACT,MAAO,CAAEitD,SAAS,EACpB,EAEFqB,GAAcnK,YAAc,CAACtyB,EAAS1V,KACpC,GAA0B,kBAAfA,EAAMxY,KACf,OAEF,MAAM8qD,EAAaD,GAEjBryC,EAAMxY,KAAK+4C,cACXvgC,EAAMc,OAASd,EAAMc,MAAMtZ,MAE7B,OAAI8qD,EAAWtK,YACNsK,EAAWtK,YAAYtyB,EAAS1V,QADzC,CAEA,CAEJ,CAEA,MAAMwyC,GAAkB,CAAC,OAAQ,QAAS,MAAO,QAC3CC,GAAiB,CACrBxiD,KAAOxM,GAAMA,EAAEivD,kBACfC,QAAUlvD,GAAMA,EAAEmvD,iBAClBjuD,KAAOlB,GAAMA,EAAEO,SAAWP,EAAEovD,cAC5BC,KAAOrvD,IAAOA,EAAEsvD,QAChB1/C,MAAQ5P,IAAOA,EAAEuvD,SACjBC,IAAMxvD,IAAOA,EAAEyvD,OACfC,KAAO1vD,IAAOA,EAAE2vD,QAChBzD,KAAOlsD,GAAM,WAAYA,GAAkB,IAAbA,EAAE4vD,OAChClwC,OAAS1f,GAAM,WAAYA,GAAkB,IAAbA,EAAE4vD,OAClCC,MAAQ7vD,GAAM,WAAYA,GAAkB,IAAbA,EAAE4vD,OACjCE,MAAOA,CAAC9vD,EAAG4xB,IAAcm9B,GAAgBxoC,MAAMuF,GAAM9rB,EAAE,GAAG8rB,UAAY8F,EAAU/oB,SAASijB,MAErFikC,GAAgBA,CAAC5nD,EAAIypB,KACzB,MAAM1O,EAAQ/a,EAAG6nD,YAAc7nD,EAAG6nD,UAAY,CAAC,GACzCC,EAAWr+B,EAAU10B,KAAK,KAChC,OAAOgmB,EAAM+sC,KAAc/sC,EAAM+sC,GAAY,CAAC3uC,KAAUnP,KACtD,IAAK,IAAI/V,EAAI,EAAGA,EAAIw1B,EAAUv1B,OAAQD,IAAK,CACzC,MAAM8zD,EAAQlB,GAAep9B,EAAUx1B,IACvC,GAAI8zD,GAASA,EAAM5uC,EAAOsQ,GACxB,MACJ,CACA,OAAOzpB,EAAGmZ,KAAUnP,EAAK,EACzB,EAEEg+C,GAAW,CACfC,IAAK,SACLC,MAAO,IACPC,GAAI,WACJpE,KAAM,aACN2D,MAAO,cACPU,KAAM,aACN1hD,OAAQ,aAEJ2hD,GAAWA,CAACroD,EAAIypB,KACpB,MAAM1O,EAAQ/a,EAAGsoD,YAActoD,EAAGsoD,UAAY,CAAC,GACzCR,EAAWr+B,EAAU10B,KAAK,KAChC,OAAOgmB,EAAM+sC,KAAc/sC,EAAM+sC,GAAa3uC,IAC5C,KAAM,QAASA,GACb,OAEF,MAAMovC,GAAW9tC,EAAAA,EAAAA,IAAUtB,EAAMtgB,KACjC,OAAI4wB,EAAUrL,MAAM3d,GAAMA,IAAM8nD,GAAYP,GAASvnD,KAAO8nD,IACnDvoD,EAAGmZ,QADZ,CAEA,EACA,EAGEqvC,IAAkCxhD,EAAAA,EAAAA,IAAO,CAAEk7B,cAAauU,GAC9D,IAAIrmB,GACAq4B,IAAmB,EACvB,SAASC,KACP,OAAOt4B,KAAaA,IAAW4W,EAAAA,EAAAA,IAAewhB,IAChD,CACA,SAASG,KAGP,OAFAv4B,GAAWq4B,GAAmBr4B,IAAW8W,EAAAA,EAAAA,IAAwBshB,IACjEC,IAAmB,EACZr4B,EACT,CACA,MAAM/S,GAASA,IAAIrT,KACjB0+C,KAAiBrrC,UAAUrT,EAAK,EAE5BkY,GAAUA,IAAIlY,KAClB2+C,KAA0BzmC,WAAWlY,EAAK,EAEtCgkC,GAAYA,IAAIhkC,KACpB,MAAM0xB,EAAMgtB,KAAiB1a,aAAahkC,GAK1C,MAAM,MAAEmzB,GAAUzB,EAiBlB,OAhBAA,EAAIyB,MAASyrB,IACX,MAAMpnC,EAAYqnC,GAAmBD,GACrC,IAAKpnC,EACH,OACF,MAAM5N,EAAY8nB,EAAIc,YACjBxrB,EAAAA,EAAAA,IAAW4C,IAAeA,EAAUyJ,QAAWzJ,EAAU9U,WAC5D8U,EAAU9U,SAAW0iB,EAAU2iB,WAEjC3iB,EAAU2iB,UAAY,GACtB,MAAMx0B,EAAQwtB,EAAM3b,GAAW,EAAOsnC,GAAqBtnC,IAK3D,OAJIA,aAAqBiiC,UACvBjiC,EAAUo6B,gBAAgB,WAC1Bp6B,EAAU4uB,aAAa,aAAc,KAEhCzgC,CAAK,EAEP+rB,CAAG,EAENqtB,GAAeA,IAAI/+C,KACvB,MAAM0xB,EAAMitB,KAA0B3a,aAAahkC,GAKnD,MAAM,MAAEmzB,GAAUzB,EAOlB,OANAA,EAAIyB,MAASyrB,IACX,MAAMpnC,EAAYqnC,GAAmBD,GACrC,GAAIpnC,EACF,OAAO2b,EAAM3b,GAAW,EAAMsnC,GAAqBtnC,GACrD,EAEKka,CAAG,EAEZ,SAASotB,GAAqBtnC,GAC5B,OAAIA,aAAqB2kB,WAChB,MAEoB,oBAAlB4I,eAAgCvtB,aAAqButB,cACvD,cADT,CAGF,CAoCA,SAAS8Z,GAAmBrnC,GAC1B,IAAIlM,EAAAA,EAAAA,IAASkM,GAAY,CACvB,MAAMthB,EAAMxG,SAAS01C,cAAc5tB,GAMnC,OAAOthB,CACT,CAMA,OAAOshB,CACT,CACA,IAAIwnC,IAA0B,EAC9B,MAAMC,GAAuBA,KACtBD,KACHA,IAA0B,EAC1BrC,KACAxK,IACF,C;;;;;;;ACjlDF,SAAS3yC,EAAQ1V,EAAKo1D,GACpB,MAAMthD,EAAM,IAAI8B,IAAI5V,EAAIyL,MAAM,MAC9B,OAAO2pD,EAAoBn2C,GAAQnL,EAAIsD,IAAI6H,EAAI6I,eAAkB7I,GAAQnL,EAAIsD,IAAI6H,EACnF,CAEA,MAAM8G,EAA4E,CAAC,EAC7EwlB,EAA4E,GAC5Et4B,EAAOA,OAEP60B,EAAKA,KAAM,EACXjgB,EAAQ9iB,GAA8B,MAAtBA,EAAIzE,WAAW,IAAoC,MAAtByE,EAAIzE,WAAW,KACjEyE,EAAIzE,WAAW,GAAK,KAAOyE,EAAIzE,WAAW,GAAK,IAC1C0lB,EAAmBjhB,GAAQA,EAAIkhB,WAAW,aAC1C/S,EAAS1O,OAAO4D,OAChB4nB,EAASA,CAAC7Z,EAAK8V,KACnB,MAAM9rB,EAAIgW,EAAIiO,QAAQ6H,GAClB9rB,GAAK,GACPgW,EAAI6N,OAAO7jB,EAAG,EAChB,EAEI0E,EAAiBL,OAAO+F,UAAU1F,eAClCqS,EAASA,CAAC+H,EAAKla,IAAQF,EAAeiH,KAAKmT,EAAKla,GAChD9C,EAAUD,MAAMC,QAChBqT,EAAS2J,GAA8B,iBAAtBo2C,EAAap2C,GAC9BkW,EAASlW,GAA8B,iBAAtBo2C,EAAap2C,GAC9Bq2C,EAAUr2C,GAA8B,kBAAtBo2C,EAAap2C,GAC/B+e,EAAY/e,GAA8B,oBAAtBo2C,EAAap2C,GACjC/B,EAAc+B,GAAuB,oBAARA,EAC7BuC,EAAYvC,GAAuB,kBAARA,EAC3B7J,EAAY6J,GAAuB,kBAARA,EAC3BlS,EAAYkS,GAAgB,OAARA,GAA+B,kBAARA,EAC3C8C,EAAa9C,IACTlS,EAASkS,IAAQ/B,EAAW+B,KAAS/B,EAAW+B,EAAImE,OAASlG,EAAW+B,EAAI1X,OAEhFguD,EAAiB/wD,OAAO+F,UAAU8V,SAClCg1C,EAAgBlxD,GAAUoxD,EAAezpD,KAAK3H,GAC9CiX,EAAajX,GACVkxD,EAAalxD,GAAOmd,MAAM,GAAI,GAEjC8T,EAAiBnW,GAA8B,oBAAtBo2C,EAAap2C,GACtC5J,EAAgBtQ,GAAQyc,EAASzc,IAAgB,QAARA,GAA4B,MAAXA,EAAI,IAAc,GAAK6B,SAAS7B,EAAK,MAAQA,EACvGimC,EAAiCt1B,EAErC,uIAKI8/C,EAAuBtpD,IAC3B,MAAM+a,EAAwBziB,OAAOkG,OAAO,MAC5C,OAAQ1K,IACN,MAAMy1D,EAAMxuC,EAAMjnB,GAClB,OAAOy1D,IAAQxuC,EAAMjnB,GAAOkM,EAAGlM,GAAK,CACrC,EAEG01D,EAAa,SACbhvC,EAAW8uC,GAAqBx1D,GAC7BA,EAAI6D,QAAQ6xD,GAAY,CAACtqD,EAAG/K,IAAMA,EAAIA,EAAEwgD,cAAgB,OAE3D8U,EAAc,aACdhvC,EAAY6uC,GACfx1D,GAAQA,EAAI6D,QAAQ8xD,EAAa,OAAO7tC,gBAErCoF,EAAasoC,GAAqBx1D,GAC/BA,EAAIoD,OAAO,GAAGy9C,cAAgB7gD,EAAIshB,MAAM,KAE3CmF,EAAe+uC,GAAqBx1D,IACxC,MAAMmyB,EAAInyB,EAAM,KAAKktB,EAAWltB,KAAS,GACzC,OAAOmyB,CAAC,IAEJta,EAAaA,CAAC1T,EAAO2Q,KAActQ,OAAO2wC,GAAGhxC,EAAO2Q,GACpDkoB,EAAiBA,CAAC44B,EAAKlgC,KAC3B,IAAK,IAAIv1B,EAAI,EAAGA,EAAIy1D,EAAIx1D,OAAQD,IAC9By1D,EAAIz1D,GAAGu1B,EACT,EAEIvZ,EAAMA,CAACtQ,EAAK9G,EAAKZ,EAAO0xD,GAAW,KACvCrxD,OAAO69B,eAAex2B,EAAK9G,EAAK,CAC9BkhC,cAAc,EACdjC,YAAY,EACZ6xB,WACA1xD,SACA,EAEEmiB,EAAiBrH,IACrB,MAAMvQ,EAAIonD,WAAW72C,GACrB,OAAO82C,MAAMrnD,GAAKuQ,EAAMvQ,CAAC,EAErB0hB,EAAYnR,IAChB,MAAMvQ,EAAI8S,EAASvC,GAAO/J,OAAO+J,GAAO+2C,IACxC,OAAOD,MAAMrnD,GAAKuQ,EAAMvQ,CAAC,EAE3B,IAAIunD,EACJ,MAAMhjB,EAAgBA,IACbgjB,IAAgBA,EAAoC,qBAAfC,WAA6BA,WAA6B,qBAATjxD,KAAuBA,KAAyB,qBAAXC,OAAyBA,OAA2B,qBAAXC,EAAAA,EAAyBA,EAAAA,EAAS,CAAC,GAOhN,MAsFMgxD,EAAkB,iNAClB1zB,EAAoC/sB,EAAQygD,GA2ClD,SAASrkB,EAAe3tC,GACtB,GAAIlC,EAAQkC,GAAQ,CAClB,MAAMiI,EAAM,CAAC,EACb,IAAK,IAAIjM,EAAI,EAAGA,EAAIgE,EAAM/D,OAAQD,IAAK,CACrC,MAAMs/B,EAAOt7B,EAAMhE,GACbknB,EAAa7F,EAASie,GAAQ22B,EAAiB32B,GAAQqS,EAAerS,GAC5E,GAAIpY,EACF,IAAK,MAAMtiB,KAAOsiB,EAChBjb,EAAIrH,GAAOsiB,EAAWtiB,EAG5B,CACA,OAAOqH,CACT,CAAO,GAAIoV,EAASrd,IAAU4I,EAAS5I,GACrC,OAAOA,CAEX,CACA,MAAMkyD,EAAkB,gBAClBC,EAAsB,UACtBC,EAAiB,iBACvB,SAASH,EAAiBhN,GACxB,MAAMzqC,EAAM,CAAC,EAOb,OANAyqC,EAAQvlD,QAAQ0yD,EAAgB,IAAI9qD,MAAM4qD,GAAiBhpD,SAASoyB,IAClE,GAAIA,EAAM,CACR,MAAM+2B,EAAM/2B,EAAKh0B,MAAM6qD,GACvBE,EAAIp2D,OAAS,IAAMue,EAAI63C,EAAI,GAAGnwC,QAAUmwC,EAAI,GAAGnwC,OACjD,KAEK1H,CACT,CACA,SAASkzB,EAAe+U,GACtB,IAAIjoC,EAAM,GACV,IAAKioC,GAAUplC,EAASolC,GACtB,OAAOjoC,EAET,IAAK,MAAM5Z,KAAO6hD,EAAQ,CACxB,MAAMziD,EAAQyiD,EAAO7hD,GACrB,GAAIyc,EAASrd,IAA2B,kBAAVA,EAAoB,CAChD,MAAMqnC,EAAgBzmC,EAAIkhB,WAAW,MAAQlhB,EAAM4hB,EAAU5hB,GAC7D4Z,GAAO,GAAG6sB,KAAiBrnC,IAC7B,CACF,CACA,OAAOwa,CACT,CACA,SAAS+yB,EAAevtC,GACtB,IAAIiI,EAAM,GACV,GAAIoV,EAASrd,GACXiI,EAAMjI,OACD,GAAIlC,EAAQkC,GACjB,IAAK,IAAIhE,EAAI,EAAGA,EAAIgE,EAAM/D,OAAQD,IAAK,CACrC,MAAMknB,EAAaqqB,EAAevtC,EAAMhE,IACpCknB,IACFjb,GAAOib,EAAa,IAExB,MACK,GAAIta,EAAS5I,GAClB,IAAK,MAAMV,KAAQU,EACbA,EAAMV,KACR2I,GAAO3I,EAAO,KAIpB,OAAO2I,EAAIia,MACb,CACA,SAASowC,EAAer1C,GACtB,IAAKA,EACH,OAAO,KACT,IAAM20B,MAAO6H,EAAK,MAAE5H,GAAU50B,EAO9B,OANIw8B,IAAUp8B,EAASo8B,KACrBx8B,EAAM20B,MAAQrE,EAAekM,IAE3B5H,IACF50B,EAAM40B,MAAQlE,EAAekE,IAExB50B,CACT,CAEA,MASMs1C,GAAsB,8EACtBlM,GAAuC90C,EAAQghD,IAC/CnkB,GAAgC78B,EACpCghD,GAAsB,sJAExB,SAAShkB,GAAmBvuC,GAC1B,QAASA,GAAmB,KAAVA,CACpB,CAaA,MAMMquC,GAAkC98B,EACtC,0+BAEI48B,GAAiC58B,EACrC,ooFAEF,SAASi9B,GAAsBxuC,GAC7B,GAAa,MAATA,EACF,OAAO,EAET,MAAM2D,SAAc3D,EACpB,MAAgB,WAAT2D,GAA8B,WAATA,GAA8B,YAATA,CACnD,CA8CA,SAAS6uD,GAAmBrqD,EAAGC,GAC7B,GAAID,EAAElM,SAAWmM,EAAEnM,OACjB,OAAO,EACT,IAAIw2D,GAAQ,EACZ,IAAK,IAAIz2D,EAAI,EAAGy2D,GAASz2D,EAAImM,EAAElM,OAAQD,IACrCy2D,EAAQlF,GAAWplD,EAAEnM,GAAIoM,EAAEpM,IAE7B,OAAOy2D,CACT,CACA,SAASlF,GAAWplD,EAAGC,GACrB,GAAID,IAAMC,EACR,OAAO,EACT,IAAIsqD,EAAavB,EAAOhpD,GACpBwqD,EAAaxB,EAAO/oD,GACxB,GAAIsqD,GAAcC,EAChB,SAAOD,IAAcC,IAAaxqD,EAAE3H,YAAc4H,EAAE5H,UAItD,GAFAkyD,EAAazhD,EAAS9I,GACtBwqD,EAAa1hD,EAAS7I,GAClBsqD,GAAcC,EAChB,OAAOxqD,IAAMC,EAIf,GAFAsqD,EAAa50D,EAAQqK,GACrBwqD,EAAa70D,EAAQsK,GACjBsqD,GAAcC,EAChB,SAAOD,IAAcC,IAAaH,GAAmBrqD,EAAGC,GAI1D,GAFAsqD,EAAa9pD,EAAST,GACtBwqD,EAAa/pD,EAASR,GAClBsqD,GAAcC,EAAY,CAC5B,IAAKD,IAAeC,EAClB,OAAO,EAET,MAAMC,EAAavyD,OAAOiI,KAAKH,GAAGlM,OAC5B42D,EAAaxyD,OAAOiI,KAAKF,GAAGnM,OAClC,GAAI22D,IAAeC,EACjB,OAAO,EAET,IAAK,MAAMjyD,KAAOuH,EAAG,CACnB,MAAM2qD,EAAU3qD,EAAEzH,eAAeE,GAC3BmyD,EAAU3qD,EAAE1H,eAAeE,GACjC,GAAIkyD,IAAYC,IAAYD,GAAWC,IAAYxF,GAAWplD,EAAEvH,GAAMwH,EAAExH,IACtE,OAAO,CAEX,CACF,CACA,OAAOpE,OAAO2L,KAAO3L,OAAO4L,EAC9B,CACA,SAAS8kD,GAAal7C,EAAK8I,GACzB,OAAO9I,EAAI81B,WAAWxM,GAASiyB,GAAWjyB,EAAMxgB,IAClD,CAEA,MAAMk4C,GAAmBl4C,GAChBuC,EAASvC,GAAOA,EAAa,MAAPA,EAAc,GAAKhd,EAAQgd,IAAQlS,EAASkS,KAASA,EAAIoB,WAAak1C,IAAmBr4C,EAAW+B,EAAIoB,WAAa5a,KAAKoD,UAAUoW,EAAKm4C,GAAU,GAAKz2D,OAAOse,GAExLm4C,GAAWA,CAACr4C,EAAME,IAClBA,GAAOA,EAAIzC,UACN46C,GAASr4C,EAAME,EAAI9a,OACjBmR,EAAM2J,GACR,CACL,CAAC,OAAOA,EAAIpM,SAAU,IAAIoM,EAAI7R,WAAWq2B,QACvC,CAACr2B,GAAUrI,EAAKsyD,GAAOl3D,KACrBiN,EAAQkqD,GAAgBvyD,EAAK5E,GAAK,OAASk3D,EACpCjqD,IAET,CAAC,IAGI+nB,EAAMlW,GACR,CACL,CAAC,OAAOA,EAAIpM,SAAU,IAAIoM,EAAIjK,UAAU/I,KAAKgG,GAAMqlD,GAAgBrlD,MAE5DmD,EAAS6J,GACXq4C,GAAgBr4C,IACdlS,EAASkS,IAAShd,EAAQgd,IAASmW,EAAcnW,GAGrDA,EAFEte,OAAOse,GAIZq4C,GAAkBA,CAACrlD,EAAG9R,EAAI,MAC9B,IAAIiG,EACJ,OAGEgP,EAASnD,GAAK,UAAkC,OAAvB7L,EAAK6L,EAAEslD,aAAuBnxD,EAAKjG,KAAO8R,CAAC,C,wyCC5e7Dk+C,EAAM,MACNqH,EAAS,SACT5D,EAAQ,QACR3D,EAAO,OACPwH,EAAO,OACPC,EAAiB,CAACvH,EAAKqH,EAAQ5D,EAAO3D,GACtC1sC,EAAQ,QACRC,EAAM,MACNm0C,EAAkB,kBAClBC,EAAW,WACXC,EAAS,SACTC,EAAY,YACZC,EAAmCL,EAAej0B,QAAO,SAAUu0B,EAAKC,GACjF,OAAOD,EAAIttC,OAAO,CAACutC,EAAY,IAAM10C,EAAO00C,EAAY,IAAMz0C,GAChE,GAAG,IACQ00C,EAA0B,GAAGxtC,OAAOgtC,EAAgB,CAACD,IAAOh0B,QAAO,SAAUu0B,EAAKC,GAC3F,OAAOD,EAAIttC,OAAO,CAACutC,EAAWA,EAAY,IAAM10C,EAAO00C,EAAY,IAAMz0C,GAC3E,GAAG,IAEQ20C,EAAa,aACbC,EAAO,OACPC,EAAY,YAEZC,EAAa,aACbC,EAAO,OACPC,EAAY,YAEZC,EAAc,cACdC,EAAQ,QACRC,EAAa,aACbC,EAAiB,CAACT,EAAYC,EAAMC,EAAWC,EAAYC,EAAMC,EAAWC,EAAaC,EAAOC,GC9B5F,SAASE,EAAYC,GAClC,OAAOA,GAAWA,EAAQC,UAAY,IAAIjxC,cAAgB,IAC5D,CCFe,SAASkxC,EAAUlnC,GAChC,GAAY,MAARA,EACF,OAAO5sB,OAGT,GAAwB,oBAApB4sB,EAAKzR,WAAkC,CACzC,IAAI44C,EAAgBnnC,EAAKmnC,cACzB,OAAOA,GAAgBA,EAAcC,aAAwBh0D,MAC/D,CAEA,OAAO4sB,CACT,CCTA,SAASqnC,EAAUrnC,GACjB,IAAIsnC,EAAaJ,EAAUlnC,GAAM69B,QACjC,OAAO79B,aAAgBsnC,GAActnC,aAAgB69B,OACvD,CAEA,SAAS0J,EAAcvnC,GACrB,IAAIsnC,EAAaJ,EAAUlnC,GAAMvM,YACjC,OAAOuM,aAAgBsnC,GAActnC,aAAgBvM,WACvD,CAEA,SAAS+zC,EAAaxnC,GAEpB,GAA0B,qBAAfynC,WACT,OAAO,EAGT,IAAIH,EAAaJ,EAAUlnC,GAAMynC,WACjC,OAAOznC,aAAgBsnC,GAActnC,aAAgBynC,UACvD,CChBA,SAASC,EAAYC,GACnB,IAAIrjC,EAAQqjC,EAAKrjC,MACjB5xB,OAAOiI,KAAK2pB,EAAMsjC,UAAUrsD,SAAQ,SAAU5J,GAC5C,IAAIuyC,EAAQ5f,EAAMwwB,OAAOnjD,IAAS,CAAC,EAC/B8pD,EAAan3B,EAAMm3B,WAAW9pD,IAAS,CAAC,EACxCq1D,EAAU1iC,EAAMsjC,SAASj2D,GAExB41D,EAAcP,IAAaD,EAAYC,KAO5Ct0D,OAAO4D,OAAO0wD,EAAQ9iB,MAAOA,GAC7BxxC,OAAOiI,KAAK8gD,GAAYlgD,SAAQ,SAAU5J,GACxC,IAAIU,EAAQopD,EAAW9pD,IAET,IAAVU,EACF20D,EAAQhR,gBAAgBrkD,GAExBq1D,EAAQxc,aAAa74C,GAAgB,IAAVU,EAAiB,GAAKA,EAErD,IACF,GACF,CAEA,SAAS2M,EAAO6oD,GACd,IAAIvjC,EAAQujC,EAAMvjC,MACdwjC,EAAgB,CAClB/B,OAAQ,CACNgC,SAAUzjC,EAAMrjB,QAAQ+mD,SACxB7J,KAAM,IACNE,IAAK,IACL4J,OAAQ,KAEVC,MAAO,CACLH,SAAU,YAEZ/B,UAAW,CAAC,GASd,OAPAtzD,OAAO4D,OAAOguB,EAAMsjC,SAAS7B,OAAO7hB,MAAO4jB,EAAc/B,QACzDzhC,EAAMwwB,OAASgT,EAEXxjC,EAAMsjC,SAASM,OACjBx1D,OAAO4D,OAAOguB,EAAMsjC,SAASM,MAAMhkB,MAAO4jB,EAAcI,OAGnD,WACLx1D,OAAOiI,KAAK2pB,EAAMsjC,UAAUrsD,SAAQ,SAAU5J,GAC5C,IAAIq1D,EAAU1iC,EAAMsjC,SAASj2D,GACzB8pD,EAAan3B,EAAMm3B,WAAW9pD,IAAS,CAAC,EACxCw2D,EAAkBz1D,OAAOiI,KAAK2pB,EAAMwwB,OAAO/hD,eAAepB,GAAQ2yB,EAAMwwB,OAAOnjD,GAAQm2D,EAAcn2D,IAErGuyC,EAAQikB,EAAgBx2B,QAAO,SAAUuS,EAAOkkB,GAElD,OADAlkB,EAAMkkB,GAAY,GACXlkB,CACT,GAAG,CAAC,GAECqjB,EAAcP,IAAaD,EAAYC,KAI5Ct0D,OAAO4D,OAAO0wD,EAAQ9iB,MAAOA,GAC7BxxC,OAAOiI,KAAK8gD,GAAYlgD,SAAQ,SAAU8sD,GACxCrB,EAAQhR,gBAAgBqS,EAC1B,IACF,GACF,CACF,CAGA,OACE12D,KAAM,cACN2hB,SAAS,EACTg1C,MAAO,QACPluD,GAAIstD,EACJ1oD,OAAQA,EACRupD,SAAU,CAAC,kBCjFE,SAASC,EAAiBrC,GACvC,OAAOA,EAAUxsD,MAAM,KAAK,EAC9B,CCHO,IAAI2wB,EAAM2b,KAAK3b,IACX4b,EAAMD,KAAKC,IACXuiB,EAAQxiB,KAAKwiB,MCFT,SAASC,IACtB,IAAIC,EAAS1xD,UAAU2xD,cAEvB,OAAc,MAAVD,GAAkBA,EAAOE,QAAU34D,MAAMC,QAAQw4D,EAAOE,QACnDF,EAAOE,OAAO1uD,KAAI,SAAUwzB,GACjC,OAAOA,EAAKm7B,MAAQ,IAAMn7B,EAAKsJ,OACjC,IAAG9nC,KAAK,KAGH8H,UAAUyc,SACnB,CCTe,SAASq1C,IACtB,OAAQ,iCAAiC5xD,KAAKuxD,IAChD,CCCe,SAAS5K,EAAsBkJ,EAASgC,EAAcC,QAC9C,IAAjBD,IACFA,GAAe,QAGO,IAApBC,IACFA,GAAkB,GAGpB,IAAIC,EAAalC,EAAQlJ,wBACrBqL,EAAS,EACTC,EAAS,EAETJ,GAAgBzB,EAAcP,KAChCmC,EAASnC,EAAQqC,YAAc,GAAIZ,EAAMS,EAAWI,OAAStC,EAAQqC,aAAmB,EACxFD,EAASpC,EAAQpR,aAAe,GAAI6S,EAAMS,EAAWK,QAAUvC,EAAQpR,cAAoB,GAG7F,IAAI+R,EAAON,EAAUL,GAAWE,EAAUF,GAAW5zD,OACjDo2D,EAAiB7B,EAAK6B,eAEtBC,GAAoBV,KAAsBE,EAC1CS,GAAKR,EAAW/K,MAAQsL,GAAoBD,EAAiBA,EAAeG,WAAa,IAAMR,EAC/FS,GAAKV,EAAW7K,KAAOoL,GAAoBD,EAAiBA,EAAeK,UAAY,IAAMT,EAC7FE,EAAQJ,EAAWI,MAAQH,EAC3BI,EAASL,EAAWK,OAASH,EACjC,MAAO,CACLE,MAAOA,EACPC,OAAQA,EACRlL,IAAKuL,EACL9H,MAAO4H,EAAIJ,EACX5D,OAAQkE,EAAIL,EACZpL,KAAMuL,EACNA,EAAGA,EACHE,EAAGA,EAEP,CCrCe,SAASE,EAAc9C,GACpC,IAAIkC,EAAapL,EAAsBkJ,GAGnCsC,EAAQtC,EAAQqC,YAChBE,EAASvC,EAAQpR,aAUrB,OARI3P,KAAK8jB,IAAIb,EAAWI,MAAQA,IAAU,IACxCA,EAAQJ,EAAWI,OAGjBrjB,KAAK8jB,IAAIb,EAAWK,OAASA,IAAW,IAC1CA,EAASL,EAAWK,QAGf,CACLG,EAAG1C,EAAQ2C,WACXC,EAAG5C,EAAQ6C,UACXP,MAAOA,EACPC,OAAQA,EAEZ,CCvBe,SAASzvD,EAASmE,EAAQib,GACvC,IAAI8wC,EAAW9wC,EAAM+wC,aAAe/wC,EAAM+wC,cAE1C,GAAIhsD,EAAOnE,SAASof,GAClB,OAAO,EAEJ,GAAI8wC,GAAYxC,EAAawC,GAAW,CACzC,IAAIjiD,EAAOmR,EAEX,EAAG,CACD,GAAInR,GAAQ9J,EAAOisD,WAAWniD,GAC5B,OAAO,EAITA,EAAOA,EAAKkW,YAAclW,EAAKrT,IACjC,OAASqT,EACX,CAGF,OAAO,CACT,CCrBe,SAASgtC,EAAiBiS,GACvC,OAAOE,EAAUF,GAASjS,iBAAiBiS,EAC7C,CCFe,SAASmD,EAAenD,GACrC,MAAO,CAAC,QAAS,KAAM,MAAM10C,QAAQy0C,EAAYC,KAAa,CAChE,CCFe,SAASoD,EAAmBpD,GAEzC,QAASK,EAAUL,GAAWA,EAAQG,cACtCH,EAAQlzD,WAAaV,OAAOU,UAAUu2D,eACxC,CCFe,SAASC,EAActD,GACpC,MAA6B,SAAzBD,EAAYC,GACPA,EAMPA,EAAQuD,cACRvD,EAAQ/oC,aACRupC,EAAaR,GAAWA,EAAQtyD,KAAO,OAEvC01D,EAAmBpD,EAGvB,CCVA,SAASwD,EAAoBxD,GAC3B,OAAKO,EAAcP,IACoB,UAAvCjS,EAAiBiS,GAASe,SAInBf,EAAQyD,aAHN,IAIX,CAIA,SAASC,EAAmB1D,GAC1B,IAAI2D,EAAY,WAAWxzD,KAAKuxD,KAC5BkC,EAAO,WAAWzzD,KAAKuxD,KAE3B,GAAIkC,GAAQrD,EAAcP,GAAU,CAElC,IAAI6D,EAAa9V,EAAiBiS,GAElC,GAA4B,UAAxB6D,EAAW9C,SACb,OAAO,IAEX,CAEA,IAAI+C,EAAcR,EAActD,GAE5BQ,EAAasD,KACfA,EAAcA,EAAYp2D,MAG5B,MAAO6yD,EAAcuD,IAAgB,CAAC,OAAQ,QAAQx4C,QAAQy0C,EAAY+D,IAAgB,EAAG,CAC3F,IAAI9Y,EAAM+C,EAAiB+V,GAI3B,GAAsB,SAAlB9Y,EAAIwL,WAA4C,SAApBxL,EAAI+Y,aAA0C,UAAhB/Y,EAAIgZ,UAAiF,IAA1D,CAAC,YAAa,eAAe14C,QAAQ0/B,EAAIiZ,aAAsBN,GAAgC,WAAnB3Y,EAAIiZ,YAA2BN,GAAa3Y,EAAIhuC,QAAyB,SAAfguC,EAAIhuC,OACjO,OAAO8mD,EAEPA,EAAcA,EAAY7sC,UAE9B,CAEA,OAAO,IACT,CAIe,SAASitC,EAAgBlE,GACtC,IAAI5zD,EAAS8zD,EAAUF,GACnByD,EAAeD,EAAoBxD,GAEvC,MAAOyD,GAAgBN,EAAeM,IAA6D,WAA5C1V,EAAiB0V,GAAc1C,SACpF0C,EAAeD,EAAoBC,GAGrC,OAAIA,IAA+C,SAA9B1D,EAAY0D,IAA0D,SAA9B1D,EAAY0D,IAAwE,WAA5C1V,EAAiB0V,GAAc1C,UAC3H30D,EAGFq3D,GAAgBC,EAAmB1D,IAAY5zD,CACxD,CCpEe,SAAS+3D,EAAyBhF,GAC/C,MAAO,CAAC,MAAO,UAAU7zC,QAAQ6zC,IAAc,EAAI,IAAM,GAC3D,CCDO,SAASiF,EAAOllB,EAAK7zC,EAAOi4B,GACjC,OAAO+gC,EAAQnlB,EAAKolB,EAAQj5D,EAAOi4B,GACrC,CACO,SAASihC,GAAerlB,EAAK7zC,EAAOi4B,GACzC,IAAInqB,EAAIirD,EAAOllB,EAAK7zC,EAAOi4B,GAC3B,OAAOnqB,EAAImqB,EAAMA,EAAMnqB,CACzB,CCPe,SAASqrD,KACtB,MAAO,CACLnN,IAAK,EACLyD,MAAO,EACP4D,OAAQ,EACRvH,KAAM,EAEV,CCNe,SAASsN,GAAmBC,GACzC,OAAOh5D,OAAO4D,OAAO,CAAC,EAAGk1D,KAAsBE,EACjD,CCHe,SAASC,GAAgBt5D,EAAOsI,GAC7C,OAAOA,EAAKg3B,QAAO,SAAUi6B,EAAS34D,GAEpC,OADA24D,EAAQ34D,GAAOZ,EACRu5D,CACT,GAAG,CAAC,EACN,CCKA,IAAIC,GAAkB,SAAyBC,EAASxnC,GAItD,OAHAwnC,EAA6B,oBAAZA,EAAyBA,EAAQp5D,OAAO4D,OAAO,CAAC,EAAGguB,EAAMynC,MAAO,CAC/E5F,UAAW7hC,EAAM6hC,aACb2F,EACCL,GAAsC,kBAAZK,EAAuBA,EAAUH,GAAgBG,EAASlG,GAC7F,EAEA,SAASsC,GAAMP,GACb,IAAIqE,EAEA1nC,EAAQqjC,EAAKrjC,MACb3yB,EAAOg2D,EAAKh2D,KACZsP,EAAU0mD,EAAK1mD,QACfgrD,EAAe3nC,EAAMsjC,SAASM,MAC9BgE,EAAgB5nC,EAAM6nC,cAAcD,cACpCE,EAAgB5D,EAAiBlkC,EAAM6hC,WACvCkG,EAAOlB,EAAyBiB,GAChCE,EAAa,CAACnO,EAAM2D,GAAOxvC,QAAQ85C,IAAkB,EACrD1jB,EAAM4jB,EAAa,SAAW,QAElC,GAAKL,GAAiBC,EAAtB,CAIA,IAAIR,EAAgBG,GAAgB5qD,EAAQ6qD,QAASxnC,GACjDioC,EAAYzC,EAAcmC,GAC1BO,EAAmB,MAATH,EAAehO,EAAMF,EAC/BsO,EAAmB,MAATJ,EAAe3G,EAAS5D,EAClC4K,EAAUpoC,EAAMynC,MAAM/F,UAAUtd,GAAOpkB,EAAMynC,MAAM/F,UAAUqG,GAAQH,EAAcG,GAAQ/nC,EAAMynC,MAAMhG,OAAOrd,GAC9GikB,EAAYT,EAAcG,GAAQ/nC,EAAMynC,MAAM/F,UAAUqG,GACxDO,EAAoB1B,EAAgBe,GACpCY,EAAaD,EAA6B,MAATP,EAAeO,EAAkBE,cAAgB,EAAIF,EAAkBG,aAAe,EAAI,EAC3HC,EAAoBN,EAAU,EAAIC,EAAY,EAG9CzmB,EAAMwlB,EAAcc,GACpBliC,EAAMuiC,EAAaN,EAAU7jB,GAAOgjB,EAAce,GAClDQ,EAASJ,EAAa,EAAIN,EAAU7jB,GAAO,EAAIskB,EAC/C3wD,EAAS+uD,EAAOllB,EAAK+mB,EAAQ3iC,GAE7B4iC,EAAWb,EACf/nC,EAAM6nC,cAAcx6D,IAASq6D,EAAwB,CAAC,EAAGA,EAAsBkB,GAAY7wD,EAAQ2vD,EAAsBmB,aAAe9wD,EAAS4wD,EAAQjB,EAnBzJ,CAoBF,CAEA,SAAShtD,GAAO6oD,GACd,IAAIvjC,EAAQujC,EAAMvjC,MACdrjB,EAAU4mD,EAAM5mD,QAChBmsD,EAAmBnsD,EAAQ+lD,QAC3BiF,OAAoC,IAArBmB,EAA8B,sBAAwBA,EAErD,MAAhBnB,IAKwB,kBAAjBA,IACTA,EAAe3nC,EAAMsjC,SAAS7B,OAAOvc,cAAcyiB,GAE9CA,KAKFnyD,EAASwqB,EAAMsjC,SAAS7B,OAAQkG,KAIrC3nC,EAAMsjC,SAASM,MAAQ+D,EACzB,CAGA,QACEt6D,KAAM,QACN2hB,SAAS,EACTg1C,MAAO,OACPluD,GAAI8tD,GACJlpD,OAAQA,GACRupD,SAAU,CAAC,iBACX8E,iBAAkB,CAAC,oBCxFN,SAASC,GAAanH,GACnC,OAAOA,EAAUxsD,MAAM,KAAK,EAC9B,CCOA,IAAI4zD,GAAa,CACflP,IAAK,OACLyD,MAAO,OACP4D,OAAQ,OACRvH,KAAM,QAKR,SAASqP,GAAkB7F,EAAM8F,GAC/B,IAAI/D,EAAI/B,EAAK+B,EACTE,EAAIjC,EAAKiC,EACT8D,EAAMD,EAAIE,kBAAoB,EAClC,MAAO,CACLjE,EAAGjB,EAAMiB,EAAIgE,GAAOA,GAAO,EAC3B9D,EAAGnB,EAAMmB,EAAI8D,GAAOA,GAAO,EAE/B,CAEO,SAASE,GAAY/F,GAC1B,IAAIgG,EAEA9H,EAAS8B,EAAM9B,OACf+H,EAAajG,EAAMiG,WACnB3H,EAAY0B,EAAM1B,UAClB4H,EAAYlG,EAAMkG,UAClBC,EAAUnG,EAAMmG,QAChBjG,EAAWF,EAAME,SACjBkG,EAAkBpG,EAAMoG,gBACxBC,EAAWrG,EAAMqG,SACjBC,EAAetG,EAAMsG,aACrBC,EAAUvG,EAAMuG,QAChBC,EAAaL,EAAQtE,EACrBA,OAAmB,IAAf2E,EAAwB,EAAIA,EAChCC,EAAaN,EAAQpE,EACrBA,OAAmB,IAAf0E,EAAwB,EAAIA,EAEhCC,EAAgC,oBAAjBJ,EAA8BA,EAAa,CAC5DzE,EAAGA,EACHE,EAAGA,IACA,CACHF,EAAGA,EACHE,EAAGA,GAGLF,EAAI6E,EAAM7E,EACVE,EAAI2E,EAAM3E,EACV,IAAI4E,EAAOR,EAAQj7D,eAAe,KAC9B07D,EAAOT,EAAQj7D,eAAe,KAC9B27D,EAAQvQ,EACRwQ,EAAQtQ,EACRoP,EAAMr6D,OAEV,GAAI86D,EAAU,CACZ,IAAIzD,EAAeS,EAAgBnF,GAC/B6I,EAAa,eACbC,EAAY,cAchB,GAZIpE,IAAiBvD,EAAUnB,KAC7B0E,EAAeL,EAAmBrE,GAEc,WAA5ChR,EAAiB0V,GAAc1C,UAAsC,aAAbA,IAC1D6G,EAAa,eACbC,EAAY,gBAOZ1I,IAAc9H,IAAQ8H,IAAchI,GAAQgI,IAAcrE,IAAUiM,IAAcr8C,EAAK,CACzFi9C,EAAQjJ,EACR,IAAIoJ,EAAUV,GAAW3D,IAAiBgD,GAAOA,EAAIjE,eAAiBiE,EAAIjE,eAAeD,OACzFkB,EAAamE,GACbhF,GAAKkF,EAAUhB,EAAWvE,OAC1BK,GAAKqE,EAAkB,GAAK,CAC9B,CAEA,GAAI9H,IAAchI,IAASgI,IAAc9H,GAAO8H,IAAcT,IAAWqI,IAAcr8C,EAAK,CAC1Fg9C,EAAQ5M,EACR,IAAIiN,EAAUX,GAAW3D,IAAiBgD,GAAOA,EAAIjE,eAAiBiE,EAAIjE,eAAeF,MACzFmB,EAAaoE,GACbnF,GAAKqF,EAAUjB,EAAWxE,MAC1BI,GAAKuE,EAAkB,GAAK,CAC9B,CACF,CAEA,IAgBMe,EAhBFC,EAAev8D,OAAO4D,OAAO,CAC/ByxD,SAAUA,GACTmG,GAAYX,IAEX2B,GAAyB,IAAjBf,EAAwBX,GAAkB,CACpD9D,EAAGA,EACHE,EAAGA,GACF1C,EAAUnB,IAAW,CACtB2D,EAAGA,EACHE,EAAGA,GAML,OAHAF,EAAIwF,EAAMxF,EACVE,EAAIsF,EAAMtF,EAENqE,EAGKv7D,OAAO4D,OAAO,CAAC,EAAG24D,GAAeD,EAAiB,CAAC,EAAGA,EAAeL,GAASF,EAAO,IAAM,GAAIO,EAAeN,GAASF,EAAO,IAAM,GAAIQ,EAAexR,WAAaiQ,EAAIE,kBAAoB,IAAM,EAAI,aAAejE,EAAI,OAASE,EAAI,MAAQ,eAAiBF,EAAI,OAASE,EAAI,SAAUoF,IAG5Rt8D,OAAO4D,OAAO,CAAC,EAAG24D,GAAepB,EAAkB,CAAC,EAAGA,EAAgBc,GAASF,EAAO7E,EAAI,KAAO,GAAIiE,EAAgBa,GAASF,EAAO9E,EAAI,KAAO,GAAImE,EAAgBrQ,UAAY,GAAIqQ,GAC9L,CAEA,SAASsB,GAAcC,GACrB,IAAI9qC,EAAQ8qC,EAAM9qC,MACdrjB,EAAUmuD,EAAMnuD,QAChBouD,EAAwBpuD,EAAQgtD,gBAChCA,OAA4C,IAA1BoB,GAA0CA,EAC5DC,EAAoBruD,EAAQitD,SAC5BA,OAAiC,IAAtBoB,GAAsCA,EACjDC,EAAwBtuD,EAAQktD,aAChCA,OAAyC,IAA1BoB,GAA0CA,EACzDN,EAAe,CACjB9I,UAAWqC,EAAiBlkC,EAAM6hC,WAClC4H,UAAWT,GAAahpC,EAAM6hC,WAC9BJ,OAAQzhC,EAAMsjC,SAAS7B,OACvB+H,WAAYxpC,EAAMynC,MAAMhG,OACxBkI,gBAAiBA,EACjBG,QAAoC,UAA3B9pC,EAAMrjB,QAAQ+mD,UAGgB,MAArC1jC,EAAM6nC,cAAcD,gBACtB5nC,EAAMwwB,OAAOiR,OAASrzD,OAAO4D,OAAO,CAAC,EAAGguB,EAAMwwB,OAAOiR,OAAQ6H,GAAYl7D,OAAO4D,OAAO,CAAC,EAAG24D,EAAc,CACvGjB,QAAS1pC,EAAM6nC,cAAcD,cAC7BnE,SAAUzjC,EAAMrjB,QAAQ+mD,SACxBkG,SAAUA,EACVC,aAAcA,OAIe,MAA7B7pC,EAAM6nC,cAAcjE,QACtB5jC,EAAMwwB,OAAOoT,MAAQx1D,OAAO4D,OAAO,CAAC,EAAGguB,EAAMwwB,OAAOoT,MAAO0F,GAAYl7D,OAAO4D,OAAO,CAAC,EAAG24D,EAAc,CACrGjB,QAAS1pC,EAAM6nC,cAAcjE,MAC7BH,SAAU,WACVmG,UAAU,EACVC,aAAcA,OAIlB7pC,EAAMm3B,WAAWsK,OAASrzD,OAAO4D,OAAO,CAAC,EAAGguB,EAAMm3B,WAAWsK,OAAQ,CACnE,wBAAyBzhC,EAAM6hC,WAEnC,CAGA,QACEx0D,KAAM,gBACN2hB,SAAS,EACTg1C,MAAO,cACPluD,GAAI+0D,GACJn2D,KAAM,CAAC,GCrKLw2D,GAAU,CACZA,SAAS,GAGX,SAASxwD,GAAO2oD,GACd,IAAIrjC,EAAQqjC,EAAKrjC,MACbvW,EAAW45C,EAAK55C,SAChB9M,EAAU0mD,EAAK1mD,QACfwuD,EAAkBxuD,EAAQyuD,OAC1BA,OAA6B,IAApBD,GAAoCA,EAC7CE,EAAkB1uD,EAAQ2uD,OAC1BA,OAA6B,IAApBD,GAAoCA,EAC7Cv8D,EAAS8zD,EAAU5iC,EAAMsjC,SAAS7B,QAClC8J,EAAgB,GAAGj3C,OAAO0L,EAAMurC,cAAc7J,UAAW1hC,EAAMurC,cAAc9J,QAYjF,OAVI2J,GACFG,EAAct0D,SAAQ,SAAUu0D,GAC9BA,EAAajb,iBAAiB,SAAU9mC,EAASrR,OAAQ8yD,GAC3D,IAGEI,GACFx8D,EAAOyhD,iBAAiB,SAAU9mC,EAASrR,OAAQ8yD,IAG9C,WACDE,GACFG,EAAct0D,SAAQ,SAAUu0D,GAC9BA,EAAanb,oBAAoB,SAAU5mC,EAASrR,OAAQ8yD,GAC9D,IAGEI,GACFx8D,EAAOuhD,oBAAoB,SAAU5mC,EAASrR,OAAQ8yD,GAE1D,CACF,CAGA,QACE79D,KAAM,iBACN2hB,SAAS,EACTg1C,MAAO,QACPluD,GAAI,WAAe,EACnB4E,OAAQA,GACRhG,KAAM,CAAC,GC/CL+2D,GAAO,CACT5R,KAAM,QACN2D,MAAO,OACP4D,OAAQ,MACRrH,IAAK,UAEQ,SAAS2R,GAAqB7J,GAC3C,OAAOA,EAAUp0D,QAAQ,0BAA0B,SAAUk+D,GAC3D,OAAOF,GAAKE,EACd,GACF,CCVA,IAAIF,GAAO,CACTt+C,MAAO,MACPC,IAAK,SAEQ,SAASw+C,GAA8B/J,GACpD,OAAOA,EAAUp0D,QAAQ,cAAc,SAAUk+D,GAC/C,OAAOF,GAAKE,EACd,GACF,CCPe,SAASE,GAAgBnwC,GACtC,IAAIytC,EAAMvG,EAAUlnC,GAChBowC,EAAa3C,EAAI4C,YACjBC,EAAY7C,EAAI8C,YACpB,MAAO,CACLH,WAAYA,EACZE,UAAWA,EAEf,CCNe,SAASE,GAAoBxJ,GAQ1C,OAAOlJ,EAAsBsM,EAAmBpD,IAAU7I,KAAOgS,GAAgBnJ,GAASoJ,UAC5F,CCRe,SAASK,GAAgBzJ,EAASgB,GAC/C,IAAIyF,EAAMvG,EAAUF,GAChB0J,EAAOtG,EAAmBpD,GAC1BwC,EAAiBiE,EAAIjE,eACrBF,EAAQoH,EAAK3D,YACbxD,EAASmH,EAAK5D,aACdpD,EAAI,EACJE,EAAI,EAER,GAAIJ,EAAgB,CAClBF,EAAQE,EAAeF,MACvBC,EAASC,EAAeD,OACxB,IAAIoH,EAAiB5H,KAEjB4H,IAAmBA,GAA+B,UAAb3I,KACvC0B,EAAIF,EAAeG,WACnBC,EAAIJ,EAAeK,UAEvB,CAEA,MAAO,CACLP,MAAOA,EACPC,OAAQA,EACRG,EAAGA,EAAI8G,GAAoBxJ,GAC3B4C,EAAGA,EAEP,CCvBe,SAASgH,GAAgB5J,GACtC,IAAI6J,EAEAH,EAAOtG,EAAmBpD,GAC1B8J,EAAYX,GAAgBnJ,GAC5BrR,EAA0D,OAAlDkb,EAAwB7J,EAAQG,oBAAyB,EAAS0J,EAAsBlb,KAChG2T,EAAQh/B,EAAIomC,EAAKK,YAAaL,EAAK3D,YAAapX,EAAOA,EAAKob,YAAc,EAAGpb,EAAOA,EAAKoX,YAAc,GACvGxD,EAASj/B,EAAIomC,EAAKM,aAAcN,EAAK5D,aAAcnX,EAAOA,EAAKqb,aAAe,EAAGrb,EAAOA,EAAKmX,aAAe,GAC5GpD,GAAKoH,EAAUV,WAAaI,GAAoBxJ,GAChD4C,GAAKkH,EAAUR,UAMnB,MAJiD,QAA7Cvb,EAAiBY,GAAQ+a,GAAMO,YACjCvH,GAAKp/B,EAAIomC,EAAK3D,YAAapX,EAAOA,EAAKoX,YAAc,GAAKzD,GAGrD,CACLA,MAAOA,EACPC,OAAQA,EACRG,EAAGA,EACHE,EAAGA,EAEP,CC3Be,SAASsH,GAAelK,GAErC,IAAImK,EAAoBpc,EAAiBiS,GACrCoK,EAAWD,EAAkBC,SAC7BC,EAAYF,EAAkBE,UAC9BC,EAAYH,EAAkBG,UAElC,MAAO,6BAA6Bn6D,KAAKi6D,EAAWE,EAAYD,EAClE,CCLe,SAASE,GAAgBvxC,GACtC,MAAI,CAAC,OAAQ,OAAQ,aAAa1N,QAAQy0C,EAAY/mC,KAAU,EAEvDA,EAAKmnC,cAAcxR,KAGxB4R,EAAcvnC,IAASkxC,GAAelxC,GACjCA,EAGFuxC,GAAgBjH,EAActqC,GACvC,CCJe,SAASwxC,GAAkBxK,EAASyK,GACjD,IAAIZ,OAES,IAATY,IACFA,EAAO,IAGT,IAAI3B,EAAeyB,GAAgBvK,GAC/B0K,EAAS5B,KAAqE,OAAlDe,EAAwB7J,EAAQG,oBAAyB,EAAS0J,EAAsBlb,MACpH8X,EAAMvG,EAAU4I,GAChBt9D,EAASk/D,EAAS,CAACjE,GAAK70C,OAAO60C,EAAIjE,gBAAkB,GAAI0H,GAAepB,GAAgBA,EAAe,IAAMA,EAC7G6B,EAAcF,EAAK74C,OAAOpmB,GAC9B,OAAOk/D,EAASC,EAChBA,EAAY/4C,OAAO44C,GAAkBlH,EAAc93D,IACrD,CCzBe,SAASo/D,GAAiBC,GACvC,OAAOn/D,OAAO4D,OAAO,CAAC,EAAGu7D,EAAM,CAC7B1T,KAAM0T,EAAKnI,EACXrL,IAAKwT,EAAKjI,EACV9H,MAAO+P,EAAKnI,EAAImI,EAAKvI,MACrB5D,OAAQmM,EAAKjI,EAAIiI,EAAKtI,QAE1B,CCQA,SAASuI,GAA2B9K,EAASgB,GAC3C,IAAI6J,EAAO/T,EAAsBkJ,GAAS,EAAoB,UAAbgB,GASjD,OARA6J,EAAKxT,IAAMwT,EAAKxT,IAAM2I,EAAQ+K,UAC9BF,EAAK1T,KAAO0T,EAAK1T,KAAO6I,EAAQgL,WAChCH,EAAKnM,OAASmM,EAAKxT,IAAM2I,EAAQ8F,aACjC+E,EAAK/P,MAAQ+P,EAAK1T,KAAO6I,EAAQ+F,YACjC8E,EAAKvI,MAAQtC,EAAQ+F,YACrB8E,EAAKtI,OAASvC,EAAQ8F,aACtB+E,EAAKnI,EAAImI,EAAK1T,KACd0T,EAAKjI,EAAIiI,EAAKxT,IACPwT,CACT,CAEA,SAASI,GAA2BjL,EAASkL,EAAgBlK,GAC3D,OAAOkK,IAAmBpM,EAAW8L,GAAiBnB,GAAgBzJ,EAASgB,IAAaX,EAAU6K,GAAkBJ,GAA2BI,EAAgBlK,GAAY4J,GAAiBhB,GAAgBxG,EAAmBpD,IACrO,CAKA,SAASmL,GAAmBnL,GAC1B,IAAInB,EAAkB2L,GAAkBlH,EAActD,IAClDoL,EAAoB,CAAC,WAAY,SAAS9/C,QAAQyiC,EAAiBiS,GAASe,WAAa,EACzFsK,EAAiBD,GAAqB7K,EAAcP,GAAWkE,EAAgBlE,GAAWA,EAE9F,OAAKK,EAAUgL,GAKRxM,EAAgB7hD,QAAO,SAAUkuD,GACtC,OAAO7K,EAAU6K,IAAmBp4D,EAASo4D,EAAgBG,IAAmD,SAAhCtL,EAAYmL,EAC9F,IANS,EAOX,CAIe,SAASI,GAAgBtL,EAASuL,EAAUC,EAAcxK,GACvE,IAAIyK,EAAmC,oBAAbF,EAAiCJ,GAAmBnL,GAAW,GAAGpuC,OAAO25C,GAC/F1M,EAAkB,GAAGjtC,OAAO65C,EAAqB,CAACD,IAClDE,EAAsB7M,EAAgB,GACtC8M,EAAe9M,EAAgBl0B,QAAO,SAAUihC,EAASV,GAC3D,IAAIL,EAAOI,GAA2BjL,EAASkL,EAAgBlK,GAK/D,OAJA4K,EAAQvU,IAAM/zB,EAAIunC,EAAKxT,IAAKuU,EAAQvU,KACpCuU,EAAQ9Q,MAAQ5b,EAAI2rB,EAAK/P,MAAO8Q,EAAQ9Q,OACxC8Q,EAAQlN,OAASxf,EAAI2rB,EAAKnM,OAAQkN,EAAQlN,QAC1CkN,EAAQzU,KAAO7zB,EAAIunC,EAAK1T,KAAMyU,EAAQzU,MAC/ByU,CACT,GAAGX,GAA2BjL,EAAS0L,EAAqB1K,IAK5D,OAJA2K,EAAarJ,MAAQqJ,EAAa7Q,MAAQ6Q,EAAaxU,KACvDwU,EAAapJ,OAASoJ,EAAajN,OAASiN,EAAatU,IACzDsU,EAAajJ,EAAIiJ,EAAaxU,KAC9BwU,EAAa/I,EAAI+I,EAAatU,IACvBsU,CACT,CCjEe,SAASE,GAAelL,GACrC,IAOIqG,EAPAhI,EAAY2B,EAAK3B,UACjBgB,EAAUW,EAAKX,QACfb,EAAYwB,EAAKxB,UACjBiG,EAAgBjG,EAAYqC,EAAiBrC,GAAa,KAC1D4H,EAAY5H,EAAYmH,GAAanH,GAAa,KAClD2M,EAAU9M,EAAU0D,EAAI1D,EAAUsD,MAAQ,EAAItC,EAAQsC,MAAQ,EAC9DyJ,EAAU/M,EAAU4D,EAAI5D,EAAUuD,OAAS,EAAIvC,EAAQuC,OAAS,EAGpE,OAAQ6C,GACN,KAAK/N,EACH2P,EAAU,CACRtE,EAAGoJ,EACHlJ,EAAG5D,EAAU4D,EAAI5C,EAAQuC,QAE3B,MAEF,KAAK7D,EACHsI,EAAU,CACRtE,EAAGoJ,EACHlJ,EAAG5D,EAAU4D,EAAI5D,EAAUuD,QAE7B,MAEF,KAAKzH,EACHkM,EAAU,CACRtE,EAAG1D,EAAU0D,EAAI1D,EAAUsD,MAC3BM,EAAGmJ,GAEL,MAEF,KAAK5U,EACH6P,EAAU,CACRtE,EAAG1D,EAAU0D,EAAI1C,EAAQsC,MACzBM,EAAGmJ,GAEL,MAEF,QACE/E,EAAU,CACRtE,EAAG1D,EAAU0D,EACbE,EAAG5D,EAAU4D,GAInB,IAAIoJ,EAAW5G,EAAgBjB,EAAyBiB,GAAiB,KAEzE,GAAgB,MAAZ4G,EAAkB,CACpB,IAAItqB,EAAmB,MAAbsqB,EAAmB,SAAW,QAExC,OAAQjF,GACN,KAAKt8C,EACHu8C,EAAQgF,GAAYhF,EAAQgF,IAAahN,EAAUtd,GAAO,EAAIse,EAAQte,GAAO,GAC7E,MAEF,KAAKh3B,EACHs8C,EAAQgF,GAAYhF,EAAQgF,IAAahN,EAAUtd,GAAO,EAAIse,EAAQte,GAAO,GAC7E,MAEF,SAEJ,CAEA,OAAOslB,CACT,CC3De,SAASiF,GAAe3uC,EAAOrjB,QAC5B,IAAZA,IACFA,EAAU,CAAC,GAGb,IAAIiyD,EAAWjyD,EACXkyD,EAAqBD,EAAS/M,UAC9BA,OAAmC,IAAvBgN,EAAgC7uC,EAAM6hC,UAAYgN,EAC9DC,EAAoBF,EAASlL,SAC7BA,OAAiC,IAAtBoL,EAA+B9uC,EAAM0jC,SAAWoL,EAC3DC,EAAoBH,EAASX,SAC7BA,OAAiC,IAAtBc,EAA+BxN,EAAkBwN,EAC5DC,EAAwBJ,EAASV,aACjCA,OAAyC,IAA1Bc,EAAmCxN,EAAWwN,EAC7DC,EAAwBL,EAASM,eACjCA,OAA2C,IAA1BD,EAAmCxN,EAASwN,EAC7DE,EAAuBP,EAASQ,YAChCA,OAAuC,IAAzBD,GAA0CA,EACxDE,EAAmBT,EAASpH,QAC5BA,OAA+B,IAArB6H,EAA8B,EAAIA,EAC5CjI,EAAgBD,GAAsC,kBAAZK,EAAuBA,EAAUH,GAAgBG,EAASlG,IACpGgO,EAAaJ,IAAmBzN,EAASC,EAAYD,EACrD+H,EAAaxpC,EAAMynC,MAAMhG,OACzBiB,EAAU1iC,EAAMsjC,SAAS8L,EAAcE,EAAaJ,GACpDK,EAAqBvB,GAAgBjL,EAAUL,GAAWA,EAAUA,EAAQ8M,gBAAkB1J,EAAmB9lC,EAAMsjC,SAAS7B,QAASwM,EAAUC,EAAcxK,GACjK+L,EAAsBjW,EAAsBx5B,EAAMsjC,SAAS5B,WAC3DkG,EAAgB2G,GAAe,CACjC7M,UAAW+N,EACX/M,QAAS8G,EACT9F,SAAU,WACV7B,UAAWA,IAET6N,EAAmBpC,GAAiBl/D,OAAO4D,OAAO,CAAC,EAAGw3D,EAAY5B,IAClE+H,EAAoBT,IAAmBzN,EAASiO,EAAmBD,EAGnEG,EAAkB,CACpB7V,IAAKwV,EAAmBxV,IAAM4V,EAAkB5V,IAAMqN,EAAcrN,IACpEqH,OAAQuO,EAAkBvO,OAASmO,EAAmBnO,OAASgG,EAAchG,OAC7EvH,KAAM0V,EAAmB1V,KAAO8V,EAAkB9V,KAAOuN,EAAcvN,KACvE2D,MAAOmS,EAAkBnS,MAAQ+R,EAAmB/R,MAAQ4J,EAAc5J,OAExEqS,EAAa7vC,EAAM6nC,cAAc9vD,OAErC,GAAIm3D,IAAmBzN,GAAUoO,EAAY,CAC3C,IAAI93D,EAAS83D,EAAWhO,GACxBzzD,OAAOiI,KAAKu5D,GAAiB34D,SAAQ,SAAUtI,GAC7C,IAAImhE,EAAW,CAACtS,EAAO4D,GAAQpzC,QAAQrf,IAAQ,EAAI,GAAK,EACpDo5D,EAAO,CAAChO,EAAKqH,GAAQpzC,QAAQrf,IAAQ,EAAI,IAAM,IACnDihE,EAAgBjhE,IAAQoJ,EAAOgwD,GAAQ+H,CACzC,GACF,CAEA,OAAOF,CACT,CC5De,SAASG,GAAqB/vC,EAAOrjB,QAClC,IAAZA,IACFA,EAAU,CAAC,GAGb,IAAIiyD,EAAWjyD,EACXklD,EAAY+M,EAAS/M,UACrBoM,EAAWW,EAASX,SACpBC,EAAeU,EAASV,aACxB1G,EAAUoH,EAASpH,QACnBwI,EAAiBpB,EAASoB,eAC1BC,EAAwBrB,EAASsB,sBACjCA,OAAkD,IAA1BD,EAAmCE,EAAgBF,EAC3ExG,EAAYT,GAAanH,GACzBC,EAAa2H,EAAYuG,EAAiBrO,EAAsBA,EAAoBjiD,QAAO,SAAUmiD,GACvG,OAAOmH,GAAanH,KAAe4H,CACrC,IAAKnI,EACD8O,EAAoBtO,EAAWpiD,QAAO,SAAUmiD,GAClD,OAAOqO,EAAsBliD,QAAQ6zC,IAAc,CACrD,IAEiC,IAA7BuO,EAAkBpmE,SACpBomE,EAAoBtO,GAItB,IAAIuO,EAAYD,EAAkB/iC,QAAO,SAAUu0B,EAAKC,GAOtD,OANAD,EAAIC,GAAa8M,GAAe3uC,EAAO,CACrC6hC,UAAWA,EACXoM,SAAUA,EACVC,aAAcA,EACd1G,QAASA,IACRtD,EAAiBrC,IACbD,CACT,GAAG,CAAC,GACJ,OAAOxzD,OAAOiI,KAAKg6D,GAAW9hD,MAAK,SAAUrY,EAAGC,GAC9C,OAAOk6D,EAAUn6D,GAAKm6D,EAAUl6D,EAClC,GACF,CClCA,SAASm6D,GAA8BzO,GACrC,GAAIqC,EAAiBrC,KAAeR,EAClC,MAAO,GAGT,IAAIkP,EAAoB7E,GAAqB7J,GAC7C,MAAO,CAAC+J,GAA8B/J,GAAY0O,EAAmB3E,GAA8B2E,GACrG,CAEA,SAASC,GAAKnN,GACZ,IAAIrjC,EAAQqjC,EAAKrjC,MACbrjB,EAAU0mD,EAAK1mD,QACftP,EAAOg2D,EAAKh2D,KAEhB,IAAI2yB,EAAM6nC,cAAcx6D,GAAMojE,MAA9B,CAoCA,IAhCA,IAAIC,EAAoB/zD,EAAQ+xD,SAC5BiC,OAAsC,IAAtBD,GAAsCA,EACtDE,EAAmBj0D,EAAQk0D,QAC3BC,OAAoC,IAArBF,GAAqCA,EACpDG,EAA8Bp0D,EAAQq0D,mBACtCxJ,EAAU7qD,EAAQ6qD,QAClByG,EAAWtxD,EAAQsxD,SACnBC,EAAevxD,EAAQuxD,aACvBkB,EAAczyD,EAAQyyD,YACtB6B,EAAwBt0D,EAAQqzD,eAChCA,OAA2C,IAA1BiB,GAA0CA,EAC3Df,EAAwBvzD,EAAQuzD,sBAChCgB,EAAqBlxC,EAAMrjB,QAAQklD,UACnCiG,EAAgB5D,EAAiBgN,GACjCC,EAAkBrJ,IAAkBoJ,EACpCF,EAAqBD,IAAgCI,IAAoBnB,EAAiB,CAACtE,GAAqBwF,IAAuBZ,GAA8BY,IACrKpP,EAAa,CAACoP,GAAoB58C,OAAO08C,GAAoB3jC,QAAO,SAAUu0B,EAAKC,GACrF,OAAOD,EAAIttC,OAAO4vC,EAAiBrC,KAAeR,EAAO0O,GAAqB/vC,EAAO,CACnF6hC,UAAWA,EACXoM,SAAUA,EACVC,aAAcA,EACd1G,QAASA,EACTwI,eAAgBA,EAChBE,sBAAuBA,IACpBrO,EACP,GAAG,IACCuP,EAAgBpxC,EAAMynC,MAAM/F,UAC5B8H,EAAaxpC,EAAMynC,MAAMhG,OACzB4P,EAAY,IAAIpzD,IAChBqzD,GAAqB,EACrBC,EAAwBzP,EAAW,GAE9B/3D,EAAI,EAAGA,EAAI+3D,EAAW93D,OAAQD,IAAK,CAC1C,IAAI83D,EAAYC,EAAW/3D,GAEvBynE,EAAiBtN,EAAiBrC,GAElC4P,EAAmBzI,GAAanH,KAAe10C,EAC/C66C,EAAa,CAACjO,EAAKqH,GAAQpzC,QAAQwjD,IAAmB,EACtDptB,EAAM4jB,EAAa,QAAU,SAC7B8E,EAAW6B,GAAe3uC,EAAO,CACnC6hC,UAAWA,EACXoM,SAAUA,EACVC,aAAcA,EACdkB,YAAaA,EACb5H,QAASA,IAEPkK,EAAoB1J,EAAayJ,EAAmBjU,EAAQ3D,EAAO4X,EAAmBrQ,EAASrH,EAE/FqX,EAAchtB,GAAOolB,EAAWplB,KAClCstB,EAAoBhG,GAAqBgG,IAG3C,IAAIC,EAAmBjG,GAAqBgG,GACxCE,EAAS,GAUb,GARIjB,GACFiB,EAAOllE,KAAKogE,EAAS0E,IAAmB,GAGtCV,GACFc,EAAOllE,KAAKogE,EAAS4E,IAAsB,EAAG5E,EAAS6E,IAAqB,GAG1EC,EAAO5uC,OAAM,SAAU6uC,GACzB,OAAOA,CACT,IAAI,CACFN,EAAwB1P,EACxByP,GAAqB,EACrB,KACF,CAEAD,EAAU3zD,IAAImkD,EAAW+P,EAC3B,CAEA,GAAIN,EAqBF,IAnBA,IAAIQ,EAAiB9B,EAAiB,EAAI,EAEtC+B,EAAQ,SAAeC,GACzB,IAAIC,EAAmBnQ,EAAWoQ,MAAK,SAAUrQ,GAC/C,IAAI+P,EAASP,EAAU90D,IAAIslD,GAE3B,GAAI+P,EACF,OAAOA,EAAO1mD,MAAM,EAAG8mD,GAAIhvC,OAAM,SAAU6uC,GACzC,OAAOA,CACT,GAEJ,IAEA,GAAII,EAEF,OADAV,EAAwBU,EACjB,OAEX,EAESD,EAAKF,EAAgBE,EAAK,EAAGA,IAAM,CAC1C,IAAIG,EAAOJ,EAAMC,GAEjB,GAAa,UAATG,EAAkB,KACxB,CAGEnyC,EAAM6hC,YAAc0P,IACtBvxC,EAAM6nC,cAAcx6D,GAAMojE,OAAQ,EAClCzwC,EAAM6hC,UAAY0P,EAClBvxC,EAAMpoB,OAAQ,EA5GhB,CA8GF,CAGA,QACEvK,KAAM,OACN2hB,SAAS,EACTg1C,MAAO,OACPluD,GAAI06D,GACJzH,iBAAkB,CAAC,UACnBr0D,KAAM,CACJ+7D,OAAO,IC7IX,SAAS2B,GAAetF,EAAUS,EAAM8E,GAQtC,YAPyB,IAArBA,IACFA,EAAmB,CACjBjN,EAAG,EACHE,EAAG,IAIA,CACLvL,IAAK+S,EAAS/S,IAAMwT,EAAKtI,OAASoN,EAAiB/M,EACnD9H,MAAOsP,EAAStP,MAAQ+P,EAAKvI,MAAQqN,EAAiBjN,EACtDhE,OAAQ0L,EAAS1L,OAASmM,EAAKtI,OAASoN,EAAiB/M,EACzDzL,KAAMiT,EAASjT,KAAO0T,EAAKvI,MAAQqN,EAAiBjN,EAExD,CAEA,SAASkN,GAAsBxF,GAC7B,MAAO,CAAC/S,EAAKyD,EAAO4D,EAAQvH,GAAM3lC,MAAK,SAAUq+C,GAC/C,OAAOzF,EAASyF,IAAS,CAC3B,GACF,CAEA,SAASC,GAAKnP,GACZ,IAAIrjC,EAAQqjC,EAAKrjC,MACb3yB,EAAOg2D,EAAKh2D,KACZ+jE,EAAgBpxC,EAAMynC,MAAM/F,UAC5B8H,EAAaxpC,EAAMynC,MAAMhG,OACzB4Q,EAAmBryC,EAAM6nC,cAAc4K,gBACvCC,EAAoB/D,GAAe3uC,EAAO,CAC5CkvC,eAAgB,cAEdyD,EAAoBhE,GAAe3uC,EAAO,CAC5CovC,aAAa,IAEXwD,EAA2BR,GAAeM,EAAmBtB,GAC7DyB,EAAsBT,GAAeO,EAAmBnJ,EAAY6I,GACpES,EAAoBR,GAAsBM,GAC1CG,EAAmBT,GAAsBO,GAC7C7yC,EAAM6nC,cAAcx6D,GAAQ,CAC1BulE,yBAA0BA,EAC1BC,oBAAqBA,EACrBC,kBAAmBA,EACnBC,iBAAkBA,GAEpB/yC,EAAMm3B,WAAWsK,OAASrzD,OAAO4D,OAAO,CAAC,EAAGguB,EAAMm3B,WAAWsK,OAAQ,CACnE,+BAAgCqR,EAChC,sBAAuBC,GAE3B,CAGA,QACE1lE,KAAM,OACN2hB,SAAS,EACTg1C,MAAO,OACP+E,iBAAkB,CAAC,mBACnBjzD,GAAI08D,ICxDC,SAASQ,GAAwBnR,EAAW4F,EAAO1vD,GACxD,IAAI+vD,EAAgB5D,EAAiBrC,GACjCoR,EAAiB,CAACpZ,EAAME,GAAK/rC,QAAQ85C,IAAkB,GAAK,EAAI,EAEhEzE,EAAyB,oBAAXtrD,EAAwBA,EAAO3J,OAAO4D,OAAO,CAAC,EAAGy1D,EAAO,CACxE5F,UAAWA,KACP9pD,EACFm7D,EAAW7P,EAAK,GAChB8P,EAAW9P,EAAK,GAIpB,OAFA6P,EAAWA,GAAY,EACvBC,GAAYA,GAAY,GAAKF,EACtB,CAACpZ,EAAM2D,GAAOxvC,QAAQ85C,IAAkB,EAAI,CACjD1C,EAAG+N,EACH7N,EAAG4N,GACD,CACF9N,EAAG8N,EACH5N,EAAG6N,EAEP,CAEA,SAASp7D,GAAOwrD,GACd,IAAIvjC,EAAQujC,EAAMvjC,MACdrjB,EAAU4mD,EAAM5mD,QAChBtP,EAAOk2D,EAAMl2D,KACb+lE,EAAkBz2D,EAAQ5E,OAC1BA,OAA6B,IAApBq7D,EAA6B,CAAC,EAAG,GAAKA,EAC/C1+D,EAAOotD,EAAWz0B,QAAO,SAAUu0B,EAAKC,GAE1C,OADAD,EAAIC,GAAamR,GAAwBnR,EAAW7hC,EAAMynC,MAAO1vD,GAC1D6pD,CACT,GAAG,CAAC,GACAyR,EAAwB3+D,EAAKsrB,EAAM6hC,WACnCuD,EAAIiO,EAAsBjO,EAC1BE,EAAI+N,EAAsB/N,EAEW,MAArCtlC,EAAM6nC,cAAcD,gBACtB5nC,EAAM6nC,cAAcD,cAAcxC,GAAKA,EACvCplC,EAAM6nC,cAAcD,cAActC,GAAKA,GAGzCtlC,EAAM6nC,cAAcx6D,GAAQqH,CAC9B,CAGA,QACErH,KAAM,SACN2hB,SAAS,EACTg1C,MAAO,OACPC,SAAU,CAAC,iBACXnuD,GAAIiC,IClDN,SAAS6vD,GAAcvE,GACrB,IAAIrjC,EAAQqjC,EAAKrjC,MACb3yB,EAAOg2D,EAAKh2D,KAKhB2yB,EAAM6nC,cAAcx6D,GAAQkhE,GAAe,CACzC7M,UAAW1hC,EAAMynC,MAAM/F,UACvBgB,QAAS1iC,EAAMynC,MAAMhG,OACrBiC,SAAU,WACV7B,UAAW7hC,EAAM6hC,WAErB,CAGA,QACEx0D,KAAM,gBACN2hB,SAAS,EACTg1C,MAAO,OACPluD,GAAI8xD,GACJlzD,KAAM,CAAC,GCvBM,SAAS4+D,GAAWvL,GACjC,MAAgB,MAATA,EAAe,IAAM,GAC9B,CCUA,SAAS0K,GAAgBpP,GACvB,IAAIrjC,EAAQqjC,EAAKrjC,MACbrjB,EAAU0mD,EAAK1mD,QACftP,EAAOg2D,EAAKh2D,KACZqjE,EAAoB/zD,EAAQ+xD,SAC5BiC,OAAsC,IAAtBD,GAAsCA,EACtDE,EAAmBj0D,EAAQk0D,QAC3BC,OAAoC,IAArBF,GAAsCA,EACrD3C,EAAWtxD,EAAQsxD,SACnBC,EAAevxD,EAAQuxD,aACvBkB,EAAczyD,EAAQyyD,YACtB5H,EAAU7qD,EAAQ6qD,QAClB+L,EAAkB52D,EAAQ62D,OAC1BA,OAA6B,IAApBD,GAAoCA,EAC7CE,EAAwB92D,EAAQ+2D,aAChCA,OAAyC,IAA1BD,EAAmC,EAAIA,EACtD3G,EAAW6B,GAAe3uC,EAAO,CACnCiuC,SAAUA,EACVC,aAAcA,EACd1G,QAASA,EACT4H,YAAaA,IAEXtH,EAAgB5D,EAAiBlkC,EAAM6hC,WACvC4H,EAAYT,GAAahpC,EAAM6hC,WAC/BsP,GAAmB1H,EACnBiF,EAAW7H,EAAyBiB,GACpC+I,EAAUyC,GAAW5E,GACrB9G,EAAgB5nC,EAAM6nC,cAAcD,cACpCwJ,EAAgBpxC,EAAMynC,MAAM/F,UAC5B8H,EAAaxpC,EAAMynC,MAAMhG,OACzBkS,EAA4C,oBAAjBD,EAA8BA,EAAatlE,OAAO4D,OAAO,CAAC,EAAGguB,EAAMynC,MAAO,CACvG5F,UAAW7hC,EAAM6hC,aACb6R,EACFE,EAA2D,kBAAtBD,EAAiC,CACxEjF,SAAUiF,EACV9C,QAAS8C,GACPvlE,OAAO4D,OAAO,CAChB08D,SAAU,EACVmC,QAAS,GACR8C,GACCE,EAAsB7zC,EAAM6nC,cAAc9vD,OAASioB,EAAM6nC,cAAc9vD,OAAOioB,EAAM6hC,WAAa,KACjGntD,EAAO,CACT0wD,EAAG,EACHE,EAAG,GAGL,GAAKsC,EAAL,CAIA,GAAI+I,EAAe,CACjB,IAAImD,EAEAC,EAAwB,MAAbrF,EAAmB3U,EAAMF,EACpCma,EAAuB,MAAbtF,EAAmBtN,EAAS5D,EACtCpZ,EAAmB,MAAbsqB,EAAmB,SAAW,QACpC32D,EAAS6vD,EAAc8G,GACvB9sB,EAAM7pC,EAAS+0D,EAASiH,GACxB/tC,EAAMjuB,EAAS+0D,EAASkH,GACxBC,EAAWT,GAAUhK,EAAWplB,GAAO,EAAI,EAC3C8vB,EAASzK,IAAct8C,EAAQikD,EAAchtB,GAAOolB,EAAWplB,GAC/D+vB,EAAS1K,IAAct8C,GAASq8C,EAAWplB,IAAQgtB,EAAchtB,GAGjEujB,EAAe3nC,EAAMsjC,SAASM,MAC9BqE,EAAYuL,GAAU7L,EAAenC,EAAcmC,GAAgB,CACrE3C,MAAO,EACPC,OAAQ,GAENmP,EAAqBp0C,EAAM6nC,cAAc,oBAAsB7nC,EAAM6nC,cAAc,oBAAoBL,QAAUN,KACjHmN,GAAkBD,EAAmBL,GACrCO,GAAkBF,EAAmBJ,GAMrCO,GAAWzN,EAAO,EAAGsK,EAAchtB,GAAM6jB,EAAU7jB,IACnDowB,GAAYrD,EAAkBC,EAAchtB,GAAO,EAAI6vB,EAAWM,GAAWF,GAAkBT,EAA4BlF,SAAWwF,EAASK,GAAWF,GAAkBT,EAA4BlF,SACxM+F,GAAYtD,GAAmBC,EAAchtB,GAAO,EAAI6vB,EAAWM,GAAWD,GAAkBV,EAA4BlF,SAAWyF,EAASI,GAAWD,GAAkBV,EAA4BlF,SACzMpG,GAAoBtoC,EAAMsjC,SAASM,OAASgD,EAAgB5mC,EAAMsjC,SAASM,OAC3E8Q,GAAepM,GAAiC,MAAboG,EAAmBpG,GAAkBmF,WAAa,EAAInF,GAAkBoF,YAAc,EAAI,EAC7HiH,GAAwH,OAAjGb,EAA+C,MAAvBD,OAA8B,EAASA,EAAoBnF,IAAqBoF,EAAwB,EACvJc,GAAY78D,EAASy8D,GAAYG,GAAsBD,GACvDG,GAAY98D,EAAS08D,GAAYE,GACjCG,GAAkBhO,EAAO0M,EAASxM,EAAQplB,EAAKgzB,IAAahzB,EAAK7pC,EAAQy7D,EAASzM,EAAQ/gC,EAAK6uC,IAAa7uC,GAChH4hC,EAAc8G,GAAYoG,GAC1BpgE,EAAKg6D,GAAYoG,GAAkB/8D,CACrC,CAEA,GAAI+4D,EAAc,CAChB,IAAIiE,GAEAC,GAAyB,MAAbtG,EAAmB3U,EAAMF,EAErCob,GAAwB,MAAbvG,EAAmBtN,EAAS5D,EAEvC0X,GAAUtN,EAAciJ,GAExBsE,GAAmB,MAAZtE,EAAkB,SAAW,QAEpCuE,GAAOF,GAAUpI,EAASkI,IAE1BK,GAAOH,GAAUpI,EAASmI,IAE1BK,IAAuD,IAAxC,CAACvb,EAAKF,GAAM7rC,QAAQ85C,GAEnCyN,GAAyH,OAAjGR,GAAgD,MAAvBlB,OAA8B,EAASA,EAAoBhD,IAAoBkE,GAAyB,EAEzJS,GAAaF,GAAeF,GAAOF,GAAU9D,EAAc+D,IAAQ3L,EAAW2L,IAAQI,GAAuB3B,EAA4B/C,QAEzI4E,GAAaH,GAAeJ,GAAU9D,EAAc+D,IAAQ3L,EAAW2L,IAAQI,GAAuB3B,EAA4B/C,QAAUwE,GAE5IK,GAAmBlC,GAAU8B,GAAerO,GAAeuO,GAAYN,GAASO,IAAc3O,EAAO0M,EAASgC,GAAaJ,GAAMF,GAAS1B,EAASiC,GAAaJ,IAEpKzN,EAAciJ,GAAW6E,GACzBhhE,EAAKm8D,GAAW6E,GAAmBR,EACrC,CAEAl1C,EAAM6nC,cAAcx6D,GAAQqH,CAvE5B,CAwEF,CAGA,QACErH,KAAM,kBACN2hB,SAAS,EACTg1C,MAAO,OACPluD,GAAI28D,GACJ1J,iBAAkB,CAAC,WC5IN,SAAS4M,GAAqBjT,GAC3C,MAAO,CACLoJ,WAAYpJ,EAAQoJ,WACpBE,UAAWtJ,EAAQsJ,UAEvB,CCDe,SAAS4J,GAAcl6C,GACpC,OAAIA,IAASknC,EAAUlnC,IAAUunC,EAAcvnC,GAGtCi6C,GAAqBj6C,GAFrBmwC,GAAgBnwC,EAI3B,CCDA,SAASm6C,GAAgBnT,GACvB,IAAI6K,EAAO7K,EAAQlJ,wBACfqL,EAASV,EAAMoJ,EAAKvI,OAAStC,EAAQqC,aAAe,EACpDD,EAASX,EAAMoJ,EAAKtI,QAAUvC,EAAQpR,cAAgB,EAC1D,OAAkB,IAAXuT,GAA2B,IAAXC,CACzB,CAIe,SAASgR,GAAiBC,EAAyB5P,EAAc2D,QAC9D,IAAZA,IACFA,GAAU,GAGZ,IAAIkM,EAA0B/S,EAAckD,GACxC8P,EAAuBhT,EAAckD,IAAiB0P,GAAgB1P,GACtEJ,EAAkBD,EAAmBK,GACrCoH,EAAO/T,EAAsBuc,EAAyBE,EAAsBnM,GAC5EsB,EAAS,CACXU,WAAY,EACZE,UAAW,GAETtC,EAAU,CACZtE,EAAG,EACHE,EAAG,GAkBL,OAfI0Q,IAA4BA,IAA4BlM,MACxB,SAA9BrH,EAAY0D,IAChByG,GAAe7G,MACbqF,EAASwK,GAAczP,IAGrBlD,EAAckD,IAChBuD,EAAUlQ,EAAsB2M,GAAc,GAC9CuD,EAAQtE,GAAKe,EAAauH,WAC1BhE,EAAQpE,GAAKa,EAAasH,WACjB1H,IACT2D,EAAQtE,EAAI8G,GAAoBnG,KAI7B,CACLX,EAAGmI,EAAK1T,KAAOuR,EAAOU,WAAapC,EAAQtE,EAC3CE,EAAGiI,EAAKxT,IAAMqR,EAAOY,UAAYtC,EAAQpE,EACzCN,MAAOuI,EAAKvI,MACZC,OAAQsI,EAAKtI,OAEjB,CCvDA,SAASiR,GAAM32C,GACb,IAAI1pB,EAAM,IAAIoI,IACVk4D,EAAU,IAAI32D,IACdhM,EAAS,GAKb,SAAS+a,EAAK6nD,GACZD,EAAQ1zD,IAAI2zD,EAAS/oE,MACrB,IAAI42D,EAAW,GAAG3vC,OAAO8hD,EAASnS,UAAY,GAAImS,EAASrN,kBAAoB,IAC/E9E,EAAShtD,SAAQ,SAAUwE,GACzB,IAAK06D,EAAQn1D,IAAIvF,GAAM,CACrB,IAAI46D,EAAcxgE,EAAI0G,IAAId,GAEtB46D,GACF9nD,EAAK8nD,EAET,CACF,IACA7iE,EAAO9G,KAAK0pE,EACd,CAQA,OAzBA72C,EAAUtoB,SAAQ,SAAUm/D,GAC1BvgE,EAAI6H,IAAI04D,EAAS/oE,KAAM+oE,EACzB,IAiBA72C,EAAUtoB,SAAQ,SAAUm/D,GACrBD,EAAQn1D,IAAIo1D,EAAS/oE,OAExBkhB,EAAK6nD,EAET,IACO5iE,CACT,CAEe,SAAS8iE,GAAe/2C,GAErC,IAAIg3C,EAAmBL,GAAM32C,GAE7B,OAAOijC,EAAen1B,QAAO,SAAUu0B,EAAKoC,GAC1C,OAAOpC,EAAIttC,OAAOiiD,EAAiB72D,QAAO,SAAU02D,GAClD,OAAOA,EAASpS,QAAUA,CAC5B,IACF,GAAG,GACL,CC3Ce,SAASwS,GAAS1gE,GAC/B,IAAI2gE,EACJ,OAAO,WAUL,OATKA,IACHA,EAAU,IAAIzlE,SAAQ,SAAUF,GAC9BE,QAAQF,UAAUkc,MAAK,WACrBypD,OAAUxoE,EACV6C,EAAQgF,IACV,GACF,KAGK2gE,CACT,CACF,CCde,SAASC,GAAYn3C,GAClC,IAAI+R,EAAS/R,EAAU8N,QAAO,SAAUiE,EAAQnL,GAC9C,IAAIiR,EAAW9F,EAAOnL,EAAQ94B,MAK9B,OAJAikC,EAAOnL,EAAQ94B,MAAQ+pC,EAAWhpC,OAAO4D,OAAO,CAAC,EAAGolC,EAAUjR,EAAS,CACrExpB,QAASvO,OAAO4D,OAAO,CAAC,EAAGolC,EAASz6B,QAASwpB,EAAQxpB,SACrDjI,KAAMtG,OAAO4D,OAAO,CAAC,EAAGolC,EAAS1iC,KAAMyxB,EAAQzxB,QAC5CyxB,EACEmL,CACT,GAAG,CAAC,GAEJ,OAAOljC,OAAOiI,KAAKi7B,GAAQz7B,KAAI,SAAUlH,GACvC,OAAO2iC,EAAO3iC,EAChB,GACF,CCJA,IAAIgoE,GAAkB,CACpB9U,UAAW,SACXtiC,UAAW,GACXmkC,SAAU,YAGZ,SAASkT,KACP,IAAK,IAAIzB,EAAOhsD,UAAUnf,OAAQ8V,EAAO,IAAIlU,MAAMupE,GAAOxsD,EAAO,EAAGA,EAAOwsD,EAAMxsD,IAC/E7I,EAAK6I,GAAQQ,UAAUR,GAGzB,OAAQ7I,EAAKoU,MAAK,SAAUwuC,GAC1B,QAASA,GAAoD,oBAAlCA,EAAQlJ,sBACrC,GACF,CAEO,SAASqd,GAAgBC,QACL,IAArBA,IACFA,EAAmB,CAAC,GAGtB,IAAIC,EAAoBD,EACpBE,EAAwBD,EAAkBE,iBAC1CA,OAA6C,IAA1BD,EAAmC,GAAKA,EAC3DE,EAAyBH,EAAkBI,eAC3CA,OAA4C,IAA3BD,EAAoCP,GAAkBO,EAC3E,OAAO,SAAsBxV,EAAWD,EAAQ9kD,QAC9B,IAAZA,IACFA,EAAUw6D,GAGZ,IAAIn3C,EAAQ,CACV6hC,UAAW,SACX0U,iBAAkB,GAClB55D,QAASvO,OAAO4D,OAAO,CAAC,EAAG2kE,GAAiBQ,GAC5CtP,cAAe,CAAC,EAChBvE,SAAU,CACR5B,UAAWA,EACXD,OAAQA,GAEVtK,WAAY,CAAC,EACb3G,OAAQ,CAAC,GAEP4mB,EAAmB,GACnBC,GAAc,EACd5tD,EAAW,CACbuW,MAAOA,EACPs3C,WAAY,SAAoBC,GAC9B,IAAI56D,EAAsC,oBAArB46D,EAAkCA,EAAiBv3C,EAAMrjB,SAAW46D,EACzFC,IACAx3C,EAAMrjB,QAAUvO,OAAO4D,OAAO,CAAC,EAAGmlE,EAAgBn3C,EAAMrjB,QAASA,GACjEqjB,EAAMurC,cAAgB,CACpB7J,UAAWqB,EAAUrB,GAAawL,GAAkBxL,GAAaA,EAAU8N,eAAiBtC,GAAkBxL,EAAU8N,gBAAkB,GAC1I/N,OAAQyL,GAAkBzL,IAI5B,IAAI8U,EAAmBD,GAAeI,GAAY,GAAGpiD,OAAO2iD,EAAkBj3C,EAAMrjB,QAAQ4iB,aAM5F,OAJAS,EAAMu2C,iBAAmBA,EAAiB72D,QAAO,SAAU+Z,GACzD,OAAOA,EAAEzK,OACX,IACAyoD,IACOhuD,EAASrR,QAClB,EAMAs/D,YAAa,WACX,IAAIL,EAAJ,CAIA,IAAIM,EAAkB33C,EAAMsjC,SACxB5B,EAAYiW,EAAgBjW,UAC5BD,EAASkW,EAAgBlW,OAG7B,GAAKmV,GAAiBlV,EAAWD,GAAjC,CAKAzhC,EAAMynC,MAAQ,CACZ/F,UAAWoU,GAAiBpU,EAAWkF,EAAgBnF,GAAoC,UAA3BzhC,EAAMrjB,QAAQ+mD,UAC9EjC,OAAQ+D,EAAc/D,IAOxBzhC,EAAMpoB,OAAQ,EACdooB,EAAM6hC,UAAY7hC,EAAMrjB,QAAQklD,UAKhC7hC,EAAMu2C,iBAAiBt/D,SAAQ,SAAUm/D,GACvC,OAAOp2C,EAAM6nC,cAAcuO,EAAS/oE,MAAQe,OAAO4D,OAAO,CAAC,EAAGokE,EAAS1hE,KACzE,IAEA,IAAK,IAAIkF,EAAQ,EAAGA,EAAQomB,EAAMu2C,iBAAiBvsE,OAAQ4P,IACzD,IAAoB,IAAhBomB,EAAMpoB,MAAV,CAMA,IAAIggE,EAAwB53C,EAAMu2C,iBAAiB38D,GAC/C9D,EAAK8hE,EAAsB9hE,GAC3B+hE,EAAyBD,EAAsBj7D,QAC/CiyD,OAAsC,IAA3BiJ,EAAoC,CAAC,EAAIA,EACpDxqE,EAAOuqE,EAAsBvqE,KAEf,oBAAPyI,IACTkqB,EAAQlqB,EAAG,CACTkqB,MAAOA,EACPrjB,QAASiyD,EACTvhE,KAAMA,EACNoc,SAAUA,KACNuW,EAdR,MAHEA,EAAMpoB,OAAQ,EACdgC,GAAS,CAzBb,CATA,CAqDF,EAGAxB,OAAQo+D,IAAS,WACf,OAAO,IAAIxlE,SAAQ,SAAUF,GAC3B2Y,EAASiuD,cACT5mE,EAAQkvB,EACV,GACF,IACA83C,QAAS,WACPN,IACAH,GAAc,CAChB,GAGF,IAAKT,GAAiBlV,EAAWD,GAC/B,OAAOh4C,EAaT,SAASguD,IACPz3C,EAAMu2C,iBAAiBt/D,SAAQ,SAAUosD,GACvC,IAAIh2D,EAAOg2D,EAAKh2D,KACZ0qE,EAAe1U,EAAK1mD,QACpBA,OAA2B,IAAjBo7D,EAA0B,CAAC,EAAIA,EACzCr9D,EAAS2oD,EAAK3oD,OAElB,GAAsB,oBAAXA,EAAuB,CAChC,IAAIs9D,EAAYt9D,EAAO,CACrBslB,MAAOA,EACP3yB,KAAMA,EACNoc,SAAUA,EACV9M,QAASA,IAGPs7D,EAAS,WAAmB,EAEhCb,EAAiB1qE,KAAKsrE,GAAaC,EACrC,CACF,GACF,CAEA,SAAST,IACPJ,EAAiBngE,SAAQ,SAAUnB,GACjC,OAAOA,GACT,IACAshE,EAAmB,EACrB,CAEA,OAvCA3tD,EAAS6tD,WAAW36D,GAASqQ,MAAK,SAAUgT,IACrCq3C,GAAe16D,EAAQu7D,eAC1Bv7D,EAAQu7D,cAAcl4C,EAE1B,IAmCOvW,CACT,CACF,CACO,IAAI0uD,GAA4BtB,KC1LnCI,GAAmB,CAACmB,GAAgBxQ,GAAeiD,GAAezH,EAAarrD,GAAQy4D,GAAMiC,GAAiB7O,GAAO4O,IACrH2F,GAA4BtB,GAAgB,CAC9CI,iBAAkBA,KCPhBA,GAAmB,CAACmB,GAAgBxQ,GAAeiD,GAAezH,GAClE+U,GAA4BtB,GAAgB,CAC9CI,iBAAkBA;;;;;;ACIpB,MAAMoB,GAAa,IAAIp6D,IAEvBq6D,GAAe,CACb56D,GAAAA,CAAIglD,EAAS/zD,EAAK8a,GACX4uD,GAAWr3D,IAAI0hD,IAClB2V,GAAW36D,IAAIglD,EAAS,IAAIzkD,KAG9B,MAAMs6D,EAAcF,GAAW97D,IAAImmD,GAI9B6V,EAAYv3D,IAAIrS,IAA6B,IAArB4pE,EAAY97D,KAMzC87D,EAAY76D,IAAI/O,EAAK8a,GAJnB7b,QAAQC,MAAO,+EAA8EjC,MAAMw9B,KAAKmvC,EAAYliE,QAAQ,M,EAOhIkG,GAAAA,CAAImmD,EAAS/zD,GACX,OAAI0pE,GAAWr3D,IAAI0hD,IACV2V,GAAW97D,IAAImmD,GAASnmD,IAAI5N,IAG9B,I,EAGTirB,MAAAA,CAAO8oC,EAAS/zD,GACd,IAAK0pE,GAAWr3D,IAAI0hD,GAClB,OAGF,MAAM6V,EAAcF,GAAW97D,IAAImmD,GAEnC6V,EAAY/7D,OAAO7N,GAGM,IAArB4pE,EAAY97D,MACd47D,GAAW77D,OAAOkmD,EAEtB,GC9CI8V,GAAU,IACVC,GAA0B,IAC1BC,GAAiB,gBAOjBC,GAAgB5rB,IAChBA,GAAYj+C,OAAO8pE,KAAO9pE,OAAO8pE,IAAIC,SAEvC9rB,EAAWA,EAASt/C,QAAQ,iBAAiB,CAACgC,EAAOyd,IAAQ,IAAG0rD,IAAIC,OAAO3rD,QAGtE6/B,GAIH+rB,GAAS15D,GACE,OAAXA,QAA8BnR,IAAXmR,EACb,GAAEA,IAGLhR,OAAO+F,UAAU8V,SAASvU,KAAK0J,GAAQ3P,MAAM,eAAe,GAAGiiB,cAOlEqnD,GAASC,IACb,GACEA,GAAUr3B,KAAKs3B,MAAMt3B,KAAKu3B,SAAWV,UAC9BhpE,SAAS2pE,eAAeH,IAEjC,OAAOA,CAAM,EAGTI,GAAmC1W,IACvC,IAAKA,EACH,OAAO,EAIT,IAAI,mBAAEtJ,EAAkB,gBAAEigB,GAAoBvqE,OAAO2hD,iBAAiBiS,GAEtE,MAAM4W,EAA0Bx6D,OAAO4gD,WAAWtG,GAC5CmgB,EAAuBz6D,OAAO4gD,WAAW2Z,GAG/C,OAAKC,GAA4BC,GAKjCngB,EAAqBA,EAAmB/jD,MAAM,KAAK,GACnDgkE,EAAkBA,EAAgBhkE,MAAM,KAAK,IAErCyJ,OAAO4gD,WAAWtG,GAAsBt6C,OAAO4gD,WAAW2Z,IAAoBZ,IAP7E,CAOoG,EAGzGe,GAAuB9W,IAC3BA,EAAQxK,cAAc,IAAIkC,MAAMse,IAAgB,EAG5C3V,GAAY3jD,MACXA,GAA4B,kBAAXA,KAIO,qBAAlBA,EAAOq6D,SAChBr6D,EAASA,EAAO,IAGgB,qBAApBA,EAAOw4B,UAGjB8hC,GAAat6D,GAEb2jD,GAAU3jD,GACLA,EAAOq6D,OAASr6D,EAAO,GAAKA,EAGf,kBAAXA,GAAuBA,EAAOpV,OAAS,EACzCwF,SAAS01C,cAAcyzB,GAAcv5D,IAGvC,KAGHu6D,GAAYjX,IAChB,IAAKK,GAAUL,IAAgD,IAApCA,EAAQkX,iBAAiB5vE,OAClD,OAAO,EAGT,MAAM6vE,EAAgF,YAA7DppB,iBAAiBiS,GAASoX,iBAAiB,cAE9DC,EAAgBrX,EAAQsX,QAAQ,uBAEtC,IAAKD,EACH,OAAOF,EAGT,GAAIE,IAAkBrX,EAAS,CAC7B,MAAMuX,EAAUvX,EAAQsX,QAAQ,WAChC,GAAIC,GAAWA,EAAQtgD,aAAeogD,EACpC,OAAO,EAGT,GAAgB,OAAZE,EACF,OAAO,CAEX,CAEA,OAAOJ,CAAgB,EAGnBK,GAAaxX,IACZA,GAAWA,EAAQ9qB,WAAauiC,KAAKC,iBAItC1X,EAAQjT,UAAUj6C,SAAS,cAIC,qBAArBktD,EAAQhe,SACVge,EAAQhe,SAGVge,EAAQrmB,aAAa,aAAoD,UAArCqmB,EAAQrnB,aAAa,cAG5Dg/B,GAAiB3X,IACrB,IAAKlzD,SAASu2D,gBAAgBlP,aAC5B,OAAO,KAIT,GAAmC,oBAAxB6L,EAAQiD,YAA4B,CAC7C,MAAM1xC,EAAOyuC,EAAQiD,cACrB,OAAO1xC,aAAgBkvC,WAAalvC,EAAO,IAC7C,CAEA,OAAIyuC,aAAmBS,WACdT,EAIJA,EAAQ/oC,WAIN0gD,GAAe3X,EAAQ/oC,YAHrB,IAGgC,EAGrC2gD,GAAOA,OAUPC,GAAS7X,IACbA,EAAQpR,YAAY,EAGhBkpB,GAAYA,IACZ1rE,OAAO2rE,SAAWjrE,SAAS6hD,KAAKhV,aAAa,qBACxCvtC,OAAO2rE,OAGT,KAGHC,GAA4B,GAE5BC,GAAqBzpE,IACG,YAAxB1B,SAASorE,YAENF,GAA0B1wE,QAC7BwF,SAAS+gD,iBAAiB,oBAAoB,KAC5C,IAAK,MAAMr/C,KAAYwpE,GACrBxpE,GACF,IAIJwpE,GAA0BhuE,KAAKwE,IAE/BA,GACF,EAGI2pE,GAAQA,IAAuC,QAAjCrrE,SAASu2D,gBAAgB1mC,IAEvCy7C,GAAqBjoC,IACzB8nC,IAAmB,KACjB,MAAMpwC,EAAIiwC,KAEV,GAAIjwC,EAAG,CACL,MAAMl9B,EAAOwlC,EAAOkoC,KACdC,EAAqBzwC,EAAEz0B,GAAGzI,GAChCk9B,EAAEz0B,GAAGzI,GAAQwlC,EAAOooC,gBACpB1wC,EAAEz0B,GAAGzI,GAAM6tE,YAAcroC,EACzBtI,EAAEz0B,GAAGzI,GAAM8tE,WAAa,KACtB5wC,EAAEz0B,GAAGzI,GAAQ2tE,EACNnoC,EAAOooC,gBAElB,IACA,EAGEG,GAAUA,CAACC,EAAkBv7D,EAAO,GAAIoJ,EAAemyD,IACxB,oBAArBA,EAAkCA,KAAoBv7D,GAAQoJ,EAGxEoyD,GAAyBA,CAACpqE,EAAUqqE,EAAmBC,GAAoB,KAC/E,IAAKA,EAEH,YADAJ,GAAQlqE,GAIV,MAAMuqE,EAAkB,EAClBC,EAAmBtC,GAAiCmC,GAAqBE,EAE/E,IAAIj4C,GAAS,EAEb,MAAMpT,EAAUA,EAAGliB,aACbA,IAAWqtE,IAIf/3C,GAAS,EACT+3C,EAAkBlrB,oBAAoBqoB,GAAgBtoD,GACtDgrD,GAAQlqE,GAAS,EAGnBqqE,EAAkBhrB,iBAAiBmoB,GAAgBtoD,GACnDZ,YAAW,KACJgU,GACHg2C,GAAqB+B,EACvB,GACCG,EAAiB,EAYhBC,GAAuBA,CAACxO,EAAMzS,EAAekhB,EAAeC,KAChE,MAAMC,EAAa3O,EAAKnjE,OACxB,IAAI4P,EAAQuzD,EAAKn/C,QAAQ0sC,GAIzB,OAAe,IAAX9gD,GACMgiE,GAAiBC,EAAiB1O,EAAK2O,EAAa,GAAK3O,EAAK,IAGxEvzD,GAASgiE,EAAgB,GAAK,EAE1BC,IACFjiE,GAASA,EAAQkiE,GAAcA,GAG1B3O,EAAKxrB,KAAK3b,IAAI,EAAG2b,KAAKC,IAAIhoC,EAAOkiE,EAAa,KAAI,EC7QrDC,GAAiB,qBACjBC,GAAiB,OACjBC,GAAgB,SAChBC,GAAgB,CAAC,EACvB,IAAIC,GAAW,EACf,MAAMC,GAAe,CACnBC,WAAY,YACZC,WAAY,YAGRC,GAAe,IAAI/8D,IAAI,CAC3B,QACA,WACA,UACA,YACA,cACA,aACA,iBACA,YACA,WACA,YACA,cACA,YACA,UACA,WACA,QACA,oBACA,aACA,YACA,WACA,cACA,cACA,cACA,YACA,eACA,gBACA,eACA,gBACA,aACA,QACA,OACA,SACA,QACA,SACA,SACA,UACA,WACA,OACA,SACA,eACA,SACA,OACA,mBACA,mBACA,QACA,QACA,WAOF,SAASg9D,GAAa9Z,EAASnxD,GAC7B,OAAQA,GAAQ,GAAEA,MAAQ4qE,QAAiBzZ,EAAQyZ,UAAYA,IACjE,CAEA,SAASM,GAAiB/Z,GACxB,MAAMnxD,EAAMirE,GAAa9Z,GAKzB,OAHAA,EAAQyZ,SAAW5qE,EACnB2qE,GAAc3qE,GAAO2qE,GAAc3qE,IAAQ,CAAC,EAErC2qE,GAAc3qE,EACvB,CAEA,SAASmrE,GAAiBha,EAAS5sD,GACjC,OAAO,SAASsa,EAAQnB,GAOtB,OANA0tD,GAAW1tD,EAAO,CAAE2tD,eAAgBla,IAEhCtyC,EAAQysD,QACVC,GAAa5iE,IAAIwoD,EAASzzC,EAAMvd,KAAMoE,GAGjCA,EAAGmK,MAAMyiD,EAAS,CAACzzC,G,CAE9B,CAEA,SAAS8tD,GAA2Bra,EAAS3V,EAAUj3C,GACrD,OAAO,SAASsa,EAAQnB,GACtB,MAAM+tD,EAActa,EAAQnQ,iBAAiBxF,GAE7C,IAAK,IAAI,OAAE7+C,GAAW+gB,EAAO/gB,GAAUA,IAAW7C,KAAM6C,EAASA,EAAOyrB,WACtE,IAAK,MAAMsjD,KAAcD,EACvB,GAAIC,IAAe/uE,EAUnB,OANAyuE,GAAW1tD,EAAO,CAAE2tD,eAAgB1uE,IAEhCkiB,EAAQysD,QACVC,GAAa5iE,IAAIwoD,EAASzzC,EAAMvd,KAAMq7C,EAAUj3C,GAG3CA,EAAGmK,MAAM/R,EAAQ,CAAC+gB,G,CAIjC,CAEA,SAASiuD,GAAYC,EAAQC,EAAUC,EAAqB,MAC1D,OAAOjvE,OAAOwQ,OAAOu+D,GAClBjL,MAAKjjD,GAASA,EAAMmuD,WAAaA,GAAYnuD,EAAMouD,qBAAuBA,GAC/E,CAEA,SAASC,GAAoBC,EAAmBntD,EAASotD,GACvD,MAAMC,EAAiC,kBAAZrtD,EAErBgtD,EAAWK,EAAcD,EAAsBptD,GAAWotD,EAChE,IAAIE,EAAYC,GAAaJ,GAM7B,OAJKhB,GAAav7D,IAAI08D,KACpBA,EAAYH,GAGP,CAACE,EAAaL,EAAUM,EACjC,CAEA,SAASE,GAAWlb,EAAS6a,EAAmBntD,EAASotD,EAAoBX,GAC3E,GAAiC,kBAAtBU,IAAmC7a,EAC5C,OAGF,IAAK+a,EAAaL,EAAUM,GAAaJ,GAAoBC,EAAmBntD,EAASotD,GAIzF,GAAID,KAAqBnB,GAAc,CACrC,MAAMyB,EAAe/nE,GACZ,SAAUmZ,GACf,IAAKA,EAAM6uD,eAAkB7uD,EAAM6uD,gBAAkB7uD,EAAM2tD,iBAAmB3tD,EAAM2tD,eAAepnE,SAASyZ,EAAM6uD,eAChH,OAAOhoE,EAAGJ,KAAKrK,KAAM4jB,E,EAK3BmuD,EAAWS,EAAaT,EAC1B,CAEA,MAAMD,EAASV,GAAiB/Z,GAC1Bqb,EAAWZ,EAAOO,KAAeP,EAAOO,GAAa,CAAC,GACtDM,EAAmBd,GAAYa,EAAUX,EAAUK,EAAcrtD,EAAU,MAEjF,GAAI4tD,EAGF,YAFAA,EAAiBnB,OAASmB,EAAiBnB,QAAUA,GAKvD,MAAMtrE,EAAMirE,GAAaY,EAAUG,EAAkB9vE,QAAQsuE,GAAgB,KACvEjmE,EAAK2nE,EACTV,GAA2Bra,EAAStyC,EAASgtD,GAC7CV,GAAiBha,EAAS0a,GAE5BtnE,EAAGunE,mBAAqBI,EAAcrtD,EAAU,KAChDta,EAAGsnE,SAAWA,EACdtnE,EAAG+mE,OAASA,EACZ/mE,EAAGqmE,SAAW5qE,EACdwsE,EAASxsE,GAAOuE,EAEhB4sD,EAAQnS,iBAAiBmtB,EAAW5nE,EAAI2nE,EAC1C,CAEA,SAASQ,GAAcvb,EAASya,EAAQO,EAAWttD,EAASitD,GAC1D,MAAMvnE,EAAKonE,GAAYC,EAAOO,GAAYttD,EAASitD,GAE9CvnE,IAIL4sD,EAAQrS,oBAAoBqtB,EAAW5nE,EAAI6qB,QAAQ08C,WAC5CF,EAAOO,GAAW5nE,EAAGqmE,UAC9B,CAEA,SAAS+B,GAAyBxb,EAASya,EAAQO,EAAWhmD,GAC5D,MAAMymD,EAAoBhB,EAAOO,IAAc,CAAC,EAEhD,IAAK,MAAOU,EAAYnvD,KAAU7gB,OAAO4I,QAAQmnE,GAC3CC,EAAW5nE,SAASkhB,IACtBumD,GAAcvb,EAASya,EAAQO,EAAWzuD,EAAMmuD,SAAUnuD,EAAMouD,mBAGtE,CAEA,SAASM,GAAa1uD,GAGpB,OADAA,EAAQA,EAAMxhB,QAAQuuE,GAAgB,IAC/BI,GAAantD,IAAUA,CAChC,CAEA,MAAM6tD,GAAe,CACnB7iE,EAAAA,CAAGyoD,EAASzzC,EAAOmB,EAASotD,GAC1BI,GAAWlb,EAASzzC,EAAOmB,EAASotD,GAAoB,E,EAG1Da,GAAAA,CAAI3b,EAASzzC,EAAOmB,EAASotD,GAC3BI,GAAWlb,EAASzzC,EAAOmB,EAASotD,GAAoB,E,EAG1DtjE,GAAAA,CAAIwoD,EAAS6a,EAAmBntD,EAASotD,GACvC,GAAiC,kBAAtBD,IAAmC7a,EAC5C,OAGF,MAAO+a,EAAaL,EAAUM,GAAaJ,GAAoBC,EAAmBntD,EAASotD,GACrFc,EAAcZ,IAAcH,EAC5BJ,EAASV,GAAiB/Z,GAC1Byb,EAAoBhB,EAAOO,IAAc,CAAC,EAC1Ca,EAAchB,EAAkB1tD,WAAW,KAEjD,GAAwB,qBAAbutD,EAAX,CAUA,GAAImB,EACF,IAAK,MAAMC,KAAgBpwE,OAAOiI,KAAK8mE,GACrCe,GAAyBxb,EAASya,EAAQqB,EAAcjB,EAAkBryD,MAAM,IAIpF,IAAK,MAAOuzD,EAAaxvD,KAAU7gB,OAAO4I,QAAQmnE,GAAoB,CACpE,MAAMC,EAAaK,EAAYhxE,QAAQwuE,GAAe,IAEjDqC,IAAef,EAAkB/mE,SAAS4nE,IAC7CH,GAAcvb,EAASya,EAAQO,EAAWzuD,EAAMmuD,SAAUnuD,EAAMouD,mBAEpE,CAdA,KARA,CAEE,IAAKjvE,OAAOiI,KAAK8nE,GAAmBn0E,OAClC,OAGFi0E,GAAcvb,EAASya,EAAQO,EAAWN,EAAUK,EAAcrtD,EAAU,KAE9E,C,EAiBFrV,OAAAA,CAAQ2nD,EAASzzC,EAAOnP,GACtB,GAAqB,kBAAVmP,IAAuByzC,EAChC,OAAO,KAGT,MAAMn4B,EAAIiwC,KACJkD,EAAYC,GAAa1uD,GACzBqvD,EAAcrvD,IAAUyuD,EAE9B,IAAIgB,EAAc,KACdC,GAAU,EACVC,GAAiB,EACjBC,GAAmB,EAEnBP,GAAe/zC,IACjBm0C,EAAcn0C,EAAE6vB,MAAMnrC,EAAOnP,GAE7ByqB,EAAEm4B,GAAS3nD,QAAQ2jE,GACnBC,GAAWD,EAAYI,uBACvBF,GAAkBF,EAAYK,gCAC9BF,EAAmBH,EAAYM,sBAGjC,MAAMC,EAAMtC,GAAW,IAAIviB,MAAMnrC,EAAO,CAAE0vD,UAASO,YAAY,IAASp/D,GAcxE,OAZI++D,GACFI,EAAIniB,iBAGF8hB,GACFlc,EAAQxK,cAAc+mB,GAGpBA,EAAIJ,kBAAoBH,GAC1BA,EAAY5hB,iBAGPmiB,CACT,GAGF,SAAStC,GAAWlnE,EAAK4nD,EAAO,CAAC,GAC/B,IAAK,MAAO1uD,EAAKZ,KAAUK,OAAO4I,QAAQqmD,GACxC,IACE5nD,EAAI9G,GAAOZ,C,CACX,MAAAoxE,GACA/wE,OAAO69B,eAAex2B,EAAK9G,EAAK,CAC9BkhC,cAAc,EACdtzB,GAAAA,GACE,OAAOxO,CACT,GAEJ,CAGF,OAAO0H,CACT,CCnTA,SAAS2pE,GAAcrxE,GACrB,GAAc,SAAVA,EACF,OAAO,EAGT,GAAc,UAAVA,EACF,OAAO,EAGT,GAAIA,IAAU+Q,OAAO/Q,GAAOkc,WAC1B,OAAOnL,OAAO/Q,GAGhB,GAAc,KAAVA,GAA0B,SAAVA,EAClB,OAAO,KAGT,GAAqB,kBAAVA,EACT,OAAOA,EAGT,IACE,OAAOsB,KAAKC,MAAM+vE,mBAAmBtxE,G,CACrC,MAAAoxE,GACA,OAAOpxE,CACT,CACF,CAEA,SAASuxE,GAAiB3wE,GACxB,OAAOA,EAAIlB,QAAQ,UAAU8xE,GAAQ,IAAGA,EAAI7tD,iBAC9C,CAEA,MAAM8tD,GAAc,CAClBC,gBAAAA,CAAiB/c,EAAS/zD,EAAKZ,GAC7B20D,EAAQxc,aAAc,WAAUo5B,GAAiB3wE,KAAQZ,E,EAG3D2xE,mBAAAA,CAAoBhd,EAAS/zD,GAC3B+zD,EAAQhR,gBAAiB,WAAU4tB,GAAiB3wE,K,EAGtDgxE,iBAAAA,CAAkBjd,GAChB,IAAKA,EACH,MAAO,CAAC,EAGV,MAAMvL,EAAa,CAAC,EACdyoB,EAASxxE,OAAOiI,KAAKqsD,EAAQmd,SAASngE,QAAO/Q,GAAOA,EAAIkhB,WAAW,QAAUlhB,EAAIkhB,WAAW,cAElG,IAAK,MAAMlhB,KAAOixE,EAAQ,CACxB,IAAIE,EAAUnxE,EAAIlB,QAAQ,MAAO,IACjCqyE,EAAUA,EAAQ9yE,OAAO,GAAG0kB,cAAgBouD,EAAQ50D,MAAM,EAAG40D,EAAQ91E,QACrEmtD,EAAW2oB,GAAWV,GAAc1c,EAAQmd,QAAQlxE,GACtD,CAEA,OAAOwoD,C,EAGT4oB,gBAAAA,CAAiBrd,EAAS/zD,GACxB,OAAOywE,GAAc1c,EAAQrnB,aAAc,WAAUikC,GAAiB3wE,MACxE,GCrDF,MAAMqxE,GAEJ,kBAAWC,GACT,MAAO,CAAC,CACV,CAEA,sBAAWC,GACT,MAAO,CAAC,CACV,CAEA,eAAWnF,GACT,MAAM,IAAIrxE,MAAM,sEAClB,CAEAy2E,UAAAA,CAAWxvE,GAIT,OAHAA,EAAStF,KAAK+0E,gBAAgBzvE,GAC9BA,EAAStF,KAAKg1E,kBAAkB1vE,GAChCtF,KAAKi1E,iBAAiB3vE,GACfA,CACT,CAEA0vE,iBAAAA,CAAkB1vE,GAChB,OAAOA,CACT,CAEAyvE,eAAAA,CAAgBzvE,EAAQ+xD,GACtB,MAAM6d,EAAaxd,GAAUL,GAAW8c,GAAYO,iBAAiBrd,EAAS,UAAY,CAAC,EAE3F,MAAO,IACFr3D,KAAK+B,YAAY6yE,WACM,kBAAfM,EAA0BA,EAAa,CAAC,KAC/Cxd,GAAUL,GAAW8c,GAAYG,kBAAkBjd,GAAW,CAAC,KAC7C,kBAAX/xD,EAAsBA,EAAS,CAAC,EAE/C,CAEA2vE,gBAAAA,CAAiB3vE,EAAQ6vE,EAAcn1E,KAAK+B,YAAY8yE,aACtD,IAAK,MAAOpc,EAAUluB,KAAkBxnC,OAAO4I,QAAQwpE,GAAc,CACnE,MAAMzyE,EAAQ4C,EAAOmzD,GACf2c,EAAY1d,GAAUh1D,GAAS,UAAY+qE,GAAO/qE,GAExD,IAAK,IAAI+3B,OAAO8P,GAAe/iC,KAAK4tE,GAClC,MAAM,IAAIC,UACP,GAAEr1E,KAAK+B,YAAY2tE,KAAKtwB,0BAA0BqZ,qBAA4B2c,yBAAiC7qC,MAGtH,CACF,EC7CF,MAAM+qC,GAAU,QAMhB,MAAMC,WAAsBZ,GAC1B5yE,WAAAA,CAAYs1D,EAAS/xD,GACnBsD,QAEAyuD,EAAUgX,GAAWhX,GAChBA,IAILr3D,KAAKw1E,SAAWne,EAChBr3D,KAAKy1E,QAAUz1E,KAAK80E,WAAWxvE,GAE/B2nE,GAAK56D,IAAIrS,KAAKw1E,SAAUx1E,KAAK+B,YAAY2zE,SAAU11E,MACrD,CAGA21E,OAAAA,GACE1I,GAAK1+C,OAAOvuB,KAAKw1E,SAAUx1E,KAAK+B,YAAY2zE,UAC5CjE,GAAa5iE,IAAI7O,KAAKw1E,SAAUx1E,KAAK+B,YAAY6zE,WAEjD,IAAK,MAAM5nB,KAAgBjrD,OAAOqR,oBAAoBpU,MACpDA,KAAKguD,GAAgB,IAEzB,CAEA6nB,cAAAA,CAAehwE,EAAUwxD,EAASye,GAAa,GAC7C7F,GAAuBpqE,EAAUwxD,EAASye,EAC5C,CAEAhB,UAAAA,CAAWxvE,GAIT,OAHAA,EAAStF,KAAK+0E,gBAAgBzvE,EAAQtF,KAAKw1E,UAC3ClwE,EAAStF,KAAKg1E,kBAAkB1vE,GAChCtF,KAAKi1E,iBAAiB3vE,GACfA,CACT,CAGA,kBAAOywE,CAAY1e,GACjB,OAAO4V,GAAK/7D,IAAIm9D,GAAWhX,GAAUr3D,KAAK01E,SAC5C,CAEA,0BAAOM,CAAoB3e,EAAS/xD,EAAS,CAAC,GAC5C,OAAOtF,KAAK+1E,YAAY1e,IAAY,IAAIr3D,KAAKq3D,EAA2B,kBAAX/xD,EAAsBA,EAAS,KAC9F,CAEA,kBAAWgwE,GACT,OAAOA,EACT,CAEA,mBAAWI,GACT,MAAQ,MAAK11E,KAAK0vE,MACpB,CAEA,oBAAWkG,GACT,MAAQ,IAAG51E,KAAK01E,UAClB,CAEA,gBAAOO,CAAUj0E,GACf,MAAQ,GAAEA,IAAOhC,KAAK41E,WACxB,ECxEF,MAAMM,GAAc7e,IAClB,IAAI3V,EAAW2V,EAAQrnB,aAAa,kBAEpC,IAAK0R,GAAyB,MAAbA,EAAkB,CACjC,IAAIy0B,EAAgB9e,EAAQrnB,aAAa,QAMzC,IAAKmmC,IAAmBA,EAAchrE,SAAS,OAASgrE,EAAc3xD,WAAW,KAC/E,OAAO,KAIL2xD,EAAchrE,SAAS,OAASgrE,EAAc3xD,WAAW,OAC3D2xD,EAAiB,IAAGA,EAAcnsE,MAAM,KAAK,MAG/C03C,EAAWy0B,GAAmC,MAAlBA,EAAwBA,EAAcvxD,OAAS,IAC7E,CAEA,OAAO88B,EAAWA,EAAS13C,MAAM,KAAKQ,KAAI4rE,GAAO9I,GAAc8I,KAAM52E,KAAK,KAAO,IAAI,EAGjF62E,GAAiB,CACrBxP,IAAAA,CAAKnlB,EAAU2V,EAAUlzD,SAASu2D,iBAChC,MAAO,GAAGzxC,UAAUilC,QAAQplD,UAAUo+C,iBAAiB78C,KAAKgtD,EAAS3V,G,EAGvE40B,OAAAA,CAAQ50B,EAAU2V,EAAUlzD,SAASu2D,iBACnC,OAAOxM,QAAQplD,UAAU+wC,cAAcxvC,KAAKgtD,EAAS3V,E,EAGvDt4B,QAAAA,CAASiuC,EAAS3V,GAChB,MAAO,GAAGz4B,UAAUouC,EAAQjuC,UAAU/U,QAAOkV,GAASA,EAAMuS,QAAQ4lB,I,EAGtE60B,OAAAA,CAAQlf,EAAS3V,GACf,MAAM60B,EAAU,GAChB,IAAIC,EAAWnf,EAAQ/oC,WAAWqgD,QAAQjtB,GAE1C,MAAO80B,EACLD,EAAQl1E,KAAKm1E,GACbA,EAAWA,EAASloD,WAAWqgD,QAAQjtB,GAGzC,OAAO60B,C,EAGT9vD,IAAAA,CAAK4wC,EAAS3V,GACZ,IAAI+0B,EAAWpf,EAAQqf,uBAEvB,MAAOD,EAAU,CACf,GAAIA,EAAS36C,QAAQ4lB,GACnB,MAAO,CAAC+0B,GAGVA,EAAWA,EAASC,sBACtB,CAEA,MAAO,E,EAGTt+D,IAAAA,CAAKi/C,EAAS3V,GACZ,IAAItpC,EAAOi/C,EAAQsf,mBAEnB,MAAOv+D,EAAM,CACX,GAAIA,EAAK0jB,QAAQ4lB,GACf,MAAO,CAACtpC,GAGVA,EAAOA,EAAKu+D,kBACd,CAEA,MAAO,E,EAGTC,iBAAAA,CAAkBvf,GAChB,MAAMwf,EAAa,CACjB,IACA,SACA,QACA,WACA,SACA,UACA,aACA,4BACArsE,KAAIk3C,GAAa,GAAEA,2BAAiCliD,KAAK,KAE3D,OAAOQ,KAAK6mE,KAAKgQ,EAAYxf,GAAShjD,QAAOmW,IAAOqkD,GAAWrkD,IAAO8jD,GAAU9jD,I,EAGlFssD,sBAAAA,CAAuBzf,GACrB,MAAM3V,EAAWw0B,GAAY7e,GAE7B,OAAI3V,GACK20B,GAAeC,QAAQ50B,GAAYA,EAGrC,I,EAGTq1B,sBAAAA,CAAuB1f,GACrB,MAAM3V,EAAWw0B,GAAY7e,GAE7B,OAAO3V,EAAW20B,GAAeC,QAAQ50B,GAAY,I,EAGvDs1B,+BAAAA,CAAgC3f,GAC9B,MAAM3V,EAAWw0B,GAAY7e,GAE7B,OAAO3V,EAAW20B,GAAexP,KAAKnlB,GAAY,EACpD,GC/GIu1B,GAAuBA,CAAC54D,EAAWvG,EAAS,UAChD,MAAMo/D,EAAc,gBAAe74D,EAAUu3D,YACvC5zE,EAAOqc,EAAUqxD,KAEvB+B,GAAa7iE,GAAGzK,SAAU+yE,EAAa,qBAAoBl1E,OAAU,SAAU4hB,GAK7E,GAJI,CAAC,IAAK,QAAQzY,SAASnL,KAAKmsC,UAC9BvoB,EAAM6tC,iBAGJod,GAAW7uE,MACb,OAGF,MAAM6C,EAASwzE,GAAeU,uBAAuB/2E,OAASA,KAAK2uE,QAAS,IAAG3sE,KACzEoc,EAAWC,EAAU23D,oBAAoBnzE,GAG/Cub,EAAStG,IACX,GAAE,ECbEq/D,GAAO,QACPC,GAAW,WACXC,GAAa,IAAGD,KAEhBE,GAAe,QAAOD,KACtBE,GAAgB,SAAQF,KACxBG,GAAkB,OAClBC,GAAkB,OAMxB,MAAMC,WAAcnC,GAElB,eAAW7F,GACT,OAAOyH,EACT,CAGA/uE,KAAAA,GACE,MAAMuvE,EAAalG,GAAa/hE,QAAQ1P,KAAKw1E,SAAU8B,IAEvD,GAAIK,EAAWnE,iBACb,OAGFxzE,KAAKw1E,SAASpxB,UAAU71B,OAAOkpD,IAE/B,MAAM3B,EAAa91E,KAAKw1E,SAASpxB,UAAUj6C,SAASqtE,IACpDx3E,KAAK61E,gBAAe,IAAM71E,KAAK43E,mBAAmB53E,KAAKw1E,SAAUM,EACnE,CAGA8B,eAAAA,GACE53E,KAAKw1E,SAASjnD,SACdkjD,GAAa/hE,QAAQ1P,KAAKw1E,SAAU+B,IACpCv3E,KAAK21E,SACP,CAGA,sBAAO/F,CAAgBtqE,GACrB,OAAOtF,KAAK63E,MAAK,WACf,MAAMxuE,EAAOquE,GAAM1B,oBAAoBh2E,MAEvC,GAAsB,kBAAXsF,EAAX,CAIA,QAAqB1C,IAAjByG,EAAK/D,IAAyBA,EAAOkf,WAAW,MAAmB,gBAAXlf,EAC1D,MAAM,IAAI+vE,UAAW,oBAAmB/vE,MAG1C+D,EAAK/D,GAAQtF,KANb,CAOF,GACF,EAOFi3E,GAAqBS,GAAO,SAM5BjI,GAAmBiI,ICrEnB,MAAMI,GAAO,SACPC,GAAW,YACXC,GAAa,IAAGD,KAChBE,GAAe,YAEfC,GAAoB,SACpBC,GAAuB,4BACvBC,GAAwB,QAAOJ,KAAYC,KAMjD,MAAMI,WAAe9C,GAEnB,eAAW7F,GACT,OAAOoI,EACT,CAGAQ,MAAAA,GAEEt4E,KAAKw1E,SAAS36B,aAAa,eAAgB76C,KAAKw1E,SAASpxB,UAAUk0B,OAAOJ,IAC5E,CAGA,sBAAOtI,CAAgBtqE,GACrB,OAAOtF,KAAK63E,MAAK,WACf,MAAMxuE,EAAOgvE,GAAOrC,oBAAoBh2E,MAEzB,WAAXsF,GACF+D,EAAK/D,IAET,GACF,EAOFmsE,GAAa7iE,GAAGzK,SAAUi0E,GAAsBD,IAAsBv0D,IACpEA,EAAM6tC,iBAEN,MAAMS,EAAStuC,EAAM/gB,OAAO8rE,QAAQwJ,IAC9B9uE,EAAOgvE,GAAOrC,oBAAoB9jB,GAExC7oD,EAAKivE,QAAQ,IAOf7I,GAAmB4I,ICtDnB,MAAME,GAAO,QACPC,GAAY,YACZC,GAAoB,aAAYD,KAChCE,GAAmB,YAAWF,KAC9BG,GAAkB,WAAUH,KAC5BI,GAAqB,cAAaJ,KAClCK,GAAmB,YAAWL,KAC9BM,GAAqB,QACrBC,GAAmB,MACnBC,GAA2B,gBAC3BC,GAAkB,GAElBC,GAAU,CACdC,YAAa,KACbC,aAAc,KACdC,cAAe,MAGXC,GAAc,CAClBH,YAAa,kBACbC,aAAc,kBACdC,cAAe,mBAOjB,MAAME,WAAc5E,GAClB5yE,WAAAA,CAAYs1D,EAAS/xD,GACnBsD,QACA5I,KAAKw1E,SAAWne,EAEXA,GAAYkiB,GAAMC,gBAIvBx5E,KAAKy1E,QAAUz1E,KAAK80E,WAAWxvE,GAC/BtF,KAAKy5E,QAAU,EACfz5E,KAAK05E,sBAAwBpkD,QAAQ7xB,OAAOk2E,cAC5C35E,KAAK45E,cACP,CAGA,kBAAWhF,GACT,OAAOsE,EACT,CAEA,sBAAWrE,GACT,OAAOyE,EACT,CAEA,eAAW5J,GACT,OAAO6I,EACT,CAGA5C,OAAAA,GACElE,GAAa5iE,IAAI7O,KAAKw1E,SAAUgD,GAClC,CAGAqB,MAAAA,CAAOj2D,GACA5jB,KAAK05E,sBAMN15E,KAAK85E,wBAAwBl2D,KAC/B5jB,KAAKy5E,QAAU71D,EAAMm2D,SANrB/5E,KAAKy5E,QAAU71D,EAAMo2D,QAAQ,GAAGD,OAQpC,CAEAE,IAAAA,CAAKr2D,GACC5jB,KAAK85E,wBAAwBl2D,KAC/B5jB,KAAKy5E,QAAU71D,EAAMm2D,QAAU/5E,KAAKy5E,SAGtCz5E,KAAKk6E,eACLnK,GAAQ/vE,KAAKy1E,QAAQ0D,YACvB,CAEAgB,KAAAA,CAAMv2D,GACJ5jB,KAAKy5E,QAAU71D,EAAMo2D,SAAWp2D,EAAMo2D,QAAQr7E,OAAS,EACrD,EACAilB,EAAMo2D,QAAQ,GAAGD,QAAU/5E,KAAKy5E,OACpC,CAEAS,YAAAA,GACE,MAAME,EAAY9jC,KAAK8jB,IAAIp6D,KAAKy5E,SAEhC,GAAIW,GAAanB,GACf,OAGF,MAAM3X,EAAY8Y,EAAYp6E,KAAKy5E,QAEnCz5E,KAAKy5E,QAAU,EAEVnY,GAILyO,GAAQzO,EAAY,EAAIthE,KAAKy1E,QAAQ4D,cAAgBr5E,KAAKy1E,QAAQ2D,aACpE,CAEAQ,WAAAA,GACM55E,KAAK05E,uBACPjI,GAAa7iE,GAAG5O,KAAKw1E,SAAUoD,IAAmBh1D,GAAS5jB,KAAK65E,OAAOj2D,KACvE6tD,GAAa7iE,GAAG5O,KAAKw1E,SAAUqD,IAAiBj1D,GAAS5jB,KAAKi6E,KAAKr2D,KAEnE5jB,KAAKw1E,SAASpxB,UAAUhtC,IAAI4hE,MAE5BvH,GAAa7iE,GAAG5O,KAAKw1E,SAAUiD,IAAkB70D,GAAS5jB,KAAK65E,OAAOj2D,KACtE6tD,GAAa7iE,GAAG5O,KAAKw1E,SAAUkD,IAAiB90D,GAAS5jB,KAAKm6E,MAAMv2D,KACpE6tD,GAAa7iE,GAAG5O,KAAKw1E,SAAUmD,IAAgB/0D,GAAS5jB,KAAKi6E,KAAKr2D,KAEtE,CAEAk2D,uBAAAA,CAAwBl2D,GACtB,OAAO5jB,KAAK05E,wBAA0B91D,EAAMy2D,cAAgBtB,IAAoBn1D,EAAMy2D,cAAgBvB,GACxG,CAGA,kBAAOU,GACL,MAAO,iBAAkBr1E,SAASu2D,iBAAmBpzD,UAAUgzE,eAAiB,CAClF,ECrHF,MAAMC,GAAO,WACPC,GAAW,cACXC,GAAa,IAAGD,KAChBE,GAAe,YAEfC,GAAiB,YACjBC,GAAkB,aAClBC,GAAyB,IAEzBC,GAAa,OACbC,GAAa,OACbC,GAAiB,OACjBC,GAAkB,QAElBC,GAAe,QAAOT,KACtBU,GAAc,OAAMV,KACpBW,GAAiB,UAASX,KAC1BY,GAAoB,aAAYZ,KAChCa,GAAoB,aAAYb,KAChCc,GAAoB,YAAWd,KAC/Be,GAAuB,OAAMf,KAAYC,KACzCe,GAAwB,QAAOhB,KAAYC,KAE3CgB,GAAsB,WACtBC,GAAoB,SACpBC,GAAmB,QACnBC,GAAiB,oBACjBC,GAAmB,sBACnBC,GAAkB,qBAClBC,GAAkB,qBAElBC,GAAkB,UAClBC,GAAgB,iBAChBC,GAAuBF,GAAkBC,GACzCE,GAAoB,qBACpBC,GAAsB,uBACtBC,GAAsB,sCACtBC,GAAqB,4BAErBC,GAAmB,CACvB,CAAC7B,IAAiBM,GAClB,CAACL,IAAkBI,IAGfyB,GAAU,CACdC,SAAU,IACVC,UAAU,EACVC,MAAO,QACPC,MAAM,EACNC,OAAO,EACP7lE,MAAM,GAGF8lE,GAAc,CAClBL,SAAU,mBACVC,SAAU,UACVC,MAAO,mBACPC,KAAM,mBACNC,MAAO,UACP7lE,KAAM,WAOR,MAAM+lE,WAAiBzH,GACrBxzE,WAAAA,CAAYs1D,EAAS/xD,GACnBsD,MAAMyuD,EAAS/xD,GAEftF,KAAKi9E,UAAY,KACjBj9E,KAAKk9E,eAAiB,KACtBl9E,KAAKm9E,YAAa,EAClBn9E,KAAKo9E,aAAe,KACpBp9E,KAAKq9E,aAAe,KAEpBr9E,KAAKs9E,mBAAqBjH,GAAeC,QAAQ+F,GAAqBr8E,KAAKw1E,UAC3Ex1E,KAAKu9E,qBAEDv9E,KAAKy1E,QAAQoH,OAASnB,IACxB17E,KAAKw9E,OAET,CAGA,kBAAW5I,GACT,OAAO6H,EACT,CAEA,sBAAW5H,GACT,OAAOkI,EACT,CAEA,eAAWrN,GACT,OAAO6K,EACT,CAGAniE,IAAAA,GACEpY,KAAKy9E,OAAO3C,GACd,CAEA4C,eAAAA,IAIOv5E,SAASw5E,QAAUrP,GAAUtuE,KAAKw1E,WACrCx1E,KAAKoY,MAET,CAEAqO,IAAAA,GACEzmB,KAAKy9E,OAAO1C,GACd,CAEA6B,KAAAA,GACM58E,KAAKm9E,YACPhP,GAAqBnuE,KAAKw1E,UAG5Bx1E,KAAK49E,gBACP,CAEAJ,KAAAA,GACEx9E,KAAK49E,iBACL59E,KAAK69E,kBAEL79E,KAAKi9E,UAAYa,aAAY,IAAM99E,KAAK09E,mBAAmB19E,KAAKy1E,QAAQiH,SAC1E,CAEAqB,iBAAAA,GACO/9E,KAAKy1E,QAAQoH,OAId78E,KAAKm9E,WACP1L,GAAauB,IAAIhzE,KAAKw1E,SAAU2F,IAAY,IAAMn7E,KAAKw9E,UAIzDx9E,KAAKw9E,QACP,CAEAj4C,EAAAA,CAAGh3B,GACD,MAAMyvE,EAAQh+E,KAAKi+E,YACnB,GAAI1vE,EAAQyvE,EAAMr/E,OAAS,GAAK4P,EAAQ,EACtC,OAGF,GAAIvO,KAAKm9E,WAEP,YADA1L,GAAauB,IAAIhzE,KAAKw1E,SAAU2F,IAAY,IAAMn7E,KAAKulC,GAAGh3B,KAI5D,MAAM2vE,EAAcl+E,KAAKm+E,cAAcn+E,KAAKo+E,cAC5C,GAAIF,IAAgB3vE,EAClB,OAGF,MAAMs8D,EAAQt8D,EAAQ2vE,EAAcpD,GAAaC,GAEjD/6E,KAAKy9E,OAAO5S,EAAOmT,EAAMzvE,GAC3B,CAEAonE,OAAAA,GACM31E,KAAKq9E,cACPr9E,KAAKq9E,aAAa1H,UAGpB/sE,MAAM+sE,SACR,CAGAX,iBAAAA,CAAkB1vE,GAEhB,OADAA,EAAO+4E,gBAAkB/4E,EAAOo3E,SACzBp3E,CACT,CAEAi4E,kBAAAA,GACMv9E,KAAKy1E,QAAQkH,UACflL,GAAa7iE,GAAG5O,KAAKw1E,SAAU4F,IAAex3D,GAAS5jB,KAAKs+E,SAAS16D,KAG5C,UAAvB5jB,KAAKy1E,QAAQmH,QACfnL,GAAa7iE,GAAG5O,KAAKw1E,SAAU6F,IAAkB,IAAMr7E,KAAK48E,UAC5DnL,GAAa7iE,GAAG5O,KAAKw1E,SAAU8F,IAAkB,IAAMt7E,KAAK+9E,uBAG1D/9E,KAAKy1E,QAAQqH,OAASvD,GAAMC,eAC9Bx5E,KAAKu+E,yBAET,CAEAA,uBAAAA,GACE,IAAK,MAAMC,KAAOnI,GAAexP,KAAKuV,GAAmBp8E,KAAKw1E,UAC5D/D,GAAa7iE,GAAG4vE,EAAKjD,IAAkB33D,GAASA,EAAM6tC,mBAGxD,MAAMgtB,EAAcA,KACS,UAAvBz+E,KAAKy1E,QAAQmH,QAYjB58E,KAAK48E,QACD58E,KAAKo9E,cACPsB,aAAa1+E,KAAKo9E,cAGpBp9E,KAAKo9E,aAAej5D,YAAW,IAAMnkB,KAAK+9E,qBAAqBlD,GAAyB76E,KAAKy1E,QAAQiH,UAAS,EAG1GiC,EAAc,CAClBvF,aAAcA,IAAMp5E,KAAKy9E,OAAOz9E,KAAK4+E,kBAAkB5D,KACvD3B,cAAeA,IAAMr5E,KAAKy9E,OAAOz9E,KAAK4+E,kBAAkB3D,KACxD9B,YAAasF,GAGfz+E,KAAKq9E,aAAe,IAAI9D,GAAMv5E,KAAKw1E,SAAUmJ,EAC/C,CAEAL,QAAAA,CAAS16D,GACP,GAAI,kBAAkBpc,KAAKoc,EAAM/gB,OAAOspC,SACtC,OAGF,MAAMm1B,EAAYkb,GAAiB54D,EAAMtgB,KACrCg+D,IACF19C,EAAM6tC,iBACNzxD,KAAKy9E,OAAOz9E,KAAK4+E,kBAAkBtd,IAEvC,CAEA6c,aAAAA,CAAc9mB,GACZ,OAAOr3D,KAAKi+E,YAAYt7D,QAAQ00C,EAClC,CAEAwnB,0BAAAA,CAA2BtwE,GACzB,IAAKvO,KAAKs9E,mBACR,OAGF,MAAMwB,EAAkBzI,GAAeC,QAAQ2F,GAAiBj8E,KAAKs9E,oBAErEwB,EAAgB16B,UAAU71B,OAAOotD,IACjCmD,EAAgBz4B,gBAAgB,gBAEhC,MAAM04B,EAAqB1I,GAAeC,QAAS,sBAAqB/nE,MAAWvO,KAAKs9E,oBAEpFyB,IACFA,EAAmB36B,UAAUhtC,IAAIukE,IACjCoD,EAAmBlkC,aAAa,eAAgB,QAEpD,CAEAgjC,eAAAA,GACE,MAAMxmB,EAAUr3D,KAAKk9E,gBAAkBl9E,KAAKo+E,aAE5C,IAAK/mB,EACH,OAGF,MAAM2nB,EAAkBvrE,OAAOtO,SAASkyD,EAAQrnB,aAAa,oBAAqB,IAElFhwC,KAAKy1E,QAAQiH,SAAWsC,GAAmBh/E,KAAKy1E,QAAQ4I,eAC1D,CAEAZ,MAAAA,CAAO5S,EAAOxT,EAAU,MACtB,GAAIr3D,KAAKm9E,WACP,OAGF,MAAM9tB,EAAgBrvD,KAAKo+E,aACrBa,EAASpU,IAAUiQ,GACnBoE,EAAc7nB,GAAWiZ,GAAqBtwE,KAAKi+E,YAAa5uB,EAAe4vB,EAAQj/E,KAAKy1E,QAAQx+D,MAE1G,GAAIioE,IAAgB7vB,EAClB,OAGF,MAAM8vB,EAAmBn/E,KAAKm+E,cAAce,GAEtCjyD,EAAegpD,GACZxE,GAAa/hE,QAAQ1P,KAAKw1E,SAAUS,EAAW,CACpDxD,cAAeyM,EACf5d,UAAWthE,KAAKo/E,kBAAkBvU,GAClC9sC,KAAM/9B,KAAKm+E,cAAc9uB,GACzB9pB,GAAI45C,IAIFE,EAAapyD,EAAaiuD,IAEhC,GAAImE,EAAW7L,iBACb,OAGF,IAAKnkB,IAAkB6vB,EAGrB,OAGF,MAAMI,EAAYhqD,QAAQt1B,KAAKi9E,WAC/Bj9E,KAAK48E,QAEL58E,KAAKm9E,YAAa,EAElBn9E,KAAK6+E,2BAA2BM,GAChCn/E,KAAKk9E,eAAiBgC,EAEtB,MAAMK,EAAuBN,EAASnD,GAAmBD,GACnD2D,EAAiBP,EAASlD,GAAkBC,GAElDkD,EAAY96B,UAAUhtC,IAAIooE,GAE1BtQ,GAAOgQ,GAEP7vB,EAAcjL,UAAUhtC,IAAImoE,GAC5BL,EAAY96B,UAAUhtC,IAAImoE,GAE1B,MAAME,EAAmBA,KACvBP,EAAY96B,UAAU71B,OAAOgxD,EAAsBC,GACnDN,EAAY96B,UAAUhtC,IAAIukE,IAE1BtsB,EAAcjL,UAAU71B,OAAOotD,GAAmB6D,EAAgBD,GAElEv/E,KAAKm9E,YAAa,EAElBlwD,EAAakuD,GAAW,EAG1Bn7E,KAAK61E,eAAe4J,EAAkBpwB,EAAervD,KAAK0/E,eAEtDJ,GACFt/E,KAAKw9E,OAET,CAEAkC,WAAAA,GACE,OAAO1/E,KAAKw1E,SAASpxB,UAAUj6C,SAASyxE,GAC1C,CAEAwC,UAAAA,GACE,OAAO/H,GAAeC,QAAQ6F,GAAsBn8E,KAAKw1E,SAC3D,CAEAyI,SAAAA,GACE,OAAO5H,GAAexP,KAAKqV,GAAel8E,KAAKw1E,SACjD,CAEAoI,cAAAA,GACM59E,KAAKi9E,YACP0C,cAAc3/E,KAAKi9E,WACnBj9E,KAAKi9E,UAAY,KAErB,CAEA2B,iBAAAA,CAAkBtd,GAChB,OAAIkO,KACKlO,IAAc0Z,GAAiBD,GAAaD,GAG9CxZ,IAAc0Z,GAAiBF,GAAaC,EACrD,CAEAqE,iBAAAA,CAAkBvU,GAChB,OAAI2E,KACK3E,IAAUkQ,GAAaC,GAAiBC,GAG1CpQ,IAAUkQ,GAAaE,GAAkBD,EAClD,CAGA,sBAAOpL,CAAgBtqE,GACrB,OAAOtF,KAAK63E,MAAK,WACf,MAAMxuE,EAAO2zE,GAAShH,oBAAoBh2E,KAAMsF,GAEhD,GAAsB,kBAAXA,GAKX,GAAsB,kBAAXA,EAAqB,CAC9B,QAAqB1C,IAAjByG,EAAK/D,IAAyBA,EAAOkf,WAAW,MAAmB,gBAAXlf,EAC1D,MAAM,IAAI+vE,UAAW,oBAAmB/vE,MAG1C+D,EAAK/D,IACP,OAVE+D,EAAKk8B,GAAGjgC,EAWZ,GACF,EAOFmsE,GAAa7iE,GAAGzK,SAAUs3E,GAAsBa,IAAqB,SAAU14D,GAC7E,MAAM/gB,EAASwzE,GAAeU,uBAAuB/2E,MAErD,IAAK6C,IAAWA,EAAOuhD,UAAUj6C,SAASuxE,IACxC,OAGF93D,EAAM6tC,iBAEN,MAAMmuB,EAAW5C,GAAShH,oBAAoBnzE,GACxCg9E,EAAa7/E,KAAKgwC,aAAa,oBAErC,OAAI6vC,GACFD,EAASr6C,GAAGs6C,QACZD,EAAS7B,qBAIyC,SAAhD5J,GAAYO,iBAAiB10E,KAAM,UACrC4/E,EAASxnE,YACTwnE,EAAS7B,sBAIX6B,EAASn5D,YACTm5D,EAAS7B,oBACX,IAEAtM,GAAa7iE,GAAGnL,OAAQ+3E,IAAqB,KAC3C,MAAMsE,EAAYzJ,GAAexP,KAAK0V,IAEtC,IAAK,MAAMqD,KAAYE,EACrB9C,GAAShH,oBAAoB4J,EAC/B,IAOFnQ,GAAmBuN,ICncnB,MAAM+C,GAAO,WACPC,GAAW,cACXC,GAAa,IAAGD,KAChBE,GAAe,YAEfC,GAAc,OAAMF,KACpBG,GAAe,QAAOH,KACtBI,GAAc,OAAMJ,KACpBK,GAAgB,SAAQL,KACxBM,GAAwB,QAAON,KAAYC,KAE3CM,GAAkB,OAClBC,GAAsB,WACtBC,GAAwB,aACxBC,GAAuB,YACvBC,GAA8B,WAAUH,OAAwBA,KAChEI,GAAwB,sBAExBC,GAAQ,QACRC,GAAS,SAETC,GAAmB,uCACnBC,GAAuB,8BAEvBC,GAAU,CACd5yE,OAAQ,KACRgqE,QAAQ,GAGJ6I,GAAc,CAClB7yE,OAAQ,iBACRgqE,OAAQ,WAOV,MAAM8I,WAAiB7L,GACrBxzE,WAAAA,CAAYs1D,EAAS/xD,GACnBsD,MAAMyuD,EAAS/xD,GAEftF,KAAKqhF,kBAAmB,EACxBrhF,KAAKshF,cAAgB,GAErB,MAAMC,EAAalL,GAAexP,KAAKoa,IAEvC,IAAK,MAAMO,KAAQD,EAAY,CAC7B,MAAM7/B,EAAW20B,GAAeS,uBAAuB0K,GACjDC,EAAgBpL,GAAexP,KAAKnlB,GACvCrtC,QAAOqtE,GAAgBA,IAAiB1hF,KAAKw1E,WAE/B,OAAb9zB,GAAqB+/B,EAAc9iF,QACrCqB,KAAKshF,cAAcjgF,KAAKmgF,EAE5B,CAEAxhF,KAAK2hF,sBAEA3hF,KAAKy1E,QAAQnnE,QAChBtO,KAAK4hF,0BAA0B5hF,KAAKshF,cAAethF,KAAK6hF,YAGtD7hF,KAAKy1E,QAAQ6C,QACft4E,KAAKs4E,QAET,CAGA,kBAAW1D,GACT,OAAOsM,EACT,CAEA,sBAAWrM,GACT,OAAOsM,EACT,CAEA,eAAWzR,GACT,OAAOqQ,EACT,CAGAzH,MAAAA,GACMt4E,KAAK6hF,WACP7hF,KAAKmnE,OAELnnE,KAAK8hF,MAET,CAEAA,IAAAA,GACE,GAAI9hF,KAAKqhF,kBAAoBrhF,KAAK6hF,WAChC,OAGF,IAAIE,EAAiB,GASrB,GANI/hF,KAAKy1E,QAAQnnE,SACfyzE,EAAiB/hF,KAAKgiF,uBAAuBhB,IAC1C3sE,QAAOgjD,GAAWA,IAAYr3D,KAAKw1E,WACnChrE,KAAI6sD,GAAW+pB,GAASpL,oBAAoB3e,EAAS,CAAEihB,QAAQ,OAGhEyJ,EAAepjF,QAAUojF,EAAe,GAAGV,iBAC7C,OAGF,MAAMY,EAAaxQ,GAAa/hE,QAAQ1P,KAAKw1E,SAAU2K,IACvD,GAAI8B,EAAWzO,iBACb,OAGF,IAAK,MAAM0O,KAAkBH,EAC3BG,EAAe/a,OAGjB,MAAMgb,EAAYniF,KAAKoiF,gBAEvBpiF,KAAKw1E,SAASpxB,UAAU71B,OAAOkyD,IAC/BzgF,KAAKw1E,SAASpxB,UAAUhtC,IAAIspE,IAE5B1gF,KAAKw1E,SAASjhC,MAAM4tC,GAAa,EAEjCniF,KAAK4hF,0BAA0B5hF,KAAKshF,eAAe,GACnDthF,KAAKqhF,kBAAmB,EAExB,MAAMgB,EAAWA,KACfriF,KAAKqhF,kBAAmB,EAExBrhF,KAAKw1E,SAASpxB,UAAU71B,OAAOmyD,IAC/B1gF,KAAKw1E,SAASpxB,UAAUhtC,IAAIqpE,GAAqBD,IAEjDxgF,KAAKw1E,SAASjhC,MAAM4tC,GAAa,GAEjC1Q,GAAa/hE,QAAQ1P,KAAKw1E,SAAU4K,GAAY,EAG5CkC,EAAuBH,EAAU,GAAG/iC,cAAgB+iC,EAAUtiE,MAAM,GACpE0iE,EAAc,SAAQD,IAE5BtiF,KAAK61E,eAAewM,EAAUriF,KAAKw1E,UAAU,GAC7Cx1E,KAAKw1E,SAASjhC,MAAM4tC,GAAc,GAAEniF,KAAKw1E,SAAS+M,MACpD,CAEApb,IAAAA,GACE,GAAInnE,KAAKqhF,mBAAqBrhF,KAAK6hF,WACjC,OAGF,MAAMI,EAAaxQ,GAAa/hE,QAAQ1P,KAAKw1E,SAAU6K,IACvD,GAAI4B,EAAWzO,iBACb,OAGF,MAAM2O,EAAYniF,KAAKoiF,gBAEvBpiF,KAAKw1E,SAASjhC,MAAM4tC,GAAc,GAAEniF,KAAKw1E,SAASrnB,wBAAwBg0B,OAE1EjT,GAAOlvE,KAAKw1E,UAEZx1E,KAAKw1E,SAASpxB,UAAUhtC,IAAIspE,IAC5B1gF,KAAKw1E,SAASpxB,UAAU71B,OAAOkyD,GAAqBD,IAEpD,IAAK,MAAM9wE,KAAW1P,KAAKshF,cAAe,CACxC,MAAMjqB,EAAUgf,GAAeU,uBAAuBrnE,GAElD2nD,IAAYr3D,KAAK6hF,SAASxqB,IAC5Br3D,KAAK4hF,0BAA0B,CAAClyE,IAAU,EAE9C,CAEA1P,KAAKqhF,kBAAmB,EAExB,MAAMgB,EAAWA,KACfriF,KAAKqhF,kBAAmB,EACxBrhF,KAAKw1E,SAASpxB,UAAU71B,OAAOmyD,IAC/B1gF,KAAKw1E,SAASpxB,UAAUhtC,IAAIqpE,IAC5BhP,GAAa/hE,QAAQ1P,KAAKw1E,SAAU8K,GAAa,EAGnDtgF,KAAKw1E,SAASjhC,MAAM4tC,GAAa,GAEjCniF,KAAK61E,eAAewM,EAAUriF,KAAKw1E,UAAU,EAC/C,CAEAqM,QAAAA,CAASxqB,EAAUr3D,KAAKw1E,UACtB,OAAOne,EAAQjT,UAAUj6C,SAASq2E,GACpC,CAGAxL,iBAAAA,CAAkB1vE,GAGhB,OAFAA,EAAOgzE,OAAShjD,QAAQhwB,EAAOgzE,QAC/BhzE,EAAOgJ,OAAS+/D,GAAW/oE,EAAOgJ,QAC3BhJ,CACT,CAEA88E,aAAAA,GACE,OAAOpiF,KAAKw1E,SAASpxB,UAAUj6C,SAAS02E,IAAyBC,GAAQC,EAC3E,CAEAY,mBAAAA,GACE,IAAK3hF,KAAKy1E,QAAQnnE,OAChB,OAGF,MAAM8a,EAAWppB,KAAKgiF,uBAAuBf,IAE7C,IAAK,MAAM5pB,KAAWjuC,EAAU,CAC9B,MAAMknC,EAAW+lB,GAAeU,uBAAuB1f,GAEnD/G,GACFtwD,KAAK4hF,0BAA0B,CAACvqB,GAAUr3D,KAAK6hF,SAASvxB,GAE5D,CACF,CAEA0xB,sBAAAA,CAAuBtgC,GACrB,MAAMt4B,EAAWitD,GAAexP,KAAK+Z,GAA4B5gF,KAAKy1E,QAAQnnE,QAE9E,OAAO+nE,GAAexP,KAAKnlB,EAAU1hD,KAAKy1E,QAAQnnE,QAAQ+F,QAAOgjD,IAAYjuC,EAASje,SAASksD,IACjG,CAEAuqB,yBAAAA,CAA0BY,EAAcC,GACtC,GAAKD,EAAa7jF,OAIlB,IAAK,MAAM04D,KAAWmrB,EACpBnrB,EAAQjT,UAAUk0B,OAAOqI,IAAuB8B,GAChDprB,EAAQxc,aAAa,gBAAiB4nC,EAE1C,CAGA,sBAAO7S,CAAgBtqE,GACrB,MAAMmwE,EAAU,CAAC,EAKjB,MAJsB,kBAAXnwE,GAAuB,YAAYkC,KAAKlC,KACjDmwE,EAAQ6C,QAAS,GAGZt4E,KAAK63E,MAAK,WACf,MAAMxuE,EAAO+3E,GAASpL,oBAAoBh2E,KAAMy1E,GAEhD,GAAsB,kBAAXnwE,EAAqB,CAC9B,GAA4B,qBAAjB+D,EAAK/D,GACd,MAAM,IAAI+vE,UAAW,oBAAmB/vE,MAG1C+D,EAAK/D,IACP,CACF,GACF,EAOFmsE,GAAa7iE,GAAGzK,SAAUo8E,GAAsBU,IAAsB,SAAUr9D,IAEjD,MAAzBA,EAAM/gB,OAAOspC,SAAoBvoB,EAAM2tD,gBAAmD,MAAjC3tD,EAAM2tD,eAAeplC,UAChFvoB,EAAM6tC,iBAGR,IAAK,MAAM4F,KAAWgf,GAAeW,gCAAgCh3E,MACnEohF,GAASpL,oBAAoB3e,EAAS,CAAEihB,QAAQ,IAASA,QAE7D,IAMA7I,GAAmB2R,IC1QnB,MAAMsB,GAAO,WACPC,GAAW,cACXC,GAAa,IAAGD,KAChBE,GAAe,YAEfC,GAAa,SACbC,GAAU,MACVC,GAAe,UACfC,GAAiB,YACjBC,GAAqB,EAErBC,GAAc,OAAMP,KACpBQ,GAAgB,SAAQR,KACxBS,GAAc,OAAMT,KACpBU,GAAe,QAAOV,KACtBW,GAAwB,QAAOX,KAAYC,KAC3CW,GAA0B,UAASZ,KAAYC,KAC/CY,GAAwB,QAAOb,KAAYC,KAE3Ca,GAAkB,OAClBC,GAAoB,SACpBC,GAAqB,UACrBC,GAAuB,YACvBC,GAA2B,gBAC3BC,GAA6B,kBAE7BC,GAAuB,4DACvBC,GAA8B,GAAED,MAAwBN,KACxDQ,GAAgB,iBAChBC,GAAkB,UAClBC,GAAsB,cACtBC,GAAyB,8DAEzBC,GAAgB9U,KAAU,UAAY,YACtC+U,GAAmB/U,KAAU,YAAc,UAC3CgV,GAAmBhV,KAAU,aAAe,eAC5CiV,GAAsBjV,KAAU,eAAiB,aACjDkV,GAAkBlV,KAAU,aAAe,cAC3CmV,GAAiBnV,KAAU,cAAgB,aAC3CoV,GAAsB,MACtBC,GAAyB,SAEzBC,GAAU,CACdC,WAAW,EACXniB,SAAU,kBACVlc,QAAS,UACTh6C,OAAQ,CAAC,EAAG,GACZs4E,aAAc,KACd3uB,UAAW,UAGP4uB,GAAc,CAClBF,UAAW,mBACXniB,SAAU,mBACVlc,QAAS,SACTh6C,OAAQ,0BACRs4E,aAAc,yBACd3uB,UAAW,2BAOb,MAAM6uB,WAAiB3P,GACrBxzE,WAAAA,CAAYs1D,EAAS/xD,GACnBsD,MAAMyuD,EAAS/xD,GAEftF,KAAKmlF,QAAU,KACfnlF,KAAKolF,QAAUplF,KAAKw1E,SAASlnD,WAE7BtuB,KAAKqlF,MAAQhP,GAAej+D,KAAKpY,KAAKw1E,SAAU0O,IAAe,IAC7D7N,GAAe5vD,KAAKzmB,KAAKw1E,SAAU0O,IAAe,IAClD7N,GAAeC,QAAQ4N,GAAelkF,KAAKolF,SAC7CplF,KAAKslF,UAAYtlF,KAAKulF,eACxB,CAGA,kBAAW3Q,GACT,OAAOkQ,EACT,CAEA,sBAAWjQ,GACT,OAAOoQ,EACT,CAEA,eAAWvV,GACT,OAAOgT,EACT,CAGApK,MAAAA,GACE,OAAOt4E,KAAK6hF,WAAa7hF,KAAKmnE,OAASnnE,KAAK8hF,MAC9C,CAEAA,IAAAA,GACE,GAAIjT,GAAW7uE,KAAKw1E,WAAax1E,KAAK6hF,WACpC,OAGF,MAAMpP,EAAgB,CACpBA,cAAezyE,KAAKw1E,UAGhBgQ,EAAY/T,GAAa/hE,QAAQ1P,KAAKw1E,SAAU6N,GAAY5Q,GAElE,IAAI+S,EAAUhS,iBAAd,CAUA,GANAxzE,KAAKylF,gBAMD,iBAAkBthF,SAASu2D,kBAAoB16D,KAAKolF,QAAQzW,QAAQyV,IACtE,IAAK,MAAM/sB,IAAW,GAAGpuC,UAAU9kB,SAAS6hD,KAAK58B,UAC/CqoD,GAAa7iE,GAAGyoD,EAAS,YAAa4X,IAI1CjvE,KAAKw1E,SAASkQ,QACd1lF,KAAKw1E,SAAS36B,aAAa,iBAAiB,GAE5C76C,KAAKqlF,MAAMjhC,UAAUhtC,IAAIssE,IACzB1jF,KAAKw1E,SAASpxB,UAAUhtC,IAAIssE,IAC5BjS,GAAa/hE,QAAQ1P,KAAKw1E,SAAU8N,GAAa7Q,EAnBjD,CAoBF,CAEAtL,IAAAA,GACE,GAAI0H,GAAW7uE,KAAKw1E,YAAcx1E,KAAK6hF,WACrC,OAGF,MAAMpP,EAAgB,CACpBA,cAAezyE,KAAKw1E,UAGtBx1E,KAAK2lF,cAAclT,EACrB,CAEAkD,OAAAA,GACM31E,KAAKmlF,SACPnlF,KAAKmlF,QAAQ1Y,UAGf7jE,MAAM+sE,SACR,CAEA5oE,MAAAA,GACE/M,KAAKslF,UAAYtlF,KAAKulF,gBAClBvlF,KAAKmlF,SACPnlF,KAAKmlF,QAAQp4E,QAEjB,CAGA44E,aAAAA,CAAclT,GACZ,MAAMmT,EAAYnU,GAAa/hE,QAAQ1P,KAAKw1E,SAAU2N,GAAY1Q,GAClE,IAAImT,EAAUpS,iBAAd,CAMA,GAAI,iBAAkBrvE,SAASu2D,gBAC7B,IAAK,MAAMrD,IAAW,GAAGpuC,UAAU9kB,SAAS6hD,KAAK58B,UAC/CqoD,GAAa5iE,IAAIwoD,EAAS,YAAa4X,IAIvCjvE,KAAKmlF,SACPnlF,KAAKmlF,QAAQ1Y,UAGfzsE,KAAKqlF,MAAMjhC,UAAU71B,OAAOm1D,IAC5B1jF,KAAKw1E,SAASpxB,UAAU71B,OAAOm1D,IAC/B1jF,KAAKw1E,SAAS36B,aAAa,gBAAiB,SAC5Cs5B,GAAYE,oBAAoBr0E,KAAKqlF,MAAO,UAC5C5T,GAAa/hE,QAAQ1P,KAAKw1E,SAAU4N,GAAc3Q,EAlBlD,CAmBF,CAEAqC,UAAAA,CAAWxvE,GAGT,GAFAA,EAASsD,MAAMksE,WAAWxvE,GAEM,kBAArBA,EAAO+wD,YAA2BqB,GAAUpyD,EAAO+wD,YACV,oBAA3C/wD,EAAO+wD,UAAUlI,sBAGxB,MAAM,IAAIknB,UAAW,GAAEqN,GAAKtjC,+GAG9B,OAAO95C,CACT,CAEAmgF,aAAAA,GACE,GAAsB,qBAAXI,EACT,MAAM,IAAIxQ,UAAU,gEAGtB,IAAIyQ,EAAmB9lF,KAAKw1E,SAEG,WAA3Bx1E,KAAKy1E,QAAQpf,UACfyvB,EAAmB9lF,KAAKolF,QACf1tB,GAAU13D,KAAKy1E,QAAQpf,WAChCyvB,EAAmBzX,GAAWruE,KAAKy1E,QAAQpf,WACA,kBAA3Br2D,KAAKy1E,QAAQpf,YAC7ByvB,EAAmB9lF,KAAKy1E,QAAQpf,WAGlC,MAAM2uB,EAAehlF,KAAK+lF,mBAC1B/lF,KAAKmlF,QAAUU,GAAoBC,EAAkB9lF,KAAKqlF,MAAOL,EACnE,CAEAnD,QAAAA,GACE,OAAO7hF,KAAKqlF,MAAMjhC,UAAUj6C,SAASu5E,GACvC,CAEAsC,aAAAA,GACE,MAAMC,EAAiBjmF,KAAKolF,QAE5B,GAAIa,EAAe7hC,UAAUj6C,SAASy5E,IACpC,OAAOc,GAGT,GAAIuB,EAAe7hC,UAAUj6C,SAAS05E,IACpC,OAAOc,GAGT,GAAIsB,EAAe7hC,UAAUj6C,SAAS25E,IACpC,OAAOc,GAGT,GAAIqB,EAAe7hC,UAAUj6C,SAAS45E,IACpC,OAAOc,GAIT,MAAMqB,EAAkF,QAA1E9gC,iBAAiBplD,KAAKqlF,OAAO5W,iBAAiB,iBAAiB7pD,OAE7E,OAAIqhE,EAAe7hC,UAAUj6C,SAASw5E,IAC7BuC,EAAQ3B,GAAmBD,GAG7B4B,EAAQzB,GAAsBD,EACvC,CAEAe,aAAAA,GACE,OAAkD,OAA3CvlF,KAAKw1E,SAAS7G,QAAQwV,GAC/B,CAEAgC,UAAAA,GACE,MAAM,OAAEz5E,GAAW1M,KAAKy1E,QAExB,MAAsB,kBAAX/oE,EACFA,EAAO1C,MAAM,KAAKQ,KAAI9H,GAAS+Q,OAAOtO,SAASzC,EAAO,MAGzC,oBAAXgK,EACF05E,GAAc15E,EAAO05E,EAAYpmF,KAAKw1E,UAGxC9oE,CACT,CAEAq5E,gBAAAA,GACE,MAAMM,EAAwB,CAC5B7vB,UAAWx2D,KAAKgmF,gBAChB9xD,UAAW,CAAC,CACVlyB,KAAM,kBACNsP,QAAS,CACPsxD,SAAU5iE,KAAKy1E,QAAQ7S,WAG3B,CACE5gE,KAAM,SACNsP,QAAS,CACP5E,OAAQ1M,KAAKmmF,iBAcnB,OARInmF,KAAKslF,WAAsC,WAAzBtlF,KAAKy1E,QAAQ/uB,WACjCytB,GAAYC,iBAAiBp0E,KAAKqlF,MAAO,SAAU,UACnDgB,EAAsBnyD,UAAY,CAAC,CACjClyB,KAAM,cACN2hB,SAAS,KAIN,IACF0iE,KACAtW,GAAQ/vE,KAAKy1E,QAAQuP,aAAc,CAACqB,IAE3C,CAEAC,eAAAA,EAAgB,IAAEhjF,EAAG,OAAET,IACrB,MAAMm7E,EAAQ3H,GAAexP,KAAKwd,GAAwBrkF,KAAKqlF,OAAOhxE,QAAOgjD,GAAWiX,GAAUjX,KAE7F2mB,EAAMr/E,QAMX2xE,GAAqB0N,EAAOn7E,EAAQS,IAAQ2/E,IAAiBjF,EAAM7yE,SAAStI,IAAS6iF,OACvF,CAGA,sBAAO9V,CAAgBtqE,GACrB,OAAOtF,KAAK63E,MAAK,WACf,MAAMxuE,EAAO67E,GAASlP,oBAAoBh2E,KAAMsF,GAEhD,GAAsB,kBAAXA,EAAX,CAIA,GAA4B,qBAAjB+D,EAAK/D,GACd,MAAM,IAAI+vE,UAAW,oBAAmB/vE,MAG1C+D,EAAK/D,IANL,CAOF,GACF,CAEA,iBAAOihF,CAAW3iE,GAChB,GAAIA,EAAMsuC,SAAWgxB,IAAsC,UAAft/D,EAAMvd,MAAoBud,EAAMtgB,MAAQy/E,GAClF,OAGF,MAAMyD,EAAcnQ,GAAexP,KAAKod,IAExC,IAAK,MAAM3L,KAAUkO,EAAa,CAChC,MAAM3/C,EAAUq+C,GAASnP,YAAYuC,GACrC,IAAKzxC,IAAyC,IAA9BA,EAAQ4uC,QAAQsP,UAC9B,SAGF,MAAM0B,EAAe7iE,EAAM6iE,eACrBC,EAAeD,EAAat7E,SAAS07B,EAAQw+C,OACnD,GACEoB,EAAat7E,SAAS07B,EAAQ2uC,WACC,WAA9B3uC,EAAQ4uC,QAAQsP,YAA2B2B,GACb,YAA9B7/C,EAAQ4uC,QAAQsP,WAA2B2B,EAE5C,SAIF,GAAI7/C,EAAQw+C,MAAMl7E,SAASyZ,EAAM/gB,UAA4B,UAAf+gB,EAAMvd,MAAoBud,EAAMtgB,MAAQy/E,IAAY,qCAAqCv7E,KAAKoc,EAAM/gB,OAAOspC,UACvJ,SAGF,MAAMsmC,EAAgB,CAAEA,cAAe5rC,EAAQ2uC,UAE5B,UAAf5xD,EAAMvd,OACRosE,EAAcyE,WAAatzD,GAG7BijB,EAAQ8+C,cAAclT,EACxB,CACF,CAEA,4BAAOkU,CAAsB/iE,GAI3B,MAAMgjE,EAAU,kBAAkBp/E,KAAKoc,EAAM/gB,OAAOspC,SAC9C06C,EAAgBjjE,EAAMtgB,MAAQw/E,GAC9BgE,EAAkB,CAAC9D,GAAcC,IAAgB93E,SAASyY,EAAMtgB,KAEtE,IAAKwjF,IAAoBD,EACvB,OAGF,GAAID,IAAYC,EACd,OAGFjjE,EAAM6tC,iBAGN,MAAMs1B,EAAkB/mF,KAAK87B,QAAQkoD,IACnChkF,KACCq2E,GAAe5vD,KAAKzmB,KAAMgkF,IAAsB,IAC/C3N,GAAej+D,KAAKpY,KAAMgkF,IAAsB,IAChD3N,GAAeC,QAAQ0N,GAAsBpgE,EAAM2tD,eAAejjD,YAEhElQ,EAAW8mE,GAASlP,oBAAoB+Q,GAE9C,GAAID,EAIF,OAHAljE,EAAM2tC,kBACNnzC,EAAS0jE,YACT1jE,EAASkoE,gBAAgB1iE,GAIvBxF,EAASyjE,aACXj+D,EAAM2tC,kBACNnzC,EAAS+oD,OACT4f,EAAgBrB,QAEpB,EAOFjU,GAAa7iE,GAAGzK,SAAUq/E,GAAwBQ,GAAsBkB,GAASyB,uBACjFlV,GAAa7iE,GAAGzK,SAAUq/E,GAAwBU,GAAegB,GAASyB,uBAC1ElV,GAAa7iE,GAAGzK,SAAUo/E,GAAsB2B,GAASqB,YACzD9U,GAAa7iE,GAAGzK,SAAUs/E,GAAsByB,GAASqB,YACzD9U,GAAa7iE,GAAGzK,SAAUo/E,GAAsBS,IAAsB,SAAUpgE,GAC9EA,EAAM6tC,iBACNyzB,GAASlP,oBAAoBh2E,MAAMs4E,QACrC,IAMA7I,GAAmByV,ICnbnB,MAAM8B,GAAO,WACPC,GAAkB,OAClBC,GAAkB,OAClBC,GAAmB,gBAAeH,KAElCI,GAAU,CACd9gC,UAAW,iBACX+gC,cAAe,KACfvR,YAAY,EACZxH,WAAW,EACXgZ,YAAa,QAGTC,GAAc,CAClBjhC,UAAW,SACX+gC,cAAe,kBACfvR,WAAY,UACZxH,UAAW,UACXgZ,YAAa,oBAOf,MAAME,WAAiB7S,GACrB5yE,WAAAA,CAAYuD,GACVsD,QACA5I,KAAKy1E,QAAUz1E,KAAK80E,WAAWxvE,GAC/BtF,KAAKynF,aAAc,EACnBznF,KAAKw1E,SAAW,IAClB,CAGA,kBAAWZ,GACT,OAAOwS,EACT,CAEA,sBAAWvS,GACT,OAAO0S,EACT,CAEA,eAAW7X,GACT,OAAOsX,EACT,CAGAlF,IAAAA,CAAKj8E,GACH,IAAK7F,KAAKy1E,QAAQnH,UAEhB,YADAyB,GAAQlqE,GAIV7F,KAAK0nF,UAEL,MAAMrwB,EAAUr3D,KAAK2nF,cACjB3nF,KAAKy1E,QAAQK,YACf5G,GAAO7X,GAGTA,EAAQjT,UAAUhtC,IAAI8vE,IAEtBlnF,KAAK4nF,mBAAkB,KACrB7X,GAAQlqE,EAAS,GAErB,CAEAshE,IAAAA,CAAKthE,GACE7F,KAAKy1E,QAAQnH,WAKlBtuE,KAAK2nF,cAAcvjC,UAAU71B,OAAO24D,IAEpClnF,KAAK4nF,mBAAkB,KACrB5nF,KAAK21E,UACL5F,GAAQlqE,EAAS,KARjBkqE,GAAQlqE,EAUZ,CAEA8vE,OAAAA,GACO31E,KAAKynF,cAIVhW,GAAa5iE,IAAI7O,KAAKw1E,SAAU2R,IAEhCnnF,KAAKw1E,SAASjnD,SACdvuB,KAAKynF,aAAc,EACrB,CAGAE,WAAAA,GACE,IAAK3nF,KAAKw1E,SAAU,CAClB,MAAMqS,EAAW1jF,SAASkpB,cAAc,OACxCw6D,EAASvhC,UAAYtmD,KAAKy1E,QAAQnvB,UAC9BtmD,KAAKy1E,QAAQK,YACf+R,EAASzjC,UAAUhtC,IAAI6vE,IAGzBjnF,KAAKw1E,SAAWqS,CAClB,CAEA,OAAO7nF,KAAKw1E,QACd,CAEAR,iBAAAA,CAAkB1vE,GAGhB,OADAA,EAAOgiF,YAAcjZ,GAAW/oE,EAAOgiF,aAChChiF,CACT,CAEAoiF,OAAAA,GACE,GAAI1nF,KAAKynF,YACP,OAGF,MAAMpwB,EAAUr3D,KAAK2nF,cACrB3nF,KAAKy1E,QAAQ6R,YAAYQ,OAAOzwB,GAEhCoa,GAAa7iE,GAAGyoD,EAAS8vB,IAAiB,KACxCpX,GAAQ/vE,KAAKy1E,QAAQ4R,cAAc,IAGrCrnF,KAAKynF,aAAc,CACrB,CAEAG,iBAAAA,CAAkB/hF,GAChBoqE,GAAuBpqE,EAAU7F,KAAK2nF,cAAe3nF,KAAKy1E,QAAQK,WACpE,ECpIF,MAAMiS,GAAO,YACPC,GAAW,eACXC,GAAa,IAAGD,KAChBE,GAAiB,UAASD,KAC1BE,GAAqB,cAAaF,KAElCG,GAAU,MACVC,GAAkB,UAClBC,GAAmB,WAEnBC,GAAU,CACdC,WAAW,EACXC,YAAa,MAGTC,GAAc,CAClBF,UAAW,UACXC,YAAa,WAOf,MAAME,WAAkBhU,GACtB5yE,WAAAA,CAAYuD,GACVsD,QACA5I,KAAKy1E,QAAUz1E,KAAK80E,WAAWxvE,GAC/BtF,KAAK4oF,WAAY,EACjB5oF,KAAK6oF,qBAAuB,IAC9B,CAGA,kBAAWjU,GACT,OAAO2T,EACT,CAEA,sBAAW1T,GACT,OAAO6T,EACT,CAEA,eAAWhZ,GACT,OAAOqY,EACT,CAGA3sD,QAAAA,GACMp7B,KAAK4oF,YAIL5oF,KAAKy1E,QAAQ+S,WACfxoF,KAAKy1E,QAAQgT,YAAY/C,QAG3BjU,GAAa5iE,IAAI1K,SAAU8jF,IAC3BxW,GAAa7iE,GAAGzK,SAAU+jF,IAAetkE,GAAS5jB,KAAK8oF,eAAellE,KACtE6tD,GAAa7iE,GAAGzK,SAAUgkF,IAAmBvkE,GAAS5jB,KAAK+oF,eAAenlE,KAE1E5jB,KAAK4oF,WAAY,EACnB,CAEAjtD,UAAAA,GACO37B,KAAK4oF,YAIV5oF,KAAK4oF,WAAY,EACjBnX,GAAa5iE,IAAI1K,SAAU8jF,IAC7B,CAGAa,cAAAA,CAAellE,GACb,MAAM,YAAE6kE,GAAgBzoF,KAAKy1E,QAE7B,GAAI7xD,EAAM/gB,SAAWsB,UAAYyf,EAAM/gB,SAAW4lF,GAAeA,EAAYt+E,SAASyZ,EAAM/gB,QAC1F,OAGF,MAAMo1D,EAAWoe,GAAeO,kBAAkB6R,GAE1B,IAApBxwB,EAASt5D,OACX8pF,EAAY/C,QACH1lF,KAAK6oF,uBAAyBP,GACvCrwB,EAASA,EAASt5D,OAAS,GAAG+mF,QAE9BztB,EAAS,GAAGytB,OAEhB,CAEAqD,cAAAA,CAAenlE,GACTA,EAAMtgB,MAAQ8kF,KAIlBpoF,KAAK6oF,qBAAuBjlE,EAAMiuC,SAAWy2B,GAAmBD,GAClE,EChGF,MAAMW,GAAyB,oDACzBC,GAA0B,cAC1BC,GAAmB,gBACnBC,GAAkB,eAMxB,MAAMC,GACJrnF,WAAAA,GACE/B,KAAKw1E,SAAWrxE,SAAS6hD,IAC3B,CAGAqjC,QAAAA,GAEE,MAAMC,EAAgBnlF,SAASu2D,gBAAgB0C,YAC/C,OAAO9mB,KAAK8jB,IAAI32D,OAAO8lF,WAAaD,EACtC,CAEAniB,IAAAA,GACE,MAAMxN,EAAQ35D,KAAKqpF,WACnBrpF,KAAKwpF,mBAELxpF,KAAKypF,sBAAsBzpF,KAAKw1E,SAAU0T,IAAkBQ,GAAmBA,EAAkB/vB,IAEjG35D,KAAKypF,sBAAsBT,GAAwBE,IAAkBQ,GAAmBA,EAAkB/vB,IAC1G35D,KAAKypF,sBAAsBR,GAAyBE,IAAiBO,GAAmBA,EAAkB/vB,GAC5G,CAEAptD,KAAAA,GACEvM,KAAK2pF,wBAAwB3pF,KAAKw1E,SAAU,YAC5Cx1E,KAAK2pF,wBAAwB3pF,KAAKw1E,SAAU0T,IAC5ClpF,KAAK2pF,wBAAwBX,GAAwBE,IACrDlpF,KAAK2pF,wBAAwBV,GAAyBE,GACxD,CAEAS,aAAAA,GACE,OAAO5pF,KAAKqpF,WAAa,CAC3B,CAGAG,gBAAAA,GACExpF,KAAK6pF,sBAAsB7pF,KAAKw1E,SAAU,YAC1Cx1E,KAAKw1E,SAASjhC,MAAMktB,SAAW,QACjC,CAEAgoB,qBAAAA,CAAsB/nC,EAAUooC,EAAejkF,GAC7C,MAAMkkF,EAAiB/pF,KAAKqpF,WACtBW,EAAuB3yB,IAC3B,GAAIA,IAAYr3D,KAAKw1E,UAAY/xE,OAAO8lF,WAAalyB,EAAQ+F,YAAc2sB,EACzE,OAGF/pF,KAAK6pF,sBAAsBxyB,EAASyyB,GACpC,MAAMJ,EAAkBjmF,OAAO2hD,iBAAiBiS,GAASoX,iBAAiBqb,GAC1EzyB,EAAQ9iB,MAAMqT,YAAYkiC,EAAgB,GAAEjkF,EAAS4N,OAAO4gD,WAAWq1B,QAAsB,EAG/F1pF,KAAKiqF,2BAA2BvoC,EAAUsoC,EAC5C,CAEAH,qBAAAA,CAAsBxyB,EAASyyB,GAC7B,MAAMI,EAAc7yB,EAAQ9iB,MAAMk6B,iBAAiBqb,GAC/CI,GACF/V,GAAYC,iBAAiB/c,EAASyyB,EAAeI,EAEzD,CAEAP,uBAAAA,CAAwBjoC,EAAUooC,GAChC,MAAME,EAAuB3yB,IAC3B,MAAM30D,EAAQyxE,GAAYO,iBAAiBrd,EAASyyB,GAEtC,OAAVpnF,GAKJyxE,GAAYE,oBAAoBhd,EAASyyB,GACzCzyB,EAAQ9iB,MAAMqT,YAAYkiC,EAAepnF,IALvC20D,EAAQ9iB,MAAM41C,eAAeL,EAKgB,EAGjD9pF,KAAKiqF,2BAA2BvoC,EAAUsoC,EAC5C,CAEAC,0BAAAA,CAA2BvoC,EAAU0oC,GACnC,GAAI1yB,GAAUhW,GACZ0oC,EAAS1oC,QAIX,IAAK,MAAM00B,KAAOC,GAAexP,KAAKnlB,EAAU1hD,KAAKw1E,UACnD4U,EAAShU,EAEb,ECxFF,MAAMiU,GAAO,QACPC,GAAW,WACXC,GAAa,IAAGD,KAChBE,GAAe,YACfC,GAAa,SAEbC,GAAc,OAAMH,KACpBI,GAAwB,gBAAeJ,KACvCK,GAAgB,SAAQL,KACxBM,GAAc,OAAMN,KACpBO,GAAe,QAAOP,KACtBQ,GAAgB,SAAQR,KACxBS,GAAuB,gBAAeT,KACtCU,GAA2B,oBAAmBV,KAC9CW,GAAyB,kBAAiBX,KAC1CY,GAAwB,QAAOZ,KAAYC,KAE3CY,GAAkB,aAClBC,GAAkB,OAClBC,GAAkB,OAClBC,GAAoB,eAEpBC,GAAgB,cAChBC,GAAkB,gBAClBC,GAAsB,cACtBC,GAAuB,2BAEvBC,GAAU,CACd/D,UAAU,EACVnC,OAAO,EACP/I,UAAU,GAGNkP,GAAc,CAClBhE,SAAU,mBACVnC,MAAO,UACP/I,SAAU,WAOZ,MAAMmP,WAAcvW,GAClBxzE,WAAAA,CAAYs1D,EAAS/xD,GACnBsD,MAAMyuD,EAAS/xD,GAEftF,KAAK+rF,QAAU1V,GAAeC,QAAQmV,GAAiBzrF,KAAKw1E,UAC5Dx1E,KAAKgsF,UAAYhsF,KAAKisF,sBACtBjsF,KAAKksF,WAAalsF,KAAKmsF,uBACvBnsF,KAAK6hF,UAAW,EAChB7hF,KAAKqhF,kBAAmB,EACxBrhF,KAAKosF,WAAa,IAAIhD,GAEtBppF,KAAKu9E,oBACP,CAGA,kBAAW3I,GACT,OAAOgX,EACT,CAEA,sBAAW/W,GACT,OAAOgX,EACT,CAEA,eAAWnc,GACT,OAAO2a,EACT,CAGA/R,MAAAA,CAAO7F,GACL,OAAOzyE,KAAK6hF,SAAW7hF,KAAKmnE,OAASnnE,KAAK8hF,KAAKrP,EACjD,CAEAqP,IAAAA,CAAKrP,GACH,GAAIzyE,KAAK6hF,UAAY7hF,KAAKqhF,iBACxB,OAGF,MAAMmE,EAAY/T,GAAa/hE,QAAQ1P,KAAKw1E,SAAUqV,GAAY,CAChEpY,kBAGE+S,EAAUhS,mBAIdxzE,KAAK6hF,UAAW,EAChB7hF,KAAKqhF,kBAAmB,EAExBrhF,KAAKosF,WAAWjlB,OAEhBhjE,SAAS6hD,KAAK5B,UAAUhtC,IAAIg0E,IAE5BprF,KAAKqsF,gBAELrsF,KAAKgsF,UAAUlK,MAAK,IAAM9hF,KAAKssF,aAAa7Z,KAC9C,CAEAtL,IAAAA,GACE,IAAKnnE,KAAK6hF,UAAY7hF,KAAKqhF,iBACzB,OAGF,MAAMuE,EAAYnU,GAAa/hE,QAAQ1P,KAAKw1E,SAAUkV,IAElD9E,EAAUpS,mBAIdxzE,KAAK6hF,UAAW,EAChB7hF,KAAKqhF,kBAAmB,EACxBrhF,KAAKksF,WAAWvwD,aAEhB37B,KAAKw1E,SAASpxB,UAAU71B,OAAO+8D,IAE/BtrF,KAAK61E,gBAAe,IAAM71E,KAAKusF,cAAcvsF,KAAKw1E,SAAUx1E,KAAK0/E,eACnE,CAEA/J,OAAAA,GACElE,GAAa5iE,IAAIpL,OAAQ8mF,IACzB9Y,GAAa5iE,IAAI7O,KAAK+rF,QAASxB,IAE/BvqF,KAAKgsF,UAAUrW,UACf31E,KAAKksF,WAAWvwD,aAEhB/yB,MAAM+sE,SACR,CAEA6W,YAAAA,GACExsF,KAAKqsF,eACP,CAGAJ,mBAAAA,GACE,OAAO,IAAIzE,GAAS,CAClBlZ,UAAWh5C,QAAQt1B,KAAKy1E,QAAQoS,UAChC/R,WAAY91E,KAAK0/E,eAErB,CAEAyM,oBAAAA,GACE,OAAO,IAAIxD,GAAU,CACnBF,YAAazoF,KAAKw1E,UAEtB,CAEA8W,YAAAA,CAAa7Z,GAENtuE,SAAS6hD,KAAK77C,SAASnK,KAAKw1E,WAC/BrxE,SAAS6hD,KAAK8hC,OAAO9nF,KAAKw1E,UAG5Bx1E,KAAKw1E,SAASjhC,MAAMmS,QAAU,QAC9B1mD,KAAKw1E,SAASnvB,gBAAgB,eAC9BrmD,KAAKw1E,SAAS36B,aAAa,cAAc,GACzC76C,KAAKw1E,SAAS36B,aAAa,OAAQ,UACnC76C,KAAKw1E,SAAS7U,UAAY,EAE1B,MAAM8rB,EAAYpW,GAAeC,QAAQoV,GAAqB1rF,KAAK+rF,SAC/DU,IACFA,EAAU9rB,UAAY,GAGxBuO,GAAOlvE,KAAKw1E,UAEZx1E,KAAKw1E,SAASpxB,UAAUhtC,IAAIk0E,IAE5B,MAAMoB,EAAqBA,KACrB1sF,KAAKy1E,QAAQiQ,OACf1lF,KAAKksF,WAAW9wD,WAGlBp7B,KAAKqhF,kBAAmB,EACxB5P,GAAa/hE,QAAQ1P,KAAKw1E,SAAUsV,GAAa,CAC/CrY,iBACA,EAGJzyE,KAAK61E,eAAe6W,EAAoB1sF,KAAK+rF,QAAS/rF,KAAK0/E,cAC7D,CAEAnC,kBAAAA,GACE9L,GAAa7iE,GAAG5O,KAAKw1E,SAAU0V,IAAuBtnE,IAChDA,EAAMtgB,MAAQmnF,KAIdzqF,KAAKy1E,QAAQkH,SACf38E,KAAKmnE,OAIPnnE,KAAK2sF,6BAA4B,IAGnClb,GAAa7iE,GAAGnL,OAAQsnF,IAAc,KAChC/qF,KAAK6hF,WAAa7hF,KAAKqhF,kBACzBrhF,KAAKqsF,eACP,IAGF5a,GAAa7iE,GAAG5O,KAAKw1E,SAAUyV,IAAyBrnE,IAEtD6tD,GAAauB,IAAIhzE,KAAKw1E,SAAUwV,IAAqB4B,IAC/C5sF,KAAKw1E,WAAa5xD,EAAM/gB,QAAU7C,KAAKw1E,WAAaoX,EAAO/pF,SAIjC,WAA1B7C,KAAKy1E,QAAQoS,SAKb7nF,KAAKy1E,QAAQoS,UACf7nF,KAAKmnE,OALLnnE,KAAK2sF,6BAMP,GACA,GAEN,CAEAJ,UAAAA,GACEvsF,KAAKw1E,SAASjhC,MAAMmS,QAAU,OAC9B1mD,KAAKw1E,SAAS36B,aAAa,eAAe,GAC1C76C,KAAKw1E,SAASnvB,gBAAgB,cAC9BrmD,KAAKw1E,SAASnvB,gBAAgB,QAC9BrmD,KAAKqhF,kBAAmB,EAExBrhF,KAAKgsF,UAAU7kB,MAAK,KAClBhjE,SAAS6hD,KAAK5B,UAAU71B,OAAO68D,IAC/BprF,KAAK6sF,oBACL7sF,KAAKosF,WAAW7/E,QAChBklE,GAAa/hE,QAAQ1P,KAAKw1E,SAAUoV,GAAa,GAErD,CAEAlL,WAAAA,GACE,OAAO1/E,KAAKw1E,SAASpxB,UAAUj6C,SAASkhF,GAC1C,CAEAsB,0BAAAA,GACE,MAAM/G,EAAYnU,GAAa/hE,QAAQ1P,KAAKw1E,SAAUmV,IACtD,GAAI/E,EAAUpS,iBACZ,OAGF,MAAMsZ,EAAqB9sF,KAAKw1E,SAASnU,aAAel9D,SAASu2D,gBAAgByC,aAC3E4vB,EAAmB/sF,KAAKw1E,SAASjhC,MAAMotB,UAEpB,WAArBorB,GAAiC/sF,KAAKw1E,SAASpxB,UAAUj6C,SAASohF,MAIjEuB,IACH9sF,KAAKw1E,SAASjhC,MAAMotB,UAAY,UAGlC3hE,KAAKw1E,SAASpxB,UAAUhtC,IAAIm0E,IAC5BvrF,KAAK61E,gBAAe,KAClB71E,KAAKw1E,SAASpxB,UAAU71B,OAAOg9D,IAC/BvrF,KAAK61E,gBAAe,KAClB71E,KAAKw1E,SAASjhC,MAAMotB,UAAYorB,CAAgB,GAC/C/sF,KAAK+rF,QAAQ,GACf/rF,KAAK+rF,SAER/rF,KAAKw1E,SAASkQ,QAChB,CAMA2G,aAAAA,GACE,MAAMS,EAAqB9sF,KAAKw1E,SAASnU,aAAel9D,SAASu2D,gBAAgByC,aAC3E4sB,EAAiB/pF,KAAKosF,WAAW/C,WACjC2D,EAAoBjD,EAAiB,EAE3C,GAAIiD,IAAsBF,EAAoB,CAC5C,MAAMr0B,EAAW+W,KAAU,cAAgB,eAC3CxvE,KAAKw1E,SAASjhC,MAAMkkB,GAAa,GAAEsxB,KACrC,CAEA,IAAKiD,GAAqBF,EAAoB,CAC5C,MAAMr0B,EAAW+W,KAAU,eAAiB,cAC5CxvE,KAAKw1E,SAASjhC,MAAMkkB,GAAa,GAAEsxB,KACrC,CACF,CAEA8C,iBAAAA,GACE7sF,KAAKw1E,SAASjhC,MAAM04C,YAAc,GAClCjtF,KAAKw1E,SAASjhC,MAAM24C,aAAe,EACrC,CAGA,sBAAOtd,CAAgBtqE,EAAQmtE,GAC7B,OAAOzyE,KAAK63E,MAAK,WACf,MAAMxuE,EAAOyiF,GAAM9V,oBAAoBh2E,KAAMsF,GAE7C,GAAsB,kBAAXA,EAAX,CAIA,GAA4B,qBAAjB+D,EAAK/D,GACd,MAAM,IAAI+vE,UAAW,oBAAmB/vE,MAG1C+D,EAAK/D,GAAQmtE,EANb,CAOF,GACF,EAOFhB,GAAa7iE,GAAGzK,SAAUgnF,GAAsBQ,IAAsB,SAAU/nE,GAC9E,MAAM/gB,EAASwzE,GAAeU,uBAAuB/2E,MAEjD,CAAC,IAAK,QAAQmL,SAASnL,KAAKmsC,UAC9BvoB,EAAM6tC,iBAGRggB,GAAauB,IAAInwE,EAAQgoF,IAAYrF,IAC/BA,EAAUhS,kBAKd/B,GAAauB,IAAInwE,EAAQ+nF,IAAc,KACjCtc,GAAUtuE,OACZA,KAAK0lF,OACP,GACA,IAIJ,MAAMyH,EAAc9W,GAAeC,QAAQkV,IACvC2B,GACFrB,GAAM/V,YAAYoX,GAAahmB,OAGjC,MAAM99D,EAAOyiF,GAAM9V,oBAAoBnzE,GAEvCwG,EAAKivE,OAAOt4E,KACd,IAEAi3E,GAAqB6U,IAMrBrc,GAAmBqc,IC/VnB,MAAMsB,GAAO,YACPC,GAAW,eACXC,GAAa,IAAGD,KAChBE,GAAe,YACfC,GAAuB,OAAMF,KAAYC,KACzCE,GAAa,SAEbC,GAAkB,OAClBC,GAAqB,UACrBC,GAAoB,SACpBC,GAAsB,qBACtBC,GAAgB,kBAEhBC,GAAc,OAAMT,KACpBU,GAAe,QAAOV,KACtBW,GAAc,OAAMX,KACpBY,GAAwB,gBAAeZ,KACvCa,GAAgB,SAAQb,KACxBc,GAAgB,SAAQd,KACxBe,GAAwB,QAAOf,KAAYC,KAC3Ce,GAAyB,kBAAiBhB,KAE1CiB,GAAuB,+BAEvBC,GAAU,CACd3G,UAAU,EACVlL,UAAU,EACV5c,QAAQ,GAGJ0uB,GAAc,CAClB5G,SAAU,mBACVlL,SAAU,UACV5c,OAAQ,WAOV,MAAM2uB,WAAkBnZ,GACtBxzE,WAAAA,CAAYs1D,EAAS/xD,GACnBsD,MAAMyuD,EAAS/xD,GAEftF,KAAK6hF,UAAW,EAChB7hF,KAAKgsF,UAAYhsF,KAAKisF,sBACtBjsF,KAAKksF,WAAalsF,KAAKmsF,uBACvBnsF,KAAKu9E,oBACP,CAGA,kBAAW3I,GACT,OAAO4Z,EACT,CAEA,sBAAW3Z,GACT,OAAO4Z,EACT,CAEA,eAAW/e,GACT,OAAO0d,EACT,CAGA9U,MAAAA,CAAO7F,GACL,OAAOzyE,KAAK6hF,SAAW7hF,KAAKmnE,OAASnnE,KAAK8hF,KAAKrP,EACjD,CAEAqP,IAAAA,CAAKrP,GACH,GAAIzyE,KAAK6hF,SACP,OAGF,MAAM2D,EAAY/T,GAAa/hE,QAAQ1P,KAAKw1E,SAAUuY,GAAY,CAAEtb,kBAEpE,GAAI+S,EAAUhS,iBACZ,OAGFxzE,KAAK6hF,UAAW,EAChB7hF,KAAKgsF,UAAUlK,OAEV9hF,KAAKy1E,QAAQ1V,SAChB,IAAIqpB,IAAkBjiB,OAGxBnnE,KAAKw1E,SAAS36B,aAAa,cAAc,GACzC76C,KAAKw1E,SAAS36B,aAAa,OAAQ,UACnC76C,KAAKw1E,SAASpxB,UAAUhtC,IAAIu2E,IAE5B,MAAMlO,EAAmBA,KAClBz/E,KAAKy1E,QAAQ1V,SAAU//D,KAAKy1E,QAAQoS,UACvC7nF,KAAKksF,WAAW9wD,WAGlBp7B,KAAKw1E,SAASpxB,UAAUhtC,IAAIs2E,IAC5B1tF,KAAKw1E,SAASpxB,UAAU71B,OAAOo/D,IAC/Blc,GAAa/hE,QAAQ1P,KAAKw1E,SAAUwY,GAAa,CAAEvb,iBAAgB,EAGrEzyE,KAAK61E,eAAe4J,EAAkBz/E,KAAKw1E,UAAU,EACvD,CAEArO,IAAAA,GACE,IAAKnnE,KAAK6hF,SACR,OAGF,MAAM+D,EAAYnU,GAAa/hE,QAAQ1P,KAAKw1E,SAAUyY,IAEtD,GAAIrI,EAAUpS,iBACZ,OAGFxzE,KAAKksF,WAAWvwD,aAChB37B,KAAKw1E,SAASmZ,OACd3uF,KAAK6hF,UAAW,EAChB7hF,KAAKw1E,SAASpxB,UAAUhtC,IAAIw2E,IAC5B5tF,KAAKgsF,UAAU7kB,OAEf,MAAMynB,EAAmBA,KACvB5uF,KAAKw1E,SAASpxB,UAAU71B,OAAOm/D,GAAiBE,IAChD5tF,KAAKw1E,SAASnvB,gBAAgB,cAC9BrmD,KAAKw1E,SAASnvB,gBAAgB,QAEzBrmD,KAAKy1E,QAAQ1V,SAChB,IAAIqpB,IAAkB78E,QAGxBklE,GAAa/hE,QAAQ1P,KAAKw1E,SAAU2Y,GAAa,EAGnDnuF,KAAK61E,eAAe+Y,EAAkB5uF,KAAKw1E,UAAU,EACvD,CAEAG,OAAAA,GACE31E,KAAKgsF,UAAUrW,UACf31E,KAAKksF,WAAWvwD,aAChB/yB,MAAM+sE,SACR,CAGAsW,mBAAAA,GACE,MAAM5E,EAAgBA,KACU,WAA1BrnF,KAAKy1E,QAAQoS,SAKjB7nF,KAAKmnE,OAJHsK,GAAa/hE,QAAQ1P,KAAKw1E,SAAU0Y,GAI3B,EAIP5f,EAAYh5C,QAAQt1B,KAAKy1E,QAAQoS,UAEvC,OAAO,IAAIL,GAAS,CAClBlhC,UAAWunC,GACXvf,YACAwH,YAAY,EACZwR,YAAatnF,KAAKw1E,SAASlnD,WAC3B+4D,cAAe/Y,EAAY+Y,EAAgB,MAE/C,CAEA8E,oBAAAA,GACE,OAAO,IAAIxD,GAAU,CACnBF,YAAazoF,KAAKw1E,UAEtB,CAEA+H,kBAAAA,GACE9L,GAAa7iE,GAAG5O,KAAKw1E,SAAU8Y,IAAuB1qE,IAChDA,EAAMtgB,MAAQmqF,KAIdztF,KAAKy1E,QAAQkH,SACf38E,KAAKmnE,OAIPsK,GAAa/hE,QAAQ1P,KAAKw1E,SAAU0Y,IAAqB,GAE7D,CAGA,sBAAOte,CAAgBtqE,GACrB,OAAOtF,KAAK63E,MAAK,WACf,MAAMxuE,EAAOqlF,GAAU1Y,oBAAoBh2E,KAAMsF,GAEjD,GAAsB,kBAAXA,EAAX,CAIA,QAAqB1C,IAAjByG,EAAK/D,IAAyBA,EAAOkf,WAAW,MAAmB,gBAAXlf,EAC1D,MAAM,IAAI+vE,UAAW,oBAAmB/vE,MAG1C+D,EAAK/D,GAAQtF,KANb,CAOF,GACF,EAOFyxE,GAAa7iE,GAAGzK,SAAUkqF,GAAsBE,IAAsB,SAAU3qE,GAC9E,MAAM/gB,EAASwzE,GAAeU,uBAAuB/2E,MAMrD,GAJI,CAAC,IAAK,QAAQmL,SAASnL,KAAKmsC,UAC9BvoB,EAAM6tC,iBAGJod,GAAW7uE,MACb,OAGFyxE,GAAauB,IAAInwE,EAAQsrF,IAAc,KAEjC7f,GAAUtuE,OACZA,KAAK0lF,OACP,IAIF,MAAMyH,EAAc9W,GAAeC,QAAQwX,IACvCX,GAAeA,IAAgBtqF,GACjC6rF,GAAU3Y,YAAYoX,GAAahmB,OAGrC,MAAM99D,EAAOqlF,GAAU1Y,oBAAoBnzE,GAC3CwG,EAAKivE,OAAOt4E,KACd,IAEAyxE,GAAa7iE,GAAGnL,OAAQ+pF,IAAqB,KAC3C,IAAK,MAAM9rC,KAAY20B,GAAexP,KAAKinB,IACzCY,GAAU1Y,oBAAoBt0B,GAAUogC,MAC1C,IAGFrQ,GAAa7iE,GAAGnL,OAAQ2qF,IAAc,KACpC,IAAK,MAAM/2B,KAAWgf,GAAexP,KAAK,gDACG,UAAvCzhB,iBAAiBiS,GAASe,UAC5Bs2B,GAAU1Y,oBAAoB3e,GAAS8P,MAE3C,IAGF8P,GAAqByX,IAMrBjf,GAAmBif,IC/QnB,MAAMG,GAAyB,iBAElBC,GAAmB,CAE9B,IAAK,CAAC,QAAS,MAAO,KAAM,OAAQ,OAAQD,IAC5ChkF,EAAG,CAAC,SAAU,OAAQ,QAAS,OAC/BkkF,KAAM,GACNjkF,EAAG,GACHkkF,GAAI,GACJC,IAAK,GACLvmF,KAAM,GACNwmF,GAAI,GACJC,IAAK,GACLC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJvsC,GAAI,GACJwsC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJlxF,EAAG,GACH8/E,IAAK,CAAC,MAAO,SAAU,MAAO,QAAS,QAAS,UAChDqR,GAAI,GACJC,GAAI,GACJrxF,EAAG,GACH2jB,IAAK,GACLsO,EAAG,GACHq/D,MAAO,GACPC,KAAM,GACNxpF,IAAK,GACLypF,IAAK,GACLC,OAAQ,GACR3wF,EAAG,GACH4wF,GAAI,IAIAC,GAAgB,IAAIj8E,IAAI,CAC5B,aACA,OACA,OACA,WACA,WACA,SACA,MACA,eAUIk8E,GAAmB,0DAEnBC,GAAmBA,CAAC53B,EAAW63B,KACnC,MAAMtkC,EAAgByM,EAAUpB,SAASjxC,cAEzC,OAAIkqE,EAAqBplF,SAAS8gD,IAC5BmkC,GAAcz6E,IAAIs2C,IACb32B,QAAQ+6D,GAAiB7oF,KAAKkxD,EAAUjX,YAO5C8uC,EAAqBl8E,QAAOm8E,GAAkBA,aAA0B/1D,SAC5E5R,MAAK4nE,GAASA,EAAMjpF,KAAKykD,IAAe,EAGtC,SAASykC,GAAaC,EAAYC,EAAWC,GAClD,IAAKF,EAAWhyF,OACd,OAAOgyF,EAGT,GAAIE,GAAgD,oBAArBA,EAC7B,OAAOA,EAAiBF,GAG1B,MAAMG,EAAY,IAAIrtF,OAAOstF,UACvBC,EAAkBF,EAAUG,gBAAgBN,EAAY,aACxD14B,EAAW,GAAGhvC,UAAU+nE,EAAgBhrC,KAAKkB,iBAAiB,MAEpE,IAAK,MAAMmQ,KAAWY,EAAU,CAC9B,MAAMi5B,EAAc75B,EAAQC,SAASjxC,cAErC,IAAKtjB,OAAOiI,KAAK4lF,GAAWzlF,SAAS+lF,GAAc,CACjD75B,EAAQ9oC,SACR,QACF,CAEA,MAAM4iE,EAAgB,GAAGloE,UAAUouC,EAAQvL,YACrCslC,EAAoB,GAAGnoE,OAAO2nE,EAAU,MAAQ,GAAIA,EAAUM,IAAgB,IAEpF,IAAK,MAAMx4B,KAAay4B,EACjBb,GAAiB53B,EAAW04B,IAC/B/5B,EAAQhR,gBAAgBqS,EAAUpB,SAGxC,CAEA,OAAO05B,EAAgBhrC,KAAKpX,SAC9B,CCpGA,MAAMyiD,GAAO,kBAEPC,GAAU,CACdV,UAAW9B,GACXlhD,QAAS,CAAC,EACV2jD,WAAY,GACZxwB,MAAM,EACNywB,UAAU,EACVC,WAAY,KACZloF,SAAU,eAGNmoF,GAAc,CAClBd,UAAW,SACXhjD,QAAS,SACT2jD,WAAY,oBACZxwB,KAAM,UACNywB,SAAU,UACVC,WAAY,kBACZloF,SAAU,UAGNooF,GAAqB,CACzBpyE,MAAO,iCACPmiC,SAAU,oBAOZ,MAAMkwC,WAAwBjd,GAC5B5yE,WAAAA,CAAYuD,GACVsD,QACA5I,KAAKy1E,QAAUz1E,KAAK80E,WAAWxvE,EACjC,CAGA,kBAAWsvE,GACT,OAAO0c,EACT,CAEA,sBAAWzc,GACT,OAAO6c,EACT,CAEA,eAAWhiB,GACT,OAAO2hB,EACT,CAGAQ,UAAAA,GACE,OAAO9uF,OAAOwQ,OAAOvT,KAAKy1E,QAAQ7nC,SAC/BpjC,KAAIlF,GAAUtF,KAAK8xF,yBAAyBxsF,KAC5C+O,OAAOihB,QACZ,CAEAy8D,UAAAA,GACE,OAAO/xF,KAAK6xF,aAAalzF,OAAS,CACpC,CAEAqzF,aAAAA,CAAcpkD,GAGZ,OAFA5tC,KAAKiyF,cAAcrkD,GACnB5tC,KAAKy1E,QAAQ7nC,QAAU,IAAK5tC,KAAKy1E,QAAQ7nC,WAAYA,GAC9C5tC,IACT,CAEAkyF,MAAAA,GACE,MAAMC,EAAkBhuF,SAASkpB,cAAc,OAC/C8kE,EAAgBvjD,UAAY5uC,KAAKoyF,eAAepyF,KAAKy1E,QAAQlsE,UAE7D,IAAK,MAAOm4C,EAAUjF,KAAS15C,OAAO4I,QAAQ3L,KAAKy1E,QAAQ7nC,SACzD5tC,KAAKqyF,YAAYF,EAAiB11C,EAAMiF,GAG1C,MAAMn4C,EAAW4oF,EAAgB/oE,SAAS,GACpCmoE,EAAavxF,KAAK8xF,yBAAyB9xF,KAAKy1E,QAAQ8b,YAM9D,OAJIA,GACFhoF,EAAS66C,UAAUhtC,OAAOm6E,EAAWvnF,MAAM,MAGtCT,CACT,CAGA0rE,gBAAAA,CAAiB3vE,GACfsD,MAAMqsE,iBAAiB3vE,GACvBtF,KAAKiyF,cAAc3sF,EAAOsoC,QAC5B,CAEAqkD,aAAAA,CAAch+D,GACZ,IAAK,MAAOytB,EAAU9T,KAAY7qC,OAAO4I,QAAQsoB,GAC/CrrB,MAAMqsE,iBAAiB,CAAEvzB,WAAUniC,MAAOquB,GAAW+jD,GAEzD,CAEAU,WAAAA,CAAY9oF,EAAUqkC,EAAS8T,GAC7B,MAAM4wC,EAAkBjc,GAAeC,QAAQ50B,EAAUn4C,GAEpD+oF,IAIL1kD,EAAU5tC,KAAK8xF,yBAAyBlkD,GAEnCA,EAKD8pB,GAAU9pB,GACZ5tC,KAAKuyF,sBAAsBlkB,GAAWzgC,GAAU0kD,GAI9CtyF,KAAKy1E,QAAQ1U,KACfuxB,EAAgB1jD,UAAY5uC,KAAKoyF,eAAexkD,GAIlD0kD,EAAgBzjD,YAAcjB,EAd5B0kD,EAAgB/jE,SAepB,CAEA6jE,cAAAA,CAAen+D,GACb,OAAOj0B,KAAKy1E,QAAQ+b,SAAWd,GAAaz8D,EAAKj0B,KAAKy1E,QAAQmb,UAAW5wF,KAAKy1E,QAAQgc,YAAcx9D,CACtG,CAEA69D,wBAAAA,CAAyB79D,GACvB,OAAO87C,GAAQ97C,EAAK,CAACj0B,MACvB,CAEAuyF,qBAAAA,CAAsBl7B,EAASi7B,GAC7B,GAAItyF,KAAKy1E,QAAQ1U,KAGf,OAFAuxB,EAAgB1jD,UAAY,QAC5B0jD,EAAgBxK,OAAOzwB,GAIzBi7B,EAAgBzjD,YAAcwoB,EAAQxoB,WACxC,ECvIF,MAAM2jD,GAAO,UACPC,GAAwB,IAAIt+E,IAAI,CAAC,WAAY,YAAa,eAE1Du+E,GAAkB,OAClBC,GAAmB,QACnBC,GAAkB,OAElBC,GAAyB,iBACzBC,GAAkB,IAAGH,KAErBI,GAAmB,gBAEnBC,GAAgB,QAChBC,GAAgB,QAChBC,GAAgB,QAChBC,GAAiB,SAEjBC,GAAa,OACbC,GAAe,SACfC,GAAa,OACbC,GAAc,QACdC,GAAiB,WACjBC,GAAc,QACdC,GAAgB,UAChBC,GAAiB,WACjBC,GAAmB,aACnBC,GAAmB,aAEnBC,GAAgB,CACpBC,KAAM,OACNC,IAAK,MACLC,MAAOzkB,KAAU,OAAS,QAC1B0kB,OAAQ,SACRC,KAAM3kB,KAAU,QAAU,QAGtB4kB,GAAU,CACdxD,UAAW9B,GACXuF,WAAW,EACXzxB,SAAU,kBACV32C,WAAW,EACXqoE,YAAa,GACbl7D,MAAO,EACPusC,mBAAoB,CAAC,MAAO,QAAS,SAAU,QAC/C5E,MAAM,EACNr0D,OAAQ,CAAC,EAAG,GACZ8pD,UAAW,MACXwuB,aAAc,KACdwM,UAAU,EACVC,WAAY,KACZ/vC,UAAU,EACVn4C,SAAU,+GAIVgrF,MAAO,GACP7kF,QAAS,eAGL8kF,GAAc,CAClB5D,UAAW,SACXyD,UAAW,UACXzxB,SAAU,mBACV32C,UAAW,2BACXqoE,YAAa,oBACbl7D,MAAO,kBACPusC,mBAAoB,QACpB5E,KAAM,UACNr0D,OAAQ,0BACR8pD,UAAW,oBACXwuB,aAAc,yBACdwM,SAAU,UACVC,WAAY,kBACZ/vC,SAAU,mBACVn4C,SAAU,SACVgrF,MAAO,4BACP7kF,QAAS,UAOX,MAAM+kF,WAAgBlf,GACpBxzE,WAAAA,CAAYs1D,EAAS/xD,GACnB,GAAsB,qBAAXugF,EACT,MAAM,IAAIxQ,UAAU,+DAGtBzsE,MAAMyuD,EAAS/xD,GAGftF,KAAK00F,YAAa,EAClB10F,KAAK20F,SAAW,EAChB30F,KAAK40F,WAAa,KAClB50F,KAAK60F,eAAiB,CAAC,EACvB70F,KAAKmlF,QAAU,KACfnlF,KAAK80F,iBAAmB,KACxB90F,KAAK+0F,YAAc,KAGnB/0F,KAAKg1F,IAAM,KAEXh1F,KAAKi1F,gBAEAj1F,KAAKy1E,QAAQ/zB,UAChB1hD,KAAKk1F,WAET,CAGA,kBAAWtgB,GACT,OAAOwf,EACT,CAEA,sBAAWvf,GACT,OAAO2f,EACT,CAEA,eAAW9kB,GACT,OAAO8iB,EACT,CAGA2C,MAAAA,GACEn1F,KAAK00F,YAAa,CACpB,CAEAU,OAAAA,GACEp1F,KAAK00F,YAAa,CACpB,CAEAW,aAAAA,GACEr1F,KAAK00F,YAAc10F,KAAK00F,UAC1B,CAEApc,MAAAA,GACOt4E,KAAK00F,aAIV10F,KAAK60F,eAAeS,OAASt1F,KAAK60F,eAAeS,MAC7Ct1F,KAAK6hF,WACP7hF,KAAKu1F,SAIPv1F,KAAKw1F,SACP,CAEA7f,OAAAA,GACE+I,aAAa1+E,KAAK20F,UAElBljB,GAAa5iE,IAAI7O,KAAKw1E,SAAS7G,QAAQmkB,IAAiBC,GAAkB/yF,KAAKy1F,mBAE3Ez1F,KAAKw1E,SAASxlC,aAAa,2BAC7BhwC,KAAKw1E,SAAS36B,aAAa,QAAS76C,KAAKw1E,SAASxlC,aAAa,2BAGjEhwC,KAAK01F,iBACL9sF,MAAM+sE,SACR,CAEAmM,IAAAA,GACE,GAAoC,SAAhC9hF,KAAKw1E,SAASjhC,MAAMmS,QACtB,MAAM,IAAIroD,MAAM,uCAGlB,IAAM2B,KAAK21F,mBAAoB31F,KAAK00F,WAClC,OAGF,MAAMlP,EAAY/T,GAAa/hE,QAAQ1P,KAAKw1E,SAAUx1E,KAAK+B,YAAYk0E,UAAUqd,KAC3E/nC,EAAayjB,GAAehvE,KAAKw1E,UACjCogB,GAAcrqC,GAAcvrD,KAAKw1E,SAAShe,cAAckD,iBAAiBvwD,SAASnK,KAAKw1E,UAE7F,GAAIgQ,EAAUhS,mBAAqBoiB,EACjC,OAIF51F,KAAK01F,iBAEL,MAAMV,EAAMh1F,KAAK61F,iBAEjB71F,KAAKw1E,SAAS36B,aAAa,mBAAoBm6C,EAAIhlD,aAAa,OAEhE,MAAM,UAAE/jB,GAAcjsB,KAAKy1E,QAe3B,GAbKz1E,KAAKw1E,SAAShe,cAAckD,gBAAgBvwD,SAASnK,KAAKg1F,OAC7D/oE,EAAU67D,OAAOkN,GACjBvjB,GAAa/hE,QAAQ1P,KAAKw1E,SAAUx1E,KAAK+B,YAAYk0E,UAAUud,MAGjExzF,KAAKmlF,QAAUnlF,KAAKylF,cAAcuP,GAElCA,EAAI5wC,UAAUhtC,IAAIw7E,IAMd,iBAAkBzuF,SAASu2D,gBAC7B,IAAK,MAAMrD,IAAW,GAAGpuC,UAAU9kB,SAAS6hD,KAAK58B,UAC/CqoD,GAAa7iE,GAAGyoD,EAAS,YAAa4X,IAI1C,MAAMoT,EAAWA,KACf5Q,GAAa/hE,QAAQ1P,KAAKw1E,SAAUx1E,KAAK+B,YAAYk0E,UAAUsd,MAEvC,IAApBvzF,KAAK40F,YACP50F,KAAKu1F,SAGPv1F,KAAK40F,YAAa,CAAK,EAGzB50F,KAAK61E,eAAewM,EAAUriF,KAAKg1F,IAAKh1F,KAAK0/E,cAC/C,CAEAvY,IAAAA,GACE,IAAKnnE,KAAK6hF,WACR,OAGF,MAAM+D,EAAYnU,GAAa/hE,QAAQ1P,KAAKw1E,SAAUx1E,KAAK+B,YAAYk0E,UAAUmd,KACjF,GAAIxN,EAAUpS,iBACZ,OAGF,MAAMwhB,EAAMh1F,KAAK61F,iBAKjB,GAJAb,EAAI5wC,UAAU71B,OAAOqkE,IAIjB,iBAAkBzuF,SAASu2D,gBAC7B,IAAK,MAAMrD,IAAW,GAAGpuC,UAAU9kB,SAAS6hD,KAAK58B,UAC/CqoD,GAAa5iE,IAAIwoD,EAAS,YAAa4X,IAI3CjvE,KAAK60F,eAAe3B,KAAiB,EACrClzF,KAAK60F,eAAe5B,KAAiB,EACrCjzF,KAAK60F,eAAe7B,KAAiB,EACrChzF,KAAK40F,WAAa,KAElB,MAAMvS,EAAWA,KACXriF,KAAK81F,yBAIJ91F,KAAK40F,YACR50F,KAAK01F,iBAGP11F,KAAKw1E,SAASnvB,gBAAgB,oBAC9BorB,GAAa/hE,QAAQ1P,KAAKw1E,SAAUx1E,KAAK+B,YAAYk0E,UAAUod,KAAc,EAG/ErzF,KAAK61E,eAAewM,EAAUriF,KAAKg1F,IAAKh1F,KAAK0/E,cAC/C,CAEA3yE,MAAAA,GACM/M,KAAKmlF,SACPnlF,KAAKmlF,QAAQp4E,QAEjB,CAGA4oF,cAAAA,GACE,OAAOrgE,QAAQt1B,KAAK+1F,YACtB,CAEAF,cAAAA,GAKE,OAJK71F,KAAKg1F,MACRh1F,KAAKg1F,IAAMh1F,KAAKg2F,kBAAkBh2F,KAAK+0F,aAAe/0F,KAAKi2F,2BAGtDj2F,KAAKg1F,GACd,CAEAgB,iBAAAA,CAAkBpoD,GAChB,MAAMonD,EAAMh1F,KAAKk2F,oBAAoBtoD,GAASskD,SAG9C,IAAK8C,EACH,OAAO,KAGTA,EAAI5wC,UAAU71B,OAAOmkE,GAAiBE,IAEtCoC,EAAI5wC,UAAUhtC,IAAK,MAAKpX,KAAK+B,YAAY2tE,aAEzC,MAAMymB,EAAQzoB,GAAO1tE,KAAK+B,YAAY2tE,MAAM9wD,WAQ5C,OANAo2E,EAAIn6C,aAAa,KAAMs7C,GAEnBn2F,KAAK0/E,eACPsV,EAAI5wC,UAAUhtC,IAAIs7E,IAGbsC,CACT,CAEAoB,UAAAA,CAAWxoD,GACT5tC,KAAK+0F,YAAcnnD,EACf5tC,KAAK6hF,aACP7hF,KAAK01F,iBACL11F,KAAK8hF,OAET,CAEAoU,mBAAAA,CAAoBtoD,GAalB,OAZI5tC,KAAK80F,iBACP90F,KAAK80F,iBAAiB9C,cAAcpkD,GAEpC5tC,KAAK80F,iBAAmB,IAAIlD,GAAgB,IACvC5xF,KAAKy1E,QAGR7nC,UACA2jD,WAAYvxF,KAAK8xF,yBAAyB9xF,KAAKy1E,QAAQ6e,eAIpDt0F,KAAK80F,gBACd,CAEAmB,sBAAAA,GACE,MAAO,CACL,CAACpD,IAAyB7yF,KAAK+1F,YAEnC,CAEAA,SAAAA,GACE,OAAO/1F,KAAK8xF,yBAAyB9xF,KAAKy1E,QAAQ8e,QAAUv0F,KAAKw1E,SAASxlC,aAAa,yBACzF,CAGAqmD,4BAAAA,CAA6BzyE,GAC3B,OAAO5jB,KAAK+B,YAAYi0E,oBAAoBpyD,EAAM2tD,eAAgBvxE,KAAKs2F,qBACzE,CAEA5W,WAAAA,GACE,OAAO1/E,KAAKy1E,QAAQ4e,WAAcr0F,KAAKg1F,KAAOh1F,KAAKg1F,IAAI5wC,UAAUj6C,SAASuoF,GAC5E,CAEA7Q,QAAAA,GACE,OAAO7hF,KAAKg1F,KAAOh1F,KAAKg1F,IAAI5wC,UAAUj6C,SAASyoF,GACjD,CAEAnN,aAAAA,CAAcuP,GACZ,MAAMx+B,EAAYuZ,GAAQ/vE,KAAKy1E,QAAQjf,UAAW,CAACx2D,KAAMg1F,EAAKh1F,KAAKw1E,WAC7D+gB,EAAazC,GAAct9B,EAAUpX,eAC3C,OAAOymC,GAAoB7lF,KAAKw1E,SAAUwf,EAAKh1F,KAAK+lF,iBAAiBwQ,GACvE,CAEApQ,UAAAA,GACE,MAAM,OAAEz5E,GAAW1M,KAAKy1E,QAExB,MAAsB,kBAAX/oE,EACFA,EAAO1C,MAAM,KAAKQ,KAAI9H,GAAS+Q,OAAOtO,SAASzC,EAAO,MAGzC,oBAAXgK,EACF05E,GAAc15E,EAAO05E,EAAYpmF,KAAKw1E,UAGxC9oE,CACT,CAEAolF,wBAAAA,CAAyB79D,GACvB,OAAO87C,GAAQ97C,EAAK,CAACj0B,KAAKw1E,UAC5B,CAEAuQ,gBAAAA,CAAiBwQ,GACf,MAAMlQ,EAAwB,CAC5B7vB,UAAW+/B,EACXriE,UAAW,CACT,CACElyB,KAAM,OACNsP,QAAS,CACPq0D,mBAAoB3lE,KAAKy1E,QAAQ9P,qBAGrC,CACE3jE,KAAM,SACNsP,QAAS,CACP5E,OAAQ1M,KAAKmmF,eAGjB,CACEnkF,KAAM,kBACNsP,QAAS,CACPsxD,SAAU5iE,KAAKy1E,QAAQ7S,WAG3B,CACE5gE,KAAM,QACNsP,QAAS,CACP+lD,QAAU,IAAGr3D,KAAK+B,YAAY2tE,eAGlC,CACE1tE,KAAM,kBACN2hB,SAAS,EACTg1C,MAAO,aACPluD,GAAIpB,IAGFrJ,KAAK61F,iBAAiBh7C,aAAa,wBAAyBxxC,EAAKsrB,MAAM6hC,UAAU,KAMzF,MAAO,IACF6vB,KACAtW,GAAQ/vE,KAAKy1E,QAAQuP,aAAc,CAACqB,IAE3C,CAEA4O,aAAAA,GACE,MAAMuB,EAAWx2F,KAAKy1E,QAAQ/lE,QAAQ1F,MAAM,KAE5C,IAAK,MAAM0F,KAAW8mF,EACpB,GAAgB,UAAZ9mF,EACF+hE,GAAa7iE,GAAG5O,KAAKw1E,SAAUx1E,KAAK+B,YAAYk0E,UAAUwd,IAAczzF,KAAKy1E,QAAQ/zB,UAAU99B,IAC7F,MAAMijB,EAAU7mC,KAAKq2F,6BAA6BzyE,GAClDijB,EAAQyxC,QAAQ,SAEb,GAAI5oE,IAAYyjF,GAAgB,CACrC,MAAMsD,EAAU/mF,IAAYsjF,GAC1BhzF,KAAK+B,YAAYk0E,UAAU2d,IAC3B5zF,KAAK+B,YAAYk0E,UAAUyd,IACvBgD,EAAWhnF,IAAYsjF,GAC3BhzF,KAAK+B,YAAYk0E,UAAU4d,IAC3B7zF,KAAK+B,YAAYk0E,UAAU0d,IAE7BliB,GAAa7iE,GAAG5O,KAAKw1E,SAAUihB,EAASz2F,KAAKy1E,QAAQ/zB,UAAU99B,IAC7D,MAAMijB,EAAU7mC,KAAKq2F,6BAA6BzyE,GAClDijB,EAAQguD,eAA8B,YAAfjxE,EAAMvd,KAAqB4sF,GAAgBD,KAAiB,EACnFnsD,EAAQ2uD,QAAQ,IAElB/jB,GAAa7iE,GAAG5O,KAAKw1E,SAAUkhB,EAAU12F,KAAKy1E,QAAQ/zB,UAAU99B,IAC9D,MAAMijB,EAAU7mC,KAAKq2F,6BAA6BzyE,GAClDijB,EAAQguD,eAA8B,aAAfjxE,EAAMvd,KAAsB4sF,GAAgBD,IACjEnsD,EAAQ2uC,SAASrrE,SAASyZ,EAAM6uD,eAElC5rC,EAAQ0uD,QAAQ,GAEpB,CAGFv1F,KAAKy1F,kBAAoB,KACnBz1F,KAAKw1E,UACPx1E,KAAKmnE,MACP,EAGFsK,GAAa7iE,GAAG5O,KAAKw1E,SAAS7G,QAAQmkB,IAAiBC,GAAkB/yF,KAAKy1F,kBAChF,CAEAP,SAAAA,GACE,MAAMX,EAAQv0F,KAAKw1E,SAASxlC,aAAa,SAEpCukD,IAIAv0F,KAAKw1E,SAASxlC,aAAa,eAAkBhwC,KAAKw1E,SAAS3mC,YAAYjqB,QAC1E5kB,KAAKw1E,SAAS36B,aAAa,aAAc05C,GAG3Cv0F,KAAKw1E,SAAS36B,aAAa,yBAA0B05C,GACrDv0F,KAAKw1E,SAASnvB,gBAAgB,SAChC,CAEAmvC,MAAAA,GACMx1F,KAAK6hF,YAAc7hF,KAAK40F,WAC1B50F,KAAK40F,YAAa,GAIpB50F,KAAK40F,YAAa,EAElB50F,KAAK22F,aAAY,KACX32F,KAAK40F,YACP50F,KAAK8hF,MACP,GACC9hF,KAAKy1E,QAAQr8C,MAAM0oD,MACxB,CAEAyT,MAAAA,GACMv1F,KAAK81F,yBAIT91F,KAAK40F,YAAa,EAElB50F,KAAK22F,aAAY,KACV32F,KAAK40F,YACR50F,KAAKmnE,MACP,GACCnnE,KAAKy1E,QAAQr8C,MAAM+tC,MACxB,CAEAwvB,WAAAA,CAAY5xE,EAASmJ,GACnBwwD,aAAa1+E,KAAK20F,UAClB30F,KAAK20F,SAAWxwE,WAAWY,EAASmJ,EACtC,CAEA4nE,oBAAAA,GACE,OAAO/yF,OAAOwQ,OAAOvT,KAAK60F,gBAAgB1pF,UAAS,EACrD,CAEA2pE,UAAAA,CAAWxvE,GACT,MAAMsxF,EAAiBziB,GAAYG,kBAAkBt0E,KAAKw1E,UAE1D,IAAK,MAAMqhB,KAAiB9zF,OAAOiI,KAAK4rF,GAClCnE,GAAsB98E,IAAIkhF,WACrBD,EAAeC,GAW1B,OAPAvxF,EAAS,IACJsxF,KACmB,kBAAXtxF,GAAuBA,EAASA,EAAS,CAAC,GAEvDA,EAAStF,KAAK+0E,gBAAgBzvE,GAC9BA,EAAStF,KAAKg1E,kBAAkB1vE,GAChCtF,KAAKi1E,iBAAiB3vE,GACfA,CACT,CAEA0vE,iBAAAA,CAAkB1vE,GAkBhB,OAjBAA,EAAO2mB,WAAiC,IAArB3mB,EAAO2mB,UAAsB9nB,SAAS6hD,KAAOqoB,GAAW/oE,EAAO2mB,WAEtD,kBAAjB3mB,EAAO8zB,QAChB9zB,EAAO8zB,MAAQ,CACb0oD,KAAMx8E,EAAO8zB,MACb+tC,KAAM7hE,EAAO8zB,QAIW,kBAAjB9zB,EAAOivF,QAChBjvF,EAAOivF,MAAQjvF,EAAOivF,MAAM31E,YAGA,kBAAnBtZ,EAAOsoC,UAChBtoC,EAAOsoC,QAAUtoC,EAAOsoC,QAAQhvB,YAG3BtZ,CACT,CAEAgxF,kBAAAA,GACE,MAAMhxF,EAAS,CAAC,EAEhB,IAAK,MAAOhC,EAAKZ,KAAUK,OAAO4I,QAAQ3L,KAAKy1E,SACzCz1E,KAAK+B,YAAY6yE,QAAQtxE,KAASZ,IACpC4C,EAAOhC,GAAOZ,GAUlB,OANA4C,EAAOo8C,UAAW,EAClBp8C,EAAOoK,QAAU,SAKVpK,CACT,CAEAowF,cAAAA,GACM11F,KAAKmlF,UACPnlF,KAAKmlF,QAAQ1Y,UACbzsE,KAAKmlF,QAAU,MAGbnlF,KAAKg1F,MACPh1F,KAAKg1F,IAAIzmE,SACTvuB,KAAKg1F,IAAM,KAEf,CAGA,sBAAOplB,CAAgBtqE,GACrB,OAAOtF,KAAK63E,MAAK,WACf,MAAMxuE,EAAOorF,GAAQze,oBAAoBh2E,KAAMsF,GAE/C,GAAsB,kBAAXA,EAAX,CAIA,GAA4B,qBAAjB+D,EAAK/D,GACd,MAAM,IAAI+vE,UAAW,oBAAmB/vE,MAG1C+D,EAAK/D,IANL,CAOF,GACF,EAOFmqE,GAAmBglB,ICxmBnB,MAAMqC,GAAO,UAEPC,GAAiB,kBACjBC,GAAmB,gBAEnBC,GAAU,IACXxC,GAAQ7f,QACXhnC,QAAS,GACTlhC,OAAQ,CAAC,EAAG,GACZ8pD,UAAW,QACXjtD,SAAU,8IAKVmG,QAAS,SAGLwnF,GAAc,IACfzC,GAAQ5f,YACXjnC,QAAS,kCAOX,MAAMupD,WAAgB1C,GAEpB,kBAAW7f,GACT,OAAOqiB,EACT,CAEA,sBAAWpiB,GACT,OAAOqiB,EACT,CAEA,eAAWxnB,GACT,OAAOonB,EACT,CAGAnB,cAAAA,GACE,OAAO31F,KAAK+1F,aAAe/1F,KAAKo3F,aAClC,CAGAnB,sBAAAA,GACE,MAAO,CACL,CAACc,IAAiB/2F,KAAK+1F,YACvB,CAACiB,IAAmBh3F,KAAKo3F,cAE7B,CAEAA,WAAAA,GACE,OAAOp3F,KAAK8xF,yBAAyB9xF,KAAKy1E,QAAQ7nC,QACpD,CAGA,sBAAOgiC,CAAgBtqE,GACrB,OAAOtF,KAAK63E,MAAK,WACf,MAAMxuE,EAAO8tF,GAAQnhB,oBAAoBh2E,KAAMsF,GAE/C,GAAsB,kBAAXA,EAAX,CAIA,GAA4B,qBAAjB+D,EAAK/D,GACd,MAAM,IAAI+vE,UAAW,oBAAmB/vE,MAG1C+D,EAAK/D,IANL,CAOF,GACF,EAOFmqE,GAAmB0nB,IC5EnB,MAAME,GAAO,YACPC,GAAW,eACXC,GAAa,IAAGD,KAChBE,GAAe,YAEfC,GAAkB,WAAUF,KAC5BG,GAAe,QAAOH,KACtBI,GAAuB,OAAMJ,KAAYC,KAEzCI,GAA2B,gBAC3BC,GAAoB,SAEpBC,GAAoB,yBACpBC,GAAwB,SACxBC,GAA0B,oBAC1BC,GAAqB,YACrBC,GAAqB,YACrBC,GAAsB,mBACtBC,GAAuB,GAAEH,OAAuBC,QAAwBD,OAAuBE,KAC/FE,GAAoB,YACpBC,GAA2B,mBAE3BC,GAAU,CACd7rF,OAAQ,KACR8rF,WAAY,eACZC,cAAc,EACd51F,OAAQ,KACR61F,UAAW,CAAC,GAAK,GAAK,IAGlBC,GAAc,CAClBjsF,OAAQ,gBACR8rF,WAAY,SACZC,aAAc,UACd51F,OAAQ,UACR61F,UAAW,SAOb,MAAME,WAAkBrjB,GACtBxzE,WAAAA,CAAYs1D,EAAS/xD,GACnBsD,MAAMyuD,EAAS/xD,GAGftF,KAAK64F,aAAe,IAAIjmF,IACxB5S,KAAK84F,oBAAsB,IAAIlmF,IAC/B5S,KAAK+4F,aAA6D,YAA9C3zC,iBAAiBplD,KAAKw1E,UAAU7T,UAA0B,KAAO3hE,KAAKw1E,SAC1Fx1E,KAAKg5F,cAAgB,KACrBh5F,KAAKi5F,UAAY,KACjBj5F,KAAKk5F,oBAAsB,CACzBC,gBAAiB,EACjBC,gBAAiB,GAEnBp5F,KAAKq5F,SACP,CAGA,kBAAWzkB,GACT,OAAO2jB,EACT,CAEA,sBAAW1jB,GACT,OAAO8jB,EACT,CAEA,eAAWjpB,GACT,OAAO2nB,EACT,CAGAgC,OAAAA,GACEr5F,KAAKs5F,mCACLt5F,KAAKu5F,2BAEDv5F,KAAKi5F,UACPj5F,KAAKi5F,UAAUvxC,aAEf1nD,KAAKi5F,UAAYj5F,KAAKw5F,kBAGxB,IAAK,MAAMC,KAAWz5F,KAAK84F,oBAAoBvlF,SAC7CvT,KAAKi5F,UAAUzxC,QAAQiyC,EAE3B,CAEA9jB,OAAAA,GACE31E,KAAKi5F,UAAUvxC,aACf9+C,MAAM+sE,SACR,CAGAX,iBAAAA,CAAkB1vE,GAWhB,OATAA,EAAOzC,OAASwrE,GAAW/oE,EAAOzC,SAAWsB,SAAS6hD,KAGtD1gD,EAAOkzF,WAAalzF,EAAOoH,OAAU,GAAEpH,EAAOoH,oBAAsBpH,EAAOkzF,WAE3C,kBAArBlzF,EAAOozF,YAChBpzF,EAAOozF,UAAYpzF,EAAOozF,UAAU1uF,MAAM,KAAKQ,KAAI9H,GAAS+Q,OAAO4gD,WAAW3xD,MAGzE4C,CACT,CAEAi0F,wBAAAA,GACOv5F,KAAKy1E,QAAQgjB,eAKlBhnB,GAAa5iE,IAAI7O,KAAKy1E,QAAQ5yE,OAAQ60F,IAEtCjmB,GAAa7iE,GAAG5O,KAAKy1E,QAAQ5yE,OAAQ60F,GAAaK,IAAuBn0E,IACvE,MAAM81E,EAAoB15F,KAAK84F,oBAAoB5nF,IAAI0S,EAAM/gB,OAAOu9D,MACpE,GAAIs5B,EAAmB,CACrB91E,EAAM6tC,iBACN,MAAM7oC,EAAO5oB,KAAK+4F,cAAgBt1F,OAC5Bm2D,EAAS8/B,EAAkBx/B,UAAYl6D,KAAKw1E,SAAStb,UAC3D,GAAItxC,EAAK+wE,SAEP,YADA/wE,EAAK+wE,SAAS,CAAEjrC,IAAKkL,EAAQggC,SAAU,WAKzChxE,EAAK+3C,UAAY/G,CACnB,KAEJ,CAEA4/B,eAAAA,GACE,MAAMloF,EAAU,CACdsX,KAAM5oB,KAAK+4F,aACXL,UAAW14F,KAAKy1E,QAAQijB,UACxBF,WAAYx4F,KAAKy1E,QAAQ+iB,YAG3B,OAAO,IAAIqB,sBAAqBluF,GAAW3L,KAAK85F,kBAAkBnuF,IAAU2F,EAC9E,CAGAwoF,iBAAAA,CAAkBnuF,GAChB,MAAMouF,EAAgBx6E,GAASvf,KAAK64F,aAAa3nF,IAAK,IAAGqO,EAAM1c,OAAOgf,MAChEuZ,EAAW7b,IACfvf,KAAKk5F,oBAAoBC,gBAAkB55E,EAAM1c,OAAOq3D,UACxDl6D,KAAKg6F,SAASD,EAAcx6E,GAAO,EAG/B65E,GAAmBp5F,KAAK+4F,cAAgB50F,SAASu2D,iBAAiBiG,UAClEs5B,EAAkBb,GAAmBp5F,KAAKk5F,oBAAoBE,gBACpEp5F,KAAKk5F,oBAAoBE,gBAAkBA,EAE3C,IAAK,MAAM75E,KAAS5T,EAAS,CAC3B,IAAK4T,EAAM26E,eAAgB,CACzBl6F,KAAKg5F,cAAgB,KACrBh5F,KAAKm6F,kBAAkBJ,EAAcx6E,IAErC,QACF,CAEA,MAAM66E,EAA2B76E,EAAM1c,OAAOq3D,WAAal6D,KAAKk5F,oBAAoBC,gBAEpF,GAAIc,GAAmBG,GAGrB,GAFAh/D,EAAS7b,IAEJ65E,EACH,YAOCa,GAAoBG,GACvBh/D,EAAS7b,EAEb,CACF,CAEA+5E,gCAAAA,GACEt5F,KAAK64F,aAAe,IAAIjmF,IACxB5S,KAAK84F,oBAAsB,IAAIlmF,IAE/B,MAAMynF,EAAchkB,GAAexP,KAAKkxB,GAAuB/3F,KAAKy1E,QAAQ5yE,QAE5E,IAAK,MAAMqpB,KAAUmuE,EAAa,CAEhC,IAAKnuE,EAAOk0C,MAAQyO,GAAW3iD,GAC7B,SAGF,MAAMwtE,EAAoBrjB,GAAeC,QAAQgkB,UAAUpuE,EAAOk0C,MAAOpgE,KAAKw1E,UAG1ElH,GAAUorB,KACZ15F,KAAK64F,aAAaxmF,IAAIioF,UAAUpuE,EAAOk0C,MAAOl0C,GAC9ClsB,KAAK84F,oBAAoBzmF,IAAI6Z,EAAOk0C,KAAMs5B,GAE9C,CACF,CAEAM,QAAAA,CAASn3F,GACH7C,KAAKg5F,gBAAkBn2F,IAI3B7C,KAAKm6F,kBAAkBn6F,KAAKy1E,QAAQ5yE,QACpC7C,KAAKg5F,cAAgBn2F,EACrBA,EAAOuhD,UAAUhtC,IAAIygF,IACrB73F,KAAKu6F,iBAAiB13F,GAEtB4uE,GAAa/hE,QAAQ1P,KAAKw1E,SAAUiiB,GAAgB,CAAEhlB,cAAe5vE,IACvE,CAEA03F,gBAAAA,CAAiB13F,GAEf,GAAIA,EAAOuhD,UAAUj6C,SAASytF,IAC5BvhB,GAAeC,QAAQgiB,GAA0Bz1F,EAAO8rE,QAAQ0pB,KAC7Dj0C,UAAUhtC,IAAIygF,SAInB,IAAK,MAAM2C,KAAankB,GAAeE,QAAQ1zE,EAAQm1F,IAGrD,IAAK,MAAMh6D,KAAQq4C,GAAe5vD,KAAK+zE,EAAWpC,IAChDp6D,EAAKomB,UAAUhtC,IAAIygF,GAGzB,CAEAsC,iBAAAA,CAAkB7rF,GAChBA,EAAO81C,UAAU71B,OAAOspE,IAExB,MAAM4C,EAAcpkB,GAAexP,KAAM,GAAEkxB,MAAyBF,KAAqBvpF,GACzF,IAAK,MAAM+hB,KAAQoqE,EACjBpqE,EAAK+zB,UAAU71B,OAAOspE,GAE1B,CAGA,sBAAOjoB,CAAgBtqE,GACrB,OAAOtF,KAAK63E,MAAK,WACf,MAAMxuE,EAAOuvF,GAAU5iB,oBAAoBh2E,KAAMsF,GAEjD,GAAsB,kBAAXA,EAAX,CAIA,QAAqB1C,IAAjByG,EAAK/D,IAAyBA,EAAOkf,WAAW,MAAmB,gBAAXlf,EAC1D,MAAM,IAAI+vE,UAAW,oBAAmB/vE,MAG1C+D,EAAK/D,IANL,CAOF,GACF,EAOFmsE,GAAa7iE,GAAGnL,OAAQk0F,IAAqB,KAC3C,IAAK,MAAM+C,KAAOrkB,GAAexP,KAAKixB,IACpCc,GAAU5iB,oBAAoB0kB,EAChC,IAOFjrB,GAAmBmpB,ICrRnB,MAAM+B,GAAO,MACPC,GAAW,SACXC,GAAa,IAAGD,KAEhBE,GAAc,OAAMD,KACpBE,GAAgB,SAAQF,KACxBG,GAAc,OAAMH,KACpBI,GAAe,QAAOJ,KACtBK,GAAwB,QAAOL,KAC/BM,GAAiB,UAASN,KAC1BO,GAAuB,OAAMP,KAE7BQ,GAAiB,YACjBC,GAAkB,aAClBC,GAAe,UACfC,GAAiB,YACjBC,GAAW,OACXC,GAAU,MAEVC,GAAoB,SACpBC,GAAkB,OAClBC,GAAkB,OAClBC,GAAiB,WAEjBC,GAA2B,mBAC3BC,GAAyB,iBACzBC,GAAgC,QAAOF,MAEvCG,GAAqB,sCACrBC,GAAiB,8BACjBC,GAAkB,YAAWH,uBAAiDA,mBAA6CA,KAC3HI,GAAuB,2EACvBC,GAAuB,GAAEF,OAAmBC,KAE5CE,GAA+B,IAAGZ,8BAA6CA,+BAA8CA,4BAMnI,MAAMa,WAAYjnB,GAChBxzE,WAAAA,CAAYs1D,GACVzuD,MAAMyuD,GACNr3D,KAAKolF,QAAUplF,KAAKw1E,SAAS7G,QAAQutB,IAEhCl8F,KAAKolF,UAOVplF,KAAKy8F,sBAAsBz8F,KAAKolF,QAASplF,KAAK08F,gBAE9CjrB,GAAa7iE,GAAG5O,KAAKw1E,SAAU2lB,IAAev3E,GAAS5jB,KAAKs+E,SAAS16D,KACvE,CAGA,eAAW8rD,GACT,OAAOirB,EACT,CAGA7Y,IAAAA,GACE,MAAM6a,EAAY38F,KAAKw1E,SACvB,GAAIx1E,KAAK48F,cAAcD,GACrB,OAIF,MAAMluF,EAASzO,KAAK68F,iBAEdjX,EAAYn3E,EAChBgjE,GAAa/hE,QAAQjB,EAAQqsF,GAAY,CAAEroB,cAAekqB,IAC1D,KAEInX,EAAY/T,GAAa/hE,QAAQitF,EAAW3B,GAAY,CAAEvoB,cAAehkE,IAE3E+2E,EAAUhS,kBAAqBoS,GAAaA,EAAUpS,mBAI1DxzE,KAAK88F,YAAYruF,EAAQkuF,GACzB38F,KAAK+8F,UAAUJ,EAAWluF,GAC5B,CAGAsuF,SAAAA,CAAU1lC,EAAS2lC,GACjB,IAAK3lC,EACH,OAGFA,EAAQjT,UAAUhtC,IAAIukF,IAEtB37F,KAAK+8F,UAAU1mB,GAAeU,uBAAuB1f,IAErD,MAAMgrB,EAAWA,KACsB,QAAjChrB,EAAQrnB,aAAa,SAKzBqnB,EAAQhR,gBAAgB,YACxBgR,EAAQxc,aAAa,iBAAiB,GACtC76C,KAAKi9F,gBAAgB5lC,GAAS,GAC9Boa,GAAa/hE,QAAQ2nD,EAAS4jC,GAAa,CACzCxoB,cAAeuqB,KARf3lC,EAAQjT,UAAUhtC,IAAIykF,GAStB,EAGJ77F,KAAK61E,eAAewM,EAAUhrB,EAASA,EAAQjT,UAAUj6C,SAASyxF,IACpE,CAEAkB,WAAAA,CAAYzlC,EAAS2lC,GACnB,IAAK3lC,EACH,OAGFA,EAAQjT,UAAU71B,OAAOotE,IACzBtkC,EAAQs3B,OAER3uF,KAAK88F,YAAYzmB,GAAeU,uBAAuB1f,IAEvD,MAAMgrB,EAAWA,KACsB,QAAjChrB,EAAQrnB,aAAa,SAKzBqnB,EAAQxc,aAAa,iBAAiB,GACtCwc,EAAQxc,aAAa,WAAY,MACjC76C,KAAKi9F,gBAAgB5lC,GAAS,GAC9Boa,GAAa/hE,QAAQ2nD,EAAS0jC,GAAc,CAAEtoB,cAAeuqB,KAP3D3lC,EAAQjT,UAAU71B,OAAOstE,GAOgD,EAG7E77F,KAAK61E,eAAewM,EAAUhrB,EAASA,EAAQjT,UAAUj6C,SAASyxF,IACpE,CAEAtd,QAAAA,CAAS16D,GACP,IAAM,CAACy3E,GAAgBC,GAAiBC,GAAcC,GAAgBC,GAAUC,IAASvwF,SAASyY,EAAMtgB,KACtG,OAGFsgB,EAAM2tC,kBACN3tC,EAAM6tC,iBAEN,MAAMroC,EAAWppB,KAAK08F,eAAeroF,QAAOgjD,IAAYwX,GAAWxX,KACnE,IAAI6lC,EAEJ,GAAI,CAACzB,GAAUC,IAASvwF,SAASyY,EAAMtgB,KACrC45F,EAAoB9zE,EAASxF,EAAMtgB,MAAQm4F,GAAW,EAAIryE,EAASzqB,OAAS,OACvE,CACL,MAAMsgF,EAAS,CAACqc,GAAiBE,IAAgBrwF,SAASyY,EAAMtgB,KAChE45F,EAAoB5sB,GAAqBlnD,EAAUxF,EAAM/gB,OAAQo8E,GAAQ,EAC3E,CAEIie,IACFA,EAAkBxX,MAAM,CAAEyX,eAAe,IACzCX,GAAIxmB,oBAAoBknB,GAAmBpb,OAE/C,CAEA4a,YAAAA,GACE,OAAOrmB,GAAexP,KAAKy1B,GAAqBt8F,KAAKolF,QACvD,CAEAyX,cAAAA,GACE,OAAO78F,KAAK08F,eAAe71B,MAAKt9C,GAASvpB,KAAK48F,cAAcrzE,MAAW,IACzE,CAEAkzE,qBAAAA,CAAsBnuF,EAAQ8a,GAC5BppB,KAAKo9F,yBAAyB9uF,EAAQ,OAAQ,WAE9C,IAAK,MAAMib,KAASH,EAClBppB,KAAKq9F,6BAA6B9zE,EAEtC,CAEA8zE,4BAAAA,CAA6B9zE,GAC3BA,EAAQvpB,KAAKs9F,iBAAiB/zE,GAC9B,MAAMg0E,EAAWv9F,KAAK48F,cAAcrzE,GAC9Bi0E,EAAYx9F,KAAKy9F,iBAAiBl0E,GACxCA,EAAMsxB,aAAa,gBAAiB0iD,GAEhCC,IAAcj0E,GAChBvpB,KAAKo9F,yBAAyBI,EAAW,OAAQ,gBAG9CD,GACHh0E,EAAMsxB,aAAa,WAAY,MAGjC76C,KAAKo9F,yBAAyB7zE,EAAO,OAAQ,OAG7CvpB,KAAK09F,mCAAmCn0E,EAC1C,CAEAm0E,kCAAAA,CAAmCn0E,GACjC,MAAM1mB,EAASwzE,GAAeU,uBAAuBxtD,GAEhD1mB,IAIL7C,KAAKo9F,yBAAyBv6F,EAAQ,OAAQ,YAE1C0mB,EAAM1H,IACR7hB,KAAKo9F,yBAAyBv6F,EAAQ,kBAAoB,GAAE0mB,EAAM1H,MAEtE,CAEAo7E,eAAAA,CAAgB5lC,EAASpvD,GACvB,MAAMu1F,EAAYx9F,KAAKy9F,iBAAiBpmC,GACxC,IAAKmmC,EAAUp5C,UAAUj6C,SAAS2xF,IAChC,OAGF,MAAMxjB,EAASA,CAAC52B,EAAU4E,KACxB,MAAM+Q,EAAUgf,GAAeC,QAAQ50B,EAAU87C,GAC7CnmC,GACFA,EAAQjT,UAAUk0B,OAAOhyB,EAAWr+C,EACtC,EAGFqwE,EAAOyjB,GAA0BJ,IACjCrjB,EAAO0jB,GAAwBH,IAC/B2B,EAAU3iD,aAAa,gBAAiB5yC,EAC1C,CAEAm1F,wBAAAA,CAAyB/lC,EAASqB,EAAWh2D,GACtC20D,EAAQrmB,aAAa0nB,IACxBrB,EAAQxc,aAAa6d,EAAWh2D,EAEpC,CAEAk6F,aAAAA,CAAcpb,GACZ,OAAOA,EAAKp9B,UAAUj6C,SAASwxF,GACjC,CAGA2B,gBAAAA,CAAiB9b,GACf,OAAOA,EAAK1lD,QAAQwgE,IAAuB9a,EAAOnL,GAAeC,QAAQgmB,GAAqB9a,EAChG,CAGAic,gBAAAA,CAAiBjc,GACf,OAAOA,EAAK7S,QAAQwtB,KAAmB3a,CACzC,CAGA,sBAAO5R,CAAgBtqE,GACrB,OAAOtF,KAAK63E,MAAK,WACf,MAAMxuE,EAAOmzF,GAAIxmB,oBAAoBh2E,MAErC,GAAsB,kBAAXsF,EAAX,CAIA,QAAqB1C,IAAjByG,EAAK/D,IAAyBA,EAAOkf,WAAW,MAAmB,gBAAXlf,EAC1D,MAAM,IAAI+vE,UAAW,oBAAmB/vE,MAG1C+D,EAAK/D,IANL,CAOF,GACF,EAOFmsE,GAAa7iE,GAAGzK,SAAU+2F,GAAsBmB,IAAsB,SAAUz4E,GAC1E,CAAC,IAAK,QAAQzY,SAASnL,KAAKmsC,UAC9BvoB,EAAM6tC,iBAGJod,GAAW7uE,OAIfw8F,GAAIxmB,oBAAoBh2E,MAAM8hF,MAChC,IAKArQ,GAAa7iE,GAAGnL,OAAQ23F,IAAqB,KAC3C,IAAK,MAAM/jC,KAAWgf,GAAexP,KAAK01B,IACxCC,GAAIxmB,oBAAoB3e,EAC1B,IAMFoY,GAAmB+sB,ICxSnB,MAAM9sB,GAAO,QACPgG,GAAW,WACXE,GAAa,IAAGF,KAEhBioB,GAAmB,YAAW/nB,KAC9BgoB,GAAkB,WAAUhoB,KAC5BioB,GAAiB,UAASjoB,KAC1BkoB,GAAkB,WAAUloB,KAC5BmoB,GAAc,OAAMnoB,KACpBooB,GAAgB,SAAQpoB,KACxBqoB,GAAc,OAAMroB,KACpBsoB,GAAe,QAAOtoB,KAEtBuoB,GAAkB,OAClBC,GAAkB,OAClBC,GAAkB,OAClBC,GAAqB,UAErBzpB,GAAc,CAClBwf,UAAW,UACXkK,SAAU,UACVnlE,MAAO,UAGHw7C,GAAU,CACdyf,WAAW,EACXkK,UAAU,EACVnlE,MAAO,KAOT,MAAMolE,WAAcjpB,GAClBxzE,WAAAA,CAAYs1D,EAAS/xD,GACnBsD,MAAMyuD,EAAS/xD,GAEftF,KAAK20F,SAAW,KAChB30F,KAAKy+F,sBAAuB,EAC5Bz+F,KAAK0+F,yBAA0B,EAC/B1+F,KAAKi1F,eACP,CAGA,kBAAWrgB,GACT,OAAOA,EACT,CAEA,sBAAWC,GACT,OAAOA,EACT,CAEA,eAAWnF,GACT,OAAOA,EACT,CAGAoS,IAAAA,GACE,MAAM0D,EAAY/T,GAAa/hE,QAAQ1P,KAAKw1E,SAAUyoB,IAEtD,GAAIzY,EAAUhS,iBACZ,OAGFxzE,KAAK2+F,gBAED3+F,KAAKy1E,QAAQ4e,WACfr0F,KAAKw1E,SAASpxB,UAAUhtC,IAAI+mF,IAG9B,MAAM9b,EAAWA,KACfriF,KAAKw1E,SAASpxB,UAAU71B,OAAO+vE,IAC/B7sB,GAAa/hE,QAAQ1P,KAAKw1E,SAAU0oB,IAEpCl+F,KAAK4+F,oBAAoB,EAG3B5+F,KAAKw1E,SAASpxB,UAAU71B,OAAO6vE,IAC/BlvB,GAAOlvE,KAAKw1E,UACZx1E,KAAKw1E,SAASpxB,UAAUhtC,IAAIinF,GAAiBC,IAE7Ct+F,KAAK61E,eAAewM,EAAUriF,KAAKw1E,SAAUx1E,KAAKy1E,QAAQ4e,UAC5D,CAEAltB,IAAAA,GACE,IAAKnnE,KAAK6+F,UACR,OAGF,MAAMjZ,EAAYnU,GAAa/hE,QAAQ1P,KAAKw1E,SAAUuoB,IAEtD,GAAInY,EAAUpS,iBACZ,OAGF,MAAM6O,EAAWA,KACfriF,KAAKw1E,SAASpxB,UAAUhtC,IAAIgnF,IAC5Bp+F,KAAKw1E,SAASpxB,UAAU71B,OAAO+vE,GAAoBD,IACnD5sB,GAAa/hE,QAAQ1P,KAAKw1E,SAAUwoB,GAAa,EAGnDh+F,KAAKw1E,SAASpxB,UAAUhtC,IAAIknF,IAC5Bt+F,KAAK61E,eAAewM,EAAUriF,KAAKw1E,SAAUx1E,KAAKy1E,QAAQ4e,UAC5D,CAEA1e,OAAAA,GACE31E,KAAK2+F,gBAED3+F,KAAK6+F,WACP7+F,KAAKw1E,SAASpxB,UAAU71B,OAAO8vE,IAGjCz1F,MAAM+sE,SACR,CAEAkpB,OAAAA,GACE,OAAO7+F,KAAKw1E,SAASpxB,UAAUj6C,SAASk0F,GAC1C,CAIAO,kBAAAA,GACO5+F,KAAKy1E,QAAQ8oB,WAIdv+F,KAAKy+F,sBAAwBz+F,KAAK0+F,0BAItC1+F,KAAK20F,SAAWxwE,YAAW,KACzBnkB,KAAKmnE,MAAM,GACVnnE,KAAKy1E,QAAQr8C,QAClB,CAEA0lE,cAAAA,CAAel7E,EAAOm7E,GACpB,OAAQn7E,EAAMvd,MACZ,IAAK,YACL,IAAK,WACHrG,KAAKy+F,qBAAuBM,EAC5B,MAGF,IAAK,UACL,IAAK,WACH/+F,KAAK0+F,wBAA0BK,EAC/B,MAQJ,GAAIA,EAEF,YADA/+F,KAAK2+F,gBAIP,MAAMzf,EAAct7D,EAAM6uD,cACtBzyE,KAAKw1E,WAAa0J,GAAel/E,KAAKw1E,SAASrrE,SAAS+0E,IAI5Dl/E,KAAK4+F,oBACP,CAEA3J,aAAAA,GACExjB,GAAa7iE,GAAG5O,KAAKw1E,SAAUmoB,IAAiB/5E,GAAS5jB,KAAK8+F,eAAel7E,GAAO,KACpF6tD,GAAa7iE,GAAG5O,KAAKw1E,SAAUooB,IAAgBh6E,GAAS5jB,KAAK8+F,eAAel7E,GAAO,KACnF6tD,GAAa7iE,GAAG5O,KAAKw1E,SAAUqoB,IAAej6E,GAAS5jB,KAAK8+F,eAAel7E,GAAO,KAClF6tD,GAAa7iE,GAAG5O,KAAKw1E,SAAUsoB,IAAgBl6E,GAAS5jB,KAAK8+F,eAAel7E,GAAO,IACrF,CAEA+6E,aAAAA,GACEjgB,aAAa1+E,KAAK20F,UAClB30F,KAAK20F,SAAW,IAClB,CAGA,sBAAO/kB,CAAgBtqE,GACrB,OAAOtF,KAAK63E,MAAK,WACf,MAAMxuE,EAAOm1F,GAAMxoB,oBAAoBh2E,KAAMsF,GAE7C,GAAsB,kBAAXA,EAAqB,CAC9B,GAA4B,qBAAjB+D,EAAK/D,GACd,MAAM,IAAI+vE,UAAW,oBAAmB/vE,MAG1C+D,EAAK/D,GAAQtF,KACf,CACF,GACF,EAOFi3E,GAAqBunB,IAMrB/uB,GAAmB+uB,G,qBC1NnBQ,EAAQ,EAAU,CAACC,EAAKt/E,KACpB,MAAM9c,EAASo8F,EAAIhjD,WAAagjD,EAChC,IAAK,MAAO37F,EAAKka,KAAQmC,EACrB9c,EAAOS,GAAOka,EAElB,OAAO3a,CAAM,C,uBCNfq8F,EAAOF,QAAU,EAAjBE,K;;;;;GCcF,MAAMlhD,EAAUA,KACV,CAA4C,C,uBCflD,SAASpsC,EAAKnH,EAAIkN,GAChB,OAAO,WACL,OAAOlN,EAAGmK,MAAM+C,EAASmG,UAC3B,CACF,CAIA,MAAM,SAACc,GAAY7b,OAAO+F,WACpB,eAACyM,GAAkBxS,OAEnBo8F,EAAS,CAAC35E,GAASja,IACrB,MAAMhN,EAAMqgB,EAASvU,KAAKkB,GAC1B,OAAOia,EAAMjnB,KAASinB,EAAMjnB,GAAOA,EAAIshB,MAAM,GAAI,GAAGwG,cAAc,EAFvD,CAGZtjB,OAAOkG,OAAO,OAEXm2F,EAAc/4F,IAClBA,EAAOA,EAAKggB,cACJ9a,GAAU4zF,EAAO5zF,KAAWlF,GAGhCg5F,EAAah5F,GAAQkF,UAAgBA,IAAUlF,GAS/C,QAAC7F,GAAWD,MASZ++F,EAAcD,EAAW,aAS/B,SAASE,EAAS/hF,GAChB,OAAe,OAARA,IAAiB8hF,EAAY9hF,IAA4B,OAApBA,EAAIzb,cAAyBu9F,EAAY9hF,EAAIzb,cACpF0Z,EAAW+B,EAAIzb,YAAYw9F,WAAa/hF,EAAIzb,YAAYw9F,SAAS/hF,EACxE,CASA,MAAMgiF,EAAgBJ,EAAW,eAUjC,SAASK,EAAkBjiF,GACzB,IAAIrV,EAMJ,OAJEA,EAD0B,qBAAhBu3F,aAAiCA,YAAkB,OACpDA,YAAYC,OAAOniF,GAEnB,GAAUA,EAAU,QAAMgiF,EAAchiF,EAAI+F,QAEhDpb,CACT,CASA,MAAM4X,EAAWs/E,EAAW,UAQtB5jF,EAAa4jF,EAAW,YASxBO,EAAWP,EAAW,UAStB/zF,EAAYC,GAAoB,OAAVA,GAAmC,kBAAVA,EAQ/Cu9C,EAAYv9C,IAAmB,IAAVA,IAA4B,IAAVA,EASvCooB,EAAiBnW,IACrB,GAAoB,WAAhB2hF,EAAO3hF,GACT,OAAO,EAGT,MAAM1U,EAAYyM,EAAeiI,GACjC,OAAsB,OAAd1U,GAAsBA,IAAc/F,OAAO+F,WAAkD,OAArC/F,OAAOwS,eAAezM,OAA0BkK,OAAOgnB,eAAexc,MAAUxK,OAAOiF,YAAYuF,EAAI,EAUnKq2C,EAASurC,EAAW,QASpBS,EAAST,EAAW,QASpBU,EAASV,EAAW,QASpBW,EAAaX,EAAW,YASxBY,EAAYxiF,GAAQlS,EAASkS,IAAQ/B,EAAW+B,EAAIyiF,MASpDC,EAAc30F,IAClB,IAAI40F,EACJ,OAAO50F,IACgB,oBAAb60F,UAA2B70F,aAAiB60F,UAClD3kF,EAAWlQ,EAAMu8E,UACY,cAA1BqY,EAAOhB,EAAO5zF,KAEL,WAAT40F,GAAqB1kF,EAAWlQ,EAAMqT,WAAkC,sBAArBrT,EAAMqT,YAGhE,EAUIyhF,EAAoBjB,EAAW,oBAE9BkB,EAAkBC,EAAWC,EAAYC,GAAa,CAAC,iBAAkB,UAAW,WAAY,WAAWj2F,IAAI40F,GAShHx6E,EAAQrmB,GAAQA,EAAIqmB,KACxBrmB,EAAIqmB,OAASrmB,EAAI6D,QAAQ,qCAAsC,IAiBjE,SAASwJ,EAAQxB,EAAKK,GAAI,WAACi2F,GAAa,GAAS,CAAC,GAEhD,GAAY,OAARt2F,GAA+B,qBAARA,EACzB,OAGF,IAAI1L,EACAsQ,EAQJ,GALmB,kBAAR5E,IAETA,EAAM,CAACA,IAGL5J,EAAQ4J,GAEV,IAAK1L,EAAI,EAAGsQ,EAAI5E,EAAIzL,OAAQD,EAAIsQ,EAAGtQ,IACjC+L,EAAGJ,KAAK,KAAMD,EAAI1L,GAAIA,EAAG0L,OAEtB,CAEL,MAAMY,EAAO01F,EAAa39F,OAAOqR,oBAAoBhK,GAAOrH,OAAOiI,KAAKZ,GAClE2uC,EAAM/tC,EAAKrM,OACjB,IAAI2E,EAEJ,IAAK5E,EAAI,EAAGA,EAAIq6C,EAAKr6C,IACnB4E,EAAM0H,EAAKtM,GACX+L,EAAGJ,KAAK,KAAMD,EAAI9G,GAAMA,EAAK8G,EAEjC,CACF,CAEA,SAASu2F,EAAQv2F,EAAK9G,GACpBA,EAAMA,EAAI+iB,cACV,MAAMrb,EAAOjI,OAAOiI,KAAKZ,GACzB,IACIkT,EADA5e,EAAIsM,EAAKrM,OAEb,MAAOD,KAAM,EAEX,GADA4e,EAAOtS,EAAKtM,GACR4E,IAAQga,EAAK+I,cACf,OAAO/I,EAGX,OAAO,IACT,CAEA,MAAMsjF,EAAU,KAEY,qBAAfnsC,WAAmCA,WACvB,qBAATjxD,KAAuBA,KAA0B,qBAAXC,OAAyBA,OAAS,EAAAo6C,EAHxE,GAMVgjD,EAAoBh6D,IAAay4D,EAAYz4D,IAAYA,IAAY+5D,EAoB3E,SAASE,IACP,MAAM,SAACC,GAAYF,EAAiB7gG,OAASA,MAAQ,CAAC,EAChDmI,EAAS,CAAC,EACV64F,EAAc,CAACxjF,EAAKla,KACxB,MAAM29F,EAAYF,GAAYJ,EAAQx4F,EAAQ7E,IAAQA,EAClDqwB,EAAcxrB,EAAO84F,KAAettE,EAAcnW,GACpDrV,EAAO84F,GAAaH,EAAM34F,EAAO84F,GAAYzjF,GACpCmW,EAAcnW,GACvBrV,EAAO84F,GAAaH,EAAM,CAAC,EAAGtjF,GACrBhd,EAAQgd,GACjBrV,EAAO84F,GAAazjF,EAAIqC,QAExB1X,EAAO84F,GAAazjF,CACtB,EAGF,IAAK,IAAI9e,EAAI,EAAGsQ,EAAI8O,UAAUnf,OAAQD,EAAIsQ,EAAGtQ,IAC3Cof,UAAUpf,IAAMkN,EAAQkS,UAAUpf,GAAIsiG,GAExC,OAAO74F,CACT,CAYA,MAAMsJ,EAAS,CAAC5G,EAAGC,EAAG6M,GAAU+oF,cAAa,CAAC,KAC5C90F,EAAQd,GAAG,CAAC0S,EAAKla,KACXqU,GAAW8D,EAAW+B,GACxB3S,EAAEvH,GAAOsO,EAAK4L,EAAK7F,GAEnB9M,EAAEvH,GAAOka,CACX,GACC,CAACkjF,eACG71F,GAUHq2F,EAAYtzD,IACc,QAA1BA,EAAQ/uC,WAAW,KACrB+uC,EAAUA,EAAQ/tB,MAAM,IAEnB+tB,GAYHuzD,EAAW,CAACp/F,EAAaq/F,EAAkBzhF,EAAO0hF,KACtDt/F,EAAY+G,UAAY/F,OAAOkG,OAAOm4F,EAAiBt4F,UAAWu4F,GAClEt/F,EAAY+G,UAAU/G,YAAcA,EACpCgB,OAAO69B,eAAe7+B,EAAa,QAAS,CAC1CW,MAAO0+F,EAAiBt4F,YAE1B6W,GAAS5c,OAAO4D,OAAO5E,EAAY+G,UAAW6W,EAAM,EAYhD2hF,EAAe,CAACC,EAAWC,EAASntF,EAAQotF,KAChD,IAAI9hF,EACAjhB,EACAyE,EACJ,MAAM8iC,EAAS,CAAC,EAIhB,GAFAu7D,EAAUA,GAAW,CAAC,EAEL,MAAbD,EAAmB,OAAOC,EAE9B,EAAG,CACD7hF,EAAQ5c,OAAOqR,oBAAoBmtF,GACnC7iG,EAAIihB,EAAMhhB,OACV,MAAOD,KAAM,EACXyE,EAAOwc,EAAMjhB,GACP+iG,IAAcA,EAAWt+F,EAAMo+F,EAAWC,IAAcv7D,EAAO9iC,KACnEq+F,EAAQr+F,GAAQo+F,EAAUp+F,GAC1B8iC,EAAO9iC,IAAQ,GAGnBo+F,GAAuB,IAAXltF,GAAoBkB,EAAegsF,EACjD,OAASA,KAAeltF,GAAUA,EAAOktF,EAAWC,KAAaD,IAAcx+F,OAAO+F,WAEtF,OAAO04F,CAAO,EAYVxyD,EAAW,CAACzwC,EAAKmjG,EAActpC,KACnC75D,EAAMW,OAAOX,SACIqE,IAAbw1D,GAA0BA,EAAW75D,EAAII,UAC3Cy5D,EAAW75D,EAAII,QAEjBy5D,GAAYspC,EAAa/iG,OACzB,MAAMgjG,EAAYpjG,EAAIokB,QAAQ++E,EAActpC,GAC5C,OAAsB,IAAfupC,GAAoBA,IAAcvpC,CAAQ,EAW7CwpC,EAAWr2F,IACf,IAAKA,EAAO,OAAO,KACnB,GAAI/K,EAAQ+K,GAAQ,OAAOA,EAC3B,IAAI7M,EAAI6M,EAAM5M,OACd,IAAKihG,EAASlhG,GAAI,OAAO,KACzB,MAAMgW,EAAM,IAAInU,MAAM7B,GACtB,MAAOA,KAAM,EACXgW,EAAIhW,GAAK6M,EAAM7M,GAEjB,OAAOgW,CAAG,EAYNmtF,EAAe,CAACC,GAEbv2F,GACEu2F,GAAcv2F,aAAiBu2F,EAHrB,CAKI,qBAAfC,YAA8BxsF,EAAewsF,aAUjDC,EAAe,CAAC53F,EAAKK,KACzB,MAAMw3F,EAAY73F,GAAOA,EAAI4I,OAAOiF,UAE9BA,EAAWgqF,EAAU53F,KAAKD,GAEhC,IAAIjC,EAEJ,OAAQA,EAAS8P,EAASG,UAAYjQ,EAAOkQ,KAAM,CACjD,MAAM6pF,EAAO/5F,EAAOzF,MACpB+H,EAAGJ,KAAKD,EAAK83F,EAAK,GAAIA,EAAK,GAC7B,GAWIC,EAAW,CAACC,EAAQ7jG,KACxB,IAAIu9B,EACJ,MAAMpnB,EAAM,GAEZ,MAAwC,QAAhConB,EAAUsmE,EAAOC,KAAK9jG,IAC5BmW,EAAIrT,KAAKy6B,GAGX,OAAOpnB,CAAG,EAIN4tF,EAAalD,EAAW,mBAExBmD,EAAchkG,GACXA,EAAI8nB,cAAcjkB,QAAQ,yBAC/B,SAAkBgsB,EAAGo0E,EAAIC,GACvB,OAAOD,EAAGpjD,cAAgBqjD,CAC5B,IAKEr/F,EAAiB,GAAGA,oBAAoB,CAACgH,EAAKjH,IAASC,EAAeiH,KAAKD,EAAKjH,GAA/D,CAAsEJ,OAAO+F,WAS9FyzB,EAAW6iE,EAAW,UAEtBsD,EAAoB,CAACt4F,EAAKu4F,KAC9B,MAAMtB,EAAct+F,OAAO6/F,0BAA0Bx4F,GAC/Cy4F,EAAqB,CAAC,EAE5Bj3F,EAAQy1F,GAAa,CAACxgE,EAAY7+B,KAChC,IAAIkb,GAC2C,KAA1CA,EAAMylF,EAAQ9hE,EAAY7+B,EAAMoI,MACnCy4F,EAAmB7gG,GAAQkb,GAAO2jB,EACpC,IAGF99B,OAAO+/F,iBAAiB14F,EAAKy4F,EAAmB,EAQ5CE,EAAiB34F,IACrBs4F,EAAkBt4F,GAAK,CAACy2B,EAAY7+B,KAElC,GAAIyZ,EAAWrR,KAA6D,IAArD,CAAC,YAAa,SAAU,UAAUuY,QAAQ3gB,GAC/D,OAAO,EAGT,MAAMU,EAAQ0H,EAAIpI,GAEbyZ,EAAW/Y,KAEhBm+B,EAAW0B,YAAa,EAEpB,aAAc1B,EAChBA,EAAWuzB,UAAW,EAInBvzB,EAAWxuB,MACdwuB,EAAWxuB,IAAM,KACf,MAAMhU,MAAM,qCAAwC2D,EAAO,IAAK,GAEpE,GACA,EAGEghG,EAAc,CAACC,EAAeC,KAClC,MAAM94F,EAAM,CAAC,EAEP+4F,EAAUzuF,IACdA,EAAI9I,SAAQlJ,IACV0H,EAAI1H,IAAS,CAAI,GACjB,EAKJ,OAFAlC,EAAQyiG,GAAiBE,EAAOF,GAAiBE,EAAOjkG,OAAO+jG,GAAej5F,MAAMk5F,IAE7E94F,CAAG,EAGN6kE,EAAO,OAEPm0B,GAAiB,CAAC1gG,EAAOmb,IACb,MAATnb,GAAiB+Q,OAAO4vF,SAAS3gG,GAASA,GAASA,EAAQmb,EAG9DylF,GAAQ,6BAERC,GAAQ,aAERC,GAAW,CACfD,SACAD,SACAG,YAAaH,GAAQA,GAAMlkD,cAAgBmkD,IAGvCG,GAAiB,CAACtyF,EAAO,GAAIuyF,EAAWH,GAASC,eACrD,IAAIllG,EAAM,GACV,MAAM,OAACI,GAAUglG,EACjB,MAAOvyF,IACL7S,GAAOolG,EAASrtD,KAAKu3B,SAAWlvE,EAAO,GAGzC,OAAOJ,CAAG,EAUZ,SAASqlG,GAAoBr4F,GAC3B,SAAUA,GAASkQ,EAAWlQ,EAAMu8E,SAAyC,aAA9Bv8E,EAAMyH,OAAOgnB,cAA+BzuB,EAAMyH,OAAOiF,UAC1G,CAEA,MAAM4rF,GAAgBz5F,IACpB,MAAM6T,EAAQ,IAAI1d,MAAM,IAElBujG,EAAQ,CAAChhG,EAAQpE,KAErB,GAAI4M,EAASxI,GAAS,CACpB,GAAImb,EAAM0E,QAAQ7f,IAAW,EAC3B,OAGF,KAAK,WAAYA,GAAS,CACxBmb,EAAMvf,GAAKoE,EACX,MAAMD,EAASrC,EAAQsC,GAAU,GAAK,CAAC,EASvC,OAPA8I,EAAQ9I,GAAQ,CAACJ,EAAOY,KACtB,MAAMygG,EAAeD,EAAMphG,EAAOhE,EAAI,IACrC4gG,EAAYyE,KAAkBlhG,EAAOS,GAAOygG,EAAa,IAG5D9lF,EAAMvf,QAAKkE,EAEJC,CACT,CACF,CAEA,OAAOC,CAAM,EAGf,OAAOghG,EAAM15F,EAAK,EAAE,EAGhB45F,GAAY5E,EAAW,iBAEvB6E,GAAc14F,GAClBA,IAAUD,EAASC,IAAUkQ,EAAWlQ,KAAWkQ,EAAWlQ,EAAMoW,OAASlG,EAAWlQ,EAAMzF,OAEhG,IAAIo+F,GAAU,CACZ1jG,UACAg/F,gBACAD,WACAW,aACAT,oBACA1/E,WACA6/E,WACA92C,YACAx9C,WACAqoB,gBACA2sE,mBACAC,YACAC,aACAC,YACAnB,cACAzrC,SACAgsC,SACAC,SACAvjE,WACA9gB,aACAukF,WACAK,oBACAwB,eACA9B,aACAn0F,UACAk1F,QACArvF,SACAmT,OACAs8E,WACAC,WACAG,eACAnC,SACAC,aACApwD,WACA4yD,UACAI,eACAG,WACAG,aACAl/F,iBACA+gG,WAAY/gG,EACZs/F,oBACAK,gBACAC,cACAT,cACAtzB,OACAm0B,kBACAzC,UACAj9F,OAAQk9F,EACRC,mBACA2C,YACAE,kBACAE,uBACAC,gBACAG,aACAC,eAcF,SAASG,GAAWjmG,EAASuK,EAAMpD,EAAQ0C,EAASq8F,GAClDhmG,MAAMgM,KAAKrK,MAEP3B,MAAM0K,kBACR1K,MAAM0K,kBAAkB/I,KAAMA,KAAK+B,aAEnC/B,KAAKie,OAAQ,IAAK5f,OAAS4f,MAG7Bje,KAAK7B,QAAUA,EACf6B,KAAKgC,KAAO,aACZ0G,IAAS1I,KAAK0I,KAAOA,GACrBpD,IAAWtF,KAAKsF,OAASA,GACzB0C,IAAYhI,KAAKgI,QAAUA,GAC3Bq8F,IAAarkG,KAAKqkG,SAAWA,EAC/B,CAEAH,GAAQ/C,SAASiD,GAAY/lG,MAAO,CAClCimG,OAAQ,WACN,MAAO,CAELnmG,QAAS6B,KAAK7B,QACd6D,KAAMhC,KAAKgC,KAEX8zD,YAAa91D,KAAK81D,YAClBnxC,OAAQ3kB,KAAK2kB,OAEb4/E,SAAUvkG,KAAKukG,SACfC,WAAYxkG,KAAKwkG,WACjBC,aAAczkG,KAAKykG,aACnBxmF,MAAOje,KAAKie,MAEZ3Y,OAAQ4+F,GAAQL,aAAa7jG,KAAKsF,QAClCoD,KAAM1I,KAAK0I,KACXg8F,OAAQ1kG,KAAKqkG,UAAYrkG,KAAKqkG,SAASK,OAAS1kG,KAAKqkG,SAASK,OAAS,KAE3E,IAGF,MAAMC,GAAcP,GAAWt7F,UACzBu4F,GAAc,CAAC,EAErB,CACE,uBACA,iBACA,eACA,YACA,cACA,4BACA,iBACA,mBACA,kBACA,eACA,kBACA,mBAEAz1F,SAAQlD,IACR24F,GAAY34F,GAAQ,CAAChG,MAAOgG,EAAK,IAGnC3F,OAAO+/F,iBAAiBsB,GAAY/C,IACpCt+F,OAAO69B,eAAe+jE,GAAa,eAAgB,CAACjiG,OAAO,IAG3D0hG,GAAWrmE,KAAO,CAACv7B,EAAOkG,EAAMpD,EAAQ0C,EAASq8F,EAAUO,KACzD,MAAMC,EAAa9hG,OAAOkG,OAAO07F,IAgBjC,OAdAT,GAAQ5C,aAAa9+F,EAAOqiG,GAAY,SAAgBz6F,GACtD,OAAOA,IAAQ/L,MAAMyK,SACvB,IAAG3F,GACe,iBAATA,IAGTihG,GAAW/5F,KAAKw6F,EAAYriG,EAAMrE,QAASuK,EAAMpD,EAAQ0C,EAASq8F,GAElEQ,EAAWC,MAAQtiG,EAEnBqiG,EAAW7iG,KAAOQ,EAAMR,KAExB4iG,GAAe7hG,OAAO4D,OAAOk+F,EAAYD,GAElCC,CAAU,EAInB,IAAIE,GAAc,KASlB,SAASC,GAAYz5F,GACnB,OAAO24F,GAAQvwE,cAAcpoB,IAAU24F,GAAQ1jG,QAAQ+K,EACzD,CASA,SAAS05F,GAAe3hG,GACtB,OAAO4gG,GAAQl1D,SAAS1rC,EAAK,MAAQA,EAAIuc,MAAM,GAAI,GAAKvc,CAC1D,CAWA,SAAS4hG,GAAU3xE,EAAMjwB,EAAK6hG,GAC5B,OAAK5xE,EACEA,EAAKtK,OAAO3lB,GAAKkH,KAAI,SAAcxE,EAAOtH,GAG/C,OADAsH,EAAQi/F,GAAej/F,IACfm/F,GAAQzmG,EAAI,IAAMsH,EAAQ,IAAMA,CAC1C,IAAGxG,KAAK2lG,EAAO,IAAM,IALH7hG,CAMpB,CASA,SAAS8hG,GAAY1wF,GACnB,OAAOwvF,GAAQ1jG,QAAQkU,KAASA,EAAImU,KAAKm8E,GAC3C,CAEA,MAAMK,GAAanB,GAAQ5C,aAAa4C,GAAS,CAAC,EAAG,MAAM,SAAgB/gG,GACzE,MAAO,WAAWqE,KAAKrE,EACzB,IAyBA,SAASmiG,GAAWl7F,EAAKm7F,EAAUj0F,GACjC,IAAK4yF,GAAQ54F,SAASlB,GACpB,MAAM,IAAIirE,UAAU,4BAItBkwB,EAAWA,GAAY,IAAI,SAG3Bj0F,EAAU4yF,GAAQ5C,aAAahwF,EAAS,CACtCk0F,YAAY,EACZL,MAAM,EACNM,SAAS,IACR,GAAO,SAAiB70C,EAAQ9tD,GAEjC,OAAQohG,GAAQ5E,YAAYx8F,EAAO8tD,GACrC,IAEA,MAAM40C,EAAal0F,EAAQk0F,WAErBE,EAAUp0F,EAAQo0F,SAAWC,EAC7BR,EAAO7zF,EAAQ6zF,KACfM,EAAUn0F,EAAQm0F,QAClBG,EAAQt0F,EAAQu0F,MAAwB,qBAATA,MAAwBA,KACvDC,EAAUF,GAAS1B,GAAQN,oBAAoB2B,GAErD,IAAKrB,GAAQzoF,WAAWiqF,GACtB,MAAM,IAAIrwB,UAAU,8BAGtB,SAAS0wB,EAAarjG,GACpB,GAAc,OAAVA,EAAgB,MAAO,GAE3B,GAAIwhG,GAAQrwC,OAAOnxD,GACjB,OAAOA,EAAMsjG,cAGf,IAAKF,GAAW5B,GAAQpE,OAAOp9F,GAC7B,MAAM,IAAI0hG,GAAW,gDAGvB,OAAIF,GAAQ1E,cAAc98F,IAAUwhG,GAAQrC,aAAan/F,GAChDojG,GAA2B,oBAATD,KAAsB,IAAIA,KAAK,CAACnjG,IAAUujG,OAAOloE,KAAKr7B,GAG1EA,CACT,CAYA,SAASijG,EAAejjG,EAAOY,EAAKiwB,GAClC,IAAI7e,EAAMhS,EAEV,GAAIA,IAAU6wB,GAAyB,kBAAV7wB,EAC3B,GAAIwhG,GAAQl1D,SAAS1rC,EAAK,MAExBA,EAAMkiG,EAAaliG,EAAMA,EAAIuc,MAAM,GAAI,GAEvCnd,EAAQsB,KAAKoD,UAAU1E,QAClB,GACJwhG,GAAQ1jG,QAAQkC,IAAU0iG,GAAY1iG,KACrCwhG,GAAQnE,WAAWr9F,IAAUwhG,GAAQl1D,SAAS1rC,EAAK,SAAWoR,EAAMwvF,GAAQtC,QAAQl/F,IAYtF,OATAY,EAAM2hG,GAAe3hG,GAErBoR,EAAI9I,SAAQ,SAAc4e,EAAIjc,IAC1B21F,GAAQ5E,YAAY90E,IAAc,OAAPA,GAAgB+6E,EAASzd,QAExC,IAAZ2d,EAAmBP,GAAU,CAAC5hG,GAAMiL,EAAO42F,GAAqB,OAAZM,EAAmBniG,EAAMA,EAAM,KACnFyiG,EAAav7E,GAEjB,KACO,EAIX,QAAIw6E,GAAYtiG,KAIhB6iG,EAASzd,OAAOod,GAAU3xE,EAAMjwB,EAAK6hG,GAAOY,EAAarjG,KAElD,EACT,CAEA,MAAMub,EAAQ,GAERioF,EAAiBnjG,OAAO4D,OAAO0+F,GAAY,CAC/CM,iBACAI,eACAf,iBAGF,SAASmB,EAAMzjG,EAAO6wB,GACpB,IAAI2wE,GAAQ5E,YAAY58F,GAAxB,CAEA,IAA8B,IAA1Bub,EAAM0E,QAAQjgB,GAChB,MAAMrE,MAAM,kCAAoCk1B,EAAK/zB,KAAK,MAG5Dye,EAAM5c,KAAKqB,GAEXwhG,GAAQt4F,QAAQlJ,GAAO,SAAc8nB,EAAIlnB,GACvC,MAAM6E,IAAW+7F,GAAQ5E,YAAY90E,IAAc,OAAPA,IAAgBk7E,EAAQr7F,KAClEk7F,EAAU/6E,EAAI05E,GAAQnkF,SAASzc,GAAOA,EAAIshB,OAASthB,EAAKiwB,EAAM2yE,IAGjD,IAAX/9F,GACFg+F,EAAM37E,EAAI+I,EAAOA,EAAKtK,OAAO3lB,GAAO,CAACA,GAEzC,IAEA2a,EAAM/O,KAlBgC,CAmBxC,CAEA,IAAKg1F,GAAQ54F,SAASlB,GACpB,MAAM,IAAIirE,UAAU,0BAKtB,OAFA8wB,EAAM/7F,GAECm7F,CACT,CAUA,SAASa,GAAS7nG,GAChB,MAAM8nG,EAAU,CACd,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,MAAO,IACP,MAAO,MAET,OAAOv6F,mBAAmBvN,GAAK6D,QAAQ,oBAAoB,SAAkBgC,GAC3E,OAAOiiG,EAAQjiG,EACjB,GACF,CAUA,SAASkiG,GAAqB56F,EAAQ4F,GACpCtR,KAAKumG,OAAS,GAEd76F,GAAU45F,GAAW55F,EAAQ1L,KAAMsR,EACrC,CAEA,MAAMxI,GAAYw9F,GAAqBx9F,UAwBvC,SAAS09F,GAAOhpF,GACd,OAAO1R,mBAAmB0R,GACxBpb,QAAQ,QAAS,KACjBA,QAAQ,OAAQ,KAChBA,QAAQ,QAAS,KACjBA,QAAQ,OAAQ,KAChBA,QAAQ,QAAS,KACjBA,QAAQ,QAAS,IACrB,CAWA,SAASqkG,GAASC,EAAKh7F,EAAQ4F,GAE7B,IAAK5F,EACH,OAAOg7F,EAGT,MAAMC,EAAUr1F,GAAWA,EAAQk1F,QAAUA,GAEvCI,EAAct1F,GAAWA,EAAQu1F,UAEvC,IAAIC,EAUJ,GAPEA,EADEF,EACiBA,EAAYl7F,EAAQ4F,GAEpB4yF,GAAQ7D,kBAAkB30F,GAC3CA,EAAOkT,WACP,IAAI0nF,GAAqB56F,EAAQ4F,GAASsN,SAAS+nF,GAGnDG,EAAkB,CACpB,MAAMC,EAAgBL,EAAI/jF,QAAQ,MAEX,IAAnBokF,IACFL,EAAMA,EAAI7mF,MAAM,EAAGknF,IAErBL,KAA8B,IAAtBA,EAAI/jF,QAAQ,KAAc,IAAM,KAAOmkF,CACjD,CAEA,OAAOJ,CACT,CAvEA59F,GAAUg/E,OAAS,SAAgB9lF,EAAMU,GACvC1C,KAAKumG,OAAOllG,KAAK,CAACW,EAAMU,GAC1B,EAEAoG,GAAU8V,SAAW,SAAkBooF,GACrC,MAAML,EAAUK,EAAU,SAAStkG,GACjC,OAAOskG,EAAQ38F,KAAKrK,KAAM0C,EAAO0jG,GACnC,EAAIA,GAEJ,OAAOpmG,KAAKumG,OAAO/7F,KAAI,SAAc03F,GACnC,OAAOyE,EAAQzE,EAAK,IAAM,IAAMyE,EAAQzE,EAAK,GAC/C,GAAG,IAAI1iG,KAAK,IACd,EA6DA,MAAMynG,GACJ,WAAAllG,GACE/B,KAAK0yE,SAAW,EAClB,CAUA,GAAAnrC,CAAI2/D,EAAWC,EAAU71F,GAOvB,OANAtR,KAAK0yE,SAASrxE,KAAK,CACjB6lG,YACAC,WACAC,cAAa91F,GAAUA,EAAQ81F,YAC/BC,QAAS/1F,EAAUA,EAAQ+1F,QAAU,OAEhCrnG,KAAK0yE,SAAS/zE,OAAS,CAChC,CASA,KAAA2oG,CAAMzlF,GACA7hB,KAAK0yE,SAAS7wD,KAChB7hB,KAAK0yE,SAAS7wD,GAAM,KAExB,CAOA,KAAArK,GACMxX,KAAK0yE,WACP1yE,KAAK0yE,SAAW,GAEpB,CAYA,OAAA9mE,CAAQnB,GACNy5F,GAAQt4F,QAAQ5L,KAAK0yE,UAAU,SAAwB3tC,GAC3C,OAANA,GACFt6B,EAAGs6B,EAEP,GACF,EAGF,IAAIwiE,GAAuBN,GAEvBO,GAAuB,CACzBC,mBAAmB,EACnBC,mBAAmB,EACnBC,qBAAqB,GAGnBC,GAA+C,qBAApBC,gBAAkCA,gBAAkBvB,GAE/EwB,GAAiC,qBAAb1H,SAA2BA,SAAW,KAE1D2H,GAAyB,qBAATlC,KAAuBA,KAAO,KAE9CmC,GAAa,CACfC,WAAW,EACXC,QAAS,CACPL,gBAAiBD,GACjBxH,SAAU0H,GACVjC,KAAMkC,IAERI,UAAW,CAAC,OAAQ,QAAS,OAAQ,OAAQ,MAAO,SAGtD,MAAMC,GAAkC,qBAAX3kG,QAA8C,qBAAbU,SAmBxDkkG,GAAwB,CAC3BC,GACQF,IAAiB,CAAC,cAAe,eAAgB,MAAMzlF,QAAQ2lF,GAAW,EAFvD,CAGJ,qBAAdhhG,WAA6BA,UAAUghG,SAW7CC,GAAiC,KAEN,qBAAtBC,mBAEPhlG,gBAAgBglG,mBACc,oBAAvBhlG,KAAKilG,cALuB,GASjCC,GAASN,IAAiB3kG,OAAOklG,SAASC,MAAQ,mBAExD,IAAIC,GAAqB9lG,OAAO+lG,OAAO,CACrCC,UAAW,KACXX,cAAeA,GACfG,+BAAgCA,GAChCF,sBAAuBA,GACvBK,OAAQA,KAGNM,GAAW,IACVH,MACAb,IAGL,SAASiB,GAAiB5/F,EAAMiI,GAC9B,OAAOg0F,GAAWj8F,EAAM,IAAI2/F,GAASd,QAAQL,gBAAmB9kG,OAAO4D,OAAO,CAC5E++F,QAAS,SAAShjG,EAAOY,EAAKiwB,EAAM21E,GAClC,OAAIF,GAASG,QAAUjF,GAAQ3E,SAAS78F,IACtC1C,KAAK8nF,OAAOxkF,EAAKZ,EAAMkc,SAAS,YACzB,GAGFsqF,EAAQvD,eAAe/wF,MAAM5U,KAAM8d,UAC5C,GACCxM,GACL,CASA,SAAS83F,GAAcpnG,GAKrB,OAAOkiG,GAAQ/B,SAAS,gBAAiBngG,GAAMwI,KAAIpG,GAC7B,OAAbA,EAAM,GAAc,GAAKA,EAAM,IAAMA,EAAM,IAEtD,CASA,SAASilG,GAAc30F,GACrB,MAAMtK,EAAM,CAAC,EACPY,EAAOjI,OAAOiI,KAAK0J,GACzB,IAAIhW,EACJ,MAAMq6C,EAAM/tC,EAAKrM,OACjB,IAAI2E,EACJ,IAAK5E,EAAI,EAAGA,EAAIq6C,EAAKr6C,IACnB4E,EAAM0H,EAAKtM,GACX0L,EAAI9G,GAAOoR,EAAIpR,GAEjB,OAAO8G,CACT,CASA,SAASk/F,GAAe/D,GACtB,SAASgE,EAAUh2E,EAAM7wB,EAAOG,EAAQ0L,GACtC,IAAIvM,EAAOuxB,EAAKhlB,KAEhB,GAAa,cAATvM,EAAsB,OAAO,EAEjC,MAAMwnG,EAAe/1F,OAAO4vF,UAAUrhG,GAChCynG,EAASl7F,GAASglB,EAAK50B,OAG7B,GAFAqD,GAAQA,GAAQkiG,GAAQ1jG,QAAQqC,GAAUA,EAAOlE,OAASqD,EAEtDynG,EAOF,OANIvF,GAAQC,WAAWthG,EAAQb,GAC7Ba,EAAOb,GAAQ,CAACa,EAAOb,GAAOU,GAE9BG,EAAOb,GAAQU,GAGT8mG,EAGL3mG,EAAOb,IAAUkiG,GAAQ54F,SAASzI,EAAOb,MAC5Ca,EAAOb,GAAQ,IAGjB,MAAMmG,EAASohG,EAAUh2E,EAAM7wB,EAAOG,EAAOb,GAAOuM,GAMpD,OAJIpG,GAAU+7F,GAAQ1jG,QAAQqC,EAAOb,MACnCa,EAAOb,GAAQqnG,GAAcxmG,EAAOb,MAG9BwnG,CACV,CAEA,GAAItF,GAAQhE,WAAWqF,IAAarB,GAAQzoF,WAAW8pF,EAAS55F,SAAU,CACxE,MAAMvB,EAAM,CAAC,EAMb,OAJA85F,GAAQlC,aAAauD,GAAU,CAACvjG,EAAMU,KACpC6mG,EAAUH,GAAcpnG,GAAOU,EAAO0H,EAAK,EAAE,IAGxCA,CACT,CAEA,OAAO,IACT,CAYA,SAASs/F,GAAgBztF,EAAU0tF,EAAQ3C,GACzC,GAAI9C,GAAQnkF,SAAS9D,GACnB,IAEE,OADC0tF,GAAU3lG,KAAKC,OAAOgY,GAChBioF,GAAQt/E,KAAK3I,EACtB,CAAE,MAAO3Z,GACP,GAAe,gBAAXA,EAAEN,KACJ,MAAMM,CAEV,CAGF,OAAQ0kG,GAAWhjG,KAAKoD,WAAW6U,EACrC,CAEA,MAAMwlB,GAAW,CAEfmoE,aAAcpC,GAEdqC,QAAS,CAAC,MAAO,OAAQ,SAEzBC,iBAAkB,CAAC,SAA0BzgG,EAAM0gG,GACjD,MAAMC,EAAcD,EAAQE,kBAAoB,GAC1CC,EAAqBF,EAAYrnF,QAAQ,qBAAuB,EAChEwnF,EAAkBjG,GAAQ54F,SAASjC,GAErC8gG,GAAmBjG,GAAQ5B,WAAWj5F,KACxCA,EAAO,IAAI+2F,SAAS/2F,IAGtB,MAAM62F,EAAagE,GAAQhE,WAAW72F,GAEtC,GAAI62F,EACF,OAAOgK,EAAqBlmG,KAAKoD,UAAUkiG,GAAejgG,IAASA,EAGrE,GAAI66F,GAAQ1E,cAAcn2F,IACxB66F,GAAQ3E,SAASl2F,IACjB66F,GAAQlE,SAAS32F,IACjB66F,GAAQrE,OAAOx2F,IACf66F,GAAQpE,OAAOz2F,IACf66F,GAAQ5D,iBAAiBj3F,GAEzB,OAAOA,EAET,GAAI66F,GAAQzE,kBAAkBp2F,GAC5B,OAAOA,EAAKka,OAEd,GAAI2gF,GAAQ7D,kBAAkBh3F,GAE5B,OADA0gG,EAAQK,eAAe,mDAAmD,GACnE/gG,EAAKuV,WAGd,IAAImhF,EAEJ,GAAIoK,EAAiB,CACnB,GAAIH,EAAYrnF,QAAQ,sCAAwC,EAC9D,OAAOsmF,GAAiB5/F,EAAMrJ,KAAKqqG,gBAAgBzrF,WAGrD,IAAKmhF,EAAamE,GAAQnE,WAAW12F,KAAU2gG,EAAYrnF,QAAQ,wBAA0B,EAAG,CAC9F,MAAM2nF,EAAYtqG,KAAKuqG,KAAOvqG,KAAKuqG,IAAInK,SAEvC,OAAOkF,GACLvF,EAAa,CAAC,UAAW12F,GAAQA,EACjCihG,GAAa,IAAIA,EACjBtqG,KAAKqqG,eAET,CACF,CAEA,OAAIF,GAAmBD,GACrBH,EAAQK,eAAe,oBAAoB,GACpCV,GAAgBrgG,IAGlBA,CACT,GAEAmhG,kBAAmB,CAAC,SAA2BnhG,GAC7C,MAAMugG,EAAe5pG,KAAK4pG,cAAgBnoE,GAASmoE,aAC7ClC,EAAoBkC,GAAgBA,EAAalC,kBACjD+C,EAAsC,SAAtBzqG,KAAK0qG,aAE3B,GAAIxG,GAAQ1D,WAAWn3F,IAAS66F,GAAQ5D,iBAAiBj3F,GACvD,OAAOA,EAGT,GAAIA,GAAQ66F,GAAQnkF,SAAS1W,KAAWq+F,IAAsB1nG,KAAK0qG,cAAiBD,GAAgB,CAClG,MAAMhD,EAAoBmC,GAAgBA,EAAanC,kBACjDkD,GAAqBlD,GAAqBgD,EAEhD,IACE,OAAOzmG,KAAKC,MAAMoF,EACpB,CAAE,MAAO/G,GACP,GAAIqoG,EAAmB,CACrB,GAAe,gBAAXroG,EAAEN,KACJ,MAAMoiG,GAAWrmE,KAAKz7B,EAAG8hG,GAAWwG,iBAAkB5qG,KAAM,KAAMA,KAAKqkG,UAEzE,MAAM/hG,CACR,CACF,CACF,CAEA,OAAO+G,CACT,GAMA6kB,QAAS,EAET28E,eAAgB,aAChBC,eAAgB,eAEhBC,kBAAmB,EACnBC,eAAgB,EAEhBT,IAAK,CACHnK,SAAU4I,GAASd,QAAQ9H,SAC3ByF,KAAMmD,GAASd,QAAQrC,MAGzBoF,eAAgB,SAAwBvG,GACtC,OAAOA,GAAU,KAAOA,EAAS,GACnC,EAEAqF,QAAS,CACPmB,OAAQ,CACN,OAAU,oCACV,oBAAgBtoG,KAKtBshG,GAAQt4F,QAAQ,CAAC,SAAU,MAAO,OAAQ,OAAQ,MAAO,UAAWkM,IAClE2pB,GAASsoE,QAAQjyF,GAAU,CAAC,CAAC,IAG/B,IAAIqzF,GAAa1pE,GAIjB,MAAM2pE,GAAoBlH,GAAQlB,YAAY,CAC5C,MAAO,gBAAiB,iBAAkB,eAAgB,OAC1D,UAAW,OAAQ,OAAQ,oBAAqB,sBAChD,gBAAiB,WAAY,eAAgB,sBAC7C,UAAW,cAAe,eAiB5B,IAAIqI,GAAeC,IACjB,MAAMC,EAAS,CAAC,EAChB,IAAIjoG,EACAka,EACA9e,EAsBJ,OApBA4sG,GAAcA,EAAWthG,MAAM,MAAM4B,SAAQ,SAAgB4/F,GAC3D9sG,EAAI8sG,EAAK7oF,QAAQ,KACjBrf,EAAMkoG,EAAKpmG,UAAU,EAAG1G,GAAGkmB,OAAOyB,cAClC7I,EAAMguF,EAAKpmG,UAAU1G,EAAI,GAAGkmB,QAEvBthB,GAAQioG,EAAOjoG,IAAQ8nG,GAAkB9nG,KAIlC,eAARA,EACEioG,EAAOjoG,GACTioG,EAAOjoG,GAAKjC,KAAKmc,GAEjB+tF,EAAOjoG,GAAO,CAACka,GAGjB+tF,EAAOjoG,GAAOioG,EAAOjoG,GAAOioG,EAAOjoG,GAAO,KAAOka,EAAMA,EAE3D,IAEO+tF,CAAM,EAGf,MAAME,GAAaz4F,OAAO,aAE1B,SAAS04F,GAAgBvlG,GACvB,OAAOA,GAAUjH,OAAOiH,GAAQye,OAAOyB,aACzC,CAEA,SAASslF,GAAejpG,GACtB,OAAc,IAAVA,GAA4B,MAATA,EACdA,EAGFwhG,GAAQ1jG,QAAQkC,GAASA,EAAM8H,IAAImhG,IAAkBzsG,OAAOwD,EACrE,CAEA,SAASkpG,GAAYrtG,GACnB,MAAMstG,EAAS9oG,OAAOkG,OAAO,MACvB6iG,EAAW,mCACjB,IAAI1nG,EAEJ,MAAQA,EAAQ0nG,EAASzJ,KAAK9jG,GAC5BstG,EAAOznG,EAAM,IAAMA,EAAM,GAG3B,OAAOynG,CACT,CAEA,MAAME,GAAqBxtG,GAAQ,iCAAiCiJ,KAAKjJ,EAAIqmB,QAE7E,SAASonF,GAAiBnlE,EAASnkC,EAAOyD,EAAQkO,EAAQ43F,GACxD,OAAI/H,GAAQzoF,WAAWpH,GACdA,EAAOhK,KAAKrK,KAAM0C,EAAOyD,IAG9B8lG,IACFvpG,EAAQyD,GAGL+9F,GAAQnkF,SAASrd,GAElBwhG,GAAQnkF,SAAS1L,IACe,IAA3B3R,EAAMigB,QAAQtO,GAGnB6vF,GAAQ3nE,SAASloB,GACZA,EAAO7M,KAAK9E,QADrB,OANA,EASF,CAEA,SAASwpG,GAAa/lG,GACpB,OAAOA,EAAOye,OACXyB,cAAcjkB,QAAQ,mBAAmB,CAAC+pG,EAAGC,EAAM7tG,IAC3C6tG,EAAKhtD,cAAgB7gD,GAElC,CAEA,SAAS8tG,GAAejiG,EAAKjE,GAC3B,MAAMmmG,EAAepI,GAAQ3B,YAAY,IAAMp8F,GAE/C,CAAC,MAAO,MAAO,OAAOyF,SAAQ2gG,IAC5BxpG,OAAO69B,eAAex2B,EAAKmiG,EAAaD,EAAc,CACpD5pG,MAAO,SAAS8pG,EAAMC,EAAMC,GAC1B,OAAO1sG,KAAKusG,GAAYliG,KAAKrK,KAAMmG,EAAQqmG,EAAMC,EAAMC,EACzD,EACAloE,cAAc,GACd,GAEN,CAEA,MAAMmoE,GACJ,WAAA5qG,CAAYgoG,GACVA,GAAW/pG,KAAKqS,IAAI03F,EACtB,CAEA,GAAA13F,CAAIlM,EAAQymG,EAAgBC,GAC1B,MAAMrpG,EAAOxD,KAEb,SAAS8sG,EAAU9xF,EAAQ+xF,EAASC,GAClC,MAAMC,EAAUvB,GAAgBqB,GAEhC,IAAKE,EACH,MAAM,IAAI5uG,MAAM,0CAGlB,MAAMiF,EAAM4gG,GAAQvD,QAAQn9F,EAAMypG,KAE9B3pG,QAAqBV,IAAdY,EAAKF,KAAmC,IAAb0pG,QAAmCpqG,IAAboqG,IAAwC,IAAdxpG,EAAKF,MACzFE,EAAKF,GAAOypG,GAAWpB,GAAe3wF,GAE1C,CAEA,MAAMkyF,EAAa,CAACnD,EAASiD,IAC3B9I,GAAQt4F,QAAQm+F,GAAS,CAAC/uF,EAAQ+xF,IAAYD,EAAU9xF,EAAQ+xF,EAASC,KAE3E,GAAI9I,GAAQvwE,cAAcxtB,IAAWA,aAAkBnG,KAAK+B,YAC1DmrG,EAAW/mG,EAAQymG,QACd,GAAG1I,GAAQnkF,SAAS5Z,KAAYA,EAASA,EAAOye,UAAYmnF,GAAkB5lG,GACnF+mG,EAAW7B,GAAallG,GAASymG,QAC5B,GAAI1I,GAAQzD,UAAUt6F,GAC3B,IAAK,MAAO7C,EAAKZ,KAAUyD,EAAOwF,UAChCmhG,EAAUpqG,EAAOY,EAAKupG,QAGd,MAAV1mG,GAAkB2mG,EAAUF,EAAgBzmG,EAAQ0mG,GAGtD,OAAO7sG,IACT,CAEA,GAAAkR,CAAI/K,EAAQwjG,GAGV,GAFAxjG,EAASulG,GAAgBvlG,GAErBA,EAAQ,CACV,MAAM7C,EAAM4gG,GAAQvD,QAAQ3gG,KAAMmG,GAElC,GAAI7C,EAAK,CACP,MAAMZ,EAAQ1C,KAAKsD,GAEnB,IAAKqmG,EACH,OAAOjnG,EAGT,IAAe,IAAXinG,EACF,OAAOiC,GAAYlpG,GAGrB,GAAIwhG,GAAQzoF,WAAWkuF,GACrB,OAAOA,EAAOt/F,KAAKrK,KAAM0C,EAAOY,GAGlC,GAAI4gG,GAAQ3nE,SAASotE,GACnB,OAAOA,EAAOtH,KAAK3/F,GAGrB,MAAM,IAAI2yE,UAAU,yCACtB,CACF,CACF,CAEA,GAAA1/D,CAAIxP,EAAQgnG,GAGV,GAFAhnG,EAASulG,GAAgBvlG,GAErBA,EAAQ,CACV,MAAM7C,EAAM4gG,GAAQvD,QAAQ3gG,KAAMmG,GAElC,SAAU7C,QAAqBV,IAAd5C,KAAKsD,IAAwB6pG,IAAWnB,GAAiBhsG,KAAMA,KAAKsD,GAAMA,EAAK6pG,GAClG,CAEA,OAAO,CACT,CAEA,OAAOhnG,EAAQgnG,GACb,MAAM3pG,EAAOxD,KACb,IAAIotG,GAAU,EAEd,SAASC,EAAaN,GAGpB,GAFAA,EAAUrB,GAAgBqB,GAEtBA,EAAS,CACX,MAAMzpG,EAAM4gG,GAAQvD,QAAQn9F,EAAMupG,IAE9BzpG,GAAS6pG,IAAWnB,GAAiBxoG,EAAMA,EAAKF,GAAMA,EAAK6pG,YACtD3pG,EAAKF,GAEZ8pG,GAAU,EAEd,CACF,CAQA,OANIlJ,GAAQ1jG,QAAQ2F,GAClBA,EAAOyF,QAAQyhG,GAEfA,EAAalnG,GAGRinG,CACT,CAEA,KAAA51F,CAAM21F,GACJ,MAAMniG,EAAOjI,OAAOiI,KAAKhL,MACzB,IAAItB,EAAIsM,EAAKrM,OACTyuG,GAAU,EAEd,MAAO1uG,IAAK,CACV,MAAM4E,EAAM0H,EAAKtM,GACbyuG,IAAWnB,GAAiBhsG,KAAMA,KAAKsD,GAAMA,EAAK6pG,GAAS,YACtDntG,KAAKsD,GACZ8pG,GAAU,EAEd,CAEA,OAAOA,CACT,CAEA,SAAAtgF,CAAUqkB,GACR,MAAM3tC,EAAOxD,KACP+pG,EAAU,CAAC,EAsBjB,OApBA7F,GAAQt4F,QAAQ5L,MAAM,CAAC0C,EAAOyD,KAC5B,MAAM7C,EAAM4gG,GAAQvD,QAAQoJ,EAAS5jG,GAErC,GAAI7C,EAGF,OAFAE,EAAKF,GAAOqoG,GAAejpG,eACpBc,EAAK2C,GAId,MAAMyf,EAAaurB,EAAS+6D,GAAa/lG,GAAUjH,OAAOiH,GAAQye,OAE9DgB,IAAezf,UACV3C,EAAK2C,GAGd3C,EAAKoiB,GAAc+lF,GAAejpG,GAElCqnG,EAAQnkF,IAAc,CAAI,IAGrB5lB,IACT,CAEA,MAAAipB,IAAUqkF,GACR,OAAOttG,KAAK+B,YAAYknB,OAAOjpB,QAASstG,EAC1C,CAEA,MAAAhJ,CAAOiJ,GACL,MAAMnjG,EAAMrH,OAAOkG,OAAO,MAM1B,OAJAi7F,GAAQt4F,QAAQ5L,MAAM,CAAC0C,EAAOyD,KACnB,MAATzD,IAA2B,IAAVA,IAAoB0H,EAAIjE,GAAUonG,GAAarJ,GAAQ1jG,QAAQkC,GAASA,EAAMlD,KAAK,MAAQkD,EAAM,IAG7G0H,CACT,CAEA,CAAC4I,OAAOiF,YACN,OAAOlV,OAAO4I,QAAQ3L,KAAKskG,UAAUtxF,OAAOiF,WAC9C,CAEA,QAAA2G,GACE,OAAO7b,OAAO4I,QAAQ3L,KAAKskG,UAAU95F,KAAI,EAAErE,EAAQzD,KAAWyD,EAAS,KAAOzD,IAAOlD,KAAK,KAC5F,CAEA,IAAKwT,OAAOgnB,eACV,MAAO,cACT,CAEA,WAAO+D,CAAKxyB,GACV,OAAOA,aAAiBvL,KAAOuL,EAAQ,IAAIvL,KAAKuL,EAClD,CAEA,aAAO0d,CAAOukF,KAAUF,GACtB,MAAMj9F,EAAW,IAAIrQ,KAAKwtG,GAI1B,OAFAF,EAAQ1hG,SAAS/I,GAAWwN,EAASgC,IAAIxP,KAElCwN,CACT,CAEA,eAAOo9F,CAAStnG,GACd,MAAMktC,EAAYrzC,KAAKyrG,IAAezrG,KAAKyrG,IAAc,CACvDiC,UAAW,CAAC,GAGRA,EAAYr6D,EAAUq6D,UACtB5kG,EAAY9I,KAAK8I,UAEvB,SAAS6kG,EAAeZ,GACtB,MAAME,EAAUvB,GAAgBqB,GAE3BW,EAAUT,KACbZ,GAAevjG,EAAWikG,GAC1BW,EAAUT,IAAW,EAEzB,CAIA,OAFA/I,GAAQ1jG,QAAQ2F,GAAUA,EAAOyF,QAAQ+hG,GAAkBA,EAAexnG,GAEnEnG,IACT,EAGF2sG,GAAac,SAAS,CAAC,eAAgB,iBAAkB,SAAU,kBAAmB,aAAc,kBAGpGvJ,GAAQxB,kBAAkBiK,GAAa7jG,WAAW,EAAEpG,SAAQY,KAC1D,IAAIsqG,EAAStqG,EAAI,GAAG87C,cAAgB97C,EAAIuc,MAAM,GAC9C,MAAO,CACL3O,IAAK,IAAMxO,EACX,GAAA2P,CAAIw7F,GACF7tG,KAAK4tG,GAAUC,CACjB,EACF,IAGF3J,GAAQnB,cAAc4J,IAEtB,IAAImB,GAAiBnB,GAUrB,SAASoB,GAAc55C,EAAKkwC,GAC1B,MAAM/+F,EAAStF,MAAQmrG,GACjBtkE,EAAUw9D,GAAY/+F,EACtBykG,EAAU+D,GAAe/vE,KAAK8I,EAAQkjE,SAC5C,IAAI1gG,EAAOw9B,EAAQx9B,KAQnB,OANA66F,GAAQt4F,QAAQuoD,GAAK,SAAmB1pD,GACtCpB,EAAOoB,EAAGJ,KAAK/E,EAAQ+D,EAAM0gG,EAAQj9E,YAAau3E,EAAWA,EAASK,YAAS9hG,EACjF,IAEAmnG,EAAQj9E,YAEDzjB,CACT,CAEA,SAAS2kG,GAAStrG,GAChB,SAAUA,IAASA,EAAMurG,WAC3B,CAWA,SAASC,GAAc/vG,EAASmH,EAAQ0C,GAEtCo8F,GAAW/5F,KAAKrK,KAAiB,MAAX7B,EAAkB,WAAaA,EAASimG,GAAW+J,aAAc7oG,EAAQ0C,GAC/FhI,KAAKgC,KAAO,eACd,CAeA,SAASosG,GAAO3oG,EAASD,EAAQ6+F,GAC/B,MAAM4G,EAAiB5G,EAAS/+F,OAAO2lG,eAClC5G,EAASK,QAAWuG,IAAkBA,EAAe5G,EAASK,QAGjEl/F,EAAO,IAAI4+F,GACT,mCAAqCC,EAASK,OAC9C,CAACN,GAAWiK,gBAAiBjK,GAAWwG,kBAAkBt0D,KAAKs3B,MAAMy2B,EAASK,OAAS,KAAO,GAC9FL,EAAS/+F,OACT++F,EAASr8F,QACTq8F,IAPF5+F,EAAQ4+F,EAUZ,CAEA,SAASiK,GAAc5H,GACrB,MAAMtiG,EAAQ,4BAA4Bi+F,KAAKqE,GAC/C,OAAOtiG,GAASA,EAAM,IAAM,EAC9B,CAQA,SAASmqG,GAAYC,EAAcj4D,GACjCi4D,EAAeA,GAAgB,GAC/B,MAAMzvG,EAAQ,IAAIwB,MAAMiuG,GAClBC,EAAa,IAAIluG,MAAMiuG,GAC7B,IAEIE,EAFAC,EAAO,EACPC,EAAO,EAKX,OAFAr4D,OAAc3zC,IAAR2zC,EAAoBA,EAAM,IAEzB,SAAcs4D,GACnB,MAAM/kD,EAAM9mD,KAAK8mD,MAEXglD,EAAYL,EAAWG,GAExBF,IACHA,EAAgB5kD,GAGlB/qD,EAAM4vG,GAAQE,EACdJ,EAAWE,GAAQ7kD,EAEnB,IAAIprD,EAAIkwG,EACJG,EAAa,EAEjB,MAAOrwG,IAAMiwG,EACXI,GAAchwG,EAAML,KACpBA,GAAQ8vG,EASV,GANAG,GAAQA,EAAO,GAAKH,EAEhBG,IAASC,IACXA,GAAQA,EAAO,GAAKJ,GAGlB1kD,EAAM4kD,EAAgBn4D,EACxB,OAGF,MAAMy4D,EAASF,GAAahlD,EAAMglD,EAElC,OAAOE,EAAS14D,KAAKwiB,MAAmB,IAAbi2C,EAAoBC,QAAUpsG,CAC3D,CACF,CAQA,SAASqsG,GAASxkG,EAAIykG,GACpB,IAAIC,EAAY,EAChB,MAAMzW,EAAY,IAAOwW,EACzB,IAAIE,EAAQ,KACZ,OAAO,WACL,MAAMC,GAAiB,IAATrvG,KAER8pD,EAAM9mD,KAAK8mD,MACjB,GAAIulD,GAASvlD,EAAMqlD,EAAYzW,EAM7B,OALI0W,IACF1wB,aAAa0wB,GACbA,EAAQ,MAEVD,EAAYrlD,EACLr/C,EAAGmK,MAAM,KAAMkJ,WAEnBsxF,IACHA,EAAQjrF,YAAW,KACjBirF,EAAQ,KACRD,EAAYnsG,KAAK8mD,MACVr/C,EAAGmK,MAAM,KAAMkJ,aACrB46E,GAAa5uC,EAAMqlD,IAE1B,CACF,CAnHAjL,GAAQ/C,SAAS+M,GAAe9J,GAAY,CAC1C6J,YAAY,IAoHd,IAAIqB,GAAuB,CAACC,EAAUC,EAAkBN,EAAO,KAC7D,IAAIO,EAAgB,EACpB,MAAMC,EAAenB,GAAY,GAAI,KAErC,OAAOU,IAAS3sG,IACd,MAAM63B,EAAS73B,EAAE63B,OACXw1E,EAAQrtG,EAAEstG,iBAAmBttG,EAAEqtG,WAAQ/sG,EACvCitG,EAAgB11E,EAASs1E,EACzBK,EAAOJ,EAAaG,GACpBE,EAAU51E,GAAUw1E,EAE1BF,EAAgBt1E,EAEhB,MAAM9wB,EAAO,CACX8wB,SACAw1E,QACAK,SAAUL,EAASx1E,EAASw1E,OAAS/sG,EACrC7D,MAAO8wG,EACPC,KAAMA,QAAcltG,EACpBqtG,UAAWH,GAAQH,GAASI,GAAWJ,EAAQx1E,GAAU21E,OAAOltG,EAChEghB,MAAOthB,EACPstG,iBAA2B,MAATD,GAGpBtmG,EAAKmmG,EAAmB,WAAa,WAAY,EAEjDD,EAASlmG,EAAK,GACb6lG,EAAK,EAGNgB,GAAkBlH,GAASX,sBAI7B,WACE,MAAM8H,EAAO,kBAAkB3oG,KAAKF,UAAUyc,WACxCqsF,EAAiBjsG,SAASkpB,cAAc,KAC9C,IAAIgjF,EAQJ,SAASC,EAAW5J,GAClB,IAAIkC,EAAOlC,EAWX,OATIyJ,IAEFC,EAAev1D,aAAa,OAAQ+tD,GACpCA,EAAOwH,EAAexH,MAGxBwH,EAAev1D,aAAa,OAAQ+tD,GAG7B,CACLA,KAAMwH,EAAexH,KACrB2H,SAAUH,EAAeG,SAAWH,EAAeG,SAASnuG,QAAQ,KAAM,IAAM,GAChF2C,KAAMqrG,EAAerrG,KACrByrG,OAAQJ,EAAeI,OAASJ,EAAeI,OAAOpuG,QAAQ,MAAO,IAAM,GAC3Eg+D,KAAMgwC,EAAehwC,KAAOgwC,EAAehwC,KAAKh+D,QAAQ,KAAM,IAAM,GACpEquG,SAAUL,EAAeK,SACzBvrG,KAAMkrG,EAAelrG,KACrBwrG,SAAiD,MAAtCN,EAAeM,SAAS/uG,OAAO,GACxCyuG,EAAeM,SACf,IAAMN,EAAeM,SAE3B,CAUA,OARAL,EAAYC,EAAW7sG,OAAOklG,SAASC,MAQhC,SAAyB+H,GAC9B,MAAMpF,EAAUrH,GAAQnkF,SAAS4wF,GAAeL,EAAWK,GAAcA,EACzE,OAAQpF,EAAOgF,WAAaF,EAAUE,UAClChF,EAAOxmG,OAASsrG,EAAUtrG,IAChC,CACD,CAlDD,GAqDA,WACE,OAAO,WACL,OAAO,CACT,CACD,CAJD,GAME6rG,GAAU5H,GAASX,sBAGrB,CACE,KAAApxC,CAAMj1D,EAAMU,EAAOmuG,EAASt9E,EAAMu9E,EAAQC,GACxC,MAAM1sG,EAAS,CAACrC,EAAO,IAAM8J,mBAAmBpJ,IAEhDwhG,GAAQtE,SAASiR,IAAYxsG,EAAOhD,KAAK,WAAa,IAAI2B,KAAK6tG,GAASG,eAExE9M,GAAQnkF,SAASwT,IAASlvB,EAAOhD,KAAK,QAAUkyB,GAEhD2wE,GAAQnkF,SAAS+wF,IAAWzsG,EAAOhD,KAAK,UAAYyvG,IAEzC,IAAXC,GAAmB1sG,EAAOhD,KAAK,UAE/B8C,SAASE,OAASA,EAAO7E,KAAK,KAChC,EAEA,IAAAm3D,CAAK30D,GACH,MAAMoC,EAAQD,SAASE,OAAOD,MAAM,IAAIq2B,OAAO,aAAez4B,EAAO,cACrE,OAAQoC,EAAQ4vE,mBAAmB5vE,EAAM,IAAM,IACjD,EAEA,MAAAmqB,CAAOvsB,GACLhC,KAAKi3D,MAAMj1D,EAAM,GAAIgB,KAAK8mD,MAAQ,MACpC,GAMF,CACE,KAAAmN,GAAS,EACT,IAAAN,GACE,OAAO,IACT,EACA,MAAApoC,GAAU,GAUd,SAAS0iF,GAAcvK,GAIrB,MAAO,8BAA8Bl/F,KAAKk/F,EAC5C,CAUA,SAASwK,GAAYC,EAASC,GAC5B,OAAOA,EACHD,EAAQ/uG,QAAQ,SAAU,IAAM,IAAMgvG,EAAYhvG,QAAQ,OAAQ,IAClE+uG,CACN,CAYA,SAASE,GAAcF,EAASG,GAC9B,OAAIH,IAAYF,GAAcK,GACrBJ,GAAYC,EAASG,GAEvBA,CACT,CAEA,MAAMC,GAAmBhmG,GAAUA,aAAiBuiG,GAAiB,IAAKviG,GAAUA,EAWpF,SAASimG,GAAYC,EAASC,GAE5BA,EAAUA,GAAW,CAAC,EACtB,MAAMpsG,EAAS,CAAC,EAEhB,SAASqsG,EAAe9uG,EAAQC,EAAQi+F,GACtC,OAAImD,GAAQvwE,cAAc9wB,IAAWqhG,GAAQvwE,cAAc7wB,GAClDohG,GAAQpD,MAAMz2F,KAAK,CAAC02F,YAAWl+F,EAAQC,GACrCohG,GAAQvwE,cAAc7wB,GACxBohG,GAAQpD,MAAM,CAAC,EAAGh+F,GAChBohG,GAAQ1jG,QAAQsC,GAClBA,EAAO+c,QAET/c,CACT,CAGA,SAAS8uG,EAAoB/mG,EAAGC,EAAGi2F,GACjC,OAAKmD,GAAQ5E,YAAYx0F,GAEbo5F,GAAQ5E,YAAYz0F,QAAzB,EACE8mG,OAAe/uG,EAAWiI,EAAGk2F,GAF7B4Q,EAAe9mG,EAAGC,EAAGi2F,EAIhC,CAGA,SAAS8Q,EAAiBhnG,EAAGC,GAC3B,IAAKo5F,GAAQ5E,YAAYx0F,GACvB,OAAO6mG,OAAe/uG,EAAWkI,EAErC,CAGA,SAASgnG,EAAiBjnG,EAAGC,GAC3B,OAAKo5F,GAAQ5E,YAAYx0F,GAEbo5F,GAAQ5E,YAAYz0F,QAAzB,EACE8mG,OAAe/uG,EAAWiI,GAF1B8mG,OAAe/uG,EAAWkI,EAIrC,CAGA,SAASinG,EAAgBlnG,EAAGC,EAAG3H,GAC7B,OAAIA,KAAQuuG,EACHC,EAAe9mG,EAAGC,GAChB3H,KAAQsuG,EACVE,OAAe/uG,EAAWiI,QAD5B,CAGT,CAEA,MAAMmnG,EAAW,CACftL,IAAKmL,EACL/5F,OAAQ+5F,EACRxoG,KAAMwoG,EACNV,QAASW,EACThI,iBAAkBgI,EAClBtH,kBAAmBsH,EACnBG,iBAAkBH,EAClB5jF,QAAS4jF,EACTI,eAAgBJ,EAChBK,gBAAiBL,EACjBM,cAAeN,EACfjI,QAASiI,EACTpH,aAAcoH,EACdjH,eAAgBiH,EAChBhH,eAAgBgH,EAChBO,iBAAkBP,EAClBQ,mBAAoBR,EACpBS,WAAYT,EACZ/G,iBAAkB+G,EAClB9G,cAAe8G,EACfU,eAAgBV,EAChBW,UAAWX,EACXY,UAAWZ,EACXa,WAAYb,EACZc,YAAad,EACbe,WAAYf,EACZgB,iBAAkBhB,EAClB7G,eAAgB8G,EAChBhI,QAAS,CAACl/F,EAAGC,IAAM8mG,EAAoBL,GAAgB1mG,GAAI0mG,GAAgBzmG,IAAI,IASjF,OANAo5F,GAAQt4F,QAAQ7I,OAAOiI,KAAKjI,OAAO4D,OAAO,CAAC,EAAG8qG,EAASC,KAAW,SAA4BvuG,GAC5F,MAAM29F,EAAQkR,EAAS7uG,IAASyuG,EAC1BmB,EAAcjS,EAAM2Q,EAAQtuG,GAAOuuG,EAAQvuG,GAAOA,GACvD+gG,GAAQ5E,YAAYyT,IAAgBjS,IAAUiR,IAAqBzsG,EAAOnC,GAAQ4vG,EACrF,IAEOztG,CACT,CAEA,IAAI0tG,GAAiB1tG,IACnB,MAAM2tG,EAAYzB,GAAY,CAAC,EAAGlsG,GAElC,IAaI0kG,GAbA,KAAC3gG,EAAI,cAAE+oG,EAAa,eAAEtH,EAAc,eAAED,EAAc,QAAEd,EAAO,KAAEmJ,GAAQD,EAe3E,GAbAA,EAAUlJ,QAAUA,EAAU+D,GAAe/vE,KAAKgsE,GAElDkJ,EAAUvM,IAAMD,GAAS4K,GAAc4B,EAAU9B,QAAS8B,EAAUvM,KAAMphG,EAAOoG,OAAQpG,EAAO2sG,kBAG5FiB,GACFnJ,EAAQ13F,IAAI,gBAAiB,SAC3B9Q,MAAM2xG,EAAKC,UAAY,IAAM,KAAOD,EAAKE,SAAWC,SAASvnG,mBAAmBonG,EAAKE,WAAa,MAMlGlP,GAAQhE,WAAW72F,GACrB,GAAI2/F,GAASX,uBAAyBW,GAAST,+BAC7CwB,EAAQK,oBAAexnG,QAClB,IAAiD,KAA5ConG,EAAcD,EAAQE,kBAA6B,CAE7D,MAAO5jG,KAASwlG,GAAU7B,EAAcA,EAAYhgG,MAAM,KAAKQ,KAAIxE,GAASA,EAAM4e,SAAQvQ,OAAOihB,SAAW,GAC5Gy0E,EAAQK,eAAe,CAAC/jG,GAAQ,yBAA0BwlG,GAAQrsG,KAAK,MACzE,CAOF,GAAIwpG,GAASX,wBACX+J,GAAiBlO,GAAQzoF,WAAW22F,KAAmBA,EAAgBA,EAAca,IAEjFb,IAAoC,IAAlBA,GAA2BlC,GAAgB+C,EAAUvM,MAAO,CAEhF,MAAM4M,EAAYxI,GAAkBD,GAAkB+F,GAAQj6C,KAAKk0C,GAE/DyI,GACFvJ,EAAQ13F,IAAIy4F,EAAgBwI,EAEhC,CAGF,OAAOL,CAAS,EAGlB,MAAMM,GAAkD,qBAAnBC,eAErC,IAAIC,GAAaF,IAAyB,SAAUjuG,GAClD,OAAO,IAAIK,SAAQ,SAA4BF,EAASD,GACtD,MAAMiwE,EAAUu9B,GAAc1tG,GAC9B,IAAIouG,EAAcj+B,EAAQpsE,KAC1B,MAAMsqG,EAAiB7F,GAAe/vE,KAAK03C,EAAQs0B,SAASj9E,YAC5D,IACI8mF,GADA,aAAClJ,GAAgBj1B,EAErB,SAASp9D,IACHo9D,EAAQm9B,aACVn9B,EAAQm9B,YAAYiB,YAAYD,GAG9Bn+B,EAAQq+B,QACVr+B,EAAQq+B,OAAO9uD,oBAAoB,QAAS4uD,EAEhD,CAEA,IAAI5rG,EAAU,IAAIwrG,eAOlB,SAASO,IACP,IAAK/rG,EACH,OAGF,MAAMgsG,EAAkBlG,GAAe/vE,KACrC,0BAA2B/1B,GAAWA,EAAQisG,yBAE1CC,EAAgBxJ,GAAiC,SAAjBA,GAA4C,SAAjBA,EACxC1iG,EAAQq8F,SAA/Br8F,EAAQmsG,aACJ9P,EAAW,CACfh7F,KAAM6qG,EACNxP,OAAQ18F,EAAQ08F,OAChB0P,WAAYpsG,EAAQosG,WACpBrK,QAASiK,EACT1uG,SACA0C,WAGFomG,IAAO,SAAkB1rG,GACvB+C,EAAQ/C,GACR2V,GACF,IAAG,SAAiB8H,GAClB3a,EAAO2a,GACP9H,GACF,GAAGgsF,GAGHr8F,EAAU,IACZ,CAlCAA,EAAQC,KAAKwtE,EAAQ39D,OAAOsnC,cAAeq2B,EAAQixB,KAAK,GAGxD1+F,EAAQkmB,QAAUunD,EAAQvnD,QAiCtB,cAAelmB,EAEjBA,EAAQ+rG,UAAYA,EAGpB/rG,EAAQqsG,mBAAqB,WACtBrsG,GAAkC,IAAvBA,EAAQunE,aAQD,IAAnBvnE,EAAQ08F,QAAkB18F,EAAQssG,aAAwD,IAAzCtsG,EAAQssG,YAAY3xF,QAAQ,WAKjFwB,WAAW4vF,EACb,EAIF/rG,EAAQusG,QAAU,WACXvsG,IAILxC,EAAO,IAAI4+F,GAAW,kBAAmBA,GAAWoQ,aAAc/+B,EAASztE,IAG3EA,EAAU,KACZ,EAGAA,EAAQO,QAAU,WAGhB/C,EAAO,IAAI4+F,GAAW,gBAAiBA,GAAWqQ,YAAah/B,EAASztE,IAGxEA,EAAU,IACZ,EAGAA,EAAQ0sG,UAAY,WAClB,IAAIC,EAAsBl/B,EAAQvnD,QAAU,cAAgBunD,EAAQvnD,QAAU,cAAgB,mBAC9F,MAAM07E,EAAen0B,EAAQm0B,cAAgBpC,GACzC/xB,EAAQk/B,sBACVA,EAAsBl/B,EAAQk/B,qBAEhCnvG,EAAO,IAAI4+F,GACTuQ,EACA/K,EAAajC,oBAAsBvD,GAAWwQ,UAAYxQ,GAAWoQ,aACrE/+B,EACAztE,IAGFA,EAAU,IACZ,OAGgBpF,IAAhB8wG,GAA6BC,EAAevJ,eAAe,MAGvD,qBAAsBpiG,GACxBk8F,GAAQt4F,QAAQ+nG,EAAerP,UAAU,SAA0B9mF,EAAKla,GACtE0E,EAAQ6sG,iBAAiBvxG,EAAKka,EAChC,IAIG0mF,GAAQ5E,YAAY7pB,EAAQ08B,mBAC/BnqG,EAAQmqG,kBAAoB18B,EAAQ08B,iBAIlCzH,GAAiC,SAAjBA,IAClB1iG,EAAQ0iG,aAAej1B,EAAQi1B,cAIS,oBAA/Bj1B,EAAQ68B,oBACjBtqG,EAAQk9C,iBAAiB,WAAYoqD,GAAqB75B,EAAQ68B,oBAAoB,IAIhD,oBAA7B78B,EAAQ48B,kBAAmCrqG,EAAQ8sG,QAC5D9sG,EAAQ8sG,OAAO5vD,iBAAiB,WAAYoqD,GAAqB75B,EAAQ48B,oBAGvE58B,EAAQm9B,aAAen9B,EAAQq+B,UAGjCF,EAAamB,IACN/sG,IAGLxC,GAAQuvG,GAAUA,EAAO1uG,KAAO,IAAI6nG,GAAc,KAAM5oG,EAAQ0C,GAAW+sG,GAC3E/sG,EAAQgtG,QACRhtG,EAAU,KAAI,EAGhBytE,EAAQm9B,aAAen9B,EAAQm9B,YAAYqC,UAAUrB,GACjDn+B,EAAQq+B,SACVr+B,EAAQq+B,OAAOoB,QAAUtB,IAAen+B,EAAQq+B,OAAO5uD,iBAAiB,QAAS0uD,KAIrF,MAAMrD,EAAWjC,GAAc74B,EAAQixB,KAEnC6J,IAAsD,IAA1CvH,GAASb,UAAUxlF,QAAQ4tF,GACzC/qG,EAAO,IAAI4+F,GAAW,wBAA0BmM,EAAW,IAAKnM,GAAWiK,gBAAiB/oG,IAM9F0C,EAAQmtG,KAAKzB,GAAe,KAC9B,GACF,EAEA,MAAM0B,GAAiB,CAACC,EAASnnF,KAC/B,IAEIgnF,EAFAI,EAAa,IAAIC,gBAIrB,MAAMhB,EAAU,SAAUQ,GACxB,IAAKG,EAAS,CACZA,GAAU,EACVrB,IACA,MAAM1zF,EAAM40F,aAAkB12G,MAAQ02G,EAAS/0G,KAAKw1G,OACpDF,EAAWN,MAAM70F,aAAeikF,GAAajkF,EAAM,IAAI+tF,GAAc/tF,aAAe9hB,MAAQ8hB,EAAIhiB,QAAUgiB,GAC5G,CACF,EAEA,IAAIivF,EAAQlhF,GAAW/J,YAAW,KAChCowF,EAAQ,IAAInQ,GAAW,WAAWl2E,mBAA0Bk2E,GAAWwQ,WAAW,GACjF1mF,GAEH,MAAM2lF,EAAc,KACdwB,IACFjG,GAAS1wB,aAAa0wB,GACtBA,EAAQ,KACRiG,EAAQzpG,SAAQkoG,IACdA,IACCA,EAAO9uD,oBAAsB8uD,EAAO9uD,oBAAoB,QAASuvD,GAAWT,EAAOD,YAAYU,GAAS,IAE3Gc,EAAU,KACZ,EAGFA,EAAQzpG,SAASkoG,GAAWA,GAAUA,EAAO5uD,kBAAoB4uD,EAAO5uD,iBAAiB,QAASqvD,KAElG,MAAM,OAACT,GAAUwB,EAIjB,OAFAxB,EAAOD,YAAcA,EAEd,CAACC,EAAQ,KACd1E,GAAS1wB,aAAa0wB,GACtBA,EAAQ,IAAI,EACZ,EAGJ,IAAIqG,GAAmBL,GAEvB,MAAMM,GAAc,UAAWC,EAAOC,GACpC,IAAI78D,EAAM48D,EAAME,WAEhB,IAAKD,GAAa78D,EAAM68D,EAEtB,kBADMD,GAIR,IACI5zF,EADA/iB,EAAM,EAGV,MAAOA,EAAM+5C,EACXh3B,EAAM/iB,EAAM42G,QACND,EAAM91F,MAAM7gB,EAAK+iB,GACvB/iB,EAAM+iB,CAEV,EAEM+zF,GAAYC,gBAAiBC,EAAUJ,EAAWpP,GACtD,UAAW,MAAMmP,KAASK,QACjBN,GAAYhW,YAAYC,OAAOgW,GAASA,QAAenP,EAAOtnG,OAAOy2G,IAAUC,EAE1F,EAEMK,GAAc,CAACC,EAAQN,EAAWO,EAAYC,EAAU5P,KAC5D,MAAMvuF,EAAW69F,GAAUI,EAAQN,EAAWpP,GAE9C,IAAIznG,EAAQ,EAEZ,OAAO,IAAIs3G,eAAe,CACxBhwG,KAAM,QAEN,UAAMiwG,CAAKhB,GACT,MAAM,KAACj9F,EAAI,MAAE3V,SAAeuV,EAASG,OAErC,GAAIC,EAGF,OAFAi9F,EAAWltG,aACXguG,IAIF,IAAIr9D,EAAMr2C,EAAMmzG,WAChBM,GAAcA,EAAWp3G,GAASg6C,GAClCu8D,EAAWiB,QAAQ,IAAIxU,WAAWr/F,GACpC,EACA,MAAAqyG,CAAOS,GAEL,OADAY,EAASZ,GACFv9F,EAASu+F,QAClB,GACC,CACDC,cAAe,GAChB,EAGGC,GAAyB,CAAC/G,EAAOllG,KACrC,MAAMmlG,EAA4B,MAATD,EACzB,OAAQx1E,GAAWhW,YAAW,IAAM1Z,EAAG,CACrCmlG,mBACAD,QACAx1E,YACC,EAGCw8E,GAAoC,oBAAVC,OAA2C,oBAAZC,SAA8C,oBAAbC,SAC1FC,GAA4BJ,IAA8C,oBAAnBN,eAGvDW,GAAaL,KAA4C,oBAAhBM,YAC3C,CAAEjQ,GAAazoG,GAAQyoG,EAAQR,OAAOjoG,GAAtC,CAA4C,IAAI04G,aAChDlB,MAAOx3G,GAAQ,IAAIwjG,iBAAiB,IAAI+U,SAASv4G,GAAK24G,gBAGpDC,GAAwBJ,IAA6B,MACzD,IAAIK,GAAiB,EAErB,MAAMC,EAAiB,IAAIR,QAAQ7N,GAASN,OAAQ,CAClD1iD,KAAM,IAAIqwD,eACVv+F,OAAQ,OACR,UAAIw/F,GAEF,OADAF,GAAiB,EACV,MACT,IACCrN,QAAQp0F,IAAI,gBAEf,OAAOyhG,IAAmBC,CAC3B,EAb0D,GAerDE,GAAqB,MAErBC,GAAyBT,MAA+B,MAC5D,IACE,OAAO7S,GAAQ5D,iBAAiB,IAAIwW,SAAS,IAAI9wD,KACnD,CAAE,MAAM7lC,GAER,CACD,EAN6D,GAQxDs3F,GAAY,CAChBvB,OAAQsB,IAA0B,CAAE7sG,GAAQA,EAAIq7C,OAGlD2wD,IAAqB,CAAEhsG,IACrB,CAAC,OAAQ,cAAe,OAAQ,WAAY,UAAUiB,SAAQvF,KAC3DoxG,GAAUpxG,KAAUoxG,GAAUpxG,GAAQ69F,GAAQzoF,WAAW9Q,EAAItE,IAAUsE,GAAQA,EAAItE,KAClF,CAACsD,EAAGrE,KACF,MAAM,IAAI8+F,GAAW,kBAAkB/9F,sBAA0B+9F,GAAWsT,gBAAiBpyG,EAAO,EACpG,GAEP,EAPmB,CAOjB,IAAIwxG,UAEP,MAAMa,GAAgB5B,MAAO/vD,GACf,MAARA,EACK,EAGNk+C,GAAQpE,OAAO95C,GACTA,EAAK50C,KAGX8yF,GAAQN,oBAAoB59C,UACf,IAAI6wD,QAAQ7wD,GAAMkxD,eAAerB,WAG9C3R,GAAQzE,kBAAkBz5C,GACpBA,EAAK6vD,YAGX3R,GAAQ7D,kBAAkBr6C,KAC3BA,GAAc,IAGbk+C,GAAQnkF,SAASimC,UACJgxD,GAAWhxD,IAAO6vD,gBADlC,GAKI+B,GAAoB7B,MAAOhM,EAAS/jD,KACxC,MAAMrnD,EAASulG,GAAQd,eAAe2G,EAAQ8N,oBAE9C,OAAiB,MAAVl5G,EAAiBg5G,GAAc3xD,GAAQrnD,CAAM,EAGtD,IAAIm5G,GAAenB,IAAoB,OAAQrxG,IAC7C,IAAI,IACFohG,EAAG,OACH5uF,EAAM,KACNzO,EAAI,OACJyqG,EAAM,YACNlB,EAAW,QACX1kF,EAAO,mBACPokF,EAAkB,iBAClBD,EAAgB,aAChB3H,EAAY,QACZX,EAAO,gBACPoI,EAAkB,cAAa,aAC/B4F,GACE/E,GAAc1tG,GAElBolG,EAAeA,GAAgBA,EAAe,IAAIrkF,cAAgB,OAElE,IAGI2xF,EAAUhwG,GAHTiwG,EAAgBC,GAAgBpE,GAAUlB,GAAe1kF,EAC5DunF,GAAiB,CAAC3B,EAAQlB,GAAc1kF,GAAW,GAIrD,MAAMkoF,EAAW,MACd4B,GAAY7zF,YAAW,KACtB8zF,GAAkBA,EAAepE,aAAa,IAGhDmE,GAAW,CAAI,EAGjB,IAAIG,EAEJ,IACE,GACE9F,GAAoB8E,IAAoC,QAAXr/F,GAA+B,SAAXA,GACG,KAAnEqgG,QAA6BP,GAAkB7N,EAAS1gG,IACzD,CACA,IAMI+uG,EANAC,EAAW,IAAIxB,QAAQnQ,EAAK,CAC9B5uF,OAAQ,OACRkuC,KAAM38C,EACNiuG,OAAQ,SAKNpT,GAAQhE,WAAW72F,KAAU+uG,EAAoBC,EAAStO,QAAQ74F,IAAI,kBACxE64F,EAAQK,eAAegO,GAGrBC,EAASryD,OACX38C,EAAO4sG,GAAYoC,EAASryD,KAAMuxD,GAAoBb,GACpDyB,EACA7I,GAAqB+C,IACpB,KAAM2E,IAEb,CAEK9S,GAAQnkF,SAASoyF,KACpBA,EAAkBA,EAAkB,OAAS,QAG/CnqG,EAAU,IAAI6uG,QAAQnQ,EAAK,IACtBqR,EACHjE,OAAQmE,EACRngG,OAAQA,EAAOsnC,cACf2qD,QAASA,EAAQj9E,YAAYw3E,SAC7Bt+C,KAAM38C,EACNiuG,OAAQ,OACRnF,oBAGF,IAAI9N,QAAiBuS,MAAM5uG,GAE3B,MAAMswG,EAAmBd,KAA4C,WAAjB9M,GAA8C,aAAjBA,GAEjF,GAAI8M,KAA2BlF,GAAsBgG,GAAmB,CACtE,MAAMhnG,EAAU,CAAC,EAEjB,CAAC,SAAU,aAAc,WAAW1F,SAAQzI,IAC1CmO,EAAQnO,GAAQkhG,EAASlhG,EAAK,IAGhC,MAAMo1G,EAAwBrU,GAAQd,eAAeiB,EAAS0F,QAAQ74F,IAAI,mBAE1EmzF,EAAW,IAAIyS,SACbb,GAAY5R,EAASr+C,KAAMuxD,GAAoBjF,GAAsBoE,GACnE6B,EACAjJ,GAAqBgD,GAAoB,IACxCgG,GAAoBlC,EAAUY,IACjC1lG,EAEJ,CAEAo5F,EAAeA,GAAgB,OAE/B,IAAIwJ,QAAqBuD,GAAUvT,GAAQvD,QAAQ8W,GAAW/M,IAAiB,QAAQrG,EAAU/+F,GAMjG,OAJCgzG,GAAoBlC,IAErB8B,GAAeA,UAEF,IAAIvyG,SAAQ,CAACF,EAASD,KACjC4oG,GAAO3oG,EAASD,EAAQ,CACtB6D,KAAM6qG,EACNnK,QAAS+D,GAAe/vE,KAAKsmE,EAAS0F,SACtCrF,OAAQL,EAASK,OACjB0P,WAAY/P,EAAS+P,WACrB9uG,SACA0C,WACA,GAEN,CAAE,MAAOmY,GAGP,GAFAi2F,IAEIj2F,GAAoB,cAAbA,EAAIne,MAAwB,SAASwF,KAAK2Y,EAAIhiB,SACvD,MAAM4E,OAAO4D,OACX,IAAIy9F,GAAW,gBAAiBA,GAAWqQ,YAAanvG,EAAQ0C,GAChE,CACE88F,MAAO3kF,EAAI2kF,OAAS3kF,IAK1B,MAAMikF,GAAWrmE,KAAK5d,EAAKA,GAAOA,EAAIzX,KAAMpD,EAAQ0C,EACtD,CACD,GAED,MAAMwwG,GAAgB,CACpBC,KAAM1T,GACN2T,IAAKjF,GACLmD,MAAOkB,IAGT5T,GAAQt4F,QAAQ4sG,IAAe,CAAC/tG,EAAI/H,KAClC,GAAI+H,EAAI,CACN,IACE1H,OAAO69B,eAAen2B,EAAI,OAAQ,CAAC/H,SACrC,CAAE,MAAOJ,GAET,CACAS,OAAO69B,eAAen2B,EAAI,cAAe,CAAC/H,SAC5C,KAGF,MAAMi2G,GAAgBnD,GAAW,KAAKA,IAEhCoD,GAAoB/O,GAAY3F,GAAQzoF,WAAWouF,IAAwB,OAAZA,IAAgC,IAAZA,EAEzF,IAAIgP,GAAW,CACbC,WAAaD,IACXA,EAAW3U,GAAQ1jG,QAAQq4G,GAAYA,EAAW,CAACA,GAEnD,MAAM,OAACl6G,GAAUk6G,EACjB,IAAIE,EACAlP,EAEJ,MAAMmP,EAAkB,CAAC,EAEzB,IAAK,IAAIt6G,EAAI,EAAGA,EAAIC,EAAQD,IAAK,CAE/B,IAAImjB,EAIJ,GALAk3F,EAAgBF,EAASn6G,GAGzBmrG,EAAUkP,GAELH,GAAiBG,KACpBlP,EAAU2O,IAAe32F,EAAK3iB,OAAO65G,IAAgB1yF,oBAErCzjB,IAAZinG,GACF,MAAM,IAAIzF,GAAW,oBAAoBviF,MAI7C,GAAIgoF,EACF,MAGFmP,EAAgBn3F,GAAM,IAAMnjB,GAAKmrG,CACnC,CAEA,IAAKA,EAAS,CAEZ,MAAMoP,EAAUl2G,OAAO4I,QAAQqtG,GAC5BxuG,KAAI,EAAEqX,EAAI8S,KAAW,WAAW9S,OACpB,IAAV8S,EAAkB,sCAAwC,mCAG/D,IAAIjE,EAAI/xB,EACLs6G,EAAQt6G,OAAS,EAAI,YAAcs6G,EAAQzuG,IAAImuG,IAAcn5G,KAAK,MAAQ,IAAMm5G,GAAaM,EAAQ,IACtG,0BAEF,MAAM,IAAI7U,GACR,wDAA0D1zE,EAC1D,kBAEJ,CAEA,OAAOm5E,CAAO,EAEhBgP,SAAUL,IAUZ,SAASU,GAA6B5zG,GAKpC,GAJIA,EAAOstG,aACTttG,EAAOstG,YAAYuG,mBAGjB7zG,EAAOwuG,QAAUxuG,EAAOwuG,OAAOoB,QACjC,MAAM,IAAIhH,GAAc,KAAM5oG,EAElC,CASA,SAAS8zG,GAAgB9zG,GACvB4zG,GAA6B5zG,GAE7BA,EAAOykG,QAAU+D,GAAe/vE,KAAKz4B,EAAOykG,SAG5CzkG,EAAO+D,KAAO0kG,GAAc1jG,KAC1B/E,EACAA,EAAOwkG,mBAGgD,IAArD,CAAC,OAAQ,MAAO,SAASnnF,QAAQrd,EAAOwS,SAC1CxS,EAAOykG,QAAQK,eAAe,qCAAqC,GAGrE,MAAMP,EAAUgP,GAASC,WAAWxzG,EAAOukG,SAAWsB,GAAWtB,SAEjE,OAAOA,EAAQvkG,GAAQqc,MAAK,SAA6B0iF,GAYvD,OAXA6U,GAA6B5zG,GAG7B++F,EAASh7F,KAAO0kG,GAAc1jG,KAC5B/E,EACAA,EAAOklG,kBACPnG,GAGFA,EAAS0F,QAAU+D,GAAe/vE,KAAKsmE,EAAS0F,SAEzC1F,CACT,IAAG,SAA4BmR,GAe7B,OAdKxH,GAASwH,KACZ0D,GAA6B5zG,GAGzBkwG,GAAUA,EAAOnR,WACnBmR,EAAOnR,SAASh7F,KAAO0kG,GAAc1jG,KACnC/E,EACAA,EAAOklG,kBACPgL,EAAOnR,UAETmR,EAAOnR,SAAS0F,QAAU+D,GAAe/vE,KAAKy3E,EAAOnR,SAAS0F,WAI3DpkG,QAAQH,OAAOgwG,EACxB,GACF,CAEA,MAAMlgC,GAAU,QAEV+jC,GAAe,CAAC,EAGtB,CAAC,SAAU,UAAW,SAAU,WAAY,SAAU,UAAUztG,SAAQ,CAACvF,EAAM3H,KAC7E26G,GAAahzG,GAAQ,SAAmBkF,GACtC,cAAcA,IAAUlF,GAAQ,KAAO3H,EAAI,EAAI,KAAO,KAAO2H,CAC/D,CAAC,IAGH,MAAMizG,GAAqB,CAAC,EAkD5B,SAASC,GAAcjoG,EAASkoG,EAAQC,GACtC,GAAuB,kBAAZnoG,EACT,MAAM,IAAI8yF,GAAW,4BAA6BA,GAAWsV,sBAE/D,MAAM1uG,EAAOjI,OAAOiI,KAAKsG,GACzB,IAAI5S,EAAIsM,EAAKrM,OACb,MAAOD,KAAM,EAAG,CACd,MAAMwjC,EAAMl3B,EAAKtM,GACXi7G,EAAYH,EAAOt3E,GACzB,GAAIy3E,EAAJ,CACE,MAAMj3G,EAAQ4O,EAAQ4wB,GAChB/5B,OAAmBvF,IAAVF,GAAuBi3G,EAAUj3G,EAAOw/B,EAAK5wB,GAC5D,IAAe,IAAXnJ,EACF,MAAM,IAAIi8F,GAAW,UAAYliE,EAAM,YAAc/5B,EAAQi8F,GAAWsV,qBAG5E,MACA,IAAqB,IAAjBD,EACF,MAAM,IAAIrV,GAAW,kBAAoBliE,EAAKkiE,GAAWwV,eAE7D,CACF,CA5DAP,GAAazP,aAAe,SAAsB+P,EAAWryE,EAASnpC,GACpE,SAAS07G,EAAc33E,EAAK43E,GAC1B,MAAO,WAAaxkC,GAAU,0BAA6BpzC,EAAM,IAAO43E,GAAQ37G,EAAU,KAAOA,EAAU,GAC7G,CAGA,MAAO,CAACuE,EAAOw/B,EAAK63E,KAClB,IAAkB,IAAdJ,EACF,MAAM,IAAIvV,GACRyV,EAAc33E,EAAK,qBAAuBoF,EAAU,OAASA,EAAU,KACvE88D,GAAW4V,gBAef,OAXI1yE,IAAYgyE,GAAmBp3E,KACjCo3E,GAAmBp3E,IAAO,EAE1B3/B,QAAQ0c,KACN46F,EACE33E,EACA,+BAAiCoF,EAAU,8CAK1CqyE,GAAYA,EAAUj3G,EAAOw/B,EAAK63E,EAAY,CAEzD,EAmCA,IAAIJ,GAAY,CACdJ,iBACAU,WAAYZ,IAGd,MAAMY,GAAaN,GAAUM,WAS7B,MAAMC,GACJ,WAAAn4G,CAAYo4G,GACVn6G,KAAKyhC,SAAW04E,EAChBn6G,KAAKo6G,aAAe,CAClBpyG,QAAS,IAAIu/F,GACblD,SAAU,IAAIkD,GAElB,CAUA,aAAMv/F,CAAQqyG,EAAa/0G,GACzB,IACE,aAAatF,KAAKq4G,SAASgC,EAAa/0G,EAC1C,CAAE,MAAO6a,GACP,GAAIA,aAAe9hB,MAAO,CACxB,IAAIi8G,EAEJj8G,MAAM0K,kBAAoB1K,MAAM0K,kBAAkBuxG,EAAQ,CAAC,GAAMA,EAAQ,IAAIj8G,MAG7E,MAAM4f,EAAQq8F,EAAMr8F,MAAQq8F,EAAMr8F,MAAM7b,QAAQ,QAAS,IAAM,GAC/D,IACO+d,EAAIlC,MAGEA,IAAU/e,OAAOihB,EAAIlC,OAAO+wB,SAAS/wB,EAAM7b,QAAQ,YAAa,OACzE+d,EAAIlC,OAAS,KAAOA,GAHpBkC,EAAIlC,MAAQA,CAKhB,CAAE,MAAO3b,GAET,CACF,CAEA,MAAM6d,CACR,CACF,CAEA,QAAAk4F,CAASgC,EAAa/0G,GAGO,kBAAhB+0G,GACT/0G,EAASA,GAAU,CAAC,EACpBA,EAAOohG,IAAM2T,GAEb/0G,EAAS+0G,GAAe,CAAC,EAG3B/0G,EAASksG,GAAYxxG,KAAKyhC,SAAUn8B,GAEpC,MAAM,aAACskG,EAAY,iBAAEqI,EAAgB,QAAElI,GAAWzkG,OAE7B1C,IAAjBgnG,GACF+P,GAAUJ,cAAc3P,EAAc,CACpCnC,kBAAmBwS,GAAWrQ,aAAaqQ,GAAWM,SACtD7S,kBAAmBuS,GAAWrQ,aAAaqQ,GAAWM,SACtD5S,oBAAqBsS,GAAWrQ,aAAaqQ,GAAWM,WACvD,GAGmB,MAApBtI,IACE/N,GAAQzoF,WAAWw2F,GACrB3sG,EAAO2sG,iBAAmB,CACxBpL,UAAWoL,GAGb0H,GAAUJ,cAActH,EAAkB,CACxCzL,OAAQyT,GAAWO,SACnB3T,UAAWoT,GAAWO,WACrB,IAKPl1G,EAAOwS,QAAUxS,EAAOwS,QAAU9X,KAAKyhC,SAAS3pB,QAAU,OAAOuO,cAGjE,IAAIo0F,EAAiB1Q,GAAW7F,GAAQpD,MACtCiJ,EAAQmB,OACRnB,EAAQzkG,EAAOwS,SAGjBiyF,GAAW7F,GAAQt4F,QACjB,CAAC,SAAU,MAAO,OAAQ,OAAQ,MAAO,QAAS,WACjDkM,WACQiyF,EAAQjyF,EAAO,IAI1BxS,EAAOykG,QAAU+D,GAAe7kF,OAAOwxF,EAAgB1Q,GAGvD,MAAM2Q,EAA0B,GAChC,IAAIC,GAAiC,EACrC36G,KAAKo6G,aAAapyG,QAAQ4D,SAAQ,SAAoCgvG,GACjC,oBAAxBA,EAAYvT,UAA0D,IAAhCuT,EAAYvT,QAAQ/hG,KAIrEq1G,EAAiCA,GAAkCC,EAAYxT,YAE/EsT,EAAwBt9E,QAAQw9E,EAAY1T,UAAW0T,EAAYzT,UACrE,IAEA,MAAM0T,EAA2B,GAKjC,IAAIn1G,EAJJ1F,KAAKo6G,aAAa/V,SAASz4F,SAAQ,SAAkCgvG,GACnEC,EAAyBx5G,KAAKu5G,EAAY1T,UAAW0T,EAAYzT,SACnE,IAGA,IACIpuD,EADAr6C,EAAI,EAGR,IAAKi8G,EAAgC,CACnC,MAAMG,EAAQ,CAAC1B,GAAgBxnG,KAAK5R,WAAO4C,GAC3Ck4G,EAAM19E,QAAQxoB,MAAMkmG,EAAOJ,GAC3BI,EAAMz5G,KAAKuT,MAAMkmG,EAAOD,GACxB9hE,EAAM+hE,EAAMn8G,OAEZ+G,EAAUC,QAAQF,QAAQH,GAE1B,MAAO5G,EAAIq6C,EACTrzC,EAAUA,EAAQic,KAAKm5F,EAAMp8G,KAAMo8G,EAAMp8G,MAG3C,OAAOgH,CACT,CAEAqzC,EAAM2hE,EAAwB/7G,OAE9B,IAAIs0G,EAAY3tG,EAEhB5G,EAAI,EAEJ,MAAOA,EAAIq6C,EAAK,CACd,MAAMgiE,EAAcL,EAAwBh8G,KACtCs8G,EAAaN,EAAwBh8G,KAC3C,IACEu0G,EAAY8H,EAAY9H,EAC1B,CAAE,MAAOzwG,GACPw4G,EAAW3wG,KAAKrK,KAAMwC,GACtB,KACF,CACF,CAEA,IACEkD,EAAU0zG,GAAgB/uG,KAAKrK,KAAMizG,EACvC,CAAE,MAAOzwG,GACP,OAAOmD,QAAQH,OAAOhD,EACxB,CAEA9D,EAAI,EACJq6C,EAAM8hE,EAAyBl8G,OAE/B,MAAOD,EAAIq6C,EACTrzC,EAAUA,EAAQic,KAAKk5F,EAAyBn8G,KAAMm8G,EAAyBn8G,MAGjF,OAAOgH,CACT,CAEA,MAAAu1G,CAAO31G,GACLA,EAASksG,GAAYxxG,KAAKyhC,SAAUn8B,GACpC,MAAM41G,EAAW7J,GAAc/rG,EAAO6rG,QAAS7rG,EAAOohG,KACtD,OAAOD,GAASyU,EAAU51G,EAAOoG,OAAQpG,EAAO2sG,iBAClD,EAIF/N,GAAQt4F,QAAQ,CAAC,SAAU,MAAO,OAAQ,YAAY,SAA6BkM,GAEjFoiG,GAAMpxG,UAAUgP,GAAU,SAAS4uF,EAAKphG,GACtC,OAAOtF,KAAKgI,QAAQwpG,GAAYlsG,GAAU,CAAC,EAAG,CAC5CwS,SACA4uF,MACAr9F,MAAO/D,GAAU,CAAC,GAAG+D,OAEzB,CACF,IAEA66F,GAAQt4F,QAAQ,CAAC,OAAQ,MAAO,UAAU,SAA+BkM,GAGvE,SAASqjG,EAAmBC,GAC1B,OAAO,SAAoB1U,EAAKr9F,EAAM/D,GACpC,OAAOtF,KAAKgI,QAAQwpG,GAAYlsG,GAAU,CAAC,EAAG,CAC5CwS,SACAiyF,QAASqR,EAAS,CAChB,eAAgB,uBACd,CAAC,EACL1U,MACAr9F,SAEJ,CACF,CAEA6wG,GAAMpxG,UAAUgP,GAAUqjG,IAE1BjB,GAAMpxG,UAAUgP,EAAS,QAAUqjG,GAAmB,EACxD,IAEA,IAAIE,GAAUnB,GASd,MAAMoB,GACJ,WAAAv5G,CAAYw5G,GACV,GAAwB,oBAAbA,EACT,MAAM,IAAIlmC,UAAU,gCAGtB,IAAImmC,EAEJx7G,KAAK0F,QAAU,IAAIC,SAAQ,SAAyBF,GAClD+1G,EAAiB/1G,CACnB,IAEA,MAAMO,EAAQhG,KAGdA,KAAK0F,QAAQic,MAAKozF,IAChB,IAAK/uG,EAAMy1G,WAAY,OAEvB,IAAI/8G,EAAIsH,EAAMy1G,WAAW98G,OAEzB,MAAOD,KAAM,EACXsH,EAAMy1G,WAAW/8G,GAAGq2G,GAEtB/uG,EAAMy1G,WAAa,IAAI,IAIzBz7G,KAAK0F,QAAQic,KAAO+5F,IAClB,IAAIC,EAEJ,MAAMj2G,EAAU,IAAIC,SAAQF,IAC1BO,EAAMivG,UAAUxvG,GAChBk2G,EAAWl2G,CAAO,IACjBkc,KAAK+5F,GAMR,OAJAh2G,EAAQqvG,OAAS,WACf/uG,EAAM6tG,YAAY8H,EACpB,EAEOj2G,CAAO,EAGhB61G,GAAS,SAAgBp9G,EAASmH,EAAQ0C,GACpChC,EAAMwvG,SAKVxvG,EAAMwvG,OAAS,IAAItH,GAAc/vG,EAASmH,EAAQ0C,GAClDwzG,EAAex1G,EAAMwvG,QACvB,GACF,CAKA,gBAAA2D,GACE,GAAIn5G,KAAKw1G,OACP,MAAMx1G,KAAKw1G,MAEf,CAMA,SAAAP,CAAU1F,GACJvvG,KAAKw1G,OACPjG,EAASvvG,KAAKw1G,QAIZx1G,KAAKy7G,WACPz7G,KAAKy7G,WAAWp6G,KAAKkuG,GAErBvvG,KAAKy7G,WAAa,CAAClM,EAEvB,CAMA,WAAAsE,CAAYtE,GACV,IAAKvvG,KAAKy7G,WACR,OAEF,MAAMltG,EAAQvO,KAAKy7G,WAAW94F,QAAQ4sF,IACvB,IAAXhhG,GACFvO,KAAKy7G,WAAWl5F,OAAOhU,EAAO,EAElC,CAMA,aAAOzL,GACL,IAAIiyG,EACJ,MAAM/uG,EAAQ,IAAIs1G,IAAY,SAAkB18G,GAC9Cm2G,EAASn2G,CACX,IACA,MAAO,CACLoH,QACA+uG,SAEJ,EAGF,IAAI6G,GAAgBN,GAuBpB,SAASO,GAAOh2G,GACd,OAAO,SAAc6O,GACnB,OAAO7O,EAAS+O,MAAM,KAAMF,EAC9B,CACF,CASA,SAASonG,GAAap1G,GACpB,OAAOw9F,GAAQ54F,SAAS5E,KAAsC,IAAzBA,EAAQo1G,YAC/C,CAEA,MAAMC,GAAiB,CACrBC,SAAU,IACVC,mBAAoB,IACpBC,WAAY,IACZC,WAAY,IACZC,GAAI,IACJC,QAAS,IACTC,SAAU,IACVC,4BAA6B,IAC7BC,UAAW,IACXC,aAAc,IACdC,eAAgB,IAChBC,YAAa,IACbC,gBAAiB,IACjBC,OAAQ,IACRC,gBAAiB,IACjBC,iBAAkB,IAClBC,MAAO,IACPC,SAAU,IACVC,YAAa,IACbC,SAAU,IACVC,OAAQ,IACRC,kBAAmB,IACnBC,kBAAmB,IACnBC,WAAY,IACZC,aAAc,IACdC,gBAAiB,IACjBC,UAAW,IACXC,SAAU,IACVC,iBAAkB,IAClBC,cAAe,IACfC,4BAA6B,IAC7BC,eAAgB,IAChBC,SAAU,IACVC,KAAM,IACNC,eAAgB,IAChBC,mBAAoB,IACpBC,gBAAiB,IACjBC,WAAY,IACZC,qBAAsB,IACtBC,oBAAqB,IACrBC,kBAAmB,IACnBC,UAAW,IACXC,mBAAoB,IACpBC,oBAAqB,IACrBC,OAAQ,IACRC,iBAAkB,IAClBC,SAAU,IACVC,gBAAiB,IACjBC,qBAAsB,IACtBC,gBAAiB,IACjBC,4BAA6B,IAC7BC,2BAA4B,IAC5BC,oBAAqB,IACrBC,eAAgB,IAChBC,WAAY,IACZC,mBAAoB,IACpBC,eAAgB,IAChBC,wBAAyB,IACzBC,sBAAuB,IACvBC,oBAAqB,IACrBC,aAAc,IACdC,YAAa,IACbC,8BAA+B,KAGjC/8G,OAAO4I,QAAQowG,IAAgBnwG,SAAQ,EAAEtI,EAAKZ,MAC5Cq5G,GAAer5G,GAASY,CAAG,IAG7B,IAAIy8G,GAAmBhE,GASvB,SAASiE,GAAeC,GACtB,MAAMp5E,EAAU,IAAIw0E,GAAQ4E,GACtB7hG,EAAWxM,EAAKypG,GAAQvyG,UAAUd,QAAS6+B,GAajD,OAVAq9D,GAAQzyF,OAAO2M,EAAUi9F,GAAQvyG,UAAW+9B,EAAS,CAAC65D,YAAY,IAGlEwD,GAAQzyF,OAAO2M,EAAUyoB,EAAS,KAAM,CAAC65D,YAAY,IAGrDtiF,EAASnV,OAAS,SAAgBkxG,GAChC,OAAO6F,GAAexO,GAAYyO,EAAe9F,GACnD,EAEO/7F,CACT,CAGA,MAAM8hG,GAAQF,GAAe7U,IAG7B+U,GAAMhG,MAAQmB,GAGd6E,GAAMhS,cAAgBA,GACtBgS,GAAM5E,YAAcM,GACpBsE,GAAMlS,SAAWA,GACjBkS,GAAM5qC,QAAUA,GAChB4qC,GAAM5a,WAAaA,GAGnB4a,GAAM9b,WAAaA,GAGnB8b,GAAMC,OAASD,GAAMhS,cAGrBgS,GAAME,IAAM,SAAaC,GACvB,OAAO16G,QAAQy6G,IAAIC,EACrB,EAEAH,GAAMrE,OAASA,GAGfqE,GAAMpE,aAAeA,GAGrBoE,GAAM1O,YAAcA,GAEpB0O,GAAMvT,aAAemB,GAErBoS,GAAMI,WAAa/0G,GAAS+9F,GAAepF,GAAQ5B,WAAW/2F,GAAS,IAAI60F,SAAS70F,GAASA,GAE7F20G,GAAMpH,WAAaD,GAASC,WAE5BoH,GAAMnE,eAAiBgE,GAEvBG,GAAMzvF,QAAUyvF,GAEhBhhB,EAAOF,QAAUkhB,E,uBCnjHjB,IAAIK,EAAa,EAAQ,MACrBC,EAAc,EAAQ,MAEtBC,EAAaprC,UAGjB6pB,EAAOF,QAAU,SAAU0hB,GACzB,GAAIH,EAAWG,GAAW,OAAOA,EACjC,MAAM,IAAID,EAAWD,EAAYE,GAAY,qBAC/C,C,uBCTA,IAAIC,EAAsB,EAAQ,MAE9BC,EAAU1hH,OACVuhH,EAAaprC,UAEjB6pB,EAAOF,QAAU,SAAU0hB,GACzB,GAAIC,EAAoBD,GAAW,OAAOA,EAC1C,MAAM,IAAID,EAAW,aAAeG,EAAQF,GAAY,kBAC1D,C,uBCRA,IAAI/qG,EAAM,YAGVupF,EAAOF,QAAU,SAAU6hB,GAEzB,OADAlrG,EAAIkrG,GACGA,CACT,C,sBCNA,IAAIC,EAAgB,EAAQ,MAExBL,EAAaprC,UAEjB6pB,EAAOF,QAAU,SAAU6hB,EAAIE,GAC7B,GAAID,EAAcC,EAAWF,GAAK,OAAOA,EACzC,MAAM,IAAIJ,EAAW,uBACvB,C,uBCPA,IAAIn1G,EAAW,EAAQ,IAEnBs1G,EAAU1hH,OACVuhH,EAAaprC,UAGjB6pB,EAAOF,QAAU,SAAU0hB,GACzB,GAAIp1G,EAASo1G,GAAW,OAAOA,EAC/B,MAAM,IAAID,EAAWG,EAAQF,GAAY,oBAC3C,C,uBCTA,IAAIM,EAAkB,EAAQ,MAC1BC,EAAkB,EAAQ,MAC1BC,EAAoB,EAAQ,MAG5BC,EAAe,SAAUC,GAC3B,OAAO,SAAUC,EAAO72F,EAAI82F,GAC1B,IAAIC,EAAIP,EAAgBK,GACpB1iH,EAASuiH,EAAkBK,GAC/B,GAAe,IAAX5iH,EAAc,OAAQyiH,IAAgB,EAC1C,IACI1+G,EADA6L,EAAQ0yG,EAAgBK,EAAW3iH,GAIvC,GAAIyiH,GAAe52F,IAAOA,GAAI,MAAO7rB,EAAS4P,EAG5C,GAFA7L,EAAQ6+G,EAAEhzG,KAEN7L,IAAUA,EAAO,OAAO,OAEvB,KAAM/D,EAAS4P,EAAOA,IAC3B,IAAK6yG,GAAe7yG,KAASgzG,IAAMA,EAAEhzG,KAAWic,EAAI,OAAO42F,GAAe7yG,GAAS,EACnF,OAAQ6yG,IAAgB,CAC5B,CACF,EAEAliB,EAAOF,QAAU,CAGf7zF,SAAUg2G,GAAa,GAGvBx+F,QAASw+F,GAAa,G,uBC/BxB,IAAIK,EAAc,EAAQ,MACtBhhH,EAAU,EAAQ,MAElBigH,EAAaprC,UAEbosC,EAA2B1+G,OAAO0+G,yBAGlCC,EAAoCF,IAAgB,WAEtD,QAAa5+G,IAAT5C,KAAoB,OAAO,EAC/B,IAEE+C,OAAO69B,eAAe,GAAI,SAAU,CAAEwzB,UAAU,IAASz1D,OAAS,CACpE,CAAE,MAAO6D,GACP,OAAOA,aAAiB6yE,SAC1B,CACF,CATwD,GAWxD6pB,EAAOF,QAAU0iB,EAAoC,SAAUH,EAAG5iH,GAChE,GAAI6B,EAAQ+gH,KAAOE,EAAyBF,EAAG,UAAUntD,SACvD,MAAM,IAAIqsD,EAAW,gCACrB,OAAOc,EAAE5iH,OAASA,CACtB,EAAI,SAAU4iH,EAAG5iH,GACf,OAAO4iH,EAAE5iH,OAASA,CACpB,C,uBCzBA,IAAIgjH,EAAc,EAAQ,MAEtB/iG,EAAW+iG,EAAY,CAAC,EAAE/iG,UAC1BgjG,EAAcD,EAAY,GAAG9hG,OAEjCq/E,EAAOF,QAAU,SAAU6hB,GACzB,OAAOe,EAAYhjG,EAASiiG,GAAK,GAAI,EACvC,C,uBCPA,IAAIgB,EAAwB,EAAQ,MAChCtB,EAAa,EAAQ,MACrBuB,EAAa,EAAQ,MACrBC,EAAkB,EAAQ,MAE1BC,EAAgBD,EAAgB,eAChCE,EAAUl/G,OAGVm/G,EAAwE,cAApDJ,EAAW,WAAc,OAAOhkG,SAAW,CAAhC,IAG/BqkG,EAAS,SAAUtB,EAAIv9G,GACzB,IACE,OAAOu9G,EAAGv9G,EACZ,CAAE,MAAOd,GAAqB,CAChC,EAGA08F,EAAOF,QAAU6iB,EAAwBC,EAAa,SAAUjB,GAC9D,IAAIU,EAAGlgE,EAAKl5C,EACZ,YAAcvF,IAAPi+G,EAAmB,YAAqB,OAAPA,EAAc,OAEO,iBAAjDx/D,EAAM8gE,EAAOZ,EAAIU,EAAQpB,GAAKmB,IAA8B3gE,EAEpE6gE,EAAoBJ,EAAWP,GAEF,YAA5Bp5G,EAAS25G,EAAWP,KAAoBhB,EAAWgB,EAAEa,QAAU,YAAcj6G,CACpF,C,uBC5BA,IAAIsN,EAAS,EAAQ,MACjBa,EAAU,EAAQ,MAClB+rG,EAAiC,EAAQ,MACzCC,EAAuB,EAAQ,MAEnCpjB,EAAOF,QAAU,SAAUn8F,EAAQC,EAAQy/G,GAIzC,IAHA,IAAIv3G,EAAOsL,EAAQxT,GACf89B,EAAiB0hF,EAAqBz1G,EACtC40G,EAA2BY,EAA+Bx1G,EACrDnO,EAAI,EAAGA,EAAIsM,EAAKrM,OAAQD,IAAK,CACpC,IAAI4E,EAAM0H,EAAKtM,GACV+W,EAAO5S,EAAQS,IAAUi/G,GAAc9sG,EAAO8sG,EAAYj/G,IAC7Ds9B,EAAe/9B,EAAQS,EAAKm+G,EAAyB3+G,EAAQQ,GAEjE,CACF,C,uBCfA,IAAIk+G,EAAc,EAAQ,MACtBc,EAAuB,EAAQ,MAC/BE,EAA2B,EAAQ,MAEvCtjB,EAAOF,QAAUwiB,EAAc,SAAUztG,EAAQzQ,EAAKZ,GACpD,OAAO4/G,EAAqBz1G,EAAEkH,EAAQzQ,EAAKk/G,EAAyB,EAAG9/G,GACzE,EAAI,SAAUqR,EAAQzQ,EAAKZ,GAEzB,OADAqR,EAAOzQ,GAAOZ,EACPqR,CACT,C,mBCTAmrF,EAAOF,QAAU,SAAUyjB,EAAQ//G,GACjC,MAAO,CACL6/B,aAAuB,EAATkgF,GACdj+E,eAAyB,EAATi+E,GAChBruD,WAAqB,EAATquD,GACZ//G,MAAOA,EAEX,C,uBCPA,IAAIggH,EAAc,EAAQ,KACtB9hF,EAAiB,EAAQ,MAE7Bs+D,EAAOF,QAAU,SAAUn8F,EAAQb,EAAM6+B,GAGvC,OAFIA,EAAW3vB,KAAKwxG,EAAY7hF,EAAW3vB,IAAKlP,EAAM,CAAE4Y,QAAQ,IAC5DimB,EAAWxuB,KAAKqwG,EAAY7hF,EAAWxuB,IAAKrQ,EAAM,CAAEuZ,QAAQ,IACzDqlB,EAAe/zB,EAAEhK,EAAQb,EAAM6+B,EACxC,C,uBCPA,IAAI0/E,EAAa,EAAQ,MACrB+B,EAAuB,EAAQ,MAC/BI,EAAc,EAAQ,KACtBC,EAAuB,EAAQ,MAEnCzjB,EAAOF,QAAU,SAAUuiB,EAAGj+G,EAAKZ,EAAO4O,GACnCA,IAASA,EAAU,CAAC,GACzB,IAAIsxG,EAAStxG,EAAQixB,WACjBvgC,OAAwBY,IAAjB0O,EAAQtP,KAAqBsP,EAAQtP,KAAOsB,EAEvD,GADIi9G,EAAW79G,IAAQggH,EAAYhgH,EAAOV,EAAMsP,GAC5CA,EAAQ5N,OACNk/G,EAAQrB,EAAEj+G,GAAOZ,EAChBigH,EAAqBr/G,EAAKZ,OAC1B,CACL,IACO4O,EAAQuxG,OACJtB,EAAEj+G,KAAMs/G,GAAS,UADErB,EAAEj+G,EAEhC,CAAE,MAAOd,GAAqB,CAC1BogH,EAAQrB,EAAEj+G,GAAOZ,EAChB4/G,EAAqBz1G,EAAE00G,EAAGj+G,EAAK,CAClCZ,MAAOA,EACP6/B,YAAY,EACZiC,cAAelzB,EAAQwxG,gBACvB1uD,UAAW9iD,EAAQyxG,aAEvB,CAAE,OAAOxB,CACX,C,uBC1BA,IAAI79G,EAAS,EAAQ,MAGjBk9B,EAAiB79B,OAAO69B,eAE5Bs+D,EAAOF,QAAU,SAAU17F,EAAKZ,GAC9B,IACEk+B,EAAel9B,EAAQJ,EAAK,CAAEZ,MAAOA,EAAO8hC,cAAc,EAAM4vB,UAAU,GAC5E,CAAE,MAAO5xD,GACPkB,EAAOJ,GAAOZ,CAChB,CAAE,OAAOA,CACX,C,uBCXA,IAAIsgH,EAAQ,EAAQ,MAGpB9jB,EAAOF,SAAWgkB,GAAM,WAEtB,OAA+E,IAAxEjgH,OAAO69B,eAAe,CAAC,EAAG,EAAG,CAAE1vB,IAAK,WAAc,OAAO,CAAG,IAAK,EAC1E,G,uBCNA,IAAIxN,EAAS,EAAQ,MACjB4H,EAAW,EAAQ,IAEnBnH,EAAWT,EAAOS,SAElB8+G,EAAS33G,EAASnH,IAAamH,EAASnH,EAASkpB,eAErD6xE,EAAOF,QAAU,SAAU6hB,GACzB,OAAOoC,EAAS9+G,EAASkpB,cAAcwzF,GAAM,CAAC,CAChD,C,mBCTA,IAAIJ,EAAaprC,UACb6tC,EAAmB,iBAEvBhkB,EAAOF,QAAU,SAAU6hB,GACzB,GAAIA,EAAKqC,EAAkB,MAAMzC,EAAW,kCAC5C,OAAOI,CACT,C,mBCNA3hB,EAAOF,QAAU,CACfmkB,eAAgB,CAAEzyF,EAAG,iBAAkB9xB,EAAG,EAAGwvB,EAAG,GAChDg1F,mBAAoB,CAAE1yF,EAAG,qBAAsB9xB,EAAG,EAAGwvB,EAAG,GACxDi1F,sBAAuB,CAAE3yF,EAAG,wBAAyB9xB,EAAG,EAAGwvB,EAAG,GAC9Dk1F,mBAAoB,CAAE5yF,EAAG,qBAAsB9xB,EAAG,EAAGwvB,EAAG,GACxDm1F,sBAAuB,CAAE7yF,EAAG,wBAAyB9xB,EAAG,EAAGwvB,EAAG,GAC9Do1F,mBAAoB,CAAE9yF,EAAG,sBAAuB9xB,EAAG,EAAGwvB,EAAG,GACzDq1F,2BAA4B,CAAE/yF,EAAG,8BAA+B9xB,EAAG,EAAGwvB,EAAG,GACzEs1F,cAAe,CAAEhzF,EAAG,gBAAiB9xB,EAAG,EAAGwvB,EAAG,GAC9Cu1F,kBAAmB,CAAEjzF,EAAG,oBAAqB9xB,EAAG,EAAGwvB,EAAG,GACtDw1F,oBAAqB,CAAElzF,EAAG,sBAAuB9xB,EAAG,GAAIwvB,EAAG,GAC3Dy1F,kBAAmB,CAAEnzF,EAAG,oBAAqB9xB,EAAG,GAAIwvB,EAAG,GACvD01F,YAAa,CAAEpzF,EAAG,aAAc9xB,EAAG,GAAIwvB,EAAG,GAC1C21F,yBAA0B,CAAErzF,EAAG,2BAA4B9xB,EAAG,GAAIwvB,EAAG,GACrE41F,eAAgB,CAAEtzF,EAAG,gBAAiB9xB,EAAG,GAAIwvB,EAAG,GAChD61F,mBAAoB,CAAEvzF,EAAG,qBAAsB9xB,EAAG,GAAIwvB,EAAG,GACzD81F,gBAAiB,CAAExzF,EAAG,iBAAkB9xB,EAAG,GAAIwvB,EAAG,GAClD+1F,kBAAmB,CAAEzzF,EAAG,oBAAqB9xB,EAAG,GAAIwvB,EAAG,GACvDg2F,cAAe,CAAE1zF,EAAG,eAAgB9xB,EAAG,GAAIwvB,EAAG,GAC9Ci2F,aAAc,CAAE3zF,EAAG,cAAe9xB,EAAG,GAAIwvB,EAAG,GAC5Ck2F,WAAY,CAAE5zF,EAAG,YAAa9xB,EAAG,GAAIwvB,EAAG,GACxCm2F,iBAAkB,CAAE7zF,EAAG,mBAAoB9xB,EAAG,GAAIwvB,EAAG,GACrDo2F,mBAAoB,CAAE9zF,EAAG,qBAAsB9xB,EAAG,GAAIwvB,EAAG,GACzDq2F,aAAc,CAAE/zF,EAAG,cAAe9xB,EAAG,GAAIwvB,EAAG,GAC5Cs2F,qBAAsB,CAAEh0F,EAAG,wBAAyB9xB,EAAG,GAAIwvB,EAAG,GAC9Du2F,eAAgB,CAAEj0F,EAAG,iBAAkB9xB,EAAG,GAAIwvB,EAAG,G,mBCzBnD8wE,EAAOF,QAA8B,oBAAb13F,WAA4BpI,OAAOoI,UAAUyc,YAAc,E,uBCAnF,IAOI3f,EAAOkjC,EAPP5jC,EAAS,EAAQ,MACjBqgB,EAAY,EAAQ,MAEpBjgB,EAAUJ,EAAOI,QACjB8gH,EAAOlhH,EAAOkhH,KACdC,EAAW/gH,GAAWA,EAAQ+gH,UAAYD,GAAQA,EAAKt9E,QACvDw9E,EAAKD,GAAYA,EAASC,GAG1BA,IACF1gH,EAAQ0gH,EAAG96G,MAAM,KAGjBs9B,EAAUljC,EAAM,GAAK,GAAKA,EAAM,GAAK,EAAI,IAAMA,EAAM,GAAKA,EAAM,MAK7DkjC,GAAWvjB,IACd3f,EAAQ2f,EAAU3f,MAAM,iBACnBA,GAASA,EAAM,IAAM,MACxBA,EAAQ2f,EAAU3f,MAAM,iBACpBA,IAAOkjC,GAAWljC,EAAM,MAIhC86F,EAAOF,QAAU13D,C,mBCzBjB43D,EAAOF,QAAU,CACf,cACA,iBACA,gBACA,uBACA,iBACA,WACA,U,uBCRF,IAAI2iB,EAAc,EAAQ,MAEtBoD,EAAS1mH,MACT+D,EAAUu/G,EAAY,GAAGv/G,SAEzB4iH,EAAO,SAAW/wF,GAAO,OAAO/0B,OAAO,IAAI6lH,EAAO9wF,GAAKhW,MAAS,CAAzD,CAA2D,UAElEgnG,EAA2B,uBAC3BC,EAAwBD,EAAyBz9G,KAAKw9G,GAE1D9lB,EAAOF,QAAU,SAAU/gF,EAAOknG,GAChC,GAAID,GAAyC,iBAATjnG,IAAsB8mG,EAAOK,kBAC/D,MAAOD,IAAelnG,EAAQ7b,EAAQ6b,EAAOgnG,EAA0B,IACvE,OAAOhnG,CACX,C,uBCdA,IAAIva,EAAS,EAAQ,MACjB+9G,EAA2B,UAC3B4D,EAA8B,EAAQ,MACtCC,EAAgB,EAAQ,MACxB3C,EAAuB,EAAQ,MAC/B4C,EAA4B,EAAQ,MACpCC,EAAW,EAAQ,MAiBvBtmB,EAAOF,QAAU,SAAU1tF,EAASxO,GAClC,IAGI2iH,EAAQ5iH,EAAQS,EAAKoiH,EAAgBC,EAAgB9kF,EAHrD+kF,EAASt0G,EAAQzO,OACjBgjH,EAASv0G,EAAQ5N,OACjBoiH,EAASx0G,EAAQy0G,KASrB,GANEljH,EADEgjH,EACOniH,EACAoiH,EACApiH,EAAOkiH,IAAWjD,EAAqBiD,EAAQ,CAAC,GAEhDliH,EAAOkiH,IAAWliH,EAAOkiH,GAAQ98G,UAExCjG,EAAQ,IAAKS,KAAOR,EAAQ,CAQ9B,GAPA6iH,EAAiB7iH,EAAOQ,GACpBgO,EAAQ00G,gBACVnlF,EAAa4gF,EAAyB5+G,EAAQS,GAC9CoiH,EAAiB7kF,GAAcA,EAAWn+B,OACrCgjH,EAAiB7iH,EAAOS,GAC/BmiH,EAASD,EAASK,EAASviH,EAAMsiH,GAAUE,EAAS,IAAM,KAAOxiH,EAAKgO,EAAQ20G,SAEzER,QAA6B7iH,IAAnB8iH,EAA8B,CAC3C,UAAWC,UAAyBD,EAAgB,SACpDH,EAA0BI,EAAgBD,EAC5C,EAEIp0G,EAAQ40G,MAASR,GAAkBA,EAAeQ,OACpDb,EAA4BM,EAAgB,QAAQ,GAEtDL,EAAcziH,EAAQS,EAAKqiH,EAAgBr0G,EAC7C,CACF,C,mBCrDA4tF,EAAOF,QAAU,SAAUqD,GACzB,IACE,QAASA,GACX,CAAE,MAAO7/F,GACP,OAAO,CACT,CACF,C,sBCNA,IAAIwgH,EAAQ,EAAQ,MAEpB9jB,EAAOF,SAAWgkB,GAAM,WAEtB,IAAIx7G,EAAO,WAA4B,EAAEoK,OAEzC,MAAsB,mBAARpK,GAAsBA,EAAKpE,eAAe,YAC1D,G,uBCPA,IAAI+iH,EAAc,EAAQ,KAEtB97G,EAAO8qB,SAASrsB,UAAUuB,KAE9B60F,EAAOF,QAAUmnB,EAAc97G,EAAKuH,KAAKvH,GAAQ,WAC/C,OAAOA,EAAKuK,MAAMvK,EAAMyT,UAC1B,C,sBCNA,IAAI0jG,EAAc,EAAQ,MACtB/rG,EAAS,EAAQ,MAEjB2wG,EAAoBjxF,SAASrsB,UAE7Bu9G,EAAgB7E,GAAez+G,OAAO0+G,yBAEtCwB,EAASxtG,EAAO2wG,EAAmB,QAEnCE,EAASrD,GAA0D,cAAhD,WAAqC,EAAEjhH,KAC1DukH,EAAetD,KAAYzB,GAAgBA,GAAe6E,EAAcD,EAAmB,QAAQ5hF,cAEvG06D,EAAOF,QAAU,CACfikB,OAAQA,EACRqD,OAAQA,EACRC,aAAcA,E,uBCfhB,IAAI5E,EAAc,EAAQ,MACtB6E,EAAY,EAAQ,MAExBtnB,EAAOF,QAAU,SAAUjrF,EAAQzQ,EAAKwU,GACtC,IAEE,OAAO6pG,EAAY6E,EAAUzjH,OAAO0+G,yBAAyB1tG,EAAQzQ,GAAKwU,IAC5E,CAAE,MAAOtV,GAAqB,CAChC,C,uBCRA,IAAI2jH,EAAc,EAAQ,KAEtBC,EAAoBjxF,SAASrsB,UAC7BuB,EAAO+7G,EAAkB/7G,KACzBo8G,EAAsBN,GAAeC,EAAkBx0G,KAAKA,KAAKvH,EAAMA,GAE3E60F,EAAOF,QAAUmnB,EAAcM,EAAsB,SAAUh8G,GAC7D,OAAO,WACL,OAAOJ,EAAKuK,MAAMnK,EAAIqT,UACxB,CACF,C,uBCVA,IAAIpa,EAAS,EAAQ,MACjB68G,EAAa,EAAQ,MAErBmG,EAAY,SAAUhG,GACxB,OAAOH,EAAWG,GAAYA,OAAW99G,CAC3C,EAEAs8F,EAAOF,QAAU,SAAU3yE,EAAWvU,GACpC,OAAOgG,UAAUnf,OAAS,EAAI+nH,EAAUhjH,EAAO2oB,IAAc3oB,EAAO2oB,IAAc3oB,EAAO2oB,GAAWvU,EACtG,C,mBCPAonF,EAAOF,QAAU,SAAU50F,GACzB,MAAO,CACL6N,SAAU7N,EACVgO,KAAMhO,EAAIgO,KACVC,MAAM,EAEV,C,uBCRA,IAAImuG,EAAY,EAAQ,MACpBG,EAAoB,EAAQ,MAIhCznB,EAAOF,QAAU,SAAU4nB,EAAGC,GAC5B,IAAIC,EAAOF,EAAEC,GACb,OAAOF,EAAkBG,QAAQlkH,EAAY4jH,EAAUM,EACzD,C,uBCRA,IAAIN,EAAY,EAAQ,MACpBO,EAAW,EAAQ,MACnB18G,EAAO,EAAQ,MACf28G,EAAsB,EAAQ,MAC9BC,EAAoB,EAAQ,MAE5BC,EAAe,eACfC,EAAcC,WACd3G,EAAaprC,UACb16C,EAAM2b,KAAK3b,IAEX0sF,EAAY,SAAUh1G,EAAKi1G,GAC7BtnH,KAAKqS,IAAMA,EACXrS,KAAKoR,KAAOupB,EAAI2sF,EAAS,GACzBtnH,KAAK2V,IAAM6wG,EAAUn0G,EAAIsD,KACzB3V,KAAKgL,KAAOw7G,EAAUn0G,EAAIrH,KAC5B,EAEAq8G,EAAUv+G,UAAY,CACpBy+G,YAAa,WACX,OAAON,EAAkBF,EAAS18G,EAAKrK,KAAKgL,KAAMhL,KAAKqS,MACzD,EACAlH,SAAU,SAAU01G,GAClB,OAAOx2G,EAAKrK,KAAK2V,IAAK3V,KAAKqS,IAAKwuG,EAClC,GAKF3hB,EAAOF,QAAU,SAAU50F,GACzB28G,EAAS38G,GACT,IAAIo9G,GAAWp9G,EAAIgH,KAGnB,GAAIo2G,IAAYA,EAAS,MAAM,IAAI/G,EAAWyG,GAC9C,IAAII,EAAUN,EAAoBQ,GAClC,GAAIF,EAAU,EAAG,MAAM,IAAIH,EAAYD,GACvC,OAAO,IAAIG,EAAUj9G,EAAKk9G,EAC5B,C,uBCtCA,IAAI9gD,EAAQ,SAAUq6C,GACpB,OAAOA,GAAMA,EAAGvqE,OAASA,MAAQuqE,CACnC,EAGA3hB,EAAOF,QAELx4B,EAA2B,iBAAd/R,YAA0BA,aACvC+R,EAAuB,iBAAV/iE,QAAsBA,SAEnC+iE,EAAqB,iBAARhjE,MAAoBA,OACjCgjE,EAAuB,iBAAV,EAAA3oB,GAAsB,EAAAA,IACnC2oB,EAAqB,iBAARxmE,MAAoBA,OAEjC,WAAe,OAAOA,IAAO,CAA7B,IAAoCm1B,SAAS,cAATA,E,uBCdtC,IAAIwsF,EAAc,EAAQ,MACtB8F,EAAW,EAAQ,MAEnBrkH,EAAiBu+G,EAAY,CAAC,EAAEv+G,gBAKpC87F,EAAOF,QAAUj8F,OAAO0S,QAAU,SAAgBorG,EAAIv9G,GACpD,OAAOF,EAAeqkH,EAAS5G,GAAKv9G,EACtC,C,kBCVA47F,EAAOF,QAAU,CAAC,C,uBCAlB,IAAIwiB,EAAc,EAAQ,MACtBwB,EAAQ,EAAQ,MAChB31F,EAAgB,EAAQ,MAG5B6xE,EAAOF,SAAWwiB,IAAgBwB,GAAM,WAEtC,OAES,IAFFjgH,OAAO69B,eAAevT,EAAc,OAAQ,IAAK,CACtDnc,IAAK,WAAc,OAAO,CAAG,IAC5BrG,CACL,G,uBCVA,IAAI82G,EAAc,EAAQ,MACtBqB,EAAQ,EAAQ,MAChB0E,EAAU,EAAQ,MAElBzF,EAAUl/G,OACViH,EAAQ23G,EAAY,GAAG33G,OAG3Bk1F,EAAOF,QAAUgkB,GAAM,WAGrB,OAAQf,EAAQ,KAAK0F,qBAAqB,EAC5C,IAAK,SAAU9G,GACb,MAAuB,WAAhB6G,EAAQ7G,GAAmB72G,EAAM62G,EAAI,IAAMoB,EAAQpB,EAC5D,EAAIoB,C,uBCdJ,IAAI1B,EAAa,EAAQ,MACrBj1G,EAAW,EAAQ,IACnBzC,EAAiB,EAAQ,MAG7Bq2F,EAAOF,QAAU,SAAUqiB,EAAO/G,EAAOsN,GACvC,IAAIC,EAAWC,EAUf,OAPEj/G,GAEA03G,EAAWsH,EAAYvN,EAAMv4G,cAC7B8lH,IAAcD,GACdt8G,EAASw8G,EAAqBD,EAAU/+G,YACxCg/G,IAAuBF,EAAQ9+G,WAC/BD,EAAew4G,EAAOyG,GACjBzG,CACT,C,uBCjBA,IAAIM,EAAc,EAAQ,MACtBpB,EAAa,EAAQ,MACrBwH,EAAQ,EAAQ,MAEhBC,EAAmBrG,EAAYxsF,SAASvW,UAGvC2hG,EAAWwH,EAAME,iBACpBF,EAAME,cAAgB,SAAUpH,GAC9B,OAAOmH,EAAiBnH,EAC1B,GAGF3hB,EAAOF,QAAU+oB,EAAME,a,uBCbvB,IAYI51G,EAAKnB,EAAKyE,EAZVuyG,EAAkB,EAAQ,MAC1BxkH,EAAS,EAAQ,MACjB4H,EAAW,EAAQ,IACnB+5G,EAA8B,EAAQ,MACtC5vG,EAAS,EAAQ,MACjB0yG,EAAS,EAAQ,MACjBC,EAAY,EAAQ,MACpBC,EAAa,EAAQ,KAErBC,EAA6B,6BAC7BjzC,EAAY3xE,EAAO2xE,UACnBviE,EAAUpP,EAAOoP,QAGjBy1G,EAAU,SAAU1H,GACtB,OAAOlrG,EAAIkrG,GAAM3vG,EAAI2vG,GAAMxuG,EAAIwuG,EAAI,CAAC,EACtC,EAEI2H,EAAY,SAAUC,GACxB,OAAO,SAAU5H,GACf,IAAIlsF,EACJ,IAAKrpB,EAASu1G,KAAQlsF,EAAQzjB,EAAI2vG,IAAKx6G,OAASoiH,EAC9C,MAAM,IAAIpzC,EAAU,0BAA4BozC,EAAO,aACvD,OAAO9zF,CACX,CACF,EAEA,GAAIuzF,GAAmBC,EAAOxzF,MAAO,CACnC,IAAIozF,EAAQI,EAAOxzF,QAAUwzF,EAAOxzF,MAAQ,IAAI7hB,GAEhDi1G,EAAM72G,IAAM62G,EAAM72G,IAClB62G,EAAMpyG,IAAMoyG,EAAMpyG,IAClBoyG,EAAM11G,IAAM01G,EAAM11G,IAElBA,EAAM,SAAUwuG,EAAI6H,GAClB,GAAIX,EAAMpyG,IAAIkrG,GAAK,MAAM,IAAIxrC,EAAUizC,GAGvC,OAFAI,EAASC,OAAS9H,EAClBkH,EAAM11G,IAAIwuG,EAAI6H,GACPA,CACT,EACAx3G,EAAM,SAAU2vG,GACd,OAAOkH,EAAM72G,IAAI2vG,IAAO,CAAC,CAC3B,EACAlrG,EAAM,SAAUkrG,GACd,OAAOkH,EAAMpyG,IAAIkrG,EACnB,CACF,KAAO,CACL,IAAI+H,EAAQR,EAAU,SACtBC,EAAWO,IAAS,EACpBv2G,EAAM,SAAUwuG,EAAI6H,GAClB,GAAIjzG,EAAOorG,EAAI+H,GAAQ,MAAM,IAAIvzC,EAAUizC,GAG3C,OAFAI,EAASC,OAAS9H,EAClBwE,EAA4BxE,EAAI+H,EAAOF,GAChCA,CACT,EACAx3G,EAAM,SAAU2vG,GACd,OAAOprG,EAAOorG,EAAI+H,GAAS/H,EAAG+H,GAAS,CAAC,CAC1C,EACAjzG,EAAM,SAAUkrG,GACd,OAAOprG,EAAOorG,EAAI+H,EACpB,CACF,CAEA1pB,EAAOF,QAAU,CACf3sF,IAAKA,EACLnB,IAAKA,EACLyE,IAAKA,EACL4yG,QAASA,EACTC,UAAWA,E,uBCpEb,IAAId,EAAU,EAAQ,MAKtBxoB,EAAOF,QAAUz+F,MAAMC,SAAW,SAAiBkgH,GACjD,MAA6B,UAAtBgH,EAAQhH,EACjB,C,mBCNA,IAAImI,EAAiC,iBAAZ1kH,UAAwBA,SAASi8G,IAK1DlhB,EAAOF,QAAgC,oBAAf6pB,QAA8CjmH,IAAhBimH,EAA4B,SAAUnI,GAC1F,MAA0B,mBAAZA,GAA0BA,IAAamI,CACvD,EAAI,SAAUnI,GACZ,MAA0B,mBAAZA,CAChB,C,uBCVA,IAAIsC,EAAQ,EAAQ,MAChBzC,EAAa,EAAQ,MAErBuI,EAAc,kBAEdtD,EAAW,SAAUuD,EAASC,GAChC,IAAItmH,EAAQ2G,EAAKyjB,EAAUi8F,IAC3B,OAAOrmH,IAAUumH,GACbvmH,IAAUwmH,IACV3I,EAAWyI,GAAahG,EAAMgG,KAC5BA,EACR,EAEIl8F,EAAY04F,EAAS14F,UAAY,SAAUq8F,GAC7C,OAAOjqH,OAAOiqH,GAAQ/mH,QAAQ0mH,EAAa,KAAKziG,aAClD,EAEIhd,EAAOm8G,EAASn8G,KAAO,CAAC,EACxB6/G,EAAS1D,EAAS0D,OAAS,IAC3BD,EAAWzD,EAASyD,SAAW,IAEnC/pB,EAAOF,QAAUwmB,C,mBCnBjBtmB,EAAOF,QAAU,SAAU6hB,GACzB,OAAc,OAAPA,QAAsBj+G,IAAPi+G,CACxB,C,qBCJA,IAAIN,EAAa,EAAQ,MAEzBrhB,EAAOF,QAAU,SAAU6hB,GACzB,MAAoB,iBAANA,EAAwB,OAAPA,EAAcN,EAAWM,EAC1D,C,uBCJA,IAAIv1G,EAAW,EAAQ,IAEvB4zF,EAAOF,QAAU,SAAU0hB,GACzB,OAAOp1G,EAASo1G,IAA0B,OAAbA,CAC/B,C,mBCJAxhB,EAAOF,SAAU,C,sBCAjB,IAAIoqB,EAAa,EAAQ,MACrB7I,EAAa,EAAQ,MACrBO,EAAgB,EAAQ,MACxBuI,EAAoB,EAAQ,MAE5BpH,EAAUl/G,OAEdm8F,EAAOF,QAAUqqB,EAAoB,SAAUxI,GAC7C,MAAoB,iBAANA,CAChB,EAAI,SAAUA,GACZ,IAAIyI,EAAUF,EAAW,UACzB,OAAO7I,EAAW+I,IAAYxI,EAAcwI,EAAQxgH,UAAWm5G,EAAQpB,GACzE,C,sBCZA,IAAIx2G,EAAO,EAAQ,MAEnB60F,EAAOF,QAAU,SAAUuqB,EAAQ9+G,EAAI++G,GACrC,IAEIC,EAAMthH,EAFN8P,EAAWuxG,EAA6BD,EAASA,EAAOtxG,SACxDG,EAAOmxG,EAAOnxG,KAElB,QAASqxG,EAAOp/G,EAAK+N,EAAMH,IAAWI,KAEpC,GADAlQ,EAASsC,EAAGg/G,EAAK/mH,YACFE,IAAXuF,EAAsB,OAAOA,CAErC,C,uBCVA,IAAIkC,EAAO,EAAQ,MACf08G,EAAW,EAAQ,MACnB2C,EAAY,EAAQ,MAExBxqB,EAAOF,QAAU,SAAU/mF,EAAUkoF,EAAMz9F,GACzC,IAAIinH,EAAaC,EACjB7C,EAAS9uG,GACT,IAEE,GADA0xG,EAAcD,EAAUzxG,EAAU,WAC7B0xG,EAAa,CAChB,GAAa,UAATxpB,EAAkB,MAAMz9F,EAC5B,OAAOA,CACT,CACAinH,EAAct/G,EAAKs/G,EAAa1xG,EAClC,CAAE,MAAOzV,GACPonH,GAAa,EACbD,EAAcnnH,CAChB,CACA,GAAa,UAAT29F,EAAkB,MAAMz9F,EAC5B,GAAIknH,EAAY,MAAMD,EAEtB,OADA5C,EAAS4C,GACFjnH,CACT,C,uBCtBA,IAAImnH,EAAW,EAAQ,MAIvB3qB,EAAOF,QAAU,SAAU50F,GACzB,OAAOy/G,EAASz/G,EAAIzL,OACtB,C,sBCNA,IAAIgjH,EAAc,EAAQ,MACtBqB,EAAQ,EAAQ,MAChBzC,EAAa,EAAQ,MACrB9qG,EAAS,EAAQ,MACjB+rG,EAAc,EAAQ,MACtBsI,EAA6B,oBAC7B7B,EAAgB,EAAQ,MACxB8B,EAAsB,EAAQ,MAE9BC,EAAuBD,EAAoBxB,QAC3C0B,EAAmBF,EAAoB74G,IACvC0vG,EAAU1hH,OAEV0hC,EAAiB79B,OAAO69B,eACxBghF,EAAcD,EAAY,GAAG9hG,OAC7Bzd,EAAUu/G,EAAY,GAAGv/G,SACzB5C,EAAOmiH,EAAY,GAAGniH,MAEtB0qH,EAAsB1I,IAAgBwB,GAAM,WAC9C,OAAsF,IAA/EpiF,GAAe,WAA0B,GAAG,SAAU,CAAEl+B,MAAO,IAAK/D,MAC7E,IAEIwrH,EAAWjrH,OAAOA,QAAQ8K,MAAM,UAEhC04G,EAAcxjB,EAAOF,QAAU,SAAUt8F,EAAOV,EAAMsP,GACf,YAArCswG,EAAYhB,EAAQ5+G,GAAO,EAAG,KAChCA,EAAO,IAAMI,EAAQw+G,EAAQ5+G,GAAO,wBAAyB,MAAQ,KAEnEsP,GAAWA,EAAQsJ,SAAQ5Y,EAAO,OAASA,GAC3CsP,GAAWA,EAAQiK,SAAQvZ,EAAO,OAASA,KAC1CyT,EAAO/S,EAAO,SAAYonH,GAA8BpnH,EAAMV,OAASA,KACtEw/G,EAAa5gF,EAAel+B,EAAO,OAAQ,CAAEA,MAAOV,EAAMwiC,cAAc,IACvE9hC,EAAMV,KAAOA,GAEhBkoH,GAAuB54G,GAAWmE,EAAOnE,EAAS,UAAY5O,EAAM/D,SAAW2S,EAAQ84G,OACzFxpF,EAAel+B,EAAO,SAAU,CAAEA,MAAO4O,EAAQ84G,QAEnD,IACM94G,GAAWmE,EAAOnE,EAAS,gBAAkBA,EAAQvP,YACnDy/G,GAAa5gF,EAAel+B,EAAO,YAAa,CAAE0xD,UAAU,IAEvD1xD,EAAMoG,YAAWpG,EAAMoG,eAAYlG,EAChD,CAAE,MAAOJ,GAAqB,CAC9B,IAAImyB,EAAQq1F,EAAqBtnH,GAG/B,OAFG+S,EAAOkf,EAAO,YACjBA,EAAM7xB,OAAStD,EAAK2qH,EAAyB,iBAARnoH,EAAmBA,EAAO,KACxDU,CACX,EAIAyyB,SAASrsB,UAAU8V,SAAW8jG,GAAY,WACxC,OAAOnC,EAAWvgH,OAASiqH,EAAiBjqH,MAAM8C,QAAUmlH,EAAcjoH,KAC5E,GAAG,W,kBCrDH,IAAIqqH,EAAO/zE,KAAK+zE,KACZz8C,EAAQt3B,KAAKs3B,MAKjBsxB,EAAOF,QAAU1oD,KAAKg0E,OAAS,SAAevwD,GAC5C,IAAI9sD,GAAK8sD,EACT,OAAQ9sD,EAAI,EAAI2gE,EAAQy8C,GAAMp9G,EAChC,C,uBCTA,IAAI2R,EAAW,EAAQ,KAEvBsgF,EAAOF,QAAU,SAAU0hB,EAAU6J,GACnC,YAAoB3nH,IAAb89G,EAAyB5iG,UAAUnf,OAAS,EAAI,GAAK4rH,EAAW3rG,EAAS8hG,EAClF,C,uBCJA,IAAIc,EAAc,EAAQ,MACtBgJ,EAAiB,EAAQ,MACzBC,EAA0B,EAAQ,MAClC1D,EAAW,EAAQ,MACnB2D,EAAgB,EAAQ,MAExBjK,EAAaprC,UAEbs1C,EAAkB5nH,OAAO69B,eAEzBgqF,EAA4B7nH,OAAO0+G,yBACnCoJ,EAAa,aACbtE,EAAe,eACfuE,EAAW,WAIf9rB,EAAQnyF,EAAI20G,EAAciJ,EAA0B,SAAwBlJ,EAAGsF,EAAGkE,GAIhF,GAHAhE,EAASxF,GACTsF,EAAI6D,EAAc7D,GAClBE,EAASgE,GACQ,oBAANxJ,GAA0B,cAANsF,GAAqB,UAAWkE,GAAcD,KAAYC,IAAeA,EAAWD,GAAW,CAC5H,IAAIhwF,EAAU8vF,EAA0BrJ,EAAGsF,GACvC/rF,GAAWA,EAAQgwF,KACrBvJ,EAAEsF,GAAKkE,EAAWroH,MAClBqoH,EAAa,CACXvmF,aAAc+hF,KAAgBwE,EAAaA,EAAWxE,GAAgBzrF,EAAQyrF,GAC9EhkF,WAAYsoF,KAAcE,EAAaA,EAAWF,GAAc/vF,EAAQ+vF,GACxEz2D,UAAU,GAGhB,CAAE,OAAOu2D,EAAgBpJ,EAAGsF,EAAGkE,EACjC,EAAIJ,EAAkB,SAAwBpJ,EAAGsF,EAAGkE,GAIlD,GAHAhE,EAASxF,GACTsF,EAAI6D,EAAc7D,GAClBE,EAASgE,GACLP,EAAgB,IAClB,OAAOG,EAAgBpJ,EAAGsF,EAAGkE,EAC/B,CAAE,MAAOvoH,GAAqB,CAC9B,GAAI,QAASuoH,GAAc,QAASA,EAAY,MAAM,IAAItK,EAAW,2BAErE,MADI,UAAWsK,IAAYxJ,EAAEsF,GAAKkE,EAAWroH,OACtC6+G,CACT,C,uBC1CA,IAAIC,EAAc,EAAQ,MACtBn3G,EAAO,EAAQ,MACf2gH,EAA6B,EAAQ,MACrCxI,EAA2B,EAAQ,MACnCxB,EAAkB,EAAQ,MAC1B0J,EAAgB,EAAQ,MACxBj1G,EAAS,EAAQ,MACjB+0G,EAAiB,EAAQ,MAGzBI,EAA4B7nH,OAAO0+G,yBAIvCziB,EAAQnyF,EAAI20G,EAAcoJ,EAA4B,SAAkCrJ,EAAGsF,GAGzF,GAFAtF,EAAIP,EAAgBO,GACpBsF,EAAI6D,EAAc7D,GACd2D,EAAgB,IAClB,OAAOI,EAA0BrJ,EAAGsF,EACtC,CAAE,MAAOrkH,GAAqB,CAC9B,GAAIiT,EAAO8rG,EAAGsF,GAAI,OAAOrE,GAA0Bn4G,EAAK2gH,EAA2Bn+G,EAAG00G,EAAGsF,GAAItF,EAAEsF,GACjG,C,uBCrBA,IAAIoE,EAAqB,EAAQ,MAC7BC,EAAc,EAAQ,MAEtB7C,EAAa6C,EAAYjiG,OAAO,SAAU,aAK9C+1E,EAAQnyF,EAAI9J,OAAOqR,qBAAuB,SAA6BmtG,GACrE,OAAO0J,EAAmB1J,EAAG8G,EAC/B,C,qBCTArpB,EAAQnyF,EAAI9J,OAAOooH,qB,uBCDnB,IAAIxJ,EAAc,EAAQ,MAE1BziB,EAAOF,QAAU2iB,EAAY,CAAC,EAAEb,c,uBCFhC,IAAIa,EAAc,EAAQ,MACtBlsG,EAAS,EAAQ,MACjBurG,EAAkB,EAAQ,MAC1Br+F,EAAU,gBACV0lG,EAAa,EAAQ,KAErBhnH,EAAOsgH,EAAY,GAAGtgH,MAE1B69F,EAAOF,QAAU,SAAUjrF,EAAQq3G,GACjC,IAGI9nH,EAHAi+G,EAAIP,EAAgBjtG,GACpBrV,EAAI,EACJyJ,EAAS,GAEb,IAAK7E,KAAOi+G,GAAI9rG,EAAO4yG,EAAY/kH,IAAQmS,EAAO8rG,EAAGj+G,IAAQjC,EAAK8G,EAAQ7E,GAE1E,MAAO8nH,EAAMzsH,OAASD,EAAO+W,EAAO8rG,EAAGj+G,EAAM8nH,EAAM1sH,SAChDikB,EAAQxa,EAAQ7E,IAAQjC,EAAK8G,EAAQ7E,IAExC,OAAO6E,CACT,C,qBCnBA,IAAIkjH,EAAwB,CAAC,EAAE1D,qBAE3BlG,EAA2B1+G,OAAO0+G,yBAGlC6J,EAAc7J,IAA6B4J,EAAsBhhH,KAAK,CAAE,EAAG,GAAK,GAIpF20F,EAAQnyF,EAAIy+G,EAAc,SAA8B1E,GACtD,IAAI/lF,EAAa4gF,EAAyBzhH,KAAM4mH,GAChD,QAAS/lF,GAAcA,EAAW0B,UACpC,EAAI8oF,C,uBCXJ,IAAIE,EAAsB,EAAQ,MAC9BjgH,EAAW,EAAQ,IACnBkgH,EAAyB,EAAQ,MACjCC,EAAqB,EAAQ,MAMjCvsB,EAAOF,QAAUj8F,OAAO8F,iBAAmB,aAAe,CAAC,EAAI,WAC7D,IAEI0S,EAFAmwG,GAAiB,EACjBlkH,EAAO,CAAC,EAEZ,IACE+T,EAASgwG,EAAoBxoH,OAAO+F,UAAW,YAAa,OAC5DyS,EAAO/T,EAAM,IACbkkH,EAAiBlkH,aAAgBjH,KACnC,CAAE,MAAOiC,GAAqB,CAC9B,OAAO,SAAwB++G,EAAGlqG,GAGhC,OAFAm0G,EAAuBjK,GACvBkK,EAAmBp0G,GACd/L,EAASi2G,IACVmK,EAAgBnwG,EAAOgmG,EAAGlqG,GACzBkqG,EAAExY,UAAY1xF,EACZkqG,GAHkBA,CAI3B,CACF,CAjB+D,QAiBzD3+G,E,uBC3BN,IAAIyH,EAAO,EAAQ,MACfk2G,EAAa,EAAQ,MACrBj1G,EAAW,EAAQ,IAEnBm1G,EAAaprC,UAIjB6pB,EAAOF,QAAU,SAAU3+F,EAAOsrH,GAChC,IAAIlhH,EAAI+S,EACR,GAAa,WAATmuG,GAAqBpL,EAAW91G,EAAKpK,EAAMue,YAActT,EAASkS,EAAMnT,EAAKI,EAAIpK,IAAS,OAAOmd,EACrG,GAAI+iG,EAAW91G,EAAKpK,EAAMurH,WAAatgH,EAASkS,EAAMnT,EAAKI,EAAIpK,IAAS,OAAOmd,EAC/E,GAAa,WAATmuG,GAAqBpL,EAAW91G,EAAKpK,EAAMue,YAActT,EAASkS,EAAMnT,EAAKI,EAAIpK,IAAS,OAAOmd,EACrG,MAAM,IAAIijG,EAAW,0CACvB,C,uBCdA,IAAI2I,EAAa,EAAQ,MACrBzH,EAAc,EAAQ,MACtBkK,EAA4B,EAAQ,MACpCC,EAA8B,EAAQ,MACtC/E,EAAW,EAAQ,MAEnB99F,EAAS04F,EAAY,GAAG14F,QAG5Bi2E,EAAOF,QAAUoqB,EAAW,UAAW,YAAc,SAAiBvI,GACpE,IAAI71G,EAAO6gH,EAA0Bh/G,EAAEk6G,EAASlG,IAC5CsK,EAAwBW,EAA4Bj/G,EACxD,OAAOs+G,EAAwBliG,EAAOje,EAAMmgH,EAAsBtK,IAAO71G,CAC3E,C,uBCbA,IAAI27G,EAAoB,EAAQ,MAE5BlG,EAAaprC,UAIjB6pB,EAAOF,QAAU,SAAU6hB,GACzB,GAAI8F,EAAkB9F,GAAK,MAAM,IAAIJ,EAAW,wBAA0BI,GAC1E,OAAOA,CACT,C,uBCTA,IAAIkL,EAAa,EAAQ,MACrBC,EAAU,EAAQ,MAElB73G,EAAM43G,EAAW53G,IACjBiD,EAAM20G,EAAW30G,IAErB8nF,EAAOF,QAAU,SAAU3sF,GACzB,IAAIlK,EAAS,IAAIgM,EAIjB,OAHA63G,EAAQ35G,GAAK,SAAUwuG,GACrBzpG,EAAIjP,EAAQ04G,EACd,IACO14G,CACT,C,uBCZA,IAAI8jH,EAAO,EAAQ,MACfF,EAAa,EAAQ,MACrBzzF,EAAQ,EAAQ,MAChBlnB,EAAO,EAAQ,MACf86G,EAAe,EAAQ,MACvBC,EAAa,EAAQ,MACrBC,EAAgB,EAAQ,KAExBz2G,EAAMo2G,EAAWp2G,IACjB4Y,EAASw9F,EAAWx9F,OAIxB2wE,EAAOF,QAAU,SAAoBqtB,GACnC,IAAI9K,EAAI0K,EAAKjsH,MACTssH,EAAWJ,EAAaG,GACxBlkH,EAASmwB,EAAMipF,GAOnB,OANInwG,EAAKmwG,IAAM+K,EAASl7G,KAAM+6G,EAAW5K,GAAG,SAAUj/G,GAChDgqH,EAASnhH,SAAS7I,IAAIisB,EAAOpmB,EAAQ7F,EAC3C,IACK8pH,EAAcE,EAAS/E,eAAe,SAAUjlH,GAC/CqT,EAAI4rG,EAAGj/G,IAAIisB,EAAOpmB,EAAQ7F,EAChC,IACO6F,CACT,C,uBCxBA,IAAIw5G,EAAc,EAAQ,MAGtB4K,EAAep4G,IAAIrL,UAEvBo2F,EAAOF,QAAU,CAEf7qF,IAAKA,IACLiD,IAAKuqG,EAAY4K,EAAan1G,KAC9BzB,IAAKgsG,EAAY4K,EAAa52G,KAC9B4Y,OAAQozF,EAAY4K,EAAa,WACjCl1G,MAAOk1G,E,uBCXT,IAAIN,EAAO,EAAQ,MACfF,EAAa,EAAQ,MACrB36G,EAAO,EAAQ,MACf86G,EAAe,EAAQ,MACvBC,EAAa,EAAQ,MACrBC,EAAgB,EAAQ,KAExBj4G,EAAM43G,EAAW53G,IACjBiD,EAAM20G,EAAW30G,IACjBzB,EAAMo2G,EAAWp2G,IAIrBupF,EAAOF,QAAU,SAAsBqtB,GACrC,IAAI9K,EAAI0K,EAAKjsH,MACTssH,EAAWJ,EAAaG,GACxBlkH,EAAS,IAAIgM,EAYjB,OAVI/C,EAAKmwG,GAAK+K,EAASl7G,KACrBg7G,EAAcE,EAAS/E,eAAe,SAAUjlH,GAC1CqT,EAAI4rG,EAAGj/G,IAAI8U,EAAIjP,EAAQ7F,EAC7B,IAEA6pH,EAAW5K,GAAG,SAAUj/G,GAClBgqH,EAASnhH,SAAS7I,IAAI8U,EAAIjP,EAAQ7F,EACxC,IAGK6F,CACT,C,uBC7BA,IAAI8jH,EAAO,EAAQ,MACft2G,EAAM,YACNvE,EAAO,EAAQ,MACf86G,EAAe,EAAQ,MACvBC,EAAa,EAAQ,MACrBC,EAAgB,EAAQ,KACxBI,EAAgB,EAAQ,MAI5BttB,EAAOF,QAAU,SAAwBqtB,GACvC,IAAI9K,EAAI0K,EAAKjsH,MACTssH,EAAWJ,EAAaG,GAC5B,GAAIj7G,EAAKmwG,IAAM+K,EAASl7G,KAAM,OAEjB,IAFwB+6G,EAAW5K,GAAG,SAAUj/G,GAC3D,GAAIgqH,EAASnhH,SAAS7I,GAAI,OAAO,CACnC,IAAG,GACH,IAAI2V,EAAWq0G,EAAS/E,cACxB,OAEO,IAFA6E,EAAcn0G,GAAU,SAAU3V,GACvC,GAAIqT,EAAI4rG,EAAGj/G,GAAI,OAAOkqH,EAAcv0G,EAAU,UAAU,EAC1D,GACF,C,uBCpBA,IAAIg0G,EAAO,EAAQ,MACf76G,EAAO,EAAQ,MACf46G,EAAU,EAAQ,MAClBE,EAAe,EAAQ,MAI3BhtB,EAAOF,QAAU,SAAoBqtB,GACnC,IAAI9K,EAAI0K,EAAKjsH,MACTssH,EAAWJ,EAAaG,GAC5B,QAAIj7G,EAAKmwG,GAAK+K,EAASl7G,QAGV,IAFN46G,EAAQzK,GAAG,SAAUj/G,GAC1B,IAAKgqH,EAASnhH,SAAS7I,GAAI,OAAO,CACpC,IAAG,EACL,C,uBCdA,IAAI2pH,EAAO,EAAQ,MACft2G,EAAM,YACNvE,EAAO,EAAQ,MACf86G,EAAe,EAAQ,MACvBE,EAAgB,EAAQ,KACxBI,EAAgB,EAAQ,MAI5BttB,EAAOF,QAAU,SAAsBqtB,GACrC,IAAI9K,EAAI0K,EAAKjsH,MACTssH,EAAWJ,EAAaG,GAC5B,GAAIj7G,EAAKmwG,GAAK+K,EAASl7G,KAAM,OAAO,EACpC,IAAI6G,EAAWq0G,EAAS/E,cACxB,OAEO,IAFA6E,EAAcn0G,GAAU,SAAU3V,GACvC,IAAKqT,EAAI4rG,EAAGj/G,GAAI,OAAOkqH,EAAcv0G,EAAU,UAAU,EAC3D,GACF,C,uBCjBA,IAAI0pG,EAAc,EAAQ,MACtByK,EAAgB,EAAQ,KACxBL,EAAa,EAAQ,MAErB53G,EAAM43G,EAAW53G,IACjBo4G,EAAeR,EAAW10G,MAC1BzL,EAAU+1G,EAAY4K,EAAa3gH,SACnCZ,EAAO22G,EAAY4K,EAAavhH,MAChCoN,EAAOpN,EAAK,IAAImJ,GAAOiE,KAE3B8mF,EAAOF,QAAU,SAAU3sF,EAAK5H,EAAIgiH,GAClC,OAAOA,EAAgBL,EAAc,CAAEn0G,SAAUjN,EAAKqH,GAAM+F,KAAMA,GAAQ3N,GAAMmB,EAAQyG,EAAK5H,EAC/F,C,uBCZA,IAAI2+G,EAAa,EAAQ,MAErBsD,EAAgB,SAAUt7G,GAC5B,MAAO,CACLA,KAAMA,EACNuE,IAAK,WACH,OAAO,CACT,EACA3K,KAAM,WACJ,MAAO,CACLoN,KAAM,WACJ,MAAO,CAAEC,MAAM,EACjB,EAEJ,EAEJ,EAEA6mF,EAAOF,QAAU,SAAUh9F,GACzB,IAAImS,EAAMi1G,EAAW,OACrB,KACE,IAAIj1G,GAAMnS,GAAM0qH,EAAc,IAC9B,IAIE,OADA,IAAIv4G,GAAMnS,GAAM0qH,GAAe,KACxB,CACT,CAAE,MAAOC,GACP,OAAO,CACT,CACF,CAAE,MAAOnqH,GACP,OAAO,CACT,CACF,C,uBCjCA,IAAI+oH,EAAsB,EAAQ,MAC9BQ,EAAa,EAAQ,MAEzB7sB,EAAOF,QAAUusB,EAAoBQ,EAAW10G,MAAO,OAAQ,QAAU,SAAUhF,GACjF,OAAOA,EAAIjB,IACb,C,uBCLA,IAAI66G,EAAO,EAAQ,MACfF,EAAa,EAAQ,MACrBzzF,EAAQ,EAAQ,MAChB4zF,EAAe,EAAQ,MACvBE,EAAgB,EAAQ,KAExBh1G,EAAM20G,EAAW30G,IACjBzB,EAAMo2G,EAAWp2G,IACjB4Y,EAASw9F,EAAWx9F,OAIxB2wE,EAAOF,QAAU,SAA6BqtB,GAC5C,IAAI9K,EAAI0K,EAAKjsH,MACT4sH,EAAWV,EAAaG,GAAO9E,cAC/Bp/G,EAASmwB,EAAMipF,GAKnB,OAJA6K,EAAcQ,GAAU,SAAUtqH,GAC5BqT,EAAI4rG,EAAGj/G,GAAIisB,EAAOpmB,EAAQ7F,GACzB8U,EAAIjP,EAAQ7F,EACnB,IACO6F,CACT,C,uBCrBA,IAAI8jH,EAAO,EAAQ,MACf70G,EAAM,YACNkhB,EAAQ,EAAQ,MAChB4zF,EAAe,EAAQ,MACvBE,EAAgB,EAAQ,KAI5BltB,EAAOF,QAAU,SAAeqtB,GAC9B,IAAI9K,EAAI0K,EAAKjsH,MACT4sH,EAAWV,EAAaG,GAAO9E,cAC/Bp/G,EAASmwB,EAAMipF,GAInB,OAHA6K,EAAcQ,GAAU,SAAU/L,GAChCzpG,EAAIjP,EAAQ04G,EACd,IACO14G,CACT,C,uBChBA,IAAIggH,EAAS,EAAQ,MACjBjiH,EAAM,EAAQ,MAEd8E,EAAOm9G,EAAO,QAElBjpB,EAAOF,QAAU,SAAU17F,GACzB,OAAO0H,EAAK1H,KAAS0H,EAAK1H,GAAO4C,EAAI5C,GACvC,C,uBCPA,IAAIupH,EAAU,EAAQ,MAClBp4D,EAAa,EAAQ,MACrBkuD,EAAuB,EAAQ,MAE/BmK,EAAS,qBACT/E,EAAQ7oB,EAAOF,QAAUvqC,EAAWq4D,IAAWnK,EAAqBmK,EAAQ,CAAC,IAEhF/E,EAAMlD,WAAakD,EAAMlD,SAAW,KAAKxjH,KAAK,CAC7CimC,QAAS,SACTnY,KAAM09F,EAAU,OAAS,SACzBE,UAAW,4CACXC,QAAS,2DACTlqH,OAAQ,uC,uBCZV,IAAIilH,EAAQ,EAAQ,MAEpB7oB,EAAOF,QAAU,SAAU17F,EAAKZ,GAC9B,OAAOqlH,EAAMzkH,KAASykH,EAAMzkH,GAAOZ,GAAS,CAAC,EAC/C,C,uBCHA,IAAIuqH,EAAa,EAAQ,MACrBjK,EAAQ,EAAQ,MAChBt/G,EAAS,EAAQ,MAEjBk9G,EAAUl9G,EAAOxE,OAGrBggG,EAAOF,UAAYj8F,OAAOooH,wBAA0BnI,GAAM,WACxD,IAAIkK,EAASl6G,OAAO,oBAKpB,OAAQ4tG,EAAQsM,MAAanqH,OAAOmqH,aAAmBl6G,UAEpDA,OAAOkzG,MAAQ+G,GAAcA,EAAa,EAC/C,G,uBCjBA,IAAIjG,EAAsB,EAAQ,MAE9BrsF,EAAM2b,KAAK3b,IACX4b,EAAMD,KAAKC,IAKf2oD,EAAOF,QAAU,SAAUzwF,EAAO5P,GAChC,IAAIwuH,EAAUnG,EAAoBz4G,GAClC,OAAO4+G,EAAU,EAAIxyF,EAAIwyF,EAAUxuH,EAAQ,GAAK43C,EAAI42E,EAASxuH,EAC/D,C,uBCVA,IAAIyuH,EAAgB,EAAQ,MACxB5B,EAAyB,EAAQ,MAErCtsB,EAAOF,QAAU,SAAU6hB,GACzB,OAAOuM,EAAc5B,EAAuB3K,GAC9C,C,uBCNA,IAAIyJ,EAAQ,EAAQ,KAIpBprB,EAAOF,QAAU,SAAU0hB,GACzB,IAAI/7F,GAAU+7F,EAEd,OAAO/7F,IAAWA,GAAqB,IAAXA,EAAe,EAAI2lG,EAAM3lG,EACvD,C,uBCRA,IAAIqiG,EAAsB,EAAQ,MAE9BzwE,EAAMD,KAAKC,IAIf2oD,EAAOF,QAAU,SAAU0hB,GACzB,IAAI3nE,EAAMiuE,EAAoBtG,GAC9B,OAAO3nE,EAAM,EAAIxC,EAAIwC,EAAK,kBAAoB,CAChD,C,uBCTA,IAAIyyE,EAAyB,EAAQ,MAEjCvJ,EAAUl/G,OAIdm8F,EAAOF,QAAU,SAAU0hB,GACzB,OAAOuB,EAAQuJ,EAAuB9K,GACxC,C,uBCRA,IAAIr2G,EAAO,EAAQ,MACfiB,EAAW,EAAQ,IACnBqI,EAAW,EAAQ,KACnB+1G,EAAY,EAAQ,MACpB2D,EAAsB,EAAQ,MAC9BtL,EAAkB,EAAQ,MAE1BtB,EAAaprC,UACbi4C,EAAevL,EAAgB,eAInC7iB,EAAOF,QAAU,SAAU3+F,EAAOsrH,GAChC,IAAKrgH,EAASjL,IAAUsT,EAAStT,GAAQ,OAAOA,EAChD,IACI8H,EADAolH,EAAe7D,EAAUrpH,EAAOitH,GAEpC,GAAIC,EAAc,CAGhB,QAFa3qH,IAAT+oH,IAAoBA,EAAO,WAC/BxjH,EAASkC,EAAKkjH,EAAcltH,EAAOsrH,IAC9BrgH,EAASnD,IAAWwL,EAASxL,GAAS,OAAOA,EAClD,MAAM,IAAIs4G,EAAW,0CACvB,CAEA,YADa79G,IAAT+oH,IAAoBA,EAAO,UACxB0B,EAAoBhtH,EAAOsrH,EACpC,C,uBCxBA,IAAI6B,EAAc,EAAQ,MACtB75G,EAAW,EAAQ,KAIvBurF,EAAOF,QAAU,SAAU0hB,GACzB,IAAIp9G,EAAMkqH,EAAY9M,EAAU,UAChC,OAAO/sG,EAASrQ,GAAOA,EAAMA,EAAM,EACrC,C,uBCRA,IAAIy+G,EAAkB,EAAQ,MAE1BC,EAAgBD,EAAgB,eAChCv6G,EAAO,CAAC,EAEZA,EAAKw6G,GAAiB,IAEtB9iB,EAAOF,QAA2B,eAAjB9/F,OAAOsI,E,sBCPxB,IAAIkgH,EAAU,EAAQ,MAElB9G,EAAU1hH,OAEdggG,EAAOF,QAAU,SAAU0hB,GACzB,GAA0B,WAAtBgH,EAAQhH,GAAwB,MAAM,IAAIrrC,UAAU,6CACxD,OAAOurC,EAAQF,EACjB,C,mBCPA,IAAIE,EAAU1hH,OAEdggG,EAAOF,QAAU,SAAU0hB,GACzB,IACE,OAAOE,EAAQF,EACjB,CAAE,MAAOl+G,GACP,MAAO,QACT,CACF,C,uBCRA,IAAIm/G,EAAc,EAAQ,MAEtB9/F,EAAK,EACLpC,EAAU62B,KAAKu3B,SACfjvD,EAAW+iG,EAAY,GAAI/iG,UAE/BsgF,EAAOF,QAAU,SAAU17F,GACzB,MAAO,gBAAqBV,IAARU,EAAoB,GAAKA,GAAO,KAAOsb,IAAWiD,EAAKpC,EAAS,GACtF,C,uBCPA,IAAIguG,EAAgB,EAAQ,MAE5BvuB,EAAOF,QAAUyuB,IACXz6G,OAAOkzG,MACkB,iBAAnBlzG,OAAOiF,Q,uBCLnB,IAAIupG,EAAc,EAAQ,MACtBwB,EAAQ,EAAQ,MAIpB9jB,EAAOF,QAAUwiB,GAAewB,GAAM,WAEpC,OAGiB,KAHVjgH,OAAO69B,gBAAe,WAA0B,GAAG,YAAa,CACrEl+B,MAAO,GACP0xD,UAAU,IACTtrD,SACL,G,mBCXA,IAAI23G,EAAaprC,UAEjB6pB,EAAOF,QAAU,SAAUgQ,EAAQ0e,GACjC,GAAI1e,EAAS0e,EAAU,MAAM,IAAIjN,EAAW,wBAC5C,OAAOzR,CACT,C,uBCLA,IAAItrG,EAAS,EAAQ,MACjB68G,EAAa,EAAQ,MAErBztG,EAAUpP,EAAOoP,QAErBosF,EAAOF,QAAUuhB,EAAWztG,IAAY,cAActL,KAAKtI,OAAO4T,G,uBCLlE,IAAIpP,EAAS,EAAQ,MACjBykH,EAAS,EAAQ,MACjB1yG,EAAS,EAAQ,MACjBvP,EAAM,EAAQ,MACdunH,EAAgB,EAAQ,MACxBpE,EAAoB,EAAQ,MAE5Br2G,EAAStP,EAAOsP,OAChB26G,EAAwBxF,EAAO,OAC/ByF,EAAwBvE,EAAoBr2G,EAAO,QAAUA,EAASA,GAAUA,EAAO66G,eAAiB3nH,EAE5Gg5F,EAAOF,QAAU,SAAUh9F,GAKvB,OAJGyT,EAAOk4G,EAAuB3rH,KACjC2rH,EAAsB3rH,GAAQyrH,GAAiBh4G,EAAOzC,EAAQhR,GAC1DgR,EAAOhR,GACP4rH,EAAsB,UAAY5rH,IAC/B2rH,EAAsB3rH,EACjC,C,uBCjBA,IAAIk9B,EAAI,EAAQ,MACZuoF,EAAW,EAAQ,MACnBvG,EAAoB,EAAQ,MAC5B4M,EAAiB,EAAQ,MACzBC,EAA2B,EAAQ,MACnC/K,EAAQ,EAAQ,MAEhBgL,EAAsBhL,GAAM,WAC9B,OAAoD,aAA7C,GAAG3hH,KAAKgJ,KAAK,CAAE1L,OAAQ,YAAe,EAC/C,IAIIsvH,EAAiC,WACnC,IAEElrH,OAAO69B,eAAe,GAAI,SAAU,CAAEwzB,UAAU,IAAS/yD,MAC3D,CAAE,MAAOmB,GACP,OAAOA,aAAiB6yE,SAC1B,CACF,EAEIowC,EAASuI,IAAwBC,IAIrC/uF,EAAE,CAAEr8B,OAAQ,QAASwU,OAAO,EAAM+yG,MAAO,EAAGnE,OAAQR,GAAU,CAE5DpkH,KAAM,SAAc28B,GAClB,IAAIujF,EAAIkG,EAASznH,MACb+4C,EAAMmoE,EAAkBK,GACxB2M,EAAWpwG,UAAUnf,OACzBovH,EAAyBh1E,EAAMm1E,GAC/B,IAAK,IAAIxvH,EAAI,EAAGA,EAAIwvH,EAAUxvH,IAC5B6iH,EAAExoE,GAAOj7B,UAAUpf,GACnBq6C,IAGF,OADA+0E,EAAevM,EAAGxoE,GACXA,CACT,G,uBCvCF,IAAI7Z,EAAI,EAAQ,MACZivF,EAAa,EAAQ,MACrBC,EAAyB,EAAQ,MAIrClvF,EAAE,CAAEr8B,OAAQ,MAAOwU,OAAO,EAAMg3G,MAAM,EAAMpI,QAASmI,EAAuB,eAAiB,CAC3FD,WAAYA,G,uBCPd,IAAIjvF,EAAI,EAAQ,MACZ8jF,EAAQ,EAAQ,MAChBsL,EAAe,EAAQ,MACvBF,EAAyB,EAAQ,MAEjCG,GAAaH,EAAuB,iBAAmBpL,GAAM,WAE/D,MAAgF,QAAzE9jH,OAAOqB,MAAMw9B,KAAK,IAAI5pB,IAAI,CAAC,EAAG,EAAG,IAAIm6G,aAAa,IAAIn6G,IAAI,CAAC,EAAG,MACvE,IAIA+qB,EAAE,CAAEr8B,OAAQ,MAAOwU,OAAO,EAAMg3G,MAAM,EAAMpI,OAAQsI,GAAa,CAC/DD,aAAcA,G,uBCbhB,IAAIpvF,EAAI,EAAQ,MACZsvF,EAAiB,EAAQ,MACzBJ,EAAyB,EAAQ,MAIrClvF,EAAE,CAAEr8B,OAAQ,MAAOwU,OAAO,EAAMg3G,MAAM,EAAMpI,QAASmI,EAAuB,mBAAqB,CAC/FI,eAAgBA,G,uBCPlB,IAAItvF,EAAI,EAAQ,MACZuvF,EAAa,EAAQ,MACrBL,EAAyB,EAAQ,MAIrClvF,EAAE,CAAEr8B,OAAQ,MAAOwU,OAAO,EAAMg3G,MAAM,EAAMpI,QAASmI,EAAuB,eAAiB,CAC3FK,WAAYA,G,uBCPd,IAAIvvF,EAAI,EAAQ,MACZwvF,EAAe,EAAQ,MACvBN,EAAyB,EAAQ,MAIrClvF,EAAE,CAAEr8B,OAAQ,MAAOwU,OAAO,EAAMg3G,MAAM,EAAMpI,QAASmI,EAAuB,iBAAmB,CAC7FM,aAAcA,G,uBCPhB,IAAIxvF,EAAI,EAAQ,MACZyvF,EAAsB,EAAQ,MAC9BP,EAAyB,EAAQ,MAIrClvF,EAAE,CAAEr8B,OAAQ,MAAOwU,OAAO,EAAMg3G,MAAM,EAAMpI,QAASmI,EAAuB,wBAA0B,CACpGO,oBAAqBA,G,uBCPvB,IAAIzvF,EAAI,EAAQ,MACZ0vF,EAAQ,EAAQ,MAChBR,EAAyB,EAAQ,MAIrClvF,EAAE,CAAEr8B,OAAQ,MAAOwU,OAAO,EAAMg3G,MAAM,EAAMpI,QAASmI,EAAuB,UAAY,CACtFQ,MAAOA,G,uBCNT,EAAQ,K,uBCAR,EAAQ,K,uBCAR,EAAQ,K,uBCAR,EAAQ,K,uBCAR,EAAQ,K,uBCAR,EAAQ,K,uBCAR,EAAQ,K,uBCDR,IAAI1vF,EAAI,EAAQ,MACZx7B,EAAS,EAAQ,MACjB0lH,EAAa,EAAQ,MACrB5G,EAA2B,EAAQ,MACnC5hF,EAAiB,UACjBnrB,EAAS,EAAQ,MACjBo5G,EAAa,EAAQ,KACrBC,EAAoB,EAAQ,MAC5BC,EAA0B,EAAQ,MAClCC,EAAwB,EAAQ,MAChCC,EAAkB,EAAQ,MAC1BzN,EAAc,EAAQ,MACtBqL,EAAU,EAAQ,MAElBqC,EAAgB,eAChB7wH,EAAQ+qH,EAAW,SACnB+F,EAAqB/F,EAAW8F,GAEhCE,EAAgB,WAClBP,EAAW7uH,KAAMqvH,GACjB,IAAIC,EAAkBxxG,UAAUnf,OAC5BR,EAAU4wH,EAAwBO,EAAkB,OAAI1sH,EAAYkb,UAAU,IAC9E9b,EAAO+sH,EAAwBO,EAAkB,OAAI1sH,EAAYkb,UAAU,GAAI,SAC/EyxG,EAAO,IAAIJ,EAAmBhxH,EAAS6D,GACvCQ,EAAQ,IAAInE,EAAMF,GAItB,OAHAqE,EAAMR,KAAOktH,EACbtuF,EAAe2uF,EAAM,QAAS/M,EAAyB,EAAGyM,EAAgBzsH,EAAMyb,MAAO,KACvF6wG,EAAkBS,EAAMvvH,KAAMovH,GACvBG,CACT,EAEIF,EAAwBD,EAActmH,UAAYqmH,EAAmBrmH,UAErE0mH,EAAkB,UAAW,IAAInxH,EAAM6wH,GACvCO,EAA0B,UAAW,IAAIN,EAAmB,EAAG,GAG/DtuF,EAAasuF,GAAsB3N,GAAez+G,OAAO0+G,yBAAyB/9G,EAAQwrH,GAI1FQ,IAAqB7uF,KAAgBA,EAAWuzB,UAAYvzB,EAAW2D,cAEvEmrF,EAAqBH,IAAoBE,IAAqBD,EAIlEvwF,EAAE,CAAEx7B,QAAQ,EAAM3B,aAAa,EAAMkkH,OAAQ4G,GAAW8C,GAAsB,CAC5EC,aAAcD,EAAqBP,EAAgBD,IAGrD,IAAIU,EAAyBzG,EAAW8F,GACpCY,EAAkCD,EAAuB/mH,UAE7D,GAAIgnH,EAAgC/tH,cAAgB8tH,EAKlD,IAAK,IAAIvsH,KAJJupH,GACHjsF,EAAekvF,EAAiC,cAAetN,EAAyB,EAAGqN,IAG7Eb,EAAuB,GAAIv5G,EAAOu5G,EAAuB1rH,GAAM,CAC7E,IAAIysH,EAAWf,EAAsB1rH,GACjC0sH,EAAeD,EAASr/F,EACvBjb,EAAOo6G,EAAwBG,IAClCpvF,EAAeivF,EAAwBG,EAAcxN,EAAyB,EAAGuN,EAASnxH,GAE9F,C,uBCjEF,IAAI0mH,EAAgB,EAAQ,MACxB3D,EAAc,EAAQ,MACtB/iG,EAAW,EAAQ,KACnBqxG,EAA0B,EAAQ,MAElCC,EAAmBroB,gBACnBsoB,EAA2BD,EAAiBpnH,UAC5Cg/E,EAAS65B,EAAYwO,EAAyBroC,QAC9CsoC,EAAUzO,EAAYwO,EAAyB,WAC/CvkH,EAAU+1G,EAAYwO,EAAyBvkH,SAC/CvK,EAAOsgH,EAAY,GAAGtgH,MACtBqK,EAAS,IAAIwkH,EAAiB,eAElCxkH,EAAO,UAAU,IAAK,GAGtBA,EAAO,UAAU,SAAK9I,GAElB8I,EAAS,KAAO,OAClB45G,EAAc6K,EAA0B,UAAU,SAAUnuH,GAC1D,IAAIrD,EAASmf,UAAUnf,OACnB0xH,EAAS1xH,EAAS,OAAIiE,EAAYkb,UAAU,GAChD,GAAInf,QAAqBiE,IAAXytH,EAAsB,OAAOD,EAAQpwH,KAAMgC,GACzD,IAAI2J,EAAU,GACdC,EAAQ5L,MAAM,SAAUwQ,EAAGtF,GACzB7J,EAAKsK,EAAS,CAAErI,IAAK4H,EAAGxI,MAAO8N,GACjC,IACAy/G,EAAwBtxH,EAAQ,GAChC,IAMI4gB,EANAjc,EAAMsb,EAAS5c,GACfU,EAAQkc,EAASyxG,GACjB9hH,EAAQ,EACR+hH,EAAS,EACTzgE,GAAQ,EACR0gE,EAAgB5kH,EAAQhN,OAE5B,MAAO4P,EAAQgiH,EACbhxG,EAAQ5T,EAAQ4C,KACZshD,GAAStwC,EAAMjc,MAAQA,GACzBusD,GAAQ,EACRugE,EAAQpwH,KAAMuf,EAAMjc,MACfgtH,IAET,MAAOA,EAASC,EACdhxG,EAAQ5T,EAAQ2kH,KACV/wG,EAAMjc,MAAQA,GAAOic,EAAM7c,QAAUA,GAAQolF,EAAO9nF,KAAMuf,EAAMjc,IAAKic,EAAM7c,MAErF,GAAG,CAAE6/B,YAAY,EAAMsgF,QAAQ,G,uBC9CjC,IAAIyC,EAAgB,EAAQ,MACxB3D,EAAc,EAAQ,MACtB/iG,EAAW,EAAQ,KACnBqxG,EAA0B,EAAQ,MAElCC,EAAmBroB,gBACnBsoB,EAA2BD,EAAiBpnH,UAC5C0nH,EAAS7O,EAAYwO,EAAyBK,QAC9CC,EAAO9O,EAAYwO,EAAyBx6G,KAC5CjK,EAAS,IAAIwkH,EAAiB,QAI9BxkH,EAAOiK,IAAI,IAAK,IAAOjK,EAAOiK,IAAI,SAAK/S,IACzC0iH,EAAc6K,EAA0B,OAAO,SAAanuH,GAC1D,IAAIrD,EAASmf,UAAUnf,OACnB0xH,EAAS1xH,EAAS,OAAIiE,EAAYkb,UAAU,GAChD,GAAInf,QAAqBiE,IAAXytH,EAAsB,OAAOI,EAAKzwH,KAAMgC,GACtD,IAAIuR,EAASi9G,EAAOxwH,KAAMgC,GAC1BiuH,EAAwBtxH,EAAQ,GAChC,IAAI+D,EAAQkc,EAASyxG,GACjB9hH,EAAQ,EACZ,MAAOA,EAAQgF,EAAO5U,OACpB,GAAI4U,EAAOhF,OAAa7L,EAAO,OAAO,EACtC,OAAO,CACX,GAAG,CAAE6/B,YAAY,EAAMsgF,QAAQ,G,uBCzBjC,IAAIrB,EAAc,EAAQ,MACtBG,EAAc,EAAQ,MACtB+O,EAAwB,EAAQ,MAEhCP,EAA2BtoB,gBAAgB/+F,UAC3C8C,EAAU+1G,EAAYwO,EAAyBvkH,SAI/C41G,KAAiB,SAAU2O,IAC7BO,EAAsBP,EAA0B,OAAQ,CACtDj/G,IAAK,WACH,IAAIy/G,EAAQ,EAEZ,OADA/kH,EAAQ5L,MAAM,WAAc2wH,GAAS,IAC9BA,CACT,EACAnsF,cAAc,EACdjC,YAAY,G;;;;;;ACXhB,IAAIquF,EAAM,EAAQ,MAElB,MAAM3oB,EAAgC,qBAAb9jG,SAEzB,SAAS0sH,EAAWzmH,GAChB,OAAOA,EAAI2vB,YAA0C,WAA5B3vB,EAAI4I,OAAOgnB,YACxC,CACA,MAAMrzB,EAAS5D,OAAO4D,OACtB,SAASmqH,EAAcrmH,EAAIiB,GACvB,MAAMqlH,EAAY,CAAC,EACnB,IAAK,MAAMztH,KAAOoI,EAAQ,CACtB,MAAMhJ,EAAQgJ,EAAOpI,GACrBytH,EAAUztH,GAAO9C,EAAQkC,GACnBA,EAAM8H,IAAIC,GACVA,EAAG/H,EACb,CACA,OAAOquH,CACX,CACA,MAAM9hD,EAAO,OAKPzuE,EAAUD,MAAMC,QAqBhBwwH,EAAU,KACVC,EAAe,KACfC,EAAW,MACXC,EAAW,KACXC,EAAQ,MACRC,EAAU,MAeVC,EAAsB,OACtBC,EAAuB,OACvBC,EAAe,OACfC,EAAkB,OAClBC,EAAoB,OACpBC,EAAc,OACdC,EAAqB,OACrBC,EAAe,OASrB,SAASC,EAAar1E,GAClB,OAAOs1E,UAAU,GAAKt1E,GACjBr6C,QAAQuvH,EAAa,KACrBvvH,QAAQkvH,EAAqB,KAC7BlvH,QAAQmvH,EAAsB,IACvC,CAOA,SAASS,EAAWv1E,GAChB,OAAOq1E,EAAar1E,GACfr6C,QAAQsvH,EAAmB,KAC3BtvH,QAAQwvH,EAAoB,KAC5BxvH,QAAQovH,EAAc,IAC/B,CAQA,SAASS,EAAiBx1E,GACtB,OAAQq1E,EAAar1E,GAEhBr6C,QAAQivH,EAAS,OACjBjvH,QAAQyvH,EAAc,KACtBzvH,QAAQ4uH,EAAS,OACjB5uH,QAAQ6uH,EAAc,OACtB7uH,QAAQqvH,EAAiB,KACzBrvH,QAAQsvH,EAAmB,KAC3BtvH,QAAQwvH,EAAoB,KAC5BxvH,QAAQovH,EAAc,IAC/B,CAMA,SAASU,EAAez1E,GACpB,OAAOw1E,EAAiBx1E,GAAMr6C,QAAQ+uH,EAAU,MACpD,CAOA,SAASgB,EAAW11E,GAChB,OAAOq1E,EAAar1E,GAAMr6C,QAAQ4uH,EAAS,OAAO5uH,QAAQgvH,EAAO,MACrE,CAUA,SAASgB,EAAY31E,GACjB,OAAe,MAARA,EAAe,GAAK01E,EAAW11E,GAAMr6C,QAAQ8uH,EAAU,MAClE,CAQA,SAASrnH,EAAO4yC,GACZ,IACI,OAAOu3B,mBAAmB,GAAKv3B,EACnC,CACA,MAAOt8B,GACP,CACA,MAAO,GAAKs8B,CAChB,CAEA,MAAM41E,EAAoB,MACpBC,EAAuB/+F,GAASA,EAAKnxB,QAAQiwH,EAAmB,IAUtE,SAASE,EAASC,EAAY7pB,EAAU8pB,EAAkB,KACtD,IAAIl/F,EAAMm/F,EAAQ,CAAC,EAAGhxB,EAAe,GAAIthC,EAAO,GAGhD,MAAMuyD,EAAUhqB,EAAShmF,QAAQ,KACjC,IAAIiwG,EAAYjqB,EAAShmF,QAAQ,KAkBjC,OAhBIgwG,EAAUC,GAAaD,GAAW,IAClCC,GAAa,GAEbA,GAAa,IACbr/F,EAAOo1E,EAAS9oF,MAAM,EAAG+yG,GACzBlxB,EAAeiH,EAAS9oF,MAAM+yG,EAAY,EAAGD,GAAW,EAAIA,EAAUhqB,EAAShqG,QAC/E+zH,EAAQF,EAAW9wB,IAEnBixB,GAAW,IACXp/F,EAAOA,GAAQo1E,EAAS9oF,MAAM,EAAG8yG,GAEjCvyD,EAAOuoC,EAAS9oF,MAAM8yG,EAAShqB,EAAShqG,SAG5C40B,EAAOs/F,EAA4B,MAARt/F,EAAeA,EAAOo1E,EAAU8pB,GAEpD,CACHvX,SAAU3nF,GAAQmuE,GAAgB,KAAOA,EAAethC,EACxD7sC,OACAm/F,QACAtyD,KAAMv2D,EAAOu2D,GAErB,CAOA,SAAS0yD,EAAaC,EAAgBpqB,GAClC,MAAM+pB,EAAQ/pB,EAAS+pB,MAAQK,EAAepqB,EAAS+pB,OAAS,GAChE,OAAO/pB,EAASp1E,MAAQm/F,GAAS,KAAOA,GAAS/pB,EAASvoC,MAAQ,GACtE,CAOA,SAAS4yD,EAAUtiB,EAAU1rE,GAEzB,OAAKA,GAAS0rE,EAASrqF,cAAc7B,WAAWwgB,EAAK3e,eAE9CqqF,EAAS7wF,MAAMmlB,EAAKrmC,SAAW,IAD3B+xG,CAEf,CAUA,SAASuiB,EAAoBF,EAAgBloH,EAAGC,GAC5C,MAAMooH,EAAaroH,EAAEy1D,QAAQ3hE,OAAS,EAChCw0H,EAAaroH,EAAEw1D,QAAQ3hE,OAAS,EACtC,OAAQu0H,GAAc,GAClBA,IAAeC,GACfC,EAAkBvoH,EAAEy1D,QAAQ4yD,GAAapoH,EAAEw1D,QAAQ6yD,KACnDE,EAA0BxoH,EAAEa,OAAQZ,EAAEY,SACtCqnH,EAAeloH,EAAE6nH,SAAWK,EAAejoH,EAAE4nH,QAC7C7nH,EAAEu1D,OAASt1D,EAAEs1D,IACrB,CAQA,SAASgzD,EAAkBvoH,EAAGC,GAI1B,OAAQD,EAAEyoH,SAAWzoH,MAAQC,EAAEwoH,SAAWxoH,EAC9C,CACA,SAASuoH,EAA0BxoH,EAAGC,GAClC,GAAI/H,OAAOiI,KAAKH,GAAGlM,SAAWoE,OAAOiI,KAAKF,GAAGnM,OACzC,OAAO,EACX,IAAK,MAAM2E,KAAOuH,EACd,IAAK0oH,EAA+B1oH,EAAEvH,GAAMwH,EAAExH,IAC1C,OAAO,EAEf,OAAO,CACX,CACA,SAASiwH,EAA+B1oH,EAAGC,GACvC,OAAOtK,EAAQqK,GACT2oH,EAAkB3oH,EAAGC,GACrBtK,EAAQsK,GACJ0oH,EAAkB1oH,EAAGD,GACrBA,IAAMC,CACpB,CAQA,SAAS0oH,EAAkB3oH,EAAGC,GAC1B,OAAOtK,EAAQsK,GACTD,EAAElM,SAAWmM,EAAEnM,QAAUkM,EAAE8sB,OAAM,CAACj1B,EAAOhE,IAAMgE,IAAUoI,EAAEpM,KAC9C,IAAbmM,EAAElM,QAAgBkM,EAAE,KAAOC,CACrC,CAOA,SAAS+nH,EAAoBttF,EAAIxH,GAC7B,GAAIwH,EAAG/gB,WAAW,KACd,OAAO+gB,EACX,IAAKA,EACD,OAAOxH,EACX,MAAM01F,EAAe11F,EAAK/zB,MAAM,KAC1B0pH,EAAanuF,EAAGv7B,MAAM,KACtB2pH,EAAgBD,EAAWA,EAAW/0H,OAAS,GAG/B,OAAlBg1H,GAA4C,MAAlBA,GAC1BD,EAAWryH,KAAK,IAEpB,IACIuyH,EACAC,EAFAz7D,EAAWq7D,EAAa90H,OAAS,EAGrC,IAAKi1H,EAAa,EAAGA,EAAaF,EAAW/0H,OAAQi1H,IAGjD,GAFAC,EAAUH,EAAWE,GAEL,MAAZC,EAAJ,CAGA,GAAgB,OAAZA,EAQA,MANIz7D,EAAW,GACXA,GALI,CAYhB,OAAQq7D,EAAa5zG,MAAM,EAAGu4C,GAAU54D,KAAK,KACzC,IACAk0H,EAAW7zG,MAAM+zG,GAAYp0H,KAAK,IAC1C,CAEA,IAAIs0H,EAKAC,GAJJ,SAAWD,GACPA,EAAe,OAAS,MACxBA,EAAe,QAAU,MAC5B,EAHD,CAGGA,IAAmBA,EAAiB,CAAC,IAExC,SAAWC,GACPA,EAAoB,QAAU,OAC9BA,EAAoB,WAAa,UACjCA,EAAoB,WAAa,EACpC,CAJD,CAIGA,IAAwBA,EAAsB,CAAC,IAIlD,MAAMC,EAAQ,GAQd,SAASC,EAAcjvF,GACnB,IAAKA,EACD,GAAIijE,EAAW,CAEX,MAAMisB,EAAS/vH,SAAS01C,cAAc,QACtC7U,EAAQkvF,GAAUA,EAAOlkF,aAAa,SAAY,IAElDhL,EAAOA,EAAK5iC,QAAQ,kBAAmB,GAC3C,MAEI4iC,EAAO,IAUf,MAJgB,MAAZA,EAAK,IAA0B,MAAZA,EAAK,KACxBA,EAAO,IAAMA,GAGVstF,EAAoBttF,EAC/B,CAEA,MAAMmvF,EAAiB,UACvB,SAASC,EAAWpvF,EAAM2jE,GACtB,OAAO3jE,EAAK5iC,QAAQ+xH,EAAgB,KAAOxrB,CAC/C,CAEA,SAAS0rB,EAAmB7pG,EAAI9d,GAC5B,MAAM4nH,EAAUnwH,SAASu2D,gBAAgBvM,wBACnComE,EAAS/pG,EAAG2jC,wBAClB,MAAO,CACHyrC,SAAUltF,EAAOktF,SACjBprC,KAAM+lE,EAAO/lE,KAAO8lE,EAAQ9lE,MAAQ9hD,EAAO8hD,MAAQ,GACnDE,IAAK6lE,EAAO7lE,IAAM4lE,EAAQ5lE,KAAOhiD,EAAOgiD,KAAO,GAEvD,CACA,MAAM8lE,EAAwB,KAAM,CAChChmE,KAAM/qD,OAAOgxH,QACb/lE,IAAKjrD,OAAOixH,UAEhB,SAASC,EAAiBv8D,GACtB,IAAIw8D,EACJ,GAAI,OAAQx8D,EAAU,CAClB,MAAMy8D,EAAaz8D,EAAS5tC,GACtBsqG,EAAqC,kBAAfD,GAA2BA,EAAWrwG,WAAW,KACvEgG,EAA2B,kBAAfqqG,EACZC,EACI3wH,SAAS2pE,eAAe+mD,EAAWh1G,MAAM,IACzC1b,SAAS01C,cAAcg7E,GAC3BA,EACN,IAAKrqG,EACD,OAEJoqG,EAAkBP,EAAmB7pG,EAAI4tC,EAC7C,MAEIw8D,EAAkBx8D,EAElB,mBAAoBj0D,SAASu2D,gBAAgBnmB,MAC7C9wC,OAAOk2F,SAASi7B,GAEhBnxH,OAAOk2F,SAAiC,MAAxBi7B,EAAgBpmE,KAAeomE,EAAgBpmE,KAAO/qD,OAAOgxH,QAAgC,MAAvBG,EAAgBlmE,IAAckmE,EAAgBlmE,IAAMjrD,OAAOixH,QAEzJ,CACA,SAASK,EAAaxhG,EAAMyhG,GACxB,MAAM58D,EAAW68D,QAAQtgG,MAAQsgG,QAAQtgG,MAAMyjC,SAAW48D,GAAS,EACnE,OAAO58D,EAAW7kC,CACtB,CACA,MAAM2hG,EAAkB,IAAItiH,IAC5B,SAASuiH,EAAmB7xH,EAAK8xH,GAC7BF,EAAgB7iH,IAAI/O,EAAK8xH,EAC7B,CACA,SAASC,GAAuB/xH,GAC5B,MAAMy8D,EAASm1D,EAAgBhkH,IAAI5N,GAGnC,OADA4xH,EAAgB/jH,OAAO7N,GAChBy8D,CACX,CAiBA,IAAIu1D,GAAqB,IAAM3sB,SAAS4H,SAAW,KAAO5H,SAAS5jG,KAMnE,SAASwwH,GAAsBvwF,EAAM2jE,GACjC,MAAM,SAAE+H,EAAQ,OAAEF,EAAM,KAAEpwC,GAASuoC,EAE7BgqB,EAAU3tF,EAAKriB,QAAQ,KAC7B,GAAIgwG,GAAW,EAAG,CACd,IAAI6C,EAAWp1D,EAAKj1D,SAAS65B,EAAKnlB,MAAM8yG,IAClC3tF,EAAKnlB,MAAM8yG,GAASh0H,OACpB,EACF82H,EAAer1D,EAAKvgD,MAAM21G,GAI9B,MAFwB,MAApBC,EAAa,KACbA,EAAe,IAAMA,GAClBzC,EAAUyC,EAAc,GACnC,CACA,MAAMliG,EAAOy/F,EAAUtiB,EAAU1rE,GACjC,OAAOzR,EAAOi9E,EAASpwC,CAC3B,CACA,SAASs1D,GAAoB1wF,EAAM2wF,EAAclD,EAAiBrwH,GAC9D,IAAIwzH,EAAY,GACZC,EAAY,GAGZC,EAAa,KACjB,MAAMC,EAAkB,EAAGphG,YACvB,MAAM4Q,EAAKgwF,GAAsBvwF,EAAM2jE,UACjC5qE,EAAO00F,EAAgB/vH,MACvBszH,EAAYL,EAAajzH,MAC/B,IAAIsyH,EAAQ,EACZ,GAAIrgG,EAAO,CAIP,GAHA89F,EAAgB/vH,MAAQ6iC,EACxBowF,EAAajzH,MAAQiyB,EAEjBmhG,GAAcA,IAAe/3F,EAE7B,YADA+3F,EAAa,MAGjBd,EAAQgB,EAAYrhG,EAAMyjC,SAAW49D,EAAU59D,SAAW,CAC9D,MAEIh2D,EAAQmjC,GAOZqwF,EAAUhqH,SAAQ2jG,IACdA,EAASkjB,EAAgB/vH,MAAOq7B,EAAM,CAClCi3F,QACA3uH,KAAMytH,EAAe5kH,IACrBoyD,UAAW0zD,EACLA,EAAQ,EACJjB,EAAoBkC,QACpBlC,EAAoBmC,KACxBnC,EAAoBoC,SAC5B,GACJ,EAEN,SAASC,IACLN,EAAarD,EAAgB/vH,KACjC,CACA,SAAS2zH,EAAOxwH,GAEZ+vH,EAAUv0H,KAAKwE,GACf,MAAMywH,EAAW,KACb,MAAM/nH,EAAQqnH,EAAUjzG,QAAQ9c,GAC5B0I,GAAS,GACTqnH,EAAUrzG,OAAOhU,EAAO,EAAE,EAGlC,OADAsnH,EAAUx0H,KAAKi1H,GACRA,CACX,CACA,SAASC,IACL,MAAM,QAAEtB,GAAYxxH,OACfwxH,EAAQtgG,OAEbsgG,EAAQuB,aAAa7vH,EAAO,CAAC,EAAGsuH,EAAQtgG,MAAO,CAAEorC,OAAQy0D,MAA4B,GACzF,CACA,SAAS/nD,IACL,IAAK,MAAM6pD,KAAYT,EACnBS,IACJT,EAAY,GACZpyH,OAAOuhD,oBAAoB,WAAY+wE,GACvCtyH,OAAOuhD,oBAAoB,eAAgBuxE,EAC/C,CAQA,OANA9yH,OAAOyhD,iBAAiB,WAAY6wE,GAGpCtyH,OAAOyhD,iBAAiB,eAAgBqxE,EAAsB,CAC1D12D,SAAS,IAEN,CACHu2D,iBACAC,SACA5pD,UAER,CAIA,SAASgqD,GAAWP,EAAMp7F,EAASm7F,EAASS,GAAW,EAAOC,GAAgB,GAC1E,MAAO,CACHT,OACAp7F,UACAm7F,UACAS,WACAt+D,SAAU30D,OAAOwxH,QAAQt2H,OACzBohE,OAAQ42D,EAAgBnC,IAA0B,KAE1D,CACA,SAASoC,GAA0B5xF,GAC/B,MAAM,QAAEiwF,EAAO,SAAEtsB,GAAallG,OAExBgvH,EAAkB,CACpB/vH,MAAO6yH,GAAsBvwF,EAAM2jE,IAEjCgtB,EAAe,CAAEjzH,MAAOuyH,EAAQtgG,OAetC,SAASkiG,EAAetxF,EAAI5Q,EAAOvyB,GAU/B,MAAM00H,EAAY9xF,EAAKriB,QAAQ,KACzB+jF,EAAMowB,GAAa,GAClBnuB,EAAS5jG,MAAQZ,SAAS01C,cAAc,QACrC7U,EACAA,EAAKnlB,MAAMi3G,IAAcvxF,EAC7B+vF,KAAuBtwF,EAAOO,EACpC,IAGI0vF,EAAQ7yH,EAAU,eAAiB,aAAauyB,EAAO,GAAI+xE,GAC3DivB,EAAajzH,MAAQiyB,CACzB,CACA,MAAOxU,GAEC5d,QAAQC,MAAM2d,GAGlBwoF,EAASvmG,EAAU,UAAY,UAAUskG,EAC7C,CACJ,CACA,SAAStkG,EAAQmjC,EAAIl8B,GACjB,MAAMsrB,EAAQhuB,EAAO,CAAC,EAAGsuH,EAAQtgG,MAAO8hG,GAAWd,EAAajzH,MAAMwzH,KAEtE3wF,EAAIowF,EAAajzH,MAAMuzH,SAAS,GAAO5sH,EAAM,CAAE+uD,SAAUu9D,EAAajzH,MAAM01D,WAC5Ey+D,EAAetxF,EAAI5Q,GAAO,GAC1B89F,EAAgB/vH,MAAQ6iC,CAC5B,CACA,SAASlkC,EAAKkkC,EAAIl8B,GAGd,MAAM0tH,EAAepwH,EAAO,CAAC,EAI7BgvH,EAAajzH,MAAOuyH,EAAQtgG,MAAO,CAC/BshG,QAAS1wF,EACTw6B,OAAQy0D,MAEZqC,EAAeE,EAAaj8F,QAASi8F,GAAc,GACnD,MAAMpiG,EAAQhuB,EAAO,CAAC,EAAG8vH,GAAWhE,EAAgB/vH,MAAO6iC,EAAI,MAAO,CAAE6yB,SAAU2+D,EAAa3+D,SAAW,GAAK/uD,GAC/GwtH,EAAetxF,EAAI5Q,GAAO,GAC1B89F,EAAgB/vH,MAAQ6iC,CAC5B,CACA,OAlEKowF,EAAajzH,OACdm0H,EAAepE,EAAgB/vH,MAAO,CAClCwzH,KAAM,KACNp7F,QAAS23F,EAAgB/vH,MACzBuzH,QAAS,KAET79D,SAAU68D,EAAQt2H,OAAS,EAC3B+3H,UAAU,EAGV32D,OAAQ,OACT,GAuDA,CACH4oC,SAAU8pB,EACV99F,MAAOghG,EACPt0H,OACAe,UAER,CAMA,SAAS40H,GAAiBhyF,GACtBA,EAAOivF,EAAcjvF,GACrB,MAAMiyF,EAAoBL,GAA0B5xF,GAC9CkyF,EAAmBxB,GAAoB1wF,EAAMiyF,EAAkBtiG,MAAOsiG,EAAkBtuB,SAAUsuB,EAAkB70H,SAC1H,SAAS+0H,EAAGnC,EAAOoC,GAAmB,GAC7BA,GACDF,EAAiBd,iBACrBnB,QAAQkC,GAAGnC,EACf,CACA,MAAMqC,EAAgB1wH,EAAO,CAEzBgiG,SAAU,GACV3jE,OACAmyF,KACA/C,WAAYA,EAAWxiH,KAAK,KAAMozB,IACnCiyF,EAAmBC,GAStB,OARAn0H,OAAO69B,eAAey2F,EAAe,WAAY,CAC7C90F,YAAY,EACZrxB,IAAK,IAAM+lH,EAAkBtuB,SAASjmG,QAE1CK,OAAO69B,eAAey2F,EAAe,QAAS,CAC1C90F,YAAY,EACZrxB,IAAK,IAAM+lH,EAAkBtiG,MAAMjyB,QAEhC20H,CACX,CASA,SAASC,GAAoBtyF,EAAO,IAChC,IAAI4wF,EAAY,GACZz0G,EAAQ,CAAC6yG,GACT57D,EAAW,EAEf,SAASm/D,EAAY5uB,GACjBvwC,IACIA,IAAaj3C,EAAMxiB,QAEnBwiB,EAAMoB,OAAO61C,GAEjBj3C,EAAM9f,KAAKsnG,EACf,CACA,SAASyuB,EAAiB7xF,EAAIxH,GAAM,UAAEujC,EAAS,MAAE0zD,IAC7C,MAAMxwH,EAAO,CACT88D,YACA0zD,QACA3uH,KAAMytH,EAAe5kH,KAEzB,IAAK,MAAMrJ,KAAY+vH,EACnB/vH,EAAS0/B,EAAIxH,EAAMv5B,EAE3B,CAlBAwgC,EAAOivF,EAAcjvF,GAmBrB,MAAMqyF,EAAgB,CAElB1uB,SAAUqrB,EAEVr/F,MAAO,CAAC,EACRqQ,OACAovF,WAAYA,EAAWxiH,KAAK,KAAMozB,GAClC,OAAA5iC,CAAQmjC,GAEJpkB,EAAMoB,OAAO61C,IAAY,GACzBm/D,EAAYhyF,EAChB,EACA,IAAAlkC,CAAKkkC,EAAIl8B,GACLkuH,EAAYhyF,EAChB,EACA,MAAA8wF,CAAOxwH,GAEH,OADA+vH,EAAUv0H,KAAKwE,GACR,KACH,MAAM0I,EAAQqnH,EAAUjzG,QAAQ9c,GAC5B0I,GAAS,GACTqnH,EAAUrzG,OAAOhU,EAAO,EAAE,CAEtC,EACA,OAAAk+D,GACImpD,EAAY,GACZz0G,EAAQ,CAAC6yG,GACT57D,EAAW,CACf,EACA,EAAA++D,CAAGnC,EAAOwC,GAAgB,GACtB,MAAMz5F,EAAO/9B,KAAK2oG,SACZrnC,EAIN0zD,EAAQ,EAAIjB,EAAoBmC,KAAOnC,EAAoBkC,QAC3D79D,EAAW9hB,KAAK3b,IAAI,EAAG2b,KAAKC,IAAI6hB,EAAW48D,EAAO7zG,EAAMxiB,OAAS,IAC7D64H,GACAJ,EAAiBp3H,KAAK2oG,SAAU5qE,EAAM,CAClCujC,YACA0zD,SAGZ,GAMJ,OAJAjyH,OAAO69B,eAAey2F,EAAe,WAAY,CAC7C90F,YAAY,EACZrxB,IAAK,IAAMiQ,EAAMi3C,KAEdi/D,CACX,CA0BA,SAASI,GAAqBzyF,GAQ1B,OAJAA,EAAO2jE,SAAS5jG,KAAOigC,GAAQ2jE,SAAS+H,SAAW/H,SAAS6H,OAAS,GAEhExrE,EAAK75B,SAAS,OACf65B,GAAQ,KACLgyF,GAAiBhyF,EAC5B,CAEA,SAAS0yF,GAAgBC,GACrB,MAAwB,kBAAVA,GAAuBA,GAA0B,kBAAVA,CACzD,CACA,SAASC,GAAY51H,GACjB,MAAuB,kBAATA,GAAqC,kBAATA,CAC9C,CAiBA,MAAM61H,GAA4B,CAC9BtkG,KAAM,IACNvxB,UAAMY,EACN8I,OAAQ,CAAC,EACTgnH,MAAO,CAAC,EACRtyD,KAAM,GACN86C,SAAU,IACV56C,QAAS,GACTtO,KAAM,CAAC,EACP8lE,oBAAgBl1H,GAGdm1H,GAA0B/kH,OAAO,IAKvCgsF,EAAQg5B,2BAAwB,EAChC,SAAWA,GAKPA,EAAsBA,EAAsB,WAAa,GAAK,UAK9DA,EAAsBA,EAAsB,aAAe,GAAK,YAKhEA,EAAsBA,EAAsB,cAAgB,IAAM,YACrE,CAhBD,CAgBGh5B,EAAQg5B,wBAA0Bh5B,EAAQg5B,sBAAwB,CAAC,IAEtE,MAAMC,GAAoB,CACtB,CAAC,IAAsC,SAAEtvB,EAAQ,gBAAE8pB,IAC/C,MAAO,kBAAkBzuH,KAAKoD,UAAUuhG,KAAY8pB,EAC9C,qBAAuBzuH,KAAKoD,UAAUqrH,GACtC,IACV,EACA,CAAC,IAA8C,KAAE10F,EAAI,GAAEwH,IACnD,MAAO,oBAAoBxH,EAAKm9E,iBAAiBgd,GAAe3yF,6BACpE,EACA,CAAC,IAAuC,KAAExH,EAAI,GAAEwH,IAC5C,MAAO,4BAA4BxH,EAAKm9E,iBAAiB31E,EAAG21E,mCAChE,EACA,CAAC,IAAyC,KAAEn9E,EAAI,GAAEwH,IAC9C,MAAO,8BAA8BxH,EAAKm9E,iBAAiB31E,EAAG21E,kCAClE,EACA,CAAC,KAA2C,KAAEn9E,EAAI,GAAEwH,IAChD,MAAO,sDAAsDxH,EAAKm9E,YACtE,GAQJ,SAASid,GAAkB9xH,EAAMqF,GAGzB,OAAO/E,EAAO,IAAItI,MAAM45H,GAAkB5xH,GAAMqF,IAAU,CACtDrF,OACA,CAAC0xH,KAA0B,GAC5BrsH,EAEX,CACA,SAAS0sH,GAAoB51H,EAAO6D,GAChC,OAAQ7D,aAAiBnE,OACrB05H,MAA2Bv1H,IAClB,MAAR6D,MAAmB7D,EAAM6D,KAAOA,GACzC,CACA,MAAMgyH,GAAkB,CAAC,SAAU,QAAS,QAC5C,SAASH,GAAe3yF,GACpB,GAAkB,kBAAPA,EACP,OAAOA,EACX,GAAe,MAAXA,EAAGhS,KACH,OAAOgS,EAAGhS,KACd,MAAMo1E,EAAW,CAAC,EAClB,IAAK,MAAMrlG,KAAO+0H,GACV/0H,KAAOiiC,IACPojE,EAASrlG,GAAOiiC,EAAGjiC,IAE3B,OAAOU,KAAKoD,UAAUuhG,EAAU,KAAM,EAC1C,CAGA,MAAM2vB,GAAqB,SACrBC,GAA2B,CAC7BC,WAAW,EACXC,QAAQ,EACR32G,OAAO,EACPC,KAAK,GAGH22G,GAAiB,sBAQvB,SAASC,GAAenlG,EAAUqF,GAC9B,MAAMvnB,EAAU3K,EAAO,CAAC,EAAG4xH,GAA0B1/F,GAE/C+/F,EAAQ,GAEd,IAAIt8F,EAAUhrB,EAAQwQ,MAAQ,IAAM,GAEpC,MAAM9W,EAAO,GACb,IAAK,MAAM6oH,KAAWrgG,EAAU,CAE5B,MAAMqlG,EAAgBhF,EAAQl1H,OAAS,GAAK,CAAC,IAEzC2S,EAAQmnH,SAAW5E,EAAQl1H,SAC3B29B,GAAW,KACf,IAAK,IAAIw8F,EAAa,EAAGA,EAAajF,EAAQl1H,OAAQm6H,IAAc,CAChE,MAAM9yH,EAAQ6tH,EAAQiF,GAEtB,IAAIC,EAAkB,IACjBznH,EAAQknH,UAAY,IAA0C,GACnE,GAAmB,IAAfxyH,EAAMK,KAEDyyH,IACDx8F,GAAW,KACfA,GAAWt2B,EAAMtD,MAAMN,QAAQs2H,GAAgB,QAC/CK,GAAmB,QAElB,GAAmB,IAAf/yH,EAAMK,KAAkC,CAC7C,MAAM,MAAE3D,EAAK,WAAEs2H,EAAU,SAAEC,EAAQ,OAAEC,GAAWlzH,EAChDgF,EAAK3J,KAAK,CACNW,KAAMU,EACNs2H,aACAC,aAEJ,MAAME,EAAKD,GAAkBZ,GAE7B,GAAIa,IAAOb,GAAoB,CAC3BS,GAAmB,GAEnB,IACI,IAAIt+F,OAAO,IAAI0+F,KACnB,CACA,MAAOh5G,GACH,MAAM,IAAI9hB,MAAM,oCAAoCqE,OAAWy2H,OAC3Dh5G,EAAIhiB,QACZ,CACJ,CAEA,IAAIi7H,EAAaJ,EAAa,OAAOG,YAAaA,QAAW,IAAIA,KAE5DL,IACDM,EAGIH,GAAYpF,EAAQl1H,OAAS,EACvB,OAAOy6H,KACP,IAAMA,GAChBH,IACAG,GAAc,KAClB98F,GAAW88F,EACXL,GAAmB,GACfE,IACAF,IAAoB,GACpBC,IACAD,IAAoB,IACb,OAAPI,IACAJ,IAAoB,GAC5B,CACAF,EAAcx3H,KAAK03H,EACvB,CAGAH,EAAMv3H,KAAKw3H,EACf,CAEA,GAAIvnH,EAAQmnH,QAAUnnH,EAAQyQ,IAAK,CAC/B,MAAMrjB,EAAIk6H,EAAMj6H,OAAS,EACzBi6H,EAAMl6H,GAAGk6H,EAAMl6H,GAAGC,OAAS,IAAM,iBACrC,CAEK2S,EAAQmnH,SACTn8F,GAAW,MACXhrB,EAAQyQ,IACRua,GAAW,IAENhrB,EAAQmnH,SACbn8F,GAAW,WACf,MAAM68F,EAAK,IAAI1+F,OAAO6B,EAAShrB,EAAQknH,UAAY,GAAK,KACxD,SAASv0H,EAAMsvB,GACX,MAAMnvB,EAAQmvB,EAAKnvB,MAAM+0H,GACnBztH,EAAS,CAAC,EAChB,IAAKtH,EACD,OAAO,KACX,IAAK,IAAI1F,EAAI,EAAGA,EAAI0F,EAAMzF,OAAQD,IAAK,CACnC,MAAMgE,EAAQ0B,EAAM1F,IAAM,GACpB4E,EAAM0H,EAAKtM,EAAI,GACrBgN,EAAOpI,EAAItB,MAAQU,GAASY,EAAI01H,WAAat2H,EAAMsH,MAAM,KAAOtH,CACpE,CACA,OAAOgJ,CACX,CACA,SAAStE,EAAUsE,GACf,IAAI6nB,EAAO,GAEP8lG,GAAuB,EAC3B,IAAK,MAAMxF,KAAWrgG,EAAU,CACvB6lG,GAAyB9lG,EAAKyb,SAAS,OACxCzb,GAAQ,KACZ8lG,GAAuB,EACvB,IAAK,MAAMrzH,KAAS6tH,EAChB,GAAmB,IAAf7tH,EAAMK,KACNktB,GAAQvtB,EAAMtD,WAEb,GAAmB,IAAfsD,EAAMK,KAAkC,CAC7C,MAAM,MAAE3D,EAAK,WAAEs2H,EAAU,SAAEC,GAAajzH,EAClCszH,EAAQ52H,KAASgJ,EAASA,EAAOhJ,GAAS,GAChD,GAAIlC,EAAQ84H,KAAWN,EACnB,MAAM,IAAI36H,MAAM,mBAAmBqE,8DAEvC,MAAM+5C,EAAOj8C,EAAQ84H,GACfA,EAAM95H,KAAK,KACX85H,EACN,IAAK78E,EAAM,CACP,IAAIw8E,EAYA,MAAM,IAAI56H,MAAM,2BAA2BqE,MAVvCmxH,EAAQl1H,OAAS,IAEb40B,EAAKyb,SAAS,KACdzb,EAAOA,EAAK1T,MAAM,GAAI,GAGtBw5G,GAAuB,EAKvC,CACA9lG,GAAQkpB,CACZ,CAER,CAEA,OAAOlpB,GAAQ,GACnB,CACA,MAAO,CACH4lG,KACAP,QACA5tH,OACA/G,QACAmD,YAER,CAUA,SAASmyH,GAAkB1uH,EAAGC,GAC1B,IAAIpM,EAAI,EACR,MAAOA,EAAImM,EAAElM,QAAUD,EAAIoM,EAAEnM,OAAQ,CACjC,MAAM0kB,EAAOvY,EAAEpM,GAAKmM,EAAEnM,GAEtB,GAAI2kB,EACA,OAAOA,EACX3kB,GACJ,CAGA,OAAImM,EAAElM,OAASmM,EAAEnM,OACO,IAAbkM,EAAElM,QAAyB,KAATkM,EAAE,IACpB,EACD,EAEDA,EAAElM,OAASmM,EAAEnM,OACE,IAAbmM,EAAEnM,QAAyB,KAATmM,EAAE,GACrB,GACC,EAEJ,CACX,CAQA,SAAS0uH,GAAuB3uH,EAAGC,GAC/B,IAAIpM,EAAI,EACR,MAAM+6H,EAAS5uH,EAAE+tH,MACXc,EAAS5uH,EAAE8tH,MACjB,MAAOl6H,EAAI+6H,EAAO96H,QAAUD,EAAIg7H,EAAO/6H,OAAQ,CAC3C,MAAM2mB,EAAOi0G,GAAkBE,EAAO/6H,GAAIg7H,EAAOh7H,IAEjD,GAAI4mB,EACA,OAAOA,EACX5mB,GACJ,CACA,GAAgD,IAA5C43C,KAAK8jB,IAAIs/D,EAAO/6H,OAAS86H,EAAO96H,QAAe,CAC/C,GAAIg7H,GAAoBF,GACpB,OAAO,EACX,GAAIE,GAAoBD,GACpB,OAAQ,CAChB,CAEA,OAAOA,EAAO/6H,OAAS86H,EAAO96H,MAOlC,CAOA,SAASg7H,GAAoBf,GACzB,MAAM3pH,EAAO2pH,EAAMA,EAAMj6H,OAAS,GAClC,OAAOi6H,EAAMj6H,OAAS,GAAKsQ,EAAKA,EAAKtQ,OAAS,GAAK,CACvD,CAEA,MAAMi7H,GAAa,CACfvzH,KAAM,EACN3D,MAAO,IAELm3H,GAAiB,eAIvB,SAASC,GAAavmG,GAClB,IAAKA,EACD,MAAO,CAAC,IACZ,GAAa,MAATA,EACA,MAAO,CAAC,CAACqmG,KACb,IAAKrmG,EAAK/O,WAAW,KACjB,MAAM,IAAInmB,MAAM,iBAAiBk1B,MAGrC,SAASwmG,EAAM57H,GACX,MAAM,IAAIE,MAAM,QAAQs2B,OAAWpR,OAAYplB,IACnD,CACA,IAAIw2B,EAAQ,EACRqlG,EAAgBrlG,EACpB,MAAMk3E,EAAS,GAGf,IAAIgoB,EACJ,SAASoG,IACDpG,GACAhoB,EAAOxqG,KAAKwyH,GAChBA,EAAU,EACd,CAEA,IAEIznB,EAFA1tG,EAAI,EAIJ6kB,EAAS,GAET22G,EAAW,GACf,SAASC,IACA52G,IAES,IAAVoR,EACAk/F,EAAQxyH,KAAK,CACTgF,KAAM,EACN3D,MAAO6gB,IAGI,IAAVoR,GACK,IAAVA,GACU,IAAVA,GACIk/F,EAAQl1H,OAAS,IAAe,MAATytG,GAAyB,MAATA,IACvC2tB,EAAM,uBAAuBx2G,iDACjCswG,EAAQxyH,KAAK,CACTgF,KAAM,EACN3D,MAAO6gB,EACP21G,OAAQgB,EACRlB,WAAqB,MAAT5sB,GAAyB,MAATA,EAC5B6sB,SAAmB,MAAT7sB,GAAyB,MAATA,KAI9B2tB,EAAM,mCAEVx2G,EAAS,GACb,CACA,SAAS62G,IACL72G,GAAU6oF,CACd,CACA,MAAO1tG,EAAI60B,EAAK50B,OAEZ,GADAytG,EAAO74E,EAAK70B,KACC,OAAT0tG,GAA2B,IAAVz3E,EAKrB,OAAQA,GACJ,KAAK,EACY,MAATy3E,GACI7oF,GACA42G,IAEJF,KAEc,MAAT7tB,GACL+tB,IACAxlG,EAAQ,GAGRylG,IAEJ,MACJ,KAAK,EACDA,IACAzlG,EAAQqlG,EACR,MACJ,KAAK,EACY,MAAT5tB,EACAz3E,EAAQ,EAEHklG,GAAeryH,KAAK4kG,GACzBguB,KAGAD,IACAxlG,EAAQ,EAEK,MAATy3E,GAAyB,MAATA,GAAyB,MAATA,GAChC1tG,KAER,MACJ,KAAK,EAMY,MAAT0tG,EAEqC,MAAjC8tB,EAASA,EAASv7H,OAAS,GAC3Bu7H,EAAWA,EAASr6G,MAAM,GAAI,GAAKusF,EAEnCz3E,EAAQ,EAGZulG,GAAY9tB,EAEhB,MACJ,KAAK,EAED+tB,IACAxlG,EAAQ,EAEK,MAATy3E,GAAyB,MAATA,GAAyB,MAATA,GAChC1tG,IACJw7H,EAAW,GACX,MACJ,QACIH,EAAM,iBACN,WAnEJC,EAAgBrlG,EAChBA,EAAQ,EA0EhB,OALc,IAAVA,GACAolG,EAAM,uCAAuCx2G,MACjD42G,IACAF,IAEOpuB,CACX,CAEA,SAASwuB,GAAyB9Q,EAAQj7G,EAAQgD,GAC9C,MAAMq4F,EAASgvB,GAAemB,GAAavQ,EAAOh2F,MAAOjiB,GACnD67F,EAAUxmG,EAAOgjG,EAAQ,CAC3B4f,SACAj7G,SAEA8a,SAAU,GACVkxG,MAAO,KASX,OAPIhsH,IAIK6+F,EAAQoc,OAAO+J,WAAahlH,EAAOi7G,OAAO+J,SAC3ChlH,EAAO8a,SAAS/nB,KAAK8rG,GAEtBA,CACX,CASA,SAASotB,GAAoBC,EAAQC,GAEjC,MAAMC,EAAW,GACXC,EAAa,IAAI/nH,IAEvB,SAASgoH,EAAiB54H,GACtB,OAAO24H,EAAWzpH,IAAIlP,EAC1B,CACA,SAAS64H,EAAStR,EAAQj7G,EAAQwsH,GAE9B,MAAMC,GAAaD,EACbE,EAAuBC,GAAqB1R,GAElDyR,EAAqB1H,QAAUwH,GAAkBA,EAAevR,OAChE,MAAMj4G,EAAUg0B,GAAam1F,EAAelR,GAEtC2R,EAAoB,CACtBF,GAEJ,GAAI,UAAWzR,EAAQ,CACnB,MAAM4R,EAAkC,kBAAjB5R,EAAO+Q,MAAqB,CAAC/Q,EAAO+Q,OAAS/Q,EAAO+Q,MAC3E,IAAK,MAAMA,KAASa,EAChBD,EAAkB75H,KAAKsF,EAAO,CAAC,EAAGq0H,EAAsB,CAGpD72F,WAAY22F,EACNA,EAAevR,OAAOplF,WACtB62F,EAAqB72F,WAC3B5Q,KAAM+mG,EAENhH,QAASwH,EACHA,EAAevR,OACfyR,IAKlB,CACA,IAAI7tB,EACAiuB,EACJ,IAAK,MAAMC,KAAoBH,EAAmB,CAC9C,MAAM,KAAE3nG,GAAS8nG,EAIjB,GAAI/sH,GAAsB,MAAZilB,EAAK,GAAY,CAC3B,MAAM+nG,EAAahtH,EAAOi7G,OAAOh2F,KAC3BgoG,EAAwD,MAAtCD,EAAWA,EAAW38H,OAAS,GAAa,GAAK,IACzE08H,EAAiB9nG,KACbjlB,EAAOi7G,OAAOh2F,MAAQA,GAAQgoG,EAAkBhoG,EACxD,CAuBA,GArBA45E,EAAUktB,GAAyBgB,EAAkB/sH,EAAQgD,GAGzDwpH,EACAA,EAAeR,MAAMj5H,KAAK8rG,IAI1BiuB,EAAkBA,GAAmBjuB,EACjCiuB,IAAoBjuB,GACpBiuB,EAAgBd,MAAMj5H,KAAK8rG,GAG3B4tB,GAAaxR,EAAOvnH,OAASw5H,GAAcruB,IAC3CsuB,EAAYlS,EAAOvnH,OAIvB05H,GAAYvuB,IACZwuB,EAAcxuB,GAEd6tB,EAAqB5xG,SAAU,CAC/B,MAAMA,EAAW4xG,EAAqB5xG,SACtC,IAAK,IAAI1qB,EAAI,EAAGA,EAAI0qB,EAASzqB,OAAQD,IACjCm8H,EAASzxG,EAAS1qB,GAAIyuG,EAAS2tB,GAAkBA,EAAe1xG,SAAS1qB,GAEjF,CAGAo8H,EAAiBA,GAAkB3tB,CAKvC,CACA,OAAOiuB,EACD,KAEEK,EAAYL,EAAgB,EAE9BnsD,CACV,CACA,SAASwsD,EAAYG,GACjB,GAAIhE,GAAYgE,GAAa,CACzB,MAAMzuB,EAAUwtB,EAAWzpH,IAAI0qH,GAC3BzuB,IACAwtB,EAAWxpH,OAAOyqH,GAClBlB,EAASn4G,OAAOm4G,EAAS/3G,QAAQwqF,GAAU,GAC3CA,EAAQ/jF,SAASxd,QAAQ6vH,GACzBtuB,EAAQmtB,MAAM1uH,QAAQ6vH,GAE9B,KACK,CACD,MAAMltH,EAAQmsH,EAAS/3G,QAAQi5G,GAC3BrtH,GAAS,IACTmsH,EAASn4G,OAAOhU,EAAO,GACnBqtH,EAAWrS,OAAOvnH,MAClB24H,EAAWxpH,OAAOyqH,EAAWrS,OAAOvnH,MACxC45H,EAAWxyG,SAASxd,QAAQ6vH,GAC5BG,EAAWtB,MAAM1uH,QAAQ6vH,GAEjC,CACJ,CACA,SAASI,IACL,OAAOnB,CACX,CACA,SAASiB,EAAcxuB,GACnB,MAAM5+F,EAAQqT,GAAmBurF,EAASutB,GAC1CA,EAASn4G,OAAOhU,EAAO,EAAG4+F,GAEtBA,EAAQoc,OAAOvnH,OAASw5H,GAAcruB,IACtCwtB,EAAWtoH,IAAI86F,EAAQoc,OAAOvnH,KAAMmrG,EAC5C,CACA,SAAS1nG,EAAQkjG,EAAU8pB,GACvB,IAAItlB,EAEA55E,EACAvxB,EAFA0J,EAAS,CAAC,EAGd,GAAI,SAAUi9F,GAAYA,EAAS3mG,KAAM,CAErC,GADAmrG,EAAUwtB,EAAWzpH,IAAIy3F,EAAS3mG,OAC7BmrG,EACD,MAAMgrB,GAAkB,EAAsC,CAC1DxvB,aAER3mG,EAAOmrG,EAAQoc,OAAOvnH,KACtB0J,EAAS/E,EAETm1H,GAAmBrJ,EAAgB/mH,OAGnCyhG,EAAQniG,KACHqJ,QAAOnJ,IAAMA,EAAE+tH,WACfhwG,OAAOkkF,EAAQ7+F,OAAS6+F,EAAQ7+F,OAAOtD,KAAKqJ,QAAOnJ,GAAKA,EAAE+tH,WAAY,IACtEzuH,KAAIU,GAAKA,EAAElJ,QAGhB2mG,EAASj9F,QACLowH,GAAmBnzB,EAASj9F,OAAQyhG,EAAQniG,KAAKR,KAAIU,GAAKA,EAAElJ,SAEhEuxB,EAAO45E,EAAQ/lG,UAAUsE,EAC7B,MACK,GAAqB,MAAjBi9F,EAASp1E,KAGdA,EAAOo1E,EAASp1E,KAChB45E,EAAUutB,EAAS7zD,MAAKz4C,GAAKA,EAAE+qG,GAAG3xH,KAAK+rB,KAEnC45E,IAEAzhG,EAASyhG,EAAQlpG,MAAMsvB,GACvBvxB,EAAOmrG,EAAQoc,OAAOvnH,UAIzB,CAKD,GAHAmrG,EAAUslB,EAAgBzwH,KACpB24H,EAAWzpH,IAAIuhH,EAAgBzwH,MAC/B04H,EAAS7zD,MAAKz4C,GAAKA,EAAE+qG,GAAG3xH,KAAKirH,EAAgBl/F,SAC9C45E,EACD,MAAMgrB,GAAkB,EAAsC,CAC1DxvB,WACA8pB,oBAERzwH,EAAOmrG,EAAQoc,OAAOvnH,KAGtB0J,EAAS/E,EAAO,CAAC,EAAG8rH,EAAgB/mH,OAAQi9F,EAASj9F,QACrD6nB,EAAO45E,EAAQ/lG,UAAUsE,EAC7B,CACA,MAAM40D,EAAU,GAChB,IAAIy7D,EAAgB5uB,EACpB,MAAO4uB,EAEHz7D,EAAQljC,QAAQ2+F,EAAcxS,QAC9BwS,EAAgBA,EAAcztH,OAElC,MAAO,CACHtM,OACAuxB,OACA7nB,SACA40D,UACAtO,KAAMgqE,GAAgB17D,GAE9B,CAGA,OAnMAm6D,EAAgBn1F,GAAa,CAAEmzF,QAAQ,EAAO12G,KAAK,EAAMy2G,WAAW,GAASiC,GAkM7ED,EAAO5uH,SAAQ+rH,GAASkD,EAASlD,KAC1B,CAAEkD,WAAUp1H,UAASg2H,cAAaI,YAAWjB,mBACxD,CACA,SAASkB,GAAmBpwH,EAAQV,GAChC,MAAM+lH,EAAY,CAAC,EACnB,IAAK,MAAMztH,KAAO0H,EACV1H,KAAOoI,IACPqlH,EAAUztH,GAAOoI,EAAOpI,IAEhC,OAAOytH,CACX,CAOA,SAASkK,GAAqB1R,GAC1B,MAAO,CACHh2F,KAAMg2F,EAAOh2F,KACb0oG,SAAU1S,EAAO0S,SACjBj6H,KAAMunH,EAAOvnH,KACbgwD,KAAMu3D,EAAOv3D,MAAQ,CAAC,EACtBshE,aAAS1wH,EACTk1B,YAAayxF,EAAOzxF,YACpBnY,MAAOu8G,GAAqB3S,GAC5BngG,SAAUmgG,EAAOngG,UAAY,GAC7B+yG,UAAW,CAAC,EACZC,YAAa,IAAIjoH,IACjBkoH,aAAc,IAAIloH,IAClBmoH,eAAgB,CAAC,EACjBn4F,WAAY,eAAgBolF,EACtBA,EAAOplF,YAAc,KACrBolF,EAAOlrG,WAAa,CAAEoS,QAAS84F,EAAOlrG,WAEpD,CAMA,SAAS69G,GAAqB3S,GAC1B,MAAMgT,EAAc,CAAC,EAEf58G,EAAQ4pG,EAAO5pG,QAAS,EAC9B,GAAI,cAAe4pG,EACfgT,EAAY9rG,QAAU9Q,OAKtB,IAAK,MAAM3d,KAAQunH,EAAOplF,WACtBo4F,EAAYv6H,GAAyB,kBAAV2d,EAAqBA,EAAM3d,GAAQ2d,EAEtE,OAAO48G,CACX,CAKA,SAASf,GAAcjS,GACnB,MAAOA,EAAQ,CACX,GAAIA,EAAOA,OAAO+J,QACd,OAAO,EACX/J,EAASA,EAAOj7G,MACpB,CACA,OAAO,CACX,CAMA,SAAS0tH,GAAgB17D,GACrB,OAAOA,EAAQt+B,QAAO,CAACgwB,EAAMu3D,IAAW5iH,EAAOqrD,EAAMu3D,EAAOv3D,OAAO,CAAC,EACxE,CACA,SAAS1sB,GAAa7D,EAAU+6F,GAC5B,MAAMlrH,EAAU,CAAC,EACjB,IAAK,MAAMhO,KAAOm+B,EACdnwB,EAAQhO,GAAOA,KAAOk5H,EAAiBA,EAAel5H,GAAOm+B,EAASn+B,GAE1E,OAAOgO,CACX,CAUA,SAASsQ,GAAmBurF,EAASutB,GAEjC,IAAI+B,EAAQ,EACRC,EAAQhC,EAAS/7H,OACrB,MAAO89H,IAAUC,EAAO,CACpB,MAAMC,EAAOF,EAAQC,GAAU,EACzBE,EAAYpD,GAAuBrsB,EAASutB,EAASiC,IACvDC,EAAY,EACZF,EAAQC,EAGRF,EAAQE,EAAM,CAEtB,CAEA,MAAME,EAAoBC,GAAqB3vB,GAI/C,OAHI0vB,IACAH,EAAQhC,EAASz1H,YAAY43H,EAAmBH,EAAQ,IAErDA,CACX,CACA,SAASI,GAAqB3vB,GAC1B,IAAI32B,EAAW22B,EACf,MAAQ32B,EAAWA,EAASloE,OACxB,GAAIotH,GAAYllD,IACkC,IAA9CgjD,GAAuBrsB,EAAS32B,GAChC,OAAOA,CAInB,CAQA,SAASklD,IAAY,OAAEnS,IACnB,SAAUA,EAAOvnH,MACZunH,EAAOplF,YAAcphC,OAAOiI,KAAKu+G,EAAOplF,YAAYxlC,QACrD4qH,EAAO0S,SACf,CAWA,SAASzJ,GAAWhiB,GAChB,MAAMkiB,EAAQ,CAAC,EAGf,GAAe,KAAXliB,GAA4B,MAAXA,EACjB,OAAOkiB,EACX,MAAMqK,EAA6B,MAAdvsB,EAAO,GACtBwsB,GAAgBD,EAAevsB,EAAO3wF,MAAM,GAAK2wF,GAAQxmG,MAAM,KACrE,IAAK,IAAItL,EAAI,EAAGA,EAAIs+H,EAAar+H,SAAUD,EAAG,CAE1C,MAAMu+H,EAAcD,EAAat+H,GAAG0D,QAAQivH,EAAS,KAE/C6L,EAAQD,EAAYt6G,QAAQ,KAC5Brf,EAAMuG,EAAOqzH,EAAQ,EAAID,EAAcA,EAAYp9G,MAAM,EAAGq9G,IAC5Dx6H,EAAQw6H,EAAQ,EAAI,KAAOrzH,EAAOozH,EAAYp9G,MAAMq9G,EAAQ,IAClE,GAAI55H,KAAOovH,EAAO,CAEd,IAAIyK,EAAezK,EAAMpvH,GACpB9C,EAAQ28H,KACTA,EAAezK,EAAMpvH,GAAO,CAAC65H,IAEjCA,EAAa97H,KAAKqB,EACtB,MAEIgwH,EAAMpvH,GAAOZ,CAErB,CACA,OAAOgwH,CACX,CAUA,SAASK,GAAeL,GACpB,IAAIliB,EAAS,GACb,IAAK,IAAIltG,KAAOovH,EAAO,CACnB,MAAMhwH,EAAQgwH,EAAMpvH,GAEpB,GADAA,EAAM4uH,EAAe5uH,GACR,MAATZ,EAAe,MAEDE,IAAVF,IACA8tG,IAAWA,EAAO7xG,OAAS,IAAM,IAAM2E,GAE3C,QACJ,CAEA,MAAMiQ,EAAS/S,EAAQkC,GACjBA,EAAM8H,KAAIgG,GAAKA,GAAKyhH,EAAiBzhH,KACrC,CAAC9N,GAASuvH,EAAiBvvH,IACjC6Q,EAAO3H,SAAQlJ,SAGGE,IAAVF,IAEA8tG,IAAWA,EAAO7xG,OAAS,IAAM,IAAM2E,EAC1B,MAATZ,IACA8tG,GAAU,IAAM9tG,GACxB,GAER,CACA,OAAO8tG,CACX,CASA,SAAS4sB,GAAe1K,GACpB,MAAM2K,EAAkB,CAAC,EACzB,IAAK,MAAM/5H,KAAOovH,EAAO,CACrB,MAAMhwH,EAAQgwH,EAAMpvH,QACNV,IAAVF,IACA26H,EAAgB/5H,GAAO9C,EAAQkC,GACzBA,EAAM8H,KAAIgG,GAAW,MAALA,EAAY,KAAO,GAAKA,IAC/B,MAAT9N,EACIA,EACA,GAAKA,EAEvB,CACA,OAAO26H,CACX,CASA,MAAMC,GAAkBtqH,OAAO,IAOzBuqH,GAAevqH,OAAO,IAOtBwqH,GAAYxqH,OAAO,IAOnByqH,GAAmBzqH,OAAO,IAO1B0qH,GAAwB1qH,OAAO,IAKrC,SAAS2qH,KACL,IAAIjrD,EAAW,GACf,SAASt7D,EAAI2N,GAET,OADA2tD,EAASrxE,KAAK0jB,GACP,KACH,MAAMrmB,EAAIg0E,EAAS/vD,QAAQoC,GACvBrmB,GAAK,GACLg0E,EAASnwD,OAAO7jB,EAAG,EAAE,CAEjC,CACA,SAAS6N,IACLmmE,EAAW,EACf,CACA,MAAO,CACHt7D,MACA0qD,KAAM,IAAM4Q,EAAS7yD,QACrBtT,QAER,CAEA,SAASqxH,GAAcrU,EAAQvnH,EAAMwwD,GACjC,MAAMqrE,EAAiB,KACnBtU,EAAOvnH,GAAMmP,OAAOqhD,EAAM,EAE9Bo+D,EAAI3zF,YAAY4gG,GAChBjN,EAAIl0F,cAAcmhG,GAClBjN,EAAIp0F,aAAY,KACZ+sF,EAAOvnH,GAAMoV,IAAIo7C,EAAM,IAE3B+2D,EAAOvnH,GAAMoV,IAAIo7C,EACrB,CAQA,SAASsrE,GAAmBC,GACxB,MAAMC,EAAepN,EAAIp/F,OAAO8rG,GAEhC,CAAC,GAAG56H,MACCs7H,GAGLJ,GAAcI,EAAc,cAAeD,EAC/C,CAQA,SAASE,GAAoBC,GACzB,MAAMF,EAAepN,EAAIp/F,OAAO8rG,GAEhC,CAAC,GAAG56H,MACCs7H,GAGLJ,GAAcI,EAAc,eAAgBE,EAChD,CACA,SAASC,GAAiB3rE,EAAOjtB,EAAIxH,EAAMwrF,EAAQvnH,EAAMgmC,EAAiBv9B,IAAMA,MAE5E,MAAM2zH,EAAqB7U,IAEtBA,EAAO+S,eAAet6H,GAAQunH,EAAO+S,eAAet6H,IAAS,IAClE,MAAO,IAAM,IAAI2D,SAAQ,CAACF,EAASD,KAC/B,MAAM4S,EAAQimH,KACI,IAAVA,EACA74H,EAAO2yH,GAAkB,EAAuC,CAC5Dp6F,OACAwH,QAGC84F,aAAiBhgI,MACtBmH,EAAO64H,GAEF3G,GAAgB2G,GACrB74H,EAAO2yH,GAAkB,EAA8C,CACnEp6F,KAAMwH,EACNA,GAAI84F,MAIJD,GAEA7U,EAAO+S,eAAet6H,KAAUo8H,GACf,oBAAVC,GACPD,EAAmB/8H,KAAKg9H,GAE5B54H,IACJ,EAGE64H,EAAct2F,GAAe,IAAMwqB,EAAMnoD,KAAKk/G,GAAUA,EAAO4S,UAAUn6H,GAAOujC,EAAIxH,EAAM3lB,KAChG,IAAImmH,EAAY54H,QAAQF,QAAQ64H,GAC5B9rE,EAAM7zD,OAAS,IACf4/H,EAAYA,EAAU58G,KAAKvJ,IAC/BmmH,EAAUz4H,OAAMqa,GAAO3a,EAAO2a,IAAK,GAE3C,CACA,SAASq+G,GAAwBl+D,EAASm+D,EAAWl5F,EAAIxH,EAAMiK,EAAiBv9B,IAAMA,MAClF,MAAMi0H,EAAS,GACf,IAAK,MAAMnV,KAAUjpD,EACjB,IAAK,MAAMt+D,KAAQunH,EAAOplF,WAAY,CAClC,IAAIw6F,EAAepV,EAAOplF,WAAWniC,GAErC,GAAkB,qBAAdy8H,GAAqClV,EAAO4S,UAAUn6H,GAE1D,GAAI48H,GAAiBD,GAAe,CAEhC,MAAMrtH,EAAUqtH,EAAa1iF,WAAa0iF,EACpCnsE,EAAQlhD,EAAQmtH,GACtBjsE,GACIksE,EAAOr9H,KAAK88H,GAAiB3rE,EAAOjtB,EAAIxH,EAAMwrF,EAAQvnH,EAAMgmC,GACpE,KACK,CAED,IAAI62F,EAAmBF,IACvBD,EAAOr9H,MAAK,IAAMw9H,EAAiBl9G,MAAK0jB,IACpC,IAAKA,EACD,OAAO1/B,QAAQH,OAAO,IAAInH,MAAM,+BAA+B2D,UAAaunH,EAAOh2F,UACvF,MAAMurG,EAAoBjO,EAAWxrF,GAC/BA,EAAS5U,QACT4U,EAGNkkF,EAAOplF,WAAWniC,GAAQ88H,EAE1B,MAAMxtH,EAAUwtH,EAAkB7iF,WAAa6iF,EACzCtsE,EAAQlhD,EAAQmtH,GACtB,OAAQjsE,GACJ2rE,GAAiB3rE,EAAOjtB,EAAIxH,EAAMwrF,EAAQvnH,EAAMgmC,EAAhDm2F,EAAkE,KAE9E,CACJ,CAEJ,OAAOO,CACX,CAOA,SAASE,GAAiBvgH,GACtB,MAA6B,kBAAdA,GACX,gBAAiBA,GACjB,UAAWA,GACX,cAAeA,CACvB,CAMA,SAAS0gH,GAAkBpH,GACvB,OAAOA,EAAMr3D,QAAQ3oC,OAAM4xF,GAAUA,EAAO0S,WACtCt2H,QAAQH,OAAO,IAAInH,MAAM,wCACzBsH,QAAQy6G,IAAIuX,EAAMr3D,QAAQ91D,KAAI++G,GAAUA,EAAOplF,YAC7Cx+B,QAAQy6G,IAAIr9G,OAAOiI,KAAKu+G,EAAOplF,YAAYnC,QAAO,CAACq+E,EAAUr+G,KACzD,MAAM28H,EAAepV,EAAOplF,WAAWniC,GAevC,MAd4B,oBAAjB28H,GACL,gBAAiBA,GACnBte,EAASh/G,KAAKs9H,IAAeh9G,MAAK0jB,IAC9B,IAAKA,EACD,OAAO1/B,QAAQH,OAAO,IAAInH,MAAM,+BAA+B2D,UAAaunH,EAAOh2F,gEACvF,MAAMurG,EAAoBjO,EAAWxrF,GAC/BA,EAAS5U,QACT4U,EAGNkkF,EAAOplF,WAAWniC,GAAQ88H,CACpB,KAGPze,CAAQ,GAChB,QAAO1+F,MAAK,IAAMg2G,GACjC,CAIA,SAASqH,GAAQr/G,GACb,MAAMs/G,EAASrO,EAAIp/F,OAAOgsG,IACpB0B,EAAetO,EAAIp/F,OAAOisG,IAC1B9F,EAAQ/G,EAAIvgH,UAAS,KACvB,MAAMk1B,EAAKqrF,EAAIr0G,MAAMoD,EAAM4lB,IAC3B,OAAO05F,EAAOx5H,QAAQ8/B,EAAG,IAEvB45F,EAAoBvO,EAAIvgH,UAAS,KACnC,MAAM,QAAEiwD,GAAYq3D,EAAMj1H,OACpB,OAAE/D,GAAW2hE,EACb8+D,EAAe9+D,EAAQ3hE,EAAS,GAChC0gI,EAAiBH,EAAa5+D,QACpC,IAAK8+D,IAAiBC,EAAe1gI,OACjC,OAAQ,EACZ,MAAM4P,EAAQ8wH,EAAe70F,UAAU4oF,EAAkBxhH,KAAK,KAAMwtH,IACpE,GAAI7wH,GAAS,EACT,OAAOA,EAEX,MAAM+wH,EAAmBC,GAAgBj/D,EAAQ3hE,EAAS,IAC1D,OAEAA,EAAS,GAIL4gI,GAAgBH,KAAkBE,GAElCD,EAAeA,EAAe1gI,OAAS,GAAG40B,OAAS+rG,EACjDD,EAAe70F,UAAU4oF,EAAkBxhH,KAAK,KAAM0uD,EAAQ3hE,EAAS,KACvE4P,CAAM,IAEVgvF,EAAWqzB,EAAIvgH,UAAS,IAAM8uH,EAAkBz8H,OAAS,GAC3D88H,GAAeN,EAAaxzH,OAAQisH,EAAMj1H,MAAMgJ,UAC9C+zH,EAAgB7O,EAAIvgH,UAAS,IAAM8uH,EAAkBz8H,OAAS,GAChEy8H,EAAkBz8H,QAAUw8H,EAAa5+D,QAAQ3hE,OAAS,GAC1D00H,EAA0B6L,EAAaxzH,OAAQisH,EAAMj1H,MAAMgJ,UAC/D,SAASg0H,EAASp9H,EAAI,CAAC,GACnB,OAAIq9H,GAAWr9H,GACJ28H,EAAOrO,EAAIr0G,MAAMoD,EAAMvd,SAAW,UAAY,QAAQwuH,EAAIr0G,MAAMoD,EAAM4lB,KAE3Ez/B,MAAMmpE,GAELtpE,QAAQF,SACnB,CAIA,MAAO,CACHkyH,QACA/uB,KAAMgoB,EAAIvgH,UAAS,IAAMsnH,EAAMj1H,MAAMkmG,OACrCrL,WACAkiC,gBACAC,WAER,CACA,MAAME,GAA+BhP,EAAIh4F,gBAAgB,CACrD52B,KAAM,aACN69H,aAAc,CAAEC,KAAM,GACtBngH,MAAO,CACH4lB,GAAI,CACAl/B,KAAM,CAACnH,OAAQ6D,QACf2qH,UAAU,GAEdtrH,QAASkzB,QACTyqG,YAAa7gI,OAEb8gI,iBAAkB9gI,OAClB+gI,OAAQ3qG,QACR4qG,iBAAkB,CACd75H,KAAMnH,OACNuxB,QAAS,SAGjBuuG,WACA,KAAA3oG,CAAM1W,GAAO,MAAEiI,IACX,MAAMu4G,EAAOvP,EAAI96G,SAASkpH,GAAQr/G,KAC5B,QAAErO,GAAYs/G,EAAIp/F,OAAOgsG,IACzB4C,EAAUxP,EAAIvgH,UAAS,KAAM,CAC/B,CAACgwH,GAAa1gH,EAAMogH,YAAazuH,EAAQgvH,gBAAiB,uBAAwBH,EAAK5iC,SAMvF,CAAC8iC,GAAa1gH,EAAMqgH,iBAAkB1uH,EAAQivH,qBAAsB,6BAA8BJ,EAAKV,kBAE3G,MAAO,KACH,MAAMr2G,EAAWxB,EAAM6I,SAAW7I,EAAM6I,QAAQ0vG,GAChD,OAAOxgH,EAAMsgH,OACP72G,EACAwnG,EAAI7rF,EAAE,IAAK,CACT,eAAgBo7F,EAAKV,cACf9/G,EAAMugH,iBACN,KACNt3B,KAAMu3B,EAAKv3B,KAGX35D,QAASkxF,EAAKT,SACdprF,MAAO8rF,EAAQ19H,OAChB0mB,EAAS,CAExB,IAOEo3G,GAAaZ,GACnB,SAASD,GAAWr9H,GAEhB,KAAIA,EAAE2vD,SAAW3vD,EAAEyvD,QAAUzvD,EAAEsvD,SAAWtvD,EAAEuvD,YAGxCvvD,EAAEkxE,wBAGW5wE,IAAbN,EAAE4vD,QAAqC,IAAb5vD,EAAE4vD,QAAhC,CAIA,GAAI5vD,EAAEovD,eAAiBpvD,EAAEovD,cAAc1hB,aAAc,CAEjD,MAAMntC,EAASP,EAAEovD,cAAc1hB,aAAa,UAC5C,GAAI,cAAcxoC,KAAK3E,GACnB,MACR,CAIA,OAFIP,EAAEmvD,gBACFnvD,EAAEmvD,kBACC,CAZG,CAad,CACA,SAAS+tE,GAAeiB,EAAOC,GAC3B,IAAK,MAAMp9H,KAAOo9H,EAAO,CACrB,MAAMC,EAAaD,EAAMp9H,GACnBs9H,EAAaH,EAAMn9H,GACzB,GAA0B,kBAAfq9H,GACP,GAAIA,IAAeC,EACf,OAAO,OAGX,IAAKpgI,EAAQogI,IACTA,EAAWjiI,SAAWgiI,EAAWhiI,QACjCgiI,EAAW93G,MAAK,CAACnmB,EAAOhE,IAAMgE,IAAUk+H,EAAWliI,KACnD,OAAO,CAEnB,CACA,OAAO,CACX,CAKA,SAAS6gI,GAAgBhW,GACrB,OAAOA,EAAUA,EAAO+J,QAAU/J,EAAO+J,QAAQ//F,KAAOg2F,EAAOh2F,KAAQ,EAC3E,CAOA,MAAM8sG,GAAe,CAACQ,EAAWC,EAAaC,IAA8B,MAAbF,EACzDA,EACe,MAAfC,EACIA,EACAC,EAEJC,GAA+BpQ,EAAIh4F,gBAAgB,CACrD52B,KAAM,aAENimB,cAAc,EACdtI,MAAO,CACH3d,KAAM,CACFqE,KAAMnH,OACNuxB,QAAS,WAEbknG,MAAO50H,QAIX88H,aAAc,CAAEC,KAAM,GACtB,KAAAzpG,CAAM1W,GAAO,MAAEkI,EAAK,MAAED,IAClB,MAAMq5G,EAAgBrQ,EAAIp/F,OAAOksG,IAC3BwD,EAAiBtQ,EAAIvgH,UAAS,IAAMsP,EAAMg4G,OAASsJ,EAAcv+H,QACjEy+H,EAAgBvQ,EAAIp/F,OAAO+rG,GAAc,GAGzC9pG,EAAQm9F,EAAIvgH,UAAS,KACvB,IAAI+wH,EAAexQ,EAAIr0G,MAAM4kH,GAC7B,MAAM,QAAE7gE,GAAY4gE,EAAex+H,MACnC,IAAI2+H,EACJ,OAAQA,EAAe/gE,EAAQ8gE,MAC1BC,EAAal9F,WACdi9F,IAEJ,OAAOA,CAAY,IAEjBE,EAAkB1Q,EAAIvgH,UAAS,IAAM6wH,EAAex+H,MAAM49D,QAAQ7sC,EAAM/wB,SAC9EkuH,EAAI1tF,QAAQq6F,GAAc3M,EAAIvgH,UAAS,IAAMojB,EAAM/wB,MAAQ,KAC3DkuH,EAAI1tF,QAAQo6F,GAAiBgE,GAC7B1Q,EAAI1tF,QAAQw6F,GAAuBwD,GACnC,MAAMK,EAAU3Q,EAAI90G,MAiCpB,OA9BA80G,EAAI7+F,OAAM,IAAM,CAACwvG,EAAQ7+H,MAAO4+H,EAAgB5+H,MAAOid,EAAM3d,QAAO,EAAEoc,EAAUmnB,EAAIvjC,IAAQw/H,EAAazjG,EAAM0jG,MAEvGl8F,IAGAA,EAAG42F,UAAUn6H,GAAQoc,EAOjB2f,GAAQA,IAASwH,GAAMnnB,GAAYA,IAAaojH,IAC3Cj8F,EAAG62F,YAAYhrH,OAChBm0B,EAAG62F,YAAcr+F,EAAKq+F,aAErB72F,EAAG82F,aAAajrH,OACjBm0B,EAAG82F,aAAet+F,EAAKs+F,iBAK/Bj+G,IACAmnB,GAGExH,GAASq1F,EAAkB7tF,EAAIxH,IAAUyjG,IAC1Cj8F,EAAG+2F,eAAet6H,IAAS,IAAI4J,SAAQ/F,GAAYA,EAASuY,IACjE,GACD,CAAEwT,MAAO,SACL,KACH,MAAM+lG,EAAQuJ,EAAex+H,MAGvBg/H,EAAc/hH,EAAM3d,KACpBq/H,EAAeC,EAAgB5+H,MAC/Bi/H,EAAgBN,GAAgBA,EAAal9F,WAAWu9F,GAC9D,IAAKC,EACD,OAAOh3F,GAAc/iB,EAAM6I,QAAS,CAAEhJ,UAAWk6G,EAAehK,UAGpE,MAAMiK,EAAmBP,EAAa1hH,MAAM+hH,GACtCG,EAAaD,GACQ,IAArBA,EACIjK,EAAMjsH,OACsB,oBAArBk2H,EACHA,EAAiBjK,GACjBiK,EACR,KACA/lG,EAAmBhd,IAEjBA,EAAMR,UAAUgG,cAChBg9G,EAAalF,UAAUuF,GAAe,KAC1C,EAEErjH,EAAYuyG,EAAI7rF,EAAE48F,EAAeh7H,EAAO,CAAC,EAAGk7H,EAAYh6G,EAAO,CACjEgU,mBACA/f,IAAKylH,KAET,OAGA52F,GAAc/iB,EAAM6I,QAAS,CAAEhJ,UAAWpJ,EAAWs5G,WACjDt5G,CAAU,CAEtB,IAEJ,SAASssB,GAAcxM,EAAM90B,GACzB,IAAK80B,EACD,OAAO,KACX,MAAM2jG,EAAc3jG,EAAK90B,GACzB,OAA8B,IAAvBy4H,EAAYnjI,OAAemjI,EAAY,GAAKA,CACvD,CAMA,MAAMC,GAAaf,GAOnB,SAASgB,GAAa1wH,GAClB,MAAM67F,EAAUotB,GAAoBjpH,EAAQkpH,OAAQlpH,GAC9C2wH,EAAe3wH,EAAQkhH,YAAcA,GACrC0P,EAAmB5wH,EAAQyhH,gBAAkBA,GAC7CsE,EAAgB/lH,EAAQ2jH,QACxBkN,EAAexE,KACfyE,EAAsBzE,KACtB0E,EAAc1E,KACduB,EAAetO,EAAI50G,WAAW67G,IACpC,IAAIyK,EAAkBzK,GAElB5vB,GAAa32F,EAAQixH,gBAAkB,sBAAuBtN,UAC9DA,QAAQuN,kBAAoB,UAEhC,MAAMC,EAAkB3R,EAAcl/G,KAAK,MAAM8wH,GAAc,GAAKA,IAC9DC,EAAe7R,EAAcl/G,KAAK,KAAMwgH,GACxCwQ,EAEN9R,EAAcl/G,KAAK,KAAM/H,GACzB,SAASgxH,EAASgI,EAAelL,GAC7B,IAAIrpH,EACAi7G,EAQJ,OAPIqO,GAAYiL,IACZv0H,EAAS6+F,EAAQytB,iBAAiBiI,GAClCtZ,EAASoO,GAGTpO,EAASsZ,EAEN11B,EAAQ0tB,SAAStR,EAAQj7G,EACpC,CACA,SAASmtH,EAAYz5H,GACjB,MAAM8gI,EAAgB31B,EAAQytB,iBAAiB54H,GAC3C8gI,GACA31B,EAAQsuB,YAAYqH,EAE5B,CACA,SAASjH,IACL,OAAO1uB,EAAQ0uB,YAAYrxH,KAAIu4H,GAAgBA,EAAaxZ,QAChE,CACA,SAASyZ,EAAShhI,GACd,QAASmrG,EAAQytB,iBAAiB54H,EACtC,CACA,SAASyD,EAAQw9H,EAAaxQ,GAI1B,GADAA,EAAkB9rH,EAAO,CAAC,EAAG8rH,GAAmByM,EAAax8H,OAClC,kBAAhBugI,EAA0B,CACjC,MAAMC,EAAqB3Q,EAAS0P,EAAcgB,EAAaxQ,EAAgBl/F,MACzE8tG,EAAel0B,EAAQ1nG,QAAQ,CAAE8tB,KAAM2vG,EAAmB3vG,MAAQk/F,GAClE7pB,EAAOyuB,EAAcjD,WAAW8O,EAAmBhoB,UAEzD,OAAOv0G,EAAOu8H,EAAoB7B,EAAc,CAC5C31H,OAAQk3H,EAAavB,EAAa31H,QAClC00D,KAAMv2D,EAAOq5H,EAAmB9iE,MAChC03D,oBAAgBl1H,EAChBgmG,QAER,CACA,IAAIu6B,EAEJ,GAAwB,MAApBF,EAAY1vG,KACZ4vG,EAAkBx8H,EAAO,CAAC,EAAGs8H,EAAa,CACtC1vG,KAAMg/F,EAAS0P,EAAcgB,EAAY1vG,KAAMk/F,EAAgBl/F,MAAMA,WAGxE,CAED,MAAM6vG,EAAez8H,EAAO,CAAC,EAAGs8H,EAAYv3H,QAC5C,IAAK,MAAMpI,KAAO8/H,EACW,MAArBA,EAAa9/H,WACN8/H,EAAa9/H,GAI5B6/H,EAAkBx8H,EAAO,CAAC,EAAGs8H,EAAa,CACtCv3H,OAAQi3H,EAAaS,KAIzB3Q,EAAgB/mH,OAASi3H,EAAalQ,EAAgB/mH,OAC1D,CACA,MAAM21H,EAAel0B,EAAQ1nG,QAAQ09H,EAAiB1Q,GAChDryD,EAAO6iE,EAAY7iE,MAAQ,GAGjCihE,EAAa31H,OAAS+2H,EAAgBG,EAAavB,EAAa31H,SAChE,MAAMwvG,EAAW4X,EAAaoP,EAAkBv7H,EAAO,CAAC,EAAGs8H,EAAa,CACpE7iE,KAAM4xD,EAAW5xD,GACjB7sC,KAAM8tG,EAAa9tG,QAEjBq1E,EAAOyuB,EAAcjD,WAAWlZ,GACtC,OAAOv0G,EAAO,CACVu0G,WAGA96C,OACAsyD,MAMAwP,IAAqBnP,GACfqK,GAAe6F,EAAYvQ,OAC1BuQ,EAAYvQ,OAAS,CAAC,GAC9B2O,EAAc,CACbvJ,oBAAgBl1H,EAChBgmG,QAER,CACA,SAASy6B,EAAiB99F,GACtB,MAAqB,kBAAPA,EACRgtF,EAAS0P,EAAc18F,EAAI25F,EAAax8H,MAAM6wB,MAC9C5sB,EAAO,CAAC,EAAG4+B,EACrB,CACA,SAAS+9F,EAAwB/9F,EAAIxH,GACjC,GAAIukG,IAAoB/8F,EACpB,OAAO4yF,GAAkB,EAAyC,CAC9Dp6F,OACAwH,MAGZ,CACA,SAASlkC,EAAKkkC,GACV,OAAOg+F,EAAiBh+F,EAC5B,CACA,SAASnjC,EAAQmjC,GACb,OAAOlkC,EAAKsF,EAAO08H,EAAiB99F,GAAK,CAAEnjC,SAAS,IACxD,CACA,SAASohI,EAAqBj+F,GAC1B,MAAMk+F,EAAcl+F,EAAG+6B,QAAQ/6B,EAAG+6B,QAAQ3hE,OAAS,GACnD,GAAI8kI,GAAeA,EAAYxH,SAAU,CACrC,MAAM,SAAEA,GAAawH,EACrB,IAAIC,EAAwC,oBAAbzH,EAA0BA,EAAS12F,GAAM02F,EAWxE,MAViC,kBAAtByH,IACPA,EACIA,EAAkBv4H,SAAS,MAAQu4H,EAAkBv4H,SAAS,KACvDu4H,EAAoBL,EAAiBK,GAEpC,CAAEnwG,KAAMmwG,GAGpBA,EAAkBh4H,OAAS,CAAC,GAEzB/E,EAAO,CACV+rH,MAAOntF,EAAGmtF,MACVtyD,KAAM76B,EAAG66B,KAET10D,OAAkC,MAA1Bg4H,EAAkBnwG,KAAe,CAAC,EAAIgS,EAAG75B,QAClDg4H,EACP,CACJ,CACA,SAASH,EAAiBh+F,EAAIuyF,GAC1B,MAAM6L,EAAkBrB,EAAkB78H,EAAQ8/B,GAC5CxH,EAAOmhG,EAAax8H,MACpB2G,EAAOk8B,EAAG5Q,MACV06E,EAAQ9pE,EAAG8pE,MAEXjtG,GAAyB,IAAfmjC,EAAGnjC,QACbwhI,EAAiBJ,EAAqBG,GAC5C,GAAIC,EACA,OAAOL,EAAiB58H,EAAO08H,EAAiBO,GAAiB,CAC7DjvG,MAAiC,kBAAnBivG,EACRj9H,EAAO,CAAC,EAAG0C,EAAMu6H,EAAejvG,OAChCtrB,EACNgmG,QACAjtG,YAGJ01H,GAAkB6L,GAEtB,MAAME,EAAaF,EAEnB,IAAIG,EAYJ,OAbAD,EAAW/L,eAAiBA,GAEvBzoB,GAAS4jB,EAAoBiP,EAAkBnkG,EAAM4lG,KACtDG,EAAU3L,GAAkB,GAA2C,CAAE5yF,GAAIs+F,EAAY9lG,SAEzFgmG,GAAahmG,EAAMA,GAGnB,GAGA,KAEI+lG,EAAUn+H,QAAQF,QAAQq+H,GAAWpE,EAASmE,EAAY9lG,IAC7Dj4B,OAAOtD,GAAU41H,GAAoB51H,GAElC41H,GAAoB51H,EAAO,GACrBA,EACAwhI,EAAYxhI,GAElByhI,EAAazhI,EAAOqhI,EAAY9lG,KACnCpc,MAAMmiH,IACP,GAAIA,GACA,GAAI1L,GAAoB0L,EAAS,GAC7B,OAAOP,EAEP58H,EAAO,CAEHvE,WACDihI,EAAiBS,EAAQv+F,IAAK,CAC7B5Q,MAA6B,kBAAfmvG,EAAQv+F,GAChB5+B,EAAO,CAAC,EAAG0C,EAAMy6H,EAAQv+F,GAAG5Q,OAC5BtrB,EACNgmG,UAGJyoB,GAAkB+L,QAKtBC,EAAUI,EAAmBL,EAAY9lG,GAAM,EAAM37B,EAASiH,GAGlE,OADA86H,EAAiBN,EAAY9lG,EAAM+lG,GAC5BA,CAAO,GAEtB,CAMA,SAASM,EAAiC7+F,EAAIxH,GAC1C,MAAMv7B,EAAQ8gI,EAAwB/9F,EAAIxH,GAC1C,OAAOv7B,EAAQmD,QAAQH,OAAOhD,GAASmD,QAAQF,SACnD,CACA,SAASuiC,EAAev9B,GACpB,MAAM07B,EAAMk+F,GAAc9wH,SAAS6E,OAAO1V,MAE1C,OAAOyjC,GAAqC,oBAAvBA,EAAI6B,eACnB7B,EAAI6B,eAAev9B,GACnBA,GACV,CAEA,SAASi1H,EAASn6F,EAAIxH,GAClB,IAAI2gG,EACJ,MAAO4F,EAAgBC,EAAiBC,GAAmBC,GAAuBl/F,EAAIxH,GAEtF2gG,EAASF,GAAwB8F,EAAeI,UAAW,mBAAoBn/F,EAAIxH,GAEnF,IAAK,MAAMwrF,KAAU+a,EACjB/a,EAAO6S,YAAYxwH,SAAQ4mD,IACvBksE,EAAOr9H,KAAK88H,GAAiB3rE,EAAOjtB,EAAIxH,GAAM,IAGtD,MAAM4mG,EAA0BP,EAAiCxyH,KAAK,KAAM2zB,EAAIxH,GAGhF,OAFA2gG,EAAOr9H,KAAKsjI,GAEJC,GAAclG,GACjB/8G,MAAK,KAEN+8G,EAAS,GACT,IAAK,MAAMlsE,KAAS2vE,EAAargE,OAC7B48D,EAAOr9H,KAAK88H,GAAiB3rE,EAAOjtB,EAAIxH,IAG5C,OADA2gG,EAAOr9H,KAAKsjI,GACLC,GAAclG,EAAO,IAE3B/8G,MAAK,KAEN+8G,EAASF,GAAwB+F,EAAiB,oBAAqBh/F,EAAIxH,GAC3E,IAAK,MAAMwrF,KAAUgb,EACjBhb,EAAO8S,aAAazwH,SAAQ4mD,IACxBksE,EAAOr9H,KAAK88H,GAAiB3rE,EAAOjtB,EAAIxH,GAAM,IAKtD,OAFA2gG,EAAOr9H,KAAKsjI,GAELC,GAAclG,EAAO,IAE3B/8G,MAAK,KAEN+8G,EAAS,GACT,IAAK,MAAMnV,KAAUib,EAEjB,GAAIjb,EAAOzxF,YACP,GAAIt3B,EAAQ+oH,EAAOzxF,aACf,IAAK,MAAMA,KAAeyxF,EAAOzxF,YAC7B4mG,EAAOr9H,KAAK88H,GAAiBrmG,EAAayN,EAAIxH,SAGlD2gG,EAAOr9H,KAAK88H,GAAiB5U,EAAOzxF,YAAayN,EAAIxH,IAMjE,OAFA2gG,EAAOr9H,KAAKsjI,GAELC,GAAclG,EAAO,IAE3B/8G,MAAK,KAGN4jB,EAAG+6B,QAAQ10D,SAAQ29G,GAAWA,EAAO+S,eAAiB,CAAC,IAEvDoC,EAASF,GAAwBgG,EAAiB,mBAAoBj/F,EAAIxH,EAAMiK,GAChF02F,EAAOr9H,KAAKsjI,GAELC,GAAclG,MAEpB/8G,MAAK,KAEN+8G,EAAS,GACT,IAAK,MAAMlsE,KAAS4vE,EAAoBtgE,OACpC48D,EAAOr9H,KAAK88H,GAAiB3rE,EAAOjtB,EAAIxH,IAG5C,OADA2gG,EAAOr9H,KAAKsjI,GACLC,GAAclG,EAAO,IAG3B54H,OAAMqa,GAAOi4G,GAAoBj4G,EAAK,GACrCA,EACAxa,QAAQH,OAAO2a,IACzB,CACA,SAASgkH,EAAiB5+F,EAAIxH,EAAM+lG,GAGhCzB,EACKvgE,OACAl2D,SAAQ4mD,GAASxqB,GAAe,IAAMwqB,EAAMjtB,EAAIxH,EAAM+lG,MAC/D,CAMA,SAASI,EAAmBL,EAAY9lG,EAAM8mG,EAAQziI,EAASiH,GAE3D,MAAM7G,EAAQ8gI,EAAwBO,EAAY9lG,GAClD,GAAIv7B,EACA,OAAOA,EAEX,MAAMsiI,EAAoB/mG,IAAS85F,GAC7BljG,EAASszE,EAAiBgtB,QAAQtgG,MAAb,CAAC,EAGxBkwG,IAGIziI,GAAW0iI,EACXzN,EAAcj1H,QAAQyhI,EAAW3oB,SAAUv0G,EAAO,CAC9Co5D,OAAQ+kE,GAAqBnwG,GAASA,EAAMorC,QAC7C12D,IAEHguH,EAAch2H,KAAKwiI,EAAW3oB,SAAU7xG,IAGhD61H,EAAax8H,MAAQmhI,EACrBE,GAAaF,EAAY9lG,EAAM8mG,EAAQC,GACvCd,GACJ,CACA,IAAIe,EAEJ,SAASC,IAEDD,IAEJA,EAAwB1N,EAAchB,QAAO,CAAC9wF,EAAI0/F,EAAOzgI,KACrD,IAAKy6H,GAAOiG,UACR,OAEJ,MAAMrB,EAAap+H,EAAQ8/B,GAIrBq+F,EAAiBJ,EAAqBK,GAC5C,GAAID,EAEA,YADAL,EAAiB58H,EAAOi9H,EAAgB,CAAExhI,SAAS,IAASyhI,GAAY/9H,MAAMmpE,GAGlFqzD,EAAkBuB,EAClB,MAAM9lG,EAAOmhG,EAAax8H,MAEtBulG,GACAktB,EAAmBJ,EAAah3F,EAAKm9E,SAAU12G,EAAKwwH,OAAQR,KAEhEkL,EAASmE,EAAY9lG,GAChBj4B,OAAOtD,GACJ41H,GAAoB51H,EAAO,IACpBA,EAEP41H,GAAoB51H,EAAO,IAU3B+gI,EAAiB/gI,EAAM+iC,GAAIs+F,GAGtBliH,MAAKmiH,IAIF1L,GAAoB0L,EAAS,MAE5Bt/H,EAAKwwH,OACNxwH,EAAK6B,OAASytH,EAAe5kH,KAC7BmoH,EAAcF,IAAI,GAAG,EACzB,IAECrxH,MAAMmpE,GAEJtpE,QAAQH,WAGfhB,EAAKwwH,OACLqC,EAAcF,IAAI3yH,EAAKwwH,OAAO,GAG3BiP,EAAazhI,EAAOqhI,EAAY9lG,MAEtCpc,MAAMmiH,IACPA,EACIA,GACII,EAEAL,EAAY9lG,GAAM,GAEtB+lG,IACIt/H,EAAKwwH,QAGJoD,GAAoB0L,EAAS,GAC9BzM,EAAcF,IAAI3yH,EAAKwwH,OAAO,GAEzBxwH,EAAK6B,OAASytH,EAAe5kH,KAClCkpH,GAAoB0L,EAAS,KAG7BzM,EAAcF,IAAI,GAAG,IAG7BgN,EAAiBN,EAAY9lG,EAAM+lG,EAAQ,IAG1Ch+H,MAAMmpE,EAAK,IAExB,CAEA,IAEIk2D,EAFAC,EAAgBzH,KAChB0H,EAAiB1H,KAUrB,SAASsG,EAAazhI,EAAO+iC,EAAIxH,GAC7BimG,EAAYxhI,GACZ,MAAMs/D,EAAOujE,EAAevjE,OAQ5B,OAPIA,EAAKnjE,OACLmjE,EAAKl2D,SAAQmZ,GAAWA,EAAQviB,EAAO+iC,EAAIxH,KAG3Cx7B,QAAQC,MAAMA,GAGXmD,QAAQH,OAAOhD,EAC1B,CACA,SAAS8iI,IACL,OAAIH,GAASjG,EAAax8H,QAAUm1H,GACzBlyH,QAAQF,UACZ,IAAIE,SAAQ,CAACF,EAASD,KACzB4/H,EAAchuH,IAAI,CAAC3R,EAASD,GAAQ,GAE5C,CACA,SAASw+H,EAAY7jH,GAUjB,OATKglH,IAEDA,GAAShlH,EACT6kH,IACAI,EACKtjE,OACAl2D,SAAQ,EAAEnG,EAASD,KAAa2a,EAAM3a,EAAO2a,GAAO1a,MACzD2/H,EAAc74H,SAEX4T,CACX,CAEA,SAAS4jH,GAAax+F,EAAIxH,EAAM8mG,EAAQC,GACpC,MAAM,eAAEvC,GAAmBjxH,EAC3B,IAAK22F,IAAcs6B,EACf,OAAO58H,QAAQF,UACnB,MAAM2vH,GAAmByP,GAAUxP,GAAuBN,EAAaxvF,EAAG21E,SAAU,MAC9E4pB,IAAsBD,IACpB5P,QAAQtgG,OACRsgG,QAAQtgG,MAAMorC,QAClB,KACJ,OAAO6wD,EAAIlvG,WACNC,MAAK,IAAM4gH,EAAeh9F,EAAIxH,EAAMq3F,KACpCzzG,MAAKy2C,GAAYA,GAAYu8D,EAAiBv8D,KAC9CtyD,OAAMqa,GAAO8jH,EAAa9jH,EAAKolB,EAAIxH,IAC5C,CACA,MAAMo5F,GAAMnC,GAAUqC,EAAcF,GAAGnC,GACvC,IAAIuQ,GACJ,MAAMlB,GAAgB,IAAIlwH,IACpB8qH,GAAS,CACXC,eACAgG,WAAW,EACXrK,WACAY,cACAuH,WACAnH,YACAp2H,UACA6L,UACAjQ,OACAe,UACA+0H,MACAjB,KAAM,IAAMiB,IAAI,GAChBlB,QAAS,IAAMkB,GAAG,GAClBqO,WAAYrD,EAAa/qH,IACzBquH,cAAerD,EAAoBhrH,IACnCsuH,UAAWrD,EAAYjrH,IACvBiiB,QAASgsG,EAAejuH,IACxBkuH,UACA,OAAA79F,CAAQtB,GACJ,MAAM84F,EAASj/H,KACfmmC,EAAI9nB,UAAU,aAAcmiH,IAC5Br6F,EAAI9nB,UAAU,aAAc0jH,IAC5B57F,EAAI7gC,OAAOo7B,iBAAiBilG,QAAU1G,EACtCl8H,OAAO69B,eAAeuF,EAAI7gC,OAAOo7B,iBAAkB,SAAU,CACzD6B,YAAY,EACZrxB,IAAK,IAAM0/G,EAAIr0G,MAAM2iH,KAKrBj3B,IAGCs9B,IACDrG,EAAax8H,QAAUm1H,KAEvB0N,IAAU,EACVlkI,EAAKg2H,EAAc1uB,UAAU7iG,OAAMqa,SAGvC,MAAMylH,EAAgB,CAAC,EACvB,IAAK,MAAMtiI,KAAOu0H,GACd90H,OAAO69B,eAAeglG,EAAetiI,EAAK,CACtC4N,IAAK,IAAMguH,EAAax8H,MAAMY,GAC9Bi/B,YAAY,IAGpB4D,EAAIjD,QAAQs6F,GAAWyB,GACvB94F,EAAIjD,QAAQu6F,GAAkB7M,EAAI/2G,gBAAgB+rH,IAClDz/F,EAAIjD,QAAQw6F,GAAuBwB,GACnC,MAAM2G,EAAa1/F,EAAIvY,QACvBy2G,GAAcjtH,IAAI+uB,GAClBA,EAAIvY,QAAU,WACVy2G,GAAclzH,OAAOg1B,GAEjBk+F,GAAcjzH,KAAO,IAErBkxH,EAAkBzK,GAClBkN,GAAyBA,IACzBA,EAAwB,KACxB7F,EAAax8H,MAAQm1H,GACrB0N,IAAU,EACVJ,GAAQ,GAEZU,GACJ,CACJ,GAGJ,SAASjB,GAAclG,GACnB,OAAOA,EAAO18F,QAAO,CAACt8B,EAAS8sD,IAAU9sD,EAAQic,MAAK,IAAMqmB,EAAewqB,MAAS7sD,QAAQF,UAChG,CACA,OAAOw5H,EACX,CACA,SAASwF,GAAuBl/F,EAAIxH,GAChC,MAAMumG,EAAiB,GACjBC,EAAkB,GAClBC,EAAkB,GAClBzrF,EAAMzC,KAAK3b,IAAIoD,EAAKuiC,QAAQ3hE,OAAQ4mC,EAAG+6B,QAAQ3hE,QACrD,IAAK,IAAID,EAAI,EAAGA,EAAIq6C,EAAKr6C,IAAK,CAC1B,MAAMonI,EAAa/nG,EAAKuiC,QAAQ5hE,GAC5BonI,IACIvgG,EAAG+6B,QAAQuG,MAAK0iD,GAAU6J,EAAkB7J,EAAQuc,KACpDvB,EAAgBljI,KAAKykI,GAErBxB,EAAejjI,KAAKykI,IAE5B,MAAMC,EAAWxgG,EAAG+6B,QAAQ5hE,GACxBqnI,IAEKhoG,EAAKuiC,QAAQuG,MAAK0iD,GAAU6J,EAAkB7J,EAAQwc,MACvDvB,EAAgBnjI,KAAK0kI,GAGjC,CACA,MAAO,CAACzB,EAAgBC,EAAiBC,EAC7C,CAMA,SAASwB,KACL,OAAOpV,EAAIp/F,OAAOgsG,GACtB,CAKA,SAASyI,KACL,OAAOrV,EAAIp/F,OAAOisG,GACtB,CAEAz+B,EAAQwhC,WAAaA,GACrBxhC,EAAQ+iC,WAAaA,GACrB/iC,EAAQknC,eAAiBrO,GACzB74B,EAAQs4B,oBAAsBA,GAC9Bt4B,EAAQgjC,aAAeA,GACvBhjC,EAAQu7B,oBAAsBA,GAC9Bv7B,EAAQy4B,qBAAuBA,GAC/Bz4B,EAAQg4B,iBAAmBA,GAC3Bh4B,EAAQo5B,oBAAsBA,GAC9Bp5B,EAAQ+/B,kBAAoBA,GAC5B//B,EAAQs+B,gBAAkBA,GAC1Bt+B,EAAQ8+B,mBAAqBA,GAC7B9+B,EAAQi/B,oBAAsBA,GAC9Bj/B,EAAQwzB,WAAaA,GACrBxzB,EAAQy+B,iBAAmBA,GAC3Bz+B,EAAQw+B,UAAYA,GACpBx+B,EAAQ0+B,sBAAwBA,GAChC1+B,EAAQ+zB,eAAiBA,GACzB/zB,EAAQggC,QAAUA,GAClBhgC,EAAQinC,SAAWA,GACnBjnC,EAAQgnC,UAAYA,GACpBhnC,EAAQu+B,aAAeA,E,uOCp2FvB,MAAM4I,EAAgBA,CAACpyH,EAAQqyH,IAAiBA,EAAav9G,MAAMjqB,GAAMmV,aAAkBnV,IAE3F,IAAIynI,EACAC,EAEJ,SAASC,IACL,OAAQF,IACHA,EAAoB,CACjBG,YACAC,eACAC,SACAC,UACAC,gBAEZ,CAEA,SAASC,IACL,OAAQP,IACHA,EAAuB,CACpBK,UAAU79H,UAAUg+H,QACpBH,UAAU79H,UAAUi+H,SACpBJ,UAAU79H,UAAUk+H,oBAEhC,CACA,MAAMC,EAAmB,IAAIn0H,QACvBo0H,EAAqB,IAAIp0H,QACzBq0H,EAA2B,IAAIr0H,QAC/Bs0H,EAAiB,IAAIt0H,QACrBu0H,EAAwB,IAAIv0H,QAClC,SAASw0H,EAAiBt/H,GACtB,MAAMtC,EAAU,IAAIC,SAAQ,CAACF,EAASD,KAClC,MAAM+hI,EAAWA,KACbv/H,EAAQg9C,oBAAoB,UAAWwiF,GACvCx/H,EAAQg9C,oBAAoB,QAASxiD,EAAM,EAEzCglI,EAAUA,KACZ/hI,EAAQwR,EAAKjP,EAAQG,SACrBo/H,GAAU,EAER/kI,EAAQA,KACVgD,EAAOwC,EAAQxF,OACf+kI,GAAU,EAEdv/H,EAAQk9C,iBAAiB,UAAWsiF,GACpCx/H,EAAQk9C,iBAAiB,QAAS1iD,EAAM,IAe5C,OAbAkD,EACKic,MAAMjf,IAGHA,aAAiBikI,WACjBM,EAAiB50H,IAAI3P,EAAOsF,EAChC,IAGClC,OAAM,SAGXuhI,EAAsBh1H,IAAI3M,EAASsC,GAC5BtC,CACX,CACA,SAAS+hI,EAA+BC,GAEpC,GAAIR,EAAmBvxH,IAAI+xH,GACvB,OACJ,MAAMrvH,EAAO,IAAI1S,SAAQ,CAACF,EAASD,KAC/B,MAAM+hI,EAAWA,KACbG,EAAG1iF,oBAAoB,WAAYq9B,GACnCqlD,EAAG1iF,oBAAoB,QAASxiD,GAChCklI,EAAG1iF,oBAAoB,QAASxiD,EAAM,EAEpC6/E,EAAWA,KACb58E,IACA8hI,GAAU,EAER/kI,EAAQA,KACVgD,EAAOkiI,EAAGllI,OAAS,IAAIotH,aAAa,aAAc,eAClD2X,GAAU,EAEdG,EAAGxiF,iBAAiB,WAAYm9B,GAChCqlD,EAAGxiF,iBAAiB,QAAS1iD,GAC7BklI,EAAGxiF,iBAAiB,QAAS1iD,EAAM,IAGvC0kI,EAAmB70H,IAAIq1H,EAAIrvH,EAC/B,CACA,IAAIsvH,EAAgB,CAChBz2H,GAAAA,CAAIrO,EAAQM,EAAM6R,GACd,GAAInS,aAAkB+jI,eAAgB,CAElC,GAAa,SAATzjI,EACA,OAAO+jI,EAAmBh2H,IAAIrO,GAElC,GAAa,qBAATM,EACA,OAAON,EAAO+kI,kBAAoBT,EAAyBj2H,IAAIrO,GAGnE,GAAa,UAATM,EACA,OAAO6R,EAAS4yH,iBAAiB,QAC3BhlI,EACAoS,EAAS6yH,YAAY7yH,EAAS4yH,iBAAiB,GAE7D,CAEA,OAAO3wH,EAAKpU,EAAOM,GACvB,EACAkP,GAAAA,CAAIxP,EAAQM,EAAMT,GAEd,OADAG,EAAOM,GAAQT,GACR,CACX,EACAiT,GAAAA,CAAI9S,EAAQM,GACR,OAAIN,aAAkB+jI,iBACR,SAATzjI,GAA4B,UAATA,IAGjBA,KAAQN,CACnB,GAEJ,SAASilI,EAAajiI,GAClB8hI,EAAgB9hI,EAAS8hI,EAC7B,CACA,SAASn1D,EAAas0C,GAIlB,OAAIA,IAAS0f,YAAY19H,UAAUi/H,aAC7B,qBAAsBnB,eAAe99H,UAYvC+9H,IAA0B17H,SAAS27G,GAC5B,YAAaryG,GAIhB,OADAqyG,EAAKlyG,MAAMozH,EAAOhoI,MAAOyU,GAClBwC,EAAKgwH,EAAiB/1H,IAAIlR,MACrC,EAEG,YAAayU,GAGhB,OAAOwC,EAAK6vG,EAAKlyG,MAAMozH,EAAOhoI,MAAOyU,GACzC,EAvBW,SAAUwzH,KAAexzH,GAC5B,MAAMizH,EAAK5gB,EAAKz8G,KAAK29H,EAAOhoI,MAAOioI,KAAexzH,GAElD,OADA0yH,EAAyB90H,IAAIq1H,EAAIO,EAAW/kH,KAAO+kH,EAAW/kH,OAAS,CAAC+kH,IACjEhxH,EAAKywH,EAChB,CAoBR,CACA,SAASQ,EAAuBxlI,GAC5B,MAAqB,oBAAVA,EACA8vE,EAAa9vE,IAGpBA,aAAiBkkI,gBACjBa,EAA+B/kI,GAC/ByjI,EAAczjI,EAAO6jI,KACd,IAAIlsH,MAAM3X,EAAOilI,GAErBjlI,EACX,CACA,SAASuU,EAAKvU,GAGV,GAAIA,aAAiBylI,WACjB,OAAOb,EAAiB5kI,GAG5B,GAAI0kI,EAAezxH,IAAIjT,GACnB,OAAO0kI,EAAel2H,IAAIxO,GAC9B,MAAM0Q,EAAW80H,EAAuBxlI,GAOxC,OAJI0Q,IAAa1Q,IACb0kI,EAAe/0H,IAAI3P,EAAO0Q,GAC1Bi0H,EAAsBh1H,IAAIe,EAAU1Q,IAEjC0Q,CACX,CACA,MAAM40H,EAAUtlI,GAAU2kI,EAAsBn2H,IAAIxO,GC5KpD,SAAS0lI,EAAOpmI,EAAMslC,GAAS,QAAE+gG,EAAO,QAAEC,EAAO,SAAEC,EAAQ,WAAEC,GAAe,CAAC,GACzE,MAAMxgI,EAAUJ,UAAUK,KAAKjG,EAAMslC,GAC/BmhG,EAAcxxH,EAAKjP,GAoBzB,OAnBIsgI,GACAtgI,EAAQk9C,iBAAiB,iBAAkBthC,IACvC0kH,EAAQrxH,EAAKjP,EAAQG,QAASyb,EAAM8kH,WAAY9kH,EAAM+kH,WAAY1xH,EAAKjP,EAAQ+/H,aAAcnkH,EAAM,IAGvGykH,GACArgI,EAAQk9C,iBAAiB,WAAYthC,GAAUykH,EAE/CzkH,EAAM8kH,WAAY9kH,EAAM+kH,WAAY/kH,KAExC6kH,EACK9mH,MAAMinH,IACHJ,GACAI,EAAG1jF,iBAAiB,SAAS,IAAMsjF,MACnCD,GACAK,EAAG1jF,iBAAiB,iBAAkBthC,GAAU2kH,EAAS3kH,EAAM8kH,WAAY9kH,EAAM+kH,WAAY/kH,IACjG,IAEC9d,OAAM,SACJ2iI,CACX,CAgBA,MAAMI,EAAc,CAAC,MAAO,SAAU,SAAU,aAAc,SACxDC,EAAe,CAAC,MAAO,MAAO,SAAU,SACxCC,EAAgB,IAAIn2H,IAC1B,SAAS82G,EAAU7mH,EAAQM,GACvB,KAAMN,aAAkB2jI,cAClBrjI,KAAQN,GACM,kBAATM,EACP,OAEJ,GAAI4lI,EAAc73H,IAAI/N,GAClB,OAAO4lI,EAAc73H,IAAI/N,GAC7B,MAAM6lI,EAAiB7lI,EAAKf,QAAQ,aAAc,IAC5C6mI,EAAW9lI,IAAS6lI,EACpBE,EAAUJ,EAAa39H,SAAS69H,GACtC,KAEEA,KAAmBC,EAAWvC,SAAWD,gBAAgB39H,aACrDogI,IAAWL,EAAY19H,SAAS69H,GAClC,OAEJ,MAAMlxH,EAASi+F,eAAgBozB,KAAc10H,GAEzC,MAAMizH,EAAK1nI,KAAK+nI,YAAYoB,EAAWD,EAAU,YAAc,YAC/D,IAAIrmI,EAAS6kI,EAAG3f,MAQhB,OAPIkhB,IACApmI,EAASA,EAAO0L,MAAMkG,EAAKvC,iBAMjBvM,QAAQy6G,IAAI,CACtBv9G,EAAOmmI,MAAmBv0H,GAC1By0H,GAAWxB,EAAGrvH,QACd,EACR,EAEA,OADA0wH,EAAc12H,IAAIlP,EAAM2U,GACjBA,CACX,CACAgwH,GAAcsB,IAAQ,IACfA,EACHl4H,IAAKA,CAACrO,EAAQM,EAAM6R,IAAa00G,EAAU7mH,EAAQM,IAASimI,EAASl4H,IAAIrO,EAAQM,EAAM6R,GACvFW,IAAKA,CAAC9S,EAAQM,MAAWumH,EAAU7mH,EAAQM,IAASimI,EAASzzH,IAAI9S,EAAQM;;;;;;;;;;;;;;;;;MClEhEkmI,EACXtnI,WAAAA,CAA6BkqB,GAAA,KAASA,UAATA,C,CAG7Bq9G,qBAAAA,GACE,MAAMC,EAAYvpI,KAAKisB,UAAUu9G,eAGjC,OAAOD,EACJ/+H,KAAIi/H,IACH,GAAIC,EAAyBD,GAAW,CACtC,MAAMvgI,EAAUugI,EAASE,eACzB,MAAO,GAAGzgI,EAAQ0gI,WAAW1gI,EAAQo+B,S,CAErC,OAAO,I,IAGVjzB,QAAOw1H,GAAaA,IACpBrqI,KAAK,I,EAWZ,SAASkqI,EAAyBD,GAChC,MAAMprH,EAAYorH,EAASK,eAC3B,MAAsB,aAAf,OAAAzrH,QAAS,IAATA,OAAS,EAATA,EAAWhY,KACpB,C,oCCtCa0jI,EAAS,IAAIC,EAAAA,GAAO,iB,2sBC+BpBC,GAAqB,YAErBC,GAAsB,CACjC,CAACC,GAAU,YACX,CAACC,GAAgB,mBACjB,CAACC,GAAgB,iBACjB,CAACC,GAAsB,wBACvB,CAACC,GAAe,iBAChB,CAACC,GAAqB,wBACtB,CAACC,GAAW,YACZ,CAACC,GAAiB,mBAClB,CAACC,GAAe,YAChB,CAACC,GAAkB,oBACnB,CAACC,GAAqB,mBACtB,CAACC,GAAgB,UACjB,CAACC,GAAsB,iBACvB,CAACC,GAAoB,WACrB,CAACC,GAA0B,kBAC3B,CAACC,GAAgB,WACjB,CAACC,GAAsB,kBACvB,CAACC,GAAkB,YACnB,CAACC,GAAwB,mBACzB,CAACC,GAAmB,UACpB,CAACC,GAAyB,iBAC1B,CAACC,IAAc,WACf,CAACC,IAAoB,kBACrB,CAACC,IAAgB,WACjB,CAACC,IAAsB,kBACvB,CAACC,IAAa,cACd,UAAW,UACX,CAAC5pI,IAAc,eCjDJ6pI,GAAQ,IAAIj5H,IAKZk5H,GAAc,IAAIl5H,IAQlBm5H,GAAc,IAAIn5H,IAOf,SAAAo5H,GACd7lG,EACA9nB,GAEA,IACG8nB,EAAwBla,UAAUggH,aAAa5tH,E,CAChD,MAAO/b,GACPynI,EAAOmC,MACL,aAAa7tH,EAAUrc,4CAA4CmkC,EAAInkC,OACvEM,E,CAGN,CAoBM,SAAU6pI,GACd9tH,GAEA,MAAM+tH,EAAgB/tH,EAAUrc,KAChC,GAAI+pI,GAAYp2H,IAAIy2H,GAKlB,OAJArC,EAAOmC,MACL,sDAAsDE,OAGjD,EAGTL,GAAY15H,IAAI+5H,EAAe/tH,GAG/B,IAAK,MAAM8nB,KAAO0lG,GAAMt4H,SACtBy4H,GAAc7lG,EAAwB9nB,GAGxC,IAAK,MAAMguH,KAAaP,GAAYv4H,SAClCy4H,GAAcK,EAAoChuH,GAGpD,OAAO,CACT,CAWgB,SAAAiuH,GACdnmG,EACAnkC,GAEA,MAAMuqI,EAAuBpmG,EAAwBla,UAClDugH,YAAY,aACZ7C,aAAa,CAAE1Q,UAAU,IAI5B,OAHIsT,GACGA,EAAoBE,mBAEnBtmG,EAAwBla,UAAUugH,YAAYxqI,EACxD;;;;;;;;;;;;;;;;;AC7FA,MAAM0qI,GAA6B,CACjC,CAAC,UACC,6EAEF,CAAC,gBAAwB,iCACzB,CAAC,iBACC,kFACF,CAAC,eAAuB,kDACxB,CAAC,sBAA8B,uCAC/B,CAAC,cACC,0EACF,CAAC,wBACC,6EAEF,CAAC,wBACC,wDACF,CAAC,YACC,gFACF,CAAC,WACC,qFACF,CAAC,WACC,mFACF,CAAC,cACC,sFACF,CAAC,uCACC,0GACF,CAAC,kCACC,6DAgBSC,GAAgB,IAAI3jI,EAAAA,GAC/B,MACA,WACA0jI;;;;;;;;;;;;;;;;;MCrDWE,GAcX7qI,WAAAA,CACEuP,EACAhM,EACA2mB,GANQ,KAAU4gH,YAAG,EAQrB7sI,KAAKujE,SAAgBxgE,OAAA4D,OAAA,GAAA2K,GACrBtR,KAAKy1E,QAAe1yE,OAAA4D,OAAA,GAAArB,GACpBtF,KAAK8sI,MAAQxnI,EAAOtD,KACpBhC,KAAK+sI,gCACHznI,EAAO0nI,+BACThtI,KAAKmnC,WAAalb,EAClBjsB,KAAKisB,UAAUggH,aACb,IAAIxkH,EAAAA,GAAU,OAAO,IAAMznB,MAAM,U,CAIrC,kCAAIgtI,GAEF,OADAhtI,KAAKitI,iBACEjtI,KAAK+sI,+B,CAGd,kCAAIC,CAA+BxvH,GACjCxd,KAAKitI,iBACLjtI,KAAK+sI,gCAAkCvvH,C,CAGzC,QAAIxb,GAEF,OADAhC,KAAKitI,iBACEjtI,KAAK8sI,K,CAGd,WAAIx7H,GAEF,OADAtR,KAAKitI,iBACEjtI,KAAKujE,Q,CAGd,UAAIj+D,GAEF,OADAtF,KAAKitI,iBACEjtI,KAAKy1E,O,CAGd,aAAIxpD,GACF,OAAOjsB,KAAKmnC,U,CAGd,aAAI+lG,GACF,OAAOltI,KAAK6sI,U,CAGd,aAAIK,CAAU1vH,GACZxd,KAAK6sI,WAAarvH,C,CAOVyvH,cAAAA,GACR,GAAIjtI,KAAKktI,UACP,MAAMP,GAAc1jI,OAAO,cAAsB,CAAEkkI,QAASntI,KAAK8sI,O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtChE,MAAM9uI,GAAcspC,G,SAoEX8lG,GACd7pE,EACA8pE,EAAY,CAAC,GAEb,IAAI/7H,EAAUiyD,EAEd,GAAyB,kBAAd8pE,EAAwB,CACjC,MAAMrrI,EAAOqrI,EACbA,EAAY,CAAErrI,O,CAGhB,MAAMsD,EAAMvC,OAAA4D,OAAA,CACV3E,KAAMioI,GACN+C,gCAAgC,GAC7BK,GAECrrI,EAAOsD,EAAOtD,KAEpB,GAAoB,kBAATA,IAAsBA,EAC/B,MAAM2qI,GAAc1jI,OAA8B,gBAChDkkI,QAASjuI,OAAO8C,KAMpB,GAFAsP,IAAAA,GAAYjM,EAAAA,EAAAA,QAEPiM,EACH,MAAMq7H,GAAc1jI,OAAO,cAG7B,MAAMqkI,EAAczB,GAAM36H,IAAIlP,GAC9B,GAAIsrI,EAAa,CAEf,IACE1iI,EAAAA,EAAAA,IAAU0G,EAASg8H,EAAYh8H,WAC/B1G,EAAAA,EAAAA,IAAUtF,EAAQgoI,EAAYhoI,QAE9B,OAAOgoI,EAEP,MAAMX,GAAc1jI,OAA+B,iBAAEkkI,QAASnrI,G,CAIlE,MAAMiqB,EAAY,IAAIshH,EAAAA,GAAmBvrI,GACzC,IAAK,MAAMqc,KAAa0tH,GAAYx4H,SAClC0Y,EAAUggH,aAAa5tH,GAGzB,MAAMmvH,EAAS,IAAIZ,GAAgBt7H,EAAShM,EAAQ2mB,GAIpD,OAFA4/G,GAAMx5H,IAAIrQ,EAAMwrI,GAETA,CACT,CAuJgB,SAAAC,GAAOzrI,EAAeioI,IACpC,MAAM9jG,EAAM0lG,GAAM36H,IAAIlP,GACtB,IAAKmkC,GAAOnkC,IAASioI,KAAsB5kI,EAAAA,EAAAA,MACzC,OAAO+nI,KAET,IAAKjnG,EACH,MAAMwmG,GAAc1jI,OAAwB,UAAEkkI,QAASnrI,IAGzD,OAAOmkC,CACT,C,SA2DgBunG,GACdC,EACArmG,EACAsmG,G,MAIA,IAAIhE,EAAmD,QAAzCjlI,EAAAulI,GAAoByD,UAAqB,IAAAhpI,EAAAA,EAAAgpI,EACnDC,IACFhE,GAAW,IAAIgE,KAEjB,MAAMC,EAAkBjE,EAAQxlI,MAAM,SAChC0pI,EAAkBxmG,EAAQljC,MAAM,SACtC,GAAIypI,GAAmBC,EAAiB,CACtC,MAAMC,EAAU,CACd,+BAA+BnE,oBAA0BtiG,OAgB3D,OAdIumG,GACFE,EAAQ1sI,KACN,iBAAiBuoI,sDAGjBiE,GAAmBC,GACrBC,EAAQ1sI,KAAK,OAEXysI,GACFC,EAAQ1sI,KACN,iBAAiBimC,2DAGrByiG,EAAO9qH,KAAK8uH,EAAQvuI,KAAK,K,CAG3B2sI,GACE,IAAI1kH,EAAAA,GACF,GAAGmiH,aACH,KAAM,CAAGA,UAAStiG,aAAU,WAIlC;;;;;;;;;;;;;;;;;ACraA,MAAM0mG,GAAU,8BACVC,GAAa,EACbC,GAAa,2BASnB,IAAIC,GAAiD,KACrD,SAASC,KA2BP,OA1BKD,KACHA,GAAY/F,EAAc4F,GAASC,GAAY,CAC7C3F,QAASA,CAACM,EAAIF,KAMZ,OAAQA,GACN,KAAK,EACH,IACEE,EAAGyF,kBAAkBH,G,CACrB,MAAO5rI,GAIPC,QAAQ0c,KAAK3c,E,MAIpBwD,OAAMxD,IACP,MAAMqqI,GAAc1jI,OAA0B,YAC5CqlI,qBAAsBhsI,EAAEnE,SACxB,KAGCgwI,EACT,CAEOp4B,eAAew4B,GACpBpoG,GAEA,IACE,MAAMyiG,QAAWwF,KACX1G,EAAKkB,EAAGb,YAAYmG,IACpB/lI,QAAeu/H,EAAGG,YAAYqG,IAAYh9H,IAAIs9H,GAAWroG,IAI/D,aADMuhG,EAAGrvH,KACFlQ,C,CACP,MAAO7F,GACP,GAAIA,aAAamG,EAAAA,EACfshI,EAAO9qH,KAAK3c,EAAEnE,aACT,CACL,MAAMswI,EAAc9B,GAAc1jI,OAAyB,WACzDqlI,qBAAkC,OAAXhsI,QAAA,IAAAA,OAAA,EAAAA,EAAanE,UAEtC4rI,EAAO9qH,KAAKwvH,EAAYtwI,Q,EAG9B,CAEO43G,eAAe24B,GACpBvoG,EACAwoG,GAEA,IACE,MAAM/F,QAAWwF,KACX1G,EAAKkB,EAAGb,YAAYmG,GAAY,aAChCrG,EAAcH,EAAGG,YAAYqG,UAC7BrG,EAAY+G,IAAID,EAAiBH,GAAWroG,UAC5CuhG,EAAGrvH,I,CACT,MAAO/V,GACP,GAAIA,aAAamG,EAAAA,EACfshI,EAAO9qH,KAAK3c,EAAEnE,aACT,CACL,MAAMswI,EAAc9B,GAAc1jI,OAA2B,WAC3DqlI,qBAAkC,OAAXhsI,QAAA,IAAAA,OAAA,EAAAA,EAAanE,UAEtC4rI,EAAO9qH,KAAKwvH,EAAYtwI,Q,EAG9B,CAEA,SAASqwI,GAAWroG,GAClB,MAAO,GAAGA,EAAInkC,QAAQmkC,EAAI70B,QAAQu9H,OACpC;;;;;;;;;;;;;;;;GC5EA,MAAMC,GAAmB,KAEnBC,GAAwC,O,MAEjCC,GAyBXjtI,WAAAA,CAA6BkqB,GAAA,KAASA,UAATA,EAT7B,KAAgBgjH,iBAAiC,KAU/C,MAAM9oG,EAAMnmC,KAAKisB,UAAUugH,YAAY,OAAO7C,eAC9C3pI,KAAKkvI,SAAW,IAAIC,GAAqBhpG,GACzCnmC,KAAKovI,wBAA0BpvI,KAAKkvI,SAASv4E,OAAOh1C,MAAKxZ,IACvDnI,KAAKivI,iBAAmB9mI,EACjBA,I,CAWX,sBAAMskI,G,QACJ,IACE,MAAM4C,EAAiBrvI,KAAKisB,UACzBugH,YAAY,mBACZ7C,eAIG2F,EAAQD,EAAe/F,wBACvBiG,EAAOC,KACb,GAAyC,OAAhB,QAArB7qI,EAAA3E,KAAKivI,wBAAgB,IAAAtqI,OAAA,EAAAA,EAAE8qI,cACzBzvI,KAAKivI,uBAAyBjvI,KAAKovI,wBAEM,OAAhB,QAArBxqI,EAAA5E,KAAKivI,wBAAgB,IAAArqI,OAAA,EAAAA,EAAE6qI,aACzB,OAKJ,GACEzvI,KAAKivI,iBAAiBS,wBAA0BH,GAChDvvI,KAAKivI,iBAAiBQ,WAAW5mH,MAC/B8mH,GAAuBA,EAAoBJ,OAASA,IAGtD,OAYF,OATEvvI,KAAKivI,iBAAiBQ,WAAWpuI,KAAK,CAAEkuI,OAAMD,UAGhDtvI,KAAKivI,iBAAiBQ,WACpBzvI,KAAKivI,iBAAiBQ,WAAWp7H,QAAOs7H,IACtC,MAAMC,EAAc,IAAI5sI,KAAK2sI,EAAoBJ,MAAM3jB,UACjD9hE,EAAM9mD,KAAK8mD,MACjB,OAAOA,EAAM8lF,GAAeb,EAAqC,IAE9D/uI,KAAKkvI,SAASW,UAAU7vI,KAAKivI,iB,CACpC,MAAO3sI,GACPynI,EAAO9qH,KAAK3c,E,EAWhB,yBAAMwtI,G,MACJ,IAKE,GAJ8B,OAA1B9vI,KAAKivI,wBACDjvI,KAAKovI,wBAI0B,OAAd,QAAvBzqI,EAAA3E,KAAKivI,wBAAkB,IAAAtqI,OAAA,EAAAA,EAAA8qI,aACqB,IAA5CzvI,KAAKivI,iBAAiBQ,WAAW9wI,OAEjC,MAAO,GAET,MAAM4wI,EAAOC,MAEP,iBAAEO,EAAgB,cAAEC,GAAkBC,GAC1CjwI,KAAKivI,iBAAiBQ,YAElBS,GAAe/tI,EAAAA,EAAAA,IACnB6B,KAAKoD,UAAU,CAAEkgC,QAAS,EAAGmoG,WAAYM,KAgB3C,OAbA/vI,KAAKivI,iBAAiBS,sBAAwBH,EAC1CS,EAAcrxI,OAAS,GAEzBqB,KAAKivI,iBAAiBQ,WAAaO,QAI7BhwI,KAAKkvI,SAASW,UAAU7vI,KAAKivI,oBAEnCjvI,KAAKivI,iBAAiBQ,WAAa,GAE9BzvI,KAAKkvI,SAASW,UAAU7vI,KAAKivI,mBAE7BiB,C,CACP,MAAO5tI,GAEP,OADAynI,EAAO9qH,KAAK3c,GACL,E,GAKb,SAASktI,KACP,MAAMW,EAAQ,IAAIntI,KAElB,OAAOmtI,EAAMnqC,cAAc5gG,UAAU,EAAG,GAC1C,C,SAEgB6qI,GACdG,EACAC,EAAUvB,IAOV,MAAMiB,EAA4C,GAElD,IAAIC,EAAgBI,EAAgBvwH,QACpC,IAAK,MAAM8vH,KAAuBS,EAAiB,CAEjD,MAAME,EAAiBP,EAAiBlpE,MACtC0pE,GAAMA,EAAGjB,QAAUK,EAAoBL,QAEzC,GAAKgB,GAgBH,GAHAA,EAAeE,MAAMnvI,KAAKsuI,EAAoBJ,MAG1CkB,GAAWV,GAAoBM,EAAS,CAC1CC,EAAeE,MAAMthI,MACrB,K,OAZF,GAJA6gI,EAAiB1uI,KAAK,CACpBiuI,MAAOK,EAAoBL,MAC3BkB,MAAO,CAACb,EAAoBJ,QAE1BkB,GAAWV,GAAoBM,EAAS,CAG1CN,EAAiB7gI,MACjB,K,CAaJ8gI,EAAgBA,EAAcnwH,MAAM,E,CAEtC,MAAO,CACLkwH,mBACAC,gBAEJ,C,MAEab,GAEXptI,WAAAA,CAAmBokC,GAAA,KAAGA,IAAHA,EACjBnmC,KAAK0wI,wBAA0B1wI,KAAK2wI,8B,CAEtC,kCAAMA,GACJ,SAAKhpI,EAAAA,EAAAA,QAGIE,EAAAA,EAAAA,MACJ8Z,MAAK,KAAM,IACX7b,OAAM,KAAM,G,CAMnB,UAAM6wD,GACJ,MAAMi6E,QAAwB5wI,KAAK0wI,wBACnC,GAAKE,EAEE,CACL,MAAMC,QAA2BtC,GAA4BvuI,KAAKmmC,KAClE,OAAsB,OAAlB0qG,QAAkB,IAAlBA,OAAkB,EAAlBA,EAAoBpB,YACfoB,EAEA,CAAEpB,WAAY,G,CANvB,MAAO,CAAEA,WAAY,G,CAWzB,eAAMI,CAAUiB,G,MACd,MAAMF,QAAwB5wI,KAAK0wI,wBACnC,GAAKE,EAEE,CACL,MAAMG,QAAiC/wI,KAAK22D,OAC5C,OAAO+3E,GAA2B1uI,KAAKmmC,IAAK,CAC1CupG,sBAEE,QADA/qI,EAAAmsI,EAAiBpB,6BACjB,IAAA/qI,EAAAA,EAAAosI,EAAyBrB,sBAC3BD,WAAYqB,EAAiBrB,Y,EAKnC,SAAMr4H,CAAI05H,G,MACR,MAAMF,QAAwB5wI,KAAK0wI,wBACnC,GAAKE,EAEE,CACL,MAAMG,QAAiC/wI,KAAK22D,OAC5C,OAAO+3E,GAA2B1uI,KAAKmmC,IAAK,CAC1CupG,sBAEE,QADA/qI,EAAAmsI,EAAiBpB,6BACjB,IAAA/qI,EAAAA,EAAAosI,EAAyBrB,sBAC3BD,WAAY,IACPsB,EAAyBtB,cACzBqB,EAAiBrB,a,GAYxB,SAAUgB,GAAWL,GAEzB,OAAOjuI,EAAAA,EAAAA,IAEL6B,KAAKoD,UAAU,CAAEkgC,QAAS,EAAGmoG,WAAYW,KACzCzxI,MACJ;;;;;;;;;;;;;;;;GCxRM,SAAUqyI,GAAuBpD,GACrCzB,GACE,IAAI1kH,EAAAA,GACF,mBACAwE,GAAa,IAAIo9G,EAA0Bp9G,IAAU,YAIzDkgH,GACE,IAAI1kH,EAAAA,GACF,aACAwE,GAAa,IAAI+iH,GAAqB/iH,IAAU,YAMpDyhH,GAAgBvD,EAAM8G,EAASrD,GAE/BF,GAAgBvD,EAAM8G,EAAS,WAE/BvD,GAAgB,UAAW,GAC7B,CChBAsD,GAAuB,G,2JCFVvpH,EAiBX1lB,WAAAA,CACWC,EACAkvI,EACA7qI,GAFA,KAAIrE,KAAJA,EACA,KAAekvI,gBAAfA,EACA,KAAI7qI,KAAJA,EAnBX,KAAiB8qI,mBAAG,EAIpB,KAAYC,aAAe,CAAC,EAE5B,KAAAC,kBAA2C,OAE3C,KAAiBC,kBAAwC,I,CAczDC,oBAAAA,CAAqBpiH,GAEnB,OADAnvB,KAAKqxI,kBAAoBliH,EAClBnvB,I,CAGTwxI,oBAAAA,CAAqBL,GAEnB,OADAnxI,KAAKmxI,kBAAoBA,EAClBnxI,I,CAGTyxI,eAAAA,CAAgB9xH,GAEd,OADA3f,KAAKoxI,aAAezxH,EACb3f,I,CAGT0xI,0BAAAA,CAA2B7rI,GAEzB,OADA7F,KAAKsxI,kBAAoBzrI,EAClB7F,I;;;;;;;;;;;;;;;;GTnDJ,MAAMiqI,EAAqB;;;;;;;;;;;;;;;;SUgBrB0H,EAWX5vI,WAAAA,CACmBC,EACAiqB,GADA,KAAIjqB,KAAJA,EACA,KAASiqB,UAATA,EAZX,KAAS5N,UAAwB,KACxB,KAAA89G,UAAgD,IAAIvpH,IACpD,KAAAg/H,kBAGb,IAAIh/H,IACS,KAAAi/H,iBACf,IAAIj/H,IACE,KAAAk/H,gBAAuD,IAAIl/H,G,CAWnE1B,GAAAA,CAAI6gI,GAEF,MAAMC,EAAuBhyI,KAAKiyI,4BAA4BF,GAE9D,IAAK/xI,KAAK4xI,kBAAkBj8H,IAAIq8H,GAAuB,CACrD,MAAME,EAAW,IAAI3sI,EAAAA,GAGrB,GAFAvF,KAAK4xI,kBAAkBv/H,IAAI2/H,EAAsBE,GAG/ClyI,KAAKmyI,cAAcH,IACnBhyI,KAAKoyI,uBAGL,IACE,MAAMh0H,EAAWpe,KAAKqyI,uBAAuB,CAC3CC,mBAAoBN,IAElB5zH,GACF8zH,EAASzsI,QAAQ2Y,E,CAEnB,MAAO9b,G,EAOb,OAAOtC,KAAK4xI,kBAAkB1gI,IAAI8gI,GAAuBtsI,O,CAmB3DikI,YAAAA,CAAar4H,G,MAKX,MAAM0gI,EAAuBhyI,KAAKiyI,4BAChC,OAAA3gI,QAAA,IAAAA,OAAA,EAAAA,EAASygI,YAEL9Y,EAAgC,QAArBt0H,EAAA,OAAA2M,QAAA,IAAAA,OAAA,EAAAA,EAAS2nH,gBAAY,IAAAt0H,GAAAA,EAEtC,IACE3E,KAAKmyI,cAAcH,KACnBhyI,KAAKoyI,uBAaA,CAEL,GAAInZ,EACF,OAAO,KAEP,MAAM56H,MAAM,WAAW2B,KAAKgC,wB,CAhB9B,IACE,OAAOhC,KAAKqyI,uBAAuB,CACjCC,mBAAoBN,G,CAEtB,MAAO1vI,GACP,GAAI22H,EACF,OAAO,KAEP,MAAM32H,C,EAadwnI,YAAAA,GACE,OAAO9pI,KAAKqe,S,CAGdk0H,YAAAA,CAAal0H,GACX,GAAIA,EAAUrc,OAAShC,KAAKgC,KAC1B,MAAM3D,MACJ,yBAAyBggB,EAAUrc,qBAAqBhC,KAAKgC,SAIjE,GAAIhC,KAAKqe,UACP,MAAMhgB,MAAM,iBAAiB2B,KAAKgC,kCAMpC,GAHAhC,KAAKqe,UAAYA,EAGZre,KAAKoyI,uBAAV,CAKA,GAAII,EAAiBn0H,GACnB,IACEre,KAAKqyI,uBAAuB,CAAEC,mBAAoBrI,G,CAClD,MAAO3nI,G,CAWX,IAAK,MACHgwI,EACAG,KACGzyI,KAAK4xI,kBAAkBjmI,UAAW,CACrC,MAAMqmI,EACJhyI,KAAKiyI,4BAA4BK,GAEnC,IAEE,MAAMl0H,EAAWpe,KAAKqyI,uBAAuB,CAC3CC,mBAAoBN,IAEtBS,EAAiBhtI,QAAQ2Y,E,CACzB,MAAO9b,G,IAObowI,aAAAA,CAAcX,EAAqB9H,GACjCjqI,KAAK4xI,kBAAkBzgI,OAAO4gI,GAC9B/xI,KAAK6xI,iBAAiB1gI,OAAO4gI,GAC7B/xI,KAAKm8H,UAAUhrH,OAAO4gI,E,CAKxB,YAAM5gI,GACJ,MAAMwhI,EAAWpyI,MAAMw9B,KAAK/9B,KAAKm8H,UAAU5oH,gBAErC5N,QAAQy6G,IAAI,IACbuyB,EACAt+H,QAAOnL,GAAW,aAAcA,IAEhCsB,KAAItB,GAAYA,EAAgB0pI,SAAUzhI,cAC1CwhI,EACAt+H,QAAOnL,GAAW,YAAaA,IAE/BsB,KAAItB,GAAYA,EAAgB2pI,a,CAIvCC,cAAAA,GACE,OAAyB,MAAlB9yI,KAAKqe,S,CAGd8zH,aAAAA,CAAcJ,EAAqB9H,GACjC,OAAOjqI,KAAKm8H,UAAUxmH,IAAIo8H,E,CAG5BgB,UAAAA,CAAWhB,EAAqB9H,GAC9B,OAAOjqI,KAAK6xI,iBAAiB3gI,IAAI6gI,IAAe,CAAC,C,CAGnDiB,UAAAA,CAAWj5B,EAA0B,CAAC,GACpC,MAAM,QAAEzoG,EAAU,CAAC,GAAMyoG,EACnBi4B,EAAuBhyI,KAAKiyI,4BAChCl4B,EAAKu4B,oBAEP,GAAItyI,KAAKmyI,cAAcH,GACrB,MAAM3zI,MACJ,GAAG2B,KAAKgC,QAAQgwI,mCAIpB,IAAKhyI,KAAK8yI,iBACR,MAAMz0I,MAAM,aAAa2B,KAAKgC,oCAGhC,MAAMoc,EAAWpe,KAAKqyI,uBAAuB,CAC3CC,mBAAoBN,EACpB1gI,YAIF,IAAK,MACHghI,EACAG,KACGzyI,KAAK4xI,kBAAkBjmI,UAAW,CACrC,MAAMsnI,EACJjzI,KAAKiyI,4BAA4BK,GAC/BN,IAAyBiB,GAC3BR,EAAiBhtI,QAAQ2Y,E,CAI7B,OAAOA,C,CAWT80H,MAAAA,CAAOrtI,EAA6BksI,G,MAClC,MAAMC,EAAuBhyI,KAAKiyI,4BAA4BF,GACxDoB,EAC0C,QAA9CxuI,EAAA3E,KAAK8xI,gBAAgB5gI,IAAI8gI,UAAqB,IAAArtI,EAAAA,EAC9C,IAAIwP,IACNg/H,EAAkB/7H,IAAIvR,GACtB7F,KAAK8xI,gBAAgBz/H,IAAI2/H,EAAsBmB,GAE/C,MAAMC,EAAmBpzI,KAAKm8H,UAAUjrH,IAAI8gI,GAK5C,OAJIoB,GACFvtI,EAASutI,EAAkBpB,GAGtB,KACLmB,EAAkBhiI,OAAOtL,EAAS,C,CAQ9BwtI,qBAAAA,CACNj1H,EACA2zH,GAEA,MAAMuB,EAAYtzI,KAAK8xI,gBAAgB5gI,IAAI6gI,GAC3C,GAAKuB,EAGL,IAAK,MAAMztI,KAAYytI,EACrB,IACEztI,EAASuY,EAAU2zH,E,CACnB,MAAAptI,G,EAME0tI,sBAAAA,EAAuB,mBAC7BC,EAAkB,QAClBhhI,EAAU,CAAC,IAKX,IAAI8M,EAAWpe,KAAKm8H,UAAUjrH,IAAIohI,GAClC,IAAKl0H,GAAYpe,KAAKqe,YACpBD,EAAWpe,KAAKqe,UAAU6yH,gBAAgBlxI,KAAKisB,UAAW,CACxDqmH,mBAAoBiB,EAA8BjB,GAClDhhI,YAEFtR,KAAKm8H,UAAU9pH,IAAIigI,EAAoBl0H,GACvCpe,KAAK6xI,iBAAiBx/H,IAAIigI,EAAoBhhI,GAO9CtR,KAAKqzI,sBAAsBj1H,EAAUk0H,GAOjCtyI,KAAKqe,UAAUizH,mBACjB,IACEtxI,KAAKqe,UAAUizH,kBACbtxI,KAAKisB,UACLqmH,EACAl0H,E,CAEF,MAAAzZ,G,CAMN,OAAOyZ,GAAY,I,CAGb6zH,2BAAAA,CACNF,EAAqB9H,GAErB,OAAIjqI,KAAKqe,UACAre,KAAKqe,UAAU8yH,kBAAoBY,EAAa9H,EAEhD8H,C,CAIHK,oBAAAA,GACN,QACIpyI,KAAKqe,WAC8B,aAArCre,KAAKqe,UAAUgzH,iB,EAMrB,SAASkC,EAA8BxB,GACrC,OAAOA,IAAe9H,OAAqBrnI,EAAYmvI,CACzD,CAEA,SAASS,EAAiCn0H,GACxC,MAAuC,UAAhCA,EAAUgzH,iBACnB;;;;;;;;;;;;;;;;SCjWa9D,EAGXxrI,WAAAA,CAA6BC,GAAA,KAAIA,KAAJA,EAFZ,KAAAunI,UAAY,IAAI32H,G,CAajCq5H,YAAAA,CAA6B5tH,GAC3B,MAAMorH,EAAWzpI,KAAKwsI,YAAYnuH,EAAUrc,MAC5C,GAAIynI,EAASqJ,iBACX,MAAM,IAAIz0I,MACR,aAAaggB,EAAUrc,yCAAyChC,KAAKgC,QAIzEynI,EAAS8I,aAAal0H,E,CAGxBm1H,uBAAAA,CAAwCn1H,GACtC,MAAMorH,EAAWzpI,KAAKwsI,YAAYnuH,EAAUrc,MACxCynI,EAASqJ,kBAEX9yI,KAAKupI,UAAUp4H,OAAOkN,EAAUrc,MAGlChC,KAAKisI,aAAa5tH,E,CAUpBmuH,WAAAA,CAA4BxqI,GAC1B,GAAIhC,KAAKupI,UAAU5zH,IAAI3T,GACrB,OAAOhC,KAAKupI,UAAUr4H,IAAIlP,GAI5B,MAAMynI,EAAW,IAAIkI,EAAY3vI,EAAMhC,MAGvC,OAFAA,KAAKupI,UAAUl3H,IAAIrQ,EAAMynI,GAElBA,C,CAGTD,YAAAA,GACE,OAAOjpI,MAAMw9B,KAAK/9B,KAAKupI,UAAUh2H,S;;;;;;;;;;;;;;;;GZtC9B,MAAM4oH,EAAsB,G,IAavBsX,GAAZ,SAAYA,GACVA,EAAAA,EAAA,oBACAA,EAAAA,EAAA,wBACAA,EAAAA,EAAA,kBACAA,EAAAA,EAAA,kBACAA,EAAAA,EAAA,oBACAA,EAAAA,EAAA,qBACD,EAPD,CAAYA,IAAAA,EAOX,KAED,MAAMC,EAA2D,CAC/D,MAASD,EAASE,MAClB,QAAWF,EAASG,QACpB,KAAQH,EAASI,KACjB,KAAQJ,EAASK,KACjB,MAASL,EAASM,MAClB,OAAUN,EAASO,QAMfC,EAA4BR,EAASI,KAmBrCK,EAAgB,CACpB,CAACT,EAASE,OAAQ,MAClB,CAACF,EAASG,SAAU,MACpB,CAACH,EAASI,MAAO,OACjB,CAACJ,EAASK,MAAO,OACjB,CAACL,EAASM,OAAQ,SAQdI,EAAgCA,CAAC/1H,EAAUg2H,KAAY3/H,KAC3D,GAAI2/H,EAAUh2H,EAASi2H,SACrB,OAEF,MAAMvqF,GAAM,IAAI9mD,MAAOgjG,cACjBluF,EAASo8H,EAAcE,GAC7B,IAAIt8H,EAMF,MAAM,IAAIzZ,MACR,8DAA8D+1I,MANhE7xI,QAAQuV,GACN,IAAIgyC,OAAS1rC,EAASpc,WACnByS,E,QASIu1H,EAOXjoI,WAAAA,CAAmBC,GAAA,KAAIA,KAAJA,EAUX,KAASsyI,UAAGL,EAsBZ,KAAWM,YAAeJ,EAc1B,KAAeK,gBAAsB,KA1C3CrY,EAAU96H,KAAK,K,CAQjB,YAAIgzI,GACF,OAAO,KAAKC,S,CAGd,YAAID,CAAS72H,GACX,KAAMA,KAAOi2H,GACX,MAAM,IAAIp+D,UAAU,kBAAkB73D,+BAExC,KAAK82H,UAAY92H,C,CAInBi3H,WAAAA,CAAYj3H,GACV,KAAK82H,UAA2B,kBAAR92H,EAAmBk2H,EAAkBl2H,GAAOA,C,CAQtE,cAAIk3H,GACF,OAAO,KAAKH,W,CAEd,cAAIG,CAAWl3H,GACb,GAAmB,oBAARA,EACT,MAAM,IAAI63D,UAAU,qDAEtB,KAAKk/D,YAAc/2H,C,CAOrB,kBAAIm3H,GACF,OAAO,KAAKH,e,CAEd,kBAAIG,CAAen3H,GACjB,KAAKg3H,gBAAkBh3H,C,CAOzB0uH,KAAAA,IAASz3H,GACP,KAAK+/H,iBAAmB,KAAKA,gBAAgB,KAAMf,EAASE,SAAUl/H,GACtE,KAAK8/H,YAAY,KAAMd,EAASE,SAAUl/H,E,CAE5CmgI,GAAAA,IAAOngI,GACL,KAAK+/H,iBACH,KAAKA,gBAAgB,KAAMf,EAASG,WAAYn/H,GAClD,KAAK8/H,YAAY,KAAMd,EAASG,WAAYn/H,E,CAE9CjQ,IAAAA,IAAQiQ,GACN,KAAK+/H,iBAAmB,KAAKA,gBAAgB,KAAMf,EAASI,QAASp/H,GACrE,KAAK8/H,YAAY,KAAMd,EAASI,QAASp/H,E,CAE3CwK,IAAAA,IAAQxK,GACN,KAAK+/H,iBAAmB,KAAKA,gBAAgB,KAAMf,EAASK,QAASr/H,GACrE,KAAK8/H,YAAY,KAAMd,EAASK,QAASr/H,E,CAE3CjS,KAAAA,IAASiS,GACP,KAAK+/H,iBAAmB,KAAKA,gBAAgB,KAAMf,EAASM,SAAUt/H,GACtE,KAAK8/H,YAAY,KAAMd,EAASM,SAAUt/H,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Ca9L9Ci5H,EAAAA,EAAAA,IAAgB1rI,EAAMslC,EAAS,M;;;;;;;;;;;;;;;;GCDxB,IAAItpC,EAAc,GAMnB,SAAU62I,EAAcvtG,GAC5BtpC,EAAcspC,CAChB;;;;;;;;;;;;;;;;GCCG,MACUwtG,EAOX/yI,WAAAA,CAAoBgzI,GAAA,KAAWA,YAAXA,EALZ,KAAOC,QAAG,WAAY,CAW9B3iI,GAAAA,CAAI/O,EAAaZ,GACF,MAATA,EACF1C,KAAK+0I,YAAYE,WAAWj1I,KAAKk1I,cAAc5xI,IAE/CtD,KAAK+0I,YAAYI,QAAQn1I,KAAKk1I,cAAc5xI,IAAM8D,EAAAA,EAAAA,IAAU1E,GAAO,CAOvEwO,GAAAA,CAAI5N,GACF,MAAM8xI,EAAYp1I,KAAK+0I,YAAYM,QAAQr1I,KAAKk1I,cAAc5xI,IAC9D,OAAiB,MAAb8xI,EACK,MAEAxrI,EAAAA,EAAAA,IAASwrI,EAAU,CAI9B7mH,MAAAA,CAAOjrB,GACLtD,KAAK+0I,YAAYE,WAAWj1I,KAAKk1I,cAAc5xI,GAAM,CAKvD4xI,aAAAA,CAAclzI,GACZ,OAAOhC,KAAKg1I,QAAUhzI,CAAK,CAG7B4c,QAAAA,GACE,OAAO5e,KAAK+0I,YAAYn2H,UAAW;;;;;;;;;;;;;;;;GClDpC,MACU02H,EAAbvzI,WAAAA,GACU,KAAMwzI,OAA6B,CAAC,EAqB5C,KAAiBC,mBAAG,CAAK,CAnBzBnjI,GAAAA,CAAI/O,EAAaZ,GACF,MAATA,SACK1C,KAAKu1I,OAAOjyI,GAEnBtD,KAAKu1I,OAAOjyI,GAAOZ,CAAK,CAI5BwO,GAAAA,CAAI5N,GACF,OAAI6G,EAAAA,EAAAA,IAASnK,KAAKu1I,OAAQjyI,GACjBtD,KAAKu1I,OAAOjyI,GAEd,IAAK,CAGdirB,MAAAA,CAAOjrB,UACEtD,KAAKu1I,OAAOjyI,EAAK;;;;;;;;;;;;;;;;GCX5B,MAAMmyI,EAAmB,SACvBC,GAEA,IAGE,GACoB,qBAAXjyI,QAC2B,qBAA3BA,OAAOiyI,GACd,CAEA,MAAMC,EAAalyI,OAAOiyI,GAG1B,OAFAC,EAAWR,QAAQ,oBAAqB,SACxCQ,EAAWV,WAAW,qBACf,IAAIH,EAAkBa,EAAY,CAAD,CAE1C,MAAOrzI,GAAI,CAIb,OAAO,IAAIgzI,CACb,EAGaM,EAAoBH,EAAiB,gBAGrCI,EAAiBJ,EAAiB,kBCxBzCK,EAAY,IAAI9L,EAAAA,GAAO,sBAKhB+L,EAA+B,WAC1C,IAAIl0H,EAAK,EACT,OAAO,WACL,OAAOA,GACT,CACF,CAL4C,GAY/Bm0H,EAAO,SAAUz3I,GAC5B,MAAM2D,GAAYuL,EAAAA,EAAAA,IAAkBlP,GAC9By3I,EAAO,IAAIjqI,EAAAA,GACjBiqI,EAAKjpI,OAAO7K,GACZ,MAAM+zI,EAAYD,EAAK7oI,SACvB,OAAO1N,EAAAA,GAAOW,gBAAgB61I,EAChC,EAEMC,EAAmB,YAAaC,GACpC,IAAIh4I,EAAU,GACd,IAAK,IAAIO,EAAI,EAAGA,EAAIy3I,EAAQx3I,OAAQD,IAAK,CACvC,MAAMu1B,EAAMkiH,EAAQz3I,GAElB6B,MAAMC,QAAQyzB,IACbA,GACgB,kBAARA,GAEwB,kBAAvBA,EAAYt1B,OAEtBR,GAAW+3I,EAAiBthI,MAAM,KAAMqf,GAExC91B,GADwB,kBAAR81B,GACL7sB,EAAAA,EAAAA,IAAU6sB,GAEVA,EAEb91B,GAAW,GAAI,CAGjB,OAAOA,CACT,EAKO,IAAI4rI,EAAuC,KAK9CqM,GAAY,EAOT,MAAMC,EAAgB,SAC3BC,EACAC,IAEAt4I,EAAAA,EAAAA,KACGs4I,IAA0B,IAAZD,IAAgC,IAAZA,EACnC,+CAEc,IAAZA,GACFR,EAAUzB,SAAWZ,EAAAA,GAASG,QAC9B7J,EAAS+L,EAAUlB,IAAIhjI,KAAKkkI,GACxBS,GACFV,EAAexjI,IAAI,mBAAmB,IAEZ,oBAAZikI,EAChBvM,EAASuM,GAETvM,EAAS,KACT8L,EAAetnH,OAAO,mBAE1B,EAEaqmH,EAAM,YAAauB,GAQ9B,IAPkB,IAAdC,IACFA,GAAY,EACG,OAAXrM,IAA6D,IAA1C8L,EAAe3kI,IAAI,oBACxCmlI,GAAc,IAIdtM,EAAQ,CACV,MAAM5rI,EAAU+3I,EAAiBthI,MAAM,KAAMuhI,GAC7CpM,EAAO5rI,EAAS,CAEpB,EAEaq4I,EAAa,SACxB7oE,GAEA,OAAO,YAAawoE,GAClBvB,EAAIjnE,KAAWwoE,EACjB,CACF,EAEa3zI,EAAQ,YAAa2zI,GAChC,MAAMh4I,EAAU,4BAA8B+3I,KAAoBC,GAClEL,EAAUtzI,MAAMrE,EAClB,EAEas4I,EAAQ,YAAaN,GAChC,MAAMh4I,EAAU,yBAAyB+3I,KAAoBC,KAE7D,MADAL,EAAUtzI,MAAMrE,GACV,IAAIE,MAAMF,EAClB,EAEa8gB,EAAO,YAAak3H,GAC/B,MAAMh4I,EAAU,qBAAuB+3I,KAAoBC,GAC3DL,EAAU72H,KAAK9gB,EACjB,EAMau4I,EAAqB,WAGZ,qBAAXjzI,QACPA,OAAOklG,UACPllG,OAAOklG,SAAS4H,WACgC,IAAhD9sG,OAAOklG,SAAS4H,SAAS5tF,QAAQ,WAEjC1D,EACE,4FAIN,EAaa03H,EAAsB,SAAUttI,GAC3C,MACkB,kBAATA,IACNA,IAASA,GACRA,IAASoK,OAAOmjI,mBAChBvtI,IAASoK,OAAOojI,kBAEtB,EAEaC,EAAsB,SAAUrsI,GAC3C,IAAI/C,EAAAA,EAAAA,OAAuC,aAAxBvD,SAASorE,WAC1B9kE,QACK,CAIL,IAAI0tB,GAAS,EACb,MAAM4+G,EAAY,WACX5yI,SAAS6hD,KAKT7tB,IACHA,GAAS,EACT1tB,KANA0Z,WAAW4yH,EAAWzgG,KAAKs3B,MAAM,IAQrC,EAEIzpE,SAAS+gD,kBACX/gD,SAAS+gD,iBAAiB,mBAAoB6xF,GAAW,GAEzDtzI,OAAOyhD,iBAAiB,OAAQ6xF,GAAW,IAEjC5yI,SAAiB6yI,cAG1B7yI,SAAiB6yI,YAAY,sBAAsB,KACtB,aAAxB7yI,SAASorE,YACXwnE,GAAY,IAKftzI,OAAeuzI,YAAY,SAAUD,G,CAO5C,EAKaE,EAAW,aAKXC,EAAW,aAKXC,EAAc,SAAUtsI,EAAWC,GAC9C,GAAID,IAAMC,EACR,OAAO,EACF,GAAID,IAAMosI,GAAYnsI,IAAMosI,EACjC,OAAQ,EACH,GAAIpsI,IAAMmsI,GAAYpsI,IAAMqsI,EACjC,OAAO,EACF,CACL,MAAME,EAASC,EAAYxsI,GACzBysI,EAASD,EAAYvsI,GAEvB,OAAe,OAAXssI,EACa,OAAXE,EACKF,EAASE,IAAW,EAAIzsI,EAAElM,OAASmM,EAAEnM,OAASy4I,EAASE,GAEtD,EAEU,OAAXA,EACF,EAEAzsI,EAAIC,GAAK,EAAI,CAAC,CAG3B,EAKaysI,EAAgB,SAAU1sI,EAAWC,GAChD,OAAID,IAAMC,EACD,EACED,EAAIC,GACL,EAED,CAEX,EAEa0sI,EAAa,SACxBl0I,EACA8G,GAEA,GAAIA,GAAO9G,KAAO8G,EAChB,OAAOA,EAAI9G,GAEX,MAAM,IAAIjF,MACR,yBAA2BiF,EAAM,iBAAkB8D,EAAAA,EAAAA,IAAUgD,GAGnE,EAEaqtI,EAAoB,SAAUrtI,GACzC,GAAmB,kBAARA,GAA4B,OAARA,EAC7B,OAAOhD,EAAAA,EAAAA,IAAUgD,GAGnB,MAAMY,EAAO,GAEb,IAAK,MAAME,KAAKd,EACdY,EAAK3J,KAAK6J,GAIZF,EAAKkY,OACL,IAAI5f,EAAM,IACV,IAAK,IAAI5E,EAAI,EAAGA,EAAIsM,EAAKrM,OAAQD,IACrB,IAANA,IACF4E,GAAO,KAETA,IAAO8D,EAAAA,EAAAA,IAAU4D,EAAKtM,IACtB4E,GAAO,IACPA,GAAOm0I,EAAkBrtI,EAAIY,EAAKtM,KAIpC,OADA4E,GAAO,IACAA,CACT,EAQao0I,EAAoB,SAC/Bn5I,EACAo5I,GAEA,MAAM5+F,EAAMx6C,EAAII,OAEhB,GAAIo6C,GAAO4+F,EACT,MAAO,CAACp5I,GAGV,MAAMq5I,EAAW,GACjB,IAAK,IAAIh5I,EAAI,EAAGA,EAAIm6C,EAAKn6C,GAAK+4I,EACxB/4I,EAAI+4I,EAAU5+F,EAChB6+F,EAASv2I,KAAK9C,EAAI6G,UAAUxG,EAAGm6C,IAE/B6+F,EAASv2I,KAAK9C,EAAI6G,UAAUxG,EAAGA,EAAI+4I,IAGvC,OAAOC,CACT,EAQgB,SAAA//D,EAAKztE,EAAaK,GAChC,IAAK,MAAMnH,KAAO8G,EACZA,EAAIhH,eAAeE,IACrBmH,EAAGnH,EAAK8G,EAAI9G,GAGlB,CAsBO,MAAMu0I,EAAwB,SAAUrnI,IAC7CvS,EAAAA,EAAAA,KAAQ04I,EAAoBnmI,GAAI,uBAEhC,MAAMsnI,EAAQ,GACZC,EAAQ,GACJC,GAAQ,GAAMF,EAAQ,GAAM,EAClC,IAAIpnH,EAAGpuB,EAAGuK,EAAGorI,EAAIv5I,EAIP,IAAN8R,GACFlO,EAAI,EACJuK,EAAI,EACJ6jB,EAAI,EAAIlgB,KAAO2S,IAAW,EAAI,IAE9BuN,EAAIlgB,EAAI,EACRA,EAAI8lC,KAAK8jB,IAAI5pD,GAETA,GAAK8lC,KAAK4hG,IAAI,EAAG,EAAIF,IAEvBC,EAAK3hG,KAAKC,IAAID,KAAKs3B,MAAMt3B,KAAKs+F,IAAIpkI,GAAK8lC,KAAK6hG,KAAMH,GAClD11I,EAAI21I,EAAKD,EACTnrI,EAAIypC,KAAKwiB,MAAMtoD,EAAI8lC,KAAK4hG,IAAI,EAAGH,EAAQE,GAAM3hG,KAAK4hG,IAAI,EAAGH,MAGzDz1I,EAAI,EACJuK,EAAIypC,KAAKwiB,MAAMtoD,EAAI8lC,KAAK4hG,IAAI,EAAG,EAAIF,EAAOD,MAK9C,MAAMK,EAAO,GACb,IAAK15I,EAAIq5I,EAAOr5I,EAAGA,GAAK,EACtB05I,EAAK/2I,KAAKwL,EAAI,EAAI,EAAI,GACtBA,EAAIypC,KAAKs3B,MAAM/gE,EAAI,GAErB,IAAKnO,EAAIo5I,EAAOp5I,EAAGA,GAAK,EACtB05I,EAAK/2I,KAAKiB,EAAI,EAAI,EAAI,GACtBA,EAAIg0C,KAAKs3B,MAAMtrE,EAAI,GAErB81I,EAAK/2I,KAAKqvB,EAAI,EAAI,GAClB0nH,EAAK1T,UACL,MAAMnmI,EAAM65I,EAAK54I,KAAK,IAGtB,IAAI64I,EAAgB,GACpB,IAAK35I,EAAI,EAAGA,EAAI,GAAIA,GAAK,EAAG,CAC1B,IAAI45I,EAAUnzI,SAAS5G,EAAIg6I,OAAO75I,EAAG,GAAI,GAAGkgB,SAAS,IAC9B,IAAnB05H,EAAQ35I,SACV25I,EAAU,IAAMA,GAElBD,GAAgCC,CAAQ,CAE1C,OAAOD,EAAchyH,aACvB,EAMamyH,EAAiC,WAC5C,QACoB,kBAAX/0I,SACPA,OAAO,YACPA,OAAO,UAAU,cAChB,UAAU+D,KAAK/D,OAAOklG,SAASC,MAEpC,EAKa6vC,EAAoB,WAE/B,MAA0B,kBAAZC,SAA8C,kBAAfA,QAAQC,EACvD,EA4BO,MAAMC,EAAkB,IAAIn+G,OAAO,qBAK7Bo+G,GAAkB,WAKlBC,EAAiB,WAKjBzB,EAAc,SAAU94I,GACnC,GAAIq6I,EAAgBpxI,KAAKjJ,GAAM,CAC7B,MAAMw6I,EAAStlI,OAAOlV,GACtB,GAAIw6I,GAAUF,GAAkBE,GAAUD,EACxC,OAAOC,CAAM,CAGjB,OAAO,IACT,EAmBaC,EAAiB,SAAUvuI,GACtC,IACEA,GAAK,CACL,MAAOnI,GAEP6hB,YAAW,KAKT,MAAMlG,EAAQ3b,EAAE2b,OAAS,GAEzB,MADAgB,EAAK,yCAA0ChB,GACzC3b,CAAC,GACNg0C,KAAKs3B,MAAM,GAAI,CAEtB,EAyBaqrE,EAAe,WAC1B,MAAMl1H,EACe,kBAAXtgB,QACNA,OAAO,cACPA,OAAO,aAAa,cACtB,GAMF,OACEsgB,EAAUysF,OACR,6FACG,CAET,EAsBa0oC,EAAwB,SACnCzuI,EACA0uI,GAEA,MAAMjrH,EAA2B/J,WAAW1Z,EAAI0uI,GAiBhD,MAdqB,kBAAZjrH,GAES,qBAAT02F,MAEPA,KAAK,cAGLA,KAAKw0B,WAAWlrH,GAEY,kBAAZA,GAAyBA,EAAgB,UAExDA,EAAgB,WAGZA,CACT;;;;;;;;;;;;;;;;;AChmBG,MACUmrH,EAEXt3I,WAAAA,CACUu3I,EACAC,GADA,KAAQD,SAARA,EACA,KAAgBC,iBAAhBA,EAERv5I,KAAKw5I,SAA2B,OAAhBD,QAAA,IAAAA,OAAA,EAAAA,EAAkB5P,aAAa,CAAE1Q,UAAU,IACtDj5H,KAAKw5I,UACQ,OAAhBD,QAAA,IAAAA,GAAAA,EAAkBroI,MAAMyQ,MAAK63H,GAAax5I,KAAKw5I,SAAWA,GAAU,CAIxEC,QAAAA,CAASC,GACP,OAAK15I,KAAKw5I,SAeHx5I,KAAKw5I,SAASC,SAASC,GAdrB,IAAI/zI,SAA6B,CAACF,EAASD,KAKhD2e,YAAW,KACLnkB,KAAKw5I,SACPx5I,KAAKy5I,SAASC,GAAc/3H,KAAKlc,EAASD,GAE1CC,EAAQ,KAAM,GAEf,EAAE,GAGmC,CAG9Ck0I,sBAAAA,CAAuBpqC,GAA+B,MAC/B,QAArB5qG,EAAA3E,KAAKu5I,wBAAgB,IAAA50I,GAAAA,EACjBuM,MACDyQ,MAAK63H,GAAYA,EAASI,iBAAiBrqC,IAAW,CAG3DsqC,qBAAAA,GACE56H,EACE,oDAAoDjf,KAAKs5I,wFAEzD;;;;;;;;;;;;;;;;GCpCH,MACUQ,EAGX/3I,WAAAA,CACUu3I,EACAS,EACAC,GAFA,KAAQV,SAARA,EACA,KAAgBS,iBAAhBA,EACA,KAAaC,cAAbA,EALF,KAAKC,MAAgC,KAO3Cj6I,KAAKi6I,MAAQD,EAAcrQ,aAAa,CAAE1Q,UAAU,IAC/Cj5H,KAAKi6I,OACRD,EAAc9G,QAAOhgC,GAASlzG,KAAKi6I,MAAQ/mC,GAAM,CAIrDumC,QAAAA,CAASC,GACP,OAAK15I,KAAKi6I,MAgBHj6I,KAAKi6I,MAAMR,SAASC,GAAc5zI,OAAMtD,GAGzCA,GAAwB,+BAAfA,EAAMkG,MACjBksI,EAAI,kEACG,MAEAjvI,QAAQH,OAAOhD,KAtBjB,IAAImD,SAA+B,CAACF,EAASD,KAKlD2e,YAAW,KACLnkB,KAAKi6I,MACPj6I,KAAKy5I,SAASC,GAAc/3H,KAAKlc,EAASD,GAE1CC,EAAQ,KAAM,GAEf,EAAE,GAaN,CAGLk0I,sBAAAA,CAAuBpqC,GAGjBvvG,KAAKi6I,MACPj6I,KAAKi6I,MAAMC,qBAAqB3qC,GAEhCvvG,KAAKg6I,cACF9oI,MACAyQ,MAAKuxF,GAAQA,EAAKgnC,qBAAqB3qC,IAAU,CAIxD4qC,yBAAAA,CAA0B5qC,GACxBvvG,KAAKg6I,cACF9oI,MACAyQ,MAAKuxF,GAAQA,EAAKknC,wBAAwB7qC,IAAW,CAG1DsqC,qBAAAA,GACE,IAAIQ,EACF,0DACAr6I,KAAKs5I,SADL,iFAIE,eAAgBt5I,KAAK+5I,iBACvBM,GACE,uJAGO,mBAAoBr6I,KAAK+5I,iBAClCM,GACE,2JAIFA,GACE,kKAIJp7H,EAAKo7H,EAAc,EAImF,MAC7FC,EAIXv4I,WAAAA,CAAoBw4I,GAAA,KAAWA,YAAXA,CAAW,CAE/Bd,QAAAA,CAASC,GACP,OAAO/zI,QAAQF,QAAQ,CACrB80I,YAAav6I,KAAKu6I,aACjB,CAGLZ,sBAAAA,CAAuBpqC,GAGrBA,EAASvvG,KAAKu6I,YAAa,CAG7BJ,yBAAAA,CAA0B5qC,GAAwC,CAElEsqC,qBAAAA,GAAqB,EAlBdS,EAAKE,MAAG;;;;;;;;;;;;;;;;;AC7GV,MAAMC,EAAmB,IAEnBC,EAAgB,IAEhBC,GAA0B,IAE1BC,GAAgB,IAEhBC,GAAY,IAIZC,GACX,6EAEWC,GAAqB,KAErBC,GAAuB,IAEvBC,GAAwB,KAExBC,GAAY,YAEZC,GAAe;;;;;;;;;;;;;;;;;ACdzB,MACUC,GAaXr5I,WAAAA,CACEgD,EACgBgsG,EACA1kF,EACAgvH,EACAC,GAAqB,EACrBC,EAAyB,GACzBC,GAAyC,EACzCC,GAA2B,GAN3B,KAAM1qC,OAANA,EACA,KAAS1kF,UAATA,EACA,KAAagvH,cAAbA,EACA,KAASC,UAATA,EACA,KAAcC,eAAdA,EACA,KAA6BC,8BAA7BA,EACA,KAAeC,gBAAfA,EAEhBz7I,KAAK07I,MAAQ32I,EAAKshB,cAClBrmB,KAAK27I,QAAU37I,KAAK07I,MAAMnD,OAAOv4I,KAAK07I,MAAM/4H,QAAQ,KAAO,GAC3D3iB,KAAK47I,aACFhG,EAAkB1kI,IAAI,QAAUnM,IAAoB/E,KAAK07I,KAAM,CAGpEG,eAAAA,GACE,MAA0C,OAAnC77I,KAAK47I,aAAarD,OAAO,EAAG,EAAY,CAGjDuD,YAAAA,GACE,MACmB,mBAAjB97I,KAAK27I,SACY,wBAAjB37I,KAAK27I,OAAiC,CAI1C,QAAI52I,GACF,OAAO/E,KAAK07I,KAAM,CAGpB,QAAI32I,CAAKg3I,GACHA,IAAY/7I,KAAK47I,eACnB57I,KAAK47I,aAAeG,EAChB/7I,KAAK67I,mBACPjG,EAAkBvjI,IAAI,QAAUrS,KAAK07I,MAAO17I,KAAK47I,cAAa,CAKpEh9H,QAAAA,GACE,IAAIrgB,EAAMyB,KAAKg8I,cAIf,OAHIh8I,KAAKu7I,iBACPh9I,GAAO,IAAMyB,KAAKu7I,eAAiB,KAE9Bh9I,CAAI,CAGby9I,WAAAA,GACE,MAAMzrC,EAAWvwG,KAAK+wG,OAAS,WAAa,UACtC2hB,EAAQ1yH,KAAKw7I,8BACf,OAAOx7I,KAAKqsB,YACZ,GACJ,MAAO,GAAGkkF,IAAWvwG,KAAK+E,QAAQ2tH,GAAQ,EAI9C,SAASupB,GAAwBC,GAC/B,OACEA,EAASn3I,OAASm3I,EAASN,cAC3BM,EAASJ,gBACTI,EAASV,6BAEb,CAQG,SACaW,GACdD,EACA71I,EACAqF,GAKA,IAAI0wI,EACJ,IAJAn+I,EAAAA,EAAAA,IAAuB,kBAAToI,EAAmB,+BACjCpI,EAAAA,EAAAA,IAAyB,kBAAXyN,EAAqB,gCAG/BrF,IAAS60I,GACXkB,GACGF,EAASnrC,OAAS,SAAW,SAAWmrC,EAASN,aAAe,YAC9D,IAAIv1I,IAAS80I,GAMlB,MAAM,IAAI98I,MAAM,4BAA8BgI,GAL9C+1I,GACGF,EAASnrC,OAAS,WAAa,WAChCmrC,EAASN,aACT,OAEkD,CAElDK,GAAwBC,KAC1BxwI,EAAO,MAAQwwI,EAAS7vH,WAG1B,MAAMgwH,EAAkB,GAMxB,OAJAxkE,EAAKnsE,GAAQ,CAACpI,EAAaZ,KACzB25I,EAAMh7I,KAAKiC,EAAM,IAAMZ,EAAM,IAGxB05I,EAAUC,EAAM78I,KAAK,IAC9B;;;;;;;;;;;;;;;;GC1HG,MACU88I,GAAbv6I,WAAAA,GACU,KAASw6I,UAA4B,CAAC,CAAE,CAEhDC,gBAAAA,CAAiBx6I,EAAcy6I,EAAiB,IACzCtyI,EAAAA,EAAAA,IAASnK,KAAKu8I,UAAWv6I,KAC5BhC,KAAKu8I,UAAUv6I,GAAQ,GAGzBhC,KAAKu8I,UAAUv6I,IAASy6I,CAAO,CAGjCvrI,GAAAA,GACE,OAAOzO,EAAAA,EAAAA,IAASzC,KAAKu8I,UAAW;;;;;;;;;;;;;;;;GCbpC,MAAMG,GAAgD,CAAC,EACjDC,GAAsC,CAAC,EAEvC,SAAUC,GAA0BV,GACxC,MAAMW,EAAaX,EAASt9H,WAM5B,OAJK89H,GAAYG,KACfH,GAAYG,GAAc,IAAIP,IAGzBI,GAAYG,EACrB,CAEgB,SAAAC,GACdZ,EACAa,GAEA,MAAMF,EAAaX,EAASt9H,WAM5B,OAJK+9H,GAAUE,KACbF,GAAUE,GAAcE,KAGnBJ,GAAUE,EACnB;;;;;;;;;;;;;;;;GCvBG,MACUG,GASXj7I,WAAAA,CAAoBk7I,GAAA,KAAUA,WAAVA,EARpB,KAAgBC,iBAAc,GAC9B,KAAkBC,mBAAG,EACrB,KAAkBC,oBAAI,EACtB,KAAOC,QAAwB,IAAK,CAOpCC,UAAAA,CAAWC,EAAqB13I,GAC9B7F,KAAKo9I,mBAAqBG,EAC1Bv9I,KAAKq9I,QAAUx3I,EACX7F,KAAKo9I,mBAAqBp9I,KAAKm9I,qBACjCn9I,KAAKq9I,UACLr9I,KAAKq9I,QAAU,KAAI,CASvBG,cAAAA,CAAeC,EAAoBp0I,GACjCrJ,KAAKk9I,iBAAiBO,GAAcp0I,EACpC,MAAOrJ,KAAKk9I,iBAAiBl9I,KAAKm9I,oBAAqB,CACrD,MAAMO,EAAY19I,KAAKk9I,iBACrBl9I,KAAKm9I,2BAEAn9I,KAAKk9I,iBAAiBl9I,KAAKm9I,oBAClC,IAAK,IAAIz+I,EAAI,EAAGA,EAAIg/I,EAAU/+I,SAAUD,EAClCg/I,EAAUh/I,IACZs6I,GAAe,KACbh5I,KAAKi9I,WAAWS,EAAUh/I,GAAG,IAInC,GAAIsB,KAAKm9I,qBAAuBn9I,KAAKo9I,mBAAoB,CACnDp9I,KAAKq9I,UACPr9I,KAAKq9I,UACLr9I,KAAKq9I,QAAU,MAEjB,KAAM,CAERr9I,KAAKm9I,oBAAqB,CAAD;;;;;;;;;;;;;;;;GCrBxB,MAAMQ,GAAgC,QAChCC,GAAkC,QAClCC,GAAoC,aACpCC,GAAiC,UACjCC,GAA6B,KAC7BC,GAA6B,KAC7BC,GAAiC,MACjCC,GAAsC,KACtCC,GAAsC,MACtCC,GAAuC,KACvCC,GAA+B,IAE/BC,GAAgD,SAKvDC,GAAoB,KACpBC,GAAkB,GAClBC,GAAmBF,GAAoBC,GAOvCE,GAA6B,KAK7BC,GAAqB,IAIxB,MACUC,GA4BX78I,WAAAA,CACS88I,EACA3C,EACC4C,EACAC,EACAC,EACDC,EACAC,GANA,KAAML,OAANA,EACA,KAAQ3C,SAARA,EACC,KAAa4C,cAAbA,EACA,KAAaC,cAAbA,EACA,KAASC,UAATA,EACD,KAAkBC,mBAAlBA,EACA,KAAaC,cAAbA,EAlCT,KAASC,UAAG,EACZ,KAAaC,cAAG,EAUR,KAAcC,gBAAG,EAyBvBr/I,KAAKs/I,KAAO9I,EAAWqI,GACvB7+I,KAAKu/I,OAAS3C,GAA0BV,GACxCl8I,KAAKw/I,MAAS9zI,IAER1L,KAAK++I,gBACPrzI,EAAOuvI,IAAyBj7I,KAAK++I,eAEhC5C,GAAsBD,EAAUf,GAAczvI,GACrD,CAOJzD,IAAAA,CAAKw3I,EAA8BC,GACjC1/I,KAAK2/I,cAAgB,EACrB3/I,KAAK4/I,cAAgBF,EACrB1/I,KAAK6/I,gBAAkB,IAAI7C,GAAeyC,GAC1Cz/I,KAAK8/I,WAAY,EAEjB9/I,KAAK+/I,qBAAuB57H,YAAW,KACrCnkB,KAAKs/I,KAAK,gCAEVt/I,KAAKggJ,YACLhgJ,KAAK+/I,qBAAuB,IAAI,GAE/BzpG,KAAKs3B,MAAM+wE,KAGd7H,GAAoB,KAClB,GAAI92I,KAAK8/I,UACP,OAIF9/I,KAAKigJ,gBAAkB,IAAIC,IACzB,IAAIzrI,KACF,MAAO0rI,EAAS3zC,EAAMC,EAAMC,EAAM0zC,GAAQ3rI,EAE1C,GADAzU,KAAKqgJ,wBAAwB5rI,GACxBzU,KAAKigJ,gBASV,GALIjgJ,KAAK+/I,uBACPrhE,aAAa1+E,KAAK+/I,sBAClB//I,KAAK+/I,qBAAuB,MAE9B//I,KAAKq/I,gBAAiB,EAClBc,IAAYxC,GACd39I,KAAK6hB,GAAK2qF,EACVxsG,KAAKozG,SAAW3G,MACX,IAAI0zC,IAAYvC,GAgBrB,MAAM,IAAIv/I,MAAM,kCAAoC8hJ,GAdhD3zC,GAGFxsG,KAAKigJ,gBAAgBK,cAAe,EAIpCtgJ,KAAK6/I,gBAAgBvC,WAAW9wC,GAAgB,KAC9CxsG,KAAKggJ,WAAW,KAGlBhgJ,KAAKggJ,WAGsD,KAGjE,IAAIvrI,KACF,MAAO8rI,EAAIl3I,GAAQoL,EACnBzU,KAAKqgJ,wBAAwB5rI,GAC7BzU,KAAK6/I,gBAAgBrC,eAAe+C,EAAcl3I,EAAkB,IAEtE,KACErJ,KAAKggJ,WAAW,GAElBhgJ,KAAKw/I,OAKP,MAAMgB,EAA8C,CAAC,EACrDA,EAAU7C,IAAiC,IAC3C6C,EAAUvC,IAAkC3nG,KAAKs3B,MAC/B,IAAhBt3B,KAAKu3B,UAEH7tE,KAAKigJ,gBAAgBQ,2BACvBD,EAAUtC,IACRl+I,KAAKigJ,gBAAgBQ,0BAEzBD,EAAU9F,GAAiBD,EACvBz6I,KAAKi/I,qBACPuB,EAAU7F,IAA2B36I,KAAKi/I,oBAExCj/I,KAAKk/I,gBACPsB,EAAUzF,IAAsB/6I,KAAKk/I,eAEnCl/I,KAAK8+I,gBACP0B,EAAUxF,IAAwBh7I,KAAK8+I,eAErC9+I,KAAK++I,gBACPyB,EAAUvF,IAAyBj7I,KAAK++I,eAGpB,qBAAbp2C,UACPA,SAAS8H,UACTqqC,GAAgBtzI,KAAKmhG,SAAS8H,YAE9B+vC,EAAU5F,IAAiBC,IAE7B,MAAM6F,EAAa1gJ,KAAKw/I,MAAMgB,GAC9BxgJ,KAAKs/I,KAAK,+BAAiCoB,GAC3C1gJ,KAAKigJ,gBAAgBU,OAAOD,GAAY,QAEtC,GACD,CAML5+H,KAAAA,GACE9hB,KAAKigJ,gBAAgBW,cAAc5gJ,KAAK6hB,GAAI7hB,KAAKozG,UACjDpzG,KAAK6gJ,uBAAuB7gJ,KAAK6hB,GAAI7hB,KAAKozG,SAAU,CAQtD,iBAAO0tC,GACLlC,GAAsBmC,aAAc,CAAK,CAQ3C,oBAAOC,GACLpC,GAAsBqC,gBAAiB,CAAK,CAI9C,kBAAOC,GACL,QAAIx5I,EAAAA,EAAAA,UAEOk3I,GAAsBmC,cAM5BnC,GAAsBqC,gBACH,qBAAb98I,UACmB,MAA1BA,SAASkpB,gBACRmrH,MACAC,IAAmB,CAQ1B0I,qBAAAA,GAAqB,CAKbC,SAAAA,GACNphJ,KAAK8/I,WAAY,EAEb9/I,KAAKigJ,kBACPjgJ,KAAKigJ,gBAAgB73I,QACrBpI,KAAKigJ,gBAAkB,MAIrBjgJ,KAAKqhJ,iBACPl9I,SAAS6hD,KAAK5E,YAAYphD,KAAKqhJ,gBAC/BrhJ,KAAKqhJ,eAAiB,MAGpBrhJ,KAAK+/I,uBACPrhE,aAAa1+E,KAAK+/I,sBAClB//I,KAAK+/I,qBAAuB,KAAI,CAO5BC,SAAAA,GACDhgJ,KAAK8/I,YACR9/I,KAAKs/I,KAAK,8BACVt/I,KAAKohJ,YAEDphJ,KAAK4/I,gBACP5/I,KAAK4/I,cAAc5/I,KAAKq/I,gBACxBr/I,KAAK4/I,cAAgB,MAAI,CAS/Bx3I,KAAAA,GACOpI,KAAK8/I,YACR9/I,KAAKs/I,KAAK,6BACVt/I,KAAKohJ,YAAW,CASpBjsC,IAAAA,CAAK9rG,GACH,MAAMi4I,GAAUl6I,EAAAA,EAAAA,IAAUiC,GAC1BrJ,KAAKm/I,WAAamC,EAAQ3iJ,OAC1BqB,KAAKu/I,OAAO/C,iBAAiB,aAAc8E,EAAQ3iJ,QAGnD,MAAM4iJ,GAAat/I,EAAAA,EAAAA,IAAaq/I,GAI1B1J,EAAWF,EAAkB6J,EAAY9C,IAI/C,IAAK,IAAI//I,EAAI,EAAGA,EAAIk5I,EAASj5I,OAAQD,IACnCsB,KAAKigJ,gBAAgBuB,eACnBxhJ,KAAK2/I,cACL/H,EAASj5I,OACTi5I,EAASl5I,IAEXsB,KAAK2/I,eAAe,CASxBkB,sBAAAA,CAAuBh/H,EAAY4/H,GACjC,IAAI/5I,EAAAA,EAAAA,MACF,OAEF1H,KAAKqhJ,eAAiBl9I,SAASkpB,cAAc,UAC7C,MAAMmzH,EAAqC,CAAC,EAC5CA,EAAUlC,IAAiD,IAC3DkC,EAAUzC,IAA8Bl8H,EACxC2+H,EAAUxC,IAA8ByD,EACxCzhJ,KAAKqhJ,eAAeK,IAAM1hJ,KAAKw/I,MAAMgB,GACrCxgJ,KAAKqhJ,eAAe9sG,MAAMmS,QAAU,OAEpCviD,SAAS6hD,KAAKlE,YAAY9hD,KAAKqhJ,eAAgB,CAMzChB,uBAAAA,CAAwB5rI,GAE9B,MAAM2qI,GAAgBh4I,EAAAA,EAAAA,IAAUqN,GAAM9V,OACtCqB,KAAKo/I,eAAiBA,EACtBp/I,KAAKu/I,OAAO/C,iBAAiB,iBAAkB4C,EAAe,EAW6B,MAClFc,GAiCXn+I,WAAAA,CACE4/I,EACAC,EACOlC,EACAF,GAEP,GAHO,KAAYE,aAAZA,EACA,KAAKF,MAALA,EAlCT,KAAAqC,oBAAsB,IAAI1tI,IAG1B,KAAW2tI,YAAmD,GAO9D,KAAAC,cAAgBzrG,KAAKs3B,MAAsB,IAAhBt3B,KAAKu3B,UAIhC,KAAYyyE,cAAG,GAsBR54I,EAAAA,EAAAA,MAuCH1H,KAAK2hJ,UAAYA,EACjB3hJ,KAAK4hJ,YAAcA,MAxCH,CAKhB5hJ,KAAKygJ,yBAA2B1K,IAChCtyI,OACEo6I,GAAoC79I,KAAKygJ,0BACvCkB,EACJl+I,OAAOq6I,GAAiC99I,KAAKygJ,0BAC3CmB,EAGF5hJ,KAAKgiJ,SAAW9B,GAA2B+B,gBAG3C,IAAIC,EAAS,GAGb,GACEliJ,KAAKgiJ,SAASN,KACwC,gBAAtD1hJ,KAAKgiJ,SAASN,IAAInJ,OAAO,EAAG,IAC5B,CACA,MAAM4J,EAAgBh+I,SAAS2sG,OAC/BoxC,EAAS,4BAA8BC,EAAgB,cAAc,CAEvE,MAAMC,EAAiB,eAAiBF,EAAS,iBACjD,IACEliJ,KAAKgiJ,SAAShhG,IAAI/4C,OAClBjI,KAAKgiJ,SAAShhG,IAAIiW,MAAMmrF,GACxBpiJ,KAAKgiJ,SAAShhG,IAAI54C,OAAQ,CAC1B,MAAO9F,GACPsyI,EAAI,2BACAtyI,EAAE2b,OACJ22H,EAAItyI,EAAE2b,OAER22H,EAAItyI,EAAG,CAAD,CAIsB,CAQ1B,oBAAO2/I,GACb,MAAMI,EAASl+I,SAASkpB,cAAc,UAItC,GAHAg1H,EAAO9tG,MAAMmS,QAAU,QAGnBviD,SAAS6hD,KAqBX,KAAM,oGApBN7hD,SAAS6hD,KAAKlE,YAAYugG,GAC1B,IAIE,MAAMx3I,EAAIw3I,EAAOC,cAAcn+I,SAC1B0G,GAEH+pI,EAAI,gCAAgC,CAEtC,MAAOtyI,GACP,MAAMwuG,EAAS3sG,SAAS2sG,OACxBuxC,EAAOX,IACL,gEACA5wC,EACA,0BAA2B,CAmBjC,OAVIuxC,EAAOE,gBACTF,EAAOrhG,IAAMqhG,EAAOE,gBACXF,EAAOC,cAChBD,EAAOrhG,IAAMqhG,EAAOC,cAAcn+I,SAExBk+I,EAAel+I,WAEzBk+I,EAAOrhG,IAAOqhG,EAAel+I,UAGxBk+I,CAAO,CAMhBj6I,KAAAA,GAEEpI,KAAKwiJ,OAAQ,EAETxiJ,KAAKgiJ,WAIPhiJ,KAAKgiJ,SAAShhG,IAAIgF,KAAKnX,YAAc,GACrC1qB,YAAW,KACa,OAAlBnkB,KAAKgiJ,WACP79I,SAAS6hD,KAAK5E,YAAYphD,KAAKgiJ,UAC/BhiJ,KAAKgiJ,SAAW,KAAK,GAEtB1rG,KAAKs3B,MAAM,KAIhB,MAAM8xE,EAAe1/I,KAAK0/I,aACtBA,IACF1/I,KAAK0/I,aAAe,KACpBA,IAAc,CASlBkB,aAAAA,CAAc/+H,EAAY4/H,GACxBzhJ,KAAKyiJ,KAAO5gI,EACZ7hB,KAAK0iJ,KAAOjB,EACZzhJ,KAAKwiJ,OAAQ,EAGb,MAAOxiJ,KAAK2iJ,eAAiB,CAUvBA,WAAAA,GAIN,GACE3iJ,KAAKwiJ,OACLxiJ,KAAKsgJ,cACLtgJ,KAAK6hJ,oBAAoBzwI,MAAQpR,KAAK8hJ,YAAYnjJ,OAAS,EAAI,EAAI,GACnE,CAEAqB,KAAK+hJ,gBACL,MAAMvB,EAA8C,CAAC,EACrDA,EAAUzC,IAA8B/9I,KAAKyiJ,KAC7CjC,EAAUxC,IAA8Bh+I,KAAK0iJ,KAC7ClC,EAAUvC,IAAkCj+I,KAAK+hJ,cACjD,IAAIa,EAAS5iJ,KAAKw/I,MAAMgB,GAEpBqC,EAAgB,GAChBnkJ,EAAI,EAER,MAAOsB,KAAK8hJ,YAAYnjJ,OAAS,EAAG,CAElC,MAAMmkJ,EAAU9iJ,KAAK8hJ,YAAY,GACjC,KACGgB,EAAQh2I,EAAgBnO,OACvB6/I,GACAqE,EAAclkJ,QAChB4/I,IAuBA,MAtBA,CAEA,MAAMwE,EAAS/iJ,KAAK8hJ,YAAY5vI,QAChC2wI,EACEA,EACA,IACA1E,GACAz/I,EACA,IACAqkJ,EAAOC,IACP,IACA5E,GACA1/I,EACA,IACAqkJ,EAAOE,GACP,IACA5E,GACA3/I,EACA,IACAqkJ,EAAOj2I,EACTpO,GAAI,CAEJ,CAOJ,OAHAkkJ,GAAkBC,EAClB7iJ,KAAKkjJ,gBAAgBN,EAAQ5iJ,KAAK+hJ,gBAE3B,CAAK,CAEZ,OAAO,CAAK,CAUhBP,cAAAA,CAAe2B,EAAgBC,EAAmB/5I,GAEhDrJ,KAAK8hJ,YAAYzgJ,KAAK,CAAE2hJ,IAAKG,EAAQF,GAAIG,EAAWt2I,EAAGzD,IAInDrJ,KAAKwiJ,OACPxiJ,KAAK2iJ,aAAa,CASdO,eAAAA,CAAgBx8C,EAAa28C,GAEnCrjJ,KAAK6hJ,oBAAoBzqI,IAAIisI,GAE7B,MAAMC,EAAeA,KACnBtjJ,KAAK6hJ,oBAAoB1wI,OAAOkyI,GAChCrjJ,KAAK2iJ,aAAa,EAKdY,EAAmBp/H,WACvBm/H,EACAhtG,KAAKs3B,MAAM8wE,KAGP8E,EAAeA,KAEnB9kE,aAAa6kE,GAGbD,GAAc,EAGhBtjJ,KAAK2gJ,OAAOj6C,EAAK88C,EAAc,CAQjC7C,MAAAA,CAAOj6C,EAAa+8C,IACd/7I,EAAAA,EAAAA,MAED1H,KAAa0jJ,eAAeh9C,EAAK+8C,GAElCt/H,YAAW,KACT,IAEE,IAAKnkB,KAAKsgJ,aACR,OAEF,MAAMqD,EAAY3jJ,KAAKgiJ,SAAShhG,IAAI3zB,cAAc,UAClDs2H,EAAUt9I,KAAO,kBACjBs9I,EAAU5tC,OAAQ,EAClB4tC,EAAUjC,IAAMh7C,EAEhBi9C,EAAUC,OAAUD,EAAkBtvC,mBACpC,WAEE,MAAMwvC,EAAUF,EAAkBp0E,WAC7Bs0E,GAAqB,WAAXA,GAAkC,aAAXA,IAEpCF,EAAUC,OAAUD,EAAkBtvC,mBAAqB,KACvDsvC,EAAUr1H,YACZq1H,EAAUr1H,WAAW8yB,YAAYuiG,GAEnCF,IAEJ,EACFE,EAAUp7I,QAAU,KAClBqsI,EAAI,oCAAsCluC,GAC1C1mG,KAAKsgJ,cAAe,EACpBtgJ,KAAKoI,OAAO,EAEdpI,KAAKgiJ,SAAShhG,IAAIgF,KAAKlE,YAAY6hG,EAAW,CAC9C,MAAOrhJ,G,IAGRg0C,KAAKs3B,MAAM,GAAG;;;;;;;;;;;;;;;;GC5rBvB,MAAMk2E,GAA2B,MAC3BC,GAA+B,KAErC,IAAIC,GAAgB,KACQ,qBAAjBC,aACTD,GAAgBC,aACc,qBAAdC,YAChBF,GAAgBE,WASf,MACUC,GA2BXpiJ,WAAAA,CACS88I,EACP3C,EACQ4C,EACAC,EACAC,EACRC,EACAC,GANO,KAAML,OAANA,EAEC,KAAaC,cAAbA,EACA,KAAaC,cAAbA,EACA,KAASC,UAATA,EA/BV,KAAcoF,eAAkB,KAChC,KAAMC,OAAoB,KAC1B,KAAWC,YAAG,EACd,KAASnF,UAAG,EACZ,KAAaC,cAAG,EA+Bdp/I,KAAKs/I,KAAO9I,EAAWx2I,KAAK6+I,QAC5B7+I,KAAKu/I,OAAS3C,GAA0BV,GACxCl8I,KAAKo8I,QAAU+H,GAAoBI,eACjCrI,EACA+C,EACAC,EACAH,EACAD,GAEF9+I,KAAKs7I,UAAYY,EAASZ,SAAU,CAU9B,qBAAOiJ,CACbrI,EACA+C,EACAC,EACAH,EACAD,GAEA,MAAM0B,EAAqC,CAAC,EAwB5C,OAvBAA,EAAU9F,GAAiBD,IAGxB/yI,EAAAA,EAAAA,OACmB,qBAAbihG,UACPA,SAAS8H,UACTqqC,GAAgBtzI,KAAKmhG,SAAS8H,YAE9B+vC,EAAU5F,IAAiBC,IAEzBoE,IACFuB,EAAU7F,IAA2BsE,GAEnCC,IACFsB,EAAUzF,IAAsBmE,GAE9BH,IACFyB,EAAUvF,IAAyB8D,GAEjCD,IACF0B,EAAUxF,IAAwB8D,GAG7B3C,GAAsBD,EAAUhB,GAAWsF,EAAW,CAO/Dv4I,IAAAA,CAAKw3I,EAA8BC,GACjC1/I,KAAK0/I,aAAeA,EACpB1/I,KAAKy/I,UAAYA,EAEjBz/I,KAAKs/I,KAAK,2BAA6Bt/I,KAAKo8I,SAE5Cp8I,KAAKq/I,gBAAiB,EAEtBzJ,EAAkBvjI,IAAI,8BAA8B,GAEpD,IACE,IAAIf,EACJ,IAAI5J,EAAAA,EAAAA,MAAa,CACf,MAAM88I,EAASxkJ,KAAKs7I,UAAY,YAAc,OAE9ChqI,EAAU,CACRy4F,QAAS,CACP,aAAc,YAAY0wC,KAAoBz8I,KAAe8F,QAAQklG,YAAYw7C,IACjF,mBAAoBxkJ,KAAK8+I,eAAiB,KAS1C9+I,KAAKg/I,YACP1tI,EAAQy4F,QAAQ,iBAAmB,UAAU/pG,KAAKg/I,aAEhDh/I,KAAK++I,gBACPztI,EAAQy4F,QAAQ,uBAAyB/pG,KAAK++I,eAIhD,MAAMx0C,EAAMzmG,CAAAA,SAAAA,aAAAA,SAAAA,KACNsW,EAC+B,IAAnCpa,KAAKo8I,QAAQz5H,QAAQ,UACjB4nF,EAAI,gBAAkBA,EAAI,eAC1BA,EAAI,eAAiBA,EAAI,cAE3BnwF,IACF9I,EAAQ,SAAW,CAAEo3F,OAAQtuF,GAAO,CAGxCpa,KAAKykJ,OAAS,IAAIT,GAAchkJ,KAAKo8I,QAAS,GAAI9qI,EAAS,CAC3D,MAAOhP,GACPtC,KAAKs/I,KAAK,kCACV,MAAM98I,EAAQF,EAAEnE,SAAWmE,EAAE+G,KAK7B,OAJI7G,GACFxC,KAAKs/I,KAAK98I,QAEZxC,KAAKggJ,WACE,CAGThgJ,KAAKykJ,OAAOC,OAAS,KACnB1kJ,KAAKs/I,KAAK,wBACVt/I,KAAKq/I,gBAAiB,CAAI,EAG5Br/I,KAAKykJ,OAAOE,QAAU,KACpB3kJ,KAAKs/I,KAAK,0CACVt/I,KAAKykJ,OAAS,KACdzkJ,KAAKggJ,WAAW,EAGlBhgJ,KAAKykJ,OAAOG,UAAYx2H,IACtBpuB,KAAK6kJ,oBAAoBz2H,EAAQ,EAGnCpuB,KAAKykJ,OAAOl8I,QAAUjG,IACpBtC,KAAKs/I,KAAK,yCAEV,MAAM98I,EAASF,EAAUnE,SAAYmE,EAAU+G,KAC3C7G,GACFxC,KAAKs/I,KAAK98I,GAEZxC,KAAKggJ,WAAW,CAChB,CAMJl+H,KAAAA,GAAK,CAIL,oBAAOk/H,GACLmD,GAAoBlD,gBAAiB,CAAK,CAG5C,kBAAOC,GACL,IAAI4D,GAAe,EACnB,GAAyB,qBAAdx9I,WAA6BA,UAAUyc,UAAW,CAC3D,MAAMghI,EAAkB,iCAClBC,EAAkB19I,UAAUyc,UAAU3f,MAAM2gJ,GAC9CC,GAAmBA,EAAgBrmJ,OAAS,GAC1C01D,WAAW2wF,EAAgB,IAAM,MACnCF,GAAe,EAAI,CAKzB,OACGA,GACiB,OAAlBd,KACCG,GAAoBlD,cAAc,CAiBvC,uBAAOgE,GAGL,OACErP,EAAkBJ,oBACsC,IAAxDI,EAAkB1kI,IAAI,6BAAsC,CAIhEiwI,qBAAAA,GACEvL,EAAkBrnH,OAAO,6BAA8B,CAGjD22H,YAAAA,CAAa77I,GAEnB,GADArJ,KAAKqkJ,OAAOhjJ,KAAKgI,GACbrJ,KAAKqkJ,OAAO1lJ,SAAWqB,KAAKskJ,YAAa,CAC3C,MAAMa,EAAWnlJ,KAAKqkJ,OAAO7kJ,KAAK,IAClCQ,KAAKqkJ,OAAS,KACd,MAAMe,GAAWx7I,EAAAA,EAAAA,IAASu7I,GAG1BnlJ,KAAKy/I,UAAU2F,EAAU,CAAD,CAOpBC,oBAAAA,CAAqBC,GAC3BtlJ,KAAKskJ,YAAcgB,EACnBtlJ,KAAKqkJ,OAAS,EAAG,CAOXkB,kBAAAA,CAAmBl8I,GAIzB,IAHApL,EAAAA,EAAAA,IAAuB,OAAhB+B,KAAKqkJ,OAAiB,kCAGzBh7I,EAAK1K,QAAU,EAAG,CACpB,MAAM2mJ,EAAa7xI,OAAOpK,GAC1B,IAAKirD,MAAMgxF,GAET,OADAtlJ,KAAKqlJ,qBAAqBC,GACnB,IAAI,CAIf,OADAtlJ,KAAKqlJ,qBAAqB,GACnBh8I,CAAK,CAOdw7I,mBAAAA,CAAoBW,GAClB,GAAoB,OAAhBxlJ,KAAKykJ,OACP,OAEF,MAAMp7I,EAAOm8I,EAAK,QAMlB,GALAxlJ,KAAKo/I,eAAiB/1I,EAAK1K,OAC3BqB,KAAKu/I,OAAO/C,iBAAiB,iBAAkBnzI,EAAK1K,QAEpDqB,KAAKylJ,iBAEe,OAAhBzlJ,KAAKqkJ,OAEPrkJ,KAAKklJ,aAAa77I,OACb,CAEL,MAAMq8I,EAAgB1lJ,KAAKulJ,mBAAmBl8I,GACxB,OAAlBq8I,GACF1lJ,KAAKklJ,aAAaQ,EAAc,EAStCvwC,IAAAA,CAAK9rG,GACHrJ,KAAKylJ,iBAEL,MAAMnE,GAAUl6I,EAAAA,EAAAA,IAAUiC,GAC1BrJ,KAAKm/I,WAAamC,EAAQ3iJ,OAC1BqB,KAAKu/I,OAAO/C,iBAAiB,aAAc8E,EAAQ3iJ,QAKnD,MAAMi5I,EAAWF,EAAkB4J,EAASwC,IAGxClM,EAASj5I,OAAS,GACpBqB,KAAK2lJ,YAAYzmJ,OAAO04I,EAASj5I,SAInC,IAAK,IAAID,EAAI,EAAGA,EAAIk5I,EAASj5I,OAAQD,IACnCsB,KAAK2lJ,YAAY/N,EAASl5I,GAAG,CAIzB0iJ,SAAAA,GACNphJ,KAAK8/I,WAAY,EACb9/I,KAAKokJ,iBACPzkE,cAAc3/E,KAAKokJ,gBACnBpkJ,KAAKokJ,eAAiB,MAGpBpkJ,KAAKykJ,SACPzkJ,KAAKykJ,OAAOr8I,QACZpI,KAAKykJ,OAAS,KAAI,CAIdzE,SAAAA,GACDhgJ,KAAK8/I,YACR9/I,KAAKs/I,KAAK,+BACVt/I,KAAKohJ,YAGDphJ,KAAK0/I,eACP1/I,KAAK0/I,aAAa1/I,KAAKq/I,gBACvBr/I,KAAK0/I,aAAe,MAAI,CAS9Bt3I,KAAAA,GACOpI,KAAK8/I,YACR9/I,KAAKs/I,KAAK,6BACVt/I,KAAKohJ,YAAW,CAQpBqE,cAAAA,GACE9lE,cAAc3/E,KAAKokJ,gBACnBpkJ,KAAKokJ,eAAiBtmE,aAAY,KAE5B99E,KAAKykJ,QACPzkJ,KAAK2lJ,YAAY,KAEnB3lJ,KAAKylJ,gBAAgB,GAEpBnvG,KAAKs3B,MAAMm2E,IAAsC,CAQ9C4B,WAAAA,CAAYpnJ,GAIlB,IACEyB,KAAKykJ,OAAOtvC,KAAK52G,EAAK,CACtB,MAAO+D,GACPtC,KAAKs/I,KACH,0CACAh9I,EAAEnE,SAAWmE,EAAE+G,KACf,uBAEF8a,WAAWnkB,KAAKggJ,UAAUpuI,KAAK5R,MAAO,EAAG,CAAD,EAzLrCmkJ,GAA4ByB,6BAAG,EAK/BzB,GAAc0B,eAAG;;;;;;;;;;;;;;;;;ACnPvB,MACUC,GAMX,yBAAWC,GACT,MAAO,CAACnH,GAAuBuF,GAAqB,CAOtD,mCAAW6B,GACT,OAAOhmJ,KAAKimJ,2BAA4B,CAM1ClkJ,WAAAA,CAAYm6I,GACVl8I,KAAKkmJ,gBAAgBhK,EAAU,CAGzBgK,eAAAA,CAAgBhK,GACtB,MAAMiK,EACJhC,IAAuBA,GAAoB,iBAC7C,IAAIiC,EACFD,IAA0BhC,GAAoBc,mBAYhD,GAVI/I,EAASb,gBACN8K,GACHlnI,EACE,mFAIJmnI,GAAuB,GAGrBA,EACFpmJ,KAAKqmJ,YAAc,CAAClC,QACf,CACL,MAAMmC,EAActmJ,KAAKqmJ,YAAc,GACvC,IAAK,MAAM5zC,KAAaqzC,GAAiBC,eACnCtzC,GAAaA,EAAU,kBACzB6zC,EAAWjlJ,KAAKoxG,GAGpBqzC,GAAiBG,6BAA8B,CAAK,CAAD,CAOvDM,gBAAAA,GACE,GAAIvmJ,KAAKqmJ,YAAY1nJ,OAAS,EAC5B,OAAOqB,KAAKqmJ,YAAY,GAExB,MAAM,IAAIhoJ,MAAM,0BAA0B,CAO9CmoJ,gBAAAA,GACE,OAAIxmJ,KAAKqmJ,YAAY1nJ,OAAS,EACrBqB,KAAKqmJ,YAAY,GAEjB,IAAI,EApERP,GAA2BG,6BAAG;;;;;;;;;;;;;;;;;ACFvC,MAAMQ,GAAkB,IAIlBC,GAAsC,IAKtCC,GAA8B,MAC9BC,GAAkC,OAQlCC,GAAe,IACfC,GAAe,IACfC,GAAmB,IACnBC,GAAgB,IAChBC,GAAgB,IAChBC,GAAe,IACfC,GAAa,IACbC,GAAmB,IACnBC,GAAO,IAEPC,GAAe,IAKlB,MACUC,GA6BXxlJ,WAAAA,CACS8f,EACC2lI,EACAC,EACAC,EACAC,EACA1K,EACA2K,EACAhI,EACAiI,EACD3I,GATA,KAAEr9H,GAAFA,EACC,KAAS2lI,UAATA,EACA,KAAcC,eAAdA,EACA,KAAcC,eAAdA,EACA,KAAUC,WAAVA,EACA,KAAU1K,WAAVA,EACA,KAAQ2K,SAARA,EACA,KAAahI,cAAbA,EACA,KAAOiI,QAAPA,EACD,KAAa3I,cAAbA,EAtCT,KAAe4I,gBAAG,EAClB,KAAmBC,oBAAc,GAWzB,KAAAC,OAAkC,EA4BxChoJ,KAAKs/I,KAAO9I,EAAW,KAAOx2I,KAAK6hB,GAAK,KACxC7hB,KAAKioJ,kBAAoB,IAAInC,GAAiB0B,GAC9CxnJ,KAAKs/I,KAAK,sBACVt/I,KAAKkoJ,QAAS,CAMRA,MAAAA,GACN,MAAMC,EAAOnoJ,KAAKioJ,kBAAkB1B,mBACpCvmJ,KAAKooJ,MAAQ,IAAID,EACfnoJ,KAAKqoJ,mBACLroJ,KAAKwnJ,UACLxnJ,KAAKynJ,eACLznJ,KAAK0nJ,eACL1nJ,KAAK2nJ,WACL,KACA3nJ,KAAKk/I,eAKPl/I,KAAKsoJ,0BAA4BH,EAAK,iCAAmC,EAEzE,MAAMI,EAAoBvoJ,KAAKwoJ,cAAcxoJ,KAAKooJ,OAC5CK,EAAmBzoJ,KAAK0oJ,iBAAiB1oJ,KAAKooJ,OACpDpoJ,KAAK2oJ,IAAM3oJ,KAAKooJ,MAChBpoJ,KAAK4oJ,IAAM5oJ,KAAKooJ,MAChBpoJ,KAAK6oJ,eAAiB,KACtB7oJ,KAAK8oJ,YAAa,EAQlB3kI,YAAW,KAETnkB,KAAKooJ,OAASpoJ,KAAKooJ,MAAMngJ,KAAKsgJ,EAAmBE,EAAiB,GACjEnyG,KAAKs3B,MAAM,IAEd,MAAMm7E,EAAmBZ,EAAK,mBAAqB,EAC/CY,EAAmB,IACrB/oJ,KAAKgpJ,gBAAkB9P,GAAsB,KAC3Cl5I,KAAKgpJ,gBAAkB,KAClBhpJ,KAAK8oJ,aAEN9oJ,KAAKooJ,OACLpoJ,KAAKooJ,MAAMhJ,cAAgBwH,IAE3B5mJ,KAAKs/I,KACH,wDACEt/I,KAAKooJ,MAAMhJ,cACX,wCAEJp/I,KAAK8oJ,YAAa,EAClB9oJ,KAAKooJ,MAAMjH,yBAEXnhJ,KAAKooJ,OACLpoJ,KAAKooJ,MAAMjJ,UAAYwH,GAEvB3mJ,KAAKs/I,KACH,oDACEt/I,KAAKooJ,MAAMjJ,UACX,uCAKJn/I,KAAKs/I,KAAK,+CACVt/I,KAAKoI,SAAO,GAIfkuC,KAAKs3B,MAAMm7E,IAAyB,CAInCV,gBAAAA,GACN,MAAO,KAAOroJ,KAAK6hB,GAAK,IAAM7hB,KAAK8nJ,iBAAkB,CAG/CY,gBAAAA,CAAiBP,GACvB,OAAOc,IACDd,IAASnoJ,KAAKooJ,MAChBpoJ,KAAKkpJ,kBAAkBD,GACdd,IAASnoJ,KAAK6oJ,gBACvB7oJ,KAAKs/I,KAAK,8BACVt/I,KAAKmpJ,8BAELnpJ,KAAKs/I,KAAK,4BAA6B,CAEzC,CAGIkJ,aAAAA,CAAcL,GACpB,OAAQhqJ,IACS,IAAX6B,KAAKgoJ,SACHG,IAASnoJ,KAAK4oJ,IAChB5oJ,KAAKopJ,0BAA0BjrJ,GACtBgqJ,IAASnoJ,KAAK6oJ,eACvB7oJ,KAAKqpJ,4BAA4BlrJ,GAEjC6B,KAAKs/I,KAAK,6BAA4B,CAG1C,CAMJgK,WAAAA,CAAYC,GAEV,MAAMprI,EAAM,CAAEvR,EAAG,IAAKE,EAAGy8I,GACzBvpJ,KAAKwpJ,UAAUrrI,EAAK,CAGtBsrI,oBAAAA,GACMzpJ,KAAK2oJ,MAAQ3oJ,KAAK6oJ,gBAAkB7oJ,KAAK4oJ,MAAQ5oJ,KAAK6oJ,iBACxD7oJ,KAAKs/I,KACH,2CAA6Ct/I,KAAK6oJ,eAAehK,QAEnE7+I,KAAKooJ,MAAQpoJ,KAAK6oJ,eAClB7oJ,KAAK6oJ,eAAiB,K,CAKlBa,mBAAAA,CAAoBC,GAC1B,GAAI9C,MAAgB8C,EAAa,CAC/B,MAAMC,EAAMD,EAAY9C,IACpB+C,IAAQzC,GACVnnJ,KAAK6pJ,6BACID,IAAQ5C,IAEjBhnJ,KAAKs/I,KAAK,wCACVt/I,KAAK6oJ,eAAezgJ,QAGlBpI,KAAK2oJ,MAAQ3oJ,KAAK6oJ,gBAClB7oJ,KAAK4oJ,MAAQ5oJ,KAAK6oJ,gBAElB7oJ,KAAKoI,SAEEwhJ,IAAQ1C,KACjBlnJ,KAAKs/I,KAAK,0BACVt/I,KAAK8pJ,8BACL9pJ,KAAK6pJ,6BAA4B,EAK/BR,2BAAAA,CAA4BU,GAClC,MAAMC,EAAgBxS,EAAW,IAAKuS,GAChC1gJ,EAAgBmuI,EAAW,IAAKuS,GACtC,GAAc,MAAVC,EACFhqJ,KAAK0pJ,oBAAoBrgJ,OACpB,IAAc,MAAV2gJ,EAIT,MAAM,IAAI3rJ,MAAM,2BAA6B2rJ,GAF7ChqJ,KAAK+nJ,oBAAoB1mJ,KAAKgI,EAEsB,CAAD,CAI/CwgJ,0BAAAA,GACF7pJ,KAAK8pJ,6BAA+B,GACtC9pJ,KAAKs/I,KAAK,oCACVt/I,KAAK8oJ,YAAa,EAClB9oJ,KAAK6oJ,eAAe1H,wBACpBnhJ,KAAKiqJ,wBAGLjqJ,KAAKs/I,KAAK,8BACVt/I,KAAK6oJ,eAAe1zC,KAAK,CAAEvoG,EAAG,IAAKE,EAAG,CAAEF,EAAGy6I,GAAMv6I,EAAG,CAAC,KAAM,CAIvDm9I,mBAAAA,GAENjqJ,KAAK6oJ,eAAe/mI,QAEpB9hB,KAAKs/I,KAAK,mCACVt/I,KAAK6oJ,eAAe1zC,KAAK,CAAEvoG,EAAG,IAAKE,EAAG,CAAEF,EAAGu6I,GAAYr6I,EAAG,CAAC,KAI3D9M,KAAKs/I,KAAK,kCACVt/I,KAAKooJ,MAAMjzC,KAAK,CAAEvoG,EAAG,IAAKE,EAAG,CAAEF,EAAGw6I,GAAkBt6I,EAAG,CAAC,KACxD9M,KAAK2oJ,IAAM3oJ,KAAK6oJ,eAEhB7oJ,KAAKypJ,sBAAuB,CAGtBL,yBAAAA,CAA0BW,GAEhC,MAAMC,EAAgBxS,EAAW,IAAKuS,GAChC1gJ,EAAgBmuI,EAAW,IAAKuS,GACxB,MAAVC,EACFhqJ,KAAKkqJ,WAAW7gJ,GACG,MAAV2gJ,GACThqJ,KAAKmqJ,eAAe9gJ,EAAK,CAIrB8gJ,cAAAA,CAAehsJ,GACrB6B,KAAKoqJ,qBAGLpqJ,KAAKi9I,WAAW9+I,EAAS,CAGnBisJ,kBAAAA,GACDpqJ,KAAK8oJ,aACR9oJ,KAAKsoJ,4BACDtoJ,KAAKsoJ,2BAA6B,IACpCtoJ,KAAKs/I,KAAK,kCACVt/I,KAAK8oJ,YAAa,EAClB9oJ,KAAKooJ,MAAMjH,yBAAuB,CAKhC+I,UAAAA,CAAWP,GACjB,MAAMC,EAAcpS,EAAWqP,GAAc8C,GAC7C,GAAI7C,MAAgB6C,EAAa,CAC/B,MAAMjjJ,EAAUijJ,EAAY7C,IAC5B,GAAI8C,IAAQtC,GAAc,CACxB,MAAM+C,EAAgBtnJ,OAAA4D,OAAA,GAChBD,GAOF1G,KAAKwnJ,UAAU/L,kBAEjB4O,EAAiBtlH,EAAI/kC,KAAKwnJ,UAAUziJ,MAEtC/E,KAAKsqJ,aAAaD,EAAkB,MAC/B,GAAIT,IAAQxC,GAAkB,CACnCpnJ,KAAKs/I,KAAK,qCACVt/I,KAAK4oJ,IAAM5oJ,KAAK6oJ,eAChB,IAAK,IAAInqJ,EAAI,EAAGA,EAAIsB,KAAK+nJ,oBAAoBppJ,SAAUD,EACrDsB,KAAKmqJ,eAAenqJ,KAAK+nJ,oBAAoBrpJ,IAE/CsB,KAAK+nJ,oBAAsB,GAC3B/nJ,KAAKypJ,sBAAuB,MACnBG,IAAQ7C,GAGjB/mJ,KAAKuqJ,sBAAsB7jJ,GAClBkjJ,IAAQ5C,GAEjBhnJ,KAAKwqJ,SAAS9jJ,GACLkjJ,IAAQ3C,GACjBzkJ,EAAM,iBAAmBkE,GAChBkjJ,IAAQ1C,IACjBlnJ,KAAKs/I,KAAK,wBACVt/I,KAAKoqJ,qBACLpqJ,KAAKyqJ,iCAELjoJ,EAAM,mCAAqConJ,EAAI,EAQ7CU,YAAAA,CAAaI,GAMnB,MAAMv7C,EAAYu7C,EAAUzH,GACtB37G,EAAUojH,EAAUl6I,EACpBzL,EAAO2lJ,EAAU3lH,EACvB/kC,KAAK2qJ,UAAYD,EAAUh6H,EAC3B1wB,KAAKwnJ,UAAUziJ,KAAOA,EAEP,IAAX/E,KAAKgoJ,SACPhoJ,KAAKooJ,MAAMtmI,QACX9hB,KAAK4qJ,yBAAyB5qJ,KAAKooJ,MAAOj5C,GACtCsrC,IAAqBnzG,GACvBroB,EAAK,sCAGPjf,KAAK6qJ,mBAAkB,CAInBA,gBAAAA,GACN,MAAM1C,EAAOnoJ,KAAKioJ,kBAAkBzB,mBAChC2B,GACFnoJ,KAAK8qJ,cAAc3C,EAAK,CAIpB2C,aAAAA,CAAc3C,GACpBnoJ,KAAK6oJ,eAAiB,IAAIV,EACxBnoJ,KAAKqoJ,mBACLroJ,KAAKwnJ,UACLxnJ,KAAKynJ,eACLznJ,KAAK0nJ,eACL1nJ,KAAK2nJ,WACL3nJ,KAAK2qJ,WAIP3qJ,KAAK8pJ,4BACH3B,EAAK,iCAAmC,EAE1C,MAAM1I,EAAYz/I,KAAKwoJ,cAAcxoJ,KAAK6oJ,gBACpCnJ,EAAe1/I,KAAK0oJ,iBAAiB1oJ,KAAK6oJ,gBAChD7oJ,KAAK6oJ,eAAe5gJ,KAAKw3I,EAAWC,GAGpCxG,GAAsB,KAChBl5I,KAAK6oJ,iBACP7oJ,KAAKs/I,KAAK,gCACVt/I,KAAK6oJ,eAAezgJ,QAAQ,GAE7BkuC,KAAKs3B,MAAM64E,IAAkB,CAG1B+D,QAAAA,CAASzlJ,GACf/E,KAAKs/I,KAAK,qCAAuCv6I,GACjD/E,KAAKwnJ,UAAUziJ,KAAOA,EAGP,IAAX/E,KAAKgoJ,OACPhoJ,KAAKoI,SAGLpI,KAAK+qJ,oBACL/qJ,KAAKkoJ,SAAQ,CAIT0C,wBAAAA,CAAyBzC,EAAiBh5C,GAChDnvG,KAAKs/I,KAAK,oCACVt/I,KAAKooJ,MAAQD,EACbnoJ,KAAKgoJ,OAAM,EAEPhoJ,KAAK4nJ,WACP5nJ,KAAK4nJ,SAASz4C,EAAWnvG,KAAK2qJ,WAC9B3qJ,KAAK4nJ,SAAW,MAKqB,IAAnC5nJ,KAAKsoJ,2BACPtoJ,KAAKs/I,KAAK,kCACVt/I,KAAK8oJ,YAAa,GAElB5P,GAAsB,KACpBl5I,KAAKyqJ,+BAA+B,GACnCn0G,KAAKs3B,MAAM84E,IAAqC,CAI/C+D,6BAAAA,GAEDzqJ,KAAK8oJ,YAAqD,IAAvC9oJ,KAAKgoJ,SAC3BhoJ,KAAKs/I,KAAK,4BACVt/I,KAAKwpJ,UAAU,CAAE58I,EAAG,IAAKE,EAAG,CAAEF,EAAGy6I,GAAMv6I,EAAG,CAAC,KAAM,CAI7Cq8I,0BAAAA,GACN,MAAMhB,EAAOnoJ,KAAK6oJ,eAClB7oJ,KAAK6oJ,eAAiB,KAClB7oJ,KAAK2oJ,MAAQR,GAAQnoJ,KAAK4oJ,MAAQT,GAEpCnoJ,KAAKoI,OAAO,CAQR8gJ,iBAAAA,CAAkBD,GACxBjpJ,KAAKooJ,MAAQ,KAIRa,GAA4B,IAAXjpJ,KAAKgoJ,OAQL,IAAXhoJ,KAAKgoJ,QACdhoJ,KAAKs/I,KAAK,8BARVt/I,KAAKs/I,KAAK,+BAENt/I,KAAKwnJ,UAAU3L,oBACjBjG,EAAkBrnH,OAAO,QAAUvuB,KAAKwnJ,UAAUziJ,MAElD/E,KAAKwnJ,UAAU5L,aAAe57I,KAAKwnJ,UAAUziJ,OAMjD/E,KAAKoI,OAAQ,CAGPmiJ,qBAAAA,CAAsB/0C,GAC5Bx1G,KAAKs/I,KAAK,0DAENt/I,KAAK6nJ,UACP7nJ,KAAK6nJ,QAAQryC,GACbx1G,KAAK6nJ,QAAU,MAKjB7nJ,KAAK4/I,cAAgB,KAErB5/I,KAAKoI,OAAQ,CAGPohJ,SAAAA,CAAUngJ,GAChB,GAAe,IAAXrJ,KAAKgoJ,OACP,KAAM,8BAENhoJ,KAAK2oJ,IAAIxzC,KAAK9rG,EAAK,CAOvBjB,KAAAA,GACiB,IAAXpI,KAAKgoJ,SACPhoJ,KAAKs/I,KAAK,gCACVt/I,KAAKgoJ,OAAM,EAEXhoJ,KAAK+qJ,oBAED/qJ,KAAK4/I,gBACP5/I,KAAK4/I,gBACL5/I,KAAK4/I,cAAgB,MAAI,CAKvBmL,iBAAAA,GACN/qJ,KAAKs/I,KAAK,iCACNt/I,KAAKooJ,QACPpoJ,KAAKooJ,MAAMhgJ,QACXpI,KAAKooJ,MAAQ,MAGXpoJ,KAAK6oJ,iBACP7oJ,KAAK6oJ,eAAezgJ,QACpBpI,KAAK6oJ,eAAiB,MAGpB7oJ,KAAKgpJ,kBACPtqE,aAAa1+E,KAAKgpJ,iBAClBhpJ,KAAKgpJ,gBAAkB,KAAI;;;;;;;;;;;;;;;;GCliB9B,MACmBgC,GAkBpBpc,GAAAA,CACEqc,EACA5hJ,EACA6hJ,EACA9qF,GAAa,CAGf0gC,KAAAA,CACEmqD,EACA5hJ,EACA6hJ,EACA9qF,GAAa,CAOf+qF,gBAAAA,CAAiBnlJ,GAAa,CAM9BolJ,oBAAAA,CAAqBplJ,GAAa,CAElCqlJ,eAAAA,CACEJ,EACA5hJ,EACA6hJ,GAA2C,CAG7CI,iBAAAA,CACEL,EACA5hJ,EACA6hJ,GAA2C,CAG7CK,kBAAAA,CACEN,EACAC,GAA2C,CAG7CM,WAAAA,CAAYC,GAA+B;;;;;;;;;;;;;;;;GChE1C,MACmBC,GAQpB3pJ,WAAAA,CAAoB4pJ,GAAA,KAAcA,eAAdA,EAPZ,KAAUC,WAKd,CAAC,GAGH3tJ,EAAAA,EAAAA,IACEsC,MAAMC,QAAQmrJ,IAAmBA,EAAehtJ,OAAS,EACzD,6BACA,CAcM+Q,OAAAA,CAAQm8I,KAAsB1V,GACtC,GAAI51I,MAAMC,QAAQR,KAAK4rJ,WAAWC,IAAa,CAE7C,MAAMj2B,EAAY,IAAI51H,KAAK4rJ,WAAWC,IAEtC,IAAK,IAAIntJ,EAAI,EAAGA,EAAIk3H,EAAUj3H,OAAQD,IACpCk3H,EAAUl3H,GAAGmH,SAAS+O,MAAMghH,EAAUl3H,GAAGmoC,QAASsvG,EAAQ,EAKhEvnI,EAAAA,CAAGi9I,EAAmBhmJ,EAAgCghC,GACpD7mC,KAAK8rJ,mBAAmBD,GACxB7rJ,KAAK4rJ,WAAWC,GAAa7rJ,KAAK4rJ,WAAWC,IAAc,GAC3D7rJ,KAAK4rJ,WAAWC,GAAWxqJ,KAAK,CAAEwE,WAAUghC,YAE5C,MAAMklH,EAAY/rJ,KAAKgsJ,gBAAgBH,GACnCE,GACFlmJ,EAAS+O,MAAMiyB,EAASklH,EAAU,CAItCl9I,GAAAA,CAAIg9I,EAAmBhmJ,EAAgCghC,GACrD7mC,KAAK8rJ,mBAAmBD,GACxB,MAAMj2B,EAAY51H,KAAK4rJ,WAAWC,IAAc,GAChD,IAAK,IAAIntJ,EAAI,EAAGA,EAAIk3H,EAAUj3H,OAAQD,IACpC,GACEk3H,EAAUl3H,GAAGmH,WAAaA,KACxBghC,GAAWA,IAAY+uF,EAAUl3H,GAAGmoC,SAGtC,YADA+uF,EAAUrzG,OAAO7jB,EAAG,EACpB,CAKEotJ,kBAAAA,CAAmBD,IACzB5tJ,EAAAA,EAAAA,IACE+B,KAAK2rJ,eAAe9kF,MAAKolF,GAChBA,IAAOJ,IAEhB,kBAAoBA,EACpB;;;;;;;;;;;;;;;;GC/DA,MAAOK,WAAsBR,GAGjC,kBAAO31E,GACL,OAAO,IAAIm2E,EAAgB,CAG7BnqJ,WAAAA,GACE6G,MAAM,CAAC,WAPD,KAAOujJ,SAAG,EAcI,qBAAX1oJ,QAC4B,qBAA5BA,OAAOyhD,mBACb39C,EAAAA,EAAAA,QAED9D,OAAOyhD,iBACL,UACA,KACOllD,KAAKmsJ,UACRnsJ,KAAKmsJ,SAAU,EACfnsJ,KAAK0P,QAAQ,UAAU,GAAM,IAGjC,GAGFjM,OAAOyhD,iBACL,WACA,KACMllD,KAAKmsJ,UACPnsJ,KAAKmsJ,SAAU,EACfnsJ,KAAK0P,QAAQ,UAAU,GAAO,IAGlC,GACD,CAILs8I,eAAAA,CAAgBH,GAEd,OADA5tJ,EAAAA,EAAAA,IAAqB,WAAd4tJ,EAAwB,uBAAyBA,GACjD,CAAC7rJ,KAAKmsJ,QAAS,CAGxBC,eAAAA,GACE,OAAOpsJ,KAAKmsJ,OAAQ;;;;;;;;;;;;;;;;GCvDxB,MAAME,GAAiB,GAGjBC,GAAwB,IAM3B,MAEUC,GAQXxqJ,WAAAA,CAAYyqJ,EAAiCC,GAC3C,QAAiB,IAAbA,EAAqB,CACvBzsJ,KAAK0sJ,QAAWF,EAAwBxiJ,MAAM,KAG9C,IAAI2iJ,EAAS,EACb,IAAK,IAAIjuJ,EAAI,EAAGA,EAAIsB,KAAK0sJ,QAAQ/tJ,OAAQD,IACnCsB,KAAK0sJ,QAAQhuJ,GAAGC,OAAS,IAC3BqB,KAAK0sJ,QAAQC,GAAU3sJ,KAAK0sJ,QAAQhuJ,GACpCiuJ,KAGJ3sJ,KAAK0sJ,QAAQ/tJ,OAASguJ,EAEtB3sJ,KAAK4sJ,UAAY,CAAE,MAEnB5sJ,KAAK0sJ,QAAUF,EACfxsJ,KAAK4sJ,UAAYH,CAAQ,CAI7B7tI,QAAAA,GACE,IAAIqsI,EAAa,GACjB,IAAK,IAAIvsJ,EAAIsB,KAAK4sJ,UAAWluJ,EAAIsB,KAAK0sJ,QAAQ/tJ,OAAQD,IAC5B,KAApBsB,KAAK0sJ,QAAQhuJ,KACfusJ,GAAc,IAAMjrJ,KAAK0sJ,QAAQhuJ,IAIrC,OAAOusJ,GAAc,GAAI,EAE5B,SAEe4B,KACd,OAAO,IAAIN,GAAK,GAClB,CAEM,SAAUO,GAAav5H,GAC3B,OAAIA,EAAKq5H,WAAar5H,EAAKm5H,QAAQ/tJ,OAC1B,KAGF40B,EAAKm5H,QAAQn5H,EAAKq5H,UAC3B,CAKM,SAAUG,GAAcx5H,GAC5B,OAAOA,EAAKm5H,QAAQ/tJ,OAAS40B,EAAKq5H,SACpC,CAEM,SAAUI,GAAaz5H,GAC3B,IAAIk5H,EAAWl5H,EAAKq5H,UAIpB,OAHIH,EAAWl5H,EAAKm5H,QAAQ/tJ,QAC1B8tJ,IAEK,IAAIF,GAAKh5H,EAAKm5H,QAASD,EAChC,CAEM,SAAUQ,GAAY15H,GAC1B,OAAIA,EAAKq5H,UAAYr5H,EAAKm5H,QAAQ/tJ,OACzB40B,EAAKm5H,QAAQn5H,EAAKm5H,QAAQ/tJ,OAAS,GAGrC,IACT,CAEM,SAAUuuJ,GAAuB35H,GACrC,IAAI03H,EAAa,GACjB,IAAK,IAAIvsJ,EAAI60B,EAAKq5H,UAAWluJ,EAAI60B,EAAKm5H,QAAQ/tJ,OAAQD,IAC5B,KAApB60B,EAAKm5H,QAAQhuJ,KACfusJ,GAAc,IAAMn/I,mBAAmB5M,OAAOq0B,EAAKm5H,QAAQhuJ,MAI/D,OAAOusJ,GAAc,GACvB,CAKG,SACakC,GAAU55H,EAAY65H,EAAgB,GACpD,OAAO75H,EAAKm5H,QAAQ7sI,MAAM0T,EAAKq5H,UAAYQ,EAC7C,CAEM,SAAUC,GAAW95H,GACzB,GAAIA,EAAKq5H,WAAar5H,EAAKm5H,QAAQ/tJ,OACjC,OAAO,KAGT,MAAM2uJ,EAAS,GACf,IAAK,IAAI5uJ,EAAI60B,EAAKq5H,UAAWluJ,EAAI60B,EAAKm5H,QAAQ/tJ,OAAS,EAAGD,IACxD4uJ,EAAOjsJ,KAAKkyB,EAAKm5H,QAAQhuJ,IAG3B,OAAO,IAAI6tJ,GAAKe,EAAQ,EAC1B,CAEgB,SAAAC,GAAUh6H,EAAYi6H,GACpC,MAAMF,EAAS,GACf,IAAK,IAAI5uJ,EAAI60B,EAAKq5H,UAAWluJ,EAAI60B,EAAKm5H,QAAQ/tJ,OAAQD,IACpD4uJ,EAAOjsJ,KAAKkyB,EAAKm5H,QAAQhuJ,IAG3B,GAAI8uJ,aAAwBjB,GAC1B,IAAK,IAAI7tJ,EAAI8uJ,EAAaZ,UAAWluJ,EAAI8uJ,EAAad,QAAQ/tJ,OAAQD,IACpE4uJ,EAAOjsJ,KAAKmsJ,EAAad,QAAQhuJ,QAE9B,CACL,MAAM+uJ,EAAcD,EAAaxjJ,MAAM,KACvC,IAAK,IAAItL,EAAI,EAAGA,EAAI+uJ,EAAY9uJ,OAAQD,IAClC+uJ,EAAY/uJ,GAAGC,OAAS,GAC1B2uJ,EAAOjsJ,KAAKosJ,EAAY/uJ,GAAG,CAKjC,OAAO,IAAI6tJ,GAAKe,EAAQ,EAC1B,CAKM,SAAUI,GAAYn6H,GAC1B,OAAOA,EAAKq5H,WAAar5H,EAAKm5H,QAAQ/tJ,MACxC,CAKgB,SAAAgvJ,GAAgBC,EAAiBC,GAC/C,MAAMptB,EAAQqsB,GAAac,GACzBltB,EAAQosB,GAAae,GACvB,GAAc,OAAVptB,EACF,OAAOotB,EACF,GAAIptB,IAAUC,EACnB,OAAOitB,GAAgBX,GAAaY,GAAYZ,GAAaa,IAE7D,MAAM,IAAIxvJ,MACR,8BACEwvJ,EADF,8BAIED,EACA,IAGR,CAuBgB,SAAAE,GAAWv6H,EAAY84F,GACrC,GAAI0gC,GAAcx5H,KAAUw5H,GAAc1gC,GACxC,OAAO,EAGT,IACE,IAAI3tH,EAAI60B,EAAKq5H,UAAWv/I,EAAIg/G,EAAMugC,UAClCluJ,GAAK60B,EAAKm5H,QAAQ/tJ,OAClBD,IAAK2O,IAEL,GAAIkmB,EAAKm5H,QAAQhuJ,KAAO2tH,EAAMqgC,QAAQr/I,GACpC,OAAO,EAIX,OAAO,CACT,CAKgB,SAAA0gJ,GAAax6H,EAAY84F,GACvC,IAAI3tH,EAAI60B,EAAKq5H,UACTv/I,EAAIg/G,EAAMugC,UACd,GAAIG,GAAcx5H,GAAQw5H,GAAc1gC,GACtC,OAAO,EAET,MAAO3tH,EAAI60B,EAAKm5H,QAAQ/tJ,OAAQ,CAC9B,GAAI40B,EAAKm5H,QAAQhuJ,KAAO2tH,EAAMqgC,QAAQr/I,GACpC,OAAO,IAEP3O,IACA2O,CAAE,CAEN,OAAO,CACT,CAWG,MACU2gJ,GASXjsJ,WAAAA,CAAYwxB,EAAmB06H,GAAA,KAAYA,aAAZA,EAC7BjuJ,KAAKkuJ,OAASf,GAAU55H,EAAM,GAE9BvzB,KAAKmuJ,YAAc73G,KAAK3b,IAAI,EAAG36B,KAAKkuJ,OAAOvvJ,QAE3C,IAAK,IAAID,EAAI,EAAGA,EAAIsB,KAAKkuJ,OAAOvvJ,OAAQD,IACtCsB,KAAKmuJ,cAAevgJ,EAAAA,EAAAA,IAAa5N,KAAKkuJ,OAAOxvJ,IAE/C0vJ,GAAyBpuJ,KAAM,EAInB,SAAAquJ,GACdC,EACA/kI,GAGI+kI,EAAeJ,OAAOvvJ,OAAS,IACjC2vJ,EAAeH,aAAe,GAEhCG,EAAeJ,OAAO7sJ,KAAKkoB,GAC3B+kI,EAAeH,cAAevgJ,EAAAA,EAAAA,IAAa2b,GAC3C6kI,GAAyBE,EAC3B,CAEM,SAAUC,GAAkBD,GAChC,MAAMr/I,EAAOq/I,EAAeJ,OAAOh/I,MACnCo/I,EAAeH,cAAevgJ,EAAAA,EAAAA,IAAaqB,GAEvCq/I,EAAeJ,OAAOvvJ,OAAS,IACjC2vJ,EAAeH,aAAe,EAElC,CAEA,SAASC,GAAyBE,GAChC,GAAIA,EAAeH,YAAc7B,GAC/B,MAAM,IAAIjuJ,MACRiwJ,EAAeL,aACb,8BACA3B,GACA,WACAgC,EAAeH,YACf,MAGN,GAAIG,EAAeJ,OAAOvvJ,OAAS0tJ,GACjC,MAAM,IAAIhuJ,MACRiwJ,EAAeL,aACb,iEACA5B,GACA,gCACAmC,GAA4BF,GAGpC,CAKM,SAAUE,GACdF,GAEA,OAAqC,IAAjCA,EAAeJ,OAAOvvJ,OACjB,GAEF,gBAAkB2vJ,EAAeJ,OAAO1uJ,KAAK,KAAO,GAC7D;;;;;;;;;;;;;;;;GCxTM,MAAOivJ,WAA0B/C,GAGrC,kBAAO31E,GACL,OAAO,IAAI04E,EAAoB,CAGjC1sJ,WAAAA,GAEE,IAAI47E,EACA+wE,EAFJ9lJ,MAAM,CAAC,YAIe,qBAAbzE,UAC8B,qBAA9BA,SAAS+gD,mBAEkB,qBAAvB/gD,SAAS,WAElBuqJ,EAAmB,mBACnB/wE,EAAS,UACiC,qBAA1Bx5E,SAAS,cACzBuqJ,EAAmB,sBACnB/wE,EAAS,aACgC,qBAAzBx5E,SAAS,aACzBuqJ,EAAmB,qBACnB/wE,EAAS,YACoC,qBAA7Bx5E,SAAS,kBACzBuqJ,EAAmB,yBACnB/wE,EAAS,iBAQb39E,KAAK2uJ,UAAW,EAEZD,GACFvqJ,SAAS+gD,iBACPwpG,GACA,KACE,MAAME,GAAWzqJ,SAASw5E,GACtBixE,IAAY5uJ,KAAK2uJ,WACnB3uJ,KAAK2uJ,SAAWC,EAChB5uJ,KAAK0P,QAAQ,UAAWk/I,GAAS,IAGrC,EACD,CAIL5C,eAAAA,CAAgBH,GAEd,OADA5tJ,EAAAA,EAAAA,IAAqB,YAAd4tJ,EAAyB,uBAAyBA,GAClD,CAAC7rJ,KAAK2uJ,SAAU;;;;;;;;;;;;;;;;GCjC3B,MAAME,GAAsB,IACtBC,GAA8B,IAC9BC,GAAiC,IACjCC,GAA6B,IAC7BC,GAAgC,IAChCC,GAA+B,cAG/BC,GAA0B,EAoC1B,MAAOC,WAA6BpE,GAwDxCjpJ,WAAAA,CACUylJ,EACAC,EACA4H,EAMAC,EACAC,EACAC,EACAC,EACAC,GAIR,GAFA9mJ,QAdQ,KAAS4+I,UAATA,EACA,KAAcC,eAAdA,EACA,KAAa4H,cAAbA,EAMA,KAAgBC,iBAAhBA,EACA,KAAmBC,oBAAnBA,EACA,KAAkBC,mBAAlBA,EACA,KAAsBC,uBAAtBA,EACA,KAAaC,cAAbA,EAnEV,KAAA7tI,GAAKutI,GAAqBO,8BAClB,KAAIrQ,KAAG9I,EAAW,KAAOx2I,KAAK6hB,GAAK,KAEnC,KAAiB+tI,kBAAkC,CAAC,EAC3C,KAAAC,QAGb,IAAIj9I,IACA,KAAgBk9I,iBAAqB,GACrC,KAAgBC,iBAAqB,GACrC,KAAoBC,qBAAG,EACvB,KAAoBC,qBAAG,EACvB,KAAyBC,0BAA0B,GACnD,KAAUC,YAAG,EACb,KAAeC,gBAAGvB,GAClB,KAAkBwB,mBAAGvB,GACrB,KAAsBwB,uBAAiC,KAC/D,KAAapR,cAAkB,KAEvB,KAAyBqR,0BAAkB,KAE3C,KAAQ5B,UAAY,EAGpB,KAAc6B,eAA0C,CAAC,EACzD,KAAcC,eAAG,EAEjB,KAASC,UAGN,KAEH,KAAU/I,WAAkB,KAC5B,KAAcD,eAAkB,KAChC,KAAkBiJ,oBAAG,EACrB,KAAsBC,uBAAG,EACzB,KAA0BC,2BAAG,EAE7B,KAAgBC,kBAAG,EACnB,KAA0BC,2BAAkB,KAC5C,KAA8BC,+BAAkB,KA+BlDtB,KAAkBhoJ,EAAAA,EAAAA,MACpB,MAAM,IAAIrJ,MACR,kFAIJowJ,GAAkB14E,cAAcnnE,GAAG,UAAW5O,KAAKixJ,WAAYjxJ,OAEpB,IAAvCwnJ,EAAUziJ,KAAK4d,QAAQ,YACzBupI,GAAcn2E,cAAcnnE,GAAG,SAAU5O,KAAKkxJ,UAAWlxJ,KAAK,CAIxDspJ,WAAAA,CACR6H,EACAnrG,EACAorG,GAEA,MAAMC,IAAcrxJ,KAAKywJ,eAEnBtyI,EAAM,CAAEtC,EAAGw1I,EAAWxmJ,EAAGsmJ,EAAQrmJ,EAAGk7C,GAC1ChmD,KAAKs/I,MAAKl4I,EAAAA,EAAAA,IAAU+W,KACpBlgB,EAAAA,EAAAA,IACE+B,KAAKmwJ,WACL,0DAEFnwJ,KAAK0wJ,UAAUpH,YAAYnrI,GACvBizI,IACFpxJ,KAAKwwJ,eAAea,GAAaD,EAAU,CAI/ClgJ,GAAAA,CAAIwhH,GACF1yH,KAAKsxJ,kBAEL,MAAMpf,EAAW,IAAI3sI,EAAAA,GACfyC,EAAU,CACdvJ,EAAGi0H,EAAM6+B,MAAM3yI,WACf4yI,EAAG9+B,EAAM++B,cAELC,EAAiB,CACrBP,OAAQ,IACRnpJ,UACAkjJ,WAAa/sJ,IACX,MAAMuI,EAAUvI,EAAQ,KACH,OAAjBA,EAAQ,KACV+zI,EAASzsI,QAAQiB,GAEjBwrI,EAAS1sI,OAAOkB,EAAS,GAI/B1G,KAAK+vJ,iBAAiB1uJ,KAAKqwJ,GAC3B1xJ,KAAKiwJ,uBACL,MAAM1hJ,EAAQvO,KAAK+vJ,iBAAiBpxJ,OAAS,EAM7C,OAJIqB,KAAKmwJ,YACPnwJ,KAAK2xJ,SAASpjJ,GAGT2jI,EAASxsI,OAAQ,CAG1B2wH,MAAAA,CACE3D,EACAk/B,EACAvwG,EACA6pG,GAEAlrJ,KAAKsxJ,kBAEL,MAAMO,EAAUn/B,EAAMo/B,iBAChB7G,EAAav4B,EAAM6+B,MAAM3yI,WAC/B5e,KAAKs/I,KAAK,qBAAuB2L,EAAa,IAAM4G,GAC/C7xJ,KAAK6vJ,QAAQl6I,IAAIs1I,IACpBjrJ,KAAK6vJ,QAAQx9I,IAAI44I,EAAY,IAAIr4I,MAEnC3U,EAAAA,EAAAA,IACEy0H,EAAMq/B,aAAaC,cAAgBt/B,EAAMq/B,aAAaE,eACtD,uDAEFh0J,EAAAA,EAAAA,KACG+B,KAAK6vJ,QAAQ3+I,IAAI+5I,GAAat1I,IAAIk8I,GACnC,gDAEF,MAAMK,EAAyB,CAC7BhH,aACAiH,OAAQP,EACRl/B,QACArxE,OAEFrhD,KAAK6vJ,QAAQ3+I,IAAI+5I,GAAa54I,IAAIw/I,EAASK,GAEvClyJ,KAAKmwJ,YACPnwJ,KAAKoyJ,YAAYF,EAAW,CAIxBP,QAAAA,CAASpjJ,GACf,MAAM2C,EAAMlR,KAAK+vJ,iBAAiBxhJ,GAClCvO,KAAKspJ,YAAY,IAAKp4I,EAAIlJ,SAAU7J,WAC3B6B,KAAK+vJ,iBAAiBxhJ,GAC7BvO,KAAKiwJ,uBAC6B,IAA9BjwJ,KAAKiwJ,uBACPjwJ,KAAK+vJ,iBAAmB,IAEtB7+I,EAAIg6I,YACNh6I,EAAIg6I,WAAW/sJ,EAAS,GAEzB,CAGGi0J,WAAAA,CAAYF,GAClB,MAAMx/B,EAAQw/B,EAAWx/B,MACnBu4B,EAAav4B,EAAM6+B,MAAM3yI,WACzBizI,EAAUn/B,EAAMo/B,iBACtB9xJ,KAAKs/I,KAAK,aAAe2L,EAAa,QAAU4G,GAChD,MAAMQ,EAAgC,CAAW5zJ,EAAGwsJ,GAE9CkG,EAAS,IAGXe,EAAW7wG,MACbgxG,EAAI,KAAO3/B,EAAM++B,aACjBY,EAAI,KAAOH,EAAW7wG,KAGxBgxG,EAAa,KAAOH,EAAWC,SAE/BnyJ,KAAKspJ,YAAY6H,EAAQkB,GAAMl0J,IAC7B,MAAMuI,EAAmBvI,EAAiB,KACpCumG,EAASvmG,EAAmB,KAGlCixJ,GAAqBkD,sBAAsB5rJ,EAASgsH,GAEpD,MAAM6/B,EACJvyJ,KAAK6vJ,QAAQ3+I,IAAI+5I,IACjBjrJ,KAAK6vJ,QAAQ3+I,IAAI+5I,GAAa/5I,IAAI2gJ,GAEhCU,IAAsBL,IACxBlyJ,KAAKs/I,KAAK,kBAAmBnhJ,GAEd,OAAXumG,GACF1kG,KAAKwyJ,cAAcvH,EAAY4G,GAG7BK,EAAWhH,YACbgH,EAAWhH,WAAWxmD,EAAQh+F,GAAQ,GAGzC,CAGG,4BAAO4rJ,CAAsB5rJ,EAAkBgsH,GACrD,GAAIhsH,GAA8B,kBAAZA,IAAwByD,EAAAA,EAAAA,IAASzD,EAAS,KAAM,CAEpE,MAAM+rJ,GAAWnoJ,EAAAA,EAAAA,IAAQ5D,EAAgB,KACzC,GAAInG,MAAMC,QAAQiyJ,KAAcA,EAAS9vI,QAAQ,YAAa,CAC5D,MAAM+vI,EACJ,gBAAkBhgC,EAAMq/B,aAAaY,WAAW/zI,WAAa,IACzDg0I,EAAYlgC,EAAM6+B,MAAM3yI,WAC9BK,EAEI,wGAA2CyzI,QACxCE,mDACL,CAAD,EAKPzH,gBAAAA,CAAiBnlJ,GACfhG,KAAK2nJ,WAAa3hJ,EAClBhG,KAAKs/I,KAAK,wBACNt/I,KAAK2nJ,WACP3nJ,KAAK6yJ,UAID7yJ,KAAKmwJ,YACPnwJ,KAAKspJ,YAAY,SAAU,CAAC,GAAG,SAInCtpJ,KAAK8yJ,uCAAuC9sJ,EAAO,CAG7C8sJ,sCAAAA,CAAuCC,GAG7C,MAAMC,EAAmBD,GAAoC,KAAtBA,EAAWp0J,QAC9Cq0J,IAAoB9oJ,EAAAA,EAAAA,IAAQ6oJ,MAC9B/yJ,KAAKs/I,KACH,iEAEFt/I,KAAKqwJ,mBAAqBtB,GAA8B,CAI5D3D,oBAAAA,CAAqBplJ,GACnBhG,KAAK0nJ,eAAiB1hJ,EACtBhG,KAAKs/I,KAAK,6BACNt/I,KAAK0nJ,eACP1nJ,KAAKizJ,cAKDjzJ,KAAKmwJ,YACPnwJ,KAAKspJ,YAAY,WAAY,CAAC,GAAG,QAAS,CAShDuJ,OAAAA,GACE,GAAI7yJ,KAAKmwJ,YAAcnwJ,KAAK2nJ,WAAY,CACtC,MAAM3hJ,EAAQhG,KAAK2nJ,WACbuL,GAAajpJ,EAAAA,EAAAA,IAAcjE,GAAS,OAAS,QAC7C0tG,EAAwC,CAAEy/C,KAAMntJ,GAC3B,OAAvBhG,KAAK0vJ,cACPh8C,EAAY,WAAY,EACe,kBAAvB1zG,KAAK0vJ,gBACrBh8C,EAAY,WAAa1zG,KAAK0vJ,eAEhC1vJ,KAAKspJ,YACH4J,EACAx/C,GACC/oG,IACC,MAAM+5F,EAAS/5F,EAAe,KACxBtB,EAAQsB,EAAa,MAAmB,QAE1C3K,KAAK2nJ,aAAe3hJ,IACP,OAAX0+F,EACF1kG,KAAK4wJ,uBAAyB,EAG9B5wJ,KAAKozJ,eAAe1uD,EAAQr7F,GAAK,GAIvC,CAAD,CASL4pJ,WAAAA,GACMjzJ,KAAKmwJ,YAAcnwJ,KAAK0nJ,gBAC1B1nJ,KAAKspJ,YACH,WACA,CAAE,MAAStpJ,KAAK0nJ,iBACf/8I,IACC,MAAM+5F,EAAS/5F,EAAe,KACxBtB,EAAQsB,EAAa,MAAmB,QAC/B,OAAX+5F,EACF1kG,KAAK6wJ,2BAA6B,EAElC7wJ,KAAKqzJ,mBAAmB3uD,EAAQr7F,EAAM,GAG3C,CAOLk+H,QAAAA,CAAS7U,EAAqBrxE,GAC5B,MAAM4pG,EAAav4B,EAAM6+B,MAAM3yI,WACzBizI,EAAUn/B,EAAMo/B,iBAEtB9xJ,KAAKs/I,KAAK,uBAAyB2L,EAAa,IAAM4G,IAEtD5zJ,EAAAA,EAAAA,IACEy0H,EAAMq/B,aAAaC,cAAgBt/B,EAAMq/B,aAAaE,eACtD,wDAEF,MAAM57B,EAASr2H,KAAKwyJ,cAAcvH,EAAY4G,GAC1Cx7B,GAAUr2H,KAAKmwJ,YACjBnwJ,KAAKszJ,cAAcrI,EAAY4G,EAASn/B,EAAM++B,aAAcpwG,EAAI,CAI5DiyG,aAAAA,CACNrI,EACA4G,EACA0B,EACAlyG,GAEArhD,KAAKs/I,KAAK,eAAiB2L,EAAa,QAAU4G,GAElD,MAAMQ,EAAgC,CAAW5zJ,EAAGwsJ,GAC9CkG,EAAS,IAEX9vG,IACFgxG,EAAI,KAAOkB,EACXlB,EAAI,KAAOhxG,GAGbrhD,KAAKspJ,YAAY6H,EAAQkB,EAAK,CAGhChH,eAAAA,CACEJ,EACA5hJ,EACA6hJ,GAEAlrJ,KAAKsxJ,kBAEDtxJ,KAAKmwJ,WACPnwJ,KAAKwzJ,kBAAkB,IAAKvI,EAAY5hJ,EAAM6hJ,GAE9ClrJ,KAAKkwJ,0BAA0B7uJ,KAAK,CAClC4pJ,aACAkG,OAAQ,IACR9nJ,OACA6hJ,cACA,CAINI,iBAAAA,CACEL,EACA5hJ,EACA6hJ,GAEAlrJ,KAAKsxJ,kBAEDtxJ,KAAKmwJ,WACPnwJ,KAAKwzJ,kBAAkB,KAAMvI,EAAY5hJ,EAAM6hJ,GAE/ClrJ,KAAKkwJ,0BAA0B7uJ,KAAK,CAClC4pJ,aACAkG,OAAQ,KACR9nJ,OACA6hJ,cACA,CAINK,kBAAAA,CACEN,EACAC,GAEAlrJ,KAAKsxJ,kBAEDtxJ,KAAKmwJ,WACPnwJ,KAAKwzJ,kBAAkB,KAAMvI,EAAY,KAAMC,GAE/ClrJ,KAAKkwJ,0BAA0B7uJ,KAAK,CAClC4pJ,aACAkG,OAAQ,KACR9nJ,KAAM,KACN6hJ,cACA,CAIEsI,iBAAAA,CACNrC,EACAlG,EACA5hJ,EACA6hJ,GAEA,MAAMljJ,EAAU,CAAWvJ,EAAGwsJ,EAAqBn+I,EAAGzD,GACtDrJ,KAAKs/I,KAAK,gBAAkB6R,EAAQnpJ,GACpChI,KAAKspJ,YAAY6H,EAAQnpJ,GAAUq8F,IAC7B6mD,GACF/mI,YAAW,KACT+mI,EACE7mD,EAAoB,KACpBA,EAAoB,KACrB,GACA/tD,KAAKs3B,MAAM,GAAI,GAEnB,CAGLghE,GAAAA,CACEqc,EACA5hJ,EACA6hJ,EACA9qF,GAEApgE,KAAKyzJ,YAAY,IAAKxI,EAAY5hJ,EAAM6hJ,EAAY9qF,EAAM,CAG5D0gC,KAAAA,CACEmqD,EACA5hJ,EACA6hJ,EACA9qF,GAEApgE,KAAKyzJ,YAAY,IAAKxI,EAAY5hJ,EAAM6hJ,EAAY9qF,EAAM,CAG5DqzF,WAAAA,CACEtC,EACAlG,EACA5hJ,EACA6hJ,EACA9qF,GAEApgE,KAAKsxJ,kBAEL,MAAMtpJ,EAAoC,CAC/BvJ,EAAGwsJ,EACHn+I,EAAGzD,QAGDzG,IAATw9D,IACFp4D,EAAiB,KAAOo4D,GAI1BpgE,KAAK8vJ,iBAAiBzuJ,KAAK,CACzB8vJ,SACAnpJ,UACAkjJ,eAGFlrJ,KAAKgwJ,uBACL,MAAMzhJ,EAAQvO,KAAK8vJ,iBAAiBnxJ,OAAS,EAEzCqB,KAAKmwJ,WACPnwJ,KAAK0zJ,SAASnlJ,GAEdvO,KAAKs/I,KAAK,kBAAoB2L,EAAW,CAIrCyI,QAAAA,CAASnlJ,GACf,MAAM4iJ,EAASnxJ,KAAK8vJ,iBAAiBvhJ,GAAO4iJ,OACtCnpJ,EAAUhI,KAAK8vJ,iBAAiBvhJ,GAAOvG,QACvCkjJ,EAAalrJ,KAAK8vJ,iBAAiBvhJ,GAAO28I,WAChDlrJ,KAAK8vJ,iBAAiBvhJ,GAAOolJ,OAAS3zJ,KAAKmwJ,WAE3CnwJ,KAAKspJ,YAAY6H,EAAQnpJ,GAAU7J,IACjC6B,KAAKs/I,KAAK6R,EAAS,YAAahzJ,UAEzB6B,KAAK8vJ,iBAAiBvhJ,GAC7BvO,KAAKgwJ,uBAG6B,IAA9BhwJ,KAAKgwJ,uBACPhwJ,KAAK8vJ,iBAAmB,IAGtB5E,GACFA,EACE/sJ,EAAmB,KACnBA,EAAmB,KACnB,GAEH,CAGLqtJ,WAAAA,CAAYC,GAEV,GAAIzrJ,KAAKmwJ,WAAY,CACnB,MAAMnoJ,EAAU,CAAepJ,EAAG6sJ,GAClCzrJ,KAAKs/I,KAAK,cAAet3I,GAEzBhI,KAAKspJ,YAAsB,IAAKthJ,GAASG,IACvC,MAAMu8F,EAASv8F,EAAkB,KACjC,GAAe,OAAXu8F,EAAiB,CACnB,MAAMkvD,EAAczrJ,EAAkB,KACtCnI,KAAKs/I,KAAK,cAAe,wBAA0BsU,EAAa,IAEjE,CAAD,CAIEzJ,cAAAA,CAAehsJ,GACrB,GAAI,MAAOA,EAAS,CAElB6B,KAAKs/I,KAAK,iBAAkBl4I,EAAAA,EAAAA,IAAUjJ,IACtC,MAAM01J,EAAS11J,EAAQ,KACjBizJ,EAAapxJ,KAAKwwJ,eAAeqD,GACnCzC,WACKpxJ,KAAKwwJ,eAAeqD,GAC3BzC,EAAWjzJ,EAAiB,MAAK,KAE9B,IAAI,UAAWA,EACpB,KAAM,qCAAuCA,EAAQ,SAC5C,MAAOA,GAEhB6B,KAAK8zJ,YAAY31J,EAAQ,KAAgBA,EAAQ,KAAY,CAAD,CAIxD21J,WAAAA,CAAY3C,EAAgBnrG,GAClChmD,KAAKs/I,KAAK,sBAAuB6R,EAAQnrG,GAC1B,MAAXmrG,EACFnxJ,KAAKqvJ,cACHrpG,EAAc,KACdA,EAAc,MACF,EACZA,EAAK,MAEa,MAAXmrG,EACTnxJ,KAAKqvJ,cACHrpG,EAAc,KACdA,EAAc,MACD,EACbA,EAAK,MAEa,MAAXmrG,EACTnxJ,KAAK+zJ,iBACH/tG,EAAc,KACdA,EAAe,MAEG,OAAXmrG,EACTnxJ,KAAKozJ,eACHptG,EAAqB,KACrBA,EAAuB,MAEL,QAAXmrG,EACTnxJ,KAAKqzJ,mBACHrtG,EAAqB,KACrBA,EAAuB,MAEL,OAAXmrG,EACTnxJ,KAAKg0J,uBAAuBhuG,GAE5BxjD,EACE,8CACE4E,EAAAA,EAAAA,IAAU+pJ,GACV,qCACH,CAIGvJ,QAAAA,CAASz4C,EAAmBw7C,GAClC3qJ,KAAKs/I,KAAK,oBACVt/I,KAAKmwJ,YAAa,EAClBnwJ,KAAKgxJ,gCAAiC,IAAIhuJ,MAAOE,UACjDlD,KAAKi0J,iBAAiB9kD,GACtBnvG,KAAKk/I,cAAgByL,EACjB3qJ,KAAK8wJ,kBACP9wJ,KAAKk0J,oBAEPl0J,KAAKm0J,gBACLn0J,KAAK8wJ,kBAAmB,EACxB9wJ,KAAKsvJ,kBAAiB,EAAM,CAGtB8E,gBAAAA,CAAiBlmI,IACvBjwB,EAAAA,EAAAA,KACG+B,KAAK0wJ,UACN,0DAGE1wJ,KAAKuwJ,2BACP7xE,aAAa1+E,KAAKuwJ,2BAMpBvwJ,KAAKuwJ,0BAA4BpsI,YAAW,KAC1CnkB,KAAKuwJ,0BAA4B,KACjCvwJ,KAAKq0J,sBAAsB,GAE1B/9G,KAAKs3B,MAAM1/C,GAAiB,CAGzBojI,eAAAA,IACDtxJ,KAAK0wJ,WAAa1wJ,KAAK8wJ,kBAC1B9wJ,KAAKo0J,iBAAiB,EAAE,CAIpBnD,UAAAA,CAAWrC,GAGfA,IACC5uJ,KAAK2uJ,UACN3uJ,KAAKowJ,kBAAoBpwJ,KAAKqwJ,qBAE9BrwJ,KAAKs/I,KAAK,2CACVt/I,KAAKowJ,gBAAkBvB,GAElB7uJ,KAAK0wJ,WACR1wJ,KAAKo0J,iBAAiB,IAG1Bp0J,KAAK2uJ,SAAWC,CAAQ,CAGlBsC,SAAAA,CAAUoD,GACZA,GACFt0J,KAAKs/I,KAAK,wBACVt/I,KAAKowJ,gBAAkBvB,GAClB7uJ,KAAK0wJ,WACR1wJ,KAAKo0J,iBAAiB,KAGxBp0J,KAAKs/I,KAAK,8CACNt/I,KAAK0wJ,WACP1wJ,KAAK0wJ,UAAUtoJ,QAAO,CAKpBmsJ,qBAAAA,GAWN,GAVAv0J,KAAKs/I,KAAK,4BACVt/I,KAAKmwJ,YAAa,EAClBnwJ,KAAK0wJ,UAAY,KAGjB1wJ,KAAKw0J,0BAGLx0J,KAAKwwJ,eAAiB,CAAC,EAEnBxwJ,KAAKy0J,mBAAoB,CAC3B,GAAKz0J,KAAK2uJ,UAIH,GAAI3uJ,KAAKgxJ,+BAAgC,CAE9C,MAAM0D,GACJ,IAAI1xJ,MAAOE,UAAYlD,KAAKgxJ,+BAC1B0D,EAAgCzF,KAClCjvJ,KAAKowJ,gBAAkBvB,IAEzB7uJ,KAAKgxJ,+BAAiC,IAAK,OAV3ChxJ,KAAKs/I,KAAK,8CACVt/I,KAAKowJ,gBAAkBpwJ,KAAKqwJ,mBAC5BrwJ,KAAK+wJ,4BAA6B,IAAI/tJ,MAAOE,UAW/C,MAAMyxJ,GACJ,IAAI3xJ,MAAOE,UAAYlD,KAAK+wJ,2BAC9B,IAAI6D,EAAiBt+G,KAAK3b,IACxB,EACA36B,KAAKowJ,gBAAkBuE,GAEzBC,EAAiBt+G,KAAKu3B,SAAW+mF,EAEjC50J,KAAKs/I,KAAK,0BAA4BsV,EAAiB,MACvD50J,KAAKo0J,iBAAiBQ,GAGtB50J,KAAKowJ,gBAAkB95G,KAAKC,IAC1Bv2C,KAAKqwJ,mBACLrwJ,KAAKowJ,gBAAkBpB,GACvB,CAEJhvJ,KAAKsvJ,kBAAiB,EAAO,CAGvB,0BAAM+E,GACZ,GAAIr0J,KAAKy0J,mBAAoB,CAC3Bz0J,KAAKs/I,KAAK,+BACVt/I,KAAK+wJ,4BAA6B,IAAI/tJ,MAAOE,UAC7ClD,KAAKgxJ,+BAAiC,KACtC,MAAM6D,EAAgB70J,KAAKmqJ,eAAev4I,KAAK5R,MACzC80J,EAAU90J,KAAK4nJ,SAASh2I,KAAK5R,MAC7B0/I,EAAe1/I,KAAKu0J,sBAAsB3iJ,KAAK5R,MAC/C6+I,EAAS7+I,KAAK6hB,GAAK,IAAMutI,GAAqB2F,oBAC9C7V,EAAgBl/I,KAAKk/I,cAC3B,IAAI8V,GAAW,EACXC,EAAgC,KACpC,MAAMC,EAAU,WACVD,EACFA,EAAW7sJ,SAEX4sJ,GAAW,EACXtV,IAEJ,EACMyV,EAAgB,SAAUh3I,IAC9BlgB,EAAAA,EAAAA,IACEg3J,EACA,0DAEFA,EAAW3L,YAAYnrI,EACzB,EAEAne,KAAK0wJ,UAAY,CACftoJ,MAAO8sJ,EACP5L,YAAa6L,GAGf,MAAMzb,EAAe15I,KAAK2wJ,mBAC1B3wJ,KAAK2wJ,oBAAqB,EAE1B,IAGE,MAAO3R,EAAWD,SAAuBp5I,QAAQy6G,IAAI,CACnDpgH,KAAKwvJ,mBAAmB/V,SAASC,GACjC15I,KAAKyvJ,uBAAuBhW,SAASC,KAGlCsb,EAoBHpgB,EAAI,0CAnBJA,EAAI,8CACJ50I,KAAK2nJ,WAAa3I,GAAaA,EAAUzE,YACzCv6I,KAAK0nJ,eAAiB3I,GAAiBA,EAAc/4I,MACrDivJ,EAAa,IAAI1N,GACf1I,EACA7+I,KAAKwnJ,UACLxnJ,KAAKynJ,eACLznJ,KAAK0nJ,eACL1nJ,KAAK2nJ,WACLkN,EACAC,EACApV,GACclqC,IACZv2F,EAAKu2F,EAAS,KAAOx1G,KAAKwnJ,UAAU5oI,WAAa,KACjD5e,KAAKo1J,UAAUlG,GAA6B,GAE9ChQ,GAG0C,CAE9C,MAAO18I,GACPxC,KAAKs/I,KAAK,wBAA0B98I,GAC/BwyJ,IACCh1J,KAAKwnJ,UAAUlM,WAIjBr8H,EAAKzc,GAEP0yJ,IAAS,GAMjBE,SAAAA,CAAU5/C,GACRo/B,EAAI,uCAAyCp/B,GAC7Cx1G,KAAK4vJ,kBAAkBp6C,IAAU,EAC7Bx1G,KAAK0wJ,UACP1wJ,KAAK0wJ,UAAUtoJ,SAEXpI,KAAKuwJ,4BACP7xE,aAAa1+E,KAAKuwJ,2BAClBvwJ,KAAKuwJ,0BAA4B,MAE/BvwJ,KAAKmwJ,YACPnwJ,KAAKu0J,wBAAuB,CAKlC1lI,MAAAA,CAAO2mF,GACLo/B,EAAI,mCAAqCp/B,UAClCx1G,KAAK4vJ,kBAAkBp6C,IAC1BjrG,EAAAA,EAAAA,IAAQvK,KAAK4vJ,qBACf5vJ,KAAKowJ,gBAAkBvB,GAClB7uJ,KAAK0wJ,WACR1wJ,KAAKo0J,iBAAiB,GAAE,CAKtBH,gBAAAA,CAAiB9kD,GACvB,MAAM6lB,EAAQ7lB,GAAY,IAAInsG,MAAOE,UACrClD,KAAKuvJ,oBAAoB,CAAE8F,iBAAkBrgC,GAAS,CAGhDw/B,uBAAAA,GACN,IAAK,IAAI91J,EAAI,EAAGA,EAAIsB,KAAK8vJ,iBAAiBnxJ,OAAQD,IAAK,CACrD,MAAMkwI,EAAM5uI,KAAK8vJ,iBAAiBpxJ,GAC9BkwI,GAAgB,MAAOA,EAAI5mI,SAAW4mI,EAAI+kB,SACxC/kB,EAAIsc,YACNtc,EAAIsc,WAAW,qBAGVlrJ,KAAK8vJ,iBAAiBpxJ,GAC7BsB,KAAKgwJ,uBAAsB,CAKG,IAA9BhwJ,KAAKgwJ,uBACPhwJ,KAAK8vJ,iBAAmB,GAAE,CAItBiE,gBAAAA,CAAiB9I,EAAoBv4B,GAE3C,IAAIm/B,EAIFA,EAHGn/B,EAGOA,EAAMloH,KAAIgnJ,GAAK/Z,EAAkB+Z,KAAIhyJ,KAAK,KAF1C,UAIZ,MAAM62H,EAASr2H,KAAKwyJ,cAAcvH,EAAY4G,GAC1Cx7B,GAAUA,EAAO60B,YACnB70B,EAAO60B,WAAW,oBAAoB,CAIlCsH,aAAAA,CAAcvH,EAAoB4G,GACxC,MAAMyD,EAAuB,IAAI/I,GAAKtB,GAAYrsI,WAClD,IAAIy3G,EACJ,GAAIr2H,KAAK6vJ,QAAQl6I,IAAI2/I,GAAuB,CAC1C,MAAM9qJ,EAAMxK,KAAK6vJ,QAAQ3+I,IAAIokJ,GAC7Bj/B,EAAS7rH,EAAI0G,IAAI2gJ,GACjBrnJ,EAAI2G,OAAO0gJ,GACM,IAAbrnJ,EAAI4G,MACNpR,KAAK6vJ,QAAQ1+I,OAAOmkJ,EAAqB,MAI3Cj/B,OAASzzH,EAEX,OAAOyzH,CAAO,CAGR+8B,cAAAA,CAAemC,EAAoBC,GACzC5gB,EAAI,uBAAyB2gB,EAAa,IAAMC,GAChDx1J,KAAK2nJ,WAAa,KAClB3nJ,KAAK2wJ,oBAAqB,EAC1B3wJ,KAAK0wJ,UAAUtoJ,QACI,kBAAfmtJ,GAAiD,sBAAfA,IAIpCv1J,KAAK4wJ,yBACD5wJ,KAAK4wJ,wBAA0BzB,KAEjCnvJ,KAAKowJ,gBAAkBrB,GAIvB/uJ,KAAKwvJ,mBAAmB3V,yBAAuB,CAK7CwZ,kBAAAA,CAAmBkC,EAAoBC,GAC7C5gB,EAAI,4BAA8B2gB,EAAa,IAAMC,GACrDx1J,KAAK0nJ,eAAiB,KACtB1nJ,KAAK2wJ,oBAAqB,EAGP,kBAAf4E,GAAiD,sBAAfA,IAIpCv1J,KAAK6wJ,6BACD7wJ,KAAK6wJ,4BAA8B1B,IACrCnvJ,KAAKyvJ,uBAAuB5V,wBAAuB,CAKjDma,sBAAAA,CAAuBhuG,GACzBhmD,KAAKswJ,uBACPtwJ,KAAKswJ,uBAAuBtqG,GAExB,QAASA,GACXzjD,QAAQqyI,IACN,aAAgB5uF,EAAK,OAAkB5jD,QAAQ,KAAM,gBACtD,CAKC+xJ,aAAAA,GAENn0J,KAAK6yJ,UACL7yJ,KAAKizJ,cAIL,IAAK,MAAMwC,KAAWz1J,KAAK6vJ,QAAQt8I,SACjC,IAAK,MAAM2+I,KAAcuD,EAAQliJ,SAC/BvT,KAAKoyJ,YAAYF,GAIrB,IAAK,IAAIxzJ,EAAI,EAAGA,EAAIsB,KAAK8vJ,iBAAiBnxJ,OAAQD,IAC5CsB,KAAK8vJ,iBAAiBpxJ,IACxBsB,KAAK0zJ,SAASh1J,GAIlB,MAAOsB,KAAKkwJ,0BAA0BvxJ,OAAQ,CAC5C,MAAMqJ,EAAUhI,KAAKkwJ,0BAA0Bh+I,QAC/ClS,KAAKwzJ,kBACHxrJ,EAAQmpJ,OACRnpJ,EAAQijJ,WACRjjJ,EAAQqB,KACRrB,EAAQkjJ,WACR,CAGJ,IAAK,IAAIxsJ,EAAI,EAAGA,EAAIsB,KAAK+vJ,iBAAiBpxJ,OAAQD,IAC5CsB,KAAK+vJ,iBAAiBrxJ,IACxBsB,KAAK2xJ,SAASjzJ,EAAE,CAQdw1J,iBAAAA,GACN,MAAMzI,EAAiC,CAAC,EAExC,IAAIiK,EAAa,MACbhuJ,EAAAA,EAAAA,QAEAguJ,EADE11J,KAAKwnJ,UAAUlM,UACJ,aAEA,QAIjBmQ,EAAM,OAASiK,EAAa,IAAM13J,EAAYoE,QAAQ,MAAO,MAAQ,GAEjEmF,EAAAA,EAAAA,MACFkkJ,EAAM,qBAAuB,GACpBhkJ,EAAAA,EAAAA,QACTgkJ,EAAM,yBAA2B,GAEnCzrJ,KAAKwrJ,YAAYC,EAAO,CAGlBgJ,gBAAAA,GACN,MAAMH,EAASpI,GAAcn2E,cAAcq2E,kBAC3C,OAAO7hJ,EAAAA,EAAAA,IAAQvK,KAAK4vJ,oBAAsB0E,CAAO,EAn8BpClF,GAA2BO,4BAAG,EAK9BP,GAAiB2F,kBAAG;;;;;;;;;;;;;;;;;AC1HlC,MAkIUY,GACX5zJ,WAAAA,CAAmBC,EAAqBquB,GAArB,KAAIruB,KAAJA,EAAqB,KAAIquB,KAAJA,CAAI,CAE5C,WAAOulI,CAAK5zJ,EAAcquB,GACxB,OAAO,IAAIslI,GAAU3zJ,EAAMquB,EAAM;;;;;;;;;;;;;;;;GCtIlC,MAMmBwlI,GASpBC,UAAAA,GACE,OAAO91J,KAAK+1J,QAAQnkJ,KAAK5R,KAAM,CAUjCg2J,mBAAAA,CAAoBxmH,EAAeD,GACjC,MAAM0mH,EAAa,IAAIN,GAAU1e,EAAUznG,GACrC0mH,EAAa,IAAIP,GAAU1e,EAAU1nG,GAC3C,OAAgD,IAAzCvvC,KAAK+1J,QAAQE,EAAYC,EAAkB,CAOpDC,OAAAA,GAEE,OAAQR,GAAkBS,GAAI;;;;;;;;;;;;;;;;GC5BlC,IAAIC,GAEE,MAAOC,WAAiBT,GAC5B,uBAAWQ,GACT,OAAOA,EAAa,CAGtB,uBAAWA,CAAa74I,GACtB64I,GAAe74I,CAAI,CAErBu4I,OAAAA,CAAQlrJ,EAAcC,GACpB,OAAOqsI,EAAYtsI,EAAE7I,KAAM8I,EAAE9I,KAAM,CAErCu0J,WAAAA,CAAYlmI,GAGV,MAAMjyB,EAAAA,EAAAA,IAAe,kDAAmD,CAE1E43J,mBAAAA,CAAoBxmH,EAAeD,GACjC,OAAO,C,CAET4mH,OAAAA,GAEE,OAAQR,GAAkBS,GAAI,CAEhCI,OAAAA,GAGE,OAAO,IAAIb,GAAUze,EAAUmf,GAAc,CAG/CI,QAAAA,CAASC,EAAoB10J,GAM3B,OALA/D,EAAAA,EAAAA,IACwB,kBAAfy4J,EACP,gDAGK,IAAIf,GAAUe,EAAYL,GAAc,CAMjDz3I,QAAAA,GACE,MAAO,MAAO,EAIX,MAAM+3I,GAAY,IAAIL;;;;;;;;;;;;;;;;GChC1B,MACUM,GAOX70J,WAAAA,CACEsuB,EACAwmI,EACAzzI,EACQ0zI,EACAC,EAA+C,MAD/C,KAAUD,WAAVA,EACA,KAAgBC,iBAAhBA,EAXF,KAAUC,WAAgD,GAahE,IAAIC,EAAM,EACV,OAAQ5mI,EAAK9lB,UAQX,GANA0sJ,EAAMJ,EAAWzzI,EAAWiN,EAAK/sB,IAAKuzJ,GAAY,EAE9CC,IACFG,IAAQ,GAGNA,EAAM,EAGN5mI,EADErwB,KAAK82J,WACAzmI,EAAKm+B,KAELn+B,EAAK8hC,UAET,IAAY,IAAR8kG,EAAW,CAEpBj3J,KAAKg3J,WAAW31J,KAAKgvB,GACrB,KAAM,CAGNrwB,KAAKg3J,WAAW31J,KAAKgvB,GAEnBA,EADErwB,KAAK82J,WACAzmI,EAAK8hC,MAEL9hC,EAAKm+B,IAAI,EAMxB0oG,OAAAA,GACE,GAA+B,IAA3Bl3J,KAAKg3J,WAAWr4J,OAClB,OAAO,KAGT,IACIwJ,EADAkoB,EAAOrwB,KAAKg3J,WAAW9nJ,MAQ3B,GALE/G,EADEnI,KAAK+2J,iBACE/2J,KAAK+2J,iBAAiB1mI,EAAK/sB,IAAK+sB,EAAK3tB,OAErC,CAAEY,IAAK+sB,EAAK/sB,IAAKZ,MAAO2tB,EAAK3tB,OAGpC1C,KAAK82J,WAAY,CACnBzmI,EAAOA,EAAKm+B,KACZ,OAAQn+B,EAAK9lB,UACXvK,KAAKg3J,WAAW31J,KAAKgvB,GACrBA,EAAOA,EAAK8hC,KAAK,KAEd,CACL9hC,EAAOA,EAAK8hC,MACZ,OAAQ9hC,EAAK9lB,UACXvK,KAAKg3J,WAAW31J,KAAKgvB,GACrBA,EAAOA,EAAKm+B,IAAI,CAIpB,OAAOrmD,CAAO,CAGhBgvJ,OAAAA,GACE,OAAOn3J,KAAKg3J,WAAWr4J,OAAS,CAAE,CAGpCy4J,IAAAA,GACE,GAA+B,IAA3Bp3J,KAAKg3J,WAAWr4J,OAClB,OAAO,KAGT,MAAM0xB,EAAOrwB,KAAKg3J,WAAWh3J,KAAKg3J,WAAWr4J,OAAS,GACtD,OAAIqB,KAAK+2J,iBACA/2J,KAAK+2J,iBAAiB1mI,EAAK/sB,IAAK+sB,EAAK3tB,OAErC,CAAEY,IAAK+sB,EAAK/sB,IAAKZ,MAAO2tB,EAAK3tB,MAAuB,EAO9D,MACU20J,GAYXt1J,WAAAA,CACSuB,EACAZ,EACP40J,EACA9oG,EACA2D,GAJO,KAAG7uD,IAAHA,EACA,KAAKZ,MAALA,EAKP1C,KAAKs3J,MAAiB,MAATA,EAAgBA,EAAQD,GAASE,IAC9Cv3J,KAAKwuD,KACK,MAARA,EAAeA,EAAQgpG,GAAUC,WACnCz3J,KAAKmyD,MACM,MAATA,EAAgBA,EAASqlG,GAAUC,UAAmC,CAgB1EC,IAAAA,CACEp0J,EACAZ,EACA40J,EACA9oG,EACA2D,GAEA,OAAO,IAAIklG,GACF,MAAP/zJ,EAAcA,EAAMtD,KAAKsD,IAChB,MAATZ,EAAgBA,EAAQ1C,KAAK0C,MACpB,MAAT40J,EAAgBA,EAAQt3J,KAAKs3J,MACrB,MAAR9oG,EAAeA,EAAOxuD,KAAKwuD,KAClB,MAAT2D,EAAgBA,EAAQnyD,KAAKmyD,MAC7B,CAMJw+D,KAAAA,GACE,OAAO3wH,KAAKwuD,KAAKmiE,QAAU,EAAI3wH,KAAKmyD,MAAMw+D,OAAQ,CAMpDpmH,OAAAA,GACE,OAAO,CAAM,CAYfotJ,gBAAAA,CAAiBxG,GACf,OACEnxJ,KAAKwuD,KAAKmpG,iBAAiBxG,MACzBA,EAAOnxJ,KAAKsD,IAAKtD,KAAK0C,QACxB1C,KAAKmyD,MAAMwlG,iBAAiBxG,EAAO,CAYvCyG,gBAAAA,CAAiBzG,GACf,OACEnxJ,KAAKmyD,MAAMylG,iBAAiBzG,IAC5BA,EAAOnxJ,KAAKsD,IAAKtD,KAAK0C,QACtB1C,KAAKwuD,KAAKopG,iBAAiBzG,EAAO,CAO9B0G,IAAAA,GACN,OAAI73J,KAAKwuD,KAAKjkD,UACLvK,KAECA,KAAKwuD,KAAwBqpG,MAAM,CAO/CC,MAAAA,GACE,OAAO93J,KAAK63J,OAAOv0J,GAAI,CAMzBy0J,MAAAA,GACE,OAAI/3J,KAAKmyD,MAAM5nD,UACNvK,KAAKsD,IAELtD,KAAKmyD,MAAM4lG,QAAQ,CAU9BjrH,MAAAA,CAAOxpC,EAAQZ,EAAU0gB,GACvB,IAAInW,EAAoBjN,KACxB,MAAMi3J,EAAM7zI,EAAW9f,EAAK2J,EAAE3J,KAc9B,OAZE2J,EADEgqJ,EAAM,EACJhqJ,EAAEyqJ,KAAK,KAAM,KAAM,KAAMzqJ,EAAEuhD,KAAK1hB,OAAOxpC,EAAKZ,EAAO0gB,GAAa,MACnD,IAAR6zI,EACLhqJ,EAAEyqJ,KAAK,KAAMh1J,EAAO,KAAM,KAAM,MAEhCuK,EAAEyqJ,KACJ,KACA,KACA,KACA,KACAzqJ,EAAEklD,MAAMrlB,OAAOxpC,EAAKZ,EAAO0gB,IAGxBnW,EAAE+qJ,QAAS,CAMZC,UAAAA,GACN,GAAIj4J,KAAKwuD,KAAKjkD,UACZ,OAAOitJ,GAAUC,WAEnB,IAAIxqJ,EAAoBjN,KAKxB,OAJKiN,EAAEuhD,KAAK0pG,UAAajrJ,EAAEuhD,KAAKA,KAAK0pG,WACnCjrJ,EAAIA,EAAEkrJ,gBAERlrJ,EAAIA,EAAEyqJ,KAAK,KAAM,KAAM,KAAOzqJ,EAAEuhD,KAAwBypG,aAAc,MAC/DhrJ,EAAE+qJ,QAAS,CAQpBzpI,MAAAA,CACEjrB,EACA8f,GAEA,IAAInW,EAAGmrJ,EAEP,GADAnrJ,EAAIjN,KACAojB,EAAW9f,EAAK2J,EAAE3J,KAAO,EACtB2J,EAAEuhD,KAAKjkD,WAAc0C,EAAEuhD,KAAK0pG,UAAajrJ,EAAEuhD,KAAKA,KAAK0pG,WACxDjrJ,EAAIA,EAAEkrJ,gBAERlrJ,EAAIA,EAAEyqJ,KAAK,KAAM,KAAM,KAAMzqJ,EAAEuhD,KAAKjgC,OAAOjrB,EAAK8f,GAAa,UACxD,CAOL,GANInW,EAAEuhD,KAAK0pG,WACTjrJ,EAAIA,EAAEorJ,gBAEHprJ,EAAEklD,MAAM5nD,WAAc0C,EAAEklD,MAAM+lG,UAAajrJ,EAAEklD,MAAM3D,KAAK0pG,WAC3DjrJ,EAAIA,EAAEqrJ,iBAEuB,IAA3Bl1I,EAAW9f,EAAK2J,EAAE3J,KAAY,CAChC,GAAI2J,EAAEklD,MAAM5nD,UACV,OAAOitJ,GAAUC,WAEjBW,EAAYnrJ,EAAEklD,MAAyB0lG,OACvC5qJ,EAAIA,EAAEyqJ,KACJU,EAAS90J,IACT80J,EAAS11J,MACT,KACA,KACCuK,EAAEklD,MAAyB8lG,aAC7B,CAGLhrJ,EAAIA,EAAEyqJ,KAAK,KAAM,KAAM,KAAM,KAAMzqJ,EAAEklD,MAAM5jC,OAAOjrB,EAAK8f,GAAa,CAEtE,OAAOnW,EAAE+qJ,QAAS,CAMpBE,MAAAA,GACE,OAAOl4J,KAAKs3J,KAAM,CAMZU,MAAAA,GACN,IAAI/qJ,EAAoBjN,KAUxB,OATIiN,EAAEklD,MAAM+lG,WAAajrJ,EAAEuhD,KAAK0pG,WAC9BjrJ,EAAIA,EAAEsrJ,eAEJtrJ,EAAEuhD,KAAK0pG,UAAYjrJ,EAAEuhD,KAAKA,KAAK0pG,WACjCjrJ,EAAIA,EAAEorJ,gBAEJprJ,EAAEuhD,KAAK0pG,UAAYjrJ,EAAEklD,MAAM+lG,WAC7BjrJ,EAAIA,EAAEurJ,cAEDvrJ,CAAE,CAMHkrJ,YAAAA,GACN,IAAIlrJ,EAAIjN,KAAKw4J,aAYb,OAXIvrJ,EAAEklD,MAAM3D,KAAK0pG,WACfjrJ,EAAIA,EAAEyqJ,KACJ,KACA,KACA,KACA,KACCzqJ,EAAEklD,MAAyBkmG,gBAE9BprJ,EAAIA,EAAEsrJ,cACNtrJ,EAAIA,EAAEurJ,cAEDvrJ,CAAE,CAMHqrJ,aAAAA,GACN,IAAIrrJ,EAAIjN,KAAKw4J,aAKb,OAJIvrJ,EAAEuhD,KAAKA,KAAK0pG,WACdjrJ,EAAIA,EAAEorJ,eACNprJ,EAAIA,EAAEurJ,cAEDvrJ,CAAE,CAMHsrJ,WAAAA,GACN,MAAME,EAAKz4J,KAAK03J,KAAK,KAAM,KAAML,GAASE,IAAK,KAAMv3J,KAAKmyD,MAAM3D,MAChE,OAAOxuD,KAAKmyD,MAAMulG,KAAK,KAAM,KAAM13J,KAAKs3J,MAAOmB,EAAI,KAAwB,CAMrEJ,YAAAA,GACN,MAAMK,EAAK14J,KAAK03J,KAAK,KAAM,KAAML,GAASE,IAAKv3J,KAAKwuD,KAAK2D,MAAO,MAChE,OAAOnyD,KAAKwuD,KAAKkpG,KAAK,KAAM,KAAM13J,KAAKs3J,MAAO,KAAMoB,EAAsB,CAMpEF,UAAAA,GACN,MAAMhqG,EAAOxuD,KAAKwuD,KAAKkpG,KAAK,KAAM,MAAO13J,KAAKwuD,KAAK8oG,MAAO,KAAM,MAC1DnlG,EAAQnyD,KAAKmyD,MAAMulG,KAAK,KAAM,MAAO13J,KAAKmyD,MAAMmlG,MAAO,KAAM,MACnE,OAAOt3J,KAAK03J,KAAK,KAAM,MAAO13J,KAAKs3J,MAAO9oG,EAAM2D,EAAO,CAQjDwmG,cAAAA,GACN,MAAMC,EAAa54J,KAAK64J,SACxB,OAAOviH,KAAK4hG,IAAI,EAAK0gB,IAAe54J,KAAK2wH,QAAU,CAAE,CAGvDkoC,MAAAA,GACE,GAAI74J,KAAKk4J,UAAYl4J,KAAKwuD,KAAK0pG,SAC7B,MAAM,IAAI75J,MACR,0BAA4B2B,KAAKsD,IAAM,IAAMtD,KAAK0C,MAAQ,KAG9D,GAAI1C,KAAKmyD,MAAM+lG,SACb,MAAM,IAAI75J,MACR,mBAAqB2B,KAAKsD,IAAM,IAAMtD,KAAK0C,MAAQ,YAGvD,MAAMk2J,EAAa54J,KAAKwuD,KAAKqqG,SAC7B,GAAID,IAAe54J,KAAKmyD,MAAM0mG,SAC5B,MAAM,IAAIx6J,MAAM,uBAEhB,OAAOu6J,GAAc54J,KAAKk4J,SAAW,EAAI,EAAE,EApSxCb,GAAGE,KAAG,EACNF,GAAKyB,OAAG,EA0Sd,MACUC,GAYXrB,IAAAA,CACEp0J,EACAZ,EACA40J,EACA9oG,EACA2D,GAEA,OAAOnyD,IAAK,CAWd8sC,MAAAA,CAAOxpC,EAAQZ,EAAU0gB,GACvB,OAAO,IAAIi0I,GAAS/zJ,EAAKZ,EAAO,KAAM,CAUxC6rB,MAAAA,CAAOjrB,EAAQ8f,GACb,OAAOpjB,IAAK,CAMd2wH,KAAAA,GACE,OAAO,CAAE,CAMXpmH,OAAAA,GACE,OAAO,CAAK,CAWdotJ,gBAAAA,CAAiBxG,GACf,OAAO,CAAM,CAWfyG,gBAAAA,CAAiBzG,GACf,OAAO,CAAM,CAGf2G,MAAAA,GACE,OAAO,IAAK,CAGdC,MAAAA,GACE,OAAO,IAAK,CAGdc,MAAAA,GACE,OAAO,CAAE,CAMXX,MAAAA,GACE,OAAO,CAAM,EAOd,MACUV,GAUXz1J,WAAAA,CACUi3J,EACAC,EAEkBzB,GAAUC,YAH5B,KAAWuB,YAAXA,EACA,KAAKC,MAALA,CAAK,CAafnsH,MAAAA,CAAOxpC,EAAQZ,GACb,OAAO,IAAI80J,GACTx3J,KAAKg5J,YACLh5J,KAAKi5J,MACFnsH,OAAOxpC,EAAKZ,EAAO1C,KAAKg5J,aACxBtB,KAAK,KAAM,KAAML,GAASyB,MAAO,KAAM,MAC1C,CASJvqI,MAAAA,CAAOjrB,GACL,OAAO,IAAIk0J,GACTx3J,KAAKg5J,YACLh5J,KAAKi5J,MACF1qI,OAAOjrB,EAAKtD,KAAKg5J,aACjBtB,KAAK,KAAM,KAAML,GAASyB,MAAO,KAAM,MAC1C,CAUJ5nJ,GAAAA,CAAI5N,GACF,IAAI2zJ,EACA5mI,EAAOrwB,KAAKi5J,MAChB,OAAQ5oI,EAAK9lB,UAAW,CAEtB,GADA0sJ,EAAMj3J,KAAKg5J,YAAY11J,EAAK+sB,EAAK/sB,KACrB,IAAR2zJ,EACF,OAAO5mI,EAAK3tB,MACHu0J,EAAM,EACf5mI,EAAOA,EAAKm+B,KACHyoG,EAAM,IACf5mI,EAAOA,EAAK8hC,MAAK,CAGrB,OAAO,IAAK,CAQd+mG,iBAAAA,CAAkB51J,GAChB,IAAI2zJ,EACF5mI,EAAOrwB,KAAKi5J,MACZE,EAAc,KAChB,OAAQ9oI,EAAK9lB,UAAW,CAEtB,GADA0sJ,EAAMj3J,KAAKg5J,YAAY11J,EAAK+sB,EAAK/sB,KACrB,IAAR2zJ,EAAW,CACb,GAAK5mI,EAAKm+B,KAAKjkD,UAMR,OAAI4uJ,EACFA,EAAY71J,IAEZ,KARP+sB,EAAOA,EAAKm+B,KACZ,OAAQn+B,EAAK8hC,MAAM5nD,UACjB8lB,EAAOA,EAAK8hC,MAEd,OAAO9hC,EAAK/sB,G,CAML2zJ,EAAM,EACf5mI,EAAOA,EAAKm+B,KACHyoG,EAAM,IACfkC,EAAc9oI,EACdA,EAAOA,EAAK8hC,MAAK,CAIrB,MAAM,IAAI9zD,MACR,wEACA,CAMJkM,OAAAA,GACE,OAAOvK,KAAKi5J,MAAM1uJ,SAAU,CAM9BomH,KAAAA,GACE,OAAO3wH,KAAKi5J,MAAMtoC,OAAQ,CAM5BmnC,MAAAA,GACE,OAAO93J,KAAKi5J,MAAMnB,QAAS,CAM7BC,MAAAA,GACE,OAAO/3J,KAAKi5J,MAAMlB,QAAS,CAY7BJ,gBAAAA,CAAiBxG,GACf,OAAOnxJ,KAAKi5J,MAAMtB,iBAAiBxG,EAAQ,CAW7CyG,gBAAAA,CAAiBzG,GACf,OAAOnxJ,KAAKi5J,MAAMrB,iBAAiBzG,EAAQ,CAO7C5pC,WAAAA,CACE6xC,GAEA,OAAO,IAAIxC,GACT52J,KAAKi5J,MACL,KACAj5J,KAAKg5J,aACL,EACAI,EACA,CAGJC,eAAAA,CACE/1J,EACA81J,GAEA,OAAO,IAAIxC,GACT52J,KAAKi5J,MACL31J,EACAtD,KAAKg5J,aACL,EACAI,EACA,CAGJE,sBAAAA,CACEh2J,EACA81J,GAEA,OAAO,IAAIxC,GACT52J,KAAKi5J,MACL31J,EACAtD,KAAKg5J,aACL,EACAI,EACA,CAGJG,kBAAAA,CACEH,GAEA,OAAO,IAAIxC,GACT52J,KAAKi5J,MACL,KACAj5J,KAAKg5J,aACL,EACAI,EACA;;;;;;;;;;;;;;;;;AC3vBU,SAAAI,GAAqBhrG,EAAiB2D,GACpD,OAAOglF,EAAY3oF,EAAKxsD,KAAMmwD,EAAMnwD,KACtC,CAEgB,SAAAy3J,GAAgBjrG,EAAc2D,GAC5C,OAAOglF,EAAY3oF,EAAM2D,EAC3B;;;;;;;;;;;;;;;;GCHA,IAAIunG,GAEE,SAAUC,GAAWn8I,GACzBk8I,GAAWl8I,CACb,CFoiBSg6I,GAAAC,WAAa,IAAIsB,GEliBnB,MAAMa,GAAmB,SAAUC,GACxC,MAAwB,kBAAbA,EACF,UAAYhiB,EAAsBgiB,GAElC,UAAYA,CAEvB,EAKaC,GAAuB,SAAUC,GAC5C,GAAIA,EAAaC,aAAc,CAC7B,MAAMx8I,EAAMu8I,EAAav8I,OACzBvf,EAAAA,EAAAA,IACiB,kBAARuf,GACU,kBAARA,GACS,kBAARA,IAAoBrT,EAAAA,EAAAA,IAASqT,EAAkB,OACzD,uCACA,MAEFvf,EAAAA,EAAAA,IACE87J,IAAiBL,IAAYK,EAAaxvJ,UAC1C,iCAIJtM,EAAAA,EAAAA,IACE87J,IAAiBL,IAAYK,EAAaE,cAAc1vJ,UACxD,qDAEJ;;;;;;;;;;;;;;;;;AC3BA,IAAI2vJ,GCXAC,GACAC,GDgBD,MACUC,GACX,oCAAWH,CAA0B18I,GACnC08I,GAA4B18I,CAAI,CAGlC,oCAAW08I,GACT,OAAOA,EAA0B,CAgBnCn4J,WAAAA,CACmBu4J,EACTC,EAAsBF,GAASH,0BAA0BzC,YADhD,KAAM6C,OAANA,EACT,KAAaC,cAAbA,EATF,KAASC,UAAkB,MAWjCv8J,EAAAA,EAAAA,SACkB2E,IAAhB5C,KAAKs6J,QAAwC,OAAhBt6J,KAAKs6J,OAClC,4DAGFR,GAAqB95J,KAAKu6J,cAAe,CAI3CP,UAAAA,GACE,OAAO,CAAK,CAIdC,WAAAA,GACE,OAAOj6J,KAAKu6J,aAAc,CAI5BE,cAAAA,CAAeC,GACb,OAAO,IAAIL,GAASr6J,KAAKs6J,OAAQI,EAAiB,CAIpDC,iBAAAA,CAAkBC,GAEhB,MAAkB,cAAdA,EACK56J,KAAKu6J,cAELF,GAASH,0BAA0BzC,UAAU,CAKxDoD,QAAAA,CAAStnI,GACP,OAAIm6H,GAAYn6H,GACPvzB,KACyB,cAAvB8sJ,GAAav5H,GACfvzB,KAAKu6J,cAELF,GAASH,0BAA0BzC,UAAU,CAGxDqD,QAAAA,GACE,OAAO,CAAM,CAIfC,uBAAAA,CAAwBH,EAAmBI,GACzC,OAAO,IAAK,CAIdC,oBAAAA,CAAqBL,EAAmBM,GACtC,MAAkB,cAAdN,EACK56J,KAAKy6J,eAAeS,GAClBA,EAAa3wJ,WAA2B,cAAdqwJ,EAC5B56J,KAEAq6J,GAASH,0BAA0BzC,WAAWwD,qBACnDL,EACAM,GACAT,eAAez6J,KAAKu6J,cAAc,CAKxCY,WAAAA,CAAY5nI,EAAY2nI,GACtB,MAAME,EAAQtO,GAAav5H,GAC3B,OAAc,OAAV6nI,EACKF,EACEA,EAAa3wJ,WAAuB,cAAV6wJ,EAC5Bp7J,OAEP/B,EAAAA,EAAAA,IACY,cAAVm9J,GAAiD,IAAxBrO,GAAcx5H,GACvC,8CAGKvzB,KAAKi7J,qBACVG,EACAf,GAASH,0BAA0BzC,WAAW0D,YAC5CnO,GAAaz5H,GACb2nI,IAEH,CAKL3wJ,OAAAA,GACE,OAAO,CAAM,CAIf8wJ,WAAAA,GACE,OAAO,CAAE,CAIXC,YAAAA,CAAa/sJ,EAAc4iJ,GACzB,OAAO,CAAM,CAEf3zI,GAAAA,CAAI+9I,GACF,OAAIA,IAAiBv7J,KAAKi6J,cAAc1vJ,UAC/B,CACL,SAAUvK,KAAK0vD,WACf,YAAa1vD,KAAKi6J,cAAcz8I,OAG3Bxd,KAAK0vD,UAAU,CAK1B0Q,IAAAA,GACE,GAAuB,OAAnBpgE,KAAKw6J,UAAoB,CAC3B,IAAIgB,EAAS,GACRx7J,KAAKu6J,cAAchwJ,YACtBixJ,GACE,YACA5B,GAAiB55J,KAAKu6J,cAAc/8I,OACpC,KAGJ,MAAMnX,SAAcrG,KAAKs6J,OACzBkB,GAAUn1J,EAAO,IAEfm1J,GADW,WAATn1J,EACQwxI,EAAsB73I,KAAKs6J,QAE3Bt6J,KAAKs6J,OAEjBt6J,KAAKw6J,UAAYxkB,EAAKwlB,EAAQ,CAEhC,OAAOx7J,KAAKw6J,SAAU,CAOxB9qG,QAAAA,GACE,OAAO1vD,KAAKs6J,MAAO,CAErBmB,SAAAA,CAAUpvC,GACR,OAAIA,IAAUguC,GAASH,0BAA0BzC,WACxC,EACEprC,aAAiBguC,GAASH,2BAC3B,IAERj8J,EAAAA,EAAAA,IAAOouH,EAAM2tC,aAAc,qBACpBh6J,KAAK07J,mBAAmBrvC,GAAkB,CAO7CqvC,kBAAAA,CAAmBC,GACzB,MAAMC,SAAuBD,EAAUrB,OACjCuB,SAAsB77J,KAAKs6J,OAC3BwB,EAAazB,GAAS0B,iBAAiBp5I,QAAQi5I,GAC/CI,EAAY3B,GAAS0B,iBAAiBp5I,QAAQk5I,GAGpD,OAFA59J,EAAAA,EAAAA,IAAO69J,GAAc,EAAG,sBAAwBF,IAChD39J,EAAAA,EAAAA,IAAO+9J,GAAa,EAAG,sBAAwBH,GAC3CC,IAAeE,EAEI,WAAjBH,EAEK,EAGH77J,KAAKs6J,OAASqB,EAAUrB,QAClB,EACCt6J,KAAKs6J,SAAWqB,EAAUrB,OAC5B,EAEA,EAIJ0B,EAAYF,CAAU,CAGjCG,SAAAA,GACE,OAAOj8J,IAAK,CAEdk8J,SAAAA,GACE,OAAO,CAAK,CAEdC,MAAAA,CAAO9vC,GACL,GAAIA,IAAUrsH,KACZ,OAAO,EACF,GAAIqsH,EAAM2tC,aAAc,CAC7B,MAAM2B,EAAYtvC,EAClB,OACErsH,KAAKs6J,SAAWqB,EAAUrB,QAC1Bt6J,KAAKu6J,cAAc4B,OAAOR,EAAUpB,cAAc,CAGpD,OAAO,CAAK,ECjPZ,SAAU6B,GAAgB5+I,GAC9B28I,GAAe38I,CACjB,CAEM,SAAU6+I,GAAW7+I,GACzB48I,GAAW58I,CACb,CDsBS68I,GAAgB0B,iBAAG,CAAC,SAAU,UAAW,SAAU,UCpBtD,MAAOO,WAAsBzG,GACjCE,OAAAA,CAAQlrJ,EAAcC,GACpB,MAAMyxJ,EAAY1xJ,EAAEwlB,KAAK4pI,cACnBuC,EAAY1xJ,EAAEulB,KAAK4pI,cACnBwC,EAAWF,EAAUd,UAAUe,GACrC,OAAiB,IAAbC,EACKtlB,EAAYtsI,EAAE7I,KAAM8I,EAAE9I,MAEtBy6J,CAAQ,CAGnBlG,WAAAA,CAAYlmI,GACV,OAAQA,EAAK4pI,cAAc1vJ,SAAU,CAEvCyrJ,mBAAAA,CAAoBxmH,EAAeD,GACjC,OAAQC,EAAQyqH,cAAckC,OAAO5sH,EAAQ0qH,cAAe,CAE9D9D,OAAAA,GAEE,OAAQR,GAAkBS,GAAI,CAEhCI,OAAAA,GACE,OAAO,IAAIb,GAAUze,EAAU,IAAImjB,GAAS,kBAAmBD,IAAW,CAG5E3D,QAAAA,CAASC,EAAqB10J,GAC5B,MAAM+3J,EAAeI,GAAazD,GAClC,OAAO,IAAIf,GAAU3zJ,EAAM,IAAIq4J,GAAS,kBAAmBN,GAAe,CAM5En7I,QAAAA,GACE,MAAO,WAAY,EAIhB,MAAM89I,GAAiB,IAAIJ,GCnD5BK,GAAQrmH,KAAKs+F,IAAI;;;;;;;;;;;;;;;;GAEvB,MAAMgoB,GAKJ76J,WAAAA,CAAYpD,GACV,MAAMk+J,EAAYC,GAEhB33J,SAAUmxC,KAAKs+F,IAAIkoB,GAAOH,GAAe,IACrCI,EAAW3kB,GAAiBjzI,SAAS5E,MAAM63I,EAAO,GAAG54I,KAAK,KAAM,GACtEQ,KAAK2wH,MAAQksC,EAASl+J,EAAS,GAC/BqB,KAAKg9J,SAAWh9J,KAAK2wH,MAAQ,EAC7B,MAAMssC,EAAOF,EAAQ/8J,KAAK2wH,OAC1B3wH,KAAKk9J,MAASv+J,EAAS,EAAKs+J,CAAK,CAGnCE,YAAAA,GAEE,MAAMh1J,IAAWnI,KAAKk9J,MAAS,GAAOl9J,KAAKg9J,UAE3C,OADAh9J,KAAKg9J,WACE70J,CAAO,EAiBX,MAAMi1J,GAAgB,SAC3B31G,EACAwvG,EACAoG,EACAC,GAEA71G,EAAUvkC,KAAK+zI,GAEf,MAAMsG,EAAoB,SACxB5vJ,EACAD,GAEA,MAAM/O,EAAS+O,EAAOC,EACtB,IAAI6vJ,EACAl6J,EACJ,GAAe,IAAX3E,EACF,OAAO,KACF,GAAe,IAAXA,EAGT,OAFA6+J,EAAY/1G,EAAU95C,GACtBrK,EAAM+5J,EAAQA,EAAMG,GAAcA,EAC3B,IAAInG,GACT/zJ,EACAk6J,EAAUntI,KACVgnI,GAASyB,MACT,KACA,MAEG,CAEL,MAAM92I,EAAS7c,SAAUxG,EAAS,EAAW,IAAMgP,EAC7C6gD,EAAO+uG,EAAkB5vJ,EAAKqU,GAC9BmwC,EAAQorG,EAAkBv7I,EAAS,EAAGtU,GAG5C,OAFA8vJ,EAAY/1G,EAAUzlC,GACtB1e,EAAM+5J,EAAQA,EAAMG,GAAcA,EAC3B,IAAInG,GACT/zJ,EACAk6J,EAAUntI,KACVgnI,GAASyB,MACTtqG,EACA2D,EACA,CAEN,EAEMsrG,EAAmB,SAAUC,GACjC,IAAIrtI,EAAuB,KACvBzH,EAAO,KACPra,EAAQk5C,EAAU9oD,OAEtB,MAAMg/J,EAAe,SAAU/nD,EAAmB0hD,GAChD,MAAM3pJ,EAAMY,EAAQqnG,EACdloG,EAAOa,EACbA,GAASqnG,EACT,MAAMgoD,EAAYL,EAAkB5vJ,EAAM,EAAGD,GACvC8vJ,EAAY/1G,EAAU95C,GACtBrK,EAAS+5J,EAAQA,EAAMG,GAAcA,EAC3CK,EACE,IAAIxG,GACF/zJ,EACAk6J,EAAUntI,KACVinI,EACA,KACAsG,GAGN,EAEMC,EAAgB,SAAUC,GAC1BztI,GACFA,EAAKm+B,KAAOsvG,EACZztI,EAAOytI,IAEPl1I,EAAOk1I,EACPztI,EAAOytI,EAEX,EAEA,IAAK,IAAIp/J,EAAI,EAAGA,EAAIg/J,EAAO/sC,QAASjyH,EAAG,CACrC,MAAMq/J,EAAQL,EAAOP,eAEfvnD,EAAYt/D,KAAK4hG,IAAI,EAAGwlB,EAAO/sC,OAASjyH,EAAI,IAC9Cq/J,EACFJ,EAAa/nD,EAAWyhD,GAASyB,QAGjC6E,EAAa/nD,EAAWyhD,GAASyB,OACjC6E,EAAa/nD,EAAWyhD,GAASE,KAAI,CAGzC,OAAO3uI,CACT,EAEM80I,EAAS,IAAId,GAAUn1G,EAAU9oD,QACjCiqB,EAAO60I,EAAiBC,GAE9B,OAAO,IAAIlG,GAAgB8F,GAAcrG,EAAaruI,EACxD;;;;;;;;;;;;;;;;GCjIA,IAAIo1I,GAEJ,MAAMC,GAAiB,CAAC,EAAE,MAEbC,GAIX,kBAAWtpF,GAWT,OAVA32E,EAAAA,EAAAA,IACEggK,IAAkBvB,GAClB,uCAEFsB,GACEA,IACA,IAAIE,GACF,CAAE,YAAaD,IACf,CAAE,YAAavB,KAEZsB,EAAiB,CAG1Bj8J,WAAAA,CACUo8J,EAGAC,GAHA,KAAQD,SAARA,EAGA,KAASC,UAATA,CAAS,CAGnBltJ,GAAAA,CAAImtJ,GACF,MAAMC,GAAYh0J,EAAAA,EAAAA,IAAQtK,KAAKm+J,SAAUE,GACzC,IAAKC,EACH,MAAM,IAAIjgK,MAAM,wBAA0BggK,GAG5C,OAAIC,aAAqB9G,GAChB8G,EAIA,IAAI,CAIfC,QAAAA,CAASC,GACP,OAAOr0J,EAAAA,EAAAA,IAASnK,KAAKo+J,UAAWI,EAAgB5/I,WAAY,CAG9D6/I,QAAAA,CACED,EACAE,IAEAzgK,EAAAA,EAAAA,IACEugK,IAAoB7H,GACpB,uEAEF,MAAMlvG,EAAY,GAClB,IAAIk3G,GAAkB,EACtB,MAAMC,EAAOF,EAAiBn3C,YAAYouC,GAAUC,MACpD,IAOIr+G,EAPAn/B,EAAOwmJ,EAAK1H,UAChB,MAAO9+I,EACLumJ,EACEA,GAAmBH,EAAgBjI,YAAYn+I,EAAKiY,MACtDo3B,EAAUpmD,KAAK+W,GACfA,EAAOwmJ,EAAK1H,UAIZ3/G,EADEonH,EACSvB,GAAc31G,EAAW+2G,EAAgB1I,cAEzCmI,GAEb,MAAMY,EAAYL,EAAgB5/I,WAC5BkgJ,EAAmB/7J,OAAA4D,OAAA,GAAA3G,KAAKo+J,WAC9BU,EAAYD,GAAaL,EACzB,MAAMO,EAAkBh8J,OAAA4D,OAAA,GAAA3G,KAAKm+J,UAE7B,OADAY,EAAWF,GAAatnH,EACjB,IAAI2mH,GAASa,EAAYD,EAAa,CAM/CE,YAAAA,CACExB,EACAkB,GAEA,MAAMK,GAAav0J,EAAAA,EAAAA,IACjBxK,KAAKm+J,UACL,CAACc,EAA6CJ,KAC5C,MAAMtwJ,GAAQjE,EAAAA,EAAAA,IAAQtK,KAAKo+J,UAAWS,GAEtC,IADA5gK,EAAAA,EAAAA,IAAOsQ,EAAO,oCAAsCswJ,GAChDI,IAAoBhB,GAAgB,CAEtC,GAAI1vJ,EAAMgoJ,YAAYiH,EAAUntI,MAAO,CAErC,MAAMo3B,EAAY,GACZm3G,EAAOF,EAAiBn3C,YAAYouC,GAAUC,MACpD,IAAIx9I,EAAOwmJ,EAAK1H,UAChB,MAAO9+I,EACDA,EAAKpW,OAASw7J,EAAUx7J,MAC1BylD,EAAUpmD,KAAK+W,GAEjBA,EAAOwmJ,EAAK1H,UAGd,OADAzvG,EAAUpmD,KAAKm8J,GACRJ,GAAc31G,EAAWl5C,EAAMunJ,aAAc,CAGpD,OAAOmI,EAAc,CAElB,CACL,MAAMiB,EAAeR,EAAiBxtJ,IAAIssJ,EAAUx7J,MACpD,IAAI0yC,EAAcuqH,EAMlB,OALIC,IACFxqH,EAAcA,EAAYnmB,OACxB,IAAIonI,GAAU6H,EAAUx7J,KAAMk9J,KAG3BxqH,EAAY5H,OAAO0wH,EAAWA,EAAUntI,KAAM,KAI3D,OAAO,IAAI6tI,GAASa,EAAY/+J,KAAKo+J,UAAW,CAMlDe,iBAAAA,CACE3B,EACAkB,GAEA,MAAMK,GAAav0J,EAAAA,EAAAA,IACjBxK,KAAKm+J,UACJc,IACC,GAAIA,IAAoBhB,GAEtB,OAAOgB,EACF,CACL,MAAMC,EAAeR,EAAiBxtJ,IAAIssJ,EAAUx7J,MACpD,OAAIk9J,EACKD,EAAgB1wI,OACrB,IAAIonI,GAAU6H,EAAUx7J,KAAMk9J,IAIzBD,CAAe,KAK9B,OAAO,IAAIf,GAASa,EAAY/+J,KAAKo+J,UAAW;;;;;;;;;;;;;;;;GCrIpD,IAAI3G,GAMD,MACU2H,GAGX,qBAAW3H,GACT,OACEA,KACCA,GAAa,IAAI2H,GAChB,IAAI5H,GAAwBiC,IAC5B,KACAyE,GAAStpF,SACT,CAQN7yE,WAAAA,CACmBs9J,EACA9E,EACT+E,GAFS,KAASD,UAATA,EACA,KAAa9E,cAAbA,EACT,KAAS+E,UAATA,EApBF,KAAS9E,UAAkB,KA2B7Bx6J,KAAKu6J,eACPT,GAAqB95J,KAAKu6J,eAGxBv6J,KAAKq/J,UAAU90J,YACjBtM,EAAAA,EAAAA,KACG+B,KAAKu6J,eAAiBv6J,KAAKu6J,cAAchwJ,UAC1C,uCACD,CAKLyvJ,UAAAA,GACE,OAAO,CAAM,CAIfC,WAAAA,GACE,OAAOj6J,KAAKu6J,eAAiB9C,EAAW,CAI1CgD,cAAAA,CAAeC,GACb,OAAI16J,KAAKq/J,UAAU90J,UAEVvK,KAEA,IAAIo/J,GAAap/J,KAAKq/J,UAAW3E,EAAiB16J,KAAKs/J,UAAU,CAK5E3E,iBAAAA,CAAkBC,GAEhB,GAAkB,cAAdA,EACF,OAAO56J,KAAKi6J,cACP,CACL,MAAM1wI,EAAQvpB,KAAKq/J,UAAUnuJ,IAAI0pJ,GACjC,OAAiB,OAAVrxI,EAAiBkuI,GAAaluI,CAAM,CAAD,CAK9CsxI,QAAAA,CAAStnI,GACP,MAAM6nI,EAAQtO,GAAav5H,GAC3B,OAAc,OAAV6nI,EACKp7J,KAGFA,KAAK26J,kBAAkBS,GAAOP,SAAS7N,GAAaz5H,GAAO,CAIpEunI,QAAAA,CAASF,GACP,OAAyC,OAAlC56J,KAAKq/J,UAAUnuJ,IAAI0pJ,EAAoB,CAIhDK,oBAAAA,CAAqBL,EAAmBM,GAEtC,IADAj9J,EAAAA,EAAAA,IAAOi9J,EAAc,8CACH,cAAdN,EACF,OAAO56J,KAAKy6J,eAAeS,GACtB,CACL,MAAMsC,EAAY,IAAI7H,GAAUiF,EAAWM,GAC3C,IAAIxmH,EAAa6qH,EACbrE,EAAa3wJ,WACfmqC,EAAc10C,KAAKq/J,UAAU9wI,OAAOqsI,GACpC2E,EAAcv/J,KAAKs/J,UAAUH,kBAC3B3B,EACAx9J,KAAKq/J,aAGP3qH,EAAc10C,KAAKq/J,UAAUvyH,OAAO8tH,EAAWM,GAC/CqE,EAAcv/J,KAAKs/J,UAAUN,aAAaxB,EAAWx9J,KAAKq/J,YAG5D,MAAMG,EAAc9qH,EAAYnqC,UAC5BktJ,GACAz3J,KAAKu6J,cACT,OAAO,IAAI6E,GAAa1qH,EAAa8qH,EAAaD,EAAa,CAAD,CAKlEpE,WAAAA,CAAY5nI,EAAY2nI,GACtB,MAAME,EAAQtO,GAAav5H,GAC3B,GAAc,OAAV6nI,EACF,OAAOF,EACF,EACLj9J,EAAAA,EAAAA,IACyB,cAAvB6uJ,GAAav5H,IAAiD,IAAxBw5H,GAAcx5H,GACpD,8CAEF,MAAMksI,EAAoBz/J,KAAK26J,kBAAkBS,GAAOD,YACtDnO,GAAaz5H,GACb2nI,GAEF,OAAOl7J,KAAKi7J,qBAAqBG,EAAOqE,EAAmB,CAAD,CAK9Dl1J,OAAAA,GACE,OAAOvK,KAAKq/J,UAAU90J,SAAU,CAIlC8wJ,WAAAA,GACE,OAAOr7J,KAAKq/J,UAAU1uC,OAAQ,CAMhCnzG,GAAAA,CAAI+9I,GACF,GAAIv7J,KAAKuK,UACP,OAAO,KAGT,MAAMH,EAAgC,CAAC,EACvC,IAAIs1J,EAAU,EACZ3H,EAAS,EACT4H,GAAiB,EAYnB,GAXA3/J,KAAKs7J,aAAaoB,IAAgB,CAACp5J,EAAa03J,KAC9C5wJ,EAAI9G,GAAO03J,EAAUx9I,IAAI+9I,GAEzBmE,IACIC,GAAkBP,GAAaxmB,gBAAgBpxI,KAAKlE,GACtDy0J,EAASzhH,KAAK3b,IAAIo9H,EAAQtkJ,OAAOnQ,IAEjCq8J,GAAiB,CAAM,KAItBpE,GAAgBoE,GAAkB5H,EAAS,EAAI2H,EAAS,CAE3D,MAAME,EAAmB,GAEzB,IAAK,MAAMt8J,KAAO8G,EAChBw1J,EAAMt8J,GAA4B8G,EAAI9G,GAGxC,OAAOs8J,CAAM,CAKb,OAHIrE,IAAiBv7J,KAAKi6J,cAAc1vJ,YACtCH,EAAI,aAAepK,KAAKi6J,cAAcz8I,OAEjCpT,CAAG,CAKdg2D,IAAAA,GACE,GAAuB,OAAnBpgE,KAAKw6J,UAAoB,CAC3B,IAAIgB,EAAS,GACRx7J,KAAKi6J,cAAc1vJ,YACtBixJ,GACE,YACA5B,GAAiB55J,KAAKi6J,cAAcz8I,OACpC,KAGJxd,KAAKs7J,aAAaoB,IAAgB,CAACp5J,EAAK03J,KACtC,MAAM6E,EAAY7E,EAAU56F,OACV,KAAdy/F,IACFrE,GAAU,IAAMl4J,EAAM,IAAMu8J,EAAU,IAI1C7/J,KAAKw6J,UAAuB,KAAXgB,EAAgB,GAAKxlB,EAAKwlB,EAAQ,CAErD,OAAOx7J,KAAKw6J,SAAU,CAIxBO,uBAAAA,CACEH,EACAI,EACAzsJ,GAEA,MAAMuxJ,EAAM9/J,KAAK+/J,cAAcxxJ,GAC/B,GAAIuxJ,EAAK,CACP,MAAME,EAAcF,EAAI5G,kBACtB,IAAIvD,GAAUiF,EAAWI,IAE3B,OAAOgF,EAAcA,EAAYh+J,KAAO,IAAK,CAE7C,OAAOhC,KAAKq/J,UAAUnG,kBAAkB0B,EAAU,CAItDqF,iBAAAA,CAAkBzB,GAChB,MAAMsB,EAAM9/J,KAAK+/J,cAAcvB,GAC/B,GAAIsB,EAAK,CACP,MAAMhI,EAASgI,EAAIhI,SACnB,OAAOA,GAAUA,EAAO91J,IAAK,CAE7B,OAAOhC,KAAKq/J,UAAUvH,QAAQ,CAIlCoI,aAAAA,CAAc1B,GACZ,MAAM1G,EAAS93J,KAAKigK,kBAAkBzB,GACtC,OAAI1G,EACK,IAAInC,GAAUmC,EAAQ93J,KAAKq/J,UAAUnuJ,IAAI4mJ,IAEzC,IAAI,CAOfqI,gBAAAA,CAAiB3B,GACf,MAAMsB,EAAM9/J,KAAK+/J,cAAcvB,GAC/B,GAAIsB,EAAK,CACP,MAAM/H,EAAS+H,EAAI/H,SACnB,OAAOA,GAAUA,EAAO/1J,IAAK,CAE7B,OAAOhC,KAAKq/J,UAAUtH,QAAQ,CAIlCqI,YAAAA,CAAa5B,GACX,MAAMzG,EAAS/3J,KAAKmgK,iBAAiB3B,GACrC,OAAIzG,EACK,IAAIpC,GAAUoC,EAAQ/3J,KAAKq/J,UAAUnuJ,IAAI6mJ,IAEzC,IAAI,CAGfuD,YAAAA,CACE/sJ,EACA4iJ,GAEA,MAAM2O,EAAM9/J,KAAK+/J,cAAcxxJ,GAC/B,OAAIuxJ,EACKA,EAAInI,kBAAiB0I,GACnBlP,EAAOkP,EAAYr+J,KAAMq+J,EAAYhwI,QAGvCrwB,KAAKq/J,UAAU1H,iBAAiBxG,EAAO,CAIlD5pC,WAAAA,CACEi3C,GAEA,OAAOx+J,KAAKq5J,gBAAgBmF,EAAgBrI,UAAWqI,EAAiB,CAG1EnF,eAAAA,CACEiH,EACA9B,GAEA,MAAMsB,EAAM9/J,KAAK+/J,cAAcvB,GAC/B,GAAIsB,EACF,OAAOA,EAAIzG,gBAAgBiH,GAAWh9J,GAAOA,IACxC,CACL,MAAM2U,EAAWjY,KAAKq/J,UAAUhG,gBAC9BiH,EAAUt+J,KACV2zJ,GAAUC,MAEZ,IAAIx9I,EAAOH,EAASm/I,OACpB,MAAe,MAARh/I,GAAgBomJ,EAAgBzI,QAAQ39I,EAAMkoJ,GAAa,EAChEroJ,EAASi/I,UACT9+I,EAAOH,EAASm/I,OAElB,OAAOn/I,CAAS,CAAD,CAInBshJ,kBAAAA,CACEiF,GAEA,OAAOx+J,KAAKs5J,uBACVkF,EAAgBhI,UAChBgI,EACA,CAGJlF,sBAAAA,CACEiH,EACA/B,GAEA,MAAMsB,EAAM9/J,KAAK+/J,cAAcvB,GAC/B,GAAIsB,EACF,OAAOA,EAAIxG,uBAAuBiH,GAASj9J,GAClCA,IAEJ,CACL,MAAM2U,EAAWjY,KAAKq/J,UAAU/F,uBAC9BiH,EAAQv+J,KACR2zJ,GAAUC,MAEZ,IAAIx9I,EAAOH,EAASm/I,OACpB,MAAe,MAARh/I,GAAgBomJ,EAAgBzI,QAAQ39I,EAAMmoJ,GAAW,EAC9DtoJ,EAASi/I,UACT9+I,EAAOH,EAASm/I,OAElB,OAAOn/I,CAAS,CAAD,CAGnBwjJ,SAAAA,CAAUpvC,GACR,OAAIrsH,KAAKuK,UACH8hH,EAAM9hH,UACD,GAEC,EAED8hH,EAAM2tC,cAAgB3tC,EAAM9hH,UAC9B,EACE8hH,IAAUm0C,IACX,EAGD,CAAC,CAGZvE,SAAAA,CAAUuC,GACR,GACEA,IAAoB7H,IACpB32J,KAAKs/J,UAAUf,SAASC,GAExB,OAAOx+J,KACF,CACL,MAAMu/J,EAAcv/J,KAAKs/J,UAAUb,SACjCD,EACAx+J,KAAKq/J,WAEP,OAAO,IAAID,GAAap/J,KAAKq/J,UAAWr/J,KAAKu6J,cAAegF,EAAa,CAAD,CAG5ErD,SAAAA,CAAU3tJ,GACR,OAAOA,IAAUooJ,IAAa32J,KAAKs/J,UAAUf,SAAShwJ,EAAO,CAE/D4tJ,MAAAA,CAAO9vC,GACL,GAAIA,IAAUrsH,KACZ,OAAO,EACF,GAAIqsH,EAAM2tC,aACf,OAAO,EACF,CACL,MAAMyG,EAAoBp0C,EAC1B,GAAKrsH,KAAKi6J,cAAckC,OAAOsE,EAAkBxG,eAE1C,IACLj6J,KAAKq/J,UAAU1uC,UAAY8vC,EAAkBpB,UAAU1uC,QACvD,CACA,MAAM+vC,EAAW1gK,KAAKunH,YAAYm1C,IAC5BiE,EAAYF,EAAkBl5C,YAAYm1C,IAChD,IAAIkE,EAAcF,EAASxJ,UACvB2J,EAAeF,EAAUzJ,UAC7B,MAAO0J,GAAeC,EAAc,CAClC,GACED,EAAY5+J,OAAS6+J,EAAa7+J,OACjC4+J,EAAYvwI,KAAK8rI,OAAO0E,EAAaxwI,MAEtC,OAAO,EAETuwI,EAAcF,EAASxJ,UACvB2J,EAAeF,EAAUzJ,SAAU,CAErC,OAAuB,OAAhB0J,GAAyC,OAAjBC,CAAsB,CAErD,OAAO,CAAM,CApBb,OAAO,CAoBK,EAUVd,aAAAA,CACNvB,GAEA,OAAIA,IAAoB7H,GACf,KAEA32J,KAAKs/J,UAAUpuJ,IAAIstJ,EAAgB5/I,WAAW,EA7Q1CwgJ,GAAexmB,gBAAG,iBAkR7B,MAAOkoB,WAAgB1B,GAC3Br9J,WAAAA,GACE6G,MACE,IAAI4uJ,GAAwBiC,IAC5B2F,GAAa3H,WACbyG,GAAStpF,QACT,CAGJ6mF,SAAAA,CAAUpvC,GACR,OAAIA,IAAUrsH,KACL,EAEA,CAAC,CAIZm8J,MAAAA,CAAO9vC,GAEL,OAAOA,IAAUrsH,IAAK,CAGxBi6J,WAAAA,GACE,OAAOj6J,IAAK,CAGd26J,iBAAAA,CAAkBC,GAChB,OAAOwE,GAAa3H,UAAW,CAGjCltJ,OAAAA,GACE,OAAO,CAAM,EAOV,MAAMi2J,GAAW,IAAIM,GAY5B/9J,OAAO+/F,iBAAiB6yD,GAAW,CACjCS,IAAK,CACH1zJ,MAAO,IAAIizJ,GAAU1e,EAAUmoB,GAAa3H,aAE9CsJ,IAAK,CACHr+J,MAAO,IAAIizJ,GAAUze,EAAUspB,OAOnClK,GAASD,aAAe+I,GAAa3H,WACrC4C,GAASH,0BAA4BkF,GACrCzF,GAAW6G,IACXnE,GAAmBmE;;;;;;;;;;;;;;;;;ACrfnB,MAAMQ,IAAY,EAOf,SACaC,GACdC,EACArH,EAAoB,MAEpB,GAAa,OAATqH,EACF,OAAO9B,GAAa3H,WAoBtB,GAjBoB,kBAATyJ,GAAqB,cAAeA,IAC7CrH,EAAWqH,EAAK,eAGlBjjK,EAAAA,EAAAA,IACe,OAAb47J,GACsB,kBAAbA,GACa,kBAAbA,GACc,kBAAbA,GAAyB,QAAUA,EAC7C,uCAAyCA,GAGvB,kBAATqH,GAAqB,WAAYA,GAA2B,OAAnBA,EAAK,YACvDA,EAAOA,EAAK,WAIM,kBAATA,GAAqB,QAASA,EAAM,CAC7C,MAAMC,EAAWD,EACjB,OAAO,IAAI7G,GAAS8G,EAAUF,GAAapH,GAAW,CAGxD,GAAMqH,aAAgB3gK,QAAUygK,GA8CzB,CACL,IAAI3wI,EAAa+uI,GAAa3H,WAa9B,OAZA5/E,EAAKqpF,GAAM,CAAC59J,EAAa89J,KACvB,IAAIj3J,EAAAA,EAAAA,IAAS+2J,EAAgB59J,IACC,MAAxBA,EAAI8B,UAAU,EAAG,GAAY,CAE/B,MAAM41J,EAAYiG,GAAaG,IAC3BpG,EAAUhB,cAAiBgB,EAAUzwJ,YACvC8lB,EAAOA,EAAK4qI,qBAAqB33J,EAAK03J,GAAU,KAMjD3qI,EAAKoqI,eAAewG,GAAapH,GAAW,CA5DV,CACzC,MAAMzwI,EAAwB,GAC9B,IAAIi4I,GAAuB,EAC3B,MAAMC,EAAeJ,EAarB,GAZArpF,EAAKypF,GAAc,CAACh+J,EAAKimB,KACvB,GAA4B,MAAxBjmB,EAAI8B,UAAU,EAAG,GAAY,CAE/B,MAAM41J,EAAYiG,GAAa13I,GAC1ByxI,EAAUzwJ,YACb82J,EACEA,IAAyBrG,EAAUf,cAAc1vJ,UACnD6e,EAAS/nB,KAAK,IAAIs0J,GAAUryJ,EAAK03J,IAAW,KAK1B,IAApB5xI,EAASzqB,OACX,OAAOygK,GAAa3H,WAGtB,MAAM8J,EAAWnE,GACfh0I,EACAowI,IACAgE,GAAaA,EAAUx7J,MACvBy3J,IAEF,GAAI4H,EAAsB,CACxB,MAAMG,EAAiBpE,GACrBh0I,EACAszI,GAAe5G,cAEjB,OAAO,IAAIsJ,GACTmC,EACAN,GAAapH,GACb,IAAIqE,GACF,CAAE,YAAasD,GACf,CAAE,YAAa9E,KAEjB,CAEF,OAAO,IAAI0C,GACTmC,EACAN,GAAapH,GACbqE,GAAStpF,QACV,CAkBP,CAEAwnF,GAAgB6E;;;;;;;;;;;;;;;;;AC1GV,MAAOQ,WAAkB5L,GAC7B9zJ,WAAAA,CAAoB2/J,GAClB94J,QADkB,KAAU84J,WAAVA,GAGlBzjK,EAAAA,EAAAA,KACGyvJ,GAAYgU,IAA4C,cAA7B5U,GAAa4U,GACzC,0DACA,CAGMC,YAAAA,CAAaC,GACrB,OAAOA,EAAK/G,SAAS76J,KAAK0hK,WAAY,CAExCnL,WAAAA,CAAYlmI,GACV,OAAQA,EAAKwqI,SAAS76J,KAAK0hK,YAAYn3J,SAAU,CAEnDwrJ,OAAAA,CAAQlrJ,EAAcC,GACpB,MAAM+2J,EAAS7hK,KAAK2hK,aAAa92J,EAAEwlB,MAC7ByxI,EAAS9hK,KAAK2hK,aAAa72J,EAAEulB,MAC7BosI,EAAWoF,EAAOpG,UAAUqG,GAClC,OAAiB,IAAbrF,EACKtlB,EAAYtsI,EAAE7I,KAAM8I,EAAE9I,MAEtBy6J,CAAQ,CAGnBhG,QAAAA,CAASC,EAAoB10J,GAC3B,MAAM+/J,EAAYd,GAAavK,GACzBrmI,EAAO+uI,GAAa3H,WAAW0D,YACnCn7J,KAAK0hK,WACLK,GAEF,OAAO,IAAIpM,GAAU3zJ,EAAMquB,EAAM,CAEnCmmI,OAAAA,GACE,MAAMnmI,EAAO+uI,GAAa3H,WAAW0D,YAAYn7J,KAAK0hK,WAAYlB,IAClE,OAAO,IAAI7K,GAAUze,EAAU7mH,EAAM,CAEvCzR,QAAAA,GACE,OAAOuuI,GAAUntJ,KAAK0hK,WAAY,GAAGliK,KAAK,IAAK;;;;;;;;;;;;;;;;GC3C7C,MAAOwiK,WAAmBnM,GAC9BE,OAAAA,CAAQlrJ,EAAcC,GACpB,MAAM2xJ,EAAW5xJ,EAAEwlB,KAAKorI,UAAU3wJ,EAAEulB,MACpC,OAAiB,IAAbosI,EACKtlB,EAAYtsI,EAAE7I,KAAM8I,EAAE9I,MAEtBy6J,CAAQ,CAGnBlG,WAAAA,CAAYlmI,GACV,OAAO,CAAK,CAEd2lI,mBAAAA,CAAoBxmH,EAAeD,GACjC,OAAQC,EAAQ2sH,OAAO5sH,EAAS,CAElC4mH,OAAAA,GAEE,OAAQR,GAAkBS,GAAI,CAEhCI,OAAAA,GAEE,OAAQb,GAAkBoL,GAAI,CAGhCtK,QAAAA,CAASC,EAAoB10J,GAC3B,MAAM+/J,EAAYd,GAAavK,GAC/B,OAAO,IAAIf,GAAU3zJ,EAAM+/J,EAAW,CAMxCnjJ,QAAAA,GACE,MAAO,QAAS,EAIb,MAAMqjJ,GAAc,IAAID;;;;;;;;;;;;;;;;GCfzB,SAAUE,GAAYC,GAC1B,MAAO,CAAE97J,KAAK,QAAmB87J,eACnC,CAEgB,SAAAC,GACdxH,EACAuH,GAEA,MAAO,CAAE97J,KAA4B,cAAE87J,eAAcvH,YACvD,CAEgB,SAAAyH,GACdzH,EACAuH,GAEA,MAAO,CAAE97J,KAA8B,gBAAE87J,eAAcvH,YACzD,CAAC,SAEe0H,GACd1H,EACAuH,EACAI,GAEA,MAAO,CACLl8J,KAA8B,gBAC9B87J,eACAvH,YACA2H,UAEJ,CAEgB,SAAAC,GACd5H,EACAuH,GAEA,MAAO,CAAE97J,KAA4B,cAAE87J,eAAcvH,YACvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACXG,MACU6H,GAAb1gK,WAAAA,GACE,KAAS2gK,WAAG,EACZ,KAASC,WAAG,EACZ,KAAaC,eAAG,EAChB,KAAAC,gBAAiB,EACjB,KAAOC,SAAG,EACV,KAAWC,aAAG,EACd,KAAAC,eAAgB,EAChB,KAAMC,OAAG,EACT,KAASC,UAAG,GACZ,KAAgBC,iBAAmB,KACnC,KAAeC,gBAAG,GAClB,KAAcC,eAAmB,KACjC,KAAaC,cAAG,GAChB,KAAMC,OAAkB7G,EAAe,CAEvC8G,QAAAA,GACE,OAAOxjK,KAAK2iK,SAAU,CAMxBc,cAAAA,GACE,MAAuB,KAAnBzjK,KAAKkjK,UAKAljK,KAAK2iK,UAES,MAAd3iK,KAAKkjK,SAAS,CAOzBQ,kBAAAA,GAEE,OADAzlK,EAAAA,EAAAA,IAAO+B,KAAK2iK,UAAW,oCAChB3iK,KAAKmjK,gBAAiB,CAO/BQ,iBAAAA,GAEE,OADA1lK,EAAAA,EAAAA,IAAO+B,KAAK2iK,UAAW,oCACnB3iK,KAAK4iK,cACA5iK,KAAKojK,gBAELnsB,CAAQ,CAInB2sB,MAAAA,GACE,OAAO5jK,KAAK8iK,OAAQ,CAMtBe,gBAAAA,GAEE,OADA5lK,EAAAA,EAAAA,IAAO+B,KAAK8iK,QAAS,kCACd9iK,KAAKqjK,cAAe,CAO7BS,eAAAA,GAEE,OADA7lK,EAAAA,EAAAA,IAAO+B,KAAK8iK,QAAS,kCACjB9iK,KAAK+iK,YACA/iK,KAAKsjK,cAELpsB,CAAQ,CAInB6sB,QAAAA,GACE,OAAO/jK,KAAK0iK,SAAU,CAMxBsB,gBAAAA,GACE,OAAOhkK,KAAK0iK,WAAgC,KAAnB1iK,KAAKkjK,SAAiB,CAMjDe,QAAAA,GAEE,OADAhmK,EAAAA,EAAAA,IAAO+B,KAAK0iK,UAAW,oCAChB1iK,KAAKijK,MAAO,CAGrBtQ,QAAAA,GACE,OAAO3yJ,KAAKujK,MAAO,CAGrBtR,YAAAA,GACE,QAASjyJ,KAAK2iK,WAAa3iK,KAAK8iK,SAAW9iK,KAAK0iK,UAAW,CAG7D1Q,SAAAA,GACE,OAAOhyJ,KAAKiyJ,gBAAkBjyJ,KAAKujK,SAAW7G,EAAe,CAG/DhF,IAAAA,GACE,MAAMA,EAAO,IAAI+K,GAejB,OAdA/K,EAAKgL,UAAY1iK,KAAK0iK,UACtBhL,EAAKuL,OAASjjK,KAAKijK,OACnBvL,EAAKiL,UAAY3iK,KAAK2iK,UACtBjL,EAAKmL,eAAiB7iK,KAAK6iK,eAC3BnL,EAAKyL,iBAAmBnjK,KAAKmjK,iBAC7BzL,EAAKkL,cAAgB5iK,KAAK4iK,cAC1BlL,EAAK0L,gBAAkBpjK,KAAKojK,gBAC5B1L,EAAKoL,QAAU9iK,KAAK8iK,QACpBpL,EAAKsL,cAAgBhjK,KAAKgjK,cAC1BtL,EAAK2L,eAAiBrjK,KAAKqjK,eAC3B3L,EAAKqL,YAAc/iK,KAAK+iK,YACxBrL,EAAK4L,cAAgBtjK,KAAKsjK,cAC1B5L,EAAK6L,OAASvjK,KAAKujK,OACnB7L,EAAKwL,UAAYljK,KAAKkjK,UACfxL,CAAK,EAqIV,SAAUwM,GACdC,GAEA,MAAMC,EAAsC,CAAC,EAE7C,GAAID,EAAYnS,YACd,OAAOoS,EAGT,IAAIC,EAaJ,GAZIF,EAAYZ,SAAW7G,GACzB2H,EAAO,YACEF,EAAYZ,SAAWtB,GAChCoC,EAAO,SACEF,EAAYZ,SAAW5M,GAChC0N,EAAO,SAEPpmK,EAAAA,EAAAA,IAAOkmK,EAAYZ,kBAAkB9B,GAAW,4BAChD4C,EAAUF,EAAYZ,OAAO3kJ,YAE/BwlJ,EAAG,YAAiCh9J,EAAAA,EAAAA,IAAUi9J,GAE1CF,EAAYxB,UAAW,CACzB,MAAM2B,EAAaH,EAAYtB,eAC5B,aACD,UACFuB,EAAGE,IAAcl9J,EAAAA,EAAAA,IAAU+8J,EAAYhB,kBACnCgB,EAAYvB,gBACdwB,EAAGE,IAAe,KAAMl9J,EAAAA,EAAAA,IAAU+8J,EAAYf,iBAAgB,CAIlE,GAAIe,EAAYrB,QAAS,CACvB,MAAMyB,EAAWJ,EAAYnB,cAC1B,YACD,QACFoB,EAAGG,IAAYn9J,EAAAA,EAAAA,IAAU+8J,EAAYd,gBACjCc,EAAYpB,cACdqB,EAAGG,IAAa,KAAMn9J,EAAAA,EAAAA,IAAU+8J,EAAYb,eAAc,CAY9D,OARIa,EAAYzB,YACVyB,EAAYV,iBACdW,EAAuC,gBAAGD,EAAYlB,OAEtDmB,EAAsC,eAAGD,EAAYlB,QAIlDmB,CACT,CAEM,SAAUI,GACdL,GAEA,MAAM/5J,EAA+B,CAAC,EAmBtC,GAlBI+5J,EAAYxB,YACdv4J,EAA8C,MAC5C+5J,EAAYhB,iBACVgB,EAAYvB,gBACdx4J,EAA6C,MAC3C+5J,EAAYf,iBAEhBh5J,EAAqD,QAClD+5J,EAAYtB,gBAEbsB,EAAYrB,UACd14J,EAA4C,MAAG+5J,EAAYd,eACvDc,EAAYpB,cACd34J,EAA2C,MAAG+5J,EAAYb,eAE5Dl5J,EAAmD,QAChD+5J,EAAYnB,eAEbmB,EAAYzB,UAAW,CACzBt4J,EAAkC,KAAG+5J,EAAYlB,OACjD,IAAIwB,EAAWN,EAAYjB,UACV,KAAbuB,IAEAA,EADEN,EAAYV,iBACN,IAEA,KAGZr5J,EAAI,MAAqCq6J,CAAS,CAMpD,OAHIN,EAAYZ,SAAW7G,KACzBtyJ,EAAI,KAAiC+5J,EAAYZ,OAAO3kJ,YAEnDxU,CACT;;;;;;;;;;;;;;;;GClYM,MAAOs6J,WAA2B1Z,GACtCQ,WAAAA,CAAYC,GACV,MAAM,IAAIptJ,MAAM,0BAA2B,CAY7C,mBAAOsmK,CAAajyC,EAAqBrxE,GACvC,YAAYz+C,IAARy+C,EACK,OAASA,IAEhBpjD,EAAAA,EAAAA,IACEy0H,EAAMq/B,aAAaC,YACnB,kDAEKt/B,EAAM6+B,MAAM3yI,WAAU,CAQjC7c,WAAAA,CACUylJ,EACA6H,EAMAG,EACAC,GAER7mJ,QAVQ,KAAS4+I,UAATA,EACA,KAAa6H,cAAbA,EAMA,KAAkBG,mBAAlBA,EACA,KAAsBC,uBAAtBA,EAjCF,KAAAnQ,KAAqC9I,EAAW,WAMhD,KAAQouB,SAA4B,CAAC,CAAE,CAiC/CvuC,MAAAA,CACE3D,EACAk/B,EACAvwG,EACA6pG,GAEA,MAAMD,EAAav4B,EAAM6+B,MAAM3yI,WAC/B5e,KAAKs/I,KAAK,qBAAuB2L,EAAa,IAAMv4B,EAAMo/B,kBAG1D,MAAM+S,EAAWH,GAAmBC,aAAajyC,EAAOrxE,GAClDyjH,EAAa,CAAC,EACpB9kK,KAAK4kK,SAASC,GAAYC,EAE1B,MAAMC,EAAwBb,GAC5BxxC,EAAMq/B,cAGR/xJ,KAAKglK,aACH/Z,EAAa,QACb8Z,GACA,CAACviK,EAAO2F,KACN,IAAIkB,EAAOlB,EAWX,GATc,MAAV3F,IACF6G,EAAO,KACP7G,EAAQ,MAGI,OAAVA,GACFxC,KAAKqvJ,cAAcpE,EAAY5hJ,GAAmB,EAAOg4C,IAGvD/2C,EAAAA,EAAAA,IAAQtK,KAAK4kK,SAAUC,KAAcC,EAAY,CACnD,IAAIpgE,EAIFA,EAHGliG,EAEgB,MAAVA,EACA,oBAEA,cAAgBA,EAJhB,KAOX0oJ,EAAWxmD,EAAQ,KAAM,IAG7B,CAIJ6iC,QAAAA,CAAS7U,EAAqBrxE,GAC5B,MAAMwjH,EAAWH,GAAmBC,aAAajyC,EAAOrxE,UACjDrhD,KAAK4kK,SAASC,EAAU,CAGjC3zJ,GAAAA,CAAIwhH,GACF,MAAMqyC,EAAwBb,GAC5BxxC,EAAMq/B,cAGF9G,EAAav4B,EAAM6+B,MAAM3yI,WAEzBszH,EAAW,IAAI3sI,EAAAA,GA0BrB,OAxBAvF,KAAKglK,aACH/Z,EAAa,QACb8Z,GACA,CAACviK,EAAO2F,KACN,IAAIkB,EAAOlB,EAEG,MAAV3F,IACF6G,EAAO,KACP7G,EAAQ,MAGI,OAAVA,GACFxC,KAAKqvJ,cACHpE,EACA5hJ,GACa,EACJ,MAEX6oI,EAASzsI,QAAQ4D,IAEjB6oI,EAAS1sI,OAAO,IAAInH,MAAMgL,GAAiB,IAI1C6oI,EAASxsI,OAAQ,CAI1BylJ,gBAAAA,CAAiBnlJ,G,CAQTg/J,YAAAA,CACN/Z,EACA8Z,EAA0D,GAC1Dl/J,GAIA,OAFAk/J,EAAsB,UAAY,SAE3Bp/J,QAAQy6G,IAAI,CACjBpgH,KAAKwvJ,mBAAmB/V,UAA2B,GACnDz5I,KAAKyvJ,uBAAuBhW,UAA2B,KACtD93H,MAAK,EAAEq9H,EAAWD,MACfC,GAAaA,EAAUzE,cACzBwqB,EAAsB,QAAU/lB,EAAUzE,aAExCwE,GAAiBA,EAAc/4I,QACjC++J,EAAsB,MAAQhmB,EAAc/4I,OAG9C,MAAM0gG,GACH1mG,KAAKwnJ,UAAUz2C,OAAS,WAAa,WACtC/wG,KAAKwnJ,UAAUziJ,KACfkmJ,EAFA,OAKAjrJ,KAAKwnJ,UAAUn7H,WACf7gB,EAAAA,EAAAA,IAAYu5J,GAEd/kK,KAAKs/I,KAAK,4BAA8B54C,GACxC,MAAMgS,EAAM,IAAIlF,eAChBkF,EAAIrE,mBAAqB,KACvB,GAAIxuG,GAA+B,IAAnB6yG,EAAInpC,WAAkB,CACpCvvE,KAAKs/I,KACH,qBAAuB54C,EAAM,qBAC7BgS,EAAIhU,OACJ,YACAgU,EAAIvE,cAEN,IAAIxpG,EAAM,KACV,GAAI+tG,EAAIhU,QAAU,KAAOgU,EAAIhU,OAAS,IAAK,CACzC,IACE/5F,GAAMf,EAAAA,EAAAA,IAAS8uG,EAAIvE,aAAc,CACjC,MAAO7xG,GACP2c,EACE,qCACEynF,EACA,KACAgS,EAAIvE,aACN,CAEJtuG,EAAS,KAAM8E,EAAK,MAGD,MAAf+tG,EAAIhU,QAAiC,MAAfgU,EAAIhU,QAC5BzlF,EACE,sCACEynF,EACA,YACAgS,EAAIhU,QAGV7+F,EAAS6yG,EAAIhU,QAEf7+F,EAAW,IAAK,GAIpB6yG,EAAIzwG,KAAK,MAAOy+F,GAAuB,GACvCgS,EAAIvD,MAAM,GACT;;;;;;;;;;;;;;;;GCpOJ,MACU8vD,GAAbljK,WAAAA,GACU,KAAAmjK,UAAkB9F,GAAa3H,UAAW,CAElD0N,OAAAA,CAAQ5xI,GACN,OAAOvzB,KAAKklK,UAAUrK,SAAStnI,EAAM,CAGvC6xI,cAAAA,CAAe7xI,EAAY8xI,GACzBrlK,KAAKklK,UAAYllK,KAAKklK,UAAU/J,YAAY5nI,EAAM8xI,EAAiB;;;;;;;;;;;;;;;;GCjBpE,SAcaC,KACd,MAAO,CACL5iK,MAAO,KACP0mB,SAAU,IAAIxW,IAElB,CAmCG,SACa2yJ,GACdC,EACAjyI,EACAlqB,GAEA,GAAIqkJ,GAAYn6H,GACdiyI,EAAmB9iK,MAAQ2G,EAC3Bm8J,EAAmBp8I,SAAS5R,aACvB,GAAiC,OAA7BguJ,EAAmB9iK,MAC5B8iK,EAAmB9iK,MAAQ8iK,EAAmB9iK,MAAMy4J,YAAY5nI,EAAMlqB,OACjE,CACL,MAAMo8J,EAAW3Y,GAAav5H,GACzBiyI,EAAmBp8I,SAASzT,IAAI8vJ,IACnCD,EAAmBp8I,SAAS/W,IAAIozJ,EAAUH,MAG5C,MAAM/7I,EAAQi8I,EAAmBp8I,SAASlY,IAAIu0J,GAC9ClyI,EAAOy5H,GAAaz5H,GACpBgyI,GAA2Bh8I,EAAOgK,EAAMlqB,EAAM,CAElD,CAyDG,SACaq8J,GACdF,EACAG,EACA7+C,GAEiC,OAA7B0+C,EAAmB9iK,MACrBokH,EAAK6+C,EAAYH,EAAmB9iK,OAEpCkjK,GAA+BJ,GAAoB,CAACliK,EAAKuiK,KACvD,MAAMtyI,EAAO,IAAIg5H,GAAKoZ,EAAW/mJ,WAAa,IAAMtb,GACpDoiK,GAA8BG,EAAMtyI,EAAMuzF,EAAK,GAGrD,CAQgB,SAAA8+C,GACdJ,EACA1+C,GAEA0+C,EAAmBp8I,SAASxd,SAAQ,CAACi6J,EAAMviK,KACzCwjH,EAAKxjH,EAAKuiK,EAAK,GAEnB;;;;;;;;;;;;;;;;GCvJG,MACUC,GAGX/jK,WAAAA,CAAoBgkK,GAAA,KAAWA,YAAXA,EAFZ,KAAKC,MAAmC,IAAK,CAIrD90J,GAAAA,GACE,MAAM+0J,EAAWjmK,KAAK+lK,YAAY70J,MAE5B8jH,EAAKjyH,OAAA4D,OAAA,GAAQs/J,GAQnB,OAPIjmK,KAAKgmK,OACPnuF,EAAK73E,KAAKgmK,OAAO,CAACjgD,EAAcrjH,KAC9BsyH,EAAMjP,GAAQiP,EAAMjP,GAAQrjH,CAAK,IAGrC1C,KAAKgmK,MAAQC,EAENjxC,CAAM;;;;;;;;;;;;;;;;GCdjB,MAAMkxC,GAAuB,IACvBC,GAAuB,IAGvBC,GAAwB,IAAc,MAE/BC,GAIXtkK,WAAAA,CAAYukK,EAAqCC,GAAA,KAAOA,QAAPA,EAFjD,KAAcC,eAA6B,CAAC,EAG1CxmK,KAAKymK,eAAiB,IAAIX,GAAcQ,GAExC,MAAMp4I,EACJg4I,IACCC,GAAuBD,IAAwB5vH,KAAKu3B,SACvDqrE,EAAsBl5I,KAAK0mK,aAAa90J,KAAK5R,MAAOs2C,KAAKs3B,MAAM1/C,GAAU,CAGnEw4I,YAAAA,GACN,MAAMjb,EAAQzrJ,KAAKymK,eAAev1J,MAC5By1J,EAA8B,CAAC,EACrC,IAAIC,GAAoB,EAExB/uF,EAAK4zE,GAAO,CAAC1lC,EAAcrjH,KACrBA,EAAQ,IAAKyH,EAAAA,EAAAA,IAASnK,KAAKwmK,eAAgBzgD,KAC7C4gD,EAAc5gD,GAAQrjH,EACtBkkK,GAAoB,EAAK,IAIzBA,GACF5mK,KAAKumK,QAAQ/a,YAAYmb,GAI3BztB,EACEl5I,KAAK0mK,aAAa90J,KAAK5R,MACvBs2C,KAAKs3B,MAAsB,EAAhBt3B,KAAKu3B,SAAeu4F,IAC/B;;;;;;;;;;;;;;;;GC5CN,IAAYS,GAKX,SAsBeC,KACd,MAAO,CACLC,UAAU,EACVC,YAAY,EACZnV,QAAS,KACToV,QAAQ,EAEZ,CAAC,SAEeC,KACd,MAAO,CACLH,UAAU,EACVC,YAAY,EACZnV,QAAS,KACToV,QAAQ,EAEZ,CAEM,SAAUE,GACdtV,GAEA,MAAO,CACLkV,UAAU,EACVC,YAAY,EACZnV,UACAoV,QAAQ,EAEZ;;;;;;;;;;;;;;;;IAtDA,SAAYJ,GACVA,EAAAA,EAAA,4BACAA,EAAAA,EAAA,oBACAA,EAAAA,EAAA,sCACAA,EAAAA,EAAA,uCACD,EALD,CAAYA,KAAAA,GAKX,KCbE,MAeUO,GAUXrlK,WAAAA,CAC4BwxB,EACA8zI,EACAC,GAFA,KAAI/zI,KAAJA,EACA,KAAY8zI,aAAZA,EACA,KAAMC,OAANA,EAX5B,KAAAjhK,KAAOwgK,GAAcU,eAGrB,KAAMzkK,OAAGgkK,IAAyB,CAUlCU,iBAAAA,CAAkB5M,GAChB,GAAKlN,GAAY1tJ,KAAKuzB,MAUf,IAA+B,MAA3BvzB,KAAKqnK,aAAa3kK,MAM3B,OALAzE,EAAAA,EAAAA,IACE+B,KAAKqnK,aAAaj+I,SAAS7e,UAC3B,4DAGKvK,KACF,CACL,MAAM49J,EAAY59J,KAAKqnK,aAAaI,QAAQ,IAAIlb,GAAKqO,IACrD,OAAO,IAAIwM,GAAava,KAAgB+Q,EAAW59J,KAAKsnK,OAAQ,EAdhE,OAJArpK,EAAAA,EAAAA,IACE6uJ,GAAa9sJ,KAAKuzB,QAAUqnI,EAC5B,iDAEK,IAAIwM,GACTpa,GAAahtJ,KAAKuzB,MAClBvzB,KAAKqnK,aACLrnK,KAAKsnK,OAWwD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClDlE,MAOUI,GAIX3lK,WAAAA,CACSe,EACAywB,EACAquI,GAFA,KAAM9+J,OAANA,EACA,KAAIywB,KAAJA,EACA,KAAIquI,KAAJA,EALT,KAAAv7J,KAAOwgK,GAAcc,SAAU,CAQ/BH,iBAAAA,CAAkB5M,GAChB,OAAIlN,GAAY1tJ,KAAKuzB,MACZ,IAAIm0I,GACT1nK,KAAK8C,OACL+pJ,KACA7sJ,KAAK4hK,KAAKjH,kBAAkBC,IAGvB,IAAI8M,GAAU1nK,KAAK8C,OAAQkqJ,GAAahtJ,KAAKuzB,MAAOvzB,KAAK4hK,KAAK;;;;;;;;;;;;;;;;GCzBxE,MAiBUgG,GAIX7lK,WAAAA,CAC4Be,EACAywB,EACAnK,GAFA,KAAMtmB,OAANA,EACA,KAAIywB,KAAJA,EACA,KAAQnK,SAARA,EAL5B,KAAA/iB,KAAOwgK,GAAcgB,KAAM,CAO3BL,iBAAAA,CAAkB5M,GAChB,GAAIlN,GAAY1tJ,KAAKuzB,MAAO,CAC1B,MAAMqqI,EAAY59J,KAAKopB,SAASq+I,QAAQ,IAAIlb,GAAKqO,IACjD,OAAIgD,EAAUrzJ,UAEL,KACEqzJ,EAAUl7J,MAEZ,IAAIglK,GAAU1nK,KAAK8C,OAAQ+pJ,KAAgB+Q,EAAUl7J,OAGrD,IAAIklK,GAAM5nK,KAAK8C,OAAQ+pJ,KAAgB+Q,EAAU,CAO1D,OAJA3/J,EAAAA,EAAAA,IACE6uJ,GAAa9sJ,KAAKuzB,QAAUqnI,EAC5B,kEAEK,IAAIgN,GAAM5nK,KAAK8C,OAAQkqJ,GAAahtJ,KAAKuzB,MAAOvzB,KAAKopB,SAAS,CAGzExK,QAAAA,GACE,MACE,aACA5e,KAAKuzB,KACL,KACAvzB,KAAK8C,OAAO8b,WACZ,WACA5e,KAAKopB,SAASxK,WACd,GAAG;;;;;;;;;;;;;;;;GC7CN,MACUkpJ,GACX/lK,WAAAA,CACUgmK,EACAC,EACAC,GAFA,KAAKF,MAALA,EACA,KAAiBC,kBAAjBA,EACA,KAASC,UAATA,CAAS,CAMnBC,kBAAAA,GACE,OAAOloK,KAAKgoK,iBAAkB,CAMhCG,UAAAA,GACE,OAAOnoK,KAAKioK,SAAU,CAGxBG,iBAAAA,CAAkB70I,GAChB,GAAIm6H,GAAYn6H,GACd,OAAOvzB,KAAKkoK,uBAAyBloK,KAAKioK,UAG5C,MAAMxC,EAAW3Y,GAAav5H,GAC9B,OAAOvzB,KAAKqoK,mBAAmB5C,EAAU,CAG3C4C,kBAAAA,CAAmB/kK,GACjB,OACGtD,KAAKkoK,uBAAyBloK,KAAKioK,WAAcjoK,KAAK+nK,MAAMjN,SAASx3J,EAAI,CAI9E6hK,OAAAA,GACE,OAAOnlK,KAAK+nK,KAAM;;;;;;;;;;;;;;;;GCdhB,SAAUO,GACdC,EACAC,EACAC,EACAC,GAEA,MAAM52F,EAAkB,GAClB62F,EAAkB,GAuDxB,OArDAH,EAAQ58J,SAAQg9J,IAE4B,kBAAxCA,EAAOviK,MACPkiK,EAAehF,OAAOvN,oBACpB4S,EAAOrG,QACPqG,EAAOzG,eAGTwG,EAAMtnK,KAAKmhK,GAAiBoG,EAAOhO,UAAWgO,EAAOzG,cAAe,IAIxE0G,GACEN,EACAz2F,EAAO,gBAEP02F,EACAE,EACAD,GAEFI,GACEN,EACAz2F,EAAO,cAEP02F,EACAE,EACAD,GAEFI,GACEN,EACAz2F,EAAO,cAEP62F,EACAD,EACAD,GAEFI,GACEN,EACAz2F,EAAO,gBAEP02F,EACAE,EACAD,GAEFI,GACEN,EACAz2F,EAAO,QAEP02F,EACAE,EACAD,GAGK32F,CACT,CAKA,SAAS+2F,GACPN,EACAz2F,EACA+5E,EACA2c,EACAM,EACAL,GAEA,MAAMM,EAAkBP,EAAQn0J,QAAOu0J,GAAUA,EAAOviK,OAASwlJ,IAEjEkd,EAAgB7lJ,MAAK,CAACrY,EAAGC,IACvBk+J,GAA6BT,EAAgB19J,EAAGC,KAElDi+J,EAAgBn9J,SAAQg9J,IACtB,MAAMK,EAAqBC,GACzBX,EACAK,EACAH,GAEFK,EAAcl9J,SAAQu9J,IAChBA,EAAaC,WAAWR,EAAOviK,OACjCyrE,EAAOzwE,KACL8nK,EAAaE,YAAYJ,EAAoBV,EAAee,QAC5D,GAEJ,GAEN,CAEA,SAASJ,GACPX,EACAK,EACAH,GAEA,MAAoB,UAAhBG,EAAOviK,MAAoC,kBAAhBuiK,EAAOviK,OAGpCuiK,EAAOW,SAAWd,EAAW1N,wBAC3B6N,EAAOhO,UACPgO,EAAOzG,aACPoG,EAAehF,SALVqF,CASX,CAEA,SAASI,GACPT,EACA19J,EACAC,GAEA,GAAmB,MAAfD,EAAE+vJ,WAAoC,MAAf9vJ,EAAE8vJ,UAC3B,MAAMx8J,EAAAA,EAAAA,IAAe,sCAEvB,MAAMorK,EAAW,IAAI7T,GAAU9qJ,EAAE+vJ,UAAW/vJ,EAAEs3J,cACxCsH,EAAW,IAAI9T,GAAU7qJ,EAAE8vJ,UAAW9vJ,EAAEq3J,cAC9C,OAAOoG,EAAehF,OAAOxN,QAAQyT,EAAUC,EACjD;;;;;;;;;;;;;;;;GC/IgB,SAAAC,GACdjB,EACAkB,GAEA,MAAO,CAAElB,aAAYkB,cACvB,CAEM,SAAUC,GACdC,EACAC,EACAznF,EACAvyB,GAEA,OAAO45G,GACL,IAAI5B,GAAUgC,EAAWznF,EAAUvyB,GACnC+5G,EAAUF,YAEd,CAEM,SAAUI,GACdF,EACAG,EACA3nF,EACAvyB,GAEA,OAAO45G,GACLG,EAAUpB,WACV,IAAIX,GAAUkC,EAAY3nF,EAAUvyB,GAExC,CAEM,SAAUm6G,GACdJ,GAEA,OAAOA,EAAUpB,WAAWP,qBACxB2B,EAAUpB,WAAWtD,UACrB,IACN,CAEM,SAAU+E,GACdL,GAEA,OAAOA,EAAUF,YAAYzB,qBACzB2B,EAAUF,YAAYxE,UACtB,IACN;;;;;;;;;;;;;;;;GChDA,IAAIgF,GAMJ,MAAMC,GAAgBA,KACfD,KACHA,GAAyB,IAAI3S,GAC3BjgB,IAGG4yB,IAKN,MACUE,GACX,iBAAOC,CAAclgK,GACnB,IAAIy7J,EAAyB,IAAIwE,GAAiB,MAIlD,OAHAxyF,EAAKztE,GAAK,CAACmgK,EAAmBC,KAC5B3E,EAAOA,EAAKxzJ,IAAI,IAAIk6I,GAAKge,GAAYC,EAAU,IAE1C3E,CAAK,CAGd9jK,WAAAA,CACkBW,EACA0mB,EAGZghJ,MAJY,KAAK1nK,MAALA,EACA,KAAQ0mB,SAARA,CAAQ,CAS1B7e,OAAAA,GACE,OAAsB,OAAfvK,KAAK0C,OAAkB1C,KAAKopB,SAAS7e,SAAU,CAaxDkgK,gCAAAA,CACEC,EACAC,GAEA,GAAkB,MAAd3qK,KAAK0C,OAAiBioK,EAAU3qK,KAAK0C,OACvC,MAAO,CAAE6wB,KAAMs5H,KAAgBnqJ,MAAO1C,KAAK0C,OAE3C,GAAIgrJ,GAAYgd,GACd,OAAO,KACF,CACL,MAAMtP,EAAQtO,GAAa4d,GACrBnhJ,EAAQvpB,KAAKopB,SAASlY,IAAIkqJ,GAChC,GAAc,OAAV7xI,EAAgB,CAClB,MAAMqhJ,EACJrhJ,EAAMkhJ,iCACJzd,GAAa0d,GACbC,GAEJ,GAAiC,MAA7BC,EAAmC,CACrC,MAAM1vD,EAAWqyC,GACf,IAAIhB,GAAK6O,GACTwP,EAA0Br3I,MAE5B,MAAO,CAAEA,KAAM2nF,EAAUx4G,MAAOkoK,EAA0BloK,MAAQ,CAElE,OAAO,IAAI,CAGb,OAAO,IAAI,EAUnBmoK,wBAAAA,CACEH,GAEA,OAAO1qK,KAAKyqK,iCAAiCC,GAAc,KAAM,GAAM,CAMzEjD,OAAAA,CAAQiD,GACN,GAAIhd,GAAYgd,GACd,OAAO1qK,KACF,CACL,MAAMo7J,EAAQtO,GAAa4d,GACrB9M,EAAY59J,KAAKopB,SAASlY,IAAIkqJ,GACpC,OAAkB,OAAdwC,EACKA,EAAU6J,QAAQza,GAAa0d,IAE/B,IAAIL,GAAiB,KAAK,EAYvCh4J,GAAAA,CAAIq4J,EAAoBI,GACtB,GAAIpd,GAAYgd,GACd,OAAO,IAAIL,GAAcS,EAAO9qK,KAAKopB,UAChC,CACL,MAAMgyI,EAAQtO,GAAa4d,GACrBnhJ,EAAQvpB,KAAKopB,SAASlY,IAAIkqJ,IAAU,IAAIiP,GAAiB,MACzDU,EAAWxhJ,EAAMlX,IAAI26I,GAAa0d,GAAeI,GACjDp2H,EAAc10C,KAAKopB,SAAS0jB,OAAOsuH,EAAO2P,GAChD,OAAO,IAAIV,GAAcrqK,KAAK0C,MAAOgyC,EAAa,CAAD,CAUrDnmB,MAAAA,CAAOm8I,GACL,GAAIhd,GAAYgd,GACd,OAAI1qK,KAAKopB,SAAS7e,UACT,IAAI8/J,GAAiB,MAErB,IAAIA,GAAc,KAAMrqK,KAAKopB,UAEjC,CACL,MAAMgyI,EAAQtO,GAAa4d,GACrBnhJ,EAAQvpB,KAAKopB,SAASlY,IAAIkqJ,GAChC,GAAI7xI,EAAO,CACT,MAAMwhJ,EAAWxhJ,EAAMgF,OAAOy+H,GAAa0d,IAC3C,IAAIh2H,EAMJ,OAJEA,EADEq2H,EAASxgK,UACGvK,KAAKopB,SAASmF,OAAO6sI,GAErBp7J,KAAKopB,SAAS0jB,OAAOsuH,EAAO2P,GAEzB,OAAf/qK,KAAK0C,OAAkBgyC,EAAYnqC,UAC9B,IAAI8/J,GAAiB,MAErB,IAAIA,GAAcrqK,KAAK0C,MAAOgyC,EAAY,CAGnD,OAAO10C,IAAI,EAWjBkR,GAAAA,CAAIw5J,GACF,GAAIhd,GAAYgd,GACd,OAAO1qK,KAAK0C,MACP,CACL,MAAM04J,EAAQtO,GAAa4d,GACrBnhJ,EAAQvpB,KAAKopB,SAASlY,IAAIkqJ,GAChC,OAAI7xI,EACKA,EAAMrY,IAAI87I,GAAa0d,IAEvB,IAAI,EAYjBM,OAAAA,CAAQN,EAAoBO,GAC1B,GAAIvd,GAAYgd,GACd,OAAOO,EACF,CACL,MAAM7P,EAAQtO,GAAa4d,GACrBnhJ,EAAQvpB,KAAKopB,SAASlY,IAAIkqJ,IAAU,IAAIiP,GAAiB,MACzDU,EAAWxhJ,EAAMyhJ,QAAQhe,GAAa0d,GAAeO,GAC3D,IAAIv2H,EAMJ,OAJEA,EADEq2H,EAASxgK,UACGvK,KAAKopB,SAASmF,OAAO6sI,GAErBp7J,KAAKopB,SAAS0jB,OAAOsuH,EAAO2P,GAErC,IAAIV,GAAcrqK,KAAK0C,MAAOgyC,EAAa,CAAD,CASrDw2H,IAAAA,CAAQzgK,GACN,OAAOzK,KAAKmrK,MAAMte,KAAgBpiJ,EAAI,CAMhC0gK,KAAAA,CACNC,EACA3gK,GAEA,MAAM4gK,EAA4B,CAAC,EAMnC,OALArrK,KAAKopB,SAASuuI,kBACZ,CAAC8N,EAAkB7H,KACjByN,EAAM5F,GAAY7H,EAAUuN,MAAM5d,GAAU6d,EAAW3F,GAAWh7J,EAAG,IAGlEA,EAAG2gK,EAAWprK,KAAK0C,MAAO2oK,EAAO,CAM1CC,UAAAA,CAAc/3I,EAAY1mB,GACxB,OAAO7M,KAAKurK,YAAYh4I,EAAMs5H,KAAgBhgJ,EAAG,CAG3C0+J,WAAAA,CACNC,EACAJ,EACAv+J,GAEA,MAAM1E,IAASnI,KAAK0C,OAAQmK,EAAEu+J,EAAWprK,KAAK0C,OAC9C,GAAIyF,EACF,OAAOA,EAEP,GAAIulJ,GAAY8d,GACd,OAAO,KACF,CACL,MAAMpQ,EAAQtO,GAAa0e,GACrBh1H,EAAYx2C,KAAKopB,SAASlY,IAAIkqJ,GACpC,OAAI5kH,EACKA,EAAU+0H,YACfve,GAAawe,GACbje,GAAU6d,EAAWhQ,GACrBvuJ,GAGK,IAAI,EAMnB4+J,aAAAA,CACEl4I,EACA1mB,GAEA,OAAO7M,KAAK0rK,eAAen4I,EAAMs5H,KAAgBhgJ,EAAG,CAG9C6+J,cAAAA,CACNF,EACAG,EACA9+J,GAEA,GAAI6gJ,GAAY8d,GACd,OAAOxrK,KACF,CACDA,KAAK0C,OACPmK,EAAE8+J,EAAqB3rK,KAAK0C,OAE9B,MAAM04J,EAAQtO,GAAa0e,GACrBh1H,EAAYx2C,KAAKopB,SAASlY,IAAIkqJ,GACpC,OAAI5kH,EACKA,EAAUk1H,eACf1e,GAAawe,GACbje,GAAUoe,EAAqBvQ,GAC/BvuJ,GAGK,IAAIw9J,GAAiB,KAAK,EAWvCuB,OAAAA,CAAQ/+J,GACN7M,KAAK6rK,SAAShf,KAAgBhgJ,EAAG,CAG3Bg/J,QAAAA,CACNF,EACA9+J,GAEA7M,KAAKopB,SAASuuI,kBAAiB,CAACiD,EAAWgD,KACzCA,EAAUiO,SAASte,GAAUoe,EAAqB/Q,GAAY/tJ,EAAE,IAE9D7M,KAAK0C,OACPmK,EAAE8+J,EAAqB3rK,KAAK0C,MAAM,CAItCopK,YAAAA,CAAaj/J,GACX7M,KAAKopB,SAASuuI,kBACZ,CAACiD,EAAmBgD,KACdA,EAAUl7J,OACZmK,EAAE+tJ,EAAWgD,EAAUl7J,MAAO,GAGlC;;;;;;;;;;;;;;;;GClUH,MACUqpK,GACXhqK,WAAAA,CAAmBiqK,GAAA,KAAUA,WAAVA,CAAU,CAE7B,YAAOC,GACL,OAAO,IAAIF,GAAc,IAAI1B,GAAc,MAAO,EAErD,SAEe6B,GACdC,EACA54I,EACAlD,GAEA,GAAIq9H,GAAYn6H,GACd,OAAO,IAAIw4I,GAAc,IAAI1B,GAAch6I,IACtC,CACL,MAAM+7I,EAAWD,EAAcH,WAAWnB,yBAAyBt3I,GACnE,GAAgB,MAAZ64I,EAAkB,CACpB,MAAMC,EAAeD,EAAS74I,KAC9B,IAAI7wB,EAAQ0pK,EAAS1pK,MACrB,MAAMgoK,EAAe/c,GAAgB0e,EAAc94I,GAEnD,OADA7wB,EAAQA,EAAMy4J,YAAYuP,EAAcr6I,GACjC,IAAI07I,GACTI,EAAcH,WAAW35J,IAAIg6J,EAAc3pK,GAC3C,CACG,CACL,MAAM+kK,EAAU,IAAI4C,GAAch6I,GAC5Bi8I,EAAeH,EAAcH,WAAWhB,QAAQz3I,EAAMk0I,GAC5D,OAAO,IAAIsE,GAAcO,EAAc,CAAD,CAG5C,CAAC,SAEeC,GACdJ,EACA54I,EACAi5I,GAEA,IAAIC,EAAWN,EAIf,OAHAt0F,EAAK20F,GAAS,CAAC/G,EAAkBp1I,KAC/Bo8I,EAAWP,GAAsBO,EAAUlf,GAAUh6H,EAAMkyI,GAAWp1I,EAAK,IAEtEo8I,CACT,CAUgB,SAAAC,GACdP,EACA54I,GAEA,GAAIm6H,GAAYn6H,GACd,OAAOw4I,GAAcE,QAChB,CACL,MAAMK,EAAeH,EAAcH,WAAWhB,QAC5Cz3I,EACA,IAAI82I,GAAoB,OAE1B,OAAO,IAAI0B,GAAcO,EAAc,CAE3C,CAUgB,SAAAK,GACdR,EACA54I,GAEA,OAA4D,MAArDq5I,GAA6BT,EAAe54I,EACrD,CAUgB,SAAAq5I,GACdT,EACA54I,GAEA,MAAM64I,EAAWD,EAAcH,WAAWnB,yBAAyBt3I,GACnE,OAAgB,MAAZ64I,EACKD,EAAcH,WAClB96J,IAAIk7J,EAAS74I,MACbsnI,SAASlN,GAAgBye,EAAS74I,KAAMA,IAEpC,IAEX,CAQM,SAAUs5I,GACdV,GAEA,MAAM/iJ,EAAwB,GACxBiH,EAAO87I,EAAcH,WAAWtpK,MAoBtC,OAnBY,MAAR2tB,EAEGA,EAAK2pI,cACP3pI,EAAsBirI,aACrBoB,IACA,CAAC9B,EAAWI,KACV5xI,EAAS/nB,KAAK,IAAIs0J,GAAUiF,EAAWI,GAAW,IAKxDmR,EAAcH,WAAW5iJ,SAASuuI,kBAChC,CAACiD,EAAWgD,KACa,MAAnBA,EAAUl7J,OACZ0mB,EAAS/nB,KAAK,IAAIs0J,GAAUiF,EAAWgD,EAAUl7J,OAAQ,IAK1D0mB,CACT,CAEgB,SAAA0jJ,GACdX,EACA54I,GAEA,GAAIm6H,GAAYn6H,GACd,OAAO44I,EACF,CACL,MAAMY,EAAgBH,GAA6BT,EAAe54I,GAClE,OACS,IAAIw4I,GADQ,MAAjBgB,EACuB,IAAI1C,GAAc0C,GAElBZ,EAAcH,WAAWvE,QAAQl0I,GAAM,CAGtE,CAMM,SAAUy5I,GAAqBb,GACnC,OAAOA,EAAcH,WAAWzhK,SAClC,CAQgB,SAAA0iK,GACdd,EACA97I,GAEA,OAAO68I,GAAkBrgB,KAAgBsf,EAAcH,WAAY37I,EACrE,CAEA,SAAS68I,GACPxC,EACAyC,EACA98I,GAEA,GAAuB,MAAnB88I,EAAUzqK,MAEZ,OAAO2tB,EAAK8qI,YAAYuP,EAAcyC,EAAUzqK,OAC3C,CACL,IAAI0qK,EAAgB,KAyBpB,OAxBAD,EAAU/jJ,SAASuuI,kBAAiB,CAAC8N,EAAU7H,KAC5B,cAAb6H,IAGFxnK,EAAAA,EAAAA,IACsB,OAApB2/J,EAAUl7J,MACV,6CAEF0qK,EAAgBxP,EAAUl7J,OAE1B2tB,EAAO68I,GACL3f,GAAUmd,EAAcjF,GACxB7H,EACAvtI,EACA,IAIDA,EAAKwqI,SAAS6P,GAAcngK,WAA+B,OAAlB6iK,IAC5C/8I,EAAOA,EAAK8qI,YACV5N,GAAUmd,EAAc,aACxB0C,IAGG/8I,CAAK,CAEhB;;;;;;;;;;;;;;;;GCzLgB,SAAAg9I,GACdF,EACA55I,GAEA,OAAO+5I,GAAgB/5I,EAAM45I,EAC/B,CAOM,SAAUI,GACdJ,EACA55I,EACAquI,EACA4L,EACA5e,IAEA3wJ,EAAAA,EAAAA,IACEuvK,EAAUL,EAAUM,YACpB,qDAEc7qK,IAAZgsJ,IACFA,GAAU,GAEZue,EAAUO,UAAUrsK,KAAK,CACvBkyB,OACAquI,OACA4L,UACA5e,YAGEA,IACFue,EAAUQ,cAAgBzB,GACxBiB,EAAUQ,cACVp6I,EACAquI,IAGJuL,EAAUM,YAAcD,CAC1B,CA8BgB,SAAAI,GACdT,EACAK,GAEA,IAAK,IAAI9uK,EAAI,EAAGA,EAAIyuK,EAAUO,UAAU/uK,OAAQD,IAAK,CACnD,MAAM6qH,EAAS4jD,EAAUO,UAAUhvK,GACnC,GAAI6qH,EAAOikD,UAAYA,EACrB,OAAOjkD,CAAM,CAGjB,OAAO,IACT,CASgB,SAAAskD,GACdV,EACAK,GAOA,MAAM1N,EAAMqN,EAAUO,UAAUljI,WAAU9Z,GACjCA,EAAE88I,UAAYA,KAEvBvvK,EAAAA,EAAAA,IAAO6hK,GAAO,EAAG,gDACjB,MAAMgO,EAAgBX,EAAUO,UAAU5N,GAC1CqN,EAAUO,UAAUnrJ,OAAOu9I,EAAK,GAEhC,IAAIiO,EAAyBD,EAAclf,QACvCof,GAAsC,EAEtCtvK,EAAIyuK,EAAUO,UAAU/uK,OAAS,EAErC,MAAOovK,GAA0BrvK,GAAK,EAAG,CACvC,MAAMuvK,EAAed,EAAUO,UAAUhvK,GACrCuvK,EAAarf,UAEblwJ,GAAKohK,GACLoO,GAA6BD,EAAcH,EAAcv6I,MAGzDw6I,GAAyB,EAChBhgB,GAAa+f,EAAcv6I,KAAM06I,EAAa16I,QAEvDy6I,GAAsC,IAG1CtvK,GAAI,CAGN,GAAKqvK,EAEE,IAAIC,EAGT,OADAG,GAAoBhB,IACb,EAGP,GAAIW,EAAclM,KAChBuL,EAAUQ,cAAgBjB,GACxBS,EAAUQ,cACVG,EAAcv6I,UAEX,CACL,MAAMnK,EAAW0kJ,EAAc1kJ,SAC/ByuD,EAAKzuD,GAAWwxI,IACduS,EAAUQ,cAAgBjB,GACxBS,EAAUQ,cACVpgB,GAAUugB,EAAcv6I,KAAMqnI,GAC/B,GACA,CAEL,OAAO,CAAK,CArBZ,OAAO,CAuBX,CAEA,SAASsT,GACPE,EACA76I,GAEA,GAAI66I,EAAYxM,KACd,OAAO7T,GAAaqgB,EAAY76I,KAAMA,GAEtC,IAAK,MAAMqnI,KAAawT,EAAYhlJ,SAClC,GACEglJ,EAAYhlJ,SAAShmB,eAAew3J,IACpC7M,GAAaR,GAAU6gB,EAAY76I,KAAMqnI,GAAYrnI,GAErD,OAAO,EAGX,OAAO,CAEX,CAKA,SAAS46I,GAAoBhB,GAC3BA,EAAUQ,cAAgBU,GACxBlB,EAAUO,UACVY,GACAzhB,MAEEsgB,EAAUO,UAAU/uK,OAAS,EAC/BwuK,EAAUM,YACRN,EAAUO,UAAUP,EAAUO,UAAU/uK,OAAS,GAAG6uK,QAEtDL,EAAUM,aAAe,CAE7B,CAKA,SAASa,GAAwBr3G,GAC/B,OAAOA,EAAM23F,OACf,CAMA,SAASyf,GACPE,EACAl6J,EACAm6J,GAEA,IAAIrC,EAAgBJ,GAAcE,QAClC,IAAK,IAAIvtK,EAAI,EAAGA,EAAI6vK,EAAO5vK,SAAUD,EAAG,CACtC,MAAMu4D,EAAQs3G,EAAO7vK,GAIrB,GAAI2V,EAAO4iD,GAAQ,CACjB,MAAMw3G,EAAYx3G,EAAM1jC,KACxB,IAAIm3I,EACJ,GAAIzzG,EAAM2qG,KACJ7T,GAAaygB,EAAUC,IACzB/D,EAAe/c,GAAgB6gB,EAAUC,GACzCtC,EAAgBD,GACdC,EACAzB,EACAzzG,EAAM2qG,OAEC7T,GAAa0gB,EAAWD,KACjC9D,EAAe/c,GAAgB8gB,EAAWD,GAC1CrC,EAAgBD,GACdC,EACAtf,KACA51F,EAAM2qG,KAAK/G,SAAS6P,SAKnB,KAAIzzG,EAAM7tC,SAgCf,MAAMhrB,EAAAA,EAAAA,IAAe,8CA/BrB,GAAI2vJ,GAAaygB,EAAUC,GACzB/D,EAAe/c,GAAgB6gB,EAAUC,GACzCtC,EAAgBI,GACdJ,EACAzB,EACAzzG,EAAM7tC,eAEH,GAAI2kI,GAAa0gB,EAAWD,GAEjC,GADA9D,EAAe/c,GAAgB8gB,EAAWD,GACtC9gB,GAAYgd,GACdyB,EAAgBI,GACdJ,EACAtf,KACA51F,EAAM7tC,cAEH,CACL,MAAMG,GAAQjf,EAAAA,EAAAA,IAAQ2sD,EAAM7tC,SAAU0jI,GAAa4d,IACnD,GAAInhJ,EAAO,CAET,MAAMmlJ,EAAWnlJ,EAAMsxI,SAAS7N,GAAa0d,IAC7CyB,EAAgBD,GACdC,EACAtf,KACA6hB,EACA,CAAD,CAO4D,CAAD,EAIxE,OAAOvC,CACT,CAqBM,SAAUwC,GACdxB,EACAyB,EACAC,EACAC,EACAC,GAEA,GAAKD,GAAsBC,EAyBpB,CACL,MAAMjuE,EAAQgsE,GACZK,EAAUQ,cACViB,GAEF,IAAKG,GAAuB/B,GAAqBlsE,GAC/C,OAAO+tE,EAGP,GACGE,GACsB,MAAvBF,GACClC,GAA8B7rE,EAAO+rD,MAGjC,CACL,MAAMx4I,EAAS,SAAU4iD,GACvB,OACGA,EAAM23F,SAAWmgB,MAChBD,KACEA,EAAkBnsJ,QAAQs0C,EAAMu2G,YACnCzf,GAAa92F,EAAM1jC,KAAMq7I,IACxB7gB,GAAa6gB,EAAU33G,EAAM1jC,MAEnC,EACMy7I,EAAcX,GAClBlB,EAAUO,UACVr5J,EACAu6J,GAEIK,EAAeJ,GAAuBzP,GAAa3H,WACzD,OAAOwV,GAAmB+B,EAAaC,EAAc,CAjBrD,OAAO,IAiB6C,CAxDV,CAC9C,MAAMlC,EAAgBH,GACpBO,EAAUQ,cACViB,GAEF,GAAqB,MAAjB7B,EACF,OAAOA,EACF,CACL,MAAMmC,EAAWpC,GACfK,EAAUQ,cACViB,GAEF,GAAI5B,GAAqBkC,GACvB,OAAOL,EACF,GACkB,MAAvBA,GACClC,GAA8BuC,EAAUriB,MAIpC,CACL,MAAMoiB,EAAeJ,GAAuBzP,GAAa3H,WACzD,OAAOwV,GAAmBiC,EAAUD,EAAc,CAHlD,OAAO,IAG0C,EAsCzD,CAKG,SACaE,GACdhC,EACAyB,EACAQ,GAEA,IAAIC,EAAmBjQ,GAAa3H,WACpC,MAAM6X,EAAc1C,GAClBO,EAAUQ,cACViB,GAEF,GAAIU,EAUF,OATKA,EAAYtV,cAEfsV,EAAYhU,aAAaoB,IAAgB,CAAC9B,EAAW4P,KACnD6E,EAAmBA,EAAiBpU,qBAClCL,EACA4P,EACD,IAGE6E,EACF,GAAID,EAAwB,CAGjC,MAAMtuE,EAAQgsE,GACZK,EAAUQ,cACViB,GAsBF,OApBAQ,EAAuB9T,aACrBoB,IACA,CAAC9B,EAAWI,KACV,MAAM3qI,EAAO48I,GACXH,GAAgChsE,EAAO,IAAIyrD,GAAKqO,IAChDI,GAEFqU,EAAmBA,EAAiBpU,qBAClCL,EACAvqI,EACD,IAILw8I,GAAiC/rE,GAAOl1F,SAAQ4xJ,IAC9C6R,EAAmBA,EAAiBpU,qBAClCuC,EAAUx7J,KACVw7J,EAAUntI,KACX,IAEIg/I,CAAiB,CACnB,CAGL,MAAMvuE,EAAQgsE,GACZK,EAAUQ,cACViB,GAQF,OANA/B,GAAiC/rE,GAAOl1F,SAAQ4xJ,IAC9C6R,EAAmBA,EAAiBpU,qBAClCuC,EAAUx7J,KACVw7J,EAAUntI,KACX,IAEIg/I,CAAiB,CAE5B,CAgBM,SAAUE,GACdpC,EACAyB,EACArE,EACAiF,EACAC,IAEAxxK,EAAAA,EAAAA,IACEuxK,GAAqBC,EACrB,6DAEF,MAAMl8I,EAAOg6H,GAAUqhB,EAAUrE,GACjC,GAAIoC,GAA8BQ,EAAUQ,cAAep6I,GAGzD,OAAO,KACF,CAEL,MAAMm8I,EAAa5C,GACjBK,EAAUQ,cACVp6I,GAEF,OAAIy5I,GAAqB0C,GAEhBD,EAAmB5U,SAAS0P,GAQ5B0C,GACLyC,EACAD,EAAmB5U,SAAS0P,GAC7B,CAGP,CAMM,SAAUoF,GACdxC,EACAyB,EACAnJ,EACAgK,GAEA,MAAMl8I,EAAOg6H,GAAUqhB,EAAUnJ,GAC3BsH,EAAgBH,GACpBO,EAAUQ,cACVp6I,GAEF,GAAqB,MAAjBw5I,EACF,OAAOA,EAEP,GAAI0C,EAAmBpH,mBAAmB5C,GAAW,CACnD,MAAMiK,EAAa5C,GACjBK,EAAUQ,cACVp6I,GAEF,OAAO05I,GACLyC,EACAD,EAAmBtK,UAAUxK,kBAAkB8K,GAC/C,CAEF,OAAO,IAGb,CAOgB,SAAAmK,GACdzC,EACA55I,GAEA,OAAOq5I,GAA6BO,EAAUQ,cAAep6I,EAC/D,CAMgB,SAAAs8I,GACd1C,EACAyB,EACAkB,EACAxP,EACA3vC,EACA+T,EACAn2H,GAEA,IAAIwhK,EACJ,MAAMjvE,EAAQgsE,GACZK,EAAUQ,cACViB,GAEI7B,EAAgBH,GAA6B9rE,EAAO+rD,MAC1D,GAAqB,MAAjBkgB,EACFgD,EAAYhD,MACP,IAA0B,MAAtB+C,EAIT,MAAO,GAHPC,EAAY9C,GAAmBnsE,EAAOgvE,EAG5B,CAGZ,GADAC,EAAYA,EAAU9T,UAAU1tJ,GAC3BwhK,EAAUxlK,WAAcwlK,EAAU/V,aAerC,MAAO,GAf4C,CACnD,MAAMgW,EAAQ,GACR/Y,EAAM1oJ,EAAMunJ,aACZ8I,EAAOl6B,EACRqrC,EAA2BzW,uBAAuBgH,EAAW/xJ,GAC7DwhK,EAA2B1W,gBAAgBiH,EAAW/xJ,GAC3D,IAAI6J,EAAOwmJ,EAAK1H,UAChB,MAAO9+I,GAAQ43J,EAAMrxK,OAASgyH,EACC,IAAzBsmC,EAAI7+I,EAAMkoJ,IACZ0P,EAAM3uK,KAAK+W,GAEbA,EAAOwmJ,EAAK1H,UAEd,OAAO8Y,CAAM,CAIjB,CAAC,SAEe1D,KACd,MAAO,CACLqB,cAAe5B,GAAcE,QAC7ByB,UAAW,GACXD,aAAc,EAElB,CAgCM,SAAUwC,GACdC,EACArB,EACAC,EACAC,GAEA,OAAOJ,GACLuB,EAAa/C,UACb+C,EAAatB,SACbC,EACAC,EACAC,EAEJ,CAOgB,SAAAoB,GACdD,EACAd,GAEA,OAAOD,GACLe,EAAa/C,UACb+C,EAAatB,SACbQ,EAEJ,CAkBM,SAAUgB,GACdF,EACA38I,EACAi8I,EACAC,GAEA,OAAOF,GACLW,EAAa/C,UACb+C,EAAatB,SACbr7I,EACAi8I,EACAC,EAEJ,CAQgB,SAAAY,GACdH,EACA38I,GAEA,OAAOq8I,GACLM,EAAa/C,UACb5f,GAAU2iB,EAAatB,SAAUr7I,GAErC,CAMgB,SAAA+8I,GACdJ,EACAJ,EACAxP,EACA3vC,EACA+T,EACAn2H,GAEA,OAAOshK,GACLK,EAAa/C,UACb+C,EAAatB,SACbkB,EACAxP,EACA3vC,EACA+T,EACAn2H,EAEJ,CAKG,SACagiK,GACdL,EACAzK,EACA+K,GAEA,OAAOb,GACLO,EAAa/C,UACb+C,EAAatB,SACbnJ,EACA+K,EAEJ,CAKgB,SAAAC,GACdP,EACAtV,GAEA,OAAO0S,GACL/f,GAAU2iB,EAAatB,SAAUhU,GACjCsV,EAAa/C,UAEjB,CAEgB,SAAAG,GACd/5I,EACA45I,GAEA,MAAO,CACLyB,SAAUr7I,EACV45I,YAEJ;;;;;;;;;;;;;;;;GCnyBG,MAYUuD,GAAb3uK,WAAAA,GACmB,KAAA4uK,UAAiC,IAAI/9J,GAAM,CAE5Dg+J,gBAAAA,CAAiBhI,GACf,MAAMviK,EAAOuiK,EAAOviK,KACdo/J,EAAWmD,EAAOhO,WACxB38J,EAAAA,EAAAA,IACiC,gBAA/BoI,GACmC,kBAAjCA,GACiC,kBAAjCA,EACF,8CAEFpI,EAAAA,EAAAA,IACe,cAAbwnK,EACA,mDAEF,MAAMoL,EAAY7wK,KAAK2wK,UAAUz/J,IAAIu0J,GACrC,GAAIoL,EAAW,CACb,MAAMC,EAAUD,EAAUxqK,KAC1B,GACiC,gBAA/BA,GACO,kBAAPyqK,EAEA9wK,KAAK2wK,UAAUt+J,IACbozJ,EACAnD,GACEmD,EACAmD,EAAOzG,aACP0O,EAAU1O,oBAGT,GAC4B,kBAAjC97J,GACO,gBAAPyqK,EAEA9wK,KAAK2wK,UAAUx/J,OAAOs0J,QACjB,GAC4B,kBAAjCp/J,GACO,kBAAPyqK,EAEA9wK,KAAK2wK,UAAUt+J,IACbozJ,EACApD,GAAmBoD,EAAUoL,EAAUtO,eAEpC,GAC4B,kBAAjCl8J,GACO,gBAAPyqK,EAEA9wK,KAAK2wK,UAAUt+J,IACbozJ,EACArD,GAAiBqD,EAAUmD,EAAOzG,mBAE/B,IAC4B,kBAAjC97J,GACO,kBAAPyqK,EAOA,MAAM1yK,EAAAA,EAAAA,IACJ,mCACEwqK,EACA,mBACAiI,GATJ7wK,KAAK2wK,UAAUt+J,IACbozJ,EACAnD,GAAmBmD,EAAUmD,EAAOzG,aAAc0O,EAAUtO,SAQ5D,CAAD,MAGHviK,KAAK2wK,UAAUt+J,IAAIozJ,EAAUmD,EAAO,CAIxCmI,UAAAA,GACE,OAAOxwK,MAAMw9B,KAAK/9B,KAAK2wK,UAAUp9J,SAAU;;;;;;;;;;;;;;;;SCnDlCy9J,GACXC,gBAAAA,CAAiBxL,GACf,OAAO,IAAK,CAEdyL,kBAAAA,CACE3iK,EACAgb,EACAm7G,GAEA,OAAO,IAAK,EAOT,MAAMysC,GAA2B,IAAIH,GAKzC,MACUI,GACXrvK,WAAAA,CACUsvK,EACAC,EACAC,EAAuC,MAFvC,KAAOF,QAAPA,EACA,KAAUC,WAAVA,EACA,KAAuBC,wBAAvBA,CAAuB,CAEjCN,gBAAAA,CAAiBxL,GACf,MAAMp1I,EAAOrwB,KAAKsxK,WAAW7I,WAC7B,GAAIp4I,EAAKg4I,mBAAmB5C,GAC1B,OAAOp1I,EAAK80I,UAAUxK,kBAAkB8K,GACnC,CACL,MAAM+L,EAC4B,MAAhCxxK,KAAKuxK,wBACD,IAAIzJ,GAAU9nK,KAAKuxK,yBAAyB,GAAM,GAClDvxK,KAAKsxK,WAAW3H,YACtB,OAAO4G,GAA8BvwK,KAAKqxK,QAAS5L,EAAU+L,EAAY,CAAD,CAG5EN,kBAAAA,CACE3iK,EACAgb,EACAm7G,GAEA,MAAMorC,EAC4B,MAAhC9vK,KAAKuxK,wBACDvxK,KAAKuxK,wBACLrH,GAA+BlqK,KAAKsxK,YACpCtB,EAAQM,GACZtwK,KAAKqxK,QACLvB,EACAvmJ,EACA,EACAm7G,EACAn2H,GAEF,OAAqB,IAAjByhK,EAAMrxK,OACD,KAEAqxK,EAAM,EAAE;;;;;;;;;;;;;;;;GClCL,SAAAyB,GACdC,EACA7H,IAEA5rK,EAAAA,EAAAA,IACE4rK,EAAUpB,WAAWtD,UAAUjJ,UAAUwV,EAAcr9J,OAAOs+I,YAC9D,2BAEF10J,EAAAA,EAAAA,IACE4rK,EAAUF,YAAYxE,UAAUjJ,UAAUwV,EAAcr9J,OAAOs+I,YAC/D,0BAEJ,CAEM,SAAUgf,GACdD,EACAE,EACAC,EACAC,EACAC,GAEA,MAAMC,EAAc,IAAItB,GACxB,IAAIhH,EAAcuI,EAClB,GAAIJ,EAAUxrK,OAASwgK,GAAcc,UAAW,CAC9C,MAAM93B,EAAYgiC,EACdhiC,EAAU/sI,OAAOikK,SACnB2C,EAAewI,GACbR,EACAE,EACA/hC,EAAUt8G,KACVs8G,EAAU+xB,KACVkQ,EACAC,EACAC,KAGF/zK,EAAAA,EAAAA,IAAO4xI,EAAU/sI,OAAOkkK,WAAY,mBAIpCiL,EACEpiC,EAAU/sI,OAAOmkK,QAChB2K,EAAajI,YAAYxB,eAAiBza,GAAY7d,EAAUt8G,MACnEm2I,EAAeyI,GACbT,EACAE,EACA/hC,EAAUt8G,KACVs8G,EAAU+xB,KACVkQ,EACAC,EACAE,EACAD,GACD,MAEE,GAAIH,EAAUxrK,OAASwgK,GAAcgB,MAAO,CACjD,MAAM/mE,EAAQ+wE,EACV/wE,EAAMh+F,OAAOikK,SACf2C,EAAe0I,GACbV,EACAE,EACA9wE,EAAMvtE,KACNutE,EAAM13E,SACN0oJ,EACAC,EACAC,KAGF/zK,EAAAA,EAAAA,IAAO6iG,EAAMh+F,OAAOkkK,WAAY,mBAEhCiL,EACEnxE,EAAMh+F,OAAOmkK,QAAU2K,EAAajI,YAAYxB,aAClDuB,EAAe2I,GACbX,EACAE,EACA9wE,EAAMvtE,KACNutE,EAAM13E,SACN0oJ,EACAC,EACAE,EACAD,GACD,MAEE,GAAIH,EAAUxrK,OAASwgK,GAAcU,eAAgB,CAC1D,MAAM+K,EAAeT,EAYnBnI,EAXG4I,EAAahL,OAWDiL,GACbb,EACAE,EACAU,EAAa/+I,KACbu+I,EACAC,EACAC,GAhBaQ,GACbd,EACAE,EACAU,EAAa/+I,KACb++I,EAAajL,aACbyK,EACAC,EACAC,EAUD,KAEE,IAAIH,EAAUxrK,OAASwgK,GAAc4L,gBAS1C,MAAMr0K,EAAAA,EAAAA,IAAe,2BAA6ByzK,EAAUxrK,MAR5DqjK,EAAegJ,GACbhB,EACAE,EACAC,EAAUt+I,KACVu+I,EACAE,EAGgE,CAEpE,MAAMxJ,EAAUwJ,EAAYjB,aAE5B,OADA4B,GAAgCf,EAAclI,EAAclB,GACrD,CAAEqB,UAAWH,EAAclB,UACpC,CAEA,SAASmK,GACPf,EACAlI,EACAsI,GAEA,MAAMlI,EAAYJ,EAAajB,WAC/B,GAAIqB,EAAU5B,qBAAsB,CAClC,MAAM0K,EACJ9I,EAAU3E,UAAUnL,cAAgB8P,EAAU3E,UAAU56J,UACpDsoK,EAAkB5I,GAA8B2H,IAEpDI,EAAYrzK,OAAS,IACpBizK,EAAanJ,WAAWP,sBACxB0K,IAAkB9I,EAAU3E,UAAUhJ,OAAO0W,KAC7C/I,EAAU3E,UAAUlL,cAAckC,OAAO0W,EAAgB5Y,iBAE1D+X,EAAY3wK,KACV6gK,GAAY+H,GAA8BP,IAC3C,CAGP,CAEA,SAASoJ,GACPpB,EACA7H,EACAkJ,EACAjB,EACAhvK,EACAkvK,GAEA,MAAMgB,EAAenJ,EAAUpB,WAC/B,GAA2D,MAAvD4H,GAA2ByB,EAAaiB,GAE1C,OAAOlJ,EACF,CACL,IAAIoJ,EAAezB,EACnB,GAAI9jB,GAAYqlB,GAMd,IAJA90K,EAAAA,EAAAA,IACE4rK,EAAUF,YAAYzB,qBACtB,8DAEE2B,EAAUF,YAAYxB,aAAc,CAItC,MAAMwB,EAAcO,GAA+BL,GAC7CwF,EACJ1F,aAAuBvK,GACnBuK,EACAvK,GAAa3H,WACbyb,EAAwB/C,GAC5B2B,EACAzC,GAEF4D,EAAgBvB,EAAcr9J,OAAO8+J,eACnCtJ,EAAUpB,WAAWtD,UACrB+N,EACAlB,EACA,KACG,CACL,MAAMoB,EAAenD,GACnB6B,EACA5H,GAA+BL,IAEjCoJ,EAAgBvB,EAAcr9J,OAAO8+J,eACnCtJ,EAAUpB,WAAWtD,UACrBiO,EACApB,EACA,KAEC,CACL,MAAMvM,EAAW3Y,GAAaimB,GAC9B,GAAiB,cAAbtN,EAA0B,EAC5BxnK,EAAAA,EAAAA,IACgC,IAA9B8uJ,GAAcgmB,GACd,yDAEF,MAAMM,EAAeL,EAAa7N,UAClCqM,EAAa3H,EAAUF,YAAYxE,UAEnC,MAAMmO,EAAkBlD,GACtB0B,EACAiB,EACAM,EACA7B,GAGAyB,EADqB,MAAnBK,EACc5B,EAAcr9J,OAAOomJ,eACnC4Y,EACAC,GAIcN,EAAa7N,SAAS,KAEnC,CACL,MAAMoO,EAAkBvmB,GAAa+lB,GAErC,IAAIS,EACJ,GAAIR,EAAa3K,mBAAmB5C,GAAW,CAC7C+L,EAAa3H,EAAUF,YAAYxE,UACnC,MAAMsO,EACJrD,GACE0B,EACAiB,EACAC,EAAa7N,UACbqM,GAGFgC,EADsB,MAApBC,EACcT,EACb7N,UACAxK,kBAAkB8K,GAClBtK,YAAYoY,EAAiBE,GAGhBT,EAAa7N,UAAUxK,kBAAkB8K,EAAS,MAGpE+N,EAAgBjD,GACduB,EACArM,EACAoE,EAAUF,aAIZsJ,EADmB,MAAjBO,EACc9B,EAAcr9J,OAAO8mJ,YACnC6X,EAAa7N,UACbM,EACA+N,EACAD,EACAzwK,EACAkvK,GAIcgB,EAAa7N,SAAS,EAI5C,OAAOyE,GACLC,EACAoJ,EACAD,EAAa9K,sBAAwBxa,GAAYqlB,GACjDrB,EAAcr9J,OAAOq/J,eACrB,CAEN,CAEA,SAASvB,GACPT,EACAE,EACAmB,EACAY,EACA7B,EACAC,EACAE,EACAD,GAEA,MAAM4B,EAAgBhC,EAAajI,YACnC,IAAIkK,EACJ,MAAMC,EAAe7B,EACjBP,EAAcr9J,OACdq9J,EAAcr9J,OAAO0/J,mBACzB,GAAIrmB,GAAYqlB,GACdc,EAAiBC,EAAaX,eAC5BS,EAAczO,UACdwO,EACA,WAEG,GAAIG,EAAaJ,iBAAmBE,EAAczL,aAAc,CAErE,MAAM6L,EAAgBJ,EACnBzO,UACAhK,YAAY4X,EAAYY,GAC3BE,EAAiBC,EAAaX,eAC5BS,EAAczO,UACd6O,EACA,KACA,KACG,CACL,MAAMvO,EAAW3Y,GAAaimB,GAC9B,IACGa,EAAcxL,kBAAkB2K,IACjChmB,GAAcgmB,GAAc,EAG5B,OAAOnB,EAET,MAAM2B,EAAkBvmB,GAAa+lB,GAC/B/X,EAAY4Y,EAAczO,UAAUxK,kBAAkB8K,GACtDvK,EAAeF,EAAUG,YAAYoY,EAAiBI,GAE1DE,EADe,cAAbpO,EACeqO,EAAarZ,eAC5BmZ,EAAczO,UACdjK,GAGe4Y,EAAa3Y,YAC5ByY,EAAczO,UACdM,EACAvK,EACAqY,EACApC,GACA,KACD,CAGL,MAAMzH,EAAeK,GACnB6H,EACAiC,EACAD,EAAc1L,sBAAwBxa,GAAYqlB,GAClDe,EAAaJ,gBAET5wK,EAAS,IAAIsuK,GACjBU,EACApI,EACAqI,GAEF,OAAOe,GACLpB,EACAhI,EACAqJ,EACAjB,EACAhvK,EACAkvK,EAEJ,CAEA,SAASE,GACPR,EACAE,EACAmB,EACAY,EACA7B,EACAC,EACAC,GAEA,MAAMgB,EAAepB,EAAanJ,WAClC,IAAIiB,EAAcuJ,EAClB,MAAMnwK,EAAS,IAAIsuK,GACjBU,EACAF,EACAG,GAEF,GAAIrkB,GAAYqlB,GACdE,EAAgBvB,EAAcr9J,OAAO8+J,eACnCvB,EAAanJ,WAAWtD,UACxBwO,EACA3B,GAEFtI,EAAeE,GACbgI,EACAqB,GACA,EACAvB,EAAcr9J,OAAOq/J,oBAElB,CACL,MAAMjO,EAAW3Y,GAAaimB,GAC9B,GAAiB,cAAbtN,EACFwN,EAAgBvB,EAAcr9J,OAAOomJ,eACnCmX,EAAanJ,WAAWtD,UACxBwO,GAEFjK,EAAeE,GACbgI,EACAqB,EACAD,EAAa9K,qBACb8K,EAAa7K,kBAEV,CACL,MAAMoL,EAAkBvmB,GAAa+lB,GAC/B/7I,EAAWg8I,EAAa7N,UAAUxK,kBAAkB8K,GAC1D,IAAIsF,EACJ,GAAIrd,GAAY6lB,GAEdxI,EAAW4I,MACN,CACL,MAAM3Y,EAAYl4J,EAAOmuK,iBAAiBxL,GAQtCsF,EAPa,MAAb/P,EAEiC,cAAjC/N,GAAYsmB,IACZvY,EAAUH,SAASxN,GAAWkmB,IAAkBhpK,UAIrCywJ,EAEAA,EAAUG,YAAYoY,EAAiBI,GAIzCvU,GAAa3H,UAAU,CAGtC,GAAKzgI,EAASmlI,OAAO4O,GAgBnBrB,EAAekI,MAhBe,CAC9B,MAAMqC,EAAevC,EAAcr9J,OAAO8mJ,YACxC6X,EAAa7N,UACbM,EACAsF,EACAwI,EACAzwK,EACAkvK,GAEFtI,EAAeE,GACbgI,EACAqC,EACAjB,EAAa9K,qBACbwJ,EAAcr9J,OAAOq/J,eACrB,CAEyB,EAIjC,OAAOhK,CACT,CAEA,SAASwK,GACPrK,EACApE,GAEA,OAAOoE,EAAUpB,WAAWJ,mBAAmB5C,EACjD,CAEA,SAAS2M,GACPV,EACA7H,EACAt2I,EACA4gJ,EACArC,EACAnI,EACAqI,GAQA,IAAIoC,EAAevK,EA+BnB,OA9BAsK,EAAgBvI,SAAQ,CAAClB,EAAc1P,KACrC,MAAMyT,EAAYlhB,GAAUh6H,EAAMm3I,GAC9BwJ,GAA2BrK,EAAW/c,GAAa2hB,MACrD2F,EAAelC,GACbR,EACA0C,EACA3F,EACAzT,EACA8W,EACAnI,EACAqI,GACA,IAINmC,EAAgBvI,SAAQ,CAAClB,EAAc1P,KACrC,MAAMyT,EAAYlhB,GAAUh6H,EAAMm3I,GAC7BwJ,GAA2BrK,EAAW/c,GAAa2hB,MACtD2F,EAAelC,GACbR,EACA0C,EACA3F,EACAzT,EACA8W,EACAnI,EACAqI,GACA,IAICoC,CACT,CAEA,SAASC,GACP3C,EACArhJ,EACAywE,GAKA,OAHAA,EAAM8qE,SAAQ,CAAClB,EAAc1P,KAC3B3qI,EAAOA,EAAK8qI,YAAYuP,EAAc1P,EAAU,IAE3C3qI,CACT,CAEA,SAASgiJ,GACPX,EACA7H,EACAt2I,EACA4gJ,EACArC,EACAnI,EACAsI,EACAD,GAIA,GACEnI,EAAUF,YAAYxE,UAAU56J,YAC/Bs/J,EAAUF,YAAYzB,qBAEvB,OAAO2B,EAST,IACIyK,EADAF,EAAevK,EAGjByK,EADE5mB,GAAYn6H,GACE4gJ,EAEA,IAAI9J,GAAoB,MAAMW,QAC5Cz3I,EACA4gJ,GAGJ,MAAM3C,EAAa3H,EAAUF,YAAYxE,UAiDzC,OAhDAmP,EAAclrJ,SAASuuI,kBAAiB,CAAC8N,EAAU7H,KACjD,GAAI4T,EAAW1W,SAAS2K,GAAW,CACjC,MAAM8O,EAAc1K,EAAUF,YAC3BxE,UACAxK,kBAAkB8K,GACfsF,EAAWsJ,GACf3C,EACA6C,EACA3W,GAEFwW,EAAejC,GACbT,EACA0C,EACA,IAAI7nB,GAAKkZ,GACTsF,EACA+G,EACAnI,EACAsI,EACAD,EACA,KAGNsC,EAAclrJ,SAASuuI,kBAAiB,CAAC8N,EAAU+O,KACjD,MAAMC,GACH5K,EAAUF,YAAYtB,mBAAmB5C,IACjB,OAAzB+O,EAAe9xK,MACjB,IAAK8uK,EAAW1W,SAAS2K,KAAcgP,EAAoB,CACzD,MAAMF,EAAc1K,EAAUF,YAC3BxE,UACAxK,kBAAkB8K,GACfsF,EAAWsJ,GACf3C,EACA6C,EACAC,GAEFJ,EAAejC,GACbT,EACA0C,EACA,IAAI7nB,GAAKkZ,GACTsF,EACA+G,EACAnI,EACAsI,EACAD,EACA,KAICoC,CACT,CAEA,SAAS5B,GACPd,EACA7H,EACA6K,EACArN,EACAyK,EACAC,EACAC,GAEA,GAAwD,MAApD3B,GAA2ByB,EAAa4C,GAC1C,OAAO7K,EAIT,MAAMoI,EAAmBpI,EAAUF,YAAYxB,aAIzCwB,EAAcE,EAAUF,YAC9B,GAA0B,MAAtBtC,EAAa3kK,MAAe,CAE9B,GACGgrJ,GAAYgnB,IAAY/K,EAAYzB,sBACrCyB,EAAYvB,kBAAkBsM,GAE9B,OAAOvC,GACLT,EACA7H,EACA6K,EACA/K,EAAYxE,UAAUtK,SAAS6Z,GAC/B5C,EACAC,EACAE,EACAD,GAEG,GAAItkB,GAAYgnB,GAAU,CAG/B,IAAIP,EAAkB,IAAI9J,GAAoB,MAI9C,OAHAV,EAAYxE,UAAU7J,aAAa3E,IAAW,CAAC30J,EAAMquB,KACnD8jJ,EAAkBA,EAAgB9hK,IAAI,IAAIk6I,GAAKvqJ,GAAOquB,EAAK,IAEtDgiJ,GACLX,EACA7H,EACA6K,EACAP,EACArC,EACAC,EACAE,EACAD,EACA,CAEF,OAAOnI,CAAS,CAEb,CAEL,IAAIsK,EAAkB,IAAI9J,GAAoB,MAU9C,OATAhD,EAAauE,SAAQ,CAAC+I,EAAWjyK,KAC/B,MAAMkyK,EAAkBrnB,GAAUmnB,EAASC,GACvChL,EAAYvB,kBAAkBwM,KAChCT,EAAkBA,EAAgB9hK,IAChCsiK,EACAhL,EAAYxE,UAAUtK,SAAS+Z,IAC/B,IAGCvC,GACLX,EACA7H,EACA6K,EACAP,EACArC,EACAC,EACAE,EACAD,EACA,CAEN,CAEA,SAASU,GACPhB,EACA7H,EACAt2I,EACAu+I,EACAE,GAEA,MAAM6C,EAAgBhL,EAAUF,YAC1BD,EAAeK,GACnBF,EACAgL,EAAc1P,UACd0P,EAAc3M,sBAAwBxa,GAAYn6H,GAClDshJ,EAAc1M,cAEhB,OAAO2K,GACLpB,EACAhI,EACAn2I,EACAu+I,EACAX,GACAa,EAEJ,CAEA,SAASO,GACPb,EACA7H,EACAt2I,EACAu+I,EACAjD,EACAmD,GAEA,IAAI3vF,EACJ,GAAqD,MAAjDguF,GAA2ByB,EAAav+I,GAC1C,OAAOs2I,EACF,CACL,MAAM/mK,EAAS,IAAIsuK,GACjBU,EACAjI,EACAgF,GAEIiG,EAAgBjL,EAAUpB,WAAWtD,UAC3C,IAAI8N,EACJ,GAAIvlB,GAAYn6H,IAAgC,cAAvBu5H,GAAav5H,GAAuB,CAC3D,IAAIgc,EACJ,GAAIs6H,EAAUF,YAAYzB,qBACxB34H,EAAU0gI,GACR6B,EACA5H,GAA+BL,QAE5B,CACL,MAAMkL,EAAiBlL,EAAUF,YAAYxE,WAC7ClnK,EAAAA,EAAAA,IACE82K,aAA0B3V,GAC1B,iDAEF7vH,EAAU4gI,GACR2B,EACAiD,EACA,CAGJ9B,EAAgBvB,EAAcr9J,OAAO8+J,eACnC2B,EACAvlI,EACAyiI,EACA,KACG,CACL,MAAMvM,EAAW3Y,GAAav5H,GAC9B,IAAIw3I,EAAWwF,GACbuB,EACArM,EACAoE,EAAUF,aAGE,MAAZoB,GACAlB,EAAUF,YAAYtB,mBAAmB5C,KAEzCsF,EAAW+J,EAAcna,kBAAkB8K,IAG3CwN,EADc,MAAZlI,EACc2G,EAAcr9J,OAAO8mJ,YACnC2Z,EACArP,EACAsF,EACA/d,GAAaz5H,GACbzwB,EACAkvK,GAEOnI,EAAUpB,WAAWtD,UAAUrK,SAAS2K,GAEjCiM,EAAcr9J,OAAO8mJ,YACnC2Z,EACArP,EACArG,GAAa3H,WACbzK,GAAaz5H,GACbzwB,EACAkvK,GAGc8C,EAGhB7B,EAAc1oK,WACds/J,EAAUF,YAAYzB,uBAGtB7lF,EAAW4tF,GACT6B,EACA5H,GAA+BL,IAE7BxnF,EAAS23E,eACXiZ,EAAgBvB,EAAcr9J,OAAO8+J,eACnCF,EACA5wF,EACA2vF,IACD,CAOP,OAHA3vF,EACEwnF,EAAUF,YAAYzB,sBACqC,MAA3DmI,GAA2ByB,EAAajlB,MACnC+c,GACLC,EACAoJ,EACA5wF,EACAqvF,EAAcr9J,OAAOq/J,eACrB,CAEN;;;;;;;;;;;;;;;;GC7vBgB,SAAAsB,GACdC,EACA1hJ,GAEA,MAAM/N,EAAQ0kJ,GAA+B+K,EAAK3D,YAClD,OAAI9rJ,IAIAyvJ,EAAKviD,MAAMq/B,aAAaE,iBACtBvE,GAAYn6H,KACX/N,EAAMm1I,kBAAkB7N,GAAav5H,IAAOhpB,WAExCib,EAAMq1I,SAAStnI,GAGnB,IACT,CA4DM,SAAU2hJ,GACdD,EACApD,EACAC,EACAjD,GAGEgD,EAAUxrK,OAASwgK,GAAcgB,OACJ,OAA7BgK,EAAU/uK,OAAO+uJ,WAEjB5zJ,EAAAA,EAAAA,IACEisK,GAA+B+K,EAAK3D,YACpC,8DAEFrzK,EAAAA,EAAAA,IACEgsK,GAA8BgL,EAAK3D,YACnC,4DAIJ,MAAMM,EAAeqD,EAAK3D,WACpBnpK,EAASwpK,GACbsD,EAAKE,WACLvD,EACAC,EACAC,EACAjD,GAYF,OAVA4C,GAA2BwD,EAAKE,WAAYhtK,EAAO0hK,YAEnD5rK,EAAAA,EAAAA,IACEkK,EAAO0hK,UAAUF,YAAYzB,uBAC1B0J,EAAajI,YAAYzB,qBAC5B,2DAGF+M,EAAK3D,WAAanpK,EAAO0hK,UAElBuL,GACLH,EACA9sK,EAAOqgK,QACPrgK,EAAO0hK,UAAUpB,WAAWtD,UAC5B,KAEJ,CAyBA,SAASiQ,GACPH,EACAzM,EACAC,EACA4M,GAEA,MAAMvM,EAAgBuM,EAClB,CAACA,GACDJ,EAAKK,oBACT,OAAOhN,GACL2M,EAAKM,gBACL/M,EACAC,EACAK,EAEJ;;;;;;;;;;;;;;;;GCvOA,IAAI0M,GC6BAC,GDPE,SAAUC,GACdl4J,IAEAvf,EAAAA,EAAAA,KACGu3K,GACD,mDAEFA,GAAuBh4J,CACzB,CAWM,SAAUm4J,GACdC,EACA/D,EACAC,EACA+D,GAEA,MAAMhkB,EAAUggB,EAAU/uK,OAAO+uJ,QACjC,GAAgB,OAAZA,EAAkB,CACpB,MAAMojB,EAAOW,EAAUE,MAAM5kK,IAAI2gJ,GAEjC,OADA5zJ,EAAAA,EAAAA,IAAe,MAARg3K,EAAc,gDACdC,GACLD,EACApD,EACAC,EACA+D,EACA,CACG,CACL,IAAI/jG,EAAkB,GAEtB,IAAK,MAAMmjG,KAAQW,EAAUE,MAAMviK,SACjCu+D,EAASA,EAAO7oD,OACdisJ,GAAmBD,EAAMpD,EAAWC,EAAa+D,IAIrD,OAAO/jG,CAAO,CAElB,CA8JgB,SAAAikG,GACdH,EACAriJ,GAEA,IAAIo2I,EAA2B,KAC/B,IAAK,MAAMsL,KAAQW,EAAUE,MAAMviK,SACjCo2J,EAAcA,GAAeqL,GAA2BC,EAAM1hJ,GAEhE,OAAOo2I,CACT,CC5MM,SAAUqM,GACdx4J,IAEAvf,EAAAA,EAAAA,KACGw3K,GACD,mDAEFA,GAAuBj4J,CACzB,CA+CG,MACUy4J,GAkBXl0K,WAAAA,CAAmBm0K,GAAA,KAAeA,gBAAfA,EAdnB,KAAAC,eAA2C,IAAI9L,GAAyB,MAKxE,KAAiB+L,kBAAc9J,KAEtB,KAAA+J,cAAqC,IAAIzjK,IACzC,KAAA0jK,cAAqC,IAAI1jK,GAAM,EAcpD,SAAU2jK,GACdC,EACAjjJ,EACAkjJ,EACAjJ,EACA5e,GAWA,OARA2e,GACEiJ,EAASJ,kBACT7iJ,EACAkjJ,EACAjJ,EACA5e,GAGGA,EAGI8nB,GACLF,EACA,IAAI9O,GAAUZ,KAA0BvzI,EAAMkjJ,IAJzC,EAOX,CA8BM,SAAUE,GACdH,EACAhJ,EACAlG,GAAkB,GAElB,MAAMrwG,EAAQ22G,GAAkB4I,EAASJ,kBAAmB5I,GACtDoJ,EAAmB/I,GACvB2I,EAASJ,kBACT5I,GAEF,GAAKoJ,EAEE,CACL,IAAIvP,EAAe,IAAIgD,GAAuB,MAS9C,OARkB,MAAdpzG,EAAM2qG,KAERyF,EAAeA,EAAah1J,IAAIw6I,MAAgB,GAEhDh1E,EAAK5gB,EAAM7tC,UAAW6hI,IACpBoc,EAAeA,EAAah1J,IAAI,IAAIk6I,GAAKtB,IAAa,EAAK,IAGxDyrB,GACLF,EACA,IAAIpP,GAAanwG,EAAM1jC,KAAM8zI,EAAcC,GAC3C,CAdF,MAAO,EAgBX,CAMG,SACauP,GACdL,EACAjjJ,EACAkjJ,GAEA,OAAOC,GACLF,EACA,IAAI9O,GAAUR,KAA4B3zI,EAAMkjJ,GAEpD,CAMG,SACaK,GACdN,EACAjjJ,EACA4gJ,GAEA,MAAM4C,EAAa1M,GAAcC,WAAW6J,GAE5C,OAAOuC,GACLF,EACA,IAAI5O,GAAMV,KAA4B3zI,EAAMwjJ,GAEhD,CA0KM,SAAUC,GACdR,EACAjjJ,EACAquI,EACAvgH,GAEA,MAAM41H,EAAWC,GAAwBV,EAAUn1H,GACnD,GAAgB,MAAZ41H,EAAkB,CACpB,MAAMp7J,EAAIs7J,GAAuBF,GAC3BG,EAAYv7J,EAAE0X,KAClBs+H,EAAUh2I,EAAEg2I,QACR6Y,EAAe/c,GAAgBypB,EAAW7jJ,GAC1C8jJ,EAAK,IAAI3P,GACbP,GAAoCtV,GACpC6Y,EACA9I,GAEF,OAAO0V,GAA8Bd,EAAUY,EAAWC,EAAI,CAG9D,MAAO,EAEX,CAOM,SAAUE,GACdf,EACAjjJ,EACA4gJ,EACA9yH,GAEA,MAAM41H,EAAWC,GAAwBV,EAAUn1H,GACnD,GAAI41H,EAAU,CACZ,MAAMp7J,EAAIs7J,GAAuBF,GAC3BG,EAAYv7J,EAAE0X,KAClBs+H,EAAUh2I,EAAEg2I,QACR6Y,EAAe/c,GAAgBypB,EAAW7jJ,GAC1CwjJ,EAAa1M,GAAcC,WAAW6J,GACtCkD,EAAK,IAAIzP,GACbT,GAAoCtV,GACpC6Y,EACAqM,GAEF,OAAOO,GAA8Bd,EAAUY,EAAWC,EAAI,CAG9D,MAAO,EAEX,CAgGG,SACaG,GACdhB,EACAjjJ,EACAu7I,GAEA,MAAM2I,GAAoB,EACpBtK,EAAYqJ,EAASJ,kBACrBzM,EAAc6M,EAASL,eAAe7K,WAC1C/3I,GACA,CAAC63I,EAAWwK,KACV,MAAMlL,EAAe/c,GAAgByd,EAAW73I,GAC1Co2I,EAAcoM,GAClBH,EACAlL,GAEF,GAAIf,EACF,OAAOA,CAAY,IAIzB,OAAOgF,GACLxB,EACA55I,EACAo2I,EACAmF,EACA2I,EAEJ,CAsDA,SAASf,GACPF,EACA3E,GAEA,OAAO6F,GACL7F,EACA2E,EAASL,eACQ,KACjB9I,GAAqBmJ,EAASJ,kBAAmBvpB,MAErD,CAKA,SAAS6qB,GACP7F,EACA8F,EACAhO,EACAmI,GAEA,GAAIpkB,GAAYmkB,EAAUt+I,MACxB,OAAOqkJ,GACL/F,EACA8F,EACAhO,EACAmI,GAEG,CACL,MAAM8D,EAAY+B,EAAczmK,IAAI27I,MAGjB,MAAf8c,GAAoC,MAAbiM,IACzBjM,EAAcoM,GAAgCH,EAAW/oB,OAG3D,IAAI/6E,EAAkB,GACtB,MAAM8oF,EAAY9N,GAAa+kB,EAAUt+I,MACnCskJ,EAAiBhG,EAAUrK,kBAAkB5M,GAC7CgD,EAAY+Z,EAAcvuJ,SAASlY,IAAI0pJ,GAC7C,GAAIgD,GAAaia,EAAgB,CAC/B,MAAMC,EAAmBnO,EACrBA,EAAYhP,kBAAkBC,GAC9B,KACEmd,EAAmBtH,GAAkBqB,EAAalX,GACxD9oF,EAASA,EAAO7oD,OACdyuJ,GACEG,EACAja,EACAka,EACAC,GAEF,CASJ,OANInC,IACF9jG,EAASA,EAAO7oD,OACd0sJ,GAAwBC,EAAW/D,EAAWC,EAAanI,KAIxD73F,CAAO,CAElB,CAKA,SAAS8lG,GACP/F,EACA8F,EACAhO,EACAmI,GAEA,MAAM8D,EAAY+B,EAAczmK,IAAI27I,MAGjB,MAAf8c,GAAoC,MAAbiM,IACzBjM,EAAcoM,GAAgCH,EAAW/oB,OAG3D,IAAI/6E,EAAkB,GAyBtB,OAxBA6lG,EAAcvuJ,SAASuuI,kBAAiB,CAACiD,EAAWgD,KAClD,MAAMka,EAAmBnO,EACrBA,EAAYhP,kBAAkBC,GAC9B,KACEmd,EAAmBtH,GAAkBqB,EAAalX,GAClDid,EAAiBhG,EAAUrK,kBAAkB5M,GAC/Cid,IACF/lG,EAASA,EAAO7oD,OACd2uJ,GACEC,EACAja,EACAka,EACAC,IAEF,IAIFnC,IACF9jG,EAASA,EAAO7oD,OACd0sJ,GAAwBC,EAAW/D,EAAWC,EAAanI,KAIxD73F,CACT,CAyDA,SAASolG,GACPV,EACAn1H,GAEA,OAAOm1H,EAASH,cAAcnlK,IAAImwC,EACpC,CAKA,SAAS81H,GAAuBF,GAI9B,MAAMe,EAAaf,EAASt0J,QAAQ,KAKpC,OAJA1kB,EAAAA,EAAAA,KACkB,IAAhB+5K,GAAqBA,EAAaf,EAASt4K,OAAS,EACpD,iBAEK,CACLkzJ,QAASolB,EAAS1+B,OAAOy/B,EAAa,GACtCzkJ,KAAM,IAAIg5H,GAAK0qB,EAAS1+B,OAAO,EAAGy/B,IAEtC,CAKA,SAASV,GACPd,EACAY,EACAvF,GAEA,MAAM+D,EAAYY,EAASL,eAAejlK,IAAIkmK,IAC9Cn5K,EAAAA,EAAAA,IAAO23K,EAAW,wDAClB,MAAM9D,EAAczE,GAClBmJ,EAASJ,kBACTgB,GAEF,OAAOzB,GAAwBC,EAAW/D,EAAWC,EAAa,KACpE;;;;;;;;;;;;;;;;;ACn0BA,MAAMmG,GACJl2K,WAAAA,CAAqBgmK,GAAA,KAAKA,MAALA,CAAK,CAE1BpN,iBAAAA,CAAkBC,GAChB,MAAMrxI,EAAQvpB,KAAK+nK,MAAMpN,kBAAkBC,GAC3C,OAAO,IAAIqd,GAAsB1uJ,EAAO,CAG1C8G,IAAAA,GACE,OAAOrwB,KAAK+nK,KAAM,EAItB,MAAMmQ,GAIJn2K,WAAAA,CAAYy0K,EAAoBjjJ,GAC9BvzB,KAAKm4K,UAAY3B,EACjBx2K,KAAKo4K,MAAQ7kJ,CAAK,CAGpBonI,iBAAAA,CAAkBC,GAChB,MAAM2P,EAAYhd,GAAUvtJ,KAAKo4K,MAAOxd,GACxC,OAAO,IAAIsd,GAAsBl4K,KAAKm4K,UAAW5N,EAAW,CAG9Dl6I,IAAAA,GACE,OAAOmnJ,GAA+Bx3K,KAAKm4K,UAAWn4K,KAAKo4K,MAAO,EAO/D,MAAMC,GAAqB,SAChC9kK,GAMA,OAFAA,EAASA,GAAU,CAAC,EACpBA,EAAO,aAAeA,EAAO,eAAgB,IAAIvQ,MAAOE,UACjDqQ,CACT,EAMa+kK,GAA2B,SACtC51K,EACA61K,EACAC,GAEA,OAAK91K,GAA0B,kBAAVA,IAGrBzE,EAAAA,EAAAA,IAAO,QAASyE,EAAO,6CAEK,kBAAjBA,EAAM,OACR+1K,GAA2B/1K,EAAM,OAAQ61K,EAAaC,GAC5B,kBAAjB91K,EAAM,OACfg2K,GAA4Bh2K,EAAM,OAAQ61K,QAEjDt6K,EAAAA,EAAAA,KAAO,EAAO,4BAA8B+F,KAAKoD,UAAU1E,EAAO,KAAM,KATjEA,CAWX,EAEM+1K,GAA6B,SACjCpB,EACAtrI,EACAysI,GAEA,OAAQnB,GACN,IAAK,YACH,OAAOmB,EAAa,aACtB,SACEv6K,EAAAA,EAAAA,KAAO,EAAO,4BAA8Bo5K,GAElD,EAEMqB,GAA8B,SAClCrB,EACAtrI,EACA4sI,GAEKtB,EAAGj0K,eAAe,eACrBnF,EAAAA,EAAAA,KAAO,EAAO,4BAA8B+F,KAAKoD,UAAUiwK,EAAI,KAAM,IAEvE,MAAMriD,EAAQqiD,EAAG,aACI,kBAAVriD,IACT/2H,EAAAA,EAAAA,KAAO,EAAO,+BAAiC+2H,GAGjD,MAAM4jD,EAAe7sI,EAAS1b,OAO9B,IANApyB,EAAAA,EAAAA,IACmB,OAAjB26K,GAAiD,qBAAjBA,EAChC,+CAIGA,EAAa5e,aAChB,OAAOhlC,EAGT,MAAM6jD,EAAOD,EACPL,EAAcM,EAAKnpH,WACzB,MAA2B,kBAAhB6oH,EACFvjD,EAIFujD,EAAcvjD,CACvB,EASa8jD,GAA2B,SACtCvlJ,EACAlD,EACAmmJ,EACAgC,GAEA,OAAOO,GACL1oJ,EACA,IAAI6nJ,GAAsB1B,EAAUjjJ,GACpCilJ,EAEJ,EAOaQ,GAA+B,SAC1C3oJ,EACA0b,EACAysI,GAEA,OAAOO,GACL1oJ,EACA,IAAI4nJ,GAAsBlsI,GAC1BysI,EAEJ,EAEA,SAASO,GACP1oJ,EACAkoJ,EACAC,GAEA,MAAMS,EAAS5oJ,EAAK4pI,cAAcz8I,MAM5Bq8I,EAAWye,GACfW,EACAV,EAAY5d,kBAAkB,aAC9B6d,GAEF,IAAIjpI,EAEJ,GAAIlf,EAAK2pI,aAAc,CACrB,MAAMkf,EAAW7oJ,EACX3tB,EAAQ41K,GACZY,EAASxpH,WACT6oH,EACAC,GAEF,OACE91K,IAAUw2K,EAASxpH,YACnBmqG,IAAaqf,EAASjf,cAAcz8I,MAE7B,IAAI68I,GAAS33J,EAAOu+J,GAAapH,IAEjCxpI,CAAI,CAER,CACL,MAAM8oJ,EAAe9oJ,EAerB,OAdAkf,EAAU4pI,EACNtf,IAAasf,EAAalf,cAAcz8I,QAC1C+xB,EAAUA,EAAQkrH,eAAe,IAAIJ,GAASR,KAEhDsf,EAAa7d,aAAaoB,IAAgB,CAAC9B,EAAWI,KACpD,MAAME,EAAe6d,GACnB/d,EACAud,EAAY5d,kBAAkBC,GAC9B4d,GAEEtd,IAAiBF,IACnBzrH,EAAUA,EAAQ0rH,qBAAqBL,EAAWM,GAAc,IAG7D3rH,CAAQ,CAEnB;;;;;;;;;;;;;;;;GC/MG,MACU6pI,GAMXr3K,WAAAA,CACWC,EAAe,GACfsM,EAAyB,KAC3B+hB,EAAoB,CAAEjH,SAAU,CAAC,EAAGiwJ,WAAY,IAF9C,KAAIr3K,KAAJA,EACA,KAAMsM,OAANA,EACF,KAAI+hB,KAAJA,CAAI,EAUC,SAAAipJ,GAAezT,EAAe0T,GAE5C,IAAIhmJ,EAAOgmJ,aAAmBhtB,GAAOgtB,EAAU,IAAIhtB,GAAKgtB,GACpDhwJ,EAAQs8I,EACVztJ,EAAO00I,GAAav5H,GACtB,MAAgB,OAATnb,EAAe,CACpB,MAAM4iJ,GAAY1wJ,EAAAA,EAAAA,IAAQif,EAAM8G,KAAKjH,SAAUhR,IAAS,CACtDgR,SAAU,CAAC,EACXiwJ,WAAY,GAEd9vJ,EAAQ,IAAI6vJ,GAAQhhK,EAAMmR,EAAOyxI,GACjCznI,EAAOy5H,GAAaz5H,GACpBnb,EAAO00I,GAAav5H,EAAM,CAG5B,OAAOhK,CACT,CAOM,SAAUiwJ,GAAgB3T,GAC9B,OAAOA,EAAKx1I,KAAK3tB,KACnB,CAOgB,SAAA+2K,GAAgB5T,EAAenjK,GAC7CmjK,EAAKx1I,KAAK3tB,MAAQA,EAClBg3K,GAAkB7T,EACpB,CAKM,SAAU8T,GAAmB9T,GACjC,OAAOA,EAAKx1I,KAAKgpJ,WAAa,CAChC,CAKM,SAAUO,GAAe/T,GAC7B,YAA8BjjK,IAAvB42K,GAAa3T,KAAwB8T,GAAgB9T,EAC9D,CAOgB,SAAAgU,GACdhU,EACA1U,GAEAt5E,EAAKguF,EAAKx1I,KAAKjH,UAAU,CAACG,EAAeq0I,KACvCzM,EAAO,IAAIioB,GAAQ7vJ,EAAOs8I,EAAMjI,GAAW,GAE/C,CAWM,SAAUkc,GACdjU,EACA1U,EACA4oB,EACAC,GAEID,IAAgBC,GAClB7oB,EAAO0U,GAGTgU,GAAiBhU,GAAMt8I,IACrBuwJ,GAAsBvwJ,EAAO4nI,GAAQ,EAAM6oB,EAAc,IAGvDD,GAAeC,GACjB7oB,EAAO0U,EAEX,CASG,SACaoU,GACdpU,EACA1U,EACA4oB,GAEA,IAAI1pJ,EAAO0pJ,EAAclU,EAAOA,EAAKv3J,OACrC,MAAgB,OAAT+hB,EAAe,CACpB,GAAI8gI,EAAO9gI,GACT,OAAO,EAETA,EAAOA,EAAK/hB,MAAO,CAErB,OAAO,CACT,CAyBM,SAAU4rK,GAAerU,GAC7B,OAAO,IAAItZ,GACO,OAAhBsZ,EAAKv3J,OACDu3J,EAAK7jK,KACLk4K,GAAYrU,EAAKv3J,QAAU,IAAMu3J,EAAK7jK,KAE9C,CAKA,SAAS03K,GAAqB7T,GACR,OAAhBA,EAAKv3J,QACP6rK,GAAgBtU,EAAKv3J,OAAQu3J,EAAK7jK,KAAM6jK,EAE5C,CAQA,SAASsU,GAAmBtU,EAAejL,EAAmBrxI,GAC5D,MAAM6wJ,EAAaR,GAAYrwJ,GACzB8wJ,GAAclwK,EAAAA,EAAAA,IAAS07J,EAAKx1I,KAAKjH,SAAUwxI,GAC7Cwf,GAAcC,UACTxU,EAAKx1I,KAAKjH,SAASwxI,GAC1BiL,EAAKx1I,KAAKgpJ,aACVK,GAAkB7T,IACRuU,GAAeC,IACzBxU,EAAKx1I,KAAKjH,SAASwxI,GAAarxI,EAAM8G,KACtCw1I,EAAKx1I,KAAKgpJ,aACVK,GAAkB7T,GAEtB;;;;;;;;;;;;;;;;GC3LO,MAAMyU,GAAqB,iCAMrBC,GAAsB,+BAKtBC,GAAiB,SAEjBn3K,GAAa,SAAUC,GAClC,MACiB,kBAARA,GAAmC,IAAfA,EAAI3E,SAAiB27K,GAAmB9yK,KAAKlE,EAE5E,EAEam3K,GAAoB,SAAUxvB,GACzC,MACwB,kBAAfA,GACe,IAAtBA,EAAWtsJ,SACV47K,GAAoB/yK,KAAKyjJ,EAE9B,EAEayvB,GAAwB,SAAUzvB,GAM7C,OALIA,IAEFA,EAAaA,EAAW7oJ,QAAQ,mBAAoB,MAG/Cq4K,GAAkBxvB,EAC3B,EAiBa0vB,GAA0B,SACrCptK,EACA7K,EACA6wB,EACA0lG,GAEIA,QAAsBr2H,IAAVF,GAIhBk4K,IAAqBttK,EAAAA,EAAAA,IAAeC,EAAQ,SAAU7K,EAAO6wB,EAC/D,EAKaqnJ,GAAuB,SAClCttK,EACAjE,EACA+uK,GAEA,MAAM7kJ,EACJ6kJ,aAAiB7rB,GAAO,IAAIyB,GAAeoqB,EAAO9qK,GAAe8qK,EAEnE,QAAax1K,IAATyG,EACF,MAAM,IAAIhL,MACRiP,EAAc,sBAAwBkhJ,GAA4Bj7H,IAGtE,GAAoB,oBAATlqB,EACT,MAAM,IAAIhL,MACRiP,EACE,uBACAkhJ,GAA4Bj7H,GAC5B,oBACAlqB,EAAKuV,YAGX,GAAI+3H,EAAoBttI,GACtB,MAAM,IAAIhL,MACRiP,EACE,YACAjE,EAAKuV,WACL,IACA4vI,GAA4Bj7H,IAKlC,GACkB,kBAATlqB,GACPA,EAAK1K,OAAS67K,GAAiB,IAC/B5sK,EAAAA,EAAAA,IAAavE,GAAQmxK,GAErB,MAAM,IAAIn8K,MACRiP,EACE,kCACAktK,GACA,eACAhsB,GAA4Bj7H,GAC5B,MACAlqB,EAAKjE,UAAU,EAAG,IAClB,SAMN,GAAIiE,GAAwB,kBAATA,EAAmB,CACpC,IAAIwxK,GAAc,EACdC,GAAiB,EAwBrB,GAvBAjjG,EAAKxuE,GAAM,CAAC/F,EAAaZ,KACvB,GAAY,WAARY,EACFu3K,GAAc,OACT,GAAY,cAARv3K,GAA+B,QAARA,IAChCw3K,GAAiB,GACZz3K,GAAWC,IACd,MAAM,IAAIjF,MACRiP,EACE,6BACAhK,EACA,KACAkrJ,GAA4Bj7H,GAJ9BjmB,wFAWN+gJ,GAAmB96H,EAAMjwB,GACzBs3K,GAAqBttK,EAAa5K,EAAO6wB,GACzCg7H,GAAkBh7H,EAAK,IAGrBsnJ,GAAeC,EACjB,MAAM,IAAIz8K,MACRiP,EACE,4BACAkhJ,GAA4Bj7H,GAC5B,mCACH,CAGP,EA8IawnJ,GAAqB,SAChCxtK,EACAytK,EACA/vB,EACAhyB,GAEA,KAAIA,QAA2Br2H,IAAfqoJ,KAIXwvB,GAAkBxvB,GACrB,MAAM,IAAI5sJ,OACRiP,EAAAA,EAAAA,IAAeC,EAAQytK,GACrB,0BACA/vB,EAFF39I,mFAON,EAEa2tK,GAAyB,SACpC1tK,EACAytK,EACA/vB,EACAhyB,GAEIgyB,IAEFA,EAAaA,EAAW7oJ,QAAQ,mBAAoB,MAGtD24K,GAAmBxtK,EAAQytK,EAAc/vB,EAAYhyB,EACvD,EAKaiiD,GAAuB,SAAU3tK,EAAgBgmB,GAC5D,GAA2B,UAAvBu5H,GAAav5H,GACf,MAAM,IAAIl1B,MAAMkP,EAAS,4CAE7B,EAEa4tK,GAAc,SACzB5tK,EACA6tK,GAGA,MAAMnwB,EAAamwB,EAAU7nJ,KAAK3U,WAClC,GACuC,kBAA5Bw8J,EAAUl/B,SAASn3I,MACO,IAAnCq2K,EAAUl/B,SAASn3I,KAAKpG,SACtB0E,GAAW+3K,EAAUl/B,SAAS7vH,YACY,cAA1C+uJ,EAAUl/B,SAASn3I,KAAKiF,MAAM,KAAK,IACd,IAAtBihJ,EAAWtsJ,SAAiB+7K,GAAsBzvB,GAEnD,MAAM,IAAI5sJ,OACRiP,EAAAA,EAAAA,IAAeC,EAAQ,OAAvBD,uFAKN;;;;;;;;;;;;;;;;;ACjXG,MACU+tK,GAAbt5K,WAAAA,GACE,KAAWu5K,YAAgB,GAK3B,KAAeC,gBAAG,CAAE,EAMN,SAAAC,GACdC,EACAC,GAGA,IAAIC,EAA6B,KACjC,IAAK,IAAIj9K,EAAI,EAAGA,EAAIg9K,EAAc/8K,OAAQD,IAAK,CAC7C,MAAM2K,EAAOqyK,EAAch9K,GACrB60B,EAAOlqB,EAAKuyK,UACD,OAAbD,GAAsB7tB,GAAWv6H,EAAMooJ,EAASpoJ,QAClDkoJ,EAAWH,YAAYj6K,KAAKs6K,GAC5BA,EAAW,MAGI,OAAbA,IACFA,EAAW,CAAE7pG,OAAQ,GAAIv+C,SAG3BooJ,EAAS7pG,OAAOzwE,KAAKgI,EAAM,CAEzBsyK,GACFF,EAAWH,YAAYj6K,KAAKs6K,EAEhC,CA8BG,SACaE,GACdJ,EACAK,EACAJ,GAEAF,GAAsBC,EAAYC,GAClCK,GACEN,GACAO,GACEjuB,GAAaiuB,EAAWF,IACxB/tB,GAAa+tB,EAAaE,IAEhC,CAEA,SAASD,GACPN,EACA9Q,GAEA8Q,EAAWF,kBAEX,IAAIU,GAAU,EACd,IAAK,IAAIv9K,EAAI,EAAGA,EAAI+8K,EAAWH,YAAY38K,OAAQD,IAAK,CACtD,MAAMw9K,EAAYT,EAAWH,YAAY58K,GACzC,GAAIw9K,EAAW,CACb,MAAMF,EAAYE,EAAU3oJ,KACxBo3I,EAAUqR,IACZG,GAAeV,EAAWH,YAAY58K,IACtC+8K,EAAWH,YAAY58K,GAAK,MAE5Bu9K,GAAU,CAAK,EAKjBA,IACFR,EAAWH,YAAc,IAG3BG,EAAWF,iBACb,CAUA,SAASY,GAAeD,GACtB,IAAK,IAAIx9K,EAAI,EAAGA,EAAIw9K,EAAUpqG,OAAOnzE,OAAQD,IAAK,CAChD,MAAMqtJ,EAAYmwB,EAAUpqG,OAAOpzE,GACnC,GAAkB,OAAdqtJ,EAAoB,CACtBmwB,EAAUpqG,OAAOpzE,GAAK,KACtB,MAAM09K,EAAUrwB,EAAUswB,iBACtBtyC,GACF6K,EAAI,UAAYmX,EAAUntI,YAE5Bo6H,EAAeojC,EAAS,CAAD,CAG7B;;;;;;;;;;;;;;;;GCpDA,MAAME,GAAmB,iBAOnBC,GAA0B,GA8C7B,MACUC,GA0BXz6K,WAAAA,CACSylJ,EACAi1B,EACAjtB,EACAktB,GAHA,KAASl1B,UAATA,EACA,KAAgBi1B,iBAAhBA,EACA,KAAkBjtB,mBAAlBA,EACA,KAAiBktB,kBAAjBA,EA1BT,KAAeC,gBAAG,EAKlB,KAAclW,eAAyB,KACvC,KAAAmW,YAAc,IAAIvB,GAClB,KAAYwB,aAAG,EAIf,KAA4BC,6BAA6C,KAGzE,KAAal9B,cAAuB0lB,KAGpC,KAAAyX,sBAAwB,IAAI3D,GAG5B,KAAqB4D,sBAAgC,KASnDh9K,KAAKsD,IAAMtD,KAAKwnJ,UAAUxL,aAAc,CAM1Cp9H,QAAAA,GACE,OACG5e,KAAKwnJ,UAAUz2C,OAAS,WAAa,WAAa/wG,KAAKwnJ,UAAUziJ,IAAI,EAG3E,SAEek4K,GACdC,EACAruC,EACAsuC,GAIA,GAFAD,EAAK39B,OAAS3C,GAA0BsgC,EAAK11B,WAEzC01B,EAAKT,kBAAoBxjC,IAC3BikC,EAAK3W,QAAU,IAAI7B,GACjBwY,EAAK11B,WACL,CACEyD,EACA5hJ,EACA+zK,EACA/7H,KAEAg8H,GAAiBH,EAAMjyB,EAAY5hJ,EAAM+zK,EAAS/7H,EAAI,GAExD67H,EAAK1tB,mBACL0tB,EAAKR,mBAIPv4J,YAAW,IAAMm5J,GAAoBJ,GAA2B,IAAO,OAClE,CAEL,GAA4B,qBAAjBC,GAAiD,OAAjBA,EAAuB,CAChE,GAA4B,kBAAjBA,EACT,MAAM,IAAI9+K,MACR,sEAGJ,KACE+I,EAAAA,EAAAA,IAAU+1K,EAAc,CACxB,MAAO76K,GACP,MAAM,IAAIjE,MAAM,kCAAoCiE,EAAG,CAAD,CAI1D46K,EAAKF,sBAAwB,IAAI5tB,GAC/B8tB,EAAK11B,UACL3Y,GACA,CACEoc,EACA5hJ,EACA+zK,EACA/7H,KAEAg8H,GAAiBH,EAAMjyB,EAAY5hJ,EAAM+zK,EAAS/7H,EAAI,IAEvDk8H,IACCD,GAAoBJ,EAAMK,EAAc,IAEzC/Q,IACCgR,GAAuBN,EAAM1Q,EAAQ,GAEvC0Q,EAAK1tB,mBACL0tB,EAAKR,kBACLS,GAGFD,EAAK3W,QAAU2W,EAAKF,qBAAsB,CAG5CE,EAAK1tB,mBAAmB7V,wBAAuB3zI,IAC7Ck3K,EAAK3W,QAAQpb,iBAAiBnlJ,EAAM,IAGtCk3K,EAAKR,kBAAkB/iC,wBAAuBxxI,IAC5C+0K,EAAK3W,QAAQnb,qBAAqBjjJ,EAAOnC,MAAM,IAKjDk3K,EAAKO,eAAiB3gC,GACpBogC,EAAK11B,WACL,IAAM,IAAI6e,GAAc6W,EAAK39B,OAAQ29B,EAAK3W,WAI5C2W,EAAKQ,UAAY,IAAIzY,GACrBiY,EAAKS,cAAgB,IAAI1H,GAAS,CAChC2H,eAAgBA,CAAClrD,EAAOrxE,EAAKuwG,EAAe1G,KAC1C,IAAI2yB,EAAsB,GAC1B,MAAMxtJ,EAAO6sJ,EAAKQ,UAAUvY,QAAQzyC,EAAM6+B,OAa1C,OAVKlhI,EAAK9lB,YACRszK,EAAahH,GACXqG,EAAKS,cACLjrD,EAAM6+B,MACNlhI,GAEFlM,YAAW,KACT+mI,EAAW,KAAK,GACf,IAEE2yB,CAAU,EAEnBC,cAAeA,SAEjBC,GAAeb,EAAM,aAAa,GAElCA,EAAKc,gBAAkB,IAAI/H,GAAS,CAClC2H,eAAgBA,CAAClrD,EAAOrxE,EAAKuwG,EAAe1G,KAC1CgyB,EAAK3W,QAAQlwC,OAAO3D,EAAOk/B,EAAevwG,GAAK,CAACqjD,EAAQr7F,KACtD,MAAMyoE,EAASo5E,EAAWxmD,EAAQr7F,GAClCwyK,GACEqB,EAAKN,YACLlqD,EAAM6+B,MACNz/E,EACD,IAGI,IAETgsG,cAAeA,CAACprD,EAAOrxE,KACrB67H,EAAK3W,QAAQh/B,SAAS7U,EAAOrxE,EAAI,GAGvC,CAKM,SAAU48H,GAAef,GAC7B,MAAMgB,EAAahB,EAAKQ,UAAUvY,QAAQ,IAAI5Y,GAAK,2BAC7C7/I,EAAUwxK,EAAW1gK,OAAoB,EAC/C,OAAO,IAAIxa,MAAOE,UAAYwJ,CAChC,CAKM,SAAUyxK,GAAyBjB,GACvC,OAAO7E,GAAmB,CACxBlpE,UAAW8uE,GAAef,IAE9B,CAKA,SAASG,GACPH,EACAjyB,EACA5hJ,EACA+zK,EACA/7H,GAGA67H,EAAKP,kBACL,MAAMppJ,EAAO,IAAIg5H,GAAKtB,GACtB5hJ,EAAO6zK,EAAKJ,6BACRI,EAAKJ,6BAA6B7xB,EAAY5hJ,GAC9CA,EACJ,IAAIyoE,EAAS,GACb,GAAIzwB,EACF,GAAI+7H,EAAS,CACX,MAAMgB,GAAiB5zK,EAAAA,EAAAA,IACrBnB,GACCmR,GAAiBymJ,GAAazmJ,KAEjCs3D,EAASylG,GACP2F,EAAKc,gBACLzqJ,EACA6qJ,EACA/8H,EACA,KACG,CACL,MAAMg9H,EAAapd,GAAa53J,GAChCyoE,EAASklG,GACPkG,EAAKc,gBACLzqJ,EACA8qJ,EACAh9H,EACA,MAEC,GAAI+7H,EAAS,CAClB,MAAMjJ,GAAkB3pK,EAAAA,EAAAA,IACtBnB,GACCmR,GAAiBymJ,GAAazmJ,KAEjCs3D,EAASglG,GACPoG,EAAKc,gBACLzqJ,EACA4gJ,EACA,KACG,CACL,MAAMvS,EAAOX,GAAa53J,GAC1ByoE,EAAS+kG,GAA6BqG,EAAKc,gBAAiBzqJ,EAAMquI,EAAM,CAE1E,IAAI0c,EAAe/qJ,EACfu+C,EAAOnzE,OAAS,IAGlB2/K,EAAeC,GAAsBrB,EAAM3pJ,IAE7CsoJ,GAAoCqB,EAAKN,YAAa0B,EAAcxsG,EACtE,CAUA,SAASwrG,GAAoBJ,EAAYK,GACvCQ,GAAeb,EAAM,YAAaK,IACZ,IAAlBA,GACFiB,GAA0BtB,EAE9B,CAEA,SAASM,GAAuBN,EAAY1Q,GAC1C30F,EAAK20F,GAAS,CAAClpK,EAAaZ,KAC1Bq7K,GAAeb,EAAM55K,EAAKZ,EAAM,GAEpC,CAEA,SAASq7K,GAAeb,EAAYjyB,EAAoBvoJ,GACtD,MAAM6wB,EAAO,IAAIg5H,GAAK,UAAYtB,GAC5B17G,EAAU0xH,GAAav+J,GAC7Bw6K,EAAKQ,UAAUtY,eAAe7xI,EAAMgc,GACpC,MAAMuiC,EAAS+kG,GACbqG,EAAKS,cACLpqJ,EACAgc,GAEFssI,GAAoCqB,EAAKN,YAAarpJ,EAAMu+C,EAC9D,CAEA,SAAS2sG,GAAmBvB,GAC1B,OAAOA,EAAKL,cACd,CA4FM,SAAU6B,GACdxB,EACA3pJ,EACA3X,EACA4jJ,EACAtU,GAEAyzB,GAAQzB,EAAM,MAAO,CACnB3pJ,KAAMA,EAAK3U,WACXlc,MAAOkZ,EACPi+I,SAAU2F,IAKZ,MAAMgZ,EAAe2F,GAAyBjB,GACxC0B,EAAoB3d,GAAarlJ,EAAQ4jJ,GACzCzzH,EAAWyrI,GAA+B0F,EAAKc,gBAAiBzqJ,GAChEgc,EAAUypI,GACd4F,EACA7yI,EACAysI,GAGIhL,EAAUiR,GAAmBvB,GAC7BprG,EAASykG,GACb2G,EAAKc,gBACLzqJ,EACAgc,EACAi+H,GACA,GAEFgO,GAAsB0B,EAAKN,YAAa9qG,GACxCorG,EAAK3W,QAAQ33B,IACXr7G,EAAK3U,WACLggK,EAAkBphK,KAAgB,IAClC,CAACknF,EAAQkvD,KACP,MAAMpsB,EAAqB,OAAX9iC,EACX8iC,GACHvoH,EAAK,UAAYsU,EAAO,YAAcmxE,GAGxC,MAAMm6E,EAAclI,GAClBuG,EAAKc,gBACLxQ,GACChmC,GAEHq0C,GAAoCqB,EAAKN,YAAarpJ,EAAMsrJ,GAC5DC,GAA2B5B,EAAMhyB,EAAYxmD,EAAQkvD,EAAY,IAGrE,MAAM0qB,EAAeS,GAAsB7B,EAAM3pJ,GACjDgrJ,GAAsBrB,EAAMoB,GAE5BzC,GAAoCqB,EAAKN,YAAa0B,EAAc,GACtE,CA6EA,SAASE,GAA0BtB,GACjCyB,GAAQzB,EAAM,sBAEd,MAAM1E,EAAe2F,GAAyBjB,GACxC8B,EAA2B1Z,KACjCI,GACEwX,EAAKt9B,cACLiN,MACA,CAACt5H,EAAMlD,KACL,MAAMgV,EAAWyzI,GACfvlJ,EACAlD,EACA6sJ,EAAKc,gBACLxF,GAEFjT,GAA2ByZ,EAA0BzrJ,EAAM8R,EAAS,IAGxE,IAAIysC,EAAkB,GAEtB4zF,GACEsZ,EACAnyB,MACA,CAACt5H,EAAMquI,KACL9vF,EAASA,EAAO7oD,OACd4tJ,GAA6BqG,EAAKc,gBAAiBzqJ,EAAMquI,IAE3D,MAAM0c,EAAeS,GAAsB7B,EAAM3pJ,GACjDgrJ,GAAsBrB,EAAMoB,EAAa,IAI7CpB,EAAKt9B,cAAgB0lB,KACrBuW,GAAoCqB,EAAKN,YAAa/vB,KAAgB/6E,EACxE,CAmIM,SAAUmtG,GAAc/B,GACxBA,EAAKF,uBACPE,EAAKF,sBAAsB5nB,UAAUknB,GAEzC,CA4CA,SAASqC,GAAQzB,KAAe/mC,GAC9B,IAAIxoE,EAAS,GACTuvG,EAAKF,wBACPrvG,EAASuvG,EAAKF,sBAAsBn7J,GAAK,KAE3C+yH,EAAIjnE,KAAWwoE,EACjB,CAEM,SAAU2oC,GACd5B,EACAr3K,EACA6+F,EACAkvD,GAEI/tJ,GACFmzI,GAAe,KACb,GAAe,OAAXt0C,EACF7+F,EAAS,UACJ,CACL,MAAM6C,GAAQg8F,GAAU,SAAStlD,cACjC,IAAIjhD,EAAUuK,EACVkrJ,IACFz1J,GAAW,KAAOy1J,GAGpB,MAAMpxJ,EAAQ,IAAInE,MAAMF,GAGvBqE,EAAckG,KAAOA,EACtB7C,EAASrD,EAAO,IAIxB,CA6HA,SAAS08K,GACPhC,EACA3pJ,EACA4rJ,GAEA,OACE3H,GAA+B0F,EAAKc,gBAAiBzqJ,EAAM4rJ,IAC3D/f,GAAa3H,UAEjB,CAWA,SAAS2nB,GACPlC,EACA7sJ,EAA4B6sJ,EAAKH,uBAOjC,GAJK1sJ,GACHgvJ,GAAwCnC,EAAM7sJ,GAG5CmpJ,GAAanpJ,GAAO,CACtB,MAAMlP,EAAQm+J,GAA0BpC,EAAM7sJ,IAC9CpyB,EAAAA,EAAAA,IAAOkjB,EAAMxiB,OAAS,EAAG,yCAEzB,MAAM4gL,EAASp+J,EAAMwW,OAClBowG,GAA+C,IAAlBA,EAAYrjC,SAIxC66E,GACFC,GAAyBtC,EAAMhD,GAAY7pJ,GAAOlP,EAAM,MAEjDw4J,GAAgBtpJ,IACzBwpJ,GAAiBxpJ,GAAM2qI,IACrBokB,GAA0BlC,EAAMliB,EAAU,GAGhD,CASA,SAASwkB,GACPtC,EACA3pJ,EACApS,GAGA,MAAMs+J,EAAet+J,EAAM3W,KAAIk1K,GACtBA,EAAIC,iBAEPC,EAAcV,GAAmBhC,EAAM3pJ,EAAMksJ,GACnD,IAAII,EAAaD,EACjB,MAAME,EAAaF,EAAYx/G,OAC/B,IAAK,IAAI1hE,EAAI,EAAGA,EAAIyiB,EAAMxiB,OAAQD,IAAK,CACrC,MAAMghL,EAAMv+J,EAAMziB,IAClBT,EAAAA,EAAAA,IACY,IAAVyhL,EAAIh7E,OACJ,iEAEFg7E,EAAIh7E,OAAM,EACVg7E,EAAIK,aACJ,MAAMrV,EAAe/c,GAAgBp6H,EAAMmsJ,EAAInsJ,MAE/CssJ,EAAaA,EAAW1kB,YACtBuP,EACAgV,EAAIM,yBACJ,CAGJ,MAAMC,EAAaJ,EAAWriK,KAAI,GAC5B0iK,EAAa3sJ,EAGnB2pJ,EAAK3W,QAAQ33B,IACXsxC,EAAWthK,WACXqhK,GACCv7E,IACCi6E,GAAQzB,EAAM,2BAA4B,CACxC3pJ,KAAM2sJ,EAAWthK,WACjB8lF,WAGF,IAAI5yB,EAAkB,GACtB,GAAe,OAAX4yB,EAAiB,CAInB,MAAM4uC,EAAY,GAClB,IAAK,IAAI50I,EAAI,EAAGA,EAAIyiB,EAAMxiB,OAAQD,IAChCyiB,EAAMziB,GAAGgmG,OAAM,EACf5yB,EAASA,EAAO7oD,OACd0tJ,GAAqBuG,EAAKc,gBAAiB78J,EAAMziB,GAAGihL,iBAElDx+J,EAAMziB,GAAGwsJ,YAGX5X,EAAUjyI,MAAK,IACb8f,EAAMziB,GAAGwsJ,WACP,MACA,EACA/pI,EAAMziB,GAAGyhL,iCAIfh/J,EAAMziB,GAAG0hL,YAIXf,GACEnC,EACA5D,GAAY4D,EAAKH,sBAAuBxpJ,IAG1C6rJ,GAA0BlC,EAAMA,EAAKH,uBAErClB,GAAoCqB,EAAKN,YAAarpJ,EAAMu+C,GAG5D,IAAK,IAAIpzE,EAAI,EAAGA,EAAI40I,EAAU30I,OAAQD,IACpCs6I,EAAe1F,EAAU50I,GAAG,KAEzB,CAEL,GAAe,cAAXgmG,EACF,IAAK,IAAIhmG,EAAI,EAAGA,EAAIyiB,EAAMxiB,OAAQD,IACb,IAAfyiB,EAAMziB,GAAGgmG,OACXvjF,EAAMziB,GAAGgmG,OAAM,EAEfvjF,EAAMziB,GAAGgmG,OAAM,MAGd,CACLzlF,EACE,kBAAoBihK,EAAWthK,WAAa,YAAc8lF,GAE5D,IAAK,IAAIhmG,EAAI,EAAGA,EAAIyiB,EAAMxiB,OAAQD,IAChCyiB,EAAMziB,GAAGgmG,OAAM,EACfvjF,EAAMziB,GAAG2hL,YAAc37E,CAAM,CAIjC65E,GAAsBrB,EAAM3pJ,EAAM,IAGtCusJ,EAEJ,CAaA,SAASvB,GAAsBrB,EAAYpB,GACzC,MAAMwE,EAA0BC,GAC9BrD,EACApB,GAEIvoJ,EAAO2mJ,GAAYoG,GAEnBn/J,EAAQm+J,GAA0BpC,EAAMoD,GAG9C,OAFAE,GAA0BtD,EAAM/7J,EAAOoS,GAEhCA,CACT,CASA,SAASitJ,GACPtD,EACA/7J,EACAoS,GAEA,GAAqB,IAAjBpS,EAAMxiB,OACR,OAMF,MAAM20I,EAAY,GAClB,IAAIxhE,EAAkB,GAEtB,MAAM2uG,EAAct/J,EAAM9M,QAAOm9I,GAChB,IAARA,EAAE9sD,SAEL+6E,EAAegB,EAAYj2K,KAAIgnJ,GAC5BA,EAAEmuB,iBAEX,IAAK,IAAIjhL,EAAI,EAAGA,EAAIyiB,EAAMxiB,OAAQD,IAAK,CACrC,MAAMqpI,EAAc5mH,EAAMziB,GACpBgsK,EAAe/c,GAAgBp6H,EAAMw0G,EAAYx0G,MACvD,IACE8sJ,EADEK,GAAmB,EAOvB,IALAziL,EAAAA,EAAAA,IACmB,OAAjBysK,EACA,iEAGoB,IAAlB3iC,EAAYrjC,OACdg8E,GAAmB,EACnBL,EAAct4C,EAAYs4C,YAC1BvuG,EAASA,EAAO7oD,OACd0tJ,GACEuG,EAAKc,gBACLj2C,EAAY43C,gBACZ,SAGC,GAAsB,IAAlB53C,EAAYrjC,OACrB,GAAIqjC,EAAYg4C,YAAcxD,GAC5BmE,GAAmB,EACnBL,EAAc,WACdvuG,EAASA,EAAO7oD,OACd0tJ,GACEuG,EAAKc,gBACLj2C,EAAY43C,gBACZ,QAGC,CAEL,MAAMxkH,EAAc+jH,GAClBhC,EACAn1C,EAAYx0G,KACZksJ,GAEF13C,EAAY44C,qBAAuBxlH,EACnC,MAAMs7G,EAAUt1J,EAAMziB,GAAGqO,OAAOouD,EAAY39C,OAC5C,QAAgB5a,IAAZ6zK,EAAuB,CACzBmE,GACE,qCACAnE,EACA1uC,EAAYx0G,MAEd,IAAIqtJ,EAAc3f,GAAawV,GAC/B,MAAMoK,EACe,kBAAZpK,GACI,MAAXA,IACAtsK,EAAAA,EAAAA,IAASssK,EAAS,aACfoK,IAEHD,EAAcA,EAAYnmB,eAAet/F,EAAY8+F,gBAGvD,MAAM6mB,EAAa/4C,EAAY43C,eACzBnH,EAAe2F,GAAyBjB,GACxC6D,EAAkB/H,GACtB4H,EACAzlH,EACAq9G,GAGFzwC,EAAYi4C,yBAA2BY,EACvC74C,EAAYo4C,8BAAgCY,EAC5Ch5C,EAAY43C,eAAiBlB,GAAmBvB,GAEhDuC,EAAal9J,OAAOk9J,EAAa98J,QAAQm+J,GAAa,GACtDhvG,EAASA,EAAO7oD,OACdstJ,GACE2G,EAAKc,gBACLj2C,EAAYx0G,KACZwtJ,EACAh5C,EAAY43C,eACZ53C,EAAYi5C,eAGhBlvG,EAASA,EAAO7oD,OACd0tJ,GAAqBuG,EAAKc,gBAAiB8C,GAAY,GACvD,MAEFJ,GAAmB,EACnBL,EAAc,SACdvuG,EAASA,EAAO7oD,OACd0tJ,GACEuG,EAAKc,gBACLj2C,EAAY43C,gBACZ,GAEH,CAIP9D,GAAoCqB,EAAKN,YAAarpJ,EAAMu+C,GAC5DA,EAAS,GACL4uG,IAEFv/J,EAAMziB,GAAGgmG,OAAM,EAKf,SAAW07E,GACTj8J,WAAWi8J,EAAW9pI,KAAKs3B,MAAM,GAClC,CAFD,CAEGzsD,EAAMziB,GAAG0hL,WAERj/J,EAAMziB,GAAGwsJ,aACS,WAAhBm1B,EACF/sC,EAAUjyI,MAAK,IACb8f,EAAMziB,GAAGwsJ,WAAW,MAAM,EAAO/pI,EAAMziB,GAAGiiL,wBAG5CrtC,EAAUjyI,MAAK,IACb8f,EAAMziB,GAAGwsJ,WAAW,IAAI7sJ,MAAMgiL,IAAc,EAAO,SACpD,CAOThB,GAAwCnC,EAAMA,EAAKH,uBAGnD,IAAK,IAAIr+K,EAAI,EAAGA,EAAI40I,EAAU30I,OAAQD,IACpCs6I,EAAe1F,EAAU50I,IAI3B0gL,GAA0BlC,EAAMA,EAAKH,sBACvC,CAUA,SAASwD,GACPrD,EACA3pJ,GAEA,IAAI6nI,EAIA6lB,EAAkB/D,EAAKH,sBAC3B3hB,EAAQtO,GAAav5H,GACrB,MAAiB,OAAV6nI,QAAoDx4J,IAAlC42K,GAAayH,GACpCA,EAAkB3H,GAAY2H,EAAiB7lB,GAC/C7nI,EAAOy5H,GAAaz5H,GACpB6nI,EAAQtO,GAAav5H,GAGvB,OAAO0tJ,CACT,CASA,SAAS3B,GACPpC,EACA+D,GAGA,MAAMC,EAAkC,GAUxC,OATAC,GACEjE,EACA+D,EACAC,GAIFA,EAAiBh+J,MAAK,CAACrY,EAAGC,IAAMD,EAAEggE,MAAQ//D,EAAE+/D,QAErCq2G,CACT,CAEA,SAASC,GACPjE,EACA7sJ,EACAlP,GAEA,MAAMigK,EAAY5H,GAAanpJ,GAC/B,GAAI+wJ,EACF,IAAK,IAAI1iL,EAAI,EAAGA,EAAI0iL,EAAUziL,OAAQD,IACpCyiB,EAAM9f,KAAK+/K,EAAU1iL,IAIzBm7K,GAAiBxpJ,GAAM9G,IACrB43J,GAAsCjE,EAAM3zJ,EAAOpI,EAAM,GAE7D,CAKA,SAASk+J,GACPnC,EACA7sJ,GAEA,MAAMlP,EAAQq4J,GAAanpJ,GAC3B,GAAIlP,EAAO,CACT,IAAIokB,EAAK,EACT,IAAK,IAAIxH,EAAO,EAAGA,EAAO5c,EAAMxiB,OAAQo/B,IAChB,IAAlB5c,EAAM4c,GAAM2mE,SACdvjF,EAAMokB,GAAMpkB,EAAM4c,GAClBwH,KAGJpkB,EAAMxiB,OAAS4mC,EACfk0I,GAAappJ,EAAMlP,EAAMxiB,OAAS,EAAIwiB,OAAQve,EAAW,CAG3Di3K,GAAiBxpJ,GAAM2qI,IACrBqkB,GAAwCnC,EAAMliB,EAAU,GAE5D,CASA,SAAS+jB,GAAsB7B,EAAY3pJ,GACzC,MAAM+qJ,EAAepE,GAAYqG,GAA+BrD,EAAM3pJ,IAEhE0tJ,EAAkB3H,GAAY4D,EAAKH,sBAAuBxpJ,GAYhE,OAVA0mJ,GAAoBgH,GAAkB5wJ,IACpCgxJ,GAA4BnE,EAAM7sJ,EAAK,IAGzCgxJ,GAA4BnE,EAAM+D,GAElCnH,GAAsBmH,GAAkB5wJ,IACtCgxJ,GAA4BnE,EAAM7sJ,EAAK,IAGlCiuJ,CACT,CAOA,SAAS+C,GACPnE,EACA7sJ,GAEA,MAAMlP,EAAQq4J,GAAanpJ,GAC3B,GAAIlP,EAAO,CAIT,MAAMmyH,EAAY,GAIlB,IAAIxhE,EAAkB,GAClBwvG,GAAY,EAChB,IAAK,IAAI5iL,EAAI,EAAGA,EAAIyiB,EAAMxiB,OAAQD,IACb,IAAfyiB,EAAMziB,GAAGgmG,SAEa,IAAfvjF,EAAMziB,GAAGgmG,SAClBzmG,EAAAA,EAAAA,IACEqjL,IAAa5iL,EAAI,EACjB,mDAEF4iL,EAAW5iL,EAEXyiB,EAAMziB,GAAGgmG,OAAM,EACfvjF,EAAMziB,GAAG2hL,YAAc,SAEvBpiL,EAAAA,EAAAA,IAC2C,IAAzCkjB,EAAMziB,GAAGgmG,OACT,0CAGFvjF,EAAMziB,GAAG0hL,YACTtuG,EAASA,EAAO7oD,OACd0tJ,GACEuG,EAAKc,gBACL78J,EAAMziB,GAAGihL,gBACT,IAGAx+J,EAAMziB,GAAGwsJ,YACX5X,EAAUjyI,KACR8f,EAAMziB,GAAGwsJ,WAAWt5I,KAAK,KAAM,IAAIvT,MAAM,QAAQ,EAAO,UAK9C,IAAdijL,EAEF7H,GAAappJ,OAAMztB,GAGnBue,EAAMxiB,OAAS2iL,EAAW,EAI5BzF,GACEqB,EAAKN,YACL1C,GAAY7pJ,GACZyhD,GAEF,IAAK,IAAIpzE,EAAI,EAAGA,EAAI40I,EAAU30I,OAAQD,IACpCs6I,EAAe1F,EAAU50I,GAAG,CAGlC;;;;;;;;;;;;;;;;GCrhDA,SAAS6iL,GAAWt2B,GAClB,IAAIu2B,EAAoB,GACxB,MAAMl0B,EAASrC,EAAWjhJ,MAAM,KAChC,IAAK,IAAItL,EAAI,EAAGA,EAAI4uJ,EAAO3uJ,OAAQD,IACjC,GAAI4uJ,EAAO5uJ,GAAGC,OAAS,EAAG,CACxB,IAAI8iL,EAAQn0B,EAAO5uJ,GACnB,IACE+iL,EAAQztG,mBAAmBytG,EAAMr/K,QAAQ,MAAO,KAAM,CACtD,MAAOE,GAAI,CACbk/K,GAAqB,IAAMC,CAAM,CAGrC,OAAOD,CACT,CAKA,SAASE,GAAYC,GACnB,MAAMC,EAAU,CAAC,EACa,MAA1BD,EAAYhgL,OAAO,KACrBggL,EAAcA,EAAYv8K,UAAU,IAEtC,IAAK,MAAMyuH,KAAW8tD,EAAY33K,MAAM,KAAM,CAC5C,GAAuB,IAAnB6pH,EAAQl1H,OACV,SAEF,MAAMkjL,EAAKhuD,EAAQ7pH,MAAM,KACP,IAAd63K,EAAGljL,OACLijL,EAAQ5tG,mBAAmB6tG,EAAG,KAAO7tG,mBAAmB6tG,EAAG,IAE3D5iK,EAAK,0BAA0B40G,gBAAsB8tD,KAAe,CAGxE,OAAOC,CACT,CAEO,MAAME,GAAgB,SAC3BC,EACAzmC,GAEA,MAAM8/B,EAAY4G,GAAiBD,GACjC11J,EAAY+uJ,EAAU/uJ,UAEC,iBAArB+uJ,EAAUtqE,QACZ2lC,EACE2kC,EAAUr2K,KAAVq2K,8EAQA/uJ,GAA2B,cAAdA,GACM,cAArB+uJ,EAAUtqE,QAEV2lC,EACE,gFAIC2kC,EAAUrqE,QACb2lC,IAGF,MAAM2E,EAAqC,OAArB+/B,EAAU6G,QAAwC,QAArB7G,EAAU6G,OAE7D,MAAO,CACL/lC,SAAU,IAAId,GACZggC,EAAUr2K,KACVq2K,EAAUrqE,OACV1kF,EACAgvH,EACAC,EACoB,GACejvH,IAAc+uJ,EAAU8G,WAE7D3uJ,KAAM,IAAIg5H,GAAK6uB,EAAUnwB,YAE7B,EAEa+2B,GAAmB,SAAUD,GAWxC,IAAIh9K,EAAO,GACT+rG,EAAS,GACToxE,EAAY,GACZj3B,EAAa,GACb5+H,EAAY,GAGV0kF,GAAS,EACXkxE,EAAS,QACT/8K,EAAO,IAGT,GAAuB,kBAAZ68K,EAAsB,CAE/B,IAAII,EAAWJ,EAAQp/J,QAAQ,MAC3Bw/J,GAAY,IACdF,EAASF,EAAQ38K,UAAU,EAAG+8K,EAAW,GACzCJ,EAAUA,EAAQ38K,UAAU+8K,EAAW,IAIzC,IAAIC,EAAWL,EAAQp/J,QAAQ,MACb,IAAdy/J,IACFA,EAAWL,EAAQpjL,QAErB,IAAI0jL,EAAkBN,EAAQp/J,QAAQ,MACb,IAArB0/J,IACFA,EAAkBN,EAAQpjL,QAE5BoG,EAAOg9K,EAAQ38K,UAAU,EAAGkxC,KAAKC,IAAI6rI,EAAUC,IAC3CD,EAAWC,IAEbp3B,EAAas2B,GAAWQ,EAAQ38K,UAAUg9K,EAAUC,KAEtD,MAAMle,EAAcud,GAClBK,EAAQ38K,UAAUkxC,KAAKC,IAAIwrI,EAAQpjL,OAAQ0jL,KAI7CF,EAAWp9K,EAAK4d,QAAQ,KACpBw/J,GAAY,GACdpxE,EAAoB,UAAXkxE,GAAiC,QAAXA,EAC/B/8K,EAAOC,SAASJ,EAAKK,UAAU+8K,EAAW,GAAI,KAE9CA,EAAWp9K,EAAKpG,OAGlB,MAAM2jL,EAAkBv9K,EAAK8a,MAAM,EAAGsiK,GACtC,GAAsC,cAAlCG,EAAgBj8J,cAClByqF,EAAS,iBACJ,GAAIwxE,EAAgBt4K,MAAM,KAAKrL,QAAU,EAC9CmyG,EAASwxE,MACJ,CAEL,MAAMC,EAASx9K,EAAK4d,QAAQ,KAC5Bu/J,EAAYn9K,EAAKK,UAAU,EAAGm9K,GAAQl8J,cACtCyqF,EAAS/rG,EAAKK,UAAUm9K,EAAS,GAEjCl2J,EAAY61J,CAAU,CAGpB,OAAQ/d,IACV93I,EAAY83I,EAAY,MAAK,CAIjC,MAAO,CACLp/J,OACAG,OACA4rG,SACAoxE,YACAnxE,SACAkxE,SACAh3B,aACA5+H,YAEJ,EClKMm2J,GACJ,mEAsBWC,GAAc,WAGzB,IAAIC,EAAe,EAMnB,MAAMC,EAA0B,GAEhC,OAAO,SAAU74H,GACf,MAAM84H,EAAgB94H,IAAQ44H,EAG9B,IAAIhkL,EAFJgkL,EAAe54H,EAGf,MAAM+4H,EAAiB,IAAItiL,MAAM,GACjC,IAAK7B,EAAI,EAAGA,GAAK,EAAGA,IAClBmkL,EAAenkL,GAAK8jL,GAAW7gL,OAAOmoD,EAAM,IAG5CA,EAAMxT,KAAKs3B,MAAM9jB,EAAM,KAEzB7rD,EAAAA,EAAAA,IAAe,IAAR6rD,EAAW,4BAElB,IAAIjoC,EAAKghK,EAAerjL,KAAK,IAE7B,GAAKojL,EAIE,CAGL,IAAKlkL,EAAI,GAAIA,GAAK,GAA0B,KAArBikL,EAAcjkL,GAAWA,IAC9CikL,EAAcjkL,GAAK,EAErBikL,EAAcjkL,IAAK,MATnB,IAAKA,EAAI,EAAGA,EAAI,GAAIA,IAClBikL,EAAcjkL,GAAK43C,KAAKs3B,MAAsB,GAAhBt3B,KAAKu3B,UAUvC,IAAKnvE,EAAI,EAAGA,EAAI,GAAIA,IAClBmjB,GAAM2gK,GAAW7gL,OAAOghL,EAAcjkL,IAIxC,OAFAT,EAAAA,EAAAA,IAAqB,KAAd4jB,EAAGljB,OAAe,oCAElBkjB,CACT,CACF,CA9C2B;;;;;;;;;;;;;;;;;AC+CxB,MACUihK,GAIX/gL,WAAAA,CACWghL,EACAxxB,EACAQ,EACAixB,GAHA,KAAKD,MAALA,EACA,KAAKxxB,MAALA,EACA,KAAYQ,aAAZA,EACA,KAAcixB,eAAdA,CAAc,CAGzB,OAAI1/K,GACF,OAAIoqJ,GAAY1tJ,KAAKuxJ,OACZ,KAEAtE,GAAYjtJ,KAAKuxJ,MAAM,CAIlC,OAAIz1I,GACF,OAAO,IAAImnK,GAAcjjL,KAAK+iL,MAAO/iL,KAAKuxJ,MAAO,CAGnD,oBAAIO,GACF,MAAM1nJ,EAAMo6J,GAA0BxkK,KAAK+xJ,cACrClwI,EAAK41H,EAAkBrtI,GAC7B,MAAc,OAAPyX,EAAc,UAAYA,CAAG,CAMtC,gBAAI4vI,GACF,OAAO+S,GAA0BxkK,KAAK+xJ,aAAc,CAGtDmxB,OAAAA,CAAQ72D,GAEN,GADAA,GAAQx+G,EAAAA,EAAAA,IAAmBw+G,KACrBA,aAAiBy2D,IACrB,OAAO,EAGT,MAAMK,EAAWnjL,KAAK+iL,QAAU12D,EAAM02D,MAChCK,EAAWt1B,GAAW9tJ,KAAKuxJ,MAAOllC,EAAMklC,OACxC8xB,EACJrjL,KAAK8xJ,mBAAqBzlC,EAAMylC,iBAElC,OAAOqxB,GAAYC,GAAYC,CAAoB,CAGrD/+E,MAAAA,GACE,OAAOtkG,KAAK4e,UAAW,CAGzBA,QAAAA,GACE,OAAO5e,KAAK+iL,MAAMnkK,WAAasuI,GAAuBltJ,KAAKuxJ,MAAO,EAiGhE,MAAO0xB,WAAsBH,GAEjC/gL,WAAAA,CAAYm7K,EAAY3pJ,GACtB3qB,MAAMs0K,EAAM3pJ,EAAM,IAAIkvI,IAAe,EAAO,CAG9C,UAAIn0J,GACF,MAAMgtH,EAAa+xB,GAAWrtJ,KAAKuxJ,OACnC,OAAsB,OAAfj2B,EACH,KACA,IAAI2nD,GAAcjjL,KAAK+iL,MAAOznD,EAAY,CAGhD,QAAI1yG,GACF,IAAI9M,EAAqB9b,KACzB,MAAsB,OAAf8b,EAAIxN,OACTwN,EAAMA,EAAIxN,OAEZ,OAAOwN,CAAI,EAyNC,SAAAA,GAAI8sH,EAAcr1G,GAGhC,OAFAq1G,GAAK/6H,EAAAA,EAAAA,IAAmB+6H,GACxBA,EAAG06C,iBAAiB,YACJ1gL,IAAT2wB,EAAqBhK,GAAMq/G,EAAG26C,MAAOhwJ,GAAQq1G,EAAG26C,KACzD,CAqDgB,SAAAh6J,GACdjb,EACAilB,GAQA,OANAjlB,GAAST,EAAAA,EAAAA,IAAmBS,GACO,OAA/Bw+I,GAAax+I,EAAOijJ,OACtB0pB,GAAuB,QAAS,OAAQ1nJ,GAAM,GAE9CwnJ,GAAmB,QAAS,OAAQxnJ,GAAM,GAErC,IAAI0vJ,GAAc30K,EAAOy0K,MAAOx1B,GAAUj/I,EAAOijJ,MAAOh+H,GACjE,CAyCgB,SAAAlyB,GACdiN,EACA5L,GAEA4L,GAAST,EAAAA,EAAAA,IAAmBS,GAC5B4sK,GAAqB,OAAQ5sK,EAAOijJ,OACpCopB,GAAwB,OAAQj4K,EAAO4L,EAAOijJ,OAAO,GACrD,MAAMznG,EAAMm0H,GAAe3vK,EAAOy0K,OAC5B/gL,EAAOygL,GAAW34H,GAQlB05H,EAAkDj6J,GACtDjb,EACAtM,GAEIyhL,EAAUl6J,GAAMjb,EAAQtM,GAE9B,IAAI0D,EASJ,OAPEA,EADW,MAAThD,EACQ2P,GAAIoxK,EAAS/gL,GAAOif,MAAK,IAAM8hK,IAE/B99K,QAAQF,QAAQg+K,GAG5BD,EAAgB7hK,KAAOjc,EAAQic,KAAK/P,KAAKlM,GACzC89K,EAAgB19K,MAAQJ,EAAQic,KAAK/P,KAAKlM,OAAS9C,GAC5C4gL,CACT,CAkDgB,SAAAnxK,GAAIyJ,EAAwBpZ,GAC1CoZ,GAAMjO,EAAAA,EAAAA,IAAmBiO,GACzBo/J,GAAqB,MAAOp/J,EAAIy1I,OAChCopB,GAAwB,MAAOj4K,EAAOoZ,EAAIy1I,OAAO,GACjD,MAAMrf,EAAW,IAAI3sI,EAAAA,GAQrB,OAPAm5K,GACE5iK,EAAIinK,MACJjnK,EAAIy1I,MACJ7uJ,EACc,KACdwvI,EAAStsI,cAAa,UAEjBssI,EAASxsI,OAClB,CAwiDAgwK,GAAiCuN,IACjCjN,GAAgCiN;;;;;;;;;;;;;;;;;AC1pEhC,MAAMS,GAAsC,kCAKtCC,GAIF,CAAC,EAKL,IAAIC,IAAgB,EAKpB,SAASC,GACP3G,EACAn4K,EACAG,EACA4+K,GAEA5G,EAAK11B,UAAY,IAAIpM,GACnB,GAAGr2I,KAAQG,KACG,EACdg4K,EAAK11B,UAAUn7H,UACf6wJ,EAAK11B,UAAUnM,cACf6hC,EAAK11B,UAAUlM,UACf4hC,EAAK11B,UAAUjM,eACf2hC,EAAK11B,UAAUhM,+BACM,GAGnBsoC,IACF5G,EAAK1tB,mBAAqBs0B,EAE9B,CAMM,SAAUC,GACd59I,EACA69I,EACAzqC,EACA7yC,EACA40C,GAEA,IAAI2oC,EAA4Bv9E,GAAOvgE,EAAI70B,QAAQ4yK,iBACrCthL,IAAVqhL,IACG99I,EAAI70B,QAAQrL,WACfwwI,EACE,kHAKJ7B,EAAI,kCAAmCzuG,EAAI70B,QAAQrL,WACnDg+K,EAAQ,GAAG99I,EAAI70B,QAAQrL,yCAGzB,IAGIk+K,EAEAC,EALAhJ,EAAY0G,GAAcmC,EAAO3oC,GACjCY,EAAWk/B,EAAUl/B,SAKF,qBAAZp4I,UACTsgL,EAAiBtgL,CAAAA,SAAAA,aAAAA,SAAAA,KAAY4/K,KAG3BU,GACFD,GAAa,EACbF,EAAQ,UAAUG,QAAqBloC,EAAS7vH,YAChD+uJ,EAAY0G,GAAcmC,EAAO3oC,GACjCY,EAAWk/B,EAAUl/B,UAErBioC,GAAc/I,EAAUl/B,SAASnrC,OAGnC,MAAMszE,EACJ/oC,GAAa6oC,EACT,IAAI7pC,EAAsBA,EAAsBE,OAChD,IAAIV,EAA0B3zG,EAAInkC,KAAMmkC,EAAI70B,QAAS0yK,GAE3D7I,GAAY,gCAAiCC,GACxC1tB,GAAY0tB,EAAU7nJ,OACzBkjH,EACE,4FAKJ,MAAMymC,EAAOoH,GACXpoC,EACA/1G,EACAk+I,EACA,IAAIhrC,EAAsBlzG,EAAInkC,KAAMu3I,IAEtC,OAAO,IAAIgrC,GAASrH,EAAM/2I,EAC5B,CAMA,SAASq+I,GAAsBtH,EAAY/vC,GACzC,MAAMs3C,EAAWd,GAAMx2C,GAElBs3C,GAAYA,EAASvH,EAAK55K,OAAS45K,GACtCzmC,EAAM,YAAYtJ,KAAW+vC,EAAK11B,wCAEpCy3B,GAAc/B,UACPuH,EAASvH,EAAK55K,IACvB,CASA,SAASghL,GACPpoC,EACA/1G,EACAk+I,EACA9qC,GAEA,IAAIkrC,EAAWd,GAAMx9I,EAAInkC,MAEpByiL,IACHA,EAAW,CAAC,EACZd,GAAMx9I,EAAInkC,MAAQyiL,GAGpB,IAAIvH,EAAOuH,EAASvoC,EAASF,eAS7B,OARIkhC,GACFzmC,EACE,2HAGJymC,EAAO,IAAIV,GAAKtgC,EAAU0nC,GAAeS,EAAmB9qC,GAC5DkrC,EAASvoC,EAASF,eAAiBkhC,EAE5BA,CACT,CAWG,MACUqH,GAWXxiL,WAAAA,CACS2iL,EAEEv+I,GAFF,KAAau+I,cAAbA,EAEE,KAAGv+I,IAAHA,EAZF,KAAM,QAAG,WAGlB,KAAgBw+I,kBAAY,CAAM,CAYlC,SAAI5B,GASF,OARK/iL,KAAK2kL,mBACR1H,GACEj9K,KAAK0kL,cACL1kL,KAAKmmC,IAAI70B,QAAQu9H,MACjB7uI,KAAKmmC,IAAI70B,QAAQ,iCAEnBtR,KAAK2kL,kBAAmB,GAEnB3kL,KAAK0kL,aAAc,CAG5B,SAAInB,GAIF,OAHKvjL,KAAK4kL,gBACR5kL,KAAK4kL,cAAgB,IAAI3B,GAAcjjL,KAAK+iL,MAAOl2B,OAE9C7sJ,KAAK4kL,aAAc,CAG5B/xC,OAAAA,GAME,OAL2B,OAAvB7yI,KAAK4kL,gBACPJ,GAAsBxkL,KAAK+iL,MAAO/iL,KAAKmmC,IAAInkC,MAC3ChC,KAAK0kL,cAAgB,KACrB1kL,KAAK4kL,cAAgB,MAEhBj/K,QAAQF,SAAU,CAG3B69K,gBAAAA,CAAiBuB,GACY,OAAvB7kL,KAAK4kL,eACPnuC,EAAM,eAAiBouC,EAAU,0BAA0B,EAwC9D,SACaC,GACd3+I,GAAmBsnG,EAAAA,EAAAA,MACnB/mC,GAEA,MAAMkiC,GAAK0D,EAAAA,EAAAA,IAAanmG,EAAK,YAAYwjG,aAAa,CACpDoI,WAAYrrC,IAEd,IAAKkiC,EAAG+7C,iBAAkB,CACxB,MAAMI,GAAWjgL,EAAAA,EAAAA,IAAkC,YAC/CigL,GACFC,GAAwBp8C,KAAOm8C,EAAS,CAG5C,OAAOn8C,CACT,CAaM,SAAUo8C,GACdp8C,EACA7jI,EACAG,EACAoM,EAEI,CAAC,GAELs3H,GAAK/6H,EAAAA,EAAAA,IAAmB+6H,GACxBA,EAAG06C,iBAAiB,eAChB16C,EAAG+7C,kBACLluC,EACE,0EAIJ,MAAMymC,EAAOt0C,EAAG87C,cAChB,IAAIZ,EACJ,GAAI5G,EAAK11B,UAAUlM,UACbhqI,EAAQ2zK,eACVxuC,EACE,sJAGJqtC,EAAgB,IAAIxpC,EAAsBA,EAAsBE,YAC3D,GAAIlpI,EAAQ2zK,cAAe,CAChC,MAAMj/K,EAC6B,kBAA1BsL,EAAQ2zK,cACX3zK,EAAQ2zK,eACRl/K,EAAAA,EAAAA,IAAoBuL,EAAQ2zK,cAAer8C,EAAGziG,IAAI70B,QAAQrL,WAChE69K,EAAgB,IAAIxpC,EAAsBt0I,EAAO,CAInD69K,GAAiC3G,EAAMn4K,EAAMG,EAAM4+K,EACrD;;;;;;;;;;;;;;;;;AC5VM,SAAUoB,GAAiBt3C,GAC/BiH,EAAcswC,EAAAA,KACdh5C,EAAAA,EAAAA,IACE,IAAI1kH,EAAAA,GACF,YACA,CAACwE,GAAaqmH,mBAAoB5rC,MAChC,MAAMvgE,EAAMla,EAAUugH,YAAY,OAAO7C,eACnCq6C,EAAe/3J,EAAUugH,YAAY,iBACrC+M,EAAmBttH,EAAUugH,YAAY,sBAC/C,OAAOu3C,GACL59I,EACA69I,EACAzqC,EACA7yC,EACD,GACD,UAEF8qC,sBAAqB,KAEzB9D,EAAAA,EAAAA,IAAgB1rI,EAAMslC,EAASsmG,IAE/BF,EAAAA,EAAAA,IAAgB1rI,EAAMslC,EAAS,UACjC;;;;;;;;;;;;;;;;GCzBC8nH,GAAqBtmJ,UAAkBs8K,aAAe,SACrDn6B,EACAC,GAEAlrJ,KAAKspJ,YAAY,IAAK,CAAE7qJ,EAAGwsJ,GAAcC,EAC3C,EAGCkE,GAAqBtmJ,UAAkBu8K,KAAO,SAC7Ch8K,EACAi8K,GAEAtlL,KAAKspJ,YAAY,OAAQ,CAAEx8I,EAAGzD,GAAQi8K,EACxC,ECXAJ,I","sources":["webpack://lexi_concordia/../src/constants.ts","webpack://lexi_concordia/../src/assert.ts","webpack://lexi_concordia/../src/crypt.ts","webpack://lexi_concordia/../src/deepCopy.ts","webpack://lexi_concordia/../src/global.ts","webpack://lexi_concordia/../src/defaults.ts","webpack://lexi_concordia/../src/deferred.ts","webpack://lexi_concordia/../src/emulator.ts","webpack://lexi_concordia/../src/environment.ts","webpack://lexi_concordia/../src/errors.ts","webpack://lexi_concordia/../src/json.ts","webpack://lexi_concordia/../src/jwt.ts","webpack://lexi_concordia/../src/obj.ts","webpack://lexi_concordia/../src/query.ts","webpack://lexi_concordia/../src/sha1.ts","webpack://lexi_concordia/../src/validation.ts","webpack://lexi_concordia/../src/utf8.ts","webpack://lexi_concordia/../src/compat.ts","webpack://lexi_concordia/./node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js","webpack://lexi_concordia/./node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js","webpack://lexi_concordia/./node_modules/@vue/runtime-dom/dist/runtime-dom.esm-bundler.js","webpack://lexi_concordia/./node_modules/@vue/shared/dist/shared.esm-bundler.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/enums.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/dom-utils/getWindow.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/modifiers/applyStyles.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/utils/getBasePlacement.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/utils/math.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/utils/userAgent.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/dom-utils/contains.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/utils/within.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/utils/expandToHashMap.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/modifiers/arrow.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/utils/getVariation.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/modifiers/computeStyles.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/modifiers/eventListeners.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/utils/rectToClientRect.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/utils/computeOffsets.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/utils/detectOverflow.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/modifiers/flip.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/modifiers/hide.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/modifiers/offset.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/utils/getAltAxis.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/utils/orderModifiers.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/utils/debounce.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/utils/mergeByName.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/createPopper.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/popper.js","webpack://lexi_concordia/./node_modules/@popperjs/core/lib/popper-lite.js","webpack://lexi_concordia/../../js/src/dom/data.js","webpack://lexi_concordia/../../js/src/util/index.js","webpack://lexi_concordia/../../js/src/dom/event-handler.js","webpack://lexi_concordia/../../js/src/dom/manipulator.js","webpack://lexi_concordia/../../js/src/util/config.js","webpack://lexi_concordia/../../js/src/base-component.js","webpack://lexi_concordia/../../js/src/dom/selector-engine.js","webpack://lexi_concordia/../../js/src/util/component-functions.js","webpack://lexi_concordia/../../js/src/alert.js","webpack://lexi_concordia/../../js/src/button.js","webpack://lexi_concordia/../../js/src/util/swipe.js","webpack://lexi_concordia/../../js/src/carousel.js","webpack://lexi_concordia/../../js/src/collapse.js","webpack://lexi_concordia/../../js/src/dropdown.js","webpack://lexi_concordia/../../js/src/util/backdrop.js","webpack://lexi_concordia/../../js/src/util/focustrap.js","webpack://lexi_concordia/../../js/src/util/scrollbar.js","webpack://lexi_concordia/../../js/src/modal.js","webpack://lexi_concordia/../../js/src/offcanvas.js","webpack://lexi_concordia/../../js/src/util/sanitizer.js","webpack://lexi_concordia/../../js/src/util/template-factory.js","webpack://lexi_concordia/../../js/src/tooltip.js","webpack://lexi_concordia/../../js/src/popover.js","webpack://lexi_concordia/../../js/src/scrollspy.js","webpack://lexi_concordia/../../js/src/tab.js","webpack://lexi_concordia/../../js/src/toast.js","webpack://lexi_concordia/./node_modules/vue-loader/dist/exportHelper.js","webpack://lexi_concordia/./node_modules/vue-router/index.js","webpack://lexi_concordia/./node_modules/vue/dist/vue.runtime.esm-bundler.js","webpack://lexi_concordia/./node_modules/axios/dist/browser/axios.cjs","webpack://lexi_concordia/./node_modules/core-js/internals/a-callable.js","webpack://lexi_concordia/./node_modules/core-js/internals/a-possible-prototype.js","webpack://lexi_concordia/./node_modules/core-js/internals/a-set.js","webpack://lexi_concordia/./node_modules/core-js/internals/an-instance.js","webpack://lexi_concordia/./node_modules/core-js/internals/an-object.js","webpack://lexi_concordia/./node_modules/core-js/internals/array-includes.js","webpack://lexi_concordia/./node_modules/core-js/internals/array-set-length.js","webpack://lexi_concordia/./node_modules/core-js/internals/classof-raw.js","webpack://lexi_concordia/./node_modules/core-js/internals/classof.js","webpack://lexi_concordia/./node_modules/core-js/internals/copy-constructor-properties.js","webpack://lexi_concordia/./node_modules/core-js/internals/create-non-enumerable-property.js","webpack://lexi_concordia/./node_modules/core-js/internals/create-property-descriptor.js","webpack://lexi_concordia/./node_modules/core-js/internals/define-built-in-accessor.js","webpack://lexi_concordia/./node_modules/core-js/internals/define-built-in.js","webpack://lexi_concordia/./node_modules/core-js/internals/define-global-property.js","webpack://lexi_concordia/./node_modules/core-js/internals/descriptors.js","webpack://lexi_concordia/./node_modules/core-js/internals/document-create-element.js","webpack://lexi_concordia/./node_modules/core-js/internals/does-not-exceed-safe-integer.js","webpack://lexi_concordia/./node_modules/core-js/internals/dom-exception-constants.js","webpack://lexi_concordia/./node_modules/core-js/internals/engine-user-agent.js","webpack://lexi_concordia/./node_modules/core-js/internals/engine-v8-version.js","webpack://lexi_concordia/./node_modules/core-js/internals/enum-bug-keys.js","webpack://lexi_concordia/./node_modules/core-js/internals/error-stack-clear.js","webpack://lexi_concordia/./node_modules/core-js/internals/export.js","webpack://lexi_concordia/./node_modules/core-js/internals/fails.js","webpack://lexi_concordia/./node_modules/core-js/internals/function-bind-native.js","webpack://lexi_concordia/./node_modules/core-js/internals/function-call.js","webpack://lexi_concordia/./node_modules/core-js/internals/function-name.js","webpack://lexi_concordia/./node_modules/core-js/internals/function-uncurry-this-accessor.js","webpack://lexi_concordia/./node_modules/core-js/internals/function-uncurry-this.js","webpack://lexi_concordia/./node_modules/core-js/internals/get-built-in.js","webpack://lexi_concordia/./node_modules/core-js/internals/get-iterator-direct.js","webpack://lexi_concordia/./node_modules/core-js/internals/get-method.js","webpack://lexi_concordia/./node_modules/core-js/internals/get-set-record.js","webpack://lexi_concordia/./node_modules/core-js/internals/global.js","webpack://lexi_concordia/./node_modules/core-js/internals/has-own-property.js","webpack://lexi_concordia/./node_modules/core-js/internals/hidden-keys.js","webpack://lexi_concordia/./node_modules/core-js/internals/ie8-dom-define.js","webpack://lexi_concordia/./node_modules/core-js/internals/indexed-object.js","webpack://lexi_concordia/./node_modules/core-js/internals/inherit-if-required.js","webpack://lexi_concordia/./node_modules/core-js/internals/inspect-source.js","webpack://lexi_concordia/./node_modules/core-js/internals/internal-state.js","webpack://lexi_concordia/./node_modules/core-js/internals/is-array.js","webpack://lexi_concordia/./node_modules/core-js/internals/is-callable.js","webpack://lexi_concordia/./node_modules/core-js/internals/is-forced.js","webpack://lexi_concordia/./node_modules/core-js/internals/is-null-or-undefined.js","webpack://lexi_concordia/./node_modules/core-js/internals/is-object.js","webpack://lexi_concordia/./node_modules/core-js/internals/is-possible-prototype.js","webpack://lexi_concordia/./node_modules/core-js/internals/is-pure.js","webpack://lexi_concordia/./node_modules/core-js/internals/is-symbol.js","webpack://lexi_concordia/./node_modules/core-js/internals/iterate-simple.js","webpack://lexi_concordia/./node_modules/core-js/internals/iterator-close.js","webpack://lexi_concordia/./node_modules/core-js/internals/length-of-array-like.js","webpack://lexi_concordia/./node_modules/core-js/internals/make-built-in.js","webpack://lexi_concordia/./node_modules/core-js/internals/math-trunc.js","webpack://lexi_concordia/./node_modules/core-js/internals/normalize-string-argument.js","webpack://lexi_concordia/./node_modules/core-js/internals/object-define-property.js","webpack://lexi_concordia/./node_modules/core-js/internals/object-get-own-property-descriptor.js","webpack://lexi_concordia/./node_modules/core-js/internals/object-get-own-property-names.js","webpack://lexi_concordia/./node_modules/core-js/internals/object-get-own-property-symbols.js","webpack://lexi_concordia/./node_modules/core-js/internals/object-is-prototype-of.js","webpack://lexi_concordia/./node_modules/core-js/internals/object-keys-internal.js","webpack://lexi_concordia/./node_modules/core-js/internals/object-property-is-enumerable.js","webpack://lexi_concordia/./node_modules/core-js/internals/object-set-prototype-of.js","webpack://lexi_concordia/./node_modules/core-js/internals/ordinary-to-primitive.js","webpack://lexi_concordia/./node_modules/core-js/internals/own-keys.js","webpack://lexi_concordia/./node_modules/core-js/internals/require-object-coercible.js","webpack://lexi_concordia/./node_modules/core-js/internals/set-clone.js","webpack://lexi_concordia/./node_modules/core-js/internals/set-difference.js","webpack://lexi_concordia/./node_modules/core-js/internals/set-helpers.js","webpack://lexi_concordia/./node_modules/core-js/internals/set-intersection.js","webpack://lexi_concordia/./node_modules/core-js/internals/set-is-disjoint-from.js","webpack://lexi_concordia/./node_modules/core-js/internals/set-is-subset-of.js","webpack://lexi_concordia/./node_modules/core-js/internals/set-is-superset-of.js","webpack://lexi_concordia/./node_modules/core-js/internals/set-iterate.js","webpack://lexi_concordia/./node_modules/core-js/internals/set-method-accept-set-like.js","webpack://lexi_concordia/./node_modules/core-js/internals/set-size.js","webpack://lexi_concordia/./node_modules/core-js/internals/set-symmetric-difference.js","webpack://lexi_concordia/./node_modules/core-js/internals/set-union.js","webpack://lexi_concordia/./node_modules/core-js/internals/shared-key.js","webpack://lexi_concordia/./node_modules/core-js/internals/shared-store.js","webpack://lexi_concordia/./node_modules/core-js/internals/shared.js","webpack://lexi_concordia/./node_modules/core-js/internals/symbol-constructor-detection.js","webpack://lexi_concordia/./node_modules/core-js/internals/to-absolute-index.js","webpack://lexi_concordia/./node_modules/core-js/internals/to-indexed-object.js","webpack://lexi_concordia/./node_modules/core-js/internals/to-integer-or-infinity.js","webpack://lexi_concordia/./node_modules/core-js/internals/to-length.js","webpack://lexi_concordia/./node_modules/core-js/internals/to-object.js","webpack://lexi_concordia/./node_modules/core-js/internals/to-primitive.js","webpack://lexi_concordia/./node_modules/core-js/internals/to-property-key.js","webpack://lexi_concordia/./node_modules/core-js/internals/to-string-tag-support.js","webpack://lexi_concordia/./node_modules/core-js/internals/to-string.js","webpack://lexi_concordia/./node_modules/core-js/internals/try-to-string.js","webpack://lexi_concordia/./node_modules/core-js/internals/uid.js","webpack://lexi_concordia/./node_modules/core-js/internals/use-symbol-as-uid.js","webpack://lexi_concordia/./node_modules/core-js/internals/v8-prototype-define-bug.js","webpack://lexi_concordia/./node_modules/core-js/internals/validate-arguments-length.js","webpack://lexi_concordia/./node_modules/core-js/internals/weak-map-basic-detection.js","webpack://lexi_concordia/./node_modules/core-js/internals/well-known-symbol.js","webpack://lexi_concordia/./node_modules/core-js/modules/es.array.push.js","webpack://lexi_concordia/./node_modules/core-js/modules/es.set.difference.v2.js","webpack://lexi_concordia/./node_modules/core-js/modules/es.set.intersection.v2.js","webpack://lexi_concordia/./node_modules/core-js/modules/es.set.is-disjoint-from.v2.js","webpack://lexi_concordia/./node_modules/core-js/modules/es.set.is-subset-of.v2.js","webpack://lexi_concordia/./node_modules/core-js/modules/es.set.is-superset-of.v2.js","webpack://lexi_concordia/./node_modules/core-js/modules/es.set.symmetric-difference.v2.js","webpack://lexi_concordia/./node_modules/core-js/modules/es.set.union.v2.js","webpack://lexi_concordia/./node_modules/core-js/modules/esnext.set.difference.v2.js","webpack://lexi_concordia/./node_modules/core-js/modules/esnext.set.intersection.v2.js","webpack://lexi_concordia/./node_modules/core-js/modules/esnext.set.is-disjoint-from.v2.js","webpack://lexi_concordia/./node_modules/core-js/modules/esnext.set.is-subset-of.v2.js","webpack://lexi_concordia/./node_modules/core-js/modules/esnext.set.is-superset-of.v2.js","webpack://lexi_concordia/./node_modules/core-js/modules/esnext.set.symmetric-difference.v2.js","webpack://lexi_concordia/./node_modules/core-js/modules/esnext.set.union.v2.js","webpack://lexi_concordia/./node_modules/core-js/modules/web.dom-exception.stack.js","webpack://lexi_concordia/./node_modules/core-js/modules/web.url-search-params.delete.js","webpack://lexi_concordia/./node_modules/core-js/modules/web.url-search-params.has.js","webpack://lexi_concordia/./node_modules/core-js/modules/web.url-search-params.size.js","webpack://lexi_concordia/./node_modules/vue-router/dist/vue-router.prod.cjs","webpack://lexi_concordia/./node_modules/idb/build/wrap-idb-value.js","webpack://lexi_concordia/./node_modules/idb/build/index.js","webpack://lexi_concordia/../../src/platformLoggerService.ts","webpack://lexi_concordia/../../src/logger.ts","webpack://lexi_concordia/../../src/constants.ts","webpack://lexi_concordia/../../src/internal.ts","webpack://lexi_concordia/../../src/errors.ts","webpack://lexi_concordia/../../src/firebaseApp.ts","webpack://lexi_concordia/../../src/api.ts","webpack://lexi_concordia/../../src/indexeddb.ts","webpack://lexi_concordia/../../src/heartbeatService.ts","webpack://lexi_concordia/../../src/registerCoreComponents.ts","webpack://lexi_concordia/../../src/index.ts","webpack://lexi_concordia/../../src/component.ts","webpack://lexi_concordia/../../src/provider.ts","webpack://lexi_concordia/../../src/component_container.ts","webpack://lexi_concordia/../../index.ts","webpack://lexi_concordia/../src/core/version.ts","webpack://lexi_concordia/../src/core/storage/DOMStorageWrapper.ts","webpack://lexi_concordia/../src/core/storage/MemoryStorage.ts","webpack://lexi_concordia/../src/core/storage/storage.ts","webpack://lexi_concordia/../src/core/util/util.ts","webpack://lexi_concordia/../src/core/AppCheckTokenProvider.ts","webpack://lexi_concordia/../src/core/AuthTokenProvider.ts","webpack://lexi_concordia/../src/realtime/Constants.ts","webpack://lexi_concordia/../src/core/RepoInfo.ts","webpack://lexi_concordia/../src/core/stats/StatsCollection.ts","webpack://lexi_concordia/../src/core/stats/StatsManager.ts","webpack://lexi_concordia/../src/realtime/polling/PacketReceiver.ts","webpack://lexi_concordia/../src/realtime/BrowserPollConnection.ts","webpack://lexi_concordia/../src/realtime/WebSocketConnection.ts","webpack://lexi_concordia/../src/realtime/TransportManager.ts","webpack://lexi_concordia/../src/realtime/Connection.ts","webpack://lexi_concordia/../src/core/ServerActions.ts","webpack://lexi_concordia/../src/core/util/EventEmitter.ts","webpack://lexi_concordia/../src/core/util/OnlineMonitor.ts","webpack://lexi_concordia/../src/core/util/Path.ts","webpack://lexi_concordia/../src/core/util/VisibilityMonitor.ts","webpack://lexi_concordia/../src/core/PersistentConnection.ts","webpack://lexi_concordia/../src/core/snap/Node.ts","webpack://lexi_concordia/../src/core/snap/indexes/Index.ts","webpack://lexi_concordia/../src/core/snap/indexes/KeyIndex.ts","webpack://lexi_concordia/../src/core/util/SortedMap.ts","webpack://lexi_concordia/../src/core/snap/comparators.ts","webpack://lexi_concordia/../src/core/snap/snap.ts","webpack://lexi_concordia/../src/core/snap/LeafNode.ts","webpack://lexi_concordia/../src/core/snap/indexes/PriorityIndex.ts","webpack://lexi_concordia/../src/core/snap/childSet.ts","webpack://lexi_concordia/../src/core/snap/IndexMap.ts","webpack://lexi_concordia/../src/core/snap/ChildrenNode.ts","webpack://lexi_concordia/../src/core/snap/nodeFromJSON.ts","webpack://lexi_concordia/../src/core/snap/indexes/PathIndex.ts","webpack://lexi_concordia/../src/core/snap/indexes/ValueIndex.ts","webpack://lexi_concordia/../src/core/view/Change.ts","webpack://lexi_concordia/../src/core/view/QueryParams.ts","webpack://lexi_concordia/../src/core/ReadonlyRestClient.ts","webpack://lexi_concordia/../src/core/SnapshotHolder.ts","webpack://lexi_concordia/../src/core/SparseSnapshotTree.ts","webpack://lexi_concordia/../src/core/stats/StatsListener.ts","webpack://lexi_concordia/../src/core/stats/StatsReporter.ts","webpack://lexi_concordia/../src/core/operation/Operation.ts","webpack://lexi_concordia/../src/core/operation/AckUserWrite.ts","webpack://lexi_concordia/../src/core/operation/Overwrite.ts","webpack://lexi_concordia/../src/core/operation/Merge.ts","webpack://lexi_concordia/../src/core/view/CacheNode.ts","webpack://lexi_concordia/../src/core/view/EventGenerator.ts","webpack://lexi_concordia/../src/core/view/ViewCache.ts","webpack://lexi_concordia/../src/core/util/ImmutableTree.ts","webpack://lexi_concordia/../src/core/CompoundWrite.ts","webpack://lexi_concordia/../src/core/WriteTree.ts","webpack://lexi_concordia/../src/core/view/ChildChangeAccumulator.ts","webpack://lexi_concordia/../src/core/view/CompleteChildSource.ts","webpack://lexi_concordia/../src/core/view/ViewProcessor.ts","webpack://lexi_concordia/../src/core/view/View.ts","webpack://lexi_concordia/../src/core/SyncPoint.ts","webpack://lexi_concordia/../src/core/SyncTree.ts","webpack://lexi_concordia/../src/core/util/ServerValues.ts","webpack://lexi_concordia/../src/core/util/Tree.ts","webpack://lexi_concordia/../src/core/util/validation.ts","webpack://lexi_concordia/../src/core/view/EventQueue.ts","webpack://lexi_concordia/../src/core/Repo.ts","webpack://lexi_concordia/../src/core/util/libs/parser.ts","webpack://lexi_concordia/../src/core/util/NextPushId.ts","webpack://lexi_concordia/../src/api/Reference_impl.ts","webpack://lexi_concordia/../src/api/Database.ts","webpack://lexi_concordia/../src/register.ts","webpack://lexi_concordia/../src/api/test_access.ts","webpack://lexi_concordia/../src/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Firebase constants. Some of these (@defines) can be overridden at compile-time.\n */\n\nexport const CONSTANTS = {\n /**\n * @define {boolean} Whether this is the client Node.js SDK.\n */\n NODE_CLIENT: false,\n /**\n * @define {boolean} Whether this is the Admin Node.js SDK.\n */\n NODE_ADMIN: false,\n\n /**\n * Firebase SDK Version\n */\n SDK_VERSION: '${JSCORE_VERSION}'\n};\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CONSTANTS } from './constants';\n\n/**\n * Throws an error if the provided assertion is falsy\n */\nexport const assert = function (assertion: unknown, message: string): void {\n if (!assertion) {\n throw assertionError(message);\n }\n};\n\n/**\n * Returns an Error object suitable for throwing.\n */\nexport const assertionError = function (message: string): Error {\n return new Error(\n 'Firebase Database (' +\n CONSTANTS.SDK_VERSION +\n ') INTERNAL ASSERT FAILED: ' +\n message\n );\n};\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst stringToByteArray = function (str: string): number[] {\n // TODO(user): Use native implementations if/when available\n const out: number[] = [];\n let p = 0;\n for (let i = 0; i < str.length; i++) {\n let c = str.charCodeAt(i);\n if (c < 128) {\n out[p++] = c;\n } else if (c < 2048) {\n out[p++] = (c >> 6) | 192;\n out[p++] = (c & 63) | 128;\n } else if (\n (c & 0xfc00) === 0xd800 &&\n i + 1 < str.length &&\n (str.charCodeAt(i + 1) & 0xfc00) === 0xdc00\n ) {\n // Surrogate Pair\n c = 0x10000 + ((c & 0x03ff) << 10) + (str.charCodeAt(++i) & 0x03ff);\n out[p++] = (c >> 18) | 240;\n out[p++] = ((c >> 12) & 63) | 128;\n out[p++] = ((c >> 6) & 63) | 128;\n out[p++] = (c & 63) | 128;\n } else {\n out[p++] = (c >> 12) | 224;\n out[p++] = ((c >> 6) & 63) | 128;\n out[p++] = (c & 63) | 128;\n }\n }\n return out;\n};\n\n/**\n * Turns an array of numbers into the string given by the concatenation of the\n * characters to which the numbers correspond.\n * @param bytes Array of numbers representing characters.\n * @return Stringification of the array.\n */\nconst byteArrayToString = function (bytes: number[]): string {\n // TODO(user): Use native implementations if/when available\n const out: string[] = [];\n let pos = 0,\n c = 0;\n while (pos < bytes.length) {\n const c1 = bytes[pos++];\n if (c1 < 128) {\n out[c++] = String.fromCharCode(c1);\n } else if (c1 > 191 && c1 < 224) {\n const c2 = bytes[pos++];\n out[c++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));\n } else if (c1 > 239 && c1 < 365) {\n // Surrogate Pair\n const c2 = bytes[pos++];\n const c3 = bytes[pos++];\n const c4 = bytes[pos++];\n const u =\n (((c1 & 7) << 18) | ((c2 & 63) << 12) | ((c3 & 63) << 6) | (c4 & 63)) -\n 0x10000;\n out[c++] = String.fromCharCode(0xd800 + (u >> 10));\n out[c++] = String.fromCharCode(0xdc00 + (u & 1023));\n } else {\n const c2 = bytes[pos++];\n const c3 = bytes[pos++];\n out[c++] = String.fromCharCode(\n ((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)\n );\n }\n }\n return out.join('');\n};\n\ninterface Base64 {\n byteToCharMap_: { [key: number]: string } | null;\n charToByteMap_: { [key: string]: number } | null;\n byteToCharMapWebSafe_: { [key: number]: string } | null;\n charToByteMapWebSafe_: { [key: string]: number } | null;\n ENCODED_VALS_BASE: string;\n readonly ENCODED_VALS: string;\n readonly ENCODED_VALS_WEBSAFE: string;\n HAS_NATIVE_SUPPORT: boolean;\n encodeByteArray(input: number[] | Uint8Array, webSafe?: boolean): string;\n encodeString(input: string, webSafe?: boolean): string;\n decodeString(input: string, webSafe: boolean): string;\n decodeStringToByteArray(input: string, webSafe: boolean): number[];\n init_(): void;\n}\n\n// We define it as an object literal instead of a class because a class compiled down to es5 can't\n// be treeshaked. https://github.com/rollup/rollup/issues/1691\n// Static lookup maps, lazily populated by init_()\n// TODO(dlarocque): Define this as a class, since we no longer target ES5.\nexport const base64: Base64 = {\n /**\n * Maps bytes to characters.\n */\n byteToCharMap_: null,\n\n /**\n * Maps characters to bytes.\n */\n charToByteMap_: null,\n\n /**\n * Maps bytes to websafe characters.\n * @private\n */\n byteToCharMapWebSafe_: null,\n\n /**\n * Maps websafe characters to bytes.\n * @private\n */\n charToByteMapWebSafe_: null,\n\n /**\n * Our default alphabet, shared between\n * ENCODED_VALS and ENCODED_VALS_WEBSAFE\n */\n ENCODED_VALS_BASE:\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + 'abcdefghijklmnopqrstuvwxyz' + '0123456789',\n\n /**\n * Our default alphabet. Value 64 (=) is special; it means \"nothing.\"\n */\n get ENCODED_VALS() {\n return this.ENCODED_VALS_BASE + '+/=';\n },\n\n /**\n * Our websafe alphabet.\n */\n get ENCODED_VALS_WEBSAFE() {\n return this.ENCODED_VALS_BASE + '-_.';\n },\n\n /**\n * Whether this browser supports the atob and btoa functions. This extension\n * started at Mozilla but is now implemented by many browsers. We use the\n * ASSUME_* variables to avoid pulling in the full useragent detection library\n * but still allowing the standard per-browser compilations.\n *\n */\n HAS_NATIVE_SUPPORT: typeof atob === 'function',\n\n /**\n * Base64-encode an array of bytes.\n *\n * @param input An array of bytes (numbers with\n * value in [0, 255]) to encode.\n * @param webSafe Boolean indicating we should use the\n * alternative alphabet.\n * @return The base64 encoded string.\n */\n encodeByteArray(input: number[] | Uint8Array, webSafe?: boolean): string {\n if (!Array.isArray(input)) {\n throw Error('encodeByteArray takes an array as a parameter');\n }\n\n this.init_();\n\n const byteToCharMap = webSafe\n ? this.byteToCharMapWebSafe_!\n : this.byteToCharMap_!;\n\n const output = [];\n\n for (let i = 0; i < input.length; i += 3) {\n const byte1 = input[i];\n const haveByte2 = i + 1 < input.length;\n const byte2 = haveByte2 ? input[i + 1] : 0;\n const haveByte3 = i + 2 < input.length;\n const byte3 = haveByte3 ? input[i + 2] : 0;\n\n const outByte1 = byte1 >> 2;\n const outByte2 = ((byte1 & 0x03) << 4) | (byte2 >> 4);\n let outByte3 = ((byte2 & 0x0f) << 2) | (byte3 >> 6);\n let outByte4 = byte3 & 0x3f;\n\n if (!haveByte3) {\n outByte4 = 64;\n\n if (!haveByte2) {\n outByte3 = 64;\n }\n }\n\n output.push(\n byteToCharMap[outByte1],\n byteToCharMap[outByte2],\n byteToCharMap[outByte3],\n byteToCharMap[outByte4]\n );\n }\n\n return output.join('');\n },\n\n /**\n * Base64-encode a string.\n *\n * @param input A string to encode.\n * @param webSafe If true, we should use the\n * alternative alphabet.\n * @return The base64 encoded string.\n */\n encodeString(input: string, webSafe?: boolean): string {\n // Shortcut for Mozilla browsers that implement\n // a native base64 encoder in the form of \"btoa/atob\"\n if (this.HAS_NATIVE_SUPPORT && !webSafe) {\n return btoa(input);\n }\n return this.encodeByteArray(stringToByteArray(input), webSafe);\n },\n\n /**\n * Base64-decode a string.\n *\n * @param input to decode.\n * @param webSafe True if we should use the\n * alternative alphabet.\n * @return string representing the decoded value.\n */\n decodeString(input: string, webSafe: boolean): string {\n // Shortcut for Mozilla browsers that implement\n // a native base64 encoder in the form of \"btoa/atob\"\n if (this.HAS_NATIVE_SUPPORT && !webSafe) {\n return atob(input);\n }\n return byteArrayToString(this.decodeStringToByteArray(input, webSafe));\n },\n\n /**\n * Base64-decode a string.\n *\n * In base-64 decoding, groups of four characters are converted into three\n * bytes. If the encoder did not apply padding, the input length may not\n * be a multiple of 4.\n *\n * In this case, the last group will have fewer than 4 characters, and\n * padding will be inferred. If the group has one or two characters, it decodes\n * to one byte. If the group has three characters, it decodes to two bytes.\n *\n * @param input Input to decode.\n * @param webSafe True if we should use the web-safe alphabet.\n * @return bytes representing the decoded value.\n */\n decodeStringToByteArray(input: string, webSafe: boolean): number[] {\n this.init_();\n\n const charToByteMap = webSafe\n ? this.charToByteMapWebSafe_!\n : this.charToByteMap_!;\n\n const output: number[] = [];\n\n for (let i = 0; i < input.length; ) {\n const byte1 = charToByteMap[input.charAt(i++)];\n\n const haveByte2 = i < input.length;\n const byte2 = haveByte2 ? charToByteMap[input.charAt(i)] : 0;\n ++i;\n\n const haveByte3 = i < input.length;\n const byte3 = haveByte3 ? charToByteMap[input.charAt(i)] : 64;\n ++i;\n\n const haveByte4 = i < input.length;\n const byte4 = haveByte4 ? charToByteMap[input.charAt(i)] : 64;\n ++i;\n\n if (byte1 == null || byte2 == null || byte3 == null || byte4 == null) {\n throw new DecodeBase64StringError();\n }\n\n const outByte1 = (byte1 << 2) | (byte2 >> 4);\n output.push(outByte1);\n\n if (byte3 !== 64) {\n const outByte2 = ((byte2 << 4) & 0xf0) | (byte3 >> 2);\n output.push(outByte2);\n\n if (byte4 !== 64) {\n const outByte3 = ((byte3 << 6) & 0xc0) | byte4;\n output.push(outByte3);\n }\n }\n }\n\n return output;\n },\n\n /**\n * Lazy static initialization function. Called before\n * accessing any of the static map variables.\n * @private\n */\n init_() {\n if (!this.byteToCharMap_) {\n this.byteToCharMap_ = {};\n this.charToByteMap_ = {};\n this.byteToCharMapWebSafe_ = {};\n this.charToByteMapWebSafe_ = {};\n\n // We want quick mappings back and forth, so we precompute two maps.\n for (let i = 0; i < this.ENCODED_VALS.length; i++) {\n this.byteToCharMap_[i] = this.ENCODED_VALS.charAt(i);\n this.charToByteMap_[this.byteToCharMap_[i]] = i;\n this.byteToCharMapWebSafe_[i] = this.ENCODED_VALS_WEBSAFE.charAt(i);\n this.charToByteMapWebSafe_[this.byteToCharMapWebSafe_[i]] = i;\n\n // Be forgiving when decoding and correctly decode both encodings.\n if (i >= this.ENCODED_VALS_BASE.length) {\n this.charToByteMap_[this.ENCODED_VALS_WEBSAFE.charAt(i)] = i;\n this.charToByteMapWebSafe_[this.ENCODED_VALS.charAt(i)] = i;\n }\n }\n }\n }\n};\n\n/**\n * An error encountered while decoding base64 string.\n */\nexport class DecodeBase64StringError extends Error {\n readonly name = 'DecodeBase64StringError';\n}\n\n/**\n * URL-safe base64 encoding\n */\nexport const base64Encode = function (str: string): string {\n const utf8Bytes = stringToByteArray(str);\n return base64.encodeByteArray(utf8Bytes, true);\n};\n\n/**\n * URL-safe base64 encoding (without \".\" padding in the end).\n * e.g. Used in JSON Web Token (JWT) parts.\n */\nexport const base64urlEncodeWithoutPadding = function (str: string): string {\n // Use base64url encoding and remove padding in the end (dot characters).\n return base64Encode(str).replace(/\\./g, '');\n};\n\n/**\n * URL-safe base64 decoding\n *\n * NOTE: DO NOT use the global atob() function - it does NOT support the\n * base64Url variant encoding.\n *\n * @param str To be decoded\n * @return Decoded result, if possible\n */\nexport const base64Decode = function (str: string): string | null {\n try {\n return base64.decodeString(str, true);\n } catch (e) {\n console.error('base64Decode failed: ', e);\n }\n return null;\n};\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Do a deep-copy of basic JavaScript Objects or Arrays.\n */\nexport function deepCopy(value: T): T {\n return deepExtend(undefined, value) as T;\n}\n\n/**\n * Copy properties from source to target (recursively allows extension\n * of Objects and Arrays). Scalar values in the target are over-written.\n * If target is undefined, an object of the appropriate type will be created\n * (and returned).\n *\n * We recursively copy all child properties of plain Objects in the source- so\n * that namespace- like dictionaries are merged.\n *\n * Note that the target can be a function, in which case the properties in\n * the source Object are copied onto it as static properties of the Function.\n *\n * Note: we don't merge __proto__ to prevent prototype pollution\n */\nexport function deepExtend(target: unknown, source: unknown): unknown {\n if (!(source instanceof Object)) {\n return source;\n }\n\n switch (source.constructor) {\n case Date:\n // Treat Dates like scalars; if the target date object had any child\n // properties - they will be lost!\n const dateValue = source as Date;\n return new Date(dateValue.getTime());\n\n case Object:\n if (target === undefined) {\n target = {};\n }\n break;\n case Array:\n // Always copy the array source and overwrite the target.\n target = [];\n break;\n\n default:\n // Not a plain Object - treat it as a scalar.\n return source;\n }\n\n for (const prop in source) {\n // use isValidKey to guard against prototype pollution. See https://snyk.io/vuln/SNYK-JS-LODASH-450202\n if (!source.hasOwnProperty(prop) || !isValidKey(prop)) {\n continue;\n }\n (target as Record)[prop] = deepExtend(\n (target as Record)[prop],\n (source as Record)[prop]\n );\n }\n\n return target;\n}\n\nfunction isValidKey(key: string): boolean {\n return key !== '__proto__';\n}\n","/**\n * @license\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Polyfill for `globalThis` object.\n * @returns the `globalThis` object for the given environment.\n * @public\n */\nexport function getGlobal(): typeof globalThis {\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n throw new Error('Unable to locate global object.');\n}\n","/**\n * @license\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { base64Decode } from './crypt';\nimport { getGlobal } from './global';\n\n/**\n * Keys for experimental properties on the `FirebaseDefaults` object.\n * @public\n */\nexport type ExperimentalKey = 'authTokenSyncURL' | 'authIdTokenMaxAge';\n\n/**\n * An object that can be injected into the environment as __FIREBASE_DEFAULTS__,\n * either as a property of globalThis, a shell environment variable, or a\n * cookie.\n *\n * This object can be used to automatically configure and initialize\n * a Firebase app as well as any emulators.\n *\n * @public\n */\nexport interface FirebaseDefaults {\n config?: Record;\n emulatorHosts?: Record;\n _authTokenSyncURL?: string;\n _authIdTokenMaxAge?: number;\n /**\n * Override Firebase's runtime environment detection and\n * force the SDK to act as if it were in the specified environment.\n */\n forceEnvironment?: 'browser' | 'node';\n [key: string]: unknown;\n}\n\ndeclare global {\n // Need `var` for this to work.\n // eslint-disable-next-line no-var\n var __FIREBASE_DEFAULTS__: FirebaseDefaults | undefined;\n}\n\nconst getDefaultsFromGlobal = (): FirebaseDefaults | undefined =>\n getGlobal().__FIREBASE_DEFAULTS__;\n\n/**\n * Attempt to read defaults from a JSON string provided to\n * process(.)env(.)__FIREBASE_DEFAULTS__ or a JSON file whose path is in\n * process(.)env(.)__FIREBASE_DEFAULTS_PATH__\n * The dots are in parens because certain compilers (Vite?) cannot\n * handle seeing that variable in comments.\n * See https://github.com/firebase/firebase-js-sdk/issues/6838\n */\nconst getDefaultsFromEnvVariable = (): FirebaseDefaults | undefined => {\n if (typeof process === 'undefined' || typeof process.env === 'undefined') {\n return;\n }\n const defaultsJsonString = process.env.__FIREBASE_DEFAULTS__;\n if (defaultsJsonString) {\n return JSON.parse(defaultsJsonString);\n }\n};\n\nconst getDefaultsFromCookie = (): FirebaseDefaults | undefined => {\n if (typeof document === 'undefined') {\n return;\n }\n let match;\n try {\n match = document.cookie.match(/__FIREBASE_DEFAULTS__=([^;]+)/);\n } catch (e) {\n // Some environments such as Angular Universal SSR have a\n // `document` object but error on accessing `document.cookie`.\n return;\n }\n const decoded = match && base64Decode(match[1]);\n return decoded && JSON.parse(decoded);\n};\n\n/**\n * Get the __FIREBASE_DEFAULTS__ object. It checks in order:\n * (1) if such an object exists as a property of `globalThis`\n * (2) if such an object was provided on a shell environment variable\n * (3) if such an object exists in a cookie\n * @public\n */\nexport const getDefaults = (): FirebaseDefaults | undefined => {\n try {\n return (\n getDefaultsFromGlobal() ||\n getDefaultsFromEnvVariable() ||\n getDefaultsFromCookie()\n );\n } catch (e) {\n /**\n * Catch-all for being unable to get __FIREBASE_DEFAULTS__ due\n * to any environment case we have not accounted for. Log to\n * info instead of swallowing so we can find these unknown cases\n * and add paths for them if needed.\n */\n console.info(`Unable to get __FIREBASE_DEFAULTS__ due to: ${e}`);\n return;\n }\n};\n\n/**\n * Returns emulator host stored in the __FIREBASE_DEFAULTS__ object\n * for the given product.\n * @returns a URL host formatted like `127.0.0.1:9999` or `[::1]:4000` if available\n * @public\n */\nexport const getDefaultEmulatorHost = (\n productName: string\n): string | undefined => getDefaults()?.emulatorHosts?.[productName];\n\n/**\n * Returns emulator hostname and port stored in the __FIREBASE_DEFAULTS__ object\n * for the given product.\n * @returns a pair of hostname and port like `[\"::1\", 4000]` if available\n * @public\n */\nexport const getDefaultEmulatorHostnameAndPort = (\n productName: string\n): [hostname: string, port: number] | undefined => {\n const host = getDefaultEmulatorHost(productName);\n if (!host) {\n return undefined;\n }\n const separatorIndex = host.lastIndexOf(':'); // Finding the last since IPv6 addr also has colons.\n if (separatorIndex <= 0 || separatorIndex + 1 === host.length) {\n throw new Error(`Invalid host ${host} with no separate hostname and port!`);\n }\n // eslint-disable-next-line no-restricted-globals\n const port = parseInt(host.substring(separatorIndex + 1), 10);\n if (host[0] === '[') {\n // Bracket-quoted `[ipv6addr]:port` => return \"ipv6addr\" (without brackets).\n return [host.substring(1, separatorIndex - 1), port];\n } else {\n return [host.substring(0, separatorIndex), port];\n }\n};\n\n/**\n * Returns Firebase app config stored in the __FIREBASE_DEFAULTS__ object.\n * @public\n */\nexport const getDefaultAppConfig = (): Record | undefined =>\n getDefaults()?.config;\n\n/**\n * Returns an experimental setting on the __FIREBASE_DEFAULTS__ object (properties\n * prefixed by \"_\")\n * @public\n */\nexport const getExperimentalSetting = (\n name: T\n): FirebaseDefaults[`_${T}`] =>\n getDefaults()?.[`_${name}`] as FirebaseDefaults[`_${T}`];\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport class Deferred {\n promise: Promise;\n reject: (value?: unknown) => void = () => {};\n resolve: (value?: unknown) => void = () => {};\n constructor() {\n this.promise = new Promise((resolve, reject) => {\n this.resolve = resolve as (value?: unknown) => void;\n this.reject = reject as (value?: unknown) => void;\n });\n }\n\n /**\n * Our API internals are not promisified and cannot because our callback APIs have subtle expectations around\n * invoking promises inline, which Promises are forbidden to do. This method accepts an optional node-style callback\n * and returns a node-style callback which will resolve or reject the Deferred's promise.\n */\n wrapCallback(\n callback?: (error?: unknown, value?: unknown) => void\n ): (error: unknown, value?: unknown) => void {\n return (error, value?) => {\n if (error) {\n this.reject(error);\n } else {\n this.resolve(value);\n }\n if (typeof callback === 'function') {\n // Attaching noop handler just in case developer wasn't expecting\n // promises\n this.promise.catch(() => {});\n\n // Some of our callbacks don't expect a value and our own tests\n // assert that the parameter length is 1\n if (callback.length === 1) {\n callback(error);\n } else {\n callback(error, value);\n }\n }\n };\n }\n}\n","/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { base64urlEncodeWithoutPadding } from './crypt';\n\n// Firebase Auth tokens contain snake_case claims following the JWT standard / convention.\n/* eslint-disable camelcase */\n\nexport type FirebaseSignInProvider =\n | 'custom'\n | 'email'\n | 'password'\n | 'phone'\n | 'anonymous'\n | 'google.com'\n | 'facebook.com'\n | 'github.com'\n | 'twitter.com'\n | 'microsoft.com'\n | 'apple.com';\n\ninterface FirebaseIdToken {\n // Always set to https://securetoken.google.com/PROJECT_ID\n iss: string;\n\n // Always set to PROJECT_ID\n aud: string;\n\n // The user's unique ID\n sub: string;\n\n // The token issue time, in seconds since epoch\n iat: number;\n\n // The token expiry time, normally 'iat' + 3600\n exp: number;\n\n // The user's unique ID. Must be equal to 'sub'\n user_id: string;\n\n // The time the user authenticated, normally 'iat'\n auth_time: number;\n\n // The sign in provider, only set when the provider is 'anonymous'\n provider_id?: 'anonymous';\n\n // The user's primary email\n email?: string;\n\n // The user's email verification status\n email_verified?: boolean;\n\n // The user's primary phone number\n phone_number?: string;\n\n // The user's display name\n name?: string;\n\n // The user's profile photo URL\n picture?: string;\n\n // Information on all identities linked to this user\n firebase: {\n // The primary sign-in provider\n sign_in_provider: FirebaseSignInProvider;\n\n // A map of providers to the user's list of unique identifiers from\n // each provider\n identities?: { [provider in FirebaseSignInProvider]?: string[] };\n };\n\n // Custom claims set by the developer\n [claim: string]: unknown;\n\n uid?: never; // Try to catch a common mistake of \"uid\" (should be \"sub\" instead).\n}\n\nexport type EmulatorMockTokenOptions = ({ user_id: string } | { sub: string }) &\n Partial;\n\nexport function createMockUserToken(\n token: EmulatorMockTokenOptions,\n projectId?: string\n): string {\n if (token.uid) {\n throw new Error(\n 'The \"uid\" field is no longer supported by mockUserToken. Please use \"sub\" instead for Firebase Auth User ID.'\n );\n }\n // Unsecured JWTs use \"none\" as the algorithm.\n const header = {\n alg: 'none',\n type: 'JWT'\n };\n\n const project = projectId || 'demo-project';\n const iat = token.iat || 0;\n const sub = token.sub || token.user_id;\n if (!sub) {\n throw new Error(\"mockUserToken must contain 'sub' or 'user_id' field!\");\n }\n\n const payload: FirebaseIdToken = {\n // Set all required fields to decent defaults\n iss: `https://securetoken.google.com/${project}`,\n aud: project,\n iat,\n exp: iat + 3600,\n auth_time: iat,\n sub,\n user_id: sub,\n firebase: {\n sign_in_provider: 'custom',\n identities: {}\n },\n\n // Override with user options\n ...token\n };\n\n // Unsecured JWTs use the empty string as a signature.\n const signature = '';\n return [\n base64urlEncodeWithoutPadding(JSON.stringify(header)),\n base64urlEncodeWithoutPadding(JSON.stringify(payload)),\n signature\n ].join('.');\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CONSTANTS } from './constants';\nimport { getDefaults } from './defaults';\n\n/**\n * Type placeholder for `WorkerGlobalScope` from `webworker`\n */\ndeclare class WorkerGlobalScope {}\n\n/**\n * Returns navigator.userAgent string or '' if it's not defined.\n * @return user agent string\n */\nexport function getUA(): string {\n if (\n typeof navigator !== 'undefined' &&\n typeof navigator['userAgent'] === 'string'\n ) {\n return navigator['userAgent'];\n } else {\n return '';\n }\n}\n\n/**\n * Detect Cordova / PhoneGap / Ionic frameworks on a mobile device.\n *\n * Deliberately does not rely on checking `file://` URLs (as this fails PhoneGap\n * in the Ripple emulator) nor Cordova `onDeviceReady`, which would normally\n * wait for a callback.\n */\nexport function isMobileCordova(): boolean {\n return (\n typeof window !== 'undefined' &&\n // @ts-ignore Setting up an broadly applicable index signature for Window\n // just to deal with this case would probably be a bad idea.\n !!(window['cordova'] || window['phonegap'] || window['PhoneGap']) &&\n /ios|iphone|ipod|ipad|android|blackberry|iemobile/i.test(getUA())\n );\n}\n\n/**\n * Detect Node.js.\n *\n * @return true if Node.js environment is detected or specified.\n */\n// Node detection logic from: https://github.com/iliakan/detect-node/\nexport function isNode(): boolean {\n const forceEnvironment = getDefaults()?.forceEnvironment;\n if (forceEnvironment === 'node') {\n return true;\n } else if (forceEnvironment === 'browser') {\n return false;\n }\n\n try {\n return (\n Object.prototype.toString.call(global.process) === '[object process]'\n );\n } catch (e) {\n return false;\n }\n}\n\n/**\n * Detect Browser Environment.\n * Note: This will return true for certain test frameworks that are incompletely\n * mimicking a browser, and should not lead to assuming all browser APIs are\n * available.\n */\nexport function isBrowser(): boolean {\n return typeof window !== 'undefined' || isWebWorker();\n}\n\n/**\n * Detect Web Worker context.\n */\nexport function isWebWorker(): boolean {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n typeof self !== 'undefined' &&\n self instanceof WorkerGlobalScope\n );\n}\n\n/**\n * Detect Cloudflare Worker context.\n */\nexport function isCloudflareWorker(): boolean {\n return (\n typeof navigator !== 'undefined' &&\n navigator.userAgent === 'Cloudflare-Workers'\n );\n}\n\n/**\n * Detect browser extensions (Chrome and Firefox at least).\n */\ninterface BrowserRuntime {\n id?: unknown;\n}\ndeclare const chrome: { runtime?: BrowserRuntime };\ndeclare const browser: { runtime?: BrowserRuntime };\nexport function isBrowserExtension(): boolean {\n const runtime =\n typeof chrome === 'object'\n ? chrome.runtime\n : typeof browser === 'object'\n ? browser.runtime\n : undefined;\n return typeof runtime === 'object' && runtime.id !== undefined;\n}\n\n/**\n * Detect React Native.\n *\n * @return true if ReactNative environment is detected.\n */\nexport function isReactNative(): boolean {\n return (\n typeof navigator === 'object' && navigator['product'] === 'ReactNative'\n );\n}\n\n/** Detects Electron apps. */\nexport function isElectron(): boolean {\n return getUA().indexOf('Electron/') >= 0;\n}\n\n/** Detects Internet Explorer. */\nexport function isIE(): boolean {\n const ua = getUA();\n return ua.indexOf('MSIE ') >= 0 || ua.indexOf('Trident/') >= 0;\n}\n\n/** Detects Universal Windows Platform apps. */\nexport function isUWP(): boolean {\n return getUA().indexOf('MSAppHost/') >= 0;\n}\n\n/**\n * Detect whether the current SDK build is the Node version.\n *\n * @return true if it's the Node SDK build.\n */\nexport function isNodeSdk(): boolean {\n return CONSTANTS.NODE_CLIENT === true || CONSTANTS.NODE_ADMIN === true;\n}\n\n/** Returns true if we are running in Safari. */\nexport function isSafari(): boolean {\n return (\n !isNode() &&\n !!navigator.userAgent &&\n navigator.userAgent.includes('Safari') &&\n !navigator.userAgent.includes('Chrome')\n );\n}\n\n/**\n * This method checks if indexedDB is supported by current browser/service worker context\n * @return true if indexedDB is supported by current browser/service worker context\n */\nexport function isIndexedDBAvailable(): boolean {\n try {\n return typeof indexedDB === 'object';\n } catch (e) {\n return false;\n }\n}\n\n/**\n * This method validates browser/sw context for indexedDB by opening a dummy indexedDB database and reject\n * if errors occur during the database open operation.\n *\n * @throws exception if current browser/sw context can't run idb.open (ex: Safari iframe, Firefox\n * private browsing)\n */\nexport function validateIndexedDBOpenable(): Promise {\n return new Promise((resolve, reject) => {\n try {\n let preExist: boolean = true;\n const DB_CHECK_NAME =\n 'validate-browser-context-for-indexeddb-analytics-module';\n const request = self.indexedDB.open(DB_CHECK_NAME);\n request.onsuccess = () => {\n request.result.close();\n // delete database only when it doesn't pre-exist\n if (!preExist) {\n self.indexedDB.deleteDatabase(DB_CHECK_NAME);\n }\n resolve(true);\n };\n request.onupgradeneeded = () => {\n preExist = false;\n };\n\n request.onerror = () => {\n reject(request.error?.message || '');\n };\n } catch (error) {\n reject(error);\n }\n });\n}\n\n/**\n *\n * This method checks whether cookie is enabled within current browser\n * @return true if cookie is enabled within current browser\n */\nexport function areCookiesEnabled(): boolean {\n if (typeof navigator === 'undefined' || !navigator.cookieEnabled) {\n return false;\n }\n return true;\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Standardized Firebase Error.\n *\n * Usage:\n *\n * // TypeScript string literals for type-safe codes\n * type Err =\n * 'unknown' |\n * 'object-not-found'\n * ;\n *\n * // Closure enum for type-safe error codes\n * // at-enum {string}\n * var Err = {\n * UNKNOWN: 'unknown',\n * OBJECT_NOT_FOUND: 'object-not-found',\n * }\n *\n * let errors: Map = {\n * 'generic-error': \"Unknown error\",\n * 'file-not-found': \"Could not find file: {$file}\",\n * };\n *\n * // Type-safe function - must pass a valid error code as param.\n * let error = new ErrorFactory('service', 'Service', errors);\n *\n * ...\n * throw error.create(Err.GENERIC);\n * ...\n * throw error.create(Err.FILE_NOT_FOUND, {'file': fileName});\n * ...\n * // Service: Could not file file: foo.txt (service/file-not-found).\n *\n * catch (e) {\n * assert(e.message === \"Could not find file: foo.txt.\");\n * if ((e as FirebaseError)?.code === 'service/file-not-found') {\n * console.log(\"Could not read file: \" + e['file']);\n * }\n * }\n */\n\nexport type ErrorMap = {\n readonly [K in ErrorCode]: string;\n};\n\nconst ERROR_NAME = 'FirebaseError';\n\nexport interface StringLike {\n toString(): string;\n}\n\nexport interface ErrorData {\n [key: string]: unknown;\n}\n\n// Based on code from:\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Custom_Error_Types\nexport class FirebaseError extends Error {\n /** The custom name for all FirebaseErrors. */\n readonly name: string = ERROR_NAME;\n\n constructor(\n /** The error code for this error. */\n readonly code: string,\n message: string,\n /** Custom data for this error. */\n public customData?: Record\n ) {\n super(message);\n\n // Fix For ES5\n // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\n // TODO(dlarocque): Replace this with `new.target`: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-2.html#support-for-newtarget\n // which we can now use since we no longer target ES5.\n Object.setPrototypeOf(this, FirebaseError.prototype);\n\n // Maintains proper stack trace for where our error was thrown.\n // Only available on V8.\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, ErrorFactory.prototype.create);\n }\n }\n}\n\nexport class ErrorFactory<\n ErrorCode extends string,\n ErrorParams extends { readonly [K in ErrorCode]?: ErrorData } = {}\n> {\n constructor(\n private readonly service: string,\n private readonly serviceName: string,\n private readonly errors: ErrorMap\n ) {}\n\n create(\n code: K,\n ...data: K extends keyof ErrorParams ? [ErrorParams[K]] : []\n ): FirebaseError {\n const customData = (data[0] as ErrorData) || {};\n const fullCode = `${this.service}/${code}`;\n const template = this.errors[code];\n\n const message = template ? replaceTemplate(template, customData) : 'Error';\n // Service Name: Error message (service/code).\n const fullMessage = `${this.serviceName}: ${message} (${fullCode}).`;\n\n const error = new FirebaseError(fullCode, fullMessage, customData);\n\n return error;\n }\n}\n\nfunction replaceTemplate(template: string, data: ErrorData): string {\n return template.replace(PATTERN, (_, key) => {\n const value = data[key];\n return value != null ? String(value) : `<${key}?>`;\n });\n}\n\nconst PATTERN = /\\{\\$([^}]+)}/g;\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Evaluates a JSON string into a javascript object.\n *\n * @param {string} str A string containing JSON.\n * @return {*} The javascript object representing the specified JSON.\n */\nexport function jsonEval(str: string): unknown {\n return JSON.parse(str);\n}\n\n/**\n * Returns JSON representing a javascript object.\n * @param {*} data JavaScript object to be stringified.\n * @return {string} The JSON contents of the object.\n */\nexport function stringify(data: unknown): string {\n return JSON.stringify(data);\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { base64Decode } from './crypt';\nimport { jsonEval } from './json';\n\ninterface Claims {\n [key: string]: {};\n}\n\ninterface DecodedToken {\n header: object;\n claims: Claims;\n data: object;\n signature: string;\n}\n\n/**\n * Decodes a Firebase auth. token into constituent parts.\n *\n * Notes:\n * - May return with invalid / incomplete claims if there's no native base64 decoding support.\n * - Doesn't check if the token is actually valid.\n */\nexport const decode = function (token: string): DecodedToken {\n let header = {},\n claims: Claims = {},\n data = {},\n signature = '';\n\n try {\n const parts = token.split('.');\n header = jsonEval(base64Decode(parts[0]) || '') as object;\n claims = jsonEval(base64Decode(parts[1]) || '') as Claims;\n signature = parts[2];\n data = claims['d'] || {};\n delete claims['d'];\n } catch (e) {}\n\n return {\n header,\n claims,\n data,\n signature\n };\n};\n\ninterface DecodedToken {\n header: object;\n claims: Claims;\n data: object;\n signature: string;\n}\n\n/**\n * Decodes a Firebase auth. token and checks the validity of its time-based claims. Will return true if the\n * token is within the time window authorized by the 'nbf' (not-before) and 'iat' (issued-at) claims.\n *\n * Notes:\n * - May return a false negative if there's no native base64 decoding support.\n * - Doesn't check if the token is actually valid.\n */\nexport const isValidTimestamp = function (token: string): boolean {\n const claims: Claims = decode(token).claims;\n const now: number = Math.floor(new Date().getTime() / 1000);\n let validSince: number = 0,\n validUntil: number = 0;\n\n if (typeof claims === 'object') {\n if (claims.hasOwnProperty('nbf')) {\n validSince = claims['nbf'] as number;\n } else if (claims.hasOwnProperty('iat')) {\n validSince = claims['iat'] as number;\n }\n\n if (claims.hasOwnProperty('exp')) {\n validUntil = claims['exp'] as number;\n } else {\n // token will expire after 24h by default\n validUntil = validSince + 86400;\n }\n }\n\n return (\n !!now &&\n !!validSince &&\n !!validUntil &&\n now >= validSince &&\n now <= validUntil\n );\n};\n\n/**\n * Decodes a Firebase auth. token and returns its issued at time if valid, null otherwise.\n *\n * Notes:\n * - May return null if there's no native base64 decoding support.\n * - Doesn't check if the token is actually valid.\n */\nexport const issuedAtTime = function (token: string): number | null {\n const claims: Claims = decode(token).claims;\n if (typeof claims === 'object' && claims.hasOwnProperty('iat')) {\n return claims['iat'] as number;\n }\n return null;\n};\n\n/**\n * Decodes a Firebase auth. token and checks the validity of its format. Expects a valid issued-at time.\n *\n * Notes:\n * - May return a false negative if there's no native base64 decoding support.\n * - Doesn't check if the token is actually valid.\n */\nexport const isValidFormat = function (token: string): boolean {\n const decoded = decode(token),\n claims = decoded.claims;\n\n return !!claims && typeof claims === 'object' && claims.hasOwnProperty('iat');\n};\n\n/**\n * Attempts to peer into an auth token and determine if it's an admin auth token by looking at the claims portion.\n *\n * Notes:\n * - May return a false negative if there's no native base64 decoding support.\n * - Doesn't check if the token is actually valid.\n */\nexport const isAdmin = function (token: string): boolean {\n const claims: Claims = decode(token).claims;\n return typeof claims === 'object' && claims['admin'] === true;\n};\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport function contains(obj: T, key: string): boolean {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nexport function safeGet(\n obj: T,\n key: K\n): T[K] | undefined {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n return obj[key];\n } else {\n return undefined;\n }\n}\n\nexport function isEmpty(obj: object): obj is {} {\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n return false;\n }\n }\n return true;\n}\n\nexport function map(\n obj: { [key in K]: V },\n fn: (value: V, key: K, obj: { [key in K]: V }) => U,\n contextObj?: unknown\n): { [key in K]: U } {\n const res: Partial<{ [key in K]: U }> = {};\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n res[key] = fn.call(contextObj, obj[key], key, obj);\n }\n }\n return res as { [key in K]: U };\n}\n\n/**\n * Deep equal two objects. Support Arrays and Objects.\n */\nexport function deepEqual(a: object, b: object): boolean {\n if (a === b) {\n return true;\n }\n\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n for (const k of aKeys) {\n if (!bKeys.includes(k)) {\n return false;\n }\n\n const aProp = (a as Record)[k];\n const bProp = (b as Record)[k];\n if (isObject(aProp) && isObject(bProp)) {\n if (!deepEqual(aProp, bProp)) {\n return false;\n }\n } else if (aProp !== bProp) {\n return false;\n }\n }\n\n for (const k of bKeys) {\n if (!aKeys.includes(k)) {\n return false;\n }\n }\n return true;\n}\n\nfunction isObject(thing: unknown): thing is object {\n return thing !== null && typeof thing === 'object';\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Returns a querystring-formatted string (e.g. &arg=val&arg2=val2) from a\n * params object (e.g. {arg: 'val', arg2: 'val2'})\n * Note: You must prepend it with ? when adding it to a URL.\n */\nexport function querystring(querystringParams: {\n [key: string]: string | number;\n}): string {\n const params = [];\n for (const [key, value] of Object.entries(querystringParams)) {\n if (Array.isArray(value)) {\n value.forEach(arrayVal => {\n params.push(\n encodeURIComponent(key) + '=' + encodeURIComponent(arrayVal)\n );\n });\n } else {\n params.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n }\n }\n return params.length ? '&' + params.join('&') : '';\n}\n\n/**\n * Decodes a querystring (e.g. ?arg=val&arg2=val2) into a params object\n * (e.g. {arg: 'val', arg2: 'val2'})\n */\nexport function querystringDecode(querystring: string): Record {\n const obj: Record = {};\n const tokens = querystring.replace(/^\\?/, '').split('&');\n\n tokens.forEach(token => {\n if (token) {\n const [key, value] = token.split('=');\n obj[decodeURIComponent(key)] = decodeURIComponent(value);\n }\n });\n return obj;\n}\n\n/**\n * Extract the query string part of a URL, including the leading question mark (if present).\n */\nexport function extractQuerystring(url: string): string {\n const queryStart = url.indexOf('?');\n if (!queryStart) {\n return '';\n }\n const fragmentStart = url.indexOf('#', queryStart);\n return url.substring(\n queryStart,\n fragmentStart > 0 ? fragmentStart : undefined\n );\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview SHA-1 cryptographic hash.\n * Variable names follow the notation in FIPS PUB 180-3:\n * http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf.\n *\n * Usage:\n * var sha1 = new sha1();\n * sha1.update(bytes);\n * var hash = sha1.digest();\n *\n * Performance:\n * Chrome 23: ~400 Mbit/s\n * Firefox 16: ~250 Mbit/s\n *\n */\n\n/**\n * SHA-1 cryptographic hash constructor.\n *\n * The properties declared here are discussed in the above algorithm document.\n * @constructor\n * @final\n * @struct\n */\nexport class Sha1 {\n /**\n * Holds the previous values of accumulated variables a-e in the compress_\n * function.\n * @private\n */\n private chain_: number[] = [];\n\n /**\n * A buffer holding the partially computed hash result.\n * @private\n */\n private buf_: number[] = [];\n\n /**\n * An array of 80 bytes, each a part of the message to be hashed. Referred to\n * as the message schedule in the docs.\n * @private\n */\n private W_: number[] = [];\n\n /**\n * Contains data needed to pad messages less than 64 bytes.\n * @private\n */\n private pad_: number[] = [];\n\n /**\n * @private {number}\n */\n private inbuf_: number = 0;\n\n /**\n * @private {number}\n */\n private total_: number = 0;\n\n blockSize: number;\n\n constructor() {\n this.blockSize = 512 / 8;\n\n this.pad_[0] = 128;\n for (let i = 1; i < this.blockSize; ++i) {\n this.pad_[i] = 0;\n }\n\n this.reset();\n }\n\n reset(): void {\n this.chain_[0] = 0x67452301;\n this.chain_[1] = 0xefcdab89;\n this.chain_[2] = 0x98badcfe;\n this.chain_[3] = 0x10325476;\n this.chain_[4] = 0xc3d2e1f0;\n\n this.inbuf_ = 0;\n this.total_ = 0;\n }\n\n /**\n * Internal compress helper function.\n * @param buf Block to compress.\n * @param offset Offset of the block in the buffer.\n * @private\n */\n compress_(buf: number[] | Uint8Array | string, offset?: number): void {\n if (!offset) {\n offset = 0;\n }\n\n const W = this.W_;\n\n // get 16 big endian words\n if (typeof buf === 'string') {\n for (let i = 0; i < 16; i++) {\n // TODO(user): [bug 8140122] Recent versions of Safari for Mac OS and iOS\n // have a bug that turns the post-increment ++ operator into pre-increment\n // during JIT compilation. We have code that depends heavily on SHA-1 for\n // correctness and which is affected by this bug, so I've removed all uses\n // of post-increment ++ in which the result value is used. We can revert\n // this change once the Safari bug\n // (https://bugs.webkit.org/show_bug.cgi?id=109036) has been fixed and\n // most clients have been updated.\n W[i] =\n (buf.charCodeAt(offset) << 24) |\n (buf.charCodeAt(offset + 1) << 16) |\n (buf.charCodeAt(offset + 2) << 8) |\n buf.charCodeAt(offset + 3);\n offset += 4;\n }\n } else {\n for (let i = 0; i < 16; i++) {\n W[i] =\n (buf[offset] << 24) |\n (buf[offset + 1] << 16) |\n (buf[offset + 2] << 8) |\n buf[offset + 3];\n offset += 4;\n }\n }\n\n // expand to 80 words\n for (let i = 16; i < 80; i++) {\n const t = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\n W[i] = ((t << 1) | (t >>> 31)) & 0xffffffff;\n }\n\n let a = this.chain_[0];\n let b = this.chain_[1];\n let c = this.chain_[2];\n let d = this.chain_[3];\n let e = this.chain_[4];\n let f, k;\n\n // TODO(user): Try to unroll this loop to speed up the computation.\n for (let i = 0; i < 80; i++) {\n if (i < 40) {\n if (i < 20) {\n f = d ^ (b & (c ^ d));\n k = 0x5a827999;\n } else {\n f = b ^ c ^ d;\n k = 0x6ed9eba1;\n }\n } else {\n if (i < 60) {\n f = (b & c) | (d & (b | c));\n k = 0x8f1bbcdc;\n } else {\n f = b ^ c ^ d;\n k = 0xca62c1d6;\n }\n }\n\n const t = (((a << 5) | (a >>> 27)) + f + e + k + W[i]) & 0xffffffff;\n e = d;\n d = c;\n c = ((b << 30) | (b >>> 2)) & 0xffffffff;\n b = a;\n a = t;\n }\n\n this.chain_[0] = (this.chain_[0] + a) & 0xffffffff;\n this.chain_[1] = (this.chain_[1] + b) & 0xffffffff;\n this.chain_[2] = (this.chain_[2] + c) & 0xffffffff;\n this.chain_[3] = (this.chain_[3] + d) & 0xffffffff;\n this.chain_[4] = (this.chain_[4] + e) & 0xffffffff;\n }\n\n update(bytes?: number[] | Uint8Array | string, length?: number): void {\n // TODO(johnlenz): tighten the function signature and remove this check\n if (bytes == null) {\n return;\n }\n\n if (length === undefined) {\n length = bytes.length;\n }\n\n const lengthMinusBlock = length - this.blockSize;\n let n = 0;\n // Using local instead of member variables gives ~5% speedup on Firefox 16.\n const buf = this.buf_;\n let inbuf = this.inbuf_;\n\n // The outer while loop should execute at most twice.\n while (n < length) {\n // When we have no data in the block to top up, we can directly process the\n // input buffer (assuming it contains sufficient data). This gives ~25%\n // speedup on Chrome 23 and ~15% speedup on Firefox 16, but requires that\n // the data is provided in large chunks (or in multiples of 64 bytes).\n if (inbuf === 0) {\n while (n <= lengthMinusBlock) {\n this.compress_(bytes, n);\n n += this.blockSize;\n }\n }\n\n if (typeof bytes === 'string') {\n while (n < length) {\n buf[inbuf] = bytes.charCodeAt(n);\n ++inbuf;\n ++n;\n if (inbuf === this.blockSize) {\n this.compress_(buf);\n inbuf = 0;\n // Jump to the outer loop so we use the full-block optimization.\n break;\n }\n }\n } else {\n while (n < length) {\n buf[inbuf] = bytes[n];\n ++inbuf;\n ++n;\n if (inbuf === this.blockSize) {\n this.compress_(buf);\n inbuf = 0;\n // Jump to the outer loop so we use the full-block optimization.\n break;\n }\n }\n }\n }\n\n this.inbuf_ = inbuf;\n this.total_ += length;\n }\n\n /** @override */\n digest(): number[] {\n const digest: number[] = [];\n let totalBits = this.total_ * 8;\n\n // Add pad 0x80 0x00*.\n if (this.inbuf_ < 56) {\n this.update(this.pad_, 56 - this.inbuf_);\n } else {\n this.update(this.pad_, this.blockSize - (this.inbuf_ - 56));\n }\n\n // Add # bits.\n for (let i = this.blockSize - 1; i >= 56; i--) {\n this.buf_[i] = totalBits & 255;\n totalBits /= 256; // Don't use bit-shifting here!\n }\n\n this.compress_(this.buf_);\n\n let n = 0;\n for (let i = 0; i < 5; i++) {\n for (let j = 24; j >= 0; j -= 8) {\n digest[n] = (this.chain_[i] >> j) & 255;\n ++n;\n }\n }\n return digest;\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Check to make sure the appropriate number of arguments are provided for a public function.\n * Throws an error if it fails.\n *\n * @param fnName The function name\n * @param minCount The minimum number of arguments to allow for the function call\n * @param maxCount The maximum number of argument to allow for the function call\n * @param argCount The actual number of arguments provided.\n */\nexport const validateArgCount = function (\n fnName: string,\n minCount: number,\n maxCount: number,\n argCount: number\n): void {\n let argError;\n if (argCount < minCount) {\n argError = 'at least ' + minCount;\n } else if (argCount > maxCount) {\n argError = maxCount === 0 ? 'none' : 'no more than ' + maxCount;\n }\n if (argError) {\n const error =\n fnName +\n ' failed: Was called with ' +\n argCount +\n (argCount === 1 ? ' argument.' : ' arguments.') +\n ' Expects ' +\n argError +\n '.';\n throw new Error(error);\n }\n};\n\n/**\n * Generates a string to prefix an error message about failed argument validation\n *\n * @param fnName The function name\n * @param argName The name of the argument\n * @return The prefix to add to the error thrown for validation.\n */\nexport function errorPrefix(fnName: string, argName: string): string {\n return `${fnName} failed: ${argName} argument `;\n}\n\n/**\n * @param fnName\n * @param argumentNumber\n * @param namespace\n * @param optional\n */\nexport function validateNamespace(\n fnName: string,\n namespace: string,\n optional: boolean\n): void {\n if (optional && !namespace) {\n return;\n }\n if (typeof namespace !== 'string') {\n //TODO: I should do more validation here. We only allow certain chars in namespaces.\n throw new Error(\n errorPrefix(fnName, 'namespace') + 'must be a valid firebase namespace.'\n );\n }\n}\n\nexport function validateCallback(\n fnName: string,\n argumentName: string,\n // eslint-disable-next-line @typescript-eslint/ban-types\n callback: Function,\n optional: boolean\n): void {\n if (optional && !callback) {\n return;\n }\n if (typeof callback !== 'function') {\n throw new Error(\n errorPrefix(fnName, argumentName) + 'must be a valid function.'\n );\n }\n}\n\nexport function validateContextObject(\n fnName: string,\n argumentName: string,\n context: unknown,\n optional: boolean\n): void {\n if (optional && !context) {\n return;\n }\n if (typeof context !== 'object' || context === null) {\n throw new Error(\n errorPrefix(fnName, argumentName) + 'must be a valid context object.'\n );\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert } from './assert';\n\n// Code originally came from goog.crypt.stringToUtf8ByteArray, but for some reason they\n// automatically replaced '\\r\\n' with '\\n', and they didn't handle surrogate pairs,\n// so it's been modified.\n\n// Note that not all Unicode characters appear as single characters in JavaScript strings.\n// fromCharCode returns the UTF-16 encoding of a character - so some Unicode characters\n// use 2 characters in JavaScript. All 4-byte UTF-8 characters begin with a first\n// character in the range 0xD800 - 0xDBFF (the first character of a so-called surrogate\n// pair).\n// See http://www.ecma-international.org/ecma-262/5.1/#sec-15.1.3\n\n/**\n * @param {string} str\n * @return {Array}\n */\nexport const stringToByteArray = function (str: string): number[] {\n const out: number[] = [];\n let p = 0;\n for (let i = 0; i < str.length; i++) {\n let c = str.charCodeAt(i);\n\n // Is this the lead surrogate in a surrogate pair?\n if (c >= 0xd800 && c <= 0xdbff) {\n const high = c - 0xd800; // the high 10 bits.\n i++;\n assert(i < str.length, 'Surrogate pair missing trail surrogate.');\n const low = str.charCodeAt(i) - 0xdc00; // the low 10 bits.\n c = 0x10000 + (high << 10) + low;\n }\n\n if (c < 128) {\n out[p++] = c;\n } else if (c < 2048) {\n out[p++] = (c >> 6) | 192;\n out[p++] = (c & 63) | 128;\n } else if (c < 65536) {\n out[p++] = (c >> 12) | 224;\n out[p++] = ((c >> 6) & 63) | 128;\n out[p++] = (c & 63) | 128;\n } else {\n out[p++] = (c >> 18) | 240;\n out[p++] = ((c >> 12) & 63) | 128;\n out[p++] = ((c >> 6) & 63) | 128;\n out[p++] = (c & 63) | 128;\n }\n }\n return out;\n};\n\n/**\n * Calculate length without actually converting; useful for doing cheaper validation.\n * @param {string} str\n * @return {number}\n */\nexport const stringLength = function (str: string): number {\n let p = 0;\n for (let i = 0; i < str.length; i++) {\n const c = str.charCodeAt(i);\n if (c < 128) {\n p++;\n } else if (c < 2048) {\n p += 2;\n } else if (c >= 0xd800 && c <= 0xdbff) {\n // Lead surrogate of a surrogate pair. The pair together will take 4 bytes to represent.\n p += 4;\n i++; // skip trail surrogate.\n } else {\n p += 3;\n }\n }\n return p;\n};\n","/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport interface Compat {\n _delegate: T;\n}\n\nexport function getModularInstance(\n service: Compat | ExpService\n): ExpService {\n if (service && (service as Compat)._delegate) {\n return (service as Compat)._delegate;\n } else {\n return service as ExpService;\n }\n}\n","/**\n* @vue/reactivity v3.4.27\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nimport { NOOP, extend, isArray, isSymbol, isMap, isIntegerKey, hasOwn, hasChanged, isObject, makeMap, capitalize, toRawType, def, isFunction } from '@vue/shared';\n\nfunction warn(msg, ...args) {\n console.warn(`[Vue warn] ${msg}`, ...args);\n}\n\nlet activeEffectScope;\nclass EffectScope {\n constructor(detached = false) {\n this.detached = detached;\n /**\n * @internal\n */\n this._active = true;\n /**\n * @internal\n */\n this.effects = [];\n /**\n * @internal\n */\n this.cleanups = [];\n this.parent = activeEffectScope;\n if (!detached && activeEffectScope) {\n this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(\n this\n ) - 1;\n }\n }\n get active() {\n return this._active;\n }\n run(fn) {\n if (this._active) {\n const currentEffectScope = activeEffectScope;\n try {\n activeEffectScope = this;\n return fn();\n } finally {\n activeEffectScope = currentEffectScope;\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(`cannot run an inactive effect scope.`);\n }\n }\n /**\n * This should only be called on non-detached scopes\n * @internal\n */\n on() {\n activeEffectScope = this;\n }\n /**\n * This should only be called on non-detached scopes\n * @internal\n */\n off() {\n activeEffectScope = this.parent;\n }\n stop(fromParent) {\n if (this._active) {\n let i, l;\n for (i = 0, l = this.effects.length; i < l; i++) {\n this.effects[i].stop();\n }\n for (i = 0, l = this.cleanups.length; i < l; i++) {\n this.cleanups[i]();\n }\n if (this.scopes) {\n for (i = 0, l = this.scopes.length; i < l; i++) {\n this.scopes[i].stop(true);\n }\n }\n if (!this.detached && this.parent && !fromParent) {\n const last = this.parent.scopes.pop();\n if (last && last !== this) {\n this.parent.scopes[this.index] = last;\n last.index = this.index;\n }\n }\n this.parent = void 0;\n this._active = false;\n }\n }\n}\nfunction effectScope(detached) {\n return new EffectScope(detached);\n}\nfunction recordEffectScope(effect, scope = activeEffectScope) {\n if (scope && scope.active) {\n scope.effects.push(effect);\n }\n}\nfunction getCurrentScope() {\n return activeEffectScope;\n}\nfunction onScopeDispose(fn) {\n if (activeEffectScope) {\n activeEffectScope.cleanups.push(fn);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `onScopeDispose() is called when there is no active effect scope to be associated with.`\n );\n }\n}\n\nlet activeEffect;\nclass ReactiveEffect {\n constructor(fn, trigger, scheduler, scope) {\n this.fn = fn;\n this.trigger = trigger;\n this.scheduler = scheduler;\n this.active = true;\n this.deps = [];\n /**\n * @internal\n */\n this._dirtyLevel = 4;\n /**\n * @internal\n */\n this._trackId = 0;\n /**\n * @internal\n */\n this._runnings = 0;\n /**\n * @internal\n */\n this._shouldSchedule = false;\n /**\n * @internal\n */\n this._depsLength = 0;\n recordEffectScope(this, scope);\n }\n get dirty() {\n if (this._dirtyLevel === 2 || this._dirtyLevel === 3) {\n this._dirtyLevel = 1;\n pauseTracking();\n for (let i = 0; i < this._depsLength; i++) {\n const dep = this.deps[i];\n if (dep.computed) {\n triggerComputed(dep.computed);\n if (this._dirtyLevel >= 4) {\n break;\n }\n }\n }\n if (this._dirtyLevel === 1) {\n this._dirtyLevel = 0;\n }\n resetTracking();\n }\n return this._dirtyLevel >= 4;\n }\n set dirty(v) {\n this._dirtyLevel = v ? 4 : 0;\n }\n run() {\n this._dirtyLevel = 0;\n if (!this.active) {\n return this.fn();\n }\n let lastShouldTrack = shouldTrack;\n let lastEffect = activeEffect;\n try {\n shouldTrack = true;\n activeEffect = this;\n this._runnings++;\n preCleanupEffect(this);\n return this.fn();\n } finally {\n postCleanupEffect(this);\n this._runnings--;\n activeEffect = lastEffect;\n shouldTrack = lastShouldTrack;\n }\n }\n stop() {\n if (this.active) {\n preCleanupEffect(this);\n postCleanupEffect(this);\n this.onStop && this.onStop();\n this.active = false;\n }\n }\n}\nfunction triggerComputed(computed) {\n return computed.value;\n}\nfunction preCleanupEffect(effect2) {\n effect2._trackId++;\n effect2._depsLength = 0;\n}\nfunction postCleanupEffect(effect2) {\n if (effect2.deps.length > effect2._depsLength) {\n for (let i = effect2._depsLength; i < effect2.deps.length; i++) {\n cleanupDepEffect(effect2.deps[i], effect2);\n }\n effect2.deps.length = effect2._depsLength;\n }\n}\nfunction cleanupDepEffect(dep, effect2) {\n const trackId = dep.get(effect2);\n if (trackId !== void 0 && effect2._trackId !== trackId) {\n dep.delete(effect2);\n if (dep.size === 0) {\n dep.cleanup();\n }\n }\n}\nfunction effect(fn, options) {\n if (fn.effect instanceof ReactiveEffect) {\n fn = fn.effect.fn;\n }\n const _effect = new ReactiveEffect(fn, NOOP, () => {\n if (_effect.dirty) {\n _effect.run();\n }\n });\n if (options) {\n extend(_effect, options);\n if (options.scope)\n recordEffectScope(_effect, options.scope);\n }\n if (!options || !options.lazy) {\n _effect.run();\n }\n const runner = _effect.run.bind(_effect);\n runner.effect = _effect;\n return runner;\n}\nfunction stop(runner) {\n runner.effect.stop();\n}\nlet shouldTrack = true;\nlet pauseScheduleStack = 0;\nconst trackStack = [];\nfunction pauseTracking() {\n trackStack.push(shouldTrack);\n shouldTrack = false;\n}\nfunction enableTracking() {\n trackStack.push(shouldTrack);\n shouldTrack = true;\n}\nfunction resetTracking() {\n const last = trackStack.pop();\n shouldTrack = last === void 0 ? true : last;\n}\nfunction pauseScheduling() {\n pauseScheduleStack++;\n}\nfunction resetScheduling() {\n pauseScheduleStack--;\n while (!pauseScheduleStack && queueEffectSchedulers.length) {\n queueEffectSchedulers.shift()();\n }\n}\nfunction trackEffect(effect2, dep, debuggerEventExtraInfo) {\n var _a;\n if (dep.get(effect2) !== effect2._trackId) {\n dep.set(effect2, effect2._trackId);\n const oldDep = effect2.deps[effect2._depsLength];\n if (oldDep !== dep) {\n if (oldDep) {\n cleanupDepEffect(oldDep, effect2);\n }\n effect2.deps[effect2._depsLength++] = dep;\n } else {\n effect2._depsLength++;\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n (_a = effect2.onTrack) == null ? void 0 : _a.call(effect2, extend({ effect: effect2 }, debuggerEventExtraInfo));\n }\n }\n}\nconst queueEffectSchedulers = [];\nfunction triggerEffects(dep, dirtyLevel, debuggerEventExtraInfo) {\n var _a;\n pauseScheduling();\n for (const effect2 of dep.keys()) {\n let tracking;\n if (effect2._dirtyLevel < dirtyLevel && (tracking != null ? tracking : tracking = dep.get(effect2) === effect2._trackId)) {\n effect2._shouldSchedule || (effect2._shouldSchedule = effect2._dirtyLevel === 0);\n effect2._dirtyLevel = dirtyLevel;\n }\n if (effect2._shouldSchedule && (tracking != null ? tracking : tracking = dep.get(effect2) === effect2._trackId)) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n (_a = effect2.onTrigger) == null ? void 0 : _a.call(effect2, extend({ effect: effect2 }, debuggerEventExtraInfo));\n }\n effect2.trigger();\n if ((!effect2._runnings || effect2.allowRecurse) && effect2._dirtyLevel !== 2) {\n effect2._shouldSchedule = false;\n if (effect2.scheduler) {\n queueEffectSchedulers.push(effect2.scheduler);\n }\n }\n }\n }\n resetScheduling();\n}\n\nconst createDep = (cleanup, computed) => {\n const dep = /* @__PURE__ */ new Map();\n dep.cleanup = cleanup;\n dep.computed = computed;\n return dep;\n};\n\nconst targetMap = /* @__PURE__ */ new WeakMap();\nconst ITERATE_KEY = Symbol(!!(process.env.NODE_ENV !== \"production\") ? \"iterate\" : \"\");\nconst MAP_KEY_ITERATE_KEY = Symbol(!!(process.env.NODE_ENV !== \"production\") ? \"Map key iterate\" : \"\");\nfunction track(target, type, key) {\n if (shouldTrack && activeEffect) {\n let depsMap = targetMap.get(target);\n if (!depsMap) {\n targetMap.set(target, depsMap = /* @__PURE__ */ new Map());\n }\n let dep = depsMap.get(key);\n if (!dep) {\n depsMap.set(key, dep = createDep(() => depsMap.delete(key)));\n }\n trackEffect(\n activeEffect,\n dep,\n !!(process.env.NODE_ENV !== \"production\") ? {\n target,\n type,\n key\n } : void 0\n );\n }\n}\nfunction trigger(target, type, key, newValue, oldValue, oldTarget) {\n const depsMap = targetMap.get(target);\n if (!depsMap) {\n return;\n }\n let deps = [];\n if (type === \"clear\") {\n deps = [...depsMap.values()];\n } else if (key === \"length\" && isArray(target)) {\n const newLength = Number(newValue);\n depsMap.forEach((dep, key2) => {\n if (key2 === \"length\" || !isSymbol(key2) && key2 >= newLength) {\n deps.push(dep);\n }\n });\n } else {\n if (key !== void 0) {\n deps.push(depsMap.get(key));\n }\n switch (type) {\n case \"add\":\n if (!isArray(target)) {\n deps.push(depsMap.get(ITERATE_KEY));\n if (isMap(target)) {\n deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));\n }\n } else if (isIntegerKey(key)) {\n deps.push(depsMap.get(\"length\"));\n }\n break;\n case \"delete\":\n if (!isArray(target)) {\n deps.push(depsMap.get(ITERATE_KEY));\n if (isMap(target)) {\n deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));\n }\n }\n break;\n case \"set\":\n if (isMap(target)) {\n deps.push(depsMap.get(ITERATE_KEY));\n }\n break;\n }\n }\n pauseScheduling();\n for (const dep of deps) {\n if (dep) {\n triggerEffects(\n dep,\n 4,\n !!(process.env.NODE_ENV !== \"production\") ? {\n target,\n type,\n key,\n newValue,\n oldValue,\n oldTarget\n } : void 0\n );\n }\n }\n resetScheduling();\n}\nfunction getDepFromReactive(object, key) {\n const depsMap = targetMap.get(object);\n return depsMap && depsMap.get(key);\n}\n\nconst isNonTrackableKeys = /* @__PURE__ */ makeMap(`__proto__,__v_isRef,__isVue`);\nconst builtInSymbols = new Set(\n /* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((key) => key !== \"arguments\" && key !== \"caller\").map((key) => Symbol[key]).filter(isSymbol)\n);\nconst arrayInstrumentations = /* @__PURE__ */ createArrayInstrumentations();\nfunction createArrayInstrumentations() {\n const instrumentations = {};\n [\"includes\", \"indexOf\", \"lastIndexOf\"].forEach((key) => {\n instrumentations[key] = function(...args) {\n const arr = toRaw(this);\n for (let i = 0, l = this.length; i < l; i++) {\n track(arr, \"get\", i + \"\");\n }\n const res = arr[key](...args);\n if (res === -1 || res === false) {\n return arr[key](...args.map(toRaw));\n } else {\n return res;\n }\n };\n });\n [\"push\", \"pop\", \"shift\", \"unshift\", \"splice\"].forEach((key) => {\n instrumentations[key] = function(...args) {\n pauseTracking();\n pauseScheduling();\n const res = toRaw(this)[key].apply(this, args);\n resetScheduling();\n resetTracking();\n return res;\n };\n });\n return instrumentations;\n}\nfunction hasOwnProperty(key) {\n if (!isSymbol(key))\n key = String(key);\n const obj = toRaw(this);\n track(obj, \"has\", key);\n return obj.hasOwnProperty(key);\n}\nclass BaseReactiveHandler {\n constructor(_isReadonly = false, _isShallow = false) {\n this._isReadonly = _isReadonly;\n this._isShallow = _isShallow;\n }\n get(target, key, receiver) {\n const isReadonly2 = this._isReadonly, isShallow2 = this._isShallow;\n if (key === \"__v_isReactive\") {\n return !isReadonly2;\n } else if (key === \"__v_isReadonly\") {\n return isReadonly2;\n } else if (key === \"__v_isShallow\") {\n return isShallow2;\n } else if (key === \"__v_raw\") {\n if (receiver === (isReadonly2 ? isShallow2 ? shallowReadonlyMap : readonlyMap : isShallow2 ? shallowReactiveMap : reactiveMap).get(target) || // receiver is not the reactive proxy, but has the same prototype\n // this means the reciever is a user proxy of the reactive proxy\n Object.getPrototypeOf(target) === Object.getPrototypeOf(receiver)) {\n return target;\n }\n return;\n }\n const targetIsArray = isArray(target);\n if (!isReadonly2) {\n if (targetIsArray && hasOwn(arrayInstrumentations, key)) {\n return Reflect.get(arrayInstrumentations, key, receiver);\n }\n if (key === \"hasOwnProperty\") {\n return hasOwnProperty;\n }\n }\n const res = Reflect.get(target, key, receiver);\n if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {\n return res;\n }\n if (!isReadonly2) {\n track(target, \"get\", key);\n }\n if (isShallow2) {\n return res;\n }\n if (isRef(res)) {\n return targetIsArray && isIntegerKey(key) ? res : res.value;\n }\n if (isObject(res)) {\n return isReadonly2 ? readonly(res) : reactive(res);\n }\n return res;\n }\n}\nclass MutableReactiveHandler extends BaseReactiveHandler {\n constructor(isShallow2 = false) {\n super(false, isShallow2);\n }\n set(target, key, value, receiver) {\n let oldValue = target[key];\n if (!this._isShallow) {\n const isOldValueReadonly = isReadonly(oldValue);\n if (!isShallow(value) && !isReadonly(value)) {\n oldValue = toRaw(oldValue);\n value = toRaw(value);\n }\n if (!isArray(target) && isRef(oldValue) && !isRef(value)) {\n if (isOldValueReadonly) {\n return false;\n } else {\n oldValue.value = value;\n return true;\n }\n }\n }\n const hadKey = isArray(target) && isIntegerKey(key) ? Number(key) < target.length : hasOwn(target, key);\n const result = Reflect.set(target, key, value, receiver);\n if (target === toRaw(receiver)) {\n if (!hadKey) {\n trigger(target, \"add\", key, value);\n } else if (hasChanged(value, oldValue)) {\n trigger(target, \"set\", key, value, oldValue);\n }\n }\n return result;\n }\n deleteProperty(target, key) {\n const hadKey = hasOwn(target, key);\n const oldValue = target[key];\n const result = Reflect.deleteProperty(target, key);\n if (result && hadKey) {\n trigger(target, \"delete\", key, void 0, oldValue);\n }\n return result;\n }\n has(target, key) {\n const result = Reflect.has(target, key);\n if (!isSymbol(key) || !builtInSymbols.has(key)) {\n track(target, \"has\", key);\n }\n return result;\n }\n ownKeys(target) {\n track(\n target,\n \"iterate\",\n isArray(target) ? \"length\" : ITERATE_KEY\n );\n return Reflect.ownKeys(target);\n }\n}\nclass ReadonlyReactiveHandler extends BaseReactiveHandler {\n constructor(isShallow2 = false) {\n super(true, isShallow2);\n }\n set(target, key) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `Set operation on key \"${String(key)}\" failed: target is readonly.`,\n target\n );\n }\n return true;\n }\n deleteProperty(target, key) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `Delete operation on key \"${String(key)}\" failed: target is readonly.`,\n target\n );\n }\n return true;\n }\n}\nconst mutableHandlers = /* @__PURE__ */ new MutableReactiveHandler();\nconst readonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler();\nconst shallowReactiveHandlers = /* @__PURE__ */ new MutableReactiveHandler(\n true\n);\nconst shallowReadonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler(true);\n\nconst toShallow = (value) => value;\nconst getProto = (v) => Reflect.getPrototypeOf(v);\nfunction get(target, key, isReadonly = false, isShallow = false) {\n target = target[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const rawKey = toRaw(key);\n if (!isReadonly) {\n if (hasChanged(key, rawKey)) {\n track(rawTarget, \"get\", key);\n }\n track(rawTarget, \"get\", rawKey);\n }\n const { has: has2 } = getProto(rawTarget);\n const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n if (has2.call(rawTarget, key)) {\n return wrap(target.get(key));\n } else if (has2.call(rawTarget, rawKey)) {\n return wrap(target.get(rawKey));\n } else if (target !== rawTarget) {\n target.get(key);\n }\n}\nfunction has(key, isReadonly = false) {\n const target = this[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const rawKey = toRaw(key);\n if (!isReadonly) {\n if (hasChanged(key, rawKey)) {\n track(rawTarget, \"has\", key);\n }\n track(rawTarget, \"has\", rawKey);\n }\n return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey);\n}\nfunction size(target, isReadonly = false) {\n target = target[\"__v_raw\"];\n !isReadonly && track(toRaw(target), \"iterate\", ITERATE_KEY);\n return Reflect.get(target, \"size\", target);\n}\nfunction add(value) {\n value = toRaw(value);\n const target = toRaw(this);\n const proto = getProto(target);\n const hadKey = proto.has.call(target, value);\n if (!hadKey) {\n target.add(value);\n trigger(target, \"add\", value, value);\n }\n return this;\n}\nfunction set(key, value) {\n value = toRaw(value);\n const target = toRaw(this);\n const { has: has2, get: get2 } = getProto(target);\n let hadKey = has2.call(target, key);\n if (!hadKey) {\n key = toRaw(key);\n hadKey = has2.call(target, key);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n checkIdentityKeys(target, has2, key);\n }\n const oldValue = get2.call(target, key);\n target.set(key, value);\n if (!hadKey) {\n trigger(target, \"add\", key, value);\n } else if (hasChanged(value, oldValue)) {\n trigger(target, \"set\", key, value, oldValue);\n }\n return this;\n}\nfunction deleteEntry(key) {\n const target = toRaw(this);\n const { has: has2, get: get2 } = getProto(target);\n let hadKey = has2.call(target, key);\n if (!hadKey) {\n key = toRaw(key);\n hadKey = has2.call(target, key);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n checkIdentityKeys(target, has2, key);\n }\n const oldValue = get2 ? get2.call(target, key) : void 0;\n const result = target.delete(key);\n if (hadKey) {\n trigger(target, \"delete\", key, void 0, oldValue);\n }\n return result;\n}\nfunction clear() {\n const target = toRaw(this);\n const hadItems = target.size !== 0;\n const oldTarget = !!(process.env.NODE_ENV !== \"production\") ? isMap(target) ? new Map(target) : new Set(target) : void 0;\n const result = target.clear();\n if (hadItems) {\n trigger(target, \"clear\", void 0, void 0, oldTarget);\n }\n return result;\n}\nfunction createForEach(isReadonly, isShallow) {\n return function forEach(callback, thisArg) {\n const observed = this;\n const target = observed[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n !isReadonly && track(rawTarget, \"iterate\", ITERATE_KEY);\n return target.forEach((value, key) => {\n return callback.call(thisArg, wrap(value), wrap(key), observed);\n });\n };\n}\nfunction createIterableMethod(method, isReadonly, isShallow) {\n return function(...args) {\n const target = this[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const targetIsMap = isMap(rawTarget);\n const isPair = method === \"entries\" || method === Symbol.iterator && targetIsMap;\n const isKeyOnly = method === \"keys\" && targetIsMap;\n const innerIterator = target[method](...args);\n const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n !isReadonly && track(\n rawTarget,\n \"iterate\",\n isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY\n );\n return {\n // iterator protocol\n next() {\n const { value, done } = innerIterator.next();\n return done ? { value, done } : {\n value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),\n done\n };\n },\n // iterable protocol\n [Symbol.iterator]() {\n return this;\n }\n };\n };\n}\nfunction createReadonlyMethod(type) {\n return function(...args) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const key = args[0] ? `on key \"${args[0]}\" ` : ``;\n warn(\n `${capitalize(type)} operation ${key}failed: target is readonly.`,\n toRaw(this)\n );\n }\n return type === \"delete\" ? false : type === \"clear\" ? void 0 : this;\n };\n}\nfunction createInstrumentations() {\n const mutableInstrumentations2 = {\n get(key) {\n return get(this, key);\n },\n get size() {\n return size(this);\n },\n has,\n add,\n set,\n delete: deleteEntry,\n clear,\n forEach: createForEach(false, false)\n };\n const shallowInstrumentations2 = {\n get(key) {\n return get(this, key, false, true);\n },\n get size() {\n return size(this);\n },\n has,\n add,\n set,\n delete: deleteEntry,\n clear,\n forEach: createForEach(false, true)\n };\n const readonlyInstrumentations2 = {\n get(key) {\n return get(this, key, true);\n },\n get size() {\n return size(this, true);\n },\n has(key) {\n return has.call(this, key, true);\n },\n add: createReadonlyMethod(\"add\"),\n set: createReadonlyMethod(\"set\"),\n delete: createReadonlyMethod(\"delete\"),\n clear: createReadonlyMethod(\"clear\"),\n forEach: createForEach(true, false)\n };\n const shallowReadonlyInstrumentations2 = {\n get(key) {\n return get(this, key, true, true);\n },\n get size() {\n return size(this, true);\n },\n has(key) {\n return has.call(this, key, true);\n },\n add: createReadonlyMethod(\"add\"),\n set: createReadonlyMethod(\"set\"),\n delete: createReadonlyMethod(\"delete\"),\n clear: createReadonlyMethod(\"clear\"),\n forEach: createForEach(true, true)\n };\n const iteratorMethods = [\n \"keys\",\n \"values\",\n \"entries\",\n Symbol.iterator\n ];\n iteratorMethods.forEach((method) => {\n mutableInstrumentations2[method] = createIterableMethod(method, false, false);\n readonlyInstrumentations2[method] = createIterableMethod(method, true, false);\n shallowInstrumentations2[method] = createIterableMethod(method, false, true);\n shallowReadonlyInstrumentations2[method] = createIterableMethod(\n method,\n true,\n true\n );\n });\n return [\n mutableInstrumentations2,\n readonlyInstrumentations2,\n shallowInstrumentations2,\n shallowReadonlyInstrumentations2\n ];\n}\nconst [\n mutableInstrumentations,\n readonlyInstrumentations,\n shallowInstrumentations,\n shallowReadonlyInstrumentations\n] = /* @__PURE__ */ createInstrumentations();\nfunction createInstrumentationGetter(isReadonly, shallow) {\n const instrumentations = shallow ? isReadonly ? shallowReadonlyInstrumentations : shallowInstrumentations : isReadonly ? readonlyInstrumentations : mutableInstrumentations;\n return (target, key, receiver) => {\n if (key === \"__v_isReactive\") {\n return !isReadonly;\n } else if (key === \"__v_isReadonly\") {\n return isReadonly;\n } else if (key === \"__v_raw\") {\n return target;\n }\n return Reflect.get(\n hasOwn(instrumentations, key) && key in target ? instrumentations : target,\n key,\n receiver\n );\n };\n}\nconst mutableCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(false, false)\n};\nconst shallowCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(false, true)\n};\nconst readonlyCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(true, false)\n};\nconst shallowReadonlyCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(true, true)\n};\nfunction checkIdentityKeys(target, has2, key) {\n const rawKey = toRaw(key);\n if (rawKey !== key && has2.call(target, rawKey)) {\n const type = toRawType(target);\n warn(\n `Reactive ${type} contains both the raw and reactive versions of the same object${type === `Map` ? ` as keys` : ``}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`\n );\n }\n}\n\nconst reactiveMap = /* @__PURE__ */ new WeakMap();\nconst shallowReactiveMap = /* @__PURE__ */ new WeakMap();\nconst readonlyMap = /* @__PURE__ */ new WeakMap();\nconst shallowReadonlyMap = /* @__PURE__ */ new WeakMap();\nfunction targetTypeMap(rawType) {\n switch (rawType) {\n case \"Object\":\n case \"Array\":\n return 1 /* COMMON */;\n case \"Map\":\n case \"Set\":\n case \"WeakMap\":\n case \"WeakSet\":\n return 2 /* COLLECTION */;\n default:\n return 0 /* INVALID */;\n }\n}\nfunction getTargetType(value) {\n return value[\"__v_skip\"] || !Object.isExtensible(value) ? 0 /* INVALID */ : targetTypeMap(toRawType(value));\n}\nfunction reactive(target) {\n if (isReadonly(target)) {\n return target;\n }\n return createReactiveObject(\n target,\n false,\n mutableHandlers,\n mutableCollectionHandlers,\n reactiveMap\n );\n}\nfunction shallowReactive(target) {\n return createReactiveObject(\n target,\n false,\n shallowReactiveHandlers,\n shallowCollectionHandlers,\n shallowReactiveMap\n );\n}\nfunction readonly(target) {\n return createReactiveObject(\n target,\n true,\n readonlyHandlers,\n readonlyCollectionHandlers,\n readonlyMap\n );\n}\nfunction shallowReadonly(target) {\n return createReactiveObject(\n target,\n true,\n shallowReadonlyHandlers,\n shallowReadonlyCollectionHandlers,\n shallowReadonlyMap\n );\n}\nfunction createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) {\n if (!isObject(target)) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(`value cannot be made reactive: ${String(target)}`);\n }\n return target;\n }\n if (target[\"__v_raw\"] && !(isReadonly2 && target[\"__v_isReactive\"])) {\n return target;\n }\n const existingProxy = proxyMap.get(target);\n if (existingProxy) {\n return existingProxy;\n }\n const targetType = getTargetType(target);\n if (targetType === 0 /* INVALID */) {\n return target;\n }\n const proxy = new Proxy(\n target,\n targetType === 2 /* COLLECTION */ ? collectionHandlers : baseHandlers\n );\n proxyMap.set(target, proxy);\n return proxy;\n}\nfunction isReactive(value) {\n if (isReadonly(value)) {\n return isReactive(value[\"__v_raw\"]);\n }\n return !!(value && value[\"__v_isReactive\"]);\n}\nfunction isReadonly(value) {\n return !!(value && value[\"__v_isReadonly\"]);\n}\nfunction isShallow(value) {\n return !!(value && value[\"__v_isShallow\"]);\n}\nfunction isProxy(value) {\n return value ? !!value[\"__v_raw\"] : false;\n}\nfunction toRaw(observed) {\n const raw = observed && observed[\"__v_raw\"];\n return raw ? toRaw(raw) : observed;\n}\nfunction markRaw(value) {\n if (Object.isExtensible(value)) {\n def(value, \"__v_skip\", true);\n }\n return value;\n}\nconst toReactive = (value) => isObject(value) ? reactive(value) : value;\nconst toReadonly = (value) => isObject(value) ? readonly(value) : value;\n\nconst COMPUTED_SIDE_EFFECT_WARN = `Computed is still dirty after getter evaluation, likely because a computed is mutating its own dependency in its getter. State mutations in computed getters should be avoided. Check the docs for more details: https://vuejs.org/guide/essentials/computed.html#getters-should-be-side-effect-free`;\nclass ComputedRefImpl {\n constructor(getter, _setter, isReadonly, isSSR) {\n this.getter = getter;\n this._setter = _setter;\n this.dep = void 0;\n this.__v_isRef = true;\n this[\"__v_isReadonly\"] = false;\n this.effect = new ReactiveEffect(\n () => getter(this._value),\n () => triggerRefValue(\n this,\n this.effect._dirtyLevel === 2 ? 2 : 3\n )\n );\n this.effect.computed = this;\n this.effect.active = this._cacheable = !isSSR;\n this[\"__v_isReadonly\"] = isReadonly;\n }\n get value() {\n const self = toRaw(this);\n if ((!self._cacheable || self.effect.dirty) && hasChanged(self._value, self._value = self.effect.run())) {\n triggerRefValue(self, 4);\n }\n trackRefValue(self);\n if (self.effect._dirtyLevel >= 2) {\n if (!!(process.env.NODE_ENV !== \"production\") && this._warnRecursive) {\n warn(COMPUTED_SIDE_EFFECT_WARN, `\n\ngetter: `, this.getter);\n }\n triggerRefValue(self, 2);\n }\n return self._value;\n }\n set value(newValue) {\n this._setter(newValue);\n }\n // #region polyfill _dirty for backward compatibility third party code for Vue <= 3.3.x\n get _dirty() {\n return this.effect.dirty;\n }\n set _dirty(v) {\n this.effect.dirty = v;\n }\n // #endregion\n}\nfunction computed(getterOrOptions, debugOptions, isSSR = false) {\n let getter;\n let setter;\n const onlyGetter = isFunction(getterOrOptions);\n if (onlyGetter) {\n getter = getterOrOptions;\n setter = !!(process.env.NODE_ENV !== \"production\") ? () => {\n warn(\"Write operation failed: computed value is readonly\");\n } : NOOP;\n } else {\n getter = getterOrOptions.get;\n setter = getterOrOptions.set;\n }\n const cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter, isSSR);\n if (!!(process.env.NODE_ENV !== \"production\") && debugOptions && !isSSR) {\n cRef.effect.onTrack = debugOptions.onTrack;\n cRef.effect.onTrigger = debugOptions.onTrigger;\n }\n return cRef;\n}\n\nfunction trackRefValue(ref2) {\n var _a;\n if (shouldTrack && activeEffect) {\n ref2 = toRaw(ref2);\n trackEffect(\n activeEffect,\n (_a = ref2.dep) != null ? _a : ref2.dep = createDep(\n () => ref2.dep = void 0,\n ref2 instanceof ComputedRefImpl ? ref2 : void 0\n ),\n !!(process.env.NODE_ENV !== \"production\") ? {\n target: ref2,\n type: \"get\",\n key: \"value\"\n } : void 0\n );\n }\n}\nfunction triggerRefValue(ref2, dirtyLevel = 4, newVal) {\n ref2 = toRaw(ref2);\n const dep = ref2.dep;\n if (dep) {\n triggerEffects(\n dep,\n dirtyLevel,\n !!(process.env.NODE_ENV !== \"production\") ? {\n target: ref2,\n type: \"set\",\n key: \"value\",\n newValue: newVal\n } : void 0\n );\n }\n}\nfunction isRef(r) {\n return !!(r && r.__v_isRef === true);\n}\nfunction ref(value) {\n return createRef(value, false);\n}\nfunction shallowRef(value) {\n return createRef(value, true);\n}\nfunction createRef(rawValue, shallow) {\n if (isRef(rawValue)) {\n return rawValue;\n }\n return new RefImpl(rawValue, shallow);\n}\nclass RefImpl {\n constructor(value, __v_isShallow) {\n this.__v_isShallow = __v_isShallow;\n this.dep = void 0;\n this.__v_isRef = true;\n this._rawValue = __v_isShallow ? value : toRaw(value);\n this._value = __v_isShallow ? value : toReactive(value);\n }\n get value() {\n trackRefValue(this);\n return this._value;\n }\n set value(newVal) {\n const useDirectValue = this.__v_isShallow || isShallow(newVal) || isReadonly(newVal);\n newVal = useDirectValue ? newVal : toRaw(newVal);\n if (hasChanged(newVal, this._rawValue)) {\n this._rawValue = newVal;\n this._value = useDirectValue ? newVal : toReactive(newVal);\n triggerRefValue(this, 4, newVal);\n }\n }\n}\nfunction triggerRef(ref2) {\n triggerRefValue(ref2, 4, !!(process.env.NODE_ENV !== \"production\") ? ref2.value : void 0);\n}\nfunction unref(ref2) {\n return isRef(ref2) ? ref2.value : ref2;\n}\nfunction toValue(source) {\n return isFunction(source) ? source() : unref(source);\n}\nconst shallowUnwrapHandlers = {\n get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)),\n set: (target, key, value, receiver) => {\n const oldValue = target[key];\n if (isRef(oldValue) && !isRef(value)) {\n oldValue.value = value;\n return true;\n } else {\n return Reflect.set(target, key, value, receiver);\n }\n }\n};\nfunction proxyRefs(objectWithRefs) {\n return isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers);\n}\nclass CustomRefImpl {\n constructor(factory) {\n this.dep = void 0;\n this.__v_isRef = true;\n const { get, set } = factory(\n () => trackRefValue(this),\n () => triggerRefValue(this)\n );\n this._get = get;\n this._set = set;\n }\n get value() {\n return this._get();\n }\n set value(newVal) {\n this._set(newVal);\n }\n}\nfunction customRef(factory) {\n return new CustomRefImpl(factory);\n}\nfunction toRefs(object) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isProxy(object)) {\n warn(`toRefs() expects a reactive object but received a plain one.`);\n }\n const ret = isArray(object) ? new Array(object.length) : {};\n for (const key in object) {\n ret[key] = propertyToRef(object, key);\n }\n return ret;\n}\nclass ObjectRefImpl {\n constructor(_object, _key, _defaultValue) {\n this._object = _object;\n this._key = _key;\n this._defaultValue = _defaultValue;\n this.__v_isRef = true;\n }\n get value() {\n const val = this._object[this._key];\n return val === void 0 ? this._defaultValue : val;\n }\n set value(newVal) {\n this._object[this._key] = newVal;\n }\n get dep() {\n return getDepFromReactive(toRaw(this._object), this._key);\n }\n}\nclass GetterRefImpl {\n constructor(_getter) {\n this._getter = _getter;\n this.__v_isRef = true;\n this.__v_isReadonly = true;\n }\n get value() {\n return this._getter();\n }\n}\nfunction toRef(source, key, defaultValue) {\n if (isRef(source)) {\n return source;\n } else if (isFunction(source)) {\n return new GetterRefImpl(source);\n } else if (isObject(source) && arguments.length > 1) {\n return propertyToRef(source, key, defaultValue);\n } else {\n return ref(source);\n }\n}\nfunction propertyToRef(source, key, defaultValue) {\n const val = source[key];\n return isRef(val) ? val : new ObjectRefImpl(source, key, defaultValue);\n}\n\nconst deferredComputed = computed;\n\nconst TrackOpTypes = {\n \"GET\": \"get\",\n \"HAS\": \"has\",\n \"ITERATE\": \"iterate\"\n};\nconst TriggerOpTypes = {\n \"SET\": \"set\",\n \"ADD\": \"add\",\n \"DELETE\": \"delete\",\n \"CLEAR\": \"clear\"\n};\nconst ReactiveFlags = {\n \"SKIP\": \"__v_skip\",\n \"IS_REACTIVE\": \"__v_isReactive\",\n \"IS_READONLY\": \"__v_isReadonly\",\n \"IS_SHALLOW\": \"__v_isShallow\",\n \"RAW\": \"__v_raw\"\n};\n\nexport { EffectScope, ITERATE_KEY, ReactiveEffect, ReactiveFlags, TrackOpTypes, TriggerOpTypes, computed, customRef, deferredComputed, effect, effectScope, enableTracking, getCurrentScope, isProxy, isReactive, isReadonly, isRef, isShallow, markRaw, onScopeDispose, pauseScheduling, pauseTracking, proxyRefs, reactive, readonly, ref, resetScheduling, resetTracking, shallowReactive, shallowReadonly, shallowRef, stop, toRaw, toRef, toRefs, toValue, track, trigger, triggerRef, unref };\n","/**\n* @vue/runtime-core v3.4.27\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nimport { pauseTracking, resetTracking, isRef, toRaw, shallowReadonly, isShallow, isReactive, ReactiveEffect, getCurrentScope, ref, track, reactive, shallowReactive, trigger, isProxy, proxyRefs, markRaw, EffectScope, computed as computed$1, customRef, isReadonly } from '@vue/reactivity';\nexport { EffectScope, ReactiveEffect, TrackOpTypes, TriggerOpTypes, customRef, effect, effectScope, getCurrentScope, isProxy, isReactive, isReadonly, isRef, isShallow, markRaw, onScopeDispose, proxyRefs, reactive, readonly, ref, shallowReactive, shallowReadonly, shallowRef, stop, toRaw, toRef, toRefs, toValue, triggerRef, unref } from '@vue/reactivity';\nimport { isString, isFunction, isPromise, isArray, NOOP, getGlobalThis, extend, EMPTY_OBJ, toHandlerKey, looseToNumber, hyphenate, camelize, isObject, isOn, hasOwn, isModelListener, capitalize, toNumber, hasChanged, remove, isSet, isMap, isPlainObject, isBuiltInDirective, invokeArrayFns, isRegExp, isGloballyAllowed, NO, isReservedProp, EMPTY_ARR, toRawType, makeMap, def, normalizeClass, stringifyStyle, normalizeStyle, isKnownSvgAttr, isBooleanAttr, isKnownHtmlAttr, includeBooleanAttr, isRenderableAttrValue } from '@vue/shared';\nexport { camelize, capitalize, normalizeClass, normalizeProps, normalizeStyle, toDisplayString, toHandlerKey } from '@vue/shared';\n\nconst stack = [];\nfunction pushWarningContext(vnode) {\n stack.push(vnode);\n}\nfunction popWarningContext() {\n stack.pop();\n}\nfunction warn$1(msg, ...args) {\n pauseTracking();\n const instance = stack.length ? stack[stack.length - 1].component : null;\n const appWarnHandler = instance && instance.appContext.config.warnHandler;\n const trace = getComponentTrace();\n if (appWarnHandler) {\n callWithErrorHandling(\n appWarnHandler,\n instance,\n 11,\n [\n msg + args.map((a) => {\n var _a, _b;\n return (_b = (_a = a.toString) == null ? void 0 : _a.call(a)) != null ? _b : JSON.stringify(a);\n }).join(\"\"),\n instance && instance.proxy,\n trace.map(\n ({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>`\n ).join(\"\\n\"),\n trace\n ]\n );\n } else {\n const warnArgs = [`[Vue warn]: ${msg}`, ...args];\n if (trace.length && // avoid spamming console during tests\n true) {\n warnArgs.push(`\n`, ...formatTrace(trace));\n }\n console.warn(...warnArgs);\n }\n resetTracking();\n}\nfunction getComponentTrace() {\n let currentVNode = stack[stack.length - 1];\n if (!currentVNode) {\n return [];\n }\n const normalizedStack = [];\n while (currentVNode) {\n const last = normalizedStack[0];\n if (last && last.vnode === currentVNode) {\n last.recurseCount++;\n } else {\n normalizedStack.push({\n vnode: currentVNode,\n recurseCount: 0\n });\n }\n const parentInstance = currentVNode.component && currentVNode.component.parent;\n currentVNode = parentInstance && parentInstance.vnode;\n }\n return normalizedStack;\n}\nfunction formatTrace(trace) {\n const logs = [];\n trace.forEach((entry, i) => {\n logs.push(...i === 0 ? [] : [`\n`], ...formatTraceEntry(entry));\n });\n return logs;\n}\nfunction formatTraceEntry({ vnode, recurseCount }) {\n const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``;\n const isRoot = vnode.component ? vnode.component.parent == null : false;\n const open = ` at <${formatComponentName(\n vnode.component,\n vnode.type,\n isRoot\n )}`;\n const close = `>` + postfix;\n return vnode.props ? [open, ...formatProps(vnode.props), close] : [open + close];\n}\nfunction formatProps(props) {\n const res = [];\n const keys = Object.keys(props);\n keys.slice(0, 3).forEach((key) => {\n res.push(...formatProp(key, props[key]));\n });\n if (keys.length > 3) {\n res.push(` ...`);\n }\n return res;\n}\nfunction formatProp(key, value, raw) {\n if (isString(value)) {\n value = JSON.stringify(value);\n return raw ? value : [`${key}=${value}`];\n } else if (typeof value === \"number\" || typeof value === \"boolean\" || value == null) {\n return raw ? value : [`${key}=${value}`];\n } else if (isRef(value)) {\n value = formatProp(key, toRaw(value.value), true);\n return raw ? value : [`${key}=Ref<`, value, `>`];\n } else if (isFunction(value)) {\n return [`${key}=fn${value.name ? `<${value.name}>` : ``}`];\n } else {\n value = toRaw(value);\n return raw ? value : [`${key}=`, value];\n }\n}\nfunction assertNumber(val, type) {\n if (!!!(process.env.NODE_ENV !== \"production\"))\n return;\n if (val === void 0) {\n return;\n } else if (typeof val !== \"number\") {\n warn$1(`${type} is not a valid number - got ${JSON.stringify(val)}.`);\n } else if (isNaN(val)) {\n warn$1(`${type} is NaN - the duration expression might be incorrect.`);\n }\n}\n\nconst ErrorCodes = {\n \"SETUP_FUNCTION\": 0,\n \"0\": \"SETUP_FUNCTION\",\n \"RENDER_FUNCTION\": 1,\n \"1\": \"RENDER_FUNCTION\",\n \"WATCH_GETTER\": 2,\n \"2\": \"WATCH_GETTER\",\n \"WATCH_CALLBACK\": 3,\n \"3\": \"WATCH_CALLBACK\",\n \"WATCH_CLEANUP\": 4,\n \"4\": \"WATCH_CLEANUP\",\n \"NATIVE_EVENT_HANDLER\": 5,\n \"5\": \"NATIVE_EVENT_HANDLER\",\n \"COMPONENT_EVENT_HANDLER\": 6,\n \"6\": \"COMPONENT_EVENT_HANDLER\",\n \"VNODE_HOOK\": 7,\n \"7\": \"VNODE_HOOK\",\n \"DIRECTIVE_HOOK\": 8,\n \"8\": \"DIRECTIVE_HOOK\",\n \"TRANSITION_HOOK\": 9,\n \"9\": \"TRANSITION_HOOK\",\n \"APP_ERROR_HANDLER\": 10,\n \"10\": \"APP_ERROR_HANDLER\",\n \"APP_WARN_HANDLER\": 11,\n \"11\": \"APP_WARN_HANDLER\",\n \"FUNCTION_REF\": 12,\n \"12\": \"FUNCTION_REF\",\n \"ASYNC_COMPONENT_LOADER\": 13,\n \"13\": \"ASYNC_COMPONENT_LOADER\",\n \"SCHEDULER\": 14,\n \"14\": \"SCHEDULER\"\n};\nconst ErrorTypeStrings$1 = {\n [\"sp\"]: \"serverPrefetch hook\",\n [\"bc\"]: \"beforeCreate hook\",\n [\"c\"]: \"created hook\",\n [\"bm\"]: \"beforeMount hook\",\n [\"m\"]: \"mounted hook\",\n [\"bu\"]: \"beforeUpdate hook\",\n [\"u\"]: \"updated\",\n [\"bum\"]: \"beforeUnmount hook\",\n [\"um\"]: \"unmounted hook\",\n [\"a\"]: \"activated hook\",\n [\"da\"]: \"deactivated hook\",\n [\"ec\"]: \"errorCaptured hook\",\n [\"rtc\"]: \"renderTracked hook\",\n [\"rtg\"]: \"renderTriggered hook\",\n [0]: \"setup function\",\n [1]: \"render function\",\n [2]: \"watcher getter\",\n [3]: \"watcher callback\",\n [4]: \"watcher cleanup function\",\n [5]: \"native event handler\",\n [6]: \"component event handler\",\n [7]: \"vnode hook\",\n [8]: \"directive hook\",\n [9]: \"transition hook\",\n [10]: \"app errorHandler\",\n [11]: \"app warnHandler\",\n [12]: \"ref function\",\n [13]: \"async component loader\",\n [14]: \"scheduler flush. This is likely a Vue internals bug. Please open an issue at https://github.com/vuejs/core .\"\n};\nfunction callWithErrorHandling(fn, instance, type, args) {\n try {\n return args ? fn(...args) : fn();\n } catch (err) {\n handleError(err, instance, type);\n }\n}\nfunction callWithAsyncErrorHandling(fn, instance, type, args) {\n if (isFunction(fn)) {\n const res = callWithErrorHandling(fn, instance, type, args);\n if (res && isPromise(res)) {\n res.catch((err) => {\n handleError(err, instance, type);\n });\n }\n return res;\n }\n if (isArray(fn)) {\n const values = [];\n for (let i = 0; i < fn.length; i++) {\n values.push(callWithAsyncErrorHandling(fn[i], instance, type, args));\n }\n return values;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `Invalid value type passed to callWithAsyncErrorHandling(): ${typeof fn}`\n );\n }\n}\nfunction handleError(err, instance, type, throwInDev = true) {\n const contextVNode = instance ? instance.vnode : null;\n if (instance) {\n let cur = instance.parent;\n const exposedInstance = instance.proxy;\n const errorInfo = !!(process.env.NODE_ENV !== \"production\") ? ErrorTypeStrings$1[type] : `https://vuejs.org/error-reference/#runtime-${type}`;\n while (cur) {\n const errorCapturedHooks = cur.ec;\n if (errorCapturedHooks) {\n for (let i = 0; i < errorCapturedHooks.length; i++) {\n if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) {\n return;\n }\n }\n }\n cur = cur.parent;\n }\n const appErrorHandler = instance.appContext.config.errorHandler;\n if (appErrorHandler) {\n pauseTracking();\n callWithErrorHandling(\n appErrorHandler,\n null,\n 10,\n [err, exposedInstance, errorInfo]\n );\n resetTracking();\n return;\n }\n }\n logError(err, type, contextVNode, throwInDev);\n}\nfunction logError(err, type, contextVNode, throwInDev = true) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const info = ErrorTypeStrings$1[type];\n if (contextVNode) {\n pushWarningContext(contextVNode);\n }\n warn$1(`Unhandled error${info ? ` during execution of ${info}` : ``}`);\n if (contextVNode) {\n popWarningContext();\n }\n if (throwInDev) {\n throw err;\n } else {\n console.error(err);\n }\n } else {\n console.error(err);\n }\n}\n\nlet isFlushing = false;\nlet isFlushPending = false;\nconst queue = [];\nlet flushIndex = 0;\nconst pendingPostFlushCbs = [];\nlet activePostFlushCbs = null;\nlet postFlushIndex = 0;\nconst resolvedPromise = /* @__PURE__ */ Promise.resolve();\nlet currentFlushPromise = null;\nconst RECURSION_LIMIT = 100;\nfunction nextTick(fn) {\n const p = currentFlushPromise || resolvedPromise;\n return fn ? p.then(this ? fn.bind(this) : fn) : p;\n}\nfunction findInsertionIndex(id) {\n let start = flushIndex + 1;\n let end = queue.length;\n while (start < end) {\n const middle = start + end >>> 1;\n const middleJob = queue[middle];\n const middleJobId = getId(middleJob);\n if (middleJobId < id || middleJobId === id && middleJob.pre) {\n start = middle + 1;\n } else {\n end = middle;\n }\n }\n return start;\n}\nfunction queueJob(job) {\n if (!queue.length || !queue.includes(\n job,\n isFlushing && job.allowRecurse ? flushIndex + 1 : flushIndex\n )) {\n if (job.id == null) {\n queue.push(job);\n } else {\n queue.splice(findInsertionIndex(job.id), 0, job);\n }\n queueFlush();\n }\n}\nfunction queueFlush() {\n if (!isFlushing && !isFlushPending) {\n isFlushPending = true;\n currentFlushPromise = resolvedPromise.then(flushJobs);\n }\n}\nfunction invalidateJob(job) {\n const i = queue.indexOf(job);\n if (i > flushIndex) {\n queue.splice(i, 1);\n }\n}\nfunction queuePostFlushCb(cb) {\n if (!isArray(cb)) {\n if (!activePostFlushCbs || !activePostFlushCbs.includes(\n cb,\n cb.allowRecurse ? postFlushIndex + 1 : postFlushIndex\n )) {\n pendingPostFlushCbs.push(cb);\n }\n } else {\n pendingPostFlushCbs.push(...cb);\n }\n queueFlush();\n}\nfunction flushPreFlushCbs(instance, seen, i = isFlushing ? flushIndex + 1 : 0) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n seen = seen || /* @__PURE__ */ new Map();\n }\n for (; i < queue.length; i++) {\n const cb = queue[i];\n if (cb && cb.pre) {\n if (instance && cb.id !== instance.uid) {\n continue;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && checkRecursiveUpdates(seen, cb)) {\n continue;\n }\n queue.splice(i, 1);\n i--;\n cb();\n }\n }\n}\nfunction flushPostFlushCbs(seen) {\n if (pendingPostFlushCbs.length) {\n const deduped = [...new Set(pendingPostFlushCbs)].sort(\n (a, b) => getId(a) - getId(b)\n );\n pendingPostFlushCbs.length = 0;\n if (activePostFlushCbs) {\n activePostFlushCbs.push(...deduped);\n return;\n }\n activePostFlushCbs = deduped;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n seen = seen || /* @__PURE__ */ new Map();\n }\n for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) {\n if (!!(process.env.NODE_ENV !== \"production\") && checkRecursiveUpdates(seen, activePostFlushCbs[postFlushIndex])) {\n continue;\n }\n activePostFlushCbs[postFlushIndex]();\n }\n activePostFlushCbs = null;\n postFlushIndex = 0;\n }\n}\nconst getId = (job) => job.id == null ? Infinity : job.id;\nconst comparator = (a, b) => {\n const diff = getId(a) - getId(b);\n if (diff === 0) {\n if (a.pre && !b.pre)\n return -1;\n if (b.pre && !a.pre)\n return 1;\n }\n return diff;\n};\nfunction flushJobs(seen) {\n isFlushPending = false;\n isFlushing = true;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n seen = seen || /* @__PURE__ */ new Map();\n }\n queue.sort(comparator);\n const check = !!(process.env.NODE_ENV !== \"production\") ? (job) => checkRecursiveUpdates(seen, job) : NOOP;\n try {\n for (flushIndex = 0; flushIndex < queue.length; flushIndex++) {\n const job = queue[flushIndex];\n if (job && job.active !== false) {\n if (!!(process.env.NODE_ENV !== \"production\") && check(job)) {\n continue;\n }\n callWithErrorHandling(job, null, 14);\n }\n }\n } finally {\n flushIndex = 0;\n queue.length = 0;\n flushPostFlushCbs(seen);\n isFlushing = false;\n currentFlushPromise = null;\n if (queue.length || pendingPostFlushCbs.length) {\n flushJobs(seen);\n }\n }\n}\nfunction checkRecursiveUpdates(seen, fn) {\n if (!seen.has(fn)) {\n seen.set(fn, 1);\n } else {\n const count = seen.get(fn);\n if (count > RECURSION_LIMIT) {\n const instance = fn.ownerInstance;\n const componentName = instance && getComponentName(instance.type);\n handleError(\n `Maximum recursive updates exceeded${componentName ? ` in component <${componentName}>` : ``}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.`,\n null,\n 10\n );\n return true;\n } else {\n seen.set(fn, count + 1);\n }\n }\n}\n\nlet isHmrUpdating = false;\nconst hmrDirtyComponents = /* @__PURE__ */ new Set();\nif (!!(process.env.NODE_ENV !== \"production\")) {\n getGlobalThis().__VUE_HMR_RUNTIME__ = {\n createRecord: tryWrap(createRecord),\n rerender: tryWrap(rerender),\n reload: tryWrap(reload)\n };\n}\nconst map = /* @__PURE__ */ new Map();\nfunction registerHMR(instance) {\n const id = instance.type.__hmrId;\n let record = map.get(id);\n if (!record) {\n createRecord(id, instance.type);\n record = map.get(id);\n }\n record.instances.add(instance);\n}\nfunction unregisterHMR(instance) {\n map.get(instance.type.__hmrId).instances.delete(instance);\n}\nfunction createRecord(id, initialDef) {\n if (map.has(id)) {\n return false;\n }\n map.set(id, {\n initialDef: normalizeClassComponent(initialDef),\n instances: /* @__PURE__ */ new Set()\n });\n return true;\n}\nfunction normalizeClassComponent(component) {\n return isClassComponent(component) ? component.__vccOpts : component;\n}\nfunction rerender(id, newRender) {\n const record = map.get(id);\n if (!record) {\n return;\n }\n record.initialDef.render = newRender;\n [...record.instances].forEach((instance) => {\n if (newRender) {\n instance.render = newRender;\n normalizeClassComponent(instance.type).render = newRender;\n }\n instance.renderCache = [];\n isHmrUpdating = true;\n instance.effect.dirty = true;\n instance.update();\n isHmrUpdating = false;\n });\n}\nfunction reload(id, newComp) {\n const record = map.get(id);\n if (!record)\n return;\n newComp = normalizeClassComponent(newComp);\n updateComponentDef(record.initialDef, newComp);\n const instances = [...record.instances];\n for (const instance of instances) {\n const oldComp = normalizeClassComponent(instance.type);\n if (!hmrDirtyComponents.has(oldComp)) {\n if (oldComp !== record.initialDef) {\n updateComponentDef(oldComp, newComp);\n }\n hmrDirtyComponents.add(oldComp);\n }\n instance.appContext.propsCache.delete(instance.type);\n instance.appContext.emitsCache.delete(instance.type);\n instance.appContext.optionsCache.delete(instance.type);\n if (instance.ceReload) {\n hmrDirtyComponents.add(oldComp);\n instance.ceReload(newComp.styles);\n hmrDirtyComponents.delete(oldComp);\n } else if (instance.parent) {\n instance.parent.effect.dirty = true;\n queueJob(instance.parent.update);\n } else if (instance.appContext.reload) {\n instance.appContext.reload();\n } else if (typeof window !== \"undefined\") {\n window.location.reload();\n } else {\n console.warn(\n \"[HMR] Root or manually mounted instance modified. Full reload required.\"\n );\n }\n }\n queuePostFlushCb(() => {\n for (const instance of instances) {\n hmrDirtyComponents.delete(\n normalizeClassComponent(instance.type)\n );\n }\n });\n}\nfunction updateComponentDef(oldComp, newComp) {\n extend(oldComp, newComp);\n for (const key in oldComp) {\n if (key !== \"__file\" && !(key in newComp)) {\n delete oldComp[key];\n }\n }\n}\nfunction tryWrap(fn) {\n return (id, arg) => {\n try {\n return fn(id, arg);\n } catch (e) {\n console.error(e);\n console.warn(\n `[HMR] Something went wrong during Vue component hot-reload. Full reload required.`\n );\n }\n };\n}\n\nlet devtools$1;\nlet buffer = [];\nlet devtoolsNotInstalled = false;\nfunction emit$1(event, ...args) {\n if (devtools$1) {\n devtools$1.emit(event, ...args);\n } else if (!devtoolsNotInstalled) {\n buffer.push({ event, args });\n }\n}\nfunction setDevtoolsHook$1(hook, target) {\n var _a, _b;\n devtools$1 = hook;\n if (devtools$1) {\n devtools$1.enabled = true;\n buffer.forEach(({ event, args }) => devtools$1.emit(event, ...args));\n buffer = [];\n } else if (\n // handle late devtools injection - only do this if we are in an actual\n // browser environment to avoid the timer handle stalling test runner exit\n // (#4815)\n typeof window !== \"undefined\" && // some envs mock window but not fully\n window.HTMLElement && // also exclude jsdom\n !((_b = (_a = window.navigator) == null ? void 0 : _a.userAgent) == null ? void 0 : _b.includes(\"jsdom\"))\n ) {\n const replay = target.__VUE_DEVTOOLS_HOOK_REPLAY__ = target.__VUE_DEVTOOLS_HOOK_REPLAY__ || [];\n replay.push((newHook) => {\n setDevtoolsHook$1(newHook, target);\n });\n setTimeout(() => {\n if (!devtools$1) {\n target.__VUE_DEVTOOLS_HOOK_REPLAY__ = null;\n devtoolsNotInstalled = true;\n buffer = [];\n }\n }, 3e3);\n } else {\n devtoolsNotInstalled = true;\n buffer = [];\n }\n}\nfunction devtoolsInitApp(app, version) {\n emit$1(\"app:init\" /* APP_INIT */, app, version, {\n Fragment,\n Text,\n Comment,\n Static\n });\n}\nfunction devtoolsUnmountApp(app) {\n emit$1(\"app:unmount\" /* APP_UNMOUNT */, app);\n}\nconst devtoolsComponentAdded = /* @__PURE__ */ createDevtoolsComponentHook(\n \"component:added\" /* COMPONENT_ADDED */\n);\nconst devtoolsComponentUpdated = /* @__PURE__ */ createDevtoolsComponentHook(\"component:updated\" /* COMPONENT_UPDATED */);\nconst _devtoolsComponentRemoved = /* @__PURE__ */ createDevtoolsComponentHook(\n \"component:removed\" /* COMPONENT_REMOVED */\n);\nconst devtoolsComponentRemoved = (component) => {\n if (devtools$1 && typeof devtools$1.cleanupBuffer === \"function\" && // remove the component if it wasn't buffered\n !devtools$1.cleanupBuffer(component)) {\n _devtoolsComponentRemoved(component);\n }\n};\n/*! #__NO_SIDE_EFFECTS__ */\n// @__NO_SIDE_EFFECTS__\nfunction createDevtoolsComponentHook(hook) {\n return (component) => {\n emit$1(\n hook,\n component.appContext.app,\n component.uid,\n component.parent ? component.parent.uid : void 0,\n component\n );\n };\n}\nconst devtoolsPerfStart = /* @__PURE__ */ createDevtoolsPerformanceHook(\n \"perf:start\" /* PERFORMANCE_START */\n);\nconst devtoolsPerfEnd = /* @__PURE__ */ createDevtoolsPerformanceHook(\n \"perf:end\" /* PERFORMANCE_END */\n);\nfunction createDevtoolsPerformanceHook(hook) {\n return (component, type, time) => {\n emit$1(hook, component.appContext.app, component.uid, component, type, time);\n };\n}\nfunction devtoolsComponentEmit(component, event, params) {\n emit$1(\n \"component:emit\" /* COMPONENT_EMIT */,\n component.appContext.app,\n component,\n event,\n params\n );\n}\n\nfunction emit(instance, event, ...rawArgs) {\n if (instance.isUnmounted)\n return;\n const props = instance.vnode.props || EMPTY_OBJ;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const {\n emitsOptions,\n propsOptions: [propsOptions]\n } = instance;\n if (emitsOptions) {\n if (!(event in emitsOptions) && true) {\n if (!propsOptions || !(toHandlerKey(event) in propsOptions)) {\n warn$1(\n `Component emitted event \"${event}\" but it is neither declared in the emits option nor as an \"${toHandlerKey(event)}\" prop.`\n );\n }\n } else {\n const validator = emitsOptions[event];\n if (isFunction(validator)) {\n const isValid = validator(...rawArgs);\n if (!isValid) {\n warn$1(\n `Invalid event arguments: event validation failed for event \"${event}\".`\n );\n }\n }\n }\n }\n }\n let args = rawArgs;\n const isModelListener = event.startsWith(\"update:\");\n const modelArg = isModelListener && event.slice(7);\n if (modelArg && modelArg in props) {\n const modifiersKey = `${modelArg === \"modelValue\" ? \"model\" : modelArg}Modifiers`;\n const { number, trim } = props[modifiersKey] || EMPTY_OBJ;\n if (trim) {\n args = rawArgs.map((a) => isString(a) ? a.trim() : a);\n }\n if (number) {\n args = rawArgs.map(looseToNumber);\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentEmit(instance, event, args);\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const lowerCaseEvent = event.toLowerCase();\n if (lowerCaseEvent !== event && props[toHandlerKey(lowerCaseEvent)]) {\n warn$1(\n `Event \"${lowerCaseEvent}\" is emitted in component ${formatComponentName(\n instance,\n instance.type\n )} but the handler is registered for \"${event}\". Note that HTML attributes are case-insensitive and you cannot use v-on to listen to camelCase events when using in-DOM templates. You should probably use \"${hyphenate(\n event\n )}\" instead of \"${event}\".`\n );\n }\n }\n let handlerName;\n let handler = props[handlerName = toHandlerKey(event)] || // also try camelCase event handler (#2249)\n props[handlerName = toHandlerKey(camelize(event))];\n if (!handler && isModelListener) {\n handler = props[handlerName = toHandlerKey(hyphenate(event))];\n }\n if (handler) {\n callWithAsyncErrorHandling(\n handler,\n instance,\n 6,\n args\n );\n }\n const onceHandler = props[handlerName + `Once`];\n if (onceHandler) {\n if (!instance.emitted) {\n instance.emitted = {};\n } else if (instance.emitted[handlerName]) {\n return;\n }\n instance.emitted[handlerName] = true;\n callWithAsyncErrorHandling(\n onceHandler,\n instance,\n 6,\n args\n );\n }\n}\nfunction normalizeEmitsOptions(comp, appContext, asMixin = false) {\n const cache = appContext.emitsCache;\n const cached = cache.get(comp);\n if (cached !== void 0) {\n return cached;\n }\n const raw = comp.emits;\n let normalized = {};\n let hasExtends = false;\n if (__VUE_OPTIONS_API__ && !isFunction(comp)) {\n const extendEmits = (raw2) => {\n const normalizedFromExtend = normalizeEmitsOptions(raw2, appContext, true);\n if (normalizedFromExtend) {\n hasExtends = true;\n extend(normalized, normalizedFromExtend);\n }\n };\n if (!asMixin && appContext.mixins.length) {\n appContext.mixins.forEach(extendEmits);\n }\n if (comp.extends) {\n extendEmits(comp.extends);\n }\n if (comp.mixins) {\n comp.mixins.forEach(extendEmits);\n }\n }\n if (!raw && !hasExtends) {\n if (isObject(comp)) {\n cache.set(comp, null);\n }\n return null;\n }\n if (isArray(raw)) {\n raw.forEach((key) => normalized[key] = null);\n } else {\n extend(normalized, raw);\n }\n if (isObject(comp)) {\n cache.set(comp, normalized);\n }\n return normalized;\n}\nfunction isEmitListener(options, key) {\n if (!options || !isOn(key)) {\n return false;\n }\n key = key.slice(2).replace(/Once$/, \"\");\n return hasOwn(options, key[0].toLowerCase() + key.slice(1)) || hasOwn(options, hyphenate(key)) || hasOwn(options, key);\n}\n\nlet currentRenderingInstance = null;\nlet currentScopeId = null;\nfunction setCurrentRenderingInstance(instance) {\n const prev = currentRenderingInstance;\n currentRenderingInstance = instance;\n currentScopeId = instance && instance.type.__scopeId || null;\n return prev;\n}\nfunction pushScopeId(id) {\n currentScopeId = id;\n}\nfunction popScopeId() {\n currentScopeId = null;\n}\nconst withScopeId = (_id) => withCtx;\nfunction withCtx(fn, ctx = currentRenderingInstance, isNonScopedSlot) {\n if (!ctx)\n return fn;\n if (fn._n) {\n return fn;\n }\n const renderFnWithContext = (...args) => {\n if (renderFnWithContext._d) {\n setBlockTracking(-1);\n }\n const prevInstance = setCurrentRenderingInstance(ctx);\n let res;\n try {\n res = fn(...args);\n } finally {\n setCurrentRenderingInstance(prevInstance);\n if (renderFnWithContext._d) {\n setBlockTracking(1);\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentUpdated(ctx);\n }\n return res;\n };\n renderFnWithContext._n = true;\n renderFnWithContext._c = true;\n renderFnWithContext._d = true;\n return renderFnWithContext;\n}\n\nlet accessedAttrs = false;\nfunction markAttrsAccessed() {\n accessedAttrs = true;\n}\nfunction renderComponentRoot(instance) {\n const {\n type: Component,\n vnode,\n proxy,\n withProxy,\n propsOptions: [propsOptions],\n slots,\n attrs,\n emit,\n render,\n renderCache,\n props,\n data,\n setupState,\n ctx,\n inheritAttrs\n } = instance;\n const prev = setCurrentRenderingInstance(instance);\n let result;\n let fallthroughAttrs;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n accessedAttrs = false;\n }\n try {\n if (vnode.shapeFlag & 4) {\n const proxyToUse = withProxy || proxy;\n const thisProxy = !!(process.env.NODE_ENV !== \"production\") && setupState.__isScriptSetup ? new Proxy(proxyToUse, {\n get(target, key, receiver) {\n warn$1(\n `Property '${String(\n key\n )}' was accessed via 'this'. Avoid using 'this' in templates.`\n );\n return Reflect.get(target, key, receiver);\n }\n }) : proxyToUse;\n result = normalizeVNode(\n render.call(\n thisProxy,\n proxyToUse,\n renderCache,\n !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(props) : props,\n setupState,\n data,\n ctx\n )\n );\n fallthroughAttrs = attrs;\n } else {\n const render2 = Component;\n if (!!(process.env.NODE_ENV !== \"production\") && attrs === props) {\n markAttrsAccessed();\n }\n result = normalizeVNode(\n render2.length > 1 ? render2(\n !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(props) : props,\n !!(process.env.NODE_ENV !== \"production\") ? {\n get attrs() {\n markAttrsAccessed();\n return shallowReadonly(attrs);\n },\n slots,\n emit\n } : { attrs, slots, emit }\n ) : render2(\n !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(props) : props,\n null\n )\n );\n fallthroughAttrs = Component.props ? attrs : getFunctionalFallthrough(attrs);\n }\n } catch (err) {\n blockStack.length = 0;\n handleError(err, instance, 1);\n result = createVNode(Comment);\n }\n let root = result;\n let setRoot = void 0;\n if (!!(process.env.NODE_ENV !== \"production\") && result.patchFlag > 0 && result.patchFlag & 2048) {\n [root, setRoot] = getChildRoot(result);\n }\n if (fallthroughAttrs && inheritAttrs !== false) {\n const keys = Object.keys(fallthroughAttrs);\n const { shapeFlag } = root;\n if (keys.length) {\n if (shapeFlag & (1 | 6)) {\n if (propsOptions && keys.some(isModelListener)) {\n fallthroughAttrs = filterModelListeners(\n fallthroughAttrs,\n propsOptions\n );\n }\n root = cloneVNode(root, fallthroughAttrs, false, true);\n } else if (!!(process.env.NODE_ENV !== \"production\") && !accessedAttrs && root.type !== Comment) {\n const allAttrs = Object.keys(attrs);\n const eventAttrs = [];\n const extraAttrs = [];\n for (let i = 0, l = allAttrs.length; i < l; i++) {\n const key = allAttrs[i];\n if (isOn(key)) {\n if (!isModelListener(key)) {\n eventAttrs.push(key[2].toLowerCase() + key.slice(3));\n }\n } else {\n extraAttrs.push(key);\n }\n }\n if (extraAttrs.length) {\n warn$1(\n `Extraneous non-props attributes (${extraAttrs.join(\", \")}) were passed to component but could not be automatically inherited because component renders fragment or text root nodes.`\n );\n }\n if (eventAttrs.length) {\n warn$1(\n `Extraneous non-emits event listeners (${eventAttrs.join(\", \")}) were passed to component but could not be automatically inherited because component renders fragment or text root nodes. If the listener is intended to be a component custom event listener only, declare it using the \"emits\" option.`\n );\n }\n }\n }\n }\n if (vnode.dirs) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isElementRoot(root)) {\n warn$1(\n `Runtime directive used on component with non-element root node. The directives will not function as intended.`\n );\n }\n root = cloneVNode(root, null, false, true);\n root.dirs = root.dirs ? root.dirs.concat(vnode.dirs) : vnode.dirs;\n }\n if (vnode.transition) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isElementRoot(root)) {\n warn$1(\n `Component inside renders non-element root node that cannot be animated.`\n );\n }\n root.transition = vnode.transition;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && setRoot) {\n setRoot(root);\n } else {\n result = root;\n }\n setCurrentRenderingInstance(prev);\n return result;\n}\nconst getChildRoot = (vnode) => {\n const rawChildren = vnode.children;\n const dynamicChildren = vnode.dynamicChildren;\n const childRoot = filterSingleRoot(rawChildren, false);\n if (!childRoot) {\n return [vnode, void 0];\n } else if (!!(process.env.NODE_ENV !== \"production\") && childRoot.patchFlag > 0 && childRoot.patchFlag & 2048) {\n return getChildRoot(childRoot);\n }\n const index = rawChildren.indexOf(childRoot);\n const dynamicIndex = dynamicChildren ? dynamicChildren.indexOf(childRoot) : -1;\n const setRoot = (updatedRoot) => {\n rawChildren[index] = updatedRoot;\n if (dynamicChildren) {\n if (dynamicIndex > -1) {\n dynamicChildren[dynamicIndex] = updatedRoot;\n } else if (updatedRoot.patchFlag > 0) {\n vnode.dynamicChildren = [...dynamicChildren, updatedRoot];\n }\n }\n };\n return [normalizeVNode(childRoot), setRoot];\n};\nfunction filterSingleRoot(children, recurse = true) {\n let singleRoot;\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (isVNode(child)) {\n if (child.type !== Comment || child.children === \"v-if\") {\n if (singleRoot) {\n return;\n } else {\n singleRoot = child;\n if (!!(process.env.NODE_ENV !== \"production\") && recurse && singleRoot.patchFlag > 0 && singleRoot.patchFlag & 2048) {\n return filterSingleRoot(singleRoot.children);\n }\n }\n }\n } else {\n return;\n }\n }\n return singleRoot;\n}\nconst getFunctionalFallthrough = (attrs) => {\n let res;\n for (const key in attrs) {\n if (key === \"class\" || key === \"style\" || isOn(key)) {\n (res || (res = {}))[key] = attrs[key];\n }\n }\n return res;\n};\nconst filterModelListeners = (attrs, props) => {\n const res = {};\n for (const key in attrs) {\n if (!isModelListener(key) || !(key.slice(9) in props)) {\n res[key] = attrs[key];\n }\n }\n return res;\n};\nconst isElementRoot = (vnode) => {\n return vnode.shapeFlag & (6 | 1) || vnode.type === Comment;\n};\nfunction shouldUpdateComponent(prevVNode, nextVNode, optimized) {\n const { props: prevProps, children: prevChildren, component } = prevVNode;\n const { props: nextProps, children: nextChildren, patchFlag } = nextVNode;\n const emits = component.emitsOptions;\n if (!!(process.env.NODE_ENV !== \"production\") && (prevChildren || nextChildren) && isHmrUpdating) {\n return true;\n }\n if (nextVNode.dirs || nextVNode.transition) {\n return true;\n }\n if (optimized && patchFlag >= 0) {\n if (patchFlag & 1024) {\n return true;\n }\n if (patchFlag & 16) {\n if (!prevProps) {\n return !!nextProps;\n }\n return hasPropsChanged(prevProps, nextProps, emits);\n } else if (patchFlag & 8) {\n const dynamicProps = nextVNode.dynamicProps;\n for (let i = 0; i < dynamicProps.length; i++) {\n const key = dynamicProps[i];\n if (nextProps[key] !== prevProps[key] && !isEmitListener(emits, key)) {\n return true;\n }\n }\n }\n } else {\n if (prevChildren || nextChildren) {\n if (!nextChildren || !nextChildren.$stable) {\n return true;\n }\n }\n if (prevProps === nextProps) {\n return false;\n }\n if (!prevProps) {\n return !!nextProps;\n }\n if (!nextProps) {\n return true;\n }\n return hasPropsChanged(prevProps, nextProps, emits);\n }\n return false;\n}\nfunction hasPropsChanged(prevProps, nextProps, emitsOptions) {\n const nextKeys = Object.keys(nextProps);\n if (nextKeys.length !== Object.keys(prevProps).length) {\n return true;\n }\n for (let i = 0; i < nextKeys.length; i++) {\n const key = nextKeys[i];\n if (nextProps[key] !== prevProps[key] && !isEmitListener(emitsOptions, key)) {\n return true;\n }\n }\n return false;\n}\nfunction updateHOCHostEl({ vnode, parent }, el) {\n while (parent) {\n const root = parent.subTree;\n if (root.suspense && root.suspense.activeBranch === vnode) {\n root.el = vnode.el;\n }\n if (root === vnode) {\n (vnode = parent.vnode).el = el;\n parent = parent.parent;\n } else {\n break;\n }\n }\n}\n\nconst COMPONENTS = \"components\";\nconst DIRECTIVES = \"directives\";\nfunction resolveComponent(name, maybeSelfReference) {\n return resolveAsset(COMPONENTS, name, true, maybeSelfReference) || name;\n}\nconst NULL_DYNAMIC_COMPONENT = Symbol.for(\"v-ndc\");\nfunction resolveDynamicComponent(component) {\n if (isString(component)) {\n return resolveAsset(COMPONENTS, component, false) || component;\n } else {\n return component || NULL_DYNAMIC_COMPONENT;\n }\n}\nfunction resolveDirective(name) {\n return resolveAsset(DIRECTIVES, name);\n}\nfunction resolveAsset(type, name, warnMissing = true, maybeSelfReference = false) {\n const instance = currentRenderingInstance || currentInstance;\n if (instance) {\n const Component = instance.type;\n if (type === COMPONENTS) {\n const selfName = getComponentName(\n Component,\n false\n );\n if (selfName && (selfName === name || selfName === camelize(name) || selfName === capitalize(camelize(name)))) {\n return Component;\n }\n }\n const res = (\n // local registration\n // check instance[type] first which is resolved for options API\n resolve(instance[type] || Component[type], name) || // global registration\n resolve(instance.appContext[type], name)\n );\n if (!res && maybeSelfReference) {\n return Component;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && warnMissing && !res) {\n const extra = type === COMPONENTS ? `\nIf this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.` : ``;\n warn$1(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`);\n }\n return res;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `resolve${capitalize(type.slice(0, -1))} can only be used in render() or setup().`\n );\n }\n}\nfunction resolve(registry, name) {\n return registry && (registry[name] || registry[camelize(name)] || registry[capitalize(camelize(name))]);\n}\n\nconst isSuspense = (type) => type.__isSuspense;\nlet suspenseId = 0;\nconst SuspenseImpl = {\n name: \"Suspense\",\n // In order to make Suspense tree-shakable, we need to avoid importing it\n // directly in the renderer. The renderer checks for the __isSuspense flag\n // on a vnode's type and calls the `process` method, passing in renderer\n // internals.\n __isSuspense: true,\n process(n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, rendererInternals) {\n if (n1 == null) {\n mountSuspense(\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized,\n rendererInternals\n );\n } else {\n if (parentSuspense && parentSuspense.deps > 0 && !n1.suspense.isInFallback) {\n n2.suspense = n1.suspense;\n n2.suspense.vnode = n2;\n n2.el = n1.el;\n return;\n }\n patchSuspense(\n n1,\n n2,\n container,\n anchor,\n parentComponent,\n namespace,\n slotScopeIds,\n optimized,\n rendererInternals\n );\n }\n },\n hydrate: hydrateSuspense,\n create: createSuspenseBoundary,\n normalize: normalizeSuspenseChildren\n};\nconst Suspense = SuspenseImpl ;\nfunction triggerEvent(vnode, name) {\n const eventListener = vnode.props && vnode.props[name];\n if (isFunction(eventListener)) {\n eventListener();\n }\n}\nfunction mountSuspense(vnode, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, rendererInternals) {\n const {\n p: patch,\n o: { createElement }\n } = rendererInternals;\n const hiddenContainer = createElement(\"div\");\n const suspense = vnode.suspense = createSuspenseBoundary(\n vnode,\n parentSuspense,\n parentComponent,\n container,\n hiddenContainer,\n anchor,\n namespace,\n slotScopeIds,\n optimized,\n rendererInternals\n );\n patch(\n null,\n suspense.pendingBranch = vnode.ssContent,\n hiddenContainer,\n null,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds\n );\n if (suspense.deps > 0) {\n triggerEvent(vnode, \"onPending\");\n triggerEvent(vnode, \"onFallback\");\n patch(\n null,\n vnode.ssFallback,\n container,\n anchor,\n parentComponent,\n null,\n // fallback tree will not have suspense context\n namespace,\n slotScopeIds\n );\n setActiveBranch(suspense, vnode.ssFallback);\n } else {\n suspense.resolve(false, true);\n }\n}\nfunction patchSuspense(n1, n2, container, anchor, parentComponent, namespace, slotScopeIds, optimized, { p: patch, um: unmount, o: { createElement } }) {\n const suspense = n2.suspense = n1.suspense;\n suspense.vnode = n2;\n n2.el = n1.el;\n const newBranch = n2.ssContent;\n const newFallback = n2.ssFallback;\n const { activeBranch, pendingBranch, isInFallback, isHydrating } = suspense;\n if (pendingBranch) {\n suspense.pendingBranch = newBranch;\n if (isSameVNodeType(newBranch, pendingBranch)) {\n patch(\n pendingBranch,\n newBranch,\n suspense.hiddenContainer,\n null,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds,\n optimized\n );\n if (suspense.deps <= 0) {\n suspense.resolve();\n } else if (isInFallback) {\n if (!isHydrating) {\n patch(\n activeBranch,\n newFallback,\n container,\n anchor,\n parentComponent,\n null,\n // fallback tree will not have suspense context\n namespace,\n slotScopeIds,\n optimized\n );\n setActiveBranch(suspense, newFallback);\n }\n }\n } else {\n suspense.pendingId = suspenseId++;\n if (isHydrating) {\n suspense.isHydrating = false;\n suspense.activeBranch = pendingBranch;\n } else {\n unmount(pendingBranch, parentComponent, suspense);\n }\n suspense.deps = 0;\n suspense.effects.length = 0;\n suspense.hiddenContainer = createElement(\"div\");\n if (isInFallback) {\n patch(\n null,\n newBranch,\n suspense.hiddenContainer,\n null,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds,\n optimized\n );\n if (suspense.deps <= 0) {\n suspense.resolve();\n } else {\n patch(\n activeBranch,\n newFallback,\n container,\n anchor,\n parentComponent,\n null,\n // fallback tree will not have suspense context\n namespace,\n slotScopeIds,\n optimized\n );\n setActiveBranch(suspense, newFallback);\n }\n } else if (activeBranch && isSameVNodeType(newBranch, activeBranch)) {\n patch(\n activeBranch,\n newBranch,\n container,\n anchor,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds,\n optimized\n );\n suspense.resolve(true);\n } else {\n patch(\n null,\n newBranch,\n suspense.hiddenContainer,\n null,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds,\n optimized\n );\n if (suspense.deps <= 0) {\n suspense.resolve();\n }\n }\n }\n } else {\n if (activeBranch && isSameVNodeType(newBranch, activeBranch)) {\n patch(\n activeBranch,\n newBranch,\n container,\n anchor,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds,\n optimized\n );\n setActiveBranch(suspense, newBranch);\n } else {\n triggerEvent(n2, \"onPending\");\n suspense.pendingBranch = newBranch;\n if (newBranch.shapeFlag & 512) {\n suspense.pendingId = newBranch.component.suspenseId;\n } else {\n suspense.pendingId = suspenseId++;\n }\n patch(\n null,\n newBranch,\n suspense.hiddenContainer,\n null,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds,\n optimized\n );\n if (suspense.deps <= 0) {\n suspense.resolve();\n } else {\n const { timeout, pendingId } = suspense;\n if (timeout > 0) {\n setTimeout(() => {\n if (suspense.pendingId === pendingId) {\n suspense.fallback(newFallback);\n }\n }, timeout);\n } else if (timeout === 0) {\n suspense.fallback(newFallback);\n }\n }\n }\n }\n}\nlet hasWarned = false;\nfunction createSuspenseBoundary(vnode, parentSuspense, parentComponent, container, hiddenContainer, anchor, namespace, slotScopeIds, optimized, rendererInternals, isHydrating = false) {\n if (!!(process.env.NODE_ENV !== \"production\") && true && !hasWarned) {\n hasWarned = true;\n console[console.info ? \"info\" : \"log\"](\n ` is an experimental feature and its API will likely change.`\n );\n }\n const {\n p: patch,\n m: move,\n um: unmount,\n n: next,\n o: { parentNode, remove }\n } = rendererInternals;\n let parentSuspenseId;\n const isSuspensible = isVNodeSuspensible(vnode);\n if (isSuspensible) {\n if (parentSuspense && parentSuspense.pendingBranch) {\n parentSuspenseId = parentSuspense.pendingId;\n parentSuspense.deps++;\n }\n }\n const timeout = vnode.props ? toNumber(vnode.props.timeout) : void 0;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n assertNumber(timeout, `Suspense timeout`);\n }\n const initialAnchor = anchor;\n const suspense = {\n vnode,\n parent: parentSuspense,\n parentComponent,\n namespace,\n container,\n hiddenContainer,\n deps: 0,\n pendingId: suspenseId++,\n timeout: typeof timeout === \"number\" ? timeout : -1,\n activeBranch: null,\n pendingBranch: null,\n isInFallback: !isHydrating,\n isHydrating,\n isUnmounted: false,\n effects: [],\n resolve(resume = false, sync = false) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (!resume && !suspense.pendingBranch) {\n throw new Error(\n `suspense.resolve() is called without a pending branch.`\n );\n }\n if (suspense.isUnmounted) {\n throw new Error(\n `suspense.resolve() is called on an already unmounted suspense boundary.`\n );\n }\n }\n const {\n vnode: vnode2,\n activeBranch,\n pendingBranch,\n pendingId,\n effects,\n parentComponent: parentComponent2,\n container: container2\n } = suspense;\n let delayEnter = false;\n if (suspense.isHydrating) {\n suspense.isHydrating = false;\n } else if (!resume) {\n delayEnter = activeBranch && pendingBranch.transition && pendingBranch.transition.mode === \"out-in\";\n if (delayEnter) {\n activeBranch.transition.afterLeave = () => {\n if (pendingId === suspense.pendingId) {\n move(\n pendingBranch,\n container2,\n anchor === initialAnchor ? next(activeBranch) : anchor,\n 0\n );\n queuePostFlushCb(effects);\n }\n };\n }\n if (activeBranch) {\n if (parentNode(activeBranch.el) !== suspense.hiddenContainer) {\n anchor = next(activeBranch);\n }\n unmount(activeBranch, parentComponent2, suspense, true);\n }\n if (!delayEnter) {\n move(pendingBranch, container2, anchor, 0);\n }\n }\n setActiveBranch(suspense, pendingBranch);\n suspense.pendingBranch = null;\n suspense.isInFallback = false;\n let parent = suspense.parent;\n let hasUnresolvedAncestor = false;\n while (parent) {\n if (parent.pendingBranch) {\n parent.effects.push(...effects);\n hasUnresolvedAncestor = true;\n break;\n }\n parent = parent.parent;\n }\n if (!hasUnresolvedAncestor && !delayEnter) {\n queuePostFlushCb(effects);\n }\n suspense.effects = [];\n if (isSuspensible) {\n if (parentSuspense && parentSuspense.pendingBranch && parentSuspenseId === parentSuspense.pendingId) {\n parentSuspense.deps--;\n if (parentSuspense.deps === 0 && !sync) {\n parentSuspense.resolve();\n }\n }\n }\n triggerEvent(vnode2, \"onResolve\");\n },\n fallback(fallbackVNode) {\n if (!suspense.pendingBranch) {\n return;\n }\n const { vnode: vnode2, activeBranch, parentComponent: parentComponent2, container: container2, namespace: namespace2 } = suspense;\n triggerEvent(vnode2, \"onFallback\");\n const anchor2 = next(activeBranch);\n const mountFallback = () => {\n if (!suspense.isInFallback) {\n return;\n }\n patch(\n null,\n fallbackVNode,\n container2,\n anchor2,\n parentComponent2,\n null,\n // fallback tree will not have suspense context\n namespace2,\n slotScopeIds,\n optimized\n );\n setActiveBranch(suspense, fallbackVNode);\n };\n const delayEnter = fallbackVNode.transition && fallbackVNode.transition.mode === \"out-in\";\n if (delayEnter) {\n activeBranch.transition.afterLeave = mountFallback;\n }\n suspense.isInFallback = true;\n unmount(\n activeBranch,\n parentComponent2,\n null,\n // no suspense so unmount hooks fire now\n true\n // shouldRemove\n );\n if (!delayEnter) {\n mountFallback();\n }\n },\n move(container2, anchor2, type) {\n suspense.activeBranch && move(suspense.activeBranch, container2, anchor2, type);\n suspense.container = container2;\n },\n next() {\n return suspense.activeBranch && next(suspense.activeBranch);\n },\n registerDep(instance, setupRenderEffect) {\n const isInPendingSuspense = !!suspense.pendingBranch;\n if (isInPendingSuspense) {\n suspense.deps++;\n }\n const hydratedEl = instance.vnode.el;\n instance.asyncDep.catch((err) => {\n handleError(err, instance, 0);\n }).then((asyncSetupResult) => {\n if (instance.isUnmounted || suspense.isUnmounted || suspense.pendingId !== instance.suspenseId) {\n return;\n }\n instance.asyncResolved = true;\n const { vnode: vnode2 } = instance;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n pushWarningContext(vnode2);\n }\n handleSetupResult(instance, asyncSetupResult, false);\n if (hydratedEl) {\n vnode2.el = hydratedEl;\n }\n const placeholder = !hydratedEl && instance.subTree.el;\n setupRenderEffect(\n instance,\n vnode2,\n // component may have been moved before resolve.\n // if this is not a hydration, instance.subTree will be the comment\n // placeholder.\n parentNode(hydratedEl || instance.subTree.el),\n // anchor will not be used if this is hydration, so only need to\n // consider the comment placeholder case.\n hydratedEl ? null : next(instance.subTree),\n suspense,\n namespace,\n optimized\n );\n if (placeholder) {\n remove(placeholder);\n }\n updateHOCHostEl(instance, vnode2.el);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n popWarningContext();\n }\n if (isInPendingSuspense && --suspense.deps === 0) {\n suspense.resolve();\n }\n });\n },\n unmount(parentSuspense2, doRemove) {\n suspense.isUnmounted = true;\n if (suspense.activeBranch) {\n unmount(\n suspense.activeBranch,\n parentComponent,\n parentSuspense2,\n doRemove\n );\n }\n if (suspense.pendingBranch) {\n unmount(\n suspense.pendingBranch,\n parentComponent,\n parentSuspense2,\n doRemove\n );\n }\n }\n };\n return suspense;\n}\nfunction hydrateSuspense(node, vnode, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, rendererInternals, hydrateNode) {\n const suspense = vnode.suspense = createSuspenseBoundary(\n vnode,\n parentSuspense,\n parentComponent,\n node.parentNode,\n // eslint-disable-next-line no-restricted-globals\n document.createElement(\"div\"),\n null,\n namespace,\n slotScopeIds,\n optimized,\n rendererInternals,\n true\n );\n const result = hydrateNode(\n node,\n suspense.pendingBranch = vnode.ssContent,\n parentComponent,\n suspense,\n slotScopeIds,\n optimized\n );\n if (suspense.deps === 0) {\n suspense.resolve(false, true);\n }\n return result;\n}\nfunction normalizeSuspenseChildren(vnode) {\n const { shapeFlag, children } = vnode;\n const isSlotChildren = shapeFlag & 32;\n vnode.ssContent = normalizeSuspenseSlot(\n isSlotChildren ? children.default : children\n );\n vnode.ssFallback = isSlotChildren ? normalizeSuspenseSlot(children.fallback) : createVNode(Comment);\n}\nfunction normalizeSuspenseSlot(s) {\n let block;\n if (isFunction(s)) {\n const trackBlock = isBlockTreeEnabled && s._c;\n if (trackBlock) {\n s._d = false;\n openBlock();\n }\n s = s();\n if (trackBlock) {\n s._d = true;\n block = currentBlock;\n closeBlock();\n }\n }\n if (isArray(s)) {\n const singleChild = filterSingleRoot(s);\n if (!!(process.env.NODE_ENV !== \"production\") && !singleChild && s.filter((child) => child !== NULL_DYNAMIC_COMPONENT).length > 0) {\n warn$1(` slots expect a single root node.`);\n }\n s = singleChild;\n }\n s = normalizeVNode(s);\n if (block && !s.dynamicChildren) {\n s.dynamicChildren = block.filter((c) => c !== s);\n }\n return s;\n}\nfunction queueEffectWithSuspense(fn, suspense) {\n if (suspense && suspense.pendingBranch) {\n if (isArray(fn)) {\n suspense.effects.push(...fn);\n } else {\n suspense.effects.push(fn);\n }\n } else {\n queuePostFlushCb(fn);\n }\n}\nfunction setActiveBranch(suspense, branch) {\n suspense.activeBranch = branch;\n const { vnode, parentComponent } = suspense;\n let el = branch.el;\n while (!el && branch.component) {\n branch = branch.component.subTree;\n el = branch.el;\n }\n vnode.el = el;\n if (parentComponent && parentComponent.subTree === vnode) {\n parentComponent.vnode.el = el;\n updateHOCHostEl(parentComponent, el);\n }\n}\nfunction isVNodeSuspensible(vnode) {\n const suspensible = vnode.props && vnode.props.suspensible;\n return suspensible != null && suspensible !== false;\n}\n\nconst ssrContextKey = Symbol.for(\"v-scx\");\nconst useSSRContext = () => {\n {\n const ctx = inject(ssrContextKey);\n if (!ctx) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(\n `Server rendering context not provided. Make sure to only call useSSRContext() conditionally in the server build.`\n );\n }\n return ctx;\n }\n};\n\nfunction watchEffect(effect, options) {\n return doWatch(effect, null, options);\n}\nfunction watchPostEffect(effect, options) {\n return doWatch(\n effect,\n null,\n !!(process.env.NODE_ENV !== \"production\") ? extend({}, options, { flush: \"post\" }) : { flush: \"post\" }\n );\n}\nfunction watchSyncEffect(effect, options) {\n return doWatch(\n effect,\n null,\n !!(process.env.NODE_ENV !== \"production\") ? extend({}, options, { flush: \"sync\" }) : { flush: \"sync\" }\n );\n}\nconst INITIAL_WATCHER_VALUE = {};\nfunction watch(source, cb, options) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isFunction(cb)) {\n warn$1(\n `\\`watch(fn, options?)\\` signature has been moved to a separate API. Use \\`watchEffect(fn, options?)\\` instead. \\`watch\\` now only supports \\`watch(source, cb, options?) signature.`\n );\n }\n return doWatch(source, cb, options);\n}\nfunction doWatch(source, cb, {\n immediate,\n deep,\n flush,\n once,\n onTrack,\n onTrigger\n} = EMPTY_OBJ) {\n if (cb && once) {\n const _cb = cb;\n cb = (...args) => {\n _cb(...args);\n unwatch();\n };\n }\n if (!!(process.env.NODE_ENV !== \"production\") && deep !== void 0 && typeof deep === \"number\") {\n warn$1(\n `watch() \"deep\" option with number value will be used as watch depth in future versions. Please use a boolean instead to avoid potential breakage.`\n );\n }\n if (!!(process.env.NODE_ENV !== \"production\") && !cb) {\n if (immediate !== void 0) {\n warn$1(\n `watch() \"immediate\" option is only respected when using the watch(source, callback, options?) signature.`\n );\n }\n if (deep !== void 0) {\n warn$1(\n `watch() \"deep\" option is only respected when using the watch(source, callback, options?) signature.`\n );\n }\n if (once !== void 0) {\n warn$1(\n `watch() \"once\" option is only respected when using the watch(source, callback, options?) signature.`\n );\n }\n }\n const warnInvalidSource = (s) => {\n warn$1(\n `Invalid watch source: `,\n s,\n `A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.`\n );\n };\n const instance = currentInstance;\n const reactiveGetter = (source2) => deep === true ? source2 : (\n // for deep: false, only traverse root-level properties\n traverse(source2, deep === false ? 1 : void 0)\n );\n let getter;\n let forceTrigger = false;\n let isMultiSource = false;\n if (isRef(source)) {\n getter = () => source.value;\n forceTrigger = isShallow(source);\n } else if (isReactive(source)) {\n getter = () => reactiveGetter(source);\n forceTrigger = true;\n } else if (isArray(source)) {\n isMultiSource = true;\n forceTrigger = source.some((s) => isReactive(s) || isShallow(s));\n getter = () => source.map((s) => {\n if (isRef(s)) {\n return s.value;\n } else if (isReactive(s)) {\n return reactiveGetter(s);\n } else if (isFunction(s)) {\n return callWithErrorHandling(s, instance, 2);\n } else {\n !!(process.env.NODE_ENV !== \"production\") && warnInvalidSource(s);\n }\n });\n } else if (isFunction(source)) {\n if (cb) {\n getter = () => callWithErrorHandling(source, instance, 2);\n } else {\n getter = () => {\n if (cleanup) {\n cleanup();\n }\n return callWithAsyncErrorHandling(\n source,\n instance,\n 3,\n [onCleanup]\n );\n };\n }\n } else {\n getter = NOOP;\n !!(process.env.NODE_ENV !== \"production\") && warnInvalidSource(source);\n }\n if (cb && deep) {\n const baseGetter = getter;\n getter = () => traverse(baseGetter());\n }\n let cleanup;\n let onCleanup = (fn) => {\n cleanup = effect.onStop = () => {\n callWithErrorHandling(fn, instance, 4);\n cleanup = effect.onStop = void 0;\n };\n };\n let ssrCleanup;\n if (isInSSRComponentSetup) {\n onCleanup = NOOP;\n if (!cb) {\n getter();\n } else if (immediate) {\n callWithAsyncErrorHandling(cb, instance, 3, [\n getter(),\n isMultiSource ? [] : void 0,\n onCleanup\n ]);\n }\n if (flush === \"sync\") {\n const ctx = useSSRContext();\n ssrCleanup = ctx.__watcherHandles || (ctx.__watcherHandles = []);\n } else {\n return NOOP;\n }\n }\n let oldValue = isMultiSource ? new Array(source.length).fill(INITIAL_WATCHER_VALUE) : INITIAL_WATCHER_VALUE;\n const job = () => {\n if (!effect.active || !effect.dirty) {\n return;\n }\n if (cb) {\n const newValue = effect.run();\n if (deep || forceTrigger || (isMultiSource ? newValue.some((v, i) => hasChanged(v, oldValue[i])) : hasChanged(newValue, oldValue)) || false) {\n if (cleanup) {\n cleanup();\n }\n callWithAsyncErrorHandling(cb, instance, 3, [\n newValue,\n // pass undefined as the old value when it's changed for the first time\n oldValue === INITIAL_WATCHER_VALUE ? void 0 : isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE ? [] : oldValue,\n onCleanup\n ]);\n oldValue = newValue;\n }\n } else {\n effect.run();\n }\n };\n job.allowRecurse = !!cb;\n let scheduler;\n if (flush === \"sync\") {\n scheduler = job;\n } else if (flush === \"post\") {\n scheduler = () => queuePostRenderEffect(job, instance && instance.suspense);\n } else {\n job.pre = true;\n if (instance)\n job.id = instance.uid;\n scheduler = () => queueJob(job);\n }\n const effect = new ReactiveEffect(getter, NOOP, scheduler);\n const scope = getCurrentScope();\n const unwatch = () => {\n effect.stop();\n if (scope) {\n remove(scope.effects, effect);\n }\n };\n if (!!(process.env.NODE_ENV !== \"production\")) {\n effect.onTrack = onTrack;\n effect.onTrigger = onTrigger;\n }\n if (cb) {\n if (immediate) {\n job();\n } else {\n oldValue = effect.run();\n }\n } else if (flush === \"post\") {\n queuePostRenderEffect(\n effect.run.bind(effect),\n instance && instance.suspense\n );\n } else {\n effect.run();\n }\n if (ssrCleanup)\n ssrCleanup.push(unwatch);\n return unwatch;\n}\nfunction instanceWatch(source, value, options) {\n const publicThis = this.proxy;\n const getter = isString(source) ? source.includes(\".\") ? createPathGetter(publicThis, source) : () => publicThis[source] : source.bind(publicThis, publicThis);\n let cb;\n if (isFunction(value)) {\n cb = value;\n } else {\n cb = value.handler;\n options = value;\n }\n const reset = setCurrentInstance(this);\n const res = doWatch(getter, cb.bind(publicThis), options);\n reset();\n return res;\n}\nfunction createPathGetter(ctx, path) {\n const segments = path.split(\".\");\n return () => {\n let cur = ctx;\n for (let i = 0; i < segments.length && cur; i++) {\n cur = cur[segments[i]];\n }\n return cur;\n };\n}\nfunction traverse(value, depth = Infinity, seen) {\n if (depth <= 0 || !isObject(value) || value[\"__v_skip\"]) {\n return value;\n }\n seen = seen || /* @__PURE__ */ new Set();\n if (seen.has(value)) {\n return value;\n }\n seen.add(value);\n depth--;\n if (isRef(value)) {\n traverse(value.value, depth, seen);\n } else if (isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n traverse(value[i], depth, seen);\n }\n } else if (isSet(value) || isMap(value)) {\n value.forEach((v) => {\n traverse(v, depth, seen);\n });\n } else if (isPlainObject(value)) {\n for (const key in value) {\n traverse(value[key], depth, seen);\n }\n }\n return value;\n}\n\nfunction validateDirectiveName(name) {\n if (isBuiltInDirective(name)) {\n warn$1(\"Do not use built-in directive ids as custom directive id: \" + name);\n }\n}\nfunction withDirectives(vnode, directives) {\n if (currentRenderingInstance === null) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(`withDirectives can only be used inside render functions.`);\n return vnode;\n }\n const instance = getExposeProxy(currentRenderingInstance) || currentRenderingInstance.proxy;\n const bindings = vnode.dirs || (vnode.dirs = []);\n for (let i = 0; i < directives.length; i++) {\n let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i];\n if (dir) {\n if (isFunction(dir)) {\n dir = {\n mounted: dir,\n updated: dir\n };\n }\n if (dir.deep) {\n traverse(value);\n }\n bindings.push({\n dir,\n instance,\n value,\n oldValue: void 0,\n arg,\n modifiers\n });\n }\n }\n return vnode;\n}\nfunction invokeDirectiveHook(vnode, prevVNode, instance, name) {\n const bindings = vnode.dirs;\n const oldBindings = prevVNode && prevVNode.dirs;\n for (let i = 0; i < bindings.length; i++) {\n const binding = bindings[i];\n if (oldBindings) {\n binding.oldValue = oldBindings[i].value;\n }\n let hook = binding.dir[name];\n if (hook) {\n pauseTracking();\n callWithAsyncErrorHandling(hook, instance, 8, [\n vnode.el,\n binding,\n vnode,\n prevVNode\n ]);\n resetTracking();\n }\n }\n}\n\nconst leaveCbKey = Symbol(\"_leaveCb\");\nconst enterCbKey = Symbol(\"_enterCb\");\nfunction useTransitionState() {\n const state = {\n isMounted: false,\n isLeaving: false,\n isUnmounting: false,\n leavingVNodes: /* @__PURE__ */ new Map()\n };\n onMounted(() => {\n state.isMounted = true;\n });\n onBeforeUnmount(() => {\n state.isUnmounting = true;\n });\n return state;\n}\nconst TransitionHookValidator = [Function, Array];\nconst BaseTransitionPropsValidators = {\n mode: String,\n appear: Boolean,\n persisted: Boolean,\n // enter\n onBeforeEnter: TransitionHookValidator,\n onEnter: TransitionHookValidator,\n onAfterEnter: TransitionHookValidator,\n onEnterCancelled: TransitionHookValidator,\n // leave\n onBeforeLeave: TransitionHookValidator,\n onLeave: TransitionHookValidator,\n onAfterLeave: TransitionHookValidator,\n onLeaveCancelled: TransitionHookValidator,\n // appear\n onBeforeAppear: TransitionHookValidator,\n onAppear: TransitionHookValidator,\n onAfterAppear: TransitionHookValidator,\n onAppearCancelled: TransitionHookValidator\n};\nconst BaseTransitionImpl = {\n name: `BaseTransition`,\n props: BaseTransitionPropsValidators,\n setup(props, { slots }) {\n const instance = getCurrentInstance();\n const state = useTransitionState();\n return () => {\n const children = slots.default && getTransitionRawChildren(slots.default(), true);\n if (!children || !children.length) {\n return;\n }\n let child = children[0];\n if (children.length > 1) {\n let hasFound = false;\n for (const c of children) {\n if (c.type !== Comment) {\n if (!!(process.env.NODE_ENV !== \"production\") && hasFound) {\n warn$1(\n \" can only be used on a single element or component. Use for lists.\"\n );\n break;\n }\n child = c;\n hasFound = true;\n if (!!!(process.env.NODE_ENV !== \"production\"))\n break;\n }\n }\n }\n const rawProps = toRaw(props);\n const { mode } = rawProps;\n if (!!(process.env.NODE_ENV !== \"production\") && mode && mode !== \"in-out\" && mode !== \"out-in\" && mode !== \"default\") {\n warn$1(`invalid mode: ${mode}`);\n }\n if (state.isLeaving) {\n return emptyPlaceholder(child);\n }\n const innerChild = getKeepAliveChild(child);\n if (!innerChild) {\n return emptyPlaceholder(child);\n }\n const enterHooks = resolveTransitionHooks(\n innerChild,\n rawProps,\n state,\n instance\n );\n setTransitionHooks(innerChild, enterHooks);\n const oldChild = instance.subTree;\n const oldInnerChild = oldChild && getKeepAliveChild(oldChild);\n if (oldInnerChild && oldInnerChild.type !== Comment && !isSameVNodeType(innerChild, oldInnerChild)) {\n const leavingHooks = resolveTransitionHooks(\n oldInnerChild,\n rawProps,\n state,\n instance\n );\n setTransitionHooks(oldInnerChild, leavingHooks);\n if (mode === \"out-in\" && innerChild.type !== Comment) {\n state.isLeaving = true;\n leavingHooks.afterLeave = () => {\n state.isLeaving = false;\n if (instance.update.active !== false) {\n instance.effect.dirty = true;\n instance.update();\n }\n };\n return emptyPlaceholder(child);\n } else if (mode === \"in-out\" && innerChild.type !== Comment) {\n leavingHooks.delayLeave = (el, earlyRemove, delayedLeave) => {\n const leavingVNodesCache = getLeavingNodesForType(\n state,\n oldInnerChild\n );\n leavingVNodesCache[String(oldInnerChild.key)] = oldInnerChild;\n el[leaveCbKey] = () => {\n earlyRemove();\n el[leaveCbKey] = void 0;\n delete enterHooks.delayedLeave;\n };\n enterHooks.delayedLeave = delayedLeave;\n };\n }\n }\n return child;\n };\n }\n};\nconst BaseTransition = BaseTransitionImpl;\nfunction getLeavingNodesForType(state, vnode) {\n const { leavingVNodes } = state;\n let leavingVNodesCache = leavingVNodes.get(vnode.type);\n if (!leavingVNodesCache) {\n leavingVNodesCache = /* @__PURE__ */ Object.create(null);\n leavingVNodes.set(vnode.type, leavingVNodesCache);\n }\n return leavingVNodesCache;\n}\nfunction resolveTransitionHooks(vnode, props, state, instance) {\n const {\n appear,\n mode,\n persisted = false,\n onBeforeEnter,\n onEnter,\n onAfterEnter,\n onEnterCancelled,\n onBeforeLeave,\n onLeave,\n onAfterLeave,\n onLeaveCancelled,\n onBeforeAppear,\n onAppear,\n onAfterAppear,\n onAppearCancelled\n } = props;\n const key = String(vnode.key);\n const leavingVNodesCache = getLeavingNodesForType(state, vnode);\n const callHook = (hook, args) => {\n hook && callWithAsyncErrorHandling(\n hook,\n instance,\n 9,\n args\n );\n };\n const callAsyncHook = (hook, args) => {\n const done = args[1];\n callHook(hook, args);\n if (isArray(hook)) {\n if (hook.every((hook2) => hook2.length <= 1))\n done();\n } else if (hook.length <= 1) {\n done();\n }\n };\n const hooks = {\n mode,\n persisted,\n beforeEnter(el) {\n let hook = onBeforeEnter;\n if (!state.isMounted) {\n if (appear) {\n hook = onBeforeAppear || onBeforeEnter;\n } else {\n return;\n }\n }\n if (el[leaveCbKey]) {\n el[leaveCbKey](\n true\n /* cancelled */\n );\n }\n const leavingVNode = leavingVNodesCache[key];\n if (leavingVNode && isSameVNodeType(vnode, leavingVNode) && leavingVNode.el[leaveCbKey]) {\n leavingVNode.el[leaveCbKey]();\n }\n callHook(hook, [el]);\n },\n enter(el) {\n let hook = onEnter;\n let afterHook = onAfterEnter;\n let cancelHook = onEnterCancelled;\n if (!state.isMounted) {\n if (appear) {\n hook = onAppear || onEnter;\n afterHook = onAfterAppear || onAfterEnter;\n cancelHook = onAppearCancelled || onEnterCancelled;\n } else {\n return;\n }\n }\n let called = false;\n const done = el[enterCbKey] = (cancelled) => {\n if (called)\n return;\n called = true;\n if (cancelled) {\n callHook(cancelHook, [el]);\n } else {\n callHook(afterHook, [el]);\n }\n if (hooks.delayedLeave) {\n hooks.delayedLeave();\n }\n el[enterCbKey] = void 0;\n };\n if (hook) {\n callAsyncHook(hook, [el, done]);\n } else {\n done();\n }\n },\n leave(el, remove) {\n const key2 = String(vnode.key);\n if (el[enterCbKey]) {\n el[enterCbKey](\n true\n /* cancelled */\n );\n }\n if (state.isUnmounting) {\n return remove();\n }\n callHook(onBeforeLeave, [el]);\n let called = false;\n const done = el[leaveCbKey] = (cancelled) => {\n if (called)\n return;\n called = true;\n remove();\n if (cancelled) {\n callHook(onLeaveCancelled, [el]);\n } else {\n callHook(onAfterLeave, [el]);\n }\n el[leaveCbKey] = void 0;\n if (leavingVNodesCache[key2] === vnode) {\n delete leavingVNodesCache[key2];\n }\n };\n leavingVNodesCache[key2] = vnode;\n if (onLeave) {\n callAsyncHook(onLeave, [el, done]);\n } else {\n done();\n }\n },\n clone(vnode2) {\n return resolveTransitionHooks(vnode2, props, state, instance);\n }\n };\n return hooks;\n}\nfunction emptyPlaceholder(vnode) {\n if (isKeepAlive(vnode)) {\n vnode = cloneVNode(vnode);\n vnode.children = null;\n return vnode;\n }\n}\nfunction getKeepAliveChild(vnode) {\n if (!isKeepAlive(vnode)) {\n return vnode;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && vnode.component) {\n return vnode.component.subTree;\n }\n const { shapeFlag, children } = vnode;\n if (children) {\n if (shapeFlag & 16) {\n return children[0];\n }\n if (shapeFlag & 32 && isFunction(children.default)) {\n return children.default();\n }\n }\n}\nfunction setTransitionHooks(vnode, hooks) {\n if (vnode.shapeFlag & 6 && vnode.component) {\n setTransitionHooks(vnode.component.subTree, hooks);\n } else if (vnode.shapeFlag & 128) {\n vnode.ssContent.transition = hooks.clone(vnode.ssContent);\n vnode.ssFallback.transition = hooks.clone(vnode.ssFallback);\n } else {\n vnode.transition = hooks;\n }\n}\nfunction getTransitionRawChildren(children, keepComment = false, parentKey) {\n let ret = [];\n let keyedFragmentCount = 0;\n for (let i = 0; i < children.length; i++) {\n let child = children[i];\n const key = parentKey == null ? child.key : String(parentKey) + String(child.key != null ? child.key : i);\n if (child.type === Fragment) {\n if (child.patchFlag & 128)\n keyedFragmentCount++;\n ret = ret.concat(\n getTransitionRawChildren(child.children, keepComment, key)\n );\n } else if (keepComment || child.type !== Comment) {\n ret.push(key != null ? cloneVNode(child, { key }) : child);\n }\n }\n if (keyedFragmentCount > 1) {\n for (let i = 0; i < ret.length; i++) {\n ret[i].patchFlag = -2;\n }\n }\n return ret;\n}\n\n/*! #__NO_SIDE_EFFECTS__ */\n// @__NO_SIDE_EFFECTS__\nfunction defineComponent(options, extraOptions) {\n return isFunction(options) ? (\n // #8326: extend call and options.name access are considered side-effects\n // by Rollup, so we have to wrap it in a pure-annotated IIFE.\n /* @__PURE__ */ (() => extend({ name: options.name }, extraOptions, { setup: options }))()\n ) : options;\n}\n\nconst isAsyncWrapper = (i) => !!i.type.__asyncLoader;\n/*! #__NO_SIDE_EFFECTS__ */\n// @__NO_SIDE_EFFECTS__\nfunction defineAsyncComponent(source) {\n if (isFunction(source)) {\n source = { loader: source };\n }\n const {\n loader,\n loadingComponent,\n errorComponent,\n delay = 200,\n timeout,\n // undefined = never times out\n suspensible = true,\n onError: userOnError\n } = source;\n let pendingRequest = null;\n let resolvedComp;\n let retries = 0;\n const retry = () => {\n retries++;\n pendingRequest = null;\n return load();\n };\n const load = () => {\n let thisRequest;\n return pendingRequest || (thisRequest = pendingRequest = loader().catch((err) => {\n err = err instanceof Error ? err : new Error(String(err));\n if (userOnError) {\n return new Promise((resolve, reject) => {\n const userRetry = () => resolve(retry());\n const userFail = () => reject(err);\n userOnError(err, userRetry, userFail, retries + 1);\n });\n } else {\n throw err;\n }\n }).then((comp) => {\n if (thisRequest !== pendingRequest && pendingRequest) {\n return pendingRequest;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && !comp) {\n warn$1(\n `Async component loader resolved to undefined. If you are using retry(), make sure to return its return value.`\n );\n }\n if (comp && (comp.__esModule || comp[Symbol.toStringTag] === \"Module\")) {\n comp = comp.default;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && comp && !isObject(comp) && !isFunction(comp)) {\n throw new Error(`Invalid async component load result: ${comp}`);\n }\n resolvedComp = comp;\n return comp;\n }));\n };\n return defineComponent({\n name: \"AsyncComponentWrapper\",\n __asyncLoader: load,\n get __asyncResolved() {\n return resolvedComp;\n },\n setup() {\n const instance = currentInstance;\n if (resolvedComp) {\n return () => createInnerComp(resolvedComp, instance);\n }\n const onError = (err) => {\n pendingRequest = null;\n handleError(\n err,\n instance,\n 13,\n !errorComponent\n );\n };\n if (suspensible && instance.suspense || isInSSRComponentSetup) {\n return load().then((comp) => {\n return () => createInnerComp(comp, instance);\n }).catch((err) => {\n onError(err);\n return () => errorComponent ? createVNode(errorComponent, {\n error: err\n }) : null;\n });\n }\n const loaded = ref(false);\n const error = ref();\n const delayed = ref(!!delay);\n if (delay) {\n setTimeout(() => {\n delayed.value = false;\n }, delay);\n }\n if (timeout != null) {\n setTimeout(() => {\n if (!loaded.value && !error.value) {\n const err = new Error(\n `Async component timed out after ${timeout}ms.`\n );\n onError(err);\n error.value = err;\n }\n }, timeout);\n }\n load().then(() => {\n loaded.value = true;\n if (instance.parent && isKeepAlive(instance.parent.vnode)) {\n instance.parent.effect.dirty = true;\n queueJob(instance.parent.update);\n }\n }).catch((err) => {\n onError(err);\n error.value = err;\n });\n return () => {\n if (loaded.value && resolvedComp) {\n return createInnerComp(resolvedComp, instance);\n } else if (error.value && errorComponent) {\n return createVNode(errorComponent, {\n error: error.value\n });\n } else if (loadingComponent && !delayed.value) {\n return createVNode(loadingComponent);\n }\n };\n }\n });\n}\nfunction createInnerComp(comp, parent) {\n const { ref: ref2, props, children, ce } = parent.vnode;\n const vnode = createVNode(comp, props, children);\n vnode.ref = ref2;\n vnode.ce = ce;\n delete parent.vnode.ce;\n return vnode;\n}\n\nconst isKeepAlive = (vnode) => vnode.type.__isKeepAlive;\nconst KeepAliveImpl = {\n name: `KeepAlive`,\n // Marker for special handling inside the renderer. We are not using a ===\n // check directly on KeepAlive in the renderer, because importing it directly\n // would prevent it from being tree-shaken.\n __isKeepAlive: true,\n props: {\n include: [String, RegExp, Array],\n exclude: [String, RegExp, Array],\n max: [String, Number]\n },\n setup(props, { slots }) {\n const instance = getCurrentInstance();\n const sharedContext = instance.ctx;\n if (!sharedContext.renderer) {\n return () => {\n const children = slots.default && slots.default();\n return children && children.length === 1 ? children[0] : children;\n };\n }\n const cache = /* @__PURE__ */ new Map();\n const keys = /* @__PURE__ */ new Set();\n let current = null;\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n instance.__v_cache = cache;\n }\n const parentSuspense = instance.suspense;\n const {\n renderer: {\n p: patch,\n m: move,\n um: _unmount,\n o: { createElement }\n }\n } = sharedContext;\n const storageContainer = createElement(\"div\");\n sharedContext.activate = (vnode, container, anchor, namespace, optimized) => {\n const instance2 = vnode.component;\n move(vnode, container, anchor, 0, parentSuspense);\n patch(\n instance2.vnode,\n vnode,\n container,\n anchor,\n instance2,\n parentSuspense,\n namespace,\n vnode.slotScopeIds,\n optimized\n );\n queuePostRenderEffect(() => {\n instance2.isDeactivated = false;\n if (instance2.a) {\n invokeArrayFns(instance2.a);\n }\n const vnodeHook = vnode.props && vnode.props.onVnodeMounted;\n if (vnodeHook) {\n invokeVNodeHook(vnodeHook, instance2.parent, vnode);\n }\n }, parentSuspense);\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentAdded(instance2);\n }\n };\n sharedContext.deactivate = (vnode) => {\n const instance2 = vnode.component;\n move(vnode, storageContainer, null, 1, parentSuspense);\n queuePostRenderEffect(() => {\n if (instance2.da) {\n invokeArrayFns(instance2.da);\n }\n const vnodeHook = vnode.props && vnode.props.onVnodeUnmounted;\n if (vnodeHook) {\n invokeVNodeHook(vnodeHook, instance2.parent, vnode);\n }\n instance2.isDeactivated = true;\n }, parentSuspense);\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentAdded(instance2);\n }\n };\n function unmount(vnode) {\n resetShapeFlag(vnode);\n _unmount(vnode, instance, parentSuspense, true);\n }\n function pruneCache(filter) {\n cache.forEach((vnode, key) => {\n const name = getComponentName(vnode.type);\n if (name && (!filter || !filter(name))) {\n pruneCacheEntry(key);\n }\n });\n }\n function pruneCacheEntry(key) {\n const cached = cache.get(key);\n if (!current || !isSameVNodeType(cached, current)) {\n unmount(cached);\n } else if (current) {\n resetShapeFlag(current);\n }\n cache.delete(key);\n keys.delete(key);\n }\n watch(\n () => [props.include, props.exclude],\n ([include, exclude]) => {\n include && pruneCache((name) => matches(include, name));\n exclude && pruneCache((name) => !matches(exclude, name));\n },\n // prune post-render after `current` has been updated\n { flush: \"post\", deep: true }\n );\n let pendingCacheKey = null;\n const cacheSubtree = () => {\n if (pendingCacheKey != null) {\n cache.set(pendingCacheKey, getInnerChild(instance.subTree));\n }\n };\n onMounted(cacheSubtree);\n onUpdated(cacheSubtree);\n onBeforeUnmount(() => {\n cache.forEach((cached) => {\n const { subTree, suspense } = instance;\n const vnode = getInnerChild(subTree);\n if (cached.type === vnode.type && cached.key === vnode.key) {\n resetShapeFlag(vnode);\n const da = vnode.component.da;\n da && queuePostRenderEffect(da, suspense);\n return;\n }\n unmount(cached);\n });\n });\n return () => {\n pendingCacheKey = null;\n if (!slots.default) {\n return null;\n }\n const children = slots.default();\n const rawVNode = children[0];\n if (children.length > 1) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`KeepAlive should contain exactly one component child.`);\n }\n current = null;\n return children;\n } else if (!isVNode(rawVNode) || !(rawVNode.shapeFlag & 4) && !(rawVNode.shapeFlag & 128)) {\n current = null;\n return rawVNode;\n }\n let vnode = getInnerChild(rawVNode);\n const comp = vnode.type;\n const name = getComponentName(\n isAsyncWrapper(vnode) ? vnode.type.__asyncResolved || {} : comp\n );\n const { include, exclude, max } = props;\n if (include && (!name || !matches(include, name)) || exclude && name && matches(exclude, name)) {\n current = vnode;\n return rawVNode;\n }\n const key = vnode.key == null ? comp : vnode.key;\n const cachedVNode = cache.get(key);\n if (vnode.el) {\n vnode = cloneVNode(vnode);\n if (rawVNode.shapeFlag & 128) {\n rawVNode.ssContent = vnode;\n }\n }\n pendingCacheKey = key;\n if (cachedVNode) {\n vnode.el = cachedVNode.el;\n vnode.component = cachedVNode.component;\n if (vnode.transition) {\n setTransitionHooks(vnode, vnode.transition);\n }\n vnode.shapeFlag |= 512;\n keys.delete(key);\n keys.add(key);\n } else {\n keys.add(key);\n if (max && keys.size > parseInt(max, 10)) {\n pruneCacheEntry(keys.values().next().value);\n }\n }\n vnode.shapeFlag |= 256;\n current = vnode;\n return isSuspense(rawVNode.type) ? rawVNode : vnode;\n };\n }\n};\nconst KeepAlive = KeepAliveImpl;\nfunction matches(pattern, name) {\n if (isArray(pattern)) {\n return pattern.some((p) => matches(p, name));\n } else if (isString(pattern)) {\n return pattern.split(\",\").includes(name);\n } else if (isRegExp(pattern)) {\n return pattern.test(name);\n }\n return false;\n}\nfunction onActivated(hook, target) {\n registerKeepAliveHook(hook, \"a\", target);\n}\nfunction onDeactivated(hook, target) {\n registerKeepAliveHook(hook, \"da\", target);\n}\nfunction registerKeepAliveHook(hook, type, target = currentInstance) {\n const wrappedHook = hook.__wdc || (hook.__wdc = () => {\n let current = target;\n while (current) {\n if (current.isDeactivated) {\n return;\n }\n current = current.parent;\n }\n return hook();\n });\n injectHook(type, wrappedHook, target);\n if (target) {\n let current = target.parent;\n while (current && current.parent) {\n if (isKeepAlive(current.parent.vnode)) {\n injectToKeepAliveRoot(wrappedHook, type, target, current);\n }\n current = current.parent;\n }\n }\n}\nfunction injectToKeepAliveRoot(hook, type, target, keepAliveRoot) {\n const injected = injectHook(\n type,\n hook,\n keepAliveRoot,\n true\n /* prepend */\n );\n onUnmounted(() => {\n remove(keepAliveRoot[type], injected);\n }, target);\n}\nfunction resetShapeFlag(vnode) {\n vnode.shapeFlag &= ~256;\n vnode.shapeFlag &= ~512;\n}\nfunction getInnerChild(vnode) {\n return vnode.shapeFlag & 128 ? vnode.ssContent : vnode;\n}\n\nfunction injectHook(type, hook, target = currentInstance, prepend = false) {\n if (target) {\n const hooks = target[type] || (target[type] = []);\n const wrappedHook = hook.__weh || (hook.__weh = (...args) => {\n if (target.isUnmounted) {\n return;\n }\n pauseTracking();\n const reset = setCurrentInstance(target);\n const res = callWithAsyncErrorHandling(hook, target, type, args);\n reset();\n resetTracking();\n return res;\n });\n if (prepend) {\n hooks.unshift(wrappedHook);\n } else {\n hooks.push(wrappedHook);\n }\n return wrappedHook;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n const apiName = toHandlerKey(ErrorTypeStrings$1[type].replace(/ hook$/, \"\"));\n warn$1(\n `${apiName} is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup().` + (` If you are using async setup(), make sure to register lifecycle hooks before the first await statement.` )\n );\n }\n}\nconst createHook = (lifecycle) => (hook, target = currentInstance) => (\n // post-create lifecycle registrations are noops during SSR (except for serverPrefetch)\n (!isInSSRComponentSetup || lifecycle === \"sp\") && injectHook(lifecycle, (...args) => hook(...args), target)\n);\nconst onBeforeMount = createHook(\"bm\");\nconst onMounted = createHook(\"m\");\nconst onBeforeUpdate = createHook(\"bu\");\nconst onUpdated = createHook(\"u\");\nconst onBeforeUnmount = createHook(\"bum\");\nconst onUnmounted = createHook(\"um\");\nconst onServerPrefetch = createHook(\"sp\");\nconst onRenderTriggered = createHook(\n \"rtg\"\n);\nconst onRenderTracked = createHook(\n \"rtc\"\n);\nfunction onErrorCaptured(hook, target = currentInstance) {\n injectHook(\"ec\", hook, target);\n}\n\nfunction renderList(source, renderItem, cache, index) {\n let ret;\n const cached = cache && cache[index];\n if (isArray(source) || isString(source)) {\n ret = new Array(source.length);\n for (let i = 0, l = source.length; i < l; i++) {\n ret[i] = renderItem(source[i], i, void 0, cached && cached[i]);\n }\n } else if (typeof source === \"number\") {\n if (!!(process.env.NODE_ENV !== \"production\") && !Number.isInteger(source)) {\n warn$1(`The v-for range expect an integer value but got ${source}.`);\n }\n ret = new Array(source);\n for (let i = 0; i < source; i++) {\n ret[i] = renderItem(i + 1, i, void 0, cached && cached[i]);\n }\n } else if (isObject(source)) {\n if (source[Symbol.iterator]) {\n ret = Array.from(\n source,\n (item, i) => renderItem(item, i, void 0, cached && cached[i])\n );\n } else {\n const keys = Object.keys(source);\n ret = new Array(keys.length);\n for (let i = 0, l = keys.length; i < l; i++) {\n const key = keys[i];\n ret[i] = renderItem(source[key], key, i, cached && cached[i]);\n }\n }\n } else {\n ret = [];\n }\n if (cache) {\n cache[index] = ret;\n }\n return ret;\n}\n\nfunction createSlots(slots, dynamicSlots) {\n for (let i = 0; i < dynamicSlots.length; i++) {\n const slot = dynamicSlots[i];\n if (isArray(slot)) {\n for (let j = 0; j < slot.length; j++) {\n slots[slot[j].name] = slot[j].fn;\n }\n } else if (slot) {\n slots[slot.name] = slot.key ? (...args) => {\n const res = slot.fn(...args);\n if (res)\n res.key = slot.key;\n return res;\n } : slot.fn;\n }\n }\n return slots;\n}\n\nfunction renderSlot(slots, name, props = {}, fallback, noSlotted) {\n if (currentRenderingInstance.isCE || currentRenderingInstance.parent && isAsyncWrapper(currentRenderingInstance.parent) && currentRenderingInstance.parent.isCE) {\n if (name !== \"default\")\n props.name = name;\n return createVNode(\"slot\", props, fallback && fallback());\n }\n let slot = slots[name];\n if (!!(process.env.NODE_ENV !== \"production\") && slot && slot.length > 1) {\n warn$1(\n `SSR-optimized slot function detected in a non-SSR-optimized render function. You need to mark this component with $dynamic-slots in the parent template.`\n );\n slot = () => [];\n }\n if (slot && slot._c) {\n slot._d = false;\n }\n openBlock();\n const validSlotContent = slot && ensureValidVNode(slot(props));\n const rendered = createBlock(\n Fragment,\n {\n key: props.key || // slot content array of a dynamic conditional slot may have a branch\n // key attached in the `createSlots` helper, respect that\n validSlotContent && validSlotContent.key || `_${name}`\n },\n validSlotContent || (fallback ? fallback() : []),\n validSlotContent && slots._ === 1 ? 64 : -2\n );\n if (!noSlotted && rendered.scopeId) {\n rendered.slotScopeIds = [rendered.scopeId + \"-s\"];\n }\n if (slot && slot._c) {\n slot._d = true;\n }\n return rendered;\n}\nfunction ensureValidVNode(vnodes) {\n return vnodes.some((child) => {\n if (!isVNode(child))\n return true;\n if (child.type === Comment)\n return false;\n if (child.type === Fragment && !ensureValidVNode(child.children))\n return false;\n return true;\n }) ? vnodes : null;\n}\n\nfunction toHandlers(obj, preserveCaseIfNecessary) {\n const ret = {};\n if (!!(process.env.NODE_ENV !== \"production\") && !isObject(obj)) {\n warn$1(`v-on with no argument expects an object value.`);\n return ret;\n }\n for (const key in obj) {\n ret[preserveCaseIfNecessary && /[A-Z]/.test(key) ? `on:${key}` : toHandlerKey(key)] = obj[key];\n }\n return ret;\n}\n\nconst getPublicInstance = (i) => {\n if (!i)\n return null;\n if (isStatefulComponent(i))\n return getExposeProxy(i) || i.proxy;\n return getPublicInstance(i.parent);\n};\nconst publicPropertiesMap = (\n // Move PURE marker to new line to workaround compiler discarding it\n // due to type annotation\n /* @__PURE__ */ extend(/* @__PURE__ */ Object.create(null), {\n $: (i) => i,\n $el: (i) => i.vnode.el,\n $data: (i) => i.data,\n $props: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.props) : i.props,\n $attrs: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.attrs) : i.attrs,\n $slots: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.slots) : i.slots,\n $refs: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.refs) : i.refs,\n $parent: (i) => getPublicInstance(i.parent),\n $root: (i) => getPublicInstance(i.root),\n $emit: (i) => i.emit,\n $options: (i) => __VUE_OPTIONS_API__ ? resolveMergedOptions(i) : i.type,\n $forceUpdate: (i) => i.f || (i.f = () => {\n i.effect.dirty = true;\n queueJob(i.update);\n }),\n $nextTick: (i) => i.n || (i.n = nextTick.bind(i.proxy)),\n $watch: (i) => __VUE_OPTIONS_API__ ? instanceWatch.bind(i) : NOOP\n })\n);\nconst isReservedPrefix = (key) => key === \"_\" || key === \"$\";\nconst hasSetupBinding = (state, key) => state !== EMPTY_OBJ && !state.__isScriptSetup && hasOwn(state, key);\nconst PublicInstanceProxyHandlers = {\n get({ _: instance }, key) {\n if (key === \"__v_skip\") {\n return true;\n }\n const { ctx, setupState, data, props, accessCache, type, appContext } = instance;\n if (!!(process.env.NODE_ENV !== \"production\") && key === \"__isVue\") {\n return true;\n }\n let normalizedProps;\n if (key[0] !== \"$\") {\n const n = accessCache[key];\n if (n !== void 0) {\n switch (n) {\n case 1 /* SETUP */:\n return setupState[key];\n case 2 /* DATA */:\n return data[key];\n case 4 /* CONTEXT */:\n return ctx[key];\n case 3 /* PROPS */:\n return props[key];\n }\n } else if (hasSetupBinding(setupState, key)) {\n accessCache[key] = 1 /* SETUP */;\n return setupState[key];\n } else if (data !== EMPTY_OBJ && hasOwn(data, key)) {\n accessCache[key] = 2 /* DATA */;\n return data[key];\n } else if (\n // only cache other properties when instance has declared (thus stable)\n // props\n (normalizedProps = instance.propsOptions[0]) && hasOwn(normalizedProps, key)\n ) {\n accessCache[key] = 3 /* PROPS */;\n return props[key];\n } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {\n accessCache[key] = 4 /* CONTEXT */;\n return ctx[key];\n } else if (!__VUE_OPTIONS_API__ || shouldCacheAccess) {\n accessCache[key] = 0 /* OTHER */;\n }\n }\n const publicGetter = publicPropertiesMap[key];\n let cssModule, globalProperties;\n if (publicGetter) {\n if (key === \"$attrs\") {\n track(instance.attrs, \"get\", \"\");\n !!(process.env.NODE_ENV !== \"production\") && markAttrsAccessed();\n } else if (!!(process.env.NODE_ENV !== \"production\") && key === \"$slots\") {\n track(instance, \"get\", key);\n }\n return publicGetter(instance);\n } else if (\n // css module (injected by vue-loader)\n (cssModule = type.__cssModules) && (cssModule = cssModule[key])\n ) {\n return cssModule;\n } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {\n accessCache[key] = 4 /* CONTEXT */;\n return ctx[key];\n } else if (\n // global properties\n globalProperties = appContext.config.globalProperties, hasOwn(globalProperties, key)\n ) {\n {\n return globalProperties[key];\n }\n } else if (!!(process.env.NODE_ENV !== \"production\") && currentRenderingInstance && (!isString(key) || // #1091 avoid internal isRef/isVNode checks on component instance leading\n // to infinite warning loop\n key.indexOf(\"__v\") !== 0)) {\n if (data !== EMPTY_OBJ && isReservedPrefix(key[0]) && hasOwn(data, key)) {\n warn$1(\n `Property ${JSON.stringify(\n key\n )} must be accessed via $data because it starts with a reserved character (\"$\" or \"_\") and is not proxied on the render context.`\n );\n } else if (instance === currentRenderingInstance) {\n warn$1(\n `Property ${JSON.stringify(key)} was accessed during render but is not defined on instance.`\n );\n }\n }\n },\n set({ _: instance }, key, value) {\n const { data, setupState, ctx } = instance;\n if (hasSetupBinding(setupState, key)) {\n setupState[key] = value;\n return true;\n } else if (!!(process.env.NODE_ENV !== \"production\") && setupState.__isScriptSetup && hasOwn(setupState, key)) {\n warn$1(`Cannot mutate ';\n }\n const iframeContents = '' + script + '';\n try {\n this.myIFrame.doc.open();\n this.myIFrame.doc.write(iframeContents);\n this.myIFrame.doc.close();\n } catch (e) {\n log('frame writing exception');\n if (e.stack) {\n log(e.stack);\n }\n log(e);\n }\n } else {\n this.commandCB = commandCB;\n this.onMessageCB = onMessageCB;\n }\n }\n\n /**\n * Each browser has its own funny way to handle iframes. Here we mush them all together into one object that I can\n * actually use.\n */\n private static createIFrame_(): IFrameElement {\n const iframe = document.createElement('iframe') as IFrameElement;\n iframe.style.display = 'none';\n\n // This is necessary in order to initialize the document inside the iframe\n if (document.body) {\n document.body.appendChild(iframe);\n try {\n // If document.domain has been modified in IE, this will throw an error, and we need to set the\n // domain of the iframe's document manually. We can do this via a javascript: url as the src attribute\n // Also note that we must do this *after* the iframe has been appended to the page. Otherwise it doesn't work.\n const a = iframe.contentWindow.document;\n if (!a) {\n // Apologies for the log-spam, I need to do something to keep closure from optimizing out the assignment above.\n log('No IE domain setting required');\n }\n } catch (e) {\n const domain = document.domain;\n iframe.src =\n \"javascript:void((function(){document.open();document.domain='\" +\n domain +\n \"';document.close();})())\";\n }\n } else {\n // LongPollConnection attempts to delay initialization until the document is ready, so hopefully this\n // never gets hit.\n throw 'Document body has not initialized. Wait to initialize Firebase until after the document is ready.';\n }\n\n // Get the document of the iframe in a browser-specific way.\n if (iframe.contentDocument) {\n iframe.doc = iframe.contentDocument; // Firefox, Opera, Safari\n } else if (iframe.contentWindow) {\n iframe.doc = iframe.contentWindow.document; // Internet Explorer\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } else if ((iframe as any).document) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n iframe.doc = (iframe as any).document; //others?\n }\n\n return iframe;\n }\n\n /**\n * Cancel all outstanding queries and remove the frame.\n */\n close() {\n //Mark this iframe as dead, so no new requests are sent.\n this.alive = false;\n\n if (this.myIFrame) {\n //We have to actually remove all of the html inside this iframe before removing it from the\n //window, or IE will continue loading and executing the script tags we've already added, which\n //can lead to some errors being thrown. Setting textContent seems to be the safest way to do this.\n this.myIFrame.doc.body.textContent = '';\n setTimeout(() => {\n if (this.myIFrame !== null) {\n document.body.removeChild(this.myIFrame);\n this.myIFrame = null;\n }\n }, Math.floor(0));\n }\n\n // Protect from being called recursively.\n const onDisconnect = this.onDisconnect;\n if (onDisconnect) {\n this.onDisconnect = null;\n onDisconnect();\n }\n }\n\n /**\n * Actually start the long-polling session by adding the first script tag(s) to the iframe.\n * @param id - The ID of this connection\n * @param pw - The password for this connection\n */\n startLongPoll(id: string, pw: string) {\n this.myID = id;\n this.myPW = pw;\n this.alive = true;\n\n //send the initial request. If there are requests queued, make sure that we transmit as many as we are currently able to.\n while (this.newRequest_()) {}\n }\n\n /**\n * This is called any time someone might want a script tag to be added. It adds a script tag when there aren't\n * too many outstanding requests and we are still alive.\n *\n * If there are outstanding packet segments to send, it sends one. If there aren't, it sends a long-poll anyways if\n * needed.\n */\n private newRequest_() {\n // We keep one outstanding request open all the time to receive data, but if we need to send data\n // (pendingSegs.length > 0) then we create a new request to send the data. The server will automatically\n // close the old request.\n if (\n this.alive &&\n this.sendNewPolls &&\n this.outstandingRequests.size < (this.pendingSegs.length > 0 ? 2 : 1)\n ) {\n //construct our url\n this.currentSerial++;\n const urlParams: { [k: string]: string | number } = {};\n urlParams[FIREBASE_LONGPOLL_ID_PARAM] = this.myID;\n urlParams[FIREBASE_LONGPOLL_PW_PARAM] = this.myPW;\n urlParams[FIREBASE_LONGPOLL_SERIAL_PARAM] = this.currentSerial;\n let theURL = this.urlFn(urlParams);\n //Now add as much data as we can.\n let curDataString = '';\n let i = 0;\n\n while (this.pendingSegs.length > 0) {\n //first, lets see if the next segment will fit.\n const nextSeg = this.pendingSegs[0];\n if (\n (nextSeg.d as unknown[]).length +\n SEG_HEADER_SIZE +\n curDataString.length <=\n MAX_URL_DATA_SIZE\n ) {\n //great, the segment will fit. Lets append it.\n const theSeg = this.pendingSegs.shift();\n curDataString =\n curDataString +\n '&' +\n FIREBASE_LONGPOLL_SEGMENT_NUM_PARAM +\n i +\n '=' +\n theSeg.seg +\n '&' +\n FIREBASE_LONGPOLL_SEGMENTS_IN_PACKET +\n i +\n '=' +\n theSeg.ts +\n '&' +\n FIREBASE_LONGPOLL_DATA_PARAM +\n i +\n '=' +\n theSeg.d;\n i++;\n } else {\n break;\n }\n }\n\n theURL = theURL + curDataString;\n this.addLongPollTag_(theURL, this.currentSerial);\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * Queue a packet for transmission to the server.\n * @param segnum - A sequential id for this packet segment used for reassembly\n * @param totalsegs - The total number of segments in this packet\n * @param data - The data for this segment.\n */\n enqueueSegment(segnum: number, totalsegs: number, data: unknown) {\n //add this to the queue of segments to send.\n this.pendingSegs.push({ seg: segnum, ts: totalsegs, d: data });\n\n //send the data immediately if there isn't already data being transmitted, unless\n //startLongPoll hasn't been called yet.\n if (this.alive) {\n this.newRequest_();\n }\n }\n\n /**\n * Add a script tag for a regular long-poll request.\n * @param url - The URL of the script tag.\n * @param serial - The serial number of the request.\n */\n private addLongPollTag_(url: string, serial: number) {\n //remember that we sent this request.\n this.outstandingRequests.add(serial);\n\n const doNewRequest = () => {\n this.outstandingRequests.delete(serial);\n this.newRequest_();\n };\n\n // If this request doesn't return on its own accord (by the server sending us some data), we'll\n // create a new one after the KEEPALIVE interval to make sure we always keep a fresh request open.\n const keepaliveTimeout = setTimeout(\n doNewRequest,\n Math.floor(KEEPALIVE_REQUEST_INTERVAL)\n );\n\n const readyStateCB = () => {\n // Request completed. Cancel the keepalive.\n clearTimeout(keepaliveTimeout);\n\n // Trigger a new request so we can continue receiving data.\n doNewRequest();\n };\n\n this.addTag(url, readyStateCB);\n }\n\n /**\n * Add an arbitrary script tag to the iframe.\n * @param url - The URL for the script tag source.\n * @param loadCB - A callback to be triggered once the script has loaded.\n */\n addTag(url: string, loadCB: () => void) {\n if (isNodeSdk()) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (this as any).doNodeLongPoll(url, loadCB);\n } else {\n setTimeout(() => {\n try {\n // if we're already closed, don't add this poll\n if (!this.sendNewPolls) {\n return;\n }\n const newScript = this.myIFrame.doc.createElement('script');\n newScript.type = 'text/javascript';\n newScript.async = true;\n newScript.src = url;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n newScript.onload = (newScript as any).onreadystatechange =\n function () {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const rstate = (newScript as any).readyState;\n if (!rstate || rstate === 'loaded' || rstate === 'complete') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n newScript.onload = (newScript as any).onreadystatechange = null;\n if (newScript.parentNode) {\n newScript.parentNode.removeChild(newScript);\n }\n loadCB();\n }\n };\n newScript.onerror = () => {\n log('Long-poll script failed to load: ' + url);\n this.sendNewPolls = false;\n this.close();\n };\n this.myIFrame.doc.body.appendChild(newScript);\n } catch (e) {\n // TODO: we should make this error visible somehow\n }\n }, Math.floor(1));\n }\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert, isNodeSdk, jsonEval, stringify } from '@firebase/util';\n\nimport { RepoInfo, repoInfoConnectionURL } from '../core/RepoInfo';\nimport { StatsCollection } from '../core/stats/StatsCollection';\nimport { statsManagerGetCollection } from '../core/stats/StatsManager';\nimport { PersistentStorage } from '../core/storage/storage';\nimport { logWrapper, splitStringBySize } from '../core/util/util';\nimport { SDK_VERSION } from '../core/version';\n\nimport {\n APPLICATION_ID_PARAM,\n APP_CHECK_TOKEN_PARAM,\n FORGE_DOMAIN_RE,\n FORGE_REF,\n LAST_SESSION_PARAM,\n PROTOCOL_VERSION,\n REFERER_PARAM,\n TRANSPORT_SESSION_PARAM,\n VERSION_PARAM,\n WEBSOCKET\n} from './Constants';\nimport { Transport } from './Transport';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ndeclare const MozWebSocket: any;\n\nconst WEBSOCKET_MAX_FRAME_SIZE = 16384;\nconst WEBSOCKET_KEEPALIVE_INTERVAL = 45000;\n\nlet WebSocketImpl = null;\nif (typeof MozWebSocket !== 'undefined') {\n WebSocketImpl = MozWebSocket;\n} else if (typeof WebSocket !== 'undefined') {\n WebSocketImpl = WebSocket;\n}\n\nexport function setWebSocketImpl(impl) {\n WebSocketImpl = impl;\n}\n\n/**\n * Create a new websocket connection with the given callbacks.\n */\nexport class WebSocketConnection implements Transport {\n keepaliveTimer: number | null = null;\n frames: string[] | null = null;\n totalFrames = 0;\n bytesSent = 0;\n bytesReceived = 0;\n connURL: string;\n onDisconnect: (a?: boolean) => void;\n onMessage: (msg: {}) => void;\n mySock: WebSocket | null;\n private log_: (...a: unknown[]) => void;\n private stats_: StatsCollection;\n private everConnected_: boolean;\n private isClosed_: boolean;\n private nodeAdmin: boolean;\n\n /**\n * @param connId identifier for this transport\n * @param repoInfo The info for the websocket endpoint.\n * @param applicationId The Firebase App ID for this project.\n * @param appCheckToken The App Check Token for this client.\n * @param authToken The Auth Token for this client.\n * @param transportSessionId Optional transportSessionId if this is connecting\n * to an existing transport session\n * @param lastSessionId Optional lastSessionId if there was a previous\n * connection\n */\n constructor(\n public connId: string,\n repoInfo: RepoInfo,\n private applicationId?: string,\n private appCheckToken?: string,\n private authToken?: string,\n transportSessionId?: string,\n lastSessionId?: string\n ) {\n this.log_ = logWrapper(this.connId);\n this.stats_ = statsManagerGetCollection(repoInfo);\n this.connURL = WebSocketConnection.connectionURL_(\n repoInfo,\n transportSessionId,\n lastSessionId,\n appCheckToken,\n applicationId\n );\n this.nodeAdmin = repoInfo.nodeAdmin;\n }\n\n /**\n * @param repoInfo - The info for the websocket endpoint.\n * @param transportSessionId - Optional transportSessionId if this is connecting to an existing transport\n * session\n * @param lastSessionId - Optional lastSessionId if there was a previous connection\n * @returns connection url\n */\n private static connectionURL_(\n repoInfo: RepoInfo,\n transportSessionId?: string,\n lastSessionId?: string,\n appCheckToken?: string,\n applicationId?: string\n ): string {\n const urlParams: { [k: string]: string } = {};\n urlParams[VERSION_PARAM] = PROTOCOL_VERSION;\n\n if (\n !isNodeSdk() &&\n typeof location !== 'undefined' &&\n location.hostname &&\n FORGE_DOMAIN_RE.test(location.hostname)\n ) {\n urlParams[REFERER_PARAM] = FORGE_REF;\n }\n if (transportSessionId) {\n urlParams[TRANSPORT_SESSION_PARAM] = transportSessionId;\n }\n if (lastSessionId) {\n urlParams[LAST_SESSION_PARAM] = lastSessionId;\n }\n if (appCheckToken) {\n urlParams[APP_CHECK_TOKEN_PARAM] = appCheckToken;\n }\n if (applicationId) {\n urlParams[APPLICATION_ID_PARAM] = applicationId;\n }\n\n return repoInfoConnectionURL(repoInfo, WEBSOCKET, urlParams);\n }\n\n /**\n * @param onMessage - Callback when messages arrive\n * @param onDisconnect - Callback with connection lost.\n */\n open(onMessage: (msg: {}) => void, onDisconnect: (a?: boolean) => void) {\n this.onDisconnect = onDisconnect;\n this.onMessage = onMessage;\n\n this.log_('Websocket connecting to ' + this.connURL);\n\n this.everConnected_ = false;\n // Assume failure until proven otherwise.\n PersistentStorage.set('previous_websocket_failure', true);\n\n try {\n let options: { [k: string]: object };\n if (isNodeSdk()) {\n const device = this.nodeAdmin ? 'AdminNode' : 'Node';\n // UA Format: Firebase////\n options = {\n headers: {\n 'User-Agent': `Firebase/${PROTOCOL_VERSION}/${SDK_VERSION}/${process.platform}/${device}`,\n 'X-Firebase-GMPID': this.applicationId || ''\n }\n };\n\n // If using Node with admin creds, AppCheck-related checks are unnecessary.\n // Note that we send the credentials here even if they aren't admin credentials, which is\n // not a problem.\n // Note that this header is just used to bypass appcheck, and the token should still be sent\n // through the websocket connection once it is established.\n if (this.authToken) {\n options.headers['Authorization'] = `Bearer ${this.authToken}`;\n }\n if (this.appCheckToken) {\n options.headers['X-Firebase-AppCheck'] = this.appCheckToken;\n }\n\n // Plumb appropriate http_proxy environment variable into faye-websocket if it exists.\n const env = process['env'];\n const proxy =\n this.connURL.indexOf('wss://') === 0\n ? env['HTTPS_PROXY'] || env['https_proxy']\n : env['HTTP_PROXY'] || env['http_proxy'];\n\n if (proxy) {\n options['proxy'] = { origin: proxy };\n }\n }\n this.mySock = new WebSocketImpl(this.connURL, [], options);\n } catch (e) {\n this.log_('Error instantiating WebSocket.');\n const error = e.message || e.data;\n if (error) {\n this.log_(error);\n }\n this.onClosed_();\n return;\n }\n\n this.mySock.onopen = () => {\n this.log_('Websocket connected.');\n this.everConnected_ = true;\n };\n\n this.mySock.onclose = () => {\n this.log_('Websocket connection was disconnected.');\n this.mySock = null;\n this.onClosed_();\n };\n\n this.mySock.onmessage = m => {\n this.handleIncomingFrame(m as {});\n };\n\n this.mySock.onerror = e => {\n this.log_('WebSocket error. Closing connection.');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const error = (e as any).message || (e as any).data;\n if (error) {\n this.log_(error);\n }\n this.onClosed_();\n };\n }\n\n /**\n * No-op for websockets, we don't need to do anything once the connection is confirmed as open\n */\n start() {}\n\n static forceDisallow_: boolean;\n\n static forceDisallow() {\n WebSocketConnection.forceDisallow_ = true;\n }\n\n static isAvailable(): boolean {\n let isOldAndroid = false;\n if (typeof navigator !== 'undefined' && navigator.userAgent) {\n const oldAndroidRegex = /Android ([0-9]{0,}\\.[0-9]{0,})/;\n const oldAndroidMatch = navigator.userAgent.match(oldAndroidRegex);\n if (oldAndroidMatch && oldAndroidMatch.length > 1) {\n if (parseFloat(oldAndroidMatch[1]) < 4.4) {\n isOldAndroid = true;\n }\n }\n }\n\n return (\n !isOldAndroid &&\n WebSocketImpl !== null &&\n !WebSocketConnection.forceDisallow_\n );\n }\n\n /**\n * Number of response before we consider the connection \"healthy.\"\n */\n static responsesRequiredToBeHealthy = 2;\n\n /**\n * Time to wait for the connection te become healthy before giving up.\n */\n static healthyTimeout = 30000;\n\n /**\n * Returns true if we previously failed to connect with this transport.\n */\n static previouslyFailed(): boolean {\n // If our persistent storage is actually only in-memory storage,\n // we default to assuming that it previously failed to be safe.\n return (\n PersistentStorage.isInMemoryStorage ||\n PersistentStorage.get('previous_websocket_failure') === true\n );\n }\n\n markConnectionHealthy() {\n PersistentStorage.remove('previous_websocket_failure');\n }\n\n private appendFrame_(data: string) {\n this.frames.push(data);\n if (this.frames.length === this.totalFrames) {\n const fullMess = this.frames.join('');\n this.frames = null;\n const jsonMess = jsonEval(fullMess) as object;\n\n //handle the message\n this.onMessage(jsonMess);\n }\n }\n\n /**\n * @param frameCount - The number of frames we are expecting from the server\n */\n private handleNewFrameCount_(frameCount: number) {\n this.totalFrames = frameCount;\n this.frames = [];\n }\n\n /**\n * Attempts to parse a frame count out of some text. If it can't, assumes a value of 1\n * @returns Any remaining data to be process, or null if there is none\n */\n private extractFrameCount_(data: string): string | null {\n assert(this.frames === null, 'We already have a frame buffer');\n // TODO: The server is only supposed to send up to 9999 frames (i.e. length <= 4), but that isn't being enforced\n // currently. So allowing larger frame counts (length <= 6). See https://app.asana.com/0/search/8688598998380/8237608042508\n if (data.length <= 6) {\n const frameCount = Number(data);\n if (!isNaN(frameCount)) {\n this.handleNewFrameCount_(frameCount);\n return null;\n }\n }\n this.handleNewFrameCount_(1);\n return data;\n }\n\n /**\n * Process a websocket frame that has arrived from the server.\n * @param mess - The frame data\n */\n handleIncomingFrame(mess: { [k: string]: unknown }) {\n if (this.mySock === null) {\n return; // Chrome apparently delivers incoming packets even after we .close() the connection sometimes.\n }\n const data = mess['data'] as string;\n this.bytesReceived += data.length;\n this.stats_.incrementCounter('bytes_received', data.length);\n\n this.resetKeepAlive();\n\n if (this.frames !== null) {\n // we're buffering\n this.appendFrame_(data);\n } else {\n // try to parse out a frame count, otherwise, assume 1 and process it\n const remainingData = this.extractFrameCount_(data);\n if (remainingData !== null) {\n this.appendFrame_(remainingData);\n }\n }\n }\n\n /**\n * Send a message to the server\n * @param data - The JSON object to transmit\n */\n send(data: {}) {\n this.resetKeepAlive();\n\n const dataStr = stringify(data);\n this.bytesSent += dataStr.length;\n this.stats_.incrementCounter('bytes_sent', dataStr.length);\n\n //We can only fit a certain amount in each websocket frame, so we need to split this request\n //up into multiple pieces if it doesn't fit in one request.\n\n const dataSegs = splitStringBySize(dataStr, WEBSOCKET_MAX_FRAME_SIZE);\n\n //Send the length header\n if (dataSegs.length > 1) {\n this.sendString_(String(dataSegs.length));\n }\n\n //Send the actual data in segments.\n for (let i = 0; i < dataSegs.length; i++) {\n this.sendString_(dataSegs[i]);\n }\n }\n\n private shutdown_() {\n this.isClosed_ = true;\n if (this.keepaliveTimer) {\n clearInterval(this.keepaliveTimer);\n this.keepaliveTimer = null;\n }\n\n if (this.mySock) {\n this.mySock.close();\n this.mySock = null;\n }\n }\n\n private onClosed_() {\n if (!this.isClosed_) {\n this.log_('WebSocket is closing itself');\n this.shutdown_();\n\n // since this is an internal close, trigger the close listener\n if (this.onDisconnect) {\n this.onDisconnect(this.everConnected_);\n this.onDisconnect = null;\n }\n }\n }\n\n /**\n * External-facing close handler.\n * Close the websocket and kill the connection.\n */\n close() {\n if (!this.isClosed_) {\n this.log_('WebSocket is being closed');\n this.shutdown_();\n }\n }\n\n /**\n * Kill the current keepalive timer and start a new one, to ensure that it always fires N seconds after\n * the last activity.\n */\n resetKeepAlive() {\n clearInterval(this.keepaliveTimer);\n this.keepaliveTimer = setInterval(() => {\n //If there has been no websocket activity for a while, send a no-op\n if (this.mySock) {\n this.sendString_('0');\n }\n this.resetKeepAlive();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }, Math.floor(WEBSOCKET_KEEPALIVE_INTERVAL)) as any;\n }\n\n /**\n * Send a string over the websocket.\n *\n * @param str - String to send.\n */\n private sendString_(str: string) {\n // Firefox seems to sometimes throw exceptions (NS_ERROR_UNEXPECTED) from websocket .send()\n // calls for some unknown reason. We treat these as an error and disconnect.\n // See https://app.asana.com/0/58926111402292/68021340250410\n try {\n this.mySock.send(str);\n } catch (e) {\n this.log_(\n 'Exception thrown from WebSocket.send():',\n e.message || e.data,\n 'Closing connection.'\n );\n setTimeout(this.onClosed_.bind(this), 0);\n }\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { RepoInfo } from '../core/RepoInfo';\nimport { warn } from '../core/util/util';\n\nimport { BrowserPollConnection } from './BrowserPollConnection';\nimport { TransportConstructor } from './Transport';\nimport { WebSocketConnection } from './WebSocketConnection';\n\n/**\n * Currently simplistic, this class manages what transport a Connection should use at various stages of its\n * lifecycle.\n *\n * It starts with longpolling in a browser, and httppolling on node. It then upgrades to websockets if\n * they are available.\n */\nexport class TransportManager {\n private transports_: TransportConstructor[];\n\n // Keeps track of whether the TransportManager has already chosen a transport to use\n static globalTransportInitialized_ = false;\n\n static get ALL_TRANSPORTS() {\n return [BrowserPollConnection, WebSocketConnection];\n }\n\n /**\n * Returns whether transport has been selected to ensure WebSocketConnection or BrowserPollConnection are not called after\n * TransportManager has already set up transports_\n */\n static get IS_TRANSPORT_INITIALIZED() {\n return this.globalTransportInitialized_;\n }\n\n /**\n * @param repoInfo - Metadata around the namespace we're connecting to\n */\n constructor(repoInfo: RepoInfo) {\n this.initTransports_(repoInfo);\n }\n\n private initTransports_(repoInfo: RepoInfo) {\n const isWebSocketsAvailable: boolean =\n WebSocketConnection && WebSocketConnection['isAvailable']();\n let isSkipPollConnection =\n isWebSocketsAvailable && !WebSocketConnection.previouslyFailed();\n\n if (repoInfo.webSocketOnly) {\n if (!isWebSocketsAvailable) {\n warn(\n \"wss:// URL used, but browser isn't known to support websockets. Trying anyway.\"\n );\n }\n\n isSkipPollConnection = true;\n }\n\n if (isSkipPollConnection) {\n this.transports_ = [WebSocketConnection];\n } else {\n const transports = (this.transports_ = [] as TransportConstructor[]);\n for (const transport of TransportManager.ALL_TRANSPORTS) {\n if (transport && transport['isAvailable']()) {\n transports.push(transport);\n }\n }\n TransportManager.globalTransportInitialized_ = true;\n }\n }\n\n /**\n * @returns The constructor for the initial transport to use\n */\n initialTransport(): TransportConstructor {\n if (this.transports_.length > 0) {\n return this.transports_[0];\n } else {\n throw new Error('No transports available');\n }\n }\n\n /**\n * @returns The constructor for the next transport, or null\n */\n upgradeTransport(): TransportConstructor | null {\n if (this.transports_.length > 1) {\n return this.transports_[1];\n } else {\n return null;\n }\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { RepoInfo } from '../core/RepoInfo';\nimport { PersistentStorage } from '../core/storage/storage';\nimport { Indexable } from '../core/util/misc';\nimport {\n error,\n logWrapper,\n requireKey,\n setTimeoutNonBlocking,\n warn\n} from '../core/util/util';\n\nimport { PROTOCOL_VERSION } from './Constants';\nimport { Transport, TransportConstructor } from './Transport';\nimport { TransportManager } from './TransportManager';\n\n// Abort upgrade attempt if it takes longer than 60s.\nconst UPGRADE_TIMEOUT = 60000;\n\n// For some transports (WebSockets), we need to \"validate\" the transport by exchanging a few requests and responses.\n// If we haven't sent enough requests within 5s, we'll start sending noop ping requests.\nconst DELAY_BEFORE_SENDING_EXTRA_REQUESTS = 5000;\n\n// If the initial data sent triggers a lot of bandwidth (i.e. it's a large put or a listen for a large amount of data)\n// then we may not be able to exchange our ping/pong requests within the healthy timeout. So if we reach the timeout\n// but we've sent/received enough bytes, we don't cancel the connection.\nconst BYTES_SENT_HEALTHY_OVERRIDE = 10 * 1024;\nconst BYTES_RECEIVED_HEALTHY_OVERRIDE = 100 * 1024;\n\nconst enum RealtimeState {\n CONNECTING,\n CONNECTED,\n DISCONNECTED\n}\n\nconst MESSAGE_TYPE = 't';\nconst MESSAGE_DATA = 'd';\nconst CONTROL_SHUTDOWN = 's';\nconst CONTROL_RESET = 'r';\nconst CONTROL_ERROR = 'e';\nconst CONTROL_PONG = 'o';\nconst SWITCH_ACK = 'a';\nconst END_TRANSMISSION = 'n';\nconst PING = 'p';\n\nconst SERVER_HELLO = 'h';\n\n/**\n * Creates a new real-time connection to the server using whichever method works\n * best in the current browser.\n */\nexport class Connection {\n connectionCount = 0;\n pendingDataMessages: unknown[] = [];\n sessionId: string;\n\n private conn_: Transport;\n private healthyTimeout_: number;\n private isHealthy_: boolean;\n private log_: (...args: unknown[]) => void;\n private primaryResponsesRequired_: number;\n private rx_: Transport;\n private secondaryConn_: Transport;\n private secondaryResponsesRequired_: number;\n private state_ = RealtimeState.CONNECTING;\n private transportManager_: TransportManager;\n private tx_: Transport;\n\n /**\n * @param id - an id for this connection\n * @param repoInfo_ - the info for the endpoint to connect to\n * @param applicationId_ - the Firebase App ID for this project\n * @param appCheckToken_ - The App Check Token for this device.\n * @param authToken_ - The auth token for this session.\n * @param onMessage_ - the callback to be triggered when a server-push message arrives\n * @param onReady_ - the callback to be triggered when this connection is ready to send messages.\n * @param onDisconnect_ - the callback to be triggered when a connection was lost\n * @param onKill_ - the callback to be triggered when this connection has permanently shut down.\n * @param lastSessionId - last session id in persistent connection. is used to clean up old session in real-time server\n */\n constructor(\n public id: string,\n private repoInfo_: RepoInfo,\n private applicationId_: string | undefined,\n private appCheckToken_: string | undefined,\n private authToken_: string | undefined,\n private onMessage_: (a: {}) => void,\n private onReady_: (a: number, b: string) => void,\n private onDisconnect_: () => void,\n private onKill_: (a: string) => void,\n public lastSessionId?: string\n ) {\n this.log_ = logWrapper('c:' + this.id + ':');\n this.transportManager_ = new TransportManager(repoInfo_);\n this.log_('Connection created');\n this.start_();\n }\n\n /**\n * Starts a connection attempt\n */\n private start_(): void {\n const conn = this.transportManager_.initialTransport();\n this.conn_ = new conn(\n this.nextTransportId_(),\n this.repoInfo_,\n this.applicationId_,\n this.appCheckToken_,\n this.authToken_,\n null,\n this.lastSessionId\n );\n\n // For certain transports (WebSockets), we need to send and receive several messages back and forth before we\n // can consider the transport healthy.\n this.primaryResponsesRequired_ = conn['responsesRequiredToBeHealthy'] || 0;\n\n const onMessageReceived = this.connReceiver_(this.conn_);\n const onConnectionLost = this.disconnReceiver_(this.conn_);\n this.tx_ = this.conn_;\n this.rx_ = this.conn_;\n this.secondaryConn_ = null;\n this.isHealthy_ = false;\n\n /*\n * Firefox doesn't like when code from one iframe tries to create another iframe by way of the parent frame.\n * This can occur in the case of a redirect, i.e. we guessed wrong on what server to connect to and received a reset.\n * Somehow, setTimeout seems to make this ok. That doesn't make sense from a security perspective, since you should\n * still have the context of your originating frame.\n */\n setTimeout(() => {\n // this.conn_ gets set to null in some of the tests. Check to make sure it still exists before using it\n this.conn_ && this.conn_.open(onMessageReceived, onConnectionLost);\n }, Math.floor(0));\n\n const healthyTimeoutMS = conn['healthyTimeout'] || 0;\n if (healthyTimeoutMS > 0) {\n this.healthyTimeout_ = setTimeoutNonBlocking(() => {\n this.healthyTimeout_ = null;\n if (!this.isHealthy_) {\n if (\n this.conn_ &&\n this.conn_.bytesReceived > BYTES_RECEIVED_HEALTHY_OVERRIDE\n ) {\n this.log_(\n 'Connection exceeded healthy timeout but has received ' +\n this.conn_.bytesReceived +\n ' bytes. Marking connection healthy.'\n );\n this.isHealthy_ = true;\n this.conn_.markConnectionHealthy();\n } else if (\n this.conn_ &&\n this.conn_.bytesSent > BYTES_SENT_HEALTHY_OVERRIDE\n ) {\n this.log_(\n 'Connection exceeded healthy timeout but has sent ' +\n this.conn_.bytesSent +\n ' bytes. Leaving connection alive.'\n );\n // NOTE: We don't want to mark it healthy, since we have no guarantee that the bytes have made it to\n // the server.\n } else {\n this.log_('Closing unhealthy connection after timeout.');\n this.close();\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }, Math.floor(healthyTimeoutMS)) as any;\n }\n }\n\n private nextTransportId_(): string {\n return 'c:' + this.id + ':' + this.connectionCount++;\n }\n\n private disconnReceiver_(conn) {\n return everConnected => {\n if (conn === this.conn_) {\n this.onConnectionLost_(everConnected);\n } else if (conn === this.secondaryConn_) {\n this.log_('Secondary connection lost.');\n this.onSecondaryConnectionLost_();\n } else {\n this.log_('closing an old connection');\n }\n };\n }\n\n private connReceiver_(conn: Transport) {\n return (message: Indexable) => {\n if (this.state_ !== RealtimeState.DISCONNECTED) {\n if (conn === this.rx_) {\n this.onPrimaryMessageReceived_(message);\n } else if (conn === this.secondaryConn_) {\n this.onSecondaryMessageReceived_(message);\n } else {\n this.log_('message on old connection');\n }\n }\n };\n }\n\n /**\n * @param dataMsg - An arbitrary data message to be sent to the server\n */\n sendRequest(dataMsg: object) {\n // wrap in a data message envelope and send it on\n const msg = { t: 'd', d: dataMsg };\n this.sendData_(msg);\n }\n\n tryCleanupConnection() {\n if (this.tx_ === this.secondaryConn_ && this.rx_ === this.secondaryConn_) {\n this.log_(\n 'cleaning up and promoting a connection: ' + this.secondaryConn_.connId\n );\n this.conn_ = this.secondaryConn_;\n this.secondaryConn_ = null;\n // the server will shutdown the old connection\n }\n }\n\n private onSecondaryControl_(controlData: { [k: string]: unknown }) {\n if (MESSAGE_TYPE in controlData) {\n const cmd = controlData[MESSAGE_TYPE] as string;\n if (cmd === SWITCH_ACK) {\n this.upgradeIfSecondaryHealthy_();\n } else if (cmd === CONTROL_RESET) {\n // Most likely the session wasn't valid. Abandon the switch attempt\n this.log_('Got a reset on secondary, closing it');\n this.secondaryConn_.close();\n // If we were already using this connection for something, than we need to fully close\n if (\n this.tx_ === this.secondaryConn_ ||\n this.rx_ === this.secondaryConn_\n ) {\n this.close();\n }\n } else if (cmd === CONTROL_PONG) {\n this.log_('got pong on secondary.');\n this.secondaryResponsesRequired_--;\n this.upgradeIfSecondaryHealthy_();\n }\n }\n }\n\n private onSecondaryMessageReceived_(parsedData: Indexable) {\n const layer: string = requireKey('t', parsedData) as string;\n const data: unknown = requireKey('d', parsedData);\n if (layer === 'c') {\n this.onSecondaryControl_(data as Indexable);\n } else if (layer === 'd') {\n // got a data message, but we're still second connection. Need to buffer it up\n this.pendingDataMessages.push(data);\n } else {\n throw new Error('Unknown protocol layer: ' + layer);\n }\n }\n\n private upgradeIfSecondaryHealthy_() {\n if (this.secondaryResponsesRequired_ <= 0) {\n this.log_('Secondary connection is healthy.');\n this.isHealthy_ = true;\n this.secondaryConn_.markConnectionHealthy();\n this.proceedWithUpgrade_();\n } else {\n // Send a ping to make sure the connection is healthy.\n this.log_('sending ping on secondary.');\n this.secondaryConn_.send({ t: 'c', d: { t: PING, d: {} } });\n }\n }\n\n private proceedWithUpgrade_() {\n // tell this connection to consider itself open\n this.secondaryConn_.start();\n // send ack\n this.log_('sending client ack on secondary');\n this.secondaryConn_.send({ t: 'c', d: { t: SWITCH_ACK, d: {} } });\n\n // send end packet on primary transport, switch to sending on this one\n // can receive on this one, buffer responses until end received on primary transport\n this.log_('Ending transmission on primary');\n this.conn_.send({ t: 'c', d: { t: END_TRANSMISSION, d: {} } });\n this.tx_ = this.secondaryConn_;\n\n this.tryCleanupConnection();\n }\n\n private onPrimaryMessageReceived_(parsedData: { [k: string]: unknown }) {\n // Must refer to parsedData properties in quotes, so closure doesn't touch them.\n const layer: string = requireKey('t', parsedData) as string;\n const data: unknown = requireKey('d', parsedData);\n if (layer === 'c') {\n this.onControl_(data as { [k: string]: unknown });\n } else if (layer === 'd') {\n this.onDataMessage_(data);\n }\n }\n\n private onDataMessage_(message: unknown) {\n this.onPrimaryResponse_();\n\n // We don't do anything with data messages, just kick them up a level\n this.onMessage_(message);\n }\n\n private onPrimaryResponse_() {\n if (!this.isHealthy_) {\n this.primaryResponsesRequired_--;\n if (this.primaryResponsesRequired_ <= 0) {\n this.log_('Primary connection is healthy.');\n this.isHealthy_ = true;\n this.conn_.markConnectionHealthy();\n }\n }\n }\n\n private onControl_(controlData: { [k: string]: unknown }) {\n const cmd: string = requireKey(MESSAGE_TYPE, controlData) as string;\n if (MESSAGE_DATA in controlData) {\n const payload = controlData[MESSAGE_DATA];\n if (cmd === SERVER_HELLO) {\n const handshakePayload = {\n ...(payload as {\n ts: number;\n v: string;\n h: string;\n s: string;\n })\n };\n if (this.repoInfo_.isUsingEmulator) {\n // Upon connecting, the emulator will pass the hostname that it's aware of, but we prefer the user's set hostname via `connectDatabaseEmulator` over what the emulator passes.\n handshakePayload.h = this.repoInfo_.host;\n }\n this.onHandshake_(handshakePayload);\n } else if (cmd === END_TRANSMISSION) {\n this.log_('recvd end transmission on primary');\n this.rx_ = this.secondaryConn_;\n for (let i = 0; i < this.pendingDataMessages.length; ++i) {\n this.onDataMessage_(this.pendingDataMessages[i]);\n }\n this.pendingDataMessages = [];\n this.tryCleanupConnection();\n } else if (cmd === CONTROL_SHUTDOWN) {\n // This was previously the 'onKill' callback passed to the lower-level connection\n // payload in this case is the reason for the shutdown. Generally a human-readable error\n this.onConnectionShutdown_(payload as string);\n } else if (cmd === CONTROL_RESET) {\n // payload in this case is the host we should contact\n this.onReset_(payload as string);\n } else if (cmd === CONTROL_ERROR) {\n error('Server Error: ' + payload);\n } else if (cmd === CONTROL_PONG) {\n this.log_('got pong on primary.');\n this.onPrimaryResponse_();\n this.sendPingOnPrimaryIfNecessary_();\n } else {\n error('Unknown control packet command: ' + cmd);\n }\n }\n }\n\n /**\n * @param handshake - The handshake data returned from the server\n */\n private onHandshake_(handshake: {\n ts: number;\n v: string;\n h: string;\n s: string;\n }): void {\n const timestamp = handshake.ts;\n const version = handshake.v;\n const host = handshake.h;\n this.sessionId = handshake.s;\n this.repoInfo_.host = host;\n // if we've already closed the connection, then don't bother trying to progress further\n if (this.state_ === RealtimeState.CONNECTING) {\n this.conn_.start();\n this.onConnectionEstablished_(this.conn_, timestamp);\n if (PROTOCOL_VERSION !== version) {\n warn('Protocol version mismatch detected');\n }\n // TODO: do we want to upgrade? when? maybe a delay?\n this.tryStartUpgrade_();\n }\n }\n\n private tryStartUpgrade_() {\n const conn = this.transportManager_.upgradeTransport();\n if (conn) {\n this.startUpgrade_(conn);\n }\n }\n\n private startUpgrade_(conn: TransportConstructor) {\n this.secondaryConn_ = new conn(\n this.nextTransportId_(),\n this.repoInfo_,\n this.applicationId_,\n this.appCheckToken_,\n this.authToken_,\n this.sessionId\n );\n // For certain transports (WebSockets), we need to send and receive several messages back and forth before we\n // can consider the transport healthy.\n this.secondaryResponsesRequired_ =\n conn['responsesRequiredToBeHealthy'] || 0;\n\n const onMessage = this.connReceiver_(this.secondaryConn_);\n const onDisconnect = this.disconnReceiver_(this.secondaryConn_);\n this.secondaryConn_.open(onMessage, onDisconnect);\n\n // If we haven't successfully upgraded after UPGRADE_TIMEOUT, give up and kill the secondary.\n setTimeoutNonBlocking(() => {\n if (this.secondaryConn_) {\n this.log_('Timed out trying to upgrade.');\n this.secondaryConn_.close();\n }\n }, Math.floor(UPGRADE_TIMEOUT));\n }\n\n private onReset_(host: string) {\n this.log_('Reset packet received. New host: ' + host);\n this.repoInfo_.host = host;\n // TODO: if we're already \"connected\", we need to trigger a disconnect at the next layer up.\n // We don't currently support resets after the connection has already been established\n if (this.state_ === RealtimeState.CONNECTED) {\n this.close();\n } else {\n // Close whatever connections we have open and start again.\n this.closeConnections_();\n this.start_();\n }\n }\n\n private onConnectionEstablished_(conn: Transport, timestamp: number) {\n this.log_('Realtime connection established.');\n this.conn_ = conn;\n this.state_ = RealtimeState.CONNECTED;\n\n if (this.onReady_) {\n this.onReady_(timestamp, this.sessionId);\n this.onReady_ = null;\n }\n\n // If after 5 seconds we haven't sent enough requests to the server to get the connection healthy,\n // send some pings.\n if (this.primaryResponsesRequired_ === 0) {\n this.log_('Primary connection is healthy.');\n this.isHealthy_ = true;\n } else {\n setTimeoutNonBlocking(() => {\n this.sendPingOnPrimaryIfNecessary_();\n }, Math.floor(DELAY_BEFORE_SENDING_EXTRA_REQUESTS));\n }\n }\n\n private sendPingOnPrimaryIfNecessary_() {\n // If the connection isn't considered healthy yet, we'll send a noop ping packet request.\n if (!this.isHealthy_ && this.state_ === RealtimeState.CONNECTED) {\n this.log_('sending ping on primary.');\n this.sendData_({ t: 'c', d: { t: PING, d: {} } });\n }\n }\n\n private onSecondaryConnectionLost_() {\n const conn = this.secondaryConn_;\n this.secondaryConn_ = null;\n if (this.tx_ === conn || this.rx_ === conn) {\n // we are relying on this connection already in some capacity. Therefore, a failure is real\n this.close();\n }\n }\n\n /**\n * @param everConnected - Whether or not the connection ever reached a server. Used to determine if\n * we should flush the host cache\n */\n private onConnectionLost_(everConnected: boolean) {\n this.conn_ = null;\n\n // NOTE: IF you're seeing a Firefox error for this line, I think it might be because it's getting\n // called on window close and RealtimeState.CONNECTING is no longer defined. Just a guess.\n if (!everConnected && this.state_ === RealtimeState.CONNECTING) {\n this.log_('Realtime connection failed.');\n // Since we failed to connect at all, clear any cached entry for this namespace in case the machine went away\n if (this.repoInfo_.isCacheableHost()) {\n PersistentStorage.remove('host:' + this.repoInfo_.host);\n // reset the internal host to what we would show the user, i.e. .firebaseio.com\n this.repoInfo_.internalHost = this.repoInfo_.host;\n }\n } else if (this.state_ === RealtimeState.CONNECTED) {\n this.log_('Realtime connection lost.');\n }\n\n this.close();\n }\n\n private onConnectionShutdown_(reason: string) {\n this.log_('Connection shutdown command received. Shutting down...');\n\n if (this.onKill_) {\n this.onKill_(reason);\n this.onKill_ = null;\n }\n\n // We intentionally don't want to fire onDisconnect (kill is a different case),\n // so clear the callback.\n this.onDisconnect_ = null;\n\n this.close();\n }\n\n private sendData_(data: object) {\n if (this.state_ !== RealtimeState.CONNECTED) {\n throw 'Connection is not connected';\n } else {\n this.tx_.send(data);\n }\n }\n\n /**\n * Cleans up this connection, calling the appropriate callbacks\n */\n close() {\n if (this.state_ !== RealtimeState.DISCONNECTED) {\n this.log_('Closing realtime connection.');\n this.state_ = RealtimeState.DISCONNECTED;\n\n this.closeConnections_();\n\n if (this.onDisconnect_) {\n this.onDisconnect_();\n this.onDisconnect_ = null;\n }\n }\n }\n\n private closeConnections_() {\n this.log_('Shutting down all connections');\n if (this.conn_) {\n this.conn_.close();\n this.conn_ = null;\n }\n\n if (this.secondaryConn_) {\n this.secondaryConn_.close();\n this.secondaryConn_ = null;\n }\n\n if (this.healthyTimeout_) {\n clearTimeout(this.healthyTimeout_);\n this.healthyTimeout_ = null;\n }\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { QueryContext } from './view/EventRegistration';\n\n/**\n * Interface defining the set of actions that can be performed against the Firebase server\n * (basically corresponds to our wire protocol).\n *\n * @interface\n */\nexport abstract class ServerActions {\n abstract listen(\n query: QueryContext,\n currentHashFn: () => string,\n tag: number | null,\n onComplete: (a: string, b: unknown) => void\n ): void;\n\n /**\n * Remove a listen.\n */\n abstract unlisten(query: QueryContext, tag: number | null): void;\n\n /**\n * Get the server value satisfying this query.\n */\n abstract get(query: QueryContext): Promise;\n\n put(\n pathString: string,\n data: unknown,\n onComplete?: (a: string, b: string) => void,\n hash?: string\n ) {}\n\n merge(\n pathString: string,\n data: unknown,\n onComplete: (a: string, b: string | null) => void,\n hash?: string\n ) {}\n\n /**\n * Refreshes the auth token for the current connection.\n * @param token - The authentication token\n */\n refreshAuthToken(token: string) {}\n\n /**\n * Refreshes the app check token for the current connection.\n * @param token The app check token\n */\n refreshAppCheckToken(token: string) {}\n\n onDisconnectPut(\n pathString: string,\n data: unknown,\n onComplete?: (a: string, b: string) => void\n ) {}\n\n onDisconnectMerge(\n pathString: string,\n data: unknown,\n onComplete?: (a: string, b: string) => void\n ) {}\n\n onDisconnectCancel(\n pathString: string,\n onComplete?: (a: string, b: string) => void\n ) {}\n\n reportStats(stats: { [k: string]: unknown }) {}\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert } from '@firebase/util';\n\n/**\n * Base class to be used if you want to emit events. Call the constructor with\n * the set of allowed event names.\n */\nexport abstract class EventEmitter {\n private listeners_: {\n [eventType: string]: Array<{\n callback(...args: unknown[]): void;\n context: unknown;\n }>;\n } = {};\n\n constructor(private allowedEvents_: string[]) {\n assert(\n Array.isArray(allowedEvents_) && allowedEvents_.length > 0,\n 'Requires a non-empty array'\n );\n }\n\n /**\n * To be overridden by derived classes in order to fire an initial event when\n * somebody subscribes for data.\n *\n * @returns {Array.<*>} Array of parameters to trigger initial event with.\n */\n abstract getInitialEvent(eventType: string): unknown[];\n\n /**\n * To be called by derived classes to trigger events.\n */\n protected trigger(eventType: string, ...varArgs: unknown[]) {\n if (Array.isArray(this.listeners_[eventType])) {\n // Clone the list, since callbacks could add/remove listeners.\n const listeners = [...this.listeners_[eventType]];\n\n for (let i = 0; i < listeners.length; i++) {\n listeners[i].callback.apply(listeners[i].context, varArgs);\n }\n }\n }\n\n on(eventType: string, callback: (a: unknown) => void, context: unknown) {\n this.validateEventType_(eventType);\n this.listeners_[eventType] = this.listeners_[eventType] || [];\n this.listeners_[eventType].push({ callback, context });\n\n const eventData = this.getInitialEvent(eventType);\n if (eventData) {\n callback.apply(context, eventData);\n }\n }\n\n off(eventType: string, callback: (a: unknown) => void, context: unknown) {\n this.validateEventType_(eventType);\n const listeners = this.listeners_[eventType] || [];\n for (let i = 0; i < listeners.length; i++) {\n if (\n listeners[i].callback === callback &&\n (!context || context === listeners[i].context)\n ) {\n listeners.splice(i, 1);\n return;\n }\n }\n }\n\n private validateEventType_(eventType: string) {\n assert(\n this.allowedEvents_.find(et => {\n return et === eventType;\n }),\n 'Unknown event: ' + eventType\n );\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert, isMobileCordova } from '@firebase/util';\n\nimport { EventEmitter } from './EventEmitter';\n\n/**\n * Monitors online state (as reported by window.online/offline events).\n *\n * The expectation is that this could have many false positives (thinks we are online\n * when we're not), but no false negatives. So we can safely use it to determine when\n * we definitely cannot reach the internet.\n */\nexport class OnlineMonitor extends EventEmitter {\n private online_ = true;\n\n static getInstance() {\n return new OnlineMonitor();\n }\n\n constructor() {\n super(['online']);\n\n // We've had repeated complaints that Cordova apps can get stuck \"offline\", e.g.\n // https://forum.ionicframework.com/t/firebase-connection-is-lost-and-never-come-back/43810\n // It would seem that the 'online' event does not always fire consistently. So we disable it\n // for Cordova.\n if (\n typeof window !== 'undefined' &&\n typeof window.addEventListener !== 'undefined' &&\n !isMobileCordova()\n ) {\n window.addEventListener(\n 'online',\n () => {\n if (!this.online_) {\n this.online_ = true;\n this.trigger('online', true);\n }\n },\n false\n );\n\n window.addEventListener(\n 'offline',\n () => {\n if (this.online_) {\n this.online_ = false;\n this.trigger('online', false);\n }\n },\n false\n );\n }\n }\n\n getInitialEvent(eventType: string): boolean[] {\n assert(eventType === 'online', 'Unknown event type: ' + eventType);\n return [this.online_];\n }\n\n currentlyOnline(): boolean {\n return this.online_;\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { stringLength } from '@firebase/util';\n\nimport { nameCompare } from './util';\n\n/** Maximum key depth. */\nconst MAX_PATH_DEPTH = 32;\n\n/** Maximum number of (UTF8) bytes in a Firebase path. */\nconst MAX_PATH_LENGTH_BYTES = 768;\n\n/**\n * An immutable object representing a parsed path. It's immutable so that you\n * can pass them around to other functions without worrying about them changing\n * it.\n */\n\nexport class Path {\n pieces_: string[];\n pieceNum_: number;\n\n /**\n * @param pathOrString - Path string to parse, or another path, or the raw\n * tokens array\n */\n constructor(pathOrString: string | string[], pieceNum?: number) {\n if (pieceNum === void 0) {\n this.pieces_ = (pathOrString as string).split('/');\n\n // Remove empty pieces.\n let copyTo = 0;\n for (let i = 0; i < this.pieces_.length; i++) {\n if (this.pieces_[i].length > 0) {\n this.pieces_[copyTo] = this.pieces_[i];\n copyTo++;\n }\n }\n this.pieces_.length = copyTo;\n\n this.pieceNum_ = 0;\n } else {\n this.pieces_ = pathOrString as string[];\n this.pieceNum_ = pieceNum;\n }\n }\n\n toString(): string {\n let pathString = '';\n for (let i = this.pieceNum_; i < this.pieces_.length; i++) {\n if (this.pieces_[i] !== '') {\n pathString += '/' + this.pieces_[i];\n }\n }\n\n return pathString || '/';\n }\n}\n\nexport function newEmptyPath(): Path {\n return new Path('');\n}\n\nexport function pathGetFront(path: Path): string | null {\n if (path.pieceNum_ >= path.pieces_.length) {\n return null;\n }\n\n return path.pieces_[path.pieceNum_];\n}\n\n/**\n * @returns The number of segments in this path\n */\nexport function pathGetLength(path: Path): number {\n return path.pieces_.length - path.pieceNum_;\n}\n\nexport function pathPopFront(path: Path): Path {\n let pieceNum = path.pieceNum_;\n if (pieceNum < path.pieces_.length) {\n pieceNum++;\n }\n return new Path(path.pieces_, pieceNum);\n}\n\nexport function pathGetBack(path: Path): string | null {\n if (path.pieceNum_ < path.pieces_.length) {\n return path.pieces_[path.pieces_.length - 1];\n }\n\n return null;\n}\n\nexport function pathToUrlEncodedString(path: Path): string {\n let pathString = '';\n for (let i = path.pieceNum_; i < path.pieces_.length; i++) {\n if (path.pieces_[i] !== '') {\n pathString += '/' + encodeURIComponent(String(path.pieces_[i]));\n }\n }\n\n return pathString || '/';\n}\n\n/**\n * Shallow copy of the parts of the path.\n *\n */\nexport function pathSlice(path: Path, begin: number = 0): string[] {\n return path.pieces_.slice(path.pieceNum_ + begin);\n}\n\nexport function pathParent(path: Path): Path | null {\n if (path.pieceNum_ >= path.pieces_.length) {\n return null;\n }\n\n const pieces = [];\n for (let i = path.pieceNum_; i < path.pieces_.length - 1; i++) {\n pieces.push(path.pieces_[i]);\n }\n\n return new Path(pieces, 0);\n}\n\nexport function pathChild(path: Path, childPathObj: string | Path): Path {\n const pieces = [];\n for (let i = path.pieceNum_; i < path.pieces_.length; i++) {\n pieces.push(path.pieces_[i]);\n }\n\n if (childPathObj instanceof Path) {\n for (let i = childPathObj.pieceNum_; i < childPathObj.pieces_.length; i++) {\n pieces.push(childPathObj.pieces_[i]);\n }\n } else {\n const childPieces = childPathObj.split('/');\n for (let i = 0; i < childPieces.length; i++) {\n if (childPieces[i].length > 0) {\n pieces.push(childPieces[i]);\n }\n }\n }\n\n return new Path(pieces, 0);\n}\n\n/**\n * @returns True if there are no segments in this path\n */\nexport function pathIsEmpty(path: Path): boolean {\n return path.pieceNum_ >= path.pieces_.length;\n}\n\n/**\n * @returns The path from outerPath to innerPath\n */\nexport function newRelativePath(outerPath: Path, innerPath: Path): Path {\n const outer = pathGetFront(outerPath),\n inner = pathGetFront(innerPath);\n if (outer === null) {\n return innerPath;\n } else if (outer === inner) {\n return newRelativePath(pathPopFront(outerPath), pathPopFront(innerPath));\n } else {\n throw new Error(\n 'INTERNAL ERROR: innerPath (' +\n innerPath +\n ') is not within ' +\n 'outerPath (' +\n outerPath +\n ')'\n );\n }\n}\n\n/**\n * @returns -1, 0, 1 if left is less, equal, or greater than the right.\n */\nexport function pathCompare(left: Path, right: Path): number {\n const leftKeys = pathSlice(left, 0);\n const rightKeys = pathSlice(right, 0);\n for (let i = 0; i < leftKeys.length && i < rightKeys.length; i++) {\n const cmp = nameCompare(leftKeys[i], rightKeys[i]);\n if (cmp !== 0) {\n return cmp;\n }\n }\n if (leftKeys.length === rightKeys.length) {\n return 0;\n }\n return leftKeys.length < rightKeys.length ? -1 : 1;\n}\n\n/**\n * @returns true if paths are the same.\n */\nexport function pathEquals(path: Path, other: Path): boolean {\n if (pathGetLength(path) !== pathGetLength(other)) {\n return false;\n }\n\n for (\n let i = path.pieceNum_, j = other.pieceNum_;\n i <= path.pieces_.length;\n i++, j++\n ) {\n if (path.pieces_[i] !== other.pieces_[j]) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * @returns True if this path is a parent of (or the same as) other\n */\nexport function pathContains(path: Path, other: Path): boolean {\n let i = path.pieceNum_;\n let j = other.pieceNum_;\n if (pathGetLength(path) > pathGetLength(other)) {\n return false;\n }\n while (i < path.pieces_.length) {\n if (path.pieces_[i] !== other.pieces_[j]) {\n return false;\n }\n ++i;\n ++j;\n }\n return true;\n}\n\n/**\n * Dynamic (mutable) path used to count path lengths.\n *\n * This class is used to efficiently check paths for valid\n * length (in UTF8 bytes) and depth (used in path validation).\n *\n * Throws Error exception if path is ever invalid.\n *\n * The definition of a path always begins with '/'.\n */\nexport class ValidationPath {\n parts_: string[];\n /** Initialize to number of '/' chars needed in path. */\n byteLength_: number;\n\n /**\n * @param path - Initial Path.\n * @param errorPrefix_ - Prefix for any error messages.\n */\n constructor(path: Path, public errorPrefix_: string) {\n this.parts_ = pathSlice(path, 0);\n /** Initialize to number of '/' chars needed in path. */\n this.byteLength_ = Math.max(1, this.parts_.length);\n\n for (let i = 0; i < this.parts_.length; i++) {\n this.byteLength_ += stringLength(this.parts_[i]);\n }\n validationPathCheckValid(this);\n }\n}\n\nexport function validationPathPush(\n validationPath: ValidationPath,\n child: string\n): void {\n // Count the needed '/'\n if (validationPath.parts_.length > 0) {\n validationPath.byteLength_ += 1;\n }\n validationPath.parts_.push(child);\n validationPath.byteLength_ += stringLength(child);\n validationPathCheckValid(validationPath);\n}\n\nexport function validationPathPop(validationPath: ValidationPath): void {\n const last = validationPath.parts_.pop();\n validationPath.byteLength_ -= stringLength(last);\n // Un-count the previous '/'\n if (validationPath.parts_.length > 0) {\n validationPath.byteLength_ -= 1;\n }\n}\n\nfunction validationPathCheckValid(validationPath: ValidationPath): void {\n if (validationPath.byteLength_ > MAX_PATH_LENGTH_BYTES) {\n throw new Error(\n validationPath.errorPrefix_ +\n 'has a key path longer than ' +\n MAX_PATH_LENGTH_BYTES +\n ' bytes (' +\n validationPath.byteLength_ +\n ').'\n );\n }\n if (validationPath.parts_.length > MAX_PATH_DEPTH) {\n throw new Error(\n validationPath.errorPrefix_ +\n 'path specified exceeds the maximum depth that can be written (' +\n MAX_PATH_DEPTH +\n ') or object contains a cycle ' +\n validationPathToErrorString(validationPath)\n );\n }\n}\n\n/**\n * String for use in error messages - uses '.' notation for path.\n */\nexport function validationPathToErrorString(\n validationPath: ValidationPath\n): string {\n if (validationPath.parts_.length === 0) {\n return '';\n }\n return \"in property '\" + validationPath.parts_.join('.') + \"'\";\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert } from '@firebase/util';\n\nimport { EventEmitter } from './EventEmitter';\n\ndeclare const document: Document;\n\nexport class VisibilityMonitor extends EventEmitter {\n private visible_: boolean;\n\n static getInstance() {\n return new VisibilityMonitor();\n }\n\n constructor() {\n super(['visible']);\n let hidden: string;\n let visibilityChange: string;\n if (\n typeof document !== 'undefined' &&\n typeof document.addEventListener !== 'undefined'\n ) {\n if (typeof document['hidden'] !== 'undefined') {\n // Opera 12.10 and Firefox 18 and later support\n visibilityChange = 'visibilitychange';\n hidden = 'hidden';\n } else if (typeof document['mozHidden'] !== 'undefined') {\n visibilityChange = 'mozvisibilitychange';\n hidden = 'mozHidden';\n } else if (typeof document['msHidden'] !== 'undefined') {\n visibilityChange = 'msvisibilitychange';\n hidden = 'msHidden';\n } else if (typeof document['webkitHidden'] !== 'undefined') {\n visibilityChange = 'webkitvisibilitychange';\n hidden = 'webkitHidden';\n }\n }\n\n // Initially, we always assume we are visible. This ensures that in browsers\n // without page visibility support or in cases where we are never visible\n // (e.g. chrome extension), we act as if we are visible, i.e. don't delay\n // reconnects\n this.visible_ = true;\n\n if (visibilityChange) {\n document.addEventListener(\n visibilityChange,\n () => {\n const visible = !document[hidden];\n if (visible !== this.visible_) {\n this.visible_ = visible;\n this.trigger('visible', visible);\n }\n },\n false\n );\n }\n }\n\n getInitialEvent(eventType: string): boolean[] {\n assert(eventType === 'visible', 'Unknown event type: ' + eventType);\n return [this.visible_];\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n assert,\n contains,\n Deferred,\n isEmpty,\n isMobileCordova,\n isNodeSdk,\n isReactNative,\n isValidFormat,\n safeGet,\n stringify,\n isAdmin\n} from '@firebase/util';\n\nimport { Connection } from '../realtime/Connection';\n\nimport { AppCheckTokenProvider } from './AppCheckTokenProvider';\nimport { AuthTokenProvider } from './AuthTokenProvider';\nimport { RepoInfo } from './RepoInfo';\nimport { ServerActions } from './ServerActions';\nimport { OnlineMonitor } from './util/OnlineMonitor';\nimport { Path } from './util/Path';\nimport { error, log, logWrapper, warn, ObjectToUniqueKey } from './util/util';\nimport { VisibilityMonitor } from './util/VisibilityMonitor';\nimport { SDK_VERSION } from './version';\nimport { QueryContext } from './view/EventRegistration';\n\nconst RECONNECT_MIN_DELAY = 1000;\nconst RECONNECT_MAX_DELAY_DEFAULT = 60 * 5 * 1000; // 5 minutes in milliseconds (Case: 1858)\nconst RECONNECT_MAX_DELAY_FOR_ADMINS = 30 * 1000; // 30 seconds for admin clients (likely to be a backend server)\nconst RECONNECT_DELAY_MULTIPLIER = 1.3;\nconst RECONNECT_DELAY_RESET_TIMEOUT = 30000; // Reset delay back to MIN_DELAY after being connected for 30sec.\nconst SERVER_KILL_INTERRUPT_REASON = 'server_kill';\n\n// If auth fails repeatedly, we'll assume something is wrong and log a warning / back off.\nconst INVALID_TOKEN_THRESHOLD = 3;\n\ninterface ListenSpec {\n onComplete(s: string, p?: unknown): void;\n\n hashFn(): string;\n\n query: QueryContext;\n tag: number | null;\n}\n\ninterface OnDisconnectRequest {\n pathString: string;\n action: string;\n data: unknown;\n onComplete?: (a: string, b: string) => void;\n}\n\ninterface OutstandingPut {\n action: string;\n request: object;\n queued?: boolean;\n onComplete: (a: string, b?: string) => void;\n}\n\ninterface OutstandingGet {\n request: object;\n onComplete: (response: { [k: string]: unknown }) => void;\n}\n\n/**\n * Firebase connection. Abstracts wire protocol and handles reconnecting.\n *\n * NOTE: All JSON objects sent to the realtime connection must have property names enclosed\n * in quotes to make sure the closure compiler does not minify them.\n */\nexport class PersistentConnection extends ServerActions {\n // Used for diagnostic logging.\n id = PersistentConnection.nextPersistentConnectionId_++;\n private log_ = logWrapper('p:' + this.id + ':');\n\n private interruptReasons_: { [reason: string]: boolean } = {};\n private readonly listens: Map<\n /* path */ string,\n Map\n > = new Map();\n private outstandingPuts_: OutstandingPut[] = [];\n private outstandingGets_: OutstandingGet[] = [];\n private outstandingPutCount_ = 0;\n private outstandingGetCount_ = 0;\n private onDisconnectRequestQueue_: OnDisconnectRequest[] = [];\n private connected_ = false;\n private reconnectDelay_ = RECONNECT_MIN_DELAY;\n private maxReconnectDelay_ = RECONNECT_MAX_DELAY_DEFAULT;\n private securityDebugCallback_: ((a: object) => void) | null = null;\n lastSessionId: string | null = null;\n\n private establishConnectionTimer_: number | null = null;\n\n private visible_: boolean = false;\n\n // Before we get connected, we keep a queue of pending messages to send.\n private requestCBHash_: { [k: number]: (a: unknown) => void } = {};\n private requestNumber_ = 0;\n\n private realtime_: {\n sendRequest(a: object): void;\n close(): void;\n } | null = null;\n\n private authToken_: string | null = null;\n private appCheckToken_: string | null = null;\n private forceTokenRefresh_ = false;\n private invalidAuthTokenCount_ = 0;\n private invalidAppCheckTokenCount_ = 0;\n\n private firstConnection_ = true;\n private lastConnectionAttemptTime_: number | null = null;\n private lastConnectionEstablishedTime_: number | null = null;\n\n private static nextPersistentConnectionId_ = 0;\n\n /**\n * Counter for number of connections created. Mainly used for tagging in the logs\n */\n private static nextConnectionId_ = 0;\n\n /**\n * @param repoInfo_ - Data about the namespace we are connecting to\n * @param applicationId_ - The Firebase App ID for this project\n * @param onDataUpdate_ - A callback for new data from the server\n */\n constructor(\n private repoInfo_: RepoInfo,\n private applicationId_: string,\n private onDataUpdate_: (\n a: string,\n b: unknown,\n c: boolean,\n d: number | null\n ) => void,\n private onConnectStatus_: (a: boolean) => void,\n private onServerInfoUpdate_: (a: unknown) => void,\n private authTokenProvider_: AuthTokenProvider,\n private appCheckTokenProvider_: AppCheckTokenProvider,\n private authOverride_?: object | null\n ) {\n super();\n\n if (authOverride_ && !isNodeSdk()) {\n throw new Error(\n 'Auth override specified in options, but not supported on non Node.js platforms'\n );\n }\n\n VisibilityMonitor.getInstance().on('visible', this.onVisible_, this);\n\n if (repoInfo_.host.indexOf('fblocal') === -1) {\n OnlineMonitor.getInstance().on('online', this.onOnline_, this);\n }\n }\n\n protected sendRequest(\n action: string,\n body: unknown,\n onResponse?: (a: unknown) => void\n ) {\n const curReqNum = ++this.requestNumber_;\n\n const msg = { r: curReqNum, a: action, b: body };\n this.log_(stringify(msg));\n assert(\n this.connected_,\n \"sendRequest call when we're not connected not allowed.\"\n );\n this.realtime_.sendRequest(msg);\n if (onResponse) {\n this.requestCBHash_[curReqNum] = onResponse;\n }\n }\n\n get(query: QueryContext): Promise {\n this.initConnection_();\n\n const deferred = new Deferred();\n const request = {\n p: query._path.toString(),\n q: query._queryObject\n };\n const outstandingGet = {\n action: 'g',\n request,\n onComplete: (message: { [k: string]: unknown }) => {\n const payload = message['d'] as string;\n if (message['s'] === 'ok') {\n deferred.resolve(payload);\n } else {\n deferred.reject(payload);\n }\n }\n };\n this.outstandingGets_.push(outstandingGet);\n this.outstandingGetCount_++;\n const index = this.outstandingGets_.length - 1;\n\n if (this.connected_) {\n this.sendGet_(index);\n }\n\n return deferred.promise;\n }\n\n listen(\n query: QueryContext,\n currentHashFn: () => string,\n tag: number | null,\n onComplete: (a: string, b: unknown) => void\n ) {\n this.initConnection_();\n\n const queryId = query._queryIdentifier;\n const pathString = query._path.toString();\n this.log_('Listen called for ' + pathString + ' ' + queryId);\n if (!this.listens.has(pathString)) {\n this.listens.set(pathString, new Map());\n }\n assert(\n query._queryParams.isDefault() || !query._queryParams.loadsAllData(),\n 'listen() called for non-default but complete query'\n );\n assert(\n !this.listens.get(pathString)!.has(queryId),\n `listen() called twice for same path/queryId.`\n );\n const listenSpec: ListenSpec = {\n onComplete,\n hashFn: currentHashFn,\n query,\n tag\n };\n this.listens.get(pathString)!.set(queryId, listenSpec);\n\n if (this.connected_) {\n this.sendListen_(listenSpec);\n }\n }\n\n private sendGet_(index: number) {\n const get = this.outstandingGets_[index];\n this.sendRequest('g', get.request, (message: { [k: string]: unknown }) => {\n delete this.outstandingGets_[index];\n this.outstandingGetCount_--;\n if (this.outstandingGetCount_ === 0) {\n this.outstandingGets_ = [];\n }\n if (get.onComplete) {\n get.onComplete(message);\n }\n });\n }\n\n private sendListen_(listenSpec: ListenSpec) {\n const query = listenSpec.query;\n const pathString = query._path.toString();\n const queryId = query._queryIdentifier;\n this.log_('Listen on ' + pathString + ' for ' + queryId);\n const req: { [k: string]: unknown } = { /*path*/ p: pathString };\n\n const action = 'q';\n\n // Only bother to send query if it's non-default.\n if (listenSpec.tag) {\n req['q'] = query._queryObject;\n req['t'] = listenSpec.tag;\n }\n\n req[/*hash*/ 'h'] = listenSpec.hashFn();\n\n this.sendRequest(action, req, (message: { [k: string]: unknown }) => {\n const payload: unknown = message[/*data*/ 'd'];\n const status = message[/*status*/ 's'] as string;\n\n // print warnings in any case...\n PersistentConnection.warnOnListenWarnings_(payload, query);\n\n const currentListenSpec =\n this.listens.get(pathString) &&\n this.listens.get(pathString)!.get(queryId);\n // only trigger actions if the listen hasn't been removed and readded\n if (currentListenSpec === listenSpec) {\n this.log_('listen response', message);\n\n if (status !== 'ok') {\n this.removeListen_(pathString, queryId);\n }\n\n if (listenSpec.onComplete) {\n listenSpec.onComplete(status, payload);\n }\n }\n });\n }\n\n private static warnOnListenWarnings_(payload: unknown, query: QueryContext) {\n if (payload && typeof payload === 'object' && contains(payload, 'w')) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const warnings = safeGet(payload as any, 'w');\n if (Array.isArray(warnings) && ~warnings.indexOf('no_index')) {\n const indexSpec =\n '\".indexOn\": \"' + query._queryParams.getIndex().toString() + '\"';\n const indexPath = query._path.toString();\n warn(\n `Using an unspecified index. Your data will be downloaded and ` +\n `filtered on the client. Consider adding ${indexSpec} at ` +\n `${indexPath} to your security rules for better performance.`\n );\n }\n }\n }\n\n refreshAuthToken(token: string) {\n this.authToken_ = token;\n this.log_('Auth token refreshed');\n if (this.authToken_) {\n this.tryAuth();\n } else {\n //If we're connected we want to let the server know to unauthenticate us. If we're not connected, simply delete\n //the credential so we dont become authenticated next time we connect.\n if (this.connected_) {\n this.sendRequest('unauth', {}, () => {});\n }\n }\n\n this.reduceReconnectDelayIfAdminCredential_(token);\n }\n\n private reduceReconnectDelayIfAdminCredential_(credential: string) {\n // NOTE: This isn't intended to be bulletproof (a malicious developer can always just modify the client).\n // Additionally, we don't bother resetting the max delay back to the default if auth fails / expires.\n const isFirebaseSecret = credential && credential.length === 40;\n if (isFirebaseSecret || isAdmin(credential)) {\n this.log_(\n 'Admin auth credential detected. Reducing max reconnect time.'\n );\n this.maxReconnectDelay_ = RECONNECT_MAX_DELAY_FOR_ADMINS;\n }\n }\n\n refreshAppCheckToken(token: string | null) {\n this.appCheckToken_ = token;\n this.log_('App check token refreshed');\n if (this.appCheckToken_) {\n this.tryAppCheck();\n } else {\n //If we're connected we want to let the server know to unauthenticate us.\n //If we're not connected, simply delete the credential so we dont become\n // authenticated next time we connect.\n if (this.connected_) {\n this.sendRequest('unappeck', {}, () => {});\n }\n }\n }\n\n /**\n * Attempts to authenticate with the given credentials. If the authentication attempt fails, it's triggered like\n * a auth revoked (the connection is closed).\n */\n tryAuth() {\n if (this.connected_ && this.authToken_) {\n const token = this.authToken_;\n const authMethod = isValidFormat(token) ? 'auth' : 'gauth';\n const requestData: { [k: string]: unknown } = { cred: token };\n if (this.authOverride_ === null) {\n requestData['noauth'] = true;\n } else if (typeof this.authOverride_ === 'object') {\n requestData['authvar'] = this.authOverride_;\n }\n this.sendRequest(\n authMethod,\n requestData,\n (res: { [k: string]: unknown }) => {\n const status = res[/*status*/ 's'] as string;\n const data = (res[/*data*/ 'd'] as string) || 'error';\n\n if (this.authToken_ === token) {\n if (status === 'ok') {\n this.invalidAuthTokenCount_ = 0;\n } else {\n // Triggers reconnect and force refresh for auth token\n this.onAuthRevoked_(status, data);\n }\n }\n }\n );\n }\n }\n\n /**\n * Attempts to authenticate with the given token. If the authentication\n * attempt fails, it's triggered like the token was revoked (the connection is\n * closed).\n */\n tryAppCheck() {\n if (this.connected_ && this.appCheckToken_) {\n this.sendRequest(\n 'appcheck',\n { 'token': this.appCheckToken_ },\n (res: { [k: string]: unknown }) => {\n const status = res[/*status*/ 's'] as string;\n const data = (res[/*data*/ 'd'] as string) || 'error';\n if (status === 'ok') {\n this.invalidAppCheckTokenCount_ = 0;\n } else {\n this.onAppCheckRevoked_(status, data);\n }\n }\n );\n }\n }\n\n /**\n * @inheritDoc\n */\n unlisten(query: QueryContext, tag: number | null) {\n const pathString = query._path.toString();\n const queryId = query._queryIdentifier;\n\n this.log_('Unlisten called for ' + pathString + ' ' + queryId);\n\n assert(\n query._queryParams.isDefault() || !query._queryParams.loadsAllData(),\n 'unlisten() called for non-default but complete query'\n );\n const listen = this.removeListen_(pathString, queryId);\n if (listen && this.connected_) {\n this.sendUnlisten_(pathString, queryId, query._queryObject, tag);\n }\n }\n\n private sendUnlisten_(\n pathString: string,\n queryId: string,\n queryObj: object,\n tag: number | null\n ) {\n this.log_('Unlisten on ' + pathString + ' for ' + queryId);\n\n const req: { [k: string]: unknown } = { /*path*/ p: pathString };\n const action = 'n';\n // Only bother sending queryId if it's non-default.\n if (tag) {\n req['q'] = queryObj;\n req['t'] = tag;\n }\n\n this.sendRequest(action, req);\n }\n\n onDisconnectPut(\n pathString: string,\n data: unknown,\n onComplete?: (a: string, b: string) => void\n ) {\n this.initConnection_();\n\n if (this.connected_) {\n this.sendOnDisconnect_('o', pathString, data, onComplete);\n } else {\n this.onDisconnectRequestQueue_.push({\n pathString,\n action: 'o',\n data,\n onComplete\n });\n }\n }\n\n onDisconnectMerge(\n pathString: string,\n data: unknown,\n onComplete?: (a: string, b: string) => void\n ) {\n this.initConnection_();\n\n if (this.connected_) {\n this.sendOnDisconnect_('om', pathString, data, onComplete);\n } else {\n this.onDisconnectRequestQueue_.push({\n pathString,\n action: 'om',\n data,\n onComplete\n });\n }\n }\n\n onDisconnectCancel(\n pathString: string,\n onComplete?: (a: string, b: string) => void\n ) {\n this.initConnection_();\n\n if (this.connected_) {\n this.sendOnDisconnect_('oc', pathString, null, onComplete);\n } else {\n this.onDisconnectRequestQueue_.push({\n pathString,\n action: 'oc',\n data: null,\n onComplete\n });\n }\n }\n\n private sendOnDisconnect_(\n action: string,\n pathString: string,\n data: unknown,\n onComplete: (a: string, b: string) => void\n ) {\n const request = { /*path*/ p: pathString, /*data*/ d: data };\n this.log_('onDisconnect ' + action, request);\n this.sendRequest(action, request, (response: { [k: string]: unknown }) => {\n if (onComplete) {\n setTimeout(() => {\n onComplete(\n response[/*status*/ 's'] as string,\n response[/* data */ 'd'] as string\n );\n }, Math.floor(0));\n }\n });\n }\n\n put(\n pathString: string,\n data: unknown,\n onComplete?: (a: string, b: string) => void,\n hash?: string\n ) {\n this.putInternal('p', pathString, data, onComplete, hash);\n }\n\n merge(\n pathString: string,\n data: unknown,\n onComplete: (a: string, b: string | null) => void,\n hash?: string\n ) {\n this.putInternal('m', pathString, data, onComplete, hash);\n }\n\n putInternal(\n action: string,\n pathString: string,\n data: unknown,\n onComplete: (a: string, b: string | null) => void,\n hash?: string\n ) {\n this.initConnection_();\n\n const request: { [k: string]: unknown } = {\n /*path*/ p: pathString,\n /*data*/ d: data\n };\n\n if (hash !== undefined) {\n request[/*hash*/ 'h'] = hash;\n }\n\n // TODO: Only keep track of the most recent put for a given path?\n this.outstandingPuts_.push({\n action,\n request,\n onComplete\n });\n\n this.outstandingPutCount_++;\n const index = this.outstandingPuts_.length - 1;\n\n if (this.connected_) {\n this.sendPut_(index);\n } else {\n this.log_('Buffering put: ' + pathString);\n }\n }\n\n private sendPut_(index: number) {\n const action = this.outstandingPuts_[index].action;\n const request = this.outstandingPuts_[index].request;\n const onComplete = this.outstandingPuts_[index].onComplete;\n this.outstandingPuts_[index].queued = this.connected_;\n\n this.sendRequest(action, request, (message: { [k: string]: unknown }) => {\n this.log_(action + ' response', message);\n\n delete this.outstandingPuts_[index];\n this.outstandingPutCount_--;\n\n // Clean up array occasionally.\n if (this.outstandingPutCount_ === 0) {\n this.outstandingPuts_ = [];\n }\n\n if (onComplete) {\n onComplete(\n message[/*status*/ 's'] as string,\n message[/* data */ 'd'] as string\n );\n }\n });\n }\n\n reportStats(stats: { [k: string]: unknown }) {\n // If we're not connected, we just drop the stats.\n if (this.connected_) {\n const request = { /*counters*/ c: stats };\n this.log_('reportStats', request);\n\n this.sendRequest(/*stats*/ 's', request, result => {\n const status = result[/*status*/ 's'];\n if (status !== 'ok') {\n const errorReason = result[/* data */ 'd'];\n this.log_('reportStats', 'Error sending stats: ' + errorReason);\n }\n });\n }\n }\n\n private onDataMessage_(message: { [k: string]: unknown }) {\n if ('r' in message) {\n // this is a response\n this.log_('from server: ' + stringify(message));\n const reqNum = message['r'] as string;\n const onResponse = this.requestCBHash_[reqNum];\n if (onResponse) {\n delete this.requestCBHash_[reqNum];\n onResponse(message[/*body*/ 'b']);\n }\n } else if ('error' in message) {\n throw 'A server-side error has occurred: ' + message['error'];\n } else if ('a' in message) {\n // a and b are action and body, respectively\n this.onDataPush_(message['a'] as string, message['b'] as {});\n }\n }\n\n private onDataPush_(action: string, body: { [k: string]: unknown }) {\n this.log_('handleServerMessage', action, body);\n if (action === 'd') {\n this.onDataUpdate_(\n body[/*path*/ 'p'] as string,\n body[/*data*/ 'd'],\n /*isMerge*/ false,\n body['t'] as number\n );\n } else if (action === 'm') {\n this.onDataUpdate_(\n body[/*path*/ 'p'] as string,\n body[/*data*/ 'd'],\n /*isMerge=*/ true,\n body['t'] as number\n );\n } else if (action === 'c') {\n this.onListenRevoked_(\n body[/*path*/ 'p'] as string,\n body[/*query*/ 'q'] as unknown[]\n );\n } else if (action === 'ac') {\n this.onAuthRevoked_(\n body[/*status code*/ 's'] as string,\n body[/* explanation */ 'd'] as string\n );\n } else if (action === 'apc') {\n this.onAppCheckRevoked_(\n body[/*status code*/ 's'] as string,\n body[/* explanation */ 'd'] as string\n );\n } else if (action === 'sd') {\n this.onSecurityDebugPacket_(body);\n } else {\n error(\n 'Unrecognized action received from server: ' +\n stringify(action) +\n '\\nAre you using the latest client?'\n );\n }\n }\n\n private onReady_(timestamp: number, sessionId: string) {\n this.log_('connection ready');\n this.connected_ = true;\n this.lastConnectionEstablishedTime_ = new Date().getTime();\n this.handleTimestamp_(timestamp);\n this.lastSessionId = sessionId;\n if (this.firstConnection_) {\n this.sendConnectStats_();\n }\n this.restoreState_();\n this.firstConnection_ = false;\n this.onConnectStatus_(true);\n }\n\n private scheduleConnect_(timeout: number) {\n assert(\n !this.realtime_,\n \"Scheduling a connect when we're already connected/ing?\"\n );\n\n if (this.establishConnectionTimer_) {\n clearTimeout(this.establishConnectionTimer_);\n }\n\n // NOTE: Even when timeout is 0, it's important to do a setTimeout to work around an infuriating \"Security Error\" in\n // Firefox when trying to write to our long-polling iframe in some scenarios (e.g. Forge or our unit tests).\n\n this.establishConnectionTimer_ = setTimeout(() => {\n this.establishConnectionTimer_ = null;\n this.establishConnection_();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }, Math.floor(timeout)) as any;\n }\n\n private initConnection_() {\n if (!this.realtime_ && this.firstConnection_) {\n this.scheduleConnect_(0);\n }\n }\n\n private onVisible_(visible: boolean) {\n // NOTE: Tabbing away and back to a window will defeat our reconnect backoff, but I think that's fine.\n if (\n visible &&\n !this.visible_ &&\n this.reconnectDelay_ === this.maxReconnectDelay_\n ) {\n this.log_('Window became visible. Reducing delay.');\n this.reconnectDelay_ = RECONNECT_MIN_DELAY;\n\n if (!this.realtime_) {\n this.scheduleConnect_(0);\n }\n }\n this.visible_ = visible;\n }\n\n private onOnline_(online: boolean) {\n if (online) {\n this.log_('Browser went online.');\n this.reconnectDelay_ = RECONNECT_MIN_DELAY;\n if (!this.realtime_) {\n this.scheduleConnect_(0);\n }\n } else {\n this.log_('Browser went offline. Killing connection.');\n if (this.realtime_) {\n this.realtime_.close();\n }\n }\n }\n\n private onRealtimeDisconnect_() {\n this.log_('data client disconnected');\n this.connected_ = false;\n this.realtime_ = null;\n\n // Since we don't know if our sent transactions succeeded or not, we need to cancel them.\n this.cancelSentTransactions_();\n\n // Clear out the pending requests.\n this.requestCBHash_ = {};\n\n if (this.shouldReconnect_()) {\n if (!this.visible_) {\n this.log_(\"Window isn't visible. Delaying reconnect.\");\n this.reconnectDelay_ = this.maxReconnectDelay_;\n this.lastConnectionAttemptTime_ = new Date().getTime();\n } else if (this.lastConnectionEstablishedTime_) {\n // If we've been connected long enough, reset reconnect delay to minimum.\n const timeSinceLastConnectSucceeded =\n new Date().getTime() - this.lastConnectionEstablishedTime_;\n if (timeSinceLastConnectSucceeded > RECONNECT_DELAY_RESET_TIMEOUT) {\n this.reconnectDelay_ = RECONNECT_MIN_DELAY;\n }\n this.lastConnectionEstablishedTime_ = null;\n }\n\n const timeSinceLastConnectAttempt =\n new Date().getTime() - this.lastConnectionAttemptTime_;\n let reconnectDelay = Math.max(\n 0,\n this.reconnectDelay_ - timeSinceLastConnectAttempt\n );\n reconnectDelay = Math.random() * reconnectDelay;\n\n this.log_('Trying to reconnect in ' + reconnectDelay + 'ms');\n this.scheduleConnect_(reconnectDelay);\n\n // Adjust reconnect delay for next time.\n this.reconnectDelay_ = Math.min(\n this.maxReconnectDelay_,\n this.reconnectDelay_ * RECONNECT_DELAY_MULTIPLIER\n );\n }\n this.onConnectStatus_(false);\n }\n\n private async establishConnection_() {\n if (this.shouldReconnect_()) {\n this.log_('Making a connection attempt');\n this.lastConnectionAttemptTime_ = new Date().getTime();\n this.lastConnectionEstablishedTime_ = null;\n const onDataMessage = this.onDataMessage_.bind(this);\n const onReady = this.onReady_.bind(this);\n const onDisconnect = this.onRealtimeDisconnect_.bind(this);\n const connId = this.id + ':' + PersistentConnection.nextConnectionId_++;\n const lastSessionId = this.lastSessionId;\n let canceled = false;\n let connection: Connection | null = null;\n const closeFn = function () {\n if (connection) {\n connection.close();\n } else {\n canceled = true;\n onDisconnect();\n }\n };\n const sendRequestFn = function (msg: object) {\n assert(\n connection,\n \"sendRequest call when we're not connected not allowed.\"\n );\n connection.sendRequest(msg);\n };\n\n this.realtime_ = {\n close: closeFn,\n sendRequest: sendRequestFn\n };\n\n const forceRefresh = this.forceTokenRefresh_;\n this.forceTokenRefresh_ = false;\n\n try {\n // First fetch auth and app check token, and establish connection after\n // fetching the token was successful\n const [authToken, appCheckToken] = await Promise.all([\n this.authTokenProvider_.getToken(forceRefresh),\n this.appCheckTokenProvider_.getToken(forceRefresh)\n ]);\n\n if (!canceled) {\n log('getToken() completed. Creating connection.');\n this.authToken_ = authToken && authToken.accessToken;\n this.appCheckToken_ = appCheckToken && appCheckToken.token;\n connection = new Connection(\n connId,\n this.repoInfo_,\n this.applicationId_,\n this.appCheckToken_,\n this.authToken_,\n onDataMessage,\n onReady,\n onDisconnect,\n /* onKill= */ reason => {\n warn(reason + ' (' + this.repoInfo_.toString() + ')');\n this.interrupt(SERVER_KILL_INTERRUPT_REASON);\n },\n lastSessionId\n );\n } else {\n log('getToken() completed but was canceled');\n }\n } catch (error) {\n this.log_('Failed to get token: ' + error);\n if (!canceled) {\n if (this.repoInfo_.nodeAdmin) {\n // This may be a critical error for the Admin Node.js SDK, so log a warning.\n // But getToken() may also just have temporarily failed, so we still want to\n // continue retrying.\n warn(error);\n }\n closeFn();\n }\n }\n }\n }\n\n interrupt(reason: string) {\n log('Interrupting connection for reason: ' + reason);\n this.interruptReasons_[reason] = true;\n if (this.realtime_) {\n this.realtime_.close();\n } else {\n if (this.establishConnectionTimer_) {\n clearTimeout(this.establishConnectionTimer_);\n this.establishConnectionTimer_ = null;\n }\n if (this.connected_) {\n this.onRealtimeDisconnect_();\n }\n }\n }\n\n resume(reason: string) {\n log('Resuming connection for reason: ' + reason);\n delete this.interruptReasons_[reason];\n if (isEmpty(this.interruptReasons_)) {\n this.reconnectDelay_ = RECONNECT_MIN_DELAY;\n if (!this.realtime_) {\n this.scheduleConnect_(0);\n }\n }\n }\n\n private handleTimestamp_(timestamp: number) {\n const delta = timestamp - new Date().getTime();\n this.onServerInfoUpdate_({ serverTimeOffset: delta });\n }\n\n private cancelSentTransactions_() {\n for (let i = 0; i < this.outstandingPuts_.length; i++) {\n const put = this.outstandingPuts_[i];\n if (put && /*hash*/ 'h' in put.request && put.queued) {\n if (put.onComplete) {\n put.onComplete('disconnect');\n }\n\n delete this.outstandingPuts_[i];\n this.outstandingPutCount_--;\n }\n }\n\n // Clean up array occasionally.\n if (this.outstandingPutCount_ === 0) {\n this.outstandingPuts_ = [];\n }\n }\n\n private onListenRevoked_(pathString: string, query?: unknown[]) {\n // Remove the listen and manufacture a \"permission_denied\" error for the failed listen.\n let queryId;\n if (!query) {\n queryId = 'default';\n } else {\n queryId = query.map(q => ObjectToUniqueKey(q)).join('$');\n }\n const listen = this.removeListen_(pathString, queryId);\n if (listen && listen.onComplete) {\n listen.onComplete('permission_denied');\n }\n }\n\n private removeListen_(pathString: string, queryId: string): ListenSpec {\n const normalizedPathString = new Path(pathString).toString(); // normalize path.\n let listen;\n if (this.listens.has(normalizedPathString)) {\n const map = this.listens.get(normalizedPathString)!;\n listen = map.get(queryId);\n map.delete(queryId);\n if (map.size === 0) {\n this.listens.delete(normalizedPathString);\n }\n } else {\n // all listens for this path has already been removed\n listen = undefined;\n }\n return listen;\n }\n\n private onAuthRevoked_(statusCode: string, explanation: string) {\n log('Auth token revoked: ' + statusCode + '/' + explanation);\n this.authToken_ = null;\n this.forceTokenRefresh_ = true;\n this.realtime_.close();\n if (statusCode === 'invalid_token' || statusCode === 'permission_denied') {\n // We'll wait a couple times before logging the warning / increasing the\n // retry period since oauth tokens will report as \"invalid\" if they're\n // just expired. Plus there may be transient issues that resolve themselves.\n this.invalidAuthTokenCount_++;\n if (this.invalidAuthTokenCount_ >= INVALID_TOKEN_THRESHOLD) {\n // Set a long reconnect delay because recovery is unlikely\n this.reconnectDelay_ = RECONNECT_MAX_DELAY_FOR_ADMINS;\n\n // Notify the auth token provider that the token is invalid, which will log\n // a warning\n this.authTokenProvider_.notifyForInvalidToken();\n }\n }\n }\n\n private onAppCheckRevoked_(statusCode: string, explanation: string) {\n log('App check token revoked: ' + statusCode + '/' + explanation);\n this.appCheckToken_ = null;\n this.forceTokenRefresh_ = true;\n // Note: We don't close the connection as the developer may not have\n // enforcement enabled. The backend closes connections with enforcements.\n if (statusCode === 'invalid_token' || statusCode === 'permission_denied') {\n // We'll wait a couple times before logging the warning / increasing the\n // retry period since oauth tokens will report as \"invalid\" if they're\n // just expired. Plus there may be transient issues that resolve themselves.\n this.invalidAppCheckTokenCount_++;\n if (this.invalidAppCheckTokenCount_ >= INVALID_TOKEN_THRESHOLD) {\n this.appCheckTokenProvider_.notifyForInvalidToken();\n }\n }\n }\n\n private onSecurityDebugPacket_(body: { [k: string]: unknown }) {\n if (this.securityDebugCallback_) {\n this.securityDebugCallback_(body);\n } else {\n if ('msg' in body) {\n console.log(\n 'FIREBASE: ' + (body['msg'] as string).replace('\\n', '\\nFIREBASE: ')\n );\n }\n }\n }\n\n private restoreState_() {\n //Re-authenticate ourselves if we have a credential stored.\n this.tryAuth();\n this.tryAppCheck();\n\n // Puts depend on having received the corresponding data update from the server before they complete, so we must\n // make sure to send listens before puts.\n for (const queries of this.listens.values()) {\n for (const listenSpec of queries.values()) {\n this.sendListen_(listenSpec);\n }\n }\n\n for (let i = 0; i < this.outstandingPuts_.length; i++) {\n if (this.outstandingPuts_[i]) {\n this.sendPut_(i);\n }\n }\n\n while (this.onDisconnectRequestQueue_.length) {\n const request = this.onDisconnectRequestQueue_.shift();\n this.sendOnDisconnect_(\n request.action,\n request.pathString,\n request.data,\n request.onComplete\n );\n }\n\n for (let i = 0; i < this.outstandingGets_.length; i++) {\n if (this.outstandingGets_[i]) {\n this.sendGet_(i);\n }\n }\n }\n\n /**\n * Sends client stats for first connection\n */\n private sendConnectStats_() {\n const stats: { [k: string]: number } = {};\n\n let clientName = 'js';\n if (isNodeSdk()) {\n if (this.repoInfo_.nodeAdmin) {\n clientName = 'admin_node';\n } else {\n clientName = 'node';\n }\n }\n\n stats['sdk.' + clientName + '.' + SDK_VERSION.replace(/\\./g, '-')] = 1;\n\n if (isMobileCordova()) {\n stats['framework.cordova'] = 1;\n } else if (isReactNative()) {\n stats['framework.reactnative'] = 1;\n }\n this.reportStats(stats);\n }\n\n private shouldReconnect_(): boolean {\n const online = OnlineMonitor.getInstance().currentlyOnline();\n return isEmpty(this.interruptReasons_) && online;\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Path } from '../util/Path';\n\nimport { Index } from './indexes/Index';\n\n/**\n * Node is an interface defining the common functionality for nodes in\n * a DataSnapshot.\n *\n * @interface\n */\nexport interface Node {\n /**\n * Whether this node is a leaf node.\n * @returns Whether this is a leaf node.\n */\n isLeafNode(): boolean;\n\n /**\n * Gets the priority of the node.\n * @returns The priority of the node.\n */\n getPriority(): Node;\n\n /**\n * Returns a duplicate node with the new priority.\n * @param newPriorityNode - New priority to set for the node.\n * @returns Node with new priority.\n */\n updatePriority(newPriorityNode: Node): Node;\n\n /**\n * Returns the specified immediate child, or null if it doesn't exist.\n * @param childName - The name of the child to retrieve.\n * @returns The retrieved child, or an empty node.\n */\n getImmediateChild(childName: string): Node;\n\n /**\n * Returns a child by path, or null if it doesn't exist.\n * @param path - The path of the child to retrieve.\n * @returns The retrieved child or an empty node.\n */\n getChild(path: Path): Node;\n\n /**\n * Returns the name of the child immediately prior to the specified childNode, or null.\n * @param childName - The name of the child to find the predecessor of.\n * @param childNode - The node to find the predecessor of.\n * @param index - The index to use to determine the predecessor\n * @returns The name of the predecessor child, or null if childNode is the first child.\n */\n getPredecessorChildName(\n childName: string,\n childNode: Node,\n index: Index\n ): string | null;\n\n /**\n * Returns a duplicate node, with the specified immediate child updated.\n * Any value in the node will be removed.\n * @param childName - The name of the child to update.\n * @param newChildNode - The new child node\n * @returns The updated node.\n */\n updateImmediateChild(childName: string, newChildNode: Node): Node;\n\n /**\n * Returns a duplicate node, with the specified child updated. Any value will\n * be removed.\n * @param path - The path of the child to update.\n * @param newChildNode - The new child node, which may be an empty node\n * @returns The updated node.\n */\n updateChild(path: Path, newChildNode: Node): Node;\n\n /**\n * True if the immediate child specified exists\n */\n hasChild(childName: string): boolean;\n\n /**\n * @returns True if this node has no value or children.\n */\n isEmpty(): boolean;\n\n /**\n * @returns The number of children of this node.\n */\n numChildren(): number;\n\n /**\n * Calls action for each child.\n * @param action - Action to be called for\n * each child. It's passed the child name and the child node.\n * @returns The first truthy value return by action, or the last falsey one\n */\n forEachChild(index: Index, action: (a: string, b: Node) => void): unknown;\n\n /**\n * @param exportFormat - True for export format (also wire protocol format).\n * @returns Value of this node as JSON.\n */\n val(exportFormat?: boolean): unknown;\n\n /**\n * @returns hash representing the node contents.\n */\n hash(): string;\n\n /**\n * @param other - Another node\n * @returns -1 for less than, 0 for equal, 1 for greater than other\n */\n compareTo(other: Node): number;\n\n /**\n * @returns Whether or not this snapshot equals other\n */\n equals(other: Node): boolean;\n\n /**\n * @returns This node, with the specified index now available\n */\n withIndex(indexDefinition: Index): Node;\n\n isIndexed(indexDefinition: Index): boolean;\n}\n\nexport class NamedNode {\n constructor(public name: string, public node: Node) {}\n\n static Wrap(name: string, node: Node) {\n return new NamedNode(name, node);\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Comparator } from '../../util/SortedMap';\nimport { MIN_NAME } from '../../util/util';\nimport { Node, NamedNode } from '../Node';\n\nexport abstract class Index {\n abstract compare(a: NamedNode, b: NamedNode): number;\n\n abstract isDefinedOn(node: Node): boolean;\n\n /**\n * @returns A standalone comparison function for\n * this index\n */\n getCompare(): Comparator {\n return this.compare.bind(this);\n }\n\n /**\n * Given a before and after value for a node, determine if the indexed value has changed. Even if they are different,\n * it's possible that the changes are isolated to parts of the snapshot that are not indexed.\n *\n *\n * @returns True if the portion of the snapshot being indexed changed between oldNode and newNode\n */\n indexedValueChanged(oldNode: Node, newNode: Node): boolean {\n const oldWrapped = new NamedNode(MIN_NAME, oldNode);\n const newWrapped = new NamedNode(MIN_NAME, newNode);\n return this.compare(oldWrapped, newWrapped) !== 0;\n }\n\n /**\n * @returns a node wrapper that will sort equal to or less than\n * any other node wrapper, using this index\n */\n minPost(): NamedNode {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (NamedNode as any).MIN;\n }\n\n /**\n * @returns a node wrapper that will sort greater than or equal to\n * any other node wrapper, using this index\n */\n abstract maxPost(): NamedNode;\n\n abstract makePost(indexValue: unknown, name: string): NamedNode;\n\n /**\n * @returns String representation for inclusion in a query spec\n */\n abstract toString(): string;\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert, assertionError } from '@firebase/util';\n\nimport { nameCompare, MAX_NAME } from '../../util/util';\nimport { ChildrenNode } from '../ChildrenNode';\nimport { Node, NamedNode } from '../Node';\n\nimport { Index } from './Index';\n\nlet __EMPTY_NODE: ChildrenNode;\n\nexport class KeyIndex extends Index {\n static get __EMPTY_NODE() {\n return __EMPTY_NODE;\n }\n\n static set __EMPTY_NODE(val) {\n __EMPTY_NODE = val;\n }\n compare(a: NamedNode, b: NamedNode): number {\n return nameCompare(a.name, b.name);\n }\n isDefinedOn(node: Node): boolean {\n // We could probably return true here (since every node has a key), but it's never called\n // so just leaving unimplemented for now.\n throw assertionError('KeyIndex.isDefinedOn not expected to be called.');\n }\n indexedValueChanged(oldNode: Node, newNode: Node): boolean {\n return false; // The key for a node never changes.\n }\n minPost() {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (NamedNode as any).MIN;\n }\n maxPost(): NamedNode {\n // TODO: This should really be created once and cached in a static property, but\n // NamedNode isn't defined yet, so I can't use it in a static. Bleh.\n return new NamedNode(MAX_NAME, __EMPTY_NODE);\n }\n\n makePost(indexValue: string, name: string): NamedNode {\n assert(\n typeof indexValue === 'string',\n 'KeyIndex indexValue must always be a string.'\n );\n // We just use empty node, but it'll never be compared, since our comparator only looks at name.\n return new NamedNode(indexValue, __EMPTY_NODE);\n }\n\n /**\n * @returns String representation for inclusion in a query spec\n */\n toString(): string {\n return '.key';\n }\n}\n\nexport const KEY_INDEX = new KeyIndex();\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Implementation of an immutable SortedMap using a Left-leaning\n * Red-Black Tree, adapted from the implementation in Mugs\n * (http://mads379.github.com/mugs/) by Mads Hartmann Jensen\n * (mads379\\@gmail.com).\n *\n * Original paper on Left-leaning Red-Black Trees:\n * http://www.cs.princeton.edu/~rs/talks/LLRB/LLRB.pdf\n *\n * Invariant 1: No red node has a red child\n * Invariant 2: Every leaf path has the same number of black nodes\n * Invariant 3: Only the left child can be red (left leaning)\n */\n\n// TODO: There are some improvements I'd like to make to improve memory / perf:\n// * Create two prototypes, LLRedNode and LLBlackNode, instead of storing a\n// color property in every node.\n// TODO: It would also be good (and possibly necessary) to create a base\n// interface for LLRBNode and LLRBEmptyNode.\n\nexport type Comparator = (key1: K, key2: K) => number;\n\n/**\n * An iterator over an LLRBNode.\n */\nexport class SortedMapIterator {\n private nodeStack_: Array | LLRBEmptyNode> = [];\n\n /**\n * @param node - Node to iterate.\n * @param isReverse_ - Whether or not to iterate in reverse\n */\n constructor(\n node: LLRBNode | LLRBEmptyNode,\n startKey: K | null,\n comparator: Comparator,\n private isReverse_: boolean,\n private resultGenerator_: ((k: K, v: V) => T) | null = null\n ) {\n let cmp = 1;\n while (!node.isEmpty()) {\n node = node as LLRBNode;\n cmp = startKey ? comparator(node.key, startKey) : 1;\n // flip the comparison if we're going in reverse\n if (isReverse_) {\n cmp *= -1;\n }\n\n if (cmp < 0) {\n // This node is less than our start key. ignore it\n if (this.isReverse_) {\n node = node.left;\n } else {\n node = node.right;\n }\n } else if (cmp === 0) {\n // This node is exactly equal to our start key. Push it on the stack, but stop iterating;\n this.nodeStack_.push(node);\n break;\n } else {\n // This node is greater than our start key, add it to the stack and move to the next one\n this.nodeStack_.push(node);\n if (this.isReverse_) {\n node = node.right;\n } else {\n node = node.left;\n }\n }\n }\n }\n\n getNext(): T {\n if (this.nodeStack_.length === 0) {\n return null;\n }\n\n let node = this.nodeStack_.pop();\n let result: T;\n if (this.resultGenerator_) {\n result = this.resultGenerator_(node.key, node.value);\n } else {\n result = { key: node.key, value: node.value } as unknown as T;\n }\n\n if (this.isReverse_) {\n node = node.left;\n while (!node.isEmpty()) {\n this.nodeStack_.push(node);\n node = node.right;\n }\n } else {\n node = node.right;\n while (!node.isEmpty()) {\n this.nodeStack_.push(node);\n node = node.left;\n }\n }\n\n return result;\n }\n\n hasNext(): boolean {\n return this.nodeStack_.length > 0;\n }\n\n peek(): T {\n if (this.nodeStack_.length === 0) {\n return null;\n }\n\n const node = this.nodeStack_[this.nodeStack_.length - 1];\n if (this.resultGenerator_) {\n return this.resultGenerator_(node.key, node.value);\n } else {\n return { key: node.key, value: node.value } as unknown as T;\n }\n }\n}\n\n/**\n * Represents a node in a Left-leaning Red-Black tree.\n */\nexport class LLRBNode {\n color: boolean;\n left: LLRBNode | LLRBEmptyNode;\n right: LLRBNode | LLRBEmptyNode;\n\n /**\n * @param key - Key associated with this node.\n * @param value - Value associated with this node.\n * @param color - Whether this node is red.\n * @param left - Left child.\n * @param right - Right child.\n */\n constructor(\n public key: K,\n public value: V,\n color: boolean | null,\n left?: LLRBNode | LLRBEmptyNode | null,\n right?: LLRBNode | LLRBEmptyNode | null\n ) {\n this.color = color != null ? color : LLRBNode.RED;\n this.left =\n left != null ? left : (SortedMap.EMPTY_NODE as LLRBEmptyNode);\n this.right =\n right != null ? right : (SortedMap.EMPTY_NODE as LLRBEmptyNode);\n }\n\n static RED = true;\n static BLACK = false;\n\n /**\n * Returns a copy of the current node, optionally replacing pieces of it.\n *\n * @param key - New key for the node, or null.\n * @param value - New value for the node, or null.\n * @param color - New color for the node, or null.\n * @param left - New left child for the node, or null.\n * @param right - New right child for the node, or null.\n * @returns The node copy.\n */\n copy(\n key: K | null,\n value: V | null,\n color: boolean | null,\n left: LLRBNode | LLRBEmptyNode | null,\n right: LLRBNode | LLRBEmptyNode | null\n ): LLRBNode {\n return new LLRBNode(\n key != null ? key : this.key,\n value != null ? value : this.value,\n color != null ? color : this.color,\n left != null ? left : this.left,\n right != null ? right : this.right\n );\n }\n\n /**\n * @returns The total number of nodes in the tree.\n */\n count(): number {\n return this.left.count() + 1 + this.right.count();\n }\n\n /**\n * @returns True if the tree is empty.\n */\n isEmpty(): boolean {\n return false;\n }\n\n /**\n * Traverses the tree in key order and calls the specified action function\n * for each node.\n *\n * @param action - Callback function to be called for each\n * node. If it returns true, traversal is aborted.\n * @returns The first truthy value returned by action, or the last falsey\n * value returned by action\n */\n inorderTraversal(action: (k: K, v: V) => unknown): boolean {\n return (\n this.left.inorderTraversal(action) ||\n !!action(this.key, this.value) ||\n this.right.inorderTraversal(action)\n );\n }\n\n /**\n * Traverses the tree in reverse key order and calls the specified action function\n * for each node.\n *\n * @param action - Callback function to be called for each\n * node. If it returns true, traversal is aborted.\n * @returns True if traversal was aborted.\n */\n reverseTraversal(action: (k: K, v: V) => void): boolean {\n return (\n this.right.reverseTraversal(action) ||\n action(this.key, this.value) ||\n this.left.reverseTraversal(action)\n );\n }\n\n /**\n * @returns The minimum node in the tree.\n */\n private min_(): LLRBNode {\n if (this.left.isEmpty()) {\n return this;\n } else {\n return (this.left as LLRBNode).min_();\n }\n }\n\n /**\n * @returns The maximum key in the tree.\n */\n minKey(): K {\n return this.min_().key;\n }\n\n /**\n * @returns The maximum key in the tree.\n */\n maxKey(): K {\n if (this.right.isEmpty()) {\n return this.key;\n } else {\n return this.right.maxKey();\n }\n }\n\n /**\n * @param key - Key to insert.\n * @param value - Value to insert.\n * @param comparator - Comparator.\n * @returns New tree, with the key/value added.\n */\n insert(key: K, value: V, comparator: Comparator): LLRBNode {\n let n: LLRBNode = this;\n const cmp = comparator(key, n.key);\n if (cmp < 0) {\n n = n.copy(null, null, null, n.left.insert(key, value, comparator), null);\n } else if (cmp === 0) {\n n = n.copy(null, value, null, null, null);\n } else {\n n = n.copy(\n null,\n null,\n null,\n null,\n n.right.insert(key, value, comparator)\n );\n }\n return n.fixUp_();\n }\n\n /**\n * @returns New tree, with the minimum key removed.\n */\n private removeMin_(): LLRBNode | LLRBEmptyNode {\n if (this.left.isEmpty()) {\n return SortedMap.EMPTY_NODE as LLRBEmptyNode;\n }\n let n: LLRBNode = this;\n if (!n.left.isRed_() && !n.left.left.isRed_()) {\n n = n.moveRedLeft_();\n }\n n = n.copy(null, null, null, (n.left as LLRBNode).removeMin_(), null);\n return n.fixUp_();\n }\n\n /**\n * @param key - The key of the item to remove.\n * @param comparator - Comparator.\n * @returns New tree, with the specified item removed.\n */\n remove(\n key: K,\n comparator: Comparator\n ): LLRBNode | LLRBEmptyNode {\n let n, smallest;\n n = this;\n if (comparator(key, n.key) < 0) {\n if (!n.left.isEmpty() && !n.left.isRed_() && !n.left.left.isRed_()) {\n n = n.moveRedLeft_();\n }\n n = n.copy(null, null, null, n.left.remove(key, comparator), null);\n } else {\n if (n.left.isRed_()) {\n n = n.rotateRight_();\n }\n if (!n.right.isEmpty() && !n.right.isRed_() && !n.right.left.isRed_()) {\n n = n.moveRedRight_();\n }\n if (comparator(key, n.key) === 0) {\n if (n.right.isEmpty()) {\n return SortedMap.EMPTY_NODE as LLRBEmptyNode;\n } else {\n smallest = (n.right as LLRBNode).min_();\n n = n.copy(\n smallest.key,\n smallest.value,\n null,\n null,\n (n.right as LLRBNode).removeMin_()\n );\n }\n }\n n = n.copy(null, null, null, null, n.right.remove(key, comparator));\n }\n return n.fixUp_();\n }\n\n /**\n * @returns Whether this is a RED node.\n */\n isRed_(): boolean {\n return this.color;\n }\n\n /**\n * @returns New tree after performing any needed rotations.\n */\n private fixUp_(): LLRBNode {\n let n: LLRBNode = this;\n if (n.right.isRed_() && !n.left.isRed_()) {\n n = n.rotateLeft_();\n }\n if (n.left.isRed_() && n.left.left.isRed_()) {\n n = n.rotateRight_();\n }\n if (n.left.isRed_() && n.right.isRed_()) {\n n = n.colorFlip_();\n }\n return n;\n }\n\n /**\n * @returns New tree, after moveRedLeft.\n */\n private moveRedLeft_(): LLRBNode {\n let n = this.colorFlip_();\n if (n.right.left.isRed_()) {\n n = n.copy(\n null,\n null,\n null,\n null,\n (n.right as LLRBNode).rotateRight_()\n );\n n = n.rotateLeft_();\n n = n.colorFlip_();\n }\n return n;\n }\n\n /**\n * @returns New tree, after moveRedRight.\n */\n private moveRedRight_(): LLRBNode {\n let n = this.colorFlip_();\n if (n.left.left.isRed_()) {\n n = n.rotateRight_();\n n = n.colorFlip_();\n }\n return n;\n }\n\n /**\n * @returns New tree, after rotateLeft.\n */\n private rotateLeft_(): LLRBNode {\n const nl = this.copy(null, null, LLRBNode.RED, null, this.right.left);\n return this.right.copy(null, null, this.color, nl, null) as LLRBNode;\n }\n\n /**\n * @returns New tree, after rotateRight.\n */\n private rotateRight_(): LLRBNode {\n const nr = this.copy(null, null, LLRBNode.RED, this.left.right, null);\n return this.left.copy(null, null, this.color, null, nr) as LLRBNode;\n }\n\n /**\n * @returns Newt ree, after colorFlip.\n */\n private colorFlip_(): LLRBNode {\n const left = this.left.copy(null, null, !this.left.color, null, null);\n const right = this.right.copy(null, null, !this.right.color, null, null);\n return this.copy(null, null, !this.color, left, right);\n }\n\n /**\n * For testing.\n *\n * @returns True if all is well.\n */\n private checkMaxDepth_(): boolean {\n const blackDepth = this.check_();\n return Math.pow(2.0, blackDepth) <= this.count() + 1;\n }\n\n check_(): number {\n if (this.isRed_() && this.left.isRed_()) {\n throw new Error(\n 'Red node has red child(' + this.key + ',' + this.value + ')'\n );\n }\n if (this.right.isRed_()) {\n throw new Error(\n 'Right child of (' + this.key + ',' + this.value + ') is red'\n );\n }\n const blackDepth = this.left.check_();\n if (blackDepth !== this.right.check_()) {\n throw new Error('Black depths differ');\n } else {\n return blackDepth + (this.isRed_() ? 0 : 1);\n }\n }\n}\n\n/**\n * Represents an empty node (a leaf node in the Red-Black Tree).\n */\nexport class LLRBEmptyNode {\n key: K;\n value: V;\n left: LLRBNode | LLRBEmptyNode;\n right: LLRBNode | LLRBEmptyNode;\n color: boolean;\n\n /**\n * Returns a copy of the current node.\n *\n * @returns The node copy.\n */\n copy(\n key: K | null,\n value: V | null,\n color: boolean | null,\n left: LLRBNode | LLRBEmptyNode | null,\n right: LLRBNode | LLRBEmptyNode | null\n ): LLRBEmptyNode {\n return this;\n }\n\n /**\n * Returns a copy of the tree, with the specified key/value added.\n *\n * @param key - Key to be added.\n * @param value - Value to be added.\n * @param comparator - Comparator.\n * @returns New tree, with item added.\n */\n insert(key: K, value: V, comparator: Comparator): LLRBNode {\n return new LLRBNode(key, value, null);\n }\n\n /**\n * Returns a copy of the tree, with the specified key removed.\n *\n * @param key - The key to remove.\n * @param comparator - Comparator.\n * @returns New tree, with item removed.\n */\n remove(key: K, comparator: Comparator): LLRBEmptyNode {\n return this;\n }\n\n /**\n * @returns The total number of nodes in the tree.\n */\n count(): number {\n return 0;\n }\n\n /**\n * @returns True if the tree is empty.\n */\n isEmpty(): boolean {\n return true;\n }\n\n /**\n * Traverses the tree in key order and calls the specified action function\n * for each node.\n *\n * @param action - Callback function to be called for each\n * node. If it returns true, traversal is aborted.\n * @returns True if traversal was aborted.\n */\n inorderTraversal(action: (k: K, v: V) => unknown): boolean {\n return false;\n }\n\n /**\n * Traverses the tree in reverse key order and calls the specified action function\n * for each node.\n *\n * @param action - Callback function to be called for each\n * node. If it returns true, traversal is aborted.\n * @returns True if traversal was aborted.\n */\n reverseTraversal(action: (k: K, v: V) => void): boolean {\n return false;\n }\n\n minKey(): null {\n return null;\n }\n\n maxKey(): null {\n return null;\n }\n\n check_(): number {\n return 0;\n }\n\n /**\n * @returns Whether this node is red.\n */\n isRed_() {\n return false;\n }\n}\n\n/**\n * An immutable sorted map implementation, based on a Left-leaning Red-Black\n * tree.\n */\nexport class SortedMap {\n /**\n * Always use the same empty node, to reduce memory.\n */\n static EMPTY_NODE = new LLRBEmptyNode();\n\n /**\n * @param comparator_ - Key comparator.\n * @param root_ - Optional root node for the map.\n */\n constructor(\n private comparator_: Comparator,\n private root_:\n | LLRBNode\n | LLRBEmptyNode = SortedMap.EMPTY_NODE as LLRBEmptyNode\n ) {}\n\n /**\n * Returns a copy of the map, with the specified key/value added or replaced.\n * (TODO: We should perhaps rename this method to 'put')\n *\n * @param key - Key to be added.\n * @param value - Value to be added.\n * @returns New map, with item added.\n */\n insert(key: K, value: V): SortedMap {\n return new SortedMap(\n this.comparator_,\n this.root_\n .insert(key, value, this.comparator_)\n .copy(null, null, LLRBNode.BLACK, null, null)\n );\n }\n\n /**\n * Returns a copy of the map, with the specified key removed.\n *\n * @param key - The key to remove.\n * @returns New map, with item removed.\n */\n remove(key: K): SortedMap {\n return new SortedMap(\n this.comparator_,\n this.root_\n .remove(key, this.comparator_)\n .copy(null, null, LLRBNode.BLACK, null, null)\n );\n }\n\n /**\n * Returns the value of the node with the given key, or null.\n *\n * @param key - The key to look up.\n * @returns The value of the node with the given key, or null if the\n * key doesn't exist.\n */\n get(key: K): V | null {\n let cmp;\n let node = this.root_;\n while (!node.isEmpty()) {\n cmp = this.comparator_(key, node.key);\n if (cmp === 0) {\n return node.value;\n } else if (cmp < 0) {\n node = node.left;\n } else if (cmp > 0) {\n node = node.right;\n }\n }\n return null;\n }\n\n /**\n * Returns the key of the item *before* the specified key, or null if key is the first item.\n * @param key - The key to find the predecessor of\n * @returns The predecessor key.\n */\n getPredecessorKey(key: K): K | null {\n let cmp,\n node = this.root_,\n rightParent = null;\n while (!node.isEmpty()) {\n cmp = this.comparator_(key, node.key);\n if (cmp === 0) {\n if (!node.left.isEmpty()) {\n node = node.left;\n while (!node.right.isEmpty()) {\n node = node.right;\n }\n return node.key;\n } else if (rightParent) {\n return rightParent.key;\n } else {\n return null; // first item.\n }\n } else if (cmp < 0) {\n node = node.left;\n } else if (cmp > 0) {\n rightParent = node;\n node = node.right;\n }\n }\n\n throw new Error(\n 'Attempted to find predecessor key for a nonexistent key. What gives?'\n );\n }\n\n /**\n * @returns True if the map is empty.\n */\n isEmpty(): boolean {\n return this.root_.isEmpty();\n }\n\n /**\n * @returns The total number of nodes in the map.\n */\n count(): number {\n return this.root_.count();\n }\n\n /**\n * @returns The minimum key in the map.\n */\n minKey(): K | null {\n return this.root_.minKey();\n }\n\n /**\n * @returns The maximum key in the map.\n */\n maxKey(): K | null {\n return this.root_.maxKey();\n }\n\n /**\n * Traverses the map in key order and calls the specified action function\n * for each key/value pair.\n *\n * @param action - Callback function to be called\n * for each key/value pair. If action returns true, traversal is aborted.\n * @returns The first truthy value returned by action, or the last falsey\n * value returned by action\n */\n inorderTraversal(action: (k: K, v: V) => unknown): boolean {\n return this.root_.inorderTraversal(action);\n }\n\n /**\n * Traverses the map in reverse key order and calls the specified action function\n * for each key/value pair.\n *\n * @param action - Callback function to be called\n * for each key/value pair. If action returns true, traversal is aborted.\n * @returns True if the traversal was aborted.\n */\n reverseTraversal(action: (k: K, v: V) => void): boolean {\n return this.root_.reverseTraversal(action);\n }\n\n /**\n * Returns an iterator over the SortedMap.\n * @returns The iterator.\n */\n getIterator(\n resultGenerator?: (k: K, v: V) => T\n ): SortedMapIterator {\n return new SortedMapIterator(\n this.root_,\n null,\n this.comparator_,\n false,\n resultGenerator\n );\n }\n\n getIteratorFrom(\n key: K,\n resultGenerator?: (k: K, v: V) => T\n ): SortedMapIterator {\n return new SortedMapIterator(\n this.root_,\n key,\n this.comparator_,\n false,\n resultGenerator\n );\n }\n\n getReverseIteratorFrom(\n key: K,\n resultGenerator?: (k: K, v: V) => T\n ): SortedMapIterator {\n return new SortedMapIterator(\n this.root_,\n key,\n this.comparator_,\n true,\n resultGenerator\n );\n }\n\n getReverseIterator(\n resultGenerator?: (k: K, v: V) => T\n ): SortedMapIterator {\n return new SortedMapIterator(\n this.root_,\n null,\n this.comparator_,\n true,\n resultGenerator\n );\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { nameCompare } from '../util/util';\n\nimport { NamedNode } from './Node';\n\nexport function NAME_ONLY_COMPARATOR(left: NamedNode, right: NamedNode) {\n return nameCompare(left.name, right.name);\n}\n\nexport function NAME_COMPARATOR(left: string, right: string) {\n return nameCompare(left, right);\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert, contains } from '@firebase/util';\n\nimport { Indexable } from '../util/misc';\nimport { doubleToIEEE754String } from '../util/util';\n\nimport { Node } from './Node';\n\nlet MAX_NODE: Node;\n\nexport function setMaxNode(val: Node) {\n MAX_NODE = val;\n}\n\nexport const priorityHashText = function (priority: string | number): string {\n if (typeof priority === 'number') {\n return 'number:' + doubleToIEEE754String(priority);\n } else {\n return 'string:' + priority;\n }\n};\n\n/**\n * Validates that a priority snapshot Node is valid.\n */\nexport const validatePriorityNode = function (priorityNode: Node) {\n if (priorityNode.isLeafNode()) {\n const val = priorityNode.val();\n assert(\n typeof val === 'string' ||\n typeof val === 'number' ||\n (typeof val === 'object' && contains(val as Indexable, '.sv')),\n 'Priority must be a string or number.'\n );\n } else {\n assert(\n priorityNode === MAX_NODE || priorityNode.isEmpty(),\n 'priority of unexpected type.'\n );\n }\n // Don't call getPriority() on MAX_NODE to avoid hitting assertion.\n assert(\n priorityNode === MAX_NODE || priorityNode.getPriority().isEmpty(),\n \"Priority nodes can't have a priority of their own.\"\n );\n};\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert } from '@firebase/util';\n\nimport { Indexable } from '../util/misc';\nimport {\n Path,\n pathGetFront,\n pathGetLength,\n pathIsEmpty,\n pathPopFront\n} from '../util/Path';\nimport { doubleToIEEE754String, sha1 } from '../util/util';\n\nimport { ChildrenNodeConstructor } from './ChildrenNode';\nimport { Index } from './indexes/Index';\nimport { Node } from './Node';\nimport { priorityHashText, validatePriorityNode } from './snap';\n\nlet __childrenNodeConstructor: ChildrenNodeConstructor;\n\n/**\n * LeafNode is a class for storing leaf nodes in a DataSnapshot. It\n * implements Node and stores the value of the node (a string,\n * number, or boolean) accessible via getValue().\n */\nexport class LeafNode implements Node {\n static set __childrenNodeConstructor(val: ChildrenNodeConstructor) {\n __childrenNodeConstructor = val;\n }\n\n static get __childrenNodeConstructor() {\n return __childrenNodeConstructor;\n }\n\n /**\n * The sort order for comparing leaf nodes of different types. If two leaf nodes have\n * the same type, the comparison falls back to their value\n */\n static VALUE_TYPE_ORDER = ['object', 'boolean', 'number', 'string'];\n\n private lazyHash_: string | null = null;\n\n /**\n * @param value_ - The value to store in this leaf node. The object type is\n * possible in the event of a deferred value\n * @param priorityNode_ - The priority of this node.\n */\n constructor(\n private readonly value_: string | number | boolean | Indexable,\n private priorityNode_: Node = LeafNode.__childrenNodeConstructor.EMPTY_NODE\n ) {\n assert(\n this.value_ !== undefined && this.value_ !== null,\n \"LeafNode shouldn't be created with null/undefined value.\"\n );\n\n validatePriorityNode(this.priorityNode_);\n }\n\n /** @inheritDoc */\n isLeafNode(): boolean {\n return true;\n }\n\n /** @inheritDoc */\n getPriority(): Node {\n return this.priorityNode_;\n }\n\n /** @inheritDoc */\n updatePriority(newPriorityNode: Node): Node {\n return new LeafNode(this.value_, newPriorityNode);\n }\n\n /** @inheritDoc */\n getImmediateChild(childName: string): Node {\n // Hack to treat priority as a regular child\n if (childName === '.priority') {\n return this.priorityNode_;\n } else {\n return LeafNode.__childrenNodeConstructor.EMPTY_NODE;\n }\n }\n\n /** @inheritDoc */\n getChild(path: Path): Node {\n if (pathIsEmpty(path)) {\n return this;\n } else if (pathGetFront(path) === '.priority') {\n return this.priorityNode_;\n } else {\n return LeafNode.__childrenNodeConstructor.EMPTY_NODE;\n }\n }\n hasChild(): boolean {\n return false;\n }\n\n /** @inheritDoc */\n getPredecessorChildName(childName: string, childNode: Node): null {\n return null;\n }\n\n /** @inheritDoc */\n updateImmediateChild(childName: string, newChildNode: Node): Node {\n if (childName === '.priority') {\n return this.updatePriority(newChildNode);\n } else if (newChildNode.isEmpty() && childName !== '.priority') {\n return this;\n } else {\n return LeafNode.__childrenNodeConstructor.EMPTY_NODE.updateImmediateChild(\n childName,\n newChildNode\n ).updatePriority(this.priorityNode_);\n }\n }\n\n /** @inheritDoc */\n updateChild(path: Path, newChildNode: Node): Node {\n const front = pathGetFront(path);\n if (front === null) {\n return newChildNode;\n } else if (newChildNode.isEmpty() && front !== '.priority') {\n return this;\n } else {\n assert(\n front !== '.priority' || pathGetLength(path) === 1,\n '.priority must be the last token in a path'\n );\n\n return this.updateImmediateChild(\n front,\n LeafNode.__childrenNodeConstructor.EMPTY_NODE.updateChild(\n pathPopFront(path),\n newChildNode\n )\n );\n }\n }\n\n /** @inheritDoc */\n isEmpty(): boolean {\n return false;\n }\n\n /** @inheritDoc */\n numChildren(): number {\n return 0;\n }\n\n /** @inheritDoc */\n forEachChild(index: Index, action: (s: string, n: Node) => void): boolean {\n return false;\n }\n val(exportFormat?: boolean): {} {\n if (exportFormat && !this.getPriority().isEmpty()) {\n return {\n '.value': this.getValue(),\n '.priority': this.getPriority().val()\n };\n } else {\n return this.getValue();\n }\n }\n\n /** @inheritDoc */\n hash(): string {\n if (this.lazyHash_ === null) {\n let toHash = '';\n if (!this.priorityNode_.isEmpty()) {\n toHash +=\n 'priority:' +\n priorityHashText(this.priorityNode_.val() as number | string) +\n ':';\n }\n\n const type = typeof this.value_;\n toHash += type + ':';\n if (type === 'number') {\n toHash += doubleToIEEE754String(this.value_ as number);\n } else {\n toHash += this.value_;\n }\n this.lazyHash_ = sha1(toHash);\n }\n return this.lazyHash_;\n }\n\n /**\n * Returns the value of the leaf node.\n * @returns The value of the node.\n */\n getValue(): Indexable | string | number | boolean {\n return this.value_;\n }\n compareTo(other: Node): number {\n if (other === LeafNode.__childrenNodeConstructor.EMPTY_NODE) {\n return 1;\n } else if (other instanceof LeafNode.__childrenNodeConstructor) {\n return -1;\n } else {\n assert(other.isLeafNode(), 'Unknown node type');\n return this.compareToLeafNode_(other as LeafNode);\n }\n }\n\n /**\n * Comparison specifically for two leaf nodes\n */\n private compareToLeafNode_(otherLeaf: LeafNode): number {\n const otherLeafType = typeof otherLeaf.value_;\n const thisLeafType = typeof this.value_;\n const otherIndex = LeafNode.VALUE_TYPE_ORDER.indexOf(otherLeafType);\n const thisIndex = LeafNode.VALUE_TYPE_ORDER.indexOf(thisLeafType);\n assert(otherIndex >= 0, 'Unknown leaf type: ' + otherLeafType);\n assert(thisIndex >= 0, 'Unknown leaf type: ' + thisLeafType);\n if (otherIndex === thisIndex) {\n // Same type, compare values\n if (thisLeafType === 'object') {\n // Deferred value nodes are all equal, but we should also never get to this point...\n return 0;\n } else {\n // Note that this works because true > false, all others are number or string comparisons\n if (this.value_ < otherLeaf.value_) {\n return -1;\n } else if (this.value_ === otherLeaf.value_) {\n return 0;\n } else {\n return 1;\n }\n }\n } else {\n return thisIndex - otherIndex;\n }\n }\n withIndex(): Node {\n return this;\n }\n isIndexed(): boolean {\n return true;\n }\n equals(other: Node): boolean {\n if (other === this) {\n return true;\n } else if (other.isLeafNode()) {\n const otherLeaf = other as LeafNode;\n return (\n this.value_ === otherLeaf.value_ &&\n this.priorityNode_.equals(otherLeaf.priorityNode_)\n );\n } else {\n return false;\n }\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { nameCompare, MAX_NAME } from '../../util/util';\nimport { LeafNode } from '../LeafNode';\nimport { NamedNode, Node } from '../Node';\n\nimport { Index } from './Index';\n\nlet nodeFromJSON: (a: unknown) => Node;\nlet MAX_NODE: Node;\n\nexport function setNodeFromJSON(val: (a: unknown) => Node) {\n nodeFromJSON = val;\n}\n\nexport function setMaxNode(val: Node) {\n MAX_NODE = val;\n}\n\nexport class PriorityIndex extends Index {\n compare(a: NamedNode, b: NamedNode): number {\n const aPriority = a.node.getPriority();\n const bPriority = b.node.getPriority();\n const indexCmp = aPriority.compareTo(bPriority);\n if (indexCmp === 0) {\n return nameCompare(a.name, b.name);\n } else {\n return indexCmp;\n }\n }\n isDefinedOn(node: Node): boolean {\n return !node.getPriority().isEmpty();\n }\n indexedValueChanged(oldNode: Node, newNode: Node): boolean {\n return !oldNode.getPriority().equals(newNode.getPriority());\n }\n minPost(): NamedNode {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (NamedNode as any).MIN;\n }\n maxPost(): NamedNode {\n return new NamedNode(MAX_NAME, new LeafNode('[PRIORITY-POST]', MAX_NODE));\n }\n\n makePost(indexValue: unknown, name: string): NamedNode {\n const priorityNode = nodeFromJSON(indexValue);\n return new NamedNode(name, new LeafNode('[PRIORITY-POST]', priorityNode));\n }\n\n /**\n * @returns String representation for inclusion in a query spec\n */\n toString(): string {\n return '.priority';\n }\n}\n\nexport const PRIORITY_INDEX = new PriorityIndex();\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { LLRBNode, SortedMap } from '../util/SortedMap';\n\nimport { NamedNode } from './Node';\n\nconst LOG_2 = Math.log(2);\n\nclass Base12Num {\n count: number;\n private current_: number;\n private bits_: number;\n\n constructor(length: number) {\n const logBase2 = (num: number) =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n parseInt((Math.log(num) / LOG_2) as any, 10);\n const bitMask = (bits: number) => parseInt(Array(bits + 1).join('1'), 2);\n this.count = logBase2(length + 1);\n this.current_ = this.count - 1;\n const mask = bitMask(this.count);\n this.bits_ = (length + 1) & mask;\n }\n\n nextBitIsOne(): boolean {\n //noinspection JSBitwiseOperatorUsage\n const result = !(this.bits_ & (0x1 << this.current_));\n this.current_--;\n return result;\n }\n}\n\n/**\n * Takes a list of child nodes and constructs a SortedSet using the given comparison\n * function\n *\n * Uses the algorithm described in the paper linked here:\n * http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.46.1458\n *\n * @param childList - Unsorted list of children\n * @param cmp - The comparison method to be used\n * @param keyFn - An optional function to extract K from a node wrapper, if K's\n * type is not NamedNode\n * @param mapSortFn - An optional override for comparator used by the generated sorted map\n */\nexport const buildChildSet = function (\n childList: NamedNode[],\n cmp: (a: NamedNode, b: NamedNode) => number,\n keyFn?: (a: NamedNode) => K,\n mapSortFn?: (a: K, b: K) => number\n): SortedMap {\n childList.sort(cmp);\n\n const buildBalancedTree = function (\n low: number,\n high: number\n ): LLRBNode | null {\n const length = high - low;\n let namedNode: NamedNode;\n let key: K;\n if (length === 0) {\n return null;\n } else if (length === 1) {\n namedNode = childList[low];\n key = keyFn ? keyFn(namedNode) : (namedNode as unknown as K);\n return new LLRBNode(\n key,\n namedNode.node as unknown as V,\n LLRBNode.BLACK,\n null,\n null\n );\n } else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const middle = parseInt((length / 2) as any, 10) + low;\n const left = buildBalancedTree(low, middle);\n const right = buildBalancedTree(middle + 1, high);\n namedNode = childList[middle];\n key = keyFn ? keyFn(namedNode) : (namedNode as unknown as K);\n return new LLRBNode(\n key,\n namedNode.node as unknown as V,\n LLRBNode.BLACK,\n left,\n right\n );\n }\n };\n\n const buildFrom12Array = function (base12: Base12Num): LLRBNode {\n let node: LLRBNode = null;\n let root = null;\n let index = childList.length;\n\n const buildPennant = function (chunkSize: number, color: boolean) {\n const low = index - chunkSize;\n const high = index;\n index -= chunkSize;\n const childTree = buildBalancedTree(low + 1, high);\n const namedNode = childList[low];\n const key: K = keyFn ? keyFn(namedNode) : (namedNode as unknown as K);\n attachPennant(\n new LLRBNode(\n key,\n namedNode.node as unknown as V,\n color,\n null,\n childTree\n )\n );\n };\n\n const attachPennant = function (pennant: LLRBNode) {\n if (node) {\n node.left = pennant;\n node = pennant;\n } else {\n root = pennant;\n node = pennant;\n }\n };\n\n for (let i = 0; i < base12.count; ++i) {\n const isOne = base12.nextBitIsOne();\n // The number of nodes taken in each slice is 2^(arr.length - (i + 1))\n const chunkSize = Math.pow(2, base12.count - (i + 1));\n if (isOne) {\n buildPennant(chunkSize, LLRBNode.BLACK);\n } else {\n // current == 2\n buildPennant(chunkSize, LLRBNode.BLACK);\n buildPennant(chunkSize, LLRBNode.RED);\n }\n }\n return root;\n };\n\n const base12 = new Base12Num(childList.length);\n const root = buildFrom12Array(base12);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return new SortedMap(mapSortFn || (cmp as any), root);\n};\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert, contains, map, safeGet } from '@firebase/util';\n\nimport { SortedMap } from '../util/SortedMap';\n\nimport { buildChildSet } from './childSet';\nimport { Index } from './indexes/Index';\nimport { KEY_INDEX } from './indexes/KeyIndex';\nimport { PRIORITY_INDEX } from './indexes/PriorityIndex';\nimport { NamedNode, Node } from './Node';\n\nlet _defaultIndexMap: IndexMap;\n\nconst fallbackObject = {};\n\nexport class IndexMap {\n /**\n * The default IndexMap for nodes without a priority\n */\n static get Default(): IndexMap {\n assert(\n fallbackObject && PRIORITY_INDEX,\n 'ChildrenNode.ts has not been loaded'\n );\n _defaultIndexMap =\n _defaultIndexMap ||\n new IndexMap(\n { '.priority': fallbackObject },\n { '.priority': PRIORITY_INDEX }\n );\n return _defaultIndexMap;\n }\n\n constructor(\n private indexes_: {\n [k: string]: SortedMap | /*FallbackType*/ object;\n },\n private indexSet_: { [k: string]: Index }\n ) {}\n\n get(indexKey: string): SortedMap | null {\n const sortedMap = safeGet(this.indexes_, indexKey);\n if (!sortedMap) {\n throw new Error('No index defined for ' + indexKey);\n }\n\n if (sortedMap instanceof SortedMap) {\n return sortedMap;\n } else {\n // The index exists, but it falls back to just name comparison. Return null so that the calling code uses the\n // regular child map\n return null;\n }\n }\n\n hasIndex(indexDefinition: Index): boolean {\n return contains(this.indexSet_, indexDefinition.toString());\n }\n\n addIndex(\n indexDefinition: Index,\n existingChildren: SortedMap\n ): IndexMap {\n assert(\n indexDefinition !== KEY_INDEX,\n \"KeyIndex always exists and isn't meant to be added to the IndexMap.\"\n );\n const childList = [];\n let sawIndexedValue = false;\n const iter = existingChildren.getIterator(NamedNode.Wrap);\n let next = iter.getNext();\n while (next) {\n sawIndexedValue =\n sawIndexedValue || indexDefinition.isDefinedOn(next.node);\n childList.push(next);\n next = iter.getNext();\n }\n let newIndex;\n if (sawIndexedValue) {\n newIndex = buildChildSet(childList, indexDefinition.getCompare());\n } else {\n newIndex = fallbackObject;\n }\n const indexName = indexDefinition.toString();\n const newIndexSet = { ...this.indexSet_ };\n newIndexSet[indexName] = indexDefinition;\n const newIndexes = { ...this.indexes_ };\n newIndexes[indexName] = newIndex;\n return new IndexMap(newIndexes, newIndexSet);\n }\n\n /**\n * Ensure that this node is properly tracked in any indexes that we're maintaining\n */\n addToIndexes(\n namedNode: NamedNode,\n existingChildren: SortedMap\n ): IndexMap {\n const newIndexes = map(\n this.indexes_,\n (indexedChildren: SortedMap, indexName: string) => {\n const index = safeGet(this.indexSet_, indexName);\n assert(index, 'Missing index implementation for ' + indexName);\n if (indexedChildren === fallbackObject) {\n // Check to see if we need to index everything\n if (index.isDefinedOn(namedNode.node)) {\n // We need to build this index\n const childList = [];\n const iter = existingChildren.getIterator(NamedNode.Wrap);\n let next = iter.getNext();\n while (next) {\n if (next.name !== namedNode.name) {\n childList.push(next);\n }\n next = iter.getNext();\n }\n childList.push(namedNode);\n return buildChildSet(childList, index.getCompare());\n } else {\n // No change, this remains a fallback\n return fallbackObject;\n }\n } else {\n const existingSnap = existingChildren.get(namedNode.name);\n let newChildren = indexedChildren;\n if (existingSnap) {\n newChildren = newChildren.remove(\n new NamedNode(namedNode.name, existingSnap)\n );\n }\n return newChildren.insert(namedNode, namedNode.node);\n }\n }\n );\n return new IndexMap(newIndexes, this.indexSet_);\n }\n\n /**\n * Create a new IndexMap instance with the given value removed\n */\n removeFromIndexes(\n namedNode: NamedNode,\n existingChildren: SortedMap\n ): IndexMap {\n const newIndexes = map(\n this.indexes_,\n (indexedChildren: SortedMap) => {\n if (indexedChildren === fallbackObject) {\n // This is the fallback. Just return it, nothing to do in this case\n return indexedChildren;\n } else {\n const existingSnap = existingChildren.get(namedNode.name);\n if (existingSnap) {\n return indexedChildren.remove(\n new NamedNode(namedNode.name, existingSnap)\n );\n } else {\n // No record of this child\n return indexedChildren;\n }\n }\n }\n );\n return new IndexMap(newIndexes, this.indexSet_);\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert } from '@firebase/util';\n\nimport { Path, pathGetFront, pathGetLength, pathPopFront } from '../util/Path';\nimport { SortedMap, SortedMapIterator } from '../util/SortedMap';\nimport { MAX_NAME, MIN_NAME, sha1 } from '../util/util';\n\nimport { NAME_COMPARATOR } from './comparators';\nimport { Index } from './indexes/Index';\nimport { KEY_INDEX, KeyIndex } from './indexes/KeyIndex';\nimport {\n PRIORITY_INDEX,\n setMaxNode as setPriorityMaxNode\n} from './indexes/PriorityIndex';\nimport { IndexMap } from './IndexMap';\nimport { LeafNode } from './LeafNode';\nimport { NamedNode, Node } from './Node';\nimport { priorityHashText, setMaxNode, validatePriorityNode } from './snap';\n\nexport interface ChildrenNodeConstructor {\n new (\n children_: SortedMap,\n priorityNode_: Node | null,\n indexMap_: IndexMap\n ): ChildrenNode;\n EMPTY_NODE: ChildrenNode;\n}\n\n// TODO: For memory savings, don't store priorityNode_ if it's empty.\n\nlet EMPTY_NODE: ChildrenNode;\n\n/**\n * ChildrenNode is a class for storing internal nodes in a DataSnapshot\n * (i.e. nodes with children). It implements Node and stores the\n * list of children in the children property, sorted by child name.\n */\nexport class ChildrenNode implements Node {\n private lazyHash_: string | null = null;\n\n static get EMPTY_NODE(): ChildrenNode {\n return (\n EMPTY_NODE ||\n (EMPTY_NODE = new ChildrenNode(\n new SortedMap(NAME_COMPARATOR),\n null,\n IndexMap.Default\n ))\n );\n }\n\n /**\n * @param children_ - List of children of this node..\n * @param priorityNode_ - The priority of this node (as a snapshot node).\n */\n constructor(\n private readonly children_: SortedMap,\n private readonly priorityNode_: Node | null,\n private indexMap_: IndexMap\n ) {\n /**\n * Note: The only reason we allow null priority is for EMPTY_NODE, since we can't use\n * EMPTY_NODE as the priority of EMPTY_NODE. We might want to consider making EMPTY_NODE its own\n * class instead of an empty ChildrenNode.\n */\n if (this.priorityNode_) {\n validatePriorityNode(this.priorityNode_);\n }\n\n if (this.children_.isEmpty()) {\n assert(\n !this.priorityNode_ || this.priorityNode_.isEmpty(),\n 'An empty node cannot have a priority'\n );\n }\n }\n\n /** @inheritDoc */\n isLeafNode(): boolean {\n return false;\n }\n\n /** @inheritDoc */\n getPriority(): Node {\n return this.priorityNode_ || EMPTY_NODE;\n }\n\n /** @inheritDoc */\n updatePriority(newPriorityNode: Node): Node {\n if (this.children_.isEmpty()) {\n // Don't allow priorities on empty nodes\n return this;\n } else {\n return new ChildrenNode(this.children_, newPriorityNode, this.indexMap_);\n }\n }\n\n /** @inheritDoc */\n getImmediateChild(childName: string): Node {\n // Hack to treat priority as a regular child\n if (childName === '.priority') {\n return this.getPriority();\n } else {\n const child = this.children_.get(childName);\n return child === null ? EMPTY_NODE : child;\n }\n }\n\n /** @inheritDoc */\n getChild(path: Path): Node {\n const front = pathGetFront(path);\n if (front === null) {\n return this;\n }\n\n return this.getImmediateChild(front).getChild(pathPopFront(path));\n }\n\n /** @inheritDoc */\n hasChild(childName: string): boolean {\n return this.children_.get(childName) !== null;\n }\n\n /** @inheritDoc */\n updateImmediateChild(childName: string, newChildNode: Node): Node {\n assert(newChildNode, 'We should always be passing snapshot nodes');\n if (childName === '.priority') {\n return this.updatePriority(newChildNode);\n } else {\n const namedNode = new NamedNode(childName, newChildNode);\n let newChildren, newIndexMap;\n if (newChildNode.isEmpty()) {\n newChildren = this.children_.remove(childName);\n newIndexMap = this.indexMap_.removeFromIndexes(\n namedNode,\n this.children_\n );\n } else {\n newChildren = this.children_.insert(childName, newChildNode);\n newIndexMap = this.indexMap_.addToIndexes(namedNode, this.children_);\n }\n\n const newPriority = newChildren.isEmpty()\n ? EMPTY_NODE\n : this.priorityNode_;\n return new ChildrenNode(newChildren, newPriority, newIndexMap);\n }\n }\n\n /** @inheritDoc */\n updateChild(path: Path, newChildNode: Node): Node {\n const front = pathGetFront(path);\n if (front === null) {\n return newChildNode;\n } else {\n assert(\n pathGetFront(path) !== '.priority' || pathGetLength(path) === 1,\n '.priority must be the last token in a path'\n );\n const newImmediateChild = this.getImmediateChild(front).updateChild(\n pathPopFront(path),\n newChildNode\n );\n return this.updateImmediateChild(front, newImmediateChild);\n }\n }\n\n /** @inheritDoc */\n isEmpty(): boolean {\n return this.children_.isEmpty();\n }\n\n /** @inheritDoc */\n numChildren(): number {\n return this.children_.count();\n }\n\n private static INTEGER_REGEXP_ = /^(0|[1-9]\\d*)$/;\n\n /** @inheritDoc */\n val(exportFormat?: boolean): object {\n if (this.isEmpty()) {\n return null;\n }\n\n const obj: { [k: string]: unknown } = {};\n let numKeys = 0,\n maxKey = 0,\n allIntegerKeys = true;\n this.forEachChild(PRIORITY_INDEX, (key: string, childNode: Node) => {\n obj[key] = childNode.val(exportFormat);\n\n numKeys++;\n if (allIntegerKeys && ChildrenNode.INTEGER_REGEXP_.test(key)) {\n maxKey = Math.max(maxKey, Number(key));\n } else {\n allIntegerKeys = false;\n }\n });\n\n if (!exportFormat && allIntegerKeys && maxKey < 2 * numKeys) {\n // convert to array.\n const array: unknown[] = [];\n // eslint-disable-next-line guard-for-in\n for (const key in obj) {\n array[key as unknown as number] = obj[key];\n }\n\n return array;\n } else {\n if (exportFormat && !this.getPriority().isEmpty()) {\n obj['.priority'] = this.getPriority().val();\n }\n return obj;\n }\n }\n\n /** @inheritDoc */\n hash(): string {\n if (this.lazyHash_ === null) {\n let toHash = '';\n if (!this.getPriority().isEmpty()) {\n toHash +=\n 'priority:' +\n priorityHashText(this.getPriority().val() as string | number) +\n ':';\n }\n\n this.forEachChild(PRIORITY_INDEX, (key, childNode) => {\n const childHash = childNode.hash();\n if (childHash !== '') {\n toHash += ':' + key + ':' + childHash;\n }\n });\n\n this.lazyHash_ = toHash === '' ? '' : sha1(toHash);\n }\n return this.lazyHash_;\n }\n\n /** @inheritDoc */\n getPredecessorChildName(\n childName: string,\n childNode: Node,\n index: Index\n ): string {\n const idx = this.resolveIndex_(index);\n if (idx) {\n const predecessor = idx.getPredecessorKey(\n new NamedNode(childName, childNode)\n );\n return predecessor ? predecessor.name : null;\n } else {\n return this.children_.getPredecessorKey(childName);\n }\n }\n\n getFirstChildName(indexDefinition: Index): string | null {\n const idx = this.resolveIndex_(indexDefinition);\n if (idx) {\n const minKey = idx.minKey();\n return minKey && minKey.name;\n } else {\n return this.children_.minKey();\n }\n }\n\n getFirstChild(indexDefinition: Index): NamedNode | null {\n const minKey = this.getFirstChildName(indexDefinition);\n if (minKey) {\n return new NamedNode(minKey, this.children_.get(minKey));\n } else {\n return null;\n }\n }\n\n /**\n * Given an index, return the key name of the largest value we have, according to that index\n */\n getLastChildName(indexDefinition: Index): string | null {\n const idx = this.resolveIndex_(indexDefinition);\n if (idx) {\n const maxKey = idx.maxKey();\n return maxKey && maxKey.name;\n } else {\n return this.children_.maxKey();\n }\n }\n\n getLastChild(indexDefinition: Index): NamedNode | null {\n const maxKey = this.getLastChildName(indexDefinition);\n if (maxKey) {\n return new NamedNode(maxKey, this.children_.get(maxKey));\n } else {\n return null;\n }\n }\n forEachChild(\n index: Index,\n action: (key: string, node: Node) => boolean | void\n ): boolean {\n const idx = this.resolveIndex_(index);\n if (idx) {\n return idx.inorderTraversal(wrappedNode => {\n return action(wrappedNode.name, wrappedNode.node);\n });\n } else {\n return this.children_.inorderTraversal(action);\n }\n }\n\n getIterator(\n indexDefinition: Index\n ): SortedMapIterator {\n return this.getIteratorFrom(indexDefinition.minPost(), indexDefinition);\n }\n\n getIteratorFrom(\n startPost: NamedNode,\n indexDefinition: Index\n ): SortedMapIterator {\n const idx = this.resolveIndex_(indexDefinition);\n if (idx) {\n return idx.getIteratorFrom(startPost, key => key);\n } else {\n const iterator = this.children_.getIteratorFrom(\n startPost.name,\n NamedNode.Wrap\n );\n let next = iterator.peek();\n while (next != null && indexDefinition.compare(next, startPost) < 0) {\n iterator.getNext();\n next = iterator.peek();\n }\n return iterator;\n }\n }\n\n getReverseIterator(\n indexDefinition: Index\n ): SortedMapIterator {\n return this.getReverseIteratorFrom(\n indexDefinition.maxPost(),\n indexDefinition\n );\n }\n\n getReverseIteratorFrom(\n endPost: NamedNode,\n indexDefinition: Index\n ): SortedMapIterator {\n const idx = this.resolveIndex_(indexDefinition);\n if (idx) {\n return idx.getReverseIteratorFrom(endPost, key => {\n return key;\n });\n } else {\n const iterator = this.children_.getReverseIteratorFrom(\n endPost.name,\n NamedNode.Wrap\n );\n let next = iterator.peek();\n while (next != null && indexDefinition.compare(next, endPost) > 0) {\n iterator.getNext();\n next = iterator.peek();\n }\n return iterator;\n }\n }\n compareTo(other: ChildrenNode): number {\n if (this.isEmpty()) {\n if (other.isEmpty()) {\n return 0;\n } else {\n return -1;\n }\n } else if (other.isLeafNode() || other.isEmpty()) {\n return 1;\n } else if (other === MAX_NODE) {\n return -1;\n } else {\n // Must be another node with children.\n return 0;\n }\n }\n withIndex(indexDefinition: Index): Node {\n if (\n indexDefinition === KEY_INDEX ||\n this.indexMap_.hasIndex(indexDefinition)\n ) {\n return this;\n } else {\n const newIndexMap = this.indexMap_.addIndex(\n indexDefinition,\n this.children_\n );\n return new ChildrenNode(this.children_, this.priorityNode_, newIndexMap);\n }\n }\n isIndexed(index: Index): boolean {\n return index === KEY_INDEX || this.indexMap_.hasIndex(index);\n }\n equals(other: Node): boolean {\n if (other === this) {\n return true;\n } else if (other.isLeafNode()) {\n return false;\n } else {\n const otherChildrenNode = other as ChildrenNode;\n if (!this.getPriority().equals(otherChildrenNode.getPriority())) {\n return false;\n } else if (\n this.children_.count() === otherChildrenNode.children_.count()\n ) {\n const thisIter = this.getIterator(PRIORITY_INDEX);\n const otherIter = otherChildrenNode.getIterator(PRIORITY_INDEX);\n let thisCurrent = thisIter.getNext();\n let otherCurrent = otherIter.getNext();\n while (thisCurrent && otherCurrent) {\n if (\n thisCurrent.name !== otherCurrent.name ||\n !thisCurrent.node.equals(otherCurrent.node)\n ) {\n return false;\n }\n thisCurrent = thisIter.getNext();\n otherCurrent = otherIter.getNext();\n }\n return thisCurrent === null && otherCurrent === null;\n } else {\n return false;\n }\n }\n }\n\n /**\n * Returns a SortedMap ordered by index, or null if the default (by-key) ordering can be used\n * instead.\n *\n */\n private resolveIndex_(\n indexDefinition: Index\n ): SortedMap | null {\n if (indexDefinition === KEY_INDEX) {\n return null;\n } else {\n return this.indexMap_.get(indexDefinition.toString());\n }\n }\n}\n\nexport class MaxNode extends ChildrenNode {\n constructor() {\n super(\n new SortedMap(NAME_COMPARATOR),\n ChildrenNode.EMPTY_NODE,\n IndexMap.Default\n );\n }\n\n compareTo(other: Node): number {\n if (other === this) {\n return 0;\n } else {\n return 1;\n }\n }\n\n equals(other: Node): boolean {\n // Not that we every compare it, but MAX_NODE is only ever equal to itself\n return other === this;\n }\n\n getPriority(): MaxNode {\n return this;\n }\n\n getImmediateChild(childName: string): ChildrenNode {\n return ChildrenNode.EMPTY_NODE;\n }\n\n isEmpty(): boolean {\n return false;\n }\n}\n\n/**\n * Marker that will sort higher than any other snapshot.\n */\nexport const MAX_NODE = new MaxNode();\n\n/**\n * Document NamedNode extensions\n */\ndeclare module './Node' {\n interface NamedNode {\n MIN: NamedNode;\n MAX: NamedNode;\n }\n}\n\nObject.defineProperties(NamedNode, {\n MIN: {\n value: new NamedNode(MIN_NAME, ChildrenNode.EMPTY_NODE)\n },\n MAX: {\n value: new NamedNode(MAX_NAME, MAX_NODE)\n }\n});\n\n/**\n * Reference Extensions\n */\nKeyIndex.__EMPTY_NODE = ChildrenNode.EMPTY_NODE;\nLeafNode.__childrenNodeConstructor = ChildrenNode;\nsetMaxNode(MAX_NODE);\nsetPriorityMaxNode(MAX_NODE);\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { contains, assert } from '@firebase/util';\n\nimport { Indexable } from '../util/misc';\nimport { SortedMap } from '../util/SortedMap';\nimport { each } from '../util/util';\n\nimport { ChildrenNode } from './ChildrenNode';\nimport { buildChildSet } from './childSet';\nimport { NAME_COMPARATOR, NAME_ONLY_COMPARATOR } from './comparators';\nimport { PRIORITY_INDEX, setNodeFromJSON } from './indexes/PriorityIndex';\nimport { IndexMap } from './IndexMap';\nimport { LeafNode } from './LeafNode';\nimport { NamedNode, Node } from './Node';\n\nconst USE_HINZE = true;\n\n/**\n * Constructs a snapshot node representing the passed JSON and returns it.\n * @param json - JSON to create a node for.\n * @param priority - Optional priority to use. This will be ignored if the\n * passed JSON contains a .priority property.\n */\nexport function nodeFromJSON(\n json: unknown | null,\n priority: unknown = null\n): Node {\n if (json === null) {\n return ChildrenNode.EMPTY_NODE;\n }\n\n if (typeof json === 'object' && '.priority' in json) {\n priority = json['.priority'];\n }\n\n assert(\n priority === null ||\n typeof priority === 'string' ||\n typeof priority === 'number' ||\n (typeof priority === 'object' && '.sv' in (priority as object)),\n 'Invalid priority type found: ' + typeof priority\n );\n\n if (typeof json === 'object' && '.value' in json && json['.value'] !== null) {\n json = json['.value'];\n }\n\n // Valid leaf nodes include non-objects or server-value wrapper objects\n if (typeof json !== 'object' || '.sv' in json) {\n const jsonLeaf = json as string | number | boolean | Indexable;\n return new LeafNode(jsonLeaf, nodeFromJSON(priority));\n }\n\n if (!(json instanceof Array) && USE_HINZE) {\n const children: NamedNode[] = [];\n let childrenHavePriority = false;\n const hinzeJsonObj = json;\n each(hinzeJsonObj, (key, child) => {\n if (key.substring(0, 1) !== '.') {\n // Ignore metadata nodes\n const childNode = nodeFromJSON(child);\n if (!childNode.isEmpty()) {\n childrenHavePriority =\n childrenHavePriority || !childNode.getPriority().isEmpty();\n children.push(new NamedNode(key, childNode));\n }\n }\n });\n\n if (children.length === 0) {\n return ChildrenNode.EMPTY_NODE;\n }\n\n const childSet = buildChildSet(\n children,\n NAME_ONLY_COMPARATOR,\n namedNode => namedNode.name,\n NAME_COMPARATOR\n ) as SortedMap;\n if (childrenHavePriority) {\n const sortedChildSet = buildChildSet(\n children,\n PRIORITY_INDEX.getCompare()\n );\n return new ChildrenNode(\n childSet,\n nodeFromJSON(priority),\n new IndexMap(\n { '.priority': sortedChildSet },\n { '.priority': PRIORITY_INDEX }\n )\n );\n } else {\n return new ChildrenNode(\n childSet,\n nodeFromJSON(priority),\n IndexMap.Default\n );\n }\n } else {\n let node: Node = ChildrenNode.EMPTY_NODE;\n each(json, (key: string, childData: unknown) => {\n if (contains(json as object, key)) {\n if (key.substring(0, 1) !== '.') {\n // ignore metadata nodes.\n const childNode = nodeFromJSON(childData);\n if (childNode.isLeafNode() || !childNode.isEmpty()) {\n node = node.updateImmediateChild(key, childNode);\n }\n }\n }\n });\n\n return node.updatePriority(nodeFromJSON(priority));\n }\n}\n\nsetNodeFromJSON(nodeFromJSON);\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert } from '@firebase/util';\n\nimport { Path, pathGetFront, pathIsEmpty, pathSlice } from '../../util/Path';\nimport { MAX_NAME, nameCompare } from '../../util/util';\nimport { ChildrenNode, MAX_NODE } from '../ChildrenNode';\nimport { NamedNode, Node } from '../Node';\nimport { nodeFromJSON } from '../nodeFromJSON';\n\nimport { Index } from './Index';\n\nexport class PathIndex extends Index {\n constructor(private indexPath_: Path) {\n super();\n\n assert(\n !pathIsEmpty(indexPath_) && pathGetFront(indexPath_) !== '.priority',\n \"Can't create PathIndex with empty path or .priority key\"\n );\n }\n\n protected extractChild(snap: Node): Node {\n return snap.getChild(this.indexPath_);\n }\n isDefinedOn(node: Node): boolean {\n return !node.getChild(this.indexPath_).isEmpty();\n }\n compare(a: NamedNode, b: NamedNode): number {\n const aChild = this.extractChild(a.node);\n const bChild = this.extractChild(b.node);\n const indexCmp = aChild.compareTo(bChild);\n if (indexCmp === 0) {\n return nameCompare(a.name, b.name);\n } else {\n return indexCmp;\n }\n }\n makePost(indexValue: object, name: string): NamedNode {\n const valueNode = nodeFromJSON(indexValue);\n const node = ChildrenNode.EMPTY_NODE.updateChild(\n this.indexPath_,\n valueNode\n );\n return new NamedNode(name, node);\n }\n maxPost(): NamedNode {\n const node = ChildrenNode.EMPTY_NODE.updateChild(this.indexPath_, MAX_NODE);\n return new NamedNode(MAX_NAME, node);\n }\n toString(): string {\n return pathSlice(this.indexPath_, 0).join('/');\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { nameCompare } from '../../util/util';\nimport { NamedNode, Node } from '../Node';\nimport { nodeFromJSON } from '../nodeFromJSON';\n\nimport { Index } from './Index';\n\nexport class ValueIndex extends Index {\n compare(a: NamedNode, b: NamedNode): number {\n const indexCmp = a.node.compareTo(b.node);\n if (indexCmp === 0) {\n return nameCompare(a.name, b.name);\n } else {\n return indexCmp;\n }\n }\n isDefinedOn(node: Node): boolean {\n return true;\n }\n indexedValueChanged(oldNode: Node, newNode: Node): boolean {\n return !oldNode.equals(newNode);\n }\n minPost(): NamedNode {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (NamedNode as any).MIN;\n }\n maxPost(): NamedNode {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (NamedNode as any).MAX;\n }\n\n makePost(indexValue: object, name: string): NamedNode {\n const valueNode = nodeFromJSON(indexValue);\n return new NamedNode(name, valueNode);\n }\n\n /**\n * @returns String representation for inclusion in a query spec\n */\n toString(): string {\n return '.value';\n }\n}\n\nexport const VALUE_INDEX = new ValueIndex();\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Node } from '../snap/Node';\n\nexport const enum ChangeType {\n /** Event type for a child added */\n CHILD_ADDED = 'child_added',\n /** Event type for a child removed */\n CHILD_REMOVED = 'child_removed',\n /** Event type for a child changed */\n CHILD_CHANGED = 'child_changed',\n /** Event type for a child moved */\n CHILD_MOVED = 'child_moved',\n /** Event type for a value change */\n VALUE = 'value'\n}\n\nexport interface Change {\n /** @param type - The event type */\n type: ChangeType;\n /** @param snapshotNode - The data */\n snapshotNode: Node;\n /** @param childName - The name for this child, if it's a child even */\n childName?: string;\n /** @param oldSnap - Used for intermediate processing of child changed events */\n oldSnap?: Node;\n /** * @param prevName - The name for the previous child, if applicable */\n prevName?: string | null;\n}\n\nexport function changeValue(snapshotNode: Node): Change {\n return { type: ChangeType.VALUE, snapshotNode };\n}\n\nexport function changeChildAdded(\n childName: string,\n snapshotNode: Node\n): Change {\n return { type: ChangeType.CHILD_ADDED, snapshotNode, childName };\n}\n\nexport function changeChildRemoved(\n childName: string,\n snapshotNode: Node\n): Change {\n return { type: ChangeType.CHILD_REMOVED, snapshotNode, childName };\n}\n\nexport function changeChildChanged(\n childName: string,\n snapshotNode: Node,\n oldSnap: Node\n): Change {\n return {\n type: ChangeType.CHILD_CHANGED,\n snapshotNode,\n childName,\n oldSnap\n };\n}\n\nexport function changeChildMoved(\n childName: string,\n snapshotNode: Node\n): Change {\n return { type: ChangeType.CHILD_MOVED, snapshotNode, childName };\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert, stringify } from '@firebase/util';\n\nimport { Index } from '../snap/indexes/Index';\nimport { KEY_INDEX } from '../snap/indexes/KeyIndex';\nimport { PathIndex } from '../snap/indexes/PathIndex';\nimport { PRIORITY_INDEX, PriorityIndex } from '../snap/indexes/PriorityIndex';\nimport { VALUE_INDEX } from '../snap/indexes/ValueIndex';\nimport { MAX_NAME, MIN_NAME } from '../util/util';\n\nimport { IndexedFilter } from './filter/IndexedFilter';\nimport { LimitedFilter } from './filter/LimitedFilter';\nimport { NodeFilter } from './filter/NodeFilter';\nimport { RangedFilter } from './filter/RangedFilter';\n\n/**\n * Wire Protocol Constants\n */\nconst enum WIRE_PROTOCOL_CONSTANTS {\n INDEX_START_VALUE = 'sp',\n INDEX_START_NAME = 'sn',\n INDEX_START_IS_INCLUSIVE = 'sin',\n INDEX_END_VALUE = 'ep',\n INDEX_END_NAME = 'en',\n INDEX_END_IS_INCLUSIVE = 'ein',\n LIMIT = 'l',\n VIEW_FROM = 'vf',\n VIEW_FROM_LEFT = 'l',\n VIEW_FROM_RIGHT = 'r',\n INDEX = 'i'\n}\n\n/**\n * REST Query Constants\n */\nconst enum REST_QUERY_CONSTANTS {\n ORDER_BY = 'orderBy',\n PRIORITY_INDEX = '$priority',\n VALUE_INDEX = '$value',\n KEY_INDEX = '$key',\n START_AFTER = 'startAfter',\n START_AT = 'startAt',\n END_AT = 'endAt',\n END_BEFORE = 'endBefore',\n LIMIT_TO_FIRST = 'limitToFirst',\n LIMIT_TO_LAST = 'limitToLast'\n}\n\n/**\n * This class is an immutable-from-the-public-api struct containing a set of query parameters defining a\n * range to be returned for a particular location. It is assumed that validation of parameters is done at the\n * user-facing API level, so it is not done here.\n *\n * @internal\n */\nexport class QueryParams {\n limitSet_ = false;\n startSet_ = false;\n startNameSet_ = false;\n startAfterSet_ = false; // can only be true if startSet_ is true\n endSet_ = false;\n endNameSet_ = false;\n endBeforeSet_ = false; // can only be true if endSet_ is true\n limit_ = 0;\n viewFrom_ = '';\n indexStartValue_: unknown | null = null;\n indexStartName_ = '';\n indexEndValue_: unknown | null = null;\n indexEndName_ = '';\n index_: PriorityIndex = PRIORITY_INDEX;\n\n hasStart(): boolean {\n return this.startSet_;\n }\n\n /**\n * @returns True if it would return from left.\n */\n isViewFromLeft(): boolean {\n if (this.viewFrom_ === '') {\n // limit(), rather than limitToFirst or limitToLast was called.\n // This means that only one of startSet_ and endSet_ is true. Use them\n // to calculate which side of the view to anchor to. If neither is set,\n // anchor to the end.\n return this.startSet_;\n } else {\n return this.viewFrom_ === WIRE_PROTOCOL_CONSTANTS.VIEW_FROM_LEFT;\n }\n }\n\n /**\n * Only valid to call if hasStart() returns true\n */\n getIndexStartValue(): unknown {\n assert(this.startSet_, 'Only valid if start has been set');\n return this.indexStartValue_;\n }\n\n /**\n * Only valid to call if hasStart() returns true.\n * Returns the starting key name for the range defined by these query parameters\n */\n getIndexStartName(): string {\n assert(this.startSet_, 'Only valid if start has been set');\n if (this.startNameSet_) {\n return this.indexStartName_;\n } else {\n return MIN_NAME;\n }\n }\n\n hasEnd(): boolean {\n return this.endSet_;\n }\n\n /**\n * Only valid to call if hasEnd() returns true.\n */\n getIndexEndValue(): unknown {\n assert(this.endSet_, 'Only valid if end has been set');\n return this.indexEndValue_;\n }\n\n /**\n * Only valid to call if hasEnd() returns true.\n * Returns the end key name for the range defined by these query parameters\n */\n getIndexEndName(): string {\n assert(this.endSet_, 'Only valid if end has been set');\n if (this.endNameSet_) {\n return this.indexEndName_;\n } else {\n return MAX_NAME;\n }\n }\n\n hasLimit(): boolean {\n return this.limitSet_;\n }\n\n /**\n * @returns True if a limit has been set and it has been explicitly anchored\n */\n hasAnchoredLimit(): boolean {\n return this.limitSet_ && this.viewFrom_ !== '';\n }\n\n /**\n * Only valid to call if hasLimit() returns true\n */\n getLimit(): number {\n assert(this.limitSet_, 'Only valid if limit has been set');\n return this.limit_;\n }\n\n getIndex(): Index {\n return this.index_;\n }\n\n loadsAllData(): boolean {\n return !(this.startSet_ || this.endSet_ || this.limitSet_);\n }\n\n isDefault(): boolean {\n return this.loadsAllData() && this.index_ === PRIORITY_INDEX;\n }\n\n copy(): QueryParams {\n const copy = new QueryParams();\n copy.limitSet_ = this.limitSet_;\n copy.limit_ = this.limit_;\n copy.startSet_ = this.startSet_;\n copy.startAfterSet_ = this.startAfterSet_;\n copy.indexStartValue_ = this.indexStartValue_;\n copy.startNameSet_ = this.startNameSet_;\n copy.indexStartName_ = this.indexStartName_;\n copy.endSet_ = this.endSet_;\n copy.endBeforeSet_ = this.endBeforeSet_;\n copy.indexEndValue_ = this.indexEndValue_;\n copy.endNameSet_ = this.endNameSet_;\n copy.indexEndName_ = this.indexEndName_;\n copy.index_ = this.index_;\n copy.viewFrom_ = this.viewFrom_;\n return copy;\n }\n}\n\nexport function queryParamsGetNodeFilter(queryParams: QueryParams): NodeFilter {\n if (queryParams.loadsAllData()) {\n return new IndexedFilter(queryParams.getIndex());\n } else if (queryParams.hasLimit()) {\n return new LimitedFilter(queryParams);\n } else {\n return new RangedFilter(queryParams);\n }\n}\n\nexport function queryParamsLimit(\n queryParams: QueryParams,\n newLimit: number\n): QueryParams {\n const newParams = queryParams.copy();\n newParams.limitSet_ = true;\n newParams.limit_ = newLimit;\n newParams.viewFrom_ = '';\n return newParams;\n}\n\nexport function queryParamsLimitToFirst(\n queryParams: QueryParams,\n newLimit: number\n): QueryParams {\n const newParams = queryParams.copy();\n newParams.limitSet_ = true;\n newParams.limit_ = newLimit;\n newParams.viewFrom_ = WIRE_PROTOCOL_CONSTANTS.VIEW_FROM_LEFT;\n return newParams;\n}\n\nexport function queryParamsLimitToLast(\n queryParams: QueryParams,\n newLimit: number\n): QueryParams {\n const newParams = queryParams.copy();\n newParams.limitSet_ = true;\n newParams.limit_ = newLimit;\n newParams.viewFrom_ = WIRE_PROTOCOL_CONSTANTS.VIEW_FROM_RIGHT;\n return newParams;\n}\n\nexport function queryParamsStartAt(\n queryParams: QueryParams,\n indexValue: unknown,\n key?: string | null\n): QueryParams {\n const newParams = queryParams.copy();\n newParams.startSet_ = true;\n if (indexValue === undefined) {\n indexValue = null;\n }\n newParams.indexStartValue_ = indexValue;\n if (key != null) {\n newParams.startNameSet_ = true;\n newParams.indexStartName_ = key;\n } else {\n newParams.startNameSet_ = false;\n newParams.indexStartName_ = '';\n }\n return newParams;\n}\n\nexport function queryParamsStartAfter(\n queryParams: QueryParams,\n indexValue: unknown,\n key?: string | null\n): QueryParams {\n let params: QueryParams;\n if (queryParams.index_ === KEY_INDEX || !!key) {\n params = queryParamsStartAt(queryParams, indexValue, key);\n } else {\n params = queryParamsStartAt(queryParams, indexValue, MAX_NAME);\n }\n params.startAfterSet_ = true;\n return params;\n}\n\nexport function queryParamsEndAt(\n queryParams: QueryParams,\n indexValue: unknown,\n key?: string | null\n): QueryParams {\n const newParams = queryParams.copy();\n newParams.endSet_ = true;\n if (indexValue === undefined) {\n indexValue = null;\n }\n newParams.indexEndValue_ = indexValue;\n if (key !== undefined) {\n newParams.endNameSet_ = true;\n newParams.indexEndName_ = key;\n } else {\n newParams.endNameSet_ = false;\n newParams.indexEndName_ = '';\n }\n return newParams;\n}\n\nexport function queryParamsEndBefore(\n queryParams: QueryParams,\n indexValue: unknown,\n key?: string | null\n): QueryParams {\n let params: QueryParams;\n if (queryParams.index_ === KEY_INDEX || !!key) {\n params = queryParamsEndAt(queryParams, indexValue, key);\n } else {\n params = queryParamsEndAt(queryParams, indexValue, MIN_NAME);\n }\n params.endBeforeSet_ = true;\n return params;\n}\n\nexport function queryParamsOrderBy(\n queryParams: QueryParams,\n index: Index\n): QueryParams {\n const newParams = queryParams.copy();\n newParams.index_ = index;\n return newParams;\n}\n\n/**\n * Returns a set of REST query string parameters representing this query.\n *\n * @returns query string parameters\n */\nexport function queryParamsToRestQueryStringParameters(\n queryParams: QueryParams\n): Record {\n const qs: Record = {};\n\n if (queryParams.isDefault()) {\n return qs;\n }\n\n let orderBy;\n if (queryParams.index_ === PRIORITY_INDEX) {\n orderBy = REST_QUERY_CONSTANTS.PRIORITY_INDEX;\n } else if (queryParams.index_ === VALUE_INDEX) {\n orderBy = REST_QUERY_CONSTANTS.VALUE_INDEX;\n } else if (queryParams.index_ === KEY_INDEX) {\n orderBy = REST_QUERY_CONSTANTS.KEY_INDEX;\n } else {\n assert(queryParams.index_ instanceof PathIndex, 'Unrecognized index type!');\n orderBy = queryParams.index_.toString();\n }\n qs[REST_QUERY_CONSTANTS.ORDER_BY] = stringify(orderBy);\n\n if (queryParams.startSet_) {\n const startParam = queryParams.startAfterSet_\n ? REST_QUERY_CONSTANTS.START_AFTER\n : REST_QUERY_CONSTANTS.START_AT;\n qs[startParam] = stringify(queryParams.indexStartValue_);\n if (queryParams.startNameSet_) {\n qs[startParam] += ',' + stringify(queryParams.indexStartName_);\n }\n }\n\n if (queryParams.endSet_) {\n const endParam = queryParams.endBeforeSet_\n ? REST_QUERY_CONSTANTS.END_BEFORE\n : REST_QUERY_CONSTANTS.END_AT;\n qs[endParam] = stringify(queryParams.indexEndValue_);\n if (queryParams.endNameSet_) {\n qs[endParam] += ',' + stringify(queryParams.indexEndName_);\n }\n }\n\n if (queryParams.limitSet_) {\n if (queryParams.isViewFromLeft()) {\n qs[REST_QUERY_CONSTANTS.LIMIT_TO_FIRST] = queryParams.limit_;\n } else {\n qs[REST_QUERY_CONSTANTS.LIMIT_TO_LAST] = queryParams.limit_;\n }\n }\n\n return qs;\n}\n\nexport function queryParamsGetQueryObject(\n queryParams: QueryParams\n): Record {\n const obj: Record = {};\n if (queryParams.startSet_) {\n obj[WIRE_PROTOCOL_CONSTANTS.INDEX_START_VALUE] =\n queryParams.indexStartValue_;\n if (queryParams.startNameSet_) {\n obj[WIRE_PROTOCOL_CONSTANTS.INDEX_START_NAME] =\n queryParams.indexStartName_;\n }\n obj[WIRE_PROTOCOL_CONSTANTS.INDEX_START_IS_INCLUSIVE] =\n !queryParams.startAfterSet_;\n }\n if (queryParams.endSet_) {\n obj[WIRE_PROTOCOL_CONSTANTS.INDEX_END_VALUE] = queryParams.indexEndValue_;\n if (queryParams.endNameSet_) {\n obj[WIRE_PROTOCOL_CONSTANTS.INDEX_END_NAME] = queryParams.indexEndName_;\n }\n obj[WIRE_PROTOCOL_CONSTANTS.INDEX_END_IS_INCLUSIVE] =\n !queryParams.endBeforeSet_;\n }\n if (queryParams.limitSet_) {\n obj[WIRE_PROTOCOL_CONSTANTS.LIMIT] = queryParams.limit_;\n let viewFrom = queryParams.viewFrom_;\n if (viewFrom === '') {\n if (queryParams.isViewFromLeft()) {\n viewFrom = WIRE_PROTOCOL_CONSTANTS.VIEW_FROM_LEFT;\n } else {\n viewFrom = WIRE_PROTOCOL_CONSTANTS.VIEW_FROM_RIGHT;\n }\n }\n obj[WIRE_PROTOCOL_CONSTANTS.VIEW_FROM] = viewFrom;\n }\n // For now, priority index is the default, so we only specify if it's some other index\n if (queryParams.index_ !== PRIORITY_INDEX) {\n obj[WIRE_PROTOCOL_CONSTANTS.INDEX] = queryParams.index_.toString();\n }\n return obj;\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n assert,\n jsonEval,\n safeGet,\n querystring,\n Deferred\n} from '@firebase/util';\n\nimport { AppCheckTokenProvider } from './AppCheckTokenProvider';\nimport { AuthTokenProvider } from './AuthTokenProvider';\nimport { RepoInfo } from './RepoInfo';\nimport { ServerActions } from './ServerActions';\nimport { logWrapper, warn } from './util/util';\nimport { QueryContext } from './view/EventRegistration';\nimport { queryParamsToRestQueryStringParameters } from './view/QueryParams';\n\n/**\n * An implementation of ServerActions that communicates with the server via REST requests.\n * This is mostly useful for compatibility with crawlers, where we don't want to spin up a full\n * persistent connection (using WebSockets or long-polling)\n */\nexport class ReadonlyRestClient extends ServerActions {\n reportStats(stats: { [k: string]: unknown }): void {\n throw new Error('Method not implemented.');\n }\n\n /** @private {function(...[*])} */\n private log_: (...args: unknown[]) => void = logWrapper('p:rest:');\n\n /**\n * We don't actually need to track listens, except to prevent us calling an onComplete for a listen\n * that's been removed. :-/\n */\n private listens_: { [k: string]: object } = {};\n\n static getListenId_(query: QueryContext, tag?: number | null): string {\n if (tag !== undefined) {\n return 'tag$' + tag;\n } else {\n assert(\n query._queryParams.isDefault(),\n \"should have a tag if it's not a default query.\"\n );\n return query._path.toString();\n }\n }\n\n /**\n * @param repoInfo_ - Data about the namespace we are connecting to\n * @param onDataUpdate_ - A callback for new data from the server\n */\n constructor(\n private repoInfo_: RepoInfo,\n private onDataUpdate_: (\n a: string,\n b: unknown,\n c: boolean,\n d: number | null\n ) => void,\n private authTokenProvider_: AuthTokenProvider,\n private appCheckTokenProvider_: AppCheckTokenProvider\n ) {\n super();\n }\n\n /** @inheritDoc */\n listen(\n query: QueryContext,\n currentHashFn: () => string,\n tag: number | null,\n onComplete: (a: string, b: unknown) => void\n ) {\n const pathString = query._path.toString();\n this.log_('Listen called for ' + pathString + ' ' + query._queryIdentifier);\n\n // Mark this listener so we can tell if it's removed.\n const listenId = ReadonlyRestClient.getListenId_(query, tag);\n const thisListen = {};\n this.listens_[listenId] = thisListen;\n\n const queryStringParameters = queryParamsToRestQueryStringParameters(\n query._queryParams\n );\n\n this.restRequest_(\n pathString + '.json',\n queryStringParameters,\n (error, result) => {\n let data = result;\n\n if (error === 404) {\n data = null;\n error = null;\n }\n\n if (error === null) {\n this.onDataUpdate_(pathString, data, /*isMerge=*/ false, tag);\n }\n\n if (safeGet(this.listens_, listenId) === thisListen) {\n let status;\n if (!error) {\n status = 'ok';\n } else if (error === 401) {\n status = 'permission_denied';\n } else {\n status = 'rest_error:' + error;\n }\n\n onComplete(status, null);\n }\n }\n );\n }\n\n /** @inheritDoc */\n unlisten(query: QueryContext, tag: number | null) {\n const listenId = ReadonlyRestClient.getListenId_(query, tag);\n delete this.listens_[listenId];\n }\n\n get(query: QueryContext): Promise {\n const queryStringParameters = queryParamsToRestQueryStringParameters(\n query._queryParams\n );\n\n const pathString = query._path.toString();\n\n const deferred = new Deferred();\n\n this.restRequest_(\n pathString + '.json',\n queryStringParameters,\n (error, result) => {\n let data = result;\n\n if (error === 404) {\n data = null;\n error = null;\n }\n\n if (error === null) {\n this.onDataUpdate_(\n pathString,\n data,\n /*isMerge=*/ false,\n /*tag=*/ null\n );\n deferred.resolve(data as string);\n } else {\n deferred.reject(new Error(data as string));\n }\n }\n );\n return deferred.promise;\n }\n\n /** @inheritDoc */\n refreshAuthToken(token: string) {\n // no-op since we just always call getToken.\n }\n\n /**\n * Performs a REST request to the given path, with the provided query string parameters,\n * and any auth credentials we have.\n */\n private restRequest_(\n pathString: string,\n queryStringParameters: { [k: string]: string | number } = {},\n callback: ((a: number | null, b?: unknown) => void) | null\n ) {\n queryStringParameters['format'] = 'export';\n\n return Promise.all([\n this.authTokenProvider_.getToken(/*forceRefresh=*/ false),\n this.appCheckTokenProvider_.getToken(/*forceRefresh=*/ false)\n ]).then(([authToken, appCheckToken]) => {\n if (authToken && authToken.accessToken) {\n queryStringParameters['auth'] = authToken.accessToken;\n }\n if (appCheckToken && appCheckToken.token) {\n queryStringParameters['ac'] = appCheckToken.token;\n }\n\n const url =\n (this.repoInfo_.secure ? 'https://' : 'http://') +\n this.repoInfo_.host +\n pathString +\n '?' +\n 'ns=' +\n this.repoInfo_.namespace +\n querystring(queryStringParameters);\n\n this.log_('Sending REST request for ' + url);\n const xhr = new XMLHttpRequest();\n xhr.onreadystatechange = () => {\n if (callback && xhr.readyState === 4) {\n this.log_(\n 'REST Response for ' + url + ' received. status:',\n xhr.status,\n 'response:',\n xhr.responseText\n );\n let res = null;\n if (xhr.status >= 200 && xhr.status < 300) {\n try {\n res = jsonEval(xhr.responseText);\n } catch (e) {\n warn(\n 'Failed to parse JSON response for ' +\n url +\n ': ' +\n xhr.responseText\n );\n }\n callback(null, res);\n } else {\n // 401 and 404 are expected.\n if (xhr.status !== 401 && xhr.status !== 404) {\n warn(\n 'Got unsuccessful REST response for ' +\n url +\n ' Status: ' +\n xhr.status\n );\n }\n callback(xhr.status);\n }\n callback = null;\n }\n };\n\n xhr.open('GET', url, /*asynchronous=*/ true);\n xhr.send();\n });\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ChildrenNode } from './snap/ChildrenNode';\nimport { Node } from './snap/Node';\nimport { Path } from './util/Path';\n\n/**\n * Mutable object which basically just stores a reference to the \"latest\" immutable snapshot.\n */\nexport class SnapshotHolder {\n private rootNode_: Node = ChildrenNode.EMPTY_NODE;\n\n getNode(path: Path): Node {\n return this.rootNode_.getChild(path);\n }\n\n updateSnapshot(path: Path, newSnapshotNode: Node) {\n this.rootNode_ = this.rootNode_.updateChild(path, newSnapshotNode);\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { PRIORITY_INDEX } from './snap/indexes/PriorityIndex';\nimport { Node } from './snap/Node';\nimport { Path, pathGetFront, pathIsEmpty, pathPopFront } from './util/Path';\n\n/**\n * Helper class to store a sparse set of snapshots.\n */\nexport interface SparseSnapshotTree {\n value: Node | null;\n readonly children: Map;\n}\n\nexport function newSparseSnapshotTree(): SparseSnapshotTree {\n return {\n value: null,\n children: new Map()\n };\n}\n\n/**\n * Gets the node stored at the given path if one exists.\n * Only seems to be used in tests.\n *\n * @param path - Path to look up snapshot for.\n * @returns The retrieved node, or null.\n */\nexport function sparseSnapshotTreeFind(\n sparseSnapshotTree: SparseSnapshotTree,\n path: Path\n): Node | null {\n if (sparseSnapshotTree.value != null) {\n return sparseSnapshotTree.value.getChild(path);\n } else if (!pathIsEmpty(path) && sparseSnapshotTree.children.size > 0) {\n const childKey = pathGetFront(path);\n path = pathPopFront(path);\n if (sparseSnapshotTree.children.has(childKey)) {\n const childTree = sparseSnapshotTree.children.get(childKey);\n return sparseSnapshotTreeFind(childTree, path);\n } else {\n return null;\n }\n } else {\n return null;\n }\n}\n\n/**\n * Stores the given node at the specified path. If there is already a node\n * at a shallower path, it merges the new data into that snapshot node.\n *\n * @param path - Path to look up snapshot for.\n * @param data - The new data, or null.\n */\nexport function sparseSnapshotTreeRemember(\n sparseSnapshotTree: SparseSnapshotTree,\n path: Path,\n data: Node\n): void {\n if (pathIsEmpty(path)) {\n sparseSnapshotTree.value = data;\n sparseSnapshotTree.children.clear();\n } else if (sparseSnapshotTree.value !== null) {\n sparseSnapshotTree.value = sparseSnapshotTree.value.updateChild(path, data);\n } else {\n const childKey = pathGetFront(path);\n if (!sparseSnapshotTree.children.has(childKey)) {\n sparseSnapshotTree.children.set(childKey, newSparseSnapshotTree());\n }\n\n const child = sparseSnapshotTree.children.get(childKey);\n path = pathPopFront(path);\n sparseSnapshotTreeRemember(child, path, data);\n }\n}\n\n/**\n * Purge the data at path from the cache.\n *\n * @param path - Path to look up snapshot for.\n * @returns True if this node should now be removed.\n */\nexport function sparseSnapshotTreeForget(\n sparseSnapshotTree: SparseSnapshotTree,\n path: Path\n): boolean {\n if (pathIsEmpty(path)) {\n sparseSnapshotTree.value = null;\n sparseSnapshotTree.children.clear();\n return true;\n } else {\n if (sparseSnapshotTree.value !== null) {\n if (sparseSnapshotTree.value.isLeafNode()) {\n // We're trying to forget a node that doesn't exist\n return false;\n } else {\n const value = sparseSnapshotTree.value;\n sparseSnapshotTree.value = null;\n\n value.forEachChild(PRIORITY_INDEX, (key, tree) => {\n sparseSnapshotTreeRemember(sparseSnapshotTree, new Path(key), tree);\n });\n\n return sparseSnapshotTreeForget(sparseSnapshotTree, path);\n }\n } else if (sparseSnapshotTree.children.size > 0) {\n const childKey = pathGetFront(path);\n path = pathPopFront(path);\n if (sparseSnapshotTree.children.has(childKey)) {\n const safeToRemove = sparseSnapshotTreeForget(\n sparseSnapshotTree.children.get(childKey),\n path\n );\n if (safeToRemove) {\n sparseSnapshotTree.children.delete(childKey);\n }\n }\n\n return sparseSnapshotTree.children.size === 0;\n } else {\n return true;\n }\n }\n}\n\n/**\n * Recursively iterates through all of the stored tree and calls the\n * callback on each one.\n *\n * @param prefixPath - Path to look up node for.\n * @param func - The function to invoke for each tree.\n */\nexport function sparseSnapshotTreeForEachTree(\n sparseSnapshotTree: SparseSnapshotTree,\n prefixPath: Path,\n func: (a: Path, b: Node) => unknown\n): void {\n if (sparseSnapshotTree.value !== null) {\n func(prefixPath, sparseSnapshotTree.value);\n } else {\n sparseSnapshotTreeForEachChild(sparseSnapshotTree, (key, tree) => {\n const path = new Path(prefixPath.toString() + '/' + key);\n sparseSnapshotTreeForEachTree(tree, path, func);\n });\n }\n}\n\n/**\n * Iterates through each immediate child and triggers the callback.\n * Only seems to be used in tests.\n *\n * @param func - The function to invoke for each child.\n */\nexport function sparseSnapshotTreeForEachChild(\n sparseSnapshotTree: SparseSnapshotTree,\n func: (a: string, b: SparseSnapshotTree) => void\n): void {\n sparseSnapshotTree.children.forEach((tree, key) => {\n func(key, tree);\n });\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { each } from '../util/util';\n\nimport { StatsCollection } from './StatsCollection';\n\n/**\n * Returns the delta from the previous call to get stats.\n *\n * @param collection_ - The collection to \"listen\" to.\n */\nexport class StatsListener {\n private last_: { [k: string]: number } | null = null;\n\n constructor(private collection_: StatsCollection) {}\n\n get(): { [k: string]: number } {\n const newStats = this.collection_.get();\n\n const delta = { ...newStats };\n if (this.last_) {\n each(this.last_, (stat: string, value: number) => {\n delta[stat] = delta[stat] - value;\n });\n }\n this.last_ = newStats;\n\n return delta;\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { contains } from '@firebase/util';\n\nimport { ServerActions } from '../ServerActions';\nimport { setTimeoutNonBlocking, each } from '../util/util';\n\nimport { StatsCollection } from './StatsCollection';\nimport { StatsListener } from './StatsListener';\n\n// Assuming some apps may have a short amount of time on page, and a bulk of firebase operations probably\n// happen on page load, we try to report our first set of stats pretty quickly, but we wait at least 10\n// seconds to try to ensure the Firebase connection is established / settled.\nconst FIRST_STATS_MIN_TIME = 10 * 1000;\nconst FIRST_STATS_MAX_TIME = 30 * 1000;\n\n// We'll continue to report stats on average every 5 minutes.\nconst REPORT_STATS_INTERVAL = 5 * 60 * 1000;\n\nexport class StatsReporter {\n private statsListener_: StatsListener;\n statsToReport_: { [k: string]: boolean } = {};\n\n constructor(collection: StatsCollection, private server_: ServerActions) {\n this.statsListener_ = new StatsListener(collection);\n\n const timeout =\n FIRST_STATS_MIN_TIME +\n (FIRST_STATS_MAX_TIME - FIRST_STATS_MIN_TIME) * Math.random();\n setTimeoutNonBlocking(this.reportStats_.bind(this), Math.floor(timeout));\n }\n\n private reportStats_() {\n const stats = this.statsListener_.get();\n const reportedStats: typeof stats = {};\n let haveStatsToReport = false;\n\n each(stats, (stat: string, value: number) => {\n if (value > 0 && contains(this.statsToReport_, stat)) {\n reportedStats[stat] = value;\n haveStatsToReport = true;\n }\n });\n\n if (haveStatsToReport) {\n this.server_.reportStats(reportedStats);\n }\n\n // queue our next run.\n setTimeoutNonBlocking(\n this.reportStats_.bind(this),\n Math.floor(Math.random() * 2 * REPORT_STATS_INTERVAL)\n );\n }\n}\n\nexport function statsReporterIncludeStat(\n reporter: StatsReporter,\n stat: string\n) {\n reporter.statsToReport_[stat] = true;\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Path } from '../util/Path';\n\n/**\n *\n * @enum\n */\nexport enum OperationType {\n OVERWRITE,\n MERGE,\n ACK_USER_WRITE,\n LISTEN_COMPLETE\n}\n\n/**\n * @interface\n */\nexport interface Operation {\n source: OperationSource;\n\n type: OperationType;\n\n path: Path;\n\n operationForChild(childName: string): Operation | null;\n}\n\nexport interface OperationSource {\n fromUser: boolean;\n fromServer: boolean;\n queryId: string | null;\n tagged: boolean;\n}\n\nexport function newOperationSourceUser(): OperationSource {\n return {\n fromUser: true,\n fromServer: false,\n queryId: null,\n tagged: false\n };\n}\n\nexport function newOperationSourceServer(): OperationSource {\n return {\n fromUser: false,\n fromServer: true,\n queryId: null,\n tagged: false\n };\n}\n\nexport function newOperationSourceServerTaggedQuery(\n queryId: string\n): OperationSource {\n return {\n fromUser: false,\n fromServer: true,\n queryId,\n tagged: true\n };\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert } from '@firebase/util';\n\nimport { ImmutableTree } from '../util/ImmutableTree';\nimport {\n newEmptyPath,\n Path,\n pathGetFront,\n pathIsEmpty,\n pathPopFront\n} from '../util/Path';\n\nimport { newOperationSourceUser, Operation, OperationType } from './Operation';\n\nexport class AckUserWrite implements Operation {\n /** @inheritDoc */\n type = OperationType.ACK_USER_WRITE;\n\n /** @inheritDoc */\n source = newOperationSourceUser();\n\n /**\n * @param affectedTree - A tree containing true for each affected path. Affected paths can't overlap.\n */\n constructor(\n /** @inheritDoc */ public path: Path,\n /** @inheritDoc */ public affectedTree: ImmutableTree,\n /** @inheritDoc */ public revert: boolean\n ) {}\n operationForChild(childName: string): AckUserWrite {\n if (!pathIsEmpty(this.path)) {\n assert(\n pathGetFront(this.path) === childName,\n 'operationForChild called for unrelated child.'\n );\n return new AckUserWrite(\n pathPopFront(this.path),\n this.affectedTree,\n this.revert\n );\n } else if (this.affectedTree.value != null) {\n assert(\n this.affectedTree.children.isEmpty(),\n 'affectedTree should not have overlapping affected paths.'\n );\n // All child locations are affected as well; just return same operation.\n return this;\n } else {\n const childTree = this.affectedTree.subtree(new Path(childName));\n return new AckUserWrite(newEmptyPath(), childTree, this.revert);\n }\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Node } from '../snap/Node';\nimport { newEmptyPath, Path, pathIsEmpty, pathPopFront } from '../util/Path';\n\nimport { Operation, OperationSource, OperationType } from './Operation';\n\nexport class Overwrite implements Operation {\n /** @inheritDoc */\n type = OperationType.OVERWRITE;\n\n constructor(\n public source: OperationSource,\n public path: Path,\n public snap: Node\n ) {}\n\n operationForChild(childName: string): Overwrite {\n if (pathIsEmpty(this.path)) {\n return new Overwrite(\n this.source,\n newEmptyPath(),\n this.snap.getImmediateChild(childName)\n );\n } else {\n return new Overwrite(this.source, pathPopFront(this.path), this.snap);\n }\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert } from '@firebase/util';\n\nimport { Node } from '../snap/Node';\nimport { ImmutableTree } from '../util/ImmutableTree';\nimport {\n newEmptyPath,\n Path,\n pathGetFront,\n pathIsEmpty,\n pathPopFront\n} from '../util/Path';\n\nimport { Operation, OperationSource, OperationType } from './Operation';\nimport { Overwrite } from './Overwrite';\n\nexport class Merge implements Operation {\n /** @inheritDoc */\n type = OperationType.MERGE;\n\n constructor(\n /** @inheritDoc */ public source: OperationSource,\n /** @inheritDoc */ public path: Path,\n /** @inheritDoc */ public children: ImmutableTree\n ) {}\n operationForChild(childName: string): Operation {\n if (pathIsEmpty(this.path)) {\n const childTree = this.children.subtree(new Path(childName));\n if (childTree.isEmpty()) {\n // This child is unaffected\n return null;\n } else if (childTree.value) {\n // We have a snapshot for the child in question. This becomes an overwrite of the child.\n return new Overwrite(this.source, newEmptyPath(), childTree.value);\n } else {\n // This is a merge at a deeper level\n return new Merge(this.source, newEmptyPath(), childTree);\n }\n } else {\n assert(\n pathGetFront(this.path) === childName,\n \"Can't get a merge for a child not on the path of the operation\"\n );\n return new Merge(this.source, pathPopFront(this.path), this.children);\n }\n }\n toString(): string {\n return (\n 'Operation(' +\n this.path +\n ': ' +\n this.source.toString() +\n ' merge: ' +\n this.children.toString() +\n ')'\n );\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Node } from '../snap/Node';\nimport { Path, pathGetFront, pathIsEmpty } from '../util/Path';\n\n/**\n * A cache node only stores complete children. Additionally it holds a flag whether the node can be considered fully\n * initialized in the sense that we know at one point in time this represented a valid state of the world, e.g.\n * initialized with data from the server, or a complete overwrite by the client. The filtered flag also tracks\n * whether a node potentially had children removed due to a filter.\n */\nexport class CacheNode {\n constructor(\n private node_: Node,\n private fullyInitialized_: boolean,\n private filtered_: boolean\n ) {}\n\n /**\n * Returns whether this node was fully initialized with either server data or a complete overwrite by the client\n */\n isFullyInitialized(): boolean {\n return this.fullyInitialized_;\n }\n\n /**\n * Returns whether this node is potentially missing children due to a filter applied to the node\n */\n isFiltered(): boolean {\n return this.filtered_;\n }\n\n isCompleteForPath(path: Path): boolean {\n if (pathIsEmpty(path)) {\n return this.isFullyInitialized() && !this.filtered_;\n }\n\n const childKey = pathGetFront(path);\n return this.isCompleteForChild(childKey);\n }\n\n isCompleteForChild(key: string): boolean {\n return (\n (this.isFullyInitialized() && !this.filtered_) || this.node_.hasChild(key)\n );\n }\n\n getNode(): Node {\n return this.node_;\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assertionError } from '@firebase/util';\n\nimport { Index } from '../snap/indexes/Index';\nimport { NamedNode, Node } from '../snap/Node';\n\nimport { Change, ChangeType, changeChildMoved } from './Change';\nimport { Event } from './Event';\nimport { EventRegistration, QueryContext } from './EventRegistration';\n\n/**\n * An EventGenerator is used to convert \"raw\" changes (Change) as computed by the\n * CacheDiffer into actual events (Event) that can be raised. See generateEventsForChanges()\n * for details.\n *\n */\nexport class EventGenerator {\n index_: Index;\n\n constructor(public query_: QueryContext) {\n this.index_ = this.query_._queryParams.getIndex();\n }\n}\n\n/**\n * Given a set of raw changes (no moved events and prevName not specified yet), and a set of\n * EventRegistrations that should be notified of these changes, generate the actual events to be raised.\n *\n * Notes:\n * - child_moved events will be synthesized at this time for any child_changed events that affect\n * our index.\n * - prevName will be calculated based on the index ordering.\n */\nexport function eventGeneratorGenerateEventsForChanges(\n eventGenerator: EventGenerator,\n changes: Change[],\n eventCache: Node,\n eventRegistrations: EventRegistration[]\n): Event[] {\n const events: Event[] = [];\n const moves: Change[] = [];\n\n changes.forEach(change => {\n if (\n change.type === ChangeType.CHILD_CHANGED &&\n eventGenerator.index_.indexedValueChanged(\n change.oldSnap as Node,\n change.snapshotNode\n )\n ) {\n moves.push(changeChildMoved(change.childName, change.snapshotNode));\n }\n });\n\n eventGeneratorGenerateEventsForType(\n eventGenerator,\n events,\n ChangeType.CHILD_REMOVED,\n changes,\n eventRegistrations,\n eventCache\n );\n eventGeneratorGenerateEventsForType(\n eventGenerator,\n events,\n ChangeType.CHILD_ADDED,\n changes,\n eventRegistrations,\n eventCache\n );\n eventGeneratorGenerateEventsForType(\n eventGenerator,\n events,\n ChangeType.CHILD_MOVED,\n moves,\n eventRegistrations,\n eventCache\n );\n eventGeneratorGenerateEventsForType(\n eventGenerator,\n events,\n ChangeType.CHILD_CHANGED,\n changes,\n eventRegistrations,\n eventCache\n );\n eventGeneratorGenerateEventsForType(\n eventGenerator,\n events,\n ChangeType.VALUE,\n changes,\n eventRegistrations,\n eventCache\n );\n\n return events;\n}\n\n/**\n * Given changes of a single change type, generate the corresponding events.\n */\nfunction eventGeneratorGenerateEventsForType(\n eventGenerator: EventGenerator,\n events: Event[],\n eventType: string,\n changes: Change[],\n registrations: EventRegistration[],\n eventCache: Node\n) {\n const filteredChanges = changes.filter(change => change.type === eventType);\n\n filteredChanges.sort((a, b) =>\n eventGeneratorCompareChanges(eventGenerator, a, b)\n );\n filteredChanges.forEach(change => {\n const materializedChange = eventGeneratorMaterializeSingleChange(\n eventGenerator,\n change,\n eventCache\n );\n registrations.forEach(registration => {\n if (registration.respondsTo(change.type)) {\n events.push(\n registration.createEvent(materializedChange, eventGenerator.query_)\n );\n }\n });\n });\n}\n\nfunction eventGeneratorMaterializeSingleChange(\n eventGenerator: EventGenerator,\n change: Change,\n eventCache: Node\n): Change {\n if (change.type === 'value' || change.type === 'child_removed') {\n return change;\n } else {\n change.prevName = eventCache.getPredecessorChildName(\n change.childName,\n change.snapshotNode,\n eventGenerator.index_\n );\n return change;\n }\n}\n\nfunction eventGeneratorCompareChanges(\n eventGenerator: EventGenerator,\n a: Change,\n b: Change\n) {\n if (a.childName == null || b.childName == null) {\n throw assertionError('Should only compare child_ events.');\n }\n const aWrapped = new NamedNode(a.childName, a.snapshotNode);\n const bWrapped = new NamedNode(b.childName, b.snapshotNode);\n return eventGenerator.index_.compare(aWrapped, bWrapped);\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Node } from '../snap/Node';\n\nimport { CacheNode } from './CacheNode';\n\n/**\n * Stores the data we have cached for a view.\n *\n * serverSnap is the cached server data, eventSnap is the cached event data (server data plus any local writes).\n */\nexport interface ViewCache {\n readonly eventCache: CacheNode;\n readonly serverCache: CacheNode;\n}\n\nexport function newViewCache(\n eventCache: CacheNode,\n serverCache: CacheNode\n): ViewCache {\n return { eventCache, serverCache };\n}\n\nexport function viewCacheUpdateEventSnap(\n viewCache: ViewCache,\n eventSnap: Node,\n complete: boolean,\n filtered: boolean\n): ViewCache {\n return newViewCache(\n new CacheNode(eventSnap, complete, filtered),\n viewCache.serverCache\n );\n}\n\nexport function viewCacheUpdateServerSnap(\n viewCache: ViewCache,\n serverSnap: Node,\n complete: boolean,\n filtered: boolean\n): ViewCache {\n return newViewCache(\n viewCache.eventCache,\n new CacheNode(serverSnap, complete, filtered)\n );\n}\n\nexport function viewCacheGetCompleteEventSnap(\n viewCache: ViewCache\n): Node | null {\n return viewCache.eventCache.isFullyInitialized()\n ? viewCache.eventCache.getNode()\n : null;\n}\n\nexport function viewCacheGetCompleteServerSnap(\n viewCache: ViewCache\n): Node | null {\n return viewCache.serverCache.isFullyInitialized()\n ? viewCache.serverCache.getNode()\n : null;\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n newEmptyPath,\n Path,\n pathChild,\n pathGetFront,\n pathIsEmpty,\n pathPopFront\n} from './Path';\nimport { SortedMap } from './SortedMap';\nimport { each, stringCompare } from './util';\n\nlet emptyChildrenSingleton: SortedMap>;\n\n/**\n * Singleton empty children collection.\n *\n */\nconst EmptyChildren = (): SortedMap> => {\n if (!emptyChildrenSingleton) {\n emptyChildrenSingleton = new SortedMap>(\n stringCompare\n );\n }\n return emptyChildrenSingleton;\n};\n\n/**\n * A tree with immutable elements.\n */\nexport class ImmutableTree {\n static fromObject(obj: { [k: string]: T }): ImmutableTree {\n let tree: ImmutableTree = new ImmutableTree(null);\n each(obj, (childPath: string, childSnap: T) => {\n tree = tree.set(new Path(childPath), childSnap);\n });\n return tree;\n }\n\n constructor(\n public readonly value: T | null,\n public readonly children: SortedMap<\n string,\n ImmutableTree\n > = EmptyChildren()\n ) {}\n\n /**\n * True if the value is empty and there are no children\n */\n isEmpty(): boolean {\n return this.value === null && this.children.isEmpty();\n }\n\n /**\n * Given a path and predicate, return the first node and the path to that node\n * where the predicate returns true.\n *\n * TODO Do a perf test -- If we're creating a bunch of `{path: value:}`\n * objects on the way back out, it may be better to pass down a pathSoFar obj.\n *\n * @param relativePath - The remainder of the path\n * @param predicate - The predicate to satisfy to return a node\n */\n findRootMostMatchingPathAndValue(\n relativePath: Path,\n predicate: (a: T) => boolean\n ): { path: Path; value: T } | null {\n if (this.value != null && predicate(this.value)) {\n return { path: newEmptyPath(), value: this.value };\n } else {\n if (pathIsEmpty(relativePath)) {\n return null;\n } else {\n const front = pathGetFront(relativePath);\n const child = this.children.get(front);\n if (child !== null) {\n const childExistingPathAndValue =\n child.findRootMostMatchingPathAndValue(\n pathPopFront(relativePath),\n predicate\n );\n if (childExistingPathAndValue != null) {\n const fullPath = pathChild(\n new Path(front),\n childExistingPathAndValue.path\n );\n return { path: fullPath, value: childExistingPathAndValue.value };\n } else {\n return null;\n }\n } else {\n return null;\n }\n }\n }\n }\n\n /**\n * Find, if it exists, the shortest subpath of the given path that points a defined\n * value in the tree\n */\n findRootMostValueAndPath(\n relativePath: Path\n ): { path: Path; value: T } | null {\n return this.findRootMostMatchingPathAndValue(relativePath, () => true);\n }\n\n /**\n * @returns The subtree at the given path\n */\n subtree(relativePath: Path): ImmutableTree {\n if (pathIsEmpty(relativePath)) {\n return this;\n } else {\n const front = pathGetFront(relativePath);\n const childTree = this.children.get(front);\n if (childTree !== null) {\n return childTree.subtree(pathPopFront(relativePath));\n } else {\n return new ImmutableTree(null);\n }\n }\n }\n\n /**\n * Sets a value at the specified path.\n *\n * @param relativePath - Path to set value at.\n * @param toSet - Value to set.\n * @returns Resulting tree.\n */\n set(relativePath: Path, toSet: T | null): ImmutableTree {\n if (pathIsEmpty(relativePath)) {\n return new ImmutableTree(toSet, this.children);\n } else {\n const front = pathGetFront(relativePath);\n const child = this.children.get(front) || new ImmutableTree(null);\n const newChild = child.set(pathPopFront(relativePath), toSet);\n const newChildren = this.children.insert(front, newChild);\n return new ImmutableTree(this.value, newChildren);\n }\n }\n\n /**\n * Removes the value at the specified path.\n *\n * @param relativePath - Path to value to remove.\n * @returns Resulting tree.\n */\n remove(relativePath: Path): ImmutableTree {\n if (pathIsEmpty(relativePath)) {\n if (this.children.isEmpty()) {\n return new ImmutableTree(null);\n } else {\n return new ImmutableTree(null, this.children);\n }\n } else {\n const front = pathGetFront(relativePath);\n const child = this.children.get(front);\n if (child) {\n const newChild = child.remove(pathPopFront(relativePath));\n let newChildren;\n if (newChild.isEmpty()) {\n newChildren = this.children.remove(front);\n } else {\n newChildren = this.children.insert(front, newChild);\n }\n if (this.value === null && newChildren.isEmpty()) {\n return new ImmutableTree(null);\n } else {\n return new ImmutableTree(this.value, newChildren);\n }\n } else {\n return this;\n }\n }\n }\n\n /**\n * Gets a value from the tree.\n *\n * @param relativePath - Path to get value for.\n * @returns Value at path, or null.\n */\n get(relativePath: Path): T | null {\n if (pathIsEmpty(relativePath)) {\n return this.value;\n } else {\n const front = pathGetFront(relativePath);\n const child = this.children.get(front);\n if (child) {\n return child.get(pathPopFront(relativePath));\n } else {\n return null;\n }\n }\n }\n\n /**\n * Replace the subtree at the specified path with the given new tree.\n *\n * @param relativePath - Path to replace subtree for.\n * @param newTree - New tree.\n * @returns Resulting tree.\n */\n setTree(relativePath: Path, newTree: ImmutableTree): ImmutableTree {\n if (pathIsEmpty(relativePath)) {\n return newTree;\n } else {\n const front = pathGetFront(relativePath);\n const child = this.children.get(front) || new ImmutableTree(null);\n const newChild = child.setTree(pathPopFront(relativePath), newTree);\n let newChildren;\n if (newChild.isEmpty()) {\n newChildren = this.children.remove(front);\n } else {\n newChildren = this.children.insert(front, newChild);\n }\n return new ImmutableTree(this.value, newChildren);\n }\n }\n\n /**\n * Performs a depth first fold on this tree. Transforms a tree into a single\n * value, given a function that operates on the path to a node, an optional\n * current value, and a map of child names to folded subtrees\n */\n fold(fn: (path: Path, value: T, children: { [k: string]: V }) => V): V {\n return this.fold_(newEmptyPath(), fn);\n }\n\n /**\n * Recursive helper for public-facing fold() method\n */\n private fold_(\n pathSoFar: Path,\n fn: (path: Path, value: T | null, children: { [k: string]: V }) => V\n ): V {\n const accum: { [k: string]: V } = {};\n this.children.inorderTraversal(\n (childKey: string, childTree: ImmutableTree) => {\n accum[childKey] = childTree.fold_(pathChild(pathSoFar, childKey), fn);\n }\n );\n return fn(pathSoFar, this.value, accum);\n }\n\n /**\n * Find the first matching value on the given path. Return the result of applying f to it.\n */\n findOnPath(path: Path, f: (path: Path, value: T) => V | null): V | null {\n return this.findOnPath_(path, newEmptyPath(), f);\n }\n\n private findOnPath_(\n pathToFollow: Path,\n pathSoFar: Path,\n f: (path: Path, value: T) => V | null\n ): V | null {\n const result = this.value ? f(pathSoFar, this.value) : false;\n if (result) {\n return result;\n } else {\n if (pathIsEmpty(pathToFollow)) {\n return null;\n } else {\n const front = pathGetFront(pathToFollow)!;\n const nextChild = this.children.get(front);\n if (nextChild) {\n return nextChild.findOnPath_(\n pathPopFront(pathToFollow),\n pathChild(pathSoFar, front),\n f\n );\n } else {\n return null;\n }\n }\n }\n }\n\n foreachOnPath(\n path: Path,\n f: (path: Path, value: T) => void\n ): ImmutableTree {\n return this.foreachOnPath_(path, newEmptyPath(), f);\n }\n\n private foreachOnPath_(\n pathToFollow: Path,\n currentRelativePath: Path,\n f: (path: Path, value: T) => void\n ): ImmutableTree {\n if (pathIsEmpty(pathToFollow)) {\n return this;\n } else {\n if (this.value) {\n f(currentRelativePath, this.value);\n }\n const front = pathGetFront(pathToFollow);\n const nextChild = this.children.get(front);\n if (nextChild) {\n return nextChild.foreachOnPath_(\n pathPopFront(pathToFollow),\n pathChild(currentRelativePath, front),\n f\n );\n } else {\n return new ImmutableTree(null);\n }\n }\n }\n\n /**\n * Calls the given function for each node in the tree that has a value.\n *\n * @param f - A function to be called with the path from the root of the tree to\n * a node, and the value at that node. Called in depth-first order.\n */\n foreach(f: (path: Path, value: T) => void) {\n this.foreach_(newEmptyPath(), f);\n }\n\n private foreach_(\n currentRelativePath: Path,\n f: (path: Path, value: T) => void\n ) {\n this.children.inorderTraversal((childName, childTree) => {\n childTree.foreach_(pathChild(currentRelativePath, childName), f);\n });\n if (this.value) {\n f(currentRelativePath, this.value);\n }\n }\n\n foreachChild(f: (name: string, value: T) => void) {\n this.children.inorderTraversal(\n (childName: string, childTree: ImmutableTree) => {\n if (childTree.value) {\n f(childName, childTree.value);\n }\n }\n );\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert } from '@firebase/util';\n\nimport { ChildrenNode } from './snap/ChildrenNode';\nimport { PRIORITY_INDEX } from './snap/indexes/PriorityIndex';\nimport { NamedNode, Node } from './snap/Node';\nimport { ImmutableTree } from './util/ImmutableTree';\nimport {\n newEmptyPath,\n newRelativePath,\n Path,\n pathChild,\n pathIsEmpty\n} from './util/Path';\nimport { each } from './util/util';\n\n/**\n * This class holds a collection of writes that can be applied to nodes in unison. It abstracts away the logic with\n * dealing with priority writes and multiple nested writes. At any given path there is only allowed to be one write\n * modifying that path. Any write to an existing path or shadowing an existing path will modify that existing write\n * to reflect the write added.\n */\nexport class CompoundWrite {\n constructor(public writeTree_: ImmutableTree) {}\n\n static empty(): CompoundWrite {\n return new CompoundWrite(new ImmutableTree(null));\n }\n}\n\nexport function compoundWriteAddWrite(\n compoundWrite: CompoundWrite,\n path: Path,\n node: Node\n): CompoundWrite {\n if (pathIsEmpty(path)) {\n return new CompoundWrite(new ImmutableTree(node));\n } else {\n const rootmost = compoundWrite.writeTree_.findRootMostValueAndPath(path);\n if (rootmost != null) {\n const rootMostPath = rootmost.path;\n let value = rootmost.value;\n const relativePath = newRelativePath(rootMostPath, path);\n value = value.updateChild(relativePath, node);\n return new CompoundWrite(\n compoundWrite.writeTree_.set(rootMostPath, value)\n );\n } else {\n const subtree = new ImmutableTree(node);\n const newWriteTree = compoundWrite.writeTree_.setTree(path, subtree);\n return new CompoundWrite(newWriteTree);\n }\n }\n}\n\nexport function compoundWriteAddWrites(\n compoundWrite: CompoundWrite,\n path: Path,\n updates: { [name: string]: Node }\n): CompoundWrite {\n let newWrite = compoundWrite;\n each(updates, (childKey: string, node: Node) => {\n newWrite = compoundWriteAddWrite(newWrite, pathChild(path, childKey), node);\n });\n return newWrite;\n}\n\n/**\n * Will remove a write at the given path and deeper paths. This will not modify a write at a higher\n * location, which must be removed by calling this method with that path.\n *\n * @param compoundWrite - The CompoundWrite to remove.\n * @param path - The path at which a write and all deeper writes should be removed\n * @returns The new CompoundWrite with the removed path\n */\nexport function compoundWriteRemoveWrite(\n compoundWrite: CompoundWrite,\n path: Path\n): CompoundWrite {\n if (pathIsEmpty(path)) {\n return CompoundWrite.empty();\n } else {\n const newWriteTree = compoundWrite.writeTree_.setTree(\n path,\n new ImmutableTree(null)\n );\n return new CompoundWrite(newWriteTree);\n }\n}\n\n/**\n * Returns whether this CompoundWrite will fully overwrite a node at a given location and can therefore be\n * considered \"complete\".\n *\n * @param compoundWrite - The CompoundWrite to check.\n * @param path - The path to check for\n * @returns Whether there is a complete write at that path\n */\nexport function compoundWriteHasCompleteWrite(\n compoundWrite: CompoundWrite,\n path: Path\n): boolean {\n return compoundWriteGetCompleteNode(compoundWrite, path) != null;\n}\n\n/**\n * Returns a node for a path if and only if the node is a \"complete\" overwrite at that path. This will not aggregate\n * writes from deeper paths, but will return child nodes from a more shallow path.\n *\n * @param compoundWrite - The CompoundWrite to get the node from.\n * @param path - The path to get a complete write\n * @returns The node if complete at that path, or null otherwise.\n */\nexport function compoundWriteGetCompleteNode(\n compoundWrite: CompoundWrite,\n path: Path\n): Node | null {\n const rootmost = compoundWrite.writeTree_.findRootMostValueAndPath(path);\n if (rootmost != null) {\n return compoundWrite.writeTree_\n .get(rootmost.path)\n .getChild(newRelativePath(rootmost.path, path));\n } else {\n return null;\n }\n}\n\n/**\n * Returns all children that are guaranteed to be a complete overwrite.\n *\n * @param compoundWrite - The CompoundWrite to get children from.\n * @returns A list of all complete children.\n */\nexport function compoundWriteGetCompleteChildren(\n compoundWrite: CompoundWrite\n): NamedNode[] {\n const children: NamedNode[] = [];\n const node = compoundWrite.writeTree_.value;\n if (node != null) {\n // If it's a leaf node, it has no children; so nothing to do.\n if (!node.isLeafNode()) {\n (node as ChildrenNode).forEachChild(\n PRIORITY_INDEX,\n (childName, childNode) => {\n children.push(new NamedNode(childName, childNode));\n }\n );\n }\n } else {\n compoundWrite.writeTree_.children.inorderTraversal(\n (childName, childTree) => {\n if (childTree.value != null) {\n children.push(new NamedNode(childName, childTree.value));\n }\n }\n );\n }\n return children;\n}\n\nexport function compoundWriteChildCompoundWrite(\n compoundWrite: CompoundWrite,\n path: Path\n): CompoundWrite {\n if (pathIsEmpty(path)) {\n return compoundWrite;\n } else {\n const shadowingNode = compoundWriteGetCompleteNode(compoundWrite, path);\n if (shadowingNode != null) {\n return new CompoundWrite(new ImmutableTree(shadowingNode));\n } else {\n return new CompoundWrite(compoundWrite.writeTree_.subtree(path));\n }\n }\n}\n\n/**\n * Returns true if this CompoundWrite is empty and therefore does not modify any nodes.\n * @returns Whether this CompoundWrite is empty\n */\nexport function compoundWriteIsEmpty(compoundWrite: CompoundWrite): boolean {\n return compoundWrite.writeTree_.isEmpty();\n}\n\n/**\n * Applies this CompoundWrite to a node. The node is returned with all writes from this CompoundWrite applied to the\n * node\n * @param node - The node to apply this CompoundWrite to\n * @returns The node with all writes applied\n */\nexport function compoundWriteApply(\n compoundWrite: CompoundWrite,\n node: Node\n): Node {\n return applySubtreeWrite(newEmptyPath(), compoundWrite.writeTree_, node);\n}\n\nfunction applySubtreeWrite(\n relativePath: Path,\n writeTree: ImmutableTree,\n node: Node\n): Node {\n if (writeTree.value != null) {\n // Since there a write is always a leaf, we're done here\n return node.updateChild(relativePath, writeTree.value);\n } else {\n let priorityWrite = null;\n writeTree.children.inorderTraversal((childKey, childTree) => {\n if (childKey === '.priority') {\n // Apply priorities at the end so we don't update priorities for either empty nodes or forget\n // to apply priorities to empty nodes that are later filled\n assert(\n childTree.value !== null,\n 'Priority writes must always be leaf nodes'\n );\n priorityWrite = childTree.value;\n } else {\n node = applySubtreeWrite(\n pathChild(relativePath, childKey),\n childTree,\n node\n );\n }\n });\n // If there was a priority write, we only apply it if the node is not empty\n if (!node.getChild(relativePath).isEmpty() && priorityWrite !== null) {\n node = node.updateChild(\n pathChild(relativePath, '.priority'),\n priorityWrite\n );\n }\n return node;\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert, assertionError, safeGet } from '@firebase/util';\n\nimport {\n CompoundWrite,\n compoundWriteAddWrite,\n compoundWriteAddWrites,\n compoundWriteApply,\n compoundWriteChildCompoundWrite,\n compoundWriteGetCompleteChildren,\n compoundWriteGetCompleteNode,\n compoundWriteHasCompleteWrite,\n compoundWriteIsEmpty,\n compoundWriteRemoveWrite\n} from './CompoundWrite';\nimport { ChildrenNode } from './snap/ChildrenNode';\nimport { Index } from './snap/indexes/Index';\nimport { PRIORITY_INDEX } from './snap/indexes/PriorityIndex';\nimport { NamedNode, Node } from './snap/Node';\nimport {\n newEmptyPath,\n newRelativePath,\n Path,\n pathChild,\n pathContains,\n pathGetFront,\n pathIsEmpty,\n pathPopFront\n} from './util/Path';\nimport { each } from './util/util';\nimport { CacheNode } from './view/CacheNode';\n\n/**\n * Defines a single user-initiated write operation. May be the result of a set(), transaction(), or update() call. In\n * the case of a set() or transaction, snap will be non-null. In the case of an update(), children will be non-null.\n */\nexport interface WriteRecord {\n writeId: number;\n path: Path;\n snap?: Node | null;\n children?: { [k: string]: Node } | null;\n visible: boolean;\n}\n\n/**\n * Create a new WriteTreeRef for the given path. For use with a new sync point at the given path.\n *\n */\nexport function writeTreeChildWrites(\n writeTree: WriteTree,\n path: Path\n): WriteTreeRef {\n return newWriteTreeRef(path, writeTree);\n}\n\n/**\n * Record a new overwrite from user code.\n *\n * @param visible - This is set to false by some transactions. It should be excluded from event caches\n */\nexport function writeTreeAddOverwrite(\n writeTree: WriteTree,\n path: Path,\n snap: Node,\n writeId: number,\n visible?: boolean\n) {\n assert(\n writeId > writeTree.lastWriteId,\n 'Stacking an older write on top of newer ones'\n );\n if (visible === undefined) {\n visible = true;\n }\n writeTree.allWrites.push({\n path,\n snap,\n writeId,\n visible\n });\n\n if (visible) {\n writeTree.visibleWrites = compoundWriteAddWrite(\n writeTree.visibleWrites,\n path,\n snap\n );\n }\n writeTree.lastWriteId = writeId;\n}\n\n/**\n * Record a new merge from user code.\n */\nexport function writeTreeAddMerge(\n writeTree: WriteTree,\n path: Path,\n changedChildren: { [k: string]: Node },\n writeId: number\n) {\n assert(\n writeId > writeTree.lastWriteId,\n 'Stacking an older merge on top of newer ones'\n );\n writeTree.allWrites.push({\n path,\n children: changedChildren,\n writeId,\n visible: true\n });\n\n writeTree.visibleWrites = compoundWriteAddWrites(\n writeTree.visibleWrites,\n path,\n changedChildren\n );\n writeTree.lastWriteId = writeId;\n}\n\nexport function writeTreeGetWrite(\n writeTree: WriteTree,\n writeId: number\n): WriteRecord | null {\n for (let i = 0; i < writeTree.allWrites.length; i++) {\n const record = writeTree.allWrites[i];\n if (record.writeId === writeId) {\n return record;\n }\n }\n return null;\n}\n\n/**\n * Remove a write (either an overwrite or merge) that has been successfully acknowledge by the server. Recalculates\n * the tree if necessary. We return true if it may have been visible, meaning views need to reevaluate.\n *\n * @returns true if the write may have been visible (meaning we'll need to reevaluate / raise\n * events as a result).\n */\nexport function writeTreeRemoveWrite(\n writeTree: WriteTree,\n writeId: number\n): boolean {\n // Note: disabling this check. It could be a transaction that preempted another transaction, and thus was applied\n // out of order.\n //const validClear = revert || this.allWrites_.length === 0 || writeId <= this.allWrites_[0].writeId;\n //assert(validClear, \"Either we don't have this write, or it's the first one in the queue\");\n\n const idx = writeTree.allWrites.findIndex(s => {\n return s.writeId === writeId;\n });\n assert(idx >= 0, 'removeWrite called with nonexistent writeId.');\n const writeToRemove = writeTree.allWrites[idx];\n writeTree.allWrites.splice(idx, 1);\n\n let removedWriteWasVisible = writeToRemove.visible;\n let removedWriteOverlapsWithOtherWrites = false;\n\n let i = writeTree.allWrites.length - 1;\n\n while (removedWriteWasVisible && i >= 0) {\n const currentWrite = writeTree.allWrites[i];\n if (currentWrite.visible) {\n if (\n i >= idx &&\n writeTreeRecordContainsPath_(currentWrite, writeToRemove.path)\n ) {\n // The removed write was completely shadowed by a subsequent write.\n removedWriteWasVisible = false;\n } else if (pathContains(writeToRemove.path, currentWrite.path)) {\n // Either we're covering some writes or they're covering part of us (depending on which came first).\n removedWriteOverlapsWithOtherWrites = true;\n }\n }\n i--;\n }\n\n if (!removedWriteWasVisible) {\n return false;\n } else if (removedWriteOverlapsWithOtherWrites) {\n // There's some shadowing going on. Just rebuild the visible writes from scratch.\n writeTreeResetTree_(writeTree);\n return true;\n } else {\n // There's no shadowing. We can safely just remove the write(s) from visibleWrites.\n if (writeToRemove.snap) {\n writeTree.visibleWrites = compoundWriteRemoveWrite(\n writeTree.visibleWrites,\n writeToRemove.path\n );\n } else {\n const children = writeToRemove.children;\n each(children, (childName: string) => {\n writeTree.visibleWrites = compoundWriteRemoveWrite(\n writeTree.visibleWrites,\n pathChild(writeToRemove.path, childName)\n );\n });\n }\n return true;\n }\n}\n\nfunction writeTreeRecordContainsPath_(\n writeRecord: WriteRecord,\n path: Path\n): boolean {\n if (writeRecord.snap) {\n return pathContains(writeRecord.path, path);\n } else {\n for (const childName in writeRecord.children) {\n if (\n writeRecord.children.hasOwnProperty(childName) &&\n pathContains(pathChild(writeRecord.path, childName), path)\n ) {\n return true;\n }\n }\n return false;\n }\n}\n\n/**\n * Re-layer the writes and merges into a tree so we can efficiently calculate event snapshots\n */\nfunction writeTreeResetTree_(writeTree: WriteTree) {\n writeTree.visibleWrites = writeTreeLayerTree_(\n writeTree.allWrites,\n writeTreeDefaultFilter_,\n newEmptyPath()\n );\n if (writeTree.allWrites.length > 0) {\n writeTree.lastWriteId =\n writeTree.allWrites[writeTree.allWrites.length - 1].writeId;\n } else {\n writeTree.lastWriteId = -1;\n }\n}\n\n/**\n * The default filter used when constructing the tree. Keep everything that's visible.\n */\nfunction writeTreeDefaultFilter_(write: WriteRecord) {\n return write.visible;\n}\n\n/**\n * Static method. Given an array of WriteRecords, a filter for which ones to include, and a path, construct the tree of\n * event data at that path.\n */\nfunction writeTreeLayerTree_(\n writes: WriteRecord[],\n filter: (w: WriteRecord) => boolean,\n treeRoot: Path\n): CompoundWrite {\n let compoundWrite = CompoundWrite.empty();\n for (let i = 0; i < writes.length; ++i) {\n const write = writes[i];\n // Theory, a later set will either:\n // a) abort a relevant transaction, so no need to worry about excluding it from calculating that transaction\n // b) not be relevant to a transaction (separate branch), so again will not affect the data for that transaction\n if (filter(write)) {\n const writePath = write.path;\n let relativePath: Path;\n if (write.snap) {\n if (pathContains(treeRoot, writePath)) {\n relativePath = newRelativePath(treeRoot, writePath);\n compoundWrite = compoundWriteAddWrite(\n compoundWrite,\n relativePath,\n write.snap\n );\n } else if (pathContains(writePath, treeRoot)) {\n relativePath = newRelativePath(writePath, treeRoot);\n compoundWrite = compoundWriteAddWrite(\n compoundWrite,\n newEmptyPath(),\n write.snap.getChild(relativePath)\n );\n } else {\n // There is no overlap between root path and write path, ignore write\n }\n } else if (write.children) {\n if (pathContains(treeRoot, writePath)) {\n relativePath = newRelativePath(treeRoot, writePath);\n compoundWrite = compoundWriteAddWrites(\n compoundWrite,\n relativePath,\n write.children\n );\n } else if (pathContains(writePath, treeRoot)) {\n relativePath = newRelativePath(writePath, treeRoot);\n if (pathIsEmpty(relativePath)) {\n compoundWrite = compoundWriteAddWrites(\n compoundWrite,\n newEmptyPath(),\n write.children\n );\n } else {\n const child = safeGet(write.children, pathGetFront(relativePath));\n if (child) {\n // There exists a child in this node that matches the root path\n const deepNode = child.getChild(pathPopFront(relativePath));\n compoundWrite = compoundWriteAddWrite(\n compoundWrite,\n newEmptyPath(),\n deepNode\n );\n }\n }\n } else {\n // There is no overlap between root path and write path, ignore write\n }\n } else {\n throw assertionError('WriteRecord should have .snap or .children');\n }\n }\n }\n return compoundWrite;\n}\n\n/**\n * Return a complete snapshot for the given path if there's visible write data at that path, else null.\n * No server data is considered.\n *\n */\nexport function writeTreeGetCompleteWriteData(\n writeTree: WriteTree,\n path: Path\n): Node | null {\n return compoundWriteGetCompleteNode(writeTree.visibleWrites, path);\n}\n\n/**\n * Given optional, underlying server data, and an optional set of constraints (exclude some sets, include hidden\n * writes), attempt to calculate a complete snapshot for the given path\n *\n * @param writeIdsToExclude - An optional set to be excluded\n * @param includeHiddenWrites - Defaults to false, whether or not to layer on writes with visible set to false\n */\nexport function writeTreeCalcCompleteEventCache(\n writeTree: WriteTree,\n treePath: Path,\n completeServerCache: Node | null,\n writeIdsToExclude?: number[],\n includeHiddenWrites?: boolean\n): Node | null {\n if (!writeIdsToExclude && !includeHiddenWrites) {\n const shadowingNode = compoundWriteGetCompleteNode(\n writeTree.visibleWrites,\n treePath\n );\n if (shadowingNode != null) {\n return shadowingNode;\n } else {\n const subMerge = compoundWriteChildCompoundWrite(\n writeTree.visibleWrites,\n treePath\n );\n if (compoundWriteIsEmpty(subMerge)) {\n return completeServerCache;\n } else if (\n completeServerCache == null &&\n !compoundWriteHasCompleteWrite(subMerge, newEmptyPath())\n ) {\n // We wouldn't have a complete snapshot, since there's no underlying data and no complete shadow\n return null;\n } else {\n const layeredCache = completeServerCache || ChildrenNode.EMPTY_NODE;\n return compoundWriteApply(subMerge, layeredCache);\n }\n }\n } else {\n const merge = compoundWriteChildCompoundWrite(\n writeTree.visibleWrites,\n treePath\n );\n if (!includeHiddenWrites && compoundWriteIsEmpty(merge)) {\n return completeServerCache;\n } else {\n // If the server cache is null, and we don't have a complete cache, we need to return null\n if (\n !includeHiddenWrites &&\n completeServerCache == null &&\n !compoundWriteHasCompleteWrite(merge, newEmptyPath())\n ) {\n return null;\n } else {\n const filter = function (write: WriteRecord) {\n return (\n (write.visible || includeHiddenWrites) &&\n (!writeIdsToExclude ||\n !~writeIdsToExclude.indexOf(write.writeId)) &&\n (pathContains(write.path, treePath) ||\n pathContains(treePath, write.path))\n );\n };\n const mergeAtPath = writeTreeLayerTree_(\n writeTree.allWrites,\n filter,\n treePath\n );\n const layeredCache = completeServerCache || ChildrenNode.EMPTY_NODE;\n return compoundWriteApply(mergeAtPath, layeredCache);\n }\n }\n }\n}\n\n/**\n * With optional, underlying server data, attempt to return a children node of children that we have complete data for.\n * Used when creating new views, to pre-fill their complete event children snapshot.\n */\nexport function writeTreeCalcCompleteEventChildren(\n writeTree: WriteTree,\n treePath: Path,\n completeServerChildren: ChildrenNode | null\n) {\n let completeChildren = ChildrenNode.EMPTY_NODE as Node;\n const topLevelSet = compoundWriteGetCompleteNode(\n writeTree.visibleWrites,\n treePath\n );\n if (topLevelSet) {\n if (!topLevelSet.isLeafNode()) {\n // we're shadowing everything. Return the children.\n topLevelSet.forEachChild(PRIORITY_INDEX, (childName, childSnap) => {\n completeChildren = completeChildren.updateImmediateChild(\n childName,\n childSnap\n );\n });\n }\n return completeChildren;\n } else if (completeServerChildren) {\n // Layer any children we have on top of this\n // We know we don't have a top-level set, so just enumerate existing children\n const merge = compoundWriteChildCompoundWrite(\n writeTree.visibleWrites,\n treePath\n );\n completeServerChildren.forEachChild(\n PRIORITY_INDEX,\n (childName, childNode) => {\n const node = compoundWriteApply(\n compoundWriteChildCompoundWrite(merge, new Path(childName)),\n childNode\n );\n completeChildren = completeChildren.updateImmediateChild(\n childName,\n node\n );\n }\n );\n // Add any complete children we have from the set\n compoundWriteGetCompleteChildren(merge).forEach(namedNode => {\n completeChildren = completeChildren.updateImmediateChild(\n namedNode.name,\n namedNode.node\n );\n });\n return completeChildren;\n } else {\n // We don't have anything to layer on top of. Layer on any children we have\n // Note that we can return an empty snap if we have a defined delete\n const merge = compoundWriteChildCompoundWrite(\n writeTree.visibleWrites,\n treePath\n );\n compoundWriteGetCompleteChildren(merge).forEach(namedNode => {\n completeChildren = completeChildren.updateImmediateChild(\n namedNode.name,\n namedNode.node\n );\n });\n return completeChildren;\n }\n}\n\n/**\n * Given that the underlying server data has updated, determine what, if anything, needs to be\n * applied to the event cache.\n *\n * Possibilities:\n *\n * 1. No writes are shadowing. Events should be raised, the snap to be applied comes from the server data\n *\n * 2. Some write is completely shadowing. No events to be raised\n *\n * 3. Is partially shadowed. Events\n *\n * Either existingEventSnap or existingServerSnap must exist\n */\nexport function writeTreeCalcEventCacheAfterServerOverwrite(\n writeTree: WriteTree,\n treePath: Path,\n childPath: Path,\n existingEventSnap: Node | null,\n existingServerSnap: Node | null\n): Node | null {\n assert(\n existingEventSnap || existingServerSnap,\n 'Either existingEventSnap or existingServerSnap must exist'\n );\n const path = pathChild(treePath, childPath);\n if (compoundWriteHasCompleteWrite(writeTree.visibleWrites, path)) {\n // At this point we can probably guarantee that we're in case 2, meaning no events\n // May need to check visibility while doing the findRootMostValueAndPath call\n return null;\n } else {\n // No complete shadowing. We're either partially shadowing or not shadowing at all.\n const childMerge = compoundWriteChildCompoundWrite(\n writeTree.visibleWrites,\n path\n );\n if (compoundWriteIsEmpty(childMerge)) {\n // We're not shadowing at all. Case 1\n return existingServerSnap.getChild(childPath);\n } else {\n // This could be more efficient if the serverNode + updates doesn't change the eventSnap\n // However this is tricky to find out, since user updates don't necessary change the server\n // snap, e.g. priority updates on empty nodes, or deep deletes. Another special case is if the server\n // adds nodes, but doesn't change any existing writes. It is therefore not enough to\n // only check if the updates change the serverNode.\n // Maybe check if the merge tree contains these special cases and only do a full overwrite in that case?\n return compoundWriteApply(\n childMerge,\n existingServerSnap.getChild(childPath)\n );\n }\n }\n}\n\n/**\n * Returns a complete child for a given server snap after applying all user writes or null if there is no\n * complete child for this ChildKey.\n */\nexport function writeTreeCalcCompleteChild(\n writeTree: WriteTree,\n treePath: Path,\n childKey: string,\n existingServerSnap: CacheNode\n): Node | null {\n const path = pathChild(treePath, childKey);\n const shadowingNode = compoundWriteGetCompleteNode(\n writeTree.visibleWrites,\n path\n );\n if (shadowingNode != null) {\n return shadowingNode;\n } else {\n if (existingServerSnap.isCompleteForChild(childKey)) {\n const childMerge = compoundWriteChildCompoundWrite(\n writeTree.visibleWrites,\n path\n );\n return compoundWriteApply(\n childMerge,\n existingServerSnap.getNode().getImmediateChild(childKey)\n );\n } else {\n return null;\n }\n }\n}\n\n/**\n * Returns a node if there is a complete overwrite for this path. More specifically, if there is a write at\n * a higher path, this will return the child of that write relative to the write and this path.\n * Returns null if there is no write at this path.\n */\nexport function writeTreeShadowingWrite(\n writeTree: WriteTree,\n path: Path\n): Node | null {\n return compoundWriteGetCompleteNode(writeTree.visibleWrites, path);\n}\n\n/**\n * This method is used when processing child remove events on a query. If we can, we pull in children that were outside\n * the window, but may now be in the window.\n */\nexport function writeTreeCalcIndexedSlice(\n writeTree: WriteTree,\n treePath: Path,\n completeServerData: Node | null,\n startPost: NamedNode,\n count: number,\n reverse: boolean,\n index: Index\n): NamedNode[] {\n let toIterate: Node;\n const merge = compoundWriteChildCompoundWrite(\n writeTree.visibleWrites,\n treePath\n );\n const shadowingNode = compoundWriteGetCompleteNode(merge, newEmptyPath());\n if (shadowingNode != null) {\n toIterate = shadowingNode;\n } else if (completeServerData != null) {\n toIterate = compoundWriteApply(merge, completeServerData);\n } else {\n // no children to iterate on\n return [];\n }\n toIterate = toIterate.withIndex(index);\n if (!toIterate.isEmpty() && !toIterate.isLeafNode()) {\n const nodes = [];\n const cmp = index.getCompare();\n const iter = reverse\n ? (toIterate as ChildrenNode).getReverseIteratorFrom(startPost, index)\n : (toIterate as ChildrenNode).getIteratorFrom(startPost, index);\n let next = iter.getNext();\n while (next && nodes.length < count) {\n if (cmp(next, startPost) !== 0) {\n nodes.push(next);\n }\n next = iter.getNext();\n }\n return nodes;\n } else {\n return [];\n }\n}\n\nexport function newWriteTree(): WriteTree {\n return {\n visibleWrites: CompoundWrite.empty(),\n allWrites: [],\n lastWriteId: -1\n };\n}\n\n/**\n * WriteTree tracks all pending user-initiated writes and has methods to calculate the result of merging them\n * with underlying server data (to create \"event cache\" data). Pending writes are added with addOverwrite()\n * and addMerge(), and removed with removeWrite().\n */\nexport interface WriteTree {\n /**\n * A tree tracking the result of applying all visible writes. This does not include transactions with\n * applyLocally=false or writes that are completely shadowed by other writes.\n */\n visibleWrites: CompoundWrite;\n\n /**\n * A list of all pending writes, regardless of visibility and shadowed-ness. Used to calculate arbitrary\n * sets of the changed data, such as hidden writes (from transactions) or changes with certain writes excluded (also\n * used by transactions).\n */\n allWrites: WriteRecord[];\n\n lastWriteId: number;\n}\n\n/**\n * If possible, returns a complete event cache, using the underlying server data if possible. In addition, can be used\n * to get a cache that includes hidden writes, and excludes arbitrary writes. Note that customizing the returned node\n * can lead to a more expensive calculation.\n *\n * @param writeIdsToExclude - Optional writes to exclude.\n * @param includeHiddenWrites - Defaults to false, whether or not to layer on writes with visible set to false\n */\nexport function writeTreeRefCalcCompleteEventCache(\n writeTreeRef: WriteTreeRef,\n completeServerCache: Node | null,\n writeIdsToExclude?: number[],\n includeHiddenWrites?: boolean\n): Node | null {\n return writeTreeCalcCompleteEventCache(\n writeTreeRef.writeTree,\n writeTreeRef.treePath,\n completeServerCache,\n writeIdsToExclude,\n includeHiddenWrites\n );\n}\n\n/**\n * If possible, returns a children node containing all of the complete children we have data for. The returned data is a\n * mix of the given server data and write data.\n *\n */\nexport function writeTreeRefCalcCompleteEventChildren(\n writeTreeRef: WriteTreeRef,\n completeServerChildren: ChildrenNode | null\n): ChildrenNode {\n return writeTreeCalcCompleteEventChildren(\n writeTreeRef.writeTree,\n writeTreeRef.treePath,\n completeServerChildren\n ) as ChildrenNode;\n}\n\n/**\n * Given that either the underlying server data has updated or the outstanding writes have updated, determine what,\n * if anything, needs to be applied to the event cache.\n *\n * Possibilities:\n *\n * 1. No writes are shadowing. Events should be raised, the snap to be applied comes from the server data\n *\n * 2. Some write is completely shadowing. No events to be raised\n *\n * 3. Is partially shadowed. Events should be raised\n *\n * Either existingEventSnap or existingServerSnap must exist, this is validated via an assert\n *\n *\n */\nexport function writeTreeRefCalcEventCacheAfterServerOverwrite(\n writeTreeRef: WriteTreeRef,\n path: Path,\n existingEventSnap: Node | null,\n existingServerSnap: Node | null\n): Node | null {\n return writeTreeCalcEventCacheAfterServerOverwrite(\n writeTreeRef.writeTree,\n writeTreeRef.treePath,\n path,\n existingEventSnap,\n existingServerSnap\n );\n}\n\n/**\n * Returns a node if there is a complete overwrite for this path. More specifically, if there is a write at\n * a higher path, this will return the child of that write relative to the write and this path.\n * Returns null if there is no write at this path.\n *\n */\nexport function writeTreeRefShadowingWrite(\n writeTreeRef: WriteTreeRef,\n path: Path\n): Node | null {\n return writeTreeShadowingWrite(\n writeTreeRef.writeTree,\n pathChild(writeTreeRef.treePath, path)\n );\n}\n\n/**\n * This method is used when processing child remove events on a query. If we can, we pull in children that were outside\n * the window, but may now be in the window\n */\nexport function writeTreeRefCalcIndexedSlice(\n writeTreeRef: WriteTreeRef,\n completeServerData: Node | null,\n startPost: NamedNode,\n count: number,\n reverse: boolean,\n index: Index\n): NamedNode[] {\n return writeTreeCalcIndexedSlice(\n writeTreeRef.writeTree,\n writeTreeRef.treePath,\n completeServerData,\n startPost,\n count,\n reverse,\n index\n );\n}\n\n/**\n * Returns a complete child for a given server snap after applying all user writes or null if there is no\n * complete child for this ChildKey.\n */\nexport function writeTreeRefCalcCompleteChild(\n writeTreeRef: WriteTreeRef,\n childKey: string,\n existingServerCache: CacheNode\n): Node | null {\n return writeTreeCalcCompleteChild(\n writeTreeRef.writeTree,\n writeTreeRef.treePath,\n childKey,\n existingServerCache\n );\n}\n\n/**\n * Return a WriteTreeRef for a child.\n */\nexport function writeTreeRefChild(\n writeTreeRef: WriteTreeRef,\n childName: string\n): WriteTreeRef {\n return newWriteTreeRef(\n pathChild(writeTreeRef.treePath, childName),\n writeTreeRef.writeTree\n );\n}\n\nexport function newWriteTreeRef(\n path: Path,\n writeTree: WriteTree\n): WriteTreeRef {\n return {\n treePath: path,\n writeTree\n };\n}\n\n/**\n * A WriteTreeRef wraps a WriteTree and a path, for convenient access to a particular subtree. All of the methods\n * just proxy to the underlying WriteTree.\n *\n */\nexport interface WriteTreeRef {\n /**\n * The path to this particular write tree ref. Used for calling methods on writeTree_ while exposing a simpler\n * interface to callers.\n */\n readonly treePath: Path;\n\n /**\n * * A reference to the actual tree of write data. All methods are pass-through to the tree, but with the appropriate\n * path prefixed.\n *\n * This lets us make cheap references to points in the tree for sync points without having to copy and maintain all of\n * the data.\n */\n readonly writeTree: WriteTree;\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert, assertionError } from '@firebase/util';\n\nimport {\n Change,\n ChangeType,\n changeChildAdded,\n changeChildChanged,\n changeChildRemoved\n} from './Change';\n\nexport class ChildChangeAccumulator {\n private readonly changeMap: Map = new Map();\n\n trackChildChange(change: Change) {\n const type = change.type;\n const childKey = change.childName!;\n assert(\n type === ChangeType.CHILD_ADDED ||\n type === ChangeType.CHILD_CHANGED ||\n type === ChangeType.CHILD_REMOVED,\n 'Only child changes supported for tracking'\n );\n assert(\n childKey !== '.priority',\n 'Only non-priority child changes can be tracked.'\n );\n const oldChange = this.changeMap.get(childKey);\n if (oldChange) {\n const oldType = oldChange.type;\n if (\n type === ChangeType.CHILD_ADDED &&\n oldType === ChangeType.CHILD_REMOVED\n ) {\n this.changeMap.set(\n childKey,\n changeChildChanged(\n childKey,\n change.snapshotNode,\n oldChange.snapshotNode\n )\n );\n } else if (\n type === ChangeType.CHILD_REMOVED &&\n oldType === ChangeType.CHILD_ADDED\n ) {\n this.changeMap.delete(childKey);\n } else if (\n type === ChangeType.CHILD_REMOVED &&\n oldType === ChangeType.CHILD_CHANGED\n ) {\n this.changeMap.set(\n childKey,\n changeChildRemoved(childKey, oldChange.oldSnap)\n );\n } else if (\n type === ChangeType.CHILD_CHANGED &&\n oldType === ChangeType.CHILD_ADDED\n ) {\n this.changeMap.set(\n childKey,\n changeChildAdded(childKey, change.snapshotNode)\n );\n } else if (\n type === ChangeType.CHILD_CHANGED &&\n oldType === ChangeType.CHILD_CHANGED\n ) {\n this.changeMap.set(\n childKey,\n changeChildChanged(childKey, change.snapshotNode, oldChange.oldSnap)\n );\n } else {\n throw assertionError(\n 'Illegal combination of changes: ' +\n change +\n ' occurred after ' +\n oldChange\n );\n }\n } else {\n this.changeMap.set(childKey, change);\n }\n }\n\n getChanges(): Change[] {\n return Array.from(this.changeMap.values());\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Index } from '../snap/indexes/Index';\nimport { NamedNode, Node } from '../snap/Node';\nimport {\n WriteTreeRef,\n writeTreeRefCalcCompleteChild,\n writeTreeRefCalcIndexedSlice\n} from '../WriteTree';\n\nimport { CacheNode } from './CacheNode';\nimport { ViewCache, viewCacheGetCompleteServerSnap } from './ViewCache';\n\n/**\n * Since updates to filtered nodes might require nodes to be pulled in from \"outside\" the node, this interface\n * can help to get complete children that can be pulled in.\n * A class implementing this interface takes potentially multiple sources (e.g. user writes, server data from\n * other views etc.) to try it's best to get a complete child that might be useful in pulling into the view.\n *\n * @interface\n */\nexport interface CompleteChildSource {\n getCompleteChild(childKey: string): Node | null;\n\n getChildAfterChild(\n index: Index,\n child: NamedNode,\n reverse: boolean\n ): NamedNode | null;\n}\n\n/**\n * An implementation of CompleteChildSource that never returns any additional children\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class NoCompleteChildSource_ implements CompleteChildSource {\n getCompleteChild(childKey?: string): Node | null {\n return null;\n }\n getChildAfterChild(\n index?: Index,\n child?: NamedNode,\n reverse?: boolean\n ): NamedNode | null {\n return null;\n }\n}\n\n/**\n * Singleton instance.\n */\nexport const NO_COMPLETE_CHILD_SOURCE = new NoCompleteChildSource_();\n\n/**\n * An implementation of CompleteChildSource that uses a WriteTree in addition to any other server data or\n * old event caches available to calculate complete children.\n */\nexport class WriteTreeCompleteChildSource implements CompleteChildSource {\n constructor(\n private writes_: WriteTreeRef,\n private viewCache_: ViewCache,\n private optCompleteServerCache_: Node | null = null\n ) {}\n getCompleteChild(childKey: string): Node | null {\n const node = this.viewCache_.eventCache;\n if (node.isCompleteForChild(childKey)) {\n return node.getNode().getImmediateChild(childKey);\n } else {\n const serverNode =\n this.optCompleteServerCache_ != null\n ? new CacheNode(this.optCompleteServerCache_, true, false)\n : this.viewCache_.serverCache;\n return writeTreeRefCalcCompleteChild(this.writes_, childKey, serverNode);\n }\n }\n getChildAfterChild(\n index: Index,\n child: NamedNode,\n reverse: boolean\n ): NamedNode | null {\n const completeServerData =\n this.optCompleteServerCache_ != null\n ? this.optCompleteServerCache_\n : viewCacheGetCompleteServerSnap(this.viewCache_);\n const nodes = writeTreeRefCalcIndexedSlice(\n this.writes_,\n completeServerData,\n child,\n 1,\n reverse,\n index\n );\n if (nodes.length === 0) {\n return null;\n } else {\n return nodes[0];\n }\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert, assertionError } from '@firebase/util';\n\nimport { AckUserWrite } from '../operation/AckUserWrite';\nimport { Merge } from '../operation/Merge';\nimport { Operation, OperationType } from '../operation/Operation';\nimport { Overwrite } from '../operation/Overwrite';\nimport { ChildrenNode } from '../snap/ChildrenNode';\nimport { KEY_INDEX } from '../snap/indexes/KeyIndex';\nimport { Node } from '../snap/Node';\nimport { ImmutableTree } from '../util/ImmutableTree';\nimport {\n newEmptyPath,\n Path,\n pathChild,\n pathGetBack,\n pathGetFront,\n pathGetLength,\n pathIsEmpty,\n pathParent,\n pathPopFront\n} from '../util/Path';\nimport {\n WriteTreeRef,\n writeTreeRefCalcCompleteChild,\n writeTreeRefCalcCompleteEventCache,\n writeTreeRefCalcCompleteEventChildren,\n writeTreeRefCalcEventCacheAfterServerOverwrite,\n writeTreeRefShadowingWrite\n} from '../WriteTree';\n\nimport { Change, changeValue } from './Change';\nimport { ChildChangeAccumulator } from './ChildChangeAccumulator';\nimport {\n CompleteChildSource,\n NO_COMPLETE_CHILD_SOURCE,\n WriteTreeCompleteChildSource\n} from './CompleteChildSource';\nimport { NodeFilter } from './filter/NodeFilter';\nimport {\n ViewCache,\n viewCacheGetCompleteEventSnap,\n viewCacheGetCompleteServerSnap,\n viewCacheUpdateEventSnap,\n viewCacheUpdateServerSnap\n} from './ViewCache';\n\nexport interface ProcessorResult {\n readonly viewCache: ViewCache;\n readonly changes: Change[];\n}\n\nexport interface ViewProcessor {\n readonly filter: NodeFilter;\n}\n\nexport function newViewProcessor(filter: NodeFilter): ViewProcessor {\n return { filter };\n}\n\nexport function viewProcessorAssertIndexed(\n viewProcessor: ViewProcessor,\n viewCache: ViewCache\n): void {\n assert(\n viewCache.eventCache.getNode().isIndexed(viewProcessor.filter.getIndex()),\n 'Event snap not indexed'\n );\n assert(\n viewCache.serverCache.getNode().isIndexed(viewProcessor.filter.getIndex()),\n 'Server snap not indexed'\n );\n}\n\nexport function viewProcessorApplyOperation(\n viewProcessor: ViewProcessor,\n oldViewCache: ViewCache,\n operation: Operation,\n writesCache: WriteTreeRef,\n completeCache: Node | null\n): ProcessorResult {\n const accumulator = new ChildChangeAccumulator();\n let newViewCache, filterServerNode;\n if (operation.type === OperationType.OVERWRITE) {\n const overwrite = operation as Overwrite;\n if (overwrite.source.fromUser) {\n newViewCache = viewProcessorApplyUserOverwrite(\n viewProcessor,\n oldViewCache,\n overwrite.path,\n overwrite.snap,\n writesCache,\n completeCache,\n accumulator\n );\n } else {\n assert(overwrite.source.fromServer, 'Unknown source.');\n // We filter the node if it's a tagged update or the node has been previously filtered and the\n // update is not at the root in which case it is ok (and necessary) to mark the node unfiltered\n // again\n filterServerNode =\n overwrite.source.tagged ||\n (oldViewCache.serverCache.isFiltered() && !pathIsEmpty(overwrite.path));\n newViewCache = viewProcessorApplyServerOverwrite(\n viewProcessor,\n oldViewCache,\n overwrite.path,\n overwrite.snap,\n writesCache,\n completeCache,\n filterServerNode,\n accumulator\n );\n }\n } else if (operation.type === OperationType.MERGE) {\n const merge = operation as Merge;\n if (merge.source.fromUser) {\n newViewCache = viewProcessorApplyUserMerge(\n viewProcessor,\n oldViewCache,\n merge.path,\n merge.children,\n writesCache,\n completeCache,\n accumulator\n );\n } else {\n assert(merge.source.fromServer, 'Unknown source.');\n // We filter the node if it's a tagged update or the node has been previously filtered\n filterServerNode =\n merge.source.tagged || oldViewCache.serverCache.isFiltered();\n newViewCache = viewProcessorApplyServerMerge(\n viewProcessor,\n oldViewCache,\n merge.path,\n merge.children,\n writesCache,\n completeCache,\n filterServerNode,\n accumulator\n );\n }\n } else if (operation.type === OperationType.ACK_USER_WRITE) {\n const ackUserWrite = operation as AckUserWrite;\n if (!ackUserWrite.revert) {\n newViewCache = viewProcessorAckUserWrite(\n viewProcessor,\n oldViewCache,\n ackUserWrite.path,\n ackUserWrite.affectedTree,\n writesCache,\n completeCache,\n accumulator\n );\n } else {\n newViewCache = viewProcessorRevertUserWrite(\n viewProcessor,\n oldViewCache,\n ackUserWrite.path,\n writesCache,\n completeCache,\n accumulator\n );\n }\n } else if (operation.type === OperationType.LISTEN_COMPLETE) {\n newViewCache = viewProcessorListenComplete(\n viewProcessor,\n oldViewCache,\n operation.path,\n writesCache,\n accumulator\n );\n } else {\n throw assertionError('Unknown operation type: ' + operation.type);\n }\n const changes = accumulator.getChanges();\n viewProcessorMaybeAddValueEvent(oldViewCache, newViewCache, changes);\n return { viewCache: newViewCache, changes };\n}\n\nfunction viewProcessorMaybeAddValueEvent(\n oldViewCache: ViewCache,\n newViewCache: ViewCache,\n accumulator: Change[]\n): void {\n const eventSnap = newViewCache.eventCache;\n if (eventSnap.isFullyInitialized()) {\n const isLeafOrEmpty =\n eventSnap.getNode().isLeafNode() || eventSnap.getNode().isEmpty();\n const oldCompleteSnap = viewCacheGetCompleteEventSnap(oldViewCache);\n if (\n accumulator.length > 0 ||\n !oldViewCache.eventCache.isFullyInitialized() ||\n (isLeafOrEmpty && !eventSnap.getNode().equals(oldCompleteSnap)) ||\n !eventSnap.getNode().getPriority().equals(oldCompleteSnap.getPriority())\n ) {\n accumulator.push(\n changeValue(viewCacheGetCompleteEventSnap(newViewCache))\n );\n }\n }\n}\n\nfunction viewProcessorGenerateEventCacheAfterServerEvent(\n viewProcessor: ViewProcessor,\n viewCache: ViewCache,\n changePath: Path,\n writesCache: WriteTreeRef,\n source: CompleteChildSource,\n accumulator: ChildChangeAccumulator\n): ViewCache {\n const oldEventSnap = viewCache.eventCache;\n if (writeTreeRefShadowingWrite(writesCache, changePath) != null) {\n // we have a shadowing write, ignore changes\n return viewCache;\n } else {\n let newEventCache, serverNode;\n if (pathIsEmpty(changePath)) {\n // TODO: figure out how this plays with \"sliding ack windows\"\n assert(\n viewCache.serverCache.isFullyInitialized(),\n 'If change path is empty, we must have complete server data'\n );\n if (viewCache.serverCache.isFiltered()) {\n // We need to special case this, because we need to only apply writes to complete children, or\n // we might end up raising events for incomplete children. If the server data is filtered deep\n // writes cannot be guaranteed to be complete\n const serverCache = viewCacheGetCompleteServerSnap(viewCache);\n const completeChildren =\n serverCache instanceof ChildrenNode\n ? serverCache\n : ChildrenNode.EMPTY_NODE;\n const completeEventChildren = writeTreeRefCalcCompleteEventChildren(\n writesCache,\n completeChildren\n );\n newEventCache = viewProcessor.filter.updateFullNode(\n viewCache.eventCache.getNode(),\n completeEventChildren,\n accumulator\n );\n } else {\n const completeNode = writeTreeRefCalcCompleteEventCache(\n writesCache,\n viewCacheGetCompleteServerSnap(viewCache)\n );\n newEventCache = viewProcessor.filter.updateFullNode(\n viewCache.eventCache.getNode(),\n completeNode,\n accumulator\n );\n }\n } else {\n const childKey = pathGetFront(changePath);\n if (childKey === '.priority') {\n assert(\n pathGetLength(changePath) === 1,\n \"Can't have a priority with additional path components\"\n );\n const oldEventNode = oldEventSnap.getNode();\n serverNode = viewCache.serverCache.getNode();\n // we might have overwrites for this priority\n const updatedPriority = writeTreeRefCalcEventCacheAfterServerOverwrite(\n writesCache,\n changePath,\n oldEventNode,\n serverNode\n );\n if (updatedPriority != null) {\n newEventCache = viewProcessor.filter.updatePriority(\n oldEventNode,\n updatedPriority\n );\n } else {\n // priority didn't change, keep old node\n newEventCache = oldEventSnap.getNode();\n }\n } else {\n const childChangePath = pathPopFront(changePath);\n // update child\n let newEventChild;\n if (oldEventSnap.isCompleteForChild(childKey)) {\n serverNode = viewCache.serverCache.getNode();\n const eventChildUpdate =\n writeTreeRefCalcEventCacheAfterServerOverwrite(\n writesCache,\n changePath,\n oldEventSnap.getNode(),\n serverNode\n );\n if (eventChildUpdate != null) {\n newEventChild = oldEventSnap\n .getNode()\n .getImmediateChild(childKey)\n .updateChild(childChangePath, eventChildUpdate);\n } else {\n // Nothing changed, just keep the old child\n newEventChild = oldEventSnap.getNode().getImmediateChild(childKey);\n }\n } else {\n newEventChild = writeTreeRefCalcCompleteChild(\n writesCache,\n childKey,\n viewCache.serverCache\n );\n }\n if (newEventChild != null) {\n newEventCache = viewProcessor.filter.updateChild(\n oldEventSnap.getNode(),\n childKey,\n newEventChild,\n childChangePath,\n source,\n accumulator\n );\n } else {\n // no complete child available or no change\n newEventCache = oldEventSnap.getNode();\n }\n }\n }\n return viewCacheUpdateEventSnap(\n viewCache,\n newEventCache,\n oldEventSnap.isFullyInitialized() || pathIsEmpty(changePath),\n viewProcessor.filter.filtersNodes()\n );\n }\n}\n\nfunction viewProcessorApplyServerOverwrite(\n viewProcessor: ViewProcessor,\n oldViewCache: ViewCache,\n changePath: Path,\n changedSnap: Node,\n writesCache: WriteTreeRef,\n completeCache: Node | null,\n filterServerNode: boolean,\n accumulator: ChildChangeAccumulator\n): ViewCache {\n const oldServerSnap = oldViewCache.serverCache;\n let newServerCache;\n const serverFilter = filterServerNode\n ? viewProcessor.filter\n : viewProcessor.filter.getIndexedFilter();\n if (pathIsEmpty(changePath)) {\n newServerCache = serverFilter.updateFullNode(\n oldServerSnap.getNode(),\n changedSnap,\n null\n );\n } else if (serverFilter.filtersNodes() && !oldServerSnap.isFiltered()) {\n // we want to filter the server node, but we didn't filter the server node yet, so simulate a full update\n const newServerNode = oldServerSnap\n .getNode()\n .updateChild(changePath, changedSnap);\n newServerCache = serverFilter.updateFullNode(\n oldServerSnap.getNode(),\n newServerNode,\n null\n );\n } else {\n const childKey = pathGetFront(changePath);\n if (\n !oldServerSnap.isCompleteForPath(changePath) &&\n pathGetLength(changePath) > 1\n ) {\n // We don't update incomplete nodes with updates intended for other listeners\n return oldViewCache;\n }\n const childChangePath = pathPopFront(changePath);\n const childNode = oldServerSnap.getNode().getImmediateChild(childKey);\n const newChildNode = childNode.updateChild(childChangePath, changedSnap);\n if (childKey === '.priority') {\n newServerCache = serverFilter.updatePriority(\n oldServerSnap.getNode(),\n newChildNode\n );\n } else {\n newServerCache = serverFilter.updateChild(\n oldServerSnap.getNode(),\n childKey,\n newChildNode,\n childChangePath,\n NO_COMPLETE_CHILD_SOURCE,\n null\n );\n }\n }\n const newViewCache = viewCacheUpdateServerSnap(\n oldViewCache,\n newServerCache,\n oldServerSnap.isFullyInitialized() || pathIsEmpty(changePath),\n serverFilter.filtersNodes()\n );\n const source = new WriteTreeCompleteChildSource(\n writesCache,\n newViewCache,\n completeCache\n );\n return viewProcessorGenerateEventCacheAfterServerEvent(\n viewProcessor,\n newViewCache,\n changePath,\n writesCache,\n source,\n accumulator\n );\n}\n\nfunction viewProcessorApplyUserOverwrite(\n viewProcessor: ViewProcessor,\n oldViewCache: ViewCache,\n changePath: Path,\n changedSnap: Node,\n writesCache: WriteTreeRef,\n completeCache: Node | null,\n accumulator: ChildChangeAccumulator\n): ViewCache {\n const oldEventSnap = oldViewCache.eventCache;\n let newViewCache, newEventCache;\n const source = new WriteTreeCompleteChildSource(\n writesCache,\n oldViewCache,\n completeCache\n );\n if (pathIsEmpty(changePath)) {\n newEventCache = viewProcessor.filter.updateFullNode(\n oldViewCache.eventCache.getNode(),\n changedSnap,\n accumulator\n );\n newViewCache = viewCacheUpdateEventSnap(\n oldViewCache,\n newEventCache,\n true,\n viewProcessor.filter.filtersNodes()\n );\n } else {\n const childKey = pathGetFront(changePath);\n if (childKey === '.priority') {\n newEventCache = viewProcessor.filter.updatePriority(\n oldViewCache.eventCache.getNode(),\n changedSnap\n );\n newViewCache = viewCacheUpdateEventSnap(\n oldViewCache,\n newEventCache,\n oldEventSnap.isFullyInitialized(),\n oldEventSnap.isFiltered()\n );\n } else {\n const childChangePath = pathPopFront(changePath);\n const oldChild = oldEventSnap.getNode().getImmediateChild(childKey);\n let newChild;\n if (pathIsEmpty(childChangePath)) {\n // Child overwrite, we can replace the child\n newChild = changedSnap;\n } else {\n const childNode = source.getCompleteChild(childKey);\n if (childNode != null) {\n if (\n pathGetBack(childChangePath) === '.priority' &&\n childNode.getChild(pathParent(childChangePath)).isEmpty()\n ) {\n // This is a priority update on an empty node. If this node exists on the server, the\n // server will send down the priority in the update, so ignore for now\n newChild = childNode;\n } else {\n newChild = childNode.updateChild(childChangePath, changedSnap);\n }\n } else {\n // There is no complete child node available\n newChild = ChildrenNode.EMPTY_NODE;\n }\n }\n if (!oldChild.equals(newChild)) {\n const newEventSnap = viewProcessor.filter.updateChild(\n oldEventSnap.getNode(),\n childKey,\n newChild,\n childChangePath,\n source,\n accumulator\n );\n newViewCache = viewCacheUpdateEventSnap(\n oldViewCache,\n newEventSnap,\n oldEventSnap.isFullyInitialized(),\n viewProcessor.filter.filtersNodes()\n );\n } else {\n newViewCache = oldViewCache;\n }\n }\n }\n return newViewCache;\n}\n\nfunction viewProcessorCacheHasChild(\n viewCache: ViewCache,\n childKey: string\n): boolean {\n return viewCache.eventCache.isCompleteForChild(childKey);\n}\n\nfunction viewProcessorApplyUserMerge(\n viewProcessor: ViewProcessor,\n viewCache: ViewCache,\n path: Path,\n changedChildren: ImmutableTree,\n writesCache: WriteTreeRef,\n serverCache: Node | null,\n accumulator: ChildChangeAccumulator\n): ViewCache {\n // HACK: In the case of a limit query, there may be some changes that bump things out of the\n // window leaving room for new items. It's important we process these changes first, so we\n // iterate the changes twice, first processing any that affect items currently in view.\n // TODO: I consider an item \"in view\" if cacheHasChild is true, which checks both the server\n // and event snap. I'm not sure if this will result in edge cases when a child is in one but\n // not the other.\n let curViewCache = viewCache;\n changedChildren.foreach((relativePath, childNode) => {\n const writePath = pathChild(path, relativePath);\n if (viewProcessorCacheHasChild(viewCache, pathGetFront(writePath))) {\n curViewCache = viewProcessorApplyUserOverwrite(\n viewProcessor,\n curViewCache,\n writePath,\n childNode,\n writesCache,\n serverCache,\n accumulator\n );\n }\n });\n\n changedChildren.foreach((relativePath, childNode) => {\n const writePath = pathChild(path, relativePath);\n if (!viewProcessorCacheHasChild(viewCache, pathGetFront(writePath))) {\n curViewCache = viewProcessorApplyUserOverwrite(\n viewProcessor,\n curViewCache,\n writePath,\n childNode,\n writesCache,\n serverCache,\n accumulator\n );\n }\n });\n\n return curViewCache;\n}\n\nfunction viewProcessorApplyMerge(\n viewProcessor: ViewProcessor,\n node: Node,\n merge: ImmutableTree\n): Node {\n merge.foreach((relativePath, childNode) => {\n node = node.updateChild(relativePath, childNode);\n });\n return node;\n}\n\nfunction viewProcessorApplyServerMerge(\n viewProcessor: ViewProcessor,\n viewCache: ViewCache,\n path: Path,\n changedChildren: ImmutableTree,\n writesCache: WriteTreeRef,\n serverCache: Node | null,\n filterServerNode: boolean,\n accumulator: ChildChangeAccumulator\n): ViewCache {\n // If we don't have a cache yet, this merge was intended for a previously listen in the same location. Ignore it and\n // wait for the complete data update coming soon.\n if (\n viewCache.serverCache.getNode().isEmpty() &&\n !viewCache.serverCache.isFullyInitialized()\n ) {\n return viewCache;\n }\n\n // HACK: In the case of a limit query, there may be some changes that bump things out of the\n // window leaving room for new items. It's important we process these changes first, so we\n // iterate the changes twice, first processing any that affect items currently in view.\n // TODO: I consider an item \"in view\" if cacheHasChild is true, which checks both the server\n // and event snap. I'm not sure if this will result in edge cases when a child is in one but\n // not the other.\n let curViewCache = viewCache;\n let viewMergeTree: ImmutableTree;\n if (pathIsEmpty(path)) {\n viewMergeTree = changedChildren;\n } else {\n viewMergeTree = new ImmutableTree(null).setTree(\n path,\n changedChildren\n );\n }\n const serverNode = viewCache.serverCache.getNode();\n viewMergeTree.children.inorderTraversal((childKey, childTree) => {\n if (serverNode.hasChild(childKey)) {\n const serverChild = viewCache.serverCache\n .getNode()\n .getImmediateChild(childKey);\n const newChild = viewProcessorApplyMerge(\n viewProcessor,\n serverChild,\n childTree\n );\n curViewCache = viewProcessorApplyServerOverwrite(\n viewProcessor,\n curViewCache,\n new Path(childKey),\n newChild,\n writesCache,\n serverCache,\n filterServerNode,\n accumulator\n );\n }\n });\n viewMergeTree.children.inorderTraversal((childKey, childMergeTree) => {\n const isUnknownDeepMerge =\n !viewCache.serverCache.isCompleteForChild(childKey) &&\n childMergeTree.value === null;\n if (!serverNode.hasChild(childKey) && !isUnknownDeepMerge) {\n const serverChild = viewCache.serverCache\n .getNode()\n .getImmediateChild(childKey);\n const newChild = viewProcessorApplyMerge(\n viewProcessor,\n serverChild,\n childMergeTree\n );\n curViewCache = viewProcessorApplyServerOverwrite(\n viewProcessor,\n curViewCache,\n new Path(childKey),\n newChild,\n writesCache,\n serverCache,\n filterServerNode,\n accumulator\n );\n }\n });\n\n return curViewCache;\n}\n\nfunction viewProcessorAckUserWrite(\n viewProcessor: ViewProcessor,\n viewCache: ViewCache,\n ackPath: Path,\n affectedTree: ImmutableTree,\n writesCache: WriteTreeRef,\n completeCache: Node | null,\n accumulator: ChildChangeAccumulator\n): ViewCache {\n if (writeTreeRefShadowingWrite(writesCache, ackPath) != null) {\n return viewCache;\n }\n\n // Only filter server node if it is currently filtered\n const filterServerNode = viewCache.serverCache.isFiltered();\n\n // Essentially we'll just get our existing server cache for the affected paths and re-apply it as a server update\n // now that it won't be shadowed.\n const serverCache = viewCache.serverCache;\n if (affectedTree.value != null) {\n // This is an overwrite.\n if (\n (pathIsEmpty(ackPath) && serverCache.isFullyInitialized()) ||\n serverCache.isCompleteForPath(ackPath)\n ) {\n return viewProcessorApplyServerOverwrite(\n viewProcessor,\n viewCache,\n ackPath,\n serverCache.getNode().getChild(ackPath),\n writesCache,\n completeCache,\n filterServerNode,\n accumulator\n );\n } else if (pathIsEmpty(ackPath)) {\n // This is a goofy edge case where we are acking data at this location but don't have full data. We\n // should just re-apply whatever we have in our cache as a merge.\n let changedChildren = new ImmutableTree(null);\n serverCache.getNode().forEachChild(KEY_INDEX, (name, node) => {\n changedChildren = changedChildren.set(new Path(name), node);\n });\n return viewProcessorApplyServerMerge(\n viewProcessor,\n viewCache,\n ackPath,\n changedChildren,\n writesCache,\n completeCache,\n filterServerNode,\n accumulator\n );\n } else {\n return viewCache;\n }\n } else {\n // This is a merge.\n let changedChildren = new ImmutableTree(null);\n affectedTree.foreach((mergePath, value) => {\n const serverCachePath = pathChild(ackPath, mergePath);\n if (serverCache.isCompleteForPath(serverCachePath)) {\n changedChildren = changedChildren.set(\n mergePath,\n serverCache.getNode().getChild(serverCachePath)\n );\n }\n });\n return viewProcessorApplyServerMerge(\n viewProcessor,\n viewCache,\n ackPath,\n changedChildren,\n writesCache,\n completeCache,\n filterServerNode,\n accumulator\n );\n }\n}\n\nfunction viewProcessorListenComplete(\n viewProcessor: ViewProcessor,\n viewCache: ViewCache,\n path: Path,\n writesCache: WriteTreeRef,\n accumulator: ChildChangeAccumulator\n): ViewCache {\n const oldServerNode = viewCache.serverCache;\n const newViewCache = viewCacheUpdateServerSnap(\n viewCache,\n oldServerNode.getNode(),\n oldServerNode.isFullyInitialized() || pathIsEmpty(path),\n oldServerNode.isFiltered()\n );\n return viewProcessorGenerateEventCacheAfterServerEvent(\n viewProcessor,\n newViewCache,\n path,\n writesCache,\n NO_COMPLETE_CHILD_SOURCE,\n accumulator\n );\n}\n\nfunction viewProcessorRevertUserWrite(\n viewProcessor: ViewProcessor,\n viewCache: ViewCache,\n path: Path,\n writesCache: WriteTreeRef,\n completeServerCache: Node | null,\n accumulator: ChildChangeAccumulator\n): ViewCache {\n let complete;\n if (writeTreeRefShadowingWrite(writesCache, path) != null) {\n return viewCache;\n } else {\n const source = new WriteTreeCompleteChildSource(\n writesCache,\n viewCache,\n completeServerCache\n );\n const oldEventCache = viewCache.eventCache.getNode();\n let newEventCache;\n if (pathIsEmpty(path) || pathGetFront(path) === '.priority') {\n let newNode;\n if (viewCache.serverCache.isFullyInitialized()) {\n newNode = writeTreeRefCalcCompleteEventCache(\n writesCache,\n viewCacheGetCompleteServerSnap(viewCache)\n );\n } else {\n const serverChildren = viewCache.serverCache.getNode();\n assert(\n serverChildren instanceof ChildrenNode,\n 'serverChildren would be complete if leaf node'\n );\n newNode = writeTreeRefCalcCompleteEventChildren(\n writesCache,\n serverChildren as ChildrenNode\n );\n }\n newNode = newNode as Node;\n newEventCache = viewProcessor.filter.updateFullNode(\n oldEventCache,\n newNode,\n accumulator\n );\n } else {\n const childKey = pathGetFront(path);\n let newChild = writeTreeRefCalcCompleteChild(\n writesCache,\n childKey,\n viewCache.serverCache\n );\n if (\n newChild == null &&\n viewCache.serverCache.isCompleteForChild(childKey)\n ) {\n newChild = oldEventCache.getImmediateChild(childKey);\n }\n if (newChild != null) {\n newEventCache = viewProcessor.filter.updateChild(\n oldEventCache,\n childKey,\n newChild,\n pathPopFront(path),\n source,\n accumulator\n );\n } else if (viewCache.eventCache.getNode().hasChild(childKey)) {\n // No complete child available, delete the existing one, if any\n newEventCache = viewProcessor.filter.updateChild(\n oldEventCache,\n childKey,\n ChildrenNode.EMPTY_NODE,\n pathPopFront(path),\n source,\n accumulator\n );\n } else {\n newEventCache = oldEventCache;\n }\n if (\n newEventCache.isEmpty() &&\n viewCache.serverCache.isFullyInitialized()\n ) {\n // We might have reverted all child writes. Maybe the old event was a leaf node\n complete = writeTreeRefCalcCompleteEventCache(\n writesCache,\n viewCacheGetCompleteServerSnap(viewCache)\n );\n if (complete.isLeafNode()) {\n newEventCache = viewProcessor.filter.updateFullNode(\n newEventCache,\n complete,\n accumulator\n );\n }\n }\n }\n complete =\n viewCache.serverCache.isFullyInitialized() ||\n writeTreeRefShadowingWrite(writesCache, newEmptyPath()) != null;\n return viewCacheUpdateEventSnap(\n viewCache,\n newEventCache,\n complete,\n viewProcessor.filter.filtersNodes()\n );\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert } from '@firebase/util';\n\nimport { Operation, OperationType } from '../operation/Operation';\nimport { ChildrenNode } from '../snap/ChildrenNode';\nimport { PRIORITY_INDEX } from '../snap/indexes/PriorityIndex';\nimport { Node } from '../snap/Node';\nimport { Path, pathGetFront, pathIsEmpty } from '../util/Path';\nimport { WriteTreeRef } from '../WriteTree';\n\nimport { CacheNode } from './CacheNode';\nimport { Change, changeChildAdded, changeValue } from './Change';\nimport { CancelEvent, Event } from './Event';\nimport {\n EventGenerator,\n eventGeneratorGenerateEventsForChanges\n} from './EventGenerator';\nimport { EventRegistration, QueryContext } from './EventRegistration';\nimport { IndexedFilter } from './filter/IndexedFilter';\nimport { queryParamsGetNodeFilter } from './QueryParams';\nimport {\n newViewCache,\n ViewCache,\n viewCacheGetCompleteEventSnap,\n viewCacheGetCompleteServerSnap\n} from './ViewCache';\nimport {\n newViewProcessor,\n ViewProcessor,\n viewProcessorApplyOperation,\n viewProcessorAssertIndexed\n} from './ViewProcessor';\n\n/**\n * A view represents a specific location and query that has 1 or more event registrations.\n *\n * It does several things:\n * - Maintains the list of event registrations for this location/query.\n * - Maintains a cache of the data visible for this location/query.\n * - Applies new operations (via applyOperation), updates the cache, and based on the event\n * registrations returns the set of events to be raised.\n */\nexport class View {\n processor_: ViewProcessor;\n viewCache_: ViewCache;\n eventRegistrations_: EventRegistration[] = [];\n eventGenerator_: EventGenerator;\n\n constructor(private query_: QueryContext, initialViewCache: ViewCache) {\n const params = this.query_._queryParams;\n\n const indexFilter = new IndexedFilter(params.getIndex());\n const filter = queryParamsGetNodeFilter(params);\n\n this.processor_ = newViewProcessor(filter);\n\n const initialServerCache = initialViewCache.serverCache;\n const initialEventCache = initialViewCache.eventCache;\n\n // Don't filter server node with other filter than index, wait for tagged listen\n const serverSnap = indexFilter.updateFullNode(\n ChildrenNode.EMPTY_NODE,\n initialServerCache.getNode(),\n null\n );\n const eventSnap = filter.updateFullNode(\n ChildrenNode.EMPTY_NODE,\n initialEventCache.getNode(),\n null\n );\n const newServerCache = new CacheNode(\n serverSnap,\n initialServerCache.isFullyInitialized(),\n indexFilter.filtersNodes()\n );\n const newEventCache = new CacheNode(\n eventSnap,\n initialEventCache.isFullyInitialized(),\n filter.filtersNodes()\n );\n\n this.viewCache_ = newViewCache(newEventCache, newServerCache);\n this.eventGenerator_ = new EventGenerator(this.query_);\n }\n\n get query(): QueryContext {\n return this.query_;\n }\n}\n\nexport function viewGetServerCache(view: View): Node | null {\n return view.viewCache_.serverCache.getNode();\n}\n\nexport function viewGetCompleteNode(view: View): Node | null {\n return viewCacheGetCompleteEventSnap(view.viewCache_);\n}\n\nexport function viewGetCompleteServerCache(\n view: View,\n path: Path\n): Node | null {\n const cache = viewCacheGetCompleteServerSnap(view.viewCache_);\n if (cache) {\n // If this isn't a \"loadsAllData\" view, then cache isn't actually a complete cache and\n // we need to see if it contains the child we're interested in.\n if (\n view.query._queryParams.loadsAllData() ||\n (!pathIsEmpty(path) &&\n !cache.getImmediateChild(pathGetFront(path)).isEmpty())\n ) {\n return cache.getChild(path);\n }\n }\n return null;\n}\n\nexport function viewIsEmpty(view: View): boolean {\n return view.eventRegistrations_.length === 0;\n}\n\nexport function viewAddEventRegistration(\n view: View,\n eventRegistration: EventRegistration\n) {\n view.eventRegistrations_.push(eventRegistration);\n}\n\n/**\n * @param eventRegistration - If null, remove all callbacks.\n * @param cancelError - If a cancelError is provided, appropriate cancel events will be returned.\n * @returns Cancel events, if cancelError was provided.\n */\nexport function viewRemoveEventRegistration(\n view: View,\n eventRegistration: EventRegistration | null,\n cancelError?: Error\n): Event[] {\n const cancelEvents: CancelEvent[] = [];\n if (cancelError) {\n assert(\n eventRegistration == null,\n 'A cancel should cancel all event registrations.'\n );\n const path = view.query._path;\n view.eventRegistrations_.forEach(registration => {\n const maybeEvent = registration.createCancelEvent(cancelError, path);\n if (maybeEvent) {\n cancelEvents.push(maybeEvent);\n }\n });\n }\n\n if (eventRegistration) {\n let remaining = [];\n for (let i = 0; i < view.eventRegistrations_.length; ++i) {\n const existing = view.eventRegistrations_[i];\n if (!existing.matches(eventRegistration)) {\n remaining.push(existing);\n } else if (eventRegistration.hasAnyCallback()) {\n // We're removing just this one\n remaining = remaining.concat(view.eventRegistrations_.slice(i + 1));\n break;\n }\n }\n view.eventRegistrations_ = remaining;\n } else {\n view.eventRegistrations_ = [];\n }\n return cancelEvents;\n}\n\n/**\n * Applies the given Operation, updates our cache, and returns the appropriate events.\n */\nexport function viewApplyOperation(\n view: View,\n operation: Operation,\n writesCache: WriteTreeRef,\n completeServerCache: Node | null\n): Event[] {\n if (\n operation.type === OperationType.MERGE &&\n operation.source.queryId !== null\n ) {\n assert(\n viewCacheGetCompleteServerSnap(view.viewCache_),\n 'We should always have a full cache before handling merges'\n );\n assert(\n viewCacheGetCompleteEventSnap(view.viewCache_),\n 'Missing event cache, even though we have a server cache'\n );\n }\n\n const oldViewCache = view.viewCache_;\n const result = viewProcessorApplyOperation(\n view.processor_,\n oldViewCache,\n operation,\n writesCache,\n completeServerCache\n );\n viewProcessorAssertIndexed(view.processor_, result.viewCache);\n\n assert(\n result.viewCache.serverCache.isFullyInitialized() ||\n !oldViewCache.serverCache.isFullyInitialized(),\n 'Once a server snap is complete, it should never go back'\n );\n\n view.viewCache_ = result.viewCache;\n\n return viewGenerateEventsForChanges_(\n view,\n result.changes,\n result.viewCache.eventCache.getNode(),\n null\n );\n}\n\nexport function viewGetInitialEvents(\n view: View,\n registration: EventRegistration\n): Event[] {\n const eventSnap = view.viewCache_.eventCache;\n const initialChanges: Change[] = [];\n if (!eventSnap.getNode().isLeafNode()) {\n const eventNode = eventSnap.getNode() as ChildrenNode;\n eventNode.forEachChild(PRIORITY_INDEX, (key, childNode) => {\n initialChanges.push(changeChildAdded(key, childNode));\n });\n }\n if (eventSnap.isFullyInitialized()) {\n initialChanges.push(changeValue(eventSnap.getNode()));\n }\n return viewGenerateEventsForChanges_(\n view,\n initialChanges,\n eventSnap.getNode(),\n registration\n );\n}\n\nfunction viewGenerateEventsForChanges_(\n view: View,\n changes: Change[],\n eventCache: Node,\n eventRegistration?: EventRegistration\n): Event[] {\n const registrations = eventRegistration\n ? [eventRegistration]\n : view.eventRegistrations_;\n return eventGeneratorGenerateEventsForChanges(\n view.eventGenerator_,\n changes,\n eventCache,\n registrations\n );\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert } from '@firebase/util';\n\nimport { ReferenceConstructor } from '../api/Reference';\n\nimport { Operation } from './operation/Operation';\nimport { ChildrenNode } from './snap/ChildrenNode';\nimport { Node } from './snap/Node';\nimport { Path } from './util/Path';\nimport { CacheNode } from './view/CacheNode';\nimport { Event } from './view/Event';\nimport { EventRegistration, QueryContext } from './view/EventRegistration';\nimport {\n View,\n viewAddEventRegistration,\n viewApplyOperation,\n viewGetCompleteServerCache,\n viewGetInitialEvents,\n viewIsEmpty,\n viewRemoveEventRegistration\n} from './view/View';\nimport { newViewCache } from './view/ViewCache';\nimport {\n WriteTreeRef,\n writeTreeRefCalcCompleteEventCache,\n writeTreeRefCalcCompleteEventChildren\n} from './WriteTree';\n\nlet referenceConstructor: ReferenceConstructor;\n\n/**\n * SyncPoint represents a single location in a SyncTree with 1 or more event registrations, meaning we need to\n * maintain 1 or more Views at this location to cache server data and raise appropriate events for server changes\n * and user writes (set, transaction, update).\n *\n * It's responsible for:\n * - Maintaining the set of 1 or more views necessary at this location (a SyncPoint with 0 views should be removed).\n * - Proxying user / server operations to the views as appropriate (i.e. applyServerOverwrite,\n * applyUserOverwrite, etc.)\n */\nexport class SyncPoint {\n /**\n * The Views being tracked at this location in the tree, stored as a map where the key is a\n * queryId and the value is the View for that query.\n *\n * NOTE: This list will be quite small (usually 1, but perhaps 2 or 3; any more is an odd use case).\n */\n readonly views: Map = new Map();\n}\n\nexport function syncPointSetReferenceConstructor(\n val: ReferenceConstructor\n): void {\n assert(\n !referenceConstructor,\n '__referenceConstructor has already been defined'\n );\n referenceConstructor = val;\n}\n\nfunction syncPointGetReferenceConstructor(): ReferenceConstructor {\n assert(referenceConstructor, 'Reference.ts has not been loaded');\n return referenceConstructor;\n}\n\nexport function syncPointIsEmpty(syncPoint: SyncPoint): boolean {\n return syncPoint.views.size === 0;\n}\n\nexport function syncPointApplyOperation(\n syncPoint: SyncPoint,\n operation: Operation,\n writesCache: WriteTreeRef,\n optCompleteServerCache: Node | null\n): Event[] {\n const queryId = operation.source.queryId;\n if (queryId !== null) {\n const view = syncPoint.views.get(queryId);\n assert(view != null, 'SyncTree gave us an op for an invalid query.');\n return viewApplyOperation(\n view,\n operation,\n writesCache,\n optCompleteServerCache\n );\n } else {\n let events: Event[] = [];\n\n for (const view of syncPoint.views.values()) {\n events = events.concat(\n viewApplyOperation(view, operation, writesCache, optCompleteServerCache)\n );\n }\n\n return events;\n }\n}\n\n/**\n * Get a view for the specified query.\n *\n * @param query - The query to return a view for\n * @param writesCache\n * @param serverCache\n * @param serverCacheComplete\n * @returns Events to raise.\n */\nexport function syncPointGetView(\n syncPoint: SyncPoint,\n query: QueryContext,\n writesCache: WriteTreeRef,\n serverCache: Node | null,\n serverCacheComplete: boolean\n): View {\n const queryId = query._queryIdentifier;\n const view = syncPoint.views.get(queryId);\n if (!view) {\n // TODO: make writesCache take flag for complete server node\n let eventCache = writeTreeRefCalcCompleteEventCache(\n writesCache,\n serverCacheComplete ? serverCache : null\n );\n let eventCacheComplete = false;\n if (eventCache) {\n eventCacheComplete = true;\n } else if (serverCache instanceof ChildrenNode) {\n eventCache = writeTreeRefCalcCompleteEventChildren(\n writesCache,\n serverCache\n );\n eventCacheComplete = false;\n } else {\n eventCache = ChildrenNode.EMPTY_NODE;\n eventCacheComplete = false;\n }\n const viewCache = newViewCache(\n new CacheNode(eventCache, eventCacheComplete, false),\n new CacheNode(serverCache, serverCacheComplete, false)\n );\n return new View(query, viewCache);\n }\n return view;\n}\n\n/**\n * Add an event callback for the specified query.\n *\n * @param query\n * @param eventRegistration\n * @param writesCache\n * @param serverCache - Complete server cache, if we have it.\n * @param serverCacheComplete\n * @returns Events to raise.\n */\nexport function syncPointAddEventRegistration(\n syncPoint: SyncPoint,\n query: QueryContext,\n eventRegistration: EventRegistration,\n writesCache: WriteTreeRef,\n serverCache: Node | null,\n serverCacheComplete: boolean\n): Event[] {\n const view = syncPointGetView(\n syncPoint,\n query,\n writesCache,\n serverCache,\n serverCacheComplete\n );\n if (!syncPoint.views.has(query._queryIdentifier)) {\n syncPoint.views.set(query._queryIdentifier, view);\n }\n // This is guaranteed to exist now, we just created anything that was missing\n viewAddEventRegistration(view, eventRegistration);\n return viewGetInitialEvents(view, eventRegistration);\n}\n\n/**\n * Remove event callback(s). Return cancelEvents if a cancelError is specified.\n *\n * If query is the default query, we'll check all views for the specified eventRegistration.\n * If eventRegistration is null, we'll remove all callbacks for the specified view(s).\n *\n * @param eventRegistration - If null, remove all callbacks.\n * @param cancelError - If a cancelError is provided, appropriate cancel events will be returned.\n * @returns removed queries and any cancel events\n */\nexport function syncPointRemoveEventRegistration(\n syncPoint: SyncPoint,\n query: QueryContext,\n eventRegistration: EventRegistration | null,\n cancelError?: Error\n): { removed: QueryContext[]; events: Event[] } {\n const queryId = query._queryIdentifier;\n const removed: QueryContext[] = [];\n let cancelEvents: Event[] = [];\n const hadCompleteView = syncPointHasCompleteView(syncPoint);\n if (queryId === 'default') {\n // When you do ref.off(...), we search all views for the registration to remove.\n for (const [viewQueryId, view] of syncPoint.views.entries()) {\n cancelEvents = cancelEvents.concat(\n viewRemoveEventRegistration(view, eventRegistration, cancelError)\n );\n if (viewIsEmpty(view)) {\n syncPoint.views.delete(viewQueryId);\n\n // We'll deal with complete views later.\n if (!view.query._queryParams.loadsAllData()) {\n removed.push(view.query);\n }\n }\n }\n } else {\n // remove the callback from the specific view.\n const view = syncPoint.views.get(queryId);\n if (view) {\n cancelEvents = cancelEvents.concat(\n viewRemoveEventRegistration(view, eventRegistration, cancelError)\n );\n if (viewIsEmpty(view)) {\n syncPoint.views.delete(queryId);\n\n // We'll deal with complete views later.\n if (!view.query._queryParams.loadsAllData()) {\n removed.push(view.query);\n }\n }\n }\n }\n\n if (hadCompleteView && !syncPointHasCompleteView(syncPoint)) {\n // We removed our last complete view.\n removed.push(\n new (syncPointGetReferenceConstructor())(query._repo, query._path)\n );\n }\n\n return { removed, events: cancelEvents };\n}\n\nexport function syncPointGetQueryViews(syncPoint: SyncPoint): View[] {\n const result = [];\n for (const view of syncPoint.views.values()) {\n if (!view.query._queryParams.loadsAllData()) {\n result.push(view);\n }\n }\n return result;\n}\n\n/**\n * @param path - The path to the desired complete snapshot\n * @returns A complete cache, if it exists\n */\nexport function syncPointGetCompleteServerCache(\n syncPoint: SyncPoint,\n path: Path\n): Node | null {\n let serverCache: Node | null = null;\n for (const view of syncPoint.views.values()) {\n serverCache = serverCache || viewGetCompleteServerCache(view, path);\n }\n return serverCache;\n}\n\nexport function syncPointViewForQuery(\n syncPoint: SyncPoint,\n query: QueryContext\n): View | null {\n const params = query._queryParams;\n if (params.loadsAllData()) {\n return syncPointGetCompleteView(syncPoint);\n } else {\n const queryId = query._queryIdentifier;\n return syncPoint.views.get(queryId);\n }\n}\n\nexport function syncPointViewExistsForQuery(\n syncPoint: SyncPoint,\n query: QueryContext\n): boolean {\n return syncPointViewForQuery(syncPoint, query) != null;\n}\n\nexport function syncPointHasCompleteView(syncPoint: SyncPoint): boolean {\n return syncPointGetCompleteView(syncPoint) != null;\n}\n\nexport function syncPointGetCompleteView(syncPoint: SyncPoint): View | null {\n for (const view of syncPoint.views.values()) {\n if (view.query._queryParams.loadsAllData()) {\n return view;\n }\n }\n return null;\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert } from '@firebase/util';\n\nimport { ReferenceConstructor } from '../api/Reference';\n\nimport { AckUserWrite } from './operation/AckUserWrite';\nimport { ListenComplete } from './operation/ListenComplete';\nimport { Merge } from './operation/Merge';\nimport {\n newOperationSourceServer,\n newOperationSourceServerTaggedQuery,\n newOperationSourceUser,\n Operation\n} from './operation/Operation';\nimport { Overwrite } from './operation/Overwrite';\nimport { ChildrenNode } from './snap/ChildrenNode';\nimport { Node } from './snap/Node';\nimport {\n SyncPoint,\n syncPointAddEventRegistration,\n syncPointApplyOperation,\n syncPointGetCompleteServerCache,\n syncPointGetCompleteView,\n syncPointGetQueryViews,\n syncPointGetView,\n syncPointHasCompleteView,\n syncPointIsEmpty,\n syncPointRemoveEventRegistration,\n syncPointViewExistsForQuery,\n syncPointViewForQuery\n} from './SyncPoint';\nimport { ImmutableTree } from './util/ImmutableTree';\nimport {\n newEmptyPath,\n newRelativePath,\n Path,\n pathGetFront,\n pathIsEmpty\n} from './util/Path';\nimport { each, errorForServerCode } from './util/util';\nimport { CacheNode } from './view/CacheNode';\nimport { Event } from './view/Event';\nimport { EventRegistration, QueryContext } from './view/EventRegistration';\nimport { View, viewGetCompleteNode, viewGetServerCache } from './view/View';\nimport {\n newWriteTree,\n WriteTree,\n writeTreeAddMerge,\n writeTreeAddOverwrite,\n writeTreeCalcCompleteEventCache,\n writeTreeChildWrites,\n writeTreeGetWrite,\n WriteTreeRef,\n writeTreeRefChild,\n writeTreeRemoveWrite\n} from './WriteTree';\n\nlet referenceConstructor: ReferenceConstructor;\n\nexport function syncTreeSetReferenceConstructor(\n val: ReferenceConstructor\n): void {\n assert(\n !referenceConstructor,\n '__referenceConstructor has already been defined'\n );\n referenceConstructor = val;\n}\n\nfunction syncTreeGetReferenceConstructor(): ReferenceConstructor {\n assert(referenceConstructor, 'Reference.ts has not been loaded');\n return referenceConstructor;\n}\n\nexport interface ListenProvider {\n startListening(\n query: QueryContext,\n tag: number | null,\n hashFn: () => string,\n onComplete: (a: string, b?: unknown) => Event[]\n ): Event[];\n\n stopListening(a: QueryContext, b: number | null): void;\n}\n\n/**\n * Static tracker for next query tag.\n */\nlet syncTreeNextQueryTag_ = 1;\n\nexport function resetSyncTreeTag() {\n syncTreeNextQueryTag_ = 1;\n}\n\n/**\n * SyncTree is the central class for managing event callback registration, data caching, views\n * (query processing), and event generation. There are typically two SyncTree instances for\n * each Repo, one for the normal Firebase data, and one for the .info data.\n *\n * It has a number of responsibilities, including:\n * - Tracking all user event callbacks (registered via addEventRegistration() and removeEventRegistration()).\n * - Applying and caching data changes for user set(), transaction(), and update() calls\n * (applyUserOverwrite(), applyUserMerge()).\n * - Applying and caching data changes for server data changes (applyServerOverwrite(),\n * applyServerMerge()).\n * - Generating user-facing events for server and user changes (all of the apply* methods\n * return the set of events that need to be raised as a result).\n * - Maintaining the appropriate set of server listens to ensure we are always subscribed\n * to the correct set of paths and queries to satisfy the current set of user event\n * callbacks (listens are started/stopped using the provided listenProvider).\n *\n * NOTE: Although SyncTree tracks event callbacks and calculates events to raise, the actual\n * events are returned to the caller rather than raised synchronously.\n *\n */\nexport class SyncTree {\n /**\n * Tree of SyncPoints. There's a SyncPoint at any location that has 1 or more views.\n */\n syncPointTree_: ImmutableTree = new ImmutableTree(null);\n\n /**\n * A tree of all pending user writes (user-initiated set()'s, transaction()'s, update()'s, etc.).\n */\n pendingWriteTree_: WriteTree = newWriteTree();\n\n readonly tagToQueryMap: Map = new Map();\n readonly queryToTagMap: Map = new Map();\n\n /**\n * @param listenProvider_ - Used by SyncTree to start / stop listening\n * to server data.\n */\n constructor(public listenProvider_: ListenProvider) {}\n}\n\n/**\n * Apply the data changes for a user-generated set() or transaction() call.\n *\n * @returns Events to raise.\n */\nexport function syncTreeApplyUserOverwrite(\n syncTree: SyncTree,\n path: Path,\n newData: Node,\n writeId: number,\n visible?: boolean\n): Event[] {\n // Record pending write.\n writeTreeAddOverwrite(\n syncTree.pendingWriteTree_,\n path,\n newData,\n writeId,\n visible\n );\n\n if (!visible) {\n return [];\n } else {\n return syncTreeApplyOperationToSyncPoints_(\n syncTree,\n new Overwrite(newOperationSourceUser(), path, newData)\n );\n }\n}\n\n/**\n * Apply the data from a user-generated update() call\n *\n * @returns Events to raise.\n */\nexport function syncTreeApplyUserMerge(\n syncTree: SyncTree,\n path: Path,\n changedChildren: { [k: string]: Node },\n writeId: number\n): Event[] {\n // Record pending merge.\n writeTreeAddMerge(syncTree.pendingWriteTree_, path, changedChildren, writeId);\n\n const changeTree = ImmutableTree.fromObject(changedChildren);\n\n return syncTreeApplyOperationToSyncPoints_(\n syncTree,\n new Merge(newOperationSourceUser(), path, changeTree)\n );\n}\n\n/**\n * Acknowledge a pending user write that was previously registered with applyUserOverwrite() or applyUserMerge().\n *\n * @param revert - True if the given write failed and needs to be reverted\n * @returns Events to raise.\n */\nexport function syncTreeAckUserWrite(\n syncTree: SyncTree,\n writeId: number,\n revert: boolean = false\n) {\n const write = writeTreeGetWrite(syncTree.pendingWriteTree_, writeId);\n const needToReevaluate = writeTreeRemoveWrite(\n syncTree.pendingWriteTree_,\n writeId\n );\n if (!needToReevaluate) {\n return [];\n } else {\n let affectedTree = new ImmutableTree(null);\n if (write.snap != null) {\n // overwrite\n affectedTree = affectedTree.set(newEmptyPath(), true);\n } else {\n each(write.children, (pathString: string) => {\n affectedTree = affectedTree.set(new Path(pathString), true);\n });\n }\n return syncTreeApplyOperationToSyncPoints_(\n syncTree,\n new AckUserWrite(write.path, affectedTree, revert)\n );\n }\n}\n\n/**\n * Apply new server data for the specified path..\n *\n * @returns Events to raise.\n */\nexport function syncTreeApplyServerOverwrite(\n syncTree: SyncTree,\n path: Path,\n newData: Node\n): Event[] {\n return syncTreeApplyOperationToSyncPoints_(\n syncTree,\n new Overwrite(newOperationSourceServer(), path, newData)\n );\n}\n\n/**\n * Apply new server data to be merged in at the specified path.\n *\n * @returns Events to raise.\n */\nexport function syncTreeApplyServerMerge(\n syncTree: SyncTree,\n path: Path,\n changedChildren: { [k: string]: Node }\n): Event[] {\n const changeTree = ImmutableTree.fromObject(changedChildren);\n\n return syncTreeApplyOperationToSyncPoints_(\n syncTree,\n new Merge(newOperationSourceServer(), path, changeTree)\n );\n}\n\n/**\n * Apply a listen complete for a query\n *\n * @returns Events to raise.\n */\nexport function syncTreeApplyListenComplete(\n syncTree: SyncTree,\n path: Path\n): Event[] {\n return syncTreeApplyOperationToSyncPoints_(\n syncTree,\n new ListenComplete(newOperationSourceServer(), path)\n );\n}\n\n/**\n * Apply a listen complete for a tagged query\n *\n * @returns Events to raise.\n */\nexport function syncTreeApplyTaggedListenComplete(\n syncTree: SyncTree,\n path: Path,\n tag: number\n): Event[] {\n const queryKey = syncTreeQueryKeyForTag_(syncTree, tag);\n if (queryKey) {\n const r = syncTreeParseQueryKey_(queryKey);\n const queryPath = r.path,\n queryId = r.queryId;\n const relativePath = newRelativePath(queryPath, path);\n const op = new ListenComplete(\n newOperationSourceServerTaggedQuery(queryId),\n relativePath\n );\n return syncTreeApplyTaggedOperation_(syncTree, queryPath, op);\n } else {\n // We've already removed the query. No big deal, ignore the update\n return [];\n }\n}\n\n/**\n * Remove event callback(s).\n *\n * If query is the default query, we'll check all queries for the specified eventRegistration.\n * If eventRegistration is null, we'll remove all callbacks for the specified query/queries.\n *\n * @param eventRegistration - If null, all callbacks are removed.\n * @param cancelError - If a cancelError is provided, appropriate cancel events will be returned.\n * @param skipListenerDedup - When performing a `get()`, we don't add any new listeners, so no\n * deduping needs to take place. This flag allows toggling of that behavior\n * @returns Cancel events, if cancelError was provided.\n */\nexport function syncTreeRemoveEventRegistration(\n syncTree: SyncTree,\n query: QueryContext,\n eventRegistration: EventRegistration | null,\n cancelError?: Error,\n skipListenerDedup = false\n): Event[] {\n // Find the syncPoint first. Then deal with whether or not it has matching listeners\n const path = query._path;\n const maybeSyncPoint = syncTree.syncPointTree_.get(path);\n let cancelEvents: Event[] = [];\n // A removal on a default query affects all queries at that location. A removal on an indexed query, even one without\n // other query constraints, does *not* affect all queries at that location. So this check must be for 'default', and\n // not loadsAllData().\n if (\n maybeSyncPoint &&\n (query._queryIdentifier === 'default' ||\n syncPointViewExistsForQuery(maybeSyncPoint, query))\n ) {\n const removedAndEvents = syncPointRemoveEventRegistration(\n maybeSyncPoint,\n query,\n eventRegistration,\n cancelError\n );\n if (syncPointIsEmpty(maybeSyncPoint)) {\n syncTree.syncPointTree_ = syncTree.syncPointTree_.remove(path);\n }\n\n const removed = removedAndEvents.removed;\n cancelEvents = removedAndEvents.events;\n\n if (!skipListenerDedup) {\n /**\n * We may have just removed one of many listeners and can short-circuit this whole process\n * We may also not have removed a default listener, in which case all of the descendant listeners should already be\n * properly set up.\n */\n\n // Since indexed queries can shadow if they don't have other query constraints, check for loadsAllData(), instead of\n // queryId === 'default'\n const removingDefault =\n -1 !==\n removed.findIndex(query => {\n return query._queryParams.loadsAllData();\n });\n const covered = syncTree.syncPointTree_.findOnPath(\n path,\n (relativePath, parentSyncPoint) =>\n syncPointHasCompleteView(parentSyncPoint)\n );\n\n if (removingDefault && !covered) {\n const subtree = syncTree.syncPointTree_.subtree(path);\n // There are potentially child listeners. Determine what if any listens we need to send before executing the\n // removal\n if (!subtree.isEmpty()) {\n // We need to fold over our subtree and collect the listeners to send\n const newViews = syncTreeCollectDistinctViewsForSubTree_(subtree);\n\n // Ok, we've collected all the listens we need. Set them up.\n for (let i = 0; i < newViews.length; ++i) {\n const view = newViews[i],\n newQuery = view.query;\n const listener = syncTreeCreateListenerForView_(syncTree, view);\n syncTree.listenProvider_.startListening(\n syncTreeQueryForListening_(newQuery),\n syncTreeTagForQuery(syncTree, newQuery),\n listener.hashFn,\n listener.onComplete\n );\n }\n }\n // Otherwise there's nothing below us, so nothing we need to start listening on\n }\n // If we removed anything and we're not covered by a higher up listen, we need to stop listening on this query\n // The above block has us covered in terms of making sure we're set up on listens lower in the tree.\n // Also, note that if we have a cancelError, it's already been removed at the provider level.\n if (!covered && removed.length > 0 && !cancelError) {\n // If we removed a default, then we weren't listening on any of the other queries here. Just cancel the one\n // default. Otherwise, we need to iterate through and cancel each individual query\n if (removingDefault) {\n // We don't tag default listeners\n const defaultTag: number | null = null;\n syncTree.listenProvider_.stopListening(\n syncTreeQueryForListening_(query),\n defaultTag\n );\n } else {\n removed.forEach((queryToRemove: QueryContext) => {\n const tagToRemove = syncTree.queryToTagMap.get(\n syncTreeMakeQueryKey_(queryToRemove)\n );\n syncTree.listenProvider_.stopListening(\n syncTreeQueryForListening_(queryToRemove),\n tagToRemove\n );\n });\n }\n }\n }\n // Now, clear all of the tags we're tracking for the removed listens\n syncTreeRemoveTags_(syncTree, removed);\n } else {\n // No-op, this listener must've been already removed\n }\n return cancelEvents;\n}\n\n/**\n * Apply new server data for the specified tagged query.\n *\n * @returns Events to raise.\n */\nexport function syncTreeApplyTaggedQueryOverwrite(\n syncTree: SyncTree,\n path: Path,\n snap: Node,\n tag: number\n): Event[] {\n const queryKey = syncTreeQueryKeyForTag_(syncTree, tag);\n if (queryKey != null) {\n const r = syncTreeParseQueryKey_(queryKey);\n const queryPath = r.path,\n queryId = r.queryId;\n const relativePath = newRelativePath(queryPath, path);\n const op = new Overwrite(\n newOperationSourceServerTaggedQuery(queryId),\n relativePath,\n snap\n );\n return syncTreeApplyTaggedOperation_(syncTree, queryPath, op);\n } else {\n // Query must have been removed already\n return [];\n }\n}\n\n/**\n * Apply server data to be merged in for the specified tagged query.\n *\n * @returns Events to raise.\n */\nexport function syncTreeApplyTaggedQueryMerge(\n syncTree: SyncTree,\n path: Path,\n changedChildren: { [k: string]: Node },\n tag: number\n): Event[] {\n const queryKey = syncTreeQueryKeyForTag_(syncTree, tag);\n if (queryKey) {\n const r = syncTreeParseQueryKey_(queryKey);\n const queryPath = r.path,\n queryId = r.queryId;\n const relativePath = newRelativePath(queryPath, path);\n const changeTree = ImmutableTree.fromObject(changedChildren);\n const op = new Merge(\n newOperationSourceServerTaggedQuery(queryId),\n relativePath,\n changeTree\n );\n return syncTreeApplyTaggedOperation_(syncTree, queryPath, op);\n } else {\n // We've already removed the query. No big deal, ignore the update\n return [];\n }\n}\n\n/**\n * Add an event callback for the specified query.\n *\n * @returns Events to raise.\n */\nexport function syncTreeAddEventRegistration(\n syncTree: SyncTree,\n query: QueryContext,\n eventRegistration: EventRegistration,\n skipSetupListener = false\n): Event[] {\n const path = query._path;\n\n let serverCache: Node | null = null;\n let foundAncestorDefaultView = false;\n // Any covering writes will necessarily be at the root, so really all we need to find is the server cache.\n // Consider optimizing this once there's a better understanding of what actual behavior will be.\n syncTree.syncPointTree_.foreachOnPath(path, (pathToSyncPoint, sp) => {\n const relativePath = newRelativePath(pathToSyncPoint, path);\n serverCache =\n serverCache || syncPointGetCompleteServerCache(sp, relativePath);\n foundAncestorDefaultView =\n foundAncestorDefaultView || syncPointHasCompleteView(sp);\n });\n let syncPoint = syncTree.syncPointTree_.get(path);\n if (!syncPoint) {\n syncPoint = new SyncPoint();\n syncTree.syncPointTree_ = syncTree.syncPointTree_.set(path, syncPoint);\n } else {\n foundAncestorDefaultView =\n foundAncestorDefaultView || syncPointHasCompleteView(syncPoint);\n serverCache =\n serverCache || syncPointGetCompleteServerCache(syncPoint, newEmptyPath());\n }\n\n let serverCacheComplete;\n if (serverCache != null) {\n serverCacheComplete = true;\n } else {\n serverCacheComplete = false;\n serverCache = ChildrenNode.EMPTY_NODE;\n const subtree = syncTree.syncPointTree_.subtree(path);\n subtree.foreachChild((childName, childSyncPoint) => {\n const completeCache = syncPointGetCompleteServerCache(\n childSyncPoint,\n newEmptyPath()\n );\n if (completeCache) {\n serverCache = serverCache.updateImmediateChild(\n childName,\n completeCache\n );\n }\n });\n }\n\n const viewAlreadyExists = syncPointViewExistsForQuery(syncPoint, query);\n if (!viewAlreadyExists && !query._queryParams.loadsAllData()) {\n // We need to track a tag for this query\n const queryKey = syncTreeMakeQueryKey_(query);\n assert(\n !syncTree.queryToTagMap.has(queryKey),\n 'View does not exist, but we have a tag'\n );\n const tag = syncTreeGetNextQueryTag_();\n syncTree.queryToTagMap.set(queryKey, tag);\n syncTree.tagToQueryMap.set(tag, queryKey);\n }\n const writesCache = writeTreeChildWrites(syncTree.pendingWriteTree_, path);\n let events = syncPointAddEventRegistration(\n syncPoint,\n query,\n eventRegistration,\n writesCache,\n serverCache,\n serverCacheComplete\n );\n if (!viewAlreadyExists && !foundAncestorDefaultView && !skipSetupListener) {\n const view = syncPointViewForQuery(syncPoint, query);\n events = events.concat(syncTreeSetupListener_(syncTree, query, view));\n }\n return events;\n}\n\n/**\n * Returns a complete cache, if we have one, of the data at a particular path. If the location does not have a\n * listener above it, we will get a false \"null\". This shouldn't be a problem because transactions will always\n * have a listener above, and atomic operations would correctly show a jitter of ->\n * as the write is applied locally and then acknowledged at the server.\n *\n * Note: this method will *include* hidden writes from transaction with applyLocally set to false.\n *\n * @param path - The path to the data we want\n * @param writeIdsToExclude - A specific set to be excluded\n */\nexport function syncTreeCalcCompleteEventCache(\n syncTree: SyncTree,\n path: Path,\n writeIdsToExclude?: number[]\n): Node {\n const includeHiddenSets = true;\n const writeTree = syncTree.pendingWriteTree_;\n const serverCache = syncTree.syncPointTree_.findOnPath(\n path,\n (pathSoFar, syncPoint) => {\n const relativePath = newRelativePath(pathSoFar, path);\n const serverCache = syncPointGetCompleteServerCache(\n syncPoint,\n relativePath\n );\n if (serverCache) {\n return serverCache;\n }\n }\n );\n return writeTreeCalcCompleteEventCache(\n writeTree,\n path,\n serverCache,\n writeIdsToExclude,\n includeHiddenSets\n );\n}\n\nexport function syncTreeGetServerValue(\n syncTree: SyncTree,\n query: QueryContext\n): Node | null {\n const path = query._path;\n let serverCache: Node | null = null;\n // Any covering writes will necessarily be at the root, so really all we need to find is the server cache.\n // Consider optimizing this once there's a better understanding of what actual behavior will be.\n syncTree.syncPointTree_.foreachOnPath(path, (pathToSyncPoint, sp) => {\n const relativePath = newRelativePath(pathToSyncPoint, path);\n serverCache =\n serverCache || syncPointGetCompleteServerCache(sp, relativePath);\n });\n let syncPoint = syncTree.syncPointTree_.get(path);\n if (!syncPoint) {\n syncPoint = new SyncPoint();\n syncTree.syncPointTree_ = syncTree.syncPointTree_.set(path, syncPoint);\n } else {\n serverCache =\n serverCache || syncPointGetCompleteServerCache(syncPoint, newEmptyPath());\n }\n const serverCacheComplete = serverCache != null;\n const serverCacheNode: CacheNode | null = serverCacheComplete\n ? new CacheNode(serverCache, true, false)\n : null;\n const writesCache: WriteTreeRef | null = writeTreeChildWrites(\n syncTree.pendingWriteTree_,\n query._path\n );\n const view: View = syncPointGetView(\n syncPoint,\n query,\n writesCache,\n serverCacheComplete ? serverCacheNode.getNode() : ChildrenNode.EMPTY_NODE,\n serverCacheComplete\n );\n return viewGetCompleteNode(view);\n}\n\n/**\n * A helper method that visits all descendant and ancestor SyncPoints, applying the operation.\n *\n * NOTES:\n * - Descendant SyncPoints will be visited first (since we raise events depth-first).\n *\n * - We call applyOperation() on each SyncPoint passing three things:\n * 1. A version of the Operation that has been made relative to the SyncPoint location.\n * 2. A WriteTreeRef of any writes we have cached at the SyncPoint location.\n * 3. A snapshot Node with cached server data, if we have it.\n *\n * - We concatenate all of the events returned by each SyncPoint and return the result.\n */\nfunction syncTreeApplyOperationToSyncPoints_(\n syncTree: SyncTree,\n operation: Operation\n): Event[] {\n return syncTreeApplyOperationHelper_(\n operation,\n syncTree.syncPointTree_,\n /*serverCache=*/ null,\n writeTreeChildWrites(syncTree.pendingWriteTree_, newEmptyPath())\n );\n}\n\n/**\n * Recursive helper for applyOperationToSyncPoints_\n */\nfunction syncTreeApplyOperationHelper_(\n operation: Operation,\n syncPointTree: ImmutableTree,\n serverCache: Node | null,\n writesCache: WriteTreeRef\n): Event[] {\n if (pathIsEmpty(operation.path)) {\n return syncTreeApplyOperationDescendantsHelper_(\n operation,\n syncPointTree,\n serverCache,\n writesCache\n );\n } else {\n const syncPoint = syncPointTree.get(newEmptyPath());\n\n // If we don't have cached server data, see if we can get it from this SyncPoint.\n if (serverCache == null && syncPoint != null) {\n serverCache = syncPointGetCompleteServerCache(syncPoint, newEmptyPath());\n }\n\n let events: Event[] = [];\n const childName = pathGetFront(operation.path);\n const childOperation = operation.operationForChild(childName);\n const childTree = syncPointTree.children.get(childName);\n if (childTree && childOperation) {\n const childServerCache = serverCache\n ? serverCache.getImmediateChild(childName)\n : null;\n const childWritesCache = writeTreeRefChild(writesCache, childName);\n events = events.concat(\n syncTreeApplyOperationHelper_(\n childOperation,\n childTree,\n childServerCache,\n childWritesCache\n )\n );\n }\n\n if (syncPoint) {\n events = events.concat(\n syncPointApplyOperation(syncPoint, operation, writesCache, serverCache)\n );\n }\n\n return events;\n }\n}\n\n/**\n * Recursive helper for applyOperationToSyncPoints_\n */\nfunction syncTreeApplyOperationDescendantsHelper_(\n operation: Operation,\n syncPointTree: ImmutableTree,\n serverCache: Node | null,\n writesCache: WriteTreeRef\n): Event[] {\n const syncPoint = syncPointTree.get(newEmptyPath());\n\n // If we don't have cached server data, see if we can get it from this SyncPoint.\n if (serverCache == null && syncPoint != null) {\n serverCache = syncPointGetCompleteServerCache(syncPoint, newEmptyPath());\n }\n\n let events: Event[] = [];\n syncPointTree.children.inorderTraversal((childName, childTree) => {\n const childServerCache = serverCache\n ? serverCache.getImmediateChild(childName)\n : null;\n const childWritesCache = writeTreeRefChild(writesCache, childName);\n const childOperation = operation.operationForChild(childName);\n if (childOperation) {\n events = events.concat(\n syncTreeApplyOperationDescendantsHelper_(\n childOperation,\n childTree,\n childServerCache,\n childWritesCache\n )\n );\n }\n });\n\n if (syncPoint) {\n events = events.concat(\n syncPointApplyOperation(syncPoint, operation, writesCache, serverCache)\n );\n }\n\n return events;\n}\n\nfunction syncTreeCreateListenerForView_(\n syncTree: SyncTree,\n view: View\n): { hashFn(): string; onComplete(a: string, b?: unknown): Event[] } {\n const query = view.query;\n const tag = syncTreeTagForQuery(syncTree, query);\n\n return {\n hashFn: () => {\n const cache = viewGetServerCache(view) || ChildrenNode.EMPTY_NODE;\n return cache.hash();\n },\n onComplete: (status: string): Event[] => {\n if (status === 'ok') {\n if (tag) {\n return syncTreeApplyTaggedListenComplete(syncTree, query._path, tag);\n } else {\n return syncTreeApplyListenComplete(syncTree, query._path);\n }\n } else {\n // If a listen failed, kill all of the listeners here, not just the one that triggered the error.\n // Note that this may need to be scoped to just this listener if we change permissions on filtered children\n const error = errorForServerCode(status, query);\n return syncTreeRemoveEventRegistration(\n syncTree,\n query,\n /*eventRegistration*/ null,\n error\n );\n }\n }\n };\n}\n\n/**\n * Return the tag associated with the given query.\n */\nexport function syncTreeTagForQuery(\n syncTree: SyncTree,\n query: QueryContext\n): number | null {\n const queryKey = syncTreeMakeQueryKey_(query);\n return syncTree.queryToTagMap.get(queryKey);\n}\n\n/**\n * Given a query, computes a \"queryKey\" suitable for use in our queryToTagMap_.\n */\nfunction syncTreeMakeQueryKey_(query: QueryContext): string {\n return query._path.toString() + '$' + query._queryIdentifier;\n}\n\n/**\n * Return the query associated with the given tag, if we have one\n */\nfunction syncTreeQueryKeyForTag_(\n syncTree: SyncTree,\n tag: number\n): string | null {\n return syncTree.tagToQueryMap.get(tag);\n}\n\n/**\n * Given a queryKey (created by makeQueryKey), parse it back into a path and queryId.\n */\nfunction syncTreeParseQueryKey_(queryKey: string): {\n queryId: string;\n path: Path;\n} {\n const splitIndex = queryKey.indexOf('$');\n assert(\n splitIndex !== -1 && splitIndex < queryKey.length - 1,\n 'Bad queryKey.'\n );\n return {\n queryId: queryKey.substr(splitIndex + 1),\n path: new Path(queryKey.substr(0, splitIndex))\n };\n}\n\n/**\n * A helper method to apply tagged operations\n */\nfunction syncTreeApplyTaggedOperation_(\n syncTree: SyncTree,\n queryPath: Path,\n operation: Operation\n): Event[] {\n const syncPoint = syncTree.syncPointTree_.get(queryPath);\n assert(syncPoint, \"Missing sync point for query tag that we're tracking\");\n const writesCache = writeTreeChildWrites(\n syncTree.pendingWriteTree_,\n queryPath\n );\n return syncPointApplyOperation(syncPoint, operation, writesCache, null);\n}\n\n/**\n * This collapses multiple unfiltered views into a single view, since we only need a single\n * listener for them.\n */\nfunction syncTreeCollectDistinctViewsForSubTree_(\n subtree: ImmutableTree\n): View[] {\n return subtree.fold((relativePath, maybeChildSyncPoint, childMap) => {\n if (maybeChildSyncPoint && syncPointHasCompleteView(maybeChildSyncPoint)) {\n const completeView = syncPointGetCompleteView(maybeChildSyncPoint);\n return [completeView];\n } else {\n // No complete view here, flatten any deeper listens into an array\n let views: View[] = [];\n if (maybeChildSyncPoint) {\n views = syncPointGetQueryViews(maybeChildSyncPoint);\n }\n each(childMap, (_key: string, childViews: View[]) => {\n views = views.concat(childViews);\n });\n return views;\n }\n });\n}\n\n/**\n * Normalizes a query to a query we send the server for listening\n *\n * @returns The normalized query\n */\nfunction syncTreeQueryForListening_(query: QueryContext): QueryContext {\n if (query._queryParams.loadsAllData() && !query._queryParams.isDefault()) {\n // We treat queries that load all data as default queries\n // Cast is necessary because ref() technically returns Firebase which is actually fb.api.Firebase which inherits\n // from Query\n return new (syncTreeGetReferenceConstructor())(query._repo, query._path);\n } else {\n return query;\n }\n}\n\nfunction syncTreeRemoveTags_(syncTree: SyncTree, queries: QueryContext[]) {\n for (let j = 0; j < queries.length; ++j) {\n const removedQuery = queries[j];\n if (!removedQuery._queryParams.loadsAllData()) {\n // We should have a tag for this\n const removedQueryKey = syncTreeMakeQueryKey_(removedQuery);\n const removedQueryTag = syncTree.queryToTagMap.get(removedQueryKey);\n syncTree.queryToTagMap.delete(removedQueryKey);\n syncTree.tagToQueryMap.delete(removedQueryTag);\n }\n }\n}\n\n/**\n * Static accessor for query tags.\n */\nfunction syncTreeGetNextQueryTag_(): number {\n return syncTreeNextQueryTag_++;\n}\n\n/**\n * For a given new listen, manage the de-duplication of outstanding subscriptions.\n *\n * @returns This method can return events to support synchronous data sources\n */\nfunction syncTreeSetupListener_(\n syncTree: SyncTree,\n query: QueryContext,\n view: View\n): Event[] {\n const path = query._path;\n const tag = syncTreeTagForQuery(syncTree, query);\n const listener = syncTreeCreateListenerForView_(syncTree, view);\n\n const events = syncTree.listenProvider_.startListening(\n syncTreeQueryForListening_(query),\n tag,\n listener.hashFn,\n listener.onComplete\n );\n\n const subtree = syncTree.syncPointTree_.subtree(path);\n // The root of this subtree has our query. We're here because we definitely need to send a listen for that, but we\n // may need to shadow other listens as well.\n if (tag) {\n assert(\n !syncPointHasCompleteView(subtree.value),\n \"If we're adding a query, it shouldn't be shadowed\"\n );\n } else {\n // Shadow everything at or below this location, this is a default listener.\n const queriesToStop = subtree.fold(\n (relativePath, maybeChildSyncPoint, childMap) => {\n if (\n !pathIsEmpty(relativePath) &&\n maybeChildSyncPoint &&\n syncPointHasCompleteView(maybeChildSyncPoint)\n ) {\n return [syncPointGetCompleteView(maybeChildSyncPoint).query];\n } else {\n // No default listener here, flatten any deeper queries into an array\n let queries: QueryContext[] = [];\n if (maybeChildSyncPoint) {\n queries = queries.concat(\n syncPointGetQueryViews(maybeChildSyncPoint).map(\n view => view.query\n )\n );\n }\n each(childMap, (_key: string, childQueries: QueryContext[]) => {\n queries = queries.concat(childQueries);\n });\n return queries;\n }\n }\n );\n for (let i = 0; i < queriesToStop.length; ++i) {\n const queryToStop = queriesToStop[i];\n syncTree.listenProvider_.stopListening(\n syncTreeQueryForListening_(queryToStop),\n syncTreeTagForQuery(syncTree, queryToStop)\n );\n }\n }\n return events;\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert } from '@firebase/util';\n\nimport { ChildrenNode } from '../snap/ChildrenNode';\nimport { PRIORITY_INDEX } from '../snap/indexes/PriorityIndex';\nimport { LeafNode } from '../snap/LeafNode';\nimport { Node } from '../snap/Node';\nimport { nodeFromJSON } from '../snap/nodeFromJSON';\nimport { SyncTree, syncTreeCalcCompleteEventCache } from '../SyncTree';\n\nimport { Indexable } from './misc';\nimport { Path, pathChild } from './Path';\n\n/* It's critical for performance that we do not calculate actual values from a SyncTree\n * unless and until the value is needed. Because we expose both a SyncTree and Node\n * version of deferred value resolution, we ned a wrapper class that will let us share\n * code.\n *\n * @see https://github.com/firebase/firebase-js-sdk/issues/2487\n */\ninterface ValueProvider {\n getImmediateChild(childName: string): ValueProvider;\n node(): Node;\n}\n\nclass ExistingValueProvider implements ValueProvider {\n constructor(readonly node_: Node) {}\n\n getImmediateChild(childName: string): ValueProvider {\n const child = this.node_.getImmediateChild(childName);\n return new ExistingValueProvider(child);\n }\n\n node(): Node {\n return this.node_;\n }\n}\n\nclass DeferredValueProvider implements ValueProvider {\n private syncTree_: SyncTree;\n private path_: Path;\n\n constructor(syncTree: SyncTree, path: Path) {\n this.syncTree_ = syncTree;\n this.path_ = path;\n }\n\n getImmediateChild(childName: string): ValueProvider {\n const childPath = pathChild(this.path_, childName);\n return new DeferredValueProvider(this.syncTree_, childPath);\n }\n\n node(): Node {\n return syncTreeCalcCompleteEventCache(this.syncTree_, this.path_);\n }\n}\n\n/**\n * Generate placeholders for deferred values.\n */\nexport const generateWithValues = function (\n values: {\n [k: string]: unknown;\n } | null\n): { [k: string]: unknown } {\n values = values || {};\n values['timestamp'] = values['timestamp'] || new Date().getTime();\n return values;\n};\n\n/**\n * Value to use when firing local events. When writing server values, fire\n * local events with an approximate value, otherwise return value as-is.\n */\nexport const resolveDeferredLeafValue = function (\n value: { [k: string]: unknown } | string | number | boolean,\n existingVal: ValueProvider,\n serverValues: { [k: string]: unknown }\n): string | number | boolean {\n if (!value || typeof value !== 'object') {\n return value as string | number | boolean;\n }\n assert('.sv' in value, 'Unexpected leaf node or priority contents');\n\n if (typeof value['.sv'] === 'string') {\n return resolveScalarDeferredValue(value['.sv'], existingVal, serverValues);\n } else if (typeof value['.sv'] === 'object') {\n return resolveComplexDeferredValue(value['.sv'], existingVal, serverValues);\n } else {\n assert(false, 'Unexpected server value: ' + JSON.stringify(value, null, 2));\n }\n};\n\nconst resolveScalarDeferredValue = function (\n op: string,\n existing: ValueProvider,\n serverValues: { [k: string]: unknown }\n): string | number | boolean {\n switch (op) {\n case 'timestamp':\n return serverValues['timestamp'] as string | number | boolean;\n default:\n assert(false, 'Unexpected server value: ' + op);\n }\n};\n\nconst resolveComplexDeferredValue = function (\n op: object,\n existing: ValueProvider,\n unused: { [k: string]: unknown }\n): string | number | boolean {\n if (!op.hasOwnProperty('increment')) {\n assert(false, 'Unexpected server value: ' + JSON.stringify(op, null, 2));\n }\n const delta = op['increment'];\n if (typeof delta !== 'number') {\n assert(false, 'Unexpected increment value: ' + delta);\n }\n\n const existingNode = existing.node();\n assert(\n existingNode !== null && typeof existingNode !== 'undefined',\n 'Expected ChildrenNode.EMPTY_NODE for nulls'\n );\n\n // Incrementing a non-number sets the value to the incremented amount\n if (!existingNode.isLeafNode()) {\n return delta;\n }\n\n const leaf = existingNode as LeafNode;\n const existingVal = leaf.getValue();\n if (typeof existingVal !== 'number') {\n return delta;\n }\n\n // No need to do over/underflow arithmetic here because JS only handles floats under the covers\n return existingVal + delta;\n};\n\n/**\n * Recursively replace all deferred values and priorities in the tree with the\n * specified generated replacement values.\n * @param path - path to which write is relative\n * @param node - new data written at path\n * @param syncTree - current data\n */\nexport const resolveDeferredValueTree = function (\n path: Path,\n node: Node,\n syncTree: SyncTree,\n serverValues: Indexable\n): Node {\n return resolveDeferredValue(\n node,\n new DeferredValueProvider(syncTree, path),\n serverValues\n );\n};\n\n/**\n * Recursively replace all deferred values and priorities in the node with the\n * specified generated replacement values. If there are no server values in the node,\n * it'll be returned as-is.\n */\nexport const resolveDeferredValueSnapshot = function (\n node: Node,\n existing: Node,\n serverValues: Indexable\n): Node {\n return resolveDeferredValue(\n node,\n new ExistingValueProvider(existing),\n serverValues\n );\n};\n\nfunction resolveDeferredValue(\n node: Node,\n existingVal: ValueProvider,\n serverValues: Indexable\n): Node {\n const rawPri = node.getPriority().val() as\n | Indexable\n | boolean\n | null\n | number\n | string;\n const priority = resolveDeferredLeafValue(\n rawPri,\n existingVal.getImmediateChild('.priority'),\n serverValues\n );\n let newNode: Node;\n\n if (node.isLeafNode()) {\n const leafNode = node as LeafNode;\n const value = resolveDeferredLeafValue(\n leafNode.getValue(),\n existingVal,\n serverValues\n );\n if (\n value !== leafNode.getValue() ||\n priority !== leafNode.getPriority().val()\n ) {\n return new LeafNode(value, nodeFromJSON(priority));\n } else {\n return node;\n }\n } else {\n const childrenNode = node as ChildrenNode;\n newNode = childrenNode;\n if (priority !== childrenNode.getPriority().val()) {\n newNode = newNode.updatePriority(new LeafNode(priority));\n }\n childrenNode.forEachChild(PRIORITY_INDEX, (childName, childNode) => {\n const newChildNode = resolveDeferredValue(\n childNode,\n existingVal.getImmediateChild(childName),\n serverValues\n );\n if (newChildNode !== childNode) {\n newNode = newNode.updateImmediateChild(childName, newChildNode);\n }\n });\n return newNode;\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { contains, safeGet } from '@firebase/util';\n\nimport { Path, pathGetFront, pathPopFront } from './Path';\nimport { each } from './util';\n\n/**\n * Node in a Tree.\n */\nexport interface TreeNode {\n // TODO: Consider making accessors that create children and value lazily or\n // separate Internal / Leaf 'types'.\n children: Record>;\n childCount: number;\n value?: T;\n}\n\n/**\n * A light-weight tree, traversable by path. Nodes can have both values and children.\n * Nodes are not enumerated (by forEachChild) unless they have a value or non-empty\n * children.\n */\nexport class Tree {\n /**\n * @param name - Optional name of the node.\n * @param parent - Optional parent node.\n * @param node - Optional node to wrap.\n */\n constructor(\n readonly name: string = '',\n readonly parent: Tree | null = null,\n public node: TreeNode = { children: {}, childCount: 0 }\n ) {}\n}\n\n/**\n * Returns a sub-Tree for the given path.\n *\n * @param pathObj - Path to look up.\n * @returns Tree for path.\n */\nexport function treeSubTree(tree: Tree, pathObj: string | Path): Tree {\n // TODO: Require pathObj to be Path?\n let path = pathObj instanceof Path ? pathObj : new Path(pathObj);\n let child = tree,\n next = pathGetFront(path);\n while (next !== null) {\n const childNode = safeGet(child.node.children, next) || {\n children: {},\n childCount: 0\n };\n child = new Tree(next, child, childNode);\n path = pathPopFront(path);\n next = pathGetFront(path);\n }\n\n return child;\n}\n\n/**\n * Returns the data associated with this tree node.\n *\n * @returns The data or null if no data exists.\n */\nexport function treeGetValue(tree: Tree): T | undefined {\n return tree.node.value;\n}\n\n/**\n * Sets data to this tree node.\n *\n * @param value - Value to set.\n */\nexport function treeSetValue(tree: Tree, value: T | undefined): void {\n tree.node.value = value;\n treeUpdateParents(tree);\n}\n\n/**\n * @returns Whether the tree has any children.\n */\nexport function treeHasChildren(tree: Tree): boolean {\n return tree.node.childCount > 0;\n}\n\n/**\n * @returns Whether the tree is empty (no value or children).\n */\nexport function treeIsEmpty(tree: Tree): boolean {\n return treeGetValue(tree) === undefined && !treeHasChildren(tree);\n}\n\n/**\n * Calls action for each child of this tree node.\n *\n * @param action - Action to be called for each child.\n */\nexport function treeForEachChild(\n tree: Tree,\n action: (tree: Tree) => void\n): void {\n each(tree.node.children, (child: string, childTree: TreeNode) => {\n action(new Tree(child, tree, childTree));\n });\n}\n\n/**\n * Does a depth-first traversal of this node's descendants, calling action for each one.\n *\n * @param action - Action to be called for each child.\n * @param includeSelf - Whether to call action on this node as well. Defaults to\n * false.\n * @param childrenFirst - Whether to call action on children before calling it on\n * parent.\n */\nexport function treeForEachDescendant(\n tree: Tree,\n action: (tree: Tree) => void,\n includeSelf?: boolean,\n childrenFirst?: boolean\n): void {\n if (includeSelf && !childrenFirst) {\n action(tree);\n }\n\n treeForEachChild(tree, child => {\n treeForEachDescendant(child, action, true, childrenFirst);\n });\n\n if (includeSelf && childrenFirst) {\n action(tree);\n }\n}\n\n/**\n * Calls action on each ancestor node.\n *\n * @param action - Action to be called on each parent; return\n * true to abort.\n * @param includeSelf - Whether to call action on this node as well.\n * @returns true if the action callback returned true.\n */\nexport function treeForEachAncestor(\n tree: Tree,\n action: (tree: Tree) => unknown,\n includeSelf?: boolean\n): boolean {\n let node = includeSelf ? tree : tree.parent;\n while (node !== null) {\n if (action(node)) {\n return true;\n }\n node = node.parent;\n }\n return false;\n}\n\n/**\n * Does a depth-first traversal of this node's descendants. When a descendant with a value\n * is found, action is called on it and traversal does not continue inside the node.\n * Action is *not* called on this node.\n *\n * @param action - Action to be called for each child.\n */\nexport function treeForEachImmediateDescendantWithValue(\n tree: Tree,\n action: (tree: Tree) => void\n): void {\n treeForEachChild(tree, child => {\n if (treeGetValue(child) !== undefined) {\n action(child);\n } else {\n treeForEachImmediateDescendantWithValue(child, action);\n }\n });\n}\n\n/**\n * @returns The path of this tree node, as a Path.\n */\nexport function treeGetPath(tree: Tree) {\n return new Path(\n tree.parent === null\n ? tree.name\n : treeGetPath(tree.parent) + '/' + tree.name\n );\n}\n\n/**\n * Adds or removes this child from its parent based on whether it's empty or not.\n */\nfunction treeUpdateParents(tree: Tree) {\n if (tree.parent !== null) {\n treeUpdateChild(tree.parent, tree.name, tree);\n }\n}\n\n/**\n * Adds or removes the passed child to this tree node, depending on whether it's empty.\n *\n * @param childName - The name of the child to update.\n * @param child - The child to update.\n */\nfunction treeUpdateChild(tree: Tree, childName: string, child: Tree) {\n const childEmpty = treeIsEmpty(child);\n const childExists = contains(tree.node.children, childName);\n if (childEmpty && childExists) {\n delete tree.node.children[childName];\n tree.node.childCount--;\n treeUpdateParents(tree);\n } else if (!childEmpty && !childExists) {\n tree.node.children[childName] = child.node;\n tree.node.childCount++;\n treeUpdateParents(tree);\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n contains,\n errorPrefix as errorPrefixFxn,\n safeGet,\n stringLength\n} from '@firebase/util';\n\nimport { RepoInfo } from '../RepoInfo';\n\nimport {\n Path,\n pathChild,\n pathCompare,\n pathContains,\n pathGetBack,\n pathGetFront,\n pathSlice,\n ValidationPath,\n validationPathPop,\n validationPathPush,\n validationPathToErrorString\n} from './Path';\nimport { each, isInvalidJSONNumber } from './util';\n\n/**\n * True for invalid Firebase keys\n */\nexport const INVALID_KEY_REGEX_ = /[\\[\\].#$\\/\\u0000-\\u001F\\u007F]/;\n\n/**\n * True for invalid Firebase paths.\n * Allows '/' in paths.\n */\nexport const INVALID_PATH_REGEX_ = /[\\[\\].#$\\u0000-\\u001F\\u007F]/;\n\n/**\n * Maximum number of characters to allow in leaf value\n */\nexport const MAX_LEAF_SIZE_ = 10 * 1024 * 1024;\n\nexport const isValidKey = function (key: unknown): boolean {\n return (\n typeof key === 'string' && key.length !== 0 && !INVALID_KEY_REGEX_.test(key)\n );\n};\n\nexport const isValidPathString = function (pathString: string): boolean {\n return (\n typeof pathString === 'string' &&\n pathString.length !== 0 &&\n !INVALID_PATH_REGEX_.test(pathString)\n );\n};\n\nexport const isValidRootPathString = function (pathString: string): boolean {\n if (pathString) {\n // Allow '/.info/' at the beginning.\n pathString = pathString.replace(/^\\/*\\.info(\\/|$)/, '/');\n }\n\n return isValidPathString(pathString);\n};\n\nexport const isValidPriority = function (priority: unknown): boolean {\n return (\n priority === null ||\n typeof priority === 'string' ||\n (typeof priority === 'number' && !isInvalidJSONNumber(priority)) ||\n (priority &&\n typeof priority === 'object' &&\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n contains(priority as any, '.sv'))\n );\n};\n\n/**\n * Pre-validate a datum passed as an argument to Firebase function.\n */\nexport const validateFirebaseDataArg = function (\n fnName: string,\n value: unknown,\n path: Path,\n optional: boolean\n) {\n if (optional && value === undefined) {\n return;\n }\n\n validateFirebaseData(errorPrefixFxn(fnName, 'value'), value, path);\n};\n\n/**\n * Validate a data object client-side before sending to server.\n */\nexport const validateFirebaseData = function (\n errorPrefix: string,\n data: unknown,\n path_: Path | ValidationPath\n) {\n const path =\n path_ instanceof Path ? new ValidationPath(path_, errorPrefix) : path_;\n\n if (data === undefined) {\n throw new Error(\n errorPrefix + 'contains undefined ' + validationPathToErrorString(path)\n );\n }\n if (typeof data === 'function') {\n throw new Error(\n errorPrefix +\n 'contains a function ' +\n validationPathToErrorString(path) +\n ' with contents = ' +\n data.toString()\n );\n }\n if (isInvalidJSONNumber(data)) {\n throw new Error(\n errorPrefix +\n 'contains ' +\n data.toString() +\n ' ' +\n validationPathToErrorString(path)\n );\n }\n\n // Check max leaf size, but try to avoid the utf8 conversion if we can.\n if (\n typeof data === 'string' &&\n data.length > MAX_LEAF_SIZE_ / 3 &&\n stringLength(data) > MAX_LEAF_SIZE_\n ) {\n throw new Error(\n errorPrefix +\n 'contains a string greater than ' +\n MAX_LEAF_SIZE_ +\n ' utf8 bytes ' +\n validationPathToErrorString(path) +\n \" ('\" +\n data.substring(0, 50) +\n \"...')\"\n );\n }\n\n // TODO = Perf = Consider combining the recursive validation of keys into NodeFromJSON\n // to save extra walking of large objects.\n if (data && typeof data === 'object') {\n let hasDotValue = false;\n let hasActualChild = false;\n each(data, (key: string, value: unknown) => {\n if (key === '.value') {\n hasDotValue = true;\n } else if (key !== '.priority' && key !== '.sv') {\n hasActualChild = true;\n if (!isValidKey(key)) {\n throw new Error(\n errorPrefix +\n ' contains an invalid key (' +\n key +\n ') ' +\n validationPathToErrorString(path) +\n '. Keys must be non-empty strings ' +\n 'and can\\'t contain \".\", \"#\", \"$\", \"/\", \"[\", or \"]\"'\n );\n }\n }\n\n validationPathPush(path, key);\n validateFirebaseData(errorPrefix, value, path);\n validationPathPop(path);\n });\n\n if (hasDotValue && hasActualChild) {\n throw new Error(\n errorPrefix +\n ' contains \".value\" child ' +\n validationPathToErrorString(path) +\n ' in addition to actual children.'\n );\n }\n }\n};\n\n/**\n * Pre-validate paths passed in the firebase function.\n */\nexport const validateFirebaseMergePaths = function (\n errorPrefix: string,\n mergePaths: Path[]\n) {\n let i, curPath: Path;\n for (i = 0; i < mergePaths.length; i++) {\n curPath = mergePaths[i];\n const keys = pathSlice(curPath);\n for (let j = 0; j < keys.length; j++) {\n if (keys[j] === '.priority' && j === keys.length - 1) {\n // .priority is OK\n } else if (!isValidKey(keys[j])) {\n throw new Error(\n errorPrefix +\n 'contains an invalid key (' +\n keys[j] +\n ') in path ' +\n curPath.toString() +\n '. Keys must be non-empty strings ' +\n 'and can\\'t contain \".\", \"#\", \"$\", \"/\", \"[\", or \"]\"'\n );\n }\n }\n }\n\n // Check that update keys are not descendants of each other.\n // We rely on the property that sorting guarantees that ancestors come\n // right before descendants.\n mergePaths.sort(pathCompare);\n let prevPath: Path | null = null;\n for (i = 0; i < mergePaths.length; i++) {\n curPath = mergePaths[i];\n if (prevPath !== null && pathContains(prevPath, curPath)) {\n throw new Error(\n errorPrefix +\n 'contains a path ' +\n prevPath.toString() +\n ' that is ancestor of another path ' +\n curPath.toString()\n );\n }\n prevPath = curPath;\n }\n};\n\n/**\n * pre-validate an object passed as an argument to firebase function (\n * must be an object - e.g. for firebase.update()).\n */\nexport const validateFirebaseMergeDataArg = function (\n fnName: string,\n data: unknown,\n path: Path,\n optional: boolean\n) {\n if (optional && data === undefined) {\n return;\n }\n\n const errorPrefix = errorPrefixFxn(fnName, 'values');\n\n if (!(data && typeof data === 'object') || Array.isArray(data)) {\n throw new Error(\n errorPrefix + ' must be an object containing the children to replace.'\n );\n }\n\n const mergePaths: Path[] = [];\n each(data, (key: string, value: unknown) => {\n const curPath = new Path(key);\n validateFirebaseData(errorPrefix, value, pathChild(path, curPath));\n if (pathGetBack(curPath) === '.priority') {\n if (!isValidPriority(value)) {\n throw new Error(\n errorPrefix +\n \"contains an invalid value for '\" +\n curPath.toString() +\n \"', which must be a valid \" +\n 'Firebase priority (a string, finite number, server value, or null).'\n );\n }\n }\n mergePaths.push(curPath);\n });\n validateFirebaseMergePaths(errorPrefix, mergePaths);\n};\n\nexport const validatePriority = function (\n fnName: string,\n priority: unknown,\n optional: boolean\n) {\n if (optional && priority === undefined) {\n return;\n }\n if (isInvalidJSONNumber(priority)) {\n throw new Error(\n errorPrefixFxn(fnName, 'priority') +\n 'is ' +\n priority.toString() +\n ', but must be a valid Firebase priority (a string, finite number, ' +\n 'server value, or null).'\n );\n }\n // Special case to allow importing data with a .sv.\n if (!isValidPriority(priority)) {\n throw new Error(\n errorPrefixFxn(fnName, 'priority') +\n 'must be a valid Firebase priority ' +\n '(a string, finite number, server value, or null).'\n );\n }\n};\n\nexport const validateKey = function (\n fnName: string,\n argumentName: string,\n key: string,\n optional: boolean\n) {\n if (optional && key === undefined) {\n return;\n }\n if (!isValidKey(key)) {\n throw new Error(\n errorPrefixFxn(fnName, argumentName) +\n 'was an invalid key = \"' +\n key +\n '\". Firebase keys must be non-empty strings and ' +\n 'can\\'t contain \".\", \"#\", \"$\", \"/\", \"[\", or \"]\").'\n );\n }\n};\n\n/**\n * @internal\n */\nexport const validatePathString = function (\n fnName: string,\n argumentName: string,\n pathString: string,\n optional: boolean\n) {\n if (optional && pathString === undefined) {\n return;\n }\n\n if (!isValidPathString(pathString)) {\n throw new Error(\n errorPrefixFxn(fnName, argumentName) +\n 'was an invalid path = \"' +\n pathString +\n '\". Paths must be non-empty strings and ' +\n 'can\\'t contain \".\", \"#\", \"$\", \"[\", or \"]\"'\n );\n }\n};\n\nexport const validateRootPathString = function (\n fnName: string,\n argumentName: string,\n pathString: string,\n optional: boolean\n) {\n if (pathString) {\n // Allow '/.info/' at the beginning.\n pathString = pathString.replace(/^\\/*\\.info(\\/|$)/, '/');\n }\n\n validatePathString(fnName, argumentName, pathString, optional);\n};\n\n/**\n * @internal\n */\nexport const validateWritablePath = function (fnName: string, path: Path) {\n if (pathGetFront(path) === '.info') {\n throw new Error(fnName + \" failed = Can't modify data under /.info/\");\n }\n};\n\nexport const validateUrl = function (\n fnName: string,\n parsedUrl: { repoInfo: RepoInfo; path: Path }\n) {\n // TODO = Validate server better.\n const pathString = parsedUrl.path.toString();\n if (\n !(typeof parsedUrl.repoInfo.host === 'string') ||\n parsedUrl.repoInfo.host.length === 0 ||\n (!isValidKey(parsedUrl.repoInfo.namespace) &&\n parsedUrl.repoInfo.host.split(':')[0] !== 'localhost') ||\n (pathString.length !== 0 && !isValidRootPathString(pathString))\n ) {\n throw new Error(\n errorPrefixFxn(fnName, 'url') +\n 'must be a valid firebase URL and ' +\n 'the path can\\'t contain \".\", \"#\", \"$\", \"[\", or \"]\".'\n );\n }\n};\n\nexport const validateString = function (\n fnName: string,\n argumentName: string,\n string: unknown,\n optional: boolean\n) {\n if (optional && string === undefined) {\n return;\n }\n if (!(typeof string === 'string')) {\n throw new Error(\n errorPrefixFxn(fnName, argumentName) + 'must be a valid string.'\n );\n }\n};\n\nexport const validateObject = function (\n fnName: string,\n argumentName: string,\n obj: unknown,\n optional: boolean\n) {\n if (optional && obj === undefined) {\n return;\n }\n if (!(obj && typeof obj === 'object') || obj === null) {\n throw new Error(\n errorPrefixFxn(fnName, argumentName) + 'must be a valid object.'\n );\n }\n};\n\nexport const validateObjectContainsKey = function (\n fnName: string,\n argumentName: string,\n obj: unknown,\n key: string,\n optional: boolean,\n optType?: string\n) {\n const objectContainsKey =\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n obj && typeof obj === 'object' && contains(obj as any, key);\n\n if (!objectContainsKey) {\n if (optional) {\n return;\n } else {\n throw new Error(\n errorPrefixFxn(fnName, argumentName) +\n 'must contain the key \"' +\n key +\n '\"'\n );\n }\n }\n\n if (optType) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const val = safeGet(obj as any, key);\n if (\n (optType === 'number' && !(typeof val === 'number')) ||\n (optType === 'string' && !(typeof val === 'string')) ||\n (optType === 'boolean' && !(typeof val === 'boolean')) ||\n (optType === 'function' && !(typeof val === 'function')) ||\n (optType === 'object' && !(typeof val === 'object') && val)\n ) {\n if (optional) {\n throw new Error(\n errorPrefixFxn(fnName, argumentName) +\n 'contains invalid value for key \"' +\n key +\n '\" (must be of type \"' +\n optType +\n '\")'\n );\n } else {\n throw new Error(\n errorPrefixFxn(fnName, argumentName) +\n 'must contain the key \"' +\n key +\n '\" with type \"' +\n optType +\n '\"'\n );\n }\n }\n }\n};\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Path, pathContains, pathEquals } from '../util/Path';\nimport { exceptionGuard, log, logger } from '../util/util';\n\nimport { Event } from './Event';\n\n/**\n * The event queue serves a few purposes:\n * 1. It ensures we maintain event order in the face of event callbacks doing operations that result in more\n * events being queued.\n * 2. raiseQueuedEvents() handles being called reentrantly nicely. That is, if in the course of raising events,\n * raiseQueuedEvents() is called again, the \"inner\" call will pick up raising events where the \"outer\" call\n * left off, ensuring that the events are still raised synchronously and in order.\n * 3. You can use raiseEventsAtPath and raiseEventsForChangedPath to ensure only relevant previously-queued\n * events are raised synchronously.\n *\n * NOTE: This can all go away if/when we move to async events.\n *\n */\nexport class EventQueue {\n eventLists_: EventList[] = [];\n\n /**\n * Tracks recursion depth of raiseQueuedEvents_, for debugging purposes.\n */\n recursionDepth_ = 0;\n}\n\n/**\n * @param eventDataList - The new events to queue.\n */\nexport function eventQueueQueueEvents(\n eventQueue: EventQueue,\n eventDataList: Event[]\n) {\n // We group events by path, storing them in a single EventList, to make it easier to skip over them quickly.\n let currList: EventList | null = null;\n for (let i = 0; i < eventDataList.length; i++) {\n const data = eventDataList[i];\n const path = data.getPath();\n if (currList !== null && !pathEquals(path, currList.path)) {\n eventQueue.eventLists_.push(currList);\n currList = null;\n }\n\n if (currList === null) {\n currList = { events: [], path };\n }\n\n currList.events.push(data);\n }\n if (currList) {\n eventQueue.eventLists_.push(currList);\n }\n}\n\n/**\n * Queues the specified events and synchronously raises all events (including previously queued ones)\n * for the specified path.\n *\n * It is assumed that the new events are all for the specified path.\n *\n * @param path - The path to raise events for.\n * @param eventDataList - The new events to raise.\n */\nexport function eventQueueRaiseEventsAtPath(\n eventQueue: EventQueue,\n path: Path,\n eventDataList: Event[]\n) {\n eventQueueQueueEvents(eventQueue, eventDataList);\n eventQueueRaiseQueuedEventsMatchingPredicate(eventQueue, eventPath =>\n pathEquals(eventPath, path)\n );\n}\n\n/**\n * Queues the specified events and synchronously raises all events (including previously queued ones) for\n * locations related to the specified change path (i.e. all ancestors and descendants).\n *\n * It is assumed that the new events are all related (ancestor or descendant) to the specified path.\n *\n * @param changedPath - The path to raise events for.\n * @param eventDataList - The events to raise\n */\nexport function eventQueueRaiseEventsForChangedPath(\n eventQueue: EventQueue,\n changedPath: Path,\n eventDataList: Event[]\n) {\n eventQueueQueueEvents(eventQueue, eventDataList);\n eventQueueRaiseQueuedEventsMatchingPredicate(\n eventQueue,\n eventPath =>\n pathContains(eventPath, changedPath) ||\n pathContains(changedPath, eventPath)\n );\n}\n\nfunction eventQueueRaiseQueuedEventsMatchingPredicate(\n eventQueue: EventQueue,\n predicate: (path: Path) => boolean\n) {\n eventQueue.recursionDepth_++;\n\n let sentAll = true;\n for (let i = 0; i < eventQueue.eventLists_.length; i++) {\n const eventList = eventQueue.eventLists_[i];\n if (eventList) {\n const eventPath = eventList.path;\n if (predicate(eventPath)) {\n eventListRaise(eventQueue.eventLists_[i]);\n eventQueue.eventLists_[i] = null;\n } else {\n sentAll = false;\n }\n }\n }\n\n if (sentAll) {\n eventQueue.eventLists_ = [];\n }\n\n eventQueue.recursionDepth_--;\n}\n\ninterface EventList {\n events: Event[];\n path: Path;\n}\n\n/**\n * Iterates through the list and raises each event\n */\nfunction eventListRaise(eventList: EventList) {\n for (let i = 0; i < eventList.events.length; i++) {\n const eventData = eventList.events[i];\n if (eventData !== null) {\n eventList.events[i] = null;\n const eventFn = eventData.getEventRunner();\n if (logger) {\n log('event: ' + eventData.toString());\n }\n exceptionGuard(eventFn);\n }\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n assert,\n contains,\n isEmpty,\n map,\n safeGet,\n stringify\n} from '@firebase/util';\n\nimport { ValueEventRegistration } from '../api/Reference_impl';\n\nimport { AppCheckTokenProvider } from './AppCheckTokenProvider';\nimport { AuthTokenProvider } from './AuthTokenProvider';\nimport { PersistentConnection } from './PersistentConnection';\nimport { ReadonlyRestClient } from './ReadonlyRestClient';\nimport { RepoInfo } from './RepoInfo';\nimport { ServerActions } from './ServerActions';\nimport { ChildrenNode } from './snap/ChildrenNode';\nimport { Node } from './snap/Node';\nimport { nodeFromJSON } from './snap/nodeFromJSON';\nimport { SnapshotHolder } from './SnapshotHolder';\nimport {\n newSparseSnapshotTree,\n SparseSnapshotTree,\n sparseSnapshotTreeForEachTree,\n sparseSnapshotTreeForget,\n sparseSnapshotTreeRemember\n} from './SparseSnapshotTree';\nimport { StatsCollection } from './stats/StatsCollection';\nimport { StatsListener } from './stats/StatsListener';\nimport {\n statsManagerGetCollection,\n statsManagerGetOrCreateReporter\n} from './stats/StatsManager';\nimport { StatsReporter, statsReporterIncludeStat } from './stats/StatsReporter';\nimport {\n SyncTree,\n syncTreeAckUserWrite,\n syncTreeAddEventRegistration,\n syncTreeApplyServerMerge,\n syncTreeApplyServerOverwrite,\n syncTreeApplyTaggedQueryMerge,\n syncTreeApplyTaggedQueryOverwrite,\n syncTreeApplyUserMerge,\n syncTreeApplyUserOverwrite,\n syncTreeCalcCompleteEventCache,\n syncTreeGetServerValue,\n syncTreeRemoveEventRegistration,\n syncTreeTagForQuery\n} from './SyncTree';\nimport { Indexable } from './util/misc';\nimport {\n newEmptyPath,\n newRelativePath,\n Path,\n pathChild,\n pathGetFront,\n pathPopFront\n} from './util/Path';\nimport {\n generateWithValues,\n resolveDeferredValueSnapshot,\n resolveDeferredValueTree\n} from './util/ServerValues';\nimport {\n Tree,\n treeForEachAncestor,\n treeForEachChild,\n treeForEachDescendant,\n treeGetPath,\n treeGetValue,\n treeHasChildren,\n treeSetValue,\n treeSubTree\n} from './util/Tree';\nimport {\n beingCrawled,\n each,\n exceptionGuard,\n log,\n LUIDGenerator,\n warn\n} from './util/util';\nimport { isValidPriority, validateFirebaseData } from './util/validation';\nimport { Event } from './view/Event';\nimport {\n EventQueue,\n eventQueueQueueEvents,\n eventQueueRaiseEventsAtPath,\n eventQueueRaiseEventsForChangedPath\n} from './view/EventQueue';\nimport { EventRegistration, QueryContext } from './view/EventRegistration';\n\nconst INTERRUPT_REASON = 'repo_interrupt';\n\n/**\n * If a transaction does not succeed after 25 retries, we abort it. Among other\n * things this ensure that if there's ever a bug causing a mismatch between\n * client / server hashes for some data, we won't retry indefinitely.\n */\nconst MAX_TRANSACTION_RETRIES = 25;\n\nconst enum TransactionStatus {\n // We've run the transaction and updated transactionResultData_ with the result, but it isn't currently sent to the\n // server. A transaction will go from RUN -> SENT -> RUN if it comes back from the server as rejected due to\n // mismatched hash.\n RUN,\n\n // We've run the transaction and sent it to the server and it's currently outstanding (hasn't come back as accepted\n // or rejected yet).\n SENT,\n\n // Temporary state used to mark completed transactions (whether successful or aborted). The transaction will be\n // removed when we get a chance to prune completed ones.\n COMPLETED,\n\n // Used when an already-sent transaction needs to be aborted (e.g. due to a conflicting set() call that was made).\n // If it comes back as unsuccessful, we'll abort it.\n SENT_NEEDS_ABORT,\n\n // Temporary state used to mark transactions that need to be aborted.\n NEEDS_ABORT\n}\n\ninterface Transaction {\n path: Path;\n update: (a: unknown) => unknown;\n onComplete: (\n error: Error | null,\n committed: boolean,\n node: Node | null\n ) => void;\n status: TransactionStatus;\n order: number;\n applyLocally: boolean;\n retryCount: number;\n unwatcher: () => void;\n abortReason: string | null;\n currentWriteId: number;\n currentInputSnapshot: Node | null;\n currentOutputSnapshotRaw: Node | null;\n currentOutputSnapshotResolved: Node | null;\n}\n\n/**\n * A connection to a single data repository.\n */\nexport class Repo {\n /** Key for uniquely identifying this repo, used in RepoManager */\n readonly key: string;\n\n dataUpdateCount = 0;\n infoSyncTree_: SyncTree;\n serverSyncTree_: SyncTree;\n\n stats_: StatsCollection;\n statsListener_: StatsListener | null = null;\n eventQueue_ = new EventQueue();\n nextWriteId_ = 1;\n server_: ServerActions;\n statsReporter_: StatsReporter;\n infoData_: SnapshotHolder;\n interceptServerDataCallback_: ((a: string, b: unknown) => void) | null = null;\n\n /** A list of data pieces and paths to be set when this client disconnects. */\n onDisconnect_: SparseSnapshotTree = newSparseSnapshotTree();\n\n /** Stores queues of outstanding transactions for Firebase locations. */\n transactionQueueTree_ = new Tree();\n\n // TODO: This should be @private but it's used by test_access.js and internal.js\n persistentConnection_: PersistentConnection | null = null;\n\n constructor(\n public repoInfo_: RepoInfo,\n public forceRestClient_: boolean,\n public authTokenProvider_: AuthTokenProvider,\n public appCheckProvider_: AppCheckTokenProvider\n ) {\n // This key is intentionally not updated if RepoInfo is later changed or replaced\n this.key = this.repoInfo_.toURLString();\n }\n\n /**\n * @returns The URL corresponding to the root of this Firebase.\n */\n toString(): string {\n return (\n (this.repoInfo_.secure ? 'https://' : 'http://') + this.repoInfo_.host\n );\n }\n}\n\nexport function repoStart(\n repo: Repo,\n appId: string,\n authOverride?: object\n): void {\n repo.stats_ = statsManagerGetCollection(repo.repoInfo_);\n\n if (repo.forceRestClient_ || beingCrawled()) {\n repo.server_ = new ReadonlyRestClient(\n repo.repoInfo_,\n (\n pathString: string,\n data: unknown,\n isMerge: boolean,\n tag: number | null\n ) => {\n repoOnDataUpdate(repo, pathString, data, isMerge, tag);\n },\n repo.authTokenProvider_,\n repo.appCheckProvider_\n );\n\n // Minor hack: Fire onConnect immediately, since there's no actual connection.\n setTimeout(() => repoOnConnectStatus(repo, /* connectStatus= */ true), 0);\n } else {\n // Validate authOverride\n if (typeof authOverride !== 'undefined' && authOverride !== null) {\n if (typeof authOverride !== 'object') {\n throw new Error(\n 'Only objects are supported for option databaseAuthVariableOverride'\n );\n }\n try {\n stringify(authOverride);\n } catch (e) {\n throw new Error('Invalid authOverride provided: ' + e);\n }\n }\n\n repo.persistentConnection_ = new PersistentConnection(\n repo.repoInfo_,\n appId,\n (\n pathString: string,\n data: unknown,\n isMerge: boolean,\n tag: number | null\n ) => {\n repoOnDataUpdate(repo, pathString, data, isMerge, tag);\n },\n (connectStatus: boolean) => {\n repoOnConnectStatus(repo, connectStatus);\n },\n (updates: object) => {\n repoOnServerInfoUpdate(repo, updates);\n },\n repo.authTokenProvider_,\n repo.appCheckProvider_,\n authOverride\n );\n\n repo.server_ = repo.persistentConnection_;\n }\n\n repo.authTokenProvider_.addTokenChangeListener(token => {\n repo.server_.refreshAuthToken(token);\n });\n\n repo.appCheckProvider_.addTokenChangeListener(result => {\n repo.server_.refreshAppCheckToken(result.token);\n });\n\n // In the case of multiple Repos for the same repoInfo (i.e. there are multiple Firebase.Contexts being used),\n // we only want to create one StatsReporter. As such, we'll report stats over the first Repo created.\n repo.statsReporter_ = statsManagerGetOrCreateReporter(\n repo.repoInfo_,\n () => new StatsReporter(repo.stats_, repo.server_)\n );\n\n // Used for .info.\n repo.infoData_ = new SnapshotHolder();\n repo.infoSyncTree_ = new SyncTree({\n startListening: (query, tag, currentHashFn, onComplete) => {\n let infoEvents: Event[] = [];\n const node = repo.infoData_.getNode(query._path);\n // This is possibly a hack, but we have different semantics for .info endpoints. We don't raise null events\n // on initial data...\n if (!node.isEmpty()) {\n infoEvents = syncTreeApplyServerOverwrite(\n repo.infoSyncTree_,\n query._path,\n node\n );\n setTimeout(() => {\n onComplete('ok');\n }, 0);\n }\n return infoEvents;\n },\n stopListening: () => {}\n });\n repoUpdateInfo(repo, 'connected', false);\n\n repo.serverSyncTree_ = new SyncTree({\n startListening: (query, tag, currentHashFn, onComplete) => {\n repo.server_.listen(query, currentHashFn, tag, (status, data) => {\n const events = onComplete(status, data);\n eventQueueRaiseEventsForChangedPath(\n repo.eventQueue_,\n query._path,\n events\n );\n });\n // No synchronous events for network-backed sync trees\n return [];\n },\n stopListening: (query, tag) => {\n repo.server_.unlisten(query, tag);\n }\n });\n}\n\n/**\n * @returns The time in milliseconds, taking the server offset into account if we have one.\n */\nexport function repoServerTime(repo: Repo): number {\n const offsetNode = repo.infoData_.getNode(new Path('.info/serverTimeOffset'));\n const offset = (offsetNode.val() as number) || 0;\n return new Date().getTime() + offset;\n}\n\n/**\n * Generate ServerValues using some variables from the repo object.\n */\nexport function repoGenerateServerValues(repo: Repo): Indexable {\n return generateWithValues({\n timestamp: repoServerTime(repo)\n });\n}\n\n/**\n * Called by realtime when we get new messages from the server.\n */\nfunction repoOnDataUpdate(\n repo: Repo,\n pathString: string,\n data: unknown,\n isMerge: boolean,\n tag: number | null\n): void {\n // For testing.\n repo.dataUpdateCount++;\n const path = new Path(pathString);\n data = repo.interceptServerDataCallback_\n ? repo.interceptServerDataCallback_(pathString, data)\n : data;\n let events = [];\n if (tag) {\n if (isMerge) {\n const taggedChildren = map(\n data as { [k: string]: unknown },\n (raw: unknown) => nodeFromJSON(raw)\n );\n events = syncTreeApplyTaggedQueryMerge(\n repo.serverSyncTree_,\n path,\n taggedChildren,\n tag\n );\n } else {\n const taggedSnap = nodeFromJSON(data);\n events = syncTreeApplyTaggedQueryOverwrite(\n repo.serverSyncTree_,\n path,\n taggedSnap,\n tag\n );\n }\n } else if (isMerge) {\n const changedChildren = map(\n data as { [k: string]: unknown },\n (raw: unknown) => nodeFromJSON(raw)\n );\n events = syncTreeApplyServerMerge(\n repo.serverSyncTree_,\n path,\n changedChildren\n );\n } else {\n const snap = nodeFromJSON(data);\n events = syncTreeApplyServerOverwrite(repo.serverSyncTree_, path, snap);\n }\n let affectedPath = path;\n if (events.length > 0) {\n // Since we have a listener outstanding for each transaction, receiving any events\n // is a proxy for some change having occurred.\n affectedPath = repoRerunTransactions(repo, path);\n }\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, affectedPath, events);\n}\n\n// TODO: This should be @private but it's used by test_access.js and internal.js\nexport function repoInterceptServerData(\n repo: Repo,\n callback: ((a: string, b: unknown) => unknown) | null\n): void {\n repo.interceptServerDataCallback_ = callback;\n}\n\nfunction repoOnConnectStatus(repo: Repo, connectStatus: boolean): void {\n repoUpdateInfo(repo, 'connected', connectStatus);\n if (connectStatus === false) {\n repoRunOnDisconnectEvents(repo);\n }\n}\n\nfunction repoOnServerInfoUpdate(repo: Repo, updates: object): void {\n each(updates, (key: string, value: unknown) => {\n repoUpdateInfo(repo, key, value);\n });\n}\n\nfunction repoUpdateInfo(repo: Repo, pathString: string, value: unknown): void {\n const path = new Path('/.info/' + pathString);\n const newNode = nodeFromJSON(value);\n repo.infoData_.updateSnapshot(path, newNode);\n const events = syncTreeApplyServerOverwrite(\n repo.infoSyncTree_,\n path,\n newNode\n );\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, events);\n}\n\nfunction repoGetNextWriteId(repo: Repo): number {\n return repo.nextWriteId_++;\n}\n\n/**\n * The purpose of `getValue` is to return the latest known value\n * satisfying `query`.\n *\n * This method will first check for in-memory cached values\n * belonging to active listeners. If they are found, such values\n * are considered to be the most up-to-date.\n *\n * If the client is not connected, this method will wait until the\n * repo has established a connection and then request the value for `query`.\n * If the client is not able to retrieve the query result for another reason,\n * it reports an error.\n *\n * @param query - The query to surface a value for.\n */\nexport function repoGetValue(\n repo: Repo,\n query: QueryContext,\n eventRegistration: ValueEventRegistration\n): Promise {\n // Only active queries are cached. There is no persisted cache.\n const cached = syncTreeGetServerValue(repo.serverSyncTree_, query);\n if (cached != null) {\n return Promise.resolve(cached);\n }\n return repo.server_.get(query).then(\n payload => {\n const node = nodeFromJSON(payload).withIndex(\n query._queryParams.getIndex()\n );\n /**\n * Below we simulate the actions of an `onlyOnce` `onValue()` event where:\n * Add an event registration,\n * Update data at the path,\n * Raise any events,\n * Cleanup the SyncTree\n */\n syncTreeAddEventRegistration(\n repo.serverSyncTree_,\n query,\n eventRegistration,\n true\n );\n let events: Event[];\n if (query._queryParams.loadsAllData()) {\n events = syncTreeApplyServerOverwrite(\n repo.serverSyncTree_,\n query._path,\n node\n );\n } else {\n const tag = syncTreeTagForQuery(repo.serverSyncTree_, query);\n events = syncTreeApplyTaggedQueryOverwrite(\n repo.serverSyncTree_,\n query._path,\n node,\n tag\n );\n }\n /*\n * We need to raise events in the scenario where `get()` is called at a parent path, and\n * while the `get()` is pending, `onValue` is called at a child location. While get() is waiting\n * for the data, `onValue` will register a new event. Then, get() will come back, and update the syncTree\n * and its corresponding serverCache, including the child location where `onValue` is called. Then,\n * `onValue` will receive the event from the server, but look at the syncTree and see that the data received\n * from the server is already at the SyncPoint, and so the `onValue` callback will never get fired.\n * Calling `eventQueueRaiseEventsForChangedPath()` is the correct way to propagate the events and\n * ensure the corresponding child events will get fired.\n */\n eventQueueRaiseEventsForChangedPath(\n repo.eventQueue_,\n query._path,\n events\n );\n syncTreeRemoveEventRegistration(\n repo.serverSyncTree_,\n query,\n eventRegistration,\n null,\n true\n );\n return node;\n },\n err => {\n repoLog(repo, 'get for query ' + stringify(query) + ' failed: ' + err);\n return Promise.reject(new Error(err as string));\n }\n );\n}\n\nexport function repoSetWithPriority(\n repo: Repo,\n path: Path,\n newVal: unknown,\n newPriority: number | string | null,\n onComplete: ((status: Error | null, errorReason?: string) => void) | null\n): void {\n repoLog(repo, 'set', {\n path: path.toString(),\n value: newVal,\n priority: newPriority\n });\n\n // TODO: Optimize this behavior to either (a) store flag to skip resolving where possible and / or\n // (b) store unresolved paths on JSON parse\n const serverValues = repoGenerateServerValues(repo);\n const newNodeUnresolved = nodeFromJSON(newVal, newPriority);\n const existing = syncTreeCalcCompleteEventCache(repo.serverSyncTree_, path);\n const newNode = resolveDeferredValueSnapshot(\n newNodeUnresolved,\n existing,\n serverValues\n );\n\n const writeId = repoGetNextWriteId(repo);\n const events = syncTreeApplyUserOverwrite(\n repo.serverSyncTree_,\n path,\n newNode,\n writeId,\n true\n );\n eventQueueQueueEvents(repo.eventQueue_, events);\n repo.server_.put(\n path.toString(),\n newNodeUnresolved.val(/*export=*/ true),\n (status, errorReason) => {\n const success = status === 'ok';\n if (!success) {\n warn('set at ' + path + ' failed: ' + status);\n }\n\n const clearEvents = syncTreeAckUserWrite(\n repo.serverSyncTree_,\n writeId,\n !success\n );\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, clearEvents);\n repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\n }\n );\n const affectedPath = repoAbortTransactions(repo, path);\n repoRerunTransactions(repo, affectedPath);\n // We queued the events above, so just flush the queue here\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, affectedPath, []);\n}\n\nexport function repoUpdate(\n repo: Repo,\n path: Path,\n childrenToMerge: { [k: string]: unknown },\n onComplete: ((status: Error | null, errorReason?: string) => void) | null\n): void {\n repoLog(repo, 'update', { path: path.toString(), value: childrenToMerge });\n\n // Start with our existing data and merge each child into it.\n let empty = true;\n const serverValues = repoGenerateServerValues(repo);\n const changedChildren: { [k: string]: Node } = {};\n each(childrenToMerge, (changedKey: string, changedValue: unknown) => {\n empty = false;\n changedChildren[changedKey] = resolveDeferredValueTree(\n pathChild(path, changedKey),\n nodeFromJSON(changedValue),\n repo.serverSyncTree_,\n serverValues\n );\n });\n\n if (!empty) {\n const writeId = repoGetNextWriteId(repo);\n const events = syncTreeApplyUserMerge(\n repo.serverSyncTree_,\n path,\n changedChildren,\n writeId\n );\n eventQueueQueueEvents(repo.eventQueue_, events);\n repo.server_.merge(\n path.toString(),\n childrenToMerge,\n (status, errorReason) => {\n const success = status === 'ok';\n if (!success) {\n warn('update at ' + path + ' failed: ' + status);\n }\n\n const clearEvents = syncTreeAckUserWrite(\n repo.serverSyncTree_,\n writeId,\n !success\n );\n const affectedPath =\n clearEvents.length > 0 ? repoRerunTransactions(repo, path) : path;\n eventQueueRaiseEventsForChangedPath(\n repo.eventQueue_,\n affectedPath,\n clearEvents\n );\n repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\n }\n );\n\n each(childrenToMerge, (changedPath: string) => {\n const affectedPath = repoAbortTransactions(\n repo,\n pathChild(path, changedPath)\n );\n repoRerunTransactions(repo, affectedPath);\n });\n\n // We queued the events above, so just flush the queue here\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, []);\n } else {\n log(\"update() called with empty data. Don't do anything.\");\n repoCallOnCompleteCallback(repo, onComplete, 'ok', undefined);\n }\n}\n\n/**\n * Applies all of the changes stored up in the onDisconnect_ tree.\n */\nfunction repoRunOnDisconnectEvents(repo: Repo): void {\n repoLog(repo, 'onDisconnectEvents');\n\n const serverValues = repoGenerateServerValues(repo);\n const resolvedOnDisconnectTree = newSparseSnapshotTree();\n sparseSnapshotTreeForEachTree(\n repo.onDisconnect_,\n newEmptyPath(),\n (path, node) => {\n const resolved = resolveDeferredValueTree(\n path,\n node,\n repo.serverSyncTree_,\n serverValues\n );\n sparseSnapshotTreeRemember(resolvedOnDisconnectTree, path, resolved);\n }\n );\n let events: Event[] = [];\n\n sparseSnapshotTreeForEachTree(\n resolvedOnDisconnectTree,\n newEmptyPath(),\n (path, snap) => {\n events = events.concat(\n syncTreeApplyServerOverwrite(repo.serverSyncTree_, path, snap)\n );\n const affectedPath = repoAbortTransactions(repo, path);\n repoRerunTransactions(repo, affectedPath);\n }\n );\n\n repo.onDisconnect_ = newSparseSnapshotTree();\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, newEmptyPath(), events);\n}\n\nexport function repoOnDisconnectCancel(\n repo: Repo,\n path: Path,\n onComplete: ((status: Error | null, errorReason?: string) => void) | null\n): void {\n repo.server_.onDisconnectCancel(path.toString(), (status, errorReason) => {\n if (status === 'ok') {\n sparseSnapshotTreeForget(repo.onDisconnect_, path);\n }\n repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\n });\n}\n\nexport function repoOnDisconnectSet(\n repo: Repo,\n path: Path,\n value: unknown,\n onComplete: ((status: Error | null, errorReason?: string) => void) | null\n): void {\n const newNode = nodeFromJSON(value);\n repo.server_.onDisconnectPut(\n path.toString(),\n newNode.val(/*export=*/ true),\n (status, errorReason) => {\n if (status === 'ok') {\n sparseSnapshotTreeRemember(repo.onDisconnect_, path, newNode);\n }\n repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\n }\n );\n}\n\nexport function repoOnDisconnectSetWithPriority(\n repo: Repo,\n path: Path,\n value: unknown,\n priority: unknown,\n onComplete: ((status: Error | null, errorReason?: string) => void) | null\n): void {\n const newNode = nodeFromJSON(value, priority);\n repo.server_.onDisconnectPut(\n path.toString(),\n newNode.val(/*export=*/ true),\n (status, errorReason) => {\n if (status === 'ok') {\n sparseSnapshotTreeRemember(repo.onDisconnect_, path, newNode);\n }\n repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\n }\n );\n}\n\nexport function repoOnDisconnectUpdate(\n repo: Repo,\n path: Path,\n childrenToMerge: { [k: string]: unknown },\n onComplete: ((status: Error | null, errorReason?: string) => void) | null\n): void {\n if (isEmpty(childrenToMerge)) {\n log(\"onDisconnect().update() called with empty data. Don't do anything.\");\n repoCallOnCompleteCallback(repo, onComplete, 'ok', undefined);\n return;\n }\n\n repo.server_.onDisconnectMerge(\n path.toString(),\n childrenToMerge,\n (status, errorReason) => {\n if (status === 'ok') {\n each(childrenToMerge, (childName: string, childNode: unknown) => {\n const newChildNode = nodeFromJSON(childNode);\n sparseSnapshotTreeRemember(\n repo.onDisconnect_,\n pathChild(path, childName),\n newChildNode\n );\n });\n }\n repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\n }\n );\n}\n\nexport function repoAddEventCallbackForQuery(\n repo: Repo,\n query: QueryContext,\n eventRegistration: EventRegistration\n): void {\n let events;\n if (pathGetFront(query._path) === '.info') {\n events = syncTreeAddEventRegistration(\n repo.infoSyncTree_,\n query,\n eventRegistration\n );\n } else {\n events = syncTreeAddEventRegistration(\n repo.serverSyncTree_,\n query,\n eventRegistration\n );\n }\n eventQueueRaiseEventsAtPath(repo.eventQueue_, query._path, events);\n}\n\nexport function repoRemoveEventCallbackForQuery(\n repo: Repo,\n query: QueryContext,\n eventRegistration: EventRegistration\n): void {\n // These are guaranteed not to raise events, since we're not passing in a cancelError. However, we can future-proof\n // a little bit by handling the return values anyways.\n let events;\n if (pathGetFront(query._path) === '.info') {\n events = syncTreeRemoveEventRegistration(\n repo.infoSyncTree_,\n query,\n eventRegistration\n );\n } else {\n events = syncTreeRemoveEventRegistration(\n repo.serverSyncTree_,\n query,\n eventRegistration\n );\n }\n eventQueueRaiseEventsAtPath(repo.eventQueue_, query._path, events);\n}\n\nexport function repoInterrupt(repo: Repo): void {\n if (repo.persistentConnection_) {\n repo.persistentConnection_.interrupt(INTERRUPT_REASON);\n }\n}\n\nexport function repoResume(repo: Repo): void {\n if (repo.persistentConnection_) {\n repo.persistentConnection_.resume(INTERRUPT_REASON);\n }\n}\n\nexport function repoStats(repo: Repo, showDelta: boolean = false): void {\n if (typeof console === 'undefined') {\n return;\n }\n\n let stats: { [k: string]: unknown };\n if (showDelta) {\n if (!repo.statsListener_) {\n repo.statsListener_ = new StatsListener(repo.stats_);\n }\n stats = repo.statsListener_.get();\n } else {\n stats = repo.stats_.get();\n }\n\n const longestName = Object.keys(stats).reduce(\n (previousValue, currentValue) =>\n Math.max(currentValue.length, previousValue),\n 0\n );\n\n each(stats, (stat: string, value: unknown) => {\n let paddedStat = stat;\n // pad stat names to be the same length (plus 2 extra spaces).\n for (let i = stat.length; i < longestName + 2; i++) {\n paddedStat += ' ';\n }\n console.log(paddedStat + value);\n });\n}\n\nexport function repoStatsIncrementCounter(repo: Repo, metric: string): void {\n repo.stats_.incrementCounter(metric);\n statsReporterIncludeStat(repo.statsReporter_, metric);\n}\n\nfunction repoLog(repo: Repo, ...varArgs: unknown[]): void {\n let prefix = '';\n if (repo.persistentConnection_) {\n prefix = repo.persistentConnection_.id + ':';\n }\n log(prefix, ...varArgs);\n}\n\nexport function repoCallOnCompleteCallback(\n repo: Repo,\n callback: ((status: Error | null, errorReason?: string) => void) | null,\n status: string,\n errorReason?: string | null\n): void {\n if (callback) {\n exceptionGuard(() => {\n if (status === 'ok') {\n callback(null);\n } else {\n const code = (status || 'error').toUpperCase();\n let message = code;\n if (errorReason) {\n message += ': ' + errorReason;\n }\n\n const error = new Error(message);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (error as any).code = code;\n callback(error);\n }\n });\n }\n}\n\n/**\n * Creates a new transaction, adds it to the transactions we're tracking, and\n * sends it to the server if possible.\n *\n * @param path - Path at which to do transaction.\n * @param transactionUpdate - Update callback.\n * @param onComplete - Completion callback.\n * @param unwatcher - Function that will be called when the transaction no longer\n * need data updates for `path`.\n * @param applyLocally - Whether or not to make intermediate results visible\n */\nexport function repoStartTransaction(\n repo: Repo,\n path: Path,\n transactionUpdate: (a: unknown) => unknown,\n onComplete: ((error: Error, committed: boolean, node: Node) => void) | null,\n unwatcher: () => void,\n applyLocally: boolean\n): void {\n repoLog(repo, 'transaction on ' + path);\n\n // Initialize transaction.\n const transaction: Transaction = {\n path,\n update: transactionUpdate,\n onComplete,\n // One of TransactionStatus enums.\n status: null,\n // Used when combining transactions at different locations to figure out\n // which one goes first.\n order: LUIDGenerator(),\n // Whether to raise local events for this transaction.\n applyLocally,\n // Count of how many times we've retried the transaction.\n retryCount: 0,\n // Function to call to clean up our .on() listener.\n unwatcher,\n // Stores why a transaction was aborted.\n abortReason: null,\n currentWriteId: null,\n currentInputSnapshot: null,\n currentOutputSnapshotRaw: null,\n currentOutputSnapshotResolved: null\n };\n\n // Run transaction initially.\n const currentState = repoGetLatestState(repo, path, undefined);\n transaction.currentInputSnapshot = currentState;\n const newVal = transaction.update(currentState.val());\n if (newVal === undefined) {\n // Abort transaction.\n transaction.unwatcher();\n transaction.currentOutputSnapshotRaw = null;\n transaction.currentOutputSnapshotResolved = null;\n if (transaction.onComplete) {\n transaction.onComplete(null, false, transaction.currentInputSnapshot);\n }\n } else {\n validateFirebaseData(\n 'transaction failed: Data returned ',\n newVal,\n transaction.path\n );\n\n // Mark as run and add to our queue.\n transaction.status = TransactionStatus.RUN;\n const queueNode = treeSubTree(repo.transactionQueueTree_, path);\n const nodeQueue = treeGetValue(queueNode) || [];\n nodeQueue.push(transaction);\n\n treeSetValue(queueNode, nodeQueue);\n\n // Update visibleData and raise events\n // Note: We intentionally raise events after updating all of our\n // transaction state, since the user could start new transactions from the\n // event callbacks.\n let priorityForNode;\n if (\n typeof newVal === 'object' &&\n newVal !== null &&\n contains(newVal, '.priority')\n ) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n priorityForNode = safeGet(newVal as any, '.priority');\n assert(\n isValidPriority(priorityForNode),\n 'Invalid priority returned by transaction. ' +\n 'Priority must be a valid string, finite number, server value, or null.'\n );\n } else {\n const currentNode =\n syncTreeCalcCompleteEventCache(repo.serverSyncTree_, path) ||\n ChildrenNode.EMPTY_NODE;\n priorityForNode = currentNode.getPriority().val();\n }\n\n const serverValues = repoGenerateServerValues(repo);\n const newNodeUnresolved = nodeFromJSON(newVal, priorityForNode);\n const newNode = resolveDeferredValueSnapshot(\n newNodeUnresolved,\n currentState,\n serverValues\n );\n transaction.currentOutputSnapshotRaw = newNodeUnresolved;\n transaction.currentOutputSnapshotResolved = newNode;\n transaction.currentWriteId = repoGetNextWriteId(repo);\n\n const events = syncTreeApplyUserOverwrite(\n repo.serverSyncTree_,\n path,\n newNode,\n transaction.currentWriteId,\n transaction.applyLocally\n );\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, events);\n\n repoSendReadyTransactions(repo, repo.transactionQueueTree_);\n }\n}\n\n/**\n * @param excludeSets - A specific set to exclude\n */\nfunction repoGetLatestState(\n repo: Repo,\n path: Path,\n excludeSets?: number[]\n): Node {\n return (\n syncTreeCalcCompleteEventCache(repo.serverSyncTree_, path, excludeSets) ||\n ChildrenNode.EMPTY_NODE\n );\n}\n\n/**\n * Sends any already-run transactions that aren't waiting for outstanding\n * transactions to complete.\n *\n * Externally it's called with no arguments, but it calls itself recursively\n * with a particular transactionQueueTree node to recurse through the tree.\n *\n * @param node - transactionQueueTree node to start at.\n */\nfunction repoSendReadyTransactions(\n repo: Repo,\n node: Tree = repo.transactionQueueTree_\n): void {\n // Before recursing, make sure any completed transactions are removed.\n if (!node) {\n repoPruneCompletedTransactionsBelowNode(repo, node);\n }\n\n if (treeGetValue(node)) {\n const queue = repoBuildTransactionQueue(repo, node);\n assert(queue.length > 0, 'Sending zero length transaction queue');\n\n const allRun = queue.every(\n (transaction: Transaction) => transaction.status === TransactionStatus.RUN\n );\n\n // If they're all run (and not sent), we can send them. Else, we must wait.\n if (allRun) {\n repoSendTransactionQueue(repo, treeGetPath(node), queue);\n }\n } else if (treeHasChildren(node)) {\n treeForEachChild(node, childNode => {\n repoSendReadyTransactions(repo, childNode);\n });\n }\n}\n\n/**\n * Given a list of run transactions, send them to the server and then handle\n * the result (success or failure).\n *\n * @param path - The location of the queue.\n * @param queue - Queue of transactions under the specified location.\n */\nfunction repoSendTransactionQueue(\n repo: Repo,\n path: Path,\n queue: Transaction[]\n): void {\n // Mark transactions as sent and increment retry count!\n const setsToIgnore = queue.map(txn => {\n return txn.currentWriteId;\n });\n const latestState = repoGetLatestState(repo, path, setsToIgnore);\n let snapToSend = latestState;\n const latestHash = latestState.hash();\n for (let i = 0; i < queue.length; i++) {\n const txn = queue[i];\n assert(\n txn.status === TransactionStatus.RUN,\n 'tryToSendTransactionQueue_: items in queue should all be run.'\n );\n txn.status = TransactionStatus.SENT;\n txn.retryCount++;\n const relativePath = newRelativePath(path, txn.path);\n // If we've gotten to this point, the output snapshot must be defined.\n snapToSend = snapToSend.updateChild(\n relativePath /** @type {!Node} */,\n txn.currentOutputSnapshotRaw\n );\n }\n\n const dataToSend = snapToSend.val(true);\n const pathToSend = path;\n\n // Send the put.\n repo.server_.put(\n pathToSend.toString(),\n dataToSend,\n (status: string) => {\n repoLog(repo, 'transaction put response', {\n path: pathToSend.toString(),\n status\n });\n\n let events: Event[] = [];\n if (status === 'ok') {\n // Queue up the callbacks and fire them after cleaning up all of our\n // transaction state, since the callback could trigger more\n // transactions or sets.\n const callbacks = [];\n for (let i = 0; i < queue.length; i++) {\n queue[i].status = TransactionStatus.COMPLETED;\n events = events.concat(\n syncTreeAckUserWrite(repo.serverSyncTree_, queue[i].currentWriteId)\n );\n if (queue[i].onComplete) {\n // We never unset the output snapshot, and given that this\n // transaction is complete, it should be set\n callbacks.push(() =>\n queue[i].onComplete(\n null,\n true,\n queue[i].currentOutputSnapshotResolved\n )\n );\n }\n queue[i].unwatcher();\n }\n\n // Now remove the completed transactions.\n repoPruneCompletedTransactionsBelowNode(\n repo,\n treeSubTree(repo.transactionQueueTree_, path)\n );\n // There may be pending transactions that we can now send.\n repoSendReadyTransactions(repo, repo.transactionQueueTree_);\n\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, events);\n\n // Finally, trigger onComplete callbacks.\n for (let i = 0; i < callbacks.length; i++) {\n exceptionGuard(callbacks[i]);\n }\n } else {\n // transactions are no longer sent. Update their status appropriately.\n if (status === 'datastale') {\n for (let i = 0; i < queue.length; i++) {\n if (queue[i].status === TransactionStatus.SENT_NEEDS_ABORT) {\n queue[i].status = TransactionStatus.NEEDS_ABORT;\n } else {\n queue[i].status = TransactionStatus.RUN;\n }\n }\n } else {\n warn(\n 'transaction at ' + pathToSend.toString() + ' failed: ' + status\n );\n for (let i = 0; i < queue.length; i++) {\n queue[i].status = TransactionStatus.NEEDS_ABORT;\n queue[i].abortReason = status;\n }\n }\n\n repoRerunTransactions(repo, path);\n }\n },\n latestHash\n );\n}\n\n/**\n * Finds all transactions dependent on the data at changedPath and reruns them.\n *\n * Should be called any time cached data changes.\n *\n * Return the highest path that was affected by rerunning transactions. This\n * is the path at which events need to be raised for.\n *\n * @param changedPath - The path in mergedData that changed.\n * @returns The rootmost path that was affected by rerunning transactions.\n */\nfunction repoRerunTransactions(repo: Repo, changedPath: Path): Path {\n const rootMostTransactionNode = repoGetAncestorTransactionNode(\n repo,\n changedPath\n );\n const path = treeGetPath(rootMostTransactionNode);\n\n const queue = repoBuildTransactionQueue(repo, rootMostTransactionNode);\n repoRerunTransactionQueue(repo, queue, path);\n\n return path;\n}\n\n/**\n * Does all the work of rerunning transactions (as well as cleans up aborted\n * transactions and whatnot).\n *\n * @param queue - The queue of transactions to run.\n * @param path - The path the queue is for.\n */\nfunction repoRerunTransactionQueue(\n repo: Repo,\n queue: Transaction[],\n path: Path\n): void {\n if (queue.length === 0) {\n return; // Nothing to do!\n }\n\n // Queue up the callbacks and fire them after cleaning up all of our\n // transaction state, since the callback could trigger more transactions or\n // sets.\n const callbacks = [];\n let events: Event[] = [];\n // Ignore all of the sets we're going to re-run.\n const txnsToRerun = queue.filter(q => {\n return q.status === TransactionStatus.RUN;\n });\n const setsToIgnore = txnsToRerun.map(q => {\n return q.currentWriteId;\n });\n for (let i = 0; i < queue.length; i++) {\n const transaction = queue[i];\n const relativePath = newRelativePath(path, transaction.path);\n let abortTransaction = false,\n abortReason;\n assert(\n relativePath !== null,\n 'rerunTransactionsUnderNode_: relativePath should not be null.'\n );\n\n if (transaction.status === TransactionStatus.NEEDS_ABORT) {\n abortTransaction = true;\n abortReason = transaction.abortReason;\n events = events.concat(\n syncTreeAckUserWrite(\n repo.serverSyncTree_,\n transaction.currentWriteId,\n true\n )\n );\n } else if (transaction.status === TransactionStatus.RUN) {\n if (transaction.retryCount >= MAX_TRANSACTION_RETRIES) {\n abortTransaction = true;\n abortReason = 'maxretry';\n events = events.concat(\n syncTreeAckUserWrite(\n repo.serverSyncTree_,\n transaction.currentWriteId,\n true\n )\n );\n } else {\n // This code reruns a transaction\n const currentNode = repoGetLatestState(\n repo,\n transaction.path,\n setsToIgnore\n );\n transaction.currentInputSnapshot = currentNode;\n const newData = queue[i].update(currentNode.val());\n if (newData !== undefined) {\n validateFirebaseData(\n 'transaction failed: Data returned ',\n newData,\n transaction.path\n );\n let newDataNode = nodeFromJSON(newData);\n const hasExplicitPriority =\n typeof newData === 'object' &&\n newData != null &&\n contains(newData, '.priority');\n if (!hasExplicitPriority) {\n // Keep the old priority if there wasn't a priority explicitly specified.\n newDataNode = newDataNode.updatePriority(currentNode.getPriority());\n }\n\n const oldWriteId = transaction.currentWriteId;\n const serverValues = repoGenerateServerValues(repo);\n const newNodeResolved = resolveDeferredValueSnapshot(\n newDataNode,\n currentNode,\n serverValues\n );\n\n transaction.currentOutputSnapshotRaw = newDataNode;\n transaction.currentOutputSnapshotResolved = newNodeResolved;\n transaction.currentWriteId = repoGetNextWriteId(repo);\n // Mutates setsToIgnore in place\n setsToIgnore.splice(setsToIgnore.indexOf(oldWriteId), 1);\n events = events.concat(\n syncTreeApplyUserOverwrite(\n repo.serverSyncTree_,\n transaction.path,\n newNodeResolved,\n transaction.currentWriteId,\n transaction.applyLocally\n )\n );\n events = events.concat(\n syncTreeAckUserWrite(repo.serverSyncTree_, oldWriteId, true)\n );\n } else {\n abortTransaction = true;\n abortReason = 'nodata';\n events = events.concat(\n syncTreeAckUserWrite(\n repo.serverSyncTree_,\n transaction.currentWriteId,\n true\n )\n );\n }\n }\n }\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, events);\n events = [];\n if (abortTransaction) {\n // Abort.\n queue[i].status = TransactionStatus.COMPLETED;\n\n // Removing a listener can trigger pruning which can muck with\n // mergedData/visibleData (as it prunes data). So defer the unwatcher\n // until we're done.\n (function (unwatcher) {\n setTimeout(unwatcher, Math.floor(0));\n })(queue[i].unwatcher);\n\n if (queue[i].onComplete) {\n if (abortReason === 'nodata') {\n callbacks.push(() =>\n queue[i].onComplete(null, false, queue[i].currentInputSnapshot)\n );\n } else {\n callbacks.push(() =>\n queue[i].onComplete(new Error(abortReason), false, null)\n );\n }\n }\n }\n }\n\n // Clean up completed transactions.\n repoPruneCompletedTransactionsBelowNode(repo, repo.transactionQueueTree_);\n\n // Now fire callbacks, now that we're in a good, known state.\n for (let i = 0; i < callbacks.length; i++) {\n exceptionGuard(callbacks[i]);\n }\n\n // Try to send the transaction result to the server.\n repoSendReadyTransactions(repo, repo.transactionQueueTree_);\n}\n\n/**\n * Returns the rootmost ancestor node of the specified path that has a pending\n * transaction on it, or just returns the node for the given path if there are\n * no pending transactions on any ancestor.\n *\n * @param path - The location to start at.\n * @returns The rootmost node with a transaction.\n */\nfunction repoGetAncestorTransactionNode(\n repo: Repo,\n path: Path\n): Tree {\n let front;\n\n // Start at the root and walk deeper into the tree towards path until we\n // find a node with pending transactions.\n let transactionNode = repo.transactionQueueTree_;\n front = pathGetFront(path);\n while (front !== null && treeGetValue(transactionNode) === undefined) {\n transactionNode = treeSubTree(transactionNode, front);\n path = pathPopFront(path);\n front = pathGetFront(path);\n }\n\n return transactionNode;\n}\n\n/**\n * Builds the queue of all transactions at or below the specified\n * transactionNode.\n *\n * @param transactionNode\n * @returns The generated queue.\n */\nfunction repoBuildTransactionQueue(\n repo: Repo,\n transactionNode: Tree\n): Transaction[] {\n // Walk any child transaction queues and aggregate them into a single queue.\n const transactionQueue: Transaction[] = [];\n repoAggregateTransactionQueuesForNode(\n repo,\n transactionNode,\n transactionQueue\n );\n\n // Sort them by the order the transactions were created.\n transactionQueue.sort((a, b) => a.order - b.order);\n\n return transactionQueue;\n}\n\nfunction repoAggregateTransactionQueuesForNode(\n repo: Repo,\n node: Tree,\n queue: Transaction[]\n): void {\n const nodeQueue = treeGetValue(node);\n if (nodeQueue) {\n for (let i = 0; i < nodeQueue.length; i++) {\n queue.push(nodeQueue[i]);\n }\n }\n\n treeForEachChild(node, child => {\n repoAggregateTransactionQueuesForNode(repo, child, queue);\n });\n}\n\n/**\n * Remove COMPLETED transactions at or below this node in the transactionQueueTree_.\n */\nfunction repoPruneCompletedTransactionsBelowNode(\n repo: Repo,\n node: Tree\n): void {\n const queue = treeGetValue(node);\n if (queue) {\n let to = 0;\n for (let from = 0; from < queue.length; from++) {\n if (queue[from].status !== TransactionStatus.COMPLETED) {\n queue[to] = queue[from];\n to++;\n }\n }\n queue.length = to;\n treeSetValue(node, queue.length > 0 ? queue : undefined);\n }\n\n treeForEachChild(node, childNode => {\n repoPruneCompletedTransactionsBelowNode(repo, childNode);\n });\n}\n\n/**\n * Aborts all transactions on ancestors or descendants of the specified path.\n * Called when doing a set() or update() since we consider them incompatible\n * with transactions.\n *\n * @param path - Path for which we want to abort related transactions.\n */\nfunction repoAbortTransactions(repo: Repo, path: Path): Path {\n const affectedPath = treeGetPath(repoGetAncestorTransactionNode(repo, path));\n\n const transactionNode = treeSubTree(repo.transactionQueueTree_, path);\n\n treeForEachAncestor(transactionNode, (node: Tree) => {\n repoAbortTransactionsOnNode(repo, node);\n });\n\n repoAbortTransactionsOnNode(repo, transactionNode);\n\n treeForEachDescendant(transactionNode, (node: Tree) => {\n repoAbortTransactionsOnNode(repo, node);\n });\n\n return affectedPath;\n}\n\n/**\n * Abort transactions stored in this transaction queue node.\n *\n * @param node - Node to abort transactions for.\n */\nfunction repoAbortTransactionsOnNode(\n repo: Repo,\n node: Tree\n): void {\n const queue = treeGetValue(node);\n if (queue) {\n // Queue up the callbacks and fire them after cleaning up all of our\n // transaction state, since the callback could trigger more transactions\n // or sets.\n const callbacks = [];\n\n // Go through queue. Any already-sent transactions must be marked for\n // abort, while the unsent ones can be immediately aborted and removed.\n let events: Event[] = [];\n let lastSent = -1;\n for (let i = 0; i < queue.length; i++) {\n if (queue[i].status === TransactionStatus.SENT_NEEDS_ABORT) {\n // Already marked. No action needed.\n } else if (queue[i].status === TransactionStatus.SENT) {\n assert(\n lastSent === i - 1,\n 'All SENT items should be at beginning of queue.'\n );\n lastSent = i;\n // Mark transaction for abort when it comes back.\n queue[i].status = TransactionStatus.SENT_NEEDS_ABORT;\n queue[i].abortReason = 'set';\n } else {\n assert(\n queue[i].status === TransactionStatus.RUN,\n 'Unexpected transaction status in abort'\n );\n // We can abort it immediately.\n queue[i].unwatcher();\n events = events.concat(\n syncTreeAckUserWrite(\n repo.serverSyncTree_,\n queue[i].currentWriteId,\n true\n )\n );\n if (queue[i].onComplete) {\n callbacks.push(\n queue[i].onComplete.bind(null, new Error('set'), false, null)\n );\n }\n }\n }\n if (lastSent === -1) {\n // We're not waiting for any sent transactions. We can clear the queue.\n treeSetValue(node, undefined);\n } else {\n // Remove the transactions we aborted.\n queue.length = lastSent + 1;\n }\n\n // Now fire the callbacks.\n eventQueueRaiseEventsForChangedPath(\n repo.eventQueue_,\n treeGetPath(node),\n events\n );\n for (let i = 0; i < callbacks.length; i++) {\n exceptionGuard(callbacks[i]);\n }\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { RepoInfo } from '../../RepoInfo';\nimport { Path } from '../Path';\nimport { warnIfPageIsSecure, warn, fatal } from '../util';\n\nfunction decodePath(pathString: string): string {\n let pathStringDecoded = '';\n const pieces = pathString.split('/');\n for (let i = 0; i < pieces.length; i++) {\n if (pieces[i].length > 0) {\n let piece = pieces[i];\n try {\n piece = decodeURIComponent(piece.replace(/\\+/g, ' '));\n } catch (e) {}\n pathStringDecoded += '/' + piece;\n }\n }\n return pathStringDecoded;\n}\n\n/**\n * @returns key value hash\n */\nfunction decodeQuery(queryString: string): { [key: string]: string } {\n const results = {};\n if (queryString.charAt(0) === '?') {\n queryString = queryString.substring(1);\n }\n for (const segment of queryString.split('&')) {\n if (segment.length === 0) {\n continue;\n }\n const kv = segment.split('=');\n if (kv.length === 2) {\n results[decodeURIComponent(kv[0])] = decodeURIComponent(kv[1]);\n } else {\n warn(`Invalid query segment '${segment}' in query '${queryString}'`);\n }\n }\n return results;\n}\n\nexport const parseRepoInfo = function (\n dataURL: string,\n nodeAdmin: boolean\n): { repoInfo: RepoInfo; path: Path } {\n const parsedUrl = parseDatabaseURL(dataURL),\n namespace = parsedUrl.namespace;\n\n if (parsedUrl.domain === 'firebase.com') {\n fatal(\n parsedUrl.host +\n ' is no longer supported. ' +\n 'Please use .firebaseio.com instead'\n );\n }\n\n // Catch common error of uninitialized namespace value.\n if (\n (!namespace || namespace === 'undefined') &&\n parsedUrl.domain !== 'localhost'\n ) {\n fatal(\n 'Cannot parse Firebase url. Please use https://.firebaseio.com'\n );\n }\n\n if (!parsedUrl.secure) {\n warnIfPageIsSecure();\n }\n\n const webSocketOnly = parsedUrl.scheme === 'ws' || parsedUrl.scheme === 'wss';\n\n return {\n repoInfo: new RepoInfo(\n parsedUrl.host,\n parsedUrl.secure,\n namespace,\n webSocketOnly,\n nodeAdmin,\n /*persistenceKey=*/ '',\n /*includeNamespaceInQueryParams=*/ namespace !== parsedUrl.subdomain\n ),\n path: new Path(parsedUrl.pathString)\n };\n};\n\nexport const parseDatabaseURL = function (dataURL: string): {\n host: string;\n port: number;\n domain: string;\n subdomain: string;\n secure: boolean;\n scheme: string;\n pathString: string;\n namespace: string;\n} {\n // Default to empty strings in the event of a malformed string.\n let host = '',\n domain = '',\n subdomain = '',\n pathString = '',\n namespace = '';\n\n // Always default to SSL, unless otherwise specified.\n let secure = true,\n scheme = 'https',\n port = 443;\n\n // Don't do any validation here. The caller is responsible for validating the result of parsing.\n if (typeof dataURL === 'string') {\n // Parse scheme.\n let colonInd = dataURL.indexOf('//');\n if (colonInd >= 0) {\n scheme = dataURL.substring(0, colonInd - 1);\n dataURL = dataURL.substring(colonInd + 2);\n }\n\n // Parse host, path, and query string.\n let slashInd = dataURL.indexOf('/');\n if (slashInd === -1) {\n slashInd = dataURL.length;\n }\n let questionMarkInd = dataURL.indexOf('?');\n if (questionMarkInd === -1) {\n questionMarkInd = dataURL.length;\n }\n host = dataURL.substring(0, Math.min(slashInd, questionMarkInd));\n if (slashInd < questionMarkInd) {\n // For pathString, questionMarkInd will always come after slashInd\n pathString = decodePath(dataURL.substring(slashInd, questionMarkInd));\n }\n const queryParams = decodeQuery(\n dataURL.substring(Math.min(dataURL.length, questionMarkInd))\n );\n\n // If we have a port, use scheme for determining if it's secure.\n colonInd = host.indexOf(':');\n if (colonInd >= 0) {\n secure = scheme === 'https' || scheme === 'wss';\n port = parseInt(host.substring(colonInd + 1), 10);\n } else {\n colonInd = host.length;\n }\n\n const hostWithoutPort = host.slice(0, colonInd);\n if (hostWithoutPort.toLowerCase() === 'localhost') {\n domain = 'localhost';\n } else if (hostWithoutPort.split('.').length <= 2) {\n domain = hostWithoutPort;\n } else {\n // Interpret the subdomain of a 3 or more component URL as the namespace name.\n const dotInd = host.indexOf('.');\n subdomain = host.substring(0, dotInd).toLowerCase();\n domain = host.substring(dotInd + 1);\n // Normalize namespaces to lowercase to share storage / connection.\n namespace = subdomain;\n }\n // Always treat the value of the `ns` as the namespace name if it is present.\n if ('ns' in queryParams) {\n namespace = queryParams['ns'];\n }\n }\n\n return {\n host,\n port,\n domain,\n subdomain,\n secure,\n scheme,\n pathString,\n namespace\n };\n};\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert } from '@firebase/util';\n\nimport {\n tryParseInt,\n MAX_NAME,\n MIN_NAME,\n INTEGER_32_MIN,\n INTEGER_32_MAX\n} from '../util/util';\n\n// Modeled after base64 web-safe chars, but ordered by ASCII.\nconst PUSH_CHARS =\n '-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz';\n\nconst MIN_PUSH_CHAR = '-';\n\nconst MAX_PUSH_CHAR = 'z';\n\nconst MAX_KEY_LEN = 786;\n\n/**\n * Fancy ID generator that creates 20-character string identifiers with the\n * following properties:\n *\n * 1. They're based on timestamp so that they sort *after* any existing ids.\n * 2. They contain 72-bits of random data after the timestamp so that IDs won't\n * collide with other clients' IDs.\n * 3. They sort *lexicographically* (so the timestamp is converted to characters\n * that will sort properly).\n * 4. They're monotonically increasing. Even if you generate more than one in\n * the same timestamp, the latter ones will sort after the former ones. We do\n * this by using the previous random bits but \"incrementing\" them by 1 (only\n * in the case of a timestamp collision).\n */\nexport const nextPushId = (function () {\n // Timestamp of last push, used to prevent local collisions if you push twice\n // in one ms.\n let lastPushTime = 0;\n\n // We generate 72-bits of randomness which get turned into 12 characters and\n // appended to the timestamp to prevent collisions with other clients. We\n // store the last characters we generated because in the event of a collision,\n // we'll use those same characters except \"incremented\" by one.\n const lastRandChars: number[] = [];\n\n return function (now: number) {\n const duplicateTime = now === lastPushTime;\n lastPushTime = now;\n\n let i;\n const timeStampChars = new Array(8);\n for (i = 7; i >= 0; i--) {\n timeStampChars[i] = PUSH_CHARS.charAt(now % 64);\n // NOTE: Can't use << here because javascript will convert to int and lose\n // the upper bits.\n now = Math.floor(now / 64);\n }\n assert(now === 0, 'Cannot push at time == 0');\n\n let id = timeStampChars.join('');\n\n if (!duplicateTime) {\n for (i = 0; i < 12; i++) {\n lastRandChars[i] = Math.floor(Math.random() * 64);\n }\n } else {\n // If the timestamp hasn't changed since last push, use the same random\n // number, except incremented by 1.\n for (i = 11; i >= 0 && lastRandChars[i] === 63; i--) {\n lastRandChars[i] = 0;\n }\n lastRandChars[i]++;\n }\n for (i = 0; i < 12; i++) {\n id += PUSH_CHARS.charAt(lastRandChars[i]);\n }\n assert(id.length === 20, 'nextPushId: Length should be 20.');\n\n return id;\n };\n})();\n\nexport const successor = function (key: string) {\n if (key === '' + INTEGER_32_MAX) {\n // See https://firebase.google.com/docs/database/web/lists-of-data#data-order\n return MIN_PUSH_CHAR;\n }\n const keyAsInt: number = tryParseInt(key);\n if (keyAsInt != null) {\n return '' + (keyAsInt + 1);\n }\n const next = new Array(key.length);\n\n for (let i = 0; i < next.length; i++) {\n next[i] = key.charAt(i);\n }\n\n if (next.length < MAX_KEY_LEN) {\n next.push(MIN_PUSH_CHAR);\n return next.join('');\n }\n\n let i = next.length - 1;\n\n while (i >= 0 && next[i] === MAX_PUSH_CHAR) {\n i--;\n }\n\n // `successor` was called on the largest possible key, so return the\n // MAX_NAME, which sorts larger than all keys.\n if (i === -1) {\n return MAX_NAME;\n }\n\n const source = next[i];\n const sourcePlusOne = PUSH_CHARS.charAt(PUSH_CHARS.indexOf(source) + 1);\n next[i] = sourcePlusOne;\n\n return next.slice(0, i + 1).join('');\n};\n\n// `key` is assumed to be non-empty.\nexport const predecessor = function (key: string) {\n if (key === '' + INTEGER_32_MIN) {\n return MIN_NAME;\n }\n const keyAsInt: number = tryParseInt(key);\n if (keyAsInt != null) {\n return '' + (keyAsInt - 1);\n }\n const next = new Array(key.length);\n for (let i = 0; i < next.length; i++) {\n next[i] = key.charAt(i);\n }\n // If `key` ends in `MIN_PUSH_CHAR`, the largest key lexicographically\n // smaller than `key`, is `key[0:key.length - 1]`. The next key smaller\n // than that, `predecessor(predecessor(key))`, is\n //\n // `key[0:key.length - 2] + (key[key.length - 1] - 1) + \\\n // { MAX_PUSH_CHAR repeated MAX_KEY_LEN - (key.length - 1) times }\n //\n // analogous to increment/decrement for base-10 integers.\n //\n // This works because lexicographic comparison works character-by-character,\n // using length as a tie-breaker if one key is a prefix of the other.\n if (next[next.length - 1] === MIN_PUSH_CHAR) {\n if (next.length === 1) {\n // See https://firebase.google.com/docs/database/web/lists-of-data#orderbykey\n return '' + INTEGER_32_MAX;\n }\n delete next[next.length - 1];\n return next.join('');\n }\n // Replace the last character with it's immediate predecessor, and\n // fill the suffix of the key with MAX_PUSH_CHAR. This is the\n // lexicographically largest possible key smaller than `key`.\n next[next.length - 1] = PUSH_CHARS.charAt(\n PUSH_CHARS.indexOf(next[next.length - 1]) - 1\n );\n return next.join('') + MAX_PUSH_CHAR.repeat(MAX_KEY_LEN - next.length);\n};\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert, getModularInstance, Deferred } from '@firebase/util';\n\nimport {\n Repo,\n repoAddEventCallbackForQuery,\n repoGetValue,\n repoRemoveEventCallbackForQuery,\n repoServerTime,\n repoSetWithPriority,\n repoUpdate\n} from '../core/Repo';\nimport { ChildrenNode } from '../core/snap/ChildrenNode';\nimport { Index } from '../core/snap/indexes/Index';\nimport { KEY_INDEX } from '../core/snap/indexes/KeyIndex';\nimport { PathIndex } from '../core/snap/indexes/PathIndex';\nimport { PRIORITY_INDEX } from '../core/snap/indexes/PriorityIndex';\nimport { VALUE_INDEX } from '../core/snap/indexes/ValueIndex';\nimport { Node } from '../core/snap/Node';\nimport { syncPointSetReferenceConstructor } from '../core/SyncPoint';\nimport { syncTreeSetReferenceConstructor } from '../core/SyncTree';\nimport { parseRepoInfo } from '../core/util/libs/parser';\nimport { nextPushId } from '../core/util/NextPushId';\nimport {\n Path,\n pathEquals,\n pathGetBack,\n pathGetFront,\n pathChild,\n pathParent,\n pathToUrlEncodedString,\n pathIsEmpty\n} from '../core/util/Path';\nimport {\n fatal,\n MAX_NAME,\n MIN_NAME,\n ObjectToUniqueKey\n} from '../core/util/util';\nimport {\n isValidPriority,\n validateFirebaseDataArg,\n validateFirebaseMergeDataArg,\n validateKey,\n validatePathString,\n validatePriority,\n validateRootPathString,\n validateUrl,\n validateWritablePath\n} from '../core/util/validation';\nimport { Change } from '../core/view/Change';\nimport { CancelEvent, DataEvent, EventType } from '../core/view/Event';\nimport {\n CallbackContext,\n EventRegistration,\n QueryContext,\n UserCallback\n} from '../core/view/EventRegistration';\nimport {\n QueryParams,\n queryParamsEndAt,\n queryParamsEndBefore,\n queryParamsGetQueryObject,\n queryParamsLimitToFirst,\n queryParamsLimitToLast,\n queryParamsOrderBy,\n queryParamsStartAfter,\n queryParamsStartAt\n} from '../core/view/QueryParams';\n\nimport { Database } from './Database';\nimport { OnDisconnect } from './OnDisconnect';\nimport {\n ListenOptions,\n Query as Query,\n DatabaseReference,\n Unsubscribe,\n ThenableReference\n} from './Reference';\n\n/**\n * @internal\n */\nexport class QueryImpl implements Query, QueryContext {\n /**\n * @hideconstructor\n */\n constructor(\n readonly _repo: Repo,\n readonly _path: Path,\n readonly _queryParams: QueryParams,\n readonly _orderByCalled: boolean\n ) {}\n\n get key(): string | null {\n if (pathIsEmpty(this._path)) {\n return null;\n } else {\n return pathGetBack(this._path);\n }\n }\n\n get ref(): DatabaseReference {\n return new ReferenceImpl(this._repo, this._path);\n }\n\n get _queryIdentifier(): string {\n const obj = queryParamsGetQueryObject(this._queryParams);\n const id = ObjectToUniqueKey(obj);\n return id === '{}' ? 'default' : id;\n }\n\n /**\n * An object representation of the query parameters used by this Query.\n */\n get _queryObject(): object {\n return queryParamsGetQueryObject(this._queryParams);\n }\n\n isEqual(other: QueryImpl | null): boolean {\n other = getModularInstance(other);\n if (!(other instanceof QueryImpl)) {\n return false;\n }\n\n const sameRepo = this._repo === other._repo;\n const samePath = pathEquals(this._path, other._path);\n const sameQueryIdentifier =\n this._queryIdentifier === other._queryIdentifier;\n\n return sameRepo && samePath && sameQueryIdentifier;\n }\n\n toJSON(): string {\n return this.toString();\n }\n\n toString(): string {\n return this._repo.toString() + pathToUrlEncodedString(this._path);\n }\n}\n\n/**\n * Validates that no other order by call has been made\n */\nfunction validateNoPreviousOrderByCall(query: QueryImpl, fnName: string) {\n if (query._orderByCalled === true) {\n throw new Error(fnName + \": You can't combine multiple orderBy calls.\");\n }\n}\n\n/**\n * Validates start/end values for queries.\n */\nfunction validateQueryEndpoints(params: QueryParams) {\n let startNode = null;\n let endNode = null;\n if (params.hasStart()) {\n startNode = params.getIndexStartValue();\n }\n if (params.hasEnd()) {\n endNode = params.getIndexEndValue();\n }\n\n if (params.getIndex() === KEY_INDEX) {\n const tooManyArgsError =\n 'Query: When ordering by key, you may only pass one argument to ' +\n 'startAt(), endAt(), or equalTo().';\n const wrongArgTypeError =\n 'Query: When ordering by key, the argument passed to startAt(), startAfter(), ' +\n 'endAt(), endBefore(), or equalTo() must be a string.';\n if (params.hasStart()) {\n const startName = params.getIndexStartName();\n if (startName !== MIN_NAME) {\n throw new Error(tooManyArgsError);\n } else if (typeof startNode !== 'string') {\n throw new Error(wrongArgTypeError);\n }\n }\n if (params.hasEnd()) {\n const endName = params.getIndexEndName();\n if (endName !== MAX_NAME) {\n throw new Error(tooManyArgsError);\n } else if (typeof endNode !== 'string') {\n throw new Error(wrongArgTypeError);\n }\n }\n } else if (params.getIndex() === PRIORITY_INDEX) {\n if (\n (startNode != null && !isValidPriority(startNode)) ||\n (endNode != null && !isValidPriority(endNode))\n ) {\n throw new Error(\n 'Query: When ordering by priority, the first argument passed to startAt(), ' +\n 'startAfter() endAt(), endBefore(), or equalTo() must be a valid priority value ' +\n '(null, a number, or a string).'\n );\n }\n } else {\n assert(\n params.getIndex() instanceof PathIndex ||\n params.getIndex() === VALUE_INDEX,\n 'unknown index type.'\n );\n if (\n (startNode != null && typeof startNode === 'object') ||\n (endNode != null && typeof endNode === 'object')\n ) {\n throw new Error(\n 'Query: First argument passed to startAt(), startAfter(), endAt(), endBefore(), or ' +\n 'equalTo() cannot be an object.'\n );\n }\n }\n}\n\n/**\n * Validates that limit* has been called with the correct combination of parameters\n */\nfunction validateLimit(params: QueryParams) {\n if (\n params.hasStart() &&\n params.hasEnd() &&\n params.hasLimit() &&\n !params.hasAnchoredLimit()\n ) {\n throw new Error(\n \"Query: Can't combine startAt(), startAfter(), endAt(), endBefore(), and limit(). Use \" +\n 'limitToFirst() or limitToLast() instead.'\n );\n }\n}\n/**\n * @internal\n */\nexport class ReferenceImpl extends QueryImpl implements DatabaseReference {\n /** @hideconstructor */\n constructor(repo: Repo, path: Path) {\n super(repo, path, new QueryParams(), false);\n }\n\n get parent(): ReferenceImpl | null {\n const parentPath = pathParent(this._path);\n return parentPath === null\n ? null\n : new ReferenceImpl(this._repo, parentPath);\n }\n\n get root(): ReferenceImpl {\n let ref: ReferenceImpl = this;\n while (ref.parent !== null) {\n ref = ref.parent;\n }\n return ref;\n }\n}\n\n/**\n * A `DataSnapshot` contains data from a Database location.\n *\n * Any time you read data from the Database, you receive the data as a\n * `DataSnapshot`. A `DataSnapshot` is passed to the event callbacks you attach\n * with `on()` or `once()`. You can extract the contents of the snapshot as a\n * JavaScript object by calling the `val()` method. Alternatively, you can\n * traverse into the snapshot by calling `child()` to return child snapshots\n * (which you could then call `val()` on).\n *\n * A `DataSnapshot` is an efficiently generated, immutable copy of the data at\n * a Database location. It cannot be modified and will never change (to modify\n * data, you always call the `set()` method on a `Reference` directly).\n */\nexport class DataSnapshot {\n /**\n * @param _node - A SnapshotNode to wrap.\n * @param ref - The location this snapshot came from.\n * @param _index - The iteration order for this snapshot\n * @hideconstructor\n */\n constructor(\n readonly _node: Node,\n /**\n * The location of this DataSnapshot.\n */\n readonly ref: DatabaseReference,\n readonly _index: Index\n ) {}\n\n /**\n * Gets the priority value of the data in this `DataSnapshot`.\n *\n * Applications need not use priority but can order collections by\n * ordinary properties (see\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sorting_and_filtering_data |Sorting and filtering data}\n * ).\n */\n get priority(): string | number | null {\n // typecast here because we never return deferred values or internal priorities (MAX_PRIORITY)\n return this._node.getPriority().val() as string | number | null;\n }\n\n /**\n * The key (last part of the path) of the location of this `DataSnapshot`.\n *\n * The last token in a Database location is considered its key. For example,\n * \"ada\" is the key for the /users/ada/ node. Accessing the key on any\n * `DataSnapshot` will return the key for the location that generated it.\n * However, accessing the key on the root URL of a Database will return\n * `null`.\n */\n get key(): string | null {\n return this.ref.key;\n }\n\n /** Returns the number of child properties of this `DataSnapshot`. */\n get size(): number {\n return this._node.numChildren();\n }\n\n /**\n * Gets another `DataSnapshot` for the location at the specified relative path.\n *\n * Passing a relative path to the `child()` method of a DataSnapshot returns\n * another `DataSnapshot` for the location at the specified relative path. The\n * relative path can either be a simple child name (for example, \"ada\") or a\n * deeper, slash-separated path (for example, \"ada/name/first\"). If the child\n * location has no data, an empty `DataSnapshot` (that is, a `DataSnapshot`\n * whose value is `null`) is returned.\n *\n * @param path - A relative path to the location of child data.\n */\n child(path: string): DataSnapshot {\n const childPath = new Path(path);\n const childRef = child(this.ref, path);\n return new DataSnapshot(\n this._node.getChild(childPath),\n childRef,\n PRIORITY_INDEX\n );\n }\n /**\n * Returns true if this `DataSnapshot` contains any data. It is slightly more\n * efficient than using `snapshot.val() !== null`.\n */\n exists(): boolean {\n return !this._node.isEmpty();\n }\n\n /**\n * Exports the entire contents of the DataSnapshot as a JavaScript object.\n *\n * The `exportVal()` method is similar to `val()`, except priority information\n * is included (if available), making it suitable for backing up your data.\n *\n * @returns The DataSnapshot's contents as a JavaScript value (Object,\n * Array, string, number, boolean, or `null`).\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n exportVal(): any {\n return this._node.val(true);\n }\n\n /**\n * Enumerates the top-level children in the `IteratedDataSnapshot`.\n *\n * Because of the way JavaScript objects work, the ordering of data in the\n * JavaScript object returned by `val()` is not guaranteed to match the\n * ordering on the server nor the ordering of `onChildAdded()` events. That is\n * where `forEach()` comes in handy. It guarantees the children of a\n * `DataSnapshot` will be iterated in their query order.\n *\n * If no explicit `orderBy*()` method is used, results are returned\n * ordered by key (unless priorities are used, in which case, results are\n * returned by priority).\n *\n * @param action - A function that will be called for each child DataSnapshot.\n * The callback can return true to cancel further enumeration.\n * @returns true if enumeration was canceled due to your callback returning\n * true.\n */\n forEach(action: (child: IteratedDataSnapshot) => boolean | void): boolean {\n if (this._node.isLeafNode()) {\n return false;\n }\n\n const childrenNode = this._node as ChildrenNode;\n // Sanitize the return value to a boolean. ChildrenNode.forEachChild has a weird return type...\n return !!childrenNode.forEachChild(this._index, (key, node) => {\n return action(\n new DataSnapshot(node, child(this.ref, key), PRIORITY_INDEX)\n );\n });\n }\n\n /**\n * Returns true if the specified child path has (non-null) data.\n *\n * @param path - A relative path to the location of a potential child.\n * @returns `true` if data exists at the specified child path; else\n * `false`.\n */\n hasChild(path: string): boolean {\n const childPath = new Path(path);\n return !this._node.getChild(childPath).isEmpty();\n }\n\n /**\n * Returns whether or not the `DataSnapshot` has any non-`null` child\n * properties.\n *\n * You can use `hasChildren()` to determine if a `DataSnapshot` has any\n * children. If it does, you can enumerate them using `forEach()`. If it\n * doesn't, then either this snapshot contains a primitive value (which can be\n * retrieved with `val()`) or it is empty (in which case, `val()` will return\n * `null`).\n *\n * @returns true if this snapshot has any children; else false.\n */\n hasChildren(): boolean {\n if (this._node.isLeafNode()) {\n return false;\n } else {\n return !this._node.isEmpty();\n }\n }\n\n /**\n * Returns a JSON-serializable representation of this object.\n */\n toJSON(): object | null {\n return this.exportVal();\n }\n\n /**\n * Extracts a JavaScript value from a `DataSnapshot`.\n *\n * Depending on the data in a `DataSnapshot`, the `val()` method may return a\n * scalar type (string, number, or boolean), an array, or an object. It may\n * also return null, indicating that the `DataSnapshot` is empty (contains no\n * data).\n *\n * @returns The DataSnapshot's contents as a JavaScript value (Object,\n * Array, string, number, boolean, or `null`).\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n val(): any {\n return this._node.val();\n }\n}\n\n/**\n * Represents a child snapshot of a `Reference` that is being iterated over. The key will never be undefined.\n */\nexport interface IteratedDataSnapshot extends DataSnapshot {\n key: string; // key of the location of this snapshot.\n}\n\n/**\n *\n * Returns a `Reference` representing the location in the Database\n * corresponding to the provided path. If no path is provided, the `Reference`\n * will point to the root of the Database.\n *\n * @param db - The database instance to obtain a reference for.\n * @param path - Optional path representing the location the returned\n * `Reference` will point. If not provided, the returned `Reference` will\n * point to the root of the Database.\n * @returns If a path is provided, a `Reference`\n * pointing to the provided path. Otherwise, a `Reference` pointing to the\n * root of the Database.\n */\nexport function ref(db: Database, path?: string): DatabaseReference {\n db = getModularInstance(db);\n db._checkNotDeleted('ref');\n return path !== undefined ? child(db._root, path) : db._root;\n}\n\n/**\n * Returns a `Reference` representing the location in the Database\n * corresponding to the provided Firebase URL.\n *\n * An exception is thrown if the URL is not a valid Firebase Database URL or it\n * has a different domain than the current `Database` instance.\n *\n * Note that all query parameters (`orderBy`, `limitToLast`, etc.) are ignored\n * and are not applied to the returned `Reference`.\n *\n * @param db - The database instance to obtain a reference for.\n * @param url - The Firebase URL at which the returned `Reference` will\n * point.\n * @returns A `Reference` pointing to the provided\n * Firebase URL.\n */\nexport function refFromURL(db: Database, url: string): DatabaseReference {\n db = getModularInstance(db);\n db._checkNotDeleted('refFromURL');\n const parsedURL = parseRepoInfo(url, db._repo.repoInfo_.nodeAdmin);\n validateUrl('refFromURL', parsedURL);\n\n const repoInfo = parsedURL.repoInfo;\n if (\n !db._repo.repoInfo_.isCustomHost() &&\n repoInfo.host !== db._repo.repoInfo_.host\n ) {\n fatal(\n 'refFromURL' +\n ': Host name does not match the current database: ' +\n '(found ' +\n repoInfo.host +\n ' but expected ' +\n db._repo.repoInfo_.host +\n ')'\n );\n }\n\n return ref(db, parsedURL.path.toString());\n}\n/**\n * Gets a `Reference` for the location at the specified relative path.\n *\n * The relative path can either be a simple child name (for example, \"ada\") or\n * a deeper slash-separated path (for example, \"ada/name/first\").\n *\n * @param parent - The parent location.\n * @param path - A relative path from this location to the desired child\n * location.\n * @returns The specified child location.\n */\nexport function child(\n parent: DatabaseReference,\n path: string\n): DatabaseReference {\n parent = getModularInstance(parent);\n if (pathGetFront(parent._path) === null) {\n validateRootPathString('child', 'path', path, false);\n } else {\n validatePathString('child', 'path', path, false);\n }\n return new ReferenceImpl(parent._repo, pathChild(parent._path, path));\n}\n\n/**\n * Returns an `OnDisconnect` object - see\n * {@link https://firebase.google.com/docs/database/web/offline-capabilities | Enabling Offline Capabilities in JavaScript}\n * for more information on how to use it.\n *\n * @param ref - The reference to add OnDisconnect triggers for.\n */\nexport function onDisconnect(ref: DatabaseReference): OnDisconnect {\n ref = getModularInstance(ref) as ReferenceImpl;\n return new OnDisconnect(ref._repo, ref._path);\n}\n\nexport interface ThenableReferenceImpl\n extends ReferenceImpl,\n Pick, 'then' | 'catch'> {}\n\n/**\n * Generates a new child location using a unique key and returns its\n * `Reference`.\n *\n * This is the most common pattern for adding data to a collection of items.\n *\n * If you provide a value to `push()`, the value is written to the\n * generated location. If you don't pass a value, nothing is written to the\n * database and the child remains empty (but you can use the `Reference`\n * elsewhere).\n *\n * The unique keys generated by `push()` are ordered by the current time, so the\n * resulting list of items is chronologically sorted. The keys are also\n * designed to be unguessable (they contain 72 random bits of entropy).\n *\n * See {@link https://firebase.google.com/docs/database/web/lists-of-data#append_to_a_list_of_data | Append to a list of data}.\n * See {@link https://firebase.googleblog.com/2015/02/the-2120-ways-to-ensure-unique_68.html | The 2^120 Ways to Ensure Unique Identifiers}.\n *\n * @param parent - The parent location.\n * @param value - Optional value to be written at the generated location.\n * @returns Combined `Promise` and `Reference`; resolves when write is complete,\n * but can be used immediately as the `Reference` to the child location.\n */\nexport function push(\n parent: DatabaseReference,\n value?: unknown\n): ThenableReference {\n parent = getModularInstance(parent);\n validateWritablePath('push', parent._path);\n validateFirebaseDataArg('push', value, parent._path, true);\n const now = repoServerTime(parent._repo);\n const name = nextPushId(now);\n\n // push() returns a ThennableReference whose promise is fulfilled with a\n // regular Reference. We use child() to create handles to two different\n // references. The first is turned into a ThennableReference below by adding\n // then() and catch() methods and is used as the return value of push(). The\n // second remains a regular Reference and is used as the fulfilled value of\n // the first ThennableReference.\n const thenablePushRef: Partial = child(\n parent,\n name\n ) as ReferenceImpl;\n const pushRef = child(parent, name) as ReferenceImpl;\n\n let promise: Promise;\n if (value != null) {\n promise = set(pushRef, value).then(() => pushRef);\n } else {\n promise = Promise.resolve(pushRef);\n }\n\n thenablePushRef.then = promise.then.bind(promise);\n thenablePushRef.catch = promise.then.bind(promise, undefined);\n return thenablePushRef as ThenableReferenceImpl;\n}\n\n/**\n * Removes the data at this Database location.\n *\n * Any data at child locations will also be deleted.\n *\n * The effect of the remove will be visible immediately and the corresponding\n * event 'value' will be triggered. Synchronization of the remove to the\n * Firebase servers will also be started, and the returned Promise will resolve\n * when complete. If provided, the onComplete callback will be called\n * asynchronously after synchronization has finished.\n *\n * @param ref - The location to remove.\n * @returns Resolves when remove on server is complete.\n */\nexport function remove(ref: DatabaseReference): Promise {\n validateWritablePath('remove', ref._path);\n return set(ref, null);\n}\n\n/**\n * Writes data to this Database location.\n *\n * This will overwrite any data at this location and all child locations.\n *\n * The effect of the write will be visible immediately, and the corresponding\n * events (\"value\", \"child_added\", etc.) will be triggered. Synchronization of\n * the data to the Firebase servers will also be started, and the returned\n * Promise will resolve when complete. If provided, the `onComplete` callback\n * will be called asynchronously after synchronization has finished.\n *\n * Passing `null` for the new value is equivalent to calling `remove()`; namely,\n * all data at this location and all child locations will be deleted.\n *\n * `set()` will remove any priority stored at this location, so if priority is\n * meant to be preserved, you need to use `setWithPriority()` instead.\n *\n * Note that modifying data with `set()` will cancel any pending transactions\n * at that location, so extreme care should be taken if mixing `set()` and\n * `transaction()` to modify the same data.\n *\n * A single `set()` will generate a single \"value\" event at the location where\n * the `set()` was performed.\n *\n * @param ref - The location to write to.\n * @param value - The value to be written (string, number, boolean, object,\n * array, or null).\n * @returns Resolves when write to server is complete.\n */\nexport function set(ref: DatabaseReference, value: unknown): Promise {\n ref = getModularInstance(ref);\n validateWritablePath('set', ref._path);\n validateFirebaseDataArg('set', value, ref._path, false);\n const deferred = new Deferred();\n repoSetWithPriority(\n ref._repo,\n ref._path,\n value,\n /*priority=*/ null,\n deferred.wrapCallback(() => {})\n );\n return deferred.promise;\n}\n\n/**\n * Sets a priority for the data at this Database location.\n *\n * Applications need not use priority but can order collections by\n * ordinary properties (see\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sorting_and_filtering_data | Sorting and filtering data}\n * ).\n *\n * @param ref - The location to write to.\n * @param priority - The priority to be written (string, number, or null).\n * @returns Resolves when write to server is complete.\n */\nexport function setPriority(\n ref: DatabaseReference,\n priority: string | number | null\n): Promise {\n ref = getModularInstance(ref);\n validateWritablePath('setPriority', ref._path);\n validatePriority('setPriority', priority, false);\n const deferred = new Deferred();\n repoSetWithPriority(\n ref._repo,\n pathChild(ref._path, '.priority'),\n priority,\n null,\n deferred.wrapCallback(() => {})\n );\n return deferred.promise;\n}\n\n/**\n * Writes data the Database location. Like `set()` but also specifies the\n * priority for that data.\n *\n * Applications need not use priority but can order collections by\n * ordinary properties (see\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sorting_and_filtering_data | Sorting and filtering data}\n * ).\n *\n * @param ref - The location to write to.\n * @param value - The value to be written (string, number, boolean, object,\n * array, or null).\n * @param priority - The priority to be written (string, number, or null).\n * @returns Resolves when write to server is complete.\n */\nexport function setWithPriority(\n ref: DatabaseReference,\n value: unknown,\n priority: string | number | null\n): Promise {\n validateWritablePath('setWithPriority', ref._path);\n validateFirebaseDataArg('setWithPriority', value, ref._path, false);\n validatePriority('setWithPriority', priority, false);\n if (ref.key === '.length' || ref.key === '.keys') {\n throw 'setWithPriority failed: ' + ref.key + ' is a read-only object.';\n }\n\n const deferred = new Deferred();\n repoSetWithPriority(\n ref._repo,\n ref._path,\n value,\n priority,\n deferred.wrapCallback(() => {})\n );\n return deferred.promise;\n}\n\n/**\n * Writes multiple values to the Database at once.\n *\n * The `values` argument contains multiple property-value pairs that will be\n * written to the Database together. Each child property can either be a simple\n * property (for example, \"name\") or a relative path (for example,\n * \"name/first\") from the current location to the data to update.\n *\n * As opposed to the `set()` method, `update()` can be use to selectively update\n * only the referenced properties at the current location (instead of replacing\n * all the child properties at the current location).\n *\n * The effect of the write will be visible immediately, and the corresponding\n * events ('value', 'child_added', etc.) will be triggered. Synchronization of\n * the data to the Firebase servers will also be started, and the returned\n * Promise will resolve when complete. If provided, the `onComplete` callback\n * will be called asynchronously after synchronization has finished.\n *\n * A single `update()` will generate a single \"value\" event at the location\n * where the `update()` was performed, regardless of how many children were\n * modified.\n *\n * Note that modifying data with `update()` will cancel any pending\n * transactions at that location, so extreme care should be taken if mixing\n * `update()` and `transaction()` to modify the same data.\n *\n * Passing `null` to `update()` will remove the data at this location.\n *\n * See\n * {@link https://firebase.googleblog.com/2015/09/introducing-multi-location-updates-and_86.html | Introducing multi-location updates and more}.\n *\n * @param ref - The location to write to.\n * @param values - Object containing multiple values.\n * @returns Resolves when update on server is complete.\n */\nexport function update(ref: DatabaseReference, values: object): Promise {\n validateFirebaseMergeDataArg('update', values, ref._path, false);\n const deferred = new Deferred();\n repoUpdate(\n ref._repo,\n ref._path,\n values as Record,\n deferred.wrapCallback(() => {})\n );\n return deferred.promise;\n}\n\n/**\n * Gets the most up-to-date result for this query.\n *\n * @param query - The query to run.\n * @returns A `Promise` which resolves to the resulting DataSnapshot if a value is\n * available, or rejects if the client is unable to return a value (e.g., if the\n * server is unreachable and there is nothing cached).\n */\nexport function get(query: Query): Promise {\n query = getModularInstance(query) as QueryImpl;\n const callbackContext = new CallbackContext(() => {});\n const container = new ValueEventRegistration(callbackContext);\n return repoGetValue(query._repo, query, container).then(node => {\n return new DataSnapshot(\n node,\n new ReferenceImpl(query._repo, query._path),\n query._queryParams.getIndex()\n );\n });\n}\n/**\n * Represents registration for 'value' events.\n */\nexport class ValueEventRegistration implements EventRegistration {\n constructor(private callbackContext: CallbackContext) {}\n\n respondsTo(eventType: string): boolean {\n return eventType === 'value';\n }\n\n createEvent(change: Change, query: QueryContext): DataEvent {\n const index = query._queryParams.getIndex();\n return new DataEvent(\n 'value',\n this,\n new DataSnapshot(\n change.snapshotNode,\n new ReferenceImpl(query._repo, query._path),\n index\n )\n );\n }\n\n getEventRunner(eventData: CancelEvent | DataEvent): () => void {\n if (eventData.getEventType() === 'cancel') {\n return () =>\n this.callbackContext.onCancel((eventData as CancelEvent).error);\n } else {\n return () =>\n this.callbackContext.onValue((eventData as DataEvent).snapshot, null);\n }\n }\n\n createCancelEvent(error: Error, path: Path): CancelEvent | null {\n if (this.callbackContext.hasCancelCallback) {\n return new CancelEvent(this, error, path);\n } else {\n return null;\n }\n }\n\n matches(other: EventRegistration): boolean {\n if (!(other instanceof ValueEventRegistration)) {\n return false;\n } else if (!other.callbackContext || !this.callbackContext) {\n // If no callback specified, we consider it to match any callback.\n return true;\n } else {\n return other.callbackContext.matches(this.callbackContext);\n }\n }\n\n hasAnyCallback(): boolean {\n return this.callbackContext !== null;\n }\n}\n\n/**\n * Represents the registration of a child_x event.\n */\nexport class ChildEventRegistration implements EventRegistration {\n constructor(\n private eventType: string,\n private callbackContext: CallbackContext | null\n ) {}\n\n respondsTo(eventType: string): boolean {\n let eventToCheck =\n eventType === 'children_added' ? 'child_added' : eventType;\n eventToCheck =\n eventToCheck === 'children_removed' ? 'child_removed' : eventToCheck;\n return this.eventType === eventToCheck;\n }\n\n createCancelEvent(error: Error, path: Path): CancelEvent | null {\n if (this.callbackContext.hasCancelCallback) {\n return new CancelEvent(this, error, path);\n } else {\n return null;\n }\n }\n\n createEvent(change: Change, query: QueryContext): DataEvent {\n assert(change.childName != null, 'Child events should have a childName.');\n const childRef = child(\n new ReferenceImpl(query._repo, query._path),\n change.childName\n );\n const index = query._queryParams.getIndex();\n return new DataEvent(\n change.type as EventType,\n this,\n new DataSnapshot(change.snapshotNode, childRef, index),\n change.prevName\n );\n }\n\n getEventRunner(eventData: CancelEvent | DataEvent): () => void {\n if (eventData.getEventType() === 'cancel') {\n return () =>\n this.callbackContext.onCancel((eventData as CancelEvent).error);\n } else {\n return () =>\n this.callbackContext.onValue(\n (eventData as DataEvent).snapshot,\n (eventData as DataEvent).prevName\n );\n }\n }\n\n matches(other: EventRegistration): boolean {\n if (other instanceof ChildEventRegistration) {\n return (\n this.eventType === other.eventType &&\n (!this.callbackContext ||\n !other.callbackContext ||\n this.callbackContext.matches(other.callbackContext))\n );\n }\n\n return false;\n }\n\n hasAnyCallback(): boolean {\n return !!this.callbackContext;\n }\n}\n\nfunction addEventListener(\n query: Query,\n eventType: EventType,\n callback: UserCallback,\n cancelCallbackOrListenOptions?: ((error: Error) => unknown) | ListenOptions,\n options?: ListenOptions\n) {\n let cancelCallback: ((error: Error) => unknown) | undefined;\n if (typeof cancelCallbackOrListenOptions === 'object') {\n cancelCallback = undefined;\n options = cancelCallbackOrListenOptions;\n }\n if (typeof cancelCallbackOrListenOptions === 'function') {\n cancelCallback = cancelCallbackOrListenOptions;\n }\n\n if (options && options.onlyOnce) {\n const userCallback = callback;\n const onceCallback: UserCallback = (dataSnapshot, previousChildName) => {\n repoRemoveEventCallbackForQuery(query._repo, query, container);\n userCallback(dataSnapshot, previousChildName);\n };\n onceCallback.userCallback = callback.userCallback;\n onceCallback.context = callback.context;\n callback = onceCallback;\n }\n\n const callbackContext = new CallbackContext(\n callback,\n cancelCallback || undefined\n );\n const container =\n eventType === 'value'\n ? new ValueEventRegistration(callbackContext)\n : new ChildEventRegistration(eventType, callbackContext);\n repoAddEventCallbackForQuery(query._repo, query, container);\n return () => repoRemoveEventCallbackForQuery(query._repo, query, container);\n}\n\n/**\n * Listens for data changes at a particular location.\n *\n * This is the primary way to read data from a Database. Your callback\n * will be triggered for the initial data and again whenever the data changes.\n * Invoke the returned unsubscribe callback to stop receiving updates. See\n * {@link https://firebase.google.com/docs/database/web/retrieve-data | Retrieve Data on the Web}\n * for more details.\n *\n * An `onValue` event will trigger once with the initial data stored at this\n * location, and then trigger again each time the data changes. The\n * `DataSnapshot` passed to the callback will be for the location at which\n * `on()` was called. It won't trigger until the entire contents has been\n * synchronized. If the location has no data, it will be triggered with an empty\n * `DataSnapshot` (`val()` will return `null`).\n *\n * @param query - The query to run.\n * @param callback - A callback that fires when the specified event occurs. The\n * callback will be passed a DataSnapshot.\n * @param cancelCallback - An optional callback that will be notified if your\n * event subscription is ever canceled because your client does not have\n * permission to read this data (or it had permission but has now lost it).\n * This callback will be passed an `Error` object indicating why the failure\n * occurred.\n * @returns A function that can be invoked to remove the listener.\n */\nexport function onValue(\n query: Query,\n callback: (snapshot: DataSnapshot) => unknown,\n cancelCallback?: (error: Error) => unknown\n): Unsubscribe;\n\n/**\n * Listens for data changes at a particular location.\n *\n * This is the primary way to read data from a Database. Your callback\n * will be triggered for the initial data and again whenever the data changes.\n * Invoke the returned unsubscribe callback to stop receiving updates. See\n * {@link https://firebase.google.com/docs/database/web/retrieve-data | Retrieve Data on the Web}\n * for more details.\n *\n * An `onValue` event will trigger once with the initial data stored at this\n * location, and then trigger again each time the data changes. The\n * `DataSnapshot` passed to the callback will be for the location at which\n * `on()` was called. It won't trigger until the entire contents has been\n * synchronized. If the location has no data, it will be triggered with an empty\n * `DataSnapshot` (`val()` will return `null`).\n *\n * @param query - The query to run.\n * @param callback - A callback that fires when the specified event occurs. The\n * callback will be passed a DataSnapshot.\n * @param options - An object that can be used to configure `onlyOnce`, which\n * then removes the listener after its first invocation.\n * @returns A function that can be invoked to remove the listener.\n */\nexport function onValue(\n query: Query,\n callback: (snapshot: DataSnapshot) => unknown,\n options: ListenOptions\n): Unsubscribe;\n\n/**\n * Listens for data changes at a particular location.\n *\n * This is the primary way to read data from a Database. Your callback\n * will be triggered for the initial data and again whenever the data changes.\n * Invoke the returned unsubscribe callback to stop receiving updates. See\n * {@link https://firebase.google.com/docs/database/web/retrieve-data | Retrieve Data on the Web}\n * for more details.\n *\n * An `onValue` event will trigger once with the initial data stored at this\n * location, and then trigger again each time the data changes. The\n * `DataSnapshot` passed to the callback will be for the location at which\n * `on()` was called. It won't trigger until the entire contents has been\n * synchronized. If the location has no data, it will be triggered with an empty\n * `DataSnapshot` (`val()` will return `null`).\n *\n * @param query - The query to run.\n * @param callback - A callback that fires when the specified event occurs. The\n * callback will be passed a DataSnapshot.\n * @param cancelCallback - An optional callback that will be notified if your\n * event subscription is ever canceled because your client does not have\n * permission to read this data (or it had permission but has now lost it).\n * This callback will be passed an `Error` object indicating why the failure\n * occurred.\n * @param options - An object that can be used to configure `onlyOnce`, which\n * then removes the listener after its first invocation.\n * @returns A function that can be invoked to remove the listener.\n */\nexport function onValue(\n query: Query,\n callback: (snapshot: DataSnapshot) => unknown,\n cancelCallback: (error: Error) => unknown,\n options: ListenOptions\n): Unsubscribe;\n\nexport function onValue(\n query: Query,\n callback: (snapshot: DataSnapshot) => unknown,\n cancelCallbackOrListenOptions?: ((error: Error) => unknown) | ListenOptions,\n options?: ListenOptions\n): Unsubscribe {\n return addEventListener(\n query,\n 'value',\n callback,\n cancelCallbackOrListenOptions,\n options\n );\n}\n\n/**\n * Listens for data changes at a particular location.\n *\n * This is the primary way to read data from a Database. Your callback\n * will be triggered for the initial data and again whenever the data changes.\n * Invoke the returned unsubscribe callback to stop receiving updates. See\n * {@link https://firebase.google.com/docs/database/web/retrieve-data | Retrieve Data on the Web}\n * for more details.\n *\n * An `onChildAdded` event will be triggered once for each initial child at this\n * location, and it will be triggered again every time a new child is added. The\n * `DataSnapshot` passed into the callback will reflect the data for the\n * relevant child. For ordering purposes, it is passed a second argument which\n * is a string containing the key of the previous sibling child by sort order,\n * or `null` if it is the first child.\n *\n * @param query - The query to run.\n * @param callback - A callback that fires when the specified event occurs.\n * The callback will be passed a DataSnapshot and a string containing the key of\n * the previous child, by sort order, or `null` if it is the first child.\n * @param cancelCallback - An optional callback that will be notified if your\n * event subscription is ever canceled because your client does not have\n * permission to read this data (or it had permission but has now lost it).\n * This callback will be passed an `Error` object indicating why the failure\n * occurred.\n * @returns A function that can be invoked to remove the listener.\n */\nexport function onChildAdded(\n query: Query,\n callback: (\n snapshot: DataSnapshot,\n previousChildName?: string | null\n ) => unknown,\n cancelCallback?: (error: Error) => unknown\n): Unsubscribe;\n\n/**\n * Listens for data changes at a particular location.\n *\n * This is the primary way to read data from a Database. Your callback\n * will be triggered for the initial data and again whenever the data changes.\n * Invoke the returned unsubscribe callback to stop receiving updates. See\n * {@link https://firebase.google.com/docs/database/web/retrieve-data | Retrieve Data on the Web}\n * for more details.\n *\n * An `onChildAdded` event will be triggered once for each initial child at this\n * location, and it will be triggered again every time a new child is added. The\n * `DataSnapshot` passed into the callback will reflect the data for the\n * relevant child. For ordering purposes, it is passed a second argument which\n * is a string containing the key of the previous sibling child by sort order,\n * or `null` if it is the first child.\n *\n * @param query - The query to run.\n * @param callback - A callback that fires when the specified event occurs.\n * The callback will be passed a DataSnapshot and a string containing the key of\n * the previous child, by sort order, or `null` if it is the first child.\n * @param options - An object that can be used to configure `onlyOnce`, which\n * then removes the listener after its first invocation.\n * @returns A function that can be invoked to remove the listener.\n */\nexport function onChildAdded(\n query: Query,\n callback: (\n snapshot: DataSnapshot,\n previousChildName: string | null\n ) => unknown,\n options: ListenOptions\n): Unsubscribe;\n\n/**\n * Listens for data changes at a particular location.\n *\n * This is the primary way to read data from a Database. Your callback\n * will be triggered for the initial data and again whenever the data changes.\n * Invoke the returned unsubscribe callback to stop receiving updates. See\n * {@link https://firebase.google.com/docs/database/web/retrieve-data | Retrieve Data on the Web}\n * for more details.\n *\n * An `onChildAdded` event will be triggered once for each initial child at this\n * location, and it will be triggered again every time a new child is added. The\n * `DataSnapshot` passed into the callback will reflect the data for the\n * relevant child. For ordering purposes, it is passed a second argument which\n * is a string containing the key of the previous sibling child by sort order,\n * or `null` if it is the first child.\n *\n * @param query - The query to run.\n * @param callback - A callback that fires when the specified event occurs.\n * The callback will be passed a DataSnapshot and a string containing the key of\n * the previous child, by sort order, or `null` if it is the first child.\n * @param cancelCallback - An optional callback that will be notified if your\n * event subscription is ever canceled because your client does not have\n * permission to read this data (or it had permission but has now lost it).\n * This callback will be passed an `Error` object indicating why the failure\n * occurred.\n * @param options - An object that can be used to configure `onlyOnce`, which\n * then removes the listener after its first invocation.\n * @returns A function that can be invoked to remove the listener.\n */\nexport function onChildAdded(\n query: Query,\n callback: (\n snapshot: DataSnapshot,\n previousChildName: string | null\n ) => unknown,\n cancelCallback: (error: Error) => unknown,\n options: ListenOptions\n): Unsubscribe;\n\nexport function onChildAdded(\n query: Query,\n callback: (\n snapshot: DataSnapshot,\n previousChildName: string | null\n ) => unknown,\n cancelCallbackOrListenOptions?: ((error: Error) => unknown) | ListenOptions,\n options?: ListenOptions\n): Unsubscribe {\n return addEventListener(\n query,\n 'child_added',\n callback,\n cancelCallbackOrListenOptions,\n options\n );\n}\n\n/**\n * Listens for data changes at a particular location.\n *\n * This is the primary way to read data from a Database. Your callback\n * will be triggered for the initial data and again whenever the data changes.\n * Invoke the returned unsubscribe callback to stop receiving updates. See\n * {@link https://firebase.google.com/docs/database/web/retrieve-data | Retrieve Data on the Web}\n * for more details.\n *\n * An `onChildChanged` event will be triggered when the data stored in a child\n * (or any of its descendants) changes. Note that a single `child_changed` event\n * may represent multiple changes to the child. The `DataSnapshot` passed to the\n * callback will contain the new child contents. For ordering purposes, the\n * callback is also passed a second argument which is a string containing the\n * key of the previous sibling child by sort order, or `null` if it is the first\n * child.\n *\n * @param query - The query to run.\n * @param callback - A callback that fires when the specified event occurs.\n * The callback will be passed a DataSnapshot and a string containing the key of\n * the previous child, by sort order, or `null` if it is the first child.\n * @param cancelCallback - An optional callback that will be notified if your\n * event subscription is ever canceled because your client does not have\n * permission to read this data (or it had permission but has now lost it).\n * This callback will be passed an `Error` object indicating why the failure\n * occurred.\n * @returns A function that can be invoked to remove the listener.\n */\nexport function onChildChanged(\n query: Query,\n callback: (\n snapshot: DataSnapshot,\n previousChildName: string | null\n ) => unknown,\n cancelCallback?: (error: Error) => unknown\n): Unsubscribe;\n\n/**\n * Listens for data changes at a particular location.\n *\n * This is the primary way to read data from a Database. Your callback\n * will be triggered for the initial data and again whenever the data changes.\n * Invoke the returned unsubscribe callback to stop receiving updates. See\n * {@link https://firebase.google.com/docs/database/web/retrieve-data | Retrieve Data on the Web}\n * for more details.\n *\n * An `onChildChanged` event will be triggered when the data stored in a child\n * (or any of its descendants) changes. Note that a single `child_changed` event\n * may represent multiple changes to the child. The `DataSnapshot` passed to the\n * callback will contain the new child contents. For ordering purposes, the\n * callback is also passed a second argument which is a string containing the\n * key of the previous sibling child by sort order, or `null` if it is the first\n * child.\n *\n * @param query - The query to run.\n * @param callback - A callback that fires when the specified event occurs.\n * The callback will be passed a DataSnapshot and a string containing the key of\n * the previous child, by sort order, or `null` if it is the first child.\n * @param options - An object that can be used to configure `onlyOnce`, which\n * then removes the listener after its first invocation.\n * @returns A function that can be invoked to remove the listener.\n */\nexport function onChildChanged(\n query: Query,\n callback: (\n snapshot: DataSnapshot,\n previousChildName: string | null\n ) => unknown,\n options: ListenOptions\n): Unsubscribe;\n\n/**\n * Listens for data changes at a particular location.\n *\n * This is the primary way to read data from a Database. Your callback\n * will be triggered for the initial data and again whenever the data changes.\n * Invoke the returned unsubscribe callback to stop receiving updates. See\n * {@link https://firebase.google.com/docs/database/web/retrieve-data | Retrieve Data on the Web}\n * for more details.\n *\n * An `onChildChanged` event will be triggered when the data stored in a child\n * (or any of its descendants) changes. Note that a single `child_changed` event\n * may represent multiple changes to the child. The `DataSnapshot` passed to the\n * callback will contain the new child contents. For ordering purposes, the\n * callback is also passed a second argument which is a string containing the\n * key of the previous sibling child by sort order, or `null` if it is the first\n * child.\n *\n * @param query - The query to run.\n * @param callback - A callback that fires when the specified event occurs.\n * The callback will be passed a DataSnapshot and a string containing the key of\n * the previous child, by sort order, or `null` if it is the first child.\n * @param cancelCallback - An optional callback that will be notified if your\n * event subscription is ever canceled because your client does not have\n * permission to read this data (or it had permission but has now lost it).\n * This callback will be passed an `Error` object indicating why the failure\n * occurred.\n * @param options - An object that can be used to configure `onlyOnce`, which\n * then removes the listener after its first invocation.\n * @returns A function that can be invoked to remove the listener.\n */\nexport function onChildChanged(\n query: Query,\n callback: (\n snapshot: DataSnapshot,\n previousChildName: string | null\n ) => unknown,\n cancelCallback: (error: Error) => unknown,\n options: ListenOptions\n): Unsubscribe;\n\nexport function onChildChanged(\n query: Query,\n callback: (\n snapshot: DataSnapshot,\n previousChildName: string | null\n ) => unknown,\n cancelCallbackOrListenOptions?: ((error: Error) => unknown) | ListenOptions,\n options?: ListenOptions\n): Unsubscribe {\n return addEventListener(\n query,\n 'child_changed',\n callback,\n cancelCallbackOrListenOptions,\n options\n );\n}\n\n/**\n * Listens for data changes at a particular location.\n *\n * This is the primary way to read data from a Database. Your callback\n * will be triggered for the initial data and again whenever the data changes.\n * Invoke the returned unsubscribe callback to stop receiving updates. See\n * {@link https://firebase.google.com/docs/database/web/retrieve-data | Retrieve Data on the Web}\n * for more details.\n *\n * An `onChildMoved` event will be triggered when a child's sort order changes\n * such that its position relative to its siblings changes. The `DataSnapshot`\n * passed to the callback will be for the data of the child that has moved. It\n * is also passed a second argument which is a string containing the key of the\n * previous sibling child by sort order, or `null` if it is the first child.\n *\n * @param query - The query to run.\n * @param callback - A callback that fires when the specified event occurs.\n * The callback will be passed a DataSnapshot and a string containing the key of\n * the previous child, by sort order, or `null` if it is the first child.\n * @param cancelCallback - An optional callback that will be notified if your\n * event subscription is ever canceled because your client does not have\n * permission to read this data (or it had permission but has now lost it).\n * This callback will be passed an `Error` object indicating why the failure\n * occurred.\n * @returns A function that can be invoked to remove the listener.\n */\nexport function onChildMoved(\n query: Query,\n callback: (\n snapshot: DataSnapshot,\n previousChildName: string | null\n ) => unknown,\n cancelCallback?: (error: Error) => unknown\n): Unsubscribe;\n\n/**\n * Listens for data changes at a particular location.\n *\n * This is the primary way to read data from a Database. Your callback\n * will be triggered for the initial data and again whenever the data changes.\n * Invoke the returned unsubscribe callback to stop receiving updates. See\n * {@link https://firebase.google.com/docs/database/web/retrieve-data | Retrieve Data on the Web}\n * for more details.\n *\n * An `onChildMoved` event will be triggered when a child's sort order changes\n * such that its position relative to its siblings changes. The `DataSnapshot`\n * passed to the callback will be for the data of the child that has moved. It\n * is also passed a second argument which is a string containing the key of the\n * previous sibling child by sort order, or `null` if it is the first child.\n *\n * @param query - The query to run.\n * @param callback - A callback that fires when the specified event occurs.\n * The callback will be passed a DataSnapshot and a string containing the key of\n * the previous child, by sort order, or `null` if it is the first child.\n * @param options - An object that can be used to configure `onlyOnce`, which\n * then removes the listener after its first invocation.\n * @returns A function that can be invoked to remove the listener.\n */\nexport function onChildMoved(\n query: Query,\n callback: (\n snapshot: DataSnapshot,\n previousChildName: string | null\n ) => unknown,\n options: ListenOptions\n): Unsubscribe;\n\n/**\n * Listens for data changes at a particular location.\n *\n * This is the primary way to read data from a Database. Your callback\n * will be triggered for the initial data and again whenever the data changes.\n * Invoke the returned unsubscribe callback to stop receiving updates. See\n * {@link https://firebase.google.com/docs/database/web/retrieve-data | Retrieve Data on the Web}\n * for more details.\n *\n * An `onChildMoved` event will be triggered when a child's sort order changes\n * such that its position relative to its siblings changes. The `DataSnapshot`\n * passed to the callback will be for the data of the child that has moved. It\n * is also passed a second argument which is a string containing the key of the\n * previous sibling child by sort order, or `null` if it is the first child.\n *\n * @param query - The query to run.\n * @param callback - A callback that fires when the specified event occurs.\n * The callback will be passed a DataSnapshot and a string containing the key of\n * the previous child, by sort order, or `null` if it is the first child.\n * @param cancelCallback - An optional callback that will be notified if your\n * event subscription is ever canceled because your client does not have\n * permission to read this data (or it had permission but has now lost it).\n * This callback will be passed an `Error` object indicating why the failure\n * occurred.\n * @param options - An object that can be used to configure `onlyOnce`, which\n * then removes the listener after its first invocation.\n * @returns A function that can be invoked to remove the listener.\n */\nexport function onChildMoved(\n query: Query,\n callback: (\n snapshot: DataSnapshot,\n previousChildName: string | null\n ) => unknown,\n cancelCallback: (error: Error) => unknown,\n options: ListenOptions\n): Unsubscribe;\n\nexport function onChildMoved(\n query: Query,\n callback: (\n snapshot: DataSnapshot,\n previousChildName: string | null\n ) => unknown,\n cancelCallbackOrListenOptions?: ((error: Error) => unknown) | ListenOptions,\n options?: ListenOptions\n): Unsubscribe {\n return addEventListener(\n query,\n 'child_moved',\n callback,\n cancelCallbackOrListenOptions,\n options\n );\n}\n\n/**\n * Listens for data changes at a particular location.\n *\n * This is the primary way to read data from a Database. Your callback\n * will be triggered for the initial data and again whenever the data changes.\n * Invoke the returned unsubscribe callback to stop receiving updates. See\n * {@link https://firebase.google.com/docs/database/web/retrieve-data | Retrieve Data on the Web}\n * for more details.\n *\n * An `onChildRemoved` event will be triggered once every time a child is\n * removed. The `DataSnapshot` passed into the callback will be the old data for\n * the child that was removed. A child will get removed when either:\n *\n * - a client explicitly calls `remove()` on that child or one of its ancestors\n * - a client calls `set(null)` on that child or one of its ancestors\n * - that child has all of its children removed\n * - there is a query in effect which now filters out the child (because it's\n * sort order changed or the max limit was hit)\n *\n * @param query - The query to run.\n * @param callback - A callback that fires when the specified event occurs.\n * The callback will be passed a DataSnapshot and a string containing the key of\n * the previous child, by sort order, or `null` if it is the first child.\n * @param cancelCallback - An optional callback that will be notified if your\n * event subscription is ever canceled because your client does not have\n * permission to read this data (or it had permission but has now lost it).\n * This callback will be passed an `Error` object indicating why the failure\n * occurred.\n * @returns A function that can be invoked to remove the listener.\n */\nexport function onChildRemoved(\n query: Query,\n callback: (snapshot: DataSnapshot) => unknown,\n cancelCallback?: (error: Error) => unknown\n): Unsubscribe;\n\n/**\n * Listens for data changes at a particular location.\n *\n * This is the primary way to read data from a Database. Your callback\n * will be triggered for the initial data and again whenever the data changes.\n * Invoke the returned unsubscribe callback to stop receiving updates. See\n * {@link https://firebase.google.com/docs/database/web/retrieve-data | Retrieve Data on the Web}\n * for more details.\n *\n * An `onChildRemoved` event will be triggered once every time a child is\n * removed. The `DataSnapshot` passed into the callback will be the old data for\n * the child that was removed. A child will get removed when either:\n *\n * - a client explicitly calls `remove()` on that child or one of its ancestors\n * - a client calls `set(null)` on that child or one of its ancestors\n * - that child has all of its children removed\n * - there is a query in effect which now filters out the child (because it's\n * sort order changed or the max limit was hit)\n *\n * @param query - The query to run.\n * @param callback - A callback that fires when the specified event occurs.\n * The callback will be passed a DataSnapshot and a string containing the key of\n * the previous child, by sort order, or `null` if it is the first child.\n * @param options - An object that can be used to configure `onlyOnce`, which\n * then removes the listener after its first invocation.\n * @returns A function that can be invoked to remove the listener.\n */\nexport function onChildRemoved(\n query: Query,\n callback: (snapshot: DataSnapshot) => unknown,\n options: ListenOptions\n): Unsubscribe;\n\n/**\n * Listens for data changes at a particular location.\n *\n * This is the primary way to read data from a Database. Your callback\n * will be triggered for the initial data and again whenever the data changes.\n * Invoke the returned unsubscribe callback to stop receiving updates. See\n * {@link https://firebase.google.com/docs/database/web/retrieve-data | Retrieve Data on the Web}\n * for more details.\n *\n * An `onChildRemoved` event will be triggered once every time a child is\n * removed. The `DataSnapshot` passed into the callback will be the old data for\n * the child that was removed. A child will get removed when either:\n *\n * - a client explicitly calls `remove()` on that child or one of its ancestors\n * - a client calls `set(null)` on that child or one of its ancestors\n * - that child has all of its children removed\n * - there is a query in effect which now filters out the child (because it's\n * sort order changed or the max limit was hit)\n *\n * @param query - The query to run.\n * @param callback - A callback that fires when the specified event occurs.\n * The callback will be passed a DataSnapshot and a string containing the key of\n * the previous child, by sort order, or `null` if it is the first child.\n * @param cancelCallback - An optional callback that will be notified if your\n * event subscription is ever canceled because your client does not have\n * permission to read this data (or it had permission but has now lost it).\n * This callback will be passed an `Error` object indicating why the failure\n * occurred.\n * @param options - An object that can be used to configure `onlyOnce`, which\n * then removes the listener after its first invocation.\n * @returns A function that can be invoked to remove the listener.\n */\nexport function onChildRemoved(\n query: Query,\n callback: (snapshot: DataSnapshot) => unknown,\n cancelCallback: (error: Error) => unknown,\n options: ListenOptions\n): Unsubscribe;\n\nexport function onChildRemoved(\n query: Query,\n callback: (snapshot: DataSnapshot) => unknown,\n cancelCallbackOrListenOptions?: ((error: Error) => unknown) | ListenOptions,\n options?: ListenOptions\n): Unsubscribe {\n return addEventListener(\n query,\n 'child_removed',\n callback,\n cancelCallbackOrListenOptions,\n options\n );\n}\n\nexport { EventType };\n\n/**\n * Detaches a callback previously attached with the corresponding `on*()` (`onValue`, `onChildAdded`) listener.\n * Note: This is not the recommended way to remove a listener. Instead, please use the returned callback function from\n * the respective `on*` callbacks.\n *\n * Detach a callback previously attached with `on*()`. Calling `off()` on a parent listener\n * will not automatically remove listeners registered on child nodes, `off()`\n * must also be called on any child listeners to remove the callback.\n *\n * If a callback is not specified, all callbacks for the specified eventType\n * will be removed. Similarly, if no eventType is specified, all callbacks\n * for the `Reference` will be removed.\n *\n * Individual listeners can also be removed by invoking their unsubscribe\n * callbacks.\n *\n * @param query - The query that the listener was registered with.\n * @param eventType - One of the following strings: \"value\", \"child_added\",\n * \"child_changed\", \"child_removed\", or \"child_moved.\" If omitted, all callbacks\n * for the `Reference` will be removed.\n * @param callback - The callback function that was passed to `on()` or\n * `undefined` to remove all callbacks.\n */\nexport function off(\n query: Query,\n eventType?: EventType,\n callback?: (\n snapshot: DataSnapshot,\n previousChildName?: string | null\n ) => unknown\n): void {\n let container: EventRegistration | null = null;\n const expCallback = callback ? new CallbackContext(callback) : null;\n if (eventType === 'value') {\n container = new ValueEventRegistration(expCallback);\n } else if (eventType) {\n container = new ChildEventRegistration(eventType, expCallback);\n }\n repoRemoveEventCallbackForQuery(query._repo, query, container);\n}\n\n/** Describes the different query constraints available in this SDK. */\nexport type QueryConstraintType =\n | 'endAt'\n | 'endBefore'\n | 'startAt'\n | 'startAfter'\n | 'limitToFirst'\n | 'limitToLast'\n | 'orderByChild'\n | 'orderByKey'\n | 'orderByPriority'\n | 'orderByValue'\n | 'equalTo';\n\n/**\n * A `QueryConstraint` is used to narrow the set of documents returned by a\n * Database query. `QueryConstraint`s are created by invoking {@link endAt},\n * {@link endBefore}, {@link startAt}, {@link startAfter}, {@link\n * limitToFirst}, {@link limitToLast}, {@link orderByChild},\n * {@link orderByChild}, {@link orderByKey} , {@link orderByPriority} ,\n * {@link orderByValue} or {@link equalTo} and\n * can then be passed to {@link query} to create a new query instance that\n * also contains this `QueryConstraint`.\n */\nexport abstract class QueryConstraint {\n /** The type of this query constraints */\n abstract readonly type: QueryConstraintType;\n\n /**\n * Takes the provided `Query` and returns a copy of the `Query` with this\n * `QueryConstraint` applied.\n */\n abstract _apply(query: QueryImpl): QueryImpl;\n}\n\nclass QueryEndAtConstraint extends QueryConstraint {\n readonly type = 'endAt';\n\n constructor(\n private readonly _value: number | string | boolean | null,\n private readonly _key?: string\n ) {\n super();\n }\n\n _apply(query: QueryImpl): QueryImpl {\n validateFirebaseDataArg('endAt', this._value, query._path, true);\n const newParams = queryParamsEndAt(\n query._queryParams,\n this._value,\n this._key\n );\n validateLimit(newParams);\n validateQueryEndpoints(newParams);\n if (query._queryParams.hasEnd()) {\n throw new Error(\n 'endAt: Starting point was already set (by another call to endAt, ' +\n 'endBefore or equalTo).'\n );\n }\n return new QueryImpl(\n query._repo,\n query._path,\n newParams,\n query._orderByCalled\n );\n }\n}\n\n/**\n * Creates a `QueryConstraint` with the specified ending point.\n *\n * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`\n * allows you to choose arbitrary starting and ending points for your queries.\n *\n * The ending point is inclusive, so children with exactly the specified value\n * will be included in the query. The optional key argument can be used to\n * further limit the range of the query. If it is specified, then children that\n * have exactly the specified value must also have a key name less than or equal\n * to the specified key.\n *\n * You can read more about `endAt()` in\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#filtering_data | Filtering data}.\n *\n * @param value - The value to end at. The argument type depends on which\n * `orderBy*()` function was used in this query. Specify a value that matches\n * the `orderBy*()` type. When used in combination with `orderByKey()`, the\n * value must be a string.\n * @param key - The child key to end at, among the children with the previously\n * specified priority. This argument is only allowed if ordering by child,\n * value, or priority.\n */\nexport function endAt(\n value: number | string | boolean | null,\n key?: string\n): QueryConstraint {\n validateKey('endAt', 'key', key, true);\n return new QueryEndAtConstraint(value, key);\n}\n\nclass QueryEndBeforeConstraint extends QueryConstraint {\n readonly type = 'endBefore';\n\n constructor(\n private readonly _value: number | string | boolean | null,\n private readonly _key?: string\n ) {\n super();\n }\n\n _apply(query: QueryImpl): QueryImpl {\n validateFirebaseDataArg('endBefore', this._value, query._path, false);\n const newParams = queryParamsEndBefore(\n query._queryParams,\n this._value,\n this._key\n );\n validateLimit(newParams);\n validateQueryEndpoints(newParams);\n if (query._queryParams.hasEnd()) {\n throw new Error(\n 'endBefore: Starting point was already set (by another call to endAt, ' +\n 'endBefore or equalTo).'\n );\n }\n return new QueryImpl(\n query._repo,\n query._path,\n newParams,\n query._orderByCalled\n );\n }\n}\n\n/**\n * Creates a `QueryConstraint` with the specified ending point (exclusive).\n *\n * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`\n * allows you to choose arbitrary starting and ending points for your queries.\n *\n * The ending point is exclusive. If only a value is provided, children\n * with a value less than the specified value will be included in the query.\n * If a key is specified, then children must have a value less than or equal\n * to the specified value and a key name less than the specified key.\n *\n * @param value - The value to end before. The argument type depends on which\n * `orderBy*()` function was used in this query. Specify a value that matches\n * the `orderBy*()` type. When used in combination with `orderByKey()`, the\n * value must be a string.\n * @param key - The child key to end before, among the children with the\n * previously specified priority. This argument is only allowed if ordering by\n * child, value, or priority.\n */\nexport function endBefore(\n value: number | string | boolean | null,\n key?: string\n): QueryConstraint {\n validateKey('endBefore', 'key', key, true);\n return new QueryEndBeforeConstraint(value, key);\n}\n\nclass QueryStartAtConstraint extends QueryConstraint {\n readonly type = 'startAt';\n\n constructor(\n private readonly _value: number | string | boolean | null,\n private readonly _key?: string\n ) {\n super();\n }\n\n _apply(query: QueryImpl): QueryImpl {\n validateFirebaseDataArg('startAt', this._value, query._path, true);\n const newParams = queryParamsStartAt(\n query._queryParams,\n this._value,\n this._key\n );\n validateLimit(newParams);\n validateQueryEndpoints(newParams);\n if (query._queryParams.hasStart()) {\n throw new Error(\n 'startAt: Starting point was already set (by another call to startAt, ' +\n 'startBefore or equalTo).'\n );\n }\n return new QueryImpl(\n query._repo,\n query._path,\n newParams,\n query._orderByCalled\n );\n }\n}\n\n/**\n * Creates a `QueryConstraint` with the specified starting point.\n *\n * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`\n * allows you to choose arbitrary starting and ending points for your queries.\n *\n * The starting point is inclusive, so children with exactly the specified value\n * will be included in the query. The optional key argument can be used to\n * further limit the range of the query. If it is specified, then children that\n * have exactly the specified value must also have a key name greater than or\n * equal to the specified key.\n *\n * You can read more about `startAt()` in\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#filtering_data | Filtering data}.\n *\n * @param value - The value to start at. The argument type depends on which\n * `orderBy*()` function was used in this query. Specify a value that matches\n * the `orderBy*()` type. When used in combination with `orderByKey()`, the\n * value must be a string.\n * @param key - The child key to start at. This argument is only allowed if\n * ordering by child, value, or priority.\n */\nexport function startAt(\n value: number | string | boolean | null = null,\n key?: string\n): QueryConstraint {\n validateKey('startAt', 'key', key, true);\n return new QueryStartAtConstraint(value, key);\n}\n\nclass QueryStartAfterConstraint extends QueryConstraint {\n readonly type = 'startAfter';\n\n constructor(\n private readonly _value: number | string | boolean | null,\n private readonly _key?: string\n ) {\n super();\n }\n\n _apply(query: QueryImpl): QueryImpl {\n validateFirebaseDataArg('startAfter', this._value, query._path, false);\n const newParams = queryParamsStartAfter(\n query._queryParams,\n this._value,\n this._key\n );\n validateLimit(newParams);\n validateQueryEndpoints(newParams);\n if (query._queryParams.hasStart()) {\n throw new Error(\n 'startAfter: Starting point was already set (by another call to startAt, ' +\n 'startAfter, or equalTo).'\n );\n }\n return new QueryImpl(\n query._repo,\n query._path,\n newParams,\n query._orderByCalled\n );\n }\n}\n\n/**\n * Creates a `QueryConstraint` with the specified starting point (exclusive).\n *\n * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`\n * allows you to choose arbitrary starting and ending points for your queries.\n *\n * The starting point is exclusive. If only a value is provided, children\n * with a value greater than the specified value will be included in the query.\n * If a key is specified, then children must have a value greater than or equal\n * to the specified value and a a key name greater than the specified key.\n *\n * @param value - The value to start after. The argument type depends on which\n * `orderBy*()` function was used in this query. Specify a value that matches\n * the `orderBy*()` type. When used in combination with `orderByKey()`, the\n * value must be a string.\n * @param key - The child key to start after. This argument is only allowed if\n * ordering by child, value, or priority.\n */\nexport function startAfter(\n value: number | string | boolean | null,\n key?: string\n): QueryConstraint {\n validateKey('startAfter', 'key', key, true);\n return new QueryStartAfterConstraint(value, key);\n}\n\nclass QueryLimitToFirstConstraint extends QueryConstraint {\n readonly type = 'limitToFirst';\n\n constructor(private readonly _limit: number) {\n super();\n }\n\n _apply(query: QueryImpl): QueryImpl {\n if (query._queryParams.hasLimit()) {\n throw new Error(\n 'limitToFirst: Limit was already set (by another call to limitToFirst ' +\n 'or limitToLast).'\n );\n }\n return new QueryImpl(\n query._repo,\n query._path,\n queryParamsLimitToFirst(query._queryParams, this._limit),\n query._orderByCalled\n );\n }\n}\n\n/**\n * Creates a new `QueryConstraint` that if limited to the first specific number\n * of children.\n *\n * The `limitToFirst()` method is used to set a maximum number of children to be\n * synced for a given callback. If we set a limit of 100, we will initially only\n * receive up to 100 `child_added` events. If we have fewer than 100 messages\n * stored in our Database, a `child_added` event will fire for each message.\n * However, if we have over 100 messages, we will only receive a `child_added`\n * event for the first 100 ordered messages. As items change, we will receive\n * `child_removed` events for each item that drops out of the active list so\n * that the total number stays at 100.\n *\n * You can read more about `limitToFirst()` in\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#filtering_data | Filtering data}.\n *\n * @param limit - The maximum number of nodes to include in this query.\n */\nexport function limitToFirst(limit: number): QueryConstraint {\n if (typeof limit !== 'number' || Math.floor(limit) !== limit || limit <= 0) {\n throw new Error('limitToFirst: First argument must be a positive integer.');\n }\n return new QueryLimitToFirstConstraint(limit);\n}\n\nclass QueryLimitToLastConstraint extends QueryConstraint {\n readonly type = 'limitToLast';\n\n constructor(private readonly _limit: number) {\n super();\n }\n\n _apply(query: QueryImpl): QueryImpl {\n if (query._queryParams.hasLimit()) {\n throw new Error(\n 'limitToLast: Limit was already set (by another call to limitToFirst ' +\n 'or limitToLast).'\n );\n }\n return new QueryImpl(\n query._repo,\n query._path,\n queryParamsLimitToLast(query._queryParams, this._limit),\n query._orderByCalled\n );\n }\n}\n\n/**\n * Creates a new `QueryConstraint` that is limited to return only the last\n * specified number of children.\n *\n * The `limitToLast()` method is used to set a maximum number of children to be\n * synced for a given callback. If we set a limit of 100, we will initially only\n * receive up to 100 `child_added` events. If we have fewer than 100 messages\n * stored in our Database, a `child_added` event will fire for each message.\n * However, if we have over 100 messages, we will only receive a `child_added`\n * event for the last 100 ordered messages. As items change, we will receive\n * `child_removed` events for each item that drops out of the active list so\n * that the total number stays at 100.\n *\n * You can read more about `limitToLast()` in\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#filtering_data | Filtering data}.\n *\n * @param limit - The maximum number of nodes to include in this query.\n */\nexport function limitToLast(limit: number): QueryConstraint {\n if (typeof limit !== 'number' || Math.floor(limit) !== limit || limit <= 0) {\n throw new Error('limitToLast: First argument must be a positive integer.');\n }\n\n return new QueryLimitToLastConstraint(limit);\n}\n\nclass QueryOrderByChildConstraint extends QueryConstraint {\n readonly type = 'orderByChild';\n\n constructor(private readonly _path: string) {\n super();\n }\n\n _apply(query: QueryImpl): QueryImpl {\n validateNoPreviousOrderByCall(query, 'orderByChild');\n const parsedPath = new Path(this._path);\n if (pathIsEmpty(parsedPath)) {\n throw new Error(\n 'orderByChild: cannot pass in empty path. Use orderByValue() instead.'\n );\n }\n const index = new PathIndex(parsedPath);\n const newParams = queryParamsOrderBy(query._queryParams, index);\n validateQueryEndpoints(newParams);\n\n return new QueryImpl(\n query._repo,\n query._path,\n newParams,\n /*orderByCalled=*/ true\n );\n }\n}\n\n/**\n * Creates a new `QueryConstraint` that orders by the specified child key.\n *\n * Queries can only order by one key at a time. Calling `orderByChild()`\n * multiple times on the same query is an error.\n *\n * Firebase queries allow you to order your data by any child key on the fly.\n * However, if you know in advance what your indexes will be, you can define\n * them via the .indexOn rule in your Security Rules for better performance. See\n * the{@link https://firebase.google.com/docs/database/security/indexing-data}\n * rule for more information.\n *\n * You can read more about `orderByChild()` in\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sort_data | Sort data}.\n *\n * @param path - The path to order by.\n */\nexport function orderByChild(path: string): QueryConstraint {\n if (path === '$key') {\n throw new Error(\n 'orderByChild: \"$key\" is invalid. Use orderByKey() instead.'\n );\n } else if (path === '$priority') {\n throw new Error(\n 'orderByChild: \"$priority\" is invalid. Use orderByPriority() instead.'\n );\n } else if (path === '$value') {\n throw new Error(\n 'orderByChild: \"$value\" is invalid. Use orderByValue() instead.'\n );\n }\n validatePathString('orderByChild', 'path', path, false);\n return new QueryOrderByChildConstraint(path);\n}\n\nclass QueryOrderByKeyConstraint extends QueryConstraint {\n readonly type = 'orderByKey';\n\n _apply(query: QueryImpl): QueryImpl {\n validateNoPreviousOrderByCall(query, 'orderByKey');\n const newParams = queryParamsOrderBy(query._queryParams, KEY_INDEX);\n validateQueryEndpoints(newParams);\n return new QueryImpl(\n query._repo,\n query._path,\n newParams,\n /*orderByCalled=*/ true\n );\n }\n}\n\n/**\n * Creates a new `QueryConstraint` that orders by the key.\n *\n * Sorts the results of a query by their (ascending) key values.\n *\n * You can read more about `orderByKey()` in\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sort_data | Sort data}.\n */\nexport function orderByKey(): QueryConstraint {\n return new QueryOrderByKeyConstraint();\n}\n\nclass QueryOrderByPriorityConstraint extends QueryConstraint {\n readonly type = 'orderByPriority';\n\n _apply(query: QueryImpl): QueryImpl {\n validateNoPreviousOrderByCall(query, 'orderByPriority');\n const newParams = queryParamsOrderBy(query._queryParams, PRIORITY_INDEX);\n validateQueryEndpoints(newParams);\n return new QueryImpl(\n query._repo,\n query._path,\n newParams,\n /*orderByCalled=*/ true\n );\n }\n}\n\n/**\n * Creates a new `QueryConstraint` that orders by priority.\n *\n * Applications need not use priority but can order collections by\n * ordinary properties (see\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sort_data | Sort data}\n * for alternatives to priority.\n */\nexport function orderByPriority(): QueryConstraint {\n return new QueryOrderByPriorityConstraint();\n}\n\nclass QueryOrderByValueConstraint extends QueryConstraint {\n readonly type = 'orderByValue';\n\n _apply(query: QueryImpl): QueryImpl {\n validateNoPreviousOrderByCall(query, 'orderByValue');\n const newParams = queryParamsOrderBy(query._queryParams, VALUE_INDEX);\n validateQueryEndpoints(newParams);\n return new QueryImpl(\n query._repo,\n query._path,\n newParams,\n /*orderByCalled=*/ true\n );\n }\n}\n\n/**\n * Creates a new `QueryConstraint` that orders by value.\n *\n * If the children of a query are all scalar values (string, number, or\n * boolean), you can order the results by their (ascending) values.\n *\n * You can read more about `orderByValue()` in\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sort_data | Sort data}.\n */\nexport function orderByValue(): QueryConstraint {\n return new QueryOrderByValueConstraint();\n}\n\nclass QueryEqualToValueConstraint extends QueryConstraint {\n readonly type = 'equalTo';\n\n constructor(\n private readonly _value: number | string | boolean | null,\n private readonly _key?: string\n ) {\n super();\n }\n\n _apply(query: QueryImpl): QueryImpl {\n validateFirebaseDataArg('equalTo', this._value, query._path, false);\n if (query._queryParams.hasStart()) {\n throw new Error(\n 'equalTo: Starting point was already set (by another call to startAt/startAfter or ' +\n 'equalTo).'\n );\n }\n if (query._queryParams.hasEnd()) {\n throw new Error(\n 'equalTo: Ending point was already set (by another call to endAt/endBefore or ' +\n 'equalTo).'\n );\n }\n return new QueryEndAtConstraint(this._value, this._key)._apply(\n new QueryStartAtConstraint(this._value, this._key)._apply(query)\n );\n }\n}\n\n/**\n * Creates a `QueryConstraint` that includes children that match the specified\n * value.\n *\n * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`\n * allows you to choose arbitrary starting and ending points for your queries.\n *\n * The optional key argument can be used to further limit the range of the\n * query. If it is specified, then children that have exactly the specified\n * value must also have exactly the specified key as their key name. This can be\n * used to filter result sets with many matches for the same value.\n *\n * You can read more about `equalTo()` in\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#filtering_data | Filtering data}.\n *\n * @param value - The value to match for. The argument type depends on which\n * `orderBy*()` function was used in this query. Specify a value that matches\n * the `orderBy*()` type. When used in combination with `orderByKey()`, the\n * value must be a string.\n * @param key - The child key to start at, among the children with the\n * previously specified priority. This argument is only allowed if ordering by\n * child, value, or priority.\n */\nexport function equalTo(\n value: number | string | boolean | null,\n key?: string\n): QueryConstraint {\n validateKey('equalTo', 'key', key, true);\n return new QueryEqualToValueConstraint(value, key);\n}\n\n/**\n * Creates a new immutable instance of `Query` that is extended to also include\n * additional query constraints.\n *\n * @param query - The Query instance to use as a base for the new constraints.\n * @param queryConstraints - The list of `QueryConstraint`s to apply.\n * @throws if any of the provided query constraints cannot be combined with the\n * existing or new constraints.\n */\nexport function query(\n query: Query,\n ...queryConstraints: QueryConstraint[]\n): Query {\n let queryImpl = getModularInstance(query) as QueryImpl;\n for (const constraint of queryConstraints) {\n queryImpl = constraint._apply(queryImpl);\n }\n return queryImpl;\n}\n\n/**\n * Define reference constructor in various modules\n *\n * We are doing this here to avoid several circular\n * dependency issues\n */\nsyncPointSetReferenceConstructor(ReferenceImpl);\nsyncTreeSetReferenceConstructor(ReferenceImpl);\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport {\n _FirebaseService,\n _getProvider,\n FirebaseApp,\n getApp\n} from '@firebase/app';\nimport { AppCheckInternalComponentName } from '@firebase/app-check-interop-types';\nimport { FirebaseAuthInternalName } from '@firebase/auth-interop-types';\nimport { Provider } from '@firebase/component';\nimport {\n getModularInstance,\n createMockUserToken,\n EmulatorMockTokenOptions,\n getDefaultEmulatorHostnameAndPort\n} from '@firebase/util';\n\nimport { AppCheckTokenProvider } from '../core/AppCheckTokenProvider';\nimport {\n AuthTokenProvider,\n EmulatorTokenProvider,\n FirebaseAuthTokenProvider\n} from '../core/AuthTokenProvider';\nimport { Repo, repoInterrupt, repoResume, repoStart } from '../core/Repo';\nimport { RepoInfo } from '../core/RepoInfo';\nimport { parseRepoInfo } from '../core/util/libs/parser';\nimport { newEmptyPath, pathIsEmpty } from '../core/util/Path';\nimport {\n warn,\n fatal,\n log,\n enableLogging as enableLoggingImpl\n} from '../core/util/util';\nimport { validateUrl } from '../core/util/validation';\nimport { BrowserPollConnection } from '../realtime/BrowserPollConnection';\nimport { TransportManager } from '../realtime/TransportManager';\nimport { WebSocketConnection } from '../realtime/WebSocketConnection';\n\nimport { ReferenceImpl } from './Reference_impl';\n\nexport { EmulatorMockTokenOptions } from '@firebase/util';\n/**\n * This variable is also defined in the firebase Node.js Admin SDK. Before\n * modifying this definition, consult the definition in:\n *\n * https://github.com/firebase/firebase-admin-node\n *\n * and make sure the two are consistent.\n */\nconst FIREBASE_DATABASE_EMULATOR_HOST_VAR = 'FIREBASE_DATABASE_EMULATOR_HOST';\n\n/**\n * Creates and caches `Repo` instances.\n */\nconst repos: {\n [appName: string]: {\n [dbUrl: string]: Repo;\n };\n} = {};\n\n/**\n * If true, any new `Repo` will be created to use `ReadonlyRestClient` (for testing purposes).\n */\nlet useRestClient = false;\n\n/**\n * Update an existing `Repo` in place to point to a new host/port.\n */\nfunction repoManagerApplyEmulatorSettings(\n repo: Repo,\n host: string,\n port: number,\n tokenProvider?: AuthTokenProvider\n): void {\n repo.repoInfo_ = new RepoInfo(\n `${host}:${port}`,\n /* secure= */ false,\n repo.repoInfo_.namespace,\n repo.repoInfo_.webSocketOnly,\n repo.repoInfo_.nodeAdmin,\n repo.repoInfo_.persistenceKey,\n repo.repoInfo_.includeNamespaceInQueryParams,\n /*isUsingEmulator=*/ true\n );\n\n if (tokenProvider) {\n repo.authTokenProvider_ = tokenProvider;\n }\n}\n\n/**\n * This function should only ever be called to CREATE a new database instance.\n * @internal\n */\nexport function repoManagerDatabaseFromApp(\n app: FirebaseApp,\n authProvider: Provider,\n appCheckProvider?: Provider,\n url?: string,\n nodeAdmin?: boolean\n): Database {\n let dbUrl: string | undefined = url || app.options.databaseURL;\n if (dbUrl === undefined) {\n if (!app.options.projectId) {\n fatal(\n \"Can't determine Firebase Database URL. Be sure to include \" +\n ' a Project ID when calling firebase.initializeApp().'\n );\n }\n\n log('Using default host for project ', app.options.projectId);\n dbUrl = `${app.options.projectId}-default-rtdb.firebaseio.com`;\n }\n\n let parsedUrl = parseRepoInfo(dbUrl, nodeAdmin);\n let repoInfo = parsedUrl.repoInfo;\n\n let isEmulator: boolean;\n\n let dbEmulatorHost: string | undefined = undefined;\n if (typeof process !== 'undefined' && process.env) {\n dbEmulatorHost = process.env[FIREBASE_DATABASE_EMULATOR_HOST_VAR];\n }\n\n if (dbEmulatorHost) {\n isEmulator = true;\n dbUrl = `http://${dbEmulatorHost}?ns=${repoInfo.namespace}`;\n parsedUrl = parseRepoInfo(dbUrl, nodeAdmin);\n repoInfo = parsedUrl.repoInfo;\n } else {\n isEmulator = !parsedUrl.repoInfo.secure;\n }\n\n const authTokenProvider =\n nodeAdmin && isEmulator\n ? new EmulatorTokenProvider(EmulatorTokenProvider.OWNER)\n : new FirebaseAuthTokenProvider(app.name, app.options, authProvider);\n\n validateUrl('Invalid Firebase Database URL', parsedUrl);\n if (!pathIsEmpty(parsedUrl.path)) {\n fatal(\n 'Database URL must point to the root of a Firebase Database ' +\n '(not including a child path).'\n );\n }\n\n const repo = repoManagerCreateRepo(\n repoInfo,\n app,\n authTokenProvider,\n new AppCheckTokenProvider(app.name, appCheckProvider)\n );\n return new Database(repo, app);\n}\n\n/**\n * Remove the repo and make sure it is disconnected.\n *\n */\nfunction repoManagerDeleteRepo(repo: Repo, appName: string): void {\n const appRepos = repos[appName];\n // This should never happen...\n if (!appRepos || appRepos[repo.key] !== repo) {\n fatal(`Database ${appName}(${repo.repoInfo_}) has already been deleted.`);\n }\n repoInterrupt(repo);\n delete appRepos[repo.key];\n}\n\n/**\n * Ensures a repo doesn't already exist and then creates one using the\n * provided app.\n *\n * @param repoInfo - The metadata about the Repo\n * @returns The Repo object for the specified server / repoName.\n */\nfunction repoManagerCreateRepo(\n repoInfo: RepoInfo,\n app: FirebaseApp,\n authTokenProvider: AuthTokenProvider,\n appCheckProvider: AppCheckTokenProvider\n): Repo {\n let appRepos = repos[app.name];\n\n if (!appRepos) {\n appRepos = {};\n repos[app.name] = appRepos;\n }\n\n let repo = appRepos[repoInfo.toURLString()];\n if (repo) {\n fatal(\n 'Database initialized multiple times. Please make sure the format of the database URL matches with each database() call.'\n );\n }\n repo = new Repo(repoInfo, useRestClient, authTokenProvider, appCheckProvider);\n appRepos[repoInfo.toURLString()] = repo;\n\n return repo;\n}\n\n/**\n * Forces us to use ReadonlyRestClient instead of PersistentConnection for new Repos.\n */\nexport function repoManagerForceRestClient(forceRestClient: boolean): void {\n useRestClient = forceRestClient;\n}\n\n/**\n * Class representing a Firebase Realtime Database.\n */\nexport class Database implements _FirebaseService {\n /** Represents a `Database` instance. */\n readonly 'type' = 'database';\n\n /** Track if the instance has been used (root or repo accessed) */\n _instanceStarted: boolean = false;\n\n /** Backing state for root_ */\n private _rootInternal?: ReferenceImpl;\n\n /** @hideconstructor */\n constructor(\n public _repoInternal: Repo,\n /** The {@link @firebase/app#FirebaseApp} associated with this Realtime Database instance. */\n readonly app: FirebaseApp\n ) {}\n\n get _repo(): Repo {\n if (!this._instanceStarted) {\n repoStart(\n this._repoInternal,\n this.app.options.appId,\n this.app.options['databaseAuthVariableOverride']\n );\n this._instanceStarted = true;\n }\n return this._repoInternal;\n }\n\n get _root(): ReferenceImpl {\n if (!this._rootInternal) {\n this._rootInternal = new ReferenceImpl(this._repo, newEmptyPath());\n }\n return this._rootInternal;\n }\n\n _delete(): Promise {\n if (this._rootInternal !== null) {\n repoManagerDeleteRepo(this._repo, this.app.name);\n this._repoInternal = null;\n this._rootInternal = null;\n }\n return Promise.resolve();\n }\n\n _checkNotDeleted(apiName: string) {\n if (this._rootInternal === null) {\n fatal('Cannot call ' + apiName + ' on a deleted database.');\n }\n }\n}\n\nfunction checkTransportInit() {\n if (TransportManager.IS_TRANSPORT_INITIALIZED) {\n warn(\n 'Transport has already been initialized. Please call this function before calling ref or setting up a listener'\n );\n }\n}\n\n/**\n * Force the use of websockets instead of longPolling.\n */\nexport function forceWebSockets() {\n checkTransportInit();\n BrowserPollConnection.forceDisallow();\n}\n\n/**\n * Force the use of longPolling instead of websockets. This will be ignored if websocket protocol is used in databaseURL.\n */\nexport function forceLongPolling() {\n checkTransportInit();\n WebSocketConnection.forceDisallow();\n BrowserPollConnection.forceAllow();\n}\n\n/**\n * Returns the instance of the Realtime Database SDK that is associated with the provided\n * {@link @firebase/app#FirebaseApp}. Initializes a new instance with default settings if\n * no instance exists or if the existing instance uses a custom database URL.\n *\n * @param app - The {@link @firebase/app#FirebaseApp} instance that the returned Realtime\n * Database instance is associated with.\n * @param url - The URL of the Realtime Database instance to connect to. If not\n * provided, the SDK connects to the default instance of the Firebase App.\n * @returns The `Database` instance of the provided app.\n */\nexport function getDatabase(\n app: FirebaseApp = getApp(),\n url?: string\n): Database {\n const db = _getProvider(app, 'database').getImmediate({\n identifier: url\n }) as Database;\n if (!db._instanceStarted) {\n const emulator = getDefaultEmulatorHostnameAndPort('database');\n if (emulator) {\n connectDatabaseEmulator(db, ...emulator);\n }\n }\n return db;\n}\n\n/**\n * Modify the provided instance to communicate with the Realtime Database\n * emulator.\n *\n *

Note: This method must be called before performing any other operation.\n *\n * @param db - The instance to modify.\n * @param host - The emulator host (ex: localhost)\n * @param port - The emulator port (ex: 8080)\n * @param options.mockUserToken - the mock auth token to use for unit testing Security Rules\n */\nexport function connectDatabaseEmulator(\n db: Database,\n host: string,\n port: number,\n options: {\n mockUserToken?: EmulatorMockTokenOptions | string;\n } = {}\n): void {\n db = getModularInstance(db);\n db._checkNotDeleted('useEmulator');\n if (db._instanceStarted) {\n fatal(\n 'Cannot call useEmulator() after instance has already been initialized.'\n );\n }\n\n const repo = db._repoInternal;\n let tokenProvider: EmulatorTokenProvider | undefined = undefined;\n if (repo.repoInfo_.nodeAdmin) {\n if (options.mockUserToken) {\n fatal(\n 'mockUserToken is not supported by the Admin SDK. For client access with mock users, please use the \"firebase\" package instead of \"firebase-admin\".'\n );\n }\n tokenProvider = new EmulatorTokenProvider(EmulatorTokenProvider.OWNER);\n } else if (options.mockUserToken) {\n const token =\n typeof options.mockUserToken === 'string'\n ? options.mockUserToken\n : createMockUserToken(options.mockUserToken, db.app.options.projectId);\n tokenProvider = new EmulatorTokenProvider(token);\n }\n\n // Modify the repo to apply emulator settings\n repoManagerApplyEmulatorSettings(repo, host, port, tokenProvider);\n}\n\n/**\n * Disconnects from the server (all Database operations will be completed\n * offline).\n *\n * The client automatically maintains a persistent connection to the Database\n * server, which will remain active indefinitely and reconnect when\n * disconnected. However, the `goOffline()` and `goOnline()` methods may be used\n * to control the client connection in cases where a persistent connection is\n * undesirable.\n *\n * While offline, the client will no longer receive data updates from the\n * Database. However, all Database operations performed locally will continue to\n * immediately fire events, allowing your application to continue behaving\n * normally. Additionally, each operation performed locally will automatically\n * be queued and retried upon reconnection to the Database server.\n *\n * To reconnect to the Database and begin receiving remote events, see\n * `goOnline()`.\n *\n * @param db - The instance to disconnect.\n */\nexport function goOffline(db: Database): void {\n db = getModularInstance(db);\n db._checkNotDeleted('goOffline');\n repoInterrupt(db._repo);\n}\n\n/**\n * Reconnects to the server and synchronizes the offline Database state\n * with the server state.\n *\n * This method should be used after disabling the active connection with\n * `goOffline()`. Once reconnected, the client will transmit the proper data\n * and fire the appropriate events so that your client \"catches up\"\n * automatically.\n *\n * @param db - The instance to reconnect.\n */\nexport function goOnline(db: Database): void {\n db = getModularInstance(db);\n db._checkNotDeleted('goOnline');\n repoResume(db._repo);\n}\n\n/**\n * Logs debugging information to the console.\n *\n * @param enabled - Enables logging if `true`, disables logging if `false`.\n * @param persistent - Remembers the logging state between page refreshes if\n * `true`.\n */\nexport function enableLogging(enabled: boolean, persistent?: boolean);\n\n/**\n * Logs debugging information to the console.\n *\n * @param logger - A custom logger function to control how things get logged.\n */\nexport function enableLogging(logger: (message: string) => unknown);\n\nexport function enableLogging(\n logger: boolean | ((message: string) => unknown),\n persistent?: boolean\n): void {\n enableLoggingImpl(logger, persistent);\n}\n","/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport {\n _registerComponent,\n registerVersion,\n SDK_VERSION\n} from '@firebase/app';\nimport { Component, ComponentType } from '@firebase/component';\n\nimport { name, version } from '../package.json';\nimport { setSDKVersion } from '../src/core/version';\n\nimport { repoManagerDatabaseFromApp } from './api/Database';\n\nexport function registerDatabase(variant?: string): void {\n setSDKVersion(SDK_VERSION);\n _registerComponent(\n new Component(\n 'database',\n (container, { instanceIdentifier: url }) => {\n const app = container.getProvider('app').getImmediate()!;\n const authProvider = container.getProvider('auth-internal');\n const appCheckProvider = container.getProvider('app-check-internal');\n return repoManagerDatabaseFromApp(\n app,\n authProvider,\n appCheckProvider,\n url\n );\n },\n ComponentType.PUBLIC\n ).setMultipleInstances(true)\n );\n registerVersion(name, version, variant);\n // BUILD_TARGET will be replaced by values like esm2017, cjs2017, etc during the compilation\n registerVersion(name, version, '__BUILD_TARGET__');\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { PersistentConnection } from '../core/PersistentConnection';\nimport { RepoInfo } from '../core/RepoInfo';\nimport { Connection } from '../realtime/Connection';\n\nimport { repoManagerForceRestClient } from './Database';\n\nexport const DataConnection = PersistentConnection;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n(PersistentConnection.prototype as any).simpleListen = function (\n pathString: string,\n onComplete: (a: unknown) => void\n) {\n this.sendRequest('q', { p: pathString }, onComplete);\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n(PersistentConnection.prototype as any).echo = function (\n data: unknown,\n onEcho: (a: unknown) => void\n) {\n this.sendRequest('echo', { d: data }, onEcho);\n};\n\n// RealTimeConnection properties that we use in tests.\nexport const RealTimeConnection = Connection;\n\n/**\n * @internal\n */\nexport const hijackHash = function (newHash: () => string) {\n const oldPut = PersistentConnection.prototype.put;\n PersistentConnection.prototype.put = function (\n pathString,\n data,\n onComplete,\n hash\n ) {\n if (hash !== undefined) {\n hash = newHash();\n }\n oldPut.call(this, pathString, data, onComplete, hash);\n };\n return function () {\n PersistentConnection.prototype.put = oldPut;\n };\n};\n\nexport const ConnectionTarget = RepoInfo;\n\n/**\n * Forces the RepoManager to create Repos that use ReadonlyRestClient instead of PersistentConnection.\n * @internal\n */\nexport const forceRestClient = function (forceRestClient: boolean) {\n repoManagerForceRestClient(forceRestClient);\n};\n","/**\n * Firebase Realtime Database\n *\n * @packageDocumentation\n */\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Database } from './api/Database';\nimport { registerDatabase } from './register';\n\nexport * from './api';\n\nregisterDatabase();\n\ndeclare module '@firebase/component' {\n interface NameServiceMapping {\n 'database': Database;\n }\n}\n"],"names":["CONSTANTS","NODE_CLIENT","NODE_ADMIN","SDK_VERSION","assert","assertion","message","assertionError","Error","stringToByteArray$1","str","out","p","i","length","c","charCodeAt","byteArrayToString","bytes","pos","c1","String","fromCharCode","c2","c3","c4","u","join","base64","byteToCharMap_","charToByteMap_","byteToCharMapWebSafe_","charToByteMapWebSafe_","ENCODED_VALS_BASE","ENCODED_VALS","this","ENCODED_VALS_WEBSAFE","HAS_NATIVE_SUPPORT","atob","encodeByteArray","input","webSafe","Array","isArray","init_","byteToCharMap","output","byte1","haveByte2","byte2","haveByte3","byte3","outByte1","outByte2","outByte3","outByte4","push","encodeString","btoa","decodeString","decodeStringToByteArray","charToByteMap","charAt","haveByte4","byte4","DecodeBase64StringError","constructor","name","base64Encode","utf8Bytes","base64urlEncodeWithoutPadding","replace","base64Decode","e","console","error","deepCopy","value","deepExtend","undefined","target","source","Object","Date","dateValue","getTime","prop","hasOwnProperty","isValidKey","key","getGlobal","self","window","global","getDefaultsFromGlobal","__FIREBASE_DEFAULTS__","getDefaultsFromEnvVariable","process","defaultsJsonString","JSON","parse","getDefaultsFromCookie","document","match","cookie","decoded","getDefaults","info","getDefaultEmulatorHost","productName","_a","_b","emulatorHosts","getDefaultEmulatorHostnameAndPort","host","separatorIndex","lastIndexOf","port","parseInt","substring","getDefaultAppConfig","config","Deferred","reject","resolve","promise","Promise","wrapCallback","callback","catch","createMockUserToken","token","projectId","uid","header","alg","type","project","iat","sub","user_id","payload","assign","iss","aud","exp","auth_time","firebase","sign_in_provider","identities","signature","stringify","getUA","navigator","isMobileCordova","test","isReactNative","isNodeSdk","isIndexedDBAvailable","indexedDB","validateIndexedDBOpenable","preExist","DB_CHECK_NAME","request","open","onsuccess","result","close","deleteDatabase","onupgradeneeded","onerror","ERROR_NAME","FirebaseError","code","customData","super","setPrototypeOf","prototype","captureStackTrace","ErrorFactory","create","service","serviceName","errors","data","fullCode","template","replaceTemplate","fullMessage","PATTERN","_","jsonEval","decode","claims","parts","split","isValidFormat","isAdmin","contains","obj","call","safeGet","isEmpty","map","fn","contextObj","res","deepEqual","a","b","aKeys","keys","bKeys","k","includes","aProp","bProp","isObject","thing","querystring","querystringParams","params","entries","forEach","arrayVal","encodeURIComponent","Sha1","chain_","buf_","W_","pad_","inbuf_","total_","blockSize","reset","compress_","buf","offset","W","t","f","d","update","lengthMinusBlock","n","inbuf","digest","totalBits","j","errorPrefix","fnName","argName","stringToByteArray","high","low","stringLength","getModularInstance","_delegate","activeEffectScope","activeEffect","EffectScope","detached","_active","effects","cleanups","parent","index","scopes","active","run","currentEffectScope","on","off","stop","fromParent","l","last","pop","effectScope","recordEffectScope","effect","scope","getCurrentScope","onScopeDispose","ReactiveEffect","trigger","scheduler","deps","_dirtyLevel","_trackId","_runnings","_shouldSchedule","_depsLength","dirty","pauseTracking","dep","computed","triggerComputed","resetTracking","v","lastShouldTrack","shouldTrack","lastEffect","preCleanupEffect","postCleanupEffect","onStop","effect2","cleanupDepEffect","trackId","get","delete","size","cleanup","options","_effect","NOOP","extend","lazy","runner","bind","pauseScheduleStack","trackStack","pauseScheduling","resetScheduling","queueEffectSchedulers","shift","trackEffect","debuggerEventExtraInfo","set","oldDep","triggerEffects","dirtyLevel","tracking","allowRecurse","createDep","Map","targetMap","WeakMap","ITERATE_KEY","Symbol","MAP_KEY_ITERATE_KEY","track","depsMap","newValue","oldValue","oldTarget","values","newLength","Number","key2","isSymbol","isIntegerKey","isMap","getDepFromReactive","object","isNonTrackableKeys","makeMap","builtInSymbols","Set","getOwnPropertyNames","filter","arrayInstrumentations","createArrayInstrumentations","instrumentations","args","arr","toRaw","apply","BaseReactiveHandler","_isReadonly","_isShallow","receiver","isReadonly2","isShallow2","shallowReadonlyMap","readonlyMap","shallowReactiveMap","reactiveMap","getPrototypeOf","targetIsArray","hasOwn","Reflect","has","isRef","readonly","reactive","MutableReactiveHandler","isOldValueReadonly","isReadonly","isShallow","hadKey","hasChanged","deleteProperty","ownKeys","ReadonlyReactiveHandler","mutableHandlers","readonlyHandlers","shallowReactiveHandlers","shallowReadonlyHandlers","toShallow","getProto","rawTarget","rawKey","has2","wrap","toReadonly","toReactive","add","proto","get2","deleteEntry","clear","hadItems","createForEach","thisArg","observed","createIterableMethod","method","targetIsMap","isPair","iterator","isKeyOnly","innerIterator","next","done","createReadonlyMethod","createInstrumentations","mutableInstrumentations2","shallowInstrumentations2","readonlyInstrumentations2","shallowReadonlyInstrumentations2","iteratorMethods","mutableInstrumentations","readonlyInstrumentations","shallowInstrumentations","shallowReadonlyInstrumentations","createInstrumentationGetter","shallow","mutableCollectionHandlers","shallowCollectionHandlers","readonlyCollectionHandlers","shallowReadonlyCollectionHandlers","targetTypeMap","rawType","getTargetType","isExtensible","toRawType","createReactiveObject","shallowReactive","shallowReadonly","baseHandlers","collectionHandlers","proxyMap","existingProxy","targetType","proxy","Proxy","isReactive","isProxy","raw","markRaw","def","ComputedRefImpl","getter","_setter","isSSR","__v_isRef","_value","triggerRefValue","_cacheable","trackRefValue","_dirty","getterOrOptions","debugOptions","setter","onlyGetter","isFunction","cRef","ref2","newVal","r","ref","createRef","shallowRef","rawValue","RefImpl","__v_isShallow","_rawValue","useDirectValue","triggerRef","unref","toValue","shallowUnwrapHandlers","proxyRefs","objectWithRefs","CustomRefImpl","factory","_get","_set","customRef","toRefs","ret","propertyToRef","ObjectRefImpl","_object","_key","_defaultValue","val","GetterRefImpl","_getter","__v_isReadonly","toRef","defaultValue","arguments","TrackOpTypes","TriggerOpTypes","stack","warn$1","msg","instance","component","appWarnHandler","appContext","warnHandler","trace","getComponentTrace","callWithErrorHandling","toString","vnode","formatComponentName","warnArgs","formatTrace","warn","currentVNode","normalizedStack","recurseCount","parentInstance","logs","entry","formatTraceEntry","postfix","isRoot","props","formatProps","slice","formatProp","isString","assertNumber","ErrorCodes","ErrorTypeStrings$1","err","handleError","callWithAsyncErrorHandling","isPromise","throwInDev","contextVNode","cur","exposedInstance","errorInfo","errorCapturedHooks","ec","appErrorHandler","errorHandler","logError","isFlushing","isFlushPending","queue","flushIndex","pendingPostFlushCbs","activePostFlushCbs","postFlushIndex","resolvedPromise","currentFlushPromise","nextTick","then","findInsertionIndex","id","start","end","middle","middleJob","middleJobId","getId","pre","queueJob","job","splice","queueFlush","flushJobs","invalidateJob","indexOf","queuePostFlushCb","cb","flushPreFlushCbs","seen","flushPostFlushCbs","deduped","sort","Infinity","comparator","diff","devtools$1","buffer","devtoolsNotInstalled","setDevtoolsHook$1","hook","enabled","event","emit","HTMLElement","userAgent","replay","__VUE_DEVTOOLS_HOOK_REPLAY__","newHook","setTimeout","rawArgs","isUnmounted","EMPTY_OBJ","isModelListener","startsWith","modelArg","modifiersKey","number","trim","looseToNumber","handlerName","handler","toHandlerKey","camelize","hyphenate","onceHandler","emitted","normalizeEmitsOptions","comp","asMixin","cache","emitsCache","cached","emits","normalized","hasExtends","extendEmits","raw2","normalizedFromExtend","mixins","extends","isEmitListener","isOn","toLowerCase","currentRenderingInstance","currentScopeId","setCurrentRenderingInstance","prev","__scopeId","pushScopeId","popScopeId","withScopeId","_id","withCtx","ctx","isNonScopedSlot","_n","renderFnWithContext","_d","setBlockTracking","prevInstance","_c","renderComponentRoot","Component","withProxy","propsOptions","slots","attrs","render","renderCache","setupState","inheritAttrs","fallthroughAttrs","shapeFlag","proxyToUse","thisProxy","normalizeVNode","render2","getFunctionalFallthrough","blockStack","createVNode","Comment","root","some","filterModelListeners","cloneVNode","dirs","concat","transition","filterSingleRoot","children","recurse","singleRoot","child","isVNode","shouldUpdateComponent","prevVNode","nextVNode","optimized","prevProps","prevChildren","nextProps","nextChildren","patchFlag","emitsOptions","$stable","hasPropsChanged","dynamicProps","nextKeys","updateHOCHostEl","el","subTree","suspense","activeBranch","COMPONENTS","DIRECTIVES","resolveComponent","maybeSelfReference","resolveAsset","NULL_DYNAMIC_COMPONENT","for","resolveDynamicComponent","resolveDirective","warnMissing","currentInstance","selfName","getComponentName","capitalize","registry","isSuspense","__isSuspense","suspenseId","SuspenseImpl","n1","n2","container","anchor","parentComponent","parentSuspense","namespace","slotScopeIds","rendererInternals","mountSuspense","isInFallback","patchSuspense","hydrate","hydrateSuspense","createSuspenseBoundary","normalize","normalizeSuspenseChildren","Suspense","triggerEvent","eventListener","patch","o","createElement","hiddenContainer","pendingBranch","ssContent","ssFallback","setActiveBranch","um","unmount","newBranch","newFallback","isHydrating","isSameVNodeType","pendingId","timeout","fallback","m","move","parentNode","remove","parentSuspenseId","isSuspensible","isVNodeSuspensible","toNumber","initialAnchor","resume","sync","vnode2","parentComponent2","container2","delayEnter","mode","afterLeave","hasUnresolvedAncestor","fallbackVNode","namespace2","anchor2","mountFallback","registerDep","setupRenderEffect","isInPendingSuspense","hydratedEl","asyncDep","asyncSetupResult","asyncResolved","handleSetupResult","placeholder","parentSuspense2","doRemove","node","hydrateNode","isSlotChildren","normalizeSuspenseSlot","default","s","block","trackBlock","isBlockTreeEnabled","openBlock","currentBlock","closeBlock","singleChild","dynamicChildren","queueEffectWithSuspense","branch","suspensible","ssrContextKey","useSSRContext","inject","watchEffect","doWatch","watchPostEffect","flush","watchSyncEffect","INITIAL_WATCHER_VALUE","watch","immediate","deep","once","onTrack","onTrigger","_cb","unwatch","reactiveGetter","source2","traverse","forceTrigger","isMultiSource","onCleanup","baseGetter","ssrCleanup","isInSSRComponentSetup","__watcherHandles","fill","queuePostRenderEffect","instanceWatch","publicThis","createPathGetter","setCurrentInstance","path","segments","depth","isSet","isPlainObject","withDirectives","directives","getExposeProxy","bindings","dir","arg","modifiers","mounted","updated","invokeDirectiveHook","oldBindings","binding","leaveCbKey","enterCbKey","useTransitionState","state","isMounted","isLeaving","isUnmounting","leavingVNodes","onMounted","onBeforeUnmount","TransitionHookValidator","Function","BaseTransitionPropsValidators","appear","Boolean","persisted","onBeforeEnter","onEnter","onAfterEnter","onEnterCancelled","onBeforeLeave","onLeave","onAfterLeave","onLeaveCancelled","onBeforeAppear","onAppear","onAfterAppear","onAppearCancelled","BaseTransitionImpl","setup","getCurrentInstance","getTransitionRawChildren","hasFound","rawProps","emptyPlaceholder","innerChild","getKeepAliveChild","enterHooks","resolveTransitionHooks","setTransitionHooks","oldChild","oldInnerChild","leavingHooks","delayLeave","earlyRemove","delayedLeave","leavingVNodesCache","getLeavingNodesForType","BaseTransition","callHook","callAsyncHook","every","hook2","hooks","beforeEnter","leavingVNode","enter","afterHook","cancelHook","called","cancelled","leave","clone","isKeepAlive","keepComment","parentKey","keyedFragmentCount","Fragment","defineComponent","extraOptions","isAsyncWrapper","__asyncLoader","defineAsyncComponent","loader","loadingComponent","errorComponent","delay","onError","userOnError","resolvedComp","pendingRequest","retries","retry","load","thisRequest","userRetry","userFail","__esModule","toStringTag","__asyncResolved","createInnerComp","loaded","delayed","ce","__isKeepAlive","KeepAliveImpl","include","RegExp","exclude","max","sharedContext","renderer","current","_unmount","storageContainer","resetShapeFlag","pruneCache","pruneCacheEntry","activate","instance2","isDeactivated","invokeArrayFns","vnodeHook","onVnodeMounted","invokeVNodeHook","deactivate","da","onVnodeUnmounted","matches","pendingCacheKey","cacheSubtree","getInnerChild","onUpdated","rawVNode","cachedVNode","KeepAlive","pattern","isRegExp","onActivated","registerKeepAliveHook","onDeactivated","wrappedHook","__wdc","injectHook","injectToKeepAliveRoot","keepAliveRoot","injected","onUnmounted","prepend","__weh","unshift","createHook","lifecycle","onBeforeMount","onBeforeUpdate","onServerPrefetch","onRenderTriggered","onRenderTracked","onErrorCaptured","renderList","renderItem","from","item","createSlots","dynamicSlots","slot","renderSlot","noSlotted","isCE","validSlotContent","ensureValidVNode","rendered","createBlock","scopeId","vnodes","toHandlers","preserveCaseIfNecessary","getPublicInstance","isStatefulComponent","publicPropertiesMap","$","$el","$data","$props","$attrs","$slots","$refs","refs","$parent","$root","$emit","$options","resolveMergedOptions","$forceUpdate","$nextTick","$watch","hasSetupBinding","__isScriptSetup","PublicInstanceProxyHandlers","accessCache","normalizedProps","shouldCacheAccess","publicGetter","cssModule","globalProperties","__cssModules","defineProperty","descriptor","RuntimeCompiledPublicInstanceProxyHandlers","unscopables","isGloballyAllowed","defineProps","defineEmits","defineExpose","exposed","defineOptions","defineSlots","defineModel","withDefaults","defaults","useSlots","getContext","useAttrs","setupContext","createSetupContext","normalizePropsOrEmits","reduce","mergeDefaults","opt","skipFactory","mergeModels","createPropsRestProxy","excludedKeys","enumerable","withAsyncContext","getAwaitable","awaitable","unsetCurrentInstance","applyOptions","beforeCreate","dataOptions","computedOptions","methods","watchOptions","provide","provideOptions","injectOptions","created","beforeMount","beforeUpdate","activated","deactivated","beforeDestroy","beforeUnmount","destroyed","unmounted","renderTracked","renderTriggered","errorCaptured","serverPrefetch","expose","components","filters","checkDuplicateProperties","resolveInjections","methodHandler","configurable","createWatcher","provides","registerLifecycleHook","register","_hook","normalizeInject","h","base","extendsOptions","globalMixins","optionsCache","optionMergeStrategies","resolved","mergeOptions","to","strats","strat","internalOptionMergeStrats","mergeDataFn","mergeEmitsOrPropsOptions","mergeObjectOptions","mergeAsArray","mergeWatchOptions","mergeInject","merged","createAppContext","app","isNativeTag","NO","performance","compilerOptions","propsCache","uid$1","createAppAPI","rootComponent","rootProps","context","installedPlugins","WeakSet","_uid","_component","_props","_container","_context","_instance","version","use","plugin","install","mixin","directive","mount","rootContainer","isHydrate","__vue_app__","runWithContext","lastApp","currentApp","parentProvides","treatDefaultAsFactory","hasInjectionContext","internalObjectProto","createInternalObject","isInternalObject","initProps","isStateful","propsDefaults","setFullProps","updateProps","rawPrevProps","rawCurrentProps","hasAttrsChanged","kebabKey","resolvePropValue","propsToUpdate","camelizedKey","needCastKeys","rawCastValues","isReservedProp","camelKey","castValues","isAbsent","hasDefault","normalizePropsOptions","extendProps","EMPTY_ARR","normalizedKey","validatePropName","booleanIndex","getTypeIndex","stringIndex","getType","ctor","isSameType","expectedTypes","findIndex","isInternalKey","normalizeSlotValue","normalizeSlot","rawSlot","normalizeObjectSlots","rawSlots","_ctx","normalizeVNodeSlots","initSlots","updateSlots","needDeletionCheck","deletionComparisonTarget","setRef","rawRef","oldRawRef","isUnmount","refValue","owner","oldRef","_isString","_isRef","doSet","existing","hasMismatch","isSVGContainer","namespaceURI","tagName","isMathMLContainer","getContainerType","isComment","nodeType","createHydrationFunctions","mt","mountComponent","patchProp","createText","nextSibling","insert","createComment","hasChildNodes","__VUE_PROD_HYDRATION_MISMATCH_DETAILS__","_vnode","firstChild","isFragmentStart","onMismatch","handleMismatch","domType","nextNode","Text","isTemplateNode","replaceNode","content","Static","needToAdoptContent","staticCount","outerHTML","hydrateFragment","hydrateElement","locateClosingAnchor","previousSibling","lastChild","createTextVNode","hydrateChildren","forcePatch","vnodeHooks","needCallTransitionHooks","needTransition","innerHTML","textContent","hasWarned","propHasMismatch","endsWith","onClick","onVnodeBeforeMount","parentVNode","fragmentSlotScopeIds","isFragment","next2","newNode","oldNode","parentNode2","replaceChild","clientValue","mismatchType","mismatchKey","actual","expected","getAttribute","normalizeClass","isSetEqual","toClassSet","stringifyStyle","normalizeStyle","actualMap","toStyleMap","expectedMap","cssVars","getCssVars","isMapEqual","SVGElement","isKnownSvgAttr","isBooleanAttr","isKnownHtmlAttr","hasAttribute","includeBooleanAttr","isRenderableAttrValue","format","preSegment","postSegment","styleMap","initFeatureFlags","getGlobalThis","createRenderer","baseCreateRenderer","createHydrationRenderer","createHydrationFns","__VUE__","hostInsert","hostRemove","hostPatchProp","hostCreateElement","hostCreateText","hostCreateComment","setText","hostSetText","setElementText","hostSetElementText","hostParentNode","hostNextSibling","setScopeId","hostSetScopeId","insertStaticContent","hostInsertStaticContent","getNextHostNode","processText","processCommentNode","mountStaticNode","processFragment","processElement","processComponent","internals","moveStaticNode","removeStaticNode","mountElement","patchElement","is","mountChildren","resolveChildrenNamespace","unmountChildren","cloneIfMounted","oldProps","newProps","toggleRecurse","onVnodeBeforeUpdate","patchBlockChildren","patchChildren","patchProps","class","style","onVnodeUpdated","oldChildren","newChildren","fallbackContainer","oldVNode","newVNode","fragmentStartAnchor","fragmentEndAnchor","traverseStaticChildren","updateComponent","initialVNode","createComponentInstance","setupComponent","updateComponentPreRender","componentUpdateFn","bu","nonHydratedAsyncRoot","locateNonHydratedAsyncRoot","originNext","nextTree","prevTree","bm","isAsyncWrapperVNode","hydrateSubTree","scopedInitialVNode","prevShapeFlag","patchKeyedChildren","patchUnkeyedChildren","oldLength","commonLength","Math","min","nextChild","parentAnchor","l2","e1","e2","nextPos","s1","s2","keyToNewIndexMap","patched","toBePatched","moved","maxNewIndexSoFar","newIndexToOldIndexMap","prevChild","newIndex","increasingNewIndexSequence","getSequence","nextIndex","moveType","needTransition2","remove2","performLeave","shouldInvokeDirs","shouldInvokeVnodeHook","onVnodeBeforeUnmount","unmountComponent","removeFragment","performRemove","bum","mc","pc","pbc","createApp","currentNamespace","encoding","allowed","ch1","ch2","len","arrI","subComponent","isTeleport","__isTeleport","isTeleportDisabled","disabled","isTargetSVG","isTargetMathML","MathMLElement","resolveTarget","select","targetSelector","TeleportImpl","querySelector","mainAnchor","targetAnchor","wasDisabled","currentContainer","currentAnchor","moveTeleport","nextTarget","updateCssVars","shouldRemove","hydrateTeleport","isReorder","targetNode","_lpa","Teleport","ut","setAttribute","disableTracking","vnodeArgsTransformer","setupBlock","createElementBlock","createBaseVNode","__v_isVNode","transformVNodeArgs","transformer","normalizeKey","normalizeRef","ref_key","ref_for","isBlockNode","needFullChildrenNormalization","__v_skip","normalizeChildren","_createVNode","cloned","isClassComponent","__vccOpts","guardReactiveProps","klass","extraProps","mergeRef","cloneTransition","mergedProps","mergeProps","text","flag","createStaticVNode","numberOfNodes","createCommentVNode","asBlock","memo","slotFlag","toMerge","incoming","emptyAppContext","exposeProxy","attrsProxy","slotsProxy","bc","rtg","rtc","sp","internalSetCurrentInstance","setInSSRSetupState","g","registerGlobalSetter","setters","compile","installWithProxy","setupResult","setupStatefulComponent","resolvedResult","finishComponentSetup","__ssrInlineRender","ssrRender","registerRuntimeCompiler","_compile","_rc","isRuntimeOnly","skipOptions","isCustomElement","delimiters","componentCompilerOptions","finalCompilerOptions","attrsProxyHandlers","classifyRE","classify","toUpperCase","includeInferred","displayName","__name","__file","inferFromRegistry","computed$1","useModel","camelizedName","hyphenatedName","localValue","propValue","modifierKey","i2","propsOrChildren","initCustomFormatter","withMemo","isMemoSame","ErrorTypeStrings","devtools","setDevtoolsHook","_ssrUtils","ssrUtils","resolveFilter","compatUtils","DeprecationTypes","svgNS","mathmlNS","doc","templateContainer","nodeOps","insertBefore","removeChild","tag","createElementNS","multiple","createTextNode","nodeValue","selector","before","cloneNode","wrapper","appendChild","TRANSITION","ANIMATION","vtcKey","Transition","resolveTransitionProps","DOMTransitionPropsValidators","css","duration","enterFromClass","enterActiveClass","enterToClass","appearFromClass","appearActiveClass","appearToClass","leaveFromClass","leaveActiveClass","leaveToClass","TransitionPropsValidators","h2","hasExplicitCallback","baseProps","durations","normalizeDuration","enterDuration","leaveDuration","finishEnter","isAppear","removeTransitionClass","finishLeave","_isLeaving","makeEnterHook","nextFrame","addTransitionClass","whenTransitionEnds","forceReflow","NumberOf","cls","classList","_vtc","requestAnimationFrame","endId","expectedType","explicitTimeout","_endId","resolveIfNotStale","propCount","getTransitionInfo","endEvent","ended","removeEventListener","onEnd","addEventListener","styles","getComputedStyle","getStyleProperties","transitionDelays","transitionDurations","transitionTimeout","getTimeout","animationDelays","animationDurations","animationTimeout","hasTransform","delays","toMs","body","offsetHeight","patchClass","isSVG","transitionClasses","removeAttribute","className","vShowOriginalDisplay","vShowHidden","vShow","display","setDisplay","initVShowForSSR","getSSRProps","CSS_VAR_TEXT","useCssVars","updateTeleports","vars","querySelectorAll","setVarsOnNode","setVars","setVarsOnVNode","ob","MutationObserver","observe","childList","disconnect","cssText","setProperty","displayRE","patchStyle","isCssString","hasControlledDisplay","prevStyle","setStyle","cssVarText","importantRE","prefixed","autoPrefix","prefixes","prefixCache","rawName","xlinkNS","patchAttr","removeAttributeNS","setAttributeNS","isBoolean","isSpecialBooleanAttr","patchDOMProp","needRemove","veiKey","patchEvent","prevValue","nextValue","invokers","existingInvoker","parseName","invoker","createInvoker","optionsModifierRE","cachedNow","getNow","now","initialValue","_vts","attached","patchStopImmediatePropagation","originalStop","stopImmediatePropagation","_stopped","isNativeOn","shouldSetAsProp","_trueValue","_falseValue","defineCustomElement","hydrate2","Comp","VueCustomElement","VueElement","initialProps","defineSSRCustomElement","BaseClass","_def","_connected","_resolved","_numberProps","_ob","shadowRoot","attachShadow","_resolveProps","connectedCallback","_update","_resolveDef","disconnectedCallback","attributes","_setAttr","mutations","attributeName","isAsync","numberProps","camelize$1","_applyStyles","asyncDef","declaredPropKeys","_setProp","_getProp","shouldReflect","shouldUpdate","dispatch","dispatchEvent","CustomEvent","detail","useCssModule","modules","mod","positionMap","newPositionMap","moveCbKey","TransitionGroupImpl","moveClass","hasCSSTransform","callPendingCbs","recordPosition","movedChildren","applyTranslation","transform","webkitTransform","transitionDuration","propertyName","cssTransitionProps","Element","getBoundingClientRect","TransitionGroup","oldPos","newPos","dx","left","dy","top","getModelAssigner","onCompositionStart","composing","onCompositionEnd","Event","assignKey","vModelText","castToNumber","domValue","elValue","activeElement","vModelCheckbox","modelValue","_modelValue","elementValue","getValue","checked","looseIndexOf","found","filtered","getCheckboxValue","setChecked","looseEqual","vModelRadio","vModelSelect","isSetModel","selectedVal","selected","_assigning","setSelected","_binding","isMultiple","isArrayValue","option","optionValue","optionType","selectedIndex","vModelDynamic","callModelHook","resolveDynamicModel","modelToUse","initVModelForSSR","systemModifiers","modifierGuards","stopPropagation","prevent","preventDefault","currentTarget","ctrl","ctrlKey","shiftKey","alt","altKey","meta","metaKey","button","right","exact","withModifiers","_withMods","cacheKey","guard","keyNames","esc","space","up","down","withKeys","_withKeys","eventKey","rendererOptions","enabledHydration","ensureRenderer","ensureHydrationRenderer","containerOrSelector","normalizeContainer","resolveRootNamespace","createSSRApp","ssrDirectiveInitialized","initDirectivesForSSR","expectsLowerCase","toTypeString","isDate","objectToString","cacheStringFunction","hit","camelizeRE","hyphenateRE","fns","writable","parseFloat","isNaN","NaN","_globalThis","globalThis","GLOBALS_ALLOWED","parseStringStyle","listDelimiterRE","propertyDelimiterRE","styleCommentRE","tmp","normalizeProps","specialBooleanAttrs","looseCompareArrays","equal","aValidType","bValidType","aKeysCount","bKeysCount","aHasKey","bHasKey","toDisplayString","replacer","val2","stringifySymbol","description","bottom","auto","basePlacements","clippingParents","viewport","popper","reference","variationPlacements","acc","placement","placements","beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite","modifierPhases","getNodeName","element","nodeName","getWindow","ownerDocument","defaultView","isElement","OwnElement","isHTMLElement","isShadowRoot","ShadowRoot","applyStyles","_ref","elements","_ref2","initialStyles","position","strategy","margin","arrow","styleProperties","property","attribute","phase","requires","getBasePlacement","round","getUAString","uaData","userAgentData","brands","brand","isLayoutViewport","includeScale","isFixedStrategy","clientRect","scaleX","scaleY","offsetWidth","width","height","visualViewport","addVisualOffsets","x","offsetLeft","y","offsetTop","getLayoutRect","abs","rootNode","getRootNode","isSameNode","isTableElement","getDocumentElement","documentElement","getParentNode","assignedSlot","getTrueOffsetParent","offsetParent","getContainingBlock","isFirefox","isIE","elementCss","currentNode","perspective","contain","willChange","getOffsetParent","getMainAxisFromPlacement","within","mathMax","mathMin","withinMaxClamp","getFreshSideObject","mergePaddingObject","paddingObject","expandToHashMap","hashMap","toPaddingObject","padding","rects","_state$modifiersData$","arrowElement","popperOffsets","modifiersData","basePlacement","axis","isVertical","arrowRect","minProp","maxProp","endDiff","startDiff","arrowOffsetParent","clientSize","clientHeight","clientWidth","centerToReference","center","axisProp","centerOffset","_options$element","requiresIfExists","getVariation","unsetSides","roundOffsetsByDPR","win","dpr","devicePixelRatio","mapToStyles","_Object$assign2","popperRect","variation","offsets","gpuAcceleration","adaptive","roundOffsets","isFixed","_offsets$x","_offsets$y","_ref3","hasX","hasY","sideX","sideY","heightProp","widthProp","offsetY","offsetX","_Object$assign","commonStyles","_ref4","computeStyles","_ref5","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","passive","_options$scroll","scroll","_options$resize","resize","scrollParents","scrollParent","hash","getOppositePlacement","matched","getOppositeVariationPlacement","getWindowScroll","scrollLeft","pageXOffset","scrollTop","pageYOffset","getWindowScrollBarX","getViewportRect","html","layoutViewport","getDocumentRect","_element$ownerDocumen","winScroll","scrollWidth","scrollHeight","direction","isScrollParent","_getComputedStyle","overflow","overflowX","overflowY","getScrollParent","listScrollParents","list","isBody","updatedList","rectToClientRect","rect","getInnerBoundingClientRect","clientTop","clientLeft","getClientRectFromMixedType","clippingParent","getClippingParents","canEscapeClipping","clipperElement","getClippingRect","boundary","rootBoundary","mainClippingParents","firstClippingParent","clippingRect","accRect","computeOffsets","commonX","commonY","mainAxis","detectOverflow","_options","_options$placement","_options$strategy","_options$boundary","_options$rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","altContext","clippingClientRect","contextElement","referenceClientRect","popperClientRect","elementClientRect","overflowOffsets","offsetData","multiply","computeAutoPlacement","flipVariations","_options$allowedAutoP","allowedAutoPlacements","allPlacements","allowedPlacements","overflows","getExpandedFallbackPlacements","oppositePlacement","flip","_skip","_options$mainAxis","checkMainAxis","_options$altAxis","altAxis","checkAltAxis","specifiedFallbackPlacements","fallbackPlacements","_options$flipVariatio","preferredPlacement","isBasePlacement","referenceRect","checksMap","makeFallbackChecks","firstFittingPlacement","_basePlacement","isStartVariation","mainVariationSide","altVariationSide","checks","check","numberOfChecks","_loop","_i","fittingPlacement","find","_ret","getSideOffsets","preventedOffsets","isAnySideFullyClipped","side","hide","preventOverflow","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","distanceAndSkiddingToXY","invertDistance","skidding","distance","_options$offset","_data$state$placement","getAltAxis","_options$tether","tether","_options$tetherOffset","tetherOffset","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","_offsetModifierState$","mainSide","altSide","additive","minLen","maxLen","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","clientOffset","offsetModifierValue","tetherMin","tetherMax","preventedOffset","_offsetModifierState$2","_mainSide","_altSide","_offset","_len","_min","_max","isOriginSide","_offsetModifierValue","_tetherMin","_tetherMax","_preventedOffset","getHTMLElementScroll","getNodeScroll","isElementScaled","getCompositeRect","elementOrVirtualElement","isOffsetParentAnElement","offsetParentIsScaled","order","visited","modifier","depModifier","orderModifiers","orderedModifiers","debounce","pending","mergeByName","DEFAULT_OPTIONS","areValidElements","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","effectCleanupFns","isDestroyed","setOptions","setOptionsAction","cleanupModifierEffects","runModifierEffects","forceUpdate","_state$elements","_state$orderedModifie","_state$orderedModifie2","destroy","_ref$options","cleanupFn","noopFn","onFirstUpdate","createPopper","eventListeners","elementMap","Data","instanceMap","MAX_UID","MILLISECONDS_MULTIPLIER","TRANSITION_END","parseSelector","CSS","escape","toType","getUID","prefix","floor","random","getElementById","getTransitionDurationFromElement","transitionDelay","floatTransitionDuration","floatTransitionDelay","triggerTransitionEnd","jquery","getElement","isVisible","getClientRects","elementIsVisible","getPropertyValue","closedDetails","closest","summary","isDisabled","Node","ELEMENT_NODE","findShadowRoot","noop","reflow","getjQuery","jQuery","DOMContentLoadedCallbacks","onDOMContentLoaded","readyState","isRTL","defineJQueryPlugin","NAME","JQUERY_NO_CONFLICT","jQueryInterface","Constructor","noConflict","execute","possibleCallback","executeAfterTransition","transitionElement","waitForTransition","durationPadding","emulatedDuration","getNextActiveElement","shouldGetNext","isCycleAllowed","listLength","namespaceRegex","stripNameRegex","stripUidRegex","eventRegistry","uidEvent","customEvents","mouseenter","mouseleave","nativeEvents","makeEventUid","getElementEvents","bootstrapHandler","hydrateObj","delegateTarget","oneOff","EventHandler","bootstrapDelegationHandler","domElements","domElement","findHandler","events","callable","delegationSelector","normalizeParameters","originalTypeEvent","delegationFunction","isDelegated","typeEvent","getTypeEvent","addHandler","wrapFunction","relatedTarget","handlers","previousFunction","removeHandler","removeNamespacedHandlers","storeElementEvent","handlerKey","one","inNamespace","isNamespace","elementEvent","keyHandlers","jQueryEvent","bubbles","nativeDispatch","defaultPrevented","isPropagationStopped","isImmediatePropagationStopped","isDefaultPrevented","evt","cancelable","_unused","normalizeData","decodeURIComponent","normalizeDataKey","chr","Manipulator","setDataAttribute","removeDataAttribute","getDataAttributes","bsKeys","dataset","pureKey","getDataAttribute","Config","Default","DefaultType","_getConfig","_mergeConfigObj","_configAfterMerge","_typeCheckConfig","jsonConfig","configTypes","valueType","TypeError","VERSION","BaseComponent","_element","_config","DATA_KEY","dispose","EVENT_KEY","_queueCallback","isAnimated","getInstance","getOrCreateInstance","eventName","getSelector","hrefAttribute","sel","SelectorEngine","findOne","parents","ancestor","previous","previousElementSibling","nextElementSibling","focusableChildren","focusables","getSelectorFromElement","getElementFromSelector","getMultipleElementsFromSelector","enableDismissTrigger","clickEvent","NAME$f","DATA_KEY$a","EVENT_KEY$b","EVENT_CLOSE","EVENT_CLOSED","CLASS_NAME_FADE$5","CLASS_NAME_SHOW$8","Alert","closeEvent","_destroyElement","each","NAME$e","DATA_KEY$9","EVENT_KEY$a","DATA_API_KEY$6","CLASS_NAME_ACTIVE$3","SELECTOR_DATA_TOGGLE$5","EVENT_CLICK_DATA_API$6","Button","toggle","NAME$d","EVENT_KEY$9","EVENT_TOUCHSTART","EVENT_TOUCHMOVE","EVENT_TOUCHEND","EVENT_POINTERDOWN","EVENT_POINTERUP","POINTER_TYPE_TOUCH","POINTER_TYPE_PEN","CLASS_NAME_POINTER_EVENT","SWIPE_THRESHOLD","Default$c","endCallback","leftCallback","rightCallback","DefaultType$c","Swipe","isSupported","_deltaX","_supportPointerEvents","PointerEvent","_initEvents","_start","_eventIsPointerPenTouch","clientX","touches","_end","_handleSwipe","_move","absDeltaX","pointerType","maxTouchPoints","NAME$c","DATA_KEY$8","EVENT_KEY$8","DATA_API_KEY$5","ARROW_LEFT_KEY$1","ARROW_RIGHT_KEY$1","TOUCHEVENT_COMPAT_WAIT","ORDER_NEXT","ORDER_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","EVENT_SLIDE","EVENT_SLID","EVENT_KEYDOWN$1","EVENT_MOUSEENTER$1","EVENT_MOUSELEAVE$1","EVENT_DRAG_START","EVENT_LOAD_DATA_API$3","EVENT_CLICK_DATA_API$5","CLASS_NAME_CAROUSEL","CLASS_NAME_ACTIVE$2","CLASS_NAME_SLIDE","CLASS_NAME_END","CLASS_NAME_START","CLASS_NAME_NEXT","CLASS_NAME_PREV","SELECTOR_ACTIVE","SELECTOR_ITEM","SELECTOR_ACTIVE_ITEM","SELECTOR_ITEM_IMG","SELECTOR_INDICATORS","SELECTOR_DATA_SLIDE","SELECTOR_DATA_RIDE","KEY_TO_DIRECTION","Default$b","interval","keyboard","pause","ride","touch","DefaultType$b","Carousel","_interval","_activeElement","_isSliding","touchTimeout","_swipeHelper","_indicatorsElement","_addEventListeners","cycle","_slide","nextWhenVisible","hidden","_clearInterval","_updateInterval","setInterval","_maybeEnableCycle","items","_getItems","activeIndex","_getItemIndex","_getActive","defaultInterval","_keydown","_addTouchEventListeners","img","endCallBack","clearTimeout","swipeConfig","_directionToOrder","_setActiveIndicatorElement","activeIndicator","newActiveIndicator","elementInterval","isNext","nextElement","nextElementIndex","_orderToDirection","slideEvent","isCycling","directionalClassName","orderClassName","completeCallBack","_isAnimated","clearInterval","carousel","slideIndex","carousels","NAME$b","DATA_KEY$7","EVENT_KEY$7","DATA_API_KEY$4","EVENT_SHOW$6","EVENT_SHOWN$6","EVENT_HIDE$6","EVENT_HIDDEN$6","EVENT_CLICK_DATA_API$4","CLASS_NAME_SHOW$7","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","CLASS_NAME_COLLAPSED","CLASS_NAME_DEEPER_CHILDREN","CLASS_NAME_HORIZONTAL","WIDTH","HEIGHT","SELECTOR_ACTIVES","SELECTOR_DATA_TOGGLE$4","Default$a","DefaultType$a","Collapse","_isTransitioning","_triggerArray","toggleList","elem","filterElement","foundElement","_initializeChildren","_addAriaAndCollapsedClass","_isShown","show","activeChildren","_getFirstLevelChildren","startEvent","activeInstance","dimension","_getDimension","complete","capitalizedDimension","scrollSize","triggerArray","isOpen","NAME$a","DATA_KEY$6","EVENT_KEY$6","DATA_API_KEY$3","ESCAPE_KEY$2","TAB_KEY$1","ARROW_UP_KEY$1","ARROW_DOWN_KEY$1","RIGHT_MOUSE_BUTTON","EVENT_HIDE$5","EVENT_HIDDEN$5","EVENT_SHOW$5","EVENT_SHOWN$5","EVENT_CLICK_DATA_API$3","EVENT_KEYDOWN_DATA_API","EVENT_KEYUP_DATA_API","CLASS_NAME_SHOW$6","CLASS_NAME_DROPUP","CLASS_NAME_DROPEND","CLASS_NAME_DROPSTART","CLASS_NAME_DROPUP_CENTER","CLASS_NAME_DROPDOWN_CENTER","SELECTOR_DATA_TOGGLE$3","SELECTOR_DATA_TOGGLE_SHOWN","SELECTOR_MENU","SELECTOR_NAVBAR","SELECTOR_NAVBAR_NAV","SELECTOR_VISIBLE_ITEMS","PLACEMENT_TOP","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","PLACEMENT_TOPCENTER","PLACEMENT_BOTTOMCENTER","Default$9","autoClose","popperConfig","DefaultType$9","Dropdown","_popper","_parent","_menu","_inNavbar","_detectNavbar","showEvent","_createPopper","focus","_completeHide","hideEvent","Popper","referenceElement","_getPopperConfig","_getPlacement","parentDropdown","isEnd","_getOffset","popperData","defaultBsPopperConfig","_selectMenuItem","clearMenus","openToggles","composedPath","isMenuTarget","dataApiKeydownHandler","isInput","isEscapeEvent","isUpOrDownEvent","getToggleButton","NAME$9","CLASS_NAME_FADE$4","CLASS_NAME_SHOW$5","EVENT_MOUSEDOWN","Default$8","clickCallback","rootElement","DefaultType$8","Backdrop","_isAppended","_append","_getElement","_emulateAnimation","backdrop","append","NAME$8","DATA_KEY$5","EVENT_KEY$5","EVENT_FOCUSIN$2","EVENT_KEYDOWN_TAB","TAB_KEY","TAB_NAV_FORWARD","TAB_NAV_BACKWARD","Default$7","autofocus","trapElement","DefaultType$7","FocusTrap","_isActive","_lastTabNavDirection","_handleFocusin","_handleKeydown","SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","PROPERTY_PADDING","PROPERTY_MARGIN","ScrollBarHelper","getWidth","documentWidth","innerWidth","_disableOverFlow","_setElementAttributes","calculatedValue","_resetElementAttributes","isOverflowing","_saveInitialAttribute","styleProperty","scrollbarWidth","manipulationCallBack","_applyManipulationCallback","actualValue","removeProperty","callBack","NAME$7","DATA_KEY$4","EVENT_KEY$4","DATA_API_KEY$2","ESCAPE_KEY$1","EVENT_HIDE$4","EVENT_HIDE_PREVENTED$1","EVENT_HIDDEN$4","EVENT_SHOW$4","EVENT_SHOWN$4","EVENT_RESIZE$1","EVENT_CLICK_DISMISS","EVENT_MOUSEDOWN_DISMISS","EVENT_KEYDOWN_DISMISS$1","EVENT_CLICK_DATA_API$2","CLASS_NAME_OPEN","CLASS_NAME_FADE$3","CLASS_NAME_SHOW$4","CLASS_NAME_STATIC","OPEN_SELECTOR$1","SELECTOR_DIALOG","SELECTOR_MODAL_BODY","SELECTOR_DATA_TOGGLE$2","Default$6","DefaultType$6","Modal","_dialog","_backdrop","_initializeBackDrop","_focustrap","_initializeFocusTrap","_scrollBar","_adjustDialog","_showElement","_hideModal","handleUpdate","modalBody","transitionComplete","_triggerBackdropTransition","event2","_resetAdjustments","isModalOverflowing","initialOverflowY","isBodyOverflowing","paddingLeft","paddingRight","alreadyOpen","NAME$6","DATA_KEY$3","EVENT_KEY$3","DATA_API_KEY$1","EVENT_LOAD_DATA_API$2","ESCAPE_KEY","CLASS_NAME_SHOW$3","CLASS_NAME_SHOWING$1","CLASS_NAME_HIDING","CLASS_NAME_BACKDROP","OPEN_SELECTOR","EVENT_SHOW$3","EVENT_SHOWN$3","EVENT_HIDE$3","EVENT_HIDE_PREVENTED","EVENT_HIDDEN$3","EVENT_RESIZE","EVENT_CLICK_DATA_API$1","EVENT_KEYDOWN_DISMISS","SELECTOR_DATA_TOGGLE$1","Default$5","DefaultType$5","Offcanvas","blur","completeCallback","ARIA_ATTRIBUTE_PATTERN","DefaultAllowlist","area","br","col","dd","div","dl","dt","em","hr","h1","h3","h4","h5","h6","li","ol","small","span","sup","strong","ul","uriAttributes","SAFE_URL_PATTERN","allowedAttribute","allowedAttributeList","attributeRegex","regex","sanitizeHtml","unsafeHtml","allowList","sanitizeFunction","domParser","DOMParser","createdDocument","parseFromString","elementName","attributeList","allowedAttributes","NAME$5","Default$4","extraClass","sanitize","sanitizeFn","DefaultType$4","DefaultContentType","TemplateFactory","getContent","_resolvePossibleFunction","hasContent","changeContent","_checkContent","toHtml","templateWrapper","_maybeSanitize","_setContent","templateElement","_putElementInTemplate","NAME$4","DISALLOWED_ATTRIBUTES","CLASS_NAME_FADE$2","CLASS_NAME_MODAL","CLASS_NAME_SHOW$2","SELECTOR_TOOLTIP_INNER","SELECTOR_MODAL","EVENT_MODAL_HIDE","TRIGGER_HOVER","TRIGGER_FOCUS","TRIGGER_CLICK","TRIGGER_MANUAL","EVENT_HIDE$2","EVENT_HIDDEN$2","EVENT_SHOW$2","EVENT_SHOWN$2","EVENT_INSERTED","EVENT_CLICK$1","EVENT_FOCUSIN$1","EVENT_FOCUSOUT$1","EVENT_MOUSEENTER","EVENT_MOUSELEAVE","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","Default$3","animation","customClass","title","DefaultType$3","Tooltip","_isEnabled","_timeout","_isHovered","_activeTrigger","_templateFactory","_newContent","tip","_setListeners","_fixTitle","enable","disable","toggleEnabled","click","_leave","_enter","_hideModalHandler","_disposePopper","_isWithContent","isInTheDom","_getTipElement","_isWithActiveTrigger","_getTitle","_createTipElement","_getContentForTemplate","_getTemplateFactory","tipId","setContent","_initializeOnDelegatedTarget","_getDelegateConfig","attachment","triggers","eventIn","eventOut","_setTimeout","dataAttributes","dataAttribute","NAME$3","SELECTOR_TITLE","SELECTOR_CONTENT","Default$2","DefaultType$2","Popover","_getContent","NAME$2","DATA_KEY$2","EVENT_KEY$2","DATA_API_KEY","EVENT_ACTIVATE","EVENT_CLICK","EVENT_LOAD_DATA_API$1","CLASS_NAME_DROPDOWN_ITEM","CLASS_NAME_ACTIVE$1","SELECTOR_DATA_SPY","SELECTOR_TARGET_LINKS","SELECTOR_NAV_LIST_GROUP","SELECTOR_NAV_LINKS","SELECTOR_NAV_ITEMS","SELECTOR_LIST_ITEMS","SELECTOR_LINK_ITEMS","SELECTOR_DROPDOWN","SELECTOR_DROPDOWN_TOGGLE$1","Default$1","rootMargin","smoothScroll","threshold","DefaultType$1","ScrollSpy","_targetLinks","_observableSections","_rootElement","_activeTarget","_observer","_previousScrollData","visibleEntryTop","parentScrollTop","refresh","_initializeTargetsAndObservables","_maybeEnableSmoothScroll","_getNewObserver","section","observableSection","scrollTo","behavior","IntersectionObserver","_observerCallback","targetElement","_process","userScrollsDown","isIntersecting","_clearActiveClass","entryIsLowerThanPrevious","targetLinks","decodeURI","_activateParents","listGroup","activeNodes","spy","NAME$1","DATA_KEY$1","EVENT_KEY$1","EVENT_HIDE$1","EVENT_HIDDEN$1","EVENT_SHOW$1","EVENT_SHOWN$1","EVENT_CLICK_DATA_API","EVENT_KEYDOWN","EVENT_LOAD_DATA_API","ARROW_LEFT_KEY","ARROW_RIGHT_KEY","ARROW_UP_KEY","ARROW_DOWN_KEY","HOME_KEY","END_KEY","CLASS_NAME_ACTIVE","CLASS_NAME_FADE$1","CLASS_NAME_SHOW$1","CLASS_DROPDOWN","SELECTOR_DROPDOWN_TOGGLE","SELECTOR_DROPDOWN_MENU","NOT_SELECTOR_DROPDOWN_TOGGLE","SELECTOR_TAB_PANEL","SELECTOR_OUTER","SELECTOR_INNER","SELECTOR_DATA_TOGGLE","SELECTOR_INNER_ELEM","SELECTOR_DATA_TOGGLE_ACTIVE","Tab","_setInitialAttributes","_getChildren","innerElem","_elemIsActive","_getActiveElem","_deactivate","_activate","relatedElem","_toggleDropDown","nextActiveElement","preventScroll","_setAttributeIfNotExists","_setInitialAttributesOnChild","_getInnerElement","isActive","outerElem","_getOuterElement","_setInitialAttributesOnTargetPanel","EVENT_MOUSEOVER","EVENT_MOUSEOUT","EVENT_FOCUSIN","EVENT_FOCUSOUT","EVENT_HIDE","EVENT_HIDDEN","EVENT_SHOW","EVENT_SHOWN","CLASS_NAME_FADE","CLASS_NAME_HIDE","CLASS_NAME_SHOW","CLASS_NAME_SHOWING","autohide","Toast","_hasMouseInteraction","_hasKeyboardInteraction","_clearTimeout","_maybeScheduleHide","isShown","_onInteraction","isInteracting","exports","sfc","module","kindOf","kindOfTest","typeOfTest","isUndefined","isBuffer","isArrayBuffer","isArrayBufferView","ArrayBuffer","isView","isNumber","isFile","isBlob","isFileList","isStream","pipe","isFormData","kind","FormData","isURLSearchParams","isReadableStream","isRequest","isResponse","isHeaders","allOwnKeys","findKey","_global","isContextDefined","merge","caseless","assignValue","targetKey","stripBOM","inherits","superConstructor","descriptors","toFlatObject","sourceObj","destObj","propFilter","searchString","lastIndex","toArray","isTypedArray","TypedArray","Uint8Array","forEachEntry","generator","pair","matchAll","regExp","exec","isHTMLForm","toCamelCase","p1","p2","reduceDescriptors","reducer","getOwnPropertyDescriptors","reducedDescriptors","defineProperties","freezeMethods","toObjectSet","arrayOrString","delimiter","define","toFiniteNumber","isFinite","ALPHA","DIGIT","ALPHABET","ALPHA_DIGIT","generateString","alphabet","isSpecCompliantForm","toJSONObject","visit","reducedValue","isAsyncFn","isThenable","utils$1","hasOwnProp","AxiosError","response","toJSON","fileName","lineNumber","columnNumber","status","prototype$1","customProps","axiosError","cause","httpAdapter","isVisitable","removeBrackets","renderKey","dots","isFlatArray","predicates","toFormData","formData","metaTokens","indexes","visitor","defaultVisitor","_Blob","Blob","useBlob","convertValue","toISOString","Buffer","exposedHelpers","build","encode$1","charMap","AxiosURLSearchParams","_pairs","encode","buildURL","url","_encode","serializeFn","serialize","serializedParams","hashmarkIndex","encoder","InterceptorManager","fulfilled","rejected","synchronous","runWhen","eject","InterceptorManager$1","transitionalDefaults","silentJSONParsing","forcedJSONParsing","clarifyTimeoutError","URLSearchParams$1","URLSearchParams","FormData$1","Blob$1","platform$1","isBrowser","classes","protocols","hasBrowserEnv","hasStandardBrowserEnv","product","hasStandardBrowserWebWorkerEnv","WorkerGlobalScope","importScripts","origin","location","href","utils","freeze","__proto__","platform","toURLEncodedForm","helpers","isNode","parsePropPath","arrayToObject","formDataToJSON","buildPath","isNumericKey","isLast","stringifySafely","parser","transitional","adapter","transformRequest","headers","contentType","getContentType","hasJSONContentType","isObjectPayload","setContentType","formSerializer","_FormData","env","transformResponse","JSONRequested","responseType","strictJSONParsing","ERR_BAD_RESPONSE","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","common","defaults$1","ignoreDuplicateOf","parseHeaders","rawHeaders","parsed","line","$internals","normalizeHeader","normalizeValue","parseTokens","tokens","tokensRE","isValidHeaderName","matchHeaderValue","isHeaderNameFilter","formatHeader","w","char","buildAccessors","accessorName","methodName","arg1","arg2","arg3","AxiosHeaders","valueOrRewrite","rewrite","setHeader","_header","_rewrite","lHeader","setHeaders","matcher","deleted","deleteHeader","targets","asStrings","first","accessor","accessors","defineAccessor","mapped","headerValue","AxiosHeaders$1","transformData","isCancel","__CANCEL__","CanceledError","ERR_CANCELED","settle","ERR_BAD_REQUEST","parseProtocol","speedometer","samplesCount","timestamps","firstSampleTS","head","tail","chunkLength","startedAt","bytesCount","passed","throttle","freq","timestamp","timer","force","progressEventReducer","listener","isDownloadStream","bytesNotified","_speedometer","total","lengthComputable","progressBytes","rate","inRange","progress","estimated","isURLSameOrigin","msie","urlParsingNode","originURL","resolveURL","protocol","search","hostname","pathname","requestURL","cookies","expires","domain","secure","toGMTString","isAbsoluteURL","combineURLs","baseURL","relativeURL","buildFullPath","requestedURL","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","paramsSerializer","timeoutMessage","withCredentials","withXSRFToken","onUploadProgress","onDownloadProgress","decompress","beforeRedirect","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding","configValue","resolveConfig","newConfig","auth","username","password","unescape","xsrfValue","isXHRAdapterSupported","XMLHttpRequest","xhrAdapter","requestData","requestHeaders","onCanceled","unsubscribe","signal","onloadend","responseHeaders","getAllResponseHeaders","responseData","responseText","statusText","onreadystatechange","responseURL","onabort","ECONNABORTED","ERR_NETWORK","ontimeout","timeoutErrorMessage","ETIMEDOUT","setRequestHeader","upload","cancel","abort","subscribe","aborted","send","composeSignals","signals","controller","AbortController","reason","composeSignals$1","streamChunk","chunk","chunkSize","byteLength","readBytes","async","iterable","trackStream","stream","onProgress","onFinish","ReadableStream","pull","enqueue","return","highWaterMark","fetchProgressDecorator","isFetchSupported","fetch","Request","Response","isReadableStreamSupported","encodeText","TextEncoder","arrayBuffer","supportsRequestStream","duplexAccessed","hasContentType","duplex","DEFAULT_CHUNK_SIZE","supportsResponseStream","resolvers","ERR_NOT_SUPPORT","getBodyLength","resolveBodyLength","getContentLength","fetchAdapter","fetchOptions","finished","composedSignal","stopTimeout","requestContentLength","contentTypeHeader","_request","isStreamResponse","responseContentLength","knownAdapters","http","xhr","renderReason","isResolvedHandle","adapters","getAdapter","nameOrAdapter","rejectedReasons","reasons","throwIfCancellationRequested","throwIfRequested","dispatchRequest","validators$1","deprecatedWarnings","assertOptions","schema","allowUnknown","ERR_BAD_OPTION_VALUE","validator","ERR_BAD_OPTION","formatMessage","desc","opts","ERR_DEPRECATED","validators","Axios","instanceConfig","interceptors","configOrUrl","dummy","boolean","function","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","interceptor","responseInterceptorChain","chain","onFulfilled","onRejected","getUri","fullPath","generateHTTPMethod","isForm","Axios$1","CancelToken","executor","resolvePromise","_listeners","onfulfilled","_resolve","CancelToken$1","spread","isAxiosError","HttpStatusCode","Continue","SwitchingProtocols","Processing","EarlyHints","Ok","Created","Accepted","NonAuthoritativeInformation","NoContent","ResetContent","PartialContent","MultiStatus","AlreadyReported","ImUsed","MultipleChoices","MovedPermanently","Found","SeeOther","NotModified","UseProxy","Unused","TemporaryRedirect","PermanentRedirect","BadRequest","Unauthorized","PaymentRequired","Forbidden","NotFound","MethodNotAllowed","NotAcceptable","ProxyAuthenticationRequired","RequestTimeout","Conflict","Gone","LengthRequired","PreconditionFailed","PayloadTooLarge","UriTooLong","UnsupportedMediaType","RangeNotSatisfiable","ExpectationFailed","ImATeapot","MisdirectedRequest","UnprocessableEntity","Locked","FailedDependency","TooEarly","UpgradeRequired","PreconditionRequired","TooManyRequests","RequestHeaderFieldsTooLarge","UnavailableForLegalReasons","InternalServerError","NotImplemented","BadGateway","ServiceUnavailable","GatewayTimeout","HttpVersionNotSupported","VariantAlsoNegotiates","InsufficientStorage","LoopDetected","NotExtended","NetworkAuthenticationRequired","HttpStatusCode$1","createInstance","defaultConfig","axios","Cancel","all","promises","formToJSON","isCallable","tryToString","$TypeError","argument","isPossiblePrototype","$String","it","isPrototypeOf","Prototype","toIndexedObject","toAbsoluteIndex","lengthOfArrayLike","createMethod","IS_INCLUDES","$this","fromIndex","O","DESCRIPTORS","getOwnPropertyDescriptor","SILENT_ON_NON_WRITABLE_LENGTH_SET","uncurryThis","stringSlice","TO_STRING_TAG_SUPPORT","classofRaw","wellKnownSymbol","TO_STRING_TAG","$Object","CORRECT_ARGUMENTS","tryGet","callee","getOwnPropertyDescriptorModule","definePropertyModule","exceptions","createPropertyDescriptor","bitmap","makeBuiltIn","defineGlobalProperty","simple","unsafe","nonConfigurable","nonWritable","fails","EXISTS","MAX_SAFE_INTEGER","IndexSizeError","DOMStringSizeError","HierarchyRequestError","WrongDocumentError","InvalidCharacterError","NoDataAllowedError","NoModificationAllowedError","NotFoundError","NotSupportedError","InUseAttributeError","InvalidStateError","SyntaxError","InvalidModificationError","NamespaceError","InvalidAccessError","ValidationError","TypeMismatchError","SecurityError","NetworkError","AbortError","URLMismatchError","QuotaExceededError","TimeoutError","InvalidNodeTypeError","DataCloneError","Deno","versions","v8","$Error","TEST","V8_OR_CHAKRA_STACK_ENTRY","IS_V8_OR_CHAKRA_STACK","dropEntries","prepareStackTrace","createNonEnumerableProperty","defineBuiltIn","copyConstructorProperties","isForced","FORCED","targetProperty","sourceProperty","TARGET","GLOBAL","STATIC","stat","dontCallGetSet","forced","sham","NATIVE_BIND","FunctionPrototype","getDescriptor","PROPER","CONFIGURABLE","aCallable","uncurryThisWithBind","aFunction","isNullOrUndefined","V","P","func","anObject","toIntegerOrInfinity","getIteratorDirect","INVALID_SIZE","$RangeError","RangeError","SetRecord","intSize","getIterator","numSize","toObject","classof","propertyIsEnumerable","Wrapper","NewTarget","NewTargetPrototype","store","functionToString","inspectSource","NATIVE_WEAK_MAP","shared","sharedKey","hiddenKeys","OBJECT_ALREADY_INITIALIZED","enforce","getterFor","TYPE","metadata","facade","STATE","documentAll","replacement","feature","detection","POLYFILL","NATIVE","string","getBuiltIn","USE_SYMBOL_AS_UID","$Symbol","record","ITERATOR_INSTEAD_OF_RECORD","step","getMethod","innerResult","innerError","toLength","CONFIGURABLE_FUNCTION_NAME","InternalStateModule","enforceInternalState","getInternalState","CONFIGURABLE_LENGTH","TEMPLATE","arity","ceil","trunc","$default","IE8_DOM_DEFINE","V8_PROTOTYPE_DEFINE_BUG","toPropertyKey","$defineProperty","$getOwnPropertyDescriptor","ENUMERABLE","WRITABLE","Attributes","propertyIsEnumerableModule","internalObjectKeys","enumBugKeys","getOwnPropertySymbols","names","$propertyIsEnumerable","NASHORN_BUG","uncurryThisAccessor","requireObjectCoercible","aPossiblePrototype","CORRECT_SETTER","pref","valueOf","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","SetHelpers","iterate","aSet","getSetRecord","iterateSet","iterateSimple","other","otherRec","SetPrototype","iteratorClose","interruptible","createSetLike","error2","keysIter","IS_PURE","SHARED","copyright","license","V8_VERSION","symbol","integer","IndexedObject","ordinaryToPrimitive","TO_PRIMITIVE","exoticToPrim","toPrimitive","NATIVE_SYMBOL","required","WellKnownSymbolsStore","createWellKnownSymbol","withoutSetter","setArrayLength","doesNotExceedSafeInteger","INCORRECT_TO_LENGTH","properErrorOnNonWritableLength","argCount","difference","setMethodAcceptSetLike","real","intersection","INCORRECT","isDisjointFrom","isSubsetOf","isSupersetOf","symmetricDifference","union","anInstance","inheritIfRequired","normalizeStringArgument","DOMExceptionConstants","clearErrorStack","DOM_EXCEPTION","NativeDOMException","$DOMException","DOMExceptionPrototype","argumentsLength","that","ERROR_HAS_STACK","DOM_EXCEPTION_HAS_STACK","BUGGY_DESCRIPTOR","FORCED_CONSTRUCTOR","DOMException","PolyfilledDOMException","PolyfilledDOMExceptionPrototype","constant","constantName","validateArgumentsLength","$URLSearchParams","URLSearchParamsPrototype","$delete","$value","dindex","entriesLength","getAll","$has","defineBuiltInAccessor","count","vue","isESModule","applyToParams","newParams","HASH_RE","AMPERSAND_RE","SLASH_RE","EQUAL_RE","IM_RE","PLUS_RE","ENC_BRACKET_OPEN_RE","ENC_BRACKET_CLOSE_RE","ENC_CARET_RE","ENC_BACKTICK_RE","ENC_CURLY_OPEN_RE","ENC_PIPE_RE","ENC_CURLY_CLOSE_RE","ENC_SPACE_RE","commonEncode","encodeURI","encodeHash","encodeQueryValue","encodeQueryKey","encodePath","encodeParam","TRAILING_SLASH_RE","removeTrailingSlash","parseURL","parseQuery","currentLocation","query","hashPos","searchPos","resolveRelativePath","stringifyURL","stringifyQuery","stripBase","isSameRouteLocation","aLastIndex","bLastIndex","isSameRouteRecord","isSameRouteLocationParams","aliasOf","isSameRouteLocationParamsValue","isEquivalentArray","fromSegments","toSegments","lastToSegment","toPosition","segment","NavigationType","NavigationDirection","START","normalizeBase","baseEl","BEFORE_HASH_RE","createHref","getElementPosition","docRect","elRect","computeScrollPosition","scrollX","scrollY","scrollToPosition","scrollToOptions","positionEl","isIdSelector","getScrollKey","delta","history","scrollPositions","saveScrollPosition","scrollPosition","getSavedScrollPosition","createBaseLocation","createCurrentLocation","slicePos","pathFromHash","useHistoryListeners","historyState","listeners","teardowns","pauseState","popStateHandler","fromState","forward","back","unknown","pauseListeners","listen","teardown","beforeUnloadListener","replaceState","buildState","replaced","computeScroll","useHistoryStateNavigation","changeLocation","hashIndex","currentState","createWebHistory","historyNavigation","historyListeners","go","triggerListeners","routerHistory","createMemoryHistory","setLocation","shouldTrigger","createWebHashHistory","isRouteLocation","route","isRouteName","START_LOCATION_NORMALIZED","redirectedFrom","NavigationFailureSymbol","NavigationFailureType","ErrorTypeMessages","stringifyRoute","createRouterError","isNavigationFailure","propertiesToLog","BASE_PARAM_PATTERN","BASE_PATH_PARSER_OPTIONS","sensitive","strict","REGEX_CHARS_RE","tokensToParser","score","segmentScores","tokenIndex","subSegmentScore","repeatable","optional","regexp","re","subPattern","avoidDuplicatedSlash","param","compareScoreArray","comparePathParserScore","aScore","bScore","isLastScoreNegative","ROOT_TOKEN","VALID_PARAM_RE","tokenizePath","crash","previousState","finalizeSegment","customRe","consumeBuffer","addCharToBuffer","createRouteRecordMatcher","alias","createRouterMatcher","routes","globalOptions","matchers","matcherMap","getRecordMatcher","addRoute","originalRecord","isRootAdd","mainNormalizedRecord","normalizeRouteRecord","normalizedRecords","aliases","originalMatcher","normalizedRecord","parentPath","connectingSlash","isAliasRecord","removeRoute","isMatchable","insertMatcher","matcherRef","getRoutes","paramsFromLocation","parentMatcher","mergeMetaFields","redirect","normalizeRecordProps","instances","leaveGuards","updateGuards","enterCallbacks","propsObject","partialOptions","lower","upper","mid","sortOrder","insertionAncestor","getInsertionAncestor","hasLeadingIM","searchParams","searchParam","eqPos","currentValue","normalizeQuery","normalizedQuery","matchedRouteKey","viewDepthKey","routerKey","routeLocationKey","routerViewLocationKey","useCallbacks","registerGuard","removeFromList","onBeforeRouteLeave","leaveGuard","activeRecord","onBeforeRouteUpdate","updateGuard","guardToPromiseFn","enterCallbackArray","valid","guardReturn","guardCall","extractComponentsGuards","guardType","guards","rawComponent","isRouteComponent","componentPromise","resolvedComponent","loadRouteLocation","useLink","router","currentRoute","activeRecordIndex","routeMatched","currentMatched","parentRecordPath","getOriginalPath","includesParams","isExactActive","navigate","guardEvent","RouterLinkImpl","compatConfig","MODE","activeClass","exactActiveClass","custom","ariaCurrentValue","link","elClass","getLinkClass","linkActiveClass","linkExactActiveClass","RouterLink","outer","inner","innerValue","outerValue","propClass","globalClass","defaultClass","RouterViewImpl","injectedRoute","routeToDisplay","injectedDepth","initialDepth","matchedRoute","matchedRouteRef","viewRef","oldInstance","oldName","currentName","ViewComponent","routePropsOption","routeProps","slotContent","RouterView","createRouter","parseQuery$1","stringifyQuery$1","beforeGuards","beforeResolveGuards","afterGuards","pendingLocation","scrollBehavior","scrollRestoration","normalizeParams","paramValue","encodeParams","decodeParams","parentOrRoute","recordMatcher","routeMatcher","hasRoute","rawLocation","locationNormalized","matcherLocation","targetParams","locationAsObject","checkCanceledNavigation","pushWithRedirect","handleRedirectRecord","lastMatched","newTargetLocation","targetLocation","shouldRedirect","toLocation","failure","handleScroll","markAsReady","triggerError","finalizeNavigation","triggerAfterEach","checkCanceledNavigationAndReject","installedApps","leavingRecords","updatingRecords","enteringRecords","extractChangingRecords","reverse","canceledNavigationCheck","runGuardQueue","isPush","isFirstNavigation","removeHistoryListener","setupListeners","_from","listening","ready","readyHandlers","errorListeners","isReady","started","beforeEach","beforeResolve","afterEach","$router","reactiveRoute","unmountApp","recordFrom","recordTo","useRouter","useRoute","START_LOCATION","instanceOfAny","constructors","idbProxyableTypes","cursorAdvanceMethods","getIdbProxyableTypes","IDBDatabase","IDBObjectStore","IDBIndex","IDBCursor","IDBTransaction","getCursorAdvanceMethods","advance","continue","continuePrimaryKey","cursorRequestMap","transactionDoneMap","transactionStoreNamesMap","transformCache","reverseTransformCache","promisifyRequest","unlisten","success","cacheDonePromiseForTransaction","tx","idbProxyTraps","objectStoreNames","objectStore","replaceTraps","transaction","unwrap","storeNames","transformCachableValue","IDBRequest","openDB","blocked","upgrade","blocking","terminated","openPromise","oldVersion","newVersion","db","readMethods","writeMethods","cachedMethods","targetFuncName","useIndex","isWrite","storeName","oldTraps","PlatformLoggerServiceImpl","getPlatformInfoString","providers","getProviders","provider","isVersionServiceProvider","getImmediate","library","logString","getComponent","logger","Logger","DEFAULT_ENTRY_NAME","PLATFORM_LOG_STRING","name$q","name$p","name$n","name$o","name$l","name$m","name$k","name$j","name$i","name$h","name$g","name$f","name$e","name$d","name$c","name$b","name$a","name$9","name$8","name$7","name$6","name$5","name$4","name$3","name$1","name$2","_apps","_serverApps","_components","_addComponent","addComponent","debug","_registerComponent","componentName","serverApp","_getProvider","heartbeatController","getProvider","triggerHeartbeat","ERRORS","ERROR_FACTORY","FirebaseAppImpl","_isDeleted","_name","_automaticDataCollectionEnabled","automaticDataCollectionEnabled","checkDestroyed","isDeleted","appName","initializeApp","rawConfig","existingApp","ComponentContainer","newApp","getApp","registerVersion","libraryKeyOrName","variant","libraryMismatch","versionMismatch","warning","DB_NAME","DB_VERSION","STORE_NAME","dbPromise","getDbPromise","createObjectStore","originalErrorMessage","readHeartbeatsFromIndexedDB","computeKey","idbGetError","writeHeartbeatsToIndexedDB","heartbeatObject","put","appId","MAX_HEADER_BYTES","STORED_HEARTBEAT_RETENTION_MAX_MILLIS","HeartbeatServiceImpl","_heartbeatsCache","_storage","HeartbeatStorageImpl","_heartbeatsCachePromise","platformLogger","agent","date","getUTCDateString","heartbeats","lastSentHeartbeatDate","singleDateHeartbeat","hbTimestamp","overwrite","getHeartbeatsHeader","heartbeatsToSend","unsentEntries","extractHeartbeatsForHeader","headerString","today","heartbeatsCache","maxSize","heartbeatEntry","hb","dates","countBytes","_canUseIndexedDBPromise","runIndexedDBEnvironmentCheck","canUseIndexedDB","idbHeartbeatObject","heartbeatsObject","existingHeartbeatsObject","registerCoreComponents","version$1","instanceFactory","multipleInstances","serviceProps","instantiationMode","onInstanceCreated","setInstantiationMode","setMultipleInstances","setServiceProps","setInstanceCreatedCallback","Provider","instancesDeferred","instancesOptions","onInitCallbacks","identifier","normalizedIdentifier","normalizeInstanceIdentifier","deferred","isInitialized","shouldAutoInitialize","getOrInitializeService","instanceIdentifier","setComponent","isComponentEager","instanceDeferred","clearInstance","services","INTERNAL","_delete","isComponentSet","getOptions","initialize","normalizedDeferredIdentifier","onInit","existingCallbacks","existingInstance","invokeOnInitCallbacks","callbacks","normalizeIdentifierForFactory","addOrOverwriteComponent","LogLevel","levelStringToEnum","DEBUG","VERBOSE","INFO","WARN","ERROR","SILENT","defaultLogLevel","ConsoleMethod","defaultLogHandler","logType","logLevel","_logLevel","_logHandler","_userLogHandler","setLogLevel","logHandler","userLogHandler","log","setSDKVersion","DOMStorageWrapper","domStorage_","prefix_","removeItem","prefixedName_","setItem","storedVal","getItem","MemoryStorage","cache_","isInMemoryStorage","createStoragefor","domStorageName","domStorage","PersistentStorage","SessionStorage","logClient","LUIDGenerator","sha1","sha1Bytes","buildLogMessage_","varArgs","firstLog_","enableLogging$1","logger_","persistent","logWrapper","fatal","warnIfPageIsSecure","isInvalidJSONNumber","POSITIVE_INFINITY","NEGATIVE_INFINITY","executeWhenDOMReady","wrappedFn","attachEvent","MIN_NAME","MAX_NAME","nameCompare","aAsInt","tryParseInt","bAsInt","stringCompare","requireKey","ObjectToUniqueKey","splitStringBySize","segsize","dataSegs","doubleToIEEE754String","ebits","fbits","bias","ln","pow","LN2","bits","hexByteString","hexByte","substr","isChromeExtensionContentScript","isWindowsStoreApp","Windows","UI","INTEGER_REGEXP_","INTEGER_32_MIN","INTEGER_32_MAX","intVal","exceptionGuard","beingCrawled","setTimeoutNonBlocking","time","unrefTimer","AppCheckTokenProvider","appName_","appCheckProvider","appCheck","getToken","forceRefresh","addTokenChangeListener","addTokenListener","notifyForInvalidToken","FirebaseAuthTokenProvider","firebaseOptions_","authProvider_","auth_","addAuthTokenListener","removeTokenChangeListener","removeAuthTokenListener","errorMessage","EmulatorTokenProvider","accessToken","OWNER","PROTOCOL_VERSION","VERSION_PARAM","TRANSPORT_SESSION_PARAM","REFERER_PARAM","FORGE_REF","FORGE_DOMAIN_RE","LAST_SESSION_PARAM","APPLICATION_ID_PARAM","APP_CHECK_TOKEN_PARAM","WEBSOCKET","LONG_POLLING","RepoInfo","webSocketOnly","nodeAdmin","persistenceKey","includeNamespaceInQueryParams","isUsingEmulator","_host","_domain","internalHost","isCacheableHost","isCustomHost","newHost","toURLString","repoInfoNeedsQueryParam","repoInfo","repoInfoConnectionURL","connURL","pairs","StatsCollection","counters_","incrementCounter","amount","collections","reporters","statsManagerGetCollection","hashString","statsManagerGetOrCreateReporter","creatorFunction","PacketReceiver","onMessage_","pendingResponses","currentResponseNum","closeAfterResponse","onClose","closeAfter","responseNum","handleResponse","requestNum","toProcess","FIREBASE_LONGPOLL_START_PARAM","FIREBASE_LONGPOLL_CLOSE_COMMAND","FIREBASE_LONGPOLL_COMMAND_CB_NAME","FIREBASE_LONGPOLL_DATA_CB_NAME","FIREBASE_LONGPOLL_ID_PARAM","FIREBASE_LONGPOLL_PW_PARAM","FIREBASE_LONGPOLL_SERIAL_PARAM","FIREBASE_LONGPOLL_CALLBACK_ID_PARAM","FIREBASE_LONGPOLL_SEGMENT_NUM_PARAM","FIREBASE_LONGPOLL_SEGMENTS_IN_PACKET","FIREBASE_LONGPOLL_DATA_PARAM","FIREBASE_LONGPOLL_DISCONN_FRAME_REQUEST_PARAM","MAX_URL_DATA_SIZE","SEG_HEADER_SIZE","MAX_PAYLOAD_SIZE","KEEPALIVE_REQUEST_INTERVAL","LP_CONNECT_TIMEOUT","BrowserPollConnection","connId","applicationId","appCheckToken","authToken","transportSessionId","lastSessionId","bytesSent","bytesReceived","everConnected_","log_","stats_","urlFn","onMessage","onDisconnect","curSegmentNum","onDisconnect_","myPacketOrderer","isClosed_","connectTimeoutTimer_","onClosed_","scriptTagHolder","FirebaseIFrameScriptHolder","command","arg4","incrementIncomingBytes_","sendNewPolls","pN","urlParams","uniqueCallbackIdentifier","connectURL","addTag","startLongPoll","addDisconnectPingFrame","forceAllow","forceAllow_","forceDisallow","forceDisallow_","isAvailable","markConnectionHealthy","shutdown_","myDisconnFrame","dataStr","base64data","enqueueSegment","pw","src","commandCB","onMessageCB","outstandingRequests","pendingSegs","currentSerial","myIFrame","createIFrame_","script","currentDomain","iframeContents","iframe","contentWindow","contentDocument","alive","myID","myPW","newRequest_","theURL","curDataString","nextSeg","theSeg","seg","ts","addLongPollTag_","segnum","totalsegs","serial","doNewRequest","keepaliveTimeout","readyStateCB","loadCB","doNodeLongPoll","newScript","onload","rstate","WEBSOCKET_MAX_FRAME_SIZE","WEBSOCKET_KEEPALIVE_INTERVAL","WebSocketImpl","MozWebSocket","WebSocket","WebSocketConnection","keepaliveTimer","frames","totalFrames","connectionURL_","device","mySock","onopen","onclose","onmessage","handleIncomingFrame","isOldAndroid","oldAndroidRegex","oldAndroidMatch","previouslyFailed","appendFrame_","fullMess","jsonMess","handleNewFrameCount_","frameCount","extractFrameCount_","mess","resetKeepAlive","remainingData","sendString_","responsesRequiredToBeHealthy","healthyTimeout","TransportManager","ALL_TRANSPORTS","IS_TRANSPORT_INITIALIZED","globalTransportInitialized_","initTransports_","isWebSocketsAvailable","isSkipPollConnection","transports_","transports","initialTransport","upgradeTransport","UPGRADE_TIMEOUT","DELAY_BEFORE_SENDING_EXTRA_REQUESTS","BYTES_SENT_HEALTHY_OVERRIDE","BYTES_RECEIVED_HEALTHY_OVERRIDE","MESSAGE_TYPE","MESSAGE_DATA","CONTROL_SHUTDOWN","CONTROL_RESET","CONTROL_ERROR","CONTROL_PONG","SWITCH_ACK","END_TRANSMISSION","PING","SERVER_HELLO","Connection","repoInfo_","applicationId_","appCheckToken_","authToken_","onReady_","onKill_","connectionCount","pendingDataMessages","state_","transportManager_","start_","conn","conn_","nextTransportId_","primaryResponsesRequired_","onMessageReceived","connReceiver_","onConnectionLost","disconnReceiver_","tx_","rx_","secondaryConn_","isHealthy_","healthyTimeoutMS","healthyTimeout_","everConnected","onConnectionLost_","onSecondaryConnectionLost_","onPrimaryMessageReceived_","onSecondaryMessageReceived_","sendRequest","dataMsg","sendData_","tryCleanupConnection","onSecondaryControl_","controlData","cmd","upgradeIfSecondaryHealthy_","secondaryResponsesRequired_","parsedData","layer","proceedWithUpgrade_","onControl_","onDataMessage_","onPrimaryResponse_","handshakePayload","onHandshake_","onConnectionShutdown_","onReset_","sendPingOnPrimaryIfNecessary_","handshake","sessionId","onConnectionEstablished_","tryStartUpgrade_","startUpgrade_","closeConnections_","ServerActions","pathString","onComplete","refreshAuthToken","refreshAppCheckToken","onDisconnectPut","onDisconnectMerge","onDisconnectCancel","reportStats","stats","EventEmitter","allowedEvents_","listeners_","eventType","validateEventType_","eventData","getInitialEvent","et","OnlineMonitor","online_","currentlyOnline","MAX_PATH_DEPTH","MAX_PATH_LENGTH_BYTES","Path","pathOrString","pieceNum","pieces_","copyTo","pieceNum_","newEmptyPath","pathGetFront","pathGetLength","pathPopFront","pathGetBack","pathToUrlEncodedString","pathSlice","begin","pathParent","pieces","pathChild","childPathObj","childPieces","pathIsEmpty","newRelativePath","outerPath","innerPath","pathEquals","pathContains","ValidationPath","errorPrefix_","parts_","byteLength_","validationPathCheckValid","validationPathPush","validationPath","validationPathPop","validationPathToErrorString","VisibilityMonitor","visibilityChange","visible_","visible","RECONNECT_MIN_DELAY","RECONNECT_MAX_DELAY_DEFAULT","RECONNECT_MAX_DELAY_FOR_ADMINS","RECONNECT_DELAY_MULTIPLIER","RECONNECT_DELAY_RESET_TIMEOUT","SERVER_KILL_INTERRUPT_REASON","INVALID_TOKEN_THRESHOLD","PersistentConnection","onDataUpdate_","onConnectStatus_","onServerInfoUpdate_","authTokenProvider_","appCheckTokenProvider_","authOverride_","nextPersistentConnectionId_","interruptReasons_","listens","outstandingPuts_","outstandingGets_","outstandingPutCount_","outstandingGetCount_","onDisconnectRequestQueue_","connected_","reconnectDelay_","maxReconnectDelay_","securityDebugCallback_","establishConnectionTimer_","requestCBHash_","requestNumber_","realtime_","forceTokenRefresh_","invalidAuthTokenCount_","invalidAppCheckTokenCount_","firstConnection_","lastConnectionAttemptTime_","lastConnectionEstablishedTime_","onVisible_","onOnline_","action","onResponse","curReqNum","initConnection_","_path","q","_queryObject","outstandingGet","sendGet_","currentHashFn","queryId","_queryIdentifier","_queryParams","isDefault","loadsAllData","listenSpec","hashFn","sendListen_","req","warnOnListenWarnings_","currentListenSpec","removeListen_","warnings","indexSpec","getIndex","indexPath","tryAuth","reduceReconnectDelayIfAdminCredential_","credential","isFirebaseSecret","tryAppCheck","authMethod","cred","onAuthRevoked_","onAppCheckRevoked_","sendUnlisten_","queryObj","sendOnDisconnect_","putInternal","sendPut_","queued","errorReason","reqNum","onDataPush_","onListenRevoked_","onSecurityDebugPacket_","handleTimestamp_","sendConnectStats_","restoreState_","scheduleConnect_","establishConnection_","online","onRealtimeDisconnect_","cancelSentTransactions_","shouldReconnect_","timeSinceLastConnectSucceeded","timeSinceLastConnectAttempt","reconnectDelay","onDataMessage","onReady","nextConnectionId_","canceled","connection","closeFn","sendRequestFn","interrupt","serverTimeOffset","normalizedPathString","statusCode","explanation","queries","clientName","NamedNode","Wrap","Index","getCompare","compare","indexedValueChanged","oldWrapped","newWrapped","minPost","MIN","__EMPTY_NODE","KeyIndex","isDefinedOn","maxPost","makePost","indexValue","KEY_INDEX","SortedMapIterator","startKey","isReverse_","resultGenerator_","nodeStack_","cmp","getNext","hasNext","peek","LLRBNode","color","RED","SortedMap","EMPTY_NODE","copy","inorderTraversal","reverseTraversal","min_","minKey","maxKey","fixUp_","removeMin_","isRed_","moveRedLeft_","smallest","rotateRight_","moveRedRight_","rotateLeft_","colorFlip_","nl","nr","checkMaxDepth_","blackDepth","check_","BLACK","LLRBEmptyNode","comparator_","root_","getPredecessorKey","rightParent","resultGenerator","getIteratorFrom","getReverseIteratorFrom","getReverseIterator","NAME_ONLY_COMPARATOR","NAME_COMPARATOR","MAX_NODE$2","setMaxNode$1","priorityHashText","priority","validatePriorityNode","priorityNode","isLeafNode","getPriority","__childrenNodeConstructor","nodeFromJSON$1","MAX_NODE$1","LeafNode","value_","priorityNode_","lazyHash_","updatePriority","newPriorityNode","getImmediateChild","childName","getChild","hasChild","getPredecessorChildName","childNode","updateImmediateChild","newChildNode","updateChild","front","numChildren","forEachChild","exportFormat","toHash","compareTo","compareToLeafNode_","otherLeaf","otherLeafType","thisLeafType","otherIndex","VALUE_TYPE_ORDER","thisIndex","withIndex","isIndexed","equals","setNodeFromJSON","setMaxNode","PriorityIndex","aPriority","bPriority","indexCmp","PRIORITY_INDEX","LOG_2","Base12Num","logBase2","num","bitMask","current_","mask","bits_","nextBitIsOne","buildChildSet","keyFn","mapSortFn","buildBalancedTree","namedNode","buildFrom12Array","base12","buildPennant","childTree","attachPennant","pennant","isOne","_defaultIndexMap","fallbackObject","IndexMap","indexes_","indexSet_","indexKey","sortedMap","hasIndex","indexDefinition","addIndex","existingChildren","sawIndexedValue","iter","indexName","newIndexSet","newIndexes","addToIndexes","indexedChildren","existingSnap","removeFromIndexes","ChildrenNode","children_","indexMap_","newIndexMap","newPriority","newImmediateChild","numKeys","allIntegerKeys","array","childHash","idx","resolveIndex_","predecessor","getFirstChildName","getFirstChild","getLastChildName","getLastChild","wrappedNode","startPost","endPost","MAX_NODE","otherChildrenNode","thisIter","otherIter","thisCurrent","otherCurrent","MaxNode","MAX","USE_HINZE","nodeFromJSON","json","jsonLeaf","childData","childrenHavePriority","hinzeJsonObj","childSet","sortedChildSet","PathIndex","indexPath_","extractChild","snap","aChild","bChild","valueNode","ValueIndex","VALUE_INDEX","changeValue","snapshotNode","changeChildAdded","changeChildRemoved","changeChildChanged","oldSnap","changeChildMoved","QueryParams","limitSet_","startSet_","startNameSet_","startAfterSet_","endSet_","endNameSet_","endBeforeSet_","limit_","viewFrom_","indexStartValue_","indexStartName_","indexEndValue_","indexEndName_","index_","hasStart","isViewFromLeft","getIndexStartValue","getIndexStartName","hasEnd","getIndexEndValue","getIndexEndName","hasLimit","hasAnchoredLimit","getLimit","queryParamsToRestQueryStringParameters","queryParams","qs","orderBy","startParam","endParam","queryParamsGetQueryObject","viewFrom","ReadonlyRestClient","getListenId_","listens_","listenId","thisListen","queryStringParameters","restRequest_","SnapshotHolder","rootNode_","getNode","updateSnapshot","newSnapshotNode","newSparseSnapshotTree","sparseSnapshotTreeRemember","sparseSnapshotTree","childKey","sparseSnapshotTreeForEachTree","prefixPath","sparseSnapshotTreeForEachChild","tree","StatsListener","collection_","last_","newStats","FIRST_STATS_MIN_TIME","FIRST_STATS_MAX_TIME","REPORT_STATS_INTERVAL","StatsReporter","collection","server_","statsToReport_","statsListener_","reportStats_","reportedStats","haveStatsToReport","OperationType","newOperationSourceUser","fromUser","fromServer","tagged","newOperationSourceServer","newOperationSourceServerTaggedQuery","AckUserWrite","affectedTree","revert","ACK_USER_WRITE","operationForChild","subtree","Overwrite","OVERWRITE","Merge","MERGE","CacheNode","node_","fullyInitialized_","filtered_","isFullyInitialized","isFiltered","isCompleteForPath","isCompleteForChild","eventGeneratorGenerateEventsForChanges","eventGenerator","changes","eventCache","eventRegistrations","moves","change","eventGeneratorGenerateEventsForType","registrations","filteredChanges","eventGeneratorCompareChanges","materializedChange","eventGeneratorMaterializeSingleChange","registration","respondsTo","createEvent","query_","prevName","aWrapped","bWrapped","newViewCache","serverCache","viewCacheUpdateEventSnap","viewCache","eventSnap","viewCacheUpdateServerSnap","serverSnap","viewCacheGetCompleteEventSnap","viewCacheGetCompleteServerSnap","emptyChildrenSingleton","EmptyChildren","ImmutableTree","fromObject","childPath","childSnap","findRootMostMatchingPathAndValue","relativePath","predicate","childExistingPathAndValue","findRootMostValueAndPath","toSet","newChild","setTree","newTree","fold","fold_","pathSoFar","accum","findOnPath","findOnPath_","pathToFollow","foreachOnPath","foreachOnPath_","currentRelativePath","foreach","foreach_","foreachChild","CompoundWrite","writeTree_","empty","compoundWriteAddWrite","compoundWrite","rootmost","rootMostPath","newWriteTree","compoundWriteAddWrites","updates","newWrite","compoundWriteRemoveWrite","compoundWriteHasCompleteWrite","compoundWriteGetCompleteNode","compoundWriteGetCompleteChildren","compoundWriteChildCompoundWrite","shadowingNode","compoundWriteIsEmpty","compoundWriteApply","applySubtreeWrite","writeTree","priorityWrite","writeTreeChildWrites","newWriteTreeRef","writeTreeAddOverwrite","writeId","lastWriteId","allWrites","visibleWrites","writeTreeGetWrite","writeTreeRemoveWrite","writeToRemove","removedWriteWasVisible","removedWriteOverlapsWithOtherWrites","currentWrite","writeTreeRecordContainsPath_","writeTreeResetTree_","writeRecord","writeTreeLayerTree_","writeTreeDefaultFilter_","writes","treeRoot","writePath","deepNode","writeTreeCalcCompleteEventCache","treePath","completeServerCache","writeIdsToExclude","includeHiddenWrites","mergeAtPath","layeredCache","subMerge","writeTreeCalcCompleteEventChildren","completeServerChildren","completeChildren","topLevelSet","writeTreeCalcEventCacheAfterServerOverwrite","existingEventSnap","existingServerSnap","childMerge","writeTreeCalcCompleteChild","writeTreeShadowingWrite","writeTreeCalcIndexedSlice","completeServerData","toIterate","nodes","writeTreeRefCalcCompleteEventCache","writeTreeRef","writeTreeRefCalcCompleteEventChildren","writeTreeRefCalcEventCacheAfterServerOverwrite","writeTreeRefShadowingWrite","writeTreeRefCalcIndexedSlice","writeTreeRefCalcCompleteChild","existingServerCache","writeTreeRefChild","ChildChangeAccumulator","changeMap","trackChildChange","oldChange","oldType","getChanges","NoCompleteChildSource_","getCompleteChild","getChildAfterChild","NO_COMPLETE_CHILD_SOURCE","WriteTreeCompleteChildSource","writes_","viewCache_","optCompleteServerCache_","serverNode","viewProcessorAssertIndexed","viewProcessor","viewProcessorApplyOperation","oldViewCache","operation","writesCache","completeCache","accumulator","filterServerNode","viewProcessorApplyUserOverwrite","viewProcessorApplyServerOverwrite","viewProcessorApplyUserMerge","viewProcessorApplyServerMerge","ackUserWrite","viewProcessorRevertUserWrite","viewProcessorAckUserWrite","LISTEN_COMPLETE","viewProcessorListenComplete","viewProcessorMaybeAddValueEvent","isLeafOrEmpty","oldCompleteSnap","viewProcessorGenerateEventCacheAfterServerEvent","changePath","oldEventSnap","newEventCache","completeEventChildren","updateFullNode","completeNode","oldEventNode","updatedPriority","childChangePath","newEventChild","eventChildUpdate","filtersNodes","changedSnap","oldServerSnap","newServerCache","serverFilter","getIndexedFilter","newServerNode","newEventSnap","viewProcessorCacheHasChild","changedChildren","curViewCache","viewProcessorApplyMerge","viewMergeTree","serverChild","childMergeTree","isUnknownDeepMerge","ackPath","mergePath","serverCachePath","oldServerNode","oldEventCache","serverChildren","viewGetCompleteServerCache","view","viewApplyOperation","processor_","viewGenerateEventsForChanges_","eventRegistration","eventRegistrations_","eventGenerator_","referenceConstructor$1","referenceConstructor","syncPointSetReferenceConstructor","syncPointApplyOperation","syncPoint","optCompleteServerCache","views","syncPointGetCompleteServerCache","syncTreeSetReferenceConstructor","SyncTree","listenProvider_","syncPointTree_","pendingWriteTree_","tagToQueryMap","queryToTagMap","syncTreeApplyUserOverwrite","syncTree","newData","syncTreeApplyOperationToSyncPoints_","syncTreeAckUserWrite","needToReevaluate","syncTreeApplyServerOverwrite","syncTreeApplyServerMerge","changeTree","syncTreeApplyTaggedQueryOverwrite","queryKey","syncTreeQueryKeyForTag_","syncTreeParseQueryKey_","queryPath","op","syncTreeApplyTaggedOperation_","syncTreeApplyTaggedQueryMerge","syncTreeCalcCompleteEventCache","includeHiddenSets","syncTreeApplyOperationHelper_","syncPointTree","syncTreeApplyOperationDescendantsHelper_","childOperation","childServerCache","childWritesCache","splitIndex","ExistingValueProvider","DeferredValueProvider","syncTree_","path_","generateWithValues","resolveDeferredLeafValue","existingVal","serverValues","resolveScalarDeferredValue","resolveComplexDeferredValue","unused","existingNode","leaf","resolveDeferredValueTree","resolveDeferredValue","resolveDeferredValueSnapshot","rawPri","leafNode","childrenNode","Tree","childCount","treeSubTree","pathObj","treeGetValue","treeSetValue","treeUpdateParents","treeHasChildren","treeIsEmpty","treeForEachChild","treeForEachDescendant","includeSelf","childrenFirst","treeForEachAncestor","treeGetPath","treeUpdateChild","childEmpty","childExists","INVALID_KEY_REGEX_","INVALID_PATH_REGEX_","MAX_LEAF_SIZE_","isValidPathString","isValidRootPathString","validateFirebaseDataArg","validateFirebaseData","hasDotValue","hasActualChild","validatePathString","argumentName","validateRootPathString","validateWritablePath","validateUrl","parsedUrl","EventQueue","eventLists_","recursionDepth_","eventQueueQueueEvents","eventQueue","eventDataList","currList","getPath","eventQueueRaiseEventsForChangedPath","changedPath","eventQueueRaiseQueuedEventsMatchingPredicate","eventPath","sentAll","eventList","eventListRaise","eventFn","getEventRunner","INTERRUPT_REASON","MAX_TRANSACTION_RETRIES","Repo","forceRestClient_","appCheckProvider_","dataUpdateCount","eventQueue_","nextWriteId_","interceptServerDataCallback_","transactionQueueTree_","persistentConnection_","repoStart","repo","authOverride","isMerge","repoOnDataUpdate","repoOnConnectStatus","connectStatus","repoOnServerInfoUpdate","statsReporter_","infoData_","infoSyncTree_","startListening","infoEvents","stopListening","repoUpdateInfo","serverSyncTree_","repoServerTime","offsetNode","repoGenerateServerValues","taggedChildren","taggedSnap","affectedPath","repoRerunTransactions","repoRunOnDisconnectEvents","repoGetNextWriteId","repoSetWithPriority","repoLog","newNodeUnresolved","clearEvents","repoCallOnCompleteCallback","repoAbortTransactions","resolvedOnDisconnectTree","repoInterrupt","repoGetLatestState","excludeSets","repoSendReadyTransactions","repoPruneCompletedTransactionsBelowNode","repoBuildTransactionQueue","allRun","repoSendTransactionQueue","setsToIgnore","txn","currentWriteId","latestState","snapToSend","latestHash","retryCount","currentOutputSnapshotRaw","dataToSend","pathToSend","currentOutputSnapshotResolved","unwatcher","abortReason","rootMostTransactionNode","repoGetAncestorTransactionNode","repoRerunTransactionQueue","txnsToRerun","abortTransaction","currentInputSnapshot","newDataNode","hasExplicitPriority","oldWriteId","newNodeResolved","applyLocally","transactionNode","transactionQueue","repoAggregateTransactionQueuesForNode","nodeQueue","repoAbortTransactionsOnNode","lastSent","decodePath","pathStringDecoded","piece","decodeQuery","queryString","results","kv","parseRepoInfo","dataURL","parseDatabaseURL","scheme","subdomain","colonInd","slashInd","questionMarkInd","hostWithoutPort","dotInd","PUSH_CHARS","nextPushId","lastPushTime","lastRandChars","duplicateTime","timeStampChars","QueryImpl","_repo","_orderByCalled","ReferenceImpl","isEqual","sameRepo","samePath","sameQueryIdentifier","_checkNotDeleted","_root","thenablePushRef","pushRef","FIREBASE_DATABASE_EMULATOR_HOST_VAR","repos","useRestClient","repoManagerApplyEmulatorSettings","tokenProvider","repoManagerDatabaseFromApp","authProvider","dbUrl","databaseURL","isEmulator","dbEmulatorHost","authTokenProvider","repoManagerCreateRepo","Database","repoManagerDeleteRepo","appRepos","_repoInternal","_instanceStarted","_rootInternal","apiName","getDatabase","emulator","connectDatabaseEmulator","mockUserToken","registerDatabase","SDK_VERSION$1","simpleListen","echo","onEcho"],"sourceRoot":""}