{"version":3,"file":"application.js","mappings":";4RAAA,SACEA,OAAQC,KAAKC,QACbC,UAAWF,KAAKE,WCYlB,GACEC,OAAOC,GACDC,KAAKC,UACPF,EAASG,KAAKC,KAAKC,OACnBC,EAASX,OAAOI,IAAI,mBAAoBC,GAE5C,GCfIK,EAAM,KAAM,IAAID,MAAOG,UAEvBC,EAAeC,IAASJ,IAAQI,GAAQ,IAE9C,MAAMC,EACJC,YAAYC,GACVX,KAAKY,oBAAsBZ,KAAKY,oBAAoBC,KAAKb,MACzDA,KAAKW,WAAaA,EAClBX,KAAKc,kBAAoB,CAC3B,CAEAC,QACOf,KAAKgB,cACRhB,KAAKiB,UAAYb,WACVJ,KAAKkB,UACZlB,KAAKmB,eACLC,iBAAiB,mBAAoBpB,KAAKY,qBAC1ClB,EAAOI,IAAI,gDAAgDE,KAAKU,YAAYW,oBAEhF,CAEAC,OACMtB,KAAKgB,cACPhB,KAAKkB,UAAYd,IACjBJ,KAAKuB,cACLC,oBAAoB,mBAAoBxB,KAAKY,qBAC7ClB,EAAOI,IAAI,6BAEf,CAEAkB,YACE,OAAOhB,KAAKiB,YAAcjB,KAAKkB,SACjC,CAEAO,aACEzB,KAAK0B,SAAWtB,GAClB,CAEAuB,gBACE3B,KAAKc,kBAAoB,EACzBd,KAAKyB,oBACEzB,KAAK4B,eACZlC,EAAOI,IAAI,qCACb,CAEA+B,mBACE7B,KAAK4B,eAAiBxB,IACtBV,EAAOI,IAAI,wCACb,CAIAqB,eACEnB,KAAKuB,cACLvB,KAAK8B,MACP,CAEAP,cACEQ,aAAa/B,KAAKgC,YACpB,CAEAF,OACE9B,KAAKgC,YAAcC,YAAW,KAC5BjC,KAAKkC,mBACLlC,KAAK8B,MAAK,GAEV9B,KAAKmC,kBACT,CAEAA,kBACE,MAAM,eAAEd,EAAc,wBAAEe,GAA4BpC,KAAKU,YAIzD,OAAwB,IAAjBW,EAHSgB,KAAKC,IAAI,EAAIF,EAAyBC,KAAKE,IAAIvC,KAAKc,kBAAmB,MAG7C,GAFG,IAA3Bd,KAAKc,kBAA0B,EAAMsB,GAC5BC,KAAKG,SAElC,CAEAN,mBACMlC,KAAKyC,sBACP/C,EAAOI,IAAI,oEAAoEE,KAAKc,mCAAmCP,EAAaP,KAAK0C,qCAAqC1C,KAAKU,YAAYW,oBAC/LrB,KAAKc,oBACDd,KAAK2C,uBACPjD,EAAOI,IAAI,+EAA+ES,EAAaP,KAAK4B,sBAE5GlC,EAAOI,IAAI,+BACXE,KAAKW,WAAWiC,UAGtB,CAEIF,kBACF,OAAO1C,KAAK0B,SAAW1B,KAAK0B,SAAW1B,KAAKiB,SAC9C,CAEAwB,oBACE,OAAOlC,EAAaP,KAAK0C,aAAe1C,KAAKU,YAAYW,cAC3D,CAEAsB,uBACE,OAAO3C,KAAK4B,gBAAmBrB,EAAaP,KAAK4B,gBAAkB5B,KAAKU,YAAYW,cACtF,CAEAT,sBACmC,YAA7BiC,SAASC,iBACXb,YAAW,MACLjC,KAAKyC,qBAAwBzC,KAAKW,WAAWoC,WAC/CrD,EAAOI,IAAI,uFAAuF+C,SAASC,mBAC3G9C,KAAKW,WAAWiC,SAClB,GAEA,IAEN,EAIFnC,EAAkBY,eAAiB,EACnCZ,EAAkB2B,wBAA0B,IAE5C,UC5HA,GACE,cAAiB,CACf,QAAW,UACX,WAAc,aACd,KAAQ,OACR,aAAgB,uBAChB,UAAa,uBAEf,mBAAsB,CACpB,aAAgB,eAChB,gBAAmB,kBACnB,eAAkB,kBAEpB,mBAAsB,SACtB,UAAa,CACX,sBACA,6BCTE,cAACY,EAAa,UAAEC,GAAa,EAC7BC,EAAqBD,EAAUE,MAAM,EAAGF,EAAUG,OAAS,GAE3DC,EAAU,GAAGA,QAEnB,MAAMC,EACJ5C,YAAY6C,GACVvD,KAAKwD,KAAOxD,KAAKwD,KAAK3C,KAAKb,MAC3BA,KAAKuD,SAAWA,EAChBvD,KAAKyD,cAAgBzD,KAAKuD,SAASE,cACnCzD,KAAK0D,QAAU,IAAI,EAAkB1D,MACrCA,KAAK2D,cAAe,CACtB,CAEAC,KAAKC,GACH,QAAI7D,KAAK+C,WACP/C,KAAK8D,UAAUF,KAAKG,KAAKC,UAAUH,KAC5B,EAIX,CAEAL,OACE,OAAIxD,KAAKiE,YACPvE,EAAOI,IAAI,uDAAuDE,KAAKkE,eAChE,IAEPxE,EAAOI,IAAI,uCAAuCE,KAAKkE,6BAA6BjB,KAChFjD,KAAK8D,WAAa9D,KAAKmE,yBAC3BnE,KAAK8D,UAAY,IAAIzD,EAASR,UAAUG,KAAKuD,SAASa,IAAKnB,GAC3DjD,KAAKqE,uBACLrE,KAAK0D,QAAQ3C,SACN,EAEX,CAEAuD,OAAM,eAACC,GAAkB,CAACA,gBAAgB,IAGxC,GAFKA,GAAkBvE,KAAK0D,QAAQpC,OAEhCtB,KAAK+C,SACP,OAAO/C,KAAK8D,UAAUQ,OAE1B,CAEA1B,SAEE,GADAlD,EAAOI,IAAI,yCAAyCE,KAAKkE,eACrDlE,KAAKiE,WAWP,OAAOjE,KAAKwD,OAVZ,IACE,OAAOxD,KAAKsE,OAOd,CANE,MAAOE,GACP9E,EAAOI,IAAI,6BAA8B0E,EAC3C,CACA,QACE9E,EAAOI,IAAI,0BAA0BE,KAAKU,YAAY+D,iBACtDxC,WAAWjC,KAAKwD,KAAMxD,KAAKU,YAAY+D,YACzC,CAIJ,CAEAC,cACE,GAAI1E,KAAK8D,UACP,OAAO9D,KAAK8D,UAAUa,QAE1B,CAEA5B,SACE,OAAO/C,KAAK4E,QAAQ,OACtB,CAEAX,WACE,OAAOjE,KAAK4E,QAAQ,OAAQ,aAC9B,CAIAC,sBACE,OAAOxB,EAAQyB,KAAK5B,EAAoBlD,KAAK0E,gBAAkB,CACjE,CAEAE,WAAWG,GACT,OAAO1B,EAAQyB,KAAKC,EAAQ/E,KAAKkE,aAAe,CAClD,CAEAA,WACE,GAAIlE,KAAK8D,UACP,IAAK,IAAIkB,KAAS3E,EAASR,UACzB,GAAIQ,EAASR,UAAUmF,KAAWhF,KAAK8D,UAAUmB,WAC/C,OAAOD,EAAME,cAInB,OAAO,IACT,CAEAb,uBACE,IAAK,IAAIc,KAAanF,KAAKoF,OAAQ,CACjC,MAAMC,EAAUrF,KAAKoF,OAAOD,GAAWtE,KAAKb,MAC5CA,KAAK8D,UAAU,KAAKqB,KAAeE,CACrC,CACF,CAEAlB,yBACE,IAAK,IAAIgB,KAAanF,KAAKoF,OACzBpF,KAAK8D,UAAU,KAAKqB,KAAe,WAAY,CAEnD,EAIF7B,EAAWmB,YAAc,IAEzBnB,EAAWgC,UAAUF,OAAS,CAC5BG,QAAQC,GACN,IAAKxF,KAAK6E,sBAAyB,OACnC,MAAM,WAACY,EAAU,QAAEF,EAAO,OAAEG,EAAM,UAAEC,EAAS,KAAEC,GAAQ7B,KAAK8B,MAAML,EAAM3B,MACxE,OAAQ+B,GACN,KAAK5C,EAAc8C,QAEjB,OADA9F,KAAK0D,QAAQ/B,gBACN3B,KAAKyD,cAAcsC,SAC5B,KAAK/C,EAAcgD,WAEjB,OADAtG,EAAOI,IAAI,0BAA0B4F,KAC9B1F,KAAKsE,MAAM,CAACC,eAAgBoB,IACrC,KAAK3C,EAAciD,KACjB,OAAOjG,KAAK0D,QAAQjC,aACtB,KAAKuB,EAAckD,aAEjB,OADAlG,KAAKyD,cAAc0C,oBAAoBV,GAChCzF,KAAKyD,cAAc2C,OAAOX,EAAY,aAC/C,KAAKzC,EAAcqD,UACjB,OAAOrG,KAAKyD,cAAc6C,OAAOb,GACnC,QACE,OAAOzF,KAAKyD,cAAc2C,OAAOX,EAAY,WAAYF,GAE/D,EAEA/B,OAGE,GAFA9D,EAAOI,IAAI,kCAAkCE,KAAK0E,8BAClD1E,KAAK2D,cAAe,GACf3D,KAAK6E,sBAER,OADAnF,EAAOI,IAAI,gEACJE,KAAKsE,MAAM,CAACC,gBAAgB,GAEvC,EAEAD,MAAMkB,GAEJ,GADA9F,EAAOI,IAAI,4BACPE,KAAK2D,aAGT,OAFA3D,KAAK2D,cAAe,EACpB3D,KAAK0D,QAAQ7B,mBACN7B,KAAKyD,cAAc8C,UAAU,eAAgB,CAACC,qBAAsBxG,KAAK0D,QAAQ1C,aAC1F,EAEAwD,QACE9E,EAAOI,IAAI,0BACb,GAGF,UClGe,MAAM2G,EACnB/F,YAAY6C,EAAUmD,EAAS,CAAC,EAAGC,GACjC3G,KAAKuD,SAAWA,EAChBvD,KAAKyF,WAAa1B,KAAKC,UAAU0C,GAbtB,SAASE,EAAQC,GAC9B,GAAkB,MAAdA,EACF,IAAK,IAAIC,KAAOD,EAAY,CAC1B,MAAME,EAAQF,EAAWC,GACzBF,EAAOE,GAAOC,CAChB,CAGJ,CAMIC,CAAOhH,KAAM2G,EACf,CAGAM,QAAQC,EAAQrD,EAAO,CAAC,GAEtB,OADAA,EAAKqD,OAASA,EACPlH,KAAK4D,KAAKC,EACnB,CAEAD,KAAKC,GACH,OAAO7D,KAAKuD,SAASK,KAAK,CAACuD,QAAS,UAAW1B,WAAYzF,KAAKyF,WAAY5B,KAAME,KAAKC,UAAUH,IACnG,CAEAuD,cACE,OAAOpH,KAAKuD,SAASE,cAAc4D,OAAOrH,KAC5C,ECtCF,QA5CA,MACEU,YAAY+C,GACVzD,KAAKyD,cAAgBA,EACrBzD,KAAKsH,qBAAuB,EAC9B,CAEAC,UAAUC,IAC+C,GAApDxH,KAAKsH,qBAAqBjE,QAAQmE,IACnC9H,EAAOI,IAAI,sCAAsC0H,EAAa/B,cAC9DzF,KAAKsH,qBAAqBpH,KAAKsH,IAG/B9H,EAAOI,IAAI,8CAA8C0H,EAAa/B,cAExEzF,KAAKyH,mBACP,CAEAC,OAAOF,GACL9H,EAAOI,IAAI,oCAAoC0H,EAAa/B,cAC5DzF,KAAKsH,qBAAwBtH,KAAKsH,qBAAqBK,QAAQC,GAAMA,IAAMJ,GAC7E,CAEAC,oBACEzH,KAAK6H,mBACL7H,KAAK8H,kBACP,CAEAD,mBACE9F,aAAa/B,KAAK+H,aACpB,CAEAD,mBACE9H,KAAK+H,aAAe9F,YAAW,KACzBjC,KAAKyD,eAA0D,mBAAlCzD,KAAKyD,cAAuB,WAC3DzD,KAAKsH,qBAAqBU,KAAKR,IAC7B9H,EAAOI,IAAI,uCAAuC0H,EAAa/B,cAC/DzF,KAAKyD,cAAcwE,UAAUT,EAAY,GAE7C,GAEA,IACJ,GChCa,MAAMU,EACnBxH,YAAY6C,GACVvD,KAAKuD,SAAWA,EAChBvD,KAAKmI,UAAY,IAAI,EAAsBnI,MAC3CA,KAAKyD,cAAgB,EACvB,CAEA2E,OAAOC,EAAa1B,GAClB,MACMD,EAA4B,iBADlB2B,IACuC,CAACC,QADxCD,GAEVb,EAAe,IAAIf,EAAazG,KAAKuD,SAAUmD,EAAQC,GAC7D,OAAO3G,KAAKuI,IAAIf,EAClB,CAIAe,IAAIf,GAKF,OAJAxH,KAAKyD,cAAcvD,KAAKsH,GACxBxH,KAAKuD,SAASiF,yBACdxI,KAAKoG,OAAOoB,EAAc,eAC1BxH,KAAKiI,UAAUT,GACRA,CACT,CAEAH,OAAOG,GAKL,OAJAxH,KAAK0H,OAAOF,GACPxH,KAAKyI,QAAQjB,EAAa/B,YAAYrC,QACzCpD,KAAK0I,YAAYlB,EAAc,eAE1BA,CACT,CAEAlB,OAAOb,GACL,OAAOzF,KAAKyI,QAAQhD,GAAYuC,KAAKR,IACnCxH,KAAK0H,OAAOF,GACZxH,KAAKoG,OAAOoB,EAAc,YACnBA,IAEX,CAEAE,OAAOF,GAGL,OAFAxH,KAAKmI,UAAUT,OAAOF,GACtBxH,KAAKyD,cAAiBzD,KAAKyD,cAAckE,QAAQC,GAAMA,IAAMJ,IACtDA,CACT,CAEAiB,QAAQhD,GACN,OAAOzF,KAAKyD,cAAckE,QAAQC,GAAMA,EAAEnC,aAAeA,GAC3D,CAEAM,SACE,OAAO/F,KAAKyD,cAAcuE,KAAKR,GAC7BxH,KAAKiI,UAAUT,IACnB,CAEAjB,UAAUoC,KAAiBC,GACzB,OAAO5I,KAAKyD,cAAcuE,KAAKR,GAC7BxH,KAAKoG,OAAOoB,EAAcmB,KAAiBC,IAC/C,CAEAxC,OAAOoB,EAAcmB,KAAiBC,GACpC,IAAInF,EAOJ,OALEA,EAD0B,iBAAjB+D,EACOxH,KAAKyI,QAAQjB,GAEb,CAACA,GAGZ/D,EAAcuE,KAAKR,GACe,mBAA/BA,EAAamB,GAA+BnB,EAAamB,MAAiBC,QAAQC,GAC9F,CAEAZ,UAAUT,GACJxH,KAAK0I,YAAYlB,EAAc,cACjCxH,KAAKmI,UAAUZ,UAAUC,EAE7B,CAEArB,oBAAoBV,GAClB/F,EAAOI,IAAI,0BAA0B2F,KACrCzF,KAAKyI,QAAQhD,GAAYuC,KAAKR,GAC5BxH,KAAKmI,UAAUT,OAAOF,IAC1B,CAEAkB,YAAYlB,EAAcL,GACxB,MAAM,WAAC1B,GAAc+B,EACrB,OAAOxH,KAAKuD,SAASK,KAAK,CAACuD,UAAS1B,cACtC,ECxEa,MAAMqD,EACnBpI,YAAY0D,GACVpE,KAAK+I,KAAO3E,EACZpE,KAAKyD,cAAgB,IAAIyE,EAAclI,MACvCA,KAAKW,WAAa,IAAI,EAAWX,KACnC,CAEIoE,UACF,OAAO4E,EAAmBhJ,KAAK+I,KACjC,CAEAnF,KAAKC,GACH,OAAO7D,KAAKW,WAAWiD,KAAKC,EAC9B,CAEAoF,UACE,OAAOjJ,KAAKW,WAAW6C,MACzB,CAEAwC,aACE,OAAOhG,KAAKW,WAAW2D,MAAM,CAACC,gBAAgB,GAChD,CAEAiE,yBACE,IAAKxI,KAAKW,WAAWsD,WACnB,OAAOjE,KAAKW,WAAW6C,MAE3B,EAGK,SAASwF,EAAmB5E,GAKjC,GAJmB,mBAARA,IACTA,EAAMA,KAGJA,IAAQ,UAAU8E,KAAK9E,GAAM,CAC/B,MAAM+E,EAAItG,SAASuG,cAAc,KAKjC,OAJAD,EAAEE,KAAOjF,EAET+E,EAAEE,KAAOF,EAAEE,KACXF,EAAExE,SAAWwE,EAAExE,SAAS2E,QAAQ,OAAQ,MACjCH,EAAEE,IACX,CACE,OAAOjF,CAEX,CCnDO,SAASmF,EAAenF,EAAMoF,EAAU,QAAU,sBACvD,OAAO,IAAIV,EAAS1E,EACtB,CAEO,SAASoF,EAAUC,GACxB,MAAMC,EAAU7G,SAAS8G,KAAKC,cAAc,2BAA2BH,OACvE,GAAIC,EACF,OAAOA,EAAQG,aAAa,UAEhC,YChCS,MACC,aAMV,SAASC,EAAmBC,GAAO,OAQnC,SAA4BA,GAAO,GAAIC,MAAMC,QAAQF,GAAM,OAAOG,EAAkBH,EAAM,CARhDI,CAAmBJ,IAM7D,SAA0BK,GAAQ,GAAsB,oBAAXC,QAAmD,MAAzBD,EAAKC,OAAOC,WAA2C,MAAtBF,EAAK,cAAuB,OAAOJ,MAAMO,KAAKH,EAAO,CANxFI,CAAiBT,IAItF,SAAqCU,EAAGC,GAAU,GAAKD,EAAL,CAAgB,GAAiB,iBAANA,EAAgB,OAAOP,EAAkBO,EAAGC,GAAS,IAAIC,EAAIC,OAAOtF,UAAUuF,SAAS/F,KAAK2F,GAAGtH,MAAM,GAAI,GAAiE,MAAnD,WAANwH,GAAkBF,EAAE/J,cAAaiK,EAAIF,EAAE/J,YAAY+I,MAAgB,QAANkB,GAAqB,QAANA,EAAoBX,MAAMO,KAAKE,GAAc,cAANE,GAAqB,2CAA2CzB,KAAKyB,GAAWT,EAAkBO,EAAGC,QAAzG,CAA7O,CAA+V,CAJjUI,CAA4Bf,IAE1H,WAAgC,MAAM,IAAIgB,UAAU,uIAAyI,CAF3DC,EAAsB,CAUxJ,SAASd,EAAkBH,EAAKkB,IAAkB,MAAPA,GAAeA,EAAMlB,EAAI3G,UAAQ6H,EAAMlB,EAAI3G,QAAQ,IAAK,IAAI8H,EAAI,EAAGC,EAAO,IAAInB,MAAMiB,GAAMC,EAAID,EAAKC,IAAOC,EAAKD,GAAKnB,EAAImB,GAAM,OAAOC,CAAM,CAEtL,SAASC,EAAQxE,EAAQyE,GAAkB,IAAIC,EAAOV,OAAOU,KAAK1E,GAAS,GAAIgE,OAAOW,sBAAuB,CAAE,IAAIC,EAAUZ,OAAOW,sBAAsB3E,GAASyE,IAAmBG,EAAUA,EAAQ7D,QAAO,SAAU8D,GAAO,OAAOb,OAAOc,yBAAyB9E,EAAQ6E,GAAKE,UAAY,KAAKL,EAAKpL,KAAK0L,MAAMN,EAAME,EAAU,CAAE,OAAOF,CAAM,CAEpV,SAASO,EAAcC,GAAU,IAAK,IAAIZ,EAAI,EAAGA,EAAIa,UAAU3I,OAAQ8H,IAAK,CAAE,IAAIc,EAAS,MAAQD,UAAUb,GAAKa,UAAUb,GAAK,CAAC,EAAGA,EAAI,EAAIE,EAAQR,OAAOoB,IAAS,GAAIC,SAAQ,SAAUnF,GAAOoF,EAAgBJ,EAAQhF,EAAKkF,EAAOlF,GAAO,IAAK8D,OAAOuB,0BAA4BvB,OAAOwB,iBAAiBN,EAAQlB,OAAOuB,0BAA0BH,IAAWZ,EAAQR,OAAOoB,IAASC,SAAQ,SAAUnF,GAAO8D,OAAOyB,eAAeP,EAAQhF,EAAK8D,OAAOc,yBAAyBM,EAAQlF,GAAO,GAAI,CAAE,OAAOgF,CAAQ,CAEzf,SAASI,EAAgBI,EAAKxF,EAAKC,GAAiK,OAApJD,KAAOwF,EAAO1B,OAAOyB,eAAeC,EAAKxF,EAAK,CAAEC,MAAOA,EAAO4E,YAAY,EAAMY,cAAc,EAAMC,UAAU,IAAkBF,EAAIxF,GAAOC,EAAgBuF,CAAK,CAEhN,SAASG,EAAgBC,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAI5B,UAAU,oCAAwC,CAExJ,SAAS6B,EAAkBd,EAAQe,GAAS,IAAK,IAAI3B,EAAI,EAAGA,EAAI2B,EAAMzJ,OAAQ8H,IAAK,CAAE,IAAI4B,EAAaD,EAAM3B,GAAI4B,EAAWnB,WAAamB,EAAWnB,aAAc,EAAOmB,EAAWP,cAAe,EAAU,UAAWO,IAAYA,EAAWN,UAAW,GAAM5B,OAAOyB,eAAeP,EAAQgB,EAAWhG,IAAKgG,EAAa,CAAE,CAI5T,IAAIC,EAAU,CACZC,YAAY,EACZC,cAAe,6DACfC,gBAAiB,mCACjBC,OAAQ,WAAmB,EAC3BC,QAAS,WAAoB,EAC7BC,SAAU,WAAqB,GAG7BC,EAAyB,WAC3B,SAASA,IACP,IAAIC,EAAQxB,UAAU3I,OAAS,QAAsByF,IAAjBkD,UAAU,GAAmBA,UAAU,GAAK,GAC5EyB,EAAUzB,UAAU3I,OAAS,QAAsByF,IAAjBkD,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAEnFU,EAAgBzM,KAAMsN,GAEtBtN,KAAKyN,OAASF,EACdvN,KAAK0N,SAAW7B,EAAcA,EAAc,CAAC,EAAGkB,GAAUS,GAE1DxN,KAAK2N,OACP,CAtBF,IAAsBhB,EAAaiB,EAoIjC,OApIoBjB,EAwBPW,GAxBoBM,EAwBT,CAAC,CACvB9G,IAAK,QACLC,MAAO,WACL,IAAI8G,EAAQ7N,KAERA,KAAKyN,OAAOrK,QAEdpD,KAAKyN,OAAOzF,KAAI,SAAU8F,GACpBA,EAAKC,QACPF,EAAMrK,KAAKsK,EAAKE,IAGlBF,EAAKG,UAAU7M,iBAAiB,SAAS,WACvCyM,EAAMK,OAAOJ,EAAKE,GACpB,GACF,GAEJ,GACC,CACDlH,IAAK,UACLC,MAAO,SAAiBiH,GACtB,OAAOhO,KAAKyN,OAAO9F,QAAO,SAAUmG,GAClC,OAAOA,EAAKE,KAAOA,CACrB,IAAG,EACL,GACC,CACDlH,IAAK,OACLC,MAAO,SAAciH,GACnB,IACIG,EACAC,EAFAC,EAASrO,KAIT8N,EAAO9N,KAAKsO,QAAQN,GAEnBhO,KAAK0N,SAASV,YACjBhN,KAAKyN,OAAOzF,KAAI,SAAUkD,GAEtB,IAAIqD,EAAuBC,EADzBtD,IAAM4C,KAGPS,EAAwBrD,EAAE+C,UAAUQ,WAAWpH,OAAOuE,MAAM2C,EAAuBzE,EAAmBuE,EAAOX,SAAST,cAAcyB,MAAM,QAE1IF,EAAyBtD,EAAE+C,UAAUQ,WAAWlG,IAAIqD,MAAM4C,EAAwB1E,EAAmBuE,EAAOX,SAASR,gBAAgBwB,MAAM,OAE5IxD,EAAEyD,SAASF,UAAUlG,IAAI,UACzB2C,EAAE+C,UAAUW,aAAa,iBAAiB,GAC1C1D,EAAE6C,QAAS,EAEP7C,EAAE2D,QACJ3D,EAAE2D,OAAOJ,UAAUpH,OAAO,cAGhC,KAID8G,EAAwBL,EAAKG,UAAUQ,WAAWlG,IAAIqD,MAAMuC,EAAuBrE,EAAmB9J,KAAK0N,SAAST,cAAcyB,MAAM,QAExIN,EAAyBN,EAAKG,UAAUQ,WAAWpH,OAAOuE,MAAMwC,EAAwBtE,EAAmB9J,KAAK0N,SAASR,gBAAgBwB,MAAM,OAEhJZ,EAAKG,UAAUW,aAAa,iBAAiB,GAC7Cd,EAAKa,SAASF,UAAUpH,OAAO,UAC/ByG,EAAKC,QAAS,EAEVD,EAAKe,QACPf,EAAKe,OAAOJ,UAAUlG,IAAI,cAI5BvI,KAAK0N,SAASP,OAAOnN,KAAM8N,EAC7B,GACC,CACDhH,IAAK,SACLC,MAAO,SAAgBiH,GACrB,IAAIF,EAAO9N,KAAKsO,QAAQN,GAEpBF,EAAKC,OACP/N,KAAKsE,MAAM0J,GAEXhO,KAAKwD,KAAKwK,GAIZhO,KAAK0N,SAASL,SAASrN,KAAM8N,EAC/B,GACC,CACDhH,IAAK,QACLC,MAAO,SAAeiH,GACpB,IAAIc,EAAwBC,EAExBjB,EAAO9N,KAAKsO,QAAQN,IAEvBc,EAAyBhB,EAAKG,UAAUQ,WAAWpH,OAAOuE,MAAMkD,EAAwBhF,EAAmB9J,KAAK0N,SAAST,cAAcyB,MAAM,QAE7IK,EAAyBjB,EAAKG,UAAUQ,WAAWlG,IAAIqD,MAAMmD,EAAwBjF,EAAmB9J,KAAK0N,SAASR,gBAAgBwB,MAAM,OAE7IZ,EAAKa,SAASF,UAAUlG,IAAI,UAC5BuF,EAAKG,UAAUW,aAAa,iBAAiB,GAC7Cd,EAAKC,QAAS,EAEVD,EAAKe,QACPf,EAAKe,OAAOJ,UAAUpH,OAAO,cAI/BrH,KAAK0N,SAASN,QAAQpN,KAAM8N,EAC9B,MAjI0ElB,EAAkBD,EAAYrH,UAAWsI,GAA2EhD,OAAOyB,eAAeM,EAAa,YAAa,CAAEH,UAAU,IAoIrPc,CACT,CA1H6B,GA8H7B,SAAS0B,IACPnM,SAASoM,iBAAiB,oBAAoBhD,SAAQ,SAAUiD,GAC9D,IAAIlC,EAAakC,EAAYrF,aAAa,kBACtCoD,EAAgBiC,EAAYrF,aAAa,uBACzCqD,EAAkBgC,EAAYrF,aAAa,yBAC3C0D,EAAQ,GACZ2B,EAAYD,iBAAiB,2BAA2BhD,SAAQ,SAAUkD,GACxE,IAAIrB,EAAO,CACTE,GAAImB,EAAGtF,aAAa,yBACpBoE,UAAWkB,EACXR,SAAU9L,SAAS+G,cAAcuF,EAAGtF,aAAa,0BACjDgF,OAAQM,EAAGvF,cAAc,yBACzBmE,OAA6C,SAArCoB,EAAGtF,aAAa,kBAE1B0D,EAAMrN,KAAK4N,EACb,IACA,IAAIR,EAAUC,EAAO,CACnBP,WAA2B,SAAfA,EACZC,cAAeA,GAAgCF,EAAQE,cACvDC,gBAAiBA,GAAoCH,EAAQG,iBAEjE,GACF,CAYA,SAASkC,EAAiBxI,EAAQyE,GAAkB,IAAIC,EAAOV,OAAOU,KAAK1E,GAAS,GAAIgE,OAAOW,sBAAuB,CAAE,IAAIC,EAAUZ,OAAOW,sBAAsB3E,GAASyE,IAAmBG,EAAUA,EAAQ7D,QAAO,SAAU8D,GAAO,OAAOb,OAAOc,yBAAyB9E,EAAQ6E,GAAKE,UAAY,KAAKL,EAAKpL,KAAK0L,MAAMN,EAAME,EAAU,CAAE,OAAOF,CAAM,CAE7V,SAAS+D,EAAsBvD,GAAU,IAAK,IAAIZ,EAAI,EAAGA,EAAIa,UAAU3I,OAAQ8H,IAAK,CAAE,IAAIc,EAAS,MAAQD,UAAUb,GAAKa,UAAUb,GAAK,CAAC,EAAGA,EAAI,EAAIkE,EAAiBxE,OAAOoB,IAAS,GAAIC,SAAQ,SAAUnF,GAAOwI,EAAwBxD,EAAQhF,EAAKkF,EAAOlF,GAAO,IAAK8D,OAAOuB,0BAA4BvB,OAAOwB,iBAAiBN,EAAQlB,OAAOuB,0BAA0BH,IAAWoD,EAAiBxE,OAAOoB,IAASC,SAAQ,SAAUnF,GAAO8D,OAAOyB,eAAeP,EAAQhF,EAAK8D,OAAOc,yBAAyBM,EAAQlF,GAAO,GAAI,CAAE,OAAOgF,CAAQ,CAE3hB,SAASwD,EAAwBhD,EAAKxF,EAAKC,GAAiK,OAApJD,KAAOwF,EAAO1B,OAAOyB,eAAeC,EAAKxF,EAAK,CAAEC,MAAOA,EAAO4E,YAAY,EAAMY,cAAc,EAAMC,UAAU,IAAkBF,EAAIxF,GAAOC,EAAgBuF,CAAK,CAExN,SAASiD,EAAwB7C,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAI5B,UAAU,oCAAwC,CAEhK,SAASyE,EAA0B1D,EAAQe,GAAS,IAAK,IAAI3B,EAAI,EAAGA,EAAI2B,EAAMzJ,OAAQ8H,IAAK,CAAE,IAAI4B,EAAaD,EAAM3B,GAAI4B,EAAWnB,WAAamB,EAAWnB,aAAc,EAAOmB,EAAWP,cAAe,EAAU,UAAWO,IAAYA,EAAWN,UAAW,GAAM5B,OAAOyB,eAAeP,EAAQgB,EAAWhG,IAAKgG,EAAa,CAAE,CA5CpU2C,OAAOnC,UAAYA,EA0BS,YAAxBzK,SAASoC,WAEX+J,IAGAnM,SAASzB,iBAAiB,mBAAoB4N,GAiBhD,IAAIU,EAAmB,CACrBzB,UAAW,KACX0B,WAAY,WAAuB,EACnCC,SAAU,WAAqB,EAC/BvC,SAAU,WAAqB,GAG7BwC,EAAwB,WAC1B,SAASA,IACP,IAAIlB,EAAW5C,UAAU3I,OAAS,QAAsByF,IAAjBkD,UAAU,GAAmBA,UAAU,GAAK,KAC/EyB,EAAUzB,UAAU3I,OAAS,EAAI2I,UAAU,QAAKlD,EAEpD0G,EAAwBvP,KAAM6P,GAE9B7P,KAAK8P,UAAYnB,EACjB3O,KAAK+P,WAAavC,EAAUA,EAAQS,UAAYyB,EAAiBzB,UACjEjO,KAAK0N,SAAW2B,EAAsBA,EAAsB,CAAC,EAAGK,GAAmBlC,GACnFxN,KAAKgQ,UAAW,EAEhBhQ,KAAK2N,OACP,CAtBF,IAA8BhB,EAAaiB,EA+EzC,OA/E4BjB,EAwBPkD,GAxBoBjC,EAwBV,CAAC,CAC9B9G,IAAK,QACLC,MAAO,WACL,IAAI8G,EAAQ7N,KAERA,KAAK+P,aACH/P,KAAK+P,WAAWE,aAAa,iBAC/BjQ,KAAKgQ,SAA6D,SAAlDhQ,KAAK+P,WAAWlG,aAAa,iBAG7C7J,KAAKgQ,UAAWhQ,KAAK8P,UAAUrB,UAAUyB,SAAS,UAGpDlQ,KAAK+P,WAAW3O,iBAAiB,SAAS,WACxCyM,EAAMmC,SAAWnC,EAAMsC,WAAatC,EAAMuC,QAC5C,IAEJ,GACC,CACDtJ,IAAK,WACLC,MAAO,WACL/G,KAAK8P,UAAUrB,UAAUlG,IAAI,UAEzBvI,KAAK+P,YACP/P,KAAK+P,WAAWnB,aAAa,gBAAiB,SAGhD5O,KAAKgQ,UAAW,EAEhBhQ,KAAK0N,SAASiC,WAAW3P,KAC3B,GACC,CACD8G,IAAK,SACLC,MAAO,WACL/G,KAAK8P,UAAUrB,UAAUpH,OAAO,UAE5BrH,KAAK+P,YACP/P,KAAK+P,WAAWnB,aAAa,gBAAiB,QAGhD5O,KAAKgQ,UAAW,EAEhBhQ,KAAK0N,SAASkC,SAAS5P,KACzB,GACC,CACD8G,IAAK,SACLC,MAAO,WACD/G,KAAKgQ,SACPhQ,KAAKmQ,WAELnQ,KAAKoQ,QAET,MA5EkFZ,EAA0B7C,EAAYrH,UAAWsI,GAAmFhD,OAAOyB,eAAeM,EAAa,YAAa,CAAEH,UAAU,IA+E7QqD,CACT,CAvE4B,GA2E5B,SAASQ,IACPxN,SAASoM,iBAAiB,0BAA0BhD,SAAQ,SAAUgC,GACpE,IAAIU,EAAW9L,SAASyN,eAAerC,EAAUpE,aAAa,yBAC9D,IAAIgG,EAASlB,EAAU,CACrBV,UAAWA,GAEf,GACF,CAYA,SAASsC,EAA2BxG,GAAO,OAQ3C,SAAoCA,GAAO,GAAIC,MAAMC,QAAQF,GAAM,OAAOyG,EAA0BzG,EAAM,CARxD0G,CAA2B1G,IAM7E,SAAkCK,GAAQ,GAAsB,oBAAXC,QAAmD,MAAzBD,EAAKC,OAAOC,WAA2C,MAAtBF,EAAK,cAAuB,OAAOJ,MAAMO,KAAKH,EAAO,CANhFsG,CAAyB3G,IAI9G,SAA6CU,EAAGC,GAAU,GAAKD,EAAL,CAAgB,GAAiB,iBAANA,EAAgB,OAAO+F,EAA0B/F,EAAGC,GAAS,IAAIC,EAAIC,OAAOtF,UAAUuF,SAAS/F,KAAK2F,GAAGtH,MAAM,GAAI,GAAiE,MAAnD,WAANwH,GAAkBF,EAAE/J,cAAaiK,EAAIF,EAAE/J,YAAY+I,MAAgB,QAANkB,GAAqB,QAANA,EAAoBX,MAAMO,KAAKE,GAAc,cAANE,GAAqB,2CAA2CzB,KAAKyB,GAAW6F,EAA0B/F,EAAGC,QAAjH,CAArP,CAA+W,CAJjUiG,CAAoC5G,IAE1J,WAAwC,MAAM,IAAIgB,UAAU,uIAAyI,CAFnC6F,EAA8B,CAUhM,SAASJ,EAA0BzG,EAAKkB,IAAkB,MAAPA,GAAeA,EAAMlB,EAAI3G,UAAQ6H,EAAMlB,EAAI3G,QAAQ,IAAK,IAAI8H,EAAI,EAAGC,EAAO,IAAInB,MAAMiB,GAAMC,EAAID,EAAKC,IAAOC,EAAKD,GAAKnB,EAAImB,GAAM,OAAOC,CAAM,CAE9L,SAAS0F,EAAiBjK,EAAQyE,GAAkB,IAAIC,EAAOV,OAAOU,KAAK1E,GAAS,GAAIgE,OAAOW,sBAAuB,CAAE,IAAIC,EAAUZ,OAAOW,sBAAsB3E,GAASyE,IAAmBG,EAAUA,EAAQ7D,QAAO,SAAU8D,GAAO,OAAOb,OAAOc,yBAAyB9E,EAAQ6E,GAAKE,UAAY,KAAKL,EAAKpL,KAAK0L,MAAMN,EAAME,EAAU,CAAE,OAAOF,CAAM,CAE7V,SAASwF,EAAsBhF,GAAU,IAAK,IAAIZ,EAAI,EAAGA,EAAIa,UAAU3I,OAAQ8H,IAAK,CAAE,IAAIc,EAAS,MAAQD,UAAUb,GAAKa,UAAUb,GAAK,CAAC,EAAGA,EAAI,EAAI2F,EAAiBjG,OAAOoB,IAAS,GAAIC,SAAQ,SAAUnF,GAAOiK,EAAwBjF,EAAQhF,EAAKkF,EAAOlF,GAAO,IAAK8D,OAAOuB,0BAA4BvB,OAAOwB,iBAAiBN,EAAQlB,OAAOuB,0BAA0BH,IAAW6E,EAAiBjG,OAAOoB,IAASC,SAAQ,SAAUnF,GAAO8D,OAAOyB,eAAeP,EAAQhF,EAAK8D,OAAOc,yBAAyBM,EAAQlF,GAAO,GAAI,CAAE,OAAOgF,CAAQ,CAE3hB,SAASiF,EAAwBzE,EAAKxF,EAAKC,GAAiK,OAApJD,KAAOwF,EAAO1B,OAAOyB,eAAeC,EAAKxF,EAAK,CAAEC,MAAOA,EAAO4E,YAAY,EAAMY,cAAc,EAAMC,UAAU,IAAkBF,EAAIxF,GAAOC,EAAgBuF,CAAK,CAExN,SAAS0E,EAAwBtE,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAI5B,UAAU,oCAAwC,CAEhK,SAASkG,EAA0BnF,EAAQe,GAAS,IAAK,IAAI3B,EAAI,EAAGA,EAAI2B,EAAMzJ,OAAQ8H,IAAK,CAAE,IAAI4B,EAAaD,EAAM3B,GAAI4B,EAAWnB,WAAamB,EAAWnB,aAAc,EAAOmB,EAAWP,cAAe,EAAU,UAAWO,IAAYA,EAAWN,UAAW,GAAM5B,OAAOyB,eAAeP,EAAQgB,EAAWhG,IAAKgG,EAAa,CAAE,CAzCpU2C,OAAOI,SAAWA,EAWU,YAAxBhN,SAASoC,WAEXoL,IAGAxN,SAASzB,iBAAiB,mBAAoBiP,GA6BhD,IAAIa,EAAmB,CACrBC,gBAAiB,EACjBC,WAAY,CACV7D,MAAO,GACPN,cAAe,4BACfC,gBAAiB,yEAEnBmE,SAAU,IACVC,OAAQ,WAAmB,EAC3BC,OAAQ,WAAmB,EAC3BC,SAAU,WAAqB,GAG7BC,EAAwB,WAC1B,SAASA,IACP,IAAIlE,EAAQxB,UAAU3I,OAAS,QAAsByF,IAAjBkD,UAAU,GAAmBA,UAAU,GAAK,GAC5EyB,EAAUzB,UAAU3I,OAAS,QAAsByF,IAAjBkD,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAEnFiF,EAAwBhR,KAAMyR,GAE9BzR,KAAKyN,OAASF,EACdvN,KAAK0N,SAAWoD,EAAsBA,EAAsBA,EAAsB,CAAC,EAAGI,GAAmB1D,GAAU,CAAC,EAAG,CACrH4D,WAAYN,EAAsBA,EAAsB,CAAC,EAAGI,EAAiBE,YAAa5D,EAAQ4D,cAEpGpR,KAAK0R,YAAc1R,KAAKsO,QAAQtO,KAAK0N,SAASyD,iBAC9CnR,KAAK2R,YAAc3R,KAAK0N,SAAS0D,WAAW7D,MAC5CvN,KAAK4R,UAAY,KAEjB5R,KAAK2N,OACP,CA/BF,IAA8BhB,EAAaiB,EA4NzC,OA5N4BjB,EAqCP8E,GArCoB7D,EAqCV,CAAC,CAC9B9G,IAAK,QACLC,MAAO,WACL,IAAI8G,EAAQ7N,KAEZA,KAAKyN,OAAOzF,KAAI,SAAU8F,GACxBA,EAAKqB,GAAGV,UAAUlG,IAAI,WAAY,UAAW,iBAAkB,YACjE,IAGIvI,KAAK6R,iBACP7R,KAAK8R,QAAQ9R,KAAK6R,iBAAiBE,UAEnC/R,KAAK8R,QAAQ,GAGf9R,KAAK2R,YAAY3J,KAAI,SAAUgK,EAAWD,GACxCC,EAAU7C,GAAG/N,iBAAiB,SAAS,WACrCyM,EAAMiE,QAAQC,EAChB,GACF,GACF,GACC,CACDjL,IAAK,UACLC,MAAO,SAAiBgL,GACtB,OAAO/R,KAAKyN,OAAOsE,EACrB,GAMC,CACDjL,IAAK,UACLC,MAAO,SAAiBgL,GACtB,IAAIE,EAAWjS,KAAKyN,OAAOsE,GACvBG,EAAgB,CAClB,KAA8B,IAAtBD,EAASF,SAAiB/R,KAAKyN,OAAOzN,KAAKyN,OAAOrK,OAAS,GAAKpD,KAAKyN,OAAOwE,EAASF,SAAW,GACxG,OAAUE,EACV,MAASA,EAASF,WAAa/R,KAAKyN,OAAOrK,OAAS,EAAIpD,KAAKyN,OAAO,GAAKzN,KAAKyN,OAAOwE,EAASF,SAAW,IAG3G/R,KAAKmS,QAAQD,GAEblS,KAAKoS,eAAeH,EAASF,UAEzB/R,KAAK4R,YACP5R,KAAKqS,QACLrS,KAAKsS,SAGPtS,KAAK0N,SAAS8D,SAASxR,KACzB,GAKC,CACD8G,IAAK,OACLC,MAAO,WACL,IAEIkL,EAFAM,EAAavS,KAAK6R,iBAKpBI,EADEM,EAAWR,WAAa/R,KAAKyN,OAAOrK,OAAS,EACpCpD,KAAKyN,OAAO,GAEZzN,KAAKyN,OAAO8E,EAAWR,SAAW,GAG/C/R,KAAK8R,QAAQG,EAASF,UAEtB/R,KAAK0N,SAAS4D,OAAOtR,KACvB,GAKC,CACD8G,IAAK,OACLC,MAAO,WACL,IAEIyL,EAFAD,EAAavS,KAAK6R,iBAKpBW,EAD0B,IAAxBD,EAAWR,SACF/R,KAAKyN,OAAOzN,KAAKyN,OAAOrK,OAAS,GAEjCpD,KAAKyN,OAAO8E,EAAWR,SAAW,GAG/C/R,KAAK8R,QAAQU,EAAST,UAEtB/R,KAAK0N,SAAS6D,OAAOvR,KACvB,GAMC,CACD8G,IAAK,UACLC,MAAO,SAAiBmL,GAEtBlS,KAAKyN,OAAOzF,KAAI,SAAU8F,GACxBA,EAAKqB,GAAGV,UAAUlG,IAAI,SACxB,IAGA2J,EAAcO,KAAKtD,GAAGV,UAAUpH,OAAO,oBAAqB,mBAAoB,gBAAiB,SAAU,QAC3G6K,EAAcO,KAAKtD,GAAGV,UAAUlG,IAAI,oBAAqB,QAEzD2J,EAAcQ,OAAOvD,GAAGV,UAAUpH,OAAO,oBAAqB,mBAAoB,gBAAiB,SAAU,QAC7G6K,EAAcQ,OAAOvD,GAAGV,UAAUlG,IAAI,gBAAiB,QAEvD2J,EAAcS,MAAMxD,GAAGV,UAAUpH,OAAO,oBAAqB,mBAAoB,gBAAiB,SAAU,QAC5G6K,EAAcS,MAAMxD,GAAGV,UAAUlG,IAAI,mBAAoB,OAC3D,GAKC,CACDzB,IAAK,QACLC,MAAO,WACL,IAAIsH,EAASrO,KAEbA,KAAK4R,UAAYgB,aAAY,WAC3BvE,EAAOwE,MACT,GAAG7S,KAAK0N,SAAS2D,SACnB,GAKC,CACDvK,IAAK,QACLC,MAAO,WACL+L,cAAc9S,KAAK4R,UACrB,GAKC,CACD9K,IAAK,iBACLC,MAAO,WACL,OAAO/G,KAAK0R,WACd,GAMC,CACD5K,IAAK,iBACLC,MAAO,SAAwBgL,GAC7B,IAKMgB,EAAuBC,EALzBC,EAASjT,KAEbA,KAAK0R,YAAc1R,KAAKyN,OAAOsE,GAE3B/R,KAAK2R,YAAYvO,SAGnBpD,KAAK2R,YAAY3J,KAAI,SAAUgK,GAC7B,IAAIkB,EAAuBC,EAE3BnB,EAAU7C,GAAGP,aAAa,eAAgB,UAEzCsE,EAAwBlB,EAAU7C,GAAGV,WAAWpH,OAAOuE,MAAMsH,EAAuB3C,EAA2B0C,EAAOvF,SAAS0D,WAAWnE,cAAcyB,MAAM,QAE9JyE,EAAyBnB,EAAU7C,GAAGV,WAAWlG,IAAIqD,MAAMuH,EAAwB5C,EAA2B0C,EAAOvF,SAAS0D,WAAWlE,gBAAgBwB,MAAM,MAClK,KAECqE,EAAwB/S,KAAK2R,YAAYI,GAAU5C,GAAGV,WAAWlG,IAAIqD,MAAMmH,EAAuBxC,EAA2BvQ,KAAK0N,SAAS0D,WAAWnE,cAAcyB,MAAM,QAE1KsE,EAAyBhT,KAAK2R,YAAYI,GAAU5C,GAAGV,WAAWpH,OAAOuE,MAAMoH,EAAwBzC,EAA2BvQ,KAAK0N,SAAS0D,WAAWlE,gBAAgBwB,MAAM,OAElL1O,KAAK2R,YAAYI,GAAU5C,GAAGP,aAAa,eAAgB,QAE/D,MAzNkFqC,EAA0BtE,EAAYrH,UAAWsI,GAAmFhD,OAAOyB,eAAeM,EAAa,YAAa,CAAEH,UAAU,IA4N7QiF,CACT,CA9M4B,GAkN5B,SAAS2B,IACPvQ,SAASoM,iBAAiB,mBAAmBhD,SAAQ,SAAUoH,GAC7D,IAAIhC,EAAWgC,EAAWxJ,aAAa,0BACnCyJ,EAAqD,UAA7CD,EAAWxJ,aAAa,iBAChC0D,EAAQ,GACR4D,EAAkB,EAElBkC,EAAWpE,iBAAiB,wBAAwB7L,QACtDmN,EAA2B8C,EAAWpE,iBAAiB,yBAAyBjH,KAAI,SAAUuL,EAAgBxB,GAC5GxE,EAAMrN,KAAK,CACT6R,SAAUA,EACV5C,GAAIoE,IAGoD,WAAtDA,EAAe1J,aAAa,wBAC9BsH,EAAkBY,EAEtB,IAGF,IAAIX,EAAa,GAEbiC,EAAWpE,iBAAiB,4BAA4B7L,QAC1DmN,EAA2B8C,EAAWpE,iBAAiB,6BAA6BjH,KAAI,SAAUwL,GAChGpC,EAAWlR,KAAK,CACd6R,SAAUyB,EAAY3J,aAAa,0BACnCsF,GAAIqE,GAER,IAGF,IAAIC,EAAW,IAAIhC,EAASlE,EAAO,CACjC4D,gBAAiBA,EACjBC,WAAY,CACV7D,MAAO6D,GAETC,SAAUA,GAAsBH,EAAiBG,WAG/CiC,GACFG,EAASnB,QAIX,IAAIoB,EAAiBL,EAAWzJ,cAAc,wBAC1C+J,EAAiBN,EAAWzJ,cAAc,wBAE1C8J,GACFA,EAAetS,iBAAiB,SAAS,WACvCqS,EAASZ,MACX,IAGEc,GACFA,EAAevS,iBAAiB,SAAS,WACvCqS,EAASG,MACX,GAEJ,GACF,CAYA,SAASC,EAAgBjN,EAAQyE,GAAkB,IAAIC,EAAOV,OAAOU,KAAK1E,GAAS,GAAIgE,OAAOW,sBAAuB,CAAE,IAAIC,EAAUZ,OAAOW,sBAAsB3E,GAASyE,IAAmBG,EAAUA,EAAQ7D,QAAO,SAAU8D,GAAO,OAAOb,OAAOc,yBAAyB9E,EAAQ6E,GAAKE,UAAY,KAAKL,EAAKpL,KAAK0L,MAAMN,EAAME,EAAU,CAAE,OAAOF,CAAM,CAE5V,SAASwI,EAAqBhI,GAAU,IAAK,IAAIZ,EAAI,EAAGA,EAAIa,UAAU3I,OAAQ8H,IAAK,CAAE,IAAIc,EAAS,MAAQD,UAAUb,GAAKa,UAAUb,GAAK,CAAC,EAAGA,EAAI,EAAI2I,EAAgBjJ,OAAOoB,IAAS,GAAIC,SAAQ,SAAUnF,GAAOiN,EAAuBjI,EAAQhF,EAAKkF,EAAOlF,GAAO,IAAK8D,OAAOuB,0BAA4BvB,OAAOwB,iBAAiBN,EAAQlB,OAAOuB,0BAA0BH,IAAW6H,EAAgBjJ,OAAOoB,IAASC,SAAQ,SAAUnF,GAAO8D,OAAOyB,eAAeP,EAAQhF,EAAK8D,OAAOc,yBAAyBM,EAAQlF,GAAO,GAAI,CAAE,OAAOgF,CAAQ,CAEvhB,SAASiI,EAAuBzH,EAAKxF,EAAKC,GAAiK,OAApJD,KAAOwF,EAAO1B,OAAOyB,eAAeC,EAAKxF,EAAK,CAAEC,MAAOA,EAAO4E,YAAY,EAAMY,cAAc,EAAMC,UAAU,IAAkBF,EAAIxF,GAAOC,EAAgBuF,CAAK,CAEvN,SAAS0H,EAAuBtH,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAI5B,UAAU,oCAAwC,CAE/J,SAASkJ,EAAyBnI,EAAQe,GAAS,IAAK,IAAI3B,EAAI,EAAGA,EAAI2B,EAAMzJ,OAAQ8H,IAAK,CAAE,IAAI4B,EAAaD,EAAM3B,GAAI4B,EAAWnB,WAAamB,EAAWnB,aAAc,EAAOmB,EAAWP,cAAe,EAAU,UAAWO,IAAYA,EAAWN,UAAW,GAAM5B,OAAOyB,eAAeP,EAAQgB,EAAWhG,IAAKgG,EAAa,CAAE,CAjFnU2C,OAAOgC,SAAWA,EA+DU,YAAxB5O,SAASoC,WAEXmO,IAGAvQ,SAASzB,iBAAiB,mBAAoBgS,GAiBhD,IAAIc,EAAkB,CACpBjG,UAAW,KACXkG,WAAY,qBACZC,SAAU,IACVC,OAAQ,WACRC,OAAQ,WAAmB,GAGzBC,EAAuB,WACzB,SAASA,IACP,IAAI5F,EAAW5C,UAAU3I,OAAS,QAAsByF,IAAjBkD,UAAU,GAAmBA,UAAU,GAAK,KAC/EyB,EAAUzB,UAAU3I,OAAS,QAAsByF,IAAjBkD,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAEnFiI,EAAuBhU,KAAMuU,GAE7BvU,KAAK8P,UAAYnB,EACjB3O,KAAK+P,WAAavC,EAAUA,EAAQS,UAAYiG,EAAgBjG,UAChEjO,KAAK0N,SAAWoG,EAAqBA,EAAqB,CAAC,EAAGI,GAAkB1G,GAEhFxN,KAAK2N,OACP,CAtBF,IAA6BhB,EAAaiB,EAkDxC,OAlD2BjB,EAwBP4H,GAxBoB3G,EAwBX,CAAC,CAC5B9G,IAAK,QACLC,MAAO,WACL,IAAI8G,EAAQ7N,KAERA,KAAK+P,YACP/P,KAAK+P,WAAW3O,iBAAiB,SAAS,WACxCyM,EAAM2G,MACR,GAEJ,GACC,CACD1N,IAAK,OACLC,MAAO,WACL,IAAIsH,EAASrO,KAEbA,KAAK8P,UAAUrB,UAAUlG,IAAIvI,KAAK0N,SAASyG,WAAY,YAAYM,OAAOzU,KAAK0N,SAAS0G,UAAWpU,KAAK0N,SAAS2G,OAAQ,aAEzHpS,YAAW,WACToM,EAAOyB,UAAUrB,UAAUlG,IAAI,SACjC,GAAGvI,KAAK0N,SAAS0G,UAEjBpU,KAAK0N,SAAS4G,OAAOtU,KAAMA,KAAK8P,UAClC,MA/CiFmE,EAAyBtH,EAAYrH,UAAWsI,GAAkFhD,OAAOyB,eAAeM,EAAa,YAAa,CAAEH,UAAU,IAkD1Q+H,CACT,CAzC2B,GA6C3B,SAASG,IACP7R,SAASoM,iBAAiB,yBAAyBhD,SAAQ,SAAUgC,GACnE,IAAIU,EAAW9L,SAAS+G,cAAcqE,EAAUpE,aAAa,wBAC7D,IAAI0K,EAAQ5F,EAAU,CACpBV,UAAWA,GAEf,GACF,CAYA,SAAS0G,EAAUC,GACjB,GAAY,MAARA,EACF,OAAOnF,OAGT,GAAwB,oBAApBmF,EAAK/J,WAAkC,CACzC,IAAIgK,EAAgBD,EAAKC,cACzB,OAAOA,GAAgBA,EAAcC,aAAwBrF,MAC/D,CAEA,OAAOmF,CACT,CAIA,SAASG,EAAUH,GAEjB,OAAOA,aADUD,EAAUC,GAAMI,SACIJ,aAAgBI,OACvD,CAEA,SAASC,EAAcL,GAErB,OAAOA,aADUD,EAAUC,GAAMM,aACIN,aAAgBM,WACvD,CAEA,SAASC,EAAaP,GAEpB,MAA0B,oBAAfQ,aAKJR,aADUD,EAAUC,GAAMQ,YACIR,aAAgBQ,WACvD,CAtDA3F,OAAO8E,QAAUA,EAWW,YAAxB1R,SAASoC,WAEXyP,IAGA7R,SAASzB,iBAAiB,mBAAoBsT,GA0ChD,IAAIW,EAAWhT,KAAKiT,IAChBC,EAAWlT,KAAKE,IAChBiT,EAAQnT,KAAKmT,MAIjB,SAASC,EAAsB/L,EAASgM,QACjB,IAAjBA,IACFA,GAAe,GAGjB,IAAIC,EAAOjM,EAAQ+L,wBACfG,EAAS,EACTC,EAAS,EAEb,GAAIZ,EAAcvL,IAAYgM,EAAc,CAC1C,IAAII,EAAepM,EAAQoM,aACvBC,EAAcrM,EAAQqM,YAGtBA,EAAc,IAChBH,EAASJ,EAAMG,EAAKK,OAASD,GAAe,GAG1CD,EAAe,IACjBD,EAASL,EAAMG,EAAKM,QAAUH,GAAgB,EAElD,CAEA,MAAO,CACLE,MAAOL,EAAKK,MAAQJ,EACpBK,OAAQN,EAAKM,OAASJ,EACtBK,IAAKP,EAAKO,IAAML,EAChBlD,MAAOgD,EAAKhD,MAAQiD,EACpBO,OAAQR,EAAKQ,OAASN,EACtBpD,KAAMkD,EAAKlD,KAAOmD,EAClBQ,EAAGT,EAAKlD,KAAOmD,EACfS,EAAGV,EAAKO,IAAML,EAElB,CAGA,SAASS,EAAgB1B,GACvB,IAAI2B,EAAM5B,EAAUC,GAGpB,MAAO,CACL4B,WAHeD,EAAIE,YAInBC,UAHcH,EAAII,YAKtB,CAqBA,SAASC,EAAYlN,GACnB,OAAOA,GAAWA,EAAQmN,UAAY,IAAI3R,cAAgB,IAC5D,CAGA,SAAS4R,EAAmBpN,GAE1B,QAASqL,EAAUrL,GAAWA,EAAQmL,cACtCnL,EAAQ7G,WAAa4M,OAAO5M,UAAUkU,eACxC,CAKA,SAASC,EAAoBtN,GAQ3B,OAAO+L,EAAsBqB,EAAmBpN,IAAU+I,KAAO6D,EAAgB5M,GAAS8M,UAC5F,CAGA,SAASS,EAAiBvN,GACxB,OAAOiL,EAAUjL,GAASuN,iBAAiBvN,EAC7C,CAGA,SAASwN,EAAexN,GAEtB,IAAIyN,EAAoBF,EAAiBvN,GACrC0N,EAAWD,EAAkBC,SAC7BC,EAAYF,EAAkBE,UAC9BC,EAAYH,EAAkBG,UAElC,MAAO,6BAA6BpO,KAAKkO,EAAWE,EAAYD,EAClE,CAoBA,SAASE,EAAiBC,EAAyBC,EAAcC,QAC/C,IAAZA,IACFA,GAAU,GAGZ,IAxEqB9C,EAXOlL,EAmFxBiO,EAA0B1C,EAAcwC,GACxCG,EAAuB3C,EAAcwC,IAf3C,SAAyB/N,GACvB,IAAIiM,EAAOjM,EAAQ+L,wBACfG,EAASJ,EAAMG,EAAKK,OAAStM,EAAQqM,aAAe,EACpDF,EAASL,EAAMG,EAAKM,QAAUvM,EAAQoM,cAAgB,EAC1D,OAAkB,IAAXF,GAA2B,IAAXC,CACzB,CAU4DgC,CAAgBJ,GACtEV,EAAkBD,EAAmBW,GACrC9B,EAAOF,EAAsB+B,EAAyBI,GACtDE,EAAS,CACXtB,WAAY,EACZE,UAAW,GAETqB,EAAU,CACZ3B,EAAG,EACHC,EAAG,GAkBL,OAfIsB,IAA4BA,IAA4BD,MACxB,SAA9Bd,EAAYa,IAChBP,EAAeH,MACbe,GAxFiBlD,EAwFM6C,KAvFd9C,EAAUC,IAAUK,EAAcL,GAXxC,CACL4B,YAF0B9M,EAeEkL,GAbR4B,WACpBE,UAAWhN,EAAQgN,WAUZJ,EAAgB1B,IAyFnBK,EAAcwC,KAChBM,EAAUtC,EAAsBgC,GAAc,IACtCrB,GAAKqB,EAAaO,WAC1BD,EAAQ1B,GAAKoB,EAAaQ,WACjBlB,IACTgB,EAAQ3B,EAAIY,EAAoBD,KAI7B,CACLX,EAAGT,EAAKlD,KAAOqF,EAAOtB,WAAauB,EAAQ3B,EAC3CC,EAAGV,EAAKO,IAAM4B,EAAOpB,UAAYqB,EAAQ1B,EACzCL,MAAOL,EAAKK,MACZC,OAAQN,EAAKM,OAEjB,CAKA,SAASiC,EAAcxO,GACrB,IAAIyO,EAAa1C,EAAsB/L,GAGnCsM,EAAQtM,EAAQqM,YAChBE,EAASvM,EAAQoM,aAUrB,OARIzT,KAAK+V,IAAID,EAAWnC,MAAQA,IAAU,IACxCA,EAAQmC,EAAWnC,OAGjB3T,KAAK+V,IAAID,EAAWlC,OAASA,IAAW,IAC1CA,EAASkC,EAAWlC,QAGf,CACLG,EAAG1M,EAAQ2O,WACXhC,EAAG3M,EAAQ4O,UACXtC,MAAOA,EACPC,OAAQA,EAEZ,CAKA,SAASsC,EAAc7O,GACrB,MAA6B,SAAzBkN,EAAYlN,GACPA,EAMPA,EAAQ8O,cACR9O,EAAQ+O,aACRtD,EAAazL,GAAWA,EAAQgP,KAAO,OAEvC5B,EAAmBpN,EAGvB,CAMA,SAASiP,EAAgB/D,GACvB,MAAI,CAAC,OAAQ,OAAQ,aAAavR,QAAQuT,EAAYhC,KAAU,EAEvDA,EAAKC,cAAc+D,KAGxB3D,EAAcL,IAASsC,EAAetC,GACjCA,EAGF+D,EAAgBJ,EAAc3D,GACvC,CAaA,SAASiE,GAAkBnP,EAASoP,GAClC,IAAIC,OAES,IAATD,IACFA,EAAO,IAGT,IAAIE,EAAeL,EAAgBjP,GAC/BuP,EAASD,KAAqE,OAAlDD,EAAwBrP,EAAQmL,oBAAyB,EAASkE,EAAsBH,MACpHrC,EAAM5B,EAAUqE,GAChBlN,EAASmN,EAAS,CAAC1C,GAAK9B,OAAO8B,EAAI2C,gBAAkB,GAAIhC,EAAe8B,GAAgBA,EAAe,IAAMA,EAC7GG,EAAcL,EAAKrE,OAAO3I,GAC9B,OAAOmN,EAASE,EAChBA,EAAY1E,OAAOoE,GAAkBN,EAAczM,IACrD,CAGA,SAASsN,GAAe1P,GACtB,MAAO,CAAC,QAAS,KAAM,MAAMrG,QAAQuT,EAAYlN,KAAa,CAChE,CASA,SAAS2P,GAAoB3P,GAC3B,OAAKuL,EAAcvL,IACoB,UAAvCuN,EAAiBvN,GAASqI,SAInBrI,EAAQ+N,aAHN,IAIX,CAoCA,SAAS6B,GAAgB5P,GAIvB,IAHA,IAAI+F,EAASkF,EAAUjL,GACnB+N,EAAe4B,GAAoB3P,GAEhC+N,GAAgB2B,GAAe3B,IAA6D,WAA5CR,EAAiBQ,GAAc1F,UACpF0F,EAAe4B,GAAoB5B,GAGrC,OAAIA,IAA+C,SAA9Bb,EAAYa,IAA0D,SAA9Bb,EAAYa,IAAwE,WAA5CR,EAAiBQ,GAAc1F,UAC3HtC,EAGFgI,GA5CT,SAA4B/N,GAC1B,IAAI6P,GAAsE,IAA1DC,UAAUC,UAAUvU,cAAc7B,QAAQ,WAG1D,IAFuD,IAA5CmW,UAAUC,UAAUpW,QAAQ,YAE3B4R,EAAcvL,IAII,UAFXuN,EAAiBvN,GAEnBqI,SACb,OAAO,KAMX,IAFA,IAAI2H,EAAcnB,EAAc7O,GAEzBuL,EAAcyE,IAAgB,CAAC,OAAQ,QAAQrW,QAAQuT,EAAY8C,IAAgB,GAAG,CAC3F,IAAIC,EAAM1C,EAAiByC,GAI3B,GAAsB,SAAlBC,EAAIC,WAA4C,SAApBD,EAAIE,aAA0C,UAAhBF,EAAIG,UAAiF,IAA1D,CAAC,YAAa,eAAezW,QAAQsW,EAAII,aAAsBR,GAAgC,WAAnBI,EAAII,YAA2BR,GAAaI,EAAIhS,QAAyB,SAAfgS,EAAIhS,OACjO,OAAO+R,EAEPA,EAAcA,EAAYjB,UAE9B,CAEA,OAAO,IACT,CAgByBuB,CAAmBtQ,IAAY+F,CACxD,CAEA,IAAIwK,GAAY,MACZ9D,GAAS,SACTxD,GAAQ,QACRF,GAAO,OACPyH,GAAO,OACPC,GAAiB,CAACF,GAAW9D,GAAQxD,GAAOF,IAC5C1R,GAAQ,QACRqZ,GAAM,MAENC,GAAW,WACXC,GAAS,SAETC,GAAmCJ,GAAeK,QAAO,SAAUC,EAAKC,GAC1E,OAAOD,EAAIhG,OAAO,CAACiG,EAAY,IAAM3Z,GAAO2Z,EAAY,IAAMN,IAChE,GAAG,IACCO,GAAgC,GAAGlG,OAAO0F,GAAgB,CAACD,KAAOM,QAAO,SAAUC,EAAKC,GAC1F,OAAOD,EAAIhG,OAAO,CAACiG,EAAWA,EAAY,IAAM3Z,GAAO2Z,EAAY,IAAMN,IAC3E,GAAG,IAaCQ,GAAiB,CAXJ,aACN,OACK,YAEC,aACN,OACK,YAEE,cACN,QACK,cAKjB,SAASC,GAAMC,GACb,IAAI9S,EAAM,IAAI+S,IACVC,EAAU,IAAIC,IACdC,EAAS,GAKb,SAASC,EAAKC,GACZJ,EAAQzS,IAAI6S,EAAS3R,MACN,GAAGgL,OAAO2G,EAASC,UAAY,GAAID,EAASE,kBAAoB,IACtErP,SAAQ,SAAUsP,GACzB,IAAKP,EAAQQ,IAAID,GAAM,CACrB,IAAIE,EAAczT,EAAI0T,IAAIH,GAEtBE,GACFN,EAAKM,EAET,CACF,IACAP,EAAOhb,KAAKkb,EACd,CAQA,OAzBAN,EAAU7O,SAAQ,SAAUmP,GAC1BpT,EAAI2T,IAAIP,EAAS3R,KAAM2R,EACzB,IAiBAN,EAAU7O,SAAQ,SAAUmP,GACrBJ,EAAQQ,IAAIJ,EAAS3R,OAExB0R,EAAKC,EAET,IACOF,CACT,CA0DA,IAEIU,GAAkB,CACpBlB,UAAW,SACXI,UAAW,GACXe,SAAU,YAGZ,SAASC,KACP,IAAK,IAAIC,EAAOhQ,UAAU3I,OAAQwF,EAAO,IAAIoB,MAAM+R,GAAOC,EAAO,EAAGA,EAAOD,EAAMC,IAC/EpT,EAAKoT,GAAQjQ,UAAUiQ,GAGzB,OAAQpT,EAAKqT,MAAK,SAAUvS,GAC1B,QAASA,GAAoD,mBAAlCA,EAAQ+L,sBACrC,GACF,CAEA,SAASyG,GAAgBC,QACE,IAArBA,IACFA,EAAmB,CAAC,GAGtB,IAAIC,EAAoBD,EACpBE,EAAwBD,EAAkBE,iBAC1CA,OAA6C,IAA1BD,EAAmC,GAAKA,EAC3DE,EAAyBH,EAAkBI,eAC3CA,OAA4C,IAA3BD,EAAoCX,GAAkBW,EAC3E,OAAO,SAAsBE,EAAWnC,EAAQ9M,QAC9B,IAAZA,IACFA,EAAUgP,GAGZ,IA9EcE,EACZC,EA6EE3X,EAAQ,CACV0V,UAAW,SACXkC,iBAAkB,GAClBpP,QAAS5C,OAAOiS,OAAO,CAAC,EAAGjB,GAAiBY,GAC5CM,cAAe,CAAC,EAChBC,SAAU,CACRN,UAAWA,EACXnC,OAAQA,GAEV0C,WAAY,CAAC,EACbC,OAAQ,CAAC,GAEPC,EAAmB,GACnBC,GAAc,EACdzQ,EAAW,CACb1H,MAAOA,EACPoY,WAAY,SAAoBC,GAC9B,IAAI7P,EAAsC,mBAArB6P,EAAkCA,EAAiBrY,EAAMwI,SAAW6P,EACzFC,IACAtY,EAAMwI,QAAU5C,OAAOiS,OAAO,CAAC,EAAGL,EAAgBxX,EAAMwI,QAASA,GACjExI,EAAMuY,cAAgB,CACpBd,UAAW1H,EAAU0H,GAAa5D,GAAkB4D,GAAaA,EAAUe,eAAiB3E,GAAkB4D,EAAUe,gBAAkB,GAC1IlD,OAAQzB,GAAkByB,IAI5B,IAxFaQ,EACf2C,EAuFMb,EAnHZ,SAAwB9B,GAEtB,IAAI8B,EAAmB/B,GAAMC,GAE7B,OAAOF,GAAeJ,QAAO,SAAUC,EAAKiD,GAC1C,OAAOjD,EAAIhG,OAAOmI,EAAiBjV,QAAO,SAAUyT,GAClD,OAAOA,EAASsC,QAAUA,CAC5B,IACF,GAAG,GACL,CA0G+BC,EAxFV7C,EAwFqC,GAAGrG,OAAO6H,EAAkBtX,EAAMwI,QAAQsN,WAvF9F2C,EAAS3C,EAAUN,QAAO,SAAUiD,EAAQG,GAC9C,IAAIC,EAAWJ,EAAOG,EAAQnU,MAK9B,OAJAgU,EAAOG,EAAQnU,MAAQoU,EAAWjT,OAAOiS,OAAO,CAAC,EAAGgB,EAAUD,EAAS,CACrEpQ,QAAS5C,OAAOiS,OAAO,CAAC,EAAGgB,EAASrQ,QAASoQ,EAAQpQ,SACrD3J,KAAM+G,OAAOiS,OAAO,CAAC,EAAGgB,EAASha,KAAM+Z,EAAQ/Z,QAC5C+Z,EACEH,CACT,GAAG,CAAC,GAEG7S,OAAOU,KAAKmS,GAAQzV,KAAI,SAAUlB,GACvC,OAAO2W,EAAO3W,EAChB,MAsFM,OARA9B,EAAM4X,iBAAmBA,EAAiBjV,QAAO,SAAUmW,GACzD,OAAOA,EAAE7d,OACX,IA0GF+E,EAAM4X,iBAAiB3Q,SAAQ,SAAU8R,GACvC,IAAItU,EAAOsU,EAAMtU,KACbuU,EAAgBD,EAAMvQ,QACtBA,OAA4B,IAAlBwQ,EAA2B,CAAC,EAAIA,EAC1CC,EAASF,EAAME,OAEnB,GAAsB,mBAAXA,EAAuB,CAChC,IAAIC,EAAYD,EAAO,CACrBjZ,MAAOA,EACPyE,KAAMA,EACNiD,SAAUA,EACVc,QAASA,IAKX0P,EAAiBhd,KAAKge,GAFT,WAAmB,EAGlC,CACF,IAtHSxR,EAASyR,QAClB,EAMAC,YAAa,WACX,IAAIjB,EAAJ,CAIA,IAAIkB,EAAkBrZ,EAAM+X,SACxBN,EAAY4B,EAAgB5B,UAC5BnC,EAAS+D,EAAgB/D,OAG7B,GAAKwB,GAAiBW,EAAWnC,GAAjC,CAOAtV,EAAMsZ,MAAQ,CACZ7B,UAAWlF,EAAiBkF,EAAWnD,GAAgBgB,GAAoC,UAA3BtV,EAAMwI,QAAQqO,UAC9EvB,OAAQpC,EAAcoC,IAOxBtV,EAAMuZ,OAAQ,EACdvZ,EAAM0V,UAAY1V,EAAMwI,QAAQkN,UAKhC1V,EAAM4X,iBAAiB3Q,SAAQ,SAAUmP,GACvC,OAAOpW,EAAM8X,cAAc1B,EAAS3R,MAAQmB,OAAOiS,OAAO,CAAC,EAAGzB,EAASvX,KACzE,IAGA,IAFA,IAES2a,EAAQ,EAAGA,EAAQxZ,EAAM4X,iBAAiBxZ,OAAQob,IAGzD,IAAoB,IAAhBxZ,EAAMuZ,MAAV,CAMA,IAAIE,EAAwBzZ,EAAM4X,iBAAiB4B,GAC/C9B,EAAK+B,EAAsB/B,GAC3BgC,EAAyBD,EAAsBjR,QAC/CE,OAAsC,IAA3BgR,EAAoC,CAAC,EAAIA,EACpDjV,EAAOgV,EAAsBhV,KAEf,mBAAPiT,IACT1X,EAAQ0X,EAAG,CACT1X,MAAOA,EACPwI,QAASE,EACTjE,KAAMA,EACNiD,SAAUA,KACN1H,EAdR,MAHEA,EAAMuZ,OAAQ,EACdC,GAAS,CA5Bb,CAXA,CA0DF,EAGAL,QAzLYzB,EAyLK,WACf,OAAO,IAAIiC,SAAQ,SAAUC,GAC3BlS,EAAS0R,cACTQ,EAAQ5Z,EACV,GACF,EA5LG,WAUL,OATK2X,IACHA,EAAU,IAAIgC,SAAQ,SAAUC,GAC9BD,QAAQC,UAAUC,MAAK,WACrBlC,OAAU9T,EACV+V,EAAQlC,IACV,GACF,KAGKC,CACT,GAkLImC,QAAS,WACPxB,IACAH,GAAc,CAChB,GAGF,IAAKrB,GAAiBW,EAAWnC,GAG/B,OAAO5N,EAmCT,SAAS4Q,IACPJ,EAAiBjR,SAAQ,SAAUyQ,GACjC,OAAOA,GACT,IACAQ,EAAmB,EACrB,CAEA,OAvCAxQ,EAAS0Q,WAAW5P,GAASqR,MAAK,SAAU7Z,IACrCmY,GAAe3P,EAAQuR,eAC1BvR,EAAQuR,cAAc/Z,EAE1B,IAmCO0H,CACT,CACF,CACA,IAMIsS,GAAU,CACZA,SAAS,GAgDX,SAASC,GAAiBvE,GACxB,OAAOA,EAAUhM,MAAM,KAAK,EAC9B,CAEA,SAASwQ,GAAaxE,GACpB,OAAOA,EAAUhM,MAAM,KAAK,EAC9B,CAEA,SAASyQ,GAAyBzE,GAChC,MAAO,CAAC,MAAO,UAAUrX,QAAQqX,IAAc,EAAI,IAAM,GAC3D,CAMA,SAAS0E,GAAeC,GACtB,IAOItH,EAPA0E,EAAY4C,EAAK5C,UACjB/S,EAAU2V,EAAK3V,QACfgR,EAAY2E,EAAK3E,UACjB4E,EAAgB5E,EAAYuE,GAAiBvE,GAAa,KAC1D6E,EAAY7E,EAAYwE,GAAaxE,GAAa,KAClD8E,EAAU/C,EAAUrG,EAAIqG,EAAUzG,MAAQ,EAAItM,EAAQsM,MAAQ,EAC9DyJ,EAAUhD,EAAUpG,EAAIoG,EAAUxG,OAAS,EAAIvM,EAAQuM,OAAS,EAGpE,OAAQqJ,GACN,KAAKrF,GACHlC,EAAU,CACR3B,EAAGoJ,EACHnJ,EAAGoG,EAAUpG,EAAI3M,EAAQuM,QAE3B,MAEF,KAAKE,GACH4B,EAAU,CACR3B,EAAGoJ,EACHnJ,EAAGoG,EAAUpG,EAAIoG,EAAUxG,QAE7B,MAEF,KAAKtD,GACHoF,EAAU,CACR3B,EAAGqG,EAAUrG,EAAIqG,EAAUzG,MAC3BK,EAAGoJ,GAEL,MAEF,KAAKhN,GACHsF,EAAU,CACR3B,EAAGqG,EAAUrG,EAAI1M,EAAQsM,MACzBK,EAAGoJ,GAEL,MAEF,QACE1H,EAAU,CACR3B,EAAGqG,EAAUrG,EACbC,EAAGoG,EAAUpG,GAInB,IAAIqJ,EAAWJ,EAAgBH,GAAyBG,GAAiB,KAEzE,GAAgB,MAAZI,EAAkB,CACpB,IAAIzU,EAAmB,MAAbyU,EAAmB,SAAW,QAExC,OAAQH,GACN,KAAKxe,GACHgX,EAAQ2H,GAAY3H,EAAQ2H,IAAajD,EAAUxR,GAAO,EAAIvB,EAAQuB,GAAO,GAC7E,MAEF,KAAKmP,GACHrC,EAAQ2H,GAAY3H,EAAQ2H,IAAajD,EAAUxR,GAAO,EAAIvB,EAAQuB,GAAO,GAKnF,CAEA,OAAO8M,CACT,CAqCA,IAAI4H,GAAa,CACfzJ,IAAK,OACLvD,MAAO,OACPwD,OAAQ,OACR1D,KAAM,QAgBR,SAASmN,GAAYC,GACnB,IAAIC,EAEAxF,EAASuF,EAAMvF,OACfyF,EAAaF,EAAME,WACnBrF,EAAYmF,EAAMnF,UAClB6E,EAAYM,EAAMN,UAClBxH,EAAU8H,EAAM9H,QAChBhG,EAAW8N,EAAM9N,SACjBiO,EAAkBH,EAAMG,gBACxBC,EAAWJ,EAAMI,SACjBC,EAAeL,EAAMK,aACrBxI,EAAUmI,EAAMnI,QAChByI,EAAapI,EAAQ3B,EACrBA,OAAmB,IAAf+J,EAAwB,EAAIA,EAChCC,EAAarI,EAAQ1B,EACrBA,OAAmB,IAAf+J,EAAwB,EAAIA,EAEhCrC,EAAgC,mBAAjBmC,EAA8BA,EAAa,CAC5D9J,EAAGA,EACHC,EAAGA,IACA,CACHD,EAAGA,EACHC,EAAGA,GAGLD,EAAI2H,EAAM3H,EACVC,EAAI0H,EAAM1H,EACV,IAAIgK,EAAOtI,EAAQuI,eAAe,KAC9BC,EAAOxI,EAAQuI,eAAe,KAC9BE,EAAQ/N,GACRgO,EAAQxG,GACR1D,EAAM9G,OAEV,GAAIwQ,EAAU,CACZ,IAAIxI,EAAe6B,GAAgBgB,GAC/BoG,EAAa,eACbC,EAAY,cAEZlJ,IAAiB9C,EAAU2F,IAGmB,WAA5CrD,EAFJQ,EAAeX,EAAmBwD,IAECvI,UAAsC,aAAbA,IAC1D2O,EAAa,eACbC,EAAY,gBAOZjG,IAAcT,KAAcS,IAAcjI,IAAQiI,IAAc/H,KAAU4M,IAAcnF,MAC1FqG,EAAQtK,GAGRE,IAFcqB,GAAWnB,EAAI2C,eAAiB3C,EAAI2C,eAAejD,OACjEwB,EAAaiJ,IACEX,EAAW9J,OAC1BI,GAAK2J,EAAkB,GAAK,GAG1BtF,IAAcjI,KAASiI,IAAcT,IAAaS,IAAcvE,IAAWoJ,IAAcnF,MAC3FoG,EAAQ7N,GAGRyD,IAFcsB,GAAWnB,EAAI2C,eAAiB3C,EAAI2C,eAAelD,MACjEyB,EAAakJ,IACEZ,EAAW/J,MAC1BI,GAAK4J,EAAkB,GAAK,EAEhC,CAEA,IAgBMY,EAhBFC,EAAejW,OAAOiS,OAAO,CAC/B9K,SAAUA,GACTkO,GAAYN,IAEXmB,GAAyB,IAAjBZ,EAnFd,SAA2Bb,GACzB,IAAIjJ,EAAIiJ,EAAKjJ,EACTC,EAAIgJ,EAAKhJ,EAET0K,EADMtR,OACIuR,kBAAoB,EAClC,MAAO,CACL5K,EAAGZ,EAAMY,EAAI2K,GAAOA,GAAO,EAC3B1K,EAAGb,EAAMa,EAAI0K,GAAOA,GAAO,EAE/B,CA0EsCE,CAAkB,CACpD7K,EAAGA,EACHC,EAAGA,IACA,CACHD,EAAGA,EACHC,EAAGA,GAML,OAHAD,EAAI0K,EAAM1K,EACVC,EAAIyK,EAAMzK,EAEN2J,EAGKpV,OAAOiS,OAAO,CAAC,EAAGgE,IAAeD,EAAiB,CAAC,GAAkBH,GAASF,EAAO,IAAM,GAAIK,EAAeJ,GAASH,EAAO,IAAM,GAAIO,EAAehH,WAAarD,EAAIyK,kBAAoB,IAAM,EAAI,aAAe5K,EAAI,OAASC,EAAI,MAAQ,eAAiBD,EAAI,OAASC,EAAI,SAAUuK,IAG5RhW,OAAOiS,OAAO,CAAC,EAAGgE,IAAef,EAAkB,CAAC,GAAmBW,GAASF,EAAOlK,EAAI,KAAO,GAAIyJ,EAAgBU,GAASH,EAAOjK,EAAI,KAAO,GAAI0J,EAAgBlG,UAAY,GAAIkG,GAC9L,CAmMA,IAAIoB,GAAO,CACTzO,KAAM,QACNE,MAAO,OACPwD,OAAQ,MACRD,IAAK,UAEP,SAASiL,GAAqBzG,GAC5B,OAAOA,EAAUpR,QAAQ,0BAA0B,SAAU8X,GAC3D,OAAOF,GAAKE,EACd,GACF,CAEA,IAAIC,GAAqC,CACvCtgB,MAAO,MACPqZ,IAAK,SAEP,SAASkH,GAA8B5G,GACrC,OAAOA,EAAUpR,QAAQ,cAAc,SAAU8X,GAC/C,OAAOC,GAAmCD,EAC5C,GACF,CA0EA,SAASlR,GAASqR,EAAQC,GACxB,IAAIC,EAAWD,EAAME,aAAeF,EAAME,cAE1C,GAAIH,EAAOrR,SAASsR,GAClB,OAAO,EAEJ,GAAIC,GAAYtM,EAAasM,GAAW,CACzC,IAAI5O,EAAO2O,EAEX,EAAG,CACD,GAAI3O,GAAQ0O,EAAOI,WAAW9O,GAC5B,OAAO,EAITA,EAAOA,EAAK4F,YAAc5F,EAAK6F,IACjC,OAAS7F,EACX,CAGF,OAAO,CACT,CAEA,SAAS+O,GAAiBjM,GACxB,OAAO/K,OAAOiS,OAAO,CAAC,EAAGlH,EAAM,CAC7BlD,KAAMkD,EAAKS,EACXF,IAAKP,EAAKU,EACV1D,MAAOgD,EAAKS,EAAIT,EAAKK,MACrBG,OAAQR,EAAKU,EAAIV,EAAKM,QAE1B,CA8BA,SAAS4L,GAA2BnY,EAASoY,GAC3C,OAAOA,IAAmBzH,GAAWuH,GAlIvC,SAAyBlY,GACvB,IAAI6M,EAAM5B,EAAUjL,GAChBqY,EAAOjL,EAAmBpN,GAC1BwP,EAAiB3C,EAAI2C,eACrBlD,EAAQ+L,EAAKC,YACb/L,EAAS8L,EAAKE,aACd7L,EAAI,EACJC,EAAI,EAuBR,OAjBI6C,IACFlD,EAAQkD,EAAelD,MACvBC,EAASiD,EAAejD,OASnB,iCAAiC/M,KAAKsQ,UAAUC,aACnDrD,EAAI8C,EAAeb,WACnBhC,EAAI6C,EAAeZ,YAIhB,CACLtC,MAAOA,EACPC,OAAQA,EACRG,EAAGA,EAAIY,EAAoBtN,GAC3B2M,EAAGA,EAEP,CA8FwD6L,CAAgBxY,IAAYqL,EAAU+M,GAd9F,SAAoCpY,GAClC,IAAIiM,EAAOF,EAAsB/L,GASjC,OARAiM,EAAKO,IAAMP,EAAKO,IAAMxM,EAAQuO,UAC9BtC,EAAKlD,KAAOkD,EAAKlD,KAAO/I,EAAQsO,WAChCrC,EAAKQ,OAASR,EAAKO,IAAMxM,EAAQuY,aACjCtM,EAAKhD,MAAQgD,EAAKlD,KAAO/I,EAAQsY,YACjCrM,EAAKK,MAAQtM,EAAQsY,YACrBrM,EAAKM,OAASvM,EAAQuY,aACtBtM,EAAKS,EAAIT,EAAKlD,KACdkD,EAAKU,EAAIV,EAAKO,IACPP,CACT,CAGgHwM,CAA2BL,GAAkBF,GArF7J,SAAyBlY,GACvB,IAAIqP,EAEAgJ,EAAOjL,EAAmBpN,GAC1B0Y,EAAY9L,EAAgB5M,GAC5BkP,EAA0D,OAAlDG,EAAwBrP,EAAQmL,oBAAyB,EAASkE,EAAsBH,KAChG5C,EAAQX,EAAS0M,EAAKM,YAAaN,EAAKC,YAAapJ,EAAOA,EAAKyJ,YAAc,EAAGzJ,EAAOA,EAAKoJ,YAAc,GAC5G/L,EAASZ,EAAS0M,EAAKO,aAAcP,EAAKE,aAAcrJ,EAAOA,EAAK0J,aAAe,EAAG1J,EAAOA,EAAKqJ,aAAe,GACjH7L,GAAKgM,EAAU5L,WAAaQ,EAAoBtN,GAChD2M,GAAK+L,EAAU1L,UAMnB,MAJiD,QAA7CO,EAAiB2B,GAAQmJ,GAAMQ,YACjCnM,GAAKf,EAAS0M,EAAKC,YAAapJ,EAAOA,EAAKoJ,YAAc,GAAKhM,GAG1D,CACLA,MAAOA,EACPC,OAAQA,EACRG,EAAGA,EACHC,EAAGA,EAEP,CAgE8KmM,CAAgB1L,EAAmBpN,IACjN,CAmDA,SAAS+Y,GAAmBC,GAC1B,OAAO9X,OAAOiS,OAAO,CAAC,EAVf,CACL3G,IAAK,EACLvD,MAAO,EACPwD,OAAQ,EACR1D,KAAM,GAMuCiQ,EACjD,CAEA,SAASC,GAAgB5b,EAAOuE,GAC9B,OAAOA,EAAKkP,QAAO,SAAUoI,EAAS9b,GAEpC,OADA8b,EAAQ9b,GAAOC,EACR6b,CACT,GAAG,CAAC,EACN,CAYA,SAASC,GAAe7d,EAAOwI,QACb,IAAZA,IACFA,EAAU,CAAC,GAGb,IAAIE,EAAWF,EACXsV,EAAqBpV,EAASgN,UAC9BA,OAAmC,IAAvBoI,EAAgC9d,EAAM0V,UAAYoI,EAC9DC,EAAoBrV,EAASsV,SAC7BA,OAAiC,IAAtBD,EArgCK,kBAqgC4CA,EAC5DE,EAAwBvV,EAASwV,aACjCA,OAAyC,IAA1BD,EAAmC5I,GAAW4I,EAC7DE,EAAwBzV,EAAS0V,eACjCA,OAA2C,IAA1BD,EAAmC7I,GAAS6I,EAC7DE,EAAuB3V,EAAS4V,YAChCA,OAAuC,IAAzBD,GAA0CA,EACxDE,EAAmB7V,EAAS8V,QAC5BA,OAA+B,IAArBD,EAA8B,EAAIA,EAC5Cb,EAAgBD,GAAsC,iBAAZe,EAAuBA,EAAUb,GAAgBa,EAASrJ,KACpGsJ,EAAaL,IAAmB9I,GA5gCtB,YA4gC2CA,GACrDyF,EAAa/a,EAAMsZ,MAAMhE,OACzB5Q,EAAU1E,EAAM+X,SAASuG,EAAcG,EAAaL,GACpDM,EAxEN,SAAyBha,EAASsZ,EAAUE,GAC1C,IAAIS,EAAmC,oBAAbX,EAlB5B,SAA4BtZ,GAC1B,IAAIka,EAAkB/K,GAAkBN,EAAc7O,IAElDma,EADoB,CAAC,WAAY,SAASxgB,QAAQ4T,EAAiBvN,GAASqI,WAAa,GACnDkD,EAAcvL,GAAW4P,GAAgB5P,GAAWA,EAE9F,OAAKqL,EAAU8O,GAKRD,EAAgBjc,QAAO,SAAUma,GACtC,OAAO/M,EAAU+M,IAAmB5R,GAAS4R,EAAgB+B,IAAmD,SAAhCjN,EAAYkL,EAC9F,IANS,EAOX,CAK6DgC,CAAmBpa,GAAW,GAAG+K,OAAOuO,GAC/FY,EAAkB,GAAGnP,OAAOkP,EAAqB,CAACT,IAClDa,EAAsBH,EAAgB,GACtCI,EAAeJ,EAAgBpJ,QAAO,SAAUyJ,EAASnC,GAC3D,IAAInM,EAAOkM,GAA2BnY,EAASoY,GAK/C,OAJAmC,EAAQ/N,IAAMb,EAASM,EAAKO,IAAK+N,EAAQ/N,KACzC+N,EAAQtR,MAAQ4C,EAASI,EAAKhD,MAAOsR,EAAQtR,OAC7CsR,EAAQ9N,OAASZ,EAASI,EAAKQ,OAAQ8N,EAAQ9N,QAC/C8N,EAAQxR,KAAO4C,EAASM,EAAKlD,KAAMwR,EAAQxR,MACpCwR,CACT,GAAGpC,GAA2BnY,EAASqa,IAKvC,OAJAC,EAAahO,MAAQgO,EAAarR,MAAQqR,EAAavR,KACvDuR,EAAa/N,OAAS+N,EAAa7N,OAAS6N,EAAa9N,IACzD8N,EAAa5N,EAAI4N,EAAavR,KAC9BuR,EAAa3N,EAAI2N,EAAa9N,IACvB8N,CACT,CAuD2BE,CAAgBnP,EAAUrL,GAAWA,EAAUA,EAAQ8T,gBAAkB1G,EAAmB9R,EAAM+X,SAASzC,QAAS0I,EAAUE,GACnJiB,EAAsB1O,EAAsBzQ,EAAM+X,SAASN,WAC3D2H,EAAgBhF,GAAe,CACjC3C,UAAW0H,EACXza,QAASqW,EACTlE,SAAU,WACVnB,UAAWA,IAET2J,EAAmBzC,GAAiBhX,OAAOiS,OAAO,CAAC,EAAGkD,EAAYqE,IAClEE,EAAoBlB,IAAmB9I,GAAS+J,EAAmBF,EAGnEI,EAAkB,CACpBrO,IAAKwN,EAAmBxN,IAAMoO,EAAkBpO,IAAMwM,EAAcxM,IACpEC,OAAQmO,EAAkBnO,OAASuN,EAAmBvN,OAASuM,EAAcvM,OAC7E1D,KAAMiR,EAAmBjR,KAAO6R,EAAkB7R,KAAOiQ,EAAcjQ,KACvEE,MAAO2R,EAAkB3R,MAAQ+Q,EAAmB/Q,MAAQ+P,EAAc/P,OAExE6R,EAAaxf,EAAM8X,cAAc2H,OAErC,GAAIrB,IAAmB9I,IAAUkK,EAAY,CAC3C,IAAIC,EAASD,EAAW9J,GACxB9P,OAAOU,KAAKiZ,GAAiBtY,SAAQ,SAAUnF,GAC7C,IAAI4d,EAAW,CAAC/R,GAAOwD,IAAQ9S,QAAQyD,IAAQ,EAAI,GAAK,EACpD6d,EAAO,CAAC1K,GAAW9D,IAAQ9S,QAAQyD,IAAQ,EAAI,IAAM,IACzDyd,EAAgBzd,IAAQ2d,EAAOE,GAAQD,CACzC,GACF,CAEA,OAAOH,CACT,CAyMA,SAASK,GAAOriB,EAAKwE,EAAOuO,GAC1B,OAAOD,EAAS9S,EAAKgT,EAASxO,EAAOuO,GACvC,CAwPA,SAASuP,GAAezN,EAAUzB,EAAMmP,GAQtC,YAPyB,IAArBA,IACFA,EAAmB,CACjB1O,EAAG,EACHC,EAAG,IAIA,CACLH,IAAKkB,EAASlB,IAAMP,EAAKM,OAAS6O,EAAiBzO,EACnD1D,MAAOyE,EAASzE,MAAQgD,EAAKK,MAAQ8O,EAAiB1O,EACtDD,OAAQiB,EAASjB,OAASR,EAAKM,OAAS6O,EAAiBzO,EACzD5D,KAAM2E,EAAS3E,KAAOkD,EAAKK,MAAQ8O,EAAiB1O,EAExD,CAEA,SAAS2O,GAAsB3N,GAC7B,MAAO,CAAC6C,GAAWtH,GAAOwD,GAAQ1D,IAAMwJ,MAAK,SAAU+I,GACrD,OAAO5N,EAAS4N,IAAS,CAC3B,GACF,CAiDA,IACIC,GAAmC/I,GAAgB,CACrDI,iBAFqB,CAjtC6B,CAClD7S,KAAM,iBACNxJ,SAAS,EACTyd,MAAO,QACPhB,GAAI,WAAe,EACnBuB,OAxCF,SAAgBoB,GACd,IAAIra,EAAQqa,EAAKra,MACb0H,EAAW2S,EAAK3S,SAChBc,EAAU6R,EAAK7R,QACf0X,EAAkB1X,EAAQsK,OAC1BA,OAA6B,IAApBoN,GAAoCA,EAC7CC,EAAkB3X,EAAQ4X,OAC1BA,OAA6B,IAApBD,GAAoCA,EAC7C1V,EAASkF,EAAU3P,EAAM+X,SAASzC,QAClCiD,EAAgB,GAAG9I,OAAOzP,EAAMuY,cAAcd,UAAWzX,EAAMuY,cAAcjD,QAYjF,OAVIxC,GACFyF,EAActR,SAAQ,SAAU+M,GAC9BA,EAAa5X,iBAAiB,SAAUsL,EAASyR,OAAQa,GAC3D,IAGEoG,GACF3V,EAAOrO,iBAAiB,SAAUsL,EAASyR,OAAQa,IAG9C,WACDlH,GACFyF,EAActR,SAAQ,SAAU+M,GAC9BA,EAAaxX,oBAAoB,SAAUkL,EAASyR,OAAQa,GAC9D,IAGEoG,GACF3V,EAAOjO,oBAAoB,SAAUkL,EAASyR,OAAQa,GAE1D,CACF,EASEnb,KAAM,CAAC,GAyGoD,CAC3D4F,KAAM,gBACNxJ,SAAS,EACTyd,MAAO,OACPhB,GApBF,SAAuB2C,GACrB,IAAIra,EAAQqa,EAAKra,MACbyE,EAAO4V,EAAK5V,KAKhBzE,EAAM8X,cAAcrT,GAAQ2V,GAAe,CACzC3C,UAAWzX,EAAMsZ,MAAM7B,UACvB/S,QAAS1E,EAAMsZ,MAAMhE,OACrBuB,SAAU,WACVnB,UAAW1V,EAAM0V,WAErB,EAQE7W,KAAM,CAAC,GAyKoD,CAC3D4F,KAAM,gBACNxJ,SAAS,EACTyd,MAAO,cACPhB,GAjDF,SAAuB2I,GACrB,IAAIrgB,EAAQqgB,EAAMrgB,MACdwI,EAAU6X,EAAM7X,QAChB8X,EAAwB9X,EAAQwS,gBAChCA,OAA4C,IAA1BsF,GAA0CA,EAC5DC,EAAoB/X,EAAQyS,SAC5BA,OAAiC,IAAtBsF,GAAsCA,EACjDC,EAAwBhY,EAAQ0S,aAChCA,OAAyC,IAA1BsF,GAA0CA,EAIzD3E,EAAe,CACjBnG,UAAWuE,GAAiBja,EAAM0V,WAClC6E,UAAWL,GAAala,EAAM0V,WAC9BJ,OAAQtV,EAAM+X,SAASzC,OACvByF,WAAY/a,EAAMsZ,MAAMhE,OACxB0F,gBAAiBA,EACjBtI,QAAoC,UAA3B1S,EAAMwI,QAAQqO,UAGgB,MAArC7W,EAAM8X,cAAcsH,gBACtBpf,EAAMiY,OAAO3C,OAAS1P,OAAOiS,OAAO,CAAC,EAAG7X,EAAMiY,OAAO3C,OAAQsF,GAAYhV,OAAOiS,OAAO,CAAC,EAAGgE,EAAc,CACvG9I,QAAS/S,EAAM8X,cAAcsH,cAC7BrS,SAAU/M,EAAMwI,QAAQqO,SACxBoE,SAAUA,EACVC,aAAcA,OAIe,MAA7Blb,EAAM8X,cAAc2I,QACtBzgB,EAAMiY,OAAOwI,MAAQ7a,OAAOiS,OAAO,CAAC,EAAG7X,EAAMiY,OAAOwI,MAAO7F,GAAYhV,OAAOiS,OAAO,CAAC,EAAGgE,EAAc,CACrG9I,QAAS/S,EAAM8X,cAAc2I,MAC7B1T,SAAU,WACVkO,UAAU,EACVC,aAAcA,OAIlBlb,EAAMgY,WAAW1C,OAAS1P,OAAOiS,OAAO,CAAC,EAAG7X,EAAMgY,WAAW1C,OAAQ,CACnE,wBAAyBtV,EAAM0V,WAEnC,EAQE7W,KAAM,CAAC,GA+EkD,CACzD4F,KAAM,cACNxJ,SAAS,EACTyd,MAAO,QACPhB,GA5EF,SAAqB2C,GACnB,IAAIra,EAAQqa,EAAKra,MACjB4F,OAAOU,KAAKtG,EAAM+X,UAAU9Q,SAAQ,SAAUxC,GAC5C,IAAIic,EAAQ1gB,EAAMiY,OAAOxT,IAAS,CAAC,EAC/BuT,EAAahY,EAAMgY,WAAWvT,IAAS,CAAC,EACxCC,EAAU1E,EAAM+X,SAAStT,GAExBwL,EAAcvL,IAAakN,EAAYlN,KAO5CkB,OAAOiS,OAAOnT,EAAQgc,MAAOA,GAC7B9a,OAAOU,KAAK0R,GAAY/Q,SAAQ,SAAUxC,GACxC,IAAI1C,EAAQiW,EAAWvT,IAET,IAAV1C,EACF2C,EAAQic,gBAAgBlc,GAExBC,EAAQkF,aAAanF,GAAgB,IAAV1C,EAAiB,GAAKA,EAErD,IACF,GACF,EAoDEkX,OAlDF,SAA4B4B,GAC1B,IAAI7a,EAAQ6a,EAAM7a,MACd4gB,EAAgB,CAClBtL,OAAQ,CACNvI,SAAU/M,EAAMwI,QAAQqO,SACxBpJ,KAAM,IACNyD,IAAK,IACL2P,OAAQ,KAEVJ,MAAO,CACL1T,SAAU,YAEZ0K,UAAW,CAAC,GASd,OAPA7R,OAAOiS,OAAO7X,EAAM+X,SAASzC,OAAOoL,MAAOE,EAActL,QACzDtV,EAAMiY,OAAS2I,EAEX5gB,EAAM+X,SAAS0I,OACjB7a,OAAOiS,OAAO7X,EAAM+X,SAAS0I,MAAMC,MAAOE,EAAcH,OAGnD,WACL7a,OAAOU,KAAKtG,EAAM+X,UAAU9Q,SAAQ,SAAUxC,GAC5C,IAAIC,EAAU1E,EAAM+X,SAAStT,GACzBuT,EAAahY,EAAMgY,WAAWvT,IAAS,CAAC,EAGxCic,EAFkB9a,OAAOU,KAAKtG,EAAMiY,OAAOqD,eAAe7W,GAAQzE,EAAMiY,OAAOxT,GAAQmc,EAAcnc,IAE7E+Q,QAAO,SAAUkL,EAAOI,GAElD,OADAJ,EAAMI,GAAY,GACXJ,CACT,GAAG,CAAC,GAECzQ,EAAcvL,IAAakN,EAAYlN,KAI5CkB,OAAOiS,OAAOnT,EAAQgc,MAAOA,GAC7B9a,OAAOU,KAAK0R,GAAY/Q,SAAQ,SAAU8Z,GACxCrc,EAAQic,gBAAgBI,EAC1B,IACF,GACF,CACF,EASE1K,SAAU,CAAC,kBAkDyC,CACpD5R,KAAM,SACNxJ,SAAS,EACTyd,MAAO,OACPrC,SAAU,CAAC,iBACXqB,GA5BF,SAAgBmD,GACd,IAAI7a,EAAQ6a,EAAM7a,MACdwI,EAAUqS,EAAMrS,QAChB/D,EAAOoW,EAAMpW,KACbuc,EAAkBxY,EAAQiX,OAC1BA,OAA6B,IAApBuB,EAA6B,CAAC,EAAG,GAAKA,EAC/CniB,EAAO8W,GAAiBH,QAAO,SAAUC,EAAKC,GAEhD,OADAD,EAAIC,GA5BR,SAAiCA,EAAW4D,EAAOmG,GACjD,IAAInF,EAAgBL,GAAiBvE,GACjCuL,EAAiB,CAACxT,GAAMwH,IAAW5W,QAAQic,IAAkB,GAAK,EAAI,EAEtED,EAAyB,mBAAXoF,EAAwBA,EAAO7Z,OAAOiS,OAAO,CAAC,EAAGyB,EAAO,CACxE5D,UAAWA,KACP+J,EACFyB,EAAW7G,EAAK,GAChB8G,EAAW9G,EAAK,GAIpB,OAFA6G,EAAWA,GAAY,EACvBC,GAAYA,GAAY,GAAKF,EACtB,CAACxT,GAAME,IAAOtP,QAAQic,IAAkB,EAAI,CACjDlJ,EAAG+P,EACH9P,EAAG6P,GACD,CACF9P,EAAG8P,EACH7P,EAAG8P,EAEP,CASqBC,CAAwB1L,EAAW1V,EAAMsZ,MAAOmG,GAC1DhK,CACT,GAAG,CAAC,GACA4L,EAAwBxiB,EAAKmB,EAAM0V,WACnCtE,EAAIiQ,EAAsBjQ,EAC1BC,EAAIgQ,EAAsBhQ,EAEW,MAArCrR,EAAM8X,cAAcsH,gBACtBpf,EAAM8X,cAAcsH,cAAchO,GAAKA,EACvCpR,EAAM8X,cAAcsH,cAAc/N,GAAKA,GAGzCrR,EAAM8X,cAAcrT,GAAQ5F,CAC9B,GA4doD,CAClD4F,KAAM,OACNxJ,SAAS,EACTyd,MAAO,OACPhB,GA5HF,SAAc2C,GACZ,IAAIra,EAAQqa,EAAKra,MACbwI,EAAU6R,EAAK7R,QACf/D,EAAO4V,EAAK5V,KAEhB,IAAIzE,EAAM8X,cAAcrT,GAAM6c,MAA9B,CAoCA,IAhCA,IAAIC,EAAoB/Y,EAAQkS,SAC5B8G,OAAsC,IAAtBD,GAAsCA,EACtDE,EAAmBjZ,EAAQkZ,QAC3BC,OAAoC,IAArBF,GAAqCA,EACpDG,EAA8BpZ,EAAQqZ,mBACtCrD,EAAUhW,EAAQgW,QAClBR,EAAWxV,EAAQwV,SACnBE,EAAe1V,EAAQ0V,aACvBI,EAAc9V,EAAQ8V,YACtBwD,EAAwBtZ,EAAQuZ,eAChCA,OAA2C,IAA1BD,GAA0CA,EAC3DE,EAAwBxZ,EAAQwZ,sBAChCC,EAAqBjiB,EAAMwI,QAAQkN,UACnC4E,EAAgBL,GAAiBgI,GAEjCJ,EAAqBD,IADHtH,IAAkB2H,GACqCF,EAjC/E,SAAuCrM,GACrC,GAAIuE,GAAiBvE,KAAeR,GAClC,MAAO,GAGT,IAAIgN,EAAoB/F,GAAqBzG,GAC7C,MAAO,CAAC4G,GAA8B5G,GAAYwM,EAAmB5F,GAA8B4F,GACrG,CA0B6IC,CAA8BF,GAA3E,CAAC9F,GAAqB8F,KAChHG,EAAa,CAACH,GAAoBxS,OAAOoS,GAAoBrM,QAAO,SAAUC,EAAKC,GACrF,OAAOD,EAAIhG,OAAOwK,GAAiBvE,KAAeR,GArFtD,SAA8BlV,EAAOwI,QACnB,IAAZA,IACFA,EAAU,CAAC,GAGb,IAAIE,EAAWF,EACXkN,EAAYhN,EAASgN,UACrBsI,EAAWtV,EAASsV,SACpBE,EAAexV,EAASwV,aACxBM,EAAU9V,EAAS8V,QACnBuD,EAAiBrZ,EAASqZ,eAC1BM,EAAwB3Z,EAASsZ,sBACjCA,OAAkD,IAA1BK,EAAmC1M,GAAmB0M,EAC9E9H,EAAYL,GAAaxE,GACzB0M,EAAa7H,EAAYwH,EAAiBxM,GAAsBA,GAAoB5S,QAAO,SAAU+S,GACvG,OAAOwE,GAAaxE,KAAe6E,CACrC,IAAKpF,GACDmN,EAAoBF,EAAWzf,QAAO,SAAU+S,GAClD,OAAOsM,EAAsB3jB,QAAQqX,IAAc,CACrD,IAEiC,IAA7B4M,EAAkBlkB,SACpBkkB,EAAoBF,GAMtB,IAAIG,EAAYD,EAAkB9M,QAAO,SAAUC,EAAKC,GAOtD,OANAD,EAAIC,GAAamI,GAAe7d,EAAO,CACrC0V,UAAWA,EACXsI,SAAUA,EACVE,aAAcA,EACdM,QAASA,IACRvE,GAAiBvE,IACbD,CACT,GAAG,CAAC,GACJ,OAAO7P,OAAOU,KAAKic,GAAWpM,MAAK,SAAUhS,EAAGqe,GAC9C,OAAOD,EAAUpe,GAAKoe,EAAUC,EAClC,GACF,CA6C6DC,CAAqBziB,EAAO,CACnF0V,UAAWA,EACXsI,SAAUA,EACVE,aAAcA,EACdM,QAASA,EACTuD,eAAgBA,EAChBC,sBAAuBA,IACpBtM,EACP,GAAG,IACCgN,EAAgB1iB,EAAMsZ,MAAM7B,UAC5BsD,EAAa/a,EAAMsZ,MAAMhE,OACzBqN,EAAY,IAAI5M,IAChB6M,GAAqB,EACrBC,EAAwBT,EAAW,GAE9Blc,EAAI,EAAGA,EAAIkc,EAAWhkB,OAAQ8H,IAAK,CAC1C,IAAIwP,EAAY0M,EAAWlc,GAEvB4c,EAAiB7I,GAAiBvE,GAElCqN,EAAmB7I,GAAaxE,KAAe3Z,GAC/CinB,EAAa,CAAC/N,GAAW9D,IAAQ9S,QAAQykB,IAAmB,EAC5D7c,EAAM+c,EAAa,QAAU,SAC7B5Q,EAAWyL,GAAe7d,EAAO,CACnC0V,UAAWA,EACXsI,SAAUA,EACVE,aAAcA,EACdI,YAAaA,EACbE,QAASA,IAEPyE,EAAoBD,EAAaD,EAAmBpV,GAAQF,GAAOsV,EAAmB5R,GAAS8D,GAE/FyN,EAAczc,GAAO8U,EAAW9U,KAClCgd,EAAoB9G,GAAqB8G,IAG3C,IAAIC,EAAmB/G,GAAqB8G,GACxCE,EAAS,GAUb,GARI3B,GACF2B,EAAOjoB,KAAKkX,EAAS0Q,IAAmB,GAGtCnB,GACFwB,EAAOjoB,KAAKkX,EAAS6Q,IAAsB,EAAG7Q,EAAS8Q,IAAqB,GAG1EC,EAAOC,OAAM,SAAUC,GACzB,OAAOA,CACT,IAAI,CACFR,EAAwBnN,EACxBkN,GAAqB,EACrB,KACF,CAEAD,EAAUhM,IAAIjB,EAAWyN,EAC3B,CAEA,GAAIP,EAqBF,IAnBA,IAEIU,EAAQ,SAAeC,GACzB,IAAIC,EAAmBpB,EAAWqB,MAAK,SAAU/N,GAC/C,IAAIyN,EAASR,EAAUjM,IAAIhB,GAE3B,GAAIyN,EACF,OAAOA,EAAOhlB,MAAM,EAAGolB,GAAIH,OAAM,SAAUC,GACzC,OAAOA,CACT,GAEJ,IAEA,GAAIG,EAEF,OADAX,EAAwBW,EACjB,OAEX,EAESD,EAnBYxB,EAAiB,EAAI,EAmBZwB,EAAK,GAGpB,UAFFD,EAAMC,GADmBA,KAOpCvjB,EAAM0V,YAAcmN,IACtB7iB,EAAM8X,cAAcrT,GAAM6c,OAAQ,EAClCthB,EAAM0V,UAAYmN,EAClB7iB,EAAMuZ,OAAQ,EA5GhB,CA8GF,EAQEjD,iBAAkB,CAAC,UACnBzX,KAAM,CACJyiB,OAAO,IAwJoD,CAC7D7c,KAAM,kBACNxJ,SAAS,EACTyd,MAAO,OACPhB,GA/HF,SAAyB2C,GACvB,IAAIra,EAAQqa,EAAKra,MACbwI,EAAU6R,EAAK7R,QACf/D,EAAO4V,EAAK5V,KACZ8c,EAAoB/Y,EAAQkS,SAC5B8G,OAAsC,IAAtBD,GAAsCA,EACtDE,EAAmBjZ,EAAQkZ,QAC3BC,OAAoC,IAArBF,GAAsCA,EACrDzD,EAAWxV,EAAQwV,SACnBE,EAAe1V,EAAQ0V,aACvBI,EAAc9V,EAAQ8V,YACtBE,EAAUhW,EAAQgW,QAClBkF,EAAkBlb,EAAQmb,OAC1BA,OAA6B,IAApBD,GAAoCA,EAC7CE,EAAwBpb,EAAQqb,aAChCA,OAAyC,IAA1BD,EAAmC,EAAIA,EACtDxR,EAAWyL,GAAe7d,EAAO,CACnCge,SAAUA,EACVE,aAAcA,EACdM,QAASA,EACTF,YAAaA,IAEXhE,EAAgBL,GAAiBja,EAAM0V,WACvC6E,EAAYL,GAAala,EAAM0V,WAC/BoO,GAAmBvJ,EACnBG,EAAWP,GAAyBG,GACpCoH,EAlDY,MAkDShH,EAlDH,IAAM,IAmDxB0E,EAAgBpf,EAAM8X,cAAcsH,cACpCsD,EAAgB1iB,EAAMsZ,MAAM7B,UAC5BsD,EAAa/a,EAAMsZ,MAAMhE,OACzByO,EAA4C,mBAAjBF,EAA8BA,EAAaje,OAAOiS,OAAO,CAAC,EAAG7X,EAAMsZ,MAAO,CACvG5D,UAAW1V,EAAM0V,aACbmO,EACFG,EAA2D,iBAAtBD,EAAiC,CACxErJ,SAAUqJ,EACVrC,QAASqC,GACPne,OAAOiS,OAAO,CAChB6C,SAAU,EACVgH,QAAS,GACRqC,GACCE,EAAsBjkB,EAAM8X,cAAc2H,OAASzf,EAAM8X,cAAc2H,OAAOzf,EAAM0V,WAAa,KACjG7W,EAAO,CACTuS,EAAG,EACHC,EAAG,GAGL,GAAK+N,EAAL,CAIA,GAAIoC,EAAe,CACjB,IAAI0C,EAEAC,EAAwB,MAAbzJ,EAAmBzF,GAAYxH,GAC1C2W,EAAuB,MAAb1J,EAAmBvJ,GAASxD,GACtC1H,EAAmB,MAAbyU,EAAmB,SAAW,QACpC+E,EAASL,EAAc1E,GACvBnd,EAAMkiB,EAASrN,EAAS+R,GACxB7T,EAAMmP,EAASrN,EAASgS,GACxBC,EAAWV,GAAU5I,EAAW9U,GAAO,EAAI,EAC3CP,EAAS6U,IAAcxe,GAAQ2mB,EAAczc,GAAO8U,EAAW9U,GAC/Dqe,EAAS/J,IAAcxe,IAASgf,EAAW9U,IAAQyc,EAAczc,GAGjEse,EAAevkB,EAAM+X,SAAS0I,MAC9B+D,EAAYb,GAAUY,EAAerR,EAAcqR,GAAgB,CACrEvT,MAAO,EACPC,OAAQ,GAENwT,EAAqBzkB,EAAM8X,cAAc,oBAAsB9X,EAAM8X,cAAc,oBAAoB0G,QApXtG,CACLtN,IAAK,EACLvD,MAAO,EACPwD,OAAQ,EACR1D,KAAM,GAiXFiX,EAAkBD,EAAmBN,GACrCQ,EAAkBF,EAAmBL,GAMrCQ,EAAWhF,GAAO,EAAG8C,EAAczc,GAAMue,EAAUve,IACnD4e,EAAYf,EAAkBpB,EAAczc,GAAO,EAAIoe,EAAWO,EAAWF,EAAkBV,EAA4BtJ,SAAWhV,EAASkf,EAAWF,EAAkBV,EAA4BtJ,SACxMoK,EAAYhB,GAAmBpB,EAAczc,GAAO,EAAIoe,EAAWO,EAAWD,EAAkBX,EAA4BtJ,SAAW4J,EAASM,EAAWD,EAAkBX,EAA4BtJ,SACzMqK,EAAoB/kB,EAAM+X,SAAS0I,OAASnM,GAAgBtU,EAAM+X,SAAS0I,OAC3EuE,EAAeD,EAAiC,MAAbrK,EAAmBqK,EAAkB9R,WAAa,EAAI8R,EAAkB/R,YAAc,EAAI,EAC7HiS,EAAwH,OAAjGf,EAA+C,MAAvBD,OAA8B,EAASA,EAAoBvJ,IAAqBwJ,EAAwB,EAEvJgB,EAAYzF,EAASqF,EAAYG,EACjCE,GAAkBvF,GAAO+D,EAASpT,EAAShT,EAF/BkiB,EAASoF,EAAYI,EAAsBD,GAEMznB,EAAKkiB,EAAQkE,EAAStT,EAASC,EAAK4U,GAAa5U,GAClH8O,EAAc1E,GAAYyK,GAC1BtmB,EAAK6b,GAAYyK,GAAkB1F,CACrC,CAEA,GAAIkC,EAAc,CAChB,IAAIyD,GAEAC,GAAyB,MAAb3K,EAAmBzF,GAAYxH,GAE3C6X,GAAwB,MAAb5K,EAAmBvJ,GAASxD,GAEvC4X,GAAUnG,EAAcsC,GAExB3K,GAAmB,MAAZ2K,EAAkB,SAAW,QAEpC8D,GAAOD,GAAUnT,EAASiT,IAE1BI,GAAOF,GAAUnT,EAASkT,IAE1BI,IAA6D,IAA9C,CAACzQ,GAAWxH,IAAMpP,QAAQic,GAEzCqL,GAAyH,OAAjGP,GAAgD,MAAvBnB,OAA8B,EAASA,EAAoBvC,IAAoB0D,GAAyB,EAEzJQ,GAAaF,GAAeF,GAAOD,GAAU7C,EAAc3L,IAAQgE,EAAWhE,IAAQ4O,GAAuB3B,EAA4BtC,QAEzImE,GAAaH,GAAeH,GAAU7C,EAAc3L,IAAQgE,EAAWhE,IAAQ4O,GAAuB3B,EAA4BtC,QAAU+D,GAE5IK,GAAmBnC,GAAU+B,GAlIrC,SAAwBnoB,EAAKwE,EAAOuO,GAClC,IAAIyV,EAAInG,GAAOriB,EAAKwE,EAAOuO,GAC3B,OAAOyV,EAAIzV,EAAMA,EAAMyV,CACzB,CA+HoDC,CAAeJ,GAAYL,GAASM,IAAcjG,GAAO+D,EAASiC,GAAaJ,GAAMD,GAAS5B,EAASkC,GAAaJ,IAEpKrG,EAAcsC,GAAWoE,GACzBjnB,EAAK6iB,GAAWoE,GAAmBP,EACrC,CAEAvlB,EAAM8X,cAAcrT,GAAQ5F,CAvE5B,CAwEF,EAQEyX,iBAAkB,CAAC,WAyFgC,CACnD7R,KAAM,QACNxJ,SAAS,EACTyd,MAAO,OACPhB,GAxEF,SAAe2C,GACb,IAAI4L,EAEAjmB,EAAQqa,EAAKra,MACbyE,EAAO4V,EAAK5V,KACZ+D,EAAU6R,EAAK7R,QACf+b,EAAevkB,EAAM+X,SAAS0I,MAC9BrB,EAAgBpf,EAAM8X,cAAcsH,cACpC9E,EAAgBL,GAAiBja,EAAM0V,WACvCiK,EAAOxF,GAAyBG,GAEhCrU,EADa,CAACwH,GAAME,IAAOtP,QAAQic,IAAkB,EAClC,SAAW,QAElC,GAAKiK,GAAiBnF,EAAtB,CAIA,IAAI1B,EAxBgB,SAAyBc,EAASxe,GAItD,OAAOyd,GAAsC,iBAH7Ce,EAA6B,mBAAZA,EAAyBA,EAAQ5Y,OAAOiS,OAAO,CAAC,EAAG7X,EAAMsZ,MAAO,CAC/E5D,UAAW1V,EAAM0V,aACb8I,GACkDA,EAAUb,GAAgBa,EAASrJ,IAC7F,CAmBsB+Q,CAAgB1d,EAAQgW,QAASxe,GACjDwkB,EAAYtR,EAAcqR,GAC1B4B,EAAmB,MAATxG,EAAe1K,GAAYxH,GACrC2Y,EAAmB,MAATzG,EAAexO,GAASxD,GAClC0Y,EAAUrmB,EAAMsZ,MAAM7B,UAAUxR,GAAOjG,EAAMsZ,MAAM7B,UAAUkI,GAAQP,EAAcO,GAAQ3f,EAAMsZ,MAAMhE,OAAOrP,GAC9GqgB,EAAYlH,EAAcO,GAAQ3f,EAAMsZ,MAAM7B,UAAUkI,GACxDoF,EAAoBzQ,GAAgBiQ,GACpCgC,EAAaxB,EAA6B,MAATpF,EAAeoF,EAAkB9H,cAAgB,EAAI8H,EAAkB/H,aAAe,EAAI,EAC3HwJ,EAAoBH,EAAU,EAAIC,EAAY,EAG9C/oB,EAAMmgB,EAAcyI,GACpB7V,EAAMiW,EAAa/B,EAAUve,GAAOyX,EAAc0I,GAClDK,EAASF,EAAa,EAAI/B,EAAUve,GAAO,EAAIugB,EAC/C/G,EAASG,GAAOriB,EAAKkpB,EAAQnW,GAE7BoW,EAAW/G,EACf3f,EAAM8X,cAAcrT,KAASwhB,EAAwB,CAAC,GAAyBS,GAAYjH,EAAQwG,EAAsBU,aAAelH,EAASgH,EAAQR,EAnBzJ,CAoBF,EAsCEhN,OApCF,SAAsB4B,GACpB,IAAI7a,EAAQ6a,EAAM7a,MAEd4mB,EADU/L,EAAMrS,QACW9D,QAC3B6f,OAAoC,IAArBqC,EAA8B,sBAAwBA,EAErD,MAAhBrC,IAKwB,iBAAjBA,IACTA,EAAevkB,EAAM+X,SAASzC,OAAO1Q,cAAc2f,MAShDrZ,GAASlL,EAAM+X,SAASzC,OAAQiP,KAMrCvkB,EAAM+X,SAAS0I,MAAQ8D,EACzB,EASElO,SAAU,CAAC,iBACXC,iBAAkB,CAAC,oBAyD+B,CAClD7R,KAAM,OACNxJ,SAAS,EACTyd,MAAO,OACPpC,iBAAkB,CAAC,mBACnBoB,GAlCF,SAAc2C,GACZ,IAAIra,EAAQqa,EAAKra,MACbyE,EAAO4V,EAAK5V,KACZie,EAAgB1iB,EAAMsZ,MAAM7B,UAC5BsD,EAAa/a,EAAMsZ,MAAMhE,OACzBwK,EAAmB9f,EAAM8X,cAAc+O,gBACvCC,EAAoBjJ,GAAe7d,EAAO,CAC5Coe,eAAgB,cAEd2I,EAAoBlJ,GAAe7d,EAAO,CAC5Cse,aAAa,IAEX0I,EAA2BnH,GAAeiH,EAAmBpE,GAC7DuE,EAAsBpH,GAAekH,EAAmBhM,EAAY+E,GACpEoH,EAAoBnH,GAAsBiH,GAC1CG,EAAmBpH,GAAsBkH,GAC7CjnB,EAAM8X,cAAcrT,GAAQ,CAC1BuiB,yBAA0BA,EAC1BC,oBAAqBA,EACrBC,kBAAmBA,EACnBC,iBAAkBA,GAEpBnnB,EAAMgY,WAAW1C,OAAS1P,OAAOiS,OAAO,CAAC,EAAG7X,EAAMgY,WAAW1C,OAAQ,CACnE,+BAAgC4R,EAChC,sBAAuBC,GAE3B,MAgCA,SAASC,GAA2BriB,GAAO,OAQ3C,SAAoCA,GAAO,GAAIC,MAAMC,QAAQF,GAAM,OAAOsiB,GAA0BtiB,EAAM,CARxDuiB,CAA2BviB,IAM7E,SAAkCK,GAAQ,GAAsB,oBAAXC,QAAmD,MAAzBD,EAAKC,OAAOC,WAA2C,MAAtBF,EAAK,cAAuB,OAAOJ,MAAMO,KAAKH,EAAO,CANhFmiB,CAAyBxiB,IAI9G,SAA6CU,EAAGC,GAAU,GAAKD,EAAL,CAAgB,GAAiB,iBAANA,EAAgB,OAAO4hB,GAA0B5hB,EAAGC,GAAS,IAAIC,EAAIC,OAAOtF,UAAUuF,SAAS/F,KAAK2F,GAAGtH,MAAM,GAAI,GAAiE,MAAnD,WAANwH,GAAkBF,EAAE/J,cAAaiK,EAAIF,EAAE/J,YAAY+I,MAAgB,QAANkB,GAAqB,QAANA,EAAoBX,MAAMO,KAAKE,GAAc,cAANE,GAAqB,2CAA2CzB,KAAKyB,GAAW0hB,GAA0B5hB,EAAGC,QAAjH,CAArP,CAA+W,CAJjU8hB,CAAoCziB,IAE1J,WAAwC,MAAM,IAAIgB,UAAU,uIAAyI,CAFnC0hB,EAA8B,CAUhM,SAASJ,GAA0BtiB,EAAKkB,IAAkB,MAAPA,GAAeA,EAAMlB,EAAI3G,UAAQ6H,EAAMlB,EAAI3G,QAAQ,IAAK,IAAI8H,EAAI,EAAGC,EAAO,IAAInB,MAAMiB,GAAMC,EAAID,EAAKC,IAAOC,EAAKD,GAAKnB,EAAImB,GAAM,OAAOC,CAAM,CAE9L,SAASuhB,GAAiB9lB,EAAQyE,GAAkB,IAAIC,EAAOV,OAAOU,KAAK1E,GAAS,GAAIgE,OAAOW,sBAAuB,CAAE,IAAIC,EAAUZ,OAAOW,sBAAsB3E,GAASyE,IAAmBG,EAAUA,EAAQ7D,QAAO,SAAU8D,GAAO,OAAOb,OAAOc,yBAAyB9E,EAAQ6E,GAAKE,UAAY,KAAKL,EAAKpL,KAAK0L,MAAMN,EAAME,EAAU,CAAE,OAAOF,CAAM,CAE7V,SAASqhB,GAAsB7gB,GAAU,IAAK,IAAIZ,EAAI,EAAGA,EAAIa,UAAU3I,OAAQ8H,IAAK,CAAE,IAAIc,EAAS,MAAQD,UAAUb,GAAKa,UAAUb,GAAK,CAAC,EAAGA,EAAI,EAAIwhB,GAAiB9hB,OAAOoB,IAAS,GAAIC,SAAQ,SAAUnF,GAAO8lB,GAAwB9gB,EAAQhF,EAAKkF,EAAOlF,GAAO,IAAK8D,OAAOuB,0BAA4BvB,OAAOwB,iBAAiBN,EAAQlB,OAAOuB,0BAA0BH,IAAW0gB,GAAiB9hB,OAAOoB,IAASC,SAAQ,SAAUnF,GAAO8D,OAAOyB,eAAeP,EAAQhF,EAAK8D,OAAOc,yBAAyBM,EAAQlF,GAAO,GAAI,CAAE,OAAOgF,CAAQ,CAE3hB,SAAS8gB,GAAwBtgB,EAAKxF,EAAKC,GAAiK,OAApJD,KAAOwF,EAAO1B,OAAOyB,eAAeC,EAAKxF,EAAK,CAAEC,MAAOA,EAAO4E,YAAY,EAAMY,cAAc,EAAMC,UAAU,IAAkBF,EAAIxF,GAAOC,EAAgBuF,CAAK,CAExN,SAASugB,GAAwBngB,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAI5B,UAAU,oCAAwC,CAEhK,SAAS+hB,GAA0BhhB,EAAQe,GAAS,IAAK,IAAI3B,EAAI,EAAGA,EAAI2B,EAAMzJ,OAAQ8H,IAAK,CAAE,IAAI4B,EAAaD,EAAM3B,GAAI4B,EAAWnB,WAAamB,EAAWnB,aAAc,EAAOmB,EAAWP,cAAe,EAAU,UAAWO,IAAYA,EAAWN,UAAW,GAAM5B,OAAOyB,eAAeP,EAAQgB,EAAWhG,IAAKgG,EAAa,CAAE,CAKpU,IAAIigB,GAAmB,CACrBrS,UAAW,SACXsS,YAAa,QACbC,OAAQ,WAAmB,EAC3B3Y,OAAQ,WAAmB,GAGzB4Y,GAAwB,WAC1B,SAASA,IACP,IAAIC,EAAgBphB,UAAU3I,OAAS,QAAsByF,IAAjBkD,UAAU,GAAmBA,UAAU,GAAK,KACpFqhB,EAAiBrhB,UAAU3I,OAAS,QAAsByF,IAAjBkD,UAAU,GAAmBA,UAAU,GAAK,KACrFyB,EAAUzB,UAAU3I,OAAS,QAAsByF,IAAjBkD,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAEnF8gB,GAAwB7sB,KAAMktB,GAE9BltB,KAAK8P,UAAYqd,EACjBntB,KAAK+P,WAAaqd,EAClBptB,KAAK0N,SAAWif,GAAsBA,GAAsB,CAAC,EAAGI,IAAmBvf,GACnFxN,KAAKqtB,gBAAkBrtB,KAAKstB,uBAC5BttB,KAAKgQ,UAAW,EAEhBhQ,KAAK2N,OACP,CAzBF,IAA8BhB,EAAaiB,EA4HzC,OA5H4BjB,EA2BPugB,GA3BoBtf,EA2BV,CAAC,CAC9B9G,IAAK,QACLC,MAAO,WACL,IAAI8G,EAAQ7N,KAERA,KAAK+P,YACP/P,KAAK+P,WAAW3O,iBAAiB,SAAS,WACxCyM,EAAMK,QACR,GAEJ,GACC,CACDpH,IAAK,uBACLC,MAAO,WACL,OAAOke,GAAoBjlB,KAAK+P,WAAY/P,KAAK8P,UAAW,CAC1D4K,UAAW1a,KAAK0N,SAASgN,UACzBI,UAAW,CAAC,CACVrR,KAAM,SACN+D,QAAS,CACPiX,OAAQ,CAAC,EAAG,QAIpB,GACC,CACD3d,IAAK,sBACLC,MAAO,SAA6BwmB,EAAI5e,GACtC,IAAI6e,EAAYD,EAAGzhB,OAEf0hB,IAAc7e,GAAaA,EAASuB,SAASsd,IAAextB,KAAK+P,WAAWG,SAASsd,KAAcxtB,KAAKgQ,UAC1GhQ,KAAKwU,OAGP3R,SAAS+V,KAAKpX,oBAAoB,QAASxB,KAAKytB,qBAAqB,EACvE,GACC,CACD3mB,IAAK,SACLC,MAAO,WACD/G,KAAKgQ,UACPhQ,KAAKwU,OACL3R,SAAS+V,KAAKpX,oBAAoB,QAASxB,KAAKytB,qBAAqB,IAErEztB,KAAK0tB,MAET,GACC,CACD5mB,IAAK,OACLC,MAAO,WACL,IAAIsH,EAASrO,KAEbA,KAAK8P,UAAUrB,UAAUpH,OAAO,UAEhCrH,KAAK8P,UAAUrB,UAAUlG,IAAI,SAG7BvI,KAAKqtB,gBAAgBjQ,YAAW,SAAU5P,GACxC,OAAOmf,GAAsBA,GAAsB,CAAC,EAAGnf,GAAU,CAAC,EAAG,CACnEsN,UAAW,GAAGrG,OAAO2X,GAA2B5e,EAAQsN,WAAY,CAAC,CACnErR,KAAM,iBACNxJ,SAAS,MAGf,IAEA4C,SAAS+V,KAAKxX,iBAAiB,SAAS,SAAUmsB,GAChDlf,EAAOof,oBAAoBF,EAAIlf,EAAOyB,UACxC,IAAG,GAEH9P,KAAKqtB,gBAAgBlP,SAErBne,KAAKgQ,UAAW,EAEhBhQ,KAAK0N,SAASuf,OAAOjtB,KACvB,GACC,CACD8G,IAAK,OACLC,MAAO,WACL/G,KAAK8P,UAAUrB,UAAUpH,OAAO,SAEhCrH,KAAK8P,UAAUrB,UAAUlG,IAAI,UAG7BvI,KAAKqtB,gBAAgBjQ,YAAW,SAAU5P,GACxC,OAAOmf,GAAsBA,GAAsB,CAAC,EAAGnf,GAAU,CAAC,EAAG,CACnEsN,UAAW,GAAGrG,OAAO2X,GAA2B5e,EAAQsN,WAAY,CAAC,CACnErR,KAAM,iBACNxJ,SAAS,MAGf,IAEAD,KAAKgQ,UAAW,EAEhBhQ,KAAK0N,SAAS4G,OAAOtU,KACvB,MAzHkF8sB,GAA0BngB,EAAYrH,UAAWsI,GAAmFhD,OAAOyB,eAAeM,EAAa,YAAa,CAAEH,UAAU,IA4H7Q0gB,CACT,CAnH4B,GAuH5B,SAASS,KACP9qB,SAASoM,iBAAiB,0BAA0BhD,SAAQ,SAAUgC,GACpE,IAAIU,EAAW9L,SAASyN,eAAerC,EAAUpE,aAAa,yBAC1D6Q,EAAYzM,EAAUpE,aAAa,2BACvC,IAAIqjB,GAASve,EAAUV,EAAW,CAChCyM,UAAWA,GAAwBqS,GAAiBrS,WAExD,GACF,CAsBA,SAASkT,GAAuB7jB,EAAKkB,IAAkB,MAAPA,GAAeA,EAAMlB,EAAI3G,UAAQ6H,EAAMlB,EAAI3G,QAAQ,IAAK,IAAI8H,EAAI,EAAGC,EAAO,IAAInB,MAAMiB,GAAMC,EAAID,EAAKC,IAAOC,EAAKD,GAAKnB,EAAImB,GAAM,OAAOC,CAAM,CAE3L,SAAS0iB,GAAcjnB,EAAQyE,GAAkB,IAAIC,EAAOV,OAAOU,KAAK1E,GAAS,GAAIgE,OAAOW,sBAAuB,CAAE,IAAIC,EAAUZ,OAAOW,sBAAsB3E,GAASyE,IAAmBG,EAAUA,EAAQ7D,QAAO,SAAU8D,GAAO,OAAOb,OAAOc,yBAAyB9E,EAAQ6E,GAAKE,UAAY,KAAKL,EAAKpL,KAAK0L,MAAMN,EAAME,EAAU,CAAE,OAAOF,CAAM,CAE1V,SAASwiB,GAAmBhiB,GAAU,IAAK,IAAIZ,EAAI,EAAGA,EAAIa,UAAU3I,OAAQ8H,IAAK,CAAE,IAAIc,EAAS,MAAQD,UAAUb,GAAKa,UAAUb,GAAK,CAAC,EAAGA,EAAI,EAAI2iB,GAAcjjB,OAAOoB,IAAS,GAAIC,SAAQ,SAAUnF,GAAOinB,GAAqBjiB,EAAQhF,EAAKkF,EAAOlF,GAAO,IAAK8D,OAAOuB,0BAA4BvB,OAAOwB,iBAAiBN,EAAQlB,OAAOuB,0BAA0BH,IAAW6hB,GAAcjjB,OAAOoB,IAASC,SAAQ,SAAUnF,GAAO8D,OAAOyB,eAAeP,EAAQhF,EAAK8D,OAAOc,yBAAyBM,EAAQlF,GAAO,GAAI,CAAE,OAAOgF,CAAQ,CAE/gB,SAASiiB,GAAqBzhB,EAAKxF,EAAKC,GAAiK,OAApJD,KAAOwF,EAAO1B,OAAOyB,eAAeC,EAAKxF,EAAK,CAAEC,MAAOA,EAAO4E,YAAY,EAAMY,cAAc,EAAMC,UAAU,IAAkBF,EAAIxF,GAAOC,EAAgBuF,CAAK,CAErN,SAAS0hB,GAAqBthB,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAI5B,UAAU,oCAAwC,CAE7J,SAASkjB,GAAuBniB,EAAQe,GAAS,IAAK,IAAI3B,EAAI,EAAGA,EAAI2B,EAAMzJ,OAAQ8H,IAAK,CAAE,IAAI4B,EAAaD,EAAM3B,GAAI4B,EAAWnB,WAAamB,EAAWnB,aAAc,EAAOmB,EAAWP,cAAe,EAAU,UAAWO,IAAYA,EAAWN,UAAW,GAAM5B,OAAOyB,eAAeP,EAAQgB,EAAWhG,IAAKgG,EAAa,CAAE,CA1CjU2C,OAAOyd,SAAWA,GAYU,YAAxBrqB,SAASoC,WAEX0oB,KAGA9qB,SAASzB,iBAAiB,mBAAoBusB,IA6BhD,IAAIO,GAAgB,CAClBxT,UAAW,SACXyT,gBAAiB,kEACjB7Z,OAAQ,WAAmB,EAC3B2Y,OAAQ,WAAmB,EAC3B5f,SAAU,WAAqB,GAG7B+gB,GAAqB,WACvB,SAASA,IACP,IAAIzf,EAAW5C,UAAU3I,OAAS,QAAsByF,IAAjBkD,UAAU,GAAmBA,UAAU,GAAK,KAC/EyB,EAAUzB,UAAU3I,OAAS,QAAsByF,IAAjBkD,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAEnFiiB,GAAqBhuB,KAAMouB,GAE3BpuB,KAAK8P,UAAYnB,EACjB3O,KAAK0N,SAAWogB,GAAmBA,GAAmB,CAAC,EAAGI,IAAgB1gB,GAC1ExN,KAAKquB,WAAY,EAEjBruB,KAAK2N,OACP,CAtBF,IAA2BhB,EAAaiB,EAgJtC,OAhJyBjB,EAwBPyhB,GAxBoBxgB,EAwBb,CAAC,CACxB9G,IAAK,QACLC,MAAO,WACL,IAAI8G,EAAQ7N,KAEZA,KAAKsuB,uBAAuBtmB,KAAI,SAAUumB,GACxC1gB,EAAMiC,UAAUrB,UAAUlG,IAAIgmB,EAChC,GACF,GACC,CACDznB,IAAK,kBACLC,MAAO,WACL,GAAI/G,KAAKquB,UAAW,CAClB,IAAIG,EAEAC,EAAa5rB,SAASuG,cAAc,OACxCqlB,EAAW7f,aAAa,iBAAkB,KAEzC4f,EAAwBC,EAAWhgB,WAAWlG,IAAIqD,MAAM4iB,EAxDjE,SAAiCzkB,GAAO,GAAIC,MAAMC,QAAQF,GAAM,OAAO6jB,GAAuB7jB,EAAM,CARrD2kB,CAAd3kB,EAgE+E/J,KAAK0N,SAASygB,gBAAgBzf,MAAM,OA1DpJ,SAA+BtE,GAAQ,GAAsB,oBAAXC,QAAmD,MAAzBD,EAAKC,OAAOC,WAA2C,MAAtBF,EAAK,cAAuB,OAAOJ,MAAMO,KAAKH,EAAO,CANnFukB,CAAsB5kB,IAIrG,SAA0CU,EAAGC,GAAU,GAAKD,EAAL,CAAgB,GAAiB,iBAANA,EAAgB,OAAOmjB,GAAuBnjB,EAAGC,GAAS,IAAIC,EAAIC,OAAOtF,UAAUuF,SAAS/F,KAAK2F,GAAGtH,MAAM,GAAI,GAAiE,MAAnD,WAANwH,GAAkBF,EAAE/J,cAAaiK,EAAIF,EAAE/J,YAAY+I,MAAgB,QAANkB,GAAqB,QAANA,EAAoBX,MAAMO,KAAKE,GAAc,cAANE,GAAqB,2CAA2CzB,KAAKyB,GAAWijB,GAAuBnjB,EAAGC,QAA9G,CAAlP,CAAyW,CAJjUkkB,CAAiC7kB,IAE9I,WAAqC,MAAM,IAAIgB,UAAU,uIAAyI,CAF5C8jB,IAkE9IhsB,SAAS+G,cAAc,QAAQklB,OAAOL,EACxC,CAnEN,IAAiC1kB,CAoE7B,GACC,CACDjD,IAAK,qBACLC,MAAO,WACA/G,KAAKquB,WACRxrB,SAAS+G,cAAc,oBAAoBvC,QAE/C,GACC,CACDP,IAAK,uBACLC,MAAO,WACL,OAAQ/G,KAAK0N,SAASgN,WAEpB,IAAK,WACH,MAAO,CAAC,gBAAiB,eAE3B,IAAK,aACH,MAAO,CAAC,iBAAkB,eAE5B,IAAK,YACH,MAAO,CAAC,cAAe,eAGzB,IAAK,cACH,MAAO,CAAC,gBAAiB,gBAE3B,IAAK,SAgBL,QACE,MAAO,CAAC,iBAAkB,gBAd5B,IAAK,eACH,MAAO,CAAC,cAAe,gBAGzB,IAAK,cACH,MAAO,CAAC,gBAAiB,aAE3B,IAAK,gBACH,MAAO,CAAC,iBAAkB,aAE5B,IAAK,eACH,MAAO,CAAC,cAAe,aAK7B,GACC,CACD5T,IAAK,SACLC,MAAO,WACD/G,KAAKquB,UACPruB,KAAK0tB,OAEL1tB,KAAKwU,OAIPxU,KAAK0N,SAASL,SAASrN,KACzB,GACC,CACD8G,IAAK,OACLC,MAAO,WACL/G,KAAK8P,UAAUrB,UAAUlG,IAAI,QAE7BvI,KAAK8P,UAAUrB,UAAUpH,OAAO,UAEhCrH,KAAK8P,UAAUlB,aAAa,aAAc,QAE1C5O,KAAK8P,UAAUlB,aAAa,OAAQ,UAEpC5O,KAAK8P,UAAU6V,gBAAgB,eAE/B3lB,KAAK+uB,kBAEL/uB,KAAKquB,WAAY,EAEjBruB,KAAK0N,SAASuf,OAAOjtB,KACvB,GACC,CACD8G,IAAK,OACLC,MAAO,WACL/G,KAAK8P,UAAUrB,UAAUlG,IAAI,UAE7BvI,KAAK8P,UAAUrB,UAAUpH,OAAO,QAEhCrH,KAAK8P,UAAUlB,aAAa,cAAe,QAE3C5O,KAAK8P,UAAU6V,gBAAgB,cAE/B3lB,KAAK8P,UAAU6V,gBAAgB,QAE/B3lB,KAAKgvB,qBAELhvB,KAAKquB,WAAY,EAEjBruB,KAAK0N,SAAS4G,OAAOtU,KACvB,MA7I+EiuB,GAAuBthB,EAAYrH,UAAWsI,GAAgFhD,OAAOyB,eAAeM,EAAa,YAAa,CAAEH,UAAU,IAgJpQ4hB,CACT,CAvIyB,GAyIzB3e,OAAO2e,MAAQA,GAEf,IAAIa,GAAmB,SAA0BjhB,EAAIkhB,GACnD,QAAIA,EAAUjT,MAAK,SAAUkT,GAC3B,OAAOA,EAAcnhB,KAAOA,CAC9B,KACSkhB,EAAUzG,MAAK,SAAU0G,GAC9B,OAAOA,EAAcnhB,KAAOA,CAC9B,GAIJ,EAEA,SAASohB,KACP,IAAIC,EAAiB,GACrBxsB,SAASoM,iBAAiB,uBAAuBhD,SAAQ,SAAUkD,GACjE,IAAImgB,EAAUngB,EAAGtF,aAAa,qBAC1B0lB,EAAU1sB,SAASyN,eAAegf,GAClC5U,EAAY6U,EAAQ1lB,aAAa,wBAEjC0lB,IACGA,EAAQtf,aAAa,gBAAmBsf,EAAQtf,aAAa,eAChEsf,EAAQ3gB,aAAa,cAAe,SAIxC,IAAI4gB,EAAQ,KAERP,GAAiBK,EAASD,GAE5BG,GADAA,EAAQP,GAAiBK,EAASD,IACpBzoB,QAEd4oB,EAAQ,IAAIpB,GAAMmB,EAAS,CACzB7U,UAAWA,GAAwBwT,GAAcxT,YAEnD2U,EAAenvB,KAAK,CAClB8N,GAAIshB,EACJ1oB,OAAQ4oB,KAIRD,EAAQtf,aAAa,oBAAkE,SAA5Csf,EAAQ1lB,aAAa,oBAClE2lB,EAAM9B,OAGRve,EAAG/N,iBAAiB,SAAS,WAC3BouB,EAAMthB,QACR,GACF,GACF,CAsBA,SAASuhB,GAAwB1lB,EAAKkB,IAAkB,MAAPA,GAAeA,EAAMlB,EAAI3G,UAAQ6H,EAAMlB,EAAI3G,QAAQ,IAAK,IAAI8H,EAAI,EAAGC,EAAO,IAAInB,MAAMiB,GAAMC,EAAID,EAAKC,IAAOC,EAAKD,GAAKnB,EAAImB,GAAM,OAAOC,CAAM,CAE5L,SAASukB,GAAe9oB,EAAQyE,GAAkB,IAAIC,EAAOV,OAAOU,KAAK1E,GAAS,GAAIgE,OAAOW,sBAAuB,CAAE,IAAIC,EAAUZ,OAAOW,sBAAsB3E,GAASyE,IAAmBG,EAAUA,EAAQ7D,QAAO,SAAU8D,GAAO,OAAOb,OAAOc,yBAAyB9E,EAAQ6E,GAAKE,UAAY,KAAKL,EAAKpL,KAAK0L,MAAMN,EAAME,EAAU,CAAE,OAAOF,CAAM,CAE3V,SAASqkB,GAAoB7jB,GAAU,IAAK,IAAIZ,EAAI,EAAGA,EAAIa,UAAU3I,OAAQ8H,IAAK,CAAE,IAAIc,EAAS,MAAQD,UAAUb,GAAKa,UAAUb,GAAK,CAAC,EAAGA,EAAI,EAAIwkB,GAAe9kB,OAAOoB,IAAS,GAAIC,SAAQ,SAAUnF,GAAO8oB,GAAsB9jB,EAAQhF,EAAKkF,EAAOlF,GAAO,IAAK8D,OAAOuB,0BAA4BvB,OAAOwB,iBAAiBN,EAAQlB,OAAOuB,0BAA0BH,IAAW0jB,GAAe9kB,OAAOoB,IAASC,SAAQ,SAAUnF,GAAO8D,OAAOyB,eAAeP,EAAQhF,EAAK8D,OAAOc,yBAAyBM,EAAQlF,GAAO,GAAI,CAAE,OAAOgF,CAAQ,CAEnhB,SAAS8jB,GAAsBtjB,EAAKxF,EAAKC,GAAiK,OAApJD,KAAOwF,EAAO1B,OAAOyB,eAAeC,EAAKxF,EAAK,CAAEC,MAAOA,EAAO4E,YAAY,EAAMY,cAAc,EAAMC,UAAU,IAAkBF,EAAIxF,GAAOC,EAAgBuF,CAAK,CAEtN,SAASujB,GAAsBnjB,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAI5B,UAAU,oCAAwC,CAE9J,SAAS+kB,GAAwBhkB,EAAQe,GAAS,IAAK,IAAI3B,EAAI,EAAGA,EAAI2B,EAAMzJ,OAAQ8H,IAAK,CAAE,IAAI4B,EAAaD,EAAM3B,GAAI4B,EAAWnB,WAAamB,EAAWnB,aAAc,EAAOmB,EAAWP,cAAe,EAAU,UAAWO,IAAYA,EAAWN,UAAW,GAAM5B,OAAOyB,eAAeP,EAAQgB,EAAWhG,IAAKgG,EAAa,CAAE,CA9BtS,YAAxBjK,SAASoC,WAEXmqB,KAGAvsB,SAASzB,iBAAiB,mBAAoBguB,IA6BhD,IAAIW,GAAiB,CACnBrV,UAAW,OACXsV,eAAe,EACfC,UAAU,EACVC,MAAM,EACNC,WAAY,gBACZhC,gBAAiB,kEACjBlB,OAAQ,WAAmB,EAC3B3Y,OAAQ,WAAmB,EAC3BjH,SAAU,WAAqB,GAG7B+iB,GAAsB,WACxB,SAASA,IACP,IAAIzhB,EAAW5C,UAAU3I,OAAS,QAAsByF,IAAjBkD,UAAU,GAAmBA,UAAU,GAAK,KAC/EyB,EAAUzB,UAAU3I,OAAS,EAAI2I,UAAU,QAAKlD,EAEpDgnB,GAAsB7vB,KAAMowB,GAE5BpwB,KAAK8P,UAAYnB,EACjB3O,KAAK0N,SAAWiiB,GAAoBA,GAAoB,CAAC,EAAGI,IAAiBviB,GAC7ExN,KAAKgQ,UAAW,EAEhBhQ,KAAK2N,OACP,CA1BF,IAA4BhB,EAAaiB,EAkOvC,OAlO0BjB,EA4BPyjB,GA5BoBxiB,EA4BZ,CAAC,CAC1B9G,IAAK,QACLC,MAAO,WACL,IAAI8G,EAAQ7N,KAGRA,KAAK8P,YACP9P,KAAK8P,UAAUlB,aAAa,cAAe,QAE3C5O,KAAK8P,UAAUrB,UAAUlG,IAAI,yBAI/BvI,KAAKsuB,qBAAqBtuB,KAAK0N,SAASgN,WAAW2V,KAAKroB,KAAI,SAAUumB,GACpE1gB,EAAMiC,UAAUrB,UAAUlG,IAAIgmB,EAChC,IAGAvuB,KAAKwU,MACP,GACC,CACD1N,IAAK,YACLC,MAAO,WACL,OAAO/G,KAAKgQ,QACd,GACC,CACDlJ,IAAK,OACLC,MAAO,WACL,IAAIsH,EAASrO,KAGTA,KAAK0N,SAASwiB,MAChBlwB,KAAKsuB,qBAAqBtuB,KAAK0N,SAASgN,UAAY,SAAS3M,OAAO/F,KAAI,SAAUumB,GAChFlgB,EAAOyB,UAAUrB,UAAUpH,OAAOknB,EACpC,IAEAvuB,KAAKsuB,qBAAqBtuB,KAAK0N,SAASgN,UAAY,SAAS4V,SAAStoB,KAAI,SAAUumB,GAClFlgB,EAAOyB,UAAUrB,UAAUlG,IAAIgmB,EACjC,MAEAvuB,KAAKsuB,qBAAqBtuB,KAAK0N,SAASgN,WAAW3M,OAAO/F,KAAI,SAAUumB,GACtElgB,EAAOyB,UAAUrB,UAAUpH,OAAOknB,EACpC,IAEAvuB,KAAKsuB,qBAAqBtuB,KAAK0N,SAASgN,WAAW4V,SAAStoB,KAAI,SAAUumB,GACxElgB,EAAOyB,UAAUrB,UAAUlG,IAAIgmB,EACjC,KAIFvuB,KAAK8P,UAAUlB,aAAa,cAAe,QAE3C5O,KAAK8P,UAAU6V,gBAAgB,cAE/B3lB,KAAK8P,UAAU6V,gBAAgB,QAG1B3lB,KAAK0N,SAASsiB,eACjBntB,SAAS+V,KAAKnK,UAAUpH,OAAO,mBAI7BrH,KAAK0N,SAASuiB,UAChBjwB,KAAKgvB,qBAGPhvB,KAAKgQ,UAAW,EAEhBhQ,KAAK0N,SAAS4G,OAAOtU,KACvB,GACC,CACD8G,IAAK,OACLC,MAAO,WACL,IAAIkM,EAASjT,KAETA,KAAK0N,SAASwiB,MAChBlwB,KAAKsuB,qBAAqBtuB,KAAK0N,SAASgN,UAAY,SAAS3M,OAAO/F,KAAI,SAAUumB,GAChFtb,EAAOnD,UAAUrB,UAAUlG,IAAIgmB,EACjC,IAEAvuB,KAAKsuB,qBAAqBtuB,KAAK0N,SAASgN,UAAY,SAAS4V,SAAStoB,KAAI,SAAUumB,GAClFtb,EAAOnD,UAAUrB,UAAUpH,OAAOknB,EACpC,MAEAvuB,KAAKsuB,qBAAqBtuB,KAAK0N,SAASgN,WAAW3M,OAAO/F,KAAI,SAAUumB,GACtEtb,EAAOnD,UAAUrB,UAAUlG,IAAIgmB,EACjC,IAEAvuB,KAAKsuB,qBAAqBtuB,KAAK0N,SAASgN,WAAW4V,SAAStoB,KAAI,SAAUumB,GACxEtb,EAAOnD,UAAUrB,UAAUpH,OAAOknB,EACpC,KAIFvuB,KAAK8P,UAAUlB,aAAa,aAAc,QAE1C5O,KAAK8P,UAAUlB,aAAa,OAAQ,UAEpC5O,KAAK8P,UAAU6V,gBAAgB,eAG1B3lB,KAAK0N,SAASsiB,eACjBntB,SAAS+V,KAAKnK,UAAUlG,IAAI,mBAI1BvI,KAAK0N,SAASuiB,UAChBjwB,KAAK+uB,kBAGP/uB,KAAKgQ,UAAW,EAEhBhQ,KAAK0N,SAASuf,OAAOjtB,KACvB,GACC,CACD8G,IAAK,SACLC,MAAO,WACD/G,KAAKuwB,YACPvwB,KAAKwU,OAELxU,KAAK0tB,MAET,GACC,CACD5mB,IAAK,kBACLC,MAAO,WACL,IAhL4BgD,EAgLxBymB,EAASxwB,KAEb,IAAKA,KAAKgQ,SAAU,CAClB,IAAIwe,EAEAC,EAAa5rB,SAASuG,cAAc,OACxCqlB,EAAW7f,aAAa,kBAAmB,KAE1C4f,EAAwBC,EAAWhgB,WAAWlG,IAAIqD,MAAM4iB,EAhLjE,SAAkCzkB,GAAO,GAAIC,MAAMC,QAAQF,GAAM,OAAO0lB,GAAwB1lB,EAAM,CARtD0mB,CAAd1mB,EAwL+E/J,KAAK0N,SAASygB,gBAAgBzf,MAAM,OAlLrJ,SAAgCtE,GAAQ,GAAsB,oBAAXC,QAAmD,MAAzBD,EAAKC,OAAOC,WAA2C,MAAtBF,EAAK,cAAuB,OAAOJ,MAAMO,KAAKH,EAAO,CANlFsmB,CAAuB3mB,IAIxG,SAA2CU,EAAGC,GAAU,GAAKD,EAAL,CAAgB,GAAiB,iBAANA,EAAgB,OAAOglB,GAAwBhlB,EAAGC,GAAS,IAAIC,EAAIC,OAAOtF,UAAUuF,SAAS/F,KAAK2F,GAAGtH,MAAM,GAAI,GAAiE,MAAnD,WAANwH,GAAkBF,EAAE/J,cAAaiK,EAAIF,EAAE/J,YAAY+I,MAAgB,QAANkB,GAAqB,QAANA,EAAoBX,MAAMO,KAAKE,GAAc,cAANE,GAAqB,2CAA2CzB,KAAKyB,GAAW8kB,GAAwBhlB,EAAGC,QAA/G,CAAnP,CAA2W,CAJjUimB,CAAkC5mB,IAElJ,WAAsC,MAAM,IAAIgB,UAAU,uIAAyI,CAFzC6lB,IA0LlJ/tB,SAAS+G,cAAc,QAAQklB,OAAOL,GACtCA,EAAWrtB,iBAAiB,SAAS,WACnCovB,EAAOhc,MACT,GACF,CACF,GACC,CACD1N,IAAK,qBACLC,MAAO,WACD/G,KAAKgQ,UACPnN,SAAS+G,cAAc,qBAAqBvC,QAEhD,GACC,CACDP,IAAK,uBACLC,MAAO,SAA8B2T,GACnC,OAAQA,GACN,IAAK,MACH,MAAO,CACL2V,KAAM,CAAC,QAAS,SAAU,WAC1BtiB,OAAQ,CAAC,kBACTuiB,SAAU,CAAC,sBAGf,IAAK,QACH,MAAO,CACLD,KAAM,CAAC,UAAW,SAClBtiB,OAAQ,CAAC,kBACTuiB,SAAU,CAAC,qBAGf,IAAK,SACH,MAAO,CACLD,KAAM,CAAC,WAAY,SAAU,WAC7BtiB,OAAQ,CAAC,kBACTuiB,SAAU,CAAC,qBAGf,IAAK,OAcL,QACE,MAAO,CACLD,KAAM,CAAC,SAAU,SACjBtiB,OAAQ,CAAC,kBACTuiB,SAAU,CAAC,sBAXf,IAAK,cACH,MAAO,CACLD,KAAM,CAAC,SAAU,SACjBtiB,OAAQ,CAAC,kBACTuiB,SAAU,CAAC,mBAAoBtwB,KAAK0N,SAASyiB,aAUrD,MA/NgFL,GAAwBnjB,EAAYrH,UAAWsI,GAAiFhD,OAAOyB,eAAeM,EAAa,YAAa,CAAEH,UAAU,IAkOvQ4jB,CACT,CArN0B,GAuN1B3gB,OAAO2gB,OAASA,GAEhB,IAAIS,GAAoB,SAA2B7iB,EAAIkhB,GACrD,QAAIA,EAAUjT,MAAK,SAAU6U,GAC3B,OAAOA,EAAe9iB,KAAOA,CAC/B,KACSkhB,EAAUzG,MAAK,SAAUqI,GAC9B,OAAOA,EAAe9iB,KAAOA,CAC/B,GAIJ,EAEA,SAAS+iB,KACP,IAAIC,EAAkB,GACtBnuB,SAASoM,iBAAiB,wBAAwBhD,SAAQ,SAAUgC,GAElE,IAAIU,EAAW9L,SAASyN,eAAerC,EAAUpE,aAAa,uBAC1DonB,EAAWtiB,EAASX,GAEpB0M,EAAYzM,EAAUpE,aAAa,yBACnCmmB,EAAgB/hB,EAAUpE,aAAa,8BACvComB,EAAWhiB,EAAUpE,aAAa,wBAClCqmB,EAAOjiB,EAAUpE,aAAa,oBAC9BsmB,EAAaliB,EAAUpE,aAAa,2BACpCqnB,EAAS,KAETL,GAAkBI,EAAUD,GAE9BE,GADAA,EAASL,GAAkBI,EAAUD,IACrBpqB,QAEhBsqB,EAAS,IAAId,GAAOzhB,EAAU,CAC5B+L,UAAWA,GAAwBqV,GAAerV,UAClDsV,cAAeA,EAAkC,SAAlBA,EAA0CD,GAAeC,cACxFC,SAAUA,EAAwB,SAAbA,EAAqCF,GAAeE,SACzEC,KAAMA,EAAgB,SAATA,EAAiCH,GAAeG,KAC7DC,WAAYA,GAA0BJ,GAAeI,aAEvDa,EAAgB9wB,KAAK,CACnB8N,GAAIijB,EACJrqB,OAAQsqB,IAGd,IACAruB,SAASoM,iBAAiB,wBAAwBhD,SAAQ,SAAUgC,GAClE,IACIgjB,EADWpuB,SAASyN,eAAerC,EAAUpE,aAAa,uBACtCmE,GACpBkjB,EAASL,GAAkBI,EAAUD,GACzC/iB,EAAU7M,iBAAiB,SAAS,WAC9B8vB,EAAOtqB,OAAO2pB,YAChBW,EAAOtqB,OAAO4N,OAEd0c,EAAOtqB,OAAO8mB,MAElB,GACF,IACA7qB,SAASoM,iBAAiB,yBAAyBhD,SAAQ,SAAUgC,GACnE,IACIgjB,EADWpuB,SAASyN,eAAerC,EAAUpE,aAAa,wBACtCmE,GACpBkjB,EAASL,GAAkBI,EAAUD,GACzC/iB,EAAU7M,iBAAiB,SAAS,WAClC8vB,EAAOtqB,OAAO4N,MAChB,GACF,IACA3R,SAASoM,iBAAiB,sBAAsBhD,SAAQ,SAAUgC,GAChE,IACIgjB,EADWpuB,SAASyN,eAAerC,EAAUpE,aAAa,qBACtCmE,GACpBkjB,EAASL,GAAkBI,EAAUD,GACzC/iB,EAAU7M,iBAAiB,SAAS,WAClC8vB,EAAOtqB,OAAO8mB,MAChB,GACF,GACF,CAYA,SAASyD,GAAuBpnB,GAAO,OAQvC,SAAgCA,GAAO,GAAIC,MAAMC,QAAQF,GAAM,OAAOqnB,GAAsBrnB,EAAM,CARpDsnB,CAAuBtnB,IAMrE,SAA8BK,GAAQ,GAAsB,oBAAXC,QAAmD,MAAzBD,EAAKC,OAAOC,WAA2C,MAAtBF,EAAK,cAAuB,OAAOJ,MAAMO,KAAKH,EAAO,CANpFknB,CAAqBvnB,IAIlG,SAAyCU,EAAGC,GAAU,GAAKD,EAAL,CAAgB,GAAiB,iBAANA,EAAgB,OAAO2mB,GAAsB3mB,EAAGC,GAAS,IAAIC,EAAIC,OAAOtF,UAAUuF,SAAS/F,KAAK2F,GAAGtH,MAAM,GAAI,GAAiE,MAAnD,WAANwH,GAAkBF,EAAE/J,cAAaiK,EAAIF,EAAE/J,YAAY+I,MAAgB,QAANkB,GAAqB,QAANA,EAAoBX,MAAMO,KAAKE,GAAc,cAANE,GAAqB,2CAA2CzB,KAAKyB,GAAWymB,GAAsB3mB,EAAGC,QAA7G,CAAjP,CAAuW,CAJjU6mB,CAAgCxnB,IAE1I,WAAoC,MAAM,IAAIgB,UAAU,uIAAyI,CAF/CymB,EAA0B,CAU5K,SAASJ,GAAsBrnB,EAAKkB,IAAkB,MAAPA,GAAeA,EAAMlB,EAAI3G,UAAQ6H,EAAMlB,EAAI3G,QAAQ,IAAK,IAAI8H,EAAI,EAAGC,EAAO,IAAInB,MAAMiB,GAAMC,EAAID,EAAKC,IAAOC,EAAKD,GAAKnB,EAAImB,GAAM,OAAOC,CAAM,CAE1L,SAASsmB,GAAa7qB,EAAQyE,GAAkB,IAAIC,EAAOV,OAAOU,KAAK1E,GAAS,GAAIgE,OAAOW,sBAAuB,CAAE,IAAIC,EAAUZ,OAAOW,sBAAsB3E,GAASyE,IAAmBG,EAAUA,EAAQ7D,QAAO,SAAU8D,GAAO,OAAOb,OAAOc,yBAAyB9E,EAAQ6E,GAAKE,UAAY,KAAKL,EAAKpL,KAAK0L,MAAMN,EAAME,EAAU,CAAE,OAAOF,CAAM,CAEzV,SAASomB,GAAkB5lB,GAAU,IAAK,IAAIZ,EAAI,EAAGA,EAAIa,UAAU3I,OAAQ8H,IAAK,CAAE,IAAIc,EAAS,MAAQD,UAAUb,GAAKa,UAAUb,GAAK,CAAC,EAAGA,EAAI,EAAIumB,GAAa7mB,OAAOoB,IAAS,GAAIC,SAAQ,SAAUnF,GAAO6qB,GAAoB7lB,EAAQhF,EAAKkF,EAAOlF,GAAO,IAAK8D,OAAOuB,0BAA4BvB,OAAOwB,iBAAiBN,EAAQlB,OAAOuB,0BAA0BH,IAAWylB,GAAa7mB,OAAOoB,IAASC,SAAQ,SAAUnF,GAAO8D,OAAOyB,eAAeP,EAAQhF,EAAK8D,OAAOc,yBAAyBM,EAAQlF,GAAO,GAAI,CAAE,OAAOgF,CAAQ,CAE3gB,SAAS6lB,GAAoBrlB,EAAKxF,EAAKC,GAAiK,OAApJD,KAAOwF,EAAO1B,OAAOyB,eAAeC,EAAKxF,EAAK,CAAEC,MAAOA,EAAO4E,YAAY,EAAMY,cAAc,EAAMC,UAAU,IAAkBF,EAAIxF,GAAOC,EAAgBuF,CAAK,CAEpN,SAASslB,GAAoBllB,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAI5B,UAAU,oCAAwC,CAE5J,SAAS8mB,GAAsB/lB,EAAQe,GAAS,IAAK,IAAI3B,EAAI,EAAGA,EAAI2B,EAAMzJ,OAAQ8H,IAAK,CAAE,IAAI4B,EAAaD,EAAM3B,GAAI4B,EAAWnB,WAAamB,EAAWnB,aAAc,EAAOmB,EAAWP,cAAe,EAAU,UAAWO,IAAYA,EAAWN,UAAW,GAAM5B,OAAOyB,eAAeP,EAAQgB,EAAWhG,IAAKgG,EAAa,CAAE,CA9BpS,YAAxBjK,SAASoC,WAEX8rB,KAGAluB,SAASzB,iBAAiB,mBAAoB2vB,IA6BhD,IAAIe,GAAe,CACjBC,aAAc,KACd9kB,cAAe,qHACfC,gBAAiB,mKACjB+f,OAAQ,WAAmB,GAGzB+E,GAAoB,WACtB,SAASA,IACP,IAAIzkB,EAAQxB,UAAU3I,OAAS,QAAsByF,IAAjBkD,UAAU,GAAmBA,UAAU,GAAK,GAC5EyB,EAAUzB,UAAU3I,OAAS,QAAsByF,IAAjBkD,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAEnF6lB,GAAoB5xB,KAAMgyB,GAE1BhyB,KAAKyN,OAASF,EACdvN,KAAKiyB,WAAazkB,EAAUxN,KAAKkyB,OAAO1kB,EAAQukB,cAAgB,KAChE/xB,KAAK0N,SAAWgkB,GAAkBA,GAAkB,CAAC,EAAGI,IAAetkB,GAEvExN,KAAK2N,OACP,CArBF,IAA0BhB,EAAaiB,EAwGrC,OAxGwBjB,EAuBPqlB,EAvBoBpkB,EAuBd,CAAC,CACtB9G,IAAK,QACLC,MAAO,WACL,IAAI8G,EAAQ7N,KAERA,KAAKyN,OAAOrK,SAETpD,KAAKiyB,YACRjyB,KAAKmyB,cAAcnyB,KAAKyN,OAAO,IAIjCzN,KAAK0tB,KAAK1tB,KAAKiyB,WAAWjkB,IAAI,GAE9BhO,KAAKyN,OAAOzF,KAAI,SAAUoqB,GACxBA,EAAInkB,UAAU7M,iBAAiB,SAAS,WACtCyM,EAAM6f,KAAK0E,EAAIpkB,GACjB,GACF,IAEJ,GACC,CACDlH,IAAK,eACLC,MAAO,WACL,OAAO/G,KAAKiyB,UACd,GACC,CACDnrB,IAAK,gBACLC,MAAO,SAAuBqrB,GAC5BpyB,KAAKiyB,WAAaG,CACpB,GACC,CACDtrB,IAAK,SACLC,MAAO,SAAgBiH,GACrB,OAAOhO,KAAKyN,OAAO9F,QAAO,SAAU0qB,GAClC,OAAOA,EAAErkB,KAAOA,CAClB,IAAG,EACL,GACC,CACDlH,IAAK,OACLC,MAAO,SAAciH,GACnB,IACIskB,EACAC,EAFAlkB,EAASrO,KAITwyB,EAAYzmB,UAAU3I,OAAS,QAAsByF,IAAjBkD,UAAU,IAAmBA,UAAU,GAC3EqmB,EAAMpyB,KAAKkyB,OAAOlkB,IAElBokB,IAAQpyB,KAAKiyB,YAAeO,KAKhCxyB,KAAKyN,OAAOzF,KAAI,SAAUqqB,GAEtB,IAAII,EAAuBC,EADzBL,IAAMD,KAGPK,EAAwBJ,EAAEpkB,UAAUQ,WAAWpH,OAAOuE,MAAM6mB,EAAuBtB,GAAuB9iB,EAAOX,SAAST,cAAcyB,MAAM,QAE9IgkB,EAAyBL,EAAEpkB,UAAUQ,WAAWlG,IAAIqD,MAAM8mB,EAAwBvB,GAAuB9iB,EAAOX,SAASR,gBAAgBwB,MAAM,OAEhJ2jB,EAAE1jB,SAASF,UAAUlG,IAAI,UACzB8pB,EAAEpkB,UAAUW,aAAa,iBAAiB,GAE9C,KAGC0jB,EAAwBF,EAAInkB,UAAUQ,WAAWlG,IAAIqD,MAAM0mB,EAAuBnB,GAAuBnxB,KAAK0N,SAAST,cAAcyB,MAAM,QAE3I6jB,EAAyBH,EAAInkB,UAAUQ,WAAWpH,OAAOuE,MAAM2mB,EAAwBpB,GAAuBnxB,KAAK0N,SAASR,gBAAgBwB,MAAM,OAEnJ0jB,EAAInkB,UAAUW,aAAa,iBAAiB,GAC5CwjB,EAAIzjB,SAASF,UAAUpH,OAAO,UAE9BrH,KAAKmyB,cAAcC,GAGnBpyB,KAAK0N,SAASuf,OAAOjtB,KAAMoyB,GAC7B,IArGkExkB,GAAYikB,GAAsBllB,EAAYrH,UAAWsI,GAA+EhD,OAAOyB,eAAeM,EAAa,YAAa,CAAEH,UAAU,IAwGjQwlB,CACT,CAhGwB,GAoGxB,SAASW,KACP9vB,SAASoM,iBAAiB,sBAAsBhD,SAAQ,SAAUgC,GAChE,IAAI2kB,EAAc,GACdb,EAAe,KACnB9jB,EAAUgB,iBAAiB,gBAAgBhD,SAAQ,SAAUkD,GAC3D,IAAIlL,EAAgD,SAArCkL,EAAGtF,aAAa,iBAC3BuoB,EAAM,CACRpkB,GAAImB,EAAGtF,aAAa,oBACpBoE,UAAWkB,EACXR,SAAU9L,SAAS+G,cAAcuF,EAAGtF,aAAa,sBAEnD+oB,EAAY1yB,KAAKkyB,GAEbnuB,IACF8tB,EAAeK,EAAIpkB,GAEvB,IACA,IAAIgkB,GAAKY,EAAa,CACpBb,aAAcA,GAElB,GACF,CAYA,SAASc,GAA0B9oB,GAAO,OAQ1C,SAAmCA,GAAO,GAAIC,MAAMC,QAAQF,GAAM,OAAO+oB,GAAyB/oB,EAAM,CARvDgpB,CAA0BhpB,IAM3E,SAAiCK,GAAQ,GAAsB,oBAAXC,QAAmD,MAAzBD,EAAKC,OAAOC,WAA2C,MAAtBF,EAAK,cAAuB,OAAOJ,MAAMO,KAAKH,EAAO,CANjF4oB,CAAwBjpB,IAI3G,SAA4CU,EAAGC,GAAU,GAAKD,EAAL,CAAgB,GAAiB,iBAANA,EAAgB,OAAOqoB,GAAyBroB,EAAGC,GAAS,IAAIC,EAAIC,OAAOtF,UAAUuF,SAAS/F,KAAK2F,GAAGtH,MAAM,GAAI,GAAiE,MAAnD,WAANwH,GAAkBF,EAAE/J,cAAaiK,EAAIF,EAAE/J,YAAY+I,MAAgB,QAANkB,GAAqB,QAANA,EAAoBX,MAAMO,KAAKE,GAAc,cAANE,GAAqB,2CAA2CzB,KAAKyB,GAAWmoB,GAAyBroB,EAAGC,QAAhH,CAApP,CAA6W,CAJjUuoB,CAAmClpB,IAEtJ,WAAuC,MAAM,IAAIgB,UAAU,uIAAyI,CAFtCmoB,EAA6B,CAU3L,SAASJ,GAAyB/oB,EAAKkB,IAAkB,MAAPA,GAAeA,EAAMlB,EAAI3G,UAAQ6H,EAAMlB,EAAI3G,QAAQ,IAAK,IAAI8H,EAAI,EAAGC,EAAO,IAAInB,MAAMiB,GAAMC,EAAID,EAAKC,IAAOC,EAAKD,GAAKnB,EAAImB,GAAM,OAAOC,CAAM,CAE7L,SAASgoB,GAAgBvsB,EAAQyE,GAAkB,IAAIC,EAAOV,OAAOU,KAAK1E,GAAS,GAAIgE,OAAOW,sBAAuB,CAAE,IAAIC,EAAUZ,OAAOW,sBAAsB3E,GAASyE,IAAmBG,EAAUA,EAAQ7D,QAAO,SAAU8D,GAAO,OAAOb,OAAOc,yBAAyB9E,EAAQ6E,GAAKE,UAAY,KAAKL,EAAKpL,KAAK0L,MAAMN,EAAME,EAAU,CAAE,OAAOF,CAAM,CAE5V,SAAS8nB,GAAqBtnB,GAAU,IAAK,IAAIZ,EAAI,EAAGA,EAAIa,UAAU3I,OAAQ8H,IAAK,CAAE,IAAIc,EAAS,MAAQD,UAAUb,GAAKa,UAAUb,GAAK,CAAC,EAAGA,EAAI,EAAIioB,GAAgBvoB,OAAOoB,IAAS,GAAIC,SAAQ,SAAUnF,GAAOusB,GAAuBvnB,EAAQhF,EAAKkF,EAAOlF,GAAO,IAAK8D,OAAOuB,0BAA4BvB,OAAOwB,iBAAiBN,EAAQlB,OAAOuB,0BAA0BH,IAAWmnB,GAAgBvoB,OAAOoB,IAASC,SAAQ,SAAUnF,GAAO8D,OAAOyB,eAAeP,EAAQhF,EAAK8D,OAAOc,yBAAyBM,EAAQlF,GAAO,GAAI,CAAE,OAAOgF,CAAQ,CAEvhB,SAASunB,GAAuB/mB,EAAKxF,EAAKC,GAAiK,OAApJD,KAAOwF,EAAO1B,OAAOyB,eAAeC,EAAKxF,EAAK,CAAEC,MAAOA,EAAO4E,YAAY,EAAMY,cAAc,EAAMC,UAAU,IAAkBF,EAAIxF,GAAOC,EAAgBuF,CAAK,CAEvN,SAASgnB,GAAuB5mB,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAI5B,UAAU,oCAAwC,CAE/J,SAASwoB,GAAyBznB,EAAQe,GAAS,IAAK,IAAI3B,EAAI,EAAGA,EAAI2B,EAAMzJ,OAAQ8H,IAAK,CAAE,IAAI4B,EAAaD,EAAM3B,GAAI4B,EAAWnB,WAAamB,EAAWnB,aAAc,EAAOmB,EAAWP,cAAe,EAAU,UAAWO,IAAYA,EAAWN,UAAW,GAAM5B,OAAOyB,eAAeP,EAAQgB,EAAWhG,IAAKgG,EAAa,CAAE,CAvDnU2C,OAAOuiB,KAAOA,GAyBc,YAAxBnvB,SAASoC,WAEX0tB,KAGA9vB,SAASzB,iBAAiB,mBAAoBuxB,IA8BhD,IAAIa,GAAkB,CACpB9Y,UAAW,MACXsS,YAAa,QACbC,OAAQ,WAAmB,EAC3B3Y,OAAQ,WAAmB,GAGzBmf,GAAuB,WACzB,SAASA,IACP,IAAI9kB,EAAW5C,UAAU3I,OAAS,QAAsByF,IAAjBkD,UAAU,GAAmBA,UAAU,GAAK,KAC/EkC,EAAYlC,UAAU3I,OAAS,QAAsByF,IAAjBkD,UAAU,GAAmBA,UAAU,GAAK,KAChFyB,EAAUzB,UAAU3I,OAAS,QAAsByF,IAAjBkD,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAEnFunB,GAAuBtzB,KAAMyzB,GAE7BzzB,KAAK8P,UAAYnB,EACjB3O,KAAK+P,WAAa9B,EAClBjO,KAAK0N,SAAW0lB,GAAqBA,GAAqB,CAAC,EAAGI,IAAkBhmB,GAChFxN,KAAKqtB,gBAAkBrtB,KAAKstB,uBAE5BttB,KAAK2N,OACP,CAxBF,IAA6BhB,EAAaiB,EA+HxC,OA/H2BjB,EA0BP8mB,GA1BoB7lB,EA0BX,CAAC,CAC5B9G,IAAK,QACLC,MAAO,WACL,IAAI8G,EAAQ7N,KAEZ,GAAIA,KAAK+P,WAAY,CACnB,IAAI2jB,EAAgB1zB,KAAK2zB,oBAEzBD,EAAcE,WAAW3nB,SAAQ,SAAUshB,GACzC1f,EAAMkC,WAAW3O,iBAAiBmsB,GAAI,WACpC1f,EAAM6f,MACR,GACF,IACAgG,EAAcG,WAAW5nB,SAAQ,SAAUshB,GACzC1f,EAAMkC,WAAW3O,iBAAiBmsB,GAAI,WACpC1f,EAAM2G,MACR,GACF,GACF,CACF,GACC,CACD1N,IAAK,uBACLC,MAAO,WACL,OAAOke,GAAoBjlB,KAAK+P,WAAY/P,KAAK8P,UAAW,CAC1D4K,UAAW1a,KAAK0N,SAASgN,UACzBI,UAAW,CAAC,CACVrR,KAAM,SACN+D,QAAS,CACPiX,OAAQ,CAAC,EAAG,OAIpB,GACC,CACD3d,IAAK,oBACLC,MAAO,WACL,OAAQ/G,KAAK0N,SAASsf,aACpB,IAAK,QAYL,QACE,MAAO,CACL4G,WAAY,CAAC,aAAc,SAC3BC,WAAY,CAAC,aAAc,SAT/B,IAAK,QACH,MAAO,CACLD,WAAY,CAAC,QAAS,SACtBC,WAAY,CAAC,WAAY,SASjC,GACC,CACD/sB,IAAK,OACLC,MAAO,WACL/G,KAAK8P,UAAUrB,UAAUpH,OAAO,YAAa,aAE7CrH,KAAK8P,UAAUrB,UAAUlG,IAAI,cAAe,WAG5CvI,KAAKqtB,gBAAgBjQ,YAAW,SAAU5P,GACxC,OAAO4lB,GAAqBA,GAAqB,CAAC,EAAG5lB,GAAU,CAAC,EAAG,CACjEsN,UAAW,GAAGrG,OAAOoe,GAA0BrlB,EAAQsN,WAAY,CAAC,CAClErR,KAAM,iBACNxJ,SAAS,MAGf,IAGAD,KAAKqtB,gBAAgBlP,SAGrBne,KAAK0N,SAASuf,OAAOjtB,KACvB,GACC,CACD8G,IAAK,OACLC,MAAO,WACL/G,KAAK8P,UAAUrB,UAAUpH,OAAO,cAAe,WAE/CrH,KAAK8P,UAAUrB,UAAUlG,IAAI,YAAa,aAG1CvI,KAAKqtB,gBAAgBjQ,YAAW,SAAU5P,GACxC,OAAO4lB,GAAqBA,GAAqB,CAAC,EAAG5lB,GAAU,CAAC,EAAG,CACjEsN,UAAW,GAAGrG,OAAOoe,GAA0BrlB,EAAQsN,WAAY,CAAC,CAClErR,KAAM,iBACNxJ,SAAS,MAGf,IAGAD,KAAK0N,SAAS4G,OAAOtU,KACvB,MA5HiFuzB,GAAyB5mB,EAAYrH,UAAWsI,GAAkFhD,OAAOyB,eAAeM,EAAa,YAAa,CAAEH,UAAU,IA+H1QinB,CACT,CAtH2B,GA0H3B,SAASK,KACPjxB,SAASoM,iBAAiB,yBAAyBhD,SAAQ,SAAUgC,GACnE,IAAIU,EAAW9L,SAASyN,eAAerC,EAAUpE,aAAa,wBAC1DmjB,EAAc/e,EAAUpE,aAAa,wBACrC6Q,EAAYzM,EAAUpE,aAAa,0BACvC,IAAI4pB,GAAQ9kB,EAAUV,EAAW,CAC/ByM,UAAWA,GAAwB8Y,GAAgB9Y,UACnDsS,YAAaA,GAA4BwG,GAAgBxG,aAE7D,GACF,CAYA,SAAS+G,GAA0BhqB,GAAO,OAQ1C,SAAmCA,GAAO,GAAIC,MAAMC,QAAQF,GAAM,OAAOiqB,GAAyBjqB,EAAM,CARvDkqB,CAA0BlqB,IAM3E,SAAiCK,GAAQ,GAAsB,oBAAXC,QAAmD,MAAzBD,EAAKC,OAAOC,WAA2C,MAAtBF,EAAK,cAAuB,OAAOJ,MAAMO,KAAKH,EAAO,CANjF8pB,CAAwBnqB,IAI3G,SAA4CU,EAAGC,GAAU,GAAKD,EAAL,CAAgB,GAAiB,iBAANA,EAAgB,OAAOupB,GAAyBvpB,EAAGC,GAAS,IAAIC,EAAIC,OAAOtF,UAAUuF,SAAS/F,KAAK2F,GAAGtH,MAAM,GAAI,GAAiE,MAAnD,WAANwH,GAAkBF,EAAE/J,cAAaiK,EAAIF,EAAE/J,YAAY+I,MAAgB,QAANkB,GAAqB,QAANA,EAAoBX,MAAMO,KAAKE,GAAc,cAANE,GAAqB,2CAA2CzB,KAAKyB,GAAWqpB,GAAyBvpB,EAAGC,QAAhH,CAApP,CAA6W,CAJjUypB,CAAmCpqB,IAEtJ,WAAuC,MAAM,IAAIgB,UAAU,uIAAyI,CAFtCqpB,EAA6B,CAU3L,SAASJ,GAAyBjqB,EAAKkB,IAAkB,MAAPA,GAAeA,EAAMlB,EAAI3G,UAAQ6H,EAAMlB,EAAI3G,QAAQ,IAAK,IAAI8H,EAAI,EAAGC,EAAO,IAAInB,MAAMiB,GAAMC,EAAID,EAAKC,IAAOC,EAAKD,GAAKnB,EAAImB,GAAM,OAAOC,CAAM,CAE7L,SAASkpB,GAAgBztB,EAAQyE,GAAkB,IAAIC,EAAOV,OAAOU,KAAK1E,GAAS,GAAIgE,OAAOW,sBAAuB,CAAE,IAAIC,EAAUZ,OAAOW,sBAAsB3E,GAASyE,IAAmBG,EAAUA,EAAQ7D,QAAO,SAAU8D,GAAO,OAAOb,OAAOc,yBAAyB9E,EAAQ6E,GAAKE,UAAY,KAAKL,EAAKpL,KAAK0L,MAAMN,EAAME,EAAU,CAAE,OAAOF,CAAM,CAE5V,SAASgpB,GAAqBxoB,GAAU,IAAK,IAAIZ,EAAI,EAAGA,EAAIa,UAAU3I,OAAQ8H,IAAK,CAAE,IAAIc,EAAS,MAAQD,UAAUb,GAAKa,UAAUb,GAAK,CAAC,EAAGA,EAAI,EAAImpB,GAAgBzpB,OAAOoB,IAAS,GAAIC,SAAQ,SAAUnF,GAAOytB,GAAuBzoB,EAAQhF,EAAKkF,EAAOlF,GAAO,IAAK8D,OAAOuB,0BAA4BvB,OAAOwB,iBAAiBN,EAAQlB,OAAOuB,0BAA0BH,IAAWqoB,GAAgBzpB,OAAOoB,IAASC,SAAQ,SAAUnF,GAAO8D,OAAOyB,eAAeP,EAAQhF,EAAK8D,OAAOc,yBAAyBM,EAAQlF,GAAO,GAAI,CAAE,OAAOgF,CAAQ,CAEvhB,SAASyoB,GAAuBjoB,EAAKxF,EAAKC,GAAiK,OAApJD,KAAOwF,EAAO1B,OAAOyB,eAAeC,EAAKxF,EAAK,CAAEC,MAAOA,EAAO4E,YAAY,EAAMY,cAAc,EAAMC,UAAU,IAAkBF,EAAIxF,GAAOC,EAAgBuF,CAAK,CAEvN,SAASkoB,GAAuB9nB,EAAUC,GAAe,KAAMD,aAAoBC,GAAgB,MAAM,IAAI5B,UAAU,oCAAwC,CAE/J,SAAS0pB,GAAyB3oB,EAAQe,GAAS,IAAK,IAAI3B,EAAI,EAAGA,EAAI2B,EAAMzJ,OAAQ8H,IAAK,CAAE,IAAI4B,EAAaD,EAAM3B,GAAI4B,EAAWnB,WAAamB,EAAWnB,aAAc,EAAOmB,EAAWP,cAAe,EAAU,UAAWO,IAAYA,EAAWN,UAAW,GAAM5B,OAAOyB,eAAeP,EAAQgB,EAAWhG,IAAKgG,EAAa,CAAE,CA5CnU2C,OAAOgkB,QAAUA,GAcW,YAAxB5wB,SAASoC,WAEX6uB,KAGAjxB,SAASzB,iBAAiB,mBAAoB0yB,IA8BhD,IAAIY,GAAkB,CACpBha,UAAW,MACX+J,OAAQ,GACRuI,YAAa,QACbC,OAAQ,WAAmB,EAC3B3Y,OAAQ,WAAmB,GAGzBqgB,GAAuB,WACzB,SAASA,IACP,IAAIhmB,EAAW5C,UAAU3I,OAAS,QAAsByF,IAAjBkD,UAAU,GAAmBA,UAAU,GAAK,KAC/EkC,EAAYlC,UAAU3I,OAAS,QAAsByF,IAAjBkD,UAAU,GAAmBA,UAAU,GAAK,KAChFyB,EAAUzB,UAAU3I,OAAS,QAAsByF,IAAjBkD,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAEnFyoB,GAAuBx0B,KAAM20B,GAE7B30B,KAAK8P,UAAYnB,EACjB3O,KAAK+P,WAAa9B,EAClBjO,KAAK0N,SAAW4mB,GAAqBA,GAAqB,CAAC,EAAGI,IAAkBlnB,GAChFxN,KAAKqtB,gBAAkBrtB,KAAKstB,uBAE5BttB,KAAK2N,OACP,CAzBF,IAA6BhB,EAAaiB,EAgJxC,OAhJ2BjB,EA2BPgoB,GA3BoB/mB,EA2BX,CAAC,CAC5B9G,IAAK,QACLC,MAAO,WACL,IAAI8G,EAAQ7N,KAEZ,GAAIA,KAAK+P,WAAY,CACnB,IAAI2jB,EAAgB1zB,KAAK2zB,oBAEzBD,EAAcE,WAAW3nB,SAAQ,SAAUshB,GACzC1f,EAAMkC,WAAW3O,iBAAiBmsB,GAAI,WACpC1f,EAAM6f,MACR,IAEA7f,EAAMiC,UAAU1O,iBAAiBmsB,GAAI,WACnC1f,EAAM6f,MACR,GACF,IACAgG,EAAcG,WAAW5nB,SAAQ,SAAUshB,GACzC1f,EAAMkC,WAAW3O,iBAAiBmsB,GAAI,WACpCtrB,YAAW,WACJ4L,EAAMiC,UAAU8kB,QAAQ,WAC3B/mB,EAAM2G,MAEV,GAAG,IACL,IAEA3G,EAAMiC,UAAU1O,iBAAiBmsB,GAAI,WACnCtrB,YAAW,WACJ4L,EAAMkC,WAAW6kB,QAAQ,WAC5B/mB,EAAM2G,MAEV,GAAG,IACL,GACF,GACF,CACF,GACC,CACD1N,IAAK,uBACLC,MAAO,WACL,OAAOke,GAAoBjlB,KAAK+P,WAAY/P,KAAK8P,UAAW,CAC1D4K,UAAW1a,KAAK0N,SAASgN,UACzBI,UAAW,CAAC,CACVrR,KAAM,SACN+D,QAAS,CACPiX,OAAQ,CAAC,EAAGzkB,KAAK0N,SAAS+W,YAIlC,GACC,CACD3d,IAAK,oBACLC,MAAO,WACL,OAAQ/G,KAAK0N,SAASsf,aACpB,IAAK,QAYL,QACE,MAAO,CACL4G,WAAY,CAAC,aAAc,SAC3BC,WAAY,CAAC,aAAc,SAT/B,IAAK,QACH,MAAO,CACLD,WAAY,CAAC,QAAS,SACtBC,WAAY,CAAC,WAAY,SASjC,GACC,CACD/sB,IAAK,OACLC,MAAO,WACL/G,KAAK8P,UAAUrB,UAAUpH,OAAO,YAAa,aAE7CrH,KAAK8P,UAAUrB,UAAUlG,IAAI,cAAe,WAG5CvI,KAAKqtB,gBAAgBjQ,YAAW,SAAU5P,GACxC,OAAO8mB,GAAqBA,GAAqB,CAAC,EAAG9mB,GAAU,CAAC,EAAG,CACjEsN,UAAW,GAAGrG,OAAOsf,GAA0BvmB,EAAQsN,WAAY,CAAC,CAClErR,KAAM,iBACNxJ,SAAS,MAGf,IAGAD,KAAKqtB,gBAAgBlP,SAGrBne,KAAK0N,SAASuf,OAAOjtB,KACvB,GACC,CACD8G,IAAK,OACLC,MAAO,WACL/G,KAAK8P,UAAUrB,UAAUpH,OAAO,cAAe,WAE/CrH,KAAK8P,UAAUrB,UAAUlG,IAAI,YAAa,aAG1CvI,KAAKqtB,gBAAgBjQ,YAAW,SAAU5P,GACxC,OAAO8mB,GAAqBA,GAAqB,CAAC,EAAG9mB,GAAU,CAAC,EAAG,CACjEsN,UAAW,GAAGrG,OAAOsf,GAA0BvmB,EAAQsN,WAAY,CAAC,CAClErR,KAAM,iBACNxJ,SAAS,MAGf,IAGAD,KAAK0N,SAAS4G,OAAOtU,KACvB,MA7IiFy0B,GAAyB9nB,EAAYrH,UAAWsI,GAAkFhD,OAAOyB,eAAeM,EAAa,YAAa,CAAEH,UAAU,IAgJ1QmoB,CACT,CAtI2B,GA0I3B,SAASE,KACPhyB,SAASoM,iBAAiB,yBAAyBhD,SAAQ,SAAUgC,GACnE,IAAIU,EAAW9L,SAASyN,eAAerC,EAAUpE,aAAa,wBAC1DmjB,EAAc/e,EAAUpE,aAAa,wBACrC6Q,EAAYzM,EAAUpE,aAAa,0BACnC4a,EAASxW,EAAUpE,aAAa,uBACpC,IAAI8qB,GAAQhmB,EAAUV,EAAW,CAC/ByM,UAAWA,GAAwBga,GAAgBha,UACnD+J,OAAQA,EAASqQ,SAASrQ,GAAUiQ,GAAgBjQ,OACpDuI,YAAaA,GAA4B0H,GAAgB1H,aAE7D,GACF,CAdAvd,OAAOklB,QAAUA,GAgBW,YAAxB9xB,SAASoC,WAEX4vB,KAGAhyB,SAASzB,iBAAiB,mBAAoByzB,GA6BtC,EAv5HD,KCCLE,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBpsB,IAAjBqsB,EACH,OAAOA,EAAaC,QAGrB,IAAIC,EAASL,EAAyBE,GAAY,CAGjDE,QAAS,CAAC,GAOX,OAHAE,EAAoBJ,GAAUG,EAAQA,EAAOD,QAASH,GAG/CI,EAAOD,OACf,CCrBAH,EAAoBM,EAAI,CAACH,EAASI,KACjC,IAAI,IAAIzuB,KAAOyuB,EACXP,EAAoBvqB,EAAE8qB,EAAYzuB,KAASkuB,EAAoBvqB,EAAE0qB,EAASruB,IAC5E8D,OAAOyB,eAAe8oB,EAASruB,EAAK,CAAE6E,YAAY,EAAM+P,IAAK6Z,EAAWzuB,IAE1E,ECNDkuB,EAAoBvqB,EAAI,CAAC6B,EAAKkpB,IAAU5qB,OAAOtF,UAAUgb,eAAexb,KAAKwH,EAAKkpB,GCClFR,EAAoBS,EAAKN,IACH,oBAAX9qB,QAA0BA,OAAOqrB,aAC1C9qB,OAAOyB,eAAe8oB,EAAS9qB,OAAOqrB,YAAa,CAAE3uB,MAAO,WAE7D6D,OAAOyB,eAAe8oB,EAAS,aAAc,CAAEpuB,OAAO,GAAO,sBCD9D,WACI,QAAuB8B,IAAnB4G,OAAOkmB,cACmB9sB,IAA1B4G,OAAOmmB,gBACPnmB,OAAOmmB,eAAeC,0BACtB,OAEJ,MAAMC,EAAqB5gB,YAM3BzF,OAAOyF,YAJU,WACT,OAAOygB,QAAQI,UAAUD,EAAoB,GAAI91B,KAAKU,YAC1D,EAGJwU,YAAY5P,UAAYwwB,EAAmBxwB,UAC3C4P,YAAY5P,UAAU5E,YAAcwU,YACpCtK,OAAOorB,eAAe9gB,YAAa4gB,EACtC,CAhBD,GA0CA,SAAUxwB,GAuBR,SAAS2wB,EAAMC,EAAkB3wB,EAASkE,GACxC,MAAM,IAAIysB,EAAiB,2DAA6D3wB,EAAU,IAAKkE,EACzG,CAxBsC,mBAA3BnE,EAAU6wB,gBAErB7wB,EAAU6wB,cAAgB,SAASC,GAC7BA,GAaN,SAA2BA,EAAWC,GACpCD,aAAqBlhB,aAAe+gB,EAAMlrB,UAAW,4CACnC,UAAlBqrB,EAAUxwB,MAAoBqwB,EAAMlrB,UAAW,gDAC/CqrB,EAAUC,MAAQA,GAAQJ,EAAMK,aAAc,0DAA2D,gBAC3G,CAhBIC,CAAkBH,EAAWp2B,MAC7Bo2B,EAAUI,WAEVJ,EAAYvzB,SAASuG,cAAc,UACzBxD,KAAO,SACjBwwB,EAAUK,QAAS,EACnBz2B,KAAK02B,YAAYN,GACjBA,EAAUI,QACVx2B,KAAK22B,YAAYP,GAErB,EAWD,CA1BD,CA0BGQ,gBAAgBtxB,WAEnB,MAAMuxB,EAAmB,IAAIC,QAM7B,SAASC,EAAcvxB,GACnB,MAAM4wB,EANV,SAAsCtqB,GAClC,MAAMpC,EAAUoC,aAAkBkJ,QAAUlJ,EAASA,aAAkBkrB,KAAOlrB,EAAOmrB,cAAgB,KAC/FC,EAAYxtB,EAAUA,EAAQytB,QAAQ,iBAAmB,KAC/D,MAAiF,WAAzED,aAA6C,EAASA,EAAUtxB,MAAoBsxB,EAAY,IAC5G,CAEsBE,CAA6B5xB,EAAMsG,QACjDsqB,GAAaA,EAAUC,MACvBQ,EAAiBlb,IAAIya,EAAUC,KAAMD,EAE7C,CAwBA,IAAIiB,EAuWAC,EA2LAC,EASAC,EA46BAC,EAOAC,GAr/CJ,WACI,GAAI,cAAeC,MAAMryB,UACrB,OACJ,IAAIA,EACJ,GAAI,gBAAiBmK,QAAU,iBAAiBvG,KAAKsQ,UAAUoe,QAC3DtyB,EAAYmK,OAAOooB,YAAYvyB,cAE9B,IAAI,gBAAiBmK,OACtB,OAGAnK,EAAYmK,OAAOkoB,MAAMryB,SAC7B,CACAlE,iBAAiB,QAAS21B,GAAe,GACzCnsB,OAAOyB,eAAe/G,EAAW,YAAa,CAC1CoW,MACI,GAAiB,UAAb1b,KAAK4F,MAAoB5F,KAAK8L,kBAAkB8qB,gBAChD,OAAOC,EAAiBnb,IAAI1b,KAAK8L,OAEzC,GAEP,CArBD,GAwBA,SAAWurB,GACPA,EAAyB,MAAI,QAC7BA,EAAwB,KAAI,MAC/B,CAHD,CAGGA,IAAsBA,EAAoB,CAAC,IAC9C,MAAMS,UAAqB5iB,YACvBxU,cACIq3B,QACA/3B,KAAKg4B,OAASrZ,QAAQC,UACtB5e,KAAKi4B,SAAW,IAAIH,EAAaI,oBAAoBl4B,KACzD,CACWm4B,gCACP,MAAO,CAAC,WAAY,WAAY,UAAW,MAC/C,CACAC,oBACIp4B,KAAKi4B,SAAShvB,SAClB,CACAovB,uBACIr4B,KAAKi4B,SAASjyB,YAClB,CACAD,SACI,MAAM,IAAEuyB,GAAQt4B,KAIhB,OAHAA,KAAK2lB,gBAAgB,YACrB3lB,KAAKs4B,IAAM,KACXt4B,KAAKs4B,IAAMA,EACJt4B,KAAKg4B,MAChB,CACAO,yBAAyB9uB,GACT,WAARA,EACAzJ,KAAKi4B,SAASO,sBAED,YAAR/uB,EACLzJ,KAAKi4B,SAASQ,kBAED,OAARhvB,EACLzJ,KAAKi4B,SAASS,mBAGd14B,KAAKi4B,SAASU,iBAEtB,CACIL,UACA,OAAOt4B,KAAK6J,aAAa,MAC7B,CACIyuB,QAAIvxB,GACAA,EACA/G,KAAK4O,aAAa,MAAO7H,GAGzB/G,KAAK2lB,gBAAgB,MAE7B,CACIiT,cACA,MA6CK,UA7C8B54B,KAAK6J,aAAa,YAAc,IA4CzD3E,cAECmyB,EAAkBwB,KAElBxB,EAAkByB,KA/CjC,CACIF,YAAQ7xB,GACJA,EACA/G,KAAK4O,aAAa,UAAW7H,GAG7B/G,KAAK2lB,gBAAgB,UAE7B,CACIoT,eACA,OAAO/4B,KAAKiQ,aAAa,WAC7B,CACI8oB,aAAShyB,GACLA,EACA/G,KAAK4O,aAAa,WAAY,IAG9B5O,KAAK2lB,gBAAgB,WAE7B,CACIqT,iBACA,OAAOh5B,KAAKiQ,aAAa,aAC7B,CACI+oB,eAAWjyB,GACPA,EACA/G,KAAK4O,aAAa,aAAc,IAGhC5O,KAAK2lB,gBAAgB,aAE7B,CACIsT,eACA,OAAQj5B,KAAKi4B,SAASiB,SAC1B,CACIj1B,eACA,OAAOjE,KAAK6U,gBAAkBhS,WAAa7C,KAAKm5B,SACpD,CACIA,gBACA,IAAIC,EAAIC,EACR,OAAoG,QAA5FA,EAAmC,QAA7BD,EAAKp5B,KAAK6U,qBAAkC,IAAPukB,OAAgB,EAASA,EAAGriB,uBAAoC,IAAPsiB,OAAgB,EAASA,EAAGppB,aAAa,qBACzJ,EAWJ,SAASqpB,EAAUC,GACf,OAAO,IAAIC,IAAID,EAAU1uB,WAAYhI,SAAS42B,QAClD,CACA,SAASC,EAAUt1B,GACf,IAAIu1B,EACJ,OAAIv1B,EAAI8c,KACG9c,EAAI8c,KAAK/d,MAAM,IAEhBw2B,EAAcv1B,EAAIiF,KAAKuwB,MAAM,WAC5BD,EAAY,QADlB,CAGT,CACA,SAASE,EAAUxD,EAAMD,GAErB,OAAOkD,GADSlD,aAA6C,EAASA,EAAUvsB,aAAa,gBAAkBwsB,EAAKxsB,aAAa,WAAawsB,EAAKnvB,OAEvJ,CAWA,SAAS4yB,EAAoBC,EAAUC,GACnC,OALJ,SAAsBC,EAAS71B,GAC3B,MAAM81B,EAsBV,SAAmB91B,GACf,OAEsB2C,EAFE3C,EAAI+1B,OAAS/1B,EAAIg2B,UAG5BC,SAAS,KAAOtzB,EAAQA,EAAQ,IADjD,IAA0BA,CAD1B,CAxBmBuzB,CAAUl2B,GACzB,OAAO61B,EAAQ5wB,OAASiwB,EAAUY,GAAQ7wB,MAAQ4wB,EAAQ5wB,KAAKkxB,WAAWL,EAC9E,CAEWM,CAAaT,EAAUC,OAXZ51B,EAWoC21B,GAe1D,SAA8B31B,GAC1B,OAJJ,SAA2BA,GACvB,OAAOA,EAAIg2B,SAAS1rB,MAAM,KAAKvL,MAAM,EACzC,CAEWs3B,CAAkBr2B,GAAKjB,OAAO,GAAG,EAC5C,CA3BYu3B,CAAqBt2B,GAAKw1B,MAAM,aAAe,IAAI,IAAM,IAGtCA,MAAM,mCAJrC,IAAsBx1B,CAYtB,CACA,SAASu2B,EAAcv2B,GACnB,MAAMw2B,EAASlB,EAAUt1B,GACzB,OAAiB,MAAVw2B,EAAiBx2B,EAAIiF,KAAKlG,MAAM,IAAKy3B,EAAOx3B,OAAS,IAAMgB,EAAIiF,IAC1E,CACA,SAASwxB,EAAWz2B,GAChB,OAAOu2B,EAAcv2B,EACzB,CAiBA,MAAM02B,EACFp6B,YAAYq6B,GACR/6B,KAAK+6B,SAAWA,CACpB,CACIC,gBACA,OAAOh7B,KAAK+6B,SAASE,EACzB,CACIC,aACA,OAAQl7B,KAAKg7B,SACjB,CACIG,kBACA,OAAOn7B,KAAKo7B,YAAc,KAAOp7B,KAAKo7B,YAAc,GACxD,CACIC,kBACA,OAAOr7B,KAAKo7B,YAAc,KAAOp7B,KAAKo7B,YAAc,GACxD,CACIE,iBACA,OAAOt7B,KAAK+6B,SAASO,UACzB,CACIvB,eACA,OAAOT,EAAUt5B,KAAK+6B,SAAS32B,IACnC,CACIm3B,aACA,OAAOv7B,KAAKw7B,aAAex7B,KAAKw7B,YAAY5B,MAAM,yDACtD,CACIwB,iBACA,OAAOp7B,KAAK+6B,SAASU,MACzB,CACID,kBACA,OAAOx7B,KAAK07B,OAAO,eACvB,CACIC,mBACA,OAAO37B,KAAK+6B,SAASa,QAAQC,MACjC,CACIC,mBACA,OAAI97B,KAAKu7B,OACEv7B,KAAK+6B,SAASa,QAAQC,OAGtBld,QAAQC,aAAQ/V,EAE/B,CACA6yB,OAAOjyB,GACH,OAAOzJ,KAAK+6B,SAASgB,QAAQrgB,IAAIjS,EACrC,EAGJ,SAASuyB,EAAS90B,GACd,MAAiB,WAAVA,GAAiC,WAAVA,GAAiC,WAAVA,CACzD,CAEA,SAAS+0B,EAAsBvyB,GAC3B,GAA+C,SAA3CA,EAAQG,aAAa,mBACrB,OAAOH,EAEN,CACD,MAAMwyB,EAAuBr5B,SAASuG,cAAc,UAC9C+yB,EAAWC,EAAe,aAOhC,OANID,IACAD,EAAqBG,MAAQF,GAEjCD,EAAqBI,YAAc5yB,EAAQ4yB,YAC3CJ,EAAqBK,OAAQ,EAKrC,SAA+BC,EAAoBC,GAC/C,IAAK,MAAM,KAAEhzB,EAAI,MAAE1C,KAAW01B,EAAczf,WACxCwf,EAAmB5tB,aAAanF,EAAM1C,EAE9C,CARQ21B,CAAsBR,EAAsBxyB,GACrCwyB,CACX,CACJ,CAWA,SAASS,EAASx3B,GAAW,OAAE2G,EAAM,WAAE8wB,EAAU,OAAEC,GAAW,CAAC,GAC3D,MAAMr3B,EAAQ,IAAIs3B,YAAY33B,EAAW,CACrCy3B,aACAG,SAAS,EACTF,WAQJ,OANI/wB,GAAUA,EAAOkxB,YACjBlxB,EAAOmxB,cAAcz3B,GAGrB3C,SAASkU,gBAAgBkmB,cAAcz3B,GAEpCA,CACX,CACA,SAAS03B,IACL,OAAO,IAAIve,SAASC,GAAYue,uBAAsB,IAAMve,OAChE,CAOA,SAASwe,EAAkBrb,EAAO,IAC9B,OAAO,IAAIsb,WAAYC,gBAAgBvb,EAAM,YACjD,CACA,SAASwb,EAASC,KAAYC,GAC1B,MAAMC,EAKV,SAAqBF,EAASC,GAC1B,OAAOD,EAAQhjB,QAAO,CAACU,EAAQyiB,EAAQzyB,IAE5BgQ,EAASyiB,GADW90B,MAAb40B,EAAOvyB,GAAkB,GAAKuyB,EAAOvyB,KAEpD,GACP,CAVkB0yB,CAAYJ,EAASC,GAAQn0B,QAAQ,MAAO,IAAIoF,MAAM,MAC9DkrB,EAAQ8D,EAAM,GAAG9D,MAAM,QACvBiE,EAASjE,EAAQA,EAAM,GAAGx2B,OAAS,EACzC,OAAOs6B,EAAM11B,KAAK81B,GAASA,EAAK36B,MAAM06B,KAASE,KAAK,KACxD,CAOA,SAASC,IACL,OAAOh0B,MAAMO,KAAK,CAAEnH,OAAQ,KACvB4E,KAAI,CAACi2B,EAAG/yB,IACA,GAALA,GAAe,IAALA,GAAgB,IAALA,GAAgB,IAALA,EACzB,IAEG,IAALA,EACE,IAEG,IAALA,GACG7I,KAAK67B,MAAsB,EAAhB77B,KAAKG,UAAgB,GAAGqI,SAAS,IAG7CxI,KAAK67B,MAAsB,GAAhB77B,KAAKG,UAAeqI,SAAS,MAGlDkzB,KAAK,GACd,CACA,SAASl0B,EAAas0B,KAAkBphB,GACpC,IAAK,MAAMhW,KAASgW,EAAS/U,KAAK0B,GAAYA,aAAyC,EAASA,EAAQG,aAAas0B,KACjH,GAAoB,iBAATp3B,EACP,OAAOA,EAEf,OAAO,IACX,CAIA,SAASq3B,KAAcrhB,GACnB,IAAK,MAAMrT,KAAWqT,EACO,eAArBrT,EAAQ20B,WACR30B,EAAQkF,aAAa,OAAQ,IAEjClF,EAAQkF,aAAa,YAAa,OAE1C,CACA,SAAS0vB,KAAkBvhB,GACvB,IAAK,MAAMrT,KAAWqT,EACO,eAArBrT,EAAQ20B,WACR30B,EAAQic,gBAAgB,QAE5Bjc,EAAQic,gBAAgB,YAEhC,CACA,SAAS4Y,EAAY70B,EAAS80B,EAAwB,KAClD,OAAO,IAAI7f,SAASC,IAChB,MAAM6f,EAAa,KACf/0B,EAAQlI,oBAAoB,QAASi9B,GACrC/0B,EAAQlI,oBAAoB,OAAQi9B,GACpC7f,GAAS,EAEblV,EAAQtI,iBAAiB,OAAQq9B,EAAY,CAAEC,MAAM,IACrDh1B,EAAQtI,iBAAiB,QAASq9B,EAAY,CAAEC,MAAM,IACtDz8B,WAAW2c,EAAS4f,EAAsB,GAElD,CACA,SAASG,EAA0Bz3B,GAC/B,OAAQA,GACJ,IAAK,UACD,OAAO03B,QAAQC,aACnB,IAAK,UACL,IAAK,UACD,OAAOD,QAAQE,UAE3B,CAKA,SAASC,EAAet1B,GACpB,OAAO5G,SAAS+G,cAAc,cAAcH,MAChD,CACA,SAAS2yB,EAAe3yB,GACpB,MAAMC,EAAUq1B,EAAet1B,GAC/B,OAAOC,GAAWA,EAAQs1B,OAC9B,EAaA,SAAW1H,GACPA,EAAYA,EAAiB,IAAI,GAAK,MACtCA,EAAYA,EAAkB,KAAI,GAAK,OACvCA,EAAYA,EAAiB,IAAI,GAAK,MACtCA,EAAYA,EAAmB,MAAI,GAAK,QACxCA,EAAYA,EAAoB,OAAI,GAAK,QAC5C,CAND,CAMGA,IAAgBA,EAAc,CAAC,IAelC,MAAM2H,EACFv+B,YAAYu3B,EAAUiH,EAAQnF,EAAUnhB,EAAO,IAAIumB,gBAAmBrzB,EAAS,MAC3E9L,KAAKo/B,gBAAkB,IAAIC,gBAC3Br/B,KAAKs/B,sBAAyBC,IAAD,EAC7Bv/B,KAAKi4B,SAAWA,EAChBj4B,KAAKk/B,OAASA,EACdl/B,KAAK+7B,QAAU/7B,KAAKw/B,eACpBx/B,KAAK4Y,KAAOA,EACZ5Y,KAAKoE,IAAM21B,EACX/5B,KAAK8L,OAASA,CAClB,CACIiuB,eACA,OAAO/5B,KAAKoE,GAChB,CACIsC,aACA,OAAO1G,KAAKoE,IAAIq7B,YACpB,CACIC,cACA,OAAO1/B,KAAK4Y,KAAO5O,MAAMO,KAAKvK,KAAK4Y,KAAK8mB,WAAa,EACzD,CACAC,SACI3/B,KAAKo/B,gBAAgBQ,OACzB,CACArD,gBACI,IAAInD,EAAIC,EACR,MAAM,aAAEwG,GAAiB7/B,KACgC,QAAxDq5B,GAAMD,EAAKp5B,KAAKi4B,UAAU6H,gCAA6C,IAAPzG,GAAyBA,EAAGv0B,KAAKs0B,EAAIp5B,KAAK+7B,QAAS/7B,YAC9GA,KAAK+/B,4BAA4BF,GACvC,IACI7/B,KAAKi4B,SAAS+H,eAAehgC,MAC7B,MAAM+6B,QAAiBkF,MAAMjgC,KAAKoE,IAAIiF,KAAMw2B,GAC5C,aAAa7/B,KAAKkgC,QAAQnF,EAY9B,CAVA,MAAOv2B,GACH,GAAmB,eAAfA,EAAMiF,KAIN,MAHIzJ,KAAKmgC,0BAA0B37B,IAC/BxE,KAAKi4B,SAASmI,eAAepgC,KAAMwE,GAEjCA,CAEd,CACA,QACIxE,KAAKi4B,SAASoI,gBAAgBrgC,KAClC,CACJ,CACAu8B,cAAcxB,GACV,MAAMuF,EAAgB,IAAIxF,EAAcC,GAexC,OAdc4B,EAAS,8BAA+B,CAClDC,YAAY,EACZC,OAAQ,CAAEyD,iBACVx0B,OAAQ9L,KAAK8L,SAEPy0B,iBACNvgC,KAAKi4B,SAASuI,iCAAiCxgC,KAAMsgC,GAEhDA,EAActF,UACnBh7B,KAAKi4B,SAASwI,6BAA6BzgC,KAAMsgC,GAGjDtgC,KAAKi4B,SAASyI,0BAA0B1gC,KAAMsgC,GAE3CA,CACX,CACIT,mBACA,IAAIzG,EACJ,MAAO,CACH8F,OAAQ5H,EAAYt3B,KAAKk/B,QAAQyB,cACjCC,YAAa,cACb7E,QAAS/7B,KAAK+7B,QACd8E,SAAU,SACVjoB,KAAM5Y,KAAK8gC,aAAe,KAAO9gC,KAAK4Y,KACtCmoB,OAAQ/gC,KAAKghC,YACbC,SAA4C,QAAjC7H,EAAKp5B,KAAKi4B,SAASgJ,gBAA6B,IAAP7H,OAAgB,EAASA,EAAG/vB,KAExF,CACIm2B,qBACA,MAAO,CACH0B,OAAQ,mCAEhB,CACIJ,mBACA,OAAO9gC,KAAKk/B,QAAU5H,EAAY5b,GACtC,CACIslB,kBACA,OAAOhhC,KAAKo/B,gBAAgB2B,MAChC,CACAI,mBAAmBC,GACfphC,KAAK+7B,QAAgB,OAAI,CAACqF,EAAUphC,KAAK+7B,QAAgB,QAAGgC,KAAK,KACrE,CACAxB,kCAAkCsD,GAC9B,MAAMwB,EAAsB,IAAI1iB,SAASC,GAAa5e,KAAKs/B,sBAAwB1gB,IACrE+d,EAAS,6BAA8B,CACjDC,YAAY,EACZC,OAAQ,CACJgD,eACAz7B,IAAKpE,KAAKoE,IACVk9B,OAAQthC,KAAKs/B,uBAEjBxzB,OAAQ9L,KAAK8L,SAEPy0B,wBACAc,CACd,CACAlB,0BAA0B37B,GAMtB,OALcm4B,EAAS,4BAA6B,CAChD7wB,OAAQ9L,KAAK8L,OACb8wB,YAAY,EACZC,OAAQ,CAAE0E,QAASvhC,KAAMwE,MAAOA,KAEtB+7B,gBAClB,EAGJ,MAAMiB,EACF9gC,YAAYu3B,EAAUvuB,GAClB1J,KAAKyhC,SAAU,EACfzhC,KAAK0hC,UAAahC,IACd,MAAMiC,EAAYjC,EAAQv8B,OAAO,GAAG,IAChCw+B,aAA6C,EAASA,EAAUC,iBAChE5hC,KAAKi4B,SAAS4J,0BAA0B7hC,KAAK0J,QACjD,EAEJ1J,KAAKi4B,SAAWA,EAChBj4B,KAAK0J,QAAUA,EACf1J,KAAK8hC,qBAAuB,IAAIC,qBAAqB/hC,KAAK0hC,UAC9D,CACA3gC,QACSf,KAAKyhC,UACNzhC,KAAKyhC,SAAU,EACfzhC,KAAK8hC,qBAAqBE,QAAQhiC,KAAK0J,SAE/C,CACApI,OACQtB,KAAKyhC,UACLzhC,KAAKyhC,SAAU,EACfzhC,KAAK8hC,qBAAqBG,UAAUjiC,KAAK0J,SAEjD,EAGJ,MAAMw4B,EACFxhC,YAAYyhC,GACRniC,KAAKmiC,SAYb,SAA8BA,GAC1B,IAAK,MAAMz4B,KAAWy4B,EAASlzB,iBAAiB,gBAAiB,CAC7D,MAAMmzB,EAAgBv/B,SAASw/B,WAAW34B,GAAS,GACnD,IAAK,MAAM44B,KAAsBF,EAAcG,gBAAgBvD,QAAQ/vB,iBAAiB,UACpFqzB,EAAmBE,YAAYvG,EAAsBqG,IAEzD54B,EAAQ84B,YAAYJ,EACxB,CACA,OAAOD,CACX,CArBwBM,CAAqBN,EACzC,CACAO,YAAYn9B,GACR,MAAsB,iBAAXA,EACA,IAAIvF,KA1SvB,SAAgC+hB,GAC5B,MAAM4gB,EAAW9/B,SAASuG,cAAc,YAExC,OADAu5B,EAASC,UAAY7gB,EACd4gB,EAAS3D,OACpB,CAsS4B6D,CAAuBt9B,IAGhCA,CAEf,EAEJ28B,EAAc1G,YAAc,6BAa5B,SAAWjE,GACPA,EAAoBA,EAAiC,YAAI,GAAK,cAC9DA,EAAoBA,EAAgC,WAAI,GAAK,aAC7DA,EAAoBA,EAA6B,QAAI,GAAK,UAC1DA,EAAoBA,EAA+B,UAAI,GAAK,YAC5DA,EAAoBA,EAA8B,SAAI,GAAK,WAC3DA,EAAoBA,EAA6B,QAAI,GAAK,SAC7D,CAPD,CAOGA,IAAwBA,EAAsB,CAAC,IAElD,SAAWC,GACPA,EAAwB,WAAI,oCAC5BA,EAAuB,UAAI,sBAC3BA,EAAmB,MAAI,YAC1B,CAJD,CAIGA,IAAgBA,EAAc,CAAC,IAWlC,MAAMsL,EACFpiC,YAAYu3B,EAAU8K,EAAa3M,EAAW4M,GAAe,GACzDhjC,KAAKgF,MAAQuyB,EAAoB0L,YACjCjjC,KAAKi4B,SAAWA,EAChBj4B,KAAK+iC,YAAcA,EACnB/iC,KAAKo2B,UAAYA,EACjBp2B,KAAKkjC,SAmIb,SAAuBH,EAAa3M,GAChC,MAAM8M,EAAW,IAAIC,SAASJ,GACxBt5B,EAAO2sB,aAA6C,EAASA,EAAUvsB,aAAa,QACpF9C,EAAQqvB,aAA6C,EAASA,EAAUvsB,aAAa,SAI3F,OAHIJ,GACAy5B,EAASpU,OAAOrlB,EAAM1C,GAAS,IAE5Bm8B,CACX,CA3IwBE,CAAcL,EAAa3M,GAC3Cp2B,KAAK+5B,SAAWT,EAAUt5B,KAAKkH,QAC3BlH,KAAKk/B,QAAU5H,EAAY5b,KAuJvC,SAA8BtX,EAAKs7B,GAC/B,MAAMD,EAAe,IAAIN,gBACzB,IAAK,MAAO11B,EAAM1C,KAAU24B,EACpB34B,aAAiBs8B,MAErB5D,EAAa3Q,OAAOrlB,EAAM1C,GAE9B3C,EAAIk/B,OAAS7D,EAAa50B,UAE9B,CA/JY04B,CAAqBvjC,KAAK+5B,SAAU,IAAI/5B,KAAK4Y,KAAK8mB,YAEtD1/B,KAAKwjC,aAAe,IAAIvE,EAAaj/B,KAAMA,KAAKk/B,OAAQl/B,KAAK+5B,SAAU/5B,KAAK4Y,KAAM5Y,KAAK+iC,aACvF/iC,KAAKgjC,aAAeA,CACxB,CACAN,qBAAqBn9B,EAASk+B,EAAUC,GACpC,OAAO/kB,QAAQC,QAAQ+kB,QAAQp+B,GACnC,CACI25B,aACA,IAAI9F,EAEJ,OAhOR,SAA+B8F,GAC3B,OAAQA,EAAOh6B,eACX,IAAK,MACD,OAAOoyB,EAAY5b,IACvB,IAAK,OACD,OAAO4b,EAAYsM,KACvB,IAAK,MACD,OAAOtM,EAAYuM,IACvB,IAAK,QACD,OAAOvM,EAAYwM,MACvB,IAAK,SACD,OAAOxM,EAAYyM,OAE/B,CAmNeC,GADmC,QAAzB5K,EAAKp5B,KAAKo2B,iBAA8B,IAAPgD,OAAgB,EAASA,EAAGvvB,aAAa,gBAAkB7J,KAAK+iC,YAAYl5B,aAAa,WAAa,IACpH3E,gBAAkBoyB,EAAY5b,GACtE,CACIxU,aACA,IAAIkyB,EACJ,MAAM6K,EAAuD,iBAA5BjkC,KAAK+iC,YAAY77B,OAAsBlH,KAAK+iC,YAAY77B,OAAS,KAClG,OAA8B,QAAzBkyB,EAAKp5B,KAAKo2B,iBAA8B,IAAPgD,OAAgB,EAASA,EAAGnpB,aAAa,eACpEjQ,KAAKo2B,UAAUvsB,aAAa,eAAiB,GAG7C7J,KAAK+iC,YAAYl5B,aAAa,WAAao6B,GAAqB,EAE/E,CACIrrB,WACA,OAAI5Y,KAAKkkC,SAAW1M,EAAY2M,YAAcnkC,KAAKk/B,QAAU5H,EAAY5b,IAC9D,IAAIyjB,gBAAgBn/B,KAAKokC,gBAGzBpkC,KAAKkjC,QAEpB,CACIgB,cACA,IAAI9K,EACJ,OApDR,SAA+BiL,GAC3B,OAAQA,EAASn/B,eACb,KAAKsyB,EAAY8M,UACb,OAAO9M,EAAY8M,UACvB,KAAK9M,EAAY+M,MACb,OAAO/M,EAAY+M,MACvB,QACI,OAAO/M,EAAY2M,WAE/B,CA2CeK,EAAiD,QAAzBpL,EAAKp5B,KAAKo2B,iBAA8B,IAAPgD,OAAgB,EAASA,EAAGvvB,aAAa,iBAAmB7J,KAAK+iC,YAAYmB,QACjJ,CACIpD,mBACA,OAAO9gC,KAAKwjC,aAAa1C,YAC7B,CACIsD,qBACA,MAAO,IAAIpkC,KAAKkjC,UAAU1oB,QAAO,CAACklB,GAAUj2B,EAAM1C,KACvC24B,EAAQjrB,OAAuB,iBAAT1N,EAAoB,CAAC,CAAC0C,EAAM1C,IAAU,KACpE,GACP,CACAw1B,cACI,MAAM,YAAE0G,EAAW,WAAEwB,GAAelN,EAC9BmN,EAAsB76B,EAAa,qBAAsB7J,KAAKo2B,UAAWp2B,KAAK+iC,aACpF,GAAmC,iBAAxB2B,SACc5B,EAAe6B,cAAcD,EAAqB1kC,KAAK+iC,YAAa/iC,KAAKo2B,WAKlG,OAAIp2B,KAAKgF,OAASi+B,GACdjjC,KAAKgF,MAAQy/B,EACNzkC,KAAKwjC,aAAav8B,gBAF7B,CAIJ,CACA3F,OACI,MAAM,SAAEsjC,EAAQ,QAAEC,GAAYtN,EAC9B,GAAIv3B,KAAKgF,OAAS4/B,GAAY5kC,KAAKgF,OAAS6/B,EAGxC,OAFA7kC,KAAKgF,MAAQ4/B,EACb5kC,KAAKwjC,aAAa7D,UACX,CAEf,CACAG,yBAAyB/D,EAASwF,GAC9B,IAAKA,EAAQT,aAAc,CACvB,MAAMgE,EAsElB,SAAwBC,GACpB,GAAkB,MAAdA,EAAoB,CACpB,MACMC,GADUniC,SAASmiC,OAASniC,SAASmiC,OAAOt2B,MAAM,MAAQ,IACzC+Z,MAAMuc,GAAWA,EAAOzK,WAAWwK,KAC1D,GAAIC,EAAQ,CACR,MAAMj+B,EAAQi+B,EAAOt2B,MAAM,KAAKvL,MAAM,GAAG46B,KAAK,KAC9C,OAAOh3B,EAAQk+B,mBAAmBl+B,QAAS8B,CAC/C,CACJ,CACJ,CA/E0Bq8B,CAAe9I,EAAe,gBAAkBA,EAAe,cACzE0I,IACA/I,EAAQ,gBAAkB+I,EAElC,CACI9kC,KAAKmlC,kCAAkC5D,IACvCA,EAAQJ,mBAAmBe,EAAc1G,YAEjD,CACAwE,eAAeoF,GACX,IAAIhM,EACJp5B,KAAKgF,MAAQuyB,EAAoB8N,QACP,QAAzBjM,EAAKp5B,KAAKo2B,iBAA8B,IAAPgD,GAAyBA,EAAGxqB,aAAa,WAAY,IACvF+tB,EAAS,qBAAsB,CAC3B7wB,OAAQ9L,KAAK+iC,YACblG,OAAQ,CAAEyI,eAAgBtlC,QAE9BA,KAAKi4B,SAASsN,sBAAsBvlC,KACxC,CACAwgC,iCAAiCe,EAASxG,GACtC/6B,KAAKkb,OAAS,CAAEsqB,QAASzK,EAASC,UAAWsF,cAAevF,EAChE,CACA0F,6BAA6Bc,EAASxG,GAClC,GAAIA,EAASI,aAAeJ,EAASM,YACjCr7B,KAAKi4B,SAASwN,iCAAiCzlC,KAAM+6B,QAEpD,GAAI/6B,KAAK0lC,oBAAoBnE,IAsD1C,SAA0CxG,GACtC,OAA8B,KAAvBA,EAASK,aAAsBL,EAASO,UACnD,CAxDsDqK,CAAiC5K,GAAW,CACtF,MAAMv2B,EAAQ,IAAIohC,MAAM,oDACxB5lC,KAAKi4B,SAAS4N,sBAAsB7lC,KAAMwE,EAC9C,MAEIxE,KAAKgF,MAAQuyB,EAAoBuO,UACjC9lC,KAAKkb,OAAS,CAAEsqB,SAAS,EAAMlF,cAAevF,GAC9C/6B,KAAKi4B,SAAS8N,oCAAoC/lC,KAAM+6B,EAEhE,CACA2F,0BAA0Ba,EAASxG,GAC/B/6B,KAAKkb,OAAS,CAAEsqB,SAAS,EAAOlF,cAAevF,GAC/C/6B,KAAKi4B,SAASwN,iCAAiCzlC,KAAM+6B,EACzD,CACAqF,eAAemB,EAAS/8B,GACpBxE,KAAKkb,OAAS,CAAEsqB,SAAS,EAAOhhC,SAChCxE,KAAKi4B,SAAS4N,sBAAsB7lC,KAAMwE,EAC9C,CACA67B,gBAAgB+E,GACZ,IAAIhM,EACJp5B,KAAKgF,MAAQuyB,EAAoBsN,QACP,QAAzBzL,EAAKp5B,KAAKo2B,iBAA8B,IAAPgD,GAAyBA,EAAGzT,gBAAgB,YAC9EgX,EAAS,mBAAoB,CACzB7wB,OAAQ9L,KAAK+iC,YACblG,OAAQjyB,OAAOiS,OAAO,CAAEyoB,eAAgBtlC,MAAQA,KAAKkb,UAEzDlb,KAAKi4B,SAAS+N,uBAAuBhmC,KACzC,CACA0lC,oBAAoBnE,GAChB,OAAQA,EAAQT,cAAgB9gC,KAAKgjC,YACzC,CACAmC,kCAAkC5D,GAC9B,OAAQA,EAAQT,cAxZxB,SAAsB3C,KAAkBphB,GACpC,OAAOA,EAASd,MAAMvS,GAAYA,GAAWA,EAAQuG,aAAakuB,IACtE,CAsZwCluB,CAAa,oBAAqBjQ,KAAKo2B,UAAWp2B,KAAK+iC,YAC3F,EAmCJ,MAAMkD,EACFvlC,YAAYgJ,GACR1J,KAAK0J,QAAUA,CACnB,CACIw8B,oBACA,OAAOlmC,KAAK0J,QAAQmL,cAAcqxB,aACtC,CACIC,eACA,MAAO,IAAInmC,KAAK0J,QAAQy8B,SAC5B,CACAC,UAAUxL,GACN,OAA2C,MAApC56B,KAAKqmC,oBAAoBzL,EACpC,CACAyL,oBAAoBzL,GAChB,OAAOA,EAAS56B,KAAK0J,QAAQE,cAAc,QAAQgxB,gBAAqBA,OAAc,IAC1F,CACIoC,kBACA,OAAOh9B,KAAK0J,QAAQszB,WACxB,CACIsJ,gCAEA,IAAK,MAAM58B,KAAW1J,KAAK0J,QAAQuF,iBAAiB,eAChD,GAA8C,MAA1CvF,EAAQytB,QAFc,yEAGtB,OAAOztB,EAIf,OAAO,IACX,CACI68B,wBACA,OAAOC,EAA0BxmC,KAAK0J,QAC1C,CACA+8B,wBAAwBz4B,GACpB,OAAOy4B,EAAwBzmC,KAAK0J,QAASsE,EACjD,CACA04B,kCAAkCC,GAC9B,MAAMC,EAAsB,CAAC,EAC7B,IAAK,MAAMC,KAA2B7mC,KAAKumC,kBAAmB,CAC1D,MAAM,GAAEv4B,GAAO64B,EACTC,EAAsBH,EAASF,wBAAwBz4B,GACzD84B,IACAF,EAAoB54B,GAAM,CAAC64B,EAAyBC,GAE5D,CACA,OAAOF,CACX,EAEJ,SAASH,EAAwB7xB,EAAM5G,GACnC,OAAO4G,EAAKhL,cAAc,IAAIoE,0BAClC,CACA,SAASw4B,EAA0B5xB,GAC/B,OAAOA,EAAK3F,iBAAiB,6BACjC,CAEA,MAAM83B,EACFrmC,YAAYu3B,EAAU+O,GAClBhnC,KAAKyhC,SAAU,EACfzhC,KAAKinC,eAAiB,KAClBjnC,KAAKgnC,YAAYxlC,oBAAoB,SAAUxB,KAAKknC,eAAe,GACnElnC,KAAKgnC,YAAY5lC,iBAAiB,SAAUpB,KAAKknC,eAAe,EAAM,EAE1ElnC,KAAKknC,cAAkB1hC,IACnB,IAAKA,EAAM+6B,iBAAkB,CACzB,MAAMlK,EAAO7wB,EAAMsG,kBAAkB8qB,gBAAkBpxB,EAAMsG,YAASjD,EAChEutB,EAAY5wB,EAAM4wB,gBAAavtB,EACjCwtB,GAyBpB,SAAwCA,EAAMD,GAE1C,MAAiB,YADDA,aAA6C,EAASA,EAAUvsB,aAAa,gBAAkBwsB,EAAKxsB,aAAa,UAErI,CA3BoBs9B,CAA+B9Q,EAAMD,IA4BzD,SAAuCC,EAAMD,GACzC,MAAMtqB,GAAUsqB,aAA6C,EAASA,EAAUvsB,aAAa,gBAAkBwsB,EAAKvqB,OACpH,IAAK,MAAMpC,KAAW7G,SAASukC,kBAAkBt7B,GAC7C,GAAIpC,aAAmB29B,kBACnB,OAAO,EAEf,OAAO,CACX,CAlCoBC,CAA8BjR,EAAMD,IACpCp2B,KAAKi4B,SAASsP,eAAelR,EAAMD,KACnC5wB,EAAMgiC,iBACNxnC,KAAKi4B,SAASwP,cAAcpR,EAAMD,GAE1C,CACH,EACDp2B,KAAKi4B,SAAWA,EAChBj4B,KAAKgnC,YAAcA,CACvB,CACAjmC,QACSf,KAAKyhC,UACNzhC,KAAKgnC,YAAY5lC,iBAAiB,SAAUpB,KAAKinC,gBAAgB,GACjEjnC,KAAKyhC,SAAU,EAEvB,CACAngC,OACQtB,KAAKyhC,UACLzhC,KAAKgnC,YAAYxlC,oBAAoB,SAAUxB,KAAKinC,gBAAgB,GACpEjnC,KAAKyhC,SAAU,EAEvB,EAeJ,MAAMiG,EACFhnC,YAAYu3B,EAAUvuB,GAClB1J,KAAK2nC,qBAAwBpI,IAAD,EAC5Bv/B,KAAK4nC,2BAA8BrI,IAAD,EAClCv/B,KAAKi4B,SAAWA,EAChBj4B,KAAK0J,QAAUA,CACnB,CACAm+B,eAAejN,GACX,MAAMlxB,EAAU1J,KAAK2mC,SAASN,oBAAoBzL,GAC9ClxB,GACA1J,KAAK8nC,gBAAgBp+B,GACrB1J,KAAK+nC,aAAar+B,IAGlB1J,KAAKgoC,iBAAiB,CAAE5xB,EAAG,EAAGC,EAAG,GAEzC,CACA4xB,2BAA2BlO,GACvB/5B,KAAK6nC,eAAenO,EAAUK,GAClC,CACA+N,gBAAgBp+B,GACZA,EAAQw+B,gBACZ,CACAH,aAAar+B,GACLA,aAAmBwL,cACfxL,EAAQuG,aAAa,YACrBvG,EAAQy+B,SAGRz+B,EAAQkF,aAAa,WAAY,MACjClF,EAAQy+B,QACRz+B,EAAQic,gBAAgB,aAGpC,CACAqiB,kBAAiB,EAAE5xB,EAAC,EAAEC,IAClBrW,KAAKooC,WAAWC,SAASjyB,EAAGC,EAChC,CACAiyB,cACItoC,KAAKgoC,iBAAiB,CAAE5xB,EAAG,EAAGC,EAAG,GACrC,CACI+xB,iBACA,OAAO34B,MACX,CACA8sB,aAAagM,GACT,MAAM,UAAEpP,EAAS,aAAEqP,EAAcC,YAAa9B,GAAa4B,EAC3D,GAAIC,EACA,IACIxoC,KAAK0oC,cAAgB,IAAI/pB,SAASC,GAAa5e,KAAK2nC,qBAAuB/oB,IAC3E5e,KAAKuoC,SAAWA,QACVvoC,KAAK2oC,wBAAwBJ,GACnC,MAAMK,EAAqB,IAAIjqB,SAASC,GAAa5e,KAAK4nC,2BAA6BhpB,IACjFpR,EAAU,CAAE8zB,OAAQthC,KAAK4nC,2BAA4BiB,OAAQ7oC,KAAKuoC,SAASO,eACzD9oC,KAAKi4B,SAAS8Q,sBAAsBpC,EAAUn5B,UAE5Do7B,QACJ5oC,KAAKgpC,eAAeT,GAC1BvoC,KAAKi4B,SAASgR,qBAAqBtC,EAAUxN,GAC7Cn5B,KAAKi4B,SAASiR,0BAA0BlpC,KAAK0J,SAC7C1J,KAAKmpC,wBAAwBZ,EAMjC,CAJA,eACWvoC,KAAKuoC,SACZvoC,KAAK2nC,0BAAqB9+B,UACnB7I,KAAK0oC,aAChB,MAGA1oC,KAAKopC,WAAWb,EAASc,aAEjC,CACAD,WAAW1jC,GACP1F,KAAKi4B,SAASqR,gBAAgB5jC,EAClC,CACA62B,8BAA8BgM,GAC1BvoC,KAAKupC,cAAchB,EAASpP,iBACtBoP,EAASiB,iBACnB,CACAD,cAAcpQ,GACNA,EACAn5B,KAAK0J,QAAQkF,aAAa,qBAAsB,IAGhD5O,KAAK0J,QAAQic,gBAAgB,qBAErC,CACA4W,qBAAqBgM,SACXA,EAASM,QACnB,CACAM,wBAAwBZ,GACpBA,EAASkB,iBACb,EAGJ,MAAMC,UAAkBhC,EACpB0B,aACIppC,KAAK0J,QAAQk5B,UAAY,EAC7B,CACI+D,eACA,OAAO,IAAIV,EAASjmC,KAAK0J,QAC7B,EAGJ,MAAMigC,EACFjpC,YAAYu3B,EAAU+O,GAClBhnC,KAAKyhC,SAAU,EACfzhC,KAAK+2B,cAAgB,KACjB/2B,KAAKgnC,YAAYxlC,oBAAoB,QAASxB,KAAK4pC,cAAc,GACjE5pC,KAAKgnC,YAAY5lC,iBAAiB,QAASpB,KAAK4pC,cAAc,EAAM,EAExE5pC,KAAK4pC,aAAgBpkC,IACjB,GAAIA,aAAiBqkC,YAAc7pC,KAAK8pC,wBAAwBtkC,GAAQ,CACpE,MAAMsG,EAAUtG,EAAMukC,cAAgBvkC,EAAMukC,eAAe,IAAOvkC,EAAMsG,OAClEk+B,EAAOhqC,KAAKiqC,wBAAwBn+B,GAC1C,GAAIk+B,GA0CpB,SAA6BpP,GACzB,IAAK,MAAMlxB,KAAW7G,SAASukC,kBAAkBxM,EAAO9uB,QACpD,GAAIpC,aAAmB29B,kBACnB,OAAO,EAEf,OAAO,CACX,CAhD4B6C,CAAoBF,GAAO,CACnC,MAAMjQ,EAAW/5B,KAAKmqC,mBAAmBH,GACrChqC,KAAKi4B,SAASmS,yBAAyBJ,EAAMjQ,EAAUv0B,KACvDA,EAAMgiC,iBACNxnC,KAAKi4B,SAASoS,uBAAuBL,EAAMjQ,GAEnD,CACJ,GAEJ/5B,KAAKi4B,SAAWA,EAChBj4B,KAAKgnC,YAAcA,CACvB,CACAjmC,QACSf,KAAKyhC,UACNzhC,KAAKgnC,YAAY5lC,iBAAiB,QAASpB,KAAK+2B,eAAe,GAC/D/2B,KAAKyhC,SAAU,EAEvB,CACAngC,OACQtB,KAAKyhC,UACLzhC,KAAKgnC,YAAYxlC,oBAAoB,QAASxB,KAAK+2B,eAAe,GAClE/2B,KAAKyhC,SAAU,EAEvB,CACAqI,wBAAwBtkC,GACpB,QAAUA,EAAMsG,QAAUtG,EAAMsG,OAAOw+B,mBACnC9kC,EAAM+6B,kBACN/6B,EAAM+kC,MAAQ,GACd/kC,EAAMglC,QACNhlC,EAAMilC,SACNjlC,EAAMklC,SACNllC,EAAMmlC,SACd,CACAV,wBAAwBn+B,GACpB,GAAIA,aAAkBkJ,QAClB,OAAOlJ,EAAOqrB,QAAQ,2CAE9B,CACAgT,mBAAmBH,GACf,OAAO1Q,EAAU0Q,EAAKngC,aAAa,SAAW,GAClD,EAUJ,MAAM+gC,EACFlqC,YAAYu3B,EAAUvuB,GAClB1J,KAAKi4B,SAAWA,EAChBj4B,KAAK6qC,kBAAoB,IAAIlB,EAAkB3pC,KAAM0J,EACzD,CACA3I,QACIf,KAAK6qC,kBAAkB9pC,OAC3B,CACAO,OACItB,KAAK6qC,kBAAkBvpC,MAC3B,CACA8oC,yBAAyBJ,EAAMjQ,EAAU+Q,GACrC,OAAQ9qC,KAAKi4B,SAAS8S,6BAA6Bf,EAAMjQ,EAAU+Q,IAC/Dd,EAAK/5B,aAAa,oBAC1B,CACAo6B,uBAAuBL,EAAMjQ,GACzB,MAAM7yB,EAAS6yB,EAAS1wB,KAClBgtB,EAAOxzB,SAASuG,cAAc,QACpCitB,EAAKznB,aAAa,aAAc,QAChCynB,EAAKznB,aAAa,SAAU1H,GAC5BmvB,EAAKznB,aAAa,SAAU,IAC5B,MAAMswB,EAAS8K,EAAKngC,aAAa,qBAC7Bq1B,GACA7I,EAAKznB,aAAa,SAAUswB,GAChC,MAAM8L,EAAahB,EAAKngC,aAAa,oBACjCmhC,GACA3U,EAAKznB,aAAa,mBAAoBo8B,GAC1C,MAAMC,EAAcjB,EAAKngC,aAAa,qBAClCohC,GACA5U,EAAKznB,aAAa,oBAAqBq8B,GAC3C,MAAMC,EAAelB,EAAKngC,aAAa,sBACnCqhC,GACA7U,EAAKznB,aAAa,qBAAsBs8B,GACxBlB,EAAK/5B,aAAa,sBAElComB,EAAKznB,aAAa,oBAAqB,IAC3C5O,KAAKi4B,SAASkT,4BAA4BnB,EAAMjQ,EAAU1D,GAC1DxzB,SAAS+V,KAAK8d,YAAYL,GAC1BA,EAAKj1B,iBAAiB,oBAAoB,IAAMi1B,EAAKhvB,UAAU,CAAEq3B,MAAM,IACvEvB,uBAAsB,IAAM9G,EAAKF,iBACrC,EAGJ,MAAMiV,EACF1qC,YAAYu3B,EAAU2O,GAClB5mC,KAAKi4B,SAAWA,EAChBj4B,KAAK4mC,oBAAsBA,CAC/B,CACAlE,mCAAmCzK,EAAU2O,EAAqByE,GAC9D,MAAMC,EAAQ,IAAItrC,KAAKi4B,EAAU2O,GACjC0E,EAAMC,QACNF,IACAC,EAAME,OACV,CACAD,QACI,IAAK,MAAMv9B,KAAMhO,KAAK4mC,oBAAqB,CACvC,MAAOC,EAAyBC,GAAuB9mC,KAAK4mC,oBAAoB54B,GAChFhO,KAAKi4B,SAASwT,cAAc5E,EAAyBC,GACrD9mC,KAAK0rC,0CAA0C5E,EACnD,CACJ,CACA0E,QACI,IAAK,MAAMx9B,KAAMhO,KAAK4mC,oBAAqB,CACvC,MAAOC,GAA2B7mC,KAAK4mC,oBAAoB54B,GAC3DhO,KAAK2rC,wCAAwC9E,GAC7C7mC,KAAK4rC,uCAAuC/E,GAC5C7mC,KAAKi4B,SAAS4T,aAAahF,EAC/B,CACJ,CACA6E,0CAA0CI,GACtC,MAAMC,EAkBd,SAA8CD,GAC1C,MAAMpiC,EAAU7G,SAASuG,cAAc,QAGvC,OAFAM,EAAQkF,aAAa,OAAQ,+BAC7BlF,EAAQkF,aAAa,UAAWk9B,EAAiB99B,IAC1CtE,CACX,CAvB4BsiC,CAAqCF,GACzDA,EAAiBtJ,YAAYuJ,EACjC,CACAJ,wCAAwCG,GACpC,MAAMlQ,EAAQkQ,EAAiBG,WAAU,GACzCH,EAAiBtJ,YAAY5G,EACjC,CACAgQ,uCAAuCE,GACnC,MAAMC,EAAc/rC,KAAKksC,mBAAmBJ,EAAiB99B,IAC7D+9B,SAA0DA,EAAYvJ,YAAYsJ,EACtF,CACAI,mBAAmBl+B,GACf,OAAOhO,KAAKmsC,aAAa1jB,MAAM/e,GAAYA,EAAQs1B,SAAWhxB,GAClE,CACIm+B,mBACA,MAAO,IAAItpC,SAASoM,iBAAiB,mDACzC,EASJ,MAAMm9B,EACF1rC,YAAY2rC,EAAiB5D,EAAaK,EAAe3P,EAAWmT,GAAa,GAC7EtsC,KAAKkmC,cAAgB,KACrBlmC,KAAKqsC,gBAAkBA,EACvBrsC,KAAKyoC,YAAcA,EACnBzoC,KAAKm5B,UAAYA,EACjBn5B,KAAKssC,WAAaA,EAClBtsC,KAAK8oC,cAAgBA,EACrB9oC,KAAKusC,QAAU,IAAI5tB,SAAQ,CAACC,EAAStY,IAAYtG,KAAKwsC,mBAAqB,CAAE5tB,UAAStY,WAC1F,CACIkiC,mBACA,OAAO,CACX,CACIa,mBAEJ,CACAG,kBAEA,CACAC,kBACQzpC,KAAKwsC,qBACLxsC,KAAKwsC,mBAAmB5tB,iBACjB5e,KAAKwsC,mBAEpB,CACAC,4BAA4BpB,GACxBD,EAAMqB,4BAA4BzsC,KAAMA,KAAK4mC,oBAAqByE,EACtE,CACAqB,iCACI,MAAMhjC,EAAU1J,KAAK2sC,kBAAkBrG,2BA+B/C,SAA4B58B,GACxB,OAAOA,GAAmC,mBAAjBA,EAAQy+B,KACrC,EAhCYyE,CAAmBljC,IACnBA,EAAQy+B,OAEhB,CACAsD,cAAc5E,GACN7mC,KAAKkmC,eAELW,EAAwB32B,SAASlQ,KAAKqsC,gBAAgBnG,iBACtDlmC,KAAKkmC,cAAgBlmC,KAAKqsC,gBAAgBnG,cAElD,CACA2F,aAAahF,GACLA,EAAwB32B,SAASlQ,KAAKkmC,gBAAkBlmC,KAAKkmC,yBAAyBhxB,cACtFlV,KAAKkmC,cAAciC,QACnBnoC,KAAKkmC,cAAgB,KAE7B,CACIyG,wBACA,OAAO3sC,KAAKyoC,YAAYzL,YAAch9B,KAAKyoC,YAAczoC,KAAKqsC,eAClE,CACIQ,qBACA,OAAO7sC,KAAKqsC,gBAAgB3iC,OAChC,CACIojC,iBACA,OAAO9sC,KAAKyoC,YAAY/+B,OAC5B,CACIk9B,0BACA,OAAO5mC,KAAKqsC,gBAAgB3F,kCAAkC1mC,KAAKyoC,YACvE,EAMJ,MAAMsE,UAAsBX,EACxB1rC,YAAYu3B,EAAUoU,EAAiB5D,EAAaK,EAAe3P,EAAWmT,GAAa,GACvFvU,MAAMsU,EAAiB5D,EAAaK,EAAe3P,EAAWmT,GAC9DtsC,KAAKi4B,SAAWA,CACpB,CACAyK,qBAAqBmK,EAAgBC,GACjC,IAAI1T,EACJ,MAAM4T,EAAmBnqC,SAASoqC,cAClCD,EAAiBE,mBAAmBL,GACpCG,EAAiBG,iBACjB,MAAMC,EAAeN,EACfO,EAAoD,QAArCjU,EAAKgU,EAAav4B,qBAAkC,IAAPukB,OAAgB,EAASA,EAAG6T,cAC1FI,IACAA,EAAYH,mBAAmBE,GAC/BP,EAAenW,YAAY2W,EAAYC,mBAE/C,CACI9E,mBACA,OAAO,CACX,CACAjM,qBACUW,IACNl9B,KAAKysC,6BAA4B,KAC7BzsC,KAAKutC,kBAAkB,IAE3BvtC,KAAKwtC,4BACCtQ,IACNl9B,KAAK0sC,uCACCxP,IACNl9B,KAAKytC,wBACT,CACAF,mBACIvtC,KAAKi4B,SAASyV,gBAAgB1tC,KAAK6sC,eAAgB7sC,KAAK8sC,YACxD9sC,KAAK8oC,cAAc9oC,KAAK6sC,eAAgB7sC,KAAK8sC,WACjD,CACAU,sBACI,GAAIxtC,KAAK6sC,eAAe7T,YAAch5B,KAAK8sC,WAAW9T,WAAY,CAC9D,MAAMtvB,EAAU1J,KAAK6sC,eAAec,kBAC9BC,GAA6F,MAoB9F,QADkB7mC,EAnBiB/G,KAAK6sC,eAAehjC,aAAa,2BAoBlD,SAAT9C,GAA6B,UAATA,GAA8B,WAATA,EACpDA,EArBgG,OAC7F8mC,EA0BlB,SAA4B9mC,EAAO+mC,GAC/B,MAAa,QAAT/mC,GAA4B,UAATA,EACZA,EA5B+F,MAiC9G,CAjC6BgnC,CAAmB/tC,KAAK6sC,eAAehjC,aAAa,6BACrE,GAAIH,EAEA,OADAA,EAAQw+B,eAAe,CAAE0F,QAAOC,cACzB,CAEf,CAaR,IAAmC9mC,EAZ3B,OAAO,CACX,CACA0mC,yBACI,IAAK,MAAMnL,KAAsBtiC,KAAKguC,kBAAmB,CACrD,MAAMC,EAAyBhS,EAAsBqG,GACrDA,EAAmBE,YAAYyL,EACnC,CACJ,CACID,wBACA,OAAOhuC,KAAK6sC,eAAe59B,iBAAiB,SAChD,EAmBJ,MAAMi/B,EACFxtC,cACIV,KAAKmuC,QAAS,EACdnuC,KAAK+G,MAAQ,EACb/G,KAAKouC,SAAU,EACfpuC,KAAKquC,QAAU,KACXruC,KAAKsuC,SAAStuC,KAAK+G,MAAQ1E,KAAKG,SAAW,IAAI,EAEnDxC,KAAKuuC,kBAAoBvuC,KAAKwuC,0BAC9BxuC,KAAKyuC,gBAAkBzuC,KAAK0uC,wBAC5B1uC,KAAK2uC,2BACL3uC,KAAKsuC,SAAS,EAClB,CACWM,wBACP,OAAOrR,CAAS;;;;;;;;;;kBAUN2Q,EAAYW;oBACVX,EAAYW,kBAAoB,OAAOX,EAAYW,kBAAoB;;;KAIvF,CACAnhB,OACS1tB,KAAKouC,UACNpuC,KAAKouC,SAAU,EACfpuC,KAAK8uC,yBACL9uC,KAAK+uC,iBAEb,CACAv6B,OACQxU,KAAKouC,UAAYpuC,KAAKmuC,SACtBnuC,KAAKmuC,QAAS,EACdnuC,KAAKgvC,qBAAoB,KACrBhvC,KAAKivC,2BACLjvC,KAAKkvC,gBACLlvC,KAAKouC,SAAU,EACfpuC,KAAKmuC,QAAS,CAAK,IAG/B,CACAG,SAASvnC,GACL/G,KAAK+G,MAAQA,EACb/G,KAAKmvC,SACT,CACAR,2BACI9rC,SAAS8G,KAAKylC,aAAapvC,KAAKuuC,kBAAmB1rC,SAAS8G,KAAK0lC,WACrE,CACAP,yBACI9uC,KAAKyuC,gBAAgB/oB,MAAM1P,MAAQ,IACnChW,KAAKyuC,gBAAgB/oB,MAAM4pB,QAAU,IACrCzsC,SAASkU,gBAAgBq4B,aAAapvC,KAAKyuC,gBAAiB5rC,SAAS+V,MACrE5Y,KAAKmvC,SACT,CACAH,oBAAoB3D,GAChBrrC,KAAKyuC,gBAAgB/oB,MAAM4pB,QAAU,IACrCrtC,WAAWopC,EAA0C,IAAhC6C,EAAYW,kBACrC,CACAI,2BACQjvC,KAAKyuC,gBAAgBh2B,YACrB5V,SAASkU,gBAAgB4f,YAAY32B,KAAKyuC,gBAElD,CACAM,iBACS/uC,KAAKuvC,kBACNvvC,KAAKuvC,gBAAkB9/B,OAAOmD,YAAY5S,KAAKquC,QAASH,EAAYW,mBAE5E,CACAK,gBACIz/B,OAAOqD,cAAc9S,KAAKuvC,wBACnBvvC,KAAKuvC,eAChB,CACAJ,UACIhS,uBAAsB,KAClBn9B,KAAKyuC,gBAAgB/oB,MAAM1P,MAAW,GAAkB,GAAbhW,KAAK+G,MAAb,GAA0B,GAErE,CACAynC,0BACI,MAAM9kC,EAAU7G,SAASuG,cAAc,SAMvC,OALAM,EAAQ9D,KAAO,WACf8D,EAAQ4yB,YAAc4R,EAAYU,WAC9B5uC,KAAKm8B,WACLzyB,EAAQ2yB,MAAQr8B,KAAKm8B,UAElBzyB,CACX,CACAglC,wBACI,MAAMhlC,EAAU7G,SAASuG,cAAc,OAEvC,OADAM,EAAQ8lC,UAAY,qBACb9lC,CACX,CACIyyB,eACA,OAAOC,EAAe,YAC1B,EAEJ8R,EAAYW,kBAAoB,IAEhC,MAAMY,UAAqBxJ,EACvBvlC,cACIq3B,SAAShsB,WACT/L,KAAK0vC,mBAAqB1vC,KAAKmmC,SAC1Bx+B,QAAQ+B,IAwErB,SAA2BA,GAEvB,MAAkB,YADFA,EAAQ20B,SAE5B,CA3EkCsR,CAAkBjmC,KACvC1B,KAAK0B,GAmFlB,SAA6BA,GAIzB,OAHIA,EAAQuG,aAAa,UACrBvG,EAAQkF,aAAa,QAAS,IAE3BlF,CACX,CAxF8BkmC,CAAoBlmC,KACrC8Q,QAAO,CAACU,EAAQxR,KACjB,MAAM,UAAEmmC,GAAcnmC,EAChBomC,EAAUD,KAAa30B,EACvBA,EAAO20B,GACP,CACEjqC,KAAMmqC,EAAYrmC,GAClBsmC,QAASC,EAAiBvmC,GAC1BqT,SAAU,IAElB,OAAOnS,OAAOiS,OAAOjS,OAAOiS,OAAO,CAAC,EAAG3B,GAAS,CAAE,CAAC20B,GAAYjlC,OAAOiS,OAAOjS,OAAOiS,OAAO,CAAC,EAAGizB,GAAU,CAAE/yB,SAAU,IAAI+yB,EAAQ/yB,SAAUrT,MAAc,GAC1J,CAAC,EACR,CACIwmC,8BACA,OAAOtlC,OAAOU,KAAKtL,KAAK0vC,oBACnB/nC,QAAQkoC,GAAc7vC,KAAK0vC,mBAAmBG,GAAWG,UACzDjS,KAAK,GACd,CACAoS,+BAA+BxJ,GAC3B,OAAO3mC,KAAKowC,qCAAqC,SAAUzJ,EAC/D,CACA0J,mCAAmC1J,GAC/B,OAAO3mC,KAAKowC,qCAAqC,aAAczJ,EACnE,CACAyJ,qCAAqCE,EAAa3J,GAC9C,OAAO/7B,OAAOU,KAAKtL,KAAK0vC,oBACnB/nC,QAAQkoC,KAAgBA,KAAalJ,EAAS+I,sBAC9C1nC,KAAK6nC,GAAc7vC,KAAK0vC,mBAAmBG,KAC3CloC,QAAO,EAAG/B,UAAWA,GAAQ0qC,IAC7BtoC,KAAI,EAAG+U,UAAWrT,MAAeA,GAC1C,CACI6mC,0BACA,OAAO3lC,OAAOU,KAAKtL,KAAK0vC,oBAAoBl1B,QAAO,CAACU,EAAQ20B,KACxD,MAAM,KAAEjqC,EAAI,QAAEoqC,EAAO,SAAEjzB,GAAa/c,KAAK0vC,mBAAmBG,GAC5D,OAAY,MAARjqC,GAAiBoqC,EAGZjzB,EAAS3Z,OAAS,EAChB,IAAI8X,KAAW6B,EAAS5Z,MAAM,IAG9B+X,EANA,IAAIA,KAAW6B,EAO1B,GACD,GACP,CACAyzB,aAAa/mC,GACT,MAAMC,EAAU1J,KAAKywC,sBAAsBhnC,GAC3C,OAAOC,EAAUA,EAAQG,aAAa,WAAa,IACvD,CACA4mC,sBAAsBhnC,GAClB,OAAOmB,OAAOU,KAAKtL,KAAK0vC,oBAAoBl1B,QAAO,CAACU,EAAQ20B,KACxD,MAAQ9yB,UAAWrT,IAAc1J,KAAK0vC,mBAAmBG,GACzD,OA2BZ,SAAsCnmC,EAASD,GAE3C,MAAkB,QADFC,EAAQ20B,WACI30B,EAAQG,aAAa,SAAWJ,CAChE,CA9BmBinC,CAA6BhnC,EAASD,GAAQC,EAAUwR,CAAM,QACtErS,EACP,EAEJ,SAASknC,EAAYrmC,GACjB,OAUJ,SAAyBA,GAErB,MAAkB,UADFA,EAAQ20B,SAE5B,CAbQsS,CAAgBjnC,GACT,SAiBf,SAA6BA,GACzB,MAAMknC,EAAUlnC,EAAQ20B,UACxB,MAAkB,SAAXuS,GAAkC,QAAXA,GAAoD,cAA/BlnC,EAAQG,aAAa,MAC5E,CAlBagnC,CAAoBnnC,GAClB,kBADN,CAGT,CACA,SAASumC,EAAiBvmC,GACtB,MAAmD,UAA5CA,EAAQG,aAAa,mBAChC,CAwBA,MAAMinC,UAAqB7K,EACvBvlC,YAAYgJ,EAASqnC,GACjBhZ,MAAMruB,GACN1J,KAAK+wC,aAAeA,CACxB,CACArO,sBAAsB3gB,EAAO,IACzB,OAAO/hB,KAAKgxC,aAAa5T,EAAkBrb,GAC/C,CACA2gB,mBAAmBh5B,GACf,OAAO1J,KAAKgxC,aAAatnC,EAAQmL,cACrC,CACA6tB,qBAAoB,KAAE/4B,EAAI,KAAEiP,IACxB,OAAO,IAAI5Y,KAAK4Y,EAAM,IAAI62B,EAAa9lC,GAC3C,CACAiyB,QACI,MAAMqV,EAAgBjxC,KAAK0J,QAAQuiC,WAAU,GACvCiF,EAAiBlxC,KAAK0J,QAAQuF,iBAAiB,UAC/CkiC,EAAuBF,EAAchiC,iBAAiB,UAC5D,IAAK,MAAOuP,EAAOxS,KAAWklC,EAAexR,UAAW,CACpD,MAAM9D,EAAQuV,EAAqB3yB,GACnC,IAAK,MAAM4yB,KAAUxV,EAAMyV,gBACvBD,EAAOE,UAAW,EACtB,IAAK,MAAMF,KAAUplC,EAAOqlC,gBACxBzV,EAAMpuB,QAAQ4jC,EAAO5yB,OAAO8yB,UAAW,CAC/C,CACA,IAAK,MAAMC,KAAuBN,EAAchiC,iBAAiB,0BAC7DsiC,EAAoBxqC,MAAQ,GAEhC,OAAO,IAAI+pC,EAAaG,EAAejxC,KAAK+wC,aAChD,CACIS,kBACA,OAAOxxC,KAAK+wC,aAAarnC,OAC7B,CACIswB,mBACA,IAAIZ,EAEJ,OAAOE,EADyC,QAAlCF,EAAKp5B,KAAKyxC,WAAW,eAA4B,IAAPrY,EAAgBA,EAAK,IAEjF,CACIsY,wBACA,OAAO1xC,KAAKyxC,WAAW,gBAC3B,CACIE,oBACA,MAAiC,cAA1B3xC,KAAK0xC,iBAChB,CACIE,kBACA,MAAiC,YAA1B5xC,KAAK0xC,iBAChB,CACIG,kBACA,MAA2C,UAApC7xC,KAAKyxC,WAAW,gBAC3B,CACAA,WAAWhoC,GACP,OAAOzJ,KAAK+wC,aAAaP,aAAa,SAAS/mC,IACnD,GAIJ,SAAWguB,GACPA,EAAyB,WAAI,aAC7BA,EAA2B,aAAI,eAC/BA,EAAyB,WAAI,aAC7BA,EAAuB,SAAI,UAC9B,CALD,CAKGA,IAAiBA,EAAe,CAAC,IAEpC,SAAWC,GACPA,EAAwB,YAAI,cAC5BA,EAAoB,QAAI,UACxBA,EAAqB,SAAI,WACzBA,EAAmB,OAAI,SACvBA,EAAsB,UAAI,WAC7B,CAND,CAMGA,IAAeA,EAAa,CAAC,IAChC,MAAMlb,EAAiB,CACnBtV,OAAQ,UACR4qC,gBAAgB,EAChBC,oBAAqB,OACrBzF,YAAY,EACZ0F,eAAe,EACfC,qBAAqB,EACrBC,uBAAuB,GAE3B,IAAIC,EAutBAC,GAttBJ,SAAWD,GACPA,EAAiBA,EAAiC,eAAI,GAAK,iBAC3DA,EAAiBA,EAAiC,gBAAK,GAAK,iBAC5DA,EAAiBA,EAAsC,qBAAK,GAAK,qBACpE,CAJD,CAIGA,IAAqBA,EAAmB,CAAC,IAC5C,MAAME,GACF3xC,YAAYu3B,EAAU8B,EAAUuY,EAAuB9kC,EAAU,CAAC,GAC9DxN,KAAKyF,WAAau4B,IAClBh+B,KAAKuyC,cAAgB,CAAC,EACtBvyC,KAAKwyC,kBAAmB,EACxBxyC,KAAK8xC,gBAAiB,EACtB9xC,KAAKyyC,UAAW,EAChBzyC,KAAKiyC,qBAAsB,EAC3BjyC,KAAKkyC,uBAAwB,EAC7BlyC,KAAK0yC,gBAAiB,EACtB1yC,KAAKgF,MAAQ0yB,EAAWuL,YACxBjjC,KAAKi4B,SAAWA,EAChBj4B,KAAK+5B,SAAWA,EAChB/5B,KAAKsyC,sBAAwBA,GAAyBtU,IACtD,MAAM,OAAE92B,EAAM,eAAE4qC,EAAc,SAAE7Q,EAAQ,aAAE0R,EAAY,SAAE5X,EAAQ,oBAAEgX,EAAmB,WAAEzF,EAAU,cAAE0F,EAAa,oBAAEC,EAAmB,sBAAEC,GAA2BtnC,OAAOiS,OAAOjS,OAAOiS,OAAO,CAAC,EAAGL,GAAiBhP,GACnNxN,KAAKkH,OAASA,EACdlH,KAAK8xC,eAAiBA,EACtB9xC,KAAKihC,SAAWA,EAChBjhC,KAAK2yC,aAAeA,EACpB3yC,KAAK+6B,SAAWA,EAChB/6B,KAAK4yC,WAAa5yC,KAAKi4B,SAAS4a,6BAA6B7yC,KAAK+5B,SAAU/5B,KAAKkH,QACjFlH,KAAK+xC,oBAAsBA,EAC3B/xC,KAAKssC,WAAaA,EAClBtsC,KAAKgyC,cAAgBA,EACrBhyC,KAAKyyC,UAAYnG,EACjBtsC,KAAKiyC,oBAAsBA,EAC3BjyC,KAAKkyC,sBAAwBA,CACjC,CACIY,cACA,OAAO9yC,KAAKi4B,SAAS6a,OACzB,CACIC,WACA,OAAO/yC,KAAKi4B,SAAS8a,IACzB,CACInU,cACA,OAAO5+B,KAAKi4B,SAAS2G,OACzB,CACIoU,sBACA,OAAOhzC,KAAK4+B,QAAQqU,gCAAgCjzC,KAAKsyC,sBAC7D,CACIY,aACA,OAAOlzC,KAAK4yC,UAChB,CACA7xC,QACQf,KAAKgF,OAAS0yB,EAAWuL,cACzBjjC,KAAKmzC,mBAAmB1b,EAAa2b,YACrCpzC,KAAKgF,MAAQ0yB,EAAW+J,QACxBzhC,KAAK8yC,QAAQO,aAAarzC,MAC1BA,KAAKi4B,SAASob,aAAarzC,MAEnC,CACA2/B,SACQ3/B,KAAKgF,OAAS0yB,EAAW+J,UACrBzhC,KAAKuhC,SACLvhC,KAAKuhC,QAAQ5B,SAEjB3/B,KAAKszC,eACLtzC,KAAKgF,MAAQ0yB,EAAW6b,SAEhC,CACAta,WACQj5B,KAAKgF,OAAS0yB,EAAW+J,UACzBzhC,KAAKmzC,mBAAmB1b,EAAa+b,UACrCxzC,KAAKgF,MAAQ0yB,EAAW+b,UACxBzzC,KAAK0zC,iBACA1zC,KAAKwyC,mBACNxyC,KAAK8yC,QAAQa,eAAe3zC,MAC5BA,KAAKi4B,SAAS0b,eAAe3zC,OAGzC,CACA4zC,OACQ5zC,KAAKgF,OAAS0yB,EAAW+J,UACzBzhC,KAAKgF,MAAQ0yB,EAAWwD,OACxBl7B,KAAK8yC,QAAQe,YAAY7zC,MAEjC,CACA8zC,gBACI,IAAI1a,EACJ,IAAKp5B,KAAK8xC,gBAAkB9xC,KAAKgyC,cAAe,CAC5C,MACM9S,EAASP,EADU3+B,KAAK+5B,SAAS1wB,QAAmC,QAAxB+vB,EAAKp5B,KAAKihC,gBAA6B,IAAP7H,OAAgB,EAASA,EAAG/vB,MAAQ,UAAYrJ,KAAKkH,QAEvIlH,KAAK4+B,QAAQzgB,OAAO+gB,EAAQl/B,KAAK+5B,SAAU/5B,KAAKsyC,uBAChDtyC,KAAK8xC,gBAAiB,CAC1B,CACJ,CACAiC,eACQ/zC,KAAKg0C,uBACLh0C,KAAKi0C,kBAEAj0C,KAAKk0C,uBAAyBl0C,KAAKuhC,UACxCvhC,KAAKuhC,QAAU,IAAItC,EAAaj/B,KAAMs3B,EAAY5b,IAAK1b,KAAK+5B,UAC5D/5B,KAAKuhC,QAAQt6B,UAErB,CACAgtC,kBACQj0C,KAAK+6B,WACL/6B,KAAKm0C,eACLn0C,KAAKo0C,iBACLp0C,KAAKq0C,gBAEb,CACAF,eACIn0C,KAAKmzC,mBAAmB1b,EAAa6c,cACrCt0C,KAAK8yC,QAAQyB,oBAAoBv0C,KACrC,CACAo0C,eAAerZ,EAAW/6B,KAAK+6B,UAE3B,GADA/6B,KAAK+6B,SAAWA,EACZA,EAAU,CACV,MAAM,WAAEK,GAAeL,EACnByZ,GAAapZ,GACbp7B,KAAK8yC,QAAQ2B,sBAAsBz0C,MAGnCA,KAAK8yC,QAAQ4B,iCAAiC10C,KAAMo7B,EAE5D,CACJ,CACAiZ,gBACIr0C,KAAKmzC,mBAAmB1b,EAAakd,YACrC30C,KAAK8yC,QAAQ8B,qBAAqB50C,KACtC,CACA60C,eACI,GAAI70C,KAAK+6B,SAAU,CACf,MAAM,WAAEK,EAAU,aAAEU,GAAiB97B,KAAK+6B,SAC1C/6B,KAAK6oC,QAAOtM,UACJv8B,KAAKiyC,qBACLjyC,KAAK80C,gBACL90C,KAAK+yC,KAAKrK,qBACJ1oC,KAAK+yC,KAAKrK,cAChB8L,GAAapZ,IAA+B,MAAhBU,SACtB97B,KAAK+yC,KAAKgC,WAAWjE,EAAakE,eAAelZ,IAAe,EAAO97B,KAAKssC,WAAYtsC,MAC9FA,KAAKi1C,gBACLj1C,KAAK8yC,QAAQoC,cAAcl1C,MAC3BA,KAAKi5B,mBAGCj5B,KAAK+yC,KAAKoC,YAAYrE,EAAakE,eAAelZ,GAAe97B,MACvEA,KAAK8yC,QAAQoC,cAAcl1C,MAC3BA,KAAK4zC,OACT,GAER,CACJ,CACAwB,oBACI,MAAMzO,EAAW3mC,KAAK+yC,KAAKsC,6BAA6Br1C,KAAK+5B,WAAa/5B,KAAKs1C,uBAC/E,GAAI3O,KAAcjN,EAAU15B,KAAK+5B,WAAa4M,EAASP,UAAU1M,EAAU15B,KAAK+5B,cACzD,WAAf/5B,KAAKkH,QAAuBy/B,EAASgL,eACrC,OAAOhL,CAGnB,CACA2O,uBACI,GAAIt1C,KAAK2yC,aACL,OAAO7B,EAAakE,eAAeh1C,KAAK2yC,aAEhD,CACA4C,oBACI,OAAmC,MAA5Bv1C,KAAKo1C,mBAChB,CACAI,qBACI,MAAM7O,EAAW3mC,KAAKo1C,oBACtB,GAAIzO,EAAU,CACV,MAAMxN,EAAYn5B,KAAKk0C,qBACvBl0C,KAAK6oC,QAAOtM,UACRv8B,KAAK80C,gBACD90C,KAAK4yC,WACL5yC,KAAK8yC,QAAQoC,cAAcl1C,OAGvBA,KAAK+yC,KAAKrK,qBACJ1oC,KAAK+yC,KAAKrK,oBACd1oC,KAAK+yC,KAAKgC,WAAWpO,EAAUxN,EAAWn5B,KAAKssC,WAAYtsC,MACjEA,KAAKi1C,gBACLj1C,KAAK8yC,QAAQoC,cAAcl1C,MACtBm5B,GACDn5B,KAAKi5B,WAEb,GAER,CACJ,CACAya,iBACI,IAAIta,EACAp5B,KAAKy1C,uBAAyBz1C,KAAKwyC,mBAA8C,QAAxBpZ,EAAKp5B,KAAK+6B,gBAA6B,IAAP3B,OAAgB,EAASA,EAAGkC,cACrHt7B,KAAK8yC,QAAQ4C,wBAAwB11C,KAAKy1C,qBAAsB,CAC5DvuC,OAAQ,UACR6zB,SAAU/6B,KAAK+6B,WAEnB/6B,KAAKwyC,kBAAmB,EAEhC,CACAmD,qBACQ31C,KAAK4yC,YACL5yC,KAAK6oC,QAAOtM,UACRv8B,KAAK80C,gBACL90C,KAAKi1C,gBACLj1C,KAAK8yC,QAAQoC,cAAcl1C,KAAK,GAG5C,CACA8/B,yBAAyB/D,EAASwF,GAC1BvhC,KAAKkyC,uBACL3Q,EAAQJ,mBAAmBe,EAAc1G,YAEjD,CACAwE,iBACIhgC,KAAKm0C,cACT,CACA3T,iCAAiC4E,EAAUwQ,GAAa,CACxDrZ,mCAAmCgF,EAASxG,GACxC,MAAMe,QAAqBf,EAASe,cAC9B,WAAER,EAAU,WAAEF,GAAeL,EACflyB,MAAhBizB,EACA97B,KAAKo0C,eAAe,CAChBhZ,WAAY+W,EAAiB0D,oBAC7Bva,gBAIJt7B,KAAKy1C,qBAAuB1a,EAASO,WAAaP,EAAShB,cAAWlxB,EACtE7I,KAAKo0C,eAAe,CAAEhZ,WAAYA,EAAYU,eAAcR,eAEpE,CACAiB,gCAAgCgF,EAASxG,GACrC,MAAMe,QAAqBf,EAASe,cAC9B,WAAER,EAAU,WAAEF,GAAeL,EACflyB,MAAhBizB,EACA97B,KAAKo0C,eAAe,CAChBhZ,WAAY+W,EAAiB0D,oBAC7Bva,eAIJt7B,KAAKo0C,eAAe,CAAEhZ,WAAYA,EAAYU,eAAcR,cAEpE,CACA8E,eAAegF,EAAU0Q,GACrB91C,KAAKo0C,eAAe,CAChBhZ,WAAY+W,EAAiB4D,eAC7Bza,YAAY,GAEpB,CACA+E,kBACIrgC,KAAKq0C,eACT,CACAY,gBACSj1C,KAAKyyC,UAAazyC,KAAK+yC,KAAKiD,gBACV,WAAfh2C,KAAKkH,OACLlH,KAAKi2C,4BAA8Bj2C,KAAK6nC,kBAAoB7nC,KAAK+yC,KAAKzK,cAGtEtoC,KAAK6nC,kBAAoB7nC,KAAK+yC,KAAKzK,cAEnCtoC,KAAK4yC,YACL5yC,KAAKi4B,SAASie,gCAAgCl2C,KAAK+yC,KAAKoD,qBAAsBn2C,KAAK+5B,UAEvF/5B,KAAKyyC,UAAW,EAExB,CACAwD,2BACI,MAAM,eAAEG,GAAmBp2C,KAAKgzC,gBAChC,GAAIoD,EAEA,OADAp2C,KAAK+yC,KAAK/K,iBAAiBoO,IACpB,CAEf,CACAvO,iBACI,MAAMjN,EAASlB,EAAU15B,KAAK+5B,UAC9B,GAAc,MAAVa,EAEA,OADA56B,KAAK+yC,KAAKlL,eAAejN,IAClB,CAEf,CACAuY,mBAAmBkD,GACfr2C,KAAKuyC,cAAc8D,IAAU,IAAIl2C,MAAOG,SAC5C,CACAg2C,mBACI,OAAO1rC,OAAOiS,OAAO,CAAC,EAAG7c,KAAKuyC,cAClC,CACA5T,0BAA0Bz3B,GACtB,OAAQA,GACJ,IAAK,UACD,OAAO03B,QAAQC,aACnB,IAAK,UACL,IAAK,UACD,OAAOD,QAAQE,UAE3B,CACAkV,uBACI,MAA+B,iBAAjBh0C,KAAK+6B,QACvB,CACAmZ,qBACI,OAAIl0C,KAAK4yC,aAGe,WAAf5yC,KAAKkH,QACFlH,KAAKu1C,oBAGNv1C,KAAKssC,WAEpB,CACAwI,gBACS90C,KAAK0yC,iBACN1yC,KAAK+yC,KAAK+B,gBAAgBj2B,MAAM8nB,GAAaA,GAAY3mC,KAAK+xC,oBAAoBpL,KAClF3mC,KAAK0yC,gBAAiB,EAE9B,CACAnW,aAAa8O,GACTrrC,KAAKszC,qBACC,IAAI30B,SAASC,IACf5e,KAAKu2C,MAAQpZ,uBAAsB,IAAMve,KAAU,UAEjDysB,WACCrrC,KAAKu2C,KAChB,CACAjD,eACQtzC,KAAKu2C,QACLC,qBAAqBx2C,KAAKu2C,cACnBv2C,KAAKu2C,MAEpB,EAEJ,SAAS/B,GAAapZ,GAClB,OAAOA,GAAc,KAAOA,EAAa,GAC7C,CAEA,MAAMqb,GACF/1C,YAAYg2C,GACR12C,KAAK22C,YAAc,IAAIzI,EACvBluC,KAAK42C,gBAAkB,KACnB52C,KAAK22C,YAAYjpB,MAAM,EAE3B1tB,KAAK02C,QAAUA,CACnB,CACAhB,wBAAwB3b,EAAUvsB,GAC9BxN,KAAKwZ,UAAUq9B,WAAW9c,GAAWvsB,aAAyC,EAASA,EAAQ8kC,wBAA0BtU,IAAQxwB,EACrI,CACA6lC,aAAayD,GACT92C,KAAK+5B,SAAW+c,EAAM/c,SACtB+c,EAAMtB,qBACNsB,EAAM/C,eACN+C,EAAMnB,oBACV,CACApB,oBAAoBuC,GAChB92C,KAAK22C,YAAYrI,SAAS,GACtBwI,EAAMvB,qBAAuC,WAAhBuB,EAAM5vC,OACnClH,KAAK+2C,iCAGL/2C,KAAK42C,iBAEb,CACAnC,sBAAsBqC,GAClBA,EAAMjC,cACV,CACAH,iCAAiCoC,EAAO1b,GACpC,OAAQA,GACJ,KAAK+W,EAAiB4D,eACtB,KAAK5D,EAAiB6E,eACtB,KAAK7E,EAAiB0D,oBAClB,OAAO71C,KAAK+F,OAAO,CACfL,OAAQ,iBACRuxC,QAAS,CACL7b,gBAGZ,QACI,OAAO0b,EAAMjC,eAEzB,CACAD,qBAAqBsC,GACjBl3C,KAAK22C,YAAYrI,SAAS,GAC1BtuC,KAAKm3C,sBACT,CACAxD,eAAeuD,GAAU,CACzBE,gBAAgB1xC,GACZ1F,KAAK+F,OAAOL,EAChB,CACAmuC,YAAYqD,GAAU,CACtBhC,cAAcgC,GAAU,CACxB3R,sBAAsB8R,GAClBr3C,KAAK22C,YAAYrI,SAAS,GAC1BtuC,KAAKs3C,+BACT,CACAtR,uBAAuBqR,GACnBr3C,KAAK22C,YAAYrI,SAAS,GAC1BtuC,KAAKu3C,qBACT,CACAR,iCACI/2C,KAAKw3C,wBAA0B/nC,OAAOxN,WAAWjC,KAAK42C,gBAAiB52C,KAAK02C,QAAQe,iBACxF,CACAN,uBACIn3C,KAAK22C,YAAYniC,OACmB,MAAhCxU,KAAKw3C,0BACL/nC,OAAO1N,aAAa/B,KAAKw3C,gCAClBx3C,KAAKw3C,wBAEpB,CACAF,gCACuC,MAA/Bt3C,KAAK03C,yBACL13C,KAAK03C,uBAAyBjoC,OAAOxN,WAAWjC,KAAK42C,gBAAiB52C,KAAK02C,QAAQe,kBAE3F,CACAF,sBACIv3C,KAAK22C,YAAYniC,OACkB,MAA/BxU,KAAK03C,yBACLjoC,OAAO1N,aAAa/B,KAAK03C,+BAClB13C,KAAK03C,uBAEpB,CACA3xC,OAAOL,GACHi3B,EAAS,eAAgB,CAAEE,OAAQn3B,IAC9B1F,KAAK+5B,WAEVtqB,OAAOsqB,SAAS1wB,KAAOrJ,KAAK+5B,SAASlvB,WACzC,CACI2O,gBACA,OAAOxZ,KAAK02C,QAAQl9B,SACxB,EAGJ,MAAMm+B,GACFj3C,cACIV,KAAKyhC,SAAU,EACfzhC,KAAK43C,oBAAwBC,IACzB,MAAMC,EAAgB,IAAIj1C,SAASoM,iBAAiB,+BACpD,IAAK,MAAMvF,KAAWouC,EAClBpuC,EAAQrC,QAEf,CACL,CACAtG,QACSf,KAAKyhC,UACNzhC,KAAKyhC,SAAU,EACfrgC,iBAAiB,qBAAsBpB,KAAK43C,qBAAqB,GAEzE,CACAt2C,OACQtB,KAAKyhC,UACLzhC,KAAKyhC,SAAU,EACfjgC,oBAAoB,qBAAsBxB,KAAK43C,qBAAqB,GAE5E,EAGJ,MAAMG,GACFr3C,YAAYg2C,EAAShtC,GACjB1J,KAAK02C,QAAUA,EACf12C,KAAK0J,QAAUA,EACf1J,KAAK6qC,kBAAoB,IAAIlB,EAAkB3pC,KAAM0J,GACrD1J,KAAKg4C,mBAAqB,IAAIjR,EAAmB/mC,KAAM0J,EAC3D,CACA3I,QACIf,KAAK6qC,kBAAkB9pC,QACvBf,KAAKg4C,mBAAmBj3C,OAC5B,CACAO,OACItB,KAAK6qC,kBAAkBvpC,OACvBtB,KAAKg4C,mBAAmB12C,MAC5B,CACA8oC,yBAAyB1gC,EAASqwB,EAAUv0B,GACxC,OAAOxF,KAAKi4C,eAAevuC,IAAY1J,KAAKk4C,4BAA4BxuC,EAASqwB,EAAUv0B,EAC/F,CACA6kC,uBAAuB3gC,EAAStF,GAC5B,MAAMmyC,EAAQv2C,KAAKm4C,iBAAiBzuC,GAChC6sC,GACAA,EAAMte,SAASoS,uBAAuB3gC,EAAStF,EAEvD,CACAmjC,eAAe79B,EAAS0sB,GACpB,OAA0C,MAAlC1sB,EAAQytB,QAAQ,gBACpBn3B,KAAKo4C,aAAa1uC,EAAS0sB,IAC3Bp2B,KAAKi4C,eAAevuC,EAAS0sB,EACrC,CACAqR,cAAc/9B,EAAS0sB,GACnB,MAAMmgB,EAAQv2C,KAAKm4C,iBAAiBzuC,EAAS0sB,GACzCmgB,GACAA,EAAMte,SAASwP,cAAc/9B,EAAS0sB,EAE9C,CACA8hB,4BAA4BpsC,GAAUzC,KAAMjF,GAAO0mC,GAM/C,OALcnO,EAAS,cAAe,CAClC7wB,SACA+wB,OAAQ,CAAEz4B,MAAK0mC,iBACflO,YAAY,IAEF2D,gBAClB,CACA6X,aAAa/hB,EAAMD,GACf,IAAIgD,EACJ,MAAMlyB,EAAS2yB,EAAUxD,EAAMD,GACzBiiB,EAAOr4C,KAAK0J,QAAQmL,cAAcjL,cAAc,2BAChDowB,EAAeV,EAA8E,QAAnEF,EAAKif,aAAmC,EAASA,EAAKrZ,eAA4B,IAAP5F,EAAgBA,EAAK,KAChI,OAAOp5B,KAAKi4C,eAAe5hB,EAAMD,IAAc0D,EAAoB5yB,EAAQ8yB,EAC/E,CACAie,eAAevuC,EAAS0sB,GAIpB,GAHsB1sB,aAAmBktB,gBACnC52B,KAAK02C,QAAQ4B,wBAAwB5uC,EAAS0sB,GAC9Cp2B,KAAK02C,QAAQ6B,qBAAqB7uC,GACrB,CACf,MAAM6sC,EAAQv2C,KAAKm4C,iBAAiBzuC,EAAS0sB,GAC7C,QAAOmgB,GAAQA,GAAS7sC,EAAQytB,QAAQ,cAC5C,CAEI,OAAO,CAEf,CACAghB,iBAAiBzuC,EAAS0sB,GACtB,MAAMpoB,GAAMooB,aAA6C,EAASA,EAAUvsB,aAAa,sBAAwBH,EAAQG,aAAa,oBACtI,GAAImE,GAAY,QAANA,EAAc,CACpB,MAAMuoC,EAAQv2C,KAAK0J,QAAQE,cAAc,IAAIoE,qBAC7C,GAAIuoC,aAAiBze,EACjB,OAAOye,CAEf,CACJ,EAGJ,MAAMiC,GACF93C,YAAYu3B,GACRj4B,KAAKsyC,sBAAwBtU,IAC7Bh+B,KAAKgzC,gBAAkB,CAAC,EACxBhzC,KAAKyhC,SAAU,EACfzhC,KAAKy4C,YAAa,EAClBz4C,KAAK04C,WAAclzC,IACf,GAAIxF,KAAK24C,uBAAwB,CAC7B,MAAM,MAAEC,GAAUpzC,EAAMR,OAAS,CAAC,EAClC,GAAI4zC,EAAO,CACP54C,KAAK+5B,SAAW,IAAIP,IAAI/pB,OAAOsqB,SAAS1wB,MACxC,MAAM,sBAAEipC,GAA0BsG,EAClC54C,KAAKsyC,sBAAwBA,EAC7BtyC,KAAKi4B,SAAS4gB,iDAAiD74C,KAAK+5B,SAAUuY,EAClF,CACJ,GAEJtyC,KAAK84C,WAAavc,MAAOsb,UA/wDtBl5B,QAAQC,UAixDP5e,KAAKy4C,YAAa,CAAI,EAE1Bz4C,KAAKi4B,SAAWA,CACpB,CACAl3B,QACSf,KAAKyhC,UACNrgC,iBAAiB,WAAYpB,KAAK04C,YAAY,GAC9Ct3C,iBAAiB,OAAQpB,KAAK84C,YAAY,GAC1C94C,KAAKyhC,SAAU,EACfzhC,KAAKsJ,QAAQ,IAAIkwB,IAAI/pB,OAAOsqB,SAAS1wB,OAE7C,CACA/H,OACQtB,KAAKyhC,UACLjgC,oBAAoB,WAAYxB,KAAK04C,YAAY,GACjDl3C,oBAAoB,OAAQxB,KAAK84C,YAAY,GAC7C94C,KAAKyhC,SAAU,EAEvB,CACAvhC,KAAK65B,EAAUuY,GACXtyC,KAAKme,OAAOygB,QAAQE,UAAW/E,EAAUuY,EAC7C,CACAhpC,QAAQywB,EAAUuY,GACdtyC,KAAKme,OAAOygB,QAAQC,aAAc9E,EAAUuY,EAChD,CACAn0B,OAAO+gB,EAAQnF,EAAUuY,EAAwBtU,KAC7C,MAAMh5B,EAAQ,CAAE4zC,MAAO,CAAEtG,0BACzBpT,EAAOp6B,KAAK85B,QAAS55B,EAAO,GAAI+0B,EAAS1wB,MACzCrJ,KAAK+5B,SAAWA,EAChB/5B,KAAKsyC,sBAAwBA,CACjC,CACAW,gCAAgCX,GAC5B,OAAOtyC,KAAKgzC,gBAAgBV,IAA0B,CAAC,CAC3D,CACAyG,sBAAsBC,GAClB,MAAM,sBAAE1G,GAA0BtyC,KAC5BgzC,EAAkBhzC,KAAKgzC,gBAAgBV,GAC7CtyC,KAAKgzC,gBAAgBV,GAAyB1nC,OAAOiS,OAAOjS,OAAOiS,OAAO,CAAC,EAAGm2B,GAAkBgG,EACpG,CACAC,mCACI,IAAI7f,EACCp5B,KAAKk5C,4BACNl5C,KAAKk5C,0BAAiE,QAApC9f,EAAKwF,QAAQua,yBAAsC,IAAP/f,EAAgBA,EAAK,OACnGwF,QAAQua,kBAAoB,SAEpC,CACAC,uCACQp5C,KAAKk5C,4BACLta,QAAQua,kBAAoBn5C,KAAKk5C,iCAC1Bl5C,KAAKk5C,0BAEpB,CACAP,uBACI,OAAO34C,KAAKq5C,cAChB,CACAA,eACI,OAAOr5C,KAAKy4C,YAAqC,YAAvB51C,SAASoC,UACvC,EAGJ,MAAMq0C,GACF54C,YAAYu3B,GACRj4B,KAAKi4B,SAAWA,CACpB,CACAshB,aAAaxf,EAAUvsB,EAAU,CAAC,GAC1BxN,KAAKi4B,SAASuhB,iCAAiCzf,EAAUvsB,EAAQtG,UAC7D4yB,EAAoBC,EAAU/5B,KAAK+yC,KAAKpM,SAAS3M,cACjDh6B,KAAKi4B,SAASyd,wBAAwB3b,EAAUvsB,GAGhDiC,OAAOsqB,SAAS1wB,KAAO0wB,EAASlvB,WAG5C,CACAgsC,WAAWtd,EAAW+Y,EAAuB9kC,EAAU,CAAC,GACpDxN,KAAKy5C,UAAYz5C,KAAK05C,aACtB15C,KAAKsB,OACLtB,KAAK05C,aAAe,IAAIrH,GAAMryC,KAAMs5B,EAAUC,GAAY+Y,EAAuB1nC,OAAOiS,OAAO,CAAEokB,SAAUjhC,KAAK+5B,UAAYvsB,IAC5HxN,KAAK05C,aAAa34C,OACtB,CACA44C,WAAWtjB,EAAMD,GACbp2B,KAAKsB,OACLtB,KAAKslC,eAAiB,IAAIxC,EAAe9iC,KAAMq2B,EAAMD,GAAW,GAChEp2B,KAAKslC,eAAevkC,OACxB,CACAO,OACQtB,KAAKslC,iBACLtlC,KAAKslC,eAAehkC,cACbtB,KAAKslC,gBAEZtlC,KAAK05C,eACL15C,KAAK05C,aAAa/Z,gBACX3/B,KAAK05C,aAEpB,CACI5G,cACA,OAAO9yC,KAAKi4B,SAAS6a,OACzB,CACIC,WACA,OAAO/yC,KAAKi4B,SAAS8a,IACzB,CACInU,cACA,OAAO5+B,KAAKi4B,SAAS2G,OACzB,CACA2G,sBAAsBD,GACgC,mBAAvCtlC,KAAK8yC,QAAQvN,uBACpBvlC,KAAK8yC,QAAQvN,sBAAsBD,EAE3C,CACA/I,0CAA0C+I,EAAgBhF,GACtD,GAAIgF,GAAkBtlC,KAAKslC,eAAgB,CACvC,MAAMxJ,QAAqBwE,EAAcxE,aACzC,GAAIA,EAAc,CACd,MAAMmW,EAAsB3M,EAAepG,QAAU5H,EAAY5b,IAC5Du2B,GACDjyC,KAAK+yC,KAAK6G,qBAEd,MAAM,WAAExe,EAAU,WAAEE,GAAegF,EAE7BuZ,EAAe,CACjB3yC,OAFWlH,KAAK85C,2BAA2BxU,GAG3C2M,sBACAlX,SAAU,CAAEK,aAAYU,eAAcR,eAE1Ct7B,KAAKu5C,aAAajZ,EAAcvG,SAAU8f,EAC9C,CACJ,CACJ,CACAtd,uCAAuC+I,EAAgBhF,GACnD,MAAMxE,QAAqBwE,EAAcxE,aACzC,GAAIA,EAAc,CACd,MAAM6K,EAAWmK,EAAakE,eAAelZ,GACzCwE,EAAcjF,kBACRr7B,KAAK+yC,KAAKoC,YAAYxO,EAAU3mC,KAAK05C,oBAGrC15C,KAAK+yC,KAAKgC,WAAWpO,GAAU,GAAO,EAAM3mC,KAAK05C,cAE3D15C,KAAK+yC,KAAKzK,cACVtoC,KAAK+yC,KAAK6G,oBACd,CACJ,CACA/T,sBAAsBP,EAAgB9gC,GAClC5E,QAAQ4E,MAAMA,EAClB,CACAwhC,uBAAuBV,GACgC,mBAAxCtlC,KAAK8yC,QAAQ9M,wBACpBhmC,KAAK8yC,QAAQ9M,uBAAuBV,EAE5C,CACA+N,aAAayD,GACT92C,KAAKi4B,SAASob,aAAayD,EAC/B,CACAnD,eAAemD,GACX92C,KAAKi4B,SAAS0b,eAAemD,EACjC,CACAjE,6BAA6B9Y,EAAU7yB,GACnC,IAAIkyB,EACJ,MAAMwB,EAASlB,EAAUK,GACnBggB,GAA0C,QAAzB3gB,EAAKp5B,KAAKy5C,iBAA8B,IAAPrgB,OAAgB,EAASA,EAAGW,WAAa/5B,KAAK+yC,KAAKoD,qBACrG6D,EAAgBtgB,EAAUqgB,GAC1BE,EAAgC,YAAX/yC,QAA0C,IAAX0zB,EAC1D,MAAmB,YAAX1zB,GACJyzB,EAAcZ,KAAcY,EAAcof,KACzCE,GAAiC,MAAVrf,GAAkBA,IAAWof,EAC7D,CACA9D,gCAAgCgE,EAAQC,GACpCn6C,KAAKi4B,SAASie,gCAAgCgE,EAAQC,EAC1D,CACIpgB,eACA,OAAO/5B,KAAK4+B,QAAQ7E,QACxB,CACIuY,4BACA,OAAOtyC,KAAK4+B,QAAQ0T,qBACxB,CACAwH,2BAA2BxU,GACvB,MAAM,YAAEvC,EAAW,UAAE3M,GAAckP,EAC7Bp+B,EAAS2C,EAAa,oBAAqBusB,EAAW2M,GAC5D,OAAO/G,EAAS90B,GAAUA,EAAS,SACvC,GAIJ,SAAWkrC,GACPA,EAAUA,EAAmB,QAAI,GAAK,UACtCA,EAAUA,EAAmB,QAAI,GAAK,UACtCA,EAAUA,EAAuB,YAAI,GAAK,cAC1CA,EAAUA,EAAoB,SAAI,GAAK,UAC1C,CALD,CAKGA,IAAcA,EAAY,CAAC,IAC9B,MAAMgI,GACF15C,YAAYu3B,GACRj4B,KAAKq6C,MAAQjI,EAAUkI,QACvBt6C,KAAKyhC,SAAU,EACfzhC,KAAKu6C,oBAAsB,KACvB,MAAM,WAAEt1C,GAAejF,KACL,eAAdiF,EACAjF,KAAKw6C,oBAEc,YAAdv1C,GACLjF,KAAKy6C,gBACT,EAEJz6C,KAAK06C,eAAiB,KAClB16C,KAAKi4B,SAASyiB,gBAAgB,EAElC16C,KAAKi4B,SAAWA,CACpB,CACAl3B,QACSf,KAAKyhC,UACFzhC,KAAKq6C,OAASjI,EAAUkI,UACxBt6C,KAAKq6C,MAAQjI,EAAUxZ,SAE3B/1B,SAASzB,iBAAiB,mBAAoBpB,KAAKu6C,qBAAqB,GACxEn5C,iBAAiB,WAAYpB,KAAK06C,gBAAgB,GAClD16C,KAAKyhC,SAAU,EAEvB,CACAngC,OACQtB,KAAKyhC,UACL5+B,SAASrB,oBAAoB,mBAAoBxB,KAAKu6C,qBAAqB,GAC3E/4C,oBAAoB,WAAYxB,KAAK06C,gBAAgB,GACrD16C,KAAKyhC,SAAU,EAEvB,CACA+Y,oBACQx6C,KAAKq6C,OAASjI,EAAUxZ,UACxB54B,KAAKq6C,MAAQjI,EAAUuI,YACvB36C,KAAKi4B,SAAS2iB,wBAEtB,CACAH,iBACIz6C,KAAKw6C,oBACDx6C,KAAKq6C,OAASjI,EAAUuI,cACxB36C,KAAKq6C,MAAQjI,EAAUnZ,SACvBj5B,KAAKi4B,SAASwgB,aAEtB,CACIxzC,iBACA,OAAOpC,SAASoC,UACpB,EAGJ,MAAM41C,GACFn6C,YAAYu3B,GACRj4B,KAAKyhC,SAAU,EACfzhC,KAAK86C,SAAW,KACZ96C,KAAK+6C,eAAe,CAAE3kC,EAAG3G,OAAOgH,YAAaJ,EAAG5G,OAAOkH,aAAc,EAEzE3W,KAAKi4B,SAAWA,CACpB,CACAl3B,QACSf,KAAKyhC,UACNrgC,iBAAiB,SAAUpB,KAAK86C,UAAU,GAC1C96C,KAAK86C,WACL96C,KAAKyhC,SAAU,EAEvB,CACAngC,OACQtB,KAAKyhC,UACLjgC,oBAAoB,SAAUxB,KAAK86C,UAAU,GAC7C96C,KAAKyhC,SAAU,EAEvB,CACAsZ,eAAehpC,GACX/R,KAAKi4B,SAAS+iB,sBAAsBjpC,EACxC,EAGJ,MAAMkpC,GACFpS,QAAO,SAAE1G,IACLiJ,EAAMqB,4BAA4BzsC,KAO1C,SAA2CmiC,GACvC,MAAM+Y,EAA8B1U,EAA0B3jC,SAASkU,iBACjE6vB,EAAsB,CAAC,EAC7B,IAAK,MAAMuU,KAA8BD,EAA6B,CAClE,MAAM,GAAEltC,GAAOmtC,EACf,IAAK,MAAM/Y,KAAiBD,EAASlzB,iBAAiB,gBAAiB,CACnE,MAAMmsC,EAAkB3U,EAAwBrE,EAAcG,gBAAgBvD,QAAShxB,GACnFotC,IACAxU,EAAoB54B,GAAM,CAACmtC,EAA4BC,GAE/D,CACJ,CACA,OAAOxU,CACX,CApBgDyU,CAAkClZ,IAAW,IAAMt/B,SAASkU,gBAAgB2f,YAAYyL,IACpI,CACAsJ,cAAc5E,EAAyBC,GACnCA,EAAoBtE,YAAYqE,EAAwBoF,WAAU,GACtE,CACAJ,eAAiB,EAiBrB,MAAMyP,GACF56C,YAAYu3B,GACRj4B,KAAKu7C,QAAU,IAAItgC,IACnBjb,KAAKyhC,SAAU,EACfzhC,KAAKw7C,qBAAyBh2C,IAC1B,MAAMu1B,EAkDlB,SAAgCv1B,GAC5B,IAAI4zB,EACJ,MAAMkH,EAAwC,QAAvBlH,EAAK5zB,EAAMq3B,cAA2B,IAAPzD,OAAgB,EAASA,EAAGkH,cAClF,GAAIA,aAAyBxF,EACzB,OAAOwF,CAEf,CAxD6Bmb,CAAuBj2C,GACpCu1B,GAwDhB,SAA+BA,GAC3B,IAAI3B,EAEJ,OADoD,QAA/BA,EAAK2B,EAASS,mBAAgC,IAAPpC,EAAgBA,EAAK,IAC9DmB,WAAW2H,EAAc1G,YAChD,CA5D4BkgB,CAAsB3gB,KAClCv1B,EAAMgiC,iBACNxnC,KAAK27C,uBAAuB5gB,GAEnC,EACD/6B,KAAK47C,oBAAuBp2C,IACpBxF,KAAKyhC,SAAgC,iBAAdj8B,EAAM3B,MAC7B7D,KAAK67C,mBAAmBr2C,EAAM3B,KAClC,EAEJ7D,KAAKi4B,SAAWA,CACpB,CACAl3B,QACSf,KAAKyhC,UACNzhC,KAAKyhC,SAAU,EACfrgC,iBAAiB,8BAA+BpB,KAAKw7C,sBAAsB,GAEnF,CACAl6C,OACQtB,KAAKyhC,UACLzhC,KAAKyhC,SAAU,EACfjgC,oBAAoB,8BAA+BxB,KAAKw7C,sBAAsB,GAEtF,CACAM,oBAAoB9vC,GACXhM,KAAK+7C,wBAAwB/vC,KAC9BhM,KAAKu7C,QAAQhzC,IAAIyD,GACjBA,EAAO5K,iBAAiB,UAAWpB,KAAK47C,qBAAqB,GAErE,CACAI,uBAAuBhwC,GACfhM,KAAK+7C,wBAAwB/vC,KAC7BhM,KAAKu7C,QAAQxX,OAAO/3B,GACpBA,EAAOxK,oBAAoB,UAAWxB,KAAK47C,qBAAqB,GAExE,CACAG,wBAAwB/vC,GACpB,OAAOhM,KAAKu7C,QAAQ//B,IAAIxP,EAC5B,CACAuwB,6BAA6BxB,GACzB,MAAMhZ,QAAagZ,EAASe,aACxB/Z,GACA/hB,KAAK67C,mBAAmB95B,EAEhC,CACA85B,mBAAmB95B,GACf/hB,KAAKi4B,SAASgkB,0BAA0B/Z,EAAcga,KAAKn6B,GAC/D,EAeJ,MAAMo6B,WAAsB/P,EACxB1J,qBAAqBmK,EAAgBC,GACjC,MAAM,gBAAE/1B,EAAe,KAAE6B,GAAS/V,SAClCkU,EAAgBqlC,aAAatP,EAAYl0B,EAC7C,CACA2jB,eACIv8B,KAAKq8C,qBACLr8C,KAAKytC,wBACT,CACA4O,qBACI,MAAM,gBAAEtlC,EAAe,KAAEpN,GAAS9G,SAClCkU,EAAgBqlC,aAAap8C,KAAKs8C,QAAS3yC,GAC3C3J,KAAK8oC,cAAc9oC,KAAK6sC,eAAgB7sC,KAAK8sC,WACjD,CACAW,yBACI,IAAK,MAAM8O,KAAsBv8C,KAAKw8C,eAAgB,CAClD,MAAM/jC,EAAa8jC,EAAmB9jC,WACtC,GAAIA,EAAY,CACZ,MAAM/O,EAAUuyB,EAAsBsgB,GACtC9jC,EAAW2jC,aAAa1yC,EAAS6yC,EACrC,CACJ,CACJ,CACID,cACA,OAAOt8C,KAAKyoC,YAAYsI,aAAarnC,OACzC,CACI8yC,qBACA,OAAO35C,SAASkU,gBAAgB9H,iBAAiB,SACrD,EAGJ,MAAMwtC,WAAqBrQ,EACvB1J,qBAAqBmK,EAAgBC,GAC7BjqC,SAAS+V,MAAQk0B,aAAsB4P,gBACvC75C,SAAS+V,KAAK4pB,YAAYsK,GAG1BjqC,SAASkU,gBAAgB2f,YAAYoW,EAE7C,CACItE,mBACA,OAAOxoC,KAAKyoC,YAAYoJ,aAAe7xC,KAAK28C,2BAChD,CACItT,mBACA,OAAKrpC,KAAKyoC,YAAYoJ,YAKjB7xC,KAAK28C,iCAAV,EACW,CACHj3C,OAAQ,4BANL,CACHA,OAAQ,gCAQpB,CACA62B,8BACUv8B,KAAK48C,WACf,CACArgB,eACQv8B,KAAKssC,YACLtsC,KAAK68C,aAEb,CACApT,kBACI1R,MAAM0R,kBACDzpC,KAAKm5B,WACNn5B,KAAK0sC,gCAEb,CACIoQ,0BACA,OAAO98C,KAAKqsC,gBAAgB0E,YAChC,CACIgM,sBACA,OAAO/8C,KAAKyoC,YAAYsI,YAC5B,CACIjE,iBACA,OAAO9sC,KAAKyoC,YAAY/+B,OAC5B,CACA6yB,kBACI,MAAMygB,EAAwBh9C,KAAKi9C,gCACnCj9C,KAAKk9C,4BACLl9C,KAAKm9C,uCACLn9C,KAAKo9C,uCACCJ,CACV,CACAH,cACI78C,KAAKysC,6BAA4B,KAC7BzsC,KAAKq9C,kBACLr9C,KAAKs9C,eAAe,GAE5B,CACIX,kCACA,OAAO38C,KAAK88C,oBAAoB5M,yBAA2BlwC,KAAK+8C,gBAAgB7M,uBACpF,CACA3T,sCACI,MAAMghB,EAAkB,GACxB,IAAK,MAAM7zC,KAAW1J,KAAKw9C,0BACvBD,EAAgBr9C,KAAKq+B,EAAY70B,IACjC7G,SAAS8G,KAAK+sB,YAAYhtB,SAExBiV,QAAQ8+B,IAAIF,EACtB,CACAL,4BACI,IAAK,MAAMxzC,KAAW1J,KAAK09C,sBACvB76C,SAAS8G,KAAK+sB,YAAYuF,EAAsBvyB,GAExD,CACAyzC,uCACI,IAAK,MAAMzzC,KAAW1J,KAAK29C,+BACvB96C,SAAS8G,KAAKgtB,YAAYjtB,EAElC,CACA0zC,iCACI,IAAK,MAAM1zC,KAAW1J,KAAK49C,2BACvB/6C,SAAS8G,KAAK+sB,YAAYhtB,EAElC,CACA2zC,kBACIx6C,SAASg7C,UAAU79C,KAAK8sC,YACxB9sC,KAAK89C,+BACT,CACAA,gCACI,IAAK,MAAMxb,KAAsBtiC,KAAK+9C,sBAAuB,CACzD,MAAM9P,EAAyBhS,EAAsBqG,GACrDA,EAAmBE,YAAYyL,EACnC,CACJ,CACAqP,gBACIt9C,KAAK8oC,cAAc9oC,KAAK6sC,eAAgB7sC,KAAK8sC,WACjD,CACI0Q,gCACA,OAAOx9C,KAAK+8C,gBAAgB1M,mCAAmCrwC,KAAK88C,oBACxE,CACIY,4BACA,OAAO19C,KAAK+8C,gBAAgB5M,+BAA+BnwC,KAAK88C,oBACpE,CACIa,qCACA,OAAO39C,KAAK88C,oBAAoBvM,mBACpC,CACIqN,iCACA,OAAO59C,KAAK+8C,gBAAgBxM,mBAChC,CACIwN,4BACA,OAAO/9C,KAAK8sC,WAAW79B,iBAAiB,SAC5C,EAGJ,MAAM+uC,GACFt9C,YAAYu9C,GACRj+C,KAAKsL,KAAO,GACZtL,KAAKk+C,UAAY,CAAC,EAClBl+C,KAAKi+C,KAAOA,CAChB,CACAziC,IAAIue,GACA,OAAOc,EAAWd,KAAa/5B,KAAKk+C,SACxC,CACAxiC,IAAIqe,GACA,GAAI/5B,KAAKwb,IAAIue,GAAW,CACpB,MAAM4M,EAAW3mC,KAAKm+C,KAAKpkB,GAE3B,OADA/5B,KAAKo+C,MAAMrkB,GACJ4M,CACX,CACJ,CACA9C,IAAI9J,EAAU4M,GAGV,OAFA3mC,KAAKq+C,MAAMtkB,EAAU4M,GACrB3mC,KAAKo+C,MAAMrkB,GACJ4M,CACX,CACA2X,QACIt+C,KAAKk+C,UAAY,CAAC,CACtB,CACAC,KAAKpkB,GACD,OAAO/5B,KAAKk+C,UAAUrjB,EAAWd,GACrC,CACAskB,MAAMtkB,EAAU4M,GACZ3mC,KAAKk+C,UAAUrjB,EAAWd,IAAa4M,CAC3C,CACAyX,MAAMrkB,GACF,MAAMjzB,EAAM+zB,EAAWd,GACjBvb,EAAQxe,KAAKsL,KAAKjI,QAAQyD,GAC5B0X,GAAS,GACTxe,KAAKsL,KAAKizC,OAAO//B,EAAO,GAC5Bxe,KAAKsL,KAAKkzC,QAAQ13C,GAClB9G,KAAKy+C,MACT,CACAA,OACI,IAAK,MAAM33C,KAAO9G,KAAKsL,KAAKizC,OAAOv+C,KAAKi+C,aAC7Bj+C,KAAKk+C,UAAUp3C,EAE9B,EAGJ,MAAM43C,WAAiBhX,EACnBhnC,cACIq3B,SAAShsB,WACT/L,KAAK2+C,cAAgB,IAAIX,GAAc,IACvCh+C,KAAKm2C,qBAAuB,IAAI3c,IAAIO,SAAS1wB,MAC7CrJ,KAAKg2C,eAAgB,CACzB,CACAjB,WAAWpO,EAAUxN,GAAY,EAAOmT,GAAa,EAAMwK,GACvD,MAAMvO,EAAW,IAAIkU,GAAaz8C,KAAK2mC,SAAUA,EAAU8V,GAAa3T,cAAe3P,EAAWmT,GAOlG,OANK/D,EAASC,aAIVsO,SAA8CA,EAAMhD,gBAHpD9zC,KAAKg2C,eAAgB,EAKlBh2C,KAAK6oC,OAAON,EACvB,CACA4M,YAAYxO,EAAUmQ,GAClBA,SAA8CA,EAAMhD,gBACpD,MAAMvL,EAAW,IAAI4T,GAAcn8C,KAAK2mC,SAAUA,EAAUwV,GAAcrT,eAAe,GACzF,OAAO9oC,KAAK6oC,OAAON,EACvB,CACAqR,qBACI55C,KAAK2+C,cAAcL,OACvB,CACA/hB,sBACI,GAAIv8B,KAAKiyC,oBAAqB,CAC1BjyC,KAAKi4B,SAAS2mB,wBACd,MAAM,SAAEjY,EAAUwP,qBAAsBpc,GAAa/5B,WAx1EtD,IAAI2e,SAASC,GAAY3c,YAAW,IAAM2c,KAAW,KA01EpD,MAAMigC,EAAiBlY,EAAS/K,QAEhC,OADA57B,KAAK2+C,cAAc9a,IAAI9J,EAAU8kB,GAC1BA,CACX,CACJ,CACAxJ,6BAA6Btb,GACzB,OAAO/5B,KAAK2+C,cAAcjjC,IAAIqe,EAClC,CACI4M,eACA,OAAOmK,EAAagO,YAAY9+C,KAAK0J,QACzC,CACIuoC,0BACA,OAAOjyC,KAAK2mC,SAASiL,WACzB,EAGJ,MAAMmN,GACFr+C,YAAYu3B,GACRj4B,KAAKg/C,SAAW,wBAChBh/C,KAAKi4B,SAAWA,CACpB,CACI0mB,oBACA,OAAO3+C,KAAKi4B,SAASze,UAAUu5B,KAAK4L,aACxC,CACA59C,QACI,GAA4B,YAAxB8B,SAASoC,WACT,OAAOpC,SAASzB,iBAAiB,oBAAoB,KACjDpB,KAAKkpC,0BAA0BrmC,SAAS+V,KAAK,IAIjD5Y,KAAKkpC,0BAA0BrmC,SAAS+V,KAEhD,CACAswB,0BAA0Bx/B,GACtB,IAAK,MAAMsgC,KAAQtgC,EAAQuF,iBAAiBjP,KAAKg/C,UAC7Ch/C,KAAKi/C,WAAWjV,EAExB,CACAzN,iBAAiByN,GACb,MAAMjQ,EAAW,IAAIP,IAAIwQ,EAAK3gC,MAC9B,IAAIrJ,KAAK2+C,cAAcnjC,IAAIue,GAG3B,IACI,MAAMgB,QAAiBkF,MAAMlG,EAASlvB,WAAY,CAAEkxB,QAAS,CAAE,eAAgB,OAAQmF,OAAQ,eACzFvF,QAAqBZ,EAASc,OAC9B8K,EAAWmK,EAAakE,eAAerZ,GAC7C37B,KAAK2+C,cAAc9a,IAAI9J,EAAU4M,EAGrC,CADA,MAAO1I,GACP,CACJ,EA6SJ,SAASihB,GAAkC96C,GACvCwG,OAAOwB,iBAAiBhI,EAAK+6C,GACjC,CACA,MAAMA,GAAwC,CAC1CC,YAAa,CACT1jC,MACI,OAAO1b,KAAK6K,UAChB,IAyBFw0C,GAAgB,CAClBC,QACIt/C,KAAKu/C,eAAetzC,SAASuzC,IAAQ,IAAIpmB,EAAI,OAAkC,QAA1BA,EAAKomB,EAAEvoB,qBAAkC,IAAPmC,OAAgB,EAASA,EAAGgW,aAAapvC,KAAKy/C,gBAAiBD,EAAEE,YAAY,GACxK,EACA5wB,SACI9uB,KAAK2/C,gCACL3/C,KAAKu/C,eAAetzC,SAASuzC,GAAMA,EAAE1wB,OAAO9uB,KAAKy/C,kBACrD,EACAG,SACI5/C,KAAKu/C,eAAetzC,SAASuzC,IAAQ,IAAIpmB,EAAI,OAAkC,QAA1BA,EAAKomB,EAAEvoB,qBAAkC,IAAPmC,OAAgB,EAASA,EAAGgW,aAAapvC,KAAKy/C,gBAAiBD,EAAE,GAC5J,EACAK,UACI7/C,KAAK2/C,gCACL3/C,KAAKu/C,eAAetzC,SAASuzC,GAAMA,EAAEK,QAAQ7/C,KAAKy/C,kBACtD,EACAp4C,SACIrH,KAAKu/C,eAAetzC,SAASuzC,GAAMA,EAAEn4C,UACzC,EACAiC,UACItJ,KAAKu/C,eAAetzC,SAASuzC,GAAMA,EAAEhd,YAAYxiC,KAAKy/C,kBAC1D,EACAthC,SACIne,KAAKu/C,eAAetzC,SAASuzC,GAAMA,EAAEM,gBAAgB9/C,KAAKy/C,kBAC9D,GAGE/I,GAAU,IApWhB,MACIh2C,cACIV,KAAKwZ,UAAY,IAAI8/B,GAAUt5C,MAC/BA,KAAK4+B,QAAU,IAAI4Z,GAAQx4C,MAC3BA,KAAK+/C,UAAY,IAAIhB,GAAU/+C,MAC/BA,KAAK+yC,KAAO,IAAI2L,GAAS1+C,KAAM6C,SAASkU,iBACxC/W,KAAK8yC,QAAU,IAAI2D,GAAez2C,MAClCA,KAAKggD,aAAe,IAAI5F,GAAap6C,MACrCA,KAAKigD,cAAgB,IAAItI,GACzB33C,KAAK6qC,kBAAoB,IAAIlB,EAAkB3pC,KAAMyP,QACrDzP,KAAKg4C,mBAAqB,IAAIjR,EAAmB/mC,KAAM6C,UACvD7C,KAAKkgD,eAAiB,IAAIrF,GAAe76C,MACzCA,KAAKmgD,eAAiB,IAAI7E,GAAet7C,MACzCA,KAAKogD,sBAAwB,IAAIxV,EAAsB5qC,KAAM6C,SAASkU,iBACtE/W,KAAKqgD,gBAAkB,IAAItI,GAAgB/3C,KAAM6C,SAASkU,iBAC1D/W,KAAKsgD,sBAAwB,IAAIrF,GACjCj7C,KAAKugD,OAAQ,EACbvgD,KAAKC,SAAU,EACfD,KAAKy3C,iBAAmB,IACxBz3C,KAAKyhC,SAAU,EACfzhC,KAAKwgD,SAAW,IACpB,CACAz/C,QACSf,KAAKyhC,UACNzhC,KAAKggD,aAAaj/C,QAClBf,KAAKigD,cAAcl/C,QACnBf,KAAKogD,sBAAsBr/C,QAC3Bf,KAAK6qC,kBAAkB9pC,QACvBf,KAAKg4C,mBAAmBj3C,QACxBf,KAAKkgD,eAAen/C,QACpBf,KAAKmgD,eAAep/C,QACpBf,KAAKqgD,gBAAgBt/C,QACrBf,KAAK4+B,QAAQ79B,QACbf,KAAK+/C,UAAUh/C,QACff,KAAKyhC,SAAU,EACfzhC,KAAKC,SAAU,EAEvB,CACAwgD,UACIzgD,KAAKC,SAAU,CACnB,CACAqB,OACQtB,KAAKyhC,UACLzhC,KAAKggD,aAAa1+C,OAClBtB,KAAKigD,cAAc3+C,OACnBtB,KAAKogD,sBAAsB9+C,OAC3BtB,KAAK6qC,kBAAkBvpC,OACvBtB,KAAKg4C,mBAAmB12C,OACxBtB,KAAKkgD,eAAe5+C,OACpBtB,KAAKmgD,eAAe7+C,OACpBtB,KAAKqgD,gBAAgB/+C,OACrBtB,KAAK4+B,QAAQt9B,OACbtB,KAAKyhC,SAAU,EAEvB,CACAif,gBAAgB5N,GACZ9yC,KAAK8yC,QAAUA,CACnB,CACAgE,MAAM/c,EAAUvsB,EAAU,CAAC,GACvB,MAAM4/B,EAAe5/B,EAAQ+oC,MAAQ1zC,SAASyN,eAAe9C,EAAQ+oC,OAAS,KAC1EnJ,aAAwBtV,GACxBsV,EAAa9U,IAAMyB,EAASlvB,WAC5BuiC,EAAapV,QAGbh4B,KAAKwZ,UAAU+/B,aAAajgB,EAAUS,GAAWvsB,EAEzD,CACAsuC,oBAAoB9vC,GAChBhM,KAAKmgD,eAAerE,oBAAoB9vC,EAC5C,CACAgwC,uBAAuBhwC,GACnBhM,KAAKmgD,eAAenE,uBAAuBhwC,EAC/C,CACA20C,oBAAoBp7C,GAChBvF,KAAKsgD,sBAAsBzX,OAAO3G,EAAcga,KAAK32C,GACzD,CACAq7C,aACI5gD,KAAK+yC,KAAK6G,oBACd,CACAiH,oBAAoBC,GAChB9gD,KAAKy3C,iBAAmBqJ,CAC5B,CACAC,YAAYC,GACRhhD,KAAKwgD,SAAWQ,CACpB,CACIjnB,eACA,OAAO/5B,KAAK4+B,QAAQ7E,QACxB,CACIuY,4BACA,OAAOtyC,KAAK4+B,QAAQ0T,qBACxB,CACAuG,iDAAiD9e,EAAUuY,GACnDtyC,KAAKC,QACLD,KAAKwZ,UAAUq9B,WAAW9c,EAAUuY,EAAuB,CACvDprC,OAAQ,UACR4qC,gBAAgB,IAIpB9xC,KAAK8yC,QAAQsE,gBAAgB,CACzB1xC,OAAQ,kBAGpB,CACAs1C,sBAAsBjpC,GAClB/R,KAAK4+B,QAAQma,sBAAsB,CAAE3C,eAAgBrkC,GACzD,CACAg5B,6BAA6Bf,EAAMjQ,GAC/B,OAAO/5B,KAAKu4C,qBAAqBvO,IAASlQ,EAAoBC,EAAU/5B,KAAK2mC,SAAS3M,aAC1F,CACAmR,8BAAgC,CAChCf,yBAAyBJ,EAAMjQ,EAAUv0B,GACrC,OAAQxF,KAAKu4C,qBAAqBvO,IAC9BlQ,EAAoBC,EAAU/5B,KAAK2mC,SAAS3M,eAC5Ch6B,KAAKihD,yCAAyCjX,EAAMjQ,EAAUv0B,EACtE,CACA6kC,uBAAuBL,EAAMjQ,GACzB,MAAM7yB,EAASlH,KAAKkhD,iBAAiBlX,GAC/BkI,EAAwBlI,EAAK/5B,aAAa,qBAChDjQ,KAAK82C,MAAM/c,EAAS1wB,KAAM,CAAEnC,SAAQgrC,yBACxC,CACAsH,iCAAiCzf,EAAU7yB,GACvC,OAAOlH,KAAK6yC,6BAA6B9Y,EAAU7yB,IAAWlH,KAAKmhD,kCAAkCpnB,EACzG,CACA2b,wBAAwB3b,EAAUvsB,GAC9B0xC,GAAkCnlB,GAClC/5B,KAAK8yC,QAAQ4C,wBAAwB3b,EAAUvsB,EACnD,CACA6lC,aAAayD,GACJA,EAAM5E,uBACP9T,EAAWv7B,SAASkU,iBAExBmoC,GAAkCpI,EAAM/c,UACnC+c,EAAM5D,QACPlzC,KAAKohD,uCAAuCtK,EAAM/c,SAAU+c,EAAM5vC,OAE1E,CACAysC,eAAemD,GACXxY,EAAez7B,SAASkU,iBACxB/W,KAAKqhD,+BAA+BvK,EAAMR,mBAC9C,CACAzD,6BAA6B9Y,EAAU7yB,GACnC,OAAOlH,KAAKwZ,UAAUq5B,6BAA6B9Y,EAAU7yB,EACjE,CACAgvC,gCAAgCgE,EAAQC,GACpCn6C,KAAKshD,+CAA+CpH,EAAQC,EAChE,CACA5S,eAAelR,EAAMD,GACjB,MAAMlvB,EAAS2yB,EAAUxD,EAAMD,GAC/B,OAAQp2B,KAAKs4C,wBAAwBjiB,EAAMD,IACvC0D,EAAoBR,EAAUpyB,GAASlH,KAAK2mC,SAAS3M,aAC7D,CACAyN,cAAcpR,EAAMD,GAChBp2B,KAAKwZ,UAAUmgC,WAAWtjB,EAAMD,EACpC,CACAwkB,wBACI56C,KAAK+yC,KAAKoD,qBAAuBn2C,KAAK+5B,SACtC/5B,KAAKqhD,gCACT,CACA5I,aACIz4C,KAAK4+B,QAAQqa,kCACjB,CACAyB,iBACI16C,KAAK4+B,QAAQwa,sCACjB,CACA6C,0BAA0B12C,GACtBvF,KAAK2gD,oBAAoBp7C,EAC7B,CACAq5C,wBACI,IAAIxlB,GACyC,QAAtCA,EAAKp5B,KAAKwZ,UAAUkgC,oBAAiC,IAAPtgB,OAAgB,EAASA,EAAG8Z,SAC7ElzC,KAAKuhD,wCAEb,CACAxY,uBAAsB,QAAEr/B,GAAW8D,GAC/B,MAAMhI,EAAQxF,KAAKwhD,8BAA8B93C,EAAS8D,IACpD,iBAAE+yB,EAAkB1D,QAAQ,OAAEgM,IAAcrjC,EAIlD,OAHIxF,KAAK+yC,KAAKxK,UAAYM,IACtB7oC,KAAK+yC,KAAKxK,SAASO,cAAgBD,IAE/BtI,CACZ,CACA0I,qBAAqBwY,EAAWC,GAC5B1hD,KAAK+yC,KAAKoD,qBAAuBn2C,KAAK4+B,QAAQ7E,SAC9C/5B,KAAK2hD,8BACT,CACAzY,0BAA0Bx/B,GACtB1J,KAAK+/C,UAAU7W,0BAA0Bx/B,EAC7C,CACA4/B,gBAAgB5jC,GACZ1F,KAAK8yC,QAAQsE,gBAAgB1xC,EACjC,CACAk8C,YAAYrL,GACRv2C,KAAK6hD,gCAAgCtL,EACzC,CACAuL,cAAcxhB,EAAeiW,GACzBv2C,KAAK+hD,kCAAkCzhB,EAAeiW,EAC1D,CACA0K,yCAAyCjX,EAAMjQ,EAAUxM,GAErD,OADcvtB,KAAKgiD,6CAA6ChY,EAAMjQ,EAAUxM,GAClEgT,gBAClB,CACA4gB,kCAAkCpnB,GAE9B,OADc/5B,KAAKiiD,wCAAwCloB,GAC7CwG,gBAClB,CACAyhB,6CAA6ChY,EAAMjQ,EAAUv0B,GACzD,OAAOm3B,EAAS,cAAe,CAC3B7wB,OAAQk+B,EACRnN,OAAQ,CAAEz4B,IAAK21B,EAAS1wB,KAAMyhC,cAAetlC,GAC7Co3B,YAAY,GAEpB,CACAqlB,wCAAwCloB,GACpC,OAAO4C,EAAS,qBAAsB,CAClCE,OAAQ,CAAEz4B,IAAK21B,EAAS1wB,MACxBuzB,YAAY,GAEpB,CACAwkB,uCAAuCrnB,EAAU7yB,GAC7C,OAAOy1B,EAAS,cAAe,CAAEE,OAAQ,CAAEz4B,IAAK21B,EAAS1wB,KAAMnC,WACnE,CACAq6C,yCACI,OAAO5kB,EAAS,qBACpB,CACA6kB,8BAA8BU,EAAS10C,GACnC,OAAOmvB,EAAS,sBAAuB,CACnCE,OAAQjyB,OAAOiS,OAAO,CAAEqlC,WAAW10C,GACnCovB,YAAY,GAEpB,CACA+kB,+BACI,OAAOhlB,EAAS,eACpB,CACA0kB,+BAA+BhtC,EAAS,CAAC,GACrC,OAAOsoB,EAAS,aAAc,CAC1BE,OAAQ,CAAEz4B,IAAKpE,KAAK+5B,SAAS1wB,KAAMgL,WAE3C,CACAitC,+CAA+CpH,EAAQC,GACnDld,cAAc,IAAIklB,gBAAgB,aAAc,CAC5CjI,OAAQA,EAAOrvC,WACfsvC,OAAQA,EAAOtvC,aAEvB,CACAg3C,gCAAgCtL,GAC5B,OAAO5Z,EAAS,mBAAoB,CAAE7wB,OAAQyqC,GAClD,CACAwL,kCAAkCzhB,EAAeiW,GAC7C,OAAO5Z,EAAS,qBAAsB,CAClCE,OAAQ,CAAEyD,iBACVx0B,OAAQyqC,EACR3Z,YAAY,GAEpB,CACA0b,wBAAwBjiB,EAAMD,GAC1B,GAAqB,OAAjBp2B,KAAKwgD,SACL,OAAO,EAEN,CACD,MAAM4B,GAAyBhsB,GAAYp2B,KAAKu4C,qBAAqBniB,GACrE,MAAqB,SAAjBp2B,KAAKwgD,SACE4B,GAAiE,MAAvC/rB,EAAKc,QAAQ,uBAGvCirB,GAA0BpiD,KAAKu4C,qBAAqBliB,EAEnE,CACJ,CACAkiB,qBAAqB7uC,GACjB,MAAM24C,EAAY34C,EAAQytB,QAAQ,gBAC5BmrB,EAAc54C,EAAQytB,QAAQ,eACpC,OAAIn3B,KAAKugD,OAAS+B,GACVD,GAC+C,SAAxCA,EAAUx4C,aAAa,gBAO9Bw4C,GAC+C,QAAxCA,EAAUx4C,aAAa,aAM1C,CACAq3C,iBAAiBlX,GACb,MAAM9iC,EAAS8iC,EAAKngC,aAAa,qBACjC,OAAOmyB,EAAS90B,GAAUA,EAAS,SACvC,CACIy/B,eACA,OAAO3mC,KAAK+yC,KAAKpM,QACrB,GA6DE4b,GAAQ,IAhDd,MACI7hD,YAAYg2C,GACR12C,KAAK02C,QAAUA,CACnB,CACA4H,QACIt+C,KAAK02C,QAAQkK,YACjB,CACA4B,oBACIxiD,KAAKyiD,gBAAgB,GACzB,CACAC,sBACI1iD,KAAKyiD,gBAAgB,WACzB,CACAE,wBACI3iD,KAAKyiD,gBAAgB,aACzB,CACAA,gBAAgB17C,IAtnFpB,SAAwB0C,EAAMu1B,GAC1B,IAAIt1B,EAAUq1B,EAAet1B,GACxBC,IACDA,EAAU7G,SAASuG,cAAc,QACjCM,EAAQkF,aAAa,OAAQnF,GAC7B5G,SAAS8G,KAAK+sB,YAAYhtB,IAE9BA,EAAQkF,aAAa,UAAWowB,EAEpC,CA8mFQ4jB,CAAe,sBAAuB77C,EAC1C,GA8BoB2vC,KAChBl9B,UAAWqpC,IAAgBnM,GACnC,SAAS31C,KACL21C,GAAQ31C,OACZ,CAOA,SAAS+6C,GAAoB9vC,GACzB0qC,GAAQoF,oBAAoB9vC,EAChC,CACA,SAASgwC,GAAuBhwC,GAC5B0qC,GAAQsF,uBAAuBhwC,EACnC,CAkBA,IAAI82C,GAAqBl4C,OAAOm4C,OAAO,CACnCC,UAAW,KACXxpC,UAAWqpC,GACXnM,QAASA,GACT6L,MAAOA,GACP9F,aAAcA,GACd3L,aAAcA,EACd/D,cAAeA,EACfhsC,MAAOA,GACP2/C,gBAtCJ,SAAyB5N,GACrB4D,GAAQgK,gBAAgB5N,EAC5B,EAqCIgE,MApCJ,SAAe/c,EAAUvsB,GACrBkpC,GAAQI,MAAM/c,EAAUvsB,EAC5B,EAmCIsuC,oBAAqBA,GACrBE,uBAAwBA,GACxB2E,oBA9BJ,SAA6Bp7C,GACzBmxC,GAAQiK,oBAAoBp7C,EAChC,EA6BIq7C,WA5BJ,WACIhhD,QAAQqjD,KAAK,2JACbvM,GAAQkK,YACZ,EA0BIC,oBAzBJ,SAA6BC,GACzBpK,GAAQmK,oBAAoBC,EAChC,EAwBIoC,iBAvBJ,SAA0Bve,GACtB7B,EAAe6B,cAAgBA,CACnC,EAsBIoc,YArBJ,SAAqBC,GACjBtK,GAAQqK,YAAYC,EACxB,EAoBI3B,cAAeA,KAyZnB,SAAS8D,GAAoBn1C,GACzB,GAAU,MAANA,EAAY,CACZ,MAAMtE,EAAU7G,SAASyN,eAAetC,GACxC,GAAItE,aAAmBouB,EACnB,OAAOpuB,CAEf,CACJ,CACA,SAAS05C,GAAgB15C,EAAS25C,GAC9B,GAAI35C,EAAS,CACT,MAAM4uB,EAAM5uB,EAAQG,aAAa,OACjC,GAAW,MAAPyuB,GAA6B,MAAd+qB,GA7zG3B,SAAsB5wC,EAAME,GACxB,OAAO2mB,EAAU7mB,GAAMpJ,MAAQiwB,EAAU3mB,GAAOtJ,IACpD,CA2zGiDi6C,CAAahrB,EAAK+qB,GACvD,MAAM,IAAIzd,MAAM,6BAA6Bl8B,EAAQsE,yDAKzD,GAHItE,EAAQmL,gBAAkBhS,WAC1B6G,EAAU7G,SAASw/B,WAAW34B,GAAS,IAEvCA,aAAmBouB,EAGnB,OAFApuB,EAAQ0uB,oBACR1uB,EAAQ2uB,uBACD3uB,CAEf,CACJ,CAEA,MAAM65C,WAAsBruC,YACxBwtB,2BAA2BoK,SACjBA,EAAW0W,eACrB,CACAjnB,0BACI,UACUv8B,KAAK6oC,QAOf,CALA,MAAOrkC,GACH5E,QAAQ4E,MAAMA,EAClB,CACA,QACIxE,KAAKgG,YACT,CACJ,CACAu2B,eACI,IAAInD,EACJ,OAAsC,QAA7BA,EAAKp5B,KAAK0oC,qBAAkC,IAAPtP,EAAgBA,EAAMp5B,KAAK0oC,cAAgB,WACrF,MAAMljC,EAAQxF,KAAKyjD,kBACfzjD,KAAKi9B,cAAcz3B,WACb03B,UACA13B,EAAMq3B,OAAOgM,OAAO7oC,MAEjC,EANwF,EAO7F,CACAgG,aACI,IACIhG,KAAKqH,QAEI,CAAb,MAAO+xB,GAAM,CACjB,CACAumB,gCACI3/C,KAAK0jD,kBAAkBz3C,SAASsiB,GAAMA,EAAElnB,UAC5C,CACIq8C,wBACA,IAAItqB,EACJ,MAAMuqB,EAAmB3jD,KAAKu/C,eAAeqE,SAASpE,GAAM,IAAIA,EAAErZ,YAAWx+B,QAAQ4mB,KAAQA,EAAEvgB,KACzF61C,EAAiB,KAAsC,QAA/BzqB,EAAKp5B,KAAKy/C,uBAAoC,IAAPrmB,OAAgB,EAASA,EAAG+M,WAAa,IAAKx+B,QAAQ4mB,KAAQA,EAAEvgB,KAAIhG,KAAKumB,GAAMA,EAAEvgB,KACtJ,OAAO21C,EAAiBh8C,QAAQ4mB,GAAMs1B,EAAeC,SAASv1B,EAAEvgB,KACpE,CACIw1C,oBACA,GAAIxjD,KAAKkH,OAAQ,CACb,MAAM68C,EAAiB1E,GAAcr/C,KAAKkH,QAC1C,GAAI68C,EACA,OAAOA,EAEX/jD,KAAKi2B,MAAM,iBACf,CACAj2B,KAAKi2B,MAAM,8BACf,CACIspB,qBACA,OAAIv/C,KAAK8L,OACE9L,KAAKgkD,mBAEPhkD,KAAKikD,QACHjkD,KAAKkkD,2BAGZlkD,KAAKi2B,MAAM,yCAEnB,CACIwpB,sBACA,OAAOz/C,KAAKuiC,gBAAgBvD,QAAQiN,WAAU,EAClD,CACI1J,sBACA,GAA+B,OAA3BviC,KAAK2tC,kBAA4B,CACjC,MAAMhL,EAAW3iC,KAAK6U,cAAczL,cAAc,YAElD,OADApJ,KAAK02B,YAAYiM,GACVA,CACX,CACK,GAAI3iC,KAAK2tC,6BAA6BwW,oBACvC,OAAOnkD,KAAK2tC,kBAEhB3tC,KAAKi2B,MAAM,mDACf,CACI/uB,aACA,OAAOlH,KAAK6J,aAAa,SAC7B,CACIiC,aACA,OAAO9L,KAAK6J,aAAa,SAC7B,CACIo6C,cACA,OAAOjkD,KAAK6J,aAAa,UAC7B,CACAosB,MAAM1wB,GACF,MAAM,IAAIqgC,MAAM,GAAG5lC,KAAKokD,gBAAgB7+C,IAC5C,CACI6+C,kBACA,IAAIhrB,EAAIC,EACR,OAAkG,QAA1FA,GAAiD,QAA1CD,EAAKp5B,KAAK6vC,UAAUjW,MAAM,kBAA+B,IAAPR,EAAgBA,EAAK,IAAI,UAAuB,IAAPC,EAAgBA,EAAK,gBACnI,CACIoqB,wBACA,OAAO,IAAI3mB,YAAY,6BAA8B,CACjDC,SAAS,EACTH,YAAY,EACZC,OAAQ,CAAEwnB,UAAWrkD,KAAM6oC,OAAQ0a,GAAcza,gBAEzD,CACIkb,yBACA,IAAI5qB,EACJ,MAAM1vB,EAAwC,QAA7B0vB,EAAKp5B,KAAK6U,qBAAkC,IAAPukB,OAAgB,EAASA,EAAG9oB,eAAetQ,KAAK8L,QACtG,OAAgB,OAAZpC,EACO,CAACA,GAGD,EAEf,CACIw6C,4BACA,IAAI9qB,EACJ,MAAMrc,EAAyC,QAA7Bqc,EAAKp5B,KAAK6U,qBAAkC,IAAPukB,OAAgB,EAASA,EAAGnqB,iBAAiBjP,KAAKikD,SACzG,OAAwB,IAApBlnC,EAAS3Z,OACF4G,MAAM1E,UAAUnC,MAAM2B,KAAKiY,GAG3B,EAEf,EAGJ,MAAMunC,WAA4BpvC,YAC9BxU,cACIq3B,SAAShsB,WACT/L,KAAKukD,aAAe,IACxB,CACAnsB,oBACIp4B,KAAKukD,aAAevkD,KAAKs4B,IAAIsB,MAAM,aAAe,IAAI/5B,UAAUG,KAAKs4B,KAAO,IAAIksB,YAAYxkD,KAAKs4B,KACjGwjB,GAAoB97C,KAAKukD,aAC7B,CACAlsB,uBACQr4B,KAAKukD,cACLvI,GAAuBh8C,KAAKukD,aAEpC,CACIjsB,UACA,OAAOt4B,KAAK6J,aAAa,QAAU,EACvC,EC7sHJ,IAAItG,GAMG,SAASkhD,GAAYC,GAC1B,OAAOnhD,GAAWmhD,CACpB,CCWe,SAASC,GAAMr4C,GAC1B,OAAKA,GAAsB,iBAARA,EACfA,aAAenM,MAAQmM,aAAes4C,OAAet4C,EACrDtC,MAAMC,QAAQqC,GAAaA,EAAItE,IAAI28C,IAChC/5C,OAAOU,KAAKgB,GAAKkO,QAAO,SAAUC,EAAK3T,GAK1C,OADA2T,EAHY3T,EAAI,GAAG5B,cAAgB4B,EAAI3D,MAAM,GAAGmG,QAAQ,aAAa,SAAUwU,EAAG1H,GAC9E,MAAO,IAAMA,EAAElR,aACnB,KACay/C,GAAKr4C,EAAIxF,IACf2T,CACX,GAAG,CAAC,GATwCnO,CAUhD,CFkrHAwrB,EAAaI,oBA1jBb,MACIx3B,YAAYgJ,GACR1J,KAAK6kD,oBAAuBC,IAAD,EAC3B9kD,KAAK+kD,oBAAsB,KAC3B/kD,KAAKglD,oBAAsB,OAC3BhlD,KAAKilD,WAAY,EACjBjlD,KAAKklD,eAAgB,EACrBllD,KAAKmlD,kBAAoB,IAAIlqC,IAC7Bjb,KAAKkH,OAAS,KACdlH,KAAK+xC,oBAAsB,EAAGroC,cAC1B,MAAM6sC,EAAQ7sC,EAAQE,cAAc,IAAM5J,KAAK0J,QAAQsE,IACnDuoC,GAASv2C,KAAKolD,sBACd7O,EAAMuJ,mBAAmB9/C,KAAKolD,qBAAqBjf,iBAEhDnmC,KAAKolD,oBAAoB,EAEpCplD,KAAK0J,QAAUA,EACf1J,KAAK+yC,KAAO,IAAIrJ,EAAU1pC,KAAMA,KAAK0J,SACrC1J,KAAKqlD,mBAAqB,IAAI7jB,EAAmBxhC,KAAMA,KAAK0J,SAC5D1J,KAAKogD,sBAAwB,IAAIxV,EAAsB5qC,KAAMA,KAAK0J,SAClE1J,KAAK6qC,kBAAoB,IAAIlB,EAAkB3pC,KAAMA,KAAK0J,SAC1D1J,KAAKsyC,sBAAwBtU,IAC7Bh+B,KAAKg4C,mBAAqB,IAAIjR,EAAmB/mC,KAAMA,KAAK0J,QAChE,CACAT,UACSjJ,KAAKilD,YACNjlD,KAAKilD,WAAY,EACbjlD,KAAKslD,cAAgBjuB,EAAkBwB,KACvC74B,KAAKqlD,mBAAmBtkD,QAGxBf,KAAKulD,gBAETvlD,KAAKogD,sBAAsBr/C,QAC3Bf,KAAK6qC,kBAAkB9pC,QACvBf,KAAKg4C,mBAAmBj3C,QAEhC,CACAiF,aACQhG,KAAKilD,YACLjlD,KAAKilD,WAAY,EACjBjlD,KAAKqlD,mBAAmB/jD,OACxBtB,KAAKogD,sBAAsB9+C,OAC3BtB,KAAK6qC,kBAAkBvpC,OACvBtB,KAAKg4C,mBAAmB12C,OAEhC,CACAq3B,kBACQ34B,KAAKslD,cAAgBjuB,EAAkByB,OACvC94B,KAAKulD,eAEb,CACA7sB,mBACQ14B,KAAKwlD,oBAAoB,SAEzBxlD,KAAK0J,QAAQszB,cACbh9B,KAAKi5B,UAAW,IAEhBj5B,KAAKslD,cAAgBjuB,EAAkByB,OAAS94B,KAAKklD,gBACrDllD,KAAKulD,gBAEb,CACA9sB,kBACQz4B,KAAKwlD,oBAAoB,aAE7BxlD,KAAKulD,eACT,CACA/sB,sBACQx4B,KAAKslD,cAAgBjuB,EAAkBwB,KACvC74B,KAAKqlD,mBAAmBtkD,SAGxBf,KAAKqlD,mBAAmB/jD,OACxBtB,KAAKulD,gBAEb,CACAhpB,sBACQv8B,KAAKC,SAAWD,KAAKiE,WAAajE,KAAKi5B,UAAYj5B,KAAKylD,YACxDzlD,KAAK0J,QAAQsuB,OAASh4B,KAAK82C,MAAMxd,EAAUt5B,KAAKylD,YAChDzlD,KAAKqlD,mBAAmB/jD,aAClBtB,KAAK0J,QAAQsuB,OACnBh4B,KAAKklD,eAAgB,EAE7B,CACA3oB,mBAAmB+D,IACXA,EAAchF,YAAegF,EAActF,WAAasF,EAAc/E,UACtEv7B,KAAKylD,UAAYnlB,EAAcvF,SAAS32B,KAE5C,IACI,MAAM2d,QAAaue,EAAcxE,aACjC,GAAI/Z,EAAM,CACN,MAAM,KAAEnJ,GAASwkB,EAAkBrb,GAC7B2jC,QAAwB1lD,KAAK2lD,2BAA2B/sC,GAC9D,GAAI8sC,EAAiB,CACjB,MAAM/e,EAAW,IAAIV,EAASyf,GACxBnd,EAAW,IAAIwE,EAAc/sC,KAAMA,KAAK+yC,KAAKpM,SAAUA,EAAUoG,EAAcjE,eAAe,GAAO,GACvG9oC,KAAK+yC,KAAKrK,qBACJ1oC,KAAK+yC,KAAKrK,cACpB1oC,KAAK8zC,sBACC9zC,KAAK+yC,KAAKlK,OAAON,GACvBvoC,KAAKi5B,UAAW,EAChByd,GAAQoL,cAAcxhB,EAAetgC,KAAK0J,SAC1CgtC,GAAQkL,YAAY5hD,KAAK0J,SACzB1J,KAAK6kD,oBAAoBvkB,EAC7B,MACStgC,KAAK4lD,mCAAmCtlB,KAC7C1gC,QAAQqjD,KAAK,yBAAyBjjD,KAAK0J,QAAQsE,wEACnDhO,KAAK6lD,cAAcvlB,EAAcvF,UAEzC,CAQJ,CANA,MAAOv2B,GACH5E,QAAQ4E,MAAMA,GACdxE,KAAK+yC,KAAK3J,YACd,CACA,QACIppC,KAAK6kD,oBAAsB,MAC/B,CACJ,CACAhjB,0BAA0B4B,GACtBzjC,KAAKulD,eACT,CACAxa,6BAA6Bf,GACzB,OAAOA,EAAK7S,QAAQ,gBAAkBn3B,KAAK0J,SAAW1J,KAAK8lD,0BAA0B9b,EACzF,CACAmB,4BAA4BnB,EAAM+b,EAAW1vB,GACzC,MAAMkgB,EAAQv2C,KAAKm4C,iBAAiBnO,GAChCuM,GACAlgB,EAAKznB,aAAa,mBAAoB2nC,EAAMvoC,GACpD,CACAo8B,yBAAyB1gC,EAASqwB,EAAUv0B,GACxC,OAAOxF,KAAK8lD,0BAA0Bp8C,IAAY1J,KAAKk4C,4BAA4BxuC,EAASqwB,EAAUv0B,EAC1G,CACA6kC,uBAAuB3gC,EAASqwB,GAC5B/5B,KAAKgmD,cAAct8C,EAASqwB,EAAS1wB,KACzC,CACAk+B,eAAe79B,EAAS0sB,GACpB,OAAO1sB,EAAQytB,QAAQ,gBAAkBn3B,KAAK0J,SAAW1J,KAAK8lD,0BAA0Bp8C,EAAS0sB,EACrG,CACAqR,cAAc/9B,EAAS0sB,GACfp2B,KAAKslC,gBACLtlC,KAAKslC,eAAehkC,OAExBtB,KAAKslC,eAAiB,IAAIxC,EAAe9iC,KAAM0J,EAAS0sB,GACxD,MAAM,aAAEoN,GAAiBxjC,KAAKslC,eAC9BtlC,KAAK8/B,yBAAyB0D,EAAazH,QAASyH,GACpDxjC,KAAKslC,eAAevkC,OACxB,CACA++B,yBAAyB/D,EAASwF,GAC9B,IAAInI,EACJ2C,EAAQ,eAAiB/7B,KAAKgO,IACe,QAAxCorB,EAAKp5B,KAAKimD,gCAA6C,IAAP7sB,OAAgB,EAASA,EAAGnpB,aAAa,uBAC1FsxB,EAAQJ,mBAAmBe,EAAc1G,YAEjD,CACAwE,eAAeoF,GACXhH,EAAWp+B,KAAK0J,QACpB,CACA82B,iCAAiC4E,EAAUwQ,GACvC51C,KAAKglD,qBACT,CACAzoB,mCAAmCgF,EAASxG,SAClC/6B,KAAK60C,aAAa9Z,GACxB/6B,KAAKglD,qBACT,CACAzoB,gCAAgCgF,EAASxG,GACrCn7B,QAAQ4E,MAAMu2B,SACR/6B,KAAK60C,aAAa9Z,GACxB/6B,KAAKglD,qBACT,CACA5kB,eAAemB,EAAS/8B,GACpB5E,QAAQ4E,MAAMA,GACdxE,KAAKglD,qBACT,CACA3kB,gBAAgB+E,GACZ9G,EAAet+B,KAAK0J,QACxB,CACA67B,uBAAsB,YAAExC,IACpB3E,EAAW2E,EAAa/iC,KAAKm4C,iBAAiBpV,GAClD,CACAgD,oCAAoCT,EAAgBvK,GAChD,MAAMwb,EAAQv2C,KAAKm4C,iBAAiB7S,EAAevC,YAAauC,EAAelP,WAC/Ep2B,KAAKkmD,kCAAkC3P,EAAOjR,EAAevC,YAAauC,EAAelP,WACzFmgB,EAAMte,SAAS4c,aAAa9Z,EAChC,CACA0K,iCAAiCH,EAAgBhF,GAC7CtgC,KAAK0J,QAAQuuB,SAAS4c,aAAavU,EACvC,CACAuF,sBAAsBP,EAAgB9gC,GAClC5E,QAAQ4E,MAAMA,EAClB,CACAwhC,wBAAuB,YAAEjD,IACrBzE,EAAeyE,EAAa/iC,KAAKm4C,iBAAiBpV,GACtD,CACAgG,uBAAwBr/B,QAASy8C,GAAY34C,GACzC,MAAMhI,EAAQm3B,EAAS,4BAA6B,CAChD7wB,OAAQ9L,KAAK0J,QACbmzB,OAAQjyB,OAAOiS,OAAO,CAAEspC,YAAY34C,GACpCovB,YAAY,KAEV,iBAAE2D,EAAkB1D,QAAQ,OAAEgM,IAAcrjC,EAIlD,OAHIxF,KAAK+yC,KAAKxK,UAAYM,IACtB7oC,KAAK+yC,KAAKxK,SAASO,cAAgBD,IAE/BtI,CACZ,CACA0I,qBAAqBwY,EAAWC,GAAc,CAC9CxY,0BAA0Bx/B,GACtBgtC,GAAQxN,0BAA0Bx/B,EACtC,CACA4/B,kBAAoB,CACpBoE,gBAAgBb,EAAgBuZ,GAC5BpmD,KAAKolD,qBAAuBvY,EAAeZ,WAAU,EACzD,CACA1P,YAAYn4B,GACR,IAAIg1B,EACJ,MAAMmI,EAAU,IAAItC,EAAaj/B,KAAMs3B,EAAY5b,IAAKtX,EAAK,IAAI+6B,gBAAmBn/B,KAAK0J,SAGzF,OAFoC,QAAnC0vB,EAAKp5B,KAAK+kD,2BAAwC,IAAP3rB,GAAyBA,EAAGuG,SACxE3/B,KAAK+kD,oBAAsBxjB,EACpB,IAAI5iB,SAASC,IAChB5e,KAAKglD,oBAAsB,KACvBhlD,KAAKglD,oBAAsB,OAC3BhlD,KAAK+kD,oBAAsB,KAC3BnmC,GAAS,EAEb2iB,EAAQt6B,SAAS,GAEzB,CACA++C,cAAct8C,EAAStF,EAAKgyB,GACxB,MAAMmgB,EAAQv2C,KAAKm4C,iBAAiBzuC,EAAS0sB,GAC7Cp2B,KAAKkmD,kCAAkC3P,EAAO7sC,EAAS0sB,GACvDp2B,KAAKqmD,6BAA6B38C,GAAS,KACvC6sC,EAAMje,IAAMl0B,CAAG,GAEvB,CACA8hD,kCAAkC3P,EAAO7sC,EAAS0sB,GAG9C,GAFAp2B,KAAKkH,OAp8Fb,YAA2B6V,GACvB,MAAM7V,EAAS2C,EAAa,uBAAwBkT,GACpD,OAAOif,EAAS90B,GAAUA,EAAS,IACvC,CAi8FsBo/C,CAAelwB,EAAW1sB,EAAS6sC,GACjDv2C,KAAKu2C,MAAQA,EACTva,EAASh8B,KAAKkH,QAAS,CACvB,MAAM,oBAAE6qC,GAAwBwE,EAAMte,SACtCse,EAAMte,SAAS4sB,oBAAuBvkB,IAClC,GAAIiW,EAAMje,IAAK,CACX,MAAM,WAAE8C,EAAU,WAAEE,GAAegF,EAG7B9yB,EAAU,CACZutB,SAFa,CAAEK,aAAYE,aAAYQ,aADtBya,EAAM1hC,cAAckC,gBAAgB84B,WAIrDkC,sBACAzF,YAAY,EACZ0F,eAAe,EACfM,sBAAuBtyC,KAAKsyC,uBAE5BtyC,KAAKkH,SACLsG,EAAQtG,OAASlH,KAAKkH,QAC1BwvC,GAAQI,MAAMP,EAAMje,IAAK9qB,EAC7B,EAER,CACJ,CACAsmC,gBACI,GAAI9zC,KAAKkH,QAAUlH,KAAKu2C,MAAO,CAC3B,MAAMrX,EAASP,EAA0B3+B,KAAKkH,QAC9CwvC,GAAQ9X,QAAQzgB,OAAO+gB,EAAQ5F,EAAUt5B,KAAKu2C,MAAMje,KAAO,IAAKt4B,KAAKsyC,sBACzE,CACJ,CACAsT,mCAAmCtlB,GAC/BtgC,KAAK0J,QAAQkF,aAAa,WAAY,IACtC,MAAMmsB,EAAWuF,EAAcvF,SAc/B,OALc4B,EAAS,sBAAuB,CAC1C7wB,OAAQ9L,KAAK0J,QACbmzB,OAAQ,CAAE9B,WAAU+b,MAVVva,MAAOn4B,EAAKoJ,EAAU,CAAC,KAC7BpJ,aAAemiD,SACfvmD,KAAK6lD,cAAczhD,GAGnBsyC,GAAQI,MAAM1yC,EAAKoJ,EACvB,GAKAovB,YAAY,IAEF2D,gBAClB,CACAhE,oBAAoBxB,GAChB,MAAMyrB,EAAU,IAAI1rB,EAAcC,GAC5Be,QAAqB0qB,EAAQ1qB,cAC7B,SAAE/B,EAAQ,WAAEuB,EAAU,WAAEF,GAAeorB,EAC7C,OAAO9P,GAAQI,MAAM/c,EAAU,CAAEgB,SAAU,CAAEO,aAAYF,aAAYU,iBACzE,CACAqc,iBAAiBzuC,EAAS0sB,GACtB,IAAIgD,EAEJ,OAA0C,QAAlCA,EAAK+pB,GADFt5C,EAAa,mBAAoBusB,EAAW1sB,IAAY1J,KAAK0J,QAAQG,aAAa,kBACpC,IAAPuvB,EAAgBA,EAAKp5B,KAAK0J,OAChF,CACA6yB,iCAAiC8lB,GAC7B,IAAI34C,EACJ,MAAMsE,EAAKy4C,IAAIC,OAAO1mD,KAAKgO,IAC3B,IAEI,GADAtE,EAAU05C,GAAgBf,EAAUz4C,cAAc,eAAeoE,KAAOhO,KAAKylD,WACzE/7C,EACA,OAAOA,EAGX,GADAA,EAAU05C,GAAgBf,EAAUz4C,cAAc,6BAA6BoE,MAAQhO,KAAKylD,WACxF/7C,EAEA,aADMA,EAAQsuB,aACDh4B,KAAK2lD,2BAA2Bj8C,EAMrD,CAHA,MAAOlF,GAEH,OADA5E,QAAQ4E,MAAMA,GACP,IAAIszB,CACf,CACA,OAAO,IACX,CACA6uB,sBAAsBtwB,EAAMD,GAExB,OAAO0D,EAAoBR,EADZO,EAAUxD,EAAMD,IACep2B,KAAKg6B,aACvD,CACA8rB,0BAA0Bp8C,EAAS0sB,GAC/B,MAAMpoB,EAAKnE,EAAa,mBAAoBusB,EAAW1sB,IAAY1J,KAAK0J,QAAQG,aAAa,UAC7F,GAAIH,aAAmBktB,kBAAoB52B,KAAK2mD,sBAAsBj9C,EAAS0sB,GAC3E,OAAO,EAEX,IAAKp2B,KAAKC,SAAiB,QAAN+N,EACjB,OAAO,EAEX,GAAIA,EAAI,CACJ,MAAMo/B,EAAe+V,GAAoBn1C,GACzC,GAAIo/B,EACA,OAAQA,EAAarU,QAE7B,CACA,SAAK2d,GAAQ6B,qBAAqB7uC,IAG9B0sB,IAAcsgB,GAAQ6B,qBAAqBniB,GAInD,CACIpoB,SACA,OAAOhO,KAAK0J,QAAQsE,EACxB,CACI/N,cACA,OAAQD,KAAK0J,QAAQqvB,QACzB,CACI0sB,gBACA,GAAIzlD,KAAK0J,QAAQ4uB,IACb,OAAOt4B,KAAK0J,QAAQ4uB,GAE5B,CACImtB,cAAUA,GACVzlD,KAAK4mD,2BAA2B,OAAO,KACnC5mD,KAAK0J,QAAQ4uB,IAAMmtB,QAA6CA,EAAY,IAAI,GAExF,CACIH,mBACA,OAAOtlD,KAAK0J,QAAQkvB,OACxB,CACIM,gBACA,YAA+BrwB,IAAxB7I,KAAKslC,qBAA+Dz8B,IAA/B7I,KAAKglD,qBACrD,CACI/rB,eACA,OAAOj5B,KAAK0J,QAAQuG,aAAa,WACrC,CACIgpB,aAASlyB,GACT/G,KAAK4mD,2BAA2B,YAAY,KACpC7/C,EACA/G,KAAK0J,QAAQkF,aAAa,WAAY,IAGtC5O,KAAK0J,QAAQic,gBAAgB,WACjC,GAER,CACI1hB,eACA,OAAOjE,KAAK0J,QAAQzF,UAAYjE,KAAKilD,SACzC,CACIjrB,mBACA,IAAIZ,EACJ,MAAMif,EAAOr4C,KAAK0J,QAAQmL,cAAcjL,cAAc,2BAEtD,OAAO0vB,EAD0E,QAAnEF,EAAKif,aAAmC,EAASA,EAAKrZ,eAA4B,IAAP5F,EAAgBA,EAAK,IAElH,CACA8e,4BAA4BpsC,GAAUzC,KAAMjF,GAAO0mC,GAM/C,OALcnO,EAAS,cAAe,CAClC7wB,SACA+wB,OAAQ,CAAEz4B,MAAK0mC,iBACflO,YAAY,IAEF2D,gBAClB,CACAilB,oBAAoBrnB,GAChB,OAAOn+B,KAAKmlD,kBAAkB3pC,IAAI2iB,EACtC,CACAyoB,2BAA2BzoB,EAAekN,GACtCrrC,KAAKmlD,kBAAkB58C,IAAI41B,GAC3BkN,IACArrC,KAAKmlD,kBAAkBphB,OAAO5F,EAClC,CACAkoB,6BAA6B38C,EAAS2hC,GAClCrrC,KAAKimD,yBAA2Bv8C,EAChC2hC,WACOrrC,KAAKimD,wBAChB,QAuKsCp9C,IAAtC+sB,eAAela,IAAI,gBACnBka,eAAeixB,OAAO,cAAe/uB,QAEEjvB,IAAvC+sB,eAAela,IAAI,iBACnBka,eAAeixB,OAAO,eAAgBtD,SAEQ16C,IAA9C+sB,eAAela,IAAI,wBACnBka,eAAeixB,OAAO,sBAAuBvC,IAGjD,MACI,IAAI56C,EAAU7G,SAASikD,cACvB,GAAKp9C,IAEDA,EAAQuG,aAAa,+BAGzB,IADAvG,EAAUA,EAAQutB,cACXvtB,GAAS,CACZ,GAAIA,GAAW7G,SAAS+V,KACpB,OAAOhZ,QAAQqjD,KAAK1lB,CAAS;;;;;;;;;QAShC7zB,EAAQmmC,WAETnmC,EAAUA,EAAQutB,aACtB,CACH,EAtBD,GAwBAxnB,OAAOqzC,MAAQA,GACf/hD,KGhvHA,MAAMgmD,WAAsC7xC,YAC1CqnB,0BACEuf,GAAoB97C,MACpBA,KAAKwH,mBFQF+0B,eAA2Bj0B,EAAS3B,GACzC,MAAM,cAAElD,SAdH84B,iBACL,OAAOh5B,IAAYkhD,GAOdloB,iBACL,MAAM,eAAEhzB,SAAyB,sCACjC,OAAOA,GACT,CAViCA,GAAiBsV,KAAK4lC,IACvD,CAYkCuC,GAChC,OAAOvjD,EAAc2E,OAAOE,EAAS3B,EACvC,CEX8BsgD,CAAYjnD,KAAKsI,QAAS,CAAE4+C,SAAUlnD,KAAKmnD,qBAAqBtmD,KAAKb,OACjG,CAEAq4B,uBACE2jB,GAAuBh8C,MACnBA,KAAKwH,cAAcxH,KAAKwH,aAAaJ,aAC3C,CAEA+/C,qBAAqBtjD,GACnB,MAAM2B,EAAQ,IAAI4hD,aAAa,UAAW,CAAEvjD,SAC5C,OAAO7D,KAAKi9B,cAAcz3B,EAC5B,CAEI8C,cAGF,MAAO,CAAEA,QAFOtI,KAAK6J,aAAa,WAEhBw9C,mBADSrnD,KAAK6J,aAAa,yBACJ,GAAS,IAAK7J,KAAKsnD,UAC9D,EAGF1xB,eAAeixB,OAAO,4BAA6BE,ICjBnD3lD,iBAAiB,8BCVV,SAAqCoE,GAC1C,GAAIA,EAAMsG,kBAAkB8qB,gBAAiB,CAC3C,MAAQ9qB,OAAQuqB,EAAMwG,QAAQ,aAAEgD,IAAmBr6B,EAEnD6wB,EAAKj1B,iBAAiB,sBAAsB,EAAGy7B,QAAUyI,gBAAkBlP,kBACzE,MAAM8I,EAAU9I,GAAaA,EAAUmxB,YAAgB1nB,EAAajnB,MAAQinB,EAAajnB,KAAK8C,IAAI,YAAe2a,EAAKxsB,aAAa,UAE9H,OAAOX,KAAKg2B,KACX,QAAQh2B,KAAKg2B,GACfW,EAAajnB,KAAKmrB,OAAO,WAEzBlE,EAAajnB,KAAK+C,IAAI,UAAWujB,GAGnCW,EAAaX,OAAS,OACxB,GACC,CAAER,MAAM,GACb,CACF,ICdA,MAAM8oB,GACF9mD,YAAYsmC,EAAa7hC,EAAWsiD,GAChCznD,KAAKgnC,YAAcA,EACnBhnC,KAAKmF,UAAYA,EACjBnF,KAAKynD,aAAeA,EACpBznD,KAAK0nD,kBAAoB,IAAIzsC,GACjC,CACAhS,UACIjJ,KAAKgnC,YAAY5lC,iBAAiBpB,KAAKmF,UAAWnF,KAAMA,KAAKynD,aACjE,CACAzhD,aACIhG,KAAKgnC,YAAYxlC,oBAAoBxB,KAAKmF,UAAWnF,KAAMA,KAAKynD,aACpE,CACAE,iBAAiBC,GACb5nD,KAAK0nD,kBAAkBn/C,IAAIq/C,EAC/B,CACAC,oBAAoBD,GAChB5nD,KAAK0nD,kBAAkB3jB,OAAO6jB,EAClC,CACAE,YAAYtiD,GACR,MAAMuiD,EAiBd,SAAqBviD,GACjB,GAAI,gCAAiCA,EACjC,OAAOA,EAEN,CACD,MAAM,yBAAEwiD,GAA6BxiD,EACrC,OAAOoF,OAAOiS,OAAOrX,EAAO,CACxByiD,6BAA6B,EAC7BD,2BACIhoD,KAAKioD,6BAA8B,EACnCD,EAAyBljD,KAAK9E,KAClC,GAER,CACJ,CA/B8BkoD,CAAY1iD,GAClC,IAAK,MAAMoiD,KAAW5nD,KAAKmoD,SAAU,CACjC,GAAIJ,EAAcE,4BACd,MAGAL,EAAQE,YAAYC,EAE5B,CACJ,CACII,eACA,OAAOn+C,MAAMO,KAAKvK,KAAK0nD,mBAAmBvsC,MAAK,CAAC1I,EAAME,KAClD,MAAMy1C,EAAY31C,EAAK+L,MAAO6pC,EAAa11C,EAAM6L,MACjD,OAAO4pC,EAAYC,GAAc,EAAID,EAAYC,EAAa,EAAI,CAAC,GAE3E,EAkBJ,MAAMC,GACF5nD,YAAY6nD,GACRvoD,KAAKuoD,YAAcA,EACnBvoD,KAAKwoD,kBAAoB,IAAIztC,IAC7B/a,KAAKyhC,SAAU,CACnB,CACA1gC,QACSf,KAAKyhC,UACNzhC,KAAKyhC,SAAU,EACfzhC,KAAKyoD,eAAex8C,SAAQy8C,GAAiBA,EAAcz/C,YAEnE,CACA3H,OACQtB,KAAKyhC,UACLzhC,KAAKyhC,SAAU,EACfzhC,KAAKyoD,eAAex8C,SAAQy8C,GAAiBA,EAAc1iD,eAEnE,CACIyiD,qBACA,OAAOz+C,MAAMO,KAAKvK,KAAKwoD,kBAAkB/qB,UACpCjjB,QAAO,CAACmuC,EAAW3gD,IAAQ2gD,EAAUl0C,OAAOzK,MAAMO,KAAKvC,EAAIy1B,YAAY,GAChF,CACAkqB,iBAAiBC,GACb5nD,KAAK4oD,6BAA6BhB,GAASD,iBAAiBC,EAChE,CACAC,oBAAoBD,GAChB5nD,KAAK4oD,6BAA6BhB,GAASC,oBAAoBD,EACnE,CACAiB,YAAYrkD,EAAOe,EAASs3B,EAAS,CAAC,GAClC78B,KAAKuoD,YAAYM,YAAYrkD,EAAO,SAASe,IAAWs3B,EAC5D,CACA+rB,6BAA6BhB,GACzB,MAAM,YAAE5gB,EAAW,UAAE7hC,EAAS,aAAEsiD,GAAiBG,EACjD,OAAO5nD,KAAK8oD,mBAAmB9hB,EAAa7hC,EAAWsiD,EAC3D,CACAqB,mBAAmB9hB,EAAa7hC,EAAWsiD,GACvC,MAAMsB,EAAmB/oD,KAAKgpD,oCAAoChiB,GAC5DiiB,EAAWjpD,KAAKipD,SAAS9jD,EAAWsiD,GAC1C,IAAIiB,EAAgBK,EAAiBrtC,IAAIutC,GAKzC,OAJKP,IACDA,EAAgB1oD,KAAKkpD,oBAAoBliB,EAAa7hC,EAAWsiD,GACjEsB,EAAiBptC,IAAIstC,EAAUP,IAE5BA,CACX,CACAQ,oBAAoBliB,EAAa7hC,EAAWsiD,GACxC,MAAMiB,EAAgB,IAAIlB,GAAcxgB,EAAa7hC,EAAWsiD,GAIhE,OAHIznD,KAAKyhC,SACLinB,EAAcz/C,UAEXy/C,CACX,CACAM,oCAAoChiB,GAChC,IAAI+hB,EAAmB/oD,KAAKwoD,kBAAkB9sC,IAAIsrB,GAKlD,OAJK+hB,IACDA,EAAmB,IAAIhuC,IACvB/a,KAAKwoD,kBAAkB7sC,IAAIqrB,EAAa+hB,IAErCA,CACX,CACAE,SAAS9jD,EAAWsiD,GAChB,MAAM0B,EAAQ,CAAChkD,GAIf,OAHAyF,OAAOU,KAAKm8C,GAActsC,OAAOlP,SAAQnF,IACrCqiD,EAAMjpD,KAAK,GAAGunD,EAAa3gD,GAAO,GAAK,MAAMA,IAAM,IAEhDqiD,EAAMprB,KAAK,IACtB,EAGJ,MAAMqrB,GAAoB,4DAgC1B,SAASC,GAAStiD,GACd,OAAOA,EAAMuC,QAAQ,uBAAuB,CAAC20B,EAAGqrB,IAASA,EAAK3oB,eAClE,CACA,SAAS4oB,GAAWxiD,GAChB,OAAOA,EAAMyiD,OAAO,GAAG7oB,cAAgB55B,EAAM5D,MAAM,EACvD,CACA,SAASsmD,GAAU1iD,GACf,OAAOA,EAAMuC,QAAQ,YAAY,CAAC20B,EAAGqrB,IAAS,IAAIA,EAAKpkD,iBAC3D,CAsCA,MAAMwkD,GAAoB,CACtB,EAAKlK,GAAK,QACV,OAAUA,GAAK,QACf,KAAQA,GAAK,SACb,QAAWA,GAAK,SAChB,MAASA,GAA+B,UAA1BA,EAAE31C,aAAa,QAAsB,QAAU,QAC7D,OAAU21C,GAAK,SACf,SAAYA,GAAK,SAQrB,SAASh7C,GAAMe,GACX,MAAM,IAAIqgC,MAAMrgC,EACpB,CACA,SAASokD,GAAS5iD,GACd,IACI,OAAOhD,KAAK8B,MAAMkB,EAItB,CAFA,MAAO6iD,GACH,OAAO7iD,CACX,CACJ,CAEA,MAAM8iD,GACFnpD,YAAYu2C,EAAS/vC,GACjBlH,KAAKi3C,QAAUA,EACfj3C,KAAKkH,OAASA,CAClB,CACIsX,YACA,OAAOxe,KAAKkH,OAAOsX,KACvB,CACIwoB,kBACA,OAAOhnC,KAAKkH,OAAO8/B,WACvB,CACIygB,mBACA,OAAOznD,KAAKkH,OAAOugD,YACvB,CACIhiD,iBACA,OAAOzF,KAAKi3C,QAAQxxC,UACxB,CACAqiD,YAAYtiD,GACJxF,KAAK8pD,qBAAqBtkD,IAAUxF,KAAK+pD,uBAAuBvkD,KAChExF,KAAKgqD,uBAAuBxkD,GAC5BxF,KAAKiqD,sBAAsBzkD,GAC3BxF,KAAKkqD,gBAAgB1kD,GAE7B,CACIL,gBACA,OAAOnF,KAAKkH,OAAO/B,SACvB,CACI+5B,aACA,MAAMA,EAASl/B,KAAKmqD,WAAWnqD,KAAKoqD,YACpC,GAAqB,mBAAVlrB,EACP,OAAOA,EAEX,MAAM,IAAI0G,MAAM,WAAW5lC,KAAKkH,wCAAwClH,KAAKoqD,cACjF,CACAJ,uBAAuBxkD,GACfxF,KAAKynD,aAAanmD,MAClBkE,EAAM6kD,iBAEd,CACAJ,sBAAsBzkD,GACdxF,KAAKynD,aAAa6C,SAClB9kD,EAAMgiC,gBAEd,CACA0iB,gBAAgB1kD,GACZ,MAAM,OAAEsG,EAAM,cAAEy+C,GAAkB/kD,EAClC,IACI,MAAM,OAAEkB,GAAW1G,KAAKkH,OAClBsjD,EAAc5/C,OAAOiS,OAAOrX,EAAO,CAAEkB,WAC3C1G,KAAKk/B,OAAOp6B,KAAK9E,KAAKmqD,WAAYK,GAClCxqD,KAAKi3C,QAAQwT,iBAAiBzqD,KAAKoqD,WAAY,CAAE5kD,QAAOsG,SAAQy+C,gBAAerjD,OAAQlH,KAAKoqD,YAMhG,CAJA,MAAO5lD,GACH,MAAM,WAAEiB,EAAU,WAAE0kD,EAAU,QAAEzgD,EAAO,MAAE8U,GAAUxe,KAC7C68B,EAAS,CAAEp3B,aAAY0kD,aAAYzgD,UAAS8U,QAAOhZ,SACzDxF,KAAKi3C,QAAQ4R,YAAYrkD,EAAO,oBAAoBxE,KAAKkH,UAAW21B,EACxE,CACJ,CACAktB,uBAAuBvkD,GACnB,OAAsC,IAAlCxF,KAAKkH,OAAOugD,aAAa9nD,MAClBK,KAAKkH,OAAOwC,UAAYlE,EAAMsG,MAK7C,CACAg+C,qBAAqBtkD,GACjB,MAAMwhC,EAAcxhC,EAAMsG,OAC1B,OAAI9L,KAAK0J,UAAYs9B,IAGZA,aAAuBhyB,SAAWhV,KAAK0J,QAAQwG,SAAS82B,GACtDhnC,KAAK0qD,MAAMC,gBAAgB3jB,GAG3BhnC,KAAK0qD,MAAMC,gBAAgB3qD,KAAKkH,OAAOwC,SAEtD,CACIygD,iBACA,OAAOnqD,KAAKi3C,QAAQkT,UACxB,CACIC,iBACA,OAAOpqD,KAAKkH,OAAOkjD,UACvB,CACI1gD,cACA,OAAO1J,KAAK0qD,MAAMhhD,OACtB,CACIghD,YACA,OAAO1qD,KAAKi3C,QAAQyT,KACxB,EAGJ,MAAME,GACFlqD,YAAYgJ,EAASuuB,GACjBj4B,KAAK6qD,qBAAuB,CAAE7tC,YAAY,EAAM8tC,WAAW,EAAMC,SAAS,GAC1E/qD,KAAK0J,QAAUA,EACf1J,KAAKyhC,SAAU,EACfzhC,KAAKi4B,SAAWA,EAChBj4B,KAAK+c,SAAW,IAAI9B,IACpBjb,KAAKgrD,iBAAmB,IAAIC,kBAAkBC,GAAclrD,KAAKmrD,iBAAiBD,IACtF,CACAnqD,QACSf,KAAKyhC,UACNzhC,KAAKyhC,SAAU,EACfzhC,KAAKgrD,iBAAiBhpB,QAAQhiC,KAAK0J,QAAS1J,KAAK6qD,sBACjD7qD,KAAKmvC,UAEb,CACA98B,MAAMg5B,GACErrC,KAAKyhC,UACLzhC,KAAKgrD,iBAAiBhlD,aACtBhG,KAAKyhC,SAAU,GAEnB4J,IACKrrC,KAAKyhC,UACNzhC,KAAKgrD,iBAAiBhpB,QAAQhiC,KAAK0J,QAAS1J,KAAK6qD,sBACjD7qD,KAAKyhC,SAAU,EAEvB,CACAngC,OACQtB,KAAKyhC,UACLzhC,KAAKgrD,iBAAiBI,cACtBprD,KAAKgrD,iBAAiBhlD,aACtBhG,KAAKyhC,SAAU,EAEvB,CACA0N,UACI,GAAInvC,KAAKyhC,QAAS,CACd,MAAM7M,EAAU,IAAI3Z,IAAIjb,KAAKqrD,uBAC7B,IAAK,MAAM3hD,KAAWM,MAAMO,KAAKvK,KAAK+c,UAC7B6X,EAAQpZ,IAAI9R,IACb1J,KAAKsrD,cAAc5hD,GAG3B,IAAK,MAAMA,KAAWM,MAAMO,KAAKqqB,GAC7B50B,KAAKurD,WAAW7hD,EAExB,CACJ,CACAyhD,iBAAiBD,GACb,GAAIlrD,KAAKyhC,QACL,IAAK,MAAM+pB,KAAYN,EACnBlrD,KAAKyrD,gBAAgBD,EAGjC,CACAC,gBAAgBD,GACS,cAAjBA,EAAS5lD,KACT5F,KAAK0rD,uBAAuBF,EAAS1/C,OAAQ0/C,EAASrtB,eAEhC,aAAjBqtB,EAAS5lD,OACd5F,KAAK2rD,oBAAoBH,EAASI,cAClC5rD,KAAK6rD,kBAAkBL,EAASM,YAExC,CACAJ,uBAAuB92C,EAAMupB,GACzB,MAAMz0B,EAAUkL,EACZ5U,KAAK+c,SAASvB,IAAI9R,GACd1J,KAAKi4B,SAAS8zB,yBAA2B/rD,KAAKgsD,aAAatiD,GAC3D1J,KAAKi4B,SAAS8zB,wBAAwBriD,EAASy0B,GAG/Cn+B,KAAKsrD,cAAc5hD,GAGlB1J,KAAKgsD,aAAatiD,IACvB1J,KAAKurD,WAAW7hD,EAExB,CACAiiD,oBAAoBM,GAChB,IAAK,MAAMr3C,KAAQ5K,MAAMO,KAAK0hD,GAAQ,CAClC,MAAMviD,EAAU1J,KAAKksD,gBAAgBt3C,GACjClL,GACA1J,KAAKmsD,YAAYziD,EAAS1J,KAAKsrD,cAEvC,CACJ,CACAO,kBAAkBI,GACd,IAAK,MAAMr3C,KAAQ5K,MAAMO,KAAK0hD,GAAQ,CAClC,MAAMviD,EAAU1J,KAAKksD,gBAAgBt3C,GACjClL,GAAW1J,KAAKosD,gBAAgB1iD,IAChC1J,KAAKmsD,YAAYziD,EAAS1J,KAAKurD,WAEvC,CACJ,CACAS,aAAatiD,GACT,OAAO1J,KAAKi4B,SAAS+zB,aAAatiD,EACtC,CACA2hD,oBAAoBgB,EAAOrsD,KAAK0J,SAC5B,OAAO1J,KAAKi4B,SAASozB,oBAAoBgB,EAC7C,CACAF,YAAYE,EAAMC,GACd,IAAK,MAAM5iD,KAAW1J,KAAKqrD,oBAAoBgB,GAC3CC,EAAUxnD,KAAK9E,KAAM0J,EAE7B,CACAwiD,gBAAgBt3C,GACZ,GAAIA,EAAK23C,UAAYv1B,KAAKw1B,aACtB,OAAO53C,CAEf,CACAw3C,gBAAgB1iD,GACZ,OAAIA,EAAQszB,aAAeh9B,KAAK0J,QAAQszB,aAI7Bh9B,KAAK0J,QAAQwG,SAASxG,EAErC,CACA6hD,WAAW7hD,GACF1J,KAAK+c,SAASvB,IAAI9R,IACf1J,KAAKosD,gBAAgB1iD,KACrB1J,KAAK+c,SAASxU,IAAImB,GACd1J,KAAKi4B,SAASw0B,gBACdzsD,KAAKi4B,SAASw0B,eAAe/iD,GAI7C,CACA4hD,cAAc5hD,GACN1J,KAAK+c,SAASvB,IAAI9R,KAClB1J,KAAK+c,SAASgnB,OAAOr6B,GACjB1J,KAAKi4B,SAASy0B,kBACd1sD,KAAKi4B,SAASy0B,iBAAiBhjD,GAG3C,EAGJ,MAAMijD,GACFjsD,YAAYgJ,EAASy0B,EAAelG,GAChCj4B,KAAKm+B,cAAgBA,EACrBn+B,KAAKi4B,SAAWA,EAChBj4B,KAAK4sD,gBAAkB,IAAIhC,GAAgBlhD,EAAS1J,KACxD,CACI0J,cACA,OAAO1J,KAAK4sD,gBAAgBljD,OAChC,CACIs1C,eACA,MAAO,IAAIh/C,KAAKm+B,gBACpB,CACAp9B,QACIf,KAAK4sD,gBAAgB7rD,OACzB,CACAsR,MAAMg5B,GACFrrC,KAAK4sD,gBAAgBv6C,MAAMg5B,EAC/B,CACA/pC,OACItB,KAAK4sD,gBAAgBtrD,MACzB,CACA6tC,UACInvC,KAAK4sD,gBAAgBzd,SACzB,CACI1N,cACA,OAAOzhC,KAAK4sD,gBAAgBnrB,OAChC,CACAuqB,aAAatiD,GACT,OAAOA,EAAQuG,aAAajQ,KAAKm+B,cACrC,CACAktB,oBAAoBgB,GAChB,MAAMzyB,EAAQ55B,KAAKgsD,aAAaK,GAAQ,CAACA,GAAQ,GAC3Cz3B,EAAU5qB,MAAMO,KAAK8hD,EAAKp9C,iBAAiBjP,KAAKg/C,WACtD,OAAOplB,EAAMnlB,OAAOmgB,EACxB,CACA63B,eAAe/iD,GACP1J,KAAKi4B,SAAS40B,yBACd7sD,KAAKi4B,SAAS40B,wBAAwBnjD,EAAS1J,KAAKm+B,cAE5D,CACAuuB,iBAAiBhjD,GACT1J,KAAKi4B,SAAS60B,2BACd9sD,KAAKi4B,SAAS60B,0BAA0BpjD,EAAS1J,KAAKm+B,cAE9D,CACA4tB,wBAAwBriD,EAASy0B,GACzBn+B,KAAKi4B,SAAS80B,8BAAgC/sD,KAAKm+B,eAAiBA,GACpEn+B,KAAKi4B,SAAS80B,6BAA6BrjD,EAASy0B,EAE5D,EAGJ,MAAM6uB,GACFtsD,YAAYgJ,EAASuuB,GACjBj4B,KAAK0J,QAAUA,EACf1J,KAAKi4B,SAAWA,EAChBj4B,KAAKyhC,SAAU,EACfzhC,KAAKitD,UAAY,IAAIlyC,IACrB/a,KAAKgrD,iBAAmB,IAAIC,kBAAiBC,GAAalrD,KAAKmrD,iBAAiBD,IACpF,CACAnqD,QACSf,KAAKyhC,UACNzhC,KAAKyhC,SAAU,EACfzhC,KAAKgrD,iBAAiBhpB,QAAQhiC,KAAK0J,QAAS,CAAEsT,YAAY,EAAMkwC,mBAAmB,IACnFltD,KAAKmvC,UAEb,CACA7tC,OACQtB,KAAKyhC,UACLzhC,KAAKgrD,iBAAiBI,cACtBprD,KAAKgrD,iBAAiBhlD,aACtBhG,KAAKyhC,SAAU,EAEvB,CACA0N,UACI,GAAInvC,KAAKyhC,QACL,IAAK,MAAMtD,KAAiBn+B,KAAKmtD,oBAC7BntD,KAAKotD,iBAAiBjvB,EAAe,KAGjD,CACAgtB,iBAAiBD,GACb,GAAIlrD,KAAKyhC,QACL,IAAK,MAAM+pB,KAAYN,EACnBlrD,KAAKyrD,gBAAgBD,EAGjC,CACAC,gBAAgBD,GACZ,MAAMrtB,EAAgBqtB,EAASrtB,cAC3BA,GACAn+B,KAAKotD,iBAAiBjvB,EAAeqtB,EAAS6B,SAEtD,CACAD,iBAAiBjvB,EAAekvB,GAC5B,MAAMvmD,EAAM9G,KAAKi4B,SAASq1B,4BAA4BnvB,GACtD,GAAW,MAAPr3B,EAAa,CACR9G,KAAKitD,UAAUzxC,IAAI2iB,IACpBn+B,KAAKutD,kBAAkBzmD,EAAKq3B,GAEhC,MAAMp3B,EAAQ/G,KAAK0J,QAAQG,aAAas0B,GAIxC,GAHIn+B,KAAKitD,UAAUvxC,IAAIyiB,IAAkBp3B,GACrC/G,KAAKwtD,sBAAsBzmD,EAAOD,EAAKumD,GAE9B,MAATtmD,EAAe,CACf,MAAMsmD,EAAWrtD,KAAKitD,UAAUvxC,IAAIyiB,GACpCn+B,KAAKitD,UAAUlpB,OAAO5F,GAClBkvB,GACArtD,KAAKytD,oBAAoB3mD,EAAKq3B,EAAekvB,EACrD,MAEIrtD,KAAKitD,UAAUtxC,IAAIwiB,EAAep3B,EAE1C,CACJ,CACAwmD,kBAAkBzmD,EAAKq3B,GACfn+B,KAAKi4B,SAASs1B,mBACdvtD,KAAKi4B,SAASs1B,kBAAkBzmD,EAAKq3B,EAE7C,CACAqvB,sBAAsBzmD,EAAOD,EAAKumD,GAC1BrtD,KAAKi4B,SAASu1B,uBACdxtD,KAAKi4B,SAASu1B,sBAAsBzmD,EAAOD,EAAKumD,EAExD,CACAI,oBAAoB3mD,EAAKq3B,EAAekvB,GAChCrtD,KAAKi4B,SAASw1B,qBACdztD,KAAKi4B,SAASw1B,oBAAoB3mD,EAAKq3B,EAAekvB,EAE9D,CACIF,0BACA,OAAOnjD,MAAMO,KAAK,IAAI0Q,IAAIjb,KAAK0tD,sBAAsBj5C,OAAOzU,KAAK2tD,yBACrE,CACID,4BACA,OAAO1jD,MAAMO,KAAKvK,KAAK0J,QAAQsT,YAAYhV,KAAI+d,GAAaA,EAAUtc,MAC1E,CACIkkD,6BACA,OAAO3jD,MAAMO,KAAKvK,KAAKitD,UAAU3hD,OACrC,EAUJ,SAAS,GAAMtD,EAAKlB,GAChB,IAAI22B,EAASz1B,EAAI0T,IAAI5U,GAKrB,OAJK22B,IACDA,EAAS,IAAIxiB,IACbjT,EAAI2T,IAAI7U,EAAK22B,IAEVA,CACX,CAQA,MAAMmwB,GACFltD,cACIV,KAAK6tD,YAAc,IAAI9yC,GAC3B,CACIzP,WACA,OAAOtB,MAAMO,KAAKvK,KAAK6tD,YAAYviD,OACvC,CACImyB,aAEA,OADazzB,MAAMO,KAAKvK,KAAK6tD,YAAYpwB,UAC7BjjB,QAAO,CAACijB,EAAQ9hB,IAAQ8hB,EAAOhpB,OAAOzK,MAAMO,KAAKoR,KAAO,GACxE,CACIsiC,WAEA,OADaj0C,MAAMO,KAAKvK,KAAK6tD,YAAYpwB,UAC7BjjB,QAAO,CAACyjC,EAAMtiC,IAAQsiC,EAAOtiC,EAAIsiC,MAAM,EACvD,CACA11C,IAAIzB,EAAKC,IArCb,SAAaiB,EAAKlB,EAAKC,GACnB,GAAMiB,EAAKlB,GAAKyB,IAAIxB,EACxB,CAoCQwB,CAAIvI,KAAK6tD,YAAa/mD,EAAKC,EAC/B,CACAg9B,OAAOj9B,EAAKC,IArChB,SAAaiB,EAAKlB,EAAKC,GACnB,GAAMiB,EAAKlB,GAAKi9B,OAAOh9B,GAW3B,SAAeiB,EAAKlB,GAChB,MAAM22B,EAASz1B,EAAI0T,IAAI5U,GACT,MAAV22B,GAAiC,GAAfA,EAAOwgB,MACzBj2C,EAAI+7B,OAAOj9B,EAEnB,CAfIgnD,CAAM9lD,EAAKlB,EACf,CAmCQinD,CAAI/tD,KAAK6tD,YAAa/mD,EAAKC,EAC/B,CACAyU,IAAI1U,EAAKC,GACL,MAAM02B,EAASz9B,KAAK6tD,YAAYnyC,IAAI5U,GACpC,OAAiB,MAAV22B,GAAkBA,EAAOjiB,IAAIzU,EACxC,CACAinD,OAAOlnD,GACH,OAAO9G,KAAK6tD,YAAYryC,IAAI1U,EAChC,CACAmnD,SAASlnD,GAEL,OADaiD,MAAMO,KAAKvK,KAAK6tD,YAAYpwB,UAC7BxhB,MAAKN,GAAOA,EAAIH,IAAIzU,IACpC,CACAmnD,gBAAgBpnD,GACZ,MAAM22B,EAASz9B,KAAK6tD,YAAYnyC,IAAI5U,GACpC,OAAO22B,EAASzzB,MAAMO,KAAKkzB,GAAU,EACzC,CACA0wB,gBAAgBpnD,GACZ,OAAOiD,MAAMO,KAAKvK,KAAK6tD,aAClBlmD,QAAO,EAAEb,EAAK22B,KAAYA,EAAOjiB,IAAIzU,KACrCiB,KAAI,EAAElB,EAAK22B,KAAY32B,GAChC,EA4BJ,MAAMsnD,GACF1tD,YAAYgJ,EAASy0B,EAAelG,GAChCj4B,KAAKquD,kBAAoB,IAAI1B,GAAkBjjD,EAASy0B,EAAen+B,MACvEA,KAAKi4B,SAAWA,EAChBj4B,KAAKsuD,gBAAkB,IAAIV,EAC/B,CACInsB,cACA,OAAOzhC,KAAKquD,kBAAkB5sB,OAClC,CACA1gC,QACIf,KAAKquD,kBAAkBttD,OAC3B,CACAsR,MAAMg5B,GACFrrC,KAAKquD,kBAAkBh8C,MAAMg5B,EACjC,CACA/pC,OACItB,KAAKquD,kBAAkB/sD,MAC3B,CACA6tC,UACInvC,KAAKquD,kBAAkBlf,SAC3B,CACIzlC,cACA,OAAO1J,KAAKquD,kBAAkB3kD,OAClC,CACIy0B,oBACA,OAAOn+B,KAAKquD,kBAAkBlwB,aAClC,CACA0uB,wBAAwBnjD,GACpB1J,KAAKuuD,cAAcvuD,KAAKwuD,qBAAqB9kD,GACjD,CACAqjD,6BAA6BrjD,GACzB,MAAO+kD,EAAiBC,GAAiB1uD,KAAK2uD,wBAAwBjlD,GACtE1J,KAAK4uD,gBAAgBH,GACrBzuD,KAAKuuD,cAAcG,EACvB,CACA5B,0BAA0BpjD,GACtB1J,KAAK4uD,gBAAgB5uD,KAAKsuD,gBAAgBJ,gBAAgBxkD,GAC9D,CACA6kD,cAAcM,GACVA,EAAO5iD,SAAQ64B,GAAS9kC,KAAK8uD,aAAahqB,IAC9C,CACA8pB,gBAAgBC,GACZA,EAAO5iD,SAAQ64B,GAAS9kC,KAAK+uD,eAAejqB,IAChD,CACAgqB,aAAahqB,GACT9kC,KAAKi4B,SAAS62B,aAAahqB,GAC3B9kC,KAAKsuD,gBAAgB/lD,IAAIu8B,EAAMp7B,QAASo7B,EAC5C,CACAiqB,eAAejqB,GACX9kC,KAAKi4B,SAAS82B,eAAejqB,GAC7B9kC,KAAKsuD,gBAAgBvqB,OAAOe,EAAMp7B,QAASo7B,EAC/C,CACA6pB,wBAAwBjlD,GACpB,MAAMslD,EAAiBhvD,KAAKsuD,gBAAgBJ,gBAAgBxkD,GACtDulD,EAAgBjvD,KAAKwuD,qBAAqB9kD,GAC1CwlD,EAmBd,SAAaz8C,EAAME,GACf,MAAMvP,EAASf,KAAKiT,IAAI7C,EAAKrP,OAAQuP,EAAMvP,QAC3C,OAAO4G,MAAMO,KAAK,CAAEnH,WAAU,CAAC66B,EAAGzf,IAAU,CAAC/L,EAAK+L,GAAQ7L,EAAM6L,KACpE,CAtBoC2wC,CAAIH,EAAgBC,GAC3CG,WAAU,EAAEC,EAAeC,MAsBxC,SAAwB78C,EAAME,GAC1B,OAAOF,GAAQE,GAASF,EAAK+L,OAAS7L,EAAM6L,OAAS/L,EAAKusB,SAAWrsB,EAAMqsB,OAC/E,CAxB2DuwB,CAAeF,EAAeC,KACjF,OAA4B,GAAxBJ,EACO,CAAC,GAAI,IAGL,CAACF,EAAe7rD,MAAM+rD,GAAsBD,EAAc9rD,MAAM+rD,GAE/E,CACAV,qBAAqB9kD,GACjB,MAAMy0B,EAAgBn+B,KAAKm+B,cAE3B,OAGR,SAA0BqxB,EAAa9lD,EAASy0B,GAC5C,OAAOqxB,EAAY/Q,OAAO/vC,MAAM,OAAO/G,QAAOq3B,GAAWA,EAAQ57B,SAC5D4E,KAAI,CAACg3B,EAASxgB,KAAU,CAAG9U,UAASy0B,gBAAea,UAASxgB,WACrE,CANeixC,CADa/lD,EAAQG,aAAas0B,IAAkB,GACtBz0B,EAASy0B,EAClD,EAcJ,MAAMuxB,GACFhvD,YAAYgJ,EAASy0B,EAAelG,GAChCj4B,KAAK2vD,kBAAoB,IAAIvB,GAAkB1kD,EAASy0B,EAAen+B,MACvEA,KAAKi4B,SAAWA,EAChBj4B,KAAK4vD,oBAAsB,IAAI94B,QAC/B92B,KAAK6vD,uBAAyB,IAAI/4B,OACtC,CACI2K,cACA,OAAOzhC,KAAK2vD,kBAAkBluB,OAClC,CACA1gC,QACIf,KAAK2vD,kBAAkB5uD,OAC3B,CACAO,OACItB,KAAK2vD,kBAAkBruD,MAC3B,CACA6tC,UACInvC,KAAK2vD,kBAAkBxgB,SAC3B,CACIzlC,cACA,OAAO1J,KAAK2vD,kBAAkBjmD,OAClC,CACIy0B,oBACA,OAAOn+B,KAAK2vD,kBAAkBxxB,aAClC,CACA2wB,aAAahqB,GACT,MAAM,QAAEp7B,GAAYo7B,GACd,MAAE/9B,GAAU/G,KAAK8vD,yBAAyBhrB,GAC5C/9B,IACA/G,KAAK+vD,6BAA6BrmD,GAASiS,IAAImpB,EAAO/9B,GACtD/G,KAAKi4B,SAAS+3B,oBAAoBtmD,EAAS3C,GAEnD,CACAgoD,eAAejqB,GACX,MAAM,QAAEp7B,GAAYo7B,GACd,MAAE/9B,GAAU/G,KAAK8vD,yBAAyBhrB,GAC5C/9B,IACA/G,KAAK+vD,6BAA6BrmD,GAASq6B,OAAOe,GAClD9kC,KAAKi4B,SAASg4B,sBAAsBvmD,EAAS3C,GAErD,CACA+oD,yBAAyBhrB,GACrB,IAAIorB,EAAclwD,KAAK4vD,oBAAoBl0C,IAAIopB,GAK/C,OAJKorB,IACDA,EAAclwD,KAAKmwD,WAAWrrB,GAC9B9kC,KAAK4vD,oBAAoBj0C,IAAImpB,EAAOorB,IAEjCA,CACX,CACAH,6BAA6BrmD,GACzB,IAAI0mD,EAAgBpwD,KAAK6vD,uBAAuBn0C,IAAIhS,GAKpD,OAJK0mD,IACDA,EAAgB,IAAIr1C,IACpB/a,KAAK6vD,uBAAuBl0C,IAAIjS,EAAS0mD,IAEtCA,CACX,CACAD,WAAWrrB,GACP,IAEI,MAAO,CAAE/9B,MADK/G,KAAKi4B,SAASo4B,mBAAmBvrB,GAKnD,CAFA,MAAOtgC,GACH,MAAO,CAAEA,QACb,CACJ,EAGJ,MAAM8rD,GACF5vD,YAAYu2C,EAAShf,GACjBj4B,KAAKi3C,QAAUA,EACfj3C,KAAKi4B,SAAWA,EAChBj4B,KAAKuwD,iBAAmB,IAAIx1C,GAChC,CACAha,QACSf,KAAKwwD,oBACNxwD,KAAKwwD,kBAAoB,IAAId,GAAkB1vD,KAAK0J,QAAS1J,KAAKywD,gBAAiBzwD,MACnFA,KAAKwwD,kBAAkBzvD,QAE/B,CACAO,OACQtB,KAAKwwD,oBACLxwD,KAAKwwD,kBAAkBlvD,cAChBtB,KAAKwwD,kBACZxwD,KAAK0wD,uBAEb,CACIhnD,cACA,OAAO1J,KAAKi3C,QAAQvtC,OACxB,CACIjE,iBACA,OAAOzF,KAAKi3C,QAAQxxC,UACxB,CACIgrD,sBACA,OAAOzwD,KAAK2wD,OAAOF,eACvB,CACIE,aACA,OAAO3wD,KAAKi3C,QAAQ0Z,MACxB,CACIxI,eACA,OAAOn+C,MAAMO,KAAKvK,KAAKuwD,iBAAiB9yB,SAC5C,CACAmzB,cAAc1pD,GACV,MAAM0gD,EAAU,IAAIiC,GAAQ7pD,KAAKi3C,QAAS/vC,GAC1ClH,KAAKuwD,iBAAiB50C,IAAIzU,EAAQ0gD,GAClC5nD,KAAKi4B,SAAS0vB,iBAAiBC,EACnC,CACAiJ,iBAAiB3pD,GACb,MAAM0gD,EAAU5nD,KAAKuwD,iBAAiB70C,IAAIxU,GACtC0gD,IACA5nD,KAAKuwD,iBAAiBxsB,OAAO78B,GAC7BlH,KAAKi4B,SAAS4vB,oBAAoBD,GAE1C,CACA8I,uBACI1wD,KAAKmoD,SAASl8C,SAAQ27C,GAAW5nD,KAAKi4B,SAAS4vB,oBAAoBD,KACnE5nD,KAAKuwD,iBAAiBjS,OAC1B,CACA+R,mBAAmBvrB,GACf,MAAM59B,EAjtBd,MACIxG,YAAYgJ,EAAS8U,EAAO1R,GACxB9M,KAAK0J,QAAUA,EACf1J,KAAKwe,MAAQA,EACbxe,KAAKgnC,YAAcl6B,EAAWk6B,aAAet9B,EAC7C1J,KAAKmF,UAAY2H,EAAW3H,WAqCpC,SAAuCuE,GACnC,MAAMknC,EAAUlnC,EAAQknC,QAAQ1rC,cAChC,GAAI0rC,KAAW8Y,GACX,OAAOA,GAAkB9Y,GAASlnC,EAE1C,CA1CiDonD,CAA8BpnD,IAAYlF,GAAM,sBACzFxE,KAAKynD,aAAe36C,EAAW26C,cAAgB,CAAC,EAChDznD,KAAKyF,WAAaqH,EAAWrH,YAAcjB,GAAM,sBACjDxE,KAAKoqD,WAAat9C,EAAWs9C,YAAc5lD,GAAM,sBACrD,CACAk+B,gBAAgBoC,GACZ,OAAO,IAAI9kC,KAAK8kC,EAAMp7B,QAASo7B,EAAMtmB,MAvD7C,SAAqCuyC,GACjC,MACMn8B,EADSm8B,EAAiBtS,OACT7kB,MAAMwvB,KAAsB,GACnD,MAAO,CACHpiB,aAOkBgqB,EAPYp8B,EAAQ,GAQnB,UAAnBo8B,EACOvhD,OAEiB,YAAnBuhD,EACEnuD,cADN,GAVDsC,UAAWyvB,EAAQ,GACnB6yB,aAAc7yB,EAAQ,IAaH6yB,EAb0B7yB,EAAQ,GAclD6yB,EAAa/4C,MAAM,KAAK8L,QAAO,CAAChN,EAASs3B,IAAUl6B,OAAOiS,OAAOrP,EAAS,CAAE,CAACs3B,EAAMx7B,QAAQ,KAAM,MAAO,KAAKJ,KAAK47B,MAAW,CAAC,IAdtE,CAAC,EAC5Dr/B,WAAYmvB,EAAQ,GACpBw1B,WAAYx1B,EAAQ,IAG5B,IAA0Bo8B,EAQCvJ,CAT3B,CA6CoDwJ,CAA4BnsB,EAAM9F,SAClF,CACAn0B,WACI,MAAMqmD,EAAkBlxD,KAAKgxD,gBAAkB,IAAIhxD,KAAKgxD,kBAAoB,GAC5E,MAAO,GAAGhxD,KAAKmF,YAAY+rD,MAAoBlxD,KAAKyF,cAAczF,KAAKoqD,YAC3E,CACI1jD,aACA,MAAMA,EAAS,CAAC,EACVyqD,EAAU,IAAIvM,OAAO,SAAS5kD,KAAKyF,0BACzC,IAAK,MAAM,KAAEgE,EAAI,MAAE1C,KAAWiD,MAAMO,KAAKvK,KAAK0J,QAAQsT,YAAa,CAC/D,MAAM4c,EAAQnwB,EAAKmwB,MAAMu3B,GACnBrqD,EAAM8yB,GAASA,EAAM,GACvB9yB,IACAJ,EAAO2iD,GAASviD,IAAQ6iD,GAAS5iD,GAEzC,CACA,OAAOL,CACX,CACIsqD,sBACA,OApDsBhqB,EAoDMhnC,KAAKgnC,cAnDlBv3B,OACR,SAEFu3B,GAAenkC,SACb,gBADN,EAJT,IAA8BmkC,CAqD1B,GAkrB0BoqB,SAAStsB,GAC/B,GAAI59B,EAAOzB,YAAczF,KAAKyF,WAC1B,OAAOyB,CAEf,CACA8oD,oBAAoBtmD,EAASxC,GACzBlH,KAAK4wD,cAAc1pD,EACvB,CACA+oD,sBAAsBvmD,EAASxC,GAC3BlH,KAAK6wD,iBAAiB3pD,EAC1B,EAGJ,MAAMmqD,GACF3wD,YAAYu2C,EAASqa,GACjBtxD,KAAKi3C,QAAUA,EACfj3C,KAAKsxD,SAAWA,EAChBtxD,KAAKuxD,kBAAoB,IAAIvE,GAAkBhtD,KAAK0J,QAAS1J,MAC7DA,KAAKwxD,mBAAqBxxD,KAAKmqD,WAAWqH,kBAC9C,CACAzwD,QACIf,KAAKuxD,kBAAkBxwD,QACvBf,KAAKyxD,wCACT,CACAnwD,OACItB,KAAKuxD,kBAAkBjwD,MAC3B,CACIoI,cACA,OAAO1J,KAAKi3C,QAAQvtC,OACxB,CACIygD,iBACA,OAAOnqD,KAAKi3C,QAAQkT,UACxB,CACAmD,4BAA4BnvB,GACxB,GAAIA,KAAiBn+B,KAAKwxD,mBACtB,OAAOxxD,KAAKwxD,mBAAmBrzB,GAAe10B,IAEtD,CACA8jD,kBAAkBzmD,EAAKq3B,GACnB,MAAMrxB,EAAa9M,KAAKwxD,mBAAmBrzB,GACtCn+B,KAAKiuD,SAASnnD,IACf9G,KAAK0xD,sBAAsB5qD,EAAKgG,EAAW6kD,OAAO3xD,KAAKsxD,SAASxqD,IAAOgG,EAAW6kD,OAAO7kD,EAAWghC,cAE5G,CACA0f,sBAAsBzmD,EAAO0C,EAAM4jD,GAC/B,MAAMvgD,EAAa9M,KAAK4xD,uBAAuBnoD,GACjC,OAAV1C,IAEa,OAAbsmD,IACAA,EAAWvgD,EAAW6kD,OAAO7kD,EAAWghC,eAE5C9tC,KAAK0xD,sBAAsBjoD,EAAM1C,EAAOsmD,GAC5C,CACAI,oBAAoB3mD,EAAKq3B,EAAekvB,GACpC,MAAMvgD,EAAa9M,KAAK4xD,uBAAuB9qD,GAC3C9G,KAAKiuD,SAASnnD,GACd9G,KAAK0xD,sBAAsB5qD,EAAKgG,EAAW6kD,OAAO3xD,KAAKsxD,SAASxqD,IAAOumD,GAGvErtD,KAAK0xD,sBAAsB5qD,EAAKgG,EAAW6kD,OAAO7kD,EAAWghC,cAAeuf,EAEpF,CACAoE,yCACI,IAAK,MAAM,IAAE3qD,EAAG,KAAE2C,EAAI,aAAEqkC,EAAY,OAAE6jB,KAAY3xD,KAAK6xD,iBAC/BhpD,MAAhBilC,GAA8B9tC,KAAKmqD,WAAWtmD,KAAK2X,IAAI1U,IACvD9G,KAAK0xD,sBAAsBjoD,EAAMkoD,EAAO7jB,QAAejlC,EAGnE,CACA6oD,sBAAsBjoD,EAAMqoD,EAAUC,GAClC,MAAMC,EAAoB,GAAGvoD,WACvBwoD,EAAgBjyD,KAAKsxD,SAASU,GACpC,GAA4B,mBAAjBC,EAA6B,CACpC,MAAMnlD,EAAa9M,KAAK4xD,uBAAuBnoD,GAC/C,IACI,MAAM1C,EAAQ+F,EAAWolD,OAAOJ,GAChC,IAAIzE,EAAW0E,EACXA,IACA1E,EAAWvgD,EAAWolD,OAAOH,IAEjCE,EAAcntD,KAAK9E,KAAKsxD,SAAUvqD,EAAOsmD,EAM7C,CAJA,MAAO7oD,GACH,KAAMA,aAAiBuG,WACnB,MAAMvG,EACV,MAAM,IAAIuG,UAAU,mBAAmB/K,KAAKi3C,QAAQxxC,cAAcqH,EAAWrD,WAAWjF,EAAMe,UAClG,CACJ,CACJ,CACIssD,uBACA,MAAM,mBAAEL,GAAuBxxD,KAC/B,OAAO4K,OAAOU,KAAKkmD,GAAoBxpD,KAAIlB,GAAO0qD,EAAmB1qD,IACzE,CACI8qD,6BACA,MAAMO,EAAc,CAAC,EAKrB,OAJAvnD,OAAOU,KAAKtL,KAAKwxD,oBAAoBvlD,SAAQnF,IACzC,MAAMgG,EAAa9M,KAAKwxD,mBAAmB1qD,GAC3CqrD,EAAYrlD,EAAWrD,MAAQqD,CAAU,IAEtCqlD,CACX,CACAlE,SAAS9vB,GACL,MACMi0B,EAAgB,MAAM7I,GADTvpD,KAAK4xD,uBAAuBzzB,GACG10B,QAClD,OAAOzJ,KAAKsxD,SAASc,EACzB,EAGJ,MAAMC,GACF3xD,YAAYu2C,EAAShf,GACjBj4B,KAAKi3C,QAAUA,EACfj3C,KAAKi4B,SAAWA,EAChBj4B,KAAKsyD,cAAgB,IAAI1E,EAC7B,CACA7sD,QACSf,KAAK2vD,oBACN3vD,KAAK2vD,kBAAoB,IAAIvB,GAAkBpuD,KAAK0J,QAAS1J,KAAKm+B,cAAen+B,MACjFA,KAAK2vD,kBAAkB5uD,QAE/B,CACAO,OACQtB,KAAK2vD,oBACL3vD,KAAKuyD,uBACLvyD,KAAK2vD,kBAAkBruD,cAChBtB,KAAK2vD,kBAEpB,CACAb,cAAa,QAAEplD,EAASs1B,QAASv1B,IACzBzJ,KAAK0qD,MAAMC,gBAAgBjhD,IAC3B1J,KAAKwyD,cAAc9oD,EAASD,EAEpC,CACAslD,gBAAe,QAAErlD,EAASs1B,QAASv1B,IAC/BzJ,KAAKyyD,iBAAiB/oD,EAASD,EACnC,CACA+oD,cAAc9oD,EAASD,GACnB,IAAI2vB,EACCp5B,KAAKsyD,cAAc92C,IAAI/R,EAAMC,KAC9B1J,KAAKsyD,cAAc/pD,IAAIkB,EAAMC,GACK,QAAjC0vB,EAAKp5B,KAAK2vD,yBAAsC,IAAPv2B,GAAyBA,EAAG/mB,OAAM,IAAMrS,KAAKi4B,SAASy6B,gBAAgBhpD,EAASD,KAEjI,CACAgpD,iBAAiB/oD,EAASD,GACtB,IAAI2vB,EACAp5B,KAAKsyD,cAAc92C,IAAI/R,EAAMC,KAC7B1J,KAAKsyD,cAAcvuB,OAAOt6B,EAAMC,GACE,QAAjC0vB,EAAKp5B,KAAK2vD,yBAAsC,IAAPv2B,GAAyBA,EAAG/mB,OAAM,IAAMrS,KAAKi4B,SAAS06B,mBAAmBjpD,EAASD,KAEpI,CACA8oD,uBACI,IAAK,MAAM9oD,KAAQzJ,KAAKsyD,cAAchnD,KAClC,IAAK,MAAM5B,KAAW1J,KAAKsyD,cAAcpE,gBAAgBzkD,GACrDzJ,KAAKyyD,iBAAiB/oD,EAASD,EAG3C,CACI00B,oBACA,MAAO,QAAQn+B,KAAKi3C,QAAQxxC,mBAChC,CACIiE,cACA,OAAO1J,KAAKi3C,QAAQvtC,OACxB,CACIghD,YACA,OAAO1qD,KAAKi3C,QAAQyT,KACxB,EAGJ,MAAMkI,GACFlyD,YAAY00B,EAAQs1B,GAChB1qD,KAAKyqD,iBAAmB,CAACoI,EAAch2B,EAAS,CAAC,KAC7C,MAAM,WAAEp3B,EAAU,WAAE0kD,EAAU,QAAEzgD,GAAY1J,KAC5C68B,EAASjyB,OAAOiS,OAAO,CAAEpX,aAAY0kD,aAAYzgD,WAAWmzB,GAC5D78B,KAAKuoD,YAAYkC,iBAAiBzqD,KAAKyF,WAAYotD,EAAch2B,EAAO,EAE5E78B,KAAKo1B,OAASA,EACdp1B,KAAK0qD,MAAQA,EACb1qD,KAAKmqD,WAAa,IAAI/0B,EAAO09B,sBAAsB9yD,MACnDA,KAAK+yD,gBAAkB,IAAIzC,GAAgBtwD,KAAMA,KAAKgzD,YACtDhzD,KAAKizD,cAAgB,IAAI5B,GAAcrxD,KAAMA,KAAKmqD,YAClDnqD,KAAKkzD,eAAiB,IAAIb,GAAeryD,KAAMA,MAC/C,IACIA,KAAKmqD,WAAWgJ,aAChBnzD,KAAKyqD,iBAAiB,aAI1B,CAFA,MAAOjmD,GACHxE,KAAK6oD,YAAYrkD,EAAO,0BAC5B,CACJ,CACAyE,UACIjJ,KAAK+yD,gBAAgBhyD,QACrBf,KAAKizD,cAAclyD,QACnBf,KAAKkzD,eAAenyD,QACpB,IACIf,KAAKmqD,WAAWlhD,UAChBjJ,KAAKyqD,iBAAiB,UAI1B,CAFA,MAAOjmD,GACHxE,KAAK6oD,YAAYrkD,EAAO,wBAC5B,CACJ,CACAwB,aACI,IACIhG,KAAKmqD,WAAWnkD,aAChBhG,KAAKyqD,iBAAiB,aAI1B,CAFA,MAAOjmD,GACHxE,KAAK6oD,YAAYrkD,EAAO,2BAC5B,CACAxE,KAAKkzD,eAAe5xD,OACpBtB,KAAKizD,cAAc3xD,OACnBtB,KAAK+yD,gBAAgBzxD,MACzB,CACIinD,kBACA,OAAOvoD,KAAKo1B,OAAOmzB,WACvB,CACI9iD,iBACA,OAAOzF,KAAKo1B,OAAO3vB,UACvB,CACIkrD,aACA,OAAO3wD,KAAKuoD,YAAYoI,MAC5B,CACIqC,iBACA,OAAOhzD,KAAKuoD,YAAYyK,UAC5B,CACItpD,cACA,OAAO1J,KAAK0qD,MAAMhhD,OACtB,CACIutB,oBACA,OAAOj3B,KAAK0J,QAAQutB,aACxB,CACA4xB,YAAYrkD,EAAOe,EAASs3B,EAAS,CAAC,GAClC,MAAM,WAAEp3B,EAAU,WAAE0kD,EAAU,QAAEzgD,GAAY1J,KAC5C68B,EAASjyB,OAAOiS,OAAO,CAAEpX,aAAY0kD,aAAYzgD,WAAWmzB,GAC5D78B,KAAKuoD,YAAYM,YAAYrkD,EAAO,SAASe,IAAWs3B,EAC5D,CACA61B,gBAAgBhpD,EAASD,GACrBzJ,KAAKozD,uBAAuB,GAAG3pD,mBAAuBC,EAC1D,CACAipD,mBAAmBjpD,EAASD,GACxBzJ,KAAKozD,uBAAuB,GAAG3pD,sBAA0BC,EAC7D,CACA0pD,uBAAuBhJ,KAAexhD,GAClC,MAAMuhD,EAAanqD,KAAKmqD,WACa,mBAA1BA,EAAWC,IAClBD,EAAWC,MAAexhD,EAElC,EAGJ,SAASyqD,GAAiC3yD,EAAa4yD,GACnD,MAAMC,EAAYC,GAA2B9yD,GAC7C,OAAOsJ,MAAMO,KAAKgpD,EAAU/4C,QAAO,CAACijB,EAAQ/8B,KAoBhD,SAAiCA,EAAa4yD,GAC1C,MAAM/9B,EAAa70B,EAAY4yD,GAC/B,OAAOtpD,MAAMC,QAAQsrB,GAAcA,EAAa,EACpD,CAtBQk+B,CAAwB/yD,EAAa4yD,GAAcrnD,SAAQxC,GAAQg0B,EAAOl1B,IAAIkB,KACvEg0B,IACR,IAAIxiB,KACX,CAQA,SAASu4C,GAA2B9yD,GAChC,MAAM6yD,EAAY,GAClB,KAAO7yD,GACH6yD,EAAUrzD,KAAKQ,GACfA,EAAckK,OAAO8oD,eAAehzD,GAExC,OAAO6yD,EAAUI,SACrB,CAmDA,MAAMC,GACyC,mBAAhChpD,OAAOW,sBACN3E,GAAW,IACZgE,OAAOipD,oBAAoBjtD,MAC3BgE,OAAOW,sBAAsB3E,IAI7BgE,OAAOipD,oBAGhB7sD,GAAS,MACX,SAAS8sD,EAAkBpzD,GACvB,SAASqzD,IACL,OAAOp+B,QAAQI,UAAUr1B,EAAaqL,qBAC1C,CAKA,OAJAgoD,EAASzuD,UAAYsF,OAAOxC,OAAO1H,EAAY4E,UAAW,CACtD5E,YAAa,CAAEqG,MAAOgtD,KAE1Bp+B,QAAQK,eAAe+9B,EAAUrzD,GAC1BqzD,CACX,CAOA,IAEI,OARJ,WACI,MACMvsC,EAAIssC,GADA,WAAc9zD,KAAKmJ,EAAErE,KAAK9E,KAAO,IAE3CwnB,EAAEliB,UAAU6D,EAAI,WAAc,EACvB,IAAIqe,CACf,CAEIwsC,GACOF,CAKX,CAHA,MAAOtvD,GACH,OAAQ9D,GAAgB,cAAuBA,GAEnD,CACH,EAzBc,GAkCf,MAAMuzD,GACFvzD,YAAY6nD,EAAahzB,GACrBv1B,KAAKuoD,YAAcA,EACnBvoD,KAAKu1B,WAVb,SAAyBA,GACrB,MAAO,CACH9vB,WAAY8vB,EAAW9vB,WACvBqtD,uBAlFOpyD,EAkFsB60B,EAAWu9B,sBA/EhD,SAAgBpyD,EAAamG,GACzB,MAAMqtD,EAAoBltD,GAAOtG,GAC3ByzD,EAeV,SAA6B7uD,EAAWuB,GACpC,OAAO+sD,GAAW/sD,GAAY2T,QAAO,CAAC25C,EAAkBrtD,KACpD,MAAMgG,EAOd,SAA+BxH,EAAWuB,EAAYC,GAClD,MAAMstD,EAAsBxpD,OAAOc,yBAAyBpG,EAAWwB,GAEvE,IADwBstD,KAAuB,UAAWA,GACpC,CAClB,MAAMtnD,EAAalC,OAAOc,yBAAyB7E,EAAYC,GAAKC,MAKpE,OAJIqtD,IACAtnD,EAAW4O,IAAM04C,EAAoB14C,KAAO5O,EAAW4O,IACvD5O,EAAW6O,IAAMy4C,EAAoBz4C,KAAO7O,EAAW6O,KAEpD7O,CACX,CACJ,CAlB2BunD,CAAsB/uD,EAAWuB,EAAYC,GAIhE,OAHIgG,GACAlC,OAAOiS,OAAOs3C,EAAkB,CAAE,CAACrtD,GAAMgG,IAEtCqnD,CAAgB,GACxB,CAAC,EACR,CAvB6BG,CAAoB5zD,EAAY4E,UAAWuB,GAEpE,OADA+D,OAAOwB,iBAAiB8nD,EAAkB5uD,UAAW6uD,GAC9CD,CACX,CAPWK,CAAO7zD,EAQlB,SAA8BA,GAE1B,OADkB2yD,GAAiC3yD,EAAa,aAC/C8Z,QAAO,CAACg6C,EAAmBC,KACxC,MAAM5tD,EAAa4tD,EAAS/zD,GAC5B,IAAK,MAAMoG,KAAOD,EAAY,CAC1B,MAAMiG,EAAa0nD,EAAkB1tD,IAAQ,CAAC,EAC9C0tD,EAAkB1tD,GAAO8D,OAAOiS,OAAO/P,EAAYjG,EAAWC,GAClE,CACA,OAAO0tD,CAAiB,GACzB,CAAC,EACR,CAlB+BE,CAAqBh0D,MADpD,IAAeA,CAoFf,CAK0Bi0D,CAAgBp/B,GAClCv1B,KAAK40D,gBAAkB,IAAI99B,QAC3B92B,KAAK60D,kBAAoB,IAAI55C,GACjC,CACIxV,iBACA,OAAOzF,KAAKu1B,WAAW9vB,UAC3B,CACIqtD,4BACA,OAAO9yD,KAAKu1B,WAAWu9B,qBAC3B,CACIgC,eACA,OAAO9qD,MAAMO,KAAKvK,KAAK60D,kBAC3B,CACAE,uBAAuBrK,GACnB,MAAMzT,EAAUj3C,KAAKg1D,qBAAqBtK,GAC1C1qD,KAAK60D,kBAAkBtsD,IAAI0uC,GAC3BA,EAAQhuC,SACZ,CACAgsD,0BAA0BvK,GACtB,MAAMzT,EAAUj3C,KAAK40D,gBAAgBl5C,IAAIgvC,GACrCzT,IACAj3C,KAAK60D,kBAAkB9wB,OAAOkT,GAC9BA,EAAQjxC,aAEhB,CACAgvD,qBAAqBtK,GACjB,IAAIzT,EAAUj3C,KAAK40D,gBAAgBl5C,IAAIgvC,GAKvC,OAJKzT,IACDA,EAAU,IAAI2b,GAAQ5yD,KAAM0qD,GAC5B1qD,KAAK40D,gBAAgBj5C,IAAI+uC,EAAOzT,IAE7BA,CACX,EAGJ,MAAMie,GACFx0D,YAAYgqD,GACR1qD,KAAK0qD,MAAQA,CACjB,CACAlvC,IAAI/R,GACA,OAAOzJ,KAAK6D,KAAK2X,IAAIxb,KAAKm1D,WAAW1rD,GACzC,CACAiS,IAAIjS,GACA,OAAOzJ,KAAKo1D,OAAO3rD,GAAM,EAC7B,CACA2rD,OAAO3rD,GAEH,OADoBzJ,KAAK6D,KAAK6X,IAAI1b,KAAKm1D,WAAW1rD,KAAU,IAnnCnDmwB,MAAM,YAAc,EAqnCjC,CACAy7B,iBAAiB5rD,GACb,OAAOzJ,KAAK6D,KAAKyxD,uBAAuBt1D,KAAKm1D,WAAW1rD,GAC5D,CACA0rD,WAAW1rD,GACP,MAAO,GAAGA,SACd,CACI5F,WACA,OAAO7D,KAAK0qD,MAAM7mD,IACtB,EAGJ,MAAM0xD,GACF70D,YAAYgqD,GACR1qD,KAAK0qD,MAAQA,CACjB,CACIhhD,cACA,OAAO1J,KAAK0qD,MAAMhhD,OACtB,CACIjE,iBACA,OAAOzF,KAAK0qD,MAAMjlD,UACtB,CACAiW,IAAI5U,GACA,MAAM2C,EAAOzJ,KAAKs1D,uBAAuBxuD,GACzC,OAAO9G,KAAK0J,QAAQG,aAAaJ,EACrC,CACAkS,IAAI7U,EAAKC,GACL,MAAM0C,EAAOzJ,KAAKs1D,uBAAuBxuD,GAEzC,OADA9G,KAAK0J,QAAQkF,aAAanF,EAAM1C,GACzB/G,KAAK0b,IAAI5U,EACpB,CACA0U,IAAI1U,GACA,MAAM2C,EAAOzJ,KAAKs1D,uBAAuBxuD,GACzC,OAAO9G,KAAK0J,QAAQuG,aAAaxG,EACrC,CACAs6B,OAAOj9B,GACH,GAAI9G,KAAKwb,IAAI1U,GAAM,CACf,MAAM2C,EAAOzJ,KAAKs1D,uBAAuBxuD,GAEzC,OADA9G,KAAK0J,QAAQic,gBAAgBlc,IACtB,CACX,CAEI,OAAO,CAEf,CACA6rD,uBAAuBxuD,GACnB,MAAO,QAAQ9G,KAAKyF,cAAcgkD,GAAU3iD,IAChD,EAGJ,MAAM0uD,GACF90D,YAAYhB,GACRM,KAAKy1D,mBAAqB,IAAI3+B,QAC9B92B,KAAKN,OAASA,CAClB,CACAujD,KAAKr8C,EAAQE,EAAKvB,GACd,IAAImwD,EAAa11D,KAAKy1D,mBAAmB/5C,IAAI9U,GACxC8uD,IACDA,EAAa,IAAIz6C,IACjBjb,KAAKy1D,mBAAmB95C,IAAI/U,EAAQ8uD,IAEnCA,EAAWl6C,IAAI1U,KAChB4uD,EAAWntD,IAAIzB,GACf9G,KAAKN,OAAOujD,KAAK19C,EAASqB,GAElC,EAGJ,SAAS+uD,GAA4Bx3B,EAAe2G,GAChD,MAAO,IAAI3G,OAAmB2G,KAClC,CAEA,MAAM8wB,GACFl1D,YAAYgqD,GACR1qD,KAAK0qD,MAAQA,CACjB,CACIhhD,cACA,OAAO1J,KAAK0qD,MAAMhhD,OACtB,CACIjE,iBACA,OAAOzF,KAAK0qD,MAAMjlD,UACtB,CACIkrD,aACA,OAAO3wD,KAAK0qD,MAAMiG,MACtB,CACAn1C,IAAIq6C,GACA,OAAgC,MAAzB71D,KAAKyoB,KAAKotC,EACrB,CACAptC,QAAQqtC,GACJ,OAAOA,EAAYt7C,QAAO,CAAC1O,EAAQ+pD,IAAe/pD,GAC3C9L,KAAK+1D,WAAWF,IAChB71D,KAAKg2D,iBAAiBH,SAAahtD,EAC9C,CACAJ,WAAWqtD,GACP,OAAOA,EAAYt7C,QAAO,CAACypC,EAAS4R,IAAe,IAC5C5R,KACAjkD,KAAKi2D,eAAeJ,MACpB71D,KAAKk2D,qBAAqBL,KAC9B,GACP,CACAE,WAAWF,GACP,MAAM7W,EAAWh/C,KAAKm2D,yBAAyBN,GAC/C,OAAO71D,KAAK0qD,MAAM0L,YAAYpX,EAClC,CACAiX,eAAeJ,GACX,MAAM7W,EAAWh/C,KAAKm2D,yBAAyBN,GAC/C,OAAO71D,KAAK0qD,MAAM2L,gBAAgBrX,EACtC,CACAmX,yBAAyBN,GAErB,OAAOF,GADe31D,KAAK2wD,OAAO2F,wBAAwBt2D,KAAKyF,YACbowD,EACtD,CACAG,iBAAiBH,GACb,MAAM7W,EAAWh/C,KAAKu2D,+BAA+BV,GACrD,OAAO71D,KAAKw2D,UAAUx2D,KAAK0qD,MAAM0L,YAAYpX,GAAW6W,EAC5D,CACAK,qBAAqBL,GACjB,MAAM7W,EAAWh/C,KAAKu2D,+BAA+BV,GACrD,OAAO71D,KAAK0qD,MAAM2L,gBAAgBrX,GAAUh3C,KAAI0B,GAAW1J,KAAKw2D,UAAU9sD,EAASmsD,IACvF,CACAU,+BAA+BV,GAC3B,MAAMY,EAAmB,GAAGz2D,KAAKyF,cAAcowD,IAC/C,OAAOF,GAA4B31D,KAAK2wD,OAAO+F,gBAAiBD,EACpE,CACAD,UAAU9sD,EAASmsD,GACf,GAAInsD,EAAS,CACT,MAAM,WAAEjE,GAAezF,KACjBm+B,EAAgBn+B,KAAK2wD,OAAO+F,gBAC5BC,EAAuB32D,KAAK2wD,OAAO2F,wBAAwB7wD,GACjEzF,KAAK42D,MAAM3T,KAAKv5C,EAAS,UAAUmsD,IAAc,kBAAkB13B,MAAkB14B,KAAcowD,WAAoBc,MAAyBd,WACrI13B,iFACf,CACA,OAAOz0B,CACX,CACIktD,YACA,OAAO52D,KAAK0qD,MAAMkM,KACtB,EAGJ,MAAMC,GACFn2D,YAAYiwD,EAAQjnD,EAASjE,EAAY/F,GACrCM,KAAKikD,QAAU,IAAI2R,GAAU51D,MAC7BA,KAAK82D,QAAU,IAAI5B,GAASl1D,MAC5BA,KAAK6D,KAAO,IAAI0xD,GAAQv1D,MACxBA,KAAK2qD,gBAAmBjhD,GACbA,EAAQytB,QAAQn3B,KAAK+2D,sBAAwB/2D,KAAK0J,QAE7D1J,KAAK2wD,OAASA,EACd3wD,KAAK0J,QAAUA,EACf1J,KAAKyF,WAAaA,EAClBzF,KAAK42D,MAAQ,IAAIpB,GAAM91D,EAC3B,CACA02D,YAAYpX,GACR,OAAOh/C,KAAK0J,QAAQkrB,QAAQoqB,GACtBh/C,KAAK0J,QACL1J,KAAKg3D,cAAchY,GAAUv2B,KAAKzoB,KAAK2qD,gBACjD,CACA0L,gBAAgBrX,GACZ,MAAO,IACAh/C,KAAK0J,QAAQkrB,QAAQoqB,GAAY,CAACh/C,KAAK0J,SAAW,MAClD1J,KAAKg3D,cAAchY,GAAUr3C,OAAO3H,KAAK2qD,iBAEpD,CACAqM,cAAchY,GACV,OAAOh1C,MAAMO,KAAKvK,KAAK0J,QAAQuF,iBAAiB+vC,GACpD,CACI+X,yBACA,OAAOpB,GAA4B31D,KAAK2wD,OAAOsG,oBAAqBj3D,KAAKyF,WAC7E,EAGJ,MAAMyxD,GACFx2D,YAAYgJ,EAASinD,EAAQ14B,GACzBj4B,KAAK0J,QAAUA,EACf1J,KAAK2wD,OAASA,EACd3wD,KAAKi4B,SAAWA,EAChBj4B,KAAKwwD,kBAAoB,IAAId,GAAkB1vD,KAAK0J,QAAS1J,KAAKi3D,oBAAqBj3D,MACvFA,KAAKm3D,4BAA8B,IAAIrgC,QACvC92B,KAAKo3D,qBAAuB,IAAItgC,OACpC,CACA/1B,QACIf,KAAKwwD,kBAAkBzvD,OAC3B,CACAO,OACItB,KAAKwwD,kBAAkBlvD,MAC3B,CACI21D,0BACA,OAAOj3D,KAAK2wD,OAAOsG,mBACvB,CACA5G,mBAAmBvrB,GACf,MAAM,QAAEp7B,EAASs1B,QAASv5B,GAAeq/B,EACnCuyB,EAAqBr3D,KAAKs3D,kCAAkC5tD,GAClE,IAAIghD,EAAQ2M,EAAmB37C,IAAIjW,GAKnC,OAJKilD,IACDA,EAAQ1qD,KAAKi4B,SAASs/B,mCAAmC7tD,EAASjE,GAClE4xD,EAAmB17C,IAAIlW,EAAYilD,IAEhCA,CACX,CACAsF,oBAAoBtmD,EAAS3C,GACzB,MAAMywD,GAAkBx3D,KAAKo3D,qBAAqB17C,IAAI3U,IAAU,GAAK,EACrE/G,KAAKo3D,qBAAqBz7C,IAAI5U,EAAOywD,GACf,GAAlBA,GACAx3D,KAAKi4B,SAASw/B,eAAe1wD,EAErC,CACAkpD,sBAAsBvmD,EAAS3C,GAC3B,MAAMywD,EAAiBx3D,KAAKo3D,qBAAqB17C,IAAI3U,GACjDywD,IACAx3D,KAAKo3D,qBAAqBz7C,IAAI5U,EAAOywD,EAAiB,GAChC,GAAlBA,GACAx3D,KAAKi4B,SAASy/B,kBAAkB3wD,GAG5C,CACAuwD,kCAAkC5tD,GAC9B,IAAI2tD,EAAqBr3D,KAAKm3D,4BAA4Bz7C,IAAIhS,GAK9D,OAJK2tD,IACDA,EAAqB,IAAIt8C,IACzB/a,KAAKm3D,4BAA4Bx7C,IAAIjS,EAAS2tD,IAE3CA,CACX,EAGJ,MAAMM,GACFj3D,YAAY6nD,GACRvoD,KAAKuoD,YAAcA,EACnBvoD,KAAK43D,cAAgB,IAAIV,GAAcl3D,KAAK0J,QAAS1J,KAAK2wD,OAAQ3wD,MAClEA,KAAKq3D,mBAAqB,IAAIzJ,GAC9B5tD,KAAK63D,oBAAsB,IAAI98C,GACnC,CACIrR,cACA,OAAO1J,KAAKuoD,YAAY7+C,OAC5B,CACIinD,aACA,OAAO3wD,KAAKuoD,YAAYoI,MAC5B,CACIjxD,aACA,OAAOM,KAAKuoD,YAAY7oD,MAC5B,CACIu3D,0BACA,OAAOj3D,KAAK2wD,OAAOsG,mBACvB,CACIa,cACA,OAAO9tD,MAAMO,KAAKvK,KAAK63D,oBAAoBp6B,SAC/C,CACIq3B,eACA,OAAO90D,KAAK83D,QAAQt9C,QAAO,CAACs6C,EAAU1/B,IAAW0/B,EAASrgD,OAAO2gB,EAAO0/B,WAAW,GACvF,CACA/zD,QACIf,KAAK43D,cAAc72D,OACvB,CACAO,OACItB,KAAK43D,cAAct2D,MACvB,CACAy2D,eAAexiC,GACXv1B,KAAKg4D,iBAAiBziC,EAAW9vB,YACjC,MAAM2vB,EAAS,IAAI6+B,GAAOj0D,KAAKuoD,YAAahzB,GAC5Cv1B,KAAKi4D,cAAc7iC,EACvB,CACA4iC,iBAAiBvyD,GACb,MAAM2vB,EAASp1B,KAAK63D,oBAAoBn8C,IAAIjW,GACxC2vB,GACAp1B,KAAKk4D,iBAAiB9iC,EAE9B,CACA+iC,kCAAkCzuD,EAASjE,GACvC,MAAM2vB,EAASp1B,KAAK63D,oBAAoBn8C,IAAIjW,GAC5C,GAAI2vB,EACA,OAAOA,EAAO0/B,SAASrsC,MAAKwuB,GAAWA,EAAQvtC,SAAWA,GAElE,CACAm/C,YAAYrkD,EAAOe,EAASs3B,GACxB78B,KAAKuoD,YAAYM,YAAYrkD,EAAOe,EAASs3B,EACjD,CACA06B,mCAAmC7tD,EAASjE,GACxC,OAAO,IAAIoxD,GAAM72D,KAAK2wD,OAAQjnD,EAASjE,EAAYzF,KAAKN,OAC5D,CACA+3D,eAAe/M,GACX1qD,KAAKq3D,mBAAmB9uD,IAAImiD,EAAMjlD,WAAYilD,GAC9C,MAAMt1B,EAASp1B,KAAK63D,oBAAoBn8C,IAAIgvC,EAAMjlD,YAC9C2vB,GACAA,EAAO2/B,uBAAuBrK,EAEtC,CACAgN,kBAAkBhN,GACd1qD,KAAKq3D,mBAAmBtzB,OAAO2mB,EAAMjlD,WAAYilD,GACjD,MAAMt1B,EAASp1B,KAAK63D,oBAAoBn8C,IAAIgvC,EAAMjlD,YAC9C2vB,GACAA,EAAO6/B,0BAA0BvK,EAEzC,CACAuN,cAAc7iC,GACVp1B,KAAK63D,oBAAoBl8C,IAAIyZ,EAAO3vB,WAAY2vB,GACjCp1B,KAAKq3D,mBAAmBnJ,gBAAgB94B,EAAO3vB,YACvDwG,SAAQy+C,GAASt1B,EAAO2/B,uBAAuBrK,IAC1D,CACAwN,iBAAiB9iC,GACbp1B,KAAK63D,oBAAoB9zB,OAAO3O,EAAO3vB,YACxBzF,KAAKq3D,mBAAmBnJ,gBAAgB94B,EAAO3vB,YACvDwG,SAAQy+C,GAASt1B,EAAO6/B,0BAA0BvK,IAC7D,EAGJ,MAAM0N,GAAgB,CAClBnB,oBAAqB,kBACrBxG,gBAAiB,cACjBiG,gBAAiB,cACjBJ,wBAAyB7wD,GAAc,QAAQA,YAGnD,MAAM4yD,GACF33D,YAAYgJ,EAAU7G,SAASkU,gBAAiB45C,EAASyH,IACrDp4D,KAAKN,OAASE,QACdI,KAAKs4D,OAAQ,EACbt4D,KAAKyqD,iBAAmB,CAAChlD,EAAYotD,EAAch2B,EAAS,CAAC,KACrD78B,KAAKs4D,OACLt4D,KAAKu4D,oBAAoB9yD,EAAYotD,EAAch2B,EACvD,EAEJ78B,KAAK0J,QAAUA,EACf1J,KAAK2wD,OAASA,EACd3wD,KAAKgzD,WAAa,IAAI1K,GAAWtoD,MACjCA,KAAKw4D,OAAS,IAAIb,GAAO33D,KAC7B,CACA0iC,aAAah5B,EAASinD,GAClB,MAAMpI,EAAc,IAAI8P,GAAY3uD,EAASinD,GAE7C,OADApI,EAAYxnD,QACLwnD,CACX,CACAhsB,oBAgDO,IAAI5d,SAAQC,IACY,WAAvB/b,SAASoC,WACTpC,SAASzB,iBAAiB,oBAAoB,IAAMwd,MAGpDA,GACJ,IApDA5e,KAAKyqD,iBAAiB,cAAe,YACrCzqD,KAAKgzD,WAAWjyD,QAChBf,KAAKw4D,OAAOz3D,QACZf,KAAKyqD,iBAAiB,cAAe,QACzC,CACAnpD,OACItB,KAAKyqD,iBAAiB,cAAe,YACrCzqD,KAAKgzD,WAAW1xD,OAChBtB,KAAKw4D,OAAOl3D,OACZtB,KAAKyqD,iBAAiB,cAAe,OACzC,CACAgO,SAAShzD,EAAYqtD,GACjB9yD,KAAK04D,KAAK,CAAEjzD,aAAYqtD,yBAC5B,CACA4F,KAAK/uD,KAASgvD,IACU3uD,MAAMC,QAAQN,GAAQA,EAAO,CAACA,KAASgvD,IAC/C1sD,SAAQspB,IACZA,EAAWu9B,sBAAsB8F,YACjC54D,KAAKw4D,OAAOT,eAAexiC,EAC/B,GAER,CACAsjC,OAAOlvD,KAASgvD,IACQ3uD,MAAMC,QAAQN,GAAQA,EAAO,CAACA,KAASgvD,IAC/C1sD,SAAQxG,GAAczF,KAAKw4D,OAAOR,iBAAiBvyD,IACnE,CACIqzD,kBACA,OAAO94D,KAAKw4D,OAAO1D,SAAS9sD,KAAIivC,GAAWA,EAAQkT,YACvD,CACA4O,qCAAqCrvD,EAASjE,GAC1C,MAAMwxC,EAAUj3C,KAAKw4D,OAAOL,kCAAkCzuD,EAASjE,GACvE,OAAOwxC,EAAUA,EAAQkT,WAAa,IAC1C,CACAtB,YAAYrkD,EAAOe,EAASs3B,GACxB,IAAIzD,EACJp5B,KAAKN,OAAO8E,MAAM,iBAAkBe,EAASf,EAAOq4B,GAC1B,QAAzBzD,EAAK3pB,OAAOupD,eAA4B,IAAP5/B,GAAyBA,EAAGt0B,KAAK2K,OAAQlK,EAAS,GAAI,EAAG,EAAGf,EAClG,CACA+zD,oBAAoB9yD,EAAYotD,EAAch2B,EAAS,CAAC,GACpDA,EAASjyB,OAAOiS,OAAO,CAAE0rC,YAAavoD,MAAQ68B,GAC9C78B,KAAKN,OAAOu5D,eAAe,GAAGxzD,MAAeotD,KAC7C7yD,KAAKN,OAAOI,IAAI,WAAY8K,OAAOiS,OAAO,CAAC,EAAGggB,IAC9C78B,KAAKN,OAAOw5D,UAChB,EA6HJ,SAASC,IAA0Br0B,EAAOs0B,GAAiBjP,GACvD,OA4DJ,SAAkDkP,GAC9C,MAAMvyD,EAAM,GAAG2iD,GAAU4P,EAAQv0B,eAC3Bl/B,EAzBV,SAAkCyzD,GAC9B,MAAMC,EAZV,SAA8BD,GAC1B,MAAMC,EAAiBC,GAAuBF,EAAQG,WAAW5zD,MACjE,IAAK0zD,EACD,OACJ,MAAMG,EAAmBC,GAAsBL,EAAQG,WAAWG,SAClE,GAAIL,IAAmBG,EAAkB,CAErC,MAAM,IAAI7zB,MAAM,uDADKyzB,EAAQlP,WAAa,GAAGkP,EAAQlP,cAAckP,EAAQv0B,QAAUu0B,EAAQv0B,uCACwBw0B,sCAAmDD,EAAQG,WAAWG,wBAAwBF,MACvN,CACA,OAAOH,CACX,CAE2BM,CAAqB,CACxCzP,WAAYkP,EAAQlP,WACpBrlB,MAAOu0B,EAAQv0B,MACf00B,WAAYH,EAAQD,iBAElBS,EAAuBH,GAAsBL,EAAQD,gBACrDU,EAAmBP,GAAuBF,EAAQD,gBAClDxzD,EAAO0zD,GAAkBO,GAAwBC,EACvD,GAAIl0D,EACA,OAAOA,EAEX,MAAM,IAAIggC,MAAM,uBADKyzB,EAAQlP,WAAa,GAAGkP,EAAQlP,cAAckP,EAAQD,iBAAmBC,EAAQv0B,eACzCu0B,EAAQv0B,eACzE,CAYiBi1B,CAAyBV,GACtC,MAAO,CACHzzD,OACAkB,MACA2C,KAAM4/C,GAASviD,GACXgnC,mBAAiB,OAhB7B,SAAmCsrB,GAC/B,MAAMY,EAAWT,GAAuBH,GACxC,GAAIY,EACA,OAAOC,GAAoBD,GAC/B,MAAMlsB,EAAesrB,EAAeO,QACpC,YAAqB9wD,IAAjBilC,EACOA,EACJsrB,CACX,CAQoCc,CAA0Bb,EAAQD,eAAiB,EAC3Ee,4BAA0B,YAAyDtxD,IAAlD6wD,GAAsBL,EAAQD,eAA+B,EAClGlH,OAAQkI,GAAQx0D,GAChB+rD,OAAQ0I,GAAQz0D,IAASy0D,GAAQV,QAEzC,CAxEWW,CAAyC,CAC5CnQ,aACArlB,QACAs0B,kBAER,CACA,SAASG,GAAuBS,GAC5B,OAAQA,GACJ,KAAKhwD,MAAO,MAAO,QACnB,KAAKuwD,QAAS,MAAO,UACrB,KAAKC,OAAQ,MAAO,SACpB,KAAK5vD,OAAQ,MAAO,SACpB,KAAK6vD,OAAQ,MAAO,SAE5B,CACA,SAASf,GAAsB5rB,GAC3B,cAAeA,GACX,IAAK,UAAW,MAAO,UACvB,IAAK,SAAU,MAAO,SACtB,IAAK,SAAU,MAAO,SAE1B,OAAI9jC,MAAMC,QAAQ6jC,GACP,QAC0C,oBAAjDljC,OAAOtF,UAAUuF,SAAS/F,KAAKgpC,GACxB,cADX,CAEJ,CAgDA,MAAMmsB,GAAsB,CACpBS,YAAU,MAAO,EAAI,EACzBC,SAAS,EACTC,OAAQ,EACJh0D,aAAW,MAAO,CAAC,CAAG,EAC1B+2B,OAAQ,IAENy8B,GAAU,CACZM,MAAM3zD,GACF,MAAM2zD,EAAQ32D,KAAK8B,MAAMkB,GACzB,IAAKiD,MAAMC,QAAQywD,GACf,MAAM,IAAI3vD,UAAU,yDAAyDhE,eAAmB2yD,GAAsBgB,OAE1H,OAAOA,CACX,EACAC,QAAQ5zD,KACc,KAATA,GAA+C,SAA/B0zD,OAAO1zD,GAAO7B,eAE3C01D,OAAO7zD,GACIyzD,OAAOzzD,GAElBH,OAAOG,GACH,MAAMH,EAAS7C,KAAK8B,MAAMkB,GAC1B,GAAe,OAAXH,GAAoC,iBAAVA,GAAsBoD,MAAMC,QAAQrD,GAC9D,MAAM,IAAImE,UAAU,0DAA0DhE,eAAmB2yD,GAAsB9yD,OAE3H,OAAOA,CACX,EACA+2B,OAAO52B,GACIA,GAGTszD,GAAU,CACZV,QAOJ,SAAqB5yD,GACjB,MAAO,GAAGA,GACd,EARI2zD,MAAOG,GACPj0D,OAAQi0D,IAEZ,SAASA,GAAU9zD,GACf,OAAOhD,KAAKC,UAAU+C,EAC1B,CAKA,MAAM,GACFrG,YAAYu2C,GACRj3C,KAAKi3C,QAAUA,CACnB,CACW2hB,wBACP,OAAO,CACX,CACIrQ,kBACA,OAAOvoD,KAAKi3C,QAAQsR,WACxB,CACImC,YACA,OAAO1qD,KAAKi3C,QAAQyT,KACxB,CACIhhD,cACA,OAAO1J,KAAK0qD,MAAMhhD,OACtB,CACIjE,iBACA,OAAOzF,KAAK0qD,MAAMjlD,UACtB,CACIw+C,cACA,OAAOjkD,KAAK0qD,MAAMzG,OACtB,CACI6S,cACA,OAAO92D,KAAK0qD,MAAMoM,OACtB,CACIjzD,WACA,OAAO7D,KAAK0qD,MAAM7mD,IACtB,CACAsvD,aACA,CACAlqD,UACA,CACAjD,aACA,CACA22B,SAASx3B,GAAW,OAAE2G,EAAS9L,KAAK0J,QAAO,OAAEmzB,EAAS,CAAC,EAAC,OAAE3C,EAASl6B,KAAKyF,WAAU,QAAEs3B,GAAU,EAAI,WAAEH,GAAa,GAAS,CAAC,GACvH,MACMp3B,EAAQ,IAAIs3B,YADL5C,EAAS,GAAGA,KAAU/0B,IAAcA,EACb,CAAE03B,SAAQE,UAASH,eAEvD,OADA9wB,EAAOmxB,cAAcz3B,GACdA,CACX,EAEJ,GAAWs1D,UAAY,CA/QvB,SAAiCp6D,GAE7B,OADgB2yD,GAAiC3yD,EAAa,WAC/C8Z,QAAO,CAAC3T,EAAYk0D,KAC/B,OAAOnwD,OAAOiS,OAAOhW,EAIlB,CACH,CAAC,GAF6BC,EAHgCi0D,UAK7C,CACbr/C,MACI,MAAM,QAAEo7C,GAAY92D,KACpB,GAAI82D,EAAQt7C,IAAI1U,GACZ,OAAOgwD,EAAQp7C,IAAI5U,GAElB,CACD,MAAMif,EAAY+wC,EAAQzB,iBAAiBvuD,GAC3C,MAAM,IAAI8+B,MAAM,sBAAsB7f,KAC1C,CACJ,GAEJ,CAAC,GAAGjf,YAAe,CACf4U,MACI,OAAO1b,KAAK82D,QAAQ1B,OAAOtuD,EAC/B,GAEJ,CAAC,MAAMyiD,GAAWziD,WAAc,CAC5B4U,MACI,OAAO1b,KAAK82D,QAAQt7C,IAAI1U,EAC5B,KAtBZ,IAAsCA,CAHiD,GAChF,CAAC,EACR,EA4BA,SAAkCpG,GAE9B,OADgB2yD,GAAiC3yD,EAAa,WAC/C8Z,QAAO,CAAC3T,EAAYm0D,KAC/B,OAAOpwD,OAAOiS,OAAOhW,EAIlB,CACH,CAAC,GAF8B4C,EAHgCuxD,WAK5C,CACft/C,MACI,MAAM5P,EAAS9L,KAAKikD,QAAQx7B,KAAKhf,GACjC,GAAIqC,EACA,OAAOA,EAGP,MAAM,IAAI85B,MAAM,2BAA2Bn8B,WAAczJ,KAAKyF,yBAEtE,GAEJ,CAAC,GAAGgE,YAAgB,CAChBiS,MACI,OAAO1b,KAAKikD,QAAQx7C,QAAQgB,EAChC,GAEJ,CAAC,MAAM8/C,GAAW9/C,YAAgB,CAC9BiS,MACI,OAAO1b,KAAKikD,QAAQzoC,IAAI/R,EAC5B,KArBZ,IAAuCA,CAHkD,GAClF,CAAC,EACR,EA2BA,SAAiC/I,GAC7B,MAAMu6D,EAxmBV,SAA0Cv6D,EAAa4yD,GAEnD,OADkBE,GAA2B9yD,GAC5B8Z,QAAO,CAAC0gD,EAAOx6D,KAC5Bw6D,EAAMh7D,QAgBd,SAAiCQ,EAAa4yD,GAC1C,MAAM/9B,EAAa70B,EAAY4yD,GAC/B,OAAO/9B,EAAa3qB,OAAOU,KAAKiqB,GAAYvtB,KAAIlB,GAAO,CAACA,EAAKyuB,EAAWzuB,MAAS,EACrF,CAnBsBq0D,CAAwBz6D,EAAa4yD,IAC5C4H,IACR,GACP,CAkmBiCE,CAAiC16D,EAAa,UACrE26D,EAAwB,CAC1B7J,mBAAoB,CAChB91C,MACI,OAAOu/C,EAAqBzgD,QAAO,CAACU,EAAQogD,KACxC,MAAMC,EAAkBpC,GAAyBmC,EAAqBt7D,KAAKyF,YACrE04B,EAAgBn+B,KAAK6D,KAAKyxD,uBAAuBiG,EAAgBz0D,KACvE,OAAO8D,OAAOiS,OAAO3B,EAAQ,CAAE,CAACijB,GAAgBo9B,GAAkB,GACnE,CAAC,EACR,IAGR,OAAON,EAAqBzgD,QAAO,CAAC3T,EAAYy0D,IACrC1wD,OAAOiS,OAAOhW,EAG7B,SAA0Cy0D,EAAqBnR,GAC3D,MAAM50B,EAAa4jC,GAAyBmC,OAJPE,IAK/B,IAAE10D,EAAG,KAAE2C,EAAMyoD,OAAQ/T,EAAMwT,OAAQtT,GAAU9oB,EACnD,MAAO,CACH,CAAC9rB,GAAO,CACJiS,MACI,MAAM3U,EAAQ/G,KAAK6D,KAAK6X,IAAI5U,GAC5B,OAAc,OAAVC,EACOo3C,EAAKp3C,GAGLwuB,EAAWuY,YAE1B,EACAnyB,IAAI5U,QACc8B,IAAV9B,EACA/G,KAAK6D,KAAKkgC,OAAOj9B,GAGjB9G,KAAK6D,KAAK8X,IAAI7U,EAAKu3C,EAAMt3C,GAEjC,GAEJ,CAAC,MAAMwiD,GAAW9/C,MAAU,CACxBiS,MACI,OAAO1b,KAAK6D,KAAK2X,IAAI1U,IAAQyuB,EAAW4kC,qBAC5C,GAGZ,CAhCyCqB,CAAiCF,KACnED,EACP,GA+LA,GAAWpX,QAAU,GACrB,GAAWxmB,OAAS,CAAC,ECj7DrB,MAAMg+B,GAAiB,uCAGR,MAAMC,WAAqB,GACxCh5B,eAAiB,CAAC,QAAS,SAAU,WACrCA,eAAiB,CAAC,YAClBA,cAAgB,CACdi5B,MAAOpB,QACPqB,cAAerB,QACfn2D,IAAKq2D,OACLoB,UAAWrB,OACX1Z,MAAO,CAAEl7C,KAAM40D,OAAQb,QAAS,MAGlC1wD,UACEjJ,KAAKsE,QAEDtE,KAAK87D,YAAY7rD,aAAa,iBAAiBjQ,KAAK87D,YAAYltD,aAAa,eAAgB,OACjG5O,KAAK87D,YAAYltD,aAAa,aAAc,SAE5C5O,KAAK+7D,WAAY,EAEjB/7D,KAAKg8D,cAAgBC,GAASj8D,KAAKg8D,cAAeh8D,KAAKk8D,YAEvDl8D,KAAK87D,YAAY16D,iBAAiB,UAAWpB,KAAKm8D,WAClDn8D,KAAK87D,YAAY16D,iBAAiB,OAAQpB,KAAKo8D,aAC/Cp8D,KAAK87D,YAAY16D,iBAAiB,QAASpB,KAAKg8D,eAChDh8D,KAAKq8D,cAAcj7D,iBAAiB,YAAapB,KAAKs8D,oBACtDt8D,KAAKq8D,cAAcj7D,iBAAiB,QAASpB,KAAKu8D,gBAE9Cv8D,KAAK87D,YAAY7rD,aAAa,cAChCjQ,KAAK87D,YAAY3zB,QAGnBnoC,KAAKw8D,YAAa,CACpB,CAEAx2D,aACMhG,KAAKy8D,iBACPz8D,KAAK87D,YAAYt6D,oBAAoB,UAAWxB,KAAKm8D,WACrDn8D,KAAK87D,YAAYt6D,oBAAoB,OAAQxB,KAAKo8D,aAClDp8D,KAAK87D,YAAYt6D,oBAAoB,QAASxB,KAAKg8D,gBAGjDh8D,KAAK08D,mBACP18D,KAAKq8D,cAAc76D,oBAAoB,YAAaxB,KAAKs8D,oBACzDt8D,KAAKq8D,cAAc76D,oBAAoB,QAASxB,KAAKu8D,gBAEzD,CAEAI,QAAQ9pD,GACN,MAAMrF,EAAUxN,KAAKwN,QACf8jC,EAAWtxC,KAAK48D,eAChBp+C,EAAQhR,EAAQnK,QAAQiuC,GACxBqrB,EAAU9pD,EAAOrF,EAAQgR,EAAQ,GAAKhR,EAAQgR,EAAQ,GACtDq+C,EAAMhqD,EAAOrF,EAAQ,GAAKA,EAAQA,EAAQpK,OAAS,GACzD,OAAOu5D,GAAWE,CACpB,CAEAC,OAAOhxD,GACL,MAAMixD,EAAqB/8D,KAAK48D,eAC5BG,IACFA,EAAmBp3C,gBAAgB,iBACnCo3C,EAAmBtuD,UAAUpH,UAAUrH,KAAKg9D,2BAG9ClxD,EAAO8C,aAAa,gBAAiB,QACrC9C,EAAO2C,UAAUlG,OAAOvI,KAAKg9D,0BAC7Bh9D,KAAK87D,YAAYltD,aAAa,wBAAyB9C,EAAOkC,IAC9DlC,EAAOo8B,eAAe,CAAE2F,SAAU,SAAUD,MAAO,WACrD,CAEAuuB,UAAa32D,IACX,MAAMH,EAAUrF,KAAK,KAAKwF,EAAMsB,cAC5BzB,GAASA,EAAQG,EAAK,EAG5By3D,gBAAmBz3D,IACZxF,KAAKk9D,eAEVl9D,KAAKm9D,uBACL33D,EAAM6kD,kBACN7kD,EAAMgiC,iBAAe,EAGvB41B,mBAAsB53D,IACpB,MAAMsI,EAAO9N,KAAK28D,SAAQ,GACtB7uD,GAAM9N,KAAK88D,OAAOhvD,GACtBtI,EAAMgiC,gBAAe,EAGvB61B,iBAAoB73D,IAClB,MAAMsI,EAAO9N,KAAK28D,SAAQ,GACtB7uD,GAAM9N,KAAK88D,OAAOhvD,GACtBtI,EAAMgiC,gBAAe,EAGvB81B,aAAgB93D,IACd,MAAM8rC,EAAWtxC,KAAK48D,eAClBtrB,GAAUtxC,KAAKu9D,OAAOjsB,EAAQ,EAGpCksB,eAAkBh4D,IAChB,MAAM8rC,EAAWtxC,KAAK48D,eAClBtrB,GAAYtxC,KAAKk9D,eACnBl9D,KAAKu9D,OAAOjsB,GACPtxC,KAAKy9D,uBACRj4D,EAAMgiC,iBAEV,EAGF40B,YAAc,KACRp8D,KAAK+7D,WACT/7D,KAAKsE,OAAM,EAGbi5D,OAAOjsB,GACL,GAA+C,SAA3CA,EAASznC,aAAa,iBAA6B,OAEvD,GAAIynC,aAAoBosB,kBAGtB,OAFApsB,EAAS9a,aACTx2B,KAAKsE,QAIP,MAAMq5D,EAAYrsB,EAASznC,aAAa,4BAA8BynC,EAAShV,YAAYmiB,OACrF13C,EAAQuqC,EAASznC,aAAa,4BAA8B8zD,EAClE39D,KAAK87D,YAAY/0D,MAAQ42D,EAErB39D,KAAK49D,iBACP59D,KAAK69D,aAAa92D,MAAQA,EAC1B/G,KAAK69D,aAAa5gC,cAAc,IAAItF,MAAM,UAC1C33B,KAAK69D,aAAa5gC,cAAc,IAAItF,MAAM,YAE1C33B,KAAK87D,YAAY/0D,MAAQA,EAG3B/G,KAAK87D,YAAY3zB,QACjBnoC,KAAKm9D,uBAELn9D,KAAK0J,QAAQuzB,cACX,IAAIH,YAAY,sBAAuB,CACrCC,SAAS,EACTF,OAAQ,CAAE91B,MAAOA,EAAO42D,UAAWA,EAAWrsB,SAAUA,KAG9D,CAEAgN,QACEt+C,KAAK87D,YAAY/0D,MAAQ,GACrB/G,KAAK49D,kBAAiB59D,KAAK69D,aAAa92D,MAAQ,GACtD,CAEAw1D,eAAkB/2D,IAChB,KAAMA,EAAMsG,kBAAkBkJ,SAAU,OACxC,MAAMs8B,EAAW9rC,EAAMsG,OAAOqrB,QAAQskC,IAClCnqB,GAAUtxC,KAAKu9D,OAAOjsB,EAAQ,EAGpCgrB,mBAAqB,KACnBt8D,KAAK+7D,WAAY,EACjB/7D,KAAKq8D,cAAcj7D,iBAAiB,WAAW,KAC7CpB,KAAK+7D,WAAY,IAChB,CAAEr9B,MAAM,GAAM,EAGnBs9B,cAAgB,KACdh8D,KAAK0J,QAAQic,gBAAgB,SACzB3lB,KAAK49D,kBAAiB59D,KAAK69D,aAAa92D,MAAQ,IAEpD,MAAM+2D,EAAQ99D,KAAK87D,YAAY/0D,MAAM03C,OACjCqf,GAASA,EAAM16D,QAAUpD,KAAK+9D,eAChC/9D,KAAKg+D,aAAaF,GAElB99D,KAAKm9D,sBACP,EAGFc,kBACE,IAAIjwD,EAAK,EACgBhO,KAAKq8D,cAAcptD,iBAAiB,GAAGwsD,gBAC/CxvD,SAASkD,IACxBA,EAAGnB,GAAK,GAAGhO,KAAKq8D,cAAcruD,aAAaA,KAAI,GAEnD,CAEAmvD,uBACEn9D,KAAKsE,QACLtE,KAAKq8D,cAAcz5B,UAAY,IACjC,CAEAo7B,aAAezhC,MAAOuhC,IACpB,IAAK99D,KAAKk+D,YAAa,OAEvB,MAAM95D,EAAMpE,KAAKm+D,SAASL,GAC1B,IACE99D,KAAK0J,QAAQuzB,cAAc,IAAIH,YAAY,cAC3C,MAAM/a,QAAa/hB,KAAKo+D,QAAQh6D,GAChCpE,KAAKq+D,eAAet8C,GACpB/hB,KAAK0J,QAAQuzB,cAAc,IAAIH,YAAY,SAC3C98B,KAAK0J,QAAQuzB,cAAc,IAAIH,YAAY,WAK7C,CAJE,MAAMt4B,GAGN,MAFAxE,KAAK0J,QAAQuzB,cAAc,IAAIH,YAAY,UAC3C98B,KAAK0J,QAAQuzB,cAAc,IAAIH,YAAY,YACrCt4B,CACR,GAGF25D,SAASL,GACP,MAAM15D,EAAM,IAAIo1B,IAAIx5B,KAAKs+D,SAAU7uD,OAAOsqB,SAAS1wB,MAC7C3C,EAAS,IAAIy4B,gBAAgB/6B,EAAIk/B,OAAOngC,MAAM,IAIpD,OAHAuD,EAAOooB,OAAO,IAAKgvC,GACnB15D,EAAIk/B,OAAS58B,EAAOmE,WAEbzG,EAAIyG,UACb,CAEAuzD,QAAU7hC,MAAOn4B,IACf,MAAM22B,QAAiBkF,MAAM77B,EAAKpE,KAAKu+D,mBAEvC,aADmBxjC,EAASc,MACrB9Z,EAGTs8C,eAAet8C,GACb/hB,KAAKq8D,cAAcz5B,UAAY7gB,EAC/B/hB,KAAKi+D,kBACCj+D,KAAKwN,QACTxN,KAAKwD,OAELxD,KAAKsE,OAET,CAEAd,OACMxD,KAAKk9D,eAETl9D,KAAKk9D,cAAe,EACpBl9D,KAAK0J,QAAQkF,aAAa,gBAAiB,QAC3C5O,KAAK0J,QAAQuzB,cACX,IAAIH,YAAY,SAAU,CACxBD,OAAQ,CAAE31B,OAAQ,OAAQ40D,YAAa97D,KAAK87D,YAAaO,cAAer8D,KAAKq8D,kBAGnF,CAEA/3D,QACOtE,KAAKk9D,eAEVl9D,KAAKk9D,cAAe,EACpBl9D,KAAK87D,YAAYn2C,gBAAgB,yBACjC3lB,KAAK0J,QAAQkF,aAAa,gBAAiB,SAC3C5O,KAAK0J,QAAQuzB,cACX,IAAIH,YAAY,SAAU,CACxBD,OAAQ,CAAE31B,OAAQ,QAAS40D,YAAa97D,KAAK87D,YAAaO,cAAer8D,KAAKq8D,kBAGpF,CAEIa,mBACF,OAAQl9D,KAAKq8D,cAAc5lC,MAC7B,CAEIymC,iBAAan2D,GACf/G,KAAKq8D,cAAc5lC,QAAU1vB,CAC/B,CAEIyG,cACF,OAAOxD,MAAMO,KAAKvK,KAAKq8D,cAAcptD,iBAAiBwsD,IACxD,CAEImB,qBACF,OAAO58D,KAAKq8D,cAAczyD,cA/QP,yBAgRrB,CAEIozD,+BACF,OAAOh9D,KAAKw+D,iBAAmBx+D,KAAKy+D,gBAAkB,CAAC,SACzD,CAEAF,kBACE,MAAO,CAAExiC,QAAS,CAAE,mBAAoB,kBAC1C,EAGF,MAAMkgC,GAAW,CAACv/C,EAAIokC,EAAQ,MAC5B,IAAI4d,EAAY,KAEhB,MAAO,IAAI91D,KACT7G,aAAa28D,GACbA,EAAYz8D,WAAWya,EAAIokC,EAAK,CAClC,ECpSF,SAAS,GAAS/5C,GAChB,OAAOA,EAAMuC,QAAQ,uBAAuB,CAAC20B,EAAGqrB,IAASA,EAAK3oB,eAChE,CACA,SAAS,GAAW55B,GAClB,OAAOA,EAAMyiD,OAAO,GAAG7oB,cAAgB55B,EAAM5D,MAAM,EACrD,CAIA,SAAS,GAAiCzC,EAAa4yD,GACrD,MAAMC,EAAY,GAA2B7yD,GAC7C,OAAOsJ,MAAMO,KAAKgpD,EAAU/4C,QAAO,CAACijB,EAAQkhC,KAoB9C,SAAiCj+D,EAAa4yD,GAC5C,MAAM/9B,EAAa70B,EAAY4yD,GAC/B,OAAOtpD,MAAMC,QAAQsrB,GAAcA,EAAa,EAClD,CAtBI,CAAwBopC,EAAcrL,GAAcrnD,SAASxC,GAASg0B,EAAOl1B,IAAIkB,KAC1Eg0B,IACN,IAAIxiB,KACT,CAQA,SAAS,GAA2Bva,GAClC,MAAM6yD,EAAY,GAClB,KAAO7yD,GACL6yD,EAAUrzD,KAAKQ,GACfA,EAAckK,OAAO8oD,eAAehzD,GAEtC,OAAO6yD,EAAUI,SACnB,CA+IA,SAAS,IAA0B7uB,EAAOs0B,IACxC,OA0DF,SAAkDt0B,EAAOs0B,GACvD,MAAMtyD,EAAM,GAnOKC,EAmOQ+9B,EAlOlB/9B,EAAMuC,QAAQ,YAAY,CAAC20B,EAAGqrB,IAAS,IAAIA,EAAKpkD,0BAmOjDU,EApBR,SAAkCwzD,GAChC,MAAME,EAXR,SAA8BE,GAC5B,MAAMF,EAAiB,GAAuBE,EAAW5zD,MACzD,GAAI0zD,EAAgB,CAClB,MAAMG,EAAmB,GAAsBD,EAAWG,SAC1D,GAAIL,IAAmBG,EACrB,MAAM,IAAI7zB,MAAM,SAAS0zB,sEAAmFE,EAAWG,gBAAgBF,MAEzI,OAAOH,CACT,CACF,CAEyB,CAAqBF,GACtCS,EAAuB,GAAsBT,GAC7CU,EAAmB,GAAuBV,GAC1CxzD,EAAO0zD,GAAkBO,GAAwBC,EACvD,GAAIl0D,EACF,OAAOA,EACT,MAAM,IAAIggC,MAAM,uBAAuBwzB,KACzC,CAYe,CAAyBA,GApOxC,IAAmBryD,EAqOjB,MAAO,CACLnB,OACAkB,MACA2C,KAAM,GAAS3C,GACXgnC,mBACF,OAjBN,SAAmCsrB,GACjC,MAAMY,EAAW,GAAuBZ,GACxC,GAAIY,EACF,OAAO,GAAoBA,GAC7B,MAAMlsB,EAAesrB,EAAeO,QACpC,YAAqB,IAAjB7rB,EACKA,EACFsrB,CACT,CASa,CAA0BA,EACnC,EACIe,4BACF,YAAiD,IAA1C,GAAsBf,EAC/B,EACAlH,OAAQ,GAAQtsD,GAChB+rD,OAAQ,GAAQ/rD,IAAS,GAAQ+zD,QAErC,CA1ES,CAAyC70B,EAAOs0B,EACzD,CACA,SAAS,GAAuBY,GAC9B,OAAQA,GACN,KAAKhwD,MACH,MAAO,QACT,KAAKuwD,QACH,MAAO,UACT,KAAKC,OACH,MAAO,SACT,KAAK5vD,OACH,MAAO,SACT,KAAK6vD,OACH,MAAO,SAEb,CACA,SAAS,GAAsB3sB,GAC7B,cAAeA,GACb,IAAK,UACH,MAAO,UACT,IAAK,SACH,MAAO,SACT,IAAK,SACH,MAAO,SAEX,OAAI9jC,MAAMC,QAAQ6jC,GACT,QAC4C,oBAAjDljC,OAAOtF,UAAUuF,SAAS/F,KAAKgpC,GAC1B,cADT,CAEF,CApKA,MAoBE,KATA,WACE,MAGMtmB,EAdR,SAA2B9mB,GACzB,SAASqzD,IACP,OAAOp+B,QAAQI,UAAUr1B,EAAaqL,qBACxC,CAKA,OAJAgoD,EAASzuD,UAAYsF,OAAOxC,OAAO1H,EAAY4E,UAAW,CACxD5E,YAAa,CAAEqG,MAAOgtD,KAExBp+B,QAAQK,eAAe+9B,EAAUrzD,GAC1BqzD,CACT,CAKYD,EAHA,WACR9zD,KAAKmJ,EAAErE,KAAK9E,KACd,IAEAwnB,EAAEliB,UAAU6D,EAAI,WAChB,EACO,IAAIqe,CACb,CAEEwsC,EAKF,CAHE,MAAOxvD,GACP,OAAQ9D,GAAgB,cAAuBA,GAEjD,CACD,EA3BD,GAkNA,MAAM,GAAsB,CACtBg6D,YACF,MAAO,EACT,EACAC,SAAS,EACTC,OAAQ,EACJh0D,aACF,MAAO,CAAC,CACV,EACA+2B,OAAQ,IAEJ,GAAU,CACd+8B,MAAM3zD,GACJ,MAAM2zD,EAAQ32D,KAAK8B,MAAMkB,GACzB,IAAKiD,MAAMC,QAAQywD,GACjB,MAAM,IAAI3vD,UAAU,kBAEtB,OAAO2vD,CACT,EACAC,QAAQ5zD,KACY,KAATA,GAAyB,SAATA,GAE3B6zD,OAAO7zD,GACEyzD,OAAOzzD,GAEhBH,OAAOG,GACL,MAAMH,EAAS7C,KAAK8B,MAAMkB,GAC1B,GAAe,OAAXH,GAAoC,iBAAVA,GAAsBoD,MAAMC,QAAQrD,GAChE,MAAM,IAAImE,UAAU,mBAEtB,OAAOnE,CACT,EACA+2B,OAAO52B,GACEA,GAGL,GAAU,CACd4yD,QAOF,SAAqB5yD,GACnB,MAAO,GAAGA,GACZ,EARE2zD,MAAO,GACP9zD,OAAQ,IAEV,SAAS,GAAUG,GACjB,OAAOhD,KAAKC,UAAU+C,EACxB,CAIA,MAAM,GACJrG,YAAYu2C,GACVj3C,KAAKi3C,QAAUA,CACjB,CACW2hB,wBACT,OAAO,CACT,CACIrQ,kBACF,OAAOvoD,KAAKi3C,QAAQsR,WACtB,CACImC,YACF,OAAO1qD,KAAKi3C,QAAQyT,KACtB,CACIhhD,cACF,OAAO1J,KAAK0qD,MAAMhhD,OACpB,CACIjE,iBACF,OAAOzF,KAAK0qD,MAAMjlD,UACpB,CACIw+C,cACF,OAAOjkD,KAAK0qD,MAAMzG,OACpB,CACI6S,cACF,OAAO92D,KAAK0qD,MAAMoM,OACpB,CACIjzD,WACF,OAAO7D,KAAK0qD,MAAM7mD,IACpB,CACAsvD,aACA,CACAlqD,UACA,CACAjD,aACA,CACA22B,SAASx3B,GAAW,OAAE2G,EAAS9L,KAAK0J,QAAO,OAAEmzB,EAAS,CAAC,EAAC,OAAE3C,EAASl6B,KAAKyF,WAAU,QAAEs3B,GAAU,EAAI,WAAEH,GAAa,GAAS,CAAC,GACzH,MACMp3B,EAAQ,IAAIs3B,YADL5C,EAAS,GAAGA,KAAU/0B,IAAcA,EACb,CAAE03B,SAAQE,UAASH,eAEvD,OADA9wB,EAAOmxB,cAAcz3B,GACdA,CACT,EAEF,GAAWs1D,UAAY,CA9QvB,SAAiCp6D,GAE/B,OADgB,GAAiCA,EAAa,WAC/C8Z,QAAO,CAAC3T,EAAYk0D,KACjC,OAAOnwD,OAAOiS,OAAOhW,EAIhB,CACL,CAAC,GAFiCC,EAH4Bi0D,UAK7C,CACfr/C,MACE,MAAM,QAAEo7C,GAAY92D,KACpB,GAAI82D,EAAQt7C,IAAI1U,GACd,OAAOgwD,EAAQp7C,IAAI5U,GACd,CACL,MAAMif,EAAY+wC,EAAQzB,iBAAiBvuD,GAC3C,MAAM,IAAI8+B,MAAM,sBAAsB7f,KACxC,CACF,GAEF,CAAC,GAAGjf,YAAe,CACjB4U,MACE,OAAO1b,KAAK82D,QAAQ1B,OAAOtuD,EAC7B,GAEF,CAAC,MAAM,GAAWA,WAAc,CAC9B4U,MACE,OAAO1b,KAAK82D,QAAQt7C,IAAI1U,EAC1B,KArBN,IAAsCA,CAH6C,GAC9E,CAAC,EACN,EA0BA,SAAkCpG,GAEhC,OADgB,GAAiCA,EAAa,WAC/C8Z,QAAO,CAAC3T,EAAYm0D,KACjC,OAAOpwD,OAAOiS,OAAOhW,EAIhB,CACL,CAAC,GAFkC4C,EAH4BuxD,WAK5C,CACjBt/C,MACE,MAAM5P,EAAS9L,KAAKikD,QAAQx7B,KAAKhf,GACjC,GAAIqC,EACF,OAAOA,EAEP,MAAM,IAAI85B,MAAM,2BAA2Bn8B,WAAczJ,KAAKyF,yBAElE,GAEF,CAAC,GAAGgE,YAAgB,CAClBiS,MACE,OAAO1b,KAAKikD,QAAQx7C,QAAQgB,EAC9B,GAEF,CAAC,MAAM,GAAWA,YAAgB,CAChCiS,MACE,OAAO1b,KAAKikD,QAAQzoC,IAAI/R,EAC1B,KApBN,IAAuCA,CAH8C,GAChF,CAAC,EACN,EAyBA,SAAiC/I,GAC/B,MAAMu6D,EAjHR,SAA0Cv6D,EAAa4yD,GAErD,OADkB,GAA2B5yD,GAC5B8Z,QAAO,CAAC0gD,EAAOyD,KAC9BzD,EAAMh7D,QAgBV,SAAiCQ,EAAa4yD,GAC5C,MAAM/9B,EAAa70B,EAAY4yD,GAC/B,OAAO/9B,EAAa3qB,OAAOU,KAAKiqB,GAAYvtB,KAAKlB,GAAQ,CAACA,EAAKyuB,EAAWzuB,MAAS,EACrF,CAnBkB,CAAwB63D,EAAcrL,IAC7C4H,IACN,GACL,CA2G+B,CAAiCx6D,EAAa,UACrE26D,EAAwB,CAC5B7J,mBAAoB,CAClB91C,MACE,OAAOu/C,EAAqBzgD,QAAO,CAACU,EAAQogD,KAC1C,MAAMC,EAAkB,GAAyBD,GAC3Cn9B,EAAgBn+B,KAAK6D,KAAKyxD,uBAAuBiG,EAAgBz0D,KACvE,OAAO8D,OAAOiS,OAAO3B,EAAQ,CAAE,CAACijB,GAAgBo9B,GAAkB,GACjE,CAAC,EACN,IAGJ,OAAON,EAAqBzgD,QAAO,CAAC3T,EAAYy0D,IACvC1wD,OAAOiS,OAAOhW,EAGzB,SAA0Cy0D,GACxC,MAAM/lC,EAAa,GAAyB+lC,IACtC,IAAEx0D,EAAG,KAAE2C,EAAMyoD,OAAQ/T,EAAMwT,OAAQtT,GAAU9oB,EACnD,MAAO,CACL,CAAC9rB,GAAO,CACNiS,MACE,MAAM3U,EAAQ/G,KAAK6D,KAAK6X,IAAI5U,GAC5B,OAAc,OAAVC,EACKo3C,EAAKp3C,GAELwuB,EAAWuY,YAEtB,EACAnyB,IAAI5U,QACY,IAAVA,EACF/G,KAAK6D,KAAKkgC,OAAOj9B,GAEjB9G,KAAK6D,KAAK8X,IAAI7U,EAAKu3C,EAAMt3C,GAE7B,GAEF,CAAC,MAAM,GAAW0C,MAAU,CAC1BiS,MACE,OAAO1b,KAAK6D,KAAK2X,IAAI1U,IAAQyuB,EAAW4kC,qBAC1C,GAGN,CA9BqC,CAAiCmB,KACjED,EACL,GAkMA,GAAWpX,QAAU,GACrB,GAAWxmB,OAAS,CAAC,EACrB,MAAMmhC,WAAoB,GACxB31D,UACEjJ,KAAK6+D,MAAQ7+D,KAAK8+D,eAAiB9+D,KAAK++D,YAAc,QACxD,CACA7wD,SACElO,KAAKg/D,YAAY/yD,SAAS6B,IACxBA,EAAKW,UAAUP,OAAOlO,KAAK6+D,MAAM,GAErC,CACAnxC,OACE1tB,KAAKg/D,YAAY/yD,SAAS6B,IACxBA,EAAKW,UAAUpH,OAAOrH,KAAK6+D,MAAM,GAErC,CACArqD,OACExU,KAAKg/D,YAAY/yD,SAAS6B,IACxBA,EAAKW,UAAUlG,IAAIvI,KAAK6+D,MAAM,GAElC,EAEFD,GAAY3a,QAAU,CAAC,QACvB2a,GAAY9H,QAAU,CAAC,UCpWvB,MAAMvO,GAAc8P,GAAYt3D,QCChC,SAASk+D,KAAQ,CDEjB1W,GAAY+P,OAAQ,EACpB7oD,OAAOyvD,SAAW3W,GAClBA,GAAYkQ,SAAS,eAAgBiD,IACrCnT,GAAYkQ,SAAS,SAAU,ICJ/B,MAAM0G,GAAO,WACX,IAAInxD,EAAK,EACT,OAAO,WACL,OAAOA,GACT,CACF,CALY,GAMZ,SAASoxD,GAAcr4D,GACrB,OAAOA,OACT,CACA,SAASkD,GAAQlD,GACf,GAAIiD,MAAMC,SAAWD,MAAMC,QAAQlD,GACjC,OAAO,EAET,MAAMnB,EAAOgF,OAAOtF,UAAUuF,SAAS/F,KAAKiC,GAC5C,MAAyB,YAArBnB,EAAKzC,MAAM,EAAG,IAAuC,WAAnByC,EAAKzC,OAAO,EAIpD,CACA,SAASk8D,GAASt4D,GAChB,OAAiB,OAAVA,GAA4D,oBAA1C6D,OAAOtF,UAAUuF,SAAS/F,KAAKiC,EAC1D,CACA,MAAMu4D,GAAkBv4D,IAA4B,iBAAVA,GAAsBA,aAAiByzD,SAAW+E,UAAUx4D,GACtG,SAASy4D,GAAgBz4D,EAAO+mC,GAC9B,OAAOwxB,GAAev4D,GAASA,EAAQ+mC,CACzC,CACA,SAAS2xB,GAAe14D,EAAO+mC,GAC7B,YAAwB,IAAV/mC,EAAwB+mC,EAAe/mC,CACvD,CACA,MAIM24D,GAAc,CAAC34D,EAAO44D,IACT,iBAAV54D,GAAsBA,EAAMszB,SAAS,KAC1CulC,WAAW74D,GAAS,IAAM44D,GACvB54D,EACP,SAASskC,GAAS3uB,EAAI9T,EAAMi3D,GAC1B,GAAInjD,GAAyB,mBAAZA,EAAG5X,KAClB,OAAO4X,EAAG9Q,MAAMi0D,EAASj3D,EAE7B,CACA,SAASk3D,GAAKC,EAAUrjD,EAAImjD,EAASlM,GACnC,IAAIzoD,EAAGD,EAAKK,EACZ,GAAIrB,GAAQ81D,GAEV,GADA90D,EAAM80D,EAAS38D,OACXuwD,EACF,IAAKzoD,EAAID,EAAM,EAAGC,GAAK,EAAGA,IACxBwR,EAAG5X,KAAK+6D,EAASE,EAAS70D,GAAIA,QAGhC,IAAKA,EAAI,EAAGA,EAAID,EAAKC,IACnBwR,EAAG5X,KAAK+6D,EAASE,EAAS70D,GAAIA,QAG7B,GAAIm0D,GAASU,GAGlB,IAFAz0D,EAAOV,OAAOU,KAAKy0D,GACnB90D,EAAMK,EAAKlI,OACN8H,EAAI,EAAGA,EAAID,EAAKC,IACnBwR,EAAG5X,KAAK+6D,EAASE,EAASz0D,EAAKJ,IAAKI,EAAKJ,GAG/C,CACA,SAAS80D,GAAeC,EAAIC,GAC1B,IAAIh1D,EAAGi1D,EAAMC,EAAIC,EACjB,IAAKJ,IAAOC,GAAMD,EAAG78D,SAAW88D,EAAG98D,OACjC,OAAO,EAET,IAAK8H,EAAI,EAAGi1D,EAAOF,EAAG78D,OAAQ8H,EAAIi1D,IAAQj1D,EAGxC,GAFAk1D,EAAKH,EAAG/0D,GACRm1D,EAAKH,EAAGh1D,GACJk1D,EAAGE,eAAiBD,EAAGC,cAAgBF,EAAG5hD,QAAU6hD,EAAG7hD,MACzD,OAAO,EAGX,OAAO,CACT,CACA,SAAS+hD,GAAQv0D,GACf,GAAI/B,GAAQ+B,GACV,OAAOA,EAAOhE,IAAIu4D,IAEpB,GAAIlB,GAASrzD,GAAS,CACpB,MAAMF,EAASlB,OAAOxC,OAAO,MACvBkD,EAAOV,OAAOU,KAAKU,GACnBw0D,EAAOl1D,EAAKlI,OAClB,IAAIq9D,EAAI,EACR,KAAOA,EAAID,IAAQC,EACjB30D,EAAOR,EAAKm1D,IAAMF,GAAQv0D,EAAOV,EAAKm1D,KAExC,OAAO30D,CACT,CACA,OAAOE,CACT,CACA,SAAS00D,GAAW55D,GAClB,OAAmE,IAA5D,CAAC,YAAa,YAAa,eAAezD,QAAQyD,EAC3D,CACA,SAAS65D,GAAQ75D,EAAKgF,EAAQE,EAAQwB,GACpC,IAAKkzD,GAAW55D,GACd,OAEF,MAAM85D,EAAO90D,EAAOhF,GACd+5D,EAAO70D,EAAOlF,GAChBu4D,GAASuB,IAASvB,GAASwB,GAC7BC,GAAMF,EAAMC,EAAMrzD,GAElB1B,EAAOhF,GAAOy5D,GAAQM,EAE1B,CACA,SAASC,GAAMh1D,EAAQE,EAAQwB,GAC7B,MAAM+tC,EAAUtxC,GAAQ+B,GAAUA,EAAS,CAACA,GACtCm0D,EAAO5kB,EAAQn4C,OACrB,IAAKi8D,GAASvzD,GACZ,OAAOA,EAGT,MAAMi1D,GADNvzD,EAAUA,GAAW,CAAC,GACCuzD,QAAUJ,GACjC,IAAK,IAAIz1D,EAAI,EAAGA,EAAIi1D,IAAQj1D,EAAG,CAE7B,IAAKm0D,GADLrzD,EAASuvC,EAAQrwC,IAEf,SAEF,MAAMI,EAAOV,OAAOU,KAAKU,GACzB,IAAK,IAAIy0D,EAAI,EAAGD,EAAOl1D,EAAKlI,OAAQq9D,EAAID,IAAQC,EAC9CM,EAAOz1D,EAAKm1D,GAAI30D,EAAQE,EAAQwB,EAEpC,CACA,OAAO1B,CACT,CACA,SAASk1D,GAAQl1D,EAAQE,GACvB,OAAO80D,GAAMh1D,EAAQE,EAAQ,CAAC+0D,OAAQE,IACxC,CACA,SAASA,GAAUn6D,EAAKgF,EAAQE,GAC9B,IAAK00D,GAAW55D,GACd,OAEF,MAAM85D,EAAO90D,EAAOhF,GACd+5D,EAAO70D,EAAOlF,GAChBu4D,GAASuB,IAASvB,GAASwB,GAC7BG,GAAQJ,EAAMC,GACJj2D,OAAOtF,UAAUgb,eAAexb,KAAKgH,EAAQhF,KACvDgF,EAAOhF,GAAOy5D,GAAQM,GAE1B,CAOA,MAAMK,GAAe,CACnB,GAAIn2C,GAAKA,EACT3U,EAAG3L,GAAKA,EAAE2L,EACVC,EAAG5L,GAAKA,EAAE4L,GAEZ,SAAS8qD,GAAiB70D,EAAKxF,GAC7B,MAAMs6D,EAAWF,GAAap6D,KAASo6D,GAAap6D,GAGtD,SAAyBA,GACvB,MAAMwE,EAWR,SAAmBxE,GACjB,MAAMqiD,EAAQriD,EAAI4H,MAAM,KAClBpD,EAAO,GACb,IAAI+1D,EAAM,GACV,IAAK,MAAMC,KAAQnY,EACjBkY,GAAOC,EACHD,EAAIhnC,SAAS,MACfgnC,EAAMA,EAAIl+D,MAAM,GAAI,GAAK,KAEzBmI,EAAKpL,KAAKmhE,GACVA,EAAM,IAGV,OAAO/1D,CACT,CAzBei2D,CAAUz6D,GACvB,OAAOwF,IACL,IAAK,MAAMm0D,KAAKn1D,EAAM,CACpB,GAAU,KAANm1D,EACF,MAEFn0D,EAAMA,GAAOA,EAAIm0D,EACnB,CACA,OAAOn0D,CAAG,CAEd,CAd6Dk1D,CAAgB16D,IAC3E,OAAOs6D,EAAS90D,EAClB,CA4BA,SAASm1D,GAAYC,GACnB,OAAOA,EAAIlY,OAAO,GAAG7oB,cAAgB+gC,EAAIv+D,MAAM,EACjD,CACA,MAAMw+D,GAAW56D,QAA2B,IAAVA,EAC5B66D,GAAc76D,GAA2B,mBAAVA,EAC/B86D,GAAY,CAAC14D,EAAGqe,KACpB,GAAIre,EAAE80C,OAASz2B,EAAEy2B,KACf,OAAO,EAET,IAAK,MAAMnwC,KAAQ3E,EACjB,IAAKqe,EAAEhM,IAAI1N,GACT,OAAO,EAGX,OAAO,CAAI,EAMPg0D,GAAKz/D,KAAKy/D,GACVC,GAAM,EAAID,GACVE,GAAQD,GAAMD,GACdG,GAAWzH,OAAO0H,kBAClBC,GAAcL,GAAK,IACnBM,GAAUN,GAAK,EACfO,GAAaP,GAAK,EAClBQ,GAAqB,EAALR,GAAS,EACzBS,GAAQlgE,KAAKkgE,MACbC,GAAOngE,KAAKmgE,KAClB,SAASC,GAAQC,GACf,MAAMC,EAAetgE,KAAKmT,MAAMktD,GAChCA,EAAQE,GAAaF,EAAOC,EAAcD,EAAQ,KAAQC,EAAeD,EACzE,MAAMG,EAAYxgE,KAAKC,IAAI,GAAID,KAAK67B,MAAMqkC,GAAMG,KAC1CI,EAAWJ,EAAQG,EAEzB,OADqBC,GAAY,EAAI,EAAIA,GAAY,EAAI,EAAIA,GAAY,EAAI,EAAI,IAC3DD,CACxB,CAiBA,SAASE,GAASp4D,GAChB,OAAQq4D,MAAMpD,WAAWj1D,KAAO40D,SAAS50D,EAC3C,CACA,SAASi4D,GAAaxsD,EAAGC,EAAG4sD,GAC1B,OAAO5gE,KAAK+V,IAAIhC,EAAIC,GAAK4sD,CAC3B,CAKA,SAASC,GAAmBxI,EAAO5uD,EAAQga,GACzC,IAAI5a,EAAGi1D,EAAMp5D,EACb,IAAKmE,EAAI,EAAGi1D,EAAOzF,EAAMt3D,OAAQ8H,EAAIi1D,EAAMj1D,IACzCnE,EAAQ2zD,EAAMxvD,GAAG4a,GACZk9C,MAAMj8D,KACT+E,EAAOvJ,IAAMF,KAAKE,IAAIuJ,EAAOvJ,IAAKwE,GAClC+E,EAAOwJ,IAAMjT,KAAKiT,IAAIxJ,EAAOwJ,IAAKvO,GAGxC,CACA,SAASo8D,GAAUC,GACjB,OAAOA,GAAWtB,GAAK,IACzB,CACA,SAASuB,GAAUC,GACjB,OAAOA,GAAW,IAAMxB,GAC1B,CACA,SAASyB,GAAentD,GACtB,IAAKkpD,GAAelpD,GAClB,OAEF,IAAIopC,EAAI,EACJgkB,EAAI,EACR,KAAOnhE,KAAKmT,MAAMY,EAAIopC,GAAKA,IAAMppC,GAC/BopC,GAAK,GACLgkB,IAEF,OAAOA,CACT,CACA,SAASC,GAAkBC,EAAaC,GACtC,MAAMC,EAAsBD,EAAWvtD,EAAIstD,EAAYttD,EACjDytD,EAAsBF,EAAWttD,EAAIqtD,EAAYrtD,EACjDytD,EAA2BzhE,KAAK0hE,KAAKH,EAAsBA,EAAsBC,EAAsBA,GAC7G,IAAIG,EAAQ3hE,KAAK4hE,MAAMJ,EAAqBD,GAI5C,OAHII,GAAU,GAAMlC,KAClBkC,GAASjC,IAEJ,CACLiC,QACA79C,SAAU29C,EAEd,CACA,SAASI,GAAsBC,EAAKC,GAClC,OAAO/hE,KAAK0hE,KAAK1hE,KAAKC,IAAI8hE,EAAIhuD,EAAI+tD,EAAI/tD,EAAG,GAAK/T,KAAKC,IAAI8hE,EAAI/tD,EAAI8tD,EAAI9tD,EAAG,GACxE,CACA,SAASguD,GAAWl7D,EAAGqe,GACrB,OAAQre,EAAIqe,EAAIw6C,IAASD,GAAMD,EACjC,CACA,SAASwC,GAAgBn7D,GACvB,OAAQA,EAAI44D,GAAMA,IAAOA,EAC3B,CACA,SAASwC,GAAcP,EAAOjjE,EAAOqZ,EAAKoqD,GACxC,MAAMr7D,EAAIm7D,GAAgBN,GACpBp8D,EAAI08D,GAAgBvjE,GACpBy+C,EAAI8kB,GAAgBlqD,GACpBqqD,EAAeH,GAAgB18D,EAAIuB,GACnCu7D,EAAaJ,GAAgB9kB,EAAIr2C,GACjCw7D,EAAeL,GAAgBn7D,EAAIvB,GACnCg9D,EAAaN,GAAgBn7D,EAAIq2C,GACvC,OAAOr2C,IAAMvB,GAAKuB,IAAMq2C,GAAMglB,GAAyB58D,IAAM43C,GACvDilB,EAAeC,GAAcC,EAAeC,CACpD,CACA,SAASC,GAAY99D,EAAOxE,EAAK+S,GAC/B,OAAOjT,KAAKiT,IAAI/S,EAAKF,KAAKE,IAAI+S,EAAKvO,GACrC,CAIA,SAAS+9D,GAAW/9D,EAAOhG,EAAOqZ,EAAK6oD,EAAU,MAC/C,OAAOl8D,GAAS1E,KAAKE,IAAIxB,EAAOqZ,GAAO6oD,GAAWl8D,GAAS1E,KAAKiT,IAAIvU,EAAOqZ,GAAO6oD,CACpF,CAEA,SAAS8B,GAAQC,EAAOj+D,EAAOk+D,GAC7BA,EAAMA,GAAO,CAAEzmD,GAAUwmD,EAAMxmD,GAASzX,GACxC,IAEIm+D,EAFAC,EAAKH,EAAM5hE,OAAS,EACpBgiE,EAAK,EAET,KAAOD,EAAKC,EAAK,GACfF,EAAOE,EAAKD,GAAO,EACfF,EAAIC,GACNE,EAAKF,EAELC,EAAKD,EAGT,MAAO,CAACE,KAAID,KACd,CACA,MAAME,GAAe,CAACL,EAAOl+D,EAAKC,EAAOu+D,IACvCP,GAAQC,EAAOj+D,EAAOu+D,EAClB9mD,GAASwmD,EAAMxmD,GAAO1X,IAAQC,EAC9ByX,GAASwmD,EAAMxmD,GAAO1X,GAAOC,GAC7Bw+D,GAAgB,CAACP,EAAOl+D,EAAKC,IACjCg+D,GAAQC,EAAOj+D,GAAOyX,GAASwmD,EAAMxmD,GAAO1X,IAAQC,IAchDy+D,GAAc,CAAC,OAAQ,MAAO,QAAS,SAAU,WA+BvD,SAASC,GAAoB/K,EAAOgL,GAClC,MAAMC,EAAOjL,EAAMkL,SACnB,IAAKD,EACH,OAEF,MAAMhd,EAAYgd,EAAKhd,UACjBnqC,EAAQmqC,EAAUtlD,QAAQqiE,IACjB,IAAXlnD,GACFmqC,EAAUpK,OAAO//B,EAAO,GAEtBmqC,EAAUvlD,OAAS,IAGvBoiE,GAAYv5D,SAASnF,WACZ4zD,EAAM5zD,EAAI,WAEZ4zD,EAAMkL,SACf,CACA,SAASC,GAAat4D,GACpB,MAAMoO,EAAM,IAAIV,IAChB,IAAI/P,EAAGi1D,EACP,IAAKj1D,EAAI,EAAGi1D,EAAO5yD,EAAMnK,OAAQ8H,EAAIi1D,IAAQj1D,EAC3CyQ,EAAIpT,IAAIgF,EAAMrC,IAEhB,OAAIyQ,EAAIsiC,OAASkiB,EACR5yD,EAEFvD,MAAMO,KAAKoR,EACpB,CAKA,MAAMmqD,GACkB,oBAAXr2D,OACF,SAAS47B,GACd,OAAOA,GACT,EAEK57B,OAAO0tB,sBAEhB,SAAS4oC,GAAUrpD,EAAImjD,EAASmG,GAC9B,MAAMC,EAAaD,GAAY,CAAEp9D,GAASoB,MAAM1E,UAAUnC,MAAM2B,KAAK8D,IACrE,IAAIs9D,GAAU,EACVt9D,EAAO,GACX,OAAO,YAAY+vD,GACjB/vD,EAAOq9D,EAAWtN,GACbuN,IACHA,GAAU,EACVJ,GAAiBhhE,KAAK2K,QAAQ,KAC5By2D,GAAU,EACVxpD,EAAG9Q,MAAMi0D,EAASj3D,EAAK,IAG7B,CACF,CAaA,MAAMu9D,GAAsBC,GAAoB,UAAVA,EAAoB,OAAmB,QAAVA,EAAkB,QAAU,SACzFC,GAAiB,CAACD,EAAOrlE,EAAOqZ,IAAkB,UAAVgsD,EAAoBrlE,EAAkB,QAAVqlE,EAAkBhsD,GAAOrZ,EAAQqZ,GAAO,EAKlH,SAASksD,GAAiCjuB,EAAMkuB,EAAQC,GACtD,MAAMC,EAAaF,EAAOnjE,OAC1B,IAAIrC,EAAQ,EACR2lE,EAAQD,EACZ,GAAIpuB,EAAKsuB,QAAS,CAChB,MAAM,OAACC,EAAM,QAAEC,GAAWxuB,EACpB1zB,EAAOiiD,EAAOjiD,MACd,IAACpiB,EAAG,IAAE+S,EAAG,WAAEwxD,EAAU,WAAEC,GAAcH,EAAOI,gBAC9CF,IACF/lE,EAAQ8jE,GAAYxiE,KAAKE,IACvB8iE,GAAawB,EAASD,EAAOjiD,KAAMpiB,GAAK6iE,GACxCoB,EAAqBC,EAAapB,GAAakB,EAAQ5hD,EAAMiiD,EAAOK,iBAAiB1kE,IAAM6iE,IAC7F,EAAGqB,EAAa,IAGhBC,EADEK,EACMlC,GAAYxiE,KAAKiT,IACvB+vD,GAAawB,EAASD,EAAOjiD,KAAMrP,GAAK,GAAM6vD,GAAK,EACnDqB,EAAqB,EAAInB,GAAakB,EAAQ5hD,EAAMiiD,EAAOK,iBAAiB3xD,IAAM,GAAM6vD,GAAK,GAC/FpkE,EAAO0lE,GAAc1lE,EAEb0lE,EAAa1lE,CAEzB,CACA,MAAO,CAACA,QAAO2lE,QACjB,CACA,SAASQ,GAAoB7uB,GAC3B,MAAM,OAAC8uB,EAAM,OAAEC,EAAM,aAAEC,GAAgBhvB,EACjCivB,EAAY,CAChBC,KAAMJ,EAAO5kE,IACbilE,KAAML,EAAO7xD,IACbmyD,KAAML,EAAO7kE,IACbmlE,KAAMN,EAAO9xD,KAEf,IAAK+xD,EAEH,OADAhvB,EAAKgvB,aAAeC,GACb,EAET,MAAMK,EAAUN,EAAaE,OAASJ,EAAO5kE,KAC1C8kE,EAAaG,OAASL,EAAO7xD,KAC7B+xD,EAAaI,OAASL,EAAO7kE,KAC7B8kE,EAAaK,OAASN,EAAO9xD,IAEhC,OADA1K,OAAOiS,OAAOwqD,EAAcC,GACrBK,CACT,CAEA,MAAMC,GAAUv1C,GAAY,IAANA,GAAiB,IAANA,EAC3Bw1C,GAAY,CAACx1C,EAAGzqB,EAAG47D,KAAQnhE,KAAKC,IAAI,EAAG,IAAM+vB,GAAK,IAAMhwB,KAAKylE,KAAKz1C,EAAIzqB,GAAKm6D,GAAMyB,GACjFuE,GAAa,CAAC11C,EAAGzqB,EAAG47D,IAAMnhE,KAAKC,IAAI,GAAI,GAAK+vB,GAAKhwB,KAAKylE,KAAKz1C,EAAIzqB,GAAKm6D,GAAMyB,GAAK,EAC/EwE,GAAU,CACdC,OAAQ51C,GAAKA,EACb61C,WAAY71C,GAAKA,EAAIA,EACrB81C,YAAa91C,IAAMA,GAAKA,EAAI,GAC5B+1C,cAAe/1C,IAAOA,GAAK,IAAO,EAC9B,GAAMA,EAAIA,GACT,MAAUA,GAAMA,EAAI,GAAK,GAC9Bg2C,YAAah2C,GAAKA,EAAIA,EAAIA,EAC1Bi2C,aAAcj2C,IAAMA,GAAK,GAAKA,EAAIA,EAAI,EACtCk2C,eAAgBl2C,IAAOA,GAAK,IAAO,EAC/B,GAAMA,EAAIA,EAAIA,EACd,KAAQA,GAAK,GAAKA,EAAIA,EAAI,GAC9Bm2C,YAAan2C,GAAKA,EAAIA,EAAIA,EAAIA,EAC9Bo2C,aAAcp2C,MAAQA,GAAK,GAAKA,EAAIA,EAAIA,EAAI,GAC5Cq2C,eAAgBr2C,IAAOA,GAAK,IAAO,EAC/B,GAAMA,EAAIA,EAAIA,EAAIA,GACjB,KAAQA,GAAK,GAAKA,EAAIA,EAAIA,EAAI,GACnCs2C,YAAat2C,GAAKA,EAAIA,EAAIA,EAAIA,EAAIA,EAClCu2C,aAAcv2C,IAAMA,GAAK,GAAKA,EAAIA,EAAIA,EAAIA,EAAI,EAC9Cw2C,eAAgBx2C,IAAOA,GAAK,IAAO,EAC/B,GAAMA,EAAIA,EAAIA,EAAIA,EAAIA,EACtB,KAAQA,GAAK,GAAKA,EAAIA,EAAIA,EAAIA,EAAI,GACtCy2C,WAAYz2C,GAA8B,EAAxBhwB,KAAK0mE,IAAI12C,EAAI+vC,IAC/B4G,YAAa32C,GAAKhwB,KAAKylE,IAAIz1C,EAAI+vC,IAC/B6G,cAAe52C,IAAM,IAAOhwB,KAAK0mE,IAAIjH,GAAKzvC,GAAK,GAC/C62C,WAAY72C,GAAY,IAANA,EAAW,EAAIhwB,KAAKC,IAAI,EAAG,IAAM+vB,EAAI,IACvD82C,YAAa92C,GAAY,IAANA,EAAW,EAA4B,EAAvBhwB,KAAKC,IAAI,GAAI,GAAK+vB,GACrD+2C,cAAe/2C,GAAKu1C,GAAOv1C,GAAKA,EAAIA,EAAI,GACpC,GAAMhwB,KAAKC,IAAI,EAAG,IAAU,EAAJ+vB,EAAQ,IAChC,IAAyC,EAAjChwB,KAAKC,IAAI,GAAI,IAAU,EAAJ+vB,EAAQ,KACvCg3C,WAAYh3C,GAAMA,GAAK,EAAKA,IAAMhwB,KAAK0hE,KAAK,EAAI1xC,EAAIA,GAAK,GACzDi3C,YAAaj3C,GAAKhwB,KAAK0hE,KAAK,GAAK1xC,GAAK,GAAKA,GAC3Ck3C,cAAel3C,IAAOA,GAAK,IAAO,GAC7B,IAAOhwB,KAAK0hE,KAAK,EAAI1xC,EAAIA,GAAK,GAC/B,IAAOhwB,KAAK0hE,KAAK,GAAK1xC,GAAK,GAAKA,GAAK,GACzCm3C,cAAen3C,GAAKu1C,GAAOv1C,GAAKA,EAAIw1C,GAAUx1C,EAAG,KAAO,IACxDo3C,eAAgBp3C,GAAKu1C,GAAOv1C,GAAKA,EAAI01C,GAAW11C,EAAG,KAAO,IAC1Dq3C,iBAAiBr3C,GACf,MAAMzqB,EAAI,MAEV,OAAOggE,GAAOv1C,GAAKA,EACjBA,EAAI,GACA,GAAMw1C,GAAc,EAAJx1C,EAAOzqB,EAHnB,KAIJ,GAAM,GAAMmgE,GAAe,EAAJ11C,EAAQ,EAAGzqB,EAJ9B,IAKZ,EACA+hE,WAAWt3C,GACT,MAAMzqB,EAAI,QACV,OAAOyqB,EAAIA,IAAMzqB,EAAI,GAAKyqB,EAAIzqB,EAChC,EACAgiE,YAAYv3C,GACV,MAAMzqB,EAAI,QACV,OAAQyqB,GAAK,GAAKA,IAAMzqB,EAAI,GAAKyqB,EAAIzqB,GAAK,CAC5C,EACAiiE,cAAcx3C,GACZ,IAAIzqB,EAAI,QACR,OAAKyqB,GAAK,IAAO,EACDA,EAAIA,IAAuB,GAAhBzqB,GAAK,QAAgByqB,EAAIzqB,GAA3C,GAEF,KAAQyqB,GAAK,GAAKA,IAAuB,GAAhBzqB,GAAK,QAAgByqB,EAAIzqB,GAAK,EAChE,EACAkiE,aAAcz3C,GAAK,EAAI21C,GAAQ+B,cAAc,EAAI13C,GACjD03C,cAAc13C,GACZ,MAAMvU,EAAI,OACJwX,EAAI,KACV,OAAIjD,EAAK,EAAIiD,EACJxX,EAAIuU,EAAIA,EAEbA,EAAK,EAAIiD,EACJxX,GAAKuU,GAAM,IAAMiD,GAAMjD,EAAI,IAEhCA,EAAK,IAAMiD,EACNxX,GAAKuU,GAAM,KAAOiD,GAAMjD,EAAI,MAE9BvU,GAAKuU,GAAM,MAAQiD,GAAMjD,EAAI,OACtC,EACA23C,gBAAiB33C,GAAMA,EAAI,GACO,GAA9B21C,GAAQ8B,aAAiB,EAAJz3C,GACc,GAAnC21C,GAAQ+B,cAAkB,EAAJ13C,EAAQ,GAAW,IAS/C,SAAS7c,GAAMuV,GACb,OAAOA,EAAI,GAAM,CACnB,CACA,MAAMk/C,GAAM,CAACl/C,EAAGm/C,EAAGC,IAAM9nE,KAAKiT,IAAIjT,KAAKE,IAAIwoB,EAAGo/C,GAAID,GAClD,SAASE,GAAIr/C,GACX,OAAOk/C,GAAIz0D,GAAU,KAAJuV,GAAW,EAAG,IACjC,CACA,SAASs/C,GAAIt/C,GACX,OAAOk/C,GAAIz0D,GAAU,IAAJuV,GAAU,EAAG,IAChC,CACA,SAASu/C,GAAIv/C,GACX,OAAOk/C,GAAIz0D,GAAMuV,EAAI,MAAQ,IAAK,EAAG,EACvC,CACA,SAASw/C,GAAIx/C,GACX,OAAOk/C,GAAIz0D,GAAU,IAAJuV,GAAU,EAAG,IAChC,CACA,MAAMy/C,GAAQ,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAGC,EAAG,GAAIC,EAAG,GAAIC,EAAG,GAAIC,EAAG,GAAIC,EAAG,GAAIC,EAAG,GAAI3hE,EAAG,GAAIqe,EAAG,GAAI+G,EAAG,GAAI+G,EAAG,GAAIkqB,EAAG,GAAIurB,EAAG,IACrJC,GAAM,IAAI,oBACVC,GAAKzjD,GAAKwjD,GAAQ,GAAJxjD,GACd0jD,GAAK1jD,GAAKwjD,IAAS,IAAJxjD,IAAa,GAAKwjD,GAAQ,GAAJxjD,GACrC2jD,GAAK3jD,IAAW,IAAJA,IAAa,IAAY,GAAJA,GA+BvC,MAAM4jD,GAAS,+GACf,SAASC,GAASlB,EAAGviE,EAAGsiE,GACtB,MAAM/gE,EAAIvB,EAAIvF,KAAKE,IAAI2nE,EAAG,EAAIA,GACxBa,EAAI,CAACpgE,EAAG81D,GAAK91D,EAAIw/D,EAAI,IAAM,KAAOD,EAAI/gE,EAAI9G,KAAKiT,IAAIjT,KAAKE,IAAIk+D,EAAI,EAAG,EAAIA,EAAG,IAAK,GACrF,MAAO,CAACsK,EAAE,GAAIA,EAAE,GAAIA,EAAE,GACxB,CACA,SAASO,GAASnB,EAAGviE,EAAGmjB,GACtB,MAAMggD,EAAI,CAACpgE,EAAG81D,GAAK91D,EAAIw/D,EAAI,IAAM,IAAMp/C,EAAIA,EAAInjB,EAAIvF,KAAKiT,IAAIjT,KAAKE,IAAIk+D,EAAG,EAAIA,EAAG,GAAI,GACnF,MAAO,CAACsK,EAAE,GAAIA,EAAE,GAAIA,EAAE,GACxB,CACA,SAASQ,GAASpB,EAAGqB,EAAGhkD,GACtB,MAAMikD,EAAMJ,GAASlB,EAAG,EAAG,IAC3B,IAAIj/D,EAMJ,IALIsgE,EAAIhkD,EAAI,IACVtc,EAAI,GAAKsgE,EAAIhkD,GACbgkD,GAAKtgE,EACLsc,GAAKtc,GAEFA,EAAI,EAAGA,EAAI,EAAGA,IACjBugE,EAAIvgE,IAAM,EAAIsgE,EAAIhkD,EAClBikD,EAAIvgE,IAAMsgE,EAEZ,OAAOC,CACT,CAUA,SAASC,GAAQ3gD,GACf,MACM0K,EAAI1K,EAAE0K,EADE,IAERk2C,EAAI5gD,EAAE4gD,EAFE,IAGRnkD,EAAIuD,EAAEvD,EAHE,IAIRlS,EAAMjT,KAAKiT,IAAImgB,EAAGk2C,EAAGnkD,GACrBjlB,EAAMF,KAAKE,IAAIkzB,EAAGk2C,EAAGnkD,GACrB0iD,GAAK50D,EAAM/S,GAAO,EACxB,IAAI4nE,EAAGviE,EAAG0tB,EAOV,OANIhgB,IAAQ/S,IACV+yB,EAAIhgB,EAAM/S,EACVqF,EAAIsiE,EAAI,GAAM50C,GAAK,EAAIhgB,EAAM/S,GAAO+yB,GAAKhgB,EAAM/S,GAC/C4nE,EArBJ,SAAkB10C,EAAGk2C,EAAGnkD,EAAG8N,EAAGhgB,GAC5B,OAAImgB,IAAMngB,GACCq2D,EAAInkD,GAAK8N,GAAMq2C,EAAInkD,EAAI,EAAI,GAElCmkD,IAAMr2D,GACAkS,EAAIiO,GAAKH,EAAI,GAEfG,EAAIk2C,GAAKr2C,EAAI,CACvB,CAaQs2C,CAASn2C,EAAGk2C,EAAGnkD,EAAG8N,EAAGhgB,GACzB60D,EAAQ,GAAJA,EAAS,IAER,CAAK,EAAJA,EAAOviE,GAAK,EAAGsiE,EACzB,CACA,SAAS2B,GAAMd,EAAG5hE,EAAGqe,EAAG+G,GACtB,OACEvkB,MAAMC,QAAQd,GACV4hE,EAAE5hE,EAAE,GAAIA,EAAE,GAAIA,EAAE,IAChB4hE,EAAE5hE,EAAGqe,EAAG+G,IACZvmB,IAAIqiE,GACR,CACA,SAASyB,GAAQ3B,EAAGviE,EAAGsiE,GACrB,OAAO2B,GAAMR,GAAUlB,EAAGviE,EAAGsiE,EAC/B,CAOA,SAAS6B,GAAI5B,GACX,OAAQA,EAAI,IAAM,KAAO,GAC3B,CAgDA,MAAMniE,GAAM,CACVoO,EAAG,OACH41D,EAAG,QACHC,EAAG,KACHC,EAAG,MACHC,EAAG,KACHC,EAAG,SACHC,EAAG,QACH5B,EAAG,KACH6B,EAAG,KACHC,EAAG,KACH7B,EAAG,KACHC,EAAG,QACHC,EAAG,QACH4B,EAAG,KACHC,EAAG,WACH5B,EAAG,KACH6B,EAAG,KACHC,EAAG,KACHC,EAAG,KACHC,EAAG,KACHC,EAAG,QACHhC,EAAG,KACHiC,EAAG,KACHC,EAAG,OACHC,EAAG,KACHC,EAAG,QACHC,EAAG,MAECC,GAAU,CACdC,OAAQ,SACRC,YAAa,SACbC,KAAM,OACNC,UAAW,SACXC,KAAM,SACNC,MAAO,SACPC,OAAQ,SACRC,MAAO,IACPC,aAAc,SACdC,GAAI,KACJC,QAAS,SACTC,KAAM,SACNC,UAAW,SACXC,OAAQ,SACRC,SAAU,SACVC,QAAS,SACTC,IAAK,SACLC,YAAa,SACbC,QAAS,SACTC,QAAS,SACTC,KAAM,OACNC,IAAK,KACLC,MAAO,OACPC,QAAS,SACTC,KAAM,SACNC,KAAM,OACNC,KAAM,SACNC,OAAQ,SACRC,QAAS,SACTC,SAAU,SACVC,OAAQ,SACRC,MAAO,SACPC,IAAK,SACLC,OAAQ,SACRC,OAAQ,SACRC,KAAM,SACNC,MAAO,SACPC,MAAO,SACPC,IAAK,OACLC,OAAQ,SACRC,OAAQ,SACRC,SAAU,OACVC,OAAQ,SACRC,OAAQ,SACRC,SAAU,SACVC,SAAU,SACVC,SAAU,SACVC,SAAU,SACVC,OAAQ,SACRC,QAAS,SACTC,UAAW,SACXC,IAAK,SACLC,OAAQ,SACRC,IAAK,SACLC,IAAK,OACLC,MAAO,SACPC,IAAK,SACLC,QAAS,SACTC,OAAQ,SACRC,QAAS,SACTC,MAAO,SACPC,KAAM,SACNC,MAAO,SACPC,OAAQ,SACRC,UAAW,SACXC,QAAS,SACTC,WAAY,SACZC,IAAK,SACLC,KAAM,SACNC,MAAO,SACPC,UAAW,SACXC,KAAM,SACNC,KAAM,SACNC,KAAM,SACNC,KAAM,SACNC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,MAAO,SACPC,MAAO,SACPC,QAAS,SACTC,IAAK,SACLC,KAAM,OACNC,QAAS,SACTC,IAAK,SACLC,OAAQ,SACRC,MAAO,SACPC,WAAY,SACZC,IAAK,KACLC,MAAO,SACPC,OAAQ,SACRC,OAAQ,SACRC,KAAM,SACNC,UAAW,OACXC,IAAK,SACLC,SAAU,SACVC,WAAY,SACZC,QAAS,SACTC,SAAU,SACVC,QAAS,SACTC,WAAY,SACZC,KAAM,KACNC,OAAQ,SACRC,KAAM,SACNC,QAAS,SACTC,MAAO,SACPC,QAAS,SACTC,KAAM,SACNC,UAAW,SACXC,OAAQ,SACRC,MAAO,SACPC,WAAY,SACZC,UAAW,SACXC,QAAS,SACTC,KAAM,SACNC,IAAK,SACLC,KAAM,SACNC,QAAS,SACTC,MAAO,SACPC,YAAa,SACbC,GAAI,SACJC,SAAU,SACVC,MAAO,SACPC,UAAW,SACXC,MAAO,SACPC,UAAW,SACXC,MAAO,SACPC,QAAS,SACTC,MAAO,SACPC,OAAQ,SACRC,MAAO,SACPC,IAAK,SACLC,KAAM,SACNC,KAAM,SACNC,KAAM,SACNC,SAAU,OACVC,OAAQ,SACRC,IAAK,SACLC,IAAK,OACLC,MAAO,SACPC,OAAQ,SACRC,GAAI,SACJC,MAAO,SACPC,IAAK,SACLC,KAAM,SACNC,UAAW,SACXC,GAAI,SACJC,MAAO,UAkBT,IAAIC,GAcJ,MAAMC,GAAS,uGAgCTC,GAAK5rD,GAAKA,GAAK,SAAgB,MAAJA,EAAqC,MAAzB1oB,KAAKC,IAAIyoB,EAAG,EAAM,KAAe,KACxExgB,GAAOwgB,GAAKA,GAAK,OAAUA,EAAI,MAAQ1oB,KAAKC,KAAKyoB,EAAI,MAAS,MAAO,KAY3E,SAAS6rD,GAAO7rD,EAAG7f,EAAG2rE,GACpB,GAAI9rD,EAAG,CACL,IAAIs2C,EAAMqK,GAAQ3gD,GAClBs2C,EAAIn2D,GAAK7I,KAAKiT,IAAI,EAAGjT,KAAKE,IAAI8+D,EAAIn2D,GAAKm2D,EAAIn2D,GAAK2rE,EAAa,IAAN3rE,EAAU,IAAM,IACvEm2D,EAAMyK,GAAQzK,GACdt2C,EAAE0K,EAAI4rC,EAAI,GACVt2C,EAAE4gD,EAAItK,EAAI,GACVt2C,EAAEvD,EAAI65C,EAAI,EACZ,CACF,CACA,SAASzlC,GAAM7Q,EAAG+rD,GAChB,OAAO/rD,EAAIngB,OAAOiS,OAAOi6D,GAAS,CAAC,EAAG/rD,GAAKA,CAC7C,CACA,SAASgsD,GAAWC,GAClB,IAAIjsD,EAAI,CAAC0K,EAAG,EAAGk2C,EAAG,EAAGnkD,EAAG,EAAGre,EAAG,KAY9B,OAXIa,MAAMC,QAAQ+sE,GACZA,EAAM5zE,QAAU,IAClB2nB,EAAI,CAAC0K,EAAGuhD,EAAM,GAAIrL,EAAGqL,EAAM,GAAIxvD,EAAGwvD,EAAM,GAAI7tE,EAAG,KAC3C6tE,EAAM5zE,OAAS,IACjB2nB,EAAE5hB,EAAIkhE,GAAI2M,EAAM,OAIpBjsD,EAAI6Q,GAAMo7C,EAAO,CAACvhD,EAAG,EAAGk2C,EAAG,EAAGnkD,EAAG,EAAGre,EAAG,KACrCA,EAAIkhE,GAAIt/C,EAAE5hB,GAEP4hB,CACT,CACA,SAASksD,GAAcvV,GACrB,MAAsB,MAAlBA,EAAIlY,OAAO,GAzEjB,SAAkBkY,GAChB,MAAM5jD,EAAI44D,GAAOQ,KAAKxV,GACtB,IACIjsC,EAAGk2C,EAAGnkD,EADNre,EAAI,IAER,GAAK2U,EAAL,CAGA,GAAIA,EAAE,KAAO2X,EAAG,CACd,MAAM1K,GAAKjN,EAAE,GACb3U,EAAI2U,EAAE,GAAKssD,GAAIr/C,GAAKk/C,GAAQ,IAAJl/C,EAAS,EAAG,IACtC,CAOA,OANA0K,GAAK3X,EAAE,GACP6tD,GAAK7tD,EAAE,GACP0J,GAAK1J,EAAE,GACP2X,EAAI,KAAO3X,EAAE,GAAKssD,GAAI30C,GAAKw0C,GAAIx0C,EAAG,EAAG,MACrCk2C,EAAI,KAAO7tD,EAAE,GAAKssD,GAAIuB,GAAK1B,GAAI0B,EAAG,EAAG,MACrCnkD,EAAI,KAAO1J,EAAE,GAAKssD,GAAI5iD,GAAKyiD,GAAIziD,EAAG,EAAG,MAC9B,CACLiO,EAAGA,EACHk2C,EAAGA,EACHnkD,EAAGA,EACHre,EAAGA,EAfL,CAiBF,CAmDWguE,CAASzV,GA3UpB,SAAkBA,GAChB,MAAM5jD,EAAIstD,GAAO8L,KAAKxV,GACtB,IACI32C,EADA5hB,EAAI,IAER,IAAK2U,EACH,OAEEA,EAAE,KAAOiN,IACX5hB,EAAI2U,EAAE,GAAKssD,IAAKtsD,EAAE,IAAMusD,IAAKvsD,EAAE,KAEjC,MAAMqsD,EAAI4B,IAAKjuD,EAAE,IACXs5D,GAAMt5D,EAAE,GAAK,IACbu5D,GAAMv5D,EAAE,GAAK,IAQnB,OANEiN,EADW,QAATjN,EAAE,GAtBR,SAAiBqsD,EAAGqB,EAAGhkD,GACrB,OAAOqkD,GAAMN,GAAUpB,EAAGqB,EAAGhkD,EAC/B,CAqBQ8vD,CAAQnN,EAAGiN,EAAIC,GACD,QAATv5D,EAAE,GArBf,SAAiBqsD,EAAGviE,EAAGmjB,GACrB,OAAO8gD,GAAMP,GAAUnB,EAAGviE,EAAGmjB,EAC/B,CAoBQwsD,CAAQpN,EAAGiN,EAAIC,GAEfvL,GAAQ3B,EAAGiN,EAAIC,GAEd,CACL5hD,EAAG1K,EAAE,GACL4gD,EAAG5gD,EAAE,GACLvD,EAAGuD,EAAE,GACL5hB,EAAGA,EAEP,CAmTSquE,CAAS9V,EAClB,CACA,MAAM+V,GACJ/2E,YAAYs2E,GACV,GAAIA,aAAiBS,GACnB,OAAOT,EAET,MAAMpxE,SAAcoxE,EACpB,IAAIjsD,EAvbR,IAAkB22C,EAEZgW,EADAzsE,EAubW,WAATrF,EACFmlB,EAAIgsD,GAAWC,GACG,WAATpxE,IAzbTqF,GADYy2D,EA2bCsV,GA1bH5zE,OAEC,MAAXs+D,EAAI,KACM,IAARz2D,GAAqB,IAARA,EACfysE,EAAM,CACJjiD,EAAG,IAAsB,GAAhB+0C,GAAM9I,EAAI,IACnBiK,EAAG,IAAsB,GAAhBnB,GAAM9I,EAAI,IACnBl6C,EAAG,IAAsB,GAAhBgjD,GAAM9I,EAAI,IACnBv4D,EAAW,IAAR8B,EAA4B,GAAhBu/D,GAAM9I,EAAI,IAAW,KAErB,IAARz2D,GAAqB,IAARA,IACtBysE,EAAM,CACJjiD,EAAG+0C,GAAM9I,EAAI,KAAO,EAAI8I,GAAM9I,EAAI,IAClCiK,EAAGnB,GAAM9I,EAAI,KAAO,EAAI8I,GAAM9I,EAAI,IAClCl6C,EAAGgjD,GAAM9I,EAAI,KAAO,EAAI8I,GAAM9I,EAAI,IAClCv4D,EAAW,IAAR8B,EAAau/D,GAAM9I,EAAI,KAAO,EAAI8I,GAAM9I,EAAI,IAAO,OA2axD32C,EAvaG2sD,GAiUT,SAAmBhW,GACZ+U,KACHA,GAnBJ,WACE,MAAMkB,EAAW,CAAC,EACZrsE,EAAOV,OAAOU,KAAK8hE,IACnBwK,EAAQhtE,OAAOU,KAAKtD,IAC1B,IAAIkD,EAAG2sE,EAAGpX,EAAGxlC,EAAI68C,EACjB,IAAK5sE,EAAI,EAAGA,EAAII,EAAKlI,OAAQ8H,IAAK,CAEhC,IADA+vB,EAAK68C,EAAKxsE,EAAKJ,GACV2sE,EAAI,EAAGA,EAAID,EAAMx0E,OAAQy0E,IAC5BpX,EAAImX,EAAMC,GACVC,EAAKA,EAAGxuE,QAAQm3D,EAAGz4D,GAAIy4D,IAEzBA,EAAI3rC,SAASs4C,GAAQnyC,GAAK,IAC1B08C,EAASG,GAAM,CAACrX,GAAK,GAAK,IAAMA,GAAK,EAAI,IAAU,IAAJA,EACjD,CACA,OAAOkX,CACT,CAIYI,GACRtB,GAAMuB,YAAc,CAAC,EAAG,EAAG,EAAG,IAEhC,MAAM7uE,EAAIstE,GAAM/U,EAAIx8D,eACpB,OAAOiE,GAAK,CACVssB,EAAGtsB,EAAE,GACLwiE,EAAGxiE,EAAE,GACLqe,EAAGre,EAAE,GACLA,EAAgB,IAAbA,EAAE/F,OAAe+F,EAAE,GAAK,IAE/B,CA0F6B8uE,CAAUjB,IAAUC,GAAcD,IAE3Dh3E,KAAKk4E,KAAOntD,EACZ/qB,KAAKm4E,SAAWptD,CAClB,CACIqtD,YACF,OAAOp4E,KAAKm4E,MACd,CACI1M,UACF,IAAI1gD,EAAI6Q,GAAM57B,KAAKk4E,MAInB,OAHIntD,IACFA,EAAE5hB,EAAImhE,GAAIv/C,EAAE5hB,IAEP4hB,CACT,CACI0gD,QAAIn/D,GACNtM,KAAKk4E,KAAOnB,GAAWzqE,EACzB,CACA+rE,YACE,OAAOr4E,KAAKm4E,QAnFGptD,EAmFgB/qB,KAAKk4E,QAjFpCntD,EAAE5hB,EAAI,IACF,QAAQ4hB,EAAE0K,MAAM1K,EAAE4gD,MAAM5gD,EAAEvD,MAAM8iD,GAAIv/C,EAAE5hB,MACtC,OAAO4hB,EAAE0K,MAAM1K,EAAE4gD,MAAM5gD,EAAEvD,WA+Ee3e,EAnFhD,IAAmBkiB,CAoFjB,CACAutD,YACE,OAAOt4E,KAAKm4E,QA1bGptD,EA0bgB/qB,KAAKk4E,KAzblCnN,EAzBUhgD,IAAKogD,GAAGpgD,EAAE0K,IAAM01C,GAAGpgD,EAAE4gD,IAAMR,GAAGpgD,EAAEvD,IAAM2jD,GAAGpgD,EAAE5hB,GAyBjDovE,CAAQxtD,GAAKkgD,GAAKC,GACnBngD,EACH,IAAMggD,EAAEhgD,EAAE0K,GAAKs1C,EAAEhgD,EAAE4gD,GAAKZ,EAAEhgD,EAAEvD,GAJpB,EAACre,EAAG4hE,IAAM5hE,EAAI,IAAM4hE,EAAE5hE,GAAK,GAIFqvE,CAAMztD,EAAE5hB,EAAG4hE,QAC5CliE,QAsb0CA,EA1bhD,IAAmBkiB,EACbggD,CA0bJ,CACA0N,YACE,OAAOz4E,KAAKm4E,OA/UhB,SAAmBptD,GACjB,IAAKA,EACH,OAEF,MAAM5hB,EAAIuiE,GAAQ3gD,GACZo/C,EAAIhhE,EAAE,GACNvB,EAAI2iE,GAAIphE,EAAE,IACV+gE,EAAIK,GAAIphE,EAAE,IAChB,OAAO4hB,EAAE5hB,EAAI,IACT,QAAQghE,MAAMviE,OAAOsiE,OAAOI,GAAIv/C,EAAE5hB,MAClC,OAAOghE,MAAMviE,OAAOsiE,KAC1B,CAoUyBuO,CAAUz4E,KAAKk4E,WAAQrvE,CAC9C,CACA6vE,IAAIC,EAAOC,GACT,GAAID,EAAO,CACT,MAAME,EAAK74E,KAAKyrE,IACVqN,EAAKH,EAAMlN,IACjB,IAAIsN,EACJ,MAAMvV,EAAIoV,IAAWG,EAAK,GAAMH,EAC1BpN,EAAI,EAAIhI,EAAI,EACZr6D,EAAI0vE,EAAG1vE,EAAI2vE,EAAG3vE,EACd6vE,IAAOxN,EAAIriE,IAAO,EAAIqiE,GAAKA,EAAIriE,IAAM,EAAIqiE,EAAIriE,IAAM,GAAK,EAC9D4vE,EAAK,EAAIC,EACTH,EAAGpjD,EAAI,IAAOujD,EAAKH,EAAGpjD,EAAIsjD,EAAKD,EAAGrjD,EAAI,GACtCojD,EAAGlN,EAAI,IAAOqN,EAAKH,EAAGlN,EAAIoN,EAAKD,EAAGnN,EAAI,GACtCkN,EAAGrxD,EAAI,IAAOwxD,EAAKH,EAAGrxD,EAAIuxD,EAAKD,EAAGtxD,EAAI,GACtCqxD,EAAG1vE,EAAIq6D,EAAIqV,EAAG1vE,GAAK,EAAIq6D,GAAKsV,EAAG3vE,EAC/BnJ,KAAKyrE,IAAMoN,CACb,CACA,OAAO74E,IACT,CACA49B,YAAY+6C,EAAOtmD,GAIjB,OAHIsmD,IACF34E,KAAKk4E,KAtGX,SAAqBe,EAAMC,EAAM7mD,GAC/B,MAAMoD,EAAIlrB,GAAK+/D,GAAI2O,EAAKxjD,IAClBk2C,EAAIphE,GAAK+/D,GAAI2O,EAAKtN,IAClBnkD,EAAIjd,GAAK+/D,GAAI2O,EAAKzxD,IACxB,MAAO,CACLiO,EAAG40C,GAAIsM,GAAGlhD,EAAIpD,GAAK9nB,GAAK+/D,GAAI4O,EAAKzjD,IAAMA,KACvCk2C,EAAGtB,GAAIsM,GAAGhL,EAAIt5C,GAAK9nB,GAAK+/D,GAAI4O,EAAKvN,IAAMA,KACvCnkD,EAAG6iD,GAAIsM,GAAGnvD,EAAI6K,GAAK9nB,GAAK+/D,GAAI4O,EAAK1xD,IAAMA,KACvCre,EAAG8vE,EAAK9vE,EAAIkpB,GAAK6mD,EAAK/vE,EAAI8vE,EAAK9vE,GAEnC,CA4FkB,CAAYnJ,KAAKk4E,KAAMS,EAAMT,KAAM7lD,IAE1CryB,IACT,CACA47B,QACE,OAAO,IAAI67C,GAAMz3E,KAAKyrE,IACxB,CACA+M,MAAMrvE,GAEJ,OADAnJ,KAAKk4E,KAAK/uE,EAAIkhE,GAAIlhE,GACXnJ,IACT,CACAm5E,QAAQtC,GAGN,OAFY72E,KAAKk4E,KACb/uE,GAAK,EAAI0tE,EACN72E,IACT,CACAo5E,YACE,MAAM3N,EAAMzrE,KAAKk4E,KACXmB,EAAM7jE,GAAc,GAARi2D,EAAIh2C,EAAkB,IAARg2C,EAAIE,EAAmB,IAARF,EAAIjkD,GAEnD,OADAikD,EAAIh2C,EAAIg2C,EAAIE,EAAIF,EAAIjkD,EAAI6xD,EACjBr5E,IACT,CACAs5E,QAAQzC,GAGN,OAFY72E,KAAKk4E,KACb/uE,GAAK,EAAI0tE,EACN72E,IACT,CACAu5E,SACE,MAAMxuD,EAAI/qB,KAAKk4E,KAIf,OAHAntD,EAAE0K,EAAI,IAAM1K,EAAE0K,EACd1K,EAAE4gD,EAAI,IAAM5gD,EAAE4gD,EACd5gD,EAAEvD,EAAI,IAAMuD,EAAEvD,EACPxnB,IACT,CACAw5E,QAAQ3C,GAEN,OADAD,GAAO52E,KAAKk4E,KAAM,EAAGrB,GACd72E,IACT,CACAy5E,OAAO5C,GAEL,OADAD,GAAO52E,KAAKk4E,KAAM,GAAIrB,GACf72E,IACT,CACA05E,SAAS7C,GAEP,OADAD,GAAO52E,KAAKk4E,KAAM,EAAGrB,GACd72E,IACT,CACA25E,WAAW9C,GAET,OADAD,GAAO52E,KAAKk4E,KAAM,GAAIrB,GACf72E,IACT,CACA45E,OAAOC,GAEL,OAjaJ,SAAgB9uD,EAAG8uD,GACjB,IAAI1P,EAAIuB,GAAQ3gD,GAChBo/C,EAAE,GAAK4B,GAAI5B,EAAE,GAAK0P,GAClB1P,EAAI2B,GAAQ3B,GACZp/C,EAAE0K,EAAI00C,EAAE,GACRp/C,EAAE4gD,EAAIxB,EAAE,GACRp/C,EAAEvD,EAAI2iD,EAAE,EACV,CAyZIyP,CAAO55E,KAAKk4E,KAAM2B,GACX75E,IACT,EAEF,SAAS85E,GAAU9C,GACjB,OAAO,IAAIS,GAAMT,EACnB,CAEA,SAAS+C,GAAoBhzE,GAC3B,GAAIA,GAA0B,iBAAVA,EAAoB,CACtC,MAAMnB,EAAOmB,EAAM8D,WACnB,MAAgB,2BAATjF,GAA8C,4BAATA,CAC9C,CACA,OAAO,CACT,CACA,SAAS+yE,GAAM5xE,GACb,OAAOgzE,GAAoBhzE,GAASA,EAAQ+yE,GAAU/yE,EACxD,CACA,SAASizE,GAAcjzE,GACrB,OAAOgzE,GAAoBhzE,GACvBA,EACA+yE,GAAU/yE,GAAO2yE,SAAS,IAAKD,OAAO,IAAKnB,WACjD,CAEA,MAAM2B,GAAYrvE,OAAOxC,OAAO,MAC1B+pD,GAAcvnD,OAAOxC,OAAO,MAClC,SAAS8xE,GAAWtlE,EAAM9N,GACxB,IAAKA,EACH,OAAO8N,EAET,MAAMtJ,EAAOxE,EAAI4H,MAAM,KACvB,IAAK,IAAIxD,EAAI,EAAGP,EAAIW,EAAKlI,OAAQ8H,EAAIP,IAAKO,EAAG,CAC3C,MAAMu1D,EAAIn1D,EAAKJ,GACf0J,EAAOA,EAAK6rD,KAAO7rD,EAAK6rD,GAAK71D,OAAOxC,OAAO,MAC7C,CACA,OAAOwM,CACT,CACA,SAAS+G,GAAIw+D,EAAMzvB,EAAOjtB,GACxB,MAAqB,iBAAVitB,EACFoW,GAAMoZ,GAAWC,EAAMzvB,GAAQjtB,GAEjCqjC,GAAMoZ,GAAWC,EAAM,IAAKzvB,EACrC,CAoFA,IAAI0vB,GAAW,IAnFf,MACE15E,YAAY25E,GACVr6E,KAAKs6E,eAAYzxE,EACjB7I,KAAKu6E,gBAAkB,kBACvBv6E,KAAKw6E,YAAc,kBACnBx6E,KAAK24E,MAAQ,OACb34E,KAAKy6E,SAAW,CAAC,EACjBz6E,KAAKghB,iBAAoBi2B,GAAYA,EAAQyjC,MAAMC,SAASC,sBAC5D56E,KAAK+c,SAAW,CAAC,EACjB/c,KAAKoF,OAAS,CACZ,YACA,WACA,QACA,aACA,aAEFpF,KAAK66E,KAAO,CACVC,OAAQ,qDACR78B,KAAM,GACNv4B,MAAO,SACPq1D,WAAY,IACZnC,OAAQ,MAEV54E,KAAKg7E,MAAQ,CAAC,EACdh7E,KAAKi7E,qBAAuB,CAACC,EAAK1tE,IAAYwsE,GAAcxsE,EAAQ+sE,iBACpEv6E,KAAKm7E,iBAAmB,CAACD,EAAK1tE,IAAYwsE,GAAcxsE,EAAQgtE,aAChEx6E,KAAKo7E,WAAa,CAACF,EAAK1tE,IAAYwsE,GAAcxsE,EAAQmrE,OAC1D34E,KAAKq7E,UAAY,IACjBr7E,KAAKs7E,YAAc,CACjBt6B,KAAM,UACNtf,WAAW,EACX65C,kBAAkB,GAEpBv7E,KAAKw7E,qBAAsB,EAC3Bx7E,KAAKy7E,QAAU,KACfz7E,KAAK07E,QAAU,KACf17E,KAAK27E,SAAU,EACf37E,KAAK47E,QAAU,CAAC,EAChB57E,KAAK67E,YAAa,EAClB77E,KAAK87E,WAAQjzE,EACb7I,KAAK+7E,OAAS,CAAC,EACf/7E,KAAKg8E,UAAW,EAChBh8E,KAAKi8E,yBAA0B,EAC/Bj8E,KAAKk8E,SAAS7B,EAChB,CACA1+D,IAAI+uC,EAAOjtB,GACT,OAAO9hB,GAAI3b,KAAM0qD,EAAOjtB,EAC1B,CACA/hB,IAAIgvC,GACF,OAAOwvB,GAAWl6E,KAAM0qD,EAC1B,CACAwxB,SAASxxB,EAAOjtB,GACd,OAAO9hB,GAAIw2C,GAAazH,EAAOjtB,EACjC,CACA0+C,SAASzxB,EAAOjtB,GACd,OAAO9hB,GAAIs+D,GAAWvvB,EAAOjtB,EAC/B,CACA2+C,MAAM1xB,EAAOjhD,EAAM4yE,EAAaxmB,GAC9B,MAAMymB,EAAcpC,GAAWl6E,KAAM0qD,GAC/B6xB,EAAoBrC,GAAWl6E,KAAMq8E,GACrCG,EAAc,IAAM/yE,EAC1BmB,OAAOwB,iBAAiBkwE,EAAa,CACnC,CAACE,GAAc,CACbz1E,MAAOu1E,EAAY7yE,GACnB+C,UAAU,GAEZ,CAAC/C,GAAO,CACNkC,YAAY,EACZ+P,MACE,MAAM+gE,EAAQz8E,KAAKw8E,GACb1wE,EAASywE,EAAkB1mB,GACjC,OAAIwJ,GAASod,GACJ7xE,OAAOiS,OAAO,CAAC,EAAG/Q,EAAQ2wE,GAE5Bhd,GAAegd,EAAO3wE,EAC/B,EACA6P,IAAI5U,GACF/G,KAAKw8E,GAAez1E,CACtB,IAGN,GAE0B,CAC1B21E,YAAcjzE,IAAUA,EAAK8wB,WAAW,MACxCoiD,WAAalzE,GAAkB,WAATA,EACtBuxE,MAAO,CACL4B,UAAW,eAEbtB,YAAa,CACXoB,aAAa,EACbC,YAAY,KAahB,SAASE,GAAa3B,EAAKr3E,EAAMi5E,EAAIC,EAASp/C,GAC5C,IAAIq/C,EAAYn5E,EAAK85B,GAQrB,OAPKq/C,IACHA,EAAYn5E,EAAK85B,GAAUu9C,EAAI+B,YAAYt/C,GAAQ3nB,MACnD8mE,EAAG58E,KAAKy9B,IAENq/C,EAAYD,IACdA,EAAUC,GAELD,CACT,CACA,SAASG,GAAahC,EAAKL,EAAMsC,EAAe56B,GAE9C,IAAI1+C,GADJ0+C,EAAQA,GAAS,CAAC,GACD1+C,KAAO0+C,EAAM1+C,MAAQ,CAAC,EACnCi5E,EAAKv6B,EAAM66B,eAAiB76B,EAAM66B,gBAAkB,GACpD76B,EAAMs4B,OAASA,IACjBh3E,EAAO0+C,EAAM1+C,KAAO,CAAC,EACrBi5E,EAAKv6B,EAAM66B,eAAiB,GAC5B76B,EAAMs4B,KAAOA,GAEfK,EAAImC,OACJnC,EAAIL,KAAOA,EACX,IAAIkC,EAAU,EACd,MAAM5c,EAAOgd,EAAc/5E,OAC3B,IAAI8H,EAAG2sE,EAAGyF,EAAMC,EAAOC,EACvB,IAAKtyE,EAAI,EAAGA,EAAIi1D,EAAMj1D,IAEpB,GADAqyE,EAAQJ,EAAcjyE,GAClBqyE,UAA4D,IAAnBtzE,GAAQszE,GACnDR,EAAUF,GAAa3B,EAAKr3E,EAAMi5E,EAAIC,EAASQ,QAC1C,GAAItzE,GAAQszE,GACjB,IAAK1F,EAAI,EAAGyF,EAAOC,EAAMn6E,OAAQy0E,EAAIyF,EAAMzF,IACzC2F,EAAcD,EAAM1F,GAChB2F,SAAsDvzE,GAAQuzE,KAChET,EAAUF,GAAa3B,EAAKr3E,EAAMi5E,EAAIC,EAASS,IAKvDtC,EAAIuC,UACJ,MAAMC,EAAQZ,EAAG15E,OAAS,EAC1B,GAAIs6E,EAAQP,EAAc/5E,OAAQ,CAChC,IAAK8H,EAAI,EAAGA,EAAIwyE,EAAOxyE,WACdrH,EAAKi5E,EAAG5xE,IAEjB4xE,EAAGv+B,OAAO,EAAGm/B,EACf,CACA,OAAOX,CACT,CACA,SAASY,GAAYjD,EAAOkD,EAAO5nE,GACjC,MAAMgL,EAAmB05D,EAAMmD,wBACzBC,EAAsB,IAAV9nE,EAAc3T,KAAKiT,IAAIU,EAAQ,EAAG,IAAO,EAC3D,OAAO3T,KAAKmT,OAAOooE,EAAQE,GAAa98D,GAAoBA,EAAmB88D,CACjF,CACA,SAASC,GAAYC,EAAQ9C,IAC3BA,EAAMA,GAAO8C,EAAOC,WAAW,OAC3BZ,OACJnC,EAAIgD,iBACJhD,EAAIiD,UAAU,EAAG,EAAGH,EAAOhoE,MAAOgoE,EAAO/nE,QACzCilE,EAAIuC,SACN,CACA,SAASW,GAAUlD,EAAK1tE,EAAS4I,EAAGC,GAClCgoE,GAAgBnD,EAAK1tE,EAAS4I,EAAGC,EAAG,KACtC,CACA,SAASgoE,GAAgBnD,EAAK1tE,EAAS4I,EAAGC,EAAGm1D,GAC3C,IAAI5lE,EAAM04E,EAASC,EAAStgC,EAAMugC,EAAcxoE,EAChD,MAAM0P,EAAQlY,EAAQixE,WAChBC,EAAWlxE,EAAQkxE,SACnBC,EAASnxE,EAAQmxE,OACvB,IAAIC,GAAOF,GAAY,GAAKvc,GAC5B,GAAIz8C,GAA0B,iBAAVA,IAClB9f,EAAO8f,EAAM7a,WACA,8BAATjF,GAAiD,+BAATA,GAM1C,OALAs1E,EAAImC,OACJnC,EAAI2D,UAAUzoE,EAAGC,GACjB6kE,EAAItB,OAAOgF,GACX1D,EAAI4D,UAAUp5D,GAAQA,EAAM1P,MAAQ,GAAI0P,EAAMzP,OAAS,EAAGyP,EAAM1P,MAAO0P,EAAMzP,aAC7EilE,EAAIuC,UAIR,KAAIza,MAAM2b,IAAWA,GAAU,GAA/B,CAIA,OADAzD,EAAI6D,YACIr5D,GACR,QACM8lD,EACF0P,EAAI8D,QAAQ5oE,EAAGC,EAAGm1D,EAAI,EAAGmT,EAAQ,EAAG,EAAG5c,IAEvCmZ,EAAI+D,IAAI7oE,EAAGC,EAAGsoE,EAAQ,EAAG5c,IAE3BmZ,EAAIgE,YACJ,MACF,IAAK,WACHhE,EAAIiE,OAAO/oE,EAAI/T,KAAKylE,IAAI8W,GAAOD,EAAQtoE,EAAIhU,KAAK0mE,IAAI6V,GAAOD,GAC3DC,GAAOtc,GACP4Y,EAAIkE,OAAOhpE,EAAI/T,KAAKylE,IAAI8W,GAAOD,EAAQtoE,EAAIhU,KAAK0mE,IAAI6V,GAAOD,GAC3DC,GAAOtc,GACP4Y,EAAIkE,OAAOhpE,EAAI/T,KAAKylE,IAAI8W,GAAOD,EAAQtoE,EAAIhU,KAAK0mE,IAAI6V,GAAOD,GAC3DzD,EAAIgE,YACJ,MACF,IAAK,cACHV,EAAwB,KAATG,EACf1gC,EAAO0gC,EAASH,EAChBF,EAAUj8E,KAAK0mE,IAAI6V,EAAMvc,IAAcpkB,EACvCsgC,EAAUl8E,KAAKylE,IAAI8W,EAAMvc,IAAcpkB,EACvCi9B,EAAI+D,IAAI7oE,EAAIkoE,EAASjoE,EAAIkoE,EAASC,EAAcI,EAAM9c,GAAI8c,EAAMxc,IAChE8Y,EAAI+D,IAAI7oE,EAAImoE,EAASloE,EAAIioE,EAASE,EAAcI,EAAMxc,GAASwc,GAC/D1D,EAAI+D,IAAI7oE,EAAIkoE,EAASjoE,EAAIkoE,EAASC,EAAcI,EAAKA,EAAMxc,IAC3D8Y,EAAI+D,IAAI7oE,EAAImoE,EAASloE,EAAIioE,EAASE,EAAcI,EAAMxc,GAASwc,EAAM9c,IACrEoZ,EAAIgE,YACJ,MACF,IAAK,OACH,IAAKR,EAAU,CACbzgC,EAAO57C,KAAKg9E,QAAUV,EACtB3oE,EAAQw1D,EAAIA,EAAI,EAAIvtB,EACpBi9B,EAAIvlE,KAAKS,EAAIJ,EAAOK,EAAI4nC,EAAM,EAAIjoC,EAAO,EAAIioC,GAC7C,KACF,CACA2gC,GAAOvc,GACT,IAAK,UACHic,EAAUj8E,KAAK0mE,IAAI6V,GAAOD,EAC1BJ,EAAUl8E,KAAKylE,IAAI8W,GAAOD,EAC1BzD,EAAIiE,OAAO/oE,EAAIkoE,EAASjoE,EAAIkoE,GAC5BrD,EAAIkE,OAAOhpE,EAAImoE,EAASloE,EAAIioE,GAC5BpD,EAAIkE,OAAOhpE,EAAIkoE,EAASjoE,EAAIkoE,GAC5BrD,EAAIkE,OAAOhpE,EAAImoE,EAASloE,EAAIioE,GAC5BpD,EAAIgE,YACJ,MACF,IAAK,WACHN,GAAOvc,GACT,IAAK,QACHic,EAAUj8E,KAAK0mE,IAAI6V,GAAOD,EAC1BJ,EAAUl8E,KAAKylE,IAAI8W,GAAOD,EAC1BzD,EAAIiE,OAAO/oE,EAAIkoE,EAASjoE,EAAIkoE,GAC5BrD,EAAIkE,OAAOhpE,EAAIkoE,EAASjoE,EAAIkoE,GAC5BrD,EAAIiE,OAAO/oE,EAAImoE,EAASloE,EAAIioE,GAC5BpD,EAAIkE,OAAOhpE,EAAImoE,EAASloE,EAAIioE,GAC5B,MACF,IAAK,OACHA,EAAUj8E,KAAK0mE,IAAI6V,GAAOD,EAC1BJ,EAAUl8E,KAAKylE,IAAI8W,GAAOD,EAC1BzD,EAAIiE,OAAO/oE,EAAIkoE,EAASjoE,EAAIkoE,GAC5BrD,EAAIkE,OAAOhpE,EAAIkoE,EAASjoE,EAAIkoE,GAC5BrD,EAAIiE,OAAO/oE,EAAImoE,EAASloE,EAAIioE,GAC5BpD,EAAIkE,OAAOhpE,EAAImoE,EAASloE,EAAIioE,GAC5BM,GAAOvc,GACPic,EAAUj8E,KAAK0mE,IAAI6V,GAAOD,EAC1BJ,EAAUl8E,KAAKylE,IAAI8W,GAAOD,EAC1BzD,EAAIiE,OAAO/oE,EAAIkoE,EAASjoE,EAAIkoE,GAC5BrD,EAAIkE,OAAOhpE,EAAIkoE,EAASjoE,EAAIkoE,GAC5BrD,EAAIiE,OAAO/oE,EAAImoE,EAASloE,EAAIioE,GAC5BpD,EAAIkE,OAAOhpE,EAAImoE,EAASloE,EAAIioE,GAC5B,MACF,IAAK,OACHA,EAAU9S,EAAIA,EAAI,EAAInpE,KAAK0mE,IAAI6V,GAAOD,EACtCJ,EAAUl8E,KAAKylE,IAAI8W,GAAOD,EAC1BzD,EAAIiE,OAAO/oE,EAAIkoE,EAASjoE,EAAIkoE,GAC5BrD,EAAIkE,OAAOhpE,EAAIkoE,EAASjoE,EAAIkoE,GAC5B,MACF,IAAK,OACHrD,EAAIiE,OAAO/oE,EAAGC,GACd6kE,EAAIkE,OAAOhpE,EAAI/T,KAAK0mE,IAAI6V,GAAOD,EAAQtoE,EAAIhU,KAAKylE,IAAI8W,GAAOD,GAG7DzD,EAAIoE,OACA9xE,EAAQ+xE,YAAc,GACxBrE,EAAIsE,QArFN,CAuFF,CACA,SAASC,GAAeC,EAAOC,EAAM95D,GAEnC,OADAA,EAASA,GAAU,IACX85D,GAASD,GAASA,EAAMtpE,EAAIupE,EAAKltE,KAAOoT,GAAU65D,EAAMtpE,EAAIupE,EAAKhtE,MAAQkT,GACjF65D,EAAMrpE,EAAIspE,EAAKzpE,IAAM2P,GAAU65D,EAAMrpE,EAAIspE,EAAKxpE,OAAS0P,CACzD,CACA,SAAS+5D,GAAS1E,EAAKyE,GACrBzE,EAAImC,OACJnC,EAAI6D,YACJ7D,EAAIvlE,KAAKgqE,EAAKltE,KAAMktE,EAAKzpE,IAAKypE,EAAKhtE,MAAQgtE,EAAKltE,KAAMktE,EAAKxpE,OAASwpE,EAAKzpE,KACzEglE,EAAI2E,MACN,CACA,SAASC,GAAW5E,GAClBA,EAAIuC,SACN,CACA,SAASsC,GAAe7E,EAAK8E,EAAUl0E,EAAQm0E,EAAMj/B,GACnD,IAAKg/B,EACH,OAAO9E,EAAIkE,OAAOtzE,EAAOsK,EAAGtK,EAAOuK,GAErC,GAAa,WAAT2qC,EAAmB,CACrB,MAAMk/B,GAAYF,EAAS5pE,EAAItK,EAAOsK,GAAK,EAC3C8kE,EAAIkE,OAAOc,EAAUF,EAAS3pE,GAC9B6kE,EAAIkE,OAAOc,EAAUp0E,EAAOuK,EAC9B,KAAoB,UAAT2qC,KAAuBi/B,EAChC/E,EAAIkE,OAAOY,EAAS5pE,EAAGtK,EAAOuK,GAE9B6kE,EAAIkE,OAAOtzE,EAAOsK,EAAG4pE,EAAS3pE,GAEhC6kE,EAAIkE,OAAOtzE,EAAOsK,EAAGtK,EAAOuK,EAC9B,CACA,SAAS8pE,GAAejF,EAAK8E,EAAUl0E,EAAQm0E,GAC7C,IAAKD,EACH,OAAO9E,EAAIkE,OAAOtzE,EAAOsK,EAAGtK,EAAOuK,GAErC6kE,EAAIkF,cACFH,EAAOD,EAASK,KAAOL,EAASM,KAChCL,EAAOD,EAASO,KAAOP,EAASQ,KAChCP,EAAOn0E,EAAOw0E,KAAOx0E,EAAOu0E,KAC5BJ,EAAOn0E,EAAO00E,KAAO10E,EAAOy0E,KAC5Bz0E,EAAOsK,EACPtK,EAAOuK,EACX,CACA,SAASoqE,GAAWvF,EAAKr/C,EAAMzlB,EAAGC,EAAGwkE,EAAM6F,EAAO,CAAC,GACjD,MAAMhjD,EAAQzzB,GAAQ4xB,GAAQA,EAAO,CAACA,GAChC2jD,EAASkB,EAAKC,YAAc,GAA0B,KAArBD,EAAKE,YAC5C,IAAI11E,EAAG4yB,EAIP,IAHAo9C,EAAImC,OACJnC,EAAIL,KAAOA,EAAKl9C,OAmBlB,SAAuBu9C,EAAKwF,GACtBA,EAAKG,aACP3F,EAAI2D,UAAU6B,EAAKG,YAAY,GAAIH,EAAKG,YAAY,IAEjDzhB,GAAcshB,EAAKhC,WACtBxD,EAAItB,OAAO8G,EAAKhC,UAEdgC,EAAK/H,QACPuC,EAAI4F,UAAYJ,EAAK/H,OAEnB+H,EAAKK,YACP7F,EAAI6F,UAAYL,EAAKK,WAEnBL,EAAKM,eACP9F,EAAI8F,aAAeN,EAAKM,aAE5B,CAlCEC,CAAc/F,EAAKwF,GACdx1E,EAAI,EAAGA,EAAIwyB,EAAMt6B,SAAU8H,EAC9B4yB,EAAOJ,EAAMxyB,GACTs0E,IACEkB,EAAKE,cACP1F,EAAIgG,YAAcR,EAAKE,aAEpBxhB,GAAcshB,EAAKC,eACtBzF,EAAIiG,UAAYT,EAAKC,aAEvBzF,EAAIkG,WAAWtjD,EAAM1nB,EAAGC,EAAGqqE,EAAKW,WAElCnG,EAAIoG,SAASxjD,EAAM1nB,EAAGC,EAAGqqE,EAAKW,UAC9BE,GAAarG,EAAK9kE,EAAGC,EAAGynB,EAAM4iD,GAC9BrqE,GAAKwkE,EAAKE,WAEZG,EAAIuC,SACN,CAkBA,SAAS8D,GAAarG,EAAK9kE,EAAGC,EAAGynB,EAAM4iD,GACrC,GAAIA,EAAKc,eAAiBd,EAAKe,UAAW,CACxC,MAAMC,EAAUxG,EAAI+B,YAAYn/C,GAC1BrrB,EAAO2D,EAAIsrE,EAAQC,sBACnBhvE,EAAQyD,EAAIsrE,EAAQE,uBACpB1rE,EAAMG,EAAIqrE,EAAQG,wBAClB1rE,EAASE,EAAIqrE,EAAQI,yBACrBC,EAAcrB,EAAKc,eAAiBtrE,EAAMC,GAAU,EAAIA,EAC9D+kE,EAAIgG,YAAchG,EAAI4F,UACtB5F,EAAI6D,YACJ7D,EAAIiG,UAAYT,EAAKsB,iBAAmB,EACxC9G,EAAIiE,OAAO1sE,EAAMsvE,GACjB7G,EAAIkE,OAAOzsE,EAAOovE,GAClB7G,EAAIsE,QACN,CACF,CACA,SAASyC,GAAmB/G,EAAKvlE,GAC/B,MAAM,EAACS,EAAC,EAAEC,EAAC,EAAEm1D,EAAC,EAAErB,EAAC,OAAEwU,GAAUhpE,EAC7BulE,EAAI+D,IAAI7oE,EAAIuoE,EAAOuD,QAAS7rE,EAAIsoE,EAAOuD,QAASvD,EAAOuD,SAAU9f,GAASN,IAAI,GAC9EoZ,EAAIkE,OAAOhpE,EAAGC,EAAI8zD,EAAIwU,EAAOwD,YAC7BjH,EAAI+D,IAAI7oE,EAAIuoE,EAAOwD,WAAY9rE,EAAI8zD,EAAIwU,EAAOwD,WAAYxD,EAAOwD,WAAYrgB,GAAIM,IAAS,GAC1F8Y,EAAIkE,OAAOhpE,EAAIo1D,EAAImT,EAAOyD,YAAa/rE,EAAI8zD,GAC3C+Q,EAAI+D,IAAI7oE,EAAIo1D,EAAImT,EAAOyD,YAAa/rE,EAAI8zD,EAAIwU,EAAOyD,YAAazD,EAAOyD,YAAahgB,GAAS,GAAG,GAChG8Y,EAAIkE,OAAOhpE,EAAIo1D,EAAGn1D,EAAIsoE,EAAO0D,UAC7BnH,EAAI+D,IAAI7oE,EAAIo1D,EAAImT,EAAO0D,SAAUhsE,EAAIsoE,EAAO0D,SAAU1D,EAAO0D,SAAU,GAAIjgB,IAAS,GACpF8Y,EAAIkE,OAAOhpE,EAAIuoE,EAAOuD,QAAS7rE,EACjC,CAEA,MAAMisE,GAAc,IAAI19B,OAAO,wCACzB29B,GAAa,IAAI39B,OAAO,yEAC9B,SAAS49B,GAAaz7E,EAAOk3C,GAC3B,MAAMrpB,GAAW,GAAK7tB,GAAO6yB,MAAM0oD,IACnC,IAAK1tD,GAA0B,WAAfA,EAAQ,GACtB,OAAc,IAAPqpB,EAGT,OADAl3C,GAAS6tB,EAAQ,GACTA,EAAQ,IAChB,IAAK,KACH,OAAO7tB,EACT,IAAK,IACHA,GAAS,IAGX,OAAOk3C,EAAOl3C,CAChB,CAEA,SAAS07E,GAAkB17E,EAAO8F,GAChC,MAAM6qE,EAAM,CAAC,EACPgL,EAAWrjB,GAASxyD,GACpBvB,EAAOo3E,EAAW93E,OAAOU,KAAKuB,GAASA,EACvCsxC,EAAOkhB,GAASt4D,GAClB27E,EACEltD,GAAQiqC,GAAe14D,EAAMyuB,GAAOzuB,EAAM8F,EAAM2oB,KAChDA,GAAQzuB,EAAMyuB,GAChB,IAAMzuB,EACV,IAAK,MAAMyuB,KAAQlqB,EACjBosE,EAAIliD,IAAqB2oB,EAAK3oB,IAXF,EAa9B,OAAOkiD,CACT,CACA,SAASiL,GAAO57E,GACd,OAAO07E,GAAkB17E,EAAO,CAACmP,IAAK,IAAKvD,MAAO,IAAKwD,OAAQ,IAAK1D,KAAM,KAC5E,CACA,SAASmwE,GAAc77E,GACrB,OAAO07E,GAAkB17E,EAAO,CAAC,UAAW,WAAY,aAAc,eACxE,CACA,SAAS87E,GAAU97E,GACjB,MAAMuF,EAAMq2E,GAAO57E,GAGnB,OAFAuF,EAAI0J,MAAQ1J,EAAImG,KAAOnG,EAAIqG,MAC3BrG,EAAI2J,OAAS3J,EAAI4J,IAAM5J,EAAI6J,OACpB7J,CACT,CACA,SAASw2E,GAAOt1E,EAASu1E,GACvBv1E,EAAUA,GAAW,CAAC,EACtBu1E,EAAWA,GAAY3I,GAASS,KAChC,IAAI58B,EAAOwhB,GAAejyD,EAAQywC,KAAM8kC,EAAS9kC,MAC7B,iBAATA,IACTA,EAAOnpB,SAASmpB,EAAM,KAExB,IAAIv4B,EAAQ+5C,GAAejyD,EAAQkY,MAAOq9D,EAASr9D,OAC/CA,KAAW,GAAKA,GAAOkU,MAAM2oD,MAC/B3iF,QAAQqjD,KAAK,kCAAoCv9B,EAAQ,KACzDA,EAAQ,IAEV,MAAMm1D,EAAO,CACXC,OAAQrb,GAAejyD,EAAQstE,OAAQiI,EAASjI,QAChDC,WAAYyH,GAAa/iB,GAAejyD,EAAQutE,WAAYgI,EAAShI,YAAa98B,GAClFA,OACAv4B,QACAkzD,OAAQnZ,GAAejyD,EAAQorE,OAAQmK,EAASnK,QAChDj7C,OAAQ,IAGV,OADAk9C,EAAKl9C,OAjWP,SAAsBk9C,GACpB,OAAKA,GAAQzb,GAAcyb,EAAK58B,OAASmhB,GAAcyb,EAAKC,QACnD,MAEDD,EAAKn1D,MAAQm1D,EAAKn1D,MAAQ,IAAM,KACrCm1D,EAAKjC,OAASiC,EAAKjC,OAAS,IAAM,IACnCiC,EAAK58B,KAAO,MACZ48B,EAAKC,MACT,CAyVgBkI,CAAanI,GACpBA,CACT,CACA,SAASj8D,GAAQqkE,EAAQhsC,EAASz4B,EAAO0kE,GACvC,IACIh4E,EAAGi1D,EAAMp5D,EADTo8E,GAAY,EAEhB,IAAKj4E,EAAI,EAAGi1D,EAAO8iB,EAAO7/E,OAAQ8H,EAAIi1D,IAAQj1D,EAE5C,GADAnE,EAAQk8E,EAAO/3E,QACDrC,IAAV9B,SAGY8B,IAAZouC,GAA0C,mBAAVlwC,IAClCA,EAAQA,EAAMkwC,GACdksC,GAAY,QAEAt6E,IAAV2V,GAAuBvU,GAAQlD,KACjCA,EAAQA,EAAMyX,EAAQzX,EAAM3D,QAC5B+/E,GAAY,QAEAt6E,IAAV9B,GAIF,OAHIm8E,IAASC,IACXD,EAAKC,WAAY,GAEZp8E,CAGb,CAUA,SAASq8E,GAAcC,EAAepsC,GACpC,OAAOrsC,OAAOiS,OAAOjS,OAAOxC,OAAOi7E,GAAgBpsC,EACrD,CAEA,SAASqsC,GAAgBC,EAAQC,EAAW,CAAC,IAAKC,EAAaF,EAAQR,EAAUW,EAAY,KAAMH,EAAO,KACnG5hB,GAAQohB,KACXA,EAAWY,GAAS,YAAaJ,IAEnC,MAAMhhC,EAAQ,CACZ,CAACl4C,OAAOqrB,aAAc,SACtBkuD,YAAY,EACZC,QAASN,EACTO,YAAaL,EACb7G,UAAWmG,EACXgB,WAAYL,EACZvH,SAAWzxB,GAAU44B,GAAgB,CAAC54B,KAAU64B,GAASC,EAAUC,EAAYV,IAEjF,OAAO,IAAIiB,MAAMzhC,EAAO,CACtB0hC,eAAc,CAACn4E,EAAQ0pB,YACd1pB,EAAO0pB,UACP1pB,EAAOo4E,aACPX,EAAO,GAAG/tD,IACV,GAET9Z,IAAG,CAAC5P,EAAQ0pB,IACH2uD,GAAQr4E,EAAQ0pB,GACrB,IAuLR,SAA8BA,EAAMguD,EAAUD,EAAQa,GACpD,IAAIr9E,EACJ,IAAK,MAAMmzB,KAAUspD,EAEnB,GADAz8E,EAAQ48E,GAASU,GAAQnqD,EAAQ1E,GAAO+tD,GACpC5hB,GAAQ56D,GACV,OAAOu9E,GAAiB9uD,EAAMzuB,GAC1Bw9E,GAAkBhB,EAAQa,EAAO5uD,EAAMzuB,GACvCA,CAGV,CAjMcy9E,CAAqBhvD,EAAMguD,EAAUD,EAAQz3E,KAEvDJ,yBAAwB,CAACI,EAAQ0pB,IACxBG,QAAQjqB,yBAAyBI,EAAO+3E,QAAQ,GAAIruD,GAE7Dk+B,eAAc,IACL/9B,QAAQ+9B,eAAe6vB,EAAO,IAEvC/nE,IAAG,CAAC1P,EAAQ0pB,IACHivD,GAAqB34E,GAAQg4C,SAAStuB,GAE/CpqB,QAAQU,GACC24E,GAAqB34E,GAE9B6P,IAAI7P,EAAQ0pB,EAAMzuB,GAChB,MAAM29E,EAAU54E,EAAO64E,WAAa74E,EAAO64E,SAAWjB,KAGtD,OAFA53E,EAAO0pB,GAAQkvD,EAAQlvD,GAAQzuB,SACxB+E,EAAOo4E,OACP,CACT,GAEJ,CACA,SAASU,GAAeR,EAAOntC,EAAS4tC,EAAUC,GAChD,MAAMviC,EAAQ,CACZqhC,YAAY,EACZmB,OAAQX,EACRY,SAAU/tC,EACVguC,UAAWJ,EACXK,OAAQ,IAAIjqE,IACZo/D,aAAcA,GAAa+J,EAAOU,GAClCK,WAAajK,GAAQ0J,GAAeR,EAAOlJ,EAAK2J,EAAUC,GAC1D3I,SAAWzxB,GAAUk6B,GAAeR,EAAMjI,SAASzxB,GAAQzT,EAAS4tC,EAAUC,IAEhF,OAAO,IAAId,MAAMzhC,EAAO,CACtB0hC,eAAc,CAACn4E,EAAQ0pB,YACd1pB,EAAO0pB,UACP4uD,EAAM5uD,IACN,GAET9Z,IAAG,CAAC5P,EAAQ0pB,EAAM87B,IACT6yB,GAAQr4E,EAAQ0pB,GACrB,IA4CR,SAA6B1pB,EAAQ0pB,EAAM87B,GACzC,MAAM,OAACyzB,EAAM,SAAEC,EAAQ,UAAEC,EAAW5K,aAAcloB,GAAermD,EACjE,IAAI/E,EAAQg+E,EAAOvvD,GAUnB,OATIosC,GAAW76D,IAAUorD,EAAYizB,aAAa5vD,KAChDzuB,EAUJ,SAA4ByuB,EAAMzuB,EAAO+E,EAAQwlD,GAC/C,MAAM,OAACyzB,EAAM,SAAEC,EAAQ,UAAEC,EAAS,OAAEC,GAAUp5E,EAC9C,GAAIo5E,EAAO1pE,IAAIga,GACb,MAAM,IAAIoQ,MAAM,uBAAyB57B,MAAMO,KAAK26E,GAAQnnD,KAAK,MAAQ,KAAOvI,GAQlF,OANA0vD,EAAO38E,IAAIitB,GACXzuB,EAAQA,EAAMi+E,EAAUC,GAAa3zB,GACrC4zB,EAAOnhD,OAAOvO,GACV8uD,GAAiB9uD,EAAMzuB,KACzBA,EAAQw9E,GAAkBQ,EAAOlB,QAASkB,EAAQvvD,EAAMzuB,IAEnDA,CACT,CAtBYs+E,CAAmB7vD,EAAMzuB,EAAO+E,EAAQwlD,IAE9CrnD,GAAQlD,IAAUA,EAAM3D,SAC1B2D,EAoBJ,SAAuByuB,EAAMzuB,EAAO+E,EAAQw5E,GAC1C,MAAM,OAACP,EAAM,SAAEC,EAAQ,UAAEC,EAAW5K,aAAcloB,GAAermD,EACjE,GAAI61D,GAAQqjB,EAASxmE,QAAU8mE,EAAY9vD,GACzCzuB,EAAQA,EAAMi+E,EAASxmE,MAAQzX,EAAM3D,aAChC,GAAIi8D,GAASt4D,EAAM,IAAK,CAC7B,MAAMgD,EAAMhD,EACNw8E,EAASwB,EAAOlB,QAAQl8E,QAAOC,GAAKA,IAAMmC,IAChDhD,EAAQ,GACR,IAAK,MAAM+G,KAAQ/D,EAAK,CACtB,MAAMq3D,EAAWmjB,GAAkBhB,EAAQwB,EAAQvvD,EAAM1nB,GACzD/G,EAAM7G,KAAK0kF,GAAexjB,EAAU4jB,EAAUC,GAAaA,EAAUzvD,GAAO28B,GAC9E,CACF,CACA,OAAOprD,CACT,CAlCYw+E,CAAc/vD,EAAMzuB,EAAO+E,EAAQqmD,EAAYmzB,cAErDhB,GAAiB9uD,EAAMzuB,KACzBA,EAAQ69E,GAAe79E,EAAOi+E,EAAUC,GAAaA,EAAUzvD,GAAO28B,IAEjEprD,CACT,CAzDcy+E,CAAoB15E,EAAQ0pB,EAAM87B,KAE5C5lD,yBAAwB,CAACI,EAAQ0pB,IACxB1pB,EAAOuuE,aAAaoL,QACvB9vD,QAAQna,IAAI4oE,EAAO5uD,GAAQ,CAAC7pB,YAAY,EAAMY,cAAc,QAAQ1D,EACpE8sB,QAAQjqB,yBAAyB04E,EAAO5uD,GAE9Ck+B,eAAc,IACL/9B,QAAQ+9B,eAAe0wB,GAEhC5oE,IAAG,CAAC1P,EAAQ0pB,IACHG,QAAQna,IAAI4oE,EAAO5uD,GAE5BpqB,QAAO,IACEuqB,QAAQvqB,QAAQg5E,GAEzBzoE,IAAG,CAAC7P,EAAQ0pB,EAAMzuB,KAChBq9E,EAAM5uD,GAAQzuB,SACP+E,EAAO0pB,IACP,IAGb,CACA,SAAS6kD,GAAa+J,EAAOhK,EAAW,CAACsL,YAAY,EAAMC,WAAW,IACpE,MAAM,YAACjJ,EAActC,EAASsL,WAAU,WAAE/I,EAAavC,EAASuL,UAAS,SAAEC,EAAWxL,EAASqL,SAAWrB,EAC1G,MAAO,CACLqB,QAASG,EACTF,WAAYhJ,EACZiJ,UAAWhJ,EACXyI,aAAcxjB,GAAW8a,GAAeA,EAAc,IAAMA,EAC5D4I,YAAa1jB,GAAW+a,GAAcA,EAAa,IAAMA,EAE7D,CACA,MAAM0H,GAAU,CAACnqD,EAAQzwB,IAASywB,EAASA,EAASunC,GAAYh4D,GAAQA,EAClE66E,GAAmB,CAAC9uD,EAAMzuB,IAAUs4D,GAASt4D,IAAmB,aAATyuB,IACzB,OAAjC5qB,OAAO8oD,eAAe3sD,IAAmBA,EAAMrG,cAAgBkK,QAClE,SAASu5E,GAAQr4E,EAAQ0pB,EAAM5W,GAC7B,GAAIhU,OAAOtF,UAAUgb,eAAexb,KAAKgH,EAAQ0pB,GAC/C,OAAO1pB,EAAO0pB,GAEhB,MAAMzuB,EAAQ6X,IAEd,OADA9S,EAAO0pB,GAAQzuB,EACRA,CACT,CA2CA,SAAS8+E,GAAgB9C,EAAUvtD,EAAMzuB,GACvC,OAAO66D,GAAWmhB,GAAYA,EAASvtD,EAAMzuB,GAASg8E,CACxD,CACA,MAAM+C,GAAW,CAACh/E,EAAKya,KAAmB,IAARza,EAAeya,EAC9B,iBAARza,EAAmBq6D,GAAiB5/C,EAAQza,QAAO+B,EAC9D,SAASk9E,GAAUpqE,EAAKqqE,EAAcl/E,EAAKm/E,EAAgBl/E,GACzD,IAAK,MAAMwa,KAAUykE,EAAc,CACjC,MAAMt7B,EAAQo7B,GAASh/E,EAAKya,GAC5B,GAAImpC,EAAO,CACT/uC,EAAIpT,IAAImiD,GACR,MAAMq4B,EAAW8C,GAAgBn7B,EAAMkyB,UAAW91E,EAAKC,GACvD,GAAI46D,GAAQohB,IAAaA,IAAaj8E,GAAOi8E,IAAakD,EACxD,OAAOlD,CAEX,MAAO,IAAc,IAAVr4B,GAAmBiX,GAAQskB,IAAmBn/E,IAAQm/E,EAC/D,OAAO,IAEX,CACA,OAAO,CACT,CACA,SAAS1B,GAAkByB,EAAc5kB,EAAU5rC,EAAMzuB,GACvD,MAAM08E,EAAariB,EAAS0iB,YACtBf,EAAW8C,GAAgBzkB,EAASwb,UAAWpnD,EAAMzuB,GACrDm/E,EAAY,IAAIF,KAAiBvC,GACjC9nE,EAAM,IAAIV,IAChBU,EAAIpT,IAAIxB,GACR,IAAID,EAAMq/E,GAAiBxqE,EAAKuqE,EAAW1wD,EAAMutD,GAAYvtD,EAAMzuB,GACnE,OAAY,OAARD,KAGA66D,GAAQohB,IAAaA,IAAavtD,IACpC1uB,EAAMq/E,GAAiBxqE,EAAKuqE,EAAWnD,EAAUj8E,EAAKC,GAC1C,OAARD,KAICw8E,GAAgBt5E,MAAMO,KAAKoR,GAAM,CAAC,IAAK8nE,EAAYV,GACxD,IAQJ,SAAsB3hB,EAAU5rC,EAAMzuB,GACpC,MAAMwa,EAAS6/C,EAAS2iB,aAClBvuD,KAAQjU,IACZA,EAAOiU,GAAQ,CAAC,GAElB,MAAM1pB,EAASyV,EAAOiU,GACtB,OAAIvrB,GAAQ6B,IAAWuzD,GAASt4D,GACvBA,EAEF+E,CACT,CAlBUs6E,CAAahlB,EAAU5rC,EAAMzuB,IACvC,CACA,SAASo/E,GAAiBxqE,EAAKuqE,EAAWp/E,EAAKi8E,EAAUj1E,GACvD,KAAOhH,GACLA,EAAMi/E,GAAUpqE,EAAKuqE,EAAWp/E,EAAKi8E,EAAUj1E,GAEjD,OAAOhH,CACT,CAuBA,SAAS68E,GAAS78E,EAAKy8E,GACrB,IAAK,MAAM74B,KAAS64B,EAAQ,CAC1B,IAAK74B,EACH,SAEF,MAAM3jD,EAAQ2jD,EAAM5jD,GACpB,GAAI66D,GAAQ56D,GACV,OAAOA,CAEX,CACF,CACA,SAAS09E,GAAqB34E,GAC5B,IAAIR,EAAOQ,EAAOo4E,MAIlB,OAHK54E,IACHA,EAAOQ,EAAOo4E,MAIlB,SAAkCX,GAChC,MAAM5nE,EAAM,IAAIV,IAChB,IAAK,MAAMyvC,KAAS64B,EAClB,IAAK,MAAMz8E,KAAO8D,OAAOU,KAAKo/C,GAAO/iD,QAAO84D,IAAMA,EAAElmC,WAAW,OAC7D5e,EAAIpT,IAAIzB,GAGZ,OAAOkD,MAAMO,KAAKoR,EACpB,CAZ0B0qE,CAAyBv6E,EAAO+3E,UAEjDv4E,CACT,CAUA,SAASg7E,GAA4BjuC,EAAMx0C,EAAM9C,EAAO2lE,GACtD,MAAM,OAACE,GAAUvuB,GACX,IAACvxC,EAAM,KAAO9G,KAAKumF,SACnBC,EAAS,IAAIx8E,MAAM08D,GACzB,IAAIx7D,EAAGi1D,EAAM3hD,EAAO1Q,EACpB,IAAK5C,EAAI,EAAGi1D,EAAOuG,EAAOx7D,EAAIi1D,IAAQj1D,EACpCsT,EAAQtT,EAAInK,EACZ+M,EAAOjK,EAAK2a,GACZgoE,EAAOt7E,GAAK,CACVuqB,EAAGmxC,EAAO/gE,MAAMs7D,GAAiBrzD,EAAMhH,GAAM0X,IAGjD,OAAOgoE,CACT,CAEA,MAAMC,GAAUjsB,OAAOisB,SAAW,MAC5BC,GAAW,CAACngB,EAAQr7D,IAAMA,EAAIq7D,EAAOnjE,SAAWmjE,EAAOr7D,GAAGy7E,MAAQpgB,EAAOr7D,GACzE07E,GAAgBvL,GAA4B,MAAdA,EAAoB,IAAM,IAC9D,SAASwL,GAAYC,EAAYC,EAAaC,EAAY30D,GACxD,MAAM2tD,EAAW8G,EAAWH,KAAOI,EAAcD,EAC3ClpE,EAAUmpE,EACVl0E,EAAOm0E,EAAWL,KAAOI,EAAcC,EACvCC,EAAM/iB,GAAsBtmD,EAASoiE,GACrCkH,EAAMhjB,GAAsBrxD,EAAM+K,GACxC,IAAIupE,EAAMF,GAAOA,EAAMC,GACnBE,EAAMF,GAAOD,EAAMC,GACvBC,EAAMnkB,MAAMmkB,GAAO,EAAIA,EACvBC,EAAMpkB,MAAMokB,GAAO,EAAIA,EACvB,MAAMC,EAAKh1D,EAAI80D,EACTG,EAAKj1D,EAAI+0D,EACf,MAAO,CACLpH,SAAU,CACR5pE,EAAGwH,EAAQxH,EAAIixE,GAAMx0E,EAAKuD,EAAI4pE,EAAS5pE,GACvCC,EAAGuH,EAAQvH,EAAIgxE,GAAMx0E,EAAKwD,EAAI2pE,EAAS3pE,IAEzCxD,KAAM,CACJuD,EAAGwH,EAAQxH,EAAIkxE,GAAMz0E,EAAKuD,EAAI4pE,EAAS5pE,GACvCC,EAAGuH,EAAQvH,EAAIixE,GAAMz0E,EAAKwD,EAAI2pE,EAAS3pE,IAG7C,CA8EA,SAASkxE,GAAgBC,EAAIjlF,EAAK+S,GAChC,OAAOjT,KAAKiT,IAAIjT,KAAKE,IAAIilF,EAAIlyE,GAAM/S,EACrC,CAsBA,SAASklF,GAA2BlhB,EAAQ/4D,EAASmyE,EAAM+H,EAAMrM,GAC/D,IAAInwE,EAAGi1D,EAAMuf,EAAOiI,EAIpB,GAHIn6E,EAAQo6E,WACVrhB,EAASA,EAAO5+D,QAAQ6/E,IAAQA,EAAGb,QAEE,aAAnCn5E,EAAQq6E,wBAvDd,SAA6BthB,EAAQ8U,EAAY,KAC/C,MAAMyM,EAAYlB,GAAavL,GACzB0M,EAAYxhB,EAAOnjE,OACnB4kF,EAASh+E,MAAM+9E,GAAWzI,KAAK,GAC/B2I,EAAKj+E,MAAM+9E,GACjB,IAAI78E,EAAGg9E,EAAaC,EAChBC,EAAa1B,GAASngB,EAAQ,GAClC,IAAKr7D,EAAI,EAAGA,EAAI68E,IAAa78E,EAI3B,GAHAg9E,EAAcC,EACdA,EAAeC,EACfA,EAAa1B,GAASngB,EAAQr7D,EAAI,GAC7Bi9E,EAAL,CAGA,GAAIC,EAAY,CACd,MAAMC,EAAaD,EAAW/M,GAAa8M,EAAa9M,GACxD2M,EAAO98E,GAAoB,IAAfm9E,GAAoBD,EAAWN,GAAaK,EAAaL,IAAcO,EAAa,CAClG,CACAJ,EAAG/8E,GAAMg9E,EACJE,EACA5lB,GAAKwlB,EAAO98E,EAAI,MAAQs3D,GAAKwlB,EAAO98E,IAAO,GAC3C88E,EAAO98E,EAAI,GAAK88E,EAAO98E,IAAM,EAFhB88E,EAAO98E,EAAI,GADN88E,EAAO98E,EAL9B,EAhEJ,SAAwBq7D,EAAQyhB,EAAQC,GACtC,MAAMF,EAAYxhB,EAAOnjE,OACzB,IAAIklF,EAAQC,EAAOC,EAAMC,EAAkBN,EACvCC,EAAa1B,GAASngB,EAAQ,GAClC,IAAK,IAAIr7D,EAAI,EAAGA,EAAI68E,EAAY,IAAK78E,EACnCi9E,EAAeC,EACfA,EAAa1B,GAASngB,EAAQr7D,EAAI,GAC7Bi9E,GAAiBC,IAGlBxlB,GAAaolB,EAAO98E,GAAI,EAAGu7E,IAC7BwB,EAAG/8E,GAAK+8E,EAAG/8E,EAAI,GAAK,GAGtBo9E,EAASL,EAAG/8E,GAAK88E,EAAO98E,GACxBq9E,EAAQN,EAAG/8E,EAAI,GAAK88E,EAAO98E,GAC3Bu9E,EAAmBpmF,KAAKC,IAAIgmF,EAAQ,GAAKjmF,KAAKC,IAAIimF,EAAO,GACrDE,GAAoB,IAGxBD,EAAO,EAAInmF,KAAK0hE,KAAK0kB,GACrBR,EAAG/8E,GAAKo9E,EAASE,EAAOR,EAAO98E,GAC/B+8E,EAAG/8E,EAAI,GAAKq9E,EAAQC,EAAOR,EAAO98E,KAEtC,CAkDEw9E,CAAeniB,EAAQyhB,EAAQC,GAjDjC,SAAyB1hB,EAAQ0hB,EAAI5M,EAAY,KAC/C,MAAMyM,EAAYlB,GAAavL,GACzB0M,EAAYxhB,EAAOnjE,OACzB,IAAIulF,EAAOT,EAAaC,EACpBC,EAAa1B,GAASngB,EAAQ,GAClC,IAAK,IAAIr7D,EAAI,EAAGA,EAAI68E,IAAa78E,EAAG,CAIlC,GAHAg9E,EAAcC,EACdA,EAAeC,EACfA,EAAa1B,GAASngB,EAAQr7D,EAAI,IAC7Bi9E,EACH,SAEF,MAAMS,EAAST,EAAa9M,GACtBwN,EAASV,EAAaL,GACxBI,IACFS,GAASC,EAASV,EAAY7M,IAAc,EAC5C8M,EAAa,MAAM9M,KAAeuN,EAASD,EAC3CR,EAAa,MAAML,KAAee,EAASF,EAAQV,EAAG/8E,IAEpDk9E,IACFO,GAASP,EAAW/M,GAAauN,GAAU,EAC3CT,EAAa,MAAM9M,KAAeuN,EAASD,EAC3CR,EAAa,MAAML,KAAee,EAASF,EAAQV,EAAG/8E,GAE1D,CACF,CAyBE49E,CAAgBviB,EAAQ0hB,EAAI5M,EAC9B,CA+BI0N,CAAoBxiB,EAAQ8U,OACvB,CACL,IAAIznE,EAAO8zE,EAAOnhB,EAAOA,EAAOnjE,OAAS,GAAKmjE,EAAO,GACrD,IAAKr7D,EAAI,EAAGi1D,EAAOoG,EAAOnjE,OAAQ8H,EAAIi1D,IAAQj1D,EAC5Cw0E,EAAQnZ,EAAOr7D,GACfy8E,EAAgBd,GACdjzE,EACA8rE,EACAnZ,EAAOlkE,KAAKE,IAAI2I,EAAI,EAAGi1D,GAAQunB,EAAO,EAAI,IAAMvnB,GAChD3yD,EAAQw7E,SAEVtJ,EAAMW,KAAOsH,EAAc3H,SAAS5pE,EACpCspE,EAAMa,KAAOoH,EAAc3H,SAAS3pE,EACpCqpE,EAAMY,KAAOqH,EAAc90E,KAAKuD,EAChCspE,EAAMc,KAAOmH,EAAc90E,KAAKwD,EAChCzC,EAAO8rE,CAEX,CACIlyE,EAAQy7E,iBA7Cd,SAAyB1iB,EAAQoZ,GAC/B,IAAIz0E,EAAGi1D,EAAMuf,EAAOwJ,EAAQC,EACxBC,EAAa3J,GAAelZ,EAAO,GAAIoZ,GAC3C,IAAKz0E,EAAI,EAAGi1D,EAAOoG,EAAOnjE,OAAQ8H,EAAIi1D,IAAQj1D,EAC5Ci+E,EAAaD,EACbA,EAASE,EACTA,EAAal+E,EAAIi1D,EAAO,GAAKsf,GAAelZ,EAAOr7D,EAAI,GAAIy0E,GACtDuJ,IAGLxJ,EAAQnZ,EAAOr7D,GACXi+E,IACFzJ,EAAMW,KAAOkH,GAAgB7H,EAAMW,KAAMV,EAAKltE,KAAMktE,EAAKhtE,OACzD+sE,EAAMa,KAAOgH,GAAgB7H,EAAMa,KAAMZ,EAAKzpE,IAAKypE,EAAKxpE,SAEtDizE,IACF1J,EAAMY,KAAOiH,GAAgB7H,EAAMY,KAAMX,EAAKltE,KAAMktE,EAAKhtE,OACzD+sE,EAAMc,KAAO+G,GAAgB7H,EAAMc,KAAMb,EAAKzpE,IAAKypE,EAAKxpE,SAG9D,CA0BI8yE,CAAgB1iB,EAAQoZ,EAE5B,CAEA,SAAS0J,KACP,MAAyB,oBAAX55E,QAA8C,oBAAb5M,QACjD,CACA,SAASymF,GAAeC,GACtB,IAAIhoE,EAASgoE,EAAQ9wE,WAIrB,OAHI8I,GAAgC,wBAAtBA,EAAO1W,aACnB0W,EAASA,EAAO7I,MAEX6I,CACT,CACA,SAASioE,GAAcC,EAAY70E,EAAM80E,GACvC,IAAIC,EASJ,MAR0B,iBAAfF,GACTE,EAAgB70D,SAAS20D,EAAY,KACJ,IAA7BA,EAAWpmF,QAAQ,OACrBsmF,EAAgBA,EAAgB,IAAM/0E,EAAK6D,WAAWixE,KAGxDC,EAAgBF,EAEXE,CACT,CACA,MAAM,GAAoBjgF,GAAY+F,OAAOwH,iBAAiBvN,EAAS,MAIjEkgF,GAAY,CAAC,MAAO,QAAS,SAAU,QAC7C,SAASC,GAAmB5sE,EAAQyI,EAAOokE,GACzC,MAAM5uE,EAAS,CAAC,EAChB4uE,EAASA,EAAS,IAAMA,EAAS,GACjC,IAAK,IAAI5+E,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,MAAM6+E,EAAMH,GAAU1+E,GACtBgQ,EAAO6uE,GAAOnqB,WAAW3iD,EAAOyI,EAAQ,IAAMqkE,EAAMD,KAAY,CAClE,CAGA,OAFA5uE,EAAOlF,MAAQkF,EAAOzI,KAAOyI,EAAOvI,MACpCuI,EAAOjF,OAASiF,EAAOhF,IAAMgF,EAAO/E,OAC7B+E,CACT,CAmBA,SAAS8uE,GAAoBC,EAAKvP,GAChC,GAAI,WAAYuP,EACd,OAAOA,EAET,MAAM,OAACjM,EAAM,wBAAEH,GAA2BnD,EACpCh1D,EAAQ,GAAiBs4D,GACzBkM,EAAgC,eAApBxkE,EAAMykE,UAClBC,EAAWP,GAAmBnkE,EAAO,WACrC2kE,EAAUR,GAAmBnkE,EAAO,SAAU,UAC9C,EAACtP,EAAC,EAAEC,EAAC,IAAEi0E,GA1Bf,SAA2B9qC,EAAGw+B,GAC5B,MAAMuM,EAAU/qC,EAAE+qC,QACZv+E,EAASu+E,GAAWA,EAAQnnF,OAASmnF,EAAQ,GAAK/qC,GAClD,QAACgrC,EAAO,QAAEC,GAAWz+E,EAC3B,IACIoK,EAAGC,EADHi0E,GAAM,EAEV,GAPmB,EAACl0E,EAAGC,EAAGvK,KAAYsK,EAAI,GAAKC,EAAI,MAAQvK,IAAWA,EAAO4+E,YAOzEC,CAAaH,EAASC,EAASjrC,EAAE1zC,QACnCsK,EAAIo0E,EACJn0E,EAAIo0E,MACC,CACL,MAAM90E,EAAOqoE,EAAOvoE,wBACpBW,EAAIpK,EAAO4+E,QAAUj1E,EAAKlD,KAC1B4D,EAAIrK,EAAO6+E,QAAUl1E,EAAKO,IAC1Bo0E,GAAM,CACR,CACA,MAAO,CAACl0E,IAAGC,IAAGi0E,MAChB,CAUsBQ,CAAkBb,EAAKjM,GACrCM,EAAU8L,EAAS33E,MAAQ63E,GAAOD,EAAQ53E,MAC1C8rE,EAAU6L,EAASl0E,KAAOo0E,GAAOD,EAAQn0E,KAC/C,IAAI,MAACF,EAAK,OAAEC,GAAUykE,EAKtB,OAJIwP,IACFl0E,GAASo0E,EAASp0E,MAAQq0E,EAAQr0E,MAClCC,GAAUm0E,EAASn0E,OAASo0E,EAAQp0E,QAE/B,CACLG,EAAG/T,KAAKmT,OAAOY,EAAIkoE,GAAWtoE,EAAQgoE,EAAOhoE,MAAQ6nE,GACrDxnE,EAAGhU,KAAKmT,OAAOa,EAAIkoE,GAAWtoE,EAAS+nE,EAAO/nE,OAAS4nE,GAE3D,CA0BA,MAAMkN,GAAShgE,GAAK1oB,KAAKmT,MAAU,GAAJuV,GAAU,GA0BzC,SAASigE,GAAYtQ,EAAOuQ,EAAYC,GACtC,MAAMC,EAAaF,GAAc,EAC3BG,EAAe/oF,KAAK67B,MAAMw8C,EAAMzkE,OAASk1E,GACzCE,EAAchpF,KAAK67B,MAAMw8C,EAAM1kE,MAAQm1E,GAC7CzQ,EAAMzkE,OAASm1E,EAAeD,EAC9BzQ,EAAM1kE,MAAQq1E,EAAcF,EAC5B,MAAMnN,EAAStD,EAAMsD,OAKrB,OAJIA,EAAOt4D,QAAUwlE,IAAgBlN,EAAOt4D,MAAMzP,SAAW+nE,EAAOt4D,MAAM1P,SACxEgoE,EAAOt4D,MAAMzP,OAAS,GAAGykE,EAAMzkE,WAC/B+nE,EAAOt4D,MAAM1P,MAAQ,GAAG0kE,EAAM1kE,YAE5B0kE,EAAMmD,0BAA4BsN,GAC/BnN,EAAO/nE,SAAWm1E,GAClBpN,EAAOhoE,QAAUq1E,KACtB3Q,EAAMmD,wBAA0BsN,EAChCnN,EAAO/nE,OAASm1E,EAChBpN,EAAOhoE,MAAQq1E,EACf3Q,EAAMQ,IAAIoQ,aAAaH,EAAY,EAAG,EAAGA,EAAY,EAAG,IACjD,EAGX,CACA,MAAMI,GAAgC,WACpC,IAAIC,GAAmB,EACvB,IACE,MAAMh+E,EAAU,CACVwR,cAEF,OADAwsE,GAAmB,GACZ,CACT,GAEF/7E,OAAOrO,iBAAiB,OAAQ,KAAMoM,GACtCiC,OAAOjO,oBAAoB,OAAQ,KAAMgM,EAE3C,CADE,MAAOgyC,GACT,CACA,OAAOgsC,CACT,CAdqC,GAerC,SAASC,GAAa/hF,EAASoc,GAC7B,MAAM/e,EAhJR,SAAkBoI,EAAI2W,GACpB,OAAO,GAAiB3W,GAAIu8E,iBAAiB5lE,EAC/C,CA8IgB6lE,CAASjiF,EAASoc,GAC1B8O,EAAU7tB,GAASA,EAAM6yB,MAAM,qBACrC,OAAOhF,GAAWA,EAAQ,QAAK/rB,CACjC,CAEA,SAAS+iF,GAAaxU,EAAIC,EAAIhlD,EAAG2uB,GAC/B,MAAO,CACL5qC,EAAGghE,EAAGhhE,EAAIic,GAAKglD,EAAGjhE,EAAIghE,EAAGhhE,GACzBC,EAAG+gE,EAAG/gE,EAAIgc,GAAKglD,EAAGhhE,EAAI+gE,EAAG/gE,GAE7B,CACA,SAASw1E,GAAsBzU,EAAIC,EAAIhlD,EAAG2uB,GACxC,MAAO,CACL5qC,EAAGghE,EAAGhhE,EAAIic,GAAKglD,EAAGjhE,EAAIghE,EAAGhhE,GACzBC,EAAY,WAAT2qC,EAAoB3uB,EAAI,GAAM+kD,EAAG/gE,EAAIghE,EAAGhhE,EAChC,UAAT2qC,EAAmB3uB,EAAI,EAAI+kD,EAAG/gE,EAAIghE,EAAGhhE,EACrCgc,EAAI,EAAIglD,EAAGhhE,EAAI+gE,EAAG/gE,EAExB,CACA,SAASy1E,GAAqB1U,EAAIC,EAAIhlD,EAAG2uB,GACvC,MAAM+qC,EAAM,CAAC31E,EAAGghE,EAAGkJ,KAAMjqE,EAAG+gE,EAAGoJ,MACzBwL,EAAM,CAAC51E,EAAGihE,EAAGgJ,KAAMhqE,EAAGghE,EAAGkJ,MACzBp3E,EAAIyiF,GAAaxU,EAAI2U,EAAK15D,GAC1B7K,EAAIokE,GAAaG,EAAKC,EAAK35D,GAC3B9D,EAAIq9D,GAAaI,EAAK3U,EAAIhlD,GAC1BiD,EAAIs2D,GAAaziF,EAAGqe,EAAG6K,GACvBmtB,EAAIosC,GAAapkE,EAAG+G,EAAG8D,GAC7B,OAAOu5D,GAAat2D,EAAGkqB,EAAGntB,EAC5B,CAEA,MAAM45D,GAAY,IAAIlxE,IAWtB,SAASmxE,GAAaC,EAAKC,EAAQ5+E,GACjC,OAXF,SAAyB4+E,EAAQ5+E,GAC/BA,EAAUA,GAAW,CAAC,EACtB,MAAMy7C,EAAWmjC,EAASroF,KAAKC,UAAUwJ,GACzC,IAAI6+E,EAAYJ,GAAUvwE,IAAIutC,GAK9B,OAJKojC,IACHA,EAAY,IAAIC,KAAKC,aAAaH,EAAQ5+E,GAC1Cy+E,GAAUtwE,IAAIstC,EAAUojC,IAEnBA,CACT,CAESG,CAAgBJ,EAAQ5+E,GAASi/E,OAAON,EACjD,CA0CA,SAASO,GAAcC,EAAKC,EAAO52E,GACjC,OAAO22E,EAzCqB,SAASC,EAAO52E,GAC5C,MAAO,CACLI,EAAEA,GACOw2E,EAAQA,EAAQ52E,EAAQI,EAEjCy2E,SAASrhB,GACPx1D,EAAQw1D,CACV,EACAuV,UAAU3a,GACM,WAAVA,EACKA,EAEQ,UAAVA,EAAoB,OAAS,QAEtC0mB,MAAK,CAAC12E,EAAGrP,IACAqP,EAAIrP,EAEbgmF,WAAU,CAAC32E,EAAG42E,IACL52E,EAAI42E,EAGjB,CAoBeC,CAAsBL,EAAO52E,GAlBnC,CACLI,EAAEA,GACOA,EAETy2E,SAASrhB,GACT,EACAuV,UAAU3a,GACDA,EAET0mB,MAAK,CAAC12E,EAAGrP,IACAqP,EAAIrP,EAEbgmF,WAAU,CAAC32E,EAAG82E,IACL92E,EAMb,CACA,SAAS+2E,GAAsBjS,EAAK34D,GAClC,IAAImD,EAAO0nE,EACO,QAAd7qE,GAAqC,QAAdA,IACzBmD,EAAQw1D,EAAI8C,OAAOt4D,MACnB0nE,EAAW,CACT1nE,EAAMgmE,iBAAiB,aACvBhmE,EAAM2nE,oBAAoB,cAE5B3nE,EAAM4nE,YAAY,YAAa/qE,EAAW,aAC1C24D,EAAIqS,kBAAoBH,EAE5B,CACA,SAASI,GAAqBtS,EAAKkS,QAChBvkF,IAAbukF,WACKlS,EAAIqS,kBACXrS,EAAI8C,OAAOt4D,MAAM4nE,YAAY,YAAaF,EAAS,GAAIA,EAAS,IAEpE,CAEA,SAASK,GAAW3nE,GAClB,MAAiB,UAAbA,EACK,CACL4nE,QAASnpB,GACTopB,QAAStpB,GACTupB,UAAWtpB,IAGR,CACLopB,QAAS5oB,GACT6oB,QAAS,CAACxkF,EAAGqe,IAAMre,EAAIqe,EACvBomE,UAAWx3E,GAAKA,EAEpB,CACA,SAASy3E,IAAiB,MAAC9sF,EAAK,IAAEqZ,EAAG,MAAEssD,EAAK,KAAEghB,EAAI,MAAEhiE,IAClD,MAAO,CACL3kB,MAAOA,EAAQ2lE,EACftsD,IAAKA,EAAMssD,EACXghB,KAAMA,IAASttE,EAAMrZ,EAAQ,GAAK2lE,GAAU,EAC5ChhD,QAEJ,CAyBA,SAASooE,GAAcC,EAASxnB,EAAQynB,GACtC,IAAKA,EACH,MAAO,CAACD,GAEV,MAAM,SAACjoE,EAAU/kB,MAAOktF,EAAY7zE,IAAK8zE,GAAYF,EAC/CtnB,EAAQH,EAAOnjE,QACf,QAACuqF,EAAO,QAAED,EAAO,UAAEE,GAAaH,GAAW3nE,IAC3C,MAAC/kB,EAAK,IAAEqZ,EAAG,KAAEstE,EAAI,MAAEhiE,GA/B3B,SAAoBqoE,EAASxnB,EAAQynB,GACnC,MAAM,SAACloE,EAAU/kB,MAAOktF,EAAY7zE,IAAK8zE,GAAYF,GAC/C,QAACN,EAAO,UAAEE,GAAaH,GAAW3nE,GAClC4gD,EAAQH,EAAOnjE,OACrB,IACI8H,EAAGi1D,GADH,MAACp/D,EAAK,IAAEqZ,EAAG,KAAEstE,GAAQqG,EAEzB,GAAIrG,EAAM,CAGR,IAFA3mF,GAAS2lE,EACTtsD,GAAOssD,EACFx7D,EAAI,EAAGi1D,EAAOuG,EAAOx7D,EAAIi1D,GACvButB,EAAQE,EAAUrnB,EAAOxlE,EAAQ2lE,GAAO5gD,IAAYmoE,EAAYC,KADjChjF,EAIpCnK,IACAqZ,IAEFrZ,GAAS2lE,EACTtsD,GAAOssD,CACT,CAIA,OAHItsD,EAAMrZ,IACRqZ,GAAOssD,GAEF,CAAC3lE,QAAOqZ,MAAKstE,OAAMhiE,MAAOqoE,EAAQroE,MAC3C,CAQoCyoE,CAAWJ,EAASxnB,EAAQynB,GACxD9yE,EAAS,GACf,IAEInU,EAAO24E,EAAO0O,EAFdC,GAAS,EACTC,EAAW,KAMf,IAAK,IAAIpjF,EAAInK,EAAO6S,EAAO7S,EAAOmK,GAAKkP,IAAOlP,EAC5Cw0E,EAAQnZ,EAAOr7D,EAAIw7D,GACfgZ,EAAMiH,OAGV5/E,EAAQ6mF,EAAUlO,EAAM55D,IACpB/e,IAAUqnF,IAGdC,EAASX,EAAQ3mF,EAAOknF,EAAYC,GACnB,OAAbI,IAZoBD,GAFEX,EAAQO,EAAYG,EAAWrnF,IAA6C,IAAnC4mF,EAAQM,EAAYG,MAerFE,EAA0C,IAA/BX,EAAQ5mF,EAAOknF,GAAoB/iF,EAAI0I,GAEnC,OAAb06E,KAdoBD,GAF6B,IAA7BV,EAAQO,EAAUnnF,IAAgB2mF,EAAQQ,EAAUE,EAAWrnF,MAiBrFmU,EAAOhb,KAAK2tF,GAAiB,CAAC9sF,MAAOutF,EAAUl0E,IAAKlP,EAAGw8E,OAAMhhB,QAAOhhD,WACpE4oE,EAAW,MAEb16E,EAAO1I,EACPkjF,EAAYrnF,IAKd,OAHiB,OAAbunF,GACFpzE,EAAOhb,KAAK2tF,GAAiB,CAAC9sF,MAAOutF,EAAUl0E,MAAKstE,OAAMhhB,QAAOhhD,WAE5DxK,CACT,CACA,SAASqzE,GAAezwD,EAAMkwD,GAC5B,MAAM9yE,EAAS,GACTszE,EAAW1wD,EAAK0wD,SACtB,IAAK,IAAItjF,EAAI,EAAGA,EAAIsjF,EAASprF,OAAQ8H,IAAK,CACxC,MAAMujF,EAAMX,GAAcU,EAAStjF,GAAI4yB,EAAKyoC,OAAQynB,GAChDS,EAAIrrF,QACN8X,EAAOhb,QAAQuuF,EAEnB,CACA,OAAOvzE,CACT,CA4HA,SAASwzE,GAAUlhF,GACjB,MAAO,CACL+sE,gBAAiB/sE,EAAQ+sE,gBACzBoU,eAAgBnhF,EAAQmhF,eACxBC,WAAYphF,EAAQohF,WACpBC,iBAAkBrhF,EAAQqhF,iBAC1BC,gBAAiBthF,EAAQshF,gBACzBvP,YAAa/xE,EAAQ+xE,YACrB/E,YAAahtE,EAAQgtE,YAEzB,CACA,SAASuU,GAAarpE,EAAOspE,GAC3B,OAAOA,GAAajrF,KAAKC,UAAU0hB,KAAW3hB,KAAKC,UAAUgrF,EAC/D,CCx6EA,IAAIC,GAAW,IAvIf,MACEvuF,cACEV,KAAKolC,SAAW,KAChBplC,KAAKkvF,QAAU,IAAIn0E,IACnB/a,KAAKmvF,UAAW,EAChBnvF,KAAKovF,eAAYvmF,CACnB,CACAwmF,QAAQ3U,EAAO4U,EAAOC,EAAM3pF,GAC1B,MAAM4pF,EAAYF,EAAM3mC,UAAU/iD,GAC5B6pF,EAAWH,EAAMl7E,SACvBo7E,EAAUvjF,SAAQyQ,GAAMA,EAAG,CACzBg+D,QACApgC,QAASg1C,EAAMh1C,QACfm1C,WACAC,YAAartF,KAAKE,IAAIgtF,EAAOD,EAAMvuF,MAAO0uF,MAE9C,CACAE,WACM3vF,KAAKolC,WAGTplC,KAAKmvF,UAAW,EAChBnvF,KAAKolC,SAAW0gC,GAAiBhhE,KAAK2K,QAAQ,KAC5CzP,KAAK4vF,UACL5vF,KAAKolC,SAAW,KACZplC,KAAKmvF,UACPnvF,KAAK2vF,UACP,IAEJ,CACAC,QAAQL,EAAOpvF,KAAKC,OAClB,IAAIyvF,EAAY,EAChB7vF,KAAKkvF,QAAQjjF,SAAQ,CAACqjF,EAAO5U,KAC3B,IAAK4U,EAAMQ,UAAYR,EAAM/hF,MAAMnK,OACjC,OAEF,MAAMmK,EAAQ+hF,EAAM/hF,MACpB,IAEIO,EAFA5C,EAAIqC,EAAMnK,OAAS,EACnB2sF,GAAO,EAEX,KAAO7kF,GAAK,IAAKA,EACf4C,EAAOP,EAAMrC,GACT4C,EAAKkiF,SACHliF,EAAKmiF,OAASX,EAAMl7E,WACtBk7E,EAAMl7E,SAAWtG,EAAKmiF,QAExBniF,EAAKoiF,KAAKX,GACVQ,GAAO,IAEPxiF,EAAMrC,GAAKqC,EAAMA,EAAMnK,OAAS,GAChCmK,EAAM4iF,OAGNJ,IACFrV,EAAMqV,OACN/vF,KAAKqvF,QAAQ3U,EAAO4U,EAAOC,EAAM,aAE9BhiF,EAAMnK,SACTksF,EAAMQ,SAAU,EAChB9vF,KAAKqvF,QAAQ3U,EAAO4U,EAAOC,EAAM,YACjCD,EAAMh1C,SAAU,GAElBu1C,GAAatiF,EAAMnK,MAAM,IAE3BpD,KAAKovF,UAAYG,EACC,IAAdM,IACF7vF,KAAKmvF,UAAW,EAEpB,CACAiB,UAAU1V,GACR,MAAM2V,EAASrwF,KAAKkvF,QACpB,IAAII,EAAQe,EAAO30E,IAAIg/D,GAavB,OAZK4U,IACHA,EAAQ,CACNQ,SAAS,EACTx1C,SAAS,EACT/sC,MAAO,GACPo7C,UAAW,CACT1vB,SAAU,GACVq3D,SAAU,KAGdD,EAAO10E,IAAI++D,EAAO4U,IAEbA,CACT,CACAiB,OAAO7V,EAAOl1E,EAAOgrF,GACnBxwF,KAAKowF,UAAU1V,GAAO/xB,UAAUnjD,GAAOtF,KAAKswF,EAC9C,CACAjoF,IAAImyE,EAAOntE,GACJA,GAAUA,EAAMnK,QAGrBpD,KAAKowF,UAAU1V,GAAOntE,MAAMrN,QAAQqN,EACtC,CACAiO,IAAIk/D,GACF,OAAO16E,KAAKowF,UAAU1V,GAAOntE,MAAMnK,OAAS,CAC9C,CACArC,MAAM25E,GACJ,MAAM4U,EAAQtvF,KAAKkvF,QAAQxzE,IAAIg/D,GAC1B4U,IAGLA,EAAMQ,SAAU,EAChBR,EAAMvuF,MAAQZ,KAAKC,MACnBkvF,EAAMl7E,SAAWk7E,EAAM/hF,MAAMiN,QAAO,CAACC,EAAKg2E,IAAQpuF,KAAKiT,IAAImF,EAAKg2E,EAAIC,YAAY,GAChF1wF,KAAK2vF,WACP,CACAG,QAAQpV,GACN,IAAK16E,KAAKmvF,SACR,OAAO,EAET,MAAMG,EAAQtvF,KAAKkvF,QAAQxzE,IAAIg/D,GAC/B,SAAK4U,GAAUA,EAAMQ,SAAYR,EAAM/hF,MAAMnK,OAI/C,CACA9B,KAAKo5E,GACH,MAAM4U,EAAQtvF,KAAKkvF,QAAQxzE,IAAIg/D,GAC/B,IAAK4U,IAAUA,EAAM/hF,MAAMnK,OACzB,OAEF,MAAMmK,EAAQ+hF,EAAM/hF,MACpB,IAAIrC,EAAIqC,EAAMnK,OAAS,EACvB,KAAO8H,GAAK,IAAKA,EACfqC,EAAMrC,GAAGy0B,SAEX2vD,EAAM/hF,MAAQ,GACdvN,KAAKqvF,QAAQ3U,EAAO4U,EAAOnvF,KAAKC,MAAO,WACzC,CACAiH,OAAOqzE,GACL,OAAO16E,KAAKkvF,QAAQnrD,OAAO22C,EAC7B,GAIF,MAAM1C,GAAc,cACd2Y,GAAgB,CACpBh2B,QAAO,CAACpwD,EAAMosE,EAAIia,IACTA,EAAS,GAAMja,EAAKpsE,EAE7BouE,MAAMpuE,EAAMosE,EAAIia,GACd,MAAMC,EAAKlY,GAAMpuE,GAAQytE,IACnBa,EAAKgY,EAAGzY,OAASO,GAAMhC,GAAMqB,IACnC,OAAOa,GAAMA,EAAGT,MACZS,EAAGH,IAAImY,EAAID,GAAQtY,YACnB3B,CACN,EACA/b,OAAM,CAACrwD,EAAMosE,EAAIia,IACRrmF,GAAQosE,EAAKpsE,GAAQqmF,GAGhC,MAAME,GACJpwF,YAAYqwF,EAAKjlF,EAAQ0pB,EAAMmhD,GAC7B,MAAMqa,EAAellF,EAAO0pB,GAC5BmhD,EAAK/3D,GAAQ,CAACmyE,EAAIpa,GAAIA,EAAIqa,EAAcD,EAAIxmF,OAC5C,MAAMA,EAAOqU,GAAQ,CAACmyE,EAAIxmF,KAAMymF,EAAcra,IAC9C32E,KAAKgwF,SAAU,EACfhwF,KAAKixF,IAAMF,EAAIr0E,IAAMi0E,GAAcI,EAAInrF,aAAe2E,GACtDvK,KAAKkxF,QAAUlpB,GAAQ+oB,EAAII,SAAWnpB,GAAQC,OAC9CjoE,KAAKoxF,OAAS/uF,KAAK67B,MAAM/9B,KAAKC,OAAS2wF,EAAIjwC,OAAS,IACpD9gD,KAAK0wF,UAAY1wF,KAAKiwF,OAAS5tF,KAAK67B,MAAM6yD,EAAI38E,UAC9CpU,KAAKsoB,QAAUyoE,EAAIrJ,KACnB1nF,KAAKqxF,QAAUvlF,EACf9L,KAAKsxF,MAAQ97D,EACbx1B,KAAKuxF,MAAQhnF,EACbvK,KAAKwxF,IAAM7a,EACX32E,KAAKyxF,eAAY5oF,CACnB,CACAkF,SACE,OAAO/N,KAAKgwF,OACd,CACA7xE,OAAO4yE,EAAKpa,EAAI4Y,GACd,GAAIvvF,KAAKgwF,QAAS,CAChBhwF,KAAKqvF,SAAQ,GACb,MAAM2B,EAAehxF,KAAKqxF,QAAQrxF,KAAKsxF,OACjCI,EAAUnC,EAAOvvF,KAAKoxF,OACtBO,EAAS3xF,KAAK0wF,UAAYgB,EAChC1xF,KAAKoxF,OAAS7B,EACdvvF,KAAK0wF,UAAYruF,KAAK67B,MAAM77B,KAAKiT,IAAIq8E,EAAQZ,EAAI38E,WACjDpU,KAAKiwF,QAAUyB,EACf1xF,KAAKsoB,QAAUyoE,EAAIrJ,KACnB1nF,KAAKwxF,IAAM5yE,GAAQ,CAACmyE,EAAIpa,GAAIA,EAAIqa,EAAcD,EAAIxmF,OAClDvK,KAAKuxF,MAAQ3yE,GAAQ,CAACmyE,EAAIxmF,KAAMymF,EAAcra,GAChD,CACF,CACAh3C,SACM3/B,KAAKgwF,UACPhwF,KAAKkwF,KAAK/vF,KAAKC,OACfJ,KAAKgwF,SAAU,EACfhwF,KAAKqvF,SAAQ,GAEjB,CACAa,KAAKX,GACH,MAAMmC,EAAUnC,EAAOvvF,KAAKoxF,OACtBh9E,EAAWpU,KAAK0wF,UAChBl7D,EAAOx1B,KAAKsxF,MACZ/mF,EAAOvK,KAAKuxF,MACZ7J,EAAO1nF,KAAKsoB,MACZquD,EAAK32E,KAAKwxF,IAChB,IAAIZ,EAEJ,GADA5wF,KAAKgwF,QAAUzlF,IAASosE,IAAO+Q,GAASgK,EAAUt9E,IAC7CpU,KAAKgwF,QAGR,OAFAhwF,KAAKqxF,QAAQ77D,GAAQmhD,OACrB32E,KAAKqvF,SAAQ,GAGXqC,EAAU,EACZ1xF,KAAKqxF,QAAQ77D,GAAQjrB,GAGvBqmF,EAAUc,EAAUt9E,EAAY,EAChCw8E,EAASlJ,GAAQkJ,EAAS,EAAI,EAAIA,EAASA,EAC3CA,EAAS5wF,KAAKkxF,QAAQ7uF,KAAKE,IAAI,EAAGF,KAAKiT,IAAI,EAAGs7E,KAC9C5wF,KAAKqxF,QAAQ77D,GAAQx1B,KAAKixF,IAAI1mF,EAAMosE,EAAIia,GAC1C,CACAgB,OACE,MAAMC,EAAW7xF,KAAKyxF,YAAczxF,KAAKyxF,UAAY,IACrD,OAAO,IAAI9yE,SAAQ,CAACmzE,EAAKC,KACvBF,EAAS3xF,KAAK,CAAC4xF,MAAKC,OAAK,GAE7B,CACA1C,QAAQ2C,GACN,MAAM9yD,EAAS8yD,EAAW,MAAQ,MAC5BH,EAAW7xF,KAAKyxF,WAAa,GACnC,IAAK,IAAIvmF,EAAI,EAAGA,EAAI2mF,EAASzuF,OAAQ8H,IACnC2mF,EAAS3mF,GAAGg0B,IAEhB,EAKFk7C,GAASz+D,IAAI,YAAa,CACxBmlC,WAAOj4C,EACPuL,SAAU,IACV+8E,OAAQ,eACRz0E,QAAI7T,EACJ0B,UAAM1B,EACN6+E,UAAM7+E,EACN8tE,QAAI9tE,EACJjD,UAAMiD,IAER,MAAMopF,GAAmBrnF,OAAOU,KAAK8uE,GAASE,WAC9CF,GAAS8B,SAAS,YAAa,CAC7BU,WAAW,EACXD,YAAY,EACZD,YAAcjzE,GAAkB,eAATA,GAAkC,eAATA,GAAkC,OAATA,IAE3E2wE,GAASz+D,IAAI,aAAc,CACzBu2E,OAAQ,CACNtsF,KAAM,QACNiB,WApBW,CAAC,QAAS,cAAe,oBAsBtCsrF,QAAS,CACPvsF,KAAM,SACNiB,WAzBY,CAAC,IAAK,IAAK,cAAe,SAAU,cA4BpDuzE,GAAS8B,SAAS,aAAc,CAC9BU,UAAW,cAEbxC,GAASz+D,IAAI,cAAe,CAC1B5N,OAAQ,CACNusE,UAAW,CACTlmE,SAAU,MAGdgR,OAAQ,CACNk1D,UAAW,CACTlmE,SAAU,IAGdsZ,KAAM,CACJ0kE,WAAY,CACVF,OAAQ,CACN3nF,KAAM,eAER6jC,QAAS,CACPxoC,KAAM,UACNwO,SAAU,KAIhBI,KAAM,CACJ49E,WAAY,CACVF,OAAQ,CACNvb,GAAI,eAENvoC,QAAS,CACPxoC,KAAM,UACNurF,OAAQ,SACRz0E,GAAIqO,GAAS,EAAJA,OAKjB,MAAMsnE,GACJ3xF,YAAYg6E,EAAO4X,GACjBtyF,KAAKuyF,OAAS7X,EACd16E,KAAKwyF,YAAc,IAAIz3E,IACvB/a,KAAKyyF,UAAUH,EACjB,CACAG,UAAUH,GACR,IAAKjzB,GAASizB,GACZ,OAEF,MAAMI,EAAgB1yF,KAAKwyF,YAC3B5nF,OAAOipD,oBAAoBy+B,GAAQrmF,SAAQnF,IACzC,MAAMiqF,EAAMuB,EAAOxrF,GACnB,IAAKu4D,GAAS0xB,GACZ,OAEF,MAAMiB,EAAW,CAAC,EAClB,IAAK,MAAM5gD,KAAU6gD,GACnBD,EAAS5gD,GAAU2/C,EAAI3/C,IAExBnnC,GAAQ8mF,EAAIlqF,aAAekqF,EAAIlqF,YAAc,CAACC,IAAMmF,SAASupB,IACxDA,IAAS1uB,GAAQ4rF,EAAcl3E,IAAIga,IACrCk9D,EAAc/2E,IAAI6Z,EAAMw8D,EAC1B,GACA,GAEN,CACAW,gBAAgB7mF,EAAQ2xB,GACtB,MAAMm1D,EAAan1D,EAAOjwB,QACpBA,EAwEV,SAA8B1B,EAAQ8mF,GACpC,IAAKA,EACH,OAEF,IAAIplF,EAAU1B,EAAO0B,QACrB,GAAKA,EAOL,OAHIA,EAAQqlF,UACV/mF,EAAO0B,QAAUA,EAAU5C,OAAOiS,OAAO,CAAC,EAAGrP,EAAS,CAACqlF,SAAS,EAAOC,YAAa,CAAC,KAEhFtlF,EANL1B,EAAO0B,QAAUolF,CAOrB,CArFoBG,CAAqBjnF,EAAQ8mF,GAC7C,IAAKplF,EACH,MAAO,GAET,MAAM4kF,EAAapyF,KAAKgzF,kBAAkBxlF,EAASolF,GAOnD,OANIA,EAAWC,SAwDnB,SAAkBT,EAAYvrF,GAC5B,MAAMipF,EAAU,GACVxkF,EAAOV,OAAOU,KAAKzE,GACzB,IAAK,IAAIqE,EAAI,EAAGA,EAAII,EAAKlI,OAAQ8H,IAAK,CACpC,MAAM+nF,EAAOb,EAAW9mF,EAAKJ,IACzB+nF,GAAQA,EAAKllF,UACf+hF,EAAQ5vF,KAAK+yF,EAAKrB,OAEtB,CACA,OAAOjzE,QAAQ8+B,IAAIqyC,EACrB,CAjEMoD,CAASpnF,EAAO0B,QAAQslF,YAAaF,GAAY/zE,MAAK,KACpD/S,EAAO0B,QAAUolF,CAAU,IAC1B,SAGER,CACT,CACAY,kBAAkBlnF,EAAQ2xB,GACxB,MAAMi1D,EAAgB1yF,KAAKwyF,YACrBJ,EAAa,GACbtC,EAAUhkF,EAAOgnF,cAAgBhnF,EAAOgnF,YAAc,CAAC,GACvDjmF,EAAQjC,OAAOU,KAAKmyB,GACpB8xD,EAAOpvF,KAAKC,MAClB,IAAI8K,EACJ,IAAKA,EAAI2B,EAAMzJ,OAAS,EAAG8H,GAAK,IAAKA,EAAG,CACtC,MAAMsqB,EAAO3oB,EAAM3B,GACnB,GAAuB,MAAnBsqB,EAAKg0B,OAAO,GACd,SAEF,GAAa,YAATh0B,EAAoB,CACtB48D,EAAWlyF,QAAQF,KAAK2yF,gBAAgB7mF,EAAQ2xB,IAChD,QACF,CACA,MAAM12B,EAAQ02B,EAAOjI,GACrB,IAAI8kD,EAAYwV,EAAQt6D,GACxB,MAAMu7D,EAAM2B,EAAch3E,IAAI8Z,GAC9B,GAAI8kD,EAAW,CACb,GAAIyW,GAAOzW,EAAUvsE,SAAU,CAC7BusE,EAAUn8D,OAAO4yE,EAAKhqF,EAAOwoF,GAC7B,QACF,CACEjV,EAAU36C,QAEd,CACKoxD,GAAQA,EAAI38E,UAIjB07E,EAAQt6D,GAAQ8kD,EAAY,IAAIwW,GAAUC,EAAKjlF,EAAQ0pB,EAAMzuB,GAC7DqrF,EAAWlyF,KAAKo6E,IAJdxuE,EAAO0pB,GAAQzuB,CAKnB,CACA,OAAOqrF,CACT,CACAj0E,OAAOrS,EAAQ2xB,GACb,GAA8B,IAA1Bz9B,KAAKwyF,YAAYv0C,KAEnB,YADArzC,OAAOiS,OAAO/Q,EAAQ2xB,GAGxB,MAAM20D,EAAapyF,KAAKgzF,kBAAkBlnF,EAAQ2xB,GAClD,OAAI20D,EAAWhvF,QACb6rF,GAAS1mF,IAAIvI,KAAKuyF,OAAQH,IACnB,QAFT,CAIF,EA4BF,SAASe,GAAUrX,EAAOsX,GACxB,MAAM1S,EAAO5E,GAASA,EAAMtuE,SAAW,CAAC,EAClCmmD,EAAU+sB,EAAK/sB,QACfpxD,OAAmBsG,IAAb63E,EAAKn+E,IAAoB6wF,EAAkB,EACjD99E,OAAmBzM,IAAb63E,EAAKprE,IAAoB89E,EAAkB,EACvD,MAAO,CACLryF,MAAO4yD,EAAUr+C,EAAM/S,EACvB6X,IAAKu5C,EAAUpxD,EAAM+S,EAEzB,CAgCA,SAAS+9E,GAAwB3Y,EAAO4Y,GACtC,MAAMhoF,EAAO,GACPioF,EAAW7Y,EAAM8Y,uBAAuBF,GAC9C,IAAIpoF,EAAGi1D,EACP,IAAKj1D,EAAI,EAAGi1D,EAAOozB,EAASnwF,OAAQ8H,EAAIi1D,IAAQj1D,EAC9CI,EAAKpL,KAAKqzF,EAASroF,GAAGsT,OAExB,OAAOlT,CACT,CACA,SAASmoF,GAAWC,EAAO3sF,EAAO4sF,EAASnmF,EAAU,CAAC,GACpD,MAAMlC,EAAOooF,EAAMpoF,KACbsoF,EAA8B,WAAjBpmF,EAAQwzC,KAC3B,IAAI91C,EAAGi1D,EAAMG,EAAcuzB,EAC3B,GAAc,OAAV9sF,EAAJ,CAGA,IAAKmE,EAAI,EAAGi1D,EAAO70D,EAAKlI,OAAQ8H,EAAIi1D,IAAQj1D,EAAG,CAE7C,GADAo1D,GAAgBh1D,EAAKJ,GACjBo1D,IAAiBqzB,EAAS,CAC5B,GAAInmF,EAAQiwC,IACV,SAEF,KACF,CACAo2C,EAAaH,EAAMj2D,OAAO6iC,GACtBhB,GAAeu0B,KAAgBD,GAAyB,IAAV7sF,GAAey7D,GAAKz7D,KAAWy7D,GAAKqxB,MACpF9sF,GAAS8sF,EAEb,CACA,OAAO9sF,CAdP,CAeF,CAcA,SAAS+sF,GAAUhY,EAAOzjC,GACxB,MAAM07C,EAAUjY,GAASA,EAAMtuE,QAAQumF,QACvC,OAAOA,QAAwBlrF,IAAZkrF,QAAwClrF,IAAfwvC,EAAKq7C,KACnD,CAWA,SAASM,GAAiBC,EAAQC,EAAUC,GAC1C,MAAMC,EAAWH,EAAOC,KAAcD,EAAOC,GAAY,CAAC,GAC1D,OAAOE,EAASD,KAAgBC,EAASD,GAAc,CAAC,EAC1D,CACA,SAASE,GAAoBX,EAAOY,EAAQC,EAAU3uF,GACpD,IAAK,MAAMyyC,KAAQi8C,EAAOE,wBAAwB5uF,GAAM+tD,UAAW,CACjE,MAAM5sD,EAAQ2sF,EAAMr7C,EAAK75B,OACzB,GAAK+1E,GAAYxtF,EAAQ,IAAQwtF,GAAYxtF,EAAQ,EACnD,OAAOsxC,EAAK75B,KAEhB,CACA,OAAO,IACT,CACA,SAASi2E,GAAatqC,EAAYq8B,GAChC,MAAM,MAAC9L,EAAOga,YAAar8C,GAAQ8R,EAC7B8pC,EAASvZ,EAAMia,UAAYja,EAAMia,QAAU,CAAC,IAC5C,OAAC/tB,EAAM,OAAE0tB,EAAQ91E,MAAO8hD,GAAgBjoB,EACxCu8C,EAAQhuB,EAAOjiD,KACfkwE,EAAQP,EAAO3vE,KACf7d,EA7BR,SAAqBguF,EAAYC,EAAY18C,GAC3C,MAAO,GAAGy8C,EAAW9mF,MAAM+mF,EAAW/mF,MAAMqqC,EAAKq7C,OAASr7C,EAAKzyC,MACjE,CA2BcovF,CAAYpuB,EAAQ0tB,EAAQj8C,GAClC8nB,EAAOqmB,EAAOpjF,OACpB,IAAIswF,EACJ,IAAK,IAAIxoF,EAAI,EAAGA,EAAIi1D,IAAQj1D,EAAG,CAC7B,MAAM4C,EAAO04E,EAAOt7E,IACb,CAAC0pF,GAAQp2E,EAAO,CAACq2E,GAAQ9tF,GAAS+G,EAEzC4lF,GADmB5lF,EAAK6mF,UAAY7mF,EAAK6mF,QAAU,CAAC,IACjCE,GAASb,GAAiBC,EAAQntF,EAAK0X,GAC1Dk1E,EAAMpzB,GAAgBv5D,EACtB2sF,EAAMuB,KAAOZ,GAAoBX,EAAOY,GAAQ,EAAMj8C,EAAKzyC,MAC3D8tF,EAAMwB,QAAUb,GAAoBX,EAAOY,GAAQ,EAAOj8C,EAAKzyC,KACjE,CACF,CACA,SAASuvF,GAAgBza,EAAO/1D,GAC9B,MAAMo3D,EAASrB,EAAMqB,OACrB,OAAOnxE,OAAOU,KAAKywE,GAAQp0E,QAAOb,GAAOi1E,EAAOj1E,GAAK6d,OAASA,IAAMywE,OACtE,CAyBA,SAASC,GAAYh9C,EAAM9qC,GACzB,MAAM+yD,EAAejoB,EAAK8R,WAAW3rC,MAC/BmG,EAAO0zB,EAAKi8C,QAAUj8C,EAAKi8C,OAAO3vE,KACxC,GAAKA,EAAL,CAGApX,EAAQA,GAAS8qC,EAAKwuB,QACtB,IAAK,MAAM2f,KAAUj5E,EAAO,CAC1B,MAAM0mF,EAASzN,EAAOmO,QACtB,IAAKV,QAA2BprF,IAAjBorF,EAAOtvE,SAAsD9b,IAA/BorF,EAAOtvE,GAAM27C,GACxD,cAEK2zB,EAAOtvE,GAAM27C,EACtB,CARA,CASF,CACA,MAAMg1B,GAAsBt0C,GAAkB,UAATA,GAA6B,SAATA,EACnDu0C,GAAmB,CAACC,EAAQC,IAAWA,EAASD,EAAS5qF,OAAOiS,OAAO,CAAC,EAAG24E,GAGjF,MAAME,GACJh1F,YAAYg6E,EAAOpa,GACjBtgE,KAAK06E,MAAQA,EACb16E,KAAK21F,KAAOjb,EAAMQ,IAClBl7E,KAAKwe,MAAQ8hD,EACbtgE,KAAK41F,gBAAkB,CAAC,EACxB51F,KAAK00F,YAAc10F,KAAK61F,UACxB71F,KAAK81F,MAAQ91F,KAAK00F,YAAY9uF,KAC9B5F,KAAKwN,aAAU3E,EACf7I,KAAKumF,UAAW,EAChBvmF,KAAK+1F,WAAQltF,EACb7I,KAAKg2F,iBAAcntF,EACnB7I,KAAKi2F,oBAAiBptF,EACtB7I,KAAKk2F,gBAAartF,EAClB7I,KAAKm2F,gBAAattF,EAClB7I,KAAKo2F,qBAAsB,EAC3Bp2F,KAAKq2F,oBAAqB,EAC1Br2F,KAAKs2F,cAAWztF,EAChB7I,KAAKu2F,UAAY,GACjBv2F,KAAKmzD,YACP,CACAA,aACE,MAAM9a,EAAOr4C,KAAK00F,YAClB10F,KAAKyyF,YACLzyF,KAAKw2F,aACLn+C,EAAKo+C,SAAW3C,GAAUz7C,EAAKi8C,OAAQj8C,GACvCr4C,KAAK02F,aACP,CACAC,YAAYr2B,GACNtgE,KAAKwe,QAAU8hD,GACjB+0B,GAAYr1F,KAAK00F,aAEnB10F,KAAKwe,MAAQ8hD,CACf,CACAk2B,aACE,MAAM9b,EAAQ16E,KAAK06E,MACbriC,EAAOr4C,KAAK00F,YACZptC,EAAUtnD,KAAK42F,aACfC,EAAW,CAAClyE,EAAMvO,EAAGC,EAAGof,IAAe,MAAT9Q,EAAevO,EAAa,MAATuO,EAAe8Q,EAAIpf,EACpEygF,EAAMz+C,EAAK0+C,QAAUt3B,GAAenY,EAAQyvC,QAAS5B,GAAgBza,EAAO,MAC5Esc,EAAM3+C,EAAK4+C,QAAUx3B,GAAenY,EAAQ2vC,QAAS9B,GAAgBza,EAAO,MAC5Ewc,EAAM7+C,EAAK8+C,QAAU13B,GAAenY,EAAQ6vC,QAAShC,GAAgBza,EAAO,MAC5EW,EAAYhjC,EAAKgjC,UACjB+b,EAAM/+C,EAAKg/C,QAAUR,EAASxb,EAAWyb,EAAKE,EAAKE,GACnDI,EAAMj/C,EAAKk/C,QAAUV,EAASxb,EAAW2b,EAAKF,EAAKI,GACzD7+C,EAAK8uB,OAASnnE,KAAKw3F,cAAcV,GACjCz+C,EAAK+uB,OAASpnE,KAAKw3F,cAAcR,GACjC3+C,EAAKo/C,OAASz3F,KAAKw3F,cAAcN,GACjC7+C,EAAKuuB,OAAS5mE,KAAKw3F,cAAcJ,GACjC/+C,EAAKi8C,OAASt0F,KAAKw3F,cAAcF,EACnC,CACAV,aACE,OAAO52F,KAAK06E,MAAM72E,KAAK42E,SAASz6E,KAAKwe,MACvC,CACAq3E,UACE,OAAO71F,KAAK06E,MAAMgd,eAAe13F,KAAKwe,MACxC,CACAg5E,cAAcG,GACZ,OAAO33F,KAAK06E,MAAMqB,OAAO4b,EAC3B,CACAC,eAAe9b,GACb,MAAMzjC,EAAOr4C,KAAK00F,YAClB,OAAO5Y,IAAUzjC,EAAKuuB,OAClBvuB,EAAKi8C,OACLj8C,EAAKuuB,MACX,CACAroD,QACEve,KAAK4vF,QAAQ,QACf,CACAiI,WACE,MAAMx/C,EAAOr4C,KAAK00F,YACd10F,KAAK+1F,OACPtwB,GAAoBzlE,KAAK+1F,MAAO/1F,MAE9Bq4C,EAAKo+C,UACPpB,GAAYh9C,EAEhB,CACAy/C,aACE,MAAMxwC,EAAUtnD,KAAK42F,aACf/yF,EAAOyjD,EAAQzjD,OAASyjD,EAAQzjD,KAAO,IACvCkyF,EAAQ/1F,KAAK+1F,MACnB,GAAI12B,GAASx7D,GACX7D,KAAK+1F,MA7LX,SAAkClyF,GAChC,MAAMyH,EAAOV,OAAOU,KAAKzH,GACnBk0F,EAAQ,IAAI/tF,MAAMsB,EAAKlI,QAC7B,IAAI8H,EAAGi1D,EAAMr5D,EACb,IAAKoE,EAAI,EAAGi1D,EAAO70D,EAAKlI,OAAQ8H,EAAIi1D,IAAQj1D,EAC1CpE,EAAMwE,EAAKJ,GACX6sF,EAAM7sF,GAAK,CACTkL,EAAGtP,EACHuP,EAAGxS,EAAKiD,IAGZ,OAAOixF,CACT,CAiLmBC,CAAyBn0F,QACjC,GAAIkyF,IAAUlyF,EAAM,CACzB,GAAIkyF,EAAO,CACTtwB,GAAoBswB,EAAO/1F,MAC3B,MAAMq4C,EAAOr4C,KAAK00F,YAClBW,GAAYh9C,GACZA,EAAKwuB,QAAU,EACjB,CACIhjE,GAAQ+G,OAAOqtF,aAAap0F,KACN7D,MD3UL06D,EC2UD72D,GD1Ud+hE,SACRlL,EAAMkL,SAASjd,UAAUzoD,KCyUGF,ODtU9B4K,OAAOyB,eAAequD,EAAO,WAAY,CACvCnuD,cAAc,EACdZ,YAAY,EACZ5E,MAAO,CACL4hD,UAAW,CCkUe3oD,SD/T9BwlE,GAAYv5D,SAASnF,IACnB,MAAMo4B,EAAS,UAAYuiC,GAAY36D,GACjCupB,EAAOqqC,EAAM5zD,GACnB8D,OAAOyB,eAAequD,EAAO5zD,EAAK,CAChCyF,cAAc,EACdZ,YAAY,EACZ5E,SAAS6B,GACP,MAAMkpF,EAAMzhE,EAAKzkB,MAAM5L,KAAM4I,GAM7B,OALA8xD,EAAMkL,SAASjd,UAAU18C,SAASrF,IACF,mBAAnBA,EAAOs4B,IAChBt4B,EAAOs4B,MAAWt2B,EACpB,IAEKkpF,CACT,GACA,MCkTA9xF,KAAKu2F,UAAY,GACjBv2F,KAAK+1F,MAAQlyF,CACf,CD/UJ,IAA2B62D,CCgVzB,CACAg8B,cACE,MAAMr+C,EAAOr4C,KAAK00F,YAClB10F,KAAK83F,aACD93F,KAAKk4F,qBACP7/C,EAAKiP,QAAU,IAAItnD,KAAKk4F,mBAE5B,CACAC,sBAAsBC,GACpB,MAAM//C,EAAOr4C,KAAK00F,YACZptC,EAAUtnD,KAAK42F,aACrB,IAAIyB,GAAe,EACnBr4F,KAAK83F,aACL,MAAMQ,EAAajgD,EAAKo+C,SACxBp+C,EAAKo+C,SAAW3C,GAAUz7C,EAAKi8C,OAAQj8C,GACnCA,EAAKq7C,QAAUpsC,EAAQosC,QACzB2E,GAAe,EACfhD,GAAYh9C,GACZA,EAAKq7C,MAAQpsC,EAAQosC,OAEvB1zF,KAAKu4F,gBAAgBH,IACjBC,GAAgBC,IAAejgD,EAAKo+C,WACtChC,GAAaz0F,KAAMq4C,EAAKwuB,QAE5B,CACA4rB,YACE,MAAMH,EAAStyF,KAAK06E,MAAM4X,OACpBkG,EAAYlG,EAAOmG,iBAAiBz4F,KAAK81F,OACzCvS,EAAS+O,EAAOoG,gBAAgB14F,KAAK42F,aAAc4B,GAAW,GACpEx4F,KAAKwN,QAAU8kF,EAAOqG,eAAepV,EAAQvjF,KAAKi+E,cAClDj+E,KAAKumF,SAAWvmF,KAAKwN,QAAQmuE,QAC7B37E,KAAK41F,gBAAkB,CAAC,CAC1B,CACA/vF,MAAM9E,EAAO2lE,GACX,MAAOguB,YAAar8C,EAAM09C,MAAOlyF,GAAQ7D,MACnC,OAAC4mE,EAAM,SAAE6vB,GAAYp+C,EACrBu8C,EAAQhuB,EAAOjiD,KACrB,IAEIzZ,EAAGulF,EAAKjK,EAFRoS,EAAmB,IAAV73F,GAAe2lE,IAAU7iE,EAAKT,QAAgBi1C,EAAKsuB,QAC5D/yD,EAAO7S,EAAQ,GAAKs3C,EAAKwuB,QAAQ9lE,EAAQ,GAE7C,IAAsB,IAAlBf,KAAKumF,SACPluC,EAAKwuB,QAAUhjE,EACfw0C,EAAKsuB,SAAU,EACf6f,EAAS3iF,MACJ,CAEH2iF,EADEv8E,GAAQpG,EAAK9C,IACNf,KAAK64F,eAAexgD,EAAMx0C,EAAM9C,EAAO2lE,GACvCrH,GAASx7D,EAAK9C,IACdf,KAAK84F,gBAAgBzgD,EAAMx0C,EAAM9C,EAAO2lE,GAExC1mE,KAAK+4F,mBAAmB1gD,EAAMx0C,EAAM9C,EAAO2lE,GAEtD,MAAMsyB,EAA6B,IAAqB,OAAfvI,EAAImE,IAAoBhhF,GAAQ68E,EAAImE,GAAShhF,EAAKghF,GAC3F,IAAK1pF,EAAI,EAAGA,EAAIw7D,IAASx7D,EACvBmtC,EAAKwuB,QAAQ37D,EAAInK,GAAS0vF,EAAMjK,EAAOt7E,GACnC0tF,IACEI,MACFJ,GAAS,GAEXhlF,EAAO68E,GAGXp4C,EAAKsuB,QAAUiyB,CACjB,CACInC,GACFhC,GAAaz0F,KAAMwmF,EAEvB,CACAuS,mBAAmB1gD,EAAMx0C,EAAM9C,EAAO2lE,GACpC,MAAM,OAACE,EAAM,OAAE0tB,GAAUj8C,EACnBu8C,EAAQhuB,EAAOjiD,KACfkwE,EAAQP,EAAO3vE,KACfs0E,EAASryB,EAAOsyB,YAChBC,EAAcvyB,IAAW0tB,EACzB9N,EAAS,IAAIx8E,MAAM08D,GACzB,IAAIx7D,EAAGi1D,EAAM3hD,EACb,IAAKtT,EAAI,EAAGi1D,EAAOuG,EAAOx7D,EAAIi1D,IAAQj1D,EACpCsT,EAAQtT,EAAInK,EACZylF,EAAOt7E,GAAK,CACV,CAAC0pF,GAAQuE,GAAevyB,EAAO/gE,MAAMozF,EAAOz6E,GAAQA,GACpD,CAACq2E,GAAQP,EAAOzuF,MAAMhC,EAAK2a,GAAQA,IAGvC,OAAOgoE,CACT,CACAqS,eAAexgD,EAAMx0C,EAAM9C,EAAO2lE,GAChC,MAAM,OAACS,EAAM,OAAEC,GAAU/uB,EACnBmuC,EAAS,IAAIx8E,MAAM08D,GACzB,IAAIx7D,EAAGi1D,EAAM3hD,EAAO1Q,EACpB,IAAK5C,EAAI,EAAGi1D,EAAOuG,EAAOx7D,EAAIi1D,IAAQj1D,EACpCsT,EAAQtT,EAAInK,EACZ+M,EAAOjK,EAAK2a,GACZgoE,EAAOt7E,GAAK,CACVkL,EAAG+wD,EAAOthE,MAAMiI,EAAK,GAAI0Q,GACzBnI,EAAG+wD,EAAOvhE,MAAMiI,EAAK,GAAI0Q,IAG7B,OAAOgoE,CACT,CACAsS,gBAAgBzgD,EAAMx0C,EAAM9C,EAAO2lE,GACjC,MAAM,OAACS,EAAM,OAAEC,GAAU/uB,GACnB,SAAC+gD,EAAW,IAAG,SAAEC,EAAW,KAAOr5F,KAAKumF,SACxCC,EAAS,IAAIx8E,MAAM08D,GACzB,IAAIx7D,EAAGi1D,EAAM3hD,EAAO1Q,EACpB,IAAK5C,EAAI,EAAGi1D,EAAOuG,EAAOx7D,EAAIi1D,IAAQj1D,EACpCsT,EAAQtT,EAAInK,EACZ+M,EAAOjK,EAAK2a,GACZgoE,EAAOt7E,GAAK,CACVkL,EAAG+wD,EAAOthE,MAAMs7D,GAAiBrzD,EAAMsrF,GAAW56E,GAClDnI,EAAG+wD,EAAOvhE,MAAMs7D,GAAiBrzD,EAAMurF,GAAW76E,IAGtD,OAAOgoE,CACT,CACA8S,UAAU96E,GACR,OAAOxe,KAAK00F,YAAY7tB,QAAQroD,EAClC,CACA+6E,eAAe/6E,GACb,OAAOxe,KAAK00F,YAAY7wF,KAAK2a,EAC/B,CACAi1E,WAAW3X,EAAO0K,EAAQxlC,GACxB,MAAM05B,EAAQ16E,KAAK06E,MACbriC,EAAOr4C,KAAK00F,YACZ3tF,EAAQy/E,EAAO1K,EAAMn3D,MAK3B,OAAO8uE,GAJO,CACZnoF,KAAM+nF,GAAwB3Y,GAAO,GACrCj9C,OAAQ+oD,EAAOmO,QAAQ7Y,EAAMn3D,OAEN5d,EAAOsxC,EAAK75B,MAAO,CAACwiC,QAC/C,CACAw4C,sBAAsB92B,EAAOoZ,EAAO0K,EAAQkN,GAC1C,MAAM+F,EAAcjT,EAAO1K,EAAMn3D,MACjC,IAAI5d,EAAwB,OAAhB0yF,EAAuBC,IAAMD,EACzC,MAAMh8D,EAASi2D,GAASlN,EAAOmO,QAAQ7Y,EAAMn3D,MACzC+uE,GAASj2D,IACXi2D,EAAMj2D,OAASA,EACf12B,EAAQ0sF,GAAWC,EAAO+F,EAAaz5F,KAAK00F,YAAYl2E,QAE1DkkD,EAAMngE,IAAMF,KAAKE,IAAImgE,EAAMngE,IAAKwE,GAChC27D,EAAMptD,IAAMjT,KAAKiT,IAAIotD,EAAMptD,IAAKvO,EAClC,CACA4yF,UAAU7d,EAAO8d,GACf,MAAMvhD,EAAOr4C,KAAK00F,YACZ7tB,EAAUxuB,EAAKwuB,QACf+xB,EAASvgD,EAAKsuB,SAAWmV,IAAUzjC,EAAKuuB,OACxCzG,EAAO0G,EAAQzjE,OACfy2F,EAAa75F,KAAK43F,eAAe9b,GACjC4X,EAtPU,EAACkG,EAAUvhD,EAAMqiC,IAAUkf,IAAavhD,EAAK5hB,QAAU4hB,EAAKo+C,UAC3E,CAACnrF,KAAM+nF,GAAwB3Y,GAAO,GAAOj9C,OAAQ,MAqPxCq8D,CAAYF,EAAUvhD,EAAMr4C,KAAK06E,OACzChY,EAAQ,CAACngE,IAAKi4D,OAAO0H,kBAAmB5sD,IAAKklD,OAAOu/B,oBACnDx3F,IAAKy3F,EAAU1kF,IAAK2kF,GA5U/B,SAAuBne,GACrB,MAAM,IAACv5E,EAAG,IAAE+S,EAAG,WAAEwxD,EAAU,WAAEC,GAAc+U,EAAM9U,gBACjD,MAAO,CACLzkE,IAAKukE,EAAavkE,EAAMi4D,OAAOu/B,kBAC/BzkF,IAAKyxD,EAAazxD,EAAMklD,OAAO0H,kBAEnC,CAsU2C8E,CAAc6yB,GACrD,IAAI3uF,EAAGs7E,EACP,SAASlgE,IACPkgE,EAAS3f,EAAQ37D,GACjB,MAAM2oF,EAAarN,EAAOqT,EAAWl1E,MACrC,OAAQ26C,GAAeknB,EAAO1K,EAAMn3D,QAAUq1E,EAAWnG,GAAcoG,EAAWpG,CACpF,CACA,IAAK3oF,EAAI,EAAGA,EAAIi1D,IACV75C,MAGJtmB,KAAKw5F,sBAAsB92B,EAAOoZ,EAAO0K,EAAQkN,IAC7CkF,MALkB1tF,GASxB,GAAI0tF,EACF,IAAK1tF,EAAIi1D,EAAO,EAAGj1D,GAAK,IAAKA,EAC3B,IAAIob,IAAJ,CAGAtmB,KAAKw5F,sBAAsB92B,EAAOoZ,EAAO0K,EAAQkN,GACjD,KAFA,CAKJ,OAAOhxB,CACT,CACAw3B,mBAAmBpe,GACjB,MAAM0K,EAASxmF,KAAK00F,YAAY7tB,QAC1BppC,EAAS,GACf,IAAIvyB,EAAGi1D,EAAMp5D,EACb,IAAKmE,EAAI,EAAGi1D,EAAOqmB,EAAOpjF,OAAQ8H,EAAIi1D,IAAQj1D,EAC5CnE,EAAQy/E,EAAOt7E,GAAG4wE,EAAMn3D,MACpB26C,GAAev4D,IACjB02B,EAAOv9B,KAAK6G,GAGhB,OAAO02B,CACT,CACA08D,iBACE,OAAO,CACT,CACAC,iBAAiB57E,GACf,MAAM65B,EAAOr4C,KAAK00F,YACZ9tB,EAASvuB,EAAKuuB,OACd0tB,EAASj8C,EAAKi8C,OACd9N,EAASxmF,KAAKs5F,UAAU96E,GAC9B,MAAO,CACL67E,MAAOzzB,EAAS,GAAKA,EAAO0zB,iBAAiB9T,EAAO5f,EAAOjiD,OAAS,GACpE5d,MAAOutF,EAAS,GAAKA,EAAOgG,iBAAiB9T,EAAO8N,EAAO3vE,OAAS,GAExE,CACAirE,QAAQ5uC,GACN,MAAM3I,EAAOr4C,KAAK00F,YAClB10F,KAAKme,OAAO6iC,GAAQ,WACpB3I,EAAKkiD,MAxcT,SAAgBxzF,GACd,IAAIsrB,EAAGoD,EAAGjO,EAAG0iD,EASb,OARI7K,GAASt4D,IACXsrB,EAAItrB,EAAMmP,IACVuf,EAAI1uB,EAAM4L,MACV6U,EAAIzgB,EAAMoP,OACV+zD,EAAInjE,EAAM0L,MAEV4f,EAAIoD,EAAIjO,EAAI0iD,EAAInjE,EAEX,CACLmP,IAAKmc,EACL1f,MAAO8iB,EACPtf,OAAQqR,EACR/U,KAAMy3D,EACNnxC,UAAoB,IAAVhyB,EAEd,CAubiByzF,CAAO/6B,GAAez/D,KAAKwN,QAAQqyE,KArdpD,SAAqB1Y,EAAQC,EAAQgsB,GACnC,IAAwB,IAApBA,EACF,OAAO,EAET,MAAMh9E,EAAI+8E,GAAUhsB,EAAQisB,GACtB/8E,EAAI88E,GAAU/rB,EAAQgsB,GAC5B,MAAO,CACLl9E,IAAKG,EAAE+D,IACPzH,MAAOyD,EAAEgE,IACTjE,OAAQE,EAAEtV,MACV0R,KAAM2D,EAAErV,MAEZ,CAyc0D05F,CAAYpiD,EAAK8uB,OAAQ9uB,EAAK+uB,OAAQpnE,KAAKm6F,mBACnG,CACAh8E,OAAO6iC,GAAO,CACd+uC,OACE,MAAM7U,EAAMl7E,KAAK21F,KACXjb,EAAQ16E,KAAK06E,MACbriC,EAAOr4C,KAAK00F,YACZ33E,EAAWs7B,EAAKx0C,MAAQ,GACxB87E,EAAOjF,EAAMggB,UACb3sF,EAAS,GACThN,EAAQf,KAAKk2F,YAAc,EAC3BxvB,EAAQ1mE,KAAKm2F,YAAep5E,EAAS3Z,OAASrC,EAC9Ck7E,EAA0Bj8E,KAAKwN,QAAQyuE,wBAC7C,IAAI/wE,EAIJ,IAHImtC,EAAKiP,SACPjP,EAAKiP,QAAQyoC,KAAK7U,EAAKyE,EAAM5+E,EAAO2lE,GAEjCx7D,EAAInK,EAAOmK,EAAInK,EAAQ2lE,IAASx7D,EAAG,CACtC,MAAMxB,EAAUqT,EAAS7R,GACrBxB,EAAQ+sB,SAGR/sB,EAAQqE,QAAUkuE,EACpBluE,EAAO7N,KAAKwJ,GAEZA,EAAQqmF,KAAK7U,EAAKyE,GAEtB,CACA,IAAKz0E,EAAI,EAAGA,EAAI6C,EAAO3K,SAAU8H,EAC/B6C,EAAO7C,GAAG6kF,KAAK7U,EAAKyE,EAExB,CACAgM,SAASntE,EAAOzQ,GACd,MAAMizC,EAAOjzC,EAAS,SAAW,UACjC,YAAiBlF,IAAV2V,GAAuBxe,KAAK00F,YAAYptC,QAC3CtnD,KAAK26F,6BAA6B35C,GAClChhD,KAAK46F,0BAA0Bp8E,GAAS,EAAGwiC,EACjD,CACAi9B,WAAWz/D,EAAOzQ,EAAQizC,GACxB,MAAMsG,EAAUtnD,KAAK42F,aACrB,IAAI3/C,EACJ,GAAIz4B,GAAS,GAAKA,EAAQxe,KAAK00F,YAAY7wF,KAAKT,OAAQ,CACtD,MAAMsG,EAAU1J,KAAK00F,YAAY7wF,KAAK2a,GACtCy4B,EAAUvtC,EAAQ4sF,WACf5sF,EAAQ4sF,SAxXjB,SAA2B/0E,EAAQ/C,EAAO9U,GACxC,OAAO05E,GAAc7hE,EAAQ,CAC3BxT,QAAQ,EACR8sF,UAAWr8E,EACXgoE,YAAQ39E,EACRiyF,SAAKjyF,EACLa,UACA8U,QACAwiC,KAAM,UACNp7C,KAAM,QAEV,CA6W4Bm1F,CAAkB/6F,KAAKi+E,aAAcz/D,EAAO9U,IAClEutC,EAAQuvC,OAASxmF,KAAKs5F,UAAU96E,GAChCy4B,EAAQ6jD,IAAMxzC,EAAQzjD,KAAK2a,GAC3By4B,EAAQz4B,MAAQy4B,EAAQ4jD,UAAYr8E,CACtC,MACEy4B,EAAUj3C,KAAKs2F,WACZt2F,KAAKs2F,SA1Yd,SAA8B/0E,EAAQ/C,GACpC,OAAO4kE,GAAc7hE,EACnB,CACExT,QAAQ,EACRu5C,aAASz+C,EACTy3D,aAAc9hD,EACdA,QACAwiC,KAAM,UACNp7C,KAAM,WAGZ,CA+XyBo1F,CAAqBh7F,KAAK06E,MAAMuD,aAAcj+E,KAAKwe,QACtEy4B,EAAQqQ,QAAUA,EAClBrQ,EAAQz4B,MAAQy4B,EAAQqpB,aAAetgE,KAAKwe,MAI9C,OAFAy4B,EAAQlpC,SAAWA,EACnBkpC,EAAQ+J,KAAOA,EACR/J,CACT,CACA0jD,6BAA6B35C,GAC3B,OAAOhhD,KAAKi7F,uBAAuBj7F,KAAKk4F,mBAAmBlqF,GAAIgzC,EACjE,CACA45C,0BAA0Bp8E,EAAOwiC,GAC/B,OAAOhhD,KAAKi7F,uBAAuBj7F,KAAKk7F,gBAAgBltF,GAAIgzC,EAAMxiC,EACpE,CACAy8E,uBAAuBlrD,EAAaiR,EAAO,UAAWxiC,GACpD,MAAMzQ,EAAkB,WAATizC,EACTuB,EAAQviD,KAAK41F,gBACb3sC,EAAWlZ,EAAc,IAAMiR,EAC/Bw0C,EAASjzC,EAAM0G,GACfkyC,EAAUn7F,KAAKo2F,qBAAuBz0B,GAAQnjD,GACpD,GAAIg3E,EACF,OAAOD,GAAiBC,EAAQ2F,GAElC,MAAM7I,EAAStyF,KAAK06E,MAAM4X,OACpBkG,EAAYlG,EAAO8I,wBAAwBp7F,KAAK81F,MAAO/lD,GACvDyzC,EAAWz1E,EAAS,CAAC,GAAGgiC,SAAoB,QAASA,EAAa,IAAM,CAACA,EAAa,IACtFwzC,EAAS+O,EAAOoG,gBAAgB14F,KAAK42F,aAAc4B,GACnD/hB,EAAQ7rE,OAAOU,KAAK8uE,GAASr9D,SAASgzB,IAEtCtS,EAAS60D,EAAO+I,oBAAoB9X,EAAQ9M,GADlC,IAAMz2E,KAAKi+E,WAAWz/D,EAAOzQ,IACqBy1E,GAKlE,OAJI/lD,EAAOo1D,UACTp1D,EAAOo1D,QAAUsI,EACjB54C,EAAM0G,GAAYr+C,OAAOm4C,OAAOwyC,GAAiB93D,EAAQ09D,KAEpD19D,CACT,CACA69D,mBAAmB98E,EAAOrK,EAAYpG,GACpC,MAAM2sE,EAAQ16E,KAAK06E,MACbn4B,EAAQviD,KAAK41F,gBACb3sC,EAAW,aAAa90C,IACxBqhF,EAASjzC,EAAM0G,GACrB,GAAIusC,EACF,OAAOA,EAET,IAAIhoF,EACJ,IAAgC,IAA5BktE,EAAMltE,QAAQ8sE,UAAqB,CACrC,MAAMgY,EAAStyF,KAAK06E,MAAM4X,OACpBkG,EAAYlG,EAAOiJ,0BAA0Bv7F,KAAK81F,MAAO3hF,GACzDovE,EAAS+O,EAAOoG,gBAAgB14F,KAAK42F,aAAc4B,GACzDhrF,EAAU8kF,EAAOqG,eAAepV,EAAQvjF,KAAKi+E,WAAWz/D,EAAOzQ,EAAQoG,GACzE,CACA,MAAMi+E,EAAa,IAAIC,GAAW3X,EAAOltE,GAAWA,EAAQ4kF,YAI5D,OAHI5kF,GAAWA,EAAQo2E,aACrBrhC,EAAM0G,GAAYr+C,OAAOm4C,OAAOqvC,IAE3BA,CACT,CACAoJ,iBAAiBhuF,GACf,GAAKA,EAAQqlF,QAGb,OAAO7yF,KAAKi2F,iBAAmBj2F,KAAKi2F,eAAiBrrF,OAAOiS,OAAO,CAAC,EAAGrP,GACzE,CACAiuF,eAAez6C,EAAM06C,GACnB,OAAQA,GAAiBpG,GAAmBt0C,IAAShhD,KAAK06E,MAAMihB,mBAClE,CACAC,kBAAkB76F,EAAOigD,GACvB,MAAM66C,EAAY77F,KAAK46F,0BAA0B75F,EAAOigD,GAClD86C,EAA0B97F,KAAKi2F,eAC/ByF,EAAgB17F,KAAKw7F,iBAAiBK,GACtCJ,EAAiBz7F,KAAKy7F,eAAez6C,EAAM06C,IAAmBA,IAAkBI,EAEtF,OADA97F,KAAK+7F,oBAAoBL,EAAe16C,EAAM66C,GACvC,CAACH,gBAAeD,iBACzB,CACAO,cAActyF,EAAS8U,EAAO3X,EAAYm6C,GACpCs0C,GAAmBt0C,GACrBp2C,OAAOiS,OAAOnT,EAAS7C,GAEvB7G,KAAKs7F,mBAAmB98E,EAAOwiC,GAAM7iC,OAAOzU,EAAS7C,EAEzD,CACAk1F,oBAAoBL,EAAe16C,EAAM4xC,GACnC8I,IAAkBpG,GAAmBt0C,IACvChhD,KAAKs7F,wBAAmBzyF,EAAWm4C,GAAM7iC,OAAOu9E,EAAe9I,EAEnE,CACAqJ,UAAUvyF,EAAS8U,EAAOwiC,EAAMjzC,GAC9BrE,EAAQqE,OAASA,EACjB,MAAMP,EAAUxN,KAAK2rF,SAASntE,EAAOzQ,GACrC/N,KAAKs7F,mBAAmB98E,EAAOwiC,EAAMjzC,GAAQoQ,OAAOzU,EAAS,CAC3D8D,SAAWO,GAAU/N,KAAKw7F,iBAAiBhuF,IAAaA,GAE5D,CACA0uF,iBAAiBxyF,EAAS42D,EAAc9hD,GACtCxe,KAAKi8F,UAAUvyF,EAAS8U,EAAO,UAAU,EAC3C,CACA29E,cAAczyF,EAAS42D,EAAc9hD,GACnCxe,KAAKi8F,UAAUvyF,EAAS8U,EAAO,UAAU,EAC3C,CACA49E,2BACE,MAAM1yF,EAAU1J,KAAK00F,YAAYptC,QAC7B59C,GACF1J,KAAKi8F,UAAUvyF,OAASb,EAAW,UAAU,EAEjD,CACAwzF,wBACE,MAAM3yF,EAAU1J,KAAK00F,YAAYptC,QAC7B59C,GACF1J,KAAKi8F,UAAUvyF,OAASb,EAAW,UAAU,EAEjD,CACA0vF,gBAAgBH,GACd,MAAMv0F,EAAO7D,KAAK+1F,MACZh5E,EAAW/c,KAAK00F,YAAY7wF,KAClC,IAAK,MAAOq7B,EAAQo9D,EAAMC,KAASv8F,KAAKu2F,UACtCv2F,KAAKk/B,GAAQo9D,EAAMC,GAErBv8F,KAAKu2F,UAAY,GACjB,MAAMiG,EAAUz/E,EAAS3Z,OACnBq5F,EAAU54F,EAAKT,OACfsjE,EAAQrkE,KAAKE,IAAIk6F,EAASD,GAC5B91B,GACF1mE,KAAK6F,MAAM,EAAG6gE,GAEZ+1B,EAAUD,EACZx8F,KAAK08F,gBAAgBF,EAASC,EAAUD,EAASpE,GACxCqE,EAAUD,GACnBx8F,KAAK28F,gBAAgBF,EAASD,EAAUC,EAE5C,CACAC,gBAAgB37F,EAAO2lE,EAAO0xB,GAAmB,GAC/C,MAAM//C,EAAOr4C,KAAK00F,YACZ7wF,EAAOw0C,EAAKx0C,KACZuW,EAAMrZ,EAAQ2lE,EACpB,IAAIx7D,EACJ,MAAM0xF,EAAQ7yF,IAEZ,IADAA,EAAI3G,QAAUsjE,EACTx7D,EAAInB,EAAI3G,OAAS,EAAG8H,GAAKkP,EAAKlP,IACjCnB,EAAImB,GAAKnB,EAAImB,EAAIw7D,EACnB,EAGF,IADAk2B,EAAK/4F,GACAqH,EAAInK,EAAOmK,EAAIkP,IAAOlP,EACzBrH,EAAKqH,GAAK,IAAIlL,KAAKk7F,gBAEjBl7F,KAAKumF,UACPqW,EAAKvkD,EAAKwuB,SAEZ7mE,KAAK6F,MAAM9E,EAAO2lE,GACd0xB,GACFp4F,KAAK68F,eAAeh5F,EAAM9C,EAAO2lE,EAAO,QAE5C,CACAm2B,eAAenzF,EAAS3I,EAAO2lE,EAAO1lB,GAAO,CAC7C27C,gBAAgB57F,EAAO2lE,GACrB,MAAMruB,EAAOr4C,KAAK00F,YAClB,GAAI10F,KAAKumF,SAAU,CACjB,MAAMuW,EAAUzkD,EAAKwuB,QAAQtoB,OAAOx9C,EAAO2lE,GACvCruB,EAAKo+C,UACPpB,GAAYh9C,EAAMykD,EAEtB,CACAzkD,EAAKx0C,KAAK06C,OAAOx9C,EAAO2lE,EAC1B,CACAq2B,MAAMn0F,GACJ,GAAI5I,KAAKumF,SACPvmF,KAAKu2F,UAAUr2F,KAAK0I,OACf,CACL,MAAOs2B,EAAQo9D,EAAMC,GAAQ3zF,EAC7B5I,KAAKk/B,GAAQo9D,EAAMC,EACrB,CACAv8F,KAAK06E,MAAMsiB,aAAa98F,KAAK,CAACF,KAAKwe,SAAU5V,GAC/C,CACAq0F,cACE,MAAMv2B,EAAQ36D,UAAU3I,OACxBpD,KAAK+8F,MAAM,CAAC,kBAAmB/8F,KAAK42F,aAAa/yF,KAAKT,OAASsjE,EAAOA,GACxE,CACAw2B,aACEl9F,KAAK+8F,MAAM,CAAC,kBAAmB/8F,KAAK00F,YAAY7wF,KAAKT,OAAS,EAAG,GACnE,CACA+5F,eACEn9F,KAAK+8F,MAAM,CAAC,kBAAmB,EAAG,GACpC,CACAK,cAAcr8F,EAAO2lE,GACfA,GACF1mE,KAAK+8F,MAAM,CAAC,kBAAmBh8F,EAAO2lE,IAExC,MAAM22B,EAAWtxF,UAAU3I,OAAS,EAChCi6F,GACFr9F,KAAK+8F,MAAM,CAAC,kBAAmBh8F,EAAOs8F,GAE1C,CACAC,iBACEt9F,KAAK+8F,MAAM,CAAC,kBAAmB,EAAGhxF,UAAU3I,QAC9C,EAiBF,SAASm6F,GAAqBllD,GAC5B,MAAMyjC,EAAQzjC,EAAKuuB,OACbnpC,EAbR,SAA2Bq+C,EAAOl2E,GAChC,IAAKk2E,EAAM0hB,OAAOC,KAAM,CACtB,MAAMC,EAAe5hB,EAAM0Y,wBAAwB5uF,GACnD,IAAI63B,EAAS,GACb,IAAK,IAAIvyB,EAAI,EAAGi1D,EAAOu9B,EAAat6F,OAAQ8H,EAAIi1D,EAAMj1D,IACpDuyB,EAASA,EAAOhpB,OAAOipF,EAAaxyF,GAAGi/C,WAAW+vC,mBAAmBpe,IAEvEA,EAAM0hB,OAAOC,KAAO53B,GAAapoC,EAAOtiB,MAAK,CAAChS,EAAGqe,IAAMre,EAAIqe,IAC7D,CACA,OAAOs0D,EAAM0hB,OAAOC,IACtB,CAGiBE,CAAkB7hB,EAAOzjC,EAAKzyC,MAC7C,IACIsF,EAAGi1D,EAAMy9B,EAAMhqF,EADfrR,EAAMu5E,EAAM+hB,QAEhB,MAAMC,EAAmB,KACV,QAATF,IAA4B,QAAVA,IAGlBj8B,GAAQ/tD,KACVrR,EAAMF,KAAKE,IAAIA,EAAKF,KAAK+V,IAAIwlF,EAAOhqF,IAASrR,IAE/CqR,EAAOgqF,EAAI,EAEb,IAAK1yF,EAAI,EAAGi1D,EAAO1iC,EAAOr6B,OAAQ8H,EAAIi1D,IAAQj1D,EAC5C0yF,EAAO9hB,EAAM7U,iBAAiBxpC,EAAOvyB,IACrC4yF,IAGF,IADAlqF,OAAO/K,EACFqC,EAAI,EAAGi1D,EAAO2b,EAAMiiB,MAAM36F,OAAQ8H,EAAIi1D,IAAQj1D,EACjD0yF,EAAO9hB,EAAMkiB,gBAAgB9yF,GAC7B4yF,IAEF,OAAOv7F,CACT,CA0DA,SAAS07F,GAAWC,EAAOpwF,EAAMwmF,EAAQppF,GAMvC,OALIjB,GAAQi0F,GAtBd,SAAuBA,EAAOpwF,EAAMwmF,EAAQppF,GAC1C,MAAMizF,EAAa7J,EAAOzuF,MAAMq4F,EAAM,GAAIhzF,GACpCkzF,EAAW9J,EAAOzuF,MAAMq4F,EAAM,GAAIhzF,GAClC3I,EAAMF,KAAKE,IAAI47F,EAAYC,GAC3B9oF,EAAMjT,KAAKiT,IAAI6oF,EAAYC,GACjC,IAAIC,EAAW97F,EACX+7F,EAAShpF,EACTjT,KAAK+V,IAAI7V,GAAOF,KAAK+V,IAAI9C,KAC3B+oF,EAAW/oF,EACXgpF,EAAS/7F,GAEXuL,EAAKwmF,EAAO3vE,MAAQ25E,EACpBxwF,EAAKywF,QAAU,CACbF,WACAC,SACAv9F,MAAOo9F,EACP/jF,IAAKgkF,EACL77F,MACA+S,MAEJ,CAGIkpF,CAAcN,EAAOpwF,EAAMwmF,EAAQppF,GAEnC4C,EAAKwmF,EAAO3vE,MAAQ2vE,EAAOzuF,MAAMq4F,EAAOhzF,GAEnC4C,CACT,CACA,SAAS2wF,GAAsBpmD,EAAMx0C,EAAM9C,EAAO2lE,GAChD,MAAME,EAASvuB,EAAKuuB,OACd0tB,EAASj8C,EAAKi8C,OACd2E,EAASryB,EAAOsyB,YAChBC,EAAcvyB,IAAW0tB,EACzB9N,EAAS,GACf,IAAIt7E,EAAGi1D,EAAMryD,EAAMowF,EACnB,IAAKhzF,EAAInK,EAAOo/D,EAAOp/D,EAAQ2lE,EAAOx7D,EAAIi1D,IAAQj1D,EAChDgzF,EAAQr6F,EAAKqH,GACb4C,EAAO,CAAC,EACRA,EAAK84D,EAAOjiD,MAAQw0E,GAAevyB,EAAO/gE,MAAMozF,EAAO/tF,GAAIA,GAC3Ds7E,EAAOtmF,KAAK+9F,GAAWC,EAAOpwF,EAAMwmF,EAAQppF,IAE9C,OAAOs7E,CACT,CACA,SAASkY,GAAWC,GAClB,OAAOA,QAA8B91F,IAApB81F,EAAON,eAA4Cx1F,IAAlB81F,EAAOL,MAC3D,CA2BA,SAASM,GAAiB/3F,EAAY2G,EAASkmF,EAAOl1E,GACpD,IAAI0R,EAAO1iB,EAAQqxF,cACnB,MAAM/M,EAAM,CAAC,EACb,IAAK5hE,EAEH,YADArpB,EAAWg4F,cAAgB/M,GAG7B,IAAa,IAAT5hE,EAEF,YADArpB,EAAWg4F,cAAgB,CAAC3oF,KAAK,EAAMvD,OAAO,EAAMwD,QAAQ,EAAM1D,MAAM,IAG1E,MAAM,MAAC1R,EAAK,IAAEqZ,EAAG,QAAEu5C,EAAO,IAAEz9C,EAAG,OAAEC,GA/BnC,SAAqBtP,GACnB,IAAI8sD,EAAS5yD,EAAOqZ,EAAKlE,EAAKC,EAiB9B,OAhBItP,EAAWi4F,YACbnrC,EAAU9sD,EAAWwpB,KAAOxpB,EAAWuP,EACvCrV,EAAQ,OACRqZ,EAAM,UAENu5C,EAAU9sD,EAAWwpB,KAAOxpB,EAAWwP,EACvCtV,EAAQ,SACRqZ,EAAM,OAEJu5C,GACFz9C,EAAM,MACNC,EAAS,UAETD,EAAM,QACNC,EAAS,OAEJ,CAACpV,QAAOqZ,MAAKu5C,UAASz9C,MAAKC,SACpC,CAY6C4oF,CAAYl4F,GAC1C,WAATqpB,GAAqBwjE,IACvB7sF,EAAWm4F,oBAAqB,GAC3BtL,EAAMuB,MAAQ,KAAOz2E,EACxB0R,EAAOha,GACGw9E,EAAMwB,SAAW,KAAO12E,EAClC0R,EAAO/Z,GAEP27E,EAAImN,GAAU9oF,EAAQpV,EAAOqZ,EAAKu5C,KAAY,EAC9CzjC,EAAOha,IAGX47E,EAAImN,GAAU/uE,EAAMnvB,EAAOqZ,EAAKu5C,KAAY,EAC5C9sD,EAAWg4F,cAAgB/M,CAC7B,CACA,SAASmN,GAAU/uE,EAAM/mB,EAAGqe,EAAGmsC,GAS/B,IAAcurC,EAAM7+B,EAAI8+B,EAFtB,OANIxrC,GAQkBwrC,EAPC33E,EACrB0I,EAAOkvE,GADPlvE,GAOUgvE,EAPEhvE,MAOImwC,EAPEl3D,GAQCg2F,EAAKD,IAASC,EAAK9+B,EAAK6+B,EAPrB13E,EAAGre,IAEzB+mB,EAAOkvE,GAASlvE,EAAM/mB,EAAGqe,GAEpB0I,CACT,CAIA,SAASkvE,GAASr0E,EAAGhqB,EAAOqZ,GAC1B,MAAa,UAAN2Q,EAAgBhqB,EAAc,QAANgqB,EAAc3Q,EAAM2Q,CACrD,CACA,SAASs0E,GAAiBx4F,GAAY,cAACy4F,GAAgBzoB,GACrDhwE,EAAWy4F,cAAkC,SAAlBA,EACb,IAAVzoB,EAAc,IAAO,EACrByoB,CACN,CAlMA5J,GAAkBtb,SAAW,CAAC,EAC9Bsb,GAAkBpwF,UAAU4yF,mBAAqB,KACjDxC,GAAkBpwF,UAAU41F,gBAAkB,KAiM9C,MAAMqE,WAAsB7J,GAC1BqD,mBAAmB1gD,EAAMx0C,EAAM9C,EAAO2lE,GACpC,OAAO+3B,GAAsBpmD,EAAMx0C,EAAM9C,EAAO2lE,EAClD,CACAmyB,eAAexgD,EAAMx0C,EAAM9C,EAAO2lE,GAChC,OAAO+3B,GAAsBpmD,EAAMx0C,EAAM9C,EAAO2lE,EAClD,CACAoyB,gBAAgBzgD,EAAMx0C,EAAM9C,EAAO2lE,GACjC,MAAM,OAACE,EAAM,OAAE0tB,GAAUj8C,GACnB,SAAC+gD,EAAW,IAAG,SAAEC,EAAW,KAAOr5F,KAAKumF,SACxCiZ,EAA2B,MAAhB54B,EAAOjiD,KAAey0E,EAAWC,EAC5CoG,EAA2B,MAAhBnL,EAAO3vE,KAAey0E,EAAWC,EAC5C7S,EAAS,GACf,IAAIt7E,EAAGi1D,EAAMryD,EAAMxB,EACnB,IAAKpB,EAAInK,EAAOo/D,EAAOp/D,EAAQ2lE,EAAOx7D,EAAIi1D,IAAQj1D,EAChDoB,EAAMzI,EAAKqH,GACX4C,EAAO,CAAC,EACRA,EAAK84D,EAAOjiD,MAAQiiD,EAAO/gE,MAAMs7D,GAAiB70D,EAAKkzF,GAAWt0F,GAClEs7E,EAAOtmF,KAAK+9F,GAAW98B,GAAiB70D,EAAKmzF,GAAW3xF,EAAMwmF,EAAQppF,IAExE,OAAOs7E,CACT,CACAgT,sBAAsB92B,EAAOoZ,EAAO0K,EAAQkN,GAC1C37D,MAAMyhE,sBAAsB92B,EAAOoZ,EAAO0K,EAAQkN,GAClD,MAAMiL,EAASnY,EAAO+X,QAClBI,GAAU7iB,IAAU97E,KAAK00F,YAAYJ,SACvC5xB,EAAMngE,IAAMF,KAAKE,IAAImgE,EAAMngE,IAAKo8F,EAAOp8F,KACvCmgE,EAAMptD,IAAMjT,KAAKiT,IAAIotD,EAAMptD,IAAKqpF,EAAOrpF,KAE3C,CACA6kF,iBACE,OAAO,CACT,CACAC,iBAAiB57E,GACf,MAAM65B,EAAOr4C,KAAK00F,aACZ,OAAC9tB,EAAM,OAAE0tB,GAAUj8C,EACnBmuC,EAASxmF,KAAKs5F,UAAU96E,GACxBmgF,EAASnY,EAAO+X,QAChBx3F,EAAQ23F,GAAWC,GACrB,IAAMA,EAAO59F,MAAQ,KAAO49F,EAAOvkF,IAAM,IACzC,GAAKk6E,EAAOgG,iBAAiB9T,EAAO8N,EAAO3vE,OAC/C,MAAO,CACL01E,MAAO,GAAKzzB,EAAO0zB,iBAAiB9T,EAAO5f,EAAOjiD,OAClD5d,QAEJ,CACAosD,aACEnzD,KAAKo2F,qBAAsB,EAC3Br+D,MAAMo7B,aACOnzD,KAAK00F,YACbhB,MAAQ1zF,KAAK42F,aAAalD,KACjC,CACAv1E,OAAO6iC,GACL,MAAM3I,EAAOr4C,KAAK00F,YAClB10F,KAAK68F,eAAexkD,EAAKx0C,KAAM,EAAGw0C,EAAKx0C,KAAKT,OAAQ49C,EACtD,CACA67C,eAAe6C,EAAM3+F,EAAO2lE,EAAO1lB,GACjC,MAAMziC,EAAiB,UAATyiC,GACR,MAACxiC,EAAOk2E,aAAa,OAACJ,IAAWt0F,KACjCqwB,EAAOikE,EAAOqL,eACdb,EAAaxK,EAAOsL,eACpBC,EAAQ7/F,KAAK8/F,aACb,cAACpE,EAAa,eAAED,GAAkBz7F,KAAK47F,kBAAkB76F,EAAOigD,GACtE,IAAK,IAAI91C,EAAInK,EAAOmK,EAAInK,EAAQ2lE,EAAOx7D,IAAK,CAC1C,MAAMs7E,EAASxmF,KAAKs5F,UAAUpuF,GACxB60F,EAAUxhF,GAAS6gD,GAAconB,EAAO8N,EAAO3vE,OAAS,CAAC0L,OAAM1mB,KAAM0mB,GAAQrwB,KAAKggG,yBAAyB90F,GAC3G+0F,EAAUjgG,KAAKkgG,yBAAyBh1F,EAAG20F,GAC3CnM,GAASlN,EAAOmO,SAAW,CAAC,GAAGL,EAAO3vE,MACtC9d,EAAa,CACjBi4F,aACAzuE,KAAM0vE,EAAQ1vE,KACd2uE,oBAAqBtL,GAASgL,GAAWlY,EAAO+X,UAAa//E,IAAUk1E,EAAMuB,MAAQz2E,IAAUk1E,EAAMwB,QACrG9+E,EAAG0oF,EAAaiB,EAAQp2F,KAAOs2F,EAAQx0E,OACvCpV,EAAGyoF,EAAamB,EAAQx0E,OAASs0E,EAAQp2F,KACzCsM,OAAQ6oF,EAAamB,EAAQhiD,KAAO57C,KAAK+V,IAAI2nF,EAAQ9hD,MACrDjoC,MAAO8oF,EAAaz8F,KAAK+V,IAAI2nF,EAAQ9hD,MAAQgiD,EAAQhiD,MAEnDw9C,IACF50F,EAAW2G,QAAUkuF,GAAiB17F,KAAK46F,0BAA0B1vF,EAAGw0F,EAAKx0F,GAAG6C,OAAS,SAAWizC,IAEtG,MAAMxzC,EAAU3G,EAAW2G,SAAWkyF,EAAKx0F,GAAGsC,QAC9CoxF,GAAiB/3F,EAAY2G,EAASkmF,EAAOl1E,GAC7C6gF,GAAiBx4F,EAAY2G,EAASqyF,EAAMhpB,OAC5C72E,KAAKg8F,cAAc0D,EAAKx0F,GAAIA,EAAGrE,EAAYm6C,EAC7C,CACF,CACAm/C,WAAW76B,EAAMu1B,GACf,MAAM,OAACj0B,GAAU5mE,KAAK00F,YAChBnB,EAAW3sB,EAAO4tB,wBAAwBx0F,KAAK81F,OAClDnuF,QAAO0wC,GAAQA,EAAK8R,WAAW38C,QAAQ4yF,UACpCrM,EAAUntB,EAAOp5D,QAAQumF,QACzBE,EAAS,GACToM,EAAYhoD,IAChB,MAAMmuC,EAASnuC,EAAK8R,WAAWmvC,UAAUuB,GACnCxhB,EAAMmN,GAAUA,EAAOnuC,EAAKi8C,OAAO3vE,MACzC,GAAIy6C,GAAcia,IAAQrW,MAAMqW,GAC9B,OAAO,CACT,EAEF,IAAK,MAAMhhC,KAAQk7C,EACjB,SAAkB1qF,IAAdgyF,IAA2BwF,EAAShoD,QAGxB,IAAZ07C,IAAqD,IAAhCE,EAAO5wF,QAAQg1C,EAAKq7C,aAClC7qF,IAAZkrF,QAAwClrF,IAAfwvC,EAAKq7C,QAC3BO,EAAO/zF,KAAKm4C,EAAKq7C,OAEfr7C,EAAK75B,QAAU8mD,GACjB,MAMJ,OAHK2uB,EAAO7wF,QACV6wF,EAAO/zF,UAAK2I,GAEPorF,CACT,CACAqM,eAAe9hF,GACb,OAAOxe,KAAKmgG,gBAAWt3F,EAAW2V,GAAOpb,MAC3C,CACAm9F,eAAejgC,EAAc72D,EAAMoxF,GACjC,MAAM5G,EAASj0F,KAAKmgG,WAAW7/B,EAAcu6B,GACvCr8E,OAAkB3V,IAATY,EACXwqF,EAAO5wF,QAAQoG,IACd,EACL,OAAmB,IAAX+U,EACJy1E,EAAO7wF,OAAS,EAChBob,CACN,CACAshF,YACE,MAAMpf,EAAO1gF,KAAKwN,QACZ6qC,EAAOr4C,KAAK00F,YACZ9tB,EAASvuB,EAAKuuB,OACd45B,EAAS,GACf,IAAIt1F,EAAGi1D,EACP,IAAKj1D,EAAI,EAAGi1D,EAAO9nB,EAAKx0C,KAAKT,OAAQ8H,EAAIi1D,IAAQj1D,EAC/Cs1F,EAAOtgG,KAAK0mE,EAAOK,iBAAiBjnE,KAAKs5F,UAAUpuF,GAAG07D,EAAOjiD,MAAOzZ,IAEtE,MAAMu1F,EAAe/f,EAAK+f,aAE1B,MAAO,CACLl+F,IAFUk+F,GAAgBlD,GAAqBllD,GAG/CmoD,SACAz/F,MAAO6lE,EAAO85B,YACdtmF,IAAKwsD,EAAO+5B,UACZC,WAAY5gG,KAAKsgG,iBACjBxkB,MAAOlV,EACPw5B,QAAS1f,EAAK0f,QACdvpB,MAAO4pB,EAAe,EAAI/f,EAAKmgB,mBAAqBngB,EAAKogB,cAE7D,CACAd,yBAAyBxhF,GACvB,MAAOk2E,aAAa,OAACJ,EAAM,SAAEmC,GAAWjpF,SAAU6iB,KAAM0wE,EAAS,aAAEC,IAAiBhhG,KAC9EihG,EAAaF,GAAa,EAC1Bva,EAASxmF,KAAKs5F,UAAU96E,GACxBmgF,EAASnY,EAAO+X,QAChB2C,EAAWxC,GAAWC,GAC5B,IAGIh1F,EAAMs0C,EAHNl3C,EAAQy/E,EAAO8N,EAAO3vE,MACtB5jB,EAAQ,EACRqC,EAASqzF,EAAWz2F,KAAKyzF,WAAWa,EAAQ9N,EAAQiQ,GAAY1vF,EAEhE3D,IAAW2D,IACbhG,EAAQqC,EAAS2D,EACjB3D,EAAS2D,GAEPm6F,IACFn6F,EAAQ43F,EAAON,SACfj7F,EAASu7F,EAAOL,OAASK,EAAON,SAClB,IAAVt3F,GAAey7D,GAAKz7D,KAAWy7D,GAAKm8B,EAAOL,UAC7Cv9F,EAAQ,GAEVA,GAASgG,GAEX,MAAMo3F,EAAc/+B,GAAc2hC,IAAeG,EAAuBngG,EAAZggG,EAC5D,IAAI1wE,EAAOikE,EAAOrtB,iBAAiBk3B,GAOnC,GALEx0F,EADE3J,KAAK06E,MAAMymB,kBAAkB3iF,GACxB81E,EAAOrtB,iBAAiBlmE,EAAQqC,GAEhCitB,EAET4tB,EAAOt0C,EAAO0mB,EACVhuB,KAAK+V,IAAI6lC,GAAQ+iD,EAAc,CACjC/iD,EA7PN,SAAiBA,EAAMq2C,EAAQ2M,GAC7B,OAAa,IAAThjD,EACKukB,GAAKvkB,IAENq2C,EAAOsL,eAAiB,GAAK,IAAMtL,EAAO/xF,KAAO0+F,EAAa,GAAK,EAC7E,CAwPaG,CAAQnjD,EAAMq2C,EAAQ2M,GAAcD,EACvCj6F,IAAUk6F,IACZ5wE,GAAQ4tB,EAAO,GAEjB,MAAMojD,EAAa/M,EAAOgN,mBAAmB,GACvCC,EAAWjN,EAAOgN,mBAAmB,GACrC/+F,EAAMF,KAAKE,IAAI8+F,EAAYE,GAC3BjsF,EAAMjT,KAAKiT,IAAI+rF,EAAYE,GACjClxE,EAAOhuB,KAAKiT,IAAIjT,KAAKE,IAAI8tB,EAAM/a,GAAM/S,GACrCoH,EAAO0mB,EAAO4tB,CAChB,CACA,GAAI5tB,IAASikE,EAAOrtB,iBAAiBg6B,GAAa,CAChD,MAAMO,EAAWh/B,GAAKvkB,GAAQq2C,EAAOmN,qBAAqBR,GAAc,EACxE5wE,GAAQmxE,EACRvjD,GAAQujD,CACV,CACA,MAAO,CACLvjD,OACA5tB,OACA1mB,OACA8hB,OAAQ9hB,EAAOs0C,EAAO,EAE1B,CACAiiD,yBAAyB1hF,EAAOqhF,GAC9B,MAAM/jB,EAAQ+jB,EAAM/jB,MACdtuE,EAAUxN,KAAKwN,QACf6yF,EAAW7yF,EAAQ6yF,SACnBqB,EAAkBjiC,GAAejyD,EAAQk0F,gBAAiBC,KAChE,IAAIl2E,EAAQwyB,EACZ,GAAI4hD,EAAMO,QAAS,CACjB,MAAMQ,EAAaP,EAAWrgG,KAAKsgG,eAAe9hF,GAASqhF,EAAMe,WAC3Dl+B,EAAiC,SAAzBl1D,EAAQizF,aA/V5B,SAAmCjiF,EAAOqhF,EAAOryF,EAASozF,GACxD,MAAMJ,EAASX,EAAMW,OACf5C,EAAO4C,EAAOhiF,GACpB,IAAI5K,EAAO4K,EAAQ,EAAIgiF,EAAOhiF,EAAQ,GAAK,KACvC3L,EAAO2L,EAAQgiF,EAAOp9F,OAAS,EAAIo9F,EAAOhiF,EAAQ,GAAK,KAC3D,MAAMojF,EAAUp0F,EAAQqzF,mBACX,OAATjtF,IACFA,EAAOgqF,GAAiB,OAAT/qF,EAAgBgtF,EAAMzlF,IAAMylF,EAAM9+F,MAAQ8R,EAAO+qF,IAErD,OAAT/qF,IACFA,EAAO+qF,EAAOA,EAAOhqF,GAEvB,MAAM7S,EAAQ68F,GAAQA,EAAOv7F,KAAKE,IAAIqR,EAAMf,IAAS,EAAI+uF,EAEzD,MAAO,CACLC,MAFWx/F,KAAK+V,IAAIvF,EAAOe,GAAQ,EAAIguF,EAEzBhB,EACd/pB,MAAOrpE,EAAQszF,cACf//F,QAEJ,CA6UU+gG,CAA0BtjF,EAAOqhF,EAAOryF,EAASozF,GAhX3D,SAAkCpiF,EAAOqhF,EAAOryF,EAASozF,GACvD,MAAMmB,EAAYv0F,EAAQizF,aAC1B,IAAIxiD,EAAM44B,EAQV,OAPIzX,GAAc2iC,IAChB9jD,EAAO4hD,EAAMt9F,IAAMiL,EAAQqzF,mBAC3BhqB,EAAQrpE,EAAQszF,gBAEhB7iD,EAAO8jD,EAAYnB,EACnB/pB,EAAQ,GAEH,CACLgrB,MAAO5jD,EAAO2iD,EACd/pB,QACA91E,MAAO8+F,EAAMW,OAAOhiF,GAAUy/B,EAAO,EAEzC,CAkWU+jD,CAAyBxjF,EAAOqhF,EAAOryF,EAASozF,GAC9CqB,EAAajiG,KAAKugG,eAAevgG,KAAKwe,MAAOxe,KAAK00F,YAAYhB,MAAO2M,EAAW7hF,OAAQ3V,GAC9F4iB,EAASi3C,EAAM3hE,MAAS2hE,EAAMm/B,MAAQI,EAAev/B,EAAMm/B,MAAQ,EACnE5jD,EAAO57C,KAAKE,IAAIm/F,EAAiBh/B,EAAMm/B,MAAQn/B,EAAMmU,MACvD,MACEprD,EAASqwD,EAAM7U,iBAAiBjnE,KAAKs5F,UAAU96E,GAAOs9D,EAAMn3D,MAAOnG,GACnEy/B,EAAO57C,KAAKE,IAAIm/F,EAAiB7B,EAAMt9F,IAAMs9F,EAAMhpB,OAErD,MAAO,CACLxmD,KAAM5E,EAASwyB,EAAO,EACtBt0C,KAAM8hB,EAASwyB,EAAO,EACtBxyB,SACAwyB,OAEJ,CACA8xC,OACE,MAAM13C,EAAOr4C,KAAK00F,YACZJ,EAASj8C,EAAKi8C,OACdh2E,EAAQ+5B,EAAKx0C,KACbs8D,EAAO7hD,EAAMlb,OACnB,IAAI8H,EAAI,EACR,KAAOA,EAAIi1D,IAAQj1D,EACsB,OAAnClL,KAAKs5F,UAAUpuF,GAAGopF,EAAO3vE,OAC3BrG,EAAMpT,GAAG6kF,KAAK/vF,KAAK21F,KAGzB,EAEF4J,GAAcvxF,GAAK,MACnBuxF,GAAcnlB,SAAW,CACvB8d,oBAAoB,EACpBgD,gBAAiB,MACjB2F,mBAAoB,GACpBC,cAAe,GACfV,SAAS,EACThO,WAAY,CACVD,QAAS,CACPvsF,KAAM,SACNiB,WAAY,CAAC,IAAK,IAAK,OAAQ,QAAS,aAI9C04F,GAActlB,UAAY,CACxB8B,OAAQ,CACNmmB,QAAS,CACPt8F,KAAM,WACN6e,QAAQ,EACR09E,KAAM,CACJ19E,QAAQ,IAGZ29E,QAAS,CACPx8F,KAAM,SACNy8F,aAAa,KAKnB,MAAMC,WAAyB5M,GAC7BviC,aACEnzD,KAAKo2F,qBAAsB,EAC3Br+D,MAAMo7B,YACR,CACA4lC,mBAAmB1gD,EAAMx0C,EAAM9C,EAAO2lE,GACpC,MAAM8f,EAASzuD,MAAMghE,mBAAmB1gD,EAAMx0C,EAAM9C,EAAO2lE,GAC3D,IAAK,IAAIx7D,EAAI,EAAGA,EAAIs7E,EAAOpjF,OAAQ8H,IACjCs7E,EAAOt7E,GAAGqzF,QAAUv+F,KAAK46F,0BAA0B1vF,EAAInK,GAAO49E,OAEhE,OAAO6H,CACT,CACAqS,eAAexgD,EAAMx0C,EAAM9C,EAAO2lE,GAChC,MAAM8f,EAASzuD,MAAM8gE,eAAexgD,EAAMx0C,EAAM9C,EAAO2lE,GACvD,IAAK,IAAIx7D,EAAI,EAAGA,EAAIs7E,EAAOpjF,OAAQ8H,IAAK,CACtC,MAAM4C,EAAOjK,EAAK9C,EAAQmK,GAC1Bs7E,EAAOt7E,GAAGqzF,QAAU9+B,GAAe3xD,EAAK,GAAI9N,KAAK46F,0BAA0B1vF,EAAInK,GAAO49E,OACxF,CACA,OAAO6H,CACT,CACAsS,gBAAgBzgD,EAAMx0C,EAAM9C,EAAO2lE,GACjC,MAAM8f,EAASzuD,MAAM+gE,gBAAgBzgD,EAAMx0C,EAAM9C,EAAO2lE,GACxD,IAAK,IAAIx7D,EAAI,EAAGA,EAAIs7E,EAAOpjF,OAAQ8H,IAAK,CACtC,MAAM4C,EAAOjK,EAAK9C,EAAQmK,GAC1Bs7E,EAAOt7E,GAAGqzF,QAAU9+B,GAAe3xD,GAAQA,EAAK2nB,IAAM3nB,EAAK2nB,EAAGz1B,KAAK46F,0BAA0B1vF,EAAInK,GAAO49E,OAC1G,CACA,OAAO6H,CACT,CACA2T,iBACE,MAAMt2F,EAAO7D,KAAK00F,YAAY7wF,KAC9B,IAAIyR,EAAM,EACV,IAAK,IAAIpK,EAAIrH,EAAKT,OAAS,EAAG8H,GAAK,IAAKA,EACtCoK,EAAMjT,KAAKiT,IAAIA,EAAKzR,EAAKqH,GAAG+yC,KAAKj+C,KAAK46F,0BAA0B1vF,IAAM,GAExE,OAAOoK,EAAM,GAAKA,CACpB,CACA8kF,iBAAiB57E,GACf,MAAM65B,EAAOr4C,KAAK00F,aACZ,OAACvtB,EAAM,OAAEC,GAAU/uB,EACnBmuC,EAASxmF,KAAKs5F,UAAU96E,GACxBpI,EAAI+wD,EAAOmzB,iBAAiB9T,EAAOpwE,GACnCC,EAAI+wD,EAAOkzB,iBAAiB9T,EAAOnwE,GACnCof,EAAI+wD,EAAO+X,QACjB,MAAO,CACLlE,MAAOhiD,EAAKgiD,MACZtzF,MAAO,IAAMqP,EAAI,KAAOC,GAAKof,EAAI,KAAOA,EAAI,IAAM,IAEtD,CACAtX,OAAO6iC,GACL,MAAMulB,EAASvmE,KAAK00F,YAAY7wF,KAChC7D,KAAK68F,eAAet2B,EAAQ,EAAGA,EAAOnjE,OAAQ49C,EAChD,CACA67C,eAAet2B,EAAQxlE,EAAO2lE,EAAO1lB,GACnC,MAAMziC,EAAiB,UAATyiC,GACR,OAAC4lB,EAAM,OAAE0tB,GAAUt0F,KAAK00F,aACxB,cAACgH,EAAa,eAAED,GAAkBz7F,KAAK47F,kBAAkB76F,EAAOigD,GAChE4zC,EAAQhuB,EAAOjiD,KACfkwE,EAAQP,EAAO3vE,KACrB,IAAK,IAAIzZ,EAAInK,EAAOmK,EAAInK,EAAQ2lE,EAAOx7D,IAAK,CAC1C,MAAMw0E,EAAQnZ,EAAOr7D,GACfs7E,GAAUjoE,GAASve,KAAKs5F,UAAUpuF,GAClCrE,EAAa,CAAC,EACd+hF,EAAS/hF,EAAW+tF,GAASr2E,EAAQqoD,EAAO06B,mBAAmB,IAAO16B,EAAOK,iBAAiBuf,EAAOoO,IACrG/L,EAAShiF,EAAWguF,GAASt2E,EAAQ+1E,EAAOqL,eAAiBrL,EAAOrtB,iBAAiBuf,EAAOqO,IAClGhuF,EAAW8/E,KAAO3jB,MAAM4lB,IAAW5lB,MAAM6lB,GACrC4S,IACF50F,EAAW2G,QAAUkuF,GAAiB17F,KAAK46F,0BAA0B1vF,EAAGw0E,EAAM3xE,OAAS,SAAWizC,GAC9FziC,IACF1X,EAAW2G,QAAQmxE,OAAS,IAGhC3+E,KAAKg8F,cAActc,EAAOx0E,EAAGrE,EAAYm6C,EAC3C,CACF,CACA45C,0BAA0Bp8E,EAAOwiC,GAC/B,MAAMwlC,EAASxmF,KAAKs5F,UAAU96E,GAC9B,IAAIif,EAAS1F,MAAM6iE,0BAA0Bp8E,EAAOwiC,GAChDvjB,EAAOo1D,UACTp1D,EAAS7yB,OAAOiS,OAAO,CAAC,EAAG4gB,EAAQ,CAACo1D,SAAS,KAE/C,MAAMlU,EAASlhD,EAAOkhD,OAKtB,MAJa,WAAT39B,IACFvjB,EAAOkhD,OAAS,GAElBlhD,EAAOkhD,QAAUlf,GAAe+mB,GAAUA,EAAO+X,QAAS5f,GACnDlhD,CACT,EAEF6kE,GAAiBt0F,GAAK,SACtBs0F,GAAiBloB,SAAW,CAC1B8d,oBAAoB,EACpBgD,gBAAiB,QACjB9I,WAAY,CACVD,QAAS,CACPvsF,KAAM,SACNiB,WAAY,CAAC,IAAK,IAAK,cAAe,aAI5Cy7F,GAAiBroB,UAAY,CAC3B8B,OAAQ,CACN3lE,EAAG,CACDxQ,KAAM,UAERyQ,EAAG,CACDzQ,KAAM,WAGVg2E,QAAS,CACP2mB,QAAS,CACP/S,UAAW,CACTgT,MAAK,IACI,OAgCjB,MAAMC,WAA2B/M,GAC/Bh1F,YAAYg6E,EAAOpa,GACjBvoC,MAAM2iD,EAAOpa,GACbtgE,KAAKo2F,qBAAsB,EAC3Bp2F,KAAK0iG,iBAAc75F,EACnB7I,KAAK2iG,iBAAc95F,EACnB7I,KAAKwqF,aAAU3hF,EACf7I,KAAKyqF,aAAU5hF,CACjB,CACA2tF,aAAc,CACd3wF,MAAM9E,EAAO2lE,GACX,MAAM7iE,EAAO7D,KAAK42F,aAAa/yF,KACzBw0C,EAAOr4C,KAAK00F,YAClB,IAAsB,IAAlB10F,KAAKumF,SACPluC,EAAKwuB,QAAUhjE,MACV,CACL,IAKIqH,EAAGi1D,EALHyiC,EAAU13F,IAAOrH,EAAKqH,GAC1B,GAAIm0D,GAASx7D,EAAK9C,IAAS,CACzB,MAAM,IAAC+F,EAAM,SAAW9G,KAAKumF,SAC7Bqc,EAAU13F,IAAOi2D,GAAiBt9D,EAAKqH,GAAIpE,EAC7C,CAEA,IAAKoE,EAAInK,EAAOo/D,EAAOp/D,EAAQ2lE,EAAOx7D,EAAIi1D,IAAQj1D,EAChDmtC,EAAKwuB,QAAQ37D,GAAK03F,EAAO13F,EAE7B,CACF,CACA23F,eACE,OAAO1/B,GAAUnjE,KAAKwN,QAAQkxE,SAAW,GAC3C,CACAokB,oBACE,OAAO3/B,GAAUnjE,KAAKwN,QAAQu1F,cAChC,CACAC,sBACE,IAAIzgG,EAAMw/D,GACNzsD,GAAOysD,GACX,IAAK,IAAI72D,EAAI,EAAGA,EAAIlL,KAAK06E,MAAM72E,KAAK42E,SAASr3E,SAAU8H,EACrD,GAAIlL,KAAK06E,MAAMuoB,iBAAiB/3F,GAAI,CAClC,MAAMi/C,EAAanqD,KAAK06E,MAAMgd,eAAexsF,GAAGi/C,WAC1Cu0B,EAAWv0B,EAAW04C,eACtBE,EAAgB54C,EAAW24C,oBACjCvgG,EAAMF,KAAKE,IAAIA,EAAKm8E,GACpBppE,EAAMjT,KAAKiT,IAAIA,EAAKopE,EAAWqkB,EACjC,CAEF,MAAO,CACLrkB,SAAUn8E,EACVwgG,cAAeztF,EAAM/S,EAEzB,CACA4b,OAAO6iC,GACL,MAAM05B,EAAQ16E,KAAK06E,OACb,UAACggB,GAAahgB,EACdriC,EAAOr4C,KAAK00F,YACZwO,EAAO7qD,EAAKx0C,KACZs/F,EAAUnjG,KAAKojG,oBAAsBpjG,KAAKqjG,aAAaH,GAAQljG,KAAKwN,QAAQ21F,QAC5EG,EAAUjhG,KAAKiT,KAAKjT,KAAKE,IAAIm4F,EAAU1kF,MAAO0kF,EAAUzkF,QAAUktF,GAAW,EAAG,GAChFI,EAASlhG,KAAKE,KDpvDKo9D,ECovDiC2jC,EDnvD3C,iBADGv8F,ECovDmB/G,KAAKwN,QAAQ+1F,SDnvDvBx8F,EAAMszB,SAAS,KAC1CulC,WAAW74D,GAAS,IAClBA,EAAQ44D,GCivD0D,GDpvDnD,IAAC54D,EAAO44D,ECqvDzB,MAAM6jC,EAAcxjG,KAAKyjG,eAAezjG,KAAKwe,QACvC,cAACukF,EAAa,SAAErkB,GAAY1+E,KAAKgjG,uBACjC,OAACU,EAAM,OAAEC,EAAM,QAAEnZ,EAAO,QAAEC,GArFpC,SAA2B/L,EAAUqkB,EAAeQ,GAClD,IAAIG,EAAS,EACTC,EAAS,EACTnZ,EAAU,EACVC,EAAU,EACd,GAAIsY,EAAgBhhC,GAAK,CACvB,MAAM6hC,EAAallB,EACbmlB,EAAWD,EAAab,EACxBe,EAASzhG,KAAK0mE,IAAI66B,GAClBG,EAAS1hG,KAAKylE,IAAI87B,GAClBI,EAAO3hG,KAAK0mE,IAAI86B,GAChBI,EAAO5hG,KAAKylE,IAAI+7B,GAChBK,EAAU,CAAClgC,EAAO76D,EAAGqe,IAAM+8C,GAAcP,EAAO4/B,EAAYC,GAAU,GAAQ,EAAIxhG,KAAKiT,IAAInM,EAAGA,EAAIo6F,EAAQ/7E,EAAGA,EAAI+7E,GACjHY,EAAU,CAACngC,EAAO76D,EAAGqe,IAAM+8C,GAAcP,EAAO4/B,EAAYC,GAAU,IAAS,EAAIxhG,KAAKE,IAAI4G,EAAGA,EAAIo6F,EAAQ/7E,EAAGA,EAAI+7E,GAClHa,EAAOF,EAAQ,EAAGJ,EAAQE,GAC1BK,EAAOH,EAAQ9hC,GAAS2hC,EAAQE,GAChCK,EAAOH,EAAQriC,GAAIgiC,EAAQE,GAC3BO,EAAOJ,EAAQriC,GAAKM,GAAS2hC,EAAQE,GAC3CP,GAAUU,EAAOE,GAAQ,EACzBX,GAAUU,EAAOE,GAAQ,EACzB/Z,IAAY4Z,EAAOE,GAAQ,EAC3B7Z,IAAY4Z,EAAOE,GAAQ,CAC7B,CACA,MAAO,CAACb,SAAQC,SAAQnZ,UAASC,UACnC,CA6D+C+Z,CAAkB9lB,EAAUqkB,EAAeQ,GAChFliB,GAAYqZ,EAAU1kF,MAAQmtF,GAAWO,EACzCe,GAAa/J,EAAUzkF,OAASktF,GAAWQ,EAC3Ce,EAAYriG,KAAKiT,IAAIjT,KAAKE,IAAI8+E,EAAUojB,GAAa,EAAG,GACxD9B,EAAcjjC,GAAY1/D,KAAKwN,QAAQmxE,OAAQ+lB,GAE/CC,GAAgBhC,EADFtgG,KAAKiT,IAAIqtF,EAAcY,EAAQ,IACAvjG,KAAK4kG,gCACxD5kG,KAAKwqF,QAAUA,EAAUmY,EACzB3iG,KAAKyqF,QAAUA,EAAUkY,EACzBtqD,EAAKwsD,MAAQ7kG,KAAK8kG,iBAClB9kG,KAAK2iG,YAAcA,EAAcgC,EAAe3kG,KAAK+kG,qBAAqB/kG,KAAKwe,OAC/Exe,KAAK0iG,YAAcrgG,KAAKiT,IAAItV,KAAK2iG,YAAcgC,EAAenB,EAAa,GAC3ExjG,KAAK68F,eAAeqG,EAAM,EAAGA,EAAK9/F,OAAQ49C,EAC5C,CACAgkD,eAAe95F,EAAGqT,GAChB,MAAMmiE,EAAO1gF,KAAKwN,QACZ6qC,EAAOr4C,KAAK00F,YACZqO,EAAgB/iG,KAAK8iG,oBAC3B,OAAKvkF,GAASmiE,EAAKpG,UAAU2qB,gBAAmBjlG,KAAK06E,MAAMymB,kBAAkBj2F,IAA0B,OAApBmtC,EAAKwuB,QAAQ37D,IAAemtC,EAAKx0C,KAAKqH,GAAGurB,OACnH,EAEFz2B,KAAKklG,uBAAuB7sD,EAAKwuB,QAAQ37D,GAAK63F,EAAgBhhC,GACvE,CACA86B,eAAeqG,EAAMniG,EAAO2lE,EAAO1lB,GACjC,MAAMziC,EAAiB,UAATyiC,EACR05B,EAAQ16E,KAAK06E,MACbggB,EAAYhgB,EAAMggB,UAElByK,EADOzqB,EAAMltE,QACQ8sE,UACrB8qB,GAAW1K,EAAUjoF,KAAOioF,EAAU/nF,OAAS,EAC/C0yF,GAAW3K,EAAUxkF,IAAMwkF,EAAUvkF,QAAU,EAC/CmvF,EAAe/mF,GAAS4mF,EAAcG,aACtC5C,EAAc4C,EAAe,EAAItlG,KAAK0iG,YACtCC,EAAc2C,EAAe,EAAItlG,KAAK2iG,aACtC,cAACjH,EAAa,eAAED,GAAkBz7F,KAAK47F,kBAAkB76F,EAAOigD,GACtE,IACI91C,EADA04F,EAAa5jG,KAAK6iG,eAEtB,IAAK33F,EAAI,EAAGA,EAAInK,IAASmK,EACvB04F,GAAc5jG,KAAKglG,eAAe95F,EAAGqT,GAEvC,IAAKrT,EAAInK,EAAOmK,EAAInK,EAAQ2lE,IAASx7D,EAAG,CACtC,MAAM63F,EAAgB/iG,KAAKglG,eAAe95F,EAAGqT,GACvC0gE,EAAMikB,EAAKh4F,GACXrE,EAAa,CACjBuP,EAAGgvF,EAAUplG,KAAKwqF,QAClBn0E,EAAGgvF,EAAUrlG,KAAKyqF,QAClBmZ,aACAC,SAAUD,EAAab,EACvBA,gBACAJ,cACAD,eAEEjH,IACF50F,EAAW2G,QAAUkuF,GAAiB17F,KAAK46F,0BAA0B1vF,EAAG+zE,EAAIlxE,OAAS,SAAWizC,IAElG4iD,GAAcb,EACd/iG,KAAKg8F,cAAc/c,EAAK/zE,EAAGrE,EAAYm6C,EACzC,CACF,CACA8jD,iBACE,MAAMzsD,EAAOr4C,KAAK00F,YACZ6Q,EAAWltD,EAAKx0C,KACtB,IACIqH,EADA25F,EAAQ,EAEZ,IAAK35F,EAAI,EAAGA,EAAIq6F,EAASniG,OAAQ8H,IAAK,CACpC,MAAMnE,EAAQsxC,EAAKwuB,QAAQ37D,GACb,OAAVnE,GAAmBi8D,MAAMj8D,KAAU/G,KAAK06E,MAAMymB,kBAAkBj2F,IAAOq6F,EAASr6F,GAAGurB,SACrFouE,GAASxiG,KAAK+V,IAAIrR,GAEtB,CACA,OAAO89F,CACT,CACAK,uBAAuBn+F,GACrB,MAAM89F,EAAQ7kG,KAAK00F,YAAYmQ,MAC/B,OAAIA,EAAQ,IAAM7hC,MAAMj8D,GACfg7D,IAAO1/D,KAAK+V,IAAIrR,GAAS89F,GAE3B,CACT,CACAzK,iBAAiB57E,GACf,MAAM65B,EAAOr4C,KAAK00F,YACZha,EAAQ16E,KAAK06E,MACbue,EAASve,EAAM72E,KAAKo1F,QAAU,GAC9BlyF,EAAQmlF,GAAa7zC,EAAKwuB,QAAQroD,GAAQk8D,EAAMltE,QAAQ4+E,QAC9D,MAAO,CACLiO,MAAOpB,EAAOz6E,IAAU,GACxBzX,QAEJ,CACAq8F,kBAAkBF,GAChB,IAAI5tF,EAAM,EACV,MAAMolE,EAAQ16E,KAAK06E,MACnB,IAAIxvE,EAAGi1D,EAAM9nB,EAAM8R,EAAY38C,EAC/B,IAAK01F,EACH,IAAKh4F,EAAI,EAAGi1D,EAAOua,EAAM72E,KAAK42E,SAASr3E,OAAQ8H,EAAIi1D,IAAQj1D,EACzD,GAAIwvE,EAAMuoB,iBAAiB/3F,GAAI,CAC7BmtC,EAAOqiC,EAAMgd,eAAexsF,GAC5Bg4F,EAAO7qD,EAAKx0C,KACZsmD,EAAa9R,EAAK8R,WAClB,KACF,CAGJ,IAAK+4C,EACH,OAAO,EAET,IAAKh4F,EAAI,EAAGi1D,EAAO+iC,EAAK9/F,OAAQ8H,EAAIi1D,IAAQj1D,EAC1CsC,EAAU28C,EAAWywC,0BAA0B1vF,GACnB,UAAxBsC,EAAQg4F,cACVlwF,EAAMjT,KAAKiT,IAAIA,EAAK9H,EAAQ+xE,aAAe,EAAG/xE,EAAQi4F,kBAAoB,IAG9E,OAAOnwF,CACT,CACA+tF,aAAaH,GACX,IAAI5tF,EAAM,EACV,IAAK,IAAIpK,EAAI,EAAGi1D,EAAO+iC,EAAK9/F,OAAQ8H,EAAIi1D,IAAQj1D,EAAG,CACjD,MAAMsC,EAAUxN,KAAK46F,0BAA0B1vF,GAC/CoK,EAAMjT,KAAKiT,IAAIA,EAAK9H,EAAQiX,QAAU,EAAGjX,EAAQk4F,aAAe,EAClE,CACA,OAAOpwF,CACT,CACAyvF,qBAAqBzkC,GACnB,IAAIqlC,EAAmB,EACvB,IAAK,IAAIz6F,EAAI,EAAGA,EAAIo1D,IAAgBp1D,EAC9BlL,KAAK06E,MAAMuoB,iBAAiB/3F,KAC9By6F,GAAoB3lG,KAAKyjG,eAAev4F,IAG5C,OAAOy6F,CACT,CACAlC,eAAenjC,GACb,OAAOj+D,KAAKiT,IAAImqD,GAAez/D,KAAK06E,MAAM72E,KAAK42E,SAASna,GAAcsY,OAAQ,GAAI,EACpF,CACAgsB,gCACE,OAAO5kG,KAAK+kG,qBAAqB/kG,KAAK06E,MAAM72E,KAAK42E,SAASr3E,SAAW,CACvE,EAEFq/F,GAAmBz0F,GAAK,WACxBy0F,GAAmBroB,SAAW,CAC5B8d,oBAAoB,EACpBgD,gBAAiB,MACjB5gB,UAAW,CACT2qB,eAAe,EACfK,cAAc,GAEhBlT,WAAY,CACVD,QAAS,CACPvsF,KAAM,SACNiB,WAAY,CAAC,gBAAiB,WAAY,cAAe,cAAe,aAAc,IAAK,IAAK,SAAU,cAAe,aAG7H08F,OAAQ,MACR7kB,SAAU,EACVqkB,cAAe,IACfpkB,OAAQ,OACRwkB,QAAS,EACT9nB,UAAW,KAEbonB,GAAmBtwC,YAAc,CAC/BuqB,YAAcjzE,GAAkB,YAATA,EACvBkzE,WAAalzE,GAAkB,YAATA,GAExBg5F,GAAmBxoB,UAAY,CAC7B2rB,YAAa,EACbhqB,QAAS,CACPiqB,OAAQ,CACN5M,OAAQ,CACN6M,eAAeprB,GACb,MAAM72E,EAAO62E,EAAM72E,KACnB,GAAIA,EAAKo1F,OAAO71F,QAAUS,EAAK42E,SAASr3E,OAAQ,CAC9C,MAAO61F,QAAQ,WAACxa,IAAe/D,EAAMmrB,OAAOr4F,QAC5C,OAAO3J,EAAKo1F,OAAOjxF,KAAI,CAACqyF,EAAOnvF,KAC7B,MACMwa,EADOg1D,EAAMgd,eAAe,GACfvtC,WAAWwhC,SAASzgF,GACvC,MAAO,CACL2wB,KAAMw+D,EACNvZ,UAAWp7D,EAAM60D,gBACjB2G,YAAax7D,EAAM80D,YACnB2G,UAAWz7D,EAAM65D,YACjBd,WAAYA,EACZhoD,QAASikD,EAAMymB,kBAAkBj2F,GACjCsT,MAAOtT,EACR,GAEL,CACA,MAAO,EACT,GAEFwwE,QAAQl8B,EAAGumD,EAAYF,GACrBA,EAAOnrB,MAAMsrB,qBAAqBD,EAAWvnF,OAC7CqnF,EAAOnrB,MAAMv8D,QACf,GAEFokF,QAAS,CACP/S,UAAW,CACTgT,MAAK,IACI,GAETnI,MAAM4L,GACJ,IAAIC,EAAYD,EAAY5L,MAC5B,MAAMtzF,EAAQ,KAAOk/F,EAAYE,eAOjC,OANIl8F,GAAQi8F,IACVA,EAAYA,EAAU/iG,QACtB+iG,EAAU,IAAMn/F,GAEhBm/F,GAAan/F,EAERm/F,CACT,MAMR,MAAME,WAAuB1Q,GAC3BviC,aACEnzD,KAAKo2F,qBAAsB,EAC3Bp2F,KAAKq2F,oBAAqB,EAC1Bt+D,MAAMo7B,YACR,CACAh1C,OAAO6iC,GACL,MAAM3I,EAAOr4C,KAAK00F,aACXptC,QAASxpB,EAAMj6B,KAAM0iE,EAAS,GAAE,SAAE8/B,GAAYhuD,EAC/CmuB,EAAqBxmE,KAAK06E,MAAMihB,oBACtC,IAAI,MAAC56F,EAAK,MAAE2lE,GAASJ,GAAiCjuB,EAAMkuB,EAAQC,GACpExmE,KAAKk2F,WAAan1F,EAClBf,KAAKm2F,WAAazvB,EACdQ,GAAoB7uB,KACtBt3C,EAAQ,EACR2lE,EAAQH,EAAOnjE,QAEjB06B,EAAKy0D,OAASvyF,KAAK06E,MACnB58C,EAAKwoE,cAAgBtmG,KAAKwe,MAC1Bsf,EAAKyoE,aAAeF,EAASE,WAC7BzoE,EAAKyoC,OAASA,EACd,MAAM/4D,EAAUxN,KAAK26F,6BAA6B35C,GAC7ChhD,KAAKwN,QAAQwuE,WAChBxuE,EAAQ+xE,YAAc,GAExB/xE,EAAQugF,QAAU/tF,KAAKwN,QAAQugF,QAC/B/tF,KAAKg8F,cAAcl+D,OAAMj1B,EAAW,CAClC29F,UAAWhgC,EACXh5D,WACCwzC,GACHhhD,KAAK68F,eAAet2B,EAAQxlE,EAAO2lE,EAAO1lB,EAC5C,CACA67C,eAAet2B,EAAQxlE,EAAO2lE,EAAO1lB,GACnC,MAAMziC,EAAiB,UAATyiC,GACR,OAAC4lB,EAAM,OAAE0tB,EAAM,SAAEmC,EAAQ,SAAE4P,GAAYrmG,KAAK00F,aAC5C,cAACgH,EAAa,eAAED,GAAkBz7F,KAAK47F,kBAAkB76F,EAAOigD,GAChE4zC,EAAQhuB,EAAOjiD,KACfkwE,EAAQP,EAAO3vE,MACf,SAACijE,EAAQ,QAAEmG,GAAW/tF,KAAKwN,QAC3Bi5F,EAAe1jC,GAAS6kB,GAAYA,EAAWptB,OAAO0H,kBACtDwkC,EAAe1mG,KAAK06E,MAAMihB,qBAAuBp9E,GAAkB,SAATyiC,EAChE,IAAI2lD,EAAa5lG,EAAQ,GAAKf,KAAKs5F,UAAUv4F,EAAQ,GACrD,IAAK,IAAImK,EAAInK,EAAOmK,EAAInK,EAAQ2lE,IAASx7D,EAAG,CAC1C,MAAMw0E,EAAQnZ,EAAOr7D,GACfs7E,EAASxmF,KAAKs5F,UAAUpuF,GACxBrE,EAAa6/F,EAAehnB,EAAQ,CAAC,EACrCknB,EAAWxnC,GAAconB,EAAOqO,IAChCjM,EAAS/hF,EAAW+tF,GAAShuB,EAAOK,iBAAiBuf,EAAOoO,GAAQ1pF,GACpE29E,EAAShiF,EAAWguF,GAASt2E,GAASqoF,EAAWtS,EAAOqL,eAAiBrL,EAAOrtB,iBAAiBwvB,EAAWz2F,KAAKyzF,WAAWa,EAAQ9N,EAAQiQ,GAAYjQ,EAAOqO,GAAQ3pF,GAC7KrE,EAAW8/E,KAAO3jB,MAAM4lB,IAAW5lB,MAAM6lB,IAAW+d,EACpD//F,EAAWvF,KAAO4J,EAAI,GAAM7I,KAAK+V,IAAIouE,EAAOoO,GAAS+R,EAAW/R,IAAW6R,EACvE1Y,IACFlnF,EAAW2/E,OAASA,EACpB3/E,EAAWi0F,IAAMuL,EAASxiG,KAAKqH,IAE7BuwF,IACF50F,EAAW2G,QAAUkuF,GAAiB17F,KAAK46F,0BAA0B1vF,EAAGw0E,EAAM3xE,OAAS,SAAWizC,IAE/F0lD,GACH1mG,KAAKg8F,cAActc,EAAOx0E,EAAGrE,EAAYm6C,GAE3C2lD,EAAangB,CACf,CACF,CACA2T,iBACE,MAAM9hD,EAAOr4C,KAAK00F,YACZptC,EAAUjP,EAAKiP,QACfu/C,EAASv/C,EAAQ95C,SAAW85C,EAAQ95C,QAAQ+xE,aAAe,EAC3D17E,EAAOw0C,EAAKx0C,MAAQ,GAC1B,IAAKA,EAAKT,OACR,OAAOyjG,EAET,MAAM/f,EAAajjF,EAAK,GAAGo6C,KAAKj+C,KAAK46F,0BAA0B,IACzDkM,EAAYjjG,EAAKA,EAAKT,OAAS,GAAG66C,KAAKj+C,KAAK46F,0BAA0B/2F,EAAKT,OAAS,IAC1F,OAAOf,KAAKiT,IAAIuxF,EAAQ/f,EAAYggB,GAAa,CACnD,CACA/W,OACE,MAAM13C,EAAOr4C,KAAK00F,YAClBr8C,EAAKiP,QAAQy/C,oBAAoB/mG,KAAK06E,MAAMggB,UAAWriD,EAAKuuB,OAAOjiD,MACnEoT,MAAMg4D,MACR,EAEFqW,GAAep4F,GAAK,OACpBo4F,GAAehsB,SAAW,CACxB8d,mBAAoB,OACpBgD,gBAAiB,QACjBlf,UAAU,EACV4L,UAAU,GAEZwe,GAAensB,UAAY,CACzB8B,OAAQ,CACNmmB,QAAS,CACPt8F,KAAM,YAERw8F,QAAS,CACPx8F,KAAM,YAKZ,MAAMohG,WAA4BtR,GAChCh1F,YAAYg6E,EAAOpa,GACjBvoC,MAAM2iD,EAAOpa,GACbtgE,KAAK0iG,iBAAc75F,EACnB7I,KAAK2iG,iBAAc95F,CACrB,CACAuxF,iBAAiB57E,GACf,MAAM65B,EAAOr4C,KAAK00F,YACZha,EAAQ16E,KAAK06E,MACbue,EAASve,EAAM72E,KAAKo1F,QAAU,GAC9BlyF,EAAQmlF,GAAa7zC,EAAKwuB,QAAQroD,GAAOiX,EAAGilD,EAAMltE,QAAQ4+E,QAChE,MAAO,CACLiO,MAAOpB,EAAOz6E,IAAU,GACxBzX,QAEJ,CACA+xF,gBAAgBzgD,EAAMx0C,EAAM9C,EAAO2lE,GACjC,OAAO4f,GAA4BzlF,KAAKb,KAAjCsmF,CAAuCjuC,EAAMx0C,EAAM9C,EAAO2lE,EACnE,CACAvoD,OAAO6iC,GACL,MAAMkiD,EAAOljG,KAAK00F,YAAY7wF,KAC9B7D,KAAKinG,gBACLjnG,KAAK68F,eAAeqG,EAAM,EAAGA,EAAK9/F,OAAQ49C,EAC5C,CACA24C,YACE,MAAMthD,EAAOr4C,KAAK00F,YACZhyB,EAAQ,CAACngE,IAAKi4D,OAAO0H,kBAAmB5sD,IAAKklD,OAAOu/B,mBAY1D,OAXA1hD,EAAKx0C,KAAKoI,SAAQ,CAACvC,EAAS8U,KAC1B,MAAMgoE,EAASxmF,KAAKs5F,UAAU96E,GAAOiX,GAChCutC,MAAMwjB,IAAWxmF,KAAK06E,MAAMymB,kBAAkB3iF,KAC7CgoE,EAAS9jB,EAAMngE,MACjBmgE,EAAMngE,IAAMikF,GAEVA,EAAS9jB,EAAMptD,MACjBotD,EAAMptD,IAAMkxE,GAEhB,IAEK9jB,CACT,CACAukC,gBACE,MAAMvsB,EAAQ16E,KAAK06E,MACbggB,EAAYhgB,EAAMggB,UAClBha,EAAOhG,EAAMltE,QACb05F,EAAU7kG,KAAKE,IAAIm4F,EAAU/nF,MAAQ+nF,EAAUjoF,KAAMioF,EAAUvkF,OAASukF,EAAUxkF,KAClFysF,EAActgG,KAAKiT,IAAI4xF,EAAU,EAAG,GAEpCvC,GAAgBhC,EADFtgG,KAAKiT,IAAIorE,EAAKymB,iBAAoBxE,EAAc,IAAQjiB,EAAqB,iBAAI,EAAG,IACrDhG,EAAM0sB,yBACzDpnG,KAAK2iG,YAAcA,EAAegC,EAAe3kG,KAAKwe,MACtDxe,KAAK0iG,YAAc1iG,KAAK2iG,YAAcgC,CACxC,CACA9H,eAAeqG,EAAMniG,EAAO2lE,EAAO1lB,GACjC,MAAMziC,EAAiB,UAATyiC,EACR05B,EAAQ16E,KAAK06E,MAEbyqB,EADOzqB,EAAMltE,QACQ8sE,UACrBwB,EAAQ97E,KAAK00F,YAAY+C,OACzB2N,EAAUtpB,EAAMurB,QAChBhC,EAAUvpB,EAAMwrB,QAChBC,EAAoBzrB,EAAM0rB,cAAc,GAAK,GAAM1lC,GACzD,IACI52D,EADA84D,EAAQujC,EAEZ,MAAME,EAAe,IAAMznG,KAAK0nG,uBAChC,IAAKx8F,EAAI,EAAGA,EAAInK,IAASmK,EACvB84D,GAAShkE,KAAK2nG,cAAcz8F,EAAG81C,EAAMymD,GAEvC,IAAKv8F,EAAInK,EAAOmK,EAAInK,EAAQ2lE,EAAOx7D,IAAK,CACtC,MAAM+zE,EAAMikB,EAAKh4F,GACjB,IAAI04F,EAAa5/B,EACb6/B,EAAW7/B,EAAQhkE,KAAK2nG,cAAcz8F,EAAG81C,EAAMymD,GAC/C9E,EAAcjoB,EAAMymB,kBAAkBj2F,GAAK4wE,EAAM8rB,8BAA8B5nG,KAAKs5F,UAAUpuF,GAAGuqB,GAAK,EAC1GuuC,EAAQ6/B,EACJtlF,IACE4mF,EAAcG,eAChB3C,EAAc,GAEZwC,EAAcF,gBAChBrB,EAAaC,EAAW0D,IAG5B,MAAM1gG,EAAa,CACjBuP,EAAGgvF,EACH/uF,EAAGgvF,EACH3C,YAAa,EACbC,cACAiB,aACAC,WACAr2F,QAASxN,KAAK46F,0BAA0B1vF,EAAG+zE,EAAIlxE,OAAS,SAAWizC,IAErEhhD,KAAKg8F,cAAc/c,EAAK/zE,EAAGrE,EAAYm6C,EACzC,CACF,CACA0mD,uBACE,MAAMrvD,EAAOr4C,KAAK00F,YAClB,IAAIhuB,EAAQ,EAMZ,OALAruB,EAAKx0C,KAAKoI,SAAQ,CAACvC,EAAS8U,MACrBwkD,MAAMhjE,KAAKs5F,UAAU96E,GAAOiX,IAAMz1B,KAAK06E,MAAMymB,kBAAkB3iF,IAClEkoD,GACF,IAEKA,CACT,CACAihC,cAAcnpF,EAAOwiC,EAAMymD,GACzB,OAAOznG,KAAK06E,MAAMymB,kBAAkB3iF,GAChC2kD,GAAUnjE,KAAK46F,0BAA0Bp8E,EAAOwiC,GAAMgjB,OAASyjC,GAC/D,CACN,EAEFT,GAAoBh5F,GAAK,YACzBg5F,GAAoB5sB,SAAW,CAC7B8gB,gBAAiB,MACjB5gB,UAAW,CACT2qB,eAAe,EACfK,cAAc,GAEhBlT,WAAY,CACVD,QAAS,CACPvsF,KAAM,SACNiB,WAAY,CAAC,IAAK,IAAK,aAAc,WAAY,cAAe,iBAGpEw0E,UAAW,IACXuoB,WAAY,GAEdoD,GAAoB/sB,UAAY,CAC9B2rB,YAAa,EACbhqB,QAAS,CACPiqB,OAAQ,CACN5M,OAAQ,CACN6M,eAAeprB,GACb,MAAM72E,EAAO62E,EAAM72E,KACnB,GAAIA,EAAKo1F,OAAO71F,QAAUS,EAAK42E,SAASr3E,OAAQ,CAC9C,MAAO61F,QAAQ,WAACxa,IAAe/D,EAAMmrB,OAAOr4F,QAC5C,OAAO3J,EAAKo1F,OAAOjxF,KAAI,CAACqyF,EAAOnvF,KAC7B,MACMwa,EADOg1D,EAAMgd,eAAe,GACfvtC,WAAWwhC,SAASzgF,GACvC,MAAO,CACL2wB,KAAMw+D,EACNvZ,UAAWp7D,EAAM60D,gBACjB2G,YAAax7D,EAAM80D,YACnB2G,UAAWz7D,EAAM65D,YACjBd,WAAYA,EACZhoD,QAASikD,EAAMymB,kBAAkBj2F,GACjCsT,MAAOtT,EACR,GAEL,CACA,MAAO,EACT,GAEFwwE,QAAQl8B,EAAGumD,EAAYF,GACrBA,EAAOnrB,MAAMsrB,qBAAqBD,EAAWvnF,OAC7CqnF,EAAOnrB,MAAMv8D,QACf,GAEFokF,QAAS,CACP/S,UAAW,CACTgT,MAAK,IACI,GAETnI,MAAMpjD,GACGA,EAAQyjC,MAAM72E,KAAKo1F,OAAOhiD,EAAQ4jD,WAAa,KAAO5jD,EAAQkvD,kBAK7EpqB,OAAQ,CACNtmD,EAAG,CACD7vB,KAAM,eACNiiG,WAAY,CACVC,SAAS,GAEXzF,aAAa,EACbF,KAAM,CACJ4F,UAAU,GAEZC,YAAa,CACXF,SAAS,GAEXlE,WAAY,KAKlB,MAAMqE,WAAsBxF,IAE5BwF,GAAcj6F,GAAK,MACnBi6F,GAAc7tB,SAAW,CACvBmpB,OAAQ,EACR7kB,SAAU,EACVqkB,cAAe,IACfpkB,OAAQ,QAGV,MAAMupB,WAAwBxS,GAC5B0E,iBAAiB57E,GACf,MAAM81E,EAASt0F,KAAK00F,YAAYJ,OAC1B9N,EAASxmF,KAAKs5F,UAAU96E,GAC9B,MAAO,CACL67E,MAAO/F,EAAO4E,YAAY16E,GAC1BzX,MAAO,GAAKutF,EAAOgG,iBAAiB9T,EAAO8N,EAAO3vE,OAEtD,CACAm0E,gBAAgBzgD,EAAMx0C,EAAM9C,EAAO2lE,GACjC,OAAO4f,GAA4BzlF,KAAKb,KAAjCsmF,CAAuCjuC,EAAMx0C,EAAM9C,EAAO2lE,EACnE,CACAvoD,OAAO6iC,GACL,MAAM3I,EAAOr4C,KAAK00F,YACZ52D,EAAOua,EAAKiP,QACZif,EAASluB,EAAKx0C,MAAQ,GACtBo1F,EAAS5gD,EAAKuuB,OAAOsyB,YAE3B,GADAp7D,EAAKyoC,OAASA,EACD,WAATvlB,EAAmB,CACrB,MAAMxzC,EAAUxN,KAAK26F,6BAA6B35C,GAC7ChhD,KAAKwN,QAAQwuE,WAChBxuE,EAAQ+xE,YAAc,GAExB,MAAM14E,EAAa,CACjByhB,OAAO,EACP6/E,UAAWlP,EAAO71F,SAAWmjE,EAAOnjE,OACpCoK,WAEFxN,KAAKg8F,cAAcl+D,OAAMj1B,EAAWhC,EAAYm6C,EAClD,CACAhhD,KAAK68F,eAAet2B,EAAQ,EAAGA,EAAOnjE,OAAQ49C,EAChD,CACA67C,eAAet2B,EAAQxlE,EAAO2lE,EAAO1lB,GACnC,MAAM86B,EAAQ97E,KAAK00F,YAAY+C,OACzBl5E,EAAiB,UAATyiC,EACd,IAAK,IAAI91C,EAAInK,EAAOmK,EAAInK,EAAQ2lE,EAAOx7D,IAAK,CAC1C,MAAMw0E,EAAQnZ,EAAOr7D,GACfsC,EAAUxN,KAAK46F,0BAA0B1vF,EAAGw0E,EAAM3xE,OAAS,SAAWizC,GACtEonD,EAAgBtsB,EAAMusB,yBAAyBn9F,EAAGlL,KAAKs5F,UAAUpuF,GAAGuqB,GACpErf,EAAImI,EAAQu9D,EAAMurB,QAAUe,EAAchyF,EAC1CC,EAAIkI,EAAQu9D,EAAMwrB,QAAUc,EAAc/xF,EAC1CxP,EAAa,CACjBuP,IACAC,IACA2tD,MAAOokC,EAAcpkC,MACrB2iB,KAAM3jB,MAAM5sD,IAAM4sD,MAAM3sD,GACxB7I,WAEFxN,KAAKg8F,cAActc,EAAOx0E,EAAGrE,EAAYm6C,EAC3C,CACF,EAEFknD,GAAgBl6F,GAAK,QACrBk6F,GAAgB9tB,SAAW,CACzB8d,mBAAoB,OACpBgD,gBAAiB,QACjB7f,UAAW,IACXW,UAAU,EACVj/D,SAAU,CACR+gB,KAAM,CACJwhD,KAAM,WAIZ4oB,GAAgBjuB,UAAY,CAC1B2rB,YAAa,EACb7pB,OAAQ,CACNtmD,EAAG,CACD7vB,KAAM,kBAKZ,MAAM,GACJlF,cACEV,KAAKoW,OAAIvN,EACT7I,KAAKqW,OAAIxN,EACT7I,KAAK+N,QAAS,EACd/N,KAAKwN,aAAU3E,EACf7I,KAAK8yF,iBAAcjqF,CACrB,CACAy/F,gBAAgBC,GACd,MAAM,EAACnyF,EAAC,EAAEC,GAAKrW,KAAKwoG,SAAS,CAAC,IAAK,KAAMD,GACzC,MAAO,CAACnyF,IAAGC,IACb,CACA43C,WACE,OAAO8U,GAAS/iE,KAAKoW,IAAM2sD,GAAS/iE,KAAKqW,EAC3C,CACAmyF,SAAS37F,EAAO47F,GACd,MAAMnZ,EAAQtvF,KAAK8yF,YACnB,IAAK2V,IAAUnZ,EACb,OAAOtvF,KAET,MAAM03E,EAAM,CAAC,EAIb,OAHA7qE,EAAMZ,SAAQupB,IACZkiD,EAAIliD,GAAQ85D,EAAM95D,IAAS85D,EAAM95D,GAAMznB,SAAWuhF,EAAM95D,GAAMg8D,IAAMxxF,KAAKw1B,EAAK,IAEzEkiD,CACT,EAEF,GAAQ0C,SAAW,CAAC,EACpB,GAAQsuB,mBAAgB7/F,EAExB,MAAM8/F,GAAa,CACjBlrE,OAAO12B,GACEkD,GAAQlD,GAASA,EAAQ,GAAKA,EAEvC6hG,QAAQC,EAAWrqF,EAAOu/E,GACxB,GAAkB,IAAd8K,EACF,MAAO,IAET,MAAMzc,EAASpsF,KAAK06E,MAAMltE,QAAQ4+E,OAClC,IAAI0c,EACAngB,EAAQkgB,EACZ,GAAI9K,EAAM36F,OAAS,EAAG,CACpB,MAAM2lG,EAAU1mG,KAAKiT,IAAIjT,KAAK+V,IAAI2lF,EAAM,GAAGh3F,OAAQ1E,KAAK+V,IAAI2lF,EAAMA,EAAM36F,OAAS,GAAG2D,SAChFgiG,EAAU,MAAQA,EAAU,QAC9BD,EAAW,cAEbngB,EAmBN,SAAwBkgB,EAAW9K,GACjC,IAAIpV,EAAQoV,EAAM36F,OAAS,EAAI26F,EAAM,GAAGh3F,MAAQg3F,EAAM,GAAGh3F,MAAQg3F,EAAM,GAAGh3F,MAAQg3F,EAAM,GAAGh3F,MAI3F,OAHI1E,KAAK+V,IAAIuwE,IAAU,GAAKkgB,IAAcxmG,KAAK67B,MAAM2qE,KACnDlgB,EAAQkgB,EAAYxmG,KAAK67B,MAAM2qE,IAE1BlgB,CACT,CAzBcqgB,CAAeH,EAAW9K,EACpC,CACA,MAAMkL,EAAW1mC,GAAMlgE,KAAK+V,IAAIuwE,IAC1BugB,EAAa7mG,KAAKiT,IAAIjT,KAAKE,KAAK,EAAIF,KAAK67B,MAAM+qE,GAAW,IAAK,GAC/Dz7F,EAAU,CAACs7F,WAAUK,sBAAuBD,EAAYE,sBAAuBF,GAErF,OADAt+F,OAAOiS,OAAOrP,EAASxN,KAAKwN,QAAQuwF,MAAMtR,QACnCP,GAAa2c,EAAWzc,EAAQ5+E,EACzC,EACA67F,YAAYR,EAAWrqF,EAAOu/E,GAC5B,GAAkB,IAAd8K,EACF,MAAO,IAET,MAAMlX,EAASkX,EAAaxmG,KAAKC,IAAI,GAAID,KAAK67B,MAAMqkC,GAAMsmC,KAC1D,OAAe,IAAXlX,GAA2B,IAAXA,GAA2B,IAAXA,EAC3BgX,GAAWC,QAAQ9jG,KAAK9E,KAAM6oG,EAAWrqF,EAAOu/E,GAElD,EACT,GASF,IAAIuL,GAAQ,CAACX,eA4Ib,SAAShiB,GAAKoX,EAAOwL,EAAUpG,EAASqG,EAAYC,GAClD,MAAM1oG,EAAQ0+D,GAAe+pC,EAAY,GACnCpvF,EAAM/X,KAAKE,IAAIk9D,GAAegqC,EAAU1L,EAAM36F,QAAS26F,EAAM36F,QACnE,IACIA,EAAQ8H,EAAG2H,EADX6zD,EAAQ,EAQZ,IANAy8B,EAAU9gG,KAAKqnG,KAAKvG,GAChBsG,IACFrmG,EAASqmG,EAAWD,EACpBrG,EAAU//F,EAASf,KAAK67B,MAAM96B,EAAS+/F,IAEzCtwF,EAAO9R,EACA8R,EAAO,GACZ6zD,IACA7zD,EAAOxQ,KAAKmT,MAAMzU,EAAQ2lE,EAAQy8B,GAEpC,IAAKj4F,EAAI7I,KAAKiT,IAAIvU,EAAO,GAAImK,EAAIkP,EAAKlP,IAChCA,IAAM2H,IACR02F,EAASrpG,KAAK69F,EAAM7yF,IACpBw7D,IACA7zD,EAAOxQ,KAAKmT,MAAMzU,EAAQ2lE,EAAQy8B,GAGxC,CAhKA/oB,GAASz+D,IAAI,QAAS,CACpBmsF,SAAS,EACTrjF,QAAQ,EACRkvC,SAAS,EACT0uC,aAAa,EACbrU,OAAQ,QACR2b,MAAO,EACPxH,KAAM,CACJ2F,SAAS,EACT3mB,UAAW,EACXyoB,YAAY,EACZC,iBAAiB,EACjBC,WAAW,EACXC,WAAY,EACZC,UAAW,CAACrU,EAAMnoF,IAAYA,EAAQ2zE,UACtC8oB,UAAW,CAACtU,EAAMnoF,IAAYA,EAAQmrE,MACtCl0D,QAAQ,EACRmqE,WAAY,GACZC,iBAAkB,EAClBtP,YAAa,GAEfijB,MAAO,CACLsF,SAAS,EACTjsE,KAAM,GACNrY,QAAS,CACPtN,IAAK,EACLC,OAAQ,IAGZ4nF,MAAO,CACLmM,YAAa,EACbC,YAAa,GACbC,QAAQ,EACRC,gBAAiB,EACjBC,gBAAiB,GACjB9mF,QAAS,EACTskF,SAAS,EACTyC,UAAU,EACVC,gBAAiB,EACjBC,YAAa,EACbp/D,SAAUi+D,GAAMX,WAAWlrE,OAC3BitE,MAAO,CAAC,EACRC,MAAO,CAAC,EACRvkC,MAAO,SACPwkC,WAAY,OACZC,mBAAmB,EACnBC,cAAe,4BACfC,gBAAiB,KAGrB3wB,GAASgC,MAAM,cAAe,QAAS,GAAI,SAC3ChC,GAASgC,MAAM,aAAc,QAAS,GAAI,eAC1ChC,GAASgC,MAAM,aAAc,cAAe,GAAI,eAChDhC,GAASgC,MAAM,cAAe,QAAS,GAAI,SAC3ChC,GAAS8B,SAAS,QAAS,CACzBU,WAAW,EACXF,YAAcjzE,IAAUA,EAAK8wB,WAAW,YAAc9wB,EAAK8wB,WAAW,UAAqB,aAAT9wB,GAAgC,WAATA,EACzGkzE,WAAalzE,GAAkB,eAATA,GAAkC,mBAATA,IAEjD2wE,GAAS8B,SAAS,SAAU,CAC1BU,UAAW,UAEbxC,GAAS8B,SAAS,cAAe,CAC/BQ,YAAcjzE,GAAkB,oBAATA,GAAuC,aAATA,EACrDkzE,WAAalzE,GAAkB,oBAATA,IA+GxB,MACMuhG,GAAiB,CAAClvB,EAAO5rD,EAAMzL,IAAoB,QAATyL,GAA2B,SAATA,EAAkB4rD,EAAM5rD,GAAQzL,EAASq3D,EAAM5rD,GAAQzL,EACzH,SAASwmF,GAAOlhG,EAAKmhG,GACnB,MAAMhwF,EAAS,GACTiwF,EAAYphG,EAAI3G,OAAS8nG,EACzBjgG,EAAMlB,EAAI3G,OAChB,IAAI8H,EAAI,EACR,KAAOA,EAAID,EAAKC,GAAKigG,EACnBjwF,EAAOhb,KAAK6J,EAAI1H,KAAK67B,MAAMhzB,KAE7B,OAAOgQ,CACT,CACA,SAASkwF,GAAoBtvB,EAAOt9D,EAAO6sF,GACzC,MAAMjoG,EAAS04E,EAAMiiB,MAAM36F,OACrBkoG,EAAajpG,KAAKE,IAAIic,EAAOpb,EAAS,GACtCrC,EAAQ+6E,EAAM4kB,YACdtmF,EAAM0hE,EAAM6kB,UACZ19B,EAAU,KAChB,IACIx+C,EADA8mF,EAAYzvB,EAAMkiB,gBAAgBsN,GAEtC,KAAID,IAEA5mF,EADa,IAAXrhB,EACOf,KAAKiT,IAAIi2F,EAAYxqG,EAAOqZ,EAAMmxF,GACxB,IAAV/sF,GACCs9D,EAAMkiB,gBAAgB,GAAKuN,GAAa,GAExCA,EAAYzvB,EAAMkiB,gBAAgBsN,EAAa,IAAM,EAEjEC,GAAaD,EAAa9sF,EAAQiG,GAAUA,EACxC8mF,EAAYxqG,EAAQkiE,GAAWsoC,EAAYnxF,EAAM6oD,IAIvD,OAAOsoC,CACT,CAcA,SAASC,GAAkBh+F,GACzB,OAAOA,EAAQs8F,UAAYt8F,EAAQu8F,WAAa,CAClD,CACA,SAAS0B,GAAej+F,EAASu1E,GAC/B,IAAKv1E,EAAQs6F,QACX,OAAO,EAET,MAAMjtB,EAAOiI,GAAOt1E,EAAQqtE,KAAMkI,GAC5Bv/D,EAAUq/D,GAAUr1E,EAAQgW,SAElC,OADcvZ,GAAQuD,EAAQquB,MAAQruB,EAAQquB,KAAKz4B,OAAS,GAC5Cy3E,EAAKE,WAAcv3D,EAAQvN,MAC7C,CAcA,SAASy1F,GAAWtlC,EAAOr0D,EAAU4hD,GACnC,IAAI+jB,EAAMvR,GAAmBC,GAI7B,OAHKzS,GAAwB,UAAb5hD,IAA2B4hD,GAAwB,UAAb5hD,KACpD2lE,EA5EiB,CAACtR,GAAoB,SAAVA,EAAmB,QAAoB,UAAVA,EAAoB,OAASA,EA4EhFulC,CAAaj0B,IAEdA,CACT,CAmCA,MAAMk0B,WAAc,GAClBlrG,YAAYqwF,GACVh5D,QACA/3B,KAAKgO,GAAK+iF,EAAI/iF,GACdhO,KAAK4F,KAAOmrF,EAAInrF,KAChB5F,KAAKwN,aAAU3E,EACf7I,KAAKk7E,IAAM6V,EAAI7V,IACfl7E,KAAK06E,MAAQqW,EAAIrW,MACjB16E,KAAKkW,SAAMrN,EACX7I,KAAKmW,YAAStN,EACd7I,KAAKyS,UAAO5J,EACZ7I,KAAK2S,WAAQ9J,EACb7I,KAAKgW,WAAQnN,EACb7I,KAAKiW,YAASpN,EACd7I,KAAK6rG,SAAW,CACdp5F,KAAM,EACNE,MAAO,EACPuD,IAAK,EACLC,OAAQ,GAEVnW,KAAKqhF,cAAWx4E,EAChB7I,KAAKykG,eAAY57F,EACjB7I,KAAK8rG,gBAAajjG,EAClB7I,KAAK+rG,mBAAgBljG,EACrB7I,KAAKgsG,iBAAcnjG,EACnB7I,KAAKisG,kBAAepjG,EACpB7I,KAAK2kB,UAAO9b,EACZ7I,KAAKksG,mBAAgBrjG,EACrB7I,KAAKuC,SAAMsG,EACX7I,KAAKsV,SAAMzM,EACX7I,KAAKmsG,YAAStjG,EACd7I,KAAK+9F,MAAQ,GACb/9F,KAAKosG,eAAiB,KACtBpsG,KAAKqsG,YAAc,KACnBrsG,KAAKssG,YAAc,KACnBtsG,KAAK69F,QAAU,EACf79F,KAAKusG,WAAa,EAClBvsG,KAAKwsG,kBAAoB,CAAC,EAC1BxsG,KAAK0gG,iBAAc73F,EACnB7I,KAAK2gG,eAAY93F,EACjB7I,KAAKysG,gBAAiB,EACtBzsG,KAAK0sG,cAAW7jG,EAChB7I,KAAK2sG,cAAW9jG,EAChB7I,KAAK4sG,mBAAgB/jG,EACrB7I,KAAK6sG,mBAAgBhkG,EACrB7I,KAAK8sG,aAAe,EACpB9sG,KAAK+sG,aAAe,EACpB/sG,KAAKw9F,OAAS,CAAC,EACfx9F,KAAKgtG,mBAAoB,EACzBhtG,KAAKs2F,cAAWztF,CAClB,CACAokG,KAAKz/F,GACHxN,KAAKwN,QAAUA,EAAQ23E,WAAWnlF,KAAKi+E,cACvCj+E,KAAK2kB,KAAOnX,EAAQmX,KACpB3kB,KAAK2sG,SAAW3sG,KAAK6F,MAAM2H,EAAQjL,KACnCvC,KAAK0sG,SAAW1sG,KAAK6F,MAAM2H,EAAQ8H,KACnCtV,KAAK6sG,cAAgB7sG,KAAK6F,MAAM2H,EAAQ0/F,cACxCltG,KAAK4sG,cAAgB5sG,KAAK6F,MAAM2H,EAAQ2/F,aAC1C,CACAtnG,MAAMi1F,EAAKt8E,GACT,OAAOs8E,CACT,CACA9zB,gBACE,IAAI,SAAC2lC,EAAQ,SAAED,EAAQ,cAAEG,EAAa,cAAED,GAAiB5sG,KAKzD,OAJA2sG,EAAWntC,GAAgBmtC,EAAUnyC,OAAO0H,mBAC5CwqC,EAAWltC,GAAgBktC,EAAUlyC,OAAOu/B,mBAC5C8S,EAAgBrtC,GAAgBqtC,EAAeryC,OAAO0H,mBACtD0qC,EAAgBptC,GAAgBotC,EAAepyC,OAAOu/B,mBAC/C,CACLx3F,IAAKi9D,GAAgBmtC,EAAUE,GAC/Bv3F,IAAKkqD,GAAgBktC,EAAUE,GAC/B9lC,WAAYxH,GAAeqtC,GAC3B5lC,WAAYzH,GAAeotC,GAE/B,CACA/S,UAAUC,GACR,IACIl3B,GADA,IAACngE,EAAG,IAAE+S,EAAG,WAAEwxD,EAAU,WAAEC,GAAc/mE,KAAKgnE,gBAE9C,GAAIF,GAAcC,EAChB,MAAO,CAACxkE,MAAK+S,OAEf,MAAM83F,EAAQptG,KAAKw0F,0BACnB,IAAK,IAAItpF,EAAI,EAAGi1D,EAAOitC,EAAMhqG,OAAQ8H,EAAIi1D,IAAQj1D,EAC/Cw3D,EAAQ0qC,EAAMliG,GAAGi/C,WAAWwvC,UAAU35F,KAAM45F,GACvC9yB,IACHvkE,EAAMF,KAAKE,IAAIA,EAAKmgE,EAAMngE,MAEvBwkE,IACHzxD,EAAMjT,KAAKiT,IAAIA,EAAKotD,EAAMptD,MAK9B,OAFA/S,EAAMwkE,GAAcxkE,EAAM+S,EAAMA,EAAM/S,EACtC+S,EAAMwxD,GAAcvkE,EAAM+S,EAAM/S,EAAM+S,EAC/B,CACL/S,IAAKi9D,GAAgBj9D,EAAKi9D,GAAgBlqD,EAAK/S,IAC/C+S,IAAKkqD,GAAgBlqD,EAAKkqD,GAAgBj9D,EAAK+S,IAEnD,CACA+3F,aACE,MAAO,CACL56F,KAAMzS,KAAKgsG,aAAe,EAC1B91F,IAAKlW,KAAK8rG,YAAc,EACxBn5F,MAAO3S,KAAKisG,cAAgB,EAC5B91F,OAAQnW,KAAK+rG,eAAiB,EAElC,CACAuB,WACE,OAAOttG,KAAK+9F,KACd,CACA7E,YACE,MAAMr1F,EAAO7D,KAAK06E,MAAM72E,KACxB,OAAO7D,KAAKwN,QAAQyrF,SAAWj5F,KAAK4/F,eAAiB/7F,EAAK0pG,QAAU1pG,EAAK2pG,UAAY3pG,EAAKo1F,QAAU,EACtG,CACAwU,eACEztG,KAAKw9F,OAAS,CAAC,EACfx9F,KAAKgtG,mBAAoB,CAC3B,CACAU,eACEriE,GAASrrC,KAAKwN,QAAQkgG,aAAc,CAAC1tG,MACvC,CACAme,OAAOkjE,EAAUojB,EAAWkJ,GAC1B,MAAM,YAACtL,EAAW,MAAEsH,EAAO5L,MAAO6P,GAAY5tG,KAAKwN,QAC7CqgG,EAAaD,EAASC,WAC5B7tG,KAAK0tG,eACL1tG,KAAKqhF,SAAWA,EAChBrhF,KAAKykG,UAAYA,EACjBzkG,KAAK6rG,SAAW8B,EAAU/iG,OAAOiS,OAAO,CACtCpK,KAAM,EACNE,MAAO,EACPuD,IAAK,EACLC,OAAQ,GACPw3F,GACH3tG,KAAK+9F,MAAQ,KACb/9F,KAAKssG,YAAc,KACnBtsG,KAAKosG,eAAiB,KACtBpsG,KAAKqsG,YAAc,KACnBrsG,KAAK8tG,sBACL9tG,KAAK+tG,gBACL/tG,KAAKguG,qBACLhuG,KAAKusG,WAAavsG,KAAK4/F,eACnB5/F,KAAKgW,MAAQ23F,EAAQl7F,KAAOk7F,EAAQh7F,MACpC3S,KAAKiW,OAAS03F,EAAQz3F,IAAMy3F,EAAQx3F,OACnCnW,KAAKgtG,oBACRhtG,KAAKiuG,mBACLjuG,KAAKkuG,sBACLluG,KAAKmuG,kBACLnuG,KAAKmsG,OD7sCX,SAAmBiC,EAAQzE,EAAOtH,GAChC,MAAM,IAAC9/F,EAAG,IAAE+S,GAAO84F,EACbC,EAAS3uC,GAAYiqC,GAAQr0F,EAAM/S,GAAO,GAC1C+rG,EAAW,CAACvnG,EAAOwB,IAAQ85F,GAAyB,IAAVt7F,EAAc,EAAIA,EAAQwB,EAC1E,MAAO,CACLhG,IAAK+rG,EAAS/rG,GAAMF,KAAK+V,IAAIi2F,IAC7B/4F,IAAKg5F,EAASh5F,EAAK+4F,GAEvB,CCqsCoBE,CAAUvuG,KAAM2pG,EAAOtH,GACrCriG,KAAKgtG,mBAAoB,GAE3BhtG,KAAKwuG,mBACLxuG,KAAK+9F,MAAQ/9F,KAAKyuG,cAAgB,GAClCzuG,KAAK0uG,kBACL,MAAMC,EAAkBd,EAAa7tG,KAAK+9F,MAAM36F,OAChDpD,KAAK4uG,sBAAsBD,EAAkB1D,GAAOjrG,KAAK+9F,MAAO8P,GAAc7tG,KAAK+9F,OACnF/9F,KAAKyyF,YACLzyF,KAAK6uG,+BACL7uG,KAAK8uG,yBACL9uG,KAAK+uG,8BACDnB,EAAS9F,UAAY8F,EAASrD,UAAgC,SAApBqD,EAAS5hG,UACrDhM,KAAK+9F,MA7XX,SAAkBjiB,EAAOiiB,GACvB,MAAM6P,EAAW9xB,EAAMtuE,QAAQuwF,MACzBiR,EAAapB,EAASqB,eAwB9B,SAA2BnzB,GACzB,MAAMr3D,EAASq3D,EAAMtuE,QAAQiX,OACvBslF,EAAajuB,EAAMozB,YACnBC,EAAWrzB,EAAM+hB,QAAUkM,GAActlF,EAAS,EAAI,GACtD2qF,EAAWtzB,EAAMywB,WAAaxC,EACpC,OAAO1nG,KAAK67B,MAAM77B,KAAKE,IAAI4sG,EAAUC,GACvC,CA9B+CC,CAAkBvzB,GACzDwzB,EAAe1B,EAASjD,MAAM1qG,QA6CtC,SAAyB89F,GACvB,MAAM7iF,EAAS,GACf,IAAIhQ,EAAGi1D,EACP,IAAKj1D,EAAI,EAAGi1D,EAAO49B,EAAM36F,OAAQ8H,EAAIi1D,EAAMj1D,IACrC6yF,EAAM7yF,GAAGy/F,OACXzvF,EAAOhb,KAAKgL,GAGhB,OAAOgQ,CACT,CAtDgDq0F,CAAgBxR,GAAS,GACjEyR,EAAkBF,EAAalsG,OAC/BqsG,EAAQH,EAAa,GACrBhqC,EAAOgqC,EAAaE,EAAkB,GACtCjG,EAAW,GACjB,GAAIiG,EAAkBR,EAEpB,OAgDJ,SAAoBjR,EAAOwL,EAAU+F,EAAcnM,GACjD,IAEIj4F,EAFAw7D,EAAQ,EACR7zD,EAAOy8F,EAAa,GAGxB,IADAnM,EAAU9gG,KAAKqnG,KAAKvG,GACfj4F,EAAI,EAAGA,EAAI6yF,EAAM36F,OAAQ8H,IACxBA,IAAM2H,IACR02F,EAASrpG,KAAK69F,EAAM7yF,IACpBw7D,IACA7zD,EAAOy8F,EAAa5oC,EAAQy8B,GAGlC,CA7DIuM,CAAW3R,EAAOwL,EAAU+F,EAAcE,EAAkBR,GACrDzF,EAET,MAAMpG,EAqBR,SAA0BmM,EAAcvR,EAAOiR,GAC7C,MAAMW,EA4DR,SAAwB5lG,GACtB,MAAMkB,EAAMlB,EAAI3G,OAChB,IAAI8H,EAAG0kG,EACP,GAAI3kG,EAAM,EACR,OAAO,EAET,IAAK2kG,EAAO7lG,EAAI,GAAImB,EAAI,EAAGA,EAAID,IAAOC,EACpC,GAAInB,EAAImB,GAAKnB,EAAImB,EAAI,KAAO0kG,EAC1B,OAAO,EAGX,OAAOA,CACT,CAxE2BC,CAAeP,GAClCnM,EAAUpF,EAAM36F,OAAS4rG,EAC/B,IAAKW,EACH,OAAOttG,KAAKiT,IAAI6tF,EAAS,GAE3B,MAAM2M,ED/yER,SAAoB/oG,GAClB,MAAMmU,EAAS,GACT6oD,EAAO1hE,KAAK0hE,KAAKh9D,GACvB,IAAImE,EACJ,IAAKA,EAAI,EAAGA,EAAI64D,EAAM74D,IAChBnE,EAAQmE,GAAM,IAChBgQ,EAAOhb,KAAKgL,GACZgQ,EAAOhb,KAAK6G,EAAQmE,IAOxB,OAJI64D,KAAiB,EAAPA,IACZ7oD,EAAOhb,KAAK6jE,GAEd7oD,EAAOC,MAAK,CAAChS,EAAGqe,IAAMre,EAAIqe,IAAG2oE,MACtBj1E,CACT,CCgyEkB60F,CAAWJ,GAC3B,IAAK,IAAIzkG,EAAI,EAAGi1D,EAAO2vC,EAAQ1sG,OAAS,EAAG8H,EAAIi1D,EAAMj1D,IAAK,CACxD,MAAM0lF,EAASkf,EAAQ5kG,GACvB,GAAI0lF,EAASuS,EACX,OAAOvS,CAEX,CACA,OAAOvuF,KAAKiT,IAAI6tF,EAAS,EAC3B,CAnCkB6M,CAAiBV,EAAcvR,EAAOiR,GACtD,GAAIQ,EAAkB,EAAG,CACvB,IAAItkG,EAAGi1D,EACP,MAAM8vC,EAAkBT,EAAkB,EAAIntG,KAAKmT,OAAO8vD,EAAOmqC,IAAUD,EAAkB,IAAM,KAEnG,IADA7oB,GAAKoX,EAAOwL,EAAUpG,EAAS/jC,GAAc6wC,GAAmB,EAAIR,EAAQQ,EAAiBR,GACxFvkG,EAAI,EAAGi1D,EAAOqvC,EAAkB,EAAGtkG,EAAIi1D,EAAMj1D,IAChDy7E,GAAKoX,EAAOwL,EAAUpG,EAASmM,EAAapkG,GAAIokG,EAAapkG,EAAI,IAGnE,OADAy7E,GAAKoX,EAAOwL,EAAUpG,EAAS79B,EAAMlG,GAAc6wC,GAAmBlS,EAAM36F,OAASkiE,EAAO2qC,GACrF1G,CACT,CAEA,OADA5iB,GAAKoX,EAAOwL,EAAUpG,GACfoG,CACT,CAoWmBgB,CAASvqG,KAAMA,KAAK+9F,OACjC/9F,KAAKssG,YAAc,KACnBtsG,KAAKkwG,iBAEHvB,GACF3uG,KAAK4uG,sBAAsB5uG,KAAK+9F,OAElC/9F,KAAKmwG,YACLnwG,KAAKowG,MACLpwG,KAAKqwG,WACLrwG,KAAKswG,aACP,CACA7d,YACE,IACI4O,EAAYE,EADZgP,EAAgBvwG,KAAKwN,QAAQmmD,QAE7B3zD,KAAK4/F,gBACPyB,EAAarhG,KAAKyS,KAClB8uF,EAAWvhG,KAAK2S,QAEhB0uF,EAAarhG,KAAKkW,IAClBqrF,EAAWvhG,KAAKmW,OAChBo6F,GAAiBA,GAEnBvwG,KAAK0gG,YAAcW,EACnBrhG,KAAK2gG,UAAYY,EACjBvhG,KAAKysG,eAAiB8D,EACtBvwG,KAAK69F,QAAU0D,EAAWF,EAC1BrhG,KAAKwwG,eAAiBxwG,KAAKwN,QAAQijG,aACrC,CACAH,cACEjlE,GAASrrC,KAAKwN,QAAQ8iG,YAAa,CAACtwG,MACtC,CACA8tG,sBACEziE,GAASrrC,KAAKwN,QAAQsgG,oBAAqB,CAAC9tG,MAC9C,CACA+tG,gBACM/tG,KAAK4/F,gBACP5/F,KAAKgW,MAAQhW,KAAKqhF,SAClBrhF,KAAKyS,KAAO,EACZzS,KAAK2S,MAAQ3S,KAAKgW,QAElBhW,KAAKiW,OAASjW,KAAKykG,UACnBzkG,KAAKkW,IAAM,EACXlW,KAAKmW,OAASnW,KAAKiW,QAErBjW,KAAKgsG,YAAc,EACnBhsG,KAAK8rG,WAAa,EAClB9rG,KAAKisG,aAAe,EACpBjsG,KAAK+rG,cAAgB,CACvB,CACAiC,qBACE3iE,GAASrrC,KAAKwN,QAAQwgG,mBAAoB,CAAChuG,MAC7C,CACA0wG,WAAWjnG,GACTzJ,KAAK06E,MAAMi2B,cAAclnG,EAAMzJ,KAAKi+E,cACpC5yC,GAASrrC,KAAKwN,QAAQ/D,GAAO,CAACzJ,MAChC,CACAiuG,mBACEjuG,KAAK0wG,WAAW,mBAClB,CACAxC,sBAAuB,CACvBC,kBACEnuG,KAAK0wG,WAAW,kBAClB,CACAlC,mBACExuG,KAAK0wG,WAAW,mBAClB,CACAjC,aACE,MAAO,EACT,CACAC,kBACE1uG,KAAK0wG,WAAW,kBAClB,CACAE,8BACEvlE,GAASrrC,KAAKwN,QAAQojG,4BAA6B,CAAC5wG,MACtD,CACA6wG,mBAAmB9S,GACjB,MAAM6P,EAAW5tG,KAAKwN,QAAQuwF,MAC9B,IAAI7yF,EAAGi1D,EAAM+vB,EACb,IAAKhlF,EAAI,EAAGi1D,EAAO49B,EAAM36F,OAAQ8H,EAAIi1D,EAAMj1D,IACzCglF,EAAO6N,EAAM7yF,GACbglF,EAAKmK,MAAQhvD,GAASuiE,EAASviE,SAAU,CAAC6kD,EAAKnpF,MAAOmE,EAAG6yF,GAAQ/9F,KAErE,CACA8wG,6BACEzlE,GAASrrC,KAAKwN,QAAQsjG,2BAA4B,CAAC9wG,MACrD,CACA6uG,+BACExjE,GAASrrC,KAAKwN,QAAQqhG,6BAA8B,CAAC7uG,MACvD,CACA8uG,yBACE,MAAMthG,EAAUxN,KAAKwN,QACfogG,EAAWpgG,EAAQuwF,MACnBgT,EAAW/wG,KAAK+9F,MAAM36F,OACtB8mG,EAAc0D,EAAS1D,aAAe,EACtCC,EAAcyD,EAASzD,YAC7B,IACIH,EAAWvF,EAAWuM,EADtB9E,EAAgBhC,EAEpB,IAAKlqG,KAAKixG,eAAiBrD,EAAS9F,SAAWoC,GAAeC,GAAe4G,GAAY,IAAM/wG,KAAK4/F,eAElG,YADA5/F,KAAKksG,cAAgBhC,GAGvB,MAAMgH,EAAalxG,KAAKmxG,iBAClBC,EAAgBF,EAAWG,OAAOr7F,MAClCs7F,EAAiBJ,EAAWK,QAAQt7F,OACpCorE,EAAWxc,GAAY7kE,KAAK06E,MAAM1kE,MAAQo7F,EAAe,EAAGpxG,KAAKqhF,UACvE2oB,EAAYx8F,EAAQiX,OAASzkB,KAAKqhF,SAAW0vB,EAAW1vB,GAAY0vB,EAAW,GAC3EK,EAAgB,EAAIpH,IACtBA,EAAY3oB,GAAY0vB,GAAYvjG,EAAQiX,OAAS,GAAM,IAC3DggF,EAAYzkG,KAAKykG,UAAY+G,GAAkBh+F,EAAQ20F,MACvDyL,EAASpqF,QAAUioF,GAAej+F,EAAQg1F,MAAOxiG,KAAK06E,MAAMltE,QAAQqtE,MACpEm2B,EAAmB3uG,KAAK0hE,KAAKqtC,EAAgBA,EAAgBE,EAAiBA,GAC9EpF,EAAgB7oC,GAAUhhE,KAAKE,IAC7BF,KAAKmvG,KAAK3sC,IAAaqsC,EAAWK,QAAQt7F,OAAS,GAAK+zF,GAAY,EAAG,IACvE3nG,KAAKmvG,KAAK3sC,GAAY4/B,EAAYuM,GAAmB,EAAG,IAAM3uG,KAAKmvG,KAAK3sC,GAAYysC,EAAiBN,GAAmB,EAAG,MAE7H9E,EAAgB7pG,KAAKiT,IAAI40F,EAAa7nG,KAAKE,IAAI4nG,EAAa+B,KAE9DlsG,KAAKksG,cAAgBA,CACvB,CACA6C,8BACE1jE,GAASrrC,KAAKwN,QAAQuhG,4BAA6B,CAAC/uG,MACtD,CACAkwG,gBAAiB,CACjBC,YACE9kE,GAASrrC,KAAKwN,QAAQ2iG,UAAW,CAACnwG,MACpC,CACAowG,MACE,MAAMlJ,EAAU,CACdlxF,MAAO,EACPC,OAAQ,IAEJ,MAACykE,EAAOltE,SAAUuwF,MAAO6P,EAAUpL,MAAOiP,EAAWtP,KAAMuP,IAAa1xG,KACxE8nG,EAAU9nG,KAAKixG,aACfrR,EAAe5/F,KAAK4/F,eAC1B,GAAIkI,EAAS,CACX,MAAM6J,EAAclG,GAAegG,EAAW/2B,EAAMltE,QAAQqtE,MAQ5D,GAPI+kB,GACFsH,EAAQlxF,MAAQhW,KAAKqhF,SACrB6lB,EAAQjxF,OAASu1F,GAAkBkG,GAAYC,IAE/CzK,EAAQjxF,OAASjW,KAAKykG,UACtByC,EAAQlxF,MAAQw1F,GAAkBkG,GAAYC,GAE5C/D,EAAS9F,SAAW9nG,KAAK+9F,MAAM36F,OAAQ,CACzC,MAAM,MAACqsG,EAAK,KAAEnqC,EAAI,OAAE+rC,EAAM,QAAEE,GAAWvxG,KAAKmxG,iBACtCS,EAAiC,EAAnBhE,EAASpqF,QACvBquF,EAAe1uC,GAAUnjE,KAAKksG,eAC9BnjC,EAAM1mE,KAAK0mE,IAAI8oC,GACf/pC,EAAMzlE,KAAKylE,IAAI+pC,GACrB,GAAIjS,EAAc,CAChB,MAAMkS,EAAclE,EAASxD,OAAS,EAAItiC,EAAMupC,EAAOr7F,MAAQ+yD,EAAMwoC,EAAQt7F,OAC7EixF,EAAQjxF,OAAS5T,KAAKE,IAAIvC,KAAKykG,UAAWyC,EAAQjxF,OAAS67F,EAAcF,EAC3E,KAAO,CACL,MAAMG,EAAanE,EAASxD,OAAS,EAAIrhC,EAAMsoC,EAAOr7F,MAAQ8xD,EAAMypC,EAAQt7F,OAC5EixF,EAAQlxF,MAAQ3T,KAAKE,IAAIvC,KAAKqhF,SAAU6lB,EAAQlxF,MAAQ+7F,EAAaH,EACvE,CACA5xG,KAAKgyG,kBAAkBvC,EAAOnqC,EAAMwC,EAAKiB,EAC3C,CACF,CACA/oE,KAAKiyG,iBACDrS,GACF5/F,KAAKgW,MAAQhW,KAAK69F,QAAUnjB,EAAM1kE,MAAQhW,KAAK6rG,SAASp5F,KAAOzS,KAAK6rG,SAASl5F,MAC7E3S,KAAKiW,OAASixF,EAAQjxF,SAEtBjW,KAAKgW,MAAQkxF,EAAQlxF,MACrBhW,KAAKiW,OAASjW,KAAK69F,QAAUnjB,EAAMzkE,OAASjW,KAAK6rG,SAAS31F,IAAMlW,KAAK6rG,SAAS11F,OAElF,CACA67F,kBAAkBvC,EAAOnqC,EAAMwC,EAAKiB,GAClC,MAAOg1B,OAAO,MAAC33B,EAAK,QAAE5iD,GAAQ,SAAEzR,GAAY/R,KAAKwN,QAC3C0kG,EAAmC,IAAvBlyG,KAAKksG,cACjBiG,EAAgC,QAAbpgG,GAAoC,MAAd/R,KAAK2kB,KACpD,GAAI3kB,KAAK4/F,eAAgB,CACvB,MAAMvnF,EAAarY,KAAKg+F,gBAAgB,GAAKh+F,KAAKyS,KAC5C2/F,EAAcpyG,KAAK2S,MAAQ3S,KAAKg+F,gBAAgBh+F,KAAK+9F,MAAM36F,OAAS,GAC1E,IAAI4oG,EAAc,EACdC,EAAe,EACfiG,EACEC,GACFnG,EAAcjjC,EAAM0mC,EAAMz5F,MAC1Bi2F,EAAenkC,EAAMxC,EAAKrvD,SAE1B+1F,EAAclkC,EAAM2nC,EAAMx5F,OAC1Bg2F,EAAeljC,EAAMzD,EAAKtvD,OAET,UAAVowD,EACT6lC,EAAe3mC,EAAKtvD,MACD,QAAVowD,EACT4lC,EAAcyD,EAAMz5F,MACD,UAAVowD,IACT4lC,EAAcyD,EAAMz5F,MAAQ,EAC5Bi2F,EAAe3mC,EAAKtvD,MAAQ,GAE9BhW,KAAKgsG,YAAc3pG,KAAKiT,KAAK02F,EAAc3zF,EAAamL,GAAWxjB,KAAKgW,OAAShW,KAAKgW,MAAQqC,GAAa,GAC3GrY,KAAKisG,aAAe5pG,KAAKiT,KAAK22F,EAAemG,EAAc5uF,GAAWxjB,KAAKgW,OAAShW,KAAKgW,MAAQo8F,GAAc,EACjH,KAAO,CACL,IAAItG,EAAaxmC,EAAKrvD,OAAS,EAC3B81F,EAAgB0D,EAAMx5F,OAAS,EACrB,UAAVmwD,GACF0lC,EAAa,EACbC,EAAgB0D,EAAMx5F,QACH,QAAVmwD,IACT0lC,EAAaxmC,EAAKrvD,OAClB81F,EAAgB,GAElB/rG,KAAK8rG,WAAaA,EAAatoF,EAC/BxjB,KAAK+rG,cAAgBA,EAAgBvoF,CACvC,CACF,CACAyuF,iBACMjyG,KAAK6rG,WACP7rG,KAAK6rG,SAASp5F,KAAOpQ,KAAKiT,IAAItV,KAAKgsG,YAAahsG,KAAK6rG,SAASp5F,MAC9DzS,KAAK6rG,SAAS31F,IAAM7T,KAAKiT,IAAItV,KAAK8rG,WAAY9rG,KAAK6rG,SAAS31F,KAC5DlW,KAAK6rG,SAASl5F,MAAQtQ,KAAKiT,IAAItV,KAAKisG,aAAcjsG,KAAK6rG,SAASl5F,OAChE3S,KAAK6rG,SAAS11F,OAAS9T,KAAKiT,IAAItV,KAAK+rG,cAAe/rG,KAAK6rG,SAAS11F,QAEtE,CACAk6F,WACEhlE,GAASrrC,KAAKwN,QAAQ6iG,SAAU,CAACrwG,MACnC,CACA4/F,eACE,MAAM,KAACj7E,EAAI,SAAE5S,GAAY/R,KAAKwN,QAC9B,MAAoB,QAAbuE,GAAmC,WAAbA,GAAkC,MAAT4S,CACxD,CACA0tF,aACE,OAAOryG,KAAKwN,QAAQ8kG,QACtB,CACA1D,sBAAsB7Q,GAGpB,IAAI7yF,EAAGi1D,EACP,IAHAngE,KAAK4wG,8BACL5wG,KAAK6wG,mBAAmB9S,GAEnB7yF,EAAI,EAAGi1D,EAAO49B,EAAM36F,OAAQ8H,EAAIi1D,EAAMj1D,IACrCk0D,GAAc2+B,EAAM7yF,GAAGmvF,SACzB0D,EAAMx/C,OAAOrzC,EAAG,GAChBi1D,IACAj1D,KAGJlL,KAAK8wG,4BACP,CACAK,iBACE,IAAID,EAAalxG,KAAKssG,YACtB,IAAK4E,EAAY,CACf,MAAMrD,EAAa7tG,KAAKwN,QAAQuwF,MAAM8P,WACtC,IAAI9P,EAAQ/9F,KAAK+9F,MACb8P,EAAa9P,EAAM36F,SACrB26F,EAAQkN,GAAOlN,EAAO8P,IAExB7tG,KAAKssG,YAAc4E,EAAalxG,KAAKuyG,mBAAmBxU,EAAOA,EAAM36F,OACvE,CACA,OAAO8tG,CACT,CACAqB,mBAAmBxU,EAAO36F,GACxB,MAAM,IAAC83E,EAAKsxB,kBAAmBgG,GAAUxyG,KACnCyyG,EAAS,GACTC,EAAU,GAChB,IAEIxnG,EAAG2sE,EAAGyF,EAAM+c,EAAOsY,EAAUC,EAAYrwD,EAAOw4B,EAAY/kE,EAAOC,EAAQ48F,EAF3EC,EAAkB,EAClBC,EAAmB,EAEvB,IAAK7nG,EAAI,EAAGA,EAAI9H,IAAU8H,EAAG,CAO3B,GANAmvF,EAAQ0D,EAAM7yF,GAAGmvF,MACjBsY,EAAW3yG,KAAKgzG,wBAAwB9nG,GACxCgwE,EAAIL,KAAO+3B,EAAaD,EAASh1E,OACjC4kB,EAAQiwD,EAAOI,GAAcJ,EAAOI,IAAe,CAAC/uG,KAAM,CAAC,EAAGi5E,GAAI,IAClE/B,EAAa43B,EAAS53B,WACtB/kE,EAAQC,EAAS,EACZmpD,GAAci7B,IAAWpwF,GAAQowF,IAG/B,GAAIpwF,GAAQowF,GACjB,IAAKxiB,EAAI,EAAGyF,EAAO+c,EAAMj3F,OAAQy0E,EAAIyF,IAAQzF,EAC3Cg7B,EAAcxY,EAAMxiB,GACfzY,GAAcyzC,IAAiB5oG,GAAQ4oG,KAC1C78F,EAAQ6mE,GAAa3B,EAAK34B,EAAM1+C,KAAM0+C,EAAMu6B,GAAI9mE,EAAO68F,GACvD58F,GAAU8kE,QAPd/kE,EAAQ6mE,GAAa3B,EAAK34B,EAAM1+C,KAAM0+C,EAAMu6B,GAAI9mE,EAAOqkF,GACvDpkF,EAAS8kE,EAUX03B,EAAOvyG,KAAK8V,GACZ08F,EAAQxyG,KAAK+V,GACb68F,EAAkBzwG,KAAKiT,IAAIU,EAAO88F,GAClCC,EAAmB1wG,KAAKiT,IAAIW,EAAQ88F,EACtC,EAzgBJ,SAAwBP,EAAQpvG,GAC9B08D,GAAK0yC,GAASjwD,IACZ,MAAMu6B,EAAKv6B,EAAMu6B,GACXY,EAAQZ,EAAG15E,OAAS,EAC1B,IAAI8H,EACJ,GAAIwyE,EAAQt6E,EAAQ,CAClB,IAAK8H,EAAI,EAAGA,EAAIwyE,IAASxyE,SAChBq3C,EAAM1+C,KAAKi5E,EAAG5xE,IAEvB4xE,EAAGv+B,OAAO,EAAGm/B,EACf,IAEJ,CA8fIN,CAAeo1B,EAAQpvG,GACvB,MAAMiuG,EAASoB,EAAOpvG,QAAQyvG,GACxBvB,EAAUmB,EAAQrvG,QAAQ0vG,GAC1BE,EAAWC,IAAQ,CAAEl9F,MAAOy8F,EAAOS,IAAQ,EAAGj9F,OAAQy8F,EAAQQ,IAAQ,IAC5E,MAAO,CACLzD,MAAOwD,EAAQ,GACf3tC,KAAM2tC,EAAQ7vG,EAAS,GACvBiuG,OAAQ4B,EAAQ5B,GAChBE,QAAS0B,EAAQ1B,GACjBkB,SACAC,UAEJ,CACApY,iBAAiBvzF,GACf,OAAOA,CACT,CACAkgE,iBAAiBlgE,EAAOyX,GACtB,OAAOk7E,GACT,CACAyZ,iBAAiBv1B,GAAQ,CACzBogB,gBAAgBx/E,GACd,MAAMu/E,EAAQ/9F,KAAK+9F,MACnB,OAAIv/E,EAAQ,GAAKA,EAAQu/E,EAAM36F,OAAS,EAC/B,KAEFpD,KAAKinE,iBAAiB82B,EAAMv/E,GAAOzX,MAC5C,CACAu6F,mBAAmB8R,GACbpzG,KAAKysG,iBACP2G,EAAU,EAAIA,GAEhB,MAAMx1B,EAAQ59E,KAAK0gG,YAAc0S,EAAUpzG,KAAK69F,QAChD,ODt2FKh5B,GCs2Fc7kE,KAAKwwG,eAAiB7yB,GAAY39E,KAAK06E,MAAOkD,EAAO,GAAKA,GDt2FpD,MAAO,MCu2FlC,CACAy1B,mBAAmBz1B,GACjB,MAAMw1B,GAAWx1B,EAAQ59E,KAAK0gG,aAAe1gG,KAAK69F,QAClD,OAAO79F,KAAKysG,eAAiB,EAAI2G,EAAUA,CAC7C,CACAzT,eACE,OAAO3/F,KAAKinE,iBAAiBjnE,KAAKszG,eACpC,CACAA,eACE,MAAM,IAAC/wG,EAAG,IAAE+S,GAAOtV,KACnB,OAAOuC,EAAM,GAAK+S,EAAM,EAAIA,EAC1B/S,EAAM,GAAK+S,EAAM,EAAI/S,EACrB,CACJ,CACA07E,WAAWz/D,GACT,MAAMu/E,EAAQ/9F,KAAK+9F,OAAS,GAC5B,GAAIv/E,GAAS,GAAKA,EAAQu/E,EAAM36F,OAAQ,CACtC,MAAM8sF,EAAO6N,EAAMv/E,GACnB,OAAO0xE,EAAKoG,WACbpG,EAAKoG,SA/hBV,SAA2B/0E,EAAQ/C,EAAO0xE,GACxC,OAAO9M,GAAc7hE,EAAQ,CAC3B2uE,OACA1xE,QACA5Y,KAAM,QAEV,CAyhBqB2tG,CAAkBvzG,KAAKi+E,aAAcz/D,EAAO0xE,GAC7D,CACA,OAAOlwF,KAAKs2F,WACZt2F,KAAKs2F,SAviBAlT,GAuiB8BpjF,KAAK06E,MAAMuD,aAviBnB,CAC3BnC,MAsiB4D97E,KAriB5D4F,KAAM,UAsiBR,CACAspG,YACE,MAAMsE,EAAcxzG,KAAKwN,QAAQuwF,MAC3B0V,EAAMtwC,GAAUnjE,KAAKksG,eACrBnjC,EAAM1mE,KAAK+V,IAAI/V,KAAK0mE,IAAI0qC,IACxB3rC,EAAMzlE,KAAK+V,IAAI/V,KAAKylE,IAAI2rC,IACxBvC,EAAalxG,KAAKmxG,iBAClB3tF,EAAUgwF,EAAYhJ,iBAAmB,EACzCh/B,EAAI0lC,EAAaA,EAAWG,OAAOr7F,MAAQwN,EAAU,EACrD2mD,EAAI+mC,EAAaA,EAAWK,QAAQt7F,OAASuN,EAAU,EAC7D,OAAOxjB,KAAK4/F,eACRz1B,EAAIpB,EAAMyC,EAAI1D,EAAM0D,EAAIzC,EAAMoB,EAAIrC,EAClCqC,EAAIrC,EAAM0D,EAAIzC,EAAMoB,EAAIpB,EAAMyC,EAAI1D,CACxC,CACAmpC,aACE,MAAMnJ,EAAU9nG,KAAKwN,QAAQs6F,QAC7B,MAAgB,SAAZA,IACOA,EAEJ9nG,KAAKw0F,0BAA0BpxF,OAAS,CACjD,CACAswG,sBAAsBhZ,GACpB,MAAM/1E,EAAO3kB,KAAK2kB,KACZ+1D,EAAQ16E,KAAK06E,MACbltE,EAAUxN,KAAKwN,SACf,KAAC20F,EAAI,SAAEpwF,GAAYvE,EACnBiX,EAAS09E,EAAK19E,OACdm7E,EAAe5/F,KAAK4/F,eAEpB+T,EADQ3zG,KAAK+9F,MACO36F,QAAUqhB,EAAS,EAAI,GAC3CmvF,EAAKpI,GAAkBrJ,GACvB50F,EAAQ,GACRsmG,EAAa1R,EAAKhd,WAAWnlF,KAAKi+E,cAClC61B,EAAYD,EAAWjK,WAAaiK,EAAWt0B,YAAc,EAC7Dw0B,EAAgBD,EAAY,EAC5BE,EAAmB,SAASp2B,GAChC,OAAOD,GAAYjD,EAAOkD,EAAOk2B,EACnC,EACA,IAAIG,EAAa/oG,EAAGqgG,EAAW2I,EAC3BC,EAAKC,EAAKC,EAAKC,EAAKC,EAAIC,EAAIC,EAAIC,EACpC,GAAiB,QAAb3iG,EACFkiG,EAAcD,EAAiBh0G,KAAKmW,QACpCi+F,EAAMp0G,KAAKmW,OAASy9F,EACpBU,EAAML,EAAcF,EACpBS,EAAKR,EAAiBtZ,EAAUxkF,KAAO69F,EACvCW,EAAKha,EAAUvkF,YACV,GAAiB,WAAbpE,EACTkiG,EAAcD,EAAiBh0G,KAAKkW,KACpCs+F,EAAK9Z,EAAUxkF,IACfw+F,EAAKV,EAAiBtZ,EAAUvkF,QAAU49F,EAC1CK,EAAMH,EAAcF,EACpBO,EAAMt0G,KAAKkW,IAAM09F,OACZ,GAAiB,SAAb7hG,EACTkiG,EAAcD,EAAiBh0G,KAAK2S,OACpCwhG,EAAMn0G,KAAK2S,MAAQihG,EACnBS,EAAMJ,EAAcF,EACpBQ,EAAKP,EAAiBtZ,EAAUjoF,MAAQshG,EACxCU,EAAK/Z,EAAU/nF,WACV,GAAiB,UAAbZ,EACTkiG,EAAcD,EAAiBh0G,KAAKyS,MACpC8hG,EAAK7Z,EAAUjoF,KACfgiG,EAAKT,EAAiBtZ,EAAU/nF,OAASohG,EACzCI,EAAMF,EAAcF,EACpBM,EAAMr0G,KAAKyS,KAAOmhG,OACb,GAAa,MAATjvF,EAAc,CACvB,GAAiB,WAAb5S,EACFkiG,EAAcD,GAAkBtZ,EAAUxkF,IAAMwkF,EAAUvkF,QAAU,EAAI,SACnE,GAAIkpD,GAASttD,GAAW,CAC7B,MAAM4iG,EAAiB/pG,OAAOU,KAAKyG,GAAU,GACvChL,EAAQgL,EAAS4iG,GACvBV,EAAcD,EAAiBh0G,KAAK06E,MAAMqB,OAAO44B,GAAgB1tC,iBAAiBlgE,GACpF,CACAytG,EAAK9Z,EAAUxkF,IACfw+F,EAAKha,EAAUvkF,OACfi+F,EAAMH,EAAcF,EACpBO,EAAMF,EAAMR,CACd,MAAO,GAAa,MAATjvF,EAAc,CACvB,GAAiB,WAAb5S,EACFkiG,EAAcD,GAAkBtZ,EAAUjoF,KAAOioF,EAAU/nF,OAAS,QAC/D,GAAI0sD,GAASttD,GAAW,CAC7B,MAAM4iG,EAAiB/pG,OAAOU,KAAKyG,GAAU,GACvChL,EAAQgL,EAAS4iG,GACvBV,EAAcD,EAAiBh0G,KAAK06E,MAAMqB,OAAO44B,GAAgB1tC,iBAAiBlgE,GACpF,CACAotG,EAAMF,EAAcF,EACpBM,EAAMF,EAAMP,EACZW,EAAK7Z,EAAUjoF,KACfgiG,EAAK/Z,EAAU/nF,KACjB,CACA,MAAMiiG,EAAQn1C,GAAejyD,EAAQuwF,MAAMkR,cAAe0E,GACpDkB,EAAOxyG,KAAKiT,IAAI,EAAGjT,KAAKqnG,KAAKiK,EAAciB,IACjD,IAAK1pG,EAAI,EAAGA,EAAIyoG,EAAazoG,GAAK2pG,EAAM,CACtC,MAAMC,EAAc3S,EAAKhd,WAAWnlF,KAAKi+E,WAAW/yE,IAC9Ci2E,EAAY2zB,EAAY3zB,UACxB4zB,EAAYD,EAAYn8B,MACxBiW,EAAakmB,EAAYlmB,YAAc,GACvCC,EAAmBimB,EAAYjmB,iBAC/Bmb,EAAY8K,EAAY9K,UACxBC,EAAY6K,EAAY7K,UACxB+K,EAAiBF,EAAYE,gBAAkB,GAC/CC,EAAuBH,EAAYG,qBACzC1J,EAAYH,GAAoBprG,KAAMkL,EAAGuZ,QACvB5b,IAAd0iG,IAGJ2I,EAAmBv2B,GAAYjD,EAAO6wB,EAAWpqB,GAC7Cye,EACFuU,EAAME,EAAME,EAAKE,EAAKP,EAEtBE,EAAME,EAAME,EAAKE,EAAKR,EAExB3mG,EAAMrN,KAAK,CACTi0G,MACAC,MACAC,MACAC,MACAC,KACAC,KACAC,KACAC,KACA1+F,MAAOmrE,EACPxI,MAAOo8B,EACPnmB,aACAC,mBACAmb,YACAC,YACA+K,iBACAC,yBAEJ,CAGA,OAFAj1G,KAAK8sG,aAAe6G,EACpB3zG,KAAK+sG,aAAekH,EACb1mG,CACT,CACA2nG,mBAAmBxa,GACjB,MAAM/1E,EAAO3kB,KAAK2kB,KACZnX,EAAUxN,KAAKwN,SACf,SAACuE,EAAUgsF,MAAOyV,GAAehmG,EACjCoyF,EAAe5/F,KAAK4/F,eACpB7B,EAAQ/9F,KAAK+9F,OACb,MAAC33B,EAAK,WAAEwkC,EAAU,QAAEpnF,EAAO,OAAE4mF,GAAUoJ,EACvCI,EAAKpI,GAAkBh+F,EAAQ20F,MAC/BgT,EAAiBvB,EAAKpwF,EACtB4xF,EAAkBhL,GAAU5mF,EAAU2xF,EACtCz2B,GAAYvb,GAAUnjE,KAAKksG,eAC3B3+F,EAAQ,GACd,IAAIrC,EAAGi1D,EAAM+vB,EAAMmK,EAAOjkF,EAAGC,EAAG0qE,EAAWnD,EAAO/C,EAAME,EAAYs6B,EAAWC,EAC3Et0B,EAAe,SACnB,GAAiB,QAAbjvE,EACFsE,EAAIrW,KAAKmW,OAASi/F,EAClBr0B,EAAY/gF,KAAKu1G,+BACZ,GAAiB,WAAbxjG,EACTsE,EAAIrW,KAAKkW,IAAMk/F,EACfr0B,EAAY/gF,KAAKu1G,+BACZ,GAAiB,SAAbxjG,EAAqB,CAC9B,MAAM2lE,EAAM13E,KAAKw1G,wBAAwB5B,GACzC7yB,EAAYrJ,EAAIqJ,UAChB3qE,EAAIshE,EAAIthE,CACV,MAAO,GAAiB,UAAbrE,EAAsB,CAC/B,MAAM2lE,EAAM13E,KAAKw1G,wBAAwB5B,GACzC7yB,EAAYrJ,EAAIqJ,UAChB3qE,EAAIshE,EAAIthE,CACV,MAAO,GAAa,MAATuO,EAAc,CACvB,GAAiB,WAAb5S,EACFsE,GAAMqkF,EAAUxkF,IAAMwkF,EAAUvkF,QAAU,EAAKg/F,OAC1C,GAAI91C,GAASttD,GAAW,CAC7B,MAAM4iG,EAAiB/pG,OAAOU,KAAKyG,GAAU,GACvChL,EAAQgL,EAAS4iG,GACvBt+F,EAAIrW,KAAK06E,MAAMqB,OAAO44B,GAAgB1tC,iBAAiBlgE,GAASouG,CAClE,CACAp0B,EAAY/gF,KAAKu1G,yBACnB,MAAO,GAAa,MAAT5wF,EAAc,CACvB,GAAiB,WAAb5S,EACFqE,GAAMskF,EAAUjoF,KAAOioF,EAAU/nF,OAAS,EAAKwiG,OAC1C,GAAI91C,GAASttD,GAAW,CAC7B,MAAM4iG,EAAiB/pG,OAAOU,KAAKyG,GAAU,GACvChL,EAAQgL,EAAS4iG,GACvBv+F,EAAIpW,KAAK06E,MAAMqB,OAAO44B,GAAgB1tC,iBAAiBlgE,EACzD,CACAg6E,EAAY/gF,KAAKw1G,wBAAwB5B,GAAI7yB,SAC/C,CACa,MAATp8D,IACY,UAAVyhD,EACF4a,EAAe,MACI,QAAV5a,IACT4a,EAAe,WAGnB,MAAMkwB,EAAalxG,KAAKmxG,iBACxB,IAAKjmG,EAAI,EAAGi1D,EAAO49B,EAAM36F,OAAQ8H,EAAIi1D,IAAQj1D,EAAG,CAC9CglF,EAAO6N,EAAM7yF,GACbmvF,EAAQnK,EAAKmK,MACb,MAAMya,EAActB,EAAYruB,WAAWnlF,KAAKi+E,WAAW/yE,IAC3D0yE,EAAQ59E,KAAKg+F,gBAAgB9yF,GAAKsoG,EAAY/I,YAC9C5vB,EAAO76E,KAAKgzG,wBAAwB9nG,GACpC6vE,EAAaF,EAAKE,WAClBs6B,EAAYprG,GAAQowF,GAASA,EAAMj3F,OAAS,EAC5C,MAAMqyG,EAAYJ,EAAY,EACxB18B,EAAQm8B,EAAYn8B,MACpBiI,EAAck0B,EAAYxK,gBAC1B3pB,EAAcm0B,EAAYzK,gBAChC,IAoCIp6E,EApCAylF,EAAgB30B,EAqCpB,GApCI6e,GACFxpF,EAAIwnE,EACc,UAAdmD,IAEA20B,EADExqG,IAAMi1D,EAAO,EACEngE,KAAKwN,QAAQmmD,QAAoB,OAAV,QACzB,IAANzoD,EACQlL,KAAKwN,QAAQmmD,QAAmB,QAAT,OAExB,UAKhB2hD,EAFa,QAAbvjG,EACiB,SAAf64F,GAAsC,IAAblsB,GACb22B,EAAYt6B,EAAaA,EAAa,EAC5B,WAAf6vB,GACKsG,EAAWK,QAAQt7F,OAAS,EAAIw/F,EAAY16B,EAAaA,GAEzDm2B,EAAWK,QAAQt7F,OAAS8kE,EAAa,EAGtC,SAAf6vB,GAAsC,IAAblsB,EACd3D,EAAa,EACF,WAAf6vB,EACIsG,EAAWK,QAAQt7F,OAAS,EAAIw/F,EAAY16B,EAE5Cm2B,EAAWK,QAAQt7F,OAASo/F,EAAYt6B,EAGrDqvB,IACFkL,IAAe,KAGjBj/F,EAAIunE,EACJ03B,GAAc,EAAID,GAAat6B,EAAa,GAG1C+5B,EAAYjK,kBAAmB,CACjC,MAAM8K,EAAe9yB,GAAUiyB,EAAY/J,iBACrC90F,EAASi7F,EAAWwB,QAAQxnG,GAC5B8K,EAAQk7F,EAAWuB,OAAOvnG,GAChC,IAAIgL,EAAMG,EAAIi/F,EAAaK,EAAaz/F,IACpCzD,EAAO2D,EAAIu/F,EAAaljG,KAC5B,OAAQuuE,GACR,IAAK,SACH9qE,GAAOD,EAAS,EAChB,MACF,IAAK,SACHC,GAAOD,EAGT,OAAQ8qE,GACR,IAAK,SACHtuE,GAAQuD,EAAQ,EAChB,MACF,IAAK,QACHvD,GAAQuD,EAGVia,EAAW,CACTxd,OACAyD,MACAF,MAAOA,EAAQ2/F,EAAa3/F,MAC5BC,OAAQA,EAAS0/F,EAAa1/F,OAC9B0iE,MAAOm8B,EAAYhK,cAEvB,CACAv9F,EAAMrN,KAAK,CACTw+E,WACA2b,QACAxf,OACAlC,QACAiI,cACAD,cACA20B,aACAv0B,UAAW20B,EACX10B,eACAH,YAAa,CAACzqE,EAAGC,GACjB4Z,YAEJ,CACA,OAAO1iB,CACT,CACAgoG,0BACE,MAAM,SAACxjG,EAAQ,MAAEgsF,GAAS/9F,KAAKwN,QAE/B,IADkB21D,GAAUnjE,KAAKksG,eAE/B,MAAoB,QAAbn6F,EAAqB,OAAS,QAEvC,IAAIq0D,EAAQ,SAQZ,MAPoB,UAAhB23B,EAAM33B,MACRA,EAAQ,OACiB,QAAhB23B,EAAM33B,MACfA,EAAQ,QACiB,UAAhB23B,EAAM33B,QACfA,EAAQ,SAEHA,CACT,CACAovC,wBAAwB5B,GACtB,MAAM,SAAC7hG,EAAUgsF,OAAO,WAAC6M,EAAU,OAAER,EAAM,QAAE5mF,IAAYxjB,KAAKwN,QAExD2nG,EAAiBvB,EAAKpwF,EACtB6tF,EAFarxG,KAAKmxG,iBAEEE,OAAOr7F,MACjC,IAAI+qE,EACA3qE,EAoDJ,MAnDiB,SAAbrE,EACEq4F,GACFh0F,EAAIpW,KAAK2S,MAAQ6Q,EACE,SAAfonF,EACF7pB,EAAY,OACY,WAAf6pB,GACT7pB,EAAY,SACZ3qE,GAAMi7F,EAAS,IAEftwB,EAAY,QACZ3qE,GAAKi7F,KAGPj7F,EAAIpW,KAAK2S,MAAQwiG,EACE,SAAfvK,EACF7pB,EAAY,QACY,WAAf6pB,GACT7pB,EAAY,SACZ3qE,GAAMi7F,EAAS,IAEftwB,EAAY,OACZ3qE,EAAIpW,KAAKyS,OAGS,UAAbV,EACLq4F,GACFh0F,EAAIpW,KAAKyS,KAAO+Q,EACG,SAAfonF,EACF7pB,EAAY,QACY,WAAf6pB,GACT7pB,EAAY,SACZ3qE,GAAMi7F,EAAS,IAEftwB,EAAY,OACZ3qE,GAAKi7F,KAGPj7F,EAAIpW,KAAKyS,KAAO0iG,EACG,SAAfvK,EACF7pB,EAAY,OACY,WAAf6pB,GACT7pB,EAAY,SACZ3qE,GAAKi7F,EAAS,IAEdtwB,EAAY,QACZ3qE,EAAIpW,KAAK2S,QAIbouE,EAAY,QAEP,CAACA,YAAW3qE,IACrB,CACAw/F,oBACE,GAAI51G,KAAKwN,QAAQuwF,MAAMqM,OACrB,OAEF,MAAM1vB,EAAQ16E,KAAK06E,MACb3oE,EAAW/R,KAAKwN,QAAQuE,SAC9B,MAAiB,SAAbA,GAAoC,UAAbA,EAClB,CAACmE,IAAK,EAAGzD,KAAMzS,KAAKyS,KAAM0D,OAAQukE,EAAMzkE,OAAQtD,MAAO3S,KAAK2S,OAClD,QAAbZ,GAAmC,WAAbA,EACnB,CAACmE,IAAKlW,KAAKkW,IAAKzD,KAAM,EAAG0D,OAAQnW,KAAKmW,OAAQxD,MAAO+nE,EAAM1kE,YADlE,CAGJ,CACA6/F,iBACE,MAAM,IAAC36B,EAAK1tE,SAAS,gBAAC+sE,GAAgB,KAAE9nE,EAAI,IAAEyD,EAAG,MAAEF,EAAK,OAAEC,GAAUjW,KAChEu6E,IACFW,EAAImC,OACJnC,EAAI4F,UAAYvG,EAChBW,EAAI46B,SAASrjG,EAAMyD,EAAKF,EAAOC,GAC/BilE,EAAIuC,UAER,CACAgkB,qBAAqB16F,GACnB,MAAMo7F,EAAOniG,KAAKwN,QAAQ20F,KAC1B,IAAKniG,KAAKixG,eAAiB9O,EAAK2F,QAC9B,OAAO,EAET,MACMtpF,EADQxe,KAAK+9F,MACC3uC,WAAU/8B,GAAKA,EAAEtrB,QAAUA,IAC/C,OAAIyX,GAAS,EACE2jF,EAAKhd,WAAWnlF,KAAKi+E,WAAWz/D,IACjC2iE,UAEP,CACT,CACA40B,SAASrb,GACP,MAAMyH,EAAOniG,KAAKwN,QAAQ20F,KACpBjnB,EAAMl7E,KAAKk7E,IACX3tE,EAAQvN,KAAKosG,iBAAmBpsG,KAAKosG,eAAiBpsG,KAAK0zG,sBAAsBhZ,IACvF,IAAIxvF,EAAGi1D,EACP,MAAM61C,EAAW,CAAC5+B,EAAIC,EAAI3xD,KACnBA,EAAM1P,OAAU0P,EAAMizD,QAG3BuC,EAAImC,OACJnC,EAAIiG,UAAYz7D,EAAM1P,MACtBklE,EAAIgG,YAAcx7D,EAAMizD,MACxBuC,EAAI+6B,YAAYvwF,EAAMkpE,YAAc,IACpC1T,EAAIg7B,eAAiBxwF,EAAMmpE,iBAC3B3T,EAAI6D,YACJ7D,EAAIiE,OAAO/H,EAAGhhE,EAAGghE,EAAG/gE,GACpB6kE,EAAIkE,OAAO/H,EAAGjhE,EAAGihE,EAAGhhE,GACpB6kE,EAAIsE,SACJtE,EAAIuC,UAAS,EAEf,GAAI0kB,EAAK2F,QACP,IAAK58F,EAAI,EAAGi1D,EAAO5yD,EAAMnK,OAAQ8H,EAAIi1D,IAAQj1D,EAAG,CAC9C,MAAM4C,EAAOP,EAAMrC,GACfi3F,EAAK0H,iBACPmM,EACE,CAAC5/F,EAAGtI,EAAKymG,GAAIl+F,EAAGvI,EAAK0mG,IACrB,CAACp+F,EAAGtI,EAAK2mG,GAAIp+F,EAAGvI,EAAK4mG,IACrB5mG,GAGAq0F,EAAK2H,WACPkM,EACE,CAAC5/F,EAAGtI,EAAKqmG,IAAK99F,EAAGvI,EAAKsmG,KACtB,CAACh+F,EAAGtI,EAAKumG,IAAKh+F,EAAGvI,EAAKwmG,KACtB,CACE37B,MAAO7qE,EAAKm8F,UACZj0F,MAAOlI,EAAKk8F,UACZpb,WAAY9gF,EAAKknG,eACjBnmB,iBAAkB/gF,EAAKmnG,sBAI/B,CAEJ,CACArL,aACE,MAAM,MAAClvB,EAAK,IAAEQ,EAAK1tE,SAAS,KAAC20F,IAASniG,KAChC6zG,EAAa1R,EAAKhd,WAAWnlF,KAAKi+E,cAClC61B,EAAY3R,EAAKyH,WAAaiK,EAAWt0B,YAAc,EAC7D,IAAKu0B,EACH,OAEF,MAAMqC,EAAgBhU,EAAKhd,WAAWnlF,KAAKi+E,WAAW,IAAIkD,UACpD8yB,EAAcj0G,KAAK+sG,aACzB,IAAIwH,EAAIE,EAAID,EAAIE,EACZ10G,KAAK4/F,gBACP2U,EAAK52B,GAAYjD,EAAO16E,KAAKyS,KAAMqhG,GAAaA,EAAY,EAC5DW,EAAK92B,GAAYjD,EAAO16E,KAAK2S,MAAOwjG,GAAiBA,EAAgB,EACrE3B,EAAKE,EAAKT,IAEVO,EAAK72B,GAAYjD,EAAO16E,KAAKkW,IAAK49F,GAAaA,EAAY,EAC3DY,EAAK/2B,GAAYjD,EAAO16E,KAAKmW,OAAQggG,GAAiBA,EAAgB,EACtE5B,EAAKE,EAAKR,GAEZ/4B,EAAImC,OACJnC,EAAIiG,UAAY0yB,EAAWt0B,YAC3BrE,EAAIgG,YAAc2yB,EAAWr5B,YAC7BU,EAAI6D,YACJ7D,EAAIiE,OAAOo1B,EAAIC,GACft5B,EAAIkE,OAAOq1B,EAAIC,GACfx5B,EAAIsE,SACJtE,EAAIuC,SACN,CACA24B,WAAW1b,GAET,IADoB16F,KAAKwN,QAAQuwF,MAChB+J,QACf,OAEF,MAAM5sB,EAAMl7E,KAAKk7E,IACXyE,EAAO3/E,KAAK41G,oBACdj2B,GACFC,GAAS1E,EAAKyE,GAEhB,MAAMpyE,EAAQvN,KAAKqsG,cAAgBrsG,KAAKqsG,YAAcrsG,KAAKk1G,mBAAmBxa,IAC9E,IAAIxvF,EAAGi1D,EACP,IAAKj1D,EAAI,EAAGi1D,EAAO5yD,EAAMnK,OAAQ8H,EAAIi1D,IAAQj1D,EAAG,CAC9C,MAAM4C,EAAOP,EAAMrC,GACbynG,EAAW7kG,EAAK+sE,KAChBwf,EAAQvsF,EAAKusF,MACfvsF,EAAKmiB,WACPirD,EAAI4F,UAAYhzE,EAAKmiB,SAAS0oD,MAC9BuC,EAAI46B,SAAShoG,EAAKmiB,SAASxd,KAAM3E,EAAKmiB,SAAS/Z,IAAKpI,EAAKmiB,SAASja,MAAOlI,EAAKmiB,SAASha,SAGzFwqE,GAAWvF,EAAKmf,EAAO,EADfvsF,EAAKwnG,WACgB3C,EAAU7kG,EACzC,CACI6xE,GACFG,GAAW5E,EAEf,CACAm7B,YACE,MAAM,IAACn7B,EAAK1tE,SAAS,SAACuE,EAAQ,MAAEywF,EAAK,QAAE7uC,IAAY3zD,KACnD,IAAKwiG,EAAMsF,QACT,OAEF,MAAMjtB,EAAOiI,GAAO0f,EAAM3nB,MACpBr3D,EAAUq/D,GAAU2f,EAAMh/E,SAC1B4iD,EAAQo8B,EAAMp8B,MACpB,IAAI3hD,EAASo2D,EAAKE,WAAa,EACd,WAAbhpE,GAAsC,WAAbA,GAAyBstD,GAASttD,IAC7D0S,GAAUjB,EAAQrN,OACdlM,GAAQu4F,EAAM3mE,QAChBpX,GAAUo2D,EAAKE,YAAcynB,EAAM3mE,KAAKz4B,OAAS,KAGnDqhB,GAAUjB,EAAQtN,IAEpB,MAAM,OAACogG,EAAM,OAAEC,EAAM,SAAEl1B,EAAQ,SAAE3C,GAphCrC,SAAmB5C,EAAOr3D,EAAQ1S,EAAUq0D,GAC1C,MAAM,IAAClwD,EAAG,KAAEzD,EAAI,OAAE0D,EAAM,MAAExD,EAAK,MAAE+nE,GAASoB,GACpC,UAAC4e,EAAS,OAAE3e,GAAUrB,EAC5B,IACI2G,EAAUi1B,EAAQC,EADlB73B,EAAW,EAEf,MAAMzoE,EAASE,EAASD,EAClBF,EAAQrD,EAAQF,EACtB,GAAIqpE,EAAM8jB,eAAgB,CAExB,GADA0W,EAASjwC,GAAeD,EAAO3zD,EAAME,GACjC0sD,GAASttD,GAAW,CACtB,MAAM4iG,EAAiB/pG,OAAOU,KAAKyG,GAAU,GACvChL,EAAQgL,EAAS4iG,GACvB4B,EAASx6B,EAAO44B,GAAgB1tC,iBAAiBlgE,GAASkP,EAASwO,CACrE,MACE8xF,EADsB,WAAbxkG,GACC2oF,EAAUvkF,OAASukF,EAAUxkF,KAAO,EAAID,EAASwO,EAElDumF,GAAelvB,EAAO/pE,EAAU0S,GAE3C48D,EAAW1uE,EAAQF,CACrB,KAAO,CACL,GAAI4sD,GAASttD,GAAW,CACtB,MAAM4iG,EAAiB/pG,OAAOU,KAAKyG,GAAU,GACvChL,EAAQgL,EAAS4iG,GACvB2B,EAASv6B,EAAO44B,GAAgB1tC,iBAAiBlgE,GAASiP,EAAQyO,CACpE,MACE6xF,EADsB,WAAbvkG,GACC2oF,EAAUjoF,KAAOioF,EAAU/nF,OAAS,EAAIqD,EAAQyO,EAEjDumF,GAAelvB,EAAO/pE,EAAU0S,GAE3C8xF,EAASlwC,GAAeD,EAAOjwD,EAAQD,GACvCwoE,EAAwB,SAAb3sE,GAAuBqwD,GAAUA,EAC9C,CACA,MAAO,CAACk0C,SAAQC,SAAQl1B,WAAU3C,WACpC,CAm/BiD83B,CAAUx2G,KAAMykB,EAAQ1S,EAAUq0D,GAC/Eqa,GAAWvF,EAAKsnB,EAAM3mE,KAAM,EAAG,EAAGg/C,EAAM,CACtClC,MAAO6pB,EAAM7pB,MACb0I,WACA3C,WACAqC,UAAW2qB,GAAWtlC,EAAOr0D,EAAU4hD,GACvCqtB,aAAc,SACdH,YAAa,CAACy1B,EAAQC,IAE1B,CACAxmB,KAAK2K,GACE16F,KAAKixG,eAGVjxG,KAAK61G,iBACL71G,KAAK+1G,SAASrb,GACd16F,KAAK4pG,aACL5pG,KAAKq2G,YACLr2G,KAAKo2G,WAAW1b,GAClB,CACA+b,UACE,MAAM/1B,EAAO1gF,KAAKwN,QACZkpG,EAAKh2B,EAAKqd,OAASrd,EAAKqd,MAAM4Y,GAAK,EACnCC,EAAKn3C,GAAeihB,EAAKyhB,MAAQzhB,EAAKyhB,KAAKwU,GAAI,GACrD,OAAK32G,KAAKixG,cAAgBjxG,KAAK+vF,OAAS6b,GAAMtmG,UAAUyqF,KAQjD,CAAC,CACN4mB,EAAGC,EACH7mB,KAAO2K,IACL16F,KAAK61G,iBACL71G,KAAK+1G,SAASrb,GACd16F,KAAKq2G,WAAW,GAEjB,CACDM,EAAGC,EAAK,EACR7mB,KAAM,KACJ/vF,KAAK4pG,YAAY,GAElB,CACD+M,EAAGD,EACH3mB,KAAO2K,IACL16F,KAAKo2G,WAAW1b,EAAU,IAtBrB,CAAC,CACNic,EAAGD,EACH3mB,KAAO2K,IACL16F,KAAK+vF,KAAK2K,EAAU,GAsB5B,CACAlG,wBAAwB5uF,GACtB,MAAMwnG,EAAQptG,KAAK06E,MAAMm8B,+BACnBC,EAAS92G,KAAK2kB,KAAO,SACrBzJ,EAAS,GACf,IAAIhQ,EAAGi1D,EACP,IAAKj1D,EAAI,EAAGi1D,EAAOitC,EAAMhqG,OAAQ8H,EAAIi1D,IAAQj1D,EAAG,CAC9C,MAAMmtC,EAAO+0D,EAAMliG,GACfmtC,EAAKy+D,KAAY92G,KAAKgO,IAAQpI,GAAQyyC,EAAKzyC,OAASA,GACtDsV,EAAOhb,KAAKm4C,EAEhB,CACA,OAAOn9B,CACT,CACA83F,wBAAwBx0F,GAEtB,OAAOskE,GADM9iF,KAAKwN,QAAQuwF,MAAM5Y,WAAWnlF,KAAKi+E,WAAWz/D,IACxCq8D,KACrB,CACAk8B,aACE,MAAMC,EAAWh3G,KAAKgzG,wBAAwB,GAAGj4B,WACjD,OAAQ/6E,KAAK4/F,eAAiB5/F,KAAKgW,MAAQhW,KAAKiW,QAAU+gG,CAC5D,EAGF,MAAMC,GACJv2G,YAAYkF,EAAM8kD,EAAOyxB,GACvBn8E,KAAK4F,KAAOA,EACZ5F,KAAK0qD,MAAQA,EACb1qD,KAAKm8E,SAAWA,EAChBn8E,KAAKuN,MAAQ3C,OAAOxC,OAAO,KAC7B,CACA8uG,UAAUtxG,GACR,OAAOgF,OAAOtF,UAAU6xG,cAAcryG,KAAK9E,KAAK4F,KAAKN,UAAWM,EAAKN,UACvE,CACAmzD,SAAS3qD,GACP,MAAMgpE,EAAQlsE,OAAO8oD,eAAe5lD,GACpC,IAAIspG,GA+DR,SAA2BtgC,GACzB,MAAO,OAAQA,GAAS,aAAcA,CACxC,EAhEQugC,CAAkBvgC,KACpBsgC,EAAcp3G,KAAKy4D,SAASqe,IAE9B,MAAMvpE,EAAQvN,KAAKuN,MACbS,EAAKF,EAAKE,GACV08C,EAAQ1qD,KAAK0qD,MAAQ,IAAM18C,EACjC,IAAKA,EACH,MAAM,IAAI43B,MAAM,2BAA6B93B,GAE/C,OAAIE,KAAMT,IAGVA,EAAMS,GAAMF,EAyBhB,SAA0BA,EAAM48C,EAAO0sD,GACrC,MAAME,EAAex2C,GAAMl2D,OAAOxC,OAAO,MAAO,CAC9CgvG,EAAch9B,GAAS1+D,IAAI07F,GAAe,CAAC,EAC3Ch9B,GAAS1+D,IAAIgvC,GACb58C,EAAKssE,WAEPA,GAASz+D,IAAI+uC,EAAO4sD,GAChBxpG,EAAK46F,eAOX,SAAuBh+C,EAAO6sD,GAC5B3sG,OAAOU,KAAKisG,GAAQtrG,SAAQ6Z,IAC1B,MAAM0xF,EAAgB1xF,EAASpX,MAAM,KAC/B+oG,EAAaD,EAAcrnB,MAC3BunB,EAAc,CAAChtD,GAAOj2C,OAAO+iG,GAAez5E,KAAK,KACjDorB,EAAQouD,EAAOzxF,GAAUpX,MAAM,KAC/BmnD,EAAa1M,EAAMgnC,MACnB9T,EAAclzB,EAAMprB,KAAK,KAC/Bq8C,GAASgC,MAAMs7B,EAAaD,EAAYp7B,EAAaxmB,EAAW,GAEpE,CAhBI8hD,CAAcjtD,EAAO58C,EAAK46F,eAExB56F,EAAKqkD,aACPioB,GAAS8B,SAASxxB,EAAO58C,EAAKqkD,YAElC,CArCIylD,CAAiB9pG,EAAM48C,EAAO0sD,GAC1Bp3G,KAAKm8E,UACP/B,GAAS+B,SAASruE,EAAKE,GAAIF,EAAKmsE,YALzBvvB,CAQX,CACAhvC,IAAI1N,GACF,OAAOhO,KAAKuN,MAAMS,EACpB,CACA6pG,WAAW/pG,GACT,MAAMP,EAAQvN,KAAKuN,MACbS,EAAKF,EAAKE,GACV08C,EAAQ1qD,KAAK0qD,MACf18C,KAAMT,UACDA,EAAMS,GAEX08C,GAAS18C,KAAMosE,GAAS1vB,YACnB0vB,GAAS1vB,GAAO18C,GACnBhO,KAAKm8E,iBACAlC,GAAUjsE,GAGvB,EAqHF,IAAI8pG,GAAW,IAtFf,MACEp3G,cACEV,KAAK84D,YAAc,IAAIm+C,GAAcvhB,GAAmB,YAAY,GACpE11F,KAAK+c,SAAW,IAAIk6F,GAAc,GAAS,YAC3Cj3G,KAAK47E,QAAU,IAAIq7B,GAAcrsG,OAAQ,WACzC5K,KAAK+7E,OAAS,IAAIk7B,GAAcrL,GAAO,UACvC5rG,KAAK+3G,iBAAmB,CAAC/3G,KAAK84D,YAAa94D,KAAK+7E,OAAQ/7E,KAAK+c,SAC/D,CACAxU,OAAOK,GACL5I,KAAKg4G,MAAM,WAAYpvG,EACzB,CACAvB,UAAUuB,GACR5I,KAAKg4G,MAAM,aAAcpvG,EAC3B,CACAqvG,kBAAkBrvG,GAChB5I,KAAKg4G,MAAM,WAAYpvG,EAAM5I,KAAK84D,YACpC,CACA49B,eAAe9tF,GACb5I,KAAKg4G,MAAM,WAAYpvG,EAAM5I,KAAK+c,SACpC,CACAm7F,cAActvG,GACZ5I,KAAKg4G,MAAM,WAAYpvG,EAAM5I,KAAK47E,QACpC,CACAu8B,aAAavvG,GACX5I,KAAKg4G,MAAM,WAAYpvG,EAAM5I,KAAK+7E,OACpC,CACAq8B,cAAcpqG,GACZ,OAAOhO,KAAKq4G,KAAKrqG,EAAIhO,KAAK84D,YAAa,aACzC,CACAw/C,WAAWtqG,GACT,OAAOhO,KAAKq4G,KAAKrqG,EAAIhO,KAAK+c,SAAU,UACtC,CACAw7F,UAAUvqG,GACR,OAAOhO,KAAKq4G,KAAKrqG,EAAIhO,KAAK47E,QAAS,SACrC,CACA48B,SAASxqG,GACP,OAAOhO,KAAKq4G,KAAKrqG,EAAIhO,KAAK+7E,OAAQ,QACpC,CACA08B,qBAAqB7vG,GACnB5I,KAAKg4G,MAAM,aAAcpvG,EAAM5I,KAAK84D,YACtC,CACA4/C,kBAAkB9vG,GAChB5I,KAAKg4G,MAAM,aAAcpvG,EAAM5I,KAAK+c,SACtC,CACA47F,iBAAiB/vG,GACf5I,KAAKg4G,MAAM,aAAcpvG,EAAM5I,KAAK47E,QACtC,CACAg9B,gBAAgBhwG,GACd5I,KAAKg4G,MAAM,aAAcpvG,EAAM5I,KAAK+7E,OACtC,CACAi8B,MAAM94E,EAAQt2B,EAAMiwG,GAClB,IAAIjwG,GAAMqD,SAAQ6sG,IAChB,MAAMC,EAAMF,GAAiB74G,KAAKg5G,oBAAoBF,GAClDD,GAAiBE,EAAI7B,UAAU4B,IAASC,IAAQ/4G,KAAK47E,SAAWk9B,EAAI9qG,GACtEhO,KAAKi5G,MAAM/5E,EAAQ65E,EAAKD,GAExBh5C,GAAKg5C,GAAKhrG,IACR,MAAMorG,EAAUL,GAAiB74G,KAAKg5G,oBAAoBlrG,GAC1D9N,KAAKi5G,MAAM/5E,EAAQg6E,EAASprG,EAAK,GAErC,GAEJ,CACAmrG,MAAM/5E,EAAQ44E,EAAUqB,GACtB,MAAMC,EAAc33C,GAAYviC,GAChCmM,GAAS8tE,EAAU,SAAWC,GAAc,GAAID,GAChDrB,EAAS54E,GAAQi6E,GACjB9tE,GAAS8tE,EAAU,QAAUC,GAAc,GAAID,EACjD,CACAH,oBAAoBpzG,GAClB,IAAK,IAAIsF,EAAI,EAAGA,EAAIlL,KAAK+3G,iBAAiB30G,OAAQ8H,IAAK,CACrD,MAAM6tG,EAAM/4G,KAAK+3G,iBAAiB7sG,GAClC,GAAI6tG,EAAI7B,UAAUtxG,GAChB,OAAOmzG,CAEX,CACA,OAAO/4G,KAAK47E,OACd,CACAy8B,KAAKrqG,EAAI6qG,EAAejzG,GACtB,MAAMkI,EAAO+qG,EAAcn9F,IAAI1N,GAC/B,QAAanF,IAATiF,EACF,MAAM,IAAI83B,MAAM,IAAM53B,EAAK,yBAA2BpI,EAAO,KAE/D,OAAOkI,CACT,GAIF,MAAMurG,WAA0B3jB,GAC9Bv3E,OAAO6iC,GACL,MAAM3I,EAAOr4C,KAAK00F,aACX7wF,KAAM0iE,EAAS,IAAMluB,EACtBmuB,EAAqBxmE,KAAK06E,MAAMihB,oBACtC,IAAI,MAAC56F,EAAK,MAAE2lE,GAASJ,GAAiCjuB,EAAMkuB,EAAQC,GAOpE,GANAxmE,KAAKk2F,WAAan1F,EAClBf,KAAKm2F,WAAazvB,EACdQ,GAAoB7uB,KACtBt3C,EAAQ,EACR2lE,EAAQH,EAAOnjE,QAEbpD,KAAKwN,QAAQwuE,SAAU,CACzB,MAAO10B,QAASxpB,EAAI,SAAEuoE,GAAYhuD,EAClCva,EAAKy0D,OAASvyF,KAAK06E,MACnB58C,EAAKwoE,cAAgBtmG,KAAKwe,MAC1Bsf,EAAKyoE,aAAeF,EAASE,WAC7BzoE,EAAKyoC,OAASA,EACd,MAAM/4D,EAAUxN,KAAK26F,6BAA6B35C,GAClDxzC,EAAQugF,QAAU/tF,KAAKwN,QAAQugF,QAC/B/tF,KAAKg8F,cAAcl+D,OAAMj1B,EAAW,CAClC29F,UAAWhgC,EACXh5D,WACCwzC,EACL,CACAhhD,KAAK68F,eAAet2B,EAAQxlE,EAAO2lE,EAAO1lB,EAC5C,CACA01C,cACE,MAAM,SAAC1a,GAAYh8E,KAAKwN,SACnBxN,KAAKk4F,oBAAsBlc,IAC9Bh8E,KAAKk4F,mBAAqB4f,GAASQ,WAAW,SAEhDvgF,MAAM2+D,aACR,CACAmG,eAAet2B,EAAQxlE,EAAO2lE,EAAO1lB,GACnC,MAAMziC,EAAiB,UAATyiC,GACR,OAAC4lB,EAAM,OAAE0tB,EAAM,SAAEmC,EAAQ,SAAE4P,GAAYrmG,KAAK00F,YAC5CmH,EAAY77F,KAAK46F,0BAA0B75F,EAAOigD,GAClD06C,EAAgB17F,KAAKw7F,iBAAiBK,GACtCJ,EAAiBz7F,KAAKy7F,eAAez6C,EAAM06C,GAC3C9G,EAAQhuB,EAAOjiD,KACfkwE,EAAQP,EAAO3vE,MACf,SAACijE,EAAQ,QAAEmG,GAAW/tF,KAAKwN,QAC3Bi5F,EAAe1jC,GAAS6kB,GAAYA,EAAWptB,OAAO0H,kBACtDwkC,EAAe1mG,KAAK06E,MAAMihB,qBAAuBp9E,GAAkB,SAATyiC,EAChE,IAAI2lD,EAAa5lG,EAAQ,GAAKf,KAAKs5F,UAAUv4F,EAAQ,GACrD,IAAK,IAAImK,EAAInK,EAAOmK,EAAInK,EAAQ2lE,IAASx7D,EAAG,CAC1C,MAAMw0E,EAAQnZ,EAAOr7D,GACfs7E,EAASxmF,KAAKs5F,UAAUpuF,GACxBrE,EAAa6/F,EAAehnB,EAAQ,CAAC,EACrCknB,EAAWxnC,GAAconB,EAAOqO,IAChCjM,EAAS/hF,EAAW+tF,GAAShuB,EAAOK,iBAAiBuf,EAAOoO,GAAQ1pF,GACpE29E,EAAShiF,EAAWguF,GAASt2E,GAASqoF,EAAWtS,EAAOqL,eAAiBrL,EAAOrtB,iBAAiBwvB,EAAWz2F,KAAKyzF,WAAWa,EAAQ9N,EAAQiQ,GAAYjQ,EAAOqO,GAAQ3pF,GAC7KrE,EAAW8/E,KAAO3jB,MAAM4lB,IAAW5lB,MAAM6lB,IAAW+d,EACpD//F,EAAWvF,KAAO4J,EAAI,GAAM7I,KAAK+V,IAAIouE,EAAOoO,GAAS+R,EAAW/R,IAAW6R,EACvE1Y,IACFlnF,EAAW2/E,OAASA,EACpB3/E,EAAWi0F,IAAMuL,EAASxiG,KAAKqH,IAE7BuwF,IACF50F,EAAW2G,QAAUkuF,GAAiB17F,KAAK46F,0BAA0B1vF,EAAGw0E,EAAM3xE,OAAS,SAAWizC,IAE/F0lD,GACH1mG,KAAKg8F,cAActc,EAAOx0E,EAAGrE,EAAYm6C,GAE3C2lD,EAAangB,CACf,CACAxmF,KAAK+7F,oBAAoBL,EAAe16C,EAAM66C,EAChD,CACA1B,iBACE,MAAM9hD,EAAOr4C,KAAK00F,YACZ7wF,EAAOw0C,EAAKx0C,MAAQ,GAC1B,IAAK7D,KAAKwN,QAAQwuE,SAAU,CAC1B,IAAI1mE,EAAM,EACV,IAAK,IAAIpK,EAAIrH,EAAKT,OAAS,EAAG8H,GAAK,IAAKA,EACtCoK,EAAMjT,KAAKiT,IAAIA,EAAKzR,EAAKqH,GAAG+yC,KAAKj+C,KAAK46F,0BAA0B1vF,IAAM,GAExE,OAAOoK,EAAM,GAAKA,CACpB,CACA,MAAMgyC,EAAUjP,EAAKiP,QACfu/C,EAASv/C,EAAQ95C,SAAW85C,EAAQ95C,QAAQ+xE,aAAe,EACjE,IAAK17E,EAAKT,OACR,OAAOyjG,EAET,MAAM/f,EAAajjF,EAAK,GAAGo6C,KAAKj+C,KAAK46F,0BAA0B,IACzDkM,EAAYjjG,EAAKA,EAAKT,OAAS,GAAG66C,KAAKj+C,KAAK46F,0BAA0B/2F,EAAKT,OAAS,IAC1F,OAAOf,KAAKiT,IAAIuxF,EAAQ/f,EAAYggB,GAAa,CACnD,EAEFuS,GAAkBrrG,GAAK,UACvBqrG,GAAkBj/B,SAAW,CAC3B8d,oBAAoB,EACpBgD,gBAAiB,QACjBlf,UAAU,EACVsD,MAAM,GAER+5B,GAAkBp/B,UAAY,CAC5BqB,YAAa,CACXt6B,KAAM,SAER46B,QAAS,CACP2mB,QAAS,CACP/S,UAAW,CACTgT,MAAK,IACI,GAETnI,MAAMvsF,GACG,IAAMA,EAAKusF,MAAQ,KAAOvsF,EAAKq4F,eAAiB,OAK/DpqB,OAAQ,CACN3lE,EAAG,CACDxQ,KAAM,UAERyQ,EAAG,CACDzQ,KAAM,YAKZ,IAAIkzD,GAA2BluD,OAAOm4C,OAAO,CAC7CC,UAAW,KACXu8C,cAAeA,GACf+C,iBAAkBA,GAClBG,mBAAoBA,GACpB2D,eAAgBA,GAChBY,oBAAqBA,GACrBiB,cAAeA,GACfC,gBAAiBA,GACjBmR,kBAAmBA,KAGnB,SAAS,KACP,MAAM,IAAIzzE,MAAM,kFAClB,CACA,MAAM0zE,GACJ54G,YAAY8M,GACVxN,KAAKwN,QAAUA,GAAW,CAAC,CAC7B,CACAy/F,KAAKsM,GAAe,CACpBC,UACE,OAAO,IACT,CACA3zG,MAAMkB,EAAO0lF,GACX,OAAO,IACT,CACAA,OAAOgtB,EAAWhtB,GAChB,OAAO,IACT,CACAlkF,IAAIkxG,EAAWC,EAAQC,GACrB,OAAO,IACT,CACA/J,KAAKzmG,EAAGqe,EAAGmyF,GACT,OAAO,IACT,CACAC,QAAQH,EAAWE,EAAME,GACvB,OAAO,IACT,CACAC,MAAML,EAAWE,GACf,OAAO,IACT,EAEFL,GAAYn9B,SAAW,SAAS49B,GAC9BnvG,OAAOiS,OAAOy8F,GAAYh0G,UAAWy0G,EACvC,EACA,IAAI15G,GAAW,CACb25G,MAAOV,IAGT,SAASW,GAAaC,EAASv1F,EAAM5d,EAAO26B,GAC1C,MAAM,WAACyoB,EAAU,KAAEtmD,EAAI,QAAE8iE,GAAWuzC,EAC9BtzC,EAASzc,EAAWuqC,YAAY9tB,OACtC,GAAIA,GAAUjiD,IAASiiD,EAAOjiD,MAAiB,MAATA,GAAgBgiD,GAAW9iE,EAAKT,OAAQ,CAC5E,MAAM+2G,EAAevzC,EAAO6lC,eAAiBlnC,GAAgBF,GAC7D,IAAK3jC,EACH,OAAOy4E,EAAat2G,EAAM8gB,EAAM5d,GAC3B,GAAIojD,EAAW8rC,eAAgB,CACpC,MAAM9mF,EAAKtL,EAAK,GACV6+D,EAA+B,mBAAhBvzD,EAAGirG,UAA2BjrG,EAAGirG,SAASz1F,GAC/D,GAAI+9C,EAAO,CACT,MAAM3hE,EAAQo5G,EAAat2G,EAAM8gB,EAAM5d,EAAQ27D,GACzCtoD,EAAM+/F,EAAat2G,EAAM8gB,EAAM5d,EAAQ27D,GAC7C,MAAO,CAAC0C,GAAIrkE,EAAMqkE,GAAID,GAAI/qD,EAAI+qD,GAChC,CACF,CACF,CACA,MAAO,CAACC,GAAI,EAAGD,GAAIthE,EAAKT,OAAS,EACnC,CACA,SAASi3G,GAAyB3/B,EAAO/1D,EAAM5S,EAAU1M,EAASq8B,GAChE,MAAM6xD,EAAW7Y,EAAMm8B,+BACjB9vG,EAAQgL,EAAS4S,GACvB,IAAK,IAAIzZ,EAAI,EAAGi1D,EAAOozB,EAASnwF,OAAQ8H,EAAIi1D,IAAQj1D,EAAG,CACrD,MAAM,MAACsT,EAAK,KAAE3a,GAAQ0vF,EAASroF,IACzB,GAACk6D,EAAE,GAAED,GAAM80C,GAAa1mB,EAASroF,GAAIyZ,EAAM5d,EAAO26B,GACxD,IAAK,IAAIm2C,EAAIzS,EAAIyS,GAAK1S,IAAM0S,EAAG,CAC7B,MAAMnuE,EAAU7F,EAAKg0E,GAChBnuE,EAAQi9E,MACXthF,EAAQqE,EAAS8U,EAAOq5D,EAE5B,CACF,CACF,CAUA,SAASyiC,GAAkB5/B,EAAO3oE,EAAU4S,EAAM4jF,EAAkBhtB,GAClE,MAAMhuE,EAAQ,GACd,OAAKguE,GAAqBb,EAAM6/B,cAAcxoG,IAW9CsoG,GAAyB3/B,EAAO/1D,EAAM5S,GARf,SAASrI,EAAS42D,EAAc9hD,IAChD+8D,GAAqBkE,GAAe/1E,EAASgxE,EAAMggB,UAAW,KAG/DhxF,EAAQ8wG,QAAQzoG,EAASqE,EAAGrE,EAASsE,EAAGkyF,IAC1Ch7F,EAAMrN,KAAK,CAACwJ,UAAS42D,eAAc9hD,SAEvC,IACgE,GACzDjR,GAXEA,CAYX,CAsCA,SAASktG,GAAgB//B,EAAO3oE,EAAU4S,EAAM+c,EAAW6mE,EAAkBhtB,GAC3E,OAAKA,GAAqBb,EAAM6/B,cAAcxoG,GAG9B,MAAT4S,GAAiB+c,EA7B1B,SAAkCg5C,EAAO3oE,EAAU4S,EAAM+c,EAAW6mE,EAAkBhtB,GACpF,IAAIhuE,EAAQ,GACZ,MAAMmtG,EAvCR,SAAkC/1F,GAChC,MAAMg2F,GAA8B,IAAvBh2F,EAAKthB,QAAQ,KACpBu3G,GAA8B,IAAvBj2F,EAAKthB,QAAQ,KAC1B,OAAO,SAAS8gE,EAAKC,GACnB,MAAMy2C,EAASF,EAAOt4G,KAAK+V,IAAI+rD,EAAI/tD,EAAIguD,EAAIhuD,GAAK,EAC1C0kG,EAASF,EAAOv4G,KAAK+V,IAAI+rD,EAAI9tD,EAAI+tD,EAAI/tD,GAAK,EAChD,OAAOhU,KAAK0hE,KAAK1hE,KAAKC,IAAIu4G,EAAQ,GAAKx4G,KAAKC,IAAIw4G,EAAQ,GAC1D,CACF,CA+ByBC,CAAyBp2F,GAChD,IAAIq2F,EAAcxgD,OAAO0H,kBAoBzB,OADAm4C,GAAyB3/B,EAAO/1D,EAAM5S,GAlBtC,SAAwBrI,EAAS42D,EAAc9hD,GAC7C,MAAMg8F,EAAU9wG,EAAQ8wG,QAAQzoG,EAASqE,EAAGrE,EAASsE,EAAGkyF,GACxD,GAAI7mE,IAAc84E,EAChB,OAEF,MAAM/uF,EAAS/hB,EAAQuxG,eAAe1S,GAEtC,IADsBhtB,IAAoBb,EAAM6/B,cAAc9uF,KACzC+uF,EACnB,OAEF,MAAMr0F,EAAWu0F,EAAe3oG,EAAU0Z,GACtCtF,EAAW60F,GACbztG,EAAQ,CAAC,CAAC7D,UAAS42D,eAAc9hD,UACjCw8F,EAAc70F,GACLA,IAAa60F,GACtBztG,EAAMrN,KAAK,CAACwJ,UAAS42D,eAAc9hD,SAEvC,IAEOjR,CACT,CAOM2tG,CAAyBxgC,EAAO3oE,EAAU4S,EAAM+c,EAAW6mE,EAAkBhtB,GA3CnF,SAA+Bb,EAAO3oE,EAAU4S,EAAM4jF,GACpD,IAAIh7F,EAAQ,GASZ,OADA8sG,GAAyB3/B,EAAO/1D,EAAM5S,GAPtC,SAAwBrI,EAAS42D,EAAc9hD,GAC7C,MAAM,WAAColF,EAAU,SAAEC,GAAYn6F,EAAQ8+F,SAAS,CAAC,aAAc,YAAaD,IACtE,MAACvkC,GAASP,GAAkB/5D,EAAS,CAAC0M,EAAGrE,EAASqE,EAAGC,EAAGtE,EAASsE,IACnEkuD,GAAcP,EAAO4/B,EAAYC,IACnCt2F,EAAMrN,KAAK,CAACwJ,UAAS42D,eAAc9hD,SAEvC,IAEOjR,CACT,CA+BM4tG,CAAsBzgC,EAAO3oE,EAAU4S,EAAM4jF,GAHxC,EAKX,CACA,SAAS6S,GAAa1gC,EAAO3oE,EAAU4S,EAAM+c,EAAW6mE,GACtD,MAAMh7F,EAAQ,GACR8tG,EAAuB,MAAT12F,EAAe,WAAa,WAChD,IAAI22F,GAAiB,EAOrB,OANAjB,GAAyB3/B,EAAO/1D,EAAM5S,GAAU,CAACrI,EAAS42D,EAAc9hD,KAClE9U,EAAQ2xG,GAAatpG,EAAS4S,GAAO4jF,KACvCh7F,EAAMrN,KAAK,CAACwJ,UAAS42D,eAAc9hD,UACnC88F,EAAiBA,GAAkB5xG,EAAQ8wG,QAAQzoG,EAASqE,EAAGrE,EAASsE,EAAGkyF,GAC7E,IAEE7mE,IAAc45E,EACT,GAEF/tG,CACT,CACA,IAAIguG,GAAc,CAChBlB,4BACAmB,MAAO,CACLh9F,MAAMk8D,EAAOl7B,EAAGhyC,EAAS+6F,GACvB,MAAMx2F,EAAWi4E,GAAoBxqC,EAAGk7B,GAClC/1D,EAAOnX,EAAQmX,MAAQ,IACvB42D,EAAmB/tE,EAAQ+tE,mBAAoB,EAC/ChuE,EAAQC,EAAQk0B,UAClB44E,GAAkB5/B,EAAO3oE,EAAU4S,EAAM4jF,EAAkBhtB,GAC3Dk/B,GAAgB//B,EAAO3oE,EAAU4S,GAAM,EAAO4jF,EAAkBhtB,GAC9Dx+D,EAAW,GACjB,OAAKxP,EAAMnK,QAGXs3E,EAAMm8B,+BAA+B5qG,SAASosC,IAC5C,MAAM75B,EAAQjR,EAAM,GAAGiR,MACjB9U,EAAU2uC,EAAKx0C,KAAK2a,GACtB9U,IAAYA,EAAQi9E,MACtB5pE,EAAS7c,KAAK,CAACwJ,UAAS42D,aAAcjoB,EAAK75B,MAAOA,SACpD,IAEKzB,GATE,EAUX,EACAuqC,QAAQozB,EAAOl7B,EAAGhyC,EAAS+6F,GACzB,MAAMx2F,EAAWi4E,GAAoBxqC,EAAGk7B,GAClC/1D,EAAOnX,EAAQmX,MAAQ,KACvB42D,EAAmB/tE,EAAQ+tE,mBAAoB,EACrD,IAAIhuE,EAAQC,EAAQk0B,UAChB44E,GAAkB5/B,EAAO3oE,EAAU4S,EAAM4jF,EAAkBhtB,GAC7Dk/B,GAAgB//B,EAAO3oE,EAAU4S,GAAM,EAAO4jF,EAAkBhtB,GAClE,GAAIhuE,EAAMnK,OAAS,EAAG,CACpB,MAAMk9D,EAAe/yD,EAAM,GAAG+yD,aACxBz8D,EAAO62E,EAAMgd,eAAep3B,GAAcz8D,KAChD0J,EAAQ,GACR,IAAK,IAAIrC,EAAI,EAAGA,EAAIrH,EAAKT,SAAU8H,EACjCqC,EAAMrN,KAAK,CAACwJ,QAAS7F,EAAKqH,GAAIo1D,eAAc9hD,MAAOtT,GAEvD,CACA,OAAOqC,CACT,EACAmyE,MAAK,CAAChF,EAAOl7B,EAAGhyC,EAAS+6F,IAIhB+R,GAAkB5/B,EAHRsP,GAAoBxqC,EAAGk7B,GAC3BltE,EAAQmX,MAAQ,KAEmB4jF,EADvB/6F,EAAQ+tE,mBAAoB,GAGvDkgC,QAAQ/gC,EAAOl7B,EAAGhyC,EAAS+6F,GACzB,MAAMx2F,EAAWi4E,GAAoBxqC,EAAGk7B,GAClC/1D,EAAOnX,EAAQmX,MAAQ,KACvB42D,EAAmB/tE,EAAQ+tE,mBAAoB,EACrD,OAAOk/B,GAAgB//B,EAAO3oE,EAAU4S,EAAMnX,EAAQk0B,UAAW6mE,EAAkBhtB,EACrF,EACAnlE,EAAC,CAACskE,EAAOl7B,EAAGhyC,EAAS+6F,IAEZ6S,GAAa1gC,EADHsP,GAAoBxqC,EAAGk7B,GACH,IAAKltE,EAAQk0B,UAAW6mE,GAE/DlyF,EAAC,CAACqkE,EAAOl7B,EAAGhyC,EAAS+6F,IAEZ6S,GAAa1gC,EADHsP,GAAoBxqC,EAAGk7B,GACH,IAAKltE,EAAQk0B,UAAW6mE,KAKnE,MAAMmT,GAAmB,CAAC,OAAQ,MAAO,QAAS,UAClD,SAASC,GAAiBjhD,EAAO3oD,GAC/B,OAAO2oD,EAAM/yD,QAAOojB,GAAKA,EAAEg/D,MAAQh4E,GACrC,CACA,SAAS6pG,GAA4BlhD,EAAO/1C,GAC1C,OAAO+1C,EAAM/yD,QAAOojB,IAA0C,IAArC2wF,GAAiBr4G,QAAQ0nB,EAAEg/D,MAAeh/D,EAAEu/D,IAAI3lE,OAASA,GACpF,CACA,SAASk3F,GAAanhD,EAAO/G,GAC3B,OAAO+G,EAAMv/C,MAAK,CAAChS,EAAGqe,KACpB,MAAM44C,EAAKzM,EAAUnsC,EAAIre,EACnBk3D,EAAK1M,EAAUxqD,EAAIqe,EACzB,OAAO44C,EAAGwY,SAAWvY,EAAGuY,OACtBxY,EAAG5hD,MAAQ6hD,EAAG7hD,MACd4hD,EAAGwY,OAASvY,EAAGuY,MAAM,GAE3B,CAqEA,SAASkjC,GAAeC,EAAYrhB,EAAWvxF,EAAGqe,GAChD,OAAOnlB,KAAKiT,IAAIymG,EAAW5yG,GAAIuxF,EAAUvxF,IAAM9G,KAAKiT,IAAIymG,EAAWv0F,GAAIkzE,EAAUlzE,GACnF,CACA,SAASw0F,GAAiBD,EAAYE,GACpCF,EAAW7lG,IAAM7T,KAAKiT,IAAIymG,EAAW7lG,IAAK+lG,EAAW/lG,KACrD6lG,EAAWtpG,KAAOpQ,KAAKiT,IAAIymG,EAAWtpG,KAAMwpG,EAAWxpG,MACvDspG,EAAW5lG,OAAS9T,KAAKiT,IAAIymG,EAAW5lG,OAAQ8lG,EAAW9lG,QAC3D4lG,EAAWppG,MAAQtQ,KAAKiT,IAAIymG,EAAWppG,MAAOspG,EAAWtpG,MAC3D,CACA,SAASupG,GAAWxhB,EAAWh0F,EAAQy1G,EAAQloB,GAC7C,MAAM,IAAClK,EAAG,IAAEO,GAAO6xB,EACbJ,EAAarhB,EAAUqhB,WAC7B,IAAK18C,GAAS0qB,GAAM,CACdoyB,EAAOl+D,OACTy8C,EAAU3Q,IAAQoyB,EAAOl+D,MAE3B,MAAMy1C,EAAQO,EAAOkoB,EAAOzoB,QAAU,CAACz1C,KAAM,EAAGyoB,MAAO,GACvDgtB,EAAMz1C,KAAO57C,KAAKiT,IAAIo+E,EAAMz1C,KAAMk+D,EAAOrd,WAAaxU,EAAIr0E,OAASq0E,EAAIt0E,OACvEmmG,EAAOl+D,KAAOy1C,EAAMz1C,KAAOy1C,EAAMhtB,MACjCg0B,EAAU3Q,IAAQoyB,EAAOl+D,IAC3B,CACIqsC,EAAI+iB,YACN2O,GAAiBD,EAAYzxB,EAAI+iB,cAEnC,MAAM+O,EAAW/5G,KAAKiT,IAAI,EAAG5O,EAAO21G,WAAaP,GAAeC,EAAYrhB,EAAW,OAAQ,UACzF4hB,EAAYj6G,KAAKiT,IAAI,EAAG5O,EAAO61G,YAAcT,GAAeC,EAAYrhB,EAAW,MAAO,WAC1F8hB,EAAeJ,IAAa1hB,EAAUlvB,EACtCixC,EAAgBH,IAAc5hB,EAAUvwB,EAG9C,OAFAuwB,EAAUlvB,EAAI4wC,EACd1hB,EAAUvwB,EAAImyC,EACPH,EAAOrd,WACV,CAAC4d,KAAMF,EAAcG,MAAOF,GAC5B,CAACC,KAAMD,EAAeE,MAAOH,EACnC,CAaA,SAASI,GAAW9d,EAAYpE,GAC9B,MAAMqhB,EAAarhB,EAAUqhB,WAQ7B,OAPA,SAA4BnyB,GAC1B,MAAM/jE,EAAS,CAACpT,KAAM,EAAGyD,IAAK,EAAGvD,MAAO,EAAGwD,OAAQ,GAInD,OAHAyzE,EAAU39E,SAAS89E,IACjBlkE,EAAOkkE,GAAO1nF,KAAKiT,IAAIolF,EAAU3Q,GAAMgyB,EAAWhyB,GAAK,IAElDlkE,CACT,CAEIg3F,CADG/d,EACgB,CAAC,OAAQ,SACT,CAAC,MAAO,UACjC,CACA,SAASge,GAASC,EAAOriB,EAAWh0F,EAAQutF,GAC1C,MAAM+oB,EAAa,GACnB,IAAI9xG,EAAGi1D,EAAMg8C,EAAQ7xB,EAAK2yB,EAAOt1C,EACjC,IAAKz8D,EAAI,EAAGi1D,EAAO48C,EAAM35G,OAAQ65G,EAAQ,EAAG/xG,EAAIi1D,IAAQj1D,EAAG,CACzDixG,EAASY,EAAM7xG,GACfo/E,EAAM6xB,EAAO7xB,IACbA,EAAInsE,OACFg+F,EAAOnmG,OAAS0kF,EAAUlvB,EAC1B2wC,EAAOlmG,QAAUykF,EAAUvwB,EAC3ByyC,GAAWT,EAAOrd,WAAYpE,IAEhC,MAAM,KAACgiB,EAAI,MAAEC,GAAST,GAAWxhB,EAAWh0F,EAAQy1G,EAAQloB,GAC5DgpB,GAASP,GAAQM,EAAW55G,OAC5BukE,EAAUA,GAAWg1C,EAChBryB,EAAIgoB,UACP0K,EAAW98G,KAAKi8G,EAEpB,CACA,OAAOc,GAASH,GAASE,EAAYtiB,EAAWh0F,EAAQutF,IAAWtsB,CACrE,CACA,SAASu1C,GAAW5yB,EAAK73E,EAAMyD,EAAKF,EAAOC,GACzCq0E,EAAIp0E,IAAMA,EACVo0E,EAAI73E,KAAOA,EACX63E,EAAI33E,MAAQF,EAAOuD,EACnBs0E,EAAIn0E,OAASD,EAAMD,EACnBq0E,EAAIt0E,MAAQA,EACZs0E,EAAIr0E,OAASA,CACf,CACA,SAASknG,GAAWJ,EAAOriB,EAAWh0F,EAAQutF,GAC5C,MAAMmpB,EAAc12G,EAAO8c,QAC3B,IAAI,EAACpN,EAAC,EAAEC,GAAKqkF,EACb,IAAK,MAAMyhB,KAAUY,EAAO,CAC1B,MAAMzyB,EAAM6xB,EAAO7xB,IACboJ,EAAQO,EAAOkoB,EAAOzoB,QAAU,CAAChtB,MAAO,EAAG22C,OAAQ,EAAGzkC,OAAQ,GAC9DA,EAAUujC,EAAOmB,YAAc5pB,EAAM9a,QAAW,EACtD,GAAIujC,EAAOrd,WAAY,CACrB,MAAM9oF,EAAQ0kF,EAAUlvB,EAAIoN,EACtB3iE,EAASy9E,EAAMz1C,MAAQqsC,EAAIr0E,OAC7B0rD,GAAQ+xB,EAAM3yF,SAChBsV,EAAIq9E,EAAM3yF,OAERupF,EAAIgoB,SACN4K,GAAW5yB,EAAK8yB,EAAY3qG,KAAM4D,EAAG3P,EAAO21G,WAAae,EAAYzqG,MAAQyqG,EAAY3qG,KAAMwD,GAE/FinG,GAAW5yB,EAAKoQ,EAAUjoF,KAAOihF,EAAM2pB,OAAQhnG,EAAGL,EAAOC,GAE3Dy9E,EAAM3yF,MAAQsV,EACdq9E,EAAM2pB,QAAUrnG,EAChBK,EAAIi0E,EAAIn0E,MACV,KAAO,CACL,MAAMF,EAASykF,EAAUvwB,EAAIyO,EACvB5iE,EAAQ09E,EAAMz1C,MAAQqsC,EAAIt0E,MAC5B2rD,GAAQ+xB,EAAM3yF,SAChBqV,EAAIs9E,EAAM3yF,OAERupF,EAAIgoB,SACN4K,GAAW5yB,EAAKl0E,EAAGgnG,EAAYlnG,IAAKF,EAAOtP,EAAO61G,YAAca,EAAYjnG,OAASinG,EAAYlnG,KAEjGgnG,GAAW5yB,EAAKl0E,EAAGskF,EAAUxkF,IAAMw9E,EAAM2pB,OAAQrnG,EAAOC,GAE1Dy9E,EAAM3yF,MAAQqV,EACds9E,EAAM2pB,QAAUpnG,EAChBG,EAAIk0E,EAAI33E,KACV,CACF,CACA+nF,EAAUtkF,EAAIA,EACdskF,EAAUrkF,EAAIA,CAChB,CACA+jE,GAASz+D,IAAI,SAAU,CACrB4hG,aAAa,EACb/5F,QAAS,CACPtN,IAAK,EACLvD,MAAO,EACPwD,OAAQ,EACR1D,KAAM,KAGV,IAAI+qG,GAAU,CACZC,OAAO/iC,EAAO5sE,GACP4sE,EAAMqiC,QACTriC,EAAMqiC,MAAQ,IAEhBjvG,EAAKwkG,SAAWxkG,EAAKwkG,WAAY,EACjCxkG,EAAKiE,SAAWjE,EAAKiE,UAAY,MACjCjE,EAAK8qE,OAAS9qE,EAAK8qE,QAAU,EAC7B9qE,EAAK2oG,QAAU3oG,EAAK2oG,SAAW,WAC7B,MAAO,CAAC,CACNE,EAAG,EACH5mB,KAAK2K,GACH5sF,EAAKiiF,KAAK2K,EACZ,GAEJ,EACAhgB,EAAMqiC,MAAM78G,KAAK4N,EACnB,EACA4vG,UAAUhjC,EAAOijC,GACf,MAAMn/F,EAAQk8D,EAAMqiC,MAAQriC,EAAMqiC,MAAM15G,QAAQs6G,IAAe,GAChD,IAAXn/F,GACFk8D,EAAMqiC,MAAMx+D,OAAO//B,EAAO,EAE9B,EACAi0E,UAAU/X,EAAO5sE,EAAMN,GACrBM,EAAKwkG,SAAW9kG,EAAQ8kG,SACxBxkG,EAAKiE,SAAWvE,EAAQuE,SACxBjE,EAAK8qE,OAASprE,EAAQorE,MACxB,EACAz6D,OAAOu8D,EAAO1kE,EAAOC,EAAQ2nG,GAC3B,IAAKljC,EACH,OAEF,MAAMl3D,EAAUq/D,GAAUnI,EAAMltE,QAAQ2uG,OAAO34F,SACzCq6F,EAAiBx7G,KAAKiT,IAAIU,EAAQwN,EAAQxN,MAAO,GACjD8nG,EAAkBz7G,KAAKiT,IAAIW,EAASuN,EAAQvN,OAAQ,GACpD8mG,EA9LV,SAA0BA,GACxB,MAAMgB,EAnDR,SAAmBhB,GACjB,MAAMgB,EAAc,GACpB,IAAI7yG,EAAGi1D,EAAMmqB,EAAKP,EAAK2J,EAAO4pB,EAC9B,IAAKpyG,EAAI,EAAGi1D,GAAQ48C,GAAS,IAAI35G,OAAQ8H,EAAIi1D,IAAQj1D,EACnDo/E,EAAMyyB,EAAM7xG,KACV6G,SAAUg4E,EAAKv8E,SAAUkmF,QAAO4pB,cAAc,IAAMhzB,GACtDyzB,EAAY79G,KAAK,CACfse,MAAOtT,EACPo/E,MACAP,MACA+U,WAAYxU,EAAIsV,eAChBhnB,OAAQ0R,EAAI1R,OACZ8a,MAAOA,GAAU3J,EAAM2J,EACvB4pB,gBAGJ,OAAOS,CACT,CAkCsBC,CAAUjB,GACxBzK,EAAWuJ,GAAakC,EAAYp2G,QAAOu0C,GAAQA,EAAKouC,IAAIgoB,YAAW,GACvE7/F,EAAOopG,GAAaF,GAAiBoC,EAAa,SAAS,GAC3DprG,EAAQkpG,GAAaF,GAAiBoC,EAAa,UACnD7nG,EAAM2lG,GAAaF,GAAiBoC,EAAa,QAAQ,GACzD5nG,EAAS0lG,GAAaF,GAAiBoC,EAAa,WACpDE,EAAmBrC,GAA4BmC,EAAa,KAC5DG,EAAiBtC,GAA4BmC,EAAa,KAChE,MAAO,CACLzL,WACA6L,WAAY1rG,EAAKgC,OAAOyB,GACxBkoG,eAAgBzrG,EAAM8B,OAAOypG,GAAgBzpG,OAAO0B,GAAQ1B,OAAOwpG,GACnEvjB,UAAWihB,GAAiBoC,EAAa,aACzCM,SAAU5rG,EAAKgC,OAAO9B,GAAO8B,OAAOypG,GACpCpf,WAAY5oF,EAAIzB,OAAO0B,GAAQ1B,OAAOwpG,GAE1C,CA6KkBK,CAAiB5jC,EAAMqiC,OAC/BwB,EAAgBxB,EAAMsB,SACtBG,EAAkBzB,EAAMje,WAC9Bh/B,GAAK4a,EAAMqiC,OAAOzyB,IACgB,mBAArBA,EAAImjB,cACbnjB,EAAImjB,cACN,IAEF,MAAMgR,EAA0BF,EAAc/jG,QAAO,CAACqqF,EAAO3oD,IAC3DA,EAAKouC,IAAI98E,UAAwC,IAA7B0uC,EAAKouC,IAAI98E,QAAQs6F,QAAoBjD,EAAQA,EAAQ,GAAG,IAAM,EAC9En+F,EAASkE,OAAOm4C,OAAO,CAC3Bs5D,WAAYrmG,EACZumG,YAAatmG,EACbuN,UACAq6F,iBACAC,kBACAY,aAAcb,EAAiB,EAAIY,EACnCE,cAAeb,EAAkB,IAE7B/B,EAAanxG,OAAOiS,OAAO,CAAC,EAAG2G,GACrCw4F,GAAiBD,EAAYl5B,GAAU+6B,IACvC,MAAMljB,EAAY9vF,OAAOiS,OAAO,CAC9Bk/F,aACAvwC,EAAGqyC,EACH1zC,EAAG2zC,EACH1nG,EAAGoN,EAAQ/Q,KACX4D,EAAGmN,EAAQtN,KACVsN,GACGywE,EA7OV,SAAuBupB,EAAS92G,GAC9B,MAAMutF,EAdR,SAAqBupB,GACnB,MAAMvpB,EAAS,CAAC,EAChB,IAAK,MAAM/3C,KAAQshE,EAAS,CAC1B,MAAM,MAAC9pB,EAAK,IAAE3J,EAAG,YAAEuzB,GAAephE,EAClC,IAAKw3C,IAAUgoB,GAAiB53D,SAASimC,GACvC,SAEF,MAAM7E,EAAS+O,EAAOP,KAAWO,EAAOP,GAAS,CAAChtB,MAAO,EAAG22C,OAAQ,EAAGzkC,OAAQ,EAAG36B,KAAM,IACxFinC,EAAOxe,QACPwe,EAAOtM,QAAU0kC,CACnB,CACA,OAAOrpB,CACT,CAEiB2qB,CAAYpB,IACrB,aAACkB,EAAY,cAAEC,GAAiBj4G,EACtC,IAAIwE,EAAGi1D,EAAMg8C,EACb,IAAKjxG,EAAI,EAAGi1D,EAAOq9C,EAAQp6G,OAAQ8H,EAAIi1D,IAAQj1D,EAAG,CAChDixG,EAASqB,EAAQtyG,GACjB,MAAM,SAAConG,GAAY6J,EAAO7xB,IACpBoJ,EAAQO,EAAOkoB,EAAOzoB,OACtB9C,EAAS8C,GAASyoB,EAAOmB,YAAc5pB,EAAM9a,OAC/CujC,EAAOrd,YACTqd,EAAOnmG,MAAQ46E,EAASA,EAAS8tB,EAAepM,GAAY5rG,EAAOm3G,eACnE1B,EAAOlmG,OAAS0oG,IAEhBxC,EAAOnmG,MAAQ0oG,EACfvC,EAAOlmG,OAAS26E,EAASA,EAAS+tB,EAAgBrM,GAAY5rG,EAAOo3G,gBAEzE,CACA,OAAO7pB,CACT,CA2NmB4qB,CAAcN,EAAc9pG,OAAO+pG,GAAkB93G,GACpEo2G,GAASC,EAAMzK,SAAU5X,EAAWh0F,EAAQutF,GAC5C6oB,GAASyB,EAAe7jB,EAAWh0F,EAAQutF,GACvC6oB,GAAS0B,EAAiB9jB,EAAWh0F,EAAQutF,IAC/C6oB,GAASyB,EAAe7jB,EAAWh0F,EAAQutF,GA1KjD,SAA0ByG,GACxB,MAAMqhB,EAAarhB,EAAUqhB,WAC7B,SAAS+C,EAAU/0B,GACjB,MAAMskB,EAAShsG,KAAKiT,IAAIymG,EAAWhyB,GAAO2Q,EAAU3Q,GAAM,GAE1D,OADA2Q,EAAU3Q,IAAQskB,EACXA,CACT,CACA3T,EAAUrkF,GAAKyoG,EAAU,OACzBpkB,EAAUtkF,GAAK0oG,EAAU,QACzBA,EAAU,SACVA,EAAU,SACZ,CAiKIC,CAAiBrkB,GACjByiB,GAAWJ,EAAMoB,WAAYzjB,EAAWh0F,EAAQutF,GAChDyG,EAAUtkF,GAAKskF,EAAUlvB,EACzBkvB,EAAUrkF,GAAKqkF,EAAUvwB,EACzBgzC,GAAWJ,EAAMqB,eAAgB1jB,EAAWh0F,EAAQutF,GACpDvZ,EAAMggB,UAAY,CAChBjoF,KAAMioF,EAAUjoF,KAChByD,IAAKwkF,EAAUxkF,IACfvD,MAAO+nF,EAAUjoF,KAAOioF,EAAUlvB,EAClCr1D,OAAQukF,EAAUxkF,IAAMwkF,EAAUvwB,EAClCl0D,OAAQykF,EAAUvwB,EAClBn0D,MAAO0kF,EAAUlvB,GAEnB1L,GAAKi9C,EAAMriB,WAAYyhB,IACrB,MAAM7xB,EAAM6xB,EAAO7xB,IACnB1/E,OAAOiS,OAAOytE,EAAK5P,EAAMggB,WACzBpQ,EAAInsE,OAAOu8E,EAAUlvB,EAAGkvB,EAAUvwB,EAAG,CAAC13D,KAAM,EAAGyD,IAAK,EAAGvD,MAAO,EAAGwD,OAAQ,GAAG,GAEhF,GAGF,MAAM6oG,GACJC,eAAejhC,EAAQ4nB,GAAc,CACrCsZ,eAAejoE,GACb,OAAO,CACT,CACA71C,iBAAiBs5E,EAAO90E,EAAM8/D,GAAW,CACzClkE,oBAAoBk5E,EAAO90E,EAAM8/D,GAAW,CAC5CkV,sBACE,OAAO,CACT,CACAukC,eAAez1G,EAASsM,EAAOC,EAAQ2vF,GAGrC,OAFA5vF,EAAQ3T,KAAKiT,IAAI,EAAGU,GAAStM,EAAQsM,OACrCC,EAASA,GAAUvM,EAAQuM,OACpB,CACLD,QACAC,OAAQ5T,KAAKiT,IAAI,EAAGswF,EAAcvjG,KAAK67B,MAAMloB,EAAQ4vF,GAAe3vF,GAExE,CACAmpG,WAAWphC,GACT,OAAO,CACT,CACAqhC,aAAa/sB,GACb,EAGF,MAAMgtB,WAAsBN,GAC1BC,eAAenxG,GACb,OAAOA,GAAQA,EAAKmwE,YAAcnwE,EAAKmwE,WAAW,OAAS,IAC7D,CACAohC,aAAa/sB,GACXA,EAAO9kF,QAAQ8sE,WAAY,CAC7B,EAGF,MACMilC,GAAc,CAClBC,WAAY,YACZC,UAAW,YACXC,SAAU,UACVC,aAAc,aACdC,YAAa,YACbC,YAAa,YACbC,UAAW,UACXC,aAAc,WACdC,WAAY,YAERC,GAAgBl5G,GAAmB,OAAVA,GAA4B,KAAVA,EAoC3Cm5G,KAAuB30B,IAA+B,CAACvsE,SAAS,GAItE,SAASmhG,GAAezlC,EAAO90E,EAAM8/D,GACnCgV,EAAMsD,OAAOx8E,oBAAoBoE,EAAM8/D,EAAUw6C,GACnD,CAYA,SAASE,GAAiBC,EAAUriC,GAClC,IAAK,MAAMppE,KAAQyrG,EACjB,GAAIzrG,IAASopE,GAAUppE,EAAK1E,SAAS8tE,GACnC,OAAO,CAGb,CACA,SAASsiC,GAAqB5lC,EAAO90E,EAAM8/D,GACzC,MAAMsY,EAAStD,EAAMsD,OACfuiC,EAAW,IAAIt1D,kBAAiBvrB,IACpC,IAAI8gF,GAAU,EACd,IAAK,MAAMtiB,KAASx+D,EAClB8gF,EAAUA,GAAWJ,GAAiBliB,EAAMpyC,WAAYkyB,GACxDwiC,EAAUA,IAAYJ,GAAiBliB,EAAMtyC,aAAcoyB,GAEzDwiC,GACF96C,GACF,IAGF,OADA66C,EAASv+E,QAAQn/B,SAAU,CAACioD,WAAW,EAAMC,SAAS,IAC/Cw1D,CACT,CACA,SAASE,GAAqB/lC,EAAO90E,EAAM8/D,GACzC,MAAMsY,EAAStD,EAAMsD,OACfuiC,EAAW,IAAIt1D,kBAAiBvrB,IACpC,IAAI8gF,GAAU,EACd,IAAK,MAAMtiB,KAASx+D,EAClB8gF,EAAUA,GAAWJ,GAAiBliB,EAAMtyC,aAAcoyB,GAC1DwiC,EAAUA,IAAYJ,GAAiBliB,EAAMpyC,WAAYkyB,GAEvDwiC,GACF96C,GACF,IAGF,OADA66C,EAASv+E,QAAQn/B,SAAU,CAACioD,WAAW,EAAMC,SAAS,IAC/Cw1D,CACT,CACA,MAAMG,GAAqB,IAAI3lG,IAC/B,IAAI4lG,GAAsB,EAC1B,SAASC,KACP,MAAM7/F,EAAMtR,OAAOuR,iBACfD,IAAQ4/F,KAGZA,GAAsB5/F,EACtB2/F,GAAmBz0G,SAAQ,CAACmZ,EAAQs1D,KAC9BA,EAAMmD,0BAA4B98D,GACpCqE,GACF,IAEJ,CAaA,SAASy7F,GAAqBnmC,EAAO90E,EAAM8/D,GACzC,MAAMsY,EAAStD,EAAMsD,OACf37B,EAAY27B,GAAUsL,GAAetL,GAC3C,IAAK37B,EACH,OAEF,MAAMj9B,EAAS2gD,IAAU,CAAC/vD,EAAOC,KAC/B,MAAMu1D,EAAInpB,EAAUrgC,YACpB0jD,EAAS1vD,EAAOC,GACZu1D,EAAInpB,EAAUrgC,aAChB0jD,GACF,GACCj2D,QACG8wG,EAAW,IAAIO,gBAAephF,IAClC,MAAMw+D,EAAQx+D,EAAQ,GAChB1pB,EAAQkoF,EAAM6iB,YAAY/qG,MAC1BC,EAASioF,EAAM6iB,YAAY9qG,OACnB,IAAVD,GAA0B,IAAXC,GAGnBmP,EAAOpP,EAAOC,EAAO,IAIvB,OAFAsqG,EAASv+E,QAAQqgB,GAlCnB,SAAuCq4B,EAAOt1D,GACvCs7F,GAAmBziE,MACtBxuC,OAAOrO,iBAAiB,SAAUw/G,IAEpCF,GAAmB/kG,IAAI++D,EAAOt1D,EAChC,CA8BE47F,CAA8BtmC,EAAOt1D,GAC9Bm7F,CACT,CACA,SAASU,GAAgBvmC,EAAO90E,EAAM26G,GAChCA,GACFA,EAASv6G,aAEE,WAATJ,GApCN,SAAyC80E,GACvCgmC,GAAmB38E,OAAO22C,GACrBgmC,GAAmBziE,MACtBxuC,OAAOjO,oBAAoB,SAAUo/G,GAEzC,CAgCIM,CAAgCxmC,EAEpC,CACA,SAASymC,GAAqBzmC,EAAO90E,EAAM8/D,GACzC,MAAMsY,EAAStD,EAAMsD,OACfoG,EAAQre,IAAWvgE,IACL,OAAdk1E,EAAMQ,KACRxV,EAhHN,SAAyBlgE,EAAOk1E,GAC9B,MAAM90E,EAAO25G,GAAY/5G,EAAMI,OAASJ,EAAMI,MACxC,EAACwQ,EAAC,EAAEC,GAAK2zE,GAAoBxkF,EAAOk1E,GAC1C,MAAO,CACL90E,OACA80E,QACA0mC,OAAQ57G,EACR4Q,OAASvN,IAANuN,EAAkBA,EAAI,KACzBC,OAASxN,IAANwN,EAAkBA,EAAI,KAE7B,CAsGegrG,CAAgB77G,EAAOk1E,GAClC,GACCA,GAAQ9xE,IACT,MAAMpD,EAAQoD,EAAK,GACnB,MAAO,CAACpD,EAAOA,EAAMglF,QAAShlF,EAAMilF,QAAQ,IAG9C,OA7HF,SAAqB71E,EAAMhP,EAAM8/D,GAC/B9wD,EAAKxT,iBAAiBwE,EAAM8/D,EAAUw6C,GACxC,CA0HEoB,CAAYtjC,EAAQp4E,EAAMw+E,GACnBA,CACT,CACA,MAAMm9B,WAAoBvC,GACxBC,eAAejhC,EAAQ4nB,GACrB,MAAM3uD,EAAU+mC,GAAUA,EAAOC,YAAcD,EAAOC,WAAW,MACjE,OAAIhnC,GAAWA,EAAQ+mC,SAAWA,GAtKtC,SAAoBA,EAAQ4nB,GAC1B,MAAMlgF,EAAQs4D,EAAOt4D,MACf87F,EAAexjC,EAAOn0E,aAAa,UACnC43G,EAAczjC,EAAOn0E,aAAa,SAcxC,GAbAm0E,EAAkB,SAAI,CACpB1jC,QAAS,CACPrkC,OAAQurG,EACRxrG,MAAOyrG,EACP/7F,MAAO,CACLoiF,QAASpiF,EAAMoiF,QACf7xF,OAAQyP,EAAMzP,OACdD,MAAO0P,EAAM1P,SAInB0P,EAAMoiF,QAAUpiF,EAAMoiF,SAAW,QACjCpiF,EAAMykE,UAAYzkE,EAAMykE,WAAa,aACjC81B,GAAcwB,GAAc,CAC9B,MAAMC,EAAej2B,GAAazN,EAAQ,cACrBn1E,IAAjB64G,IACF1jC,EAAOhoE,MAAQ0rG,EAEnB,CACA,GAAIzB,GAAcuB,GAChB,GAA4B,KAAxBxjC,EAAOt4D,MAAMzP,OACf+nE,EAAO/nE,OAAS+nE,EAAOhoE,OAAS4vF,GAAe,OAC1C,CACL,MAAM+b,EAAgBl2B,GAAazN,EAAQ,eACrBn1E,IAAlB84G,IACF3jC,EAAO/nE,OAAS0rG,EAEpB,CAGJ,CAqIMC,CAAW5jC,EAAQ4nB,GACZ3uD,GAEF,IACT,CACAioE,eAAejoE,GACb,MAAM+mC,EAAS/mC,EAAQ+mC,OACvB,IAAKA,EAAkB,SACrB,OAAO,EAET,MAAM1jC,EAAU0jC,EAAkB,SAAE1jC,QACpC,CAAC,SAAU,SAASruC,SAASupB,IAC3B,MAAMzuB,EAAQuzC,EAAQ9kB,GAClB4pC,GAAcr4D,GAChBi3E,EAAOr4D,gBAAgB6P,GAEvBwoD,EAAOpvE,aAAa4mB,EAAMzuB,EAC5B,IAEF,MAAM2e,EAAQ40B,EAAQ50B,OAAS,CAAC,EAMhC,OALA9a,OAAOU,KAAKoa,GAAOzZ,SAASnF,IAC1Bk3E,EAAOt4D,MAAM5e,GAAO4e,EAAM5e,EAAI,IAEhCk3E,EAAOhoE,MAAQgoE,EAAOhoE,aACfgoE,EAAkB,UAClB,CACT,CACA58E,iBAAiBs5E,EAAO90E,EAAM8/D,GAC5B1lE,KAAKwB,oBAAoBk5E,EAAO90E,GAChC,MAAMi8G,EAAUnnC,EAAMonC,WAAapnC,EAAMonC,SAAW,CAAC,GAM/Cz8G,EALW,CACf08G,OAAQzB,GACR0B,OAAQvB,GACRr7F,OAAQy7F,IAEej7G,IAASu7G,GAClCU,EAAQj8G,GAAQP,EAAQq1E,EAAO90E,EAAM8/D,EACvC,CACAlkE,oBAAoBk5E,EAAO90E,GACzB,MAAMi8G,EAAUnnC,EAAMonC,WAAapnC,EAAMonC,SAAW,CAAC,GAC/C19B,EAAQy9B,EAAQj8G,GACjBw+E,KAGY,CACf29B,OAAQd,GACRe,OAAQf,GACR77F,OAAQ67F,IAEer7G,IAASu6G,IAC1BzlC,EAAO90E,EAAMw+E,GACrBy9B,EAAQj8G,QAAQiD,EAClB,CACA+xE,sBACE,OAAOnrE,OAAOuR,gBAChB,CACAm+F,eAAenhC,EAAQhoE,EAAOC,EAAQ2vF,GACpC,ODjrFJ,SAAwB5nB,EAAQikC,EAASC,EAAUtc,GACjD,MAAMlgF,EAAQ,GAAiBs4D,GACzB2vB,EAAU9jB,GAAmBnkE,EAAO,UACpC27D,EAAWmI,GAAc9jE,EAAM27D,SAAUrD,EAAQ,gBAAkB/b,GACnEwiC,EAAYjb,GAAc9jE,EAAM++E,UAAWzmB,EAAQ,iBAAmB/b,GACtEkgD,EA/BR,SAA0BnkC,EAAQhoE,EAAOC,GACvC,IAAIorE,EAAUojB,EACd,QAAc57F,IAAVmN,QAAkCnN,IAAXoN,EAAsB,CAC/C,MAAMosC,EAAYinC,GAAetL,GACjC,GAAK37B,EAGE,CACL,MAAM1sC,EAAO0sC,EAAU5sC,wBACjB2sG,EAAiB,GAAiB//D,GAClCggE,EAAkBx4B,GAAmBu4B,EAAgB,SAAU,SAC/DE,EAAmBz4B,GAAmBu4B,EAAgB,WAC5DpsG,EAAQL,EAAKK,MAAQssG,EAAiBtsG,MAAQqsG,EAAgBrsG,MAC9DC,EAASN,EAAKM,OAASqsG,EAAiBrsG,OAASosG,EAAgBpsG,OACjEorE,EAAWmI,GAAc44B,EAAe/gC,SAAUh/B,EAAW,eAC7DoiD,EAAYjb,GAAc44B,EAAe3d,UAAWpiD,EAAW,eACjE,MAXErsC,EAAQgoE,EAAOh8D,YACf/L,EAAS+nE,EAAO/7D,YAWpB,CACA,MAAO,CACLjM,QACAC,SACAorE,SAAUA,GAAYpf,GACtBwiC,UAAWA,GAAaxiC,GAE5B,CAOwBsgD,CAAiBvkC,EAAQikC,EAASC,GACxD,IAAI,MAAClsG,EAAK,OAAEC,GAAUksG,EACtB,GAAwB,gBAApBz8F,EAAMykE,UAA6B,CACrC,MAAME,EAAUR,GAAmBnkE,EAAO,SAAU,SAC9C0kE,EAAWP,GAAmBnkE,EAAO,WAC3C1P,GAASo0E,EAASp0E,MAAQq0E,EAAQr0E,MAClCC,GAAUm0E,EAASn0E,OAASo0E,EAAQp0E,MACtC,CAQA,OAPAD,EAAQ3T,KAAKiT,IAAI,EAAGU,EAAQ23F,EAAQ33F,OACpCC,EAAS5T,KAAKiT,IAAI,EAAGswF,EAAcvjG,KAAK67B,MAAMloB,EAAQ4vF,GAAe3vF,EAAS03F,EAAQ13F,QACtFD,EAAQ+0E,GAAO1oF,KAAKE,IAAIyT,EAAOqrE,EAAU8gC,EAAc9gC,WACvDprE,EAAS80E,GAAO1oF,KAAKE,IAAI0T,EAAQwuF,EAAW0d,EAAc1d,YACtDzuF,IAAUC,IACZA,EAAS80E,GAAO/0E,EAAQ,IAEnB,CACLA,QACAC,SAEJ,CCypFWkpG,CAAenhC,EAAQhoE,EAAOC,EAAQ2vF,EAC/C,CACAwZ,WAAWphC,GACT,MAAM37B,EAAYinC,GAAetL,GACjC,SAAU37B,IAAaA,EAAUrlB,YACnC,EAUF,MAAMwlF,GACJ9hH,cACEV,KAAK2N,MAAQ,EACf,CACAvH,OAAOs0E,EAAO+nC,EAAM75G,EAAMjB,GACX,eAAT86G,IACFziH,KAAK2N,MAAQ3N,KAAK0iH,mBAAmBhoC,GAAO,GAC5C16E,KAAKqvF,QAAQrvF,KAAK2N,MAAO+sE,EAAO,YAElC,MAAMvoB,EAAcxqD,EAAS3H,KAAKq6E,aAAaK,GAAO/yE,OAAOA,GAAU3H,KAAKq6E,aAAaK,GACnFx/D,EAASlb,KAAKqvF,QAAQl9B,EAAauoB,EAAO+nC,EAAM75G,GAKtD,MAJa,iBAAT65G,IACFziH,KAAKqvF,QAAQl9B,EAAauoB,EAAO,QACjC16E,KAAKqvF,QAAQrvF,KAAK2N,MAAO+sE,EAAO,cAE3Bx/D,CACT,CACAm0E,QAAQl9B,EAAauoB,EAAO+nC,EAAM75G,GAChCA,EAAOA,GAAQ,CAAC,EAChB,IAAK,MAAMkE,KAAcqlD,EAAa,CACpC,MAAMwwD,EAAS71G,EAAW61G,OAG1B,IAAyC,IAArCt3E,GAFWs3E,EAAOF,GACP,CAAC/nC,EAAO9xE,EAAMkE,EAAWU,SACXm1G,IAAqB/5G,EAAKg0B,WACrD,OAAO,CAEX,CACA,OAAO,CACT,CACAwM,aACOg2B,GAAcp/D,KAAKw9F,UACtBx9F,KAAK4iH,UAAY5iH,KAAKw9F,OACtBx9F,KAAKw9F,YAAS30F,EAElB,CACAwxE,aAAaK,GACX,GAAI16E,KAAKw9F,OACP,OAAOx9F,KAAKw9F,OAEd,MAAMrrC,EAAcnyD,KAAKw9F,OAASx9F,KAAK0iH,mBAAmBhoC,GAE1D,OADA16E,KAAK6iH,oBAAoBnoC,GAClBvoB,CACT,CACAuwD,mBAAmBhoC,EAAOj9B,GACxB,MAAM60C,EAAS5X,GAASA,EAAM4X,OACxB9kF,EAAUiyD,GAAe6yB,EAAO9kF,SAAW8kF,EAAO9kF,QAAQouE,QAAS,CAAC,GACpEA,EAWV,SAAoB0W,GAClB,MAAMwwB,EAAW,CAAC,EACZlnC,EAAU,GACVtwE,EAAOV,OAAOU,KAAKwsG,GAASl8B,QAAQruE,OAC1C,IAAK,IAAIrC,EAAI,EAAGA,EAAII,EAAKlI,OAAQ8H,IAC/B0wE,EAAQ17E,KAAK43G,GAASS,UAAUjtG,EAAKJ,KAEvC,MAAMuxE,EAAQ6V,EAAO1W,SAAW,GAChC,IAAK,IAAI1wE,EAAI,EAAGA,EAAIuxE,EAAMr5E,OAAQ8H,IAAK,CACrC,MAAMy3G,EAASlmC,EAAMvxE,IACY,IAA7B0wE,EAAQv4E,QAAQs/G,KAClB/mC,EAAQ17E,KAAKyiH,GACbG,EAASH,EAAO30G,KAAM,EAE1B,CACA,MAAO,CAAC4tE,UAASknC,WACnB,CA3BoBC,CAAWzwB,GAC3B,OAAmB,IAAZ9kF,GAAsBiwC,EAoCjC,SAA2Bi9B,GAAO,QAACkB,EAAO,SAAEknC,GAAWt1G,EAASiwC,GAC9D,MAAMviC,EAAS,GACT+7B,EAAUyjC,EAAMuD,aACtB,IAAK,MAAM0kC,KAAU/mC,EAAS,CAC5B,MAAM5tE,EAAK20G,EAAO30G,GACZ0yE,EAAOsiC,GAAQx1G,EAAQQ,GAAKyvC,GACrB,OAATijC,GAGJxlE,EAAOhb,KAAK,CACVyiH,SACAn1G,QAASy1G,GAAWvoC,EAAM4X,OAAQ,CAACqwB,SAAQlmC,MAAOqmC,EAAS90G,IAAM0yE,EAAMzpC,IAE3E,CACA,OAAO/7B,CACT,CAnD4CgoG,CAAkBxoC,EAAOkB,EAASpuE,EAASiwC,GAAhD,EACrC,CACAolE,oBAAoBnoC,GAClB,MAAMyoC,EAAsBnjH,KAAK4iH,WAAa,GACxCzwD,EAAcnyD,KAAKw9F,OACnBoS,EAAO,CAACzmG,EAAGqe,IAAMre,EAAExB,QAAOyO,IAAMoR,EAAEvL,MAAK5F,GAAKD,EAAEusG,OAAO30G,KAAOqI,EAAEssG,OAAO30G,OAC3EhO,KAAKqvF,QAAQugB,EAAKuT,EAAqBhxD,GAAcuoB,EAAO,QAC5D16E,KAAKqvF,QAAQugB,EAAKz9C,EAAagxD,GAAsBzoC,EAAO,QAC9D,EAmBF,SAASsoC,GAAQx1G,EAASiwC,GACxB,OAAKA,IAAmB,IAAZjwC,GAGI,IAAZA,EACK,CAAC,EAEHA,EALE,IAMX,CAiBA,SAASy1G,GAAW3wB,GAAQ,OAACqwB,EAAM,MAAElmC,GAAQiE,EAAMzpC,GACjD,MAAM3rC,EAAOgnF,EAAO8wB,gBAAgBT,GAC9Bp/B,EAAS+O,EAAOoG,gBAAgBhY,EAAMp1E,GAI5C,OAHImxE,GAASkmC,EAAOvoC,UAClBmJ,EAAOrjF,KAAKyiH,EAAOvoC,UAEdkY,EAAOqG,eAAepV,EAAQtsC,EAAS,CAAC,IAAK,CAClDyuC,YAAY,EACZC,WAAW,EACXF,SAAS,GAEb,CAEA,SAAS49B,GAAaz9G,EAAM4H,GAC1B,MAAM81G,EAAkBlpC,GAASK,SAAS70E,IAAS,CAAC,EAEpD,QADwB4H,EAAQitE,UAAY,CAAC,GAAG70E,IAAS,CAAC,GACpCy1E,WAAa7tE,EAAQ6tE,WAAaioC,EAAgBjoC,WAAa,GACvF,CAqBA,SAASkoC,GAAcv1G,EAAIw1G,GACzB,MAAW,MAAPx1G,GAAqB,MAAPA,EACTA,EAEFw1G,EAAa7+F,OAXH,SADO5S,EAYqByxG,EAAazxG,WAXnB,WAAbA,EACjB,IAEQ,SAAbA,GAAoC,UAAbA,EAClB,SADT,IAQuE/D,EAAGw7C,OAAO,GAAGtkD,cAZtF,IAA0B6M,CAa1B,CAuCA,SAAS0xG,GAAYnxB,GACnB,MAAM9kF,EAAU8kF,EAAO9kF,UAAY8kF,EAAO9kF,QAAU,CAAC,GACrDA,EAAQouE,QAAUnc,GAAejyD,EAAQouE,QAAS,CAAC,GACnDpuE,EAAQuuE,OAzCV,SAA0BuW,EAAQ9kF,GAChC,MAAMk2G,EAAgBzpC,GAAUqY,EAAO1sF,OAAS,CAACm2E,OAAQ,CAAC,GACpD4nC,EAAen2G,EAAQuuE,QAAU,CAAC,EAClC6nC,EAAiBP,GAAa/wB,EAAO1sF,KAAM4H,GAC3Cq2G,EAAWj5G,OAAOxC,OAAO,MACzB2zE,EAASnxE,OAAOxC,OAAO,MA+B7B,OA9BAwC,OAAOU,KAAKq4G,GAAc13G,SAAQ+B,IAChC,MAAM81G,EAAYH,EAAa31G,GAC/B,IAAKqxD,GAASykD,GACZ,OAAOlkH,QAAQ4E,MAAM,0CAA0CwJ,KAEjE,GAAI81G,EAAU/+B,OACZ,OAAOnlF,QAAQqjD,KAAK,kDAAkDj1C,KAExE,MAAM2W,EAAO4+F,GAAcv1G,EAAI81G,GACzBC,EAhCV,SAAmCp/F,EAAM02D,GACvC,OAAO12D,IAAS02D,EAAY,UAAY,SAC1C,CA8BsB2oC,CAA0Br/F,EAAMi/F,GAC5CK,EAAsBP,EAAc3nC,QAAU,CAAC,EACrD8nC,EAASl/F,GAAQk/F,EAASl/F,IAAS3W,EACnC+tE,EAAO/tE,GAAMgzD,GAAQp2D,OAAOxC,OAAO,MAAO,CAAC,CAACuc,QAAOm/F,EAAWG,EAAoBt/F,GAAOs/F,EAAoBF,IAAY,IAE3HzxB,EAAOzuF,KAAK42E,SAASxuE,SAAQq7C,IAC3B,MAAM1hD,EAAO0hD,EAAQ1hD,MAAQ0sF,EAAO1sF,KAC9By1E,EAAY/zB,EAAQ+zB,WAAagoC,GAAaz9G,EAAM4H,GAEpDy2G,GADkBhqC,GAAUr0E,IAAS,CAAC,GACAm2E,QAAU,CAAC,EACvDnxE,OAAOU,KAAK24G,GAAqBh4G,SAAQi4G,IACvC,MAAMv/F,EApDZ,SAAmC3W,EAAIqtE,GACrC,IAAI12D,EAAO3W,EAMX,MALW,YAAPA,EACF2W,EAAO02D,EACS,YAAPrtE,IACT2W,EAAqB,MAAd02D,EAAoB,IAAM,KAE5B12D,CACT,CA4CmBw/F,CAA0BD,EAAW7oC,GAC5CrtE,EAAKs5C,EAAQ3iC,EAAO,WAAak/F,EAASl/F,IAASA,EACzDo3D,EAAO/tE,GAAM+tE,EAAO/tE,IAAOpD,OAAOxC,OAAO,MACzC44D,GAAQ+a,EAAO/tE,GAAK,CAAC,CAAC2W,QAAOg/F,EAAa31G,GAAKi2G,EAAoBC,IAAY,GAC/E,IAEJt5G,OAAOU,KAAKywE,GAAQ9vE,SAAQnF,IAC1B,MAAMg1E,EAAQC,EAAOj1E,GACrBk6D,GAAQ8a,EAAO,CAAC1B,GAAS2B,OAAOD,EAAMl2E,MAAOw0E,GAAS0B,OAAO,IAExDC,CACT,CAImBqoC,CAAiB9xB,EAAQ9kF,EAC5C,CACA,SAAS62G,GAASxgH,GAIhB,OAHAA,EAAOA,GAAQ,CAAC,GACX42E,SAAW52E,EAAK42E,UAAY,GACjC52E,EAAKo1F,OAASp1F,EAAKo1F,QAAU,GACtBp1F,CACT,CAOA,MAAMygH,GAAW,IAAIvpG,IACfwpG,GAAa,IAAItpG,IACvB,SAASupG,GAAWv7D,EAAUw7D,GAC5B,IAAIn5G,EAAOg5G,GAAS5oG,IAAIutC,GAMxB,OALK39C,IACHA,EAAOm5G,IACPH,GAAS3oG,IAAIstC,EAAU39C,GACvBi5G,GAAWh8G,IAAI+C,IAEVA,CACT,CACA,MAAMo5G,GAAa,CAAC/oG,EAAKrP,EAAKxF,KAC5B,MAAM45E,EAAOvf,GAAiB70D,EAAKxF,QACtB+B,IAAT63E,GACF/kE,EAAIpT,IAAIm4E,EACV,EAEF,MAAMikC,GACJjkH,YAAY4xF,GACVtyF,KAAK4kH,QAzBT,SAAoBtyB,GAIlB,OAHAA,EAASA,GAAU,CAAC,GACbzuF,KAAOwgH,GAAS/xB,EAAOzuF,MAC9B4/G,GAAYnxB,GACLA,CACT,CAoBmBuyB,CAAWvyB,GAC1BtyF,KAAK8kH,YAAc,IAAI/pG,IACvB/a,KAAK+kH,eAAiB,IAAIhqG,GAC5B,CACI4/D,eACF,OAAO36E,KAAK4kH,QAAQjqC,QACtB,CACI/0E,WACF,OAAO5F,KAAK4kH,QAAQh/G,IACtB,CACIA,SAAKA,GACP5F,KAAK4kH,QAAQh/G,KAAOA,CACtB,CACI/B,WACF,OAAO7D,KAAK4kH,QAAQ/gH,IACtB,CACIA,SAAKA,GACP7D,KAAK4kH,QAAQ/gH,KAAOwgH,GAASxgH,EAC/B,CACI2J,cACF,OAAOxN,KAAK4kH,QAAQp3G,OACtB,CACIA,YAAQA,GACVxN,KAAK4kH,QAAQp3G,QAAUA,CACzB,CACIouE,cACF,OAAO57E,KAAK4kH,QAAQhpC,OACtB,CACAz9D,SACE,MAAMm0E,EAAStyF,KAAK4kH,QACpB5kH,KAAK4gD,aACL6iE,GAAYnxB,EACd,CACA1xC,aACE5gD,KAAK8kH,YAAYxmE,QACjBt+C,KAAK+kH,eAAezmE,OACtB,CACAm6C,iBAAiBusB,GACf,OAAOR,GAAWQ,GAChB,IAAM,CAAC,CACL,YAAYA,IACZ,MAEN,CACAzpB,0BAA0BypB,EAAa7wG,GACrC,OAAOqwG,GAAW,GAAGQ,gBAA0B7wG,KAC7C,IAAM,CACJ,CACE,YAAY6wG,iBAA2B7wG,IACvC,eAAeA,KAEjB,CACE,YAAY6wG,IACZ,MAGR,CACA5pB,wBAAwB4pB,EAAaj1E,GACnC,OAAOy0E,GAAW,GAAGQ,KAAej1E,KAClC,IAAM,CAAC,CACL,YAAYi1E,cAAwBj1E,IACpC,YAAYi1E,IACZ,YAAYj1E,IACZ,MAEN,CACAqzE,gBAAgBT,GACd,MAAM30G,EAAK20G,EAAO30G,GAElB,OAAOw2G,GAAW,GADLxkH,KAAK4F,eACkBoI,KAClC,IAAM,CAAC,CACL,WAAWA,OACR20G,EAAOsC,wBAA0B,MAE1C,CACAC,cAAcC,EAAWC,GACvB,MAAMN,EAAc9kH,KAAK8kH,YACzB,IAAIviE,EAAQuiE,EAAYppG,IAAIypG,GAK5B,OAJK5iE,IAAS6iE,IACZ7iE,EAAQ,IAAIxnC,IACZ+pG,EAAYnpG,IAAIwpG,EAAW5iE,IAEtBA,CACT,CACAm2C,gBAAgBysB,EAAWE,EAAUD,GACnC,MAAM,QAAC53G,EAAO,KAAE5H,GAAQ5F,KAClBuiD,EAAQviD,KAAKklH,cAAcC,EAAWC,GACtC5vB,EAASjzC,EAAM7mC,IAAI2pG,GACzB,GAAI7vB,EACF,OAAOA,EAET,MAAMjS,EAAS,IAAItoE,IACnBoqG,EAASp5G,SAAQX,IACX65G,IACF5hC,EAAOh7E,IAAI48G,GACX75G,EAAKW,SAAQnF,GAAO49G,GAAWnhC,EAAQ4hC,EAAWr+G,MAEpDwE,EAAKW,SAAQnF,GAAO49G,GAAWnhC,EAAQ/1E,EAAS1G,KAChDwE,EAAKW,SAAQnF,GAAO49G,GAAWnhC,EAAQtJ,GAAUr0E,IAAS,CAAC,EAAGkB,KAC9DwE,EAAKW,SAAQnF,GAAO49G,GAAWnhC,EAAQnJ,GAAUtzE,KACjDwE,EAAKW,SAAQnF,GAAO49G,GAAWnhC,EAAQpxB,GAAarrD,IAAK,IAE3D,MAAM4zD,EAAQ1wD,MAAMO,KAAKg5E,GAOzB,OANqB,IAAjB7oB,EAAMt3D,QACRs3D,EAAMx6D,KAAK0K,OAAOxC,OAAO,OAEvBm8G,GAAW/oG,IAAI6pG,IACjB9iE,EAAM5mC,IAAI0pG,EAAU3qD,GAEfA,CACT,CACA4qD,oBACE,MAAM,QAAC93G,EAAO,KAAE5H,GAAQ5F,KACxB,MAAO,CACLwN,EACAysE,GAAUr0E,IAAS,CAAC,EACpBw0E,GAASK,SAAS70E,IAAS,CAAC,EAC5B,CAACA,QACDw0E,GACAjoB,GAEJ,CACAkpC,oBAAoB9X,EAAQ9M,EAAOx/B,EAASusC,EAAW,CAAC,KACtD,MAAMtoE,EAAS,CAAC23E,SAAS,IACnB,SAACzxB,EAAQ,YAAEmkD,GAAeC,GAAYxlH,KAAK+kH,eAAgBxhC,EAAQC,GACzE,IAAIh2E,EAAU4zD,GAuClB,SAAqBgjB,EAAO3N,GAC1B,MAAM,aAAC2O,EAAY,YAAEE,GAAejL,GAAa+J,GACjD,IAAK,MAAM5uD,KAAQihD,EAAO,CACxB,MAAMiP,EAAaN,EAAa5vD,GAC1BmwD,EAAYL,EAAY9vD,GACxBzuB,GAAS4+E,GAAaD,IAAetB,EAAM5uD,GACjD,GAAKkwD,IAAe9jB,GAAW76D,IAAU0+G,GAAY1+G,KAC/C4+E,GAAa17E,GAAQlD,GACzB,OAAO,CAEX,CACA,OAAO,CACT,EAlDQ2+G,CAAYtkD,EAAUqV,KACxBv7D,EAAO23E,SAAU,EAGjBrlF,EAAUo3E,GAAexjB,EAFzBnqB,EAAU2qB,GAAW3qB,GAAWA,IAAYA,EACxBj3C,KAAK24F,eAAepV,EAAQtsC,EAASsuE,KAG3D,IAAK,MAAM/vF,KAAQihD,EACjBv7D,EAAOsa,GAAQhoB,EAAQgoB,GAEzB,OAAOta,CACT,CACAy9E,eAAepV,EAAQtsC,EAASusC,EAAW,CAAC,IAAKsB,GAC/C,MAAM,SAAC1jB,GAAYokD,GAAYxlH,KAAK+kH,eAAgBxhC,EAAQC,GAC5D,OAAOnkB,GAASpoB,GACZ2tC,GAAexjB,EAAUnqB,OAASpuC,EAAWi8E,GAC7C1jB,CACN,EAEF,SAASokD,GAAYG,EAAepiC,EAAQC,GAC1C,IAAIjhC,EAAQojE,EAAcjqG,IAAI6nE,GACzBhhC,IACHA,EAAQ,IAAIxnC,IACZ4qG,EAAchqG,IAAI4nE,EAAQhhC,IAE5B,MAAM0G,EAAWu6B,EAASzlD,OAC1B,IAAIy3D,EAASjzC,EAAM7mC,IAAIutC,GASvB,OARKusC,IAEHA,EAAS,CACPp0B,SAFekiB,GAAgBC,EAAQC,GAGvC+hC,YAAa/hC,EAAS77E,QAAO67D,IAAMA,EAAEt+D,cAAc4+C,SAAS,YAE9DvB,EAAM5mC,IAAIstC,EAAUusC,IAEfA,CACT,CACA,MAAMiwB,GAAc1+G,GAASs4D,GAASt4D,IACjC6D,OAAOipD,oBAAoB9sD,GAAOyT,QAAO,CAACC,EAAK3T,IAAQ2T,GAAOmnD,GAAW76D,EAAMD,MAAO,GAiBrF8+G,GAAkB,CAAC,MAAO,SAAU,OAAQ,QAAS,aAC3D,SAASC,GAAqB9zG,EAAU4S,GACtC,MAAoB,QAAb5S,GAAmC,WAAbA,IAAiE,IAAvC6zG,GAAgBviH,QAAQ0O,IAA6B,MAAT4S,CACrG,CACA,SAASmhG,GAAcC,EAAIC,GACzB,OAAO,SAAS78G,EAAGqe,GACjB,OAAOre,EAAE48G,KAAQv+F,EAAEu+F,GACf58G,EAAE68G,GAAMx+F,EAAEw+F,GACV78G,EAAE48G,GAAMv+F,EAAEu+F,EAChB,CACF,CACA,SAASE,GAAqBhvE,GAC5B,MAAMyjC,EAAQzjC,EAAQyjC,MAChBuX,EAAmBvX,EAAMltE,QAAQ8sE,UACvCI,EAAMi2B,cAAc,eACpBtlE,GAAS4mD,GAAoBA,EAAiBxzD,WAAY,CAACwY,GAAUyjC,EACvE,CACA,SAASwrC,GAAoBjvE,GAC3B,MAAMyjC,EAAQzjC,EAAQyjC,MAChBuX,EAAmBvX,EAAMltE,QAAQ8sE,UACvCjvC,GAAS4mD,GAAoBA,EAAiBk0B,WAAY,CAAClvE,GAAUyjC,EACvE,CACA,SAAS0rC,GAAUt4G,GASjB,OARIu7E,MAAqC,iBAATv7E,EAC9BA,EAAOjL,SAASyN,eAAexC,GACtBA,GAAQA,EAAK1K,SACtB0K,EAAOA,EAAK,IAEVA,GAAQA,EAAKkwE,SACflwE,EAAOA,EAAKkwE,QAEPlwE,CACT,CACA,MAAMohB,GAAY,CAAC,EACbm3F,GAAYv/G,IAChB,MAAMk3E,EAASooC,GAAUt/G,GACzB,OAAO8D,OAAO6yB,OAAOvO,IAAWvnB,QAAQ4mB,GAAMA,EAAEyvD,SAAWA,IAAQmS,KAAK,EAE1E,SAASm2B,GAAgBh6G,EAAKvL,EAAO67F,GACnC,MAAMtxF,EAAOV,OAAOU,KAAKgB,GACzB,IAAK,MAAMxF,KAAOwE,EAAM,CACtB,MAAMi7G,GAAUz/G,EAChB,GAAIy/G,GAAUxlH,EAAO,CACnB,MAAMgG,EAAQuF,EAAIxF,UACXwF,EAAIxF,IACP81F,EAAO,GAAK2pB,EAASxlH,KACvBuL,EAAIi6G,EAAS3pB,GAAQ71F,EAEzB,CACF,CACF,CAUA,MAAMy/G,GACJ9lH,YAAYoN,EAAM24G,GAChB,MAAMn0B,EAAStyF,KAAKsyF,OAAS,IAAIqyB,GAAO8B,GAClCC,EAAgBN,GAAUt4G,GAC1B64G,EAAgBN,GAASK,GAC/B,GAAIC,EACF,MAAM,IAAI/gF,MACR,4CAA+C+gF,EAAc34G,GAA7D,kDACgD24G,EAAc3oC,OAAOhwE,GAAK,oBAG9E,MAAMR,EAAU8kF,EAAOqG,eAAerG,EAAOgzB,oBAAqBtlH,KAAKi+E,cACvEj+E,KAAK26E,SAAW,IAAK2X,EAAO3X,UA5dhC,SAAyBqD,GACvB,OAAKqL,MAAiD,oBAApBu9B,iBAAmC5oC,aAAkB4oC,gBAC9EtH,GAEFiC,EACT,CAud4CsF,CAAgBH,IACxD1mH,KAAK26E,SAAS0kC,aAAa/sB,GAC3B,MAAMr7C,EAAUj3C,KAAK26E,SAASskC,eAAeyH,EAAel5G,EAAQo4F,aAC9D5nB,EAAS/mC,GAAWA,EAAQ+mC,OAC5B/nE,EAAS+nE,GAAUA,EAAO/nE,OAC1BD,EAAQgoE,GAAUA,EAAOhoE,MAC/BhW,KAAKgO,GAAKmxD,KACVn/D,KAAKk7E,IAAMjkC,EACXj3C,KAAKg+E,OAASA,EACdh+E,KAAKgW,MAAQA,EACbhW,KAAKiW,OAASA,EACdjW,KAAK0N,SAAWF,EAChBxN,KAAK8mH,aAAe9mH,KAAK4lG,YACzB5lG,KAAKy2G,QAAU,GACfz2G,KAAK+mH,UAAY,GACjB/mH,KAAK20F,aAAU9rF,EACf7I,KAAK+8G,MAAQ,GACb/8G,KAAK69E,6BAA0Bh1E,EAC/B7I,KAAK06F,eAAY7xF,EACjB7I,KAAKgwF,QAAU,GACfhwF,KAAKgnH,gBAAan+G,EAClB7I,KAAKinH,WAAa,CAAC,EACnBjnH,KAAKknH,0BAAuBr+G,EAC5B7I,KAAKmnH,gBAAkB,GACvBnnH,KAAK+7E,OAAS,CAAC,EACf/7E,KAAKonH,SAAW,IAAI5E,GACpBxiH,KAAK8hH,SAAW,CAAC,EACjB9hH,KAAKqnH,eAAiB,CAAC,EACvBrnH,KAAKsnH,UAAW,EAChBtnH,KAAK27F,yBAAsB9yF,EAC3B7I,KAAKs2F,cAAWztF,EAChB7I,KAAKunH,UDx5JT,SAAkB7qG,EAAIokC,GACpB,IAAI0mE,EACJ,OAAO,YAAY5+G,GAOjB,OANIk4C,GACF/+C,aAAaylH,GACbA,EAAUvlH,WAAWya,EAAIokC,EAAOl4C,IAEhC8T,EAAG9Q,MAAM5L,KAAM4I,GAEVk4C,CACT,CACF,CC64JqB,EAASE,GAAQhhD,KAAKme,OAAO6iC,IAAOxzC,EAAQi6G,aAAe,GAC5EznH,KAAKg9F,aAAe,GACpB9tE,GAAUlvB,KAAKgO,IAAMhO,KAChBi3C,GAAY+mC,GAIjBiR,GAASsB,OAAOvwF,KAAM,WAAYimH,IAClCh3B,GAASsB,OAAOvwF,KAAM,WAAYkmH,IAClClmH,KAAK0nH,cACD1nH,KAAKsnH,UACPtnH,KAAKme,UAPLve,QAAQ4E,MAAM,oEASlB,CACIohG,kBACF,MAAOp4F,SAAS,YAACo4F,EAAW,oBAAEpqB,GAAoB,MAAExlE,EAAK,OAAEC,EAAM,aAAE6wG,GAAgB9mH,KACnF,OAAKo/D,GAAcwmC,GAGfpqB,GAAuBsrC,EAClBA,EAEF7wG,EAASD,EAAQC,EAAS,KALxB2vF,CAMX,CACI/hG,WACF,OAAO7D,KAAKsyF,OAAOzuF,IACrB,CACIA,SAAKA,GACP7D,KAAKsyF,OAAOzuF,KAAOA,CACrB,CACI2J,cACF,OAAOxN,KAAK0N,QACd,CACIF,YAAQA,GACVxN,KAAKsyF,OAAO9kF,QAAUA,CACxB,CACAk6G,cASE,OARA1nH,KAAK2wG,cAAc,cACf3wG,KAAKwN,QAAQquE,WACf77E,KAAKolB,SAEL4lE,GAAYhrF,KAAMA,KAAKwN,QAAQwT,kBAEjChhB,KAAK2nH,aACL3nH,KAAK2wG,cAAc,aACZ3wG,IACT,CACAs+C,QAEE,OADAy/B,GAAY/9E,KAAKg+E,OAAQh+E,KAAKk7E,KACvBl7E,IACT,CACAsB,OAEE,OADA2tF,GAAS3tF,KAAKtB,MACPA,IACT,CACAolB,OAAOpP,EAAOC,GACPg5E,GAASa,QAAQ9vF,MAGpBA,KAAK4nH,kBAAoB,CAAC5xG,QAAOC,UAFjCjW,KAAK6nH,QAAQ7xG,EAAOC,EAIxB,CACA4xG,QAAQ7xG,EAAOC,GACb,MAAMzI,EAAUxN,KAAKwN,QACfwwE,EAASh+E,KAAKg+E,OACd4nB,EAAcp4F,EAAQguE,qBAAuBx7E,KAAK4lG,YAClDkiB,EAAU9nH,KAAK26E,SAASwkC,eAAenhC,EAAQhoE,EAAOC,EAAQ2vF,GAC9DmiB,EAAWv6G,EAAQwT,kBAAoBhhB,KAAK26E,SAASC,sBACrD55B,EAAOhhD,KAAKgW,MAAQ,SAAW,SACrChW,KAAKgW,MAAQ8xG,EAAQ9xG,MACrBhW,KAAKiW,OAAS6xG,EAAQ7xG,OACtBjW,KAAK8mH,aAAe9mH,KAAK4lG,YACpB5a,GAAYhrF,KAAM+nH,GAAU,KAGjC/nH,KAAK2wG,cAAc,SAAU,CAAC1yD,KAAM6pE,IACpCz8E,GAAS79B,EAAQw6G,SAAU,CAAChoH,KAAM8nH,GAAU9nH,MACxCA,KAAKsnH,UACHtnH,KAAKunH,UAAUvmE,IACjBhhD,KAAK6oC,SAGX,CACAo/E,sBAGEnoD,GAFgB9/D,KAAKwN,QACSuuE,QAAU,CAAC,GACrB,CAACmsC,EAAapR,KAChCoR,EAAYl6G,GAAK8oG,CAAM,GAE3B,CACAqR,sBACE,MAAM36G,EAAUxN,KAAKwN,QACf46G,EAAY56G,EAAQuuE,OACpBA,EAAS/7E,KAAK+7E,OACdssC,EAAUz9G,OAAOU,KAAKywE,GAAQvhE,QAAO,CAAClO,EAAK0B,KAC/C1B,EAAI0B,IAAM,EACH1B,IACN,CAAC,GACJ,IAAIiB,EAAQ,GACR66G,IACF76G,EAAQA,EAAMkH,OACZ7J,OAAOU,KAAK88G,GAAWpgH,KAAKgG,IAC1B,MAAMw1G,EAAe4E,EAAUp6G,GACzB2W,EAAO4+F,GAAcv1G,EAAIw1G,GACzB8E,EAAoB,MAAT3jG,EACXi7E,EAAwB,MAATj7E,EACrB,MAAO,CACLnX,QAASg2G,EACT+E,UAAWD,EAAW,YAAc1oB,EAAe,SAAW,OAC9D4oB,MAAOF,EAAW,eAAiB1oB,EAAe,WAAa,SAChE,MAIP9/B,GAAKvyD,GAAQO,IACX,MAAM01G,EAAe11G,EAAKN,QACpBQ,EAAKw1G,EAAax1G,GAClB2W,EAAO4+F,GAAcv1G,EAAIw1G,GACzBiF,EAAYhpD,GAAe+jD,EAAa59G,KAAMkI,EAAK06G,YAC3B3/G,IAA1B26G,EAAazxG,UAA0B8zG,GAAqBrC,EAAazxG,SAAU4S,KAAUkhG,GAAqB/3G,EAAKy6G,aACzH/E,EAAazxG,SAAWjE,EAAKy6G,WAE/BF,EAAQr6G,IAAM,EACd,IAAI8tE,EAAQ,KACR9tE,KAAM+tE,GAAUA,EAAO/tE,GAAIpI,OAAS6iH,EACtC3sC,EAAQC,EAAO/tE,IAGf8tE,EAAQ,IADWg8B,GAASU,SAASiQ,GAC7B,CAAe,CACrBz6G,KACApI,KAAM6iH,EACNvtC,IAAKl7E,KAAKk7E,IACVR,MAAO16E,OAET+7E,EAAOD,EAAM9tE,IAAM8tE,GAErBA,EAAMmxB,KAAKuW,EAAch2G,EAAQ,IAEnCsyD,GAAKuoD,GAAS,CAACK,EAAY16G,KACpB06G,UACI3sC,EAAO/tE,EAChB,IAEF8xD,GAAKic,GAASD,IACZ0hC,GAAQ/qB,UAAUzyF,KAAM87E,EAAOA,EAAMtuE,SACrCgwG,GAAQC,OAAOz9G,KAAM87E,EAAM,GAE/B,CACA6sC,kBACE,MAAMp1B,EAAWvzF,KAAK+mH,UAChBtqB,EAAUz8F,KAAK6D,KAAK42E,SAASr3E,OAC7Bo5F,EAAUjJ,EAASnwF,OAEzB,GADAmwF,EAASp4E,MAAK,CAAChS,EAAGqe,IAAMre,EAAEqV,MAAQgJ,EAAEhJ,QAChCg+E,EAAUC,EAAS,CACrB,IAAK,IAAIvxF,EAAIuxF,EAASvxF,EAAIsxF,IAAWtxF,EACnClL,KAAK4oH,oBAAoB19G,GAE3BqoF,EAASh1C,OAAOk+C,EAASD,EAAUC,EACrC,CACAz8F,KAAKmnH,gBAAkB5zB,EAASpwF,MAAM,GAAGgY,KAAK2qG,GAAc,QAAS,SACvE,CACA+C,8BACE,MAAO9B,UAAWxzB,EAAU1vF,MAAM,SAAC42E,IAAaz6E,KAC5CuzF,EAASnwF,OAASq3E,EAASr3E,eACtBpD,KAAK20F,QAEdpB,EAAStnF,SAAQ,CAACosC,EAAM75B,KACmC,IAArDi8D,EAAS9yE,QAAOyO,GAAKA,IAAMiiC,EAAKguD,WAAUjjG,QAC5CpD,KAAK4oH,oBAAoBpqG,EAC3B,GAEJ,CACAsqG,2BACE,MAAMC,EAAiB,GACjBtuC,EAAWz6E,KAAK6D,KAAK42E,SAC3B,IAAIvvE,EAAGi1D,EAEP,IADAngE,KAAK6oH,8BACA39G,EAAI,EAAGi1D,EAAOsa,EAASr3E,OAAQ8H,EAAIi1D,EAAMj1D,IAAK,CACjD,MAAMo8C,EAAUmzB,EAASvvE,GACzB,IAAImtC,EAAOr4C,KAAK03F,eAAexsF,GAC/B,MAAMtF,EAAO0hD,EAAQ1hD,MAAQ5F,KAAKsyF,OAAO1sF,KAWzC,GAVIyyC,EAAKzyC,MAAQyyC,EAAKzyC,OAASA,IAC7B5F,KAAK4oH,oBAAoB19G,GACzBmtC,EAAOr4C,KAAK03F,eAAexsF,IAE7BmtC,EAAKzyC,KAAOA,EACZyyC,EAAKgjC,UAAY/zB,EAAQ+zB,WAAagoC,GAAaz9G,EAAM5F,KAAKwN,SAC9D6qC,EAAKx9B,MAAQysC,EAAQzsC,OAAS,EAC9Bw9B,EAAK75B,MAAQtT,EACbmtC,EAAKgiD,MAAQ,GAAK/yC,EAAQ+yC,MAC1BhiD,EAAKjK,QAAUpuC,KAAKijG,iBAAiB/3F,GACjCmtC,EAAK8R,WACP9R,EAAK8R,WAAWwsC,YAAYzrF,GAC5BmtC,EAAK8R,WAAWqsC,iBACX,CACL,MAAMwyB,EAAkBlR,GAASM,cAAcxyG,IACzC,mBAACsyF,EAAkB,gBAAEgD,GAAmB9gB,GAASK,SAAS70E,GAChEgF,OAAOiS,OAAOmsG,EAAgB1jH,UAAW,CACvC41F,gBAAiB4c,GAASQ,WAAWpd,GACrChD,mBAAoBA,GAAsB4f,GAASQ,WAAWpgB,KAEhE7/C,EAAK8R,WAAa,IAAI6+D,EAAgBhpH,KAAMkL,GAC5C69G,EAAe7oH,KAAKm4C,EAAK8R,WAC3B,CACF,CAEA,OADAnqD,KAAK2oH,kBACEI,CACT,CACAE,iBACEnpD,GAAK9/D,KAAK6D,KAAK42E,UAAU,CAACnzB,EAASgZ,KACjCtgE,KAAK03F,eAAep3B,GAAcnW,WAAW5rC,OAAO,GACnDve,KACL,CACAue,QACEve,KAAKipH,iBACLjpH,KAAK2wG,cAAc,QACrB,CACAxyF,OAAO6iC,GACL,MAAMsxC,EAAStyF,KAAKsyF,OACpBA,EAAOn0E,SACP,MAAM3Q,EAAUxN,KAAK0N,SAAW4kF,EAAOqG,eAAerG,EAAOgzB,oBAAqBtlH,KAAKi+E,cACjFirC,EAAgBlpH,KAAK27F,qBAAuBnuF,EAAQ8sE,UAK1D,GAJAt6E,KAAKmpH,gBACLnpH,KAAKopH,sBACLppH,KAAKqpH,uBACLrpH,KAAKonH,SAASh+E,cACuD,IAAjEppC,KAAK2wG,cAAc,eAAgB,CAAC3vD,OAAMpkB,YAAY,IACxD,OAEF,MAAMmsF,EAAiB/oH,KAAK8oH,2BAC5B9oH,KAAK2wG,cAAc,wBACnB,IAAIiN,EAAa,EACjB,IAAK,IAAI1yG,EAAI,EAAGi1D,EAAOngE,KAAK6D,KAAK42E,SAASr3E,OAAQ8H,EAAIi1D,EAAMj1D,IAAK,CAC/D,MAAM,WAACi/C,GAAcnqD,KAAK03F,eAAexsF,GACnCqT,GAAS2qG,IAAyD,IAAxCH,EAAe1lH,QAAQ8mD,GACvDA,EAAWguC,sBAAsB55E,GACjCq/F,EAAav7G,KAAKiT,KAAK60C,EAAWgwC,iBAAkByjB,EACtD,CACAA,EAAa59G,KAAKspH,YAAc97G,EAAQ2uG,OAAOoB,YAAcK,EAAa,EAC1E59G,KAAKupH,cAAc3L,GACdsL,GACHppD,GAAKipD,GAAiB5+D,IACpBA,EAAW5rC,OAAO,IAGtBve,KAAKwpH,gBAAgBxoE,GACrBhhD,KAAK2wG,cAAc,cAAe,CAAC3vD,SACnChhD,KAAKy2G,QAAQt7F,KAAK2qG,GAAc,IAAK,SACrC,MAAM,QAAC91B,EAAO,WAAEg3B,GAAchnH,KAC1BgnH,EACFhnH,KAAKypH,cAAczC,GAAY,GACtBh3B,EAAQ5sF,QACjBpD,KAAK0pH,mBAAmB15B,EAASA,GAAS,GAE5ChwF,KAAK6oC,QACP,CACAsgF,gBACErpD,GAAK9/D,KAAK+7E,QAASD,IACjB0hC,GAAQE,UAAU19G,KAAM87E,EAAM,IAEhC97E,KAAKioH,sBACLjoH,KAAKmoH,qBACP,CACAiB,sBACE,MAAM57G,EAAUxN,KAAKwN,QACfm8G,EAAiB,IAAI1uG,IAAIrQ,OAAOU,KAAKtL,KAAKinH,aAC1C2C,EAAY,IAAI3uG,IAAIzN,EAAQpI,QAC7By8D,GAAU8nD,EAAgBC,MAAgB5pH,KAAKknH,uBAAyB15G,EAAQquE,aACnF77E,KAAK6pH,eACL7pH,KAAK2nH,aAET,CACA0B,uBACE,MAAM,eAAChC,GAAkBrnH,KACnB8pH,EAAU9pH,KAAK+pH,0BAA4B,GACjD,IAAK,MAAM,OAAC7qF,EAAM,MAAEn+B,EAAK,MAAE2lE,KAAUojD,EAEnCxD,GAAgBe,EAAgBtmH,EADR,oBAAXm+B,GAAgCwnC,EAAQA,EAGzD,CACAqjD,yBACE,MAAM/sB,EAAeh9F,KAAKg9F,aAC1B,IAAKA,IAAiBA,EAAa55F,OACjC,OAEFpD,KAAKg9F,aAAe,GACpB,MAAMgtB,EAAehqH,KAAK6D,KAAK42E,SAASr3E,OAClC6mH,EAAW/W,GAAQ,IAAIj4F,IAC3B+hF,EACGr1F,QAAO4mB,GAAKA,EAAE,KAAO2kF,IACrBlrG,KAAI,CAACumB,EAAGrjB,IAAMA,EAAI,IAAMqjB,EAAEgwB,OAAO,GAAGxgB,KAAK,QAExCmsF,EAAYD,EAAQ,GAC1B,IAAK,IAAI/+G,EAAI,EAAGA,EAAI8+G,EAAc9+G,IAChC,IAAK22D,GAAUqoD,EAAWD,EAAQ/+G,IAChC,OAGJ,OAAOlB,MAAMO,KAAK2/G,GACfliH,KAAIumB,GAAKA,EAAE7f,MAAM,OACjB1G,KAAImB,IAAK,CAAE+1B,OAAQ/1B,EAAE,GAAIpI,OAAQoI,EAAE,GAAIu9D,OAAQv9D,EAAE,MACtD,CACAogH,cAAc3L,GACZ,IAA+D,IAA3D59G,KAAK2wG,cAAc,eAAgB,CAAC/zE,YAAY,IAClD,OAEF4gF,GAAQr/F,OAAOne,KAAMA,KAAKgW,MAAOhW,KAAKiW,OAAQ2nG,GAC9C,MAAMj+B,EAAO3/E,KAAK06F,UACZyvB,EAASxqC,EAAK3pE,OAAS,GAAK2pE,EAAK1pE,QAAU,EACjDjW,KAAKy2G,QAAU,GACf32C,GAAK9/D,KAAK+8G,OAAQzyB,IACZ6/B,GAA2B,cAAjB7/B,EAAIv4E,WAGdu4E,EAAImI,WACNnI,EAAImI,YAENzyF,KAAKy2G,QAAQv2G,QAAQoqF,EAAImsB,WAAU,GAClCz2G,MACHA,KAAKy2G,QAAQxqG,SAAQ,CAAC6B,EAAM0Q,KAC1B1Q,EAAKs8G,KAAO5rG,CAAK,IAEnBxe,KAAK2wG,cAAc,cACrB,CACA6Y,gBAAgBxoE,GACd,IAA6E,IAAzEhhD,KAAK2wG,cAAc,uBAAwB,CAAC3vD,OAAMpkB,YAAY,IAAlE,CAGA,IAAK,IAAI1xB,EAAI,EAAGi1D,EAAOngE,KAAK6D,KAAK42E,SAASr3E,OAAQ8H,EAAIi1D,IAAQj1D,EAC5DlL,KAAK03F,eAAexsF,GAAGi/C,WAAWsoC,YAEpC,IAAK,IAAIvnF,EAAI,EAAGi1D,EAAOngE,KAAK6D,KAAK42E,SAASr3E,OAAQ8H,EAAIi1D,IAAQj1D,EAC5DlL,KAAKqqH,eAAen/G,EAAG02D,GAAW5gB,GAAQA,EAAK,CAACsf,aAAcp1D,IAAM81C,GAEtEhhD,KAAK2wG,cAAc,sBAAuB,CAAC3vD,QAP3C,CAQF,CACAqpE,eAAe7rG,EAAOwiC,GACpB,MAAM3I,EAAOr4C,KAAK03F,eAAel5E,GAC3B5V,EAAO,CAACyvC,OAAM75B,QAAOwiC,OAAMpkB,YAAY,IACW,IAApD58B,KAAK2wG,cAAc,sBAAuB/nG,KAG9CyvC,EAAK8R,WAAWylC,QAAQ5uC,GACxBp4C,EAAKg0B,YAAa,EAClB58B,KAAK2wG,cAAc,qBAAsB/nG,GAC3C,CACAigC,UACiE,IAA3D7oC,KAAK2wG,cAAc,eAAgB,CAAC/zE,YAAY,MAGhDqyD,GAASzzE,IAAIxb,MACXA,KAAKsnH,WAAar4B,GAASa,QAAQ9vF,OACrCivF,GAASluF,MAAMf,OAGjBA,KAAK+vF,OACLk2B,GAAqB,CAACvrC,MAAO16E,QAEjC,CACA+vF,OACE,IAAI7kF,EACJ,GAAIlL,KAAK4nH,kBAAmB,CAC1B,MAAM,MAAC5xG,EAAK,OAAEC,GAAUjW,KAAK4nH,kBAC7B5nH,KAAK6nH,QAAQ7xG,EAAOC,GACpBjW,KAAK4nH,kBAAoB,IAC3B,CAEA,GADA5nH,KAAKs+C,QACDt+C,KAAKgW,OAAS,GAAKhW,KAAKiW,QAAU,EACpC,OAEF,IAA6D,IAAzDjW,KAAK2wG,cAAc,aAAc,CAAC/zE,YAAY,IAChD,OAEF,MAAM0tF,EAAStqH,KAAKy2G,QACpB,IAAKvrG,EAAI,EAAGA,EAAIo/G,EAAOlnH,QAAUknH,EAAOp/G,GAAGyrG,GAAK,IAAKzrG,EACnDo/G,EAAOp/G,GAAG6kF,KAAK/vF,KAAK06F,WAGtB,IADA16F,KAAKuqH,gBACEr/G,EAAIo/G,EAAOlnH,SAAU8H,EAC1Bo/G,EAAOp/G,GAAG6kF,KAAK/vF,KAAK06F,WAEtB16F,KAAK2wG,cAAc,YACrB,CACAnd,uBAAuBF,GACrB,MAAMC,EAAWvzF,KAAKmnH,gBAChBjsG,EAAS,GACf,IAAIhQ,EAAGi1D,EACP,IAAKj1D,EAAI,EAAGi1D,EAAOozB,EAASnwF,OAAQ8H,EAAIi1D,IAAQj1D,EAAG,CACjD,MAAMmtC,EAAOk7C,EAASroF,GACjBooF,IAAiBj7C,EAAKjK,SACzBlzB,EAAOhb,KAAKm4C,EAEhB,CACA,OAAOn9B,CACT,CACA27F,+BACE,OAAO72G,KAAKwzF,wBAAuB,EACrC,CACA+2B,gBACE,IAAqE,IAAjEvqH,KAAK2wG,cAAc,qBAAsB,CAAC/zE,YAAY,IACxD,OAEF,MAAM22D,EAAWvzF,KAAK62G,+BACtB,IAAK,IAAI3rG,EAAIqoF,EAASnwF,OAAS,EAAG8H,GAAK,IAAKA,EAC1ClL,KAAKwqH,aAAaj3B,EAASroF,IAE7BlL,KAAK2wG,cAAc,oBACrB,CACA6Z,aAAanyE,GACX,MAAM6iC,EAAMl7E,KAAKk7E,IACX2E,EAAOxnC,EAAKkiD,MACZkwB,GAAW5qC,EAAK9mD,SAChB4mD,EAAO3/E,KAAK06F,UACZ9xF,EAAO,CACXyvC,OACA75B,MAAO65B,EAAK75B,MACZoe,YAAY,IAEwC,IAAlD58B,KAAK2wG,cAAc,oBAAqB/nG,KAGxC6hH,GACF7qC,GAAS1E,EAAK,CACZzoE,MAAoB,IAAdotE,EAAKptE,KAAiB,EAAIktE,EAAKltE,KAAOotE,EAAKptE,KACjDE,OAAsB,IAAfktE,EAAKltE,MAAkB3S,KAAKgW,MAAQ2pE,EAAKhtE,MAAQktE,EAAKltE,MAC7DuD,KAAkB,IAAb2pE,EAAK3pE,IAAgB,EAAIypE,EAAKzpE,IAAM2pE,EAAK3pE,IAC9CC,QAAwB,IAAhB0pE,EAAK1pE,OAAmBnW,KAAKiW,OAAS0pE,EAAKxpE,OAAS0pE,EAAK1pE,SAGrEkiC,EAAK8R,WAAW4lC,OACZ06B,GACF3qC,GAAW5E,GAEbtyE,EAAKg0B,YAAa,EAClB58B,KAAK2wG,cAAc,mBAAoB/nG,GACzC,CACA2xG,cAAc76B,GACZ,OAAOD,GAAeC,EAAO1/E,KAAK06F,UAAW16F,KAAKspH,YACpD,CACAoB,0BAA0BlrE,EAAGwB,EAAMxzC,EAAS+6F,GAC1C,MAAMrpE,EAASq8E,GAAYC,MAAMx6D,GACjC,MAAsB,mBAAX9hB,EACFA,EAAOl/B,KAAMw/C,EAAGhyC,EAAS+6F,GAE3B,EACT,CACA7Q,eAAep3B,GACb,MAAMhZ,EAAUtnD,KAAK6D,KAAK42E,SAASna,GAC7BizB,EAAWvzF,KAAK+mH,UACtB,IAAI1uE,EAAOk7C,EAAS5rF,QAAOyO,GAAKA,GAAKA,EAAEiwF,WAAa/+C,IAAS6oC,MAkB7D,OAjBK93C,IACHA,EAAO,CACLzyC,KAAM,KACN/B,KAAM,GACNyjD,QAAS,KACT6C,WAAY,KACZ1zB,OAAQ,KACRsgE,QAAS,KACTE,QAAS,KACTp8E,MAAOysC,GAAWA,EAAQzsC,OAAS,EACnC2D,MAAO8hD,EACP+lC,SAAU/+C,EACVuf,QAAS,GACTF,SAAS,GAEX4sB,EAASrzF,KAAKm4C,IAETA,CACT,CACA4lC,aACE,OAAOj+E,KAAKs2F,WAAat2F,KAAKs2F,SAAWlT,GAAc,KAAM,CAAC1I,MAAO16E,KAAM4F,KAAM,UACnF,CACAwhG,yBACE,OAAOpnG,KAAK62G,+BAA+BzzG,MAC7C,CACA6/F,iBAAiB3iC,GACf,MAAMhZ,EAAUtnD,KAAK6D,KAAK42E,SAASna,GACnC,IAAKhZ,EACH,OAAO,EAET,MAAMjP,EAAOr4C,KAAK03F,eAAep3B,GACjC,MAA8B,kBAAhBjoB,EAAK5hB,QAAwB4hB,EAAK5hB,QAAU6wB,EAAQ7wB,MACpE,CACAk0F,qBAAqBrqD,EAAclyB,GACpBpuC,KAAK03F,eAAep3B,GAC5B7pC,QAAU2X,CACjB,CACA43D,qBAAqBxnF,GACnBxe,KAAKqnH,eAAe7oG,IAAUxe,KAAKqnH,eAAe7oG,EACpD,CACA2iF,kBAAkB3iF,GAChB,OAAQxe,KAAKqnH,eAAe7oG,EAC9B,CACAosG,kBAAkBtqD,EAAcu6B,EAAWzsD,GACzC,MAAM4S,EAAO5S,EAAU,OAAS,OAC1BiK,EAAOr4C,KAAK03F,eAAep3B,GAC3BgvB,EAAQj3C,EAAK8R,WAAWmxC,wBAAmBzyF,EAAWm4C,GACxD2gB,GAAQk5B,IACVxiD,EAAKx0C,KAAKg3F,GAAWpkE,QAAU2X,EAC/BpuC,KAAKme,WAELne,KAAK2qH,qBAAqBrqD,EAAclyB,GACxCkhD,EAAMnxE,OAAOk6B,EAAM,CAACjK,YACpBpuC,KAAKme,QAAQ+8D,GAAQA,EAAI5a,eAAiBA,EAAetf,OAAOn4C,IAEpE,CACA2L,KAAK8rD,EAAcu6B,GACjB76F,KAAK4qH,kBAAkBtqD,EAAcu6B,GAAW,EAClD,CACAntE,KAAK4yC,EAAcu6B,GACjB76F,KAAK4qH,kBAAkBtqD,EAAcu6B,GAAW,EAClD,CACA+tB,oBAAoBtoD,GAClB,MAAMjoB,EAAOr4C,KAAK+mH,UAAUzmD,GACxBjoB,GAAQA,EAAK8R,YACf9R,EAAK8R,WAAW0tC,kBAEX73F,KAAK+mH,UAAUzmD,EACxB,CACAuqD,QACE,IAAI3/G,EAAGi1D,EAGP,IAFAngE,KAAKsB,OACL2tF,GAAS5nF,OAAOrH,MACXkL,EAAI,EAAGi1D,EAAOngE,KAAK6D,KAAK42E,SAASr3E,OAAQ8H,EAAIi1D,IAAQj1D,EACxDlL,KAAK4oH,oBAAoB19G,EAE7B,CACA4T,UACE9e,KAAK2wG,cAAc,iBACnB,MAAM,OAAC3yB,EAAM,IAAE9C,GAAOl7E,KACtBA,KAAK6qH,QACL7qH,KAAKsyF,OAAO1xC,aACRo9B,IACFh+E,KAAK6pH,eACL9rC,GAAYC,EAAQ9C,GACpBl7E,KAAK26E,SAASukC,eAAehkC,GAC7Bl7E,KAAKg+E,OAAS,KACdh+E,KAAKk7E,IAAM,MAEbl7E,KAAK2wG,cAAc,kBACZzhF,GAAUlvB,KAAKgO,IACtBhO,KAAK2wG,cAAc,eACrB,CACAma,iBAAiBliH,GACf,OAAO5I,KAAKg+E,OAAO+sC,aAAaniH,EAClC,CACA++G,aACE3nH,KAAKgrH,iBACDhrH,KAAKwN,QAAQquE,WACf77E,KAAKirH,uBAELjrH,KAAKsnH,UAAW,CAEpB,CACA0D,iBACE,MAAMriE,EAAY3oD,KAAKinH,WACjBtsC,EAAW36E,KAAK26E,SAChBuwC,EAAO,CAACtlH,EAAM8/D,KAClBiV,EAASv5E,iBAAiBpB,KAAM4F,EAAM8/D,GACtC/c,EAAU/iD,GAAQ8/D,CAAQ,EAEtBA,EAAW,CAAClmB,EAAGppC,EAAGC,KACtBmpC,EAAEgrC,QAAUp0E,EACZopC,EAAEirC,QAAUp0E,EACZrW,KAAKypH,cAAcjqE,EAAE,EAEvBsgB,GAAK9/D,KAAKwN,QAAQpI,QAASQ,GAASslH,EAAKtlH,EAAM8/D,IACjD,CACAulD,uBACOjrH,KAAKknH,uBACRlnH,KAAKknH,qBAAuB,CAAC,GAE/B,MAAMv+D,EAAY3oD,KAAKknH,qBACjBvsC,EAAW36E,KAAK26E,SAChBuwC,EAAO,CAACtlH,EAAM8/D,KAClBiV,EAASv5E,iBAAiBpB,KAAM4F,EAAM8/D,GACtC/c,EAAU/iD,GAAQ8/D,CAAQ,EAEtBylD,EAAU,CAACvlH,EAAM8/D,KACjB/c,EAAU/iD,KACZ+0E,EAASn5E,oBAAoBxB,KAAM4F,EAAM8/D,UAClC/c,EAAU/iD,GACnB,EAEI8/D,EAAW,CAAC1vD,EAAOC,KACnBjW,KAAKg+E,QACPh+E,KAAKolB,OAAOpP,EAAOC,EACrB,EAEF,IAAIm1G,EACJ,MAAM9D,EAAW,KACf6D,EAAQ,SAAU7D,GAClBtnH,KAAKsnH,UAAW,EAChBtnH,KAAKolB,SACL8lG,EAAK,SAAUxlD,GACfwlD,EAAK,SAAUE,EAAS,EAE1BA,EAAW,KACTprH,KAAKsnH,UAAW,EAChB6D,EAAQ,SAAUzlD,GAClB1lE,KAAK6qH,QACL7qH,KAAK6nH,QAAQ,EAAG,GAChBqD,EAAK,SAAU5D,EAAS,EAEtB3sC,EAASykC,WAAWp/G,KAAKg+E,QAC3BspC,IAEA8D,GAEJ,CACAvB,eACE/pD,GAAK9/D,KAAKinH,YAAY,CAACvhD,EAAU9/D,KAC/B5F,KAAK26E,SAASn5E,oBAAoBxB,KAAM4F,EAAM8/D,EAAS,IAEzD1lE,KAAKinH,WAAa,CAAC,EACnBnnD,GAAK9/D,KAAKknH,sBAAsB,CAACxhD,EAAU9/D,KACzC5F,KAAK26E,SAASn5E,oBAAoBxB,KAAM4F,EAAM8/D,EAAS,IAEzD1lE,KAAKknH,0BAAuBr+G,CAC9B,CACAwiH,iBAAiB99G,EAAOyzC,EAAM/gD,GAC5B,MAAMi6B,EAASj6B,EAAU,MAAQ,SACjC,IAAIo4C,EAAMvqC,EAAM5C,EAAGi1D,EAKnB,IAJa,YAATnf,IACF3I,EAAOr4C,KAAK03F,eAAenqF,EAAM,GAAG+yD,cACpCjoB,EAAK8R,WAAW,IAAMjwB,EAAS,wBAE5BhvB,EAAI,EAAGi1D,EAAO5yD,EAAMnK,OAAQ8H,EAAIi1D,IAAQj1D,EAAG,CAC9C4C,EAAOP,EAAMrC,GACb,MAAMi/C,EAAar8C,GAAQ9N,KAAK03F,eAAe5pF,EAAKwyD,cAAcnW,WAC9DA,GACFA,EAAWjwB,EAAS,cAAcpsB,EAAKpE,QAASoE,EAAKwyD,aAAcxyD,EAAK0Q,MAE5E,CACF,CACA8sG,oBACE,OAAOtrH,KAAKgwF,SAAW,EACzB,CACAu7B,kBAAkBC,GAChB,MAAMC,EAAazrH,KAAKgwF,SAAW,GAC7BjiF,EAASy9G,EAAexjH,KAAI,EAAEs4D,eAAc9hD,YAChD,MAAM65B,EAAOr4C,KAAK03F,eAAep3B,GACjC,IAAKjoB,EACH,MAAM,IAAIzS,MAAM,6BAA+B06B,GAEjD,MAAO,CACLA,eACA52D,QAAS2uC,EAAKx0C,KAAK2a,GACnBA,QACD,KAEcwhD,GAAejyD,EAAQ09G,KAEtCzrH,KAAKgwF,QAAUjiF,EACf/N,KAAKgnH,WAAa,KAClBhnH,KAAK0pH,mBAAmB37G,EAAQ09G,GAEpC,CACA9a,cAAc8R,EAAM75G,EAAMjB,GACxB,OAAO3H,KAAKonH,SAAShhH,OAAOpG,KAAMyiH,EAAM75G,EAAMjB,EAChD,CACA+hH,mBAAmB37G,EAAQ09G,EAAYC,GACrC,MAAMC,EAAe3rH,KAAKwN,QAAQwtE,MAC5B40B,EAAO,CAACzmG,EAAGqe,IAAMre,EAAExB,QAAOyO,IAAMoR,EAAEvL,MAAK5F,GAAKD,EAAEkqD,eAAiBjqD,EAAEiqD,cAAgBlqD,EAAEoI,QAAUnI,EAAEmI,UAC/FotG,EAAchc,EAAK6b,EAAY19G,GAC/B89G,EAAYH,EAAS39G,EAAS6hG,EAAK7hG,EAAQ09G,GAC7CG,EAAYxoH,QACdpD,KAAKqrH,iBAAiBO,EAAaD,EAAa3qE,MAAM,GAEpD6qE,EAAUzoH,QAAUuoH,EAAa3qE,MACnChhD,KAAKqrH,iBAAiBQ,EAAWF,EAAa3qE,MAAM,EAExD,CACAyoE,cAAcjqE,EAAGksE,GACf,MAAM9iH,EAAO,CACXpD,MAAOg6C,EACPksE,SACA9uF,YAAY,EACZkvF,YAAa9rH,KAAKu6G,cAAc/6D,IAE5BusE,EAAepJ,IAAYA,EAAOn1G,QAAQpI,QAAUpF,KAAKwN,QAAQpI,QAAQ0+C,SAAStE,EAAE4hE,OAAOx7G,MACjG,IAA6D,IAAzD5F,KAAK2wG,cAAc,cAAe/nG,EAAMmjH,GAC1C,OAEF,MAAMpkD,EAAU3nE,KAAKgsH,aAAaxsE,EAAGksE,EAAQ9iH,EAAKkjH,aAMlD,OALAljH,EAAKg0B,YAAa,EAClB58B,KAAK2wG,cAAc,aAAc/nG,EAAMmjH,IACnCpkD,GAAW/+D,EAAK++D,UAClB3nE,KAAK6oC,SAEA7oC,IACT,CACAgsH,aAAaxsE,EAAGksE,EAAQI,GACtB,MAAO97B,QAASy7B,EAAa,GAAE,QAAEj+G,GAAWxN,KACtCuoG,EAAmBmjB,EACnB39G,EAAS/N,KAAKisH,mBAAmBzsE,EAAGisE,EAAYK,EAAavjB,GAC7D2jB,EDh0LV,SAAuB1sE,GACrB,MAAkB,YAAXA,EAAE55C,MAAiC,UAAX45C,EAAE55C,MAA+B,gBAAX45C,EAAE55C,IACzD,CC8zLoBumH,CAAc3sE,GACxB4sE,EA7uBV,SAA4B5sE,EAAG4sE,EAAWN,EAAaI,GACrD,OAAKJ,GAA0B,aAAXtsE,EAAE55C,KAGlBsmH,EACKE,EAEF5sE,EALE,IAMX,CAquBsB6sE,CAAmB7sE,EAAGx/C,KAAKgnH,WAAY8E,EAAaI,GAClEJ,IACF9rH,KAAKgnH,WAAa,KAClB37E,GAAS79B,EAAQiuE,QAAS,CAACj8B,EAAGzxC,EAAQ/N,MAAOA,MACzCksH,GACF7gF,GAAS79B,EAAQkuE,QAAS,CAACl8B,EAAGzxC,EAAQ/N,MAAOA,OAGjD,MAAM2nE,GAAW3H,GAAejyD,EAAQ09G,GAMxC,OALI9jD,GAAW+jD,KACb1rH,KAAKgwF,QAAUjiF,EACf/N,KAAK0pH,mBAAmB37G,EAAQ09G,EAAYC,IAE9C1rH,KAAKgnH,WAAaoF,EACXzkD,CACT,CACAskD,mBAAmBzsE,EAAGisE,EAAYK,EAAavjB,GAC7C,GAAe,aAAX/oD,EAAE55C,KACJ,MAAO,GAET,IAAKkmH,EACH,OAAOL,EAET,MAAME,EAAe3rH,KAAKwN,QAAQwtE,MAClC,OAAOh7E,KAAK0qH,0BAA0BlrE,EAAGmsE,EAAa3qE,KAAM2qE,EAAcpjB,EAC5E,EAEF,MAAM+jB,GAAoB,IAAMxsD,GAAK0mD,GAAMt3F,WAAYwrD,GAAUA,EAAM0sC,SAASh+E,eAC1Ez9B,IAAa,EA0CnB,SAAS4gH,GAAQrxC,EAAKxxE,EAASm6F,GAC7B,MAAM,WAACD,EAAU,YAAE4oB,EAAW,EAAEp2G,EAAC,EAAEC,EAAC,YAAEssF,EAAW,YAAED,GAAeh5F,EAClE,IAAI+iH,EAAcD,EAAc7pB,EAChCznB,EAAI6D,YACJ7D,EAAI+D,IAAI7oE,EAAGC,EAAGssF,EAAaiB,EAAa6oB,EAAa5oB,EAAW4oB,GAC5D/pB,EAAc8pB,GAChBC,EAAcD,EAAc9pB,EAC5BxnB,EAAI+D,IAAI7oE,EAAGC,EAAGqsF,EAAamB,EAAW4oB,EAAa7oB,EAAa6oB,GAAa,IAE7EvxC,EAAI+D,IAAI7oE,EAAGC,EAAGm2G,EAAa3oB,EAAWzhC,GAASwhC,EAAaxhC,IAE9D8Y,EAAIgE,YACJhE,EAAI2E,MACN,CAmBA,SAAS6sC,GAAWj3F,EAAGk3F,EAAOv2G,EAAGC,GAC/B,MAAO,CACLD,EAAGA,EAAIqf,EAAIpzB,KAAK0mE,IAAI4jD,GACpBt2G,EAAGA,EAAIof,EAAIpzB,KAAKylE,IAAI6kD,GAExB,CACA,SAASC,GAAQ1xC,EAAKxxE,EAAS+a,EAAQ0+E,EAAS/oF,EAAK2tF,GACnD,MAAM,EAAC3xF,EAAC,EAAEC,EAAGutF,WAAY7iG,EAAK,YAAEyrH,EAAa9pB,YAAamqB,GAAUnjH,EAC9Di5F,EAActgG,KAAKiT,IAAI5L,EAAQi5F,YAAcQ,EAAU1+E,EAAS+nG,EAAa,GAC7E9pB,EAAcmqB,EAAS,EAAIA,EAAS1pB,EAAU1+E,EAAS+nG,EAAc,EAC3E,IAAIM,EAAgB,EACpB,MAAMt0C,EAAQp+D,EAAMrZ,EACpB,GAAIoiG,EAAS,CACX,MAEM4pB,IAFuBF,EAAS,EAAIA,EAAS1pB,EAAU,IAChCR,EAAc,EAAIA,EAAcQ,EAAU,IACI,EAE3E2pB,GAAiBt0C,GAD4B,IAAvBu0C,EAA4Bv0C,EAAQu0C,GAAuBA,EAAqB5pB,GAAW3qB,IACvE,CAC5C,CACA,MACMw0C,GAAex0C,EADRn2E,KAAKiT,IAAI,KAAOkjE,EAAQmqB,EAAcl+E,EAASq9C,IAAM6gC,GAC7B,EAC/BiB,EAAa7iG,EAAQisH,EAAcF,EACnCjpB,EAAWzpF,EAAM4yG,EAAcF,GAC/B,WAACG,EAAU,SAAEC,EAAQ,WAAEC,EAAU,SAAEC,GAtC3C,SAA6BnuC,EAAKyjB,EAAaC,EAAa0qB,GAC1D,MAAM5iH,EAHCg4E,GAGmBxD,EAAIzxE,QAAQ8/G,aAHN,CAAC,aAAc,WAAY,aAAc,aAInEC,GAAiB5qB,EAAcD,GAAe,EAC9C8qB,EAAanrH,KAAKE,IAAIgrH,EAAeF,EAAa3qB,EAAc,GAChE+qB,EAAqBp0C,IACzB,MAAMq0C,GAAiB/qB,EAActgG,KAAKE,IAAIgrH,EAAel0C,IAAQg0C,EAAa,EAClF,OAAOxoD,GAAYwU,EAAK,EAAGh3E,KAAKE,IAAIgrH,EAAeG,GAAe,EAEpE,MAAO,CACLT,WAAYQ,EAAkBhjH,EAAEwiH,YAChCC,SAAUO,EAAkBhjH,EAAEyiH,UAC9BC,WAAYtoD,GAAYp6D,EAAE0iH,WAAY,EAAGK,GACzCJ,SAAUvoD,GAAYp6D,EAAE2iH,SAAU,EAAGI,GAEzC,CAwBuDG,CAAoBjkH,EAASg5F,EAAaC,EAAakB,EAAWD,GACjHgqB,EAA2BjrB,EAAcsqB,EACzCY,EAAyBlrB,EAAcuqB,EACvCY,EAA0BlqB,EAAaqpB,EAAaW,EACpDG,EAAwBlqB,EAAWqpB,EAAWW,EAC9CG,EAA2BtrB,EAAcyqB,EACzCc,EAAyBvrB,EAAc0qB,EACvCc,EAA0BtqB,EAAaupB,EAAaa,EACpDG,EAAwBtqB,EAAWupB,EAAWa,EAEpD,GADA/yC,EAAI6D,YACAgpB,EAAU,CAEZ,GADA7sB,EAAI+D,IAAI7oE,EAAGC,EAAGssF,EAAamrB,EAAyBC,GAChDb,EAAW,EAAG,CAChB,MAAMkB,EAAU1B,GAAWmB,EAAwBE,EAAuB33G,EAAGC,GAC7E6kE,EAAI+D,IAAImvC,EAAQh4G,EAAGg4G,EAAQ/3G,EAAG62G,EAAUa,EAAuBlqB,EAAWzhC,GAC5E,CACA,MAAMisD,EAAK3B,GAAWuB,EAAwBpqB,EAAUztF,EAAGC,GAE3D,GADA6kE,EAAIkE,OAAOivC,EAAGj4G,EAAGi4G,EAAGh4G,GAChB+2G,EAAW,EAAG,CAChB,MAAMgB,EAAU1B,GAAWuB,EAAwBE,EAAuB/3G,EAAGC,GAC7E6kE,EAAI+D,IAAImvC,EAAQh4G,EAAGg4G,EAAQ/3G,EAAG+2G,EAAUvpB,EAAWzhC,GAAS+rD,EAAwB9rH,KAAKy/D,GAC3F,CAEA,GADAoZ,EAAI+D,IAAI7oE,EAAGC,EAAGqsF,EAAamB,EAAYupB,EAAW1qB,EAAckB,EAAcupB,EAAazqB,GAAc,GACrGyqB,EAAa,EAAG,CAClB,MAAMiB,EAAU1B,GAAWsB,EAA0BE,EAAyB93G,EAAGC,GACjF6kE,EAAI+D,IAAImvC,EAAQh4G,EAAGg4G,EAAQ/3G,EAAG82G,EAAYe,EAA0B7rH,KAAKy/D,GAAI8hC,EAAaxhC,GAC5F,CACA,MAAMksD,EAAK5B,GAAWkB,EAA0BhqB,EAAYxtF,EAAGC,GAE/D,GADA6kE,EAAIkE,OAAOkvC,EAAGl4G,EAAGk4G,EAAGj4G,GAChB42G,EAAa,EAAG,CAClB,MAAMmB,EAAU1B,GAAWkB,EAA0BE,EAAyB13G,EAAGC,GACjF6kE,EAAI+D,IAAImvC,EAAQh4G,EAAGg4G,EAAQ/3G,EAAG42G,EAAYrpB,EAAaxhC,GAAS0rD,EAClE,CACF,KAAO,CACL5yC,EAAIiE,OAAO/oE,EAAGC,GACd,MAAMk4G,EAAclsH,KAAK0mE,IAAI+kD,GAA2BnrB,EAAcvsF,EAChEo4G,EAAcnsH,KAAKylE,IAAIgmD,GAA2BnrB,EAActsF,EACtE6kE,EAAIkE,OAAOmvC,EAAaC,GACxB,MAAMC,EAAYpsH,KAAK0mE,IAAIglD,GAAyBprB,EAAcvsF,EAC5Ds4G,EAAYrsH,KAAKylE,IAAIimD,GAAyBprB,EAActsF,EAClE6kE,EAAIkE,OAAOqvC,EAAWC,EACxB,CACAxzC,EAAIgE,WACN,CA3IAt0E,OAAOwB,iBAAiBo6G,GAAO,CAC7BpsC,SAAU,CACRzuE,cACA5E,MAAOqzE,IAETlrD,UAAW,CACTvjB,cACA5E,MAAOmoB,IAET+qD,UAAW,CACTtuE,cACA5E,MAAOkzE,IAET69B,SAAU,CACRnsG,cACA5E,MAAO+wG,IAET6W,QAAS,CACPhjH,cACA5E,MAl1BU,SAo1BZs/G,SAAU,CACR16G,cACA5E,MAAOs/G,IAET5tD,SAAU,CACR9sD,cACA5E,MAAO,IAAIwG,KACTuqG,GAASvvG,OAAOgF,GAChB++G,IAAmB,GAGvBzU,WAAY,CACVlsG,cACA5E,MAAO,IAAIwG,KACTuqG,GAASzwG,UAAUkG,GACnB++G,IAAmB,KAqKzB,MAAMsC,WAAmB,GACvBluH,YAAYqwF,GACVh5D,QACA/3B,KAAKwN,aAAU3E,EACf7I,KAAK+iG,mBAAgBl6F,EACrB7I,KAAK4jG,gBAAa/6F,EAClB7I,KAAK6jG,cAAWh7F,EAChB7I,KAAK0iG,iBAAc75F,EACnB7I,KAAK2iG,iBAAc95F,EACnB7I,KAAKwsH,YAAc,EACnBxsH,KAAK6uH,YAAc,EACf99B,GACFnmF,OAAOiS,OAAO7c,KAAM+wF,EAExB,CACAypB,QAAQsU,EAAQC,EAAQxmB,GACtB,MAAM7oB,EAAQ1/E,KAAKwoG,SAAS,CAAC,IAAK,KAAMD,IAClC,MAACvkC,EAAK,SAAE79C,GAAYs9C,GAAkBic,EAAO,CAACtpE,EAAG04G,EAAQz4G,EAAG04G,KAC5D,WAACnrB,EAAU,SAAEC,EAAQ,YAAEnB,EAAW,YAAEC,EAAW,cAAEI,GAAiB/iG,KAAKwoG,SAAS,CACpF,aACA,WACA,cACA,cACA,iBACCD,GACGymB,EAAUhvH,KAAKwN,QAAQ21F,QAAU,EAEjC8rB,EADiBxvD,GAAesjC,EAAec,EAAWD,IACxB7hC,IAAOwC,GAAcP,EAAO4/B,EAAYC,GAC1EqrB,EAAepqD,GAAW3+C,EAAUu8E,EAAcssB,EAASrsB,EAAcqsB,GAC/E,OAAQC,GAAiBC,CAC3B,CACAjU,eAAe1S,GACb,MAAM,EAACnyF,EAAC,EAAEC,EAAC,WAAEutF,EAAU,SAAEC,EAAQ,YAAEnB,EAAW,YAAEC,GAAe3iG,KAAKwoG,SAAS,CAC3E,IACA,IACA,aACA,WACA,cACA,cACA,iBACCD,IACG,OAAC9jF,EAAM,QAAE0+E,GAAWnjG,KAAKwN,QACzB2hH,GAAavrB,EAAaC,GAAY,EACtCurB,GAAc1sB,EAAcC,EAAcQ,EAAU1+E,GAAU,EACpE,MAAO,CACLrO,EAAGA,EAAI/T,KAAK0mE,IAAIomD,GAAaC,EAC7B/4G,EAAGA,EAAIhU,KAAKylE,IAAIqnD,GAAaC,EAEjC,CACA9mB,gBAAgBC,GACd,OAAOvoG,KAAKi7G,eAAe1S,EAC7B,CACAxY,KAAK7U,GACH,MAAM,QAAC1tE,EAAO,cAAEu1F,GAAiB/iG,KAC3BykB,GAAUjX,EAAQiX,QAAU,GAAK,EACjC0+E,GAAW31F,EAAQ21F,SAAW,GAAK,EACnC4E,EAAWv6F,EAAQu6F,SAGzB,GAFA/nG,KAAKwsH,YAAuC,UAAxBh/G,EAAQg4F,YAA2B,IAAO,EAC9DxlG,KAAK6uH,YAAc9rB,EAAgBhhC,GAAM1/D,KAAK67B,MAAM6kE,EAAgBhhC,IAAO,EACrD,IAAlBghC,GAAuB/iG,KAAK0iG,YAAc,GAAK1iG,KAAK2iG,YAAc,EACpE,OAEFznB,EAAImC,OACJ,IAAIgyC,EAAe,EACnB,GAAI5qG,EAAQ,CACV4qG,EAAe5qG,EAAS,EACxB,MAAM0qG,GAAanvH,KAAK4jG,WAAa5jG,KAAK6jG,UAAY,EACtD3oB,EAAI2D,UAAUx8E,KAAK0mE,IAAIomD,GAAaE,EAAchtH,KAAKylE,IAAIqnD,GAAaE,GACpErvH,KAAK+iG,eAAiBjhC,KACxButD,EAAe5qG,EAEnB,CACAy2D,EAAI4F,UAAYtzE,EAAQ+sE,gBACxBW,EAAIgG,YAAc1zE,EAAQgtE,YAC1B,MAAMqpB,EAvIV,SAAiB3oB,EAAKxxE,EAAS+a,EAAQ0+E,EAAS4E,GAC9C,MAAM,YAAC8mB,EAAW,WAAEjrB,EAAU,cAAEb,GAAiBr5F,EACjD,IAAIm6F,EAAWn6F,EAAQm6F,SACvB,GAAIgrB,EAAa,CACfjC,GAAQ1xC,EAAKxxE,EAAS+a,EAAQ0+E,EAASS,EAAa7hC,GAAKgmC,GACzD,IAAK,IAAI78F,EAAI,EAAGA,EAAI2jH,IAAe3jH,EACjCgwE,EAAIoE,OAEDtc,MAAM+/B,KACTc,EAAWD,EAAab,EAAgBhhC,GACpCghC,EAAgBhhC,IAAQ,IAC1B8hC,GAAY9hC,IAGlB,CAGA,OAFA6qD,GAAQ1xC,EAAKxxE,EAAS+a,EAAQ0+E,EAASU,EAAUkE,GACjD7sB,EAAIoE,OACGukB,CACT,CAqHqByrB,CAAQp0C,EAAKl7E,KAAMqvH,EAAclsB,EAAS4E,IAjG/D,SAAoB7sB,EAAKxxE,EAAS+a,EAAQ0+E,EAASU,EAAUkE,GAC3D,MAAM,QAACv6F,GAAW9D,GACZ,YAAC61E,EAAW,gBAAEuP,GAAmBthF,EACjC+hH,EAAgC,UAAxB/hH,EAAQg4F,YACjBjmB,IAGDgwC,GACFr0C,EAAIiG,UAA0B,EAAd5B,EAChBrE,EAAIs0C,SAAW1gC,GAAmB,UAElC5T,EAAIiG,UAAY5B,EAChBrE,EAAIs0C,SAAW1gC,GAAmB,SAEhCplF,EAAQmlH,aAjCd,SAA+B3zC,EAAKxxE,EAAS6lH,GAC3C,MAAM,EAACn5G,EAAC,EAAEC,EAAC,WAAEutF,EAAU,YAAE4oB,EAAW,YAAEqC,GAAenlH,EAC/Ci5F,EAActgG,KAAKiT,IAAI5L,EAAQi5F,YAAc6pB,EAAa,GAC1D9pB,EAAch5F,EAAQg5F,YAAc8pB,EAC1C,IAAIthH,EAMJ,IALIqkH,GACFhD,GAAQrxC,EAAKxxE,EAASk6F,EAAa7hC,IAErCmZ,EAAI6D,YACJ7D,EAAI+D,IAAI7oE,EAAGC,EAAGqsF,EAAakB,EAAa7hC,GAAK6hC,GAAY,GACpD14F,EAAI,EAAGA,EAAI2jH,IAAe3jH,EAC7BgwE,EAAIsE,SAIN,IAFAtE,EAAI6D,YACJ7D,EAAI+D,IAAI7oE,EAAGC,EAAGssF,EAAaiB,EAAYA,EAAa7hC,IAC/C72D,EAAI,EAAGA,EAAI2jH,IAAe3jH,EAC7BgwE,EAAIsE,QAER,CAgBIiwC,CAAsBv0C,EAAKxxE,EAAS6lH,GAElCA,GACFhD,GAAQrxC,EAAKxxE,EAASm6F,GAExB+oB,GAAQ1xC,EAAKxxE,EAAS+a,EAAQ0+E,EAASU,EAAUkE,GACjD7sB,EAAIsE,SACN,EA4EIoqB,CAAW1uB,EAAKl7E,KAAMqvH,EAAclsB,EAASU,EAAUkE,GACvD7sB,EAAIuC,SACN,EAkBF,SAASiyC,GAASx0C,EAAK1tE,EAASkY,EAAQlY,GACtC0tE,EAAIy0C,QAAUlwD,GAAe/5C,EAAMipE,eAAgBnhF,EAAQmhF,gBAC3DzT,EAAI+6B,YAAYx2C,GAAe/5C,EAAMkpE,WAAYphF,EAAQohF,aACzD1T,EAAIg7B,eAAiBz2C,GAAe/5C,EAAMmpE,iBAAkBrhF,EAAQqhF,kBACpE3T,EAAIs0C,SAAW/vD,GAAe/5C,EAAMopE,gBAAiBthF,EAAQshF,iBAC7D5T,EAAIiG,UAAY1hB,GAAe/5C,EAAM65D,YAAa/xE,EAAQ+xE,aAC1DrE,EAAIgG,YAAczhB,GAAe/5C,EAAM80D,YAAahtE,EAAQgtE,YAC9D,CACA,SAAS4E,GAAOlE,EAAK8E,EAAUl0E,GAC7BovE,EAAIkE,OAAOtzE,EAAOsK,EAAGtK,EAAOuK,EAC9B,CAUA,SAASu5G,GAASrpD,EAAQwnB,EAASrnF,EAAS,CAAC,GAC3C,MAAMggE,EAAQH,EAAOnjE,QACdrC,MAAO8uH,EAAc,EAAGz1G,IAAK01G,EAAYppD,EAAQ,GAAKhgE,GACtD3F,MAAOgvH,EAAc31G,IAAK41G,GAAcjiC,EACzChtF,EAAQsB,KAAKiT,IAAIu6G,EAAaE,GAC9B31G,EAAM/X,KAAKE,IAAIutH,EAAWE,GAC1BC,EAAUJ,EAAcE,GAAgBD,EAAYC,GAAgBF,EAAcG,GAAcF,EAAYE,EAClH,MAAO,CACLtpD,QACA3lE,QACA2mF,KAAMqG,EAAQrG,KACdvnB,KAAM/lD,EAAMrZ,IAAUkvH,EAAUvpD,EAAQtsD,EAAMrZ,EAAQqZ,EAAMrZ,EAEhE,CACA,SAASmvH,GAAYh1C,EAAKp9C,EAAMiwD,EAASrnF,GACvC,MAAM,OAAC6/D,EAAM,QAAE/4D,GAAWswB,GACpB,MAAC4oC,EAAK,MAAE3lE,EAAK,KAAE2mF,EAAI,KAAEvnB,GAAQyvD,GAASrpD,EAAQwnB,EAASrnF,GACvDypH,EA1BR,SAAuB3iH,GACrB,OAAIA,EAAQ4iH,QACHrwC,GAELvyE,EAAQw7E,SAA8C,aAAnCx7E,EAAQq6E,uBACtB1H,GAEFf,EACT,CAkBqBixC,CAAc7iH,GACjC,IACItC,EAAGw0E,EAAO9rE,GADV,KAACgpF,GAAO,EAAI,QAAEjpC,GAAWjtD,GAAU,CAAC,EAExC,IAAKwE,EAAI,EAAGA,GAAKi1D,IAAQj1D,EACvBw0E,EAAQnZ,GAAQxlE,GAAS4yD,EAAUwM,EAAOj1D,EAAIA,IAAMw7D,GAChDgZ,EAAMiH,OAECiW,GACT1hB,EAAIiE,OAAOO,EAAMtpE,EAAGspE,EAAMrpE,GAC1BumF,GAAO,GAEPuzB,EAAWj1C,EAAKtnE,EAAM8rE,EAAO/rB,EAASnmD,EAAQ4iH,SAEhDx8G,EAAO8rE,GAMT,OAJIgI,IACFhI,EAAQnZ,GAAQxlE,GAAS4yD,EAAUwM,EAAO,IAAMuG,GAChDypD,EAAWj1C,EAAKtnE,EAAM8rE,EAAO/rB,EAASnmD,EAAQ4iH,YAEvC1oC,CACX,CACA,SAAS4oC,GAAgBp1C,EAAKp9C,EAAMiwD,EAASrnF,GAC3C,MAAM6/D,EAASzoC,EAAKyoC,QACd,MAACG,EAAK,MAAE3lE,EAAK,KAAEo/D,GAAQyvD,GAASrpD,EAAQwnB,EAASrnF,IACjD,KAACk2F,GAAO,EAAI,QAAEjpC,GAAWjtD,GAAU,CAAC,EAC1C,IAEIwE,EAAGw0E,EAAO6wC,EAAOhsB,EAAMF,EAAMmsB,EAF7BC,EAAO,EACPC,EAAS,EAEb,MAAMC,EAAcnyG,IAAWzd,GAAS4yD,EAAUwM,EAAO3hD,EAAQA,IAAUkoD,EACrEkqD,EAAQ,KACRrsB,IAASF,IACXnpB,EAAIkE,OAAOqxC,EAAMpsB,GACjBnpB,EAAIkE,OAAOqxC,EAAMlsB,GACjBrpB,EAAIkE,OAAOqxC,EAAMD,GACnB,EAMF,IAJI5zB,IACFld,EAAQnZ,EAAOoqD,EAAW,IAC1Bz1C,EAAIiE,OAAOO,EAAMtpE,EAAGspE,EAAMrpE,IAEvBnL,EAAI,EAAGA,GAAKi1D,IAAQj1D,EAAG,CAE1B,GADAw0E,EAAQnZ,EAAOoqD,EAAWzlH,IACtBw0E,EAAMiH,KACR,SAEF,MAAMvwE,EAAIspE,EAAMtpE,EACVC,EAAIqpE,EAAMrpE,EACVw6G,EAAa,EAAJz6G,EACXy6G,IAAWN,GACTl6G,EAAIkuF,EACNA,EAAOluF,EACEA,EAAIguF,IACbA,EAAOhuF,GAETo6G,GAAQC,EAASD,EAAOr6G,KAAOs6G,IAE/BE,IACA11C,EAAIkE,OAAOhpE,EAAGC,GACdk6G,EAAQM,EACRH,EAAS,EACTnsB,EAAOF,EAAOhuF,GAEhBm6G,EAAQn6G,CACV,CACAu6G,GACF,CACA,SAASE,GAAkBhzF,GACzB,MAAM4iD,EAAO5iD,EAAKtwB,QACZohF,EAAalO,EAAKkO,YAAclO,EAAKkO,WAAWxrF,OAEtD,OADqB06B,EAAKyoE,YAAezoE,EAAKxV,OAAUo4D,EAAKsI,SAA2C,aAAhCtI,EAAKmH,wBAA0CnH,EAAK0vC,SAAYxhC,EACjGshC,GAAlBI,EACvB,CA5HA1B,GAAW5gH,GAAK,MAChB4gH,GAAWx0C,SAAW,CACpBorB,YAAa,SACbhrB,YAAa,OACbsU,qBAAiBjmF,EACjBykH,aAAc,EACd/tC,YAAa,EACb96D,OAAQ,EACR0+E,QAAS,EACTn/B,WAAOn7D,EACPk/F,UAAU,GAEZ6mB,GAAWlmB,cAAgB,CACzBnuB,gBAAiB,mBAgJnB,MAAMw2C,GAA8B,mBAAXC,OAQzB,MAAMC,WAAoB,GACxBvwH,YAAYqwF,GACVh5D,QACA/3B,KAAKwmG,UAAW,EAChBxmG,KAAKwN,aAAU3E,EACf7I,KAAKuyF,YAAS1pF,EACd7I,KAAKsoB,WAAQzf,EACb7I,KAAKmoG,eAAYt/F,EACjB7I,KAAKkxH,WAAQroH,EACb7I,KAAKmxH,aAAUtoH,EACf7I,KAAKoxH,eAAYvoH,EACjB7I,KAAKumG,YAAa,EAClBvmG,KAAKqxH,gBAAiB,EACtBrxH,KAAKsmG,mBAAgBz9F,EACjBkoF,GACFnmF,OAAOiS,OAAO7c,KAAM+wF,EAExB,CACAgW,oBAAoBrM,EAAWrf,GAC7B,MAAM7tE,EAAUxN,KAAKwN,QACrB,IAAKA,EAAQw7E,SAA8C,aAAnCx7E,EAAQq6E,0BAA2Cr6E,EAAQ4iH,UAAYpwH,KAAKqxH,eAAgB,CAClH,MAAM3pC,EAAOl6E,EAAQo6E,SAAW5nF,KAAKsoB,MAAQtoB,KAAKmoG,UAClD1gB,GAA2BznF,KAAKmxH,QAAS3jH,EAASktF,EAAWhT,EAAMrM,GACnEr7E,KAAKqxH,gBAAiB,CACxB,CACF,CACI9qD,WAAOA,GACTvmE,KAAKmxH,QAAU5qD,SACRvmE,KAAKoxH,iBACLpxH,KAAKkxH,MACZlxH,KAAKqxH,gBAAiB,CACxB,CACI9qD,aACF,OAAOvmE,KAAKmxH,OACd,CACI3iC,eACF,OAAOxuF,KAAKoxH,YAAcpxH,KAAKoxH,UD/iInC,SAA0BtzF,EAAMwzF,GAC9B,MAAM/qD,EAASzoC,EAAKyoC,OACdqhB,EAAW9pD,EAAKtwB,QAAQo6E,SACxBlhB,EAAQH,EAAOnjE,OACrB,IAAKsjE,EACH,MAAO,GAET,MAAMghB,IAAS5pD,EAAKxV,OACd,MAACvnB,EAAK,IAAEqZ,GAxDhB,SAAyBmsD,EAAQG,EAAOghB,EAAME,GAC5C,IAAI7mF,EAAQ,EACRqZ,EAAMssD,EAAQ,EAClB,GAAIghB,IAASE,EACX,KAAO7mF,EAAQ2lE,IAAUH,EAAOxlE,GAAO4lF,MACrC5lF,IAGJ,KAAOA,EAAQ2lE,GAASH,EAAOxlE,GAAO4lF,MACpC5lF,IAMF,IAJAA,GAAS2lE,EACLghB,IACFttE,GAAOrZ,GAEFqZ,EAAMrZ,GAASwlE,EAAOnsD,EAAMssD,GAAOigB,MACxCvsE,IAGF,OADAA,GAAOssD,EACA,CAAC3lE,QAAOqZ,MACjB,CAoCuBm3G,CAAgBhrD,EAAQG,EAAOghB,EAAME,GAC1D,OAOF,SAAuB9pD,EAAM0wD,EAAUjoB,EAAQ+qD,GAC7C,OAAKA,GAAmBA,EAAensC,YAAe5e,EAKxD,SAAyBzoC,EAAM0wD,EAAUjoB,EAAQ+qD,GAC/C,MAAME,EAAe1zF,EAAKy0D,OAAOtU,aAC3BwzC,EAAY/iC,GAAU5wD,EAAKtwB,UAC1B84F,cAAehmC,EAAc9yD,SAAS,SAACo6E,IAAa9pD,EACrD4oC,EAAQH,EAAOnjE,OACf8X,EAAS,GACf,IAAI8zE,EAAYyiC,EACZ1wH,EAAQytF,EAAS,GAAGztF,MACpBmK,EAAInK,EACR,SAAS2wH,EAAS9pH,EAAG43C,EAAG0qB,EAAGynD,GACzB,MAAMC,EAAMhqC,GAAY,EAAI,EAC5B,GAAIhgF,IAAM43C,EAAV,CAIA,IADA53C,GAAK8+D,EACEH,EAAO3+D,EAAI8+D,GAAOigB,MACvB/+E,GAAKgqH,EAEP,KAAOrrD,EAAO/mB,EAAIknB,GAAOigB,MACvBnnC,GAAKoyE,EAEHhqH,EAAI8+D,GAAUlnB,EAAIknB,IACpBxrD,EAAOhb,KAAK,CAACa,MAAO6G,EAAI8+D,EAAOtsD,IAAKolC,EAAIknB,EAAOghB,KAAMxd,EAAGxkD,MAAOisG,IAC/D3iC,EAAY2iC,EACZ5wH,EAAQy+C,EAAIknB,EAXd,CAaF,CACA,IAAK,MAAMqnB,KAAWS,EAAU,CAC9BztF,EAAQ6mF,EAAW7mF,EAAQgtF,EAAQhtF,MACnC,IACI2kB,EADA9R,EAAO2yD,EAAOxlE,EAAQ2lE,GAE1B,IAAKx7D,EAAInK,EAAQ,EAAGmK,GAAK6iF,EAAQ3zE,IAAKlP,IAAK,CACzC,MAAMs8E,EAAKjhB,EAAOr7D,EAAIw7D,GACtBhhD,EAAQgpE,GAAU4iC,EAAensC,WAAW/B,GAAcouC,EAAc,CACtE5rH,KAAM,UACNisH,GAAIj+G,EACJwjE,GAAIoQ,EACJsqC,aAAc5mH,EAAI,GAAKw7D,EACvBqrD,YAAa7mH,EAAIw7D,EACjBpG,mBAEEyuB,GAAarpE,EAAOspE,IACtB0iC,EAAS3wH,EAAOmK,EAAI,EAAG6iF,EAAQrG,KAAMsH,GAEvCp7E,EAAO4zE,EACPwH,EAAYtpE,CACd,CACI3kB,EAAQmK,EAAI,GACdwmH,EAAS3wH,EAAOmK,EAAI,EAAG6iF,EAAQrG,KAAMsH,EAEzC,CACA,OAAO9zE,CACT,CAtDS82G,CAAgBl0F,EAAM0wD,EAAUjoB,EAAQ+qD,GAFtC9iC,CAGX,CAXWyjC,CAAcn0F,GADN,IAAb8pD,EACyB,CAAC,CAAC7mF,QAAOqZ,MAAKstE,SArC7C,SAAuBnhB,EAAQxlE,EAAOuU,EAAKoyE,GACzC,MAAMhhB,EAAQH,EAAOnjE,OACf8X,EAAS,GACf,IAEId,EAFAkrD,EAAOvkE,EACP6S,EAAO2yD,EAAOxlE,GAElB,IAAKqZ,EAAMrZ,EAAQ,EAAGqZ,GAAO9E,IAAO8E,EAAK,CACvC,MAAMq2E,EAAMlqB,EAAOnsD,EAAMssD,GACrB+pB,EAAI9J,MAAQ8J,EAAInvF,KACbsS,EAAK+yE,OACRe,GAAO,EACPxsE,EAAOhb,KAAK,CAACa,MAAOA,EAAQ2lE,EAAOtsD,KAAMA,EAAM,GAAKssD,EAAOghB,SAC3D3mF,EAAQukE,EAAOmrB,EAAInvF,KAAO8Y,EAAM,OAGlCkrD,EAAOlrD,EACHxG,EAAK+yE,OACP5lF,EAAQqZ,IAGZxG,EAAO68E,CACT,CAIA,OAHa,OAATnrB,GACFpqD,EAAOhb,KAAK,CAACa,MAAOA,EAAQ2lE,EAAOtsD,IAAKkrD,EAAOoB,EAAOghB,SAEjDxsE,CACT,CAe6Bg3G,CAAc3rD,EAAQxlE,EAFrCqZ,EAAMrZ,EAAQqZ,EAAMssD,EAAQtsD,IACjB0jB,EAAKqqE,WAAuB,IAAVpnG,GAAeqZ,IAAQssD,EAAQ,GAHrBH,EAAQ+qD,EAK7D,CCgiI+Ca,CAAiBnyH,KAAMA,KAAKwN,QAAQugF,SACjF,CACA0hB,QACE,MAAMjhB,EAAWxuF,KAAKwuF,SAChBjoB,EAASvmE,KAAKumE,OACpB,OAAOioB,EAASprF,QAAUmjE,EAAOioB,EAAS,GAAGztF,MAC/C,CACAukE,OACE,MAAMkpB,EAAWxuF,KAAKwuF,SAChBjoB,EAASvmE,KAAKumE,OACdG,EAAQ8nB,EAASprF,OACvB,OAAOsjE,GAASH,EAAOioB,EAAS9nB,EAAQ,GAAGtsD,IAC7C,CACAwjB,YAAY8hD,EAAO55D,GACjB,MAAMtY,EAAUxN,KAAKwN,QACfzG,EAAQ24E,EAAM55D,GACdygD,EAASvmE,KAAKumE,OACdioB,EAAWD,GAAevuF,KAAM,CAAC8lB,WAAU/kB,MAAOgG,EAAOqT,IAAKrT,IACpE,IAAKynF,EAASprF,OACZ,OAEF,MAAM8X,EAAS,GACTk3G,EAlGV,SAAiC5kH,GAC/B,OAAIA,EAAQ4iH,QACHvkC,GAELr+E,EAAQw7E,SAA8C,aAAnCx7E,EAAQq6E,uBACtBiE,GAEFF,EACT,CA0FyBymC,CAAwB7kH,GAC7C,IAAItC,EAAGi1D,EACP,IAAKj1D,EAAI,EAAGi1D,EAAOquB,EAASprF,OAAQ8H,EAAIi1D,IAAQj1D,EAAG,CACjD,MAAM,MAACnK,EAAK,IAAEqZ,GAAOo0E,EAAStjF,GACxBksE,EAAK7Q,EAAOxlE,GACZs2E,EAAK9Q,EAAOnsD,GAClB,GAAIg9D,IAAOC,EAAI,CACbn8D,EAAOhb,KAAKk3E,GACZ,QACF,CACA,MACMk7C,EAAeF,EAAah7C,EAAIC,EAD5Bh1E,KAAK+V,KAAKrR,EAAQqwE,EAAGtxD,KAAcuxD,EAAGvxD,GAAYsxD,EAAGtxD,KAClBtY,EAAQ4iH,SACrDkC,EAAaxsG,GAAY45D,EAAM55D,GAC/B5K,EAAOhb,KAAKoyH,EACd,CACA,OAAyB,IAAlBp3G,EAAO9X,OAAe8X,EAAO,GAAKA,CAC3C,CACAg1G,YAAYh1C,EAAK6S,EAASrnF,GAExB,OADsBoqH,GAAkB9wH,KACjCuyH,CAAcr3C,EAAKl7E,KAAM+tF,EAASrnF,EAC3C,CACA8rH,KAAKt3C,EAAKn6E,EAAO2lE,GACf,MAAM8nB,EAAWxuF,KAAKwuF,SAChB+jC,EAAgBzB,GAAkB9wH,MACxC,IAAI0nF,EAAO1nF,KAAKsoB,MAChBvnB,EAAQA,GAAS,EACjB2lE,EAAQA,GAAU1mE,KAAKumE,OAAOnjE,OAASrC,EACvC,IAAK,MAAMgtF,KAAWS,EACpB9G,GAAQ6qC,EAAcr3C,EAAKl7E,KAAM+tF,EAAS,CAAChtF,QAAOqZ,IAAKrZ,EAAQ2lE,EAAQ,IAEzE,QAASghB,CACX,CACAqI,KAAK7U,EAAKwf,EAAW35F,EAAO2lE,GAC1B,MAAMl5D,EAAUxN,KAAKwN,SAAW,CAAC,GAClBxN,KAAKumE,QAAU,IACnBnjE,QAAUoK,EAAQ+xE,cAC3BrE,EAAImC,OArGV,SAAcnC,EAAKp9C,EAAM/8B,EAAO2lE,GAC1BqqD,KAAcjzF,EAAKtwB,QAAQugF,QAzBjC,SAA6B7S,EAAKp9C,EAAM/8B,EAAO2lE,GAC7C,IAAI8rD,EAAO10F,EAAKozF,MACXsB,IACHA,EAAO10F,EAAKozF,MAAQ,IAAIF,OACpBlzF,EAAK00F,KAAKA,EAAMzxH,EAAO2lE,IACzB8rD,EAAKtzC,aAGTwwC,GAASx0C,EAAKp9C,EAAKtwB,SACnB0tE,EAAIsE,OAAOgzC,EACb,CAgBIC,CAAoBv3C,EAAKp9C,EAAM/8B,EAAO2lE,GAf1C,SAA0BwU,EAAKp9C,EAAM/8B,EAAO2lE,GAC1C,MAAM,SAAC8nB,EAAQ,QAAEhhF,GAAWswB,EACtBy0F,EAAgBzB,GAAkBhzF,GACxC,IAAK,MAAMiwD,KAAWS,EACpBkhC,GAASx0C,EAAK1tE,EAASugF,EAAQroE,OAC/Bw1D,EAAI6D,YACAwzC,EAAcr3C,EAAKp9C,EAAMiwD,EAAS,CAAChtF,QAAOqZ,IAAKrZ,EAAQ2lE,EAAQ,KACjEwU,EAAIgE,YAENhE,EAAIsE,QAER,CAMIkzC,CAAiBx3C,EAAKp9C,EAAM/8B,EAAO2lE,EAEvC,CAgGMqpB,CAAK7U,EAAKl7E,KAAMe,EAAO2lE,GACvBwU,EAAIuC,WAEFz9E,KAAKwmG,WACPxmG,KAAKqxH,gBAAiB,EACtBrxH,KAAKkxH,WAAQroH,EAEjB,EAyBF,SAAS8pH,GAAUxjH,EAAI46E,EAAKplE,EAAM4jF,GAChC,MAAM/6F,EAAU2B,EAAG3B,SACZ,CAACmX,GAAO5d,GAASoI,EAAGq5F,SAAS,CAAC7jF,GAAO4jF,GAC5C,OAAQlmG,KAAK+V,IAAI2xE,EAAMhjF,GAASyG,EAAQmxE,OAASnxE,EAAQolH,SAC3D,CA3BA3B,GAAYjjH,GAAK,OACjBijH,GAAY72C,SAAW,CACrBuU,eAAgB,OAChBC,WAAY,GACZC,iBAAkB,EAClBC,gBAAiB,QACjBvP,YAAa,EACb0J,iBAAiB,EACjBpB,uBAAwB,UACxBvI,MAAM,EACNsI,UAAU,EACVwoC,SAAS,EACTpnC,QAAS,GAEXioC,GAAYvoB,cAAgB,CAC1BnuB,gBAAiB,kBACjBC,YAAa,eAEfy2C,GAAY9+D,YAAc,CACxBuqB,aAAa,EACbC,WAAalzE,GAAkB,eAATA,GAAkC,SAATA,GAQjD,MAAMopH,WAAqB,GACzBnyH,YAAYqwF,GACVh5D,QACA/3B,KAAKwN,aAAU3E,EACf7I,KAAKwmF,YAAS39E,EACd7I,KAAK2mF,UAAO99E,EACZ7I,KAAKsB,UAAOuH,EACRkoF,GACFnmF,OAAOiS,OAAO7c,KAAM+wF,EAExB,CACAypB,QAAQsY,EAAQC,EAAQxqB,GACtB,MAAM/6F,EAAUxN,KAAKwN,SACf,EAAC4I,EAAC,EAAEC,GAAKrW,KAAKwoG,SAAS,CAAC,IAAK,KAAMD,GACzC,OAASlmG,KAAKC,IAAIwwH,EAAS18G,EAAG,GAAK/T,KAAKC,IAAIywH,EAAS18G,EAAG,GAAMhU,KAAKC,IAAIkL,EAAQolH,UAAYplH,EAAQmxE,OAAQ,EAC7G,CACAq0C,SAASF,EAAQvqB,GACf,OAAOoqB,GAAU3yH,KAAM8yH,EAAQ,IAAKvqB,EACtC,CACA0qB,SAASF,EAAQxqB,GACf,OAAOoqB,GAAU3yH,KAAM+yH,EAAQ,IAAKxqB,EACtC,CACA0S,eAAe1S,GACb,MAAM,EAACnyF,EAAC,EAAEC,GAAKrW,KAAKwoG,SAAS,CAAC,IAAK,KAAMD,GACzC,MAAO,CAACnyF,IAAGC,IACb,CACA4nC,KAAKzwC,GAEH,IAAImxE,GADJnxE,EAAUA,GAAWxN,KAAKwN,SAAW,CAAC,GACjBmxE,QAAU,EAG/B,OAFAA,EAASt8E,KAAKiT,IAAIqpE,EAAQA,GAAUnxE,EAAQ0lH,aAAe,GAE3B,GAAxBv0C,GADYA,GAAUnxE,EAAQ+xE,aAAe,GAEvD,CACAwQ,KAAK7U,EAAKyE,GACR,MAAMnyE,EAAUxN,KAAKwN,QACjBxN,KAAK2mF,MAAQn5E,EAAQmxE,OAAS,KAAQc,GAAez/E,KAAM2/E,EAAM3/E,KAAKi+C,KAAKzwC,GAAW,KAG1F0tE,EAAIgG,YAAc1zE,EAAQgtE,YAC1BU,EAAIiG,UAAY3zE,EAAQ+xE,YACxBrE,EAAI4F,UAAYtzE,EAAQ+sE,gBACxB6D,GAAUlD,EAAK1tE,EAASxN,KAAKoW,EAAGpW,KAAKqW,GACvC,CACA+jG,WACE,MAAM5sG,EAAUxN,KAAKwN,SAAW,CAAC,EACjC,OAAOA,EAAQmxE,OAASnxE,EAAQolH,SAClC,EAiBF,SAASO,GAAaC,EAAK7qB,GACzB,MAAM,EAACnyF,EAAC,EAAEC,EAAC,KAAEga,EAAI,MAAEra,EAAK,OAAEC,GAAUm9G,EAAI5qB,SAAS,CAAC,IAAK,IAAK,OAAQ,QAAS,UAAWD,GACxF,IAAI91F,EAAME,EAAOuD,EAAKC,EAAQk9G,EAc9B,OAbID,EAAIt0B,YACNu0B,EAAOp9G,EAAS,EAChBxD,EAAOpQ,KAAKE,IAAI6T,EAAGia,GACnB1d,EAAQtQ,KAAKiT,IAAIc,EAAGia,GACpBna,EAAMG,EAAIg9G,EACVl9G,EAASE,EAAIg9G,IAEbA,EAAOr9G,EAAQ,EACfvD,EAAO2D,EAAIi9G,EACX1gH,EAAQyD,EAAIi9G,EACZn9G,EAAM7T,KAAKE,IAAI8T,EAAGga,GAClBla,EAAS9T,KAAKiT,IAAIe,EAAGga,IAEhB,CAAC5d,OAAMyD,MAAKvD,QAAOwD,SAC5B,CACA,SAASm9G,GAAY3sC,EAAM5/E,EAAOxE,EAAK+S,GACrC,OAAOqxE,EAAO,EAAI9hB,GAAY99D,EAAOxE,EAAK+S,EAC5C,CAsDA,SAASklG,GAAQ4Y,EAAKh9G,EAAGC,EAAGkyF,GAC1B,MAAMgrB,EAAc,OAANn9G,EACRo9G,EAAc,OAANn9G,EAER23E,EAASolC,KADEG,GAASC,IACSL,GAAaC,EAAK7qB,GACrD,OAAOva,IACHulC,GAASzuD,GAAW1uD,EAAG43E,EAAOv7E,KAAMu7E,EAAOr7E,UAC3C6gH,GAAS1uD,GAAWzuD,EAAG23E,EAAO93E,IAAK83E,EAAO73E,QAChD,CAIA,SAASs9G,GAAkBv4C,EAAKvlE,GAC9BulE,EAAIvlE,KAAKA,EAAKS,EAAGT,EAAKU,EAAGV,EAAK61D,EAAG71D,EAAKw0D,EACxC,CACA,SAASupD,GAAY/9G,EAAM+jG,EAAQia,EAAU,CAAC,GAC5C,MAAMv9G,EAAIT,EAAKS,IAAMu9G,EAAQv9G,GAAKsjG,EAAS,EACrCrjG,EAAIV,EAAKU,IAAMs9G,EAAQt9G,GAAKqjG,EAAS,EACrCluC,GAAK71D,EAAKS,EAAIT,EAAK61D,IAAMmoD,EAAQv9G,EAAIu9G,EAAQnoD,EAAIkuC,EAAS,GAAKtjG,EAC/D+zD,GAAKx0D,EAAKU,EAAIV,EAAKw0D,IAAMwpD,EAAQt9G,EAAIs9G,EAAQxpD,EAAIuvC,EAAS,GAAKrjG,EACrE,MAAO,CACLD,EAAGT,EAAKS,EAAIA,EACZC,EAAGV,EAAKU,EAAIA,EACZm1D,EAAG71D,EAAK61D,EAAIA,EACZrB,EAAGx0D,EAAKw0D,EAAIA,EACZwU,OAAQhpE,EAAKgpE,OAEjB,CApHAk0C,GAAa7kH,GAAK,QAClB6kH,GAAaz4C,SAAW,CACtBmF,YAAa,EACbqzC,UAAW,EACXntB,iBAAkB,EAClBytB,YAAa,EACbz0C,WAAY,SACZE,OAAQ,EACRD,SAAU,GAEZm0C,GAAanqB,cAAgB,CAC3BnuB,gBAAiB,kBACjBC,YAAa,eAyGf,MAAMo5C,WAAmB,GACvBlzH,YAAYqwF,GACVh5D,QACA/3B,KAAKwN,aAAU3E,EACf7I,KAAK8+F,gBAAaj2F,EAClB7I,KAAKqwB,UAAOxnB,EACZ7I,KAAKgW,WAAQnN,EACb7I,KAAKiW,YAASpN,EACd7I,KAAKs/F,mBAAgBz2F,EACjBkoF,GACFnmF,OAAOiS,OAAO7c,KAAM+wF,EAExB,CACAhB,KAAK7U,GACH,MAAM,cAACokB,EAAe9xF,SAAS,YAACgtE,EAAW,gBAAED,IAAoBv6E,MAC3D,MAACuvH,EAAK,MAAEsE,GAvElB,SAAuBT,GACrB,MAAMplC,EAASmlC,GAAaC,GACtBp9G,EAAQg4E,EAAOr7E,MAAQq7E,EAAOv7E,KAC9BwD,EAAS+3E,EAAO73E,OAAS63E,EAAO93E,IAChC2wF,EA7BR,SAA0BusB,EAAKU,EAAMC,GACnC,MAAMhtH,EAAQqsH,EAAI5lH,QAAQ+xE,YACpBoH,EAAOysC,EAAIv0B,cACXp0F,EAAIk4E,GAAO57E,GACjB,MAAO,CACLsrB,EAAGihG,GAAY3sC,EAAKzwE,IAAKzL,EAAEyL,IAAK,EAAG69G,GACnCt+F,EAAG69F,GAAY3sC,EAAKh0E,MAAOlI,EAAEkI,MAAO,EAAGmhH,GACvCtsG,EAAG8rG,GAAY3sC,EAAKxwE,OAAQ1L,EAAE0L,OAAQ,EAAG49G,GACzC7pD,EAAGopD,GAAY3sC,EAAKl0E,KAAMhI,EAAEgI,KAAM,EAAGqhH,GAEzC,CAmBiBE,CAAiBZ,EAAKp9G,EAAQ,EAAGC,EAAS,GACnD0oE,EAnBR,SAA2By0C,EAAKU,EAAMC,GACpC,MAAM,mBAAC/0B,GAAsBo0B,EAAI5qB,SAAS,CAAC,uBACrCzhG,EAAQqsH,EAAI5lH,QAAQ8/G,aACpB7iH,EAAIm4E,GAAc77E,GAClBktH,EAAO5xH,KAAKE,IAAIuxH,EAAMC,GACtBptC,EAAOysC,EAAIv0B,cACXq1B,EAAel1B,GAAsB3/B,GAASt4D,GACpD,MAAO,CACLm7E,QAASoxC,IAAaY,GAAgBvtC,EAAKzwE,KAAOywE,EAAKl0E,KAAMhI,EAAEy3E,QAAS,EAAG+xC,GAC3E5xC,SAAUixC,IAAaY,GAAgBvtC,EAAKzwE,KAAOywE,EAAKh0E,MAAOlI,EAAE43E,SAAU,EAAG4xC,GAC9E9xC,WAAYmxC,IAAaY,GAAgBvtC,EAAKxwE,QAAUwwE,EAAKl0E,KAAMhI,EAAE03E,WAAY,EAAG8xC,GACpF7xC,YAAakxC,IAAaY,GAAgBvtC,EAAKxwE,QAAUwwE,EAAKh0E,MAAOlI,EAAE23E,YAAa,EAAG6xC,GAE3F,CAMiBE,CAAkBf,EAAKp9G,EAAQ,EAAGC,EAAS,GAC1D,MAAO,CACL49G,MAAO,CACLz9G,EAAG43E,EAAOv7E,KACV4D,EAAG23E,EAAO93E,IACVs1D,EAAGx1D,EACHm0D,EAAGl0D,EACH0oE,UAEF4wC,MAAO,CACLn5G,EAAG43E,EAAOv7E,KAAOo0F,EAAO38B,EACxB7zD,EAAG23E,EAAO93E,IAAM2wF,EAAOx0E,EACvBm5C,EAAGx1D,EAAQ6wF,EAAO38B,EAAI28B,EAAOpxE,EAC7B00C,EAAGl0D,EAAS4wF,EAAOx0E,EAAIw0E,EAAOr/E,EAC9Bm3D,OAAQ,CACNuD,QAAS7/E,KAAKiT,IAAI,EAAGqpE,EAAOuD,QAAU7/E,KAAKiT,IAAIuxF,EAAOx0E,EAAGw0E,EAAO38B,IAChEmY,SAAUhgF,KAAKiT,IAAI,EAAGqpE,EAAO0D,SAAWhgF,KAAKiT,IAAIuxF,EAAOx0E,EAAGw0E,EAAOpxE,IAClE0sD,WAAY9/E,KAAKiT,IAAI,EAAGqpE,EAAOwD,WAAa9/E,KAAKiT,IAAIuxF,EAAOr/E,EAAGq/E,EAAO38B,IACtEkY,YAAa//E,KAAKiT,IAAI,EAAGqpE,EAAOyD,YAAc//E,KAAKiT,IAAIuxF,EAAOr/E,EAAGq/E,EAAOpxE,MAIhF,CA4C2B2+F,CAAcp0H,MAC/Bq0H,GAnCS11C,EAmCek1C,EAAMl1C,QAlCxBuD,SAAWvD,EAAO0D,UAAY1D,EAAOwD,YAAcxD,EAAOyD,YAkCxBH,GAAqBwxC,GAnCvE,IAAmB90C,EAoCfzD,EAAImC,OACAw2C,EAAMroD,IAAM+jD,EAAM/jD,GAAKqoD,EAAM1pD,IAAMolD,EAAMplD,IAC3C+Q,EAAI6D,YACJs1C,EAAYn5C,EAAKw4C,GAAYG,EAAOv0B,EAAeiwB,IACnDr0C,EAAI2E,OACJw0C,EAAYn5C,EAAKw4C,GAAYnE,GAAQjwB,EAAeu0B,IACpD34C,EAAI4F,UAAYtG,EAChBU,EAAIoE,KAAK,YAEXpE,EAAI6D,YACJs1C,EAAYn5C,EAAKw4C,GAAYnE,EAAOjwB,IACpCpkB,EAAI4F,UAAYvG,EAChBW,EAAIoE,OACJpE,EAAIuC,SACN,CACA+8B,QAAQsY,EAAQC,EAAQxqB,GACtB,OAAOiS,GAAQx6G,KAAM8yH,EAAQC,EAAQxqB,EACvC,CACAyqB,SAASF,EAAQvqB,GACf,OAAOiS,GAAQx6G,KAAM8yH,EAAQ,KAAMvqB,EACrC,CACA0qB,SAASF,EAAQxqB,GACf,OAAOiS,GAAQx6G,KAAM,KAAM+yH,EAAQxqB,EACrC,CACA0S,eAAe1S,GACb,MAAM,EAACnyF,EAAC,EAAEC,EAAC,KAAEga,EAAI,WAAEyuE,GAAc9+F,KAAKwoG,SAAS,CAAC,IAAK,IAAK,OAAQ,cAAeD,GACjF,MAAO,CACLnyF,EAAG0oF,GAAc1oF,EAAIia,GAAQ,EAAIja,EACjCC,EAAGyoF,EAAazoF,GAAKA,EAAIga,GAAQ,EAErC,CACA+pF,SAASz1F,GACP,MAAgB,MAATA,EAAe3kB,KAAKgW,MAAQ,EAAIhW,KAAKiW,OAAS,CACvD,EAEF29G,GAAW5lH,GAAK,MAChB4lH,GAAWx5C,SAAW,CACpBykB,cAAe,QACftf,YAAa,EACb+tC,aAAc,EACdhuB,cAAe,OACf7gB,gBAAY51E,GAEd+qH,GAAWlrB,cAAgB,CACzBnuB,gBAAiB,kBACjBC,YAAa,eAGf,IAAI,GAAwB5vE,OAAOm4C,OAAO,CAC1CC,UAAW,KACX4rE,WAAYA,GACZqC,YAAaA,GACb4B,aAAcA,GACde,WAAYA,KAsGZ,SAASU,GAAsBhtE,GAC7B,GAAIA,EAAQi/C,WAAY,CACtB,MAAM1iG,EAAOyjD,EAAQyuC,aACdzuC,EAAQi/C,kBACRj/C,EAAQyuC,MACfnrF,OAAOyB,eAAei7C,EAAS,OAAQ,CAACvgD,MAAOlD,GACjD,CACF,CACA,SAAS0wH,GAAmB75C,GAC1BA,EAAM72E,KAAK42E,SAASxuE,SAASq7C,IAC3BgtE,GAAsBhtE,EAAQ,GAElC,CAiBA,IAAIktE,GAAoB,CACtBxmH,GAAI,aACJosE,SAAU,CACRq6C,UAAW,UACXx0H,SAAS,GAEXy0H,qBAAsB,CAACh6C,EAAO9xE,EAAM4E,KAClC,IAAKA,EAAQvN,QAEX,YADAs0H,GAAmB75C,GAGrB,MAAMmjC,EAAiBnjC,EAAM1kE,MAC7B0kE,EAAM72E,KAAK42E,SAASxuE,SAAQ,CAACq7C,EAASgZ,KACpC,MAAM,MAACy1B,EAAK,UAAE1a,GAAa/zB,EACrBjP,EAAOqiC,EAAMgd,eAAep3B,GAC5Bz8D,EAAOkyF,GAASzuC,EAAQzjD,KAC9B,GAAsD,MAAlD+a,GAAQ,CAACy8D,EAAWX,EAAMltE,QAAQ6tE,YACpC,OAEF,IAAKhjC,EAAK8R,WAAWksC,mBACnB,OAEF,MAAMs+B,EAAQj6C,EAAMqB,OAAO1jC,EAAK0+C,SAChC,GAAmB,WAAf49B,EAAM/uH,MAAoC,SAAf+uH,EAAM/uH,KACnC,OAEF,GAAI80E,EAAMltE,QAAQmuE,QAChB,OAEF,IAoBIi5C,GApBA,MAAC7zH,EAAK,MAAE2lE,GA7ClB,SAAmDruB,EAAMkuB,GACvD,MAAME,EAAaF,EAAOnjE,OAC1B,IACIsjE,EADA3lE,EAAQ,EAEZ,MAAM,OAAC6lE,GAAUvuB,GACX,IAAC91C,EAAG,IAAE+S,EAAG,WAAEwxD,EAAU,WAAEC,GAAcH,EAAOI,gBASlD,OARIF,IACF/lE,EAAQ8jE,GAAYQ,GAAakB,EAAQK,EAAOjiD,KAAMpiB,GAAK6iE,GAAI,EAAGqB,EAAa,IAG/EC,EADEK,EACMlC,GAAYQ,GAAakB,EAAQK,EAAOjiD,KAAMrP,GAAK6vD,GAAK,EAAGpkE,EAAO0lE,GAAc1lE,EAEhF0lE,EAAa1lE,EAEhB,CAACA,QAAO2lE,QACjB,CA8B2BmuD,CAA0Cx8E,EAAMx0C,GAErE,GAAI6iE,IADcl5D,EAAQsnH,WAAa,EAAIjX,GAEzCyW,GAAsBhtE,OADxB,CAmBA,OAfI8X,GAAc22B,KAChBzuC,EAAQyuC,MAAQlyF,SACTyjD,EAAQzjD,KACf+G,OAAOyB,eAAei7C,EAAS,OAAQ,CACrC/6C,cAAc,EACdZ,YAAY,EACZ+P,IAAK,WACH,OAAO1b,KAAKumG,UACd,EACA5qF,IAAK,SAAS2Z,GACZt1B,KAAK+1F,MAAQzgE,CACf,KAII9nB,EAAQinH,WAChB,IAAK,OACHG,EApLR,SAAwB/wH,EAAM9C,EAAO2lE,EAAOm3C,EAAgBrwG,GAC1D,MAAMunH,EAAUvnH,EAAQunH,SAAWlX,EACnC,GAAIkX,GAAWruD,EACb,OAAO7iE,EAAKV,MAAMpC,EAAOA,EAAQ2lE,GAEnC,MAAMkuD,EAAY,GACZI,GAAetuD,EAAQ,IAAMquD,EAAU,GAC7C,IAAIE,EAAe,EACnB,MAAMC,EAAWn0H,EAAQ2lE,EAAQ,EACjC,IACIx7D,EAAGiqH,EAAcC,EAASz1C,EAAM01C,EADhClsH,EAAIpI,EAGR,IADA6zH,EAAUK,KAAkBpxH,EAAKsF,GAC5B+B,EAAI,EAAGA,EAAI6pH,EAAU,EAAG7pH,IAAK,CAChC,IAEI2sE,EAFA44C,EAAO,EACP6E,EAAO,EAEX,MAAMC,EAAgBlzH,KAAK67B,OAAOhzB,EAAI,GAAK8pH,GAAe,EAAIj0H,EACxDy0H,EAAcnzH,KAAKE,IAAIF,KAAK67B,OAAOhzB,EAAI,GAAK8pH,GAAe,EAAGtuD,GAAS3lE,EACvE00H,EAAiBD,EAAcD,EACrC,IAAK19C,EAAI09C,EAAe19C,EAAI29C,EAAa39C,IACvC44C,GAAQ5sH,EAAKg0E,GAAGzhE,EAChBk/G,GAAQzxH,EAAKg0E,GAAGxhE,EAElBo6G,GAAQgF,EACRH,GAAQG,EACR,MAAMC,EAAYrzH,KAAK67B,MAAMhzB,EAAI8pH,GAAe,EAAIj0H,EAC9C40H,EAAUtzH,KAAKE,IAAIF,KAAK67B,OAAOhzB,EAAI,GAAK8pH,GAAe,EAAGtuD,GAAS3lE,GAClEqV,EAAGw/G,EAASv/G,EAAGw/G,GAAWhyH,EAAKsF,GAEtC,IADAisH,EAAUz1C,GAAQ,EACb9H,EAAI69C,EAAW79C,EAAI89C,EAAS99C,IAC/B8H,EAAO,GAAMt9E,KAAK+V,KACfw9G,EAAUnF,IAAS5sH,EAAKg0E,GAAGxhE,EAAIw/G,IAC/BD,EAAU/xH,EAAKg0E,GAAGzhE,IAAMk/G,EAAOO,IAE9Bl2C,EAAOy1C,IACTA,EAAUz1C,EACVw1C,EAAetxH,EAAKg0E,GACpBw9C,EAAQx9C,GAGZ+8C,EAAUK,KAAkBE,EAC5BhsH,EAAIksH,CACN,CAEA,OADAT,EAAUK,KAAkBpxH,EAAKqxH,GAC1BN,CACT,CAuIoBkB,CAAejyH,EAAM9C,EAAO2lE,EAAOm3C,EAAgBrwG,GAC/D,MACF,IAAK,UACHonH,EAzIR,SAA0B/wH,EAAM9C,EAAO2lE,EAAOm3C,GAC5C,IAEI3yG,EAAGw0E,EAAOtpE,EAAGC,EAAGk6G,EAAOwF,EAAUC,EAAUC,EAAY1xB,EAAMF,EAF7DosB,EAAO,EACPC,EAAS,EAEb,MAAMkE,EAAY,GACZM,EAAWn0H,EAAQ2lE,EAAQ,EAC3BwvD,EAAOryH,EAAK9C,GAAOqV,EAEnB+/G,EADOtyH,EAAKqxH,GAAU9+G,EACV8/G,EAClB,IAAKhrH,EAAInK,EAAOmK,EAAInK,EAAQ2lE,IAASx7D,EAAG,CACtCw0E,EAAQ77E,EAAKqH,GACbkL,GAAKspE,EAAMtpE,EAAI8/G,GAAQC,EAAKtY,EAC5BxnG,EAAIqpE,EAAMrpE,EACV,MAAMw6G,EAAa,EAAJz6G,EACf,GAAIy6G,IAAWN,EACTl6G,EAAIkuF,GACNA,EAAOluF,EACP0/G,EAAW7qH,GACFmL,EAAIguF,IACbA,EAAOhuF,EACP2/G,EAAW9qH,GAEbulH,GAAQC,EAASD,EAAO/wC,EAAMtpE,KAAOs6G,MAChC,CACL,MAAM0F,EAAYlrH,EAAI,EACtB,IAAKk0D,GAAc22D,KAAc32D,GAAc42D,GAAW,CACxD,MAAMK,EAAqBh0H,KAAKE,IAAIwzH,EAAUC,GACxCM,EAAqBj0H,KAAKiT,IAAIygH,EAAUC,GAC1CK,IAAuBJ,GAAcI,IAAuBD,GAC9DxB,EAAU10H,KAAK,IACV2D,EAAKwyH,GACRjgH,EAAGq6G,IAGH6F,IAAuBL,GAAcK,IAAuBF,GAC9DxB,EAAU10H,KAAK,IACV2D,EAAKyyH,GACRlgH,EAAGq6G,GAGT,CACIvlH,EAAI,GAAKkrH,IAAcH,GACzBrB,EAAU10H,KAAK2D,EAAKuyH,IAEtBxB,EAAU10H,KAAKw/E,GACf6wC,EAAQM,EACRH,EAAS,EACTnsB,EAAOF,EAAOhuF,EACd0/G,EAAWC,EAAWC,EAAa/qH,CACrC,CACF,CACA,OAAO0pH,CACT,CAqFoB2B,CAAiB1yH,EAAM9C,EAAO2lE,EAAOm3C,GACjD,MACF,QACE,MAAM,IAAIj4E,MAAM,qCAAqCp4B,EAAQinH,cAE/DntE,EAAQi/C,WAAaquB,CA1BrB,CA0B8B,GAC9B,EAEJ91G,QAAQ47D,GACN65C,GAAmB75C,EACrB,GAyCF,SAAS87C,GAAW1wG,EAAU2pF,EAAOnqC,EAAMoiB,GACzC,GAAIA,EACF,OAEF,IAAI3mF,EAAQ0uG,EAAM3pF,GACd1L,EAAMkrD,EAAKx/C,GAKf,MAJiB,UAAbA,IACF/kB,EAAQujE,GAAgBvjE,GACxBqZ,EAAMkqD,GAAgBlqD,IAEjB,CAAC0L,WAAU/kB,QAAOqZ,MAC3B,CAmBA,SAASq8G,GAAgB11H,EAAOqZ,EAAKmsD,GACnC,KAAMnsD,EAAMrZ,EAAOqZ,IAAO,CACxB,MAAMslE,EAAQnZ,EAAOnsD,GACrB,IAAK4oD,MAAM0c,EAAMtpE,KAAO4sD,MAAM0c,EAAMrpE,GAClC,KAEJ,CACA,OAAO+D,CACT,CACA,SAASs8G,GAASvtH,EAAGqe,EAAGgO,EAAM9Y,GAC5B,OAAIvT,GAAKqe,EACA9K,EAAGvT,EAAEqsB,GAAOhO,EAAEgO,IAEhBrsB,EAAIA,EAAEqsB,GAAQhO,EAAIA,EAAEgO,GAAQ,CACrC,CAEA,SAASmhG,GAAoB3zG,EAAU8a,GACrC,IAAIyoC,EAAS,GACTj+C,GAAQ,EAOZ,OANIre,GAAQ+Y,IACVsF,GAAQ,EACRi+C,EAASvjD,GAETujD,EAzCJ,SAA6BvjD,EAAU8a,GACrC,MAAM,EAAC1nB,EAAI,KAAI,EAAEC,EAAI,MAAQ2M,GAAY,CAAC,EACpC4zG,EAAa94F,EAAKyoC,OAClBA,EAAS,GAaf,OAZAzoC,EAAK0wD,SAASviF,SAAQ,EAAElL,QAAOqZ,UAC7BA,EAAMq8G,GAAgB11H,EAAOqZ,EAAKw8G,GAClC,MAAMnnB,EAAQmnB,EAAW71H,GACnBukE,EAAOsxD,EAAWx8G,GACd,OAAN/D,GACFkwD,EAAOrmE,KAAK,CAACkW,EAAGq5F,EAAMr5F,EAAGC,MACzBkwD,EAAOrmE,KAAK,CAACkW,EAAGkvD,EAAKlvD,EAAGC,OACT,OAAND,IACTmwD,EAAOrmE,KAAK,CAACkW,IAAGC,EAAGo5F,EAAMp5F,IACzBkwD,EAAOrmE,KAAK,CAACkW,IAAGC,EAAGivD,EAAKjvD,IAC1B,IAEKkwD,CACT,CAwBaswD,CAAoB7zG,EAAU8a,GAElCyoC,EAAOnjE,OAAS,IAAI6tH,GAAY,CACrC1qD,SACA/4D,QAAS,CAACw7E,QAAS,GACnB1gE,QACA6/E,UAAW7/E,IACR,IACP,CACA,SAASwuG,GAAiB9qH,GACxB,OAAOA,IAA0B,IAAhBA,EAAOszE,IAC1B,CAEA,SAASy3C,GAAex7E,EAAS/8B,EAAOw4G,GAEtC,IAAI13C,EADW/jC,EAAQ/8B,GACL8gE,KAClB,MAAMtkE,EAAU,CAACwD,GACjB,IAAI1S,EACJ,IAAKkrH,EACH,OAAO13C,EAET,MAAgB,IAATA,IAA6C,IAA3BtkE,EAAQ3X,QAAQi8E,IAAc,CACrD,IAAKhgB,GAAeggB,GAClB,OAAOA,EAGT,GADAxzE,EAASyvC,EAAQ+jC,IACZxzE,EACH,OAAO,EAET,GAAIA,EAAOsiC,QACT,OAAOkxC,EAETtkE,EAAQ9a,KAAKo/E,GACbA,EAAOxzE,EAAOwzE,IAChB,CACA,OAAO,CACT,CACA,SAAS23C,GAAYn5F,EAAMtf,EAAOkoD,GAChC,MAAM4Y,EA6CR,SAAyBxhD,GACvB,MAAMtwB,EAAUswB,EAAKtwB,QACf0pH,EAAa1pH,EAAQ8xE,KAC3B,IAAIA,EAAO7f,GAAey3D,GAAcA,EAAWprH,OAAQorH,GAI3D,YAHaruH,IAATy2E,IACFA,IAAS9xE,EAAQ+sE,kBAEN,IAAT+E,GAA2B,OAATA,KAGT,IAATA,EACK,SAEFA,EACT,CA3De63C,CAAgBr5F,GAC7B,GAAIuhC,GAASigB,GACX,OAAOtc,MAAMsc,EAAKv4E,QAAiBu4E,EAErC,IAAIxzE,EAAS8zD,WAAW0f,GACxB,OAAIhgB,GAAexzD,IAAWzJ,KAAK67B,MAAMpyB,KAAYA,EAKvD,SAA2BsrH,EAAS54G,EAAO1S,EAAQ46D,GAIjD,MAHgB,MAAZ0wD,GAA+B,MAAZA,IACrBtrH,EAAS0S,EAAQ1S,KAEfA,IAAW0S,GAAS1S,EAAS,GAAKA,GAAU46D,IAGzC56D,CACT,CAZWurH,CAAkB/3C,EAAK,GAAI9gE,EAAO1S,EAAQ46D,GAE5C,CAAC,SAAU,QAAS,MAAO,QAAS,SAASrjE,QAAQi8E,IAAS,GAAKA,CAC5E,CAiFA,SAASg4C,GAAe/wD,EAAQgxD,EAAaC,GAC3C,MAAMC,EAAY,GAClB,IAAK,IAAI5/C,EAAI,EAAGA,EAAI2/C,EAAWp0H,OAAQy0E,IAAK,CAC1C,MAAM/5C,EAAO05F,EAAW3/C,IAClB,MAAC43B,EAAK,KAAEnqC,EAAI,MAAEoa,GAASg4C,GAAU55F,EAAMy5F,EAAa,KAC1D,MAAK73C,GAAU+vB,GAASnqC,GAGxB,GAAImqC,EACFgoB,EAAUj5E,QAAQkhC,QAGlB,GADAnZ,EAAOrmE,KAAKw/E,IACPpa,EACH,KAGN,CACAiB,EAAOrmE,QAAQu3H,EACjB,CACA,SAASC,GAAU55F,EAAMy5F,EAAazxG,GACpC,MAAM45D,EAAQ5hD,EAAKF,YAAY25F,EAAazxG,GAC5C,IAAK45D,EACH,MAAO,CAAC,EAEV,MAAMi4C,EAAaj4C,EAAM55D,GACnB0oE,EAAW1wD,EAAK0wD,SAChBooC,EAAa94F,EAAKyoC,OACxB,IAAIkpC,GAAQ,EACRnqC,GAAO,EACX,IAAK,IAAIp6D,EAAI,EAAGA,EAAIsjF,EAASprF,OAAQ8H,IAAK,CACxC,MAAM6iF,EAAUS,EAAStjF,GACnB0sH,EAAahB,EAAW7oC,EAAQhtF,OAAO+kB,GACvC+xG,EAAYjB,EAAW7oC,EAAQ3zE,KAAK0L,GAC1C,GAAIg/C,GAAW6yD,EAAYC,EAAYC,GAAY,CACjDpoB,EAAQkoB,IAAeC,EACvBtyD,EAAOqyD,IAAeE,EACtB,KACF,CACF,CACA,MAAO,CAACpoB,QAAOnqC,OAAMoa,QACvB,CAEA,MAAMo4C,GACJp3H,YAAYggF,GACV1gF,KAAKoW,EAAIsqE,EAAKtqE,EACdpW,KAAKqW,EAAIqqE,EAAKrqE,EACdrW,KAAK2+E,OAAS+B,EAAK/B,MACrB,CACAuxC,YAAYh1C,EAAK8S,EAAQtN,GACvB,MAAM,EAACtqE,EAAC,EAAEC,EAAC,OAAEsoE,GAAU3+E,KAGvB,OAFAguF,EAASA,GAAU,CAACjtF,MAAO,EAAGqZ,IAAK2nD,IACnCmZ,EAAI+D,IAAI7oE,EAAGC,EAAGsoE,EAAQqP,EAAO5zE,IAAK4zE,EAAOjtF,OAAO,IACxC2/E,EAAKsN,MACf,CACApwD,YAAY8hD,GACV,MAAM,EAACtpE,EAAC,EAAEC,EAAC,OAAEsoE,GAAU3+E,KACjBgkE,EAAQ0b,EAAM1b,MACpB,MAAO,CACL5tD,EAAGA,EAAI/T,KAAK0mE,IAAI/E,GAAS2a,EACzBtoE,EAAGA,EAAIhU,KAAKylE,IAAI9D,GAAS2a,EACzB3a,QAEJ,EAiEF,SAAS+zD,GAAU78C,EAAKlvE,EAAQ2zE,GAC9B,MAAM7zE,EA/DR,SAAoBE,GAClB,MAAM,MAAC0uE,EAAK,KAAE4E,EAAI,KAAExhD,GAAQ9xB,EAC5B,GAAIszD,GAAeggB,GACjB,OAcJ,SAAwB5E,EAAOl8D,GAC7B,MAAM65B,EAAOqiC,EAAMgd,eAAel5E,GAElC,OADgB65B,GAAQqiC,EAAMuoB,iBAAiBzkF,GAC9B65B,EAAKiP,QAAU,IAClC,CAlBW0wE,CAAet9C,EAAO4E,GAE/B,GAAa,UAATA,EACF,OApGJ,SAAyBtzE,GACvB,MAAM,MAAC8vE,EAAK,MAAEt9D,EAAK,KAAEsf,GAAQ9xB,EACvBu6D,EAAS,GACTioB,EAAW1wD,EAAK0wD,SAChBypC,EAAen6F,EAAKyoC,OACpBixD,EAUR,SAAuB17C,EAAOt9D,GAC5B,MAAM05G,EAAQ,GACR9qB,EAAQtxB,EAAM0Y,wBAAwB,QAC5C,IAAK,IAAItpF,EAAI,EAAGA,EAAIkiG,EAAMhqG,OAAQ8H,IAAK,CACrC,MAAMmtC,EAAO+0D,EAAMliG,GACnB,GAAImtC,EAAK75B,QAAUA,EACjB,MAEG65B,EAAK5hB,QACRyhG,EAAM15E,QAAQnG,EAAKiP,QAEvB,CACA,OAAO4wE,CACT,CAvBqBC,CAAcr8C,EAAOt9D,GACxCg5G,EAAWt3H,KAAKy2H,GAAoB,CAACvgH,EAAG,KAAMC,EAAGylE,EAAM3lE,QAAS2nB,IAChE,IAAK,IAAI5yB,EAAI,EAAGA,EAAIsjF,EAASprF,OAAQ8H,IAAK,CACxC,MAAM6iF,EAAUS,EAAStjF,GACzB,IAAK,IAAI2sE,EAAIkW,EAAQhtF,MAAO82E,GAAKkW,EAAQ3zE,IAAKy9D,IAC5Cy/C,GAAe/wD,EAAQ0xD,EAAapgD,GAAI2/C,EAE5C,CACA,OAAO,IAAIvG,GAAY,CAAC1qD,SAAQ/4D,QAAS,CAAC,GAC5C,CAsFW4qH,CAAgBpsH,GAEzB,GAAa,UAATszE,EACF,OAAO,EAET,MAAMt8D,EAWR,SAAyBhX,GAEvB,OADcA,EAAO8vE,OAAS,CAAC,GACrBusB,yBAiBZ,SAAiCr8F,GAC/B,MAAM,MAAC8vE,EAAK,KAAEwD,GAAQtzE,EAChBwB,EAAUsuE,EAAMtuE,QAChBpK,EAAS04E,EAAMod,YAAY91F,OAC3BrC,EAAQyM,EAAQmmD,QAAUmoB,EAAMxmE,IAAMwmE,EAAMv5E,IAC5CwE,EAzKR,SAAyBu4E,EAAMxD,EAAOqiB,GACpC,IAAIp3F,EAUJ,OAREA,EADW,UAATu4E,EACM6e,EACU,QAAT7e,EACDxD,EAAMtuE,QAAQmmD,QAAUmoB,EAAMv5E,IAAMu5E,EAAMxmE,IACzC+pD,GAASigB,GACVA,EAAKv4E,MAEL+0E,EAAMw3B,eAETvsG,CACT,CA6JgBsxH,CAAgB/4C,EAAMxD,EAAO/6E,GACrC+K,EAAS,GACf,GAAI0B,EAAQ20F,KAAK4F,SAAU,CACzB,MAAMt8E,EAASqwD,EAAMusB,yBAAyB,EAAGtnG,GACjD,OAAO,IAAI+2H,GAAU,CACnB1hH,EAAGqV,EAAOrV,EACVC,EAAGoV,EAAOpV,EACVsoE,OAAQ7C,EAAM8rB,8BAA8B7gG,IAEhD,CACA,IAAK,IAAImE,EAAI,EAAGA,EAAI9H,IAAU8H,EAC5BY,EAAO5L,KAAK47E,EAAMusB,yBAAyBn9F,EAAGnE,IAEhD,OAAO+E,CACT,CAnCWwsH,CAAwBtsH,GAInC,SAA+BA,GAC7B,MAAM,MAAC8vE,EAAQ,CAAC,EAAC,KAAEwD,GAAQtzE,EACrB4xE,EAvKR,SAAyB0B,EAAMxD,GAC7B,IAAI8B,EAAQ,KAUZ,MATa,UAAT0B,EACF1B,EAAQ9B,EAAM3lE,OACI,QAATmpE,EACT1B,EAAQ9B,EAAM5lE,IACLmpD,GAASigB,GAClB1B,EAAQ9B,EAAM7U,iBAAiBqY,EAAKv4E,OAC3B+0E,EAAM6jB,eACf/hB,EAAQ9B,EAAM6jB,gBAET/hB,CACT,CA2JgB26C,CAAgBj5C,EAAMxD,GACpC,GAAIxc,GAAese,GAAQ,CACzB,MAAMkhB,EAAahjB,EAAM8jB,eACzB,MAAO,CACLxpF,EAAG0oF,EAAalhB,EAAQ,KACxBvnE,EAAGyoF,EAAa,KAAOlhB,EAE3B,CACA,OAAO,IACT,CAbS46C,CAAsBxsH,EAC/B,CAjBmBysH,CAAgBzsH,GACjC,OAAIgX,aAAoB80G,GACf90G,EAEF2zG,GAAoB3zG,EAAU8a,EACvC,CA+CiBimD,CAAW/3E,IACpB,KAAC8xB,EAAI,MAAEg+C,EAAK,KAAEn3D,GAAQ3Y,EACtB0sH,EAAW56F,EAAKtwB,QAChB0pH,EAAawB,EAASp5C,KACtB3G,EAAQ+/C,EAASn+C,iBACjB,MAACo+C,EAAQhgD,EAAK,MAAEu/C,EAAQv/C,GAASu+C,GAAc,CAAC,EAClDprH,GAAUgyB,EAAKyoC,OAAOnjE,SACxBw8E,GAAS1E,EAAKyE,GAKlB,SAAgBzE,EAAK6V,GACnB,MAAM,KAACjzD,EAAI,OAAEhyB,EAAM,MAAE6sH,EAAK,MAAET,EAAK,KAAEv4C,EAAI,MAAE7D,GAASiV,EAC5CjrE,EAAWgY,EAAKxV,MAAQ,QAAUyoE,EAAIpsE,KAC5Cu2D,EAAImC,OACa,MAAbv3D,GAAoBoyG,IAAUS,IAChCC,GAAa19C,EAAKpvE,EAAQ6zE,EAAKzpE,KAC/BopE,GAAKpE,EAAK,CAACp9C,OAAMhyB,SAAQ6sE,MAAOggD,EAAO78C,QAAOh2D,aAC9Co1D,EAAIuC,UACJvC,EAAImC,OACJu7C,GAAa19C,EAAKpvE,EAAQ6zE,EAAKxpE,SAEjCmpE,GAAKpE,EAAK,CAACp9C,OAAMhyB,SAAQ6sE,MAAOu/C,EAAOp8C,QAAOh2D,aAC9Co1D,EAAIuC,SACN,CAjBIo7C,CAAO39C,EAAK,CAACp9C,OAAMhyB,SAAQ6sH,QAAOT,QAAOv4C,OAAM7D,QAAOn3D,SACtDm7D,GAAW5E,GAEf,CAeA,SAAS09C,GAAa19C,EAAKpvE,EAAQgtH,GACjC,MAAM,SAACtqC,EAAQ,OAAEjoB,GAAUz6D,EAC3B,IAAI2jG,GAAQ,EACRspB,GAAW,EACf79C,EAAI6D,YACJ,IAAK,MAAMgP,KAAWS,EAAU,CAC9B,MAAM,MAACztF,EAAK,IAAEqZ,GAAO2zE,EACfjH,EAAavgB,EAAOxlE,GACpB+lG,EAAYvgC,EAAOkwD,GAAgB11H,EAAOqZ,EAAKmsD,IACjDkpC,GACFv0B,EAAIiE,OAAO2H,EAAW1wE,EAAG0wE,EAAWzwE,GACpCo5F,GAAQ,IAERv0B,EAAIkE,OAAO0H,EAAW1wE,EAAG0iH,GACzB59C,EAAIkE,OAAO0H,EAAW1wE,EAAG0wE,EAAWzwE,IAEtC0iH,IAAajtH,EAAOokH,YAAYh1C,EAAK6S,EAAS,CAAC6O,KAAMm8B,IACjDA,EACF79C,EAAIgE,YAEJhE,EAAIkE,OAAO0nB,EAAU1wF,EAAG0iH,EAE5B,CACA59C,EAAIkE,OAAOtzE,EAAO2jG,QAAQr5F,EAAG0iH,GAC7B59C,EAAIgE,YACJhE,EAAI2E,MACN,CACA,SAASP,GAAKpE,EAAK6V,GACjB,MAAM,KAACjzD,EAAI,OAAEhyB,EAAM,SAAEga,EAAQ,MAAE6yD,EAAK,MAAEmD,GAASiV,EACzCvC,EAlZR,SAAmB1wD,EAAMhyB,EAAQga,GAC/B,MAAM0oE,EAAW1wD,EAAK0wD,SAChBjoB,EAASzoC,EAAKyoC,OACdyyD,EAAUltH,EAAOy6D,OACjBpd,EAAQ,GACd,IAAK,MAAM4kC,KAAWS,EAAU,CAC9B,IAAI,MAACztF,EAAK,IAAEqZ,GAAO2zE,EACnB3zE,EAAMq8G,GAAgB11H,EAAOqZ,EAAKmsD,GAClC,MAAMynB,EAASwoC,GAAW1wG,EAAUygD,EAAOxlE,GAAQwlE,EAAOnsD,GAAM2zE,EAAQrG,MACxE,IAAK57E,EAAO0iF,SAAU,CACpBrlC,EAAMjpD,KAAK,CACT8L,OAAQ+hF,EACRjiF,OAAQkiF,EACRjtF,MAAOwlE,EAAOxlE,GACdqZ,IAAKmsD,EAAOnsD,KAEd,QACF,CACA,MAAM6+G,EAAiB1qC,GAAeziF,EAAQkiF,GAC9C,IAAK,MAAMkrC,KAAOD,EAAgB,CAChC,MAAME,EAAY3C,GAAW1wG,EAAUkzG,EAAQE,EAAIn4H,OAAQi4H,EAAQE,EAAI9+G,KAAM8+G,EAAIxxC,MAC3E0xC,EAActrC,GAAcC,EAASxnB,EAAQ4yD,GACnD,IAAK,MAAME,KAAcD,EACvBjwE,EAAMjpD,KAAK,CACT8L,OAAQqtH,EACRvtH,OAAQotH,EACRn4H,MAAO,CACL,CAAC+kB,GAAW4wG,GAAS1oC,EAAQmrC,EAAW,QAAS92H,KAAKiT,MAExD8E,IAAK,CACH,CAAC0L,GAAW4wG,GAAS1oC,EAAQmrC,EAAW,MAAO92H,KAAKE,OAI5D,CACF,CACA,OAAO4mD,CACT,CA6WmBioE,CAAUtzF,EAAMhyB,EAAQga,GACzC,IAAK,MAAO9Z,OAAQssB,EAAKxsB,OAAQotH,EAAG,MAAEn4H,EAAK,IAAEqZ,KAAQo0E,EAAU,CAC7D,MAAO9oE,OAAO,gBAAC60D,EAAkB5B,GAAS,CAAC,GAAKrgD,EAC1CghG,GAAsB,IAAXxtH,EACjBovE,EAAImC,OACJnC,EAAI4F,UAAYvG,EAChBg/C,GAAWr+C,EAAKY,EAAOw9C,GAAY9C,GAAW1wG,EAAU/kB,EAAOqZ,IAC/D8gE,EAAI6D,YACJ,MAAMg6C,IAAaj7F,EAAKoyF,YAAYh1C,EAAK5iD,GACzC,IAAIovD,EACJ,GAAI4xC,EAAU,CACRP,EACF79C,EAAIgE,YAEJs6C,GAAmBt+C,EAAKpvE,EAAQsO,EAAK0L,GAEvC,MAAM2zG,IAAe3tH,EAAOokH,YAAYh1C,EAAKg+C,EAAK,CAACt8B,KAAMm8B,EAAUplE,SAAS,IAC5E+zB,EAAOqxC,GAAYU,EACd/xC,GACH8xC,GAAmBt+C,EAAKpvE,EAAQ/K,EAAO+kB,EAE3C,CACAo1D,EAAIgE,YACJhE,EAAIoE,KAAKoI,EAAO,UAAY,WAC5BxM,EAAIuC,SACN,CACF,CACA,SAAS87C,GAAWr+C,EAAKY,EAAOkS,GAC9B,MAAM,IAAC93E,EAAG,OAAEC,GAAU2lE,EAAMpB,MAAMggB,WAC5B,SAAC50E,EAAQ,MAAE/kB,EAAK,IAAEqZ,GAAO4zE,GAAU,CAAC,EACzB,MAAbloE,IACFo1D,EAAI6D,YACJ7D,EAAIvlE,KAAK5U,EAAOmV,EAAKkE,EAAMrZ,EAAOoV,EAASD,GAC3CglE,EAAI2E,OAER,CACA,SAAS25C,GAAmBt+C,EAAKpvE,EAAQ4zE,EAAO55D,GAC9C,MAAM4zG,EAAoB5tH,EAAO8xB,YAAY8hD,EAAO55D,GAChD4zG,GACFx+C,EAAIkE,OAAOs6C,EAAkBtjH,EAAGsjH,EAAkBrjH,EAEtD,CAEA,IAAImI,GAAQ,CACVxQ,GAAI,SACJ2rH,oBAAoBj/C,EAAOk/C,EAAOpsH,GAChC,MAAMk5D,GAASgU,EAAM72E,KAAK42E,UAAY,IAAIr3E,OACpCm4C,EAAU,GAChB,IAAIlD,EAAMntC,EAAG4yB,EAAM9xB,EACnB,IAAKd,EAAI,EAAGA,EAAIw7D,IAASx7D,EACvBmtC,EAAOqiC,EAAMgd,eAAexsF,GAC5B4yB,EAAOua,EAAKiP,QACZt7C,EAAS,KACL8xB,GAAQA,EAAKtwB,SAAWswB,aAAgBmzF,KAC1CjlH,EAAS,CACPoiC,QAASssC,EAAMuoB,iBAAiB/3F,GAChCsT,MAAOtT,EACPo0E,KAAM23C,GAAYn5F,EAAM5yB,EAAGw7D,GAC3BgU,QACA/1D,KAAM0zB,EAAK8R,WAAW38C,QAAQ6tE,UAC9BS,MAAOzjC,EAAKi8C,OACZx2D,SAGJua,EAAKwhF,QAAU7tH,EACfuvC,EAAQr7C,KAAK8L,GAEf,IAAKd,EAAI,EAAGA,EAAIw7D,IAASx7D,EACvBc,EAASuvC,EAAQrwC,GACZc,IAA0B,IAAhBA,EAAOszE,OAGtBtzE,EAAOszE,KAAOy3C,GAAex7E,EAASrwC,EAAGsC,EAAQwpH,WAErD,EACA8C,WAAWp/C,EAAOk/C,EAAOpsH,GACvB,MAAMuiF,EAA4B,eAArBviF,EAAQusH,SACfxmC,EAAW7Y,EAAMm8B,+BACjBl3B,EAAOjF,EAAMggB,UACnB,IAAK,IAAIxvF,EAAIqoF,EAASnwF,OAAS,EAAG8H,GAAK,IAAKA,EAAG,CAC7C,MAAMc,EAASunF,EAASroF,GAAG2uH,QACtB7tH,IAGLA,EAAO8xB,KAAKipE,oBAAoBpnB,EAAM3zE,EAAO2Y,MACzCorE,GAAQ/jF,EAAOszE,MACjBy4C,GAAUr9C,EAAMQ,IAAKlvE,EAAQ2zE,GAEjC,CACF,EACAq6C,mBAAmBt/C,EAAOk/C,EAAOpsH,GAC/B,GAAyB,uBAArBA,EAAQusH,SACV,OAEF,MAAMxmC,EAAW7Y,EAAMm8B,+BACvB,IAAK,IAAI3rG,EAAIqoF,EAASnwF,OAAS,EAAG8H,GAAK,IAAKA,EAAG,CAC7C,MAAMc,EAASunF,EAASroF,GAAG2uH,QACvB/C,GAAiB9qH,IACnB+rH,GAAUr9C,EAAMQ,IAAKlvE,EAAQ0uE,EAAMggB,UAEvC,CACF,EACAu/B,kBAAkBv/C,EAAO9xE,EAAM4E,GAC7B,MAAMxB,EAASpD,EAAKyvC,KAAKwhF,QACpB/C,GAAiB9qH,IAAgC,sBAArBwB,EAAQusH,UAGzChC,GAAUr9C,EAAMQ,IAAKlvE,EAAQ0uE,EAAMggB,UACrC,EACAtgB,SAAU,CACR48C,WAAW,EACX+C,SAAU,sBAId,MAAMG,GAAa,CAACC,EAAWnjB,KAC7B,IAAI,UAACojB,EAAYpjB,EAAQ,SAAEqjB,EAAWrjB,GAAYmjB,EAKlD,OAJIA,EAAUG,gBACZF,EAAY/3H,KAAKE,IAAI63H,EAAWpjB,GAChCqjB,EAAWF,EAAUI,iBAAmBl4H,KAAKE,IAAI83H,EAAUrjB,IAEtD,CACLqjB,WACAD,YACAI,WAAYn4H,KAAKiT,IAAI0hG,EAAUojB,GAChC,EAGH,MAAMK,WAAe,GACnB/5H,YAAY4xF,GACVv6D,QACA/3B,KAAK06H,QAAS,EACd16H,KAAK26H,eAAiB,GACtB36H,KAAK46H,aAAe,KACpB56H,KAAK66H,cAAe,EACpB76H,KAAK06E,MAAQ4X,EAAO5X,MACpB16E,KAAKwN,QAAU8kF,EAAO9kF,QACtBxN,KAAKk7E,IAAMoX,EAAOpX,IAClBl7E,KAAK86H,iBAAcjyH,EACnB7I,KAAK+6H,iBAAclyH,EACnB7I,KAAKg7H,gBAAanyH,EAClB7I,KAAKykG,eAAY57F,EACjB7I,KAAKqhF,cAAWx4E,EAChB7I,KAAKkW,SAAMrN,EACX7I,KAAKmW,YAAStN,EACd7I,KAAKyS,UAAO5J,EACZ7I,KAAK2S,WAAQ9J,EACb7I,KAAKiW,YAASpN,EACd7I,KAAKgW,WAAQnN,EACb7I,KAAK6rG,cAAWhjG,EAChB7I,KAAK+R,cAAWlJ,EAChB7I,KAAK44E,YAAS/vE,EACd7I,KAAKsyG,cAAWzpG,CAClB,CACAsV,OAAOkjE,EAAUojB,EAAWkJ,GAC1B3tG,KAAKqhF,SAAWA,EAChBrhF,KAAKykG,UAAYA,EACjBzkG,KAAK6rG,SAAW8B,EAChB3tG,KAAK+tG,gBACL/tG,KAAKi7H,cACLj7H,KAAKowG,KACP,CACArC,gBACM/tG,KAAK4/F,gBACP5/F,KAAKgW,MAAQhW,KAAKqhF,SAClBrhF,KAAKyS,KAAOzS,KAAK6rG,SAASp5F,KAC1BzS,KAAK2S,MAAQ3S,KAAKgW,QAElBhW,KAAKiW,OAASjW,KAAKykG,UACnBzkG,KAAKkW,IAAMlW,KAAK6rG,SAAS31F,IACzBlW,KAAKmW,OAASnW,KAAKiW,OAEvB,CACAglH,cACE,MAAMd,EAAYn6H,KAAKwN,QAAQyrF,QAAU,CAAC,EAC1C,IAAI6hC,EAAczvF,GAAS8uF,EAAUr0B,eAAgB,CAAC9lG,KAAK06E,OAAQ16E,OAAS,GACxEm6H,EAAUxyH,SACZmzH,EAAcA,EAAYnzH,QAAQmG,GAASqsH,EAAUxyH,OAAOmG,EAAM9N,KAAK06E,MAAM72E,SAE3Es2H,EAAUh/G,OACZ2/G,EAAcA,EAAY3/G,MAAK,CAAChS,EAAGqe,IAAM2yG,EAAUh/G,KAAKhS,EAAGqe,EAAGxnB,KAAK06E,MAAM72E,SAEvE7D,KAAKwN,QAAQmmD,SACfmnE,EAAYnnE,UAEd3zD,KAAK86H,YAAcA,CACrB,CACA1qB,MACE,MAAM,QAAC5iG,EAAO,IAAE0tE,GAAOl7E,KACvB,IAAKwN,EAAQs6F,QAEX,YADA9nG,KAAKgW,MAAQhW,KAAKiW,OAAS,GAG7B,MAAMkkH,EAAY3sH,EAAQyrF,OACpBiiC,EAAYp4C,GAAOq3C,EAAUt/C,MAC7Bm8B,EAAWkkB,EAAUj9E,KACrB0zD,EAAc3xG,KAAKm7H,uBACnB,SAACd,EAAQ,WAAEG,GAAcN,GAAWC,EAAWnjB,GACrD,IAAIhhG,EAAOC,EACXilE,EAAIL,KAAOqgD,EAAUv9F,OACjB39B,KAAK4/F,gBACP5pF,EAAQhW,KAAKqhF,SACbprE,EAASjW,KAAKo7H,SAASzpB,EAAaqF,EAAUqjB,EAAUG,GAAc,KAEtEvkH,EAASjW,KAAKykG,UACdzuF,EAAQhW,KAAKq7H,SAAS1pB,EAAaqF,EAAUqjB,EAAUG,GAAc,IAEvEx6H,KAAKgW,MAAQ3T,KAAKE,IAAIyT,EAAOxI,EAAQ6zE,UAAYrhF,KAAKqhF,UACtDrhF,KAAKiW,OAAS5T,KAAKE,IAAI0T,EAAQzI,EAAQi3F,WAAazkG,KAAKykG,UAC3D,CACA22B,SAASzpB,EAAaqF,EAAUqjB,EAAUG,GACxC,MAAM,IAACt/C,EAAG,SAAEmG,EAAU7zE,SAAUyrF,QAAQ,QAACz1E,KAAaxjB,KAChDs7H,EAAWt7H,KAAK26H,eAAiB,GACjCK,EAAah7H,KAAKg7H,WAAa,CAAC,GAChCjgD,EAAay/C,EAAah3G,EAChC,IAAI+3G,EAAc5pB,EAClBz2B,EAAI6F,UAAY,OAChB7F,EAAI8F,aAAe,SACnB,IAAIw6C,GAAO,EACPtlH,GAAO6kE,EAYX,OAXA/6E,KAAK86H,YAAY7uH,SAAQ,CAAC85F,EAAY76F,KACpC,MAAM8hF,EAAYqtC,EAAYrjB,EAAW,EAAK97B,EAAI+B,YAAY8oB,EAAWlqE,MAAM7lB,OACrE,IAAN9K,GAAW8vH,EAAWA,EAAW53H,OAAS,GAAK4pF,EAAY,EAAIxpE,EAAU69D,KAC3Ek6C,GAAexgD,EACfigD,EAAWA,EAAW53H,QAAU8H,EAAI,EAAI,EAAI,IAAM,EAClDgL,GAAO6kE,EACPygD,KAEFF,EAASpwH,GAAK,CAACuH,KAAM,EAAGyD,MAAKslH,MAAKxlH,MAAOg3E,EAAW/2E,OAAQukH,GAC5DQ,EAAWA,EAAW53H,OAAS,IAAM4pF,EAAYxpE,CAAO,IAEnD+3G,CACT,CACAF,SAAS1pB,EAAaqF,EAAUqjB,EAAUG,GACxC,MAAM,IAACt/C,EAAG,UAAEupB,EAAWj3F,SAAUyrF,QAAQ,QAACz1E,KAAaxjB,KACjDs7H,EAAWt7H,KAAK26H,eAAiB,GACjCI,EAAc/6H,KAAK+6H,YAAc,GACjCU,EAAch3B,EAAYkN,EAChC,IAAI+pB,EAAal4G,EACbm4G,EAAkB,EAClBC,EAAmB,EACnBnpH,EAAO,EACPopH,EAAM,EAgBV,OAfA77H,KAAK86H,YAAY7uH,SAAQ,CAAC85F,EAAY76F,KACpC,MAAM8hF,EAAYqtC,EAAYrjB,EAAW,EAAK97B,EAAI+B,YAAY8oB,EAAWlqE,MAAM7lB,MAC3E9K,EAAI,GAAK0wH,EAAmBpB,EAAa,EAAIh3G,EAAUi4G,IACzDC,GAAcC,EAAkBn4G,EAChCu3G,EAAY76H,KAAK,CAAC8V,MAAO2lH,EAAiB1lH,OAAQ2lH,IAClDnpH,GAAQkpH,EAAkBn4G,EAC1Bq4G,IACAF,EAAkBC,EAAmB,GAEvCN,EAASpwH,GAAK,CAACuH,OAAMyD,IAAK0lH,EAAkBC,MAAK7lH,MAAOg3E,EAAW/2E,OAAQukH,GAC3EmB,EAAkBt5H,KAAKiT,IAAIqmH,EAAiB3uC,GAC5C4uC,GAAoBpB,EAAah3G,CAAO,IAE1Ck4G,GAAcC,EACdZ,EAAY76H,KAAK,CAAC8V,MAAO2lH,EAAiB1lH,OAAQ2lH,IAC3CF,CACT,CACAI,iBACE,IAAK97H,KAAKwN,QAAQs6F,QAChB,OAEF,MAAM6J,EAAc3xG,KAAKm7H,uBAClBR,eAAgBW,EAAU9tH,SAAS,MAAC44D,EAAO6yB,QAAQ,QAACz1E,GAAQ,IAAEmpE,IAAQ3sF,KACvE+7H,EAAYrvC,GAAcC,EAAK3sF,KAAKyS,KAAMzS,KAAKgW,OACrD,GAAIhW,KAAK4/F,eAAgB,CACvB,IAAI47B,EAAM,EACN/oH,EAAO4zD,GAAeD,EAAOpmE,KAAKyS,KAAO+Q,EAASxjB,KAAK2S,MAAQ3S,KAAKg7H,WAAWQ,IACnF,IAAK,MAAMQ,KAAUV,EACfE,IAAQQ,EAAOR,MACjBA,EAAMQ,EAAOR,IACb/oH,EAAO4zD,GAAeD,EAAOpmE,KAAKyS,KAAO+Q,EAASxjB,KAAK2S,MAAQ3S,KAAKg7H,WAAWQ,KAEjFQ,EAAO9lH,KAAOlW,KAAKkW,IAAMy7F,EAAcnuF,EACvCw4G,EAAOvpH,KAAOspH,EAAUhvC,WAAWgvC,EAAU3lH,EAAE3D,GAAOupH,EAAOhmH,OAC7DvD,GAAQupH,EAAOhmH,MAAQwN,CAE3B,KAAO,CACL,IAAIq4G,EAAM,EACN3lH,EAAMmwD,GAAeD,EAAOpmE,KAAKkW,IAAMy7F,EAAcnuF,EAASxjB,KAAKmW,OAASnW,KAAK+6H,YAAYc,GAAK5lH,QACtG,IAAK,MAAM+lH,KAAUV,EACfU,EAAOH,MAAQA,IACjBA,EAAMG,EAAOH,IACb3lH,EAAMmwD,GAAeD,EAAOpmE,KAAKkW,IAAMy7F,EAAcnuF,EAASxjB,KAAKmW,OAASnW,KAAK+6H,YAAYc,GAAK5lH,SAEpG+lH,EAAO9lH,IAAMA,EACb8lH,EAAOvpH,MAAQzS,KAAKyS,KAAO+Q,EAC3Bw4G,EAAOvpH,KAAOspH,EAAUhvC,WAAWgvC,EAAU3lH,EAAE4lH,EAAOvpH,MAAOupH,EAAOhmH,OACpEE,GAAO8lH,EAAO/lH,OAASuN,CAE3B,CACF,CACAo8E,eACE,MAAiC,QAA1B5/F,KAAKwN,QAAQuE,UAAgD,WAA1B/R,KAAKwN,QAAQuE,QACzD,CACAg+E,OACE,GAAI/vF,KAAKwN,QAAQs6F,QAAS,CACxB,MAAM5sB,EAAMl7E,KAAKk7E,IACjB0E,GAAS1E,EAAKl7E,MACdA,KAAKi8H,QACLn8C,GAAW5E,EACb,CACF,CACA+gD,QACE,MAAOzuH,QAASkzE,EAAI,YAAEq6C,EAAW,WAAEC,EAAU,IAAE9/C,GAAOl7E,MAChD,MAAComE,EAAO6yB,OAAQkhC,GAAaz5C,EAC7Bw7C,EAAe9hD,GAASzB,MACxBojD,EAAYrvC,GAAchM,EAAKiM,IAAK3sF,KAAKyS,KAAMzS,KAAKgW,OACpDklH,EAAYp4C,GAAOq3C,EAAUt/C,OAC5BlC,MAAOwjD,EAAS,QAAE34G,GAAW22G,EAC9BnjB,EAAWkkB,EAAUj9E,KACrBm+E,EAAeplB,EAAW,EAChC,IAAIqlB,EACJr8H,KAAKq2G,YACLn7B,EAAI6F,UAAYg7C,EAAUh7C,UAAU,QACpC7F,EAAI8F,aAAe,SACnB9F,EAAIiG,UAAY,GAChBjG,EAAIL,KAAOqgD,EAAUv9F,OACrB,MAAM,SAAC08F,EAAQ,UAAED,EAAS,WAAEI,GAAcN,GAAWC,EAAWnjB,GAqD1DpX,EAAe5/F,KAAK4/F,eACpB+R,EAAc3xG,KAAKm7H,sBAEvBkB,EADEz8B,EACO,CACPxpF,EAAGiwD,GAAeD,EAAOpmE,KAAKyS,KAAO+Q,EAASxjB,KAAK2S,MAAQqoH,EAAW,IACtE3kH,EAAGrW,KAAKkW,IAAMsN,EAAUmuF,EACxB7zE,KAAM,GAGC,CACP1nB,EAAGpW,KAAKyS,KAAO+Q,EACfnN,EAAGgwD,GAAeD,EAAOpmE,KAAKkW,IAAMy7F,EAAcnuF,EAASxjB,KAAKmW,OAAS4kH,EAAY,GAAG9kH,QACxF6nB,KAAM,GAGVqvD,GAAsBntF,KAAKk7E,IAAKwF,EAAK47C,eACrC,MAAMvhD,EAAay/C,EAAah3G,EAChCxjB,KAAK86H,YAAY7uH,SAAQ,CAAC85F,EAAY76F,KACpCgwE,EAAIgG,YAAc6kB,EAAWo2B,WAAaA,EAC1CjhD,EAAI4F,UAAYilB,EAAWo2B,WAAaA,EACxC,MAAMn/C,EAAY9B,EAAI+B,YAAY8oB,EAAWlqE,MAAM7lB,MAC7C+qE,EAAYg7C,EAAUh7C,UAAUglB,EAAWhlB,YAAcglB,EAAWhlB,UAAYo5C,EAAUp5C,YAC1F/qE,EAAQqkH,EAAW+B,EAAep/C,EACxC,IAAI5mE,EAAIimH,EAAOjmH,EACXC,EAAIgmH,EAAOhmH,EACf0lH,EAAUlvC,SAAS7sF,KAAKgW,OACpB4pF,EACE10F,EAAI,GAAKkL,EAAIJ,EAAQwN,EAAUxjB,KAAK2S,QACtC0D,EAAIgmH,EAAOhmH,GAAK0kE,EAChBshD,EAAOv+F,OACP1nB,EAAIimH,EAAOjmH,EAAIiwD,GAAeD,EAAOpmE,KAAKyS,KAAO+Q,EAASxjB,KAAK2S,MAAQqoH,EAAWqB,EAAOv+F,QAElF5yB,EAAI,GAAKmL,EAAI0kE,EAAa/6E,KAAKmW,SACxCC,EAAIimH,EAAOjmH,EAAIA,EAAI2kH,EAAYsB,EAAOv+F,MAAM9nB,MAAQwN,EACpD64G,EAAOv+F,OACPznB,EAAIgmH,EAAOhmH,EAAIgwD,GAAeD,EAAOpmE,KAAKkW,IAAMy7F,EAAcnuF,EAASxjB,KAAKmW,OAAS4kH,EAAYsB,EAAOv+F,MAAM7nB,SAvF5F,SAASG,EAAGC,EAAG0vF,GACnC,GAAI/iC,MAAMq3D,IAAaA,GAAY,GAAKr3D,MAAMo3D,IAAcA,EAAY,EACtE,OAEFl/C,EAAImC,OACJ,MAAM8D,EAAY1hB,GAAesmC,EAAW5kB,UAAW,GAQvD,GAPAjG,EAAI4F,UAAYrhB,GAAesmC,EAAWjlB,UAAWo7C,GACrDhhD,EAAIy0C,QAAUlwD,GAAesmC,EAAW4pB,QAAS,QACjDz0C,EAAIg7B,eAAiBz2C,GAAesmC,EAAWmQ,eAAgB,GAC/Dh7B,EAAIs0C,SAAW/vD,GAAesmC,EAAWypB,SAAU,SACnDt0C,EAAIiG,UAAYA,EAChBjG,EAAIgG,YAAczhB,GAAesmC,EAAW7kB,YAAag7C,GACzDhhD,EAAI+6B,YAAYx2C,GAAesmC,EAAWw2B,SAAU,KAChDpC,EAAUG,cAAe,CAC3B,MAAMkC,EAAc,CAClB79C,OAAQy7C,EAAY/3H,KAAKo6H,MAAQ,EACjCh+C,WAAYsnB,EAAWtnB,WACvBC,SAAUqnB,EAAWrnB,SACrBa,YAAa4B,GAETikB,EAAU22B,EAAUjvC,MAAM12E,EAAGikH,EAAW,GAE9Ch8C,GAAgBnD,EAAKshD,EAAap3B,EADlB/uF,EAAI+lH,EACgCjC,EAAUI,iBAAmBF,EACnF,KAAO,CACL,MAAMqC,EAAUrmH,EAAIhU,KAAKiT,KAAK0hG,EAAWojB,GAAa,EAAG,GACnDuC,EAAWZ,EAAUhvC,WAAW32E,EAAGikH,GACnC/M,EAAe1qC,GAAcmjB,EAAWunB,cAC9CpyC,EAAI6D,YACAn0E,OAAO6yB,OAAO6vF,GAAcrxG,MAAK8O,GAAW,IAANA,IACxCk3D,GAAmB/G,EAAK,CACtB9kE,EAAGumH,EACHtmH,EAAGqmH,EACHlxD,EAAG6uD,EACHlwD,EAAGiwD,EACHz7C,OAAQ2uC,IAGVpyC,EAAIvlE,KAAKgnH,EAAUD,EAASrC,EAAUD,GAExCl/C,EAAIoE,OACc,IAAd6B,GACFjG,EAAIsE,QAER,CACAtE,EAAIuC,SACN,CA6CEm/C,CADcb,EAAU3lH,EAAEA,GACLC,EAAG0vF,GACxB3vF,EDj4OS,EAACgwD,EAAO3zD,EAAME,EAAOg6E,IAE3BvmB,KADOumB,EAAM,OAAS,SACJh6E,EAAkB,WAAVyzD,GAAsB3zD,EAAOE,GAAS,EAAIF,EC+3OnEoqH,CAAO97C,EAAW3qE,EAAIikH,EAAW+B,EAAcx8B,EAAexpF,EAAIJ,EAAQhW,KAAK2S,MAAO+tE,EAAKiM,KA7ChF,SAASv2E,EAAGC,EAAG0vF,GAC9BtlB,GAAWvF,EAAK6qB,EAAWlqE,KAAMzlB,EAAGC,EAAKmkH,EAAa,EAAIU,EAAW,CACnE15C,cAAeukB,EAAWtvE,OAC1BsqD,UAAWg7C,EAAUh7C,UAAUglB,EAAWhlB,YAE9C,CAyCEO,CAASy6C,EAAU3lH,EAAEA,GAAIC,EAAG0vF,GACxBnG,EACFy8B,EAAOjmH,GAAKJ,EAAQwN,EAEpB64G,EAAOhmH,GAAK0kE,CACd,IAEFyS,GAAqBxtF,KAAKk7E,IAAKwF,EAAK47C,cACtC,CACAjmB,YACE,MAAM31B,EAAO1gF,KAAKwN,QACZikG,EAAY/wB,EAAK8hB,MACjBs6B,EAAYh6C,GAAO2uB,EAAU52B,MAC7BkiD,EAAel6C,GAAU4uB,EAAUjuF,SACzC,IAAKiuF,EAAU3J,QACb,OAEF,MAAMi0B,EAAYrvC,GAAchM,EAAKiM,IAAK3sF,KAAKyS,KAAMzS,KAAKgW,OACpDklE,EAAMl7E,KAAKk7E,IACXnpE,EAAW0/F,EAAU1/F,SACrBqqH,EAAeU,EAAU7+E,KAAO,EAChC++E,EAA6BD,EAAa7mH,IAAMkmH,EACtD,IAAI/lH,EACA5D,EAAOzS,KAAKyS,KACZ4uE,EAAWrhF,KAAKgW,MACpB,GAAIhW,KAAK4/F,eACPve,EAAWh/E,KAAKiT,OAAOtV,KAAKg7H,YAC5B3kH,EAAIrW,KAAKkW,IAAM8mH,EACfvqH,EAAO4zD,GAAeqa,EAAKta,MAAO3zD,EAAMzS,KAAK2S,MAAQ0uE,OAChD,CACL,MAAMojB,EAAYzkG,KAAK+6H,YAAYvgH,QAAO,CAACC,EAAKwjC,IAAS57C,KAAKiT,IAAImF,EAAKwjC,EAAKhoC,SAAS,GACrFI,EAAI2mH,EAA6B32D,GAAeqa,EAAKta,MAAOpmE,KAAKkW,IAAKlW,KAAKmW,OAASsuF,EAAY/jB,EAAKuY,OAAOz1E,QAAUxjB,KAAKm7H,sBAC7H,CACA,MAAM/kH,EAAIiwD,GAAet0D,EAAUU,EAAMA,EAAO4uE,GAChDnG,EAAI6F,UAAYg7C,EAAUh7C,UAAU5a,GAAmBp0D,IACvDmpE,EAAI8F,aAAe,SACnB9F,EAAIgG,YAAcuwB,EAAU94B,MAC5BuC,EAAI4F,UAAY2wB,EAAU94B,MAC1BuC,EAAIL,KAAOiiD,EAAUn/F,OACrB8iD,GAAWvF,EAAKu2B,EAAU51E,KAAMzlB,EAAGC,EAAGymH,EACxC,CACA3B,sBACE,MAAM1pB,EAAYzxG,KAAKwN,QAAQg1F,MACzBs6B,EAAYh6C,GAAO2uB,EAAU52B,MAC7BkiD,EAAel6C,GAAU4uB,EAAUjuF,SACzC,OAAOiuF,EAAU3J,QAAUg1B,EAAU/hD,WAAagiD,EAAa9mH,OAAS,CAC1E,CACAgnH,iBAAiB7mH,EAAGC,GAClB,IAAInL,EAAGgyH,EAAQC,EACf,GAAIr4D,GAAW1uD,EAAGpW,KAAKyS,KAAMzS,KAAK2S,QAC7BmyD,GAAWzuD,EAAGrW,KAAKkW,IAAKlW,KAAKmW,QAEhC,IADAgnH,EAAKn9H,KAAK26H,eACLzvH,EAAI,EAAGA,EAAIiyH,EAAG/5H,SAAU8H,EAE3B,GADAgyH,EAASC,EAAGjyH,GACR45D,GAAW1uD,EAAG8mH,EAAOzqH,KAAMyqH,EAAOzqH,KAAOyqH,EAAOlnH,QAC/C8uD,GAAWzuD,EAAG6mH,EAAOhnH,IAAKgnH,EAAOhnH,IAAMgnH,EAAOjnH,QACjD,OAAOjW,KAAK86H,YAAY5vH,GAI9B,OAAO,IACT,CACA48C,YAAYtI,GACV,MAAMkhC,EAAO1gF,KAAKwN,QAClB,IAmBJ,SAAoB5H,EAAM86E,GACxB,QAAc,cAAT96E,GAAiC,aAATA,IAAyB86E,EAAKjF,UAAWiF,EAAK08C,aAGvE18C,EAAKhF,SAAqB,UAAT91E,GAA6B,YAATA,EAI3C,CA3BSy3H,CAAW79E,EAAE55C,KAAM86E,GACtB,OAEF,MAAM48C,EAAct9H,KAAKi9H,iBAAiBz9E,EAAEppC,EAAGopC,EAAEnpC,GACjD,GAAe,cAAXmpC,EAAE55C,MAAmC,aAAX45C,EAAE55C,KAAqB,CACnD,MAAMo6E,EAAWhgF,KAAK46H,aAChB2C,EApWO,EAACp0H,EAAGqe,IAAY,OAANre,GAAoB,OAANqe,GAAcre,EAAEm3D,eAAiB94C,EAAE84C,cAAgBn3D,EAAEqV,QAAUgJ,EAAEhJ,MAoWrFg/G,CAAWx9C,EAAUs9C,GAClCt9C,IAAau9C,GACflyF,GAASq1C,EAAK08C,QAAS,CAAC59E,EAAGwgC,EAAUhgF,MAAOA,MAE9CA,KAAK46H,aAAe0C,EAChBA,IAAgBC,GAClBlyF,GAASq1C,EAAKjF,QAAS,CAACj8B,EAAG89E,EAAat9H,MAAOA,KAEnD,MAAWs9H,GACTjyF,GAASq1C,EAAKhF,QAAS,CAACl8B,EAAG89E,EAAat9H,MAAOA,KAEnD,EAWF,IAAIy9H,GAAgB,CAClBzvH,GAAI,SACJy1B,SAAUg3F,GACV15H,MAAM25E,EAAOk/C,EAAOpsH,GAClB,MAAMq4F,EAASnrB,EAAMmrB,OAAS,IAAI40B,GAAO,CAACv/C,IAAKR,EAAMQ,IAAK1tE,UAASktE,UACnE8iC,GAAQ/qB,UAAU/X,EAAOmrB,EAAQr4F,GACjCgwG,GAAQC,OAAO/iC,EAAOmrB,EACxB,EACAvkG,KAAKo5E,GACH8iC,GAAQE,UAAUhjC,EAAOA,EAAMmrB,eACxBnrB,EAAMmrB,MACf,EACA6H,aAAahzB,EAAOk/C,EAAOpsH,GACzB,MAAMq4F,EAASnrB,EAAMmrB,OACrB2X,GAAQ/qB,UAAU/X,EAAOmrB,EAAQr4F,GACjCq4F,EAAOr4F,QAAUA,CACnB,EACA8iG,YAAY51B,GACV,MAAMmrB,EAASnrB,EAAMmrB,OACrBA,EAAOo1B,cACPp1B,EAAOi2B,gBACT,EACA4B,WAAWhjD,EAAO9xE,GACXA,EAAK8iH,QACRhxC,EAAMmrB,OAAO/9C,YAAYl/C,EAAKpD,MAElC,EACA40E,SAAU,CACR0tB,SAAS,EACT/1F,SAAU,MACVq0D,MAAO,SACPksC,UAAU,EACV3+C,SAAS,EACTilB,OAAQ,IACR8C,QAAQl8B,EAAGumD,EAAYF,GACrB,MAAMrnF,EAAQunF,EAAWzlC,aACnBq9D,EAAK93B,EAAOnrB,MACdijD,EAAG16B,iBAAiBzkF,IACtBm/G,EAAGnpH,KAAKgK,GACRunF,EAAWtvE,QAAS,IAEpBknG,EAAGjwG,KAAKlP,GACRunF,EAAWtvE,QAAS,EAExB,EACAglD,QAAS,KACT2hD,QAAS,KACTnkC,OAAQ,CACNtgB,MAAQuC,GAAQA,EAAIR,MAAMltE,QAAQmrE,MAClC0hD,SAAU,GACV72G,QAAS,GACTsiF,eAAeprB,GACb,MAAMD,EAAWC,EAAM72E,KAAK42E,UACrBwe,QAAQ,cAACqhC,EAAa,WAAE77C,EAAU,UAAEsC,EAAS,MAAEpI,IAAU+B,EAAMmrB,OAAOr4F,QAC7E,OAAOktE,EAAM8Y,yBAAyBxrF,KAAKqwC,IACzC,MAAM3yB,EAAQ2yB,EAAK8R,WAAWwhC,SAAS2uC,EAAgB,OAAIzxH,GACrD02E,EAAcsD,GAAUn9D,EAAM65D,aACpC,MAAO,CACL1jD,KAAM4+C,EAASpiC,EAAK75B,OAAO67E,MAC3BvZ,UAAWp7D,EAAM60D,gBACjB4hD,UAAWxjD,EACXliD,QAAS4hB,EAAKjK,QACduhF,QAASjqG,EAAMipE,eACf4tC,SAAU72G,EAAMkpE,WAChBsnB,eAAgBxwF,EAAMmpE,iBACtB2gC,SAAU9pG,EAAMopE,gBAChB3N,WAAY5B,EAAYvpE,MAAQupE,EAAYtpE,QAAU,EACtDirE,YAAax7D,EAAM80D,YACnBiE,WAAYA,GAAc/4D,EAAM+4D,WAChCC,SAAUh5D,EAAMg5D,SAChBqC,UAAWA,GAAar7D,EAAMq7D,UAC9BusC,aAAc,EACdhtD,aAAcjoB,EAAK75B,MACpB,GACAxe,KACL,GAEFwiG,MAAO,CACL7pB,MAAQuC,GAAQA,EAAIR,MAAMltE,QAAQmrE,MAClCmvB,SAAS,EACT/1F,SAAU,SACV8pB,KAAM,KAGVs2B,YAAa,CACXuqB,YAAcjzE,IAAUA,EAAK8wB,WAAW,MACxC0+D,OAAQ,CACNvc,YAAcjzE,IAAU,CAAC,iBAAkB,SAAU,QAAQq6C,SAASr6C,MAK5E,MAAMm0H,WAAc,GAClBl9H,YAAY4xF,GACVv6D,QACA/3B,KAAK06E,MAAQ4X,EAAO5X,MACpB16E,KAAKwN,QAAU8kF,EAAO9kF,QACtBxN,KAAKk7E,IAAMoX,EAAOpX,IAClBl7E,KAAK69H,cAAWh1H,EAChB7I,KAAKkW,SAAMrN,EACX7I,KAAKmW,YAAStN,EACd7I,KAAKyS,UAAO5J,EACZ7I,KAAK2S,WAAQ9J,EACb7I,KAAKgW,WAAQnN,EACb7I,KAAKiW,YAASpN,EACd7I,KAAK+R,cAAWlJ,EAChB7I,KAAK44E,YAAS/vE,EACd7I,KAAKsyG,cAAWzpG,CAClB,CACAsV,OAAOkjE,EAAUojB,GACf,MAAM/jB,EAAO1gF,KAAKwN,QAGlB,GAFAxN,KAAKyS,KAAO,EACZzS,KAAKkW,IAAM,GACNwqE,EAAKonB,QAER,YADA9nG,KAAKgW,MAAQhW,KAAKiW,OAASjW,KAAK2S,MAAQ3S,KAAKmW,OAAS,GAGxDnW,KAAKgW,MAAQhW,KAAK2S,MAAQ0uE,EAC1BrhF,KAAKiW,OAASjW,KAAKmW,OAASsuF,EAC5B,MAAM4Q,EAAYprG,GAAQy2E,EAAK7kD,MAAQ6kD,EAAK7kD,KAAKz4B,OAAS,EAC1DpD,KAAK69H,SAAWh7C,GAAUnC,EAAKl9D,SAC/B,MAAMs6G,EAAWzoB,EAAYvyB,GAAOpC,EAAK7F,MAAME,WAAa/6E,KAAK69H,SAAS5nH,OACtEjW,KAAK4/F,eACP5/F,KAAKiW,OAAS6nH,EAEd99H,KAAKgW,MAAQ8nH,CAEjB,CACAl+B,eACE,MAAM7V,EAAM/pF,KAAKwN,QAAQuE,SACzB,MAAe,QAARg4E,GAAyB,WAARA,CAC1B,CACAg0C,UAAUt5G,GACR,MAAM,IAACvO,EAAG,KAAEzD,EAAI,OAAE0D,EAAM,MAAExD,EAAK,QAAEnF,GAAWxN,KACtComE,EAAQ54D,EAAQ44D,MACtB,IACIib,EAAUi1B,EAAQC,EADlB73B,EAAW,EAkBf,OAhBI1+E,KAAK4/F,gBACP0W,EAASjwC,GAAeD,EAAO3zD,EAAME,GACrC4jG,EAASrgG,EAAMuO,EACf48D,EAAW1uE,EAAQF,IAEM,SAArBjF,EAAQuE,UACVukG,EAAS7jG,EAAOgS,EAChB8xF,EAASlwC,GAAeD,EAAOjwD,EAAQD,GACvCwoE,GAAiB,GAAN5c,KAEXw0C,EAAS3jG,EAAQ8R,EACjB8xF,EAASlwC,GAAeD,EAAOlwD,EAAKC,GACpCuoE,EAAgB,GAAL5c,IAEbuf,EAAWlrE,EAASD,GAEf,CAACogG,SAAQC,SAAQl1B,WAAU3C,WACpC,CACAqR,OACE,MAAM7U,EAAMl7E,KAAKk7E,IACXwF,EAAO1gF,KAAKwN,QAClB,IAAKkzE,EAAKonB,QACR,OAEF,MAAMk2B,EAAWl7C,GAAOpC,EAAK7F,MAEvBp2D,EADau5G,EAASjjD,WACA,EAAI/6E,KAAK69H,SAAS3nH,KACxC,OAACogG,EAAM,OAAEC,EAAM,SAAEl1B,EAAQ,SAAE3C,GAAY1+E,KAAK+9H,UAAUt5G,GAC5Dg8D,GAAWvF,EAAKwF,EAAK7kD,KAAM,EAAG,EAAGmiG,EAAU,CACzCrlD,MAAO+H,EAAK/H,MACZ0I,WACA3C,WACAqC,UAAW5a,GAAmBua,EAAKta,OACnC4a,aAAc,SACdH,YAAa,CAACy1B,EAAQC,IAE1B,EAYF,IAAI0nB,GAAe,CACjBjwH,GAAI,QACJy1B,SAAUm6F,GACV78H,MAAM25E,EAAOk/C,EAAOpsH,IAbtB,SAAqBktE,EAAO+2B,GAC1B,MAAMjP,EAAQ,IAAIo7B,GAAM,CACtB1iD,IAAKR,EAAMQ,IACX1tE,QAASikG,EACT/2B,UAEF8iC,GAAQ/qB,UAAU/X,EAAO8nB,EAAOiP,GAChC+L,GAAQC,OAAO/iC,EAAO8nB,GACtB9nB,EAAMwjD,WAAa17B,CACrB,CAKI27B,CAAYzjD,EAAOltE,EACrB,EACAlM,KAAKo5E,GACH,MAAMwjD,EAAaxjD,EAAMwjD,WACzB1gB,GAAQE,UAAUhjC,EAAOwjD,UAClBxjD,EAAMwjD,UACf,EACAxwB,aAAahzB,EAAOk/C,EAAOpsH,GACzB,MAAMg1F,EAAQ9nB,EAAMwjD,WACpB1gB,GAAQ/qB,UAAU/X,EAAO8nB,EAAOh1F,GAChCg1F,EAAMh1F,QAAUA,CAClB,EACA4sE,SAAU,CACRhU,MAAO,SACP0hC,SAAS,EACTjtB,KAAM,CACJjC,OAAQ,QAEV05B,UAAU,EACV9uF,QAAS,GACTzR,SAAU,MACV8pB,KAAM,GACN+8C,OAAQ,KAEV8vB,cAAe,CACb/vB,MAAO,SAETxmB,YAAa,CACXuqB,aAAa,EACbC,YAAY,IAIhB,MAAM,GAAM,IAAI7lD,QAChB,IAAIsnG,GAAkB,CACpBpwH,GAAI,WACJjN,MAAM25E,EAAOk/C,EAAOpsH,GAClB,MAAMg1F,EAAQ,IAAIo7B,GAAM,CACtB1iD,IAAKR,EAAMQ,IACX1tE,UACAktE,UAEF8iC,GAAQ/qB,UAAU/X,EAAO8nB,EAAOh1F,GAChCgwG,GAAQC,OAAO/iC,EAAO8nB,GACtB,GAAI7mF,IAAI++D,EAAO8nB,EACjB,EACAlhG,KAAKo5E,GACH8iC,GAAQE,UAAUhjC,EAAO,GAAIh/D,IAAIg/D,IACjC,GAAI32C,OAAO22C,EACb,EACAgzB,aAAahzB,EAAOk/C,EAAOpsH,GACzB,MAAMg1F,EAAQ,GAAI9mF,IAAIg/D,GACtB8iC,GAAQ/qB,UAAU/X,EAAO8nB,EAAOh1F,GAChCg1F,EAAMh1F,QAAUA,CAClB,EACA4sE,SAAU,CACRhU,MAAO,SACP0hC,SAAS,EACTjtB,KAAM,CACJjC,OAAQ,UAEV05B,UAAU,EACV9uF,QAAS,EACTzR,SAAU,MACV8pB,KAAM,GACN+8C,OAAQ,MAEV8vB,cAAe,CACb/vB,MAAO,SAETxmB,YAAa,CACXuqB,aAAa,EACbC,YAAY,IAIhB,MAAM0hD,GAAc,CAClBC,QAAQ/wH,GACN,IAAKA,EAAMnK,OACT,OAAO,EAET,IAAI8H,EAAGD,EACHmL,EAAI,EACJC,EAAI,EACJqwD,EAAQ,EACZ,IAAKx7D,EAAI,EAAGD,EAAMsC,EAAMnK,OAAQ8H,EAAID,IAAOC,EAAG,CAC5C,MAAMiE,EAAK5B,EAAMrC,GAAGxB,QACpB,GAAIyF,GAAMA,EAAG8+C,WAAY,CACvB,MAAM87B,EAAM56E,EAAGm5F,kBACflyF,GAAK2zE,EAAI3zE,EACTC,GAAK0zE,EAAI1zE,IACPqwD,CACJ,CACF,CACA,MAAO,CACLtwD,EAAGA,EAAIswD,EACPrwD,EAAGA,EAAIqwD,EAEX,EACA+0C,QAAQluG,EAAOgxH,GACb,IAAKhxH,EAAMnK,OACT,OAAO,EAET,IAGI8H,EAAGD,EAAKuzH,EAHRpoH,EAAImoH,EAAcnoH,EAClBC,EAAIkoH,EAAcloH,EAClB2kG,EAAcxgD,OAAO0H,kBAEzB,IAAKh3D,EAAI,EAAGD,EAAMsC,EAAMnK,OAAQ8H,EAAID,IAAOC,EAAG,CAC5C,MAAMiE,EAAK5B,EAAMrC,GAAGxB,QACpB,GAAIyF,GAAMA,EAAG8+C,WAAY,CACvB,MACM34B,EAAI4uC,GAAsBq6D,EADjBpvH,EAAG8rG,kBAEd3lF,EAAI0lF,IACNA,EAAc1lF,EACdkpG,EAAiBrvH,EAErB,CACF,CACA,GAAIqvH,EAAgB,CAClB,MAAMC,EAAKD,EAAel2B,kBAC1BlyF,EAAIqoH,EAAGroH,EACPC,EAAIooH,EAAGpoH,CACT,CACA,MAAO,CACLD,IACAC,IAEJ,GAEF,SAASqoH,GAAaruG,EAAMsuG,GAQ1B,OAPIA,IACE10H,GAAQ00H,GACV30H,MAAM1E,UAAUpF,KAAK0L,MAAMykB,EAAMsuG,GAEjCtuG,EAAKnwB,KAAKy+H,IAGPtuG,CACT,CACA,SAASuuG,GAAcl9D,GACrB,OAAoB,iBAARA,GAAoBA,aAAejH,SAAWiH,EAAIr+D,QAAQ,OAAS,EACtEq+D,EAAIhzD,MAAM,MAEZgzD,CACT,CACA,SAASm9D,GAAkBnkD,EAAO5sE,GAChC,MAAM,QAACpE,EAAO,aAAE42D,EAAY,MAAE9hD,GAAS1Q,EACjCq8C,EAAauwB,EAAMgd,eAAep3B,GAAcnW,YAChD,MAACkwC,EAAK,MAAEtzF,GAASojD,EAAWiwC,iBAAiB57E,GACnD,MAAO,CACLk8D,QACA2f,QACA7T,OAAQr8B,EAAWmvC,UAAU96E,GAC7Bs8E,IAAKpgB,EAAM72E,KAAK42E,SAASna,GAAcz8D,KAAK2a,GAC5C2nF,eAAgBp/F,EAChBugD,QAAS6C,EAAWysC,aACpBiE,UAAWr8E,EACX8hD,eACA52D,UAEJ,CACA,SAASo1H,GAAev8B,EAAS/0F,GAC/B,MAAM0tE,EAAMqnB,EAAQ7nB,MAAMQ,KACpB,KAACtiE,EAAI,OAAEmmH,EAAM,MAAEv8B,GAASD,GACxB,SAAC83B,EAAQ,UAAED,GAAa5sH,EACxBwxH,EAAWl8C,GAAOt1E,EAAQwxH,UAC1BlC,EAAYh6C,GAAOt1E,EAAQsvH,WAC3BmC,EAAan8C,GAAOt1E,EAAQyxH,YAC5BC,EAAiB18B,EAAMp/F,OACvB+7H,EAAkBJ,EAAO37H,OACzBg8H,EAAoBxmH,EAAKxV,OACzBogB,EAAUq/D,GAAUr1E,EAAQgW,SAClC,IAAIvN,EAASuN,EAAQvN,OACjBD,EAAQ,EACRqpH,EAAqBzmH,EAAK4B,QAAO,CAACksD,EAAO44D,IAAa54D,EAAQ44D,EAAS1/E,OAAOx8C,OAASk8H,EAAS5hG,MAAMt6B,OAASk8H,EAAShgF,MAAMl8C,QAAQ,GAC1Ii8H,GAAsB98B,EAAQg9B,WAAWn8H,OAASm/F,EAAQi9B,UAAUp8H,OAChE87H,IACFjpH,GAAUipH,EAAiBpC,EAAU/hD,YACnCmkD,EAAiB,GAAK1xH,EAAQiyH,aAC/BjyH,EAAQkyH,mBAEPL,IAEFppH,GAAUmpH,GADa5xH,EAAQmyH,cAAgBt9H,KAAKiT,IAAI8kH,EAAW4E,EAASjkD,YAAcikD,EAASjkD,aAEjGskD,EAAqBD,GAAqBJ,EAASjkD,YACnDskD,EAAqB,GAAK7xH,EAAQoyH,aAElCT,IACFlpH,GAAUzI,EAAQqyH,gBACjBV,EAAkBF,EAAWlkD,YAC5BokD,EAAkB,GAAK3xH,EAAQsyH,eAEnC,IAAIC,EAAe,EACnB,MAAMC,EAAe,SAASliG,GAC5B9nB,EAAQ3T,KAAKiT,IAAIU,EAAOklE,EAAI+B,YAAYn/C,GAAM9nB,MAAQ+pH,EACxD,EAiBA,OAhBA7kD,EAAImC,OACJnC,EAAIL,KAAOiiD,EAAUn/F,OACrBmiC,GAAKyiC,EAAQC,MAAOw9B,GACpB9kD,EAAIL,KAAOmkD,EAASrhG,OACpBmiC,GAAKyiC,EAAQg9B,WAAW9qH,OAAO8tF,EAAQi9B,WAAYQ,GACnDD,EAAevyH,EAAQmyH,cAAiBtF,EAAW,EAAI7sH,EAAQyuG,WAAc,EAC7En8C,GAAKlnD,GAAO0mH,IACVx/D,GAAKw/D,EAAS1/E,OAAQogF,GACtBlgE,GAAKw/D,EAAS5hG,MAAOsiG,GACrBlgE,GAAKw/D,EAAShgF,MAAO0gF,EAAa,IAEpCD,EAAe,EACf7kD,EAAIL,KAAOokD,EAAWthG,OACtBmiC,GAAKyiC,EAAQw8B,OAAQiB,GACrB9kD,EAAIuC,UACJznE,GAASwN,EAAQxN,MACV,CAACA,QAAOC,SACjB,CAoBA,SAASgqH,GAAgBvlD,EAAOltE,EAASywC,EAAMiiF,GAC7C,MAAM,EAAC9pH,EAAC,MAAEJ,GAASioC,GACZjoC,MAAOmqH,EAAYzlC,WAAW,KAACjoF,EAAI,MAAEE,IAAU+nE,EACtD,IAAI0lD,EAAS,SAWb,MAVe,WAAXF,EACFE,EAAShqH,IAAM3D,EAAOE,GAAS,EAAI,OAAS,QACnCyD,GAAKJ,EAAQ,EACtBoqH,EAAS,OACAhqH,GAAK+pH,EAAanqH,EAAQ,IACnCoqH,EAAS,SAnBb,SAA6BA,EAAQ1lD,EAAOltE,EAASywC,GACnD,MAAM,EAAC7nC,EAAC,MAAEJ,GAASioC,EACboiF,EAAQ7yH,EAAQ8yH,UAAY9yH,EAAQ+yH,aAC1C,MAAe,SAAXH,GAAqBhqH,EAAIJ,EAAQqqH,EAAQ3lD,EAAM1kE,OAGpC,UAAXoqH,GAAsBhqH,EAAIJ,EAAQqqH,EAAQ,QAA9C,CAGF,CAYMG,CAAoBJ,EAAQ1lD,EAAOltE,EAASywC,KAC9CmiF,EAAS,UAEJA,CACT,CACA,SAASK,GAAmB/lD,EAAOltE,EAASywC,GAC1C,MAAMiiF,EAASjiF,EAAKiiF,QAAU1yH,EAAQ0yH,QApCxC,SAAyBxlD,EAAOz8B,GAC9B,MAAM,EAAC5nC,EAAC,OAAEJ,GAAUgoC,EACpB,OAAI5nC,EAAIJ,EAAS,EACR,MACEI,EAAKqkE,EAAMzkE,OAASA,EAAS,EAC/B,SAEF,QACT,CA4BkDyqH,CAAgBhmD,EAAOz8B,GACvE,MAAO,CACLmiF,OAAQniF,EAAKmiF,QAAU5yH,EAAQ4yH,QAAUH,GAAgBvlD,EAAOltE,EAASywC,EAAMiiF,GAC/EA,SAEJ,CAqBA,SAASS,GAAmBnzH,EAASywC,EAAM2iF,EAAWlmD,GACpD,MAAM,UAAC4lD,EAAS,aAAEC,EAAY,aAAE/hD,GAAgBhxE,GAC1C,OAAC4yH,EAAM,OAAEF,GAAUU,EACnBC,EAAiBP,EAAYC,GAC7B,QAACr+C,EAAO,SAAEG,EAAQ,WAAEF,EAAU,YAAEC,GAAeQ,GAAcpE,GACnE,IAAIpoE,EAzBN,SAAgB6nC,EAAMmiF,GACpB,IAAI,EAAChqH,EAAC,MAAEJ,GAASioC,EAMjB,MALe,UAAXmiF,EACFhqH,GAAKJ,EACe,WAAXoqH,IACThqH,GAAMJ,EAAQ,GAETI,CACT,CAiBU0qH,CAAO7iF,EAAMmiF,GACrB,MAAM/pH,EAjBR,SAAgB4nC,EAAMiiF,EAAQW,GAC5B,IAAI,EAACxqH,EAAC,OAAEJ,GAAUgoC,EAQlB,MAPe,QAAXiiF,EACF7pH,GAAKwqH,EAELxqH,GADoB,WAAX6pH,EACJjqH,EAAS4qH,EAER5qH,EAAS,EAEVI,CACT,CAOY0qH,CAAO9iF,EAAMiiF,EAAQW,GAY/B,MAXe,WAAXX,EACa,SAAXE,EACFhqH,GAAKyqH,EACe,UAAXT,IACThqH,GAAKyqH,GAEa,SAAXT,EACThqH,GAAK/T,KAAKiT,IAAI4sE,EAASC,GAAcm+C,EACjB,UAAXF,IACThqH,GAAK/T,KAAKiT,IAAI+sE,EAAUD,GAAek+C,GAElC,CACLlqH,EAAGyuD,GAAYzuD,EAAG,EAAGskE,EAAM1kE,MAAQioC,EAAKjoC,OACxCK,EAAGwuD,GAAYxuD,EAAG,EAAGqkE,EAAMzkE,OAASgoC,EAAKhoC,QAE7C,CACA,SAAS+qH,GAAYz+B,EAASn8B,EAAO54D,GACnC,MAAMgW,EAAUq/D,GAAUr1E,EAAQgW,SAClC,MAAiB,WAAV4iD,EACHm8B,EAAQnsF,EAAImsF,EAAQvsF,MAAQ,EAClB,UAAVowD,EACEm8B,EAAQnsF,EAAImsF,EAAQvsF,MAAQwN,EAAQ7Q,MACpC4vF,EAAQnsF,EAAIoN,EAAQ/Q,IAC5B,CACA,SAASwuH,GAAwB51F,GAC/B,OAAOqzF,GAAa,GAAIE,GAAcvzF,GACxC,CAQA,SAAS61F,GAAkB1xC,EAAWv4C,GACpC,MAAMklC,EAAWllC,GAAWA,EAAQqQ,SAAWrQ,EAAQqQ,QAAQi7C,SAAWtrD,EAAQqQ,QAAQi7C,QAAQ/S,UAClG,OAAOrT,EAAWqT,EAAUrT,SAASA,GAAYqT,CACnD,CACA,MAAM/7D,WAAgB,GACpB/yB,YAAY4xF,GACVv6D,QACA/3B,KAAKsvC,QAAU,EACftvC,KAAKgwF,QAAU,GACfhwF,KAAKmhI,oBAAiBt4H,EACtB7I,KAAKohI,WAAQv4H,EACb7I,KAAKqhI,uBAAoBx4H,EACzB7I,KAAKshI,cAAgB,GACrBthI,KAAK8yF,iBAAcjqF,EACnB7I,KAAKs2F,cAAWztF,EAChB7I,KAAK06E,MAAQ4X,EAAO5X,OAAS4X,EAAOC,OACpCvyF,KAAKuyF,OAASvyF,KAAK06E,MACnB16E,KAAKwN,QAAU8kF,EAAO9kF,QACtBxN,KAAKuhI,gBAAa14H,EAClB7I,KAAKwiG,WAAQ35F,EACb7I,KAAKu/H,gBAAa12H,EAClB7I,KAAK4Y,UAAO/P,EACZ7I,KAAKw/H,eAAY32H,EACjB7I,KAAK++H,YAASl2H,EACd7I,KAAKogI,YAASv3H,EACd7I,KAAKkgI,YAASr3H,EACd7I,KAAKoW,OAAIvN,EACT7I,KAAKqW,OAAIxN,EACT7I,KAAKiW,YAASpN,EACd7I,KAAKgW,WAAQnN,EACb7I,KAAKwhI,YAAS34H,EACd7I,KAAKyhI,YAAS54H,EACd7I,KAAK0hI,iBAAc74H,EACnB7I,KAAK2hI,sBAAmB94H,EACxB7I,KAAK4hI,qBAAkB/4H,CACzB,CACAsqD,WAAW3lD,GACTxN,KAAKwN,QAAUA,EACfxN,KAAKqhI,uBAAoBx4H,EACzB7I,KAAKs2F,cAAWztF,CAClB,CACAyyF,qBACE,MAAM9F,EAASx1F,KAAKqhI,kBACpB,GAAI7rC,EACF,OAAOA,EAET,MAAM9a,EAAQ16E,KAAK06E,MACbltE,EAAUxN,KAAKwN,QAAQ23E,WAAWnlF,KAAKi+E,cACvCyC,EAAOlzE,EAAQvN,SAAWy6E,EAAMltE,QAAQ8sE,WAAa9sE,EAAQ4kF,WAC7DA,EAAa,IAAIC,GAAWryF,KAAK06E,MAAOgG,GAI9C,OAHIA,EAAKkD,aACP5jF,KAAKqhI,kBAAoBz2H,OAAOm4C,OAAOqvC,IAElCA,CACT,CACAnU,aACE,OAAOj+E,KAAKs2F,WACZt2F,KAAKs2F,UAAyDt2F,KA/DzDojF,GA+DgCpjF,KAAK06E,MAAMuD,aA/DrB,CAC3BskB,QA8D8DviG,KA7D9D6hI,aA6DoE7hI,KAAKshI,cA5DzE17H,KAAM,aA6DR,CACAk8H,SAAS7qF,EAASzpC,GAChB,MAAM,UAACgiF,GAAahiF,EACdu0H,EAAcvyC,EAAUuyC,YAAYn2H,MAAM5L,KAAM,CAACi3C,IACjDurD,EAAQhT,EAAUgT,MAAM52F,MAAM5L,KAAM,CAACi3C,IACrC+qF,EAAaxyC,EAAUwyC,WAAWp2H,MAAM5L,KAAM,CAACi3C,IACrD,IAAIvZ,EAAQ,GAIZ,OAHAA,EAAQghG,GAAahhG,EAAOkhG,GAAcmD,IAC1CrkG,EAAQghG,GAAahhG,EAAOkhG,GAAcp8B,IAC1C9kE,EAAQghG,GAAahhG,EAAOkhG,GAAcoD,IACnCtkG,CACT,CACAukG,cAAcJ,EAAcr0H,GAC1B,OAAOyzH,GAAwBzzH,EAAQgiF,UAAU+vC,WAAW3zH,MAAM5L,KAAM,CAAC6hI,IAC3E,CACAK,QAAQL,EAAcr0H,GACpB,MAAM,UAACgiF,GAAahiF,EACd20H,EAAY,GAalB,OAZAriE,GAAK+hE,GAAe5qF,IAClB,MAAMqoF,EAAW,CACf1/E,OAAQ,GACRliB,MAAO,GACP4hB,MAAO,IAEH8iF,EAASlB,GAAkB1xC,EAAWv4C,GAC5CynF,GAAaY,EAAS1/E,OAAQg/E,GAAcwD,EAAOC,YAAYv9H,KAAK9E,KAAMi3C,KAC1EynF,GAAaY,EAAS5hG,MAAO0kG,EAAO/nC,MAAMv1F,KAAK9E,KAAMi3C,IACrDynF,GAAaY,EAAShgF,MAAOs/E,GAAcwD,EAAOE,WAAWx9H,KAAK9E,KAAMi3C,KACxEkrF,EAAUjiI,KAAKo/H,EAAS,IAEnB6C,CACT,CACAI,aAAaV,EAAcr0H,GACzB,OAAOyzH,GAAwBzzH,EAAQgiF,UAAUgwC,UAAU5zH,MAAM5L,KAAM,CAAC6hI,IAC1E,CACAW,UAAUX,EAAcr0H,GACtB,MAAM,UAACgiF,GAAahiF,EACdi1H,EAAejzC,EAAUizC,aAAa72H,MAAM5L,KAAM,CAAC6hI,IACnD9C,EAASvvC,EAAUuvC,OAAOnzH,MAAM5L,KAAM,CAAC6hI,IACvCa,EAAclzC,EAAUkzC,YAAY92H,MAAM5L,KAAM,CAAC6hI,IACvD,IAAInkG,EAAQ,GAIZ,OAHAA,EAAQghG,GAAahhG,EAAOkhG,GAAc6D,IAC1C/kG,EAAQghG,GAAahhG,EAAOkhG,GAAcG,IAC1CrhG,EAAQghG,GAAahhG,EAAOkhG,GAAc8D,IACnChlG,CACT,CACAilG,aAAan1H,GACX,MAAMO,EAAS/N,KAAKgwF,QACdnsF,EAAO7D,KAAK06E,MAAM72E,KAClB69H,EAAc,GACdC,EAAmB,GACnBC,EAAkB,GACxB,IACI12H,EAAGD,EADH42H,EAAe,GAEnB,IAAK32H,EAAI,EAAGD,EAAM8C,EAAO3K,OAAQ8H,EAAID,IAAOC,EAC1C22H,EAAa3hI,KAAK2+H,GAAkB7+H,KAAK06E,MAAO3sE,EAAO7C,KAkBzD,OAhBIsC,EAAQ7F,SACVk6H,EAAeA,EAAal6H,QAAO,CAAC+B,EAAS8U,EAAOk8C,IAAUltD,EAAQ7F,OAAO+B,EAAS8U,EAAOk8C,EAAO72D,MAElG2J,EAAQo1H,WACVf,EAAeA,EAAa1mH,MAAK,CAAChS,EAAGqe,IAAMha,EAAQo1H,SAASz5H,EAAGqe,EAAG3jB,MAEpEi8D,GAAK+hE,GAAe5qF,IAClB,MAAMmrF,EAASlB,GAAkB1zH,EAAQgiF,UAAWv4C,GACpDyqF,EAAYxhI,KAAKkiI,EAAOS,WAAW/9H,KAAK9E,KAAMi3C,IAC9C0qF,EAAiBzhI,KAAKkiI,EAAOU,gBAAgBh+H,KAAK9E,KAAMi3C,IACxD2qF,EAAgB1hI,KAAKkiI,EAAOW,eAAej+H,KAAK9E,KAAMi3C,GAAS,IAEjEj3C,KAAK0hI,YAAcA,EACnB1hI,KAAK2hI,iBAAmBA,EACxB3hI,KAAK4hI,gBAAkBA,EACvB5hI,KAAKuhI,WAAaM,EACXA,CACT,CACA1jH,OAAOwpD,EAAS+jD,GACd,MAAMl+G,EAAUxN,KAAKwN,QAAQ23E,WAAWnlF,KAAKi+E,cACvClwE,EAAS/N,KAAKgwF,QACpB,IAAInpF,EACAg7H,EAAe,GACnB,GAAK9zH,EAAO3K,OAML,CACL,MAAM2O,EAAWssH,GAAY7wH,EAAQuE,UAAUjN,KAAK9E,KAAM+N,EAAQ/N,KAAKmhI,gBACvEU,EAAe7hI,KAAK2iI,aAAan1H,GACjCxN,KAAKwiG,MAAQxiG,KAAK8hI,SAASD,EAAcr0H,GACzCxN,KAAKu/H,WAAav/H,KAAKiiI,cAAcJ,EAAcr0H,GACnDxN,KAAK4Y,KAAO5Y,KAAKkiI,QAAQL,EAAcr0H,GACvCxN,KAAKw/H,UAAYx/H,KAAKuiI,aAAaV,EAAcr0H,GACjDxN,KAAK++H,OAAS/+H,KAAKwiI,UAAUX,EAAcr0H,GAC3C,MAAMywC,EAAOj+C,KAAKohI,MAAQtC,GAAe9+H,KAAMwN,GACzCw1H,EAAkBp4H,OAAOiS,OAAO,CAAC,EAAG9K,EAAUksC,GAC9C2iF,EAAYH,GAAmBzgI,KAAK06E,MAAOltE,EAASw1H,GACpDC,EAAkBtC,GAAmBnzH,EAASw1H,EAAiBpC,EAAW5gI,KAAK06E,OACrF16E,KAAKogI,OAASQ,EAAUR,OACxBpgI,KAAKkgI,OAASU,EAAUV,OACxBr5H,EAAa,CACXyoC,QAAS,EACTl5B,EAAG6sH,EAAgB7sH,EACnBC,EAAG4sH,EAAgB5sH,EACnBL,MAAOioC,EAAKjoC,MACZC,OAAQgoC,EAAKhoC,OACburH,OAAQzvH,EAASqE,EACjBqrH,OAAQ1vH,EAASsE,EAErB,MA5BuB,IAAjBrW,KAAKsvC,UACPzoC,EAAa,CACXyoC,QAAS,IA2BftvC,KAAKshI,cAAgBO,EACrB7hI,KAAKs2F,cAAWztF,EACZhC,GACF7G,KAAKs7F,qBAAqBn9E,OAAOne,KAAM6G,GAErC8gE,GAAWn6D,EAAQ01H,UACrB11H,EAAQ01H,SAASp+H,KAAK9E,KAAM,CAAC06E,MAAO16E,KAAK06E,MAAO6nB,QAASviG,KAAM0rH,UAEnE,CACAyX,UAAUC,EAAcloD,EAAKj9B,EAAMzwC,GACjC,MAAM61H,EAAgBrjI,KAAKsjI,iBAAiBF,EAAcnlF,EAAMzwC,GAChE0tE,EAAIkE,OAAOikD,EAAc9uB,GAAI8uB,EAAc7uB,IAC3Ct5B,EAAIkE,OAAOikD,EAAc5uB,GAAI4uB,EAAc3uB,IAC3Cx5B,EAAIkE,OAAOikD,EAAcE,GAAIF,EAAcG,GAC7C,CACAF,iBAAiBF,EAAcnlF,EAAMzwC,GACnC,MAAM,OAAC4yH,EAAM,OAAEF,GAAUlgI,MACnB,UAACsgI,EAAS,aAAE9hD,GAAgBhxE,GAC5B,QAAC00E,EAAO,SAAEG,EAAQ,WAAEF,EAAU,YAAEC,GAAeQ,GAAcpE,IAC5DpoE,EAAGqtH,EAAKptH,EAAGqtH,GAAON,GACnB,MAACptH,EAAK,OAAEC,GAAUgoC,EACxB,IAAIs2D,EAAIE,EAAI8uB,EAAI/uB,EAAIE,EAAI8uB,EAoCxB,MAnCe,WAAXtD,GACFxrB,EAAKgvB,EAAOztH,EAAS,EACN,SAAXmqH,GACF7rB,EAAKkvB,EACLhvB,EAAKF,EAAK+rB,EACV9rB,EAAKE,EAAK4rB,EACVkD,EAAK9uB,EAAK4rB,IAEV/rB,EAAKkvB,EAAMztH,EACXy+F,EAAKF,EAAK+rB,EACV9rB,EAAKE,EAAK4rB,EACVkD,EAAK9uB,EAAK4rB,GAEZiD,EAAKhvB,IAGHE,EADa,SAAX2rB,EACGqD,EAAMphI,KAAKiT,IAAI4sE,EAASC,GAAc,EACvB,UAAXi+C,EACJqD,EAAMztH,EAAQ3T,KAAKiT,IAAI+sE,EAAUD,GAAek+C,EAEhDtgI,KAAKwhI,OAEG,QAAXtB,GACF1rB,EAAKkvB,EACLhvB,EAAKF,EAAK8rB,EACV/rB,EAAKE,EAAK6rB,EACViD,EAAK9uB,EAAK6rB,IAEV9rB,EAAKkvB,EAAMztH,EACXy+F,EAAKF,EAAK8rB,EACV/rB,EAAKE,EAAK6rB,EACViD,EAAK9uB,EAAK6rB,GAEZkD,EAAKhvB,GAEA,CAACD,KAAIE,KAAI8uB,KAAI/uB,KAAIE,KAAI8uB,KAC9B,CACAntB,UAAU7uB,EAAItM,EAAK1tE,GACjB,MAAMg1F,EAAQxiG,KAAKwiG,MACbp/F,EAASo/F,EAAMp/F,OACrB,IAAI05H,EAAW2C,EAAcv0H,EAC7B,GAAI9H,EAAQ,CACV,MAAM24H,EAAYrvC,GAAcl/E,EAAQm/E,IAAK3sF,KAAKoW,EAAGpW,KAAKgW,OAQ1D,IAPAwxE,EAAGpxE,EAAI4qH,GAAYhhI,KAAMwN,EAAQk+F,WAAYl+F,GAC7C0tE,EAAI6F,UAAYg7C,EAAUh7C,UAAUvzE,EAAQk+F,YAC5CxwB,EAAI8F,aAAe,SACnB87C,EAAYh6C,GAAOt1E,EAAQsvH,WAC3B2C,EAAejyH,EAAQiyH,aACvBvkD,EAAI4F,UAAYtzE,EAAQm2H,WACxBzoD,EAAIL,KAAOiiD,EAAUn/F,OAChBzyB,EAAI,EAAGA,EAAI9H,IAAU8H,EACxBgwE,EAAIoG,SAASkhB,EAAMt3F,GAAI6wH,EAAU3lH,EAAEoxE,EAAGpxE,GAAIoxE,EAAGnxE,EAAIymH,EAAU/hD,WAAa,GACxEyM,EAAGnxE,GAAKymH,EAAU/hD,WAAa0kD,EAC3Bv0H,EAAI,IAAM9H,IACZokF,EAAGnxE,GAAK7I,EAAQkyH,kBAAoBD,EAG1C,CACF,CACAmE,cAAc1oD,EAAKsM,EAAIt8E,EAAG6wH,EAAWvuH,GACnC,MAAMk0H,EAAc1hI,KAAK0hI,YAAYx2H,GAC/B43H,EAAkB9iI,KAAK2hI,iBAAiBz2H,IACxC,UAACkvH,EAAS,SAAEC,EAAQ,WAAEpe,GAAczuG,EACpCwxH,EAAWl8C,GAAOt1E,EAAQwxH,UAC1B6E,EAAS7C,GAAYhhI,KAAM,OAAQwN,GACnCs2H,EAAY/H,EAAU3lH,EAAEytH,GACxBE,EAAU3J,EAAY4E,EAASjkD,YAAcikD,EAASjkD,WAAaq/C,GAAa,EAAI,EACpF4J,EAASx8C,EAAGnxE,EAAI0tH,EACtB,GAAIv2H,EAAQ8sH,cAAe,CACzB,MAAMkC,EAAc,CAClB79C,OAAQt8E,KAAKE,IAAI83H,EAAUD,GAAa,EACxC37C,WAAYqkD,EAAgBrkD,WAC5BC,SAAUokD,EAAgBpkD,SAC1Ba,YAAa,GAET6lB,EAAU22B,EAAUhvC,WAAW+2C,EAAWzJ,GAAYA,EAAW,EACjEh1B,EAAU2+B,EAAS5J,EAAY,EACrCl/C,EAAIgG,YAAc1zE,EAAQy2H,mBAC1B/oD,EAAI4F,UAAYtzE,EAAQy2H,mBACxB7lD,GAAUlD,EAAKshD,EAAap3B,EAASC,GACrCnqB,EAAIgG,YAAcwgD,EAAYlnD,YAC9BU,EAAI4F,UAAY4gD,EAAYnnD,gBAC5B6D,GAAUlD,EAAKshD,EAAap3B,EAASC,EACvC,KAAO,CACLnqB,EAAIiG,UAAY9hB,GAASqiE,EAAYniD,aAAel9E,KAAKiT,OAAO1K,OAAO6yB,OAAOikG,EAAYniD,cAAiBmiD,EAAYniD,aAAe,EACtIrE,EAAIgG,YAAcwgD,EAAYlnD,YAC9BU,EAAI+6B,YAAYyrB,EAAY9yC,YAAc,IAC1C1T,EAAIg7B,eAAiBwrB,EAAY7yC,kBAAoB,EACrD,MAAMq1C,EAASnI,EAAUhvC,WAAW+2C,EAAWzJ,EAAWpe,GACpDkoB,EAASpI,EAAUhvC,WAAWgvC,EAAUjvC,MAAMg3C,EAAW,GAAIzJ,EAAWpe,EAAa,GACrFqR,EAAe1qC,GAAc8+C,EAAYpU,cAC3C1iH,OAAO6yB,OAAO6vF,GAAcrxG,MAAK8O,GAAW,IAANA,KACxCmwD,EAAI6D,YACJ7D,EAAI4F,UAAYtzE,EAAQy2H,mBACxBhiD,GAAmB/G,EAAK,CACtB9kE,EAAG8tH,EACH7tH,EAAG2tH,EACHx4D,EAAG6uD,EACHlwD,EAAGiwD,EACHz7C,OAAQ2uC,IAEVpyC,EAAIoE,OACJpE,EAAIsE,SACJtE,EAAI4F,UAAY4gD,EAAYnnD,gBAC5BW,EAAI6D,YACJkD,GAAmB/G,EAAK,CACtB9kE,EAAG+tH,EACH9tH,EAAG2tH,EAAS,EACZx4D,EAAG6uD,EAAW,EACdlwD,EAAGiwD,EAAY,EACfz7C,OAAQ2uC,IAEVpyC,EAAIoE,SAEJpE,EAAI4F,UAAYtzE,EAAQy2H,mBACxB/oD,EAAI46B,SAASouB,EAAQF,EAAQ3J,EAAUD,GACvCl/C,EAAIkpD,WAAWF,EAAQF,EAAQ3J,EAAUD,GACzCl/C,EAAI4F,UAAY4gD,EAAYnnD,gBAC5BW,EAAI46B,SAASquB,EAAQH,EAAS,EAAG3J,EAAW,EAAGD,EAAY,GAE/D,CACAl/C,EAAI4F,UAAY9gF,KAAK4hI,gBAAgB12H,EACvC,CACAm5H,SAAS78C,EAAItM,EAAK1tE,GAChB,MAAM,KAACoL,GAAQ5Y,MACT,YAAC4/H,EAAW,UAAE0E,EAAS,cAAE3E,EAAa,UAAEvF,EAAS,SAAEC,EAAQ,WAAEpe,GAAczuG,EAC3EwxH,EAAWl8C,GAAOt1E,EAAQwxH,UAChC,IAAIuF,EAAiBvF,EAASjkD,WAC1BypD,EAAe,EACnB,MAAMzI,EAAYrvC,GAAcl/E,EAAQm/E,IAAK3sF,KAAKoW,EAAGpW,KAAKgW,OACpDyuH,EAAiB,SAAS3mG,GAC9Bo9C,EAAIoG,SAASxjD,EAAMi+F,EAAU3lH,EAAEoxE,EAAGpxE,EAAIouH,GAAeh9C,EAAGnxE,EAAIkuH,EAAiB,GAC7E/8C,EAAGnxE,GAAKkuH,EAAiB3E,CAC3B,EACM8E,EAA0B3I,EAAUh7C,UAAUujD,GACpD,IAAIhF,EAAUqF,EAAWjnG,EAAOxyB,EAAG2sE,EAAG1X,EAAMmd,EAU5C,IATApC,EAAI6F,UAAYujD,EAChBppD,EAAI8F,aAAe,SACnB9F,EAAIL,KAAOmkD,EAASrhG,OACpB6pD,EAAGpxE,EAAI4qH,GAAYhhI,KAAM0kI,EAAyBl3H,GAClD0tE,EAAI4F,UAAYtzE,EAAQo3H,UACxB9kE,GAAK9/D,KAAKu/H,WAAYkF,GACtBD,EAAe7E,GAA6C,UAA5B+E,EACd,WAAdJ,EAA0BjK,EAAW,EAAIpe,EAAeoe,EAAW,EAAIpe,EACvE,EACC/wG,EAAI,EAAGi1D,EAAOvnD,EAAKxV,OAAQ8H,EAAIi1D,IAAQj1D,EAAG,CAU7C,IATAo0H,EAAW1mH,EAAK1N,GAChBy5H,EAAY3kI,KAAK4hI,gBAAgB12H,GACjCgwE,EAAI4F,UAAY6jD,EAChB7kE,GAAKw/D,EAAS1/E,OAAQ6kF,GACtB/mG,EAAQ4hG,EAAS5hG,MACbiiG,GAAiBjiG,EAAMt6B,SACzBpD,KAAK4jI,cAAc1oD,EAAKsM,EAAIt8E,EAAG6wH,EAAWvuH,GAC1C+2H,EAAiBliI,KAAKiT,IAAI0pH,EAASjkD,WAAYq/C,IAE5CviD,EAAI,EAAGyF,EAAO5/C,EAAMt6B,OAAQy0E,EAAIyF,IAAQzF,EAC3C4sD,EAAe/mG,EAAMm6C,IACrB0sD,EAAiBvF,EAASjkD,WAE5Bjb,GAAKw/D,EAAShgF,MAAOmlF,EACvB,CACAD,EAAe,EACfD,EAAiBvF,EAASjkD,WAC1Bjb,GAAK9/D,KAAKw/H,UAAWiF,GACrBj9C,EAAGnxE,GAAKupH,CACV,CACAiF,WAAWr9C,EAAItM,EAAK1tE,GAClB,MAAMuxH,EAAS/+H,KAAK++H,OACd37H,EAAS27H,EAAO37H,OACtB,IAAI67H,EAAY/zH,EAChB,GAAI9H,EAAQ,CACV,MAAM24H,EAAYrvC,GAAcl/E,EAAQm/E,IAAK3sF,KAAKoW,EAAGpW,KAAKgW,OAQ1D,IAPAwxE,EAAGpxE,EAAI4qH,GAAYhhI,KAAMwN,EAAQs3H,YAAat3H,GAC9Cg6E,EAAGnxE,GAAK7I,EAAQqyH,gBAChB3kD,EAAI6F,UAAYg7C,EAAUh7C,UAAUvzE,EAAQs3H,aAC5C5pD,EAAI8F,aAAe,SACnBi+C,EAAan8C,GAAOt1E,EAAQyxH,YAC5B/jD,EAAI4F,UAAYtzE,EAAQu3H,YACxB7pD,EAAIL,KAAOokD,EAAWthG,OACjBzyB,EAAI,EAAGA,EAAI9H,IAAU8H,EACxBgwE,EAAIoG,SAASy9C,EAAO7zH,GAAI6wH,EAAU3lH,EAAEoxE,EAAGpxE,GAAIoxE,EAAGnxE,EAAI4oH,EAAWlkD,WAAa,GAC1EyM,EAAGnxE,GAAK4oH,EAAWlkD,WAAavtE,EAAQsyH,aAE5C,CACF,CACAjqB,eAAeruB,EAAItM,EAAK8pD,EAAax3H,GACnC,MAAM,OAAC4yH,EAAM,OAAEF,GAAUlgI,MACnB,EAACoW,EAAC,EAAEC,GAAKmxE,GACT,MAACxxE,EAAK,OAAEC,GAAU+uH,GAClB,QAAC9iD,EAAO,SAAEG,EAAQ,WAAEF,EAAU,YAAEC,GAAeQ,GAAcp1E,EAAQgxE,cAC3EtD,EAAI4F,UAAYtzE,EAAQ+sE,gBACxBW,EAAIgG,YAAc1zE,EAAQgtE,YAC1BU,EAAIiG,UAAY3zE,EAAQ+xE,YACxBrE,EAAI6D,YACJ7D,EAAIiE,OAAO/oE,EAAI8rE,EAAS7rE,GACT,QAAX6pH,GACFlgI,KAAKmjI,UAAU37C,EAAItM,EAAK8pD,EAAax3H,GAEvC0tE,EAAIkE,OAAOhpE,EAAIJ,EAAQqsE,EAAUhsE,GACjC6kE,EAAI+pD,iBAAiB7uH,EAAIJ,EAAOK,EAAGD,EAAIJ,EAAOK,EAAIgsE,GACnC,WAAX69C,GAAkC,UAAXE,GACzBpgI,KAAKmjI,UAAU37C,EAAItM,EAAK8pD,EAAax3H,GAEvC0tE,EAAIkE,OAAOhpE,EAAIJ,EAAOK,EAAIJ,EAASmsE,GACnClH,EAAI+pD,iBAAiB7uH,EAAIJ,EAAOK,EAAIJ,EAAQG,EAAIJ,EAAQosE,EAAa/rE,EAAIJ,GAC1D,WAAXiqH,GACFlgI,KAAKmjI,UAAU37C,EAAItM,EAAK8pD,EAAax3H,GAEvC0tE,EAAIkE,OAAOhpE,EAAI+rE,EAAY9rE,EAAIJ,GAC/BilE,EAAI+pD,iBAAiB7uH,EAAGC,EAAIJ,EAAQG,EAAGC,EAAIJ,EAASksE,GACrC,WAAX+9C,GAAkC,SAAXE,GACzBpgI,KAAKmjI,UAAU37C,EAAItM,EAAK8pD,EAAax3H,GAEvC0tE,EAAIkE,OAAOhpE,EAAGC,EAAI6rE,GAClBhH,EAAI+pD,iBAAiB7uH,EAAGC,EAAGD,EAAI8rE,EAAS7rE,GACxC6kE,EAAIgE,YACJhE,EAAIoE,OACA9xE,EAAQ+xE,YAAc,GACxBrE,EAAIsE,QAER,CACA0lD,uBAAuB13H,GACrB,MAAMktE,EAAQ16E,KAAK06E,MACb4U,EAAQtvF,KAAK8yF,YACbqyC,EAAQ71C,GAASA,EAAMl5E,EACvBgvH,EAAQ91C,GAASA,EAAMj5E,EAC7B,GAAI8uH,GAASC,EAAO,CAClB,MAAMrzH,EAAWssH,GAAY7wH,EAAQuE,UAAUjN,KAAK9E,KAAMA,KAAKgwF,QAAShwF,KAAKmhI,gBAC7E,IAAKpvH,EACH,OAEF,MAAMksC,EAAOj+C,KAAKohI,MAAQtC,GAAe9+H,KAAMwN,GACzCw1H,EAAkBp4H,OAAOiS,OAAO,CAAC,EAAG9K,EAAU/R,KAAKohI,OACnDR,EAAYH,GAAmB/lD,EAAOltE,EAASw1H,GAC/CtjD,EAAQihD,GAAmBnzH,EAASw1H,EAAiBpC,EAAWlmD,GAClEyqD,EAAM3zC,MAAQ9R,EAAMtpE,GAAKgvH,EAAM5zC,MAAQ9R,EAAMrpE,IAC/CrW,KAAKogI,OAASQ,EAAUR,OACxBpgI,KAAKkgI,OAASU,EAAUV,OACxBlgI,KAAKgW,MAAQioC,EAAKjoC,MAClBhW,KAAKiW,OAASgoC,EAAKhoC,OACnBjW,KAAKwhI,OAASzvH,EAASqE,EACvBpW,KAAKyhI,OAAS1vH,EAASsE,EACvBrW,KAAKs7F,qBAAqBn9E,OAAOne,KAAM0/E,GAE3C,CACF,CACA2lD,cACE,QAASrlI,KAAKsvC,OAChB,CACAygD,KAAK7U,GACH,MAAM1tE,EAAUxN,KAAKwN,QAAQ23E,WAAWnlF,KAAKi+E,cAC7C,IAAI3uC,EAAUtvC,KAAKsvC,QACnB,IAAKA,EACH,OAEFtvC,KAAKklI,uBAAuB13H,GAC5B,MAAMw3H,EAAc,CAClBhvH,MAAOhW,KAAKgW,MACZC,OAAQjW,KAAKiW,QAETuxE,EAAK,CACTpxE,EAAGpW,KAAKoW,EACRC,EAAGrW,KAAKqW,GAEVi5B,EAAUjtC,KAAK+V,IAAIk3B,GAAW,KAAO,EAAIA,EACzC,MAAM9rB,EAAUq/D,GAAUr1E,EAAQgW,SAC5B8hH,EAAoBtlI,KAAKwiG,MAAMp/F,QAAUpD,KAAKu/H,WAAWn8H,QAAUpD,KAAK4Y,KAAKxV,QAAUpD,KAAKw/H,UAAUp8H,QAAUpD,KAAK++H,OAAO37H,OAC9HoK,EAAQvN,SAAWqlI,IACrBpqD,EAAImC,OACJnC,EAAIqqD,YAAcj2F,EAClBtvC,KAAK61G,eAAeruB,EAAItM,EAAK8pD,EAAax3H,GAC1C2/E,GAAsBjS,EAAK1tE,EAAQ8uH,eACnC90C,EAAGnxE,GAAKmN,EAAQtN,IAChBlW,KAAKq2G,UAAU7uB,EAAItM,EAAK1tE,GACxBxN,KAAKqkI,SAAS78C,EAAItM,EAAK1tE,GACvBxN,KAAK6kI,WAAWr9C,EAAItM,EAAK1tE,GACzBggF,GAAqBtS,EAAK1tE,EAAQ8uH,eAClCphD,EAAIuC,UAER,CACA6tC,oBACE,OAAOtrH,KAAKgwF,SAAW,EACzB,CACAu7B,kBAAkBC,EAAgB+S,GAChC,MAAM9S,EAAazrH,KAAKgwF,QAClBjiF,EAASy9G,EAAexjH,KAAI,EAAEs4D,eAAc9hD,YAChD,MAAM65B,EAAOr4C,KAAK06E,MAAMgd,eAAep3B,GACvC,IAAKjoB,EACH,MAAM,IAAIzS,MAAM,kCAAoC06B,GAEtD,MAAO,CACLA,eACA52D,QAAS2uC,EAAKx0C,KAAK2a,GACnBA,QACD,IAEGmpD,GAAW3H,GAAeyrD,EAAY19G,GACtCy3H,EAAkBxlI,KAAKylI,iBAAiB13H,EAAQwwH,IAClD52D,GAAW69D,KACbxlI,KAAKgwF,QAAUjiF,EACf/N,KAAKmhI,eAAiB5C,EACtBv+H,KAAK0lI,qBAAsB,EAC3B1lI,KAAKme,QAAO,GAEhB,CACA2pC,YAAYtI,EAAGksE,EAAQI,GAAc,GACnC,GAAIJ,GAAU1rH,KAAK0lI,oBACjB,OAAO,EAET1lI,KAAK0lI,qBAAsB,EAC3B,MAAMl4H,EAAUxN,KAAKwN,QACfi+G,EAAazrH,KAAKgwF,SAAW,GAC7BjiF,EAAS/N,KAAKisH,mBAAmBzsE,EAAGisE,EAAYC,EAAQI,GACxD0Z,EAAkBxlI,KAAKylI,iBAAiB13H,EAAQyxC,GAChDmoB,EAAU+jD,IAAW1rD,GAAejyD,EAAQ09G,IAAe+Z,EAWjE,OAVI79D,IACF3nE,KAAKgwF,QAAUjiF,GACXP,EAAQvN,SAAWuN,EAAQ01H,YAC7BljI,KAAKmhI,eAAiB,CACpB/qH,EAAGopC,EAAEppC,EACLC,EAAGmpC,EAAEnpC,GAEPrW,KAAKme,QAAO,EAAMutG,KAGf/jD,CACT,CACAskD,mBAAmBzsE,EAAGisE,EAAYC,EAAQI,GACxC,MAAMt+G,EAAUxN,KAAKwN,QACrB,GAAe,aAAXgyC,EAAE55C,KACJ,MAAO,GAET,IAAKkmH,EACH,OAAOL,EAET,MAAM19G,EAAS/N,KAAK06E,MAAMgwC,0BAA0BlrE,EAAGhyC,EAAQwzC,KAAMxzC,EAASk+G,GAI9E,OAHIl+G,EAAQmmD,SACV5lD,EAAO4lD,UAEF5lD,CACT,CACA03H,iBAAiB13H,EAAQyxC,GACvB,MAAM,OAACgiF,EAAM,OAAEC,EAAM,QAAEj0H,GAAWxN,KAC5B+R,EAAWssH,GAAY7wH,EAAQuE,UAAUjN,KAAK9E,KAAM+N,EAAQyxC,GAClE,OAAoB,IAAbztC,IAAuByvH,IAAWzvH,EAASqE,GAAKqrH,IAAW1vH,EAASsE,EAC7E,EAEFod,GAAQ4qG,YAAcA,GACtB,IAAIsH,GAAiB,CACnB33H,GAAI,UACJy1B,SAAUhQ,GACV4qG,eACAuH,UAAUlrD,EAAOk/C,EAAOpsH,GAClBA,IACFktE,EAAM6nB,QAAU,IAAI9uE,GAAQ,CAACinD,QAAOltE,YAExC,EACAkgG,aAAahzB,EAAOk/C,EAAOpsH,GACrBktE,EAAM6nB,SACR7nB,EAAM6nB,QAAQpvC,WAAW3lD,EAE7B,EACA+Q,MAAMm8D,EAAOk/C,EAAOpsH,GACdktE,EAAM6nB,SACR7nB,EAAM6nB,QAAQpvC,WAAW3lD,EAE7B,EACAq4H,UAAUnrD,GACR,MAAM6nB,EAAU7nB,EAAM6nB,QACtB,GAAIA,GAAWA,EAAQ8iC,cAAe,CACpC,MAAMz8H,EAAO,CACX25F,WAEF,IAAuD,IAAnD7nB,EAAMi2B,cAAc,oBAAqB/nG,GAC3C,OAEF25F,EAAQxS,KAAKrV,EAAMQ,KACnBR,EAAMi2B,cAAc,mBAAoB/nG,EAC1C,CACF,EACA80H,WAAWhjD,EAAO9xE,GAChB,GAAI8xE,EAAM6nB,QAAS,CACjB,MAAMgG,EAAmB3/F,EAAK8iH,OAC1BhxC,EAAM6nB,QAAQz6C,YAAYl/C,EAAKpD,MAAO+iG,EAAkB3/F,EAAKkjH,eAC/DljH,EAAK++D,SAAU,EAEnB,CACF,EACAyS,SAAU,CACRn6E,SAAS,EACTijI,SAAU,KACVnxH,SAAU,UACVwoE,gBAAiB,kBACjBopD,WAAY,OACZ7G,UAAW,CACTlkD,OAAQ,QAEV6mD,aAAc,EACdC,kBAAmB,EACnBh0B,WAAY,OACZk5B,UAAW,OACXhF,YAAa,EACbZ,SAAU,CACV,EACAsF,UAAW,OACXS,YAAa,OACbjF,cAAe,EACfD,gBAAiB,EACjBZ,WAAY,CACVrmD,OAAQ,QAEVksD,YAAa,OACbthH,QAAS,EACT+8G,aAAc,EACdD,UAAW,EACX9hD,aAAc,EACd47C,UAAW,CAACl/C,EAAKwF,IAASA,EAAKs+C,SAAS/gF,KACxCo8E,SAAU,CAACn/C,EAAKwF,IAASA,EAAKs+C,SAAS/gF,KACvCgmF,mBAAoB,OACpBtE,eAAe,EACf1jB,WAAY,EACZzhC,YAAa,gBACb+E,YAAa,EACbjF,UAAW,CACTlmE,SAAU,IACV+8E,OAAQ,gBAEViB,WAAY,CACVD,QAAS,CACPvsF,KAAM,SACNiB,WAAY,CAAC,IAAK,IAAK,QAAS,SAAU,SAAU,WAEtDyoC,QAAS,CACP6hD,OAAQ,SACR/8E,SAAU,MAGdo7E,UAAW,CACTuyC,YAAa9iE,GACbujC,MAAMq/B,GACJ,GAAIA,EAAaz+H,OAAS,EAAG,CAC3B,MAAM0K,EAAO+zH,EAAa,GACpB5oC,EAASnrF,EAAK4sE,MAAM72E,KAAKo1F,OACzB6sC,EAAa7sC,EAASA,EAAO71F,OAAS,EAC5C,GAAIpD,MAAQA,KAAKwN,SAAiC,YAAtBxN,KAAKwN,QAAQwzC,KACvC,OAAOlzC,EAAKw5C,QAAQ+yC,OAAS,GACxB,GAAIvsF,EAAKusF,MACd,OAAOvsF,EAAKusF,MACP,GAAIyrC,EAAa,GAAKh4H,EAAK+sF,UAAYirC,EAC5C,OAAO7sC,EAAOnrF,EAAK+sF,UAEvB,CACA,MAAO,EACT,EACAmnC,WAAY/iE,GACZsgE,WAAYtgE,GACZojE,YAAapjE,GACbo7B,MAAM4L,GACJ,GAAIjmG,MAAQA,KAAKwN,SAAiC,YAAtBxN,KAAKwN,QAAQwzC,KACvC,OAAOilD,EAAY5L,MAAQ,KAAO4L,EAAYE,gBAAkBF,EAAYE,eAE9E,IAAI9L,EAAQ4L,EAAY3+C,QAAQ+yC,OAAS,GACrCA,IACFA,GAAS,MAEX,MAAMtzF,EAAQk/F,EAAYE,eAI1B,OAHK/mC,GAAcr4D,KACjBszF,GAAStzF,GAEJszF,CACT,EACAwoC,WAAW58B,GACT,MACMz4F,EADOy4F,EAAYvrB,MAAMgd,eAAeuO,EAAY3lC,cACrCnW,WAAWwhC,SAASsa,EAAYpL,WACrD,MAAO,CACLrgB,YAAahtE,EAAQgtE,YACrBD,gBAAiB/sE,EAAQ+sE,gBACzBgF,YAAa/xE,EAAQ+xE,YACrBqP,WAAYphF,EAAQohF,WACpBC,iBAAkBrhF,EAAQqhF,iBAC1By+B,aAAc,EAElB,EACAyV,iBACE,OAAO/iI,KAAKwN,QAAQo3H,SACtB,EACA9B,gBAAgB78B,GACd,MACMz4F,EADOy4F,EAAYvrB,MAAMgd,eAAeuO,EAAY3lC,cACrCnW,WAAWwhC,SAASsa,EAAYpL,WACrD,MAAO,CACLpc,WAAYjxE,EAAQixE,WACpBC,SAAUlxE,EAAQkxE,SAEtB,EACA4jD,WAAYrjE,GACZugE,UAAWvgE,GACXwjE,aAAcxjE,GACd8/D,OAAQ9/D,GACRyjE,YAAazjE,KAGjBypC,cAAe,CACbs2B,SAAU,OACVC,WAAY,OACZnC,UAAW,QAEb3qE,YAAa,CACXuqB,YAAcjzE,GAAkB,WAATA,GAA8B,aAATA,GAAgC,aAATA,EACnEkzE,YAAY,EACZ6S,UAAW,CACT9S,aAAa,EACbC,YAAY,GAEdrC,UAAW,CACTsC,WAAW,GAEbwV,WAAY,CACVxV,UAAW,cAGfqoC,uBAAwB,CAAC,gBAGvBrpC,GAAuBhxE,OAAOm4C,OAAO,CACzCC,UAAW,KACX+iF,WAAYvR,GACZwR,OAAQxnH,GACRi8G,OAAQgD,GACRwI,SAAU7H,GACVR,MAAOK,GACPxqG,QAASkyG,KAqBT,MAAMO,WAAsBt6B,GAC1BlrG,YAAYqwF,GACVh5D,MAAMg5D,GACN/wF,KAAKmmI,iBAAct9H,EACnB7I,KAAKomI,YAAc,EACnBpmI,KAAKqmI,aAAe,EACtB,CACAp5B,KAAKuW,GACH,MAAM8iB,EAAQtmI,KAAKqmI,aACnB,GAAIC,EAAMljI,OAAQ,CAChB,MAAM61F,EAASj5F,KAAKk5F,YACpB,IAAK,MAAM,MAAC16E,EAAK,MAAE67E,KAAUisC,EACvBrtC,EAAOz6E,KAAW67E,GACpBpB,EAAO16C,OAAO//B,EAAO,GAGzBxe,KAAKqmI,aAAe,EACtB,CACAtuG,MAAMk1E,KAAKuW,EACb,CACA39G,MAAMi1F,EAAKt8E,GACT,GAAI4gD,GAAc07B,GAChB,OAAO,KAET,MAAM7B,EAASj5F,KAAKk5F,YAGpB,MA5Be,EAAC16E,EAAOlJ,IAAkB,OAAVkJ,EAAiB,KAAOqmD,GAAYxiE,KAAKmT,MAAMgJ,GAAQ,EAAGlJ,GA4BlFg2F,CAFP9sF,EAAQ+gD,SAAS/gD,IAAUy6E,EAAOz6E,KAAWs8E,EAAMt8E,EAlCvD,SAAwBy6E,EAAQ6B,EAAKt8E,EAAO+nH,GAC1C,MAAM92B,EAAQxW,EAAO51F,QAAQy3F,GAC7B,OAAe,IAAX2U,EAXc,EAACxW,EAAQ6B,EAAKt8E,EAAO+nH,KACpB,iBAARzrC,GACTt8E,EAAQy6E,EAAO/4F,KAAK46F,GAAO,EAC3ByrC,EAAY/nF,QAAQ,CAAChgC,QAAO67E,MAAOS,KAC1B93B,MAAM83B,KACft8E,EAAQ,MAEHA,GAKEgoH,CAAYvtC,EAAQ6B,EAAKt8E,EAAO+nH,GAGlC92B,IADMxW,EAAOwtC,YAAY3rC,GACRt8E,EAAQixF,CAClC,CA4BQi3B,CAAeztC,EAAQ6B,EAAKr7B,GAAejhD,EAAOs8E,GAAM96F,KAAKqmI,cACxCptC,EAAO71F,OAAS,EAC3C,CACA8qG,sBACE,MAAM,WAACpnC,EAAU,WAAEC,GAAc/mE,KAAKgnE,gBACtC,IAAI,IAACzkE,EAAG,IAAE+S,GAAOtV,KAAK25F,WAAU,GACJ,UAAxB35F,KAAKwN,QAAQwgF,SACVlnB,IACHvkE,EAAM,GAEHwkE,IACHzxD,EAAMtV,KAAKk5F,YAAY91F,OAAS,IAGpCpD,KAAKuC,IAAMA,EACXvC,KAAKsV,IAAMA,CACb,CACAm5F,aACE,MAAMlsG,EAAMvC,KAAKuC,IACX+S,EAAMtV,KAAKsV,IACXmP,EAASzkB,KAAKwN,QAAQiX,OACtBs5E,EAAQ,GACd,IAAI9E,EAASj5F,KAAKk5F,YAClBD,EAAkB,IAAR12F,GAAa+S,IAAQ2jF,EAAO71F,OAAS,EAAK61F,EAASA,EAAO91F,MAAMZ,EAAK+S,EAAM,GACrFtV,KAAKomI,YAAc/jI,KAAKiT,IAAI2jF,EAAO71F,QAAUqhB,EAAS,EAAI,GAAI,GAC9DzkB,KAAKmmI,YAAcnmI,KAAKuC,KAAOkiB,EAAS,GAAM,GAC9C,IAAK,IAAI1d,EAAQxE,EAAKwE,GAASuO,EAAKvO,IAClCg3F,EAAM79F,KAAK,CAAC6G,UAEd,OAAOg3F,CACT,CACAzD,iBAAiBvzF,GACf,MAAMkyF,EAASj5F,KAAKk5F,YACpB,OAAInyF,GAAS,GAAKA,EAAQkyF,EAAO71F,OACxB61F,EAAOlyF,GAETA,CACT,CACA0rF,YACE16D,MAAM06D,YACDzyF,KAAK4/F,iBACR5/F,KAAKysG,gBAAkBzsG,KAAKysG,eAEhC,CACAxlC,iBAAiBlgE,GAIf,MAHqB,iBAAVA,IACTA,EAAQ/G,KAAK6F,MAAMkB,IAEJ,OAAVA,EAAiB2yF,IAAM15F,KAAKshG,oBAAoBv6F,EAAQ/G,KAAKmmI,aAAenmI,KAAKomI,YAC1F,CACApoC,gBAAgBx/E,GACd,MAAMu/E,EAAQ/9F,KAAK+9F,MACnB,OAAIv/E,EAAQ,GAAKA,EAAQu/E,EAAM36F,OAAS,EAC/B,KAEFpD,KAAKinE,iBAAiB82B,EAAMv/E,GAAOzX,MAC5C,CACAosG,iBAAiBv1B,GACf,OAAOv7E,KAAKmT,MAAMxV,KAAKmmI,YAAcnmI,KAAKqzG,mBAAmBz1B,GAAS59E,KAAKomI,YAC7E,CACAzmC,eACE,OAAO3/F,KAAKmW,MACd,EA6FF,SAASwwH,GAAkB5/H,EAAO6/H,GAAY,WAAC9nC,EAAU,YAAEoL,IACzD,MAAMtrB,EAAMzb,GAAU+mC,GAChBrzB,GAASioB,EAAaz8F,KAAKylE,IAAI8W,GAAOv8E,KAAK0mE,IAAI6V,KAAS,KACxDx7E,EAAS,IAAOwjI,GAAc,GAAK7/H,GAAO3D,OAChD,OAAOf,KAAKE,IAAIqkI,EAAa/vD,EAAOzzE,EACtC,CAhGA8iI,GAAcl4H,GAAK,WACnBk4H,GAAc9rD,SAAW,CACvB2jB,MAAO,CACL1yD,SAAU66F,GAAc5gI,UAAUg1F,mBA8FtC,MAAMusC,WAAwBj7B,GAC5BlrG,YAAYqwF,GACVh5D,MAAMg5D,GACN/wF,KAAKe,WAAQ8H,EACb7I,KAAKoa,SAAMvR,EACX7I,KAAKmmI,iBAAct9H,EACnB7I,KAAK8mI,eAAYj+H,EACjB7I,KAAKomI,YAAc,CACrB,CACAvgI,MAAMi1F,EAAKt8E,GACT,OAAI4gD,GAAc07B,KAGE,iBAARA,GAAoBA,aAAetgC,UAAY+E,UAAUu7B,GAF5D,MAKDA,CACV,CACAisC,yBACE,MAAM,YAAC1kC,GAAeriG,KAAKwN,SACrB,WAACs5D,EAAU,WAAEC,GAAc/mE,KAAKgnE,gBACtC,IAAI,IAACzkE,EAAG,IAAE+S,GAAOtV,KACjB,MAAMgnI,EAASj8G,GAAMxoB,EAAMukE,EAAavkE,EAAMwoB,EACxCk8G,EAASl8G,GAAMzV,EAAMyxD,EAAazxD,EAAMyV,EAC9C,GAAIs3E,EAAa,CACf,MAAM6kC,EAAU1kE,GAAKjgE,GACf4kI,EAAU3kE,GAAKltD,GACjB4xH,EAAU,GAAKC,EAAU,EAC3BF,EAAO,GACEC,EAAU,GAAKC,EAAU,GAClCH,EAAO,EAEX,CACA,GAAIzkI,IAAQ+S,EAAK,CACf,IAAImP,EAAS,GACTnP,GAAOklD,OAAO4sE,kBAAoB7kI,GAAOi4D,OAAO6sE,oBAClD5iH,EAASpiB,KAAK+V,IAAU,IAAN9C,IAEpB2xH,EAAO3xH,EAAMmP,GACR49E,GACH2kC,EAAOzkI,EAAMkiB,EAEjB,CACAzkB,KAAKuC,IAAMA,EACXvC,KAAKsV,IAAMA,CACb,CACAgyH,eACE,MAAM15B,EAAW5tG,KAAKwN,QAAQuwF,MAC9B,IACIwpC,GADA,cAACt4B,EAAa,SAAEu4B,GAAY55B,EAehC,OAbI45B,GACFD,EAAWllI,KAAKqnG,KAAK1pG,KAAKsV,IAAMkyH,GAAYnlI,KAAK67B,MAAMl+B,KAAKuC,IAAMilI,GAAY,EAC1ED,EAAW,MACb3nI,QAAQqjD,KAAK,UAAUjjD,KAAKgO,sBAAsBw5H,mCAA0CD,8BAC5FA,EAAW,OAGbA,EAAWvnI,KAAKynI,mBAChBx4B,EAAgBA,GAAiB,IAE/BA,IACFs4B,EAAWllI,KAAKE,IAAI0sG,EAAes4B,IAE9BA,CACT,CACAE,mBACE,OAAOjtE,OAAO0H,iBAChB,CACAusC,aACE,MAAM/tB,EAAO1gF,KAAKwN,QACZogG,EAAWltB,EAAKqd,MACtB,IAAIwpC,EAAWvnI,KAAKsnI,eACpBC,EAAWllI,KAAKiT,IAAI,EAAGiyH,GACvB,MAcMxpC,EAjLV,SAAyB2pC,EAAmBC,GAC1C,MAAM5pC,EAAQ,IAER,OAAC/P,EAAM,KAAE6mB,EAAI,IAAEtyG,EAAG,IAAE+S,EAAG,UAAEsyH,EAAS,MAAElhE,EAAK,SAAE6gE,EAAQ,UAAEM,EAAS,cAAEC,GAAiBJ,EACjF/tB,EAAO9E,GAAQ,EACfkzB,EAAYR,EAAW,GACtBhlI,IAAKylI,EAAM1yH,IAAK2yH,GAAQN,EACzB7gE,GAAc1H,GAAc78D,GAC5BwkE,GAAc3H,GAAc9pD,GAC5B4yH,GAAgB9oE,GAAcsH,GAC9BkgE,GAAcqB,EAAOD,IAASH,EAAY,GAChD,IACIj3C,EAAQu3C,EAASC,EAASC,EAD1BllC,EAAU1gC,IAASwlE,EAAOD,GAAQD,EAAYpuB,GAAQA,EAE1D,GAAIxW,EAXgB,QAWUr8B,IAAeC,EAC3C,MAAO,CAAC,CAAChgE,MAAOihI,GAAO,CAACjhI,MAAOkhI,IAEjCI,EAAYhmI,KAAKqnG,KAAKu+B,EAAO9kC,GAAW9gG,KAAK67B,MAAM8pG,EAAO7kC,GACtDklC,EAAYN,IACd5kC,EAAU1gC,GAAQ4lE,EAAYllC,EAAU4kC,EAAYpuB,GAAQA,GAEzDv6C,GAAcwoE,KACjBh3C,EAASvuF,KAAKC,IAAI,GAAIslI,GACtBzkC,EAAU9gG,KAAKqnG,KAAKvG,EAAUvS,GAAUA,GAE3B,UAAX5C,GACFm6C,EAAU9lI,KAAK67B,MAAM8pG,EAAO7kC,GAAWA,EACvCilC,EAAU/lI,KAAKqnG,KAAKu+B,EAAO9kC,GAAWA,IAEtCglC,EAAUH,EACVI,EAAUH,GAERnhE,GAAcC,GAAc8tC,GD/gSlC,SAAqBz+F,EAAG6sD,GACtB,MAAMqlE,EAAUjmI,KAAKmT,MAAMY,GAC3B,OAASkyH,EAAUrlE,GAAY7sD,GAAQkyH,EAAUrlE,GAAY7sD,CAC/D,CC4gS0CmyH,EAAajzH,EAAM/S,GAAOsyG,EAAM1R,EAAU,MAChFklC,EAAYhmI,KAAKmT,MAAMnT,KAAKE,KAAK+S,EAAM/S,GAAO4gG,EAASokC,IACvDpkC,GAAW7tF,EAAM/S,GAAO8lI,EACxBF,EAAU5lI,EACV6lI,EAAU9yH,GACD4yH,GACTC,EAAUrhE,EAAavkE,EAAM4lI,EAC7BC,EAAUrhE,EAAazxD,EAAM8yH,EAC7BC,EAAY3hE,EAAQ,EACpBy8B,GAAWilC,EAAUD,GAAWE,IAEhCA,GAAaD,EAAUD,GAAWhlC,EAEhCklC,EADEzlE,GAAaylE,EAAWhmI,KAAKmT,MAAM6yH,GAAYllC,EAAU,KAC/C9gG,KAAKmT,MAAM6yH,GAEXhmI,KAAKqnG,KAAK2+B,IAG1B,MAAMG,EAAgBnmI,KAAKiT,IACzBiuD,GAAe4/B,GACf5/B,GAAe4kE,IAEjBv3C,EAASvuF,KAAKC,IAAI,GAAI88D,GAAcwoE,GAAaY,EAAgBZ,GACjEO,EAAU9lI,KAAKmT,MAAM2yH,EAAUv3C,GAAUA,EACzCw3C,EAAU/lI,KAAKmT,MAAM4yH,EAAUx3C,GAAUA,EACzC,IAAI/Y,EAAI,EAcR,IAbI/Q,IACEghE,GAAiBK,IAAY5lI,GAC/Bw7F,EAAM79F,KAAK,CAAC6G,MAAOxE,IACf4lI,EAAU5lI,GACZs1E,IAEEjV,GAAavgE,KAAKmT,OAAO2yH,EAAUtwD,EAAIsrB,GAAWvS,GAAUA,EAAQruF,EAAKokI,GAAkBpkI,EAAKqkI,EAAYc,KAC9G7vD,KAEOswD,EAAU5lI,GACnBs1E,KAGGA,EAAIwwD,IAAaxwD,EACtBkmB,EAAM79F,KAAK,CAAC6G,MAAO1E,KAAKmT,OAAO2yH,EAAUtwD,EAAIsrB,GAAWvS,GAAUA,IAWpE,OATI7pB,GAAc+gE,GAAiBM,IAAY9yH,EACzCyoF,EAAM36F,QAAUw/D,GAAam7B,EAAMA,EAAM36F,OAAS,GAAG2D,MAAOuO,EAAKqxH,GAAkBrxH,EAAKsxH,EAAYc,IACtG3pC,EAAMA,EAAM36F,OAAS,GAAG2D,MAAQuO,EAEhCyoF,EAAM79F,KAAK,CAAC6G,MAAOuO,IAEXyxD,GAAcqhE,IAAY9yH,GACpCyoF,EAAM79F,KAAK,CAAC6G,MAAOqhI,IAEdrqC,CACT,CA8FkB0qC,CAdkB,CAC9BlB,WACAv5C,OAAQtN,EAAKsN,OACbzrF,IAAKm+E,EAAKn+E,IACV+S,IAAKorE,EAAKprE,IACVsyH,UAAWh6B,EAASg6B,UACpB/yB,KAAMjH,EAAS45B,SACf9gE,MAAOknC,EAASlnC,MAChBmhE,UAAW7nI,KAAK+2G,aAChBjY,WAAY9+F,KAAK4/F,eACjBsK,YAAa0D,EAAS1D,aAAe,EACrC49B,eAA0C,IAA3Bl6B,EAASk6B,eAER9nI,KAAKmsG,QAAUnsG,MAajC,MAXoB,UAAhB0gF,EAAKsN,QACP9qB,GAAmB66B,EAAO/9F,KAAM,SAE9B0gF,EAAK/sB,SACPoqC,EAAMpqC,UACN3zD,KAAKe,MAAQf,KAAKsV,IAClBtV,KAAKoa,IAAMpa,KAAKuC,MAEhBvC,KAAKe,MAAQf,KAAKuC,IAClBvC,KAAKoa,IAAMpa,KAAKsV,KAEXyoF,CACT,CACAtL,YACE,MAAMsL,EAAQ/9F,KAAK+9F,MACnB,IAAIh9F,EAAQf,KAAKuC,IACb6X,EAAMpa,KAAKsV,IAEf,GADAyiB,MAAM06D,YACFzyF,KAAKwN,QAAQiX,QAAUs5E,EAAM36F,OAAQ,CACvC,MAAMqhB,GAAUrK,EAAMrZ,GAASsB,KAAKiT,IAAIyoF,EAAM36F,OAAS,EAAG,GAAK,EAC/DrC,GAAS0jB,EACTrK,GAAOqK,CACT,CACAzkB,KAAKmmI,YAAcplI,EACnBf,KAAK8mI,UAAY1sH,EACjBpa,KAAKomI,YAAchsH,EAAMrZ,CAC3B,CACAu5F,iBAAiBvzF,GACf,OAAOmlF,GAAanlF,EAAO/G,KAAK06E,MAAMltE,QAAQ4+E,OAAQpsF,KAAKwN,QAAQuwF,MAAMtR,OAC3E,EAGF,MAAMi8C,WAAoB7B,GACxB34B,sBACE,MAAM,IAAC3rG,EAAG,IAAE+S,GAAOtV,KAAK25F,WAAU,GAClC35F,KAAKuC,IAAM+8D,GAAe/8D,GAAOA,EAAM,EACvCvC,KAAKsV,IAAMgqD,GAAehqD,GAAOA,EAAM,EACvCtV,KAAK+mI,wBACP,CACAU,mBACE,MAAM3oC,EAAa9+F,KAAK4/F,eAClBx8F,EAAS07F,EAAa9+F,KAAKgW,MAAQhW,KAAKiW,OACxCi0F,EAAc/mC,GAAUnjE,KAAKwN,QAAQuwF,MAAMmM,aAC3CrzB,GAASioB,EAAaz8F,KAAKylE,IAAIoiC,GAAe7nG,KAAK0mE,IAAImhC,KAAiB,KACxEyI,EAAW3yG,KAAKgzG,wBAAwB,GAC9C,OAAO3wG,KAAKqnG,KAAKtmG,EAASf,KAAKE,IAAI,GAAIowG,EAAS53B,WAAalE,GAC/D,CACA5P,iBAAiBlgE,GACf,OAAiB,OAAVA,EAAiB2yF,IAAM15F,KAAKshG,oBAAoBv6F,EAAQ/G,KAAKmmI,aAAenmI,KAAKomI,YAC1F,CACAjzB,iBAAiBv1B,GACf,OAAO59E,KAAKmmI,YAAcnmI,KAAKqzG,mBAAmBz1B,GAAS59E,KAAKomI,WAClE,EASF,SAASuC,GAAQC,GAEf,OAAkB,GADHA,EAAWvmI,KAAKC,IAAI,GAAID,KAAK67B,MAAMqkC,GAAMqmE,IAE1D,CAVAF,GAAY16H,GAAK,SACjB06H,GAAYtuD,SAAW,CACrB2jB,MAAO,CACL1yD,SAAUi+D,GAAMX,WAAWC,UA8B/B,MAAMigC,WAAyBj9B,GAC7BlrG,YAAYqwF,GACVh5D,MAAMg5D,GACN/wF,KAAKe,WAAQ8H,EACb7I,KAAKoa,SAAMvR,EACX7I,KAAKmmI,iBAAct9H,EACnB7I,KAAKomI,YAAc,CACrB,CACAvgI,MAAMi1F,EAAKt8E,GACT,MAAMzX,EAAQ8/H,GAAgBvhI,UAAUO,MAAM+F,MAAM5L,KAAM,CAAC86F,EAAKt8E,IAChE,GAAc,IAAVzX,EAIJ,OAAOu4D,GAAev4D,IAAUA,EAAQ,EAAIA,EAAQ,KAHlD/G,KAAK8oI,OAAQ,CAIjB,CACA56B,sBACE,MAAM,IAAC3rG,EAAG,IAAE+S,GAAOtV,KAAK25F,WAAU,GAClC35F,KAAKuC,IAAM+8D,GAAe/8D,GAAOF,KAAKiT,IAAI,EAAG/S,GAAO,KACpDvC,KAAKsV,IAAMgqD,GAAehqD,GAAOjT,KAAKiT,IAAI,EAAGA,GAAO,KAChDtV,KAAKwN,QAAQ60F,cACfriG,KAAK8oI,OAAQ,GAEf9oI,KAAK+mI,wBACP,CACAA,yBACE,MAAM,WAACjgE,EAAU,WAAEC,GAAc/mE,KAAKgnE,gBACtC,IAAIzkE,EAAMvC,KAAKuC,IACX+S,EAAMtV,KAAKsV,IACf,MAAM0xH,EAASj8G,GAAMxoB,EAAMukE,EAAavkE,EAAMwoB,EACxCk8G,EAASl8G,GAAMzV,EAAMyxD,EAAazxD,EAAMyV,EACxCg+G,EAAM,CAACh+G,EAAGjN,IAAMzb,KAAKC,IAAI,GAAID,KAAK67B,MAAMqkC,GAAMx3C,IAAMjN,GACtDvb,IAAQ+S,IACN/S,GAAO,GACTykI,EAAO,GACPC,EAAO,MAEPD,EAAO+B,EAAIxmI,GAAM,IACjB0kI,EAAO8B,EAAIzzH,EAAK,MAGhB/S,GAAO,GACTykI,EAAO+B,EAAIzzH,GAAM,IAEfA,GAAO,GACT2xH,EAAO8B,EAAIxmI,EAAK,IAEdvC,KAAK8oI,OAAS9oI,KAAKuC,MAAQvC,KAAK6sG,eAAiBtqG,IAAQwmI,EAAI/oI,KAAKuC,IAAK,IACzEykI,EAAO+B,EAAIxmI,GAAM,IAEnBvC,KAAKuC,IAAMA,EACXvC,KAAKsV,IAAMA,CACb,CACAm5F,aACE,MAAM/tB,EAAO1gF,KAAKwN,QAKZuwF,EAjFV,SAAuB2pC,EAAmBC,GACxC,MAAMqB,EAAS3mI,KAAK67B,MAAMqkC,GAAMolE,EAAUryH,MACpC2zH,EAAiB5mI,KAAKqnG,KAAKi+B,EAAUryH,IAAMjT,KAAKC,IAAI,GAAI0mI,IACxDjrC,EAAQ,GACd,IAAI6qC,EAAUppE,GAAgBkoE,EAAkBnlI,IAAKF,KAAKC,IAAI,GAAID,KAAK67B,MAAMqkC,GAAMolE,EAAUplI,QACzFwmI,EAAM1mI,KAAK67B,MAAMqkC,GAAMqmE,IACvBM,EAAc7mI,KAAK67B,MAAM0qG,EAAUvmI,KAAKC,IAAI,GAAIymI,IAChDnB,EAAYmB,EAAM,EAAI1mI,KAAKC,IAAI,GAAID,KAAK+V,IAAI2wH,IAAQ,EACxD,GACEhrC,EAAM79F,KAAK,CAAC6G,MAAO6hI,EAASj+B,MAAOg+B,GAAQC,OACzCM,EACkB,KAAhBA,IACFA,EAAc,IACZH,EACFnB,EAAYmB,GAAO,EAAI,EAAInB,GAE7BgB,EAAUvmI,KAAKmT,MAAM0zH,EAAc7mI,KAAKC,IAAI,GAAIymI,GAAOnB,GAAaA,QAC7DmB,EAAMC,GAAWD,IAAQC,GAAUE,EAAcD,GAC1D,MAAME,EAAW3pE,GAAgBkoE,EAAkBpyH,IAAKszH,GAExD,OADA7qC,EAAM79F,KAAK,CAAC6G,MAAOoiI,EAAUx+B,MAAOg+B,GAAQC,KACrC7qC,CACT,CA4DkBqrC,CAJY,CACxB7mI,IAAKvC,KAAK2sG,SACVr3F,IAAKtV,KAAK0sG,UAEmC1sG,MAY/C,MAXoB,UAAhB0gF,EAAKsN,QACP9qB,GAAmB66B,EAAO/9F,KAAM,SAE9B0gF,EAAK/sB,SACPoqC,EAAMpqC,UACN3zD,KAAKe,MAAQf,KAAKsV,IAClBtV,KAAKoa,IAAMpa,KAAKuC,MAEhBvC,KAAKe,MAAQf,KAAKuC,IAClBvC,KAAKoa,IAAMpa,KAAKsV,KAEXyoF,CACT,CACAzD,iBAAiBvzF,GACf,YAAiB8B,IAAV9B,EACH,IACAmlF,GAAanlF,EAAO/G,KAAK06E,MAAMltE,QAAQ4+E,OAAQpsF,KAAKwN,QAAQuwF,MAAMtR,OACxE,CACAgG,YACE,MAAM1xF,EAAQf,KAAKuC,IACnBw1B,MAAM06D,YACNzyF,KAAKmmI,YAAc5jE,GAAMxhE,GACzBf,KAAKomI,YAAc7jE,GAAMviE,KAAKsV,KAAOitD,GAAMxhE,EAC7C,CACAkmE,iBAAiBlgE,GAIf,YAHc8B,IAAV9B,GAAiC,IAAVA,IACzBA,EAAQ/G,KAAKuC,KAED,OAAVwE,GAAkBi8D,MAAMj8D,GACnB2yF,IAEF15F,KAAKshG,mBAAmBv6F,IAAU/G,KAAKuC,IAC1C,GACCggE,GAAMx7D,GAAS/G,KAAKmmI,aAAenmI,KAAKomI,YAC/C,CACAjzB,iBAAiBv1B,GACf,MAAMw1B,EAAUpzG,KAAKqzG,mBAAmBz1B,GACxC,OAAOv7E,KAAKC,IAAI,GAAItC,KAAKmmI,YAAc/yB,EAAUpzG,KAAKomI,YACxD,EAYF,SAASiD,GAAsB3oD,GAC7B,MAAMktB,EAAWltB,EAAKqd,MACtB,GAAI6P,EAAS9F,SAAWpnB,EAAKonB,QAAS,CACpC,MAAMtkF,EAAUq/D,GAAU+qB,EAAS7C,iBACnC,OAAOtrC,GAAemuC,EAAS/yB,MAAQ+yB,EAAS/yB,KAAK58B,KAAMm8B,GAASS,KAAK58B,MAAQz6B,EAAQvN,MAC3F,CACA,OAAO,CACT,CAQA,SAASqzH,GAAgBtlE,EAAO+lB,EAAK9rC,EAAM17C,EAAK+S,GAC9C,OAAI0uD,IAAUzhE,GAAOyhE,IAAU1uD,EACtB,CACLvU,MAAOgpF,EAAO9rC,EAAO,EACrB7jC,IAAK2vE,EAAO9rC,EAAO,GAEZ+lB,EAAQzhE,GAAOyhE,EAAQ1uD,EACzB,CACLvU,MAAOgpF,EAAM9rC,EACb7jC,IAAK2vE,GAGF,CACLhpF,MAAOgpF,EACP3vE,IAAK2vE,EAAM9rC,EAEf,CAmCA,SAASsrF,GAAaC,EAAQtqC,EAAMl7B,EAAOylE,EAASC,GAClD,MAAM5hE,EAAMzlE,KAAK+V,IAAI/V,KAAKylE,IAAI9D,IACxB+E,EAAM1mE,KAAK+V,IAAI/V,KAAK0mE,IAAI/E,IAC9B,IAAI5tD,EAAI,EACJC,EAAI,EACJozH,EAAQ1oI,MAAQm+F,EAAKh1B,GACvB9zD,GAAK8oF,EAAKh1B,EAAIu/D,EAAQ1oI,OAAS+mE,EAC/B0hE,EAAOt/D,EAAI7nE,KAAKE,IAAIinI,EAAOt/D,EAAGg1B,EAAKh1B,EAAI9zD,IAC9BqzH,EAAQrvH,IAAM8kF,EAAKzpE,IAC5Brf,GAAKqzH,EAAQrvH,IAAM8kF,EAAKzpE,GAAKqyC,EAC7B0hE,EAAO/zG,EAAIpzB,KAAKiT,IAAIk0H,EAAO/zG,EAAGypE,EAAKzpE,EAAIrf,IAErCszH,EAAQ3oI,MAAQm+F,EAAK7sE,GACvBhc,GAAK6oF,EAAK7sE,EAAIq3G,EAAQ3oI,OAASgoE,EAC/BygE,EAAOn3G,EAAIhwB,KAAKE,IAAIinI,EAAOn3G,EAAG6sE,EAAK7sE,EAAIhc,IAC9BqzH,EAAQtvH,IAAM8kF,EAAK13E,IAC5BnR,GAAKqzH,EAAQtvH,IAAM8kF,EAAK13E,GAAKuhD,EAC7BygE,EAAOhiH,EAAInlB,KAAKiT,IAAIk0H,EAAOhiH,EAAG03E,EAAK13E,EAAInR,GAE3C,CA2BA,SAASszH,GAAqB3lE,GAC5B,OAAc,IAAVA,GAAyB,MAAVA,EACV,SACEA,EAAQ,IACV,OAEF,OACT,CASA,SAAS4lE,GAAUvzH,EAAG8zD,EAAGnG,GAMvB,OALc,KAAVA,GAA0B,MAAVA,EAClB3tD,GAAM8zD,EAAI,GACDnG,EAAQ,KAAOA,EAAQ,MAChC3tD,GAAK8zD,GAEA9zD,CACT,CA4CA,SAASwzH,GAAe/tD,EAAO6C,EAAQopB,EAAU+9B,GAC/C,MAAM,IAAC5qD,GAAOY,EACd,GAAIisB,EACF7sB,EAAI+D,IAAInD,EAAMurB,QAASvrB,EAAMwrB,QAAS3oB,EAAQ,EAAG5c,QAC5C,CACL,IAAIqmC,EAAgBtsB,EAAMguD,iBAAiB,EAAGnrD,GAC9CzD,EAAIiE,OAAOipB,EAAchyF,EAAGgyF,EAAc/xF,GAC1C,IAAK,IAAInL,EAAI,EAAGA,EAAI46H,EAAY56H,IAC9Bk9F,EAAgBtsB,EAAMguD,iBAAiB5+H,EAAGyzE,GAC1CzD,EAAIkE,OAAOgpB,EAAchyF,EAAGgyF,EAAc/xF,EAE9C,CACF,CAzMAwyH,GAAiB76H,GAAK,cACtB66H,GAAiBzuD,SAAW,CAC1B2jB,MAAO,CACL1yD,SAAUi+D,GAAMX,WAAWU,YAC3BsB,MAAO,CACL1qG,SAAS,KA8Nf,MAAM8pI,WAA0BlD,GAC9BnmI,YAAYqwF,GACVh5D,MAAMg5D,GACN/wF,KAAKqnG,aAAUx+F,EACf7I,KAAKsnG,aAAUz+F,EACf7I,KAAKgqI,iBAAcnhI,EACnB7I,KAAKiqI,aAAe,GACpBjqI,KAAKkqI,iBAAmB,EAC1B,CACAn8B,gBACE,MAAMvqF,EAAUxjB,KAAK69H,SAAWh7C,GAAUwmD,GAAsBrpI,KAAKwN,SAAW,GAC1Eg+D,EAAIxrE,KAAKgW,MAAQhW,KAAKqhF,SAAW79D,EAAQxN,MACzCm0D,EAAInqE,KAAKiW,OAASjW,KAAKykG,UAAYjhF,EAAQvN,OACjDjW,KAAKqnG,QAAUhlG,KAAK67B,MAAMl+B,KAAKyS,KAAO+4D,EAAI,EAAIhoD,EAAQ/Q,MACtDzS,KAAKsnG,QAAUjlG,KAAK67B,MAAMl+B,KAAKkW,IAAMi0D,EAAI,EAAI3mD,EAAQtN,KACrDlW,KAAKgqI,YAAc3nI,KAAK67B,MAAM77B,KAAKE,IAAIipE,EAAGrB,GAAK,EACjD,CACA+jC,sBACE,MAAM,IAAC3rG,EAAG,IAAE+S,GAAOtV,KAAK25F,WAAU,GAClC35F,KAAKuC,IAAM+8D,GAAe/8D,KAASygE,MAAMzgE,GAAOA,EAAM,EACtDvC,KAAKsV,IAAMgqD,GAAehqD,KAAS0tD,MAAM1tD,GAAOA,EAAM,EACtDtV,KAAK+mI,wBACP,CACAU,mBACE,OAAOplI,KAAKqnG,KAAK1pG,KAAKgqI,YAAcX,GAAsBrpI,KAAKwN,SACjE,CACAqjG,mBAAmB9S,GACjB8oC,GAAgBvhI,UAAUurG,mBAAmB/rG,KAAK9E,KAAM+9F,GACxD/9F,KAAKiqI,aAAejqI,KAAKk5F,YACtBlxF,KAAI,CAACjB,EAAOyX,KACX,MAAM67E,EAAQhvD,GAASrrC,KAAKwN,QAAQw6F,YAAY38D,SAAU,CAACtkC,EAAOyX,GAAQxe,MAC1E,OAAOq6F,GAAmB,IAAVA,EAAcA,EAAQ,EAAE,IAEzC1yF,QAAO,CAACojB,EAAG7f,IAAMlL,KAAK06E,MAAMymB,kBAAkBj2F,IACnD,CACAklG,MACE,MAAM1vB,EAAO1gF,KAAKwN,QACdkzE,EAAKonB,SAAWpnB,EAAKsnB,YAAYF,QA9NzC,SAA4BhsB,GAC1B,MAAMojB,EAAO,CACXh1B,EAAG4R,EAAMrpE,KAAOqpE,EAAM+hD,SAASprH,KAC/BgjB,EAAGqmD,EAAMnpE,MAAQmpE,EAAM+hD,SAASlrH,MAChC0f,EAAGypD,EAAM5lE,IAAM4lE,EAAM+hD,SAAS3nH,IAC9BsR,EAAGs0D,EAAM3lE,OAAS2lE,EAAM+hD,SAAS1nH,QAE7BqzH,EAAS5+H,OAAOiS,OAAO,CAAC,EAAGqiF,GAC3BgS,EAAa,GACb1tF,EAAU,GACV2mH,EAAaruD,EAAMmuD,aAAa7mI,OAChCgnI,EAAiBtuD,EAAMtuE,QAAQw6F,YAC/BqiC,EAAkBD,EAAeE,kBAAoBxoE,GAAKqoE,EAAa,EAC7E,IAAK,IAAIj/H,EAAI,EAAGA,EAAIi/H,EAAYj/H,IAAK,CACnC,MAAMw1E,EAAO0pD,EAAejlD,WAAWrJ,EAAMyuD,qBAAqBr/H,IAClEsY,EAAQtY,GAAKw1E,EAAKl9D,QAClB,MAAM4kF,EAAgBtsB,EAAMguD,iBAAiB5+H,EAAG4wE,EAAMkuD,YAAcxmH,EAAQtY,GAAIm/H,GAC1EG,EAAS1nD,GAAOpC,EAAK7F,MACrBijD,GA1CgB5iD,EA0CYY,EAAMZ,IA1CbL,EA0CkB2vD,EAzC/CnwC,EAAQpwF,GAD2BowF,EA0CoBve,EAAMmuD,aAAa/+H,IAzCjDmvF,EAAQ,CAACA,GAC3B,CACL7uB,EAAG0R,GAAahC,EAAKL,EAAKl9C,OAAQ08D,GAClClwB,EAAGkwB,EAAMj3F,OAASy3E,EAAKE,aAuCvBm2B,EAAWhmG,GAAK4yH,EAChB,MAAMjsB,EAAevtC,GAAgBwX,EAAM0rB,cAAct8F,GAAKm/H,GACxDrmE,EAAQ3hE,KAAKmT,MAAM6tD,GAAUwuC,IAGnC03B,GAAaC,EAAQtqC,EAAM2S,EAFXy3B,GAAgBtlE,EAAOokC,EAAchyF,EAAG0nH,EAAStyD,EAAG,EAAG,KACvD89D,GAAgBtlE,EAAOokC,EAAc/xF,EAAGynH,EAAS3zD,EAAG,GAAI,KAE1E,CAjDF,IAA0B+Q,EAAKL,EAAMwf,EAkDnCve,EAAM2uD,eACJvrC,EAAKh1B,EAAIs/D,EAAOt/D,EAChBs/D,EAAO/zG,EAAIypE,EAAKzpE,EAChBypE,EAAK7sE,EAAIm3G,EAAOn3G,EAChBm3G,EAAOhiH,EAAI03E,EAAK13E,GAElBs0D,EAAMouD,iBAsBR,SAA8BpuD,EAAOo1B,EAAY1tF,GAC/C,MAAMjW,EAAQ,GACR48H,EAAaruD,EAAMmuD,aAAa7mI,OAChCs9E,EAAO5E,EAAMtuE,QACbk9H,EAAQrB,GAAsB3oD,GAAQ,EACtCiqD,EAAgB7uD,EAAMkuD,YACtBK,EAAkB3pD,EAAKsnB,YAAYsiC,kBAAoBxoE,GAAKqoE,EAAa,EAC/E,IAAK,IAAIj/H,EAAI,EAAGA,EAAIi/H,EAAYj/H,IAAK,CACnC,MAAM0/H,EAAqB9uD,EAAMguD,iBAAiB5+H,EAAGy/H,EAAgBD,EAAQlnH,EAAQtY,GAAIm/H,GACnFrmE,EAAQ3hE,KAAKmT,MAAM6tD,GAAUiB,GAAgBsmE,EAAmB5mE,MAAQ5B,MACxEnkB,EAAOizD,EAAWhmG,GAClBmL,EAAIuzH,GAAUgB,EAAmBv0H,EAAG4nC,EAAKksB,EAAGnG,GAC5C+c,EAAY4oD,GAAqB3lE,GACjCvxD,GAqBgB2D,EArBQw0H,EAAmBx0H,EAqBxBo1D,EArB2BvtB,EAAKutB,EAsB7C,WADgBpF,EArBgC2a,GAuB5D3qE,GAAKo1D,EACc,WAAVpF,IACThwD,GAAMo1D,EAAI,GAELp1D,GA1BL7I,EAAMrN,KAAK,CACTkW,EAAGw0H,EAAmBx0H,EACtBC,IACA0qE,YACAtuE,OACAyD,IAAKG,EACL1D,MAAOF,EAAOwrC,EAAKutB,EACnBr1D,OAAQE,EAAI4nC,EAAKksB,GAErB,CAWF,IAA0B/zD,EAAGo1D,EAAGpF,EAV9B,OAAO74D,CACT,CA/C2Bs9H,CAAqB/uD,EAAOo1B,EAAY1tF,EACnE,CA8LMsnH,CAAmB9qI,MAEnBA,KAAKyqI,eAAe,EAAG,EAAG,EAAG,EAEjC,CACAA,eAAeM,EAAcC,EAAeC,EAAaC,GACvDlrI,KAAKqnG,SAAWhlG,KAAK67B,OAAO6sG,EAAeC,GAAiB,GAC5DhrI,KAAKsnG,SAAWjlG,KAAK67B,OAAO+sG,EAAcC,GAAkB,GAC5DlrI,KAAKgqI,aAAe3nI,KAAKE,IAAIvC,KAAKgqI,YAAc,EAAG3nI,KAAKiT,IAAIy1H,EAAcC,EAAeC,EAAaC,GACxG,CACA1jC,cAAchpF,GAGZ,OAAO8lD,GAAgB9lD,GAFCujD,IAAO/hE,KAAKiqI,aAAa7mI,QAAU,IAEV+/D,GAD9BnjE,KAAKwN,QAAQo2F,YAAc,GAEhD,CACAgE,8BAA8B7gG,GAC5B,GAAIq4D,GAAcr4D,GAChB,OAAO2yF,IAET,MAAMyxC,EAAgBnrI,KAAKgqI,aAAehqI,KAAKsV,IAAMtV,KAAKuC,KAC1D,OAAIvC,KAAKwN,QAAQmmD,SACP3zD,KAAKsV,IAAMvO,GAASokI,GAEtBpkI,EAAQ/G,KAAKuC,KAAO4oI,CAC9B,CACAC,8BAA8BjlH,GAC5B,GAAIi5C,GAAcj5C,GAChB,OAAOuzE,IAET,MAAM2xC,EAAiBllH,GAAYnmB,KAAKgqI,aAAehqI,KAAKsV,IAAMtV,KAAKuC,MACvE,OAAOvC,KAAKwN,QAAQmmD,QAAU3zD,KAAKsV,IAAM+1H,EAAiBrrI,KAAKuC,IAAM8oI,CACvE,CACAd,qBAAqB/rH,GACnB,MAAMwpF,EAAchoG,KAAKiqI,cAAgB,GACzC,GAAIzrH,GAAS,GAAKA,EAAQwpF,EAAY5kG,OAAQ,CAC5C,MAAMkoI,EAAatjC,EAAYxpF,GAC/B,OAjFN,SAAiC+C,EAAQ/C,EAAO67E,GAC9C,OAAOjX,GAAc7hE,EAAQ,CAC3B84E,QACA77E,QACA5Y,KAAM,cAEV,CA2Ea2lI,CAAwBvrI,KAAKi+E,aAAcz/D,EAAO8sH,EAC3D,CACF,CACAxB,iBAAiBtrH,EAAOgtH,EAAoBnB,EAAkB,GAC5D,MAAMrmE,EAAQhkE,KAAKwnG,cAAchpF,GAAS4jD,GAAUioE,EACpD,MAAO,CACLj0H,EAAG/T,KAAK0mE,IAAI/E,GAASwnE,EAAqBxrI,KAAKqnG,QAC/ChxF,EAAGhU,KAAKylE,IAAI9D,GAASwnE,EAAqBxrI,KAAKsnG,QAC/CtjC,QAEJ,CACAqkC,yBAAyB7pF,EAAOzX,GAC9B,OAAO/G,KAAK8pI,iBAAiBtrH,EAAOxe,KAAK4nG,8BAA8B7gG,GACzE,CACA0kI,gBAAgBjtH,GACd,OAAOxe,KAAKqoG,yBAAyB7pF,GAAS,EAAGxe,KAAKszG,eACxD,CACAo4B,sBAAsBltH,GACpB,MAAM,KAAC/L,EAAI,IAAEyD,EAAG,MAAEvD,EAAK,OAAEwD,GAAUnW,KAAKkqI,iBAAiB1rH,GACzD,MAAO,CACL/L,OACAyD,MACAvD,QACAwD,SAEJ,CACA0/F,iBACE,MAAM,gBAACt7B,EAAiB4nB,MAAM,SAAC4F,IAAa/nG,KAAKwN,QACjD,GAAI+sE,EAAiB,CACnB,MAAMW,EAAMl7E,KAAKk7E,IACjBA,EAAImC,OACJnC,EAAI6D,YACJ8qD,GAAe7pI,KAAMA,KAAK4nG,8BAA8B5nG,KAAK8mI,WAAY/+B,EAAU/nG,KAAKiqI,aAAa7mI,QACrG83E,EAAIgE,YACJhE,EAAI4F,UAAYvG,EAChBW,EAAIoE,OACJpE,EAAIuC,SACN,CACF,CACAs4B,WACE,MAAM76B,EAAMl7E,KAAKk7E,IACXwF,EAAO1gF,KAAKwN,SACZ,WAACq6F,EAAU,KAAE1F,GAAQzhB,EACrBolD,EAAa9lI,KAAKiqI,aAAa7mI,OACrC,IAAI8H,EAAGuZ,EAAQ1S,EAaf,GAZI2uE,EAAKsnB,YAAYF,SAxMzB,SAAyBhsB,EAAOgqD,GAC9B,MAAM,IAAC5qD,EAAK1tE,SAAS,YAACw6F,IAAgBlsB,EACtC,IAAK,IAAI5wE,EAAI46H,EAAa,EAAG56H,GAAK,EAAGA,IAAK,CACxC,MAAM4pG,EAAc9M,EAAY7iB,WAAWrJ,EAAMyuD,qBAAqBr/H,IAChEs/H,EAAS1nD,GAAOgyB,EAAYj6B,OAC5B,EAACzkE,EAAC,EAAEC,EAAC,UAAE0qE,EAAS,KAAEtuE,EAAI,IAAEyD,EAAG,MAAEvD,EAAK,OAAEwD,GAAU2lE,EAAMouD,iBAAiBh/H,IACrE,cAAC4/F,GAAiBgK,EACxB,IAAK11C,GAAc0rC,GAAgB,CACjC,MAAMwiB,EAAe1qC,GAAckyB,EAAYwY,cACzC9pG,EAAUq/D,GAAUiyB,EAAY/J,iBACtC7vB,EAAI4F,UAAYgqB,EAChB,MAAM6gC,EAAel5H,EAAO+Q,EAAQ/Q,KAC9Bm5H,EAAc11H,EAAMsN,EAAQtN,IAC5B21H,EAAgBl5H,EAAQF,EAAO+Q,EAAQxN,MACvC81H,EAAiB31H,EAASD,EAAMsN,EAAQvN,OAC1CrL,OAAO6yB,OAAO6vF,GAAcrxG,MAAK8O,GAAW,IAANA,KACxCmwD,EAAI6D,YACJkD,GAAmB/G,EAAK,CACtB9kE,EAAGu1H,EACHt1H,EAAGu1H,EACHpgE,EAAGqgE,EACH1hE,EAAG2hE,EACHntD,OAAQ2uC,IAEVpyC,EAAIoE,QAEJpE,EAAI46B,SAAS61B,EAAcC,EAAaC,EAAeC,EAE3D,CACArrD,GACEvF,EACAY,EAAMmuD,aAAa/+H,GACnBkL,EACAC,EAAKm0H,EAAOzvD,WAAa,EACzByvD,EACA,CACE7xD,MAAOm8B,EAAYn8B,MACnBoI,UAAWA,EACXC,aAAc,UAGpB,CACF,CA+JM+qD,CAAgB/rI,KAAM8lI,GAEpB3jC,EAAK2F,SACP9nG,KAAK+9F,MAAM9xF,SAAQ,CAACikF,EAAM1xE,KACV,IAAVA,IACFiG,EAASzkB,KAAK4nG,8BAA8B1X,EAAKnpF,OAtJ3D,SAAwB+0E,EAAOkwD,EAAcrtD,EAAQmnD,GACnD,MAAM5qD,EAAMY,EAAMZ,IACZ6sB,EAAWikC,EAAajkC,UACxB,MAACpvB,EAAK,UAAEwI,GAAa6qD,GACrBjkC,IAAa+9B,IAAgBntD,IAAUwI,GAAaxC,EAAS,IAGnEzD,EAAImC,OACJnC,EAAIgG,YAAcvI,EAClBuC,EAAIiG,UAAYA,EAChBjG,EAAI+6B,YAAY+1B,EAAap9C,YAC7B1T,EAAIg7B,eAAiB81B,EAAan9C,iBAClC3T,EAAI6D,YACJ8qD,GAAe/tD,EAAO6C,EAAQopB,EAAU+9B,GACxC5qD,EAAIgE,YACJhE,EAAIsE,SACJtE,EAAIuC,UACN,CAuIUwuD,CAAejsI,KADKmiG,EAAKhd,WAAWnlF,KAAKi+E,WAAWz/D,EAAQ,IAC1BiG,EAAQqhH,GAC5C,IAGAj+B,EAAWC,QAAS,CAEtB,IADA5sB,EAAImC,OACCnyE,EAAI46H,EAAa,EAAG56H,GAAK,EAAGA,IAAK,CACpC,MAAM4pG,EAAcjN,EAAW1iB,WAAWnlF,KAAKuqI,qBAAqBr/H,KAC9D,MAACytE,EAAK,UAAEwI,GAAa2zB,EACtB3zB,GAAcxI,IAGnBuC,EAAIiG,UAAYA,EAChBjG,EAAIgG,YAAcvI,EAClBuC,EAAI+6B,YAAYnB,EAAYlmB,YAC5B1T,EAAIg7B,eAAiBpB,EAAYjmB,iBACjCpqE,EAASzkB,KAAK4nG,8BAA8BlnB,EAAKqd,MAAMpqC,QAAU3zD,KAAKuC,IAAMvC,KAAKsV,KACjFvD,EAAW/R,KAAK8pI,iBAAiB5+H,EAAGuZ,GACpCy2D,EAAI6D,YACJ7D,EAAIiE,OAAOn/E,KAAKqnG,QAASrnG,KAAKsnG,SAC9BpsB,EAAIkE,OAAOrtE,EAASqE,EAAGrE,EAASsE,GAChC6kE,EAAIsE,SACN,CACAtE,EAAIuC,SACN,CACF,CACAmsB,aAAc,CACdwM,aACE,MAAMl7B,EAAMl7E,KAAKk7E,IACXwF,EAAO1gF,KAAKwN,QACZogG,EAAWltB,EAAKqd,MACtB,IAAK6P,EAAS9F,QACZ,OAEF,MAAMlE,EAAa5jG,KAAKwnG,cAAc,GACtC,IAAI/iF,EAAQzO,EACZklE,EAAImC,OACJnC,EAAI2D,UAAU7+E,KAAKqnG,QAASrnG,KAAKsnG,SACjCpsB,EAAItB,OAAOgqB,GACX1oB,EAAI6F,UAAY,SAChB7F,EAAI8F,aAAe,SACnBhhF,KAAK+9F,MAAM9xF,SAAQ,CAACikF,EAAM1xE,KACxB,GAAc,IAAVA,IAAgBkiE,EAAK/sB,QACvB,OAEF,MAAMmhD,EAAclH,EAASzoB,WAAWnlF,KAAKi+E,WAAWz/D,IAClDm0F,EAAW7vB,GAAOgyB,EAAYj6B,MAEpC,GADAp2D,EAASzkB,KAAK4nG,8BAA8B5nG,KAAK+9F,MAAMv/E,GAAOzX,OAC1D+tG,EAAYjK,kBAAmB,CACjC3vB,EAAIL,KAAO83B,EAASh1E,OACpB3nB,EAAQklE,EAAI+B,YAAYiT,EAAKmK,OAAOrkF,MACpCklE,EAAI4F,UAAYg0B,EAAYhK,cAC5B,MAAMtnF,EAAUq/D,GAAUiyB,EAAY/J,iBACtC7vB,EAAI46B,UACD9/F,EAAQ,EAAIwN,EAAQ/Q,MACpBgS,EAASkuF,EAAS10D,KAAO,EAAIz6B,EAAQtN,IACtCF,EAAQwN,EAAQxN,MAChB28F,EAAS10D,KAAOz6B,EAAQvN,OAE5B,CACAwqE,GAAWvF,EAAKgV,EAAKmK,MAAO,GAAI51E,EAAQkuF,EAAU,CAChDh6B,MAAOm8B,EAAYn8B,OACnB,IAEJuC,EAAIuC,SACN,CACA44B,YAAa,EAEf0zB,GAAkB/7H,GAAK,eACvB+7H,GAAkB3vD,SAAW,CAC3B0tB,SAAS,EACTokC,SAAS,EACTn6H,SAAU,YACV81F,WAAY,CACVC,SAAS,EACT3mB,UAAW,EACXyN,WAAY,GACZC,iBAAkB,GAEpBsT,KAAM,CACJ4F,UAAU,GAEZnE,WAAY,EACZ7F,MAAO,CACL8M,mBAAmB,EACnBx/D,SAAUi+D,GAAMX,WAAWC,SAE7BZ,YAAa,CACX8C,mBAAejiG,EACfkiG,gBAAiB,EACjBjD,SAAS,EACTjtB,KAAM,CACJ58B,KAAM,IAER5S,SAASgvD,GACAA,EAET72E,QAAS,EACT8mH,mBAAmB,IAGvBP,GAAkBrhC,cAAgB,CAChC,mBAAoB,cACpB,oBAAqB,QACrB,cAAe,SAEjBqhC,GAAkB53E,YAAc,CAC9B01C,WAAY,CACVjrB,UAAW,SAIf,MAAMuvD,GAAY,CAChBC,YAAa,CAACC,QAAQ,EAAMpuF,KAAM,EAAGquF,MAAO,KAC5CC,OAAQ,CAACF,QAAQ,EAAMpuF,KAAM,IAAMquF,MAAO,IAC1CE,OAAQ,CAACH,QAAQ,EAAMpuF,KAAM,IAAOquF,MAAO,IAC3CG,KAAM,CAACJ,QAAQ,EAAMpuF,KAAM,KAASquF,MAAO,IAC3CI,IAAK,CAACL,QAAQ,EAAMpuF,KAAM,MAAUquF,MAAO,IAC3CK,KAAM,CAACN,QAAQ,EAAOpuF,KAAM,OAAWquF,MAAO,GAC9CM,MAAO,CAACP,QAAQ,EAAMpuF,KAAM,OAASquF,MAAO,IAC5CO,QAAS,CAACR,QAAQ,EAAOpuF,KAAM,OAASquF,MAAO,GAC/CQ,KAAM,CAACT,QAAQ,EAAMpuF,KAAM,SAEvB8uF,GAASniI,OAAOU,KAAK6gI,IAC3B,SAASa,GAAO7jI,EAAGqe,GACjB,OAAOre,EAAIqe,CACb,CACA,SAAS3hB,GAAMi2E,EAAO9E,GACpB,GAAI5X,GAAc4X,GAChB,OAAO,KAET,MAAMlkC,EAAUgpC,EAAMmxD,UAChB,OAACC,EAAM,MAAE13H,EAAK,WAAE23H,GAAcrxD,EAAMsxD,WAC1C,IAAIrmI,EAAQiwE,EASZ,MARsB,mBAAXk2D,IACTnmI,EAAQmmI,EAAOnmI,IAEZu4D,GAAev4D,KAClBA,EAA0B,iBAAXmmI,EACXp6F,EAAQjtC,MAAMkB,EAAOmmI,GACrBp6F,EAAQjtC,MAAMkB,IAEN,OAAVA,EACK,MAELyO,IACFzO,EAAkB,SAAVyO,IAAqButD,GAASoqE,KAA8B,IAAfA,EAEjDr6F,EAAQ8mE,QAAQ7yG,EAAOyO,GADvBs9B,EAAQ8mE,QAAQ7yG,EAAO,UAAWomI,KAGhCpmI,EACV,CACA,SAASsmI,GAA0BC,EAAS/qI,EAAK+S,EAAKi4H,GACpD,MAAMptE,EAAO4sE,GAAM3pI,OACnB,IAAK,IAAI8H,EAAI6hI,GAAM1pI,QAAQiqI,GAAUpiI,EAAIi1D,EAAO,IAAKj1D,EAAG,CACtD,MAAMmG,EAAW86H,GAAUY,GAAM7hI,IAC3B0lF,EAASv/E,EAASi7H,MAAQj7H,EAASi7H,MAAQ9xE,OAAO4sE,iBACxD,GAAI/1H,EAASg7H,QAAUhqI,KAAKqnG,MAAMp0F,EAAM/S,IAAQquF,EAASv/E,EAAS4sC,QAAUsvF,EAC1E,OAAOR,GAAM7hI,EAEjB,CACA,OAAO6hI,GAAM5sE,EAAO,EACtB,CAiBA,SAASqtE,GAAQzvC,EAAOv9F,EAAMitI,GAC5B,GAAKA,GAEE,GAAIA,EAAWrqI,OAAQ,CAC5B,MAAM,GAACgiE,EAAE,GAAED,GAAMJ,GAAQ0oE,EAAYjtI,GAErCu9F,EADkB0vC,EAAWroE,IAAO5kE,EAAOitI,EAAWroE,GAAMqoE,EAAWtoE,KACpD,CACrB,OALE44B,EAAMv9F,IAAQ,CAMlB,CAcA,SAASktI,GAAoB5xD,EAAOr+C,EAAQkwG,GAC1C,MAAM5vC,EAAQ,GACR/1F,EAAM,CAAC,EACPm4D,EAAO1iC,EAAOr6B,OACpB,IAAI8H,EAAGnE,EACP,IAAKmE,EAAI,EAAGA,EAAIi1D,IAAQj1D,EACtBnE,EAAQ02B,EAAOvyB,GACflD,EAAIjB,GAASmE,EACb6yF,EAAM79F,KAAK,CACT6G,QACA4jG,OAAO,IAGX,OAAiB,IAATxqC,GAAewtE,EA1BzB,SAAuB7xD,EAAOiiB,EAAO/1F,EAAK2lI,GACxC,MAAM76F,EAAUgpC,EAAMmxD,SAChBx9B,GAAS38D,EAAQ8mE,QAAQ7b,EAAM,GAAGh3F,MAAO4mI,GACzCroE,EAAOy4B,EAAMA,EAAM36F,OAAS,GAAG2D,MACrC,IAAI4jG,EAAOnsF,EACX,IAAKmsF,EAAQ8E,EAAO9E,GAASrlC,EAAMqlC,GAAS73D,EAAQvqC,IAAIoiG,EAAO,EAAGgjC,GAChEnvH,EAAQxW,EAAI2iG,GACRnsF,GAAS,IACXu/E,EAAMv/E,GAAOmsF,OAAQ,GAGzB,OAAO5M,CACT,CAc8C6vC,CAAc9xD,EAAOiiB,EAAO/1F,EAAK2lI,GAAzC5vC,CACtC,CACA,MAAM8vC,WAAkBjiC,GACtBlrG,YAAYmM,GACVkrB,MAAMlrB,GACN7M,KAAKw9F,OAAS,CACZ35F,KAAM,GACNo1F,OAAQ,GACRx7C,IAAK,IAEPz9C,KAAK8tI,MAAQ,MACb9tI,KAAK+tI,gBAAallI,EAClB7I,KAAKguI,SAAW,CAAC,EACjBhuI,KAAKiuI,aAAc,EACnBjuI,KAAKotI,gBAAavkI,CACpB,CACAokG,KAAKmb,EAAW1nC,GACd,MAAMlgF,EAAO4nH,EAAU5nH,OAAS4nH,EAAU5nH,KAAO,CAAC,GAC5CsyC,EAAU9yC,KAAKitI,SAAW,IAAI5sI,GAAS25G,MAAMoO,EAAU/nH,SAASkvF,MACtEz8C,EAAQm6D,KAAKvsB,GACb1f,GAAQxgE,EAAK0tI,eAAgBp7F,EAAQ0mE,WACrCx5G,KAAKotI,WAAa,CAChBF,OAAQ1sI,EAAK0sI,OACb13H,MAAOhV,EAAKgV,MACZ23H,WAAY3sI,EAAK2sI,YAEnBp1G,MAAMk1E,KAAKmb,GACXpoH,KAAKiuI,YAAcvtD,EAAKytD,UAC1B,CACAtoI,MAAMi1F,EAAKt8E,GACT,YAAY3V,IAARiyF,EACK,KAEFj1F,GAAM7F,KAAM86F,EACrB,CACA2S,eACE11E,MAAM01E,eACNztG,KAAKw9F,OAAS,CACZ35F,KAAM,GACNo1F,OAAQ,GACRx7C,IAAK,GAET,CACAywD,sBACE,MAAM1gG,EAAUxN,KAAKwN,QACfslC,EAAU9yC,KAAKitI,SACftzB,EAAOnsG,EAAQhN,KAAKm5G,MAAQ,MAClC,IAAI,IAACp3G,EAAG,IAAE+S,EAAG,WAAEwxD,EAAU,WAAEC,GAAc/mE,KAAKgnE,gBAC9C,SAASonE,EAAapgD,GACflnB,GAAe9D,MAAMgrB,EAAOzrF,OAC/BA,EAAMF,KAAKE,IAAIA,EAAKyrF,EAAOzrF,MAExBwkE,GAAe/D,MAAMgrB,EAAO14E,OAC/BA,EAAMjT,KAAKiT,IAAIA,EAAK04E,EAAO14E,KAE/B,CACKwxD,GAAeC,IAClBqnE,EAAapuI,KAAKquI,mBACK,UAAnB7gI,EAAQwgF,QAA+C,WAAzBxgF,EAAQuwF,MAAM/xF,QAC9CoiI,EAAapuI,KAAK25F,WAAU,KAGhCp3F,EAAM+8D,GAAe/8D,KAASygE,MAAMzgE,GAAOA,GAAOuwC,EAAQ8mE,QAAQz5G,KAAKC,MAAOu5G,GAC9ErkG,EAAMgqD,GAAehqD,KAAS0tD,MAAM1tD,GAAOA,GAAOw9B,EAAQgnE,MAAM35G,KAAKC,MAAOu5G,GAAQ,EACpF35G,KAAKuC,IAAMF,KAAKE,IAAIA,EAAK+S,EAAM,GAC/BtV,KAAKsV,IAAMjT,KAAKiT,IAAI/S,EAAM,EAAG+S,EAC/B,CACA+4H,kBACE,MAAMtkI,EAAM/J,KAAKsuI,qBACjB,IAAI/rI,EAAMi4D,OAAO0H,kBACb5sD,EAAMklD,OAAOu/B,kBAKjB,OAJIhwF,EAAI3G,SACNb,EAAMwH,EAAI,GACVuL,EAAMvL,EAAIA,EAAI3G,OAAS,IAElB,CAACb,MAAK+S,MACf,CACAm5F,aACE,MAAMjhG,EAAUxN,KAAKwN,QACf+gI,EAAW/gI,EAAQhN,KACnBotG,EAAWpgG,EAAQuwF,MACnB0vC,EAAiC,WAApB7/B,EAAS5hG,OAAsBhM,KAAKsuI,qBAAuBtuI,KAAKwuI,YAC5D,UAAnBhhI,EAAQwgF,QAAsBy/C,EAAWrqI,SAC3CpD,KAAKuC,IAAMvC,KAAK2sG,UAAY8gC,EAAW,GACvCztI,KAAKsV,IAAMtV,KAAK0sG,UAAY+gC,EAAWA,EAAWrqI,OAAS,IAE7D,MAAMb,EAAMvC,KAAKuC,IAEXw7F,ED74TV,SAAwBtgE,EAAQl7B,EAAK+S,GACnC,IAAIvU,EAAQ,EACRqZ,EAAMqjB,EAAOr6B,OACjB,KAAOrC,EAAQqZ,GAAOqjB,EAAO18B,GAASwB,GACpCxB,IAEF,KAAOqZ,EAAMrZ,GAAS08B,EAAOrjB,EAAM,GAAK9E,GACtC8E,IAEF,OAAOrZ,EAAQ,GAAKqZ,EAAMqjB,EAAOr6B,OAC7Bq6B,EAAOt6B,MAAMpC,EAAOqZ,GACpBqjB,CACN,CCi4TkBgxG,CAAehB,EAAYlrI,EAD7BvC,KAAKsV,KAWjB,OATAtV,KAAK8tI,MAAQS,EAAS50B,OAAS/L,EAASrD,SACpC8iC,GAA0BkB,EAASjB,QAASttI,KAAKuC,IAAKvC,KAAKsV,IAAKtV,KAAK0uI,kBAAkBnsI,IA7I/F,SAAoCu5E,EAAOi1B,EAAUu8B,EAAS/qI,EAAK+S,GACjE,IAAK,IAAIpK,EAAI6hI,GAAM3pI,OAAS,EAAG8H,GAAK6hI,GAAM1pI,QAAQiqI,GAAUpiI,IAAK,CAC/D,MAAMyuG,EAAOozB,GAAM7hI,GACnB,GAAIihI,GAAUxyB,GAAM0yB,QAAUvwD,EAAMmxD,SAASr9B,KAAKt6F,EAAK/S,EAAKo3G,IAAS5I,EAAW,EAC9E,OAAO4I,CAEX,CACA,OAAOozB,GAAMO,EAAUP,GAAM1pI,QAAQiqI,GAAW,EAClD,CAsIQqB,CAA2B3uI,KAAM+9F,EAAM36F,OAAQmrI,EAASjB,QAASttI,KAAKuC,IAAKvC,KAAKsV,MACpFtV,KAAK+tI,WAAcngC,EAASjD,MAAM1qG,SAA0B,SAAfD,KAAK8tI,MAtItD,SAA4Bn0B,GAC1B,IAAK,IAAIzuG,EAAI6hI,GAAM1pI,QAAQs2G,GAAQ,EAAGx5C,EAAO4sE,GAAM3pI,OAAQ8H,EAAIi1D,IAAQj1D,EACrE,GAAIihI,GAAUY,GAAM7hI,IAAImhI,OACtB,OAAOU,GAAM7hI,EAGnB,CAiIQ0jI,CAAmB5uI,KAAK8tI,YADyCjlI,EAErE7I,KAAK6uI,YAAYpB,GACbjgI,EAAQmmD,SACVoqC,EAAMpqC,UAED+5E,GAAoB1tI,KAAM+9F,EAAO/9F,KAAK+tI,WAC/C,CACA79B,gBACMlwG,KAAKwN,QAAQshI,qBACf9uI,KAAK6uI,YAAY7uI,KAAK+9F,MAAM/1F,KAAIkoF,IAASA,EAAKnpF,QAElD,CACA8nI,YAAYpB,GACV,IAEIh+B,EAAOnqC,EAFPvkE,EAAQ,EACRqZ,EAAM,EAENpa,KAAKwN,QAAQiX,QAAUgpH,EAAWrqI,SACpCqsG,EAAQzvG,KAAK+uI,mBAAmBtB,EAAW,IAEzC1sI,EADwB,IAAtB0sI,EAAWrqI,OACL,EAAIqsG,GAEHzvG,KAAK+uI,mBAAmBtB,EAAW,IAAMh+B,GAAS,EAE7DnqC,EAAOtlE,KAAK+uI,mBAAmBtB,EAAWA,EAAWrqI,OAAS,IAE5DgX,EADwB,IAAtBqzH,EAAWrqI,OACPkiE,GAECA,EAAOtlE,KAAK+uI,mBAAmBtB,EAAWA,EAAWrqI,OAAS,KAAO,GAGhF,MAAMwxG,EAAQ64B,EAAWrqI,OAAS,EAAI,GAAM,IAC5CrC,EAAQ8jE,GAAY9jE,EAAO,EAAG6zG,GAC9Bx6F,EAAMyqD,GAAYzqD,EAAK,EAAGw6F,GAC1B50G,KAAKguI,SAAW,CAACjtI,QAAOqZ,MAAKw2E,OAAQ,GAAK7vF,EAAQ,EAAIqZ,GACxD,CACAo0H,YACE,MAAM17F,EAAU9yC,KAAKitI,SACf1qI,EAAMvC,KAAKuC,IACX+S,EAAMtV,KAAKsV,IACX9H,EAAUxN,KAAKwN,QACf+gI,EAAW/gI,EAAQhN,KACnBkqG,EAAQ6jC,EAAS50B,MAAQ0zB,GAA0BkB,EAASjB,QAAS/qI,EAAK+S,EAAKtV,KAAK0uI,kBAAkBnsI,IACtGilI,EAAW/nE,GAAe8uE,EAAS/G,SAAU,GAC7C3tB,EAAoB,SAAVnP,GAAmB6jC,EAASpB,WACtC6B,EAAajsE,GAAS82C,KAAwB,IAAZA,EAClC9b,EAAQ,CAAC,EACf,IACIv9F,EAAMkmE,EADN+oC,EAAQltG,EAMZ,GAJIysI,IACFv/B,GAAS38D,EAAQ8mE,QAAQnK,EAAO,UAAWoK,IAE7CpK,GAAS38D,EAAQ8mE,QAAQnK,EAAOu/B,EAAa,MAAQtkC,GACjD53D,EAAQ88D,KAAKt6F,EAAK/S,EAAKmoG,GAAS,IAAS88B,EAC3C,MAAM,IAAI5hG,MAAMrjC,EAAM,QAAU+S,EAAM,uCAAyCkyH,EAAW,IAAM98B,GAElG,MAAM+iC,EAAsC,SAAzBjgI,EAAQuwF,MAAM/xF,QAAqBhM,KAAKivI,oBAC3D,IAAKzuI,EAAOivG,EAAO/oC,EAAQ,EAAGlmE,EAAO8U,EAAK9U,GAAQsyC,EAAQvqC,IAAI/H,EAAMgnI,EAAU98B,GAAQhkC,IACpF8mE,GAAQzvC,EAAOv9F,EAAMitI,GAKvB,OAHIjtI,IAAS8U,GAA0B,UAAnB9H,EAAQwgF,QAAgC,IAAVtnB,GAChD8mE,GAAQzvC,EAAOv9F,EAAMitI,GAEhB7iI,OAAOU,KAAKyyF,GAAO5iF,MAAK,CAAChS,EAAGqe,IAAMre,EAAIqe,IAAGxf,KAAIoO,IAAMA,GAC5D,CACAkkF,iBAAiBvzF,GACf,MAAM+rC,EAAU9yC,KAAKitI,SACfsB,EAAWvuI,KAAKwN,QAAQhN,KAC9B,OAAI+tI,EAASW,cACJp8F,EAAQ25C,OAAO1lF,EAAOwnI,EAASW,eAEjCp8F,EAAQ25C,OAAO1lF,EAAOwnI,EAASL,eAAeiB,SACvD,CACAC,oBAAoB5uI,EAAMge,EAAOu/E,EAAOtR,GACtC,MAAMj/E,EAAUxN,KAAKwN,QACfgsG,EAAUhsG,EAAQhN,KAAK0tI,eACvBv0B,EAAO35G,KAAK8tI,MACZH,EAAY3tI,KAAK+tI,WACjBsB,EAAc11B,GAAQH,EAAQG,GAC9B21B,EAAc3B,GAAan0B,EAAQm0B,GACnCz9C,EAAO6N,EAAMv/E,GACbmsF,EAAQgjC,GAAa2B,GAAep/C,GAAQA,EAAKya,MACjDtQ,EAAQr6F,KAAKitI,SAASxgD,OAAOjsF,EAAMisF,IAAWke,EAAQ2kC,EAAcD,IACpEhjD,EAAY7+E,EAAQuwF,MAAM1yD,SAChC,OAAOghD,EAAYhhD,GAASghD,EAAW,CAACgO,EAAO77E,EAAOu/E,GAAQ/9F,MAAQq6F,CACxE,CACAwW,mBAAmB9S,GACjB,IAAI7yF,EAAGi1D,EAAM+vB,EACb,IAAKhlF,EAAI,EAAGi1D,EAAO49B,EAAM36F,OAAQ8H,EAAIi1D,IAAQj1D,EAC3CglF,EAAO6N,EAAM7yF,GACbglF,EAAKmK,MAAQr6F,KAAKovI,oBAAoBl/C,EAAKnpF,MAAOmE,EAAG6yF,EAEzD,CACAgxC,mBAAmBhoI,GACjB,OAAiB,OAAVA,EAAiB2yF,KAAO3yF,EAAQ/G,KAAKuC,MAAQvC,KAAKsV,IAAMtV,KAAKuC,IACtE,CACA0kE,iBAAiBlgE,GACf,MAAMgR,EAAU/X,KAAKguI,SACfjkD,EAAM/pF,KAAK+uI,mBAAmBhoI,GACpC,OAAO/G,KAAKshG,oBAAoBvpF,EAAQhX,MAAQgpF,GAAOhyE,EAAQ64E,OACjE,CACAuiB,iBAAiBv1B,GACf,MAAM7lE,EAAU/X,KAAKguI,SACfjkD,EAAM/pF,KAAKqzG,mBAAmBz1B,GAAS7lE,EAAQ64E,OAAS74E,EAAQqC,IACtE,OAAOpa,KAAKuC,IAAMwnF,GAAO/pF,KAAKsV,IAAMtV,KAAKuC,IAC3C,CACAgtI,cAAcl1C,GACZ,MAAMm1C,EAAYxvI,KAAKwN,QAAQuwF,MACzB0xC,EAAiBzvI,KAAKk7E,IAAI+B,YAAYod,GAAOrkF,MAC7CguD,EAAQb,GAAUnjE,KAAK4/F,eAAiB4vC,EAAUrlC,YAAcqlC,EAAUtlC,aAC1EwlC,EAAcrtI,KAAK0mE,IAAI/E,GACvB2rE,EAActtI,KAAKylE,IAAI9D,GACvB4rE,EAAe5vI,KAAKgzG,wBAAwB,GAAG/0D,KACrD,MAAO,CACLutB,EAAIikE,EAAiBC,EAAgBE,EAAeD,EACpDxlE,EAAIslE,EAAiBE,EAAgBC,EAAeF,EAExD,CACAhB,kBAAkBmB,GAChB,MAAMtB,EAAWvuI,KAAKwN,QAAQhN,KACxB0tI,EAAiBK,EAASL,eAC1BzhD,EAASyhD,EAAeK,EAAS50B,OAASu0B,EAAe9B,YACzD0D,EAAe9vI,KAAKovI,oBAAoBS,EAAa,EAAGnC,GAAoB1tI,KAAM,CAAC6vI,GAAc7vI,KAAK+tI,YAAathD,GACnHxuC,EAAOj+C,KAAKuvI,cAAcO,GAC1BvC,EAAWlrI,KAAK67B,MAAMl+B,KAAK4/F,eAAiB5/F,KAAKgW,MAAQioC,EAAKutB,EAAIxrE,KAAKiW,OAASgoC,EAAKksB,GAAK,EAChG,OAAOojE,EAAW,EAAIA,EAAW,CACnC,CACA0B,oBACE,IACI/jI,EAAGi1D,EADHstE,EAAaztI,KAAKw9F,OAAO35F,MAAQ,GAErC,GAAI4pI,EAAWrqI,OACb,OAAOqqI,EAET,MAAMrgC,EAAQptG,KAAKw0F,0BACnB,GAAIx0F,KAAKiuI,aAAe7gC,EAAMhqG,OAC5B,OAAQpD,KAAKw9F,OAAO35F,KAAOupG,EAAM,GAAGjjD,WAAW+vC,mBAAmBl6F,MAEpE,IAAKkL,EAAI,EAAGi1D,EAAOitC,EAAMhqG,OAAQ8H,EAAIi1D,IAAQj1D,EAC3CuiI,EAAaA,EAAWh5H,OAAO24F,EAAMliG,GAAGi/C,WAAW+vC,mBAAmBl6F,OAExE,OAAQA,KAAKw9F,OAAO35F,KAAO7D,KAAK4tF,UAAU6/C,EAC5C,CACAa,qBACE,MAAMb,EAAaztI,KAAKw9F,OAAOvE,QAAU,GACzC,IAAI/tF,EAAGi1D,EACP,GAAIstE,EAAWrqI,OACb,OAAOqqI,EAET,MAAMx0C,EAASj5F,KAAKk5F,YACpB,IAAKhuF,EAAI,EAAGi1D,EAAO84B,EAAO71F,OAAQ8H,EAAIi1D,IAAQj1D,EAC5CuiI,EAAWvtI,KAAK2F,GAAM7F,KAAMi5F,EAAO/tF,KAErC,OAAQlL,KAAKw9F,OAAOvE,OAASj5F,KAAKiuI,YAAcR,EAAaztI,KAAK4tF,UAAU6/C,EAC9E,CACA7/C,UAAUnwD,GACR,OAAOooC,GAAapoC,EAAOtiB,KAAK6xH,IAClC,EAsBF,SAAS,GAAYhoE,EAAOqU,EAAK1lB,GAC/B,IAEIo8E,EAAYC,EAAYC,EAAYC,EAFpC9qE,EAAK,EACLD,EAAKH,EAAM5hE,OAAS,EAEpBuwD,GACE0lB,GAAOrU,EAAMI,GAAI2kB,KAAO1Q,GAAOrU,EAAMG,GAAI4kB,OACzC3kB,KAAID,MAAME,GAAaL,EAAO,MAAOqU,MAEvC0Q,IAAKgmD,EAAYvvI,KAAMyvI,GAAcjrE,EAAMI,MAC3C2kB,IAAKimD,EAAYxvI,KAAM0vI,GAAclrE,EAAMG,MAEzCkU,GAAOrU,EAAMI,GAAI5kE,MAAQ64E,GAAOrU,EAAMG,GAAI3kE,QAC1C4kE,KAAID,MAAME,GAAaL,EAAO,OAAQqU,MAExC74E,KAAMuvI,EAAYhmD,IAAKkmD,GAAcjrE,EAAMI,MAC3C5kE,KAAMwvI,EAAYjmD,IAAKmmD,GAAclrE,EAAMG,KAE/C,MAAMgrE,EAAOH,EAAaD,EAC1B,OAAOI,EAAOF,GAAcC,EAAaD,IAAe52D,EAAM02D,GAAcI,EAAOF,CACrF,CAvCApC,GAAU7/H,GAAK,OACf6/H,GAAUzzD,SAAW,CACnB4T,OAAQ,OACR3tF,SAAU,CAAC,EACXG,KAAM,CACJ0sI,QAAQ,EACRvzB,MAAM,EACNnkG,OAAO,EACP23H,YAAY,EACZG,QAAS,cACTY,eAAgB,CAAC,GAEnBnwC,MAAO,CACL/xF,OAAQ,OACR2+F,MAAO,CACL1qG,SAAS,KAyBf,MAAMmwI,WAAwBvC,GAC5BntI,YAAYmM,GACVkrB,MAAMlrB,GACN7M,KAAKqwI,OAAS,GACdrwI,KAAKswI,aAAUznI,EACf7I,KAAKuwI,iBAAc1nI,CACrB,CACAgmI,cACE,MAAMpB,EAAaztI,KAAKwwI,yBAClBxrE,EAAQhlE,KAAKqwI,OAASrwI,KAAKywI,iBAAiBhD,GAClDztI,KAAKswI,QAAU,GAAYtrE,EAAOhlE,KAAKuC,KACvCvC,KAAKuwI,YAAc,GAAYvrE,EAAOhlE,KAAKsV,KAAOtV,KAAKswI,QACvDv4G,MAAM82G,YAAYpB,EACpB,CACAgD,iBAAiBhD,GACf,MAAM,IAAClrI,EAAG,IAAE+S,GAAOtV,KACbuN,EAAQ,GACRy3D,EAAQ,GACd,IAAI95D,EAAGi1D,EAAMvsD,EAAMgqF,EAAM/qF,EACzB,IAAK3H,EAAI,EAAGi1D,EAAOstE,EAAWrqI,OAAQ8H,EAAIi1D,IAAQj1D,EAChD0yF,EAAO6vC,EAAWviI,GACd0yF,GAAQr7F,GAAOq7F,GAAQtoF,GACzB/H,EAAMrN,KAAK09F,GAGf,GAAIrwF,EAAMnK,OAAS,EACjB,MAAO,CACL,CAAC5C,KAAM+B,EAAKwnF,IAAK,GACjB,CAACvpF,KAAM8U,EAAKy0E,IAAK,IAGrB,IAAK7+E,EAAI,EAAGi1D,EAAO5yD,EAAMnK,OAAQ8H,EAAIi1D,IAAQj1D,EAC3C2H,EAAOtF,EAAMrC,EAAI,GACjB0I,EAAOrG,EAAMrC,EAAI,GACjB0yF,EAAOrwF,EAAMrC,GACT7I,KAAKmT,OAAO3C,EAAOe,GAAQ,KAAOgqF,GACpC54B,EAAM9kE,KAAK,CAACM,KAAMo9F,EAAM7T,IAAK7+E,GAAKi1D,EAAO,KAG7C,OAAO6E,CACT,CACAwrE,yBACE,IAAI/C,EAAaztI,KAAKw9F,OAAO//C,KAAO,GACpC,GAAIgwF,EAAWrqI,OACb,OAAOqqI,EAET,MAAM5pI,EAAO7D,KAAKivI,oBACZ50C,EAAQr6F,KAAKsuI,qBAOnB,OALEb,EADE5pI,EAAKT,QAAUi3F,EAAMj3F,OACVpD,KAAK4tF,UAAU/pF,EAAK4Q,OAAO4lF,IAE3Bx2F,EAAKT,OAASS,EAAOw2F,EAEpCozC,EAAaztI,KAAKw9F,OAAO//C,IAAMgwF,EACxBA,CACT,CACAsB,mBAAmBhoI,GACjB,OAAQ,GAAY/G,KAAKqwI,OAAQtpI,GAAS/G,KAAKswI,SAAWtwI,KAAKuwI,WACjE,CACAp9B,iBAAiBv1B,GACf,MAAM7lE,EAAU/X,KAAKguI,SACf56B,EAAUpzG,KAAKqzG,mBAAmBz1B,GAAS7lE,EAAQ64E,OAAS74E,EAAQqC,IAC1E,OAAO,GAAYpa,KAAKqwI,OAAQj9B,EAAUpzG,KAAKuwI,YAAcvwI,KAAKswI,SAAS,EAC7E,EAEFF,GAAgBpiI,GAAK,aACrBoiI,GAAgBh2D,SAAWyzD,GAAUzzD,SAYrC,MAAMs2D,GAAgB,CACpB53E,GACA,GACA8iB,GAbwBhxE,OAAOm4C,OAAO,CACxCC,UAAW,KACXkjF,cAAeA,GACfwC,YAAaA,GACbG,iBAAkBA,GAClBkB,kBAAmBA,GACnB8D,UAAWA,GACXuC,gBAAiBA,MC5/UjB5pB,GAAM/tD,YAAYi4E,IAElB,YCOA,MAAMC,WAAyBj7C,GAC7BviC,aACEnzD,KAAKo2F,qBAAsB,EAC3Br+D,MAAMo7B,YACR,CAEAh1C,OAAO6iC,GACL,MACM3I,EADKr4C,KACK00F,YADL10F,KAGR68F,eAAexkD,EAAKx0C,KAAM,EAAGw0C,EAAKx0C,KAAKT,OAAQ49C,EACpD,CAEA67C,eAAev+E,EAAOvd,EAAO2lE,EAAO1lB,GAClC,MAAM4vF,EAAK5wI,KACLue,EAAiB,UAATyiC,GACR,OAACmmB,EAAM,OAAEC,GAAUwpE,EAAGl8C,YACtBmH,EAAY+0C,EAAGh2C,0BAA0B75F,EAAOigD,GAChD06C,EAAgBk1C,EAAGp1C,iBAAiBx6C,EAAM1iC,EAAMvd,GAAQ86F,GAE9D,IAAK,IAAI3wF,EAAInK,EAAOmK,EAAInK,EAAQ2lE,EAAOx7D,IAAK,CAC1C,MAAMs7E,GAAUjoE,GAASqyH,EAAGt3C,UAAUpuF,GAChCkL,EAAImI,EAAQ4oD,EAAOw4B,eAAiBx4B,EAAOF,iBAAiBuf,EAAOpwE,GACnEC,EAAIkI,EAAQ6oD,EAAOu4B,eAAiBv4B,EAAOH,iBAAiBuf,EAAOnwE,GACnE7I,EAAUojI,EAAGh2C,0BAA0B1vF,EAAG81C,IAC1C,MAAChrC,EAAK,OAAEC,EAAM,QAAE46H,EAAO,QAAEC,GAAWtjI,EACpC3G,EAAa,CACjBuP,EAAG26H,GAASF,EAASz6H,EAAGJ,GACxBK,EAAG26H,GAASF,EAASz6H,EAAGJ,GACxBD,QACAC,SACAzI,WAEFojI,EAAG50C,cAAc19E,EAAMpT,GAAIA,EAAGrE,EAAYm6C,EAC5C,CAEA4vF,EAAG70C,oBAAoBL,EAAe16C,EACxC,CAEA+uC,OACE,MAAM6gD,EAAK5wI,KACL6D,EAAO+sI,EAAG/6C,UAAUhyF,MAAQ,GAClC,IAAIqH,EAAGi1D,EAEP,IAAKj1D,EAAI,EAAGi1D,EAAOt8D,EAAKT,OAAQ8H,EAAIi1D,IAAQj1D,EAC1CrH,EAAKqH,GAAG6kF,KAAK6gD,EAAGj7C,KAEpB,EAGF,SAASo7C,GAASF,EAASz6H,EAAGJ,GAC5B,MAAgB,SAAZ66H,GAAkC,UAAZA,EACjBz6H,EAEO,UAAZy6H,GAAmC,QAAZA,EAClBz6H,EAAIJ,EAENI,EAAIJ,EAAQ,CACrB,CAEA,SAASg7H,GAASF,EAASz6H,EAAGJ,GAC5B,MAAgB,QAAZ66H,GAAiC,UAAZA,EAChBz6H,EAEO,WAAZy6H,GAAoC,QAAZA,EACnBz6H,EAAIJ,EAENI,EAAIJ,EAAS,CACtB,CA4CA,SAASg7H,GAAUt7H,EAAM4yF,GACvB,MAAM,EAACnyF,EAAC,EAAEC,EAAC,MAAEL,EAAK,OAAEC,GAAUN,EAAK6yF,SAAS,CAAC,IAAK,IAAK,QAAS,UAAWD,GAC3E,MAAO,CAAC91F,KAAM2D,EAAGF,IAAKG,EAAG1D,MAAOyD,EAAIJ,EAAOG,OAAQE,EAAIJ,EACzD,CAEA,SAAS2+F,GAAM7tG,EAAOxE,EAAK+S,GACzB,OAAOjT,KAAKiT,IAAIjT,KAAKE,IAAIwE,EAAOuO,GAAM/S,EACxC,CA6CA,SAAS,GAAQoT,EAAMS,EAAGC,EAAGkyF,GAC3B,MAAMgrB,EAAc,OAANn9G,EACRo9G,EAAc,OAANn9G,EACR23E,KAAUr4E,GAAS49G,GAASC,IAAiByd,GAAUt7H,EAAM4yF,GAEnE,OAAOva,IACHulC,GAASn9G,GAAK43E,EAAOv7E,MAAQ2D,GAAK43E,EAAOr7E,SACzC6gH,GAASn9G,GAAK23E,EAAO93E,KAAOG,GAAK23E,EAAO73E,OAC9C,CAtGAw6H,GAAiB3iI,GAAK,SAEtB2iI,GAAiBhiB,QA1EH,QA4EdgiB,GAAiBv2D,SAAW,CAC1B8gB,gBAAiB,SAEjB9I,WAAY,CACVD,QAAS,CACPvsF,KAAM,SACNiB,WAAY,CAAC,IAAK,IAAK,QAAS,YAGpCgqI,QAAS,SACTC,QAAS,UAGXH,GAAiB12D,UAAY,CAC3BqB,YAAa,CACXt6B,KAAM,UACNtf,WAAW,GAGbq6C,OAAQ,CACN3lE,EAAG,CACDxQ,KAAM,SACN6e,QAAQ,GAEVpO,EAAG,CACDzQ,KAAM,SACN+tD,SAAS,KA0Ef,MAAMu9E,WAAsB,GAC1BxwI,YAAYqwF,GACVh5D,QAEA/3B,KAAKwN,aAAU3E,EACf7I,KAAKgW,WAAQnN,EACb7I,KAAKiW,YAASpN,EAEVkoF,GACFnmF,OAAOiS,OAAO7c,KAAM+wF,EAExB,CAEAhB,KAAK7U,GACH,MAAM1tE,EAAUxN,KAAKwN,SACf,MAAC+hH,EAAK,MAAEsE,GA/ClB,SAAuBl+G,GACrB,MAAMq4E,EAASijD,GAAUt7H,GACnBK,EAAQg4E,EAAOr7E,MAAQq7E,EAAOv7E,KAC9BwD,EAAS+3E,EAAO73E,OAAS63E,EAAO93E,IAChC2wF,EAzBR,SAA0BlxF,EAAMm+G,EAAMC,GACpC,MAAMhtH,EAAQ4O,EAAKnI,QAAQ+xE,YAC3B,IAAIltD,EAAGoD,EAAGjO,EAAG0iD,EAWb,OATI7K,GAASt4D,IACXsrB,GAAKtrB,EAAMmP,KAAO,EAClBuf,GAAK1uB,EAAM4L,OAAS,EACpB6U,GAAKzgB,EAAMoP,QAAU,EACrB+zD,GAAKnjE,EAAM0L,MAAQ,GAEnB4f,EAAIoD,EAAIjO,EAAI0iD,GAAKnjE,GAAS,EAGrB,CACLsrB,EAAGuiF,GAAMviF,EAAG,EAAG0hG,GACft+F,EAAGm/E,GAAMn/E,EAAG,EAAGq+F,GACftsG,EAAGotF,GAAMptF,EAAG,EAAGusG,GACf7pD,EAAG0qC,GAAM1qC,EAAG,EAAG4pD,GAEnB,CAMiB,CAAiBn+G,EAAMK,EAAQ,EAAGC,EAAS,GAE1D,MAAO,CACL49G,MAAO,CACLz9G,EAAG43E,EAAOv7E,KACV4D,EAAG23E,EAAO93E,IACVs1D,EAAGx1D,EACHm0D,EAAGl0D,GAELs5G,MAAO,CACLn5G,EAAG43E,EAAOv7E,KAAOo0F,EAAO38B,EACxB7zD,EAAG23E,EAAO93E,IAAM2wF,EAAOx0E,EACvBm5C,EAAGx1D,EAAQ6wF,EAAO38B,EAAI28B,EAAOpxE,EAC7B00C,EAAGl0D,EAAS4wF,EAAOx0E,EAAIw0E,EAAOr/E,GAGpC,CA2B2B,CAAcxnB,MAC/B2+E,EAASiE,GAAcp1E,EAAQ8/G,cAErCpyC,EAAImC,OAEAw2C,EAAMroD,IAAM+jD,EAAM/jD,GAAKqoD,EAAM1pD,IAAMolD,EAAMplD,GAC3C+Q,EAAI6D,YACJkD,GAAmB/G,EAAK,CAAC9kE,EAAGy9G,EAAMz9G,EAAGC,EAAGw9G,EAAMx9G,EAAGm1D,EAAGqoD,EAAMroD,EAAGrB,EAAG0pD,EAAM1pD,EAAGwU,WACzEsD,GAAmB/G,EAAK,CAAC9kE,EAAGm5G,EAAMn5G,EAAGC,EAAGk5G,EAAMl5G,EAAGm1D,EAAG+jD,EAAM/jD,EAAGrB,EAAGolD,EAAMplD,EAAGwU,WACzEzD,EAAI4F,UAAYtzE,EAAQ+sE,gBACxBW,EAAIoE,OACJpE,EAAI4F,UAAYtzE,EAAQgtE,YACxBU,EAAIoE,KAAK,aAETpE,EAAI6D,YACJkD,GAAmB/G,EAAK,CAAC9kE,EAAGm5G,EAAMn5G,EAAGC,EAAGk5G,EAAMl5G,EAAGm1D,EAAG+jD,EAAM/jD,EAAGrB,EAAGolD,EAAMplD,EAAGwU,WACzEzD,EAAI4F,UAAYtzE,EAAQ+sE,gBACxBW,EAAIoE,QAGNpE,EAAIuC,SACN,CAEA+8B,QAAQsY,EAAQC,EAAQxqB,GACtB,OAAO,GAAQvoG,KAAM8yH,EAAQC,EAAQxqB,EACvC,CAEAyqB,SAASF,EAAQvqB,GACf,OAAO,GAAQvoG,KAAM8yH,EAAQ,KAAMvqB,EACrC,CAEA0qB,SAASF,EAAQxqB,GACf,OAAO,GAAQvoG,KAAM,KAAM+yH,EAAQxqB,EACrC,CAEA0S,eAAe1S,GACb,MAAM,EAACnyF,EAAC,EAAEC,EAAC,MAAEL,EAAK,OAAEC,GAAUjW,KAAKwoG,SAAS,CAAC,IAAK,IAAK,QAAS,UAAWD,GAC3E,MAAO,CACLnyF,EAAGA,EAAIJ,EAAQ,EACfK,EAAGA,EAAIJ,EAAS,EAEpB,CAEAqyF,kBACE,OAAOtoG,KAAKi7G,gBACd,CAEAb,SAASz1F,GACP,MAAgB,MAATA,EAAe3kB,KAAKgW,MAAQ,EAAIhW,KAAKiW,OAAS,CACvD,EAGFi7H,GAAcljI,GAAK,SACnBkjI,GAAc92D,SAAW,CACvBG,qBAAiB1xE,EACjB2xE,iBAAa3xE,EACb02E,iBAAa12E,EACbykH,aAAc,EACdujB,aAAShoI,EACTioI,aAASjoI,EACTmN,MAAO,GACPC,OAAQ,ICjQV,YAAe06H,GAAkBO,ICKjC,IAAIC,GAA4B,oBAAd33H,WAA4BA,UAAUC,UAAUvU,cAAc7B,QAAQ,WAAa,EAErG,SAAS+tI,GAASxqI,EAAQpB,EAAO05B,EAAQmyG,GACnCzqI,EAAOxF,iBACTwF,EAAOxF,iBAAiBoE,EAAO05B,EAAQmyG,GAC9BzqI,EAAO0qI,aAChB1qI,EAAO0qI,YAAY,KAAK78H,OAAOjP,IAAQ,WACrC05B,EAAOzvB,OAAOjK,MAChB,GAEJ,CAGA,SAAS+rI,GAAQn2H,EAAUtU,GAGzB,IAFA,IAAI0qI,EAAO1qI,EAAI3D,MAAM,EAAG2D,EAAI1D,OAAS,GAE5B8H,EAAI,EAAGA,EAAIsmI,EAAKpuI,OAAQ8H,IAC/BsmI,EAAKtmI,GAAKkQ,EAASo2H,EAAKtmI,GAAGhG,eAG7B,OAAOssI,CACT,CAGA,SAASC,GAAQ3qI,GACI,iBAARA,IAAkBA,EAAM,IAOnC,IAJA,IAAIwE,GAFJxE,EAAMA,EAAIwC,QAAQ,MAAO,KAEVoF,MAAM,KAEjB8P,EAAQlT,EAAKm7H,YAAY,IAEtBjoH,GAAS,GACdlT,EAAKkT,EAAQ,IAAM,IACnBlT,EAAKizC,OAAO//B,EAAO,GACnBA,EAAQlT,EAAKm7H,YAAY,IAG3B,OAAOn7H,CACT,CAwGA,IAzFA,IAAIomI,GAAU,CACZC,UAAW,EACX,IAAK,EACLv/G,IAAK,EACLksB,MAAO,GACP/S,MAAO,GACP,IAAK,GACLqmG,OAAQ,GACRC,IAAK,GACLnrF,OAAQ,GACRorF,MAAO,GACPr/H,KAAM,GACNs/H,GAAI,GACJp/H,MAAO,GACPq/H,KAAM,GACNjkF,IAAK,GACLhqB,OAAQ,GACRkuG,IAAK,GACLC,OAAQ,GACRC,KAAM,GACN/3H,IAAK,GACLg4H,OAAQ,GACRC,SAAU,GACVC,SAAU,GACVC,MAAO,GACPC,MAAO,GACPC,MAAO,GACPC,MAAO,GACPC,MAAO,IACPC,MAAO,IACPC,MAAO,IACPC,MAAO,IACPC,MAAO,IACPC,MAAO,IACPC,aAAc,IACdC,QAAS,IACTC,UAAW,IACXC,aAAc,IACdC,YAAa,IACbC,WAAY,IACZ,IAAK,GACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAKnC,GAAO,IAAM,IAClB,IAAKA,GAAO,GAAK,IACjB,IAAKA,GAAO,GAAK,IACjB,IAAM,IACN,IAAK,IACL,IAAK,IACL,KAAM,KAGJoC,GAAY,CAEd,IAAK,GACLn+C,MAAO,GAEP,IAAK,GACLo+C,IAAK,GACLpiG,OAAQ,GAER,IAAK,GACLqiG,KAAM,GACNC,QAAS,GAET,IAAK,GACLC,IAAK,GACLxsI,QAAS,IAEPysI,GAAc,CAChB,GAAI,WACJ,GAAI,SACJ,GAAI,UACJ,GAAI,UACJjpG,SAAU,GACVF,QAAS,GACTD,OAAQ,GACRE,QAAS,IAEPmpG,GAAQ,CACV,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,GAEFC,GAAY,CAAC,EAERrzE,GAAI,EAAGA,GAAI,GAAIA,KACtBixE,GAAQ,IAAIj9H,OAAOgsD,KAAM,IAAMA,GAGjC,IAAIszE,GAAY,GAEZC,IAAkB,EAElBC,GAAS,MAETC,GAAsB,GAGtBC,GAAO,SAAc/9H,GACvB,OAAOs7H,GAAQt7H,EAAElR,gBAAkBquI,GAAUn9H,EAAElR,gBAAkBkR,EAAEuqB,cAAcyzG,WAAW,EAC9F,EAeA,SAASC,GAAS3pF,GAChBupF,GAASvpF,GAAS,KACpB,CAGA,SAAS,KACP,OAAOupF,IAAU,KACnB,CA4HA,IAAIK,GAAa,SAAoBj1H,GACnC,IAAIvY,EAAMuY,EAAKvY,IACX4jD,EAAQrrC,EAAKqrC,MACbxrB,EAAS7f,EAAK6f,OACdq1G,EAAgBl1H,EAAKm1H,SACrBA,OAA6B,IAAlBD,EAA2B,IAAMA,EAC7B9C,GAAQ3qI,GACdmF,SAAQ,SAAUwoI,GAC7B,IAAIC,EAAaD,EAAU/lI,MAAM8lI,GAC7BvpI,EAAMypI,EAAWtxI,OACjBuxI,EAAUD,EAAWzpI,EAAM,GAC3B2pI,EAAsB,MAAZD,EAAkB,IAAMR,GAAKQ,GAC3C,GAAKb,GAAUc,GAAf,CAEKlqF,IAAOA,EAAQ,MACpB,IAAI8mF,EAAOvmI,EAAM,EAAIsmI,GAAQgC,GAAWmB,GAAc,GACtDZ,GAAUc,GAAWd,GAAUc,GAASjtI,QAAO,SAAUktI,GAGvD,UADuB31G,GAAS21G,EAAO31G,SAAWA,IACrB21G,EAAOnqF,QAAUA,GAzRpD,SAAsBwV,EAAI40E,GAKxB,IAJA,IAAIC,EAAO70E,EAAG98D,QAAU0xI,EAAG1xI,OAAS88D,EAAK40E,EACrC3pI,EAAO+0D,EAAG98D,QAAU0xI,EAAG1xI,OAAS0xI,EAAK50E,EACrC80E,GAAU,EAEL9pI,EAAI,EAAGA,EAAI6pI,EAAK3xI,OAAQ8H,KACA,IAA3BC,EAAK9H,QAAQ0xI,EAAK7pI,MAAY8pI,GAAU,GAG9C,OAAOA,CACT,CA+Q6DC,CAAaJ,EAAOrD,KAAMA,GACnF,GAR+B,CASjC,GACF,EAGA,SAAS0D,GAAa1vI,EAAOH,EAASqlD,EAAOhhD,GAK3C,IAAIyrI,EAJJ,GAAI9vI,EAAQqE,UAAYA,IAMpBrE,EAAQqlD,QAAUA,GAA2B,QAAlBrlD,EAAQqlD,OAAiB,CAItD,IAAK,IAAIr0C,KAFT8+H,EAAiB9vI,EAAQmsI,KAAKpuI,OAAS,EAEzBywI,GACRjpI,OAAOtF,UAAUgb,eAAexb,KAAK+uI,GAAOx9H,MACzCw9H,GAAMx9H,IAAMhR,EAAQmsI,KAAKnuI,SAASgT,IAAM,GAAKw9H,GAAMx9H,KAAoC,IAA9BhR,EAAQmsI,KAAKnuI,SAASgT,MAClF8+H,GAAiB,IAMK,IAAxB9vI,EAAQmsI,KAAKpuI,QAAiBywI,GAAM,KAAQA,GAAM,KAAQA,GAAM,KAAQA,GAAM,OAAOsB,GAAuC,MAArB9vI,EAAQ+vI,WAC1E,IAAnC/vI,EAAQ65B,OAAO15B,EAAOH,KACpBG,EAAMgiC,eAAgBhiC,EAAMgiC,iBAAsBhiC,EAAM6vI,aAAc,EACtE7vI,EAAM6kD,iBAAiB7kD,EAAM6kD,kBAC7B7kD,EAAM8vI,eAAc9vI,EAAM8vI,cAAe,GAGnD,CACF,CAGA,SAAS,GAAS9vI,EAAOkE,GACvB,IAAI6rI,EAAWzB,GAAU,KACrBhtI,EAAMtB,EAAMovI,SAAWpvI,EAAM+kC,OAAS/kC,EAAMgwI,SAEhD,GAAK,GAAQ7tI,OAAO7C,KAAK9E,KAAMwF,GAA/B,CAsCA,GAnCY,KAARsB,GAAsB,MAARA,IAAaA,EAAM,KAQL,IAA5BitI,GAAU1wI,QAAQyD,IAAuB,MAARA,GAAaitI,GAAU7zI,KAAK4G,GAMjE,CAAC,UAAW,SAAU,WAAY,WAAWmF,SAAQ,SAAUwpI,GAC7D,IAAIC,EAAS9B,GAAY6B,GAErBjwI,EAAMiwI,KAA2C,IAA/B1B,GAAU1wI,QAAQqyI,GACtC3B,GAAU7zI,KAAKw1I,IACLlwI,EAAMiwI,IAAY1B,GAAU1wI,QAAQqyI,IAAW,EACzD3B,GAAUx1F,OAAOw1F,GAAU1wI,QAAQqyI,GAAS,GACvB,YAAZD,GAAyBjwI,EAAMiwI,IAAiC,IAArB1B,GAAU3wI,SAKxDoC,EAAMilC,SAAWjlC,EAAMmlC,UAAYnlC,EAAMglC,SAC7CupG,GAAYA,GAAU5wI,MAAM4wI,GAAU1wI,QAAQqyI,KAGpD,IAKI5uI,KAAO+sI,GAAO,CAGhB,IAAK,IAAIpzE,KAFTozE,GAAM/sI,IAAO,EAECysI,GACRA,GAAU9yE,KAAO35D,IAAK,GAAQ25D,IAAK,GAGzC,IAAK80E,EAAU,MACjB,CAGA,IAAK,IAAI/1F,KAAKq0F,GACRjpI,OAAOtF,UAAUgb,eAAexb,KAAK+uI,GAAOr0F,KAC9Cq0F,GAAMr0F,GAAKh6C,EAAMouI,GAAYp0F,KAW7Bh6C,EAAMmwI,oBAAsBnwI,EAAMglC,QAAWhlC,EAAMilC,UAAYjlC,EAAMmwI,iBAAiB,eACzD,IAA3B5B,GAAU1wI,QAAQ,KACpB0wI,GAAU7zI,KAAK,KAGc,IAA3B6zI,GAAU1wI,QAAQ,KACpB0wI,GAAU7zI,KAAK,IAGjB2zI,GAAM,KAAM,EACZA,GAAM,KAAM,GAId,IAAInpF,EAAQ,KAEZ,GAAI6qF,EACF,IAAK,IAAIrqI,EAAI,EAAGA,EAAIqqI,EAASnyI,OAAQ8H,IAC/BqqI,EAASrqI,GAAGw/C,QAAUA,IAAyB,YAAfllD,EAAMI,MAAsB2vI,EAASrqI,GAAG0qI,SAA0B,UAAfpwI,EAAMI,MAAoB2vI,EAASrqI,GAAG2qI,QAC3HX,GAAa1vI,EAAO+vI,EAASrqI,GAAIw/C,EAAOhhD,GAM9C,GAAM5C,KAAOgtI,GAEb,IAAK,IAAIvrH,EAAK,EAAGA,EAAKurH,GAAUhtI,GAAK1D,OAAQmlB,IAC3C,IAAmB,YAAf/iB,EAAMI,MAAsBkuI,GAAUhtI,GAAKyhB,GAAIqtH,SAA0B,UAAfpwI,EAAMI,MAAoBkuI,GAAUhtI,GAAKyhB,GAAIstH,QACrG/B,GAAUhtI,GAAKyhB,GAAIzhB,IAAK,CAM1B,IALA,IAAI+tI,EAASf,GAAUhtI,GAAKyhB,GACxBisH,EAAWK,EAAOL,SAClBsB,EAAcjB,EAAO/tI,IAAI4H,MAAM8lI,GAC/BuB,EAAmB,GAEd5sI,EAAI,EAAGA,EAAI2sI,EAAY1yI,OAAQ+F,IACtC4sI,EAAiB71I,KAAKi0I,GAAK2B,EAAY3sI,KAGrC4sI,EAAiB56H,OAAO4iB,KAAK,MAAQg2G,GAAU54H,OAAO4iB,KAAK,KAE7Dm3G,GAAa1vI,EAAOqvI,EAAQnqF,EAAOhhD,EAEvC,CAzGyC,CA4G/C,CAOA,SAAS,GAAQ5C,EAAKsqC,EAAQlS,GAC5B60G,GAAY,GACZ,IAAIzoI,EAAOmmI,GAAQ3qI,GAEf0qI,EAAO,GACP9mF,EAAQ,MAERhhD,EAAU7G,SAEVqI,EAAI,EACJ2qI,GAAQ,EACRD,GAAU,EACVpB,EAAW,IACXwB,GAAU,EAsBd,SApBentI,IAAXq2B,GAA0C,mBAAXkS,IACjClS,EAASkS,GAGoC,oBAA3CxmC,OAAOtF,UAAUuF,SAAS/F,KAAKssC,KAC7BA,EAAOsZ,QAAOA,EAAQtZ,EAAOsZ,OAE7BtZ,EAAO1nC,UAASA,EAAU0nC,EAAO1nC,SAEjC0nC,EAAOykG,QAAOA,EAAQzkG,EAAOykG,YAEVhtI,IAAnBuoC,EAAOwkG,UAAuBA,EAAUxkG,EAAOwkG,cAE5B/sI,IAAnBuoC,EAAO4kG,UAAuBA,EAAU5kG,EAAO4kG,SAEpB,iBAApB5kG,EAAOojG,WAAuBA,EAAWpjG,EAAOojG,WAGvC,iBAAXpjG,IAAqBsZ,EAAQtZ,GAEjClmC,EAAII,EAAKlI,OAAQ8H,IAGtBsmI,EAAO,IAFP1qI,EAAMwE,EAAKJ,GAAGwD,MAAM8lI,IAIZpxI,OAAS,IAAGouI,EAAOD,GAAQgC,GAAWzsI,KAG9CA,EAAc,OADdA,EAAMA,EAAIA,EAAI1D,OAAS,IACH,IAAM+wI,GAAKrtI,MAGlBgtI,KAAYA,GAAUhtI,GAAO,IAE1CgtI,GAAUhtI,GAAK5G,KAAK,CAClB21I,MAAOA,EACPD,QAASA,EACTlrF,MAAOA,EACP8mF,KAAMA,EACN4D,SAAU9pI,EAAKJ,GACfg0B,OAAQA,EACRp4B,IAAKwE,EAAKJ,GACVspI,SAAUA,EACV9qI,QAASA,SAKU,IAAZA,IAlEb,SAAuBA,GACrB,OAAOwqI,GAAoB7wI,QAAQqG,IAAY,CACjD,CAgEyCusI,CAAcvsI,IAAY+F,SAC/DykI,GAAoBh0I,KAAKwJ,GACzB0nI,GAAS1nI,EAAS,WAAW,SAAU81C,GACrC,GAASA,EAAG91C,EACd,GAAGssI,GAEEhC,KACHA,IAAkB,EAClB5C,GAAS3hI,OAAQ,SAAS,WACxBskI,GAAY,EACd,GAAGiC,IAGL5E,GAAS1nI,EAAS,SAAS,SAAU81C,GACnC,GAASA,EAAG91C,GA7TlB,SAAuBlE,GACrB,IAAIsB,EAAMtB,EAAMovI,SAAWpvI,EAAM+kC,OAAS/kC,EAAMgwI,SAE5CtqI,EAAI6oI,GAAU1wI,QAAQyD,GAe1B,GAZIoE,GAAK,GACP6oI,GAAUx1F,OAAOrzC,EAAG,GAIlB1F,EAAMsB,KAAmC,SAA5BtB,EAAMsB,IAAI5B,eACzB6uI,GAAUx1F,OAAO,EAAGw1F,GAAU3wI,QAIpB,KAAR0D,GAAsB,MAARA,IAAaA,EAAM,IAEjCA,KAAO+sI,GAGT,IAAK,IAAIpzE,KAFTozE,GAAM/sI,IAAO,EAECysI,GACRA,GAAU9yE,KAAO35D,IAAK,GAAQ25D,IAAK,EAG7C,CAqSMy1E,CAAc12F,EAChB,GAAGw2F,GAEP,CAeA,IAAIG,GAAO,CACTC,oBApYF,WACE,OAAOrC,GAAU/rI,KAAI,SAAUumB,GAC7B,OA7ByBnY,EA6BXmY,EA5BT3jB,OAAOU,KAAKomI,IAASjpH,MAAK,SAAUg4C,GACzC,OAAOixE,GAAQjxE,KAAOrqD,CACxB,KAGgB,SAAqBA,GACrC,OAAOxL,OAAOU,KAAKioI,IAAW9qH,MAAK,SAAUg4C,GAC3C,OAAO8yE,GAAU9yE,KAAOrqD,CAC1B,GACF,CAmBwBigI,CAAY9nH,IAAMksC,OAAO67E,aAAa/nH,GA7BjD,IAAgBnY,CA8B3B,GACF,EAiYEi+H,SAAUA,GACVvuD,SAAU,GACVywD,YAzWF,SAAqB7rF,EAAO8rF,GAC1B,IAAIC,EACAvrI,EAIJ,IAAK,IAAIpE,KAFJ4jD,IAAOA,EAAQ,MAEJopF,GACd,GAAIlpI,OAAOtF,UAAUgb,eAAexb,KAAKgvI,GAAWhtI,GAGlD,IAFA2vI,EAAW3C,GAAUhtI,GAEhBoE,EAAI,EAAGA,EAAIurI,EAASrzI,QACnBqzI,EAASvrI,GAAGw/C,QAAUA,EAAO+rF,EAASl4F,OAAOrzC,EAAG,GAAQA,IAM9D,OAAew/C,GAAO2pF,GAASmC,GAAY,MACjD,EAwVEE,mBA5YF,WACE,OAAO3C,GAAU5wI,MAAM,EACzB,EA2YEwzI,UApXF,SAAmB/B,GAKjB,MAJuB,iBAAZA,IACTA,EAAUT,GAAKS,KAGsB,IAAhCb,GAAU1wI,QAAQuxI,EAC3B,EA+WEjtI,OAlYF,SAAgBnC,GACd,IAAIsG,EAAStG,EAAMsG,QAAUtG,EAAMoxI,WAC/BhmG,EAAU9kC,EAAO8kC,QACjBimG,GAAO,EAMX,OAJI/qI,EAAOw+B,oBAAkC,UAAZsG,GAAmC,aAAZA,GAAsC,WAAZA,GAA0B9kC,EAAOgrI,YACjHD,GAAO,GAGFA,CACT,EAyXEr2B,QArBF,SAAiB40B,GACf,IAAI1qF,EAAQ3+C,UAAU3I,OAAS,QAAsByF,IAAjBkD,UAAU,GAAmBA,UAAU,GAAK,MAChFnB,OAAOU,KAAKwoI,IAAW7nI,SAAQ,SAAUnF,GACvC,IAAIjD,EAAOiwI,GAAUhtI,GAAK2hB,MAAK,SAAU3a,GACvC,OAAOA,EAAK48C,QAAUA,GAAS58C,EAAKsnI,WAAaA,CACnD,IAEIvxI,GAAQA,EAAKq7B,QACfr7B,EAAKq7B,QAET,GACF,EAWE63G,OA9TF,SAAgBC,GAEd,QAAwB,IAAbA,EACTpsI,OAAOU,KAAKwoI,IAAW7nI,SAAQ,SAAUnF,GACvC,cAAcgtI,GAAUhtI,EAC1B,SACK,GAAIkD,MAAMC,QAAQ+sI,GAEvBA,EAAS/qI,SAAQ,SAAUi3E,GACrBA,EAAKp8E,KAAKwtI,GAAWpxD,EAC3B,SACK,GAAwB,iBAAb8zD,EAEZA,EAASlwI,KAAKwtI,GAAW0C,QACxB,GAAwB,iBAAbA,EAAuB,CACvC,IAAK,IAAIj7H,EAAOhQ,UAAU3I,OAAQwF,EAAO,IAAIoB,MAAM+R,EAAO,EAAIA,EAAO,EAAI,GAAIC,EAAO,EAAGA,EAAOD,EAAMC,IAClGpT,EAAKoT,EAAO,GAAKjQ,UAAUiQ,GAK7B,IAAI0uC,EAAQ9hD,EAAK,GACbs2B,EAASt2B,EAAK,GAEG,mBAAV8hD,IACTxrB,EAASwrB,EACTA,EAAQ,IAGV4pF,GAAW,CACTxtI,IAAKkwI,EACLtsF,MAAOA,EACPxrB,OAAQA,EACRs1G,SAAU,KAEd,CACF,EA2REyC,OAAQvF,GACRt2H,SAAUm4H,GACVK,YAAaA,IAGf,IAAK,IAAIzqI,MAAKgtI,GACRvrI,OAAOtF,UAAUgb,eAAexb,KAAKqxI,GAAMhtI,MAC7C,GAAQA,IAAKgtI,GAAKhtI,KAItB,GAAsB,oBAAXsG,OAAwB,CACjC,IAAIynI,GAAWznI,OAAO0nI,QAEtB,GAAQC,WAAa,SAAUC,GAK7B,OAJIA,GAAQ5nI,OAAO0nI,UAAY,KAC7B1nI,OAAO0nI,QAAUD,IAGZ,EACT,EAEAznI,OAAO0nI,QAAU,EACnB,CC/SYv3I,QA2mBZ,cAAiC,KAEd03I,UAAY,GA8B/B,cAAiC,KAEdC,UAAY,GAkD/B,MAoBMC,GAAc,CAChBC,eAAgB,QAChBC,iBAAkB,aAClBC,aAAc,WACdC,eAAgB,QAChBC,iBAAkB,aAClBC,aAAc,YAEZC,GAAmB,CACrBC,cAAc,EACdj5E,YAAa,SACbk5E,uBAAuB,EACvBC,iBAAiB,GAmHrB,SAAS,GAAazuI,EAAM+D,EAAS85C,GACjC,MAAM6wF,EAAc,aAAa1uI,EAAK,GAAGk3B,gBAAgBl3B,EAAK2uI,OAAO,KAC/DC,EAAoBb,GAAY/tI,GAChCqtD,EAAUtpD,EAAQ/D,IAAS69C,EAAQ6wF,IAAgB7wF,EAAQ+wF,IAAsB,IACvF,OAkBsB,KADT32E,EAjBE5K,GAkBJ1zD,QAAiBs+D,EAAIjjB,OAlBDqY,EAAQpoD,MAAM,KAAnB,GAiB9B,IAAiBgzD,CAhBjB,CC9oCA,MCAM42E,GAAe,CAAC,UAAW,YCFlB,SAAS3jI,GAAUC,GAChC,GAAY,MAARA,EACF,OAAOnF,OAGT,GAAwB,oBAApBmF,EAAK/J,WAAkC,CACzC,IAAIgK,EAAgBD,EAAKC,cACzB,OAAOA,GAAgBA,EAAcC,aAAwBrF,MAC/D,CAEA,OAAOmF,CACT,CCTA,SAASG,GAAUH,GAEjB,OAAOA,aADUD,GAAUC,GAAMI,SACIJ,aAAgBI,OACvD,CAEA,SAASC,GAAcL,GAErB,OAAOA,aADUD,GAAUC,GAAMM,aACIN,aAAgBM,WACvD,CAEA,SAASC,GAAaP,GAEpB,MAA0B,oBAAfQ,aAKJR,aADUD,GAAUC,GAAMQ,YACIR,aAAgBQ,WACvD,CCpBO,IAAI,GAAM/S,KAAKiT,IACX,GAAMjT,KAAKE,IACX,GAAQF,KAAKmT,MCFT,SAAS+iI,KACtB,IAAIC,EAASh/H,UAAUi/H,cAEvB,OAAc,MAAVD,GAAkBA,EAAOE,OACpBF,EAAOE,OAAO1wI,KAAI,SAAU8F,GACjC,OAAOA,EAAK6qI,MAAQ,IAAM7qI,EAAK6gH,OACjC,IAAG5wF,KAAK,KAGHvkB,UAAUC,SACnB,CCTe,SAASm/H,KACtB,OAAQ,iCAAiC1vI,KAAKqvI,KAChD,CCCe,SAAS9iI,GAAsB/L,EAASgM,EAAcmjI,QAC9C,IAAjBnjI,IACFA,GAAe,QAGO,IAApBmjI,IACFA,GAAkB,GAGpB,IAAI1gI,EAAazO,EAAQ+L,wBACrBG,EAAS,EACTC,EAAS,EAETH,GAAgBT,GAAcvL,KAChCkM,EAASlM,EAAQqM,YAAc,GAAI,GAAMoC,EAAWnC,OAAStM,EAAQqM,aAAmB,EACxFF,EAASnM,EAAQoM,aAAe,GAAI,GAAMqC,EAAWlC,QAAUvM,EAAQoM,cAAoB,GAG7F,IACIoD,GADOnE,GAAUrL,GAAWiL,GAAUjL,GAAW+F,QAC3ByJ,eAEtB4/H,GAAoBF,MAAsBC,EAC1CziI,GAAK+B,EAAW1F,MAAQqmI,GAAoB5/H,EAAiBA,EAAeb,WAAa,IAAMzC,EAC/FS,GAAK8B,EAAWjC,KAAO4iI,GAAoB5/H,EAAiBA,EAAeZ,UAAY,IAAMzC,EAC7FG,EAAQmC,EAAWnC,MAAQJ,EAC3BK,EAASkC,EAAWlC,OAASJ,EACjC,MAAO,CACLG,MAAOA,EACPC,OAAQA,EACRC,IAAKG,EACL1D,MAAOyD,EAAIJ,EACXG,OAAQE,EAAIJ,EACZxD,KAAM2D,EACNA,EAAGA,EACHC,EAAGA,EAEP,CCvCe,SAASC,GAAgB1B,GACtC,IAAI2B,EAAM5B,GAAUC,GAGpB,MAAO,CACL4B,WAHeD,EAAIE,YAInBC,UAHcH,EAAII,YAKtB,CCTe,SAASC,GAAYlN,GAClC,OAAOA,GAAWA,EAAQmN,UAAY,IAAI3R,cAAgB,IAC5D,CCDe,SAAS4R,GAAmBpN,GAEzC,QAASqL,GAAUrL,GAAWA,EAAQmL,cACtCnL,EAAQ7G,WAAa4M,OAAO5M,UAAUkU,eACxC,CCFe,SAASC,GAAoBtN,GAQ1C,OAAO+L,GAAsBqB,GAAmBpN,IAAU+I,KAAO6D,GAAgB5M,GAAS8M,UAC5F,CCXe,SAAS,GAAiB9M,GACvC,OAAOiL,GAAUjL,GAASuN,iBAAiBvN,EAC7C,CCFe,SAASwN,GAAexN,GAErC,IAAIyN,EAAoB,GAAiBzN,GACrC0N,EAAWD,EAAkBC,SAC7BC,EAAYF,EAAkBE,UAC9BC,EAAYH,EAAkBG,UAElC,MAAO,6BAA6BpO,KAAKkO,EAAWE,EAAYD,EAClE,CCSe,SAASE,GAAiBC,EAAyBC,EAAcC,QAC9D,IAAZA,IACFA,GAAU,GAGZ,ICnBoC9C,ECJOlL,EFuBvCiO,EAA0B1C,GAAcwC,GACxCG,EAAuB3C,GAAcwC,IAf3C,SAAyB/N,GACvB,IAAIiM,EAAOjM,EAAQ+L,wBACfG,EAAS,GAAMD,EAAKK,OAAStM,EAAQqM,aAAe,EACpDF,EAAS,GAAMF,EAAKM,QAAUvM,EAAQoM,cAAgB,EAC1D,OAAkB,IAAXF,GAA2B,IAAXC,CACzB,CAU4DgC,CAAgBJ,GACtEV,EAAkBD,GAAmBW,GACrC9B,EAAOF,GAAsB+B,EAAyBI,EAAsBF,GAC5EI,EAAS,CACXtB,WAAY,EACZE,UAAW,GAETqB,EAAU,CACZ3B,EAAG,EACHC,EAAG,GAkBL,OAfIsB,IAA4BA,IAA4BD,MACxB,SAA9Bd,GAAYa,IAChBP,GAAeH,MACbe,GCnCgClD,EDmCT6C,KClCd9C,GAAUC,IAAUK,GAAcL,GCJxC,CACL4B,YAFyC9M,EDQbkL,GCNR4B,WACpBE,UAAWhN,EAAQgN,WDGZJ,GAAgB1B,IDoCnBK,GAAcwC,KAChBM,EAAUtC,GAAsBgC,GAAc,IACtCrB,GAAKqB,EAAaO,WAC1BD,EAAQ1B,GAAKoB,EAAaQ,WACjBlB,IACTgB,EAAQ3B,EAAIY,GAAoBD,KAI7B,CACLX,EAAGT,EAAKlD,KAAOqF,EAAOtB,WAAauB,EAAQ3B,EAC3CC,EAAGV,EAAKO,IAAM4B,EAAOpB,UAAYqB,EAAQ1B,EACzCL,MAAOL,EAAKK,MACZC,OAAQN,EAAKM,OAEjB,CGtDe,SAASiC,GAAcxO,GACpC,IAAIyO,EAAa1C,GAAsB/L,GAGnCsM,EAAQtM,EAAQqM,YAChBE,EAASvM,EAAQoM,aAUrB,OARIzT,KAAK+V,IAAID,EAAWnC,MAAQA,IAAU,IACxCA,EAAQmC,EAAWnC,OAGjB3T,KAAK+V,IAAID,EAAWlC,OAASA,IAAW,IAC1CA,EAASkC,EAAWlC,QAGf,CACLG,EAAG1M,EAAQ2O,WACXhC,EAAG3M,EAAQ4O,UACXtC,MAAOA,EACPC,OAAQA,EAEZ,CCrBe,SAASsC,GAAc7O,GACpC,MAA6B,SAAzBkN,GAAYlN,GACPA,EAMPA,EAAQ8O,cACR9O,EAAQ+O,aACRtD,GAAazL,GAAWA,EAAQgP,KAAO,OAEvC5B,GAAmBpN,EAGvB,CCde,SAASiP,GAAgB/D,GACtC,MAAI,CAAC,OAAQ,OAAQ,aAAavR,QAAQuT,GAAYhC,KAAU,EAEvDA,EAAKC,cAAc+D,KAGxB3D,GAAcL,IAASsC,GAAetC,GACjCA,EAGF+D,GAAgBJ,GAAc3D,GACvC,CCJe,SAASiE,GAAkBnP,EAASoP,GACjD,IAAIC,OAES,IAATD,IACFA,EAAO,IAGT,IAAIE,EAAeL,GAAgBjP,GAC/BuP,EAASD,KAAqE,OAAlDD,EAAwBrP,EAAQmL,oBAAyB,EAASkE,EAAsBH,MACpHrC,EAAM5B,GAAUqE,GAChBlN,EAASmN,EAAS,CAAC1C,GAAK9B,OAAO8B,EAAI2C,gBAAkB,GAAIhC,GAAe8B,GAAgBA,EAAe,IAAMA,EAC7GG,EAAcL,EAAKrE,OAAO3I,GAC9B,OAAOmN,EAASE,EAChBA,EAAY1E,OAAOoE,GAAkBN,GAAczM,IACrD,CCxBe,SAASsN,GAAe1P,GACrC,MAAO,CAAC,QAAS,KAAM,MAAMrG,QAAQuT,GAAYlN,KAAa,CAChE,CCKA,SAAS2P,GAAoB3P,GAC3B,OAAKuL,GAAcvL,IACoB,UAAvC,GAAiBA,GAASqI,SAInBrI,EAAQ+N,aAHN,IAIX,CAwCe,SAAS6B,GAAgB5P,GAItC,IAHA,IAAI+F,EAASkF,GAAUjL,GACnB+N,EAAe4B,GAAoB3P,GAEhC+N,GAAgB2B,GAAe3B,IAA6D,WAA5C,GAAiBA,GAAc1F,UACpF0F,EAAe4B,GAAoB5B,GAGrC,OAAIA,IAA+C,SAA9Bb,GAAYa,IAA0D,SAA9Bb,GAAYa,IAAwE,WAA5C,GAAiBA,GAAc1F,UAC3HtC,EAGFgI,GAhDT,SAA4B/N,GAC1B,IAAI6P,EAAY,WAAWrQ,KAAKqvI,MAGhC,GAFW,WAAWrvI,KAAKqvI,OAEftjI,GAAcvL,IAII,UAFX,GAAiBA,GAEnBqI,SACb,OAAO,KAIX,IAAI2H,EAAcnB,GAAc7O,GAMhC,IAJIyL,GAAauE,KACfA,EAAcA,EAAYhB,MAGrBzD,GAAcyE,IAAgB,CAAC,OAAQ,QAAQrW,QAAQuT,GAAY8C,IAAgB,GAAG,CAC3F,IAAIC,EAAM,GAAiBD,GAI3B,GAAsB,SAAlBC,EAAIC,WAA4C,SAApBD,EAAIE,aAA0C,UAAhBF,EAAIG,UAAiF,IAA1D,CAAC,YAAa,eAAezW,QAAQsW,EAAII,aAAsBR,GAAgC,WAAnBI,EAAII,YAA2BR,GAAaI,EAAIhS,QAAyB,SAAfgS,EAAIhS,OACjO,OAAO+R,EAEPA,EAAcA,EAAYjB,UAE9B,CAEA,OAAO,IACT,CAgByBuB,CAAmBtQ,IAAY+F,CACxD,CCpEO,IAAI,GAAM,MACN0G,GAAS,SACTxD,GAAQ,QACRF,GAAO,OACP,GAAO,OACP0H,GAAiB,CAAC,GAAKhE,GAAQxD,GAAOF,IACtC,GAAQ,QACR2H,GAAM,MAENC,GAAW,WACXC,GAAS,SAETC,GAAmCJ,GAAeK,QAAO,SAAUC,EAAKC,GACjF,OAAOD,EAAIhG,OAAO,CAACiG,EAAY,IAAM,GAAOA,EAAY,IAAMN,IAChE,GAAG,IACQ,GAA0B,GAAG3F,OAAO0F,GAAgB,CAAC,KAAOK,QAAO,SAAUC,EAAKC,GAC3F,OAAOD,EAAIhG,OAAO,CAACiG,EAAWA,EAAY,IAAM,GAAOA,EAAY,IAAMN,IAC3E,GAAG,IAaQQ,GAAiB,CAXJ,aACN,OACK,YAEC,aACN,OACK,YAEE,cACN,QACK,cC3BxB,SAASC,GAAMC,GACb,IAAI9S,EAAM,IAAI+S,IACVC,EAAU,IAAIC,IACdC,EAAS,GAKb,SAASC,EAAKC,GACZJ,EAAQzS,IAAI6S,EAAS3R,MACN,GAAGgL,OAAO2G,EAASC,UAAY,GAAID,EAASE,kBAAoB,IACtErP,SAAQ,SAAUsP,GACzB,IAAKP,EAAQQ,IAAID,GAAM,CACrB,IAAIE,EAAczT,EAAI0T,IAAIH,GAEtBE,GACFN,EAAKM,EAET,CACF,IACAP,EAAOhb,KAAKkb,EACd,CAQA,OAzBAN,EAAU7O,SAAQ,SAAUmP,GAC1BpT,EAAI2T,IAAIP,EAAS3R,KAAM2R,EACzB,IAiBAN,EAAU7O,SAAQ,SAAUmP,GACrBJ,EAAQQ,IAAIJ,EAAS3R,OAExB0R,EAAKC,EAET,IACOF,CACT,CClBA,IAEIU,GAAkB,CACpBlB,UAAW,SACXI,UAAW,GACXe,SAAU,YAGZ,SAASC,KACP,IAAK,IAAIC,EAAOhQ,UAAU3I,OAAQwF,EAAO,IAAIoB,MAAM+R,GAAOC,EAAO,EAAGA,EAAOD,EAAMC,IAC/EpT,EAAKoT,GAAQjQ,UAAUiQ,GAGzB,OAAQpT,EAAKqT,MAAK,SAAUvS,GAC1B,QAASA,GAAoD,mBAAlCA,EAAQ+L,sBACrC,GACF,CAEO,SAASyG,GAAgBC,QACL,IAArBA,IACFA,EAAmB,CAAC,GAGtB,IAAIC,EAAoBD,EACpBE,EAAwBD,EAAkBE,iBAC1CA,OAA6C,IAA1BD,EAAmC,GAAKA,EAC3DE,EAAyBH,EAAkBI,eAC3CA,OAA4C,IAA3BD,EAAoCX,GAAkBW,EAC3E,OAAO,SAAsBE,EAAWnC,EAAQ9M,QAC9B,IAAZA,IACFA,EAAUgP,GAGZ,IC/C6BE,EAC3BC,ED8CE3X,EAAQ,CACV0V,UAAW,SACXkC,iBAAkB,GAClBpP,QAAS5C,OAAOiS,OAAO,CAAC,EAAGjB,GAAiBY,GAC5CM,cAAe,CAAC,EAChBC,SAAU,CACRN,UAAWA,EACXnC,OAAQA,GAEV0C,WAAY,CAAC,EACbC,OAAQ,CAAC,GAEPC,EAAmB,GACnBC,GAAc,EACdzQ,EAAW,CACb1H,MAAOA,EACPoY,WAAY,SAAoBC,GAC9B,IAAI7P,EAAsC,mBAArB6P,EAAkCA,EAAiBrY,EAAMwI,SAAW6P,EACzFC,IACAtY,EAAMwI,QAAU5C,OAAOiS,OAAO,CAAC,EAAGL,EAAgBxX,EAAMwI,QAASA,GACjExI,EAAMuY,cAAgB,CACpBd,UAAW1H,GAAU0H,GAAa5D,GAAkB4D,GAAaA,EAAUe,eAAiB3E,GAAkB4D,EAAUe,gBAAkB,GAC1IlD,OAAQzB,GAAkByB,IAI5B,IEzE4BQ,EAC9B2C,EFwEMb,EDvCG,SAAwB9B,GAErC,IAAI8B,EAAmB/B,GAAMC,GAE7B,OAAOF,GAAeJ,QAAO,SAAUC,EAAKiD,GAC1C,OAAOjD,EAAIhG,OAAOmI,EAAiBjV,QAAO,SAAUyT,GAClD,OAAOA,EAASsC,QAAUA,CAC5B,IACF,GAAG,GACL,CC8B+BC,EEzEK7C,EFyEsB,GAAGrG,OAAO6H,EAAkBtX,EAAMwI,QAAQsN,WExE9F2C,EAAS3C,EAAUN,QAAO,SAAUiD,EAAQG,GAC9C,IAAIC,EAAWJ,EAAOG,EAAQnU,MAK9B,OAJAgU,EAAOG,EAAQnU,MAAQoU,EAAWjT,OAAOiS,OAAO,CAAC,EAAGgB,EAAUD,EAAS,CACrEpQ,QAAS5C,OAAOiS,OAAO,CAAC,EAAGgB,EAASrQ,QAASoQ,EAAQpQ,SACrD3J,KAAM+G,OAAOiS,OAAO,CAAC,EAAGgB,EAASha,KAAM+Z,EAAQ/Z,QAC5C+Z,EACEH,CACT,GAAG,CAAC,GAEG7S,OAAOU,KAAKmS,GAAQzV,KAAI,SAAUlB,GACvC,OAAO2W,EAAO3W,EAChB,MFsGM,OAvCA9B,EAAM4X,iBAAmBA,EAAiBjV,QAAO,SAAUmW,GACzD,OAAOA,EAAE7d,OACX,IAoJF+E,EAAM4X,iBAAiB3Q,SAAQ,SAAU8R,GACvC,IAAItU,EAAOsU,EAAMtU,KACbuU,EAAgBD,EAAMvQ,QACtBA,OAA4B,IAAlBwQ,EAA2B,CAAC,EAAIA,EAC1CC,EAASF,EAAME,OAEnB,GAAsB,mBAAXA,EAAuB,CAChC,IAAIC,EAAYD,EAAO,CACrBjZ,MAAOA,EACPyE,KAAMA,EACNiD,SAAUA,EACVc,QAASA,IAKX0P,EAAiBhd,KAAKge,GAFT,WAAmB,EAGlC,CACF,IAjISxR,EAASyR,QAClB,EAMAC,YAAa,WACX,IAAIjB,EAAJ,CAIA,IAAIkB,EAAkBrZ,EAAM+X,SACxBN,EAAY4B,EAAgB5B,UAC5BnC,EAAS+D,EAAgB/D,OAG7B,GAAKwB,GAAiBW,EAAWnC,GAAjC,CASAtV,EAAMsZ,MAAQ,CACZ7B,UAAWlF,GAAiBkF,EAAWnD,GAAgBgB,GAAoC,UAA3BtV,EAAMwI,QAAQqO,UAC9EvB,OAAQpC,GAAcoC,IAOxBtV,EAAMuZ,OAAQ,EACdvZ,EAAM0V,UAAY1V,EAAMwI,QAAQkN,UAKhC1V,EAAM4X,iBAAiB3Q,SAAQ,SAAUmP,GACvC,OAAOpW,EAAM8X,cAAc1B,EAAS3R,MAAQmB,OAAOiS,OAAO,CAAC,EAAGzB,EAASvX,KACzE,IAGA,IAFA,IAES2a,EAAQ,EAAGA,EAAQxZ,EAAM4X,iBAAiBxZ,OAAQob,IAUzD,IAAoB,IAAhBxZ,EAAMuZ,MAAV,CAMA,IAAIE,EAAwBzZ,EAAM4X,iBAAiB4B,GAC/C9B,EAAK+B,EAAsB/B,GAC3BgC,EAAyBD,EAAsBjR,QAC/CE,OAAsC,IAA3BgR,EAAoC,CAAC,EAAIA,EACpDjV,EAAOgV,EAAsBhV,KAEf,mBAAPiT,IACT1X,EAAQ0X,EAAG,CACT1X,MAAOA,EACPwI,QAASE,EACTjE,KAAMA,EACNiD,SAAUA,KACN1H,EAdR,MAHEA,EAAMuZ,OAAQ,EACdC,GAAS,CAnCb,CAbA,CAmEF,EAGAL,QClM2BzB,EDkMV,WACf,OAAO,IAAIiC,SAAQ,SAAUC,GAC3BlS,EAAS0R,cACTQ,EAAQ5Z,EACV,GACF,ECrMG,WAUL,OATK2X,IACHA,EAAU,IAAIgC,SAAQ,SAAUC,GAC9BD,QAAQC,UAAUC,MAAK,WACrBlC,OAAU9T,EACV+V,EAAQlC,IACV,GACF,KAGKC,CACT,GD2LImC,QAAS,WACPxB,IACAH,GAAc,CAChB,GAGF,IAAKrB,GAAiBW,EAAWnC,GAK/B,OAAO5N,EAmCT,SAAS4Q,IACPJ,EAAiBjR,SAAQ,SAAUyQ,GACjC,OAAOA,GACT,IACAQ,EAAmB,EACrB,CAEA,OAvCAxQ,EAAS0Q,WAAW5P,GAASqR,MAAK,SAAU7Z,IACrCmY,GAAe3P,EAAQuR,eAC1BvR,EAAQuR,cAAc/Z,EAE1B,IAmCO0H,CACT,CACF,CACO,IG9PHsS,GAAU,CACZA,SAAS,GCFI,SAASC,GAAiBvE,GACvC,OAAOA,EAAUhM,MAAM,KAAK,EAC9B,CCHe,SAASwQ,GAAaxE,GACnC,OAAOA,EAAUhM,MAAM,KAAK,EAC9B,CCFe,SAASyQ,GAAyBzE,GAC/C,MAAO,CAAC,MAAO,UAAUrX,QAAQqX,IAAc,EAAI,IAAM,GAC3D,CCEe,SAAS0E,GAAeC,GACrC,IAOItH,EAPA0E,EAAY4C,EAAK5C,UACjB/S,EAAU2V,EAAK3V,QACfgR,EAAY2E,EAAK3E,UACjB4E,EAAgB5E,EAAYuE,GAAiBvE,GAAa,KAC1D6E,EAAY7E,EAAYwE,GAAaxE,GAAa,KAClD8E,EAAU/C,EAAUrG,EAAIqG,EAAUzG,MAAQ,EAAItM,EAAQsM,MAAQ,EAC9DyJ,EAAUhD,EAAUpG,EAAIoG,EAAUxG,OAAS,EAAIvM,EAAQuM,OAAS,EAGpE,OAAQqJ,GACN,KAAK,GACHvH,EAAU,CACR3B,EAAGoJ,EACHnJ,EAAGoG,EAAUpG,EAAI3M,EAAQuM,QAE3B,MAEF,KAAKE,GACH4B,EAAU,CACR3B,EAAGoJ,EACHnJ,EAAGoG,EAAUpG,EAAIoG,EAAUxG,QAE7B,MAEF,KAAKtD,GACHoF,EAAU,CACR3B,EAAGqG,EAAUrG,EAAIqG,EAAUzG,MAC3BK,EAAGoJ,GAEL,MAEF,KAAKhN,GACHsF,EAAU,CACR3B,EAAGqG,EAAUrG,EAAI1M,EAAQsM,MACzBK,EAAGoJ,GAEL,MAEF,QACE1H,EAAU,CACR3B,EAAGqG,EAAUrG,EACbC,EAAGoG,EAAUpG,GAInB,IAAIqJ,EAAWJ,EAAgBH,GAAyBG,GAAiB,KAEzE,GAAgB,MAAZI,EAAkB,CACpB,IAAIzU,EAAmB,MAAbyU,EAAmB,SAAW,QAExC,OAAQH,GACN,KAAK,GACHxH,EAAQ2H,GAAY3H,EAAQ2H,IAAajD,EAAUxR,GAAO,EAAIvB,EAAQuB,GAAO,GAC7E,MAEF,KAAKmP,GACHrC,EAAQ2H,GAAY3H,EAAQ2H,IAAajD,EAAUxR,GAAO,EAAIvB,EAAQuB,GAAO,GAKnF,CAEA,OAAO8M,CACT,CC5DA,IAAI4H,GAAa,CACfzJ,IAAK,OACLvD,MAAO,OACPwD,OAAQ,OACR1D,KAAM,QAgBD,SAASmN,GAAYC,GAC1B,IAAIC,EAEAxF,EAASuF,EAAMvF,OACfyF,EAAaF,EAAME,WACnBrF,EAAYmF,EAAMnF,UAClB6E,EAAYM,EAAMN,UAClBxH,EAAU8H,EAAM9H,QAChBhG,EAAW8N,EAAM9N,SACjBiO,EAAkBH,EAAMG,gBACxBC,EAAWJ,EAAMI,SACjBC,EAAeL,EAAMK,aACrBxI,EAAUmI,EAAMnI,QAChByI,EAAapI,EAAQ3B,EACrBA,OAAmB,IAAf+J,EAAwB,EAAIA,EAChCC,EAAarI,EAAQ1B,EACrBA,OAAmB,IAAf+J,EAAwB,EAAIA,EAEhCrC,EAAgC,mBAAjBmC,EAA8BA,EAAa,CAC5D9J,EAAGA,EACHC,EAAGA,IACA,CACHD,EAAGA,EACHC,EAAGA,GAGLD,EAAI2H,EAAM3H,EACVC,EAAI0H,EAAM1H,EACV,IAAIgK,EAAOtI,EAAQuI,eAAe,KAC9BC,EAAOxI,EAAQuI,eAAe,KAC9BE,EAAQ/N,GACRgO,EAAQ,GACRlK,EAAM9G,OAEV,GAAIwQ,EAAU,CACZ,IAAIxI,EAAe6B,GAAgBgB,GAC/BoG,EAAa,eACbC,EAAY,cAEZlJ,IAAiB9C,GAAU2F,IAGmB,WAA5C,GAFJ7C,EAAeX,GAAmBwD,IAECvI,UAAsC,aAAbA,IAC1D2O,EAAa,eACbC,EAAY,gBAOZjG,IAAc,KAAQA,IAAcjI,IAAQiI,IAAc/H,KAAU4M,IAAcnF,MACpFqG,EAAQtK,GAGRE,IAFcqB,GAAWD,IAAiBlB,GAAOA,EAAI2C,eAAiB3C,EAAI2C,eAAejD,OACzFwB,EAAaiJ,IACEX,EAAW9J,OAC1BI,GAAK2J,EAAkB,GAAK,GAG1BtF,IAAcjI,KAASiI,IAAc,IAAOA,IAAcvE,IAAWoJ,IAAcnF,MACrFoG,EAAQ7N,GAGRyD,IAFcsB,GAAWD,IAAiBlB,GAAOA,EAAI2C,eAAiB3C,EAAI2C,eAAelD,MACzFyB,EAAakJ,IACEZ,EAAW/J,MAC1BI,GAAK4J,EAAkB,GAAK,EAEhC,CAEA,IAgBMY,EAhBFC,EAAejW,OAAOiS,OAAO,CAC/B9K,SAAUA,GACTkO,GAAYN,IAEXmB,GAAyB,IAAjBZ,EAnFd,SAA2Bb,GACzB,IAAIjJ,EAAIiJ,EAAKjJ,EACTC,EAAIgJ,EAAKhJ,EAET0K,EADMtR,OACIuR,kBAAoB,EAClC,MAAO,CACL5K,EAAG,GAAMA,EAAI2K,GAAOA,GAAO,EAC3B1K,EAAG,GAAMA,EAAI0K,GAAOA,GAAO,EAE/B,CA0EsCE,CAAkB,CACpD7K,EAAGA,EACHC,EAAGA,IACA,CACHD,EAAGA,EACHC,EAAGA,GAML,OAHAD,EAAI0K,EAAM1K,EACVC,EAAIyK,EAAMzK,EAEN2J,EAGKpV,OAAOiS,OAAO,CAAC,EAAGgE,IAAeD,EAAiB,CAAC,GAAkBH,GAASF,EAAO,IAAM,GAAIK,EAAeJ,GAASH,EAAO,IAAM,GAAIO,EAAehH,WAAarD,EAAIyK,kBAAoB,IAAM,EAAI,aAAe5K,EAAI,OAASC,EAAI,MAAQ,eAAiBD,EAAI,OAASC,EAAI,SAAUuK,IAG5RhW,OAAOiS,OAAO,CAAC,EAAGgE,IAAef,EAAkB,CAAC,GAAmBW,GAASF,EAAOlK,EAAI,KAAO,GAAIyJ,EAAgBU,GAASH,EAAOjK,EAAI,KAAO,GAAI0J,EAAgBlG,UAAY,GAAIkG,GAC9L,CCvHA,IAAIoB,GAAO,CACTzO,KAAM,QACNE,MAAO,OACPwD,OAAQ,MACRD,IAAK,UAEQ,SAASiL,GAAqBzG,GAC3C,OAAOA,EAAUpR,QAAQ,0BAA0B,SAAU8X,GAC3D,OAAOF,GAAKE,EACd,GACF,CCVA,IAAI,GAAO,CACTrgB,MAAO,MACPqZ,IAAK,SAEQ,SAASkH,GAA8B5G,GACpD,OAAOA,EAAUpR,QAAQ,cAAc,SAAU8X,GAC/C,OAAO,GAAKA,EACd,GACF,CCPe,SAASlR,GAASqR,EAAQC,GACvC,IAAIC,EAAWD,EAAME,aAAeF,EAAME,cAE1C,GAAIH,EAAOrR,SAASsR,GAClB,OAAO,EAEJ,GAAIC,GAAYtM,GAAasM,GAAW,CACzC,IAAI5O,EAAO2O,EAEX,EAAG,CACD,GAAI3O,GAAQ0O,EAAOI,WAAW9O,GAC5B,OAAO,EAITA,EAAOA,EAAK4F,YAAc5F,EAAK6F,IACjC,OAAS7F,EACX,CAGF,OAAO,CACT,CCtBe,SAAS+O,GAAiBjM,GACvC,OAAO/K,OAAOiS,OAAO,CAAC,EAAGlH,EAAM,CAC7BlD,KAAMkD,EAAKS,EACXF,IAAKP,EAAKU,EACV1D,MAAOgD,EAAKS,EAAIT,EAAKK,MACrBG,OAAQR,EAAKU,EAAIV,EAAKM,QAE1B,CCqBA,SAAS4L,GAA2BnY,EAASoY,EAAgBjG,GAC3D,OAAOiG,IAAmBzH,GAAWuH,GCzBxB,SAAyBlY,EAASmS,GAC/C,IAAItF,EAAM5B,GAAUjL,GAChBqY,EAAOjL,GAAmBpN,GAC1BwP,EAAiB3C,EAAI2C,eACrBlD,EAAQ+L,EAAKC,YACb/L,EAAS8L,EAAKE,aACd7L,EAAI,EACJC,EAAI,EAER,GAAI6C,EAAgB,CAClBlD,EAAQkD,EAAelD,MACvBC,EAASiD,EAAejD,OACxB,IAAI8iI,EAAiBH,MAEjBG,IAAmBA,GAA+B,UAAbl9H,KACvCzF,EAAI8C,EAAeb,WACnBhC,EAAI6C,EAAeZ,UAEvB,CAEA,MAAO,CACLtC,MAAOA,EACPC,OAAQA,EACRG,EAAGA,EAAIY,GAAoBtN,GAC3B2M,EAAGA,EAEP,CDDwD6L,CAAgBxY,EAASmS,IAAa9G,GAAU+M,GAdxG,SAAoCpY,EAASmS,GAC3C,IAAIlG,EAAOF,GAAsB/L,GAAS,EAAoB,UAAbmS,GASjD,OARAlG,EAAKO,IAAMP,EAAKO,IAAMxM,EAAQuO,UAC9BtC,EAAKlD,KAAOkD,EAAKlD,KAAO/I,EAAQsO,WAChCrC,EAAKQ,OAASR,EAAKO,IAAMxM,EAAQuY,aACjCtM,EAAKhD,MAAQgD,EAAKlD,KAAO/I,EAAQsY,YACjCrM,EAAKK,MAAQtM,EAAQsY,YACrBrM,EAAKM,OAASvM,EAAQuY,aACtBtM,EAAKS,EAAIT,EAAKlD,KACdkD,EAAKU,EAAIV,EAAKO,IACPP,CACT,CAG0HwM,CAA2BL,EAAgBjG,GAAY+F,GEtBlK,SAAyBlY,GACtC,IAAIqP,EAEAgJ,EAAOjL,GAAmBpN,GAC1B0Y,EAAY9L,GAAgB5M,GAC5BkP,EAA0D,OAAlDG,EAAwBrP,EAAQmL,oBAAyB,EAASkE,EAAsBH,KAChG5C,EAAQ,GAAI+L,EAAKM,YAAaN,EAAKC,YAAapJ,EAAOA,EAAKyJ,YAAc,EAAGzJ,EAAOA,EAAKoJ,YAAc,GACvG/L,EAAS,GAAI8L,EAAKO,aAAcP,EAAKE,aAAcrJ,EAAOA,EAAK0J,aAAe,EAAG1J,EAAOA,EAAKqJ,aAAe,GAC5G7L,GAAKgM,EAAU5L,WAAaQ,GAAoBtN,GAChD2M,GAAK+L,EAAU1L,UAMnB,MAJiD,QAA7C,GAAiBkC,GAAQmJ,GAAMQ,YACjCnM,GAAK,GAAI2L,EAAKC,YAAapJ,EAAOA,EAAKoJ,YAAc,GAAKhM,GAGrD,CACLA,MAAOA,EACPC,OAAQA,EACRG,EAAGA,EACHC,EAAGA,EAEP,CFCkMmM,CAAgB1L,GAAmBpN,IACrO,CG7Be,SAAS+Y,GAAmBC,GACzC,OAAO9X,OAAOiS,OAAO,CAAC,ECDf,CACL3G,IAAK,EACLvD,MAAO,EACPwD,OAAQ,EACR1D,KAAM,GDHuCiQ,EACjD,CEHe,SAASC,GAAgB5b,EAAOuE,GAC7C,OAAOA,EAAKkP,QAAO,SAAUoI,EAAS9b,GAEpC,OADA8b,EAAQ9b,GAAOC,EACR6b,CACT,GAAG,CAAC,EACN,CCKe,SAASC,GAAe7d,EAAOwI,QAC5B,IAAZA,IACFA,EAAU,CAAC,GAGb,IAAIE,EAAWF,EACXsV,EAAqBpV,EAASgN,UAC9BA,OAAmC,IAAvBoI,EAAgC9d,EAAM0V,UAAYoI,EAC9Dk2H,EAAoBtrI,EAASmO,SAC7BA,OAAiC,IAAtBm9H,EAA+Bh0I,EAAM6W,SAAWm9H,EAC3Dj2H,EAAoBrV,EAASsV,SAC7BA,OAAiC,IAAtBD,ErBbY,kBqBaqCA,EAC5DE,EAAwBvV,EAASwV,aACjCA,OAAyC,IAA1BD,EAAmC5I,GAAW4I,EAC7DE,EAAwBzV,EAAS0V,eACjCA,OAA2C,IAA1BD,EAAmC7I,GAAS6I,EAC7DE,EAAuB3V,EAAS4V,YAChCA,OAAuC,IAAzBD,GAA0CA,EACxDE,EAAmB7V,EAAS8V,QAC5BA,OAA+B,IAArBD,EAA8B,EAAIA,EAC5Cb,EAAgBD,GAAsC,iBAAZe,EAAuBA,EAAUb,GAAgBa,EAASrJ,KACpGsJ,EAAaL,IAAmB9I,GrBpBf,YqBoBoCA,GACrDyF,EAAa/a,EAAMsZ,MAAMhE,OACzB5Q,EAAU1E,EAAM+X,SAASuG,EAAcG,EAAaL,GACpDM,ENkBS,SAAyBha,EAASsZ,EAAUE,EAAcrH,GACvE,IAAI8H,EAAmC,oBAAbX,EAlB5B,SAA4BtZ,GAC1B,IAAIka,EAAkB/K,GAAkBN,GAAc7O,IAElDma,EADoB,CAAC,WAAY,SAASxgB,QAAQ,GAAiBqG,GAASqI,WAAa,GACnDkD,GAAcvL,GAAW4P,GAAgB5P,GAAWA,EAE9F,OAAKqL,GAAU8O,GAKRD,EAAgBjc,QAAO,SAAUma,GACtC,OAAO/M,GAAU+M,IAAmB5R,GAAS4R,EAAgB+B,IAAmD,SAAhCjN,GAAYkL,EAC9F,IANS,EAOX,CAK6DgC,CAAmBpa,GAAW,GAAG+K,OAAOuO,GAC/FY,EAAkB,GAAGnP,OAAOkP,EAAqB,CAACT,IAClDa,EAAsBH,EAAgB,GACtCI,EAAeJ,EAAgBpJ,QAAO,SAAUyJ,EAASnC,GAC3D,IAAInM,EAAOkM,GAA2BnY,EAASoY,EAAgBjG,GAK/D,OAJAoI,EAAQ/N,IAAM,GAAIP,EAAKO,IAAK+N,EAAQ/N,KACpC+N,EAAQtR,MAAQ,GAAIgD,EAAKhD,MAAOsR,EAAQtR,OACxCsR,EAAQ9N,OAAS,GAAIR,EAAKQ,OAAQ8N,EAAQ9N,QAC1C8N,EAAQxR,KAAO,GAAIkD,EAAKlD,KAAMwR,EAAQxR,MAC/BwR,CACT,GAAGpC,GAA2BnY,EAASqa,EAAqBlI,IAK5D,OAJAmI,EAAahO,MAAQgO,EAAarR,MAAQqR,EAAavR,KACvDuR,EAAa/N,OAAS+N,EAAa7N,OAAS6N,EAAa9N,IACzD8N,EAAa5N,EAAI4N,EAAavR,KAC9BuR,EAAa3N,EAAI2N,EAAa9N,IACvB8N,CACT,CMnC2BE,CAAgBnP,GAAUrL,GAAWA,EAAUA,EAAQ8T,gBAAkB1G,GAAmB9R,EAAM+X,SAASzC,QAAS0I,EAAUE,EAAcrH,GACjKsI,EAAsB1O,GAAsBzQ,EAAM+X,SAASN,WAC3D2H,EAAgBhF,GAAe,CACjC3C,UAAW0H,EACXza,QAASqW,EACTlE,SAAU,WACVnB,UAAWA,IAET2J,EAAmBzC,GAAiBhX,OAAOiS,OAAO,CAAC,EAAGkD,EAAYqE,IAClEE,EAAoBlB,IAAmB9I,GAAS+J,EAAmBF,EAGnEI,EAAkB,CACpBrO,IAAKwN,EAAmBxN,IAAMoO,EAAkBpO,IAAMwM,EAAcxM,IACpEC,OAAQmO,EAAkBnO,OAASuN,EAAmBvN,OAASuM,EAAcvM,OAC7E1D,KAAMiR,EAAmBjR,KAAO6R,EAAkB7R,KAAOiQ,EAAcjQ,KACvEE,MAAO2R,EAAkB3R,MAAQ+Q,EAAmB/Q,MAAQ+P,EAAc/P,OAExE6R,EAAaxf,EAAM8X,cAAc2H,OAErC,GAAIrB,IAAmB9I,IAAUkK,EAAY,CAC3C,IAAIC,EAASD,EAAW9J,GACxB9P,OAAOU,KAAKiZ,GAAiBtY,SAAQ,SAAUnF,GAC7C,IAAI4d,EAAW,CAAC/R,GAAOwD,IAAQ9S,QAAQyD,IAAQ,EAAI,GAAK,EACpD6d,EAAO,CAAC,GAAKxO,IAAQ9S,QAAQyD,IAAQ,EAAI,IAAM,IACnDyd,EAAgBzd,IAAQ2d,EAAOE,GAAQD,CACzC,GACF,CAEA,OAAOH,CACT,CCyEA,UACE9a,KAAM,OACNxJ,SAAS,EACTyd,MAAO,OACPhB,GA5HF,SAAc2C,GACZ,IAAIra,EAAQqa,EAAKra,MACbwI,EAAU6R,EAAK7R,QACf/D,EAAO4V,EAAK5V,KAEhB,IAAIzE,EAAM8X,cAAcrT,GAAM6c,MAA9B,CAoCA,IAhCA,IAAIC,EAAoB/Y,EAAQkS,SAC5B8G,OAAsC,IAAtBD,GAAsCA,EACtDE,EAAmBjZ,EAAQkZ,QAC3BC,OAAoC,IAArBF,GAAqCA,EACpDG,EAA8BpZ,EAAQqZ,mBACtCrD,EAAUhW,EAAQgW,QAClBR,EAAWxV,EAAQwV,SACnBE,EAAe1V,EAAQ0V,aACvBI,EAAc9V,EAAQ8V,YACtBwD,EAAwBtZ,EAAQuZ,eAChCA,OAA2C,IAA1BD,GAA0CA,EAC3DE,EAAwBxZ,EAAQwZ,sBAChCC,EAAqBjiB,EAAMwI,QAAQkN,UACnC4E,EAAgBL,GAAiBgI,GAEjCJ,EAAqBD,IADHtH,IAAkB2H,GACqCF,EAjC/E,SAAuCrM,GACrC,GAAIuE,GAAiBvE,KAAe,GAClC,MAAO,GAGT,IAAIwM,EAAoB/F,GAAqBzG,GAC7C,MAAO,CAAC4G,GAA8B5G,GAAYwM,EAAmB5F,GAA8B4F,GACrG,CA0B6IC,CAA8BF,GAA3E,CAAC9F,GAAqB8F,KAChHG,EAAa,CAACH,GAAoBxS,OAAOoS,GAAoBrM,QAAO,SAAUC,EAAKC,GACrF,OAAOD,EAAIhG,OAAOwK,GAAiBvE,KAAe,GCvCvC,SAA8B1V,EAAOwI,QAClC,IAAZA,IACFA,EAAU,CAAC,GAGb,IAAIE,EAAWF,EACXkN,EAAYhN,EAASgN,UACrBsI,EAAWtV,EAASsV,SACpBE,EAAexV,EAASwV,aACxBM,EAAU9V,EAAS8V,QACnBuD,EAAiBrZ,EAASqZ,eAC1BM,EAAwB3Z,EAASsZ,sBACjCA,OAAkD,IAA1BK,EAAmC,GAAgBA,EAC3E9H,EAAYL,GAAaxE,GACzB0M,EAAa7H,EAAYwH,EAAiBxM,GAAsBA,GAAoB5S,QAAO,SAAU+S,GACvG,OAAOwE,GAAaxE,KAAe6E,CACrC,IAAKpF,GACDmN,EAAoBF,EAAWzf,QAAO,SAAU+S,GAClD,OAAOsM,EAAsB3jB,QAAQqX,IAAc,CACrD,IAEiC,IAA7B4M,EAAkBlkB,SACpBkkB,EAAoBF,GAQtB,IAAIG,EAAYD,EAAkB9M,QAAO,SAAUC,EAAKC,GAOtD,OANAD,EAAIC,GAAamI,GAAe7d,EAAO,CACrC0V,UAAWA,EACXsI,SAAUA,EACVE,aAAcA,EACdM,QAASA,IACRvE,GAAiBvE,IACbD,CACT,GAAG,CAAC,GACJ,OAAO7P,OAAOU,KAAKic,GAAWpM,MAAK,SAAUhS,EAAGqe,GAC9C,OAAOD,EAAUpe,GAAKoe,EAAUC,EAClC,GACF,CDH6DC,CAAqBziB,EAAO,CACnF0V,UAAWA,EACXsI,SAAUA,EACVE,aAAcA,EACdM,QAASA,EACTuD,eAAgBA,EAChBC,sBAAuBA,IACpBtM,EACP,GAAG,IACCgN,EAAgB1iB,EAAMsZ,MAAM7B,UAC5BsD,EAAa/a,EAAMsZ,MAAMhE,OACzBqN,EAAY,IAAI5M,IAChB6M,GAAqB,EACrBC,EAAwBT,EAAW,GAE9Blc,EAAI,EAAGA,EAAIkc,EAAWhkB,OAAQ8H,IAAK,CAC1C,IAAIwP,EAAY0M,EAAWlc,GAEvB4c,EAAiB7I,GAAiBvE,GAElCqN,EAAmB7I,GAAaxE,KAAe,GAC/CsN,EAAa,CAAC,GAAK7R,IAAQ9S,QAAQykB,IAAmB,EACtD7c,EAAM+c,EAAa,QAAU,SAC7B5Q,EAAWyL,GAAe7d,EAAO,CACnC0V,UAAWA,EACXsI,SAAUA,EACVE,aAAcA,EACdI,YAAaA,EACbE,QAASA,IAEPyE,EAAoBD,EAAaD,EAAmBpV,GAAQF,GAAOsV,EAAmB5R,GAAS,GAE/FuR,EAAczc,GAAO8U,EAAW9U,KAClCgd,EAAoB9G,GAAqB8G,IAG3C,IAAIC,EAAmB/G,GAAqB8G,GACxCE,EAAS,GAUb,GARI3B,GACF2B,EAAOjoB,KAAKkX,EAAS0Q,IAAmB,GAGtCnB,GACFwB,EAAOjoB,KAAKkX,EAAS6Q,IAAsB,EAAG7Q,EAAS8Q,IAAqB,GAG1EC,EAAOC,OAAM,SAAUC,GACzB,OAAOA,CACT,IAAI,CACFR,EAAwBnN,EACxBkN,GAAqB,EACrB,KACF,CAEAD,EAAUhM,IAAIjB,EAAWyN,EAC3B,CAEA,GAAIP,EAqBF,IAnBA,IAEIU,EAAQ,SAAeC,GACzB,IAAIC,EAAmBpB,EAAWqB,MAAK,SAAU/N,GAC/C,IAAIyN,EAASR,EAAUjM,IAAIhB,GAE3B,GAAIyN,EACF,OAAOA,EAAOhlB,MAAM,EAAGolB,GAAIH,OAAM,SAAUC,GACzC,OAAOA,CACT,GAEJ,IAEA,GAAIG,EAEF,OADAX,EAAwBW,EACjB,OAEX,EAESD,EAnBYxB,EAAiB,EAAI,EAmBZwB,EAAK,GAGpB,UAFFD,EAAMC,GADmBA,KAOpCvjB,EAAM0V,YAAcmN,IACtB7iB,EAAM8X,cAAcrT,GAAM6c,OAAQ,EAClCthB,EAAM0V,UAAYmN,EAClB7iB,EAAMuZ,OAAQ,EA5GhB,CA8GF,EAQEjD,iBAAkB,CAAC,UACnBzX,KAAM,CACJyiB,OAAO,IE/IJ,SAAS1B,GAAOriB,EAAKwE,EAAOuO,GACjC,OAAO,GAAQ/S,EAAK,GAAQwE,EAAOuO,GACrC,CCoIA,UACE7L,KAAM,kBACNxJ,SAAS,EACTyd,MAAO,OACPhB,GA/HF,SAAyB2C,GACvB,IAAIra,EAAQqa,EAAKra,MACbwI,EAAU6R,EAAK7R,QACf/D,EAAO4V,EAAK5V,KACZ8c,EAAoB/Y,EAAQkS,SAC5B8G,OAAsC,IAAtBD,GAAsCA,EACtDE,EAAmBjZ,EAAQkZ,QAC3BC,OAAoC,IAArBF,GAAsCA,EACrDzD,EAAWxV,EAAQwV,SACnBE,EAAe1V,EAAQ0V,aACvBI,EAAc9V,EAAQ8V,YACtBE,EAAUhW,EAAQgW,QAClBkF,EAAkBlb,EAAQmb,OAC1BA,OAA6B,IAApBD,GAAoCA,EAC7CE,EAAwBpb,EAAQqb,aAChCA,OAAyC,IAA1BD,EAAmC,EAAIA,EACtDxR,EAAWyL,GAAe7d,EAAO,CACnCge,SAAUA,EACVE,aAAcA,EACdM,QAASA,EACTF,YAAaA,IAEXhE,EAAgBL,GAAiBja,EAAM0V,WACvC6E,EAAYL,GAAala,EAAM0V,WAC/BoO,GAAmBvJ,EACnBG,EAAWP,GAAyBG,GACpCoH,ECrCY,MDqCShH,ECrCH,IAAM,IDsCxB0E,EAAgBpf,EAAM8X,cAAcsH,cACpCsD,EAAgB1iB,EAAMsZ,MAAM7B,UAC5BsD,EAAa/a,EAAMsZ,MAAMhE,OACzByO,EAA4C,mBAAjBF,EAA8BA,EAAaje,OAAOiS,OAAO,CAAC,EAAG7X,EAAMsZ,MAAO,CACvG5D,UAAW1V,EAAM0V,aACbmO,EACFG,EAA2D,iBAAtBD,EAAiC,CACxErJ,SAAUqJ,EACVrC,QAASqC,GACPne,OAAOiS,OAAO,CAChB6C,SAAU,EACVgH,QAAS,GACRqC,GACCE,EAAsBjkB,EAAM8X,cAAc2H,OAASzf,EAAM8X,cAAc2H,OAAOzf,EAAM0V,WAAa,KACjG7W,EAAO,CACTuS,EAAG,EACHC,EAAG,GAGL,GAAK+N,EAAL,CAIA,GAAIoC,EAAe,CACjB,IAAI0C,EAEAC,EAAwB,MAAbzJ,EAAmB,GAAMjN,GACpC2W,EAAuB,MAAb1J,EAAmBvJ,GAASxD,GACtC1H,EAAmB,MAAbyU,EAAmB,SAAW,QACpC+E,EAASL,EAAc1E,GACvBnd,EAAMkiB,EAASrN,EAAS+R,GACxB7T,EAAMmP,EAASrN,EAASgS,GACxBC,EAAWV,GAAU5I,EAAW9U,GAAO,EAAI,EAC3CP,EAAS6U,IAAc,GAAQmI,EAAczc,GAAO8U,EAAW9U,GAC/Dqe,EAAS/J,IAAc,IAASQ,EAAW9U,IAAQyc,EAAczc,GAGjEse,EAAevkB,EAAM+X,SAAS0I,MAC9B+D,EAAYb,GAAUY,EAAerR,GAAcqR,GAAgB,CACrEvT,MAAO,EACPC,OAAQ,GAENwT,EAAqBzkB,EAAM8X,cAAc,oBAAsB9X,EAAM8X,cAAc,oBAAoB0G,QNhFtG,CACLtN,IAAK,EACLvD,MAAO,EACPwD,OAAQ,EACR1D,KAAM,GM6EFiX,EAAkBD,EAAmBN,GACrCQ,EAAkBF,EAAmBL,GAMrCQ,EAAWhF,GAAO,EAAG8C,EAAczc,GAAMue,EAAUve,IACnD4e,EAAYf,EAAkBpB,EAAczc,GAAO,EAAIoe,EAAWO,EAAWF,EAAkBV,EAA4BtJ,SAAWhV,EAASkf,EAAWF,EAAkBV,EAA4BtJ,SACxMoK,EAAYhB,GAAmBpB,EAAczc,GAAO,EAAIoe,EAAWO,EAAWD,EAAkBX,EAA4BtJ,SAAW4J,EAASM,EAAWD,EAAkBX,EAA4BtJ,SACzMqK,EAAoB/kB,EAAM+X,SAAS0I,OAASnM,GAAgBtU,EAAM+X,SAAS0I,OAC3EuE,EAAeD,EAAiC,MAAbrK,EAAmBqK,EAAkB9R,WAAa,EAAI8R,EAAkB/R,YAAc,EAAI,EAC7HiS,EAAwH,OAAjGf,EAA+C,MAAvBD,OAA8B,EAASA,EAAoBvJ,IAAqBwJ,EAAwB,EAEvJgB,EAAYzF,EAASqF,EAAYG,EACjCE,EAAkBvF,GAAO+D,EAAS,GAAQpmB,EAF9BkiB,EAASoF,EAAYI,EAAsBD,GAEKznB,EAAKkiB,EAAQkE,EAAS,GAAQrT,EAAK4U,GAAa5U,GAChH8O,EAAc1E,GAAYyK,EAC1BtmB,EAAK6b,GAAYyK,EAAkB1F,CACrC,CAEA,GAAIkC,EAAc,CAChB,IAAIyD,EAEAC,EAAyB,MAAb3K,EAAmB,GAAMjN,GAErC6X,GAAwB,MAAb5K,EAAmBvJ,GAASxD,GAEvC4X,GAAUnG,EAAcsC,GAExB3K,GAAmB,MAAZ2K,EAAkB,SAAW,QAEpC8D,GAAOD,GAAUnT,EAASiT,GAE1BI,GAAOF,GAAUnT,EAASkT,IAE1BI,IAAuD,IAAxC,CAAC,GAAKjY,IAAMpP,QAAQic,GAEnCqL,GAAyH,OAAjGP,EAAgD,MAAvBnB,OAA8B,EAASA,EAAoBvC,IAAoB0D,EAAyB,EAEzJQ,GAAaF,GAAeF,GAAOD,GAAU7C,EAAc3L,IAAQgE,EAAWhE,IAAQ4O,GAAuB3B,EAA4BtC,QAEzImE,GAAaH,GAAeH,GAAU7C,EAAc3L,IAAQgE,EAAWhE,IAAQ4O,GAAuB3B,EAA4BtC,QAAU+D,GAE5IK,GAAmBnC,GAAU+B,GDzH9B,SAAwBnoB,EAAKwE,EAAOuO,GACzC,IAAIyV,EAAInG,GAAOriB,EAAKwE,EAAOuO,GAC3B,OAAOyV,EAAIzV,EAAMA,EAAMyV,CACzB,CCsHoDC,CAAeJ,GAAYL,GAASM,IAAcjG,GAAO+D,EAASiC,GAAaJ,GAAMD,GAAS5B,EAASkC,GAAaJ,IAEpKrG,EAAcsC,GAAWoE,GACzBjnB,EAAK6iB,GAAWoE,GAAmBP,EACrC,CAEAvlB,EAAM8X,cAAcrT,GAAQ5F,CAvE5B,CAwEF,EAQEyX,iBAAkB,CAAC,WEhDrB,IACE7R,KAAM,QACNxJ,SAAS,EACTyd,MAAO,OACPhB,GA9EF,SAAe2C,GACb,IAAI4L,EAEAjmB,EAAQqa,EAAKra,MACbyE,EAAO4V,EAAK5V,KACZ+D,EAAU6R,EAAK7R,QACf+b,EAAevkB,EAAM+X,SAAS0I,MAC9BrB,EAAgBpf,EAAM8X,cAAcsH,cACpC9E,EAAgBL,GAAiBja,EAAM0V,WACvCiK,EAAOxF,GAAyBG,GAEhCrU,EADa,CAACwH,GAAME,IAAOtP,QAAQic,IAAkB,EAClC,SAAW,QAElC,GAAKiK,GAAiBnF,EAAtB,CAIA,IAAI1B,EAxBgB,SAAyBc,EAASxe,GAItD,OAAOyd,GAAsC,iBAH7Ce,EAA6B,mBAAZA,EAAyBA,EAAQ5Y,OAAOiS,OAAO,CAAC,EAAG7X,EAAMsZ,MAAO,CAC/E5D,UAAW1V,EAAM0V,aACb8I,GACkDA,EAAUb,GAAgBa,EAASrJ,IAC7F,CAmBsB+Q,CAAgB1d,EAAQgW,QAASxe,GACjDwkB,EAAYtR,GAAcqR,GAC1B4B,EAAmB,MAATxG,EAAe,GAAMlS,GAC/B2Y,EAAmB,MAATzG,EAAexO,GAASxD,GAClC0Y,EAAUrmB,EAAMsZ,MAAM7B,UAAUxR,GAAOjG,EAAMsZ,MAAM7B,UAAUkI,GAAQP,EAAcO,GAAQ3f,EAAMsZ,MAAMhE,OAAOrP,GAC9GqgB,EAAYlH,EAAcO,GAAQ3f,EAAMsZ,MAAM7B,UAAUkI,GACxDoF,EAAoBzQ,GAAgBiQ,GACpCgC,EAAaxB,EAA6B,MAATpF,EAAeoF,EAAkB9H,cAAgB,EAAI8H,EAAkB/H,aAAe,EAAI,EAC3HwJ,EAAoBH,EAAU,EAAIC,EAAY,EAG9C/oB,EAAMmgB,EAAcyI,GACpB7V,EAAMiW,EAAa/B,EAAUve,GAAOyX,EAAc0I,GAClDK,EAASF,EAAa,EAAI/B,EAAUve,GAAO,EAAIugB,EAC/C/G,EAASG,GAAOriB,EAAKkpB,EAAQnW,GAE7BoW,EAAW/G,EACf3f,EAAM8X,cAAcrT,KAASwhB,EAAwB,CAAC,GAAyBS,GAAYjH,EAAQwG,EAAsBU,aAAelH,EAASgH,EAAQR,EAnBzJ,CAoBF,EA4CEhN,OA1CF,SAAgB4B,GACd,IAAI7a,EAAQ6a,EAAM7a,MAEd4mB,EADU/L,EAAMrS,QACW9D,QAC3B6f,OAAoC,IAArBqC,EAA8B,sBAAwBA,EAErD,MAAhBrC,IAKwB,iBAAjBA,IACTA,EAAevkB,EAAM+X,SAASzC,OAAO1Q,cAAc2f,MAahDrZ,GAASlL,EAAM+X,SAASzC,OAAQiP,KAQrCvkB,EAAM+X,SAAS0I,MAAQ8D,EACzB,EASElO,SAAU,CAAC,iBACXC,iBAAkB,CAAC,oBChGrB,SAASuJ,GAAezN,EAAUzB,EAAMmP,GAQtC,YAPyB,IAArBA,IACFA,EAAmB,CACjB1O,EAAG,EACHC,EAAG,IAIA,CACLH,IAAKkB,EAASlB,IAAMP,EAAKM,OAAS6O,EAAiBzO,EACnD1D,MAAOyE,EAASzE,MAAQgD,EAAKK,MAAQ8O,EAAiB1O,EACtDD,OAAQiB,EAASjB,OAASR,EAAKM,OAAS6O,EAAiBzO,EACzD5D,KAAM2E,EAAS3E,KAAOkD,EAAKK,MAAQ8O,EAAiB1O,EAExD,CAEA,SAAS2O,GAAsB3N,GAC7B,MAAO,CAAC,GAAKzE,GAAOwD,GAAQ1D,IAAMwJ,MAAK,SAAU+I,GAC/C,OAAO5N,EAAS4N,IAAS,CAC3B,GACF,CCbA,IACI,GAA4B9I,GAAgB,CAC9CI,iBAFqB,CxB+BvB,CACE7S,KAAM,iBACNxJ,SAAS,EACTyd,MAAO,QACPhB,GAAI,WAAe,EACnBuB,OAxCF,SAAgBoB,GACd,IAAIra,EAAQqa,EAAKra,MACb0H,EAAW2S,EAAK3S,SAChBc,EAAU6R,EAAK7R,QACf0X,EAAkB1X,EAAQsK,OAC1BA,OAA6B,IAApBoN,GAAoCA,EAC7CC,EAAkB3X,EAAQ4X,OAC1BA,OAA6B,IAApBD,GAAoCA,EAC7C1V,EAASkF,GAAU3P,EAAM+X,SAASzC,QAClCiD,EAAgB,GAAG9I,OAAOzP,EAAMuY,cAAcd,UAAWzX,EAAMuY,cAAcjD,QAYjF,OAVIxC,GACFyF,EAActR,SAAQ,SAAU+M,GAC9BA,EAAa5X,iBAAiB,SAAUsL,EAASyR,OAAQa,GAC3D,IAGEoG,GACF3V,EAAOrO,iBAAiB,SAAUsL,EAASyR,OAAQa,IAG9C,WACDlH,GACFyF,EAActR,SAAQ,SAAU+M,GAC9BA,EAAaxX,oBAAoB,SAAUkL,EAASyR,OAAQa,GAC9D,IAGEoG,GACF3V,EAAOjO,oBAAoB,SAAUkL,EAASyR,OAAQa,GAE1D,CACF,EASEnb,KAAM,CAAC,GyB7BT,CACE4F,KAAM,gBACNxJ,SAAS,EACTyd,MAAO,OACPhB,GApBF,SAAuB2C,GACrB,IAAIra,EAAQqa,EAAKra,MACbyE,EAAO4V,EAAK5V,KAKhBzE,EAAM8X,cAAcrT,GAAQ2V,GAAe,CACzC3C,UAAWzX,EAAMsZ,MAAM7B,UACvB/S,QAAS1E,EAAMsZ,MAAMhE,OACrBuB,SAAU,WACVnB,UAAW1V,EAAM0V,WAErB,EAQE7W,KAAM,CAAC,GpBuJT,CACE4F,KAAM,gBACNxJ,SAAS,EACTyd,MAAO,cACPhB,GAzDF,SAAuB2I,GACrB,IAAIrgB,EAAQqgB,EAAMrgB,MACdwI,EAAU6X,EAAM7X,QAChB8X,EAAwB9X,EAAQwS,gBAChCA,OAA4C,IAA1BsF,GAA0CA,EAC5DC,EAAoB/X,EAAQyS,SAC5BA,OAAiC,IAAtBsF,GAAsCA,EACjDC,EAAwBhY,EAAQ0S,aAChCA,OAAyC,IAA1BsF,GAA0CA,EAYzD3E,EAAe,CACjBnG,UAAWuE,GAAiBja,EAAM0V,WAClC6E,UAAWL,GAAala,EAAM0V,WAC9BJ,OAAQtV,EAAM+X,SAASzC,OACvByF,WAAY/a,EAAMsZ,MAAMhE,OACxB0F,gBAAiBA,EACjBtI,QAAoC,UAA3B1S,EAAMwI,QAAQqO,UAGgB,MAArC7W,EAAM8X,cAAcsH,gBACtBpf,EAAMiY,OAAO3C,OAAS1P,OAAOiS,OAAO,CAAC,EAAG7X,EAAMiY,OAAO3C,OAAQsF,GAAYhV,OAAOiS,OAAO,CAAC,EAAGgE,EAAc,CACvG9I,QAAS/S,EAAM8X,cAAcsH,cAC7BrS,SAAU/M,EAAMwI,QAAQqO,SACxBoE,SAAUA,EACVC,aAAcA,OAIe,MAA7Blb,EAAM8X,cAAc2I,QACtBzgB,EAAMiY,OAAOwI,MAAQ7a,OAAOiS,OAAO,CAAC,EAAG7X,EAAMiY,OAAOwI,MAAO7F,GAAYhV,OAAOiS,OAAO,CAAC,EAAGgE,EAAc,CACrG9I,QAAS/S,EAAM8X,cAAc2I,MAC7B1T,SAAU,WACVkO,UAAU,EACVC,aAAcA,OAIlBlb,EAAMgY,WAAW1C,OAAS1P,OAAOiS,OAAO,CAAC,EAAG7X,EAAMgY,WAAW1C,OAAQ,CACnE,wBAAyBtV,EAAM0V,WAEnC,EAQE7W,KAAM,CAAC,GqBvGT,CACE4F,KAAM,cACNxJ,SAAS,EACTyd,MAAO,QACPhB,GA5EF,SAAqB2C,GACnB,IAAIra,EAAQqa,EAAKra,MACjB4F,OAAOU,KAAKtG,EAAM+X,UAAU9Q,SAAQ,SAAUxC,GAC5C,IAAIic,EAAQ1gB,EAAMiY,OAAOxT,IAAS,CAAC,EAC/BuT,EAAahY,EAAMgY,WAAWvT,IAAS,CAAC,EACxCC,EAAU1E,EAAM+X,SAAStT,GAExBwL,GAAcvL,IAAakN,GAAYlN,KAO5CkB,OAAOiS,OAAOnT,EAAQgc,MAAOA,GAC7B9a,OAAOU,KAAK0R,GAAY/Q,SAAQ,SAAUxC,GACxC,IAAI1C,EAAQiW,EAAWvT,IAET,IAAV1C,EACF2C,EAAQic,gBAAgBlc,GAExBC,EAAQkF,aAAanF,GAAgB,IAAV1C,EAAiB,GAAKA,EAErD,IACF,GACF,EAoDEkX,OAlDF,SAAgB4B,GACd,IAAI7a,EAAQ6a,EAAM7a,MACd4gB,EAAgB,CAClBtL,OAAQ,CACNvI,SAAU/M,EAAMwI,QAAQqO,SACxBpJ,KAAM,IACNyD,IAAK,IACL2P,OAAQ,KAEVJ,MAAO,CACL1T,SAAU,YAEZ0K,UAAW,CAAC,GASd,OAPA7R,OAAOiS,OAAO7X,EAAM+X,SAASzC,OAAOoL,MAAOE,EAActL,QACzDtV,EAAMiY,OAAS2I,EAEX5gB,EAAM+X,SAAS0I,OACjB7a,OAAOiS,OAAO7X,EAAM+X,SAAS0I,MAAMC,MAAOE,EAAcH,OAGnD,WACL7a,OAAOU,KAAKtG,EAAM+X,UAAU9Q,SAAQ,SAAUxC,GAC5C,IAAIC,EAAU1E,EAAM+X,SAAStT,GACzBuT,EAAahY,EAAMgY,WAAWvT,IAAS,CAAC,EAGxCic,EAFkB9a,OAAOU,KAAKtG,EAAMiY,OAAOqD,eAAe7W,GAAQzE,EAAMiY,OAAOxT,GAAQmc,EAAcnc,IAE7E+Q,QAAO,SAAUkL,EAAOI,GAElD,OADAJ,EAAMI,GAAY,GACXJ,CACT,GAAG,CAAC,GAECzQ,GAAcvL,IAAakN,GAAYlN,KAI5CkB,OAAOiS,OAAOnT,EAAQgc,MAAOA,GAC7B9a,OAAOU,KAAK0R,GAAY/Q,SAAQ,SAAU8Z,GACxCrc,EAAQic,gBAAgBI,EAC1B,IACF,GACF,CACF,EASE1K,SAAU,CAAC,kBCnCb,CACE5R,KAAM,SACNxJ,SAAS,EACTyd,MAAO,OACPrC,SAAU,CAAC,iBACXqB,GA5BF,SAAgBmD,GACd,IAAI7a,EAAQ6a,EAAM7a,MACdwI,EAAUqS,EAAMrS,QAChB/D,EAAOoW,EAAMpW,KACbuc,EAAkBxY,EAAQiX,OAC1BA,OAA6B,IAApBuB,EAA6B,CAAC,EAAG,GAAKA,EAC/CniB,EAAO,WAAkB,SAAU4W,EAAKC,GAE1C,OADAD,EAAIC,GA5BD,SAAiCA,EAAW4D,EAAOmG,GACxD,IAAInF,EAAgBL,GAAiBvE,GACjCuL,EAAiB,CAACxT,GAAM,IAAKpP,QAAQic,IAAkB,GAAK,EAAI,EAEhED,EAAyB,mBAAXoF,EAAwBA,EAAO7Z,OAAOiS,OAAO,CAAC,EAAGyB,EAAO,CACxE5D,UAAWA,KACP+J,EACFyB,EAAW7G,EAAK,GAChB8G,EAAW9G,EAAK,GAIpB,OAFA6G,EAAWA,GAAY,EACvBC,GAAYA,GAAY,GAAKF,EACtB,CAACxT,GAAME,IAAOtP,QAAQic,IAAkB,EAAI,CACjDlJ,EAAG+P,EACH9P,EAAG6P,GACD,CACF9P,EAAG8P,EACH7P,EAAG8P,EAEP,CASqBC,CAAwB1L,EAAW1V,EAAMsZ,MAAOmG,GAC1DhK,CACT,GAAG,CAAC,GACA4L,EAAwBxiB,EAAKmB,EAAM0V,WACnCtE,EAAIiQ,EAAsBjQ,EAC1BC,EAAIgQ,EAAsBhQ,EAEW,MAArCrR,EAAM8X,cAAcsH,gBACtBpf,EAAM8X,cAAcsH,cAAchO,GAAKA,EACvCpR,EAAM8X,cAAcsH,cAAc/N,GAAKA,GAGzCrR,EAAM8X,cAAcrT,GAAQ5F,CAC9B,GHlC2F,GAAM,GAAiB,GD4ClH,CACE4F,KAAM,OACNxJ,SAAS,EACTyd,MAAO,OACPpC,iBAAkB,CAAC,mBACnBoB,GAlCF,SAAc2C,GACZ,IAAIra,EAAQqa,EAAKra,MACbyE,EAAO4V,EAAK5V,KACZie,EAAgB1iB,EAAMsZ,MAAM7B,UAC5BsD,EAAa/a,EAAMsZ,MAAMhE,OACzBwK,EAAmB9f,EAAM8X,cAAc+O,gBACvCC,EAAoBjJ,GAAe7d,EAAO,CAC5Coe,eAAgB,cAEd2I,EAAoBlJ,GAAe7d,EAAO,CAC5Cse,aAAa,IAEX0I,EAA2BnH,GAAeiH,EAAmBpE,GAC7DuE,EAAsBpH,GAAekH,EAAmBhM,EAAY+E,GACpEoH,EAAoBnH,GAAsBiH,GAC1CG,EAAmBpH,GAAsBkH,GAC7CjnB,EAAM8X,cAAcrT,GAAQ,CAC1BuiB,yBAA0BA,EAC1BC,oBAAqBA,EACrBC,kBAAmBA,EACnBC,iBAAkBA,GAEpBnnB,EAAMgY,WAAW1C,OAAS1P,OAAOiS,OAAO,CAAC,EAAG7X,EAAMgY,WAAW1C,OAAQ,CACnE,+BAAgC4R,EAChC,sBAAuBC,GAE3B,MKhDA,uBAA6B,GAC3BuW,eAAiB,CAAC,YAAa,YAC/BA,eAAiB,CAAC,OAAQ,UAC1BA,cAAgB,CACdhoB,UAAW+/C,OACX1sD,OAAQwsD,SAGVtxD,UACE,MAAMgwI,EAAiBj5I,KAAKk5I,eAAel6G,QAAQiN,WAAU,GAC7DjsC,KAAKm5I,cAAgBF,EAAetrG,kBAEpC9qC,SAAS+V,KAAK8d,YAAYuiH,GAE1Bj5I,KAAKsa,OAAS,GAAata,KAAKo5I,gBAAiBp5I,KAAKm5I,cAAe,CACnEz+H,UAAW1a,KAAKq5I,eAChBv+H,UAAW,CACT,CACErR,KAAM,SACN+D,QAAS,CACPiX,OAAQ,CAAC,EAAG,KAGhB,CACEhb,KAAM,OACN+D,QAAS,CACPwZ,sBAAuB,CACrB,YACA,eACA,UACA,mBAMNhnB,KAAKs5I,aACPt5I,KAAK0tB,MAET,CAEA6O,eACE38B,QAAQE,IAAI,gBACZF,QAAQE,IAAIE,KAAKu5I,aACjB35I,QAAQE,IAAIE,KAAKw5I,WACjB55I,QAAQE,IAAIE,KAAKm5I,cAAc1qI,WAC/BzO,KAAKm5I,cAAc1qI,UAAUP,OAAOlO,KAAKu5I,aACzCv5I,KAAKm5I,cAAc1qI,UAAUP,OAAOlO,KAAKw5I,iBACnCx5I,KAAKsa,OAAO6D,QACpB,CAEAoe,aACE38B,QAAQE,IAAI,cACZE,KAAKm5I,cAAc1qI,UAAUpH,OAAOrH,KAAKu5I,aACzCv5I,KAAKm5I,cAAc1qI,UAAUlG,IAAIvI,KAAKw5I,iBAChCx5I,KAAKsa,OAAO6D,QACpB,CAEA3J,KAAKhP,GAEAxF,KAAK0J,QAAQwG,SAAS1K,EAAMsG,SAC5B9L,KAAKm5I,cAAcjpI,SAAS1K,EAAMsG,SAClC9L,KAAKm5I,cAAc1qI,UAAUyB,SAASlQ,KAAKu5I,cAE5Cv5I,KAAKy5I,WAET,CAEAA,YACE75I,QAAQE,IAAI,mBACZE,KAAKm5I,cAAc1qI,UAAUpH,OAAOrH,KAAKw5I,WACzCx5I,KAAKm5I,cAAc1qI,UAAUlG,IAAIvI,KAAKu5I,YACxC,GCxEF,iBAA6B,GAC3B72G,eAAiB,CAAC,UAAW,cAC7BA,eAAiB,CAAC,YAAa,gBAC/BA,cAAgB,CACd6xB,OAAQgG,SAGVpH,aACEnzD,KAAK05I,gBAAiB,EACtB15I,KAAK25I,mBAAoB,CAC3B,CAEA1wI,UACMjJ,KAAK45I,cACP55I,KAAKugH,SAAW,IAAIx+E,qBAAqB/hC,KAAK65I,oBAC9C75I,KAAKugH,SAASv+E,QAAQhiC,KAAK85I,eAC3B95I,KAAKugH,SAASv+E,QAAQhiC,KAAK+5I,kBAE/B,CAEA/zI,aACMhG,KAAK45I,aACP55I,KAAKugH,SAASv6G,YAElB,CAIA6zI,mBAAsBn6G,IACpBA,EAAQzzB,SAASiyF,IAGf,OAFeA,EAAMpyF,OAAOw7C,QAAQ0yF,kBAGlC,IAAK,UACHh6I,KAAK05I,eAAiBx7C,EAAMt8D,eAC5B,MACF,IAAK,aACH5hC,KAAK25I,kBAAoBz7C,EAAMt8D,eACnC,IAEF5hC,KAAKi6I,eAAe,EAGtBA,gBACOj6I,KAAK05I,gBAAmB15I,KAAK25I,kBAEvB35I,KAAK05I,gBAAkB15I,KAAK25I,kBACrC35I,KAAK0J,QAAQ+E,UAAUpH,OACrBrH,KAAKk6I,eACLl6I,KAAKm6I,mBAEEn6I,KAAK05I,gBACd15I,KAAK0J,QAAQ+E,UAAUpH,OAAOrH,KAAKk6I,gBACnCl6I,KAAK0J,QAAQ+E,UAAUlG,IAAIvI,KAAKm6I,oBACvBn6I,KAAK25I,oBACd35I,KAAK0J,QAAQ+E,UAAUlG,IAAIvI,KAAKk6I,gBAChCl6I,KAAK0J,QAAQ+E,UAAUpH,OAAOrH,KAAKm6I,oBAXnCn6I,KAAK0J,QAAQ+E,UAAUlG,IAAIvI,KAAKk6I,eAAgBl6I,KAAKm6I,kBAazD,GC/CF,IAkFEC,GAASC,GAlFPC,GAAY,KAIdC,GAAa,IAGbC,GAAW,mBAGXC,GAAO,qgCAGP,GAAK,qgCAILC,GAAW,CAOT9S,UAAW,GAiBX+S,SAAU,EAeVC,OAAQ,EAIRC,UAAW,EAIXC,SAAW,GAIXC,MAAOT,GAIPU,KAAMV,GAGNW,QAAQ,GAQV/X,IAAW,EAEXgY,GAAe,kBACfC,GAAkBD,GAAe,qBACjCE,GAAyBF,GAAe,2BACxCG,GAAoBH,GAAe,qBACnCI,GAAM,mBAENC,GAAYl5I,KAAK67B,MACjBs9G,GAAUn5I,KAAKC,IAEfm5I,GAAW,6CACXC,GAAQ,yDACRC,GAAU,gDACVC,GAAY,qCAEZC,GAAO,IAIPC,GAAiBrB,GAAKr3I,OAAS,EAC/B24I,GAAe,GAAG34I,OAAS,EAG3BspE,GAAI,CAAEh3C,YAAa4lH,IA01ErB,SAASU,GAAe1mH,GACtB,IAAIpqB,EAAGu1D,EAAGw7E,EACRC,EAAkB5mH,EAAElyB,OAAS,EAC7Bs+D,EAAM,GACN8J,EAAIl2C,EAAE,GAER,GAAI4mH,EAAkB,EAAG,CAEvB,IADAx6E,GAAO8J,EACFtgE,EAAI,EAAGA,EAAIgxI,EAAiBhxI,KAE/Bu1D,EA32EO,GA02EPw7E,EAAK3mH,EAAEpqB,GAAK,IACM9H,UACXs+D,GAAOy6E,GAAc17E,IAC5BiB,GAAOu6E,GAKTx7E,EAl3ES,GAi3ETw7E,GADAzwE,EAAIl2C,EAAEpqB,IACG,IACS9H,UACXs+D,GAAOy6E,GAAc17E,GAC9B,MAAO,GAAU,IAAN+K,EACT,MAAO,IAIT,KAAOA,EAAI,IAAO,GAAIA,GAAK,GAE3B,OAAO9J,EAAM8J,CACf,CAGA,SAAS4wE,GAAWlxI,EAAG3I,EAAK+S,GAC1B,GAAIpK,MAAQA,GAAKA,EAAI3I,GAAO2I,EAAIoK,EAC9B,MAAMswB,MAAMu1G,GAAkBjwI,EAElC,CAQA,SAASmxI,GAAoB/mH,EAAGpqB,EAAGoxI,EAAIC,GACrC,IAAIC,EAAI/7E,EAAGhrC,EAAGgnH,EAGd,IAAKh8E,EAAInrC,EAAE,GAAImrC,GAAK,GAAIA,GAAK,KAAMv1D,EAwCnC,QArCMA,EAAI,GACRA,GAn5ES,EAo5ETsxI,EAAK,IAELA,EAAKn6I,KAAKqnG,MAAMx+F,EAAI,GAt5EX,GAu5ETA,GAv5ES,GA65EXu1D,EAAI+6E,GAAQ,GA75ED,EA65EgBtwI,GAC3BuxI,EAAKnnH,EAAEknH,GAAM/7E,EAAI,EAEA,MAAb87E,EACErxI,EAAI,GACG,GAALA,EAAQuxI,EAAKA,EAAK,IAAM,EACd,GAALvxI,IAAQuxI,EAAKA,EAAK,GAAK,GAChChnH,EAAI6mH,EAAK,GAAW,OAANG,GAAeH,EAAK,GAAW,OAANG,GAAqB,KAANA,GAAqB,GAANA,GAErEhnH,GAAK6mH,EAAK,GAAKG,EAAK,GAAKh8E,GAAK67E,EAAK,GAAKG,EAAK,GAAKh8E,EAAI,KACnDnrC,EAAEknH,EAAK,GAAK/7E,EAAI,IAAM,IAAM+6E,GAAQ,GAAItwI,EAAI,GAAK,IAC/CuxI,GAAMh8E,EAAI,GAAW,GAANg8E,IAAyC,IAA5BnnH,EAAEknH,EAAK,GAAK/7E,EAAI,IAAM,GAGrDv1D,EAAI,GACG,GAALA,EAAQuxI,EAAKA,EAAK,IAAO,EACf,GAALvxI,EAAQuxI,EAAKA,EAAK,IAAM,EACnB,GAALvxI,IAAQuxI,EAAKA,EAAK,GAAK,GAChChnH,GAAK8mH,GAAaD,EAAK,IAAY,MAANG,IAAeF,GAAaD,EAAK,GAAW,MAANG,GAEnEhnH,IAAM8mH,GAAaD,EAAK,IAAMG,EAAK,GAAKh8E,IACtC87E,GAAaD,EAAK,GAAMG,EAAK,GAAKh8E,EAAI,KACrCnrC,EAAEknH,EAAK,GAAK/7E,EAAI,IAAO,IAAM+6E,GAAQ,GAAItwI,EAAI,GAAK,EAIlDuqB,CACT,CAMA,SAASinH,GAAYh7E,EAAKi7E,EAAQC,GAOhC,IANA,IAAI/kE,EAEFglE,EADA9yI,EAAM,CAAC,GAEPmB,EAAI,EACJ4xI,EAAOp7E,EAAIt+D,OAEN8H,EAAI4xI,GAAO,CAChB,IAAKD,EAAO9yI,EAAI3G,OAAQy5I,KAAS9yI,EAAI8yI,IAASF,EAE9C,IADA5yI,EAAI,IAAMywI,GAASn3I,QAAQq+D,EAAIlY,OAAOt+C,MACjC2sE,EAAI,EAAGA,EAAI9tE,EAAI3G,OAAQy0E,IACtB9tE,EAAI8tE,GAAK+kE,EAAU,SACF,IAAf7yI,EAAI8tE,EAAI,KAAe9tE,EAAI8tE,EAAI,GAAK,GACxC9tE,EAAI8tE,EAAI,IAAM9tE,EAAI8tE,GAAK+kE,EAAU,EACjC7yI,EAAI8tE,IAAM+kE,EAGhB,CAEA,OAAO7yI,EAAI4pD,SACb,CAj4EA+Y,GAAEqwE,cAAgBrwE,GAAEt0D,IAAM,WACxB,IAAIhC,EAAI,IAAIpW,KAAKU,YAAYV,MAE7B,OADIoW,EAAExO,EAAI,IAAGwO,EAAExO,EAAI,GACZo1I,GAAS5mI,EAClB,EAQAs2D,GAAEg9B,KAAO,WACP,OAAOszC,GAAS,IAAIh9I,KAAKU,YAAYV,MAAOA,KAAKw/C,EAAI,EAAG,EAC1D,EAWAktB,GAAEuwE,UAAYvwE,GAAEwwE,MAAQ,SAAU36I,EAAK+S,GACrC,IACEc,EAAIpW,KACJm9I,EAAO/mI,EAAE1V,YAGX,GAFA6B,EAAM,IAAI46I,EAAK56I,GACf+S,EAAM,IAAI6nI,EAAK7nI,IACV/S,EAAIqF,IAAM0N,EAAI1N,EAAG,OAAO,IAAIu1I,EAAKzjD,KACtC,GAAIn3F,EAAI66I,GAAG9nI,GAAM,MAAMswB,MAAMu1G,GAAkB7lI,GAE/C,OADIc,EAAE6uD,IAAI1iE,GACC,EAAIA,EAAM6T,EAAE6uD,IAAI3vD,GAAO,EAAIA,EAAM,IAAI6nI,EAAK/mI,EACvD,EAWAs2D,GAAE2wE,WAAa3wE,GAAEzH,IAAM,SAAU5uD,GAC/B,IAAInL,EAAG2sE,EAAGylE,EAAKC,EACbnnI,EAAIpW,KACJw9I,EAAKpnI,EAAEkf,EACPmoH,GAAMpnI,EAAI,IAAID,EAAE1V,YAAY2V,IAAIif,EAChCooH,EAAKtnI,EAAExO,EACP+1I,EAAKtnI,EAAEzO,EAGT,IAAK41I,IAAOC,EACV,OAAQC,GAAOC,EAAWD,IAAOC,EAAKD,EAAKF,IAAOC,EAAK,GAAKD,EAAKE,EAAK,EAAI,GAAK,EAA3DhkD,IAItB,IAAK8jD,EAAG,KAAOC,EAAG,GAAI,OAAOD,EAAG,GAAKE,EAAKD,EAAG,IAAME,EAAK,EAGxD,GAAID,IAAOC,EAAI,OAAOD,EAGtB,GAAItnI,EAAEopC,IAAMnpC,EAAEmpC,EAAG,OAAOppC,EAAEopC,EAAInpC,EAAEmpC,EAAIk+F,EAAK,EAAI,GAAK,EAMlD,IAAKxyI,EAAI,EAAG2sE,GAJZylE,EAAME,EAAGp6I,SACTm6I,EAAME,EAAGr6I,QAGmBk6I,EAAMC,EAAKryI,EAAI2sE,IAAK3sE,EAC9C,GAAIsyI,EAAGtyI,KAAOuyI,EAAGvyI,GAAI,OAAOsyI,EAAGtyI,GAAKuyI,EAAGvyI,GAAKwyI,EAAK,EAAI,GAAK,EAI5D,OAAOJ,IAAQC,EAAM,EAAID,EAAMC,EAAMG,EAAK,EAAI,GAAK,CACrD,EAgBAhxE,GAAEkxE,OAASlxE,GAAE3D,IAAM,WACjB,IAAI80E,EAAIvB,EACNlmI,EAAIpW,KACJm9I,EAAO/mI,EAAE1V,YAEX,OAAK0V,EAAEkf,EAGFlf,EAAEkf,EAAE,IAETuoH,EAAKV,EAAKvV,UACV0U,EAAKa,EAAKxC,SACVwC,EAAKvV,UAAYiW,EAAKx7I,KAAKiT,IAAIc,EAAEopC,EAAGppC,EAAE0nI,MA3L3B,EA4LXX,EAAKxC,SAAW,EAEhBvkI,EA4xEF,SAAgB+mI,EAAM/mI,GACpB,IAAIqqD,EAAGx1D,EAAKoL,EAEZ,GAAID,EAAE2nI,SAAU,OAAO3nI,GAMvBnL,EAAMmL,EAAEkf,EAAElyB,QACA,GAERiT,GAAK,EAAI2nI,GAAQ,EADjBv9E,EAAIp+D,KAAKqnG,KAAKz+F,EAAM,KACIJ,YAExB41D,EAAI,GACJpqD,EAAI,gCAGN8mI,EAAKvV,WAAannE,EAElBrqD,EAAI6nI,GAAad,EAAM,EAAG/mI,EAAE8nI,MAAM7nI,GAAI,IAAI8mI,EAAK,IAG/C,IAAK,IAAIjyI,EAAIu1D,EAAGv1D,KAAM,CACpB,IAAIizI,EAAQ/nI,EAAE8nI,MAAM9nI,GACpBA,EAAI+nI,EAAMD,MAAMC,GAAOC,MAAMD,GAAOD,MAAM,GAAGG,KAAK,EACpD,CAIA,OAFAlB,EAAKvV,WAAannE,EAEXrqD,CACT,CA3zEMwnI,CAAOT,EAAMmB,GAAiBnB,EAAM/mI,IAExC+mI,EAAKvV,UAAYiW,EACjBV,EAAKxC,SAAW2B,EAETU,GAAqB,GAAZ3C,IAA6B,GAAZA,GAAgBjkI,EAAEmoI,MAAQnoI,EAAGynI,EAAIvB,GAAI,IAZlD,IAAIa,EAAK,GAHZ,IAAIA,EAAKzjD,IAgB5B,EAmBAhtB,GAAE8xE,SAAW9xE,GAAE+xE,KAAO,WACpB,IAAIj/F,EAAG1hC,EAAGnT,EAAG8qB,EAAGipH,EAAK92I,EAAGk2I,EAAIzrH,EAAGssH,EAAIC,EACjCxoI,EAAIpW,KACJm9I,EAAO/mI,EAAE1V,YAEX,IAAK0V,EAAEmpD,YAAcnpD,EAAE2nI,SAAU,OAAO,IAAIZ,EAAK/mI,GAoCjD,IAnCA8sH,IAAW,GAGXt7H,EAAIwO,EAAExO,EAAI4zI,GAAQplI,EAAExO,EAAIwO,EAAG,EAAI,KAIrB/T,KAAK+V,IAAIxQ,IAAM,IAqBvB6tB,EAAI,IAAI0nH,EAAKv1I,EAAEiD,aApBfF,EAAIqxI,GAAe5lI,EAAEkf,IAIjB1tB,IAHJ43C,EAAIppC,EAAEopC,GAGO70C,EAAEvH,OAAS,GAAK,KAAGuH,GAAW,GAAL/C,IAAgB,GAANA,EAAU,IAAM,MAChEA,EAAI4zI,GAAQ7wI,EAAG,EAAI,GAGnB60C,EAAI+7F,IAAW/7F,EAAI,GAAK,IAAMA,EAAI,IAAMA,EAAI,GAAK,EAAI,KASrD/pB,EAAI,IAAI0nH,EANNxyI,EADE/C,GAAK,IACH,KAAO43C,GAEX70C,EAAI/C,EAAEi3I,iBACA17I,MAAM,EAAGwH,EAAEtH,QAAQ,KAAO,GAAKm8C,IAIrC53C,EAAIwO,EAAExO,GAKVk2I,GAAMt+F,EAAI29F,EAAKvV,WAAa,IAW1B,GAJAgX,GADAD,GADAtsH,EAAIoD,GACGyoH,MAAM7rH,GAAG6rH,MAAM7rH,IACTgsH,KAAKjoI,GAClBqf,EAAIqpH,GAAOF,EAAQP,KAAKjoI,GAAG8nI,MAAM7rH,GAAIusH,EAAQP,KAAKM,GAAKb,EAAK,EAAG,GAG3D9B,GAAe3pH,EAAEiD,GAAGnyB,MAAM,EAAG26I,MAASnzI,EAAIqxI,GAAevmH,EAAEH,IAAInyB,MAAM,EAAG26I,GAAK,CAK/E,GAAS,SAJTnzI,EAAIA,EAAExH,MAAM26I,EAAK,EAAGA,EAAK,MAILY,GAAY,QAAL/zI,GAepB,EAICA,KAAOA,EAAExH,MAAM,IAAqB,KAAfwH,EAAE6+C,OAAO,MAGlCwzF,GAASvnH,EAAG+pB,EAAI,EAAG,GACnB1hC,GAAK2X,EAAEyoH,MAAMzoH,GAAGyoH,MAAMzoH,GAAG01C,GAAG/0D,IAG9B,KACF,CAvBE,IAAKsoI,IACH1B,GAAS3qH,EAAGmtB,EAAI,EAAG,GAEfntB,EAAE6rH,MAAM7rH,GAAG6rH,MAAM7rH,GAAG84C,GAAG/0D,IAAI,CAC7Bqf,EAAIpD,EACJ,KACF,CAGFyrH,GAAM,EACNY,EAAM,CAcV,CAKF,OAFAxb,IAAW,EAEJ8Z,GAASvnH,EAAG+pB,EAAG29F,EAAKxC,SAAU78H,EACvC,EAOA4uD,GAAE87D,cAAgB97D,GAAEqyE,GAAK,WACvB,IAAIvzE,EACFl2C,EAAIt1B,KAAKs1B,EACT3qB,EAAI+uF,IAEN,GAAIpkE,EAAG,CAML,GAJA3qB,EA5TS,IA2TT6gE,EAAIl2C,EAAElyB,OAAS,GACNm4I,GAAUv7I,KAAKw/C,EA5Tf,IA+TTgsB,EAAIl2C,EAAEk2C,GACC,KAAOA,EAAI,IAAM,EAAGA,GAAK,GAAI7gE,IAChCA,EAAI,IAAGA,EAAI,EACjB,CAEA,OAAOA,CACT,EAwBA+hE,GAAEsyE,UAAYtyE,GAAEuyE,IAAM,SAAU5oI,GAC9B,OAAOyoI,GAAO9+I,KAAM,IAAIA,KAAKU,YAAY2V,GAC3C,EAQAq2D,GAAEwyE,mBAAqBxyE,GAAEyyE,SAAW,SAAU9oI,GAC5C,IACE8mI,EADMn9I,KACGU,YACX,OAAOs8I,GAAS8B,GAFR9+I,KAEkB,IAAIm9I,EAAK9mI,GAAI,EAAG,EAAG,GAAI8mI,EAAKvV,UAAWuV,EAAKxC,SACxE,EAOAjuE,GAAE0yE,OAAS1yE,GAAEvB,GAAK,SAAU90D,GAC1B,OAAuB,IAAhBrW,KAAKilE,IAAI5uD,EAClB,EAQAq2D,GAAExuC,MAAQ,WACR,OAAO8+G,GAAS,IAAIh9I,KAAKU,YAAYV,MAAOA,KAAKw/C,EAAI,EAAG,EAC1D,EAQAktB,GAAE2yE,YAAc3yE,GAAE0wE,GAAK,SAAU/mI,GAC/B,OAAOrW,KAAKilE,IAAI5uD,GAAK,CACvB,EAQAq2D,GAAE4yE,qBAAuB5yE,GAAE6yE,IAAM,SAAUlpI,GACzC,IAAIoqD,EAAIzgE,KAAKilE,IAAI5uD,GACjB,OAAY,GAALoqD,GAAgB,IAANA,CACnB,EA4BAiM,GAAE8yE,iBAAmB9yE,GAAE+yE,KAAO,WAC5B,IAAIh/E,EAAG91D,EAAGkzI,EAAIvB,EAAIrxI,EAChBmL,EAAIpW,KACJm9I,EAAO/mI,EAAE1V,YACTg/I,EAAM,IAAIvC,EAAK,GAEjB,IAAK/mI,EAAEmpD,WAAY,OAAO,IAAI49E,EAAK/mI,EAAExO,EAAI,IAAQ8xF,KACjD,GAAItjF,EAAE2nI,SAAU,OAAO2B,EAEvB7B,EAAKV,EAAKvV,UACV0U,EAAKa,EAAKxC,SACVwC,EAAKvV,UAAYiW,EAAKx7I,KAAKiT,IAAIc,EAAEopC,EAAGppC,EAAE0nI,MAAQ,EAC9CX,EAAKxC,SAAW,GAChB1vI,EAAMmL,EAAEkf,EAAElyB,QAOA,GAERuH,GAAK,EAAIqzI,GAAQ,EADjBv9E,EAAIp+D,KAAKqnG,KAAKz+F,EAAM,KACIJ,YAExB41D,EAAI,GACJ91D,EAAI,gCAGNyL,EAAI6nI,GAAad,EAAM,EAAG/mI,EAAE8nI,MAAMvzI,GAAI,IAAIwyI,EAAK,IAAI,GAMnD,IAHA,IAAIwC,EACFz0I,EAAIu1D,EACJm/E,EAAK,IAAIzC,EAAK,GACTjyI,KACLy0I,EAAUvpI,EAAE8nI,MAAM9nI,GAClBA,EAAIspI,EAAItB,MAAMuB,EAAQzB,MAAM0B,EAAGxB,MAAMuB,EAAQzB,MAAM0B,MAGrD,OAAO5C,GAAS5mI,EAAG+mI,EAAKvV,UAAYiW,EAAIV,EAAKxC,SAAW2B,GAAI,EAC9D,EAiCA5vE,GAAEmzE,eAAiBnzE,GAAEozE,KAAO,WAC1B,IAAIr/E,EAAGo9E,EAAIvB,EAAIrxI,EACbmL,EAAIpW,KACJm9I,EAAO/mI,EAAE1V,YAEX,IAAK0V,EAAEmpD,YAAcnpD,EAAE2nI,SAAU,OAAO,IAAIZ,EAAK/mI,GAQjD,GANAynI,EAAKV,EAAKvV,UACV0U,EAAKa,EAAKxC,SACVwC,EAAKvV,UAAYiW,EAAKx7I,KAAKiT,IAAIc,EAAEopC,EAAGppC,EAAE0nI,MAAQ,EAC9CX,EAAKxC,SAAW,GAChB1vI,EAAMmL,EAAEkf,EAAElyB,QAEA,EACRgT,EAAI6nI,GAAad,EAAM,EAAG/mI,EAAGA,GAAG,OAC3B,CAYLqqD,GADAA,EAAI,IAAMp+D,KAAK0hE,KAAK94D,IACZ,GAAK,GAAS,EAAJw1D,EAGlBrqD,EAAI6nI,GAAad,EAAM,EADvB/mI,EAAIA,EAAE8nI,MAAM,EAAIF,GAAQ,EAAGv9E,IACErqD,GAAG,GAOhC,IAJA,IAAI2pI,EACFC,EAAK,IAAI7C,EAAK,GACd8C,EAAM,IAAI9C,EAAK,IACf+C,EAAM,IAAI/C,EAAK,IACV18E,KACLs/E,EAAU3pI,EAAE8nI,MAAM9nI,GAClBA,EAAIA,EAAE8nI,MAAM8B,EAAG3B,KAAK0B,EAAQ7B,MAAM+B,EAAI/B,MAAM6B,GAAS1B,KAAK6B,KAE9D,CAKA,OAHA/C,EAAKvV,UAAYiW,EACjBV,EAAKxC,SAAW2B,EAETU,GAAS5mI,EAAGynI,EAAIvB,GAAI,EAC7B,EAmBA5vE,GAAEyzE,kBAAoBzzE,GAAE0zE,KAAO,WAC7B,IAAIvC,EAAIvB,EACNlmI,EAAIpW,KACJm9I,EAAO/mI,EAAE1V,YAEX,OAAK0V,EAAEmpD,WACHnpD,EAAE2nI,SAAiB,IAAIZ,EAAK/mI,IAEhCynI,EAAKV,EAAKvV,UACV0U,EAAKa,EAAKxC,SACVwC,EAAKvV,UAAYiW,EAAK,EACtBV,EAAKxC,SAAW,EAETmE,GAAO1oI,EAAE0pI,OAAQ1pI,EAAEqpI,OAAQtC,EAAKvV,UAAYiW,EAAIV,EAAKxC,SAAW2B,IAR7C,IAAIa,EAAK/mI,EAAExO,EASvC,EAsBA8kE,GAAE2zE,cAAgB3zE,GAAE4zE,KAAO,WACzB,IAAIC,EACFnqI,EAAIpW,KACJm9I,EAAO/mI,EAAE1V,YACT+/D,EAAIrqD,EAAEgC,MAAM6sD,IAAI,GAChB44E,EAAKV,EAAKvV,UACV0U,EAAKa,EAAKxC,SAEZ,OAAW,IAAPl6E,EACW,IAANA,EAEHrqD,EAAEoqI,QAAUC,GAAMtD,EAAMU,EAAIvB,GAAM,IAAIa,EAAK,GAE3C,IAAIA,EAAKzjD,KAGXtjF,EAAE2nI,SAAiB0C,GAAMtD,EAAMU,EAAK,EAAGvB,GAAI4B,MAAM,KAIrDf,EAAKvV,UAAYiW,EAAK,EACtBV,EAAKxC,SAAW,EAEhBvkI,EAAIA,EAAEo7F,OACN+uC,EAASE,GAAMtD,EAAMU,EAAK,EAAGvB,GAAI4B,MAAM,IAEvCf,EAAKvV,UAAYiW,EACjBV,EAAKxC,SAAW2B,EAETiE,EAAOnC,MAAMhoI,GACtB,EAsBAs2D,GAAEg0E,wBAA0Bh0E,GAAEi0E,MAAQ,WACpC,IAAI9C,EAAIvB,EACNlmI,EAAIpW,KACJm9I,EAAO/mI,EAAE1V,YAEX,OAAI0V,EAAEwqI,IAAI,GAAW,IAAIzD,EAAK/mI,EAAE+0D,GAAG,GAAK,EAAIuuB,KACvCtjF,EAAEmpD,YAEPs+E,EAAKV,EAAKvV,UACV0U,EAAKa,EAAKxC,SACVwC,EAAKvV,UAAYiW,EAAKx7I,KAAKiT,IAAIjT,KAAK+V,IAAIhC,EAAEopC,GAAIppC,EAAE0nI,MAAQ,EACxDX,EAAKxC,SAAW,EAChBzX,IAAW,EAEX9sH,EAAIA,EAAE8nI,MAAM9nI,GAAGgoI,MAAM,GAAGr6E,OAAOs6E,KAAKjoI,GAEpC8sH,IAAW,EACXia,EAAKvV,UAAYiW,EACjBV,EAAKxC,SAAW2B,EAETlmI,EAAEyqI,MAdiB,IAAI1D,EAAK/mI,EAerC,EAmBAs2D,GAAEo0E,sBAAwBp0E,GAAEq0E,MAAQ,WAClC,IAAIlD,EAAIvB,EACNlmI,EAAIpW,KACJm9I,EAAO/mI,EAAE1V,YAEX,OAAK0V,EAAEmpD,YAAcnpD,EAAE2nI,SAAiB,IAAIZ,EAAK/mI,IAEjDynI,EAAKV,EAAKvV,UACV0U,EAAKa,EAAKxC,SACVwC,EAAKvV,UAAYiW,EAAK,EAAIx7I,KAAKiT,IAAIjT,KAAK+V,IAAIhC,EAAEopC,GAAIppC,EAAE0nI,MAAQ,EAC5DX,EAAKxC,SAAW,EAChBzX,IAAW,EAEX9sH,EAAIA,EAAE8nI,MAAM9nI,GAAGioI,KAAK,GAAGt6E,OAAOs6E,KAAKjoI,GAEnC8sH,IAAW,EACXia,EAAKvV,UAAYiW,EACjBV,EAAKxC,SAAW2B,EAETlmI,EAAEyqI,KACX,EAsBAn0E,GAAEs0E,yBAA2Bt0E,GAAEu0E,MAAQ,WACrC,IAAIpD,EAAIvB,EAAI4E,EAAKC,EACf/qI,EAAIpW,KACJm9I,EAAO/mI,EAAE1V,YAEX,OAAK0V,EAAEmpD,WACHnpD,EAAEopC,GAAK,EAAU,IAAI29F,EAAK/mI,EAAEgC,MAAM+yD,GAAG,GAAK/0D,EAAExO,EAAI,EAAIwO,EAAE2nI,SAAW3nI,EAAIsjF,MAEzEmkD,EAAKV,EAAKvV,UACV0U,EAAKa,EAAKxC,SACVwG,EAAM/qI,EAAE0nI,KAEJz7I,KAAKiT,IAAI6rI,EAAKtD,GAAM,GAAKznI,EAAEopC,EAAI,EAAUw9F,GAAS,IAAIG,EAAK/mI,GAAIynI,EAAIvB,GAAI,IAE3Ea,EAAKvV,UAAYsZ,EAAMC,EAAM/qI,EAAEopC,EAE/BppC,EAAI0oI,GAAO1oI,EAAEioI,KAAK,GAAI,IAAIlB,EAAK,GAAGiB,MAAMhoI,GAAI8qI,EAAMrD,EAAI,GAEtDV,EAAKvV,UAAYiW,EAAK,EACtBV,EAAKxC,SAAW,EAEhBvkI,EAAIA,EAAEyqI,KAEN1D,EAAKvV,UAAYiW,EACjBV,EAAKxC,SAAW2B,EAETlmI,EAAE8nI,MAAM,MArBW,IAAIf,EAAKzjD,IAsBrC,EAwBAhtB,GAAE00E,YAAc10E,GAAE8kC,KAAO,WACvB,IAAI+uC,EAAQ9/E,EACVo9E,EAAIvB,EACJlmI,EAAIpW,KACJm9I,EAAO/mI,EAAE1V,YAEX,OAAI0V,EAAE2nI,SAAiB,IAAIZ,EAAK/mI,IAEhCqqD,EAAIrqD,EAAEgC,MAAM6sD,IAAI,GAChB44E,EAAKV,EAAKvV,UACV0U,EAAKa,EAAKxC,UAEC,IAAPl6E,EAGQ,IAANA,IACF8/E,EAASE,GAAMtD,EAAMU,EAAK,EAAGvB,GAAI4B,MAAM,KAChCt2I,EAAIwO,EAAExO,EACN24I,GAIF,IAAIpD,EAAKzjD,MAKlByjD,EAAKvV,UAAYiW,EAAK,EACtBV,EAAKxC,SAAW,EAEhBvkI,EAAIA,EAAE6oI,IAAI,IAAI9B,EAAK,GAAGiB,MAAMhoI,EAAE8nI,MAAM9nI,IAAI2tD,OAAOs6E,KAAK,IAAIgD,OAExDlE,EAAKvV,UAAYiW,EACjBV,EAAKxC,SAAW2B,EAETlmI,EAAE8nI,MAAM,IACjB,EAqBAxxE,GAAE40E,eAAiB50E,GAAE20E,KAAO,WAC1B,IAAIn2I,EAAG2sE,EAAGpX,EAAG91D,EAAG42I,EAAIlvH,EAAGoD,EAAGyrH,EAAKzsC,EAC7Br+F,EAAIpW,KACJm9I,EAAO/mI,EAAE1V,YACTm9I,EAAKV,EAAKvV,UACV0U,EAAKa,EAAKxC,SAEZ,GAAKvkI,EAAEmpD,WAOA,IAAInpD,EAAE2nI,SACX,OAAO,IAAIZ,EAAK/mI,GACX,GAAIA,EAAEgC,MAAM+yD,GAAG,IAAM0yE,EAAK,GAAK9B,GAGpC,OAFAtmH,EAAIgrH,GAAMtD,EAAMU,EAAK,EAAGvB,GAAI4B,MAAM,MAChCt2I,EAAIwO,EAAExO,EACD6tB,CACT,KAbmB,CACjB,IAAKrf,EAAExO,EAAG,OAAO,IAAIu1I,EAAKzjD,KAC1B,GAAImkD,EAAK,GAAK9B,GAGZ,OAFAtmH,EAAIgrH,GAAMtD,EAAMU,EAAK,EAAGvB,GAAI4B,MAAM,KAChCt2I,EAAIwO,EAAExO,EACD6tB,CAEX,CAmBA,IAXA0nH,EAAKvV,UAAYsZ,EAAMrD,EAAK,GAC5BV,EAAKxC,SAAW,EAUXzvI,EAFLu1D,EAAIp+D,KAAKE,IAAI,GAAI2+I,EA/2BN,EA+2BuB,EAAI,GAE1Bh2I,IAAKA,EAAGkL,EAAIA,EAAE6oI,IAAI7oI,EAAE8nI,MAAM9nI,GAAGioI,KAAK,GAAGt6E,OAAOs6E,KAAK,IAW7D,IATAnb,IAAW,EAEXrrD,EAAIx1E,KAAKqnG,KAAKw3C,EAr3BH,GAs3BXv2I,EAAI,EACJ8pG,EAAKr+F,EAAE8nI,MAAM9nI,GACbqf,EAAI,IAAI0nH,EAAK/mI,GACbmrI,EAAKnrI,GAGS,IAAPlL,GAOL,GANAq2I,EAAKA,EAAGrD,MAAMzpC,GACdpiF,EAAIoD,EAAE2oH,MAAMmD,EAAGtC,IAAIt0I,GAAK,IAExB42I,EAAKA,EAAGrD,MAAMzpC,QAGC,KAFfh/E,EAAIpD,EAAEgsH,KAAKkD,EAAGtC,IAAIt0I,GAAK,KAEjB2qB,EAAEuiD,GAAe,IAAK3sE,EAAI2sE,EAAGpiD,EAAEH,EAAEpqB,KAAOmnB,EAAEiD,EAAEpqB,IAAMA,MAO1D,OAJIu1D,IAAGhrC,EAAIA,EAAEyoH,MAAM,GAAMz9E,EAAI,IAE7ByiE,IAAW,EAEJ8Z,GAASvnH,EAAG0nH,EAAKvV,UAAYiW,EAAIV,EAAKxC,SAAW2B,GAAI,EAC9D,EAOA5vE,GAAEnN,SAAW,WACX,QAASv/D,KAAKs1B,CAChB,EAOAo3C,GAAE80E,UAAY90E,GAAE+0E,MAAQ,WACtB,QAASzhJ,KAAKs1B,GAAKimH,GAAUv7I,KAAKw/C,EA55BvB,GA45BuCx/C,KAAKs1B,EAAElyB,OAAS,CACpE,EAOAspE,GAAE1J,MAAQ,WACR,OAAQhjE,KAAK4H,CACf,EAOA8kE,GAAEg1E,WAAah1E,GAAE8zE,MAAQ,WACvB,OAAOxgJ,KAAK4H,EAAI,CAClB,EAOA8kE,GAAEi1E,WAAaj1E,GAAEk1E,MAAQ,WACvB,OAAO5hJ,KAAK4H,EAAI,CAClB,EAOA8kE,GAAEqxE,OAAS,WACT,QAAS/9I,KAAKs1B,GAAmB,IAAdt1B,KAAKs1B,EAAE,EAC5B,EAOAo3C,GAAEm1E,SAAWn1E,GAAEo1E,GAAK,SAAUzrI,GAC5B,OAAOrW,KAAKilE,IAAI5uD,GAAK,CACvB,EAOAq2D,GAAEq1E,kBAAoBr1E,GAAEk0E,IAAM,SAAUvqI,GACtC,OAAOrW,KAAKilE,IAAI5uD,GAAK,CACvB,EAiCAq2D,GAAEs1E,UAAYt1E,GAAE5sE,IAAM,SAAUuwB,GAC9B,IAAI4xH,EAAU3sH,EAAG4sH,EAAazhF,EAAG0hF,EAAKh2D,EAAK2xD,EAAIroH,EAC7CqjF,EAAM94G,KACNm9I,EAAOrkC,EAAIp4G,YACXm9I,EAAKV,EAAKvV,UACV0U,EAAKa,EAAKxC,SAIZ,GAAY,MAARtqH,EACFA,EAAO,IAAI8sH,EAAK,IAChB8E,GAAW,MACN,CAKL,GAHA3sH,GADAjF,EAAO,IAAI8sH,EAAK9sH,IACPiF,EAGLjF,EAAKzoB,EAAI,IAAM0tB,IAAMA,EAAE,IAAMjF,EAAK86C,GAAG,GAAI,OAAO,IAAIgyE,EAAKzjD,KAE7DuoD,EAAW5xH,EAAK86C,GAAG,GACrB,CAKA,GAHA71C,EAAIwjF,EAAIxjF,EAGJwjF,EAAIlxG,EAAI,IAAM0tB,IAAMA,EAAE,IAAMwjF,EAAI3tC,GAAG,GACrC,OAAO,IAAIgyE,EAAK7nH,IAAMA,EAAE,IAAK,IAAkB,GAATwjF,EAAIlxG,EAAS8xF,IAAMpkE,EAAI,EAAI,KAKnE,GAAI2sH,EACF,GAAI3sH,EAAElyB,OAAS,EACb++I,GAAM,MACD,CACL,IAAK1hF,EAAInrC,EAAE,GAAImrC,EAAI,IAAO,GAAIA,GAAK,GACnC0hF,EAAY,IAAN1hF,CACR,CAyBF,GAtBAyiE,IAAW,EAEX/2C,EAAMi2D,GAAiBtpC,EADvBglC,EAAKD,EAnCK,GAqCVqE,EAAcD,EAAWI,GAAQlF,EAAMW,EAAK,IAAMsE,GAAiB/xH,EAAMytH,GAmBrEzB,IAhBJ5mH,EAAIqpH,GAAO3yD,EAAK+1D,EAAapE,EAAI,IAgBPxoH,EAAGmrC,EAAIo9E,EAAIvB,GAEnC,GAME,GAJAnwD,EAAMi2D,GAAiBtpC,EADvBglC,GAAM,IAENoE,EAAcD,EAAWI,GAAQlF,EAAMW,EAAK,IAAMsE,GAAiB/xH,EAAMytH,GACzEroH,EAAIqpH,GAAO3yD,EAAK+1D,EAAapE,EAAI,IAE5BqE,EAAK,EAGHnG,GAAevmH,EAAEH,GAAGnyB,MAAMs9D,EAAI,EAAGA,EAAI,IAAM,GAAK,OACnDhrC,EAAIunH,GAASvnH,EAAGooH,EAAK,EAAG,IAG1B,KACF,QACOxB,GAAoB5mH,EAAEH,EAAGmrC,GAAK,GAAI67E,IAK7C,OAFApZ,IAAW,EAEJ8Z,GAASvnH,EAAGooH,EAAIvB,EACzB,EAgDA5vE,GAAE0xE,MAAQ1xE,GAAE+hB,IAAM,SAAUp4E,GAC1B,IAAIif,EAAGkqB,EAAGt0C,EAAG2sE,EAAGpX,EAAGx1D,EAAK4yI,EAAIvB,EAAIkB,EAAI8E,EAAIC,EAAM9E,EAC5CrnI,EAAIpW,KACJm9I,EAAO/mI,EAAE1V,YAKX,GAHA2V,EAAI,IAAI8mI,EAAK9mI,IAGRD,EAAEkf,IAAMjf,EAAEif,EAab,OAVKlf,EAAExO,GAAMyO,EAAEzO,EAGNwO,EAAEkf,EAAGjf,EAAEzO,GAAKyO,EAAEzO,EAKlByO,EAAI,IAAI8mI,EAAK9mI,EAAEif,GAAKlf,EAAExO,IAAMyO,EAAEzO,EAAIwO,EAAIsjF,KARzBrjF,EAAI,IAAI8mI,EAAKzjD,KAUxBrjF,EAIT,GAAID,EAAExO,GAAKyO,EAAEzO,EAEX,OADAyO,EAAEzO,GAAKyO,EAAEzO,EACFwO,EAAEioI,KAAKhoI,GAShB,GANAmnI,EAAKpnI,EAAEkf,EACPmoH,EAAKpnI,EAAEif,EACPuoH,EAAKV,EAAKvV,UACV0U,EAAKa,EAAKxC,UAGL6C,EAAG,KAAOC,EAAG,GAAI,CAGpB,GAAIA,EAAG,GAAIpnI,EAAEzO,GAAKyO,EAAEzO,MAGf,KAAI41I,EAAG,GAIP,OAAO,IAAIL,EAAY,IAAPb,GAAY,EAAI,GAJrBjmI,EAAI,IAAI8mI,EAAK/mI,EAIU,CAEvC,OAAO8sH,GAAW8Z,GAAS3mI,EAAGwnI,EAAIvB,GAAMjmI,CAC1C,CAYA,GAPAmpC,EAAI+7F,GAAUllI,EAAEmpC,EA/qCL,GAgrCX8iG,EAAK/G,GAAUnlI,EAAEopC,EAhrCN,GAkrCXg+F,EAAKA,EAAGr6I,QACRs9D,EAAI6hF,EAAK9iG,EAGF,CAyBL,KAxBA+iG,EAAO9hF,EAAI,IAGTnrC,EAAIkoH,EACJ/8E,GAAKA,EACLx1D,EAAMwyI,EAAGr6I,SAETkyB,EAAImoH,EACJj+F,EAAI8iG,EACJr3I,EAAMuyI,EAAGp6I,QAQPq9D,GAFJv1D,EAAI7I,KAAKiT,IAAIjT,KAAKqnG,KAAKm0C,EAtsCd,GAssC8B5yI,GAAO,KAG5Cw1D,EAAIv1D,EACJoqB,EAAElyB,OAAS,GAIbkyB,EAAEq+B,UACGzoD,EAAIu1D,EAAGv1D,KAAMoqB,EAAEp1B,KAAK,GACzBo1B,EAAEq+B,SAGJ,KAAO,CASL,KAHA4uF,GAFAr3I,EAAIsyI,EAAGp6I,SACP6H,EAAMwyI,EAAGr6I,WAEC6H,EAAMC,GAEXA,EAAI,EAAGA,EAAID,EAAKC,IACnB,GAAIsyI,EAAGtyI,IAAMuyI,EAAGvyI,GAAI,CAClBq3I,EAAO/E,EAAGtyI,GAAKuyI,EAAGvyI,GAClB,KACF,CAGFu1D,EAAI,CACN,CAaA,IAXI8hF,IACFjtH,EAAIkoH,EACJA,EAAKC,EACLA,EAAKnoH,EACLjf,EAAEzO,GAAKyO,EAAEzO,GAGXqD,EAAMuyI,EAAGp6I,OAIJ8H,EAAIuyI,EAAGr6I,OAAS6H,EAAKC,EAAI,IAAKA,EAAGsyI,EAAGvyI,KAAS,EAGlD,IAAKC,EAAIuyI,EAAGr6I,OAAQ8H,EAAIu1D,GAAI,CAE1B,GAAI+8E,IAAKtyI,GAAKuyI,EAAGvyI,GAAI,CACnB,IAAK2sE,EAAI3sE,EAAG2sE,GAAiB,IAAZ2lE,IAAK3lE,IAAW2lE,EAAG3lE,GAAKgkE,GAAO,IAC9C2B,EAAG3lE,GACL2lE,EAAGtyI,IAAM2wI,EACX,CAEA2B,EAAGtyI,IAAMuyI,EAAGvyI,EACd,CAGA,KAAqB,IAAdsyI,IAAKvyI,IAAauyI,EAAGrtD,MAG5B,KAAiB,IAAVqtD,EAAG,GAAUA,EAAGpoD,UAAW51C,EAGlC,OAAKg+F,EAAG,IAERnnI,EAAEif,EAAIkoH,EACNnnI,EAAEmpC,EAAIgjG,GAAkBhF,EAAIh+F,GAErB0jF,GAAW8Z,GAAS3mI,EAAGwnI,EAAIvB,GAAMjmI,GALrB,IAAI8mI,EAAY,IAAPb,GAAY,EAAI,EAM9C,EA2BA5vE,GAAEkuE,OAASluE,GAAE+1E,IAAM,SAAUpsI,GAC3B,IAAIqsI,EACFtsI,EAAIpW,KACJm9I,EAAO/mI,EAAE1V,YAKX,OAHA2V,EAAI,IAAI8mI,EAAK9mI,IAGRD,EAAEkf,IAAMjf,EAAEzO,GAAKyO,EAAEif,IAAMjf,EAAEif,EAAE,GAAW,IAAI6nH,EAAKzjD,MAG/CrjF,EAAEif,GAAKlf,EAAEkf,IAAMlf,EAAEkf,EAAE,GACf0nH,GAAS,IAAIG,EAAK/mI,GAAI+mI,EAAKvV,UAAWuV,EAAKxC,WAIpDzX,IAAW,EAEQ,GAAfia,EAAKvC,QAIP8H,EAAI5D,GAAO1oI,EAAGC,EAAE+B,MAAO,EAAG,EAAG,IAC3BxQ,GAAKyO,EAAEzO,EAET86I,EAAI5D,GAAO1oI,EAAGC,EAAG,EAAG8mI,EAAKvC,OAAQ,GAGnC8H,EAAIA,EAAExE,MAAM7nI,GAEZ6sH,IAAW,EAEJ9sH,EAAEgoI,MAAMsE,GACjB,EASAh2E,GAAEi2E,mBAAqBj2E,GAAEq8D,IAAM,WAC7B,OAAO4Z,GAAmB3iJ,KAC5B,EAQA0sE,GAAE01E,iBAAmB11E,GAAEm0E,GAAK,WAC1B,OAAOuB,GAAiBpiJ,KAC1B,EAQA0sE,GAAEk2E,QAAUl2E,GAAE6xE,IAAM,WAClB,IAAInoI,EAAI,IAAIpW,KAAKU,YAAYV,MAE7B,OADAoW,EAAExO,GAAKwO,EAAExO,EACFo1I,GAAS5mI,EAClB,EAwBAs2D,GAAE2xE,KAAO3xE,GAAEnkE,IAAM,SAAU8N,GACzB,IAAIwsI,EAAOvtH,EAAGkqB,EAAGt0C,EAAGu1D,EAAGx1D,EAAK4yI,EAAIvB,EAAIkB,EAAIC,EACtCrnI,EAAIpW,KACJm9I,EAAO/mI,EAAE1V,YAKX,GAHA2V,EAAI,IAAI8mI,EAAK9mI,IAGRD,EAAEkf,IAAMjf,EAAEif,EAWb,OARKlf,EAAExO,GAAMyO,EAAEzO,EAMLwO,EAAEkf,IAAGjf,EAAI,IAAI8mI,EAAK9mI,EAAEif,GAAKlf,EAAExO,IAAMyO,EAAEzO,EAAIwO,EAAIsjF,MANnCrjF,EAAI,IAAI8mI,EAAKzjD,KAQxBrjF,EAIT,GAAID,EAAExO,GAAKyO,EAAEzO,EAEX,OADAyO,EAAEzO,GAAKyO,EAAEzO,EACFwO,EAAEgoI,MAAM/nI,GASjB,GANAmnI,EAAKpnI,EAAEkf,EACPmoH,EAAKpnI,EAAEif,EACPuoH,EAAKV,EAAKvV,UACV0U,EAAKa,EAAKxC,UAGL6C,EAAG,KAAOC,EAAG,GAMhB,OAFKA,EAAG,KAAIpnI,EAAI,IAAI8mI,EAAK/mI,IAElB8sH,GAAW8Z,GAAS3mI,EAAGwnI,EAAIvB,GAAMjmI,EAa1C,GAPAoqD,EAAI86E,GAAUnlI,EAAEopC,EA/6CL,GAg7CXA,EAAI+7F,GAAUllI,EAAEmpC,EAh7CL,GAk7CXg+F,EAAKA,EAAGr6I,QACR+H,EAAIu1D,EAAIjhB,EAGD,CAuBL,IArBIt0C,EAAI,GACNoqB,EAAIkoH,EACJtyI,GAAKA,EACLD,EAAMwyI,EAAGr6I,SAETkyB,EAAImoH,EACJj+F,EAAIihB,EACJx1D,EAAMuyI,EAAGp6I,QAOP8H,GAFJD,GADAw1D,EAAIp+D,KAAKqnG,KAAKm0C,EAn8CL,IAo8CC5yI,EAAMw1D,EAAI,EAAIx1D,EAAM,KAG5BC,EAAID,EACJqqB,EAAElyB,OAAS,GAIbkyB,EAAEq+B,UACKzoD,KAAMoqB,EAAEp1B,KAAK,GACpBo1B,EAAEq+B,SACJ,CAcA,KAZA1oD,EAAMuyI,EAAGp6I,SACT8H,EAAIuyI,EAAGr6I,QAGO,IACZ8H,EAAID,EACJqqB,EAAImoH,EACJA,EAAKD,EACLA,EAAKloH,GAIFutH,EAAQ,EAAG33I,GACd23I,GAASrF,IAAKtyI,GAAKsyI,EAAGtyI,GAAKuyI,EAAGvyI,GAAK23I,GAAShH,GAAO,EACnD2B,EAAGtyI,IAAM2wI,GAUX,IAPIgH,IACFrF,EAAGh/F,QAAQqkG,KACTrjG,GAKCv0C,EAAMuyI,EAAGp6I,OAAqB,GAAbo6I,IAAKvyI,IAAYuyI,EAAGrtD,MAK1C,OAHA95E,EAAEif,EAAIkoH,EACNnnI,EAAEmpC,EAAIgjG,GAAkBhF,EAAIh+F,GAErB0jF,GAAW8Z,GAAS3mI,EAAGwnI,EAAIvB,GAAMjmI,CAC1C,EASAq2D,GAAEk7D,UAAYl7D,GAAEoxE,GAAK,SAAUnnC,GAC7B,IAAIl2C,EACFrqD,EAAIpW,KAEN,QAAU,IAAN22G,GAAgBA,MAAQA,GAAW,IAANA,GAAiB,IAANA,EAAS,MAAM/wE,MAAMu1G,GAAkBxkC,GASnF,OAPIvgG,EAAEkf,GACJmrC,EAAIqiF,GAAa1sI,EAAEkf,GACfqhF,GAAKvgG,EAAEopC,EAAI,EAAIihB,IAAGA,EAAIrqD,EAAEopC,EAAI,IAEhCihB,EAAIi5B,IAGCj5B,CACT,EAQAiM,GAAEl3D,MAAQ,WACR,IAAIY,EAAIpW,KACNm9I,EAAO/mI,EAAE1V,YAEX,OAAOs8I,GAAS,IAAIG,EAAK/mI,GAAIA,EAAEopC,EAAI,EAAG29F,EAAKxC,SAC7C,EAkBAjuE,GAAEq2E,KAAOr2E,GAAE5E,IAAM,WACf,IAAI+1E,EAAIvB,EACNlmI,EAAIpW,KACJm9I,EAAO/mI,EAAE1V,YAEX,OAAK0V,EAAEmpD,WACHnpD,EAAE2nI,SAAiB,IAAIZ,EAAK/mI,IAEhCynI,EAAKV,EAAKvV,UACV0U,EAAKa,EAAKxC,SACVwC,EAAKvV,UAAYiW,EAAKx7I,KAAKiT,IAAIc,EAAEopC,EAAGppC,EAAE0nI,MA/iD3B,EAgjDXX,EAAKxC,SAAW,EAEhBvkI,EAs7DF,SAAc+mI,EAAM/mI,GAClB,IAAIqqD,EACFx1D,EAAMmL,EAAEkf,EAAElyB,OAEZ,GAAI6H,EAAM,EACR,OAAOmL,EAAE2nI,SAAW3nI,EAAI6nI,GAAad,EAAM,EAAG/mI,EAAGA,GASnDqqD,GADAA,EAAI,IAAMp+D,KAAK0hE,KAAK94D,IACZ,GAAK,GAAS,EAAJw1D,EAGlBrqD,EAAI6nI,GAAad,EAAM,EADvB/mI,EAAIA,EAAE8nI,MAAM,EAAIF,GAAQ,EAAGv9E,IACErqD,GAO7B,IAJA,IAAI4sI,EACFhD,EAAK,IAAI7C,EAAK,GACd8C,EAAM,IAAI9C,EAAK,IACf+C,EAAM,IAAI/C,EAAK,IACV18E,KACLuiF,EAAS5sI,EAAE8nI,MAAM9nI,GACjBA,EAAIA,EAAE8nI,MAAM8B,EAAG3B,KAAK2E,EAAO9E,MAAM+B,EAAI/B,MAAM8E,GAAQ5E,MAAM8B,MAG3D,OAAO9pI,CACT,CAp9DM2sI,CAAK5F,EAAMmB,GAAiBnB,EAAM/mI,IAEtC+mI,EAAKvV,UAAYiW,EACjBV,EAAKxC,SAAW2B,EAETU,GAAS3C,GAAW,EAAIjkI,EAAEmoI,MAAQnoI,EAAGynI,EAAIvB,GAAI,IAb1B,IAAIa,EAAKzjD,IAcrC,EAeAhtB,GAAEu2E,WAAav2E,GAAE3I,KAAO,WACtB,IAAIjmD,EAAGnT,EAAGmzI,EAAIroH,EAAGipH,EAAKrsH,EACpBjc,EAAIpW,KACJs1B,EAAIlf,EAAEkf,EACNkqB,EAAIppC,EAAEopC,EACN53C,EAAIwO,EAAExO,EACNu1I,EAAO/mI,EAAE1V,YAGX,GAAU,IAANkH,IAAY0tB,IAAMA,EAAE,GACtB,OAAO,IAAI6nH,GAAMv1I,GAAKA,EAAI,KAAO0tB,GAAKA,EAAE,IAAMokE,IAAMpkE,EAAIlf,EAAI,KAgC9D,IA7BA8sH,IAAW,EAOF,IAJTt7H,EAAIvF,KAAK0hE,MAAM3tD,KAIDxO,GAAK,OACjB+C,EAAIqxI,GAAe1mH,IAEZlyB,OAASo8C,GAAK,GAAK,IAAG70C,GAAK,KAClC/C,EAAIvF,KAAK0hE,KAAKp5D,GACd60C,EAAI+7F,IAAW/7F,EAAI,GAAK,IAAMA,EAAI,GAAKA,EAAI,GAS3C/pB,EAAI,IAAI0nH,EANNxyI,EADE/C,GAAK,IACH,KAAO43C,GAEX70C,EAAI/C,EAAEi3I,iBACA17I,MAAM,EAAGwH,EAAEtH,QAAQ,KAAO,GAAKm8C,IAKvC/pB,EAAI,IAAI0nH,EAAKv1I,EAAEiD,YAGjBizI,GAAMt+F,EAAI29F,EAAKvV,WAAa,IAQ1B,GAHAnyG,GADApD,EAAIoD,GACE4oH,KAAKS,GAAO1oI,EAAGic,EAAGyrH,EAAK,EAAG,IAAII,MAAM,IAGtClC,GAAe3pH,EAAEiD,GAAGnyB,MAAM,EAAG26I,MAASnzI,EAAIqxI,GAAevmH,EAAEH,IAAInyB,MAAM,EAAG26I,GAAK,CAK/E,GAAS,SAJTnzI,EAAIA,EAAExH,MAAM26I,EAAK,EAAGA,EAAK,MAILY,GAAY,QAAL/zI,GAepB,EAICA,KAAOA,EAAExH,MAAM,IAAqB,KAAfwH,EAAE6+C,OAAO,MAGlCwzF,GAASvnH,EAAG+pB,EAAI,EAAG,GACnB1hC,GAAK2X,EAAEyoH,MAAMzoH,GAAG01C,GAAG/0D,IAGrB,KACF,CAvBE,IAAKsoI,IACH1B,GAAS3qH,EAAGmtB,EAAI,EAAG,GAEfntB,EAAE6rH,MAAM7rH,GAAG84C,GAAG/0D,IAAI,CACpBqf,EAAIpD,EACJ,KACF,CAGFyrH,GAAM,EACNY,EAAM,CAcV,CAKF,OAFAxb,IAAW,EAEJ8Z,GAASvnH,EAAG+pB,EAAG29F,EAAKxC,SAAU78H,EACvC,EAgBA4uD,GAAEw2E,QAAUx2E,GAAEoJ,IAAM,WAClB,IAAI+nE,EAAIvB,EACNlmI,EAAIpW,KACJm9I,EAAO/mI,EAAE1V,YAEX,OAAK0V,EAAEmpD,WACHnpD,EAAE2nI,SAAiB,IAAIZ,EAAK/mI,IAEhCynI,EAAKV,EAAKvV,UACV0U,EAAKa,EAAKxC,SACVwC,EAAKvV,UAAYiW,EAAK,GACtBV,EAAKxC,SAAW,GAEhBvkI,EAAIA,EAAE0xD,OACJlgE,EAAI,EACNwO,EAAI0oI,GAAO1oI,EAAG,IAAI+mI,EAAK,GAAGiB,MAAMhoI,EAAE8nI,MAAM9nI,IAAI2tD,OAAQ85E,EAAK,GAAI,GAE7DV,EAAKvV,UAAYiW,EACjBV,EAAKxC,SAAW2B,EAETU,GAAqB,GAAZ3C,IAA6B,GAAZA,GAAgBjkI,EAAEmoI,MAAQnoI,EAAGynI,EAAIvB,GAAI,IAf5C,IAAIa,EAAKzjD,IAgBrC,EAwBAhtB,GAAEwxE,MAAQxxE,GAAEy2E,IAAM,SAAU9sI,GAC1B,IAAIwsI,EAAOrjG,EAAGt0C,EAAGu1D,EAAGhrC,EAAG2tH,EAAI/wH,EAAGirH,EAAKC,EACjCnnI,EAAIpW,KACJm9I,EAAO/mI,EAAE1V,YACT88I,EAAKpnI,EAAEkf,EACPmoH,GAAMpnI,EAAI,IAAI8mI,EAAK9mI,IAAIif,EAKzB,GAHAjf,EAAEzO,GAAKwO,EAAExO,IAGJ41I,GAAOA,EAAG,IAAOC,GAAOA,EAAG,IAE9B,OAAO,IAAIN,GAAM9mI,EAAEzO,GAAK41I,IAAOA,EAAG,KAAOC,GAAMA,IAAOA,EAAG,KAAOD,EAI5D9jD,IAIC8jD,GAAOC,EAAqB,EAANpnI,EAAEzO,EAAZyO,EAAEzO,EAAI,GAoBzB,IAjBA43C,EAAI+7F,GAAUnlI,EAAEopC,EAjvDL,GAivDqB+7F,GAAUllI,EAAEmpC,EAjvDjC,IAkvDX89F,EAAME,EAAGp6I,SACTm6I,EAAME,EAAGr6I,UAIPqyB,EAAI+nH,EACJA,EAAKC,EACLA,EAAKhoH,EACL2tH,EAAK9F,EACLA,EAAMC,EACNA,EAAM6F,GAIR3tH,EAAI,GAECvqB,EADLk4I,EAAK9F,EAAMC,EACEryI,KAAMuqB,EAAEv1B,KAAK,GAG1B,IAAKgL,EAAIqyI,IAAOryI,GAAK,GAAI,CAEvB,IADA23I,EAAQ,EACHpiF,EAAI68E,EAAMpyI,EAAGu1D,EAAIv1D,GACpBmnB,EAAIoD,EAAEgrC,GAAKg9E,EAAGvyI,GAAKsyI,EAAG/8E,EAAIv1D,EAAI,GAAK23I,EACnCptH,EAAEgrC,KAAOpuC,EAAIwpH,GAAO,EACpBgH,EAAQxwH,EAAIwpH,GAAO,EAGrBpmH,EAAEgrC,IAAMhrC,EAAEgrC,GAAKoiF,GAAShH,GAAO,CACjC,CAGA,MAAQpmH,IAAI2tH,IAAM3tH,EAAE06D,MAQpB,OANI0yD,IAASrjG,EACR/pB,EAAE2/D,QAEP/+E,EAAEif,EAAIG,EACNpf,EAAEmpC,EAAIgjG,GAAkB/sH,EAAG+pB,GAEpB0jF,GAAW8Z,GAAS3mI,EAAG8mI,EAAKvV,UAAWuV,EAAKxC,UAAYtkI,CACjE,EAaAq2D,GAAE22E,SAAW,SAAUvF,EAAIxB,GACzB,OAAOgH,GAAetjJ,KAAM,EAAG89I,EAAIxB,EACrC,EAaA5vE,GAAE62E,gBAAkB72E,GAAE82E,KAAO,SAAUzE,EAAIzC,GACzC,IAAIlmI,EAAIpW,KACNm9I,EAAO/mI,EAAE1V,YAGX,OADA0V,EAAI,IAAI+mI,EAAK/mI,QACF,IAAP2oI,EAAsB3oI,GAE1BgmI,GAAW2C,EAAI,EAAGxE,SAEP,IAAP+B,EAAeA,EAAKa,EAAKxC,SACxByB,GAAWE,EAAI,EAAG,GAEhBU,GAAS5mI,EAAG2oI,EAAK3oI,EAAEopC,EAAI,EAAG88F,GACnC,EAWA5vE,GAAEmyE,cAAgB,SAAUE,EAAIzC,GAC9B,IAAI56E,EACFtrD,EAAIpW,KACJm9I,EAAO/mI,EAAE1V,YAcX,YAZW,IAAPq+I,EACFr9E,EAAM+hF,GAAertI,GAAG,IAExBgmI,GAAW2C,EAAI,EAAGxE,SAEP,IAAP+B,EAAeA,EAAKa,EAAKxC,SACxByB,GAAWE,EAAI,EAAG,GAGvB56E,EAAM+hF,GADNrtI,EAAI4mI,GAAS,IAAIG,EAAK/mI,GAAI2oI,EAAK,EAAGzC,IACV,EAAMyC,EAAK,IAG9B3oI,EAAEoqI,UAAYpqI,EAAE2nI,SAAW,IAAMr8E,EAAMA,CAChD,EAmBAgL,GAAEg3E,QAAU,SAAU3E,EAAIzC,GACxB,IAAI56E,EAAKrrD,EACPD,EAAIpW,KACJm9I,EAAO/mI,EAAE1V,YAgBX,YAdW,IAAPq+I,EACFr9E,EAAM+hF,GAAertI,IAErBgmI,GAAW2C,EAAI,EAAGxE,SAEP,IAAP+B,EAAeA,EAAKa,EAAKxC,SACxByB,GAAWE,EAAI,EAAG,GAGvB56E,EAAM+hF,GADNptI,EAAI2mI,GAAS,IAAIG,EAAK/mI,GAAI2oI,EAAK3oI,EAAEopC,EAAI,EAAG88F,IAChB,EAAOyC,EAAK1oI,EAAEmpC,EAAI,IAKrCppC,EAAEoqI,UAAYpqI,EAAE2nI,SAAW,IAAMr8E,EAAMA,CAChD,EAcAgL,GAAEi3E,WAAa,SAAUC,GACvB,IAAItuH,EAAGuuH,EAAIC,EAAIC,EAAIvkG,EAAGihB,EAAG91D,EAAGq5I,EAAIC,EAAIpG,EAAI6E,EAAGjtH,EACzCrf,EAAIpW,KACJw9I,EAAKpnI,EAAEkf,EACP6nH,EAAO/mI,EAAE1V,YAEX,IAAK88I,EAAI,OAAO,IAAIL,EAAK/mI,GAUzB,GARA6tI,EAAKJ,EAAK,IAAI1G,EAAK,GACnB2G,EAAKE,EAAK,IAAI7G,EAAK,GAInB18E,GADAjhB,GADAlqB,EAAI,IAAI6nH,EAAK2G,IACPtkG,EAAIsjG,GAAatF,GAAMpnI,EAAEopC,EAAI,GAj6DxB,EAm6DXlqB,EAAEA,EAAE,GAAKkmH,GAAQ,GAAI/6E,EAAI,EAn6Dd,EAm6D6BA,EAAIA,GAEhC,MAARmjF,EAGFA,EAAOpkG,EAAI,EAAIlqB,EAAI2uH,MACd,CAEL,KADAt5I,EAAI,IAAIwyI,EAAKyG,IACNnC,SAAW92I,EAAEm3I,GAAGmC,GAAK,MAAMr+G,MAAMu1G,GAAkBxwI,GAC1Di5I,EAAOj5I,EAAEyyI,GAAG9nH,GAAMkqB,EAAI,EAAIlqB,EAAI2uH,EAAMt5I,CACtC,CAOA,IALAu4H,IAAW,EACXv4H,EAAI,IAAIwyI,EAAKnB,GAAewB,IAC5BK,EAAKV,EAAKvV,UACVuV,EAAKvV,UAAYpoF,EAl7DN,EAk7DUg+F,EAAGp6I,OAAoB,EAG1Cs/I,EAAI5D,GAAOn0I,EAAG2qB,EAAG,EAAG,EAAG,GAEH,IADpByuH,EAAKF,EAAGxF,KAAKqE,EAAExE,MAAM4F,KACd7+E,IAAI2+E,IACXC,EAAKC,EACLA,EAAKC,EACLA,EAAKE,EACLA,EAAKD,EAAG3F,KAAKqE,EAAExE,MAAM6F,IACrBC,EAAKD,EACLA,EAAKzuH,EACLA,EAAI3qB,EAAEyzI,MAAMsE,EAAExE,MAAM6F,IACpBp5I,EAAIo5I,EAeN,OAZAA,EAAKjF,GAAO8E,EAAKxF,MAAMyF,GAAKC,EAAI,EAAG,EAAG,GACtCE,EAAKA,EAAG3F,KAAK0F,EAAG7F,MAAM+F,IACtBJ,EAAKA,EAAGxF,KAAK0F,EAAG7F,MAAM4F,IACtBE,EAAGp8I,EAAIq8I,EAAGr8I,EAAIwO,EAAExO,EAGhB6tB,EAAIqpH,GAAOmF,EAAIH,EAAItkG,EAAG,GAAG4+F,MAAMhoI,GAAGgC,MAAM6sD,IAAI65E,GAAOkF,EAAIH,EAAIrkG,EAAG,GAAG4+F,MAAMhoI,GAAGgC,OAAS,EAC7E,CAAC6rI,EAAIH,GAAM,CAACE,EAAIH,GAEtB1G,EAAKvV,UAAYiW,EACjB3a,IAAW,EAEJztG,CACT,EAaAi3C,GAAEw3E,cAAgBx3E,GAAEy3E,MAAQ,SAAUrG,EAAIxB,GACxC,OAAOgH,GAAetjJ,KAAM,GAAI89I,EAAIxB,EACtC,EAmBA5vE,GAAE03E,UAAY,SAAU/tI,EAAGimI,GACzB,IAAIlmI,EAAIpW,KACNm9I,EAAO/mI,EAAE1V,YAIX,GAFA0V,EAAI,IAAI+mI,EAAK/mI,GAEJ,MAALC,EAAW,CAGb,IAAKD,EAAEkf,EAAG,OAAOlf,EAEjBC,EAAI,IAAI8mI,EAAK,GACbb,EAAKa,EAAKxC,QACZ,KAAO,CASL,GARAtkI,EAAI,IAAI8mI,EAAK9mI,QACF,IAAPimI,EACFA,EAAKa,EAAKxC,SAEVyB,GAAWE,EAAI,EAAG,IAIflmI,EAAEkf,EAAG,OAAOjf,EAAEzO,EAAIwO,EAAIC,EAG3B,IAAKA,EAAEif,EAEL,OADIjf,EAAEzO,IAAGyO,EAAEzO,EAAIwO,EAAExO,GACVyO,CAEX,CAeA,OAZIA,EAAEif,EAAE,IACN4tG,IAAW,EACX9sH,EAAI0oI,GAAO1oI,EAAGC,EAAG,EAAGimI,EAAI,GAAG4B,MAAM7nI,GACjC6sH,IAAW,EACX8Z,GAAS5mI,KAITC,EAAEzO,EAAIwO,EAAExO,EACRwO,EAAIC,GAGCD,CACT,EAQAs2D,GAAE23E,SAAW,WACX,OAAQrkJ,IACV,EAaA0sE,GAAE43E,QAAU,SAAUxG,EAAIxB,GACxB,OAAOgH,GAAetjJ,KAAM,EAAG89I,EAAIxB,EACrC,EA8CA5vE,GAAE63E,QAAU73E,GAAEpqE,IAAM,SAAU+T,GAC5B,IAAImpC,EAAGihB,EAAGo9E,EAAIpoH,EAAG6mH,EAAI10I,EACnBwO,EAAIpW,KACJm9I,EAAO/mI,EAAE1V,YACT8jJ,IAAOnuI,EAAI,IAAI8mI,EAAK9mI,IAGtB,KAAKD,EAAEkf,GAAMjf,EAAEif,GAAMlf,EAAEkf,EAAE,IAAOjf,EAAEif,EAAE,IAAI,OAAO,IAAI6nH,EAAK3B,IAASplI,EAAGouI,IAIpE,IAFApuI,EAAI,IAAI+mI,EAAK/mI,IAEP+0D,GAAG,GAAI,OAAO/0D,EAKpB,GAHAynI,EAAKV,EAAKvV,UACV0U,EAAKa,EAAKxC,SAENtkI,EAAE80D,GAAG,GAAI,OAAO6xE,GAAS5mI,EAAGynI,EAAIvB,GAMpC,IAHA98F,EAAI+7F,GAAUllI,EAAEmpC,EAxnEL,KA2nEFnpC,EAAEif,EAAElyB,OAAS,IAAMq9D,EAAI+jF,EAAK,GAAKA,EAAKA,IA1nE5B,iBA4nEjB,OADA/uH,EAAIgvH,GAAOtH,EAAM/mI,EAAGqqD,EAAGo9E,GAChBxnI,EAAEzO,EAAI,EAAI,IAAIu1I,EAAK,GAAG8B,IAAIxpH,GAAKunH,GAASvnH,EAAGooH,EAAIvB,GAMxD,IAHA10I,EAAIwO,EAAExO,GAGE,EAAG,CAGT,GAAI43C,EAAInpC,EAAEif,EAAElyB,OAAS,EAAG,OAAO,IAAI+5I,EAAKzjD,KAMxC,GAHoB,IAAN,EAATrjF,EAAEif,EAAEkqB,MAAc53C,EAAI,GAGhB,GAAPwO,EAAEopC,GAAoB,GAAVppC,EAAEkf,EAAE,IAAyB,GAAdlf,EAAEkf,EAAElyB,OAEjC,OADAgT,EAAExO,EAAIA,EACCwO,CAEX,CAcA,OAPAopC,EAAS,IADTihB,EAAI+6E,IAASplI,EAAGouI,KACDjlF,SAASkB,GAEpB,IAAI08E,EAAK18E,EAAI,IAAIjhB,EADjB+7F,GAAUiJ,GAAMniJ,KAAKvC,IAAI,KAAOk8I,GAAe5lI,EAAEkf,IAAMjzB,KAAKo4I,KAAOrkI,EAAEopC,EAAI,KAMrE29F,EAAKnC,KAAO,GAAKx7F,EAAI29F,EAAKpC,KAAO,EAAU,IAAIoC,EAAK39F,EAAI,EAAI53C,EAAI,EAAI,IAE5Es7H,IAAW,EACXia,EAAKxC,SAAWvkI,EAAExO,EAAI,EAMtB64D,EAAIp+D,KAAKE,IAAI,IAAKi9C,EAAI,IAAIp8C,SAG1BqyB,EAAIktH,GAAmBtsI,EAAE6nI,MAAMkE,GAAiBhsI,EAAGynI,EAAKp9E,IAAKo9E,IAGvDvoH,GAOA+mH,IAJJ5mH,EAAIunH,GAASvnH,EAAGooH,EAAK,EAAG,IAIEvoH,EAAGuoH,EAAIvB,KAC/B98F,EAAIq+F,EAAK,IAMJ7B,IAHLvmH,EAAIunH,GAAS2F,GAAmBtsI,EAAE6nI,MAAMkE,GAAiBhsI,EAAGopC,EAAIihB,IAAKjhB,GAAIA,EAAI,EAAG,IAG1DlqB,GAAGnyB,MAAM06I,EAAK,EAAGA,EAAK,IAAM,GAAK,OACrDpoH,EAAIunH,GAASvnH,EAAGooH,EAAK,EAAG,KAK9BpoH,EAAE7tB,EAAIA,EACNs7H,IAAW,EACXia,EAAKxC,SAAW2B,EAETU,GAASvnH,EAAGooH,EAAIvB,GACzB,EAcA5vE,GAAEg4E,YAAc,SAAU5G,EAAIxB,GAC5B,IAAI56E,EACFtrD,EAAIpW,KACJm9I,EAAO/mI,EAAE1V,YAcX,YAZW,IAAPo9I,EACFp8E,EAAM+hF,GAAertI,EAAGA,EAAEopC,GAAK29F,EAAKtC,UAAYzkI,EAAEopC,GAAK29F,EAAKrC,WAE5DsB,GAAW0B,EAAI,EAAGvD,SAEP,IAAP+B,EAAeA,EAAKa,EAAKxC,SACxByB,GAAWE,EAAI,EAAG,GAGvB56E,EAAM+hF,GADNrtI,EAAI4mI,GAAS,IAAIG,EAAK/mI,GAAI0nI,EAAIxB,GACNwB,GAAM1nI,EAAEopC,GAAKppC,EAAEopC,GAAK29F,EAAKtC,SAAUiD,IAGtD1nI,EAAEoqI,UAAYpqI,EAAE2nI,SAAW,IAAMr8E,EAAMA,CAChD,EAiBAgL,GAAEi4E,oBAAsBj4E,GAAEk4E,KAAO,SAAU9G,EAAIxB,GAC7C,IACEa,EADMn9I,KACGU,YAYX,YAVW,IAAPo9I,GACFA,EAAKX,EAAKvV,UACV0U,EAAKa,EAAKxC,WAEVyB,GAAW0B,EAAI,EAAGvD,SAEP,IAAP+B,EAAeA,EAAKa,EAAKxC,SACxByB,GAAWE,EAAI,EAAG,IAGlBU,GAAS,IAAIG,EAbZn9I,MAaqB89I,EAAIxB,EACnC,EAUA5vE,GAAE7hE,SAAW,WACX,IAAIuL,EAAIpW,KACNm9I,EAAO/mI,EAAE1V,YACTghE,EAAM+hF,GAAertI,EAAGA,EAAEopC,GAAK29F,EAAKtC,UAAYzkI,EAAEopC,GAAK29F,EAAKrC,UAE9D,OAAO1kI,EAAEoqI,UAAYpqI,EAAE2nI,SAAW,IAAMr8E,EAAMA,CAChD,EAOAgL,GAAEm4E,UAAYn4E,GAAEo4E,MAAQ,WACtB,OAAO9H,GAAS,IAAIh9I,KAAKU,YAAYV,MAAOA,KAAKw/C,EAAI,EAAG,EAC1D,EAQAktB,GAAEq4E,QAAUr4E,GAAEs4E,OAAS,WACrB,IAAI5uI,EAAIpW,KACNm9I,EAAO/mI,EAAE1V,YACTghE,EAAM+hF,GAAertI,EAAGA,EAAEopC,GAAK29F,EAAKtC,UAAYzkI,EAAEopC,GAAK29F,EAAKrC,UAE9D,OAAO1kI,EAAEoqI,QAAU,IAAM9+E,EAAMA,CACjC,EAkNA,IAAIo9E,GAAS,WAGX,SAASmG,EAAgB7uI,EAAGqqD,EAAGpwC,GAC7B,IAAI60H,EACFrC,EAAQ,EACR33I,EAAIkL,EAAEhT,OAER,IAAKgT,EAAIA,EAAEjT,QAAS+H,KAClBg6I,EAAO9uI,EAAElL,GAAKu1D,EAAIoiF,EAClBzsI,EAAElL,GAAKg6I,EAAO70H,EAAO,EACrBwyH,EAAQqC,EAAO70H,EAAO,EAKxB,OAFIwyH,GAAOzsI,EAAEooC,QAAQqkG,GAEdzsI,CACT,CAEA,SAASu3E,EAAQxkF,EAAGqe,EAAG29H,EAAIC,GACzB,IAAIl6I,EAAGuqB,EAEP,GAAI0vH,GAAMC,EACR3vH,EAAI0vH,EAAKC,EAAK,GAAK,OAEnB,IAAKl6I,EAAIuqB,EAAI,EAAGvqB,EAAIi6I,EAAIj6I,IACtB,GAAI/B,EAAE+B,IAAMsc,EAAEtc,GAAI,CAChBuqB,EAAItsB,EAAE+B,GAAKsc,EAAEtc,GAAK,GAAK,EACvB,KACF,CAIJ,OAAOuqB,CACT,CAEA,SAAS4vH,EAASl8I,EAAGqe,EAAG29H,EAAI90H,GAI1B,IAHA,IAAInlB,EAAI,EAGDi6I,KACLh8I,EAAEg8I,IAAOj6I,EACTA,EAAI/B,EAAEg8I,GAAM39H,EAAE29H,GAAM,EAAI,EACxBh8I,EAAEg8I,GAAMj6I,EAAImlB,EAAOlnB,EAAEg8I,GAAM39H,EAAE29H,GAI/B,MAAQh8I,EAAE,IAAMA,EAAE/F,OAAS,GAAI+F,EAAEisF,OACnC,CAEA,OAAO,SAAUh/E,EAAGC,EAAGwnI,EAAIvB,EAAIyC,EAAI1uH,GACjC,IAAI40C,EAAKzlB,EAAGt0C,EAAGu1D,EAAG6kF,EAASC,EAAMC,EAAMC,EAAO/C,EAAGgD,EAAIC,EAAKC,EAAMC,EAAM/H,EAAIzrH,EAAGyzH,EAAIC,EAAIC,EACnFC,EAAIC,EACJ/I,EAAO/mI,EAAE1V,YACT8hE,EAAOpsD,EAAExO,GAAKyO,EAAEzO,EAAI,GAAK,EACzB41I,EAAKpnI,EAAEkf,EACPmoH,EAAKpnI,EAAEif,EAGT,KAAKkoH,GAAOA,EAAG,IAAOC,GAAOA,EAAG,IAE9B,OAAO,IAAIN,EACR/mI,EAAExO,GAAMyO,EAAEzO,IAAM41I,GAAKC,GAAMD,EAAG,IAAMC,EAAG,GAAMA,GAG9CD,GAAe,GAATA,EAAG,KAAYC,EAAY,EAAPj7E,EAAWA,EAAO,EAHQk3B,KAsBxD,IAhBIrpE,GACFi1H,EAAU,EACV9lG,EAAIppC,EAAEopC,EAAInpC,EAAEmpC,IAEZnvB,EAAOwrH,GACPyJ,EAxkFO,EAykFP9lG,EAAI+7F,GAAUnlI,EAAEopC,EAAI8lG,GAAW/J,GAAUllI,EAAEmpC,EAAI8lG,IAGjDW,EAAKxI,EAAGr6I,OACR2iJ,EAAKvI,EAAGp6I,OAERsiJ,GADAhD,EAAI,IAAIvF,EAAK36E,IACNltC,EAAI,GAINpqB,EAAI,EAAGuyI,EAAGvyI,KAAOsyI,EAAGtyI,IAAM,GAAIA,KAanC,GAXIuyI,EAAGvyI,IAAMsyI,EAAGtyI,IAAM,IAAIs0C,IAEhB,MAANq+F,GACFC,EAAKD,EAAKV,EAAKvV,UACf0U,EAAKa,EAAKxC,UAEVmD,EADSiB,EACJlB,GAAMznI,EAAEopC,EAAInpC,EAAEmpC,GAAK,EAEnBq+F,EAGHC,EAAK,EACP4H,EAAGxlJ,KAAK,GACRqlJ,GAAO,MACF,CAOL,GAJAzH,EAAKA,EAAKwH,EAAU,EAAI,EACxBp6I,EAAI,EAGM,GAAN+6I,EAAS,CAMX,IALAxlF,EAAI,EACJg9E,EAAKA,EAAG,GACRK,KAGQ5yI,EAAI66I,GAAMtlF,IAAMq9E,IAAM5yI,IAC5BmnB,EAAIouC,EAAIpwC,GAAQmtH,EAAGtyI,IAAM,GACzBw6I,EAAGx6I,GAAKmnB,EAAIorH,EAAK,EACjBh9E,EAAIpuC,EAAIorH,EAAK,EAGf8H,EAAO9kF,GAAKv1D,EAAI66I,CAGlB,KAAO,CAiBL,KAdAtlF,EAAIpwC,GAAQotH,EAAG,GAAK,GAAK,GAEjB,IACNA,EAAKwH,EAAgBxH,EAAIh9E,EAAGpwC,GAC5BmtH,EAAKyH,EAAgBzH,EAAI/8E,EAAGpwC,GAC5B41H,EAAKxI,EAAGr6I,OACR2iJ,EAAKvI,EAAGp6I,QAGV0iJ,EAAKG,EAELL,GADAD,EAAMnI,EAAGr6I,MAAM,EAAG8iJ,IACP7iJ,OAGJwiJ,EAAOK,GAAKN,EAAIC,KAAU,GAEjCM,EAAKzI,EAAGt6I,SACLq7C,QAAQ,GACXwnG,EAAMvI,EAAG,GAELA,EAAG,IAAMptH,EAAO,KAAK21H,EAEzB,GACEvlF,EAAI,GAGJwE,EAAM0oB,EAAQ8vD,EAAIkI,EAAKM,EAAIL,IAGjB,GAGRC,EAAOF,EAAI,GACPM,GAAML,IAAMC,EAAOA,EAAOx1H,GAAQs1H,EAAI,IAAM,KAGhDllF,EAAIolF,EAAOG,EAAM,GAUT,GACFvlF,GAAKpwC,IAAMowC,EAAIpwC,EAAO,GAWf,IAHX40C,EAAM0oB,EALN63D,EAAOP,EAAgBxH,EAAIh9E,EAAGpwC,GAKVs1H,EAJpBF,EAAQD,EAAKpiJ,OACbwiJ,EAAOD,EAAIviJ,WAOTq9D,IAGA4kF,EAASG,EAAMS,EAAKR,EAAQS,EAAKzI,EAAIgI,EAAOp1H,MAOrC,GAALowC,IAAQwE,EAAMxE,EAAI,GACtB+kF,EAAO/H,EAAGt6I,UAGZsiJ,EAAQD,EAAKpiJ,QACDwiJ,GAAMJ,EAAKhnG,QAAQ,GAG/B6mG,EAASM,EAAKH,EAAMI,EAAMv1H,IAGd,GAAR40C,IAIFA,EAAM0oB,EAAQ8vD,EAAIkI,EAAKM,EAHvBL,EAAOD,EAAIviJ,SAMD,IACRq9D,IAGA4kF,EAASM,EAAKM,EAAKL,EAAOM,EAAKzI,EAAImI,EAAMv1H,IAI7Cu1H,EAAOD,EAAIviJ,QACM,IAAR6hE,IACTxE,IACAklF,EAAM,CAAC,IAITD,EAAGx6I,KAAOu1D,EAGNwE,GAAO0gF,EAAI,GACbA,EAAIC,KAAUpI,EAAGsI,IAAO,GAExBH,EAAM,CAACnI,EAAGsI,IACVF,EAAO,UAGDE,IAAOC,QAAiB,IAAXJ,EAAI,KAAkB7H,KAE7CyH,OAAkB,IAAXI,EAAI,EACb,CAGKD,EAAG,IAAIA,EAAGtwD,OACjB,CAGA,GAAe,GAAXkwD,EACF5C,EAAEljG,EAAIA,EACN46F,GAAUmL,MACL,CAGL,IAAKr6I,EAAI,EAAGu1D,EAAIilF,EAAG,GAAIjlF,GAAK,GAAIA,GAAK,GAAIv1D,IACzCw3I,EAAEljG,EAAIt0C,EAAIs0C,EAAI8lG,EAAU,EAExBtI,GAAS0F,EAAG3D,EAAKlB,EAAK6E,EAAEljG,EAAI,EAAIq+F,EAAIvB,EAAIiJ,EAC1C,CAEA,OAAO7C,CACT,CACD,CArQY,GA4QZ,SAAS1F,GAAS5mI,EAAG0nI,EAAIxB,EAAI6J,GAC5B,IAAIC,EAAQl7I,EAAG2sE,EAAGpX,EAAGg8E,EAAI4J,EAAS76E,EAAGgyE,EAAI8I,EACvCnJ,EAAO/mI,EAAE1V,YAGX6lJ,EAAK,GAAU,MAANzI,EAAY,CAInB,KAHAN,EAAKpnI,EAAEkf,GAGE,OAAOlf,EAWhB,IAAKgwI,EAAS,EAAG3lF,EAAI+8E,EAAG,GAAI/8E,GAAK,GAAIA,GAAK,GAAI2lF,IAI9C,IAHAl7I,EAAI4yI,EAAKsI,GAGD,EACNl7I,GApyFO,EAqyFP2sE,EAAIimE,EAIJrB,GAHAjxE,EAAIgyE,EAAG8I,EAAM,IAGJ9K,GAAQ,GAAI4K,EAASvuE,EAAI,GAAK,GAAK,OAI5C,IAFAyuE,EAAMjkJ,KAAKqnG,MAAMx+F,EAAI,GA3yFd,MA4yFPu1D,EAAI+8E,EAAGp6I,QACO,CACZ,IAAI+iJ,EASF,MAAMI,EANN,KAAO9lF,KAAO6lF,GAAM9I,EAAGt9I,KAAK,GAC5BsrE,EAAIixE,EAAK,EACT2J,EAAS,EAETvuE,GADA3sE,GApzFG,KAqzFgB,CAIvB,KAAO,CAIL,IAHAsgE,EAAI/K,EAAI+8E,EAAG8I,GAGNF,EAAS,EAAG3lF,GAAK,GAAIA,GAAK,GAAI2lF,IAUnC3J,GAHA5kE,GAJA3sE,GAh0FK,KAo0Fck7I,GAGV,EAAI,EAAI56E,EAAIgwE,GAAQ,GAAI4K,EAASvuE,EAAI,GAAK,GAAK,CAC1D,CAmBF,GAfAsuE,EAAcA,GAAerI,EAAK,QAChB,IAAhBN,EAAG8I,EAAM,KAAkBzuE,EAAI,EAAIrM,EAAIA,EAAIgwE,GAAQ,GAAI4K,EAASvuE,EAAI,IAMtEwuE,EAAU/J,EAAK,GACVG,GAAM0J,KAAuB,GAAN7J,GAAWA,IAAOlmI,EAAExO,EAAI,EAAI,EAAI,IACxD60I,EAAK,GAAW,GAANA,IAAkB,GAANH,GAAW6J,GAAqB,GAAN7J,IAG9CpxI,EAAI,EAAI2sE,EAAI,EAAIrM,EAAIgwE,GAAQ,GAAI4K,EAASvuE,GAAK,EAAI2lE,EAAG8I,EAAM,IAAM,GAAM,GACvEhK,IAAOlmI,EAAExO,EAAI,EAAI,EAAI,IAEvBk2I,EAAK,IAAMN,EAAG,GAgBhB,OAfAA,EAAGp6I,OAAS,EACRijJ,GAGFvI,GAAM1nI,EAAEopC,EAAI,EAGZg+F,EAAG,GAAKhC,GAAQ,IAn2FX,EAm2F2BsC,EAn2F3B,MAo2FL1nI,EAAEopC,GAAKs+F,GAAM,GAIbN,EAAG,GAAKpnI,EAAEopC,EAAI,EAGTppC,EAiBT,GAbS,GAALlL,GACFsyI,EAAGp6I,OAASkjJ,EACZ7lF,EAAI,EACJ6lF,MAEA9I,EAAGp6I,OAASkjJ,EAAM,EAClB7lF,EAAI+6E,GAAQ,GAr3FL,EAq3FoBtwI,GAI3BsyI,EAAG8I,GAAOzuE,EAAI,GAAKrM,EAAIgwE,GAAQ,GAAI4K,EAASvuE,GAAK2jE,GAAQ,GAAI3jE,GAAK,GAAKpX,EAAI,GAGzE4lF,EACF,OAAS,CAGP,GAAW,GAAPC,EAAU,CAGZ,IAAKp7I,EAAI,EAAG2sE,EAAI2lE,EAAG,GAAI3lE,GAAK,GAAIA,GAAK,GAAI3sE,IAEzC,IADA2sE,EAAI2lE,EAAG,IAAM/8E,EACRA,EAAI,EAAGoX,GAAK,GAAIA,GAAK,GAAIpX,IAG1Bv1D,GAAKu1D,IACPrqD,EAAEopC,IACEg+F,EAAG,IAAM3B,KAAM2B,EAAG,GAAK,IAG7B,KACF,CAEE,GADAA,EAAG8I,IAAQ7lF,EACP+8E,EAAG8I,IAAQzK,GAAM,MACrB2B,EAAG8I,KAAS,EACZ7lF,EAAI,CAER,CAIF,IAAKv1D,EAAIsyI,EAAGp6I,OAAoB,IAAZo6I,IAAKtyI,IAAWsyI,EAAGrtD,KACzC,CAqBA,OAnBI+yC,KAGE9sH,EAAEopC,EAAI29F,EAAKnC,MAGb5kI,EAAEkf,EAAI,KACNlf,EAAEopC,EAAIk6C,KAGGtjF,EAAEopC,EAAI29F,EAAKpC,OAGpB3kI,EAAEopC,EAAI,EACNppC,EAAEkf,EAAI,CAAC,KAKJlf,CACT,CAGA,SAASqtI,GAAertI,EAAGowI,EAAO1I,GAChC,IAAK1nI,EAAEmpD,WAAY,OAAOknF,GAAkBrwI,GAC5C,IAAIqqD,EACFjhB,EAAIppC,EAAEopC,EACNkiB,EAAMs6E,GAAe5lI,EAAEkf,GACvBrqB,EAAMy2D,EAAIt+D,OAwBZ,OAtBIojJ,GACE1I,IAAOr9E,EAAIq9E,EAAK7yI,GAAO,EACzBy2D,EAAMA,EAAIlY,OAAO,GAAK,IAAMkY,EAAIv+D,MAAM,GAAKg5I,GAAc17E,GAChDx1D,EAAM,IACfy2D,EAAMA,EAAIlY,OAAO,GAAK,IAAMkY,EAAIv+D,MAAM,IAGxCu+D,EAAMA,GAAOtrD,EAAEopC,EAAI,EAAI,IAAM,MAAQppC,EAAEopC,GAC9BA,EAAI,GACbkiB,EAAM,KAAOy6E,IAAe38F,EAAI,GAAKkiB,EACjCo8E,IAAOr9E,EAAIq9E,EAAK7yI,GAAO,IAAGy2D,GAAOy6E,GAAc17E,KAC1CjhB,GAAKv0C,GACdy2D,GAAOy6E,GAAc38F,EAAI,EAAIv0C,GACzB6yI,IAAOr9E,EAAIq9E,EAAKt+F,EAAI,GAAK,IAAGkiB,EAAMA,EAAM,IAAMy6E,GAAc17E,OAE3DA,EAAIjhB,EAAI,GAAKv0C,IAAKy2D,EAAMA,EAAIv+D,MAAM,EAAGs9D,GAAK,IAAMiB,EAAIv+D,MAAMs9D,IAC3Dq9E,IAAOr9E,EAAIq9E,EAAK7yI,GAAO,IACrBu0C,EAAI,IAAMv0C,IAAKy2D,GAAO,KAC1BA,GAAOy6E,GAAc17E,KAIlBiB,CACT,CAIA,SAAS8gF,GAAkB4D,EAAQ5mG,GACjC,IAAIgsB,EAAI46E,EAAO,GAGf,IAAM5mG,GAx9FK,EAw9FUgsB,GAAK,GAAIA,GAAK,GAAIhsB,IACvC,OAAOA,CACT,CAGA,SAAS6iG,GAAQlF,EAAMW,EAAID,GACzB,GAAIC,EAAKhC,GAKP,MAFA5Y,IAAW,EACP2a,IAAIV,EAAKvV,UAAYiW,GACnBj4G,MAAMw1G,IAEd,OAAO4B,GAAS,IAAIG,EAAK1C,IAAOqD,EAAI,GAAG,EACzC,CAGA,SAAS2C,GAAMtD,EAAMW,EAAIxB,GACvB,GAAIwB,EAAK/B,GAAc,MAAMn2G,MAAMw1G,IACnC,OAAO4B,GAAS,IAAIG,EAAK,IAAKW,EAAIxB,GAAI,EACxC,CAGA,SAASwG,GAAasD,GACpB,IAAI56E,EAAI46E,EAAOhjJ,OAAS,EACtB6H,EAj/FS,EAi/FHugE,EAAe,EAKvB,GAHAA,EAAI46E,EAAO56E,GAGJ,CAGL,KAAOA,EAAI,IAAM,EAAGA,GAAK,GAAIvgE,IAG7B,IAAKugE,EAAI46E,EAAO,GAAI56E,GAAK,GAAIA,GAAK,GAAIvgE,GACxC,CAEA,OAAOA,CACT,CAGA,SAASkxI,GAAc17E,GAErB,IADA,IAAIimF,EAAK,GACFjmF,KAAMimF,GAAM,IACnB,OAAOA,CACT,CAUA,SAASjC,GAAOtH,EAAM/mI,EAAGzL,EAAGkzI,GAC1B,IAAIsI,EACF1wH,EAAI,IAAI0nH,EAAK,GAIb18E,EAAIp+D,KAAKqnG,KAAKm0C,EAvhGL,EAuhGqB,GAIhC,IAFA3a,IAAW,IAEF,CAOP,GANIv4H,EAAI,GAEFg8I,IADJlxH,EAAIA,EAAEyoH,MAAM9nI,IACGkf,EAAGmrC,KAAI0lF,GAAc,GAI5B,KADVx7I,EAAI4wI,GAAU5wI,EAAI,IACL,CAGXA,EAAI8qB,EAAEH,EAAElyB,OAAS,EACb+iJ,GAA0B,IAAX1wH,EAAEH,EAAE3qB,MAAY8qB,EAAEH,EAAE3qB,GACvC,KACF,CAGAg8I,IADAvwI,EAAIA,EAAE8nI,MAAM9nI,IACDkf,EAAGmrC,EAChB,CAIA,OAFAyiE,IAAW,EAEJztG,CACT,CAGA,SAASmxH,GAAMj8I,GACb,OAA6B,EAAtBA,EAAE2qB,EAAE3qB,EAAE2qB,EAAElyB,OAAS,EAC1B,CAMA,SAASyjJ,GAAS1J,EAAMv0I,EAAMk+I,GAK5B,IAJA,IAAIzwI,EACFD,EAAI,IAAI+mI,EAAKv0I,EAAK,IAClBsC,EAAI,IAEGA,EAAItC,EAAKxF,QAAS,CAEzB,KADAiT,EAAI,IAAI8mI,EAAKv0I,EAAKsC,KACXtD,EAAG,CACRwO,EAAIC,EACJ,KACF,CAAWD,EAAE0wI,GAAMzwI,KACjBD,EAAIC,EAER,CAEA,OAAOD,CACT,CAkCA,SAASusI,GAAmBvsI,EAAG0nI,GAC7B,IAAIoE,EAAa6E,EAAOlvE,EAAGv1E,EAAK0kJ,EAAK30H,EAAG6uH,EACtCxC,EAAM,EACNxzI,EAAI,EACJu1D,EAAI,EACJ08E,EAAO/mI,EAAE1V,YACT47I,EAAKa,EAAKxC,SACVkD,EAAKV,EAAKvV,UAGZ,IAAKxxH,EAAEkf,IAAMlf,EAAEkf,EAAE,IAAMlf,EAAEopC,EAAI,GAE3B,OAAO,IAAI29F,EAAK/mI,EAAEkf,EACblf,EAAEkf,EAAE,GAASlf,EAAExO,EAAI,EAAI,EAAI,IAAlB,EACVwO,EAAExO,EAAIwO,EAAExO,EAAI,EAAI,EAAIwO,EAAI,KAa9B,IAVU,MAAN0nI,GACF5a,IAAW,EACXge,EAAMrD,GAENqD,EAAMpD,EAGRzrH,EAAI,IAAI8qH,EAAK,QAGN/mI,EAAEopC,GAAK,GAGZppC,EAAIA,EAAE8nI,MAAM7rH,GACZouC,GAAK,EAUP,IAJAygF,GADA6F,EAAQ1kJ,KAAKvC,IAAI07I,GAAQ,EAAG/6E,IAAMp+D,KAAKo4I,KAAO,EAAI,EAAI,EAEtDyH,EAAc5/I,EAAM0kJ,EAAM,IAAI7J,EAAK,GACnCA,EAAKvV,UAAYsZ,IAER,CAKP,GAJA5+I,EAAM06I,GAAS16I,EAAI47I,MAAM9nI,GAAI8qI,EAAK,GAClCgB,EAAcA,EAAYhE,QAAQhzI,GAG9B8wI,IAFJ3pH,EAAI20H,EAAI3I,KAAKS,GAAOx8I,EAAK4/I,EAAahB,EAAK,KAEtB5rH,GAAGnyB,MAAM,EAAG+9I,KAASlF,GAAegL,EAAI1xH,GAAGnyB,MAAM,EAAG+9I,GAAM,CAE7E,IADArpE,EAAIpX,EACGoX,KAAKmvE,EAAMhK,GAASgK,EAAI9I,MAAM8I,GAAM9F,EAAK,GAOhD,GAAU,MAANpD,EAYF,OADAX,EAAKvV,UAAYiW,EACVmJ,EAVP,KAAItI,EAAM,GAAKrC,GAAoB2K,EAAI1xH,EAAG4rH,EAAM6F,EAAOzK,EAAIoC,IAMzD,OAAO1B,GAASgK,EAAK7J,EAAKvV,UAAYiW,EAAIvB,EAAIpZ,IAAW,GALzDia,EAAKvV,UAAYsZ,GAAO,GACxBgB,EAAc5/I,EAAM+vB,EAAI,IAAI8qH,EAAK,GACjCjyI,EAAI,EACJwzI,GAQN,CAEAsI,EAAM30H,CACR,CACF,CAkBA,SAAS+vH,GAAiB/rI,EAAGynI,GAC3B,IAAIvvH,EAAGsiE,EAAIqxD,EAAa1iG,EAAGynG,EAAWvI,EAAKsI,EAAK30H,EAAG6uH,EAAK3sC,EAAIE,EAC1D9pG,EAAI,EAEJyL,EAAIC,EACJmnI,EAAKpnI,EAAEkf,EACP6nH,EAAO/mI,EAAE1V,YACT47I,EAAKa,EAAKxC,SACVkD,EAAKV,EAAKvV,UAGZ,GAAIxxH,EAAExO,EAAI,IAAM41I,IAAOA,EAAG,KAAOpnI,EAAEopC,GAAc,GAATg+F,EAAG,IAAwB,GAAbA,EAAGp6I,OACvD,OAAO,IAAI+5I,EAAKK,IAAOA,EAAG,IAAK,IAAgB,GAAPpnI,EAAExO,EAAS8xF,IAAM8jD,EAAK,EAAIpnI,GAcpE,GAXU,MAAN0nI,GACF5a,IAAW,EACXge,EAAMrD,GAENqD,EAAMpD,EAGRX,EAAKvV,UAAYsZ,GAnBP,GAqBVrwD,GADAtiE,EAAIytH,GAAewB,IACZh0F,OAAO,KAEVnnD,KAAK+V,IAAIonC,EAAIppC,EAAEopC,GAAK,OAqCtB,OAJAntB,EAAIgwH,GAAQlF,EAAM+D,EAAM,EAAGrD,GAAIK,MAAM1+F,EAAI,IACzCppC,EAAIgsI,GAAiB,IAAIjF,EAAKtsD,EAAK,IAAMtiE,EAAEprB,MAAM,IAAK+9I,EAzD9C,IAyD2D7C,KAAKhsH,GACxE8qH,EAAKvV,UAAYiW,EAEJ,MAANC,EAAad,GAAS5mI,EAAGynI,EAAIvB,EAAIpZ,IAAW,GAAQ9sH,EAxB3D,KAAOy6E,EAAK,GAAW,GAANA,GAAiB,GAANA,GAAWtiE,EAAEi7B,OAAO,GAAK,GAGnDqnC,GADAtiE,EAAIytH,IADJ5lI,EAAIA,EAAE8nI,MAAM7nI,IACSif,IACdk0B,OAAO,GACd7+C,IAiCJ,IA9BE60C,EAAIppC,EAAEopC,EAEFqxC,EAAK,GACPz6E,EAAI,IAAI+mI,EAAK,KAAO5uH,GACpBixB,KAEAppC,EAAI,IAAI+mI,EAAKtsD,EAAK,IAAMtiE,EAAEprB,MAAM,IAepCoxG,EAAKn+F,EAKL4wI,EAAMC,EAAY7wI,EAAI0oI,GAAO1oI,EAAEgoI,MAAM,GAAIhoI,EAAEioI,KAAK,GAAI6C,EAAK,GACzDzsC,EAAKuoC,GAAS5mI,EAAE8nI,MAAM9nI,GAAI8qI,EAAK,GAC/BgB,EAAc,IAEL,CAIP,GAHA+E,EAAYjK,GAASiK,EAAU/I,MAAMzpC,GAAKysC,EAAK,GAG3ClF,IAFJ3pH,EAAI20H,EAAI3I,KAAKS,GAAOmI,EAAW,IAAI9J,EAAK+E,GAAchB,EAAK,KAEtC5rH,GAAGnyB,MAAM,EAAG+9I,KAASlF,GAAegL,EAAI1xH,GAAGnyB,MAAM,EAAG+9I,GAAM,CAc7E,GAbA8F,EAAMA,EAAI9I,MAAM,GAIN,IAAN1+F,IAASwnG,EAAMA,EAAI3I,KAAKgE,GAAQlF,EAAM+D,EAAM,EAAGrD,GAAIK,MAAM1+F,EAAI,MACjEwnG,EAAMlI,GAAOkI,EAAK,IAAI7J,EAAKxyI,GAAIu2I,EAAK,GAQ1B,MAANpD,EAWF,OADAX,EAAKvV,UAAYiW,EACVmJ,EAVP,IAAI3K,GAAoB2K,EAAI1xH,EAAG4rH,EA5F3B,GA4FwC5E,EAAIoC,GAM9C,OAAO1B,GAASgK,EAAK7J,EAAKvV,UAAYiW,EAAIvB,EAAIpZ,IAAW,GALzDia,EAAKvV,UAAYsZ,GA7Ff,GA8FF7uH,EAAI40H,EAAY7wI,EAAI0oI,GAAOvqC,EAAG6pC,MAAM,GAAI7pC,EAAG8pC,KAAK,GAAI6C,EAAK,GACzDzsC,EAAKuoC,GAAS5mI,EAAE8nI,MAAM9nI,GAAI8qI,EAAK,GAC/BgB,EAAcxD,EAAM,CAQ1B,CAEAsI,EAAM30H,EACN6vH,GAAe,CACjB,CACF,CAIA,SAASuE,GAAkBrwI,GAEzB,OAAOqkD,OAAOrkD,EAAExO,EAAIwO,EAAExO,EAAI,EAC5B,CAMA,SAASs/I,GAAa9wI,EAAGsrD,GACvB,IAAIliB,EAAGt0C,EAAGD,EAmBV,KAhBKu0C,EAAIkiB,EAAIr+D,QAAQ,OAAS,IAAGq+D,EAAMA,EAAIp4D,QAAQ,IAAK,MAGnD4B,EAAIw2D,EAAIp+B,OAAO,OAAS,GAGvBkc,EAAI,IAAGA,EAAIt0C,GACfs0C,IAAMkiB,EAAIv+D,MAAM+H,EAAI,GACpBw2D,EAAMA,EAAIylF,UAAU,EAAGj8I,IACds0C,EAAI,IAGbA,EAAIkiB,EAAIt+D,QAIL8H,EAAI,EAAyB,KAAtBw2D,EAAI0yE,WAAWlpI,GAAWA,KAGtC,IAAKD,EAAMy2D,EAAIt+D,OAAoC,KAA5Bs+D,EAAI0yE,WAAWnpI,EAAM,KAAaA,GAGzD,GAFAy2D,EAAMA,EAAIv+D,MAAM+H,EAAGD,GAEV,CAYP,GAXAA,GAAOC,EACPkL,EAAEopC,EAAIA,EAAIA,EAAIt0C,EAAI,EAClBkL,EAAEkf,EAAI,GAMNpqB,GAAKs0C,EAAI,GAz2GA,EA02GLA,EAAI,IAAGt0C,GA12GF,GA42GLA,EAAID,EAAK,CAEX,IADIC,GAAGkL,EAAEkf,EAAEp1B,MAAMwhE,EAAIv+D,MAAM,EAAG+H,IACzBD,GA92GE,EA82GeC,EAAID,GAAMmL,EAAEkf,EAAEp1B,MAAMwhE,EAAIv+D,MAAM+H,EAAGA,GA92GhD,IAg3GPA,EAh3GO,GA+2GPw2D,EAAMA,EAAIv+D,MAAM+H,IACG9H,MACrB,MACE8H,GAAKD,EAGP,KAAOC,KAAMw2D,GAAO,IACpBtrD,EAAEkf,EAAEp1B,MAAMwhE,GAENwhE,KAGE9sH,EAAEopC,EAAIppC,EAAE1V,YAAYs6I,MAGtB5kI,EAAEkf,EAAI,KACNlf,EAAEopC,EAAIk6C,KAGGtjF,EAAEopC,EAAIppC,EAAE1V,YAAYq6I,OAG7B3kI,EAAEopC,EAAI,EACNppC,EAAEkf,EAAI,CAAC,IAIb,MAGElf,EAAEopC,EAAI,EACNppC,EAAEkf,EAAI,CAAC,GAGT,OAAOlf,CACT,CAMA,SAASgxI,GAAWhxI,EAAGsrD,GACrB,IAAIrxC,EAAM8sH,EAAMkK,EAASn8I,EAAGo8I,EAASr8I,EAAKu4D,EAAGg6E,EAAI8E,EAEjD,GAAI5gF,EAAIr+D,QAAQ,MAAQ,GAEtB,GADAq+D,EAAMA,EAAIp4D,QAAQ,eAAgB,MAC9BsyI,GAAU1yI,KAAKw4D,GAAM,OAAOwlF,GAAa9wI,EAAGsrD,QAC3C,GAAY,aAARA,GAA8B,QAARA,EAI/B,OAHMA,IAAKtrD,EAAExO,EAAI8xF,KACjBtjF,EAAEopC,EAAIk6C,IACNtjF,EAAEkf,EAAI,KACClf,EAGT,GAAIslI,GAAMxyI,KAAKw4D,GACbrxC,EAAO,GACPqxC,EAAMA,EAAIx8D,mBACL,GAAIu2I,GAASvyI,KAAKw4D,GACvBrxC,EAAO,MACF,KAAIsrH,GAAQzyI,KAAKw4D,GAGtB,MAAM97B,MAAMu1G,GAAkBz5E,GAF9BrxC,EAAO,CAGT,CA+BA,KA5BAnlB,EAAIw2D,EAAIp+B,OAAO,OAEP,GACNkgC,GAAK9B,EAAIv+D,MAAM+H,EAAI,GACnBw2D,EAAMA,EAAIylF,UAAU,EAAGj8I,IAEvBw2D,EAAMA,EAAIv+D,MAAM,GAMlBmkJ,GADAp8I,EAAIw2D,EAAIr+D,QAAQ,OACD,EACf85I,EAAO/mI,EAAE1V,YAEL4mJ,IAGFp8I,GADAD,GADAy2D,EAAMA,EAAIp4D,QAAQ,IAAK,KACblG,QACA8H,EAGVm8I,EAAU5C,GAAOtH,EAAM,IAAIA,EAAK9sH,GAAOnlB,EAAO,EAAJA,IAOvCA,EAHLo3I,GADA9E,EAAKd,GAAYh7E,EAAKrxC,EAAMwrH,KACpBz4I,OAAS,EAGM,IAAVo6I,EAAGtyI,KAAYA,EAAGsyI,EAAGrtD,MAClC,OAAIjlF,EAAI,EAAU,IAAIiyI,EAAW,EAAN/mI,EAAExO,IAC7BwO,EAAEopC,EAAIgjG,GAAkBhF,EAAI8E,GAC5BlsI,EAAEkf,EAAIkoH,EACNta,IAAW,EAQPokB,IAASlxI,EAAI0oI,GAAO1oI,EAAGixI,EAAe,EAANp8I,IAGhCu4D,IAAGptD,EAAIA,EAAE8nI,MAAM77I,KAAK+V,IAAIorD,GAAK,GAAKg4E,GAAQ,EAAGh4E,GAAK+jF,GAAQjlJ,IAAI,EAAGkhE,KACrE0/D,IAAW,EAEJ9sH,EACT,CA0CA,SAAS6nI,GAAad,EAAMxyI,EAAGyL,EAAGC,EAAGmxI,GACnC,IAAI3vE,EAAGxlD,EAAGo1H,EAAGhzC,EAEXopC,EAAKV,EAAKvV,UACVnnE,EAAIp+D,KAAKqnG,KAAKm0C,EA9gHL,GAohHX,IAJA3a,IAAW,EACXzuB,EAAKr+F,EAAE8nI,MAAM9nI,GACbqxI,EAAI,IAAItK,EAAK9mI,KAEJ,CAMP,GALAgc,EAAIysH,GAAO2I,EAAEvJ,MAAMzpC,GAAK,IAAI0oC,EAAKxyI,IAAMA,KAAMkzI,EAAI,GACjD4J,EAAID,EAAenxI,EAAEgoI,KAAKhsH,GAAKhc,EAAE+nI,MAAM/rH,GACvChc,EAAIyoI,GAAOzsH,EAAE6rH,MAAMzpC,GAAK,IAAI0oC,EAAKxyI,IAAMA,KAAMkzI,EAAI,QAGlC,KAFfxrH,EAAIo1H,EAAEpJ,KAAKhoI,IAELif,EAAEmrC,GAAe,CACrB,IAAKoX,EAAIpX,EAAGpuC,EAAEiD,EAAEuiD,KAAO4vE,EAAEnyH,EAAEuiD,IAAMA,MACjC,IAAU,GAANA,EAAS,KACf,CAEAA,EAAI4vE,EACJA,EAAIpxI,EACJA,EAAIgc,EACJA,EAAIwlD,CAEN,CAKA,OAHAqrD,IAAW,EACX7wG,EAAEiD,EAAElyB,OAASq9D,EAAI,EAEVpuC,CACT,CAIA,SAAS2rH,GAAQx2H,EAAGg4B,GAElB,IADA,IAAI70C,EAAI6c,IACCg4B,GAAG70C,GAAK6c,EACjB,OAAO7c,CACT,CAIA,SAAS2zI,GAAiBnB,EAAM/mI,GAC9B,IAAIic,EACFmuH,EAAQpqI,EAAExO,EAAI,EACd8/I,EAAKjH,GAAMtD,EAAMA,EAAKvV,UAAW,GACjC2Y,EAASmH,EAAGxJ,MAAM,IAIpB,IAFA9nI,EAAIA,EAAEgC,OAEAwoI,IAAIL,GAER,OADAlG,GAAWmG,EAAQ,EAAI,EAChBpqI,EAKT,IAFAic,EAAIjc,EAAE+oI,SAASuI,IAET3J,SACJ1D,GAAWmG,EAAQ,EAAI,MAClB,CAIL,IAHApqI,EAAIA,EAAEgoI,MAAM/rH,EAAE6rH,MAAMwJ,KAGd9G,IAAIL,GAER,OADAlG,GAAWuM,GAAMv0H,GAAMmuH,EAAQ,EAAI,EAAMA,EAAQ,EAAI,EAC9CpqI,EAGTikI,GAAWuM,GAAMv0H,GAAMmuH,EAAQ,EAAI,EAAMA,EAAQ,EAAI,CACvD,CAEA,OAAOpqI,EAAEgoI,MAAMsJ,GAAItvI,KACrB,CAQA,SAASkrI,GAAeltI,EAAGwmI,EAASkB,EAAIxB,GACtC,IAAIjsH,EAAMmvB,EAAGt0C,EAAGu1D,EAAGx1D,EAAKo7I,EAAS3kF,EAAK87E,EAAInnI,EACxC8mI,EAAO/mI,EAAE1V,YACT8lJ,OAAe,IAAP1I,EAWV,GATI0I,GACFpK,GAAW0B,EAAI,EAAGvD,SACP,IAAP+B,EAAeA,EAAKa,EAAKxC,SACxByB,GAAWE,EAAI,EAAG,KAEvBwB,EAAKX,EAAKvV,UACV0U,EAAKa,EAAKxC,UAGPvkI,EAAEmpD,WAEA,CAoCL,IA3BIinF,GACFn2H,EAAO,EACQ,IAAXusH,EACFkB,EAAU,EAALA,EAAS,EACM,GAAXlB,IACTkB,EAAU,EAALA,EAAS,IAGhBztH,EAAOusH,GAfT1xI,GADAw2D,EAAM+hF,GAAertI,IACb/S,QAAQ,OAsBP,IACPq+D,EAAMA,EAAIp4D,QAAQ,IAAK,KACvB+M,EAAI,IAAI8mI,EAAK,IACX39F,EAAIkiB,EAAIt+D,OAAS8H,EACnBmL,EAAEif,EAAIonH,GAAY+G,GAAeptI,GAAI,GAAIga,GACzCha,EAAEmpC,EAAInpC,EAAEif,EAAElyB,QAIZo8C,EAAIv0C,GADJuyI,EAAKd,GAAYh7E,EAAK,GAAIrxC,IACbjtB,OAGO,GAAbo6I,IAAKvyI,IAAYuyI,EAAGrtD,MAE3B,GAAKqtD,EAAG,GAED,CAyBL,GAxBItyI,EAAI,EACNs0C,MAEAppC,EAAI,IAAI+mI,EAAK/mI,IACXkf,EAAIkoH,EACNpnI,EAAEopC,EAAIA,EAENg+F,GADApnI,EAAI0oI,GAAO1oI,EAAGC,EAAGynI,EAAIxB,EAAI,EAAGjsH,IACrBiF,EACPkqB,EAAIppC,EAAEopC,EACN6mG,EAAUjM,IAIZlvI,EAAIsyI,EAAGM,GACPr9E,EAAIpwC,EAAO,EACXg2H,EAAUA,QAA0B,IAAf7I,EAAGM,EAAK,GAE7BuI,EAAU/J,EAAK,QACJ,IAANpxI,GAAgBm7I,KAAoB,IAAP/J,GAAYA,KAAQlmI,EAAExO,EAAI,EAAI,EAAI,IAChEsD,EAAIu1D,GAAKv1D,IAAMu1D,IAAa,IAAP67E,GAAY+J,GAAkB,IAAP/J,GAAyB,EAAbkB,EAAGM,EAAK,IAChExB,KAAQlmI,EAAExO,EAAI,EAAI,EAAI,IAE1B41I,EAAGp6I,OAAS06I,EAERuI,EAGF,OAAS7I,IAAKM,GAAMztH,EAAO,GACzBmtH,EAAGM,GAAM,EACJA,MACDt+F,EACFg+F,EAAGh/F,QAAQ,IAMjB,IAAKvzC,EAAMuyI,EAAGp6I,QAASo6I,EAAGvyI,EAAM,KAAMA,GAGtC,IAAKC,EAAI,EAAGw2D,EAAM,GAAIx2D,EAAID,EAAKC,IAAKw2D,GAAO84E,GAAShxF,OAAOg0F,EAAGtyI,IAG9D,GAAIs7I,EAAO,CACT,GAAIv7I,EAAM,EACR,GAAe,IAAX2xI,GAA4B,GAAXA,EAAc,CAEjC,IADA1xI,EAAe,IAAX0xI,EAAgB,EAAI,IACjB3xI,EAAKA,EAAMC,EAAGD,IAAOy2D,GAAO,IAEnC,IAAKz2D,GADLuyI,EAAKd,GAAYh7E,EAAKrxC,EAAMusH,IACdx5I,QAASo6I,EAAGvyI,EAAM,KAAMA,GAGtC,IAAKC,EAAI,EAAGw2D,EAAM,KAAMx2D,EAAID,EAAKC,IAAKw2D,GAAO84E,GAAShxF,OAAOg0F,EAAGtyI,GAClE,MACEw2D,EAAMA,EAAIlY,OAAO,GAAK,IAAMkY,EAAIv+D,MAAM,GAI1Cu+D,EAAOA,GAAOliB,EAAI,EAAI,IAAM,MAAQA,CACtC,MAAO,GAAIA,EAAI,EAAG,CAChB,OAASA,GAAIkiB,EAAM,IAAMA,EACzBA,EAAM,KAAOA,CACf,MACE,KAAMliB,EAAIv0C,EAAK,IAAKu0C,GAAKv0C,EAAKu0C,KAAOkiB,GAAO,SACnCliB,EAAIv0C,IAAKy2D,EAAMA,EAAIv+D,MAAM,EAAGq8C,GAAK,IAAMkiB,EAAIv+D,MAAMq8C,GAE9D,MApEEkiB,EAAM8kF,EAAQ,OAAS,IAsEzB9kF,GAAkB,IAAXk7E,EAAgB,KAAkB,GAAXA,EAAe,KAAkB,GAAXA,EAAe,KAAO,IAAMl7E,CAClF,MA/GEA,EAAM+kF,GAAkBrwI,GAiH1B,OAAOA,EAAExO,EAAI,EAAI,IAAM85D,EAAMA,CAC/B,CAIA,SAASilF,GAAS58I,EAAKkB,GACrB,GAAIlB,EAAI3G,OAAS6H,EAEf,OADAlB,EAAI3G,OAAS6H,GACN,CAEX,CAyDA,SAASmN,GAAIhC,GACX,OAAO,IAAIpW,KAAKoW,GAAGgC,KACrB,CASA,SAASkoI,GAAKlqI,GACZ,OAAO,IAAIpW,KAAKoW,GAAGkqI,MACrB,CAUA,SAASK,GAAMvqI,GACb,OAAO,IAAIpW,KAAKoW,GAAGuqI,OACrB,CAWA,SAAS,GAAIvqI,EAAGC,GACd,OAAO,IAAIrW,KAAKoW,GAAGioI,KAAKhoI,EAC1B,CAUA,SAASm7F,GAAKp7F,GACZ,OAAO,IAAIpW,KAAKoW,GAAGo7F,MACrB,CAUA,SAASuvC,GAAM3qI,GACb,OAAO,IAAIpW,KAAKoW,GAAG2qI,OACrB,CAUA,SAASM,GAAKjrI,GACZ,OAAO,IAAIpW,KAAKoW,GAAGirI,MACrB,CAUA,SAASJ,GAAM7qI,GACb,OAAO,IAAIpW,KAAKoW,GAAG6qI,OACrB,CA4BA,SAASh9E,GAAM5tD,EAAGD,GAChBC,EAAI,IAAIrW,KAAKqW,GACbD,EAAI,IAAIpW,KAAKoW,GACb,IAAIqf,EACFooH,EAAK79I,KAAK4nI,UACV0U,EAAKt8I,KAAK26I,SACVuG,EAAMrD,EAAK,EAkCb,OA/BKxnI,EAAEzO,GAAMwO,EAAExO,EAIHyO,EAAEif,GAAMlf,EAAEkf,GAKVlf,EAAEkf,GAAKjf,EAAE0nI,UACnBtoH,EAAIrf,EAAExO,EAAI,EAAI64I,GAAMzgJ,KAAM69I,EAAIvB,GAAM,IAAIt8I,KAAK,IAC3C4H,EAAIyO,EAAEzO,GAGEyO,EAAEif,GAAKlf,EAAE2nI,UACnBtoH,EAAIgrH,GAAMzgJ,KAAMkhJ,EAAK,GAAGhD,MAAM,KAC5Bt2I,EAAIyO,EAAEzO,EAGCwO,EAAExO,EAAI,GACf5H,KAAK4nI,UAAYsZ,EACjBlhJ,KAAK26I,SAAW,EAChBllH,EAAIz1B,KAAKqhJ,KAAKvC,GAAOzoI,EAAGD,EAAG8qI,EAAK,IAChC9qI,EAAIqqI,GAAMzgJ,KAAMkhJ,EAAK,GACrBlhJ,KAAK4nI,UAAYiW,EACjB79I,KAAK26I,SAAW2B,EAChB7mH,EAAIpf,EAAEzO,EAAI,EAAI6tB,EAAE2oH,MAAMhoI,GAAKqf,EAAE4oH,KAAKjoI,IAElCqf,EAAIz1B,KAAKqhJ,KAAKvC,GAAOzoI,EAAGD,EAAG8qI,EAAK,KAvBhCzrH,EAAIgrH,GAAMzgJ,KAAMkhJ,EAAK,GAAGhD,MAAM9nI,EAAExO,EAAI,EAAI,IAAO,MAC7CA,EAAIyO,EAAEzO,EALR6tB,EAAI,IAAIz1B,KAAK05F,KA8BRjkE,CACT,CAUA,SAASgpH,GAAKroI,GACZ,OAAO,IAAIpW,KAAKoW,GAAGqoI,MACrB,CASA,SAAS/0C,GAAKtzF,GACZ,OAAO4mI,GAAS5mI,EAAI,IAAIpW,KAAKoW,GAAIA,EAAEopC,EAAI,EAAG,EAC5C,CAWA,SAAS09F,GAAM9mI,EAAG7T,EAAK+S,GACrB,OAAO,IAAItV,KAAKoW,GAAG8mI,MAAM36I,EAAK+S,EAChC,CAqBA,SAASg9E,GAAOhmF,GACd,IAAKA,GAAsB,iBAARA,EAAkB,MAAMs5B,MAAMs1G,GAAe,mBAChE,IAAIhwI,EAAGs4D,EAAGz4C,EACR48H,GAA+B,IAAjBr7I,EAAI8tE,SAClBwtE,EAAK,CACH,YAAa,EAAGrN,GAChB,WAAY,EAAG,EACf,YAAaD,GAAW,EACxB,WAAY,EAAGA,GACf,OAAQ,EAAGA,GACX,QAASA,GAAW,EACpB,SAAU,EAAG,GAGjB,IAAKpvI,EAAI,EAAGA,EAAI08I,EAAGxkJ,OAAQ8H,GAAK,EAE9B,GADIs4D,EAAIokF,EAAG18I,GAAIy8I,IAAa3nJ,KAAKwjE,GAAKk3E,GAASl3E,SAC1B,KAAhBz4C,EAAIze,EAAIk3D,IAAgB,CAC3B,KAAI+3E,GAAUxwH,KAAOA,GAAKA,GAAK68H,EAAG18I,EAAI,IAAM6f,GAAK68H,EAAG18I,EAAI,IACnD,MAAM06B,MAAMu1G,GAAkB33E,EAAI,KAAOz4C,GADc/qB,KAAKwjE,GAAKz4C,CAExE,CAIF,GADIy4C,EAAI,SAAUmkF,IAAa3nJ,KAAKwjE,GAAKk3E,GAASl3E,SAC7B,KAAhBz4C,EAAIze,EAAIk3D,IAAgB,CAC3B,IAAU,IAANz4C,IAAoB,IAANA,GAAqB,IAANA,GAAiB,IAANA,EAY1C,MAAM6a,MAAMu1G,GAAkB33E,EAAI,KAAOz4C,GAXzC,GAAIA,EAAG,CACL,GAAqB,oBAAVkwH,SAAyBA,SACjCA,OAAO4M,kBAAmB5M,OAAO6M,YAGlC,MAAMliH,MAAMy1G,IAFZr7I,KAAKwjE,IAAK,CAId,MACExjE,KAAKwjE,IAAK,CAKhB,CAEA,OAAOxjE,IACT,CAUA,SAAS+oE,GAAI3yD,GACX,OAAO,IAAIpW,KAAKoW,GAAG2yD,KACrB,CAUA,SAAS02E,GAAKrpI,GACZ,OAAO,IAAIpW,KAAKoW,GAAGqpI,MACrB,CAwMA,SAASR,GAAI7oI,EAAGC,GACd,OAAO,IAAIrW,KAAKoW,GAAG6oI,IAAI5oI,EACzB,CAUA,SAAS0yH,GAAI3yH,GACX,OAAO,IAAIpW,KAAKoW,GAAG2yH,KACrB,CASA,SAAS7qG,GAAM9nB,GACb,OAAO4mI,GAAS5mI,EAAI,IAAIpW,KAAKoW,GAAIA,EAAEopC,EAAI,EAAG,EAC5C,CAYA,SAASuoG,KACP,IAAI78I,EAAGP,EACL0nB,EAAI,IAAIryB,KAAK,GAIf,IAFAkjI,IAAW,EAENh4H,EAAI,EAAGA,EAAIa,UAAU3I,QAExB,IADAuH,EAAI,IAAI3K,KAAK+L,UAAUb,OAChBoqB,EAMIjD,EAAEiD,IACXjD,EAAIA,EAAEgsH,KAAK1zI,EAAEuzI,MAAMvzI,SAPX,CACR,GAAIA,EAAE/C,EAEJ,OADAs7H,IAAW,EACJ,IAAIljI,KAAK,KAElBqyB,EAAI1nB,CACN,CAOF,OAFAu4H,IAAW,EAEJ7wG,EAAE0xC,MACX,CAQA,SAASikF,GAAkB17I,GACzB,OAAOA,aAAei7I,IAAWj7I,GAAOA,EAAIopB,cAAgB4lH,KAAO,CACrE,CAUA,SAASuF,GAAGzqI,GACV,OAAO,IAAIpW,KAAKoW,GAAGyqI,IACrB,CAaA,SAAS/gJ,GAAIsW,EAAGC,GACd,OAAO,IAAIrW,KAAKoW,GAAGtW,IAAIuW,EACzB,CAUA,SAAS4xI,GAAK7xI,GACZ,OAAO,IAAIpW,KAAKoW,GAAGtW,IAAI,EACzB,CAUA,SAAS,GAAMsW,GACb,OAAO,IAAIpW,KAAKoW,GAAGtW,IAAI,GACzB,CASA,SAASwV,KACP,OAAOuxI,GAAS7mJ,KAAM+L,UAAW,KACnC,CASA,SAASxJ,KACP,OAAOskJ,GAAS7mJ,KAAM+L,UAAW,KACnC,CAWA,SAAS02I,GAAIrsI,EAAGC,GACd,OAAO,IAAIrW,KAAKoW,GAAGqsI,IAAIpsI,EACzB,CAWA,SAAS8sI,GAAI/sI,EAAGC,GACd,OAAO,IAAIrW,KAAKoW,GAAG+sI,IAAI9sI,EACzB,CAWA,SAAS/T,GAAI8T,EAAGC,GACd,OAAO,IAAIrW,KAAKoW,GAAG9T,IAAI+T,EACzB,CAWA,SAAS7T,GAAOs7I,GACd,IAAIxoH,EAAGkqB,EAAGihB,EAAG91D,EACXO,EAAI,EACJuqB,EAAI,IAAIz1B,KAAK,GACby8I,EAAK,GAOP,QALW,IAAPqB,EAAeA,EAAK99I,KAAK4nI,UACxBwU,GAAW0B,EAAI,EAAGvD,IAEvB95E,EAAIp+D,KAAKqnG,KAAKo0C,EAr8IH,GAu8IN99I,KAAKi7I,OAIH,GAAIA,OAAO4M,gBAGhB,IAFAvyH,EAAI2lH,OAAO4M,gBAAgB,IAAIK,YAAYznF,IAEpCv1D,EAAIu1D,IACT91D,EAAI2qB,EAAEpqB,KAIG,MACPoqB,EAAEpqB,GAAK+vI,OAAO4M,gBAAgB,IAAIK,YAAY,IAAI,GAKlDzL,EAAGvxI,KAAOP,EAAI,QAKb,KAAIswI,OAAO6M,YAwBhB,MAAMliH,MAAMy1G,IAnBZ,IAFA/lH,EAAI2lH,OAAO6M,YAAYrnF,GAAK,GAErBv1D,EAAIu1D,IAGT91D,EAAI2qB,EAAEpqB,IAAMoqB,EAAEpqB,EAAI,IAAM,IAAMoqB,EAAEpqB,EAAI,IAAM,MAAmB,IAAXoqB,EAAEpqB,EAAI,KAAc,MAG7D,MACP+vI,OAAO6M,YAAY,GAAGK,KAAK7yH,EAAGpqB,IAK9BuxI,EAAGv8I,KAAKyK,EAAI,KACZO,GAAK,GAITA,EAAIu1D,EAAI,CAGV,MA/CE,KAAOv1D,EAAIu1D,GAAIg8E,EAAGvxI,KAAuB,IAAhB7I,KAAKG,SAAiB,EA2DjD,IATAs7I,GA1/IW,GAy/IXr9E,EAAIg8E,IAAKvxI,KAIA4yI,IACPnzI,EAAI6wI,GAAQ,GA9/IH,EA8/IkBsC,GAC3BrB,EAAGvxI,IAAMu1D,EAAI91D,EAAI,GAAKA,GAIP,IAAV8xI,EAAGvxI,GAAUA,IAAKuxI,EAAGtsD,MAG5B,GAAIjlF,EAAI,EACNs0C,EAAI,EACJi9F,EAAK,CAAC,OACD,CAIL,IAHAj9F,GAAK,EAGY,IAAVi9F,EAAG,GAAUj9F,GA7gJX,EA6gJ0Bi9F,EAAGrnD,QAGtC,IAAK30B,EAAI,EAAG91D,EAAI8xI,EAAG,GAAI9xI,GAAK,GAAIA,GAAK,GAAI81D,IAGrCA,EAnhJK,IAmhJSjhB,GAnhJT,EAmhJyBihB,EACpC,CAKA,OAHAhrC,EAAE+pB,EAAIA,EACN/pB,EAAEH,EAAImnH,EAEChnH,CACT,CAWA,SAAS,GAAMrf,GACb,OAAO4mI,GAAS5mI,EAAI,IAAIpW,KAAKoW,GAAIA,EAAEopC,EAAI,EAAGx/C,KAAK26I,SACjD,CAcA,SAAS,GAAKvkI,GAEZ,OADAA,EAAI,IAAIpW,KAAKoW,IACJkf,EAAKlf,EAAEkf,EAAE,GAAKlf,EAAExO,EAAI,EAAIwO,EAAExO,EAAKwO,EAAExO,GAAK8xF,GACjD,CAUA,SAAS5xB,GAAI1xD,GACX,OAAO,IAAIpW,KAAKoW,GAAG0xD,KACrB,CAUA,SAASg4E,GAAK1pI,GACZ,OAAO,IAAIpW,KAAKoW,GAAG0pI,MACrB,CAUA,SAAS/7E,GAAK3tD,GACZ,OAAO,IAAIpW,KAAKoW,GAAG2tD,MACrB,CAWA,SAAS0qB,GAAIr4E,EAAGC,GACd,OAAO,IAAIrW,KAAKoW,GAAGq4E,IAAIp4E,EACzB,CAYA,SAAS2wI,KACP,IAAI97I,EAAI,EACNtC,EAAOmD,UACPqK,EAAI,IAAIpW,KAAK4I,EAAKsC,IAGpB,IADAg4H,IAAW,EACJ9sH,EAAExO,KAAOsD,EAAItC,EAAKxF,QAASgT,EAAIA,EAAEioI,KAAKz1I,EAAKsC,IAGlD,OAFAg4H,IAAW,EAEJ8Z,GAAS5mI,EAAGpW,KAAK4nI,UAAW5nI,KAAK26I,SAC1C,CAUA,SAAS7kE,GAAI1/D,GACX,OAAO,IAAIpW,KAAKoW,GAAG0/D,KACrB,CAUA,SAASsqE,GAAKhqI,GACZ,OAAO,IAAIpW,KAAKoW,GAAGgqI,MACrB,CASA,SAAS0E,GAAM1uI,GACb,OAAO4mI,GAAS5mI,EAAI,IAAIpW,KAAKoW,GAAIA,EAAEopC,EAAI,EAAG,EAC5C,CAGAktB,GAAEriE,OAAO+9I,IAAI,+BAAiC17E,GAAE7hE,SAChD6hE,GAAEriE,OAAOqrB,aAAe,UAGjB,IAAI6xH,GAAU76E,GAAEhsE,YA7mBvB,SAAS,EAAM4L,GACb,IAAIpB,EAAGs4D,EAAGokF,EASV,SAASL,EAAQx8H,GACf,IAAIy0B,EAAGt0C,EAAGmnB,EACRjc,EAAIpW,KAGN,KAAMoW,aAAamxI,GAAU,OAAO,IAAIA,EAAQx8H,GAOhD,GAHA3U,EAAE1V,YAAc6mJ,EAGZS,GAAkBj9H,GAuBpB,OAtBA3U,EAAExO,EAAImjB,EAAEnjB,OAEJs7H,IACGn4G,EAAEuK,GAAKvK,EAAEy0B,EAAI+nG,EAAQvM,MAGxB5kI,EAAEopC,EAAIk6C,IACNtjF,EAAEkf,EAAI,MACGvK,EAAEy0B,EAAI+nG,EAAQxM,MAGvB3kI,EAAEopC,EAAI,EACNppC,EAAEkf,EAAI,CAAC,KAEPlf,EAAEopC,EAAIz0B,EAAEy0B,EACRppC,EAAEkf,EAAIvK,EAAEuK,EAAEnyB,UAGZiT,EAAEopC,EAAIz0B,EAAEy0B,EACRppC,EAAEkf,EAAIvK,EAAEuK,EAAIvK,EAAEuK,EAAEnyB,QAAU4nB,EAAEuK,IAQhC,GAAU,WAFVjD,SAAWtH,GAES,CAClB,GAAU,IAANA,EAIF,OAHA3U,EAAExO,EAAI,EAAImjB,EAAI,GAAK,EAAI,EACvB3U,EAAEopC,EAAI,OACNppC,EAAEkf,EAAI,CAAC,IAYT,GARIvK,EAAI,GACNA,GAAKA,EACL3U,EAAExO,GAAK,GAEPwO,EAAExO,EAAI,EAIJmjB,MAAQA,GAAKA,EAAI,IAAK,CACxB,IAAKy0B,EAAI,EAAGt0C,EAAI6f,EAAG7f,GAAK,GAAIA,GAAK,GAAIs0C,IAkBrC,YAhBI0jF,GACE1jF,EAAI+nG,EAAQvM,MACd5kI,EAAEopC,EAAIk6C,IACNtjF,EAAEkf,EAAI,MACGkqB,EAAI+nG,EAAQxM,MACrB3kI,EAAEopC,EAAI,EACNppC,EAAEkf,EAAI,CAAC,KAEPlf,EAAEopC,EAAIA,EACNppC,EAAEkf,EAAI,CAACvK,KAGT3U,EAAEopC,EAAIA,EACNppC,EAAEkf,EAAI,CAACvK,IAMX,CAAO,OAAQ,EAAJA,GAAU,GACdA,IAAG3U,EAAExO,EAAI8xF,KACdtjF,EAAEopC,EAAIk6C,SACNtjF,EAAEkf,EAAI,OAID4xH,GAAa9wI,EAAG2U,EAAElgB,WAE3B,CAAO,GAAU,WAANwnB,EACT,MAAMuT,MAAMu1G,GAAkBpwH,GAahC,OAT8B,MAAzB7f,EAAI6f,EAAEqpH,WAAW,KACpBrpH,EAAIA,EAAE5nB,MAAM,GACZiT,EAAExO,GAAK,IAGG,KAANsD,IAAU6f,EAAIA,EAAE5nB,MAAM,IAC1BiT,EAAExO,EAAI,GAGDg0I,GAAU1yI,KAAK6hB,GAAKm8H,GAAa9wI,EAAG2U,GAAKq8H,GAAWhxI,EAAG2U,EAChE,CA2DA,GAzDAw8H,EAAQjiJ,UAAYonE,GAEpB66E,EAAQc,SAAW,EACnBd,EAAQe,WAAa,EACrBf,EAAQgB,WAAa,EACrBhB,EAAQiB,YAAc,EACtBjB,EAAQkB,cAAgB,EACxBlB,EAAQmB,gBAAkB,EAC1BnB,EAAQoB,gBAAkB,EAC1BpB,EAAQqB,gBAAkB,EAC1BrB,EAAQsB,iBAAmB,EAC3BtB,EAAQuB,OAAS,EAEjBvB,EAAQj1D,OAASi1D,EAAQ5rI,IAAM22E,GAC/Bi1D,EAAQ3rH,MAAQ,EAChB2rH,EAAQ3L,UAAYoM,GAEpBT,EAAQnvI,IAAMA,GACdmvI,EAAQjH,KAAOA,GACfiH,EAAQ5G,MAAQA,GAChB4G,EAAQh/I,IAAM,GACdg/I,EAAQ/1C,KAAOA,GACf+1C,EAAQxG,MAAQA,GAChBwG,EAAQlG,KAAOA,GACfkG,EAAQtG,MAAQA,GAChBsG,EAAQtjF,MAAQA,GAChBsjF,EAAQ9I,KAAOA,GACf8I,EAAQ79C,KAAOA,GACf69C,EAAQrK,MAAQA,GAChBqK,EAAQx+E,IAAMA,GACdw+E,EAAQ9H,KAAOA,GACf8H,EAAQtI,IAAMA,GACdsI,EAAQxe,IAAMA,GACdwe,EAAQrpH,MAAQA,GAChBqpH,EAAQQ,MAAQA,GAChBR,EAAQ1G,GAAKA,GACb0G,EAAQznJ,IAAMA,GACdynJ,EAAQhlF,MAAQ,GAChBglF,EAAQU,KAAOA,GACfV,EAAQjyI,IAAMA,GACdiyI,EAAQhlJ,IAAMA,GACdglJ,EAAQ9E,IAAMA,GACd8E,EAAQpE,IAAMA,GACdoE,EAAQjlJ,IAAMA,GACdilJ,EAAQ/kJ,OAASA,GACjB+kJ,EAAQ/xI,MAAQ,GAChB+xI,EAAQ/kF,KAAO,GACf+kF,EAAQz/E,IAAMA,GACdy/E,EAAQzH,KAAOA,GACfyH,EAAQxjF,KAAOA,GACfwjF,EAAQ94D,IAAMA,GACd84D,EAAQP,IAAMA,GACdO,EAAQzxE,IAAMA,GACdyxE,EAAQnH,KAAOA,GACfmH,EAAQzC,MAAQA,QAEJ,IAARx4I,IAAgBA,EAAM,CAAC,GACvBA,IACmB,IAAjBA,EAAI8tE,SAEN,IADAwtE,EAAK,CAAC,YAAa,WAAY,WAAY,WAAY,OAAQ,OAAQ,SAAU,UAC5E18I,EAAI,EAAGA,EAAI08I,EAAGxkJ,QAAckJ,EAAIgU,eAAekjD,EAAIokF,EAAG18I,QAAOoB,EAAIk3D,GAAKxjE,KAAKwjE,IAMpF,OAFA+jF,EAAQj1D,OAAOhmF,GAERi7I,CACT,CAwbqC,CAAM7M,IAG3CD,GAAO,IAAI8M,GAAQ9M,IACnB,GAAK,IAAI8M,GAAQ,IAEjB,YC1xJAh/F,GAAYkQ,SAAS,Q9DDrB,cAA6B,GAC3B/1B,eAAiB,CAAC,UAClBA,cAAgB,CACd98B,KAAM,CACJA,KAAM60D,OACNd,QAAS,QAEX91D,KAAM+G,OACN4C,QAAS5C,QAGX3B,UACE,MAAMS,EAAU1J,KAAK+oJ,gBAAkB/oJ,KAAKgpJ,aAAehpJ,KAAK0J,QAGhE1J,KAAK06E,MAAQ,IAAI,GAAMhxE,EAAQu0E,WAAW,MAAO,CAE/Cr4E,KAAM5F,KAAKipJ,UACXplJ,KAAM7D,KAAKkpJ,UACX17I,QAASxN,KAAKu5G,cAElB,CAEAvzG,aACEhG,KAAK06E,MAAM57D,UACX9e,KAAK06E,WAAQ7xE,CACf,CAEIqgJ,gBASF,OARKlpJ,KAAKmpJ,cACRvpJ,QAAQqjD,KACN,sEAIJrjD,QAAQE,IAAIE,KAAKopJ,WAEVppJ,KAAKopJ,SACd,CAEI7vC,mBACF,MAAO,IACFv5G,KAAKwc,kBACLxc,KAAKqpJ,aAEZ,CAEI7sI,qBACF,MAAO,CAAC,CACV,I8D7CF+rC,GAAYkQ,SAAS,WCNrB,cAA6B,GAC3B/1B,eAAiB,CAAC,QAElBz5B,U7DmhCoB,EAACkhD,EAAY38C,EAAU,CAAC,KAC1C,IAAI4rB,EAAIC,EAAIiwH,EACZ,MAAMzzF,EAAa1L,EAAWzgD,QAAQ49C,QAAQiiG,iBAC9C,IAAIC,EACA3zF,IACA2zF,EAAsBr/F,EAAW,GAAG0L,YAExC,MAAM1oC,GAAiB3f,aAAyC,EAASA,EAAQ9D,UAAY8/I,GAAuBr/F,EAAWzgD,QAC/H,KAAMyjB,aAAyBjY,aAAeiY,aAAyBs8H,YACnE,OACJ,MAAMniG,EAAUn6B,EAAcm6B,QACxBoiG,EAAa50H,SAASwyB,EAAQoiG,YAAc,KAAOl8I,EAAQk8I,YAAc,GACzE,aAAE1R,EAAY,YAAEj5E,EAAW,sBAAEk5E,EAAqB,gBAAEC,GAAoBttI,OAAOiS,OAAOk7H,GAAkBvqI,GACxGm8I,EAA8C,QAA3BvwH,EAAK+wB,EAAW5e,aAA0B,IAAPnS,OAAgB,EAASA,EAAGv4B,KAAKspD,GACvFy/F,EAA8C,QAA3BvwH,EAAK8wB,EAAW3e,aAA0B,IAAPnS,OAAgB,EAASA,EAAGx4B,KAAKspD,GACvF0/F,EAAoE,QAAtCP,EAAKn/F,EAAW2/F,wBAAqC,IAAPR,OAAgB,EAASA,EAAGzoJ,KAAKspD,GACnH5tB,eAAegP,EAAM/lC,GACjB,GAAI2kD,EAAW6tF,aACX,OACJ7tF,EAAW6tF,cAAe,EAC1B2R,GAAmBA,EAAgBnkJ,GACnC,MAAMukJ,EAAmB,GAAa,YAAav8I,EAAS85C,GACtD0iG,EAAqB,GAAa,cAAex8I,EAAS85C,GAC1D2iG,EAAiB,GAAa,UAAWz8I,EAAS85C,GAClD4iG,EAAiB,GAAa,UAAW18I,EAAS85C,GAClDyX,GACF5xC,EAAc1e,UAAUpH,OAAO03D,GAE9Bm5E,GACDiS,EAAch9H,EAAe+8H,SAE3B/1I,EAAWgZ,EAAe48H,EAAkBC,EAAoBC,EAAgBlrF,EAAak5E,EAAuBC,GACtHwR,EAAa,GACbznJ,YAAW,KACPupC,EAAMhmC,EAAM,GACbkkJ,EAEX,CACAntH,eAAeiP,EAAMhmC,GACjB,IAAK2kD,EAAW6tF,aACZ,OACJ7tF,EAAW6tF,cAAe,EAC1B4R,GAAmBA,EAAgBpkJ,GACnC,MAAM4kJ,EAAmB,GAAa,YAAa58I,EAAS85C,GACtD+iG,EAAqB,GAAa,cAAe78I,EAAS85C,GAC1D4iG,EAAiB,GAAa,UAAW18I,EAAS85C,GAClD2iG,EAAiB,GAAa,UAAWz8I,EAAS85C,GACnD4wF,GACDiS,EAAch9H,EAAe88H,SAE3B91I,EAAWgZ,EAAei9H,EAAkBC,EAAoBH,EAAgBnrF,EAAak5E,EAAuBC,GACpHn5E,GACF5xC,EAAc1e,UAAUlG,IAAIw2D,EAEpC,CACA,SAAS+qF,EAAiBtkJ,GACtBqkJ,GAA8BA,EAA2BrkJ,GACrD2kD,EAAW6tF,aACXxsG,IAGAD,GAER,CACAhP,eAAepoB,EAAWzK,EAAS4gJ,EAAgBr9I,EAAes9I,EAAYxrF,EAAak5E,EAAuBuS,GAC9G,MAAMC,EAAiB,GACnBxS,IACAqS,EAAer+I,SAAQy+I,GAAOhhJ,EAAQ+E,UAAUyB,SAASw6I,IAAQA,IAAQ3rF,GAAe0rF,EAAevqJ,KAAKwqJ,KAC5Gz9I,EAAchB,SAAQy+I,GAAOhhJ,EAAQ+E,UAAUyB,SAASw6I,IAAQA,IAAQ3rF,GAAe0rF,EAAevqJ,KAAKwqJ,KAC3GH,EAAWt+I,SAAQy+I,GAAOhhJ,EAAQ+E,UAAUyB,SAASw6I,IAAQA,IAAQ3rF,GAAe0rF,EAAevqJ,KAAKwqJ,MAE5GC,EAAWjhJ,EAAS4gJ,GACpBH,EAAczgJ,EAAS+gJ,GACvBE,EAAWjhJ,EAASuD,SAsD5BsvB,iBACI,OAAO,IAAI5d,SAAQC,IACfue,uBAAsB,KAClBA,sBAAsBve,EAAQ,GAChC,GAEV,CA3Dc,GACNurI,EAAczgJ,EAAS4gJ,GACvBK,EAAWjhJ,EAAS6gJ,SA2C5BhuH,eAA+B7yB,GAC3B,OAAO,IAAIiV,SAAQC,IACf,MAAMxK,EAAiG,IAAtFomD,OAAOvjD,iBAAiBvN,GAASkhJ,mBAAmBl8I,MAAM,KAAK,GAAGpF,QAAQ,IAAK,KAChGrH,YAAW,KACP2c,EAAQxK,EAAS,GAClBA,EAAS,GAEpB,CAjDcy2I,CAAgBnhJ,GACtBygJ,EAAczgJ,EAASuD,GACnBu9I,GACAL,EAAczgJ,EAAS6gJ,GAE3BI,EAAWjhJ,EAAS+gJ,EACxB,CAgBA,SAASE,EAAWjhJ,EAASotD,GACrBA,EAAQ1zD,OAAS,GACjBsG,EAAQ+E,UAAUlG,OAAOuuD,EAEjC,CACA,SAASqzF,EAAczgJ,EAASotD,GACxBA,EAAQ1zD,OAAS,GACjBsG,EAAQ+E,UAAUpH,UAAUyvD,EAEpC,CAvBI3M,EAAW6tF,aAAeA,EACtBA,GACMj5E,GACF5xC,EAAc1e,UAAUpH,OAAO03D,GAEnCxzB,MAGMwzB,GACF5xC,EAAc1e,UAAUlG,IAAIw2D,GAEhCvzB,KAcR5gC,OAAOiS,OAAOstC,EAAY,CAAE5e,QAAOC,QAAOs+G,oBACH,E6DjoCvCgB,CAAc9qJ,KAAM,CAClB0J,QAAS1J,KAAK+qJ,YAElB,CAEA78I,SACElO,KAAK8pJ,kBACP,CAEAt1I,KAAKhP,GAEAxF,KAAK0J,QAAQwG,SAAS1K,EAAMsG,SAC5B9L,KAAK+qJ,WAAWt8I,UAAUyB,SAAS,WAEpClQ,KAAKwrC,OAET,IDXF+c,GAAYkQ,SAAS,mBEVrB,cAA6B,GAC3B/1B,eAAiB,CAAC,kBAElBnG,eAAe/2B,GACb,MAAM09B,QAAiB19B,EAAMq3B,OAAOyI,gBAC9B,QAAEE,EAAO,cAAElF,GAAkB4C,EAAShoB,OAC5C,GAAIsqB,EAAS,OACb,MAAMssD,QAAYxxD,EAAc3E,aAChC/7B,QAAQE,IAAIgyF,GACZ,MAAM,OAAEk5D,GAAWjnJ,KAAK8B,MAAMisF,GAE9B9xF,KAAKirJ,sBAAsBh/I,SAASi/I,IAClC,MAAMC,EAAYD,EAAe5jG,QAAQ6jG,UACnCC,EAOZ,UAAsB,OAAEJ,EAAM,KAAEplJ,IAC9B,IAAKolJ,IAAWhhJ,MAAMC,QAAQ+gJ,GAAS,OAEvC,MAAMK,EAAaL,EAAOviI,MACvBjkB,GAAUA,EAAMoB,KAAKV,gBAAkBU,EAAKV,gBAE/C,OAAOmmJ,GAAYxuH,MACrB,CAduByuH,CAAa,CAAEN,SAAQplJ,KAAMulJ,IAE9CD,EAAeK,UAAYH,GAAY,EAAE,GAE7C,IFJF7iG,GAAYkQ,SAAS,yB3DdrB,cAA6B,GAC3BxvD,UACOjJ,KAAKm5B,UAGVv5B,QAAQE,IAAI,0BACZmC,YAAW,KACTjC,KAAKsE,OAAO,GACX,IACL,CAEAA,QACE1E,QAAQE,IAAI,sBAEZE,KAAK0J,QAAQ+E,UAAUpH,OACrB,YACA,WACA,eACA,gBACA,YACA,mBACA,mBACA,gBACA,oBAEFrH,KAAK0J,QAAQ+E,UAAUlG,IAAI,UAAW,gBAGtCtG,YAAW,KACTjC,KAAK0J,QAAQ+E,UAAUlG,IAAI,cAAc,GACxC,KAGHtG,YAAW,KACTjC,KAAK0J,QAAQrC,QAAQ,GACpB,IACL,CAEI8xB,gBACF,OAAOt2B,SAASkU,gBAAgB9G,aAAa,0BAC/C,I2DvBFs4C,GAAYkQ,SAAS,eGhBrB,cAA6B,GAC3B/1B,eAAiB,CAAC,UAAW,aAE7Bz5B,UACE,MAAMuiJ,EAAiB12H,SAAS90B,KAAK6D,KAAK6X,IAAI,YAEzC1b,KAAKm5B,YACRl3B,YAAW,KACTjC,KAAK0J,QAAQ+E,UAAUpH,OAAO,UAC9BrH,KAAK0J,QAAQ+E,UAAUlG,IACrB,YACA,WACA,eACA,aACA,gBACA,YACA,mBACA,oBAIFtG,YAAW,KACTjC,KAAK0J,QAAQ+E,UAAUlG,IACrB,gBACA,cACA,mBACD,GACA,KAGCvI,KAAKyrJ,qBACPzrJ,KAAK0rJ,gBAAgBhmI,MAAM40D,UACzB,iCAAmCkxE,EAAiB,IACxD,GACC,KACHxrJ,KAAK0+D,UAAYz8D,YAAW,KAC1BjC,KAAKsE,OAAO,GACM,IAAjBknJ,EAAwB,KAE/B,CAEAG,IAAInsG,GACFA,EAAEhY,iBACFxnC,KAAKsB,OACL,IAAIuM,EAAQ7N,KACZA,KAAK4rJ,cAAchpH,UACjB,iFAGF3C,MAAMjgC,KAAK6D,KAAK6X,IAAI,cAAe,CACjCwjB,OAAQl/B,KAAK6D,KAAK6X,IAAI,iBAAiBilB,cACvCkrH,SAAU,SACVjrH,YAAa,UACb7E,QAAS,CACP,eAAgB/7B,KAAK8rJ,aAEtBjtI,MAAK,SAAUkc,GAChB,IAAIiE,EAIFA,EADsB,MAApBjE,EAASU,OAET,0EAGA,yEAIJ5tB,EAAM+9I,cAAchpH,UAAY5D,EAGhC/8B,YAAW,KACT4L,EAAMvJ,OAAO,GACZ,IACL,GACF,CAEAhD,OACES,aAAa/B,KAAK0+D,WAClB1+D,KAAK0+D,UAAY,IACnB,CAEAp6D,QAEEtE,KAAK0J,QAAQ+E,UAAUpH,OACrB,YACA,WACA,eACA,gBACA,YACA,mBACA,mBACA,gBACA,oBAEFrH,KAAK0J,QAAQ+E,UAAUlG,IAAI,UAAW,gBAGtCtG,YAAW,KACTjC,KAAK0J,QAAQ+E,UAAUlG,IAAI,YAAY,GACtC,KAGHtG,YAAW,KACTjC,KAAK0J,QAAQrC,QAAQ,GACpB,IACL,CAEI8xB,gBACF,OAAOt2B,SAASkU,gBAAgB9G,aAAa,0BAC/C,CAEI67I,gBAEF,OADgBjpJ,SAAS8G,KAAKC,cAAc,2BAC7BC,aAAa,UAC9B,IHjGF0+C,GAAYkQ,SAAS,e1DlBrB,cAA6B,GAC3B/1B,eAAiB,CAAC,YAAa,OAAQ,eAAgB,iBAEvDz5B,eAC0BJ,IAApB7I,KAAK+rJ,YACP/rJ,KAAKgsJ,UAET,CAEAA,WACM1T,GAAax0F,SAAS9jD,KAAKo5I,gBAAgBryI,QAC7C/G,KAAK+rJ,WAAWt9I,UAAUpH,OAAO,UACjCrH,KAAK+rJ,WAAWt9I,UAAUlG,IAAI,aAE9BvI,KAAK+rJ,WAAWt9I,UAAUpH,OAAO,WACjCrH,KAAK+rJ,WAAWt9I,UAAUlG,IAAI,WAEhCvI,KAAKisJ,oBACLjsJ,KAAKksJ,oBACP,CAEAD,oBACqC,YAA/BjsJ,KAAKo5I,gBAAgBryI,MACvB/G,KAAKmsJ,oBAAoBlgJ,SAAQ,CAACvC,EAAS8U,KACzC9U,EAAQ+E,UAAUlG,IAAI,WACtBmB,EAAQ+E,UAAUpH,OAAO,SAAS,IAGpCrH,KAAKmsJ,oBAAoBlgJ,SAAQ,CAACvC,EAAS8U,KACzC9U,EAAQ+E,UAAUpH,OAAO,WACzBqC,EAAQ+E,UAAUlG,IAAI,SAAS,GAGrC,CAEA2jJ,qBACqC,aAA/BlsJ,KAAKo5I,gBAAgBryI,MACvB/G,KAAKosJ,qBAAqBngJ,SAAQ,CAACvC,EAAS8U,KAC1C9U,EAAQ+E,UAAUlG,IAAI,WACtBmB,EAAQ+E,UAAUpH,OAAO,SAAS,IAGpCrH,KAAKosJ,qBAAqBngJ,SAAQ,CAACvC,EAAS8U,KAC1C9U,EAAQ+E,UAAUpH,OAAO,WACzBqC,EAAQ+E,UAAUlG,IAAI,SAAS,GAGrC,I0D1BFggD,GAAYkQ,SAAS,UAAW,IAGhClQ,GAAYkQ,SAAS,aAAc,IAGnClQ,GAAYkQ,SAAS,YI5BrB,cAA6B,GAC3B/1B,eAAiB,CACf,cACA,qBACA,aACA,cAGF2pH,uBACE,MAAMC,EAAa,IAAI9yH,IAAIx5B,KAAK6D,KAAK6X,IAAI,kBACzC4wI,EAAW7sH,aAAa3Q,OAAO,KAAM9uB,KAAKusJ,YAE1CtsH,MAAMqsH,GACHztI,MAAMkc,GAAaA,EAASyxH,SAC5B3tI,MAAMhb,IACDA,EAAK4oJ,QACPzsJ,KAAK0sJ,kBAAkB3lJ,MAAQlD,EAAK4oJ,MACtC,IAEDE,OAAM,QACX,CAEAC,qBAEI5sJ,KAAK6sJ,YAAYvN,qBAAqB,IACtCt/I,KAAK8sJ,mBAAmBxN,qBAAqB,GAE7Ct/I,KAAK+sJ,iBAAiBhmJ,MAAQ/G,KAAK6sJ,YAChC3O,MAAMl+I,KAAK8sJ,oBACXtJ,KAAK,GACL34I,WAEH7K,KAAK+sJ,iBAAiBhmJ,MAAQ,IAAI,GAAQ,GAAGy8I,KAAK,GAAG34I,SAAS,EAElE,CAII0hJ,iBACF,IAAI/sG,EAAIx/C,KAAKgtJ,iBACb,OAAOxtG,EAAEhyC,QAAQgyC,EAAEytG,eAAelmJ,KACpC,CAEI8lJ,kBACF,OAAIryF,OAAOwI,MAAMluC,SAAS90B,KAAK0sJ,kBAAkB3lJ,QACxC,IAAI,GAAQ,KAEd,IAAI,GAAQ/G,KAAK0sJ,kBAAkB3lJ,MAC5C,CACI+lJ,yBACF,OAAItyF,OAAOwI,MAAMluC,SAAS90B,KAAKktJ,yBAAyBnmJ,QAC/C,IAAI,GAAQ,KAEd,IAAI,GAAQ/G,KAAKktJ,yBAAyBnmJ,MACnD,CACIomJ,eAAWpmJ,GACb/G,KAAK+sJ,iBAAiBhmJ,MAAQA,EAAMy8I,KAAK,EAC3C,IC5DF,MAAM4J,GAAO,MAET,MAAMC,EAAc,IAAIvsC,gBAAephF,GAAWA,EAAQzzB,SAAQuzC,GAAKA,EAAE1zC,OAAOmD,iBAAiB,aAAahD,SAAQkD,GAAMA,EAAGm+I,mBAEzHC,EAAU,CAACp+I,GAAKq+I,EAAMC,EAASC,EAAcC,MAC/C,MAAMtrG,EAAYlzC,EAAG8nB,eAAiB9nB,EAChCsjG,EAAS7nG,OAAOU,KAAKmiJ,GAASzlJ,KAAIwjE,GAAK12C,SAAS02C,KAAIrwD,MAAK,CAAChS,EAAGqe,IAAMA,EAAIre,IAC7E,IAAIykJ,GAAa,EACjB,MAAMC,EAAS,CAAC7jH,EAAM8jH,EAAMzzD,IAAUrwD,EAAK1gC,QAAQ,iBAAkBwkJ,GAAMxkJ,QAAQ,kBAAmB+wF,IACrGlrF,EAAGm+I,WAAa,WACb,MAAMt3I,EAAQy8F,EAAOhqF,MAAK+iD,GAAKA,EAAInpB,EAAUrgC,eAAgB,EAC7D,GAAIhM,IAAU43I,EACV,OAEJ,IAAI7rI,EAAOyrI,EAAK5tG,OAChB,MAAMmuG,EAASN,EAAQz3I,EAAMnL,YACvBouF,EAASy0D,IAAe13I,EAAMnL,aAAekjJ,EAAO/lJ,KAAIkiE,GAAKA,EAAEr/D,aACrE,IAAK,MAAMK,KAAK6iJ,EAAQ,CACpB,MAAMjgJ,EAAOigJ,EAAO7iJ,GACdmvF,EAAQpB,EAAO/tF,GAEjB6W,GADqB,iBAAd4rI,GAAmC,IAAT7/I,EACzB2wC,EAAKovG,EAAOL,EAAKxjH,KAAMl8B,EAAKjD,WAAYwvF,GAAQszD,GAEnC,iBAAT7/I,EACJ+/I,EAAOL,EAAKxjH,KAAMl8B,EAAKjD,WAAYwvF,GAE7B,QAATvsF,EACG0/I,EAAKQ,IAGLH,EAAOL,EAAKz/I,OAAQD,EAAMusF,EAE1C,CACAt4E,GAAQyrI,EAAKluG,MACbnwC,EAAGyzB,UAAY,GACfzzB,EAAG8+I,mBAAmB,aAAclsI,GACpC6rI,EAAY53I,CAChB,KACI7G,EAAGV,UAAUyB,SAAS,aACtBm9I,EAAYrrH,QAAQqgB,EACxB,EAGE6rG,EAAY,CAAC/+I,GAAK66B,EAAM2jH,KAAeQ,EAAUh/I,GAAIi/I,GAAc,CAACA,EAAYpkH,EAAK1gC,QAAQ,gBAAiB8kJ,KAAcT,GAE5HU,EAAe,CAACl/I,GAAK5E,EAAMy/B,EAAM2jH,MACnCQ,EAAUh/I,GAAIi/I,IACV,MAAMN,EAAOzrJ,KAAKiT,IAAIjT,KAAKqnG,KAAKn/F,EAAOuqB,SAASs5H,IAAc,GAAGvjJ,WAEjE,MAAO,CAACijJ,EADK9jH,EAAK1gC,QAAQ,gBAAiBwkJ,GAAMxkJ,QAAQ,iBAAkB8kJ,GACxD,GACpBT,EAAU,EAGXQ,EAAY,CAACh/I,EAAIm/I,EAASX,KAC5B,MAAM32E,EAAQ7nE,EAAGvF,cAAc,SACzB0wC,EAAU08B,EAAMjwE,MAChBG,EAAS,WACX,GAAI8vE,EAAMjwE,QAAUuzC,EAChB,OAEJ,MAAO/3C,EAAK82E,EAAK/jE,GAAO,CAAC0hE,EAAMz0E,IAAKy0E,EAAMjwE,MAAOiwE,EAAM1hE,KAAKtN,KAAI2C,GAAKmqB,SAASnqB,IAAM,IACpF,GAAI0uE,EAAM92E,GAAO82E,EAAM/jE,EAGnB,OAFA0hE,EAAMjwE,MAAQuzC,OACd08B,EAAMla,SAGV,IAAKgxF,EAAM/rI,GAAQusI,EAAQt3E,EAAMjwE,OACR,iBAAd4mJ,GAAmC,MAATG,IACjC/rI,EAAO08B,EAAK18B,EAAM4rI,IAEtBx+I,EAAG8+I,mBAAmB,aAAclsI,GACpC5S,EAAGvF,cAAc,KAAK4sB,OAC1B,EACA,CAAC,SAAU,SAASvqB,SAAQuzC,GAAKw3B,EAAM51E,iBAAiBo+C,EAAGw3B,EAAMla,UACjEka,EAAM51E,iBAAiB,WAAY8F,GACnC8vE,EAAM51E,iBAAiB,YAAYo+C,IAAqB,UAAVA,EAAE14C,KAC5CI,GACJ,GAAI,EAGFu3C,EAAO,CAACzU,EAAMukH,IAAUvkH,EAAK1gC,QAAQ,IAAIs7C,OAAO,cAAc2pG,sBAA0BA,YAAiB,IAE/G,MAAO,CACH5/B,QAAS,QAET1hB,KAAK6L,GACD,MACM/7F,GADS+7F,aAAe9jG,QAAU8jG,EAAMj2G,UACtBoM,iBAAiB,eACzC,IAAK,MAAME,KAAM4N,EACb,IACI,MAAMyxI,EAAaC,WAAWlkJ,KAAKmkJ,KAAKv/I,EAAGtF,aAAa,eAAe0kB,GAAKA,EAAE6lH,WAAW,MAClFua,KAAY/lJ,GAAQ7E,KAAK8B,OAAM,IAAK+oJ,aAAeC,OAAOL,IACjD,QAAZG,EACApB,EAAQp+I,EAAIvG,GAEK,UAAZ+lJ,EACLT,EAAU/+I,EAAIvG,GAEG,aAAZ+lJ,EACLN,EAAal/I,EAAIvG,GAGjBhJ,QAAQqjD,KAAK,oDAAqD9zC,EAAIw/I,EAK9E,CAFA,MAAOG,GACHlvJ,QAAQqjD,KAAK,kCAAmC9zC,EAAI2/I,EACxD,CAER,EAEP,EA/GY,GAgHb,aCzGAr/I,OAAOrO,iBAAiB,aAAc","sources":["webpack://app/../../shared/node_modules/@rails/actioncable/src/adapters.js","webpack://app/../../shared/node_modules/@rails/actioncable/src/logger.js","webpack://app/../../shared/node_modules/@rails/actioncable/src/connection_monitor.js","webpack://app/../../shared/node_modules/@rails/actioncable/src/internal.js","webpack://app/../../shared/node_modules/@rails/actioncable/src/connection.js","webpack://app/../../shared/node_modules/@rails/actioncable/src/subscription.js","webpack://app/../../shared/node_modules/@rails/actioncable/src/subscription_guarantor.js","webpack://app/../../shared/node_modules/@rails/actioncable/src/subscriptions.js","webpack://app/../../shared/node_modules/@rails/actioncable/src/consumer.js","webpack://app/../../shared/node_modules/@rails/actioncable/src/index.js","webpack://app/../../shared/node_modules/flowbite/dist/flowbite.js","webpack://app/webpack/bootstrap","webpack://app/webpack/runtime/define property getters","webpack://app/webpack/runtime/hasOwnProperty shorthand","webpack://app/webpack/runtime/make namespace object","webpack://app/../../shared/node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js","webpack://app/../../shared/node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable.js","webpack://app/../../shared/node_modules/@hotwired/turbo-rails/app/javascript/turbo/snakeize.js","webpack://app/../../shared/node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable_stream_source_element.js","webpack://app/../../shared/node_modules/@hotwired/turbo-rails/app/javascript/turbo/index.js","webpack://app/../../shared/node_modules/@hotwired/turbo-rails/app/javascript/turbo/fetch_requests.js","webpack://app/../../shared/node_modules/@hotwired/stimulus/dist/stimulus.js","webpack://app/../../shared/node_modules/stimulus-autocomplete/src/autocomplete.js","webpack://app/../../shared/node_modules/stimulus-reveal-controller/dist/stimulus-reveal-controller.es.js","webpack://app/./app/javascript/controllers/application.js","webpack://app/../../shared/node_modules/chart.js/dist/chunks/helpers.segment.mjs","webpack://app/../../shared/node_modules/chart.js/dist/chart.mjs","webpack://app/../../shared/node_modules/chart.js/auto/auto.mjs","webpack://app/../../shared/node_modules/chartjs-chart-matrix/dist/chartjs-chart-matrix.esm.js","webpack://app/./app/javascript/controllers/chart_controller.js","webpack://app/../../shared/node_modules/hotkeys-js/dist/hotkeys.esm.js","webpack://app/../../shared/node_modules/stimulus-use/dist/index.js","webpack://app/./app/javascript/controllers/notification_component_controller.js","webpack://app/./app/javascript/controllers/persona_form_controller.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/dom-utils/getWindow.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/utils/math.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/utils/userAgent.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/enums.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/utils/orderModifiers.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/createPopper.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/utils/debounce.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/utils/mergeByName.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/modifiers/eventListeners.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/utils/getBasePlacement.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/utils/getVariation.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/utils/computeOffsets.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/modifiers/computeStyles.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/dom-utils/contains.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/utils/rectToClientRect.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/utils/expandToHashMap.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/utils/detectOverflow.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/modifiers/flip.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/utils/within.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/utils/getAltAxis.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/modifiers/arrow.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/modifiers/hide.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/popper.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/modifiers/applyStyles.js","webpack://app/../../shared/node_modules/@popperjs/core/lib/modifiers/offset.js","webpack://app/./app/javascript/controllers/popover_controller.js","webpack://app/./app/javascript/controllers/scrollable_controller.js","webpack://app/../../shared/node_modules/decimal.js/decimal.mjs","webpack://app/./app/javascript/controllers/index.js","webpack://app/./app/javascript/controllers/dropdown_controller.js","webpack://app/./app/javascript/controllers/input_validation_controller.js","webpack://app/./app/javascript/controllers/notification_controller.js","webpack://app/./app/javascript/controllers/solicitud_controller.js","webpack://app/../../shared/bundle/ruby/3.1.0/gems/pagy-6.0.2/lib/javascripts/pagy-module.js","webpack://app/./app/javascript/application.js"],"sourcesContent":["export default {\n  logger: self.console,\n  WebSocket: self.WebSocket\n}\n","import adapters from \"./adapters\"\n\n// The logger is disabled by default. You can enable it with:\n//\n//   ActionCable.logger.enabled = true\n//\n//   Example:\n//\n//   import * as ActionCable from '@rails/actioncable'\n//\n//   ActionCable.logger.enabled = true\n//   ActionCable.logger.log('Connection Established.')\n//\n\nexport default {\n  log(...messages) {\n    if (this.enabled) {\n      messages.push(Date.now())\n      adapters.logger.log(\"[ActionCable]\", ...messages)\n    }\n  },\n}\n","import logger from \"./logger\"\n\n// Responsible for ensuring the cable connection is in good health by validating the heartbeat pings sent from the server, and attempting\n// revival reconnections if things go astray. Internal class, not intended for direct user manipulation.\n\nconst now = () => new Date().getTime()\n\nconst secondsSince = time => (now() - time) / 1000\n\nclass ConnectionMonitor {\n  constructor(connection) {\n    this.visibilityDidChange = this.visibilityDidChange.bind(this)\n    this.connection = connection\n    this.reconnectAttempts = 0\n  }\n\n  start() {\n    if (!this.isRunning()) {\n      this.startedAt = now()\n      delete this.stoppedAt\n      this.startPolling()\n      addEventListener(\"visibilitychange\", this.visibilityDidChange)\n      logger.log(`ConnectionMonitor started. stale threshold = ${this.constructor.staleThreshold} s`)\n    }\n  }\n\n  stop() {\n    if (this.isRunning()) {\n      this.stoppedAt = now()\n      this.stopPolling()\n      removeEventListener(\"visibilitychange\", this.visibilityDidChange)\n      logger.log(\"ConnectionMonitor stopped\")\n    }\n  }\n\n  isRunning() {\n    return this.startedAt && !this.stoppedAt\n  }\n\n  recordPing() {\n    this.pingedAt = now()\n  }\n\n  recordConnect() {\n    this.reconnectAttempts = 0\n    this.recordPing()\n    delete this.disconnectedAt\n    logger.log(\"ConnectionMonitor recorded connect\")\n  }\n\n  recordDisconnect() {\n    this.disconnectedAt = now()\n    logger.log(\"ConnectionMonitor recorded disconnect\")\n  }\n\n  // Private\n\n  startPolling() {\n    this.stopPolling()\n    this.poll()\n  }\n\n  stopPolling() {\n    clearTimeout(this.pollTimeout)\n  }\n\n  poll() {\n    this.pollTimeout = setTimeout(() => {\n      this.reconnectIfStale()\n      this.poll()\n    }\n    , this.getPollInterval())\n  }\n\n  getPollInterval() {\n    const { staleThreshold, reconnectionBackoffRate } = this.constructor\n    const backoff = Math.pow(1 + reconnectionBackoffRate, Math.min(this.reconnectAttempts, 10))\n    const jitterMax = this.reconnectAttempts === 0 ? 1.0 : reconnectionBackoffRate\n    const jitter = jitterMax * Math.random()\n    return staleThreshold * 1000 * backoff * (1 + jitter)\n  }\n\n  reconnectIfStale() {\n    if (this.connectionIsStale()) {\n      logger.log(`ConnectionMonitor detected stale connection. reconnectAttempts = ${this.reconnectAttempts}, time stale = ${secondsSince(this.refreshedAt)} s, stale threshold = ${this.constructor.staleThreshold} s`)\n      this.reconnectAttempts++\n      if (this.disconnectedRecently()) {\n        logger.log(`ConnectionMonitor skipping reopening recent disconnect. time disconnected = ${secondsSince(this.disconnectedAt)} s`)\n      } else {\n        logger.log(\"ConnectionMonitor reopening\")\n        this.connection.reopen()\n      }\n    }\n  }\n\n  get refreshedAt() {\n    return this.pingedAt ? this.pingedAt : this.startedAt\n  }\n\n  connectionIsStale() {\n    return secondsSince(this.refreshedAt) > this.constructor.staleThreshold\n  }\n\n  disconnectedRecently() {\n    return this.disconnectedAt && (secondsSince(this.disconnectedAt) < this.constructor.staleThreshold)\n  }\n\n  visibilityDidChange() {\n    if (document.visibilityState === \"visible\") {\n      setTimeout(() => {\n        if (this.connectionIsStale() || !this.connection.isOpen()) {\n          logger.log(`ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = ${document.visibilityState}`)\n          this.connection.reopen()\n        }\n      }\n      , 200)\n    }\n  }\n\n}\n\nConnectionMonitor.staleThreshold = 6 // Server::Connections::BEAT_INTERVAL * 2 (missed two pings)\nConnectionMonitor.reconnectionBackoffRate = 0.15\n\nexport default ConnectionMonitor\n","export default {\n  \"message_types\": {\n    \"welcome\": \"welcome\",\n    \"disconnect\": \"disconnect\",\n    \"ping\": \"ping\",\n    \"confirmation\": \"confirm_subscription\",\n    \"rejection\": \"reject_subscription\"\n  },\n  \"disconnect_reasons\": {\n    \"unauthorized\": \"unauthorized\",\n    \"invalid_request\": \"invalid_request\",\n    \"server_restart\": \"server_restart\"\n  },\n  \"default_mount_path\": \"/cable\",\n  \"protocols\": [\n    \"actioncable-v1-json\",\n    \"actioncable-unsupported\"\n  ]\n}\n","import adapters from \"./adapters\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport INTERNAL from \"./internal\"\nimport logger from \"./logger\"\n\n// Encapsulate the cable connection held by the consumer. This is an internal class not intended for direct user manipulation.\n\nconst {message_types, protocols} = INTERNAL\nconst supportedProtocols = protocols.slice(0, protocols.length - 1)\n\nconst indexOf = [].indexOf\n\nclass Connection {\n  constructor(consumer) {\n    this.open = this.open.bind(this)\n    this.consumer = consumer\n    this.subscriptions = this.consumer.subscriptions\n    this.monitor = new ConnectionMonitor(this)\n    this.disconnected = true\n  }\n\n  send(data) {\n    if (this.isOpen()) {\n      this.webSocket.send(JSON.stringify(data))\n      return true\n    } else {\n      return false\n    }\n  }\n\n  open() {\n    if (this.isActive()) {\n      logger.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`)\n      return false\n    } else {\n      logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${protocols}`)\n      if (this.webSocket) { this.uninstallEventHandlers() }\n      this.webSocket = new adapters.WebSocket(this.consumer.url, protocols)\n      this.installEventHandlers()\n      this.monitor.start()\n      return true\n    }\n  }\n\n  close({allowReconnect} = {allowReconnect: true}) {\n    if (!allowReconnect) { this.monitor.stop() }\n    // Avoid closing websockets in a \"connecting\" state due to Safari 15.1+ bug. See: https://github.com/rails/rails/issues/43835#issuecomment-1002288478\n    if (this.isOpen()) {\n      return this.webSocket.close()\n    }\n  }\n\n  reopen() {\n    logger.log(`Reopening WebSocket, current state is ${this.getState()}`)\n    if (this.isActive()) {\n      try {\n        return this.close()\n      } catch (error) {\n        logger.log(\"Failed to reopen WebSocket\", error)\n      }\n      finally {\n        logger.log(`Reopening WebSocket in ${this.constructor.reopenDelay}ms`)\n        setTimeout(this.open, this.constructor.reopenDelay)\n      }\n    } else {\n      return this.open()\n    }\n  }\n\n  getProtocol() {\n    if (this.webSocket) {\n      return this.webSocket.protocol\n    }\n  }\n\n  isOpen() {\n    return this.isState(\"open\")\n  }\n\n  isActive() {\n    return this.isState(\"open\", \"connecting\")\n  }\n\n  // Private\n\n  isProtocolSupported() {\n    return indexOf.call(supportedProtocols, this.getProtocol()) >= 0\n  }\n\n  isState(...states) {\n    return indexOf.call(states, this.getState()) >= 0\n  }\n\n  getState() {\n    if (this.webSocket) {\n      for (let state in adapters.WebSocket) {\n        if (adapters.WebSocket[state] === this.webSocket.readyState) {\n          return state.toLowerCase()\n        }\n      }\n    }\n    return null\n  }\n\n  installEventHandlers() {\n    for (let eventName in this.events) {\n      const handler = this.events[eventName].bind(this)\n      this.webSocket[`on${eventName}`] = handler\n    }\n  }\n\n  uninstallEventHandlers() {\n    for (let eventName in this.events) {\n      this.webSocket[`on${eventName}`] = function() {}\n    }\n  }\n\n}\n\nConnection.reopenDelay = 500\n\nConnection.prototype.events = {\n  message(event) {\n    if (!this.isProtocolSupported()) { return }\n    const {identifier, message, reason, reconnect, type} = JSON.parse(event.data)\n    switch (type) {\n      case message_types.welcome:\n        this.monitor.recordConnect()\n        return this.subscriptions.reload()\n      case message_types.disconnect:\n        logger.log(`Disconnecting. Reason: ${reason}`)\n        return this.close({allowReconnect: reconnect})\n      case message_types.ping:\n        return this.monitor.recordPing()\n      case message_types.confirmation:\n        this.subscriptions.confirmSubscription(identifier)\n        return this.subscriptions.notify(identifier, \"connected\")\n      case message_types.rejection:\n        return this.subscriptions.reject(identifier)\n      default:\n        return this.subscriptions.notify(identifier, \"received\", message)\n    }\n  },\n\n  open() {\n    logger.log(`WebSocket onopen event, using '${this.getProtocol()}' subprotocol`)\n    this.disconnected = false\n    if (!this.isProtocolSupported()) {\n      logger.log(\"Protocol is unsupported. Stopping monitor and disconnecting.\")\n      return this.close({allowReconnect: false})\n    }\n  },\n\n  close(event) {\n    logger.log(\"WebSocket onclose event\")\n    if (this.disconnected) { return }\n    this.disconnected = true\n    this.monitor.recordDisconnect()\n    return this.subscriptions.notifyAll(\"disconnected\", {willAttemptReconnect: this.monitor.isRunning()})\n  },\n\n  error() {\n    logger.log(\"WebSocket onerror event\")\n  }\n}\n\nexport default Connection\n","// A new subscription is created through the ActionCable.Subscriptions instance available on the consumer.\n// It provides a number of callbacks and a method for calling remote procedure calls on the corresponding\n// Channel instance on the server side.\n//\n// An example demonstrates the basic functionality:\n//\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\", {\n//     connected() {\n//       // Called once the subscription has been successfully completed\n//     },\n//\n//     disconnected({ willAttemptReconnect: boolean }) {\n//       // Called when the client has disconnected with the server.\n//       // The object will have an `willAttemptReconnect` property which\n//       // says whether the client has the intention of attempting\n//       // to reconnect.\n//     },\n//\n//     appear() {\n//       this.perform('appear', {appearing_on: this.appearingOn()})\n//     },\n//\n//     away() {\n//       this.perform('away')\n//     },\n//\n//     appearingOn() {\n//       $('main').data('appearing-on')\n//     }\n//   })\n//\n// The methods #appear and #away forward their intent to the remote AppearanceChannel instance on the server\n// by calling the `perform` method with the first parameter being the action (which maps to AppearanceChannel#appear/away).\n// The second parameter is a hash that'll get JSON encoded and made available on the server in the data parameter.\n//\n// This is how the server component would look:\n//\n//   class AppearanceChannel < ApplicationActionCable::Channel\n//     def subscribed\n//       current_user.appear\n//     end\n//\n//     def unsubscribed\n//       current_user.disappear\n//     end\n//\n//     def appear(data)\n//       current_user.appear on: data['appearing_on']\n//     end\n//\n//     def away\n//       current_user.away\n//     end\n//   end\n//\n// The \"AppearanceChannel\" name is automatically mapped between the client-side subscription creation and the server-side Ruby class name.\n// The AppearanceChannel#appear/away public methods are exposed automatically to client-side invocation through the perform method.\n\nconst extend = function(object, properties) {\n  if (properties != null) {\n    for (let key in properties) {\n      const value = properties[key]\n      object[key] = value\n    }\n  }\n  return object\n}\n\nexport default class Subscription {\n  constructor(consumer, params = {}, mixin) {\n    this.consumer = consumer\n    this.identifier = JSON.stringify(params)\n    extend(this, mixin)\n  }\n\n  // Perform a channel action with the optional data passed as an attribute\n  perform(action, data = {}) {\n    data.action = action\n    return this.send(data)\n  }\n\n  send(data) {\n    return this.consumer.send({command: \"message\", identifier: this.identifier, data: JSON.stringify(data)})\n  }\n\n  unsubscribe() {\n    return this.consumer.subscriptions.remove(this)\n  }\n}\n","import logger from \"./logger\"\n\n// Responsible for ensuring channel subscribe command is confirmed, retrying until confirmation is received.\n// Internal class, not intended for direct user manipulation.\n\nclass SubscriptionGuarantor {\n  constructor(subscriptions) {\n    this.subscriptions = subscriptions\n    this.pendingSubscriptions = []\n  }\n\n  guarantee(subscription) {\n    if(this.pendingSubscriptions.indexOf(subscription) == -1){ \n      logger.log(`SubscriptionGuarantor guaranteeing ${subscription.identifier}`)\n      this.pendingSubscriptions.push(subscription) \n    }\n    else {\n      logger.log(`SubscriptionGuarantor already guaranteeing ${subscription.identifier}`)\n    }\n    this.startGuaranteeing()\n  }\n\n  forget(subscription) {\n    logger.log(`SubscriptionGuarantor forgetting ${subscription.identifier}`)\n    this.pendingSubscriptions = (this.pendingSubscriptions.filter((s) => s !== subscription))\n  }\n\n  startGuaranteeing() {\n    this.stopGuaranteeing()\n    this.retrySubscribing()\n  }\n  \n  stopGuaranteeing() {\n    clearTimeout(this.retryTimeout)\n  }\n\n  retrySubscribing() {\n    this.retryTimeout = setTimeout(() => {\n      if (this.subscriptions && typeof(this.subscriptions.subscribe) === \"function\") {\n        this.pendingSubscriptions.map((subscription) => {\n          logger.log(`SubscriptionGuarantor resubscribing ${subscription.identifier}`)\n          this.subscriptions.subscribe(subscription)\n        })\n      }\n    }\n    , 500)\n  }\n}\n\nexport default SubscriptionGuarantor","import Subscription from \"./subscription\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport logger from \"./logger\"\n\n// Collection class for creating (and internally managing) channel subscriptions.\n// The only method intended to be triggered by the user is ActionCable.Subscriptions#create,\n// and it should be called through the consumer like so:\n//\n//   App = {}\n//   App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n\nexport default class Subscriptions {\n  constructor(consumer) {\n    this.consumer = consumer\n    this.guarantor = new SubscriptionGuarantor(this)\n    this.subscriptions = []\n  }\n\n  create(channelName, mixin) {\n    const channel = channelName\n    const params = typeof channel === \"object\" ? channel : {channel}\n    const subscription = new Subscription(this.consumer, params, mixin)\n    return this.add(subscription)\n  }\n\n  // Private\n\n  add(subscription) {\n    this.subscriptions.push(subscription)\n    this.consumer.ensureActiveConnection()\n    this.notify(subscription, \"initialized\")\n    this.subscribe(subscription)\n    return subscription\n  }\n\n  remove(subscription) {\n    this.forget(subscription)\n    if (!this.findAll(subscription.identifier).length) {\n      this.sendCommand(subscription, \"unsubscribe\")\n    }\n    return subscription\n  }\n\n  reject(identifier) {\n    return this.findAll(identifier).map((subscription) => {\n      this.forget(subscription)\n      this.notify(subscription, \"rejected\")\n      return subscription\n    })\n  }\n\n  forget(subscription) {\n    this.guarantor.forget(subscription)\n    this.subscriptions = (this.subscriptions.filter((s) => s !== subscription))\n    return subscription\n  }\n\n  findAll(identifier) {\n    return this.subscriptions.filter((s) => s.identifier === identifier)\n  }\n\n  reload() {\n    return this.subscriptions.map((subscription) =>\n      this.subscribe(subscription))\n  }\n\n  notifyAll(callbackName, ...args) {\n    return this.subscriptions.map((subscription) =>\n      this.notify(subscription, callbackName, ...args))\n  }\n\n  notify(subscription, callbackName, ...args) {\n    let subscriptions\n    if (typeof subscription === \"string\") {\n      subscriptions = this.findAll(subscription)\n    } else {\n      subscriptions = [subscription]\n    }\n\n    return subscriptions.map((subscription) =>\n      (typeof subscription[callbackName] === \"function\" ? subscription[callbackName](...args) : undefined))\n  }\n\n  subscribe(subscription) {\n    if (this.sendCommand(subscription, \"subscribe\")) {\n      this.guarantor.guarantee(subscription)\n    }\n  }\n\n  confirmSubscription(identifier) {\n    logger.log(`Subscription confirmed ${identifier}`)\n    this.findAll(identifier).map((subscription) =>\n      this.guarantor.forget(subscription))\n  }\n\n  sendCommand(subscription, command) {\n    const {identifier} = subscription\n    return this.consumer.send({command, identifier})\n  }\n}\n","import Connection from \"./connection\"\nimport Subscriptions from \"./subscriptions\"\n\n// The ActionCable.Consumer establishes the connection to a server-side Ruby Connection object. Once established,\n// the ActionCable.ConnectionMonitor will ensure that its properly maintained through heartbeats and checking for stale updates.\n// The Consumer instance is also the gateway to establishing subscriptions to desired channels through the #createSubscription\n// method.\n//\n// The following example shows how this can be set up:\n//\n//   App = {}\n//   App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n//\n// When a consumer is created, it automatically connects with the server.\n//\n// To disconnect from the server, call\n//\n//   App.cable.disconnect()\n//\n// and to restart the connection:\n//\n//   App.cable.connect()\n//\n// Any channel subscriptions which existed prior to disconnecting will\n// automatically resubscribe.\n\nexport default class Consumer {\n  constructor(url) {\n    this._url = url\n    this.subscriptions = new Subscriptions(this)\n    this.connection = new Connection(this)\n  }\n\n  get url() {\n    return createWebSocketURL(this._url)\n  }\n\n  send(data) {\n    return this.connection.send(data)\n  }\n\n  connect() {\n    return this.connection.open()\n  }\n\n  disconnect() {\n    return this.connection.close({allowReconnect: false})\n  }\n\n  ensureActiveConnection() {\n    if (!this.connection.isActive()) {\n      return this.connection.open()\n    }\n  }\n}\n\nexport function createWebSocketURL(url) {\n  if (typeof url === \"function\") {\n    url = url()\n  }\n\n  if (url && !/^wss?:/i.test(url)) {\n    const a = document.createElement(\"a\")\n    a.href = url\n    // Fix populating Location properties in IE. Otherwise, protocol will be blank.\n    a.href = a.href\n    a.protocol = a.protocol.replace(\"http\", \"ws\")\n    return a.href\n  } else {\n    return url\n  }\n}\n","import Connection from \"./connection\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport Consumer, { createWebSocketURL } from \"./consumer\"\nimport INTERNAL from \"./internal\"\nimport Subscription from \"./subscription\"\nimport Subscriptions from \"./subscriptions\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport adapters from \"./adapters\"\nimport logger from \"./logger\"\n\nexport {\n  Connection,\n  ConnectionMonitor,\n  Consumer,\n  INTERNAL,\n  Subscription,\n  Subscriptions,\n  SubscriptionGuarantor,\n  adapters,\n  createWebSocketURL,\n  logger,\n}\n\nexport function createConsumer(url = getConfig(\"url\") || INTERNAL.default_mount_path) {\n  return new Consumer(url)\n}\n\nexport function getConfig(name) {\n  const element = document.head.querySelector(`meta[name='action-cable-${name}']`)\n  if (element) {\n    return element.getAttribute(\"content\")\n  }\n}\n","/******/ (() => { // webpackBootstrap\n/******/ \t\"use strict\";\nvar __webpack_exports__ = {};\n\n// UNUSED EXPORTS: default\n\n;// CONCATENATED MODULE: ./src/components/accordion.js\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nvar Default = {\n  alwaysOpen: false,\n  activeClasses: 'bg-gray-100 dark:bg-gray-800 text-gray-900 dark:text-white',\n  inactiveClasses: 'text-gray-500 dark:text-gray-400',\n  onOpen: function onOpen() {},\n  onClose: function onClose() {},\n  onToggle: function onToggle() {}\n};\n\nvar Accordion = /*#__PURE__*/function () {\n  function Accordion() {\n    var items = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    _classCallCheck(this, Accordion);\n\n    this._items = items;\n    this._options = _objectSpread(_objectSpread({}, Default), options);\n\n    this._init();\n  }\n\n  _createClass(Accordion, [{\n    key: \"_init\",\n    value: function _init() {\n      var _this = this;\n\n      if (this._items.length) {\n        // show accordion item based on click\n        this._items.map(function (item) {\n          if (item.active) {\n            _this.open(item.id);\n          }\n\n          item.triggerEl.addEventListener('click', function () {\n            _this.toggle(item.id);\n          });\n        });\n      }\n    }\n  }, {\n    key: \"getItem\",\n    value: function getItem(id) {\n      return this._items.filter(function (item) {\n        return item.id === id;\n      })[0];\n    }\n  }, {\n    key: \"open\",\n    value: function open(id) {\n      var _this2 = this,\n          _item$triggerEl$class,\n          _item$triggerEl$class2;\n\n      var item = this.getItem(id); // don't hide other accordions if always open\n\n      if (!this._options.alwaysOpen) {\n        this._items.map(function (i) {\n          if (i !== item) {\n            var _i$triggerEl$classLis, _i$triggerEl$classLis2;\n\n            (_i$triggerEl$classLis = i.triggerEl.classList).remove.apply(_i$triggerEl$classLis, _toConsumableArray(_this2._options.activeClasses.split(\" \")));\n\n            (_i$triggerEl$classLis2 = i.triggerEl.classList).add.apply(_i$triggerEl$classLis2, _toConsumableArray(_this2._options.inactiveClasses.split(\" \")));\n\n            i.targetEl.classList.add('hidden');\n            i.triggerEl.setAttribute('aria-expanded', false);\n            i.active = false; // rotate icon if set\n\n            if (i.iconEl) {\n              i.iconEl.classList.remove('rotate-180');\n            }\n          }\n        });\n      } // show active item\n\n\n      (_item$triggerEl$class = item.triggerEl.classList).add.apply(_item$triggerEl$class, _toConsumableArray(this._options.activeClasses.split(\" \")));\n\n      (_item$triggerEl$class2 = item.triggerEl.classList).remove.apply(_item$triggerEl$class2, _toConsumableArray(this._options.inactiveClasses.split(\" \")));\n\n      item.triggerEl.setAttribute('aria-expanded', true);\n      item.targetEl.classList.remove('hidden');\n      item.active = true; // rotate icon if set\n\n      if (item.iconEl) {\n        item.iconEl.classList.add('rotate-180');\n      } // callback function\n\n\n      this._options.onOpen(this, item);\n    }\n  }, {\n    key: \"toggle\",\n    value: function toggle(id) {\n      var item = this.getItem(id);\n\n      if (item.active) {\n        this.close(id);\n      } else {\n        this.open(id);\n      } // callback function\n\n\n      this._options.onToggle(this, item);\n    }\n  }, {\n    key: \"close\",\n    value: function close(id) {\n      var _item$triggerEl$class3, _item$triggerEl$class4;\n\n      var item = this.getItem(id);\n\n      (_item$triggerEl$class3 = item.triggerEl.classList).remove.apply(_item$triggerEl$class3, _toConsumableArray(this._options.activeClasses.split(\" \")));\n\n      (_item$triggerEl$class4 = item.triggerEl.classList).add.apply(_item$triggerEl$class4, _toConsumableArray(this._options.inactiveClasses.split(\" \")));\n\n      item.targetEl.classList.add('hidden');\n      item.triggerEl.setAttribute('aria-expanded', false);\n      item.active = false; // rotate icon if set\n\n      if (item.iconEl) {\n        item.iconEl.classList.remove('rotate-180');\n      } // callback function\n\n\n      this._options.onClose(this, item);\n    }\n  }]);\n\n  return Accordion;\n}();\n\nwindow.Accordion = Accordion;\n\nfunction initAccordion() {\n  document.querySelectorAll('[data-accordion]').forEach(function (accordionEl) {\n    var alwaysOpen = accordionEl.getAttribute('data-accordion');\n    var activeClasses = accordionEl.getAttribute('data-active-classes');\n    var inactiveClasses = accordionEl.getAttribute('data-inactive-classes');\n    var items = [];\n    accordionEl.querySelectorAll('[data-accordion-target]').forEach(function (el) {\n      var item = {\n        id: el.getAttribute('data-accordion-target'),\n        triggerEl: el,\n        targetEl: document.querySelector(el.getAttribute('data-accordion-target')),\n        iconEl: el.querySelector('[data-accordion-icon]'),\n        active: el.getAttribute('aria-expanded') === 'true' ? true : false\n      };\n      items.push(item);\n    });\n    new Accordion(items, {\n      alwaysOpen: alwaysOpen === 'open' ? true : false,\n      activeClasses: activeClasses ? activeClasses : Default.activeClasses,\n      inactiveClasses: inactiveClasses ? inactiveClasses : Default.inactiveClasses\n    });\n  });\n}\n\nif (document.readyState !== 'loading') {\n  // DOMContentLoaded event were already fired. Perform explicit initialization now\n  initAccordion();\n} else {\n  // DOMContentLoaded event not yet fired, attach initialization process to it\n  document.addEventListener('DOMContentLoaded', initAccordion);\n}\n\n/* harmony default export */ const accordion = (Accordion);\n;// CONCATENATED MODULE: ./src/components/collapse.js\nfunction collapse_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction collapse_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? collapse_ownKeys(Object(source), !0).forEach(function (key) { collapse_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : collapse_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction collapse_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction collapse_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction collapse_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction collapse_createClass(Constructor, protoProps, staticProps) { if (protoProps) collapse_defineProperties(Constructor.prototype, protoProps); if (staticProps) collapse_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nvar collapse_Default = {\n  triggerEl: null,\n  onCollapse: function onCollapse() {},\n  onExpand: function onExpand() {},\n  onToggle: function onToggle() {}\n};\n\nvar Collapse = /*#__PURE__*/function () {\n  function Collapse() {\n    var targetEl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n    var options = arguments.length > 1 ? arguments[1] : undefined;\n\n    collapse_classCallCheck(this, Collapse);\n\n    this._targetEl = targetEl;\n    this._triggerEl = options ? options.triggerEl : collapse_Default.triggerEl;\n    this._options = collapse_objectSpread(collapse_objectSpread({}, collapse_Default), options);\n    this._visible = false;\n\n    this._init();\n  }\n\n  collapse_createClass(Collapse, [{\n    key: \"_init\",\n    value: function _init() {\n      var _this = this;\n\n      if (this._triggerEl) {\n        if (this._triggerEl.hasAttribute('aria-expanded')) {\n          this._visible = this._triggerEl.getAttribute('aria-expanded') === 'true' ? true : false;\n        } else {\n          // fix until v2 not to break previous single collapses which became dismiss\n          this._visible = this._targetEl.classList.contains('hidden') ? false : true;\n        }\n\n        this._triggerEl.addEventListener('click', function () {\n          _this._visible ? _this.collapse() : _this.expand();\n        });\n      }\n    }\n  }, {\n    key: \"collapse\",\n    value: function collapse() {\n      this._targetEl.classList.add('hidden');\n\n      if (this._triggerEl) {\n        this._triggerEl.setAttribute('aria-expanded', 'false');\n      }\n\n      this._visible = false; // callback function\n\n      this._options.onCollapse(this);\n    }\n  }, {\n    key: \"expand\",\n    value: function expand() {\n      this._targetEl.classList.remove('hidden');\n\n      if (this._triggerEl) {\n        this._triggerEl.setAttribute('aria-expanded', 'true');\n      }\n\n      this._visible = true; // callback function\n\n      this._options.onExpand(this);\n    }\n  }, {\n    key: \"toggle\",\n    value: function toggle() {\n      if (this._visible) {\n        this.collapse();\n      } else {\n        this.expand();\n      }\n    }\n  }]);\n\n  return Collapse;\n}();\n\nwindow.Collapse = Collapse;\n\nfunction initCollapse() {\n  document.querySelectorAll('[data-collapse-toggle]').forEach(function (triggerEl) {\n    var targetEl = document.getElementById(triggerEl.getAttribute('data-collapse-toggle'));\n    new Collapse(targetEl, {\n      triggerEl: triggerEl\n    });\n  });\n}\n\nif (document.readyState !== 'loading') {\n  // DOMContentLoaded event were already fired. Perform explicit initialization now\n  initCollapse();\n} else {\n  // DOMContentLoaded event not yet fired, attach initialization process to it\n  document.addEventListener('DOMContentLoaded', initCollapse);\n}\n\n/* harmony default export */ const collapse = (Collapse);\n;// CONCATENATED MODULE: ./src/components/carousel.js\nfunction carousel_toConsumableArray(arr) { return carousel_arrayWithoutHoles(arr) || carousel_iterableToArray(arr) || carousel_unsupportedIterableToArray(arr) || carousel_nonIterableSpread(); }\n\nfunction carousel_nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction carousel_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return carousel_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return carousel_arrayLikeToArray(o, minLen); }\n\nfunction carousel_iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction carousel_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return carousel_arrayLikeToArray(arr); }\n\nfunction carousel_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction carousel_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction carousel_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? carousel_ownKeys(Object(source), !0).forEach(function (key) { carousel_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : carousel_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction carousel_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction carousel_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction carousel_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction carousel_createClass(Constructor, protoProps, staticProps) { if (protoProps) carousel_defineProperties(Constructor.prototype, protoProps); if (staticProps) carousel_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nvar carousel_Default = {\n  defaultPosition: 0,\n  indicators: {\n    items: [],\n    activeClasses: 'bg-white dark:bg-gray-800',\n    inactiveClasses: 'bg-white/50 dark:bg-gray-800/50 hover:bg-white dark:hover:bg-gray-800'\n  },\n  interval: 3000,\n  onNext: function onNext() {},\n  onPrev: function onPrev() {},\n  onChange: function onChange() {}\n};\n\nvar Carousel = /*#__PURE__*/function () {\n  function Carousel() {\n    var items = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    carousel_classCallCheck(this, Carousel);\n\n    this._items = items;\n    this._options = carousel_objectSpread(carousel_objectSpread(carousel_objectSpread({}, carousel_Default), options), {}, {\n      indicators: carousel_objectSpread(carousel_objectSpread({}, carousel_Default.indicators), options.indicators)\n    });\n    this._activeItem = this.getItem(this._options.defaultPosition);\n    this._indicators = this._options.indicators.items;\n    this._interval = null;\n\n    this._init();\n  }\n  /**\n   * Initialise carousel and items based on active one\n   */\n\n\n  carousel_createClass(Carousel, [{\n    key: \"_init\",\n    value: function _init() {\n      var _this = this;\n\n      this._items.map(function (item) {\n        item.el.classList.add('absolute', 'inset-0', 'transition-all', 'transform');\n      }); // if no active item is set then first position is default\n\n\n      if (this._getActiveItem()) {\n        this.slideTo(this._getActiveItem().position);\n      } else {\n        this.slideTo(0);\n      }\n\n      this._indicators.map(function (indicator, position) {\n        indicator.el.addEventListener('click', function () {\n          _this.slideTo(position);\n        });\n      });\n    }\n  }, {\n    key: \"getItem\",\n    value: function getItem(position) {\n      return this._items[position];\n    }\n    /**\n     * Slide to the element based on id\n     * @param {*} position \n     */\n\n  }, {\n    key: \"slideTo\",\n    value: function slideTo(position) {\n      var nextItem = this._items[position];\n      var rotationItems = {\n        'left': nextItem.position === 0 ? this._items[this._items.length - 1] : this._items[nextItem.position - 1],\n        'middle': nextItem,\n        'right': nextItem.position === this._items.length - 1 ? this._items[0] : this._items[nextItem.position + 1]\n      };\n\n      this._rotate(rotationItems);\n\n      this._setActiveItem(nextItem.position);\n\n      if (this._interval) {\n        this.pause();\n        this.cycle();\n      }\n\n      this._options.onChange(this);\n    }\n    /**\n     * Based on the currently active item it will go to the next position\n     */\n\n  }, {\n    key: \"next\",\n    value: function next() {\n      var activeItem = this._getActiveItem();\n\n      var nextItem = null; // check if last item\n\n      if (activeItem.position === this._items.length - 1) {\n        nextItem = this._items[0];\n      } else {\n        nextItem = this._items[activeItem.position + 1];\n      }\n\n      this.slideTo(nextItem.position); // callback function\n\n      this._options.onNext(this);\n    }\n    /**\n     * Based on the currently active item it will go to the previous position\n     */\n\n  }, {\n    key: \"prev\",\n    value: function prev() {\n      var activeItem = this._getActiveItem();\n\n      var prevItem = null; // check if first item\n\n      if (activeItem.position === 0) {\n        prevItem = this._items[this._items.length - 1];\n      } else {\n        prevItem = this._items[activeItem.position - 1];\n      }\n\n      this.slideTo(prevItem.position); // callback function\n\n      this._options.onPrev(this);\n    }\n    /**\n     * This method applies the transform classes based on the left, middle, and right rotation carousel items\n     * @param {*} rotationItems \n     */\n\n  }, {\n    key: \"_rotate\",\n    value: function _rotate(rotationItems) {\n      // reset\n      this._items.map(function (item) {\n        item.el.classList.add('hidden');\n      }); // left item (previously active)\n\n\n      rotationItems.left.el.classList.remove('-translate-x-full', 'translate-x-full', 'translate-x-0', 'hidden', 'z-20');\n      rotationItems.left.el.classList.add('-translate-x-full', 'z-10'); // currently active item\n\n      rotationItems.middle.el.classList.remove('-translate-x-full', 'translate-x-full', 'translate-x-0', 'hidden', 'z-10');\n      rotationItems.middle.el.classList.add('translate-x-0', 'z-20'); // right item (upcoming active)\n\n      rotationItems.right.el.classList.remove('-translate-x-full', 'translate-x-full', 'translate-x-0', 'hidden', 'z-20');\n      rotationItems.right.el.classList.add('translate-x-full', 'z-10');\n    }\n    /**\n     * Set an interval to cycle through the carousel items\n     */\n\n  }, {\n    key: \"cycle\",\n    value: function cycle() {\n      var _this2 = this;\n\n      this._interval = setInterval(function () {\n        _this2.next();\n      }, this._options.interval);\n    }\n    /**\n     * Clears the cycling interval\n     */\n\n  }, {\n    key: \"pause\",\n    value: function pause() {\n      clearInterval(this._interval);\n    }\n    /**\n     * Get the currently active item\n     */\n\n  }, {\n    key: \"_getActiveItem\",\n    value: function _getActiveItem() {\n      return this._activeItem;\n    }\n    /**\n     * Set the currently active item and data attribute\n     * @param {*} position \n     */\n\n  }, {\n    key: \"_setActiveItem\",\n    value: function _setActiveItem(position) {\n      var _this3 = this;\n\n      this._activeItem = this._items[position]; // update the indicators if available\n\n      if (this._indicators.length) {\n        var _this$_indicators$pos, _this$_indicators$pos2;\n\n        this._indicators.map(function (indicator) {\n          var _indicator$el$classLi, _indicator$el$classLi2;\n\n          indicator.el.setAttribute('aria-current', 'false');\n\n          (_indicator$el$classLi = indicator.el.classList).remove.apply(_indicator$el$classLi, carousel_toConsumableArray(_this3._options.indicators.activeClasses.split(\" \")));\n\n          (_indicator$el$classLi2 = indicator.el.classList).add.apply(_indicator$el$classLi2, carousel_toConsumableArray(_this3._options.indicators.inactiveClasses.split(\" \")));\n        });\n\n        (_this$_indicators$pos = this._indicators[position].el.classList).add.apply(_this$_indicators$pos, carousel_toConsumableArray(this._options.indicators.activeClasses.split(\" \")));\n\n        (_this$_indicators$pos2 = this._indicators[position].el.classList).remove.apply(_this$_indicators$pos2, carousel_toConsumableArray(this._options.indicators.inactiveClasses.split(\" \")));\n\n        this._indicators[position].el.setAttribute('aria-current', 'true');\n      }\n    }\n  }]);\n\n  return Carousel;\n}();\n\nwindow.Carousel = Carousel;\n\nfunction initCarousel() {\n  document.querySelectorAll('[data-carousel]').forEach(function (carouselEl) {\n    var interval = carouselEl.getAttribute('data-carousel-interval');\n    var slide = carouselEl.getAttribute('data-carousel') === 'slide' ? true : false;\n    var items = [];\n    var defaultPosition = 0;\n\n    if (carouselEl.querySelectorAll('[data-carousel-item]').length) {\n      carousel_toConsumableArray(carouselEl.querySelectorAll('[data-carousel-item]')).map(function (carouselItemEl, position) {\n        items.push({\n          position: position,\n          el: carouselItemEl\n        });\n\n        if (carouselItemEl.getAttribute('data-carousel-item') === 'active') {\n          defaultPosition = position;\n        }\n      });\n    }\n\n    var indicators = [];\n\n    if (carouselEl.querySelectorAll('[data-carousel-slide-to]').length) {\n      carousel_toConsumableArray(carouselEl.querySelectorAll('[data-carousel-slide-to]')).map(function (indicatorEl) {\n        indicators.push({\n          position: indicatorEl.getAttribute('data-carousel-slide-to'),\n          el: indicatorEl\n        });\n      });\n    }\n\n    var carousel = new Carousel(items, {\n      defaultPosition: defaultPosition,\n      indicators: {\n        items: indicators\n      },\n      interval: interval ? interval : carousel_Default.interval\n    });\n\n    if (slide) {\n      carousel.cycle();\n    } // check for controls\n\n\n    var carouselNextEl = carouselEl.querySelector('[data-carousel-next]');\n    var carouselPrevEl = carouselEl.querySelector('[data-carousel-prev]');\n\n    if (carouselNextEl) {\n      carouselNextEl.addEventListener('click', function () {\n        carousel.next();\n      });\n    }\n\n    if (carouselPrevEl) {\n      carouselPrevEl.addEventListener('click', function () {\n        carousel.prev();\n      });\n    }\n  });\n}\n\nif (document.readyState !== 'loading') {\n  // DOMContentLoaded event were already fired. Perform explicit initialization now\n  initCarousel();\n} else {\n  // DOMContentLoaded event not yet fired, attach initialization process to it\n  document.addEventListener('DOMContentLoaded', initCarousel);\n}\n\n/* harmony default export */ const carousel = (Carousel);\n;// CONCATENATED MODULE: ./src/components/dismiss.js\nfunction dismiss_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction dismiss_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? dismiss_ownKeys(Object(source), !0).forEach(function (key) { dismiss_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : dismiss_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction dismiss_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction dismiss_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction dismiss_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction dismiss_createClass(Constructor, protoProps, staticProps) { if (protoProps) dismiss_defineProperties(Constructor.prototype, protoProps); if (staticProps) dismiss_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nvar dismiss_Default = {\n  triggerEl: null,\n  transition: 'transition-opacity',\n  duration: 300,\n  timing: 'ease-out',\n  onHide: function onHide() {}\n};\n\nvar Dismiss = /*#__PURE__*/function () {\n  function Dismiss() {\n    var targetEl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    dismiss_classCallCheck(this, Dismiss);\n\n    this._targetEl = targetEl;\n    this._triggerEl = options ? options.triggerEl : dismiss_Default.triggerEl;\n    this._options = dismiss_objectSpread(dismiss_objectSpread({}, dismiss_Default), options);\n\n    this._init();\n  }\n\n  dismiss_createClass(Dismiss, [{\n    key: \"_init\",\n    value: function _init() {\n      var _this = this;\n\n      if (this._triggerEl) {\n        this._triggerEl.addEventListener('click', function () {\n          _this.hide();\n        });\n      }\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      var _this2 = this;\n\n      this._targetEl.classList.add(this._options.transition, \"duration-\".concat(this._options.duration), this._options.timing, 'opacity-0');\n\n      setTimeout(function () {\n        _this2._targetEl.classList.add('hidden');\n      }, this._options.duration); // callback function\n\n      this._options.onHide(this, this._targetEl);\n    }\n  }]);\n\n  return Dismiss;\n}();\n\nwindow.Dismiss = Dismiss;\n\nfunction initDismiss() {\n  document.querySelectorAll('[data-dismiss-target]').forEach(function (triggerEl) {\n    var targetEl = document.querySelector(triggerEl.getAttribute('data-dismiss-target'));\n    new Dismiss(targetEl, {\n      triggerEl: triggerEl\n    });\n  });\n}\n\nif (document.readyState !== 'loading') {\n  // DOMContentLoaded event were already fired. Perform explicit initialization now\n  initDismiss();\n} else {\n  // DOMContentLoaded event not yet fired, attach initialization process to it\n  document.addEventListener('DOMContentLoaded', initDismiss);\n}\n\n/* harmony default export */ const dismiss = (Dismiss);\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\nfunction getWindow(node) {\n  if (node == null) {\n    return window;\n  }\n\n  if (node.toString() !== '[object Window]') {\n    var ownerDocument = node.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView || window : window;\n  }\n\n  return node;\n}\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\n\n\nfunction isElement(node) {\n  var OwnElement = getWindow(node).Element;\n  return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n  var OwnElement = getWindow(node).HTMLElement;\n  return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n  // IE 11 has no ShadowRoot\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n\n  var OwnElement = getWindow(node).ShadowRoot;\n  return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\n\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/utils/math.js\nvar math_max = Math.max;\nvar math_min = Math.min;\nvar round = Math.round;\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js\n\n\nfunction getBoundingClientRect(element, includeScale) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n\n  var rect = element.getBoundingClientRect();\n  var scaleX = 1;\n  var scaleY = 1;\n\n  if (isHTMLElement(element) && includeScale) {\n    var offsetHeight = element.offsetHeight;\n    var offsetWidth = element.offsetWidth; // Do not attempt to divide by 0, otherwise we get `Infinity` as scale\n    // Fallback to 1 in case both values are `0`\n\n    if (offsetWidth > 0) {\n      scaleX = round(rect.width) / offsetWidth || 1;\n    }\n\n    if (offsetHeight > 0) {\n      scaleY = round(rect.height) / offsetHeight || 1;\n    }\n  }\n\n  return {\n    width: rect.width / scaleX,\n    height: rect.height / scaleY,\n    top: rect.top / scaleY,\n    right: rect.right / scaleX,\n    bottom: rect.bottom / scaleY,\n    left: rect.left / scaleX,\n    x: rect.left / scaleX,\n    y: rect.top / scaleY\n  };\n}\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js\n\nfunction getWindowScroll(node) {\n  var win = getWindow(node);\n  var scrollLeft = win.pageXOffset;\n  var scrollTop = win.pageYOffset;\n  return {\n    scrollLeft: scrollLeft,\n    scrollTop: scrollTop\n  };\n}\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js\nfunction getHTMLElementScroll(element) {\n  return {\n    scrollLeft: element.scrollLeft,\n    scrollTop: element.scrollTop\n  };\n}\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js\n\n\n\n\nfunction getNodeScroll(node) {\n  if (node === getWindow(node) || !isHTMLElement(node)) {\n    return getWindowScroll(node);\n  } else {\n    return getHTMLElementScroll(node);\n  }\n}\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\nfunction getNodeName(element) {\n  return element ? (element.nodeName || '').toLowerCase() : null;\n}\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\n\nfunction getDocumentElement(element) {\n  // $FlowFixMe[incompatible-return]: assume body is always available\n  return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n  element.document) || window.document).documentElement;\n}\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js\n\n\n\nfunction getWindowScrollBarX(element) {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  // Popper 1 is broken in this case and never had a bug report so let's assume\n  // it's not an issue. I don't think anyone ever specifies width on <html>\n  // anyway.\n  // Browsers where the left scrollbar doesn't cause an issue report `0` for\n  // this (e.g. Edge 2019, IE11, Safari)\n  return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js\n\nfunction getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js\n\nfunction isScrollParent(element) {\n  // Firefox wants us to check `-x` and `-y` variations as well\n  var _getComputedStyle = getComputedStyle(element),\n      overflow = _getComputedStyle.overflow,\n      overflowX = _getComputedStyle.overflowX,\n      overflowY = _getComputedStyle.overflowY;\n\n  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js\n\n\n\n\n\n\n\n\n\nfunction isElementScaled(element) {\n  var rect = element.getBoundingClientRect();\n  var scaleX = round(rect.width) / element.offsetWidth || 1;\n  var scaleY = round(rect.height) / element.offsetHeight || 1;\n  return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nfunction getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n\n  var isOffsetParentAnElement = isHTMLElement(offsetParent);\n  var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n  var documentElement = getDocumentElement(offsetParent);\n  var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled);\n  var scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  var offsets = {\n    x: 0,\n    y: 0\n  };\n\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n    isScrollParent(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n\n    if (isHTMLElement(offsetParent)) {\n      offsets = getBoundingClientRect(offsetParent, true);\n      offsets.x += offsetParent.clientLeft;\n      offsets.y += offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height\n  };\n}\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js\n // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nfunction getLayoutRect(element) {\n  var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n  // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n  var width = element.offsetWidth;\n  var height = element.offsetHeight;\n\n  if (Math.abs(clientRect.width - width) <= 1) {\n    width = clientRect.width;\n  }\n\n  if (Math.abs(clientRect.height - height) <= 1) {\n    height = clientRect.height;\n  }\n\n  return {\n    x: element.offsetLeft,\n    y: element.offsetTop,\n    width: width,\n    height: height\n  };\n}\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js\n\n\n\nfunction getParentNode(element) {\n  if (getNodeName(element) === 'html') {\n    return element;\n  }\n\n  return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n    // $FlowFixMe[incompatible-return]\n    // $FlowFixMe[prop-missing]\n    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n    element.parentNode || ( // DOM Element detected\n    isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n    // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n    getDocumentElement(element) // fallback\n\n  );\n}\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js\n\n\n\n\nfunction getScrollParent(node) {\n  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return node.ownerDocument.body;\n  }\n\n  if (isHTMLElement(node) && isScrollParent(node)) {\n    return node;\n  }\n\n  return getScrollParent(getParentNode(node));\n}\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js\n\n\n\n\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nfunction listScrollParents(element, list) {\n  var _element$ownerDocumen;\n\n  if (list === void 0) {\n    list = [];\n  }\n\n  var scrollParent = getScrollParent(element);\n  var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n  var win = getWindow(scrollParent);\n  var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n  var updatedList = list.concat(target);\n  return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n  updatedList.concat(listScrollParents(getParentNode(target)));\n}\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js\n\nfunction isTableElement(element) {\n  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js\n\n\n\n\n\n\n\nfunction getTrueOffsetParent(element) {\n  if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n  getComputedStyle(element).position === 'fixed') {\n    return null;\n  }\n\n  return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n  var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n  var isIE = navigator.userAgent.indexOf('Trident') !== -1;\n\n  if (isIE && isHTMLElement(element)) {\n    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n    var elementCss = getComputedStyle(element);\n\n    if (elementCss.position === 'fixed') {\n      return null;\n    }\n  }\n\n  var currentNode = getParentNode(element);\n\n  while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n    var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n    // create a containing block.\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n    if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n      return currentNode;\n    } else {\n      currentNode = currentNode.parentNode;\n    }\n  }\n\n  return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nfunction getOffsetParent(element) {\n  var window = getWindow(element);\n  var offsetParent = getTrueOffsetParent(element);\n\n  while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n    offsetParent = getTrueOffsetParent(offsetParent);\n  }\n\n  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n    return window;\n  }\n\n  return offsetParent || getContainingBlock(element) || window;\n}\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/enums.js\nvar enums_top = 'top';\nvar bottom = 'bottom';\nvar right = 'right';\nvar left = 'left';\nvar auto = 'auto';\nvar basePlacements = [enums_top, bottom, right, left];\nvar start = 'start';\nvar end = 'end';\nvar clippingParents = 'clippingParents';\nvar viewport = 'viewport';\nvar popper = 'popper';\nvar reference = 'reference';\nvar variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n  return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nvar enums_placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n  return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nvar beforeRead = 'beforeRead';\nvar read = 'read';\nvar afterRead = 'afterRead'; // pure-logic modifiers\n\nvar beforeMain = 'beforeMain';\nvar main = 'main';\nvar afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nvar beforeWrite = 'beforeWrite';\nvar write = 'write';\nvar afterWrite = 'afterWrite';\nvar modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/utils/orderModifiers.js\n // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n  var map = new Map();\n  var visited = new Set();\n  var result = [];\n  modifiers.forEach(function (modifier) {\n    map.set(modifier.name, modifier);\n  }); // On visiting object, check for its dependencies and visit them recursively\n\n  function sort(modifier) {\n    visited.add(modifier.name);\n    var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n    requires.forEach(function (dep) {\n      if (!visited.has(dep)) {\n        var depModifier = map.get(dep);\n\n        if (depModifier) {\n          sort(depModifier);\n        }\n      }\n    });\n    result.push(modifier);\n  }\n\n  modifiers.forEach(function (modifier) {\n    if (!visited.has(modifier.name)) {\n      // check for visited object\n      sort(modifier);\n    }\n  });\n  return result;\n}\n\nfunction orderModifiers(modifiers) {\n  // order based on dependencies\n  var orderedModifiers = order(modifiers); // order based on phase\n\n  return modifierPhases.reduce(function (acc, phase) {\n    return acc.concat(orderedModifiers.filter(function (modifier) {\n      return modifier.phase === phase;\n    }));\n  }, []);\n}\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/utils/debounce.js\nfunction debounce(fn) {\n  var pending;\n  return function () {\n    if (!pending) {\n      pending = new Promise(function (resolve) {\n        Promise.resolve().then(function () {\n          pending = undefined;\n          resolve(fn());\n        });\n      });\n    }\n\n    return pending;\n  };\n}\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/utils/mergeByName.js\nfunction mergeByName(modifiers) {\n  var merged = modifiers.reduce(function (merged, current) {\n    var existing = merged[current.name];\n    merged[current.name] = existing ? Object.assign({}, existing, current, {\n      options: Object.assign({}, existing.options, current.options),\n      data: Object.assign({}, existing.data, current.data)\n    }) : current;\n    return merged;\n  }, {}); // IE11 does not support Object.values\n\n  return Object.keys(merged).map(function (key) {\n    return merged[key];\n  });\n}\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/createPopper.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.';\nvar INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.';\nvar DEFAULT_OPTIONS = {\n  placement: 'bottom',\n  modifiers: [],\n  strategy: 'absolute'\n};\n\nfunction areValidElements() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  return !args.some(function (element) {\n    return !(element && typeof element.getBoundingClientRect === 'function');\n  });\n}\n\nfunction popperGenerator(generatorOptions) {\n  if (generatorOptions === void 0) {\n    generatorOptions = {};\n  }\n\n  var _generatorOptions = generatorOptions,\n      _generatorOptions$def = _generatorOptions.defaultModifiers,\n      defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n      _generatorOptions$def2 = _generatorOptions.defaultOptions,\n      defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n  return function createPopper(reference, popper, options) {\n    if (options === void 0) {\n      options = defaultOptions;\n    }\n\n    var state = {\n      placement: 'bottom',\n      orderedModifiers: [],\n      options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n      modifiersData: {},\n      elements: {\n        reference: reference,\n        popper: popper\n      },\n      attributes: {},\n      styles: {}\n    };\n    var effectCleanupFns = [];\n    var isDestroyed = false;\n    var instance = {\n      state: state,\n      setOptions: function setOptions(setOptionsAction) {\n        var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n        cleanupModifierEffects();\n        state.options = Object.assign({}, defaultOptions, state.options, options);\n        state.scrollParents = {\n          reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n          popper: listScrollParents(popper)\n        }; // Orders the modifiers based on their dependencies and `phase`\n        // properties\n\n        var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n        state.orderedModifiers = orderedModifiers.filter(function (m) {\n          return m.enabled;\n        }); // Validate the provided modifiers so that the consumer will get warned\n        // if one of the modifiers is invalid for any reason\n\n        if (false) { var _getComputedStyle, marginTop, marginRight, marginBottom, marginLeft, flipModifier, modifiers; }\n\n        runModifierEffects();\n        return instance.update();\n      },\n      // Sync update – it will always be executed, even if not necessary. This\n      // is useful for low frequency updates where sync behavior simplifies the\n      // logic.\n      // For high frequency updates (e.g. `resize` and `scroll` events), always\n      // prefer the async Popper#update method\n      forceUpdate: function forceUpdate() {\n        if (isDestroyed) {\n          return;\n        }\n\n        var _state$elements = state.elements,\n            reference = _state$elements.reference,\n            popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n        // anymore\n\n        if (!areValidElements(reference, popper)) {\n          if (false) {}\n\n          return;\n        } // Store the reference and popper rects to be read by modifiers\n\n\n        state.rects = {\n          reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n          popper: getLayoutRect(popper)\n        }; // Modifiers have the ability to reset the current update cycle. The\n        // most common use case for this is the `flip` modifier changing the\n        // placement, which then needs to re-run all the modifiers, because the\n        // logic was previously ran for the previous placement and is therefore\n        // stale/incorrect\n\n        state.reset = false;\n        state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n        // is filled with the initial data specified by the modifier. This means\n        // it doesn't persist and is fresh on each update.\n        // To ensure persistent data, use `${name}#persistent`\n\n        state.orderedModifiers.forEach(function (modifier) {\n          return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n        });\n        var __debug_loops__ = 0;\n\n        for (var index = 0; index < state.orderedModifiers.length; index++) {\n          if (false) {}\n\n          if (state.reset === true) {\n            state.reset = false;\n            index = -1;\n            continue;\n          }\n\n          var _state$orderedModifie = state.orderedModifiers[index],\n              fn = _state$orderedModifie.fn,\n              _state$orderedModifie2 = _state$orderedModifie.options,\n              _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n              name = _state$orderedModifie.name;\n\n          if (typeof fn === 'function') {\n            state = fn({\n              state: state,\n              options: _options,\n              name: name,\n              instance: instance\n            }) || state;\n          }\n        }\n      },\n      // Async and optimistically optimized update – it will not be executed if\n      // not necessary (debounced to run at most once-per-tick)\n      update: debounce(function () {\n        return new Promise(function (resolve) {\n          instance.forceUpdate();\n          resolve(state);\n        });\n      }),\n      destroy: function destroy() {\n        cleanupModifierEffects();\n        isDestroyed = true;\n      }\n    };\n\n    if (!areValidElements(reference, popper)) {\n      if (false) {}\n\n      return instance;\n    }\n\n    instance.setOptions(options).then(function (state) {\n      if (!isDestroyed && options.onFirstUpdate) {\n        options.onFirstUpdate(state);\n      }\n    }); // Modifiers have the ability to execute arbitrary code before the first\n    // update cycle runs. They will be executed in the same order as the update\n    // cycle. This is useful when a modifier adds some persistent data that\n    // other modifiers need to use, but the modifier is run after the dependent\n    // one.\n\n    function runModifierEffects() {\n      state.orderedModifiers.forEach(function (_ref3) {\n        var name = _ref3.name,\n            _ref3$options = _ref3.options,\n            options = _ref3$options === void 0 ? {} : _ref3$options,\n            effect = _ref3.effect;\n\n        if (typeof effect === 'function') {\n          var cleanupFn = effect({\n            state: state,\n            name: name,\n            instance: instance,\n            options: options\n          });\n\n          var noopFn = function noopFn() {};\n\n          effectCleanupFns.push(cleanupFn || noopFn);\n        }\n      });\n    }\n\n    function cleanupModifierEffects() {\n      effectCleanupFns.forEach(function (fn) {\n        return fn();\n      });\n      effectCleanupFns = [];\n    }\n\n    return instance;\n  };\n}\nvar createPopper = /*#__PURE__*/(/* unused pure expression or super */ null && (popperGenerator())); // eslint-disable-next-line import/no-unused-modules\n\n\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/modifiers/eventListeners.js\n // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n  passive: true\n};\n\nfunction effect(_ref) {\n  var state = _ref.state,\n      instance = _ref.instance,\n      options = _ref.options;\n  var _options$scroll = options.scroll,\n      scroll = _options$scroll === void 0 ? true : _options$scroll,\n      _options$resize = options.resize,\n      resize = _options$resize === void 0 ? true : _options$resize;\n  var window = getWindow(state.elements.popper);\n  var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n  if (scroll) {\n    scrollParents.forEach(function (scrollParent) {\n      scrollParent.addEventListener('scroll', instance.update, passive);\n    });\n  }\n\n  if (resize) {\n    window.addEventListener('resize', instance.update, passive);\n  }\n\n  return function () {\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.removeEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.removeEventListener('resize', instance.update, passive);\n    }\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const eventListeners = ({\n  name: 'eventListeners',\n  enabled: true,\n  phase: 'write',\n  fn: function fn() {},\n  effect: effect,\n  data: {}\n});\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\n\nfunction getBasePlacement(placement) {\n  return placement.split('-')[0];\n}\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/utils/getVariation.js\nfunction getVariation(placement) {\n  return placement.split('-')[1];\n}\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js\nfunction getMainAxisFromPlacement(placement) {\n  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/utils/computeOffsets.js\n\n\n\n\nfunction computeOffsets(_ref) {\n  var reference = _ref.reference,\n      element = _ref.element,\n      placement = _ref.placement;\n  var basePlacement = placement ? getBasePlacement(placement) : null;\n  var variation = placement ? getVariation(placement) : null;\n  var commonX = reference.x + reference.width / 2 - element.width / 2;\n  var commonY = reference.y + reference.height / 2 - element.height / 2;\n  var offsets;\n\n  switch (basePlacement) {\n    case enums_top:\n      offsets = {\n        x: commonX,\n        y: reference.y - element.height\n      };\n      break;\n\n    case bottom:\n      offsets = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n\n    case right:\n      offsets = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n\n    case left:\n      offsets = {\n        x: reference.x - element.width,\n        y: commonY\n      };\n      break;\n\n    default:\n      offsets = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n\n  var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n  if (mainAxis != null) {\n    var len = mainAxis === 'y' ? 'height' : 'width';\n\n    switch (variation) {\n      case start:\n        offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n        break;\n\n      case end:\n        offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n        break;\n\n      default:\n    }\n  }\n\n  return offsets;\n}\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js\n\n\nfunction popperOffsets(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  // Offsets are the actual position the popper needs to have to be\n  // properly positioned near its reference element\n  // This is the most basic placement, and will be adjusted by\n  // the modifiers in the next step\n  state.modifiersData[name] = computeOffsets({\n    reference: state.rects.reference,\n    element: state.rects.popper,\n    strategy: 'absolute',\n    placement: state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const modifiers_popperOffsets = ({\n  name: 'popperOffsets',\n  enabled: true,\n  phase: 'read',\n  fn: popperOffsets,\n  data: {}\n});\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/modifiers/computeStyles.js\n\n\n\n\n\n\n\n // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n  top: 'auto',\n  right: 'auto',\n  bottom: 'auto',\n  left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref) {\n  var x = _ref.x,\n      y = _ref.y;\n  var win = window;\n  var dpr = win.devicePixelRatio || 1;\n  return {\n    x: round(x * dpr) / dpr || 0,\n    y: round(y * dpr) / dpr || 0\n  };\n}\n\nfunction mapToStyles(_ref2) {\n  var _Object$assign2;\n\n  var popper = _ref2.popper,\n      popperRect = _ref2.popperRect,\n      placement = _ref2.placement,\n      variation = _ref2.variation,\n      offsets = _ref2.offsets,\n      position = _ref2.position,\n      gpuAcceleration = _ref2.gpuAcceleration,\n      adaptive = _ref2.adaptive,\n      roundOffsets = _ref2.roundOffsets,\n      isFixed = _ref2.isFixed;\n  var _offsets$x = offsets.x,\n      x = _offsets$x === void 0 ? 0 : _offsets$x,\n      _offsets$y = offsets.y,\n      y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n  var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n    x: x,\n    y: y\n  }) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref3.x;\n  y = _ref3.y;\n  var hasX = offsets.hasOwnProperty('x');\n  var hasY = offsets.hasOwnProperty('y');\n  var sideX = left;\n  var sideY = enums_top;\n  var win = window;\n\n  if (adaptive) {\n    var offsetParent = getOffsetParent(popper);\n    var heightProp = 'clientHeight';\n    var widthProp = 'clientWidth';\n\n    if (offsetParent === getWindow(popper)) {\n      offsetParent = getDocumentElement(popper);\n\n      if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n        heightProp = 'scrollHeight';\n        widthProp = 'scrollWidth';\n      }\n    } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n    offsetParent = offsetParent;\n\n    if (placement === enums_top || (placement === left || placement === right) && variation === end) {\n      sideY = bottom;\n      var offsetY = isFixed && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n      offsetParent[heightProp];\n      y -= offsetY - popperRect.height;\n      y *= gpuAcceleration ? 1 : -1;\n    }\n\n    if (placement === left || (placement === enums_top || placement === bottom) && variation === end) {\n      sideX = right;\n      var offsetX = isFixed && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n      offsetParent[widthProp];\n      x -= offsetX - popperRect.width;\n      x *= gpuAcceleration ? 1 : -1;\n    }\n  }\n\n  var commonStyles = Object.assign({\n    position: position\n  }, adaptive && unsetSides);\n\n  var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n    x: x,\n    y: y\n  }) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref4.x;\n  y = _ref4.y;\n\n  if (gpuAcceleration) {\n    var _Object$assign;\n\n    return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n  }\n\n  return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n  var state = _ref5.state,\n      options = _ref5.options;\n  var _options$gpuAccelerat = options.gpuAcceleration,\n      gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n      _options$adaptive = options.adaptive,\n      adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n      _options$roundOffsets = options.roundOffsets,\n      roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n  if (false) { var transitionProperty; }\n\n  var commonStyles = {\n    placement: getBasePlacement(state.placement),\n    variation: getVariation(state.placement),\n    popper: state.elements.popper,\n    popperRect: state.rects.popper,\n    gpuAcceleration: gpuAcceleration,\n    isFixed: state.options.strategy === 'fixed'\n  };\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.popperOffsets,\n      position: state.options.strategy,\n      adaptive: adaptive,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  if (state.modifiersData.arrow != null) {\n    state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.arrow,\n      position: 'absolute',\n      adaptive: false,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-placement': state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const modifiers_computeStyles = ({\n  name: 'computeStyles',\n  enabled: true,\n  phase: 'beforeWrite',\n  fn: computeStyles,\n  data: {}\n});\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/modifiers/applyStyles.js\n\n // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n  var state = _ref.state;\n  Object.keys(state.elements).forEach(function (name) {\n    var style = state.styles[name] || {};\n    var attributes = state.attributes[name] || {};\n    var element = state.elements[name]; // arrow is optional + virtual elements\n\n    if (!isHTMLElement(element) || !getNodeName(element)) {\n      return;\n    } // Flow doesn't support to extend this property, but it's the most\n    // effective way to apply styles to an HTMLElement\n    // $FlowFixMe[cannot-write]\n\n\n    Object.assign(element.style, style);\n    Object.keys(attributes).forEach(function (name) {\n      var value = attributes[name];\n\n      if (value === false) {\n        element.removeAttribute(name);\n      } else {\n        element.setAttribute(name, value === true ? '' : value);\n      }\n    });\n  });\n}\n\nfunction applyStyles_effect(_ref2) {\n  var state = _ref2.state;\n  var initialStyles = {\n    popper: {\n      position: state.options.strategy,\n      left: '0',\n      top: '0',\n      margin: '0'\n    },\n    arrow: {\n      position: 'absolute'\n    },\n    reference: {}\n  };\n  Object.assign(state.elements.popper.style, initialStyles.popper);\n  state.styles = initialStyles;\n\n  if (state.elements.arrow) {\n    Object.assign(state.elements.arrow.style, initialStyles.arrow);\n  }\n\n  return function () {\n    Object.keys(state.elements).forEach(function (name) {\n      var element = state.elements[name];\n      var attributes = state.attributes[name] || {};\n      var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n      var style = styleProperties.reduce(function (style, property) {\n        style[property] = '';\n        return style;\n      }, {}); // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      }\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (attribute) {\n        element.removeAttribute(attribute);\n      });\n    });\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const modifiers_applyStyles = ({\n  name: 'applyStyles',\n  enabled: true,\n  phase: 'write',\n  fn: applyStyles,\n  effect: applyStyles_effect,\n  requires: ['computeStyles']\n});\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/modifiers/offset.js\n\n // eslint-disable-next-line import/no-unused-modules\n\nfunction distanceAndSkiddingToXY(placement, rects, offset) {\n  var basePlacement = getBasePlacement(placement);\n  var invertDistance = [left, enums_top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n  var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n    placement: placement\n  })) : offset,\n      skidding = _ref[0],\n      distance = _ref[1];\n\n  skidding = skidding || 0;\n  distance = (distance || 0) * invertDistance;\n  return [left, right].indexOf(basePlacement) >= 0 ? {\n    x: distance,\n    y: skidding\n  } : {\n    x: skidding,\n    y: distance\n  };\n}\n\nfunction offset(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options,\n      name = _ref2.name;\n  var _options$offset = options.offset,\n      offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n  var data = enums_placements.reduce(function (acc, placement) {\n    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n    return acc;\n  }, {});\n  var _data$state$placement = data[state.placement],\n      x = _data$state$placement.x,\n      y = _data$state$placement.y;\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.modifiersData.popperOffsets.x += x;\n    state.modifiersData.popperOffsets.y += y;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const modifiers_offset = ({\n  name: 'offset',\n  enabled: true,\n  phase: 'main',\n  requires: ['popperOffsets'],\n  fn: offset\n});\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js\nvar hash = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nfunction getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, function (matched) {\n    return hash[matched];\n  });\n}\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js\nvar getOppositeVariationPlacement_hash = {\n  start: 'end',\n  end: 'start'\n};\nfunction getOppositeVariationPlacement(placement) {\n  return placement.replace(/start|end/g, function (matched) {\n    return getOppositeVariationPlacement_hash[matched];\n  });\n}\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js\n\n\n\nfunction getViewportRect(element) {\n  var win = getWindow(element);\n  var html = getDocumentElement(element);\n  var visualViewport = win.visualViewport;\n  var width = html.clientWidth;\n  var height = html.clientHeight;\n  var x = 0;\n  var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n  // can be obscured underneath it.\n  // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n  // if it isn't open, so if this isn't available, the popper will be detected\n  // to overflow the bottom of the screen too early.\n\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n    // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n    // errors due to floating point numbers, so we need to check precision.\n    // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n    // Feature detection fails in mobile emulation mode in Chrome.\n    // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n    // 0.001\n    // Fallback here: \"Not Safari\" userAgent\n\n    if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x + getWindowScrollBarX(element),\n    y: y\n  };\n}\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js\n\n\n\n\n // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nfunction getDocumentRect(element) {\n  var _element$ownerDocumen;\n\n  var html = getDocumentElement(element);\n  var winScroll = getWindowScroll(element);\n  var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n  var width = math_max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n  var height = math_max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n  var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n  var y = -winScroll.scrollTop;\n\n  if (getComputedStyle(body || html).direction === 'rtl') {\n    x += math_max(html.clientWidth, body ? body.clientWidth : 0) - width;\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x,\n    y: y\n  };\n}\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/dom-utils/contains.js\n\nfunction contains(parent, child) {\n  var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n  if (parent.contains(child)) {\n    return true;\n  } // then fallback to custom implementation with Shadow DOM support\n  else if (rootNode && isShadowRoot(rootNode)) {\n      var next = child;\n\n      do {\n        if (next && parent.isSameNode(next)) {\n          return true;\n        } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n        next = next.parentNode || next.host;\n      } while (next);\n    } // Give up, the result is false\n\n\n  return false;\n}\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/utils/rectToClientRect.js\nfunction rectToClientRect(rect) {\n  return Object.assign({}, rect, {\n    left: rect.x,\n    top: rect.y,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height\n  });\n}\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction getInnerBoundingClientRect(element) {\n  var rect = getBoundingClientRect(element);\n  rect.top = rect.top + element.clientTop;\n  rect.left = rect.left + element.clientLeft;\n  rect.bottom = rect.top + element.clientHeight;\n  rect.right = rect.left + element.clientWidth;\n  rect.width = element.clientWidth;\n  rect.height = element.clientHeight;\n  rect.x = rect.left;\n  rect.y = rect.top;\n  return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent) {\n  return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n  var clippingParents = listScrollParents(getParentNode(element));\n  var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n  var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n  if (!isElement(clipperElement)) {\n    return [];\n  } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n  return clippingParents.filter(function (clippingParent) {\n    return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n  });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nfunction getClippingRect(element, boundary, rootBoundary) {\n  var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n  var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n  var firstClippingParent = clippingParents[0];\n  var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n    var rect = getClientRectFromMixedType(element, clippingParent);\n    accRect.top = math_max(rect.top, accRect.top);\n    accRect.right = math_min(rect.right, accRect.right);\n    accRect.bottom = math_min(rect.bottom, accRect.bottom);\n    accRect.left = math_max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromMixedType(element, firstClippingParent));\n  clippingRect.width = clippingRect.right - clippingRect.left;\n  clippingRect.height = clippingRect.bottom - clippingRect.top;\n  clippingRect.x = clippingRect.left;\n  clippingRect.y = clippingRect.top;\n  return clippingRect;\n}\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js\nfunction getFreshSideObject() {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  };\n}\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js\n\nfunction mergePaddingObject(paddingObject) {\n  return Object.assign({}, getFreshSideObject(), paddingObject);\n}\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/utils/expandToHashMap.js\nfunction expandToHashMap(value, keys) {\n  return keys.reduce(function (hashMap, key) {\n    hashMap[key] = value;\n    return hashMap;\n  }, {});\n}\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/utils/detectOverflow.js\n\n\n\n\n\n\n\n\n // eslint-disable-next-line import/no-unused-modules\n\nfunction detectOverflow(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      _options$placement = _options.placement,\n      placement = _options$placement === void 0 ? state.placement : _options$placement,\n      _options$boundary = _options.boundary,\n      boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n      _options$rootBoundary = _options.rootBoundary,\n      rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n      _options$elementConte = _options.elementContext,\n      elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n      _options$altBoundary = _options.altBoundary,\n      altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n      _options$padding = _options.padding,\n      padding = _options$padding === void 0 ? 0 : _options$padding;\n  var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  var altContext = elementContext === popper ? reference : popper;\n  var popperRect = state.rects.popper;\n  var element = state.elements[altBoundary ? altContext : elementContext];\n  var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n  var referenceClientRect = getBoundingClientRect(state.elements.reference);\n  var popperOffsets = computeOffsets({\n    reference: referenceClientRect,\n    element: popperRect,\n    strategy: 'absolute',\n    placement: placement\n  });\n  var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n  var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n  // 0 or negative = within the clipping rect\n\n  var overflowOffsets = {\n    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n    right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n  };\n  var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n  if (elementContext === popper && offsetData) {\n    var offset = offsetData[placement];\n    Object.keys(overflowOffsets).forEach(function (key) {\n      var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n      var axis = [enums_top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n      overflowOffsets[key] += offset[axis] * multiply;\n    });\n  }\n\n  return overflowOffsets;\n}\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js\n\n\n\n\nfunction computeAutoPlacement(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      placement = _options.placement,\n      boundary = _options.boundary,\n      rootBoundary = _options.rootBoundary,\n      padding = _options.padding,\n      flipVariations = _options.flipVariations,\n      _options$allowedAutoP = _options.allowedAutoPlacements,\n      allowedAutoPlacements = _options$allowedAutoP === void 0 ? enums_placements : _options$allowedAutoP;\n  var variation = getVariation(placement);\n  var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n    return getVariation(placement) === variation;\n  }) : basePlacements;\n  var allowedPlacements = placements.filter(function (placement) {\n    return allowedAutoPlacements.indexOf(placement) >= 0;\n  });\n\n  if (allowedPlacements.length === 0) {\n    allowedPlacements = placements;\n\n    if (false) {}\n  } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n  var overflows = allowedPlacements.reduce(function (acc, placement) {\n    acc[placement] = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding\n    })[getBasePlacement(placement)];\n    return acc;\n  }, {});\n  return Object.keys(overflows).sort(function (a, b) {\n    return overflows[a] - overflows[b];\n  });\n}\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/modifiers/flip.js\n\n\n\n\n\n\n // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n  if (getBasePlacement(placement) === auto) {\n    return [];\n  }\n\n  var oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n\n  if (state.modifiersData[name]._skip) {\n    return;\n  }\n\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n      specifiedFallbackPlacements = options.fallbackPlacements,\n      padding = options.padding,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      _options$flipVariatio = options.flipVariations,\n      flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n      allowedAutoPlacements = options.allowedAutoPlacements;\n  var preferredPlacement = state.options.placement;\n  var basePlacement = getBasePlacement(preferredPlacement);\n  var isBasePlacement = basePlacement === preferredPlacement;\n  var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n  var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n    return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      flipVariations: flipVariations,\n      allowedAutoPlacements: allowedAutoPlacements\n    }) : placement);\n  }, []);\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var checksMap = new Map();\n  var makeFallbackChecks = true;\n  var firstFittingPlacement = placements[0];\n\n  for (var i = 0; i < placements.length; i++) {\n    var placement = placements[i];\n\n    var _basePlacement = getBasePlacement(placement);\n\n    var isStartVariation = getVariation(placement) === start;\n    var isVertical = [enums_top, bottom].indexOf(_basePlacement) >= 0;\n    var len = isVertical ? 'width' : 'height';\n    var overflow = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      altBoundary: altBoundary,\n      padding: padding\n    });\n    var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : enums_top;\n\n    if (referenceRect[len] > popperRect[len]) {\n      mainVariationSide = getOppositePlacement(mainVariationSide);\n    }\n\n    var altVariationSide = getOppositePlacement(mainVariationSide);\n    var checks = [];\n\n    if (checkMainAxis) {\n      checks.push(overflow[_basePlacement] <= 0);\n    }\n\n    if (checkAltAxis) {\n      checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n    }\n\n    if (checks.every(function (check) {\n      return check;\n    })) {\n      firstFittingPlacement = placement;\n      makeFallbackChecks = false;\n      break;\n    }\n\n    checksMap.set(placement, checks);\n  }\n\n  if (makeFallbackChecks) {\n    // `2` may be desired in some cases – research later\n    var numberOfChecks = flipVariations ? 3 : 1;\n\n    var _loop = function _loop(_i) {\n      var fittingPlacement = placements.find(function (placement) {\n        var checks = checksMap.get(placement);\n\n        if (checks) {\n          return checks.slice(0, _i).every(function (check) {\n            return check;\n          });\n        }\n      });\n\n      if (fittingPlacement) {\n        firstFittingPlacement = fittingPlacement;\n        return \"break\";\n      }\n    };\n\n    for (var _i = numberOfChecks; _i > 0; _i--) {\n      var _ret = _loop(_i);\n\n      if (_ret === \"break\") break;\n    }\n  }\n\n  if (state.placement !== firstFittingPlacement) {\n    state.modifiersData[name]._skip = true;\n    state.placement = firstFittingPlacement;\n    state.reset = true;\n  }\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const modifiers_flip = ({\n  name: 'flip',\n  enabled: true,\n  phase: 'main',\n  fn: flip,\n  requiresIfExists: ['offset'],\n  data: {\n    _skip: false\n  }\n});\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/utils/getAltAxis.js\nfunction getAltAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/utils/within.js\n\nfunction within(min, value, max) {\n  return math_max(min, math_min(value, max));\n}\nfunction withinMaxClamp(min, value, max) {\n  var v = within(min, value, max);\n  return v > max ? max : v;\n}\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js\n\n\n\n\n\n\n\n\n\n\n\n\nfunction preventOverflow(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      padding = options.padding,\n      _options$tether = options.tether,\n      tether = _options$tether === void 0 ? true : _options$tether,\n      _options$tetherOffset = options.tetherOffset,\n      tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n  var overflow = detectOverflow(state, {\n    boundary: boundary,\n    rootBoundary: rootBoundary,\n    padding: padding,\n    altBoundary: altBoundary\n  });\n  var basePlacement = getBasePlacement(state.placement);\n  var variation = getVariation(state.placement);\n  var isBasePlacement = !variation;\n  var mainAxis = getMainAxisFromPlacement(basePlacement);\n  var altAxis = getAltAxis(mainAxis);\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : tetherOffset;\n  var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n    mainAxis: tetherOffsetValue,\n    altAxis: tetherOffsetValue\n  } : Object.assign({\n    mainAxis: 0,\n    altAxis: 0\n  }, tetherOffsetValue);\n  var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n  var data = {\n    x: 0,\n    y: 0\n  };\n\n  if (!popperOffsets) {\n    return;\n  }\n\n  if (checkMainAxis) {\n    var _offsetModifierState$;\n\n    var mainSide = mainAxis === 'y' ? enums_top : left;\n    var altSide = mainAxis === 'y' ? bottom : right;\n    var len = mainAxis === 'y' ? 'height' : 'width';\n    var offset = popperOffsets[mainAxis];\n    var min = offset + overflow[mainSide];\n    var max = offset - overflow[altSide];\n    var additive = tether ? -popperRect[len] / 2 : 0;\n    var minLen = variation === start ? referenceRect[len] : popperRect[len];\n    var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n    // outside the reference bounds\n\n    var arrowElement = state.elements.arrow;\n    var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n      width: 0,\n      height: 0\n    };\n    var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n    var arrowPaddingMin = arrowPaddingObject[mainSide];\n    var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n    // to include its full size in the calculation. If the reference is small\n    // and near the edge of a boundary, the popper can overflow even if the\n    // reference is not overflowing as well (e.g. virtual elements with no\n    // width or height)\n\n    var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n    var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n    var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n    var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n    var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n    var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n    var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n    var tetherMax = offset + maxOffset - offsetModifierValue;\n    var preventedOffset = within(tether ? math_min(min, tetherMin) : min, offset, tether ? math_max(max, tetherMax) : max);\n    popperOffsets[mainAxis] = preventedOffset;\n    data[mainAxis] = preventedOffset - offset;\n  }\n\n  if (checkAltAxis) {\n    var _offsetModifierState$2;\n\n    var _mainSide = mainAxis === 'x' ? enums_top : left;\n\n    var _altSide = mainAxis === 'x' ? bottom : right;\n\n    var _offset = popperOffsets[altAxis];\n\n    var _len = altAxis === 'y' ? 'height' : 'width';\n\n    var _min = _offset + overflow[_mainSide];\n\n    var _max = _offset - overflow[_altSide];\n\n    var isOriginSide = [enums_top, left].indexOf(basePlacement) !== -1;\n\n    var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n    var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n    var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n    var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n    popperOffsets[altAxis] = _preventedOffset;\n    data[altAxis] = _preventedOffset - _offset;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const modifiers_preventOverflow = ({\n  name: 'preventOverflow',\n  enabled: true,\n  phase: 'main',\n  fn: preventOverflow,\n  requiresIfExists: ['offset']\n});\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/modifiers/arrow.js\n\n\n\n\n\n\n\n\n\n // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n  padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : padding;\n  return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n  var _state$modifiersData$;\n\n  var state = _ref.state,\n      name = _ref.name,\n      options = _ref.options;\n  var arrowElement = state.elements.arrow;\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var basePlacement = getBasePlacement(state.placement);\n  var axis = getMainAxisFromPlacement(basePlacement);\n  var isVertical = [left, right].indexOf(basePlacement) >= 0;\n  var len = isVertical ? 'height' : 'width';\n\n  if (!arrowElement || !popperOffsets) {\n    return;\n  }\n\n  var paddingObject = toPaddingObject(options.padding, state);\n  var arrowRect = getLayoutRect(arrowElement);\n  var minProp = axis === 'y' ? enums_top : left;\n  var maxProp = axis === 'y' ? bottom : right;\n  var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n  var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n  var arrowOffsetParent = getOffsetParent(arrowElement);\n  var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n  var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n  // outside of the popper bounds\n\n  var min = paddingObject[minProp];\n  var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n  var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n  var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n  var axisProp = axis;\n  state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction arrow_effect(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options;\n  var _options$element = options.element,\n      arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n  if (arrowElement == null) {\n    return;\n  } // CSS selector\n\n\n  if (typeof arrowElement === 'string') {\n    arrowElement = state.elements.popper.querySelector(arrowElement);\n\n    if (!arrowElement) {\n      return;\n    }\n  }\n\n  if (false) {}\n\n  if (!contains(state.elements.popper, arrowElement)) {\n    if (false) {}\n\n    return;\n  }\n\n  state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const modifiers_arrow = ({\n  name: 'arrow',\n  enabled: true,\n  phase: 'main',\n  fn: arrow,\n  effect: arrow_effect,\n  requires: ['popperOffsets'],\n  requiresIfExists: ['preventOverflow']\n});\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/modifiers/hide.js\n\n\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n  if (preventedOffsets === void 0) {\n    preventedOffsets = {\n      x: 0,\n      y: 0\n    };\n  }\n\n  return {\n    top: overflow.top - rect.height - preventedOffsets.y,\n    right: overflow.right - rect.width + preventedOffsets.x,\n    bottom: overflow.bottom - rect.height + preventedOffsets.y,\n    left: overflow.left - rect.width - preventedOffsets.x\n  };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n  return [enums_top, right, bottom, left].some(function (side) {\n    return overflow[side] >= 0;\n  });\n}\n\nfunction hide(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var preventedOffsets = state.modifiersData.preventOverflow;\n  var referenceOverflow = detectOverflow(state, {\n    elementContext: 'reference'\n  });\n  var popperAltOverflow = detectOverflow(state, {\n    altBoundary: true\n  });\n  var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n  var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n  var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n  var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n  state.modifiersData[name] = {\n    referenceClippingOffsets: referenceClippingOffsets,\n    popperEscapeOffsets: popperEscapeOffsets,\n    isReferenceHidden: isReferenceHidden,\n    hasPopperEscaped: hasPopperEscaped\n  };\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-reference-hidden': isReferenceHidden,\n    'data-popper-escaped': hasPopperEscaped\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const modifiers_hide = ({\n  name: 'hide',\n  enabled: true,\n  phase: 'main',\n  requiresIfExists: ['preventOverflow'],\n  fn: hide\n});\n;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/popper.js\n\n\n\n\n\n\n\n\n\n\nvar defaultModifiers = [eventListeners, modifiers_popperOffsets, modifiers_computeStyles, modifiers_applyStyles, modifiers_offset, modifiers_flip, modifiers_preventOverflow, modifiers_arrow, modifiers_hide];\nvar popper_createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\n // eslint-disable-next-line import/no-unused-modules\n\n // eslint-disable-next-line import/no-unused-modules\n\n\n;// CONCATENATED MODULE: ./src/components/dropdown.js\nfunction dropdown_toConsumableArray(arr) { return dropdown_arrayWithoutHoles(arr) || dropdown_iterableToArray(arr) || dropdown_unsupportedIterableToArray(arr) || dropdown_nonIterableSpread(); }\n\nfunction dropdown_nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction dropdown_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return dropdown_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return dropdown_arrayLikeToArray(o, minLen); }\n\nfunction dropdown_iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction dropdown_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return dropdown_arrayLikeToArray(arr); }\n\nfunction dropdown_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction dropdown_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction dropdown_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? dropdown_ownKeys(Object(source), !0).forEach(function (key) { dropdown_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : dropdown_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction dropdown_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction dropdown_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction dropdown_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction dropdown_createClass(Constructor, protoProps, staticProps) { if (protoProps) dropdown_defineProperties(Constructor.prototype, protoProps); if (staticProps) dropdown_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\n\nvar dropdown_Default = {\n  placement: 'bottom',\n  triggerType: 'click',\n  onShow: function onShow() {},\n  onHide: function onHide() {}\n};\n\nvar Dropdown = /*#__PURE__*/function () {\n  function Dropdown() {\n    var targetElement = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n    var triggerElement = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n    dropdown_classCallCheck(this, Dropdown);\n\n    this._targetEl = targetElement;\n    this._triggerEl = triggerElement;\n    this._options = dropdown_objectSpread(dropdown_objectSpread({}, dropdown_Default), options);\n    this._popperInstance = this._createPopperInstace();\n    this._visible = false;\n\n    this._init();\n  }\n\n  dropdown_createClass(Dropdown, [{\n    key: \"_init\",\n    value: function _init() {\n      var _this = this;\n\n      if (this._triggerEl) {\n        this._triggerEl.addEventListener('click', function () {\n          _this.toggle();\n        });\n      }\n    }\n  }, {\n    key: \"_createPopperInstace\",\n    value: function _createPopperInstace() {\n      return popper_createPopper(this._triggerEl, this._targetEl, {\n        placement: this._options.placement,\n        modifiers: [{\n          name: 'offset',\n          options: {\n            offset: [0, 10]\n          }\n        }]\n      });\n    }\n  }, {\n    key: \"_handleClickOutside\",\n    value: function _handleClickOutside(ev, targetEl) {\n      var clickedEl = ev.target;\n\n      if (clickedEl !== targetEl && !targetEl.contains(clickedEl) && !this._triggerEl.contains(clickedEl) && this._visible) {\n        this.hide();\n      }\n\n      document.body.removeEventListener('click', this._handleClickOutside, true);\n    }\n  }, {\n    key: \"toggle\",\n    value: function toggle() {\n      if (this._visible) {\n        this.hide();\n        document.body.removeEventListener('click', this._handleClickOutside, true);\n      } else {\n        this.show();\n      }\n    }\n  }, {\n    key: \"show\",\n    value: function show() {\n      var _this2 = this;\n\n      this._targetEl.classList.remove('hidden');\n\n      this._targetEl.classList.add('block'); // Enable the event listeners\n\n\n      this._popperInstance.setOptions(function (options) {\n        return dropdown_objectSpread(dropdown_objectSpread({}, options), {}, {\n          modifiers: [].concat(dropdown_toConsumableArray(options.modifiers), [{\n            name: 'eventListeners',\n            enabled: true\n          }])\n        });\n      });\n\n      document.body.addEventListener('click', function (ev) {\n        _this2._handleClickOutside(ev, _this2._targetEl);\n      }, true); // Update its position\n\n      this._popperInstance.update();\n\n      this._visible = true; // callback function\n\n      this._options.onShow(this);\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this._targetEl.classList.remove('block');\n\n      this._targetEl.classList.add('hidden'); // Disable the event listeners\n\n\n      this._popperInstance.setOptions(function (options) {\n        return dropdown_objectSpread(dropdown_objectSpread({}, options), {}, {\n          modifiers: [].concat(dropdown_toConsumableArray(options.modifiers), [{\n            name: 'eventListeners',\n            enabled: false\n          }])\n        });\n      });\n\n      this._visible = false; // callback function\n\n      this._options.onHide(this);\n    }\n  }]);\n\n  return Dropdown;\n}();\n\nwindow.Dropdown = Dropdown;\n\nfunction initDropdown() {\n  document.querySelectorAll('[data-dropdown-toggle]').forEach(function (triggerEl) {\n    var targetEl = document.getElementById(triggerEl.getAttribute('data-dropdown-toggle'));\n    var placement = triggerEl.getAttribute('data-dropdown-placement');\n    new Dropdown(targetEl, triggerEl, {\n      placement: placement ? placement : dropdown_Default.placement\n    });\n  });\n}\n\nif (document.readyState !== 'loading') {\n  // DOMContentLoaded event were already fired. Perform explicit initialization now\n  initDropdown();\n} else {\n  // DOMContentLoaded event not yet fired, attach initialization process to it\n  document.addEventListener('DOMContentLoaded', initDropdown);\n}\n\n/* harmony default export */ const dropdown = (Dropdown);\n;// CONCATENATED MODULE: ./src/components/modal.js\nfunction modal_toConsumableArray(arr) { return modal_arrayWithoutHoles(arr) || modal_iterableToArray(arr) || modal_unsupportedIterableToArray(arr) || modal_nonIterableSpread(); }\n\nfunction modal_nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction modal_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return modal_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return modal_arrayLikeToArray(o, minLen); }\n\nfunction modal_iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction modal_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return modal_arrayLikeToArray(arr); }\n\nfunction modal_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction modal_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction modal_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? modal_ownKeys(Object(source), !0).forEach(function (key) { modal_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : modal_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction modal_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction modal_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction modal_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction modal_createClass(Constructor, protoProps, staticProps) { if (protoProps) modal_defineProperties(Constructor.prototype, protoProps); if (staticProps) modal_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nvar modal_Default = {\n  placement: 'center',\n  backdropClasses: 'bg-gray-900 bg-opacity-50 dark:bg-opacity-80 fixed inset-0 z-40',\n  onHide: function onHide() {},\n  onShow: function onShow() {},\n  onToggle: function onToggle() {}\n};\n\nvar Modal = /*#__PURE__*/function () {\n  function Modal() {\n    var targetEl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    modal_classCallCheck(this, Modal);\n\n    this._targetEl = targetEl;\n    this._options = modal_objectSpread(modal_objectSpread({}, modal_Default), options);\n    this._isHidden = true;\n\n    this._init();\n  }\n\n  modal_createClass(Modal, [{\n    key: \"_init\",\n    value: function _init() {\n      var _this = this;\n\n      this._getPlacementClasses().map(function (c) {\n        _this._targetEl.classList.add(c);\n      });\n    }\n  }, {\n    key: \"_createBackdrop\",\n    value: function _createBackdrop() {\n      if (this._isHidden) {\n        var _backdropEl$classList;\n\n        var backdropEl = document.createElement('div');\n        backdropEl.setAttribute('modal-backdrop', '');\n\n        (_backdropEl$classList = backdropEl.classList).add.apply(_backdropEl$classList, modal_toConsumableArray(this._options.backdropClasses.split(\" \")));\n\n        document.querySelector('body').append(backdropEl);\n      }\n    }\n  }, {\n    key: \"_destroyBackdropEl\",\n    value: function _destroyBackdropEl() {\n      if (!this._isHidden) {\n        document.querySelector('[modal-backdrop]').remove();\n      }\n    }\n  }, {\n    key: \"_getPlacementClasses\",\n    value: function _getPlacementClasses() {\n      switch (this._options.placement) {\n        // top\n        case 'top-left':\n          return ['justify-start', 'items-start'];\n\n        case 'top-center':\n          return ['justify-center', 'items-start'];\n\n        case 'top-right':\n          return ['justify-end', 'items-start'];\n        // center\n\n        case 'center-left':\n          return ['justify-start', 'items-center'];\n\n        case 'center':\n          return ['justify-center', 'items-center'];\n\n        case 'center-right':\n          return ['justify-end', 'items-center'];\n        // bottom\n\n        case 'bottom-left':\n          return ['justify-start', 'items-end'];\n\n        case 'bottom-center':\n          return ['justify-center', 'items-end'];\n\n        case 'bottom-right':\n          return ['justify-end', 'items-end'];\n\n        default:\n          return ['justify-center', 'items-center'];\n      }\n    }\n  }, {\n    key: \"toggle\",\n    value: function toggle() {\n      if (this._isHidden) {\n        this.show();\n      } else {\n        this.hide();\n      } // callback function\n\n\n      this._options.onToggle(this);\n    }\n  }, {\n    key: \"show\",\n    value: function show() {\n      this._targetEl.classList.add('flex');\n\n      this._targetEl.classList.remove('hidden');\n\n      this._targetEl.setAttribute('aria-modal', 'true');\n\n      this._targetEl.setAttribute('role', 'dialog');\n\n      this._targetEl.removeAttribute('aria-hidden');\n\n      this._createBackdrop();\n\n      this._isHidden = false; // callback function\n\n      this._options.onShow(this);\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this._targetEl.classList.add('hidden');\n\n      this._targetEl.classList.remove('flex');\n\n      this._targetEl.setAttribute('aria-hidden', 'true');\n\n      this._targetEl.removeAttribute('aria-modal');\n\n      this._targetEl.removeAttribute('role');\n\n      this._destroyBackdropEl();\n\n      this._isHidden = true; // callback function\n\n      this._options.onHide(this);\n    }\n  }]);\n\n  return Modal;\n}();\n\nwindow.Modal = Modal;\n\nvar getModalInstance = function getModalInstance(id, instances) {\n  if (instances.some(function (modalInstance) {\n    return modalInstance.id === id;\n  })) {\n    return instances.find(function (modalInstance) {\n      return modalInstance.id === id;\n    });\n  }\n\n  return false;\n};\n\nfunction initModal() {\n  var modalInstances = [];\n  document.querySelectorAll('[data-modal-toggle]').forEach(function (el) {\n    var modalId = el.getAttribute('data-modal-toggle');\n    var modalEl = document.getElementById(modalId);\n    var placement = modalEl.getAttribute('data-modal-placement');\n\n    if (modalEl) {\n      if (!modalEl.hasAttribute('aria-hidden') && !modalEl.hasAttribute('aria-modal')) {\n        modalEl.setAttribute('aria-hidden', 'true');\n      }\n    }\n\n    var modal = null;\n\n    if (getModalInstance(modalId, modalInstances)) {\n      modal = getModalInstance(modalId, modalInstances);\n      modal = modal.object;\n    } else {\n      modal = new Modal(modalEl, {\n        placement: placement ? placement : modal_Default.placement\n      });\n      modalInstances.push({\n        id: modalId,\n        object: modal\n      });\n    }\n\n    if (modalEl.hasAttribute('data-modal-show') && modalEl.getAttribute('data-modal-show') === 'true') {\n      modal.show();\n    }\n\n    el.addEventListener('click', function () {\n      modal.toggle();\n    });\n  });\n}\n\nif (document.readyState !== 'loading') {\n  // DOMContentLoaded event were already fired. Perform explicit initialization now\n  initModal();\n} else {\n  // DOMContentLoaded event not yet fired, attach initialization process to it\n  document.addEventListener('DOMContentLoaded', initModal);\n}\n\n/* harmony default export */ const modal = (Modal);\n;// CONCATENATED MODULE: ./src/components/drawer.js\nfunction drawer_toConsumableArray(arr) { return drawer_arrayWithoutHoles(arr) || drawer_iterableToArray(arr) || drawer_unsupportedIterableToArray(arr) || drawer_nonIterableSpread(); }\n\nfunction drawer_nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction drawer_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return drawer_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return drawer_arrayLikeToArray(o, minLen); }\n\nfunction drawer_iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction drawer_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return drawer_arrayLikeToArray(arr); }\n\nfunction drawer_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction drawer_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction drawer_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? drawer_ownKeys(Object(source), !0).forEach(function (key) { drawer_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : drawer_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction drawer_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction drawer_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction drawer_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction drawer_createClass(Constructor, protoProps, staticProps) { if (protoProps) drawer_defineProperties(Constructor.prototype, protoProps); if (staticProps) drawer_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nvar drawer_Default = {\n  placement: 'left',\n  bodyScrolling: false,\n  backdrop: true,\n  edge: false,\n  edgeOffset: 'bottom-[60px]',\n  backdropClasses: 'bg-gray-900 bg-opacity-50 dark:bg-opacity-80 fixed inset-0 z-30',\n  onShow: function onShow() {},\n  onHide: function onHide() {},\n  onToggle: function onToggle() {}\n};\n\nvar Drawer = /*#__PURE__*/function () {\n  function Drawer() {\n    var targetEl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n    var options = arguments.length > 1 ? arguments[1] : undefined;\n\n    drawer_classCallCheck(this, Drawer);\n\n    this._targetEl = targetEl;\n    this._options = drawer_objectSpread(drawer_objectSpread({}, drawer_Default), options);\n    this._visible = false;\n\n    this._init();\n  }\n\n  drawer_createClass(Drawer, [{\n    key: \"_init\",\n    value: function _init() {\n      var _this = this;\n\n      // set initial accessibility attributes\n      if (this._targetEl) {\n        this._targetEl.setAttribute('aria-hidden', 'true');\n\n        this._targetEl.classList.add('transition-transform');\n      } // set base placement classes\n\n\n      this._getPlacementClasses(this._options.placement).base.map(function (c) {\n        _this._targetEl.classList.add(c);\n      }); // hide by default\n\n\n      this.hide();\n    }\n  }, {\n    key: \"isVisible\",\n    value: function isVisible() {\n      return this._visible;\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      var _this2 = this;\n\n      // based on the edge option show placement classes\n      if (this._options.edge) {\n        this._getPlacementClasses(this._options.placement + '-edge').active.map(function (c) {\n          _this2._targetEl.classList.remove(c);\n        });\n\n        this._getPlacementClasses(this._options.placement + '-edge').inactive.map(function (c) {\n          _this2._targetEl.classList.add(c);\n        });\n      } else {\n        this._getPlacementClasses(this._options.placement).active.map(function (c) {\n          _this2._targetEl.classList.remove(c);\n        });\n\n        this._getPlacementClasses(this._options.placement).inactive.map(function (c) {\n          _this2._targetEl.classList.add(c);\n        });\n      } // set accessibility attributes\n\n\n      this._targetEl.setAttribute('aria-hidden', 'true');\n\n      this._targetEl.removeAttribute('aria-modal');\n\n      this._targetEl.removeAttribute('role'); // enable body scroll\n\n\n      if (!this._options.bodyScrolling) {\n        document.body.classList.remove('overflow-hidden');\n      } // destroy backdrop\n\n\n      if (this._options.backdrop) {\n        this._destroyBackdropEl();\n      }\n\n      this._visible = false; // callback function\n\n      this._options.onHide(this);\n    }\n  }, {\n    key: \"show\",\n    value: function show() {\n      var _this3 = this;\n\n      if (this._options.edge) {\n        this._getPlacementClasses(this._options.placement + '-edge').active.map(function (c) {\n          _this3._targetEl.classList.add(c);\n        });\n\n        this._getPlacementClasses(this._options.placement + '-edge').inactive.map(function (c) {\n          _this3._targetEl.classList.remove(c);\n        });\n      } else {\n        this._getPlacementClasses(this._options.placement).active.map(function (c) {\n          _this3._targetEl.classList.add(c);\n        });\n\n        this._getPlacementClasses(this._options.placement).inactive.map(function (c) {\n          _this3._targetEl.classList.remove(c);\n        });\n      } // set accessibility attributes\n\n\n      this._targetEl.setAttribute('aria-modal', 'true');\n\n      this._targetEl.setAttribute('role', 'dialog');\n\n      this._targetEl.removeAttribute('aria-hidden'); // disable body scroll\n\n\n      if (!this._options.bodyScrolling) {\n        document.body.classList.add('overflow-hidden');\n      } // show backdrop\n\n\n      if (this._options.backdrop) {\n        this._createBackdrop();\n      }\n\n      this._visible = true; // callback function\n\n      this._options.onShow(this);\n    }\n  }, {\n    key: \"toggle\",\n    value: function toggle() {\n      if (this.isVisible()) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    }\n  }, {\n    key: \"_createBackdrop\",\n    value: function _createBackdrop() {\n      var _this4 = this;\n\n      if (!this._visible) {\n        var _backdropEl$classList;\n\n        var backdropEl = document.createElement('div');\n        backdropEl.setAttribute('drawer-backdrop', '');\n\n        (_backdropEl$classList = backdropEl.classList).add.apply(_backdropEl$classList, drawer_toConsumableArray(this._options.backdropClasses.split(\" \")));\n\n        document.querySelector('body').append(backdropEl);\n        backdropEl.addEventListener('click', function () {\n          _this4.hide();\n        });\n      }\n    }\n  }, {\n    key: \"_destroyBackdropEl\",\n    value: function _destroyBackdropEl() {\n      if (this._visible) {\n        document.querySelector('[drawer-backdrop]').remove();\n      }\n    }\n  }, {\n    key: \"_getPlacementClasses\",\n    value: function _getPlacementClasses(placement) {\n      switch (placement) {\n        case 'top':\n          return {\n            base: ['top-0', 'left-0', 'right-0'],\n            active: ['transform-none'],\n            inactive: ['-translate-y-full']\n          };\n\n        case 'right':\n          return {\n            base: ['right-0', 'top-0'],\n            active: ['transform-none'],\n            inactive: ['translate-x-full']\n          };\n\n        case 'bottom':\n          return {\n            base: ['bottom-0', 'left-0', 'right-0'],\n            active: ['transform-none'],\n            inactive: ['translate-y-full']\n          };\n\n        case 'left':\n          return {\n            base: ['left-0', 'top-0'],\n            active: ['transform-none'],\n            inactive: ['-translate-x-full']\n          };\n\n        case 'bottom-edge':\n          return {\n            base: ['left-0', 'top-0'],\n            active: ['transform-none'],\n            inactive: ['translate-y-full', this._options.edgeOffset]\n          };\n\n        default:\n          return {\n            base: ['left-0', 'top-0'],\n            active: ['transform-none'],\n            inactive: ['-translate-x-full']\n          };\n      }\n    }\n  }]);\n\n  return Drawer;\n}();\n\nwindow.Drawer = Drawer;\n\nvar getDrawerInstance = function getDrawerInstance(id, instances) {\n  if (instances.some(function (drawerInstance) {\n    return drawerInstance.id === id;\n  })) {\n    return instances.find(function (drawerInstance) {\n      return drawerInstance.id === id;\n    });\n  }\n\n  return false;\n};\n\nfunction initDrawer() {\n  var drawerInstances = [];\n  document.querySelectorAll('[data-drawer-target]').forEach(function (triggerEl) {\n    // mandatory\n    var targetEl = document.getElementById(triggerEl.getAttribute('data-drawer-target'));\n    var drawerId = targetEl.id; // optional\n\n    var placement = triggerEl.getAttribute('data-drawer-placement');\n    var bodyScrolling = triggerEl.getAttribute('data-drawer-body-scrolling');\n    var backdrop = triggerEl.getAttribute('data-drawer-backdrop');\n    var edge = triggerEl.getAttribute('data-drawer-edge');\n    var edgeOffset = triggerEl.getAttribute('data-drawer-edge-offset');\n    var drawer = null;\n\n    if (getDrawerInstance(drawerId, drawerInstances)) {\n      drawer = getDrawerInstance(drawerId, drawerInstances);\n      drawer = drawer.object;\n    } else {\n      drawer = new Drawer(targetEl, {\n        placement: placement ? placement : drawer_Default.placement,\n        bodyScrolling: bodyScrolling ? bodyScrolling === 'true' ? true : false : drawer_Default.bodyScrolling,\n        backdrop: backdrop ? backdrop === 'true' ? true : false : drawer_Default.backdrop,\n        edge: edge ? edge === 'true' ? true : false : drawer_Default.edge,\n        edgeOffset: edgeOffset ? edgeOffset : drawer_Default.edgeOffset\n      });\n      drawerInstances.push({\n        id: drawerId,\n        object: drawer\n      });\n    }\n  });\n  document.querySelectorAll('[data-drawer-toggle]').forEach(function (triggerEl) {\n    var targetEl = document.getElementById(triggerEl.getAttribute('data-drawer-toggle'));\n    var drawerId = targetEl.id;\n    var drawer = getDrawerInstance(drawerId, drawerInstances);\n    triggerEl.addEventListener('click', function () {\n      if (drawer.object.isVisible()) {\n        drawer.object.hide();\n      } else {\n        drawer.object.show();\n      }\n    });\n  });\n  document.querySelectorAll('[data-drawer-dismiss]').forEach(function (triggerEl) {\n    var targetEl = document.getElementById(triggerEl.getAttribute('data-drawer-dismiss'));\n    var drawerId = targetEl.id;\n    var drawer = getDrawerInstance(drawerId, drawerInstances);\n    triggerEl.addEventListener('click', function () {\n      drawer.object.hide();\n    });\n  });\n  document.querySelectorAll('[data-drawer-show]').forEach(function (triggerEl) {\n    var targetEl = document.getElementById(triggerEl.getAttribute('data-drawer-show'));\n    var drawerId = targetEl.id;\n    var drawer = getDrawerInstance(drawerId, drawerInstances);\n    triggerEl.addEventListener('click', function () {\n      drawer.object.show();\n    });\n  });\n}\n\nif (document.readyState !== 'loading') {\n  // DOMContentLoaded event were already fired. Perform explicit initialization now\n  initDrawer();\n} else {\n  // DOMContentLoaded event not yet fired, attach initialization process to it\n  document.addEventListener('DOMContentLoaded', initDrawer);\n}\n\n/* harmony default export */ const drawer = (Drawer);\n;// CONCATENATED MODULE: ./src/components/tabs.js\nfunction tabs_toConsumableArray(arr) { return tabs_arrayWithoutHoles(arr) || tabs_iterableToArray(arr) || tabs_unsupportedIterableToArray(arr) || tabs_nonIterableSpread(); }\n\nfunction tabs_nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction tabs_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return tabs_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return tabs_arrayLikeToArray(o, minLen); }\n\nfunction tabs_iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction tabs_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return tabs_arrayLikeToArray(arr); }\n\nfunction tabs_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction tabs_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction tabs_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? tabs_ownKeys(Object(source), !0).forEach(function (key) { tabs_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : tabs_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction tabs_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction tabs_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction tabs_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction tabs_createClass(Constructor, protoProps, staticProps) { if (protoProps) tabs_defineProperties(Constructor.prototype, protoProps); if (staticProps) tabs_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nvar tabs_Default = {\n  defaultTabId: null,\n  activeClasses: 'text-blue-600 hover:text-blue-600 dark:text-blue-500 dark:hover:text-blue-500 border-blue-600 dark:border-blue-500',\n  inactiveClasses: 'dark:border-transparent text-gray-500 hover:text-gray-600 dark:text-gray-400 border-gray-100 hover:border-gray-300 dark:border-gray-700 dark:hover:text-gray-300',\n  onShow: function onShow() {}\n};\n\nvar Tabs = /*#__PURE__*/function () {\n  function Tabs() {\n    var items = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    tabs_classCallCheck(this, Tabs);\n\n    this._items = items;\n    this._activeTab = options ? this.getTab(options.defaultTabId) : null;\n    this._options = tabs_objectSpread(tabs_objectSpread({}, tabs_Default), options);\n\n    this._init();\n  }\n\n  tabs_createClass(Tabs, [{\n    key: \"_init\",\n    value: function _init() {\n      var _this = this;\n\n      if (this._items.length) {\n        // set the first tab as active if not set by explicitly\n        if (!this._activeTab) {\n          this._setActiveTab(this._items[0]);\n        } // force show the first default tab\n\n\n        this.show(this._activeTab.id, true); // show tab content based on click\n\n        this._items.map(function (tab) {\n          tab.triggerEl.addEventListener('click', function () {\n            _this.show(tab.id);\n          });\n        });\n      }\n    }\n  }, {\n    key: \"getActiveTab\",\n    value: function getActiveTab() {\n      return this._activeTab;\n    }\n  }, {\n    key: \"_setActiveTab\",\n    value: function _setActiveTab(tab) {\n      this._activeTab = tab;\n    }\n  }, {\n    key: \"getTab\",\n    value: function getTab(id) {\n      return this._items.filter(function (t) {\n        return t.id === id;\n      })[0];\n    }\n  }, {\n    key: \"show\",\n    value: function show(id) {\n      var _this2 = this,\n          _tab$triggerEl$classL,\n          _tab$triggerEl$classL2;\n\n      var forceShow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      var tab = this.getTab(id); // don't do anything if already active\n\n      if (tab === this._activeTab && !forceShow) {\n        return;\n      } // hide other tabs\n\n\n      this._items.map(function (t) {\n        if (t !== tab) {\n          var _t$triggerEl$classLis, _t$triggerEl$classLis2;\n\n          (_t$triggerEl$classLis = t.triggerEl.classList).remove.apply(_t$triggerEl$classLis, tabs_toConsumableArray(_this2._options.activeClasses.split(\" \")));\n\n          (_t$triggerEl$classLis2 = t.triggerEl.classList).add.apply(_t$triggerEl$classLis2, tabs_toConsumableArray(_this2._options.inactiveClasses.split(\" \")));\n\n          t.targetEl.classList.add('hidden');\n          t.triggerEl.setAttribute('aria-selected', false);\n        }\n      }); // show active tab\n\n\n      (_tab$triggerEl$classL = tab.triggerEl.classList).add.apply(_tab$triggerEl$classL, tabs_toConsumableArray(this._options.activeClasses.split(\" \")));\n\n      (_tab$triggerEl$classL2 = tab.triggerEl.classList).remove.apply(_tab$triggerEl$classL2, tabs_toConsumableArray(this._options.inactiveClasses.split(\" \")));\n\n      tab.triggerEl.setAttribute('aria-selected', true);\n      tab.targetEl.classList.remove('hidden');\n\n      this._setActiveTab(tab); // callback function\n\n\n      this._options.onShow(this, tab);\n    }\n  }]);\n\n  return Tabs;\n}();\n\nwindow.Tabs = Tabs;\n\nfunction initTabs() {\n  document.querySelectorAll('[data-tabs-toggle]').forEach(function (triggerEl) {\n    var tabElements = [];\n    var defaultTabId = null;\n    triggerEl.querySelectorAll('[role=\"tab\"]').forEach(function (el) {\n      var isActive = el.getAttribute('aria-selected') === 'true';\n      var tab = {\n        id: el.getAttribute('data-tabs-target'),\n        triggerEl: el,\n        targetEl: document.querySelector(el.getAttribute('data-tabs-target'))\n      };\n      tabElements.push(tab);\n\n      if (isActive) {\n        defaultTabId = tab.id;\n      }\n    });\n    new Tabs(tabElements, {\n      defaultTabId: defaultTabId\n    });\n  });\n}\n\nif (document.readyState !== 'loading') {\n  // DOMContentLoaded event were already fired. Perform explicit initialization now\n  initTabs();\n} else {\n  // DOMContentLoaded event not yet fired, attach initialization process to it\n  document.addEventListener('DOMContentLoaded', initTabs);\n}\n\n/* harmony default export */ const tabs = (Tabs);\n;// CONCATENATED MODULE: ./src/components/tooltip.js\nfunction tooltip_toConsumableArray(arr) { return tooltip_arrayWithoutHoles(arr) || tooltip_iterableToArray(arr) || tooltip_unsupportedIterableToArray(arr) || tooltip_nonIterableSpread(); }\n\nfunction tooltip_nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction tooltip_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return tooltip_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return tooltip_arrayLikeToArray(o, minLen); }\n\nfunction tooltip_iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction tooltip_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return tooltip_arrayLikeToArray(arr); }\n\nfunction tooltip_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction tooltip_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction tooltip_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? tooltip_ownKeys(Object(source), !0).forEach(function (key) { tooltip_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : tooltip_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction tooltip_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction tooltip_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction tooltip_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction tooltip_createClass(Constructor, protoProps, staticProps) { if (protoProps) tooltip_defineProperties(Constructor.prototype, protoProps); if (staticProps) tooltip_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\n\nvar tooltip_Default = {\n  placement: 'top',\n  triggerType: 'hover',\n  onShow: function onShow() {},\n  onHide: function onHide() {}\n};\n\nvar Tooltip = /*#__PURE__*/function () {\n  function Tooltip() {\n    var targetEl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n    var triggerEl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n    tooltip_classCallCheck(this, Tooltip);\n\n    this._targetEl = targetEl;\n    this._triggerEl = triggerEl;\n    this._options = tooltip_objectSpread(tooltip_objectSpread({}, tooltip_Default), options);\n    this._popperInstance = this._createPopperInstace();\n\n    this._init();\n  }\n\n  tooltip_createClass(Tooltip, [{\n    key: \"_init\",\n    value: function _init() {\n      var _this = this;\n\n      if (this._triggerEl) {\n        var triggerEvents = this._getTriggerEvents();\n\n        triggerEvents.showEvents.forEach(function (ev) {\n          _this._triggerEl.addEventListener(ev, function () {\n            _this.show();\n          });\n        });\n        triggerEvents.hideEvents.forEach(function (ev) {\n          _this._triggerEl.addEventListener(ev, function () {\n            _this.hide();\n          });\n        });\n      }\n    }\n  }, {\n    key: \"_createPopperInstace\",\n    value: function _createPopperInstace() {\n      return popper_createPopper(this._triggerEl, this._targetEl, {\n        placement: this._options.placement,\n        modifiers: [{\n          name: 'offset',\n          options: {\n            offset: [0, 8]\n          }\n        }]\n      });\n    }\n  }, {\n    key: \"_getTriggerEvents\",\n    value: function _getTriggerEvents() {\n      switch (this._options.triggerType) {\n        case 'hover':\n          return {\n            showEvents: ['mouseenter', 'focus'],\n            hideEvents: ['mouseleave', 'blur']\n          };\n\n        case 'click':\n          return {\n            showEvents: ['click', 'focus'],\n            hideEvents: ['focusout', 'blur']\n          };\n\n        default:\n          return {\n            showEvents: ['mouseenter', 'focus'],\n            hideEvents: ['mouseleave', 'blur']\n          };\n      }\n    }\n  }, {\n    key: \"show\",\n    value: function show() {\n      this._targetEl.classList.remove('opacity-0', 'invisible');\n\n      this._targetEl.classList.add('opacity-100', 'visible'); // Enable the event listeners\n\n\n      this._popperInstance.setOptions(function (options) {\n        return tooltip_objectSpread(tooltip_objectSpread({}, options), {}, {\n          modifiers: [].concat(tooltip_toConsumableArray(options.modifiers), [{\n            name: 'eventListeners',\n            enabled: true\n          }])\n        });\n      }); // Update its position\n\n\n      this._popperInstance.update(); // callback function\n\n\n      this._options.onShow(this);\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this._targetEl.classList.remove('opacity-100', 'visible');\n\n      this._targetEl.classList.add('opacity-0', 'invisible'); // Disable the event listeners\n\n\n      this._popperInstance.setOptions(function (options) {\n        return tooltip_objectSpread(tooltip_objectSpread({}, options), {}, {\n          modifiers: [].concat(tooltip_toConsumableArray(options.modifiers), [{\n            name: 'eventListeners',\n            enabled: false\n          }])\n        });\n      }); // callback function\n\n\n      this._options.onHide(this);\n    }\n  }]);\n\n  return Tooltip;\n}();\n\nwindow.Tooltip = Tooltip;\n\nfunction initTooltip() {\n  document.querySelectorAll('[data-tooltip-target]').forEach(function (triggerEl) {\n    var targetEl = document.getElementById(triggerEl.getAttribute('data-tooltip-target'));\n    var triggerType = triggerEl.getAttribute('data-tooltip-trigger');\n    var placement = triggerEl.getAttribute('data-tooltip-placement');\n    new Tooltip(targetEl, triggerEl, {\n      placement: placement ? placement : tooltip_Default.placement,\n      triggerType: triggerType ? triggerType : tooltip_Default.triggerType\n    });\n  });\n}\n\nif (document.readyState !== 'loading') {\n  // DOMContentLoaded event were already fired. Perform explicit initialization now\n  initTooltip();\n} else {\n  // DOMContentLoaded event not yet fired, attach initialization process to it\n  document.addEventListener('DOMContentLoaded', initTooltip);\n}\n\n/* harmony default export */ const tooltip = (Tooltip);\n;// CONCATENATED MODULE: ./src/components/popover.js\nfunction popover_toConsumableArray(arr) { return popover_arrayWithoutHoles(arr) || popover_iterableToArray(arr) || popover_unsupportedIterableToArray(arr) || popover_nonIterableSpread(); }\n\nfunction popover_nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction popover_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return popover_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return popover_arrayLikeToArray(o, minLen); }\n\nfunction popover_iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction popover_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return popover_arrayLikeToArray(arr); }\n\nfunction popover_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction popover_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction popover_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? popover_ownKeys(Object(source), !0).forEach(function (key) { popover_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : popover_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction popover_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction popover_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction popover_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction popover_createClass(Constructor, protoProps, staticProps) { if (protoProps) popover_defineProperties(Constructor.prototype, protoProps); if (staticProps) popover_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\n\nvar popover_Default = {\n  placement: 'top',\n  offset: 10,\n  triggerType: 'hover',\n  onShow: function onShow() {},\n  onHide: function onHide() {}\n};\n\nvar Popover = /*#__PURE__*/function () {\n  function Popover() {\n    var targetEl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n    var triggerEl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n    popover_classCallCheck(this, Popover);\n\n    this._targetEl = targetEl;\n    this._triggerEl = triggerEl;\n    this._options = popover_objectSpread(popover_objectSpread({}, popover_Default), options);\n    this._popperInstance = this._createPopperInstace();\n\n    this._init();\n  }\n\n  popover_createClass(Popover, [{\n    key: \"_init\",\n    value: function _init() {\n      var _this = this;\n\n      if (this._triggerEl) {\n        var triggerEvents = this._getTriggerEvents();\n\n        triggerEvents.showEvents.forEach(function (ev) {\n          _this._triggerEl.addEventListener(ev, function () {\n            _this.show();\n          });\n\n          _this._targetEl.addEventListener(ev, function () {\n            _this.show();\n          });\n        });\n        triggerEvents.hideEvents.forEach(function (ev) {\n          _this._triggerEl.addEventListener(ev, function () {\n            setTimeout(function () {\n              if (!_this._targetEl.matches(':hover')) {\n                _this.hide();\n              }\n            }, 100);\n          });\n\n          _this._targetEl.addEventListener(ev, function () {\n            setTimeout(function () {\n              if (!_this._triggerEl.matches(':hover')) {\n                _this.hide();\n              }\n            }, 100);\n          });\n        });\n      }\n    }\n  }, {\n    key: \"_createPopperInstace\",\n    value: function _createPopperInstace() {\n      return popper_createPopper(this._triggerEl, this._targetEl, {\n        placement: this._options.placement,\n        modifiers: [{\n          name: 'offset',\n          options: {\n            offset: [0, this._options.offset]\n          }\n        }]\n      });\n    }\n  }, {\n    key: \"_getTriggerEvents\",\n    value: function _getTriggerEvents() {\n      switch (this._options.triggerType) {\n        case 'hover':\n          return {\n            showEvents: ['mouseenter', 'focus'],\n            hideEvents: ['mouseleave', 'blur']\n          };\n\n        case 'click':\n          return {\n            showEvents: ['click', 'focus'],\n            hideEvents: ['focusout', 'blur']\n          };\n\n        default:\n          return {\n            showEvents: ['mouseenter', 'focus'],\n            hideEvents: ['mouseleave', 'blur']\n          };\n      }\n    }\n  }, {\n    key: \"show\",\n    value: function show() {\n      this._targetEl.classList.remove('opacity-0', 'invisible');\n\n      this._targetEl.classList.add('opacity-100', 'visible'); // Enable the event listeners\n\n\n      this._popperInstance.setOptions(function (options) {\n        return popover_objectSpread(popover_objectSpread({}, options), {}, {\n          modifiers: [].concat(popover_toConsumableArray(options.modifiers), [{\n            name: 'eventListeners',\n            enabled: true\n          }])\n        });\n      }); // Update its position\n\n\n      this._popperInstance.update(); // callback function\n\n\n      this._options.onShow(this);\n    }\n  }, {\n    key: \"hide\",\n    value: function hide() {\n      this._targetEl.classList.remove('opacity-100', 'visible');\n\n      this._targetEl.classList.add('opacity-0', 'invisible'); // Disable the event listeners\n\n\n      this._popperInstance.setOptions(function (options) {\n        return popover_objectSpread(popover_objectSpread({}, options), {}, {\n          modifiers: [].concat(popover_toConsumableArray(options.modifiers), [{\n            name: 'eventListeners',\n            enabled: false\n          }])\n        });\n      }); // callback function\n\n\n      this._options.onHide(this);\n    }\n  }]);\n\n  return Popover;\n}();\n\nwindow.Popover = Popover;\n\nfunction initPopover() {\n  document.querySelectorAll('[data-popover-target]').forEach(function (triggerEl) {\n    var targetEl = document.getElementById(triggerEl.getAttribute('data-popover-target'));\n    var triggerType = triggerEl.getAttribute('data-popover-trigger');\n    var placement = triggerEl.getAttribute('data-popover-placement');\n    var offset = triggerEl.getAttribute('data-popover-offset');\n    new Popover(targetEl, triggerEl, {\n      placement: placement ? placement : popover_Default.placement,\n      offset: offset ? parseInt(offset) : popover_Default.offset,\n      triggerType: triggerType ? triggerType : popover_Default.triggerType\n    });\n  });\n}\n\nif (document.readyState !== 'loading') {\n  // DOMContentLoaded event were already fired. Perform explicit initialization now\n  initPopover();\n} else {\n  // DOMContentLoaded event not yet fired, attach initialization process to it\n  document.addEventListener('DOMContentLoaded', initPopover);\n}\n\n/* harmony default export */ const popover = (Popover);\n;// CONCATENATED MODULE: ./src/flowbite.js\n // core components\n\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ const flowbite = ({\n  Accordion: accordion,\n  Collapse: collapse,\n  Carousel: carousel,\n  Dismiss: dismiss,\n  Dropdown: dropdown,\n  Modal: modal,\n  Drawer: drawer,\n  Tabs: tabs,\n  Tooltip: tooltip,\n  Popover: popover\n});\n/******/ })()\n;\n//# sourceMappingURL=flowbite.js.map","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/*\nTurbo 7.2.0\nCopyright © 2022 37signals LLC\n */\n(function () {\n    if (window.Reflect === undefined ||\n        window.customElements === undefined ||\n        window.customElements.polyfillWrapFlushCallback) {\n        return;\n    }\n    const BuiltInHTMLElement = HTMLElement;\n    const wrapperForTheName = {\n        HTMLElement: function HTMLElement() {\n            return Reflect.construct(BuiltInHTMLElement, [], this.constructor);\n        },\n    };\n    window.HTMLElement = wrapperForTheName[\"HTMLElement\"];\n    HTMLElement.prototype = BuiltInHTMLElement.prototype;\n    HTMLElement.prototype.constructor = HTMLElement;\n    Object.setPrototypeOf(HTMLElement, BuiltInHTMLElement);\n})();\n\n/**\n * The MIT License (MIT)\n * \n * Copyright (c) 2019 Javan Makhmali\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n(function(prototype) {\n  if (typeof prototype.requestSubmit == \"function\") return\n\n  prototype.requestSubmit = function(submitter) {\n    if (submitter) {\n      validateSubmitter(submitter, this);\n      submitter.click();\n    } else {\n      submitter = document.createElement(\"input\");\n      submitter.type = \"submit\";\n      submitter.hidden = true;\n      this.appendChild(submitter);\n      submitter.click();\n      this.removeChild(submitter);\n    }\n  };\n\n  function validateSubmitter(submitter, form) {\n    submitter instanceof HTMLElement || raise(TypeError, \"parameter 1 is not of type 'HTMLElement'\");\n    submitter.type == \"submit\" || raise(TypeError, \"The specified element is not a submit button\");\n    submitter.form == form || raise(DOMException, \"The specified element is not owned by this form element\", \"NotFoundError\");\n  }\n\n  function raise(errorConstructor, message, name) {\n    throw new errorConstructor(\"Failed to execute 'requestSubmit' on 'HTMLFormElement': \" + message + \".\", name)\n  }\n})(HTMLFormElement.prototype);\n\nconst submittersByForm = new WeakMap();\nfunction findSubmitterFromClickTarget(target) {\n    const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n    const candidate = element ? element.closest(\"input, button\") : null;\n    return (candidate === null || candidate === void 0 ? void 0 : candidate.type) == \"submit\" ? candidate : null;\n}\nfunction clickCaptured(event) {\n    const submitter = findSubmitterFromClickTarget(event.target);\n    if (submitter && submitter.form) {\n        submittersByForm.set(submitter.form, submitter);\n    }\n}\n(function () {\n    if (\"submitter\" in Event.prototype)\n        return;\n    let prototype;\n    if (\"SubmitEvent\" in window && /Apple Computer/.test(navigator.vendor)) {\n        prototype = window.SubmitEvent.prototype;\n    }\n    else if (\"SubmitEvent\" in window) {\n        return;\n    }\n    else {\n        prototype = window.Event.prototype;\n    }\n    addEventListener(\"click\", clickCaptured, true);\n    Object.defineProperty(prototype, \"submitter\", {\n        get() {\n            if (this.type == \"submit\" && this.target instanceof HTMLFormElement) {\n                return submittersByForm.get(this.target);\n            }\n        },\n    });\n})();\n\nvar FrameLoadingStyle;\n(function (FrameLoadingStyle) {\n    FrameLoadingStyle[\"eager\"] = \"eager\";\n    FrameLoadingStyle[\"lazy\"] = \"lazy\";\n})(FrameLoadingStyle || (FrameLoadingStyle = {}));\nclass FrameElement extends HTMLElement {\n    constructor() {\n        super();\n        this.loaded = Promise.resolve();\n        this.delegate = new FrameElement.delegateConstructor(this);\n    }\n    static get observedAttributes() {\n        return [\"disabled\", \"complete\", \"loading\", \"src\"];\n    }\n    connectedCallback() {\n        this.delegate.connect();\n    }\n    disconnectedCallback() {\n        this.delegate.disconnect();\n    }\n    reload() {\n        const { src } = this;\n        this.removeAttribute(\"complete\");\n        this.src = null;\n        this.src = src;\n        return this.loaded;\n    }\n    attributeChangedCallback(name) {\n        if (name == \"loading\") {\n            this.delegate.loadingStyleChanged();\n        }\n        else if (name == \"complete\") {\n            this.delegate.completeChanged();\n        }\n        else if (name == \"src\") {\n            this.delegate.sourceURLChanged();\n        }\n        else {\n            this.delegate.disabledChanged();\n        }\n    }\n    get src() {\n        return this.getAttribute(\"src\");\n    }\n    set src(value) {\n        if (value) {\n            this.setAttribute(\"src\", value);\n        }\n        else {\n            this.removeAttribute(\"src\");\n        }\n    }\n    get loading() {\n        return frameLoadingStyleFromString(this.getAttribute(\"loading\") || \"\");\n    }\n    set loading(value) {\n        if (value) {\n            this.setAttribute(\"loading\", value);\n        }\n        else {\n            this.removeAttribute(\"loading\");\n        }\n    }\n    get disabled() {\n        return this.hasAttribute(\"disabled\");\n    }\n    set disabled(value) {\n        if (value) {\n            this.setAttribute(\"disabled\", \"\");\n        }\n        else {\n            this.removeAttribute(\"disabled\");\n        }\n    }\n    get autoscroll() {\n        return this.hasAttribute(\"autoscroll\");\n    }\n    set autoscroll(value) {\n        if (value) {\n            this.setAttribute(\"autoscroll\", \"\");\n        }\n        else {\n            this.removeAttribute(\"autoscroll\");\n        }\n    }\n    get complete() {\n        return !this.delegate.isLoading;\n    }\n    get isActive() {\n        return this.ownerDocument === document && !this.isPreview;\n    }\n    get isPreview() {\n        var _a, _b;\n        return (_b = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.documentElement) === null || _b === void 0 ? void 0 : _b.hasAttribute(\"data-turbo-preview\");\n    }\n}\nfunction frameLoadingStyleFromString(style) {\n    switch (style.toLowerCase()) {\n        case \"lazy\":\n            return FrameLoadingStyle.lazy;\n        default:\n            return FrameLoadingStyle.eager;\n    }\n}\n\nfunction expandURL(locatable) {\n    return new URL(locatable.toString(), document.baseURI);\n}\nfunction getAnchor(url) {\n    let anchorMatch;\n    if (url.hash) {\n        return url.hash.slice(1);\n    }\n    else if ((anchorMatch = url.href.match(/#(.*)$/))) {\n        return anchorMatch[1];\n    }\n}\nfunction getAction(form, submitter) {\n    const action = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formaction\")) || form.getAttribute(\"action\") || form.action;\n    return expandURL(action);\n}\nfunction getExtension(url) {\n    return (getLastPathComponent(url).match(/\\.[^.]*$/) || [])[0] || \"\";\n}\nfunction isHTML(url) {\n    return !!getExtension(url).match(/^(?:|\\.(?:htm|html|xhtml|php))$/);\n}\nfunction isPrefixedBy(baseURL, url) {\n    const prefix = getPrefix(url);\n    return baseURL.href === expandURL(prefix).href || baseURL.href.startsWith(prefix);\n}\nfunction locationIsVisitable(location, rootLocation) {\n    return isPrefixedBy(location, rootLocation) && isHTML(location);\n}\nfunction getRequestURL(url) {\n    const anchor = getAnchor(url);\n    return anchor != null ? url.href.slice(0, -(anchor.length + 1)) : url.href;\n}\nfunction toCacheKey(url) {\n    return getRequestURL(url);\n}\nfunction urlsAreEqual(left, right) {\n    return expandURL(left).href == expandURL(right).href;\n}\nfunction getPathComponents(url) {\n    return url.pathname.split(\"/\").slice(1);\n}\nfunction getLastPathComponent(url) {\n    return getPathComponents(url).slice(-1)[0];\n}\nfunction getPrefix(url) {\n    return addTrailingSlash(url.origin + url.pathname);\n}\nfunction addTrailingSlash(value) {\n    return value.endsWith(\"/\") ? value : value + \"/\";\n}\n\nclass FetchResponse {\n    constructor(response) {\n        this.response = response;\n    }\n    get succeeded() {\n        return this.response.ok;\n    }\n    get failed() {\n        return !this.succeeded;\n    }\n    get clientError() {\n        return this.statusCode >= 400 && this.statusCode <= 499;\n    }\n    get serverError() {\n        return this.statusCode >= 500 && this.statusCode <= 599;\n    }\n    get redirected() {\n        return this.response.redirected;\n    }\n    get location() {\n        return expandURL(this.response.url);\n    }\n    get isHTML() {\n        return this.contentType && this.contentType.match(/^(?:text\\/([^\\s;,]+\\b)?html|application\\/xhtml\\+xml)\\b/);\n    }\n    get statusCode() {\n        return this.response.status;\n    }\n    get contentType() {\n        return this.header(\"Content-Type\");\n    }\n    get responseText() {\n        return this.response.clone().text();\n    }\n    get responseHTML() {\n        if (this.isHTML) {\n            return this.response.clone().text();\n        }\n        else {\n            return Promise.resolve(undefined);\n        }\n    }\n    header(name) {\n        return this.response.headers.get(name);\n    }\n}\n\nfunction isAction(action) {\n    return action == \"advance\" || action == \"replace\" || action == \"restore\";\n}\n\nfunction activateScriptElement(element) {\n    if (element.getAttribute(\"data-turbo-eval\") == \"false\") {\n        return element;\n    }\n    else {\n        const createdScriptElement = document.createElement(\"script\");\n        const cspNonce = getMetaContent(\"csp-nonce\");\n        if (cspNonce) {\n            createdScriptElement.nonce = cspNonce;\n        }\n        createdScriptElement.textContent = element.textContent;\n        createdScriptElement.async = false;\n        copyElementAttributes(createdScriptElement, element);\n        return createdScriptElement;\n    }\n}\nfunction copyElementAttributes(destinationElement, sourceElement) {\n    for (const { name, value } of sourceElement.attributes) {\n        destinationElement.setAttribute(name, value);\n    }\n}\nfunction createDocumentFragment(html) {\n    const template = document.createElement(\"template\");\n    template.innerHTML = html;\n    return template.content;\n}\nfunction dispatch(eventName, { target, cancelable, detail } = {}) {\n    const event = new CustomEvent(eventName, {\n        cancelable,\n        bubbles: true,\n        detail,\n    });\n    if (target && target.isConnected) {\n        target.dispatchEvent(event);\n    }\n    else {\n        document.documentElement.dispatchEvent(event);\n    }\n    return event;\n}\nfunction nextAnimationFrame() {\n    return new Promise((resolve) => requestAnimationFrame(() => resolve()));\n}\nfunction nextEventLoopTick() {\n    return new Promise((resolve) => setTimeout(() => resolve(), 0));\n}\nfunction nextMicrotask() {\n    return Promise.resolve();\n}\nfunction parseHTMLDocument(html = \"\") {\n    return new DOMParser().parseFromString(html, \"text/html\");\n}\nfunction unindent(strings, ...values) {\n    const lines = interpolate(strings, values).replace(/^\\n/, \"\").split(\"\\n\");\n    const match = lines[0].match(/^\\s+/);\n    const indent = match ? match[0].length : 0;\n    return lines.map((line) => line.slice(indent)).join(\"\\n\");\n}\nfunction interpolate(strings, values) {\n    return strings.reduce((result, string, i) => {\n        const value = values[i] == undefined ? \"\" : values[i];\n        return result + string + value;\n    }, \"\");\n}\nfunction uuid() {\n    return Array.from({ length: 36 })\n        .map((_, i) => {\n        if (i == 8 || i == 13 || i == 18 || i == 23) {\n            return \"-\";\n        }\n        else if (i == 14) {\n            return \"4\";\n        }\n        else if (i == 19) {\n            return (Math.floor(Math.random() * 4) + 8).toString(16);\n        }\n        else {\n            return Math.floor(Math.random() * 15).toString(16);\n        }\n    })\n        .join(\"\");\n}\nfunction getAttribute(attributeName, ...elements) {\n    for (const value of elements.map((element) => element === null || element === void 0 ? void 0 : element.getAttribute(attributeName))) {\n        if (typeof value == \"string\")\n            return value;\n    }\n    return null;\n}\nfunction hasAttribute(attributeName, ...elements) {\n    return elements.some((element) => element && element.hasAttribute(attributeName));\n}\nfunction markAsBusy(...elements) {\n    for (const element of elements) {\n        if (element.localName == \"turbo-frame\") {\n            element.setAttribute(\"busy\", \"\");\n        }\n        element.setAttribute(\"aria-busy\", \"true\");\n    }\n}\nfunction clearBusyState(...elements) {\n    for (const element of elements) {\n        if (element.localName == \"turbo-frame\") {\n            element.removeAttribute(\"busy\");\n        }\n        element.removeAttribute(\"aria-busy\");\n    }\n}\nfunction waitForLoad(element, timeoutInMilliseconds = 2000) {\n    return new Promise((resolve) => {\n        const onComplete = () => {\n            element.removeEventListener(\"error\", onComplete);\n            element.removeEventListener(\"load\", onComplete);\n            resolve();\n        };\n        element.addEventListener(\"load\", onComplete, { once: true });\n        element.addEventListener(\"error\", onComplete, { once: true });\n        setTimeout(resolve, timeoutInMilliseconds);\n    });\n}\nfunction getHistoryMethodForAction(action) {\n    switch (action) {\n        case \"replace\":\n            return history.replaceState;\n        case \"advance\":\n        case \"restore\":\n            return history.pushState;\n    }\n}\nfunction getVisitAction(...elements) {\n    const action = getAttribute(\"data-turbo-action\", ...elements);\n    return isAction(action) ? action : null;\n}\nfunction getMetaElement(name) {\n    return document.querySelector(`meta[name=\"${name}\"]`);\n}\nfunction getMetaContent(name) {\n    const element = getMetaElement(name);\n    return element && element.content;\n}\nfunction setMetaContent(name, content) {\n    let element = getMetaElement(name);\n    if (!element) {\n        element = document.createElement(\"meta\");\n        element.setAttribute(\"name\", name);\n        document.head.appendChild(element);\n    }\n    element.setAttribute(\"content\", content);\n    return element;\n}\n\nvar FetchMethod;\n(function (FetchMethod) {\n    FetchMethod[FetchMethod[\"get\"] = 0] = \"get\";\n    FetchMethod[FetchMethod[\"post\"] = 1] = \"post\";\n    FetchMethod[FetchMethod[\"put\"] = 2] = \"put\";\n    FetchMethod[FetchMethod[\"patch\"] = 3] = \"patch\";\n    FetchMethod[FetchMethod[\"delete\"] = 4] = \"delete\";\n})(FetchMethod || (FetchMethod = {}));\nfunction fetchMethodFromString(method) {\n    switch (method.toLowerCase()) {\n        case \"get\":\n            return FetchMethod.get;\n        case \"post\":\n            return FetchMethod.post;\n        case \"put\":\n            return FetchMethod.put;\n        case \"patch\":\n            return FetchMethod.patch;\n        case \"delete\":\n            return FetchMethod.delete;\n    }\n}\nclass FetchRequest {\n    constructor(delegate, method, location, body = new URLSearchParams(), target = null) {\n        this.abortController = new AbortController();\n        this.resolveRequestPromise = (_value) => { };\n        this.delegate = delegate;\n        this.method = method;\n        this.headers = this.defaultHeaders;\n        this.body = body;\n        this.url = location;\n        this.target = target;\n    }\n    get location() {\n        return this.url;\n    }\n    get params() {\n        return this.url.searchParams;\n    }\n    get entries() {\n        return this.body ? Array.from(this.body.entries()) : [];\n    }\n    cancel() {\n        this.abortController.abort();\n    }\n    async perform() {\n        var _a, _b;\n        const { fetchOptions } = this;\n        (_b = (_a = this.delegate).prepareHeadersForRequest) === null || _b === void 0 ? void 0 : _b.call(_a, this.headers, this);\n        await this.allowRequestToBeIntercepted(fetchOptions);\n        try {\n            this.delegate.requestStarted(this);\n            const response = await fetch(this.url.href, fetchOptions);\n            return await this.receive(response);\n        }\n        catch (error) {\n            if (error.name !== \"AbortError\") {\n                if (this.willDelegateErrorHandling(error)) {\n                    this.delegate.requestErrored(this, error);\n                }\n                throw error;\n            }\n        }\n        finally {\n            this.delegate.requestFinished(this);\n        }\n    }\n    async receive(response) {\n        const fetchResponse = new FetchResponse(response);\n        const event = dispatch(\"turbo:before-fetch-response\", {\n            cancelable: true,\n            detail: { fetchResponse },\n            target: this.target,\n        });\n        if (event.defaultPrevented) {\n            this.delegate.requestPreventedHandlingResponse(this, fetchResponse);\n        }\n        else if (fetchResponse.succeeded) {\n            this.delegate.requestSucceededWithResponse(this, fetchResponse);\n        }\n        else {\n            this.delegate.requestFailedWithResponse(this, fetchResponse);\n        }\n        return fetchResponse;\n    }\n    get fetchOptions() {\n        var _a;\n        return {\n            method: FetchMethod[this.method].toUpperCase(),\n            credentials: \"same-origin\",\n            headers: this.headers,\n            redirect: \"follow\",\n            body: this.isIdempotent ? null : this.body,\n            signal: this.abortSignal,\n            referrer: (_a = this.delegate.referrer) === null || _a === void 0 ? void 0 : _a.href,\n        };\n    }\n    get defaultHeaders() {\n        return {\n            Accept: \"text/html, application/xhtml+xml\",\n        };\n    }\n    get isIdempotent() {\n        return this.method == FetchMethod.get;\n    }\n    get abortSignal() {\n        return this.abortController.signal;\n    }\n    acceptResponseType(mimeType) {\n        this.headers[\"Accept\"] = [mimeType, this.headers[\"Accept\"]].join(\", \");\n    }\n    async allowRequestToBeIntercepted(fetchOptions) {\n        const requestInterception = new Promise((resolve) => (this.resolveRequestPromise = resolve));\n        const event = dispatch(\"turbo:before-fetch-request\", {\n            cancelable: true,\n            detail: {\n                fetchOptions,\n                url: this.url,\n                resume: this.resolveRequestPromise,\n            },\n            target: this.target,\n        });\n        if (event.defaultPrevented)\n            await requestInterception;\n    }\n    willDelegateErrorHandling(error) {\n        const event = dispatch(\"turbo:fetch-request-error\", {\n            target: this.target,\n            cancelable: true,\n            detail: { request: this, error: error },\n        });\n        return !event.defaultPrevented;\n    }\n}\n\nclass AppearanceObserver {\n    constructor(delegate, element) {\n        this.started = false;\n        this.intersect = (entries) => {\n            const lastEntry = entries.slice(-1)[0];\n            if (lastEntry === null || lastEntry === void 0 ? void 0 : lastEntry.isIntersecting) {\n                this.delegate.elementAppearedInViewport(this.element);\n            }\n        };\n        this.delegate = delegate;\n        this.element = element;\n        this.intersectionObserver = new IntersectionObserver(this.intersect);\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.intersectionObserver.observe(this.element);\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            this.intersectionObserver.unobserve(this.element);\n        }\n    }\n}\n\nclass StreamMessage {\n    constructor(fragment) {\n        this.fragment = importStreamElements(fragment);\n    }\n    static wrap(message) {\n        if (typeof message == \"string\") {\n            return new this(createDocumentFragment(message));\n        }\n        else {\n            return message;\n        }\n    }\n}\nStreamMessage.contentType = \"text/vnd.turbo-stream.html\";\nfunction importStreamElements(fragment) {\n    for (const element of fragment.querySelectorAll(\"turbo-stream\")) {\n        const streamElement = document.importNode(element, true);\n        for (const inertScriptElement of streamElement.templateElement.content.querySelectorAll(\"script\")) {\n            inertScriptElement.replaceWith(activateScriptElement(inertScriptElement));\n        }\n        element.replaceWith(streamElement);\n    }\n    return fragment;\n}\n\nvar FormSubmissionState;\n(function (FormSubmissionState) {\n    FormSubmissionState[FormSubmissionState[\"initialized\"] = 0] = \"initialized\";\n    FormSubmissionState[FormSubmissionState[\"requesting\"] = 1] = \"requesting\";\n    FormSubmissionState[FormSubmissionState[\"waiting\"] = 2] = \"waiting\";\n    FormSubmissionState[FormSubmissionState[\"receiving\"] = 3] = \"receiving\";\n    FormSubmissionState[FormSubmissionState[\"stopping\"] = 4] = \"stopping\";\n    FormSubmissionState[FormSubmissionState[\"stopped\"] = 5] = \"stopped\";\n})(FormSubmissionState || (FormSubmissionState = {}));\nvar FormEnctype;\n(function (FormEnctype) {\n    FormEnctype[\"urlEncoded\"] = \"application/x-www-form-urlencoded\";\n    FormEnctype[\"multipart\"] = \"multipart/form-data\";\n    FormEnctype[\"plain\"] = \"text/plain\";\n})(FormEnctype || (FormEnctype = {}));\nfunction formEnctypeFromString(encoding) {\n    switch (encoding.toLowerCase()) {\n        case FormEnctype.multipart:\n            return FormEnctype.multipart;\n        case FormEnctype.plain:\n            return FormEnctype.plain;\n        default:\n            return FormEnctype.urlEncoded;\n    }\n}\nclass FormSubmission {\n    constructor(delegate, formElement, submitter, mustRedirect = false) {\n        this.state = FormSubmissionState.initialized;\n        this.delegate = delegate;\n        this.formElement = formElement;\n        this.submitter = submitter;\n        this.formData = buildFormData(formElement, submitter);\n        this.location = expandURL(this.action);\n        if (this.method == FetchMethod.get) {\n            mergeFormDataEntries(this.location, [...this.body.entries()]);\n        }\n        this.fetchRequest = new FetchRequest(this, this.method, this.location, this.body, this.formElement);\n        this.mustRedirect = mustRedirect;\n    }\n    static confirmMethod(message, _element, _submitter) {\n        return Promise.resolve(confirm(message));\n    }\n    get method() {\n        var _a;\n        const method = ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"formmethod\")) || this.formElement.getAttribute(\"method\") || \"\";\n        return fetchMethodFromString(method.toLowerCase()) || FetchMethod.get;\n    }\n    get action() {\n        var _a;\n        const formElementAction = typeof this.formElement.action === \"string\" ? this.formElement.action : null;\n        if ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.hasAttribute(\"formaction\")) {\n            return this.submitter.getAttribute(\"formaction\") || \"\";\n        }\n        else {\n            return this.formElement.getAttribute(\"action\") || formElementAction || \"\";\n        }\n    }\n    get body() {\n        if (this.enctype == FormEnctype.urlEncoded || this.method == FetchMethod.get) {\n            return new URLSearchParams(this.stringFormData);\n        }\n        else {\n            return this.formData;\n        }\n    }\n    get enctype() {\n        var _a;\n        return formEnctypeFromString(((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"formenctype\")) || this.formElement.enctype);\n    }\n    get isIdempotent() {\n        return this.fetchRequest.isIdempotent;\n    }\n    get stringFormData() {\n        return [...this.formData].reduce((entries, [name, value]) => {\n            return entries.concat(typeof value == \"string\" ? [[name, value]] : []);\n        }, []);\n    }\n    async start() {\n        const { initialized, requesting } = FormSubmissionState;\n        const confirmationMessage = getAttribute(\"data-turbo-confirm\", this.submitter, this.formElement);\n        if (typeof confirmationMessage === \"string\") {\n            const answer = await FormSubmission.confirmMethod(confirmationMessage, this.formElement, this.submitter);\n            if (!answer) {\n                return;\n            }\n        }\n        if (this.state == initialized) {\n            this.state = requesting;\n            return this.fetchRequest.perform();\n        }\n    }\n    stop() {\n        const { stopping, stopped } = FormSubmissionState;\n        if (this.state != stopping && this.state != stopped) {\n            this.state = stopping;\n            this.fetchRequest.cancel();\n            return true;\n        }\n    }\n    prepareHeadersForRequest(headers, request) {\n        if (!request.isIdempotent) {\n            const token = getCookieValue(getMetaContent(\"csrf-param\")) || getMetaContent(\"csrf-token\");\n            if (token) {\n                headers[\"X-CSRF-Token\"] = token;\n            }\n        }\n        if (this.requestAcceptsTurboStreamResponse(request)) {\n            request.acceptResponseType(StreamMessage.contentType);\n        }\n    }\n    requestStarted(_request) {\n        var _a;\n        this.state = FormSubmissionState.waiting;\n        (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.setAttribute(\"disabled\", \"\");\n        dispatch(\"turbo:submit-start\", {\n            target: this.formElement,\n            detail: { formSubmission: this },\n        });\n        this.delegate.formSubmissionStarted(this);\n    }\n    requestPreventedHandlingResponse(request, response) {\n        this.result = { success: response.succeeded, fetchResponse: response };\n    }\n    requestSucceededWithResponse(request, response) {\n        if (response.clientError || response.serverError) {\n            this.delegate.formSubmissionFailedWithResponse(this, response);\n        }\n        else if (this.requestMustRedirect(request) && responseSucceededWithoutRedirect(response)) {\n            const error = new Error(\"Form responses must redirect to another location\");\n            this.delegate.formSubmissionErrored(this, error);\n        }\n        else {\n            this.state = FormSubmissionState.receiving;\n            this.result = { success: true, fetchResponse: response };\n            this.delegate.formSubmissionSucceededWithResponse(this, response);\n        }\n    }\n    requestFailedWithResponse(request, response) {\n        this.result = { success: false, fetchResponse: response };\n        this.delegate.formSubmissionFailedWithResponse(this, response);\n    }\n    requestErrored(request, error) {\n        this.result = { success: false, error };\n        this.delegate.formSubmissionErrored(this, error);\n    }\n    requestFinished(_request) {\n        var _a;\n        this.state = FormSubmissionState.stopped;\n        (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.removeAttribute(\"disabled\");\n        dispatch(\"turbo:submit-end\", {\n            target: this.formElement,\n            detail: Object.assign({ formSubmission: this }, this.result),\n        });\n        this.delegate.formSubmissionFinished(this);\n    }\n    requestMustRedirect(request) {\n        return !request.isIdempotent && this.mustRedirect;\n    }\n    requestAcceptsTurboStreamResponse(request) {\n        return !request.isIdempotent || hasAttribute(\"data-turbo-stream\", this.submitter, this.formElement);\n    }\n}\nfunction buildFormData(formElement, submitter) {\n    const formData = new FormData(formElement);\n    const name = submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"name\");\n    const value = submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"value\");\n    if (name) {\n        formData.append(name, value || \"\");\n    }\n    return formData;\n}\nfunction getCookieValue(cookieName) {\n    if (cookieName != null) {\n        const cookies = document.cookie ? document.cookie.split(\"; \") : [];\n        const cookie = cookies.find((cookie) => cookie.startsWith(cookieName));\n        if (cookie) {\n            const value = cookie.split(\"=\").slice(1).join(\"=\");\n            return value ? decodeURIComponent(value) : undefined;\n        }\n    }\n}\nfunction responseSucceededWithoutRedirect(response) {\n    return response.statusCode == 200 && !response.redirected;\n}\nfunction mergeFormDataEntries(url, entries) {\n    const searchParams = new URLSearchParams();\n    for (const [name, value] of entries) {\n        if (value instanceof File)\n            continue;\n        searchParams.append(name, value);\n    }\n    url.search = searchParams.toString();\n    return url;\n}\n\nclass Snapshot {\n    constructor(element) {\n        this.element = element;\n    }\n    get activeElement() {\n        return this.element.ownerDocument.activeElement;\n    }\n    get children() {\n        return [...this.element.children];\n    }\n    hasAnchor(anchor) {\n        return this.getElementForAnchor(anchor) != null;\n    }\n    getElementForAnchor(anchor) {\n        return anchor ? this.element.querySelector(`[id='${anchor}'], a[name='${anchor}']`) : null;\n    }\n    get isConnected() {\n        return this.element.isConnected;\n    }\n    get firstAutofocusableElement() {\n        const inertDisabledOrHidden = \"[inert], :disabled, [hidden], details:not([open]), dialog:not([open])\";\n        for (const element of this.element.querySelectorAll(\"[autofocus]\")) {\n            if (element.closest(inertDisabledOrHidden) == null)\n                return element;\n            else\n                continue;\n        }\n        return null;\n    }\n    get permanentElements() {\n        return queryPermanentElementsAll(this.element);\n    }\n    getPermanentElementById(id) {\n        return getPermanentElementById(this.element, id);\n    }\n    getPermanentElementMapForSnapshot(snapshot) {\n        const permanentElementMap = {};\n        for (const currentPermanentElement of this.permanentElements) {\n            const { id } = currentPermanentElement;\n            const newPermanentElement = snapshot.getPermanentElementById(id);\n            if (newPermanentElement) {\n                permanentElementMap[id] = [currentPermanentElement, newPermanentElement];\n            }\n        }\n        return permanentElementMap;\n    }\n}\nfunction getPermanentElementById(node, id) {\n    return node.querySelector(`#${id}[data-turbo-permanent]`);\n}\nfunction queryPermanentElementsAll(node) {\n    return node.querySelectorAll(\"[id][data-turbo-permanent]\");\n}\n\nclass FormSubmitObserver {\n    constructor(delegate, eventTarget) {\n        this.started = false;\n        this.submitCaptured = () => {\n            this.eventTarget.removeEventListener(\"submit\", this.submitBubbled, false);\n            this.eventTarget.addEventListener(\"submit\", this.submitBubbled, false);\n        };\n        this.submitBubbled = ((event) => {\n            if (!event.defaultPrevented) {\n                const form = event.target instanceof HTMLFormElement ? event.target : undefined;\n                const submitter = event.submitter || undefined;\n                if (form &&\n                    submissionDoesNotDismissDialog(form, submitter) &&\n                    submissionDoesNotTargetIFrame(form, submitter) &&\n                    this.delegate.willSubmitForm(form, submitter)) {\n                    event.preventDefault();\n                    this.delegate.formSubmitted(form, submitter);\n                }\n            }\n        });\n        this.delegate = delegate;\n        this.eventTarget = eventTarget;\n    }\n    start() {\n        if (!this.started) {\n            this.eventTarget.addEventListener(\"submit\", this.submitCaptured, true);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.eventTarget.removeEventListener(\"submit\", this.submitCaptured, true);\n            this.started = false;\n        }\n    }\n}\nfunction submissionDoesNotDismissDialog(form, submitter) {\n    const method = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formmethod\")) || form.getAttribute(\"method\");\n    return method != \"dialog\";\n}\nfunction submissionDoesNotTargetIFrame(form, submitter) {\n    const target = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formtarget\")) || form.target;\n    for (const element of document.getElementsByName(target)) {\n        if (element instanceof HTMLIFrameElement)\n            return false;\n    }\n    return true;\n}\n\nclass View {\n    constructor(delegate, element) {\n        this.resolveRenderPromise = (_value) => { };\n        this.resolveInterceptionPromise = (_value) => { };\n        this.delegate = delegate;\n        this.element = element;\n    }\n    scrollToAnchor(anchor) {\n        const element = this.snapshot.getElementForAnchor(anchor);\n        if (element) {\n            this.scrollToElement(element);\n            this.focusElement(element);\n        }\n        else {\n            this.scrollToPosition({ x: 0, y: 0 });\n        }\n    }\n    scrollToAnchorFromLocation(location) {\n        this.scrollToAnchor(getAnchor(location));\n    }\n    scrollToElement(element) {\n        element.scrollIntoView();\n    }\n    focusElement(element) {\n        if (element instanceof HTMLElement) {\n            if (element.hasAttribute(\"tabindex\")) {\n                element.focus();\n            }\n            else {\n                element.setAttribute(\"tabindex\", \"-1\");\n                element.focus();\n                element.removeAttribute(\"tabindex\");\n            }\n        }\n    }\n    scrollToPosition({ x, y }) {\n        this.scrollRoot.scrollTo(x, y);\n    }\n    scrollToTop() {\n        this.scrollToPosition({ x: 0, y: 0 });\n    }\n    get scrollRoot() {\n        return window;\n    }\n    async render(renderer) {\n        const { isPreview, shouldRender, newSnapshot: snapshot } = renderer;\n        if (shouldRender) {\n            try {\n                this.renderPromise = new Promise((resolve) => (this.resolveRenderPromise = resolve));\n                this.renderer = renderer;\n                await this.prepareToRenderSnapshot(renderer);\n                const renderInterception = new Promise((resolve) => (this.resolveInterceptionPromise = resolve));\n                const options = { resume: this.resolveInterceptionPromise, render: this.renderer.renderElement };\n                const immediateRender = this.delegate.allowsImmediateRender(snapshot, options);\n                if (!immediateRender)\n                    await renderInterception;\n                await this.renderSnapshot(renderer);\n                this.delegate.viewRenderedSnapshot(snapshot, isPreview);\n                this.delegate.preloadOnLoadLinksForView(this.element);\n                this.finishRenderingSnapshot(renderer);\n            }\n            finally {\n                delete this.renderer;\n                this.resolveRenderPromise(undefined);\n                delete this.renderPromise;\n            }\n        }\n        else {\n            this.invalidate(renderer.reloadReason);\n        }\n    }\n    invalidate(reason) {\n        this.delegate.viewInvalidated(reason);\n    }\n    async prepareToRenderSnapshot(renderer) {\n        this.markAsPreview(renderer.isPreview);\n        await renderer.prepareToRender();\n    }\n    markAsPreview(isPreview) {\n        if (isPreview) {\n            this.element.setAttribute(\"data-turbo-preview\", \"\");\n        }\n        else {\n            this.element.removeAttribute(\"data-turbo-preview\");\n        }\n    }\n    async renderSnapshot(renderer) {\n        await renderer.render();\n    }\n    finishRenderingSnapshot(renderer) {\n        renderer.finishRendering();\n    }\n}\n\nclass FrameView extends View {\n    invalidate() {\n        this.element.innerHTML = \"\";\n    }\n    get snapshot() {\n        return new Snapshot(this.element);\n    }\n}\n\nclass LinkClickObserver {\n    constructor(delegate, eventTarget) {\n        this.started = false;\n        this.clickCaptured = () => {\n            this.eventTarget.removeEventListener(\"click\", this.clickBubbled, false);\n            this.eventTarget.addEventListener(\"click\", this.clickBubbled, false);\n        };\n        this.clickBubbled = (event) => {\n            if (event instanceof MouseEvent && this.clickEventIsSignificant(event)) {\n                const target = (event.composedPath && event.composedPath()[0]) || event.target;\n                const link = this.findLinkFromClickTarget(target);\n                if (link && doesNotTargetIFrame(link)) {\n                    const location = this.getLocationForLink(link);\n                    if (this.delegate.willFollowLinkToLocation(link, location, event)) {\n                        event.preventDefault();\n                        this.delegate.followedLinkToLocation(link, location);\n                    }\n                }\n            }\n        };\n        this.delegate = delegate;\n        this.eventTarget = eventTarget;\n    }\n    start() {\n        if (!this.started) {\n            this.eventTarget.addEventListener(\"click\", this.clickCaptured, true);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.eventTarget.removeEventListener(\"click\", this.clickCaptured, true);\n            this.started = false;\n        }\n    }\n    clickEventIsSignificant(event) {\n        return !((event.target && event.target.isContentEditable) ||\n            event.defaultPrevented ||\n            event.which > 1 ||\n            event.altKey ||\n            event.ctrlKey ||\n            event.metaKey ||\n            event.shiftKey);\n    }\n    findLinkFromClickTarget(target) {\n        if (target instanceof Element) {\n            return target.closest(\"a[href]:not([target^=_]):not([download])\");\n        }\n    }\n    getLocationForLink(link) {\n        return expandURL(link.getAttribute(\"href\") || \"\");\n    }\n}\nfunction doesNotTargetIFrame(anchor) {\n    for (const element of document.getElementsByName(anchor.target)) {\n        if (element instanceof HTMLIFrameElement)\n            return false;\n    }\n    return true;\n}\n\nclass FormLinkClickObserver {\n    constructor(delegate, element) {\n        this.delegate = delegate;\n        this.linkClickObserver = new LinkClickObserver(this, element);\n    }\n    start() {\n        this.linkClickObserver.start();\n    }\n    stop() {\n        this.linkClickObserver.stop();\n    }\n    willFollowLinkToLocation(link, location, originalEvent) {\n        return (this.delegate.willSubmitFormLinkToLocation(link, location, originalEvent) &&\n            link.hasAttribute(\"data-turbo-method\"));\n    }\n    followedLinkToLocation(link, location) {\n        const action = location.href;\n        const form = document.createElement(\"form\");\n        form.setAttribute(\"data-turbo\", \"true\");\n        form.setAttribute(\"action\", action);\n        form.setAttribute(\"hidden\", \"\");\n        const method = link.getAttribute(\"data-turbo-method\");\n        if (method)\n            form.setAttribute(\"method\", method);\n        const turboFrame = link.getAttribute(\"data-turbo-frame\");\n        if (turboFrame)\n            form.setAttribute(\"data-turbo-frame\", turboFrame);\n        const turboAction = link.getAttribute(\"data-turbo-action\");\n        if (turboAction)\n            form.setAttribute(\"data-turbo-action\", turboAction);\n        const turboConfirm = link.getAttribute(\"data-turbo-confirm\");\n        if (turboConfirm)\n            form.setAttribute(\"data-turbo-confirm\", turboConfirm);\n        const turboStream = link.hasAttribute(\"data-turbo-stream\");\n        if (turboStream)\n            form.setAttribute(\"data-turbo-stream\", \"\");\n        this.delegate.submittedFormLinkToLocation(link, location, form);\n        document.body.appendChild(form);\n        form.addEventListener(\"turbo:submit-end\", () => form.remove(), { once: true });\n        requestAnimationFrame(() => form.requestSubmit());\n    }\n}\n\nclass Bardo {\n    constructor(delegate, permanentElementMap) {\n        this.delegate = delegate;\n        this.permanentElementMap = permanentElementMap;\n    }\n    static preservingPermanentElements(delegate, permanentElementMap, callback) {\n        const bardo = new this(delegate, permanentElementMap);\n        bardo.enter();\n        callback();\n        bardo.leave();\n    }\n    enter() {\n        for (const id in this.permanentElementMap) {\n            const [currentPermanentElement, newPermanentElement] = this.permanentElementMap[id];\n            this.delegate.enteringBardo(currentPermanentElement, newPermanentElement);\n            this.replaceNewPermanentElementWithPlaceholder(newPermanentElement);\n        }\n    }\n    leave() {\n        for (const id in this.permanentElementMap) {\n            const [currentPermanentElement] = this.permanentElementMap[id];\n            this.replaceCurrentPermanentElementWithClone(currentPermanentElement);\n            this.replacePlaceholderWithPermanentElement(currentPermanentElement);\n            this.delegate.leavingBardo(currentPermanentElement);\n        }\n    }\n    replaceNewPermanentElementWithPlaceholder(permanentElement) {\n        const placeholder = createPlaceholderForPermanentElement(permanentElement);\n        permanentElement.replaceWith(placeholder);\n    }\n    replaceCurrentPermanentElementWithClone(permanentElement) {\n        const clone = permanentElement.cloneNode(true);\n        permanentElement.replaceWith(clone);\n    }\n    replacePlaceholderWithPermanentElement(permanentElement) {\n        const placeholder = this.getPlaceholderById(permanentElement.id);\n        placeholder === null || placeholder === void 0 ? void 0 : placeholder.replaceWith(permanentElement);\n    }\n    getPlaceholderById(id) {\n        return this.placeholders.find((element) => element.content == id);\n    }\n    get placeholders() {\n        return [...document.querySelectorAll(\"meta[name=turbo-permanent-placeholder][content]\")];\n    }\n}\nfunction createPlaceholderForPermanentElement(permanentElement) {\n    const element = document.createElement(\"meta\");\n    element.setAttribute(\"name\", \"turbo-permanent-placeholder\");\n    element.setAttribute(\"content\", permanentElement.id);\n    return element;\n}\n\nclass Renderer {\n    constructor(currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n        this.activeElement = null;\n        this.currentSnapshot = currentSnapshot;\n        this.newSnapshot = newSnapshot;\n        this.isPreview = isPreview;\n        this.willRender = willRender;\n        this.renderElement = renderElement;\n        this.promise = new Promise((resolve, reject) => (this.resolvingFunctions = { resolve, reject }));\n    }\n    get shouldRender() {\n        return true;\n    }\n    get reloadReason() {\n        return;\n    }\n    prepareToRender() {\n        return;\n    }\n    finishRendering() {\n        if (this.resolvingFunctions) {\n            this.resolvingFunctions.resolve();\n            delete this.resolvingFunctions;\n        }\n    }\n    preservingPermanentElements(callback) {\n        Bardo.preservingPermanentElements(this, this.permanentElementMap, callback);\n    }\n    focusFirstAutofocusableElement() {\n        const element = this.connectedSnapshot.firstAutofocusableElement;\n        if (elementIsFocusable(element)) {\n            element.focus();\n        }\n    }\n    enteringBardo(currentPermanentElement) {\n        if (this.activeElement)\n            return;\n        if (currentPermanentElement.contains(this.currentSnapshot.activeElement)) {\n            this.activeElement = this.currentSnapshot.activeElement;\n        }\n    }\n    leavingBardo(currentPermanentElement) {\n        if (currentPermanentElement.contains(this.activeElement) && this.activeElement instanceof HTMLElement) {\n            this.activeElement.focus();\n            this.activeElement = null;\n        }\n    }\n    get connectedSnapshot() {\n        return this.newSnapshot.isConnected ? this.newSnapshot : this.currentSnapshot;\n    }\n    get currentElement() {\n        return this.currentSnapshot.element;\n    }\n    get newElement() {\n        return this.newSnapshot.element;\n    }\n    get permanentElementMap() {\n        return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot);\n    }\n}\nfunction elementIsFocusable(element) {\n    return element && typeof element.focus == \"function\";\n}\n\nclass FrameRenderer extends Renderer {\n    constructor(delegate, currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n        super(currentSnapshot, newSnapshot, renderElement, isPreview, willRender);\n        this.delegate = delegate;\n    }\n    static renderElement(currentElement, newElement) {\n        var _a;\n        const destinationRange = document.createRange();\n        destinationRange.selectNodeContents(currentElement);\n        destinationRange.deleteContents();\n        const frameElement = newElement;\n        const sourceRange = (_a = frameElement.ownerDocument) === null || _a === void 0 ? void 0 : _a.createRange();\n        if (sourceRange) {\n            sourceRange.selectNodeContents(frameElement);\n            currentElement.appendChild(sourceRange.extractContents());\n        }\n    }\n    get shouldRender() {\n        return true;\n    }\n    async render() {\n        await nextAnimationFrame();\n        this.preservingPermanentElements(() => {\n            this.loadFrameElement();\n        });\n        this.scrollFrameIntoView();\n        await nextAnimationFrame();\n        this.focusFirstAutofocusableElement();\n        await nextAnimationFrame();\n        this.activateScriptElements();\n    }\n    loadFrameElement() {\n        this.delegate.willRenderFrame(this.currentElement, this.newElement);\n        this.renderElement(this.currentElement, this.newElement);\n    }\n    scrollFrameIntoView() {\n        if (this.currentElement.autoscroll || this.newElement.autoscroll) {\n            const element = this.currentElement.firstElementChild;\n            const block = readScrollLogicalPosition(this.currentElement.getAttribute(\"data-autoscroll-block\"), \"end\");\n            const behavior = readScrollBehavior(this.currentElement.getAttribute(\"data-autoscroll-behavior\"), \"auto\");\n            if (element) {\n                element.scrollIntoView({ block, behavior });\n                return true;\n            }\n        }\n        return false;\n    }\n    activateScriptElements() {\n        for (const inertScriptElement of this.newScriptElements) {\n            const activatedScriptElement = activateScriptElement(inertScriptElement);\n            inertScriptElement.replaceWith(activatedScriptElement);\n        }\n    }\n    get newScriptElements() {\n        return this.currentElement.querySelectorAll(\"script\");\n    }\n}\nfunction readScrollLogicalPosition(value, defaultValue) {\n    if (value == \"end\" || value == \"start\" || value == \"center\" || value == \"nearest\") {\n        return value;\n    }\n    else {\n        return defaultValue;\n    }\n}\nfunction readScrollBehavior(value, defaultValue) {\n    if (value == \"auto\" || value == \"smooth\") {\n        return value;\n    }\n    else {\n        return defaultValue;\n    }\n}\n\nclass ProgressBar {\n    constructor() {\n        this.hiding = false;\n        this.value = 0;\n        this.visible = false;\n        this.trickle = () => {\n            this.setValue(this.value + Math.random() / 100);\n        };\n        this.stylesheetElement = this.createStylesheetElement();\n        this.progressElement = this.createProgressElement();\n        this.installStylesheetElement();\n        this.setValue(0);\n    }\n    static get defaultCSS() {\n        return unindent `\n      .turbo-progress-bar {\n        position: fixed;\n        display: block;\n        top: 0;\n        left: 0;\n        height: 3px;\n        background: #0076ff;\n        z-index: 2147483647;\n        transition:\n          width ${ProgressBar.animationDuration}ms ease-out,\n          opacity ${ProgressBar.animationDuration / 2}ms ${ProgressBar.animationDuration / 2}ms ease-in;\n        transform: translate3d(0, 0, 0);\n      }\n    `;\n    }\n    show() {\n        if (!this.visible) {\n            this.visible = true;\n            this.installProgressElement();\n            this.startTrickling();\n        }\n    }\n    hide() {\n        if (this.visible && !this.hiding) {\n            this.hiding = true;\n            this.fadeProgressElement(() => {\n                this.uninstallProgressElement();\n                this.stopTrickling();\n                this.visible = false;\n                this.hiding = false;\n            });\n        }\n    }\n    setValue(value) {\n        this.value = value;\n        this.refresh();\n    }\n    installStylesheetElement() {\n        document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n    }\n    installProgressElement() {\n        this.progressElement.style.width = \"0\";\n        this.progressElement.style.opacity = \"1\";\n        document.documentElement.insertBefore(this.progressElement, document.body);\n        this.refresh();\n    }\n    fadeProgressElement(callback) {\n        this.progressElement.style.opacity = \"0\";\n        setTimeout(callback, ProgressBar.animationDuration * 1.5);\n    }\n    uninstallProgressElement() {\n        if (this.progressElement.parentNode) {\n            document.documentElement.removeChild(this.progressElement);\n        }\n    }\n    startTrickling() {\n        if (!this.trickleInterval) {\n            this.trickleInterval = window.setInterval(this.trickle, ProgressBar.animationDuration);\n        }\n    }\n    stopTrickling() {\n        window.clearInterval(this.trickleInterval);\n        delete this.trickleInterval;\n    }\n    refresh() {\n        requestAnimationFrame(() => {\n            this.progressElement.style.width = `${10 + this.value * 90}%`;\n        });\n    }\n    createStylesheetElement() {\n        const element = document.createElement(\"style\");\n        element.type = \"text/css\";\n        element.textContent = ProgressBar.defaultCSS;\n        if (this.cspNonce) {\n            element.nonce = this.cspNonce;\n        }\n        return element;\n    }\n    createProgressElement() {\n        const element = document.createElement(\"div\");\n        element.className = \"turbo-progress-bar\";\n        return element;\n    }\n    get cspNonce() {\n        return getMetaContent(\"csp-nonce\");\n    }\n}\nProgressBar.animationDuration = 300;\n\nclass HeadSnapshot extends Snapshot {\n    constructor() {\n        super(...arguments);\n        this.detailsByOuterHTML = this.children\n            .filter((element) => !elementIsNoscript(element))\n            .map((element) => elementWithoutNonce(element))\n            .reduce((result, element) => {\n            const { outerHTML } = element;\n            const details = outerHTML in result\n                ? result[outerHTML]\n                : {\n                    type: elementType(element),\n                    tracked: elementIsTracked(element),\n                    elements: [],\n                };\n            return Object.assign(Object.assign({}, result), { [outerHTML]: Object.assign(Object.assign({}, details), { elements: [...details.elements, element] }) });\n        }, {});\n    }\n    get trackedElementSignature() {\n        return Object.keys(this.detailsByOuterHTML)\n            .filter((outerHTML) => this.detailsByOuterHTML[outerHTML].tracked)\n            .join(\"\");\n    }\n    getScriptElementsNotInSnapshot(snapshot) {\n        return this.getElementsMatchingTypeNotInSnapshot(\"script\", snapshot);\n    }\n    getStylesheetElementsNotInSnapshot(snapshot) {\n        return this.getElementsMatchingTypeNotInSnapshot(\"stylesheet\", snapshot);\n    }\n    getElementsMatchingTypeNotInSnapshot(matchedType, snapshot) {\n        return Object.keys(this.detailsByOuterHTML)\n            .filter((outerHTML) => !(outerHTML in snapshot.detailsByOuterHTML))\n            .map((outerHTML) => this.detailsByOuterHTML[outerHTML])\n            .filter(({ type }) => type == matchedType)\n            .map(({ elements: [element] }) => element);\n    }\n    get provisionalElements() {\n        return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n            const { type, tracked, elements } = this.detailsByOuterHTML[outerHTML];\n            if (type == null && !tracked) {\n                return [...result, ...elements];\n            }\n            else if (elements.length > 1) {\n                return [...result, ...elements.slice(1)];\n            }\n            else {\n                return result;\n            }\n        }, []);\n    }\n    getMetaValue(name) {\n        const element = this.findMetaElementByName(name);\n        return element ? element.getAttribute(\"content\") : null;\n    }\n    findMetaElementByName(name) {\n        return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n            const { elements: [element], } = this.detailsByOuterHTML[outerHTML];\n            return elementIsMetaElementWithName(element, name) ? element : result;\n        }, undefined);\n    }\n}\nfunction elementType(element) {\n    if (elementIsScript(element)) {\n        return \"script\";\n    }\n    else if (elementIsStylesheet(element)) {\n        return \"stylesheet\";\n    }\n}\nfunction elementIsTracked(element) {\n    return element.getAttribute(\"data-turbo-track\") == \"reload\";\n}\nfunction elementIsScript(element) {\n    const tagName = element.localName;\n    return tagName == \"script\";\n}\nfunction elementIsNoscript(element) {\n    const tagName = element.localName;\n    return tagName == \"noscript\";\n}\nfunction elementIsStylesheet(element) {\n    const tagName = element.localName;\n    return tagName == \"style\" || (tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\");\n}\nfunction elementIsMetaElementWithName(element, name) {\n    const tagName = element.localName;\n    return tagName == \"meta\" && element.getAttribute(\"name\") == name;\n}\nfunction elementWithoutNonce(element) {\n    if (element.hasAttribute(\"nonce\")) {\n        element.setAttribute(\"nonce\", \"\");\n    }\n    return element;\n}\n\nclass PageSnapshot extends Snapshot {\n    constructor(element, headSnapshot) {\n        super(element);\n        this.headSnapshot = headSnapshot;\n    }\n    static fromHTMLString(html = \"\") {\n        return this.fromDocument(parseHTMLDocument(html));\n    }\n    static fromElement(element) {\n        return this.fromDocument(element.ownerDocument);\n    }\n    static fromDocument({ head, body }) {\n        return new this(body, new HeadSnapshot(head));\n    }\n    clone() {\n        const clonedElement = this.element.cloneNode(true);\n        const selectElements = this.element.querySelectorAll(\"select\");\n        const clonedSelectElements = clonedElement.querySelectorAll(\"select\");\n        for (const [index, source] of selectElements.entries()) {\n            const clone = clonedSelectElements[index];\n            for (const option of clone.selectedOptions)\n                option.selected = false;\n            for (const option of source.selectedOptions)\n                clone.options[option.index].selected = true;\n        }\n        for (const clonedPasswordInput of clonedElement.querySelectorAll('input[type=\"password\"]')) {\n            clonedPasswordInput.value = \"\";\n        }\n        return new PageSnapshot(clonedElement, this.headSnapshot);\n    }\n    get headElement() {\n        return this.headSnapshot.element;\n    }\n    get rootLocation() {\n        var _a;\n        const root = (_a = this.getSetting(\"root\")) !== null && _a !== void 0 ? _a : \"/\";\n        return expandURL(root);\n    }\n    get cacheControlValue() {\n        return this.getSetting(\"cache-control\");\n    }\n    get isPreviewable() {\n        return this.cacheControlValue != \"no-preview\";\n    }\n    get isCacheable() {\n        return this.cacheControlValue != \"no-cache\";\n    }\n    get isVisitable() {\n        return this.getSetting(\"visit-control\") != \"reload\";\n    }\n    getSetting(name) {\n        return this.headSnapshot.getMetaValue(`turbo-${name}`);\n    }\n}\n\nvar TimingMetric;\n(function (TimingMetric) {\n    TimingMetric[\"visitStart\"] = \"visitStart\";\n    TimingMetric[\"requestStart\"] = \"requestStart\";\n    TimingMetric[\"requestEnd\"] = \"requestEnd\";\n    TimingMetric[\"visitEnd\"] = \"visitEnd\";\n})(TimingMetric || (TimingMetric = {}));\nvar VisitState;\n(function (VisitState) {\n    VisitState[\"initialized\"] = \"initialized\";\n    VisitState[\"started\"] = \"started\";\n    VisitState[\"canceled\"] = \"canceled\";\n    VisitState[\"failed\"] = \"failed\";\n    VisitState[\"completed\"] = \"completed\";\n})(VisitState || (VisitState = {}));\nconst defaultOptions = {\n    action: \"advance\",\n    historyChanged: false,\n    visitCachedSnapshot: () => { },\n    willRender: true,\n    updateHistory: true,\n    shouldCacheSnapshot: true,\n    acceptsStreamResponse: false,\n};\nvar SystemStatusCode;\n(function (SystemStatusCode) {\n    SystemStatusCode[SystemStatusCode[\"networkFailure\"] = 0] = \"networkFailure\";\n    SystemStatusCode[SystemStatusCode[\"timeoutFailure\"] = -1] = \"timeoutFailure\";\n    SystemStatusCode[SystemStatusCode[\"contentTypeMismatch\"] = -2] = \"contentTypeMismatch\";\n})(SystemStatusCode || (SystemStatusCode = {}));\nclass Visit {\n    constructor(delegate, location, restorationIdentifier, options = {}) {\n        this.identifier = uuid();\n        this.timingMetrics = {};\n        this.followedRedirect = false;\n        this.historyChanged = false;\n        this.scrolled = false;\n        this.shouldCacheSnapshot = true;\n        this.acceptsStreamResponse = false;\n        this.snapshotCached = false;\n        this.state = VisitState.initialized;\n        this.delegate = delegate;\n        this.location = location;\n        this.restorationIdentifier = restorationIdentifier || uuid();\n        const { action, historyChanged, referrer, snapshotHTML, response, visitCachedSnapshot, willRender, updateHistory, shouldCacheSnapshot, acceptsStreamResponse, } = Object.assign(Object.assign({}, defaultOptions), options);\n        this.action = action;\n        this.historyChanged = historyChanged;\n        this.referrer = referrer;\n        this.snapshotHTML = snapshotHTML;\n        this.response = response;\n        this.isSamePage = this.delegate.locationWithActionIsSamePage(this.location, this.action);\n        this.visitCachedSnapshot = visitCachedSnapshot;\n        this.willRender = willRender;\n        this.updateHistory = updateHistory;\n        this.scrolled = !willRender;\n        this.shouldCacheSnapshot = shouldCacheSnapshot;\n        this.acceptsStreamResponse = acceptsStreamResponse;\n    }\n    get adapter() {\n        return this.delegate.adapter;\n    }\n    get view() {\n        return this.delegate.view;\n    }\n    get history() {\n        return this.delegate.history;\n    }\n    get restorationData() {\n        return this.history.getRestorationDataForIdentifier(this.restorationIdentifier);\n    }\n    get silent() {\n        return this.isSamePage;\n    }\n    start() {\n        if (this.state == VisitState.initialized) {\n            this.recordTimingMetric(TimingMetric.visitStart);\n            this.state = VisitState.started;\n            this.adapter.visitStarted(this);\n            this.delegate.visitStarted(this);\n        }\n    }\n    cancel() {\n        if (this.state == VisitState.started) {\n            if (this.request) {\n                this.request.cancel();\n            }\n            this.cancelRender();\n            this.state = VisitState.canceled;\n        }\n    }\n    complete() {\n        if (this.state == VisitState.started) {\n            this.recordTimingMetric(TimingMetric.visitEnd);\n            this.state = VisitState.completed;\n            this.followRedirect();\n            if (!this.followedRedirect) {\n                this.adapter.visitCompleted(this);\n                this.delegate.visitCompleted(this);\n            }\n        }\n    }\n    fail() {\n        if (this.state == VisitState.started) {\n            this.state = VisitState.failed;\n            this.adapter.visitFailed(this);\n        }\n    }\n    changeHistory() {\n        var _a;\n        if (!this.historyChanged && this.updateHistory) {\n            const actionForHistory = this.location.href === ((_a = this.referrer) === null || _a === void 0 ? void 0 : _a.href) ? \"replace\" : this.action;\n            const method = getHistoryMethodForAction(actionForHistory);\n            this.history.update(method, this.location, this.restorationIdentifier);\n            this.historyChanged = true;\n        }\n    }\n    issueRequest() {\n        if (this.hasPreloadedResponse()) {\n            this.simulateRequest();\n        }\n        else if (this.shouldIssueRequest() && !this.request) {\n            this.request = new FetchRequest(this, FetchMethod.get, this.location);\n            this.request.perform();\n        }\n    }\n    simulateRequest() {\n        if (this.response) {\n            this.startRequest();\n            this.recordResponse();\n            this.finishRequest();\n        }\n    }\n    startRequest() {\n        this.recordTimingMetric(TimingMetric.requestStart);\n        this.adapter.visitRequestStarted(this);\n    }\n    recordResponse(response = this.response) {\n        this.response = response;\n        if (response) {\n            const { statusCode } = response;\n            if (isSuccessful(statusCode)) {\n                this.adapter.visitRequestCompleted(this);\n            }\n            else {\n                this.adapter.visitRequestFailedWithStatusCode(this, statusCode);\n            }\n        }\n    }\n    finishRequest() {\n        this.recordTimingMetric(TimingMetric.requestEnd);\n        this.adapter.visitRequestFinished(this);\n    }\n    loadResponse() {\n        if (this.response) {\n            const { statusCode, responseHTML } = this.response;\n            this.render(async () => {\n                if (this.shouldCacheSnapshot)\n                    this.cacheSnapshot();\n                if (this.view.renderPromise)\n                    await this.view.renderPromise;\n                if (isSuccessful(statusCode) && responseHTML != null) {\n                    await this.view.renderPage(PageSnapshot.fromHTMLString(responseHTML), false, this.willRender, this);\n                    this.performScroll();\n                    this.adapter.visitRendered(this);\n                    this.complete();\n                }\n                else {\n                    await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML), this);\n                    this.adapter.visitRendered(this);\n                    this.fail();\n                }\n            });\n        }\n    }\n    getCachedSnapshot() {\n        const snapshot = this.view.getCachedSnapshotForLocation(this.location) || this.getPreloadedSnapshot();\n        if (snapshot && (!getAnchor(this.location) || snapshot.hasAnchor(getAnchor(this.location)))) {\n            if (this.action == \"restore\" || snapshot.isPreviewable) {\n                return snapshot;\n            }\n        }\n    }\n    getPreloadedSnapshot() {\n        if (this.snapshotHTML) {\n            return PageSnapshot.fromHTMLString(this.snapshotHTML);\n        }\n    }\n    hasCachedSnapshot() {\n        return this.getCachedSnapshot() != null;\n    }\n    loadCachedSnapshot() {\n        const snapshot = this.getCachedSnapshot();\n        if (snapshot) {\n            const isPreview = this.shouldIssueRequest();\n            this.render(async () => {\n                this.cacheSnapshot();\n                if (this.isSamePage) {\n                    this.adapter.visitRendered(this);\n                }\n                else {\n                    if (this.view.renderPromise)\n                        await this.view.renderPromise;\n                    await this.view.renderPage(snapshot, isPreview, this.willRender, this);\n                    this.performScroll();\n                    this.adapter.visitRendered(this);\n                    if (!isPreview) {\n                        this.complete();\n                    }\n                }\n            });\n        }\n    }\n    followRedirect() {\n        var _a;\n        if (this.redirectedToLocation && !this.followedRedirect && ((_a = this.response) === null || _a === void 0 ? void 0 : _a.redirected)) {\n            this.adapter.visitProposedToLocation(this.redirectedToLocation, {\n                action: \"replace\",\n                response: this.response,\n            });\n            this.followedRedirect = true;\n        }\n    }\n    goToSamePageAnchor() {\n        if (this.isSamePage) {\n            this.render(async () => {\n                this.cacheSnapshot();\n                this.performScroll();\n                this.adapter.visitRendered(this);\n            });\n        }\n    }\n    prepareHeadersForRequest(headers, request) {\n        if (this.acceptsStreamResponse) {\n            request.acceptResponseType(StreamMessage.contentType);\n        }\n    }\n    requestStarted() {\n        this.startRequest();\n    }\n    requestPreventedHandlingResponse(_request, _response) { }\n    async requestSucceededWithResponse(request, response) {\n        const responseHTML = await response.responseHTML;\n        const { redirected, statusCode } = response;\n        if (responseHTML == undefined) {\n            this.recordResponse({\n                statusCode: SystemStatusCode.contentTypeMismatch,\n                redirected,\n            });\n        }\n        else {\n            this.redirectedToLocation = response.redirected ? response.location : undefined;\n            this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n        }\n    }\n    async requestFailedWithResponse(request, response) {\n        const responseHTML = await response.responseHTML;\n        const { redirected, statusCode } = response;\n        if (responseHTML == undefined) {\n            this.recordResponse({\n                statusCode: SystemStatusCode.contentTypeMismatch,\n                redirected,\n            });\n        }\n        else {\n            this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n        }\n    }\n    requestErrored(_request, _error) {\n        this.recordResponse({\n            statusCode: SystemStatusCode.networkFailure,\n            redirected: false,\n        });\n    }\n    requestFinished() {\n        this.finishRequest();\n    }\n    performScroll() {\n        if (!this.scrolled && !this.view.forceReloaded) {\n            if (this.action == \"restore\") {\n                this.scrollToRestoredPosition() || this.scrollToAnchor() || this.view.scrollToTop();\n            }\n            else {\n                this.scrollToAnchor() || this.view.scrollToTop();\n            }\n            if (this.isSamePage) {\n                this.delegate.visitScrolledToSamePageLocation(this.view.lastRenderedLocation, this.location);\n            }\n            this.scrolled = true;\n        }\n    }\n    scrollToRestoredPosition() {\n        const { scrollPosition } = this.restorationData;\n        if (scrollPosition) {\n            this.view.scrollToPosition(scrollPosition);\n            return true;\n        }\n    }\n    scrollToAnchor() {\n        const anchor = getAnchor(this.location);\n        if (anchor != null) {\n            this.view.scrollToAnchor(anchor);\n            return true;\n        }\n    }\n    recordTimingMetric(metric) {\n        this.timingMetrics[metric] = new Date().getTime();\n    }\n    getTimingMetrics() {\n        return Object.assign({}, this.timingMetrics);\n    }\n    getHistoryMethodForAction(action) {\n        switch (action) {\n            case \"replace\":\n                return history.replaceState;\n            case \"advance\":\n            case \"restore\":\n                return history.pushState;\n        }\n    }\n    hasPreloadedResponse() {\n        return typeof this.response == \"object\";\n    }\n    shouldIssueRequest() {\n        if (this.isSamePage) {\n            return false;\n        }\n        else if (this.action == \"restore\") {\n            return !this.hasCachedSnapshot();\n        }\n        else {\n            return this.willRender;\n        }\n    }\n    cacheSnapshot() {\n        if (!this.snapshotCached) {\n            this.view.cacheSnapshot().then((snapshot) => snapshot && this.visitCachedSnapshot(snapshot));\n            this.snapshotCached = true;\n        }\n    }\n    async render(callback) {\n        this.cancelRender();\n        await new Promise((resolve) => {\n            this.frame = requestAnimationFrame(() => resolve());\n        });\n        await callback();\n        delete this.frame;\n    }\n    cancelRender() {\n        if (this.frame) {\n            cancelAnimationFrame(this.frame);\n            delete this.frame;\n        }\n    }\n}\nfunction isSuccessful(statusCode) {\n    return statusCode >= 200 && statusCode < 300;\n}\n\nclass BrowserAdapter {\n    constructor(session) {\n        this.progressBar = new ProgressBar();\n        this.showProgressBar = () => {\n            this.progressBar.show();\n        };\n        this.session = session;\n    }\n    visitProposedToLocation(location, options) {\n        this.navigator.startVisit(location, (options === null || options === void 0 ? void 0 : options.restorationIdentifier) || uuid(), options);\n    }\n    visitStarted(visit) {\n        this.location = visit.location;\n        visit.loadCachedSnapshot();\n        visit.issueRequest();\n        visit.goToSamePageAnchor();\n    }\n    visitRequestStarted(visit) {\n        this.progressBar.setValue(0);\n        if (visit.hasCachedSnapshot() || visit.action != \"restore\") {\n            this.showVisitProgressBarAfterDelay();\n        }\n        else {\n            this.showProgressBar();\n        }\n    }\n    visitRequestCompleted(visit) {\n        visit.loadResponse();\n    }\n    visitRequestFailedWithStatusCode(visit, statusCode) {\n        switch (statusCode) {\n            case SystemStatusCode.networkFailure:\n            case SystemStatusCode.timeoutFailure:\n            case SystemStatusCode.contentTypeMismatch:\n                return this.reload({\n                    reason: \"request_failed\",\n                    context: {\n                        statusCode,\n                    },\n                });\n            default:\n                return visit.loadResponse();\n        }\n    }\n    visitRequestFinished(_visit) {\n        this.progressBar.setValue(1);\n        this.hideVisitProgressBar();\n    }\n    visitCompleted(_visit) { }\n    pageInvalidated(reason) {\n        this.reload(reason);\n    }\n    visitFailed(_visit) { }\n    visitRendered(_visit) { }\n    formSubmissionStarted(_formSubmission) {\n        this.progressBar.setValue(0);\n        this.showFormProgressBarAfterDelay();\n    }\n    formSubmissionFinished(_formSubmission) {\n        this.progressBar.setValue(1);\n        this.hideFormProgressBar();\n    }\n    showVisitProgressBarAfterDelay() {\n        this.visitProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n    }\n    hideVisitProgressBar() {\n        this.progressBar.hide();\n        if (this.visitProgressBarTimeout != null) {\n            window.clearTimeout(this.visitProgressBarTimeout);\n            delete this.visitProgressBarTimeout;\n        }\n    }\n    showFormProgressBarAfterDelay() {\n        if (this.formProgressBarTimeout == null) {\n            this.formProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n        }\n    }\n    hideFormProgressBar() {\n        this.progressBar.hide();\n        if (this.formProgressBarTimeout != null) {\n            window.clearTimeout(this.formProgressBarTimeout);\n            delete this.formProgressBarTimeout;\n        }\n    }\n    reload(reason) {\n        dispatch(\"turbo:reload\", { detail: reason });\n        if (!this.location)\n            return;\n        window.location.href = this.location.toString();\n    }\n    get navigator() {\n        return this.session.navigator;\n    }\n}\n\nclass CacheObserver {\n    constructor() {\n        this.started = false;\n        this.removeStaleElements = ((_event) => {\n            const staleElements = [...document.querySelectorAll('[data-turbo-cache=\"false\"]')];\n            for (const element of staleElements) {\n                element.remove();\n            }\n        });\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            addEventListener(\"turbo:before-cache\", this.removeStaleElements, false);\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            removeEventListener(\"turbo:before-cache\", this.removeStaleElements, false);\n        }\n    }\n}\n\nclass FrameRedirector {\n    constructor(session, element) {\n        this.session = session;\n        this.element = element;\n        this.linkClickObserver = new LinkClickObserver(this, element);\n        this.formSubmitObserver = new FormSubmitObserver(this, element);\n    }\n    start() {\n        this.linkClickObserver.start();\n        this.formSubmitObserver.start();\n    }\n    stop() {\n        this.linkClickObserver.stop();\n        this.formSubmitObserver.stop();\n    }\n    willFollowLinkToLocation(element, location, event) {\n        return this.shouldRedirect(element) && this.frameAllowsVisitingLocation(element, location, event);\n    }\n    followedLinkToLocation(element, url) {\n        const frame = this.findFrameElement(element);\n        if (frame) {\n            frame.delegate.followedLinkToLocation(element, url);\n        }\n    }\n    willSubmitForm(element, submitter) {\n        return (element.closest(\"turbo-frame\") == null &&\n            this.shouldSubmit(element, submitter) &&\n            this.shouldRedirect(element, submitter));\n    }\n    formSubmitted(element, submitter) {\n        const frame = this.findFrameElement(element, submitter);\n        if (frame) {\n            frame.delegate.formSubmitted(element, submitter);\n        }\n    }\n    frameAllowsVisitingLocation(target, { href: url }, originalEvent) {\n        const event = dispatch(\"turbo:click\", {\n            target,\n            detail: { url, originalEvent },\n            cancelable: true,\n        });\n        return !event.defaultPrevented;\n    }\n    shouldSubmit(form, submitter) {\n        var _a;\n        const action = getAction(form, submitter);\n        const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n        const rootLocation = expandURL((_a = meta === null || meta === void 0 ? void 0 : meta.content) !== null && _a !== void 0 ? _a : \"/\");\n        return this.shouldRedirect(form, submitter) && locationIsVisitable(action, rootLocation);\n    }\n    shouldRedirect(element, submitter) {\n        const isNavigatable = element instanceof HTMLFormElement\n            ? this.session.submissionIsNavigatable(element, submitter)\n            : this.session.elementIsNavigatable(element);\n        if (isNavigatable) {\n            const frame = this.findFrameElement(element, submitter);\n            return frame ? frame != element.closest(\"turbo-frame\") : false;\n        }\n        else {\n            return false;\n        }\n    }\n    findFrameElement(element, submitter) {\n        const id = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"data-turbo-frame\")) || element.getAttribute(\"data-turbo-frame\");\n        if (id && id != \"_top\") {\n            const frame = this.element.querySelector(`#${id}:not([disabled])`);\n            if (frame instanceof FrameElement) {\n                return frame;\n            }\n        }\n    }\n}\n\nclass History {\n    constructor(delegate) {\n        this.restorationIdentifier = uuid();\n        this.restorationData = {};\n        this.started = false;\n        this.pageLoaded = false;\n        this.onPopState = (event) => {\n            if (this.shouldHandlePopState()) {\n                const { turbo } = event.state || {};\n                if (turbo) {\n                    this.location = new URL(window.location.href);\n                    const { restorationIdentifier } = turbo;\n                    this.restorationIdentifier = restorationIdentifier;\n                    this.delegate.historyPoppedToLocationWithRestorationIdentifier(this.location, restorationIdentifier);\n                }\n            }\n        };\n        this.onPageLoad = async (_event) => {\n            await nextMicrotask();\n            this.pageLoaded = true;\n        };\n        this.delegate = delegate;\n    }\n    start() {\n        if (!this.started) {\n            addEventListener(\"popstate\", this.onPopState, false);\n            addEventListener(\"load\", this.onPageLoad, false);\n            this.started = true;\n            this.replace(new URL(window.location.href));\n        }\n    }\n    stop() {\n        if (this.started) {\n            removeEventListener(\"popstate\", this.onPopState, false);\n            removeEventListener(\"load\", this.onPageLoad, false);\n            this.started = false;\n        }\n    }\n    push(location, restorationIdentifier) {\n        this.update(history.pushState, location, restorationIdentifier);\n    }\n    replace(location, restorationIdentifier) {\n        this.update(history.replaceState, location, restorationIdentifier);\n    }\n    update(method, location, restorationIdentifier = uuid()) {\n        const state = { turbo: { restorationIdentifier } };\n        method.call(history, state, \"\", location.href);\n        this.location = location;\n        this.restorationIdentifier = restorationIdentifier;\n    }\n    getRestorationDataForIdentifier(restorationIdentifier) {\n        return this.restorationData[restorationIdentifier] || {};\n    }\n    updateRestorationData(additionalData) {\n        const { restorationIdentifier } = this;\n        const restorationData = this.restorationData[restorationIdentifier];\n        this.restorationData[restorationIdentifier] = Object.assign(Object.assign({}, restorationData), additionalData);\n    }\n    assumeControlOfScrollRestoration() {\n        var _a;\n        if (!this.previousScrollRestoration) {\n            this.previousScrollRestoration = (_a = history.scrollRestoration) !== null && _a !== void 0 ? _a : \"auto\";\n            history.scrollRestoration = \"manual\";\n        }\n    }\n    relinquishControlOfScrollRestoration() {\n        if (this.previousScrollRestoration) {\n            history.scrollRestoration = this.previousScrollRestoration;\n            delete this.previousScrollRestoration;\n        }\n    }\n    shouldHandlePopState() {\n        return this.pageIsLoaded();\n    }\n    pageIsLoaded() {\n        return this.pageLoaded || document.readyState == \"complete\";\n    }\n}\n\nclass Navigator {\n    constructor(delegate) {\n        this.delegate = delegate;\n    }\n    proposeVisit(location, options = {}) {\n        if (this.delegate.allowsVisitingLocationWithAction(location, options.action)) {\n            if (locationIsVisitable(location, this.view.snapshot.rootLocation)) {\n                this.delegate.visitProposedToLocation(location, options);\n            }\n            else {\n                window.location.href = location.toString();\n            }\n        }\n    }\n    startVisit(locatable, restorationIdentifier, options = {}) {\n        this.lastVisit = this.currentVisit;\n        this.stop();\n        this.currentVisit = new Visit(this, expandURL(locatable), restorationIdentifier, Object.assign({ referrer: this.location }, options));\n        this.currentVisit.start();\n    }\n    submitForm(form, submitter) {\n        this.stop();\n        this.formSubmission = new FormSubmission(this, form, submitter, true);\n        this.formSubmission.start();\n    }\n    stop() {\n        if (this.formSubmission) {\n            this.formSubmission.stop();\n            delete this.formSubmission;\n        }\n        if (this.currentVisit) {\n            this.currentVisit.cancel();\n            delete this.currentVisit;\n        }\n    }\n    get adapter() {\n        return this.delegate.adapter;\n    }\n    get view() {\n        return this.delegate.view;\n    }\n    get history() {\n        return this.delegate.history;\n    }\n    formSubmissionStarted(formSubmission) {\n        if (typeof this.adapter.formSubmissionStarted === \"function\") {\n            this.adapter.formSubmissionStarted(formSubmission);\n        }\n    }\n    async formSubmissionSucceededWithResponse(formSubmission, fetchResponse) {\n        if (formSubmission == this.formSubmission) {\n            const responseHTML = await fetchResponse.responseHTML;\n            if (responseHTML) {\n                const shouldCacheSnapshot = formSubmission.method == FetchMethod.get;\n                if (!shouldCacheSnapshot) {\n                    this.view.clearSnapshotCache();\n                }\n                const { statusCode, redirected } = fetchResponse;\n                const action = this.getActionForFormSubmission(formSubmission);\n                const visitOptions = {\n                    action,\n                    shouldCacheSnapshot,\n                    response: { statusCode, responseHTML, redirected },\n                };\n                this.proposeVisit(fetchResponse.location, visitOptions);\n            }\n        }\n    }\n    async formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n        const responseHTML = await fetchResponse.responseHTML;\n        if (responseHTML) {\n            const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n            if (fetchResponse.serverError) {\n                await this.view.renderError(snapshot, this.currentVisit);\n            }\n            else {\n                await this.view.renderPage(snapshot, false, true, this.currentVisit);\n            }\n            this.view.scrollToTop();\n            this.view.clearSnapshotCache();\n        }\n    }\n    formSubmissionErrored(formSubmission, error) {\n        console.error(error);\n    }\n    formSubmissionFinished(formSubmission) {\n        if (typeof this.adapter.formSubmissionFinished === \"function\") {\n            this.adapter.formSubmissionFinished(formSubmission);\n        }\n    }\n    visitStarted(visit) {\n        this.delegate.visitStarted(visit);\n    }\n    visitCompleted(visit) {\n        this.delegate.visitCompleted(visit);\n    }\n    locationWithActionIsSamePage(location, action) {\n        var _a;\n        const anchor = getAnchor(location);\n        const lastLocation = ((_a = this.lastVisit) === null || _a === void 0 ? void 0 : _a.location) || this.view.lastRenderedLocation;\n        const currentAnchor = getAnchor(lastLocation);\n        const isRestorationToTop = action === \"restore\" && typeof anchor === \"undefined\";\n        return (action !== \"replace\" &&\n            getRequestURL(location) === getRequestURL(lastLocation) &&\n            (isRestorationToTop || (anchor != null && anchor !== currentAnchor)));\n    }\n    visitScrolledToSamePageLocation(oldURL, newURL) {\n        this.delegate.visitScrolledToSamePageLocation(oldURL, newURL);\n    }\n    get location() {\n        return this.history.location;\n    }\n    get restorationIdentifier() {\n        return this.history.restorationIdentifier;\n    }\n    getActionForFormSubmission(formSubmission) {\n        const { formElement, submitter } = formSubmission;\n        const action = getAttribute(\"data-turbo-action\", submitter, formElement);\n        return isAction(action) ? action : \"advance\";\n    }\n}\n\nvar PageStage;\n(function (PageStage) {\n    PageStage[PageStage[\"initial\"] = 0] = \"initial\";\n    PageStage[PageStage[\"loading\"] = 1] = \"loading\";\n    PageStage[PageStage[\"interactive\"] = 2] = \"interactive\";\n    PageStage[PageStage[\"complete\"] = 3] = \"complete\";\n})(PageStage || (PageStage = {}));\nclass PageObserver {\n    constructor(delegate) {\n        this.stage = PageStage.initial;\n        this.started = false;\n        this.interpretReadyState = () => {\n            const { readyState } = this;\n            if (readyState == \"interactive\") {\n                this.pageIsInteractive();\n            }\n            else if (readyState == \"complete\") {\n                this.pageIsComplete();\n            }\n        };\n        this.pageWillUnload = () => {\n            this.delegate.pageWillUnload();\n        };\n        this.delegate = delegate;\n    }\n    start() {\n        if (!this.started) {\n            if (this.stage == PageStage.initial) {\n                this.stage = PageStage.loading;\n            }\n            document.addEventListener(\"readystatechange\", this.interpretReadyState, false);\n            addEventListener(\"pagehide\", this.pageWillUnload, false);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            document.removeEventListener(\"readystatechange\", this.interpretReadyState, false);\n            removeEventListener(\"pagehide\", this.pageWillUnload, false);\n            this.started = false;\n        }\n    }\n    pageIsInteractive() {\n        if (this.stage == PageStage.loading) {\n            this.stage = PageStage.interactive;\n            this.delegate.pageBecameInteractive();\n        }\n    }\n    pageIsComplete() {\n        this.pageIsInteractive();\n        if (this.stage == PageStage.interactive) {\n            this.stage = PageStage.complete;\n            this.delegate.pageLoaded();\n        }\n    }\n    get readyState() {\n        return document.readyState;\n    }\n}\n\nclass ScrollObserver {\n    constructor(delegate) {\n        this.started = false;\n        this.onScroll = () => {\n            this.updatePosition({ x: window.pageXOffset, y: window.pageYOffset });\n        };\n        this.delegate = delegate;\n    }\n    start() {\n        if (!this.started) {\n            addEventListener(\"scroll\", this.onScroll, false);\n            this.onScroll();\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            removeEventListener(\"scroll\", this.onScroll, false);\n            this.started = false;\n        }\n    }\n    updatePosition(position) {\n        this.delegate.scrollPositionChanged(position);\n    }\n}\n\nclass StreamMessageRenderer {\n    render({ fragment }) {\n        Bardo.preservingPermanentElements(this, getPermanentElementMapForFragment(fragment), () => document.documentElement.appendChild(fragment));\n    }\n    enteringBardo(currentPermanentElement, newPermanentElement) {\n        newPermanentElement.replaceWith(currentPermanentElement.cloneNode(true));\n    }\n    leavingBardo() { }\n}\nfunction getPermanentElementMapForFragment(fragment) {\n    const permanentElementsInDocument = queryPermanentElementsAll(document.documentElement);\n    const permanentElementMap = {};\n    for (const permanentElementInDocument of permanentElementsInDocument) {\n        const { id } = permanentElementInDocument;\n        for (const streamElement of fragment.querySelectorAll(\"turbo-stream\")) {\n            const elementInStream = getPermanentElementById(streamElement.templateElement.content, id);\n            if (elementInStream) {\n                permanentElementMap[id] = [permanentElementInDocument, elementInStream];\n            }\n        }\n    }\n    return permanentElementMap;\n}\n\nclass StreamObserver {\n    constructor(delegate) {\n        this.sources = new Set();\n        this.started = false;\n        this.inspectFetchResponse = ((event) => {\n            const response = fetchResponseFromEvent(event);\n            if (response && fetchResponseIsStream(response)) {\n                event.preventDefault();\n                this.receiveMessageResponse(response);\n            }\n        });\n        this.receiveMessageEvent = (event) => {\n            if (this.started && typeof event.data == \"string\") {\n                this.receiveMessageHTML(event.data);\n            }\n        };\n        this.delegate = delegate;\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            addEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            removeEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n        }\n    }\n    connectStreamSource(source) {\n        if (!this.streamSourceIsConnected(source)) {\n            this.sources.add(source);\n            source.addEventListener(\"message\", this.receiveMessageEvent, false);\n        }\n    }\n    disconnectStreamSource(source) {\n        if (this.streamSourceIsConnected(source)) {\n            this.sources.delete(source);\n            source.removeEventListener(\"message\", this.receiveMessageEvent, false);\n        }\n    }\n    streamSourceIsConnected(source) {\n        return this.sources.has(source);\n    }\n    async receiveMessageResponse(response) {\n        const html = await response.responseHTML;\n        if (html) {\n            this.receiveMessageHTML(html);\n        }\n    }\n    receiveMessageHTML(html) {\n        this.delegate.receivedMessageFromStream(StreamMessage.wrap(html));\n    }\n}\nfunction fetchResponseFromEvent(event) {\n    var _a;\n    const fetchResponse = (_a = event.detail) === null || _a === void 0 ? void 0 : _a.fetchResponse;\n    if (fetchResponse instanceof FetchResponse) {\n        return fetchResponse;\n    }\n}\nfunction fetchResponseIsStream(response) {\n    var _a;\n    const contentType = (_a = response.contentType) !== null && _a !== void 0 ? _a : \"\";\n    return contentType.startsWith(StreamMessage.contentType);\n}\n\nclass ErrorRenderer extends Renderer {\n    static renderElement(currentElement, newElement) {\n        const { documentElement, body } = document;\n        documentElement.replaceChild(newElement, body);\n    }\n    async render() {\n        this.replaceHeadAndBody();\n        this.activateScriptElements();\n    }\n    replaceHeadAndBody() {\n        const { documentElement, head } = document;\n        documentElement.replaceChild(this.newHead, head);\n        this.renderElement(this.currentElement, this.newElement);\n    }\n    activateScriptElements() {\n        for (const replaceableElement of this.scriptElements) {\n            const parentNode = replaceableElement.parentNode;\n            if (parentNode) {\n                const element = activateScriptElement(replaceableElement);\n                parentNode.replaceChild(element, replaceableElement);\n            }\n        }\n    }\n    get newHead() {\n        return this.newSnapshot.headSnapshot.element;\n    }\n    get scriptElements() {\n        return document.documentElement.querySelectorAll(\"script\");\n    }\n}\n\nclass PageRenderer extends Renderer {\n    static renderElement(currentElement, newElement) {\n        if (document.body && newElement instanceof HTMLBodyElement) {\n            document.body.replaceWith(newElement);\n        }\n        else {\n            document.documentElement.appendChild(newElement);\n        }\n    }\n    get shouldRender() {\n        return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical;\n    }\n    get reloadReason() {\n        if (!this.newSnapshot.isVisitable) {\n            return {\n                reason: \"turbo_visit_control_is_reload\",\n            };\n        }\n        if (!this.trackedElementsAreIdentical) {\n            return {\n                reason: \"tracked_element_mismatch\",\n            };\n        }\n    }\n    async prepareToRender() {\n        await this.mergeHead();\n    }\n    async render() {\n        if (this.willRender) {\n            this.replaceBody();\n        }\n    }\n    finishRendering() {\n        super.finishRendering();\n        if (!this.isPreview) {\n            this.focusFirstAutofocusableElement();\n        }\n    }\n    get currentHeadSnapshot() {\n        return this.currentSnapshot.headSnapshot;\n    }\n    get newHeadSnapshot() {\n        return this.newSnapshot.headSnapshot;\n    }\n    get newElement() {\n        return this.newSnapshot.element;\n    }\n    async mergeHead() {\n        const newStylesheetElements = this.copyNewHeadStylesheetElements();\n        this.copyNewHeadScriptElements();\n        this.removeCurrentHeadProvisionalElements();\n        this.copyNewHeadProvisionalElements();\n        await newStylesheetElements;\n    }\n    replaceBody() {\n        this.preservingPermanentElements(() => {\n            this.activateNewBody();\n            this.assignNewBody();\n        });\n    }\n    get trackedElementsAreIdentical() {\n        return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature;\n    }\n    async copyNewHeadStylesheetElements() {\n        const loadingElements = [];\n        for (const element of this.newHeadStylesheetElements) {\n            loadingElements.push(waitForLoad(element));\n            document.head.appendChild(element);\n        }\n        await Promise.all(loadingElements);\n    }\n    copyNewHeadScriptElements() {\n        for (const element of this.newHeadScriptElements) {\n            document.head.appendChild(activateScriptElement(element));\n        }\n    }\n    removeCurrentHeadProvisionalElements() {\n        for (const element of this.currentHeadProvisionalElements) {\n            document.head.removeChild(element);\n        }\n    }\n    copyNewHeadProvisionalElements() {\n        for (const element of this.newHeadProvisionalElements) {\n            document.head.appendChild(element);\n        }\n    }\n    activateNewBody() {\n        document.adoptNode(this.newElement);\n        this.activateNewBodyScriptElements();\n    }\n    activateNewBodyScriptElements() {\n        for (const inertScriptElement of this.newBodyScriptElements) {\n            const activatedScriptElement = activateScriptElement(inertScriptElement);\n            inertScriptElement.replaceWith(activatedScriptElement);\n        }\n    }\n    assignNewBody() {\n        this.renderElement(this.currentElement, this.newElement);\n    }\n    get newHeadStylesheetElements() {\n        return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot);\n    }\n    get newHeadScriptElements() {\n        return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot);\n    }\n    get currentHeadProvisionalElements() {\n        return this.currentHeadSnapshot.provisionalElements;\n    }\n    get newHeadProvisionalElements() {\n        return this.newHeadSnapshot.provisionalElements;\n    }\n    get newBodyScriptElements() {\n        return this.newElement.querySelectorAll(\"script\");\n    }\n}\n\nclass SnapshotCache {\n    constructor(size) {\n        this.keys = [];\n        this.snapshots = {};\n        this.size = size;\n    }\n    has(location) {\n        return toCacheKey(location) in this.snapshots;\n    }\n    get(location) {\n        if (this.has(location)) {\n            const snapshot = this.read(location);\n            this.touch(location);\n            return snapshot;\n        }\n    }\n    put(location, snapshot) {\n        this.write(location, snapshot);\n        this.touch(location);\n        return snapshot;\n    }\n    clear() {\n        this.snapshots = {};\n    }\n    read(location) {\n        return this.snapshots[toCacheKey(location)];\n    }\n    write(location, snapshot) {\n        this.snapshots[toCacheKey(location)] = snapshot;\n    }\n    touch(location) {\n        const key = toCacheKey(location);\n        const index = this.keys.indexOf(key);\n        if (index > -1)\n            this.keys.splice(index, 1);\n        this.keys.unshift(key);\n        this.trim();\n    }\n    trim() {\n        for (const key of this.keys.splice(this.size)) {\n            delete this.snapshots[key];\n        }\n    }\n}\n\nclass PageView extends View {\n    constructor() {\n        super(...arguments);\n        this.snapshotCache = new SnapshotCache(10);\n        this.lastRenderedLocation = new URL(location.href);\n        this.forceReloaded = false;\n    }\n    renderPage(snapshot, isPreview = false, willRender = true, visit) {\n        const renderer = new PageRenderer(this.snapshot, snapshot, PageRenderer.renderElement, isPreview, willRender);\n        if (!renderer.shouldRender) {\n            this.forceReloaded = true;\n        }\n        else {\n            visit === null || visit === void 0 ? void 0 : visit.changeHistory();\n        }\n        return this.render(renderer);\n    }\n    renderError(snapshot, visit) {\n        visit === null || visit === void 0 ? void 0 : visit.changeHistory();\n        const renderer = new ErrorRenderer(this.snapshot, snapshot, ErrorRenderer.renderElement, false);\n        return this.render(renderer);\n    }\n    clearSnapshotCache() {\n        this.snapshotCache.clear();\n    }\n    async cacheSnapshot() {\n        if (this.shouldCacheSnapshot) {\n            this.delegate.viewWillCacheSnapshot();\n            const { snapshot, lastRenderedLocation: location } = this;\n            await nextEventLoopTick();\n            const cachedSnapshot = snapshot.clone();\n            this.snapshotCache.put(location, cachedSnapshot);\n            return cachedSnapshot;\n        }\n    }\n    getCachedSnapshotForLocation(location) {\n        return this.snapshotCache.get(location);\n    }\n    get snapshot() {\n        return PageSnapshot.fromElement(this.element);\n    }\n    get shouldCacheSnapshot() {\n        return this.snapshot.isCacheable;\n    }\n}\n\nclass Preloader {\n    constructor(delegate) {\n        this.selector = \"a[data-turbo-preload]\";\n        this.delegate = delegate;\n    }\n    get snapshotCache() {\n        return this.delegate.navigator.view.snapshotCache;\n    }\n    start() {\n        if (document.readyState === \"loading\") {\n            return document.addEventListener(\"DOMContentLoaded\", () => {\n                this.preloadOnLoadLinksForView(document.body);\n            });\n        }\n        else {\n            this.preloadOnLoadLinksForView(document.body);\n        }\n    }\n    preloadOnLoadLinksForView(element) {\n        for (const link of element.querySelectorAll(this.selector)) {\n            this.preloadURL(link);\n        }\n    }\n    async preloadURL(link) {\n        const location = new URL(link.href);\n        if (this.snapshotCache.has(location)) {\n            return;\n        }\n        try {\n            const response = await fetch(location.toString(), { headers: { \"VND.PREFETCH\": \"true\", Accept: \"text/html\" } });\n            const responseText = await response.text();\n            const snapshot = PageSnapshot.fromHTMLString(responseText);\n            this.snapshotCache.put(location, snapshot);\n        }\n        catch (_) {\n        }\n    }\n}\n\nclass Session {\n    constructor() {\n        this.navigator = new Navigator(this);\n        this.history = new History(this);\n        this.preloader = new Preloader(this);\n        this.view = new PageView(this, document.documentElement);\n        this.adapter = new BrowserAdapter(this);\n        this.pageObserver = new PageObserver(this);\n        this.cacheObserver = new CacheObserver();\n        this.linkClickObserver = new LinkClickObserver(this, window);\n        this.formSubmitObserver = new FormSubmitObserver(this, document);\n        this.scrollObserver = new ScrollObserver(this);\n        this.streamObserver = new StreamObserver(this);\n        this.formLinkClickObserver = new FormLinkClickObserver(this, document.documentElement);\n        this.frameRedirector = new FrameRedirector(this, document.documentElement);\n        this.streamMessageRenderer = new StreamMessageRenderer();\n        this.drive = true;\n        this.enabled = true;\n        this.progressBarDelay = 500;\n        this.started = false;\n        this.formMode = \"on\";\n    }\n    start() {\n        if (!this.started) {\n            this.pageObserver.start();\n            this.cacheObserver.start();\n            this.formLinkClickObserver.start();\n            this.linkClickObserver.start();\n            this.formSubmitObserver.start();\n            this.scrollObserver.start();\n            this.streamObserver.start();\n            this.frameRedirector.start();\n            this.history.start();\n            this.preloader.start();\n            this.started = true;\n            this.enabled = true;\n        }\n    }\n    disable() {\n        this.enabled = false;\n    }\n    stop() {\n        if (this.started) {\n            this.pageObserver.stop();\n            this.cacheObserver.stop();\n            this.formLinkClickObserver.stop();\n            this.linkClickObserver.stop();\n            this.formSubmitObserver.stop();\n            this.scrollObserver.stop();\n            this.streamObserver.stop();\n            this.frameRedirector.stop();\n            this.history.stop();\n            this.started = false;\n        }\n    }\n    registerAdapter(adapter) {\n        this.adapter = adapter;\n    }\n    visit(location, options = {}) {\n        const frameElement = options.frame ? document.getElementById(options.frame) : null;\n        if (frameElement instanceof FrameElement) {\n            frameElement.src = location.toString();\n            frameElement.loaded;\n        }\n        else {\n            this.navigator.proposeVisit(expandURL(location), options);\n        }\n    }\n    connectStreamSource(source) {\n        this.streamObserver.connectStreamSource(source);\n    }\n    disconnectStreamSource(source) {\n        this.streamObserver.disconnectStreamSource(source);\n    }\n    renderStreamMessage(message) {\n        this.streamMessageRenderer.render(StreamMessage.wrap(message));\n    }\n    clearCache() {\n        this.view.clearSnapshotCache();\n    }\n    setProgressBarDelay(delay) {\n        this.progressBarDelay = delay;\n    }\n    setFormMode(mode) {\n        this.formMode = mode;\n    }\n    get location() {\n        return this.history.location;\n    }\n    get restorationIdentifier() {\n        return this.history.restorationIdentifier;\n    }\n    historyPoppedToLocationWithRestorationIdentifier(location, restorationIdentifier) {\n        if (this.enabled) {\n            this.navigator.startVisit(location, restorationIdentifier, {\n                action: \"restore\",\n                historyChanged: true,\n            });\n        }\n        else {\n            this.adapter.pageInvalidated({\n                reason: \"turbo_disabled\",\n            });\n        }\n    }\n    scrollPositionChanged(position) {\n        this.history.updateRestorationData({ scrollPosition: position });\n    }\n    willSubmitFormLinkToLocation(link, location) {\n        return this.elementIsNavigatable(link) && locationIsVisitable(location, this.snapshot.rootLocation);\n    }\n    submittedFormLinkToLocation() { }\n    willFollowLinkToLocation(link, location, event) {\n        return (this.elementIsNavigatable(link) &&\n            locationIsVisitable(location, this.snapshot.rootLocation) &&\n            this.applicationAllowsFollowingLinkToLocation(link, location, event));\n    }\n    followedLinkToLocation(link, location) {\n        const action = this.getActionForLink(link);\n        const acceptsStreamResponse = link.hasAttribute(\"data-turbo-stream\");\n        this.visit(location.href, { action, acceptsStreamResponse });\n    }\n    allowsVisitingLocationWithAction(location, action) {\n        return this.locationWithActionIsSamePage(location, action) || this.applicationAllowsVisitingLocation(location);\n    }\n    visitProposedToLocation(location, options) {\n        extendURLWithDeprecatedProperties(location);\n        this.adapter.visitProposedToLocation(location, options);\n    }\n    visitStarted(visit) {\n        if (!visit.acceptsStreamResponse) {\n            markAsBusy(document.documentElement);\n        }\n        extendURLWithDeprecatedProperties(visit.location);\n        if (!visit.silent) {\n            this.notifyApplicationAfterVisitingLocation(visit.location, visit.action);\n        }\n    }\n    visitCompleted(visit) {\n        clearBusyState(document.documentElement);\n        this.notifyApplicationAfterPageLoad(visit.getTimingMetrics());\n    }\n    locationWithActionIsSamePage(location, action) {\n        return this.navigator.locationWithActionIsSamePage(location, action);\n    }\n    visitScrolledToSamePageLocation(oldURL, newURL) {\n        this.notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL);\n    }\n    willSubmitForm(form, submitter) {\n        const action = getAction(form, submitter);\n        return (this.submissionIsNavigatable(form, submitter) &&\n            locationIsVisitable(expandURL(action), this.snapshot.rootLocation));\n    }\n    formSubmitted(form, submitter) {\n        this.navigator.submitForm(form, submitter);\n    }\n    pageBecameInteractive() {\n        this.view.lastRenderedLocation = this.location;\n        this.notifyApplicationAfterPageLoad();\n    }\n    pageLoaded() {\n        this.history.assumeControlOfScrollRestoration();\n    }\n    pageWillUnload() {\n        this.history.relinquishControlOfScrollRestoration();\n    }\n    receivedMessageFromStream(message) {\n        this.renderStreamMessage(message);\n    }\n    viewWillCacheSnapshot() {\n        var _a;\n        if (!((_a = this.navigator.currentVisit) === null || _a === void 0 ? void 0 : _a.silent)) {\n            this.notifyApplicationBeforeCachingSnapshot();\n        }\n    }\n    allowsImmediateRender({ element }, options) {\n        const event = this.notifyApplicationBeforeRender(element, options);\n        const { defaultPrevented, detail: { render }, } = event;\n        if (this.view.renderer && render) {\n            this.view.renderer.renderElement = render;\n        }\n        return !defaultPrevented;\n    }\n    viewRenderedSnapshot(_snapshot, _isPreview) {\n        this.view.lastRenderedLocation = this.history.location;\n        this.notifyApplicationAfterRender();\n    }\n    preloadOnLoadLinksForView(element) {\n        this.preloader.preloadOnLoadLinksForView(element);\n    }\n    viewInvalidated(reason) {\n        this.adapter.pageInvalidated(reason);\n    }\n    frameLoaded(frame) {\n        this.notifyApplicationAfterFrameLoad(frame);\n    }\n    frameRendered(fetchResponse, frame) {\n        this.notifyApplicationAfterFrameRender(fetchResponse, frame);\n    }\n    applicationAllowsFollowingLinkToLocation(link, location, ev) {\n        const event = this.notifyApplicationAfterClickingLinkToLocation(link, location, ev);\n        return !event.defaultPrevented;\n    }\n    applicationAllowsVisitingLocation(location) {\n        const event = this.notifyApplicationBeforeVisitingLocation(location);\n        return !event.defaultPrevented;\n    }\n    notifyApplicationAfterClickingLinkToLocation(link, location, event) {\n        return dispatch(\"turbo:click\", {\n            target: link,\n            detail: { url: location.href, originalEvent: event },\n            cancelable: true,\n        });\n    }\n    notifyApplicationBeforeVisitingLocation(location) {\n        return dispatch(\"turbo:before-visit\", {\n            detail: { url: location.href },\n            cancelable: true,\n        });\n    }\n    notifyApplicationAfterVisitingLocation(location, action) {\n        return dispatch(\"turbo:visit\", { detail: { url: location.href, action } });\n    }\n    notifyApplicationBeforeCachingSnapshot() {\n        return dispatch(\"turbo:before-cache\");\n    }\n    notifyApplicationBeforeRender(newBody, options) {\n        return dispatch(\"turbo:before-render\", {\n            detail: Object.assign({ newBody }, options),\n            cancelable: true,\n        });\n    }\n    notifyApplicationAfterRender() {\n        return dispatch(\"turbo:render\");\n    }\n    notifyApplicationAfterPageLoad(timing = {}) {\n        return dispatch(\"turbo:load\", {\n            detail: { url: this.location.href, timing },\n        });\n    }\n    notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL) {\n        dispatchEvent(new HashChangeEvent(\"hashchange\", {\n            oldURL: oldURL.toString(),\n            newURL: newURL.toString(),\n        }));\n    }\n    notifyApplicationAfterFrameLoad(frame) {\n        return dispatch(\"turbo:frame-load\", { target: frame });\n    }\n    notifyApplicationAfterFrameRender(fetchResponse, frame) {\n        return dispatch(\"turbo:frame-render\", {\n            detail: { fetchResponse },\n            target: frame,\n            cancelable: true,\n        });\n    }\n    submissionIsNavigatable(form, submitter) {\n        if (this.formMode == \"off\") {\n            return false;\n        }\n        else {\n            const submitterIsNavigatable = submitter ? this.elementIsNavigatable(submitter) : true;\n            if (this.formMode == \"optin\") {\n                return submitterIsNavigatable && form.closest('[data-turbo=\"true\"]') != null;\n            }\n            else {\n                return submitterIsNavigatable && this.elementIsNavigatable(form);\n            }\n        }\n    }\n    elementIsNavigatable(element) {\n        const container = element.closest(\"[data-turbo]\");\n        const withinFrame = element.closest(\"turbo-frame\");\n        if (this.drive || withinFrame) {\n            if (container) {\n                return container.getAttribute(\"data-turbo\") != \"false\";\n            }\n            else {\n                return true;\n            }\n        }\n        else {\n            if (container) {\n                return container.getAttribute(\"data-turbo\") == \"true\";\n            }\n            else {\n                return false;\n            }\n        }\n    }\n    getActionForLink(link) {\n        const action = link.getAttribute(\"data-turbo-action\");\n        return isAction(action) ? action : \"advance\";\n    }\n    get snapshot() {\n        return this.view.snapshot;\n    }\n}\nfunction extendURLWithDeprecatedProperties(url) {\n    Object.defineProperties(url, deprecatedLocationPropertyDescriptors);\n}\nconst deprecatedLocationPropertyDescriptors = {\n    absoluteURL: {\n        get() {\n            return this.toString();\n        },\n    },\n};\n\nclass Cache {\n    constructor(session) {\n        this.session = session;\n    }\n    clear() {\n        this.session.clearCache();\n    }\n    resetCacheControl() {\n        this.setCacheControl(\"\");\n    }\n    exemptPageFromCache() {\n        this.setCacheControl(\"no-cache\");\n    }\n    exemptPageFromPreview() {\n        this.setCacheControl(\"no-preview\");\n    }\n    setCacheControl(value) {\n        setMetaContent(\"turbo-cache-control\", value);\n    }\n}\n\nconst StreamActions = {\n    after() {\n        this.targetElements.forEach((e) => { var _a; return (_a = e.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(this.templateContent, e.nextSibling); });\n    },\n    append() {\n        this.removeDuplicateTargetChildren();\n        this.targetElements.forEach((e) => e.append(this.templateContent));\n    },\n    before() {\n        this.targetElements.forEach((e) => { var _a; return (_a = e.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(this.templateContent, e); });\n    },\n    prepend() {\n        this.removeDuplicateTargetChildren();\n        this.targetElements.forEach((e) => e.prepend(this.templateContent));\n    },\n    remove() {\n        this.targetElements.forEach((e) => e.remove());\n    },\n    replace() {\n        this.targetElements.forEach((e) => e.replaceWith(this.templateContent));\n    },\n    update() {\n        this.targetElements.forEach((e) => e.replaceChildren(this.templateContent));\n    },\n};\n\nconst session = new Session();\nconst cache = new Cache(session);\nconst { navigator: navigator$1 } = session;\nfunction start() {\n    session.start();\n}\nfunction registerAdapter(adapter) {\n    session.registerAdapter(adapter);\n}\nfunction visit(location, options) {\n    session.visit(location, options);\n}\nfunction connectStreamSource(source) {\n    session.connectStreamSource(source);\n}\nfunction disconnectStreamSource(source) {\n    session.disconnectStreamSource(source);\n}\nfunction renderStreamMessage(message) {\n    session.renderStreamMessage(message);\n}\nfunction clearCache() {\n    console.warn(\"Please replace `Turbo.clearCache()` with `Turbo.cache.clear()`. The top-level function is deprecated and will be removed in a future version of Turbo.`\");\n    session.clearCache();\n}\nfunction setProgressBarDelay(delay) {\n    session.setProgressBarDelay(delay);\n}\nfunction setConfirmMethod(confirmMethod) {\n    FormSubmission.confirmMethod = confirmMethod;\n}\nfunction setFormMode(mode) {\n    session.setFormMode(mode);\n}\n\nvar Turbo = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    navigator: navigator$1,\n    session: session,\n    cache: cache,\n    PageRenderer: PageRenderer,\n    PageSnapshot: PageSnapshot,\n    FrameRenderer: FrameRenderer,\n    start: start,\n    registerAdapter: registerAdapter,\n    visit: visit,\n    connectStreamSource: connectStreamSource,\n    disconnectStreamSource: disconnectStreamSource,\n    renderStreamMessage: renderStreamMessage,\n    clearCache: clearCache,\n    setProgressBarDelay: setProgressBarDelay,\n    setConfirmMethod: setConfirmMethod,\n    setFormMode: setFormMode,\n    StreamActions: StreamActions\n});\n\nclass FrameController {\n    constructor(element) {\n        this.fetchResponseLoaded = (_fetchResponse) => { };\n        this.currentFetchRequest = null;\n        this.resolveVisitPromise = () => { };\n        this.connected = false;\n        this.hasBeenLoaded = false;\n        this.ignoredAttributes = new Set();\n        this.action = null;\n        this.visitCachedSnapshot = ({ element }) => {\n            const frame = element.querySelector(\"#\" + this.element.id);\n            if (frame && this.previousFrameElement) {\n                frame.replaceChildren(...this.previousFrameElement.children);\n            }\n            delete this.previousFrameElement;\n        };\n        this.element = element;\n        this.view = new FrameView(this, this.element);\n        this.appearanceObserver = new AppearanceObserver(this, this.element);\n        this.formLinkClickObserver = new FormLinkClickObserver(this, this.element);\n        this.linkClickObserver = new LinkClickObserver(this, this.element);\n        this.restorationIdentifier = uuid();\n        this.formSubmitObserver = new FormSubmitObserver(this, this.element);\n    }\n    connect() {\n        if (!this.connected) {\n            this.connected = true;\n            if (this.loadingStyle == FrameLoadingStyle.lazy) {\n                this.appearanceObserver.start();\n            }\n            else {\n                this.loadSourceURL();\n            }\n            this.formLinkClickObserver.start();\n            this.linkClickObserver.start();\n            this.formSubmitObserver.start();\n        }\n    }\n    disconnect() {\n        if (this.connected) {\n            this.connected = false;\n            this.appearanceObserver.stop();\n            this.formLinkClickObserver.stop();\n            this.linkClickObserver.stop();\n            this.formSubmitObserver.stop();\n        }\n    }\n    disabledChanged() {\n        if (this.loadingStyle == FrameLoadingStyle.eager) {\n            this.loadSourceURL();\n        }\n    }\n    sourceURLChanged() {\n        if (this.isIgnoringChangesTo(\"src\"))\n            return;\n        if (this.element.isConnected) {\n            this.complete = false;\n        }\n        if (this.loadingStyle == FrameLoadingStyle.eager || this.hasBeenLoaded) {\n            this.loadSourceURL();\n        }\n    }\n    completeChanged() {\n        if (this.isIgnoringChangesTo(\"complete\"))\n            return;\n        this.loadSourceURL();\n    }\n    loadingStyleChanged() {\n        if (this.loadingStyle == FrameLoadingStyle.lazy) {\n            this.appearanceObserver.start();\n        }\n        else {\n            this.appearanceObserver.stop();\n            this.loadSourceURL();\n        }\n    }\n    async loadSourceURL() {\n        if (this.enabled && this.isActive && !this.complete && this.sourceURL) {\n            this.element.loaded = this.visit(expandURL(this.sourceURL));\n            this.appearanceObserver.stop();\n            await this.element.loaded;\n            this.hasBeenLoaded = true;\n        }\n    }\n    async loadResponse(fetchResponse) {\n        if (fetchResponse.redirected || (fetchResponse.succeeded && fetchResponse.isHTML)) {\n            this.sourceURL = fetchResponse.response.url;\n        }\n        try {\n            const html = await fetchResponse.responseHTML;\n            if (html) {\n                const { body } = parseHTMLDocument(html);\n                const newFrameElement = await this.extractForeignFrameElement(body);\n                if (newFrameElement) {\n                    const snapshot = new Snapshot(newFrameElement);\n                    const renderer = new FrameRenderer(this, this.view.snapshot, snapshot, FrameRenderer.renderElement, false, false);\n                    if (this.view.renderPromise)\n                        await this.view.renderPromise;\n                    this.changeHistory();\n                    await this.view.render(renderer);\n                    this.complete = true;\n                    session.frameRendered(fetchResponse, this.element);\n                    session.frameLoaded(this.element);\n                    this.fetchResponseLoaded(fetchResponse);\n                }\n                else if (this.willHandleFrameMissingFromResponse(fetchResponse)) {\n                    console.warn(`A matching frame for #${this.element.id} was missing from the response, transforming into full-page Visit.`);\n                    this.visitResponse(fetchResponse.response);\n                }\n            }\n        }\n        catch (error) {\n            console.error(error);\n            this.view.invalidate();\n        }\n        finally {\n            this.fetchResponseLoaded = () => { };\n        }\n    }\n    elementAppearedInViewport(_element) {\n        this.loadSourceURL();\n    }\n    willSubmitFormLinkToLocation(link) {\n        return link.closest(\"turbo-frame\") == this.element && this.shouldInterceptNavigation(link);\n    }\n    submittedFormLinkToLocation(link, _location, form) {\n        const frame = this.findFrameElement(link);\n        if (frame)\n            form.setAttribute(\"data-turbo-frame\", frame.id);\n    }\n    willFollowLinkToLocation(element, location, event) {\n        return this.shouldInterceptNavigation(element) && this.frameAllowsVisitingLocation(element, location, event);\n    }\n    followedLinkToLocation(element, location) {\n        this.navigateFrame(element, location.href);\n    }\n    willSubmitForm(element, submitter) {\n        return element.closest(\"turbo-frame\") == this.element && this.shouldInterceptNavigation(element, submitter);\n    }\n    formSubmitted(element, submitter) {\n        if (this.formSubmission) {\n            this.formSubmission.stop();\n        }\n        this.formSubmission = new FormSubmission(this, element, submitter);\n        const { fetchRequest } = this.formSubmission;\n        this.prepareHeadersForRequest(fetchRequest.headers, fetchRequest);\n        this.formSubmission.start();\n    }\n    prepareHeadersForRequest(headers, request) {\n        var _a;\n        headers[\"Turbo-Frame\"] = this.id;\n        if ((_a = this.currentNavigationElement) === null || _a === void 0 ? void 0 : _a.hasAttribute(\"data-turbo-stream\")) {\n            request.acceptResponseType(StreamMessage.contentType);\n        }\n    }\n    requestStarted(_request) {\n        markAsBusy(this.element);\n    }\n    requestPreventedHandlingResponse(_request, _response) {\n        this.resolveVisitPromise();\n    }\n    async requestSucceededWithResponse(request, response) {\n        await this.loadResponse(response);\n        this.resolveVisitPromise();\n    }\n    async requestFailedWithResponse(request, response) {\n        console.error(response);\n        await this.loadResponse(response);\n        this.resolveVisitPromise();\n    }\n    requestErrored(request, error) {\n        console.error(error);\n        this.resolveVisitPromise();\n    }\n    requestFinished(_request) {\n        clearBusyState(this.element);\n    }\n    formSubmissionStarted({ formElement }) {\n        markAsBusy(formElement, this.findFrameElement(formElement));\n    }\n    formSubmissionSucceededWithResponse(formSubmission, response) {\n        const frame = this.findFrameElement(formSubmission.formElement, formSubmission.submitter);\n        this.proposeVisitIfNavigatedWithAction(frame, formSubmission.formElement, formSubmission.submitter);\n        frame.delegate.loadResponse(response);\n    }\n    formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n        this.element.delegate.loadResponse(fetchResponse);\n    }\n    formSubmissionErrored(formSubmission, error) {\n        console.error(error);\n    }\n    formSubmissionFinished({ formElement }) {\n        clearBusyState(formElement, this.findFrameElement(formElement));\n    }\n    allowsImmediateRender({ element: newFrame }, options) {\n        const event = dispatch(\"turbo:before-frame-render\", {\n            target: this.element,\n            detail: Object.assign({ newFrame }, options),\n            cancelable: true,\n        });\n        const { defaultPrevented, detail: { render }, } = event;\n        if (this.view.renderer && render) {\n            this.view.renderer.renderElement = render;\n        }\n        return !defaultPrevented;\n    }\n    viewRenderedSnapshot(_snapshot, _isPreview) { }\n    preloadOnLoadLinksForView(element) {\n        session.preloadOnLoadLinksForView(element);\n    }\n    viewInvalidated() { }\n    willRenderFrame(currentElement, _newElement) {\n        this.previousFrameElement = currentElement.cloneNode(true);\n    }\n    async visit(url) {\n        var _a;\n        const request = new FetchRequest(this, FetchMethod.get, url, new URLSearchParams(), this.element);\n        (_a = this.currentFetchRequest) === null || _a === void 0 ? void 0 : _a.cancel();\n        this.currentFetchRequest = request;\n        return new Promise((resolve) => {\n            this.resolveVisitPromise = () => {\n                this.resolveVisitPromise = () => { };\n                this.currentFetchRequest = null;\n                resolve();\n            };\n            request.perform();\n        });\n    }\n    navigateFrame(element, url, submitter) {\n        const frame = this.findFrameElement(element, submitter);\n        this.proposeVisitIfNavigatedWithAction(frame, element, submitter);\n        this.withCurrentNavigationElement(element, () => {\n            frame.src = url;\n        });\n    }\n    proposeVisitIfNavigatedWithAction(frame, element, submitter) {\n        this.action = getVisitAction(submitter, element, frame);\n        this.frame = frame;\n        if (isAction(this.action)) {\n            const { visitCachedSnapshot } = frame.delegate;\n            frame.delegate.fetchResponseLoaded = (fetchResponse) => {\n                if (frame.src) {\n                    const { statusCode, redirected } = fetchResponse;\n                    const responseHTML = frame.ownerDocument.documentElement.outerHTML;\n                    const response = { statusCode, redirected, responseHTML };\n                    const options = {\n                        response,\n                        visitCachedSnapshot,\n                        willRender: false,\n                        updateHistory: false,\n                        restorationIdentifier: this.restorationIdentifier,\n                    };\n                    if (this.action)\n                        options.action = this.action;\n                    session.visit(frame.src, options);\n                }\n            };\n        }\n    }\n    changeHistory() {\n        if (this.action && this.frame) {\n            const method = getHistoryMethodForAction(this.action);\n            session.history.update(method, expandURL(this.frame.src || \"\"), this.restorationIdentifier);\n        }\n    }\n    willHandleFrameMissingFromResponse(fetchResponse) {\n        this.element.setAttribute(\"complete\", \"\");\n        const response = fetchResponse.response;\n        const visit = async (url, options = {}) => {\n            if (url instanceof Response) {\n                this.visitResponse(url);\n            }\n            else {\n                session.visit(url, options);\n            }\n        };\n        const event = dispatch(\"turbo:frame-missing\", {\n            target: this.element,\n            detail: { response, visit },\n            cancelable: true,\n        });\n        return !event.defaultPrevented;\n    }\n    async visitResponse(response) {\n        const wrapped = new FetchResponse(response);\n        const responseHTML = await wrapped.responseHTML;\n        const { location, redirected, statusCode } = wrapped;\n        return session.visit(location, { response: { redirected, statusCode, responseHTML } });\n    }\n    findFrameElement(element, submitter) {\n        var _a;\n        const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n        return (_a = getFrameElementById(id)) !== null && _a !== void 0 ? _a : this.element;\n    }\n    async extractForeignFrameElement(container) {\n        let element;\n        const id = CSS.escape(this.id);\n        try {\n            element = activateElement(container.querySelector(`turbo-frame#${id}`), this.sourceURL);\n            if (element) {\n                return element;\n            }\n            element = activateElement(container.querySelector(`turbo-frame[src][recurse~=${id}]`), this.sourceURL);\n            if (element) {\n                await element.loaded;\n                return await this.extractForeignFrameElement(element);\n            }\n        }\n        catch (error) {\n            console.error(error);\n            return new FrameElement();\n        }\n        return null;\n    }\n    formActionIsVisitable(form, submitter) {\n        const action = getAction(form, submitter);\n        return locationIsVisitable(expandURL(action), this.rootLocation);\n    }\n    shouldInterceptNavigation(element, submitter) {\n        const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n        if (element instanceof HTMLFormElement && !this.formActionIsVisitable(element, submitter)) {\n            return false;\n        }\n        if (!this.enabled || id == \"_top\") {\n            return false;\n        }\n        if (id) {\n            const frameElement = getFrameElementById(id);\n            if (frameElement) {\n                return !frameElement.disabled;\n            }\n        }\n        if (!session.elementIsNavigatable(element)) {\n            return false;\n        }\n        if (submitter && !session.elementIsNavigatable(submitter)) {\n            return false;\n        }\n        return true;\n    }\n    get id() {\n        return this.element.id;\n    }\n    get enabled() {\n        return !this.element.disabled;\n    }\n    get sourceURL() {\n        if (this.element.src) {\n            return this.element.src;\n        }\n    }\n    set sourceURL(sourceURL) {\n        this.ignoringChangesToAttribute(\"src\", () => {\n            this.element.src = sourceURL !== null && sourceURL !== void 0 ? sourceURL : null;\n        });\n    }\n    get loadingStyle() {\n        return this.element.loading;\n    }\n    get isLoading() {\n        return this.formSubmission !== undefined || this.resolveVisitPromise() !== undefined;\n    }\n    get complete() {\n        return this.element.hasAttribute(\"complete\");\n    }\n    set complete(value) {\n        this.ignoringChangesToAttribute(\"complete\", () => {\n            if (value) {\n                this.element.setAttribute(\"complete\", \"\");\n            }\n            else {\n                this.element.removeAttribute(\"complete\");\n            }\n        });\n    }\n    get isActive() {\n        return this.element.isActive && this.connected;\n    }\n    get rootLocation() {\n        var _a;\n        const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n        const root = (_a = meta === null || meta === void 0 ? void 0 : meta.content) !== null && _a !== void 0 ? _a : \"/\";\n        return expandURL(root);\n    }\n    frameAllowsVisitingLocation(target, { href: url }, originalEvent) {\n        const event = dispatch(\"turbo:click\", {\n            target,\n            detail: { url, originalEvent },\n            cancelable: true,\n        });\n        return !event.defaultPrevented;\n    }\n    isIgnoringChangesTo(attributeName) {\n        return this.ignoredAttributes.has(attributeName);\n    }\n    ignoringChangesToAttribute(attributeName, callback) {\n        this.ignoredAttributes.add(attributeName);\n        callback();\n        this.ignoredAttributes.delete(attributeName);\n    }\n    withCurrentNavigationElement(element, callback) {\n        this.currentNavigationElement = element;\n        callback();\n        delete this.currentNavigationElement;\n    }\n}\nfunction getFrameElementById(id) {\n    if (id != null) {\n        const element = document.getElementById(id);\n        if (element instanceof FrameElement) {\n            return element;\n        }\n    }\n}\nfunction activateElement(element, currentURL) {\n    if (element) {\n        const src = element.getAttribute(\"src\");\n        if (src != null && currentURL != null && urlsAreEqual(src, currentURL)) {\n            throw new Error(`Matching <turbo-frame id=\"${element.id}\"> element has a source URL which references itself`);\n        }\n        if (element.ownerDocument !== document) {\n            element = document.importNode(element, true);\n        }\n        if (element instanceof FrameElement) {\n            element.connectedCallback();\n            element.disconnectedCallback();\n            return element;\n        }\n    }\n}\n\nclass StreamElement extends HTMLElement {\n    static async renderElement(newElement) {\n        await newElement.performAction();\n    }\n    async connectedCallback() {\n        try {\n            await this.render();\n        }\n        catch (error) {\n            console.error(error);\n        }\n        finally {\n            this.disconnect();\n        }\n    }\n    async render() {\n        var _a;\n        return ((_a = this.renderPromise) !== null && _a !== void 0 ? _a : (this.renderPromise = (async () => {\n            const event = this.beforeRenderEvent;\n            if (this.dispatchEvent(event)) {\n                await nextAnimationFrame();\n                await event.detail.render(this);\n            }\n        })()));\n    }\n    disconnect() {\n        try {\n            this.remove();\n        }\n        catch (_a) { }\n    }\n    removeDuplicateTargetChildren() {\n        this.duplicateChildren.forEach((c) => c.remove());\n    }\n    get duplicateChildren() {\n        var _a;\n        const existingChildren = this.targetElements.flatMap((e) => [...e.children]).filter((c) => !!c.id);\n        const newChildrenIds = [...(((_a = this.templateContent) === null || _a === void 0 ? void 0 : _a.children) || [])].filter((c) => !!c.id).map((c) => c.id);\n        return existingChildren.filter((c) => newChildrenIds.includes(c.id));\n    }\n    get performAction() {\n        if (this.action) {\n            const actionFunction = StreamActions[this.action];\n            if (actionFunction) {\n                return actionFunction;\n            }\n            this.raise(\"unknown action\");\n        }\n        this.raise(\"action attribute is missing\");\n    }\n    get targetElements() {\n        if (this.target) {\n            return this.targetElementsById;\n        }\n        else if (this.targets) {\n            return this.targetElementsByQuery;\n        }\n        else {\n            this.raise(\"target or targets attribute is missing\");\n        }\n    }\n    get templateContent() {\n        return this.templateElement.content.cloneNode(true);\n    }\n    get templateElement() {\n        if (this.firstElementChild === null) {\n            const template = this.ownerDocument.createElement(\"template\");\n            this.appendChild(template);\n            return template;\n        }\n        else if (this.firstElementChild instanceof HTMLTemplateElement) {\n            return this.firstElementChild;\n        }\n        this.raise(\"first child element must be a <template> element\");\n    }\n    get action() {\n        return this.getAttribute(\"action\");\n    }\n    get target() {\n        return this.getAttribute(\"target\");\n    }\n    get targets() {\n        return this.getAttribute(\"targets\");\n    }\n    raise(message) {\n        throw new Error(`${this.description}: ${message}`);\n    }\n    get description() {\n        var _a, _b;\n        return (_b = ((_a = this.outerHTML.match(/<[^>]+>/)) !== null && _a !== void 0 ? _a : [])[0]) !== null && _b !== void 0 ? _b : \"<turbo-stream>\";\n    }\n    get beforeRenderEvent() {\n        return new CustomEvent(\"turbo:before-stream-render\", {\n            bubbles: true,\n            cancelable: true,\n            detail: { newStream: this, render: StreamElement.renderElement },\n        });\n    }\n    get targetElementsById() {\n        var _a;\n        const element = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.getElementById(this.target);\n        if (element !== null) {\n            return [element];\n        }\n        else {\n            return [];\n        }\n    }\n    get targetElementsByQuery() {\n        var _a;\n        const elements = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.querySelectorAll(this.targets);\n        if (elements.length !== 0) {\n            return Array.prototype.slice.call(elements);\n        }\n        else {\n            return [];\n        }\n    }\n}\n\nclass StreamSourceElement extends HTMLElement {\n    constructor() {\n        super(...arguments);\n        this.streamSource = null;\n    }\n    connectedCallback() {\n        this.streamSource = this.src.match(/^ws{1,2}:/) ? new WebSocket(this.src) : new EventSource(this.src);\n        connectStreamSource(this.streamSource);\n    }\n    disconnectedCallback() {\n        if (this.streamSource) {\n            disconnectStreamSource(this.streamSource);\n        }\n    }\n    get src() {\n        return this.getAttribute(\"src\") || \"\";\n    }\n}\n\nFrameElement.delegateConstructor = FrameController;\nif (customElements.get(\"turbo-frame\") === undefined) {\n    customElements.define(\"turbo-frame\", FrameElement);\n}\nif (customElements.get(\"turbo-stream\") === undefined) {\n    customElements.define(\"turbo-stream\", StreamElement);\n}\nif (customElements.get(\"turbo-stream-source\") === undefined) {\n    customElements.define(\"turbo-stream-source\", StreamSourceElement);\n}\n\n(() => {\n    let element = document.currentScript;\n    if (!element)\n        return;\n    if (element.hasAttribute(\"data-turbo-suppress-warning\"))\n        return;\n    element = element.parentElement;\n    while (element) {\n        if (element == document.body) {\n            return console.warn(unindent `\n        You are loading Turbo from a <script> element inside the <body> element. This is probably not what you meant to do!\n\n        Load your application’s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change.\n\n        For more information, see: https://turbo.hotwired.dev/handbook/building#working-with-script-elements\n\n        ——\n        Suppress this warning by adding a \"data-turbo-suppress-warning\" attribute to: %s\n      `, element.outerHTML);\n        }\n        element = element.parentElement;\n    }\n})();\n\nwindow.Turbo = Turbo;\nstart();\n\nexport { FrameElement, FrameLoadingStyle, FrameRenderer, PageRenderer, PageSnapshot, StreamActions, StreamElement, StreamSourceElement, cache, clearCache, connectStreamSource, disconnectStreamSource, navigator$1 as navigator, registerAdapter, renderStreamMessage, session, setConfirmMethod, setFormMode, setProgressBarDelay, start, visit };\n","let consumer\n\nexport async function getConsumer() {\n  return consumer || setConsumer(createConsumer().then(setConsumer))\n}\n\nexport function setConsumer(newConsumer) {\n  return consumer = newConsumer\n}\n\nexport async function createConsumer() {\n  const { createConsumer } = await import(/* webpackChunkName: \"actioncable\" */ \"@rails/actioncable/src\")\n  return createConsumer()\n}\n\nexport async function subscribeTo(channel, mixin) {\n  const { subscriptions } = await getConsumer()\n  return subscriptions.create(channel, mixin)\n}\n","// Based on https://github.com/nathan7/snakeize\n//\n// This software is released under the MIT license:\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\nexport default function walk (obj) {\n    if (!obj || typeof obj !== 'object') return obj;\n    if (obj instanceof Date || obj instanceof RegExp) return obj;\n    if (Array.isArray(obj)) return obj.map(walk);\n    return Object.keys(obj).reduce(function (acc, key) {\n        var camel = key[0].toLowerCase() + key.slice(1).replace(/([A-Z]+)/g, function (m, x) {\n            return '_' + x.toLowerCase();\n        });\n        acc[camel] = walk(obj[key]);\n        return acc;\n    }, {});\n};","import { connectStreamSource, disconnectStreamSource } from \"@hotwired/turbo\"\nimport { subscribeTo } from \"./cable\"\nimport snakeize from \"./snakeize\"\n\nclass TurboCableStreamSourceElement extends HTMLElement {\n  async connectedCallback() {\n    connectStreamSource(this)\n    this.subscription = await subscribeTo(this.channel, { received: this.dispatchMessageEvent.bind(this) })\n  }\n\n  disconnectedCallback() {\n    disconnectStreamSource(this)\n    if (this.subscription) this.subscription.unsubscribe()\n  }\n\n  dispatchMessageEvent(data) {\n    const event = new MessageEvent(\"message\", { data })\n    return this.dispatchEvent(event)\n  }\n\n  get channel() {\n    const channel = this.getAttribute(\"channel\")\n    const signed_stream_name = this.getAttribute(\"signed-stream-name\")\n    return { channel, signed_stream_name, ...snakeize({ ...this.dataset }) }\n  }\n}\n\ncustomElements.define(\"turbo-cable-stream-source\", TurboCableStreamSourceElement)\n","import \"./cable_stream_source_element\"\n\nimport * as Turbo from \"@hotwired/turbo\"\nexport { Turbo }\n\nimport * as cable from \"./cable\"\nexport { cable }\n\nimport { encodeMethodIntoRequestBody } from \"./fetch_requests\"\n\naddEventListener(\"turbo:before-fetch-request\", encodeMethodIntoRequestBody)\n","export function encodeMethodIntoRequestBody(event) {\n  if (event.target instanceof HTMLFormElement) {\n    const { target: form, detail: { fetchOptions } } = event\n\n    form.addEventListener(\"turbo:submit-start\", ({ detail: { formSubmission: { submitter } } }) => {\n      const method = (submitter && submitter.formMethod) || (fetchOptions.body && fetchOptions.body.get(\"_method\")) || form.getAttribute(\"method\")\n\n      if (!/get/i.test(method)) {\n        if (/post/i.test(method)) {\n          fetchOptions.body.delete(\"_method\")\n        } else {\n          fetchOptions.body.set(\"_method\", method)\n        }\n\n        fetchOptions.method = \"post\"\n      }\n    }, { once: true })\n  }\n}\n","/*\nStimulus 3.1.0\nCopyright © 2022 Basecamp, LLC\n */\nclass EventListener {\n    constructor(eventTarget, eventName, eventOptions) {\n        this.eventTarget = eventTarget;\n        this.eventName = eventName;\n        this.eventOptions = eventOptions;\n        this.unorderedBindings = new Set();\n    }\n    connect() {\n        this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n    }\n    disconnect() {\n        this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n    }\n    bindingConnected(binding) {\n        this.unorderedBindings.add(binding);\n    }\n    bindingDisconnected(binding) {\n        this.unorderedBindings.delete(binding);\n    }\n    handleEvent(event) {\n        const extendedEvent = extendEvent(event);\n        for (const binding of this.bindings) {\n            if (extendedEvent.immediatePropagationStopped) {\n                break;\n            }\n            else {\n                binding.handleEvent(extendedEvent);\n            }\n        }\n    }\n    get bindings() {\n        return Array.from(this.unorderedBindings).sort((left, right) => {\n            const leftIndex = left.index, rightIndex = right.index;\n            return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n        });\n    }\n}\nfunction extendEvent(event) {\n    if (\"immediatePropagationStopped\" in event) {\n        return event;\n    }\n    else {\n        const { stopImmediatePropagation } = event;\n        return Object.assign(event, {\n            immediatePropagationStopped: false,\n            stopImmediatePropagation() {\n                this.immediatePropagationStopped = true;\n                stopImmediatePropagation.call(this);\n            }\n        });\n    }\n}\n\nclass Dispatcher {\n    constructor(application) {\n        this.application = application;\n        this.eventListenerMaps = new Map;\n        this.started = false;\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.eventListeners.forEach(eventListener => eventListener.connect());\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            this.eventListeners.forEach(eventListener => eventListener.disconnect());\n        }\n    }\n    get eventListeners() {\n        return Array.from(this.eventListenerMaps.values())\n            .reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n    }\n    bindingConnected(binding) {\n        this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n    }\n    bindingDisconnected(binding) {\n        this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n    }\n    handleError(error, message, detail = {}) {\n        this.application.handleError(error, `Error ${message}`, detail);\n    }\n    fetchEventListenerForBinding(binding) {\n        const { eventTarget, eventName, eventOptions } = binding;\n        return this.fetchEventListener(eventTarget, eventName, eventOptions);\n    }\n    fetchEventListener(eventTarget, eventName, eventOptions) {\n        const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n        const cacheKey = this.cacheKey(eventName, eventOptions);\n        let eventListener = eventListenerMap.get(cacheKey);\n        if (!eventListener) {\n            eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n            eventListenerMap.set(cacheKey, eventListener);\n        }\n        return eventListener;\n    }\n    createEventListener(eventTarget, eventName, eventOptions) {\n        const eventListener = new EventListener(eventTarget, eventName, eventOptions);\n        if (this.started) {\n            eventListener.connect();\n        }\n        return eventListener;\n    }\n    fetchEventListenerMapForEventTarget(eventTarget) {\n        let eventListenerMap = this.eventListenerMaps.get(eventTarget);\n        if (!eventListenerMap) {\n            eventListenerMap = new Map;\n            this.eventListenerMaps.set(eventTarget, eventListenerMap);\n        }\n        return eventListenerMap;\n    }\n    cacheKey(eventName, eventOptions) {\n        const parts = [eventName];\n        Object.keys(eventOptions).sort().forEach(key => {\n            parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n        });\n        return parts.join(\":\");\n    }\n}\n\nconst descriptorPattern = /^((.+?)(@(window|document))?->)?(.+?)(#([^:]+?))(:(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n    const source = descriptorString.trim();\n    const matches = source.match(descriptorPattern) || [];\n    return {\n        eventTarget: parseEventTarget(matches[4]),\n        eventName: matches[2],\n        eventOptions: matches[9] ? parseEventOptions(matches[9]) : {},\n        identifier: matches[5],\n        methodName: matches[7]\n    };\n}\nfunction parseEventTarget(eventTargetName) {\n    if (eventTargetName == \"window\") {\n        return window;\n    }\n    else if (eventTargetName == \"document\") {\n        return document;\n    }\n}\nfunction parseEventOptions(eventOptions) {\n    return eventOptions.split(\":\").reduce((options, token) => Object.assign(options, { [token.replace(/^!/, \"\")]: !/^!/.test(token) }), {});\n}\nfunction stringifyEventTarget(eventTarget) {\n    if (eventTarget == window) {\n        return \"window\";\n    }\n    else if (eventTarget == document) {\n        return \"document\";\n    }\n}\n\nfunction camelize(value) {\n    return value.replace(/(?:[_-])([a-z0-9])/g, (_, char) => char.toUpperCase());\n}\nfunction capitalize(value) {\n    return value.charAt(0).toUpperCase() + value.slice(1);\n}\nfunction dasherize(value) {\n    return value.replace(/([A-Z])/g, (_, char) => `-${char.toLowerCase()}`);\n}\nfunction tokenize(value) {\n    return value.match(/[^\\s]+/g) || [];\n}\n\nclass Action {\n    constructor(element, index, descriptor) {\n        this.element = element;\n        this.index = index;\n        this.eventTarget = descriptor.eventTarget || element;\n        this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n        this.eventOptions = descriptor.eventOptions || {};\n        this.identifier = descriptor.identifier || error(\"missing identifier\");\n        this.methodName = descriptor.methodName || error(\"missing method name\");\n    }\n    static forToken(token) {\n        return new this(token.element, token.index, parseActionDescriptorString(token.content));\n    }\n    toString() {\n        const eventNameSuffix = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n        return `${this.eventName}${eventNameSuffix}->${this.identifier}#${this.methodName}`;\n    }\n    get params() {\n        const params = {};\n        const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`);\n        for (const { name, value } of Array.from(this.element.attributes)) {\n            const match = name.match(pattern);\n            const key = match && match[1];\n            if (key) {\n                params[camelize(key)] = typecast(value);\n            }\n        }\n        return params;\n    }\n    get eventTargetName() {\n        return stringifyEventTarget(this.eventTarget);\n    }\n}\nconst defaultEventNames = {\n    \"a\": e => \"click\",\n    \"button\": e => \"click\",\n    \"form\": e => \"submit\",\n    \"details\": e => \"toggle\",\n    \"input\": e => e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\",\n    \"select\": e => \"change\",\n    \"textarea\": e => \"input\"\n};\nfunction getDefaultEventNameForElement(element) {\n    const tagName = element.tagName.toLowerCase();\n    if (tagName in defaultEventNames) {\n        return defaultEventNames[tagName](element);\n    }\n}\nfunction error(message) {\n    throw new Error(message);\n}\nfunction typecast(value) {\n    try {\n        return JSON.parse(value);\n    }\n    catch (o_O) {\n        return value;\n    }\n}\n\nclass Binding {\n    constructor(context, action) {\n        this.context = context;\n        this.action = action;\n    }\n    get index() {\n        return this.action.index;\n    }\n    get eventTarget() {\n        return this.action.eventTarget;\n    }\n    get eventOptions() {\n        return this.action.eventOptions;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    handleEvent(event) {\n        if (this.willBeInvokedByEvent(event) && this.shouldBeInvokedPerSelf(event)) {\n            this.processStopPropagation(event);\n            this.processPreventDefault(event);\n            this.invokeWithEvent(event);\n        }\n    }\n    get eventName() {\n        return this.action.eventName;\n    }\n    get method() {\n        const method = this.controller[this.methodName];\n        if (typeof method == \"function\") {\n            return method;\n        }\n        throw new Error(`Action \"${this.action}\" references undefined method \"${this.methodName}\"`);\n    }\n    processStopPropagation(event) {\n        if (this.eventOptions.stop) {\n            event.stopPropagation();\n        }\n    }\n    processPreventDefault(event) {\n        if (this.eventOptions.prevent) {\n            event.preventDefault();\n        }\n    }\n    invokeWithEvent(event) {\n        const { target, currentTarget } = event;\n        try {\n            const { params } = this.action;\n            const actionEvent = Object.assign(event, { params });\n            this.method.call(this.controller, actionEvent);\n            this.context.logDebugActivity(this.methodName, { event, target, currentTarget, action: this.methodName });\n        }\n        catch (error) {\n            const { identifier, controller, element, index } = this;\n            const detail = { identifier, controller, element, index, event };\n            this.context.handleError(error, `invoking action \"${this.action}\"`, detail);\n        }\n    }\n    shouldBeInvokedPerSelf(event) {\n        if (this.action.eventOptions.self === true) {\n            return this.action.element === event.target;\n        }\n        else {\n            return true;\n        }\n    }\n    willBeInvokedByEvent(event) {\n        const eventTarget = event.target;\n        if (this.element === eventTarget) {\n            return true;\n        }\n        else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n            return this.scope.containsElement(eventTarget);\n        }\n        else {\n            return this.scope.containsElement(this.action.element);\n        }\n    }\n    get controller() {\n        return this.context.controller;\n    }\n    get methodName() {\n        return this.action.methodName;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n}\n\nclass ElementObserver {\n    constructor(element, delegate) {\n        this.mutationObserverInit = { attributes: true, childList: true, subtree: true };\n        this.element = element;\n        this.started = false;\n        this.delegate = delegate;\n        this.elements = new Set;\n        this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.mutationObserver.observe(this.element, this.mutationObserverInit);\n            this.refresh();\n        }\n    }\n    pause(callback) {\n        if (this.started) {\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n        callback();\n        if (!this.started) {\n            this.mutationObserver.observe(this.element, this.mutationObserverInit);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.mutationObserver.takeRecords();\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n    }\n    refresh() {\n        if (this.started) {\n            const matches = new Set(this.matchElementsInTree());\n            for (const element of Array.from(this.elements)) {\n                if (!matches.has(element)) {\n                    this.removeElement(element);\n                }\n            }\n            for (const element of Array.from(matches)) {\n                this.addElement(element);\n            }\n        }\n    }\n    processMutations(mutations) {\n        if (this.started) {\n            for (const mutation of mutations) {\n                this.processMutation(mutation);\n            }\n        }\n    }\n    processMutation(mutation) {\n        if (mutation.type == \"attributes\") {\n            this.processAttributeChange(mutation.target, mutation.attributeName);\n        }\n        else if (mutation.type == \"childList\") {\n            this.processRemovedNodes(mutation.removedNodes);\n            this.processAddedNodes(mutation.addedNodes);\n        }\n    }\n    processAttributeChange(node, attributeName) {\n        const element = node;\n        if (this.elements.has(element)) {\n            if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n                this.delegate.elementAttributeChanged(element, attributeName);\n            }\n            else {\n                this.removeElement(element);\n            }\n        }\n        else if (this.matchElement(element)) {\n            this.addElement(element);\n        }\n    }\n    processRemovedNodes(nodes) {\n        for (const node of Array.from(nodes)) {\n            const element = this.elementFromNode(node);\n            if (element) {\n                this.processTree(element, this.removeElement);\n            }\n        }\n    }\n    processAddedNodes(nodes) {\n        for (const node of Array.from(nodes)) {\n            const element = this.elementFromNode(node);\n            if (element && this.elementIsActive(element)) {\n                this.processTree(element, this.addElement);\n            }\n        }\n    }\n    matchElement(element) {\n        return this.delegate.matchElement(element);\n    }\n    matchElementsInTree(tree = this.element) {\n        return this.delegate.matchElementsInTree(tree);\n    }\n    processTree(tree, processor) {\n        for (const element of this.matchElementsInTree(tree)) {\n            processor.call(this, element);\n        }\n    }\n    elementFromNode(node) {\n        if (node.nodeType == Node.ELEMENT_NODE) {\n            return node;\n        }\n    }\n    elementIsActive(element) {\n        if (element.isConnected != this.element.isConnected) {\n            return false;\n        }\n        else {\n            return this.element.contains(element);\n        }\n    }\n    addElement(element) {\n        if (!this.elements.has(element)) {\n            if (this.elementIsActive(element)) {\n                this.elements.add(element);\n                if (this.delegate.elementMatched) {\n                    this.delegate.elementMatched(element);\n                }\n            }\n        }\n    }\n    removeElement(element) {\n        if (this.elements.has(element)) {\n            this.elements.delete(element);\n            if (this.delegate.elementUnmatched) {\n                this.delegate.elementUnmatched(element);\n            }\n        }\n    }\n}\n\nclass AttributeObserver {\n    constructor(element, attributeName, delegate) {\n        this.attributeName = attributeName;\n        this.delegate = delegate;\n        this.elementObserver = new ElementObserver(element, this);\n    }\n    get element() {\n        return this.elementObserver.element;\n    }\n    get selector() {\n        return `[${this.attributeName}]`;\n    }\n    start() {\n        this.elementObserver.start();\n    }\n    pause(callback) {\n        this.elementObserver.pause(callback);\n    }\n    stop() {\n        this.elementObserver.stop();\n    }\n    refresh() {\n        this.elementObserver.refresh();\n    }\n    get started() {\n        return this.elementObserver.started;\n    }\n    matchElement(element) {\n        return element.hasAttribute(this.attributeName);\n    }\n    matchElementsInTree(tree) {\n        const match = this.matchElement(tree) ? [tree] : [];\n        const matches = Array.from(tree.querySelectorAll(this.selector));\n        return match.concat(matches);\n    }\n    elementMatched(element) {\n        if (this.delegate.elementMatchedAttribute) {\n            this.delegate.elementMatchedAttribute(element, this.attributeName);\n        }\n    }\n    elementUnmatched(element) {\n        if (this.delegate.elementUnmatchedAttribute) {\n            this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n        }\n    }\n    elementAttributeChanged(element, attributeName) {\n        if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n            this.delegate.elementAttributeValueChanged(element, attributeName);\n        }\n    }\n}\n\nclass StringMapObserver {\n    constructor(element, delegate) {\n        this.element = element;\n        this.delegate = delegate;\n        this.started = false;\n        this.stringMap = new Map;\n        this.mutationObserver = new MutationObserver(mutations => this.processMutations(mutations));\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.mutationObserver.observe(this.element, { attributes: true, attributeOldValue: true });\n            this.refresh();\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.mutationObserver.takeRecords();\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n    }\n    refresh() {\n        if (this.started) {\n            for (const attributeName of this.knownAttributeNames) {\n                this.refreshAttribute(attributeName, null);\n            }\n        }\n    }\n    processMutations(mutations) {\n        if (this.started) {\n            for (const mutation of mutations) {\n                this.processMutation(mutation);\n            }\n        }\n    }\n    processMutation(mutation) {\n        const attributeName = mutation.attributeName;\n        if (attributeName) {\n            this.refreshAttribute(attributeName, mutation.oldValue);\n        }\n    }\n    refreshAttribute(attributeName, oldValue) {\n        const key = this.delegate.getStringMapKeyForAttribute(attributeName);\n        if (key != null) {\n            if (!this.stringMap.has(attributeName)) {\n                this.stringMapKeyAdded(key, attributeName);\n            }\n            const value = this.element.getAttribute(attributeName);\n            if (this.stringMap.get(attributeName) != value) {\n                this.stringMapValueChanged(value, key, oldValue);\n            }\n            if (value == null) {\n                const oldValue = this.stringMap.get(attributeName);\n                this.stringMap.delete(attributeName);\n                if (oldValue)\n                    this.stringMapKeyRemoved(key, attributeName, oldValue);\n            }\n            else {\n                this.stringMap.set(attributeName, value);\n            }\n        }\n    }\n    stringMapKeyAdded(key, attributeName) {\n        if (this.delegate.stringMapKeyAdded) {\n            this.delegate.stringMapKeyAdded(key, attributeName);\n        }\n    }\n    stringMapValueChanged(value, key, oldValue) {\n        if (this.delegate.stringMapValueChanged) {\n            this.delegate.stringMapValueChanged(value, key, oldValue);\n        }\n    }\n    stringMapKeyRemoved(key, attributeName, oldValue) {\n        if (this.delegate.stringMapKeyRemoved) {\n            this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);\n        }\n    }\n    get knownAttributeNames() {\n        return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n    }\n    get currentAttributeNames() {\n        return Array.from(this.element.attributes).map(attribute => attribute.name);\n    }\n    get recordedAttributeNames() {\n        return Array.from(this.stringMap.keys());\n    }\n}\n\nfunction add(map, key, value) {\n    fetch(map, key).add(value);\n}\nfunction del(map, key, value) {\n    fetch(map, key).delete(value);\n    prune(map, key);\n}\nfunction fetch(map, key) {\n    let values = map.get(key);\n    if (!values) {\n        values = new Set();\n        map.set(key, values);\n    }\n    return values;\n}\nfunction prune(map, key) {\n    const values = map.get(key);\n    if (values != null && values.size == 0) {\n        map.delete(key);\n    }\n}\n\nclass Multimap {\n    constructor() {\n        this.valuesByKey = new Map();\n    }\n    get keys() {\n        return Array.from(this.valuesByKey.keys());\n    }\n    get values() {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.reduce((values, set) => values.concat(Array.from(set)), []);\n    }\n    get size() {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.reduce((size, set) => size + set.size, 0);\n    }\n    add(key, value) {\n        add(this.valuesByKey, key, value);\n    }\n    delete(key, value) {\n        del(this.valuesByKey, key, value);\n    }\n    has(key, value) {\n        const values = this.valuesByKey.get(key);\n        return values != null && values.has(value);\n    }\n    hasKey(key) {\n        return this.valuesByKey.has(key);\n    }\n    hasValue(value) {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.some(set => set.has(value));\n    }\n    getValuesForKey(key) {\n        const values = this.valuesByKey.get(key);\n        return values ? Array.from(values) : [];\n    }\n    getKeysForValue(value) {\n        return Array.from(this.valuesByKey)\n            .filter(([key, values]) => values.has(value))\n            .map(([key, values]) => key);\n    }\n}\n\nclass IndexedMultimap extends Multimap {\n    constructor() {\n        super();\n        this.keysByValue = new Map;\n    }\n    get values() {\n        return Array.from(this.keysByValue.keys());\n    }\n    add(key, value) {\n        super.add(key, value);\n        add(this.keysByValue, value, key);\n    }\n    delete(key, value) {\n        super.delete(key, value);\n        del(this.keysByValue, value, key);\n    }\n    hasValue(value) {\n        return this.keysByValue.has(value);\n    }\n    getKeysForValue(value) {\n        const set = this.keysByValue.get(value);\n        return set ? Array.from(set) : [];\n    }\n}\n\nclass TokenListObserver {\n    constructor(element, attributeName, delegate) {\n        this.attributeObserver = new AttributeObserver(element, attributeName, this);\n        this.delegate = delegate;\n        this.tokensByElement = new Multimap;\n    }\n    get started() {\n        return this.attributeObserver.started;\n    }\n    start() {\n        this.attributeObserver.start();\n    }\n    pause(callback) {\n        this.attributeObserver.pause(callback);\n    }\n    stop() {\n        this.attributeObserver.stop();\n    }\n    refresh() {\n        this.attributeObserver.refresh();\n    }\n    get element() {\n        return this.attributeObserver.element;\n    }\n    get attributeName() {\n        return this.attributeObserver.attributeName;\n    }\n    elementMatchedAttribute(element) {\n        this.tokensMatched(this.readTokensForElement(element));\n    }\n    elementAttributeValueChanged(element) {\n        const [unmatchedTokens, matchedTokens] = this.refreshTokensForElement(element);\n        this.tokensUnmatched(unmatchedTokens);\n        this.tokensMatched(matchedTokens);\n    }\n    elementUnmatchedAttribute(element) {\n        this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n    }\n    tokensMatched(tokens) {\n        tokens.forEach(token => this.tokenMatched(token));\n    }\n    tokensUnmatched(tokens) {\n        tokens.forEach(token => this.tokenUnmatched(token));\n    }\n    tokenMatched(token) {\n        this.delegate.tokenMatched(token);\n        this.tokensByElement.add(token.element, token);\n    }\n    tokenUnmatched(token) {\n        this.delegate.tokenUnmatched(token);\n        this.tokensByElement.delete(token.element, token);\n    }\n    refreshTokensForElement(element) {\n        const previousTokens = this.tokensByElement.getValuesForKey(element);\n        const currentTokens = this.readTokensForElement(element);\n        const firstDifferingIndex = zip(previousTokens, currentTokens)\n            .findIndex(([previousToken, currentToken]) => !tokensAreEqual(previousToken, currentToken));\n        if (firstDifferingIndex == -1) {\n            return [[], []];\n        }\n        else {\n            return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n        }\n    }\n    readTokensForElement(element) {\n        const attributeName = this.attributeName;\n        const tokenString = element.getAttribute(attributeName) || \"\";\n        return parseTokenString(tokenString, element, attributeName);\n    }\n}\nfunction parseTokenString(tokenString, element, attributeName) {\n    return tokenString.trim().split(/\\s+/).filter(content => content.length)\n        .map((content, index) => ({ element, attributeName, content, index }));\n}\nfunction zip(left, right) {\n    const length = Math.max(left.length, right.length);\n    return Array.from({ length }, (_, index) => [left[index], right[index]]);\n}\nfunction tokensAreEqual(left, right) {\n    return left && right && left.index == right.index && left.content == right.content;\n}\n\nclass ValueListObserver {\n    constructor(element, attributeName, delegate) {\n        this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n        this.delegate = delegate;\n        this.parseResultsByToken = new WeakMap;\n        this.valuesByTokenByElement = new WeakMap;\n    }\n    get started() {\n        return this.tokenListObserver.started;\n    }\n    start() {\n        this.tokenListObserver.start();\n    }\n    stop() {\n        this.tokenListObserver.stop();\n    }\n    refresh() {\n        this.tokenListObserver.refresh();\n    }\n    get element() {\n        return this.tokenListObserver.element;\n    }\n    get attributeName() {\n        return this.tokenListObserver.attributeName;\n    }\n    tokenMatched(token) {\n        const { element } = token;\n        const { value } = this.fetchParseResultForToken(token);\n        if (value) {\n            this.fetchValuesByTokenForElement(element).set(token, value);\n            this.delegate.elementMatchedValue(element, value);\n        }\n    }\n    tokenUnmatched(token) {\n        const { element } = token;\n        const { value } = this.fetchParseResultForToken(token);\n        if (value) {\n            this.fetchValuesByTokenForElement(element).delete(token);\n            this.delegate.elementUnmatchedValue(element, value);\n        }\n    }\n    fetchParseResultForToken(token) {\n        let parseResult = this.parseResultsByToken.get(token);\n        if (!parseResult) {\n            parseResult = this.parseToken(token);\n            this.parseResultsByToken.set(token, parseResult);\n        }\n        return parseResult;\n    }\n    fetchValuesByTokenForElement(element) {\n        let valuesByToken = this.valuesByTokenByElement.get(element);\n        if (!valuesByToken) {\n            valuesByToken = new Map;\n            this.valuesByTokenByElement.set(element, valuesByToken);\n        }\n        return valuesByToken;\n    }\n    parseToken(token) {\n        try {\n            const value = this.delegate.parseValueForToken(token);\n            return { value };\n        }\n        catch (error) {\n            return { error };\n        }\n    }\n}\n\nclass BindingObserver {\n    constructor(context, delegate) {\n        this.context = context;\n        this.delegate = delegate;\n        this.bindingsByAction = new Map;\n    }\n    start() {\n        if (!this.valueListObserver) {\n            this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n            this.valueListObserver.start();\n        }\n    }\n    stop() {\n        if (this.valueListObserver) {\n            this.valueListObserver.stop();\n            delete this.valueListObserver;\n            this.disconnectAllActions();\n        }\n    }\n    get element() {\n        return this.context.element;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    get actionAttribute() {\n        return this.schema.actionAttribute;\n    }\n    get schema() {\n        return this.context.schema;\n    }\n    get bindings() {\n        return Array.from(this.bindingsByAction.values());\n    }\n    connectAction(action) {\n        const binding = new Binding(this.context, action);\n        this.bindingsByAction.set(action, binding);\n        this.delegate.bindingConnected(binding);\n    }\n    disconnectAction(action) {\n        const binding = this.bindingsByAction.get(action);\n        if (binding) {\n            this.bindingsByAction.delete(action);\n            this.delegate.bindingDisconnected(binding);\n        }\n    }\n    disconnectAllActions() {\n        this.bindings.forEach(binding => this.delegate.bindingDisconnected(binding));\n        this.bindingsByAction.clear();\n    }\n    parseValueForToken(token) {\n        const action = Action.forToken(token);\n        if (action.identifier == this.identifier) {\n            return action;\n        }\n    }\n    elementMatchedValue(element, action) {\n        this.connectAction(action);\n    }\n    elementUnmatchedValue(element, action) {\n        this.disconnectAction(action);\n    }\n}\n\nclass ValueObserver {\n    constructor(context, receiver) {\n        this.context = context;\n        this.receiver = receiver;\n        this.stringMapObserver = new StringMapObserver(this.element, this);\n        this.valueDescriptorMap = this.controller.valueDescriptorMap;\n    }\n    start() {\n        this.stringMapObserver.start();\n        this.invokeChangedCallbacksForDefaultValues();\n    }\n    stop() {\n        this.stringMapObserver.stop();\n    }\n    get element() {\n        return this.context.element;\n    }\n    get controller() {\n        return this.context.controller;\n    }\n    getStringMapKeyForAttribute(attributeName) {\n        if (attributeName in this.valueDescriptorMap) {\n            return this.valueDescriptorMap[attributeName].name;\n        }\n    }\n    stringMapKeyAdded(key, attributeName) {\n        const descriptor = this.valueDescriptorMap[attributeName];\n        if (!this.hasValue(key)) {\n            this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));\n        }\n    }\n    stringMapValueChanged(value, name, oldValue) {\n        const descriptor = this.valueDescriptorNameMap[name];\n        if (value === null)\n            return;\n        if (oldValue === null) {\n            oldValue = descriptor.writer(descriptor.defaultValue);\n        }\n        this.invokeChangedCallback(name, value, oldValue);\n    }\n    stringMapKeyRemoved(key, attributeName, oldValue) {\n        const descriptor = this.valueDescriptorNameMap[key];\n        if (this.hasValue(key)) {\n            this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);\n        }\n        else {\n            this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);\n        }\n    }\n    invokeChangedCallbacksForDefaultValues() {\n        for (const { key, name, defaultValue, writer } of this.valueDescriptors) {\n            if (defaultValue != undefined && !this.controller.data.has(key)) {\n                this.invokeChangedCallback(name, writer(defaultValue), undefined);\n            }\n        }\n    }\n    invokeChangedCallback(name, rawValue, rawOldValue) {\n        const changedMethodName = `${name}Changed`;\n        const changedMethod = this.receiver[changedMethodName];\n        if (typeof changedMethod == \"function\") {\n            const descriptor = this.valueDescriptorNameMap[name];\n            try {\n                const value = descriptor.reader(rawValue);\n                let oldValue = rawOldValue;\n                if (rawOldValue) {\n                    oldValue = descriptor.reader(rawOldValue);\n                }\n                changedMethod.call(this.receiver, value, oldValue);\n            }\n            catch (error) {\n                if (!(error instanceof TypeError))\n                    throw error;\n                throw new TypeError(`Stimulus Value \"${this.context.identifier}.${descriptor.name}\" - ${error.message}`);\n            }\n        }\n    }\n    get valueDescriptors() {\n        const { valueDescriptorMap } = this;\n        return Object.keys(valueDescriptorMap).map(key => valueDescriptorMap[key]);\n    }\n    get valueDescriptorNameMap() {\n        const descriptors = {};\n        Object.keys(this.valueDescriptorMap).forEach(key => {\n            const descriptor = this.valueDescriptorMap[key];\n            descriptors[descriptor.name] = descriptor;\n        });\n        return descriptors;\n    }\n    hasValue(attributeName) {\n        const descriptor = this.valueDescriptorNameMap[attributeName];\n        const hasMethodName = `has${capitalize(descriptor.name)}`;\n        return this.receiver[hasMethodName];\n    }\n}\n\nclass TargetObserver {\n    constructor(context, delegate) {\n        this.context = context;\n        this.delegate = delegate;\n        this.targetsByName = new Multimap;\n    }\n    start() {\n        if (!this.tokenListObserver) {\n            this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this);\n            this.tokenListObserver.start();\n        }\n    }\n    stop() {\n        if (this.tokenListObserver) {\n            this.disconnectAllTargets();\n            this.tokenListObserver.stop();\n            delete this.tokenListObserver;\n        }\n    }\n    tokenMatched({ element, content: name }) {\n        if (this.scope.containsElement(element)) {\n            this.connectTarget(element, name);\n        }\n    }\n    tokenUnmatched({ element, content: name }) {\n        this.disconnectTarget(element, name);\n    }\n    connectTarget(element, name) {\n        var _a;\n        if (!this.targetsByName.has(name, element)) {\n            this.targetsByName.add(name, element);\n            (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetConnected(element, name));\n        }\n    }\n    disconnectTarget(element, name) {\n        var _a;\n        if (this.targetsByName.has(name, element)) {\n            this.targetsByName.delete(name, element);\n            (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetDisconnected(element, name));\n        }\n    }\n    disconnectAllTargets() {\n        for (const name of this.targetsByName.keys) {\n            for (const element of this.targetsByName.getValuesForKey(name)) {\n                this.disconnectTarget(element, name);\n            }\n        }\n    }\n    get attributeName() {\n        return `data-${this.context.identifier}-target`;\n    }\n    get element() {\n        return this.context.element;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n}\n\nclass Context {\n    constructor(module, scope) {\n        this.logDebugActivity = (functionName, detail = {}) => {\n            const { identifier, controller, element } = this;\n            detail = Object.assign({ identifier, controller, element }, detail);\n            this.application.logDebugActivity(this.identifier, functionName, detail);\n        };\n        this.module = module;\n        this.scope = scope;\n        this.controller = new module.controllerConstructor(this);\n        this.bindingObserver = new BindingObserver(this, this.dispatcher);\n        this.valueObserver = new ValueObserver(this, this.controller);\n        this.targetObserver = new TargetObserver(this, this);\n        try {\n            this.controller.initialize();\n            this.logDebugActivity(\"initialize\");\n        }\n        catch (error) {\n            this.handleError(error, \"initializing controller\");\n        }\n    }\n    connect() {\n        this.bindingObserver.start();\n        this.valueObserver.start();\n        this.targetObserver.start();\n        try {\n            this.controller.connect();\n            this.logDebugActivity(\"connect\");\n        }\n        catch (error) {\n            this.handleError(error, \"connecting controller\");\n        }\n    }\n    disconnect() {\n        try {\n            this.controller.disconnect();\n            this.logDebugActivity(\"disconnect\");\n        }\n        catch (error) {\n            this.handleError(error, \"disconnecting controller\");\n        }\n        this.targetObserver.stop();\n        this.valueObserver.stop();\n        this.bindingObserver.stop();\n    }\n    get application() {\n        return this.module.application;\n    }\n    get identifier() {\n        return this.module.identifier;\n    }\n    get schema() {\n        return this.application.schema;\n    }\n    get dispatcher() {\n        return this.application.dispatcher;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get parentElement() {\n        return this.element.parentElement;\n    }\n    handleError(error, message, detail = {}) {\n        const { identifier, controller, element } = this;\n        detail = Object.assign({ identifier, controller, element }, detail);\n        this.application.handleError(error, `Error ${message}`, detail);\n    }\n    targetConnected(element, name) {\n        this.invokeControllerMethod(`${name}TargetConnected`, element);\n    }\n    targetDisconnected(element, name) {\n        this.invokeControllerMethod(`${name}TargetDisconnected`, element);\n    }\n    invokeControllerMethod(methodName, ...args) {\n        const controller = this.controller;\n        if (typeof controller[methodName] == \"function\") {\n            controller[methodName](...args);\n        }\n    }\n}\n\nfunction readInheritableStaticArrayValues(constructor, propertyName) {\n    const ancestors = getAncestorsForConstructor(constructor);\n    return Array.from(ancestors.reduce((values, constructor) => {\n        getOwnStaticArrayValues(constructor, propertyName).forEach(name => values.add(name));\n        return values;\n    }, new Set));\n}\nfunction readInheritableStaticObjectPairs(constructor, propertyName) {\n    const ancestors = getAncestorsForConstructor(constructor);\n    return ancestors.reduce((pairs, constructor) => {\n        pairs.push(...getOwnStaticObjectPairs(constructor, propertyName));\n        return pairs;\n    }, []);\n}\nfunction getAncestorsForConstructor(constructor) {\n    const ancestors = [];\n    while (constructor) {\n        ancestors.push(constructor);\n        constructor = Object.getPrototypeOf(constructor);\n    }\n    return ancestors.reverse();\n}\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n    const definition = constructor[propertyName];\n    return Array.isArray(definition) ? definition : [];\n}\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n    const definition = constructor[propertyName];\n    return definition ? Object.keys(definition).map(key => [key, definition[key]]) : [];\n}\n\nfunction bless(constructor) {\n    return shadow(constructor, getBlessedProperties(constructor));\n}\nfunction shadow(constructor, properties) {\n    const shadowConstructor = extend(constructor);\n    const shadowProperties = getShadowProperties(constructor.prototype, properties);\n    Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n    return shadowConstructor;\n}\nfunction getBlessedProperties(constructor) {\n    const blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n    return blessings.reduce((blessedProperties, blessing) => {\n        const properties = blessing(constructor);\n        for (const key in properties) {\n            const descriptor = blessedProperties[key] || {};\n            blessedProperties[key] = Object.assign(descriptor, properties[key]);\n        }\n        return blessedProperties;\n    }, {});\n}\nfunction getShadowProperties(prototype, properties) {\n    return getOwnKeys(properties).reduce((shadowProperties, key) => {\n        const descriptor = getShadowedDescriptor(prototype, properties, key);\n        if (descriptor) {\n            Object.assign(shadowProperties, { [key]: descriptor });\n        }\n        return shadowProperties;\n    }, {});\n}\nfunction getShadowedDescriptor(prototype, properties, key) {\n    const shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n    const shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n    if (!shadowedByValue) {\n        const descriptor = Object.getOwnPropertyDescriptor(properties, key).value;\n        if (shadowingDescriptor) {\n            descriptor.get = shadowingDescriptor.get || descriptor.get;\n            descriptor.set = shadowingDescriptor.set || descriptor.set;\n        }\n        return descriptor;\n    }\n}\nconst getOwnKeys = (() => {\n    if (typeof Object.getOwnPropertySymbols == \"function\") {\n        return (object) => [\n            ...Object.getOwnPropertyNames(object),\n            ...Object.getOwnPropertySymbols(object)\n        ];\n    }\n    else {\n        return Object.getOwnPropertyNames;\n    }\n})();\nconst extend = (() => {\n    function extendWithReflect(constructor) {\n        function extended() {\n            return Reflect.construct(constructor, arguments, new.target);\n        }\n        extended.prototype = Object.create(constructor.prototype, {\n            constructor: { value: extended }\n        });\n        Reflect.setPrototypeOf(extended, constructor);\n        return extended;\n    }\n    function testReflectExtension() {\n        const a = function () { this.a.call(this); };\n        const b = extendWithReflect(a);\n        b.prototype.a = function () { };\n        return new b;\n    }\n    try {\n        testReflectExtension();\n        return extendWithReflect;\n    }\n    catch (error) {\n        return (constructor) => class extended extends constructor {\n        };\n    }\n})();\n\nfunction blessDefinition(definition) {\n    return {\n        identifier: definition.identifier,\n        controllerConstructor: bless(definition.controllerConstructor)\n    };\n}\n\nclass Module {\n    constructor(application, definition) {\n        this.application = application;\n        this.definition = blessDefinition(definition);\n        this.contextsByScope = new WeakMap;\n        this.connectedContexts = new Set;\n    }\n    get identifier() {\n        return this.definition.identifier;\n    }\n    get controllerConstructor() {\n        return this.definition.controllerConstructor;\n    }\n    get contexts() {\n        return Array.from(this.connectedContexts);\n    }\n    connectContextForScope(scope) {\n        const context = this.fetchContextForScope(scope);\n        this.connectedContexts.add(context);\n        context.connect();\n    }\n    disconnectContextForScope(scope) {\n        const context = this.contextsByScope.get(scope);\n        if (context) {\n            this.connectedContexts.delete(context);\n            context.disconnect();\n        }\n    }\n    fetchContextForScope(scope) {\n        let context = this.contextsByScope.get(scope);\n        if (!context) {\n            context = new Context(this, scope);\n            this.contextsByScope.set(scope, context);\n        }\n        return context;\n    }\n}\n\nclass ClassMap {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    has(name) {\n        return this.data.has(this.getDataKey(name));\n    }\n    get(name) {\n        return this.getAll(name)[0];\n    }\n    getAll(name) {\n        const tokenString = this.data.get(this.getDataKey(name)) || \"\";\n        return tokenize(tokenString);\n    }\n    getAttributeName(name) {\n        return this.data.getAttributeNameForKey(this.getDataKey(name));\n    }\n    getDataKey(name) {\n        return `${name}-class`;\n    }\n    get data() {\n        return this.scope.data;\n    }\n}\n\nclass DataMap {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get(key) {\n        const name = this.getAttributeNameForKey(key);\n        return this.element.getAttribute(name);\n    }\n    set(key, value) {\n        const name = this.getAttributeNameForKey(key);\n        this.element.setAttribute(name, value);\n        return this.get(key);\n    }\n    has(key) {\n        const name = this.getAttributeNameForKey(key);\n        return this.element.hasAttribute(name);\n    }\n    delete(key) {\n        if (this.has(key)) {\n            const name = this.getAttributeNameForKey(key);\n            this.element.removeAttribute(name);\n            return true;\n        }\n        else {\n            return false;\n        }\n    }\n    getAttributeNameForKey(key) {\n        return `data-${this.identifier}-${dasherize(key)}`;\n    }\n}\n\nclass Guide {\n    constructor(logger) {\n        this.warnedKeysByObject = new WeakMap;\n        this.logger = logger;\n    }\n    warn(object, key, message) {\n        let warnedKeys = this.warnedKeysByObject.get(object);\n        if (!warnedKeys) {\n            warnedKeys = new Set;\n            this.warnedKeysByObject.set(object, warnedKeys);\n        }\n        if (!warnedKeys.has(key)) {\n            warnedKeys.add(key);\n            this.logger.warn(message, object);\n        }\n    }\n}\n\nfunction attributeValueContainsToken(attributeName, token) {\n    return `[${attributeName}~=\"${token}\"]`;\n}\n\nclass TargetSet {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get schema() {\n        return this.scope.schema;\n    }\n    has(targetName) {\n        return this.find(targetName) != null;\n    }\n    find(...targetNames) {\n        return targetNames.reduce((target, targetName) => target\n            || this.findTarget(targetName)\n            || this.findLegacyTarget(targetName), undefined);\n    }\n    findAll(...targetNames) {\n        return targetNames.reduce((targets, targetName) => [\n            ...targets,\n            ...this.findAllTargets(targetName),\n            ...this.findAllLegacyTargets(targetName)\n        ], []);\n    }\n    findTarget(targetName) {\n        const selector = this.getSelectorForTargetName(targetName);\n        return this.scope.findElement(selector);\n    }\n    findAllTargets(targetName) {\n        const selector = this.getSelectorForTargetName(targetName);\n        return this.scope.findAllElements(selector);\n    }\n    getSelectorForTargetName(targetName) {\n        const attributeName = this.schema.targetAttributeForScope(this.identifier);\n        return attributeValueContainsToken(attributeName, targetName);\n    }\n    findLegacyTarget(targetName) {\n        const selector = this.getLegacySelectorForTargetName(targetName);\n        return this.deprecate(this.scope.findElement(selector), targetName);\n    }\n    findAllLegacyTargets(targetName) {\n        const selector = this.getLegacySelectorForTargetName(targetName);\n        return this.scope.findAllElements(selector).map(element => this.deprecate(element, targetName));\n    }\n    getLegacySelectorForTargetName(targetName) {\n        const targetDescriptor = `${this.identifier}.${targetName}`;\n        return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n    }\n    deprecate(element, targetName) {\n        if (element) {\n            const { identifier } = this;\n            const attributeName = this.schema.targetAttribute;\n            const revisedAttributeName = this.schema.targetAttributeForScope(identifier);\n            this.guide.warn(element, `target:${targetName}`, `Please replace ${attributeName}=\"${identifier}.${targetName}\" with ${revisedAttributeName}=\"${targetName}\". ` +\n                `The ${attributeName} attribute is deprecated and will be removed in a future version of Stimulus.`);\n        }\n        return element;\n    }\n    get guide() {\n        return this.scope.guide;\n    }\n}\n\nclass Scope {\n    constructor(schema, element, identifier, logger) {\n        this.targets = new TargetSet(this);\n        this.classes = new ClassMap(this);\n        this.data = new DataMap(this);\n        this.containsElement = (element) => {\n            return element.closest(this.controllerSelector) === this.element;\n        };\n        this.schema = schema;\n        this.element = element;\n        this.identifier = identifier;\n        this.guide = new Guide(logger);\n    }\n    findElement(selector) {\n        return this.element.matches(selector)\n            ? this.element\n            : this.queryElements(selector).find(this.containsElement);\n    }\n    findAllElements(selector) {\n        return [\n            ...this.element.matches(selector) ? [this.element] : [],\n            ...this.queryElements(selector).filter(this.containsElement)\n        ];\n    }\n    queryElements(selector) {\n        return Array.from(this.element.querySelectorAll(selector));\n    }\n    get controllerSelector() {\n        return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n    }\n}\n\nclass ScopeObserver {\n    constructor(element, schema, delegate) {\n        this.element = element;\n        this.schema = schema;\n        this.delegate = delegate;\n        this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n        this.scopesByIdentifierByElement = new WeakMap;\n        this.scopeReferenceCounts = new WeakMap;\n    }\n    start() {\n        this.valueListObserver.start();\n    }\n    stop() {\n        this.valueListObserver.stop();\n    }\n    get controllerAttribute() {\n        return this.schema.controllerAttribute;\n    }\n    parseValueForToken(token) {\n        const { element, content: identifier } = token;\n        const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n        let scope = scopesByIdentifier.get(identifier);\n        if (!scope) {\n            scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n            scopesByIdentifier.set(identifier, scope);\n        }\n        return scope;\n    }\n    elementMatchedValue(element, value) {\n        const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n        this.scopeReferenceCounts.set(value, referenceCount);\n        if (referenceCount == 1) {\n            this.delegate.scopeConnected(value);\n        }\n    }\n    elementUnmatchedValue(element, value) {\n        const referenceCount = this.scopeReferenceCounts.get(value);\n        if (referenceCount) {\n            this.scopeReferenceCounts.set(value, referenceCount - 1);\n            if (referenceCount == 1) {\n                this.delegate.scopeDisconnected(value);\n            }\n        }\n    }\n    fetchScopesByIdentifierForElement(element) {\n        let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n        if (!scopesByIdentifier) {\n            scopesByIdentifier = new Map;\n            this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n        }\n        return scopesByIdentifier;\n    }\n}\n\nclass Router {\n    constructor(application) {\n        this.application = application;\n        this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n        this.scopesByIdentifier = new Multimap;\n        this.modulesByIdentifier = new Map;\n    }\n    get element() {\n        return this.application.element;\n    }\n    get schema() {\n        return this.application.schema;\n    }\n    get logger() {\n        return this.application.logger;\n    }\n    get controllerAttribute() {\n        return this.schema.controllerAttribute;\n    }\n    get modules() {\n        return Array.from(this.modulesByIdentifier.values());\n    }\n    get contexts() {\n        return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);\n    }\n    start() {\n        this.scopeObserver.start();\n    }\n    stop() {\n        this.scopeObserver.stop();\n    }\n    loadDefinition(definition) {\n        this.unloadIdentifier(definition.identifier);\n        const module = new Module(this.application, definition);\n        this.connectModule(module);\n    }\n    unloadIdentifier(identifier) {\n        const module = this.modulesByIdentifier.get(identifier);\n        if (module) {\n            this.disconnectModule(module);\n        }\n    }\n    getContextForElementAndIdentifier(element, identifier) {\n        const module = this.modulesByIdentifier.get(identifier);\n        if (module) {\n            return module.contexts.find(context => context.element == element);\n        }\n    }\n    handleError(error, message, detail) {\n        this.application.handleError(error, message, detail);\n    }\n    createScopeForElementAndIdentifier(element, identifier) {\n        return new Scope(this.schema, element, identifier, this.logger);\n    }\n    scopeConnected(scope) {\n        this.scopesByIdentifier.add(scope.identifier, scope);\n        const module = this.modulesByIdentifier.get(scope.identifier);\n        if (module) {\n            module.connectContextForScope(scope);\n        }\n    }\n    scopeDisconnected(scope) {\n        this.scopesByIdentifier.delete(scope.identifier, scope);\n        const module = this.modulesByIdentifier.get(scope.identifier);\n        if (module) {\n            module.disconnectContextForScope(scope);\n        }\n    }\n    connectModule(module) {\n        this.modulesByIdentifier.set(module.identifier, module);\n        const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n        scopes.forEach(scope => module.connectContextForScope(scope));\n    }\n    disconnectModule(module) {\n        this.modulesByIdentifier.delete(module.identifier);\n        const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n        scopes.forEach(scope => module.disconnectContextForScope(scope));\n    }\n}\n\nconst defaultSchema = {\n    controllerAttribute: \"data-controller\",\n    actionAttribute: \"data-action\",\n    targetAttribute: \"data-target\",\n    targetAttributeForScope: identifier => `data-${identifier}-target`\n};\n\nclass Application {\n    constructor(element = document.documentElement, schema = defaultSchema) {\n        this.logger = console;\n        this.debug = false;\n        this.logDebugActivity = (identifier, functionName, detail = {}) => {\n            if (this.debug) {\n                this.logFormattedMessage(identifier, functionName, detail);\n            }\n        };\n        this.element = element;\n        this.schema = schema;\n        this.dispatcher = new Dispatcher(this);\n        this.router = new Router(this);\n    }\n    static start(element, schema) {\n        const application = new Application(element, schema);\n        application.start();\n        return application;\n    }\n    async start() {\n        await domReady();\n        this.logDebugActivity(\"application\", \"starting\");\n        this.dispatcher.start();\n        this.router.start();\n        this.logDebugActivity(\"application\", \"start\");\n    }\n    stop() {\n        this.logDebugActivity(\"application\", \"stopping\");\n        this.dispatcher.stop();\n        this.router.stop();\n        this.logDebugActivity(\"application\", \"stop\");\n    }\n    register(identifier, controllerConstructor) {\n        this.load({ identifier, controllerConstructor });\n    }\n    load(head, ...rest) {\n        const definitions = Array.isArray(head) ? head : [head, ...rest];\n        definitions.forEach(definition => {\n            if (definition.controllerConstructor.shouldLoad) {\n                this.router.loadDefinition(definition);\n            }\n        });\n    }\n    unload(head, ...rest) {\n        const identifiers = Array.isArray(head) ? head : [head, ...rest];\n        identifiers.forEach(identifier => this.router.unloadIdentifier(identifier));\n    }\n    get controllers() {\n        return this.router.contexts.map(context => context.controller);\n    }\n    getControllerForElementAndIdentifier(element, identifier) {\n        const context = this.router.getContextForElementAndIdentifier(element, identifier);\n        return context ? context.controller : null;\n    }\n    handleError(error, message, detail) {\n        var _a;\n        this.logger.error(`%s\\n\\n%o\\n\\n%o`, message, error, detail);\n        (_a = window.onerror) === null || _a === void 0 ? void 0 : _a.call(window, message, \"\", 0, 0, error);\n    }\n    logFormattedMessage(identifier, functionName, detail = {}) {\n        detail = Object.assign({ application: this }, detail);\n        this.logger.groupCollapsed(`${identifier} #${functionName}`);\n        this.logger.log(\"details:\", Object.assign({}, detail));\n        this.logger.groupEnd();\n    }\n}\nfunction domReady() {\n    return new Promise(resolve => {\n        if (document.readyState == \"loading\") {\n            document.addEventListener(\"DOMContentLoaded\", () => resolve());\n        }\n        else {\n            resolve();\n        }\n    });\n}\n\nfunction ClassPropertiesBlessing(constructor) {\n    const classes = readInheritableStaticArrayValues(constructor, \"classes\");\n    return classes.reduce((properties, classDefinition) => {\n        return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n    }, {});\n}\nfunction propertiesForClassDefinition(key) {\n    return {\n        [`${key}Class`]: {\n            get() {\n                const { classes } = this;\n                if (classes.has(key)) {\n                    return classes.get(key);\n                }\n                else {\n                    const attribute = classes.getAttributeName(key);\n                    throw new Error(`Missing attribute \"${attribute}\"`);\n                }\n            }\n        },\n        [`${key}Classes`]: {\n            get() {\n                return this.classes.getAll(key);\n            }\n        },\n        [`has${capitalize(key)}Class`]: {\n            get() {\n                return this.classes.has(key);\n            }\n        }\n    };\n}\n\nfunction TargetPropertiesBlessing(constructor) {\n    const targets = readInheritableStaticArrayValues(constructor, \"targets\");\n    return targets.reduce((properties, targetDefinition) => {\n        return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n    }, {});\n}\nfunction propertiesForTargetDefinition(name) {\n    return {\n        [`${name}Target`]: {\n            get() {\n                const target = this.targets.find(name);\n                if (target) {\n                    return target;\n                }\n                else {\n                    throw new Error(`Missing target element \"${name}\" for \"${this.identifier}\" controller`);\n                }\n            }\n        },\n        [`${name}Targets`]: {\n            get() {\n                return this.targets.findAll(name);\n            }\n        },\n        [`has${capitalize(name)}Target`]: {\n            get() {\n                return this.targets.has(name);\n            }\n        }\n    };\n}\n\nfunction ValuePropertiesBlessing(constructor) {\n    const valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n    const propertyDescriptorMap = {\n        valueDescriptorMap: {\n            get() {\n                return valueDefinitionPairs.reduce((result, valueDefinitionPair) => {\n                    const valueDescriptor = parseValueDefinitionPair(valueDefinitionPair, this.identifier);\n                    const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key);\n                    return Object.assign(result, { [attributeName]: valueDescriptor });\n                }, {});\n            }\n        }\n    };\n    return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => {\n        return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n    }, propertyDescriptorMap);\n}\nfunction propertiesForValueDefinitionPair(valueDefinitionPair, controller) {\n    const definition = parseValueDefinitionPair(valueDefinitionPair, controller);\n    const { key, name, reader: read, writer: write } = definition;\n    return {\n        [name]: {\n            get() {\n                const value = this.data.get(key);\n                if (value !== null) {\n                    return read(value);\n                }\n                else {\n                    return definition.defaultValue;\n                }\n            },\n            set(value) {\n                if (value === undefined) {\n                    this.data.delete(key);\n                }\n                else {\n                    this.data.set(key, write(value));\n                }\n            }\n        },\n        [`has${capitalize(name)}`]: {\n            get() {\n                return this.data.has(key) || definition.hasCustomDefaultValue;\n            }\n        }\n    };\n}\nfunction parseValueDefinitionPair([token, typeDefinition], controller) {\n    return valueDescriptorForTokenAndTypeDefinition({\n        controller,\n        token,\n        typeDefinition,\n    });\n}\nfunction parseValueTypeConstant(constant) {\n    switch (constant) {\n        case Array: return \"array\";\n        case Boolean: return \"boolean\";\n        case Number: return \"number\";\n        case Object: return \"object\";\n        case String: return \"string\";\n    }\n}\nfunction parseValueTypeDefault(defaultValue) {\n    switch (typeof defaultValue) {\n        case \"boolean\": return \"boolean\";\n        case \"number\": return \"number\";\n        case \"string\": return \"string\";\n    }\n    if (Array.isArray(defaultValue))\n        return \"array\";\n    if (Object.prototype.toString.call(defaultValue) === \"[object Object]\")\n        return \"object\";\n}\nfunction parseValueTypeObject(payload) {\n    const typeFromObject = parseValueTypeConstant(payload.typeObject.type);\n    if (!typeFromObject)\n        return;\n    const defaultValueType = parseValueTypeDefault(payload.typeObject.default);\n    if (typeFromObject !== defaultValueType) {\n        const propertyPath = payload.controller ? `${payload.controller}.${payload.token}` : payload.token;\n        throw new Error(`The specified default value for the Stimulus Value \"${propertyPath}\" must match the defined type \"${typeFromObject}\". The provided default value of \"${payload.typeObject.default}\" is of type \"${defaultValueType}\".`);\n    }\n    return typeFromObject;\n}\nfunction parseValueTypeDefinition(payload) {\n    const typeFromObject = parseValueTypeObject({\n        controller: payload.controller,\n        token: payload.token,\n        typeObject: payload.typeDefinition\n    });\n    const typeFromDefaultValue = parseValueTypeDefault(payload.typeDefinition);\n    const typeFromConstant = parseValueTypeConstant(payload.typeDefinition);\n    const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n    if (type)\n        return type;\n    const propertyPath = payload.controller ? `${payload.controller}.${payload.typeDefinition}` : payload.token;\n    throw new Error(`Unknown value type \"${propertyPath}\" for \"${payload.token}\" value`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n    const constant = parseValueTypeConstant(typeDefinition);\n    if (constant)\n        return defaultValuesByType[constant];\n    const defaultValue = typeDefinition.default;\n    if (defaultValue !== undefined)\n        return defaultValue;\n    return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(payload) {\n    const key = `${dasherize(payload.token)}-value`;\n    const type = parseValueTypeDefinition(payload);\n    return {\n        type,\n        key,\n        name: camelize(key),\n        get defaultValue() { return defaultValueForDefinition(payload.typeDefinition); },\n        get hasCustomDefaultValue() { return parseValueTypeDefault(payload.typeDefinition) !== undefined; },\n        reader: readers[type],\n        writer: writers[type] || writers.default\n    };\n}\nconst defaultValuesByType = {\n    get array() { return []; },\n    boolean: false,\n    number: 0,\n    get object() { return {}; },\n    string: \"\"\n};\nconst readers = {\n    array(value) {\n        const array = JSON.parse(value);\n        if (!Array.isArray(array)) {\n            throw new TypeError(`expected value of type \"array\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(array)}\"`);\n        }\n        return array;\n    },\n    boolean(value) {\n        return !(value == \"0\" || String(value).toLowerCase() == \"false\");\n    },\n    number(value) {\n        return Number(value);\n    },\n    object(value) {\n        const object = JSON.parse(value);\n        if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n            throw new TypeError(`expected value of type \"object\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(object)}\"`);\n        }\n        return object;\n    },\n    string(value) {\n        return value;\n    }\n};\nconst writers = {\n    default: writeString,\n    array: writeJSON,\n    object: writeJSON\n};\nfunction writeJSON(value) {\n    return JSON.stringify(value);\n}\nfunction writeString(value) {\n    return `${value}`;\n}\n\nclass Controller {\n    constructor(context) {\n        this.context = context;\n    }\n    static get shouldLoad() {\n        return true;\n    }\n    get application() {\n        return this.context.application;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get targets() {\n        return this.scope.targets;\n    }\n    get classes() {\n        return this.scope.classes;\n    }\n    get data() {\n        return this.scope.data;\n    }\n    initialize() {\n    }\n    connect() {\n    }\n    disconnect() {\n    }\n    dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true } = {}) {\n        const type = prefix ? `${prefix}:${eventName}` : eventName;\n        const event = new CustomEvent(type, { detail, bubbles, cancelable });\n        target.dispatchEvent(event);\n        return event;\n    }\n}\nController.blessings = [ClassPropertiesBlessing, TargetPropertiesBlessing, ValuePropertiesBlessing];\nController.targets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };\n","import { Controller } from \"@hotwired/stimulus\"\n\nconst optionSelector = \"[role='option']:not([aria-disabled])\"\nconst activeSelector = \"[aria-selected='true']\"\n\nexport default class Autocomplete extends Controller {\n  static targets = [\"input\", \"hidden\", \"results\"]\n  static classes = [\"selected\"]\n  static values = {\n    ready: Boolean,\n    submitOnEnter: Boolean,\n    url: String,\n    minLength: Number,\n    delay: { type: Number, default: 300 },\n  }\n\n  connect() {\n    this.close()\n\n    if(!this.inputTarget.hasAttribute(\"autocomplete\")) this.inputTarget.setAttribute(\"autocomplete\", \"off\")\n    this.inputTarget.setAttribute(\"spellcheck\", \"false\")\n\n    this.mouseDown = false\n\n    this.onInputChange = debounce(this.onInputChange, this.delayValue)\n\n    this.inputTarget.addEventListener(\"keydown\", this.onKeydown)\n    this.inputTarget.addEventListener(\"blur\", this.onInputBlur)\n    this.inputTarget.addEventListener(\"input\", this.onInputChange)\n    this.resultsTarget.addEventListener(\"mousedown\", this.onResultsMouseDown)\n    this.resultsTarget.addEventListener(\"click\", this.onResultsClick)\n\n    if (this.inputTarget.hasAttribute(\"autofocus\")) {\n      this.inputTarget.focus()\n    }\n\n    this.readyValue = true\n  }\n\n  disconnect() {\n    if (this.hasInputTarget) {\n      this.inputTarget.removeEventListener(\"keydown\", this.onKeydown)\n      this.inputTarget.removeEventListener(\"blur\", this.onInputBlur)\n      this.inputTarget.removeEventListener(\"input\", this.onInputChange)\n    }\n\n    if (this.hasResultsTarget) {\n      this.resultsTarget.removeEventListener(\"mousedown\", this.onResultsMouseDown)\n      this.resultsTarget.removeEventListener(\"click\", this.onResultsClick)\n    }\n  }\n\n  sibling(next) {\n    const options = this.options\n    const selected = this.selectedOption\n    const index = options.indexOf(selected)\n    const sibling = next ? options[index + 1] : options[index - 1]\n    const def = next ? options[0] : options[options.length - 1]\n    return sibling || def\n  }\n\n  select(target) {\n    const previouslySelected = this.selectedOption\n    if (previouslySelected) {\n      previouslySelected.removeAttribute(\"aria-selected\")\n      previouslySelected.classList.remove(...this.selectedClassesOrDefault)\n    }\n\n    target.setAttribute(\"aria-selected\", \"true\")\n    target.classList.add(...this.selectedClassesOrDefault)\n    this.inputTarget.setAttribute(\"aria-activedescendant\", target.id)\n    target.scrollIntoView({ behavior: \"smooth\", block: \"nearest\" })\n  }\n\n  onKeydown = (event) => {\n    const handler = this[`on${event.key}Keydown`]\n    if (handler) handler(event)\n  }\n\n  onEscapeKeydown = (event) => {\n    if (!this.resultsShown) return\n\n    this.hideAndRemoveOptions()\n    event.stopPropagation()\n    event.preventDefault()\n  }\n\n  onArrowDownKeydown = (event) => {\n    const item = this.sibling(true)\n    if (item) this.select(item)\n    event.preventDefault()\n  }\n\n  onArrowUpKeydown = (event) => {\n    const item = this.sibling(false)\n    if (item) this.select(item)\n    event.preventDefault()\n  }\n\n  onTabKeydown = (event) => {\n    const selected = this.selectedOption\n    if (selected) this.commit(selected)\n  }\n\n  onEnterKeydown = (event) => {\n    const selected = this.selectedOption\n    if (selected && this.resultsShown) {\n      this.commit(selected)\n      if (!this.hasSubmitOnEnterValue) {\n        event.preventDefault()\n      }\n    }\n  }\n\n  onInputBlur = () => {\n    if (this.mouseDown) return\n    this.close()\n  }\n\n  commit(selected) {\n    if (selected.getAttribute(\"aria-disabled\") === \"true\") return\n\n    if (selected instanceof HTMLAnchorElement) {\n      selected.click()\n      this.close()\n      return\n    }\n\n    const textValue = selected.getAttribute(\"data-autocomplete-label\") || selected.textContent.trim()\n    const value = selected.getAttribute(\"data-autocomplete-value\") || textValue\n    this.inputTarget.value = textValue\n\n    if (this.hasHiddenTarget) {\n      this.hiddenTarget.value = value\n      this.hiddenTarget.dispatchEvent(new Event(\"input\"))\n      this.hiddenTarget.dispatchEvent(new Event(\"change\"))\n    } else {\n      this.inputTarget.value = value\n    }\n\n    this.inputTarget.focus()\n    this.hideAndRemoveOptions()\n\n    this.element.dispatchEvent(\n      new CustomEvent(\"autocomplete.change\", {\n        bubbles: true,\n        detail: { value: value, textValue: textValue, selected: selected }\n      })\n    )\n  }\n\n  clear() {\n    this.inputTarget.value = \"\"\n    if (this.hasHiddenTarget) this.hiddenTarget.value = \"\"\n  }\n\n  onResultsClick = (event) => {\n    if (!(event.target instanceof Element)) return\n    const selected = event.target.closest(optionSelector)\n    if (selected) this.commit(selected)\n  }\n\n  onResultsMouseDown = () => {\n    this.mouseDown = true\n    this.resultsTarget.addEventListener(\"mouseup\", () => {\n      this.mouseDown = false\n    }, { once: true })\n  }\n\n  onInputChange = () => {\n    this.element.removeAttribute(\"value\")\n    if (this.hasHiddenTarget) this.hiddenTarget.value = \"\"\n\n    const query = this.inputTarget.value.trim()\n    if (query && query.length >= this.minLengthValue) {\n      this.fetchResults(query)\n    } else {\n      this.hideAndRemoveOptions()\n    }\n  }\n\n  identifyOptions() {\n    let id = 0\n    const optionsWithoutId = this.resultsTarget.querySelectorAll(`${optionSelector}:not([id])`)\n    optionsWithoutId.forEach((el) => {\n      el.id = `${this.resultsTarget.id}-option-${id++}`\n    })\n  }\n\n  hideAndRemoveOptions() {\n    this.close()\n    this.resultsTarget.innerHTML = null\n  }\n\n  fetchResults = async (query) => {\n    if (!this.hasUrlValue) return\n\n    const url = this.buildURL(query)\n    try {\n      this.element.dispatchEvent(new CustomEvent(\"loadstart\"))\n      const html = await this.doFetch(url)\n      this.replaceResults(html)\n      this.element.dispatchEvent(new CustomEvent(\"load\"))\n      this.element.dispatchEvent(new CustomEvent(\"loadend\"))\n    } catch(error) {\n      this.element.dispatchEvent(new CustomEvent(\"error\"))\n      this.element.dispatchEvent(new CustomEvent(\"loadend\"))\n      throw error\n    }\n  }\n\n  buildURL(query) {\n    const url = new URL(this.urlValue, window.location.href)\n    const params = new URLSearchParams(url.search.slice(1))\n    params.append(\"q\", query)\n    url.search = params.toString()\n\n    return url.toString()\n  }\n\n  doFetch = async (url) => {\n    const response = await fetch(url, this.optionsForFetch())\n    const html = await response.text()\n    return html\n  }\n\n  replaceResults(html) {\n    this.resultsTarget.innerHTML = html\n    this.identifyOptions()\n    if (!!this.options) {\n      this.open()\n    } else {\n      this.close()\n    }\n  }\n\n  open() {\n    if (this.resultsShown) return\n\n    this.resultsShown = true\n    this.element.setAttribute(\"aria-expanded\", \"true\")\n    this.element.dispatchEvent(\n      new CustomEvent(\"toggle\", {\n        detail: { action: \"open\", inputTarget: this.inputTarget, resultsTarget: this.resultsTarget }\n      })\n    )\n  }\n\n  close() {\n    if (!this.resultsShown) return\n\n    this.resultsShown = false\n    this.inputTarget.removeAttribute(\"aria-activedescendant\")\n    this.element.setAttribute(\"aria-expanded\", \"false\")\n    this.element.dispatchEvent(\n      new CustomEvent(\"toggle\", {\n        detail: { action: \"close\", inputTarget: this.inputTarget, resultsTarget: this.resultsTarget }\n      })\n    )\n  }\n\n  get resultsShown() {\n    return !this.resultsTarget.hidden\n  }\n\n  set resultsShown(value) {\n    this.resultsTarget.hidden = !value\n  }\n\n  get options() {\n    return Array.from(this.resultsTarget.querySelectorAll(optionSelector))\n  }\n\n  get selectedOption() {\n    return this.resultsTarget.querySelector(activeSelector)\n  }\n\n  get selectedClassesOrDefault() {\n    return this.hasSelectedClass ? this.selectedClasses : [\"active\"]\n  }\n\n  optionsForFetch() {\n    return { headers: { \"X-Requested-With\": \"XMLHttpRequest\" } } // override if you need\n  }\n}\n\nconst debounce = (fn, delay = 10) => {\n  let timeoutId = null\n\n  return (...args) => {\n    clearTimeout(timeoutId)\n    timeoutId = setTimeout(fn, delay)\n  }\n}\n\nexport { Autocomplete }\n","function camelize(value) {\n  return value.replace(/(?:[_-])([a-z0-9])/g, (_, char) => char.toUpperCase());\n}\nfunction capitalize(value) {\n  return value.charAt(0).toUpperCase() + value.slice(1);\n}\nfunction dasherize(value) {\n  return value.replace(/([A-Z])/g, (_, char) => `-${char.toLowerCase()}`);\n}\nfunction readInheritableStaticArrayValues(constructor, propertyName) {\n  const ancestors = getAncestorsForConstructor(constructor);\n  return Array.from(ancestors.reduce((values, constructor2) => {\n    getOwnStaticArrayValues(constructor2, propertyName).forEach((name) => values.add(name));\n    return values;\n  }, new Set()));\n}\nfunction readInheritableStaticObjectPairs(constructor, propertyName) {\n  const ancestors = getAncestorsForConstructor(constructor);\n  return ancestors.reduce((pairs, constructor2) => {\n    pairs.push(...getOwnStaticObjectPairs(constructor2, propertyName));\n    return pairs;\n  }, []);\n}\nfunction getAncestorsForConstructor(constructor) {\n  const ancestors = [];\n  while (constructor) {\n    ancestors.push(constructor);\n    constructor = Object.getPrototypeOf(constructor);\n  }\n  return ancestors.reverse();\n}\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n  const definition = constructor[propertyName];\n  return Array.isArray(definition) ? definition : [];\n}\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n  const definition = constructor[propertyName];\n  return definition ? Object.keys(definition).map((key) => [key, definition[key]]) : [];\n}\n(() => {\n  function extendWithReflect(constructor) {\n    function extended() {\n      return Reflect.construct(constructor, arguments, new.target);\n    }\n    extended.prototype = Object.create(constructor.prototype, {\n      constructor: { value: extended }\n    });\n    Reflect.setPrototypeOf(extended, constructor);\n    return extended;\n  }\n  function testReflectExtension() {\n    const a = function() {\n      this.a.call(this);\n    };\n    const b = extendWithReflect(a);\n    b.prototype.a = function() {\n    };\n    return new b();\n  }\n  try {\n    testReflectExtension();\n    return extendWithReflect;\n  } catch (error) {\n    return (constructor) => class extended extends constructor {\n    };\n  }\n})();\nfunction ClassPropertiesBlessing(constructor) {\n  const classes = readInheritableStaticArrayValues(constructor, \"classes\");\n  return classes.reduce((properties, classDefinition) => {\n    return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n  }, {});\n}\nfunction propertiesForClassDefinition(key) {\n  return {\n    [`${key}Class`]: {\n      get() {\n        const { classes } = this;\n        if (classes.has(key)) {\n          return classes.get(key);\n        } else {\n          const attribute = classes.getAttributeName(key);\n          throw new Error(`Missing attribute \"${attribute}\"`);\n        }\n      }\n    },\n    [`${key}Classes`]: {\n      get() {\n        return this.classes.getAll(key);\n      }\n    },\n    [`has${capitalize(key)}Class`]: {\n      get() {\n        return this.classes.has(key);\n      }\n    }\n  };\n}\nfunction TargetPropertiesBlessing(constructor) {\n  const targets = readInheritableStaticArrayValues(constructor, \"targets\");\n  return targets.reduce((properties, targetDefinition) => {\n    return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n  }, {});\n}\nfunction propertiesForTargetDefinition(name) {\n  return {\n    [`${name}Target`]: {\n      get() {\n        const target = this.targets.find(name);\n        if (target) {\n          return target;\n        } else {\n          throw new Error(`Missing target element \"${name}\" for \"${this.identifier}\" controller`);\n        }\n      }\n    },\n    [`${name}Targets`]: {\n      get() {\n        return this.targets.findAll(name);\n      }\n    },\n    [`has${capitalize(name)}Target`]: {\n      get() {\n        return this.targets.has(name);\n      }\n    }\n  };\n}\nfunction ValuePropertiesBlessing(constructor) {\n  const valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n  const propertyDescriptorMap = {\n    valueDescriptorMap: {\n      get() {\n        return valueDefinitionPairs.reduce((result, valueDefinitionPair) => {\n          const valueDescriptor = parseValueDefinitionPair(valueDefinitionPair);\n          const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key);\n          return Object.assign(result, { [attributeName]: valueDescriptor });\n        }, {});\n      }\n    }\n  };\n  return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => {\n    return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n  }, propertyDescriptorMap);\n}\nfunction propertiesForValueDefinitionPair(valueDefinitionPair) {\n  const definition = parseValueDefinitionPair(valueDefinitionPair);\n  const { key, name, reader: read, writer: write } = definition;\n  return {\n    [name]: {\n      get() {\n        const value = this.data.get(key);\n        if (value !== null) {\n          return read(value);\n        } else {\n          return definition.defaultValue;\n        }\n      },\n      set(value) {\n        if (value === void 0) {\n          this.data.delete(key);\n        } else {\n          this.data.set(key, write(value));\n        }\n      }\n    },\n    [`has${capitalize(name)}`]: {\n      get() {\n        return this.data.has(key) || definition.hasCustomDefaultValue;\n      }\n    }\n  };\n}\nfunction parseValueDefinitionPair([token, typeDefinition]) {\n  return valueDescriptorForTokenAndTypeDefinition(token, typeDefinition);\n}\nfunction parseValueTypeConstant(constant) {\n  switch (constant) {\n    case Array:\n      return \"array\";\n    case Boolean:\n      return \"boolean\";\n    case Number:\n      return \"number\";\n    case Object:\n      return \"object\";\n    case String:\n      return \"string\";\n  }\n}\nfunction parseValueTypeDefault(defaultValue) {\n  switch (typeof defaultValue) {\n    case \"boolean\":\n      return \"boolean\";\n    case \"number\":\n      return \"number\";\n    case \"string\":\n      return \"string\";\n  }\n  if (Array.isArray(defaultValue))\n    return \"array\";\n  if (Object.prototype.toString.call(defaultValue) === \"[object Object]\")\n    return \"object\";\n}\nfunction parseValueTypeObject(typeObject) {\n  const typeFromObject = parseValueTypeConstant(typeObject.type);\n  if (typeFromObject) {\n    const defaultValueType = parseValueTypeDefault(typeObject.default);\n    if (typeFromObject !== defaultValueType) {\n      throw new Error(`Type \"${typeFromObject}\" must match the type of the default value. Given default value: \"${typeObject.default}\" as \"${defaultValueType}\"`);\n    }\n    return typeFromObject;\n  }\n}\nfunction parseValueTypeDefinition(typeDefinition) {\n  const typeFromObject = parseValueTypeObject(typeDefinition);\n  const typeFromDefaultValue = parseValueTypeDefault(typeDefinition);\n  const typeFromConstant = parseValueTypeConstant(typeDefinition);\n  const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n  if (type)\n    return type;\n  throw new Error(`Unknown value type \"${typeDefinition}\"`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n  const constant = parseValueTypeConstant(typeDefinition);\n  if (constant)\n    return defaultValuesByType[constant];\n  const defaultValue = typeDefinition.default;\n  if (defaultValue !== void 0)\n    return defaultValue;\n  return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(token, typeDefinition) {\n  const key = `${dasherize(token)}-value`;\n  const type = parseValueTypeDefinition(typeDefinition);\n  return {\n    type,\n    key,\n    name: camelize(key),\n    get defaultValue() {\n      return defaultValueForDefinition(typeDefinition);\n    },\n    get hasCustomDefaultValue() {\n      return parseValueTypeDefault(typeDefinition) !== void 0;\n    },\n    reader: readers[type],\n    writer: writers[type] || writers.default\n  };\n}\nconst defaultValuesByType = {\n  get array() {\n    return [];\n  },\n  boolean: false,\n  number: 0,\n  get object() {\n    return {};\n  },\n  string: \"\"\n};\nconst readers = {\n  array(value) {\n    const array = JSON.parse(value);\n    if (!Array.isArray(array)) {\n      throw new TypeError(\"Expected array\");\n    }\n    return array;\n  },\n  boolean(value) {\n    return !(value == \"0\" || value == \"false\");\n  },\n  number(value) {\n    return Number(value);\n  },\n  object(value) {\n    const object = JSON.parse(value);\n    if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n      throw new TypeError(\"Expected object\");\n    }\n    return object;\n  },\n  string(value) {\n    return value;\n  }\n};\nconst writers = {\n  default: writeString,\n  array: writeJSON,\n  object: writeJSON\n};\nfunction writeJSON(value) {\n  return JSON.stringify(value);\n}\nfunction writeString(value) {\n  return `${value}`;\n}\nclass Controller {\n  constructor(context) {\n    this.context = context;\n  }\n  static get shouldLoad() {\n    return true;\n  }\n  get application() {\n    return this.context.application;\n  }\n  get scope() {\n    return this.context.scope;\n  }\n  get element() {\n    return this.scope.element;\n  }\n  get identifier() {\n    return this.scope.identifier;\n  }\n  get targets() {\n    return this.scope.targets;\n  }\n  get classes() {\n    return this.scope.classes;\n  }\n  get data() {\n    return this.scope.data;\n  }\n  initialize() {\n  }\n  connect() {\n  }\n  disconnect() {\n  }\n  dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true } = {}) {\n    const type = prefix ? `${prefix}:${eventName}` : eventName;\n    const event = new CustomEvent(type, { detail, bubbles, cancelable });\n    target.dispatchEvent(event);\n    return event;\n  }\n}\nController.blessings = [ClassPropertiesBlessing, TargetPropertiesBlessing, ValuePropertiesBlessing];\nController.targets = [];\nController.values = {};\nclass src_default extends Controller {\n  connect() {\n    this.class = this.hasHiddenClass ? this.hiddenClass : \"hidden\";\n  }\n  toggle() {\n    this.itemTargets.forEach((item) => {\n      item.classList.toggle(this.class);\n    });\n  }\n  show() {\n    this.itemTargets.forEach((item) => {\n      item.classList.remove(this.class);\n    });\n  }\n  hide() {\n    this.itemTargets.forEach((item) => {\n      item.classList.add(this.class);\n    });\n  }\n}\nsrc_default.targets = [\"item\"];\nsrc_default.classes = [\"hidden\"];\nexport { src_default as default };\n","import { Application } from '@hotwired/stimulus';\nimport { Autocomplete } from 'stimulus-autocomplete';\n// import Chart from 'stimulus-chartjs';\nimport Reveal from 'stimulus-reveal-controller';\n\nconst application = Application.start();\n\n// Configure Stimulus development experience\napplication.debug = false;\nwindow.Stimulus = application;\napplication.register('autocomplete', Autocomplete);\napplication.register('reveal', Reveal);\nexport { application };\n","/*!\n * Chart.js v3.9.1\n * https://www.chartjs.org\n * (c) 2022 Chart.js Contributors\n * Released under the MIT License\n */\nfunction noop() {}\nconst uid = (function() {\n  let id = 0;\n  return function() {\n    return id++;\n  };\n}());\nfunction isNullOrUndef(value) {\n  return value === null || typeof value === 'undefined';\n}\nfunction isArray(value) {\n  if (Array.isArray && Array.isArray(value)) {\n    return true;\n  }\n  const type = Object.prototype.toString.call(value);\n  if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n    return true;\n  }\n  return false;\n}\nfunction isObject(value) {\n  return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\nconst isNumberFinite = (value) => (typeof value === 'number' || value instanceof Number) && isFinite(+value);\nfunction finiteOrDefault(value, defaultValue) {\n  return isNumberFinite(value) ? value : defaultValue;\n}\nfunction valueOrDefault(value, defaultValue) {\n  return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension) =>\n  typeof value === 'string' && value.endsWith('%') ?\n    parseFloat(value) / 100\n    : value / dimension;\nconst toDimension = (value, dimension) =>\n  typeof value === 'string' && value.endsWith('%') ?\n    parseFloat(value) / 100 * dimension\n    : +value;\nfunction callback(fn, args, thisArg) {\n  if (fn && typeof fn.call === 'function') {\n    return fn.apply(thisArg, args);\n  }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n  let i, len, keys;\n  if (isArray(loopable)) {\n    len = loopable.length;\n    if (reverse) {\n      for (i = len - 1; i >= 0; i--) {\n        fn.call(thisArg, loopable[i], i);\n      }\n    } else {\n      for (i = 0; i < len; i++) {\n        fn.call(thisArg, loopable[i], i);\n      }\n    }\n  } else if (isObject(loopable)) {\n    keys = Object.keys(loopable);\n    len = keys.length;\n    for (i = 0; i < len; i++) {\n      fn.call(thisArg, loopable[keys[i]], keys[i]);\n    }\n  }\n}\nfunction _elementsEqual(a0, a1) {\n  let i, ilen, v0, v1;\n  if (!a0 || !a1 || a0.length !== a1.length) {\n    return false;\n  }\n  for (i = 0, ilen = a0.length; i < ilen; ++i) {\n    v0 = a0[i];\n    v1 = a1[i];\n    if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction clone$1(source) {\n  if (isArray(source)) {\n    return source.map(clone$1);\n  }\n  if (isObject(source)) {\n    const target = Object.create(null);\n    const keys = Object.keys(source);\n    const klen = keys.length;\n    let k = 0;\n    for (; k < klen; ++k) {\n      target[keys[k]] = clone$1(source[keys[k]]);\n    }\n    return target;\n  }\n  return source;\n}\nfunction isValidKey(key) {\n  return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\nfunction _merger(key, target, source, options) {\n  if (!isValidKey(key)) {\n    return;\n  }\n  const tval = target[key];\n  const sval = source[key];\n  if (isObject(tval) && isObject(sval)) {\n    merge(tval, sval, options);\n  } else {\n    target[key] = clone$1(sval);\n  }\n}\nfunction merge(target, source, options) {\n  const sources = isArray(source) ? source : [source];\n  const ilen = sources.length;\n  if (!isObject(target)) {\n    return target;\n  }\n  options = options || {};\n  const merger = options.merger || _merger;\n  for (let i = 0; i < ilen; ++i) {\n    source = sources[i];\n    if (!isObject(source)) {\n      continue;\n    }\n    const keys = Object.keys(source);\n    for (let k = 0, klen = keys.length; k < klen; ++k) {\n      merger(keys[k], target, source, options);\n    }\n  }\n  return target;\n}\nfunction mergeIf(target, source) {\n  return merge(target, source, {merger: _mergerIf});\n}\nfunction _mergerIf(key, target, source) {\n  if (!isValidKey(key)) {\n    return;\n  }\n  const tval = target[key];\n  const sval = source[key];\n  if (isObject(tval) && isObject(sval)) {\n    mergeIf(tval, sval);\n  } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n    target[key] = clone$1(sval);\n  }\n}\nfunction _deprecated(scope, value, previous, current) {\n  if (value !== undefined) {\n    console.warn(scope + ': \"' + previous +\n\t\t\t'\" is deprecated. Please use \"' + current + '\" instead');\n  }\n}\nconst keyResolvers = {\n  '': v => v,\n  x: o => o.x,\n  y: o => o.y\n};\nfunction resolveObjectKey(obj, key) {\n  const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n  return resolver(obj);\n}\nfunction _getKeyResolver(key) {\n  const keys = _splitKey(key);\n  return obj => {\n    for (const k of keys) {\n      if (k === '') {\n        break;\n      }\n      obj = obj && obj[k];\n    }\n    return obj;\n  };\n}\nfunction _splitKey(key) {\n  const parts = key.split('.');\n  const keys = [];\n  let tmp = '';\n  for (const part of parts) {\n    tmp += part;\n    if (tmp.endsWith('\\\\')) {\n      tmp = tmp.slice(0, -1) + '.';\n    } else {\n      keys.push(tmp);\n      tmp = '';\n    }\n  }\n  return keys;\n}\nfunction _capitalize(str) {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = (value) => typeof value !== 'undefined';\nconst isFunction = (value) => typeof value === 'function';\nconst setsEqual = (a, b) => {\n  if (a.size !== b.size) {\n    return false;\n  }\n  for (const item of a) {\n    if (!b.has(item)) {\n      return false;\n    }\n  }\n  return true;\n};\nfunction _isClickEvent(e) {\n  return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n\nconst PI = Math.PI;\nconst TAU = 2 * PI;\nconst PITAU = TAU + PI;\nconst INFINITY = Number.POSITIVE_INFINITY;\nconst RAD_PER_DEG = PI / 180;\nconst HALF_PI = PI / 2;\nconst QUARTER_PI = PI / 4;\nconst TWO_THIRDS_PI = PI * 2 / 3;\nconst log10 = Math.log10;\nconst sign = Math.sign;\nfunction niceNum(range) {\n  const roundedRange = Math.round(range);\n  range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n  const niceRange = Math.pow(10, Math.floor(log10(range)));\n  const fraction = range / niceRange;\n  const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n  return niceFraction * niceRange;\n}\nfunction _factorize(value) {\n  const result = [];\n  const sqrt = Math.sqrt(value);\n  let i;\n  for (i = 1; i < sqrt; i++) {\n    if (value % i === 0) {\n      result.push(i);\n      result.push(value / i);\n    }\n  }\n  if (sqrt === (sqrt | 0)) {\n    result.push(sqrt);\n  }\n  result.sort((a, b) => a - b).pop();\n  return result;\n}\nfunction isNumber(n) {\n  return !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostEquals(x, y, epsilon) {\n  return Math.abs(x - y) < epsilon;\n}\nfunction almostWhole(x, epsilon) {\n  const rounded = Math.round(x);\n  return ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);\n}\nfunction _setMinAndMaxByKey(array, target, property) {\n  let i, ilen, value;\n  for (i = 0, ilen = array.length; i < ilen; i++) {\n    value = array[i][property];\n    if (!isNaN(value)) {\n      target.min = Math.min(target.min, value);\n      target.max = Math.max(target.max, value);\n    }\n  }\n}\nfunction toRadians(degrees) {\n  return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n  return radians * (180 / PI);\n}\nfunction _decimalPlaces(x) {\n  if (!isNumberFinite(x)) {\n    return;\n  }\n  let e = 1;\n  let p = 0;\n  while (Math.round(x * e) / e !== x) {\n    e *= 10;\n    p++;\n  }\n  return p;\n}\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n  const distanceFromXCenter = anglePoint.x - centrePoint.x;\n  const distanceFromYCenter = anglePoint.y - centrePoint.y;\n  const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n  let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n  if (angle < (-0.5 * PI)) {\n    angle += TAU;\n  }\n  return {\n    angle,\n    distance: radialDistanceFromCenter\n  };\n}\nfunction distanceBetweenPoints(pt1, pt2) {\n  return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\nfunction _angleDiff(a, b) {\n  return (a - b + PITAU) % TAU - PI;\n}\nfunction _normalizeAngle(a) {\n  return (a % TAU + TAU) % TAU;\n}\nfunction _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n  const a = _normalizeAngle(angle);\n  const s = _normalizeAngle(start);\n  const e = _normalizeAngle(end);\n  const angleToStart = _normalizeAngle(s - a);\n  const angleToEnd = _normalizeAngle(e - a);\n  const startToAngle = _normalizeAngle(a - s);\n  const endToAngle = _normalizeAngle(a - e);\n  return a === s || a === e || (sameAngleIsFullCircle && s === e)\n    || (angleToStart > angleToEnd && startToAngle < endToAngle);\n}\nfunction _limitValue(value, min, max) {\n  return Math.max(min, Math.min(max, value));\n}\nfunction _int16Range(value) {\n  return _limitValue(value, -32768, 32767);\n}\nfunction _isBetween(value, start, end, epsilon = 1e-6) {\n  return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n\nfunction _lookup(table, value, cmp) {\n  cmp = cmp || ((index) => table[index] < value);\n  let hi = table.length - 1;\n  let lo = 0;\n  let mid;\n  while (hi - lo > 1) {\n    mid = (lo + hi) >> 1;\n    if (cmp(mid)) {\n      lo = mid;\n    } else {\n      hi = mid;\n    }\n  }\n  return {lo, hi};\n}\nconst _lookupByKey = (table, key, value, last) =>\n  _lookup(table, value, last\n    ? index => table[index][key] <= value\n    : index => table[index][key] < value);\nconst _rlookupByKey = (table, key, value) =>\n  _lookup(table, value, index => table[index][key] >= value);\nfunction _filterBetween(values, min, max) {\n  let start = 0;\n  let end = values.length;\n  while (start < end && values[start] < min) {\n    start++;\n  }\n  while (end > start && values[end - 1] > max) {\n    end--;\n  }\n  return start > 0 || end < values.length\n    ? values.slice(start, end)\n    : values;\n}\nconst arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];\nfunction listenArrayEvents(array, listener) {\n  if (array._chartjs) {\n    array._chartjs.listeners.push(listener);\n    return;\n  }\n  Object.defineProperty(array, '_chartjs', {\n    configurable: true,\n    enumerable: false,\n    value: {\n      listeners: [listener]\n    }\n  });\n  arrayEvents.forEach((key) => {\n    const method = '_onData' + _capitalize(key);\n    const base = array[key];\n    Object.defineProperty(array, key, {\n      configurable: true,\n      enumerable: false,\n      value(...args) {\n        const res = base.apply(this, args);\n        array._chartjs.listeners.forEach((object) => {\n          if (typeof object[method] === 'function') {\n            object[method](...args);\n          }\n        });\n        return res;\n      }\n    });\n  });\n}\nfunction unlistenArrayEvents(array, listener) {\n  const stub = array._chartjs;\n  if (!stub) {\n    return;\n  }\n  const listeners = stub.listeners;\n  const index = listeners.indexOf(listener);\n  if (index !== -1) {\n    listeners.splice(index, 1);\n  }\n  if (listeners.length > 0) {\n    return;\n  }\n  arrayEvents.forEach((key) => {\n    delete array[key];\n  });\n  delete array._chartjs;\n}\nfunction _arrayUnique(items) {\n  const set = new Set();\n  let i, ilen;\n  for (i = 0, ilen = items.length; i < ilen; ++i) {\n    set.add(items[i]);\n  }\n  if (set.size === ilen) {\n    return items;\n  }\n  return Array.from(set);\n}\n\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n  return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\nconst requestAnimFrame = (function() {\n  if (typeof window === 'undefined') {\n    return function(callback) {\n      return callback();\n    };\n  }\n  return window.requestAnimationFrame;\n}());\nfunction throttled(fn, thisArg, updateFn) {\n  const updateArgs = updateFn || ((args) => Array.prototype.slice.call(args));\n  let ticking = false;\n  let args = [];\n  return function(...rest) {\n    args = updateArgs(rest);\n    if (!ticking) {\n      ticking = true;\n      requestAnimFrame.call(window, () => {\n        ticking = false;\n        fn.apply(thisArg, args);\n      });\n    }\n  };\n}\nfunction debounce(fn, delay) {\n  let timeout;\n  return function(...args) {\n    if (delay) {\n      clearTimeout(timeout);\n      timeout = setTimeout(fn, delay, args);\n    } else {\n      fn.apply(this, args);\n    }\n    return delay;\n  };\n}\nconst _toLeftRightCenter = (align) => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\nconst _alignStartEnd = (align, start, end) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\nconst _textX = (align, left, right, rtl) => {\n  const check = rtl ? 'left' : 'right';\n  return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\nfunction _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n  const pointCount = points.length;\n  let start = 0;\n  let count = pointCount;\n  if (meta._sorted) {\n    const {iScale, _parsed} = meta;\n    const axis = iScale.axis;\n    const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n    if (minDefined) {\n      start = _limitValue(Math.min(\n        _lookupByKey(_parsed, iScale.axis, min).lo,\n        animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo),\n      0, pointCount - 1);\n    }\n    if (maxDefined) {\n      count = _limitValue(Math.max(\n        _lookupByKey(_parsed, iScale.axis, max, true).hi + 1,\n        animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1),\n      start, pointCount) - start;\n    } else {\n      count = pointCount - start;\n    }\n  }\n  return {start, count};\n}\nfunction _scaleRangesChanged(meta) {\n  const {xScale, yScale, _scaleRanges} = meta;\n  const newRanges = {\n    xmin: xScale.min,\n    xmax: xScale.max,\n    ymin: yScale.min,\n    ymax: yScale.max\n  };\n  if (!_scaleRanges) {\n    meta._scaleRanges = newRanges;\n    return true;\n  }\n  const changed = _scaleRanges.xmin !== xScale.min\n\t\t|| _scaleRanges.xmax !== xScale.max\n\t\t|| _scaleRanges.ymin !== yScale.min\n\t\t|| _scaleRanges.ymax !== yScale.max;\n  Object.assign(_scaleRanges, newRanges);\n  return changed;\n}\n\nconst atEdge = (t) => t === 0 || t === 1;\nconst elasticIn = (t, s, p) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t, s, p) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\nconst effects = {\n  linear: t => t,\n  easeInQuad: t => t * t,\n  easeOutQuad: t => -t * (t - 2),\n  easeInOutQuad: t => ((t /= 0.5) < 1)\n    ? 0.5 * t * t\n    : -0.5 * ((--t) * (t - 2) - 1),\n  easeInCubic: t => t * t * t,\n  easeOutCubic: t => (t -= 1) * t * t + 1,\n  easeInOutCubic: t => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t\n    : 0.5 * ((t -= 2) * t * t + 2),\n  easeInQuart: t => t * t * t * t,\n  easeOutQuart: t => -((t -= 1) * t * t * t - 1),\n  easeInOutQuart: t => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t * t\n    : -0.5 * ((t -= 2) * t * t * t - 2),\n  easeInQuint: t => t * t * t * t * t,\n  easeOutQuint: t => (t -= 1) * t * t * t * t + 1,\n  easeInOutQuint: t => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t * t * t\n    : 0.5 * ((t -= 2) * t * t * t * t + 2),\n  easeInSine: t => -Math.cos(t * HALF_PI) + 1,\n  easeOutSine: t => Math.sin(t * HALF_PI),\n  easeInOutSine: t => -0.5 * (Math.cos(PI * t) - 1),\n  easeInExpo: t => (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)),\n  easeOutExpo: t => (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1,\n  easeInOutExpo: t => atEdge(t) ? t : t < 0.5\n    ? 0.5 * Math.pow(2, 10 * (t * 2 - 1))\n    : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n  easeInCirc: t => (t >= 1) ? t : -(Math.sqrt(1 - t * t) - 1),\n  easeOutCirc: t => Math.sqrt(1 - (t -= 1) * t),\n  easeInOutCirc: t => ((t /= 0.5) < 1)\n    ? -0.5 * (Math.sqrt(1 - t * t) - 1)\n    : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n  easeInElastic: t => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n  easeOutElastic: t => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n  easeInOutElastic(t) {\n    const s = 0.1125;\n    const p = 0.45;\n    return atEdge(t) ? t :\n      t < 0.5\n        ? 0.5 * elasticIn(t * 2, s, p)\n        : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n  },\n  easeInBack(t) {\n    const s = 1.70158;\n    return t * t * ((s + 1) * t - s);\n  },\n  easeOutBack(t) {\n    const s = 1.70158;\n    return (t -= 1) * t * ((s + 1) * t + s) + 1;\n  },\n  easeInOutBack(t) {\n    let s = 1.70158;\n    if ((t /= 0.5) < 1) {\n      return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\n    }\n    return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n  },\n  easeInBounce: t => 1 - effects.easeOutBounce(1 - t),\n  easeOutBounce(t) {\n    const m = 7.5625;\n    const d = 2.75;\n    if (t < (1 / d)) {\n      return m * t * t;\n    }\n    if (t < (2 / d)) {\n      return m * (t -= (1.5 / d)) * t + 0.75;\n    }\n    if (t < (2.5 / d)) {\n      return m * (t -= (2.25 / d)) * t + 0.9375;\n    }\n    return m * (t -= (2.625 / d)) * t + 0.984375;\n  },\n  easeInOutBounce: t => (t < 0.5)\n    ? effects.easeInBounce(t * 2) * 0.5\n    : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5,\n};\n\n/*!\n * @kurkle/color v0.2.1\n * https://github.com/kurkle/color#readme\n * (c) 2022 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n  return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n  return lim(round(v * 2.55), 0, 255);\n}\nfunction n2b(v) {\n  return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n  return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n  return lim(round(v * 100), 0, 100);\n}\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n  var len = str.length;\n  var ret;\n  if (str[0] === '#') {\n    if (len === 4 || len === 5) {\n      ret = {\n        r: 255 & map$1[str[1]] * 17,\n        g: 255 & map$1[str[2]] * 17,\n        b: 255 & map$1[str[3]] * 17,\n        a: len === 5 ? map$1[str[4]] * 17 : 255\n      };\n    } else if (len === 7 || len === 9) {\n      ret = {\n        r: map$1[str[1]] << 4 | map$1[str[2]],\n        g: map$1[str[3]] << 4 | map$1[str[4]],\n        b: map$1[str[5]] << 4 | map$1[str[6]],\n        a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n      };\n    }\n  }\n  return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n  var f = isShort(v) ? h1 : h2;\n  return v\n    ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n    : undefined;\n}\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n  const a = s * Math.min(l, 1 - l);\n  const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n  return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n  const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n  return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n  const rgb = hsl2rgbn(h, 1, 0.5);\n  let i;\n  if (w + b > 1) {\n    i = 1 / (w + b);\n    w *= i;\n    b *= i;\n  }\n  for (i = 0; i < 3; i++) {\n    rgb[i] *= 1 - w - b;\n    rgb[i] += w;\n  }\n  return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n  if (r === max) {\n    return ((g - b) / d) + (g < b ? 6 : 0);\n  }\n  if (g === max) {\n    return (b - r) / d + 2;\n  }\n  return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n  const range = 255;\n  const r = v.r / range;\n  const g = v.g / range;\n  const b = v.b / range;\n  const max = Math.max(r, g, b);\n  const min = Math.min(r, g, b);\n  const l = (max + min) / 2;\n  let h, s, d;\n  if (max !== min) {\n    d = max - min;\n    s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n    h = hueValue(r, g, b, d, max);\n    h = h * 60 + 0.5;\n  }\n  return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n  return (\n    Array.isArray(a)\n      ? f(a[0], a[1], a[2])\n      : f(a, b, c)\n  ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n  return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n  return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n  return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n  return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n  const m = HUE_RE.exec(str);\n  let a = 255;\n  let v;\n  if (!m) {\n    return;\n  }\n  if (m[5] !== v) {\n    a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n  }\n  const h = hue(+m[2]);\n  const p1 = +m[3] / 100;\n  const p2 = +m[4] / 100;\n  if (m[1] === 'hwb') {\n    v = hwb2rgb(h, p1, p2);\n  } else if (m[1] === 'hsv') {\n    v = hsv2rgb(h, p1, p2);\n  } else {\n    v = hsl2rgb(h, p1, p2);\n  }\n  return {\n    r: v[0],\n    g: v[1],\n    b: v[2],\n    a: a\n  };\n}\nfunction rotate(v, deg) {\n  var h = rgb2hsl(v);\n  h[0] = hue(h[0] + deg);\n  h = hsl2rgb(h);\n  v.r = h[0];\n  v.g = h[1];\n  v.b = h[2];\n}\nfunction hslString(v) {\n  if (!v) {\n    return;\n  }\n  const a = rgb2hsl(v);\n  const h = a[0];\n  const s = n2p(a[1]);\n  const l = n2p(a[2]);\n  return v.a < 255\n    ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n    : `hsl(${h}, ${s}%, ${l}%)`;\n}\nconst map = {\n  x: 'dark',\n  Z: 'light',\n  Y: 're',\n  X: 'blu',\n  W: 'gr',\n  V: 'medium',\n  U: 'slate',\n  A: 'ee',\n  T: 'ol',\n  S: 'or',\n  B: 'ra',\n  C: 'lateg',\n  D: 'ights',\n  R: 'in',\n  Q: 'turquois',\n  E: 'hi',\n  P: 'ro',\n  O: 'al',\n  N: 'le',\n  M: 'de',\n  L: 'yello',\n  F: 'en',\n  K: 'ch',\n  G: 'arks',\n  H: 'ea',\n  I: 'ightg',\n  J: 'wh'\n};\nconst names$1 = {\n  OiceXe: 'f0f8ff',\n  antiquewEte: 'faebd7',\n  aqua: 'ffff',\n  aquamarRe: '7fffd4',\n  azuY: 'f0ffff',\n  beige: 'f5f5dc',\n  bisque: 'ffe4c4',\n  black: '0',\n  blanKedOmond: 'ffebcd',\n  Xe: 'ff',\n  XeviTet: '8a2be2',\n  bPwn: 'a52a2a',\n  burlywood: 'deb887',\n  caMtXe: '5f9ea0',\n  KartYuse: '7fff00',\n  KocTate: 'd2691e',\n  cSO: 'ff7f50',\n  cSnflowerXe: '6495ed',\n  cSnsilk: 'fff8dc',\n  crimson: 'dc143c',\n  cyan: 'ffff',\n  xXe: '8b',\n  xcyan: '8b8b',\n  xgTMnPd: 'b8860b',\n  xWay: 'a9a9a9',\n  xgYF: '6400',\n  xgYy: 'a9a9a9',\n  xkhaki: 'bdb76b',\n  xmagFta: '8b008b',\n  xTivegYF: '556b2f',\n  xSange: 'ff8c00',\n  xScEd: '9932cc',\n  xYd: '8b0000',\n  xsOmon: 'e9967a',\n  xsHgYF: '8fbc8f',\n  xUXe: '483d8b',\n  xUWay: '2f4f4f',\n  xUgYy: '2f4f4f',\n  xQe: 'ced1',\n  xviTet: '9400d3',\n  dAppRk: 'ff1493',\n  dApskyXe: 'bfff',\n  dimWay: '696969',\n  dimgYy: '696969',\n  dodgerXe: '1e90ff',\n  fiYbrick: 'b22222',\n  flSOwEte: 'fffaf0',\n  foYstWAn: '228b22',\n  fuKsia: 'ff00ff',\n  gaRsbSo: 'dcdcdc',\n  ghostwEte: 'f8f8ff',\n  gTd: 'ffd700',\n  gTMnPd: 'daa520',\n  Way: '808080',\n  gYF: '8000',\n  gYFLw: 'adff2f',\n  gYy: '808080',\n  honeyMw: 'f0fff0',\n  hotpRk: 'ff69b4',\n  RdianYd: 'cd5c5c',\n  Rdigo: '4b0082',\n  ivSy: 'fffff0',\n  khaki: 'f0e68c',\n  lavFMr: 'e6e6fa',\n  lavFMrXsh: 'fff0f5',\n  lawngYF: '7cfc00',\n  NmoncEffon: 'fffacd',\n  ZXe: 'add8e6',\n  ZcSO: 'f08080',\n  Zcyan: 'e0ffff',\n  ZgTMnPdLw: 'fafad2',\n  ZWay: 'd3d3d3',\n  ZgYF: '90ee90',\n  ZgYy: 'd3d3d3',\n  ZpRk: 'ffb6c1',\n  ZsOmon: 'ffa07a',\n  ZsHgYF: '20b2aa',\n  ZskyXe: '87cefa',\n  ZUWay: '778899',\n  ZUgYy: '778899',\n  ZstAlXe: 'b0c4de',\n  ZLw: 'ffffe0',\n  lime: 'ff00',\n  limegYF: '32cd32',\n  lRF: 'faf0e6',\n  magFta: 'ff00ff',\n  maPon: '800000',\n  VaquamarRe: '66cdaa',\n  VXe: 'cd',\n  VScEd: 'ba55d3',\n  VpurpN: '9370db',\n  VsHgYF: '3cb371',\n  VUXe: '7b68ee',\n  VsprRggYF: 'fa9a',\n  VQe: '48d1cc',\n  VviTetYd: 'c71585',\n  midnightXe: '191970',\n  mRtcYam: 'f5fffa',\n  mistyPse: 'ffe4e1',\n  moccasR: 'ffe4b5',\n  navajowEte: 'ffdead',\n  navy: '80',\n  Tdlace: 'fdf5e6',\n  Tive: '808000',\n  TivedBb: '6b8e23',\n  Sange: 'ffa500',\n  SangeYd: 'ff4500',\n  ScEd: 'da70d6',\n  pOegTMnPd: 'eee8aa',\n  pOegYF: '98fb98',\n  pOeQe: 'afeeee',\n  pOeviTetYd: 'db7093',\n  papayawEp: 'ffefd5',\n  pHKpuff: 'ffdab9',\n  peru: 'cd853f',\n  pRk: 'ffc0cb',\n  plum: 'dda0dd',\n  powMrXe: 'b0e0e6',\n  purpN: '800080',\n  YbeccapurpN: '663399',\n  Yd: 'ff0000',\n  Psybrown: 'bc8f8f',\n  PyOXe: '4169e1',\n  saddNbPwn: '8b4513',\n  sOmon: 'fa8072',\n  sandybPwn: 'f4a460',\n  sHgYF: '2e8b57',\n  sHshell: 'fff5ee',\n  siFna: 'a0522d',\n  silver: 'c0c0c0',\n  skyXe: '87ceeb',\n  UXe: '6a5acd',\n  UWay: '708090',\n  UgYy: '708090',\n  snow: 'fffafa',\n  sprRggYF: 'ff7f',\n  stAlXe: '4682b4',\n  tan: 'd2b48c',\n  teO: '8080',\n  tEstN: 'd8bfd8',\n  tomato: 'ff6347',\n  Qe: '40e0d0',\n  viTet: 'ee82ee',\n  JHt: 'f5deb3',\n  wEte: 'ffffff',\n  wEtesmoke: 'f5f5f5',\n  Lw: 'ffff00',\n  LwgYF: '9acd32'\n};\nfunction unpack() {\n  const unpacked = {};\n  const keys = Object.keys(names$1);\n  const tkeys = Object.keys(map);\n  let i, j, k, ok, nk;\n  for (i = 0; i < keys.length; i++) {\n    ok = nk = keys[i];\n    for (j = 0; j < tkeys.length; j++) {\n      k = tkeys[j];\n      nk = nk.replace(k, map[k]);\n    }\n    k = parseInt(names$1[ok], 16);\n    unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n  }\n  return unpacked;\n}\nlet names;\nfunction nameParse(str) {\n  if (!names) {\n    names = unpack();\n    names.transparent = [0, 0, 0, 0];\n  }\n  const a = names[str.toLowerCase()];\n  return a && {\n    r: a[0],\n    g: a[1],\n    b: a[2],\n    a: a.length === 4 ? a[3] : 255\n  };\n}\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n  const m = RGB_RE.exec(str);\n  let a = 255;\n  let r, g, b;\n  if (!m) {\n    return;\n  }\n  if (m[7] !== r) {\n    const v = +m[7];\n    a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n  }\n  r = +m[1];\n  g = +m[3];\n  b = +m[5];\n  r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n  g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n  b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n  return {\n    r: r,\n    g: g,\n    b: b,\n    a: a\n  };\n}\nfunction rgbString(v) {\n  return v && (\n    v.a < 255\n      ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n      : `rgb(${v.r}, ${v.g}, ${v.b})`\n  );\n}\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n  const r = from(b2n(rgb1.r));\n  const g = from(b2n(rgb1.g));\n  const b = from(b2n(rgb1.b));\n  return {\n    r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n    g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n    b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n    a: rgb1.a + t * (rgb2.a - rgb1.a)\n  };\n}\nfunction modHSL(v, i, ratio) {\n  if (v) {\n    let tmp = rgb2hsl(v);\n    tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n    tmp = hsl2rgb(tmp);\n    v.r = tmp[0];\n    v.g = tmp[1];\n    v.b = tmp[2];\n  }\n}\nfunction clone(v, proto) {\n  return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n  var v = {r: 0, g: 0, b: 0, a: 255};\n  if (Array.isArray(input)) {\n    if (input.length >= 3) {\n      v = {r: input[0], g: input[1], b: input[2], a: 255};\n      if (input.length > 3) {\n        v.a = n2b(input[3]);\n      }\n    }\n  } else {\n    v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n    v.a = n2b(v.a);\n  }\n  return v;\n}\nfunction functionParse(str) {\n  if (str.charAt(0) === 'r') {\n    return rgbParse(str);\n  }\n  return hueParse(str);\n}\nclass Color {\n  constructor(input) {\n    if (input instanceof Color) {\n      return input;\n    }\n    const type = typeof input;\n    let v;\n    if (type === 'object') {\n      v = fromObject(input);\n    } else if (type === 'string') {\n      v = hexParse(input) || nameParse(input) || functionParse(input);\n    }\n    this._rgb = v;\n    this._valid = !!v;\n  }\n  get valid() {\n    return this._valid;\n  }\n  get rgb() {\n    var v = clone(this._rgb);\n    if (v) {\n      v.a = b2n(v.a);\n    }\n    return v;\n  }\n  set rgb(obj) {\n    this._rgb = fromObject(obj);\n  }\n  rgbString() {\n    return this._valid ? rgbString(this._rgb) : undefined;\n  }\n  hexString() {\n    return this._valid ? hexString(this._rgb) : undefined;\n  }\n  hslString() {\n    return this._valid ? hslString(this._rgb) : undefined;\n  }\n  mix(color, weight) {\n    if (color) {\n      const c1 = this.rgb;\n      const c2 = color.rgb;\n      let w2;\n      const p = weight === w2 ? 0.5 : weight;\n      const w = 2 * p - 1;\n      const a = c1.a - c2.a;\n      const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n      w2 = 1 - w1;\n      c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n      c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n      c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n      c1.a = p * c1.a + (1 - p) * c2.a;\n      this.rgb = c1;\n    }\n    return this;\n  }\n  interpolate(color, t) {\n    if (color) {\n      this._rgb = interpolate(this._rgb, color._rgb, t);\n    }\n    return this;\n  }\n  clone() {\n    return new Color(this.rgb);\n  }\n  alpha(a) {\n    this._rgb.a = n2b(a);\n    return this;\n  }\n  clearer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 - ratio;\n    return this;\n  }\n  greyscale() {\n    const rgb = this._rgb;\n    const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n    rgb.r = rgb.g = rgb.b = val;\n    return this;\n  }\n  opaquer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 + ratio;\n    return this;\n  }\n  negate() {\n    const v = this._rgb;\n    v.r = 255 - v.r;\n    v.g = 255 - v.g;\n    v.b = 255 - v.b;\n    return this;\n  }\n  lighten(ratio) {\n    modHSL(this._rgb, 2, ratio);\n    return this;\n  }\n  darken(ratio) {\n    modHSL(this._rgb, 2, -ratio);\n    return this;\n  }\n  saturate(ratio) {\n    modHSL(this._rgb, 1, ratio);\n    return this;\n  }\n  desaturate(ratio) {\n    modHSL(this._rgb, 1, -ratio);\n    return this;\n  }\n  rotate(deg) {\n    rotate(this._rgb, deg);\n    return this;\n  }\n}\nfunction index_esm(input) {\n  return new Color(input);\n}\n\nfunction isPatternOrGradient(value) {\n  if (value && typeof value === 'object') {\n    const type = value.toString();\n    return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n  }\n  return false;\n}\nfunction color(value) {\n  return isPatternOrGradient(value) ? value : index_esm(value);\n}\nfunction getHoverColor(value) {\n  return isPatternOrGradient(value)\n    ? value\n    : index_esm(value).saturate(0.5).darken(0.1).hexString();\n}\n\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\nfunction getScope$1(node, key) {\n  if (!key) {\n    return node;\n  }\n  const keys = key.split('.');\n  for (let i = 0, n = keys.length; i < n; ++i) {\n    const k = keys[i];\n    node = node[k] || (node[k] = Object.create(null));\n  }\n  return node;\n}\nfunction set(root, scope, values) {\n  if (typeof scope === 'string') {\n    return merge(getScope$1(root, scope), values);\n  }\n  return merge(getScope$1(root, ''), scope);\n}\nclass Defaults {\n  constructor(_descriptors) {\n    this.animation = undefined;\n    this.backgroundColor = 'rgba(0,0,0,0.1)';\n    this.borderColor = 'rgba(0,0,0,0.1)';\n    this.color = '#666';\n    this.datasets = {};\n    this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio();\n    this.elements = {};\n    this.events = [\n      'mousemove',\n      'mouseout',\n      'click',\n      'touchstart',\n      'touchmove'\n    ];\n    this.font = {\n      family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n      size: 12,\n      style: 'normal',\n      lineHeight: 1.2,\n      weight: null\n    };\n    this.hover = {};\n    this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor);\n    this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor);\n    this.hoverColor = (ctx, options) => getHoverColor(options.color);\n    this.indexAxis = 'x';\n    this.interaction = {\n      mode: 'nearest',\n      intersect: true,\n      includeInvisible: false\n    };\n    this.maintainAspectRatio = true;\n    this.onHover = null;\n    this.onClick = null;\n    this.parsing = true;\n    this.plugins = {};\n    this.responsive = true;\n    this.scale = undefined;\n    this.scales = {};\n    this.showLine = true;\n    this.drawActiveElementsOnTop = true;\n    this.describe(_descriptors);\n  }\n  set(scope, values) {\n    return set(this, scope, values);\n  }\n  get(scope) {\n    return getScope$1(this, scope);\n  }\n  describe(scope, values) {\n    return set(descriptors, scope, values);\n  }\n  override(scope, values) {\n    return set(overrides, scope, values);\n  }\n  route(scope, name, targetScope, targetName) {\n    const scopeObject = getScope$1(this, scope);\n    const targetScopeObject = getScope$1(this, targetScope);\n    const privateName = '_' + name;\n    Object.defineProperties(scopeObject, {\n      [privateName]: {\n        value: scopeObject[name],\n        writable: true\n      },\n      [name]: {\n        enumerable: true,\n        get() {\n          const local = this[privateName];\n          const target = targetScopeObject[targetName];\n          if (isObject(local)) {\n            return Object.assign({}, target, local);\n          }\n          return valueOrDefault(local, target);\n        },\n        set(value) {\n          this[privateName] = value;\n        }\n      }\n    });\n  }\n}\nvar defaults = new Defaults({\n  _scriptable: (name) => !name.startsWith('on'),\n  _indexable: (name) => name !== 'events',\n  hover: {\n    _fallback: 'interaction'\n  },\n  interaction: {\n    _scriptable: false,\n    _indexable: false,\n  }\n});\n\nfunction toFontString(font) {\n  if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n    return null;\n  }\n  return (font.style ? font.style + ' ' : '')\n\t\t+ (font.weight ? font.weight + ' ' : '')\n\t\t+ font.size + 'px '\n\t\t+ font.family;\n}\nfunction _measureText(ctx, data, gc, longest, string) {\n  let textWidth = data[string];\n  if (!textWidth) {\n    textWidth = data[string] = ctx.measureText(string).width;\n    gc.push(string);\n  }\n  if (textWidth > longest) {\n    longest = textWidth;\n  }\n  return longest;\n}\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n  cache = cache || {};\n  let data = cache.data = cache.data || {};\n  let gc = cache.garbageCollect = cache.garbageCollect || [];\n  if (cache.font !== font) {\n    data = cache.data = {};\n    gc = cache.garbageCollect = [];\n    cache.font = font;\n  }\n  ctx.save();\n  ctx.font = font;\n  let longest = 0;\n  const ilen = arrayOfThings.length;\n  let i, j, jlen, thing, nestedThing;\n  for (i = 0; i < ilen; i++) {\n    thing = arrayOfThings[i];\n    if (thing !== undefined && thing !== null && isArray(thing) !== true) {\n      longest = _measureText(ctx, data, gc, longest, thing);\n    } else if (isArray(thing)) {\n      for (j = 0, jlen = thing.length; j < jlen; j++) {\n        nestedThing = thing[j];\n        if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n          longest = _measureText(ctx, data, gc, longest, nestedThing);\n        }\n      }\n    }\n  }\n  ctx.restore();\n  const gcLen = gc.length / 2;\n  if (gcLen > arrayOfThings.length) {\n    for (i = 0; i < gcLen; i++) {\n      delete data[gc[i]];\n    }\n    gc.splice(0, gcLen);\n  }\n  return longest;\n}\nfunction _alignPixel(chart, pixel, width) {\n  const devicePixelRatio = chart.currentDevicePixelRatio;\n  const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n  return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\nfunction clearCanvas(canvas, ctx) {\n  ctx = ctx || canvas.getContext('2d');\n  ctx.save();\n  ctx.resetTransform();\n  ctx.clearRect(0, 0, canvas.width, canvas.height);\n  ctx.restore();\n}\nfunction drawPoint(ctx, options, x, y) {\n  drawPointLegend(ctx, options, x, y, null);\n}\nfunction drawPointLegend(ctx, options, x, y, w) {\n  let type, xOffset, yOffset, size, cornerRadius, width;\n  const style = options.pointStyle;\n  const rotation = options.rotation;\n  const radius = options.radius;\n  let rad = (rotation || 0) * RAD_PER_DEG;\n  if (style && typeof style === 'object') {\n    type = style.toString();\n    if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n      ctx.save();\n      ctx.translate(x, y);\n      ctx.rotate(rad);\n      ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n      ctx.restore();\n      return;\n    }\n  }\n  if (isNaN(radius) || radius <= 0) {\n    return;\n  }\n  ctx.beginPath();\n  switch (style) {\n  default:\n    if (w) {\n      ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n    } else {\n      ctx.arc(x, y, radius, 0, TAU);\n    }\n    ctx.closePath();\n    break;\n  case 'triangle':\n    ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n    rad += TWO_THIRDS_PI;\n    ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n    rad += TWO_THIRDS_PI;\n    ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n    ctx.closePath();\n    break;\n  case 'rectRounded':\n    cornerRadius = radius * 0.516;\n    size = radius - cornerRadius;\n    xOffset = Math.cos(rad + QUARTER_PI) * size;\n    yOffset = Math.sin(rad + QUARTER_PI) * size;\n    ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n    ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n    ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n    ctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n    ctx.closePath();\n    break;\n  case 'rect':\n    if (!rotation) {\n      size = Math.SQRT1_2 * radius;\n      width = w ? w / 2 : size;\n      ctx.rect(x - width, y - size, 2 * width, 2 * size);\n      break;\n    }\n    rad += QUARTER_PI;\n  case 'rectRot':\n    xOffset = Math.cos(rad) * radius;\n    yOffset = Math.sin(rad) * radius;\n    ctx.moveTo(x - xOffset, y - yOffset);\n    ctx.lineTo(x + yOffset, y - xOffset);\n    ctx.lineTo(x + xOffset, y + yOffset);\n    ctx.lineTo(x - yOffset, y + xOffset);\n    ctx.closePath();\n    break;\n  case 'crossRot':\n    rad += QUARTER_PI;\n  case 'cross':\n    xOffset = Math.cos(rad) * radius;\n    yOffset = Math.sin(rad) * radius;\n    ctx.moveTo(x - xOffset, y - yOffset);\n    ctx.lineTo(x + xOffset, y + yOffset);\n    ctx.moveTo(x + yOffset, y - xOffset);\n    ctx.lineTo(x - yOffset, y + xOffset);\n    break;\n  case 'star':\n    xOffset = Math.cos(rad) * radius;\n    yOffset = Math.sin(rad) * radius;\n    ctx.moveTo(x - xOffset, y - yOffset);\n    ctx.lineTo(x + xOffset, y + yOffset);\n    ctx.moveTo(x + yOffset, y - xOffset);\n    ctx.lineTo(x - yOffset, y + xOffset);\n    rad += QUARTER_PI;\n    xOffset = Math.cos(rad) * radius;\n    yOffset = Math.sin(rad) * radius;\n    ctx.moveTo(x - xOffset, y - yOffset);\n    ctx.lineTo(x + xOffset, y + yOffset);\n    ctx.moveTo(x + yOffset, y - xOffset);\n    ctx.lineTo(x - yOffset, y + xOffset);\n    break;\n  case 'line':\n    xOffset = w ? w / 2 : Math.cos(rad) * radius;\n    yOffset = Math.sin(rad) * radius;\n    ctx.moveTo(x - xOffset, y - yOffset);\n    ctx.lineTo(x + xOffset, y + yOffset);\n    break;\n  case 'dash':\n    ctx.moveTo(x, y);\n    ctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);\n    break;\n  }\n  ctx.fill();\n  if (options.borderWidth > 0) {\n    ctx.stroke();\n  }\n}\nfunction _isPointInArea(point, area, margin) {\n  margin = margin || 0.5;\n  return !area || (point && point.x > area.left - margin && point.x < area.right + margin &&\n\t\tpoint.y > area.top - margin && point.y < area.bottom + margin);\n}\nfunction clipArea(ctx, area) {\n  ctx.save();\n  ctx.beginPath();\n  ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n  ctx.clip();\n}\nfunction unclipArea(ctx) {\n  ctx.restore();\n}\nfunction _steppedLineTo(ctx, previous, target, flip, mode) {\n  if (!previous) {\n    return ctx.lineTo(target.x, target.y);\n  }\n  if (mode === 'middle') {\n    const midpoint = (previous.x + target.x) / 2.0;\n    ctx.lineTo(midpoint, previous.y);\n    ctx.lineTo(midpoint, target.y);\n  } else if (mode === 'after' !== !!flip) {\n    ctx.lineTo(previous.x, target.y);\n  } else {\n    ctx.lineTo(target.x, previous.y);\n  }\n  ctx.lineTo(target.x, target.y);\n}\nfunction _bezierCurveTo(ctx, previous, target, flip) {\n  if (!previous) {\n    return ctx.lineTo(target.x, target.y);\n  }\n  ctx.bezierCurveTo(\n    flip ? previous.cp1x : previous.cp2x,\n    flip ? previous.cp1y : previous.cp2y,\n    flip ? target.cp2x : target.cp1x,\n    flip ? target.cp2y : target.cp1y,\n    target.x,\n    target.y);\n}\nfunction renderText(ctx, text, x, y, font, opts = {}) {\n  const lines = isArray(text) ? text : [text];\n  const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n  let i, line;\n  ctx.save();\n  ctx.font = font.string;\n  setRenderOpts(ctx, opts);\n  for (i = 0; i < lines.length; ++i) {\n    line = lines[i];\n    if (stroke) {\n      if (opts.strokeColor) {\n        ctx.strokeStyle = opts.strokeColor;\n      }\n      if (!isNullOrUndef(opts.strokeWidth)) {\n        ctx.lineWidth = opts.strokeWidth;\n      }\n      ctx.strokeText(line, x, y, opts.maxWidth);\n    }\n    ctx.fillText(line, x, y, opts.maxWidth);\n    decorateText(ctx, x, y, line, opts);\n    y += font.lineHeight;\n  }\n  ctx.restore();\n}\nfunction setRenderOpts(ctx, opts) {\n  if (opts.translation) {\n    ctx.translate(opts.translation[0], opts.translation[1]);\n  }\n  if (!isNullOrUndef(opts.rotation)) {\n    ctx.rotate(opts.rotation);\n  }\n  if (opts.color) {\n    ctx.fillStyle = opts.color;\n  }\n  if (opts.textAlign) {\n    ctx.textAlign = opts.textAlign;\n  }\n  if (opts.textBaseline) {\n    ctx.textBaseline = opts.textBaseline;\n  }\n}\nfunction decorateText(ctx, x, y, line, opts) {\n  if (opts.strikethrough || opts.underline) {\n    const metrics = ctx.measureText(line);\n    const left = x - metrics.actualBoundingBoxLeft;\n    const right = x + metrics.actualBoundingBoxRight;\n    const top = y - metrics.actualBoundingBoxAscent;\n    const bottom = y + metrics.actualBoundingBoxDescent;\n    const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n    ctx.strokeStyle = ctx.fillStyle;\n    ctx.beginPath();\n    ctx.lineWidth = opts.decorationWidth || 2;\n    ctx.moveTo(left, yDecoration);\n    ctx.lineTo(right, yDecoration);\n    ctx.stroke();\n  }\n}\nfunction addRoundedRectPath(ctx, rect) {\n  const {x, y, w, h, radius} = rect;\n  ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, -HALF_PI, PI, true);\n  ctx.lineTo(x, y + h - radius.bottomLeft);\n  ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n  ctx.lineTo(x + w - radius.bottomRight, y + h);\n  ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n  ctx.lineTo(x + w, y + radius.topRight);\n  ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n  ctx.lineTo(x + radius.topLeft, y);\n}\n\nconst LINE_HEIGHT = new RegExp(/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/);\nconst FONT_STYLE = new RegExp(/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/);\nfunction toLineHeight(value, size) {\n  const matches = ('' + value).match(LINE_HEIGHT);\n  if (!matches || matches[1] === 'normal') {\n    return size * 1.2;\n  }\n  value = +matches[2];\n  switch (matches[3]) {\n  case 'px':\n    return value;\n  case '%':\n    value /= 100;\n    break;\n  }\n  return size * value;\n}\nconst numberOrZero = v => +v || 0;\nfunction _readValueToProps(value, props) {\n  const ret = {};\n  const objProps = isObject(props);\n  const keys = objProps ? Object.keys(props) : props;\n  const read = isObject(value)\n    ? objProps\n      ? prop => valueOrDefault(value[prop], value[props[prop]])\n      : prop => value[prop]\n    : () => value;\n  for (const prop of keys) {\n    ret[prop] = numberOrZero(read(prop));\n  }\n  return ret;\n}\nfunction toTRBL(value) {\n  return _readValueToProps(value, {top: 'y', right: 'x', bottom: 'y', left: 'x'});\n}\nfunction toTRBLCorners(value) {\n  return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\n}\nfunction toPadding(value) {\n  const obj = toTRBL(value);\n  obj.width = obj.left + obj.right;\n  obj.height = obj.top + obj.bottom;\n  return obj;\n}\nfunction toFont(options, fallback) {\n  options = options || {};\n  fallback = fallback || defaults.font;\n  let size = valueOrDefault(options.size, fallback.size);\n  if (typeof size === 'string') {\n    size = parseInt(size, 10);\n  }\n  let style = valueOrDefault(options.style, fallback.style);\n  if (style && !('' + style).match(FONT_STYLE)) {\n    console.warn('Invalid font style specified: \"' + style + '\"');\n    style = '';\n  }\n  const font = {\n    family: valueOrDefault(options.family, fallback.family),\n    lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n    size,\n    style,\n    weight: valueOrDefault(options.weight, fallback.weight),\n    string: ''\n  };\n  font.string = toFontString(font);\n  return font;\n}\nfunction resolve(inputs, context, index, info) {\n  let cacheable = true;\n  let i, ilen, value;\n  for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n    value = inputs[i];\n    if (value === undefined) {\n      continue;\n    }\n    if (context !== undefined && typeof value === 'function') {\n      value = value(context);\n      cacheable = false;\n    }\n    if (index !== undefined && isArray(value)) {\n      value = value[index % value.length];\n      cacheable = false;\n    }\n    if (value !== undefined) {\n      if (info && !cacheable) {\n        info.cacheable = false;\n      }\n      return value;\n    }\n  }\n}\nfunction _addGrace(minmax, grace, beginAtZero) {\n  const {min, max} = minmax;\n  const change = toDimension(grace, (max - min) / 2);\n  const keepZero = (value, add) => beginAtZero && value === 0 ? 0 : value + add;\n  return {\n    min: keepZero(min, -Math.abs(change)),\n    max: keepZero(max, change)\n  };\n}\nfunction createContext(parentContext, context) {\n  return Object.assign(Object.create(parentContext), context);\n}\n\nfunction _createResolver(scopes, prefixes = [''], rootScopes = scopes, fallback, getTarget = () => scopes[0]) {\n  if (!defined(fallback)) {\n    fallback = _resolve('_fallback', scopes);\n  }\n  const cache = {\n    [Symbol.toStringTag]: 'Object',\n    _cacheable: true,\n    _scopes: scopes,\n    _rootScopes: rootScopes,\n    _fallback: fallback,\n    _getTarget: getTarget,\n    override: (scope) => _createResolver([scope, ...scopes], prefixes, rootScopes, fallback),\n  };\n  return new Proxy(cache, {\n    deleteProperty(target, prop) {\n      delete target[prop];\n      delete target._keys;\n      delete scopes[0][prop];\n      return true;\n    },\n    get(target, prop) {\n      return _cached(target, prop,\n        () => _resolveWithPrefixes(prop, prefixes, scopes, target));\n    },\n    getOwnPropertyDescriptor(target, prop) {\n      return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n    },\n    getPrototypeOf() {\n      return Reflect.getPrototypeOf(scopes[0]);\n    },\n    has(target, prop) {\n      return getKeysFromAllScopes(target).includes(prop);\n    },\n    ownKeys(target) {\n      return getKeysFromAllScopes(target);\n    },\n    set(target, prop, value) {\n      const storage = target._storage || (target._storage = getTarget());\n      target[prop] = storage[prop] = value;\n      delete target._keys;\n      return true;\n    }\n  });\n}\nfunction _attachContext(proxy, context, subProxy, descriptorDefaults) {\n  const cache = {\n    _cacheable: false,\n    _proxy: proxy,\n    _context: context,\n    _subProxy: subProxy,\n    _stack: new Set(),\n    _descriptors: _descriptors(proxy, descriptorDefaults),\n    setContext: (ctx) => _attachContext(proxy, ctx, subProxy, descriptorDefaults),\n    override: (scope) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n  };\n  return new Proxy(cache, {\n    deleteProperty(target, prop) {\n      delete target[prop];\n      delete proxy[prop];\n      return true;\n    },\n    get(target, prop, receiver) {\n      return _cached(target, prop,\n        () => _resolveWithContext(target, prop, receiver));\n    },\n    getOwnPropertyDescriptor(target, prop) {\n      return target._descriptors.allKeys\n        ? Reflect.has(proxy, prop) ? {enumerable: true, configurable: true} : undefined\n        : Reflect.getOwnPropertyDescriptor(proxy, prop);\n    },\n    getPrototypeOf() {\n      return Reflect.getPrototypeOf(proxy);\n    },\n    has(target, prop) {\n      return Reflect.has(proxy, prop);\n    },\n    ownKeys() {\n      return Reflect.ownKeys(proxy);\n    },\n    set(target, prop, value) {\n      proxy[prop] = value;\n      delete target[prop];\n      return true;\n    }\n  });\n}\nfunction _descriptors(proxy, defaults = {scriptable: true, indexable: true}) {\n  const {_scriptable = defaults.scriptable, _indexable = defaults.indexable, _allKeys = defaults.allKeys} = proxy;\n  return {\n    allKeys: _allKeys,\n    scriptable: _scriptable,\n    indexable: _indexable,\n    isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,\n    isIndexable: isFunction(_indexable) ? _indexable : () => _indexable\n  };\n}\nconst readKey = (prefix, name) => prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value) => isObject(value) && prop !== 'adapters' &&\n  (Object.getPrototypeOf(value) === null || value.constructor === Object);\nfunction _cached(target, prop, resolve) {\n  if (Object.prototype.hasOwnProperty.call(target, prop)) {\n    return target[prop];\n  }\n  const value = resolve();\n  target[prop] = value;\n  return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n  const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n  let value = _proxy[prop];\n  if (isFunction(value) && descriptors.isScriptable(prop)) {\n    value = _resolveScriptable(prop, value, target, receiver);\n  }\n  if (isArray(value) && value.length) {\n    value = _resolveArray(prop, value, target, descriptors.isIndexable);\n  }\n  if (needsSubResolver(prop, value)) {\n    value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n  }\n  return value;\n}\nfunction _resolveScriptable(prop, value, target, receiver) {\n  const {_proxy, _context, _subProxy, _stack} = target;\n  if (_stack.has(prop)) {\n    throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n  }\n  _stack.add(prop);\n  value = value(_context, _subProxy || receiver);\n  _stack.delete(prop);\n  if (needsSubResolver(prop, value)) {\n    value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n  }\n  return value;\n}\nfunction _resolveArray(prop, value, target, isIndexable) {\n  const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n  if (defined(_context.index) && isIndexable(prop)) {\n    value = value[_context.index % value.length];\n  } else if (isObject(value[0])) {\n    const arr = value;\n    const scopes = _proxy._scopes.filter(s => s !== arr);\n    value = [];\n    for (const item of arr) {\n      const resolver = createSubResolver(scopes, _proxy, prop, item);\n      value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n    }\n  }\n  return value;\n}\nfunction resolveFallback(fallback, prop, value) {\n  return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nconst getScope = (key, parent) => key === true ? parent\n  : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\n  for (const parent of parentScopes) {\n    const scope = getScope(key, parent);\n    if (scope) {\n      set.add(scope);\n      const fallback = resolveFallback(scope._fallback, key, value);\n      if (defined(fallback) && fallback !== key && fallback !== parentFallback) {\n        return fallback;\n      }\n    } else if (scope === false && defined(parentFallback) && key !== parentFallback) {\n      return null;\n    }\n  }\n  return false;\n}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n  const rootScopes = resolver._rootScopes;\n  const fallback = resolveFallback(resolver._fallback, prop, value);\n  const allScopes = [...parentScopes, ...rootScopes];\n  const set = new Set();\n  set.add(value);\n  let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n  if (key === null) {\n    return false;\n  }\n  if (defined(fallback) && fallback !== prop) {\n    key = addScopesFromKey(set, allScopes, fallback, key, value);\n    if (key === null) {\n      return false;\n    }\n  }\n  return _createResolver(Array.from(set), [''], rootScopes, fallback,\n    () => subGetTarget(resolver, prop, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n  while (key) {\n    key = addScopes(set, allScopes, key, fallback, item);\n  }\n  return key;\n}\nfunction subGetTarget(resolver, prop, value) {\n  const parent = resolver._getTarget();\n  if (!(prop in parent)) {\n    parent[prop] = {};\n  }\n  const target = parent[prop];\n  if (isArray(target) && isObject(value)) {\n    return value;\n  }\n  return target;\n}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n  let value;\n  for (const prefix of prefixes) {\n    value = _resolve(readKey(prefix, prop), scopes);\n    if (defined(value)) {\n      return needsSubResolver(prop, value)\n        ? createSubResolver(scopes, proxy, prop, value)\n        : value;\n    }\n  }\n}\nfunction _resolve(key, scopes) {\n  for (const scope of scopes) {\n    if (!scope) {\n      continue;\n    }\n    const value = scope[key];\n    if (defined(value)) {\n      return value;\n    }\n  }\n}\nfunction getKeysFromAllScopes(target) {\n  let keys = target._keys;\n  if (!keys) {\n    keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n  }\n  return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n  const set = new Set();\n  for (const scope of scopes) {\n    for (const key of Object.keys(scope).filter(k => !k.startsWith('_'))) {\n      set.add(key);\n    }\n  }\n  return Array.from(set);\n}\nfunction _parseObjectDataRadialScale(meta, data, start, count) {\n  const {iScale} = meta;\n  const {key = 'r'} = this._parsing;\n  const parsed = new Array(count);\n  let i, ilen, index, item;\n  for (i = 0, ilen = count; i < ilen; ++i) {\n    index = i + start;\n    item = data[index];\n    parsed[i] = {\n      r: iScale.parse(resolveObjectKey(item, key), index)\n    };\n  }\n  return parsed;\n}\n\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i) => i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis) => indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n  const previous = firstPoint.skip ? middlePoint : firstPoint;\n  const current = middlePoint;\n  const next = afterPoint.skip ? middlePoint : afterPoint;\n  const d01 = distanceBetweenPoints(current, previous);\n  const d12 = distanceBetweenPoints(next, current);\n  let s01 = d01 / (d01 + d12);\n  let s12 = d12 / (d01 + d12);\n  s01 = isNaN(s01) ? 0 : s01;\n  s12 = isNaN(s12) ? 0 : s12;\n  const fa = t * s01;\n  const fb = t * s12;\n  return {\n    previous: {\n      x: current.x - fa * (next.x - previous.x),\n      y: current.y - fa * (next.y - previous.y)\n    },\n    next: {\n      x: current.x + fb * (next.x - previous.x),\n      y: current.y + fb * (next.y - previous.y)\n    }\n  };\n}\nfunction monotoneAdjust(points, deltaK, mK) {\n  const pointsLen = points.length;\n  let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n  let pointAfter = getPoint(points, 0);\n  for (let i = 0; i < pointsLen - 1; ++i) {\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent || !pointAfter) {\n      continue;\n    }\n    if (almostEquals(deltaK[i], 0, EPSILON)) {\n      mK[i] = mK[i + 1] = 0;\n      continue;\n    }\n    alphaK = mK[i] / deltaK[i];\n    betaK = mK[i + 1] / deltaK[i];\n    squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n    if (squaredMagnitude <= 9) {\n      continue;\n    }\n    tauK = 3 / Math.sqrt(squaredMagnitude);\n    mK[i] = alphaK * tauK * deltaK[i];\n    mK[i + 1] = betaK * tauK * deltaK[i];\n  }\n}\nfunction monotoneCompute(points, mK, indexAxis = 'x') {\n  const valueAxis = getValueAxis(indexAxis);\n  const pointsLen = points.length;\n  let delta, pointBefore, pointCurrent;\n  let pointAfter = getPoint(points, 0);\n  for (let i = 0; i < pointsLen; ++i) {\n    pointBefore = pointCurrent;\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent) {\n      continue;\n    }\n    const iPixel = pointCurrent[indexAxis];\n    const vPixel = pointCurrent[valueAxis];\n    if (pointBefore) {\n      delta = (iPixel - pointBefore[indexAxis]) / 3;\n      pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n      pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n    }\n    if (pointAfter) {\n      delta = (pointAfter[indexAxis] - iPixel) / 3;\n      pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n      pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n    }\n  }\n}\nfunction splineCurveMonotone(points, indexAxis = 'x') {\n  const valueAxis = getValueAxis(indexAxis);\n  const pointsLen = points.length;\n  const deltaK = Array(pointsLen).fill(0);\n  const mK = Array(pointsLen);\n  let i, pointBefore, pointCurrent;\n  let pointAfter = getPoint(points, 0);\n  for (i = 0; i < pointsLen; ++i) {\n    pointBefore = pointCurrent;\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent) {\n      continue;\n    }\n    if (pointAfter) {\n      const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n      deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n    }\n    mK[i] = !pointBefore ? deltaK[i]\n      : !pointAfter ? deltaK[i - 1]\n      : (sign(deltaK[i - 1]) !== sign(deltaK[i])) ? 0\n      : (deltaK[i - 1] + deltaK[i]) / 2;\n  }\n  monotoneAdjust(points, deltaK, mK);\n  monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n  return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\n  let i, ilen, point, inArea, inAreaPrev;\n  let inAreaNext = _isPointInArea(points[0], area);\n  for (i = 0, ilen = points.length; i < ilen; ++i) {\n    inAreaPrev = inArea;\n    inArea = inAreaNext;\n    inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n    if (!inArea) {\n      continue;\n    }\n    point = points[i];\n    if (inAreaPrev) {\n      point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n      point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n    }\n    if (inAreaNext) {\n      point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n      point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n    }\n  }\n}\nfunction _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n  let i, ilen, point, controlPoints;\n  if (options.spanGaps) {\n    points = points.filter((pt) => !pt.skip);\n  }\n  if (options.cubicInterpolationMode === 'monotone') {\n    splineCurveMonotone(points, indexAxis);\n  } else {\n    let prev = loop ? points[points.length - 1] : points[0];\n    for (i = 0, ilen = points.length; i < ilen; ++i) {\n      point = points[i];\n      controlPoints = splineCurve(\n        prev,\n        point,\n        points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen],\n        options.tension\n      );\n      point.cp1x = controlPoints.previous.x;\n      point.cp1y = controlPoints.previous.y;\n      point.cp2x = controlPoints.next.x;\n      point.cp2y = controlPoints.next.y;\n      prev = point;\n    }\n  }\n  if (options.capBezierPoints) {\n    capBezierPoints(points, area);\n  }\n}\n\nfunction _isDomSupported() {\n  return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\nfunction _getParentNode(domNode) {\n  let parent = domNode.parentNode;\n  if (parent && parent.toString() === '[object ShadowRoot]') {\n    parent = parent.host;\n  }\n  return parent;\n}\nfunction parseMaxStyle(styleValue, node, parentProperty) {\n  let valueInPixels;\n  if (typeof styleValue === 'string') {\n    valueInPixels = parseInt(styleValue, 10);\n    if (styleValue.indexOf('%') !== -1) {\n      valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n    }\n  } else {\n    valueInPixels = styleValue;\n  }\n  return valueInPixels;\n}\nconst getComputedStyle = (element) => window.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n  return getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = ['top', 'right', 'bottom', 'left'];\nfunction getPositionedStyle(styles, style, suffix) {\n  const result = {};\n  suffix = suffix ? '-' + suffix : '';\n  for (let i = 0; i < 4; i++) {\n    const pos = positions[i];\n    result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n  }\n  result.width = result.left + result.right;\n  result.height = result.top + result.bottom;\n  return result;\n}\nconst useOffsetPos = (x, y, target) => (x > 0 || y > 0) && (!target || !target.shadowRoot);\nfunction getCanvasPosition(e, canvas) {\n  const touches = e.touches;\n  const source = touches && touches.length ? touches[0] : e;\n  const {offsetX, offsetY} = source;\n  let box = false;\n  let x, y;\n  if (useOffsetPos(offsetX, offsetY, e.target)) {\n    x = offsetX;\n    y = offsetY;\n  } else {\n    const rect = canvas.getBoundingClientRect();\n    x = source.clientX - rect.left;\n    y = source.clientY - rect.top;\n    box = true;\n  }\n  return {x, y, box};\n}\nfunction getRelativePosition(evt, chart) {\n  if ('native' in evt) {\n    return evt;\n  }\n  const {canvas, currentDevicePixelRatio} = chart;\n  const style = getComputedStyle(canvas);\n  const borderBox = style.boxSizing === 'border-box';\n  const paddings = getPositionedStyle(style, 'padding');\n  const borders = getPositionedStyle(style, 'border', 'width');\n  const {x, y, box} = getCanvasPosition(evt, canvas);\n  const xOffset = paddings.left + (box && borders.left);\n  const yOffset = paddings.top + (box && borders.top);\n  let {width, height} = chart;\n  if (borderBox) {\n    width -= paddings.width + borders.width;\n    height -= paddings.height + borders.height;\n  }\n  return {\n    x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n    y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n  };\n}\nfunction getContainerSize(canvas, width, height) {\n  let maxWidth, maxHeight;\n  if (width === undefined || height === undefined) {\n    const container = _getParentNode(canvas);\n    if (!container) {\n      width = canvas.clientWidth;\n      height = canvas.clientHeight;\n    } else {\n      const rect = container.getBoundingClientRect();\n      const containerStyle = getComputedStyle(container);\n      const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n      const containerPadding = getPositionedStyle(containerStyle, 'padding');\n      width = rect.width - containerPadding.width - containerBorder.width;\n      height = rect.height - containerPadding.height - containerBorder.height;\n      maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n      maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n    }\n  }\n  return {\n    width,\n    height,\n    maxWidth: maxWidth || INFINITY,\n    maxHeight: maxHeight || INFINITY\n  };\n}\nconst round1 = v => Math.round(v * 10) / 10;\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n  const style = getComputedStyle(canvas);\n  const margins = getPositionedStyle(style, 'margin');\n  const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n  const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n  const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n  let {width, height} = containerSize;\n  if (style.boxSizing === 'content-box') {\n    const borders = getPositionedStyle(style, 'border', 'width');\n    const paddings = getPositionedStyle(style, 'padding');\n    width -= paddings.width + borders.width;\n    height -= paddings.height + borders.height;\n  }\n  width = Math.max(0, width - margins.width);\n  height = Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height - margins.height);\n  width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n  height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n  if (width && !height) {\n    height = round1(width / 2);\n  }\n  return {\n    width,\n    height\n  };\n}\nfunction retinaScale(chart, forceRatio, forceStyle) {\n  const pixelRatio = forceRatio || 1;\n  const deviceHeight = Math.floor(chart.height * pixelRatio);\n  const deviceWidth = Math.floor(chart.width * pixelRatio);\n  chart.height = deviceHeight / pixelRatio;\n  chart.width = deviceWidth / pixelRatio;\n  const canvas = chart.canvas;\n  if (canvas.style && (forceStyle || (!canvas.style.height && !canvas.style.width))) {\n    canvas.style.height = `${chart.height}px`;\n    canvas.style.width = `${chart.width}px`;\n  }\n  if (chart.currentDevicePixelRatio !== pixelRatio\n      || canvas.height !== deviceHeight\n      || canvas.width !== deviceWidth) {\n    chart.currentDevicePixelRatio = pixelRatio;\n    canvas.height = deviceHeight;\n    canvas.width = deviceWidth;\n    chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n    return true;\n  }\n  return false;\n}\nconst supportsEventListenerOptions = (function() {\n  let passiveSupported = false;\n  try {\n    const options = {\n      get passive() {\n        passiveSupported = true;\n        return false;\n      }\n    };\n    window.addEventListener('test', null, options);\n    window.removeEventListener('test', null, options);\n  } catch (e) {\n  }\n  return passiveSupported;\n}());\nfunction readUsedSize(element, property) {\n  const value = getStyle(element, property);\n  const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n  return matches ? +matches[1] : undefined;\n}\n\nfunction _pointInLine(p1, p2, t, mode) {\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: p1.y + t * (p2.y - p1.y)\n  };\n}\nfunction _steppedInterpolation(p1, p2, t, mode) {\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y\n    : mode === 'after' ? t < 1 ? p1.y : p2.y\n    : t > 0 ? p2.y : p1.y\n  };\n}\nfunction _bezierInterpolation(p1, p2, t, mode) {\n  const cp1 = {x: p1.cp2x, y: p1.cp2y};\n  const cp2 = {x: p2.cp1x, y: p2.cp1y};\n  const a = _pointInLine(p1, cp1, t);\n  const b = _pointInLine(cp1, cp2, t);\n  const c = _pointInLine(cp2, p2, t);\n  const d = _pointInLine(a, b, t);\n  const e = _pointInLine(b, c, t);\n  return _pointInLine(d, e, t);\n}\n\nconst intlCache = new Map();\nfunction getNumberFormat(locale, options) {\n  options = options || {};\n  const cacheKey = locale + JSON.stringify(options);\n  let formatter = intlCache.get(cacheKey);\n  if (!formatter) {\n    formatter = new Intl.NumberFormat(locale, options);\n    intlCache.set(cacheKey, formatter);\n  }\n  return formatter;\n}\nfunction formatNumber(num, locale, options) {\n  return getNumberFormat(locale, options).format(num);\n}\n\nconst getRightToLeftAdapter = function(rectX, width) {\n  return {\n    x(x) {\n      return rectX + rectX + width - x;\n    },\n    setWidth(w) {\n      width = w;\n    },\n    textAlign(align) {\n      if (align === 'center') {\n        return align;\n      }\n      return align === 'right' ? 'left' : 'right';\n    },\n    xPlus(x, value) {\n      return x - value;\n    },\n    leftForLtr(x, itemWidth) {\n      return x - itemWidth;\n    },\n  };\n};\nconst getLeftToRightAdapter = function() {\n  return {\n    x(x) {\n      return x;\n    },\n    setWidth(w) {\n    },\n    textAlign(align) {\n      return align;\n    },\n    xPlus(x, value) {\n      return x + value;\n    },\n    leftForLtr(x, _itemWidth) {\n      return x;\n    },\n  };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n  return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n  let style, original;\n  if (direction === 'ltr' || direction === 'rtl') {\n    style = ctx.canvas.style;\n    original = [\n      style.getPropertyValue('direction'),\n      style.getPropertyPriority('direction'),\n    ];\n    style.setProperty('direction', direction, 'important');\n    ctx.prevTextDirection = original;\n  }\n}\nfunction restoreTextDirection(ctx, original) {\n  if (original !== undefined) {\n    delete ctx.prevTextDirection;\n    ctx.canvas.style.setProperty('direction', original[0], original[1]);\n  }\n}\n\nfunction propertyFn(property) {\n  if (property === 'angle') {\n    return {\n      between: _angleBetween,\n      compare: _angleDiff,\n      normalize: _normalizeAngle,\n    };\n  }\n  return {\n    between: _isBetween,\n    compare: (a, b) => a - b,\n    normalize: x => x\n  };\n}\nfunction normalizeSegment({start, end, count, loop, style}) {\n  return {\n    start: start % count,\n    end: end % count,\n    loop: loop && (end - start + 1) % count === 0,\n    style\n  };\n}\nfunction getSegment(segment, points, bounds) {\n  const {property, start: startBound, end: endBound} = bounds;\n  const {between, normalize} = propertyFn(property);\n  const count = points.length;\n  let {start, end, loop} = segment;\n  let i, ilen;\n  if (loop) {\n    start += count;\n    end += count;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n        break;\n      }\n      start--;\n      end--;\n    }\n    start %= count;\n    end %= count;\n  }\n  if (end < start) {\n    end += count;\n  }\n  return {start, end, loop, style: segment.style};\n}\nfunction _boundSegment(segment, points, bounds) {\n  if (!bounds) {\n    return [segment];\n  }\n  const {property, start: startBound, end: endBound} = bounds;\n  const count = points.length;\n  const {compare, between, normalize} = propertyFn(property);\n  const {start, end, loop, style} = getSegment(segment, points, bounds);\n  const result = [];\n  let inside = false;\n  let subStart = null;\n  let value, point, prevValue;\n  const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n  const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value);\n  const shouldStart = () => inside || startIsBefore();\n  const shouldStop = () => !inside || endIsBefore();\n  for (let i = start, prev = start; i <= end; ++i) {\n    point = points[i % count];\n    if (point.skip) {\n      continue;\n    }\n    value = normalize(point[property]);\n    if (value === prevValue) {\n      continue;\n    }\n    inside = between(value, startBound, endBound);\n    if (subStart === null && shouldStart()) {\n      subStart = compare(value, startBound) === 0 ? i : prev;\n    }\n    if (subStart !== null && shouldStop()) {\n      result.push(normalizeSegment({start: subStart, end: i, loop, count, style}));\n      subStart = null;\n    }\n    prev = i;\n    prevValue = value;\n  }\n  if (subStart !== null) {\n    result.push(normalizeSegment({start: subStart, end, loop, count, style}));\n  }\n  return result;\n}\nfunction _boundSegments(line, bounds) {\n  const result = [];\n  const segments = line.segments;\n  for (let i = 0; i < segments.length; i++) {\n    const sub = _boundSegment(segments[i], line.points, bounds);\n    if (sub.length) {\n      result.push(...sub);\n    }\n  }\n  return result;\n}\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n  let start = 0;\n  let end = count - 1;\n  if (loop && !spanGaps) {\n    while (start < count && !points[start].skip) {\n      start++;\n    }\n  }\n  while (start < count && points[start].skip) {\n    start++;\n  }\n  start %= count;\n  if (loop) {\n    end += start;\n  }\n  while (end > start && points[end % count].skip) {\n    end--;\n  }\n  end %= count;\n  return {start, end};\n}\nfunction solidSegments(points, start, max, loop) {\n  const count = points.length;\n  const result = [];\n  let last = start;\n  let prev = points[start];\n  let end;\n  for (end = start + 1; end <= max; ++end) {\n    const cur = points[end % count];\n    if (cur.skip || cur.stop) {\n      if (!prev.skip) {\n        loop = false;\n        result.push({start: start % count, end: (end - 1) % count, loop});\n        start = last = cur.stop ? end : null;\n      }\n    } else {\n      last = end;\n      if (prev.skip) {\n        start = end;\n      }\n    }\n    prev = cur;\n  }\n  if (last !== null) {\n    result.push({start: start % count, end: last % count, loop});\n  }\n  return result;\n}\nfunction _computeSegments(line, segmentOptions) {\n  const points = line.points;\n  const spanGaps = line.options.spanGaps;\n  const count = points.length;\n  if (!count) {\n    return [];\n  }\n  const loop = !!line._loop;\n  const {start, end} = findStartAndEnd(points, count, loop, spanGaps);\n  if (spanGaps === true) {\n    return splitByStyles(line, [{start, end, loop}], points, segmentOptions);\n  }\n  const max = end < start ? end + count : end;\n  const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n  return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\nfunction splitByStyles(line, segments, points, segmentOptions) {\n  if (!segmentOptions || !segmentOptions.setContext || !points) {\n    return segments;\n  }\n  return doSplitByStyles(line, segments, points, segmentOptions);\n}\nfunction doSplitByStyles(line, segments, points, segmentOptions) {\n  const chartContext = line._chart.getContext();\n  const baseStyle = readStyle(line.options);\n  const {_datasetIndex: datasetIndex, options: {spanGaps}} = line;\n  const count = points.length;\n  const result = [];\n  let prevStyle = baseStyle;\n  let start = segments[0].start;\n  let i = start;\n  function addStyle(s, e, l, st) {\n    const dir = spanGaps ? -1 : 1;\n    if (s === e) {\n      return;\n    }\n    s += count;\n    while (points[s % count].skip) {\n      s -= dir;\n    }\n    while (points[e % count].skip) {\n      e += dir;\n    }\n    if (s % count !== e % count) {\n      result.push({start: s % count, end: e % count, loop: l, style: st});\n      prevStyle = st;\n      start = e % count;\n    }\n  }\n  for (const segment of segments) {\n    start = spanGaps ? start : segment.start;\n    let prev = points[start % count];\n    let style;\n    for (i = start + 1; i <= segment.end; i++) {\n      const pt = points[i % count];\n      style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n        type: 'segment',\n        p0: prev,\n        p1: pt,\n        p0DataIndex: (i - 1) % count,\n        p1DataIndex: i % count,\n        datasetIndex\n      })));\n      if (styleChanged(style, prevStyle)) {\n        addStyle(start, i - 1, segment.loop, prevStyle);\n      }\n      prev = pt;\n      prevStyle = style;\n    }\n    if (start < i - 1) {\n      addStyle(start, i - 1, segment.loop, prevStyle);\n    }\n  }\n  return result;\n}\nfunction readStyle(options) {\n  return {\n    backgroundColor: options.backgroundColor,\n    borderCapStyle: options.borderCapStyle,\n    borderDash: options.borderDash,\n    borderDashOffset: options.borderDashOffset,\n    borderJoinStyle: options.borderJoinStyle,\n    borderWidth: options.borderWidth,\n    borderColor: options.borderColor\n  };\n}\nfunction styleChanged(style, prevStyle) {\n  return prevStyle && JSON.stringify(style) !== JSON.stringify(prevStyle);\n}\n\nexport { _isPointInArea as $, _factorize as A, finiteOrDefault as B, callback as C, _addGrace as D, _limitValue as E, toDegrees as F, _measureText as G, HALF_PI as H, _int16Range as I, _alignPixel as J, toPadding as K, clipArea as L, renderText as M, unclipArea as N, toFont as O, PI as P, each as Q, _toLeftRightCenter as R, _alignStartEnd as S, TAU as T, overrides as U, merge as V, _capitalize as W, getRelativePosition as X, _rlookupByKey as Y, _lookupByKey as Z, _arrayUnique as _, resolve as a, toLineHeight as a$, getAngleFromPoint as a0, getMaximumSize as a1, _getParentNode as a2, readUsedSize as a3, throttled as a4, supportsEventListenerOptions as a5, _isDomSupported as a6, descriptors as a7, isFunction as a8, _attachContext as a9, getRtlAdapter as aA, overrideTextDirection as aB, _textX as aC, restoreTextDirection as aD, drawPointLegend as aE, noop as aF, distanceBetweenPoints as aG, _setMinAndMaxByKey as aH, niceNum as aI, almostWhole as aJ, almostEquals as aK, _decimalPlaces as aL, _longestText as aM, _filterBetween as aN, _lookup as aO, isPatternOrGradient as aP, getHoverColor as aQ, clone$1 as aR, _merger as aS, _mergerIf as aT, _deprecated as aU, _splitKey as aV, toFontString as aW, splineCurve as aX, splineCurveMonotone as aY, getStyle as aZ, fontString as a_, _createResolver as aa, _descriptors as ab, mergeIf as ac, uid as ad, debounce as ae, retinaScale as af, clearCanvas as ag, setsEqual as ah, _elementsEqual as ai, _isClickEvent as aj, _isBetween as ak, _readValueToProps as al, _updateBezierControlPoints as am, _computeSegments as an, _boundSegments as ao, _steppedInterpolation as ap, _bezierInterpolation as aq, _pointInLine as ar, _steppedLineTo as as, _bezierCurveTo as at, drawPoint as au, addRoundedRectPath as av, toTRBL as aw, toTRBLCorners as ax, _boundSegment as ay, _normalizeAngle as az, isArray as b, PITAU as b0, INFINITY as b1, RAD_PER_DEG as b2, QUARTER_PI as b3, TWO_THIRDS_PI as b4, _angleDiff as b5, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, createContext as h, isObject as i, defined as j, isNullOrUndef as k, listenArrayEvents as l, toPercentage as m, toDimension as n, formatNumber as o, _angleBetween as p, _getStartAndCountOfVisiblePoints as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _scaleRangesChanged as w, isNumber as x, _parseObjectDataRadialScale as y, log10 as z };\n","/*!\n * Chart.js v3.9.1\n * https://www.chartjs.org\n * (c) 2022 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as color, d as defaults, i as isObject, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as createContext, j as defined, s as sign, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as _getStartAndCountOfVisiblePoints, w as _scaleRangesChanged, x as isNumber, y as _parseObjectDataRadialScale, z as log10, A as _factorize, B as finiteOrDefault, C as callback, D as _addGrace, E as _limitValue, F as toDegrees, G as _measureText, I as _int16Range, J as _alignPixel, K as toPadding, L as clipArea, M as renderText, N as unclipArea, O as toFont, Q as each, R as _toLeftRightCenter, S as _alignStartEnd, U as overrides, V as merge, W as _capitalize, X as getRelativePosition, Y as _rlookupByKey, Z as _lookupByKey, $ as _isPointInArea, a0 as getAngleFromPoint, a1 as getMaximumSize, a2 as _getParentNode, a3 as readUsedSize, a4 as throttled, a5 as supportsEventListenerOptions, a6 as _isDomSupported, a7 as descriptors, a8 as isFunction, a9 as _attachContext, aa as _createResolver, ab as _descriptors, ac as mergeIf, ad as uid, ae as debounce, af as retinaScale, ag as clearCanvas, ah as setsEqual, ai as _elementsEqual, aj as _isClickEvent, ak as _isBetween, al as _readValueToProps, am as _updateBezierControlPoints, an as _computeSegments, ao as _boundSegments, ap as _steppedInterpolation, aq as _bezierInterpolation, ar as _pointInLine, as as _steppedLineTo, at as _bezierCurveTo, au as drawPoint, av as addRoundedRectPath, aw as toTRBL, ax as toTRBLCorners, ay as _boundSegment, az as _normalizeAngle, aA as getRtlAdapter, aB as overrideTextDirection, aC as _textX, aD as restoreTextDirection, aE as drawPointLegend, aF as noop, aG as distanceBetweenPoints, aH as _setMinAndMaxByKey, aI as niceNum, aJ as almostWhole, aK as almostEquals, aL as _decimalPlaces, aM as _longestText, aN as _filterBetween, aO as _lookup } from './chunks/helpers.segment.mjs';\nexport { d as defaults } from './chunks/helpers.segment.mjs';\n\nclass Animator {\n  constructor() {\n    this._request = null;\n    this._charts = new Map();\n    this._running = false;\n    this._lastDate = undefined;\n  }\n  _notify(chart, anims, date, type) {\n    const callbacks = anims.listeners[type];\n    const numSteps = anims.duration;\n    callbacks.forEach(fn => fn({\n      chart,\n      initial: anims.initial,\n      numSteps,\n      currentStep: Math.min(date - anims.start, numSteps)\n    }));\n  }\n  _refresh() {\n    if (this._request) {\n      return;\n    }\n    this._running = true;\n    this._request = requestAnimFrame.call(window, () => {\n      this._update();\n      this._request = null;\n      if (this._running) {\n        this._refresh();\n      }\n    });\n  }\n  _update(date = Date.now()) {\n    let remaining = 0;\n    this._charts.forEach((anims, chart) => {\n      if (!anims.running || !anims.items.length) {\n        return;\n      }\n      const items = anims.items;\n      let i = items.length - 1;\n      let draw = false;\n      let item;\n      for (; i >= 0; --i) {\n        item = items[i];\n        if (item._active) {\n          if (item._total > anims.duration) {\n            anims.duration = item._total;\n          }\n          item.tick(date);\n          draw = true;\n        } else {\n          items[i] = items[items.length - 1];\n          items.pop();\n        }\n      }\n      if (draw) {\n        chart.draw();\n        this._notify(chart, anims, date, 'progress');\n      }\n      if (!items.length) {\n        anims.running = false;\n        this._notify(chart, anims, date, 'complete');\n        anims.initial = false;\n      }\n      remaining += items.length;\n    });\n    this._lastDate = date;\n    if (remaining === 0) {\n      this._running = false;\n    }\n  }\n  _getAnims(chart) {\n    const charts = this._charts;\n    let anims = charts.get(chart);\n    if (!anims) {\n      anims = {\n        running: false,\n        initial: true,\n        items: [],\n        listeners: {\n          complete: [],\n          progress: []\n        }\n      };\n      charts.set(chart, anims);\n    }\n    return anims;\n  }\n  listen(chart, event, cb) {\n    this._getAnims(chart).listeners[event].push(cb);\n  }\n  add(chart, items) {\n    if (!items || !items.length) {\n      return;\n    }\n    this._getAnims(chart).items.push(...items);\n  }\n  has(chart) {\n    return this._getAnims(chart).items.length > 0;\n  }\n  start(chart) {\n    const anims = this._charts.get(chart);\n    if (!anims) {\n      return;\n    }\n    anims.running = true;\n    anims.start = Date.now();\n    anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);\n    this._refresh();\n  }\n  running(chart) {\n    if (!this._running) {\n      return false;\n    }\n    const anims = this._charts.get(chart);\n    if (!anims || !anims.running || !anims.items.length) {\n      return false;\n    }\n    return true;\n  }\n  stop(chart) {\n    const anims = this._charts.get(chart);\n    if (!anims || !anims.items.length) {\n      return;\n    }\n    const items = anims.items;\n    let i = items.length - 1;\n    for (; i >= 0; --i) {\n      items[i].cancel();\n    }\n    anims.items = [];\n    this._notify(chart, anims, Date.now(), 'complete');\n  }\n  remove(chart) {\n    return this._charts.delete(chart);\n  }\n}\nvar animator = new Animator();\n\nconst transparent = 'transparent';\nconst interpolators = {\n  boolean(from, to, factor) {\n    return factor > 0.5 ? to : from;\n  },\n  color(from, to, factor) {\n    const c0 = color(from || transparent);\n    const c1 = c0.valid && color(to || transparent);\n    return c1 && c1.valid\n      ? c1.mix(c0, factor).hexString()\n      : to;\n  },\n  number(from, to, factor) {\n    return from + (to - from) * factor;\n  }\n};\nclass Animation {\n  constructor(cfg, target, prop, to) {\n    const currentValue = target[prop];\n    to = resolve([cfg.to, to, currentValue, cfg.from]);\n    const from = resolve([cfg.from, currentValue, to]);\n    this._active = true;\n    this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n    this._easing = effects[cfg.easing] || effects.linear;\n    this._start = Math.floor(Date.now() + (cfg.delay || 0));\n    this._duration = this._total = Math.floor(cfg.duration);\n    this._loop = !!cfg.loop;\n    this._target = target;\n    this._prop = prop;\n    this._from = from;\n    this._to = to;\n    this._promises = undefined;\n  }\n  active() {\n    return this._active;\n  }\n  update(cfg, to, date) {\n    if (this._active) {\n      this._notify(false);\n      const currentValue = this._target[this._prop];\n      const elapsed = date - this._start;\n      const remain = this._duration - elapsed;\n      this._start = date;\n      this._duration = Math.floor(Math.max(remain, cfg.duration));\n      this._total += elapsed;\n      this._loop = !!cfg.loop;\n      this._to = resolve([cfg.to, to, currentValue, cfg.from]);\n      this._from = resolve([cfg.from, currentValue, to]);\n    }\n  }\n  cancel() {\n    if (this._active) {\n      this.tick(Date.now());\n      this._active = false;\n      this._notify(false);\n    }\n  }\n  tick(date) {\n    const elapsed = date - this._start;\n    const duration = this._duration;\n    const prop = this._prop;\n    const from = this._from;\n    const loop = this._loop;\n    const to = this._to;\n    let factor;\n    this._active = from !== to && (loop || (elapsed < duration));\n    if (!this._active) {\n      this._target[prop] = to;\n      this._notify(true);\n      return;\n    }\n    if (elapsed < 0) {\n      this._target[prop] = from;\n      return;\n    }\n    factor = (elapsed / duration) % 2;\n    factor = loop && factor > 1 ? 2 - factor : factor;\n    factor = this._easing(Math.min(1, Math.max(0, factor)));\n    this._target[prop] = this._fn(from, to, factor);\n  }\n  wait() {\n    const promises = this._promises || (this._promises = []);\n    return new Promise((res, rej) => {\n      promises.push({res, rej});\n    });\n  }\n  _notify(resolved) {\n    const method = resolved ? 'res' : 'rej';\n    const promises = this._promises || [];\n    for (let i = 0; i < promises.length; i++) {\n      promises[i][method]();\n    }\n  }\n}\n\nconst numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nconst colors = ['color', 'borderColor', 'backgroundColor'];\ndefaults.set('animation', {\n  delay: undefined,\n  duration: 1000,\n  easing: 'easeOutQuart',\n  fn: undefined,\n  from: undefined,\n  loop: undefined,\n  to: undefined,\n  type: undefined,\n});\nconst animationOptions = Object.keys(defaults.animation);\ndefaults.describe('animation', {\n  _fallback: false,\n  _indexable: false,\n  _scriptable: (name) => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn',\n});\ndefaults.set('animations', {\n  colors: {\n    type: 'color',\n    properties: colors\n  },\n  numbers: {\n    type: 'number',\n    properties: numbers\n  },\n});\ndefaults.describe('animations', {\n  _fallback: 'animation',\n});\ndefaults.set('transitions', {\n  active: {\n    animation: {\n      duration: 400\n    }\n  },\n  resize: {\n    animation: {\n      duration: 0\n    }\n  },\n  show: {\n    animations: {\n      colors: {\n        from: 'transparent'\n      },\n      visible: {\n        type: 'boolean',\n        duration: 0\n      },\n    }\n  },\n  hide: {\n    animations: {\n      colors: {\n        to: 'transparent'\n      },\n      visible: {\n        type: 'boolean',\n        easing: 'linear',\n        fn: v => v | 0\n      },\n    }\n  }\n});\nclass Animations {\n  constructor(chart, config) {\n    this._chart = chart;\n    this._properties = new Map();\n    this.configure(config);\n  }\n  configure(config) {\n    if (!isObject(config)) {\n      return;\n    }\n    const animatedProps = this._properties;\n    Object.getOwnPropertyNames(config).forEach(key => {\n      const cfg = config[key];\n      if (!isObject(cfg)) {\n        return;\n      }\n      const resolved = {};\n      for (const option of animationOptions) {\n        resolved[option] = cfg[option];\n      }\n      (isArray(cfg.properties) && cfg.properties || [key]).forEach((prop) => {\n        if (prop === key || !animatedProps.has(prop)) {\n          animatedProps.set(prop, resolved);\n        }\n      });\n    });\n  }\n  _animateOptions(target, values) {\n    const newOptions = values.options;\n    const options = resolveTargetOptions(target, newOptions);\n    if (!options) {\n      return [];\n    }\n    const animations = this._createAnimations(options, newOptions);\n    if (newOptions.$shared) {\n      awaitAll(target.options.$animations, newOptions).then(() => {\n        target.options = newOptions;\n      }, () => {\n      });\n    }\n    return animations;\n  }\n  _createAnimations(target, values) {\n    const animatedProps = this._properties;\n    const animations = [];\n    const running = target.$animations || (target.$animations = {});\n    const props = Object.keys(values);\n    const date = Date.now();\n    let i;\n    for (i = props.length - 1; i >= 0; --i) {\n      const prop = props[i];\n      if (prop.charAt(0) === '$') {\n        continue;\n      }\n      if (prop === 'options') {\n        animations.push(...this._animateOptions(target, values));\n        continue;\n      }\n      const value = values[prop];\n      let animation = running[prop];\n      const cfg = animatedProps.get(prop);\n      if (animation) {\n        if (cfg && animation.active()) {\n          animation.update(cfg, value, date);\n          continue;\n        } else {\n          animation.cancel();\n        }\n      }\n      if (!cfg || !cfg.duration) {\n        target[prop] = value;\n        continue;\n      }\n      running[prop] = animation = new Animation(cfg, target, prop, value);\n      animations.push(animation);\n    }\n    return animations;\n  }\n  update(target, values) {\n    if (this._properties.size === 0) {\n      Object.assign(target, values);\n      return;\n    }\n    const animations = this._createAnimations(target, values);\n    if (animations.length) {\n      animator.add(this._chart, animations);\n      return true;\n    }\n  }\n}\nfunction awaitAll(animations, properties) {\n  const running = [];\n  const keys = Object.keys(properties);\n  for (let i = 0; i < keys.length; i++) {\n    const anim = animations[keys[i]];\n    if (anim && anim.active()) {\n      running.push(anim.wait());\n    }\n  }\n  return Promise.all(running);\n}\nfunction resolveTargetOptions(target, newOptions) {\n  if (!newOptions) {\n    return;\n  }\n  let options = target.options;\n  if (!options) {\n    target.options = newOptions;\n    return;\n  }\n  if (options.$shared) {\n    target.options = options = Object.assign({}, options, {$shared: false, $animations: {}});\n  }\n  return options;\n}\n\nfunction scaleClip(scale, allowedOverflow) {\n  const opts = scale && scale.options || {};\n  const reverse = opts.reverse;\n  const min = opts.min === undefined ? allowedOverflow : 0;\n  const max = opts.max === undefined ? allowedOverflow : 0;\n  return {\n    start: reverse ? max : min,\n    end: reverse ? min : max\n  };\n}\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n  if (allowedOverflow === false) {\n    return false;\n  }\n  const x = scaleClip(xScale, allowedOverflow);\n  const y = scaleClip(yScale, allowedOverflow);\n  return {\n    top: y.end,\n    right: x.end,\n    bottom: y.start,\n    left: x.start\n  };\n}\nfunction toClip(value) {\n  let t, r, b, l;\n  if (isObject(value)) {\n    t = value.top;\n    r = value.right;\n    b = value.bottom;\n    l = value.left;\n  } else {\n    t = r = b = l = value;\n  }\n  return {\n    top: t,\n    right: r,\n    bottom: b,\n    left: l,\n    disabled: value === false\n  };\n}\nfunction getSortedDatasetIndices(chart, filterVisible) {\n  const keys = [];\n  const metasets = chart._getSortedDatasetMetas(filterVisible);\n  let i, ilen;\n  for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n    keys.push(metasets[i].index);\n  }\n  return keys;\n}\nfunction applyStack(stack, value, dsIndex, options = {}) {\n  const keys = stack.keys;\n  const singleMode = options.mode === 'single';\n  let i, ilen, datasetIndex, otherValue;\n  if (value === null) {\n    return;\n  }\n  for (i = 0, ilen = keys.length; i < ilen; ++i) {\n    datasetIndex = +keys[i];\n    if (datasetIndex === dsIndex) {\n      if (options.all) {\n        continue;\n      }\n      break;\n    }\n    otherValue = stack.values[datasetIndex];\n    if (isNumberFinite(otherValue) && (singleMode || (value === 0 || sign(value) === sign(otherValue)))) {\n      value += otherValue;\n    }\n  }\n  return value;\n}\nfunction convertObjectDataToArray(data) {\n  const keys = Object.keys(data);\n  const adata = new Array(keys.length);\n  let i, ilen, key;\n  for (i = 0, ilen = keys.length; i < ilen; ++i) {\n    key = keys[i];\n    adata[i] = {\n      x: key,\n      y: data[key]\n    };\n  }\n  return adata;\n}\nfunction isStacked(scale, meta) {\n  const stacked = scale && scale.options.stacked;\n  return stacked || (stacked === undefined && meta.stack !== undefined);\n}\nfunction getStackKey(indexScale, valueScale, meta) {\n  return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\nfunction getUserBounds(scale) {\n  const {min, max, minDefined, maxDefined} = scale.getUserBounds();\n  return {\n    min: minDefined ? min : Number.NEGATIVE_INFINITY,\n    max: maxDefined ? max : Number.POSITIVE_INFINITY\n  };\n}\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n  const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n  return subStack[indexValue] || (subStack[indexValue] = {});\n}\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n  for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) {\n    const value = stack[meta.index];\n    if ((positive && value > 0) || (!positive && value < 0)) {\n      return meta.index;\n    }\n  }\n  return null;\n}\nfunction updateStacks(controller, parsed) {\n  const {chart, _cachedMeta: meta} = controller;\n  const stacks = chart._stacks || (chart._stacks = {});\n  const {iScale, vScale, index: datasetIndex} = meta;\n  const iAxis = iScale.axis;\n  const vAxis = vScale.axis;\n  const key = getStackKey(iScale, vScale, meta);\n  const ilen = parsed.length;\n  let stack;\n  for (let i = 0; i < ilen; ++i) {\n    const item = parsed[i];\n    const {[iAxis]: index, [vAxis]: value} = item;\n    const itemStacks = item._stacks || (item._stacks = {});\n    stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n    stack[datasetIndex] = value;\n    stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n    stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n  }\n}\nfunction getFirstScaleId(chart, axis) {\n  const scales = chart.scales;\n  return Object.keys(scales).filter(key => scales[key].axis === axis).shift();\n}\nfunction createDatasetContext(parent, index) {\n  return createContext(parent,\n    {\n      active: false,\n      dataset: undefined,\n      datasetIndex: index,\n      index,\n      mode: 'default',\n      type: 'dataset'\n    }\n  );\n}\nfunction createDataContext(parent, index, element) {\n  return createContext(parent, {\n    active: false,\n    dataIndex: index,\n    parsed: undefined,\n    raw: undefined,\n    element,\n    index,\n    mode: 'default',\n    type: 'data'\n  });\n}\nfunction clearStacks(meta, items) {\n  const datasetIndex = meta.controller.index;\n  const axis = meta.vScale && meta.vScale.axis;\n  if (!axis) {\n    return;\n  }\n  items = items || meta._parsed;\n  for (const parsed of items) {\n    const stacks = parsed._stacks;\n    if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n      return;\n    }\n    delete stacks[axis][datasetIndex];\n  }\n}\nconst isDirectUpdateMode = (mode) => mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked\n  && {keys: getSortedDatasetIndices(chart, true), values: null};\nclass DatasetController {\n  constructor(chart, datasetIndex) {\n    this.chart = chart;\n    this._ctx = chart.ctx;\n    this.index = datasetIndex;\n    this._cachedDataOpts = {};\n    this._cachedMeta = this.getMeta();\n    this._type = this._cachedMeta.type;\n    this.options = undefined;\n    this._parsing = false;\n    this._data = undefined;\n    this._objectData = undefined;\n    this._sharedOptions = undefined;\n    this._drawStart = undefined;\n    this._drawCount = undefined;\n    this.enableOptionSharing = false;\n    this.supportsDecimation = false;\n    this.$context = undefined;\n    this._syncList = [];\n    this.initialize();\n  }\n  initialize() {\n    const meta = this._cachedMeta;\n    this.configure();\n    this.linkScales();\n    meta._stacked = isStacked(meta.vScale, meta);\n    this.addElements();\n  }\n  updateIndex(datasetIndex) {\n    if (this.index !== datasetIndex) {\n      clearStacks(this._cachedMeta);\n    }\n    this.index = datasetIndex;\n  }\n  linkScales() {\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const dataset = this.getDataset();\n    const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y;\n    const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n    const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n    const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n    const indexAxis = meta.indexAxis;\n    const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n    const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n    meta.xScale = this.getScaleForId(xid);\n    meta.yScale = this.getScaleForId(yid);\n    meta.rScale = this.getScaleForId(rid);\n    meta.iScale = this.getScaleForId(iid);\n    meta.vScale = this.getScaleForId(vid);\n  }\n  getDataset() {\n    return this.chart.data.datasets[this.index];\n  }\n  getMeta() {\n    return this.chart.getDatasetMeta(this.index);\n  }\n  getScaleForId(scaleID) {\n    return this.chart.scales[scaleID];\n  }\n  _getOtherScale(scale) {\n    const meta = this._cachedMeta;\n    return scale === meta.iScale\n      ? meta.vScale\n      : meta.iScale;\n  }\n  reset() {\n    this._update('reset');\n  }\n  _destroy() {\n    const meta = this._cachedMeta;\n    if (this._data) {\n      unlistenArrayEvents(this._data, this);\n    }\n    if (meta._stacked) {\n      clearStacks(meta);\n    }\n  }\n  _dataCheck() {\n    const dataset = this.getDataset();\n    const data = dataset.data || (dataset.data = []);\n    const _data = this._data;\n    if (isObject(data)) {\n      this._data = convertObjectDataToArray(data);\n    } else if (_data !== data) {\n      if (_data) {\n        unlistenArrayEvents(_data, this);\n        const meta = this._cachedMeta;\n        clearStacks(meta);\n        meta._parsed = [];\n      }\n      if (data && Object.isExtensible(data)) {\n        listenArrayEvents(data, this);\n      }\n      this._syncList = [];\n      this._data = data;\n    }\n  }\n  addElements() {\n    const meta = this._cachedMeta;\n    this._dataCheck();\n    if (this.datasetElementType) {\n      meta.dataset = new this.datasetElementType();\n    }\n  }\n  buildOrUpdateElements(resetNewElements) {\n    const meta = this._cachedMeta;\n    const dataset = this.getDataset();\n    let stackChanged = false;\n    this._dataCheck();\n    const oldStacked = meta._stacked;\n    meta._stacked = isStacked(meta.vScale, meta);\n    if (meta.stack !== dataset.stack) {\n      stackChanged = true;\n      clearStacks(meta);\n      meta.stack = dataset.stack;\n    }\n    this._resyncElements(resetNewElements);\n    if (stackChanged || oldStacked !== meta._stacked) {\n      updateStacks(this, meta._parsed);\n    }\n  }\n  configure() {\n    const config = this.chart.config;\n    const scopeKeys = config.datasetScopeKeys(this._type);\n    const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n    this.options = config.createResolver(scopes, this.getContext());\n    this._parsing = this.options.parsing;\n    this._cachedDataOpts = {};\n  }\n  parse(start, count) {\n    const {_cachedMeta: meta, _data: data} = this;\n    const {iScale, _stacked} = meta;\n    const iAxis = iScale.axis;\n    let sorted = start === 0 && count === data.length ? true : meta._sorted;\n    let prev = start > 0 && meta._parsed[start - 1];\n    let i, cur, parsed;\n    if (this._parsing === false) {\n      meta._parsed = data;\n      meta._sorted = true;\n      parsed = data;\n    } else {\n      if (isArray(data[start])) {\n        parsed = this.parseArrayData(meta, data, start, count);\n      } else if (isObject(data[start])) {\n        parsed = this.parseObjectData(meta, data, start, count);\n      } else {\n        parsed = this.parsePrimitiveData(meta, data, start, count);\n      }\n      const isNotInOrderComparedToPrev = () => cur[iAxis] === null || (prev && cur[iAxis] < prev[iAxis]);\n      for (i = 0; i < count; ++i) {\n        meta._parsed[i + start] = cur = parsed[i];\n        if (sorted) {\n          if (isNotInOrderComparedToPrev()) {\n            sorted = false;\n          }\n          prev = cur;\n        }\n      }\n      meta._sorted = sorted;\n    }\n    if (_stacked) {\n      updateStacks(this, parsed);\n    }\n  }\n  parsePrimitiveData(meta, data, start, count) {\n    const {iScale, vScale} = meta;\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const labels = iScale.getLabels();\n    const singleScale = iScale === vScale;\n    const parsed = new Array(count);\n    let i, ilen, index;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      parsed[i] = {\n        [iAxis]: singleScale || iScale.parse(labels[index], index),\n        [vAxis]: vScale.parse(data[index], index)\n      };\n    }\n    return parsed;\n  }\n  parseArrayData(meta, data, start, count) {\n    const {xScale, yScale} = meta;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      item = data[index];\n      parsed[i] = {\n        x: xScale.parse(item[0], index),\n        y: yScale.parse(item[1], index)\n      };\n    }\n    return parsed;\n  }\n  parseObjectData(meta, data, start, count) {\n    const {xScale, yScale} = meta;\n    const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      item = data[index];\n      parsed[i] = {\n        x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n        y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n      };\n    }\n    return parsed;\n  }\n  getParsed(index) {\n    return this._cachedMeta._parsed[index];\n  }\n  getDataElement(index) {\n    return this._cachedMeta.data[index];\n  }\n  applyStack(scale, parsed, mode) {\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const value = parsed[scale.axis];\n    const stack = {\n      keys: getSortedDatasetIndices(chart, true),\n      values: parsed._stacks[scale.axis]\n    };\n    return applyStack(stack, value, meta.index, {mode});\n  }\n  updateRangeFromParsed(range, scale, parsed, stack) {\n    const parsedValue = parsed[scale.axis];\n    let value = parsedValue === null ? NaN : parsedValue;\n    const values = stack && parsed._stacks[scale.axis];\n    if (stack && values) {\n      stack.values = values;\n      value = applyStack(stack, parsedValue, this._cachedMeta.index);\n    }\n    range.min = Math.min(range.min, value);\n    range.max = Math.max(range.max, value);\n  }\n  getMinMax(scale, canStack) {\n    const meta = this._cachedMeta;\n    const _parsed = meta._parsed;\n    const sorted = meta._sorted && scale === meta.iScale;\n    const ilen = _parsed.length;\n    const otherScale = this._getOtherScale(scale);\n    const stack = createStack(canStack, meta, this.chart);\n    const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n    const {min: otherMin, max: otherMax} = getUserBounds(otherScale);\n    let i, parsed;\n    function _skip() {\n      parsed = _parsed[i];\n      const otherValue = parsed[otherScale.axis];\n      return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n    }\n    for (i = 0; i < ilen; ++i) {\n      if (_skip()) {\n        continue;\n      }\n      this.updateRangeFromParsed(range, scale, parsed, stack);\n      if (sorted) {\n        break;\n      }\n    }\n    if (sorted) {\n      for (i = ilen - 1; i >= 0; --i) {\n        if (_skip()) {\n          continue;\n        }\n        this.updateRangeFromParsed(range, scale, parsed, stack);\n        break;\n      }\n    }\n    return range;\n  }\n  getAllParsedValues(scale) {\n    const parsed = this._cachedMeta._parsed;\n    const values = [];\n    let i, ilen, value;\n    for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n      value = parsed[i][scale.axis];\n      if (isNumberFinite(value)) {\n        values.push(value);\n      }\n    }\n    return values;\n  }\n  getMaxOverflow() {\n    return false;\n  }\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const iScale = meta.iScale;\n    const vScale = meta.vScale;\n    const parsed = this.getParsed(index);\n    return {\n      label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n      value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n    };\n  }\n  _update(mode) {\n    const meta = this._cachedMeta;\n    this.update(mode || 'default');\n    meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n  }\n  update(mode) {}\n  draw() {\n    const ctx = this._ctx;\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const elements = meta.data || [];\n    const area = chart.chartArea;\n    const active = [];\n    const start = this._drawStart || 0;\n    const count = this._drawCount || (elements.length - start);\n    const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n    let i;\n    if (meta.dataset) {\n      meta.dataset.draw(ctx, area, start, count);\n    }\n    for (i = start; i < start + count; ++i) {\n      const element = elements[i];\n      if (element.hidden) {\n        continue;\n      }\n      if (element.active && drawActiveElementsOnTop) {\n        active.push(element);\n      } else {\n        element.draw(ctx, area);\n      }\n    }\n    for (i = 0; i < active.length; ++i) {\n      active[i].draw(ctx, area);\n    }\n  }\n  getStyle(index, active) {\n    const mode = active ? 'active' : 'default';\n    return index === undefined && this._cachedMeta.dataset\n      ? this.resolveDatasetElementOptions(mode)\n      : this.resolveDataElementOptions(index || 0, mode);\n  }\n  getContext(index, active, mode) {\n    const dataset = this.getDataset();\n    let context;\n    if (index >= 0 && index < this._cachedMeta.data.length) {\n      const element = this._cachedMeta.data[index];\n      context = element.$context ||\n        (element.$context = createDataContext(this.getContext(), index, element));\n      context.parsed = this.getParsed(index);\n      context.raw = dataset.data[index];\n      context.index = context.dataIndex = index;\n    } else {\n      context = this.$context ||\n        (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n      context.dataset = dataset;\n      context.index = context.datasetIndex = this.index;\n    }\n    context.active = !!active;\n    context.mode = mode;\n    return context;\n  }\n  resolveDatasetElementOptions(mode) {\n    return this._resolveElementOptions(this.datasetElementType.id, mode);\n  }\n  resolveDataElementOptions(index, mode) {\n    return this._resolveElementOptions(this.dataElementType.id, mode, index);\n  }\n  _resolveElementOptions(elementType, mode = 'default', index) {\n    const active = mode === 'active';\n    const cache = this._cachedDataOpts;\n    const cacheKey = elementType + '-' + mode;\n    const cached = cache[cacheKey];\n    const sharing = this.enableOptionSharing && defined(index);\n    if (cached) {\n      return cloneIfNotShared(cached, sharing);\n    }\n    const config = this.chart.config;\n    const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n    const prefixes = active ? [`${elementType}Hover`, 'hover', elementType, ''] : [elementType, ''];\n    const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n    const names = Object.keys(defaults.elements[elementType]);\n    const context = () => this.getContext(index, active);\n    const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n    if (values.$shared) {\n      values.$shared = sharing;\n      cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n    }\n    return values;\n  }\n  _resolveAnimations(index, transition, active) {\n    const chart = this.chart;\n    const cache = this._cachedDataOpts;\n    const cacheKey = `animation-${transition}`;\n    const cached = cache[cacheKey];\n    if (cached) {\n      return cached;\n    }\n    let options;\n    if (chart.options.animation !== false) {\n      const config = this.chart.config;\n      const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n      const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n      options = config.createResolver(scopes, this.getContext(index, active, transition));\n    }\n    const animations = new Animations(chart, options && options.animations);\n    if (options && options._cacheable) {\n      cache[cacheKey] = Object.freeze(animations);\n    }\n    return animations;\n  }\n  getSharedOptions(options) {\n    if (!options.$shared) {\n      return;\n    }\n    return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n  }\n  includeOptions(mode, sharedOptions) {\n    return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n  }\n  _getSharedOptions(start, mode) {\n    const firstOpts = this.resolveDataElementOptions(start, mode);\n    const previouslySharedOptions = this._sharedOptions;\n    const sharedOptions = this.getSharedOptions(firstOpts);\n    const includeOptions = this.includeOptions(mode, sharedOptions) || (sharedOptions !== previouslySharedOptions);\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n    return {sharedOptions, includeOptions};\n  }\n  updateElement(element, index, properties, mode) {\n    if (isDirectUpdateMode(mode)) {\n      Object.assign(element, properties);\n    } else {\n      this._resolveAnimations(index, mode).update(element, properties);\n    }\n  }\n  updateSharedOptions(sharedOptions, mode, newOptions) {\n    if (sharedOptions && !isDirectUpdateMode(mode)) {\n      this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n    }\n  }\n  _setStyle(element, index, mode, active) {\n    element.active = active;\n    const options = this.getStyle(index, active);\n    this._resolveAnimations(index, mode, active).update(element, {\n      options: (!active && this.getSharedOptions(options)) || options\n    });\n  }\n  removeHoverStyle(element, datasetIndex, index) {\n    this._setStyle(element, index, 'active', false);\n  }\n  setHoverStyle(element, datasetIndex, index) {\n    this._setStyle(element, index, 'active', true);\n  }\n  _removeDatasetHoverStyle() {\n    const element = this._cachedMeta.dataset;\n    if (element) {\n      this._setStyle(element, undefined, 'active', false);\n    }\n  }\n  _setDatasetHoverStyle() {\n    const element = this._cachedMeta.dataset;\n    if (element) {\n      this._setStyle(element, undefined, 'active', true);\n    }\n  }\n  _resyncElements(resetNewElements) {\n    const data = this._data;\n    const elements = this._cachedMeta.data;\n    for (const [method, arg1, arg2] of this._syncList) {\n      this[method](arg1, arg2);\n    }\n    this._syncList = [];\n    const numMeta = elements.length;\n    const numData = data.length;\n    const count = Math.min(numData, numMeta);\n    if (count) {\n      this.parse(0, count);\n    }\n    if (numData > numMeta) {\n      this._insertElements(numMeta, numData - numMeta, resetNewElements);\n    } else if (numData < numMeta) {\n      this._removeElements(numData, numMeta - numData);\n    }\n  }\n  _insertElements(start, count, resetNewElements = true) {\n    const meta = this._cachedMeta;\n    const data = meta.data;\n    const end = start + count;\n    let i;\n    const move = (arr) => {\n      arr.length += count;\n      for (i = arr.length - 1; i >= end; i--) {\n        arr[i] = arr[i - count];\n      }\n    };\n    move(data);\n    for (i = start; i < end; ++i) {\n      data[i] = new this.dataElementType();\n    }\n    if (this._parsing) {\n      move(meta._parsed);\n    }\n    this.parse(start, count);\n    if (resetNewElements) {\n      this.updateElements(data, start, count, 'reset');\n    }\n  }\n  updateElements(element, start, count, mode) {}\n  _removeElements(start, count) {\n    const meta = this._cachedMeta;\n    if (this._parsing) {\n      const removed = meta._parsed.splice(start, count);\n      if (meta._stacked) {\n        clearStacks(meta, removed);\n      }\n    }\n    meta.data.splice(start, count);\n  }\n  _sync(args) {\n    if (this._parsing) {\n      this._syncList.push(args);\n    } else {\n      const [method, arg1, arg2] = args;\n      this[method](arg1, arg2);\n    }\n    this.chart._dataChanges.push([this.index, ...args]);\n  }\n  _onDataPush() {\n    const count = arguments.length;\n    this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n  }\n  _onDataPop() {\n    this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n  }\n  _onDataShift() {\n    this._sync(['_removeElements', 0, 1]);\n  }\n  _onDataSplice(start, count) {\n    if (count) {\n      this._sync(['_removeElements', start, count]);\n    }\n    const newCount = arguments.length - 2;\n    if (newCount) {\n      this._sync(['_insertElements', start, newCount]);\n    }\n  }\n  _onDataUnshift() {\n    this._sync(['_insertElements', 0, arguments.length]);\n  }\n}\nDatasetController.defaults = {};\nDatasetController.prototype.datasetElementType = null;\nDatasetController.prototype.dataElementType = null;\n\nfunction getAllScaleValues(scale, type) {\n  if (!scale._cache.$bar) {\n    const visibleMetas = scale.getMatchingVisibleMetas(type);\n    let values = [];\n    for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) {\n      values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n    }\n    scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));\n  }\n  return scale._cache.$bar;\n}\nfunction computeMinSampleSize(meta) {\n  const scale = meta.iScale;\n  const values = getAllScaleValues(scale, meta.type);\n  let min = scale._length;\n  let i, ilen, curr, prev;\n  const updateMinAndPrev = () => {\n    if (curr === 32767 || curr === -32768) {\n      return;\n    }\n    if (defined(prev)) {\n      min = Math.min(min, Math.abs(curr - prev) || min);\n    }\n    prev = curr;\n  };\n  for (i = 0, ilen = values.length; i < ilen; ++i) {\n    curr = scale.getPixelForValue(values[i]);\n    updateMinAndPrev();\n  }\n  prev = undefined;\n  for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n    curr = scale.getPixelForTick(i);\n    updateMinAndPrev();\n  }\n  return min;\n}\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n  const thickness = options.barThickness;\n  let size, ratio;\n  if (isNullOrUndef(thickness)) {\n    size = ruler.min * options.categoryPercentage;\n    ratio = options.barPercentage;\n  } else {\n    size = thickness * stackCount;\n    ratio = 1;\n  }\n  return {\n    chunk: size / stackCount,\n    ratio,\n    start: ruler.pixels[index] - (size / 2)\n  };\n}\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\n  const pixels = ruler.pixels;\n  const curr = pixels[index];\n  let prev = index > 0 ? pixels[index - 1] : null;\n  let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n  const percent = options.categoryPercentage;\n  if (prev === null) {\n    prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n  }\n  if (next === null) {\n    next = curr + curr - prev;\n  }\n  const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n  const size = Math.abs(next - prev) / 2 * percent;\n  return {\n    chunk: size / stackCount,\n    ratio: options.barPercentage,\n    start\n  };\n}\nfunction parseFloatBar(entry, item, vScale, i) {\n  const startValue = vScale.parse(entry[0], i);\n  const endValue = vScale.parse(entry[1], i);\n  const min = Math.min(startValue, endValue);\n  const max = Math.max(startValue, endValue);\n  let barStart = min;\n  let barEnd = max;\n  if (Math.abs(min) > Math.abs(max)) {\n    barStart = max;\n    barEnd = min;\n  }\n  item[vScale.axis] = barEnd;\n  item._custom = {\n    barStart,\n    barEnd,\n    start: startValue,\n    end: endValue,\n    min,\n    max\n  };\n}\nfunction parseValue(entry, item, vScale, i) {\n  if (isArray(entry)) {\n    parseFloatBar(entry, item, vScale, i);\n  } else {\n    item[vScale.axis] = vScale.parse(entry, i);\n  }\n  return item;\n}\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n  const iScale = meta.iScale;\n  const vScale = meta.vScale;\n  const labels = iScale.getLabels();\n  const singleScale = iScale === vScale;\n  const parsed = [];\n  let i, ilen, item, entry;\n  for (i = start, ilen = start + count; i < ilen; ++i) {\n    entry = data[i];\n    item = {};\n    item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n    parsed.push(parseValue(entry, item, vScale, i));\n  }\n  return parsed;\n}\nfunction isFloatBar(custom) {\n  return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\nfunction barSign(size, vScale, actualBase) {\n  if (size !== 0) {\n    return sign(size);\n  }\n  return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\nfunction borderProps(properties) {\n  let reverse, start, end, top, bottom;\n  if (properties.horizontal) {\n    reverse = properties.base > properties.x;\n    start = 'left';\n    end = 'right';\n  } else {\n    reverse = properties.base < properties.y;\n    start = 'bottom';\n    end = 'top';\n  }\n  if (reverse) {\n    top = 'end';\n    bottom = 'start';\n  } else {\n    top = 'start';\n    bottom = 'end';\n  }\n  return {start, end, reverse, top, bottom};\n}\nfunction setBorderSkipped(properties, options, stack, index) {\n  let edge = options.borderSkipped;\n  const res = {};\n  if (!edge) {\n    properties.borderSkipped = res;\n    return;\n  }\n  if (edge === true) {\n    properties.borderSkipped = {top: true, right: true, bottom: true, left: true};\n    return;\n  }\n  const {start, end, reverse, top, bottom} = borderProps(properties);\n  if (edge === 'middle' && stack) {\n    properties.enableBorderRadius = true;\n    if ((stack._top || 0) === index) {\n      edge = top;\n    } else if ((stack._bottom || 0) === index) {\n      edge = bottom;\n    } else {\n      res[parseEdge(bottom, start, end, reverse)] = true;\n      edge = top;\n    }\n  }\n  res[parseEdge(edge, start, end, reverse)] = true;\n  properties.borderSkipped = res;\n}\nfunction parseEdge(edge, a, b, reverse) {\n  if (reverse) {\n    edge = swap(edge, a, b);\n    edge = startEnd(edge, b, a);\n  } else {\n    edge = startEnd(edge, a, b);\n  }\n  return edge;\n}\nfunction swap(orig, v1, v2) {\n  return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\nfunction startEnd(v, start, end) {\n  return v === 'start' ? start : v === 'end' ? end : v;\n}\nfunction setInflateAmount(properties, {inflateAmount}, ratio) {\n  properties.inflateAmount = inflateAmount === 'auto'\n    ? ratio === 1 ? 0.33 : 0\n    : inflateAmount;\n}\nclass BarController extends DatasetController {\n  parsePrimitiveData(meta, data, start, count) {\n    return parseArrayOrPrimitive(meta, data, start, count);\n  }\n  parseArrayData(meta, data, start, count) {\n    return parseArrayOrPrimitive(meta, data, start, count);\n  }\n  parseObjectData(meta, data, start, count) {\n    const {iScale, vScale} = meta;\n    const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n    const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n    const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n    const parsed = [];\n    let i, ilen, item, obj;\n    for (i = start, ilen = start + count; i < ilen; ++i) {\n      obj = data[i];\n      item = {};\n      item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n      parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n    }\n    return parsed;\n  }\n  updateRangeFromParsed(range, scale, parsed, stack) {\n    super.updateRangeFromParsed(range, scale, parsed, stack);\n    const custom = parsed._custom;\n    if (custom && scale === this._cachedMeta.vScale) {\n      range.min = Math.min(range.min, custom.min);\n      range.max = Math.max(range.max, custom.max);\n    }\n  }\n  getMaxOverflow() {\n    return 0;\n  }\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const {iScale, vScale} = meta;\n    const parsed = this.getParsed(index);\n    const custom = parsed._custom;\n    const value = isFloatBar(custom)\n      ? '[' + custom.start + ', ' + custom.end + ']'\n      : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n    return {\n      label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n      value\n    };\n  }\n  initialize() {\n    this.enableOptionSharing = true;\n    super.initialize();\n    const meta = this._cachedMeta;\n    meta.stack = this.getDataset().stack;\n  }\n  update(mode) {\n    const meta = this._cachedMeta;\n    this.updateElements(meta.data, 0, meta.data.length, mode);\n  }\n  updateElements(bars, start, count, mode) {\n    const reset = mode === 'reset';\n    const {index, _cachedMeta: {vScale}} = this;\n    const base = vScale.getBasePixel();\n    const horizontal = vScale.isHorizontal();\n    const ruler = this._getRuler();\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    for (let i = start; i < start + count; i++) {\n      const parsed = this.getParsed(i);\n      const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {base, head: base} : this._calculateBarValuePixels(i);\n      const ipixels = this._calculateBarIndexPixels(i, ruler);\n      const stack = (parsed._stacks || {})[vScale.axis];\n      const properties = {\n        horizontal,\n        base: vpixels.base,\n        enableBorderRadius: !stack || isFloatBar(parsed._custom) || (index === stack._top || index === stack._bottom),\n        x: horizontal ? vpixels.head : ipixels.center,\n        y: horizontal ? ipixels.center : vpixels.head,\n        height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n        width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n      };\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n      }\n      const options = properties.options || bars[i].options;\n      setBorderSkipped(properties, options, stack, index);\n      setInflateAmount(properties, options, ruler.ratio);\n      this.updateElement(bars[i], i, properties, mode);\n    }\n  }\n  _getStacks(last, dataIndex) {\n    const {iScale} = this._cachedMeta;\n    const metasets = iScale.getMatchingVisibleMetas(this._type)\n      .filter(meta => meta.controller.options.grouped);\n    const stacked = iScale.options.stacked;\n    const stacks = [];\n    const skipNull = (meta) => {\n      const parsed = meta.controller.getParsed(dataIndex);\n      const val = parsed && parsed[meta.vScale.axis];\n      if (isNullOrUndef(val) || isNaN(val)) {\n        return true;\n      }\n    };\n    for (const meta of metasets) {\n      if (dataIndex !== undefined && skipNull(meta)) {\n        continue;\n      }\n      if (stacked === false || stacks.indexOf(meta.stack) === -1 ||\n\t\t\t\t(stacked === undefined && meta.stack === undefined)) {\n        stacks.push(meta.stack);\n      }\n      if (meta.index === last) {\n        break;\n      }\n    }\n    if (!stacks.length) {\n      stacks.push(undefined);\n    }\n    return stacks;\n  }\n  _getStackCount(index) {\n    return this._getStacks(undefined, index).length;\n  }\n  _getStackIndex(datasetIndex, name, dataIndex) {\n    const stacks = this._getStacks(datasetIndex, dataIndex);\n    const index = (name !== undefined)\n      ? stacks.indexOf(name)\n      : -1;\n    return (index === -1)\n      ? stacks.length - 1\n      : index;\n  }\n  _getRuler() {\n    const opts = this.options;\n    const meta = this._cachedMeta;\n    const iScale = meta.iScale;\n    const pixels = [];\n    let i, ilen;\n    for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n      pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n    }\n    const barThickness = opts.barThickness;\n    const min = barThickness || computeMinSampleSize(meta);\n    return {\n      min,\n      pixels,\n      start: iScale._startPixel,\n      end: iScale._endPixel,\n      stackCount: this._getStackCount(),\n      scale: iScale,\n      grouped: opts.grouped,\n      ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n    };\n  }\n  _calculateBarValuePixels(index) {\n    const {_cachedMeta: {vScale, _stacked}, options: {base: baseValue, minBarLength}} = this;\n    const actualBase = baseValue || 0;\n    const parsed = this.getParsed(index);\n    const custom = parsed._custom;\n    const floating = isFloatBar(custom);\n    let value = parsed[vScale.axis];\n    let start = 0;\n    let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n    let head, size;\n    if (length !== value) {\n      start = length - value;\n      length = value;\n    }\n    if (floating) {\n      value = custom.barStart;\n      length = custom.barEnd - custom.barStart;\n      if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n        start = 0;\n      }\n      start += value;\n    }\n    const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n    let base = vScale.getPixelForValue(startValue);\n    if (this.chart.getDataVisibility(index)) {\n      head = vScale.getPixelForValue(start + length);\n    } else {\n      head = base;\n    }\n    size = head - base;\n    if (Math.abs(size) < minBarLength) {\n      size = barSign(size, vScale, actualBase) * minBarLength;\n      if (value === actualBase) {\n        base -= size / 2;\n      }\n      const startPixel = vScale.getPixelForDecimal(0);\n      const endPixel = vScale.getPixelForDecimal(1);\n      const min = Math.min(startPixel, endPixel);\n      const max = Math.max(startPixel, endPixel);\n      base = Math.max(Math.min(base, max), min);\n      head = base + size;\n    }\n    if (base === vScale.getPixelForValue(actualBase)) {\n      const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n      base += halfGrid;\n      size -= halfGrid;\n    }\n    return {\n      size,\n      base,\n      head,\n      center: head + size / 2\n    };\n  }\n  _calculateBarIndexPixels(index, ruler) {\n    const scale = ruler.scale;\n    const options = this.options;\n    const skipNull = options.skipNull;\n    const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n    let center, size;\n    if (ruler.grouped) {\n      const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n      const range = options.barThickness === 'flex'\n        ? computeFlexCategoryTraits(index, ruler, options, stackCount)\n        : computeFitCategoryTraits(index, ruler, options, stackCount);\n      const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined);\n      center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\n      size = Math.min(maxBarThickness, range.chunk * range.ratio);\n    } else {\n      center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n      size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n    }\n    return {\n      base: center - size / 2,\n      head: center + size / 2,\n      center,\n      size\n    };\n  }\n  draw() {\n    const meta = this._cachedMeta;\n    const vScale = meta.vScale;\n    const rects = meta.data;\n    const ilen = rects.length;\n    let i = 0;\n    for (; i < ilen; ++i) {\n      if (this.getParsed(i)[vScale.axis] !== null) {\n        rects[i].draw(this._ctx);\n      }\n    }\n  }\n}\nBarController.id = 'bar';\nBarController.defaults = {\n  datasetElementType: false,\n  dataElementType: 'bar',\n  categoryPercentage: 0.8,\n  barPercentage: 0.9,\n  grouped: true,\n  animations: {\n    numbers: {\n      type: 'number',\n      properties: ['x', 'y', 'base', 'width', 'height']\n    }\n  }\n};\nBarController.overrides = {\n  scales: {\n    _index_: {\n      type: 'category',\n      offset: true,\n      grid: {\n        offset: true\n      }\n    },\n    _value_: {\n      type: 'linear',\n      beginAtZero: true,\n    }\n  }\n};\n\nclass BubbleController extends DatasetController {\n  initialize() {\n    this.enableOptionSharing = true;\n    super.initialize();\n  }\n  parsePrimitiveData(meta, data, start, count) {\n    const parsed = super.parsePrimitiveData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n    }\n    return parsed;\n  }\n  parseArrayData(meta, data, start, count) {\n    const parsed = super.parseArrayData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      const item = data[start + i];\n      parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n    }\n    return parsed;\n  }\n  parseObjectData(meta, data, start, count) {\n    const parsed = super.parseObjectData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      const item = data[start + i];\n      parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n    }\n    return parsed;\n  }\n  getMaxOverflow() {\n    const data = this._cachedMeta.data;\n    let max = 0;\n    for (let i = data.length - 1; i >= 0; --i) {\n      max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n    }\n    return max > 0 && max;\n  }\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const {xScale, yScale} = meta;\n    const parsed = this.getParsed(index);\n    const x = xScale.getLabelForValue(parsed.x);\n    const y = yScale.getLabelForValue(parsed.y);\n    const r = parsed._custom;\n    return {\n      label: meta.label,\n      value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n    };\n  }\n  update(mode) {\n    const points = this._cachedMeta.data;\n    this.updateElements(points, 0, points.length, mode);\n  }\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale} = this._cachedMeta;\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    for (let i = start; i < start + count; i++) {\n      const point = points[i];\n      const parsed = !reset && this.getParsed(i);\n      const properties = {};\n      const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n      const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n      properties.skip = isNaN(iPixel) || isNaN(vPixel);\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n        if (reset) {\n          properties.options.radius = 0;\n        }\n      }\n      this.updateElement(point, i, properties, mode);\n    }\n  }\n  resolveDataElementOptions(index, mode) {\n    const parsed = this.getParsed(index);\n    let values = super.resolveDataElementOptions(index, mode);\n    if (values.$shared) {\n      values = Object.assign({}, values, {$shared: false});\n    }\n    const radius = values.radius;\n    if (mode !== 'active') {\n      values.radius = 0;\n    }\n    values.radius += valueOrDefault(parsed && parsed._custom, radius);\n    return values;\n  }\n}\nBubbleController.id = 'bubble';\nBubbleController.defaults = {\n  datasetElementType: false,\n  dataElementType: 'point',\n  animations: {\n    numbers: {\n      type: 'number',\n      properties: ['x', 'y', 'borderWidth', 'radius']\n    }\n  }\n};\nBubbleController.overrides = {\n  scales: {\n    x: {\n      type: 'linear'\n    },\n    y: {\n      type: 'linear'\n    }\n  },\n  plugins: {\n    tooltip: {\n      callbacks: {\n        title() {\n          return '';\n        }\n      }\n    }\n  }\n};\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n  let ratioX = 1;\n  let ratioY = 1;\n  let offsetX = 0;\n  let offsetY = 0;\n  if (circumference < TAU) {\n    const startAngle = rotation;\n    const endAngle = startAngle + circumference;\n    const startX = Math.cos(startAngle);\n    const startY = Math.sin(startAngle);\n    const endX = Math.cos(endAngle);\n    const endY = Math.sin(endAngle);\n    const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n    const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n    const maxX = calcMax(0, startX, endX);\n    const maxY = calcMax(HALF_PI, startY, endY);\n    const minX = calcMin(PI, startX, endX);\n    const minY = calcMin(PI + HALF_PI, startY, endY);\n    ratioX = (maxX - minX) / 2;\n    ratioY = (maxY - minY) / 2;\n    offsetX = -(maxX + minX) / 2;\n    offsetY = -(maxY + minY) / 2;\n  }\n  return {ratioX, ratioY, offsetX, offsetY};\n}\nclass DoughnutController extends DatasetController {\n  constructor(chart, datasetIndex) {\n    super(chart, datasetIndex);\n    this.enableOptionSharing = true;\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n    this.offsetX = undefined;\n    this.offsetY = undefined;\n  }\n  linkScales() {}\n  parse(start, count) {\n    const data = this.getDataset().data;\n    const meta = this._cachedMeta;\n    if (this._parsing === false) {\n      meta._parsed = data;\n    } else {\n      let getter = (i) => +data[i];\n      if (isObject(data[start])) {\n        const {key = 'value'} = this._parsing;\n        getter = (i) => +resolveObjectKey(data[i], key);\n      }\n      let i, ilen;\n      for (i = start, ilen = start + count; i < ilen; ++i) {\n        meta._parsed[i] = getter(i);\n      }\n    }\n  }\n  _getRotation() {\n    return toRadians(this.options.rotation - 90);\n  }\n  _getCircumference() {\n    return toRadians(this.options.circumference);\n  }\n  _getRotationExtents() {\n    let min = TAU;\n    let max = -TAU;\n    for (let i = 0; i < this.chart.data.datasets.length; ++i) {\n      if (this.chart.isDatasetVisible(i)) {\n        const controller = this.chart.getDatasetMeta(i).controller;\n        const rotation = controller._getRotation();\n        const circumference = controller._getCircumference();\n        min = Math.min(min, rotation);\n        max = Math.max(max, rotation + circumference);\n      }\n    }\n    return {\n      rotation: min,\n      circumference: max - min,\n    };\n  }\n  update(mode) {\n    const chart = this.chart;\n    const {chartArea} = chart;\n    const meta = this._cachedMeta;\n    const arcs = meta.data;\n    const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n    const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n    const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n    const chartWeight = this._getRingWeight(this.index);\n    const {circumference, rotation} = this._getRotationExtents();\n    const {ratioX, ratioY, offsetX, offsetY} = getRatioAndOffset(rotation, circumference, cutout);\n    const maxWidth = (chartArea.width - spacing) / ratioX;\n    const maxHeight = (chartArea.height - spacing) / ratioY;\n    const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n    const outerRadius = toDimension(this.options.radius, maxRadius);\n    const innerRadius = Math.max(outerRadius * cutout, 0);\n    const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n    this.offsetX = offsetX * outerRadius;\n    this.offsetY = offsetY * outerRadius;\n    meta.total = this.calculateTotal();\n    this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n    this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n    this.updateElements(arcs, 0, arcs.length, mode);\n  }\n  _circumference(i, reset) {\n    const opts = this.options;\n    const meta = this._cachedMeta;\n    const circumference = this._getCircumference();\n    if ((reset && opts.animation.animateRotate) || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n      return 0;\n    }\n    return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n  }\n  updateElements(arcs, start, count, mode) {\n    const reset = mode === 'reset';\n    const chart = this.chart;\n    const chartArea = chart.chartArea;\n    const opts = chart.options;\n    const animationOpts = opts.animation;\n    const centerX = (chartArea.left + chartArea.right) / 2;\n    const centerY = (chartArea.top + chartArea.bottom) / 2;\n    const animateScale = reset && animationOpts.animateScale;\n    const innerRadius = animateScale ? 0 : this.innerRadius;\n    const outerRadius = animateScale ? 0 : this.outerRadius;\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    let startAngle = this._getRotation();\n    let i;\n    for (i = 0; i < start; ++i) {\n      startAngle += this._circumference(i, reset);\n    }\n    for (i = start; i < start + count; ++i) {\n      const circumference = this._circumference(i, reset);\n      const arc = arcs[i];\n      const properties = {\n        x: centerX + this.offsetX,\n        y: centerY + this.offsetY,\n        startAngle,\n        endAngle: startAngle + circumference,\n        circumference,\n        outerRadius,\n        innerRadius\n      };\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n      }\n      startAngle += circumference;\n      this.updateElement(arc, i, properties, mode);\n    }\n  }\n  calculateTotal() {\n    const meta = this._cachedMeta;\n    const metaData = meta.data;\n    let total = 0;\n    let i;\n    for (i = 0; i < metaData.length; i++) {\n      const value = meta._parsed[i];\n      if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n        total += Math.abs(value);\n      }\n    }\n    return total;\n  }\n  calculateCircumference(value) {\n    const total = this._cachedMeta.total;\n    if (total > 0 && !isNaN(value)) {\n      return TAU * (Math.abs(value) / total);\n    }\n    return 0;\n  }\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const chart = this.chart;\n    const labels = chart.data.labels || [];\n    const value = formatNumber(meta._parsed[index], chart.options.locale);\n    return {\n      label: labels[index] || '',\n      value,\n    };\n  }\n  getMaxBorderWidth(arcs) {\n    let max = 0;\n    const chart = this.chart;\n    let i, ilen, meta, controller, options;\n    if (!arcs) {\n      for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n        if (chart.isDatasetVisible(i)) {\n          meta = chart.getDatasetMeta(i);\n          arcs = meta.data;\n          controller = meta.controller;\n          break;\n        }\n      }\n    }\n    if (!arcs) {\n      return 0;\n    }\n    for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n      options = controller.resolveDataElementOptions(i);\n      if (options.borderAlign !== 'inner') {\n        max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n      }\n    }\n    return max;\n  }\n  getMaxOffset(arcs) {\n    let max = 0;\n    for (let i = 0, ilen = arcs.length; i < ilen; ++i) {\n      const options = this.resolveDataElementOptions(i);\n      max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n    }\n    return max;\n  }\n  _getRingWeightOffset(datasetIndex) {\n    let ringWeightOffset = 0;\n    for (let i = 0; i < datasetIndex; ++i) {\n      if (this.chart.isDatasetVisible(i)) {\n        ringWeightOffset += this._getRingWeight(i);\n      }\n    }\n    return ringWeightOffset;\n  }\n  _getRingWeight(datasetIndex) {\n    return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n  }\n  _getVisibleDatasetWeightTotal() {\n    return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n  }\n}\nDoughnutController.id = 'doughnut';\nDoughnutController.defaults = {\n  datasetElementType: false,\n  dataElementType: 'arc',\n  animation: {\n    animateRotate: true,\n    animateScale: false\n  },\n  animations: {\n    numbers: {\n      type: 'number',\n      properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing']\n    },\n  },\n  cutout: '50%',\n  rotation: 0,\n  circumference: 360,\n  radius: '100%',\n  spacing: 0,\n  indexAxis: 'r',\n};\nDoughnutController.descriptors = {\n  _scriptable: (name) => name !== 'spacing',\n  _indexable: (name) => name !== 'spacing',\n};\nDoughnutController.overrides = {\n  aspectRatio: 1,\n  plugins: {\n    legend: {\n      labels: {\n        generateLabels(chart) {\n          const data = chart.data;\n          if (data.labels.length && data.datasets.length) {\n            const {labels: {pointStyle}} = chart.legend.options;\n            return data.labels.map((label, i) => {\n              const meta = chart.getDatasetMeta(0);\n              const style = meta.controller.getStyle(i);\n              return {\n                text: label,\n                fillStyle: style.backgroundColor,\n                strokeStyle: style.borderColor,\n                lineWidth: style.borderWidth,\n                pointStyle: pointStyle,\n                hidden: !chart.getDataVisibility(i),\n                index: i\n              };\n            });\n          }\n          return [];\n        }\n      },\n      onClick(e, legendItem, legend) {\n        legend.chart.toggleDataVisibility(legendItem.index);\n        legend.chart.update();\n      }\n    },\n    tooltip: {\n      callbacks: {\n        title() {\n          return '';\n        },\n        label(tooltipItem) {\n          let dataLabel = tooltipItem.label;\n          const value = ': ' + tooltipItem.formattedValue;\n          if (isArray(dataLabel)) {\n            dataLabel = dataLabel.slice();\n            dataLabel[0] += value;\n          } else {\n            dataLabel += value;\n          }\n          return dataLabel;\n        }\n      }\n    }\n  }\n};\n\nclass LineController extends DatasetController {\n  initialize() {\n    this.enableOptionSharing = true;\n    this.supportsDecimation = true;\n    super.initialize();\n  }\n  update(mode) {\n    const meta = this._cachedMeta;\n    const {dataset: line, data: points = [], _dataset} = meta;\n    const animationsDisabled = this.chart._animationsDisabled;\n    let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n    this._drawStart = start;\n    this._drawCount = count;\n    if (_scaleRangesChanged(meta)) {\n      start = 0;\n      count = points.length;\n    }\n    line._chart = this.chart;\n    line._datasetIndex = this.index;\n    line._decimated = !!_dataset._decimated;\n    line.points = points;\n    const options = this.resolveDatasetElementOptions(mode);\n    if (!this.options.showLine) {\n      options.borderWidth = 0;\n    }\n    options.segment = this.options.segment;\n    this.updateElement(line, undefined, {\n      animated: !animationsDisabled,\n      options\n    }, mode);\n    this.updateElements(points, start, count, mode);\n  }\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const {spanGaps, segment} = this.options;\n    const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n    const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n    let prevParsed = start > 0 && this.getParsed(start - 1);\n    for (let i = start; i < start + count; ++i) {\n      const point = points[i];\n      const parsed = this.getParsed(i);\n      const properties = directUpdate ? point : {};\n      const nullData = isNullOrUndef(parsed[vAxis]);\n      const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n      const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n      properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n      properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n      if (segment) {\n        properties.parsed = parsed;\n        properties.raw = _dataset.data[i];\n      }\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      }\n      if (!directUpdate) {\n        this.updateElement(point, i, properties, mode);\n      }\n      prevParsed = parsed;\n    }\n  }\n  getMaxOverflow() {\n    const meta = this._cachedMeta;\n    const dataset = meta.dataset;\n    const border = dataset.options && dataset.options.borderWidth || 0;\n    const data = meta.data || [];\n    if (!data.length) {\n      return border;\n    }\n    const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n    const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n    return Math.max(border, firstPoint, lastPoint) / 2;\n  }\n  draw() {\n    const meta = this._cachedMeta;\n    meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n    super.draw();\n  }\n}\nLineController.id = 'line';\nLineController.defaults = {\n  datasetElementType: 'line',\n  dataElementType: 'point',\n  showLine: true,\n  spanGaps: false,\n};\nLineController.overrides = {\n  scales: {\n    _index_: {\n      type: 'category',\n    },\n    _value_: {\n      type: 'linear',\n    },\n  }\n};\n\nclass PolarAreaController extends DatasetController {\n  constructor(chart, datasetIndex) {\n    super(chart, datasetIndex);\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n  }\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const chart = this.chart;\n    const labels = chart.data.labels || [];\n    const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n    return {\n      label: labels[index] || '',\n      value,\n    };\n  }\n  parseObjectData(meta, data, start, count) {\n    return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n  }\n  update(mode) {\n    const arcs = this._cachedMeta.data;\n    this._updateRadius();\n    this.updateElements(arcs, 0, arcs.length, mode);\n  }\n  getMinMax() {\n    const meta = this._cachedMeta;\n    const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n    meta.data.forEach((element, index) => {\n      const parsed = this.getParsed(index).r;\n      if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n        if (parsed < range.min) {\n          range.min = parsed;\n        }\n        if (parsed > range.max) {\n          range.max = parsed;\n        }\n      }\n    });\n    return range;\n  }\n  _updateRadius() {\n    const chart = this.chart;\n    const chartArea = chart.chartArea;\n    const opts = chart.options;\n    const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n    const outerRadius = Math.max(minSize / 2, 0);\n    const innerRadius = Math.max(opts.cutoutPercentage ? (outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\n    const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n    this.outerRadius = outerRadius - (radiusLength * this.index);\n    this.innerRadius = this.outerRadius - radiusLength;\n  }\n  updateElements(arcs, start, count, mode) {\n    const reset = mode === 'reset';\n    const chart = this.chart;\n    const opts = chart.options;\n    const animationOpts = opts.animation;\n    const scale = this._cachedMeta.rScale;\n    const centerX = scale.xCenter;\n    const centerY = scale.yCenter;\n    const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n    let angle = datasetStartAngle;\n    let i;\n    const defaultAngle = 360 / this.countVisibleElements();\n    for (i = 0; i < start; ++i) {\n      angle += this._computeAngle(i, mode, defaultAngle);\n    }\n    for (i = start; i < start + count; i++) {\n      const arc = arcs[i];\n      let startAngle = angle;\n      let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n      let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n      angle = endAngle;\n      if (reset) {\n        if (animationOpts.animateScale) {\n          outerRadius = 0;\n        }\n        if (animationOpts.animateRotate) {\n          startAngle = endAngle = datasetStartAngle;\n        }\n      }\n      const properties = {\n        x: centerX,\n        y: centerY,\n        innerRadius: 0,\n        outerRadius,\n        startAngle,\n        endAngle,\n        options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n      };\n      this.updateElement(arc, i, properties, mode);\n    }\n  }\n  countVisibleElements() {\n    const meta = this._cachedMeta;\n    let count = 0;\n    meta.data.forEach((element, index) => {\n      if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n        count++;\n      }\n    });\n    return count;\n  }\n  _computeAngle(index, mode, defaultAngle) {\n    return this.chart.getDataVisibility(index)\n      ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle)\n      : 0;\n  }\n}\nPolarAreaController.id = 'polarArea';\nPolarAreaController.defaults = {\n  dataElementType: 'arc',\n  animation: {\n    animateRotate: true,\n    animateScale: true\n  },\n  animations: {\n    numbers: {\n      type: 'number',\n      properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']\n    },\n  },\n  indexAxis: 'r',\n  startAngle: 0,\n};\nPolarAreaController.overrides = {\n  aspectRatio: 1,\n  plugins: {\n    legend: {\n      labels: {\n        generateLabels(chart) {\n          const data = chart.data;\n          if (data.labels.length && data.datasets.length) {\n            const {labels: {pointStyle}} = chart.legend.options;\n            return data.labels.map((label, i) => {\n              const meta = chart.getDatasetMeta(0);\n              const style = meta.controller.getStyle(i);\n              return {\n                text: label,\n                fillStyle: style.backgroundColor,\n                strokeStyle: style.borderColor,\n                lineWidth: style.borderWidth,\n                pointStyle: pointStyle,\n                hidden: !chart.getDataVisibility(i),\n                index: i\n              };\n            });\n          }\n          return [];\n        }\n      },\n      onClick(e, legendItem, legend) {\n        legend.chart.toggleDataVisibility(legendItem.index);\n        legend.chart.update();\n      }\n    },\n    tooltip: {\n      callbacks: {\n        title() {\n          return '';\n        },\n        label(context) {\n          return context.chart.data.labels[context.dataIndex] + ': ' + context.formattedValue;\n        }\n      }\n    }\n  },\n  scales: {\n    r: {\n      type: 'radialLinear',\n      angleLines: {\n        display: false\n      },\n      beginAtZero: true,\n      grid: {\n        circular: true\n      },\n      pointLabels: {\n        display: false\n      },\n      startAngle: 0\n    }\n  }\n};\n\nclass PieController extends DoughnutController {\n}\nPieController.id = 'pie';\nPieController.defaults = {\n  cutout: 0,\n  rotation: 0,\n  circumference: 360,\n  radius: '100%'\n};\n\nclass RadarController extends DatasetController {\n  getLabelAndValue(index) {\n    const vScale = this._cachedMeta.vScale;\n    const parsed = this.getParsed(index);\n    return {\n      label: vScale.getLabels()[index],\n      value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n    };\n  }\n  parseObjectData(meta, data, start, count) {\n    return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n  }\n  update(mode) {\n    const meta = this._cachedMeta;\n    const line = meta.dataset;\n    const points = meta.data || [];\n    const labels = meta.iScale.getLabels();\n    line.points = points;\n    if (mode !== 'resize') {\n      const options = this.resolveDatasetElementOptions(mode);\n      if (!this.options.showLine) {\n        options.borderWidth = 0;\n      }\n      const properties = {\n        _loop: true,\n        _fullLoop: labels.length === points.length,\n        options\n      };\n      this.updateElement(line, undefined, properties, mode);\n    }\n    this.updateElements(points, 0, points.length, mode);\n  }\n  updateElements(points, start, count, mode) {\n    const scale = this._cachedMeta.rScale;\n    const reset = mode === 'reset';\n    for (let i = start; i < start + count; i++) {\n      const point = points[i];\n      const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n      const x = reset ? scale.xCenter : pointPosition.x;\n      const y = reset ? scale.yCenter : pointPosition.y;\n      const properties = {\n        x,\n        y,\n        angle: pointPosition.angle,\n        skip: isNaN(x) || isNaN(y),\n        options\n      };\n      this.updateElement(point, i, properties, mode);\n    }\n  }\n}\nRadarController.id = 'radar';\nRadarController.defaults = {\n  datasetElementType: 'line',\n  dataElementType: 'point',\n  indexAxis: 'r',\n  showLine: true,\n  elements: {\n    line: {\n      fill: 'start'\n    }\n  },\n};\nRadarController.overrides = {\n  aspectRatio: 1,\n  scales: {\n    r: {\n      type: 'radialLinear',\n    }\n  }\n};\n\nclass Element {\n  constructor() {\n    this.x = undefined;\n    this.y = undefined;\n    this.active = false;\n    this.options = undefined;\n    this.$animations = undefined;\n  }\n  tooltipPosition(useFinalPosition) {\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return {x, y};\n  }\n  hasValue() {\n    return isNumber(this.x) && isNumber(this.y);\n  }\n  getProps(props, final) {\n    const anims = this.$animations;\n    if (!final || !anims) {\n      return this;\n    }\n    const ret = {};\n    props.forEach(prop => {\n      ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];\n    });\n    return ret;\n  }\n}\nElement.defaults = {};\nElement.defaultRoutes = undefined;\n\nconst formatters = {\n  values(value) {\n    return isArray(value) ? value : '' + value;\n  },\n  numeric(tickValue, index, ticks) {\n    if (tickValue === 0) {\n      return '0';\n    }\n    const locale = this.chart.options.locale;\n    let notation;\n    let delta = tickValue;\n    if (ticks.length > 1) {\n      const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n      if (maxTick < 1e-4 || maxTick > 1e+15) {\n        notation = 'scientific';\n      }\n      delta = calculateDelta(tickValue, ticks);\n    }\n    const logDelta = log10(Math.abs(delta));\n    const numDecimal = Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n    const options = {notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal};\n    Object.assign(options, this.options.ticks.format);\n    return formatNumber(tickValue, locale, options);\n  },\n  logarithmic(tickValue, index, ticks) {\n    if (tickValue === 0) {\n      return '0';\n    }\n    const remain = tickValue / (Math.pow(10, Math.floor(log10(tickValue))));\n    if (remain === 1 || remain === 2 || remain === 5) {\n      return formatters.numeric.call(this, tickValue, index, ticks);\n    }\n    return '';\n  }\n};\nfunction calculateDelta(tickValue, ticks) {\n  let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n  if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n    delta = tickValue - Math.floor(tickValue);\n  }\n  return delta;\n}\nvar Ticks = {formatters};\n\ndefaults.set('scale', {\n  display: true,\n  offset: false,\n  reverse: false,\n  beginAtZero: false,\n  bounds: 'ticks',\n  grace: 0,\n  grid: {\n    display: true,\n    lineWidth: 1,\n    drawBorder: true,\n    drawOnChartArea: true,\n    drawTicks: true,\n    tickLength: 8,\n    tickWidth: (_ctx, options) => options.lineWidth,\n    tickColor: (_ctx, options) => options.color,\n    offset: false,\n    borderDash: [],\n    borderDashOffset: 0.0,\n    borderWidth: 1\n  },\n  title: {\n    display: false,\n    text: '',\n    padding: {\n      top: 4,\n      bottom: 4\n    }\n  },\n  ticks: {\n    minRotation: 0,\n    maxRotation: 50,\n    mirror: false,\n    textStrokeWidth: 0,\n    textStrokeColor: '',\n    padding: 3,\n    display: true,\n    autoSkip: true,\n    autoSkipPadding: 3,\n    labelOffset: 0,\n    callback: Ticks.formatters.values,\n    minor: {},\n    major: {},\n    align: 'center',\n    crossAlign: 'near',\n    showLabelBackdrop: false,\n    backdropColor: 'rgba(255, 255, 255, 0.75)',\n    backdropPadding: 2,\n  }\n});\ndefaults.route('scale.ticks', 'color', '', 'color');\ndefaults.route('scale.grid', 'color', '', 'borderColor');\ndefaults.route('scale.grid', 'borderColor', '', 'borderColor');\ndefaults.route('scale.title', 'color', '', 'color');\ndefaults.describe('scale', {\n  _fallback: false,\n  _scriptable: (name) => !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n  _indexable: (name) => name !== 'borderDash' && name !== 'tickBorderDash',\n});\ndefaults.describe('scales', {\n  _fallback: 'scale',\n});\ndefaults.describe('scale.ticks', {\n  _scriptable: (name) => name !== 'backdropPadding' && name !== 'callback',\n  _indexable: (name) => name !== 'backdropPadding',\n});\n\nfunction autoSkip(scale, ticks) {\n  const tickOpts = scale.options.ticks;\n  const ticksLimit = tickOpts.maxTicksLimit || determineMaxTicks(scale);\n  const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n  const numMajorIndices = majorIndices.length;\n  const first = majorIndices[0];\n  const last = majorIndices[numMajorIndices - 1];\n  const newTicks = [];\n  if (numMajorIndices > ticksLimit) {\n    skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n    return newTicks;\n  }\n  const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n  if (numMajorIndices > 0) {\n    let i, ilen;\n    const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n    skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n    for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n      skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n    }\n    skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n    return newTicks;\n  }\n  skip(ticks, newTicks, spacing);\n  return newTicks;\n}\nfunction determineMaxTicks(scale) {\n  const offset = scale.options.offset;\n  const tickLength = scale._tickSize();\n  const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n  const maxChart = scale._maxLength / tickLength;\n  return Math.floor(Math.min(maxScale, maxChart));\n}\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n  const evenMajorSpacing = getEvenSpacing(majorIndices);\n  const spacing = ticks.length / ticksLimit;\n  if (!evenMajorSpacing) {\n    return Math.max(spacing, 1);\n  }\n  const factors = _factorize(evenMajorSpacing);\n  for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {\n    const factor = factors[i];\n    if (factor > spacing) {\n      return factor;\n    }\n  }\n  return Math.max(spacing, 1);\n}\nfunction getMajorIndices(ticks) {\n  const result = [];\n  let i, ilen;\n  for (i = 0, ilen = ticks.length; i < ilen; i++) {\n    if (ticks[i].major) {\n      result.push(i);\n    }\n  }\n  return result;\n}\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n  let count = 0;\n  let next = majorIndices[0];\n  let i;\n  spacing = Math.ceil(spacing);\n  for (i = 0; i < ticks.length; i++) {\n    if (i === next) {\n      newTicks.push(ticks[i]);\n      count++;\n      next = majorIndices[count * spacing];\n    }\n  }\n}\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n  const start = valueOrDefault(majorStart, 0);\n  const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n  let count = 0;\n  let length, i, next;\n  spacing = Math.ceil(spacing);\n  if (majorEnd) {\n    length = majorEnd - majorStart;\n    spacing = length / Math.floor(length / spacing);\n  }\n  next = start;\n  while (next < 0) {\n    count++;\n    next = Math.round(start + count * spacing);\n  }\n  for (i = Math.max(start, 0); i < end; i++) {\n    if (i === next) {\n      newTicks.push(ticks[i]);\n      count++;\n      next = Math.round(start + count * spacing);\n    }\n  }\n}\nfunction getEvenSpacing(arr) {\n  const len = arr.length;\n  let i, diff;\n  if (len < 2) {\n    return false;\n  }\n  for (diff = arr[0], i = 1; i < len; ++i) {\n    if (arr[i] - arr[i - 1] !== diff) {\n      return false;\n    }\n  }\n  return diff;\n}\n\nconst reverseAlign = (align) => align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset) => edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nfunction sample(arr, numItems) {\n  const result = [];\n  const increment = arr.length / numItems;\n  const len = arr.length;\n  let i = 0;\n  for (; i < len; i += increment) {\n    result.push(arr[Math.floor(i)]);\n  }\n  return result;\n}\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n  const length = scale.ticks.length;\n  const validIndex = Math.min(index, length - 1);\n  const start = scale._startPixel;\n  const end = scale._endPixel;\n  const epsilon = 1e-6;\n  let lineValue = scale.getPixelForTick(validIndex);\n  let offset;\n  if (offsetGridLines) {\n    if (length === 1) {\n      offset = Math.max(lineValue - start, end - lineValue);\n    } else if (index === 0) {\n      offset = (scale.getPixelForTick(1) - lineValue) / 2;\n    } else {\n      offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n    }\n    lineValue += validIndex < index ? offset : -offset;\n    if (lineValue < start - epsilon || lineValue > end + epsilon) {\n      return;\n    }\n  }\n  return lineValue;\n}\nfunction garbageCollect(caches, length) {\n  each(caches, (cache) => {\n    const gc = cache.gc;\n    const gcLen = gc.length / 2;\n    let i;\n    if (gcLen > length) {\n      for (i = 0; i < gcLen; ++i) {\n        delete cache.data[gc[i]];\n      }\n      gc.splice(0, gcLen);\n    }\n  });\n}\nfunction getTickMarkLength(options) {\n  return options.drawTicks ? options.tickLength : 0;\n}\nfunction getTitleHeight(options, fallback) {\n  if (!options.display) {\n    return 0;\n  }\n  const font = toFont(options.font, fallback);\n  const padding = toPadding(options.padding);\n  const lines = isArray(options.text) ? options.text.length : 1;\n  return (lines * font.lineHeight) + padding.height;\n}\nfunction createScaleContext(parent, scale) {\n  return createContext(parent, {\n    scale,\n    type: 'scale'\n  });\n}\nfunction createTickContext(parent, index, tick) {\n  return createContext(parent, {\n    tick,\n    index,\n    type: 'tick'\n  });\n}\nfunction titleAlign(align, position, reverse) {\n  let ret = _toLeftRightCenter(align);\n  if ((reverse && position !== 'right') || (!reverse && position === 'right')) {\n    ret = reverseAlign(ret);\n  }\n  return ret;\n}\nfunction titleArgs(scale, offset, position, align) {\n  const {top, left, bottom, right, chart} = scale;\n  const {chartArea, scales} = chart;\n  let rotation = 0;\n  let maxWidth, titleX, titleY;\n  const height = bottom - top;\n  const width = right - left;\n  if (scale.isHorizontal()) {\n    titleX = _alignStartEnd(align, left, right);\n    if (isObject(position)) {\n      const positionAxisID = Object.keys(position)[0];\n      const value = position[positionAxisID];\n      titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n    } else if (position === 'center') {\n      titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n    } else {\n      titleY = offsetFromEdge(scale, position, offset);\n    }\n    maxWidth = right - left;\n  } else {\n    if (isObject(position)) {\n      const positionAxisID = Object.keys(position)[0];\n      const value = position[positionAxisID];\n      titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n    } else if (position === 'center') {\n      titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n    } else {\n      titleX = offsetFromEdge(scale, position, offset);\n    }\n    titleY = _alignStartEnd(align, bottom, top);\n    rotation = position === 'left' ? -HALF_PI : HALF_PI;\n  }\n  return {titleX, titleY, maxWidth, rotation};\n}\nclass Scale extends Element {\n  constructor(cfg) {\n    super();\n    this.id = cfg.id;\n    this.type = cfg.type;\n    this.options = undefined;\n    this.ctx = cfg.ctx;\n    this.chart = cfg.chart;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this._margins = {\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    };\n    this.maxWidth = undefined;\n    this.maxHeight = undefined;\n    this.paddingTop = undefined;\n    this.paddingBottom = undefined;\n    this.paddingLeft = undefined;\n    this.paddingRight = undefined;\n    this.axis = undefined;\n    this.labelRotation = undefined;\n    this.min = undefined;\n    this.max = undefined;\n    this._range = undefined;\n    this.ticks = [];\n    this._gridLineItems = null;\n    this._labelItems = null;\n    this._labelSizes = null;\n    this._length = 0;\n    this._maxLength = 0;\n    this._longestTextCache = {};\n    this._startPixel = undefined;\n    this._endPixel = undefined;\n    this._reversePixels = false;\n    this._userMax = undefined;\n    this._userMin = undefined;\n    this._suggestedMax = undefined;\n    this._suggestedMin = undefined;\n    this._ticksLength = 0;\n    this._borderValue = 0;\n    this._cache = {};\n    this._dataLimitsCached = false;\n    this.$context = undefined;\n  }\n  init(options) {\n    this.options = options.setContext(this.getContext());\n    this.axis = options.axis;\n    this._userMin = this.parse(options.min);\n    this._userMax = this.parse(options.max);\n    this._suggestedMin = this.parse(options.suggestedMin);\n    this._suggestedMax = this.parse(options.suggestedMax);\n  }\n  parse(raw, index) {\n    return raw;\n  }\n  getUserBounds() {\n    let {_userMin, _userMax, _suggestedMin, _suggestedMax} = this;\n    _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n    _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n    _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n    _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n    return {\n      min: finiteOrDefault(_userMin, _suggestedMin),\n      max: finiteOrDefault(_userMax, _suggestedMax),\n      minDefined: isNumberFinite(_userMin),\n      maxDefined: isNumberFinite(_userMax)\n    };\n  }\n  getMinMax(canStack) {\n    let {min, max, minDefined, maxDefined} = this.getUserBounds();\n    let range;\n    if (minDefined && maxDefined) {\n      return {min, max};\n    }\n    const metas = this.getMatchingVisibleMetas();\n    for (let i = 0, ilen = metas.length; i < ilen; ++i) {\n      range = metas[i].controller.getMinMax(this, canStack);\n      if (!minDefined) {\n        min = Math.min(min, range.min);\n      }\n      if (!maxDefined) {\n        max = Math.max(max, range.max);\n      }\n    }\n    min = maxDefined && min > max ? max : min;\n    max = minDefined && min > max ? min : max;\n    return {\n      min: finiteOrDefault(min, finiteOrDefault(max, min)),\n      max: finiteOrDefault(max, finiteOrDefault(min, max))\n    };\n  }\n  getPadding() {\n    return {\n      left: this.paddingLeft || 0,\n      top: this.paddingTop || 0,\n      right: this.paddingRight || 0,\n      bottom: this.paddingBottom || 0\n    };\n  }\n  getTicks() {\n    return this.ticks;\n  }\n  getLabels() {\n    const data = this.chart.data;\n    return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n  }\n  beforeLayout() {\n    this._cache = {};\n    this._dataLimitsCached = false;\n  }\n  beforeUpdate() {\n    callback(this.options.beforeUpdate, [this]);\n  }\n  update(maxWidth, maxHeight, margins) {\n    const {beginAtZero, grace, ticks: tickOpts} = this.options;\n    const sampleSize = tickOpts.sampleSize;\n    this.beforeUpdate();\n    this.maxWidth = maxWidth;\n    this.maxHeight = maxHeight;\n    this._margins = margins = Object.assign({\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    }, margins);\n    this.ticks = null;\n    this._labelSizes = null;\n    this._gridLineItems = null;\n    this._labelItems = null;\n    this.beforeSetDimensions();\n    this.setDimensions();\n    this.afterSetDimensions();\n    this._maxLength = this.isHorizontal()\n      ? this.width + margins.left + margins.right\n      : this.height + margins.top + margins.bottom;\n    if (!this._dataLimitsCached) {\n      this.beforeDataLimits();\n      this.determineDataLimits();\n      this.afterDataLimits();\n      this._range = _addGrace(this, grace, beginAtZero);\n      this._dataLimitsCached = true;\n    }\n    this.beforeBuildTicks();\n    this.ticks = this.buildTicks() || [];\n    this.afterBuildTicks();\n    const samplingEnabled = sampleSize < this.ticks.length;\n    this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n    this.configure();\n    this.beforeCalculateLabelRotation();\n    this.calculateLabelRotation();\n    this.afterCalculateLabelRotation();\n    if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n      this.ticks = autoSkip(this, this.ticks);\n      this._labelSizes = null;\n      this.afterAutoSkip();\n    }\n    if (samplingEnabled) {\n      this._convertTicksToLabels(this.ticks);\n    }\n    this.beforeFit();\n    this.fit();\n    this.afterFit();\n    this.afterUpdate();\n  }\n  configure() {\n    let reversePixels = this.options.reverse;\n    let startPixel, endPixel;\n    if (this.isHorizontal()) {\n      startPixel = this.left;\n      endPixel = this.right;\n    } else {\n      startPixel = this.top;\n      endPixel = this.bottom;\n      reversePixels = !reversePixels;\n    }\n    this._startPixel = startPixel;\n    this._endPixel = endPixel;\n    this._reversePixels = reversePixels;\n    this._length = endPixel - startPixel;\n    this._alignToPixels = this.options.alignToPixels;\n  }\n  afterUpdate() {\n    callback(this.options.afterUpdate, [this]);\n  }\n  beforeSetDimensions() {\n    callback(this.options.beforeSetDimensions, [this]);\n  }\n  setDimensions() {\n    if (this.isHorizontal()) {\n      this.width = this.maxWidth;\n      this.left = 0;\n      this.right = this.width;\n    } else {\n      this.height = this.maxHeight;\n      this.top = 0;\n      this.bottom = this.height;\n    }\n    this.paddingLeft = 0;\n    this.paddingTop = 0;\n    this.paddingRight = 0;\n    this.paddingBottom = 0;\n  }\n  afterSetDimensions() {\n    callback(this.options.afterSetDimensions, [this]);\n  }\n  _callHooks(name) {\n    this.chart.notifyPlugins(name, this.getContext());\n    callback(this.options[name], [this]);\n  }\n  beforeDataLimits() {\n    this._callHooks('beforeDataLimits');\n  }\n  determineDataLimits() {}\n  afterDataLimits() {\n    this._callHooks('afterDataLimits');\n  }\n  beforeBuildTicks() {\n    this._callHooks('beforeBuildTicks');\n  }\n  buildTicks() {\n    return [];\n  }\n  afterBuildTicks() {\n    this._callHooks('afterBuildTicks');\n  }\n  beforeTickToLabelConversion() {\n    callback(this.options.beforeTickToLabelConversion, [this]);\n  }\n  generateTickLabels(ticks) {\n    const tickOpts = this.options.ticks;\n    let i, ilen, tick;\n    for (i = 0, ilen = ticks.length; i < ilen; i++) {\n      tick = ticks[i];\n      tick.label = callback(tickOpts.callback, [tick.value, i, ticks], this);\n    }\n  }\n  afterTickToLabelConversion() {\n    callback(this.options.afterTickToLabelConversion, [this]);\n  }\n  beforeCalculateLabelRotation() {\n    callback(this.options.beforeCalculateLabelRotation, [this]);\n  }\n  calculateLabelRotation() {\n    const options = this.options;\n    const tickOpts = options.ticks;\n    const numTicks = this.ticks.length;\n    const minRotation = tickOpts.minRotation || 0;\n    const maxRotation = tickOpts.maxRotation;\n    let labelRotation = minRotation;\n    let tickWidth, maxHeight, maxLabelDiagonal;\n    if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n      this.labelRotation = minRotation;\n      return;\n    }\n    const labelSizes = this._getLabelSizes();\n    const maxLabelWidth = labelSizes.widest.width;\n    const maxLabelHeight = labelSizes.highest.height;\n    const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n    tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n    if (maxLabelWidth + 6 > tickWidth) {\n      tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n      maxHeight = this.maxHeight - getTickMarkLength(options.grid)\n\t\t\t\t- tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n      maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n      labelRotation = toDegrees(Math.min(\n        Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)),\n        Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))\n      ));\n      labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n    }\n    this.labelRotation = labelRotation;\n  }\n  afterCalculateLabelRotation() {\n    callback(this.options.afterCalculateLabelRotation, [this]);\n  }\n  afterAutoSkip() {}\n  beforeFit() {\n    callback(this.options.beforeFit, [this]);\n  }\n  fit() {\n    const minSize = {\n      width: 0,\n      height: 0\n    };\n    const {chart, options: {ticks: tickOpts, title: titleOpts, grid: gridOpts}} = this;\n    const display = this._isVisible();\n    const isHorizontal = this.isHorizontal();\n    if (display) {\n      const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n      if (isHorizontal) {\n        minSize.width = this.maxWidth;\n        minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n      } else {\n        minSize.height = this.maxHeight;\n        minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n      }\n      if (tickOpts.display && this.ticks.length) {\n        const {first, last, widest, highest} = this._getLabelSizes();\n        const tickPadding = tickOpts.padding * 2;\n        const angleRadians = toRadians(this.labelRotation);\n        const cos = Math.cos(angleRadians);\n        const sin = Math.sin(angleRadians);\n        if (isHorizontal) {\n          const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n          minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n        } else {\n          const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n          minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n        }\n        this._calculatePadding(first, last, sin, cos);\n      }\n    }\n    this._handleMargins();\n    if (isHorizontal) {\n      this.width = this._length = chart.width - this._margins.left - this._margins.right;\n      this.height = minSize.height;\n    } else {\n      this.width = minSize.width;\n      this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n    }\n  }\n  _calculatePadding(first, last, sin, cos) {\n    const {ticks: {align, padding}, position} = this.options;\n    const isRotated = this.labelRotation !== 0;\n    const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n    if (this.isHorizontal()) {\n      const offsetLeft = this.getPixelForTick(0) - this.left;\n      const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n      let paddingLeft = 0;\n      let paddingRight = 0;\n      if (isRotated) {\n        if (labelsBelowTicks) {\n          paddingLeft = cos * first.width;\n          paddingRight = sin * last.height;\n        } else {\n          paddingLeft = sin * first.height;\n          paddingRight = cos * last.width;\n        }\n      } else if (align === 'start') {\n        paddingRight = last.width;\n      } else if (align === 'end') {\n        paddingLeft = first.width;\n      } else if (align !== 'inner') {\n        paddingLeft = first.width / 2;\n        paddingRight = last.width / 2;\n      }\n      this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n      this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n    } else {\n      let paddingTop = last.height / 2;\n      let paddingBottom = first.height / 2;\n      if (align === 'start') {\n        paddingTop = 0;\n        paddingBottom = first.height;\n      } else if (align === 'end') {\n        paddingTop = last.height;\n        paddingBottom = 0;\n      }\n      this.paddingTop = paddingTop + padding;\n      this.paddingBottom = paddingBottom + padding;\n    }\n  }\n  _handleMargins() {\n    if (this._margins) {\n      this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n      this._margins.top = Math.max(this.paddingTop, this._margins.top);\n      this._margins.right = Math.max(this.paddingRight, this._margins.right);\n      this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n    }\n  }\n  afterFit() {\n    callback(this.options.afterFit, [this]);\n  }\n  isHorizontal() {\n    const {axis, position} = this.options;\n    return position === 'top' || position === 'bottom' || axis === 'x';\n  }\n  isFullSize() {\n    return this.options.fullSize;\n  }\n  _convertTicksToLabels(ticks) {\n    this.beforeTickToLabelConversion();\n    this.generateTickLabels(ticks);\n    let i, ilen;\n    for (i = 0, ilen = ticks.length; i < ilen; i++) {\n      if (isNullOrUndef(ticks[i].label)) {\n        ticks.splice(i, 1);\n        ilen--;\n        i--;\n      }\n    }\n    this.afterTickToLabelConversion();\n  }\n  _getLabelSizes() {\n    let labelSizes = this._labelSizes;\n    if (!labelSizes) {\n      const sampleSize = this.options.ticks.sampleSize;\n      let ticks = this.ticks;\n      if (sampleSize < ticks.length) {\n        ticks = sample(ticks, sampleSize);\n      }\n      this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length);\n    }\n    return labelSizes;\n  }\n  _computeLabelSizes(ticks, length) {\n    const {ctx, _longestTextCache: caches} = this;\n    const widths = [];\n    const heights = [];\n    let widestLabelSize = 0;\n    let highestLabelSize = 0;\n    let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n    for (i = 0; i < length; ++i) {\n      label = ticks[i].label;\n      tickFont = this._resolveTickFontOptions(i);\n      ctx.font = fontString = tickFont.string;\n      cache = caches[fontString] = caches[fontString] || {data: {}, gc: []};\n      lineHeight = tickFont.lineHeight;\n      width = height = 0;\n      if (!isNullOrUndef(label) && !isArray(label)) {\n        width = _measureText(ctx, cache.data, cache.gc, width, label);\n        height = lineHeight;\n      } else if (isArray(label)) {\n        for (j = 0, jlen = label.length; j < jlen; ++j) {\n          nestedLabel = label[j];\n          if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n            width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n            height += lineHeight;\n          }\n        }\n      }\n      widths.push(width);\n      heights.push(height);\n      widestLabelSize = Math.max(width, widestLabelSize);\n      highestLabelSize = Math.max(height, highestLabelSize);\n    }\n    garbageCollect(caches, length);\n    const widest = widths.indexOf(widestLabelSize);\n    const highest = heights.indexOf(highestLabelSize);\n    const valueAt = (idx) => ({width: widths[idx] || 0, height: heights[idx] || 0});\n    return {\n      first: valueAt(0),\n      last: valueAt(length - 1),\n      widest: valueAt(widest),\n      highest: valueAt(highest),\n      widths,\n      heights,\n    };\n  }\n  getLabelForValue(value) {\n    return value;\n  }\n  getPixelForValue(value, index) {\n    return NaN;\n  }\n  getValueForPixel(pixel) {}\n  getPixelForTick(index) {\n    const ticks = this.ticks;\n    if (index < 0 || index > ticks.length - 1) {\n      return null;\n    }\n    return this.getPixelForValue(ticks[index].value);\n  }\n  getPixelForDecimal(decimal) {\n    if (this._reversePixels) {\n      decimal = 1 - decimal;\n    }\n    const pixel = this._startPixel + decimal * this._length;\n    return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n  }\n  getDecimalForPixel(pixel) {\n    const decimal = (pixel - this._startPixel) / this._length;\n    return this._reversePixels ? 1 - decimal : decimal;\n  }\n  getBasePixel() {\n    return this.getPixelForValue(this.getBaseValue());\n  }\n  getBaseValue() {\n    const {min, max} = this;\n    return min < 0 && max < 0 ? max :\n      min > 0 && max > 0 ? min :\n      0;\n  }\n  getContext(index) {\n    const ticks = this.ticks || [];\n    if (index >= 0 && index < ticks.length) {\n      const tick = ticks[index];\n      return tick.$context ||\n\t\t\t\t(tick.$context = createTickContext(this.getContext(), index, tick));\n    }\n    return this.$context ||\n\t\t\t(this.$context = createScaleContext(this.chart.getContext(), this));\n  }\n  _tickSize() {\n    const optionTicks = this.options.ticks;\n    const rot = toRadians(this.labelRotation);\n    const cos = Math.abs(Math.cos(rot));\n    const sin = Math.abs(Math.sin(rot));\n    const labelSizes = this._getLabelSizes();\n    const padding = optionTicks.autoSkipPadding || 0;\n    const w = labelSizes ? labelSizes.widest.width + padding : 0;\n    const h = labelSizes ? labelSizes.highest.height + padding : 0;\n    return this.isHorizontal()\n      ? h * cos > w * sin ? w / cos : h / sin\n      : h * sin < w * cos ? h / cos : w / sin;\n  }\n  _isVisible() {\n    const display = this.options.display;\n    if (display !== 'auto') {\n      return !!display;\n    }\n    return this.getMatchingVisibleMetas().length > 0;\n  }\n  _computeGridLineItems(chartArea) {\n    const axis = this.axis;\n    const chart = this.chart;\n    const options = this.options;\n    const {grid, position} = options;\n    const offset = grid.offset;\n    const isHorizontal = this.isHorizontal();\n    const ticks = this.ticks;\n    const ticksLength = ticks.length + (offset ? 1 : 0);\n    const tl = getTickMarkLength(grid);\n    const items = [];\n    const borderOpts = grid.setContext(this.getContext());\n    const axisWidth = borderOpts.drawBorder ? borderOpts.borderWidth : 0;\n    const axisHalfWidth = axisWidth / 2;\n    const alignBorderValue = function(pixel) {\n      return _alignPixel(chart, pixel, axisWidth);\n    };\n    let borderValue, i, lineValue, alignedLineValue;\n    let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n    if (position === 'top') {\n      borderValue = alignBorderValue(this.bottom);\n      ty1 = this.bottom - tl;\n      ty2 = borderValue - axisHalfWidth;\n      y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n      y2 = chartArea.bottom;\n    } else if (position === 'bottom') {\n      borderValue = alignBorderValue(this.top);\n      y1 = chartArea.top;\n      y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n      ty1 = borderValue + axisHalfWidth;\n      ty2 = this.top + tl;\n    } else if (position === 'left') {\n      borderValue = alignBorderValue(this.right);\n      tx1 = this.right - tl;\n      tx2 = borderValue - axisHalfWidth;\n      x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n      x2 = chartArea.right;\n    } else if (position === 'right') {\n      borderValue = alignBorderValue(this.left);\n      x1 = chartArea.left;\n      x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n      tx1 = borderValue + axisHalfWidth;\n      tx2 = this.left + tl;\n    } else if (axis === 'x') {\n      if (position === 'center') {\n        borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n      }\n      y1 = chartArea.top;\n      y2 = chartArea.bottom;\n      ty1 = borderValue + axisHalfWidth;\n      ty2 = ty1 + tl;\n    } else if (axis === 'y') {\n      if (position === 'center') {\n        borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n      }\n      tx1 = borderValue - axisHalfWidth;\n      tx2 = tx1 - tl;\n      x1 = chartArea.left;\n      x2 = chartArea.right;\n    }\n    const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n    const step = Math.max(1, Math.ceil(ticksLength / limit));\n    for (i = 0; i < ticksLength; i += step) {\n      const optsAtIndex = grid.setContext(this.getContext(i));\n      const lineWidth = optsAtIndex.lineWidth;\n      const lineColor = optsAtIndex.color;\n      const borderDash = optsAtIndex.borderDash || [];\n      const borderDashOffset = optsAtIndex.borderDashOffset;\n      const tickWidth = optsAtIndex.tickWidth;\n      const tickColor = optsAtIndex.tickColor;\n      const tickBorderDash = optsAtIndex.tickBorderDash || [];\n      const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n      lineValue = getPixelForGridLine(this, i, offset);\n      if (lineValue === undefined) {\n        continue;\n      }\n      alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n      if (isHorizontal) {\n        tx1 = tx2 = x1 = x2 = alignedLineValue;\n      } else {\n        ty1 = ty2 = y1 = y2 = alignedLineValue;\n      }\n      items.push({\n        tx1,\n        ty1,\n        tx2,\n        ty2,\n        x1,\n        y1,\n        x2,\n        y2,\n        width: lineWidth,\n        color: lineColor,\n        borderDash,\n        borderDashOffset,\n        tickWidth,\n        tickColor,\n        tickBorderDash,\n        tickBorderDashOffset,\n      });\n    }\n    this._ticksLength = ticksLength;\n    this._borderValue = borderValue;\n    return items;\n  }\n  _computeLabelItems(chartArea) {\n    const axis = this.axis;\n    const options = this.options;\n    const {position, ticks: optionTicks} = options;\n    const isHorizontal = this.isHorizontal();\n    const ticks = this.ticks;\n    const {align, crossAlign, padding, mirror} = optionTicks;\n    const tl = getTickMarkLength(options.grid);\n    const tickAndPadding = tl + padding;\n    const hTickAndPadding = mirror ? -padding : tickAndPadding;\n    const rotation = -toRadians(this.labelRotation);\n    const items = [];\n    let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n    let textBaseline = 'middle';\n    if (position === 'top') {\n      y = this.bottom - hTickAndPadding;\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (position === 'bottom') {\n      y = this.top + hTickAndPadding;\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (position === 'left') {\n      const ret = this._getYAxisLabelAlignment(tl);\n      textAlign = ret.textAlign;\n      x = ret.x;\n    } else if (position === 'right') {\n      const ret = this._getYAxisLabelAlignment(tl);\n      textAlign = ret.textAlign;\n      x = ret.x;\n    } else if (axis === 'x') {\n      if (position === 'center') {\n        y = ((chartArea.top + chartArea.bottom) / 2) + tickAndPadding;\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n      }\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (axis === 'y') {\n      if (position === 'center') {\n        x = ((chartArea.left + chartArea.right) / 2) - tickAndPadding;\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        x = this.chart.scales[positionAxisID].getPixelForValue(value);\n      }\n      textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n    }\n    if (axis === 'y') {\n      if (align === 'start') {\n        textBaseline = 'top';\n      } else if (align === 'end') {\n        textBaseline = 'bottom';\n      }\n    }\n    const labelSizes = this._getLabelSizes();\n    for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n      tick = ticks[i];\n      label = tick.label;\n      const optsAtIndex = optionTicks.setContext(this.getContext(i));\n      pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n      font = this._resolveTickFontOptions(i);\n      lineHeight = font.lineHeight;\n      lineCount = isArray(label) ? label.length : 1;\n      const halfCount = lineCount / 2;\n      const color = optsAtIndex.color;\n      const strokeColor = optsAtIndex.textStrokeColor;\n      const strokeWidth = optsAtIndex.textStrokeWidth;\n      let tickTextAlign = textAlign;\n      if (isHorizontal) {\n        x = pixel;\n        if (textAlign === 'inner') {\n          if (i === ilen - 1) {\n            tickTextAlign = !this.options.reverse ? 'right' : 'left';\n          } else if (i === 0) {\n            tickTextAlign = !this.options.reverse ? 'left' : 'right';\n          } else {\n            tickTextAlign = 'center';\n          }\n        }\n        if (position === 'top') {\n          if (crossAlign === 'near' || rotation !== 0) {\n            textOffset = -lineCount * lineHeight + lineHeight / 2;\n          } else if (crossAlign === 'center') {\n            textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n          } else {\n            textOffset = -labelSizes.highest.height + lineHeight / 2;\n          }\n        } else {\n          if (crossAlign === 'near' || rotation !== 0) {\n            textOffset = lineHeight / 2;\n          } else if (crossAlign === 'center') {\n            textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n          } else {\n            textOffset = labelSizes.highest.height - lineCount * lineHeight;\n          }\n        }\n        if (mirror) {\n          textOffset *= -1;\n        }\n      } else {\n        y = pixel;\n        textOffset = (1 - lineCount) * lineHeight / 2;\n      }\n      let backdrop;\n      if (optsAtIndex.showLabelBackdrop) {\n        const labelPadding = toPadding(optsAtIndex.backdropPadding);\n        const height = labelSizes.heights[i];\n        const width = labelSizes.widths[i];\n        let top = y + textOffset - labelPadding.top;\n        let left = x - labelPadding.left;\n        switch (textBaseline) {\n        case 'middle':\n          top -= height / 2;\n          break;\n        case 'bottom':\n          top -= height;\n          break;\n        }\n        switch (textAlign) {\n        case 'center':\n          left -= width / 2;\n          break;\n        case 'right':\n          left -= width;\n          break;\n        }\n        backdrop = {\n          left,\n          top,\n          width: width + labelPadding.width,\n          height: height + labelPadding.height,\n          color: optsAtIndex.backdropColor,\n        };\n      }\n      items.push({\n        rotation,\n        label,\n        font,\n        color,\n        strokeColor,\n        strokeWidth,\n        textOffset,\n        textAlign: tickTextAlign,\n        textBaseline,\n        translation: [x, y],\n        backdrop,\n      });\n    }\n    return items;\n  }\n  _getXAxisLabelAlignment() {\n    const {position, ticks} = this.options;\n    const rotation = -toRadians(this.labelRotation);\n    if (rotation) {\n      return position === 'top' ? 'left' : 'right';\n    }\n    let align = 'center';\n    if (ticks.align === 'start') {\n      align = 'left';\n    } else if (ticks.align === 'end') {\n      align = 'right';\n    } else if (ticks.align === 'inner') {\n      align = 'inner';\n    }\n    return align;\n  }\n  _getYAxisLabelAlignment(tl) {\n    const {position, ticks: {crossAlign, mirror, padding}} = this.options;\n    const labelSizes = this._getLabelSizes();\n    const tickAndPadding = tl + padding;\n    const widest = labelSizes.widest.width;\n    let textAlign;\n    let x;\n    if (position === 'left') {\n      if (mirror) {\n        x = this.right + padding;\n        if (crossAlign === 'near') {\n          textAlign = 'left';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x += (widest / 2);\n        } else {\n          textAlign = 'right';\n          x += widest;\n        }\n      } else {\n        x = this.right - tickAndPadding;\n        if (crossAlign === 'near') {\n          textAlign = 'right';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x -= (widest / 2);\n        } else {\n          textAlign = 'left';\n          x = this.left;\n        }\n      }\n    } else if (position === 'right') {\n      if (mirror) {\n        x = this.left + padding;\n        if (crossAlign === 'near') {\n          textAlign = 'right';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x -= (widest / 2);\n        } else {\n          textAlign = 'left';\n          x -= widest;\n        }\n      } else {\n        x = this.left + tickAndPadding;\n        if (crossAlign === 'near') {\n          textAlign = 'left';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x += widest / 2;\n        } else {\n          textAlign = 'right';\n          x = this.right;\n        }\n      }\n    } else {\n      textAlign = 'right';\n    }\n    return {textAlign, x};\n  }\n  _computeLabelArea() {\n    if (this.options.ticks.mirror) {\n      return;\n    }\n    const chart = this.chart;\n    const position = this.options.position;\n    if (position === 'left' || position === 'right') {\n      return {top: 0, left: this.left, bottom: chart.height, right: this.right};\n    } if (position === 'top' || position === 'bottom') {\n      return {top: this.top, left: 0, bottom: this.bottom, right: chart.width};\n    }\n  }\n  drawBackground() {\n    const {ctx, options: {backgroundColor}, left, top, width, height} = this;\n    if (backgroundColor) {\n      ctx.save();\n      ctx.fillStyle = backgroundColor;\n      ctx.fillRect(left, top, width, height);\n      ctx.restore();\n    }\n  }\n  getLineWidthForValue(value) {\n    const grid = this.options.grid;\n    if (!this._isVisible() || !grid.display) {\n      return 0;\n    }\n    const ticks = this.ticks;\n    const index = ticks.findIndex(t => t.value === value);\n    if (index >= 0) {\n      const opts = grid.setContext(this.getContext(index));\n      return opts.lineWidth;\n    }\n    return 0;\n  }\n  drawGrid(chartArea) {\n    const grid = this.options.grid;\n    const ctx = this.ctx;\n    const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n    let i, ilen;\n    const drawLine = (p1, p2, style) => {\n      if (!style.width || !style.color) {\n        return;\n      }\n      ctx.save();\n      ctx.lineWidth = style.width;\n      ctx.strokeStyle = style.color;\n      ctx.setLineDash(style.borderDash || []);\n      ctx.lineDashOffset = style.borderDashOffset;\n      ctx.beginPath();\n      ctx.moveTo(p1.x, p1.y);\n      ctx.lineTo(p2.x, p2.y);\n      ctx.stroke();\n      ctx.restore();\n    };\n    if (grid.display) {\n      for (i = 0, ilen = items.length; i < ilen; ++i) {\n        const item = items[i];\n        if (grid.drawOnChartArea) {\n          drawLine(\n            {x: item.x1, y: item.y1},\n            {x: item.x2, y: item.y2},\n            item\n          );\n        }\n        if (grid.drawTicks) {\n          drawLine(\n            {x: item.tx1, y: item.ty1},\n            {x: item.tx2, y: item.ty2},\n            {\n              color: item.tickColor,\n              width: item.tickWidth,\n              borderDash: item.tickBorderDash,\n              borderDashOffset: item.tickBorderDashOffset\n            }\n          );\n        }\n      }\n    }\n  }\n  drawBorder() {\n    const {chart, ctx, options: {grid}} = this;\n    const borderOpts = grid.setContext(this.getContext());\n    const axisWidth = grid.drawBorder ? borderOpts.borderWidth : 0;\n    if (!axisWidth) {\n      return;\n    }\n    const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n    const borderValue = this._borderValue;\n    let x1, x2, y1, y2;\n    if (this.isHorizontal()) {\n      x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n      x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n      y1 = y2 = borderValue;\n    } else {\n      y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n      y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n      x1 = x2 = borderValue;\n    }\n    ctx.save();\n    ctx.lineWidth = borderOpts.borderWidth;\n    ctx.strokeStyle = borderOpts.borderColor;\n    ctx.beginPath();\n    ctx.moveTo(x1, y1);\n    ctx.lineTo(x2, y2);\n    ctx.stroke();\n    ctx.restore();\n  }\n  drawLabels(chartArea) {\n    const optionTicks = this.options.ticks;\n    if (!optionTicks.display) {\n      return;\n    }\n    const ctx = this.ctx;\n    const area = this._computeLabelArea();\n    if (area) {\n      clipArea(ctx, area);\n    }\n    const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n    let i, ilen;\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      const item = items[i];\n      const tickFont = item.font;\n      const label = item.label;\n      if (item.backdrop) {\n        ctx.fillStyle = item.backdrop.color;\n        ctx.fillRect(item.backdrop.left, item.backdrop.top, item.backdrop.width, item.backdrop.height);\n      }\n      let y = item.textOffset;\n      renderText(ctx, label, 0, y, tickFont, item);\n    }\n    if (area) {\n      unclipArea(ctx);\n    }\n  }\n  drawTitle() {\n    const {ctx, options: {position, title, reverse}} = this;\n    if (!title.display) {\n      return;\n    }\n    const font = toFont(title.font);\n    const padding = toPadding(title.padding);\n    const align = title.align;\n    let offset = font.lineHeight / 2;\n    if (position === 'bottom' || position === 'center' || isObject(position)) {\n      offset += padding.bottom;\n      if (isArray(title.text)) {\n        offset += font.lineHeight * (title.text.length - 1);\n      }\n    } else {\n      offset += padding.top;\n    }\n    const {titleX, titleY, maxWidth, rotation} = titleArgs(this, offset, position, align);\n    renderText(ctx, title.text, 0, 0, font, {\n      color: title.color,\n      maxWidth,\n      rotation,\n      textAlign: titleAlign(align, position, reverse),\n      textBaseline: 'middle',\n      translation: [titleX, titleY],\n    });\n  }\n  draw(chartArea) {\n    if (!this._isVisible()) {\n      return;\n    }\n    this.drawBackground();\n    this.drawGrid(chartArea);\n    this.drawBorder();\n    this.drawTitle();\n    this.drawLabels(chartArea);\n  }\n  _layers() {\n    const opts = this.options;\n    const tz = opts.ticks && opts.ticks.z || 0;\n    const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n    if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n      return [{\n        z: tz,\n        draw: (chartArea) => {\n          this.draw(chartArea);\n        }\n      }];\n    }\n    return [{\n      z: gz,\n      draw: (chartArea) => {\n        this.drawBackground();\n        this.drawGrid(chartArea);\n        this.drawTitle();\n      }\n    }, {\n      z: gz + 1,\n      draw: () => {\n        this.drawBorder();\n      }\n    }, {\n      z: tz,\n      draw: (chartArea) => {\n        this.drawLabels(chartArea);\n      }\n    }];\n  }\n  getMatchingVisibleMetas(type) {\n    const metas = this.chart.getSortedVisibleDatasetMetas();\n    const axisID = this.axis + 'AxisID';\n    const result = [];\n    let i, ilen;\n    for (i = 0, ilen = metas.length; i < ilen; ++i) {\n      const meta = metas[i];\n      if (meta[axisID] === this.id && (!type || meta.type === type)) {\n        result.push(meta);\n      }\n    }\n    return result;\n  }\n  _resolveTickFontOptions(index) {\n    const opts = this.options.ticks.setContext(this.getContext(index));\n    return toFont(opts.font);\n  }\n  _maxDigits() {\n    const fontSize = this._resolveTickFontOptions(0).lineHeight;\n    return (this.isHorizontal() ? this.width : this.height) / fontSize;\n  }\n}\n\nclass TypedRegistry {\n  constructor(type, scope, override) {\n    this.type = type;\n    this.scope = scope;\n    this.override = override;\n    this.items = Object.create(null);\n  }\n  isForType(type) {\n    return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n  }\n  register(item) {\n    const proto = Object.getPrototypeOf(item);\n    let parentScope;\n    if (isIChartComponent(proto)) {\n      parentScope = this.register(proto);\n    }\n    const items = this.items;\n    const id = item.id;\n    const scope = this.scope + '.' + id;\n    if (!id) {\n      throw new Error('class does not have id: ' + item);\n    }\n    if (id in items) {\n      return scope;\n    }\n    items[id] = item;\n    registerDefaults(item, scope, parentScope);\n    if (this.override) {\n      defaults.override(item.id, item.overrides);\n    }\n    return scope;\n  }\n  get(id) {\n    return this.items[id];\n  }\n  unregister(item) {\n    const items = this.items;\n    const id = item.id;\n    const scope = this.scope;\n    if (id in items) {\n      delete items[id];\n    }\n    if (scope && id in defaults[scope]) {\n      delete defaults[scope][id];\n      if (this.override) {\n        delete overrides[id];\n      }\n    }\n  }\n}\nfunction registerDefaults(item, scope, parentScope) {\n  const itemDefaults = merge(Object.create(null), [\n    parentScope ? defaults.get(parentScope) : {},\n    defaults.get(scope),\n    item.defaults\n  ]);\n  defaults.set(scope, itemDefaults);\n  if (item.defaultRoutes) {\n    routeDefaults(scope, item.defaultRoutes);\n  }\n  if (item.descriptors) {\n    defaults.describe(scope, item.descriptors);\n  }\n}\nfunction routeDefaults(scope, routes) {\n  Object.keys(routes).forEach(property => {\n    const propertyParts = property.split('.');\n    const sourceName = propertyParts.pop();\n    const sourceScope = [scope].concat(propertyParts).join('.');\n    const parts = routes[property].split('.');\n    const targetName = parts.pop();\n    const targetScope = parts.join('.');\n    defaults.route(sourceScope, sourceName, targetScope, targetName);\n  });\n}\nfunction isIChartComponent(proto) {\n  return 'id' in proto && 'defaults' in proto;\n}\n\nclass Registry {\n  constructor() {\n    this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n    this.elements = new TypedRegistry(Element, 'elements');\n    this.plugins = new TypedRegistry(Object, 'plugins');\n    this.scales = new TypedRegistry(Scale, 'scales');\n    this._typedRegistries = [this.controllers, this.scales, this.elements];\n  }\n  add(...args) {\n    this._each('register', args);\n  }\n  remove(...args) {\n    this._each('unregister', args);\n  }\n  addControllers(...args) {\n    this._each('register', args, this.controllers);\n  }\n  addElements(...args) {\n    this._each('register', args, this.elements);\n  }\n  addPlugins(...args) {\n    this._each('register', args, this.plugins);\n  }\n  addScales(...args) {\n    this._each('register', args, this.scales);\n  }\n  getController(id) {\n    return this._get(id, this.controllers, 'controller');\n  }\n  getElement(id) {\n    return this._get(id, this.elements, 'element');\n  }\n  getPlugin(id) {\n    return this._get(id, this.plugins, 'plugin');\n  }\n  getScale(id) {\n    return this._get(id, this.scales, 'scale');\n  }\n  removeControllers(...args) {\n    this._each('unregister', args, this.controllers);\n  }\n  removeElements(...args) {\n    this._each('unregister', args, this.elements);\n  }\n  removePlugins(...args) {\n    this._each('unregister', args, this.plugins);\n  }\n  removeScales(...args) {\n    this._each('unregister', args, this.scales);\n  }\n  _each(method, args, typedRegistry) {\n    [...args].forEach(arg => {\n      const reg = typedRegistry || this._getRegistryForType(arg);\n      if (typedRegistry || reg.isForType(arg) || (reg === this.plugins && arg.id)) {\n        this._exec(method, reg, arg);\n      } else {\n        each(arg, item => {\n          const itemReg = typedRegistry || this._getRegistryForType(item);\n          this._exec(method, itemReg, item);\n        });\n      }\n    });\n  }\n  _exec(method, registry, component) {\n    const camelMethod = _capitalize(method);\n    callback(component['before' + camelMethod], [], component);\n    registry[method](component);\n    callback(component['after' + camelMethod], [], component);\n  }\n  _getRegistryForType(type) {\n    for (let i = 0; i < this._typedRegistries.length; i++) {\n      const reg = this._typedRegistries[i];\n      if (reg.isForType(type)) {\n        return reg;\n      }\n    }\n    return this.plugins;\n  }\n  _get(id, typedRegistry, type) {\n    const item = typedRegistry.get(id);\n    if (item === undefined) {\n      throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n    }\n    return item;\n  }\n}\nvar registry = new Registry();\n\nclass ScatterController extends DatasetController {\n  update(mode) {\n    const meta = this._cachedMeta;\n    const {data: points = []} = meta;\n    const animationsDisabled = this.chart._animationsDisabled;\n    let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n    this._drawStart = start;\n    this._drawCount = count;\n    if (_scaleRangesChanged(meta)) {\n      start = 0;\n      count = points.length;\n    }\n    if (this.options.showLine) {\n      const {dataset: line, _dataset} = meta;\n      line._chart = this.chart;\n      line._datasetIndex = this.index;\n      line._decimated = !!_dataset._decimated;\n      line.points = points;\n      const options = this.resolveDatasetElementOptions(mode);\n      options.segment = this.options.segment;\n      this.updateElement(line, undefined, {\n        animated: !animationsDisabled,\n        options\n      }, mode);\n    }\n    this.updateElements(points, start, count, mode);\n  }\n  addElements() {\n    const {showLine} = this.options;\n    if (!this.datasetElementType && showLine) {\n      this.datasetElementType = registry.getElement('line');\n    }\n    super.addElements();\n  }\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n    const firstOpts = this.resolveDataElementOptions(start, mode);\n    const sharedOptions = this.getSharedOptions(firstOpts);\n    const includeOptions = this.includeOptions(mode, sharedOptions);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const {spanGaps, segment} = this.options;\n    const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n    const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n    let prevParsed = start > 0 && this.getParsed(start - 1);\n    for (let i = start; i < start + count; ++i) {\n      const point = points[i];\n      const parsed = this.getParsed(i);\n      const properties = directUpdate ? point : {};\n      const nullData = isNullOrUndef(parsed[vAxis]);\n      const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n      const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n      properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n      properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n      if (segment) {\n        properties.parsed = parsed;\n        properties.raw = _dataset.data[i];\n      }\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      }\n      if (!directUpdate) {\n        this.updateElement(point, i, properties, mode);\n      }\n      prevParsed = parsed;\n    }\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n  }\n  getMaxOverflow() {\n    const meta = this._cachedMeta;\n    const data = meta.data || [];\n    if (!this.options.showLine) {\n      let max = 0;\n      for (let i = data.length - 1; i >= 0; --i) {\n        max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n      }\n      return max > 0 && max;\n    }\n    const dataset = meta.dataset;\n    const border = dataset.options && dataset.options.borderWidth || 0;\n    if (!data.length) {\n      return border;\n    }\n    const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n    const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n    return Math.max(border, firstPoint, lastPoint) / 2;\n  }\n}\nScatterController.id = 'scatter';\nScatterController.defaults = {\n  datasetElementType: false,\n  dataElementType: 'point',\n  showLine: false,\n  fill: false\n};\nScatterController.overrides = {\n  interaction: {\n    mode: 'point'\n  },\n  plugins: {\n    tooltip: {\n      callbacks: {\n        title() {\n          return '';\n        },\n        label(item) {\n          return '(' + item.label + ', ' + item.formattedValue + ')';\n        }\n      }\n    }\n  },\n  scales: {\n    x: {\n      type: 'linear'\n    },\n    y: {\n      type: 'linear'\n    }\n  }\n};\n\nvar controllers = /*#__PURE__*/Object.freeze({\n__proto__: null,\nBarController: BarController,\nBubbleController: BubbleController,\nDoughnutController: DoughnutController,\nLineController: LineController,\nPolarAreaController: PolarAreaController,\nPieController: PieController,\nRadarController: RadarController,\nScatterController: ScatterController\n});\n\nfunction abstract() {\n  throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\nclass DateAdapter {\n  constructor(options) {\n    this.options = options || {};\n  }\n  init(chartOptions) {}\n  formats() {\n    return abstract();\n  }\n  parse(value, format) {\n    return abstract();\n  }\n  format(timestamp, format) {\n    return abstract();\n  }\n  add(timestamp, amount, unit) {\n    return abstract();\n  }\n  diff(a, b, unit) {\n    return abstract();\n  }\n  startOf(timestamp, unit, weekday) {\n    return abstract();\n  }\n  endOf(timestamp, unit) {\n    return abstract();\n  }\n}\nDateAdapter.override = function(members) {\n  Object.assign(DateAdapter.prototype, members);\n};\nvar adapters = {\n  _date: DateAdapter\n};\n\nfunction binarySearch(metaset, axis, value, intersect) {\n  const {controller, data, _sorted} = metaset;\n  const iScale = controller._cachedMeta.iScale;\n  if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n    const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n    if (!intersect) {\n      return lookupMethod(data, axis, value);\n    } else if (controller._sharedOptions) {\n      const el = data[0];\n      const range = typeof el.getRange === 'function' && el.getRange(axis);\n      if (range) {\n        const start = lookupMethod(data, axis, value - range);\n        const end = lookupMethod(data, axis, value + range);\n        return {lo: start.lo, hi: end.hi};\n      }\n    }\n  }\n  return {lo: 0, hi: data.length - 1};\n}\nfunction evaluateInteractionItems(chart, axis, position, handler, intersect) {\n  const metasets = chart.getSortedVisibleDatasetMetas();\n  const value = position[axis];\n  for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n    const {index, data} = metasets[i];\n    const {lo, hi} = binarySearch(metasets[i], axis, value, intersect);\n    for (let j = lo; j <= hi; ++j) {\n      const element = data[j];\n      if (!element.skip) {\n        handler(element, index, j);\n      }\n    }\n  }\n}\nfunction getDistanceMetricForAxis(axis) {\n  const useX = axis.indexOf('x') !== -1;\n  const useY = axis.indexOf('y') !== -1;\n  return function(pt1, pt2) {\n    const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n    const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n    return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n  };\n}\nfunction getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n  const items = [];\n  if (!includeInvisible && !chart.isPointInArea(position)) {\n    return items;\n  }\n  const evaluationFunc = function(element, datasetIndex, index) {\n    if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n      return;\n    }\n    if (element.inRange(position.x, position.y, useFinalPosition)) {\n      items.push({element, datasetIndex, index});\n    }\n  };\n  evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n  return items;\n}\nfunction getNearestRadialItems(chart, position, axis, useFinalPosition) {\n  let items = [];\n  function evaluationFunc(element, datasetIndex, index) {\n    const {startAngle, endAngle} = element.getProps(['startAngle', 'endAngle'], useFinalPosition);\n    const {angle} = getAngleFromPoint(element, {x: position.x, y: position.y});\n    if (_angleBetween(angle, startAngle, endAngle)) {\n      items.push({element, datasetIndex, index});\n    }\n  }\n  evaluateInteractionItems(chart, axis, position, evaluationFunc);\n  return items;\n}\nfunction getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n  let items = [];\n  const distanceMetric = getDistanceMetricForAxis(axis);\n  let minDistance = Number.POSITIVE_INFINITY;\n  function evaluationFunc(element, datasetIndex, index) {\n    const inRange = element.inRange(position.x, position.y, useFinalPosition);\n    if (intersect && !inRange) {\n      return;\n    }\n    const center = element.getCenterPoint(useFinalPosition);\n    const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n    if (!pointInArea && !inRange) {\n      return;\n    }\n    const distance = distanceMetric(position, center);\n    if (distance < minDistance) {\n      items = [{element, datasetIndex, index}];\n      minDistance = distance;\n    } else if (distance === minDistance) {\n      items.push({element, datasetIndex, index});\n    }\n  }\n  evaluateInteractionItems(chart, axis, position, evaluationFunc);\n  return items;\n}\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n  if (!includeInvisible && !chart.isPointInArea(position)) {\n    return [];\n  }\n  return axis === 'r' && !intersect\n    ? getNearestRadialItems(chart, position, axis, useFinalPosition)\n    : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\nfunction getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n  const items = [];\n  const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n  let intersectsItem = false;\n  evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index) => {\n    if (element[rangeMethod](position[axis], useFinalPosition)) {\n      items.push({element, datasetIndex, index});\n      intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n    }\n  });\n  if (intersect && !intersectsItem) {\n    return [];\n  }\n  return items;\n}\nvar Interaction = {\n  evaluateInteractionItems,\n  modes: {\n    index(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'x';\n      const includeInvisible = options.includeInvisible || false;\n      const items = options.intersect\n        ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible)\n        : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n      const elements = [];\n      if (!items.length) {\n        return [];\n      }\n      chart.getSortedVisibleDatasetMetas().forEach((meta) => {\n        const index = items[0].index;\n        const element = meta.data[index];\n        if (element && !element.skip) {\n          elements.push({element, datasetIndex: meta.index, index});\n        }\n      });\n      return elements;\n    },\n    dataset(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      let items = options.intersect\n        ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) :\n        getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n      if (items.length > 0) {\n        const datasetIndex = items[0].datasetIndex;\n        const data = chart.getDatasetMeta(datasetIndex).data;\n        items = [];\n        for (let i = 0; i < data.length; ++i) {\n          items.push({element: data[i], datasetIndex, index: i});\n        }\n      }\n      return items;\n    },\n    point(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n    },\n    nearest(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n    },\n    x(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n    },\n    y(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n    }\n  }\n};\n\nconst STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\nfunction filterByPosition(array, position) {\n  return array.filter(v => v.pos === position);\n}\nfunction filterDynamicPositionByAxis(array, axis) {\n  return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\nfunction sortByWeight(array, reverse) {\n  return array.sort((a, b) => {\n    const v0 = reverse ? b : a;\n    const v1 = reverse ? a : b;\n    return v0.weight === v1.weight ?\n      v0.index - v1.index :\n      v0.weight - v1.weight;\n  });\n}\nfunction wrapBoxes(boxes) {\n  const layoutBoxes = [];\n  let i, ilen, box, pos, stack, stackWeight;\n  for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n    box = boxes[i];\n    ({position: pos, options: {stack, stackWeight = 1}} = box);\n    layoutBoxes.push({\n      index: i,\n      box,\n      pos,\n      horizontal: box.isHorizontal(),\n      weight: box.weight,\n      stack: stack && (pos + stack),\n      stackWeight\n    });\n  }\n  return layoutBoxes;\n}\nfunction buildStacks(layouts) {\n  const stacks = {};\n  for (const wrap of layouts) {\n    const {stack, pos, stackWeight} = wrap;\n    if (!stack || !STATIC_POSITIONS.includes(pos)) {\n      continue;\n    }\n    const _stack = stacks[stack] || (stacks[stack] = {count: 0, placed: 0, weight: 0, size: 0});\n    _stack.count++;\n    _stack.weight += stackWeight;\n  }\n  return stacks;\n}\nfunction setLayoutDims(layouts, params) {\n  const stacks = buildStacks(layouts);\n  const {vBoxMaxWidth, hBoxMaxHeight} = params;\n  let i, ilen, layout;\n  for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n    layout = layouts[i];\n    const {fullSize} = layout.box;\n    const stack = stacks[layout.stack];\n    const factor = stack && layout.stackWeight / stack.weight;\n    if (layout.horizontal) {\n      layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n      layout.height = hBoxMaxHeight;\n    } else {\n      layout.width = vBoxMaxWidth;\n      layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n    }\n  }\n  return stacks;\n}\nfunction buildLayoutBoxes(boxes) {\n  const layoutBoxes = wrapBoxes(boxes);\n  const fullSize = sortByWeight(layoutBoxes.filter(wrap => wrap.box.fullSize), true);\n  const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n  const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n  const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n  const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n  const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n  const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n  return {\n    fullSize,\n    leftAndTop: left.concat(top),\n    rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n    chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n    vertical: left.concat(right).concat(centerVertical),\n    horizontal: top.concat(bottom).concat(centerHorizontal)\n  };\n}\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n  return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\nfunction updateMaxPadding(maxPadding, boxPadding) {\n  maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n  maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n  maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n  maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\nfunction updateDims(chartArea, params, layout, stacks) {\n  const {pos, box} = layout;\n  const maxPadding = chartArea.maxPadding;\n  if (!isObject(pos)) {\n    if (layout.size) {\n      chartArea[pos] -= layout.size;\n    }\n    const stack = stacks[layout.stack] || {size: 0, count: 1};\n    stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n    layout.size = stack.size / stack.count;\n    chartArea[pos] += layout.size;\n  }\n  if (box.getPadding) {\n    updateMaxPadding(maxPadding, box.getPadding());\n  }\n  const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n  const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n  const widthChanged = newWidth !== chartArea.w;\n  const heightChanged = newHeight !== chartArea.h;\n  chartArea.w = newWidth;\n  chartArea.h = newHeight;\n  return layout.horizontal\n    ? {same: widthChanged, other: heightChanged}\n    : {same: heightChanged, other: widthChanged};\n}\nfunction handleMaxPadding(chartArea) {\n  const maxPadding = chartArea.maxPadding;\n  function updatePos(pos) {\n    const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n    chartArea[pos] += change;\n    return change;\n  }\n  chartArea.y += updatePos('top');\n  chartArea.x += updatePos('left');\n  updatePos('right');\n  updatePos('bottom');\n}\nfunction getMargins(horizontal, chartArea) {\n  const maxPadding = chartArea.maxPadding;\n  function marginForPositions(positions) {\n    const margin = {left: 0, top: 0, right: 0, bottom: 0};\n    positions.forEach((pos) => {\n      margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n    });\n    return margin;\n  }\n  return horizontal\n    ? marginForPositions(['left', 'right'])\n    : marginForPositions(['top', 'bottom']);\n}\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n  const refitBoxes = [];\n  let i, ilen, layout, box, refit, changed;\n  for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n    layout = boxes[i];\n    box = layout.box;\n    box.update(\n      layout.width || chartArea.w,\n      layout.height || chartArea.h,\n      getMargins(layout.horizontal, chartArea)\n    );\n    const {same, other} = updateDims(chartArea, params, layout, stacks);\n    refit |= same && refitBoxes.length;\n    changed = changed || other;\n    if (!box.fullSize) {\n      refitBoxes.push(layout);\n    }\n  }\n  return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\nfunction setBoxDims(box, left, top, width, height) {\n  box.top = top;\n  box.left = left;\n  box.right = left + width;\n  box.bottom = top + height;\n  box.width = width;\n  box.height = height;\n}\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n  const userPadding = params.padding;\n  let {x, y} = chartArea;\n  for (const layout of boxes) {\n    const box = layout.box;\n    const stack = stacks[layout.stack] || {count: 1, placed: 0, weight: 1};\n    const weight = (layout.stackWeight / stack.weight) || 1;\n    if (layout.horizontal) {\n      const width = chartArea.w * weight;\n      const height = stack.size || box.height;\n      if (defined(stack.start)) {\n        y = stack.start;\n      }\n      if (box.fullSize) {\n        setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n      } else {\n        setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n      }\n      stack.start = y;\n      stack.placed += width;\n      y = box.bottom;\n    } else {\n      const height = chartArea.h * weight;\n      const width = stack.size || box.width;\n      if (defined(stack.start)) {\n        x = stack.start;\n      }\n      if (box.fullSize) {\n        setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n      } else {\n        setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n      }\n      stack.start = x;\n      stack.placed += height;\n      x = box.right;\n    }\n  }\n  chartArea.x = x;\n  chartArea.y = y;\n}\ndefaults.set('layout', {\n  autoPadding: true,\n  padding: {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  }\n});\nvar layouts = {\n  addBox(chart, item) {\n    if (!chart.boxes) {\n      chart.boxes = [];\n    }\n    item.fullSize = item.fullSize || false;\n    item.position = item.position || 'top';\n    item.weight = item.weight || 0;\n    item._layers = item._layers || function() {\n      return [{\n        z: 0,\n        draw(chartArea) {\n          item.draw(chartArea);\n        }\n      }];\n    };\n    chart.boxes.push(item);\n  },\n  removeBox(chart, layoutItem) {\n    const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n    if (index !== -1) {\n      chart.boxes.splice(index, 1);\n    }\n  },\n  configure(chart, item, options) {\n    item.fullSize = options.fullSize;\n    item.position = options.position;\n    item.weight = options.weight;\n  },\n  update(chart, width, height, minPadding) {\n    if (!chart) {\n      return;\n    }\n    const padding = toPadding(chart.options.layout.padding);\n    const availableWidth = Math.max(width - padding.width, 0);\n    const availableHeight = Math.max(height - padding.height, 0);\n    const boxes = buildLayoutBoxes(chart.boxes);\n    const verticalBoxes = boxes.vertical;\n    const horizontalBoxes = boxes.horizontal;\n    each(chart.boxes, box => {\n      if (typeof box.beforeLayout === 'function') {\n        box.beforeLayout();\n      }\n    });\n    const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) =>\n      wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n    const params = Object.freeze({\n      outerWidth: width,\n      outerHeight: height,\n      padding,\n      availableWidth,\n      availableHeight,\n      vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n      hBoxMaxHeight: availableHeight / 2\n    });\n    const maxPadding = Object.assign({}, padding);\n    updateMaxPadding(maxPadding, toPadding(minPadding));\n    const chartArea = Object.assign({\n      maxPadding,\n      w: availableWidth,\n      h: availableHeight,\n      x: padding.left,\n      y: padding.top\n    }, padding);\n    const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n    fitBoxes(boxes.fullSize, chartArea, params, stacks);\n    fitBoxes(verticalBoxes, chartArea, params, stacks);\n    if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n      fitBoxes(verticalBoxes, chartArea, params, stacks);\n    }\n    handleMaxPadding(chartArea);\n    placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n    chartArea.x += chartArea.w;\n    chartArea.y += chartArea.h;\n    placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n    chart.chartArea = {\n      left: chartArea.left,\n      top: chartArea.top,\n      right: chartArea.left + chartArea.w,\n      bottom: chartArea.top + chartArea.h,\n      height: chartArea.h,\n      width: chartArea.w,\n    };\n    each(boxes.chartArea, (layout) => {\n      const box = layout.box;\n      Object.assign(box, chart.chartArea);\n      box.update(chartArea.w, chartArea.h, {left: 0, top: 0, right: 0, bottom: 0});\n    });\n  }\n};\n\nclass BasePlatform {\n  acquireContext(canvas, aspectRatio) {}\n  releaseContext(context) {\n    return false;\n  }\n  addEventListener(chart, type, listener) {}\n  removeEventListener(chart, type, listener) {}\n  getDevicePixelRatio() {\n    return 1;\n  }\n  getMaximumSize(element, width, height, aspectRatio) {\n    width = Math.max(0, width || element.width);\n    height = height || element.height;\n    return {\n      width,\n      height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n    };\n  }\n  isAttached(canvas) {\n    return true;\n  }\n  updateConfig(config) {\n  }\n}\n\nclass BasicPlatform extends BasePlatform {\n  acquireContext(item) {\n    return item && item.getContext && item.getContext('2d') || null;\n  }\n  updateConfig(config) {\n    config.options.animation = false;\n  }\n}\n\nconst EXPANDO_KEY = '$chartjs';\nconst EVENT_TYPES = {\n  touchstart: 'mousedown',\n  touchmove: 'mousemove',\n  touchend: 'mouseup',\n  pointerenter: 'mouseenter',\n  pointerdown: 'mousedown',\n  pointermove: 'mousemove',\n  pointerup: 'mouseup',\n  pointerleave: 'mouseout',\n  pointerout: 'mouseout'\n};\nconst isNullOrEmpty = value => value === null || value === '';\nfunction initCanvas(canvas, aspectRatio) {\n  const style = canvas.style;\n  const renderHeight = canvas.getAttribute('height');\n  const renderWidth = canvas.getAttribute('width');\n  canvas[EXPANDO_KEY] = {\n    initial: {\n      height: renderHeight,\n      width: renderWidth,\n      style: {\n        display: style.display,\n        height: style.height,\n        width: style.width\n      }\n    }\n  };\n  style.display = style.display || 'block';\n  style.boxSizing = style.boxSizing || 'border-box';\n  if (isNullOrEmpty(renderWidth)) {\n    const displayWidth = readUsedSize(canvas, 'width');\n    if (displayWidth !== undefined) {\n      canvas.width = displayWidth;\n    }\n  }\n  if (isNullOrEmpty(renderHeight)) {\n    if (canvas.style.height === '') {\n      canvas.height = canvas.width / (aspectRatio || 2);\n    } else {\n      const displayHeight = readUsedSize(canvas, 'height');\n      if (displayHeight !== undefined) {\n        canvas.height = displayHeight;\n      }\n    }\n  }\n  return canvas;\n}\nconst eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\nfunction addListener(node, type, listener) {\n  node.addEventListener(type, listener, eventListenerOptions);\n}\nfunction removeListener(chart, type, listener) {\n  chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n}\nfunction fromNativeEvent(event, chart) {\n  const type = EVENT_TYPES[event.type] || event.type;\n  const {x, y} = getRelativePosition(event, chart);\n  return {\n    type,\n    chart,\n    native: event,\n    x: x !== undefined ? x : null,\n    y: y !== undefined ? y : null,\n  };\n}\nfunction nodeListContains(nodeList, canvas) {\n  for (const node of nodeList) {\n    if (node === canvas || node.contains(canvas)) {\n      return true;\n    }\n  }\n}\nfunction createAttachObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const observer = new MutationObserver(entries => {\n    let trigger = false;\n    for (const entry of entries) {\n      trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n      trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n    }\n    if (trigger) {\n      listener();\n    }\n  });\n  observer.observe(document, {childList: true, subtree: true});\n  return observer;\n}\nfunction createDetachObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const observer = new MutationObserver(entries => {\n    let trigger = false;\n    for (const entry of entries) {\n      trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n      trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n    }\n    if (trigger) {\n      listener();\n    }\n  });\n  observer.observe(document, {childList: true, subtree: true});\n  return observer;\n}\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\nfunction onWindowResize() {\n  const dpr = window.devicePixelRatio;\n  if (dpr === oldDevicePixelRatio) {\n    return;\n  }\n  oldDevicePixelRatio = dpr;\n  drpListeningCharts.forEach((resize, chart) => {\n    if (chart.currentDevicePixelRatio !== dpr) {\n      resize();\n    }\n  });\n}\nfunction listenDevicePixelRatioChanges(chart, resize) {\n  if (!drpListeningCharts.size) {\n    window.addEventListener('resize', onWindowResize);\n  }\n  drpListeningCharts.set(chart, resize);\n}\nfunction unlistenDevicePixelRatioChanges(chart) {\n  drpListeningCharts.delete(chart);\n  if (!drpListeningCharts.size) {\n    window.removeEventListener('resize', onWindowResize);\n  }\n}\nfunction createResizeObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const container = canvas && _getParentNode(canvas);\n  if (!container) {\n    return;\n  }\n  const resize = throttled((width, height) => {\n    const w = container.clientWidth;\n    listener(width, height);\n    if (w < container.clientWidth) {\n      listener();\n    }\n  }, window);\n  const observer = new ResizeObserver(entries => {\n    const entry = entries[0];\n    const width = entry.contentRect.width;\n    const height = entry.contentRect.height;\n    if (width === 0 && height === 0) {\n      return;\n    }\n    resize(width, height);\n  });\n  observer.observe(container);\n  listenDevicePixelRatioChanges(chart, resize);\n  return observer;\n}\nfunction releaseObserver(chart, type, observer) {\n  if (observer) {\n    observer.disconnect();\n  }\n  if (type === 'resize') {\n    unlistenDevicePixelRatioChanges(chart);\n  }\n}\nfunction createProxyAndListen(chart, type, listener) {\n  const canvas = chart.canvas;\n  const proxy = throttled((event) => {\n    if (chart.ctx !== null) {\n      listener(fromNativeEvent(event, chart));\n    }\n  }, chart, (args) => {\n    const event = args[0];\n    return [event, event.offsetX, event.offsetY];\n  });\n  addListener(canvas, type, proxy);\n  return proxy;\n}\nclass DomPlatform extends BasePlatform {\n  acquireContext(canvas, aspectRatio) {\n    const context = canvas && canvas.getContext && canvas.getContext('2d');\n    if (context && context.canvas === canvas) {\n      initCanvas(canvas, aspectRatio);\n      return context;\n    }\n    return null;\n  }\n  releaseContext(context) {\n    const canvas = context.canvas;\n    if (!canvas[EXPANDO_KEY]) {\n      return false;\n    }\n    const initial = canvas[EXPANDO_KEY].initial;\n    ['height', 'width'].forEach((prop) => {\n      const value = initial[prop];\n      if (isNullOrUndef(value)) {\n        canvas.removeAttribute(prop);\n      } else {\n        canvas.setAttribute(prop, value);\n      }\n    });\n    const style = initial.style || {};\n    Object.keys(style).forEach((key) => {\n      canvas.style[key] = style[key];\n    });\n    canvas.width = canvas.width;\n    delete canvas[EXPANDO_KEY];\n    return true;\n  }\n  addEventListener(chart, type, listener) {\n    this.removeEventListener(chart, type);\n    const proxies = chart.$proxies || (chart.$proxies = {});\n    const handlers = {\n      attach: createAttachObserver,\n      detach: createDetachObserver,\n      resize: createResizeObserver\n    };\n    const handler = handlers[type] || createProxyAndListen;\n    proxies[type] = handler(chart, type, listener);\n  }\n  removeEventListener(chart, type) {\n    const proxies = chart.$proxies || (chart.$proxies = {});\n    const proxy = proxies[type];\n    if (!proxy) {\n      return;\n    }\n    const handlers = {\n      attach: releaseObserver,\n      detach: releaseObserver,\n      resize: releaseObserver\n    };\n    const handler = handlers[type] || removeListener;\n    handler(chart, type, proxy);\n    proxies[type] = undefined;\n  }\n  getDevicePixelRatio() {\n    return window.devicePixelRatio;\n  }\n  getMaximumSize(canvas, width, height, aspectRatio) {\n    return getMaximumSize(canvas, width, height, aspectRatio);\n  }\n  isAttached(canvas) {\n    const container = _getParentNode(canvas);\n    return !!(container && container.isConnected);\n  }\n}\n\nfunction _detectPlatform(canvas) {\n  if (!_isDomSupported() || (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas)) {\n    return BasicPlatform;\n  }\n  return DomPlatform;\n}\n\nclass PluginService {\n  constructor() {\n    this._init = [];\n  }\n  notify(chart, hook, args, filter) {\n    if (hook === 'beforeInit') {\n      this._init = this._createDescriptors(chart, true);\n      this._notify(this._init, chart, 'install');\n    }\n    const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n    const result = this._notify(descriptors, chart, hook, args);\n    if (hook === 'afterDestroy') {\n      this._notify(descriptors, chart, 'stop');\n      this._notify(this._init, chart, 'uninstall');\n    }\n    return result;\n  }\n  _notify(descriptors, chart, hook, args) {\n    args = args || {};\n    for (const descriptor of descriptors) {\n      const plugin = descriptor.plugin;\n      const method = plugin[hook];\n      const params = [chart, args, descriptor.options];\n      if (callback(method, params, plugin) === false && args.cancelable) {\n        return false;\n      }\n    }\n    return true;\n  }\n  invalidate() {\n    if (!isNullOrUndef(this._cache)) {\n      this._oldCache = this._cache;\n      this._cache = undefined;\n    }\n  }\n  _descriptors(chart) {\n    if (this._cache) {\n      return this._cache;\n    }\n    const descriptors = this._cache = this._createDescriptors(chart);\n    this._notifyStateChanges(chart);\n    return descriptors;\n  }\n  _createDescriptors(chart, all) {\n    const config = chart && chart.config;\n    const options = valueOrDefault(config.options && config.options.plugins, {});\n    const plugins = allPlugins(config);\n    return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n  }\n  _notifyStateChanges(chart) {\n    const previousDescriptors = this._oldCache || [];\n    const descriptors = this._cache;\n    const diff = (a, b) => a.filter(x => !b.some(y => x.plugin.id === y.plugin.id));\n    this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n    this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n  }\n}\nfunction allPlugins(config) {\n  const localIds = {};\n  const plugins = [];\n  const keys = Object.keys(registry.plugins.items);\n  for (let i = 0; i < keys.length; i++) {\n    plugins.push(registry.getPlugin(keys[i]));\n  }\n  const local = config.plugins || [];\n  for (let i = 0; i < local.length; i++) {\n    const plugin = local[i];\n    if (plugins.indexOf(plugin) === -1) {\n      plugins.push(plugin);\n      localIds[plugin.id] = true;\n    }\n  }\n  return {plugins, localIds};\n}\nfunction getOpts(options, all) {\n  if (!all && options === false) {\n    return null;\n  }\n  if (options === true) {\n    return {};\n  }\n  return options;\n}\nfunction createDescriptors(chart, {plugins, localIds}, options, all) {\n  const result = [];\n  const context = chart.getContext();\n  for (const plugin of plugins) {\n    const id = plugin.id;\n    const opts = getOpts(options[id], all);\n    if (opts === null) {\n      continue;\n    }\n    result.push({\n      plugin,\n      options: pluginOpts(chart.config, {plugin, local: localIds[id]}, opts, context)\n    });\n  }\n  return result;\n}\nfunction pluginOpts(config, {plugin, local}, opts, context) {\n  const keys = config.pluginScopeKeys(plugin);\n  const scopes = config.getOptionScopes(opts, keys);\n  if (local && plugin.defaults) {\n    scopes.push(plugin.defaults);\n  }\n  return config.createResolver(scopes, context, [''], {\n    scriptable: false,\n    indexable: false,\n    allKeys: true\n  });\n}\n\nfunction getIndexAxis(type, options) {\n  const datasetDefaults = defaults.datasets[type] || {};\n  const datasetOptions = (options.datasets || {})[type] || {};\n  return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n  let axis = id;\n  if (id === '_index_') {\n    axis = indexAxis;\n  } else if (id === '_value_') {\n    axis = indexAxis === 'x' ? 'y' : 'x';\n  }\n  return axis;\n}\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n  return axis === indexAxis ? '_index_' : '_value_';\n}\nfunction axisFromPosition(position) {\n  if (position === 'top' || position === 'bottom') {\n    return 'x';\n  }\n  if (position === 'left' || position === 'right') {\n    return 'y';\n  }\n}\nfunction determineAxis(id, scaleOptions) {\n  if (id === 'x' || id === 'y') {\n    return id;\n  }\n  return scaleOptions.axis || axisFromPosition(scaleOptions.position) || id.charAt(0).toLowerCase();\n}\nfunction mergeScaleConfig(config, options) {\n  const chartDefaults = overrides[config.type] || {scales: {}};\n  const configScales = options.scales || {};\n  const chartIndexAxis = getIndexAxis(config.type, options);\n  const firstIDs = Object.create(null);\n  const scales = Object.create(null);\n  Object.keys(configScales).forEach(id => {\n    const scaleConf = configScales[id];\n    if (!isObject(scaleConf)) {\n      return console.error(`Invalid scale configuration for scale: ${id}`);\n    }\n    if (scaleConf._proxy) {\n      return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n    }\n    const axis = determineAxis(id, scaleConf);\n    const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n    const defaultScaleOptions = chartDefaults.scales || {};\n    firstIDs[axis] = firstIDs[axis] || id;\n    scales[id] = mergeIf(Object.create(null), [{axis}, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n  });\n  config.data.datasets.forEach(dataset => {\n    const type = dataset.type || config.type;\n    const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n    const datasetDefaults = overrides[type] || {};\n    const defaultScaleOptions = datasetDefaults.scales || {};\n    Object.keys(defaultScaleOptions).forEach(defaultID => {\n      const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n      const id = dataset[axis + 'AxisID'] || firstIDs[axis] || axis;\n      scales[id] = scales[id] || Object.create(null);\n      mergeIf(scales[id], [{axis}, configScales[id], defaultScaleOptions[defaultID]]);\n    });\n  });\n  Object.keys(scales).forEach(key => {\n    const scale = scales[key];\n    mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n  });\n  return scales;\n}\nfunction initOptions(config) {\n  const options = config.options || (config.options = {});\n  options.plugins = valueOrDefault(options.plugins, {});\n  options.scales = mergeScaleConfig(config, options);\n}\nfunction initData(data) {\n  data = data || {};\n  data.datasets = data.datasets || [];\n  data.labels = data.labels || [];\n  return data;\n}\nfunction initConfig(config) {\n  config = config || {};\n  config.data = initData(config.data);\n  initOptions(config);\n  return config;\n}\nconst keyCache = new Map();\nconst keysCached = new Set();\nfunction cachedKeys(cacheKey, generate) {\n  let keys = keyCache.get(cacheKey);\n  if (!keys) {\n    keys = generate();\n    keyCache.set(cacheKey, keys);\n    keysCached.add(keys);\n  }\n  return keys;\n}\nconst addIfFound = (set, obj, key) => {\n  const opts = resolveObjectKey(obj, key);\n  if (opts !== undefined) {\n    set.add(opts);\n  }\n};\nclass Config {\n  constructor(config) {\n    this._config = initConfig(config);\n    this._scopeCache = new Map();\n    this._resolverCache = new Map();\n  }\n  get platform() {\n    return this._config.platform;\n  }\n  get type() {\n    return this._config.type;\n  }\n  set type(type) {\n    this._config.type = type;\n  }\n  get data() {\n    return this._config.data;\n  }\n  set data(data) {\n    this._config.data = initData(data);\n  }\n  get options() {\n    return this._config.options;\n  }\n  set options(options) {\n    this._config.options = options;\n  }\n  get plugins() {\n    return this._config.plugins;\n  }\n  update() {\n    const config = this._config;\n    this.clearCache();\n    initOptions(config);\n  }\n  clearCache() {\n    this._scopeCache.clear();\n    this._resolverCache.clear();\n  }\n  datasetScopeKeys(datasetType) {\n    return cachedKeys(datasetType,\n      () => [[\n        `datasets.${datasetType}`,\n        ''\n      ]]);\n  }\n  datasetAnimationScopeKeys(datasetType, transition) {\n    return cachedKeys(`${datasetType}.transition.${transition}`,\n      () => [\n        [\n          `datasets.${datasetType}.transitions.${transition}`,\n          `transitions.${transition}`,\n        ],\n        [\n          `datasets.${datasetType}`,\n          ''\n        ]\n      ]);\n  }\n  datasetElementScopeKeys(datasetType, elementType) {\n    return cachedKeys(`${datasetType}-${elementType}`,\n      () => [[\n        `datasets.${datasetType}.elements.${elementType}`,\n        `datasets.${datasetType}`,\n        `elements.${elementType}`,\n        ''\n      ]]);\n  }\n  pluginScopeKeys(plugin) {\n    const id = plugin.id;\n    const type = this.type;\n    return cachedKeys(`${type}-plugin-${id}`,\n      () => [[\n        `plugins.${id}`,\n        ...plugin.additionalOptionScopes || [],\n      ]]);\n  }\n  _cachedScopes(mainScope, resetCache) {\n    const _scopeCache = this._scopeCache;\n    let cache = _scopeCache.get(mainScope);\n    if (!cache || resetCache) {\n      cache = new Map();\n      _scopeCache.set(mainScope, cache);\n    }\n    return cache;\n  }\n  getOptionScopes(mainScope, keyLists, resetCache) {\n    const {options, type} = this;\n    const cache = this._cachedScopes(mainScope, resetCache);\n    const cached = cache.get(keyLists);\n    if (cached) {\n      return cached;\n    }\n    const scopes = new Set();\n    keyLists.forEach(keys => {\n      if (mainScope) {\n        scopes.add(mainScope);\n        keys.forEach(key => addIfFound(scopes, mainScope, key));\n      }\n      keys.forEach(key => addIfFound(scopes, options, key));\n      keys.forEach(key => addIfFound(scopes, overrides[type] || {}, key));\n      keys.forEach(key => addIfFound(scopes, defaults, key));\n      keys.forEach(key => addIfFound(scopes, descriptors, key));\n    });\n    const array = Array.from(scopes);\n    if (array.length === 0) {\n      array.push(Object.create(null));\n    }\n    if (keysCached.has(keyLists)) {\n      cache.set(keyLists, array);\n    }\n    return array;\n  }\n  chartOptionScopes() {\n    const {options, type} = this;\n    return [\n      options,\n      overrides[type] || {},\n      defaults.datasets[type] || {},\n      {type},\n      defaults,\n      descriptors\n    ];\n  }\n  resolveNamedOptions(scopes, names, context, prefixes = ['']) {\n    const result = {$shared: true};\n    const {resolver, subPrefixes} = getResolver(this._resolverCache, scopes, prefixes);\n    let options = resolver;\n    if (needContext(resolver, names)) {\n      result.$shared = false;\n      context = isFunction(context) ? context() : context;\n      const subResolver = this.createResolver(scopes, context, subPrefixes);\n      options = _attachContext(resolver, context, subResolver);\n    }\n    for (const prop of names) {\n      result[prop] = options[prop];\n    }\n    return result;\n  }\n  createResolver(scopes, context, prefixes = [''], descriptorDefaults) {\n    const {resolver} = getResolver(this._resolverCache, scopes, prefixes);\n    return isObject(context)\n      ? _attachContext(resolver, context, undefined, descriptorDefaults)\n      : resolver;\n  }\n}\nfunction getResolver(resolverCache, scopes, prefixes) {\n  let cache = resolverCache.get(scopes);\n  if (!cache) {\n    cache = new Map();\n    resolverCache.set(scopes, cache);\n  }\n  const cacheKey = prefixes.join();\n  let cached = cache.get(cacheKey);\n  if (!cached) {\n    const resolver = _createResolver(scopes, prefixes);\n    cached = {\n      resolver,\n      subPrefixes: prefixes.filter(p => !p.toLowerCase().includes('hover'))\n    };\n    cache.set(cacheKey, cached);\n  }\n  return cached;\n}\nconst hasFunction = value => isObject(value)\n  && Object.getOwnPropertyNames(value).reduce((acc, key) => acc || isFunction(value[key]), false);\nfunction needContext(proxy, names) {\n  const {isScriptable, isIndexable} = _descriptors(proxy);\n  for (const prop of names) {\n    const scriptable = isScriptable(prop);\n    const indexable = isIndexable(prop);\n    const value = (indexable || scriptable) && proxy[prop];\n    if ((scriptable && (isFunction(value) || hasFunction(value)))\n      || (indexable && isArray(value))) {\n      return true;\n    }\n  }\n  return false;\n}\n\nvar version = \"3.9.1\";\n\nconst KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\nfunction positionIsHorizontal(position, axis) {\n  return position === 'top' || position === 'bottom' || (KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x');\n}\nfunction compare2Level(l1, l2) {\n  return function(a, b) {\n    return a[l1] === b[l1]\n      ? a[l2] - b[l2]\n      : a[l1] - b[l1];\n  };\n}\nfunction onAnimationsComplete(context) {\n  const chart = context.chart;\n  const animationOptions = chart.options.animation;\n  chart.notifyPlugins('afterRender');\n  callback(animationOptions && animationOptions.onComplete, [context], chart);\n}\nfunction onAnimationProgress(context) {\n  const chart = context.chart;\n  const animationOptions = chart.options.animation;\n  callback(animationOptions && animationOptions.onProgress, [context], chart);\n}\nfunction getCanvas(item) {\n  if (_isDomSupported() && typeof item === 'string') {\n    item = document.getElementById(item);\n  } else if (item && item.length) {\n    item = item[0];\n  }\n  if (item && item.canvas) {\n    item = item.canvas;\n  }\n  return item;\n}\nconst instances = {};\nconst getChart = (key) => {\n  const canvas = getCanvas(key);\n  return Object.values(instances).filter((c) => c.canvas === canvas).pop();\n};\nfunction moveNumericKeys(obj, start, move) {\n  const keys = Object.keys(obj);\n  for (const key of keys) {\n    const intKey = +key;\n    if (intKey >= start) {\n      const value = obj[key];\n      delete obj[key];\n      if (move > 0 || intKey > start) {\n        obj[intKey + move] = value;\n      }\n    }\n  }\n}\nfunction determineLastEvent(e, lastEvent, inChartArea, isClick) {\n  if (!inChartArea || e.type === 'mouseout') {\n    return null;\n  }\n  if (isClick) {\n    return lastEvent;\n  }\n  return e;\n}\nclass Chart {\n  constructor(item, userConfig) {\n    const config = this.config = new Config(userConfig);\n    const initialCanvas = getCanvas(item);\n    const existingChart = getChart(initialCanvas);\n    if (existingChart) {\n      throw new Error(\n        'Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' +\n\t\t\t\t' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.'\n      );\n    }\n    const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n    this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n    this.platform.updateConfig(config);\n    const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n    const canvas = context && context.canvas;\n    const height = canvas && canvas.height;\n    const width = canvas && canvas.width;\n    this.id = uid();\n    this.ctx = context;\n    this.canvas = canvas;\n    this.width = width;\n    this.height = height;\n    this._options = options;\n    this._aspectRatio = this.aspectRatio;\n    this._layers = [];\n    this._metasets = [];\n    this._stacks = undefined;\n    this.boxes = [];\n    this.currentDevicePixelRatio = undefined;\n    this.chartArea = undefined;\n    this._active = [];\n    this._lastEvent = undefined;\n    this._listeners = {};\n    this._responsiveListeners = undefined;\n    this._sortedMetasets = [];\n    this.scales = {};\n    this._plugins = new PluginService();\n    this.$proxies = {};\n    this._hiddenIndices = {};\n    this.attached = false;\n    this._animationsDisabled = undefined;\n    this.$context = undefined;\n    this._doResize = debounce(mode => this.update(mode), options.resizeDelay || 0);\n    this._dataChanges = [];\n    instances[this.id] = this;\n    if (!context || !canvas) {\n      console.error(\"Failed to create chart: can't acquire context from the given item\");\n      return;\n    }\n    animator.listen(this, 'complete', onAnimationsComplete);\n    animator.listen(this, 'progress', onAnimationProgress);\n    this._initialize();\n    if (this.attached) {\n      this.update();\n    }\n  }\n  get aspectRatio() {\n    const {options: {aspectRatio, maintainAspectRatio}, width, height, _aspectRatio} = this;\n    if (!isNullOrUndef(aspectRatio)) {\n      return aspectRatio;\n    }\n    if (maintainAspectRatio && _aspectRatio) {\n      return _aspectRatio;\n    }\n    return height ? width / height : null;\n  }\n  get data() {\n    return this.config.data;\n  }\n  set data(data) {\n    this.config.data = data;\n  }\n  get options() {\n    return this._options;\n  }\n  set options(options) {\n    this.config.options = options;\n  }\n  _initialize() {\n    this.notifyPlugins('beforeInit');\n    if (this.options.responsive) {\n      this.resize();\n    } else {\n      retinaScale(this, this.options.devicePixelRatio);\n    }\n    this.bindEvents();\n    this.notifyPlugins('afterInit');\n    return this;\n  }\n  clear() {\n    clearCanvas(this.canvas, this.ctx);\n    return this;\n  }\n  stop() {\n    animator.stop(this);\n    return this;\n  }\n  resize(width, height) {\n    if (!animator.running(this)) {\n      this._resize(width, height);\n    } else {\n      this._resizeBeforeDraw = {width, height};\n    }\n  }\n  _resize(width, height) {\n    const options = this.options;\n    const canvas = this.canvas;\n    const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n    const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n    const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n    const mode = this.width ? 'resize' : 'attach';\n    this.width = newSize.width;\n    this.height = newSize.height;\n    this._aspectRatio = this.aspectRatio;\n    if (!retinaScale(this, newRatio, true)) {\n      return;\n    }\n    this.notifyPlugins('resize', {size: newSize});\n    callback(options.onResize, [this, newSize], this);\n    if (this.attached) {\n      if (this._doResize(mode)) {\n        this.render();\n      }\n    }\n  }\n  ensureScalesHaveIDs() {\n    const options = this.options;\n    const scalesOptions = options.scales || {};\n    each(scalesOptions, (axisOptions, axisID) => {\n      axisOptions.id = axisID;\n    });\n  }\n  buildOrUpdateScales() {\n    const options = this.options;\n    const scaleOpts = options.scales;\n    const scales = this.scales;\n    const updated = Object.keys(scales).reduce((obj, id) => {\n      obj[id] = false;\n      return obj;\n    }, {});\n    let items = [];\n    if (scaleOpts) {\n      items = items.concat(\n        Object.keys(scaleOpts).map((id) => {\n          const scaleOptions = scaleOpts[id];\n          const axis = determineAxis(id, scaleOptions);\n          const isRadial = axis === 'r';\n          const isHorizontal = axis === 'x';\n          return {\n            options: scaleOptions,\n            dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n            dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n          };\n        })\n      );\n    }\n    each(items, (item) => {\n      const scaleOptions = item.options;\n      const id = scaleOptions.id;\n      const axis = determineAxis(id, scaleOptions);\n      const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n      if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n        scaleOptions.position = item.dposition;\n      }\n      updated[id] = true;\n      let scale = null;\n      if (id in scales && scales[id].type === scaleType) {\n        scale = scales[id];\n      } else {\n        const scaleClass = registry.getScale(scaleType);\n        scale = new scaleClass({\n          id,\n          type: scaleType,\n          ctx: this.ctx,\n          chart: this\n        });\n        scales[scale.id] = scale;\n      }\n      scale.init(scaleOptions, options);\n    });\n    each(updated, (hasUpdated, id) => {\n      if (!hasUpdated) {\n        delete scales[id];\n      }\n    });\n    each(scales, (scale) => {\n      layouts.configure(this, scale, scale.options);\n      layouts.addBox(this, scale);\n    });\n  }\n  _updateMetasets() {\n    const metasets = this._metasets;\n    const numData = this.data.datasets.length;\n    const numMeta = metasets.length;\n    metasets.sort((a, b) => a.index - b.index);\n    if (numMeta > numData) {\n      for (let i = numData; i < numMeta; ++i) {\n        this._destroyDatasetMeta(i);\n      }\n      metasets.splice(numData, numMeta - numData);\n    }\n    this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n  }\n  _removeUnreferencedMetasets() {\n    const {_metasets: metasets, data: {datasets}} = this;\n    if (metasets.length > datasets.length) {\n      delete this._stacks;\n    }\n    metasets.forEach((meta, index) => {\n      if (datasets.filter(x => x === meta._dataset).length === 0) {\n        this._destroyDatasetMeta(index);\n      }\n    });\n  }\n  buildOrUpdateControllers() {\n    const newControllers = [];\n    const datasets = this.data.datasets;\n    let i, ilen;\n    this._removeUnreferencedMetasets();\n    for (i = 0, ilen = datasets.length; i < ilen; i++) {\n      const dataset = datasets[i];\n      let meta = this.getDatasetMeta(i);\n      const type = dataset.type || this.config.type;\n      if (meta.type && meta.type !== type) {\n        this._destroyDatasetMeta(i);\n        meta = this.getDatasetMeta(i);\n      }\n      meta.type = type;\n      meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n      meta.order = dataset.order || 0;\n      meta.index = i;\n      meta.label = '' + dataset.label;\n      meta.visible = this.isDatasetVisible(i);\n      if (meta.controller) {\n        meta.controller.updateIndex(i);\n        meta.controller.linkScales();\n      } else {\n        const ControllerClass = registry.getController(type);\n        const {datasetElementType, dataElementType} = defaults.datasets[type];\n        Object.assign(ControllerClass.prototype, {\n          dataElementType: registry.getElement(dataElementType),\n          datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n        });\n        meta.controller = new ControllerClass(this, i);\n        newControllers.push(meta.controller);\n      }\n    }\n    this._updateMetasets();\n    return newControllers;\n  }\n  _resetElements() {\n    each(this.data.datasets, (dataset, datasetIndex) => {\n      this.getDatasetMeta(datasetIndex).controller.reset();\n    }, this);\n  }\n  reset() {\n    this._resetElements();\n    this.notifyPlugins('reset');\n  }\n  update(mode) {\n    const config = this.config;\n    config.update();\n    const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n    const animsDisabled = this._animationsDisabled = !options.animation;\n    this._updateScales();\n    this._checkEventBindings();\n    this._updateHiddenIndices();\n    this._plugins.invalidate();\n    if (this.notifyPlugins('beforeUpdate', {mode, cancelable: true}) === false) {\n      return;\n    }\n    const newControllers = this.buildOrUpdateControllers();\n    this.notifyPlugins('beforeElementsUpdate');\n    let minPadding = 0;\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) {\n      const {controller} = this.getDatasetMeta(i);\n      const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n      controller.buildOrUpdateElements(reset);\n      minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n    }\n    minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n    this._updateLayout(minPadding);\n    if (!animsDisabled) {\n      each(newControllers, (controller) => {\n        controller.reset();\n      });\n    }\n    this._updateDatasets(mode);\n    this.notifyPlugins('afterUpdate', {mode});\n    this._layers.sort(compare2Level('z', '_idx'));\n    const {_active, _lastEvent} = this;\n    if (_lastEvent) {\n      this._eventHandler(_lastEvent, true);\n    } else if (_active.length) {\n      this._updateHoverStyles(_active, _active, true);\n    }\n    this.render();\n  }\n  _updateScales() {\n    each(this.scales, (scale) => {\n      layouts.removeBox(this, scale);\n    });\n    this.ensureScalesHaveIDs();\n    this.buildOrUpdateScales();\n  }\n  _checkEventBindings() {\n    const options = this.options;\n    const existingEvents = new Set(Object.keys(this._listeners));\n    const newEvents = new Set(options.events);\n    if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n      this.unbindEvents();\n      this.bindEvents();\n    }\n  }\n  _updateHiddenIndices() {\n    const {_hiddenIndices} = this;\n    const changes = this._getUniformDataChanges() || [];\n    for (const {method, start, count} of changes) {\n      const move = method === '_removeElements' ? -count : count;\n      moveNumericKeys(_hiddenIndices, start, move);\n    }\n  }\n  _getUniformDataChanges() {\n    const _dataChanges = this._dataChanges;\n    if (!_dataChanges || !_dataChanges.length) {\n      return;\n    }\n    this._dataChanges = [];\n    const datasetCount = this.data.datasets.length;\n    const makeSet = (idx) => new Set(\n      _dataChanges\n        .filter(c => c[0] === idx)\n        .map((c, i) => i + ',' + c.splice(1).join(','))\n    );\n    const changeSet = makeSet(0);\n    for (let i = 1; i < datasetCount; i++) {\n      if (!setsEqual(changeSet, makeSet(i))) {\n        return;\n      }\n    }\n    return Array.from(changeSet)\n      .map(c => c.split(','))\n      .map(a => ({method: a[1], start: +a[2], count: +a[3]}));\n  }\n  _updateLayout(minPadding) {\n    if (this.notifyPlugins('beforeLayout', {cancelable: true}) === false) {\n      return;\n    }\n    layouts.update(this, this.width, this.height, minPadding);\n    const area = this.chartArea;\n    const noArea = area.width <= 0 || area.height <= 0;\n    this._layers = [];\n    each(this.boxes, (box) => {\n      if (noArea && box.position === 'chartArea') {\n        return;\n      }\n      if (box.configure) {\n        box.configure();\n      }\n      this._layers.push(...box._layers());\n    }, this);\n    this._layers.forEach((item, index) => {\n      item._idx = index;\n    });\n    this.notifyPlugins('afterLayout');\n  }\n  _updateDatasets(mode) {\n    if (this.notifyPlugins('beforeDatasetsUpdate', {mode, cancelable: true}) === false) {\n      return;\n    }\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this.getDatasetMeta(i).controller.configure();\n    }\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this._updateDataset(i, isFunction(mode) ? mode({datasetIndex: i}) : mode);\n    }\n    this.notifyPlugins('afterDatasetsUpdate', {mode});\n  }\n  _updateDataset(index, mode) {\n    const meta = this.getDatasetMeta(index);\n    const args = {meta, index, mode, cancelable: true};\n    if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n      return;\n    }\n    meta.controller._update(mode);\n    args.cancelable = false;\n    this.notifyPlugins('afterDatasetUpdate', args);\n  }\n  render() {\n    if (this.notifyPlugins('beforeRender', {cancelable: true}) === false) {\n      return;\n    }\n    if (animator.has(this)) {\n      if (this.attached && !animator.running(this)) {\n        animator.start(this);\n      }\n    } else {\n      this.draw();\n      onAnimationsComplete({chart: this});\n    }\n  }\n  draw() {\n    let i;\n    if (this._resizeBeforeDraw) {\n      const {width, height} = this._resizeBeforeDraw;\n      this._resize(width, height);\n      this._resizeBeforeDraw = null;\n    }\n    this.clear();\n    if (this.width <= 0 || this.height <= 0) {\n      return;\n    }\n    if (this.notifyPlugins('beforeDraw', {cancelable: true}) === false) {\n      return;\n    }\n    const layers = this._layers;\n    for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n      layers[i].draw(this.chartArea);\n    }\n    this._drawDatasets();\n    for (; i < layers.length; ++i) {\n      layers[i].draw(this.chartArea);\n    }\n    this.notifyPlugins('afterDraw');\n  }\n  _getSortedDatasetMetas(filterVisible) {\n    const metasets = this._sortedMetasets;\n    const result = [];\n    let i, ilen;\n    for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n      const meta = metasets[i];\n      if (!filterVisible || meta.visible) {\n        result.push(meta);\n      }\n    }\n    return result;\n  }\n  getSortedVisibleDatasetMetas() {\n    return this._getSortedDatasetMetas(true);\n  }\n  _drawDatasets() {\n    if (this.notifyPlugins('beforeDatasetsDraw', {cancelable: true}) === false) {\n      return;\n    }\n    const metasets = this.getSortedVisibleDatasetMetas();\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      this._drawDataset(metasets[i]);\n    }\n    this.notifyPlugins('afterDatasetsDraw');\n  }\n  _drawDataset(meta) {\n    const ctx = this.ctx;\n    const clip = meta._clip;\n    const useClip = !clip.disabled;\n    const area = this.chartArea;\n    const args = {\n      meta,\n      index: meta.index,\n      cancelable: true\n    };\n    if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n      return;\n    }\n    if (useClip) {\n      clipArea(ctx, {\n        left: clip.left === false ? 0 : area.left - clip.left,\n        right: clip.right === false ? this.width : area.right + clip.right,\n        top: clip.top === false ? 0 : area.top - clip.top,\n        bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom\n      });\n    }\n    meta.controller.draw();\n    if (useClip) {\n      unclipArea(ctx);\n    }\n    args.cancelable = false;\n    this.notifyPlugins('afterDatasetDraw', args);\n  }\n  isPointInArea(point) {\n    return _isPointInArea(point, this.chartArea, this._minPadding);\n  }\n  getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n    const method = Interaction.modes[mode];\n    if (typeof method === 'function') {\n      return method(this, e, options, useFinalPosition);\n    }\n    return [];\n  }\n  getDatasetMeta(datasetIndex) {\n    const dataset = this.data.datasets[datasetIndex];\n    const metasets = this._metasets;\n    let meta = metasets.filter(x => x && x._dataset === dataset).pop();\n    if (!meta) {\n      meta = {\n        type: null,\n        data: [],\n        dataset: null,\n        controller: null,\n        hidden: null,\n        xAxisID: null,\n        yAxisID: null,\n        order: dataset && dataset.order || 0,\n        index: datasetIndex,\n        _dataset: dataset,\n        _parsed: [],\n        _sorted: false\n      };\n      metasets.push(meta);\n    }\n    return meta;\n  }\n  getContext() {\n    return this.$context || (this.$context = createContext(null, {chart: this, type: 'chart'}));\n  }\n  getVisibleDatasetCount() {\n    return this.getSortedVisibleDatasetMetas().length;\n  }\n  isDatasetVisible(datasetIndex) {\n    const dataset = this.data.datasets[datasetIndex];\n    if (!dataset) {\n      return false;\n    }\n    const meta = this.getDatasetMeta(datasetIndex);\n    return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n  }\n  setDatasetVisibility(datasetIndex, visible) {\n    const meta = this.getDatasetMeta(datasetIndex);\n    meta.hidden = !visible;\n  }\n  toggleDataVisibility(index) {\n    this._hiddenIndices[index] = !this._hiddenIndices[index];\n  }\n  getDataVisibility(index) {\n    return !this._hiddenIndices[index];\n  }\n  _updateVisibility(datasetIndex, dataIndex, visible) {\n    const mode = visible ? 'show' : 'hide';\n    const meta = this.getDatasetMeta(datasetIndex);\n    const anims = meta.controller._resolveAnimations(undefined, mode);\n    if (defined(dataIndex)) {\n      meta.data[dataIndex].hidden = !visible;\n      this.update();\n    } else {\n      this.setDatasetVisibility(datasetIndex, visible);\n      anims.update(meta, {visible});\n      this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : undefined);\n    }\n  }\n  hide(datasetIndex, dataIndex) {\n    this._updateVisibility(datasetIndex, dataIndex, false);\n  }\n  show(datasetIndex, dataIndex) {\n    this._updateVisibility(datasetIndex, dataIndex, true);\n  }\n  _destroyDatasetMeta(datasetIndex) {\n    const meta = this._metasets[datasetIndex];\n    if (meta && meta.controller) {\n      meta.controller._destroy();\n    }\n    delete this._metasets[datasetIndex];\n  }\n  _stop() {\n    let i, ilen;\n    this.stop();\n    animator.remove(this);\n    for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this._destroyDatasetMeta(i);\n    }\n  }\n  destroy() {\n    this.notifyPlugins('beforeDestroy');\n    const {canvas, ctx} = this;\n    this._stop();\n    this.config.clearCache();\n    if (canvas) {\n      this.unbindEvents();\n      clearCanvas(canvas, ctx);\n      this.platform.releaseContext(ctx);\n      this.canvas = null;\n      this.ctx = null;\n    }\n    this.notifyPlugins('destroy');\n    delete instances[this.id];\n    this.notifyPlugins('afterDestroy');\n  }\n  toBase64Image(...args) {\n    return this.canvas.toDataURL(...args);\n  }\n  bindEvents() {\n    this.bindUserEvents();\n    if (this.options.responsive) {\n      this.bindResponsiveEvents();\n    } else {\n      this.attached = true;\n    }\n  }\n  bindUserEvents() {\n    const listeners = this._listeners;\n    const platform = this.platform;\n    const _add = (type, listener) => {\n      platform.addEventListener(this, type, listener);\n      listeners[type] = listener;\n    };\n    const listener = (e, x, y) => {\n      e.offsetX = x;\n      e.offsetY = y;\n      this._eventHandler(e);\n    };\n    each(this.options.events, (type) => _add(type, listener));\n  }\n  bindResponsiveEvents() {\n    if (!this._responsiveListeners) {\n      this._responsiveListeners = {};\n    }\n    const listeners = this._responsiveListeners;\n    const platform = this.platform;\n    const _add = (type, listener) => {\n      platform.addEventListener(this, type, listener);\n      listeners[type] = listener;\n    };\n    const _remove = (type, listener) => {\n      if (listeners[type]) {\n        platform.removeEventListener(this, type, listener);\n        delete listeners[type];\n      }\n    };\n    const listener = (width, height) => {\n      if (this.canvas) {\n        this.resize(width, height);\n      }\n    };\n    let detached;\n    const attached = () => {\n      _remove('attach', attached);\n      this.attached = true;\n      this.resize();\n      _add('resize', listener);\n      _add('detach', detached);\n    };\n    detached = () => {\n      this.attached = false;\n      _remove('resize', listener);\n      this._stop();\n      this._resize(0, 0);\n      _add('attach', attached);\n    };\n    if (platform.isAttached(this.canvas)) {\n      attached();\n    } else {\n      detached();\n    }\n  }\n  unbindEvents() {\n    each(this._listeners, (listener, type) => {\n      this.platform.removeEventListener(this, type, listener);\n    });\n    this._listeners = {};\n    each(this._responsiveListeners, (listener, type) => {\n      this.platform.removeEventListener(this, type, listener);\n    });\n    this._responsiveListeners = undefined;\n  }\n  updateHoverStyle(items, mode, enabled) {\n    const prefix = enabled ? 'set' : 'remove';\n    let meta, item, i, ilen;\n    if (mode === 'dataset') {\n      meta = this.getDatasetMeta(items[0].datasetIndex);\n      meta.controller['_' + prefix + 'DatasetHoverStyle']();\n    }\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      item = items[i];\n      const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n      if (controller) {\n        controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n      }\n    }\n  }\n  getActiveElements() {\n    return this._active || [];\n  }\n  setActiveElements(activeElements) {\n    const lastActive = this._active || [];\n    const active = activeElements.map(({datasetIndex, index}) => {\n      const meta = this.getDatasetMeta(datasetIndex);\n      if (!meta) {\n        throw new Error('No dataset found at index ' + datasetIndex);\n      }\n      return {\n        datasetIndex,\n        element: meta.data[index],\n        index,\n      };\n    });\n    const changed = !_elementsEqual(active, lastActive);\n    if (changed) {\n      this._active = active;\n      this._lastEvent = null;\n      this._updateHoverStyles(active, lastActive);\n    }\n  }\n  notifyPlugins(hook, args, filter) {\n    return this._plugins.notify(this, hook, args, filter);\n  }\n  _updateHoverStyles(active, lastActive, replay) {\n    const hoverOptions = this.options.hover;\n    const diff = (a, b) => a.filter(x => !b.some(y => x.datasetIndex === y.datasetIndex && x.index === y.index));\n    const deactivated = diff(lastActive, active);\n    const activated = replay ? active : diff(active, lastActive);\n    if (deactivated.length) {\n      this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n    }\n    if (activated.length && hoverOptions.mode) {\n      this.updateHoverStyle(activated, hoverOptions.mode, true);\n    }\n  }\n  _eventHandler(e, replay) {\n    const args = {\n      event: e,\n      replay,\n      cancelable: true,\n      inChartArea: this.isPointInArea(e)\n    };\n    const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type);\n    if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n      return;\n    }\n    const changed = this._handleEvent(e, replay, args.inChartArea);\n    args.cancelable = false;\n    this.notifyPlugins('afterEvent', args, eventFilter);\n    if (changed || args.changed) {\n      this.render();\n    }\n    return this;\n  }\n  _handleEvent(e, replay, inChartArea) {\n    const {_active: lastActive = [], options} = this;\n    const useFinalPosition = replay;\n    const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n    const isClick = _isClickEvent(e);\n    const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n    if (inChartArea) {\n      this._lastEvent = null;\n      callback(options.onHover, [e, active, this], this);\n      if (isClick) {\n        callback(options.onClick, [e, active, this], this);\n      }\n    }\n    const changed = !_elementsEqual(active, lastActive);\n    if (changed || replay) {\n      this._active = active;\n      this._updateHoverStyles(active, lastActive, replay);\n    }\n    this._lastEvent = lastEvent;\n    return changed;\n  }\n  _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n    if (e.type === 'mouseout') {\n      return [];\n    }\n    if (!inChartArea) {\n      return lastActive;\n    }\n    const hoverOptions = this.options.hover;\n    return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n  }\n}\nconst invalidatePlugins = () => each(Chart.instances, (chart) => chart._plugins.invalidate());\nconst enumerable = true;\nObject.defineProperties(Chart, {\n  defaults: {\n    enumerable,\n    value: defaults\n  },\n  instances: {\n    enumerable,\n    value: instances\n  },\n  overrides: {\n    enumerable,\n    value: overrides\n  },\n  registry: {\n    enumerable,\n    value: registry\n  },\n  version: {\n    enumerable,\n    value: version\n  },\n  getChart: {\n    enumerable,\n    value: getChart\n  },\n  register: {\n    enumerable,\n    value: (...items) => {\n      registry.add(...items);\n      invalidatePlugins();\n    }\n  },\n  unregister: {\n    enumerable,\n    value: (...items) => {\n      registry.remove(...items);\n      invalidatePlugins();\n    }\n  }\n});\n\nfunction clipArc(ctx, element, endAngle) {\n  const {startAngle, pixelMargin, x, y, outerRadius, innerRadius} = element;\n  let angleMargin = pixelMargin / outerRadius;\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n  if (innerRadius > pixelMargin) {\n    angleMargin = pixelMargin / innerRadius;\n    ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n  } else {\n    ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n  }\n  ctx.closePath();\n  ctx.clip();\n}\nfunction toRadiusCorners(value) {\n  return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\nfunction parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n  const o = toRadiusCorners(arc.options.borderRadius);\n  const halfThickness = (outerRadius - innerRadius) / 2;\n  const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n  const computeOuterLimit = (val) => {\n    const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n    return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n  };\n  return {\n    outerStart: computeOuterLimit(o.outerStart),\n    outerEnd: computeOuterLimit(o.outerEnd),\n    innerStart: _limitValue(o.innerStart, 0, innerLimit),\n    innerEnd: _limitValue(o.innerEnd, 0, innerLimit),\n  };\n}\nfunction rThetaToXY(r, theta, x, y) {\n  return {\n    x: x + r * Math.cos(theta),\n    y: y + r * Math.sin(theta),\n  };\n}\nfunction pathArc(ctx, element, offset, spacing, end, circular) {\n  const {x, y, startAngle: start, pixelMargin, innerRadius: innerR} = element;\n  const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n  const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n  let spacingOffset = 0;\n  const alpha = end - start;\n  if (spacing) {\n    const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n    const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n    const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n    const adjustedAngle = avNogSpacingRadius !== 0 ? (alpha * avNogSpacingRadius) / (avNogSpacingRadius + spacing) : alpha;\n    spacingOffset = (alpha - adjustedAngle) / 2;\n  }\n  const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n  const angleOffset = (alpha - beta) / 2;\n  const startAngle = start + angleOffset + spacingOffset;\n  const endAngle = end - angleOffset - spacingOffset;\n  const {outerStart, outerEnd, innerStart, innerEnd} = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);\n  const outerStartAdjustedRadius = outerRadius - outerStart;\n  const outerEndAdjustedRadius = outerRadius - outerEnd;\n  const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n  const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n  const innerStartAdjustedRadius = innerRadius + innerStart;\n  const innerEndAdjustedRadius = innerRadius + innerEnd;\n  const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n  const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n  ctx.beginPath();\n  if (circular) {\n    ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerEndAdjustedAngle);\n    if (outerEnd > 0) {\n      const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n    }\n    const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n    ctx.lineTo(p4.x, p4.y);\n    if (innerEnd > 0) {\n      const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n    }\n    ctx.arc(x, y, innerRadius, endAngle - (innerEnd / innerRadius), startAngle + (innerStart / innerRadius), true);\n    if (innerStart > 0) {\n      const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n    }\n    const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n    ctx.lineTo(p8.x, p8.y);\n    if (outerStart > 0) {\n      const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n    }\n  } else {\n    ctx.moveTo(x, y);\n    const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n    const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n    ctx.lineTo(outerStartX, outerStartY);\n    const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n    const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n    ctx.lineTo(outerEndX, outerEndY);\n  }\n  ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing, circular) {\n  const {fullCircles, startAngle, circumference} = element;\n  let endAngle = element.endAngle;\n  if (fullCircles) {\n    pathArc(ctx, element, offset, spacing, startAngle + TAU, circular);\n    for (let i = 0; i < fullCircles; ++i) {\n      ctx.fill();\n    }\n    if (!isNaN(circumference)) {\n      endAngle = startAngle + circumference % TAU;\n      if (circumference % TAU === 0) {\n        endAngle += TAU;\n      }\n    }\n  }\n  pathArc(ctx, element, offset, spacing, endAngle, circular);\n  ctx.fill();\n  return endAngle;\n}\nfunction drawFullCircleBorders(ctx, element, inner) {\n  const {x, y, startAngle, pixelMargin, fullCircles} = element;\n  const outerRadius = Math.max(element.outerRadius - pixelMargin, 0);\n  const innerRadius = element.innerRadius + pixelMargin;\n  let i;\n  if (inner) {\n    clipArc(ctx, element, startAngle + TAU);\n  }\n  ctx.beginPath();\n  ctx.arc(x, y, innerRadius, startAngle + TAU, startAngle, true);\n  for (i = 0; i < fullCircles; ++i) {\n    ctx.stroke();\n  }\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius, startAngle, startAngle + TAU);\n  for (i = 0; i < fullCircles; ++i) {\n    ctx.stroke();\n  }\n}\nfunction drawBorder(ctx, element, offset, spacing, endAngle, circular) {\n  const {options} = element;\n  const {borderWidth, borderJoinStyle} = options;\n  const inner = options.borderAlign === 'inner';\n  if (!borderWidth) {\n    return;\n  }\n  if (inner) {\n    ctx.lineWidth = borderWidth * 2;\n    ctx.lineJoin = borderJoinStyle || 'round';\n  } else {\n    ctx.lineWidth = borderWidth;\n    ctx.lineJoin = borderJoinStyle || 'bevel';\n  }\n  if (element.fullCircles) {\n    drawFullCircleBorders(ctx, element, inner);\n  }\n  if (inner) {\n    clipArc(ctx, element, endAngle);\n  }\n  pathArc(ctx, element, offset, spacing, endAngle, circular);\n  ctx.stroke();\n}\nclass ArcElement extends Element {\n  constructor(cfg) {\n    super();\n    this.options = undefined;\n    this.circumference = undefined;\n    this.startAngle = undefined;\n    this.endAngle = undefined;\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n    this.pixelMargin = 0;\n    this.fullCircles = 0;\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n  inRange(chartX, chartY, useFinalPosition) {\n    const point = this.getProps(['x', 'y'], useFinalPosition);\n    const {angle, distance} = getAngleFromPoint(point, {x: chartX, y: chartY});\n    const {startAngle, endAngle, innerRadius, outerRadius, circumference} = this.getProps([\n      'startAngle',\n      'endAngle',\n      'innerRadius',\n      'outerRadius',\n      'circumference'\n    ], useFinalPosition);\n    const rAdjust = this.options.spacing / 2;\n    const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n    const betweenAngles = _circumference >= TAU || _angleBetween(angle, startAngle, endAngle);\n    const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n    return (betweenAngles && withinRadius);\n  }\n  getCenterPoint(useFinalPosition) {\n    const {x, y, startAngle, endAngle, innerRadius, outerRadius} = this.getProps([\n      'x',\n      'y',\n      'startAngle',\n      'endAngle',\n      'innerRadius',\n      'outerRadius',\n      'circumference',\n    ], useFinalPosition);\n    const {offset, spacing} = this.options;\n    const halfAngle = (startAngle + endAngle) / 2;\n    const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n    return {\n      x: x + Math.cos(halfAngle) * halfRadius,\n      y: y + Math.sin(halfAngle) * halfRadius\n    };\n  }\n  tooltipPosition(useFinalPosition) {\n    return this.getCenterPoint(useFinalPosition);\n  }\n  draw(ctx) {\n    const {options, circumference} = this;\n    const offset = (options.offset || 0) / 2;\n    const spacing = (options.spacing || 0) / 2;\n    const circular = options.circular;\n    this.pixelMargin = (options.borderAlign === 'inner') ? 0.33 : 0;\n    this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n    if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n      return;\n    }\n    ctx.save();\n    let radiusOffset = 0;\n    if (offset) {\n      radiusOffset = offset / 2;\n      const halfAngle = (this.startAngle + this.endAngle) / 2;\n      ctx.translate(Math.cos(halfAngle) * radiusOffset, Math.sin(halfAngle) * radiusOffset);\n      if (this.circumference >= PI) {\n        radiusOffset = offset;\n      }\n    }\n    ctx.fillStyle = options.backgroundColor;\n    ctx.strokeStyle = options.borderColor;\n    const endAngle = drawArc(ctx, this, radiusOffset, spacing, circular);\n    drawBorder(ctx, this, radiusOffset, spacing, endAngle, circular);\n    ctx.restore();\n  }\n}\nArcElement.id = 'arc';\nArcElement.defaults = {\n  borderAlign: 'center',\n  borderColor: '#fff',\n  borderJoinStyle: undefined,\n  borderRadius: 0,\n  borderWidth: 2,\n  offset: 0,\n  spacing: 0,\n  angle: undefined,\n  circular: true,\n};\nArcElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor'\n};\n\nfunction setStyle(ctx, options, style = options) {\n  ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n  ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n  ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n  ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n  ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n  ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\nfunction lineTo(ctx, previous, target) {\n  ctx.lineTo(target.x, target.y);\n}\nfunction getLineMethod(options) {\n  if (options.stepped) {\n    return _steppedLineTo;\n  }\n  if (options.tension || options.cubicInterpolationMode === 'monotone') {\n    return _bezierCurveTo;\n  }\n  return lineTo;\n}\nfunction pathVars(points, segment, params = {}) {\n  const count = points.length;\n  const {start: paramsStart = 0, end: paramsEnd = count - 1} = params;\n  const {start: segmentStart, end: segmentEnd} = segment;\n  const start = Math.max(paramsStart, segmentStart);\n  const end = Math.min(paramsEnd, segmentEnd);\n  const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n  return {\n    count,\n    start,\n    loop: segment.loop,\n    ilen: end < start && !outside ? count + end - start : end - start\n  };\n}\nfunction pathSegment(ctx, line, segment, params) {\n  const {points, options} = line;\n  const {count, start, loop, ilen} = pathVars(points, segment, params);\n  const lineMethod = getLineMethod(options);\n  let {move = true, reverse} = params || {};\n  let i, point, prev;\n  for (i = 0; i <= ilen; ++i) {\n    point = points[(start + (reverse ? ilen - i : i)) % count];\n    if (point.skip) {\n      continue;\n    } else if (move) {\n      ctx.moveTo(point.x, point.y);\n      move = false;\n    } else {\n      lineMethod(ctx, prev, point, reverse, options.stepped);\n    }\n    prev = point;\n  }\n  if (loop) {\n    point = points[(start + (reverse ? ilen : 0)) % count];\n    lineMethod(ctx, prev, point, reverse, options.stepped);\n  }\n  return !!loop;\n}\nfunction fastPathSegment(ctx, line, segment, params) {\n  const points = line.points;\n  const {count, start, ilen} = pathVars(points, segment, params);\n  const {move = true, reverse} = params || {};\n  let avgX = 0;\n  let countX = 0;\n  let i, point, prevX, minY, maxY, lastY;\n  const pointIndex = (index) => (start + (reverse ? ilen - index : index)) % count;\n  const drawX = () => {\n    if (minY !== maxY) {\n      ctx.lineTo(avgX, maxY);\n      ctx.lineTo(avgX, minY);\n      ctx.lineTo(avgX, lastY);\n    }\n  };\n  if (move) {\n    point = points[pointIndex(0)];\n    ctx.moveTo(point.x, point.y);\n  }\n  for (i = 0; i <= ilen; ++i) {\n    point = points[pointIndex(i)];\n    if (point.skip) {\n      continue;\n    }\n    const x = point.x;\n    const y = point.y;\n    const truncX = x | 0;\n    if (truncX === prevX) {\n      if (y < minY) {\n        minY = y;\n      } else if (y > maxY) {\n        maxY = y;\n      }\n      avgX = (countX * avgX + x) / ++countX;\n    } else {\n      drawX();\n      ctx.lineTo(x, y);\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n    }\n    lastY = y;\n  }\n  drawX();\n}\nfunction _getSegmentMethod(line) {\n  const opts = line.options;\n  const borderDash = opts.borderDash && opts.borderDash.length;\n  const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n  return useFastPath ? fastPathSegment : pathSegment;\n}\nfunction _getInterpolationMethod(options) {\n  if (options.stepped) {\n    return _steppedInterpolation;\n  }\n  if (options.tension || options.cubicInterpolationMode === 'monotone') {\n    return _bezierInterpolation;\n  }\n  return _pointInLine;\n}\nfunction strokePathWithCache(ctx, line, start, count) {\n  let path = line._path;\n  if (!path) {\n    path = line._path = new Path2D();\n    if (line.path(path, start, count)) {\n      path.closePath();\n    }\n  }\n  setStyle(ctx, line.options);\n  ctx.stroke(path);\n}\nfunction strokePathDirect(ctx, line, start, count) {\n  const {segments, options} = line;\n  const segmentMethod = _getSegmentMethod(line);\n  for (const segment of segments) {\n    setStyle(ctx, options, segment.style);\n    ctx.beginPath();\n    if (segmentMethod(ctx, line, segment, {start, end: start + count - 1})) {\n      ctx.closePath();\n    }\n    ctx.stroke();\n  }\n}\nconst usePath2D = typeof Path2D === 'function';\nfunction draw(ctx, line, start, count) {\n  if (usePath2D && !line.options.segment) {\n    strokePathWithCache(ctx, line, start, count);\n  } else {\n    strokePathDirect(ctx, line, start, count);\n  }\n}\nclass LineElement extends Element {\n  constructor(cfg) {\n    super();\n    this.animated = true;\n    this.options = undefined;\n    this._chart = undefined;\n    this._loop = undefined;\n    this._fullLoop = undefined;\n    this._path = undefined;\n    this._points = undefined;\n    this._segments = undefined;\n    this._decimated = false;\n    this._pointsUpdated = false;\n    this._datasetIndex = undefined;\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n  updateControlPoints(chartArea, indexAxis) {\n    const options = this.options;\n    if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n      const loop = options.spanGaps ? this._loop : this._fullLoop;\n      _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n      this._pointsUpdated = true;\n    }\n  }\n  set points(points) {\n    this._points = points;\n    delete this._segments;\n    delete this._path;\n    this._pointsUpdated = false;\n  }\n  get points() {\n    return this._points;\n  }\n  get segments() {\n    return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n  }\n  first() {\n    const segments = this.segments;\n    const points = this.points;\n    return segments.length && points[segments[0].start];\n  }\n  last() {\n    const segments = this.segments;\n    const points = this.points;\n    const count = segments.length;\n    return count && points[segments[count - 1].end];\n  }\n  interpolate(point, property) {\n    const options = this.options;\n    const value = point[property];\n    const points = this.points;\n    const segments = _boundSegments(this, {property, start: value, end: value});\n    if (!segments.length) {\n      return;\n    }\n    const result = [];\n    const _interpolate = _getInterpolationMethod(options);\n    let i, ilen;\n    for (i = 0, ilen = segments.length; i < ilen; ++i) {\n      const {start, end} = segments[i];\n      const p1 = points[start];\n      const p2 = points[end];\n      if (p1 === p2) {\n        result.push(p1);\n        continue;\n      }\n      const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n      const interpolated = _interpolate(p1, p2, t, options.stepped);\n      interpolated[property] = point[property];\n      result.push(interpolated);\n    }\n    return result.length === 1 ? result[0] : result;\n  }\n  pathSegment(ctx, segment, params) {\n    const segmentMethod = _getSegmentMethod(this);\n    return segmentMethod(ctx, this, segment, params);\n  }\n  path(ctx, start, count) {\n    const segments = this.segments;\n    const segmentMethod = _getSegmentMethod(this);\n    let loop = this._loop;\n    start = start || 0;\n    count = count || (this.points.length - start);\n    for (const segment of segments) {\n      loop &= segmentMethod(ctx, this, segment, {start, end: start + count - 1});\n    }\n    return !!loop;\n  }\n  draw(ctx, chartArea, start, count) {\n    const options = this.options || {};\n    const points = this.points || [];\n    if (points.length && options.borderWidth) {\n      ctx.save();\n      draw(ctx, this, start, count);\n      ctx.restore();\n    }\n    if (this.animated) {\n      this._pointsUpdated = false;\n      this._path = undefined;\n    }\n  }\n}\nLineElement.id = 'line';\nLineElement.defaults = {\n  borderCapStyle: 'butt',\n  borderDash: [],\n  borderDashOffset: 0,\n  borderJoinStyle: 'miter',\n  borderWidth: 3,\n  capBezierPoints: true,\n  cubicInterpolationMode: 'default',\n  fill: false,\n  spanGaps: false,\n  stepped: false,\n  tension: 0,\n};\nLineElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor',\n  borderColor: 'borderColor'\n};\nLineElement.descriptors = {\n  _scriptable: true,\n  _indexable: (name) => name !== 'borderDash' && name !== 'fill',\n};\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n  const options = el.options;\n  const {[axis]: value} = el.getProps([axis], useFinalPosition);\n  return (Math.abs(pos - value) < options.radius + options.hitRadius);\n}\nclass PointElement extends Element {\n  constructor(cfg) {\n    super();\n    this.options = undefined;\n    this.parsed = undefined;\n    this.skip = undefined;\n    this.stop = undefined;\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n  inRange(mouseX, mouseY, useFinalPosition) {\n    const options = this.options;\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return ((Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2)) < Math.pow(options.hitRadius + options.radius, 2));\n  }\n  inXRange(mouseX, useFinalPosition) {\n    return inRange$1(this, mouseX, 'x', useFinalPosition);\n  }\n  inYRange(mouseY, useFinalPosition) {\n    return inRange$1(this, mouseY, 'y', useFinalPosition);\n  }\n  getCenterPoint(useFinalPosition) {\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return {x, y};\n  }\n  size(options) {\n    options = options || this.options || {};\n    let radius = options.radius || 0;\n    radius = Math.max(radius, radius && options.hoverRadius || 0);\n    const borderWidth = radius && options.borderWidth || 0;\n    return (radius + borderWidth) * 2;\n  }\n  draw(ctx, area) {\n    const options = this.options;\n    if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n      return;\n    }\n    ctx.strokeStyle = options.borderColor;\n    ctx.lineWidth = options.borderWidth;\n    ctx.fillStyle = options.backgroundColor;\n    drawPoint(ctx, options, this.x, this.y);\n  }\n  getRange() {\n    const options = this.options || {};\n    return options.radius + options.hitRadius;\n  }\n}\nPointElement.id = 'point';\nPointElement.defaults = {\n  borderWidth: 1,\n  hitRadius: 1,\n  hoverBorderWidth: 1,\n  hoverRadius: 4,\n  pointStyle: 'circle',\n  radius: 3,\n  rotation: 0\n};\nPointElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor',\n  borderColor: 'borderColor'\n};\n\nfunction getBarBounds(bar, useFinalPosition) {\n  const {x, y, base, width, height} = bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition);\n  let left, right, top, bottom, half;\n  if (bar.horizontal) {\n    half = height / 2;\n    left = Math.min(x, base);\n    right = Math.max(x, base);\n    top = y - half;\n    bottom = y + half;\n  } else {\n    half = width / 2;\n    left = x - half;\n    right = x + half;\n    top = Math.min(y, base);\n    bottom = Math.max(y, base);\n  }\n  return {left, top, right, bottom};\n}\nfunction skipOrLimit(skip, value, min, max) {\n  return skip ? 0 : _limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n  const value = bar.options.borderWidth;\n  const skip = bar.borderSkipped;\n  const o = toTRBL(value);\n  return {\n    t: skipOrLimit(skip.top, o.top, 0, maxH),\n    r: skipOrLimit(skip.right, o.right, 0, maxW),\n    b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n    l: skipOrLimit(skip.left, o.left, 0, maxW)\n  };\n}\nfunction parseBorderRadius(bar, maxW, maxH) {\n  const {enableBorderRadius} = bar.getProps(['enableBorderRadius']);\n  const value = bar.options.borderRadius;\n  const o = toTRBLCorners(value);\n  const maxR = Math.min(maxW, maxH);\n  const skip = bar.borderSkipped;\n  const enableBorder = enableBorderRadius || isObject(value);\n  return {\n    topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n    topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n    bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n    bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n  };\n}\nfunction boundingRects(bar) {\n  const bounds = getBarBounds(bar);\n  const width = bounds.right - bounds.left;\n  const height = bounds.bottom - bounds.top;\n  const border = parseBorderWidth(bar, width / 2, height / 2);\n  const radius = parseBorderRadius(bar, width / 2, height / 2);\n  return {\n    outer: {\n      x: bounds.left,\n      y: bounds.top,\n      w: width,\n      h: height,\n      radius\n    },\n    inner: {\n      x: bounds.left + border.l,\n      y: bounds.top + border.t,\n      w: width - border.l - border.r,\n      h: height - border.t - border.b,\n      radius: {\n        topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n        topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n        bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n        bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r)),\n      }\n    }\n  };\n}\nfunction inRange(bar, x, y, useFinalPosition) {\n  const skipX = x === null;\n  const skipY = y === null;\n  const skipBoth = skipX && skipY;\n  const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n  return bounds\n\t\t&& (skipX || _isBetween(x, bounds.left, bounds.right))\n\t\t&& (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\nfunction hasRadius(radius) {\n  return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\nfunction addNormalRectPath(ctx, rect) {\n  ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\nfunction inflateRect(rect, amount, refRect = {}) {\n  const x = rect.x !== refRect.x ? -amount : 0;\n  const y = rect.y !== refRect.y ? -amount : 0;\n  const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n  const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n  return {\n    x: rect.x + x,\n    y: rect.y + y,\n    w: rect.w + w,\n    h: rect.h + h,\n    radius: rect.radius\n  };\n}\nclass BarElement extends Element {\n  constructor(cfg) {\n    super();\n    this.options = undefined;\n    this.horizontal = undefined;\n    this.base = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this.inflateAmount = undefined;\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n  draw(ctx) {\n    const {inflateAmount, options: {borderColor, backgroundColor}} = this;\n    const {inner, outer} = boundingRects(this);\n    const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n    ctx.save();\n    if (outer.w !== inner.w || outer.h !== inner.h) {\n      ctx.beginPath();\n      addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n      ctx.clip();\n      addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n      ctx.fillStyle = borderColor;\n      ctx.fill('evenodd');\n    }\n    ctx.beginPath();\n    addRectPath(ctx, inflateRect(inner, inflateAmount));\n    ctx.fillStyle = backgroundColor;\n    ctx.fill();\n    ctx.restore();\n  }\n  inRange(mouseX, mouseY, useFinalPosition) {\n    return inRange(this, mouseX, mouseY, useFinalPosition);\n  }\n  inXRange(mouseX, useFinalPosition) {\n    return inRange(this, mouseX, null, useFinalPosition);\n  }\n  inYRange(mouseY, useFinalPosition) {\n    return inRange(this, null, mouseY, useFinalPosition);\n  }\n  getCenterPoint(useFinalPosition) {\n    const {x, y, base, horizontal} = this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition);\n    return {\n      x: horizontal ? (x + base) / 2 : x,\n      y: horizontal ? y : (y + base) / 2\n    };\n  }\n  getRange(axis) {\n    return axis === 'x' ? this.width / 2 : this.height / 2;\n  }\n}\nBarElement.id = 'bar';\nBarElement.defaults = {\n  borderSkipped: 'start',\n  borderWidth: 0,\n  borderRadius: 0,\n  inflateAmount: 'auto',\n  pointStyle: undefined\n};\nBarElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor',\n  borderColor: 'borderColor'\n};\n\nvar elements = /*#__PURE__*/Object.freeze({\n__proto__: null,\nArcElement: ArcElement,\nLineElement: LineElement,\nPointElement: PointElement,\nBarElement: BarElement\n});\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n  const samples = options.samples || availableWidth;\n  if (samples >= count) {\n    return data.slice(start, start + count);\n  }\n  const decimated = [];\n  const bucketWidth = (count - 2) / (samples - 2);\n  let sampledIndex = 0;\n  const endIndex = start + count - 1;\n  let a = start;\n  let i, maxAreaPoint, maxArea, area, nextA;\n  decimated[sampledIndex++] = data[a];\n  for (i = 0; i < samples - 2; i++) {\n    let avgX = 0;\n    let avgY = 0;\n    let j;\n    const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n    const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n    const avgRangeLength = avgRangeEnd - avgRangeStart;\n    for (j = avgRangeStart; j < avgRangeEnd; j++) {\n      avgX += data[j].x;\n      avgY += data[j].y;\n    }\n    avgX /= avgRangeLength;\n    avgY /= avgRangeLength;\n    const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n    const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n    const {x: pointAx, y: pointAy} = data[a];\n    maxArea = area = -1;\n    for (j = rangeOffs; j < rangeTo; j++) {\n      area = 0.5 * Math.abs(\n        (pointAx - avgX) * (data[j].y - pointAy) -\n        (pointAx - data[j].x) * (avgY - pointAy)\n      );\n      if (area > maxArea) {\n        maxArea = area;\n        maxAreaPoint = data[j];\n        nextA = j;\n      }\n    }\n    decimated[sampledIndex++] = maxAreaPoint;\n    a = nextA;\n  }\n  decimated[sampledIndex++] = data[endIndex];\n  return decimated;\n}\nfunction minMaxDecimation(data, start, count, availableWidth) {\n  let avgX = 0;\n  let countX = 0;\n  let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n  const decimated = [];\n  const endIndex = start + count - 1;\n  const xMin = data[start].x;\n  const xMax = data[endIndex].x;\n  const dx = xMax - xMin;\n  for (i = start; i < start + count; ++i) {\n    point = data[i];\n    x = (point.x - xMin) / dx * availableWidth;\n    y = point.y;\n    const truncX = x | 0;\n    if (truncX === prevX) {\n      if (y < minY) {\n        minY = y;\n        minIndex = i;\n      } else if (y > maxY) {\n        maxY = y;\n        maxIndex = i;\n      }\n      avgX = (countX * avgX + point.x) / ++countX;\n    } else {\n      const lastIndex = i - 1;\n      if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n        const intermediateIndex1 = Math.min(minIndex, maxIndex);\n        const intermediateIndex2 = Math.max(minIndex, maxIndex);\n        if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n          decimated.push({\n            ...data[intermediateIndex1],\n            x: avgX,\n          });\n        }\n        if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n          decimated.push({\n            ...data[intermediateIndex2],\n            x: avgX\n          });\n        }\n      }\n      if (i > 0 && lastIndex !== startIndex) {\n        decimated.push(data[lastIndex]);\n      }\n      decimated.push(point);\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n      minIndex = maxIndex = startIndex = i;\n    }\n  }\n  return decimated;\n}\nfunction cleanDecimatedDataset(dataset) {\n  if (dataset._decimated) {\n    const data = dataset._data;\n    delete dataset._decimated;\n    delete dataset._data;\n    Object.defineProperty(dataset, 'data', {value: data});\n  }\n}\nfunction cleanDecimatedData(chart) {\n  chart.data.datasets.forEach((dataset) => {\n    cleanDecimatedDataset(dataset);\n  });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n  const pointCount = points.length;\n  let start = 0;\n  let count;\n  const {iScale} = meta;\n  const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n  if (minDefined) {\n    start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n  }\n  if (maxDefined) {\n    count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n  } else {\n    count = pointCount - start;\n  }\n  return {start, count};\n}\nvar plugin_decimation = {\n  id: 'decimation',\n  defaults: {\n    algorithm: 'min-max',\n    enabled: false,\n  },\n  beforeElementsUpdate: (chart, args, options) => {\n    if (!options.enabled) {\n      cleanDecimatedData(chart);\n      return;\n    }\n    const availableWidth = chart.width;\n    chart.data.datasets.forEach((dataset, datasetIndex) => {\n      const {_data, indexAxis} = dataset;\n      const meta = chart.getDatasetMeta(datasetIndex);\n      const data = _data || dataset.data;\n      if (resolve([indexAxis, chart.options.indexAxis]) === 'y') {\n        return;\n      }\n      if (!meta.controller.supportsDecimation) {\n        return;\n      }\n      const xAxis = chart.scales[meta.xAxisID];\n      if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n        return;\n      }\n      if (chart.options.parsing) {\n        return;\n      }\n      let {start, count} = getStartAndCountOfVisiblePointsSimplified(meta, data);\n      const threshold = options.threshold || 4 * availableWidth;\n      if (count <= threshold) {\n        cleanDecimatedDataset(dataset);\n        return;\n      }\n      if (isNullOrUndef(_data)) {\n        dataset._data = data;\n        delete dataset.data;\n        Object.defineProperty(dataset, 'data', {\n          configurable: true,\n          enumerable: true,\n          get: function() {\n            return this._decimated;\n          },\n          set: function(d) {\n            this._data = d;\n          }\n        });\n      }\n      let decimated;\n      switch (options.algorithm) {\n      case 'lttb':\n        decimated = lttbDecimation(data, start, count, availableWidth, options);\n        break;\n      case 'min-max':\n        decimated = minMaxDecimation(data, start, count, availableWidth);\n        break;\n      default:\n        throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n      }\n      dataset._decimated = decimated;\n    });\n  },\n  destroy(chart) {\n    cleanDecimatedData(chart);\n  }\n};\n\nfunction _segments(line, target, property) {\n  const segments = line.segments;\n  const points = line.points;\n  const tpoints = target.points;\n  const parts = [];\n  for (const segment of segments) {\n    let {start, end} = segment;\n    end = _findSegmentEnd(start, end, points);\n    const bounds = _getBounds(property, points[start], points[end], segment.loop);\n    if (!target.segments) {\n      parts.push({\n        source: segment,\n        target: bounds,\n        start: points[start],\n        end: points[end]\n      });\n      continue;\n    }\n    const targetSegments = _boundSegments(target, bounds);\n    for (const tgt of targetSegments) {\n      const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n      const fillSources = _boundSegment(segment, points, subBounds);\n      for (const fillSource of fillSources) {\n        parts.push({\n          source: fillSource,\n          target: tgt,\n          start: {\n            [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n          },\n          end: {\n            [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n          }\n        });\n      }\n    }\n  }\n  return parts;\n}\nfunction _getBounds(property, first, last, loop) {\n  if (loop) {\n    return;\n  }\n  let start = first[property];\n  let end = last[property];\n  if (property === 'angle') {\n    start = _normalizeAngle(start);\n    end = _normalizeAngle(end);\n  }\n  return {property, start, end};\n}\nfunction _pointsFromSegments(boundary, line) {\n  const {x = null, y = null} = boundary || {};\n  const linePoints = line.points;\n  const points = [];\n  line.segments.forEach(({start, end}) => {\n    end = _findSegmentEnd(start, end, linePoints);\n    const first = linePoints[start];\n    const last = linePoints[end];\n    if (y !== null) {\n      points.push({x: first.x, y});\n      points.push({x: last.x, y});\n    } else if (x !== null) {\n      points.push({x, y: first.y});\n      points.push({x, y: last.y});\n    }\n  });\n  return points;\n}\nfunction _findSegmentEnd(start, end, points) {\n  for (;end > start; end--) {\n    const point = points[end];\n    if (!isNaN(point.x) && !isNaN(point.y)) {\n      break;\n    }\n  }\n  return end;\n}\nfunction _getEdge(a, b, prop, fn) {\n  if (a && b) {\n    return fn(a[prop], b[prop]);\n  }\n  return a ? a[prop] : b ? b[prop] : 0;\n}\n\nfunction _createBoundaryLine(boundary, line) {\n  let points = [];\n  let _loop = false;\n  if (isArray(boundary)) {\n    _loop = true;\n    points = boundary;\n  } else {\n    points = _pointsFromSegments(boundary, line);\n  }\n  return points.length ? new LineElement({\n    points,\n    options: {tension: 0},\n    _loop,\n    _fullLoop: _loop\n  }) : null;\n}\nfunction _shouldApplyFill(source) {\n  return source && source.fill !== false;\n}\n\nfunction _resolveTarget(sources, index, propagate) {\n  const source = sources[index];\n  let fill = source.fill;\n  const visited = [index];\n  let target;\n  if (!propagate) {\n    return fill;\n  }\n  while (fill !== false && visited.indexOf(fill) === -1) {\n    if (!isNumberFinite(fill)) {\n      return fill;\n    }\n    target = sources[fill];\n    if (!target) {\n      return false;\n    }\n    if (target.visible) {\n      return fill;\n    }\n    visited.push(fill);\n    fill = target.fill;\n  }\n  return false;\n}\nfunction _decodeFill(line, index, count) {\n  const fill = parseFillOption(line);\n  if (isObject(fill)) {\n    return isNaN(fill.value) ? false : fill;\n  }\n  let target = parseFloat(fill);\n  if (isNumberFinite(target) && Math.floor(target) === target) {\n    return decodeTargetIndex(fill[0], index, target, count);\n  }\n  return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\nfunction decodeTargetIndex(firstCh, index, target, count) {\n  if (firstCh === '-' || firstCh === '+') {\n    target = index + target;\n  }\n  if (target === index || target < 0 || target >= count) {\n    return false;\n  }\n  return target;\n}\nfunction _getTargetPixel(fill, scale) {\n  let pixel = null;\n  if (fill === 'start') {\n    pixel = scale.bottom;\n  } else if (fill === 'end') {\n    pixel = scale.top;\n  } else if (isObject(fill)) {\n    pixel = scale.getPixelForValue(fill.value);\n  } else if (scale.getBasePixel) {\n    pixel = scale.getBasePixel();\n  }\n  return pixel;\n}\nfunction _getTargetValue(fill, scale, startValue) {\n  let value;\n  if (fill === 'start') {\n    value = startValue;\n  } else if (fill === 'end') {\n    value = scale.options.reverse ? scale.min : scale.max;\n  } else if (isObject(fill)) {\n    value = fill.value;\n  } else {\n    value = scale.getBaseValue();\n  }\n  return value;\n}\nfunction parseFillOption(line) {\n  const options = line.options;\n  const fillOption = options.fill;\n  let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n  if (fill === undefined) {\n    fill = !!options.backgroundColor;\n  }\n  if (fill === false || fill === null) {\n    return false;\n  }\n  if (fill === true) {\n    return 'origin';\n  }\n  return fill;\n}\n\nfunction _buildStackLine(source) {\n  const {scale, index, line} = source;\n  const points = [];\n  const segments = line.segments;\n  const sourcePoints = line.points;\n  const linesBelow = getLinesBelow(scale, index);\n  linesBelow.push(_createBoundaryLine({x: null, y: scale.bottom}, line));\n  for (let i = 0; i < segments.length; i++) {\n    const segment = segments[i];\n    for (let j = segment.start; j <= segment.end; j++) {\n      addPointsBelow(points, sourcePoints[j], linesBelow);\n    }\n  }\n  return new LineElement({points, options: {}});\n}\nfunction getLinesBelow(scale, index) {\n  const below = [];\n  const metas = scale.getMatchingVisibleMetas('line');\n  for (let i = 0; i < metas.length; i++) {\n    const meta = metas[i];\n    if (meta.index === index) {\n      break;\n    }\n    if (!meta.hidden) {\n      below.unshift(meta.dataset);\n    }\n  }\n  return below;\n}\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n  const postponed = [];\n  for (let j = 0; j < linesBelow.length; j++) {\n    const line = linesBelow[j];\n    const {first, last, point} = findPoint(line, sourcePoint, 'x');\n    if (!point || (first && last)) {\n      continue;\n    }\n    if (first) {\n      postponed.unshift(point);\n    } else {\n      points.push(point);\n      if (!last) {\n        break;\n      }\n    }\n  }\n  points.push(...postponed);\n}\nfunction findPoint(line, sourcePoint, property) {\n  const point = line.interpolate(sourcePoint, property);\n  if (!point) {\n    return {};\n  }\n  const pointValue = point[property];\n  const segments = line.segments;\n  const linePoints = line.points;\n  let first = false;\n  let last = false;\n  for (let i = 0; i < segments.length; i++) {\n    const segment = segments[i];\n    const firstValue = linePoints[segment.start][property];\n    const lastValue = linePoints[segment.end][property];\n    if (_isBetween(pointValue, firstValue, lastValue)) {\n      first = pointValue === firstValue;\n      last = pointValue === lastValue;\n      break;\n    }\n  }\n  return {first, last, point};\n}\n\nclass simpleArc {\n  constructor(opts) {\n    this.x = opts.x;\n    this.y = opts.y;\n    this.radius = opts.radius;\n  }\n  pathSegment(ctx, bounds, opts) {\n    const {x, y, radius} = this;\n    bounds = bounds || {start: 0, end: TAU};\n    ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n    return !opts.bounds;\n  }\n  interpolate(point) {\n    const {x, y, radius} = this;\n    const angle = point.angle;\n    return {\n      x: x + Math.cos(angle) * radius,\n      y: y + Math.sin(angle) * radius,\n      angle\n    };\n  }\n}\n\nfunction _getTarget(source) {\n  const {chart, fill, line} = source;\n  if (isNumberFinite(fill)) {\n    return getLineByIndex(chart, fill);\n  }\n  if (fill === 'stack') {\n    return _buildStackLine(source);\n  }\n  if (fill === 'shape') {\n    return true;\n  }\n  const boundary = computeBoundary(source);\n  if (boundary instanceof simpleArc) {\n    return boundary;\n  }\n  return _createBoundaryLine(boundary, line);\n}\nfunction getLineByIndex(chart, index) {\n  const meta = chart.getDatasetMeta(index);\n  const visible = meta && chart.isDatasetVisible(index);\n  return visible ? meta.dataset : null;\n}\nfunction computeBoundary(source) {\n  const scale = source.scale || {};\n  if (scale.getPointPositionForValue) {\n    return computeCircularBoundary(source);\n  }\n  return computeLinearBoundary(source);\n}\nfunction computeLinearBoundary(source) {\n  const {scale = {}, fill} = source;\n  const pixel = _getTargetPixel(fill, scale);\n  if (isNumberFinite(pixel)) {\n    const horizontal = scale.isHorizontal();\n    return {\n      x: horizontal ? pixel : null,\n      y: horizontal ? null : pixel\n    };\n  }\n  return null;\n}\nfunction computeCircularBoundary(source) {\n  const {scale, fill} = source;\n  const options = scale.options;\n  const length = scale.getLabels().length;\n  const start = options.reverse ? scale.max : scale.min;\n  const value = _getTargetValue(fill, scale, start);\n  const target = [];\n  if (options.grid.circular) {\n    const center = scale.getPointPositionForValue(0, start);\n    return new simpleArc({\n      x: center.x,\n      y: center.y,\n      radius: scale.getDistanceFromCenterForValue(value)\n    });\n  }\n  for (let i = 0; i < length; ++i) {\n    target.push(scale.getPointPositionForValue(i, value));\n  }\n  return target;\n}\n\nfunction _drawfill(ctx, source, area) {\n  const target = _getTarget(source);\n  const {line, scale, axis} = source;\n  const lineOpts = line.options;\n  const fillOption = lineOpts.fill;\n  const color = lineOpts.backgroundColor;\n  const {above = color, below = color} = fillOption || {};\n  if (target && line.points.length) {\n    clipArea(ctx, area);\n    doFill(ctx, {line, target, above, below, area, scale, axis});\n    unclipArea(ctx);\n  }\n}\nfunction doFill(ctx, cfg) {\n  const {line, target, above, below, area, scale} = cfg;\n  const property = line._loop ? 'angle' : cfg.axis;\n  ctx.save();\n  if (property === 'x' && below !== above) {\n    clipVertical(ctx, target, area.top);\n    fill(ctx, {line, target, color: above, scale, property});\n    ctx.restore();\n    ctx.save();\n    clipVertical(ctx, target, area.bottom);\n  }\n  fill(ctx, {line, target, color: below, scale, property});\n  ctx.restore();\n}\nfunction clipVertical(ctx, target, clipY) {\n  const {segments, points} = target;\n  let first = true;\n  let lineLoop = false;\n  ctx.beginPath();\n  for (const segment of segments) {\n    const {start, end} = segment;\n    const firstPoint = points[start];\n    const lastPoint = points[_findSegmentEnd(start, end, points)];\n    if (first) {\n      ctx.moveTo(firstPoint.x, firstPoint.y);\n      first = false;\n    } else {\n      ctx.lineTo(firstPoint.x, clipY);\n      ctx.lineTo(firstPoint.x, firstPoint.y);\n    }\n    lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});\n    if (lineLoop) {\n      ctx.closePath();\n    } else {\n      ctx.lineTo(lastPoint.x, clipY);\n    }\n  }\n  ctx.lineTo(target.first().x, clipY);\n  ctx.closePath();\n  ctx.clip();\n}\nfunction fill(ctx, cfg) {\n  const {line, target, property, color, scale} = cfg;\n  const segments = _segments(line, target, property);\n  for (const {source: src, target: tgt, start, end} of segments) {\n    const {style: {backgroundColor = color} = {}} = src;\n    const notShape = target !== true;\n    ctx.save();\n    ctx.fillStyle = backgroundColor;\n    clipBounds(ctx, scale, notShape && _getBounds(property, start, end));\n    ctx.beginPath();\n    const lineLoop = !!line.pathSegment(ctx, src);\n    let loop;\n    if (notShape) {\n      if (lineLoop) {\n        ctx.closePath();\n      } else {\n        interpolatedLineTo(ctx, target, end, property);\n      }\n      const targetLoop = !!target.pathSegment(ctx, tgt, {move: lineLoop, reverse: true});\n      loop = lineLoop && targetLoop;\n      if (!loop) {\n        interpolatedLineTo(ctx, target, start, property);\n      }\n    }\n    ctx.closePath();\n    ctx.fill(loop ? 'evenodd' : 'nonzero');\n    ctx.restore();\n  }\n}\nfunction clipBounds(ctx, scale, bounds) {\n  const {top, bottom} = scale.chart.chartArea;\n  const {property, start, end} = bounds || {};\n  if (property === 'x') {\n    ctx.beginPath();\n    ctx.rect(start, top, end - start, bottom - top);\n    ctx.clip();\n  }\n}\nfunction interpolatedLineTo(ctx, target, point, property) {\n  const interpolatedPoint = target.interpolate(point, property);\n  if (interpolatedPoint) {\n    ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n  }\n}\n\nvar index = {\n  id: 'filler',\n  afterDatasetsUpdate(chart, _args, options) {\n    const count = (chart.data.datasets || []).length;\n    const sources = [];\n    let meta, i, line, source;\n    for (i = 0; i < count; ++i) {\n      meta = chart.getDatasetMeta(i);\n      line = meta.dataset;\n      source = null;\n      if (line && line.options && line instanceof LineElement) {\n        source = {\n          visible: chart.isDatasetVisible(i),\n          index: i,\n          fill: _decodeFill(line, i, count),\n          chart,\n          axis: meta.controller.options.indexAxis,\n          scale: meta.vScale,\n          line,\n        };\n      }\n      meta.$filler = source;\n      sources.push(source);\n    }\n    for (i = 0; i < count; ++i) {\n      source = sources[i];\n      if (!source || source.fill === false) {\n        continue;\n      }\n      source.fill = _resolveTarget(sources, i, options.propagate);\n    }\n  },\n  beforeDraw(chart, _args, options) {\n    const draw = options.drawTime === 'beforeDraw';\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    const area = chart.chartArea;\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      const source = metasets[i].$filler;\n      if (!source) {\n        continue;\n      }\n      source.line.updateControlPoints(area, source.axis);\n      if (draw && source.fill) {\n        _drawfill(chart.ctx, source, area);\n      }\n    }\n  },\n  beforeDatasetsDraw(chart, _args, options) {\n    if (options.drawTime !== 'beforeDatasetsDraw') {\n      return;\n    }\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      const source = metasets[i].$filler;\n      if (_shouldApplyFill(source)) {\n        _drawfill(chart.ctx, source, chart.chartArea);\n      }\n    }\n  },\n  beforeDatasetDraw(chart, args, options) {\n    const source = args.meta.$filler;\n    if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n      return;\n    }\n    _drawfill(chart.ctx, source, chart.chartArea);\n  },\n  defaults: {\n    propagate: true,\n    drawTime: 'beforeDatasetDraw'\n  }\n};\n\nconst getBoxSize = (labelOpts, fontSize) => {\n  let {boxHeight = fontSize, boxWidth = fontSize} = labelOpts;\n  if (labelOpts.usePointStyle) {\n    boxHeight = Math.min(boxHeight, fontSize);\n    boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n  }\n  return {\n    boxWidth,\n    boxHeight,\n    itemHeight: Math.max(fontSize, boxHeight)\n  };\n};\nconst itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nclass Legend extends Element {\n  constructor(config) {\n    super();\n    this._added = false;\n    this.legendHitBoxes = [];\n    this._hoveredItem = null;\n    this.doughnutMode = false;\n    this.chart = config.chart;\n    this.options = config.options;\n    this.ctx = config.ctx;\n    this.legendItems = undefined;\n    this.columnSizes = undefined;\n    this.lineWidths = undefined;\n    this.maxHeight = undefined;\n    this.maxWidth = undefined;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.height = undefined;\n    this.width = undefined;\n    this._margins = undefined;\n    this.position = undefined;\n    this.weight = undefined;\n    this.fullSize = undefined;\n  }\n  update(maxWidth, maxHeight, margins) {\n    this.maxWidth = maxWidth;\n    this.maxHeight = maxHeight;\n    this._margins = margins;\n    this.setDimensions();\n    this.buildLabels();\n    this.fit();\n  }\n  setDimensions() {\n    if (this.isHorizontal()) {\n      this.width = this.maxWidth;\n      this.left = this._margins.left;\n      this.right = this.width;\n    } else {\n      this.height = this.maxHeight;\n      this.top = this._margins.top;\n      this.bottom = this.height;\n    }\n  }\n  buildLabels() {\n    const labelOpts = this.options.labels || {};\n    let legendItems = callback(labelOpts.generateLabels, [this.chart], this) || [];\n    if (labelOpts.filter) {\n      legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data));\n    }\n    if (labelOpts.sort) {\n      legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));\n    }\n    if (this.options.reverse) {\n      legendItems.reverse();\n    }\n    this.legendItems = legendItems;\n  }\n  fit() {\n    const {options, ctx} = this;\n    if (!options.display) {\n      this.width = this.height = 0;\n      return;\n    }\n    const labelOpts = options.labels;\n    const labelFont = toFont(labelOpts.font);\n    const fontSize = labelFont.size;\n    const titleHeight = this._computeTitleHeight();\n    const {boxWidth, itemHeight} = getBoxSize(labelOpts, fontSize);\n    let width, height;\n    ctx.font = labelFont.string;\n    if (this.isHorizontal()) {\n      width = this.maxWidth;\n      height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n    } else {\n      height = this.maxHeight;\n      width = this._fitCols(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n    }\n    this.width = Math.min(width, options.maxWidth || this.maxWidth);\n    this.height = Math.min(height, options.maxHeight || this.maxHeight);\n  }\n  _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n    const {ctx, maxWidth, options: {labels: {padding}}} = this;\n    const hitboxes = this.legendHitBoxes = [];\n    const lineWidths = this.lineWidths = [0];\n    const lineHeight = itemHeight + padding;\n    let totalHeight = titleHeight;\n    ctx.textAlign = 'left';\n    ctx.textBaseline = 'middle';\n    let row = -1;\n    let top = -lineHeight;\n    this.legendItems.forEach((legendItem, i) => {\n      const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n      if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n        totalHeight += lineHeight;\n        lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n        top += lineHeight;\n        row++;\n      }\n      hitboxes[i] = {left: 0, top, row, width: itemWidth, height: itemHeight};\n      lineWidths[lineWidths.length - 1] += itemWidth + padding;\n    });\n    return totalHeight;\n  }\n  _fitCols(titleHeight, fontSize, boxWidth, itemHeight) {\n    const {ctx, maxHeight, options: {labels: {padding}}} = this;\n    const hitboxes = this.legendHitBoxes = [];\n    const columnSizes = this.columnSizes = [];\n    const heightLimit = maxHeight - titleHeight;\n    let totalWidth = padding;\n    let currentColWidth = 0;\n    let currentColHeight = 0;\n    let left = 0;\n    let col = 0;\n    this.legendItems.forEach((legendItem, i) => {\n      const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n      if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n        totalWidth += currentColWidth + padding;\n        columnSizes.push({width: currentColWidth, height: currentColHeight});\n        left += currentColWidth + padding;\n        col++;\n        currentColWidth = currentColHeight = 0;\n      }\n      hitboxes[i] = {left, top: currentColHeight, col, width: itemWidth, height: itemHeight};\n      currentColWidth = Math.max(currentColWidth, itemWidth);\n      currentColHeight += itemHeight + padding;\n    });\n    totalWidth += currentColWidth;\n    columnSizes.push({width: currentColWidth, height: currentColHeight});\n    return totalWidth;\n  }\n  adjustHitBoxes() {\n    if (!this.options.display) {\n      return;\n    }\n    const titleHeight = this._computeTitleHeight();\n    const {legendHitBoxes: hitboxes, options: {align, labels: {padding}, rtl}} = this;\n    const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n    if (this.isHorizontal()) {\n      let row = 0;\n      let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n      for (const hitbox of hitboxes) {\n        if (row !== hitbox.row) {\n          row = hitbox.row;\n          left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n        }\n        hitbox.top += this.top + titleHeight + padding;\n        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n        left += hitbox.width + padding;\n      }\n    } else {\n      let col = 0;\n      let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n      for (const hitbox of hitboxes) {\n        if (hitbox.col !== col) {\n          col = hitbox.col;\n          top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n        }\n        hitbox.top = top;\n        hitbox.left += this.left + padding;\n        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n        top += hitbox.height + padding;\n      }\n    }\n  }\n  isHorizontal() {\n    return this.options.position === 'top' || this.options.position === 'bottom';\n  }\n  draw() {\n    if (this.options.display) {\n      const ctx = this.ctx;\n      clipArea(ctx, this);\n      this._draw();\n      unclipArea(ctx);\n    }\n  }\n  _draw() {\n    const {options: opts, columnSizes, lineWidths, ctx} = this;\n    const {align, labels: labelOpts} = opts;\n    const defaultColor = defaults.color;\n    const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n    const labelFont = toFont(labelOpts.font);\n    const {color: fontColor, padding} = labelOpts;\n    const fontSize = labelFont.size;\n    const halfFontSize = fontSize / 2;\n    let cursor;\n    this.drawTitle();\n    ctx.textAlign = rtlHelper.textAlign('left');\n    ctx.textBaseline = 'middle';\n    ctx.lineWidth = 0.5;\n    ctx.font = labelFont.string;\n    const {boxWidth, boxHeight, itemHeight} = getBoxSize(labelOpts, fontSize);\n    const drawLegendBox = function(x, y, legendItem) {\n      if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n        return;\n      }\n      ctx.save();\n      const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n      ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n      ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n      ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n      ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n      ctx.lineWidth = lineWidth;\n      ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n      ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n      if (labelOpts.usePointStyle) {\n        const drawOptions = {\n          radius: boxHeight * Math.SQRT2 / 2,\n          pointStyle: legendItem.pointStyle,\n          rotation: legendItem.rotation,\n          borderWidth: lineWidth\n        };\n        const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n        const centerY = y + halfFontSize;\n        drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n      } else {\n        const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n        const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n        const borderRadius = toTRBLCorners(legendItem.borderRadius);\n        ctx.beginPath();\n        if (Object.values(borderRadius).some(v => v !== 0)) {\n          addRoundedRectPath(ctx, {\n            x: xBoxLeft,\n            y: yBoxTop,\n            w: boxWidth,\n            h: boxHeight,\n            radius: borderRadius,\n          });\n        } else {\n          ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n        }\n        ctx.fill();\n        if (lineWidth !== 0) {\n          ctx.stroke();\n        }\n      }\n      ctx.restore();\n    };\n    const fillText = function(x, y, legendItem) {\n      renderText(ctx, legendItem.text, x, y + (itemHeight / 2), labelFont, {\n        strikethrough: legendItem.hidden,\n        textAlign: rtlHelper.textAlign(legendItem.textAlign)\n      });\n    };\n    const isHorizontal = this.isHorizontal();\n    const titleHeight = this._computeTitleHeight();\n    if (isHorizontal) {\n      cursor = {\n        x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n        y: this.top + padding + titleHeight,\n        line: 0\n      };\n    } else {\n      cursor = {\n        x: this.left + padding,\n        y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n        line: 0\n      };\n    }\n    overrideTextDirection(this.ctx, opts.textDirection);\n    const lineHeight = itemHeight + padding;\n    this.legendItems.forEach((legendItem, i) => {\n      ctx.strokeStyle = legendItem.fontColor || fontColor;\n      ctx.fillStyle = legendItem.fontColor || fontColor;\n      const textWidth = ctx.measureText(legendItem.text).width;\n      const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n      const width = boxWidth + halfFontSize + textWidth;\n      let x = cursor.x;\n      let y = cursor.y;\n      rtlHelper.setWidth(this.width);\n      if (isHorizontal) {\n        if (i > 0 && x + width + padding > this.right) {\n          y = cursor.y += lineHeight;\n          cursor.line++;\n          x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n        }\n      } else if (i > 0 && y + lineHeight > this.bottom) {\n        x = cursor.x = x + columnSizes[cursor.line].width + padding;\n        cursor.line++;\n        y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n      }\n      const realX = rtlHelper.x(x);\n      drawLegendBox(realX, y, legendItem);\n      x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n      fillText(rtlHelper.x(x), y, legendItem);\n      if (isHorizontal) {\n        cursor.x += width + padding;\n      } else {\n        cursor.y += lineHeight;\n      }\n    });\n    restoreTextDirection(this.ctx, opts.textDirection);\n  }\n  drawTitle() {\n    const opts = this.options;\n    const titleOpts = opts.title;\n    const titleFont = toFont(titleOpts.font);\n    const titlePadding = toPadding(titleOpts.padding);\n    if (!titleOpts.display) {\n      return;\n    }\n    const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n    const ctx = this.ctx;\n    const position = titleOpts.position;\n    const halfFontSize = titleFont.size / 2;\n    const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n    let y;\n    let left = this.left;\n    let maxWidth = this.width;\n    if (this.isHorizontal()) {\n      maxWidth = Math.max(...this.lineWidths);\n      y = this.top + topPaddingPlusHalfFontSize;\n      left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n    } else {\n      const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);\n      y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n    }\n    const x = _alignStartEnd(position, left, left + maxWidth);\n    ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n    ctx.textBaseline = 'middle';\n    ctx.strokeStyle = titleOpts.color;\n    ctx.fillStyle = titleOpts.color;\n    ctx.font = titleFont.string;\n    renderText(ctx, titleOpts.text, x, y, titleFont);\n  }\n  _computeTitleHeight() {\n    const titleOpts = this.options.title;\n    const titleFont = toFont(titleOpts.font);\n    const titlePadding = toPadding(titleOpts.padding);\n    return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n  }\n  _getLegendItemAt(x, y) {\n    let i, hitBox, lh;\n    if (_isBetween(x, this.left, this.right)\n      && _isBetween(y, this.top, this.bottom)) {\n      lh = this.legendHitBoxes;\n      for (i = 0; i < lh.length; ++i) {\n        hitBox = lh[i];\n        if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width)\n          && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n          return this.legendItems[i];\n        }\n      }\n    }\n    return null;\n  }\n  handleEvent(e) {\n    const opts = this.options;\n    if (!isListened(e.type, opts)) {\n      return;\n    }\n    const hoveredItem = this._getLegendItemAt(e.x, e.y);\n    if (e.type === 'mousemove' || e.type === 'mouseout') {\n      const previous = this._hoveredItem;\n      const sameItem = itemsEqual(previous, hoveredItem);\n      if (previous && !sameItem) {\n        callback(opts.onLeave, [e, previous, this], this);\n      }\n      this._hoveredItem = hoveredItem;\n      if (hoveredItem && !sameItem) {\n        callback(opts.onHover, [e, hoveredItem, this], this);\n      }\n    } else if (hoveredItem) {\n      callback(opts.onClick, [e, hoveredItem, this], this);\n    }\n  }\n}\nfunction isListened(type, opts) {\n  if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n    return true;\n  }\n  if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n    return true;\n  }\n  return false;\n}\nvar plugin_legend = {\n  id: 'legend',\n  _element: Legend,\n  start(chart, _args, options) {\n    const legend = chart.legend = new Legend({ctx: chart.ctx, options, chart});\n    layouts.configure(chart, legend, options);\n    layouts.addBox(chart, legend);\n  },\n  stop(chart) {\n    layouts.removeBox(chart, chart.legend);\n    delete chart.legend;\n  },\n  beforeUpdate(chart, _args, options) {\n    const legend = chart.legend;\n    layouts.configure(chart, legend, options);\n    legend.options = options;\n  },\n  afterUpdate(chart) {\n    const legend = chart.legend;\n    legend.buildLabels();\n    legend.adjustHitBoxes();\n  },\n  afterEvent(chart, args) {\n    if (!args.replay) {\n      chart.legend.handleEvent(args.event);\n    }\n  },\n  defaults: {\n    display: true,\n    position: 'top',\n    align: 'center',\n    fullSize: true,\n    reverse: false,\n    weight: 1000,\n    onClick(e, legendItem, legend) {\n      const index = legendItem.datasetIndex;\n      const ci = legend.chart;\n      if (ci.isDatasetVisible(index)) {\n        ci.hide(index);\n        legendItem.hidden = true;\n      } else {\n        ci.show(index);\n        legendItem.hidden = false;\n      }\n    },\n    onHover: null,\n    onLeave: null,\n    labels: {\n      color: (ctx) => ctx.chart.options.color,\n      boxWidth: 40,\n      padding: 10,\n      generateLabels(chart) {\n        const datasets = chart.data.datasets;\n        const {labels: {usePointStyle, pointStyle, textAlign, color}} = chart.legend.options;\n        return chart._getSortedDatasetMetas().map((meta) => {\n          const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n          const borderWidth = toPadding(style.borderWidth);\n          return {\n            text: datasets[meta.index].label,\n            fillStyle: style.backgroundColor,\n            fontColor: color,\n            hidden: !meta.visible,\n            lineCap: style.borderCapStyle,\n            lineDash: style.borderDash,\n            lineDashOffset: style.borderDashOffset,\n            lineJoin: style.borderJoinStyle,\n            lineWidth: (borderWidth.width + borderWidth.height) / 4,\n            strokeStyle: style.borderColor,\n            pointStyle: pointStyle || style.pointStyle,\n            rotation: style.rotation,\n            textAlign: textAlign || style.textAlign,\n            borderRadius: 0,\n            datasetIndex: meta.index\n          };\n        }, this);\n      }\n    },\n    title: {\n      color: (ctx) => ctx.chart.options.color,\n      display: false,\n      position: 'center',\n      text: '',\n    }\n  },\n  descriptors: {\n    _scriptable: (name) => !name.startsWith('on'),\n    labels: {\n      _scriptable: (name) => !['generateLabels', 'filter', 'sort'].includes(name),\n    }\n  },\n};\n\nclass Title extends Element {\n  constructor(config) {\n    super();\n    this.chart = config.chart;\n    this.options = config.options;\n    this.ctx = config.ctx;\n    this._padding = undefined;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this.position = undefined;\n    this.weight = undefined;\n    this.fullSize = undefined;\n  }\n  update(maxWidth, maxHeight) {\n    const opts = this.options;\n    this.left = 0;\n    this.top = 0;\n    if (!opts.display) {\n      this.width = this.height = this.right = this.bottom = 0;\n      return;\n    }\n    this.width = this.right = maxWidth;\n    this.height = this.bottom = maxHeight;\n    const lineCount = isArray(opts.text) ? opts.text.length : 1;\n    this._padding = toPadding(opts.padding);\n    const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n    if (this.isHorizontal()) {\n      this.height = textSize;\n    } else {\n      this.width = textSize;\n    }\n  }\n  isHorizontal() {\n    const pos = this.options.position;\n    return pos === 'top' || pos === 'bottom';\n  }\n  _drawArgs(offset) {\n    const {top, left, bottom, right, options} = this;\n    const align = options.align;\n    let rotation = 0;\n    let maxWidth, titleX, titleY;\n    if (this.isHorizontal()) {\n      titleX = _alignStartEnd(align, left, right);\n      titleY = top + offset;\n      maxWidth = right - left;\n    } else {\n      if (options.position === 'left') {\n        titleX = left + offset;\n        titleY = _alignStartEnd(align, bottom, top);\n        rotation = PI * -0.5;\n      } else {\n        titleX = right - offset;\n        titleY = _alignStartEnd(align, top, bottom);\n        rotation = PI * 0.5;\n      }\n      maxWidth = bottom - top;\n    }\n    return {titleX, titleY, maxWidth, rotation};\n  }\n  draw() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    if (!opts.display) {\n      return;\n    }\n    const fontOpts = toFont(opts.font);\n    const lineHeight = fontOpts.lineHeight;\n    const offset = lineHeight / 2 + this._padding.top;\n    const {titleX, titleY, maxWidth, rotation} = this._drawArgs(offset);\n    renderText(ctx, opts.text, 0, 0, fontOpts, {\n      color: opts.color,\n      maxWidth,\n      rotation,\n      textAlign: _toLeftRightCenter(opts.align),\n      textBaseline: 'middle',\n      translation: [titleX, titleY],\n    });\n  }\n}\nfunction createTitle(chart, titleOpts) {\n  const title = new Title({\n    ctx: chart.ctx,\n    options: titleOpts,\n    chart\n  });\n  layouts.configure(chart, title, titleOpts);\n  layouts.addBox(chart, title);\n  chart.titleBlock = title;\n}\nvar plugin_title = {\n  id: 'title',\n  _element: Title,\n  start(chart, _args, options) {\n    createTitle(chart, options);\n  },\n  stop(chart) {\n    const titleBlock = chart.titleBlock;\n    layouts.removeBox(chart, titleBlock);\n    delete chart.titleBlock;\n  },\n  beforeUpdate(chart, _args, options) {\n    const title = chart.titleBlock;\n    layouts.configure(chart, title, options);\n    title.options = options;\n  },\n  defaults: {\n    align: 'center',\n    display: false,\n    font: {\n      weight: 'bold',\n    },\n    fullSize: true,\n    padding: 10,\n    position: 'top',\n    text: '',\n    weight: 2000\n  },\n  defaultRoutes: {\n    color: 'color'\n  },\n  descriptors: {\n    _scriptable: true,\n    _indexable: false,\n  },\n};\n\nconst map = new WeakMap();\nvar plugin_subtitle = {\n  id: 'subtitle',\n  start(chart, _args, options) {\n    const title = new Title({\n      ctx: chart.ctx,\n      options,\n      chart\n    });\n    layouts.configure(chart, title, options);\n    layouts.addBox(chart, title);\n    map.set(chart, title);\n  },\n  stop(chart) {\n    layouts.removeBox(chart, map.get(chart));\n    map.delete(chart);\n  },\n  beforeUpdate(chart, _args, options) {\n    const title = map.get(chart);\n    layouts.configure(chart, title, options);\n    title.options = options;\n  },\n  defaults: {\n    align: 'center',\n    display: false,\n    font: {\n      weight: 'normal',\n    },\n    fullSize: true,\n    padding: 0,\n    position: 'top',\n    text: '',\n    weight: 1500\n  },\n  defaultRoutes: {\n    color: 'color'\n  },\n  descriptors: {\n    _scriptable: true,\n    _indexable: false,\n  },\n};\n\nconst positioners = {\n  average(items) {\n    if (!items.length) {\n      return false;\n    }\n    let i, len;\n    let x = 0;\n    let y = 0;\n    let count = 0;\n    for (i = 0, len = items.length; i < len; ++i) {\n      const el = items[i].element;\n      if (el && el.hasValue()) {\n        const pos = el.tooltipPosition();\n        x += pos.x;\n        y += pos.y;\n        ++count;\n      }\n    }\n    return {\n      x: x / count,\n      y: y / count\n    };\n  },\n  nearest(items, eventPosition) {\n    if (!items.length) {\n      return false;\n    }\n    let x = eventPosition.x;\n    let y = eventPosition.y;\n    let minDistance = Number.POSITIVE_INFINITY;\n    let i, len, nearestElement;\n    for (i = 0, len = items.length; i < len; ++i) {\n      const el = items[i].element;\n      if (el && el.hasValue()) {\n        const center = el.getCenterPoint();\n        const d = distanceBetweenPoints(eventPosition, center);\n        if (d < minDistance) {\n          minDistance = d;\n          nearestElement = el;\n        }\n      }\n    }\n    if (nearestElement) {\n      const tp = nearestElement.tooltipPosition();\n      x = tp.x;\n      y = tp.y;\n    }\n    return {\n      x,\n      y\n    };\n  }\n};\nfunction pushOrConcat(base, toPush) {\n  if (toPush) {\n    if (isArray(toPush)) {\n      Array.prototype.push.apply(base, toPush);\n    } else {\n      base.push(toPush);\n    }\n  }\n  return base;\n}\nfunction splitNewlines(str) {\n  if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n    return str.split('\\n');\n  }\n  return str;\n}\nfunction createTooltipItem(chart, item) {\n  const {element, datasetIndex, index} = item;\n  const controller = chart.getDatasetMeta(datasetIndex).controller;\n  const {label, value} = controller.getLabelAndValue(index);\n  return {\n    chart,\n    label,\n    parsed: controller.getParsed(index),\n    raw: chart.data.datasets[datasetIndex].data[index],\n    formattedValue: value,\n    dataset: controller.getDataset(),\n    dataIndex: index,\n    datasetIndex,\n    element\n  };\n}\nfunction getTooltipSize(tooltip, options) {\n  const ctx = tooltip.chart.ctx;\n  const {body, footer, title} = tooltip;\n  const {boxWidth, boxHeight} = options;\n  const bodyFont = toFont(options.bodyFont);\n  const titleFont = toFont(options.titleFont);\n  const footerFont = toFont(options.footerFont);\n  const titleLineCount = title.length;\n  const footerLineCount = footer.length;\n  const bodyLineItemCount = body.length;\n  const padding = toPadding(options.padding);\n  let height = padding.height;\n  let width = 0;\n  let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n  combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n  if (titleLineCount) {\n    height += titleLineCount * titleFont.lineHeight\n\t\t\t+ (titleLineCount - 1) * options.titleSpacing\n\t\t\t+ options.titleMarginBottom;\n  }\n  if (combinedBodyLength) {\n    const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n    height += bodyLineItemCount * bodyLineHeight\n\t\t\t+ (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight\n\t\t\t+ (combinedBodyLength - 1) * options.bodySpacing;\n  }\n  if (footerLineCount) {\n    height += options.footerMarginTop\n\t\t\t+ footerLineCount * footerFont.lineHeight\n\t\t\t+ (footerLineCount - 1) * options.footerSpacing;\n  }\n  let widthPadding = 0;\n  const maxLineWidth = function(line) {\n    width = Math.max(width, ctx.measureText(line).width + widthPadding);\n  };\n  ctx.save();\n  ctx.font = titleFont.string;\n  each(tooltip.title, maxLineWidth);\n  ctx.font = bodyFont.string;\n  each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n  widthPadding = options.displayColors ? (boxWidth + 2 + options.boxPadding) : 0;\n  each(body, (bodyItem) => {\n    each(bodyItem.before, maxLineWidth);\n    each(bodyItem.lines, maxLineWidth);\n    each(bodyItem.after, maxLineWidth);\n  });\n  widthPadding = 0;\n  ctx.font = footerFont.string;\n  each(tooltip.footer, maxLineWidth);\n  ctx.restore();\n  width += padding.width;\n  return {width, height};\n}\nfunction determineYAlign(chart, size) {\n  const {y, height} = size;\n  if (y < height / 2) {\n    return 'top';\n  } else if (y > (chart.height - height / 2)) {\n    return 'bottom';\n  }\n  return 'center';\n}\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n  const {x, width} = size;\n  const caret = options.caretSize + options.caretPadding;\n  if (xAlign === 'left' && x + width + caret > chart.width) {\n    return true;\n  }\n  if (xAlign === 'right' && x - width - caret < 0) {\n    return true;\n  }\n}\nfunction determineXAlign(chart, options, size, yAlign) {\n  const {x, width} = size;\n  const {width: chartWidth, chartArea: {left, right}} = chart;\n  let xAlign = 'center';\n  if (yAlign === 'center') {\n    xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n  } else if (x <= width / 2) {\n    xAlign = 'left';\n  } else if (x >= chartWidth - width / 2) {\n    xAlign = 'right';\n  }\n  if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n    xAlign = 'center';\n  }\n  return xAlign;\n}\nfunction determineAlignment(chart, options, size) {\n  const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n  return {\n    xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n    yAlign\n  };\n}\nfunction alignX(size, xAlign) {\n  let {x, width} = size;\n  if (xAlign === 'right') {\n    x -= width;\n  } else if (xAlign === 'center') {\n    x -= (width / 2);\n  }\n  return x;\n}\nfunction alignY(size, yAlign, paddingAndSize) {\n  let {y, height} = size;\n  if (yAlign === 'top') {\n    y += paddingAndSize;\n  } else if (yAlign === 'bottom') {\n    y -= height + paddingAndSize;\n  } else {\n    y -= (height / 2);\n  }\n  return y;\n}\nfunction getBackgroundPoint(options, size, alignment, chart) {\n  const {caretSize, caretPadding, cornerRadius} = options;\n  const {xAlign, yAlign} = alignment;\n  const paddingAndSize = caretSize + caretPadding;\n  const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n  let x = alignX(size, xAlign);\n  const y = alignY(size, yAlign, paddingAndSize);\n  if (yAlign === 'center') {\n    if (xAlign === 'left') {\n      x += paddingAndSize;\n    } else if (xAlign === 'right') {\n      x -= paddingAndSize;\n    }\n  } else if (xAlign === 'left') {\n    x -= Math.max(topLeft, bottomLeft) + caretSize;\n  } else if (xAlign === 'right') {\n    x += Math.max(topRight, bottomRight) + caretSize;\n  }\n  return {\n    x: _limitValue(x, 0, chart.width - size.width),\n    y: _limitValue(y, 0, chart.height - size.height)\n  };\n}\nfunction getAlignedX(tooltip, align, options) {\n  const padding = toPadding(options.padding);\n  return align === 'center'\n    ? tooltip.x + tooltip.width / 2\n    : align === 'right'\n      ? tooltip.x + tooltip.width - padding.right\n      : tooltip.x + padding.left;\n}\nfunction getBeforeAfterBodyLines(callback) {\n  return pushOrConcat([], splitNewlines(callback));\n}\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n  return createContext(parent, {\n    tooltip,\n    tooltipItems,\n    type: 'tooltip'\n  });\n}\nfunction overrideCallbacks(callbacks, context) {\n  const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n  return override ? callbacks.override(override) : callbacks;\n}\nclass Tooltip extends Element {\n  constructor(config) {\n    super();\n    this.opacity = 0;\n    this._active = [];\n    this._eventPosition = undefined;\n    this._size = undefined;\n    this._cachedAnimations = undefined;\n    this._tooltipItems = [];\n    this.$animations = undefined;\n    this.$context = undefined;\n    this.chart = config.chart || config._chart;\n    this._chart = this.chart;\n    this.options = config.options;\n    this.dataPoints = undefined;\n    this.title = undefined;\n    this.beforeBody = undefined;\n    this.body = undefined;\n    this.afterBody = undefined;\n    this.footer = undefined;\n    this.xAlign = undefined;\n    this.yAlign = undefined;\n    this.x = undefined;\n    this.y = undefined;\n    this.height = undefined;\n    this.width = undefined;\n    this.caretX = undefined;\n    this.caretY = undefined;\n    this.labelColors = undefined;\n    this.labelPointStyles = undefined;\n    this.labelTextColors = undefined;\n  }\n  initialize(options) {\n    this.options = options;\n    this._cachedAnimations = undefined;\n    this.$context = undefined;\n  }\n  _resolveAnimations() {\n    const cached = this._cachedAnimations;\n    if (cached) {\n      return cached;\n    }\n    const chart = this.chart;\n    const options = this.options.setContext(this.getContext());\n    const opts = options.enabled && chart.options.animation && options.animations;\n    const animations = new Animations(this.chart, opts);\n    if (opts._cacheable) {\n      this._cachedAnimations = Object.freeze(animations);\n    }\n    return animations;\n  }\n  getContext() {\n    return this.$context ||\n\t\t\t(this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n  }\n  getTitle(context, options) {\n    const {callbacks} = options;\n    const beforeTitle = callbacks.beforeTitle.apply(this, [context]);\n    const title = callbacks.title.apply(this, [context]);\n    const afterTitle = callbacks.afterTitle.apply(this, [context]);\n    let lines = [];\n    lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n    lines = pushOrConcat(lines, splitNewlines(title));\n    lines = pushOrConcat(lines, splitNewlines(afterTitle));\n    return lines;\n  }\n  getBeforeBody(tooltipItems, options) {\n    return getBeforeAfterBodyLines(options.callbacks.beforeBody.apply(this, [tooltipItems]));\n  }\n  getBody(tooltipItems, options) {\n    const {callbacks} = options;\n    const bodyItems = [];\n    each(tooltipItems, (context) => {\n      const bodyItem = {\n        before: [],\n        lines: [],\n        after: []\n      };\n      const scoped = overrideCallbacks(callbacks, context);\n      pushOrConcat(bodyItem.before, splitNewlines(scoped.beforeLabel.call(this, context)));\n      pushOrConcat(bodyItem.lines, scoped.label.call(this, context));\n      pushOrConcat(bodyItem.after, splitNewlines(scoped.afterLabel.call(this, context)));\n      bodyItems.push(bodyItem);\n    });\n    return bodyItems;\n  }\n  getAfterBody(tooltipItems, options) {\n    return getBeforeAfterBodyLines(options.callbacks.afterBody.apply(this, [tooltipItems]));\n  }\n  getFooter(tooltipItems, options) {\n    const {callbacks} = options;\n    const beforeFooter = callbacks.beforeFooter.apply(this, [tooltipItems]);\n    const footer = callbacks.footer.apply(this, [tooltipItems]);\n    const afterFooter = callbacks.afterFooter.apply(this, [tooltipItems]);\n    let lines = [];\n    lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n    lines = pushOrConcat(lines, splitNewlines(footer));\n    lines = pushOrConcat(lines, splitNewlines(afterFooter));\n    return lines;\n  }\n  _createItems(options) {\n    const active = this._active;\n    const data = this.chart.data;\n    const labelColors = [];\n    const labelPointStyles = [];\n    const labelTextColors = [];\n    let tooltipItems = [];\n    let i, len;\n    for (i = 0, len = active.length; i < len; ++i) {\n      tooltipItems.push(createTooltipItem(this.chart, active[i]));\n    }\n    if (options.filter) {\n      tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));\n    }\n    if (options.itemSort) {\n      tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));\n    }\n    each(tooltipItems, (context) => {\n      const scoped = overrideCallbacks(options.callbacks, context);\n      labelColors.push(scoped.labelColor.call(this, context));\n      labelPointStyles.push(scoped.labelPointStyle.call(this, context));\n      labelTextColors.push(scoped.labelTextColor.call(this, context));\n    });\n    this.labelColors = labelColors;\n    this.labelPointStyles = labelPointStyles;\n    this.labelTextColors = labelTextColors;\n    this.dataPoints = tooltipItems;\n    return tooltipItems;\n  }\n  update(changed, replay) {\n    const options = this.options.setContext(this.getContext());\n    const active = this._active;\n    let properties;\n    let tooltipItems = [];\n    if (!active.length) {\n      if (this.opacity !== 0) {\n        properties = {\n          opacity: 0\n        };\n      }\n    } else {\n      const position = positioners[options.position].call(this, active, this._eventPosition);\n      tooltipItems = this._createItems(options);\n      this.title = this.getTitle(tooltipItems, options);\n      this.beforeBody = this.getBeforeBody(tooltipItems, options);\n      this.body = this.getBody(tooltipItems, options);\n      this.afterBody = this.getAfterBody(tooltipItems, options);\n      this.footer = this.getFooter(tooltipItems, options);\n      const size = this._size = getTooltipSize(this, options);\n      const positionAndSize = Object.assign({}, position, size);\n      const alignment = determineAlignment(this.chart, options, positionAndSize);\n      const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n      this.xAlign = alignment.xAlign;\n      this.yAlign = alignment.yAlign;\n      properties = {\n        opacity: 1,\n        x: backgroundPoint.x,\n        y: backgroundPoint.y,\n        width: size.width,\n        height: size.height,\n        caretX: position.x,\n        caretY: position.y\n      };\n    }\n    this._tooltipItems = tooltipItems;\n    this.$context = undefined;\n    if (properties) {\n      this._resolveAnimations().update(this, properties);\n    }\n    if (changed && options.external) {\n      options.external.call(this, {chart: this.chart, tooltip: this, replay});\n    }\n  }\n  drawCaret(tooltipPoint, ctx, size, options) {\n    const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n    ctx.lineTo(caretPosition.x1, caretPosition.y1);\n    ctx.lineTo(caretPosition.x2, caretPosition.y2);\n    ctx.lineTo(caretPosition.x3, caretPosition.y3);\n  }\n  getCaretPosition(tooltipPoint, size, options) {\n    const {xAlign, yAlign} = this;\n    const {caretSize, cornerRadius} = options;\n    const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n    const {x: ptX, y: ptY} = tooltipPoint;\n    const {width, height} = size;\n    let x1, x2, x3, y1, y2, y3;\n    if (yAlign === 'center') {\n      y2 = ptY + (height / 2);\n      if (xAlign === 'left') {\n        x1 = ptX;\n        x2 = x1 - caretSize;\n        y1 = y2 + caretSize;\n        y3 = y2 - caretSize;\n      } else {\n        x1 = ptX + width;\n        x2 = x1 + caretSize;\n        y1 = y2 - caretSize;\n        y3 = y2 + caretSize;\n      }\n      x3 = x1;\n    } else {\n      if (xAlign === 'left') {\n        x2 = ptX + Math.max(topLeft, bottomLeft) + (caretSize);\n      } else if (xAlign === 'right') {\n        x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n      } else {\n        x2 = this.caretX;\n      }\n      if (yAlign === 'top') {\n        y1 = ptY;\n        y2 = y1 - caretSize;\n        x1 = x2 - caretSize;\n        x3 = x2 + caretSize;\n      } else {\n        y1 = ptY + height;\n        y2 = y1 + caretSize;\n        x1 = x2 + caretSize;\n        x3 = x2 - caretSize;\n      }\n      y3 = y1;\n    }\n    return {x1, x2, x3, y1, y2, y3};\n  }\n  drawTitle(pt, ctx, options) {\n    const title = this.title;\n    const length = title.length;\n    let titleFont, titleSpacing, i;\n    if (length) {\n      const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n      pt.x = getAlignedX(this, options.titleAlign, options);\n      ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n      ctx.textBaseline = 'middle';\n      titleFont = toFont(options.titleFont);\n      titleSpacing = options.titleSpacing;\n      ctx.fillStyle = options.titleColor;\n      ctx.font = titleFont.string;\n      for (i = 0; i < length; ++i) {\n        ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n        pt.y += titleFont.lineHeight + titleSpacing;\n        if (i + 1 === length) {\n          pt.y += options.titleMarginBottom - titleSpacing;\n        }\n      }\n    }\n  }\n  _drawColorBox(ctx, pt, i, rtlHelper, options) {\n    const labelColors = this.labelColors[i];\n    const labelPointStyle = this.labelPointStyles[i];\n    const {boxHeight, boxWidth, boxPadding} = options;\n    const bodyFont = toFont(options.bodyFont);\n    const colorX = getAlignedX(this, 'left', options);\n    const rtlColorX = rtlHelper.x(colorX);\n    const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n    const colorY = pt.y + yOffSet;\n    if (options.usePointStyle) {\n      const drawOptions = {\n        radius: Math.min(boxWidth, boxHeight) / 2,\n        pointStyle: labelPointStyle.pointStyle,\n        rotation: labelPointStyle.rotation,\n        borderWidth: 1\n      };\n      const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n      const centerY = colorY + boxHeight / 2;\n      ctx.strokeStyle = options.multiKeyBackground;\n      ctx.fillStyle = options.multiKeyBackground;\n      drawPoint(ctx, drawOptions, centerX, centerY);\n      ctx.strokeStyle = labelColors.borderColor;\n      ctx.fillStyle = labelColors.backgroundColor;\n      drawPoint(ctx, drawOptions, centerX, centerY);\n    } else {\n      ctx.lineWidth = isObject(labelColors.borderWidth) ? Math.max(...Object.values(labelColors.borderWidth)) : (labelColors.borderWidth || 1);\n      ctx.strokeStyle = labelColors.borderColor;\n      ctx.setLineDash(labelColors.borderDash || []);\n      ctx.lineDashOffset = labelColors.borderDashOffset || 0;\n      const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth - boxPadding);\n      const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - boxPadding - 2);\n      const borderRadius = toTRBLCorners(labelColors.borderRadius);\n      if (Object.values(borderRadius).some(v => v !== 0)) {\n        ctx.beginPath();\n        ctx.fillStyle = options.multiKeyBackground;\n        addRoundedRectPath(ctx, {\n          x: outerX,\n          y: colorY,\n          w: boxWidth,\n          h: boxHeight,\n          radius: borderRadius,\n        });\n        ctx.fill();\n        ctx.stroke();\n        ctx.fillStyle = labelColors.backgroundColor;\n        ctx.beginPath();\n        addRoundedRectPath(ctx, {\n          x: innerX,\n          y: colorY + 1,\n          w: boxWidth - 2,\n          h: boxHeight - 2,\n          radius: borderRadius,\n        });\n        ctx.fill();\n      } else {\n        ctx.fillStyle = options.multiKeyBackground;\n        ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n        ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n        ctx.fillStyle = labelColors.backgroundColor;\n        ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n      }\n    }\n    ctx.fillStyle = this.labelTextColors[i];\n  }\n  drawBody(pt, ctx, options) {\n    const {body} = this;\n    const {bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding} = options;\n    const bodyFont = toFont(options.bodyFont);\n    let bodyLineHeight = bodyFont.lineHeight;\n    let xLinePadding = 0;\n    const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n    const fillLineOfText = function(line) {\n      ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n      pt.y += bodyLineHeight + bodySpacing;\n    };\n    const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n    let bodyItem, textColor, lines, i, j, ilen, jlen;\n    ctx.textAlign = bodyAlign;\n    ctx.textBaseline = 'middle';\n    ctx.font = bodyFont.string;\n    pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n    ctx.fillStyle = options.bodyColor;\n    each(this.beforeBody, fillLineOfText);\n    xLinePadding = displayColors && bodyAlignForCalculation !== 'right'\n      ? bodyAlign === 'center' ? (boxWidth / 2 + boxPadding) : (boxWidth + 2 + boxPadding)\n      : 0;\n    for (i = 0, ilen = body.length; i < ilen; ++i) {\n      bodyItem = body[i];\n      textColor = this.labelTextColors[i];\n      ctx.fillStyle = textColor;\n      each(bodyItem.before, fillLineOfText);\n      lines = bodyItem.lines;\n      if (displayColors && lines.length) {\n        this._drawColorBox(ctx, pt, i, rtlHelper, options);\n        bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n      }\n      for (j = 0, jlen = lines.length; j < jlen; ++j) {\n        fillLineOfText(lines[j]);\n        bodyLineHeight = bodyFont.lineHeight;\n      }\n      each(bodyItem.after, fillLineOfText);\n    }\n    xLinePadding = 0;\n    bodyLineHeight = bodyFont.lineHeight;\n    each(this.afterBody, fillLineOfText);\n    pt.y -= bodySpacing;\n  }\n  drawFooter(pt, ctx, options) {\n    const footer = this.footer;\n    const length = footer.length;\n    let footerFont, i;\n    if (length) {\n      const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n      pt.x = getAlignedX(this, options.footerAlign, options);\n      pt.y += options.footerMarginTop;\n      ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n      ctx.textBaseline = 'middle';\n      footerFont = toFont(options.footerFont);\n      ctx.fillStyle = options.footerColor;\n      ctx.font = footerFont.string;\n      for (i = 0; i < length; ++i) {\n        ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n        pt.y += footerFont.lineHeight + options.footerSpacing;\n      }\n    }\n  }\n  drawBackground(pt, ctx, tooltipSize, options) {\n    const {xAlign, yAlign} = this;\n    const {x, y} = pt;\n    const {width, height} = tooltipSize;\n    const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(options.cornerRadius);\n    ctx.fillStyle = options.backgroundColor;\n    ctx.strokeStyle = options.borderColor;\n    ctx.lineWidth = options.borderWidth;\n    ctx.beginPath();\n    ctx.moveTo(x + topLeft, y);\n    if (yAlign === 'top') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + width - topRight, y);\n    ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n    if (yAlign === 'center' && xAlign === 'right') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + width, y + height - bottomRight);\n    ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n    if (yAlign === 'bottom') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + bottomLeft, y + height);\n    ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n    if (yAlign === 'center' && xAlign === 'left') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x, y + topLeft);\n    ctx.quadraticCurveTo(x, y, x + topLeft, y);\n    ctx.closePath();\n    ctx.fill();\n    if (options.borderWidth > 0) {\n      ctx.stroke();\n    }\n  }\n  _updateAnimationTarget(options) {\n    const chart = this.chart;\n    const anims = this.$animations;\n    const animX = anims && anims.x;\n    const animY = anims && anims.y;\n    if (animX || animY) {\n      const position = positioners[options.position].call(this, this._active, this._eventPosition);\n      if (!position) {\n        return;\n      }\n      const size = this._size = getTooltipSize(this, options);\n      const positionAndSize = Object.assign({}, position, this._size);\n      const alignment = determineAlignment(chart, options, positionAndSize);\n      const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n      if (animX._to !== point.x || animY._to !== point.y) {\n        this.xAlign = alignment.xAlign;\n        this.yAlign = alignment.yAlign;\n        this.width = size.width;\n        this.height = size.height;\n        this.caretX = position.x;\n        this.caretY = position.y;\n        this._resolveAnimations().update(this, point);\n      }\n    }\n  }\n  _willRender() {\n    return !!this.opacity;\n  }\n  draw(ctx) {\n    const options = this.options.setContext(this.getContext());\n    let opacity = this.opacity;\n    if (!opacity) {\n      return;\n    }\n    this._updateAnimationTarget(options);\n    const tooltipSize = {\n      width: this.width,\n      height: this.height\n    };\n    const pt = {\n      x: this.x,\n      y: this.y\n    };\n    opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n    const padding = toPadding(options.padding);\n    const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n    if (options.enabled && hasTooltipContent) {\n      ctx.save();\n      ctx.globalAlpha = opacity;\n      this.drawBackground(pt, ctx, tooltipSize, options);\n      overrideTextDirection(ctx, options.textDirection);\n      pt.y += padding.top;\n      this.drawTitle(pt, ctx, options);\n      this.drawBody(pt, ctx, options);\n      this.drawFooter(pt, ctx, options);\n      restoreTextDirection(ctx, options.textDirection);\n      ctx.restore();\n    }\n  }\n  getActiveElements() {\n    return this._active || [];\n  }\n  setActiveElements(activeElements, eventPosition) {\n    const lastActive = this._active;\n    const active = activeElements.map(({datasetIndex, index}) => {\n      const meta = this.chart.getDatasetMeta(datasetIndex);\n      if (!meta) {\n        throw new Error('Cannot find a dataset at index ' + datasetIndex);\n      }\n      return {\n        datasetIndex,\n        element: meta.data[index],\n        index,\n      };\n    });\n    const changed = !_elementsEqual(lastActive, active);\n    const positionChanged = this._positionChanged(active, eventPosition);\n    if (changed || positionChanged) {\n      this._active = active;\n      this._eventPosition = eventPosition;\n      this._ignoreReplayEvents = true;\n      this.update(true);\n    }\n  }\n  handleEvent(e, replay, inChartArea = true) {\n    if (replay && this._ignoreReplayEvents) {\n      return false;\n    }\n    this._ignoreReplayEvents = false;\n    const options = this.options;\n    const lastActive = this._active || [];\n    const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n    const positionChanged = this._positionChanged(active, e);\n    const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n    if (changed) {\n      this._active = active;\n      if (options.enabled || options.external) {\n        this._eventPosition = {\n          x: e.x,\n          y: e.y\n        };\n        this.update(true, replay);\n      }\n    }\n    return changed;\n  }\n  _getActiveElements(e, lastActive, replay, inChartArea) {\n    const options = this.options;\n    if (e.type === 'mouseout') {\n      return [];\n    }\n    if (!inChartArea) {\n      return lastActive;\n    }\n    const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n    if (options.reverse) {\n      active.reverse();\n    }\n    return active;\n  }\n  _positionChanged(active, e) {\n    const {caretX, caretY, options} = this;\n    const position = positioners[options.position].call(this, active, e);\n    return position !== false && (caretX !== position.x || caretY !== position.y);\n  }\n}\nTooltip.positioners = positioners;\nvar plugin_tooltip = {\n  id: 'tooltip',\n  _element: Tooltip,\n  positioners,\n  afterInit(chart, _args, options) {\n    if (options) {\n      chart.tooltip = new Tooltip({chart, options});\n    }\n  },\n  beforeUpdate(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n  reset(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n  afterDraw(chart) {\n    const tooltip = chart.tooltip;\n    if (tooltip && tooltip._willRender()) {\n      const args = {\n        tooltip\n      };\n      if (chart.notifyPlugins('beforeTooltipDraw', args) === false) {\n        return;\n      }\n      tooltip.draw(chart.ctx);\n      chart.notifyPlugins('afterTooltipDraw', args);\n    }\n  },\n  afterEvent(chart, args) {\n    if (chart.tooltip) {\n      const useFinalPosition = args.replay;\n      if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n        args.changed = true;\n      }\n    }\n  },\n  defaults: {\n    enabled: true,\n    external: null,\n    position: 'average',\n    backgroundColor: 'rgba(0,0,0,0.8)',\n    titleColor: '#fff',\n    titleFont: {\n      weight: 'bold',\n    },\n    titleSpacing: 2,\n    titleMarginBottom: 6,\n    titleAlign: 'left',\n    bodyColor: '#fff',\n    bodySpacing: 2,\n    bodyFont: {\n    },\n    bodyAlign: 'left',\n    footerColor: '#fff',\n    footerSpacing: 2,\n    footerMarginTop: 6,\n    footerFont: {\n      weight: 'bold',\n    },\n    footerAlign: 'left',\n    padding: 6,\n    caretPadding: 2,\n    caretSize: 5,\n    cornerRadius: 6,\n    boxHeight: (ctx, opts) => opts.bodyFont.size,\n    boxWidth: (ctx, opts) => opts.bodyFont.size,\n    multiKeyBackground: '#fff',\n    displayColors: true,\n    boxPadding: 0,\n    borderColor: 'rgba(0,0,0,0)',\n    borderWidth: 0,\n    animation: {\n      duration: 400,\n      easing: 'easeOutQuart',\n    },\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'width', 'height', 'caretX', 'caretY'],\n      },\n      opacity: {\n        easing: 'linear',\n        duration: 200\n      }\n    },\n    callbacks: {\n      beforeTitle: noop,\n      title(tooltipItems) {\n        if (tooltipItems.length > 0) {\n          const item = tooltipItems[0];\n          const labels = item.chart.data.labels;\n          const labelCount = labels ? labels.length : 0;\n          if (this && this.options && this.options.mode === 'dataset') {\n            return item.dataset.label || '';\n          } else if (item.label) {\n            return item.label;\n          } else if (labelCount > 0 && item.dataIndex < labelCount) {\n            return labels[item.dataIndex];\n          }\n        }\n        return '';\n      },\n      afterTitle: noop,\n      beforeBody: noop,\n      beforeLabel: noop,\n      label(tooltipItem) {\n        if (this && this.options && this.options.mode === 'dataset') {\n          return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n        }\n        let label = tooltipItem.dataset.label || '';\n        if (label) {\n          label += ': ';\n        }\n        const value = tooltipItem.formattedValue;\n        if (!isNullOrUndef(value)) {\n          label += value;\n        }\n        return label;\n      },\n      labelColor(tooltipItem) {\n        const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n        const options = meta.controller.getStyle(tooltipItem.dataIndex);\n        return {\n          borderColor: options.borderColor,\n          backgroundColor: options.backgroundColor,\n          borderWidth: options.borderWidth,\n          borderDash: options.borderDash,\n          borderDashOffset: options.borderDashOffset,\n          borderRadius: 0,\n        };\n      },\n      labelTextColor() {\n        return this.options.bodyColor;\n      },\n      labelPointStyle(tooltipItem) {\n        const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n        const options = meta.controller.getStyle(tooltipItem.dataIndex);\n        return {\n          pointStyle: options.pointStyle,\n          rotation: options.rotation,\n        };\n      },\n      afterLabel: noop,\n      afterBody: noop,\n      beforeFooter: noop,\n      footer: noop,\n      afterFooter: noop\n    }\n  },\n  defaultRoutes: {\n    bodyFont: 'font',\n    footerFont: 'font',\n    titleFont: 'font'\n  },\n  descriptors: {\n    _scriptable: (name) => name !== 'filter' && name !== 'itemSort' && name !== 'external',\n    _indexable: false,\n    callbacks: {\n      _scriptable: false,\n      _indexable: false,\n    },\n    animation: {\n      _fallback: false\n    },\n    animations: {\n      _fallback: 'animation'\n    }\n  },\n  additionalOptionScopes: ['interaction']\n};\n\nvar plugins = /*#__PURE__*/Object.freeze({\n__proto__: null,\nDecimation: plugin_decimation,\nFiller: index,\nLegend: plugin_legend,\nSubTitle: plugin_subtitle,\nTitle: plugin_title,\nTooltip: plugin_tooltip\n});\n\nconst addIfString = (labels, raw, index, addedLabels) => {\n  if (typeof raw === 'string') {\n    index = labels.push(raw) - 1;\n    addedLabels.unshift({index, label: raw});\n  } else if (isNaN(raw)) {\n    index = null;\n  }\n  return index;\n};\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n  const first = labels.indexOf(raw);\n  if (first === -1) {\n    return addIfString(labels, raw, index, addedLabels);\n  }\n  const last = labels.lastIndexOf(raw);\n  return first !== last ? index : first;\n}\nconst validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);\nclass CategoryScale extends Scale {\n  constructor(cfg) {\n    super(cfg);\n    this._startValue = undefined;\n    this._valueRange = 0;\n    this._addedLabels = [];\n  }\n  init(scaleOptions) {\n    const added = this._addedLabels;\n    if (added.length) {\n      const labels = this.getLabels();\n      for (const {index, label} of added) {\n        if (labels[index] === label) {\n          labels.splice(index, 1);\n        }\n      }\n      this._addedLabels = [];\n    }\n    super.init(scaleOptions);\n  }\n  parse(raw, index) {\n    if (isNullOrUndef(raw)) {\n      return null;\n    }\n    const labels = this.getLabels();\n    index = isFinite(index) && labels[index] === raw ? index\n      : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n    return validIndex(index, labels.length - 1);\n  }\n  determineDataLimits() {\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let {min, max} = this.getMinMax(true);\n    if (this.options.bounds === 'ticks') {\n      if (!minDefined) {\n        min = 0;\n      }\n      if (!maxDefined) {\n        max = this.getLabels().length - 1;\n      }\n    }\n    this.min = min;\n    this.max = max;\n  }\n  buildTicks() {\n    const min = this.min;\n    const max = this.max;\n    const offset = this.options.offset;\n    const ticks = [];\n    let labels = this.getLabels();\n    labels = (min === 0 && max === labels.length - 1) ? labels : labels.slice(min, max + 1);\n    this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n    this._startValue = this.min - (offset ? 0.5 : 0);\n    for (let value = min; value <= max; value++) {\n      ticks.push({value});\n    }\n    return ticks;\n  }\n  getLabelForValue(value) {\n    const labels = this.getLabels();\n    if (value >= 0 && value < labels.length) {\n      return labels[value];\n    }\n    return value;\n  }\n  configure() {\n    super.configure();\n    if (!this.isHorizontal()) {\n      this._reversePixels = !this._reversePixels;\n    }\n  }\n  getPixelForValue(value) {\n    if (typeof value !== 'number') {\n      value = this.parse(value);\n    }\n    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n  }\n  getPixelForTick(index) {\n    const ticks = this.ticks;\n    if (index < 0 || index > ticks.length - 1) {\n      return null;\n    }\n    return this.getPixelForValue(ticks[index].value);\n  }\n  getValueForPixel(pixel) {\n    return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n  }\n  getBasePixel() {\n    return this.bottom;\n  }\n}\nCategoryScale.id = 'category';\nCategoryScale.defaults = {\n  ticks: {\n    callback: CategoryScale.prototype.getLabelForValue\n  }\n};\n\nfunction generateTicks$1(generationOptions, dataRange) {\n  const ticks = [];\n  const MIN_SPACING = 1e-14;\n  const {bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds} = generationOptions;\n  const unit = step || 1;\n  const maxSpaces = maxTicks - 1;\n  const {min: rmin, max: rmax} = dataRange;\n  const minDefined = !isNullOrUndef(min);\n  const maxDefined = !isNullOrUndef(max);\n  const countDefined = !isNullOrUndef(count);\n  const minSpacing = (rmax - rmin) / (maxDigits + 1);\n  let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n  let factor, niceMin, niceMax, numSpaces;\n  if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n    return [{value: rmin}, {value: rmax}];\n  }\n  numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n  if (numSpaces > maxSpaces) {\n    spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n  }\n  if (!isNullOrUndef(precision)) {\n    factor = Math.pow(10, precision);\n    spacing = Math.ceil(spacing * factor) / factor;\n  }\n  if (bounds === 'ticks') {\n    niceMin = Math.floor(rmin / spacing) * spacing;\n    niceMax = Math.ceil(rmax / spacing) * spacing;\n  } else {\n    niceMin = rmin;\n    niceMax = rmax;\n  }\n  if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n    numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n    spacing = (max - min) / numSpaces;\n    niceMin = min;\n    niceMax = max;\n  } else if (countDefined) {\n    niceMin = minDefined ? min : niceMin;\n    niceMax = maxDefined ? max : niceMax;\n    numSpaces = count - 1;\n    spacing = (niceMax - niceMin) / numSpaces;\n  } else {\n    numSpaces = (niceMax - niceMin) / spacing;\n    if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n      numSpaces = Math.round(numSpaces);\n    } else {\n      numSpaces = Math.ceil(numSpaces);\n    }\n  }\n  const decimalPlaces = Math.max(\n    _decimalPlaces(spacing),\n    _decimalPlaces(niceMin)\n  );\n  factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n  niceMin = Math.round(niceMin * factor) / factor;\n  niceMax = Math.round(niceMax * factor) / factor;\n  let j = 0;\n  if (minDefined) {\n    if (includeBounds && niceMin !== min) {\n      ticks.push({value: min});\n      if (niceMin < min) {\n        j++;\n      }\n      if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n        j++;\n      }\n    } else if (niceMin < min) {\n      j++;\n    }\n  }\n  for (; j < numSpaces; ++j) {\n    ticks.push({value: Math.round((niceMin + j * spacing) * factor) / factor});\n  }\n  if (maxDefined && includeBounds && niceMax !== max) {\n    if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n      ticks[ticks.length - 1].value = max;\n    } else {\n      ticks.push({value: max});\n    }\n  } else if (!maxDefined || niceMax === max) {\n    ticks.push({value: niceMax});\n  }\n  return ticks;\n}\nfunction relativeLabelSize(value, minSpacing, {horizontal, minRotation}) {\n  const rad = toRadians(minRotation);\n  const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n  const length = 0.75 * minSpacing * ('' + value).length;\n  return Math.min(minSpacing / ratio, length);\n}\nclass LinearScaleBase extends Scale {\n  constructor(cfg) {\n    super(cfg);\n    this.start = undefined;\n    this.end = undefined;\n    this._startValue = undefined;\n    this._endValue = undefined;\n    this._valueRange = 0;\n  }\n  parse(raw, index) {\n    if (isNullOrUndef(raw)) {\n      return null;\n    }\n    if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n      return null;\n    }\n    return +raw;\n  }\n  handleTickRangeOptions() {\n    const {beginAtZero} = this.options;\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let {min, max} = this;\n    const setMin = v => (min = minDefined ? min : v);\n    const setMax = v => (max = maxDefined ? max : v);\n    if (beginAtZero) {\n      const minSign = sign(min);\n      const maxSign = sign(max);\n      if (minSign < 0 && maxSign < 0) {\n        setMax(0);\n      } else if (minSign > 0 && maxSign > 0) {\n        setMin(0);\n      }\n    }\n    if (min === max) {\n      let offset = 1;\n      if (max >= Number.MAX_SAFE_INTEGER || min <= Number.MIN_SAFE_INTEGER) {\n        offset = Math.abs(max * 0.05);\n      }\n      setMax(max + offset);\n      if (!beginAtZero) {\n        setMin(min - offset);\n      }\n    }\n    this.min = min;\n    this.max = max;\n  }\n  getTickLimit() {\n    const tickOpts = this.options.ticks;\n    let {maxTicksLimit, stepSize} = tickOpts;\n    let maxTicks;\n    if (stepSize) {\n      maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n      if (maxTicks > 1000) {\n        console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n        maxTicks = 1000;\n      }\n    } else {\n      maxTicks = this.computeTickLimit();\n      maxTicksLimit = maxTicksLimit || 11;\n    }\n    if (maxTicksLimit) {\n      maxTicks = Math.min(maxTicksLimit, maxTicks);\n    }\n    return maxTicks;\n  }\n  computeTickLimit() {\n    return Number.POSITIVE_INFINITY;\n  }\n  buildTicks() {\n    const opts = this.options;\n    const tickOpts = opts.ticks;\n    let maxTicks = this.getTickLimit();\n    maxTicks = Math.max(2, maxTicks);\n    const numericGeneratorOptions = {\n      maxTicks,\n      bounds: opts.bounds,\n      min: opts.min,\n      max: opts.max,\n      precision: tickOpts.precision,\n      step: tickOpts.stepSize,\n      count: tickOpts.count,\n      maxDigits: this._maxDigits(),\n      horizontal: this.isHorizontal(),\n      minRotation: tickOpts.minRotation || 0,\n      includeBounds: tickOpts.includeBounds !== false\n    };\n    const dataRange = this._range || this;\n    const ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n    if (opts.bounds === 'ticks') {\n      _setMinAndMaxByKey(ticks, this, 'value');\n    }\n    if (opts.reverse) {\n      ticks.reverse();\n      this.start = this.max;\n      this.end = this.min;\n    } else {\n      this.start = this.min;\n      this.end = this.max;\n    }\n    return ticks;\n  }\n  configure() {\n    const ticks = this.ticks;\n    let start = this.min;\n    let end = this.max;\n    super.configure();\n    if (this.options.offset && ticks.length) {\n      const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n      start -= offset;\n      end += offset;\n    }\n    this._startValue = start;\n    this._endValue = end;\n    this._valueRange = end - start;\n  }\n  getLabelForValue(value) {\n    return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n  }\n}\n\nclass LinearScale extends LinearScaleBase {\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(true);\n    this.min = isNumberFinite(min) ? min : 0;\n    this.max = isNumberFinite(max) ? max : 1;\n    this.handleTickRangeOptions();\n  }\n  computeTickLimit() {\n    const horizontal = this.isHorizontal();\n    const length = horizontal ? this.width : this.height;\n    const minRotation = toRadians(this.options.ticks.minRotation);\n    const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n    const tickFont = this._resolveTickFontOptions(0);\n    return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n  }\n  getPixelForValue(value) {\n    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n  }\n  getValueForPixel(pixel) {\n    return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n  }\n}\nLinearScale.id = 'linear';\nLinearScale.defaults = {\n  ticks: {\n    callback: Ticks.formatters.numeric\n  }\n};\n\nfunction isMajor(tickVal) {\n  const remain = tickVal / (Math.pow(10, Math.floor(log10(tickVal))));\n  return remain === 1;\n}\nfunction generateTicks(generationOptions, dataRange) {\n  const endExp = Math.floor(log10(dataRange.max));\n  const endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));\n  const ticks = [];\n  let tickVal = finiteOrDefault(generationOptions.min, Math.pow(10, Math.floor(log10(dataRange.min))));\n  let exp = Math.floor(log10(tickVal));\n  let significand = Math.floor(tickVal / Math.pow(10, exp));\n  let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n  do {\n    ticks.push({value: tickVal, major: isMajor(tickVal)});\n    ++significand;\n    if (significand === 10) {\n      significand = 1;\n      ++exp;\n      precision = exp >= 0 ? 1 : precision;\n    }\n    tickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision;\n  } while (exp < endExp || (exp === endExp && significand < endSignificand));\n  const lastTick = finiteOrDefault(generationOptions.max, tickVal);\n  ticks.push({value: lastTick, major: isMajor(tickVal)});\n  return ticks;\n}\nclass LogarithmicScale extends Scale {\n  constructor(cfg) {\n    super(cfg);\n    this.start = undefined;\n    this.end = undefined;\n    this._startValue = undefined;\n    this._valueRange = 0;\n  }\n  parse(raw, index) {\n    const value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n    if (value === 0) {\n      this._zero = true;\n      return undefined;\n    }\n    return isNumberFinite(value) && value > 0 ? value : null;\n  }\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(true);\n    this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n    this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n    if (this.options.beginAtZero) {\n      this._zero = true;\n    }\n    this.handleTickRangeOptions();\n  }\n  handleTickRangeOptions() {\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let min = this.min;\n    let max = this.max;\n    const setMin = v => (min = minDefined ? min : v);\n    const setMax = v => (max = maxDefined ? max : v);\n    const exp = (v, m) => Math.pow(10, Math.floor(log10(v)) + m);\n    if (min === max) {\n      if (min <= 0) {\n        setMin(1);\n        setMax(10);\n      } else {\n        setMin(exp(min, -1));\n        setMax(exp(max, +1));\n      }\n    }\n    if (min <= 0) {\n      setMin(exp(max, -1));\n    }\n    if (max <= 0) {\n      setMax(exp(min, +1));\n    }\n    if (this._zero && this.min !== this._suggestedMin && min === exp(this.min, 0)) {\n      setMin(exp(min, -1));\n    }\n    this.min = min;\n    this.max = max;\n  }\n  buildTicks() {\n    const opts = this.options;\n    const generationOptions = {\n      min: this._userMin,\n      max: this._userMax\n    };\n    const ticks = generateTicks(generationOptions, this);\n    if (opts.bounds === 'ticks') {\n      _setMinAndMaxByKey(ticks, this, 'value');\n    }\n    if (opts.reverse) {\n      ticks.reverse();\n      this.start = this.max;\n      this.end = this.min;\n    } else {\n      this.start = this.min;\n      this.end = this.max;\n    }\n    return ticks;\n  }\n  getLabelForValue(value) {\n    return value === undefined\n      ? '0'\n      : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n  }\n  configure() {\n    const start = this.min;\n    super.configure();\n    this._startValue = log10(start);\n    this._valueRange = log10(this.max) - log10(start);\n  }\n  getPixelForValue(value) {\n    if (value === undefined || value === 0) {\n      value = this.min;\n    }\n    if (value === null || isNaN(value)) {\n      return NaN;\n    }\n    return this.getPixelForDecimal(value === this.min\n      ? 0\n      : (log10(value) - this._startValue) / this._valueRange);\n  }\n  getValueForPixel(pixel) {\n    const decimal = this.getDecimalForPixel(pixel);\n    return Math.pow(10, this._startValue + decimal * this._valueRange);\n  }\n}\nLogarithmicScale.id = 'logarithmic';\nLogarithmicScale.defaults = {\n  ticks: {\n    callback: Ticks.formatters.logarithmic,\n    major: {\n      enabled: true\n    }\n  }\n};\n\nfunction getTickBackdropHeight(opts) {\n  const tickOpts = opts.ticks;\n  if (tickOpts.display && opts.display) {\n    const padding = toPadding(tickOpts.backdropPadding);\n    return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n  }\n  return 0;\n}\nfunction measureLabelSize(ctx, font, label) {\n  label = isArray(label) ? label : [label];\n  return {\n    w: _longestText(ctx, font.string, label),\n    h: label.length * font.lineHeight\n  };\n}\nfunction determineLimits(angle, pos, size, min, max) {\n  if (angle === min || angle === max) {\n    return {\n      start: pos - (size / 2),\n      end: pos + (size / 2)\n    };\n  } else if (angle < min || angle > max) {\n    return {\n      start: pos - size,\n      end: pos\n    };\n  }\n  return {\n    start: pos,\n    end: pos + size\n  };\n}\nfunction fitWithPointLabels(scale) {\n  const orig = {\n    l: scale.left + scale._padding.left,\n    r: scale.right - scale._padding.right,\n    t: scale.top + scale._padding.top,\n    b: scale.bottom - scale._padding.bottom\n  };\n  const limits = Object.assign({}, orig);\n  const labelSizes = [];\n  const padding = [];\n  const valueCount = scale._pointLabels.length;\n  const pointLabelOpts = scale.options.pointLabels;\n  const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n  for (let i = 0; i < valueCount; i++) {\n    const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n    padding[i] = opts.padding;\n    const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n    const plFont = toFont(opts.font);\n    const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n    labelSizes[i] = textSize;\n    const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n    const angle = Math.round(toDegrees(angleRadians));\n    const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n    const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n    updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n  }\n  scale.setCenterPoint(\n    orig.l - limits.l,\n    limits.r - orig.r,\n    orig.t - limits.t,\n    limits.b - orig.b\n  );\n  scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n  const sin = Math.abs(Math.sin(angle));\n  const cos = Math.abs(Math.cos(angle));\n  let x = 0;\n  let y = 0;\n  if (hLimits.start < orig.l) {\n    x = (orig.l - hLimits.start) / sin;\n    limits.l = Math.min(limits.l, orig.l - x);\n  } else if (hLimits.end > orig.r) {\n    x = (hLimits.end - orig.r) / sin;\n    limits.r = Math.max(limits.r, orig.r + x);\n  }\n  if (vLimits.start < orig.t) {\n    y = (orig.t - vLimits.start) / cos;\n    limits.t = Math.min(limits.t, orig.t - y);\n  } else if (vLimits.end > orig.b) {\n    y = (vLimits.end - orig.b) / cos;\n    limits.b = Math.max(limits.b, orig.b + y);\n  }\n}\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n  const items = [];\n  const valueCount = scale._pointLabels.length;\n  const opts = scale.options;\n  const extra = getTickBackdropHeight(opts) / 2;\n  const outerDistance = scale.drawingArea;\n  const additionalAngle = opts.pointLabels.centerPointLabels ? PI / valueCount : 0;\n  for (let i = 0; i < valueCount; i++) {\n    const pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + padding[i], additionalAngle);\n    const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n    const size = labelSizes[i];\n    const y = yForAngle(pointLabelPosition.y, size.h, angle);\n    const textAlign = getTextAlignForAngle(angle);\n    const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n    items.push({\n      x: pointLabelPosition.x,\n      y,\n      textAlign,\n      left,\n      top: y,\n      right: left + size.w,\n      bottom: y + size.h\n    });\n  }\n  return items;\n}\nfunction getTextAlignForAngle(angle) {\n  if (angle === 0 || angle === 180) {\n    return 'center';\n  } else if (angle < 180) {\n    return 'left';\n  }\n  return 'right';\n}\nfunction leftForTextAlign(x, w, align) {\n  if (align === 'right') {\n    x -= w;\n  } else if (align === 'center') {\n    x -= (w / 2);\n  }\n  return x;\n}\nfunction yForAngle(y, h, angle) {\n  if (angle === 90 || angle === 270) {\n    y -= (h / 2);\n  } else if (angle > 270 || angle < 90) {\n    y -= h;\n  }\n  return y;\n}\nfunction drawPointLabels(scale, labelCount) {\n  const {ctx, options: {pointLabels}} = scale;\n  for (let i = labelCount - 1; i >= 0; i--) {\n    const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n    const plFont = toFont(optsAtIndex.font);\n    const {x, y, textAlign, left, top, right, bottom} = scale._pointLabelItems[i];\n    const {backdropColor} = optsAtIndex;\n    if (!isNullOrUndef(backdropColor)) {\n      const borderRadius = toTRBLCorners(optsAtIndex.borderRadius);\n      const padding = toPadding(optsAtIndex.backdropPadding);\n      ctx.fillStyle = backdropColor;\n      const backdropLeft = left - padding.left;\n      const backdropTop = top - padding.top;\n      const backdropWidth = right - left + padding.width;\n      const backdropHeight = bottom - top + padding.height;\n      if (Object.values(borderRadius).some(v => v !== 0)) {\n        ctx.beginPath();\n        addRoundedRectPath(ctx, {\n          x: backdropLeft,\n          y: backdropTop,\n          w: backdropWidth,\n          h: backdropHeight,\n          radius: borderRadius,\n        });\n        ctx.fill();\n      } else {\n        ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n      }\n    }\n    renderText(\n      ctx,\n      scale._pointLabels[i],\n      x,\n      y + (plFont.lineHeight / 2),\n      plFont,\n      {\n        color: optsAtIndex.color,\n        textAlign: textAlign,\n        textBaseline: 'middle'\n      }\n    );\n  }\n}\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n  const {ctx} = scale;\n  if (circular) {\n    ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n  } else {\n    let pointPosition = scale.getPointPosition(0, radius);\n    ctx.moveTo(pointPosition.x, pointPosition.y);\n    for (let i = 1; i < labelCount; i++) {\n      pointPosition = scale.getPointPosition(i, radius);\n      ctx.lineTo(pointPosition.x, pointPosition.y);\n    }\n  }\n}\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount) {\n  const ctx = scale.ctx;\n  const circular = gridLineOpts.circular;\n  const {color, lineWidth} = gridLineOpts;\n  if ((!circular && !labelCount) || !color || !lineWidth || radius < 0) {\n    return;\n  }\n  ctx.save();\n  ctx.strokeStyle = color;\n  ctx.lineWidth = lineWidth;\n  ctx.setLineDash(gridLineOpts.borderDash);\n  ctx.lineDashOffset = gridLineOpts.borderDashOffset;\n  ctx.beginPath();\n  pathRadiusLine(scale, radius, circular, labelCount);\n  ctx.closePath();\n  ctx.stroke();\n  ctx.restore();\n}\nfunction createPointLabelContext(parent, index, label) {\n  return createContext(parent, {\n    label,\n    index,\n    type: 'pointLabel'\n  });\n}\nclass RadialLinearScale extends LinearScaleBase {\n  constructor(cfg) {\n    super(cfg);\n    this.xCenter = undefined;\n    this.yCenter = undefined;\n    this.drawingArea = undefined;\n    this._pointLabels = [];\n    this._pointLabelItems = [];\n  }\n  setDimensions() {\n    const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n    const w = this.width = this.maxWidth - padding.width;\n    const h = this.height = this.maxHeight - padding.height;\n    this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n    this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n    this.drawingArea = Math.floor(Math.min(w, h) / 2);\n  }\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(false);\n    this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n    this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n    this.handleTickRangeOptions();\n  }\n  computeTickLimit() {\n    return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n  }\n  generateTickLabels(ticks) {\n    LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n    this._pointLabels = this.getLabels()\n      .map((value, index) => {\n        const label = callback(this.options.pointLabels.callback, [value, index], this);\n        return label || label === 0 ? label : '';\n      })\n      .filter((v, i) => this.chart.getDataVisibility(i));\n  }\n  fit() {\n    const opts = this.options;\n    if (opts.display && opts.pointLabels.display) {\n      fitWithPointLabels(this);\n    } else {\n      this.setCenterPoint(0, 0, 0, 0);\n    }\n  }\n  setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n    this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n    this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n    this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n  }\n  getIndexAngle(index) {\n    const angleMultiplier = TAU / (this._pointLabels.length || 1);\n    const startAngle = this.options.startAngle || 0;\n    return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n  }\n  getDistanceFromCenterForValue(value) {\n    if (isNullOrUndef(value)) {\n      return NaN;\n    }\n    const scalingFactor = this.drawingArea / (this.max - this.min);\n    if (this.options.reverse) {\n      return (this.max - value) * scalingFactor;\n    }\n    return (value - this.min) * scalingFactor;\n  }\n  getValueForDistanceFromCenter(distance) {\n    if (isNullOrUndef(distance)) {\n      return NaN;\n    }\n    const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n    return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n  }\n  getPointLabelContext(index) {\n    const pointLabels = this._pointLabels || [];\n    if (index >= 0 && index < pointLabels.length) {\n      const pointLabel = pointLabels[index];\n      return createPointLabelContext(this.getContext(), index, pointLabel);\n    }\n  }\n  getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n    const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n    return {\n      x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n      y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n      angle\n    };\n  }\n  getPointPositionForValue(index, value) {\n    return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n  }\n  getBasePosition(index) {\n    return this.getPointPositionForValue(index || 0, this.getBaseValue());\n  }\n  getPointLabelPosition(index) {\n    const {left, top, right, bottom} = this._pointLabelItems[index];\n    return {\n      left,\n      top,\n      right,\n      bottom,\n    };\n  }\n  drawBackground() {\n    const {backgroundColor, grid: {circular}} = this.options;\n    if (backgroundColor) {\n      const ctx = this.ctx;\n      ctx.save();\n      ctx.beginPath();\n      pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n      ctx.closePath();\n      ctx.fillStyle = backgroundColor;\n      ctx.fill();\n      ctx.restore();\n    }\n  }\n  drawGrid() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    const {angleLines, grid} = opts;\n    const labelCount = this._pointLabels.length;\n    let i, offset, position;\n    if (opts.pointLabels.display) {\n      drawPointLabels(this, labelCount);\n    }\n    if (grid.display) {\n      this.ticks.forEach((tick, index) => {\n        if (index !== 0) {\n          offset = this.getDistanceFromCenterForValue(tick.value);\n          const optsAtIndex = grid.setContext(this.getContext(index - 1));\n          drawRadiusLine(this, optsAtIndex, offset, labelCount);\n        }\n      });\n    }\n    if (angleLines.display) {\n      ctx.save();\n      for (i = labelCount - 1; i >= 0; i--) {\n        const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n        const {color, lineWidth} = optsAtIndex;\n        if (!lineWidth || !color) {\n          continue;\n        }\n        ctx.lineWidth = lineWidth;\n        ctx.strokeStyle = color;\n        ctx.setLineDash(optsAtIndex.borderDash);\n        ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n        offset = this.getDistanceFromCenterForValue(opts.ticks.reverse ? this.min : this.max);\n        position = this.getPointPosition(i, offset);\n        ctx.beginPath();\n        ctx.moveTo(this.xCenter, this.yCenter);\n        ctx.lineTo(position.x, position.y);\n        ctx.stroke();\n      }\n      ctx.restore();\n    }\n  }\n  drawBorder() {}\n  drawLabels() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    const tickOpts = opts.ticks;\n    if (!tickOpts.display) {\n      return;\n    }\n    const startAngle = this.getIndexAngle(0);\n    let offset, width;\n    ctx.save();\n    ctx.translate(this.xCenter, this.yCenter);\n    ctx.rotate(startAngle);\n    ctx.textAlign = 'center';\n    ctx.textBaseline = 'middle';\n    this.ticks.forEach((tick, index) => {\n      if (index === 0 && !opts.reverse) {\n        return;\n      }\n      const optsAtIndex = tickOpts.setContext(this.getContext(index));\n      const tickFont = toFont(optsAtIndex.font);\n      offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n      if (optsAtIndex.showLabelBackdrop) {\n        ctx.font = tickFont.string;\n        width = ctx.measureText(tick.label).width;\n        ctx.fillStyle = optsAtIndex.backdropColor;\n        const padding = toPadding(optsAtIndex.backdropPadding);\n        ctx.fillRect(\n          -width / 2 - padding.left,\n          -offset - tickFont.size / 2 - padding.top,\n          width + padding.width,\n          tickFont.size + padding.height\n        );\n      }\n      renderText(ctx, tick.label, 0, -offset, tickFont, {\n        color: optsAtIndex.color,\n      });\n    });\n    ctx.restore();\n  }\n  drawTitle() {}\n}\nRadialLinearScale.id = 'radialLinear';\nRadialLinearScale.defaults = {\n  display: true,\n  animate: true,\n  position: 'chartArea',\n  angleLines: {\n    display: true,\n    lineWidth: 1,\n    borderDash: [],\n    borderDashOffset: 0.0\n  },\n  grid: {\n    circular: false\n  },\n  startAngle: 0,\n  ticks: {\n    showLabelBackdrop: true,\n    callback: Ticks.formatters.numeric\n  },\n  pointLabels: {\n    backdropColor: undefined,\n    backdropPadding: 2,\n    display: true,\n    font: {\n      size: 10\n    },\n    callback(label) {\n      return label;\n    },\n    padding: 5,\n    centerPointLabels: false\n  }\n};\nRadialLinearScale.defaultRoutes = {\n  'angleLines.color': 'borderColor',\n  'pointLabels.color': 'color',\n  'ticks.color': 'color'\n};\nRadialLinearScale.descriptors = {\n  angleLines: {\n    _fallback: 'grid'\n  }\n};\n\nconst INTERVALS = {\n  millisecond: {common: true, size: 1, steps: 1000},\n  second: {common: true, size: 1000, steps: 60},\n  minute: {common: true, size: 60000, steps: 60},\n  hour: {common: true, size: 3600000, steps: 24},\n  day: {common: true, size: 86400000, steps: 30},\n  week: {common: false, size: 604800000, steps: 4},\n  month: {common: true, size: 2.628e9, steps: 12},\n  quarter: {common: false, size: 7.884e9, steps: 4},\n  year: {common: true, size: 3.154e10}\n};\nconst UNITS = (Object.keys(INTERVALS));\nfunction sorter(a, b) {\n  return a - b;\n}\nfunction parse(scale, input) {\n  if (isNullOrUndef(input)) {\n    return null;\n  }\n  const adapter = scale._adapter;\n  const {parser, round, isoWeekday} = scale._parseOpts;\n  let value = input;\n  if (typeof parser === 'function') {\n    value = parser(value);\n  }\n  if (!isNumberFinite(value)) {\n    value = typeof parser === 'string'\n      ? adapter.parse(value, parser)\n      : adapter.parse(value);\n  }\n  if (value === null) {\n    return null;\n  }\n  if (round) {\n    value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true)\n      ? adapter.startOf(value, 'isoWeek', isoWeekday)\n      : adapter.startOf(value, round);\n  }\n  return +value;\n}\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n  const ilen = UNITS.length;\n  for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n    const interval = INTERVALS[UNITS[i]];\n    const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n    if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n      return UNITS[i];\n    }\n  }\n  return UNITS[ilen - 1];\n}\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n  for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n    const unit = UNITS[i];\n    if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n      return unit;\n    }\n  }\n  return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\nfunction determineMajorUnit(unit) {\n  for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n    if (INTERVALS[UNITS[i]].common) {\n      return UNITS[i];\n    }\n  }\n}\nfunction addTick(ticks, time, timestamps) {\n  if (!timestamps) {\n    ticks[time] = true;\n  } else if (timestamps.length) {\n    const {lo, hi} = _lookup(timestamps, time);\n    const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n    ticks[timestamp] = true;\n  }\n}\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n  const adapter = scale._adapter;\n  const first = +adapter.startOf(ticks[0].value, majorUnit);\n  const last = ticks[ticks.length - 1].value;\n  let major, index;\n  for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n    index = map[major];\n    if (index >= 0) {\n      ticks[index].major = true;\n    }\n  }\n  return ticks;\n}\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n  const ticks = [];\n  const map = {};\n  const ilen = values.length;\n  let i, value;\n  for (i = 0; i < ilen; ++i) {\n    value = values[i];\n    map[value] = i;\n    ticks.push({\n      value,\n      major: false\n    });\n  }\n  return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\nclass TimeScale extends Scale {\n  constructor(props) {\n    super(props);\n    this._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n    this._unit = 'day';\n    this._majorUnit = undefined;\n    this._offsets = {};\n    this._normalized = false;\n    this._parseOpts = undefined;\n  }\n  init(scaleOpts, opts) {\n    const time = scaleOpts.time || (scaleOpts.time = {});\n    const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n    adapter.init(opts);\n    mergeIf(time.displayFormats, adapter.formats());\n    this._parseOpts = {\n      parser: time.parser,\n      round: time.round,\n      isoWeekday: time.isoWeekday\n    };\n    super.init(scaleOpts);\n    this._normalized = opts.normalized;\n  }\n  parse(raw, index) {\n    if (raw === undefined) {\n      return null;\n    }\n    return parse(this, raw);\n  }\n  beforeLayout() {\n    super.beforeLayout();\n    this._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n  }\n  determineDataLimits() {\n    const options = this.options;\n    const adapter = this._adapter;\n    const unit = options.time.unit || 'day';\n    let {min, max, minDefined, maxDefined} = this.getUserBounds();\n    function _applyBounds(bounds) {\n      if (!minDefined && !isNaN(bounds.min)) {\n        min = Math.min(min, bounds.min);\n      }\n      if (!maxDefined && !isNaN(bounds.max)) {\n        max = Math.max(max, bounds.max);\n      }\n    }\n    if (!minDefined || !maxDefined) {\n      _applyBounds(this._getLabelBounds());\n      if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n        _applyBounds(this.getMinMax(false));\n      }\n    }\n    min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n    max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n    this.min = Math.min(min, max - 1);\n    this.max = Math.max(min + 1, max);\n  }\n  _getLabelBounds() {\n    const arr = this.getLabelTimestamps();\n    let min = Number.POSITIVE_INFINITY;\n    let max = Number.NEGATIVE_INFINITY;\n    if (arr.length) {\n      min = arr[0];\n      max = arr[arr.length - 1];\n    }\n    return {min, max};\n  }\n  buildTicks() {\n    const options = this.options;\n    const timeOpts = options.time;\n    const tickOpts = options.ticks;\n    const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n    if (options.bounds === 'ticks' && timestamps.length) {\n      this.min = this._userMin || timestamps[0];\n      this.max = this._userMax || timestamps[timestamps.length - 1];\n    }\n    const min = this.min;\n    const max = this.max;\n    const ticks = _filterBetween(timestamps, min, max);\n    this._unit = timeOpts.unit || (tickOpts.autoSkip\n      ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min))\n      : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n    this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined\n      : determineMajorUnit(this._unit);\n    this.initOffsets(timestamps);\n    if (options.reverse) {\n      ticks.reverse();\n    }\n    return ticksFromTimestamps(this, ticks, this._majorUnit);\n  }\n  afterAutoSkip() {\n    if (this.options.offsetAfterAutoskip) {\n      this.initOffsets(this.ticks.map(tick => +tick.value));\n    }\n  }\n  initOffsets(timestamps) {\n    let start = 0;\n    let end = 0;\n    let first, last;\n    if (this.options.offset && timestamps.length) {\n      first = this.getDecimalForValue(timestamps[0]);\n      if (timestamps.length === 1) {\n        start = 1 - first;\n      } else {\n        start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n      }\n      last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n      if (timestamps.length === 1) {\n        end = last;\n      } else {\n        end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n      }\n    }\n    const limit = timestamps.length < 3 ? 0.5 : 0.25;\n    start = _limitValue(start, 0, limit);\n    end = _limitValue(end, 0, limit);\n    this._offsets = {start, end, factor: 1 / (start + 1 + end)};\n  }\n  _generate() {\n    const adapter = this._adapter;\n    const min = this.min;\n    const max = this.max;\n    const options = this.options;\n    const timeOpts = options.time;\n    const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n    const stepSize = valueOrDefault(timeOpts.stepSize, 1);\n    const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n    const hasWeekday = isNumber(weekday) || weekday === true;\n    const ticks = {};\n    let first = min;\n    let time, count;\n    if (hasWeekday) {\n      first = +adapter.startOf(first, 'isoWeek', weekday);\n    }\n    first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n    if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n      throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n    }\n    const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n    for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n      addTick(ticks, time, timestamps);\n    }\n    if (time === max || options.bounds === 'ticks' || count === 1) {\n      addTick(ticks, time, timestamps);\n    }\n    return Object.keys(ticks).sort((a, b) => a - b).map(x => +x);\n  }\n  getLabelForValue(value) {\n    const adapter = this._adapter;\n    const timeOpts = this.options.time;\n    if (timeOpts.tooltipFormat) {\n      return adapter.format(value, timeOpts.tooltipFormat);\n    }\n    return adapter.format(value, timeOpts.displayFormats.datetime);\n  }\n  _tickFormatFunction(time, index, ticks, format) {\n    const options = this.options;\n    const formats = options.time.displayFormats;\n    const unit = this._unit;\n    const majorUnit = this._majorUnit;\n    const minorFormat = unit && formats[unit];\n    const majorFormat = majorUnit && formats[majorUnit];\n    const tick = ticks[index];\n    const major = majorUnit && majorFormat && tick && tick.major;\n    const label = this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n    const formatter = options.ticks.callback;\n    return formatter ? callback(formatter, [label, index, ticks], this) : label;\n  }\n  generateTickLabels(ticks) {\n    let i, ilen, tick;\n    for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n      tick = ticks[i];\n      tick.label = this._tickFormatFunction(tick.value, i, ticks);\n    }\n  }\n  getDecimalForValue(value) {\n    return value === null ? NaN : (value - this.min) / (this.max - this.min);\n  }\n  getPixelForValue(value) {\n    const offsets = this._offsets;\n    const pos = this.getDecimalForValue(value);\n    return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n  }\n  getValueForPixel(pixel) {\n    const offsets = this._offsets;\n    const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n    return this.min + pos * (this.max - this.min);\n  }\n  _getLabelSize(label) {\n    const ticksOpts = this.options.ticks;\n    const tickLabelWidth = this.ctx.measureText(label).width;\n    const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n    const cosRotation = Math.cos(angle);\n    const sinRotation = Math.sin(angle);\n    const tickFontSize = this._resolveTickFontOptions(0).size;\n    return {\n      w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),\n      h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)\n    };\n  }\n  _getLabelCapacity(exampleTime) {\n    const timeOpts = this.options.time;\n    const displayFormats = timeOpts.displayFormats;\n    const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n    const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);\n    const size = this._getLabelSize(exampleLabel);\n    const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n    return capacity > 0 ? capacity : 1;\n  }\n  getDataTimestamps() {\n    let timestamps = this._cache.data || [];\n    let i, ilen;\n    if (timestamps.length) {\n      return timestamps;\n    }\n    const metas = this.getMatchingVisibleMetas();\n    if (this._normalized && metas.length) {\n      return (this._cache.data = metas[0].controller.getAllParsedValues(this));\n    }\n    for (i = 0, ilen = metas.length; i < ilen; ++i) {\n      timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n    }\n    return (this._cache.data = this.normalize(timestamps));\n  }\n  getLabelTimestamps() {\n    const timestamps = this._cache.labels || [];\n    let i, ilen;\n    if (timestamps.length) {\n      return timestamps;\n    }\n    const labels = this.getLabels();\n    for (i = 0, ilen = labels.length; i < ilen; ++i) {\n      timestamps.push(parse(this, labels[i]));\n    }\n    return (this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps));\n  }\n  normalize(values) {\n    return _arrayUnique(values.sort(sorter));\n  }\n}\nTimeScale.id = 'time';\nTimeScale.defaults = {\n  bounds: 'data',\n  adapters: {},\n  time: {\n    parser: false,\n    unit: false,\n    round: false,\n    isoWeekday: false,\n    minUnit: 'millisecond',\n    displayFormats: {}\n  },\n  ticks: {\n    source: 'auto',\n    major: {\n      enabled: false\n    }\n  }\n};\n\nfunction interpolate(table, val, reverse) {\n  let lo = 0;\n  let hi = table.length - 1;\n  let prevSource, nextSource, prevTarget, nextTarget;\n  if (reverse) {\n    if (val >= table[lo].pos && val <= table[hi].pos) {\n      ({lo, hi} = _lookupByKey(table, 'pos', val));\n    }\n    ({pos: prevSource, time: prevTarget} = table[lo]);\n    ({pos: nextSource, time: nextTarget} = table[hi]);\n  } else {\n    if (val >= table[lo].time && val <= table[hi].time) {\n      ({lo, hi} = _lookupByKey(table, 'time', val));\n    }\n    ({time: prevSource, pos: prevTarget} = table[lo]);\n    ({time: nextSource, pos: nextTarget} = table[hi]);\n  }\n  const span = nextSource - prevSource;\n  return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nclass TimeSeriesScale extends TimeScale {\n  constructor(props) {\n    super(props);\n    this._table = [];\n    this._minPos = undefined;\n    this._tableRange = undefined;\n  }\n  initOffsets() {\n    const timestamps = this._getTimestampsForTable();\n    const table = this._table = this.buildLookupTable(timestamps);\n    this._minPos = interpolate(table, this.min);\n    this._tableRange = interpolate(table, this.max) - this._minPos;\n    super.initOffsets(timestamps);\n  }\n  buildLookupTable(timestamps) {\n    const {min, max} = this;\n    const items = [];\n    const table = [];\n    let i, ilen, prev, curr, next;\n    for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n      curr = timestamps[i];\n      if (curr >= min && curr <= max) {\n        items.push(curr);\n      }\n    }\n    if (items.length < 2) {\n      return [\n        {time: min, pos: 0},\n        {time: max, pos: 1}\n      ];\n    }\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      next = items[i + 1];\n      prev = items[i - 1];\n      curr = items[i];\n      if (Math.round((next + prev) / 2) !== curr) {\n        table.push({time: curr, pos: i / (ilen - 1)});\n      }\n    }\n    return table;\n  }\n  _getTimestampsForTable() {\n    let timestamps = this._cache.all || [];\n    if (timestamps.length) {\n      return timestamps;\n    }\n    const data = this.getDataTimestamps();\n    const label = this.getLabelTimestamps();\n    if (data.length && label.length) {\n      timestamps = this.normalize(data.concat(label));\n    } else {\n      timestamps = data.length ? data : label;\n    }\n    timestamps = this._cache.all = timestamps;\n    return timestamps;\n  }\n  getDecimalForValue(value) {\n    return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n  }\n  getValueForPixel(pixel) {\n    const offsets = this._offsets;\n    const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n    return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n  }\n}\nTimeSeriesScale.id = 'timeseries';\nTimeSeriesScale.defaults = TimeScale.defaults;\n\nvar scales = /*#__PURE__*/Object.freeze({\n__proto__: null,\nCategoryScale: CategoryScale,\nLinearScale: LinearScale,\nLogarithmicScale: LogarithmicScale,\nRadialLinearScale: RadialLinearScale,\nTimeScale: TimeScale,\nTimeSeriesScale: TimeSeriesScale\n});\n\nconst registerables = [\n  controllers,\n  elements,\n  plugins,\n  scales,\n];\n\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, index as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, elements, layouts, plugins, registerables, registry, scales };\n","import {Chart, registerables} from '../dist/chart.mjs';\n\nChart.register(...registerables);\n\nexport default Chart;\n","/*!\n * chartjs-chart-matrix v1.2.0\n * https://chartjs-chart-matrix.pages.dev/\n * (c) 2022 Jukka Kurkela\n * Released under the MIT license\n */\nimport { DatasetController, Element } from 'chart.js';\nimport { toTRBLCorners, addRoundedRectPath, isObject } from 'chart.js/helpers';\n\nvar version = \"1.2.0\";\n\nclass MatrixController extends DatasetController {\n  initialize() {\n    this.enableOptionSharing = true;\n    super.initialize();\n  }\n\n  update(mode) {\n    const me = this;\n    const meta = me._cachedMeta;\n\n    me.updateElements(meta.data, 0, meta.data.length, mode);\n  }\n\n  updateElements(rects, start, count, mode) {\n    const me = this;\n    const reset = mode === 'reset';\n    const {xScale, yScale} = me._cachedMeta;\n    const firstOpts = me.resolveDataElementOptions(start, mode);\n    const sharedOptions = me.getSharedOptions(mode, rects[start], firstOpts);\n\n    for (let i = start; i < start + count; i++) {\n      const parsed = !reset && me.getParsed(i);\n      const x = reset ? xScale.getBasePixel() : xScale.getPixelForValue(parsed.x);\n      const y = reset ? yScale.getBasePixel() : yScale.getPixelForValue(parsed.y);\n      const options = me.resolveDataElementOptions(i, mode);\n      const {width, height, anchorX, anchorY} = options;\n      const properties = {\n        x: resolveX(anchorX, x, width),\n        y: resolveY(anchorY, y, height),\n        width,\n        height,\n        options\n      };\n      me.updateElement(rects[i], i, properties, mode);\n    }\n\n    me.updateSharedOptions(sharedOptions, mode);\n  }\n\n  draw() {\n    const me = this;\n    const data = me.getMeta().data || [];\n    let i, ilen;\n\n    for (i = 0, ilen = data.length; i < ilen; ++i) {\n      data[i].draw(me._ctx);\n    }\n  }\n}\n\nfunction resolveX(anchorX, x, width) {\n  if (anchorX === 'left' || anchorX === 'start') {\n    return x;\n  }\n  if (anchorX === 'right' || anchorX === 'end') {\n    return x - width;\n  }\n  return x - width / 2;\n}\n\nfunction resolveY(anchorY, y, height) {\n  if (anchorY === 'top' || anchorY === 'start') {\n    return y;\n  }\n  if (anchorY === 'bottom' || anchorY === 'end') {\n    return y - height;\n  }\n  return y - height / 2;\n}\n\nMatrixController.id = 'matrix';\n\nMatrixController.version = version;\n\nMatrixController.defaults = {\n  dataElementType: 'matrix',\n\n  animations: {\n    numbers: {\n      type: 'number',\n      properties: ['x', 'y', 'width', 'height']\n    }\n  },\n  anchorX: 'center',\n  anchorY: 'center'\n};\n\nMatrixController.overrides = {\n  interaction: {\n    mode: 'nearest',\n    intersect: true\n  },\n\n  scales: {\n    x: {\n      type: 'linear',\n      offset: true\n    },\n    y: {\n      type: 'linear',\n      reverse: true\n    }\n  },\n};\n\n/**\n * Helper function to get the bounds of the rect\n * @param {MatrixElement} rect the rect\n * @param {boolean} [useFinalPosition]\n * @return {object} bounds of the rect\n * @private\n */\nfunction getBounds(rect, useFinalPosition) {\n  const {x, y, width, height} = rect.getProps(['x', 'y', 'width', 'height'], useFinalPosition);\n  return {left: x, top: y, right: x + width, bottom: y + height};\n}\n\nfunction limit(value, min, max) {\n  return Math.max(Math.min(value, max), min);\n}\n\nfunction parseBorderWidth(rect, maxW, maxH) {\n  const value = rect.options.borderWidth;\n  let t, r, b, l;\n\n  if (isObject(value)) {\n    t = +value.top || 0;\n    r = +value.right || 0;\n    b = +value.bottom || 0;\n    l = +value.left || 0;\n  } else {\n    t = r = b = l = +value || 0;\n  }\n\n  return {\n    t: limit(t, 0, maxH),\n    r: limit(r, 0, maxW),\n    b: limit(b, 0, maxH),\n    l: limit(l, 0, maxW)\n  };\n}\n\nfunction boundingRects(rect) {\n  const bounds = getBounds(rect);\n  const width = bounds.right - bounds.left;\n  const height = bounds.bottom - bounds.top;\n  const border = parseBorderWidth(rect, width / 2, height / 2);\n\n  return {\n    outer: {\n      x: bounds.left,\n      y: bounds.top,\n      w: width,\n      h: height\n    },\n    inner: {\n      x: bounds.left + border.l,\n      y: bounds.top + border.t,\n      w: width - border.l - border.r,\n      h: height - border.t - border.b\n    }\n  };\n}\n\nfunction inRange(rect, x, y, useFinalPosition) {\n  const skipX = x === null;\n  const skipY = y === null;\n  const bounds = !rect || (skipX && skipY) ? false : getBounds(rect, useFinalPosition);\n\n  return bounds\n\t\t&& (skipX || x >= bounds.left && x <= bounds.right)\n\t\t&& (skipY || y >= bounds.top && y <= bounds.bottom);\n}\n\nclass MatrixElement extends Element {\n  constructor(cfg) {\n    super();\n\n    this.options = undefined;\n    this.width = undefined;\n    this.height = undefined;\n\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n\n  draw(ctx) {\n    const options = this.options;\n    const {inner, outer} = boundingRects(this);\n    const radius = toTRBLCorners(options.borderRadius);\n\n    ctx.save();\n\n    if (outer.w !== inner.w || outer.h !== inner.h) {\n      ctx.beginPath();\n      addRoundedRectPath(ctx, {x: outer.x, y: outer.y, w: outer.w, h: outer.h, radius});\n      addRoundedRectPath(ctx, {x: inner.x, y: inner.y, w: inner.w, h: inner.h, radius});\n      ctx.fillStyle = options.backgroundColor;\n      ctx.fill();\n      ctx.fillStyle = options.borderColor;\n      ctx.fill('evenodd');\n    } else {\n      ctx.beginPath();\n      addRoundedRectPath(ctx, {x: inner.x, y: inner.y, w: inner.w, h: inner.h, radius});\n      ctx.fillStyle = options.backgroundColor;\n      ctx.fill();\n    }\n\n    ctx.restore();\n  }\n\n  inRange(mouseX, mouseY, useFinalPosition) {\n    return inRange(this, mouseX, mouseY, useFinalPosition);\n  }\n\n  inXRange(mouseX, useFinalPosition) {\n    return inRange(this, mouseX, null, useFinalPosition);\n  }\n\n  inYRange(mouseY, useFinalPosition) {\n    return inRange(this, null, mouseY, useFinalPosition);\n  }\n\n  getCenterPoint(useFinalPosition) {\n    const {x, y, width, height} = this.getProps(['x', 'y', 'width', 'height'], useFinalPosition);\n    return {\n      x: x + width / 2,\n      y: y + height / 2\n    };\n  }\n\n  tooltipPosition() {\n    return this.getCenterPoint();\n  }\n\n  getRange(axis) {\n    return axis === 'x' ? this.width / 2 : this.height / 2;\n  }\n}\n\nMatrixElement.id = 'matrix';\nMatrixElement.defaults = {\n  backgroundColor: undefined,\n  borderColor: undefined,\n  borderWidth: undefined,\n  borderRadius: 0,\n  anchorX: undefined,\n  anchorY: undefined,\n  width: 20,\n  height: 20\n};\n\nexport { MatrixController, MatrixElement };\n","import { Controller } from '@hotwired/stimulus';\nimport Chart from 'chart.js/auto';\nimport { MatrixController, MatrixElement } from 'chartjs-chart-matrix';\n\nChart.register(MatrixController, MatrixElement);\n\nexport default class extends Controller {\n  static targets = ['canvas'];\n  static values = {\n    type: {\n      type: String,\n      default: 'line',\n    },\n    data: Object,\n    options: Object,\n  };\n\n  connect() {\n    const element = this.hasCanvasTarget ? this.canvasTarget : this.element;\n\n    // @ts-ignore\n    this.chart = new Chart(element.getContext('2d'), {\n      // @ts-ignore\n      type: this.typeValue, // @ts-ignore\n      data: this.chartData, // @ts-ignore\n      options: this.chartOptions,\n    });\n  }\n\n  disconnect() {\n    this.chart.destroy();\n    this.chart = undefined;\n  }\n\n  get chartData() {\n    if (!this.hasDataValue) {\n      console.warn(\n        '[stimulus-chartjs] You need to pass data as JSON to see the chart.'\n      );\n    }\n\n    console.log(this.dataValue);\n\n    return this.dataValue;\n  }\n\n  get chartOptions() {\n    return {\n      ...this.defaultOptions,\n      ...this.optionsValue,\n    };\n  }\n\n  get defaultOptions() {\n    return {};\n  }\n}\n","/**! \n * hotkeys-js v3.10.0 \n * A simple micro-library for defining and dispatching keyboard shortcuts. It has no dependencies. \n * \n * Copyright (c) 2022 kenny wong <wowohoo@qq.com> \n * http://jaywcjlove.github.io/hotkeys \n * Licensed under the MIT license \n */\n\nvar isff = typeof navigator !== 'undefined' ? navigator.userAgent.toLowerCase().indexOf('firefox') > 0 : false; // 绑定事件\n\nfunction addEvent(object, event, method, useCapture) {\n  if (object.addEventListener) {\n    object.addEventListener(event, method, useCapture);\n  } else if (object.attachEvent) {\n    object.attachEvent(\"on\".concat(event), function () {\n      method(window.event);\n    });\n  }\n} // 修饰键转换成对应的键码\n\n\nfunction getMods(modifier, key) {\n  var mods = key.slice(0, key.length - 1);\n\n  for (var i = 0; i < mods.length; i++) {\n    mods[i] = modifier[mods[i].toLowerCase()];\n  }\n\n  return mods;\n} // 处理传的key字符串转换成数组\n\n\nfunction getKeys(key) {\n  if (typeof key !== 'string') key = '';\n  key = key.replace(/\\s/g, ''); // 匹配任何空白字符,包括空格、制表符、换页符等等\n\n  var keys = key.split(','); // 同时设置多个快捷键，以','分割\n\n  var index = keys.lastIndexOf(''); // 快捷键可能包含','，需特殊处理\n\n  for (; index >= 0;) {\n    keys[index - 1] += ',';\n    keys.splice(index, 1);\n    index = keys.lastIndexOf('');\n  }\n\n  return keys;\n} // 比较修饰键的数组\n\n\nfunction compareArray(a1, a2) {\n  var arr1 = a1.length >= a2.length ? a1 : a2;\n  var arr2 = a1.length >= a2.length ? a2 : a1;\n  var isIndex = true;\n\n  for (var i = 0; i < arr1.length; i++) {\n    if (arr2.indexOf(arr1[i]) === -1) isIndex = false;\n  }\n\n  return isIndex;\n}\n\nvar _keyMap = {\n  backspace: 8,\n  '⌫': 8,\n  tab: 9,\n  clear: 12,\n  enter: 13,\n  '↩': 13,\n  return: 13,\n  esc: 27,\n  escape: 27,\n  space: 32,\n  left: 37,\n  up: 38,\n  right: 39,\n  down: 40,\n  del: 46,\n  delete: 46,\n  ins: 45,\n  insert: 45,\n  home: 36,\n  end: 35,\n  pageup: 33,\n  pagedown: 34,\n  capslock: 20,\n  num_0: 96,\n  num_1: 97,\n  num_2: 98,\n  num_3: 99,\n  num_4: 100,\n  num_5: 101,\n  num_6: 102,\n  num_7: 103,\n  num_8: 104,\n  num_9: 105,\n  num_multiply: 106,\n  num_add: 107,\n  num_enter: 108,\n  num_subtract: 109,\n  num_decimal: 110,\n  num_divide: 111,\n  '⇪': 20,\n  ',': 188,\n  '.': 190,\n  '/': 191,\n  '`': 192,\n  '-': isff ? 173 : 189,\n  '=': isff ? 61 : 187,\n  ';': isff ? 59 : 186,\n  '\\'': 222,\n  '[': 219,\n  ']': 221,\n  '\\\\': 220\n}; // Modifier Keys\n\nvar _modifier = {\n  // shiftKey\n  '⇧': 16,\n  shift: 16,\n  // altKey\n  '⌥': 18,\n  alt: 18,\n  option: 18,\n  // ctrlKey\n  '⌃': 17,\n  ctrl: 17,\n  control: 17,\n  // metaKey\n  '⌘': 91,\n  cmd: 91,\n  command: 91\n};\nvar modifierMap = {\n  16: 'shiftKey',\n  18: 'altKey',\n  17: 'ctrlKey',\n  91: 'metaKey',\n  shiftKey: 16,\n  ctrlKey: 17,\n  altKey: 18,\n  metaKey: 91\n};\nvar _mods = {\n  16: false,\n  18: false,\n  17: false,\n  91: false\n};\nvar _handlers = {}; // F1~F12 special key\n\nfor (var k = 1; k < 20; k++) {\n  _keyMap[\"f\".concat(k)] = 111 + k;\n}\n\nvar _downKeys = []; // 记录摁下的绑定键\n\nvar winListendFocus = false; // window是否已经监听了focus事件\n\nvar _scope = 'all'; // 默认热键范围\n\nvar elementHasBindEvent = []; // 已绑定事件的节点记录\n// 返回键码\n\nvar code = function code(x) {\n  return _keyMap[x.toLowerCase()] || _modifier[x.toLowerCase()] || x.toUpperCase().charCodeAt(0);\n};\n\nvar getKey = function getKey(x) {\n  return Object.keys(_keyMap).find(function (k) {\n    return _keyMap[k] === x;\n  });\n};\n\nvar getModifier = function getModifier(x) {\n  return Object.keys(_modifier).find(function (k) {\n    return _modifier[k] === x;\n  });\n}; // 设置获取当前范围（默认为'所有'）\n\n\nfunction setScope(scope) {\n  _scope = scope || 'all';\n} // 获取当前范围\n\n\nfunction getScope() {\n  return _scope || 'all';\n} // 获取摁下绑定键的键值\n\n\nfunction getPressedKeyCodes() {\n  return _downKeys.slice(0);\n}\n\nfunction getPressedKeyString() {\n  return _downKeys.map(function (c) {\n    return getKey(c) || getModifier(c) || String.fromCharCode(c);\n  });\n} // 表单控件控件判断 返回 Boolean\n// hotkey is effective only when filter return true\n\n\nfunction filter(event) {\n  var target = event.target || event.srcElement;\n  var tagName = target.tagName;\n  var flag = true; // ignore: isContentEditable === 'true', <input> and <textarea> when readOnly state is false, <select>\n\n  if (target.isContentEditable || (tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT') && !target.readOnly) {\n    flag = false;\n  }\n\n  return flag;\n} // 判断摁下的键是否为某个键，返回true或者false\n\n\nfunction isPressed(keyCode) {\n  if (typeof keyCode === 'string') {\n    keyCode = code(keyCode); // 转换成键码\n  }\n\n  return _downKeys.indexOf(keyCode) !== -1;\n} // 循环删除handlers中的所有 scope(范围)\n\n\nfunction deleteScope(scope, newScope) {\n  var handlers;\n  var i; // 没有指定scope，获取scope\n\n  if (!scope) scope = getScope();\n\n  for (var key in _handlers) {\n    if (Object.prototype.hasOwnProperty.call(_handlers, key)) {\n      handlers = _handlers[key];\n\n      for (i = 0; i < handlers.length;) {\n        if (handlers[i].scope === scope) handlers.splice(i, 1);else i++;\n      }\n    }\n  } // 如果scope被删除，将scope重置为all\n\n\n  if (getScope() === scope) setScope(newScope || 'all');\n} // 清除修饰键\n\n\nfunction clearModifier(event) {\n  var key = event.keyCode || event.which || event.charCode;\n\n  var i = _downKeys.indexOf(key); // 从列表中清除按压过的键\n\n\n  if (i >= 0) {\n    _downKeys.splice(i, 1);\n  } // 特殊处理 cmmand 键，在 cmmand 组合快捷键 keyup 只执行一次的问题\n\n\n  if (event.key && event.key.toLowerCase() === 'meta') {\n    _downKeys.splice(0, _downKeys.length);\n  } // 修饰键 shiftKey altKey ctrlKey (command||metaKey) 清除\n\n\n  if (key === 93 || key === 224) key = 91;\n\n  if (key in _mods) {\n    _mods[key] = false; // 将修饰键重置为false\n\n    for (var k in _modifier) {\n      if (_modifier[k] === key) hotkeys[k] = false;\n    }\n  }\n}\n\nfunction unbind(keysInfo) {\n  // unbind(), unbind all keys\n  if (typeof keysInfo === 'undefined') {\n    Object.keys(_handlers).forEach(function (key) {\n      return delete _handlers[key];\n    });\n  } else if (Array.isArray(keysInfo)) {\n    // support like : unbind([{key: 'ctrl+a', scope: 's1'}, {key: 'ctrl-a', scope: 's2', splitKey: '-'}])\n    keysInfo.forEach(function (info) {\n      if (info.key) eachUnbind(info);\n    });\n  } else if (typeof keysInfo === 'object') {\n    // support like unbind({key: 'ctrl+a, ctrl+b', scope:'abc'})\n    if (keysInfo.key) eachUnbind(keysInfo);\n  } else if (typeof keysInfo === 'string') {\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    // support old method\n    // eslint-disable-line\n    var scope = args[0],\n        method = args[1];\n\n    if (typeof scope === 'function') {\n      method = scope;\n      scope = '';\n    }\n\n    eachUnbind({\n      key: keysInfo,\n      scope: scope,\n      method: method,\n      splitKey: '+'\n    });\n  }\n} // 解除绑定某个范围的快捷键\n\n\nvar eachUnbind = function eachUnbind(_ref) {\n  var key = _ref.key,\n      scope = _ref.scope,\n      method = _ref.method,\n      _ref$splitKey = _ref.splitKey,\n      splitKey = _ref$splitKey === void 0 ? '+' : _ref$splitKey;\n  var multipleKeys = getKeys(key);\n  multipleKeys.forEach(function (originKey) {\n    var unbindKeys = originKey.split(splitKey);\n    var len = unbindKeys.length;\n    var lastKey = unbindKeys[len - 1];\n    var keyCode = lastKey === '*' ? '*' : code(lastKey);\n    if (!_handlers[keyCode]) return; // 判断是否传入范围，没有就获取范围\n\n    if (!scope) scope = getScope();\n    var mods = len > 1 ? getMods(_modifier, unbindKeys) : [];\n    _handlers[keyCode] = _handlers[keyCode].filter(function (record) {\n      // 通过函数判断，是否解除绑定，函数相等直接返回\n      var isMatchingMethod = method ? record.method === method : true;\n      return !(isMatchingMethod && record.scope === scope && compareArray(record.mods, mods));\n    });\n  });\n}; // 对监听对应快捷键的回调函数进行处理\n\n\nfunction eventHandler(event, handler, scope, element) {\n  if (handler.element !== element) {\n    return;\n  }\n\n  var modifiersMatch; // 看它是否在当前范围\n\n  if (handler.scope === scope || handler.scope === 'all') {\n    // 检查是否匹配修饰符（如果有返回true）\n    modifiersMatch = handler.mods.length > 0;\n\n    for (var y in _mods) {\n      if (Object.prototype.hasOwnProperty.call(_mods, y)) {\n        if (!_mods[y] && handler.mods.indexOf(+y) > -1 || _mods[y] && handler.mods.indexOf(+y) === -1) {\n          modifiersMatch = false;\n        }\n      }\n    } // 调用处理程序，如果是修饰键不做处理\n\n\n    if (handler.mods.length === 0 && !_mods[16] && !_mods[18] && !_mods[17] && !_mods[91] || modifiersMatch || handler.shortcut === '*') {\n      if (handler.method(event, handler) === false) {\n        if (event.preventDefault) event.preventDefault();else event.returnValue = false;\n        if (event.stopPropagation) event.stopPropagation();\n        if (event.cancelBubble) event.cancelBubble = true;\n      }\n    }\n  }\n} // 处理keydown事件\n\n\nfunction dispatch(event, element) {\n  var asterisk = _handlers['*'];\n  var key = event.keyCode || event.which || event.charCode; // 表单控件过滤 默认表单控件不触发快捷键\n\n  if (!hotkeys.filter.call(this, event)) return; // Gecko(Firefox)的command键值224，在Webkit(Chrome)中保持一致\n  // Webkit左右 command 键值不一样\n\n  if (key === 93 || key === 224) key = 91;\n  /**\n   * Collect bound keys\n   * If an Input Method Editor is processing key input and the event is keydown, return 229.\n   * https://stackoverflow.com/questions/25043934/is-it-ok-to-ignore-keydown-events-with-keycode-229\n   * http://lists.w3.org/Archives/Public/www-dom/2010JulSep/att-0182/keyCode-spec.html\n   */\n\n  if (_downKeys.indexOf(key) === -1 && key !== 229) _downKeys.push(key);\n  /**\n   * Jest test cases are required.\n   * ===============================\n   */\n\n  ['ctrlKey', 'altKey', 'shiftKey', 'metaKey'].forEach(function (keyName) {\n    var keyNum = modifierMap[keyName];\n\n    if (event[keyName] && _downKeys.indexOf(keyNum) === -1) {\n      _downKeys.push(keyNum);\n    } else if (!event[keyName] && _downKeys.indexOf(keyNum) > -1) {\n      _downKeys.splice(_downKeys.indexOf(keyNum), 1);\n    } else if (keyName === 'metaKey' && event[keyName] && _downKeys.length === 3) {\n      /**\n       * Fix if Command is pressed:\n       * ===============================\n       */\n      if (!(event.ctrlKey || event.shiftKey || event.altKey)) {\n        _downKeys = _downKeys.slice(_downKeys.indexOf(keyNum));\n      }\n    }\n  });\n  /**\n   * -------------------------------\n   */\n\n  if (key in _mods) {\n    _mods[key] = true; // 将特殊字符的key注册到 hotkeys 上\n\n    for (var k in _modifier) {\n      if (_modifier[k] === key) hotkeys[k] = true;\n    }\n\n    if (!asterisk) return;\n  } // 将 modifierMap 里面的修饰键绑定到 event 中\n\n\n  for (var e in _mods) {\n    if (Object.prototype.hasOwnProperty.call(_mods, e)) {\n      _mods[e] = event[modifierMap[e]];\n    }\n  }\n  /**\n   * https://github.com/jaywcjlove/hotkeys/pull/129\n   * This solves the issue in Firefox on Windows where hotkeys corresponding to special characters would not trigger.\n   * An example of this is ctrl+alt+m on a Swedish keyboard which is used to type μ.\n   * Browser support: https://caniuse.com/#feat=keyboardevent-getmodifierstate\n   */\n\n\n  if (event.getModifierState && !(event.altKey && !event.ctrlKey) && event.getModifierState('AltGraph')) {\n    if (_downKeys.indexOf(17) === -1) {\n      _downKeys.push(17);\n    }\n\n    if (_downKeys.indexOf(18) === -1) {\n      _downKeys.push(18);\n    }\n\n    _mods[17] = true;\n    _mods[18] = true;\n  } // 获取范围 默认为 `all`\n\n\n  var scope = getScope(); // 对任何快捷键都需要做的处理\n\n  if (asterisk) {\n    for (var i = 0; i < asterisk.length; i++) {\n      if (asterisk[i].scope === scope && (event.type === 'keydown' && asterisk[i].keydown || event.type === 'keyup' && asterisk[i].keyup)) {\n        eventHandler(event, asterisk[i], scope, element);\n      }\n    }\n  } // key 不在 _handlers 中返回\n\n\n  if (!(key in _handlers)) return;\n\n  for (var _i = 0; _i < _handlers[key].length; _i++) {\n    if (event.type === 'keydown' && _handlers[key][_i].keydown || event.type === 'keyup' && _handlers[key][_i].keyup) {\n      if (_handlers[key][_i].key) {\n        var record = _handlers[key][_i];\n        var splitKey = record.splitKey;\n        var keyShortcut = record.key.split(splitKey);\n        var _downKeysCurrent = []; // 记录当前按键键值\n\n        for (var a = 0; a < keyShortcut.length; a++) {\n          _downKeysCurrent.push(code(keyShortcut[a]));\n        }\n\n        if (_downKeysCurrent.sort().join('') === _downKeys.sort().join('')) {\n          // 找到处理内容\n          eventHandler(event, record, scope, element);\n        }\n      }\n    }\n  }\n} // 判断 element 是否已经绑定事件\n\n\nfunction isElementBind(element) {\n  return elementHasBindEvent.indexOf(element) > -1;\n}\n\nfunction hotkeys(key, option, method) {\n  _downKeys = [];\n  var keys = getKeys(key); // 需要处理的快捷键列表\n\n  var mods = [];\n  var scope = 'all'; // scope默认为all，所有范围都有效\n\n  var element = document; // 快捷键事件绑定节点\n\n  var i = 0;\n  var keyup = false;\n  var keydown = true;\n  var splitKey = '+';\n  var capture = false; // 对为设定范围的判断\n\n  if (method === undefined && typeof option === 'function') {\n    method = option;\n  }\n\n  if (Object.prototype.toString.call(option) === '[object Object]') {\n    if (option.scope) scope = option.scope; // eslint-disable-line\n\n    if (option.element) element = option.element; // eslint-disable-line\n\n    if (option.keyup) keyup = option.keyup; // eslint-disable-line\n\n    if (option.keydown !== undefined) keydown = option.keydown; // eslint-disable-line\n\n    if (option.capture !== undefined) capture = option.capture; // eslint-disable-line\n\n    if (typeof option.splitKey === 'string') splitKey = option.splitKey; // eslint-disable-line\n  }\n\n  if (typeof option === 'string') scope = option; // 对于每个快捷键进行处理\n\n  for (; i < keys.length; i++) {\n    key = keys[i].split(splitKey); // 按键列表\n\n    mods = []; // 如果是组合快捷键取得组合快捷键\n\n    if (key.length > 1) mods = getMods(_modifier, key); // 将非修饰键转化为键码\n\n    key = key[key.length - 1];\n    key = key === '*' ? '*' : code(key); // *表示匹配所有快捷键\n    // 判断key是否在_handlers中，不在就赋一个空数组\n\n    if (!(key in _handlers)) _handlers[key] = [];\n\n    _handlers[key].push({\n      keyup: keyup,\n      keydown: keydown,\n      scope: scope,\n      mods: mods,\n      shortcut: keys[i],\n      method: method,\n      key: keys[i],\n      splitKey: splitKey,\n      element: element\n    });\n  } // 在全局document上设置快捷键\n\n\n  if (typeof element !== 'undefined' && !isElementBind(element) && window) {\n    elementHasBindEvent.push(element);\n    addEvent(element, 'keydown', function (e) {\n      dispatch(e, element);\n    }, capture);\n\n    if (!winListendFocus) {\n      winListendFocus = true;\n      addEvent(window, 'focus', function () {\n        _downKeys = [];\n      }, capture);\n    }\n\n    addEvent(element, 'keyup', function (e) {\n      dispatch(e, element);\n      clearModifier(e);\n    }, capture);\n  }\n}\n\nfunction trigger(shortcut) {\n  var scope = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'all';\n  Object.keys(_handlers).forEach(function (key) {\n    var data = _handlers[key].find(function (item) {\n      return item.scope === scope && item.shortcut === shortcut;\n    });\n\n    if (data && data.method) {\n      data.method();\n    }\n  });\n}\n\nvar _api = {\n  getPressedKeyString: getPressedKeyString,\n  setScope: setScope,\n  getScope: getScope,\n  deleteScope: deleteScope,\n  getPressedKeyCodes: getPressedKeyCodes,\n  isPressed: isPressed,\n  filter: filter,\n  trigger: trigger,\n  unbind: unbind,\n  keyMap: _keyMap,\n  modifier: _modifier,\n  modifierMap: modifierMap\n};\n\nfor (var a in _api) {\n  if (Object.prototype.hasOwnProperty.call(_api, a)) {\n    hotkeys[a] = _api[a];\n  }\n}\n\nif (typeof window !== 'undefined') {\n  var _hotkeys = window.hotkeys;\n\n  hotkeys.noConflict = function (deep) {\n    if (deep && window.hotkeys === hotkeys) {\n      window.hotkeys = _hotkeys;\n    }\n\n    return hotkeys;\n  };\n\n  window.hotkeys = hotkeys;\n}\n\nexport { hotkeys as default };\n","/*\nStimulus-Use 0.50.0-2\n*/\nimport { Controller } from '@hotwired/stimulus';\nimport hotkeys from 'hotkeys-js';\n\nconst method = (controller, methodName) => {\n    const method = controller[methodName];\n    if (typeof method == 'function') {\n        return method;\n    }\n    else {\n        return (...args) => { };\n    }\n};\nconst composeEventName = (name, controller, eventPrefix) => {\n    let composedName = name;\n    if (eventPrefix === true) {\n        composedName = `${controller.identifier}:${name}`;\n    }\n    else if (typeof eventPrefix === 'string') {\n        composedName = `${eventPrefix}:${name}`;\n    }\n    return composedName;\n};\nconst extendedEvent = (type, event, detail) => {\n    const { bubbles, cancelable, composed } = event || { bubbles: true, cancelable: true, composed: true };\n    if (event) {\n        Object.assign(detail, { originalEvent: event });\n    }\n    const customEvent = new CustomEvent(type, {\n        bubbles,\n        cancelable,\n        composed,\n        detail\n    });\n    return customEvent;\n};\nfunction isElementInViewport(el) {\n    const rect = el.getBoundingClientRect();\n    const windowHeight = window.innerHeight || document.documentElement.clientHeight;\n    const windowWidth = window.innerWidth || document.documentElement.clientWidth;\n    const vertInView = rect.top <= windowHeight && rect.top + rect.height >= 0;\n    const horInView = rect.left <= windowWidth && rect.left + rect.width >= 0;\n    return vertInView && horInView;\n}\nfunction camelize(value) {\n    return value.replace(/(?:[_-])([a-z0-9])/g, (_, char) => char.toUpperCase());\n}\n\nconst defaultOptions$7 = {\n    dispatchEvent: true,\n    eventPrefix: true\n};\nconst useIntersection = (controller, options = {}) => {\n    const { dispatchEvent, eventPrefix } = Object.assign({}, defaultOptions$7, options);\n    const targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n    const callback = (entries) => {\n        const [entry] = entries;\n        if (entry.isIntersecting) {\n            dispatchAppear(entry);\n        }\n        else if (controller.isVisible) {\n            dispatchDisappear(entry);\n        }\n    };\n    const dispatchAppear = (entry) => {\n        controller.isVisible = true;\n        method(controller, 'appear').call(controller, entry);\n        if (dispatchEvent) {\n            const eventName = composeEventName('appear', controller, eventPrefix);\n            const appearEvent = extendedEvent(eventName, null, { controller, entry });\n            targetElement.dispatchEvent(appearEvent);\n        }\n    };\n    const dispatchDisappear = (entry) => {\n        controller.isVisible = false;\n        method(controller, 'disappear').call(controller, entry);\n        if (dispatchEvent) {\n            const eventName = composeEventName('disappear', controller, eventPrefix);\n            const disappearEvent = extendedEvent(eventName, null, { controller, entry });\n            targetElement.dispatchEvent(disappearEvent);\n        }\n    };\n    const controllerDisconnect = controller.disconnect.bind(controller);\n    const observer = new IntersectionObserver(callback, options);\n    const observe = () => {\n        observer.observe(targetElement);\n    };\n    const unobserve = () => {\n        observer.unobserve(targetElement);\n    };\n    Object.assign(controller, {\n        isVisible: false,\n        disconnect() {\n            unobserve();\n            controllerDisconnect();\n        }\n    });\n    observe();\n    return [observe, unobserve];\n};\n\nclass IntersectionComposableController extends Controller {\n    constructor() {\n        super(...arguments);\n        this.isVisible = false;\n    }\n}\nclass IntersectionController extends IntersectionComposableController {\n    constructor(context) {\n        super(context);\n        requestAnimationFrame(() => {\n            const [observe, unobserve] = useIntersection(this, this.options);\n            Object.assign(this, { observe, unobserve });\n        });\n    }\n}\n\nconst useLazyLoad = (controller, options) => {\n    const callback = (entries) => {\n        const [entry] = entries;\n        if (entry.isIntersecting && !controller.isLoaded) {\n            handleAppear();\n        }\n    };\n    const handleAppear = (entry) => {\n        const src = controller.data.get('src');\n        if (!src)\n            return;\n        const imageElement = controller.element;\n        controller.isLoading = true;\n        method(controller, 'loading').call(controller, src);\n        imageElement.onload = () => {\n            handleLoaded(src);\n        };\n        imageElement.src = src;\n    };\n    const handleLoaded = (src) => {\n        controller.isLoading = false;\n        controller.isLoaded = true;\n        method(controller, 'loaded').call(controller, src);\n    };\n    const controllerDisconnect = controller.disconnect.bind(controller);\n    const observer = new IntersectionObserver(callback, options);\n    const observe = () => {\n        observer.observe(controller.element);\n    };\n    const unobserve = () => {\n        observer.unobserve(controller.element);\n    };\n    Object.assign(controller, {\n        isVisible: false,\n        disconnect() {\n            unobserve();\n            controllerDisconnect();\n        }\n    });\n    observe();\n    return [observe, unobserve];\n};\n\nclass LazyLoadComposableController extends Controller {\n    constructor() {\n        super(...arguments);\n        this.isLoading = false;\n        this.isLoaded = false;\n    }\n}\nclass LazyLoadController extends LazyLoadComposableController {\n    constructor(context) {\n        super(context);\n        this.options = { rootMargin: '10%' };\n        requestAnimationFrame(() => {\n            const [observe, unobserve] = useLazyLoad(this, this.options);\n            Object.assign(this, { observe, unobserve });\n        });\n    }\n}\n\nconst defaultOptions$6 = {\n    dispatchEvent: true,\n    eventPrefix: true\n};\nconst useResize = (controller, options = {}) => {\n    const { dispatchEvent, eventPrefix } = Object.assign({}, defaultOptions$6, options);\n    const targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n    const callback = (entries) => {\n        const [entry] = entries;\n        method(controller, 'resize').call(controller, entry.contentRect);\n        if (dispatchEvent) {\n            const eventName = composeEventName('resize', controller, eventPrefix);\n            const appearEvent = extendedEvent(eventName, null, {\n                controller,\n                entry\n            });\n            targetElement.dispatchEvent(appearEvent);\n        }\n    };\n    const controllerDisconnect = controller.disconnect.bind(controller);\n    const observer = new ResizeObserver(callback);\n    const observe = () => {\n        observer.observe(targetElement);\n    };\n    const unobserve = () => {\n        observer.unobserve(targetElement);\n    };\n    Object.assign(controller, {\n        disconnect() {\n            unobserve();\n            controllerDisconnect();\n        }\n    });\n    observe();\n    return [observe, unobserve];\n};\n\nclass ResizeComposableController extends Controller {\n}\nclass ResizeController extends ResizeComposableController {\n    constructor(context) {\n        super(context);\n        requestAnimationFrame(() => {\n            const [observe, unobserve] = useResize(this, this.options);\n            Object.assign(this, { observe, unobserve });\n        });\n    }\n}\n\nconst defaultOptions$5 = {\n    events: ['click', 'touchend'],\n    onlyVisible: true,\n    dispatchEvent: true,\n    eventPrefix: true\n};\nconst useClickOutside = (controller, options = {}) => {\n    const { onlyVisible, dispatchEvent, events, eventPrefix } = Object.assign({}, defaultOptions$5, options);\n    const onEvent = (event) => {\n        const targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n        if (targetElement.contains(event.target) || (!isElementInViewport(targetElement) && onlyVisible)) {\n            return;\n        }\n        if (controller.clickOutside) {\n            controller.clickOutside(event);\n        }\n        if (dispatchEvent) {\n            const eventName = composeEventName('click:outside', controller, eventPrefix);\n            const clickOutsideEvent = extendedEvent(eventName, event, { controller });\n            targetElement.dispatchEvent(clickOutsideEvent);\n        }\n    };\n    const observe = () => {\n        events === null || events === void 0 ? void 0 : events.forEach(event => {\n            window.addEventListener(event, onEvent, false);\n        });\n    };\n    const unobserve = () => {\n        events === null || events === void 0 ? void 0 : events.forEach(event => {\n            window.removeEventListener(event, onEvent, false);\n        });\n    };\n    const controllerDisconnect = controller.disconnect.bind(controller);\n    Object.assign(controller, {\n        disconnect() {\n            unobserve();\n            controllerDisconnect();\n        }\n    });\n    observe();\n    return [observe, unobserve];\n};\n\nclass ClickOutsideComposableController extends Controller {\n}\nclass ClickOutsideController extends ClickOutsideComposableController {\n    constructor(context) {\n        super(context);\n        requestAnimationFrame(() => {\n            const [observe, unobserve] = useClickOutside(this, this.options);\n            Object.assign(this, { observe, unobserve });\n        });\n    }\n}\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nfunction __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\n\nconst defaultOptions$4 = {\n    debug: false,\n    logger: console,\n    dispatchEvent: true,\n    eventPrefix: true\n};\nclass StimulusUse {\n    constructor(controller, options = {}) {\n        var _a, _b, _c;\n        this.log = (functionName, args) => {\n            if (!this.debug)\n                return;\n            this.logger.groupCollapsed(`%c${this.controller.identifier} %c#${functionName}`, 'color: #3B82F6', 'color: unset');\n            this.logger.log(Object.assign({ controllerId: this.controllerId }, args));\n            this.logger.groupEnd();\n        };\n        this.dispatch = (eventName, details = {}) => {\n            if (this.dispatchEvent) {\n                const { event } = details, eventDetails = __rest(details, [\"event\"]);\n                const customEvent = this.extendedEvent(eventName, event || null, eventDetails);\n                this.targetElement.dispatchEvent(customEvent);\n                this.log('dispatchEvent', Object.assign({ eventName: customEvent.type }, eventDetails));\n            }\n        };\n        this.call = (methodName, args = {}) => {\n            const method = this.controller[methodName];\n            if (typeof method == 'function') {\n                return method.call(this.controller, args);\n            }\n        };\n        this.extendedEvent = (name, event, detail) => {\n            const { bubbles, cancelable, composed } = event || { bubbles: true, cancelable: true, composed: true };\n            if (event) {\n                Object.assign(detail, { originalEvent: event });\n            }\n            const customEvent = new CustomEvent(this.composeEventName(name), {\n                bubbles,\n                cancelable,\n                composed,\n                detail\n            });\n            return customEvent;\n        };\n        this.composeEventName = (name) => {\n            let composedName = name;\n            if (this.eventPrefix === true) {\n                composedName = `${this.controller.identifier}:${name}`;\n            }\n            else if (typeof this.eventPrefix === 'string') {\n                composedName = `${this.eventPrefix}:${name}`;\n            }\n            return composedName;\n        };\n        this.debug = (_b = (_a = options === null || options === void 0 ? void 0 : options.debug) !== null && _a !== void 0 ? _a : controller.application.stimulusUseDebug) !== null && _b !== void 0 ? _b : defaultOptions$4.debug;\n        this.logger = (_c = options === null || options === void 0 ? void 0 : options.logger) !== null && _c !== void 0 ? _c : defaultOptions$4.logger;\n        this.controller = controller;\n        this.controllerId = controller.element.id || controller.element.dataset.id;\n        this.targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n        const { dispatchEvent, eventPrefix } = Object.assign({}, defaultOptions$4, options);\n        Object.assign(this, { dispatchEvent, eventPrefix });\n        this.controllerInitialize = controller.initialize.bind(controller);\n        this.controllerConnect = controller.connect.bind(controller);\n        this.controllerDisconnect = controller.disconnect.bind(controller);\n    }\n}\n\nconst defaultOptions$3 = {\n    eventPrefix: true,\n    bubbles: true,\n    cancelable: true\n};\nclass UseDispatch extends StimulusUse {\n    constructor(controller, options = {}) {\n        var _a, _b, _c, _d;\n        super(controller, options);\n        this.dispatch = (eventName, detail = {}) => {\n            const { controller, targetElement, eventPrefix, bubbles, cancelable, log } = this;\n            Object.assign(detail, { controller });\n            const eventNameWithPrefix = composeEventName(eventName, this.controller, eventPrefix);\n            const event = new CustomEvent(eventNameWithPrefix, {\n                detail,\n                bubbles,\n                cancelable\n            });\n            targetElement.dispatchEvent(event);\n            log('dispatch', { eventName: eventNameWithPrefix, detail, bubbles, cancelable });\n            return event;\n        };\n        this.targetElement = (_a = options.element) !== null && _a !== void 0 ? _a : controller.element;\n        this.eventPrefix = (_b = options.eventPrefix) !== null && _b !== void 0 ? _b : defaultOptions$3.eventPrefix;\n        this.bubbles = (_c = options.bubbles) !== null && _c !== void 0 ? _c : defaultOptions$3.bubbles;\n        this.cancelable = (_d = options.cancelable) !== null && _d !== void 0 ? _d : defaultOptions$3.cancelable;\n        this.enhanceController();\n    }\n    enhanceController() {\n        Object.assign(this.controller, { dispatch: this.dispatch });\n    }\n}\nconst useDispatch = (controller, options = {}) => {\n    return new UseDispatch(controller, options);\n};\n\nconst useApplication = (controller, options = {}) => {\n    Object.defineProperty(controller, 'isPreview', {\n        get() {\n            return (document.documentElement.hasAttribute('data-turbolinks-preview') ||\n                document.documentElement.hasAttribute('data-turbo-preview'));\n        }\n    });\n    Object.defineProperty(controller, 'isConnected', {\n        get() {\n            return !!Array.from(this.context.module.connectedContexts).find(c => c === this.context);\n        }\n    });\n    Object.defineProperty(controller, 'csrfToken', {\n        get() {\n            return this.metaValue('csrf-token');\n        }\n    });\n    useDispatch(controller, options);\n    Object.assign(controller, {\n        metaValue(name) {\n            const element = document.head.querySelector(`meta[name=\"${name}\"]`);\n            return element && element.getAttribute('content');\n        }\n    });\n};\n\nclass ApplicationController extends Controller {\n    constructor(context) {\n        super(context);\n        this.isPreview = false;\n        this.isConnected = false;\n        this.csrfToken = '';\n        useApplication(this, this.options);\n    }\n}\n\nconst defaultEvents = ['mousemove', 'mousedown', 'resize', 'keydown', 'touchstart', 'wheel'];\nconst oneMinute = 60e3;\nconst defaultOptions$2 = {\n    ms: oneMinute,\n    initialState: false,\n    events: defaultEvents,\n    dispatchEvent: true,\n    eventPrefix: true\n};\nconst useIdle = (controller, options = {}) => {\n    const { ms, initialState, events, dispatchEvent, eventPrefix } = Object.assign({}, defaultOptions$2, options);\n    let isIdle = initialState;\n    let timeout = setTimeout(() => {\n        isIdle = true;\n        dispatchAway();\n    }, ms);\n    const dispatchAway = (event) => {\n        const eventName = composeEventName('away', controller, eventPrefix);\n        controller.isIdle = true;\n        method(controller, 'away').call(controller, event);\n        if (dispatchEvent) {\n            const clickOutsideEvent = extendedEvent(eventName, event || null, { controller });\n            controller.element.dispatchEvent(clickOutsideEvent);\n        }\n    };\n    const dispatchBack = (event) => {\n        const eventName = composeEventName('back', controller, eventPrefix);\n        controller.isIdle = false;\n        method(controller, 'back').call(controller, event);\n        if (dispatchEvent) {\n            const clickOutsideEvent = extendedEvent(eventName, event || null, { controller });\n            controller.element.dispatchEvent(clickOutsideEvent);\n        }\n    };\n    const onEvent = (event) => {\n        if (isIdle)\n            dispatchBack(event);\n        isIdle = false;\n        clearTimeout(timeout);\n        timeout = setTimeout(() => {\n            isIdle = true;\n            dispatchAway(event);\n        }, ms);\n    };\n    const onVisibility = (event) => {\n        if (!document.hidden)\n            onEvent(event);\n    };\n    if (isIdle) {\n        dispatchAway();\n    }\n    else {\n        dispatchBack();\n    }\n    const controllerDisconnect = controller.disconnect.bind(controller);\n    const observe = () => {\n        events.forEach(event => {\n            window.addEventListener(event, onEvent);\n        });\n        document.addEventListener('visibilitychange', onVisibility);\n    };\n    const unobserve = () => {\n        clearTimeout(timeout);\n        events.forEach(event => {\n            window.removeEventListener(event, onEvent);\n        });\n        document.removeEventListener('visibilitychange', onVisibility);\n    };\n    Object.assign(controller, {\n        disconnect() {\n            unobserve();\n            controllerDisconnect();\n        }\n    });\n    observe();\n    return [observe, unobserve];\n};\n\nclass IdleComposableController extends Controller {\n    constructor() {\n        super(...arguments);\n        this.isIdle = false;\n    }\n}\nclass IdleController extends IdleComposableController {\n    constructor(context) {\n        super(context);\n        requestAnimationFrame(() => {\n            const [observe, unobserve] = useIdle(this, this.options);\n            Object.assign(this, { observe, unobserve });\n        });\n    }\n}\n\nclass UseVisibility extends StimulusUse {\n    constructor(controller, options = {}) {\n        super(controller, options);\n        this.observe = () => {\n            this.controller.isVisible = !document.hidden;\n            document.addEventListener('visibilitychange', this.handleVisibilityChange);\n            this.handleVisibilityChange();\n        };\n        this.unobserve = () => {\n            document.removeEventListener('visibilitychange', this.handleVisibilityChange);\n        };\n        this.becomesInvisible = (event) => {\n            this.controller.isVisible = false;\n            this.call('invisible', event);\n            this.log('invisible', { isVisible: false });\n            this.dispatch('invisible', { event, isVisible: false });\n        };\n        this.becomesVisible = (event) => {\n            this.controller.isVisible = true;\n            this.call('visible', event);\n            this.log('visible', { isVisible: true });\n            this.dispatch('visible', { event, isVisible: true });\n        };\n        this.handleVisibilityChange = (event) => {\n            if (document.hidden) {\n                this.becomesInvisible(event);\n            }\n            else {\n                this.becomesVisible(event);\n            }\n        };\n        this.controller = controller;\n        this.enhanceController();\n        this.observe();\n    }\n    enhanceController() {\n        const controllerDisconnect = this.controllerDisconnect;\n        const disconnect = () => {\n            this.unobserve();\n            controllerDisconnect();\n        };\n        Object.assign(this.controller, { disconnect });\n    }\n}\nconst useVisibility = (controller, options = {}) => {\n    const observer = new UseVisibility(controller, options);\n    return [observer.observe, observer.unobserve];\n};\n\nclass VisibilityComposableController extends Controller {\n    constructor() {\n        super(...arguments);\n        this.isVisible = false;\n    }\n}\nclass VisibilityController extends VisibilityComposableController {\n    constructor(context) {\n        super(context);\n        requestAnimationFrame(() => {\n            const [observe, unobserve] = useVisibility(this, this.options);\n            Object.assign(this, { observe, unobserve });\n        });\n    }\n}\n\nclass UseHover extends StimulusUse {\n    constructor(controller, options = {}) {\n        super(controller, options);\n        this.observe = () => {\n            this.targetElement.addEventListener('mouseenter', this.onEnter);\n            this.targetElement.addEventListener('mouseleave', this.onLeave);\n        };\n        this.unobserve = () => {\n            this.targetElement.removeEventListener('mouseenter', this.onEnter);\n            this.targetElement.removeEventListener('mouseleave', this.onLeave);\n        };\n        this.onEnter = (event) => {\n            this.call('mouseEnter', event);\n            this.log('mouseEnter', { hover: true });\n            this.dispatch('mouseEnter', { hover: false });\n        };\n        this.onLeave = (event) => {\n            this.call('mouseLeave', event);\n            this.log('mouseLeave', { hover: false });\n            this.dispatch('mouseLeave', { hover: false });\n        };\n        this.controller = controller;\n        this.enhanceController();\n        this.observe();\n    }\n    enhanceController() {\n        const controllerDisconnect = this.controller.disconnect.bind(this.controller);\n        const disconnect = () => {\n            this.unobserve();\n            controllerDisconnect();\n        };\n        Object.assign(this.controller, { disconnect });\n    }\n}\nconst useHover = (controller, options = {}) => {\n    const observer = new UseHover(controller, options);\n    return [observer.observe, observer.unobserve];\n};\n\nclass HoverComposableController extends Controller {\n}\nclass HoverController extends HoverComposableController {\n    constructor(context) {\n        super(context);\n        requestAnimationFrame(() => {\n            const [observe, unobserve] = useHover(this, this.options);\n            Object.assign(this, { observe, unobserve });\n        });\n    }\n}\n\nclass UseMutation extends StimulusUse {\n    constructor(controller, options = {}) {\n        super(controller, options);\n        this.observe = () => {\n            try {\n                this.observer.observe(this.targetElement, this.options);\n            }\n            catch (error) {\n                this.controller.application.handleError(error, 'At a minimum, one of childList, attributes, and/or characterData must be true', {});\n            }\n        };\n        this.unobserve = () => {\n            this.observer.disconnect();\n        };\n        this.mutation = (entries) => {\n            this.call('mutate', entries);\n            this.log('mutate', { entries });\n            this.dispatch('mutate', { entries });\n        };\n        this.targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n        this.controller = controller;\n        this.options = options;\n        this.observer = new MutationObserver(this.mutation);\n        this.enhanceController();\n        this.observe();\n    }\n    enhanceController() {\n        const controllerDisconnect = this.controller.disconnect.bind(this.controller);\n        const disconnect = () => {\n            this.unobserve();\n            controllerDisconnect();\n        };\n        Object.assign(this.controller, { disconnect });\n    }\n}\nconst useMutation = (controller, options = {}) => {\n    const observer = new UseMutation(controller, options);\n    return [observer.observe, observer.unobserve];\n};\n\nclass MutationComposableController extends Controller {\n}\nclass MutationController extends MutationComposableController {\n    constructor(context) {\n        super(context);\n        requestAnimationFrame(() => {\n            const [observe, unobserve] = useMutation(this, this.options);\n            Object.assign(this, { observe, unobserve });\n        });\n    }\n}\n\nclass UseTargetMutation extends StimulusUse {\n    constructor(controller, options = {}) {\n        super(controller, options);\n        this.observe = () => {\n            this.observer.observe(this.targetElement, {\n                subtree: true,\n                characterData: true,\n                childList: true,\n                attributes: true,\n                attributeOldValue: true,\n                attributeFilter: [this.targetSelector, this.scopedTargetSelector]\n            });\n        };\n        this.unobserve = () => {\n            this.observer.disconnect();\n        };\n        this.mutation = (entries) => {\n            for (const mutation of entries) {\n                switch (mutation.type) {\n                    case 'attributes':\n                        let newValue = mutation.target.getAttribute(mutation.attributeName);\n                        let oldValue = mutation.oldValue;\n                        if (mutation.attributeName === this.targetSelector || mutation.attributeName === this.scopedTargetSelector) {\n                            let oldTargets = this.targetsUsedByThisController(oldValue);\n                            let newTargets = this.targetsUsedByThisController(newValue);\n                            let removedTargets = oldTargets.filter(target => !newTargets.includes(target));\n                            let addedTargets = newTargets.filter(target => !oldTargets.includes(target));\n                            removedTargets.forEach(target => this.targetRemoved(this.stripIdentifierPrefix(target), mutation.target, 'attributeChange'));\n                            addedTargets.forEach(target => this.targetAdded(this.stripIdentifierPrefix(target), mutation.target, 'attributeChange'));\n                        }\n                        break;\n                    case 'characterData':\n                        let nodule = this.findTargetInAncestry(mutation.target);\n                        if (nodule == null) {\n                            return;\n                        }\n                        else {\n                            let supportedTargets = this.targetsUsedByThisControllerFromNode(nodule);\n                            supportedTargets.forEach((target) => {\n                                this.targetChanged(this.stripIdentifierPrefix(target), nodule, 'domMutation');\n                            });\n                        }\n                        break;\n                    case 'childList':\n                        let { addedNodes, removedNodes } = mutation;\n                        addedNodes.forEach((node) => this.processNodeDOMMutation(node, this.targetAdded));\n                        removedNodes.forEach((node) => this.processNodeDOMMutation(node, this.targetRemoved));\n                        break;\n                }\n            }\n        };\n        this.controller = controller;\n        this.options = options;\n        this.targetElement = controller.element;\n        this.identifier = controller.scope.identifier;\n        this.identifierPrefix = `${this.identifier}.`;\n        this.targetSelector = controller.scope.schema.targetAttribute;\n        this.scopedTargetSelector = `data-${this.identifier}-target`;\n        this.targets = options.targets || controller.constructor.targets;\n        this.prefixedTargets = this.targets.map(target => `${this.identifierPrefix}${target}`);\n        this.observer = new MutationObserver(this.mutation);\n        this.enhanceController();\n        this.observe();\n    }\n    processNodeDOMMutation(node, initialChangeModeAssumption) {\n        let nodule = node;\n        let change = initialChangeModeAssumption;\n        let supportedTargets = [];\n        if (nodule.nodeName == '#text' || this.targetsUsedByThisControllerFromNode(nodule).length == 0) {\n            change = this.targetChanged;\n            nodule = this.findTargetInAncestry(node);\n        }\n        else {\n            supportedTargets = this.targetsUsedByThisControllerFromNode(nodule);\n        }\n        if (nodule == null) {\n            return;\n        }\n        else if (supportedTargets.length == 0) {\n            supportedTargets = this.targetsUsedByThisControllerFromNode(nodule);\n        }\n        supportedTargets.forEach((target) => {\n            change.call(this, this.stripIdentifierPrefix(target), nodule, 'domMutation');\n        });\n    }\n    findTargetInAncestry(node) {\n        let nodule = node;\n        let supportedTargets = [];\n        if (nodule.nodeName != '#text') {\n            supportedTargets = this.targetsUsedByThisControllerFromNode(nodule);\n        }\n        while (nodule.parentNode !== null && nodule.parentNode != this.targetElement && supportedTargets.length == 0) {\n            nodule = nodule.parentNode;\n            if (nodule.nodeName !== '#text') {\n                let supportedTargets = this.targetsUsedByThisControllerFromNode(nodule);\n                if (supportedTargets.length > 0) {\n                    return nodule;\n                }\n            }\n        }\n        if (nodule.nodeName == '#text') {\n            return null;\n        }\n        if (nodule.parentNode == null) {\n            return null;\n        }\n        if (nodule.parentNode == this.targetElement) {\n            if (this.targetsUsedByThisControllerFromNode(nodule).length > 0) {\n                return nodule;\n            }\n            return null;\n        }\n        return null;\n    }\n    targetAdded(name, node, trigger) {\n        let targetCallback = `${name}TargetAdded`;\n        this.controller[targetCallback] && method(this.controller, targetCallback).call(this.controller, node);\n        this.log('targetAdded', { target: name, node, trigger });\n    }\n    targetRemoved(name, node, trigger) {\n        let targetCallback = `${name}TargetRemoved`;\n        this.controller[targetCallback] && method(this.controller, targetCallback).call(this.controller, node);\n        this.log('targetRemoved', { target: name, node, trigger });\n    }\n    targetChanged(name, node, trigger) {\n        let targetCallback = `${name}TargetChanged`;\n        this.controller[targetCallback] && method(this.controller, targetCallback).call(this.controller, node);\n        this.log('targetChanged', { target: name, node, trigger });\n    }\n    targetsUsedByThisControllerFromNode(node) {\n        if (node.nodeName == '#text' || node.nodeName == '#comment') {\n            return [];\n        }\n        let nodeElement = node;\n        return this.targetsUsedByThisController(nodeElement.getAttribute(this.scopedTargetSelector) || nodeElement.getAttribute(this.targetSelector));\n    }\n    targetsUsedByThisController(targetStr) {\n        targetStr = targetStr || '';\n        let targetsToCheck = this.stripIdentifierPrefix(targetStr).split(' ');\n        return this.targets.filter(n => targetsToCheck.indexOf(n) !== -1);\n    }\n    stripIdentifierPrefix(target) {\n        return target.replace(new RegExp(this.identifierPrefix, 'g'), '');\n    }\n    enhanceController() {\n        const controllerDisconnect = this.controller.disconnect.bind(this.controller);\n        const disconnect = () => {\n            this.unobserve();\n            controllerDisconnect();\n        };\n        Object.assign(this.controller, { disconnect });\n    }\n}\nconst useTargetMutation = (controller, options = {}) => {\n    const observer = new UseTargetMutation(controller, options);\n    return [observer.observe, observer.unobserve];\n};\n\nclass TargetMutationComposableController extends Controller {\n}\nclass TargetMutationController extends TargetMutationComposableController {\n    constructor(context) {\n        super(context);\n        requestAnimationFrame(() => {\n            const [observe, unobserve] = useTargetMutation(this, this.options);\n            Object.assign(this, { observe, unobserve });\n        });\n    }\n}\n\nconst useWindowResize = (controller) => {\n    const callback = (event) => {\n        const { innerWidth, innerHeight } = window;\n        const payload = {\n            height: innerHeight || Infinity,\n            width: innerWidth || Infinity,\n            event\n        };\n        method(controller, 'windowResize').call(controller, payload);\n    };\n    const controllerDisconnect = controller.disconnect.bind(controller);\n    const observe = () => {\n        window.addEventListener('resize', callback);\n        callback();\n    };\n    const unobserve = () => {\n        window.removeEventListener('resize', callback);\n    };\n    Object.assign(controller, {\n        disconnect() {\n            unobserve();\n            controllerDisconnect();\n        }\n    });\n    observe();\n    return [observe, unobserve];\n};\n\nclass WindowResizeComposableController extends Controller {\n}\nclass WindowResizeController extends WindowResizeComposableController {\n    constructor(context) {\n        super(context);\n        requestAnimationFrame(() => {\n            const [observe, unobserve] = useWindowResize(this);\n            Object.assign(this, { observe, unobserve });\n        });\n    }\n}\n\nconst memoize = (controller, name, value) => {\n    Object.defineProperty(controller, name, { value });\n    return value;\n};\nconst useMemo = (controller) => {\n    var _a;\n    (_a = controller.constructor.memos) === null || _a === void 0 ? void 0 : _a.forEach((getter) => {\n        memoize(controller, getter, controller[getter]);\n    });\n};\n\nclass DebounceController extends Controller {\n}\nDebounceController.debounces = [];\nconst defaultWait$1 = 200;\nconst debounce = (fn, wait = defaultWait$1) => {\n    let timeoutId = null;\n    return function () {\n        const args = arguments;\n        const context = this;\n        const callback = () => fn.apply(context, args);\n        if (timeoutId) {\n            clearTimeout(timeoutId);\n        }\n        timeoutId = setTimeout(callback, wait);\n    };\n};\nconst useDebounce = (controller, options) => {\n    var _a;\n    const constructor = controller.constructor;\n    (_a = constructor.debounces) === null || _a === void 0 ? void 0 : _a.forEach((func) => {\n        if (typeof func === 'string') {\n            controller[func] = debounce(controller[func], options === null || options === void 0 ? void 0 : options.wait);\n        }\n        if (typeof func === 'object') {\n            const { name, wait } = func;\n            if (!name)\n                return;\n            controller[name] = debounce(controller[name], wait || (options === null || options === void 0 ? void 0 : options.wait));\n        }\n    });\n};\n\nclass ThrottleController extends Controller {\n}\nThrottleController.throttles = [];\nconst defaultWait = 200;\nfunction throttle(func, wait = defaultWait) {\n    let inThrottle;\n    return function () {\n        const args = arguments;\n        const context = this;\n        if (!inThrottle) {\n            inThrottle = true;\n            func.apply(context, args);\n            setTimeout(() => (inThrottle = false), wait);\n        }\n    };\n}\nconst useThrottle = (controller, options = {}) => {\n    var _a;\n    const constructor = controller.constructor;\n    (_a = constructor.throttles) === null || _a === void 0 ? void 0 : _a.forEach((func) => {\n        if (typeof func === 'string') {\n            controller[func] = throttle(controller[func], options === null || options === void 0 ? void 0 : options.wait);\n        }\n        if (typeof func === 'object') {\n            const { name, wait } = func;\n            if (!name)\n                return;\n            controller[name] = throttle(controller[name], wait || (options === null || options === void 0 ? void 0 : options.wait));\n        }\n    });\n};\n\nconst defineMetaGetter = (controller, metaName, suffix) => {\n    const getterName = suffix ? `${camelize(metaName)}Meta` : camelize(metaName);\n    Object.defineProperty(controller, getterName, {\n        get() {\n            return typeCast(metaValue(metaName));\n        }\n    });\n};\nfunction metaValue(name) {\n    const element = document.head.querySelector(`meta[name=\"${name}\"]`);\n    return element && element.getAttribute('content');\n}\nfunction typeCast(value) {\n    try {\n        return JSON.parse(value);\n    }\n    catch (o_O) {\n        return value;\n    }\n}\nconst useMeta = (controller, options = { suffix: true }) => {\n    const metaNames = controller.constructor.metaNames;\n    const suffix = options.suffix;\n    metaNames === null || metaNames === void 0 ? void 0 : metaNames.forEach((metaName) => {\n        defineMetaGetter(controller, metaName, suffix);\n    });\n    Object.defineProperty(controller, 'metas', {\n        get() {\n            const result = {};\n            metaNames === null || metaNames === void 0 ? void 0 : metaNames.forEach((metaName) => {\n                const value = typeCast(metaValue(metaName));\n                if (value !== undefined && value !== null) {\n                    result[camelize(metaName)] = value;\n                }\n            });\n            return result;\n        }\n    });\n};\n\nconst alpineNames = {\n    enterFromClass: 'enter',\n    enterActiveClass: 'enterStart',\n    enterToClass: 'enterEnd',\n    leaveFromClass: 'leave',\n    leaveActiveClass: 'leaveStart',\n    leaveToClass: 'leaveEnd'\n};\nconst defaultOptions$1 = {\n    transitioned: false,\n    hiddenClass: 'hidden',\n    preserveOriginalClass: true,\n    removeToClasses: true\n};\nconst useTransition = (controller, options = {}) => {\n    var _a, _b, _c;\n    const targetName = controller.element.dataset.transitionTarget;\n    let targetFromAttribute;\n    if (targetName) {\n        targetFromAttribute = controller[`${targetName}Target`];\n    }\n    const targetElement = (options === null || options === void 0 ? void 0 : options.element) || targetFromAttribute || controller.element;\n    if (!(targetElement instanceof HTMLElement || targetElement instanceof SVGElement))\n        return;\n    const dataset = targetElement.dataset;\n    const leaveAfter = parseInt(dataset.leaveAfter || '') || options.leaveAfter || 0;\n    const { transitioned, hiddenClass, preserveOriginalClass, removeToClasses } = Object.assign(defaultOptions$1, options);\n    const controllerEnter = (_a = controller.enter) === null || _a === void 0 ? void 0 : _a.bind(controller);\n    const controllerLeave = (_b = controller.leave) === null || _b === void 0 ? void 0 : _b.bind(controller);\n    const controllerToggleTransition = (_c = controller.toggleTransition) === null || _c === void 0 ? void 0 : _c.bind(controller);\n    async function enter(event) {\n        if (controller.transitioned)\n            return;\n        controller.transitioned = true;\n        controllerEnter && controllerEnter(event);\n        const enterFromClasses = getAttribute('enterFrom', options, dataset);\n        const enterActiveClasses = getAttribute('enterActive', options, dataset);\n        const enterToClasses = getAttribute('enterTo', options, dataset);\n        const leaveToClasses = getAttribute('leaveTo', options, dataset);\n        if (!!hiddenClass) {\n            targetElement.classList.remove(hiddenClass);\n        }\n        if (!removeToClasses) {\n            removeClasses(targetElement, leaveToClasses);\n        }\n        await transition(targetElement, enterFromClasses, enterActiveClasses, enterToClasses, hiddenClass, preserveOriginalClass, removeToClasses);\n        if (leaveAfter > 0) {\n            setTimeout(() => {\n                leave(event);\n            }, leaveAfter);\n        }\n    }\n    async function leave(event) {\n        if (!controller.transitioned)\n            return;\n        controller.transitioned = false;\n        controllerLeave && controllerLeave(event);\n        const leaveFromClasses = getAttribute('leaveFrom', options, dataset);\n        const leaveActiveClasses = getAttribute('leaveActive', options, dataset);\n        const leaveToClasses = getAttribute('leaveTo', options, dataset);\n        const enterToClasses = getAttribute('enterTo', options, dataset);\n        if (!removeToClasses) {\n            removeClasses(targetElement, enterToClasses);\n        }\n        await transition(targetElement, leaveFromClasses, leaveActiveClasses, leaveToClasses, hiddenClass, preserveOriginalClass, removeToClasses);\n        if (!!hiddenClass) {\n            targetElement.classList.add(hiddenClass);\n        }\n    }\n    function toggleTransition(event) {\n        controllerToggleTransition && controllerToggleTransition(event);\n        if (controller.transitioned) {\n            leave();\n        }\n        else {\n            enter();\n        }\n    }\n    async function transition(element, initialClasses, activeClasses, endClasses, hiddenClass, preserveOriginalClass, removeEndClasses) {\n        const stashedClasses = [];\n        if (preserveOriginalClass) {\n            initialClasses.forEach(cls => element.classList.contains(cls) && cls !== hiddenClass && stashedClasses.push(cls));\n            activeClasses.forEach(cls => element.classList.contains(cls) && cls !== hiddenClass && stashedClasses.push(cls));\n            endClasses.forEach(cls => element.classList.contains(cls) && cls !== hiddenClass && stashedClasses.push(cls));\n        }\n        addClasses(element, initialClasses);\n        removeClasses(element, stashedClasses);\n        addClasses(element, activeClasses);\n        await nextAnimationFrame();\n        removeClasses(element, initialClasses);\n        addClasses(element, endClasses);\n        await afterTransition(element);\n        removeClasses(element, activeClasses);\n        if (removeEndClasses) {\n            removeClasses(element, endClasses);\n        }\n        addClasses(element, stashedClasses);\n    }\n    function initialState() {\n        controller.transitioned = transitioned;\n        if (transitioned) {\n            if (!!hiddenClass) {\n                targetElement.classList.remove(hiddenClass);\n            }\n            enter();\n        }\n        else {\n            if (!!hiddenClass) {\n                targetElement.classList.add(hiddenClass);\n            }\n            leave();\n        }\n    }\n    function addClasses(element, classes) {\n        if (classes.length > 0) {\n            element.classList.add(...classes);\n        }\n    }\n    function removeClasses(element, classes) {\n        if (classes.length > 0) {\n            element.classList.remove(...classes);\n        }\n    }\n    initialState();\n    Object.assign(controller, { enter, leave, toggleTransition });\n    return [enter, leave, toggleTransition];\n};\nfunction getAttribute(name, options, dataset) {\n    const datasetName = `transition${name[0].toUpperCase()}${name.substr(1)}`;\n    const datasetAlpineName = alpineNames[name];\n    const classes = options[name] || dataset[datasetName] || dataset[datasetAlpineName] || ' ';\n    return isEmpty(classes) ? [] : classes.split(' ');\n}\nasync function afterTransition(element) {\n    return new Promise(resolve => {\n        const duration = Number(getComputedStyle(element).transitionDuration.split(',')[0].replace('s', '')) * 1000;\n        setTimeout(() => {\n            resolve(duration);\n        }, duration);\n    });\n}\nasync function nextAnimationFrame() {\n    return new Promise(resolve => {\n        requestAnimationFrame(() => {\n            requestAnimationFrame(resolve);\n        });\n    });\n}\nfunction isEmpty(str) {\n    return str.length === 0 || !str.trim();\n}\n\nclass TransitionComposableController extends Controller {\n    constructor() {\n        super(...arguments);\n        this.transitioned = false;\n    }\n}\nclass TransitionController extends TransitionComposableController {\n    constructor(context) {\n        super(context);\n        requestAnimationFrame(() => {\n            useTransition(this, this.options);\n        });\n    }\n}\n\nclass UseHotkeys extends StimulusUse {\n    constructor(controller, hotkeysOptions) {\n        super(controller, hotkeysOptions);\n        this.bind = () => {\n            for (const [hotkey, definition] of Object.entries(this.hotkeysOptions.hotkeys)) {\n                const handler = definition.handler.bind(this.controller);\n                hotkeys(hotkey, definition.options, (e) => handler(e, e));\n            }\n        };\n        this.unbind = () => {\n            for (const hotkey in this.hotkeysOptions.hotkeys) {\n                hotkeys.unbind(hotkey);\n            }\n        };\n        this.controller = controller;\n        this.hotkeysOptions = hotkeysOptions;\n        this.enhanceController();\n        this.bind();\n    }\n    enhanceController() {\n        if (this.hotkeysOptions.filter) {\n            hotkeys.filter = this.hotkeysOptions.filter;\n        }\n        const controllerDisconnect = this.controller.disconnect.bind(this.controller);\n        const disconnect = () => {\n            this.unbind();\n            controllerDisconnect();\n        };\n        Object.assign(this.controller, { disconnect });\n    }\n}\nconst convertSimpleHotkeyDefinition = (definition) => {\n    return {\n        handler: definition[0],\n        options: {\n            element: definition[1]\n        }\n    };\n};\nconst coerceOptions = (options) => {\n    if (!options.hotkeys) {\n        const hotkeys = {};\n        Object.entries(options).forEach(([hotkey, definition]) => {\n            Object.defineProperty(hotkeys, hotkey, {\n                value: convertSimpleHotkeyDefinition(definition),\n                writable: false,\n                enumerable: true\n            });\n        });\n        options = {\n            hotkeys\n        };\n    }\n    return options;\n};\nconst useHotkeys = (controller, options) => {\n    return new UseHotkeys(controller, coerceOptions(options));\n};\n\nconst defaultOptions = {\n    mediaQueries: {},\n    dispatchEvent: true,\n    eventPrefix: true,\n    debug: false\n};\nclass UseMatchMedia extends StimulusUse {\n    constructor(controller, options = {}) {\n        var _a, _b, _c, _d;\n        super(controller, options);\n        this.matches = [];\n        this.callback = (event) => {\n            const name = Object.keys(this.mediaQueries).find(name => this.mediaQueries[name] === event.media);\n            if (!name)\n                return;\n            const { media, matches } = event;\n            this.changed({ name, media, matches, event });\n        };\n        this.changed = (payload) => {\n            const { name } = payload;\n            if (payload.event) {\n                this.call(camelize(`${name}_changed`), payload);\n                this.dispatch(`${name}:changed`, payload);\n                this.log(`media query \"${name}\" changed`, payload);\n            }\n            if (payload.matches) {\n                this.call(camelize(`is_${name}`), payload);\n                this.dispatch(`is:${name}`, payload);\n            }\n            else {\n                this.call(camelize(`not_${name}`), payload);\n                this.dispatch(`not:${name}`, payload);\n            }\n        };\n        this.observe = () => {\n            Object.keys(this.mediaQueries).forEach(name => {\n                const media = this.mediaQueries[name];\n                const match = window.matchMedia(media);\n                match.addListener(this.callback);\n                this.matches.push(match);\n                this.changed({ name, media, matches: match.matches });\n            });\n        };\n        this.unobserve = () => {\n            this.matches.forEach(match => match.removeListener(this.callback));\n        };\n        this.controller = controller;\n        this.mediaQueries = (_a = options.mediaQueries) !== null && _a !== void 0 ? _a : defaultOptions.mediaQueries;\n        this.dispatchEvent = (_b = options.dispatchEvent) !== null && _b !== void 0 ? _b : defaultOptions.dispatchEvent;\n        this.eventPrefix = (_c = options.eventPrefix) !== null && _c !== void 0 ? _c : defaultOptions.eventPrefix;\n        this.debug = (_d = options.debug) !== null && _d !== void 0 ? _d : defaultOptions.debug;\n        if (!window.matchMedia) {\n            console.error('window.matchMedia() is not available');\n            return;\n        }\n        this.enhanceController();\n        this.observe();\n    }\n    enhanceController() {\n        const controllerDisconnect = this.controller.disconnect.bind(this.controller);\n        const disconnect = () => {\n            this.unobserve();\n            controllerDisconnect();\n        };\n        Object.assign(this.controller, { disconnect });\n    }\n}\nconst useMatchMedia = (controller, options = {}) => {\n    const observer = new UseMatchMedia(controller, options);\n    return [observer.observe, observer.unobserve];\n};\n\nclass UseWindowFocus extends StimulusUse {\n    constructor(controller, options = {}) {\n        super(controller, options);\n        this.observe = () => {\n            if (document.hasFocus()) {\n                this.becomesFocused();\n            }\n            else {\n                console.log('i should be there');\n                this.becomesUnfocused();\n            }\n            this.interval = setInterval(() => {\n                this.handleWindowFocusChange();\n            }, this.intervalDuration);\n        };\n        this.unobserve = () => {\n            clearInterval(this.interval);\n        };\n        this.becomesUnfocused = (event) => {\n            this.controller.hasFocus = false;\n            this.call('unfocus', event);\n            this.log('unfocus', { hasFocus: false });\n            this.dispatch('unfocus', { event, hasFocus: false });\n        };\n        this.becomesFocused = (event) => {\n            this.controller.hasFocus = true;\n            this.call('focus', event);\n            this.log('focus', { hasFocus: true });\n            this.dispatch('focus', { event, hasFocus: true });\n        };\n        this.handleWindowFocusChange = (event) => {\n            if (document.hasFocus() && !this.controller.hasFocus) {\n                this.becomesFocused(event);\n            }\n            else if (!document.hasFocus() && this.controller.hasFocus) {\n                this.becomesUnfocused(event);\n            }\n        };\n        this.controller = controller;\n        this.intervalDuration = options.interval || 200;\n        this.enhanceController();\n        this.observe();\n    }\n    enhanceController() {\n        const controllerDisconnect = this.controllerDisconnect;\n        const disconnect = () => {\n            this.unobserve();\n            controllerDisconnect();\n        };\n        Object.assign(this.controller, { disconnect });\n    }\n}\nconst useWindowFocus = (controller, options = {}) => {\n    const observer = new UseWindowFocus(controller, options);\n    return [observer.observe, observer.unobserve];\n};\n\nclass WindowFocusComposableController extends Controller {\n    constructor() {\n        super(...arguments);\n        this.hasFocus = false;\n    }\n}\nclass WindowFocusController extends WindowFocusComposableController {\n    constructor(context) {\n        super(context);\n        requestAnimationFrame(() => {\n            const [observe, unobserve] = useWindowFocus(this, this.options);\n            Object.assign(this, { observe, unobserve });\n        });\n    }\n}\n\nexport { ApplicationController, ClickOutsideController, HoverController, IdleController, IntersectionController, LazyLoadController, MutationController, ResizeController, TargetMutationController, TransitionController, UseHover, UseMutation, UseTargetMutation, UseVisibility, VisibilityController, WindowFocusController, WindowResizeController, useApplication, useClickOutside, useDebounce, useDispatch, useHotkeys, useHover, useIdle, useIntersection, useLazyLoad, useMatchMedia, useMemo, useMeta, useMutation, useResize, useTargetMutation, useThrottle, useTransition, useVisibility, useWindowFocus, useWindowResize };\n","import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n  connect() {\n    if (!this.isPreview) {\n      // TO-DO: Implement previews for components\n    }\n    console.log('notification connected');\n    setTimeout(() => {\n      this.close();\n    }, 5000);\n  }\n\n  close() {\n    console.log('requested to close');\n    // Remove with transition\n    this.element.classList.remove(\n      'transform',\n      'ease-out',\n      'duration-300',\n      'translate-y-2',\n      'opacity-0',\n      'sm:translate-y-0',\n      'sm:translate-x-2',\n      'translate-y-0',\n      'sm:translate-x-0'\n    );\n    this.element.classList.add('ease-in', 'duration-100');\n\n    // Trigger transition\n    setTimeout(() => {\n      this.element.classList.add('opacity-y-0');\n    }, 100);\n\n    // Remove element after transition\n    setTimeout(() => {\n      this.element.remove();\n    }, 300);\n  }\n\n  get isPreview() {\n    return document.documentElement.hasAttribute('data-turbolinks-preview');\n  }\n}\n","import { Controller } from '@hotwired/stimulus';\n\nconst tipoPersonas = ['natural', 'juridica'];\n// Connects to data-controller=\"persona-form\"\nexport default class extends Controller {\n  static targets = ['activator', 'form', 'naturalField', 'juridicaField'];\n\n  connect() {\n    if (this.formTarget !== undefined) {\n      this.showForm();\n    }\n  }\n\n  showForm() {\n    if (tipoPersonas.includes(this.activatorTarget.value)) {\n      this.formTarget.classList.remove('hidden');\n      this.formTarget.classList.add('visible');\n    } else {\n      this.formTarget.classList.remove('visible');\n      this.formTarget.classList.add('hidden');\n    }\n    this.showNaturalFields();\n    this.showJuridicaFields();\n  }\n\n  showNaturalFields() {\n    if (this.activatorTarget.value === 'natural') {\n      this.naturalFieldTargets.forEach((element, index) => {\n        element.classList.add('visible');\n        element.classList.remove('hidden');\n      });\n    } else {\n      this.naturalFieldTargets.forEach((element, index) => {\n        element.classList.remove('visible');\n        element.classList.add('hidden');\n      });\n    }\n  }\n\n  showJuridicaFields() {\n    if (this.activatorTarget.value === 'juridica') {\n      this.juridicaFieldTargets.forEach((element, index) => {\n        element.classList.add('visible');\n        element.classList.remove('hidden');\n      });\n    } else {\n      this.juridicaFieldTargets.forEach((element, index) => {\n        element.classList.remove('visible');\n        element.classList.add('hidden');\n      });\n    }\n  }\n}\n","export default function getWindow(node) {\n  if (node == null) {\n    return window;\n  }\n\n  if (node.toString() !== '[object Window]') {\n    var ownerDocument = node.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView || window : window;\n  }\n\n  return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n  var OwnElement = getWindow(node).Element;\n  return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n  var OwnElement = getWindow(node).HTMLElement;\n  return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n  // IE 11 has no ShadowRoot\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n\n  var OwnElement = getWindow(node).ShadowRoot;\n  return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","export default function getUAString() {\n  var uaData = navigator.userAgentData;\n\n  if (uaData != null && uaData.brands) {\n    return uaData.brands.map(function (item) {\n      return item.brand + \"/\" + item.version;\n    }).join(' ');\n  }\n\n  return navigator.userAgent;\n}","import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n  return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}","import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n\n  var clientRect = element.getBoundingClientRect();\n  var scaleX = 1;\n  var scaleY = 1;\n\n  if (includeScale && isHTMLElement(element)) {\n    scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n    scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n  }\n\n  var _ref = isElement(element) ? getWindow(element) : window,\n      visualViewport = _ref.visualViewport;\n\n  var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n  var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n  var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n  var width = clientRect.width / scaleX;\n  var height = clientRect.height / scaleY;\n  return {\n    width: width,\n    height: height,\n    top: y,\n    right: x + width,\n    bottom: y + height,\n    left: x,\n    x: x,\n    y: y\n  };\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n  var win = getWindow(node);\n  var scrollLeft = win.pageXOffset;\n  var scrollTop = win.pageYOffset;\n  return {\n    scrollLeft: scrollLeft,\n    scrollTop: scrollTop\n  };\n}","export default function getNodeName(element) {\n  return element ? (element.nodeName || '').toLowerCase() : null;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n  // $FlowFixMe[incompatible-return]: assume body is always available\n  return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n  element.document) || window.document).documentElement;\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  // Popper 1 is broken in this case and never had a bug report so let's assume\n  // it's not an issue. I don't think anyone ever specifies width on <html>\n  // anyway.\n  // Browsers where the left scrollbar doesn't cause an issue report `0` for\n  // this (e.g. Edge 2019, IE11, Safari)\n  return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n  // Firefox wants us to check `-x` and `-y` variations as well\n  var _getComputedStyle = getComputedStyle(element),\n      overflow = _getComputedStyle.overflow,\n      overflowX = _getComputedStyle.overflowX,\n      overflowY = _getComputedStyle.overflowY;\n\n  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n  var rect = element.getBoundingClientRect();\n  var scaleX = round(rect.width) / element.offsetWidth || 1;\n  var scaleY = round(rect.height) / element.offsetHeight || 1;\n  return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n\n  var isOffsetParentAnElement = isHTMLElement(offsetParent);\n  var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n  var documentElement = getDocumentElement(offsetParent);\n  var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n  var scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  var offsets = {\n    x: 0,\n    y: 0\n  };\n\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n    isScrollParent(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n\n    if (isHTMLElement(offsetParent)) {\n      offsets = getBoundingClientRect(offsetParent, true);\n      offsets.x += offsetParent.clientLeft;\n      offsets.y += offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height\n  };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n  if (node === getWindow(node) || !isHTMLElement(node)) {\n    return getWindowScroll(node);\n  } else {\n    return getHTMLElementScroll(node);\n  }\n}","export default function getHTMLElementScroll(element) {\n  return {\n    scrollLeft: element.scrollLeft,\n    scrollTop: element.scrollTop\n  };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n  var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n  // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n  var width = element.offsetWidth;\n  var height = element.offsetHeight;\n\n  if (Math.abs(clientRect.width - width) <= 1) {\n    width = clientRect.width;\n  }\n\n  if (Math.abs(clientRect.height - height) <= 1) {\n    height = clientRect.height;\n  }\n\n  return {\n    x: element.offsetLeft,\n    y: element.offsetTop,\n    width: width,\n    height: height\n  };\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n  if (getNodeName(element) === 'html') {\n    return element;\n  }\n\n  return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n    // $FlowFixMe[incompatible-return]\n    // $FlowFixMe[prop-missing]\n    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n    element.parentNode || ( // DOM Element detected\n    isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n    // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n    getDocumentElement(element) // fallback\n\n  );\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return node.ownerDocument.body;\n  }\n\n  if (isHTMLElement(node) && isScrollParent(node)) {\n    return node;\n  }\n\n  return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n  var _element$ownerDocumen;\n\n  if (list === void 0) {\n    list = [];\n  }\n\n  var scrollParent = getScrollParent(element);\n  var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n  var win = getWindow(scrollParent);\n  var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n  var updatedList = list.concat(target);\n  return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n  updatedList.concat(listScrollParents(getParentNode(target)));\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n  if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n  getComputedStyle(element).position === 'fixed') {\n    return null;\n  }\n\n  return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n  var isFirefox = /firefox/i.test(getUAString());\n  var isIE = /Trident/i.test(getUAString());\n\n  if (isIE && isHTMLElement(element)) {\n    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n    var elementCss = getComputedStyle(element);\n\n    if (elementCss.position === 'fixed') {\n      return null;\n    }\n  }\n\n  var currentNode = getParentNode(element);\n\n  if (isShadowRoot(currentNode)) {\n    currentNode = currentNode.host;\n  }\n\n  while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n    var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n    // create a containing block.\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n    if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n      return currentNode;\n    } else {\n      currentNode = currentNode.parentNode;\n    }\n  }\n\n  return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n  var window = getWindow(element);\n  var offsetParent = getTrueOffsetParent(element);\n\n  while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n    offsetParent = getTrueOffsetParent(offsetParent);\n  }\n\n  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n    return window;\n  }\n\n  return offsetParent || getContainingBlock(element) || window;\n}","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n  return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n  return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n  var map = new Map();\n  var visited = new Set();\n  var result = [];\n  modifiers.forEach(function (modifier) {\n    map.set(modifier.name, modifier);\n  }); // On visiting object, check for its dependencies and visit them recursively\n\n  function sort(modifier) {\n    visited.add(modifier.name);\n    var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n    requires.forEach(function (dep) {\n      if (!visited.has(dep)) {\n        var depModifier = map.get(dep);\n\n        if (depModifier) {\n          sort(depModifier);\n        }\n      }\n    });\n    result.push(modifier);\n  }\n\n  modifiers.forEach(function (modifier) {\n    if (!visited.has(modifier.name)) {\n      // check for visited object\n      sort(modifier);\n    }\n  });\n  return result;\n}\n\nexport default function orderModifiers(modifiers) {\n  // order based on dependencies\n  var orderedModifiers = order(modifiers); // order based on phase\n\n  return modifierPhases.reduce(function (acc, phase) {\n    return acc.concat(orderedModifiers.filter(function (modifier) {\n      return modifier.phase === phase;\n    }));\n  }, []);\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport getComputedStyle from \"./dom-utils/getComputedStyle.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport validateModifiers from \"./utils/validateModifiers.js\";\nimport uniqueBy from \"./utils/uniqueBy.js\";\nimport getBasePlacement from \"./utils/getBasePlacement.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nimport { auto } from \"./enums.js\";\nvar INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.';\nvar INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.';\nvar DEFAULT_OPTIONS = {\n  placement: 'bottom',\n  modifiers: [],\n  strategy: 'absolute'\n};\n\nfunction areValidElements() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  return !args.some(function (element) {\n    return !(element && typeof element.getBoundingClientRect === 'function');\n  });\n}\n\nexport function popperGenerator(generatorOptions) {\n  if (generatorOptions === void 0) {\n    generatorOptions = {};\n  }\n\n  var _generatorOptions = generatorOptions,\n      _generatorOptions$def = _generatorOptions.defaultModifiers,\n      defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n      _generatorOptions$def2 = _generatorOptions.defaultOptions,\n      defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n  return function createPopper(reference, popper, options) {\n    if (options === void 0) {\n      options = defaultOptions;\n    }\n\n    var state = {\n      placement: 'bottom',\n      orderedModifiers: [],\n      options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n      modifiersData: {},\n      elements: {\n        reference: reference,\n        popper: popper\n      },\n      attributes: {},\n      styles: {}\n    };\n    var effectCleanupFns = [];\n    var isDestroyed = false;\n    var instance = {\n      state: state,\n      setOptions: function setOptions(setOptionsAction) {\n        var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n        cleanupModifierEffects();\n        state.options = Object.assign({}, defaultOptions, state.options, options);\n        state.scrollParents = {\n          reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n          popper: listScrollParents(popper)\n        }; // Orders the modifiers based on their dependencies and `phase`\n        // properties\n\n        var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n        state.orderedModifiers = orderedModifiers.filter(function (m) {\n          return m.enabled;\n        }); // Validate the provided modifiers so that the consumer will get warned\n        // if one of the modifiers is invalid for any reason\n\n        if (process.env.NODE_ENV !== \"production\") {\n          var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) {\n            var name = _ref.name;\n            return name;\n          });\n          validateModifiers(modifiers);\n\n          if (getBasePlacement(state.options.placement) === auto) {\n            var flipModifier = state.orderedModifiers.find(function (_ref2) {\n              var name = _ref2.name;\n              return name === 'flip';\n            });\n\n            if (!flipModifier) {\n              console.error(['Popper: \"auto\" placements require the \"flip\" modifier be', 'present and enabled to work.'].join(' '));\n            }\n          }\n\n          var _getComputedStyle = getComputedStyle(popper),\n              marginTop = _getComputedStyle.marginTop,\n              marginRight = _getComputedStyle.marginRight,\n              marginBottom = _getComputedStyle.marginBottom,\n              marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can\n          // cause bugs with positioning, so we'll warn the consumer\n\n\n          if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) {\n            return parseFloat(margin);\n          })) {\n            console.warn(['Popper: CSS \"margin\" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' '));\n          }\n        }\n\n        runModifierEffects();\n        return instance.update();\n      },\n      // Sync update – it will always be executed, even if not necessary. This\n      // is useful for low frequency updates where sync behavior simplifies the\n      // logic.\n      // For high frequency updates (e.g. `resize` and `scroll` events), always\n      // prefer the async Popper#update method\n      forceUpdate: function forceUpdate() {\n        if (isDestroyed) {\n          return;\n        }\n\n        var _state$elements = state.elements,\n            reference = _state$elements.reference,\n            popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n        // anymore\n\n        if (!areValidElements(reference, popper)) {\n          if (process.env.NODE_ENV !== \"production\") {\n            console.error(INVALID_ELEMENT_ERROR);\n          }\n\n          return;\n        } // Store the reference and popper rects to be read by modifiers\n\n\n        state.rects = {\n          reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n          popper: getLayoutRect(popper)\n        }; // Modifiers have the ability to reset the current update cycle. The\n        // most common use case for this is the `flip` modifier changing the\n        // placement, which then needs to re-run all the modifiers, because the\n        // logic was previously ran for the previous placement and is therefore\n        // stale/incorrect\n\n        state.reset = false;\n        state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n        // is filled with the initial data specified by the modifier. This means\n        // it doesn't persist and is fresh on each update.\n        // To ensure persistent data, use `${name}#persistent`\n\n        state.orderedModifiers.forEach(function (modifier) {\n          return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n        });\n        var __debug_loops__ = 0;\n\n        for (var index = 0; index < state.orderedModifiers.length; index++) {\n          if (process.env.NODE_ENV !== \"production\") {\n            __debug_loops__ += 1;\n\n            if (__debug_loops__ > 100) {\n              console.error(INFINITE_LOOP_ERROR);\n              break;\n            }\n          }\n\n          if (state.reset === true) {\n            state.reset = false;\n            index = -1;\n            continue;\n          }\n\n          var _state$orderedModifie = state.orderedModifiers[index],\n              fn = _state$orderedModifie.fn,\n              _state$orderedModifie2 = _state$orderedModifie.options,\n              _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n              name = _state$orderedModifie.name;\n\n          if (typeof fn === 'function') {\n            state = fn({\n              state: state,\n              options: _options,\n              name: name,\n              instance: instance\n            }) || state;\n          }\n        }\n      },\n      // Async and optimistically optimized update – it will not be executed if\n      // not necessary (debounced to run at most once-per-tick)\n      update: debounce(function () {\n        return new Promise(function (resolve) {\n          instance.forceUpdate();\n          resolve(state);\n        });\n      }),\n      destroy: function destroy() {\n        cleanupModifierEffects();\n        isDestroyed = true;\n      }\n    };\n\n    if (!areValidElements(reference, popper)) {\n      if (process.env.NODE_ENV !== \"production\") {\n        console.error(INVALID_ELEMENT_ERROR);\n      }\n\n      return instance;\n    }\n\n    instance.setOptions(options).then(function (state) {\n      if (!isDestroyed && options.onFirstUpdate) {\n        options.onFirstUpdate(state);\n      }\n    }); // Modifiers have the ability to execute arbitrary code before the first\n    // update cycle runs. They will be executed in the same order as the update\n    // cycle. This is useful when a modifier adds some persistent data that\n    // other modifiers need to use, but the modifier is run after the dependent\n    // one.\n\n    function runModifierEffects() {\n      state.orderedModifiers.forEach(function (_ref3) {\n        var name = _ref3.name,\n            _ref3$options = _ref3.options,\n            options = _ref3$options === void 0 ? {} : _ref3$options,\n            effect = _ref3.effect;\n\n        if (typeof effect === 'function') {\n          var cleanupFn = effect({\n            state: state,\n            name: name,\n            instance: instance,\n            options: options\n          });\n\n          var noopFn = function noopFn() {};\n\n          effectCleanupFns.push(cleanupFn || noopFn);\n        }\n      });\n    }\n\n    function cleanupModifierEffects() {\n      effectCleanupFns.forEach(function (fn) {\n        return fn();\n      });\n      effectCleanupFns = [];\n    }\n\n    return instance;\n  };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","export default function debounce(fn) {\n  var pending;\n  return function () {\n    if (!pending) {\n      pending = new Promise(function (resolve) {\n        Promise.resolve().then(function () {\n          pending = undefined;\n          resolve(fn());\n        });\n      });\n    }\n\n    return pending;\n  };\n}","export default function mergeByName(modifiers) {\n  var merged = modifiers.reduce(function (merged, current) {\n    var existing = merged[current.name];\n    merged[current.name] = existing ? Object.assign({}, existing, current, {\n      options: Object.assign({}, existing.options, current.options),\n      data: Object.assign({}, existing.data, current.data)\n    }) : current;\n    return merged;\n  }, {}); // IE11 does not support Object.values\n\n  return Object.keys(merged).map(function (key) {\n    return merged[key];\n  });\n}","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n  passive: true\n};\n\nfunction effect(_ref) {\n  var state = _ref.state,\n      instance = _ref.instance,\n      options = _ref.options;\n  var _options$scroll = options.scroll,\n      scroll = _options$scroll === void 0 ? true : _options$scroll,\n      _options$resize = options.resize,\n      resize = _options$resize === void 0 ? true : _options$resize;\n  var window = getWindow(state.elements.popper);\n  var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n  if (scroll) {\n    scrollParents.forEach(function (scrollParent) {\n      scrollParent.addEventListener('scroll', instance.update, passive);\n    });\n  }\n\n  if (resize) {\n    window.addEventListener('resize', instance.update, passive);\n  }\n\n  return function () {\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.removeEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.removeEventListener('resize', instance.update, passive);\n    }\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'eventListeners',\n  enabled: true,\n  phase: 'write',\n  fn: function fn() {},\n  effect: effect,\n  data: {}\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n  return placement.split('-')[0];\n}","export default function getVariation(placement) {\n  return placement.split('-')[1];\n}","export default function getMainAxisFromPlacement(placement) {\n  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n  var reference = _ref.reference,\n      element = _ref.element,\n      placement = _ref.placement;\n  var basePlacement = placement ? getBasePlacement(placement) : null;\n  var variation = placement ? getVariation(placement) : null;\n  var commonX = reference.x + reference.width / 2 - element.width / 2;\n  var commonY = reference.y + reference.height / 2 - element.height / 2;\n  var offsets;\n\n  switch (basePlacement) {\n    case top:\n      offsets = {\n        x: commonX,\n        y: reference.y - element.height\n      };\n      break;\n\n    case bottom:\n      offsets = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n\n    case right:\n      offsets = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n\n    case left:\n      offsets = {\n        x: reference.x - element.width,\n        y: commonY\n      };\n      break;\n\n    default:\n      offsets = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n\n  var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n  if (mainAxis != null) {\n    var len = mainAxis === 'y' ? 'height' : 'width';\n\n    switch (variation) {\n      case start:\n        offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n        break;\n\n      case end:\n        offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n        break;\n\n      default:\n    }\n  }\n\n  return offsets;\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n  top: 'auto',\n  right: 'auto',\n  bottom: 'auto',\n  left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref) {\n  var x = _ref.x,\n      y = _ref.y;\n  var win = window;\n  var dpr = win.devicePixelRatio || 1;\n  return {\n    x: round(x * dpr) / dpr || 0,\n    y: round(y * dpr) / dpr || 0\n  };\n}\n\nexport function mapToStyles(_ref2) {\n  var _Object$assign2;\n\n  var popper = _ref2.popper,\n      popperRect = _ref2.popperRect,\n      placement = _ref2.placement,\n      variation = _ref2.variation,\n      offsets = _ref2.offsets,\n      position = _ref2.position,\n      gpuAcceleration = _ref2.gpuAcceleration,\n      adaptive = _ref2.adaptive,\n      roundOffsets = _ref2.roundOffsets,\n      isFixed = _ref2.isFixed;\n  var _offsets$x = offsets.x,\n      x = _offsets$x === void 0 ? 0 : _offsets$x,\n      _offsets$y = offsets.y,\n      y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n  var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n    x: x,\n    y: y\n  }) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref3.x;\n  y = _ref3.y;\n  var hasX = offsets.hasOwnProperty('x');\n  var hasY = offsets.hasOwnProperty('y');\n  var sideX = left;\n  var sideY = top;\n  var win = window;\n\n  if (adaptive) {\n    var offsetParent = getOffsetParent(popper);\n    var heightProp = 'clientHeight';\n    var widthProp = 'clientWidth';\n\n    if (offsetParent === getWindow(popper)) {\n      offsetParent = getDocumentElement(popper);\n\n      if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n        heightProp = 'scrollHeight';\n        widthProp = 'scrollWidth';\n      }\n    } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n    offsetParent = offsetParent;\n\n    if (placement === top || (placement === left || placement === right) && variation === end) {\n      sideY = bottom;\n      var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n      offsetParent[heightProp];\n      y -= offsetY - popperRect.height;\n      y *= gpuAcceleration ? 1 : -1;\n    }\n\n    if (placement === left || (placement === top || placement === bottom) && variation === end) {\n      sideX = right;\n      var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n      offsetParent[widthProp];\n      x -= offsetX - popperRect.width;\n      x *= gpuAcceleration ? 1 : -1;\n    }\n  }\n\n  var commonStyles = Object.assign({\n    position: position\n  }, adaptive && unsetSides);\n\n  var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n    x: x,\n    y: y\n  }) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref4.x;\n  y = _ref4.y;\n\n  if (gpuAcceleration) {\n    var _Object$assign;\n\n    return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n  }\n\n  return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n  var state = _ref5.state,\n      options = _ref5.options;\n  var _options$gpuAccelerat = options.gpuAcceleration,\n      gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n      _options$adaptive = options.adaptive,\n      adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n      _options$roundOffsets = options.roundOffsets,\n      roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n  if (process.env.NODE_ENV !== \"production\") {\n    var transitionProperty = getComputedStyle(state.elements.popper).transitionProperty || '';\n\n    if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) {\n      return transitionProperty.indexOf(property) >= 0;\n    })) {\n      console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: \"transform\", \"top\", \"right\", \"bottom\", \"left\".', '\\n\\n', 'Disable the \"computeStyles\" modifier\\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\\n\\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' '));\n    }\n  }\n\n  var commonStyles = {\n    placement: getBasePlacement(state.placement),\n    variation: getVariation(state.placement),\n    popper: state.elements.popper,\n    popperRect: state.rects.popper,\n    gpuAcceleration: gpuAcceleration,\n    isFixed: state.options.strategy === 'fixed'\n  };\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.popperOffsets,\n      position: state.options.strategy,\n      adaptive: adaptive,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  if (state.modifiersData.arrow != null) {\n    state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.arrow,\n      position: 'absolute',\n      adaptive: false,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-placement': state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'computeStyles',\n  enabled: true,\n  phase: 'beforeWrite',\n  fn: computeStyles,\n  data: {}\n};","var hash = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, function (matched) {\n    return hash[matched];\n  });\n}","var hash = {\n  start: 'end',\n  end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n  return placement.replace(/start|end/g, function (matched) {\n    return hash[matched];\n  });\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n  var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n  if (parent.contains(child)) {\n    return true;\n  } // then fallback to custom implementation with Shadow DOM support\n  else if (rootNode && isShadowRoot(rootNode)) {\n      var next = child;\n\n      do {\n        if (next && parent.isSameNode(next)) {\n          return true;\n        } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n        next = next.parentNode || next.host;\n      } while (next);\n    } // Give up, the result is false\n\n\n  return false;\n}","export default function rectToClientRect(rect) {\n  return Object.assign({}, rect, {\n    left: rect.x,\n    top: rect.y,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height\n  });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n  var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n  rect.top = rect.top + element.clientTop;\n  rect.left = rect.left + element.clientLeft;\n  rect.bottom = rect.top + element.clientHeight;\n  rect.right = rect.left + element.clientWidth;\n  rect.width = element.clientWidth;\n  rect.height = element.clientHeight;\n  rect.x = rect.left;\n  rect.y = rect.top;\n  return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n  return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n  var clippingParents = listScrollParents(getParentNode(element));\n  var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n  var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n  if (!isElement(clipperElement)) {\n    return [];\n  } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n  return clippingParents.filter(function (clippingParent) {\n    return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n  });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n  var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n  var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n  var firstClippingParent = clippingParents[0];\n  var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n    var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n  clippingRect.width = clippingRect.right - clippingRect.left;\n  clippingRect.height = clippingRect.bottom - clippingRect.top;\n  clippingRect.x = clippingRect.left;\n  clippingRect.y = clippingRect.top;\n  return clippingRect;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n  var win = getWindow(element);\n  var html = getDocumentElement(element);\n  var visualViewport = win.visualViewport;\n  var width = html.clientWidth;\n  var height = html.clientHeight;\n  var x = 0;\n  var y = 0;\n\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n    var layoutViewport = isLayoutViewport();\n\n    if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x + getWindowScrollBarX(element),\n    y: y\n  };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n  var _element$ownerDocumen;\n\n  var html = getDocumentElement(element);\n  var winScroll = getWindowScroll(element);\n  var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n  var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n  var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n  var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n  var y = -winScroll.scrollTop;\n\n  if (getComputedStyle(body || html).direction === 'rtl') {\n    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x,\n    y: y\n  };\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n  return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function getFreshSideObject() {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  };\n}","export default function expandToHashMap(value, keys) {\n  return keys.reduce(function (hashMap, key) {\n    hashMap[key] = value;\n    return hashMap;\n  }, {});\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      _options$placement = _options.placement,\n      placement = _options$placement === void 0 ? state.placement : _options$placement,\n      _options$strategy = _options.strategy,\n      strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n      _options$boundary = _options.boundary,\n      boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n      _options$rootBoundary = _options.rootBoundary,\n      rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n      _options$elementConte = _options.elementContext,\n      elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n      _options$altBoundary = _options.altBoundary,\n      altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n      _options$padding = _options.padding,\n      padding = _options$padding === void 0 ? 0 : _options$padding;\n  var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  var altContext = elementContext === popper ? reference : popper;\n  var popperRect = state.rects.popper;\n  var element = state.elements[altBoundary ? altContext : elementContext];\n  var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n  var referenceClientRect = getBoundingClientRect(state.elements.reference);\n  var popperOffsets = computeOffsets({\n    reference: referenceClientRect,\n    element: popperRect,\n    strategy: 'absolute',\n    placement: placement\n  });\n  var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n  var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n  // 0 or negative = within the clipping rect\n\n  var overflowOffsets = {\n    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n    right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n  };\n  var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n  if (elementContext === popper && offsetData) {\n    var offset = offsetData[placement];\n    Object.keys(overflowOffsets).forEach(function (key) {\n      var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n      var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n      overflowOffsets[key] += offset[axis] * multiply;\n    });\n  }\n\n  return overflowOffsets;\n}","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n  if (getBasePlacement(placement) === auto) {\n    return [];\n  }\n\n  var oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n\n  if (state.modifiersData[name]._skip) {\n    return;\n  }\n\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n      specifiedFallbackPlacements = options.fallbackPlacements,\n      padding = options.padding,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      _options$flipVariatio = options.flipVariations,\n      flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n      allowedAutoPlacements = options.allowedAutoPlacements;\n  var preferredPlacement = state.options.placement;\n  var basePlacement = getBasePlacement(preferredPlacement);\n  var isBasePlacement = basePlacement === preferredPlacement;\n  var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n  var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n    return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      flipVariations: flipVariations,\n      allowedAutoPlacements: allowedAutoPlacements\n    }) : placement);\n  }, []);\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var checksMap = new Map();\n  var makeFallbackChecks = true;\n  var firstFittingPlacement = placements[0];\n\n  for (var i = 0; i < placements.length; i++) {\n    var placement = placements[i];\n\n    var _basePlacement = getBasePlacement(placement);\n\n    var isStartVariation = getVariation(placement) === start;\n    var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n    var len = isVertical ? 'width' : 'height';\n    var overflow = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      altBoundary: altBoundary,\n      padding: padding\n    });\n    var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n    if (referenceRect[len] > popperRect[len]) {\n      mainVariationSide = getOppositePlacement(mainVariationSide);\n    }\n\n    var altVariationSide = getOppositePlacement(mainVariationSide);\n    var checks = [];\n\n    if (checkMainAxis) {\n      checks.push(overflow[_basePlacement] <= 0);\n    }\n\n    if (checkAltAxis) {\n      checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n    }\n\n    if (checks.every(function (check) {\n      return check;\n    })) {\n      firstFittingPlacement = placement;\n      makeFallbackChecks = false;\n      break;\n    }\n\n    checksMap.set(placement, checks);\n  }\n\n  if (makeFallbackChecks) {\n    // `2` may be desired in some cases – research later\n    var numberOfChecks = flipVariations ? 3 : 1;\n\n    var _loop = function _loop(_i) {\n      var fittingPlacement = placements.find(function (placement) {\n        var checks = checksMap.get(placement);\n\n        if (checks) {\n          return checks.slice(0, _i).every(function (check) {\n            return check;\n          });\n        }\n      });\n\n      if (fittingPlacement) {\n        firstFittingPlacement = fittingPlacement;\n        return \"break\";\n      }\n    };\n\n    for (var _i = numberOfChecks; _i > 0; _i--) {\n      var _ret = _loop(_i);\n\n      if (_ret === \"break\") break;\n    }\n  }\n\n  if (state.placement !== firstFittingPlacement) {\n    state.modifiersData[name]._skip = true;\n    state.placement = firstFittingPlacement;\n    state.reset = true;\n  }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'flip',\n  enabled: true,\n  phase: 'main',\n  fn: flip,\n  requiresIfExists: ['offset'],\n  data: {\n    _skip: false\n  }\n};","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      placement = _options.placement,\n      boundary = _options.boundary,\n      rootBoundary = _options.rootBoundary,\n      padding = _options.padding,\n      flipVariations = _options.flipVariations,\n      _options$allowedAutoP = _options.allowedAutoPlacements,\n      allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n  var variation = getVariation(placement);\n  var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n    return getVariation(placement) === variation;\n  }) : basePlacements;\n  var allowedPlacements = placements.filter(function (placement) {\n    return allowedAutoPlacements.indexOf(placement) >= 0;\n  });\n\n  if (allowedPlacements.length === 0) {\n    allowedPlacements = placements;\n\n    if (process.env.NODE_ENV !== \"production\") {\n      console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, \"auto\" cannot be used to allow \"bottom-start\".', 'Use \"auto-start\" instead.'].join(' '));\n    }\n  } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n  var overflows = allowedPlacements.reduce(function (acc, placement) {\n    acc[placement] = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding\n    })[getBasePlacement(placement)];\n    return acc;\n  }, {});\n  return Object.keys(overflows).sort(function (a, b) {\n    return overflows[a] - overflows[b];\n  });\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n  return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n  var v = within(min, value, max);\n  return v > max ? max : v;\n}","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      padding = options.padding,\n      _options$tether = options.tether,\n      tether = _options$tether === void 0 ? true : _options$tether,\n      _options$tetherOffset = options.tetherOffset,\n      tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n  var overflow = detectOverflow(state, {\n    boundary: boundary,\n    rootBoundary: rootBoundary,\n    padding: padding,\n    altBoundary: altBoundary\n  });\n  var basePlacement = getBasePlacement(state.placement);\n  var variation = getVariation(state.placement);\n  var isBasePlacement = !variation;\n  var mainAxis = getMainAxisFromPlacement(basePlacement);\n  var altAxis = getAltAxis(mainAxis);\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : tetherOffset;\n  var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n    mainAxis: tetherOffsetValue,\n    altAxis: tetherOffsetValue\n  } : Object.assign({\n    mainAxis: 0,\n    altAxis: 0\n  }, tetherOffsetValue);\n  var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n  var data = {\n    x: 0,\n    y: 0\n  };\n\n  if (!popperOffsets) {\n    return;\n  }\n\n  if (checkMainAxis) {\n    var _offsetModifierState$;\n\n    var mainSide = mainAxis === 'y' ? top : left;\n    var altSide = mainAxis === 'y' ? bottom : right;\n    var len = mainAxis === 'y' ? 'height' : 'width';\n    var offset = popperOffsets[mainAxis];\n    var min = offset + overflow[mainSide];\n    var max = offset - overflow[altSide];\n    var additive = tether ? -popperRect[len] / 2 : 0;\n    var minLen = variation === start ? referenceRect[len] : popperRect[len];\n    var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n    // outside the reference bounds\n\n    var arrowElement = state.elements.arrow;\n    var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n      width: 0,\n      height: 0\n    };\n    var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n    var arrowPaddingMin = arrowPaddingObject[mainSide];\n    var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n    // to include its full size in the calculation. If the reference is small\n    // and near the edge of a boundary, the popper can overflow even if the\n    // reference is not overflowing as well (e.g. virtual elements with no\n    // width or height)\n\n    var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n    var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n    var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n    var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n    var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n    var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n    var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n    var tetherMax = offset + maxOffset - offsetModifierValue;\n    var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n    popperOffsets[mainAxis] = preventedOffset;\n    data[mainAxis] = preventedOffset - offset;\n  }\n\n  if (checkAltAxis) {\n    var _offsetModifierState$2;\n\n    var _mainSide = mainAxis === 'x' ? top : left;\n\n    var _altSide = mainAxis === 'x' ? bottom : right;\n\n    var _offset = popperOffsets[altAxis];\n\n    var _len = altAxis === 'y' ? 'height' : 'width';\n\n    var _min = _offset + overflow[_mainSide];\n\n    var _max = _offset - overflow[_altSide];\n\n    var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n    var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n    var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n    var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n    var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n    popperOffsets[altAxis] = _preventedOffset;\n    data[altAxis] = _preventedOffset - _offset;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'preventOverflow',\n  enabled: true,\n  phase: 'main',\n  fn: preventOverflow,\n  requiresIfExists: ['offset']\n};","export default function getAltAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n  padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : padding;\n  return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n  var _state$modifiersData$;\n\n  var state = _ref.state,\n      name = _ref.name,\n      options = _ref.options;\n  var arrowElement = state.elements.arrow;\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var basePlacement = getBasePlacement(state.placement);\n  var axis = getMainAxisFromPlacement(basePlacement);\n  var isVertical = [left, right].indexOf(basePlacement) >= 0;\n  var len = isVertical ? 'height' : 'width';\n\n  if (!arrowElement || !popperOffsets) {\n    return;\n  }\n\n  var paddingObject = toPaddingObject(options.padding, state);\n  var arrowRect = getLayoutRect(arrowElement);\n  var minProp = axis === 'y' ? top : left;\n  var maxProp = axis === 'y' ? bottom : right;\n  var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n  var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n  var arrowOffsetParent = getOffsetParent(arrowElement);\n  var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n  var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n  // outside of the popper bounds\n\n  var min = paddingObject[minProp];\n  var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n  var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n  var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n  var axisProp = axis;\n  state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options;\n  var _options$element = options.element,\n      arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n  if (arrowElement == null) {\n    return;\n  } // CSS selector\n\n\n  if (typeof arrowElement === 'string') {\n    arrowElement = state.elements.popper.querySelector(arrowElement);\n\n    if (!arrowElement) {\n      return;\n    }\n  }\n\n  if (process.env.NODE_ENV !== \"production\") {\n    if (!isHTMLElement(arrowElement)) {\n      console.error(['Popper: \"arrow\" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' '));\n    }\n  }\n\n  if (!contains(state.elements.popper, arrowElement)) {\n    if (process.env.NODE_ENV !== \"production\") {\n      console.error(['Popper: \"arrow\" modifier\\'s `element` must be a child of the popper', 'element.'].join(' '));\n    }\n\n    return;\n  }\n\n  state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'arrow',\n  enabled: true,\n  phase: 'main',\n  fn: arrow,\n  effect: effect,\n  requires: ['popperOffsets'],\n  requiresIfExists: ['preventOverflow']\n};","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n  if (preventedOffsets === void 0) {\n    preventedOffsets = {\n      x: 0,\n      y: 0\n    };\n  }\n\n  return {\n    top: overflow.top - rect.height - preventedOffsets.y,\n    right: overflow.right - rect.width + preventedOffsets.x,\n    bottom: overflow.bottom - rect.height + preventedOffsets.y,\n    left: overflow.left - rect.width - preventedOffsets.x\n  };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n  return [top, right, bottom, left].some(function (side) {\n    return overflow[side] >= 0;\n  });\n}\n\nfunction hide(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var preventedOffsets = state.modifiersData.preventOverflow;\n  var referenceOverflow = detectOverflow(state, {\n    elementContext: 'reference'\n  });\n  var popperAltOverflow = detectOverflow(state, {\n    altBoundary: true\n  });\n  var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n  var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n  var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n  var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n  state.modifiersData[name] = {\n    referenceClippingOffsets: referenceClippingOffsets,\n    popperEscapeOffsets: popperEscapeOffsets,\n    isReferenceHidden: isReferenceHidden,\n    hasPopperEscaped: hasPopperEscaped\n  };\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-reference-hidden': isReferenceHidden,\n    'data-popper-escaped': hasPopperEscaped\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'hide',\n  enabled: true,\n  phase: 'main',\n  requiresIfExists: ['preventOverflow'],\n  fn: hide\n};","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  // Offsets are the actual position the popper needs to have to be\n  // properly positioned near its reference element\n  // This is the most basic placement, and will be adjusted by\n  // the modifiers in the next step\n  state.modifiersData[name] = computeOffsets({\n    reference: state.rects.reference,\n    element: state.rects.popper,\n    strategy: 'absolute',\n    placement: state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'popperOffsets',\n  enabled: true,\n  phase: 'read',\n  fn: popperOffsets,\n  data: {}\n};","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n  var state = _ref.state;\n  Object.keys(state.elements).forEach(function (name) {\n    var style = state.styles[name] || {};\n    var attributes = state.attributes[name] || {};\n    var element = state.elements[name]; // arrow is optional + virtual elements\n\n    if (!isHTMLElement(element) || !getNodeName(element)) {\n      return;\n    } // Flow doesn't support to extend this property, but it's the most\n    // effective way to apply styles to an HTMLElement\n    // $FlowFixMe[cannot-write]\n\n\n    Object.assign(element.style, style);\n    Object.keys(attributes).forEach(function (name) {\n      var value = attributes[name];\n\n      if (value === false) {\n        element.removeAttribute(name);\n      } else {\n        element.setAttribute(name, value === true ? '' : value);\n      }\n    });\n  });\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state;\n  var initialStyles = {\n    popper: {\n      position: state.options.strategy,\n      left: '0',\n      top: '0',\n      margin: '0'\n    },\n    arrow: {\n      position: 'absolute'\n    },\n    reference: {}\n  };\n  Object.assign(state.elements.popper.style, initialStyles.popper);\n  state.styles = initialStyles;\n\n  if (state.elements.arrow) {\n    Object.assign(state.elements.arrow.style, initialStyles.arrow);\n  }\n\n  return function () {\n    Object.keys(state.elements).forEach(function (name) {\n      var element = state.elements[name];\n      var attributes = state.attributes[name] || {};\n      var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n      var style = styleProperties.reduce(function (style, property) {\n        style[property] = '';\n        return style;\n      }, {}); // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      }\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (attribute) {\n        element.removeAttribute(attribute);\n      });\n    });\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'applyStyles',\n  enabled: true,\n  phase: 'write',\n  fn: applyStyles,\n  effect: effect,\n  requires: ['computeStyles']\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n  var basePlacement = getBasePlacement(placement);\n  var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n  var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n    placement: placement\n  })) : offset,\n      skidding = _ref[0],\n      distance = _ref[1];\n\n  skidding = skidding || 0;\n  distance = (distance || 0) * invertDistance;\n  return [left, right].indexOf(basePlacement) >= 0 ? {\n    x: distance,\n    y: skidding\n  } : {\n    x: skidding,\n    y: distance\n  };\n}\n\nfunction offset(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options,\n      name = _ref2.name;\n  var _options$offset = options.offset,\n      offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n  var data = placements.reduce(function (acc, placement) {\n    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n    return acc;\n  }, {});\n  var _data$state$placement = data[state.placement],\n      x = _data$state$placement.x,\n      y = _data$state$placement.y;\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.modifiersData.popperOffsets.x += x;\n    state.modifiersData.popperOffsets.y += y;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'offset',\n  enabled: true,\n  phase: 'main',\n  requires: ['popperOffsets'],\n  fn: offset\n};","import { Controller } from '@hotwired/stimulus';\nimport { createPopper } from '@popperjs/core';\n\nexport default class extends Controller {\n  static targets = ['activator', 'template'];\n  static classes = ['open', 'closed'];\n  static values = {\n    placement: String,\n    active: Boolean,\n  };\n\n  connect() {\n    const clonedTemplate = this.templateTarget.content.cloneNode(true);\n    this.popoverTarget = clonedTemplate.firstElementChild;\n\n    document.body.appendChild(clonedTemplate);\n\n    this.popper = createPopper(this.activatorTarget, this.popoverTarget, {\n      placement: this.placementValue,\n      modifiers: [\n        {\n          name: 'offset',\n          options: {\n            offset: [0, 5],\n          },\n        },\n        {\n          name: 'flip',\n          options: {\n            allowedAutoPlacements: [\n              'top-start',\n              'bottom-start',\n              'top-end',\n              'bottom-end',\n            ],\n          },\n        },\n      ],\n    });\n    if (this.activeValue) {\n      this.show();\n    }\n  }\n\n  async toggle() {\n    console.log('toggle fired');\n    console.log(this.closedClass);\n    console.log(this.openClass);\n    console.log(this.popoverTarget.classList);\n    this.popoverTarget.classList.toggle(this.closedClass);\n    this.popoverTarget.classList.toggle(this.openClass);\n    await this.popper.update();\n  }\n\n  async show() {\n    console.log('show fired');\n    this.popoverTarget.classList.remove(this.closedClass);\n    this.popoverTarget.classList.add(this.openClass);\n    await this.popper.update();\n  }\n\n  hide(event) {\n    if (\n      !this.element.contains(event.target) &&\n      !this.popoverTarget.contains(event.target) &&\n      !this.popoverTarget.classList.contains(this.closedClass)\n    ) {\n      this.forceHide();\n    }\n  }\n\n  forceHide() {\n    console.log('forceHide fired');\n    this.popoverTarget.classList.remove(this.openClass);\n    this.popoverTarget.classList.add(this.closedClass);\n  }\n}\n","import { Controller } from '@hotwired/stimulus';\n\n// Connects to data-controller=\"scrollable\"\nexport default class extends Controller {\n  static targets = ['topEdge', 'bottomEdge'];\n  static classes = ['topShadow', 'bottomShadow'];\n  static values = {\n    shadow: Boolean,\n  };\n\n  initialize() {\n    this.topEdgeReached = false;\n    this.bottomEdgeReached = true;\n  }\n\n  connect() {\n    if (this.shadowValue) {\n      this.observer = new IntersectionObserver(this.handleIntersection);\n      this.observer.observe(this.topEdgeTarget);\n      this.observer.observe(this.bototmEdgeTarget);\n    }\n  }\n\n  disconnect() {\n    if (this.shadowValue) {\n      this.observer.disconnect();\n    }\n  }\n\n  // Private\n\n  handleIntersection = (entries) => {\n    entries.forEach((entry) => {\n      const target = entry.target.dataset.scrollableTarget;\n\n      switch (target) {\n        case 'topEdge':\n          this.topEdgeReached = entry.isIntersecting;\n          break;\n        case 'bottomEdge':\n          this.bottomEdgeReached = entry.isIntersecting;\n      }\n    });\n    this.updateShadows();\n  };\n\n  updateShadows() {\n    if (!this.topEdgeReached && !this.bottomEdgeReached) {\n      this.element.classList.add(this.topShadowClass, this.bottomShadowClass);\n    } else if (this.topEdgeReached && this.bottomEdgeReached) {\n      this.element.classList.remove(\n        this.topShadowClass,\n        this.bottomShadowClass\n      );\n    } else if (this.topEdgeReached) {\n      this.element.classList.remove(this.topShadowClass);\n      this.element.classList.add(this.bottomShadowClass);\n    } else if (this.bottomEdgeReached) {\n      this.element.classList.add(this.topShadowClass);\n      this.element.classList.remove(this.bottomShadowClass);\n    }\n  }\n}\n","/*!\r\n *  decimal.js v10.4.1\r\n *  An arbitrary-precision Decimal type for JavaScript.\r\n *  https://github.com/MikeMcl/decimal.js\r\n *  Copyright (c) 2022 Michael Mclaughlin <M8ch88l@gmail.com>\r\n *  MIT Licence\r\n */\r\n\r\n\r\n// -----------------------------------  EDITABLE DEFAULTS  ------------------------------------ //\r\n\r\n\r\n  // The maximum exponent magnitude.\r\n  // The limit on the value of `toExpNeg`, `toExpPos`, `minE` and `maxE`.\r\nvar EXP_LIMIT = 9e15,                      // 0 to 9e15\r\n\r\n  // The limit on the value of `precision`, and on the value of the first argument to\r\n  // `toDecimalPlaces`, `toExponential`, `toFixed`, `toPrecision` and `toSignificantDigits`.\r\n  MAX_DIGITS = 1e9,                        // 0 to 1e9\r\n\r\n  // Base conversion alphabet.\r\n  NUMERALS = '0123456789abcdef',\r\n\r\n  // The natural logarithm of 10 (1025 digits).\r\n  LN10 = '2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058',\r\n\r\n  // Pi (1025 digits).\r\n  PI = '3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789',\r\n\r\n\r\n  // The initial configuration properties of the Decimal constructor.\r\n  DEFAULTS = {\r\n\r\n    // These values must be integers within the stated ranges (inclusive).\r\n    // Most of these values can be changed at run-time using the `Decimal.config` method.\r\n\r\n    // The maximum number of significant digits of the result of a calculation or base conversion.\r\n    // E.g. `Decimal.config({ precision: 20 });`\r\n    precision: 20,                         // 1 to MAX_DIGITS\r\n\r\n    // The rounding mode used when rounding to `precision`.\r\n    //\r\n    // ROUND_UP         0 Away from zero.\r\n    // ROUND_DOWN       1 Towards zero.\r\n    // ROUND_CEIL       2 Towards +Infinity.\r\n    // ROUND_FLOOR      3 Towards -Infinity.\r\n    // ROUND_HALF_UP    4 Towards nearest neighbour. If equidistant, up.\r\n    // ROUND_HALF_DOWN  5 Towards nearest neighbour. If equidistant, down.\r\n    // ROUND_HALF_EVEN  6 Towards nearest neighbour. If equidistant, towards even neighbour.\r\n    // ROUND_HALF_CEIL  7 Towards nearest neighbour. If equidistant, towards +Infinity.\r\n    // ROUND_HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.\r\n    //\r\n    // E.g.\r\n    // `Decimal.rounding = 4;`\r\n    // `Decimal.rounding = Decimal.ROUND_HALF_UP;`\r\n    rounding: 4,                           // 0 to 8\r\n\r\n    // The modulo mode used when calculating the modulus: a mod n.\r\n    // The quotient (q = a / n) is calculated according to the corresponding rounding mode.\r\n    // The remainder (r) is calculated as: r = a - n * q.\r\n    //\r\n    // UP         0 The remainder is positive if the dividend is negative, else is negative.\r\n    // DOWN       1 The remainder has the same sign as the dividend (JavaScript %).\r\n    // FLOOR      3 The remainder has the same sign as the divisor (Python %).\r\n    // HALF_EVEN  6 The IEEE 754 remainder function.\r\n    // EUCLID     9 Euclidian division. q = sign(n) * floor(a / abs(n)). Always positive.\r\n    //\r\n    // Truncated division (1), floored division (3), the IEEE 754 remainder (6), and Euclidian\r\n    // division (9) are commonly used for the modulus operation. The other rounding modes can also\r\n    // be used, but they may not give useful results.\r\n    modulo: 1,                             // 0 to 9\r\n\r\n    // The exponent value at and beneath which `toString` returns exponential notation.\r\n    // JavaScript numbers: -7\r\n    toExpNeg: -7,                          // 0 to -EXP_LIMIT\r\n\r\n    // The exponent value at and above which `toString` returns exponential notation.\r\n    // JavaScript numbers: 21\r\n    toExpPos:  21,                         // 0 to EXP_LIMIT\r\n\r\n    // The minimum exponent value, beneath which underflow to zero occurs.\r\n    // JavaScript numbers: -324  (5e-324)\r\n    minE: -EXP_LIMIT,                      // -1 to -EXP_LIMIT\r\n\r\n    // The maximum exponent value, above which overflow to Infinity occurs.\r\n    // JavaScript numbers: 308  (1.7976931348623157e+308)\r\n    maxE: EXP_LIMIT,                       // 1 to EXP_LIMIT\r\n\r\n    // Whether to use cryptographically-secure random number generation, if available.\r\n    crypto: false                          // true/false\r\n  },\r\n\r\n\r\n// ----------------------------------- END OF EDITABLE DEFAULTS ------------------------------- //\r\n\r\n\r\n  inexact, quadrant,\r\n  external = true,\r\n\r\n  decimalError = '[DecimalError] ',\r\n  invalidArgument = decimalError + 'Invalid argument: ',\r\n  precisionLimitExceeded = decimalError + 'Precision limit exceeded',\r\n  cryptoUnavailable = decimalError + 'crypto unavailable',\r\n  tag = '[object Decimal]',\r\n\r\n  mathfloor = Math.floor,\r\n  mathpow = Math.pow,\r\n\r\n  isBinary = /^0b([01]+(\\.[01]*)?|\\.[01]+)(p[+-]?\\d+)?$/i,\r\n  isHex = /^0x([0-9a-f]+(\\.[0-9a-f]*)?|\\.[0-9a-f]+)(p[+-]?\\d+)?$/i,\r\n  isOctal = /^0o([0-7]+(\\.[0-7]*)?|\\.[0-7]+)(p[+-]?\\d+)?$/i,\r\n  isDecimal = /^(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i,\r\n\r\n  BASE = 1e7,\r\n  LOG_BASE = 7,\r\n  MAX_SAFE_INTEGER = 9007199254740991,\r\n\r\n  LN10_PRECISION = LN10.length - 1,\r\n  PI_PRECISION = PI.length - 1,\r\n\r\n  // Decimal.prototype object\r\n  P = { toStringTag: tag };\r\n\r\n\r\n// Decimal prototype methods\r\n\r\n\r\n/*\r\n *  absoluteValue             abs\r\n *  ceil\r\n *  clampedTo                 clamp\r\n *  comparedTo                cmp\r\n *  cosine                    cos\r\n *  cubeRoot                  cbrt\r\n *  decimalPlaces             dp\r\n *  dividedBy                 div\r\n *  dividedToIntegerBy        divToInt\r\n *  equals                    eq\r\n *  floor\r\n *  greaterThan               gt\r\n *  greaterThanOrEqualTo      gte\r\n *  hyperbolicCosine          cosh\r\n *  hyperbolicSine            sinh\r\n *  hyperbolicTangent         tanh\r\n *  inverseCosine             acos\r\n *  inverseHyperbolicCosine   acosh\r\n *  inverseHyperbolicSine     asinh\r\n *  inverseHyperbolicTangent  atanh\r\n *  inverseSine               asin\r\n *  inverseTangent            atan\r\n *  isFinite\r\n *  isInteger                 isInt\r\n *  isNaN\r\n *  isNegative                isNeg\r\n *  isPositive                isPos\r\n *  isZero\r\n *  lessThan                  lt\r\n *  lessThanOrEqualTo         lte\r\n *  logarithm                 log\r\n *  [maximum]                 [max]\r\n *  [minimum]                 [min]\r\n *  minus                     sub\r\n *  modulo                    mod\r\n *  naturalExponential        exp\r\n *  naturalLogarithm          ln\r\n *  negated                   neg\r\n *  plus                      add\r\n *  precision                 sd\r\n *  round\r\n *  sine                      sin\r\n *  squareRoot                sqrt\r\n *  tangent                   tan\r\n *  times                     mul\r\n *  toBinary\r\n *  toDecimalPlaces           toDP\r\n *  toExponential\r\n *  toFixed\r\n *  toFraction\r\n *  toHexadecimal             toHex\r\n *  toNearest\r\n *  toNumber\r\n *  toOctal\r\n *  toPower                   pow\r\n *  toPrecision\r\n *  toSignificantDigits       toSD\r\n *  toString\r\n *  truncated                 trunc\r\n *  valueOf                   toJSON\r\n */\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the absolute value of this Decimal.\r\n *\r\n */\r\nP.absoluteValue = P.abs = function () {\r\n  var x = new this.constructor(this);\r\n  if (x.s < 0) x.s = 1;\r\n  return finalise(x);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a whole number in the\r\n * direction of positive Infinity.\r\n *\r\n */\r\nP.ceil = function () {\r\n  return finalise(new this.constructor(this), this.e + 1, 2);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal clamped to the range\r\n * delineated by `min` and `max`.\r\n *\r\n * min {number|string|Decimal}\r\n * max {number|string|Decimal}\r\n *\r\n */\r\nP.clampedTo = P.clamp = function (min, max) {\r\n  var k,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n  min = new Ctor(min);\r\n  max = new Ctor(max);\r\n  if (!min.s || !max.s) return new Ctor(NaN);\r\n  if (min.gt(max)) throw Error(invalidArgument + max);\r\n  k = x.cmp(min);\r\n  return k < 0 ? min : x.cmp(max) > 0 ? max : new Ctor(x);\r\n};\r\n\r\n\r\n/*\r\n * Return\r\n *   1    if the value of this Decimal is greater than the value of `y`,\r\n *  -1    if the value of this Decimal is less than the value of `y`,\r\n *   0    if they have the same value,\r\n *   NaN  if the value of either Decimal is NaN.\r\n *\r\n */\r\nP.comparedTo = P.cmp = function (y) {\r\n  var i, j, xdL, ydL,\r\n    x = this,\r\n    xd = x.d,\r\n    yd = (y = new x.constructor(y)).d,\r\n    xs = x.s,\r\n    ys = y.s;\r\n\r\n  // Either NaN or ±Infinity?\r\n  if (!xd || !yd) {\r\n    return !xs || !ys ? NaN : xs !== ys ? xs : xd === yd ? 0 : !xd ^ xs < 0 ? 1 : -1;\r\n  }\r\n\r\n  // Either zero?\r\n  if (!xd[0] || !yd[0]) return xd[0] ? xs : yd[0] ? -ys : 0;\r\n\r\n  // Signs differ?\r\n  if (xs !== ys) return xs;\r\n\r\n  // Compare exponents.\r\n  if (x.e !== y.e) return x.e > y.e ^ xs < 0 ? 1 : -1;\r\n\r\n  xdL = xd.length;\r\n  ydL = yd.length;\r\n\r\n  // Compare digit by digit.\r\n  for (i = 0, j = xdL < ydL ? xdL : ydL; i < j; ++i) {\r\n    if (xd[i] !== yd[i]) return xd[i] > yd[i] ^ xs < 0 ? 1 : -1;\r\n  }\r\n\r\n  // Compare lengths.\r\n  return xdL === ydL ? 0 : xdL > ydL ^ xs < 0 ? 1 : -1;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the cosine of the value in radians of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-1, 1]\r\n *\r\n * cos(0)         = 1\r\n * cos(-0)        = 1\r\n * cos(Infinity)  = NaN\r\n * cos(-Infinity) = NaN\r\n * cos(NaN)       = NaN\r\n *\r\n */\r\nP.cosine = P.cos = function () {\r\n  var pr, rm,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (!x.d) return new Ctor(NaN);\r\n\r\n  // cos(0) = cos(-0) = 1\r\n  if (!x.d[0]) return new Ctor(1);\r\n\r\n  pr = Ctor.precision;\r\n  rm = Ctor.rounding;\r\n  Ctor.precision = pr + Math.max(x.e, x.sd()) + LOG_BASE;\r\n  Ctor.rounding = 1;\r\n\r\n  x = cosine(Ctor, toLessThanHalfPi(Ctor, x));\r\n\r\n  Ctor.precision = pr;\r\n  Ctor.rounding = rm;\r\n\r\n  return finalise(quadrant == 2 || quadrant == 3 ? x.neg() : x, pr, rm, true);\r\n};\r\n\r\n\r\n/*\r\n *\r\n * Return a new Decimal whose value is the cube root of the value of this Decimal, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n *  cbrt(0)  =  0\r\n *  cbrt(-0) = -0\r\n *  cbrt(1)  =  1\r\n *  cbrt(-1) = -1\r\n *  cbrt(N)  =  N\r\n *  cbrt(-I) = -I\r\n *  cbrt(I)  =  I\r\n *\r\n * Math.cbrt(x) = (x < 0 ? -Math.pow(-x, 1/3) : Math.pow(x, 1/3))\r\n *\r\n */\r\nP.cubeRoot = P.cbrt = function () {\r\n  var e, m, n, r, rep, s, sd, t, t3, t3plusx,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (!x.isFinite() || x.isZero()) return new Ctor(x);\r\n  external = false;\r\n\r\n  // Initial estimate.\r\n  s = x.s * mathpow(x.s * x, 1 / 3);\r\n\r\n   // Math.cbrt underflow/overflow?\r\n   // Pass x to Math.pow as integer, then adjust the exponent of the result.\r\n  if (!s || Math.abs(s) == 1 / 0) {\r\n    n = digitsToString(x.d);\r\n    e = x.e;\r\n\r\n    // Adjust n exponent so it is a multiple of 3 away from x exponent.\r\n    if (s = (e - n.length + 1) % 3) n += (s == 1 || s == -2 ? '0' : '00');\r\n    s = mathpow(n, 1 / 3);\r\n\r\n    // Rarely, e may be one less than the result exponent value.\r\n    e = mathfloor((e + 1) / 3) - (e % 3 == (e < 0 ? -1 : 2));\r\n\r\n    if (s == 1 / 0) {\r\n      n = '5e' + e;\r\n    } else {\r\n      n = s.toExponential();\r\n      n = n.slice(0, n.indexOf('e') + 1) + e;\r\n    }\r\n\r\n    r = new Ctor(n);\r\n    r.s = x.s;\r\n  } else {\r\n    r = new Ctor(s.toString());\r\n  }\r\n\r\n  sd = (e = Ctor.precision) + 3;\r\n\r\n  // Halley's method.\r\n  // TODO? Compare Newton's method.\r\n  for (;;) {\r\n    t = r;\r\n    t3 = t.times(t).times(t);\r\n    t3plusx = t3.plus(x);\r\n    r = divide(t3plusx.plus(x).times(t), t3plusx.plus(t3), sd + 2, 1);\r\n\r\n    // TODO? Replace with for-loop and checkRoundingDigits.\r\n    if (digitsToString(t.d).slice(0, sd) === (n = digitsToString(r.d)).slice(0, sd)) {\r\n      n = n.slice(sd - 3, sd + 1);\r\n\r\n      // The 4th rounding digit may be in error by -1 so if the 4 rounding digits are 9999 or 4999\r\n      // , i.e. approaching a rounding boundary, continue the iteration.\r\n      if (n == '9999' || !rep && n == '4999') {\r\n\r\n        // On the first iteration only, check to see if rounding up gives the exact result as the\r\n        // nines may infinitely repeat.\r\n        if (!rep) {\r\n          finalise(t, e + 1, 0);\r\n\r\n          if (t.times(t).times(t).eq(x)) {\r\n            r = t;\r\n            break;\r\n          }\r\n        }\r\n\r\n        sd += 4;\r\n        rep = 1;\r\n      } else {\r\n\r\n        // If the rounding digits are null, 0{0,4} or 50{0,3}, check for an exact result.\r\n        // If not, then there are further digits and m will be truthy.\r\n        if (!+n || !+n.slice(1) && n.charAt(0) == '5') {\r\n\r\n          // Truncate to the first rounding digit.\r\n          finalise(r, e + 1, 1);\r\n          m = !r.times(r).times(r).eq(x);\r\n        }\r\n\r\n        break;\r\n      }\r\n    }\r\n  }\r\n\r\n  external = true;\r\n\r\n  return finalise(r, e, Ctor.rounding, m);\r\n};\r\n\r\n\r\n/*\r\n * Return the number of decimal places of the value of this Decimal.\r\n *\r\n */\r\nP.decimalPlaces = P.dp = function () {\r\n  var w,\r\n    d = this.d,\r\n    n = NaN;\r\n\r\n  if (d) {\r\n    w = d.length - 1;\r\n    n = (w - mathfloor(this.e / LOG_BASE)) * LOG_BASE;\r\n\r\n    // Subtract the number of trailing zeros of the last word.\r\n    w = d[w];\r\n    if (w) for (; w % 10 == 0; w /= 10) n--;\r\n    if (n < 0) n = 0;\r\n  }\r\n\r\n  return n;\r\n};\r\n\r\n\r\n/*\r\n *  n / 0 = I\r\n *  n / N = N\r\n *  n / I = 0\r\n *  0 / n = 0\r\n *  0 / 0 = N\r\n *  0 / N = N\r\n *  0 / I = 0\r\n *  N / n = N\r\n *  N / 0 = N\r\n *  N / N = N\r\n *  N / I = N\r\n *  I / n = I\r\n *  I / 0 = I\r\n *  I / N = N\r\n *  I / I = N\r\n *\r\n * Return a new Decimal whose value is the value of this Decimal divided by `y`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.dividedBy = P.div = function (y) {\r\n  return divide(this, new this.constructor(y));\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the integer part of dividing the value of this Decimal\r\n * by the value of `y`, rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.dividedToIntegerBy = P.divToInt = function (y) {\r\n  var x = this,\r\n    Ctor = x.constructor;\r\n  return finalise(divide(x, new Ctor(y), 0, 1, 1), Ctor.precision, Ctor.rounding);\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is equal to the value of `y`, otherwise return false.\r\n *\r\n */\r\nP.equals = P.eq = function (y) {\r\n  return this.cmp(y) === 0;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a whole number in the\r\n * direction of negative Infinity.\r\n *\r\n */\r\nP.floor = function () {\r\n  return finalise(new this.constructor(this), this.e + 1, 3);\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is greater than the value of `y`, otherwise return\r\n * false.\r\n *\r\n */\r\nP.greaterThan = P.gt = function (y) {\r\n  return this.cmp(y) > 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is greater than or equal to the value of `y`,\r\n * otherwise return false.\r\n *\r\n */\r\nP.greaterThanOrEqualTo = P.gte = function (y) {\r\n  var k = this.cmp(y);\r\n  return k == 1 || k === 0;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic cosine of the value in radians of this\r\n * Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [1, Infinity]\r\n *\r\n * cosh(x) = 1 + x^2/2! + x^4/4! + x^6/6! + ...\r\n *\r\n * cosh(0)         = 1\r\n * cosh(-0)        = 1\r\n * cosh(Infinity)  = Infinity\r\n * cosh(-Infinity) = Infinity\r\n * cosh(NaN)       = NaN\r\n *\r\n *  x        time taken (ms)   result\r\n * 1000      9                 9.8503555700852349694e+433\r\n * 10000     25                4.4034091128314607936e+4342\r\n * 100000    171               1.4033316802130615897e+43429\r\n * 1000000   3817              1.5166076984010437725e+434294\r\n * 10000000  abandoned after 2 minute wait\r\n *\r\n * TODO? Compare performance of cosh(x) = 0.5 * (exp(x) + exp(-x))\r\n *\r\n */\r\nP.hyperbolicCosine = P.cosh = function () {\r\n  var k, n, pr, rm, len,\r\n    x = this,\r\n    Ctor = x.constructor,\r\n    one = new Ctor(1);\r\n\r\n  if (!x.isFinite()) return new Ctor(x.s ? 1 / 0 : NaN);\r\n  if (x.isZero()) return one;\r\n\r\n  pr = Ctor.precision;\r\n  rm = Ctor.rounding;\r\n  Ctor.precision = pr + Math.max(x.e, x.sd()) + 4;\r\n  Ctor.rounding = 1;\r\n  len = x.d.length;\r\n\r\n  // Argument reduction: cos(4x) = 1 - 8cos^2(x) + 8cos^4(x) + 1\r\n  // i.e. cos(x) = 1 - cos^2(x/4)(8 - 8cos^2(x/4))\r\n\r\n  // Estimate the optimum number of times to use the argument reduction.\r\n  // TODO? Estimation reused from cosine() and may not be optimal here.\r\n  if (len < 32) {\r\n    k = Math.ceil(len / 3);\r\n    n = (1 / tinyPow(4, k)).toString();\r\n  } else {\r\n    k = 16;\r\n    n = '2.3283064365386962890625e-10';\r\n  }\r\n\r\n  x = taylorSeries(Ctor, 1, x.times(n), new Ctor(1), true);\r\n\r\n  // Reverse argument reduction\r\n  var cosh2_x,\r\n    i = k,\r\n    d8 = new Ctor(8);\r\n  for (; i--;) {\r\n    cosh2_x = x.times(x);\r\n    x = one.minus(cosh2_x.times(d8.minus(cosh2_x.times(d8))));\r\n  }\r\n\r\n  return finalise(x, Ctor.precision = pr, Ctor.rounding = rm, true);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic sine of the value in radians of this\r\n * Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-Infinity, Infinity]\r\n *\r\n * sinh(x) = x + x^3/3! + x^5/5! + x^7/7! + ...\r\n *\r\n * sinh(0)         = 0\r\n * sinh(-0)        = -0\r\n * sinh(Infinity)  = Infinity\r\n * sinh(-Infinity) = -Infinity\r\n * sinh(NaN)       = NaN\r\n *\r\n * x        time taken (ms)\r\n * 10       2 ms\r\n * 100      5 ms\r\n * 1000     14 ms\r\n * 10000    82 ms\r\n * 100000   886 ms            1.4033316802130615897e+43429\r\n * 200000   2613 ms\r\n * 300000   5407 ms\r\n * 400000   8824 ms\r\n * 500000   13026 ms          8.7080643612718084129e+217146\r\n * 1000000  48543 ms\r\n *\r\n * TODO? Compare performance of sinh(x) = 0.5 * (exp(x) - exp(-x))\r\n *\r\n */\r\nP.hyperbolicSine = P.sinh = function () {\r\n  var k, pr, rm, len,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (!x.isFinite() || x.isZero()) return new Ctor(x);\r\n\r\n  pr = Ctor.precision;\r\n  rm = Ctor.rounding;\r\n  Ctor.precision = pr + Math.max(x.e, x.sd()) + 4;\r\n  Ctor.rounding = 1;\r\n  len = x.d.length;\r\n\r\n  if (len < 3) {\r\n    x = taylorSeries(Ctor, 2, x, x, true);\r\n  } else {\r\n\r\n    // Alternative argument reduction: sinh(3x) = sinh(x)(3 + 4sinh^2(x))\r\n    // i.e. sinh(x) = sinh(x/3)(3 + 4sinh^2(x/3))\r\n    // 3 multiplications and 1 addition\r\n\r\n    // Argument reduction: sinh(5x) = sinh(x)(5 + sinh^2(x)(20 + 16sinh^2(x)))\r\n    // i.e. sinh(x) = sinh(x/5)(5 + sinh^2(x/5)(20 + 16sinh^2(x/5)))\r\n    // 4 multiplications and 2 additions\r\n\r\n    // Estimate the optimum number of times to use the argument reduction.\r\n    k = 1.4 * Math.sqrt(len);\r\n    k = k > 16 ? 16 : k | 0;\r\n\r\n    x = x.times(1 / tinyPow(5, k));\r\n    x = taylorSeries(Ctor, 2, x, x, true);\r\n\r\n    // Reverse argument reduction\r\n    var sinh2_x,\r\n      d5 = new Ctor(5),\r\n      d16 = new Ctor(16),\r\n      d20 = new Ctor(20);\r\n    for (; k--;) {\r\n      sinh2_x = x.times(x);\r\n      x = x.times(d5.plus(sinh2_x.times(d16.times(sinh2_x).plus(d20))));\r\n    }\r\n  }\r\n\r\n  Ctor.precision = pr;\r\n  Ctor.rounding = rm;\r\n\r\n  return finalise(x, pr, rm, true);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic tangent of the value in radians of this\r\n * Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-1, 1]\r\n *\r\n * tanh(x) = sinh(x) / cosh(x)\r\n *\r\n * tanh(0)         = 0\r\n * tanh(-0)        = -0\r\n * tanh(Infinity)  = 1\r\n * tanh(-Infinity) = -1\r\n * tanh(NaN)       = NaN\r\n *\r\n */\r\nP.hyperbolicTangent = P.tanh = function () {\r\n  var pr, rm,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (!x.isFinite()) return new Ctor(x.s);\r\n  if (x.isZero()) return new Ctor(x);\r\n\r\n  pr = Ctor.precision;\r\n  rm = Ctor.rounding;\r\n  Ctor.precision = pr + 7;\r\n  Ctor.rounding = 1;\r\n\r\n  return divide(x.sinh(), x.cosh(), Ctor.precision = pr, Ctor.rounding = rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arccosine (inverse cosine) in radians of the value of\r\n * this Decimal.\r\n *\r\n * Domain: [-1, 1]\r\n * Range: [0, pi]\r\n *\r\n * acos(x) = pi/2 - asin(x)\r\n *\r\n * acos(0)       = pi/2\r\n * acos(-0)      = pi/2\r\n * acos(1)       = 0\r\n * acos(-1)      = pi\r\n * acos(1/2)     = pi/3\r\n * acos(-1/2)    = 2*pi/3\r\n * acos(|x| > 1) = NaN\r\n * acos(NaN)     = NaN\r\n *\r\n */\r\nP.inverseCosine = P.acos = function () {\r\n  var halfPi,\r\n    x = this,\r\n    Ctor = x.constructor,\r\n    k = x.abs().cmp(1),\r\n    pr = Ctor.precision,\r\n    rm = Ctor.rounding;\r\n\r\n  if (k !== -1) {\r\n    return k === 0\r\n      // |x| is 1\r\n      ? x.isNeg() ? getPi(Ctor, pr, rm) : new Ctor(0)\r\n      // |x| > 1 or x is NaN\r\n      : new Ctor(NaN);\r\n  }\r\n\r\n  if (x.isZero()) return getPi(Ctor, pr + 4, rm).times(0.5);\r\n\r\n  // TODO? Special case acos(0.5) = pi/3 and acos(-0.5) = 2*pi/3\r\n\r\n  Ctor.precision = pr + 6;\r\n  Ctor.rounding = 1;\r\n\r\n  x = x.asin();\r\n  halfPi = getPi(Ctor, pr + 4, rm).times(0.5);\r\n\r\n  Ctor.precision = pr;\r\n  Ctor.rounding = rm;\r\n\r\n  return halfPi.minus(x);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic cosine in radians of the\r\n * value of this Decimal.\r\n *\r\n * Domain: [1, Infinity]\r\n * Range: [0, Infinity]\r\n *\r\n * acosh(x) = ln(x + sqrt(x^2 - 1))\r\n *\r\n * acosh(x < 1)     = NaN\r\n * acosh(NaN)       = NaN\r\n * acosh(Infinity)  = Infinity\r\n * acosh(-Infinity) = NaN\r\n * acosh(0)         = NaN\r\n * acosh(-0)        = NaN\r\n * acosh(1)         = 0\r\n * acosh(-1)        = NaN\r\n *\r\n */\r\nP.inverseHyperbolicCosine = P.acosh = function () {\r\n  var pr, rm,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (x.lte(1)) return new Ctor(x.eq(1) ? 0 : NaN);\r\n  if (!x.isFinite()) return new Ctor(x);\r\n\r\n  pr = Ctor.precision;\r\n  rm = Ctor.rounding;\r\n  Ctor.precision = pr + Math.max(Math.abs(x.e), x.sd()) + 4;\r\n  Ctor.rounding = 1;\r\n  external = false;\r\n\r\n  x = x.times(x).minus(1).sqrt().plus(x);\r\n\r\n  external = true;\r\n  Ctor.precision = pr;\r\n  Ctor.rounding = rm;\r\n\r\n  return x.ln();\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic sine in radians of the value\r\n * of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-Infinity, Infinity]\r\n *\r\n * asinh(x) = ln(x + sqrt(x^2 + 1))\r\n *\r\n * asinh(NaN)       = NaN\r\n * asinh(Infinity)  = Infinity\r\n * asinh(-Infinity) = -Infinity\r\n * asinh(0)         = 0\r\n * asinh(-0)        = -0\r\n *\r\n */\r\nP.inverseHyperbolicSine = P.asinh = function () {\r\n  var pr, rm,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (!x.isFinite() || x.isZero()) return new Ctor(x);\r\n\r\n  pr = Ctor.precision;\r\n  rm = Ctor.rounding;\r\n  Ctor.precision = pr + 2 * Math.max(Math.abs(x.e), x.sd()) + 6;\r\n  Ctor.rounding = 1;\r\n  external = false;\r\n\r\n  x = x.times(x).plus(1).sqrt().plus(x);\r\n\r\n  external = true;\r\n  Ctor.precision = pr;\r\n  Ctor.rounding = rm;\r\n\r\n  return x.ln();\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic tangent in radians of the\r\n * value of this Decimal.\r\n *\r\n * Domain: [-1, 1]\r\n * Range: [-Infinity, Infinity]\r\n *\r\n * atanh(x) = 0.5 * ln((1 + x) / (1 - x))\r\n *\r\n * atanh(|x| > 1)   = NaN\r\n * atanh(NaN)       = NaN\r\n * atanh(Infinity)  = NaN\r\n * atanh(-Infinity) = NaN\r\n * atanh(0)         = 0\r\n * atanh(-0)        = -0\r\n * atanh(1)         = Infinity\r\n * atanh(-1)        = -Infinity\r\n *\r\n */\r\nP.inverseHyperbolicTangent = P.atanh = function () {\r\n  var pr, rm, wpr, xsd,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (!x.isFinite()) return new Ctor(NaN);\r\n  if (x.e >= 0) return new Ctor(x.abs().eq(1) ? x.s / 0 : x.isZero() ? x : NaN);\r\n\r\n  pr = Ctor.precision;\r\n  rm = Ctor.rounding;\r\n  xsd = x.sd();\r\n\r\n  if (Math.max(xsd, pr) < 2 * -x.e - 1) return finalise(new Ctor(x), pr, rm, true);\r\n\r\n  Ctor.precision = wpr = xsd - x.e;\r\n\r\n  x = divide(x.plus(1), new Ctor(1).minus(x), wpr + pr, 1);\r\n\r\n  Ctor.precision = pr + 4;\r\n  Ctor.rounding = 1;\r\n\r\n  x = x.ln();\r\n\r\n  Ctor.precision = pr;\r\n  Ctor.rounding = rm;\r\n\r\n  return x.times(0.5);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arcsine (inverse sine) in radians of the value of this\r\n * Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-pi/2, pi/2]\r\n *\r\n * asin(x) = 2*atan(x/(1 + sqrt(1 - x^2)))\r\n *\r\n * asin(0)       = 0\r\n * asin(-0)      = -0\r\n * asin(1/2)     = pi/6\r\n * asin(-1/2)    = -pi/6\r\n * asin(1)       = pi/2\r\n * asin(-1)      = -pi/2\r\n * asin(|x| > 1) = NaN\r\n * asin(NaN)     = NaN\r\n *\r\n * TODO? Compare performance of Taylor series.\r\n *\r\n */\r\nP.inverseSine = P.asin = function () {\r\n  var halfPi, k,\r\n    pr, rm,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (x.isZero()) return new Ctor(x);\r\n\r\n  k = x.abs().cmp(1);\r\n  pr = Ctor.precision;\r\n  rm = Ctor.rounding;\r\n\r\n  if (k !== -1) {\r\n\r\n    // |x| is 1\r\n    if (k === 0) {\r\n      halfPi = getPi(Ctor, pr + 4, rm).times(0.5);\r\n      halfPi.s = x.s;\r\n      return halfPi;\r\n    }\r\n\r\n    // |x| > 1 or x is NaN\r\n    return new Ctor(NaN);\r\n  }\r\n\r\n  // TODO? Special case asin(1/2) = pi/6 and asin(-1/2) = -pi/6\r\n\r\n  Ctor.precision = pr + 6;\r\n  Ctor.rounding = 1;\r\n\r\n  x = x.div(new Ctor(1).minus(x.times(x)).sqrt().plus(1)).atan();\r\n\r\n  Ctor.precision = pr;\r\n  Ctor.rounding = rm;\r\n\r\n  return x.times(2);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arctangent (inverse tangent) in radians of the value\r\n * of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-pi/2, pi/2]\r\n *\r\n * atan(x) = x - x^3/3 + x^5/5 - x^7/7 + ...\r\n *\r\n * atan(0)         = 0\r\n * atan(-0)        = -0\r\n * atan(1)         = pi/4\r\n * atan(-1)        = -pi/4\r\n * atan(Infinity)  = pi/2\r\n * atan(-Infinity) = -pi/2\r\n * atan(NaN)       = NaN\r\n *\r\n */\r\nP.inverseTangent = P.atan = function () {\r\n  var i, j, k, n, px, t, r, wpr, x2,\r\n    x = this,\r\n    Ctor = x.constructor,\r\n    pr = Ctor.precision,\r\n    rm = Ctor.rounding;\r\n\r\n  if (!x.isFinite()) {\r\n    if (!x.s) return new Ctor(NaN);\r\n    if (pr + 4 <= PI_PRECISION) {\r\n      r = getPi(Ctor, pr + 4, rm).times(0.5);\r\n      r.s = x.s;\r\n      return r;\r\n    }\r\n  } else if (x.isZero()) {\r\n    return new Ctor(x);\r\n  } else if (x.abs().eq(1) && pr + 4 <= PI_PRECISION) {\r\n    r = getPi(Ctor, pr + 4, rm).times(0.25);\r\n    r.s = x.s;\r\n    return r;\r\n  }\r\n\r\n  Ctor.precision = wpr = pr + 10;\r\n  Ctor.rounding = 1;\r\n\r\n  // TODO? if (x >= 1 && pr <= PI_PRECISION) atan(x) = halfPi * x.s - atan(1 / x);\r\n\r\n  // Argument reduction\r\n  // Ensure |x| < 0.42\r\n  // atan(x) = 2 * atan(x / (1 + sqrt(1 + x^2)))\r\n\r\n  k = Math.min(28, wpr / LOG_BASE + 2 | 0);\r\n\r\n  for (i = k; i; --i) x = x.div(x.times(x).plus(1).sqrt().plus(1));\r\n\r\n  external = false;\r\n\r\n  j = Math.ceil(wpr / LOG_BASE);\r\n  n = 1;\r\n  x2 = x.times(x);\r\n  r = new Ctor(x);\r\n  px = x;\r\n\r\n  // atan(x) = x - x^3/3 + x^5/5 - x^7/7 + ...\r\n  for (; i !== -1;) {\r\n    px = px.times(x2);\r\n    t = r.minus(px.div(n += 2));\r\n\r\n    px = px.times(x2);\r\n    r = t.plus(px.div(n += 2));\r\n\r\n    if (r.d[j] !== void 0) for (i = j; r.d[i] === t.d[i] && i--;);\r\n  }\r\n\r\n  if (k) r = r.times(2 << (k - 1));\r\n\r\n  external = true;\r\n\r\n  return finalise(r, Ctor.precision = pr, Ctor.rounding = rm, true);\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is a finite number, otherwise return false.\r\n *\r\n */\r\nP.isFinite = function () {\r\n  return !!this.d;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is an integer, otherwise return false.\r\n *\r\n */\r\nP.isInteger = P.isInt = function () {\r\n  return !!this.d && mathfloor(this.e / LOG_BASE) > this.d.length - 2;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is NaN, otherwise return false.\r\n *\r\n */\r\nP.isNaN = function () {\r\n  return !this.s;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is negative, otherwise return false.\r\n *\r\n */\r\nP.isNegative = P.isNeg = function () {\r\n  return this.s < 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is positive, otherwise return false.\r\n *\r\n */\r\nP.isPositive = P.isPos = function () {\r\n  return this.s > 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is 0 or -0, otherwise return false.\r\n *\r\n */\r\nP.isZero = function () {\r\n  return !!this.d && this.d[0] === 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is less than `y`, otherwise return false.\r\n *\r\n */\r\nP.lessThan = P.lt = function (y) {\r\n  return this.cmp(y) < 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is less than or equal to `y`, otherwise return false.\r\n *\r\n */\r\nP.lessThanOrEqualTo = P.lte = function (y) {\r\n  return this.cmp(y) < 1;\r\n};\r\n\r\n\r\n/*\r\n * Return the logarithm of the value of this Decimal to the specified base, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * If no base is specified, return log[10](arg).\r\n *\r\n * log[base](arg) = ln(arg) / ln(base)\r\n *\r\n * The result will always be correctly rounded if the base of the log is 10, and 'almost always'\r\n * otherwise:\r\n *\r\n * Depending on the rounding mode, the result may be incorrectly rounded if the first fifteen\r\n * rounding digits are [49]99999999999999 or [50]00000000000000. In that case, the maximum error\r\n * between the result and the correctly rounded result will be one ulp (unit in the last place).\r\n *\r\n * log[-b](a)       = NaN\r\n * log[0](a)        = NaN\r\n * log[1](a)        = NaN\r\n * log[NaN](a)      = NaN\r\n * log[Infinity](a) = NaN\r\n * log[b](0)        = -Infinity\r\n * log[b](-0)       = -Infinity\r\n * log[b](-a)       = NaN\r\n * log[b](1)        = 0\r\n * log[b](Infinity) = Infinity\r\n * log[b](NaN)      = NaN\r\n *\r\n * [base] {number|string|Decimal} The base of the logarithm.\r\n *\r\n */\r\nP.logarithm = P.log = function (base) {\r\n  var isBase10, d, denominator, k, inf, num, sd, r,\r\n    arg = this,\r\n    Ctor = arg.constructor,\r\n    pr = Ctor.precision,\r\n    rm = Ctor.rounding,\r\n    guard = 5;\r\n\r\n  // Default base is 10.\r\n  if (base == null) {\r\n    base = new Ctor(10);\r\n    isBase10 = true;\r\n  } else {\r\n    base = new Ctor(base);\r\n    d = base.d;\r\n\r\n    // Return NaN if base is negative, or non-finite, or is 0 or 1.\r\n    if (base.s < 0 || !d || !d[0] || base.eq(1)) return new Ctor(NaN);\r\n\r\n    isBase10 = base.eq(10);\r\n  }\r\n\r\n  d = arg.d;\r\n\r\n  // Is arg negative, non-finite, 0 or 1?\r\n  if (arg.s < 0 || !d || !d[0] || arg.eq(1)) {\r\n    return new Ctor(d && !d[0] ? -1 / 0 : arg.s != 1 ? NaN : d ? 0 : 1 / 0);\r\n  }\r\n\r\n  // The result will have a non-terminating decimal expansion if base is 10 and arg is not an\r\n  // integer power of 10.\r\n  if (isBase10) {\r\n    if (d.length > 1) {\r\n      inf = true;\r\n    } else {\r\n      for (k = d[0]; k % 10 === 0;) k /= 10;\r\n      inf = k !== 1;\r\n    }\r\n  }\r\n\r\n  external = false;\r\n  sd = pr + guard;\r\n  num = naturalLogarithm(arg, sd);\r\n  denominator = isBase10 ? getLn10(Ctor, sd + 10) : naturalLogarithm(base, sd);\r\n\r\n  // The result will have 5 rounding digits.\r\n  r = divide(num, denominator, sd, 1);\r\n\r\n  // If at a rounding boundary, i.e. the result's rounding digits are [49]9999 or [50]0000,\r\n  // calculate 10 further digits.\r\n  //\r\n  // If the result is known to have an infinite decimal expansion, repeat this until it is clear\r\n  // that the result is above or below the boundary. Otherwise, if after calculating the 10\r\n  // further digits, the last 14 are nines, round up and assume the result is exact.\r\n  // Also assume the result is exact if the last 14 are zero.\r\n  //\r\n  // Example of a result that will be incorrectly rounded:\r\n  // log[1048576](4503599627370502) = 2.60000000000000009610279511444746...\r\n  // The above result correctly rounded using ROUND_CEIL to 1 decimal place should be 2.7, but it\r\n  // will be given as 2.6 as there are 15 zeros immediately after the requested decimal place, so\r\n  // the exact result would be assumed to be 2.6, which rounded using ROUND_CEIL to 1 decimal\r\n  // place is still 2.6.\r\n  if (checkRoundingDigits(r.d, k = pr, rm)) {\r\n\r\n    do {\r\n      sd += 10;\r\n      num = naturalLogarithm(arg, sd);\r\n      denominator = isBase10 ? getLn10(Ctor, sd + 10) : naturalLogarithm(base, sd);\r\n      r = divide(num, denominator, sd, 1);\r\n\r\n      if (!inf) {\r\n\r\n        // Check for 14 nines from the 2nd rounding digit, as the first may be 4.\r\n        if (+digitsToString(r.d).slice(k + 1, k + 15) + 1 == 1e14) {\r\n          r = finalise(r, pr + 1, 0);\r\n        }\r\n\r\n        break;\r\n      }\r\n    } while (checkRoundingDigits(r.d, k += 10, rm));\r\n  }\r\n\r\n  external = true;\r\n\r\n  return finalise(r, pr, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the maximum of the arguments and the value of this Decimal.\r\n *\r\n * arguments {number|string|Decimal}\r\n *\r\nP.max = function () {\r\n  Array.prototype.push.call(arguments, this);\r\n  return maxOrMin(this.constructor, arguments, 'lt');\r\n};\r\n */\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the minimum of the arguments and the value of this Decimal.\r\n *\r\n * arguments {number|string|Decimal}\r\n *\r\nP.min = function () {\r\n  Array.prototype.push.call(arguments, this);\r\n  return maxOrMin(this.constructor, arguments, 'gt');\r\n};\r\n */\r\n\r\n\r\n/*\r\n *  n - 0 = n\r\n *  n - N = N\r\n *  n - I = -I\r\n *  0 - n = -n\r\n *  0 - 0 = 0\r\n *  0 - N = N\r\n *  0 - I = -I\r\n *  N - n = N\r\n *  N - 0 = N\r\n *  N - N = N\r\n *  N - I = N\r\n *  I - n = I\r\n *  I - 0 = I\r\n *  I - N = N\r\n *  I - I = N\r\n *\r\n * Return a new Decimal whose value is the value of this Decimal minus `y`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.minus = P.sub = function (y) {\r\n  var d, e, i, j, k, len, pr, rm, xd, xe, xLTy, yd,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  y = new Ctor(y);\r\n\r\n  // If either is not finite...\r\n  if (!x.d || !y.d) {\r\n\r\n    // Return NaN if either is NaN.\r\n    if (!x.s || !y.s) y = new Ctor(NaN);\r\n\r\n    // Return y negated if x is finite and y is ±Infinity.\r\n    else if (x.d) y.s = -y.s;\r\n\r\n    // Return x if y is finite and x is ±Infinity.\r\n    // Return x if both are ±Infinity with different signs.\r\n    // Return NaN if both are ±Infinity with the same sign.\r\n    else y = new Ctor(y.d || x.s !== y.s ? x : NaN);\r\n\r\n    return y;\r\n  }\r\n\r\n  // If signs differ...\r\n  if (x.s != y.s) {\r\n    y.s = -y.s;\r\n    return x.plus(y);\r\n  }\r\n\r\n  xd = x.d;\r\n  yd = y.d;\r\n  pr = Ctor.precision;\r\n  rm = Ctor.rounding;\r\n\r\n  // If either is zero...\r\n  if (!xd[0] || !yd[0]) {\r\n\r\n    // Return y negated if x is zero and y is non-zero.\r\n    if (yd[0]) y.s = -y.s;\r\n\r\n    // Return x if y is zero and x is non-zero.\r\n    else if (xd[0]) y = new Ctor(x);\r\n\r\n    // Return zero if both are zero.\r\n    // From IEEE 754 (2008) 6.3: 0 - 0 = -0 - -0 = -0 when rounding to -Infinity.\r\n    else return new Ctor(rm === 3 ? -0 : 0);\r\n\r\n    return external ? finalise(y, pr, rm) : y;\r\n  }\r\n\r\n  // x and y are finite, non-zero numbers with the same sign.\r\n\r\n  // Calculate base 1e7 exponents.\r\n  e = mathfloor(y.e / LOG_BASE);\r\n  xe = mathfloor(x.e / LOG_BASE);\r\n\r\n  xd = xd.slice();\r\n  k = xe - e;\r\n\r\n  // If base 1e7 exponents differ...\r\n  if (k) {\r\n    xLTy = k < 0;\r\n\r\n    if (xLTy) {\r\n      d = xd;\r\n      k = -k;\r\n      len = yd.length;\r\n    } else {\r\n      d = yd;\r\n      e = xe;\r\n      len = xd.length;\r\n    }\r\n\r\n    // Numbers with massively different exponents would result in a very high number of\r\n    // zeros needing to be prepended, but this can be avoided while still ensuring correct\r\n    // rounding by limiting the number of zeros to `Math.ceil(pr / LOG_BASE) + 2`.\r\n    i = Math.max(Math.ceil(pr / LOG_BASE), len) + 2;\r\n\r\n    if (k > i) {\r\n      k = i;\r\n      d.length = 1;\r\n    }\r\n\r\n    // Prepend zeros to equalise exponents.\r\n    d.reverse();\r\n    for (i = k; i--;) d.push(0);\r\n    d.reverse();\r\n\r\n  // Base 1e7 exponents equal.\r\n  } else {\r\n\r\n    // Check digits to determine which is the bigger number.\r\n\r\n    i = xd.length;\r\n    len = yd.length;\r\n    xLTy = i < len;\r\n    if (xLTy) len = i;\r\n\r\n    for (i = 0; i < len; i++) {\r\n      if (xd[i] != yd[i]) {\r\n        xLTy = xd[i] < yd[i];\r\n        break;\r\n      }\r\n    }\r\n\r\n    k = 0;\r\n  }\r\n\r\n  if (xLTy) {\r\n    d = xd;\r\n    xd = yd;\r\n    yd = d;\r\n    y.s = -y.s;\r\n  }\r\n\r\n  len = xd.length;\r\n\r\n  // Append zeros to `xd` if shorter.\r\n  // Don't add zeros to `yd` if shorter as subtraction only needs to start at `yd` length.\r\n  for (i = yd.length - len; i > 0; --i) xd[len++] = 0;\r\n\r\n  // Subtract yd from xd.\r\n  for (i = yd.length; i > k;) {\r\n\r\n    if (xd[--i] < yd[i]) {\r\n      for (j = i; j && xd[--j] === 0;) xd[j] = BASE - 1;\r\n      --xd[j];\r\n      xd[i] += BASE;\r\n    }\r\n\r\n    xd[i] -= yd[i];\r\n  }\r\n\r\n  // Remove trailing zeros.\r\n  for (; xd[--len] === 0;) xd.pop();\r\n\r\n  // Remove leading zeros and adjust exponent accordingly.\r\n  for (; xd[0] === 0; xd.shift()) --e;\r\n\r\n  // Zero?\r\n  if (!xd[0]) return new Ctor(rm === 3 ? -0 : 0);\r\n\r\n  y.d = xd;\r\n  y.e = getBase10Exponent(xd, e);\r\n\r\n  return external ? finalise(y, pr, rm) : y;\r\n};\r\n\r\n\r\n/*\r\n *   n % 0 =  N\r\n *   n % N =  N\r\n *   n % I =  n\r\n *   0 % n =  0\r\n *  -0 % n = -0\r\n *   0 % 0 =  N\r\n *   0 % N =  N\r\n *   0 % I =  0\r\n *   N % n =  N\r\n *   N % 0 =  N\r\n *   N % N =  N\r\n *   N % I =  N\r\n *   I % n =  N\r\n *   I % 0 =  N\r\n *   I % N =  N\r\n *   I % I =  N\r\n *\r\n * Return a new Decimal whose value is the value of this Decimal modulo `y`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * The result depends on the modulo mode.\r\n *\r\n */\r\nP.modulo = P.mod = function (y) {\r\n  var q,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  y = new Ctor(y);\r\n\r\n  // Return NaN if x is ±Infinity or NaN, or y is NaN or ±0.\r\n  if (!x.d || !y.s || y.d && !y.d[0]) return new Ctor(NaN);\r\n\r\n  // Return x if y is ±Infinity or x is ±0.\r\n  if (!y.d || x.d && !x.d[0]) {\r\n    return finalise(new Ctor(x), Ctor.precision, Ctor.rounding);\r\n  }\r\n\r\n  // Prevent rounding of intermediate calculations.\r\n  external = false;\r\n\r\n  if (Ctor.modulo == 9) {\r\n\r\n    // Euclidian division: q = sign(y) * floor(x / abs(y))\r\n    // result = x - q * y    where  0 <= result < abs(y)\r\n    q = divide(x, y.abs(), 0, 3, 1);\r\n    q.s *= y.s;\r\n  } else {\r\n    q = divide(x, y, 0, Ctor.modulo, 1);\r\n  }\r\n\r\n  q = q.times(y);\r\n\r\n  external = true;\r\n\r\n  return x.minus(q);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural exponential of the value of this Decimal,\r\n * i.e. the base e raised to the power the value of this Decimal, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.naturalExponential = P.exp = function () {\r\n  return naturalExponential(this);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural logarithm of the value of this Decimal,\r\n * rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.naturalLogarithm = P.ln = function () {\r\n  return naturalLogarithm(this);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal negated, i.e. as if multiplied by\r\n * -1.\r\n *\r\n */\r\nP.negated = P.neg = function () {\r\n  var x = new this.constructor(this);\r\n  x.s = -x.s;\r\n  return finalise(x);\r\n};\r\n\r\n\r\n/*\r\n *  n + 0 = n\r\n *  n + N = N\r\n *  n + I = I\r\n *  0 + n = n\r\n *  0 + 0 = 0\r\n *  0 + N = N\r\n *  0 + I = I\r\n *  N + n = N\r\n *  N + 0 = N\r\n *  N + N = N\r\n *  N + I = N\r\n *  I + n = I\r\n *  I + 0 = I\r\n *  I + N = N\r\n *  I + I = I\r\n *\r\n * Return a new Decimal whose value is the value of this Decimal plus `y`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.plus = P.add = function (y) {\r\n  var carry, d, e, i, k, len, pr, rm, xd, yd,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  y = new Ctor(y);\r\n\r\n  // If either is not finite...\r\n  if (!x.d || !y.d) {\r\n\r\n    // Return NaN if either is NaN.\r\n    if (!x.s || !y.s) y = new Ctor(NaN);\r\n\r\n    // Return x if y is finite and x is ±Infinity.\r\n    // Return x if both are ±Infinity with the same sign.\r\n    // Return NaN if both are ±Infinity with different signs.\r\n    // Return y if x is finite and y is ±Infinity.\r\n    else if (!x.d) y = new Ctor(y.d || x.s === y.s ? x : NaN);\r\n\r\n    return y;\r\n  }\r\n\r\n   // If signs differ...\r\n  if (x.s != y.s) {\r\n    y.s = -y.s;\r\n    return x.minus(y);\r\n  }\r\n\r\n  xd = x.d;\r\n  yd = y.d;\r\n  pr = Ctor.precision;\r\n  rm = Ctor.rounding;\r\n\r\n  // If either is zero...\r\n  if (!xd[0] || !yd[0]) {\r\n\r\n    // Return x if y is zero.\r\n    // Return y if y is non-zero.\r\n    if (!yd[0]) y = new Ctor(x);\r\n\r\n    return external ? finalise(y, pr, rm) : y;\r\n  }\r\n\r\n  // x and y are finite, non-zero numbers with the same sign.\r\n\r\n  // Calculate base 1e7 exponents.\r\n  k = mathfloor(x.e / LOG_BASE);\r\n  e = mathfloor(y.e / LOG_BASE);\r\n\r\n  xd = xd.slice();\r\n  i = k - e;\r\n\r\n  // If base 1e7 exponents differ...\r\n  if (i) {\r\n\r\n    if (i < 0) {\r\n      d = xd;\r\n      i = -i;\r\n      len = yd.length;\r\n    } else {\r\n      d = yd;\r\n      e = k;\r\n      len = xd.length;\r\n    }\r\n\r\n    // Limit number of zeros prepended to max(ceil(pr / LOG_BASE), len) + 1.\r\n    k = Math.ceil(pr / LOG_BASE);\r\n    len = k > len ? k + 1 : len + 1;\r\n\r\n    if (i > len) {\r\n      i = len;\r\n      d.length = 1;\r\n    }\r\n\r\n    // Prepend zeros to equalise exponents. Note: Faster to use reverse then do unshifts.\r\n    d.reverse();\r\n    for (; i--;) d.push(0);\r\n    d.reverse();\r\n  }\r\n\r\n  len = xd.length;\r\n  i = yd.length;\r\n\r\n  // If yd is longer than xd, swap xd and yd so xd points to the longer array.\r\n  if (len - i < 0) {\r\n    i = len;\r\n    d = yd;\r\n    yd = xd;\r\n    xd = d;\r\n  }\r\n\r\n  // Only start adding at yd.length - 1 as the further digits of xd can be left as they are.\r\n  for (carry = 0; i;) {\r\n    carry = (xd[--i] = xd[i] + yd[i] + carry) / BASE | 0;\r\n    xd[i] %= BASE;\r\n  }\r\n\r\n  if (carry) {\r\n    xd.unshift(carry);\r\n    ++e;\r\n  }\r\n\r\n  // Remove trailing zeros.\r\n  // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n  for (len = xd.length; xd[--len] == 0;) xd.pop();\r\n\r\n  y.d = xd;\r\n  y.e = getBase10Exponent(xd, e);\r\n\r\n  return external ? finalise(y, pr, rm) : y;\r\n};\r\n\r\n\r\n/*\r\n * Return the number of significant digits of the value of this Decimal.\r\n *\r\n * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0.\r\n *\r\n */\r\nP.precision = P.sd = function (z) {\r\n  var k,\r\n    x = this;\r\n\r\n  if (z !== void 0 && z !== !!z && z !== 1 && z !== 0) throw Error(invalidArgument + z);\r\n\r\n  if (x.d) {\r\n    k = getPrecision(x.d);\r\n    if (z && x.e + 1 > k) k = x.e + 1;\r\n  } else {\r\n    k = NaN;\r\n  }\r\n\r\n  return k;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a whole number using\r\n * rounding mode `rounding`.\r\n *\r\n */\r\nP.round = function () {\r\n  var x = this,\r\n    Ctor = x.constructor;\r\n\r\n  return finalise(new Ctor(x), x.e + 1, Ctor.rounding);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the sine of the value in radians of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-1, 1]\r\n *\r\n * sin(x) = x - x^3/3! + x^5/5! - ...\r\n *\r\n * sin(0)         = 0\r\n * sin(-0)        = -0\r\n * sin(Infinity)  = NaN\r\n * sin(-Infinity) = NaN\r\n * sin(NaN)       = NaN\r\n *\r\n */\r\nP.sine = P.sin = function () {\r\n  var pr, rm,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (!x.isFinite()) return new Ctor(NaN);\r\n  if (x.isZero()) return new Ctor(x);\r\n\r\n  pr = Ctor.precision;\r\n  rm = Ctor.rounding;\r\n  Ctor.precision = pr + Math.max(x.e, x.sd()) + LOG_BASE;\r\n  Ctor.rounding = 1;\r\n\r\n  x = sine(Ctor, toLessThanHalfPi(Ctor, x));\r\n\r\n  Ctor.precision = pr;\r\n  Ctor.rounding = rm;\r\n\r\n  return finalise(quadrant > 2 ? x.neg() : x, pr, rm, true);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the square root of this Decimal, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n *  sqrt(-n) =  N\r\n *  sqrt(N)  =  N\r\n *  sqrt(-I) =  N\r\n *  sqrt(I)  =  I\r\n *  sqrt(0)  =  0\r\n *  sqrt(-0) = -0\r\n *\r\n */\r\nP.squareRoot = P.sqrt = function () {\r\n  var m, n, sd, r, rep, t,\r\n    x = this,\r\n    d = x.d,\r\n    e = x.e,\r\n    s = x.s,\r\n    Ctor = x.constructor;\r\n\r\n  // Negative/NaN/Infinity/zero?\r\n  if (s !== 1 || !d || !d[0]) {\r\n    return new Ctor(!s || s < 0 && (!d || d[0]) ? NaN : d ? x : 1 / 0);\r\n  }\r\n\r\n  external = false;\r\n\r\n  // Initial estimate.\r\n  s = Math.sqrt(+x);\r\n\r\n  // Math.sqrt underflow/overflow?\r\n  // Pass x to Math.sqrt as integer, then adjust the exponent of the result.\r\n  if (s == 0 || s == 1 / 0) {\r\n    n = digitsToString(d);\r\n\r\n    if ((n.length + e) % 2 == 0) n += '0';\r\n    s = Math.sqrt(n);\r\n    e = mathfloor((e + 1) / 2) - (e < 0 || e % 2);\r\n\r\n    if (s == 1 / 0) {\r\n      n = '5e' + e;\r\n    } else {\r\n      n = s.toExponential();\r\n      n = n.slice(0, n.indexOf('e') + 1) + e;\r\n    }\r\n\r\n    r = new Ctor(n);\r\n  } else {\r\n    r = new Ctor(s.toString());\r\n  }\r\n\r\n  sd = (e = Ctor.precision) + 3;\r\n\r\n  // Newton-Raphson iteration.\r\n  for (;;) {\r\n    t = r;\r\n    r = t.plus(divide(x, t, sd + 2, 1)).times(0.5);\r\n\r\n    // TODO? Replace with for-loop and checkRoundingDigits.\r\n    if (digitsToString(t.d).slice(0, sd) === (n = digitsToString(r.d)).slice(0, sd)) {\r\n      n = n.slice(sd - 3, sd + 1);\r\n\r\n      // The 4th rounding digit may be in error by -1 so if the 4 rounding digits are 9999 or\r\n      // 4999, i.e. approaching a rounding boundary, continue the iteration.\r\n      if (n == '9999' || !rep && n == '4999') {\r\n\r\n        // On the first iteration only, check to see if rounding up gives the exact result as the\r\n        // nines may infinitely repeat.\r\n        if (!rep) {\r\n          finalise(t, e + 1, 0);\r\n\r\n          if (t.times(t).eq(x)) {\r\n            r = t;\r\n            break;\r\n          }\r\n        }\r\n\r\n        sd += 4;\r\n        rep = 1;\r\n      } else {\r\n\r\n        // If the rounding digits are null, 0{0,4} or 50{0,3}, check for an exact result.\r\n        // If not, then there are further digits and m will be truthy.\r\n        if (!+n || !+n.slice(1) && n.charAt(0) == '5') {\r\n\r\n          // Truncate to the first rounding digit.\r\n          finalise(r, e + 1, 1);\r\n          m = !r.times(r).eq(x);\r\n        }\r\n\r\n        break;\r\n      }\r\n    }\r\n  }\r\n\r\n  external = true;\r\n\r\n  return finalise(r, e, Ctor.rounding, m);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the tangent of the value in radians of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-Infinity, Infinity]\r\n *\r\n * tan(0)         = 0\r\n * tan(-0)        = -0\r\n * tan(Infinity)  = NaN\r\n * tan(-Infinity) = NaN\r\n * tan(NaN)       = NaN\r\n *\r\n */\r\nP.tangent = P.tan = function () {\r\n  var pr, rm,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (!x.isFinite()) return new Ctor(NaN);\r\n  if (x.isZero()) return new Ctor(x);\r\n\r\n  pr = Ctor.precision;\r\n  rm = Ctor.rounding;\r\n  Ctor.precision = pr + 10;\r\n  Ctor.rounding = 1;\r\n\r\n  x = x.sin();\r\n  x.s = 1;\r\n  x = divide(x, new Ctor(1).minus(x.times(x)).sqrt(), pr + 10, 0);\r\n\r\n  Ctor.precision = pr;\r\n  Ctor.rounding = rm;\r\n\r\n  return finalise(quadrant == 2 || quadrant == 4 ? x.neg() : x, pr, rm, true);\r\n};\r\n\r\n\r\n/*\r\n *  n * 0 = 0\r\n *  n * N = N\r\n *  n * I = I\r\n *  0 * n = 0\r\n *  0 * 0 = 0\r\n *  0 * N = N\r\n *  0 * I = N\r\n *  N * n = N\r\n *  N * 0 = N\r\n *  N * N = N\r\n *  N * I = N\r\n *  I * n = I\r\n *  I * 0 = N\r\n *  I * N = N\r\n *  I * I = I\r\n *\r\n * Return a new Decimal whose value is this Decimal times `y`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.times = P.mul = function (y) {\r\n  var carry, e, i, k, r, rL, t, xdL, ydL,\r\n    x = this,\r\n    Ctor = x.constructor,\r\n    xd = x.d,\r\n    yd = (y = new Ctor(y)).d;\r\n\r\n  y.s *= x.s;\r\n\r\n   // If either is NaN, ±Infinity or ±0...\r\n  if (!xd || !xd[0] || !yd || !yd[0]) {\r\n\r\n    return new Ctor(!y.s || xd && !xd[0] && !yd || yd && !yd[0] && !xd\r\n\r\n      // Return NaN if either is NaN.\r\n      // Return NaN if x is ±0 and y is ±Infinity, or y is ±0 and x is ±Infinity.\r\n      ? NaN\r\n\r\n      // Return ±Infinity if either is ±Infinity.\r\n      // Return ±0 if either is ±0.\r\n      : !xd || !yd ? y.s / 0 : y.s * 0);\r\n  }\r\n\r\n  e = mathfloor(x.e / LOG_BASE) + mathfloor(y.e / LOG_BASE);\r\n  xdL = xd.length;\r\n  ydL = yd.length;\r\n\r\n  // Ensure xd points to the longer array.\r\n  if (xdL < ydL) {\r\n    r = xd;\r\n    xd = yd;\r\n    yd = r;\r\n    rL = xdL;\r\n    xdL = ydL;\r\n    ydL = rL;\r\n  }\r\n\r\n  // Initialise the result array with zeros.\r\n  r = [];\r\n  rL = xdL + ydL;\r\n  for (i = rL; i--;) r.push(0);\r\n\r\n  // Multiply!\r\n  for (i = ydL; --i >= 0;) {\r\n    carry = 0;\r\n    for (k = xdL + i; k > i;) {\r\n      t = r[k] + yd[i] * xd[k - i - 1] + carry;\r\n      r[k--] = t % BASE | 0;\r\n      carry = t / BASE | 0;\r\n    }\r\n\r\n    r[k] = (r[k] + carry) % BASE | 0;\r\n  }\r\n\r\n  // Remove trailing zeros.\r\n  for (; !r[--rL];) r.pop();\r\n\r\n  if (carry) ++e;\r\n  else r.shift();\r\n\r\n  y.d = r;\r\n  y.e = getBase10Exponent(r, e);\r\n\r\n  return external ? finalise(y, Ctor.precision, Ctor.rounding) : y;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in base 2, round to `sd` significant\r\n * digits using rounding mode `rm`.\r\n *\r\n * If the optional `sd` argument is present then return binary exponential notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toBinary = function (sd, rm) {\r\n  return toStringBinary(this, 2, sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `dp`\r\n * decimal places using rounding mode `rm` or `rounding` if `rm` is omitted.\r\n *\r\n * If `dp` is omitted, return a new Decimal whose value is the value of this Decimal.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toDecimalPlaces = P.toDP = function (dp, rm) {\r\n  var x = this,\r\n    Ctor = x.constructor;\r\n\r\n  x = new Ctor(x);\r\n  if (dp === void 0) return x;\r\n\r\n  checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n  if (rm === void 0) rm = Ctor.rounding;\r\n  else checkInt32(rm, 0, 8);\r\n\r\n  return finalise(x, dp + x.e + 1, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in exponential notation rounded to\r\n * `dp` fixed decimal places using rounding mode `rounding`.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toExponential = function (dp, rm) {\r\n  var str,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (dp === void 0) {\r\n    str = finiteToString(x, true);\r\n  } else {\r\n    checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n    if (rm === void 0) rm = Ctor.rounding;\r\n    else checkInt32(rm, 0, 8);\r\n\r\n    x = finalise(new Ctor(x), dp + 1, rm);\r\n    str = finiteToString(x, true, dp + 1);\r\n  }\r\n\r\n  return x.isNeg() && !x.isZero() ? '-' + str : str;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in normal (fixed-point) notation to\r\n * `dp` fixed decimal places and rounded using rounding mode `rm` or `rounding` if `rm` is\r\n * omitted.\r\n *\r\n * As with JavaScript numbers, (-0).toFixed(0) is '0', but e.g. (-0.00001).toFixed(0) is '-0'.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.\r\n * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.\r\n * (-0).toFixed(3) is '0.000'.\r\n * (-0.5).toFixed(0) is '-0'.\r\n *\r\n */\r\nP.toFixed = function (dp, rm) {\r\n  var str, y,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (dp === void 0) {\r\n    str = finiteToString(x);\r\n  } else {\r\n    checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n    if (rm === void 0) rm = Ctor.rounding;\r\n    else checkInt32(rm, 0, 8);\r\n\r\n    y = finalise(new Ctor(x), dp + x.e + 1, rm);\r\n    str = finiteToString(y, false, dp + y.e + 1);\r\n  }\r\n\r\n  // To determine whether to add the minus sign look at the value before it was rounded,\r\n  // i.e. look at `x` rather than `y`.\r\n  return x.isNeg() && !x.isZero() ? '-' + str : str;\r\n};\r\n\r\n\r\n/*\r\n * Return an array representing the value of this Decimal as a simple fraction with an integer\r\n * numerator and an integer denominator.\r\n *\r\n * The denominator will be a positive non-zero value less than or equal to the specified maximum\r\n * denominator. If a maximum denominator is not specified, the denominator will be the lowest\r\n * value necessary to represent the number exactly.\r\n *\r\n * [maxD] {number|string|Decimal} Maximum denominator. Integer >= 1 and < Infinity.\r\n *\r\n */\r\nP.toFraction = function (maxD) {\r\n  var d, d0, d1, d2, e, k, n, n0, n1, pr, q, r,\r\n    x = this,\r\n    xd = x.d,\r\n    Ctor = x.constructor;\r\n\r\n  if (!xd) return new Ctor(x);\r\n\r\n  n1 = d0 = new Ctor(1);\r\n  d1 = n0 = new Ctor(0);\r\n\r\n  d = new Ctor(d1);\r\n  e = d.e = getPrecision(xd) - x.e - 1;\r\n  k = e % LOG_BASE;\r\n  d.d[0] = mathpow(10, k < 0 ? LOG_BASE + k : k);\r\n\r\n  if (maxD == null) {\r\n\r\n    // d is 10**e, the minimum max-denominator needed.\r\n    maxD = e > 0 ? d : n1;\r\n  } else {\r\n    n = new Ctor(maxD);\r\n    if (!n.isInt() || n.lt(n1)) throw Error(invalidArgument + n);\r\n    maxD = n.gt(d) ? (e > 0 ? d : n1) : n;\r\n  }\r\n\r\n  external = false;\r\n  n = new Ctor(digitsToString(xd));\r\n  pr = Ctor.precision;\r\n  Ctor.precision = e = xd.length * LOG_BASE * 2;\r\n\r\n  for (;;)  {\r\n    q = divide(n, d, 0, 1, 1);\r\n    d2 = d0.plus(q.times(d1));\r\n    if (d2.cmp(maxD) == 1) break;\r\n    d0 = d1;\r\n    d1 = d2;\r\n    d2 = n1;\r\n    n1 = n0.plus(q.times(d2));\r\n    n0 = d2;\r\n    d2 = d;\r\n    d = n.minus(q.times(d2));\r\n    n = d2;\r\n  }\r\n\r\n  d2 = divide(maxD.minus(d0), d1, 0, 1, 1);\r\n  n0 = n0.plus(d2.times(n1));\r\n  d0 = d0.plus(d2.times(d1));\r\n  n0.s = n1.s = x.s;\r\n\r\n  // Determine which fraction is closer to x, n0/d0 or n1/d1?\r\n  r = divide(n1, d1, e, 1).minus(x).abs().cmp(divide(n0, d0, e, 1).minus(x).abs()) < 1\r\n      ? [n1, d1] : [n0, d0];\r\n\r\n  Ctor.precision = pr;\r\n  external = true;\r\n\r\n  return r;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in base 16, round to `sd` significant\r\n * digits using rounding mode `rm`.\r\n *\r\n * If the optional `sd` argument is present then return binary exponential notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toHexadecimal = P.toHex = function (sd, rm) {\r\n  return toStringBinary(this, 16, sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Returns a new Decimal whose value is the nearest multiple of `y` in the direction of rounding\r\n * mode `rm`, or `Decimal.rounding` if `rm` is omitted, to the value of this Decimal.\r\n *\r\n * The return value will always have the same sign as this Decimal, unless either this Decimal\r\n * or `y` is NaN, in which case the return value will be also be NaN.\r\n *\r\n * The return value is not affected by the value of `precision`.\r\n *\r\n * y {number|string|Decimal} The magnitude to round to a multiple of.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * 'toNearest() rounding mode not an integer: {rm}'\r\n * 'toNearest() rounding mode out of range: {rm}'\r\n *\r\n */\r\nP.toNearest = function (y, rm) {\r\n  var x = this,\r\n    Ctor = x.constructor;\r\n\r\n  x = new Ctor(x);\r\n\r\n  if (y == null) {\r\n\r\n    // If x is not finite, return x.\r\n    if (!x.d) return x;\r\n\r\n    y = new Ctor(1);\r\n    rm = Ctor.rounding;\r\n  } else {\r\n    y = new Ctor(y);\r\n    if (rm === void 0) {\r\n      rm = Ctor.rounding;\r\n    } else {\r\n      checkInt32(rm, 0, 8);\r\n    }\r\n\r\n    // If x is not finite, return x if y is not NaN, else NaN.\r\n    if (!x.d) return y.s ? x : y;\r\n\r\n    // If y is not finite, return Infinity with the sign of x if y is Infinity, else NaN.\r\n    if (!y.d) {\r\n      if (y.s) y.s = x.s;\r\n      return y;\r\n    }\r\n  }\r\n\r\n  // If y is not zero, calculate the nearest multiple of y to x.\r\n  if (y.d[0]) {\r\n    external = false;\r\n    x = divide(x, y, 0, rm, 1).times(y);\r\n    external = true;\r\n    finalise(x);\r\n\r\n  // If y is zero, return zero with the sign of x.\r\n  } else {\r\n    y.s = x.s;\r\n    x = y;\r\n  }\r\n\r\n  return x;\r\n};\r\n\r\n\r\n/*\r\n * Return the value of this Decimal converted to a number primitive.\r\n * Zero keeps its sign.\r\n *\r\n */\r\nP.toNumber = function () {\r\n  return +this;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in base 8, round to `sd` significant\r\n * digits using rounding mode `rm`.\r\n *\r\n * If the optional `sd` argument is present then return binary exponential notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toOctal = function (sd, rm) {\r\n  return toStringBinary(this, 8, sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal raised to the power `y`, rounded\r\n * to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * ECMAScript compliant.\r\n *\r\n *   pow(x, NaN)                           = NaN\r\n *   pow(x, ±0)                            = 1\r\n\r\n *   pow(NaN, non-zero)                    = NaN\r\n *   pow(abs(x) > 1, +Infinity)            = +Infinity\r\n *   pow(abs(x) > 1, -Infinity)            = +0\r\n *   pow(abs(x) == 1, ±Infinity)           = NaN\r\n *   pow(abs(x) < 1, +Infinity)            = +0\r\n *   pow(abs(x) < 1, -Infinity)            = +Infinity\r\n *   pow(+Infinity, y > 0)                 = +Infinity\r\n *   pow(+Infinity, y < 0)                 = +0\r\n *   pow(-Infinity, odd integer > 0)       = -Infinity\r\n *   pow(-Infinity, even integer > 0)      = +Infinity\r\n *   pow(-Infinity, odd integer < 0)       = -0\r\n *   pow(-Infinity, even integer < 0)      = +0\r\n *   pow(+0, y > 0)                        = +0\r\n *   pow(+0, y < 0)                        = +Infinity\r\n *   pow(-0, odd integer > 0)              = -0\r\n *   pow(-0, even integer > 0)             = +0\r\n *   pow(-0, odd integer < 0)              = -Infinity\r\n *   pow(-0, even integer < 0)             = +Infinity\r\n *   pow(finite x < 0, finite non-integer) = NaN\r\n *\r\n * For non-integer or very large exponents pow(x, y) is calculated using\r\n *\r\n *   x^y = exp(y*ln(x))\r\n *\r\n * Assuming the first 15 rounding digits are each equally likely to be any digit 0-9, the\r\n * probability of an incorrectly rounded result\r\n * P([49]9{14} | [50]0{14}) = 2 * 0.2 * 10^-14 = 4e-15 = 1/2.5e+14\r\n * i.e. 1 in 250,000,000,000,000\r\n *\r\n * If a result is incorrectly rounded the maximum error will be 1 ulp (unit in last place).\r\n *\r\n * y {number|string|Decimal} The power to which to raise this Decimal.\r\n *\r\n */\r\nP.toPower = P.pow = function (y) {\r\n  var e, k, pr, r, rm, s,\r\n    x = this,\r\n    Ctor = x.constructor,\r\n    yn = +(y = new Ctor(y));\r\n\r\n  // Either ±Infinity, NaN or ±0?\r\n  if (!x.d || !y.d || !x.d[0] || !y.d[0]) return new Ctor(mathpow(+x, yn));\r\n\r\n  x = new Ctor(x);\r\n\r\n  if (x.eq(1)) return x;\r\n\r\n  pr = Ctor.precision;\r\n  rm = Ctor.rounding;\r\n\r\n  if (y.eq(1)) return finalise(x, pr, rm);\r\n\r\n  // y exponent\r\n  e = mathfloor(y.e / LOG_BASE);\r\n\r\n  // If y is a small integer use the 'exponentiation by squaring' algorithm.\r\n  if (e >= y.d.length - 1 && (k = yn < 0 ? -yn : yn) <= MAX_SAFE_INTEGER) {\r\n    r = intPow(Ctor, x, k, pr);\r\n    return y.s < 0 ? new Ctor(1).div(r) : finalise(r, pr, rm);\r\n  }\r\n\r\n  s = x.s;\r\n\r\n  // if x is negative\r\n  if (s < 0) {\r\n\r\n    // if y is not an integer\r\n    if (e < y.d.length - 1) return new Ctor(NaN);\r\n\r\n    // Result is positive if x is negative and the last digit of integer y is even.\r\n    if ((y.d[e] & 1) == 0) s = 1;\r\n\r\n    // if x.eq(-1)\r\n    if (x.e == 0 && x.d[0] == 1 && x.d.length == 1) {\r\n      x.s = s;\r\n      return x;\r\n    }\r\n  }\r\n\r\n  // Estimate result exponent.\r\n  // x^y = 10^e,  where e = y * log10(x)\r\n  // log10(x) = log10(x_significand) + x_exponent\r\n  // log10(x_significand) = ln(x_significand) / ln(10)\r\n  k = mathpow(+x, yn);\r\n  e = k == 0 || !isFinite(k)\r\n    ? mathfloor(yn * (Math.log('0.' + digitsToString(x.d)) / Math.LN10 + x.e + 1))\r\n    : new Ctor(k + '').e;\r\n\r\n  // Exponent estimate may be incorrect e.g. x: 0.999999999999999999, y: 2.29, e: 0, r.e: -1.\r\n\r\n  // Overflow/underflow?\r\n  if (e > Ctor.maxE + 1 || e < Ctor.minE - 1) return new Ctor(e > 0 ? s / 0 : 0);\r\n\r\n  external = false;\r\n  Ctor.rounding = x.s = 1;\r\n\r\n  // Estimate the extra guard digits needed to ensure five correct rounding digits from\r\n  // naturalLogarithm(x). Example of failure without these extra digits (precision: 10):\r\n  // new Decimal(2.32456).pow('2087987436534566.46411')\r\n  // should be 1.162377823e+764914905173815, but is 1.162355823e+764914905173815\r\n  k = Math.min(12, (e + '').length);\r\n\r\n  // r = x^y = exp(y*ln(x))\r\n  r = naturalExponential(y.times(naturalLogarithm(x, pr + k)), pr);\r\n\r\n  // r may be Infinity, e.g. (0.9999999999999999).pow(-1e+40)\r\n  if (r.d) {\r\n\r\n    // Truncate to the required precision plus five rounding digits.\r\n    r = finalise(r, pr + 5, 1);\r\n\r\n    // If the rounding digits are [49]9999 or [50]0000 increase the precision by 10 and recalculate\r\n    // the result.\r\n    if (checkRoundingDigits(r.d, pr, rm)) {\r\n      e = pr + 10;\r\n\r\n      // Truncate to the increased precision plus five rounding digits.\r\n      r = finalise(naturalExponential(y.times(naturalLogarithm(x, e + k)), e), e + 5, 1);\r\n\r\n      // Check for 14 nines from the 2nd rounding digit (the first rounding digit may be 4 or 9).\r\n      if (+digitsToString(r.d).slice(pr + 1, pr + 15) + 1 == 1e14) {\r\n        r = finalise(r, pr + 1, 0);\r\n      }\r\n    }\r\n  }\r\n\r\n  r.s = s;\r\n  external = true;\r\n  Ctor.rounding = rm;\r\n\r\n  return finalise(r, pr, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal rounded to `sd` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * Return exponential notation if `sd` is less than the number of digits necessary to represent\r\n * the integer part of the value in normal notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toPrecision = function (sd, rm) {\r\n  var str,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (sd === void 0) {\r\n    str = finiteToString(x, x.e <= Ctor.toExpNeg || x.e >= Ctor.toExpPos);\r\n  } else {\r\n    checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n    if (rm === void 0) rm = Ctor.rounding;\r\n    else checkInt32(rm, 0, 8);\r\n\r\n    x = finalise(new Ctor(x), sd, rm);\r\n    str = finiteToString(x, sd <= x.e || x.e <= Ctor.toExpNeg, sd);\r\n  }\r\n\r\n  return x.isNeg() && !x.isZero() ? '-' + str : str;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `sd`\r\n * significant digits using rounding mode `rm`, or to `precision` and `rounding` respectively if\r\n * omitted.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * 'toSD() digits out of range: {sd}'\r\n * 'toSD() digits not an integer: {sd}'\r\n * 'toSD() rounding mode not an integer: {rm}'\r\n * 'toSD() rounding mode out of range: {rm}'\r\n *\r\n */\r\nP.toSignificantDigits = P.toSD = function (sd, rm) {\r\n  var x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (sd === void 0) {\r\n    sd = Ctor.precision;\r\n    rm = Ctor.rounding;\r\n  } else {\r\n    checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n    if (rm === void 0) rm = Ctor.rounding;\r\n    else checkInt32(rm, 0, 8);\r\n  }\r\n\r\n  return finalise(new Ctor(x), sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal.\r\n *\r\n * Return exponential notation if this Decimal has a positive exponent equal to or greater than\r\n * `toExpPos`, or a negative exponent equal to or less than `toExpNeg`.\r\n *\r\n */\r\nP.toString = function () {\r\n  var x = this,\r\n    Ctor = x.constructor,\r\n    str = finiteToString(x, x.e <= Ctor.toExpNeg || x.e >= Ctor.toExpPos);\r\n\r\n  return x.isNeg() && !x.isZero() ? '-' + str : str;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal truncated to a whole number.\r\n *\r\n */\r\nP.truncated = P.trunc = function () {\r\n  return finalise(new this.constructor(this), this.e + 1, 1);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal.\r\n * Unlike `toString`, negative zero will include the minus sign.\r\n *\r\n */\r\nP.valueOf = P.toJSON = function () {\r\n  var x = this,\r\n    Ctor = x.constructor,\r\n    str = finiteToString(x, x.e <= Ctor.toExpNeg || x.e >= Ctor.toExpPos);\r\n\r\n  return x.isNeg() ? '-' + str : str;\r\n};\r\n\r\n\r\n// Helper functions for Decimal.prototype (P) and/or Decimal methods, and their callers.\r\n\r\n\r\n/*\r\n *  digitsToString           P.cubeRoot, P.logarithm, P.squareRoot, P.toFraction, P.toPower,\r\n *                           finiteToString, naturalExponential, naturalLogarithm\r\n *  checkInt32               P.toDecimalPlaces, P.toExponential, P.toFixed, P.toNearest,\r\n *                           P.toPrecision, P.toSignificantDigits, toStringBinary, random\r\n *  checkRoundingDigits      P.logarithm, P.toPower, naturalExponential, naturalLogarithm\r\n *  convertBase              toStringBinary, parseOther\r\n *  cos                      P.cos\r\n *  divide                   P.atanh, P.cubeRoot, P.dividedBy, P.dividedToIntegerBy,\r\n *                           P.logarithm, P.modulo, P.squareRoot, P.tan, P.tanh, P.toFraction,\r\n *                           P.toNearest, toStringBinary, naturalExponential, naturalLogarithm,\r\n *                           taylorSeries, atan2, parseOther\r\n *  finalise                 P.absoluteValue, P.atan, P.atanh, P.ceil, P.cos, P.cosh,\r\n *                           P.cubeRoot, P.dividedToIntegerBy, P.floor, P.logarithm, P.minus,\r\n *                           P.modulo, P.negated, P.plus, P.round, P.sin, P.sinh, P.squareRoot,\r\n *                           P.tan, P.times, P.toDecimalPlaces, P.toExponential, P.toFixed,\r\n *                           P.toNearest, P.toPower, P.toPrecision, P.toSignificantDigits,\r\n *                           P.truncated, divide, getLn10, getPi, naturalExponential,\r\n *                           naturalLogarithm, ceil, floor, round, trunc\r\n *  finiteToString           P.toExponential, P.toFixed, P.toPrecision, P.toString, P.valueOf,\r\n *                           toStringBinary\r\n *  getBase10Exponent        P.minus, P.plus, P.times, parseOther\r\n *  getLn10                  P.logarithm, naturalLogarithm\r\n *  getPi                    P.acos, P.asin, P.atan, toLessThanHalfPi, atan2\r\n *  getPrecision             P.precision, P.toFraction\r\n *  getZeroString            digitsToString, finiteToString\r\n *  intPow                   P.toPower, parseOther\r\n *  isOdd                    toLessThanHalfPi\r\n *  maxOrMin                 max, min\r\n *  naturalExponential       P.naturalExponential, P.toPower\r\n *  naturalLogarithm         P.acosh, P.asinh, P.atanh, P.logarithm, P.naturalLogarithm,\r\n *                           P.toPower, naturalExponential\r\n *  nonFiniteToString        finiteToString, toStringBinary\r\n *  parseDecimal             Decimal\r\n *  parseOther               Decimal\r\n *  sin                      P.sin\r\n *  taylorSeries             P.cosh, P.sinh, cos, sin\r\n *  toLessThanHalfPi         P.cos, P.sin\r\n *  toStringBinary           P.toBinary, P.toHexadecimal, P.toOctal\r\n *  truncate                 intPow\r\n *\r\n *  Throws:                  P.logarithm, P.precision, P.toFraction, checkInt32, getLn10, getPi,\r\n *                           naturalLogarithm, config, parseOther, random, Decimal\r\n */\r\n\r\n\r\nfunction digitsToString(d) {\r\n  var i, k, ws,\r\n    indexOfLastWord = d.length - 1,\r\n    str = '',\r\n    w = d[0];\r\n\r\n  if (indexOfLastWord > 0) {\r\n    str += w;\r\n    for (i = 1; i < indexOfLastWord; i++) {\r\n      ws = d[i] + '';\r\n      k = LOG_BASE - ws.length;\r\n      if (k) str += getZeroString(k);\r\n      str += ws;\r\n    }\r\n\r\n    w = d[i];\r\n    ws = w + '';\r\n    k = LOG_BASE - ws.length;\r\n    if (k) str += getZeroString(k);\r\n  } else if (w === 0) {\r\n    return '0';\r\n  }\r\n\r\n  // Remove trailing zeros of last w.\r\n  for (; w % 10 === 0;) w /= 10;\r\n\r\n  return str + w;\r\n}\r\n\r\n\r\nfunction checkInt32(i, min, max) {\r\n  if (i !== ~~i || i < min || i > max) {\r\n    throw Error(invalidArgument + i);\r\n  }\r\n}\r\n\r\n\r\n/*\r\n * Check 5 rounding digits if `repeating` is null, 4 otherwise.\r\n * `repeating == null` if caller is `log` or `pow`,\r\n * `repeating != null` if caller is `naturalLogarithm` or `naturalExponential`.\r\n */\r\nfunction checkRoundingDigits(d, i, rm, repeating) {\r\n  var di, k, r, rd;\r\n\r\n  // Get the length of the first word of the array d.\r\n  for (k = d[0]; k >= 10; k /= 10) --i;\r\n\r\n  // Is the rounding digit in the first word of d?\r\n  if (--i < 0) {\r\n    i += LOG_BASE;\r\n    di = 0;\r\n  } else {\r\n    di = Math.ceil((i + 1) / LOG_BASE);\r\n    i %= LOG_BASE;\r\n  }\r\n\r\n  // i is the index (0 - 6) of the rounding digit.\r\n  // E.g. if within the word 3487563 the first rounding digit is 5,\r\n  // then i = 4, k = 1000, rd = 3487563 % 1000 = 563\r\n  k = mathpow(10, LOG_BASE - i);\r\n  rd = d[di] % k | 0;\r\n\r\n  if (repeating == null) {\r\n    if (i < 3) {\r\n      if (i == 0) rd = rd / 100 | 0;\r\n      else if (i == 1) rd = rd / 10 | 0;\r\n      r = rm < 4 && rd == 99999 || rm > 3 && rd == 49999 || rd == 50000 || rd == 0;\r\n    } else {\r\n      r = (rm < 4 && rd + 1 == k || rm > 3 && rd + 1 == k / 2) &&\r\n        (d[di + 1] / k / 100 | 0) == mathpow(10, i - 2) - 1 ||\r\n          (rd == k / 2 || rd == 0) && (d[di + 1] / k / 100 | 0) == 0;\r\n    }\r\n  } else {\r\n    if (i < 4) {\r\n      if (i == 0) rd = rd / 1000 | 0;\r\n      else if (i == 1) rd = rd / 100 | 0;\r\n      else if (i == 2) rd = rd / 10 | 0;\r\n      r = (repeating || rm < 4) && rd == 9999 || !repeating && rm > 3 && rd == 4999;\r\n    } else {\r\n      r = ((repeating || rm < 4) && rd + 1 == k ||\r\n      (!repeating && rm > 3) && rd + 1 == k / 2) &&\r\n        (d[di + 1] / k / 1000 | 0) == mathpow(10, i - 3) - 1;\r\n    }\r\n  }\r\n\r\n  return r;\r\n}\r\n\r\n\r\n// Convert string of `baseIn` to an array of numbers of `baseOut`.\r\n// Eg. convertBase('255', 10, 16) returns [15, 15].\r\n// Eg. convertBase('ff', 16, 10) returns [2, 5, 5].\r\nfunction convertBase(str, baseIn, baseOut) {\r\n  var j,\r\n    arr = [0],\r\n    arrL,\r\n    i = 0,\r\n    strL = str.length;\r\n\r\n  for (; i < strL;) {\r\n    for (arrL = arr.length; arrL--;) arr[arrL] *= baseIn;\r\n    arr[0] += NUMERALS.indexOf(str.charAt(i++));\r\n    for (j = 0; j < arr.length; j++) {\r\n      if (arr[j] > baseOut - 1) {\r\n        if (arr[j + 1] === void 0) arr[j + 1] = 0;\r\n        arr[j + 1] += arr[j] / baseOut | 0;\r\n        arr[j] %= baseOut;\r\n      }\r\n    }\r\n  }\r\n\r\n  return arr.reverse();\r\n}\r\n\r\n\r\n/*\r\n * cos(x) = 1 - x^2/2! + x^4/4! - ...\r\n * |x| < pi/2\r\n *\r\n */\r\nfunction cosine(Ctor, x) {\r\n  var k, len, y;\r\n\r\n  if (x.isZero()) return x;\r\n\r\n  // Argument reduction: cos(4x) = 8*(cos^4(x) - cos^2(x)) + 1\r\n  // i.e. cos(x) = 8*(cos^4(x/4) - cos^2(x/4)) + 1\r\n\r\n  // Estimate the optimum number of times to use the argument reduction.\r\n  len = x.d.length;\r\n  if (len < 32) {\r\n    k = Math.ceil(len / 3);\r\n    y = (1 / tinyPow(4, k)).toString();\r\n  } else {\r\n    k = 16;\r\n    y = '2.3283064365386962890625e-10';\r\n  }\r\n\r\n  Ctor.precision += k;\r\n\r\n  x = taylorSeries(Ctor, 1, x.times(y), new Ctor(1));\r\n\r\n  // Reverse argument reduction\r\n  for (var i = k; i--;) {\r\n    var cos2x = x.times(x);\r\n    x = cos2x.times(cos2x).minus(cos2x).times(8).plus(1);\r\n  }\r\n\r\n  Ctor.precision -= k;\r\n\r\n  return x;\r\n}\r\n\r\n\r\n/*\r\n * Perform division in the specified base.\r\n */\r\nvar divide = (function () {\r\n\r\n  // Assumes non-zero x and k, and hence non-zero result.\r\n  function multiplyInteger(x, k, base) {\r\n    var temp,\r\n      carry = 0,\r\n      i = x.length;\r\n\r\n    for (x = x.slice(); i--;) {\r\n      temp = x[i] * k + carry;\r\n      x[i] = temp % base | 0;\r\n      carry = temp / base | 0;\r\n    }\r\n\r\n    if (carry) x.unshift(carry);\r\n\r\n    return x;\r\n  }\r\n\r\n  function compare(a, b, aL, bL) {\r\n    var i, r;\r\n\r\n    if (aL != bL) {\r\n      r = aL > bL ? 1 : -1;\r\n    } else {\r\n      for (i = r = 0; i < aL; i++) {\r\n        if (a[i] != b[i]) {\r\n          r = a[i] > b[i] ? 1 : -1;\r\n          break;\r\n        }\r\n      }\r\n    }\r\n\r\n    return r;\r\n  }\r\n\r\n  function subtract(a, b, aL, base) {\r\n    var i = 0;\r\n\r\n    // Subtract b from a.\r\n    for (; aL--;) {\r\n      a[aL] -= i;\r\n      i = a[aL] < b[aL] ? 1 : 0;\r\n      a[aL] = i * base + a[aL] - b[aL];\r\n    }\r\n\r\n    // Remove leading zeros.\r\n    for (; !a[0] && a.length > 1;) a.shift();\r\n  }\r\n\r\n  return function (x, y, pr, rm, dp, base) {\r\n    var cmp, e, i, k, logBase, more, prod, prodL, q, qd, rem, remL, rem0, sd, t, xi, xL, yd0,\r\n      yL, yz,\r\n      Ctor = x.constructor,\r\n      sign = x.s == y.s ? 1 : -1,\r\n      xd = x.d,\r\n      yd = y.d;\r\n\r\n    // Either NaN, Infinity or 0?\r\n    if (!xd || !xd[0] || !yd || !yd[0]) {\r\n\r\n      return new Ctor(// Return NaN if either NaN, or both Infinity or 0.\r\n        !x.s || !y.s || (xd ? yd && xd[0] == yd[0] : !yd) ? NaN :\r\n\r\n        // Return ±0 if x is 0 or y is ±Infinity, or return ±Infinity as y is 0.\r\n        xd && xd[0] == 0 || !yd ? sign * 0 : sign / 0);\r\n    }\r\n\r\n    if (base) {\r\n      logBase = 1;\r\n      e = x.e - y.e;\r\n    } else {\r\n      base = BASE;\r\n      logBase = LOG_BASE;\r\n      e = mathfloor(x.e / logBase) - mathfloor(y.e / logBase);\r\n    }\r\n\r\n    yL = yd.length;\r\n    xL = xd.length;\r\n    q = new Ctor(sign);\r\n    qd = q.d = [];\r\n\r\n    // Result exponent may be one less than e.\r\n    // The digit array of a Decimal from toStringBinary may have trailing zeros.\r\n    for (i = 0; yd[i] == (xd[i] || 0); i++);\r\n\r\n    if (yd[i] > (xd[i] || 0)) e--;\r\n\r\n    if (pr == null) {\r\n      sd = pr = Ctor.precision;\r\n      rm = Ctor.rounding;\r\n    } else if (dp) {\r\n      sd = pr + (x.e - y.e) + 1;\r\n    } else {\r\n      sd = pr;\r\n    }\r\n\r\n    if (sd < 0) {\r\n      qd.push(1);\r\n      more = true;\r\n    } else {\r\n\r\n      // Convert precision in number of base 10 digits to base 1e7 digits.\r\n      sd = sd / logBase + 2 | 0;\r\n      i = 0;\r\n\r\n      // divisor < 1e7\r\n      if (yL == 1) {\r\n        k = 0;\r\n        yd = yd[0];\r\n        sd++;\r\n\r\n        // k is the carry.\r\n        for (; (i < xL || k) && sd--; i++) {\r\n          t = k * base + (xd[i] || 0);\r\n          qd[i] = t / yd | 0;\r\n          k = t % yd | 0;\r\n        }\r\n\r\n        more = k || i < xL;\r\n\r\n      // divisor >= 1e7\r\n      } else {\r\n\r\n        // Normalise xd and yd so highest order digit of yd is >= base/2\r\n        k = base / (yd[0] + 1) | 0;\r\n\r\n        if (k > 1) {\r\n          yd = multiplyInteger(yd, k, base);\r\n          xd = multiplyInteger(xd, k, base);\r\n          yL = yd.length;\r\n          xL = xd.length;\r\n        }\r\n\r\n        xi = yL;\r\n        rem = xd.slice(0, yL);\r\n        remL = rem.length;\r\n\r\n        // Add zeros to make remainder as long as divisor.\r\n        for (; remL < yL;) rem[remL++] = 0;\r\n\r\n        yz = yd.slice();\r\n        yz.unshift(0);\r\n        yd0 = yd[0];\r\n\r\n        if (yd[1] >= base / 2) ++yd0;\r\n\r\n        do {\r\n          k = 0;\r\n\r\n          // Compare divisor and remainder.\r\n          cmp = compare(yd, rem, yL, remL);\r\n\r\n          // If divisor < remainder.\r\n          if (cmp < 0) {\r\n\r\n            // Calculate trial digit, k.\r\n            rem0 = rem[0];\r\n            if (yL != remL) rem0 = rem0 * base + (rem[1] || 0);\r\n\r\n            // k will be how many times the divisor goes into the current remainder.\r\n            k = rem0 / yd0 | 0;\r\n\r\n            //  Algorithm:\r\n            //  1. product = divisor * trial digit (k)\r\n            //  2. if product > remainder: product -= divisor, k--\r\n            //  3. remainder -= product\r\n            //  4. if product was < remainder at 2:\r\n            //    5. compare new remainder and divisor\r\n            //    6. If remainder > divisor: remainder -= divisor, k++\r\n\r\n            if (k > 1) {\r\n              if (k >= base) k = base - 1;\r\n\r\n              // product = divisor * trial digit.\r\n              prod = multiplyInteger(yd, k, base);\r\n              prodL = prod.length;\r\n              remL = rem.length;\r\n\r\n              // Compare product and remainder.\r\n              cmp = compare(prod, rem, prodL, remL);\r\n\r\n              // product > remainder.\r\n              if (cmp == 1) {\r\n                k--;\r\n\r\n                // Subtract divisor from product.\r\n                subtract(prod, yL < prodL ? yz : yd, prodL, base);\r\n              }\r\n            } else {\r\n\r\n              // cmp is -1.\r\n              // If k is 0, there is no need to compare yd and rem again below, so change cmp to 1\r\n              // to avoid it. If k is 1 there is a need to compare yd and rem again below.\r\n              if (k == 0) cmp = k = 1;\r\n              prod = yd.slice();\r\n            }\r\n\r\n            prodL = prod.length;\r\n            if (prodL < remL) prod.unshift(0);\r\n\r\n            // Subtract product from remainder.\r\n            subtract(rem, prod, remL, base);\r\n\r\n            // If product was < previous remainder.\r\n            if (cmp == -1) {\r\n              remL = rem.length;\r\n\r\n              // Compare divisor and new remainder.\r\n              cmp = compare(yd, rem, yL, remL);\r\n\r\n              // If divisor < new remainder, subtract divisor from remainder.\r\n              if (cmp < 1) {\r\n                k++;\r\n\r\n                // Subtract divisor from remainder.\r\n                subtract(rem, yL < remL ? yz : yd, remL, base);\r\n              }\r\n            }\r\n\r\n            remL = rem.length;\r\n          } else if (cmp === 0) {\r\n            k++;\r\n            rem = [0];\r\n          }    // if cmp === 1, k will be 0\r\n\r\n          // Add the next digit, k, to the result array.\r\n          qd[i++] = k;\r\n\r\n          // Update the remainder.\r\n          if (cmp && rem[0]) {\r\n            rem[remL++] = xd[xi] || 0;\r\n          } else {\r\n            rem = [xd[xi]];\r\n            remL = 1;\r\n          }\r\n\r\n        } while ((xi++ < xL || rem[0] !== void 0) && sd--);\r\n\r\n        more = rem[0] !== void 0;\r\n      }\r\n\r\n      // Leading zero?\r\n      if (!qd[0]) qd.shift();\r\n    }\r\n\r\n    // logBase is 1 when divide is being used for base conversion.\r\n    if (logBase == 1) {\r\n      q.e = e;\r\n      inexact = more;\r\n    } else {\r\n\r\n      // To calculate q.e, first get the number of digits of qd[0].\r\n      for (i = 1, k = qd[0]; k >= 10; k /= 10) i++;\r\n      q.e = i + e * logBase - 1;\r\n\r\n      finalise(q, dp ? pr + q.e + 1 : pr, rm, more);\r\n    }\r\n\r\n    return q;\r\n  };\r\n})();\r\n\r\n\r\n/*\r\n * Round `x` to `sd` significant digits using rounding mode `rm`.\r\n * Check for over/under-flow.\r\n */\r\n function finalise(x, sd, rm, isTruncated) {\r\n  var digits, i, j, k, rd, roundUp, w, xd, xdi,\r\n    Ctor = x.constructor;\r\n\r\n  // Don't round if sd is null or undefined.\r\n  out: if (sd != null) {\r\n    xd = x.d;\r\n\r\n    // Infinity/NaN.\r\n    if (!xd) return x;\r\n\r\n    // rd: the rounding digit, i.e. the digit after the digit that may be rounded up.\r\n    // w: the word of xd containing rd, a base 1e7 number.\r\n    // xdi: the index of w within xd.\r\n    // digits: the number of digits of w.\r\n    // i: what would be the index of rd within w if all the numbers were 7 digits long (i.e. if\r\n    // they had leading zeros)\r\n    // j: if > 0, the actual index of rd within w (if < 0, rd is a leading zero).\r\n\r\n    // Get the length of the first word of the digits array xd.\r\n    for (digits = 1, k = xd[0]; k >= 10; k /= 10) digits++;\r\n    i = sd - digits;\r\n\r\n    // Is the rounding digit in the first word of xd?\r\n    if (i < 0) {\r\n      i += LOG_BASE;\r\n      j = sd;\r\n      w = xd[xdi = 0];\r\n\r\n      // Get the rounding digit at index j of w.\r\n      rd = w / mathpow(10, digits - j - 1) % 10 | 0;\r\n    } else {\r\n      xdi = Math.ceil((i + 1) / LOG_BASE);\r\n      k = xd.length;\r\n      if (xdi >= k) {\r\n        if (isTruncated) {\r\n\r\n          // Needed by `naturalExponential`, `naturalLogarithm` and `squareRoot`.\r\n          for (; k++ <= xdi;) xd.push(0);\r\n          w = rd = 0;\r\n          digits = 1;\r\n          i %= LOG_BASE;\r\n          j = i - LOG_BASE + 1;\r\n        } else {\r\n          break out;\r\n        }\r\n      } else {\r\n        w = k = xd[xdi];\r\n\r\n        // Get the number of digits of w.\r\n        for (digits = 1; k >= 10; k /= 10) digits++;\r\n\r\n        // Get the index of rd within w.\r\n        i %= LOG_BASE;\r\n\r\n        // Get the index of rd within w, adjusted for leading zeros.\r\n        // The number of leading zeros of w is given by LOG_BASE - digits.\r\n        j = i - LOG_BASE + digits;\r\n\r\n        // Get the rounding digit at index j of w.\r\n        rd = j < 0 ? 0 : w / mathpow(10, digits - j - 1) % 10 | 0;\r\n      }\r\n    }\r\n\r\n    // Are there any non-zero digits after the rounding digit?\r\n    isTruncated = isTruncated || sd < 0 ||\r\n      xd[xdi + 1] !== void 0 || (j < 0 ? w : w % mathpow(10, digits - j - 1));\r\n\r\n    // The expression `w % mathpow(10, digits - j - 1)` returns all the digits of w to the right\r\n    // of the digit at (left-to-right) index j, e.g. if w is 908714 and j is 2, the expression\r\n    // will give 714.\r\n\r\n    roundUp = rm < 4\r\n      ? (rd || isTruncated) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n      : rd > 5 || rd == 5 && (rm == 4 || isTruncated || rm == 6 &&\r\n\r\n        // Check whether the digit to the left of the rounding digit is odd.\r\n        ((i > 0 ? j > 0 ? w / mathpow(10, digits - j) : 0 : xd[xdi - 1]) % 10) & 1 ||\r\n          rm == (x.s < 0 ? 8 : 7));\r\n\r\n    if (sd < 1 || !xd[0]) {\r\n      xd.length = 0;\r\n      if (roundUp) {\r\n\r\n        // Convert sd to decimal places.\r\n        sd -= x.e + 1;\r\n\r\n        // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n        xd[0] = mathpow(10, (LOG_BASE - sd % LOG_BASE) % LOG_BASE);\r\n        x.e = -sd || 0;\r\n      } else {\r\n\r\n        // Zero.\r\n        xd[0] = x.e = 0;\r\n      }\r\n\r\n      return x;\r\n    }\r\n\r\n    // Remove excess digits.\r\n    if (i == 0) {\r\n      xd.length = xdi;\r\n      k = 1;\r\n      xdi--;\r\n    } else {\r\n      xd.length = xdi + 1;\r\n      k = mathpow(10, LOG_BASE - i);\r\n\r\n      // E.g. 56700 becomes 56000 if 7 is the rounding digit.\r\n      // j > 0 means i > number of leading zeros of w.\r\n      xd[xdi] = j > 0 ? (w / mathpow(10, digits - j) % mathpow(10, j) | 0) * k : 0;\r\n    }\r\n\r\n    if (roundUp) {\r\n      for (;;) {\r\n\r\n        // Is the digit to be rounded up in the first word of xd?\r\n        if (xdi == 0) {\r\n\r\n          // i will be the length of xd[0] before k is added.\r\n          for (i = 1, j = xd[0]; j >= 10; j /= 10) i++;\r\n          j = xd[0] += k;\r\n          for (k = 1; j >= 10; j /= 10) k++;\r\n\r\n          // if i != k the length has increased.\r\n          if (i != k) {\r\n            x.e++;\r\n            if (xd[0] == BASE) xd[0] = 1;\r\n          }\r\n\r\n          break;\r\n        } else {\r\n          xd[xdi] += k;\r\n          if (xd[xdi] != BASE) break;\r\n          xd[xdi--] = 0;\r\n          k = 1;\r\n        }\r\n      }\r\n    }\r\n\r\n    // Remove trailing zeros.\r\n    for (i = xd.length; xd[--i] === 0;) xd.pop();\r\n  }\r\n\r\n  if (external) {\r\n\r\n    // Overflow?\r\n    if (x.e > Ctor.maxE) {\r\n\r\n      // Infinity.\r\n      x.d = null;\r\n      x.e = NaN;\r\n\r\n    // Underflow?\r\n    } else if (x.e < Ctor.minE) {\r\n\r\n      // Zero.\r\n      x.e = 0;\r\n      x.d = [0];\r\n      // Ctor.underflow = true;\r\n    } // else Ctor.underflow = false;\r\n  }\r\n\r\n  return x;\r\n}\r\n\r\n\r\nfunction finiteToString(x, isExp, sd) {\r\n  if (!x.isFinite()) return nonFiniteToString(x);\r\n  var k,\r\n    e = x.e,\r\n    str = digitsToString(x.d),\r\n    len = str.length;\r\n\r\n  if (isExp) {\r\n    if (sd && (k = sd - len) > 0) {\r\n      str = str.charAt(0) + '.' + str.slice(1) + getZeroString(k);\r\n    } else if (len > 1) {\r\n      str = str.charAt(0) + '.' + str.slice(1);\r\n    }\r\n\r\n    str = str + (x.e < 0 ? 'e' : 'e+') + x.e;\r\n  } else if (e < 0) {\r\n    str = '0.' + getZeroString(-e - 1) + str;\r\n    if (sd && (k = sd - len) > 0) str += getZeroString(k);\r\n  } else if (e >= len) {\r\n    str += getZeroString(e + 1 - len);\r\n    if (sd && (k = sd - e - 1) > 0) str = str + '.' + getZeroString(k);\r\n  } else {\r\n    if ((k = e + 1) < len) str = str.slice(0, k) + '.' + str.slice(k);\r\n    if (sd && (k = sd - len) > 0) {\r\n      if (e + 1 === len) str += '.';\r\n      str += getZeroString(k);\r\n    }\r\n  }\r\n\r\n  return str;\r\n}\r\n\r\n\r\n// Calculate the base 10 exponent from the base 1e7 exponent.\r\nfunction getBase10Exponent(digits, e) {\r\n  var w = digits[0];\r\n\r\n  // Add the number of digits of the first word of the digits array.\r\n  for ( e *= LOG_BASE; w >= 10; w /= 10) e++;\r\n  return e;\r\n}\r\n\r\n\r\nfunction getLn10(Ctor, sd, pr) {\r\n  if (sd > LN10_PRECISION) {\r\n\r\n    // Reset global state in case the exception is caught.\r\n    external = true;\r\n    if (pr) Ctor.precision = pr;\r\n    throw Error(precisionLimitExceeded);\r\n  }\r\n  return finalise(new Ctor(LN10), sd, 1, true);\r\n}\r\n\r\n\r\nfunction getPi(Ctor, sd, rm) {\r\n  if (sd > PI_PRECISION) throw Error(precisionLimitExceeded);\r\n  return finalise(new Ctor(PI), sd, rm, true);\r\n}\r\n\r\n\r\nfunction getPrecision(digits) {\r\n  var w = digits.length - 1,\r\n    len = w * LOG_BASE + 1;\r\n\r\n  w = digits[w];\r\n\r\n  // If non-zero...\r\n  if (w) {\r\n\r\n    // Subtract the number of trailing zeros of the last word.\r\n    for (; w % 10 == 0; w /= 10) len--;\r\n\r\n    // Add the number of digits of the first word.\r\n    for (w = digits[0]; w >= 10; w /= 10) len++;\r\n  }\r\n\r\n  return len;\r\n}\r\n\r\n\r\nfunction getZeroString(k) {\r\n  var zs = '';\r\n  for (; k--;) zs += '0';\r\n  return zs;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of Decimal `x` to the power `n`, where `n` is an\r\n * integer of type number.\r\n *\r\n * Implements 'exponentiation by squaring'. Called by `pow` and `parseOther`.\r\n *\r\n */\r\nfunction intPow(Ctor, x, n, pr) {\r\n  var isTruncated,\r\n    r = new Ctor(1),\r\n\r\n    // Max n of 9007199254740991 takes 53 loop iterations.\r\n    // Maximum digits array length; leaves [28, 34] guard digits.\r\n    k = Math.ceil(pr / LOG_BASE + 4);\r\n\r\n  external = false;\r\n\r\n  for (;;) {\r\n    if (n % 2) {\r\n      r = r.times(x);\r\n      if (truncate(r.d, k)) isTruncated = true;\r\n    }\r\n\r\n    n = mathfloor(n / 2);\r\n    if (n === 0) {\r\n\r\n      // To ensure correct rounding when r.d is truncated, increment the last word if it is zero.\r\n      n = r.d.length - 1;\r\n      if (isTruncated && r.d[n] === 0) ++r.d[n];\r\n      break;\r\n    }\r\n\r\n    x = x.times(x);\r\n    truncate(x.d, k);\r\n  }\r\n\r\n  external = true;\r\n\r\n  return r;\r\n}\r\n\r\n\r\nfunction isOdd(n) {\r\n  return n.d[n.d.length - 1] & 1;\r\n}\r\n\r\n\r\n/*\r\n * Handle `max` and `min`. `ltgt` is 'lt' or 'gt'.\r\n */\r\nfunction maxOrMin(Ctor, args, ltgt) {\r\n  var y,\r\n    x = new Ctor(args[0]),\r\n    i = 0;\r\n\r\n  for (; ++i < args.length;) {\r\n    y = new Ctor(args[i]);\r\n    if (!y.s) {\r\n      x = y;\r\n      break;\r\n    } else if (x[ltgt](y)) {\r\n      x = y;\r\n    }\r\n  }\r\n\r\n  return x;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural exponential of `x` rounded to `sd` significant\r\n * digits.\r\n *\r\n * Taylor/Maclaurin series.\r\n *\r\n * exp(x) = x^0/0! + x^1/1! + x^2/2! + x^3/3! + ...\r\n *\r\n * Argument reduction:\r\n *   Repeat x = x / 32, k += 5, until |x| < 0.1\r\n *   exp(x) = exp(x / 2^k)^(2^k)\r\n *\r\n * Previously, the argument was initially reduced by\r\n * exp(x) = exp(r) * 10^k  where r = x - k * ln10, k = floor(x / ln10)\r\n * to first put r in the range [0, ln10], before dividing by 32 until |x| < 0.1, but this was\r\n * found to be slower than just dividing repeatedly by 32 as above.\r\n *\r\n * Max integer argument: exp('20723265836946413') = 6.3e+9000000000000000\r\n * Min integer argument: exp('-20723265836946411') = 1.2e-9000000000000000\r\n * (Math object integer min/max: Math.exp(709) = 8.2e+307, Math.exp(-745) = 5e-324)\r\n *\r\n *  exp(Infinity)  = Infinity\r\n *  exp(-Infinity) = 0\r\n *  exp(NaN)       = NaN\r\n *  exp(±0)        = 1\r\n *\r\n *  exp(x) is non-terminating for any finite, non-zero x.\r\n *\r\n *  The result will always be correctly rounded.\r\n *\r\n */\r\nfunction naturalExponential(x, sd) {\r\n  var denominator, guard, j, pow, sum, t, wpr,\r\n    rep = 0,\r\n    i = 0,\r\n    k = 0,\r\n    Ctor = x.constructor,\r\n    rm = Ctor.rounding,\r\n    pr = Ctor.precision;\r\n\r\n  // 0/NaN/Infinity?\r\n  if (!x.d || !x.d[0] || x.e > 17) {\r\n\r\n    return new Ctor(x.d\r\n      ? !x.d[0] ? 1 : x.s < 0 ? 0 : 1 / 0\r\n      : x.s ? x.s < 0 ? 0 : x : 0 / 0);\r\n  }\r\n\r\n  if (sd == null) {\r\n    external = false;\r\n    wpr = pr;\r\n  } else {\r\n    wpr = sd;\r\n  }\r\n\r\n  t = new Ctor(0.03125);\r\n\r\n  // while abs(x) >= 0.1\r\n  while (x.e > -2) {\r\n\r\n    // x = x / 2^5\r\n    x = x.times(t);\r\n    k += 5;\r\n  }\r\n\r\n  // Use 2 * log10(2^k) + 5 (empirically derived) to estimate the increase in precision\r\n  // necessary to ensure the first 4 rounding digits are correct.\r\n  guard = Math.log(mathpow(2, k)) / Math.LN10 * 2 + 5 | 0;\r\n  wpr += guard;\r\n  denominator = pow = sum = new Ctor(1);\r\n  Ctor.precision = wpr;\r\n\r\n  for (;;) {\r\n    pow = finalise(pow.times(x), wpr, 1);\r\n    denominator = denominator.times(++i);\r\n    t = sum.plus(divide(pow, denominator, wpr, 1));\r\n\r\n    if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\r\n      j = k;\r\n      while (j--) sum = finalise(sum.times(sum), wpr, 1);\r\n\r\n      // Check to see if the first 4 rounding digits are [49]999.\r\n      // If so, repeat the summation with a higher precision, otherwise\r\n      // e.g. with precision: 18, rounding: 1\r\n      // exp(18.404272462595034083567793919843761) = 98372560.1229999999 (should be 98372560.123)\r\n      // `wpr - guard` is the index of first rounding digit.\r\n      if (sd == null) {\r\n\r\n        if (rep < 3 && checkRoundingDigits(sum.d, wpr - guard, rm, rep)) {\r\n          Ctor.precision = wpr += 10;\r\n          denominator = pow = t = new Ctor(1);\r\n          i = 0;\r\n          rep++;\r\n        } else {\r\n          return finalise(sum, Ctor.precision = pr, rm, external = true);\r\n        }\r\n      } else {\r\n        Ctor.precision = pr;\r\n        return sum;\r\n      }\r\n    }\r\n\r\n    sum = t;\r\n  }\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural logarithm of `x` rounded to `sd` significant\r\n * digits.\r\n *\r\n *  ln(-n)        = NaN\r\n *  ln(0)         = -Infinity\r\n *  ln(-0)        = -Infinity\r\n *  ln(1)         = 0\r\n *  ln(Infinity)  = Infinity\r\n *  ln(-Infinity) = NaN\r\n *  ln(NaN)       = NaN\r\n *\r\n *  ln(n) (n != 1) is non-terminating.\r\n *\r\n */\r\nfunction naturalLogarithm(y, sd) {\r\n  var c, c0, denominator, e, numerator, rep, sum, t, wpr, x1, x2,\r\n    n = 1,\r\n    guard = 10,\r\n    x = y,\r\n    xd = x.d,\r\n    Ctor = x.constructor,\r\n    rm = Ctor.rounding,\r\n    pr = Ctor.precision;\r\n\r\n  // Is x negative or Infinity, NaN, 0 or 1?\r\n  if (x.s < 0 || !xd || !xd[0] || !x.e && xd[0] == 1 && xd.length == 1) {\r\n    return new Ctor(xd && !xd[0] ? -1 / 0 : x.s != 1 ? NaN : xd ? 0 : x);\r\n  }\r\n\r\n  if (sd == null) {\r\n    external = false;\r\n    wpr = pr;\r\n  } else {\r\n    wpr = sd;\r\n  }\r\n\r\n  Ctor.precision = wpr += guard;\r\n  c = digitsToString(xd);\r\n  c0 = c.charAt(0);\r\n\r\n  if (Math.abs(e = x.e) < 1.5e15) {\r\n\r\n    // Argument reduction.\r\n    // The series converges faster the closer the argument is to 1, so using\r\n    // ln(a^b) = b * ln(a),   ln(a) = ln(a^b) / b\r\n    // multiply the argument by itself until the leading digits of the significand are 7, 8, 9,\r\n    // 10, 11, 12 or 13, recording the number of multiplications so the sum of the series can\r\n    // later be divided by this number, then separate out the power of 10 using\r\n    // ln(a*10^b) = ln(a) + b*ln(10).\r\n\r\n    // max n is 21 (gives 0.9, 1.0 or 1.1) (9e15 / 21 = 4.2e14).\r\n    //while (c0 < 9 && c0 != 1 || c0 == 1 && c.charAt(1) > 1) {\r\n    // max n is 6 (gives 0.7 - 1.3)\r\n    while (c0 < 7 && c0 != 1 || c0 == 1 && c.charAt(1) > 3) {\r\n      x = x.times(y);\r\n      c = digitsToString(x.d);\r\n      c0 = c.charAt(0);\r\n      n++;\r\n    }\r\n\r\n    e = x.e;\r\n\r\n    if (c0 > 1) {\r\n      x = new Ctor('0.' + c);\r\n      e++;\r\n    } else {\r\n      x = new Ctor(c0 + '.' + c.slice(1));\r\n    }\r\n  } else {\r\n\r\n    // The argument reduction method above may result in overflow if the argument y is a massive\r\n    // number with exponent >= 1500000000000000 (9e15 / 6 = 1.5e15), so instead recall this\r\n    // function using ln(x*10^e) = ln(x) + e*ln(10).\r\n    t = getLn10(Ctor, wpr + 2, pr).times(e + '');\r\n    x = naturalLogarithm(new Ctor(c0 + '.' + c.slice(1)), wpr - guard).plus(t);\r\n    Ctor.precision = pr;\r\n\r\n    return sd == null ? finalise(x, pr, rm, external = true) : x;\r\n  }\r\n\r\n  // x1 is x reduced to a value near 1.\r\n  x1 = x;\r\n\r\n  // Taylor series.\r\n  // ln(y) = ln((1 + x)/(1 - x)) = 2(x + x^3/3 + x^5/5 + x^7/7 + ...)\r\n  // where x = (y - 1)/(y + 1)    (|x| < 1)\r\n  sum = numerator = x = divide(x.minus(1), x.plus(1), wpr, 1);\r\n  x2 = finalise(x.times(x), wpr, 1);\r\n  denominator = 3;\r\n\r\n  for (;;) {\r\n    numerator = finalise(numerator.times(x2), wpr, 1);\r\n    t = sum.plus(divide(numerator, new Ctor(denominator), wpr, 1));\r\n\r\n    if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\r\n      sum = sum.times(2);\r\n\r\n      // Reverse the argument reduction. Check that e is not 0 because, besides preventing an\r\n      // unnecessary calculation, -0 + 0 = +0 and to ensure correct rounding -0 needs to stay -0.\r\n      if (e !== 0) sum = sum.plus(getLn10(Ctor, wpr + 2, pr).times(e + ''));\r\n      sum = divide(sum, new Ctor(n), wpr, 1);\r\n\r\n      // Is rm > 3 and the first 4 rounding digits 4999, or rm < 4 (or the summation has\r\n      // been repeated previously) and the first 4 rounding digits 9999?\r\n      // If so, restart the summation with a higher precision, otherwise\r\n      // e.g. with precision: 12, rounding: 1\r\n      // ln(135520028.6126091714265381533) = 18.7246299999 when it should be 18.72463.\r\n      // `wpr - guard` is the index of first rounding digit.\r\n      if (sd == null) {\r\n        if (checkRoundingDigits(sum.d, wpr - guard, rm, rep)) {\r\n          Ctor.precision = wpr += guard;\r\n          t = numerator = x = divide(x1.minus(1), x1.plus(1), wpr, 1);\r\n          x2 = finalise(x.times(x), wpr, 1);\r\n          denominator = rep = 1;\r\n        } else {\r\n          return finalise(sum, Ctor.precision = pr, rm, external = true);\r\n        }\r\n      } else {\r\n        Ctor.precision = pr;\r\n        return sum;\r\n      }\r\n    }\r\n\r\n    sum = t;\r\n    denominator += 2;\r\n  }\r\n}\r\n\r\n\r\n// ±Infinity, NaN.\r\nfunction nonFiniteToString(x) {\r\n  // Unsigned.\r\n  return String(x.s * x.s / 0);\r\n}\r\n\r\n\r\n/*\r\n * Parse the value of a new Decimal `x` from string `str`.\r\n */\r\nfunction parseDecimal(x, str) {\r\n  var e, i, len;\r\n\r\n  // Decimal point?\r\n  if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n\r\n  // Exponential form?\r\n  if ((i = str.search(/e/i)) > 0) {\r\n\r\n    // Determine exponent.\r\n    if (e < 0) e = i;\r\n    e += +str.slice(i + 1);\r\n    str = str.substring(0, i);\r\n  } else if (e < 0) {\r\n\r\n    // Integer.\r\n    e = str.length;\r\n  }\r\n\r\n  // Determine leading zeros.\r\n  for (i = 0; str.charCodeAt(i) === 48; i++);\r\n\r\n  // Determine trailing zeros.\r\n  for (len = str.length; str.charCodeAt(len - 1) === 48; --len);\r\n  str = str.slice(i, len);\r\n\r\n  if (str) {\r\n    len -= i;\r\n    x.e = e = e - i - 1;\r\n    x.d = [];\r\n\r\n    // Transform base\r\n\r\n    // e is the base 10 exponent.\r\n    // i is where to slice str to get the first word of the digits array.\r\n    i = (e + 1) % LOG_BASE;\r\n    if (e < 0) i += LOG_BASE;\r\n\r\n    if (i < len) {\r\n      if (i) x.d.push(+str.slice(0, i));\r\n      for (len -= LOG_BASE; i < len;) x.d.push(+str.slice(i, i += LOG_BASE));\r\n      str = str.slice(i);\r\n      i = LOG_BASE - str.length;\r\n    } else {\r\n      i -= len;\r\n    }\r\n\r\n    for (; i--;) str += '0';\r\n    x.d.push(+str);\r\n\r\n    if (external) {\r\n\r\n      // Overflow?\r\n      if (x.e > x.constructor.maxE) {\r\n\r\n        // Infinity.\r\n        x.d = null;\r\n        x.e = NaN;\r\n\r\n      // Underflow?\r\n      } else if (x.e < x.constructor.minE) {\r\n\r\n        // Zero.\r\n        x.e = 0;\r\n        x.d = [0];\r\n        // x.constructor.underflow = true;\r\n      } // else x.constructor.underflow = false;\r\n    }\r\n  } else {\r\n\r\n    // Zero.\r\n    x.e = 0;\r\n    x.d = [0];\r\n  }\r\n\r\n  return x;\r\n}\r\n\r\n\r\n/*\r\n * Parse the value of a new Decimal `x` from a string `str`, which is not a decimal value.\r\n */\r\nfunction parseOther(x, str) {\r\n  var base, Ctor, divisor, i, isFloat, len, p, xd, xe;\r\n\r\n  if (str.indexOf('_') > -1) {\r\n    str = str.replace(/(\\d)_(?=\\d)/g, '$1');\r\n    if (isDecimal.test(str)) return parseDecimal(x, str);\r\n  } else if (str === 'Infinity' || str === 'NaN') {\r\n    if (!+str) x.s = NaN;\r\n    x.e = NaN;\r\n    x.d = null;\r\n    return x;\r\n  }\r\n\r\n  if (isHex.test(str))  {\r\n    base = 16;\r\n    str = str.toLowerCase();\r\n  } else if (isBinary.test(str))  {\r\n    base = 2;\r\n  } else if (isOctal.test(str))  {\r\n    base = 8;\r\n  } else {\r\n    throw Error(invalidArgument + str);\r\n  }\r\n\r\n  // Is there a binary exponent part?\r\n  i = str.search(/p/i);\r\n\r\n  if (i > 0) {\r\n    p = +str.slice(i + 1);\r\n    str = str.substring(2, i);\r\n  } else {\r\n    str = str.slice(2);\r\n  }\r\n\r\n  // Convert `str` as an integer then divide the result by `base` raised to a power such that the\r\n  // fraction part will be restored.\r\n  i = str.indexOf('.');\r\n  isFloat = i >= 0;\r\n  Ctor = x.constructor;\r\n\r\n  if (isFloat) {\r\n    str = str.replace('.', '');\r\n    len = str.length;\r\n    i = len - i;\r\n\r\n    // log[10](16) = 1.2041... , log[10](88) = 1.9444....\r\n    divisor = intPow(Ctor, new Ctor(base), i, i * 2);\r\n  }\r\n\r\n  xd = convertBase(str, base, BASE);\r\n  xe = xd.length - 1;\r\n\r\n  // Remove trailing zeros.\r\n  for (i = xe; xd[i] === 0; --i) xd.pop();\r\n  if (i < 0) return new Ctor(x.s * 0);\r\n  x.e = getBase10Exponent(xd, xe);\r\n  x.d = xd;\r\n  external = false;\r\n\r\n  // At what precision to perform the division to ensure exact conversion?\r\n  // maxDecimalIntegerPartDigitCount = ceil(log[10](b) * otherBaseIntegerPartDigitCount)\r\n  // log[10](2) = 0.30103, log[10](8) = 0.90309, log[10](16) = 1.20412\r\n  // E.g. ceil(1.2 * 3) = 4, so up to 4 decimal digits are needed to represent 3 hex int digits.\r\n  // maxDecimalFractionPartDigitCount = {Hex:4|Oct:3|Bin:1} * otherBaseFractionPartDigitCount\r\n  // Therefore using 4 * the number of digits of str will always be enough.\r\n  if (isFloat) x = divide(x, divisor, len * 4);\r\n\r\n  // Multiply by the binary exponent part if present.\r\n  if (p) x = x.times(Math.abs(p) < 54 ? mathpow(2, p) : Decimal.pow(2, p));\r\n  external = true;\r\n\r\n  return x;\r\n}\r\n\r\n\r\n/*\r\n * sin(x) = x - x^3/3! + x^5/5! - ...\r\n * |x| < pi/2\r\n *\r\n */\r\nfunction sine(Ctor, x) {\r\n  var k,\r\n    len = x.d.length;\r\n\r\n  if (len < 3) {\r\n    return x.isZero() ? x : taylorSeries(Ctor, 2, x, x);\r\n  }\r\n\r\n  // Argument reduction: sin(5x) = 16*sin^5(x) - 20*sin^3(x) + 5*sin(x)\r\n  // i.e. sin(x) = 16*sin^5(x/5) - 20*sin^3(x/5) + 5*sin(x/5)\r\n  // and  sin(x) = sin(x/5)(5 + sin^2(x/5)(16sin^2(x/5) - 20))\r\n\r\n  // Estimate the optimum number of times to use the argument reduction.\r\n  k = 1.4 * Math.sqrt(len);\r\n  k = k > 16 ? 16 : k | 0;\r\n\r\n  x = x.times(1 / tinyPow(5, k));\r\n  x = taylorSeries(Ctor, 2, x, x);\r\n\r\n  // Reverse argument reduction\r\n  var sin2_x,\r\n    d5 = new Ctor(5),\r\n    d16 = new Ctor(16),\r\n    d20 = new Ctor(20);\r\n  for (; k--;) {\r\n    sin2_x = x.times(x);\r\n    x = x.times(d5.plus(sin2_x.times(d16.times(sin2_x).minus(d20))));\r\n  }\r\n\r\n  return x;\r\n}\r\n\r\n\r\n// Calculate Taylor series for `cos`, `cosh`, `sin` and `sinh`.\r\nfunction taylorSeries(Ctor, n, x, y, isHyperbolic) {\r\n  var j, t, u, x2,\r\n    i = 1,\r\n    pr = Ctor.precision,\r\n    k = Math.ceil(pr / LOG_BASE);\r\n\r\n  external = false;\r\n  x2 = x.times(x);\r\n  u = new Ctor(y);\r\n\r\n  for (;;) {\r\n    t = divide(u.times(x2), new Ctor(n++ * n++), pr, 1);\r\n    u = isHyperbolic ? y.plus(t) : y.minus(t);\r\n    y = divide(t.times(x2), new Ctor(n++ * n++), pr, 1);\r\n    t = u.plus(y);\r\n\r\n    if (t.d[k] !== void 0) {\r\n      for (j = k; t.d[j] === u.d[j] && j--;);\r\n      if (j == -1) break;\r\n    }\r\n\r\n    j = u;\r\n    u = y;\r\n    y = t;\r\n    t = j;\r\n    i++;\r\n  }\r\n\r\n  external = true;\r\n  t.d.length = k + 1;\r\n\r\n  return t;\r\n}\r\n\r\n\r\n// Exponent e must be positive and non-zero.\r\nfunction tinyPow(b, e) {\r\n  var n = b;\r\n  while (--e) n *= b;\r\n  return n;\r\n}\r\n\r\n\r\n// Return the absolute value of `x` reduced to less than or equal to half pi.\r\nfunction toLessThanHalfPi(Ctor, x) {\r\n  var t,\r\n    isNeg = x.s < 0,\r\n    pi = getPi(Ctor, Ctor.precision, 1),\r\n    halfPi = pi.times(0.5);\r\n\r\n  x = x.abs();\r\n\r\n  if (x.lte(halfPi)) {\r\n    quadrant = isNeg ? 4 : 1;\r\n    return x;\r\n  }\r\n\r\n  t = x.divToInt(pi);\r\n\r\n  if (t.isZero()) {\r\n    quadrant = isNeg ? 3 : 2;\r\n  } else {\r\n    x = x.minus(t.times(pi));\r\n\r\n    // 0 <= x < pi\r\n    if (x.lte(halfPi)) {\r\n      quadrant = isOdd(t) ? (isNeg ? 2 : 3) : (isNeg ? 4 : 1);\r\n      return x;\r\n    }\r\n\r\n    quadrant = isOdd(t) ? (isNeg ? 1 : 4) : (isNeg ? 3 : 2);\r\n  }\r\n\r\n  return x.minus(pi).abs();\r\n}\r\n\r\n\r\n/*\r\n * Return the value of Decimal `x` as a string in base `baseOut`.\r\n *\r\n * If the optional `sd` argument is present include a binary exponent suffix.\r\n */\r\nfunction toStringBinary(x, baseOut, sd, rm) {\r\n  var base, e, i, k, len, roundUp, str, xd, y,\r\n    Ctor = x.constructor,\r\n    isExp = sd !== void 0;\r\n\r\n  if (isExp) {\r\n    checkInt32(sd, 1, MAX_DIGITS);\r\n    if (rm === void 0) rm = Ctor.rounding;\r\n    else checkInt32(rm, 0, 8);\r\n  } else {\r\n    sd = Ctor.precision;\r\n    rm = Ctor.rounding;\r\n  }\r\n\r\n  if (!x.isFinite()) {\r\n    str = nonFiniteToString(x);\r\n  } else {\r\n    str = finiteToString(x);\r\n    i = str.indexOf('.');\r\n\r\n    // Use exponential notation according to `toExpPos` and `toExpNeg`? No, but if required:\r\n    // maxBinaryExponent = floor((decimalExponent + 1) * log[2](10))\r\n    // minBinaryExponent = floor(decimalExponent * log[2](10))\r\n    // log[2](10) = 3.321928094887362347870319429489390175864\r\n\r\n    if (isExp) {\r\n      base = 2;\r\n      if (baseOut == 16) {\r\n        sd = sd * 4 - 3;\r\n      } else if (baseOut == 8) {\r\n        sd = sd * 3 - 2;\r\n      }\r\n    } else {\r\n      base = baseOut;\r\n    }\r\n\r\n    // Convert the number as an integer then divide the result by its base raised to a power such\r\n    // that the fraction part will be restored.\r\n\r\n    // Non-integer.\r\n    if (i >= 0) {\r\n      str = str.replace('.', '');\r\n      y = new Ctor(1);\r\n      y.e = str.length - i;\r\n      y.d = convertBase(finiteToString(y), 10, base);\r\n      y.e = y.d.length;\r\n    }\r\n\r\n    xd = convertBase(str, 10, base);\r\n    e = len = xd.length;\r\n\r\n    // Remove trailing zeros.\r\n    for (; xd[--len] == 0;) xd.pop();\r\n\r\n    if (!xd[0]) {\r\n      str = isExp ? '0p+0' : '0';\r\n    } else {\r\n      if (i < 0) {\r\n        e--;\r\n      } else {\r\n        x = new Ctor(x);\r\n        x.d = xd;\r\n        x.e = e;\r\n        x = divide(x, y, sd, rm, 0, base);\r\n        xd = x.d;\r\n        e = x.e;\r\n        roundUp = inexact;\r\n      }\r\n\r\n      // The rounding digit, i.e. the digit after the digit that may be rounded up.\r\n      i = xd[sd];\r\n      k = base / 2;\r\n      roundUp = roundUp || xd[sd + 1] !== void 0;\r\n\r\n      roundUp = rm < 4\r\n        ? (i !== void 0 || roundUp) && (rm === 0 || rm === (x.s < 0 ? 3 : 2))\r\n        : i > k || i === k && (rm === 4 || roundUp || rm === 6 && xd[sd - 1] & 1 ||\r\n          rm === (x.s < 0 ? 8 : 7));\r\n\r\n      xd.length = sd;\r\n\r\n      if (roundUp) {\r\n\r\n        // Rounding up may mean the previous digit has to be rounded up and so on.\r\n        for (; ++xd[--sd] > base - 1;) {\r\n          xd[sd] = 0;\r\n          if (!sd) {\r\n            ++e;\r\n            xd.unshift(1);\r\n          }\r\n        }\r\n      }\r\n\r\n      // Determine trailing zeros.\r\n      for (len = xd.length; !xd[len - 1]; --len);\r\n\r\n      // E.g. [4, 11, 15] becomes 4bf.\r\n      for (i = 0, str = ''; i < len; i++) str += NUMERALS.charAt(xd[i]);\r\n\r\n      // Add binary exponent suffix?\r\n      if (isExp) {\r\n        if (len > 1) {\r\n          if (baseOut == 16 || baseOut == 8) {\r\n            i = baseOut == 16 ? 4 : 3;\r\n            for (--len; len % i; len++) str += '0';\r\n            xd = convertBase(str, base, baseOut);\r\n            for (len = xd.length; !xd[len - 1]; --len);\r\n\r\n            // xd[0] will always be be 1\r\n            for (i = 1, str = '1.'; i < len; i++) str += NUMERALS.charAt(xd[i]);\r\n          } else {\r\n            str = str.charAt(0) + '.' + str.slice(1);\r\n          }\r\n        }\r\n\r\n        str =  str + (e < 0 ? 'p' : 'p+') + e;\r\n      } else if (e < 0) {\r\n        for (; ++e;) str = '0' + str;\r\n        str = '0.' + str;\r\n      } else {\r\n        if (++e > len) for (e -= len; e-- ;) str += '0';\r\n        else if (e < len) str = str.slice(0, e) + '.' + str.slice(e);\r\n      }\r\n    }\r\n\r\n    str = (baseOut == 16 ? '0x' : baseOut == 2 ? '0b' : baseOut == 8 ? '0o' : '') + str;\r\n  }\r\n\r\n  return x.s < 0 ? '-' + str : str;\r\n}\r\n\r\n\r\n// Does not strip trailing zeros.\r\nfunction truncate(arr, len) {\r\n  if (arr.length > len) {\r\n    arr.length = len;\r\n    return true;\r\n  }\r\n}\r\n\r\n\r\n// Decimal methods\r\n\r\n\r\n/*\r\n *  abs\r\n *  acos\r\n *  acosh\r\n *  add\r\n *  asin\r\n *  asinh\r\n *  atan\r\n *  atanh\r\n *  atan2\r\n *  cbrt\r\n *  ceil\r\n *  clamp\r\n *  clone\r\n *  config\r\n *  cos\r\n *  cosh\r\n *  div\r\n *  exp\r\n *  floor\r\n *  hypot\r\n *  ln\r\n *  log\r\n *  log2\r\n *  log10\r\n *  max\r\n *  min\r\n *  mod\r\n *  mul\r\n *  pow\r\n *  random\r\n *  round\r\n *  set\r\n *  sign\r\n *  sin\r\n *  sinh\r\n *  sqrt\r\n *  sub\r\n *  sum\r\n *  tan\r\n *  tanh\r\n *  trunc\r\n */\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the absolute value of `x`.\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction abs(x) {\r\n  return new this(x).abs();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arccosine in radians of `x`.\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction acos(x) {\r\n  return new this(x).acos();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic cosine of `x`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal} A value in radians.\r\n *\r\n */\r\nfunction acosh(x) {\r\n  return new this(x).acosh();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the sum of `x` and `y`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal}\r\n * y {number|string|Decimal}\r\n *\r\n */\r\nfunction add(x, y) {\r\n  return new this(x).plus(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arcsine in radians of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction asin(x) {\r\n  return new this(x).asin();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic sine of `x`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal} A value in radians.\r\n *\r\n */\r\nfunction asinh(x) {\r\n  return new this(x).asinh();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arctangent in radians of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction atan(x) {\r\n  return new this(x).atan();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic tangent of `x`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal} A value in radians.\r\n *\r\n */\r\nfunction atanh(x) {\r\n  return new this(x).atanh();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arctangent in radians of `y/x` in the range -pi to pi\r\n * (inclusive), rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-pi, pi]\r\n *\r\n * y {number|string|Decimal} The y-coordinate.\r\n * x {number|string|Decimal} The x-coordinate.\r\n *\r\n * atan2(±0, -0)               = ±pi\r\n * atan2(±0, +0)               = ±0\r\n * atan2(±0, -x)               = ±pi for x > 0\r\n * atan2(±0, x)                = ±0 for x > 0\r\n * atan2(-y, ±0)               = -pi/2 for y > 0\r\n * atan2(y, ±0)                = pi/2 for y > 0\r\n * atan2(±y, -Infinity)        = ±pi for finite y > 0\r\n * atan2(±y, +Infinity)        = ±0 for finite y > 0\r\n * atan2(±Infinity, x)         = ±pi/2 for finite x\r\n * atan2(±Infinity, -Infinity) = ±3*pi/4\r\n * atan2(±Infinity, +Infinity) = ±pi/4\r\n * atan2(NaN, x) = NaN\r\n * atan2(y, NaN) = NaN\r\n *\r\n */\r\nfunction atan2(y, x) {\r\n  y = new this(y);\r\n  x = new this(x);\r\n  var r,\r\n    pr = this.precision,\r\n    rm = this.rounding,\r\n    wpr = pr + 4;\r\n\r\n  // Either NaN\r\n  if (!y.s || !x.s) {\r\n    r = new this(NaN);\r\n\r\n  // Both ±Infinity\r\n  } else if (!y.d && !x.d) {\r\n    r = getPi(this, wpr, 1).times(x.s > 0 ? 0.25 : 0.75);\r\n    r.s = y.s;\r\n\r\n  // x is ±Infinity or y is ±0\r\n  } else if (!x.d || y.isZero()) {\r\n    r = x.s < 0 ? getPi(this, pr, rm) : new this(0);\r\n    r.s = y.s;\r\n\r\n  // y is ±Infinity or x is ±0\r\n  } else if (!y.d || x.isZero()) {\r\n    r = getPi(this, wpr, 1).times(0.5);\r\n    r.s = y.s;\r\n\r\n  // Both non-zero and finite\r\n  } else if (x.s < 0) {\r\n    this.precision = wpr;\r\n    this.rounding = 1;\r\n    r = this.atan(divide(y, x, wpr, 1));\r\n    x = getPi(this, wpr, 1);\r\n    this.precision = pr;\r\n    this.rounding = rm;\r\n    r = y.s < 0 ? r.minus(x) : r.plus(x);\r\n  } else {\r\n    r = this.atan(divide(y, x, wpr, 1));\r\n  }\r\n\r\n  return r;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the cube root of `x`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction cbrt(x) {\r\n  return new this(x).cbrt();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` rounded to an integer using `ROUND_CEIL`.\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction ceil(x) {\r\n  return finalise(x = new this(x), x.e + 1, 2);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` clamped to the range delineated by `min` and `max`.\r\n *\r\n * x {number|string|Decimal}\r\n * min {number|string|Decimal}\r\n * max {number|string|Decimal}\r\n *\r\n */\r\nfunction clamp(x, min, max) {\r\n  return new this(x).clamp(min, max);\r\n}\r\n\r\n\r\n/*\r\n * Configure global settings for a Decimal constructor.\r\n *\r\n * `obj` is an object with one or more of the following properties,\r\n *\r\n *   precision  {number}\r\n *   rounding   {number}\r\n *   toExpNeg   {number}\r\n *   toExpPos   {number}\r\n *   maxE       {number}\r\n *   minE       {number}\r\n *   modulo     {number}\r\n *   crypto     {boolean|number}\r\n *   defaults   {true}\r\n *\r\n * E.g. Decimal.config({ precision: 20, rounding: 4 })\r\n *\r\n */\r\nfunction config(obj) {\r\n  if (!obj || typeof obj !== 'object') throw Error(decimalError + 'Object expected');\r\n  var i, p, v,\r\n    useDefaults = obj.defaults === true,\r\n    ps = [\r\n      'precision', 1, MAX_DIGITS,\r\n      'rounding', 0, 8,\r\n      'toExpNeg', -EXP_LIMIT, 0,\r\n      'toExpPos', 0, EXP_LIMIT,\r\n      'maxE', 0, EXP_LIMIT,\r\n      'minE', -EXP_LIMIT, 0,\r\n      'modulo', 0, 9\r\n    ];\r\n\r\n  for (i = 0; i < ps.length; i += 3) {\r\n    if (p = ps[i], useDefaults) this[p] = DEFAULTS[p];\r\n    if ((v = obj[p]) !== void 0) {\r\n      if (mathfloor(v) === v && v >= ps[i + 1] && v <= ps[i + 2]) this[p] = v;\r\n      else throw Error(invalidArgument + p + ': ' + v);\r\n    }\r\n  }\r\n\r\n  if (p = 'crypto', useDefaults) this[p] = DEFAULTS[p];\r\n  if ((v = obj[p]) !== void 0) {\r\n    if (v === true || v === false || v === 0 || v === 1) {\r\n      if (v) {\r\n        if (typeof crypto != 'undefined' && crypto &&\r\n          (crypto.getRandomValues || crypto.randomBytes)) {\r\n          this[p] = true;\r\n        } else {\r\n          throw Error(cryptoUnavailable);\r\n        }\r\n      } else {\r\n        this[p] = false;\r\n      }\r\n    } else {\r\n      throw Error(invalidArgument + p + ': ' + v);\r\n    }\r\n  }\r\n\r\n  return this;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the cosine of `x`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal} A value in radians.\r\n *\r\n */\r\nfunction cos(x) {\r\n  return new this(x).cos();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic cosine of `x`, rounded to precision\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal} A value in radians.\r\n *\r\n */\r\nfunction cosh(x) {\r\n  return new this(x).cosh();\r\n}\r\n\r\n\r\n/*\r\n * Create and return a Decimal constructor with the same configuration properties as this Decimal\r\n * constructor.\r\n *\r\n */\r\nfunction clone(obj) {\r\n  var i, p, ps;\r\n\r\n  /*\r\n   * The Decimal constructor and exported function.\r\n   * Return a new Decimal instance.\r\n   *\r\n   * v {number|string|Decimal} A numeric value.\r\n   *\r\n   */\r\n  function Decimal(v) {\r\n    var e, i, t,\r\n      x = this;\r\n\r\n    // Decimal called without new.\r\n    if (!(x instanceof Decimal)) return new Decimal(v);\r\n\r\n    // Retain a reference to this Decimal constructor, and shadow Decimal.prototype.constructor\r\n    // which points to Object.\r\n    x.constructor = Decimal;\r\n\r\n    // Duplicate.\r\n    if (isDecimalInstance(v)) {\r\n      x.s = v.s;\r\n\r\n      if (external) {\r\n        if (!v.d || v.e > Decimal.maxE) {\r\n\r\n          // Infinity.\r\n          x.e = NaN;\r\n          x.d = null;\r\n        } else if (v.e < Decimal.minE) {\r\n\r\n          // Zero.\r\n          x.e = 0;\r\n          x.d = [0];\r\n        } else {\r\n          x.e = v.e;\r\n          x.d = v.d.slice();\r\n        }\r\n      } else {\r\n        x.e = v.e;\r\n        x.d = v.d ? v.d.slice() : v.d;\r\n      }\r\n\r\n      return;\r\n    }\r\n\r\n    t = typeof v;\r\n\r\n    if (t === 'number') {\r\n      if (v === 0) {\r\n        x.s = 1 / v < 0 ? -1 : 1;\r\n        x.e = 0;\r\n        x.d = [0];\r\n        return;\r\n      }\r\n\r\n      if (v < 0) {\r\n        v = -v;\r\n        x.s = -1;\r\n      } else {\r\n        x.s = 1;\r\n      }\r\n\r\n      // Fast path for small integers.\r\n      if (v === ~~v && v < 1e7) {\r\n        for (e = 0, i = v; i >= 10; i /= 10) e++;\r\n\r\n        if (external) {\r\n          if (e > Decimal.maxE) {\r\n            x.e = NaN;\r\n            x.d = null;\r\n          } else if (e < Decimal.minE) {\r\n            x.e = 0;\r\n            x.d = [0];\r\n          } else {\r\n            x.e = e;\r\n            x.d = [v];\r\n          }\r\n        } else {\r\n          x.e = e;\r\n          x.d = [v];\r\n        }\r\n\r\n        return;\r\n\r\n      // Infinity, NaN.\r\n      } else if (v * 0 !== 0) {\r\n        if (!v) x.s = NaN;\r\n        x.e = NaN;\r\n        x.d = null;\r\n        return;\r\n      }\r\n\r\n      return parseDecimal(x, v.toString());\r\n\r\n    } else if (t !== 'string') {\r\n      throw Error(invalidArgument + v);\r\n    }\r\n\r\n    // Minus sign?\r\n    if ((i = v.charCodeAt(0)) === 45) {\r\n      v = v.slice(1);\r\n      x.s = -1;\r\n    } else {\r\n      // Plus sign?\r\n      if (i === 43) v = v.slice(1);\r\n      x.s = 1;\r\n    }\r\n\r\n    return isDecimal.test(v) ? parseDecimal(x, v) : parseOther(x, v);\r\n  }\r\n\r\n  Decimal.prototype = P;\r\n\r\n  Decimal.ROUND_UP = 0;\r\n  Decimal.ROUND_DOWN = 1;\r\n  Decimal.ROUND_CEIL = 2;\r\n  Decimal.ROUND_FLOOR = 3;\r\n  Decimal.ROUND_HALF_UP = 4;\r\n  Decimal.ROUND_HALF_DOWN = 5;\r\n  Decimal.ROUND_HALF_EVEN = 6;\r\n  Decimal.ROUND_HALF_CEIL = 7;\r\n  Decimal.ROUND_HALF_FLOOR = 8;\r\n  Decimal.EUCLID = 9;\r\n\r\n  Decimal.config = Decimal.set = config;\r\n  Decimal.clone = clone;\r\n  Decimal.isDecimal = isDecimalInstance;\r\n\r\n  Decimal.abs = abs;\r\n  Decimal.acos = acos;\r\n  Decimal.acosh = acosh;        // ES6\r\n  Decimal.add = add;\r\n  Decimal.asin = asin;\r\n  Decimal.asinh = asinh;        // ES6\r\n  Decimal.atan = atan;\r\n  Decimal.atanh = atanh;        // ES6\r\n  Decimal.atan2 = atan2;\r\n  Decimal.cbrt = cbrt;          // ES6\r\n  Decimal.ceil = ceil;\r\n  Decimal.clamp = clamp;\r\n  Decimal.cos = cos;\r\n  Decimal.cosh = cosh;          // ES6\r\n  Decimal.div = div;\r\n  Decimal.exp = exp;\r\n  Decimal.floor = floor;\r\n  Decimal.hypot = hypot;        // ES6\r\n  Decimal.ln = ln;\r\n  Decimal.log = log;\r\n  Decimal.log10 = log10;        // ES6\r\n  Decimal.log2 = log2;          // ES6\r\n  Decimal.max = max;\r\n  Decimal.min = min;\r\n  Decimal.mod = mod;\r\n  Decimal.mul = mul;\r\n  Decimal.pow = pow;\r\n  Decimal.random = random;\r\n  Decimal.round = round;\r\n  Decimal.sign = sign;          // ES6\r\n  Decimal.sin = sin;\r\n  Decimal.sinh = sinh;          // ES6\r\n  Decimal.sqrt = sqrt;\r\n  Decimal.sub = sub;\r\n  Decimal.sum = sum;\r\n  Decimal.tan = tan;\r\n  Decimal.tanh = tanh;          // ES6\r\n  Decimal.trunc = trunc;        // ES6\r\n\r\n  if (obj === void 0) obj = {};\r\n  if (obj) {\r\n    if (obj.defaults !== true) {\r\n      ps = ['precision', 'rounding', 'toExpNeg', 'toExpPos', 'maxE', 'minE', 'modulo', 'crypto'];\r\n      for (i = 0; i < ps.length;) if (!obj.hasOwnProperty(p = ps[i++])) obj[p] = this[p];\r\n    }\r\n  }\r\n\r\n  Decimal.config(obj);\r\n\r\n  return Decimal;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` divided by `y`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal}\r\n * y {number|string|Decimal}\r\n *\r\n */\r\nfunction div(x, y) {\r\n  return new this(x).div(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural exponential of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal} The power to which to raise the base of the natural log.\r\n *\r\n */\r\nfunction exp(x) {\r\n  return new this(x).exp();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` round to an integer using `ROUND_FLOOR`.\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction floor(x) {\r\n  return finalise(x = new this(x), x.e + 1, 3);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the square root of the sum of the squares of the arguments,\r\n * rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * hypot(a, b, ...) = sqrt(a^2 + b^2 + ...)\r\n *\r\n * arguments {number|string|Decimal}\r\n *\r\n */\r\nfunction hypot() {\r\n  var i, n,\r\n    t = new this(0);\r\n\r\n  external = false;\r\n\r\n  for (i = 0; i < arguments.length;) {\r\n    n = new this(arguments[i++]);\r\n    if (!n.d) {\r\n      if (n.s) {\r\n        external = true;\r\n        return new this(1 / 0);\r\n      }\r\n      t = n;\r\n    } else if (t.d) {\r\n      t = t.plus(n.times(n));\r\n    }\r\n  }\r\n\r\n  external = true;\r\n\r\n  return t.sqrt();\r\n}\r\n\r\n\r\n/*\r\n * Return true if object is a Decimal instance (where Decimal is any Decimal constructor),\r\n * otherwise return false.\r\n *\r\n */\r\nfunction isDecimalInstance(obj) {\r\n  return obj instanceof Decimal || obj && obj.toStringTag === tag || false;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural logarithm of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction ln(x) {\r\n  return new this(x).ln();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the log of `x` to the base `y`, or to base 10 if no base\r\n * is specified, rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * log[y](x)\r\n *\r\n * x {number|string|Decimal} The argument of the logarithm.\r\n * y {number|string|Decimal} The base of the logarithm.\r\n *\r\n */\r\nfunction log(x, y) {\r\n  return new this(x).log(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the base 2 logarithm of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction log2(x) {\r\n  return new this(x).log(2);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the base 10 logarithm of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction log10(x) {\r\n  return new this(x).log(10);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the maximum of the arguments.\r\n *\r\n * arguments {number|string|Decimal}\r\n *\r\n */\r\nfunction max() {\r\n  return maxOrMin(this, arguments, 'lt');\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the minimum of the arguments.\r\n *\r\n * arguments {number|string|Decimal}\r\n *\r\n */\r\nfunction min() {\r\n  return maxOrMin(this, arguments, 'gt');\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` modulo `y`, rounded to `precision` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal}\r\n * y {number|string|Decimal}\r\n *\r\n */\r\nfunction mod(x, y) {\r\n  return new this(x).mod(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` multiplied by `y`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal}\r\n * y {number|string|Decimal}\r\n *\r\n */\r\nfunction mul(x, y) {\r\n  return new this(x).mul(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` raised to the power `y`, rounded to precision\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal} The base.\r\n * y {number|string|Decimal} The exponent.\r\n *\r\n */\r\nfunction pow(x, y) {\r\n  return new this(x).pow(y);\r\n}\r\n\r\n\r\n/*\r\n * Returns a new Decimal with a random value equal to or greater than 0 and less than 1, and with\r\n * `sd`, or `Decimal.precision` if `sd` is omitted, significant digits (or less if trailing zeros\r\n * are produced).\r\n *\r\n * [sd] {number} Significant digits. Integer, 0 to MAX_DIGITS inclusive.\r\n *\r\n */\r\nfunction random(sd) {\r\n  var d, e, k, n,\r\n    i = 0,\r\n    r = new this(1),\r\n    rd = [];\r\n\r\n  if (sd === void 0) sd = this.precision;\r\n  else checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n  k = Math.ceil(sd / LOG_BASE);\r\n\r\n  if (!this.crypto) {\r\n    for (; i < k;) rd[i++] = Math.random() * 1e7 | 0;\r\n\r\n  // Browsers supporting crypto.getRandomValues.\r\n  } else if (crypto.getRandomValues) {\r\n    d = crypto.getRandomValues(new Uint32Array(k));\r\n\r\n    for (; i < k;) {\r\n      n = d[i];\r\n\r\n      // 0 <= n < 4294967296\r\n      // Probability n >= 4.29e9, is 4967296 / 4294967296 = 0.00116 (1 in 865).\r\n      if (n >= 4.29e9) {\r\n        d[i] = crypto.getRandomValues(new Uint32Array(1))[0];\r\n      } else {\r\n\r\n        // 0 <= n <= 4289999999\r\n        // 0 <= (n % 1e7) <= 9999999\r\n        rd[i++] = n % 1e7;\r\n      }\r\n    }\r\n\r\n  // Node.js supporting crypto.randomBytes.\r\n  } else if (crypto.randomBytes) {\r\n\r\n    // buffer\r\n    d = crypto.randomBytes(k *= 4);\r\n\r\n    for (; i < k;) {\r\n\r\n      // 0 <= n < 2147483648\r\n      n = d[i] + (d[i + 1] << 8) + (d[i + 2] << 16) + ((d[i + 3] & 0x7f) << 24);\r\n\r\n      // Probability n >= 2.14e9, is 7483648 / 2147483648 = 0.0035 (1 in 286).\r\n      if (n >= 2.14e9) {\r\n        crypto.randomBytes(4).copy(d, i);\r\n      } else {\r\n\r\n        // 0 <= n <= 2139999999\r\n        // 0 <= (n % 1e7) <= 9999999\r\n        rd.push(n % 1e7);\r\n        i += 4;\r\n      }\r\n    }\r\n\r\n    i = k / 4;\r\n  } else {\r\n    throw Error(cryptoUnavailable);\r\n  }\r\n\r\n  k = rd[--i];\r\n  sd %= LOG_BASE;\r\n\r\n  // Convert trailing digits to zeros according to sd.\r\n  if (k && sd) {\r\n    n = mathpow(10, LOG_BASE - sd);\r\n    rd[i] = (k / n | 0) * n;\r\n  }\r\n\r\n  // Remove trailing words which are zero.\r\n  for (; rd[i] === 0; i--) rd.pop();\r\n\r\n  // Zero?\r\n  if (i < 0) {\r\n    e = 0;\r\n    rd = [0];\r\n  } else {\r\n    e = -1;\r\n\r\n    // Remove leading words which are zero and adjust exponent accordingly.\r\n    for (; rd[0] === 0; e -= LOG_BASE) rd.shift();\r\n\r\n    // Count the digits of the first word of rd to determine leading zeros.\r\n    for (k = 1, n = rd[0]; n >= 10; n /= 10) k++;\r\n\r\n    // Adjust the exponent for leading zeros of the first word of rd.\r\n    if (k < LOG_BASE) e -= LOG_BASE - k;\r\n  }\r\n\r\n  r.e = e;\r\n  r.d = rd;\r\n\r\n  return r;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` rounded to an integer using rounding mode `rounding`.\r\n *\r\n * To emulate `Math.round`, set rounding to 7 (ROUND_HALF_CEIL).\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction round(x) {\r\n  return finalise(x = new this(x), x.e + 1, this.rounding);\r\n}\r\n\r\n\r\n/*\r\n * Return\r\n *   1    if x > 0,\r\n *  -1    if x < 0,\r\n *   0    if x is 0,\r\n *  -0    if x is -0,\r\n *   NaN  otherwise\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction sign(x) {\r\n  x = new this(x);\r\n  return x.d ? (x.d[0] ? x.s : 0 * x.s) : x.s || NaN;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the sine of `x`, rounded to `precision` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal} A value in radians.\r\n *\r\n */\r\nfunction sin(x) {\r\n  return new this(x).sin();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic sine of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal} A value in radians.\r\n *\r\n */\r\nfunction sinh(x) {\r\n  return new this(x).sinh();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the square root of `x`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction sqrt(x) {\r\n  return new this(x).sqrt();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` minus `y`, rounded to `precision` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal}\r\n * y {number|string|Decimal}\r\n *\r\n */\r\nfunction sub(x, y) {\r\n  return new this(x).sub(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the sum of the arguments, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * Only the result is rounded, not the intermediate calculations.\r\n *\r\n * arguments {number|string|Decimal}\r\n *\r\n */\r\nfunction sum() {\r\n  var i = 0,\r\n    args = arguments,\r\n    x = new this(args[i]);\r\n\r\n  external = false;\r\n  for (; x.s && ++i < args.length;) x = x.plus(args[i]);\r\n  external = true;\r\n\r\n  return finalise(x, this.precision, this.rounding);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the tangent of `x`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal} A value in radians.\r\n *\r\n */\r\nfunction tan(x) {\r\n  return new this(x).tan();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic tangent of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|Decimal} A value in radians.\r\n *\r\n */\r\nfunction tanh(x) {\r\n  return new this(x).tanh();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` truncated to an integer.\r\n *\r\n * x {number|string|Decimal}\r\n *\r\n */\r\nfunction trunc(x) {\r\n  return finalise(x = new this(x), x.e + 1, 1);\r\n}\r\n\r\n\r\nP[Symbol.for('nodejs.util.inspect.custom')] = P.toString;\r\nP[Symbol.toStringTag] = 'Decimal';\r\n\r\n// Create and configure initial Decimal constructor.\r\nexport var Decimal = P.constructor = clone(DEFAULTS);\r\n\r\n// Create the internal constants from their string values.\r\nLN10 = new Decimal(LN10);\r\nPI = new Decimal(PI);\r\n\r\nexport default Decimal;\r\n","// This file is auto-generated by ./bin/rails stimulus:manifest:update\n// Run that command whenever you add a new controller or create them with\n// ./bin/rails generate stimulus controllerName\n\nimport { application } from \"./application\"\n\nimport ChartController from \"./chart_controller\"\napplication.register(\"chart\", ChartController)\n\nimport DropdownController from \"./dropdown_controller\"\napplication.register(\"dropdown\", DropdownController)\n\nimport InputValidationController from \"./input_validation_controller\"\napplication.register(\"input-validation\", InputValidationController)\n\nimport NotificationComponentController from \"./notification_component_controller\"\napplication.register(\"notification-component\", NotificationComponentController)\n\nimport NotificationController from \"./notification_controller\"\napplication.register(\"notification\", NotificationController)\n\nimport PersonaFormController from \"./persona_form_controller\"\napplication.register(\"persona-form\", PersonaFormController)\n\nimport PopoverController from \"./popover_controller\"\napplication.register(\"popover\", PopoverController)\n\nimport ScrollableController from \"./scrollable_controller\"\napplication.register(\"scrollable\", ScrollableController)\n\nimport SolicitudController from \"./solicitud_controller\"\napplication.register(\"solicitud\", SolicitudController)\n","import { Controller } from '@hotwired/stimulus';\nimport { useTransition } from 'stimulus-use';\n\n// Connects to data-controller=\"dropdown\"\nexport default class extends Controller {\n  static targets = ['menu'];\n\n  connect() {\n    useTransition(this, {\n      element: this.menuTarget,\n    });\n  }\n\n  toggle() {\n    this.toggleTransition();\n  }\n\n  hide(event) {\n    if (\n      !this.element.contains(event.target) &&\n      !this.menuTarget.classList.contains('hidden')\n    ) {\n      this.leave();\n    }\n  }\n}\n","import { Controller } from '@hotwired/stimulus';\n\n// Connects to data-controller=\"input-validation\"\nexport default class extends Controller {\n  static targets = ['errorContainer'];\n\n  async validate(event) {\n    const formData = await event.detail.formSubmission;\n    const { success, fetchResponse } = formData.result;\n    if (success) return;\n    const res = await fetchResponse.responseText;\n    console.log(res);\n    const { errors } = JSON.parse(res);\n\n    this.errorContainerTargets.forEach((errorContainer) => {\n      const errorType = errorContainer.dataset.errorType;\n      const errorMsg = extractError({ errors, type: errorType });\n\n      errorContainer.innerText = errorMsg || '';\n    });\n  }\n}\n\nfunction extractError({ errors, type }) {\n  if (!errors || !Array.isArray(errors)) return;\n\n  const foundError = errors.find(\n    (error) => error.type.toLowerCase() === type.toLowerCase()\n  );\n  return foundError?.detail;\n}\n","import { Controller } from '@hotwired/stimulus';\n\n// Connects to data-controller=\"notification\"\nexport default class extends Controller {\n  static targets = ['buttons', 'countdown'];\n\n  connect() {\n    const timeoutSeconds = parseInt(this.data.get('timeout'));\n\n    if (!this.isPreview) {\n      setTimeout(() => {\n        this.element.classList.remove('hidden');\n        this.element.classList.add(\n          'transform',\n          'ease-out',\n          'duration-300',\n          'transition',\n          'translate-y-2',\n          'opacity-0',\n          'sm:translate-y-0',\n          'sm:translate-x-2'\n        );\n\n        // Trigger transition\n        setTimeout(() => {\n          this.element.classList.add(\n            'translate-y-0',\n            'opacity-100',\n            'sm:translate-x-0'\n          );\n        }, 100);\n\n        // Trigger countdown\n        if (this.hasCountdownTarget) {\n          this.countdownTarget.style.animation =\n            'notification-countdown linear ' + timeoutSeconds + 's';\n        }\n      }, 500);\n      this.timeoutId = setTimeout(() => {\n        this.close();\n      }, timeoutSeconds * 1000 + 500);\n    }\n  }\n\n  run(e) {\n    e.preventDefault();\n    this.stop();\n    let _this = this;\n    this.buttonsTarget.innerHTML =\n      '<span class=\"text-sm leading-5 font-medium text-grey-700\">Processing...</span>';\n\n    // Call the action\n    fetch(this.data.get('action-url'), {\n      method: this.data.get('action-method').toUpperCase(),\n      dataType: 'script',\n      credentials: 'include',\n      headers: {\n        'X-CSRF-Token': this.csrfToken,\n      },\n    }).then(function (response) {\n      let content;\n\n      // Example of the response, content should be provided from the controller\n      if (response.status === 200) {\n        content =\n          '<span class=\"text-sm leading-5 font-medium text-green-700\">Done!</span>';\n      } else {\n        content =\n          '<span class=\"text-sm leading-5 font-medium text-red-700\">Error!</span>';\n      }\n\n      // Set new content\n      _this.buttonsTarget.innerHTML = content;\n\n      // Close\n      setTimeout(() => {\n        _this.close();\n      }, 1000);\n    });\n  }\n\n  stop() {\n    clearTimeout(this.timeoutId);\n    this.timeoutId = null;\n  }\n\n  close() {\n    // Remove with transition\n    this.element.classList.remove(\n      'transform',\n      'ease-out',\n      'duration-300',\n      'translate-y-2',\n      'opacity-0',\n      'sm:translate-y-0',\n      'sm:translate-x-2',\n      'translate-y-0',\n      'sm:translate-x-0'\n    );\n    this.element.classList.add('ease-in', 'duration-100');\n\n    // Trigger transition\n    setTimeout(() => {\n      this.element.classList.add('opacity-0');\n    }, 100);\n\n    // Remove element after transition\n    setTimeout(() => {\n      this.element.remove();\n    }, 300);\n  }\n\n  get isPreview() {\n    return document.documentElement.hasAttribute('data-turbolinks-preview');\n  }\n\n  get csrfToken() {\n    const element = document.head.querySelector('meta[name=\"csrf-token\"]');\n    return element.getAttribute('content');\n  }\n}\n","import { Controller } from '@hotwired/stimulus';\nimport Decimal from 'decimal.js';\n\nexport default class extends Controller {\n  static targets = [\n    'valorTimbre',\n    'cantidadSolicitada',\n    'montoPagar',\n    'tipoTimbre',\n  ];\n\n  fetchTipoTimbreValue() {\n    const timbresUrl = new URL(this.data.get('tipoTimbreUrl'));\n    timbresUrl.searchParams.append('id', this.tipoTimbre);\n\n    fetch(timbresUrl)\n      .then((response) => response.json())\n      .then((data) => {\n        if (data.valor) {\n          this.valorTimbreTarget.value = data.valor;\n        }\n      })\n      .catch(() => {});\n  }\n\n  calcularMontoPagar() {\n    if (\n      this.valorTimbre.greaterThanOrEqualTo(0) &&\n      this.cantidadSolicitada.greaterThanOrEqualTo(0)\n    ) {\n      this.montoPagarTarget.value = this.valorTimbre\n        .times(this.cantidadSolicitada)\n        .toDP(2)\n        .toString();\n    } else {\n      this.montoPagarTarget.value = new Decimal(0).toDP(2).toString(2);\n    }\n  }\n\n  // private\n\n  get tipoTimbre() {\n    let e = this.tipoTimbreTarget;\n    return e.options[e.selectedIndex].value;\n  }\n\n  get valorTimbre() {\n    if (Number.isNaN(parseInt(this.valorTimbreTarget.value))) {\n      return new Decimal('0');\n    }\n    return new Decimal(this.valorTimbreTarget.value);\n  }\n  get cantidadSolicitada() {\n    if (Number.isNaN(parseInt(this.cantidadSolicitadaTarget.value))) {\n      return new Decimal('0');\n    }\n    return new Decimal(this.cantidadSolicitadaTarget.value);\n  }\n  set montoPagar(value) {\n    this.montoPagarTarget.value = value.toDP(2);\n  }\n}\n","const Pagy = (() => {\n    // The observer instance for responsive navs\n    const rjsObserver = new ResizeObserver(entries => entries.forEach(e => e.target.querySelectorAll(\".pagy-rjs\").forEach(el => el.pagyRender())));\n    // Init the *_nav_js helpers\n    const initNav = (el, [tags, sequels, labelSequels, trimParam]) => {\n        const container = el.parentElement ?? el;\n        const widths = Object.keys(sequels).map(w => parseInt(w)).sort((a, b) => b - a);\n        let lastWidth = -1;\n        const fillIn = (link, page, label) => link.replace(/__pagy_page__/g, page).replace(/__pagy_label__/g, label);\n        (el.pagyRender = function () {\n            const width = widths.find(w => w < container.clientWidth) || 0;\n            if (width === lastWidth) {\n                return;\n            } // no change: abort\n            let html = tags.before;\n            const series = sequels[width.toString()];\n            const labels = labelSequels?.[width.toString()] ?? series.map(l => l.toString());\n            for (const i in series) {\n                const item = series[i];\n                const label = labels[i];\n                if (typeof trimParam === \"string\" && item === 1) {\n                    html += trim(fillIn(tags.link, item.toString(), label), trimParam);\n                }\n                else if (typeof item === \"number\") {\n                    html += fillIn(tags.link, item.toString(), label);\n                }\n                else if (item === \"gap\") {\n                    html += tags.gap;\n                }\n                else { // active page\n                    html += fillIn(tags.active, item, label);\n                }\n            }\n            html += tags.after; // eslint-disable-line align-assignments/align-assignments\n            el.innerHTML = \"\";\n            el.insertAdjacentHTML(\"afterbegin\", html);\n            lastWidth = width;\n        })();\n        if (el.classList.contains(\"pagy-rjs\")) {\n            rjsObserver.observe(container);\n        }\n    };\n    // Init the *_combo_nav_js helpers\n    const initCombo = (el, [link, trimParam]) => initInput(el, inputValue => [inputValue, link.replace(/__pagy_page__/, inputValue)], trimParam);\n    // Init the items_selector_js helper\n    const initSelector = (el, [from, link, trimParam]) => {\n        initInput(el, inputValue => {\n            const page = Math.max(Math.ceil(from / parseInt(inputValue)), 1).toString();\n            const html = link.replace(/__pagy_page__/, page).replace(/__pagy_items__/, inputValue);\n            return [page, html];\n        }, trimParam);\n    };\n    // Init the input element\n    const initInput = (el, getVars, trimParam) => {\n        const input = el.querySelector(\"input\");\n        const initial = input.value;\n        const action = function () {\n            if (input.value === initial) {\n                return;\n            } // not changed\n            const [min, val, max] = [input.min, input.value, input.max].map(n => parseInt(n) || 0);\n            if (val < min || val > max) { // reset invalid/out-of-range\n                input.value = initial;\n                input.select();\n                return;\n            }\n            let [page, html] = getVars(input.value); // eslint-disable-line prefer-const\n            if (typeof trimParam === \"string\" && page === \"1\") {\n                html = trim(html, trimParam);\n            }\n            el.insertAdjacentHTML(\"afterbegin\", html);\n            el.querySelector(\"a\").click();\n        };\n        [\"change\", \"focus\"].forEach(e => input.addEventListener(e, input.select)); // auto-select\n        input.addEventListener(\"focusout\", action); // trigger action\n        input.addEventListener(\"keypress\", e => { if (e.key === \"Enter\") {\n            action();\n        } }); // trigger action\n    };\n    // Trim the ${page-param}=1 params in links\n    const trim = (link, param) => link.replace(new RegExp(`(\\\\?|&amp;)${param}=1\\\\b(?!&amp;)|\\\\b${param}=1&amp;`), \"\");\n    // Public interface\n    return {\n        version: \"6.0.2\",\n        // Scan for elements with a \"data-pagy\" attribute and call their init functions with the decoded args\n        init(arg) {\n            const target = arg instanceof Element ? arg : document;\n            const elements = target.querySelectorAll(\"[data-pagy]\");\n            for (const el of elements) {\n                try {\n                    const uint8array = Uint8Array.from(atob(el.getAttribute(\"data-pagy\")), c => c.charCodeAt(0));\n                    const [keyword, ...args] = JSON.parse((new TextDecoder()).decode(uint8array)); // base64-utf8 -> JSON -> Array\n                    if (keyword === \"nav\") {\n                        initNav(el, args);\n                    }\n                    else if (keyword === \"combo\") {\n                        initCombo(el, args);\n                    }\n                    else if (keyword === \"selector\") {\n                        initSelector(el, args);\n                    }\n                    else {\n                        console.warn(\"Skipped Pagy.init() for: %o\\nUnknown keyword '%s'\", el, keyword);\n                    }\n                }\n                catch (err) {\n                    console.warn(\"Skipped Pagy.init() for: %o\\n%s\", el, err);\n                }\n            }\n        }\n    };\n})();\nexport default Pagy;\n","// Entry point for the build script in your package.json\nimport '@hotwired/turbo-rails';\nimport './controllers';\nimport Pagy from 'pagy-module';\nimport 'flowbite';\nimport '@popperjs/core';\n\nwindow.addEventListener('turbo:load', Pagy.init);\n"],"names":["logger","self","console","WebSocket","log","messages","this","enabled","push","Date","now","adapters","getTime","secondsSince","time","ConnectionMonitor","constructor","connection","visibilityDidChange","bind","reconnectAttempts","start","isRunning","startedAt","stoppedAt","startPolling","addEventListener","staleThreshold","stop","stopPolling","removeEventListener","recordPing","pingedAt","recordConnect","disconnectedAt","recordDisconnect","poll","clearTimeout","pollTimeout","setTimeout","reconnectIfStale","getPollInterval","reconnectionBackoffRate","Math","pow","min","random","connectionIsStale","refreshedAt","disconnectedRecently","reopen","document","visibilityState","isOpen","message_types","protocols","supportedProtocols","slice","length","indexOf","Connection","consumer","open","subscriptions","monitor","disconnected","send","data","webSocket","JSON","stringify","isActive","getState","uninstallEventHandlers","url","installEventHandlers","close","allowReconnect","error","reopenDelay","getProtocol","protocol","isState","isProtocolSupported","call","states","state","readyState","toLowerCase","eventName","events","handler","prototype","message","event","identifier","reason","reconnect","type","parse","welcome","reload","disconnect","ping","confirmation","confirmSubscription","notify","rejection","reject","notifyAll","willAttemptReconnect","Subscription","params","mixin","object","properties","key","value","extend","perform","action","command","unsubscribe","remove","pendingSubscriptions","guarantee","subscription","startGuaranteeing","forget","filter","s","stopGuaranteeing","retrySubscribing","retryTimeout","map","subscribe","Subscriptions","guarantor","create","channelName","channel","add","ensureActiveConnection","findAll","sendCommand","callbackName","args","undefined","Consumer","_url","createWebSocketURL","connect","test","a","createElement","href","replace","createConsumer","getConfig","name","element","head","querySelector","getAttribute","_toConsumableArray","arr","Array","isArray","_arrayLikeToArray","_arrayWithoutHoles","iter","Symbol","iterator","from","_iterableToArray","o","minLen","n","Object","toString","_unsupportedIterableToArray","TypeError","_nonIterableSpread","len","i","arr2","ownKeys","enumerableOnly","keys","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","enumerable","apply","_objectSpread","target","arguments","source","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","obj","configurable","writable","_classCallCheck","instance","Constructor","_defineProperties","props","descriptor","Default","alwaysOpen","activeClasses","inactiveClasses","onOpen","onClose","onToggle","Accordion","items","options","_items","_options","_init","protoProps","_this","item","active","id","triggerEl","toggle","_item$triggerEl$class","_item$triggerEl$class2","_this2","getItem","_i$triggerEl$classLis","_i$triggerEl$classLis2","classList","split","targetEl","setAttribute","iconEl","_item$triggerEl$class3","_item$triggerEl$class4","initAccordion","querySelectorAll","accordionEl","el","collapse_ownKeys","collapse_objectSpread","collapse_defineProperty","collapse_classCallCheck","collapse_defineProperties","window","collapse_Default","onCollapse","onExpand","Collapse","_targetEl","_triggerEl","_visible","hasAttribute","contains","collapse","expand","initCollapse","getElementById","carousel_toConsumableArray","carousel_arrayLikeToArray","carousel_arrayWithoutHoles","carousel_iterableToArray","carousel_unsupportedIterableToArray","carousel_nonIterableSpread","carousel_ownKeys","carousel_objectSpread","carousel_defineProperty","carousel_classCallCheck","carousel_defineProperties","carousel_Default","defaultPosition","indicators","interval","onNext","onPrev","onChange","Carousel","_activeItem","_indicators","_interval","_getActiveItem","slideTo","position","indicator","nextItem","rotationItems","_rotate","_setActiveItem","pause","cycle","activeItem","prevItem","left","middle","right","setInterval","next","clearInterval","_this$_indicators$pos","_this$_indicators$pos2","_this3","_indicator$el$classLi","_indicator$el$classLi2","initCarousel","carouselEl","slide","carouselItemEl","indicatorEl","carousel","carouselNextEl","carouselPrevEl","prev","dismiss_ownKeys","dismiss_objectSpread","dismiss_defineProperty","dismiss_classCallCheck","dismiss_defineProperties","dismiss_Default","transition","duration","timing","onHide","Dismiss","hide","concat","initDismiss","getWindow","node","ownerDocument","defaultView","isElement","Element","isHTMLElement","HTMLElement","isShadowRoot","ShadowRoot","math_max","max","math_min","round","getBoundingClientRect","includeScale","rect","scaleX","scaleY","offsetHeight","offsetWidth","width","height","top","bottom","x","y","getWindowScroll","win","scrollLeft","pageXOffset","scrollTop","pageYOffset","getNodeName","nodeName","getDocumentElement","documentElement","getWindowScrollBarX","getComputedStyle","isScrollParent","_getComputedStyle","overflow","overflowX","overflowY","getCompositeRect","elementOrVirtualElement","offsetParent","isFixed","isOffsetParentAnElement","offsetParentIsScaled","isElementScaled","scroll","offsets","clientLeft","clientTop","getLayoutRect","clientRect","abs","offsetLeft","offsetTop","getParentNode","assignedSlot","parentNode","host","getScrollParent","body","listScrollParents","list","_element$ownerDocumen","scrollParent","isBody","visualViewport","updatedList","isTableElement","getTrueOffsetParent","getOffsetParent","isFirefox","navigator","userAgent","currentNode","css","transform","perspective","contain","willChange","getContainingBlock","enums_top","auto","basePlacements","end","viewport","popper","variationPlacements","reduce","acc","placement","enums_placements","modifierPhases","order","modifiers","Map","visited","Set","result","sort","modifier","requires","requiresIfExists","dep","has","depModifier","get","set","DEFAULT_OPTIONS","strategy","areValidElements","_len","_key","some","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","reference","fn","pending","orderedModifiers","assign","modifiersData","elements","attributes","styles","effectCleanupFns","isDestroyed","setOptions","setOptionsAction","cleanupModifierEffects","scrollParents","contextElement","merged","phase","orderModifiers","current","existing","m","_ref3","_ref3$options","effect","cleanupFn","update","forceUpdate","_state$elements","rects","reset","index","_state$orderedModifie","_state$orderedModifie2","Promise","resolve","then","destroy","onFirstUpdate","passive","getBasePlacement","getVariation","getMainAxisFromPlacement","computeOffsets","_ref","basePlacement","variation","commonX","commonY","mainAxis","unsetSides","mapToStyles","_ref2","_Object$assign2","popperRect","gpuAcceleration","adaptive","roundOffsets","_offsets$x","_offsets$y","hasX","hasOwnProperty","hasY","sideX","sideY","heightProp","widthProp","_Object$assign","commonStyles","_ref4","dpr","devicePixelRatio","roundOffsetsByDPR","hash","getOppositePlacement","matched","getOppositeVariationPlacement_hash","getOppositeVariationPlacement","parent","child","rootNode","getRootNode","isSameNode","rectToClientRect","getClientRectFromMixedType","clippingParent","html","clientWidth","clientHeight","getViewportRect","getInnerBoundingClientRect","winScroll","scrollWidth","scrollHeight","direction","getDocumentRect","mergePaddingObject","paddingObject","expandToHashMap","hashMap","detectOverflow","_options$placement","_options$boundary","boundary","_options$rootBoundary","rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","padding","altContext","clippingClientRect","mainClippingParents","clippingParents","clipperElement","getClippingParents","firstClippingParent","clippingRect","accRect","getClippingRect","referenceClientRect","popperOffsets","popperClientRect","elementClientRect","overflowOffsets","offsetData","offset","multiply","axis","within","getSideOffsets","preventedOffsets","isAnySideFullyClipped","side","popper_createPopper","_options$scroll","_options$resize","resize","_ref5","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","arrow","style","removeAttribute","initialStyles","margin","property","attribute","_options$offset","invertDistance","skidding","distance","distanceAndSkiddingToXY","_data$state$placement","_skip","_options$mainAxis","checkMainAxis","_options$altAxis","altAxis","checkAltAxis","specifiedFallbackPlacements","fallbackPlacements","_options$flipVariatio","flipVariations","allowedAutoPlacements","preferredPlacement","oppositePlacement","getExpandedFallbackPlacements","placements","_options$allowedAutoP","allowedPlacements","overflows","b","computeAutoPlacement","referenceRect","checksMap","makeFallbackChecks","firstFittingPlacement","_basePlacement","isStartVariation","isVertical","mainVariationSide","altVariationSide","checks","every","check","_loop","_i","fittingPlacement","find","_options$tether","tether","_options$tetherOffset","tetherOffset","isBasePlacement","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","_offsetModifierState$","mainSide","altSide","additive","maxLen","arrowElement","arrowRect","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","arrowOffsetParent","clientOffset","offsetModifierValue","tetherMax","preventedOffset","_offsetModifierState$2","_mainSide","_altSide","_offset","_min","_max","isOriginSide","_offsetModifierValue","_tetherMin","_tetherMax","_preventedOffset","v","withinMaxClamp","_state$modifiersData$","toPaddingObject","minProp","maxProp","endDiff","startDiff","clientSize","centerToReference","center","axisProp","centerOffset","_options$element","preventOverflow","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","dropdown_toConsumableArray","dropdown_arrayLikeToArray","dropdown_arrayWithoutHoles","dropdown_iterableToArray","dropdown_unsupportedIterableToArray","dropdown_nonIterableSpread","dropdown_ownKeys","dropdown_objectSpread","dropdown_defineProperty","dropdown_classCallCheck","dropdown_defineProperties","dropdown_Default","triggerType","onShow","Dropdown","targetElement","triggerElement","_popperInstance","_createPopperInstace","ev","clickedEl","_handleClickOutside","show","initDropdown","modal_arrayLikeToArray","modal_ownKeys","modal_objectSpread","modal_defineProperty","modal_classCallCheck","modal_defineProperties","modal_Default","backdropClasses","Modal","_isHidden","_getPlacementClasses","c","_backdropEl$classList","backdropEl","modal_arrayWithoutHoles","modal_iterableToArray","modal_unsupportedIterableToArray","modal_nonIterableSpread","append","_createBackdrop","_destroyBackdropEl","getModalInstance","instances","modalInstance","initModal","modalInstances","modalId","modalEl","modal","drawer_arrayLikeToArray","drawer_ownKeys","drawer_objectSpread","drawer_defineProperty","drawer_classCallCheck","drawer_defineProperties","drawer_Default","bodyScrolling","backdrop","edge","edgeOffset","Drawer","base","inactive","isVisible","_this4","drawer_arrayWithoutHoles","drawer_iterableToArray","drawer_unsupportedIterableToArray","drawer_nonIterableSpread","getDrawerInstance","drawerInstance","initDrawer","drawerInstances","drawerId","drawer","tabs_toConsumableArray","tabs_arrayLikeToArray","tabs_arrayWithoutHoles","tabs_iterableToArray","tabs_unsupportedIterableToArray","tabs_nonIterableSpread","tabs_ownKeys","tabs_objectSpread","tabs_defineProperty","tabs_classCallCheck","tabs_defineProperties","tabs_Default","defaultTabId","Tabs","_activeTab","getTab","_setActiveTab","tab","t","_tab$triggerEl$classL","_tab$triggerEl$classL2","forceShow","_t$triggerEl$classLis","_t$triggerEl$classLis2","initTabs","tabElements","tooltip_toConsumableArray","tooltip_arrayLikeToArray","tooltip_arrayWithoutHoles","tooltip_iterableToArray","tooltip_unsupportedIterableToArray","tooltip_nonIterableSpread","tooltip_ownKeys","tooltip_objectSpread","tooltip_defineProperty","tooltip_classCallCheck","tooltip_defineProperties","tooltip_Default","Tooltip","triggerEvents","_getTriggerEvents","showEvents","hideEvents","initTooltip","popover_toConsumableArray","popover_arrayLikeToArray","popover_arrayWithoutHoles","popover_iterableToArray","popover_unsupportedIterableToArray","popover_nonIterableSpread","popover_ownKeys","popover_objectSpread","popover_defineProperty","popover_classCallCheck","popover_defineProperties","popover_Default","Popover","matches","initPopover","parseInt","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","d","definition","prop","r","toStringTag","Reflect","customElements","polyfillWrapFlushCallback","BuiltInHTMLElement","construct","setPrototypeOf","raise","errorConstructor","requestSubmit","submitter","form","DOMException","validateSubmitter","click","hidden","appendChild","removeChild","HTMLFormElement","submittersByForm","WeakMap","clickCaptured","Node","parentElement","candidate","closest","findSubmitterFromClickTarget","FrameLoadingStyle","FetchMethod","FormSubmissionState","FormEnctype","TimingMetric","VisitState","Event","vendor","SubmitEvent","FrameElement","super","loaded","delegate","delegateConstructor","observedAttributes","connectedCallback","disconnectedCallback","src","attributeChangedCallback","loadingStyleChanged","completeChanged","sourceURLChanged","disabledChanged","loading","lazy","eager","disabled","autoscroll","complete","isLoading","isPreview","_a","_b","expandURL","locatable","URL","baseURI","getAnchor","anchorMatch","match","getAction","locationIsVisitable","location","rootLocation","baseURL","prefix","origin","pathname","endsWith","getPrefix","startsWith","isPrefixedBy","getPathComponents","getLastPathComponent","getRequestURL","anchor","toCacheKey","FetchResponse","response","succeeded","ok","failed","clientError","statusCode","serverError","redirected","isHTML","contentType","status","header","responseText","clone","text","responseHTML","headers","isAction","activateScriptElement","createdScriptElement","cspNonce","getMetaContent","nonce","textContent","async","destinationElement","sourceElement","copyElementAttributes","dispatch","cancelable","detail","CustomEvent","bubbles","isConnected","dispatchEvent","nextAnimationFrame","requestAnimationFrame","parseHTMLDocument","DOMParser","parseFromString","unindent","strings","values","lines","string","interpolate","indent","line","join","uuid","_","floor","attributeName","markAsBusy","localName","clearBusyState","waitForLoad","timeoutInMilliseconds","onComplete","once","getHistoryMethodForAction","history","replaceState","pushState","getMetaElement","content","FetchRequest","method","URLSearchParams","abortController","AbortController","resolveRequestPromise","_value","defaultHeaders","searchParams","entries","cancel","abort","fetchOptions","prepareHeadersForRequest","allowRequestToBeIntercepted","requestStarted","fetch","receive","willDelegateErrorHandling","requestErrored","requestFinished","fetchResponse","defaultPrevented","requestPreventedHandlingResponse","requestSucceededWithResponse","requestFailedWithResponse","toUpperCase","credentials","redirect","isIdempotent","signal","abortSignal","referrer","Accept","acceptResponseType","mimeType","requestInterception","resume","request","AppearanceObserver","started","intersect","lastEntry","isIntersecting","elementAppearedInViewport","intersectionObserver","IntersectionObserver","observe","unobserve","StreamMessage","fragment","streamElement","importNode","inertScriptElement","templateElement","replaceWith","importStreamElements","static","template","innerHTML","createDocumentFragment","FormSubmission","formElement","mustRedirect","initialized","formData","FormData","buildFormData","File","search","mergeFormDataEntries","fetchRequest","_element","_submitter","confirm","post","put","patch","delete","fetchMethodFromString","formElementAction","enctype","urlEncoded","stringFormData","encoding","multipart","plain","formEnctypeFromString","requesting","confirmationMessage","confirmMethod","stopping","stopped","token","cookieName","cookie","decodeURIComponent","getCookieValue","requestAcceptsTurboStreamResponse","_request","waiting","formSubmission","formSubmissionStarted","success","formSubmissionFailedWithResponse","requestMustRedirect","responseSucceededWithoutRedirect","Error","formSubmissionErrored","receiving","formSubmissionSucceededWithResponse","formSubmissionFinished","Snapshot","activeElement","children","hasAnchor","getElementForAnchor","firstAutofocusableElement","permanentElements","queryPermanentElementsAll","getPermanentElementById","getPermanentElementMapForSnapshot","snapshot","permanentElementMap","currentPermanentElement","newPermanentElement","FormSubmitObserver","eventTarget","submitCaptured","submitBubbled","submissionDoesNotDismissDialog","getElementsByName","HTMLIFrameElement","submissionDoesNotTargetIFrame","willSubmitForm","preventDefault","formSubmitted","View","resolveRenderPromise","resolveInterceptionPromise","scrollToAnchor","scrollToElement","focusElement","scrollToPosition","scrollToAnchorFromLocation","scrollIntoView","focus","scrollRoot","scrollTo","scrollToTop","renderer","shouldRender","newSnapshot","renderPromise","prepareToRenderSnapshot","renderInterception","render","renderElement","allowsImmediateRender","renderSnapshot","viewRenderedSnapshot","preloadOnLoadLinksForView","finishRenderingSnapshot","invalidate","reloadReason","viewInvalidated","markAsPreview","prepareToRender","finishRendering","FrameView","LinkClickObserver","clickBubbled","MouseEvent","clickEventIsSignificant","composedPath","link","findLinkFromClickTarget","doesNotTargetIFrame","getLocationForLink","willFollowLinkToLocation","followedLinkToLocation","isContentEditable","which","altKey","ctrlKey","metaKey","shiftKey","FormLinkClickObserver","linkClickObserver","originalEvent","willSubmitFormLinkToLocation","turboFrame","turboAction","turboConfirm","submittedFormLinkToLocation","Bardo","callback","bardo","enter","leave","enteringBardo","replaceNewPermanentElementWithPlaceholder","replaceCurrentPermanentElementWithClone","replacePlaceholderWithPermanentElement","leavingBardo","permanentElement","placeholder","createPlaceholderForPermanentElement","cloneNode","getPlaceholderById","placeholders","Renderer","currentSnapshot","willRender","promise","resolvingFunctions","preservingPermanentElements","focusFirstAutofocusableElement","connectedSnapshot","elementIsFocusable","currentElement","newElement","FrameRenderer","destinationRange","createRange","selectNodeContents","deleteContents","frameElement","sourceRange","extractContents","loadFrameElement","scrollFrameIntoView","activateScriptElements","willRenderFrame","firstElementChild","block","behavior","defaultValue","readScrollBehavior","newScriptElements","activatedScriptElement","ProgressBar","hiding","visible","trickle","setValue","stylesheetElement","createStylesheetElement","progressElement","createProgressElement","installStylesheetElement","defaultCSS","animationDuration","installProgressElement","startTrickling","fadeProgressElement","uninstallProgressElement","stopTrickling","refresh","insertBefore","firstChild","opacity","trickleInterval","className","HeadSnapshot","detailsByOuterHTML","elementIsNoscript","elementWithoutNonce","outerHTML","details","elementType","tracked","elementIsTracked","trackedElementSignature","getScriptElementsNotInSnapshot","getElementsMatchingTypeNotInSnapshot","getStylesheetElementsNotInSnapshot","matchedType","provisionalElements","getMetaValue","findMetaElementByName","elementIsMetaElementWithName","elementIsScript","tagName","elementIsStylesheet","PageSnapshot","headSnapshot","fromDocument","clonedElement","selectElements","clonedSelectElements","option","selectedOptions","selected","clonedPasswordInput","headElement","getSetting","cacheControlValue","isPreviewable","isCacheable","isVisitable","historyChanged","visitCachedSnapshot","updateHistory","shouldCacheSnapshot","acceptsStreamResponse","SystemStatusCode","PageStage","Visit","restorationIdentifier","timingMetrics","followedRedirect","scrolled","snapshotCached","snapshotHTML","isSamePage","locationWithActionIsSamePage","adapter","view","restorationData","getRestorationDataForIdentifier","silent","recordTimingMetric","visitStart","visitStarted","cancelRender","canceled","visitEnd","completed","followRedirect","visitCompleted","fail","visitFailed","changeHistory","issueRequest","hasPreloadedResponse","simulateRequest","shouldIssueRequest","startRequest","recordResponse","finishRequest","requestStart","visitRequestStarted","isSuccessful","visitRequestCompleted","visitRequestFailedWithStatusCode","requestEnd","visitRequestFinished","loadResponse","cacheSnapshot","renderPage","fromHTMLString","performScroll","visitRendered","renderError","getCachedSnapshot","getCachedSnapshotForLocation","getPreloadedSnapshot","hasCachedSnapshot","loadCachedSnapshot","redirectedToLocation","visitProposedToLocation","goToSamePageAnchor","_response","contentTypeMismatch","_error","networkFailure","forceReloaded","scrollToRestoredPosition","visitScrolledToSamePageLocation","lastRenderedLocation","scrollPosition","metric","getTimingMetrics","frame","cancelAnimationFrame","BrowserAdapter","session","progressBar","showProgressBar","startVisit","visit","showVisitProgressBarAfterDelay","timeoutFailure","context","_visit","hideVisitProgressBar","pageInvalidated","_formSubmission","showFormProgressBarAfterDelay","hideFormProgressBar","visitProgressBarTimeout","progressBarDelay","formProgressBarTimeout","CacheObserver","removeStaleElements","_event","staleElements","FrameRedirector","formSubmitObserver","shouldRedirect","frameAllowsVisitingLocation","findFrameElement","shouldSubmit","meta","submissionIsNavigatable","elementIsNavigatable","History","pageLoaded","onPopState","shouldHandlePopState","turbo","historyPoppedToLocationWithRestorationIdentifier","onPageLoad","updateRestorationData","additionalData","assumeControlOfScrollRestoration","previousScrollRestoration","scrollRestoration","relinquishControlOfScrollRestoration","pageIsLoaded","Navigator","proposeVisit","allowsVisitingLocationWithAction","lastVisit","currentVisit","submitForm","clearSnapshotCache","visitOptions","getActionForFormSubmission","lastLocation","currentAnchor","isRestorationToTop","oldURL","newURL","PageObserver","stage","initial","interpretReadyState","pageIsInteractive","pageIsComplete","pageWillUnload","interactive","pageBecameInteractive","ScrollObserver","onScroll","updatePosition","scrollPositionChanged","StreamMessageRenderer","permanentElementsInDocument","permanentElementInDocument","elementInStream","getPermanentElementMapForFragment","StreamObserver","sources","inspectFetchResponse","fetchResponseFromEvent","fetchResponseIsStream","receiveMessageResponse","receiveMessageEvent","receiveMessageHTML","connectStreamSource","streamSourceIsConnected","disconnectStreamSource","receivedMessageFromStream","wrap","ErrorRenderer","replaceChild","replaceHeadAndBody","newHead","replaceableElement","scriptElements","PageRenderer","HTMLBodyElement","trackedElementsAreIdentical","mergeHead","replaceBody","currentHeadSnapshot","newHeadSnapshot","newStylesheetElements","copyNewHeadStylesheetElements","copyNewHeadScriptElements","removeCurrentHeadProvisionalElements","copyNewHeadProvisionalElements","activateNewBody","assignNewBody","loadingElements","newHeadStylesheetElements","all","newHeadScriptElements","currentHeadProvisionalElements","newHeadProvisionalElements","adoptNode","activateNewBodyScriptElements","newBodyScriptElements","SnapshotCache","size","snapshots","read","touch","write","clear","splice","unshift","trim","PageView","snapshotCache","viewWillCacheSnapshot","cachedSnapshot","fromElement","Preloader","selector","preloadURL","extendURLWithDeprecatedProperties","deprecatedLocationPropertyDescriptors","absoluteURL","StreamActions","after","targetElements","e","templateContent","nextSibling","removeDuplicateTargetChildren","before","prepend","replaceChildren","preloader","pageObserver","cacheObserver","scrollObserver","streamObserver","formLinkClickObserver","frameRedirector","streamMessageRenderer","drive","formMode","disable","registerAdapter","renderStreamMessage","clearCache","setProgressBarDelay","delay","setFormMode","mode","applicationAllowsFollowingLinkToLocation","getActionForLink","applicationAllowsVisitingLocation","notifyApplicationAfterVisitingLocation","notifyApplicationAfterPageLoad","notifyApplicationAfterVisitingSamePageLocation","notifyApplicationBeforeCachingSnapshot","notifyApplicationBeforeRender","_snapshot","_isPreview","notifyApplicationAfterRender","frameLoaded","notifyApplicationAfterFrameLoad","frameRendered","notifyApplicationAfterFrameRender","notifyApplicationAfterClickingLinkToLocation","notifyApplicationBeforeVisitingLocation","newBody","HashChangeEvent","submitterIsNavigatable","container","withinFrame","cache","resetCacheControl","setCacheControl","exemptPageFromCache","exemptPageFromPreview","setMetaContent","navigator$1","Turbo","freeze","__proto__","warn","setConfirmMethod","getFrameElementById","activateElement","currentURL","urlsAreEqual","StreamElement","performAction","beforeRenderEvent","duplicateChildren","existingChildren","flatMap","newChildrenIds","includes","actionFunction","targetElementsById","targets","targetElementsByQuery","HTMLTemplateElement","description","newStream","StreamSourceElement","streamSource","EventSource","setConsumer","newConsumer","walk","RegExp","fetchResponseLoaded","_fetchResponse","currentFetchRequest","resolveVisitPromise","connected","hasBeenLoaded","ignoredAttributes","previousFrameElement","appearanceObserver","loadingStyle","loadSourceURL","isIgnoringChangesTo","sourceURL","newFrameElement","extractForeignFrameElement","willHandleFrameMissingFromResponse","visitResponse","shouldInterceptNavigation","_location","navigateFrame","currentNavigationElement","proposeVisitIfNavigatedWithAction","newFrame","_newElement","withCurrentNavigationElement","getVisitAction","Response","wrapped","CSS","escape","formActionIsVisitable","ignoringChangesToAttribute","define","currentScript","TurboCableStreamSourceElement","getConsumer","subscribeTo","received","dispatchMessageEvent","MessageEvent","signed_stream_name","dataset","formMethod","EventListener","eventOptions","unorderedBindings","bindingConnected","binding","bindingDisconnected","handleEvent","extendedEvent","stopImmediatePropagation","immediatePropagationStopped","extendEvent","bindings","leftIndex","rightIndex","Dispatcher","application","eventListenerMaps","eventListeners","eventListener","listeners","fetchEventListenerForBinding","handleError","fetchEventListener","eventListenerMap","fetchEventListenerMapForEventTarget","cacheKey","createEventListener","parts","descriptorPattern","camelize","char","capitalize","charAt","dasherize","defaultEventNames","typecast","o_O","Binding","willBeInvokedByEvent","shouldBeInvokedPerSelf","processStopPropagation","processPreventDefault","invokeWithEvent","controller","methodName","stopPropagation","prevent","currentTarget","actionEvent","logDebugActivity","scope","containsElement","ElementObserver","mutationObserverInit","childList","subtree","mutationObserver","MutationObserver","mutations","processMutations","takeRecords","matchElementsInTree","removeElement","addElement","mutation","processMutation","processAttributeChange","processRemovedNodes","removedNodes","processAddedNodes","addedNodes","elementAttributeChanged","matchElement","nodes","elementFromNode","processTree","elementIsActive","tree","processor","nodeType","ELEMENT_NODE","elementMatched","elementUnmatched","AttributeObserver","elementObserver","elementMatchedAttribute","elementUnmatchedAttribute","elementAttributeValueChanged","StringMapObserver","stringMap","attributeOldValue","knownAttributeNames","refreshAttribute","oldValue","getStringMapKeyForAttribute","stringMapKeyAdded","stringMapValueChanged","stringMapKeyRemoved","currentAttributeNames","recordedAttributeNames","Multimap","valuesByKey","prune","del","hasKey","hasValue","getValuesForKey","getKeysForValue","TokenListObserver","attributeObserver","tokensByElement","tokensMatched","readTokensForElement","unmatchedTokens","matchedTokens","refreshTokensForElement","tokensUnmatched","tokens","tokenMatched","tokenUnmatched","previousTokens","currentTokens","firstDifferingIndex","zip","findIndex","previousToken","currentToken","tokensAreEqual","tokenString","parseTokenString","ValueListObserver","tokenListObserver","parseResultsByToken","valuesByTokenByElement","fetchParseResultForToken","fetchValuesByTokenForElement","elementMatchedValue","elementUnmatchedValue","parseResult","parseToken","valuesByToken","parseValueForToken","BindingObserver","bindingsByAction","valueListObserver","actionAttribute","disconnectAllActions","schema","connectAction","disconnectAction","getDefaultEventNameForElement","descriptorString","eventTargetName","parseActionDescriptorString","eventNameSuffix","pattern","forToken","ValueObserver","receiver","stringMapObserver","valueDescriptorMap","invokeChangedCallbacksForDefaultValues","invokeChangedCallback","writer","valueDescriptorNameMap","valueDescriptors","rawValue","rawOldValue","changedMethodName","changedMethod","reader","descriptors","hasMethodName","TargetObserver","targetsByName","disconnectAllTargets","connectTarget","disconnectTarget","targetConnected","targetDisconnected","Context","functionName","controllerConstructor","bindingObserver","dispatcher","valueObserver","targetObserver","initialize","invokeControllerMethod","readInheritableStaticArrayValues","propertyName","ancestors","getAncestorsForConstructor","getOwnStaticArrayValues","getPrototypeOf","reverse","getOwnKeys","getOwnPropertyNames","extendWithReflect","extended","testReflectExtension","Module","shadowConstructor","shadowProperties","shadowingDescriptor","getShadowedDescriptor","getShadowProperties","shadow","blessedProperties","blessing","getBlessedProperties","blessDefinition","contextsByScope","connectedContexts","contexts","connectContextForScope","fetchContextForScope","disconnectContextForScope","ClassMap","getDataKey","getAll","getAttributeName","getAttributeNameForKey","DataMap","Guide","warnedKeysByObject","warnedKeys","attributeValueContainsToken","TargetSet","targetName","targetNames","findTarget","findLegacyTarget","findAllTargets","findAllLegacyTargets","getSelectorForTargetName","findElement","findAllElements","targetAttributeForScope","getLegacySelectorForTargetName","deprecate","targetDescriptor","targetAttribute","revisedAttributeName","guide","Scope","classes","controllerSelector","queryElements","controllerAttribute","ScopeObserver","scopesByIdentifierByElement","scopeReferenceCounts","scopesByIdentifier","fetchScopesByIdentifierForElement","createScopeForElementAndIdentifier","referenceCount","scopeConnected","scopeDisconnected","Router","scopeObserver","modulesByIdentifier","modules","loadDefinition","unloadIdentifier","connectModule","disconnectModule","getContextForElementAndIdentifier","defaultSchema","Application","debug","logFormattedMessage","router","register","load","rest","shouldLoad","unload","controllers","getControllerForElementAndIdentifier","onerror","groupCollapsed","groupEnd","parseValueDefinitionPair","typeDefinition","payload","typeFromObject","parseValueTypeConstant","typeObject","defaultValueType","parseValueTypeDefault","default","parseValueTypeObject","typeFromDefaultValue","typeFromConstant","parseValueTypeDefinition","constant","defaultValuesByType","defaultValueForDefinition","hasCustomDefaultValue","readers","writers","valueDescriptorForTokenAndTypeDefinition","Boolean","Number","String","array","boolean","number","writeJSON","blessings","classDefinition","targetDefinition","valueDefinitionPairs","pairs","getOwnStaticObjectPairs","readInheritableStaticObjectPairs","propertyDescriptorMap","valueDefinitionPair","valueDescriptor","propertiesForValueDefinitionPair","optionSelector","Autocomplete","ready","submitOnEnter","minLength","inputTarget","mouseDown","onInputChange","debounce","delayValue","onKeydown","onInputBlur","resultsTarget","onResultsMouseDown","onResultsClick","readyValue","hasInputTarget","hasResultsTarget","sibling","selectedOption","def","select","previouslySelected","selectedClassesOrDefault","onEscapeKeydown","resultsShown","hideAndRemoveOptions","onArrowDownKeydown","onArrowUpKeydown","onTabKeydown","commit","onEnterKeydown","hasSubmitOnEnterValue","HTMLAnchorElement","textValue","hasHiddenTarget","hiddenTarget","query","minLengthValue","fetchResults","identifyOptions","hasUrlValue","buildURL","doFetch","replaceResults","urlValue","optionsForFetch","hasSelectedClass","selectedClasses","timeoutId","constructor2","src_default","class","hasHiddenClass","hiddenClass","itemTargets","noop","Stimulus","uid","isNullOrUndef","isObject","isNumberFinite","isFinite","finiteOrDefault","valueOrDefault","toDimension","dimension","parseFloat","thisArg","each","loopable","_elementsEqual","a0","a1","ilen","v0","v1","datasetIndex","clone$1","klen","k","isValidKey","_merger","tval","sval","merge","merger","mergeIf","_mergerIf","keyResolvers","resolveObjectKey","resolver","tmp","part","_splitKey","_getKeyResolver","_capitalize","str","defined","isFunction","setsEqual","PI","TAU","PITAU","INFINITY","POSITIVE_INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","sign","niceNum","range","roundedRange","almostEquals","niceRange","fraction","isNumber","isNaN","epsilon","_setMinAndMaxByKey","toRadians","degrees","toDegrees","radians","_decimalPlaces","p","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","sqrt","angle","atan2","distanceBetweenPoints","pt1","pt2","_angleDiff","_normalizeAngle","_angleBetween","sameAngleIsFullCircle","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","_isBetween","_lookup","table","cmp","mid","hi","lo","_lookupByKey","last","_rlookupByKey","arrayEvents","unlistenArrayEvents","listener","stub","_chartjs","_arrayUnique","requestAnimFrame","throttled","updateFn","updateArgs","ticking","_toLeftRightCenter","align","_alignStartEnd","_getStartAndCountOfVisiblePoints","points","animationsDisabled","pointCount","count","_sorted","iScale","_parsed","minDefined","maxDefined","getUserBounds","getPixelForValue","_scaleRangesChanged","xScale","yScale","_scaleRanges","newRanges","xmin","xmax","ymin","ymax","changed","atEdge","elasticIn","sin","elasticOut","effects","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","cos","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","lim","l","h","p2b","n2b","b2n","n2p","map$1","A","B","C","D","E","F","f","hex","h1","h2","eq","HUE_RE","hsl2rgbn","hsv2rgbn","hwb2rgbn","w","rgb","rgb2hsl","g","hueValue","calln","hsl2rgb","hue","Z","Y","X","W","V","U","T","S","R","Q","P","O","N","M","L","K","G","H","I","J","names$1","OiceXe","antiquewEte","aqua","aquamarRe","azuY","beige","bisque","black","blanKedOmond","Xe","XeviTet","bPwn","burlywood","caMtXe","KartYuse","KocTate","cSO","cSnflowerXe","cSnsilk","crimson","cyan","xXe","xcyan","xgTMnPd","xWay","xgYF","xgYy","xkhaki","xmagFta","xTivegYF","xSange","xScEd","xYd","xsOmon","xsHgYF","xUXe","xUWay","xUgYy","xQe","xviTet","dAppRk","dApskyXe","dimWay","dimgYy","dodgerXe","fiYbrick","flSOwEte","foYstWAn","fuKsia","gaRsbSo","ghostwEte","gTd","gTMnPd","Way","gYF","gYFLw","gYy","honeyMw","hotpRk","RdianYd","Rdigo","ivSy","khaki","lavFMr","lavFMrXsh","lawngYF","NmoncEffon","ZXe","ZcSO","Zcyan","ZgTMnPdLw","ZWay","ZgYF","ZgYy","ZpRk","ZsOmon","ZsHgYF","ZskyXe","ZUWay","ZUgYy","ZstAlXe","ZLw","lime","limegYF","lRF","magFta","maPon","VaquamarRe","VXe","VScEd","VpurpN","VsHgYF","VUXe","VsprRggYF","VQe","VviTetYd","midnightXe","mRtcYam","mistyPse","moccasR","navajowEte","navy","Tdlace","Tive","TivedBb","Sange","SangeYd","ScEd","pOegTMnPd","pOegYF","pOeQe","pOeviTetYd","papayawEp","pHKpuff","peru","pRk","plum","powMrXe","purpN","YbeccapurpN","Yd","Psybrown","PyOXe","saddNbPwn","sOmon","sandybPwn","sHgYF","sHshell","siFna","silver","skyXe","UXe","UWay","UgYy","snow","sprRggYF","stAlXe","tan","teO","tEstN","tomato","Qe","viTet","JHt","wEte","wEtesmoke","Lw","LwgYF","names","RGB_RE","to","modHSL","ratio","proto","fromObject","input","functionParse","exec","rgbParse","p1","p2","hwb2rgb","hsv2rgb","hueParse","Color","ret","unpacked","tkeys","j","nk","unpack","transparent","nameParse","_rgb","_valid","valid","rgbString","hexString","isShort","alpha","hslString","mix","color","weight","c1","c2","w2","w1","rgb1","rgb2","clearer","greyscale","val","opaquer","negate","lighten","darken","saturate","desaturate","rotate","deg","index_esm","isPatternOrGradient","getHoverColor","overrides","getScope$1","root","defaults","_descriptors","animation","backgroundColor","borderColor","datasets","chart","platform","getDevicePixelRatio","font","family","lineHeight","hover","hoverBackgroundColor","ctx","hoverBorderColor","hoverColor","indexAxis","interaction","includeInvisible","maintainAspectRatio","onHover","onClick","parsing","plugins","responsive","scale","scales","showLine","drawActiveElementsOnTop","describe","override","route","targetScope","scopeObject","targetScopeObject","privateName","local","_scriptable","_indexable","_fallback","_measureText","gc","longest","textWidth","measureText","_longestText","arrayOfThings","garbageCollect","save","jlen","thing","nestedThing","restore","gcLen","_alignPixel","pixel","currentDevicePixelRatio","halfWidth","clearCanvas","canvas","getContext","resetTransform","clearRect","drawPoint","drawPointLegend","xOffset","yOffset","cornerRadius","pointStyle","rotation","radius","rad","translate","drawImage","beginPath","ellipse","arc","closePath","moveTo","lineTo","SQRT1_2","fill","borderWidth","stroke","_isPointInArea","point","area","clipArea","clip","unclipArea","_steppedLineTo","previous","flip","midpoint","_bezierCurveTo","bezierCurveTo","cp1x","cp2x","cp1y","cp2y","renderText","opts","strokeWidth","strokeColor","translation","fillStyle","textAlign","textBaseline","setRenderOpts","strokeStyle","lineWidth","strokeText","maxWidth","fillText","decorateText","strikethrough","underline","metrics","actualBoundingBoxLeft","actualBoundingBoxRight","actualBoundingBoxAscent","actualBoundingBoxDescent","yDecoration","decorationWidth","addRoundedRectPath","topLeft","bottomLeft","bottomRight","topRight","LINE_HEIGHT","FONT_STYLE","toLineHeight","_readValueToProps","objProps","toTRBL","toTRBLCorners","toPadding","toFont","fallback","toFontString","inputs","info","cacheable","createContext","parentContext","_createResolver","scopes","prefixes","rootScopes","getTarget","_resolve","_cacheable","_scopes","_rootScopes","_getTarget","Proxy","deleteProperty","_keys","_cached","proxy","readKey","needsSubResolver","createSubResolver","_resolveWithPrefixes","getKeysFromAllScopes","storage","_storage","_attachContext","subProxy","descriptorDefaults","_proxy","_context","_subProxy","_stack","setContext","isScriptable","_resolveScriptable","isIndexable","_resolveArray","_resolveWithContext","allKeys","scriptable","indexable","_allKeys","resolveFallback","getScope","addScopes","parentScopes","parentFallback","allScopes","addScopesFromKey","subGetTarget","resolveKeysFromAllScopes","_parseObjectDataRadialScale","_parsing","parsed","EPSILON","getPoint","skip","getValueAxis","splineCurve","firstPoint","middlePoint","afterPoint","d01","d12","s01","s12","fa","fb","capControlPoint","pt","_updateBezierControlPoints","loop","controlPoints","spanGaps","cubicInterpolationMode","valueAxis","pointsLen","deltaK","mK","pointBefore","pointCurrent","pointAfter","slopeDelta","alphaK","betaK","tauK","squaredMagnitude","monotoneAdjust","delta","iPixel","vPixel","monotoneCompute","splineCurveMonotone","tension","capBezierPoints","inArea","inAreaPrev","inAreaNext","_isDomSupported","_getParentNode","domNode","parseMaxStyle","styleValue","parentProperty","valueInPixels","positions","getPositionedStyle","suffix","pos","getRelativePosition","evt","borderBox","boxSizing","paddings","borders","box","touches","offsetX","offsetY","shadowRoot","useOffsetPos","clientX","clientY","getCanvasPosition","round1","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","setTransform","supportsEventListenerOptions","passiveSupported","readUsedSize","getPropertyValue","getStyle","_pointInLine","_steppedInterpolation","_bezierInterpolation","cp1","cp2","intlCache","formatNumber","num","locale","formatter","Intl","NumberFormat","getNumberFormat","format","getRtlAdapter","rtl","rectX","setWidth","xPlus","leftForLtr","itemWidth","getRightToLeftAdapter","_itemWidth","overrideTextDirection","original","getPropertyPriority","setProperty","prevTextDirection","restoreTextDirection","propertyFn","between","compare","normalize","normalizeSegment","_boundSegment","segment","bounds","startBound","endBound","getSegment","prevValue","inside","subStart","_boundSegments","segments","sub","readStyle","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","styleChanged","prevStyle","animator","_charts","_running","_lastDate","_notify","anims","date","callbacks","numSteps","currentStep","_refresh","_update","remaining","running","draw","_active","_total","tick","pop","_getAnims","charts","progress","listen","cb","cur","_duration","interpolators","factor","c0","Animation","cfg","currentValue","_fn","_easing","easing","_start","_target","_prop","_from","_to","_promises","elapsed","remain","wait","promises","res","rej","resolved","animationOptions","colors","numbers","animations","Animations","config","_chart","_properties","configure","animatedProps","_animateOptions","newOptions","$shared","$animations","resolveTargetOptions","_createAnimations","anim","awaitAll","scaleClip","allowedOverflow","getSortedDatasetIndices","filterVisible","metasets","_getSortedDatasetMetas","applyStack","stack","dsIndex","singleMode","otherValue","isStacked","stacked","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","vScale","positive","getMatchingVisibleMetas","updateStacks","_cachedMeta","_stacks","iAxis","vAxis","indexScale","valueScale","getStackKey","_top","_bottom","getFirstScaleId","shift","clearStacks","isDirectUpdateMode","cloneIfNotShared","cached","shared","DatasetController","_ctx","_cachedDataOpts","getMeta","_type","_data","_objectData","_sharedOptions","_drawStart","_drawCount","enableOptionSharing","supportsDecimation","$context","_syncList","linkScales","_stacked","addElements","updateIndex","getDataset","chooseId","xid","xAxisID","yid","yAxisID","rid","rAxisID","iid","iAxisID","vid","vAxisID","getScaleForId","rScale","getDatasetMeta","scaleID","_getOtherScale","_destroy","_dataCheck","adata","convertObjectDataToArray","isExtensible","datasetElementType","buildOrUpdateElements","resetNewElements","stackChanged","oldStacked","_resyncElements","scopeKeys","datasetScopeKeys","getOptionScopes","createResolver","sorted","parseArrayData","parseObjectData","parsePrimitiveData","isNotInOrderComparedToPrev","labels","getLabels","singleScale","xAxisKey","yAxisKey","getParsed","getDataElement","updateRangeFromParsed","parsedValue","NaN","getMinMax","canStack","otherScale","createStack","NEGATIVE_INFINITY","otherMin","otherMax","getAllParsedValues","getMaxOverflow","getLabelAndValue","label","getLabelForValue","_clip","toClip","defaultClip","chartArea","resolveDatasetElementOptions","resolveDataElementOptions","dataIndex","raw","createDataContext","createDatasetContext","_resolveElementOptions","dataElementType","sharing","datasetElementScopeKeys","resolveNamedOptions","_resolveAnimations","datasetAnimationScopeKeys","getSharedOptions","includeOptions","sharedOptions","_animationsDisabled","_getSharedOptions","firstOpts","previouslySharedOptions","updateSharedOptions","updateElement","_setStyle","removeHoverStyle","setHoverStyle","_removeDatasetHoverStyle","_setDatasetHoverStyle","arg1","arg2","numMeta","numData","_insertElements","_removeElements","move","updateElements","removed","_sync","_dataChanges","_onDataPush","_onDataPop","_onDataShift","_onDataSplice","newCount","_onDataUnshift","computeMinSampleSize","_cache","$bar","visibleMetas","getAllScaleValues","curr","_length","updateMinAndPrev","ticks","getPixelForTick","parseValue","entry","startValue","endValue","barStart","barEnd","_custom","parseFloatBar","parseArrayOrPrimitive","isFloatBar","custom","setBorderSkipped","borderSkipped","horizontal","borderProps","enableBorderRadius","parseEdge","orig","v2","startEnd","setInflateAmount","inflateAmount","BarController","iAxisKey","vAxisKey","bars","getBasePixel","isHorizontal","ruler","_getRuler","vpixels","_calculateBarValuePixels","ipixels","_calculateBarIndexPixels","_getStacks","grouped","skipNull","_getStackCount","_getStackIndex","pixels","barThickness","_startPixel","_endPixel","stackCount","categoryPercentage","barPercentage","baseValue","minBarLength","actualBase","floating","getDataVisibility","barSign","startPixel","getPixelForDecimal","endPixel","halfGrid","getLineWidthForValue","maxBarThickness","Infinity","percent","chunk","computeFlexCategoryTraits","thickness","computeFitCategoryTraits","stackIndex","_index_","grid","_value_","beginAtZero","BubbleController","tooltip","title","DoughnutController","innerRadius","outerRadius","getter","_getRotation","_getCircumference","circumference","_getRotationExtents","isDatasetVisible","arcs","spacing","getMaxBorderWidth","getMaxOffset","maxSize","cutout","chartWeight","_getRingWeight","ratioX","ratioY","startAngle","endAngle","startX","startY","endX","endY","calcMax","calcMin","maxX","maxY","minX","minY","getRatioAndOffset","maxHeight","maxRadius","radiusLength","_getVisibleDatasetWeightTotal","total","calculateTotal","_getRingWeightOffset","_circumference","animateRotate","calculateCircumference","animationOpts","centerX","centerY","animateScale","metaData","borderAlign","hoverBorderWidth","hoverOffset","ringWeightOffset","aspectRatio","legend","generateLabels","legendItem","toggleDataVisibility","tooltipItem","dataLabel","formattedValue","LineController","_dataset","_datasetIndex","_decimated","animated","maxGapLength","directUpdate","prevParsed","nullData","border","lastPoint","updateControlPoints","PolarAreaController","_updateRadius","minSize","cutoutPercentage","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getIndexAngle","defaultAngle","countVisibleElements","_computeAngle","getDistanceFromCenterForValue","angleLines","display","circular","pointLabels","PieController","RadarController","_fullLoop","pointPosition","getPointPositionForValue","tooltipPosition","useFinalPosition","getProps","final","defaultRoutes","formatters","numeric","tickValue","notation","maxTick","calculateDelta","logDelta","numDecimal","minimumFractionDigits","maximumFractionDigits","logarithmic","Ticks","newTicks","majorStart","majorEnd","ceil","grace","drawBorder","drawOnChartArea","drawTicks","tickLength","tickWidth","tickColor","minRotation","maxRotation","mirror","textStrokeWidth","textStrokeColor","autoSkip","autoSkipPadding","labelOffset","minor","major","crossAlign","showLabelBackdrop","backdropColor","backdropPadding","offsetFromEdge","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","lineValue","getTickMarkLength","getTitleHeight","titleAlign","reverseAlign","Scale","_margins","paddingTop","paddingBottom","paddingLeft","paddingRight","labelRotation","_range","_gridLineItems","_labelItems","_labelSizes","_maxLength","_longestTextCache","_reversePixels","_userMax","_userMin","_suggestedMax","_suggestedMin","_ticksLength","_borderValue","_dataLimitsCached","init","suggestedMin","suggestedMax","metas","getPadding","getTicks","xLabels","yLabels","beforeLayout","beforeUpdate","margins","tickOpts","sampleSize","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","minmax","change","keepZero","_addGrace","beforeBuildTicks","buildTicks","afterBuildTicks","samplingEnabled","_convertTicksToLabels","beforeCalculateLabelRotation","calculateLabelRotation","afterCalculateLabelRotation","ticksLimit","maxTicksLimit","_tickSize","maxScale","maxChart","determineMaxTicks","majorIndices","getMajorIndices","numMajorIndices","first","skipMajors","evenMajorSpacing","diff","getEvenSpacing","factors","_factorize","calculateSpacing","avgMajorSpacing","afterAutoSkip","beforeFit","fit","afterFit","afterUpdate","reversePixels","_alignToPixels","alignToPixels","_callHooks","notifyPlugins","beforeTickToLabelConversion","generateTickLabels","afterTickToLabelConversion","numTicks","maxLabelDiagonal","_isVisible","labelSizes","_getLabelSizes","maxLabelWidth","widest","maxLabelHeight","highest","asin","titleOpts","gridOpts","titleHeight","tickPadding","angleRadians","labelHeight","labelWidth","_calculatePadding","_handleMargins","isRotated","labelsBelowTicks","offsetRight","isFullSize","fullSize","_computeLabelSizes","caches","widths","heights","tickFont","fontString","nestedLabel","widestLabelSize","highestLabelSize","_resolveTickFontOptions","valueAt","idx","getValueForPixel","decimal","getDecimalForPixel","getBaseValue","createTickContext","optionTicks","rot","_computeGridLineItems","ticksLength","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","positionAxisID","limit","step","optsAtIndex","lineColor","tickBorderDash","tickBorderDashOffset","_computeLabelItems","tickAndPadding","hTickAndPadding","lineCount","textOffset","_getXAxisLabelAlignment","_getYAxisLabelAlignment","halfCount","tickTextAlign","labelPadding","_computeLabelArea","drawBackground","fillRect","drawGrid","drawLine","setLineDash","lineDashOffset","lastLineWidth","drawLabels","drawTitle","titleX","titleY","titleArgs","_layers","tz","z","gz","getSortedVisibleDatasetMetas","axisID","_maxDigits","fontSize","TypedRegistry","isForType","isPrototypeOf","parentScope","isIChartComponent","itemDefaults","routes","propertyParts","sourceName","sourceScope","routeDefaults","registerDefaults","unregister","registry","_typedRegistries","_each","addControllers","addPlugins","addScales","getController","_get","getElement","getPlugin","getScale","removeControllers","removeElements","removePlugins","removeScales","typedRegistry","arg","reg","_getRegistryForType","_exec","itemReg","component","camelMethod","ScatterController","DateAdapter","chartOptions","formats","timestamp","amount","unit","startOf","weekday","endOf","members","_date","binarySearch","metaset","lookupMethod","getRange","evaluateInteractionItems","getIntersectItems","isPointInArea","inRange","getNearestItems","distanceMetric","useX","useY","deltaX","deltaY","getDistanceMetricForAxis","minDistance","getCenterPoint","getNearestCartesianItems","getNearestRadialItems","getAxisItems","rangeMethod","intersectsItem","Interaction","modes","nearest","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","layout","newWidth","outerWidth","newHeight","outerHeight","widthChanged","heightChanged","same","other","getMargins","marginForPositions","fitBoxes","boxes","refitBoxes","refit","setBoxDims","placeBoxes","userPadding","placed","stackWeight","autoPadding","layouts","addBox","removeBox","layoutItem","minPadding","availableWidth","availableHeight","layoutBoxes","wrapBoxes","centerHorizontal","centerVertical","leftAndTop","rightAndBottom","vertical","buildLayoutBoxes","verticalBoxes","horizontalBoxes","visibleVerticalBoxCount","vBoxMaxWidth","hBoxMaxHeight","buildStacks","setLayoutDims","updatePos","handleMaxPadding","BasePlatform","acquireContext","releaseContext","getMaximumSize","isAttached","updateConfig","BasicPlatform","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","isNullOrEmpty","eventListenerOptions","removeListener","nodeListContains","nodeList","createAttachObserver","observer","trigger","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","createResizeObserver","ResizeObserver","contentRect","listenDevicePixelRatioChanges","releaseObserver","unlistenDevicePixelRatioChanges","createProxyAndListen","native","fromNativeEvent","addListener","DomPlatform","renderHeight","renderWidth","displayWidth","displayHeight","initCanvas","proxies","$proxies","attach","detach","bbWidth","bbHeight","containerSize","containerStyle","containerBorder","containerPadding","getContainerSize","PluginService","hook","_createDescriptors","plugin","_oldCache","_notifyStateChanges","localIds","allPlugins","getOpts","pluginOpts","createDescriptors","previousDescriptors","pluginScopeKeys","getIndexAxis","datasetDefaults","determineAxis","scaleOptions","initOptions","chartDefaults","configScales","chartIndexAxis","firstIDs","scaleConf","defaultId","getDefaultScaleIDFromAxis","defaultScaleOptions","defaultID","getAxisFromDefaultScaleID","mergeScaleConfig","initData","keyCache","keysCached","cachedKeys","generate","addIfFound","Config","_config","initConfig","_scopeCache","_resolverCache","datasetType","additionalOptionScopes","_cachedScopes","mainScope","resetCache","keyLists","chartOptionScopes","subPrefixes","getResolver","hasFunction","needContext","resolverCache","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","onAnimationProgress","onProgress","getCanvas","getChart","moveNumericKeys","intKey","Chart","userConfig","initialCanvas","existingChart","OffscreenCanvas","_detectPlatform","_aspectRatio","_metasets","_lastEvent","_listeners","_responsiveListeners","_sortedMetasets","_plugins","_hiddenIndices","attached","_doResize","timeout","resizeDelay","_initialize","bindEvents","_resizeBeforeDraw","_resize","newSize","newRatio","onResize","ensureScalesHaveIDs","axisOptions","buildOrUpdateScales","scaleOpts","updated","isRadial","dposition","dtype","scaleType","hasUpdated","_updateMetasets","_destroyDatasetMeta","_removeUnreferencedMetasets","buildOrUpdateControllers","newControllers","ControllerClass","_resetElements","animsDisabled","_updateScales","_checkEventBindings","_updateHiddenIndices","_minPadding","_updateLayout","_updateDatasets","_eventHandler","_updateHoverStyles","existingEvents","newEvents","unbindEvents","changes","_getUniformDataChanges","datasetCount","makeSet","changeSet","noArea","_idx","_updateDataset","layers","_drawDatasets","_drawDataset","useClip","getElementsAtEventForMode","setDatasetVisibility","_updateVisibility","_stop","toBase64Image","toDataURL","bindUserEvents","bindResponsiveEvents","_add","_remove","detached","updateHoverStyle","getActiveElements","setActiveElements","activeElements","lastActive","replay","hoverOptions","deactivated","activated","inChartArea","eventFilter","_handleEvent","_getActiveElements","isClick","_isClickEvent","lastEvent","determineLastEvent","invalidatePlugins","clipArc","pixelMargin","angleMargin","rThetaToXY","theta","pathArc","innerR","spacingOffset","avNogSpacingRadius","angleOffset","outerStart","outerEnd","innerStart","innerEnd","angleDelta","borderRadius","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","parseBorderRadius$1","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","pCenter","p4","p8","outerStartX","outerStartY","outerEndX","outerEndY","version","ArcElement","fullCircles","chartX","chartY","rAdjust","betweenAngles","withinRadius","halfAngle","halfRadius","radiusOffset","drawArc","inner","lineJoin","drawFullCircleBorders","setStyle","lineCap","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","lineMethod","stepped","getLineMethod","fastPathSegment","prevX","lastY","avgX","countX","pointIndex","drawX","truncX","_getSegmentMethod","usePath2D","Path2D","LineElement","_path","_points","_segments","_pointsUpdated","segmentOptions","findStartAndEnd","chartContext","baseStyle","addStyle","st","dir","p0","p0DataIndex","p1DataIndex","doSplitByStyles","splitByStyles","solidSegments","_computeSegments","_interpolate","_getInterpolationMethod","interpolated","segmentMethod","path","strokePathWithCache","strokePathDirect","inRange$1","hitRadius","PointElement","mouseX","mouseY","inXRange","inYRange","hoverRadius","getBarBounds","bar","half","skipOrLimit","skipX","skipY","addNormalRectPath","inflateRect","refRect","BarElement","outer","maxW","maxH","parseBorderWidth","maxR","enableBorder","parseBorderRadius","boundingRects","addRectPath","cleanDecimatedDataset","cleanDecimatedData","plugin_decimation","algorithm","beforeElementsUpdate","xAxis","decimated","getStartAndCountOfVisiblePointsSimplified","threshold","samples","bucketWidth","sampledIndex","endIndex","maxAreaPoint","maxArea","nextA","avgY","avgRangeStart","avgRangeEnd","avgRangeLength","rangeOffs","rangeTo","pointAx","pointAy","lttbDecimation","minIndex","maxIndex","startIndex","xMin","dx","lastIndex","intermediateIndex1","intermediateIndex2","minMaxDecimation","_getBounds","_findSegmentEnd","_getEdge","_createBoundaryLine","linePoints","_pointsFromSegments","_shouldApplyFill","_resolveTarget","propagate","_decodeFill","fillOption","parseFillOption","firstCh","decodeTargetIndex","addPointsBelow","sourcePoint","linesBelow","postponed","findPoint","pointValue","firstValue","lastValue","simpleArc","_drawfill","getLineByIndex","sourcePoints","below","getLinesBelow","_buildStackLine","_getTargetValue","computeCircularBoundary","_getTargetPixel","computeLinearBoundary","computeBoundary","lineOpts","above","clipVertical","doFill","clipY","lineLoop","tpoints","targetSegments","tgt","subBounds","fillSources","fillSource","notShape","clipBounds","interpolatedLineTo","targetLoop","interpolatedPoint","afterDatasetsUpdate","_args","$filler","beforeDraw","drawTime","beforeDatasetsDraw","beforeDatasetDraw","getBoxSize","labelOpts","boxHeight","boxWidth","usePointStyle","pointStyleWidth","itemHeight","Legend","_added","legendHitBoxes","_hoveredItem","doughnutMode","legendItems","columnSizes","lineWidths","buildLabels","labelFont","_computeTitleHeight","_fitRows","_fitCols","hitboxes","totalHeight","row","heightLimit","totalWidth","currentColWidth","currentColHeight","col","adjustHitBoxes","rtlHelper","hitbox","_draw","defaultColor","fontColor","halfFontSize","cursor","textDirection","lineDash","drawOptions","SQRT2","yBoxTop","xBoxLeft","drawLegendBox","_textX","titleFont","titlePadding","topPaddingPlusHalfFontSize","_getLegendItemAt","hitBox","lh","onLeave","isListened","hoveredItem","sameItem","itemsEqual","plugin_legend","afterEvent","ci","Title","_padding","textSize","_drawArgs","fontOpts","plugin_title","titleBlock","createTitle","plugin_subtitle","positioners","average","eventPosition","nearestElement","tp","pushOrConcat","toPush","splitNewlines","createTooltipItem","getTooltipSize","footer","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","beforeBody","afterBody","titleSpacing","titleMarginBottom","displayColors","bodySpacing","footerMarginTop","footerSpacing","widthPadding","maxLineWidth","determineXAlign","yAlign","chartWidth","xAlign","caret","caretSize","caretPadding","doesNotFitWithAlign","determineAlignment","determineYAlign","getBackgroundPoint","alignment","paddingAndSize","alignX","alignY","getAlignedX","getBeforeAfterBodyLines","overrideCallbacks","_eventPosition","_size","_cachedAnimations","_tooltipItems","dataPoints","caretX","caretY","labelColors","labelPointStyles","labelTextColors","tooltipItems","getTitle","beforeTitle","afterTitle","getBeforeBody","getBody","bodyItems","scoped","beforeLabel","afterLabel","getAfterBody","getFooter","beforeFooter","afterFooter","_createItems","itemSort","labelColor","labelPointStyle","labelTextColor","positionAndSize","backgroundPoint","external","drawCaret","tooltipPoint","caretPosition","getCaretPosition","x3","y3","ptX","ptY","titleColor","_drawColorBox","colorX","rtlColorX","yOffSet","colorY","multiKeyBackground","outerX","innerX","strokeRect","drawBody","bodyAlign","bodyLineHeight","xLinePadding","fillLineOfText","bodyAlignForCalculation","textColor","bodyColor","drawFooter","footerAlign","footerColor","tooltipSize","quadraticCurveTo","_updateAnimationTarget","animX","animY","_willRender","hasTooltipContent","globalAlpha","positionChanged","_positionChanged","_ignoreReplayEvents","plugin_tooltip","afterInit","afterDraw","labelCount","Decimation","Filler","SubTitle","CategoryScale","_startValue","_valueRange","_addedLabels","added","addedLabels","addIfString","lastIndexOf","findOrAddLabel","relativeLabelSize","minSpacing","LinearScaleBase","_endValue","handleTickRangeOptions","setMin","setMax","minSign","maxSign","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","getTickLimit","maxTicks","stepSize","computeTickLimit","generationOptions","dataRange","precision","maxDigits","includeBounds","maxSpaces","rmin","rmax","countDefined","niceMin","niceMax","numSpaces","rounded","almostWhole","decimalPlaces","generateTicks$1","LinearScale","isMajor","tickVal","LogarithmicScale","_zero","exp","endExp","endSignificand","significand","lastTick","generateTicks","getTickBackdropHeight","determineLimits","updateLimits","limits","hLimits","vLimits","getTextAlignForAngle","yForAngle","pathRadiusLine","getPointPosition","RadialLinearScale","drawingArea","_pointLabels","_pointLabelItems","valueCount","pointLabelOpts","additionalAngle","centerPointLabels","getPointLabelContext","plFont","setCenterPoint","extra","outerDistance","pointLabelPosition","buildPointLabelItems","fitWithPointLabels","leftMovement","rightMovement","topMovement","bottomMovement","scalingFactor","getValueForDistanceFromCenter","scaledDistance","pointLabel","createPointLabelContext","distanceFromCenter","getBasePosition","getPointLabelPosition","backdropLeft","backdropTop","backdropWidth","backdropHeight","drawPointLabels","gridLineOpts","drawRadiusLine","animate","INTERVALS","millisecond","common","steps","second","minute","hour","day","week","month","quarter","year","UNITS","sorter","_adapter","parser","isoWeekday","_parseOpts","determineUnitForAutoTicks","minUnit","capacity","addTick","timestamps","ticksFromTimestamps","majorUnit","setMajorTicks","TimeScale","_unit","_majorUnit","_offsets","_normalized","displayFormats","normalized","_applyBounds","_getLabelBounds","getLabelTimestamps","timeOpts","_generate","_filterBetween","_getLabelCapacity","determineUnitForFormatting","determineMajorUnit","initOffsets","offsetAfterAutoskip","getDecimalForValue","hasWeekday","getDataTimestamps","tooltipFormat","datetime","_tickFormatFunction","minorFormat","majorFormat","_getLabelSize","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","exampleLabel","prevSource","nextSource","prevTarget","nextTarget","span","TimeSeriesScale","_table","_minPos","_tableRange","_getTimestampsForTable","buildLookupTable","registerables","MatrixController","me","anchorX","anchorY","resolveX","resolveY","getBounds","MatrixElement","isff","addEvent","useCapture","attachEvent","getMods","mods","getKeys","_keyMap","backspace","return","esc","space","up","down","ins","insert","home","pageup","pagedown","capslock","num_0","num_1","num_2","num_3","num_4","num_5","num_6","num_7","num_8","num_9","num_multiply","num_add","num_enter","num_subtract","num_decimal","num_divide","_modifier","alt","ctrl","control","cmd","modifierMap","_mods","_handlers","_downKeys","winListendFocus","_scope","elementHasBindEvent","code","charCodeAt","setScope","eachUnbind","_ref$splitKey","splitKey","originKey","unbindKeys","lastKey","keyCode","record","a2","arr1","isIndex","compareArray","eventHandler","modifiersMatch","shortcut","returnValue","cancelBubble","asterisk","charCode","keyName","keyNum","getModifierState","keydown","keyup","keyShortcut","_downKeysCurrent","capture","isElementBind","clearModifier","_api","getPressedKeyString","getModifier","fromCharCode","deleteScope","newScope","handlers","getPressedKeyCodes","isPressed","srcElement","flag","readOnly","unbind","keysInfo","keyMap","_hotkeys","hotkeys","noConflict","deep","debounces","throttles","alpineNames","enterFromClass","enterActiveClass","enterToClass","leaveFromClass","leaveActiveClass","leaveToClass","defaultOptions$1","transitioned","preserveOriginalClass","removeToClasses","datasetName","substr","datasetAlpineName","tipoPersonas","getUAString","uaData","userAgentData","brands","brand","isLayoutViewport","isFixedStrategy","addVisualOffsets","layoutViewport","_options$strategy","clonedTemplate","templateTarget","popoverTarget","activatorTarget","placementValue","activeValue","closedClass","openClass","forceHide","topEdgeReached","bottomEdgeReached","shadowValue","handleIntersection","topEdgeTarget","bototmEdgeTarget","scrollableTarget","updateShadows","topShadowClass","bottomShadowClass","inexact","quadrant","EXP_LIMIT","MAX_DIGITS","NUMERALS","LN10","DEFAULTS","rounding","modulo","toExpNeg","toExpPos","minE","maxE","crypto","decimalError","invalidArgument","precisionLimitExceeded","cryptoUnavailable","tag","mathfloor","mathpow","isBinary","isHex","isOctal","isDecimal","BASE","LN10_PRECISION","PI_PRECISION","digitsToString","ws","indexOfLastWord","getZeroString","checkInt32","checkRoundingDigits","rm","repeating","di","rd","convertBase","baseIn","baseOut","arrL","strL","absoluteValue","finalise","clampedTo","clamp","Ctor","gt","comparedTo","xdL","ydL","xd","yd","xs","ys","cosine","pr","sd","isZero","tinyPow","taylorSeries","times","cos2x","minus","plus","toLessThanHalfPi","neg","cubeRoot","cbrt","rep","t3","t3plusx","toExponential","divide","dp","dividedBy","div","dividedToIntegerBy","divToInt","equals","greaterThan","greaterThanOrEqualTo","gte","hyperbolicCosine","cosh","one","cosh2_x","d8","hyperbolicSine","sinh","sinh2_x","d5","d16","d20","hyperbolicTangent","tanh","inverseCosine","acos","halfPi","isNeg","getPi","inverseHyperbolicCosine","acosh","lte","ln","inverseHyperbolicSine","asinh","inverseHyperbolicTangent","atanh","wpr","xsd","inverseSine","atan","inverseTangent","px","isInteger","isInt","isNegative","isPositive","isPos","lessThan","lt","lessThanOrEqualTo","logarithm","isBase10","denominator","inf","naturalLogarithm","getLn10","xe","xLTy","getBase10Exponent","mod","q","naturalExponential","negated","carry","getPrecision","sine","sin2_x","squareRoot","tangent","mul","rL","toBinary","toStringBinary","toDecimalPlaces","toDP","finiteToString","toFixed","toFraction","maxD","d0","d1","d2","n0","n1","toHexadecimal","toHex","toNearest","toNumber","toOctal","toPower","yn","intPow","toPrecision","toSignificantDigits","toSD","truncated","trunc","valueOf","toJSON","multiplyInteger","temp","aL","bL","subtract","logBase","more","prod","prodL","qd","rem","remL","rem0","xi","xL","yd0","yL","yz","isTruncated","digits","roundUp","xdi","out","isExp","nonFiniteToString","zs","truncate","isOdd","maxOrMin","ltgt","guard","sum","numerator","parseDecimal","substring","parseOther","divisor","isFloat","Decimal","isHyperbolic","u","pi","useDefaults","ps","getRandomValues","randomBytes","hypot","isDecimalInstance","log2","Uint32Array","copy","for","ROUND_UP","ROUND_DOWN","ROUND_CEIL","ROUND_FLOOR","ROUND_HALF_UP","ROUND_HALF_DOWN","ROUND_HALF_EVEN","ROUND_HALF_CEIL","ROUND_HALF_FLOOR","EUCLID","hasCanvasTarget","canvasTarget","typeValue","chartData","hasDataValue","dataValue","optionsValue","_c","transitionTarget","targetFromAttribute","SVGElement","leaveAfter","controllerEnter","controllerLeave","controllerToggleTransition","toggleTransition","enterFromClasses","enterActiveClasses","enterToClasses","leaveToClasses","removeClasses","leaveFromClasses","leaveActiveClasses","initialClasses","endClasses","removeEndClasses","stashedClasses","cls","addClasses","transitionDuration","afterTransition","useTransition","menuTarget","errors","errorContainerTargets","errorContainer","errorType","errorMsg","foundError","extractError","innerText","timeoutSeconds","hasCountdownTarget","countdownTarget","run","buttonsTarget","dataType","csrfToken","formTarget","showForm","showNaturalFields","showJuridicaFields","naturalFieldTargets","juridicaFieldTargets","fetchTipoTimbreValue","timbresUrl","tipoTimbre","json","valor","valorTimbreTarget","catch","calcularMontoPagar","valorTimbre","cantidadSolicitada","montoPagarTarget","tipoTimbreTarget","selectedIndex","cantidadSolicitadaTarget","montoPagar","Pagy","rjsObserver","pagyRender","initNav","tags","sequels","labelSequels","trimParam","lastWidth","fillIn","page","series","gap","insertAdjacentHTML","initCombo","initInput","inputValue","initSelector","getVars","param","uint8array","Uint8Array","atob","keyword","TextDecoder","decode","err"],"sourceRoot":""}