{"version":3,"file":"js/7661-d43858626b1768a61402.js","mappings":"iGAKA,IAAIA,EAAO,EAAQ,OAInB,SAASC,EAAuBC,GAMU,oBAJzCA,EAAUA,GAAW,IAIHC,oBAAsF,oBAA1CD,EAAQC,mBAAmBC,YAOrFC,OAAOC,UAAUC,WACpBF,OAAOC,UAAUC,SAAW,WAE3B,OAA4D,IAArDF,OAAOC,UAAUE,QAAQC,MAAMC,KAAMC,aAM9CT,EAAQC,mBAAmBC,WAAW,iBAAiB,SAASQ,GAE/D,IAAIX,EAAuBY,YAAa,CACvCZ,EAAuBY,aAAc,EACrC,IAAIC,EAAU,IAAIC,eAClBD,EAAQE,KAAK,MAAO,sEAAsE,GAC1FF,EAAQG,OAAS,WACU,IAAvBH,EAAQI,YAAuC,MAAnBJ,EAAQK,SACtClB,EAAuBmB,SAAWN,EAAQO,aAC1CpB,EAAuBqB,aAEiB,GAArCrB,EAAuBqB,aACzBrB,EAAuBsB,KAAO,IAAIvB,EAAK,QAASC,EAAuBmB,SAAUnB,EAAuBuB,SAAU,CACjHC,SAAU,WAKdX,EAAQY,KAAK,MAGd,IAAIzB,EAAuB0B,YAAa,CACvC1B,EAAuB0B,aAAc,EACrC,IAAIC,EAAU,IAAIb,eAClBa,EAAQZ,KAAK,MAAO,sEAAsE,GAC1FY,EAAQX,OAAS,WACU,IAAvBW,EAAQV,YAAuC,MAAnBU,EAAQT,SACtClB,EAAuBuB,SAAWI,EAAQP,aAC1CpB,EAAuBqB,aAEiB,GAArCrB,EAAuBqB,aACzBrB,EAAuBsB,KAAO,IAAIvB,EAAK,QAASC,EAAuBmB,SAAUnB,EAAuBuB,SAAU,CACjHC,SAAU,WAKdG,EAAQF,KAAK,MAKd,IAAIG,EAAU,oCAIVC,EAAU,CACbC,MAAO,SAASC,GACf,IAAIC,EAAKD,EAAOE,OACZC,EAAO,GAEX,GAAGN,EAAQtB,SAAS0B,GAEnB,OADAD,EAAOI,OACA,KAGR,KAA8B,OAAvBH,EAAKD,EAAOE,UAAoBL,EAAQtB,SAAS0B,IACvDE,GAAQF,EACRD,EAAOI,OAGR,OAAGnC,EAAuBsB,OAAStB,EAAuBsB,KAAKc,MAAMF,GAC7D,cAED,OAILG,EAAOpC,EAAQC,mBAAmBoC,QACrC3B,EAAQA,EAAO4B,UAAY,cAG5B,OAAOtC,EAAQC,mBAAmBsC,YAAYH,EAAMR,GAAS,OAvF7DY,QAAQC,IAAI,4GA6Fd1C,EAAuBqB,WAAa,EACpCrB,EAAuBY,aAAc,EACrCZ,EAAuB0B,aAAc,EACrC1B,EAAuBmB,SAAW,GAClCnB,EAAuBuB,SAAW,GAClCvB,EAAuBsB,KAIvBqB,EAAOC,QAAU5C,G,qBC5Gd,SAAS6C,GACV,aASA,SAASC,EAAcC,GACrB,IAAIC,EAAOD,EAAGE,oBACdF,EAAGG,MAAMC,kBAAoB,CAACC,UAAWC,OAAOC,YAAaC,WAAYF,OAAOG,YAClDC,MAAOT,EAAKU,MAAMD,MAAOE,OAAQX,EAAKU,MAAMC,QAC1EX,EAAKU,MAAMD,MAAQ,GACnBT,EAAKU,MAAMC,OAAS,OACpBX,EAAKY,WAAa,yBAClBC,SAASC,gBAAgBJ,MAAMK,SAAW,SAC1ChB,EAAGiB,UAGL,SAASC,EAAUlB,GACjB,IAAIC,EAAOD,EAAGE,oBACdD,EAAKY,UAAYZ,EAAKY,UAAUM,QAAQ,6BAA8B,IACtEL,SAASC,gBAAgBJ,MAAMK,SAAW,GAC1C,IAAII,EAAOpB,EAAGG,MAAMC,kBACpBH,EAAKU,MAAMD,MAAQU,EAAKV,MAAOT,EAAKU,MAAMC,OAASQ,EAAKR,OACxDN,OAAOe,SAASD,EAAKZ,WAAYY,EAAKf,WACtCL,EAAGiB,UAzBLnB,EAAWwB,aAAa,cAAc,GAAO,SAAStB,EAAIuB,EAAKC,GACzDA,GAAO1B,EAAW2B,OAAMD,GAAM,IAC7BA,IAAQD,IACTA,EAAKxB,EAAcC,GAClBkB,EAAUlB,OAZf0B,CAAI,EAAQ,Q,uBCKb,SAAS5B,GAsBV,SAAS6B,EAAiB3B,GACpBA,EAAGG,MAAMyB,cACX5B,EAAGG,MAAMyB,YAAYC,WAAWC,YAAY9B,EAAGG,MAAMyB,aACrD5B,EAAGG,MAAMyB,YAAc,MAG3B,SAASG,EAAe/B,GACtB2B,EAAiB3B,GACjB,IAAIgC,EAAMhC,EAAGG,MAAMyB,YAAcd,SAASmB,cAAc,OACxDD,EAAIrB,MAAMuB,QAAU,+BACpBF,EAAIrB,MAAMwB,UAAYnC,EAAGoC,UAAU,aACnCJ,EAAInB,UAAY,8CAChB,IAAIwB,EAAcrC,EAAGoC,UAAU,eACL,iBAAfC,IAAyBA,EAAcvB,SAASwB,eAAeD,IAC1EL,EAAIO,YAAYF,GAChBrC,EAAGwC,QAAQC,UAAUC,aAAaV,EAAKhC,EAAGwC,QAAQC,UAAUE,YAG9D,SAASC,EAAc5C,GACrB6C,YAAW,WACT,IAAIC,GAAQ,EACZ,GAAsB,GAAlB9C,EAAG+C,YAAkB,CACvB,IAAIC,EAAQhD,EAAGiD,gBACfH,EAA0B,YAAlBE,EAAME,UAA0BlD,EAAGmD,QAAQ,GAAGC,QACjD,YAAYC,KAAKL,EAAMM,cAAc,oBAAoBC,aAE5DT,EAAOf,EAAe/B,GACrB2B,EAAiB3B,KACrB,IAGL,SAASwD,EAAOxD,GACVyD,EAAQzD,IAAK+B,EAAe/B,GAElC,SAAS0D,EAAS1D,GAChB,IAAI2D,EAAU3D,EAAGE,oBAAqB4C,EAAQW,EAAQzD,GACtD2D,EAAQ9C,UAAY8C,EAAQ9C,UAAUM,QAAQ,oBAAqB,KAAO2B,EAAQ,oBAAsB,IAEpGA,EAAOf,EAAe/B,GACrB2B,EAAiB3B,GAGxB,SAASyD,EAAQzD,GACf,OAA2B,IAAnBA,EAAG+C,aAAyC,KAAlB/C,EAAGmD,QAAQ,GAhE/CrD,EAAWwB,aAAa,cAAe,IAAI,SAAStB,EAAIuB,EAAKC,GAC3D,IAAIoC,EAAOpC,GAAOA,GAAO1B,EAAW2B,KACpC,GAAIF,IAAQqC,EACV5D,EAAG6D,GAAG,OAAQL,GACdxD,EAAG6D,GAAG,SAAUH,GAChB1D,EAAG6D,GAAG,UAAWH,GACjB5D,EAAW+D,GAAG7D,EAAGiD,gBAAiB,oBAAqBjD,EAAGG,MAAM2D,mBAAqB,WAAalB,EAAc5C,KAChH0D,EAAS1D,QACJ,IAAKuB,GAAOqC,EAAM,CACvB5D,EAAG+D,IAAI,OAAQP,GACfxD,EAAG+D,IAAI,SAAUL,GACjB1D,EAAG+D,IAAI,UAAWL,GAClB5D,EAAWiE,IAAI/D,EAAGiD,gBAAiB,oBAAqBjD,EAAGG,MAAM2D,oBACjEnC,EAAiB3B,GACjB,IAAI2D,EAAU3D,EAAGE,oBACjByD,EAAQ9C,UAAY8C,EAAQ9C,UAAUM,QAAQ,oBAAqB,IAGjEI,IAAQvB,EAAGgE,YAAYR,EAAOxD,MAxBlC0B,CAAI,EAAQ,Q,uBCKb,SAAS5B,GACV,aAEA,IAAImE,EAAS,2DACTC,EAAc,sDACdC,EAAkB,UAmDtB,SAASC,EAAsCpE,EAAIqE,GACjD,IAAIC,EAAYD,EAAIE,KAAMC,EAAY,EAAGC,EAAY,EACjDC,EAAYT,EAAOU,KAAK3E,EAAGmD,QAAQmB,IAAaM,EAAcF,EAAU,GAE5E,EAAG,CAED,IAAIG,EAAiBP,GADrBE,GAAa,GAETM,EAAW9E,EAAGmD,QAAQ0B,GAAiBE,EAAWd,EAAOU,KAAKG,GAElE,GAAIC,EAAU,CACZ,IAAIC,EAAaD,EAAS,GACtBE,EAAaC,SAASR,EAAU,GAAI,IAAMF,EAAYC,EACtDU,EAAcD,SAASH,EAAS,GAAI,IAAMK,EAAaD,EAE3D,GAAIP,IAAgBI,GAAeK,MAAMF,GAUlC,CACL,GAAIP,EAAYxB,OAAS4B,EAAW5B,OAAQ,OAG5C,GAAKwB,EAAYxB,OAAS4B,EAAW5B,QAA0B,IAAdoB,EAAkB,OACnEC,GAAa,OAdTQ,IAAcE,IAAYC,EAAaD,EAAa,GACpDF,EAAYE,IAAYC,EAAaH,EAAY,GACrDjF,EAAGsF,aACDR,EAAS3D,QAAQ8C,EAAQe,EAAaI,EAAaL,EAAS,GAAKA,EAAS,IAC5E,CACER,KAAMM,EAAgB5F,GAAI,GACzB,CACDsF,KAAMM,EAAgB5F,GAAI6F,EAAS1B,gBAUlC2B,GAjFXjF,EAAWyF,SAASC,qCAAuC,SAASxF,GAClE,GAAIA,EAAGoC,UAAU,gBAAiB,OAAOtC,EAAW2F,KAEpD,IADA,IAAIC,EAAS1F,EAAG2F,iBAAkBC,EAAe,GACxCC,EAAI,EAAGA,EAAIH,EAAOtC,OAAQyC,IAAK,CACtC,IAAIxB,EAAMqB,EAAOG,GAAGC,KAGhBC,EAAW/F,EAAGgG,cAAc3B,EAAIE,MAChC0B,EAAQnG,EAAWoG,UAAUlG,EAAGT,UAAWwG,GAC/C,GAAwB,aAApBE,EAAM3G,KAAK6G,MAAiD,aAA1BF,EAAM3G,KAAK8G,WAE/C,YADApG,EAAGqG,YAAY,oBAMjB,IAAIC,GAA2B,KAH7BP,EAAWE,EAAM9F,OAGGoG,KAClBC,EAA6B,IAAnBT,EAASU,MAEnBlC,EAAOvE,EAAGmD,QAAQkB,EAAIE,MAAOmC,EAAQzC,EAAOU,KAAKJ,GACjDoC,EAAqB,QAAQtD,KAAKkB,EAAKqC,MAAM,EAAGvC,EAAIpF,KACxD,IAAKyG,EAAOG,GAAG/C,UAAawD,IAAWE,IAAaE,GAASC,EAE3D,YADA3G,EAAGqG,YAAY,oBAGjB,GAAInC,EAAYb,KAAKkB,GAAO,CAC1B,IAAIsC,EAAaL,GAAW,QAAQnD,KAAKkB,GACrCuC,GAAa,QAAQzD,KAAKkB,IAC1BsC,GAAcC,IAAW9G,EAAGsF,aAAa,GAAI,CAC/Cf,KAAMF,EAAIE,KAAMtF,GAAI,GACnB,CACDsF,KAAMF,EAAIE,KAAMtF,GAAIoF,EAAIpF,GAAK,IAE/B2G,EAAaC,GAAK,SACb,CACL,IAAIkB,EAASL,EAAM,GAAIM,EAAQN,EAAM,GACjCO,IAAa9C,EAAgBd,KAAKqD,EAAM,KAAOA,EAAM,GAAGlJ,QAAQ,MAAQ,GACxE0J,EAASD,EAAY/B,SAASwB,EAAM,GAAI,IAAM,EAAKA,EAAM,GAAKA,EAAM,GAAGvF,QAAQ,IAAK,KACxFyE,EAAaC,GAAK,KAAOkB,EAASG,EAASF,EAEvCC,GAAU7C,EAAsCpE,EAAIqE,IAI5DrE,EAAGmH,kBAAkBvB,IAxDrBlE,CAAI,EAAQ,Q,uBCcb,SAAS5B,GACZ,aAEAA,EAAWL,YAAc,SAAS2H,EAAMtI,EAASuI,GAC/C,MAAO,CACLC,WAAY,WACV,MAAO,CACLF,KAAMtH,EAAWwH,WAAWF,GAC5BtI,QAASgB,EAAWwH,WAAWxI,GAC/ByI,QAAS,EAAGC,QAAS,KACrBC,WAAY,EAAGC,WAAY,KAC3BC,WAAY,OAGhBC,UAAW,SAASzH,GAClB,MAAO,CACLiH,KAAMtH,EAAW8H,UAAUR,EAAMjH,EAAMiH,MACvCtI,QAASgB,EAAW8H,UAAU9I,EAASqB,EAAMrB,SAC7CyI,QAASpH,EAAMoH,QAASC,QAAS,KACjCC,WAAYtH,EAAMsH,WAAYC,WAAY,OAI9C3I,MAAO,SAASC,EAAQmB,GAoBtB,OAnBInB,GAAUmB,EAAMwH,YAChBE,KAAKC,IAAI3H,EAAMoH,QAASpH,EAAMsH,YAAczI,EAAO+I,SACrD5H,EAAMwH,WAAa3I,EACnBmB,EAAMoH,QAAUpH,EAAMsH,WAAazI,EAAO+I,OAGxC/I,EAAO+I,OAAS5H,EAAMoH,UACxBpH,EAAMqH,QAAUJ,EAAKrI,MAAMC,EAAQmB,EAAMiH,MACzCjH,EAAMoH,QAAUvI,EAAOqF,KAErBrF,EAAO+I,OAAS5H,EAAMsH,aACxBzI,EAAOqF,IAAMrF,EAAO+I,MACpB5H,EAAMuH,WAAa5I,EAAQC,MAAMC,EAAQmB,EAAMrB,SAC/CqB,EAAMsH,WAAazI,EAAOqF,KAE5BrF,EAAOqF,IAAMwD,KAAKC,IAAI3H,EAAMoH,QAASpH,EAAMsH,YAInB,MAApBtH,EAAMuH,WAA2BvH,EAAMqH,QACjB,MAAjBrH,EAAMqH,SACNrH,EAAMrB,QAAQkJ,eACdX,GAA0C,MAA/BlH,EAAMrB,QAAQkJ,cACzB7H,EAAMqH,QAAU,IAAMrH,EAAMuH,WACzBvH,EAAMuH,YAGpBX,OAAQK,EAAKL,QAAU,SAAS5G,EAAO8H,EAAW1D,GAChD,OAAO6C,EAAKL,OAAO5G,EAAMiH,KAAMa,EAAW1D,IAE5C2D,cAAed,EAAKc,cAEpBhC,UAAW,SAAS/F,GAAS,MAAO,CAACA,MAAOA,EAAMiH,KAAM9H,KAAM8H,IAE9De,UAAW,SAAShI,GAClB,IAAIiI,EAAWC,EAIf,OAHIjB,EAAKe,YAAWC,EAAYhB,EAAKe,UAAUhI,EAAMiH,OACjDtI,EAAQqJ,YAAWE,EAAevJ,EAAQqJ,UAAUhI,EAAMrB,UAEvC,MAAhBuJ,EACLD,EACCf,GAAwB,MAAbe,EAAoBA,EAAY,IAAMC,EAAeA,KAtErE3G,CAAI,EAAQ,Q,uBCEb,SAAS5B,GACV,aAkBA,SAASwI,EAAiBtI,GACpBA,EAAGG,MAAMoI,iBACXvI,EAAGwI,WAAU,WAAaC,EAAOzI,MAGrC,SAAS0D,EAAS1D,GACZA,EAAGG,MAAMoI,iBAAmBvI,EAAGG,MAAMoI,gBAAgBnF,QACvDpD,EAAGwI,WAAU,WAAaE,EAAM1I,MAvBpCF,EAAWwB,aAAa,qBAAqB,GAAO,SAAStB,EAAIuB,EAAKC,GACpE,IAAIoC,EAAOpC,GAAOA,GAAO1B,EAAW2B,KAChCF,IAAQqC,GACV5D,EAAGG,MAAMoI,gBAAkB,GAC3BvI,EAAGG,MAAMwI,qBAAqC,iBAAPpH,EAAkBA,EAAM,0BAC/DqH,EAAM5I,GACNA,EAAG6D,GAAG,iBAAkByE,GACxBtI,EAAG6D,GAAG,SAAUH,KACNnC,GAAOqC,IACjB5D,EAAG+D,IAAI,iBAAkBuE,GACzBtI,EAAG+D,IAAI,SAAUL,GACjBgF,EAAM1I,GACNA,EAAGG,MAAMoI,gBAAkBvI,EAAGG,MAAMwI,qBAAuB,SAc/D,IAAIE,EAAa,EACbC,EAAMhJ,EAAWgJ,IACjBC,EAAMjJ,EAAWkJ,OAErB,SAASC,EAAWjJ,EAAIkJ,EAAMC,EAAIC,GAChC,GAAqB,GAAjBL,EAAIG,EAAMC,GAGd,IAFA,IAAIE,EAAQrJ,EAAGG,MAAMoI,gBACjBe,EAAMtJ,EAAGG,MAAMwI,qBACVpE,EAAO2E,EAAK3E,OAAQ,CAC3B,IAAIwD,EAAQxD,GAAQ2E,EAAK3E,KAAO2E,EAAOJ,EAAIvE,EAAM,GAC7CgF,EAAUhF,EAAOsE,EAAYW,EAAQD,GAAWJ,EAAG5E,KACnDkF,EAAMD,EAAQL,EAAKL,EAAIS,EAAS,GAChCG,EAAO1J,EAAG2J,SAAS5B,EAAO0B,EAAK,CAAC5I,UAAWyI,IAG/C,GAFa,MAATF,EAAeC,EAAMO,KAAKF,GACzBL,EAAMQ,OAAOT,IAAS,EAAGM,GAC1BF,EAAO,MACXjF,EAAOgF,GAIX,SAASb,EAAM1I,GAEb,IADA,IAAIqJ,EAAQrJ,EAAGG,MAAMoI,gBACZ1C,EAAI,EAAGA,EAAIwD,EAAMjG,SAAUyC,EAAGwD,EAAMxD,GAAG6C,QAChDW,EAAMjG,OAAS,EAGjB,SAASwF,EAAM5I,GACb0I,EAAM1I,GAEN,IADA,IAAI0F,EAAS1F,EAAG2F,iBACPE,EAAI,EAAGA,EAAIH,EAAOtC,OAAQyC,IACjCoD,EAAWjJ,EAAI0F,EAAOG,GAAGqD,OAAQxD,EAAOG,GAAGsD,MAG/C,SAASV,EAAOzI,GACd,IAAKA,EAAG8J,oBAAqB,OAAOpB,EAAM1I,GAC1C,GAAIA,EAAG2F,iBAAiBvC,OAAS,EAAG,OAAOwF,EAAM5I,GAEjD,IAAIkJ,EAAOlJ,EAAG+J,UAAU,SAAUZ,EAAKnJ,EAAG+J,UAAU,OAEhDV,EAAQrJ,EAAGG,MAAMoI,gBACrB,IAAKc,EAAMjG,OAAQ,OAAO6F,EAAWjJ,EAAIkJ,EAAMC,GAE/C,IAAIa,EAAaX,EAAM,GAAGY,OAAQC,EAAWb,EAAMA,EAAMjG,OAAS,GAAG6G,OACrE,IAAKD,IAAeE,GAAYf,EAAG5E,KAAO2E,EAAK3E,MAAQsE,GACnDE,EAAIG,EAAMgB,EAASf,KAAO,GAAKJ,EAAII,EAAIa,EAAWd,OAAS,EAC7D,OAAON,EAAM5I,GAEf,KAAO+I,EAAIG,EAAMc,EAAWd,MAAQ,GAClCG,EAAMc,QAAQzB,QACdsB,EAAaX,EAAM,GAAGY,OAWxB,IATIlB,EAAIG,EAAMc,EAAWd,MAAQ,IAC3Bc,EAAWb,GAAG5E,KAAO2E,EAAK3E,KAAOsE,GACnCQ,EAAMc,QAAQzB,QACdO,EAAWjJ,EAAIkJ,EAAMc,EAAWb,GAAI,IAEpCF,EAAWjJ,EAAIkJ,EAAMc,EAAWd,KAAM,IAInCH,EAAII,EAAIe,EAASf,IAAM,GAC5BE,EAAMe,MAAM1B,QACZwB,EAAWb,EAAMA,EAAMjG,OAAS,GAAG6G,OAEjClB,EAAII,EAAIe,EAASf,IAAM,IACrBA,EAAG5E,KAAO2F,EAAShB,KAAK3E,KAAOsE,GACjCQ,EAAMe,MAAM1B,QACZO,EAAWjJ,EAAIkK,EAAShB,KAAMC,IAE9BF,EAAWjJ,EAAIkK,EAASf,GAAIA,KAvGhCzH,CAAI,EAAQ,Q,uBCDb,SAAS5B,GACZ,aAEA,IAAIuK,EAAQ,0oCAEZvK,EAAW1C,WAAW,OAAO,SAASQ,EAAQ0M,GAC5C,IAAIC,EAAY,EAChB,SAASpC,EAAUhI,GAEjB,OADAA,EAAMqK,MAAO,EACN,KAET,IAAIC,EAAa,CACfnD,WAAY,WACV,MAAO,CACLkD,MAAM,EACNE,WAAW,EACXC,UAAU,IAGd/C,UAAW,SAASgD,GAClB,MAAO,CACLJ,KAAMI,EAAEJ,KACRE,UAAWE,EAAEF,UACbC,SAAUC,EAAED,WAGhB5L,MAAO,SAASC,EAAQmB,GAItB,GAHAA,EAAM6H,cAAgB,KAGlB7H,EAAMuK,UACR,OAAI1L,EAAO0H,MAAM,UACfvG,EAAMuK,WAAY,EACX,OAET1L,EAAO6L,YACA,MAKT,GAHI7L,EAAO8L,QACT3K,EAAMqK,MAAO,GAEXxL,EAAO8L,OAAS9L,EAAO0H,MAAM,SAG/B,OAFA1H,EAAO6L,YACP1K,EAAMuK,WAAY,EACX,KAGT,GAAsB,MAAlB1L,EAAOE,OAAgB,CACzBF,EAAOI,OACP,IAAI2L,EAAS/L,EAAOqF,IACpBrF,EAAOgM,SAAS,KAChB,IAAIC,EAAa,EAAIjM,EAAOqF,IAAM0G,EASlC,OARK5K,EAAMqK,KAILS,IAAeV,IACjBpK,EAAMqK,MAAO,IAJfD,EAAYU,EACZ9K,EAAMqK,MAAO,GAMR,KACF,GAAIrK,EAAMqK,KAEf,OADAxL,EAAOI,OACA,KAGT,GAAIJ,EAAOkM,WAET,OADA/K,EAAMwK,UAAW,EACV,KAET,IAAI3L,EAAO8L,OAAS3K,EAAMwK,YACxBxK,EAAMwK,UAAW,GACc,IAA3BL,EAAWa,aAAuB,CACpC,GAAGnM,EAAO0H,MAAM,gFAKd,OADAvG,EAAM6H,eAAgB,EACf,OACF,GAAIhJ,EAAO0H,MAAM,wDAKtB,OADAvG,EAAM6H,eAAgB,EACf,OAIb,OAAIhJ,EAAO0H,MAAM2D,IAC0C,MAAvDrL,EAAOoM,OAAOxE,MAAM5H,EAAO+I,MAAQ,EAAG/I,EAAO+I,SAC5B,GAAhB/I,EAAO+I,OAAc,KAAK1E,KAAKrE,EAAOoM,OAAOC,OAAOrM,EAAO+I,MAAQ,MAKtE5H,EAAM6H,eAAgB,EACf,SAEThJ,EAAOI,OACA,OAET+I,UAAWA,GAGTmD,EAAiB,CACnBC,WAAW,EACXC,eAAe,EACfC,OAAO,GAET,IAAK,IAAIC,KAAQpB,EACfgB,EAAeI,GAAQpB,EAAWoB,GAGpC,OADAJ,EAAenF,KAAO,WACfrG,EAAWL,YAAYK,EAAWP,QAAQ3B,EAAQ0N,GAAiBb,KAEzE,YAED3K,EAAW6L,WAAW,aAAc,OA1HlCjK,CAAI,EAAQ,MAAyB,EAAQ,OAAyB,EAAQ,S,uBCK/E,SAAS5B,GACZ,aAEAA,EAAW1C,WAAW,YAAY,SAASwO,EAAOC,GAEhD,IAAIC,EAAWhM,EAAWP,QAAQqM,EAAO,aACrCG,EAAmC,QAAjBD,EAAS3F,KAE/B,SAAS5G,EAAQ4G,GACf,GAAIrG,EAAWkM,eAAgB,CAC7B,IAAIC,EAAQnM,EAAWkM,eAAe7F,GAClC8F,IAAO9F,EAAO8F,EAAMC,MAAQD,EAAME,MAAM,IAE9C,IAAI7M,EAAOQ,EAAWP,QAAQqM,EAAOzF,GACrC,MAAoB,QAAb7G,EAAK6G,KAAiB,KAAO7G,OAKF8M,IAAhCP,EAAQQ,sBACVR,EAAQQ,qBAAsB,QAIGD,IAA/BP,EAAQS,qBACVT,EAAQS,mBAAqB,QAGLF,IAAtBP,EAAQN,YAAyBM,EAAQN,WAAY,QAG3Ba,IAA1BP,EAAQL,gBACVK,EAAQL,eAAgB,QAEJY,IAAlBP,EAAQJ,QACVI,EAAQJ,OAAQ,QAE0BW,IAAxCP,EAAQU,8BACVV,EAAQU,6BAA8B,QAEGH,IAAvCP,EAAQW,6BACVX,EAAQW,2BAA6B,mBAEnBJ,IAAhBP,EAAQY,MACVZ,EAAQY,KAAM,QAGmBL,IAA/BP,EAAQa,qBACVb,EAAQa,mBAAqB,IAE/B,IAAIC,EAAa,CACfC,OAAQ,SACRpC,KAAM,UACN/D,MAAO,QACPoG,MAAO,aACPC,MAAO,aACPC,MAAO,UACPC,GAAI,KACJC,MAAO,QACPC,aAAc,iBACdC,YAAa,eACbC,WAAY,aACZC,WAAY,OACZC,UAAW,OACXC,SAAU,OACVC,SAAU,SACVC,GAAI,KACJC,OAAQ,SACRlC,cAAe,gBACfC,MAAO,WAGT,IAAK,IAAIkC,KAAahB,EAChBA,EAAWiB,eAAeD,IAAc9B,EAAQa,mBAAmBiB,KACrEhB,EAAWgB,GAAa9B,EAAQa,mBAAmBiB,IAIvD,IAAIE,EAAO,6BACP5J,EAAS,+BACT6J,EAAa,oBACbC,EAAclC,EAAQmC,2BAA6B,QAAU,eAC7DC,EAAiB,8BACjBC,EAAS,2BACTC,EAAe,yCACfC,EAAY,sBACZC,EAAc,mpDACdC,EAAc,OAElB,SAASC,EAAavP,EAAQmB,EAAOqO,GAEnC,OADArO,EAAMqO,EAAIrO,EAAMsO,OAASD,EAClBA,EAAExP,EAAQmB,GAGnB,SAASuO,EAAY1P,EAAQmB,EAAOqO,GAElC,OADArO,EAAMqO,EAAIrO,EAAMwO,MAAQH,EACjBA,EAAExP,EAAQmB,GAGnB,SAASyO,EAAYrK,GACnB,OAAQA,IAAS,KAAKlB,KAAKkB,EAAK6G,QAKlC,SAASjD,EAAUhI,GAejB,GAbAA,EAAM0O,WAAY,EAClB1O,EAAMqN,UAAW,EACjBrN,EAAMoN,UAAW,EAEjBpN,EAAMsN,IAAK,EAEXtN,EAAMuN,QAAS,EAEfvN,EAAMqL,eAAgB,EAEtBrL,EAAMsG,MAAQ,EAEdtG,EAAM2O,cAAe,EACjB3O,EAAMqO,GAAKO,EAAW,CACxB,IAAIC,EAAOjD,EACX,IAAKiD,EAAM,CACT,IAAI/I,EAAQnG,EAAWoG,UAAU4F,EAAU3L,EAAM8O,WACjDD,EAA0B,OAAnB/I,EAAM3G,KAAK6G,MAA0C,OAAzBF,EAAM9F,MAAM+O,WAC3CjJ,EAAM9F,MAAMgP,SAAWlJ,EAAM9F,MAAMiP,SAASC,SAE9CL,IACF7O,EAAMqO,EAAIc,EACVnP,EAAMwO,MAAQY,EACdpP,EAAM8O,UAAY,MAStB,OALA9O,EAAMqP,cAAgB,EACtBrP,EAAMsP,sBAAuB,EAE7BtP,EAAMuP,SAAWvP,EAAMwP,SACvBxP,EAAMwP,SAAW,CAAC3Q,OAAQ,MACnB,KAGT,SAASuQ,EAAYvQ,EAAQmB,GAC3B,IAAIyP,EAAmB5Q,EAAO6Q,WAAa1P,EAAM2P,YAC7CC,EAAsBnB,EAAYzO,EAAMuP,SAAS1Q,QACjDgR,EAAyB7P,EAAM2O,aAC/BmB,EAAe9P,EAAMuP,SAAS1C,GAC9BkD,GAAgC,IAAf/P,EAAMoG,KACvB4J,GAAyBhQ,EAAMiQ,UAAUjQ,EAAMiQ,UAAUhN,OAAS,IAAM,GAAK,EAEjFjD,EAAM2O,cAAe,EAErB,IAAIuB,EAAkBlQ,EAAM2P,YAE5B,GAA8B,OAA1B3P,EAAMmQ,kBACRnQ,EAAMmQ,gBAAkBnQ,EAAM2P,YAC1BI,GAAgB,CAKlB,IAJA/P,EAAMoG,KAAO,KAIN8J,EAAkBlQ,EAAMiQ,UAAUjQ,EAAMiQ,UAAUhN,OAAS,IAChEjD,EAAMiQ,UAAUhG,MACZjK,EAAMiQ,UAAUhN,OAClBjD,EAAM2P,YAAc3P,EAAMiQ,UAAUjQ,EAAMiQ,UAAUhN,OAAS,GAG7DjD,EAAMoG,MAAO,GAGE,IAAfpG,EAAMoG,OACRpG,EAAMmQ,gBAAkBD,EAAkBlQ,EAAMiQ,UAAUjQ,EAAMiQ,UAAUhN,OAAS,IAMzF,IAAImN,GACCR,IAAwBE,IAAiB9P,EAAMuP,SAAS9C,UACvDsD,IAAmBF,KACpB7P,EAAMuP,SAASc,cAGhBC,IAAuB,IAAftQ,EAAMoG,MAAkB0J,GAAgBF,IAClD5P,EAAM2P,aAAeK,GAAyBnR,EAAO0H,MAAMmH,GAEzDnH,EAAQ,KACZ,GAAIvG,EAAMmQ,iBAAmB,IAAMN,GAA0B7P,EAAMuP,SAASc,eACvErQ,EAAMuP,SAAS9C,QAAUmD,GAG5B,OAFA/Q,EAAO6L,YACP1K,EAAM2O,cAAe,EACdnC,EAAWnC,KACb,GAAIxL,EAAOkM,WAChB,OAAO,KACF,GAAI0E,GAAoBzP,EAAM2P,aAAeK,IAA0BzJ,EAAQ1H,EAAO0H,MAAMqH,KAAiBrH,EAAM,GAAGtD,QAAU,EAMrI,OALAjD,EAAMsG,MAAQ,EACdtG,EAAMyM,OAASlG,EAAM,GAAGtD,OACxBjD,EAAMwP,SAAS/C,QAAS,EACpBf,EAAQQ,sBAAqBlM,EAAMiN,WAAa,UACpDjN,EAAMqO,EAAIrO,EAAMsO,OACTiC,EAAQvQ,GACV,GAAIA,EAAM2P,aAAeK,GAAyBnR,EAAO2R,IAAI,KAIlE,OAHAxQ,EAAMsG,MAAQmJ,EAAmB,EAAIzP,EAAMsG,MAAQ,EAC/CoF,EAAQQ,sBAAqBlM,EAAMiN,WAAa,SACpDpO,EAAOkM,WACAwF,EAAQvQ,GACV,IAAKsQ,IAAStQ,EAAMyQ,QAAUhB,GAAoBzP,EAAM2P,aAAeK,IAA0BzJ,EAAQ1H,EAAO0H,MAAMzC,IAAU,CACrI,IAAI4M,EAAWnK,EAAM,GAAK,KAAO,KAmBjC,OAjBAvG,EAAM2P,YAAcO,EAAkBrR,EAAO8R,UAAU1N,OACvDjD,EAAMoG,MAAO,EACbpG,EAAMsG,MAAQ,EAGdtG,EAAMiQ,UAAUxG,KAAKzJ,EAAM2P,aAE3B3P,EAAMsN,IAAK,EACXtN,EAAMuN,QAAS,EACfvN,EAAMqK,MAAO,EACbrK,EAAMqL,eAAgB,EAElBK,EAAQN,WAAavM,EAAO0H,MAAMoH,GAAY,KAChD3N,EAAM4Q,UAAW,GAEnB5Q,EAAMqO,EAAIrO,EAAMsO,OACZ5C,EAAQQ,sBAAqBlM,EAAMiN,WAAa,CAAC,OAAQ,QAAUyD,IAChEH,EAAQvQ,GACV,OAAIyP,GAAoBzP,EAAM2P,aAAeK,IAA0BzJ,EAAQ1H,EAAO0H,MAAMyH,GAAc,KAC/GhO,EAAMsG,MAAQ,EACdtG,EAAM6Q,YAAc,IAAIC,OAAOvK,EAAM,GAAK,QAE1CvG,EAAM+Q,UAAYrF,EAAQU,6BAA+BhN,EAAQmH,EAAM,IAAMmF,EAAQW,4BACjFrM,EAAM+Q,YAAW/Q,EAAMgR,WAAarR,EAAWwH,WAAWnH,EAAM+Q,YACpE/Q,EAAMqO,EAAIrO,EAAMwO,MAAQyC,EACpBvF,EAAQQ,sBAAqBlM,EAAMiN,WAAa,cACpDjN,EAAMqK,MAAQ,EACPkG,EAAQvQ,IAKfA,EAAMyQ,UAEFL,GAA6BL,GAAoB/P,EAAMsG,QAAwB,IAAftG,EAAMoG,MACvEpG,EAAMqK,MAASiG,GAASrC,EAAU/K,KAAKrE,EAAOoM,WAC9C1E,EAAQ1H,EAAOwF,UAAU,MAAQkC,EAAQA,EAAMA,MAAMuH,KAGlD9N,EAAMyQ,QAIVzQ,EAAMyM,OAASzM,EAAMyQ,OAErBzQ,EAAMyQ,OAAS,EACf5R,EAAO6L,YACHgB,EAAQQ,sBAAqBlM,EAAMiN,WAAa,YAPpDjN,EAAMyM,OAA+B,KAAtBlG,EAAM,GAAG2E,OAAO,GAAY,EAAI,EAC/ClL,EAAMyQ,OAASzQ,EAAMyM,QAQvBzM,EAAMwP,SAAS/C,QAAS,EACxBzM,EAAMqO,EAAIrO,EAAMsO,OACTiC,EAAQvQ,IACNsQ,GACTzR,EAAO6L,YACP1K,EAAM6M,IAAK,EACX7M,EAAMwP,SAAS3C,IAAK,EACbL,EAAWK,IACS,MAAlBhO,EAAOE,OACTqP,EAAavP,EAAQmB,EAAOkR,GAG9B9C,EAAavP,EAAQmB,EAAOA,EAAMsO,QAG3C,SAASM,EAAU/P,EAAQmB,GACzB,IAAIQ,EAAQmL,EAAS/M,MAAMC,EAAQmB,EAAM8O,WACzC,IAAKlD,EAAiB,CACpB,IAAI9F,EAAQnG,EAAWoG,UAAU4F,EAAU3L,EAAM8O,YACzB,OAAnBhJ,EAAM3G,KAAK6G,MAA0C,OAAzBF,EAAM9F,MAAM+O,WACtCjJ,EAAM9F,MAAMgP,SAAWlJ,EAAM9F,MAAMiP,SAASC,UAC9ClP,EAAMmR,WAAatS,EAAO8R,UAAUtT,QAAQ,MAAQ,KACvD2C,EAAMqO,EAAIc,EACVnP,EAAMwO,MAAQY,EACdpP,EAAM8O,UAAY,MAGtB,OAAOtO,EAGT,SAASyQ,EAAMpS,EAAQmB,GACrB,IAKMoR,EALFC,EAAcrR,EAAMiQ,UAAUjQ,EAAMiQ,UAAUhN,OAAS,IAAM,EAC7DqO,EAAgBtR,EAAM2P,YAAc0B,EACpCE,EAAkBF,EAAc,EACpC,OAAIrR,EAAM6Q,aAAe7Q,EAAM2P,aAAe4B,IAAoBD,GAAiBzS,EAAO0H,MAAMvG,EAAM6Q,eAChGnF,EAAQQ,sBAAqBlM,EAAMiN,WAAa,cAE/CqE,IAAeF,EAAab,EAAQvQ,IACzCA,EAAM+Q,UAAY/Q,EAAMgR,WAAa,KACrChR,EAAMwO,MAAQY,EACdpP,EAAMqO,EAAIc,EACVnP,EAAM6Q,YAAc,KACpB7Q,EAAMqK,KAAO,EACbrK,EAAMwP,SAASa,eAAgB,EAC3BiB,EAAsB/C,EAAY1P,EAAQmB,EAAOA,EAAMwO,OACpD4C,GACEpR,EAAM+Q,UACR/Q,EAAM+Q,UAAUnS,MAAMC,EAAQmB,EAAMgR,aAE3CnS,EAAO6L,YACA8B,EAAWnC,MAKtB,SAASkG,EAAQvQ,GACf,IAAIwR,EAAS,GAEb,GAAIxR,EAAMiN,WAAY,CACpBuE,EAAO/H,KAAK+C,EAAWS,YAES,kBAArBjN,EAAMiN,aAAyBjN,EAAMiN,WAAa,CAACjN,EAAMiN,aAEpE,IAAK,IAAIvH,EAAI,EAAGA,EAAI1F,EAAMiN,WAAWhK,OAAQyC,IAC3C8L,EAAO/H,KAAK+C,EAAWS,WAAa,IAAMjN,EAAMiN,WAAWvH,IAE/B,WAAxB1F,EAAMiN,WAAWvH,IACnB8L,EAAO/H,KAAK+C,EAAWS,WAAa,IAAMjN,EAAMiN,WAAWvH,GAAK,IAAM1F,EAAMyM,QAKlD,UAAxBzM,EAAMiN,WAAWvH,MACdgG,EAAQS,oBAAsBT,EAAQS,oBAAsBnM,EAAMsG,MACrEkL,EAAO/H,KAAK+C,EAAWS,WAAa,IAAMjN,EAAMiN,WAAWvH,GAAK,IAAM1F,EAAMsG,OAE5EkL,EAAO/H,KAAK,UAMpB,GAAIzJ,EAAMyR,SAER,OADAD,EAAO/H,KAAK,QACL+H,EAAOvO,OAASuO,EAAOE,KAAK,KAAO,KAE5C,GAAI1R,EAAM2R,WAER,OADAH,EAAO/H,KAAK,YACL+H,EAAOvO,OAASuO,EAAOE,KAAK,KAAO,KA8B5C,GA3BI1R,EAAMqN,SACRmE,EAAO/H,KAAK+C,EAAWa,SAAU,QAE7BrN,EAAMuN,QAAUiE,EAAO/H,KAAK+C,EAAWe,QACvCvN,EAAMsN,IAAMkE,EAAO/H,KAAK+C,EAAWc,IACnCtN,EAAMqL,eAAiBmG,EAAO/H,KAAK+C,EAAWnB,eAC9CrL,EAAMsL,OAASkG,EAAO/H,KAAK+C,EAAWlB,OACtCtL,EAAMoN,UAAYoE,EAAO/H,KAAK+C,EAAWY,UACzCpN,EAAMqK,MAAQmH,EAAO/H,KAAK+C,EAAWnC,MACrCrK,EAAM8M,OAAS0E,EAAO/H,KAAK+C,EAAWM,OACtC9M,EAAM+M,cAAgByE,EAAO/H,KAAK+C,EAAWO,aAAc,QAC3D/M,EAAMgN,aAAewE,EAAO/H,KAAK+C,EAAWQ,cAG9ChN,EAAMyM,QAAU+E,EAAO/H,KAAK+C,EAAWC,OAAQD,EAAWC,OAAS,IAAMzM,EAAMyM,QAE/EzM,EAAMsG,QACRkL,EAAO/H,KAAK+C,EAAWlG,QAGlBoF,EAAQS,oBAAsBT,EAAQS,oBAAsBnM,EAAMsG,MACrEkL,EAAO/H,KAAK+C,EAAWlG,MAAQ,IAAMtG,EAAMsG,OAE3CkL,EAAO/H,KAAK+C,EAAWlG,MAAQ,IAAMoF,EAAQS,sBAI9B,IAAfnM,EAAMoG,KAAgB,CACxB,IAAIwL,GAAW5R,EAAMiQ,UAAUhN,OAAS,GAAK,EACxC2O,EAEkB,IAAZA,EACTJ,EAAO/H,KAAK+C,EAAWG,OAEvB6E,EAAO/H,KAAK+C,EAAWI,OAJvB4E,EAAO/H,KAAK+C,EAAWE,OAc3B,OANI1M,EAAMsP,qBACRkC,EAAO/H,KAAK,2BACHzJ,EAAMqP,eACfmC,EAAO/H,KAAK,mBAAqBzJ,EAAMqP,cAAgB,EAAI,IAAM,MAG5DmC,EAAOvO,OAASuO,EAAOE,KAAK,KAAO,KAG5C,SAASG,EAAWhT,EAAQmB,GAC1B,GAAInB,EAAO0H,MAAMwH,GAAQ,GACvB,OAAOwC,EAAQvQ,GAKnB,SAASmP,EAAatQ,EAAQmB,GAC5B,IAAIQ,EAAQR,EAAM8R,KAAKjT,EAAQmB,GAC/B,GAAqB,qBAAVQ,EACT,OAAOA,EAET,GAAIR,EAAMoG,KAER,OADApG,EAAMoG,KAAO,KACNmK,EAAQvQ,GAGjB,GAAIA,EAAM4Q,SAMR,MALqD,MAAtC/R,EAAO0H,MAAMoH,GAAY,GAAM,GAChC3N,EAAMyR,UAAW,EAC1BzR,EAAM2R,YAAa,EACpBjG,EAAQQ,sBAAqBlM,EAAMiN,WAAa,QACpDjN,EAAM4Q,UAAW,EACVL,EAAQvQ,GAMjB,GAHAA,EAAMyR,UAAW,EACjBzR,EAAM2R,YAAa,EAEf3R,EAAMyM,QAAU5N,EAAO0H,MAAM,QAAQ,GAEvC,OADImF,EAAQQ,sBAAqBlM,EAAMiN,WAAa,UAC7CsD,EAAQvQ,GAGjB,IAAIlB,EAAKD,EAAOI,OAGhB,GAAIe,EAAM0O,UAAW,CACnB1O,EAAM0O,WAAY,EAClB,IAAIqD,EAAUjT,EACH,MAAPA,IACFiT,EAAU,KAGZ,IAAIC,EAAQ,cADZD,GAAWA,EAAQ,IAAI/Q,QAAQ,yBAA0B,SACpB,yBAA2B+Q,EAChE,GAAIlT,EAAO0H,MAAM,IAAIuK,OAAOkB,IAAQ,GAClC,OAAOxF,EAAWa,SAKtB,GAAW,MAAPvO,EAAY,CACd,IAAImT,EAAqBjS,EAAMiN,WAC3BvB,EAAQQ,sBAAqBlM,EAAMiN,WAAa,QACpDpO,EAAOgM,SAAS,KAChB,IAAIqH,EAAQrT,EAAO8R,UAAU1N,OAC7B,GAAkB,GAAdjD,EAAMqK,MAAerK,EAAMsG,OAAkB,GAAT4L,EAGjC,IAAIA,GAASlS,EAAMqK,KAAM,CAC9B,IAAI8H,EAAI5B,EAAQvQ,GAEhB,OADAA,EAAMqK,KAAO,EACN8H,EAGP,OADAnS,EAAMiN,WAAagF,EACZ1B,EAAQvQ,GAPf,OADAA,EAAMqK,KAAO6H,EACN3B,EAAQvQ,GASZ,GAAIA,EAAMqK,KACf,OAAOkG,EAAQvQ,GAGjB,GAAW,OAAPlB,IACFD,EAAOI,OACHyM,EAAQQ,qBAAqB,CAC/B,IAAIkG,EAAO7B,EAAQvQ,GACfqS,EAAmB7F,EAAWS,WAAa,UAC/C,OAAOmF,EAAOA,EAAO,IAAMC,EAAmBA,EAIlD,GAAW,MAAPvT,GAAcD,EAAO0H,MAAM,yBAAyB,GAItD,OAHAvG,EAAMgN,aAAc,EACpBhN,EAAM8M,OAAQ,EACVpB,EAAQQ,sBAAqBlM,EAAMiN,WAAa,SAC7CsD,EAAQvQ,GAGjB,GAAW,MAAPlB,GAAckB,EAAMgN,aAAenO,EAAO0H,MAAM,+BAA+B,GAIjF,OAHAvG,EAAMgN,aAAc,EACpBhN,EAAM+M,cAAe,EACjBrB,EAAQQ,sBAAqBlM,EAAMiN,WAAa,SAC7CsD,EAAQvQ,GAGjB,GAAW,MAAPlB,GAAckB,EAAM+M,aAAc,CAChCrB,EAAQQ,sBAAqBlM,EAAMiN,WAAa,SACpD,IAAImF,EAAO7B,EAAQvQ,GAInB,OAHAA,EAAM+M,cAAe,EACrB/M,EAAM8M,OAAQ,EACd9M,EAAMsO,OAAStO,EAAMqO,EAAIhB,EAClB+E,EAGT,GAAW,MAAPtT,IAAekB,EAAM8M,MACvB,OAAI9M,EAAMoN,UAAYvO,EAAO0H,MAAM,YACnCvG,EAAMoN,UAAW,EACb1B,EAAQQ,sBAAqBlM,EAAMiN,WAAa,SAFCsD,EAAQvQ,GAM/D,GAAW,MAAPlB,GAAckB,EAAMoN,SAAU,CAC5B1B,EAAQQ,sBAAqBlM,EAAMiN,WAAa,QACpD,IAAImF,EAAO7B,EAAQvQ,GAGnB,OAFAA,EAAMoN,UAAW,EACjBpN,EAAMsO,OAAStO,EAAMqO,EAAIxP,EAAO0H,MAAM,qBAAqB,GAAS8G,EAAW8B,EACxEiD,EAGT,GAAW,MAAPtT,GAAcD,EAAO0H,MAAM,wCAAwC,GASrE,OARAvG,EAAMqO,EAAIrO,EAAMsO,OAASpB,EACrBxB,EAAQQ,sBAAqBlM,EAAMiN,WAAa,SAChDmF,EAAO7B,EAAQvQ,IAEjBoS,GAAQ,IAERA,EAAO,GAEFA,EAAO5F,EAAWU,WAG3B,GAAW,MAAPpO,GAAcD,EAAO0H,MAAM,8BAA8B,GAS3D,OARAvG,EAAMqO,EAAIrO,EAAMsO,OAASpB,EACrBxB,EAAQQ,sBAAqBlM,EAAMiN,WAAa,SAChDmF,EAAO7B,EAAQvQ,IAEjBoS,GAAQ,IAERA,EAAO,GAEFA,EAAO5F,EAAWW,UAG3B,GAAIzB,EAAQY,KAAc,MAAPxN,GAAcD,EAAO0H,MAAM,uFAAuF,GAAQ,CAC3I,IAAI+C,EAAMzK,EAAOoM,OAAO5N,QAAQ,IAAKwB,EAAOqF,KAC5C,IAAY,GAARoF,EAAW,CACb,IAAIgJ,EAAOzT,EAAOoM,OAAOsH,UAAU1T,EAAO+I,MAAO0B,GAC7C,uCAAuCpG,KAAKoP,KAAOtS,EAAMmR,WAAY,GAI3E,OAFAtS,EAAO2T,OAAO,GACdxS,EAAM8O,UAAYnP,EAAWwH,WAAWwE,GACjC4C,EAAY1P,EAAQmB,EAAO4O,GAGpC,GAAIlD,EAAQY,KAAc,MAAPxN,GAAcD,EAAO0H,MAAM,YAE5C,OADAvG,EAAMmR,WAAY,EACX,MACF,GAAW,MAAPrS,GAAqB,MAAPA,EAAY,CAEnC,IADA,IAAI2T,EAAM,EAAG7H,EAAuB,GAAd/L,EAAOqF,IAAW,IAAMrF,EAAOoM,OAAOC,OAAOrM,EAAOqF,IAAM,GACzEuO,EAAM,GAAK5T,EAAO2R,IAAI1R,IAAK2T,IAClC,IAAI5L,EAAQhI,EAAOE,QAAU,IAEzB2T,GAAgB,KAAKxP,KAAK2D,MAAYqH,EAAYhL,KAAK2D,IAAU,KAAK3D,KAAK0H,IAAWsD,EAAYhL,KAAK0H,IACvG+H,GAAiB,KAAKzP,KAAK0H,MAAasD,EAAYhL,KAAK0H,IAAW,KAAK1H,KAAK2D,IAAUqH,EAAYhL,KAAK2D,IACzG+L,EAAQ,KAAMC,EAAY,KAa9B,GAZIJ,EAAM,IACHzS,EAAMsN,KAAMoF,GAAwB,MAAP5T,GAAe6T,IAAiBzE,EAAYhL,KAAK0H,GAE1E5K,EAAMsN,IAAMxO,IAAM6T,GAAyB,MAAP7T,GAAe4T,IAAgBxE,EAAYhL,KAAK2D,KAC3F+L,GAAQ,GAFRA,GAAQ,GAIRH,EAAM,IACHzS,EAAMuN,SAAUmF,GAAwB,MAAP5T,GAAe6T,IAAiBzE,EAAYhL,KAAK0H,GAE9E5K,EAAMuN,QAAUzO,IAAM6T,GAAyB,MAAP7T,GAAe4T,IAAgBxE,EAAYhL,KAAK2D,KAC/FgM,GAAY,GAFZA,GAAY,GAIC,MAAbA,GAA8B,MAATD,EAOvB,OANIlH,EAAQQ,sBAAqBlM,EAAMiN,WAAsB,MAAT2F,EAAgB,SAAwB,MAAbC,EAAoB,KAAO,cAC5F,IAAVD,IAAgB5S,EAAMsN,GAAKxO,IACb,IAAd+T,IAAoB7S,EAAMuN,OAASzO,GACnCqT,EAAI5B,EAAQvQ,IACF,IAAV4S,IAAiB5S,EAAMsN,IAAK,IACd,IAAduF,IAAqB7S,EAAMuN,QAAS,GACjC4E,OAEJ,GAAW,MAAPrT,IACLD,EAAO2R,IAAI,MAAQ3R,EAAO2R,IAAI,MAAM,CACtC,GAAsB,MAAlB3R,EAAOE,OACT,OAAOwR,EAAQvQ,GAEfnB,EAAO2T,OAAO,GAKpB,GAAI9G,EAAQL,cACV,GAAW,MAAPvM,GAAcD,EAAOgM,SAAS/L,GAAK,CACrC,GAAIkB,EAAMqL,cAIR,OAHIK,EAAQQ,sBAAqBlM,EAAMiN,WAAa,iBAChDkF,EAAI5B,EAAQvQ,GAChBA,EAAMqL,eAAgB,EACf8G,EACF,GAAItT,EAAO0H,MAAM,UAAU,GAGhC,OAFAvG,EAAMqL,eAAgB,EAClBK,EAAQQ,sBAAqBlM,EAAMiN,WAAa,iBAC7CsD,EAAQvQ,QAEZ,GAAW,MAAPlB,GACLD,EAAO0H,MAAM,MAAM,GAAO,CAC5B,GAAsB,MAAlB1H,EAAOE,OACT,OAAOwR,EAAQvQ,GAEfnB,EAAO2T,OAAO,GAMtB,GAAI9G,EAAQJ,OAAgB,MAAPxM,GAAcD,EAAO0H,MAAM,qDAAsD,CACpGvG,EAAMsL,OAAQ,EACVI,EAAQQ,sBAAqBlM,EAAMiN,WAAa,SACpD,IAAI6F,EAAUvC,EAAQvQ,GAEtB,OADAA,EAAMsL,OAAQ,EACPwH,EAWT,MARW,MAAPhU,IACED,EAAO0H,MAAM,QAAQ,GACvBvG,EAAMqP,gBACGrP,EAAMqP,gBACfrP,EAAMsP,sBAAuB,IAI1BiB,EAAQvQ,GAGjB,SAASkN,EAAWrO,EAAQmB,GAG1B,GAAW,MAFFnB,EAAOI,OAEA,CACde,EAAMqO,EAAIrO,EAAMsO,OAASa,EACrBzD,EAAQQ,sBAAqBlM,EAAMiN,WAAa,QACpD,IAAImF,EAAO7B,EAAQvQ,GAMnB,OALIoS,EACFA,GAAQ,IAERA,EAAO,GAEFA,EAAO5F,EAAWU,WAK3B,OAFArO,EAAO0H,MAAM,UAAU,GAEhBiG,EAAWU,WAGpB,SAASG,EAASxO,EAAQmB,GAExB,GAAGnB,EAAOkM,WACR,OAAO,KAET,IAAIjM,EAAKD,EAAOI,OAChB,MAAW,MAAPH,GAAqB,MAAPA,GAChBkB,EAAMqO,EAAIrO,EAAMsO,OAASyE,EAAyB,MAAPjU,EAAa,IAAM,KAC1D4M,EAAQQ,sBAAqBlM,EAAMiN,WAAa,eACpDjN,EAAMqN,UAAW,EACVkD,EAAQvQ,IAEV,QAGT,IAAIgT,EAAS,CACX,IAAK,oDACL,IAAK,qDAGP,SAASD,EAAkBE,GACzB,OAAO,SAASpU,EAAQmB,GAGtB,GAFSnB,EAAOI,SAELgU,EAAS,CAClBjT,EAAMqO,EAAIrO,EAAMsO,OAASa,EACrBzD,EAAQQ,sBAAqBlM,EAAMiN,WAAa,eACpD,IAAIiG,EAAc3C,EAAQvQ,GAE1B,OADAA,EAAMqN,UAAW,EACV6F,EAKT,OAFArU,EAAO0H,MAAMyM,EAAOC,IACpBjT,EAAMqN,UAAW,EACVkD,EAAQvQ,IAInB,SAASkR,EAAarS,EAAQmB,GAC5B,OAAInB,EAAO0H,MAAM,sBAAsB,IACrCvG,EAAMqO,EAAI8E,EACVtU,EAAOI,OACHyM,EAAQQ,sBAAqBlM,EAAMiN,WAAa,QACpDjN,EAAMoN,UAAW,EACVmD,EAAQvQ,IAEVoO,EAAavP,EAAQmB,EAAOmP,GAGrC,SAASgE,EAAmBtU,EAAQmB,GAClC,GAAInB,EAAO0H,MAAM,MAAM,GAAO,CAC5BvG,EAAMqO,EAAIrO,EAAMsO,OAAS8E,EACrB1H,EAAQQ,sBAAqBlM,EAAMiN,WAAa,QACpD,IAAImE,EAAab,EAAQvQ,GAEzB,OADAA,EAAMoN,UAAW,EACVgE,EAKT,OAFAvS,EAAO0H,MAAM,mBAAmB,GAEzBiG,EAAWY,SAGpB,SAASgG,EAAYvU,EAAQmB,GAE3B,OAAGnB,EAAOkM,WACD,MAGTlM,EAAO0H,MAAM,WAAW,QAEF0F,IAAlBpN,EAAOE,OACTiB,EAAM0O,WAAY,EAElB7P,EAAO0H,MAAM,wEAAwE,GAEvFvG,EAAMqO,EAAIrO,EAAMsO,OAASa,EAClB3C,EAAWa,SAAW,QAG/B,IAAIlO,EAAO,CACTgI,WAAY,WACV,MAAO,CACLkH,EAAGe,EAEHG,SAAU,CAAC1Q,OAAQ,MACnB2Q,SAAU,CAAC3Q,OAAQ,MAEnB2P,MAAOY,EACPN,UAAW,KACXa,YAAa,EAEbrB,OAAQa,EACR2C,KAAMD,EAEN5E,YAAY,EACZG,UAAU,EACVC,UAAU,EACVqB,WAAW,EACXrE,KAAM,EACNiD,IAAI,EACJC,QAAQ,EACRd,OAAQ,EACRgE,OAAQ,EACR5D,IAAI,EACJ+D,UAAU,EACVxK,MAAM,EACN6J,UAAW,GACX3J,MAAO,EACP+I,cAAe,EACfC,sBAAsB,EACtBjE,eAAe,EACfC,OAAO,EACPuF,YAAa,OAIjBpJ,UAAW,SAASgD,GAClB,MAAO,CACL4D,EAAG5D,EAAE4D,EAELkB,SAAU9E,EAAE8E,SACZC,SAAU/E,EAAE+E,SAEZhB,MAAO/D,EAAE+D,MACTM,UAAWrE,EAAEqE,WAAanP,EAAW8H,UAAUkE,EAAUlB,EAAEqE,WAC3Da,YAAalF,EAAEkF,YAEfoB,UAAWtG,EAAEsG,UACbC,WAAYvG,EAAEsG,UAAYpR,EAAW8H,UAAUgD,EAAEsG,UAAWtG,EAAEuG,YAAc,KAE5E1C,OAAQ7D,EAAE6D,OACVwD,KAAMrH,EAAEqH,KACR7E,YAAY,EACZG,SAAU3C,EAAE2C,SACZsB,UAAWjE,EAAEiE,UACbrB,SAAU5C,EAAE4C,SACZhD,KAAMI,EAAEJ,KACRiD,GAAI7C,EAAE6C,GACNC,OAAQ9C,EAAE8C,OACVlC,cAAeZ,EAAEY,cACjBC,MAAOb,EAAEa,MACTmB,OAAQhC,EAAEgC,OACVgE,OAAQhG,EAAEgG,OACV5D,GAAIpC,EAAEoC,GACN+D,SAAUnG,EAAEmG,SACZxK,KAAMqE,EAAErE,KACR6J,UAAWxF,EAAEwF,UAAUxJ,MAAM,GAC7BH,MAAOmE,EAAEnE,MACTqI,aAAclE,EAAEkE,aAChBU,cAAe5E,EAAE4E,cACjBC,qBAAsB7E,EAAE6E,qBACxB6B,UAAW1G,EAAE0G,UACbN,YAAapG,EAAEoG,cAInBjS,MAAO,SAASC,EAAQmB,GAKtB,GAFAA,EAAMiN,YAAa,EAEfpO,GAAUmB,EAAMwP,SAAS3Q,OAAQ,CAInC,GAHAmB,EAAMyM,OAAS,EACfzM,EAAM6M,IAAK,EAEPhO,EAAO0H,MAAM,SAAS,GAExB,OADAyB,EAAUhI,GACH,KAaT,GAVAA,EAAMuP,SAAWvP,EAAMwP,SACvBxP,EAAMwP,SAAW,CAAC3Q,OAAQA,GAG1BmB,EAAM4Q,UAAW,EAGjB5Q,EAAMqP,cAAgB,EACtBrP,EAAMsP,sBAAuB,GAExBtP,EAAMgR,aACThR,EAAMqO,EAAIrO,EAAMwO,MACZxO,EAAMqO,GAAKO,GAAW,CACxB,IAAIe,EAAc9Q,EAAO0H,MAAM,QAAQ,GAAM,GAAGvF,QAAQ,MAAOmN,GAAalL,OAG5E,GAFAjD,EAAM2P,YAAcA,EACpB3P,EAAMmQ,gBAAkB,KACpBR,EAAc,EAAG,OAAO,MAIlC,OAAO3P,EAAMqO,EAAExP,EAAQmB,IAGzB+F,UAAW,SAAS/F,GAClB,OAAIA,EAAMwO,OAASI,EAAkB,CAAC5O,MAAOA,EAAM8O,UAAW3P,KAAMwM,GAChE3L,EAAMgR,WAAmB,CAAChR,MAAOA,EAAMgR,WAAY7R,KAAMa,EAAM+Q,WAC5D,CAAC/Q,MAAOA,EAAOb,KAAMA,IAG9ByH,OAAQ,SAAS5G,EAAO8H,EAAW1D,GACjC,OAAIpE,EAAMwO,OAASI,GAAajD,EAAS/E,OAAe+E,EAAS/E,OAAO5G,EAAM8O,UAAWhH,EAAW1D,GAChGpE,EAAMgR,YAAchR,EAAM+Q,UAAUnK,OAAe5G,EAAM+Q,UAAUnK,OAAO5G,EAAMgR,WAAYlJ,EAAW1D,GACpGzE,EAAW2F,MAGpB0C,UAAWA,EAEXuI,QAASA,EAET8C,kBAAmB,UACnBC,gBAAiB,SACjBC,cAAe,iBACfC,KAAM,YAER,OAAOrU,IACN,OAEHQ,EAAW6L,WAAW,gBAAiB,YAEvC7L,EAAW6L,WAAW,kBAAmB,YA92BrCjK,CAAI,EAAQ,MAAyB,EAAQ,OAAe,EAAQ,S,uBCKrE,SAAS5B,GACV,aAEAA,EAAW8T,SAAW,CACpB,CAACzN,KAAM,MAAO+F,KAAM,WAAY5M,KAAM,MAAOuU,IAAK,CAAC,SAAU,QAC7D,CAAC1N,KAAM,MAAOgG,MAAO,CAAC,kBAAmB,4BAA6B,uBAAwB,6BAA8B7M,KAAM,aAAcuU,IAAK,CAAC,MAAO,MAAO,QACpK,CAAC1N,KAAM,QAAS+F,KAAM,kBAAmB5M,KAAM,QAASuU,IAAK,CAAC,MAAO,SACrE,CAAC1N,KAAM,WAAY+F,KAAM,kBAAmB5M,KAAM,WAAYwU,KAAM,uBACpE,CAAC3N,KAAM,YAAa+F,KAAM,mBAAoB5M,KAAM,YAAauU,IAAK,CAAC,IAAK,OAC5E,CAAC1N,KAAM,IAAK+F,KAAM,cAAe5M,KAAM,QAASuU,IAAK,CAAC,IAAK,IAAK,QAChE,CAAC1N,KAAM,MAAO+F,KAAM,gBAAiB5M,KAAM,QAASuU,IAAK,CAAC,MAAO,MAAO,KAAM,MAAO,MAAO,MAAO,KAAM,OAAQE,MAAO,CAAC,QACzH,CAAC5N,KAAM,QAAS+F,KAAM,eAAgB5M,KAAM,QAASuU,IAAK,CAAC,MAAO,MAAO,QACzE,CAAC1N,KAAM,KAAM+F,KAAM,gBAAiB5M,KAAM,QAASuU,IAAK,CAAC,MAAOE,MAAO,CAAC,SAAU,OAClF,CAAC5N,KAAM,UAAW+F,KAAM,iBAAkB5M,KAAM,UAAWuU,IAAK,CAAC,MAAO,OAAQ,SAChF,CAAC1N,KAAM,gBAAiB+F,KAAM,uBAAwB5M,KAAM,UAAWuU,IAAK,CAAC,SAC7E,CAAC1N,KAAM,4BAA6B+F,KAAM,aAAc5M,KAAM,MAAOuU,IAAK,CAAC,QAC3E,CAAC1N,KAAM,QAAS+F,KAAM,eAAgB5M,KAAM,QAASuU,IAAK,CAAC,QAAS,YAAaC,KAAM,qBACvF,CAAC3N,KAAM,eAAgBgG,MAAO,CAAC,+BAAgC,oBAAqB,uBAAwB7M,KAAM,eAAgBuU,IAAK,CAAC,UAAWE,MAAO,CAAC,SAAU,kBACrK,CAAC5N,KAAM,cAAe+F,KAAM,qBAAsB5M,KAAM,aAAcuU,IAAK,CAAC,KAAM,OAAQ,MAAOE,MAAO,CAAC,SACzG,CAAC5N,KAAM,SAAU+F,KAAM,6BAA8B5M,KAAM,SAAUuU,IAAK,CAAC,MAAO,WAClF,CAAC1N,KAAM,SAAU+F,KAAM,gBAAiB5M,KAAM,SAAUuU,IAAK,CAAC,MAAO,MAAO,QAC5E,CAAC1N,KAAM,UAAW+F,KAAM,iBAAkB5M,KAAM,UAAWuU,IAAK,CAAC,OACjE,CAAC1N,KAAM,MAAO+F,KAAM,WAAY5M,KAAM,MAAOuU,IAAK,CAAC,QACnD,CAAC1N,KAAM,MAAO+F,KAAM,mBAAoB5M,KAAM,MAAOuU,IAAK,CAAC,QAC3D,CAAC1N,KAAM,IAAK+F,KAAM,WAAY5M,KAAM,IAAKuU,IAAK,CAAC,MAC/C,CAAC1N,KAAM,OAAQgG,MAAO,CAAC,mBAAoB,eAAgB7M,KAAM,OAAQuU,IAAK,CAAC,SAC/E,CAAC1N,KAAM,OAAQ+F,KAAM,cAAe5M,KAAM,OAAQuU,IAAK,CAAC,OAAQ,UAChE,CAAC1N,KAAM,SAAU+F,KAAM,gBAAiB5M,KAAM,UAC9C,CAAC6G,KAAM,aAAc+F,KAAM,oBAAqB5M,KAAM,aAAcwU,KAAM,gBAC1E,CAAC3N,KAAM,MAAO+F,KAAM,sBAAuB5M,KAAM,MAAOuU,IAAK,CAAC,QAC9D,CAAC1N,KAAM,QAAS+F,KAAM,eAAgB5M,KAAM,QAASuU,IAAK,CAAC,QAAS,MAAO,SAC3E,CAAC1N,KAAM,OAAQ+F,KAAM,cAAe5M,KAAM,QAC1C,CAAC6G,KAAM,MAAO+F,KAAM,aAAc5M,KAAM,MAAOuU,IAAK,CAAC,QACrD,CAAC1N,KAAM,MAAO+F,KAAM,kBAAmB5M,KAAM,UAAWuU,IAAK,CAAC,QAC9D,CAAC1N,KAAM,SAAU+F,KAAM,gBAAiB5M,KAAM,SAAUuU,IAAK,CAAC,MAC9D,CAAC1N,KAAM,MAAO+F,KAAM,aAAc5M,KAAM,MAAOuU,IAAK,CAAC,QACrD,CAAC1N,KAAM,sBAAuB+F,KAAM,oBAAqB5M,KAAM,eAAgBuU,IAAK,CAAC,QACrF,CAAC1N,KAAM,gBAAiB+F,KAAM,oBAAqB5M,KAAM,eAAgBuU,IAAK,CAAC,QAC/E,CAAC1N,KAAM,SAAU+F,KAAM,gBAAiB5M,KAAM,SAAUuU,IAAK,CAAC,QAC9D,CAAC1N,KAAM,QAAS+F,KAAM,eAAgB5M,KAAM,OAC5C,CAAC6G,KAAM,SAAU+F,KAAM,gBAAiB5M,KAAM,SAAUuU,IAAK,CAAC,WAC9D,CAAC1N,KAAM,MAAO+F,KAAM,aAAc5M,KAAM,OACxC,CAAC6G,KAAM,QAAS+F,KAAM,eAAgB5M,KAAM,QAASuU,IAAK,CAAC,QAAS,MAAO,QAC3E,CAAC1N,KAAM,UAAW+F,KAAM,iBAAkB5M,KAAM,UAAWuU,IAAK,CAAC,IAAK,MAAO,MAAO,MAAO,QAC3F,CAAC1N,KAAM,KAAM+F,KAAM,gBAAiB5M,KAAM,SAAUuU,IAAK,CAAC,MAAOE,MAAO,CAAC,WACzE,CAAC5N,KAAM,MAAO+F,KAAM,aAAc5M,KAAM,MAAOuU,IAAK,CAAC,MACrD,CAAC1N,KAAM,UAAW+F,KAAM,iBAAkB5M,KAAM,UAAWuU,IAAK,CAAC,YACjE,CAAC1N,KAAM,2BAA4B+F,KAAM,aAAc5M,KAAM,MAAOwU,KAAM,wCAC1E,CAAC3N,KAAM,KAAM+F,KAAM,YAAa5M,KAAM,KAAMuU,IAAK,CAAC,OAClD,CAAC1N,KAAM,SAAU+F,KAAM,gBAAiB5M,KAAM,SAAUuU,IAAK,CAAC,SAAU,UAAWC,KAAM,iBACzF,CAAC3N,KAAM,OAAQ+F,KAAM,cAAe5M,KAAM,OAAQuU,IAAK,CAAC,SACxD,CAAC1N,KAAM,UAAW+F,KAAM,iBAAkB5M,KAAM,UAAWuU,IAAK,CAAC,OACjE,CAAC1N,KAAM,qBAAsB+F,KAAM,0BAA2B5M,KAAM,mBAAoBuU,IAAK,CAAC,QAC9F,CAAC1N,KAAM,OAAQ+F,KAAM,cAAe5M,KAAM,OAAQuU,IAAK,CAAC,OACxD,CAAC1N,KAAM,OAAQ+F,KAAM,cAAe5M,KAAM,OAAQuU,IAAK,CAAC,SACxD,CAAC1N,KAAM,UAAW+F,KAAM,qBAAsB5M,KAAM,eAAgBuU,IAAK,CAAC,QAASE,MAAO,CAAC,MAAO,SAClG,CAAC5N,KAAM,OAAQ+F,KAAM,YAAa5M,KAAM,YAAauU,IAAK,CAAC,OAAQ,MAAO,aAAc,OAAQE,MAAO,CAAC,UACxG,CAAC5N,KAAM,OAAQ+F,KAAM,eAAgB5M,KAAM,QAC3C,CAAC6G,KAAM,MAAO+F,KAAM,aAAc5M,KAAM,MAAOuU,IAAK,CAAC,QACrD,CAAC1N,KAAM,MAAO+F,KAAM,aAAc5M,KAAM,MAAOuU,IAAK,CAAC,OAAQ,OAAQE,MAAO,CAAC,SAC7E,CAAC5N,KAAM,OAAQ+F,KAAM,cAAe5M,KAAM,QAASuU,IAAK,CAAC,SACzD,CAAC1N,KAAM,oBAAqB+F,KAAM,oBAAqB5M,KAAM,eAAgBuU,IAAK,CAAC,OAAQE,MAAO,CAAC,QACnG,CAAC5N,KAAM,aAAcgG,MAAO,CAAC,kBAAmB,kBAAmB,yBAA0B,2BAA4B,0BACxH7M,KAAM,aAAcuU,IAAK,CAAC,MAAOE,MAAO,CAAC,aAAc,KAAM,SAC9D,CAAC5N,KAAM,OAAQgG,MAAO,CAAC,mBAAoB,sBAAuB7M,KAAM,aAAcuU,IAAK,CAAC,OAAQ,OAAQE,MAAO,CAAC,UACpH,CAAC5N,KAAM,UAAW+F,KAAM,sBAAuB5M,KAAM,aAAcuU,IAAK,CAAC,UAAWE,MAAO,CAAC,WAC5F,CAAC5N,KAAM,MAAO+F,KAAM,WAAY5M,KAAM,MAAOuU,IAAK,CAAC,QACnD,CAAC1N,KAAM,SAAU+F,KAAM,cAAe5M,KAAM,SAAUuU,IAAK,CAAC,KAAM,QAAS,WAC3E,CAAC1N,KAAM,QAAS+F,KAAM,eAAgB5M,KAAM,QAASuU,IAAK,CAAC,MAAOE,MAAO,CAAC,OAC1E,CAAC5N,KAAM,SAAU+F,KAAM,gBAAiB5M,KAAM,QAASuU,IAAK,CAAC,OAC7D,CAAC1N,KAAM,OAAQ+F,KAAM,cAAe5M,KAAM,MAAOuU,IAAK,CAAC,SACvD,CAAC1N,KAAM,aAAc+F,KAAM,oBAAqB5M,KAAM,aAAcuU,IAAK,CAAC,MAAOE,MAAO,CAAC,OACzF,CAAC5N,KAAM,MAAO+F,KAAM,aAAc5M,KAAM,MAAOuU,IAAK,CAAC,QACrD,CAAC1N,KAAM,WAAY+F,KAAM,kBAAmB5M,KAAM,WAAYuU,IAAK,CAAC,WAAY,KAAM,QACtF,CAAC1N,KAAM,OAAQ+F,KAAM,YAAa5M,KAAM,QACxC,CAAC6G,KAAM,cAAe+F,KAAM,iBAAkB5M,KAAM,OACpD,CAAC6G,KAAM,cAAe+F,KAAM,qBAAsB5M,KAAM,cAAeuU,IAAK,CAAC,IAAK,KAAM,KAAM,QAC9F,CAAC1N,KAAM,WAAY+F,KAAM,kBAAmB5M,KAAM,WAAYuU,IAAK,CAAC,OACpE,CAAC1N,KAAM,QAAS+F,KAAM,eAAgB5M,KAAM,QAASuU,IAAK,CAAC,QAC3D,CAAC1N,KAAM,SAAU+F,KAAM,eAAgB5M,KAAM,OAC7C,CAAC6G,KAAM,OAAQ+F,KAAM,mBAAoB5M,KAAM,OAAQuU,IAAK,CAAC,SAC7D,CAAC1N,KAAM,QAAS+F,KAAM,eAAgB5M,KAAM,OAC5C,CAAC6G,KAAM,QAAS+F,KAAM,oBAAqB5M,KAAM,QAASwU,KAAM,mBAChE,CAAC3N,KAAM,OAAQ+F,KAAM,cAAe5M,KAAM,OAAQuU,IAAK,CAAC,MAAO,QAC/D,CAAC1N,KAAM,WAAYgG,MAAO,CAAC,wBAAyB,sBAAuB,kBAC1E7M,KAAM,WAAYuU,IAAK,CAAC,KAAM,OAC/B,CAAC1N,KAAM,cAAe+F,KAAM,oBAAqB5M,KAAM,QAASuU,IAAK,CAAC,KAAME,MAAO,CAAC,cAAe,SACnG,CAAC5N,KAAM,gBAAiB+F,KAAM,sBAAuB5M,KAAM,QAASuU,IAAK,CAAC,MAAOE,MAAO,CAAC,gBAAiB,WAC1G,CAAC5N,KAAM,QAAS+F,KAAM,eAAgB5M,KAAM,SAAUuU,IAAK,CAAC,KAAM,MAAO,MAAO,QAChF,CAAC1N,KAAM,SAAU+F,KAAM,gBAAiB5M,KAAM,SAAUuU,IAAK,CAAC,MAC9D,CAAC1N,KAAM,KAAM+F,KAAM,YAAa5M,KAAM,KAAMuU,IAAK,CAAC,OAClD,CAAC1N,KAAM,SAAU+F,KAAM,gBAAiB5M,KAAM,SAAUuU,IAAK,CAAC,IAAK,QACnE,CAAC1N,KAAM,SAAU+F,KAAM,OAAQ5M,KAAM,QAASuU,IAAK,CAAC,WACpD,CAAC1N,KAAM,OAAQ+F,KAAM,cAAe5M,KAAM,OAAQuU,IAAK,CAAC,KAAM,OAC9D,CAAC1N,KAAM,MAAOgG,MAAO,CAAC,aAAc,0BAA2B,gCAAiC7M,KAAM,MAAOuU,IAAK,CAAC,MAAO,OAAQ,OAAQ,OAAQ,OAAQ,UAC1J,CAAC1N,KAAM,MAAO+F,KAAM,aAAc5M,KAAM,MAAOuU,IAAK,CAAC,QACrD,CAAC1N,KAAM,aAAc+F,KAAM,aAAc5M,KAAM,OAAQuU,IAAK,CAAC,MAAO,OAAQ,OAAQ,MAAO,OAAQ,QACnG,CAAC1N,KAAM,QAAS+F,KAAM,eAAgB5M,KAAM,MAAOuU,IAAK,CAAC,QACzD,CAAC1N,KAAM,aAAc+F,KAAM,eAAgB5M,KAAM,OACjD,CAAC6G,KAAM,aAAc+F,KAAM,2BAA4B5M,KAAM,aAAcuU,IAAK,CAAC,MAAO,OAAQ,SAChG,CAAC1N,KAAM,mBAAoB+F,KAAM,oBAAqB5M,KAAM,aAAcuU,IAAK,CAAC,aAAc,MAAO,MAAOE,MAAO,CAAC,MAAO,eAC3H,CAAC5N,KAAM,WAAY+F,KAAM,kBAAmB5M,KAAM,WAAYuU,IAAK,CAAC,UACpE,CAAC1N,KAAM,SAAU+F,KAAM,gBAAiB5M,KAAM,SAAUuU,IAAK,CAAC,QAAS,MAAO,KAAM,OAAQC,KAAM,kBAClG,CAAC3N,KAAM,SAAU+F,KAAM,gBAAiB5M,KAAM,SAAUuU,IAAK,CAAC,OAC9D,CAAC1N,KAAM,IAAK+F,KAAM,WAAY5M,KAAM,IAAKuU,IAAK,CAAC,MAC/C,CAAC1N,KAAM,IAAK+F,KAAM,cAAe5M,KAAM,IAAKuU,IAAK,CAAC,IAAK,KAAME,MAAO,CAAC,YACrE,CAAC5N,KAAM,mBAAoB+F,KAAM,aAAc5M,KAAM,MAAOuU,IAAK,CAAC,OAAQE,MAAO,CAAC,QAClF,CAAC5N,KAAM,cAAe+F,KAAM,qBAAsB5M,KAAM,OACxD,CAAC6G,KAAM,WAAY+F,KAAM,kBAAmB5M,KAAM,MAAOuU,IAAK,CAAC,SAC/D,CAAC1N,KAAM,OAAQ+F,KAAM,cAAe5M,KAAM,OAAQuU,IAAK,CAAC,MAAOE,MAAO,CAAC,QAAS,UAAW,OAAQ,KAAM,QACzG,CAAC5N,KAAM,OAAQ+F,KAAM,iBAAkB5M,KAAM,OAAQuU,IAAK,CAAC,OAC3D,CAAC1N,KAAM,MAAO+F,KAAM,aAAc5M,KAAM,MAAOuU,IAAK,CAAC,QACrD,CAAC1N,KAAM,OAAQ+F,KAAM,cAAe5M,KAAM,OAAQuU,IAAK,CAAC,SACxD,CAAC1N,KAAM,QAAS+F,KAAM,eAAgB5M,KAAM,QAASuU,IAAK,CAAC,UAC3D,CAAC1N,KAAM,SAAU+F,KAAM,gBAAiB5M,KAAM,SAAUuU,IAAK,CAAC,MAAO,OACrE,CAAC1N,KAAM,OAAQ+F,KAAM,cAAe5M,KAAM,MAAOuU,IAAK,CAAC,SACvD,CAAC1N,KAAM,QAASgG,MAAO,CAAC,YAAa,oBAAqB7M,KAAM,QAASuU,IAAK,CAAC,KAAM,MAAO,QAASE,MAAO,CAAC,OAAQ,KAAM,OAAQD,KAAM,cACzI,CAAC3N,KAAM,QAAS+F,KAAM,oBAAqB5M,KAAM,QAASuU,IAAK,CAAC,MAAO,UACvE,CAAC1N,KAAM,OAAQgG,MAAO,CAAC,cAAe,sBAAuB7M,KAAM,OAAQuU,IAAK,CAAC,SACjF,CAAC1N,KAAM,YAAa+F,KAAM,eAAgB5M,KAAM,YAAauU,IAAK,CAAC,OACnE,CAAC1N,KAAM,SAAU+F,KAAM,gBAAiB5M,KAAM,SAAUuU,IAAK,CAAC,QAC9D,CAAC1N,KAAM,OAAQ+F,KAAM,cAAe5M,KAAM,QAC1C,CAAC6G,KAAM,MAAO+F,KAAM,aAAc5M,KAAM,SAAUuU,IAAK,CAAC,MAAO,MAAO,MAAO,cAC7E,CAAC1N,KAAM,MAAO+F,KAAM,aAAc5M,KAAM,MAAOuU,IAAK,CAAC,OAAQE,MAAO,CAAC,qBACrE,CAAC5N,KAAM,SAAU+F,KAAM,2BAA4B5M,KAAM,SAAUuU,IAAK,CAAC,KAAM,UAAWE,MAAO,CAAC,WAClG,CAAC5N,KAAM,cAAe+F,KAAM,qBAAsB5M,KAAM,cAAeyU,MAAO,CAAC,QAAS,YACxF,CAAC5N,KAAM,MAAO+F,KAAM,aAAc5M,KAAM,MAAOuU,IAAK,CAAC,QACrD,CAAC1N,KAAM,SAAU+F,KAAM,gBAAiB5M,KAAM,OAC9C,CAAC6G,KAAM,WAAY+F,KAAM,kBAAmB5M,KAAM,QAASuU,IAAK,CAAC,QACjE,CAAC1N,KAAM,SAAU+F,KAAM,cAAe5M,KAAM,SAAUuU,IAAK,CAAC,SAC5D,CAAC1N,KAAM,QAAS+F,KAAM,eAAgB5M,KAAM,QAASuU,IAAK,CAAC,UAC3D,CAAC1N,KAAM,OAAQ+F,KAAM,cAAe5M,KAAM,QAC1C,CAAC6G,KAAM,QAAS+F,KAAM,eAAgB5M,KAAM,OAAQuU,IAAK,CAAC,OAAQ,MAAO,OAAQE,MAAO,CAAC,QACzF,CAAC5N,KAAM,gBAAiB+F,KAAM,uBAAwB5M,KAAM,UAAWuU,IAAK,CAAC,IAAK,KAAM,QACxF,CAAC1N,KAAM,MAAO+F,KAAM,aAAc5M,KAAM,MAAOuU,IAAK,CAAC,QACrD,CAAC1N,KAAM,UAAW+F,KAAM,iBAAkB5M,KAAM,UAAWuU,IAAK,CAAC,YACjE,CAAC1N,KAAM,aAAc+F,KAAM,oBAAqB5M,KAAM,cACtD,CAAC6G,KAAM,YAAa+F,KAAM,YAAa5M,KAAM,QAC7C,CAAC6G,KAAM,OAAQ+F,KAAM,cAAe5M,KAAM,OAAQuU,IAAK,CAAC,SACxD,CAAC1N,KAAM,UAAW+F,KAAM,iBAAkB5M,KAAM,WAChD,CAAC6G,KAAM,QAAS+F,KAAM,aAAc5M,KAAM,QAASuU,IAAK,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MACjG,CAAC1N,KAAM,OAAQ+F,KAAM,cAAe5M,KAAM,OAAQuU,IAAK,CAAC,OAAQ,QAAS,WACzE,CAAC1N,KAAM,WAAY+F,KAAM,kBAAmB5M,KAAM,WAAYuU,IAAK,CAAC,QACpE,CAAC1N,KAAM,SAAU+F,KAAM,cAAe5M,KAAM,SAAUuU,IAAK,CAAC,QAC5D,CAAC1N,KAAM,aAAc+F,KAAM,yBAA0B5M,KAAM,aAAcuU,IAAK,CAAC,MAAOE,MAAO,CAAC,OAC9F,CAAC5N,KAAM,iBAAkB+F,KAAM,sBAAuB5M,KAAM,MAAOuU,IAAK,CAAC,OAAQE,MAAO,CAAC,QACzF,CAAC5N,KAAM,OAAQ+F,KAAM,cAAe5M,KAAM,QAC1C,CAAC6G,KAAM,UAAW+F,KAAM,gBAAiB5M,KAAM,SAAUuU,IAAK,CAAC,WAC/D,CAAC1N,KAAM,SAAU+F,KAAM,YAAa5M,KAAM,KAAMuU,IAAK,CAAC,OACtD,CAAC1N,KAAM,WAAY+F,KAAM,gBAAiB5M,KAAM,WAAYuU,IAAK,CAAC,QAClE,CAAC1N,KAAM,WAAY+F,KAAM,gBAAiB5M,KAAM,WAAYuU,IAAK,CAAC,QAClE,CAAC1N,KAAM,UAAW+F,KAAM,iBAAkB5M,KAAM,UAAWuU,IAAK,CAAC,MACjE,CAAC1N,KAAM,OAAQ+F,KAAM,cAAe5M,KAAM,OAAQuU,IAAK,CAAC,MAAO,SAC/D,CAAC1N,KAAM,mBAAoBgG,MAAO,CAAC,eAAgB,cAAe7M,KAAM,MAAOuU,IAAK,CAAC,QACrF,CAAC1N,KAAM,MAAOgG,MAAO,CAAC,kBAAmB,YAAa7M,KAAM,MAAOuU,IAAK,CAAC,MAAO,MAAO,MAAO,OAAQE,MAAO,CAAC,MAAO,OAAQ,QAC7H,CAAC5N,KAAM,SAAU+F,KAAM,qBAAsB5M,KAAM,SAAUuU,IAAK,CAAC,KAAM,WACzE,CAAC1N,KAAM,QAAS+F,KAAM,eAAgB5M,KAAM,QAASuU,IAAK,CAAC,OAC3D,CAAC1N,KAAM,OAAQgG,MAAO,CAAC,cAAe,aAAc7M,KAAM,OAAQuU,IAAK,CAAC,OAAQ,OAAQE,MAAO,CAAC,QAChG,CAAC5N,KAAM,MAAO+F,KAAM,aAAc5M,KAAM,MAAOuU,IAAK,CAAC,QACrD,CAAC1N,KAAM,SAAU+F,KAAM,gBAAiB5M,KAAM,SAAUuU,IAAK,CAAC,SAAU,QAAS,QACjF,CAAC1N,KAAM,KAAM+F,KAAM,YAAa5M,KAAM,SAAUuU,IAAK,CAAC,OACtD,CAAC1N,KAAM,UAAW+F,KAAM,iBAAkB5M,KAAM,SAAUuU,IAAK,CAAC,YAChE,CAAC1N,KAAM,cAAe+F,KAAM,mBAAoB5M,KAAM,OAAQuU,IAAK,CAAC,MAAO,UAG7E,IAAK,IAAIhO,EAAI,EAAGA,EAAI/F,EAAW8T,SAASxQ,OAAQyC,IAAK,CACnD,IAAIzE,EAAOtB,EAAW8T,SAAS/N,GAC3BzE,EAAK+K,QAAO/K,EAAK8K,KAAO9K,EAAK+K,MAAM,IAGzCrM,EAAWkU,eAAiB,SAAS9H,GACnCA,EAAOA,EAAK+H,cACZ,IAAK,IAAIpO,EAAI,EAAGA,EAAI/F,EAAW8T,SAASxQ,OAAQyC,IAAK,CACnD,IAAIzE,EAAOtB,EAAW8T,SAAS/N,GAC/B,GAAIzE,EAAK8K,MAAQA,EAAM,OAAO9K,EAC9B,GAAIA,EAAK+K,MAAO,IAAK,IAAI+H,EAAI,EAAGA,EAAI9S,EAAK+K,MAAM/I,OAAQ8Q,IACrD,GAAI9S,EAAK+K,MAAM+H,IAAMhI,EAAM,OAAO9K,EAEtC,MAAI,SAASiC,KAAK6I,GAAcpM,EAAWkU,eAAe,mBACtD,UAAU3Q,KAAK6I,GAAcpM,EAAWkU,eAAe,yBAA3D,GAGFlU,EAAWqU,oBAAsB,SAASN,GACxCA,EAAMA,EAAII,cACV,IAAK,IAAIpO,EAAI,EAAGA,EAAI/F,EAAW8T,SAASxQ,OAAQyC,IAAK,CACnD,IAAIzE,EAAOtB,EAAW8T,SAAS/N,GAC/B,GAAIzE,EAAKyS,IAAK,IAAK,IAAIK,EAAI,EAAGA,EAAI9S,EAAKyS,IAAIzQ,OAAQ8Q,IACjD,GAAI9S,EAAKyS,IAAIK,IAAML,EAAK,OAAOzS,IAIrCtB,EAAWsU,mBAAqB,SAASC,GACvC,IAAK,IAAIxO,EAAI,EAAGA,EAAI/F,EAAW8T,SAASxQ,OAAQyC,IAAK,CACnD,IAAIzE,EAAOtB,EAAW8T,SAAS/N,GAC/B,GAAIzE,EAAK0S,MAAQ1S,EAAK0S,KAAKzQ,KAAKgR,GAAW,OAAOjT,EAEpD,IAAIkT,EAAMD,EAASE,YAAY,KAC3BV,EAAMS,GAAO,GAAKD,EAAS3B,UAAU4B,EAAM,EAAGD,EAASjR,QAC3D,GAAIyQ,EAAK,OAAO/T,EAAWqU,oBAAoBN,IAGjD/T,EAAWkM,eAAiB,SAAS7F,GACnCA,EAAOA,EAAK8N,cACZ,IAAK,IAAIpO,EAAI,EAAGA,EAAI/F,EAAW8T,SAASxQ,OAAQyC,IAAK,CACnD,IAAIzE,EAAOtB,EAAW8T,SAAS/N,GAC/B,GAAIzE,EAAK+E,KAAK8N,eAAiB9N,EAAM,OAAO/E,EAC5C,GAAIA,EAAK2S,MAAO,IAAK,IAAIG,EAAI,EAAGA,EAAI9S,EAAK2S,MAAM3Q,OAAQ8Q,IACrD,GAAI9S,EAAK2S,MAAMG,GAAGD,eAAiB9N,EAAM,OAAO/E,IApNpDM,CAAI,EAAQ,Q,uBCKb,SAAS5B,GACZ,aAEA,IAAI0U,EAAa,CACfC,gBAAiB,CAAC,MAAQ,EAAM,MAAQ,EAAM,IAAM,EAAM,KAAO,EAAM,SAAW,EAChE,OAAS,EAAM,OAAS,EAAM,IAAM,EAAM,KAAO,EAAM,OAAS,EAChE,QAAU,EAAM,MAAQ,EAAM,MAAQ,EAAM,OAAS,EAAM,QAAU,EACrE,OAAS,EAAM,KAAO,EAAM,UAAY,GAC1DC,iBAAkB,CAAC,IAAM,EAAM,IAAM,EAAM,UAAY,EAAM,QAAU,EAAM,GAAK,EAC/D,IAAM,EAAM,IAAM,EAAM,OAAS,EAAM,IAAM,EAAM,OAAS,EAC5D,IAAM,EAAM,IAAM,GACrCC,gBAAiB,CACf,GAAM,CAAC,IAAM,EAAM,IAAM,GACzB,GAAM,CAAC,IAAM,EAAM,IAAM,GACzB,GAAM,CAAC,IAAM,GACb,OAAU,CAAC,QAAU,EAAM,UAAY,GACvC,SAAY,CAAC,UAAY,GACzB,EAAK,CAAC,SAAW,EAAM,SAAW,EAAM,OAAS,EAAM,YAAc,EAAM,KAAO,EAC5E,KAAO,EAAM,IAAM,EAAM,UAAY,EAAM,QAAU,EAAM,MAAQ,EACnE,IAAM,EAAM,IAAM,EAAM,IAAM,EAAM,IAAM,EAAM,IAAM,EAAM,IAAM,EAClE,QAAU,EAAM,QAAU,EAAM,IAAM,EAAM,MAAQ,EAAM,KAAO,EAAM,IAAM,EAC7E,GAAK,EAAM,KAAO,EAAM,SAAW,EAAM,OAAS,EAAM,IAAM,GACpE,GAAM,CAAC,IAAM,EAAM,IAAM,GACzB,GAAM,CAAC,IAAM,EAAM,IAAM,GACzB,MAAS,CAAC,OAAS,EAAM,OAAS,GAClC,GAAM,CAAC,IAAM,EAAM,IAAM,GACzB,MAAS,CAAC,OAAS,GACnB,GAAM,CAAC,IAAM,EAAM,IAAM,GACzB,MAAS,CAAC,OAAS,EAAM,OAAS,GAClC,GAAM,CAAC,IAAM,IAEfC,YAAa,CAAC,KAAO,GACrBC,eAAe,EACfC,cAAc,EACdC,UAAU,GAGRC,EAAY,CACdP,gBAAiB,GACjBC,iBAAkB,GAClBC,gBAAiB,GACjBC,YAAa,GACbC,eAAe,EACfC,cAAc,EACdG,qBAAqB,EACrBF,UAAU,GAGZjV,EAAW1C,WAAW,OAAO,SAAS8X,EAAYC,GAChD,IAOI5C,EAAM6C,EAPNC,EAAaH,EAAWG,WACxBzX,EAAS,GACT0X,EAAWH,EAAQrJ,SAAW0I,EAAaQ,EAC/C,IAAK,IAAIO,KAAQD,EAAU1X,EAAO2X,GAAQD,EAASC,GACnD,IAAK,IAAIA,KAAQJ,EAASvX,EAAO2X,GAAQJ,EAAQI,GAKjD,SAASC,EAAOxW,EAAQmB,GACtB,SAASsV,EAAMC,GAEb,OADAvV,EAAMiP,SAAWsG,EACVA,EAAO1W,EAAQmB,GAGxB,IAAIlB,EAAKD,EAAOI,OAChB,MAAU,KAANH,EACED,EAAO2R,IAAI,KACT3R,EAAO2R,IAAI,KACT3R,EAAO0H,MAAM,UAAkB+O,EAAME,EAAQ,OAAQ,QAC7C,KACH3W,EAAO0H,MAAM,MACf+O,EAAME,EAAQ,UAAW,WACvB3W,EAAO0H,MAAM,WAAW,GAAM,IACvC1H,EAAOgM,SAAS,aACTyK,EAAMG,EAAQ,KAEd,KAEA5W,EAAO2R,IAAI,MACpB3R,EAAOgM,SAAS,aAChB7K,EAAMiP,SAAWuG,EAAQ,OAAQ,MAC1B,SAEPpD,EAAOvT,EAAO2R,IAAI,KAAO,WAAa,UACtCxQ,EAAMiP,SAAWyG,EACV,eAEM,KAAN5W,GAELD,EAAO2R,IAAI,KACT3R,EAAO2R,IAAI,KACR3R,EAAOgM,SAAS,eAAiBhM,EAAO2R,IAAI,KAE5C3R,EAAOgM,SAAS,SAAWhM,EAAO2R,IAAI,KAGxC3R,EAAOgM,SAAS,cAAgBhM,EAAO2R,IAAI,MAEtC,OAAS,SAErB3R,EAAOgM,SAAS,SACT,MAKX,SAAS6K,EAAM7W,EAAQmB,GACrB,IAAIlB,EAAKD,EAAOI,OAChB,GAAU,KAANH,GAAoB,KAANA,GAAaD,EAAO2R,IAAI,KAGxC,OAFAxQ,EAAMiP,SAAWoG,EACjBjD,EAAa,KAANtT,EAAY,SAAW,eACvB,cACF,GAAU,KAANA,EAET,OADAsT,EAAO,SACA,KACF,GAAU,KAANtT,EAAW,CACpBkB,EAAMiP,SAAWoG,EACjBrV,EAAMA,MAAQ2V,EACd3V,EAAM4V,QAAU5V,EAAM+O,SAAW,KACjC,IAAI9P,EAAOe,EAAMiP,SAASpQ,EAAQmB,GAClC,OAAOf,EAAOA,EAAO,aAAe,YAC/B,MAAI,SAASiE,KAAKpE,IACvBkB,EAAMiP,SAAW4G,EAAY/W,GAC7BkB,EAAM8V,eAAiBjX,EAAO6Q,SACvB1P,EAAMiP,SAASpQ,EAAQmB,KAE9BnB,EAAO0H,MAAM,4CACN,QAIX,SAASsP,EAAYvP,GACnB,IAAIyP,EAAU,SAASlX,EAAQmB,GAC7B,MAAQnB,EAAOmX,OACb,GAAInX,EAAOI,QAAUqH,EAAO,CAC1BtG,EAAMiP,SAAWyG,EACjB,MAGJ,MAAO,UAGT,OADAK,EAAQE,eAAgB,EACjBF,EAGT,SAASP,EAAQhV,EAAO0V,GACtB,OAAO,SAASrX,EAAQmB,GACtB,MAAQnB,EAAOmX,OAAO,CACpB,GAAInX,EAAO0H,MAAM2P,GAAa,CAC5BlW,EAAMiP,SAAWoG,EACjB,MAEFxW,EAAOI,OAET,OAAOuB,GAIX,SAASiV,EAAQU,GACf,OAAO,SAAStX,EAAQmB,GAEtB,IADA,IAAIlB,EAC2B,OAAvBA,EAAKD,EAAOI,SAAiB,CACnC,GAAU,KAANH,EAEF,OADAkB,EAAMiP,SAAWwG,EAAQU,EAAQ,GAC1BnW,EAAMiP,SAASpQ,EAAQmB,GACzB,GAAU,KAANlB,EAAW,CACpB,GAAa,GAATqX,EAAY,CACdnW,EAAMiP,SAAWoG,EACjB,MAGA,OADArV,EAAMiP,SAAWwG,EAAQU,EAAQ,GAC1BnW,EAAMiP,SAASpQ,EAAQmB,IAIpC,MAAO,QAIX,SAASoW,EAAMR,GACb,OAAOA,GAAWA,EAAQ9B,cAG5B,SAASuC,EAAQrW,EAAO4V,EAASU,GAC/B/Y,KAAKkG,KAAOzD,EAAMgP,QAClBzR,KAAKqY,QAAUA,GAAW,GAC1BrY,KAAKqJ,OAAS5G,EAAMuW,SACpBhZ,KAAK+Y,YAAcA,GACf7Y,EAAOgX,YAAYhH,eAAemI,IAAa5V,EAAMgP,SAAWhP,EAAMgP,QAAQwH,YAChFjZ,KAAKiZ,UAAW,GAEpB,SAASC,EAAWzW,GACdA,EAAMgP,UAAShP,EAAMgP,QAAUhP,EAAMgP,QAAQvL,MAEnD,SAASiT,EAAgB1W,EAAO2W,GAE9B,IADA,IAAIC,IACS,CACX,IAAK5W,EAAMgP,QACT,OAGF,GADA4H,EAAgB5W,EAAMgP,QAAQ4G,SACzBnY,EAAO+W,gBAAgB/G,eAAe2I,EAAMQ,MAC5CnZ,EAAO+W,gBAAgB4B,EAAMQ,IAAgBnJ,eAAe2I,EAAMO,IACrE,OAEFF,EAAWzW,IAIf,SAAS2V,EAAUvD,EAAMvT,EAAQmB,GAC/B,MAAY,WAARoS,GACFpS,EAAM+O,SAAWlQ,EAAO6Q,SACjBmH,GACU,YAARzE,EACF0E,EAEAnB,EAGX,SAASkB,EAAazE,EAAMvT,EAAQmB,GAClC,MAAY,QAARoS,GACFpS,EAAM4V,QAAU/W,EAAO8R,UACvBsE,EAAW,MACJ8B,GACEtZ,EAAOqX,qBAA+B,UAAR1C,GACvC6C,EAAW,cACJ8B,EAAU3E,EAAMvT,EAAQmB,KAE/BiV,EAAW,QACJ4B,GAGX,SAASC,EAAkB1E,EAAMvT,EAAQmB,GACvC,GAAY,QAARoS,EAAgB,CAClB,IAAIwD,EAAU/W,EAAO8R,UAIrB,OAHI3Q,EAAMgP,SAAWhP,EAAMgP,QAAQ4G,SAAWA,GAC1CnY,EAAO8W,iBAAiB9G,eAAe2I,EAAMpW,EAAMgP,QAAQ4G,WAC7Da,EAAWzW,GACRA,EAAMgP,SAAWhP,EAAMgP,QAAQ4G,SAAWA,IAAoC,IAAxBnY,EAAOuZ,cAChE/B,EAAW,MACJgC,IAEPhC,EAAW,YACJiC,GAEJ,OAAIzZ,EAAOqX,qBAA+B,UAAR1C,GACvC6C,EAAW,cACJgC,EAAW7E,EAAMvT,EAAQmB,KAEhCiV,EAAW,QACJiC,GAIX,SAASD,EAAW7E,EAAM+E,EAASnX,GACjC,MAAY,UAARoS,GACF6C,EAAW,QACJgC,IAETR,EAAWzW,GACJ2V,GAET,SAASuB,EAAc9E,EAAMvT,EAAQmB,GAEnC,OADAiV,EAAW,QACJgC,EAAW7E,EAAMvT,EAAQmB,GAGlC,SAAS+W,EAAU3E,EAAM+E,EAASnX,GAChC,GAAY,QAARoS,EAEF,OADA6C,EAAW,YACJmC,EACF,GAAY,UAARhF,GAA4B,gBAARA,EAAwB,CACrD,IAAIwD,EAAU5V,EAAM4V,QAAS7G,EAAW/O,EAAM+O,SAS9C,OARA/O,EAAM4V,QAAU5V,EAAM+O,SAAW,KACrB,gBAARqD,GACA3U,EAAO6W,gBAAgB7G,eAAe2I,EAAMR,IAC9Cc,EAAgB1W,EAAO4V,IAEvBc,EAAgB1W,EAAO4V,GACvB5V,EAAMgP,QAAU,IAAIqH,EAAQrW,EAAO4V,EAAS7G,GAAY/O,EAAMuW,WAEzDZ,EAGT,OADAV,EAAW,QACJ8B,EAET,SAASK,EAAYhF,EAAMvT,EAAQmB,GACjC,MAAY,UAARoS,EAAyBiF,GACxB5Z,EAAOkX,eAAcM,EAAW,SAC9B8B,EAAU3E,EAAMvT,EAAQmB,IAEjC,SAASqX,EAAejF,EAAMvT,EAAQmB,GACpC,MAAY,UAARoS,EAAyBkF,EACjB,QAARlF,GAAkB3U,EAAOiX,eAAgBO,EAAW,SAAiB8B,IACzE9B,EAAW,QACJ8B,EAAU3E,EAAMvT,EAAQmB,IAEjC,SAASsX,EAAmBlF,EAAMvT,EAAQmB,GACxC,MAAY,UAARoS,EAAyBkF,EACtBP,EAAU3E,EAAMvT,EAAQmB,GAGjC,OAtMAqV,EAAOnG,UAAW,EAsMX,CACL/H,WAAY,SAASoQ,GACnB,IAAIvX,EAAQ,CAACiP,SAAUoG,EACVrV,MAAO2V,EACPY,SAAUgB,GAAc,EACxB3B,QAAS,KAAM7G,SAAU,KACzBC,QAAS,MAEtB,OADkB,MAAduI,IAAoBvX,EAAMuX,WAAaA,GACpCvX,GAGTpB,MAAO,SAASC,EAAQmB,GAItB,IAHKA,EAAM4V,SAAW/W,EAAO8L,QAC3B3K,EAAMuW,SAAW1X,EAAO8Q,eAEtB9Q,EAAOkM,WAAY,OAAO,KAC9BqH,EAAO,KACP,IAAI5R,EAAQR,EAAMiP,SAASpQ,EAAQmB,GAOnC,OANKQ,GAAS4R,IAAkB,WAAT5R,IACrByU,EAAW,KACXjV,EAAMA,MAAQA,EAAMA,MAAMoS,GAAQ5R,EAAO3B,EAAQmB,GAC7CiV,IACFzU,EAAoB,SAAZyU,EAAsBzU,EAAQ,SAAWyU,IAE9CzU,GAGToG,OAAQ,SAAS5G,EAAO8H,EAAW0P,GACjC,IAAIxI,EAAUhP,EAAMgP,QAEpB,GAAIhP,EAAMiP,SAASgH,cACjB,OAAIjW,EAAM+O,UAAY/O,EAAMuW,SACnBvW,EAAM8V,eAAiB,EAEvB9V,EAAMuW,SAAWrB,EAE5B,GAAIlG,GAAWA,EAAQwH,SAAU,OAAO7W,EAAW2F,KACnD,GAAItF,EAAMiP,UAAYyG,GAAS1V,EAAMiP,UAAYoG,EAC/C,OAAOmC,EAAWA,EAASjR,MAAM,UAAU,GAAGtD,OAAS,EAEzD,GAAIjD,EAAM4V,QACR,OAAyC,IAArCnY,EAAOga,0BACFzX,EAAM+O,SAAW/O,EAAM4V,QAAQ3S,OAAS,EAExCjD,EAAM+O,SAAWmG,GAAczX,EAAOia,0BAA4B,GAE7E,GAAIja,EAAOka,YAAc,cAAczU,KAAK4E,GAAY,OAAO,EAC/D,IAAI8P,EAAW9P,GAAa,sBAAsBtD,KAAKsD,GACvD,GAAI8P,GAAYA,EAAS,GACvB,KAAO5I,GAAS,CACd,GAAIA,EAAQ4G,SAAWgC,EAAS,GAAI,CAClC5I,EAAUA,EAAQvL,KAClB,MACK,IAAIhG,EAAO8W,iBAAiB9G,eAAe2I,EAAMpH,EAAQ4G,UAG9D,MAFA5G,EAAUA,EAAQvL,UAKjB,GAAImU,EACT,KAAO5I,GAAS,CACd,IAAI6I,EAAWpa,EAAO+W,gBAAgB4B,EAAMpH,EAAQ4G,UACpD,IAAIiC,IAAYA,EAASpK,eAAe2I,EAAMwB,EAAS,KAGrD,MAFA5I,EAAUA,EAAQvL,KAKxB,KAAOuL,GAAWA,EAAQvL,OAASuL,EAAQsH,aACzCtH,EAAUA,EAAQvL,KACpB,OAAIuL,EAAgBA,EAAQpI,OAASsO,EACzBlV,EAAMuX,YAAc,GAGlCO,cAAe,gBACfzE,kBAAmB,UACnBC,gBAAiB,SAEjByE,cAAeta,EAAOkO,SAAW,OAAS,MAC1C1F,WAAYxI,EAAOkO,SAAW,OAAS,MAEvCqM,cAAe,SAAShY,GAClBA,EAAMA,OAASqX,IACjBrX,EAAMA,MAAQ+W,IAGlBkB,cAAe,SAASjY,GACtB,OAAOA,EAAM4V,QAAU,CAAC5P,KAAMhG,EAAM4V,QAASsC,MAAqB,YAAdlY,EAAMoS,MAAsB,MAGlF+F,kBAAmB,SAASnY,GAE1B,IADA,IAAIgP,EAAU,GACLoJ,EAAKpY,EAAMgP,QAASoJ,EAAIA,EAAKA,EAAG3U,KACvCuL,EAAQvF,KAAK2O,EAAGxC,SAClB,OAAO5G,EAAQqJ,eAKrB1Y,EAAW6L,WAAW,WAAY,OAClC7L,EAAW6L,WAAW,kBAAmB,OACpC7L,EAAW2Y,UAAU7K,eAAe,cACvC9N,EAAW6L,WAAW,YAAa,CAACxF,KAAM,MAAO2F,UAAU,IAzZzDpK,CAAI,EAAQ,Q,iBCEhB,WACE,aAEA,IAAIgX,EAAmB,SAASC,GAE9B,IAAKA,EAASzY,kBACZ,KAAM,kCAGRxC,KAAKkb,WAAaD,GAGpBD,EAAiBpb,UAAUub,SAAW,WACpC,OAAOnb,KAAKkb,WAAWC,YAGzBH,EAAiBpb,UAAUwb,YAAc,SAASvX,GAChD7D,KAAKkb,WAAWG,iBAAiBxX,IAGnCmX,EAAiBpb,UAAU0b,SAAW,SAASzX,GAC7C,IAAI0X,EAASvb,KAAKkb,WAAW7O,YAC7BrM,KAAKkb,WAAWI,SAASzX,GACzB7D,KAAKkb,WAAWM,UAAUD,IAQ5BP,EAAiBS,OAAS,SAASP,EAAY1b,GAE7CA,EAAUA,GAAW,GAErB,IAAIkc,EAAS,IAAIV,EAAiBE,GAChCS,EAAe,IAAIC,iBAAiBpc,EAASkc,GACxCR,EAAW1Y,oBAEfqZ,iBAAiB,SAAS,SAASC,GACpCH,EAAaI,QAAQD,MACpB,GAEHZ,EAAWc,UAAU,eAAe,SAASC,EAAMH,GACjD,GAAe,SAAXA,EAAEjH,KAGJ,OAFAiH,EAAEI,kBACFJ,EAAEK,iBACKR,EAAaS,OAAON,OAKjC,IAAIO,EAAoB,SAASpB,GAC/BD,EAAiBsB,KAAKtc,KAAMib,IAG9BoB,EAAkBZ,OAAS,SAASP,EAAY1b,GAE9CA,EAAUA,GAAW,GAErB,IAAIkc,EAAS,IAAIV,EAAiBE,GAChCS,EAAe,IAAIC,iBAAiBpc,EAASkc,GACxCR,EAAW1Y,oBAEfqZ,iBAAiB,SAAS,SAASC,GACpCH,EAAaI,QAAQD,MACpB,GAEHZ,EAAW/U,GAAG,QAAQ,SAAS8V,EAAMH,GACnC,QAAIH,EAAaS,OAAON,KACtBA,EAAEI,kBACFJ,EAAEK,kBACK,OAObP,iBAAiBW,QAAQC,YAAcH,EA/EzC,I,kBCCA,SAAUjZ,EAAUR,GAClB,aAEA,IAAIgZ,EAAmB,SAASpc,EAASyb,GACvCjb,KAAKyc,SAAWb,EAAiBc,KAAKC,MAAMnd,EAASoc,EAAiBhE,UACtE5X,KAAK0b,OAAST,EACdjb,KAAK4c,YAAc,aACnB5c,KAAK6c,UAAY,MAQnBjB,EAAiBW,QAAU,GAK3BX,EAAiBc,KAAO,CAQtBC,MAAO,WAEL,IADA,IAAIG,EAAS,GACJ3U,EAAIlI,UAAUyF,OAAS,EAAGyC,GAAK,EAAGA,IAAK,CAC9C,IAAI4U,EAAM9c,UAAUkI,GACpB,IAAK,IAAI6U,KAAKD,EACRA,EAAI7M,eAAe8M,KACrBF,EAAOE,GAAKD,EAAIC,IAItB,OAAOF,GASTG,mBAAoB,SAASC,EAAUC,GACrC,OAAQD,EAAW,YAAcC,GAC9B1Z,QAAQ,oBAAqB,QAC7BA,QAAQ,SAAU,KASvB2Z,mBAAoB,SAASC,EAAI9I,GAC/B,IAGE+I,EAHEC,EAAYF,EAAG1a,UACjB6a,EAAS,EACTC,GAAU,EAGPJ,EAAGK,gBAAwC,MAAtBL,EAAGK,eAC3BD,EAAU,KACDra,EAASua,YAClBF,EAAU,MAGI,OAAZA,GACFJ,EAAGO,SACHN,EAAQla,EAASua,UAAUE,eACrBC,UAAU,aAAcT,EAAGU,MAAMrY,QACvC8X,EAASF,EAAM/I,KAAK7O,QACC,OAAZ+X,IACTD,EAASH,EAAGK,gBAGd,IAAIM,EAASX,EAAQ,MAAErI,UAAU,EAAGwI,GAChCS,EAAQZ,EAAQ,MAAErI,UAAUwI,EAAQH,EAAGU,MAAMrY,QACjD2X,EAAGU,MAAQC,EAAQzJ,EAAO0J,EAC1BT,GAAkBjJ,EAAK7O,OACP,OAAZ+X,GACFJ,EAAGO,SACHN,EAAQla,EAASua,UAAUE,eACrBC,UAAU,aAAcT,EAAGU,MAAMrY,QACvC4X,EAAMQ,UAAU,YAAaN,GAC7BF,EAAMY,QAAQ,YAAa,GAC3BZ,EAAMa,UACe,OAAZV,IACTJ,EAAGK,eAAiBF,EACpBH,EAAGe,aAAeZ,EAClBH,EAAGO,SAELP,EAAG1a,UAAY4a,IASnB3B,EAAiBhE,SAAW,CAI1ByG,UAAW,wBAKXC,aAAc,OAKdC,gBAAiB,OAMjBC,iBAAkB,MAKlBC,cAAe,WAKfC,aAAc,CACZ,aACA,YACA,YACA,aAOFC,aAAc,yBAOdC,QAAS,sBAKTC,UAAW,uBAKXC,YAAa,GAKbC,aAAc,GAKdC,iBAAkB,WAChB,OAAO,GAMTC,eAAgB,aAOhBC,qBAAsB,WACpB,OAAO,GASTC,kBAAmB,WACjB,OAAO,GAMTC,eAAgB,cASlBxD,EAAiBhc,UAAUyf,WAAa,SAASjJ,GAC/C,IAAIkJ,EAAKtf,KACPuf,EAAW,IAAIC,SACfC,EAAM,IAAIpf,eACVoc,EAAWzc,KAAKyc,SAChBiD,EAAYjD,EAAS+B,kBAAoB/B,EAASkD,iBAQpD,GANsC,oBAA3BlD,EAASmD,eAClBnD,EAASmD,cAAcL,EAAUnJ,GAK/BA,EAAK3N,KAAM,CACb,IAAIoX,EAAkBzJ,EAAK3N,KAAKO,MAAM,WAClC6W,IACFH,EAAYG,EAAgB,IAIhC,IAAIC,EAAiB,SAAWC,KAAKC,MAAQ,IAAMN,EAQnD,GAPuC,oBAA5BjD,EAASqD,iBAClBA,EAAiBrD,EAASqD,eAAe1J,IAG3CmJ,EAASU,OAAOxD,EAAS8B,gBAAiBnI,EAAM0J,GAGZ,kBAAzBrD,EAASqC,YAClB,IAAK,IAAIoB,KAAOzD,EAASqC,YACnBrC,EAASqC,YAAY5O,eAAegQ,IACtCX,EAASU,OAAOC,EAAKzD,EAASqC,YAAYoB,IAQhD,GAHAT,EAAInf,KAAK,OAAQmc,EAAS4B,WAGW,kBAA1B5B,EAASsC,aAChB,IAAK,IAAI7P,KAAUuN,EAASsC,aACpBtC,EAASsC,aAAa7O,eAAehB,IACrCuQ,EAAIU,iBAAiBjR,EAAQuN,EAASsC,aAAa7P,IAgB/D,OAXAuQ,EAAIlf,OAAS,WAEQ,MAAfkf,EAAIhf,QAAiC,MAAfgf,EAAIhf,OAC5B6e,EAAGJ,qBAAqBO,GAExBH,EAAGH,kBAAkBM,KAGc,IAAnChD,EAASuC,iBAAiBS,IAC5BA,EAAIze,KAAKue,GAEJE,GAQT7D,EAAiBhc,UAAUwgB,cAAgB,SAAShK,GAClD,MAAkB,WAAdA,EAAKiK,OACuC,IAA5CrgB,KAAKyc,SAASiC,aAAa5e,QAAQ,MAG9BE,KAAKyc,SAASiC,aAAa5e,QAAQsW,EAAKvB,OAAS,IAU5D+G,EAAiBhc,UAAUsf,qBAAuB,SAASO,GACzD,IAA2D,IAAvDzf,KAAKyc,SAASyC,qBAAqB5C,KAAKtc,KAAMyf,GAAgB,CAChE,IAAI3C,EAASwD,KAAKC,MAAMd,EAAI9e,cAC1BgW,EAAWmG,EAAO9c,KAAKyc,SAASgC,eAElC,GAAI3B,GAAUnG,EAAU,CACtB,IAAI6J,EAEFA,EADmC,oBAA1BxgB,KAAKyc,SAASmC,QACZ5e,KAAKyc,SAASmC,QAAQtC,KAAKtc,KAAM2W,EAAUmG,GAE3C9c,KAAKyc,SAASmC,QAAQnb,QAAQzD,KAAK4c,YAAajG,GAE7D,IAAIpC,EAAOvU,KAAK0b,OAAOP,WAAW1X,QAAQzD,KAAK6c,UAAW2D,GAC1DxgB,KAAK0b,OAAOJ,SAAS/G,GACrBvU,KAAKyc,SAAS2C,eAAe9C,KAAKtc,KAAM2W,MAY9CiF,EAAiBhc,UAAUuf,kBAAoB,SAASM,GACtD,IAAwD,IAApDzf,KAAKyc,SAAS0C,kBAAkB7C,KAAKtc,KAAMyf,GAAgB,CAC7D,IAAIlL,EAAOvU,KAAK0b,OAAOP,WAAW1X,QAAQzD,KAAK6c,UAAW,IAC1D7c,KAAK0b,OAAOJ,SAAS/G,KAUzBqH,EAAiBhc,UAAU6gB,eAAiB,SAASrK,IACG,IAAlDpW,KAAKyc,SAASwC,eAAe3C,KAAKtc,KAAMoW,KAC1CpW,KAAK6c,UAAY7c,KAAKyc,SAASkC,aAC/B3e,KAAK0b,OAAON,YAAYpb,KAAK6c,aAUjCjB,EAAiBhc,UAAUmc,QAAU,SAASD,GAC5C,IAEE4E,EAFE5D,GAAS,EACX6D,EAAgB7E,EAAE6E,cAGpB,GAA6B,kBAAlBA,EAA4B,CACrCD,EAAQC,EAAcD,OAASC,EAAcC,OAAS,GAEtD,IAAK,IAAIzY,EAAI,EAAGA,EAAIuY,EAAMhb,OAAQyC,IAAK,CACrC,IAAI0Y,EAAOH,EAAMvY,GACbnI,KAAKogB,cAAcS,KACrB/D,GAAS,EACT9c,KAAKygB,eAAeI,EAAKC,aACzB9gB,KAAKqf,WAAWwB,EAAKC,eAO3B,OAFIhE,GAAUhB,EAAEK,iBAETW,GAQTlB,EAAiBhc,UAAUwc,OAAS,SAASN,GAE3C,IADA,IAAIgB,GAAS,EACJ3U,EAAI,EAAGA,EAAI2T,EAAEiF,aAAaH,MAAMlb,OAAQyC,IAAK,CACpD,IAAIiO,EAAO0F,EAAEiF,aAAaH,MAAMzY,GAC5BnI,KAAKogB,cAAchK,KACrB0G,GAAS,EACT9c,KAAKygB,eAAerK,GACpBpW,KAAKqf,WAAWjJ,IAIpB,OAAO0G,GAGTla,EAAOgZ,iBAAmBA,EApY5B,CAsYGxY,SAAUR,S,kBCrYb,SAAUQ,EAAUR,EAAQoe,GAC1B,aAEApF,iBAAiBW,QAAQ0E,OAAS,GAKlC,IAAIvF,EAAS,SAAST,GAEpB,IAAIiG,EAAQF,EAAE/F,GAEd,MAAO,CACLE,SAAU,WACR,OAAO+F,EAAMrd,OAEfuX,YAAa,SAASvX,GACpB+X,iBAAiBc,KAAKU,mBAAmB8D,EAAM,GAAIrd,IAErDyX,SAAU,SAASzX,GACjBqd,EAAMrd,IAAIA,MAKhBmd,EAAEG,GAAGC,iBAAmB,SAAS5hB,GA0B/B,OAxBUwhB,EAAEhhB,MAERqhB,MAAK,WAEP,IAAIH,EAAQF,EAAEhhB,MACZshB,EAAK,IAAI5F,EAAOwF,GAChBvF,EAAe,IAAIC,iBAAiBpc,EAAS8hB,GAE/CJ,EAAMK,KAAK,CACT,MAAS,SAASzF,GAChBH,EAAaI,QAAQD,EAAE0F,gBAEzB,KAAQ,SAAS1F,GACfA,EAAEI,kBACFJ,EAAEK,iBACFR,EAAaS,OAAON,EAAE0F,gBAExB,qBAAsB,SAAS1F,GAC7BA,EAAEI,kBACFJ,EAAEK,uBAKDnc,MAGT4b,iBAAiBW,QAAQ0E,OAAOQ,OAAS/F,EAtD3C,CAwDGtY,SAAUR,OAAQ8e,S,qBC9DrB,IAAItf,EAAa,EAAQ,MAEzBA,EAAWyF,SAAS8Z,yBAA2B,SAAUrf,GACrD,IACIqE,EADSrE,EAAG2F,iBACC,GAAGG,KAIpB,IAF+B,IADhB9F,EAAGgG,cAAc3B,EAAIE,MACdgC,KAGlBvG,EAAGqG,YAAY,mBAInB,GAAIrG,EAAG9C,QAAQoiB,eACXtf,EAAGqG,YAAY,iBAEd,CACD,IAAIkZ,EAASC,MAAMxf,EAAG9C,QAAQuiB,QAAU,GAAG5N,KAAK,KAChD7R,EAAG+Y,iBAAiBwG,KAI5Bzf,EAAWyF,SAASma,gCAAkC,SAAU1f,GAC5D,IACIqE,EADSrE,EAAG2F,iBACC,GAAGG,KAIpB,IAF+B,IADhB9F,EAAGgG,cAAc3B,EAAIE,MACdgC,KAGlBvG,EAAGqG,YAAY,mBAInB,GAAIrG,EAAG9C,QAAQoiB,eACXtf,EAAGqG,YAAY,iBAEd,CACD,IAAIkZ,EAASC,MAAMxf,EAAG9C,QAAQuiB,QAAU,GAAG5N,KAAK,KAChD7R,EAAG+Y,iBAAiBwG,M,uBCnC3B,SAAUI,GACX,aAMA,IAAIhR,EAAQ,CACViR,QAAS,OACTpV,KAAM,oBACNqV,OAAQC,EACR9S,GAAI,yDACJ+S,QAAS,wCACTC,QAASF,EACTG,WAAY,0CACZ1Z,KAAM,gEACN2Z,KAAM,+EACNC,IAAK,mFACLC,MAAON,EACPO,SAAU,oCACVC,UAAW,6DACXrO,KAAM,WAgFR,SAASsO,EAAMrjB,GACbQ,KAAK8iB,OAAS,GACd9iB,KAAK8iB,OAAOC,MAAQ,GACpB/iB,KAAKR,QAAUA,GAAWwjB,EAAOpL,SACjC5X,KAAKijB,MAAQhS,EAAMiS,OAEfljB,KAAKR,QAAQ2jB,MACXnjB,KAAKR,QAAQ4jB,OACfpjB,KAAKijB,MAAQhS,EAAMmS,OAEnBpjB,KAAKijB,MAAQhS,EAAMkS,KAvFzBlS,EAAMoS,OAAS,wBACfpS,EAAMqS,OAAS,gEACfrS,EAAMwR,IAAMc,EAAKtS,EAAMwR,KACpBhf,QAAQ,QAASwN,EAAMoS,QACvB5f,QAAQ,QAASwN,EAAMqS,QACvBE,WAEHvS,EAAMzH,OAAS,kBACfyH,EAAM4P,KAAO,6CACb5P,EAAM4P,KAAO0C,EAAKtS,EAAM4P,KAAM,MAC3Bpd,QAAQ,QAASwN,EAAMzH,QACvBga,WAEHvS,EAAMpI,KAAO0a,EAAKtS,EAAMpI,MACrBpF,QAAQ,QAASwN,EAAMzH,QACvB/F,QAAQ,KAAM,mEACdA,QAAQ,MAAO,UAAYwN,EAAMwR,IAAIgB,OAAS,KAC9CD,WAEHvS,EAAMyS,KAAO,oKAKbzS,EAAMuR,KAAOe,EAAKtS,EAAMuR,MACrB/e,QAAQ,UAAW,mBACnBA,QAAQ,SAAU,wBAClBA,QAAQ,UAAW,+CACnBA,QAAQ,OAAQwN,EAAMyS,MACtBF,WAEHvS,EAAM2R,UAAYW,EAAKtS,EAAM2R,WAC1Bnf,QAAQ,KAAMwN,EAAM3B,IACpB7L,QAAQ,UAAWwN,EAAMoR,SACzB5e,QAAQ,WAAYwN,EAAM0R,UAC1Blf,QAAQ,MAAO,IAAMwN,EAAMyS,MAC3BF,WAEHvS,EAAMsR,WAAagB,EAAKtS,EAAMsR,YAC3B9e,QAAQ,YAAawN,EAAM2R,WAC3BY,WAMHvS,EAAMiS,OAASvG,EAAM,GAAI1L,GAMzBA,EAAMkS,IAAMxG,EAAM,GAAI1L,EAAMiS,OAAQ,CAClCf,OAAQ,+DACRS,UAAW,IACXP,QAAS,0CAGXpR,EAAMkS,IAAIP,UAAYW,EAAKtS,EAAM2R,WAC9Bnf,QAAQ,MAAO,MACZwN,EAAMkS,IAAIhB,OAAOsB,OAAOhgB,QAAQ,MAAO,OAAS,IAChDwN,EAAMpI,KAAK4a,OAAOhgB,QAAQ,MAAO,OAAS,KAC7C+f,WAMHvS,EAAMmS,OAASzG,EAAM,GAAI1L,EAAMkS,IAAK,CAClCb,QAAS,gEACTI,MAAO,8DA0BTG,EAAMI,MAAQhS,EAMd4R,EAAMc,IAAM,SAASC,EAAKpkB,GAExB,OADY,IAAIqjB,EAAMrjB,GACTmkB,IAAIC,IAOnBf,EAAMjjB,UAAU+jB,IAAM,SAASC,GAO7B,OANAA,EAAMA,EACHngB,QAAQ,WAAY,MACpBA,QAAQ,MAAO,QACfA,QAAQ,UAAW,KACnBA,QAAQ,UAAW,MAEfzD,KAAKqB,MAAMuiB,GAAK,IAOzBf,EAAMjjB,UAAUyB,MAAQ,SAASuiB,EAAKC,GAEpC,IAAIniB,EACAoiB,EACAC,EACAC,EACAC,EACApD,EACAqD,EACA/b,EACAgc,EACAC,EACAC,EAEJ,IAbAT,EAAMA,EAAIngB,QAAQ,SAAU,IAarBmgB,GAYL,IAVIG,EAAM/jB,KAAKijB,MAAMf,QAAQjb,KAAK2c,MAChCA,EAAMA,EAAI5O,UAAU+O,EAAI,GAAGre,QACvBqe,EAAI,GAAGre,OAAS,GAClB1F,KAAK8iB,OAAO5W,KAAK,CACf2I,KAAM,WAMRkP,EAAM/jB,KAAKijB,MAAMnW,KAAK7F,KAAK2c,GAC7BA,EAAMA,EAAI5O,UAAU+O,EAAI,GAAGre,QAC3Bqe,EAAMA,EAAI,GAAGtgB,QAAQ,UAAW,IAChCzD,KAAK8iB,OAAO5W,KAAK,CACf2I,KAAM,OACNN,KAAOvU,KAAKR,QAAQ8kB,SAEhBP,EADAA,EAAItgB,QAAQ,OAAQ,WAO5B,GAAIsgB,EAAM/jB,KAAKijB,MAAMd,OAAOlb,KAAK2c,GAC/BA,EAAMA,EAAI5O,UAAU+O,EAAI,GAAGre,QAC3B1F,KAAK8iB,OAAO5W,KAAK,CACf2I,KAAM,OACN0P,KAAMR,EAAI,GACVxP,KAAMwP,EAAI,IAAM,UAMpB,GAAIA,EAAM/jB,KAAKijB,MAAMZ,QAAQpb,KAAK2c,GAChCA,EAAMA,EAAI5O,UAAU+O,EAAI,GAAGre,QAC3B1F,KAAK8iB,OAAO5W,KAAK,CACf2I,KAAM,UACN+D,MAAOmL,EAAI,GAAGre,OACd6O,KAAMwP,EAAI,UAMd,GAAIF,IAAQE,EAAM/jB,KAAKijB,MAAMX,QAAQrb,KAAK2c,IAA1C,CAUE,IATAA,EAAMA,EAAI5O,UAAU+O,EAAI,GAAGre,QAE3Bmb,EAAO,CACLhM,KAAM,QACN3F,OAAQ6U,EAAI,GAAGtgB,QAAQ,eAAgB,IAAI+gB,MAAM,UACjDC,MAAOV,EAAI,GAAGtgB,QAAQ,aAAc,IAAI+gB,MAAM,UAC9CE,MAAOX,EAAI,GAAGtgB,QAAQ,MAAO,IAAI+gB,MAAM,OAGpCrc,EAAI,EAAGA,EAAI0Y,EAAK4D,MAAM/e,OAAQyC,IAC7B,YAAYxC,KAAKkb,EAAK4D,MAAMtc,IAC9B0Y,EAAK4D,MAAMtc,GAAK,QACP,aAAaxC,KAAKkb,EAAK4D,MAAMtc,IACtC0Y,EAAK4D,MAAMtc,GAAK,SACP,YAAYxC,KAAKkb,EAAK4D,MAAMtc,IACrC0Y,EAAK4D,MAAMtc,GAAK,OAEhB0Y,EAAK4D,MAAMtc,GAAK,KAIpB,IAAKA,EAAI,EAAGA,EAAI0Y,EAAK6D,MAAMhf,OAAQyC,IACjC0Y,EAAK6D,MAAMvc,GAAK0Y,EAAK6D,MAAMvc,GAAGqc,MAAM,UAGtCxkB,KAAK8iB,OAAO5W,KAAK2U,QAMnB,GAAIkD,EAAM/jB,KAAKijB,MAAM3T,GAAGrI,KAAK2c,GAC3BA,EAAMA,EAAI5O,UAAU+O,EAAI,GAAGre,QAC3B1F,KAAK8iB,OAAO5W,KAAK,CACf2I,KAAM,YAMV,GAAIkP,EAAM/jB,KAAKijB,MAAMV,WAAWtb,KAAK2c,GACnCA,EAAMA,EAAI5O,UAAU+O,EAAI,GAAGre,QAE3B1F,KAAK8iB,OAAO5W,KAAK,CACf2I,KAAM,qBAGRkP,EAAMA,EAAI,GAAGtgB,QAAQ,WAAY,IAKjCzD,KAAKqB,MAAM0iB,EAAKF,GAEhB7jB,KAAK8iB,OAAO5W,KAAK,CACf2I,KAAM,wBAOV,GAAIkP,EAAM/jB,KAAKijB,MAAMpa,KAAK5B,KAAK2c,GAA/B,CAkBE,IAjBAA,EAAMA,EAAI5O,UAAU+O,EAAI,GAAGre,QAE3B2e,GADAL,EAAOD,EAAI,IACMre,OAAS,EAE1B1F,KAAK8iB,OAAO5W,KAAK,CACf2I,KAAM,aACN8P,QAASN,EACTha,MAAOga,GAAaL,EAAO,KAM7BtiB,GAAO,EACP0iB,GAHAL,EAAMA,EAAI,GAAG/a,MAAMhJ,KAAKijB,MAAMpC,OAGtBnb,OACRyC,EAAI,EAEGA,EAAIic,EAAGjc,IAKZ+b,GAJArD,EAAOkD,EAAI5b,IAIEzC,SACbmb,EAAOA,EAAKpd,QAAQ,qBAAsB,KAIhC3D,QAAQ,SAChBokB,GAASrD,EAAKnb,OACdmb,EAAQ7gB,KAAKR,QAAQ8kB,SAEjBzD,EAAKpd,QAAQ,YAAa,IAD1Bod,EAAKpd,QAAQ,IAAI8P,OAAO,QAAU2Q,EAAQ,IAAK,MAAO,KAMxDlkB,KAAKR,QAAQolB,YAAczc,IAAMic,EAAI,IAEnCJ,KADJC,EAAIhT,EAAMzH,OAAOvC,KAAK8c,EAAI5b,EAAI,IAAI,KACd6b,EAAKte,OAAS,GAAKue,EAAEve,OAAS,IAChDke,EAAMG,EAAI7a,MAAMf,EAAI,GAAGgM,KAAK,MAAQyP,EACpCzb,EAAIic,EAAI,IAOZN,EAAQpiB,GAAQ,eAAeiE,KAAKkb,GAChC1Y,IAAMic,EAAI,IACZ1iB,EAAwC,OAAjCmf,EAAKlT,OAAOkT,EAAKnb,OAAS,GAC5Boe,IAAOA,EAAQpiB,IAGtB1B,KAAK8iB,OAAO5W,KAAK,CACf2I,KAAMiP,EACF,mBACA,oBAIN9jB,KAAKqB,MAAMwf,GAAM,GAEjB7gB,KAAK8iB,OAAO5W,KAAK,CACf2I,KAAM,kBAIV7U,KAAK8iB,OAAO5W,KAAK,CACf2I,KAAM,kBAOV,GAAIkP,EAAM/jB,KAAKijB,MAAMT,KAAKvb,KAAK2c,GAC7BA,EAAMA,EAAI5O,UAAU+O,EAAI,GAAGre,QAC3B1F,KAAK8iB,OAAO5W,KAAK,CACf2I,KAAM7U,KAAKR,QAAQqlB,SACf,YACA,OACJC,KAAM9kB,KAAKR,QAAQulB,YACF,QAAXhB,EAAI,IAA2B,WAAXA,EAAI,IAA8B,UAAXA,EAAI,IACrDxP,KAAMwP,EAAI,UAMd,GAAIF,IAAQE,EAAM/jB,KAAKijB,MAAMR,IAAIxb,KAAK2c,IACpCA,EAAMA,EAAI5O,UAAU+O,EAAI,GAAGre,QACvBqe,EAAI,KAAIA,EAAI,GAAKA,EAAI,GAAG/O,UAAU,EAAG+O,EAAI,GAAGre,OAAS,IACzDye,EAAMJ,EAAI,GAAGxN,cACRvW,KAAK8iB,OAAOC,MAAMoB,KACrBnkB,KAAK8iB,OAAOC,MAAMoB,GAAO,CACvBa,KAAMjB,EAAI,GACVkB,MAAOlB,EAAI,UAOjB,GAAIF,IAAQE,EAAM/jB,KAAKijB,MAAMP,MAAMzb,KAAK2c,IAAxC,CAUE,IATAA,EAAMA,EAAI5O,UAAU+O,EAAI,GAAGre,QAE3Bmb,EAAO,CACLhM,KAAM,QACN3F,OAAQ6U,EAAI,GAAGtgB,QAAQ,eAAgB,IAAI+gB,MAAM,UACjDC,MAAOV,EAAI,GAAGtgB,QAAQ,aAAc,IAAI+gB,MAAM,UAC9CE,MAAOX,EAAI,GAAGtgB,QAAQ,iBAAkB,IAAI+gB,MAAM,OAG/Crc,EAAI,EAAGA,EAAI0Y,EAAK4D,MAAM/e,OAAQyC,IAC7B,YAAYxC,KAAKkb,EAAK4D,MAAMtc,IAC9B0Y,EAAK4D,MAAMtc,GAAK,QACP,aAAaxC,KAAKkb,EAAK4D,MAAMtc,IACtC0Y,EAAK4D,MAAMtc,GAAK,SACP,YAAYxC,KAAKkb,EAAK4D,MAAMtc,IACrC0Y,EAAK4D,MAAMtc,GAAK,OAEhB0Y,EAAK4D,MAAMtc,GAAK,KAIpB,IAAKA,EAAI,EAAGA,EAAI0Y,EAAK6D,MAAMhf,OAAQyC,IACjC0Y,EAAK6D,MAAMvc,GAAK0Y,EAAK6D,MAAMvc,GACxB1E,QAAQ,mBAAoB,IAC5B+gB,MAAM,UAGXxkB,KAAK8iB,OAAO5W,KAAK2U,QAMnB,GAAIkD,EAAM/jB,KAAKijB,MAAMN,SAAS1b,KAAK2c,GACjCA,EAAMA,EAAI5O,UAAU+O,EAAI,GAAGre,QAC3B1F,KAAK8iB,OAAO5W,KAAK,CACf2I,KAAM,UACN+D,MAAkB,MAAXmL,EAAI,GAAa,EAAI,EAC5BxP,KAAMwP,EAAI,UAMd,GAAIF,IAAQE,EAAM/jB,KAAKijB,MAAML,UAAU3b,KAAK2c,IAC1CA,EAAMA,EAAI5O,UAAU+O,EAAI,GAAGre,QAC3B1F,KAAK8iB,OAAO5W,KAAK,CACf2I,KAAM,YACNN,KAA2C,OAArCwP,EAAI,GAAGpW,OAAOoW,EAAI,GAAGre,OAAS,GAChCqe,EAAI,GAAG7a,MAAM,GAAI,GACjB6a,EAAI,UAMZ,GAAIA,EAAM/jB,KAAKijB,MAAM1O,KAAKtN,KAAK2c,GAE7BA,EAAMA,EAAI5O,UAAU+O,EAAI,GAAGre,QAC3B1F,KAAK8iB,OAAO5W,KAAK,CACf2I,KAAM,OACNN,KAAMwP,EAAI,UAKd,GAAIH,EACF,MAAM,IAAIsB,MAAM,0BAA4BtB,EAAIuB,WAAW,IAI/D,OAAOnlB,KAAK8iB,QAOd,IAAI/R,EAAS,CACXqU,OAAQ,8BACRC,SAAU,sCACVC,IAAKlD,EACL+B,IAAK,+EACLoB,KAAM,0BACNC,QAAS,iCACTC,OAAQ,8CACRzV,OAAQ,iDACRD,GAAI,gEACJjD,KAAM,oCACN4Y,GAAI,mBACJC,IAAKvD,EACL7N,KAAM,yCAoER,SAASqR,EAAY7C,EAAOvjB,GAO1B,GANAQ,KAAKR,QAAUA,GAAWwjB,EAAOpL,SACjC5X,KAAK+iB,MAAQA,EACb/iB,KAAKijB,MAAQlS,EAAOmS,OACpBljB,KAAK6lB,SAAW7lB,KAAKR,QAAQqmB,UAAY,IAAIC,EAC7C9lB,KAAK6lB,SAASrmB,QAAUQ,KAAKR,SAExBQ,KAAK+iB,MACR,MAAM,IAAImC,MAAM,6CAGdllB,KAAKR,QAAQ2jB,IACXnjB,KAAKR,QAAQumB,OACf/lB,KAAKijB,MAAQlS,EAAOgV,OAEpB/lB,KAAKijB,MAAQlS,EAAOoS,IAEbnjB,KAAKR,QAAQ8kB,WACtBtkB,KAAKijB,MAAQlS,EAAOuT,UAoOxB,SAASwB,EAAStmB,GAChBQ,KAAKR,QAAUA,GAAW,GA0J5B,SAASwmB,KAyBT,SAASC,EAAOzmB,GACdQ,KAAK8iB,OAAS,GACd9iB,KAAKqB,MAAQ,KACbrB,KAAKR,QAAUA,GAAWwjB,EAAOpL,SACjC5X,KAAKR,QAAQqmB,SAAW7lB,KAAKR,QAAQqmB,UAAY,IAAIC,EACrD9lB,KAAK6lB,SAAW7lB,KAAKR,QAAQqmB,SAC7B7lB,KAAK6lB,SAASrmB,QAAUQ,KAAKR,QAkL/B,SAAS4lB,EAAO5C,EAAM0D,GACpB,OAAO1D,EACJ/e,QAASyiB,EAA0B,KAAjB,eAAuB,SACzCziB,QAAQ,KAAM,QACdA,QAAQ,KAAM,QACdA,QAAQ,KAAM,UACdA,QAAQ,KAAM,SAGnB,SAAS0iB,EAAS3D,GAEhB,OAAOA,EAAK/e,QAAQ,8CAA8C,SAAS2iB,EAAGC,GAE5E,MAAU,WADVA,EAAIA,EAAE9P,eACoB,IACN,MAAhB8P,EAAE1Y,OAAO,GACY,MAAhB0Y,EAAE1Y,OAAO,GACZhO,OAAO2mB,aAAa9e,SAAS6e,EAAErR,UAAU,GAAI,KAC7CrV,OAAO2mB,cAAcD,EAAErR,UAAU,IAEhC,MAIX,SAASuO,EAAK9O,EAAO8R,GAGnB,OAFA9R,EAAQA,EAAMgP,OACd8C,EAAMA,GAAO,GACN,CACL9iB,QAAS,SAASgF,EAAM5E,GAItB,OAFAA,GADAA,EAAMA,EAAI4f,QAAU5f,GACVJ,QAAQ,eAAgB,MAClCgR,EAAQA,EAAMhR,QAAQgF,EAAM5E,GACrB7D,MAETwjB,SAAU,WACR,OAAO,IAAIjQ,OAAOkB,EAAO8R,KAK/B,SAASC,EAAW9c,EAAMsb,GAaxB,OAZKyB,EAAS,IAAM/c,KAId,mBAAmB/D,KAAK+D,GAC1B+c,EAAS,IAAM/c,GAAQA,EAAO,IAE9B+c,EAAS,IAAM/c,GAAQA,EAAKjG,QAAQ,SAAU,KAGlDiG,EAAO+c,EAAS,IAAM/c,GAEG,OAArBsb,EAAK9b,MAAM,EAAG,GACTQ,EAAKjG,QAAQ,WAAY,KAAOuhB,EACX,MAAnBA,EAAKrX,OAAO,GACdjE,EAAKjG,QAAQ,qBAAsB,MAAQuhB,EAE3Ctb,EAAOsb,EA5tBlBjU,EAAO2V,QAAU,+BACjB3V,EAAO4V,OAAS,+IAEhB5V,EAAOsU,SAAW9B,EAAKxS,EAAOsU,UAC3B5hB,QAAQ,SAAUsN,EAAO2V,SACzBjjB,QAAQ,QAASsN,EAAO4V,QACxBnD,WAEHzS,EAAO6V,QAAU,oDACjB7V,EAAO8V,MAAQ,iDAEf9V,EAAOwU,KAAOhC,EAAKxS,EAAOwU,MACvB9hB,QAAQ,SAAUsN,EAAO6V,SACzBnjB,QAAQ,OAAQsN,EAAO8V,OACvBrD,WAEHzS,EAAOyU,QAAUjC,EAAKxS,EAAOyU,SAC1B/hB,QAAQ,SAAUsN,EAAO6V,SACzBpD,WAMHzS,EAAOmS,OAASvG,EAAM,GAAI5L,GAM1BA,EAAOuT,SAAW3H,EAAM,GAAI5L,EAAOmS,OAAQ,CACzClT,OAAQ,iEACRD,GAAI,6DAONgB,EAAOoS,IAAMxG,EAAM,GAAI5L,EAAOmS,OAAQ,CACpCkC,OAAQ7B,EAAKxS,EAAOqU,QAAQ3hB,QAAQ,KAAM,QAAQ+f,WAClD8B,IAAK/B,EAAK,oEACP9f,QAAQ,QAASsN,EAAO4V,QACxBnD,WACHsD,WAAY,yEACZnB,IAAK,0BACLpR,KAAMgP,EAAKxS,EAAOwD,MACf9Q,QAAQ,KAAM,OACdA,QAAQ,IAAK,iEACb+f,aAOLzS,EAAOgV,OAASpJ,EAAM,GAAI5L,EAAOoS,IAAK,CACpCuC,GAAInC,EAAKxS,EAAO2U,IAAIjiB,QAAQ,OAAQ,KAAK+f,WACzCjP,KAAMgP,EAAKxS,EAAOoS,IAAI5O,MAAM9Q,QAAQ,OAAQ,KAAK+f,aAiCnDoC,EAAY3C,MAAQlS,EAMpB6U,EAAYmB,OAAS,SAASnD,EAAKb,EAAOvjB,GAExC,OADa,IAAIomB,EAAY7C,EAAOvjB,GACtBunB,OAAOnD,IAOvBgC,EAAYhmB,UAAUmnB,OAAS,SAASnD,GAOtC,IANA,IACI2B,EACAhR,EACAyQ,EACAjB,EAJAiD,EAAM,GAMHpD,GAEL,GAAIG,EAAM/jB,KAAKijB,MAAMmC,OAAOne,KAAK2c,GAC/BA,EAAMA,EAAI5O,UAAU+O,EAAI,GAAGre,QAC3BshB,GAAOjD,EAAI,QAKb,GAAIA,EAAM/jB,KAAKijB,MAAMoC,SAASpe,KAAK2c,GACjCA,EAAMA,EAAI5O,UAAU+O,EAAI,GAAGre,QAGzBsf,EAFa,MAAXjB,EAAI,GAEC,WADPxP,EAAO6Q,EAAOplB,KAAKinB,OAAOlD,EAAI,MAG9BxP,EAAO6Q,EAAOrB,EAAI,IAGpBiD,GAAOhnB,KAAK6lB,SAASN,KAAKP,EAAM,KAAMzQ,QAKxC,GAAKvU,KAAKknB,UAAWnD,EAAM/jB,KAAKijB,MAAMqC,IAAIre,KAAK2c,KAmB/C,GAAIG,EAAM/jB,KAAKijB,MAAMkB,IAAIld,KAAK2c,IACvB5jB,KAAKknB,QAAU,QAAQvhB,KAAKoe,EAAI,IACnC/jB,KAAKknB,QAAS,EACLlnB,KAAKknB,QAAU,UAAUvhB,KAAKoe,EAAI,MAC3C/jB,KAAKknB,QAAS,GAEhBtD,EAAMA,EAAI5O,UAAU+O,EAAI,GAAGre,QAC3BshB,GAAOhnB,KAAKR,QAAQqlB,SAChB7kB,KAAKR,QAAQulB,UACX/kB,KAAKR,QAAQulB,UAAUhB,EAAI,IAC3BqB,EAAOrB,EAAI,IACbA,EAAI,QAKV,GAAIA,EAAM/jB,KAAKijB,MAAMsC,KAAKte,KAAK2c,GAC7BA,EAAMA,EAAI5O,UAAU+O,EAAI,GAAGre,QAC3B1F,KAAKknB,QAAS,EACdF,GAAOhnB,KAAKmnB,WAAWpD,EAAK,CAC1BiB,KAAMjB,EAAI,GACVkB,MAAOlB,EAAI,KAEb/jB,KAAKknB,QAAS,OAKhB,IAAKnD,EAAM/jB,KAAKijB,MAAMuC,QAAQve,KAAK2c,MAC3BG,EAAM/jB,KAAKijB,MAAMwC,OAAOxe,KAAK2c,IADrC,CAKE,GAHAA,EAAMA,EAAI5O,UAAU+O,EAAI,GAAGre,QAC3B6f,GAAQxB,EAAI,IAAMA,EAAI,IAAItgB,QAAQ,OAAQ,OAC1C8hB,EAAOvlB,KAAK+iB,MAAMwC,EAAKhP,kBACTgP,EAAKP,KAAM,CACvBgC,GAAOjD,EAAI,GAAGpW,OAAO,GACrBiW,EAAMG,EAAI,GAAG/O,UAAU,GAAK4O,EAC5B,SAEF5jB,KAAKknB,QAAS,EACdF,GAAOhnB,KAAKmnB,WAAWpD,EAAKwB,GAC5BvlB,KAAKknB,QAAS,OAKhB,GAAInD,EAAM/jB,KAAKijB,MAAMjT,OAAO/I,KAAK2c,GAC/BA,EAAMA,EAAI5O,UAAU+O,EAAI,GAAGre,QAC3BshB,GAAOhnB,KAAK6lB,SAAS7V,OAAOhQ,KAAK+mB,OAAOhD,EAAI,IAAMA,EAAI,UAKxD,GAAIA,EAAM/jB,KAAKijB,MAAMlT,GAAG9I,KAAK2c,GAC3BA,EAAMA,EAAI5O,UAAU+O,EAAI,GAAGre,QAC3BshB,GAAOhnB,KAAK6lB,SAAS9V,GAAG/P,KAAK+mB,OAAOhD,EAAI,IAAMA,EAAI,UAKpD,GAAIA,EAAM/jB,KAAKijB,MAAMnW,KAAK7F,KAAK2c,GAC7BA,EAAMA,EAAI5O,UAAU+O,EAAI,GAAGre,QAC3BshB,GAAOhnB,KAAK6lB,SAASuB,SAAShC,EAAOrB,EAAI,GAAGsD,QAAQ,SAKtD,GAAItD,EAAM/jB,KAAKijB,MAAMyC,GAAGze,KAAK2c,GAC3BA,EAAMA,EAAI5O,UAAU+O,EAAI,GAAGre,QAC3BshB,GAAOhnB,KAAK6lB,SAASH,UAKvB,GAAI3B,EAAM/jB,KAAKijB,MAAM0C,IAAI1e,KAAK2c,GAC5BA,EAAMA,EAAI5O,UAAU+O,EAAI,GAAGre,QAC3BshB,GAAOhnB,KAAK6lB,SAASF,IAAI3lB,KAAK+mB,OAAOhD,EAAI,UAK3C,GAAIA,EAAM/jB,KAAKijB,MAAM1O,KAAKtN,KAAK2c,GAC7BA,EAAMA,EAAI5O,UAAU+O,EAAI,GAAGre,QAC3BshB,GAAOhnB,KAAK6lB,SAAStR,KAAK6Q,EAAOplB,KAAKsnB,YAAYvD,EAAI,WAIxD,GAAIH,EACF,MAAM,IAAIsB,MAAM,0BAA4BtB,EAAIuB,WAAW,SAzG3DpB,EAAI,GAAK/jB,KAAKijB,MAAM6D,WAAW7f,KAAK8c,EAAI,IAAI,GAC5CH,EAAMA,EAAI5O,UAAU+O,EAAI,GAAGre,QACZ,MAAXqe,EAAI,GAENiB,EAAO,WADPzQ,EAAO6Q,EAAOrB,EAAI,MAGlBxP,EAAO6Q,EAAOrB,EAAI,IAEhBiB,EADa,SAAXjB,EAAI,GACC,UAAYxP,EAEZA,GAGXyS,GAAOhnB,KAAK6lB,SAASN,KAAKP,EAAM,KAAMzQ,GAgG1C,OAAOyS,GAOTpB,EAAYhmB,UAAUunB,WAAa,SAASpD,EAAKwB,GAC/C,IAAIP,EAAOI,EAAOG,EAAKP,MACnBC,EAAQM,EAAKN,MAAQG,EAAOG,EAAKN,OAAS,KAE9C,MAA4B,MAArBlB,EAAI,GAAGpW,OAAO,GACjB3N,KAAK6lB,SAASN,KAAKP,EAAMC,EAAOjlB,KAAK+mB,OAAOhD,EAAI,KAChD/jB,KAAK6lB,SAAStW,MAAMyV,EAAMC,EAAOG,EAAOrB,EAAI,MAOlD6B,EAAYhmB,UAAU0nB,YAAc,SAAS/S,GAC3C,OAAKvU,KAAKR,QAAQ8nB,YACX/S,EAEJ9Q,QAAQ,OAAQ,UAEhBA,QAAQ,MAAO,UAEfA,QAAQ,0BAA2B,YAEnCA,QAAQ,KAAM,UAEdA,QAAQ,+BAAgC,YAExCA,QAAQ,KAAM,UAEdA,QAAQ,SAAU,UAfiB8Q,GAsBxCqR,EAAYhmB,UAAUqnB,OAAS,SAAS1S,GACtC,IAAKvU,KAAKR,QAAQynB,OAAQ,OAAO1S,EAMjC,IALA,IAGIhT,EAHAylB,EAAM,GACN5C,EAAI7P,EAAK7O,OACTyC,EAAI,EAGDA,EAAIic,EAAGjc,IACZ5G,EAAKgT,EAAK4Q,WAAWhd,GACjBgC,KAAKod,SAAW,KAClBhmB,EAAK,IAAMA,EAAGimB,SAAS,KAEzBR,GAAO,KAAOzlB,EAAK,IAGrB,OAAOylB,GAWTlB,EAASlmB,UAAUkN,KAAO,SAASA,EAAMyX,EAAMkD,GAC7C,GAAIznB,KAAKR,QAAQkoB,UAAW,CAC1B,IAAIV,EAAMhnB,KAAKR,QAAQkoB,UAAU5a,EAAMyX,GAC5B,MAAPyC,GAAeA,IAAQla,IACzB2a,GAAU,EACV3a,EAAOka,GAIX,OAAKzC,EAME,qBACHvkB,KAAKR,QAAQmoB,WACbvC,EAAOb,GAAM,GACb,MACCkD,EAAU3a,EAAOsY,EAAOtY,GAAM,IAC/B,oBAVK,eACF2a,EAAU3a,EAAOsY,EAAOtY,GAAM,IAC/B,mBAWRgZ,EAASlmB,UAAU2iB,WAAa,SAASxZ,GACvC,MAAO,iBAAmBA,EAAQ,mBAGpC+c,EAASlmB,UAAU4iB,KAAO,SAASA,GACjC,OAAOA,GAGTsD,EAASlmB,UAAUyiB,QAAU,SAAS9N,EAAMqT,EAAOC,GACjD,MAAO,KACHD,EACA,QACA5nB,KAAKR,QAAQsoB,aACbD,EAAItR,cAAc9S,QAAQ,UAAW,KACrC,KACA8Q,EACA,MACAqT,EACA,OAGN9B,EAASlmB,UAAU0P,GAAK,WACtB,OAAOtP,KAAKR,QAAQuoB,MAAQ,UAAY,UAG1CjC,EAASlmB,UAAUiJ,KAAO,SAASmf,EAAMrD,EAASta,GAChD,IAAIwK,EAAO8P,EAAU,KAAO,KAE5B,MAAO,IAAM9P,GADG8P,GAAqB,IAAVta,EAAgB,WAAaA,EAAQ,IAAO,IACxC,MAAQ2d,EAAO,KAAOnT,EAAO,OAG9DiR,EAASlmB,UAAUqoB,SAAW,SAAS1T,GACrC,MAAO,OAASA,EAAO,WAGzBuR,EAASlmB,UAAUgjB,UAAY,SAASrO,GACtC,MAAO,MAAQA,EAAO,UAGxBuR,EAASlmB,UAAU8iB,MAAQ,SAASxT,EAAQ8Y,GAC1C,MAAO,qBAEH9Y,EAFG,sBAKH8Y,EALG,wBAUTlC,EAASlmB,UAAUsoB,SAAW,SAASC,GACrC,MAAO,SAAWA,EAAU,WAG9BrC,EAASlmB,UAAUwoB,UAAY,SAASD,EAASE,GAC/C,IAAIxT,EAAOwT,EAAMnZ,OAAS,KAAO,KAIjC,OAHUmZ,EAAM5D,MACZ,IAAM5P,EAAO,sBAAwBwT,EAAM5D,MAAQ,KACnD,IAAM5P,EAAO,KACJsT,EAAU,KAAOtT,EAAO,OAIvCiR,EAASlmB,UAAUoQ,OAAS,SAASuE,GACnC,MAAO,WAAaA,EAAO,aAG7BuR,EAASlmB,UAAUmQ,GAAK,SAASwE,GAC/B,MAAO,OAASA,EAAO,SAGzBuR,EAASlmB,UAAUwnB,SAAW,SAAS7S,GACrC,MAAO,SAAWA,EAAO,WAG3BuR,EAASlmB,UAAU8lB,GAAK,WACtB,OAAO1lB,KAAKR,QAAQuoB,MAAQ,QAAU,QAGxCjC,EAASlmB,UAAU+lB,IAAM,SAASpR,GAChC,MAAO,QAAUA,EAAO,UAG1BuR,EAASlmB,UAAU2lB,KAAO,SAASP,EAAMC,EAAO1Q,GAC9C,GAAIvU,KAAKR,QAAQqlB,SAAU,CACzB,IACE,IAAIyD,EAAOC,mBAAmBpC,EAASnB,IACpCvhB,QAAQ,UAAW,IACnB8S,cACH,MAAOuF,GACP,OAAOvH,EAET,GAAoC,IAAhC+T,EAAKxoB,QAAQ,gBAAsD,IAA9BwoB,EAAKxoB,QAAQ,cAAgD,IAA1BwoB,EAAKxoB,QAAQ,SACvF,OAAOyU,EAGPvU,KAAKR,QAAQgpB,UAAYC,EAAqB9iB,KAAKqf,KACrDA,EAAOwB,EAAWxmB,KAAKR,QAAQgpB,QAASxD,IAE1C,IAAIgC,EAAM,YAAchC,EAAO,IAK/B,OAJIC,IACF+B,GAAO,WAAa/B,EAAQ,KAE9B+B,GAAO,IAAMzS,EAAO,QAItBuR,EAASlmB,UAAU2P,MAAQ,SAASyV,EAAMC,EAAO1Q,GAC3CvU,KAAKR,QAAQgpB,UAAYC,EAAqB9iB,KAAKqf,KACrDA,EAAOwB,EAAWxmB,KAAKR,QAAQgpB,QAASxD,IAE1C,IAAIgC,EAAM,aAAehC,EAAO,UAAYzQ,EAAO,IAKnD,OAJI0Q,IACF+B,GAAO,WAAa/B,EAAQ,KAE9B+B,GAAOhnB,KAAKR,QAAQuoB,MAAQ,KAAO,KAIrCjC,EAASlmB,UAAU2U,KAAO,SAASA,GACjC,OAAOA,GAYTyR,EAAapmB,UAAUoQ,OACvBgW,EAAapmB,UAAUmQ,GACvBiW,EAAapmB,UAAUwnB,SACvBpB,EAAapmB,UAAU+lB,IACvBK,EAAapmB,UAAU2U,KAAO,SAAUA,GACtC,OAAOA,GAGTyR,EAAapmB,UAAU2lB,KACvBS,EAAapmB,UAAU2P,MAAQ,SAASyV,EAAMC,EAAO1Q,GACnD,MAAO,GAAKA,GAGdyR,EAAapmB,UAAU8lB,GAAK,WAC1B,MAAO,IAoBTO,EAAO1F,MAAQ,SAASqD,EAAKpkB,GAE3B,OADa,IAAIymB,EAAOzmB,GACV+gB,MAAMqD,IAOtBqC,EAAOrmB,UAAU2gB,MAAQ,SAASqD,GAChC5jB,KAAK+Q,OAAS,IAAI6U,EAAYhC,EAAIb,MAAO/iB,KAAKR,SAE9CQ,KAAK0oB,WAAa,IAAI9C,EACpBhC,EAAIb,MACJpG,EAAM,GAAI3c,KAAKR,QAAS,CAACqmB,SAAU,IAAIG,KAEzChmB,KAAK8iB,OAASc,EAAI9I,UAGlB,IADA,IAAIkM,EAAM,GACHhnB,KAAK0B,QACVslB,GAAOhnB,KAAK2oB,MAGd,OAAO3B,GAOTf,EAAOrmB,UAAU8B,KAAO,WACtB,OAAO1B,KAAKqB,MAAQrB,KAAK8iB,OAAOpW,OAOlCuZ,EAAOrmB,UAAU4B,KAAO,WACtB,OAAOxB,KAAK8iB,OAAO9iB,KAAK8iB,OAAOpd,OAAS,IAAM,GAOhDugB,EAAOrmB,UAAUgpB,UAAY,WAG3B,IAFA,IAAIZ,EAAOhoB,KAAKqB,MAAMkT,KAEM,SAArBvU,KAAKwB,OAAOqT,MACjBmT,GAAQ,KAAOhoB,KAAK0B,OAAO6S,KAG7B,OAAOvU,KAAK+Q,OAAOgW,OAAOiB,IAO5B/B,EAAOrmB,UAAU+oB,IAAM,WACrB,OAAQ3oB,KAAKqB,MAAMwT,MACjB,IAAK,QACH,MAAO,GAET,IAAK,KACH,OAAO7U,KAAK6lB,SAASvW,KAEvB,IAAK,UACH,OAAOtP,KAAK6lB,SAASxD,QACnBriB,KAAK+Q,OAAOgW,OAAO/mB,KAAKqB,MAAMkT,MAC9BvU,KAAKqB,MAAMuX,MACXuN,EAASnmB,KAAK0oB,WAAW3B,OAAO/mB,KAAKqB,MAAMkT,QAE/C,IAAK,OACH,OAAOvU,KAAK6lB,SAAS/Y,KAAK9M,KAAKqB,MAAMkT,KACnCvU,KAAKqB,MAAMkjB,KACXvkB,KAAKqB,MAAMomB,SAEf,IAAK,QACH,IAEItf,EACA0gB,EACAC,EACAtS,EALAtH,EAAS,GACT8Y,EAAO,GAQX,IADAc,EAAO,GACF3gB,EAAI,EAAGA,EAAInI,KAAKqB,MAAM6N,OAAOxJ,OAAQyC,IACxC2gB,GAAQ9oB,KAAK6lB,SAASuC,UACpBpoB,KAAK+Q,OAAOgW,OAAO/mB,KAAKqB,MAAM6N,OAAO/G,IACrC,CAAE+G,QAAQ,EAAMuV,MAAOzkB,KAAKqB,MAAMojB,MAAMtc,KAK5C,IAFA+G,GAAUlP,KAAK6lB,SAASqC,SAASY,GAE5B3gB,EAAI,EAAGA,EAAInI,KAAKqB,MAAMqjB,MAAMhf,OAAQyC,IAAK,CAI5C,IAHA0gB,EAAM7oB,KAAKqB,MAAMqjB,MAAMvc,GAEvB2gB,EAAO,GACFtS,EAAI,EAAGA,EAAIqS,EAAInjB,OAAQ8Q,IAC1BsS,GAAQ9oB,KAAK6lB,SAASuC,UACpBpoB,KAAK+Q,OAAOgW,OAAO8B,EAAIrS,IACvB,CAAEtH,QAAQ,EAAOuV,MAAOzkB,KAAKqB,MAAMojB,MAAMjO,KAI7CwR,GAAQhoB,KAAK6lB,SAASqC,SAASY,GAEjC,OAAO9oB,KAAK6lB,SAASnD,MAAMxT,EAAQ8Y,GAErC,IAAK,mBAGH,IAFAA,EAAO,GAEqB,mBAArBhoB,KAAK0B,OAAOmT,MACjBmT,GAAQhoB,KAAK2oB,MAGf,OAAO3oB,KAAK6lB,SAAStD,WAAWyF,GAElC,IAAK,aACHA,EAAO,GAIP,IAHA,IAAIrD,EAAU3kB,KAAKqB,MAAMsjB,QACrBta,EAAQrK,KAAKqB,MAAMgJ,MAEK,aAArBrK,KAAK0B,OAAOmT,MACjBmT,GAAQhoB,KAAK2oB,MAGf,OAAO3oB,KAAK6lB,SAAShd,KAAKmf,EAAMrD,EAASta,GAE3C,IAAK,kBAGH,IAFA2d,EAAO,GAEqB,kBAArBhoB,KAAK0B,OAAOmT,MACjBmT,GAA4B,SAApBhoB,KAAKqB,MAAMwT,KACf7U,KAAK4oB,YACL5oB,KAAK2oB,MAGX,OAAO3oB,KAAK6lB,SAASoC,SAASD,GAEhC,IAAK,mBAGH,IAFAA,EAAO,GAEqB,kBAArBhoB,KAAK0B,OAAOmT,MACjBmT,GAAQhoB,KAAK2oB,MAGf,OAAO3oB,KAAK6lB,SAASoC,SAASD,GAEhC,IAAK,OACH,IAAIxF,EAAQxiB,KAAKqB,MAAMyjB,KAAQ9kB,KAAKR,QAAQ8kB,SAExCtkB,KAAKqB,MAAMkT,KADXvU,KAAK+Q,OAAOgW,OAAO/mB,KAAKqB,MAAMkT,MAElC,OAAOvU,KAAK6lB,SAASrD,KAAKA,GAE5B,IAAK,YACH,OAAOxiB,KAAK6lB,SAASjD,UAAU5iB,KAAK+Q,OAAOgW,OAAO/mB,KAAKqB,MAAMkT,OAE/D,IAAK,OACH,OAAOvU,KAAK6lB,SAASjD,UAAU5iB,KAAK4oB,eAqE1C,IAAInC,EAAW,GACXgC,EAAuB,gCAE3B,SAASrG,KAGT,SAASzF,EAAMI,GAKb,IAJA,IACIgM,EACA7I,EAFA/X,EAAI,EAIDA,EAAIlI,UAAUyF,OAAQyC,IAE3B,IAAK+X,KADL6I,EAAS9oB,UAAUkI,GAEb6gB,OAAOppB,UAAUsQ,eAAeoM,KAAKyM,EAAQ7I,KAC/CnD,EAAImD,GAAO6I,EAAO7I,IAKxB,OAAOnD,EAOT,SAASiG,EAAOY,EAAK2C,EAAK0C,GAExB,GAAmB,qBAARrF,GAA+B,OAARA,EAChC,MAAM,IAAIsB,MAAM,kDAElB,GAAmB,kBAARtB,EACT,MAAM,IAAIsB,MAAM,wCACZ8D,OAAOppB,UAAU4nB,SAASlL,KAAKsH,GAAO,qBAG5C,GAAIqF,GAA2B,oBAAR1C,EAAvB,CACO0C,IACHA,EAAW1C,EACXA,EAAM,MAKR,IACIzD,EACAoG,EAFAxB,GAFJnB,EAAM5J,EAAM,GAAIqG,EAAOpL,SAAU2O,GAAO,KAEpBmB,UAGhBvf,EAAI,EAER,IACE2a,EAASD,EAAMc,IAAIC,EAAK2C,GACxB,MAAOzK,GACP,OAAOmN,EAASnN,GAGlBoN,EAAUpG,EAAOpd,OAEjB,IAAIyjB,EAAO,SAASC,GAClB,GAAIA,EAEF,OADA7C,EAAImB,UAAYA,EACTuB,EAASG,GAGlB,IAAIpC,EAEJ,IACEA,EAAMf,EAAO1F,MAAMuC,EAAQyD,GAC3B,MAAOzK,GACPsN,EAAMtN,EAKR,OAFAyK,EAAImB,UAAYA,EAET0B,EACHH,EAASG,GACTH,EAAS,KAAMjC,IAGrB,IAAKU,GAAaA,EAAUhiB,OAAS,EACnC,OAAOyjB,IAKT,UAFO5C,EAAImB,WAENwB,EAAS,OAAOC,IAErB,KAAOhhB,EAAI2a,EAAOpd,OAAQyC,KACxB,SAAU9G,GACW,SAAfA,EAAMwT,OACCqU,GAAWC,IAEfzB,EAAUrmB,EAAMkT,KAAMlT,EAAMkjB,MAAM,SAAS6E,EAAKtc,GACrD,OAAIsc,EAAYD,EAAKC,GACT,MAARtc,GAAgBA,IAASzL,EAAMkT,OACxB2U,GAAWC,KAEtB9nB,EAAMkT,KAAOzH,EACbzL,EAAMomB,SAAU,SACdyB,GAAWC,SAXjB,CAaGrG,EAAO3a,SAKd,IAEE,OADIoe,IAAKA,EAAM5J,EAAM,GAAIqG,EAAOpL,SAAU2O,IACnCN,EAAO1F,MAAMsC,EAAMc,IAAIC,EAAK2C,GAAMA,GACzC,MAAOzK,GAEP,GADAA,EAAEuN,SAAW,+DACR9C,GAAOvD,EAAOpL,UAAU0R,OAC3B,MAAO,iCACHlE,EAAOtJ,EAAEuN,QAAU,IAAI,GACvB,SAEN,MAAMvN,GAhHVsG,EAAKnb,KAAOmb,EAwHZY,EAAOxjB,QACPwjB,EAAOuG,WAAa,SAAShD,GAE3B,OADA5J,EAAMqG,EAAOpL,SAAU2O,GAChBvD,GAGTA,EAAOpL,SAAW,CAChBuL,KAAK,EACLC,QAAQ,EACR2C,QAAQ,EACRzB,UAAU,EACVO,UAAU,EACVE,UAAW,KACXkC,QAAQ,EACRrC,YAAY,EACZ0E,QAAQ,EACR5B,UAAW,KACXC,WAAY,QACZL,aAAa,EACbQ,aAAc,GACdjC,SAAU,IAAIC,EACdiC,OAAO,EACPS,QAAS,MAOXxF,EAAOiD,OAASA,EAChBjD,EAAOhL,OAASiO,EAAO1F,MAEvByC,EAAO8C,SAAWA,EAClB9C,EAAOgD,aAAeA,EAEtBhD,EAAOH,MAAQA,EACfG,EAAOwG,MAAQ3G,EAAMc,IAErBX,EAAO4C,YAAcA,EACrB5C,EAAOyG,YAAc7D,EAAYmB,OAEjC/D,EAAOzC,MAAQyC,EAGb9gB,EAAOC,QAAU6gB,EA/1ClB,CAq2CEhjB,OAA2B,qBAAX4C,OAAyBA,OAAS,EAAA8mB,K,4CCh2CjDpqB,GAEJ,WACA,cAgCAA,EAAO,SAAUqqB,EAAYC,EAASC,EAAWpN,GAChDA,EAAWA,GAAY,GAEvBzc,KAAK2pB,WAAa,KAElB3pB,KAAKijB,MAAQ,GACbjjB,KAAK8pB,gBAAkB,GAEvB9pB,KAAK+pB,cAAgB,GACrB/pB,KAAKgqB,kBAAoB,GAEzBhqB,KAAKiqB,iBAAmB,GAExBjqB,KAAKqoB,MAAQ5L,EAAS4L,OAAS,GAE/BroB,KAAKkqB,SAAW,GAEhBlqB,KAAKmqB,QAAS,EAEd,IAEIC,EAGAjiB,EAAGqO,EAAG6T,EAAMC,EALZC,EAAOvqB,KA0CX,SAASwqB,EAAalF,EAAKmF,GAC1B,IAAIC,EAAWH,EAAKI,UAAUrF,EAAK,KAAM7I,EAASmO,WAE9CnO,EAASmO,UACZF,EAASG,MAAK,SAAS5O,GACtBwO,EAAQxO,MAITwO,EAAQC,GAIV,SAASI,EAAW7O,GACnB2N,EAAU3N,EAEN4N,GACHkB,IAIF,SAASC,EAAa/O,GACrB4N,EAAY5N,EAER2N,GACHmB,IAIF,SAASA,IAMR,IALAR,EAAKtH,MAAQsH,EAAKU,UAAUrB,GAG5BW,EAAKP,kBAAoB,GAEpB7hB,EAAI,EAAGkiB,EAAOE,EAAKR,cAAcrkB,OAAQyC,EAAIkiB,EAAMliB,IAAK,CAC5D,IAAI+iB,EAAOX,EAAKR,cAAc5hB,GAE9B,IAAKqO,EAAI,EAAG8T,EAAQY,EAAKxlB,OAAQ8Q,EAAI8T,EAAO9T,IAC3C+T,EAAKP,kBAAkBkB,EAAK1U,IAAM,GAcpC,IAAKrO,IARD,mBAAoBoiB,EAAKlC,QAC5BkC,EAAKP,kBAAkBO,EAAKlC,MAAM8C,gBAAkB,IAGrDZ,EAAKT,gBAAkBS,EAAKa,UAAUvB,GAI5BU,EAAKP,kBAC2B,IAArCO,EAAKP,kBAAkB7hB,GAAGzC,eACtB6kB,EAAKP,kBAAkB7hB,GAOhC,IAAKA,EAAI,EAAGkiB,EAAOE,EAAKR,cAAcrkB,OAAQyC,EAAIkiB,EAAMliB,IAAK,CAC5D,IAAIkjB,EAAWd,EAAKR,cAAc5hB,GAE9BmjB,EAAiB,GAErB,IAAK9U,EAAI,EAAG8T,EAAQe,EAAS3lB,OAAQ8Q,EAAI8T,EAAO9T,IAAK,CACpD,IAAI+U,EAAYF,EAAS7U,GAErB+U,KAAahB,EAAKP,kBACrBsB,GAAkB,IAAMf,EAAKP,kBAAkBuB,GAAWpX,KAAK,KAAO,IAGtEmX,GAAkBC,EAIpBhB,EAAKR,cAAc5hB,GAAK,IAAIoL,OAAO+X,EAAgB,KAGpDf,EAAKJ,QAAS,EAEV1N,EAASmO,WAAanO,EAAS+O,gBAClC/O,EAAS+O,eAAejB,GAI1B,OA3HIZ,IACHY,EAAKZ,WAAaA,EAGdC,GAAWC,EACdkB,IAG0B,qBAAXnoB,QAA0B,WAAYA,QAAU,cAAeA,OAAO6oB,QAAU,WAAY7oB,OAAO6oB,OAAO/L,WAExH0K,EADG3N,EAASiP,eACLjP,EAASiP,eAGT,oBAGH9B,GAASY,EAAaiB,OAAO/L,UAAUiM,OAAOvB,EAAO,IAAMT,EAAa,IAAMA,EAAa,QAASmB,GACpGjB,GAAWW,EAAaiB,OAAO/L,UAAUiM,OAAOvB,EAAO,IAAMT,EAAa,IAAMA,EAAa,QAASqB,KAI1GZ,EADG3N,EAASiP,eACLjP,EAASiP,eAGTE,iBAMHhC,GAASY,EAAaJ,EAAO,IAAMT,EAAa,IAAMA,EAAa,OAAQmB,GAC3EjB,GAAWW,EAAaJ,EAAO,IAAMT,EAAa,IAAMA,EAAa,OAAQqB,KA4F7EhrB,OAGHJ,UAAY,CAOhBisB,KAAO,SAAU9O,GAChB,IAAK,IAAI5U,KAAK4U,EACTA,EAAI7M,eAAe/H,KACtBnI,KAAKmI,GAAK4U,EAAI5U,IAIhB,OAAOnI,MAcR2qB,UAAY,SAAUP,EAAM0B,EAASC,GAGpC,GAFAD,EAAUA,GAAW,OAES,qBAAnBzrB,eAAgC,CAC1C,IAAI2rB,EACAC,EAAM,IAAI5rB,eAyBd,OAxBA4rB,EAAI3rB,KAAK,MAAO8pB,EAAM2B,GAElBA,IACHC,EAAU,IAAIE,SAAQ,SAASC,EAASC,GACvCH,EAAI1rB,OAAS,WACO,MAAf0rB,EAAIxrB,OACP0rB,EAAQF,EAAItrB,cAGZyrB,EAAOH,EAAII,aAIbJ,EAAIK,QAAU,WACbF,EAAOH,EAAII,iBAKVJ,EAAIM,kBACPN,EAAIM,iBAAiB,uBAAyBT,GAE/CG,EAAIjrB,KAAK,MAEF+qB,EAAQC,EAAUC,EAAItrB,aAI7B,IAAI6rB,EAAK,EAAQ,OAEjB,IACC,GAAIA,EAAGC,WAAWrC,GACjB,OAAOoC,EAAGE,aAAatC,EAAM0B,GAG7B9pB,QAAQC,IAAI,QAAUmoB,EAAO,oBAE7B,MAAOtO,GAER,OADA9Z,QAAQC,IAAI6Z,GACL,KAYVmP,UAAY,SAAUhP,GACrB,IAEIpV,EAAe8lB,EAAYC,EAC3BzkB,EAAGqO,EAAG6T,EAAMC,EAHZrH,EAAQ,GAKR4J,EAAQ5Q,EAAKuI,MAAM,SAEvB,IAAKrc,EAAI,EAAGkiB,EAAOwC,EAAMnnB,OAAQyC,EAAIkiB,EAAMliB,IAK1C,GAFAtB,GADAA,EAAO7G,KAAK8sB,qBAAqBD,EAAM1kB,KAC3Bkf,OAEZ,CAIA,IAAI0F,EAAkBlmB,EAAK2d,MAAM,OAE7BwI,EAAWD,EAAgB,GAE/B,GAAgB,OAAZC,GAAiC,OAAZA,EAAmB,CAC3C,IAAIC,EAAWF,EAAgB,GAC3BG,EAAcH,EAAgB,GAG9BI,EAAU,GAEd,IAAK3W,EAAIrO,EAAI,EAAGmiB,EAAQniB,EAAI,GAJ5BwkB,EAAanlB,SAASulB,EAAgB,GAAI,KAIEvW,EAAI8T,EAAO9T,IAAK,CAI3D,IAAI4W,GADJR,EAFUC,EAAMrW,GAEIgO,MAAM,QACS,GAE/B6I,EAAgBT,EAAU,GAAGpI,MAAM,KAEnC8I,EAAkBD,EAAc,GACZ,MAApBC,IAAyBA,EAAkB,IAE/C,IAAIC,EAAsBvtB,KAAKwtB,eAAeH,EAAc,IAExDI,EAAeb,EAAU,GAEzBc,EAAQ,GACZA,EAAMC,IAAML,EAERC,EAAoB7nB,OAAS,IAAGgoB,EAAMH,oBAAsBA,GAE3C,MAAjBE,IAEFC,EAAM1kB,MADU,QAAbgkB,EACW,IAAIzZ,OAAOka,EAAe,KAG1B,IAAIla,OAAO,IAAMka,IAIP,KAAtBL,IAEFM,EAAME,OADU,QAAbZ,EACY,IAAIzZ,OAAO6Z,EAAsB,KAGjCA,GAIjBD,EAAQjhB,KAAKwhB,GAGdzK,EAAMgK,GAAY,CAAE,KAASD,EAAU,YAAgC,KAAfE,EAAqB,QAAYC,GAEzFhlB,GAAKwkB,OAED,GAAiB,iBAAbK,EAA6B,CAGrC,IAAKxW,EAAIrO,EAAI,EAAGmiB,EAAQniB,EAAI,GAF5BwkB,EAAanlB,SAASulB,EAAgB,GAAI,KAEEvW,EAAI8T,EAAO9T,IAGtDoW,GAFA/lB,EAAOgmB,EAAMrW,IAEIgO,MAAM,OACvBxkB,KAAK+pB,cAAc7d,KAAK0gB,EAAU,IAGnCzkB,GAAKwkB,MAEgB,QAAbK,EAGiB,KAFzBJ,EAAY/lB,EAAK2d,MAAM,QAET9e,QACb1F,KAAKiqB,iBAAiB/d,KAAK,CAAE0gB,EAAU,GAAIA,EAAU,KAUtD5sB,KAAKqoB,MAAM2E,GAAYD,EAAgB,GAIzC,OAAO9J,GAUR6J,qBAAuB,SAAUjmB,GAIhC,OAAKA,EAAKmC,MAAO,QAAS,IAClB,GAGDnC,GAWRukB,UAAY,SAAUnP,GAGrB,IAAI4Q,GAFJ5Q,EAAOjc,KAAK6tB,mBAAmB5R,IAEduI,MAAM,SACnBsF,EAAkB,GAEtB,SAASgE,EAAQrsB,EAAMwhB,GAEjB6G,EAAgB5Z,eAAezO,KACnCqoB,EAAgBroB,GAAQ,MAGrBwhB,EAAMvd,OAAS,IACY,OAA1BokB,EAAgBroB,KACnBqoB,EAAgBroB,GAAQ,IAGzBqoB,EAAgBroB,GAAMyK,KAAK+W,IAK7B,IAAK,IAAI9a,EAAI,EAAGkiB,EAAOwC,EAAMnnB,OAAQyC,EAAIkiB,EAAMliB,IAAK,CACnD,IAAItB,EAAOgmB,EAAM1kB,GAEjB,GAAKtB,EAAL,CAKA,IAAIknB,EAAQlnB,EAAK2d,MAAM,IAAK,GAExB/iB,EAAOssB,EAAM,GAGjB,GAAIA,EAAMroB,OAAS,EAAG,CACrB,IAAIsoB,EAAiBhuB,KAAKwtB,eAAeO,EAAM,IAGzC,cAAe/tB,KAAKqoB,QAA2D,GAAjD2F,EAAeluB,QAAQE,KAAKqoB,MAAM4F,YACrEH,EAAQrsB,EAAMusB,GAGf,IAAK,IAAIxX,EAAI,EAAG8T,EAAQ0D,EAAetoB,OAAQ8Q,EAAI8T,EAAO9T,IAAK,CAC9D,IAAI1J,EAAOkhB,EAAexX,GAEtB0U,EAAOlrB,KAAKijB,MAAMnW,GAEtB,GAAIoe,EAGH,IAFA,IAAIgD,EAAWluB,KAAKmuB,WAAW1sB,EAAMypB,GAE5BkD,EAAK,EAAGC,EAASH,EAASxoB,OAAQ0oB,EAAKC,EAAQD,IAAM,CAC7D,IAAIE,EAAUJ,EAASE,GAIvB,GAFAN,EAAQQ,EAAS,IAEbpD,EAAKgC,YACR,IAAK,IAAIlQ,EAAIxG,EAAI,EAAGwG,EAAIsN,EAAOtN,IAAK,CACnC,IAAIuR,EAAcP,EAAehR,GAE7BwR,EAAcxuB,KAAKijB,MAAMsL,GAE7B,GAAIC,GACCA,EAAYtB,aAAgBhC,EAAKrW,MAAQ2Z,EAAY3Z,KAGxD,IAFA,IAAI4Z,EAAgBzuB,KAAKmuB,WAAWG,EAASE,GAEpCE,EAAM,EAAGC,EAAUF,EAAc/oB,OAAQgpB,EAAMC,EAASD,IAAO,CAEvEZ,EADmBW,EAAcC,GACX,MASzB5hB,KAAQ9M,KAAKgqB,mBAChBhqB,KAAKgqB,kBAAkBld,GAAMZ,KAAKzK,SAKpCqsB,EAAQrsB,EAAK4lB,OAAQ,KAIvB,OAAOyC,GAWR+D,mBAAqB,SAAU5R,GAO9B,OAFAA,EAAOA,EAAKxY,QAAQ,WAAY,KAKjC+pB,eAAiB,SAAUoB,GAC1B,GAAKA,EAGA,IAAM,SAAU5uB,KAAKqoB,MAIrB,IAAwB,SAApBroB,KAAKqoB,MAAMwG,KAAiB,CAIpC,IAFA,IAAIxG,EAAQ,GAEHlgB,EAAI,EAAGkiB,EAAOuE,EAAUlpB,OAAQyC,EAAIkiB,EAAMliB,GAAK,EACvDkgB,EAAMnc,KAAK0iB,EAAUE,OAAO3mB,EAAG,IAGhC,OAAOkgB,EAEH,MAAwB,QAApBroB,KAAKqoB,MAAMwG,KAEZD,EAAUpK,MAAM,KAEK,UAApBxkB,KAAKqoB,MAAMwG,KAGZ/M,MAAMtW,KAAKojB,GAKXA,EAAUpK,MAAM,IAxBvB,OAAOoK,EAAUpK,MAAM,IAJvB,MAAO,IAwCT2J,WAAa,SAAU1sB,EAAMypB,GAI5B,IAHA,IAAIiC,EAAUjC,EAAKiC,QACfe,EAAW,GAEN/lB,EAAI,EAAGkiB,EAAO8C,EAAQznB,OAAQyC,EAAIkiB,EAAMliB,IAAK,CACrD,IAAIulB,EAAQP,EAAQhlB,GAEpB,IAAKulB,EAAM1kB,OAASvH,EAAKuH,MAAM0kB,EAAM1kB,OAAQ,CAC5C,IAAIslB,EAAU7sB,EAed,GAbIisB,EAAME,SACTU,EAAUA,EAAQ7qB,QAAQiqB,EAAME,OAAQ,KAGvB,QAAd1C,EAAKrW,KACRyZ,GAAoBZ,EAAMC,IAG1BW,EAAUZ,EAAMC,IAAMW,EAGvBJ,EAAShiB,KAAKoiB,GAEV,wBAAyBZ,EAC5B,IAAK,IAAIlX,EAAI,EAAG8T,EAAQoD,EAAMH,oBAAoB7nB,OAAQ8Q,EAAI8T,EAAO9T,IAAK,CACzE,IAAIuY,EAAmB/uB,KAAKijB,MAAMyK,EAAMH,oBAAoB/W,IAExDuY,IACHb,EAAWA,EAASc,OAAOhvB,KAAKmuB,WAAWG,EAASS,OAczD,OAAOb,GAcRvsB,MAAQ,SAAUstB,GACjB,IAAKjvB,KAAKmqB,OACT,KAAM,yBAIP,IAAI+E,EAAcD,EAAMxrB,QAAQ,SAAU,IAAIA,QAAQ,SAAU,IAEhE,GAAIzD,KAAKmvB,WAAWD,GACnB,OAAO,EAIR,GAAIA,EAAYE,gBAAkBF,EAAa,CAG9C,IAAIG,EAAkBH,EAAY,GAAKA,EAAYla,UAAU,GAAGuB,cAEhE,GAAIvW,KAAKsvB,QAAQD,EAAiB,YAEjC,OAAO,EAGR,GAAIrvB,KAAKmvB,WAAWE,GAEnB,OAAO,EAGR,GAAIrvB,KAAKmvB,WAAWD,EAAY3Y,eAE/B,OAAO,EAIT,IAAIgZ,EAAoBL,EAAY,GAAG3Y,cAAgB2Y,EAAYla,UAAU,GAE7E,GAAIua,IAAsBL,EAAa,CACtC,GAAIlvB,KAAKsvB,QAAQC,EAAmB,YAEnC,OAAO,EAIR,GAAIvvB,KAAKmvB,WAAWI,GAEnB,OAAO,EAIT,OAAO,GAURJ,WAAa,SAAU1tB,GACtB,IAAKzB,KAAKmqB,OACT,KAAM,yBAGP,IAEIhiB,EAAGkiB,EAFHmF,EAAYxvB,KAAK8pB,gBAAgBroB,GAIrC,GAAyB,qBAAd+tB,GAEV,GAAI,gBAAiBxvB,KAAKqoB,OAAS5mB,EAAKiE,QAAU1F,KAAKqoB,MAAMoH,YAC5D,IAAKtnB,EAAI,EAAGkiB,EAAOrqB,KAAK+pB,cAAcrkB,OAAQyC,EAAIkiB,EAAMliB,IACvD,GAAI1G,EAAKuH,MAAMhJ,KAAK+pB,cAAc5hB,IACjC,OAAO,MAKN,IAAkB,OAAdqnB,EAGR,OAAO,EAEH,GAAyB,kBAAdA,EACf,IAAKrnB,EAAI,EAAGkiB,EAAOmF,EAAU9pB,OAAQyC,EAAIkiB,EAAMliB,IAC9C,IAAKnI,KAAKsvB,QAAQ7tB,EAAM,iBAAkB+tB,EAAUrnB,IACnD,OAAO,EAKV,OAAO,GAWRmnB,QAAU,SAAU7tB,EAAMiuB,EAAMC,GAC/B,IAAK3vB,KAAKmqB,OACT,KAAM,yBAGP,UAAIuF,KAAQ1vB,KAAKqoB,SACS,qBAAdsH,IACVA,EAAY7N,MAAMliB,UAAUovB,OAAOjvB,MAAM,GAAIC,KAAK8pB,gBAAgBroB,MAG/DkuB,IAAsD,IAAzCA,EAAU7vB,QAAQE,KAAKqoB,MAAMqH,OAmBhDE,SAAW,GAEXC,QAAU,SAAUpuB,EAAMquB,GACzB,IAAK9vB,KAAKmqB,OACT,KAAM,yBAKP,GAFA2F,EAAQA,GAAS,EAEb9vB,KAAKkqB,SAASha,eAAezO,GAAO,CACvC,IAAIsuB,EAAgB/vB,KAAKkqB,SAASzoB,GAAa,MAI/C,GAAIquB,GAASC,GAAiB/vB,KAAKkqB,SAASzoB,GAAmB,YAAEiE,OAASqqB,EACzE,OAAO/vB,KAAKkqB,SAASzoB,GAAmB,YAAEyH,MAAM,EAAG4mB,GAIrD,GAAI9vB,KAAK2B,MAAMF,GAAO,MAAO,GAG7B,IAAK,IAAI0G,EAAI,EAAGkiB,EAAOrqB,KAAKiqB,iBAAiBvkB,OAAQyC,EAAIkiB,EAAMliB,IAAK,CACnE,IAAI6nB,EAAmBhwB,KAAKiqB,iBAAiB9hB,GAE7C,IAA2C,IAAvC1G,EAAK3B,QAAQkwB,EAAiB,IAAY,CAC7C,IAAIC,EAAgBxuB,EAAKgC,QAAQusB,EAAiB,GAAIA,EAAiB,IAEvE,GAAIhwB,KAAK2B,MAAMsuB,GACd,MAAO,CAAEA,IAKZ,IAAI1F,EAAOvqB,KA+BX,SAASkwB,EAAOC,EAAOC,GACtB,IAEIjoB,EAAGqO,EAAW6T,EAAagG,EAF3BC,EAAK,GAILC,EAAiBhG,EAAKqF,SAASlqB,OAEnC,GAAoB,iBAATyqB,EAAmB,CAC7B,IAAI1uB,EAAO0uB,GACXA,EAAQ,IACF1uB,IAAQ,EAGf,IAAK,IAAIA,KAAQ0uB,EAChB,IAAKhoB,EAAI,EAAGkiB,EAAO5oB,EAAKiE,OAAS,EAAGyC,EAAIkiB,EAAMliB,IAAK,CAClD,IAAI+E,EAAI,CAAEzL,EAAKuT,UAAU,EAAG7M,GAAI1G,EAAKuT,UAAU7M,IA+B/C,GA5BI+E,EAAE,KACLmjB,EAAQnjB,EAAE,GAAKA,EAAE,GAAG8H,UAAU,GAEzBob,IAAc7F,EAAK5oB,MAAM0uB,KACvBA,KAASC,EAIdA,EAAGD,IAAU,EAHbC,EAAGD,GAAS,IAUXnjB,EAAE,GAAGxH,OAAS,GAAKwH,EAAE,GAAG,KAAOA,EAAE,GAAG,KACvCmjB,EAAQnjB,EAAE,GAAKA,EAAE,GAAG,GAAKA,EAAE,GAAG,GAAKA,EAAE,GAAG8H,UAAU,GAE7Cob,IAAc7F,EAAK5oB,MAAM0uB,KACvBA,KAASC,EAIdA,EAAGD,IAAU,EAHbC,EAAGD,GAAS,IAQXnjB,EAAE,GAAI,CAGT,IAAIsjB,EAActjB,EAAE,GAAG8H,UAAU,EAAE,GAAGoa,gBAAkBliB,EAAE,GAAG8H,UAAU,EAAE,GAAM,YAAc,YAE7F,IAAKwB,EAAI,EAAGA,EAAI+Z,EAAgB/Z,IAAK,CACpC,IAAIia,EAAoBlG,EAAKqF,SAASpZ,GAGjC,cAAgBga,IACpBC,EAAoBA,EAAkBrB,eAInCqB,GAAqBvjB,EAAE,GAAG8H,UAAU,EAAE,KACzCqb,EAAQnjB,EAAE,GAAKujB,EAAoBvjB,EAAE,GAAG8H,UAAU,GAE7Cob,IAAc7F,EAAK5oB,MAAM0uB,KACvBA,KAASC,EAIdA,EAAGD,IAAU,EAHbC,EAAGD,GAAS,KAUjB,GAAInjB,EAAE,GAEL,IAAKsJ,EAAI,EAAGA,EAAI+Z,EAAgB/Z,IAAK,CAEhCga,EAActjB,EAAE,GAAG8H,WAAW,GAAGoa,gBAAkBliB,EAAE,GAAG8H,WAAW,IAAM9H,EAAE,GAAG8H,UAAU,EAAE,GAAGoa,gBAAkBliB,EAAE,GAAG8H,UAAU,EAAE,GAAM,YAAc,YAEpJyb,EAAoBlG,EAAKqF,SAASpZ,GAEjC,cAAgBga,IACpBC,EAAoBA,EAAkBrB,eAGvCiB,EAAQnjB,EAAE,GAAKujB,EAAoBvjB,EAAE,GAEhCkjB,IAAc7F,EAAK5oB,MAAM0uB,KACvBA,KAASC,EAIdA,EAAGD,IAAU,EAHbC,EAAGD,GAAS,IAWlB,OAAOC,EAsFR,OA1NA/F,EAAKqF,SAAW,6BAqNhB5vB,KAAKkqB,SAASzoB,GAAQ,CACrB,YA/ED,SAAiBA,GAEhB,IAmBI0G,EAnBAuoB,EAAMR,EAAOzuB,GAIbkvB,EAHMT,EAAOQ,GAAK,GAKtB,IAAK,IAAIE,KAAWF,EACdnG,EAAK5oB,MAAMivB,KAIZA,KAAWD,EACdA,EAAqBC,IAAYF,EAAIE,GAGrCD,EAAqBC,GAAWF,EAAIE,IAMtC,IAAIC,EAAqB,GAEzB,IAAK1oB,KAAKwoB,EACLA,EAAqBzgB,eAAe/H,IACvC0oB,EAAmB3kB,KAAK,CAAE/D,EAAGwoB,EAAqBxoB,KAgBpD0oB,EAAmBC,MAZnB,SAAgBC,EAAG9M,GAClB,IAAI+M,EAAQD,EAAE,GACVE,EAAQhN,EAAE,GACd,OAAI+M,EAAQC,GACH,EACED,EAAQC,EACX,EAGDhN,EAAE,GAAGiN,cAAcH,EAAE,OAGGjW,UAEhC,IAAIwV,EAAK,GAELa,EAAwB,YAExB1vB,EAAK2tB,gBAAkB3tB,EAC1B0vB,EAAwB,YAEhB1vB,EAAKqtB,OAAO,EAAG,GAAGM,cAAgB3tB,EAAKqtB,OAAO,GAAGvY,gBAAkB9U,IAC3E0vB,EAAwB,eAGzB,IAAIC,EAAgBtB,EAEpB,IAAK3nB,EAAI,EAAGA,EAAIgC,KAAKC,IAAIgnB,EAAeP,EAAmBnrB,QAASyC,IAC/D,cAAgBgpB,EACnBN,EAAmB1oB,GAAG,GAAK0oB,EAAmB1oB,GAAG,GAAGinB,cAE5C,gBAAkB+B,IAC1BN,EAAmB1oB,GAAG,GAAK0oB,EAAmB1oB,GAAG,GAAG2mB,OAAO,EAAG,GAAGM,cAAgByB,EAAmB1oB,GAAG,GAAG2mB,OAAO,IAG7GvE,EAAK+E,QAAQuB,EAAmB1oB,GAAG,GAAI,eAAyD,GAAzCmoB,EAAGxwB,QAAQ+wB,EAAmB1oB,GAAG,IAK5FipB,IAJAd,EAAGpkB,KAAK2kB,EAAmB1oB,GAAG,IAQhC,OAAOmoB,EAIQe,CAAQ5vB,GACvB,MAASquB,GAGH9vB,KAAKkqB,SAASzoB,GAAmB,cAh+B1C,GAu+BCS,EAAOC,QAAU7C","sources":["webpack://app/./node_modules/codemirror-spell-checker/src/js/spell-checker.js","webpack://app/./node_modules/codemirror/addon/display/fullscreen.js","webpack://app/./node_modules/codemirror/addon/display/placeholder.js","webpack://app/./node_modules/codemirror/addon/edit/continuelist.js","webpack://app/./node_modules/codemirror/addon/mode/overlay.js","webpack://app/./node_modules/codemirror/addon/selection/mark-selection.js","webpack://app/./node_modules/codemirror/mode/gfm/gfm.js","webpack://app/./node_modules/codemirror/mode/markdown/markdown.js","webpack://app/./node_modules/codemirror/mode/meta.js","webpack://app/./node_modules/codemirror/mode/xml/xml.js","webpack://app/./node_modules/inline-attachment/src/codemirror-4.inline-attachment.js","webpack://app/./node_modules/inline-attachment/src/inline-attachment.js","webpack://app/./node_modules/inline-attachment/src/jquery.inline-attachment.js","webpack://app/./node_modules/inscrybmde/src/js/codemirror/tablist.js","webpack://app/./node_modules/marked/lib/marked.js","webpack://app/./node_modules/typo-js/typo.js"],"sourcesContent":["// Use strict mode (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode)\n\"use strict\";\n\n\n// Requires\nvar Typo = require(\"typo-js\");\n\n\n// Create function\nfunction CodeMirrorSpellChecker(options) {\n\t// Initialize\n\toptions = options || {};\n\n\n\t// Verify\n\tif(typeof options.codeMirrorInstance !== \"function\" || typeof options.codeMirrorInstance.defineMode !== \"function\") {\n\t\tconsole.log(\"CodeMirror Spell Checker: You must provide an instance of CodeMirror via the option `codeMirrorInstance`\");\n\t\treturn;\n\t}\n\n\n\t// Because some browsers don't support this functionality yet\n\tif(!String.prototype.includes) {\n\t\tString.prototype.includes = function() {\n\t\t\t\"use strict\";\n\t\t\treturn String.prototype.indexOf.apply(this, arguments) !== -1;\n\t\t};\n\t}\n\n\n\t// Define the new mode\n\toptions.codeMirrorInstance.defineMode(\"spell-checker\", function(config) {\n\t\t// Load AFF/DIC data\n\t\tif(!CodeMirrorSpellChecker.aff_loading) {\n\t\t\tCodeMirrorSpellChecker.aff_loading = true;\n\t\t\tvar xhr_aff = new XMLHttpRequest();\n\t\t\txhr_aff.open(\"GET\", \"https://cdn.jsdelivr.net/codemirror.spell-checker/latest/en_US.aff\", true);\n\t\t\txhr_aff.onload = function() {\n\t\t\t\tif(xhr_aff.readyState === 4 && xhr_aff.status === 200) {\n\t\t\t\t\tCodeMirrorSpellChecker.aff_data = xhr_aff.responseText;\n\t\t\t\t\tCodeMirrorSpellChecker.num_loaded++;\n\n\t\t\t\t\tif(CodeMirrorSpellChecker.num_loaded == 2) {\n\t\t\t\t\t\tCodeMirrorSpellChecker.typo = new Typo(\"en_US\", CodeMirrorSpellChecker.aff_data, CodeMirrorSpellChecker.dic_data, {\n\t\t\t\t\t\t\tplatform: \"any\"\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\txhr_aff.send(null);\n\t\t}\n\n\t\tif(!CodeMirrorSpellChecker.dic_loading) {\n\t\t\tCodeMirrorSpellChecker.dic_loading = true;\n\t\t\tvar xhr_dic = new XMLHttpRequest();\n\t\t\txhr_dic.open(\"GET\", \"https://cdn.jsdelivr.net/codemirror.spell-checker/latest/en_US.dic\", true);\n\t\t\txhr_dic.onload = function() {\n\t\t\t\tif(xhr_dic.readyState === 4 && xhr_dic.status === 200) {\n\t\t\t\t\tCodeMirrorSpellChecker.dic_data = xhr_dic.responseText;\n\t\t\t\t\tCodeMirrorSpellChecker.num_loaded++;\n\n\t\t\t\t\tif(CodeMirrorSpellChecker.num_loaded == 2) {\n\t\t\t\t\t\tCodeMirrorSpellChecker.typo = new Typo(\"en_US\", CodeMirrorSpellChecker.aff_data, CodeMirrorSpellChecker.dic_data, {\n\t\t\t\t\t\t\tplatform: \"any\"\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\txhr_dic.send(null);\n\t\t}\n\n\n\t\t// Define what separates a word\n\t\tvar rx_word = \"!\\\"#$%&()*+,-./:;<=>?@[\\\\]^_`{|}~ \";\n\n\n\t\t// Create the overlay and such\n\t\tvar overlay = {\n\t\t\ttoken: function(stream) {\n\t\t\t\tvar ch = stream.peek();\n\t\t\t\tvar word = \"\";\n\n\t\t\t\tif(rx_word.includes(ch)) {\n\t\t\t\t\tstream.next();\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\twhile((ch = stream.peek()) != null && !rx_word.includes(ch)) {\n\t\t\t\t\tword += ch;\n\t\t\t\t\tstream.next();\n\t\t\t\t}\n\n\t\t\t\tif(CodeMirrorSpellChecker.typo && !CodeMirrorSpellChecker.typo.check(word))\n\t\t\t\t\treturn \"spell-error\"; // CSS class: cm-spell-error\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t};\n\n\t\tvar mode = options.codeMirrorInstance.getMode(\n\t\t\tconfig, config.backdrop || \"text/plain\"\n\t\t);\n\n\t\treturn options.codeMirrorInstance.overlayMode(mode, overlay, true);\n\t});\n}\n\n\n// Initialize data globally to reduce memory consumption\nCodeMirrorSpellChecker.num_loaded = 0;\nCodeMirrorSpellChecker.aff_loading = false;\nCodeMirrorSpellChecker.dic_loading = false;\nCodeMirrorSpellChecker.aff_data = \"\";\nCodeMirrorSpellChecker.dic_data = \"\";\nCodeMirrorSpellChecker.typo;\n\n\n// Export\nmodule.exports = CodeMirrorSpellChecker;","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\n CodeMirror.defineOption(\"fullScreen\", false, function(cm, val, old) {\n if (old == CodeMirror.Init) old = false;\n if (!old == !val) return;\n if (val) setFullscreen(cm);\n else setNormal(cm);\n });\n\n function setFullscreen(cm) {\n var wrap = cm.getWrapperElement();\n cm.state.fullScreenRestore = {scrollTop: window.pageYOffset, scrollLeft: window.pageXOffset,\n width: wrap.style.width, height: wrap.style.height};\n wrap.style.width = \"\";\n wrap.style.height = \"auto\";\n wrap.className += \" CodeMirror-fullscreen\";\n document.documentElement.style.overflow = \"hidden\";\n cm.refresh();\n }\n\n function setNormal(cm) {\n var wrap = cm.getWrapperElement();\n wrap.className = wrap.className.replace(/\\s*CodeMirror-fullscreen\\b/, \"\");\n document.documentElement.style.overflow = \"\";\n var info = cm.state.fullScreenRestore;\n wrap.style.width = info.width; wrap.style.height = info.height;\n window.scrollTo(info.scrollLeft, info.scrollTop);\n cm.refresh();\n }\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n CodeMirror.defineOption(\"placeholder\", \"\", function(cm, val, old) {\n var prev = old && old != CodeMirror.Init;\n if (val && !prev) {\n cm.on(\"blur\", onBlur);\n cm.on(\"change\", onChange);\n cm.on(\"swapDoc\", onChange);\n CodeMirror.on(cm.getInputField(), \"compositionupdate\", cm.state.placeholderCompose = function() { onComposition(cm) })\n onChange(cm);\n } else if (!val && prev) {\n cm.off(\"blur\", onBlur);\n cm.off(\"change\", onChange);\n cm.off(\"swapDoc\", onChange);\n CodeMirror.off(cm.getInputField(), \"compositionupdate\", cm.state.placeholderCompose)\n clearPlaceholder(cm);\n var wrapper = cm.getWrapperElement();\n wrapper.className = wrapper.className.replace(\" CodeMirror-empty\", \"\");\n }\n\n if (val && !cm.hasFocus()) onBlur(cm);\n });\n\n function clearPlaceholder(cm) {\n if (cm.state.placeholder) {\n cm.state.placeholder.parentNode.removeChild(cm.state.placeholder);\n cm.state.placeholder = null;\n }\n }\n function setPlaceholder(cm) {\n clearPlaceholder(cm);\n var elt = cm.state.placeholder = document.createElement(\"pre\");\n elt.style.cssText = \"height: 0; overflow: visible\";\n elt.style.direction = cm.getOption(\"direction\");\n elt.className = \"CodeMirror-placeholder CodeMirror-line-like\";\n var placeHolder = cm.getOption(\"placeholder\")\n if (typeof placeHolder == \"string\") placeHolder = document.createTextNode(placeHolder)\n elt.appendChild(placeHolder)\n cm.display.lineSpace.insertBefore(elt, cm.display.lineSpace.firstChild);\n }\n\n function onComposition(cm) {\n setTimeout(function() {\n var empty = false\n if (cm.lineCount() == 1) {\n var input = cm.getInputField()\n empty = input.nodeName == \"TEXTAREA\" ? !cm.getLine(0).length\n : !/[^\\u200b]/.test(input.querySelector(\".CodeMirror-line\").textContent)\n }\n if (empty) setPlaceholder(cm)\n else clearPlaceholder(cm)\n }, 20)\n }\n\n function onBlur(cm) {\n if (isEmpty(cm)) setPlaceholder(cm);\n }\n function onChange(cm) {\n var wrapper = cm.getWrapperElement(), empty = isEmpty(cm);\n wrapper.className = wrapper.className.replace(\" CodeMirror-empty\", \"\") + (empty ? \" CodeMirror-empty\" : \"\");\n\n if (empty) setPlaceholder(cm);\n else clearPlaceholder(cm);\n }\n\n function isEmpty(cm) {\n return (cm.lineCount() === 1) && (cm.getLine(0) === \"\");\n }\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\n var listRE = /^(\\s*)(>[> ]*|[*+-] \\[[x ]\\]\\s|[*+-]\\s|(\\d+)([.)]))(\\s*)/,\n emptyListRE = /^(\\s*)(>[> ]*|[*+-] \\[[x ]\\]|[*+-]|(\\d+)[.)])(\\s*)$/,\n unorderedListRE = /[*+-]\\s/;\n\n CodeMirror.commands.newlineAndIndentContinueMarkdownList = function(cm) {\n if (cm.getOption(\"disableInput\")) return CodeMirror.Pass;\n var ranges = cm.listSelections(), replacements = [];\n for (var i = 0; i < ranges.length; i++) {\n var pos = ranges[i].head;\n\n // If we're not in Markdown mode, fall back to normal newlineAndIndent\n var eolState = cm.getStateAfter(pos.line);\n var inner = CodeMirror.innerMode(cm.getMode(), eolState);\n if (inner.mode.name !== \"markdown\" && inner.mode.helperType !== \"markdown\") {\n cm.execCommand(\"newlineAndIndent\");\n return;\n } else {\n eolState = inner.state;\n }\n\n var inList = eolState.list !== false;\n var inQuote = eolState.quote !== 0;\n\n var line = cm.getLine(pos.line), match = listRE.exec(line);\n var cursorBeforeBullet = /^\\s*$/.test(line.slice(0, pos.ch));\n if (!ranges[i].empty() || (!inList && !inQuote) || !match || cursorBeforeBullet) {\n cm.execCommand(\"newlineAndIndent\");\n return;\n }\n if (emptyListRE.test(line)) {\n var endOfQuote = inQuote && />\\s*$/.test(line)\n var endOfList = !/>\\s*$/.test(line)\n if (endOfQuote || endOfList) cm.replaceRange(\"\", {\n line: pos.line, ch: 0\n }, {\n line: pos.line, ch: pos.ch + 1\n });\n replacements[i] = \"\\n\";\n } else {\n var indent = match[1], after = match[5];\n var numbered = !(unorderedListRE.test(match[2]) || match[2].indexOf(\">\") >= 0);\n var bullet = numbered ? (parseInt(match[3], 10) + 1) + match[4] : match[2].replace(\"x\", \" \");\n replacements[i] = \"\\n\" + indent + bullet + after;\n\n if (numbered) incrementRemainingMarkdownListNumbers(cm, pos);\n }\n }\n\n cm.replaceSelections(replacements);\n };\n\n // Auto-updating Markdown list numbers when a new item is added to the\n // middle of a list\n function incrementRemainingMarkdownListNumbers(cm, pos) {\n var startLine = pos.line, lookAhead = 0, skipCount = 0;\n var startItem = listRE.exec(cm.getLine(startLine)), startIndent = startItem[1];\n\n do {\n lookAhead += 1;\n var nextLineNumber = startLine + lookAhead;\n var nextLine = cm.getLine(nextLineNumber), nextItem = listRE.exec(nextLine);\n\n if (nextItem) {\n var nextIndent = nextItem[1];\n var newNumber = (parseInt(startItem[3], 10) + lookAhead - skipCount);\n var nextNumber = (parseInt(nextItem[3], 10)), itemNumber = nextNumber;\n\n if (startIndent === nextIndent && !isNaN(nextNumber)) {\n if (newNumber === nextNumber) itemNumber = nextNumber + 1;\n if (newNumber > nextNumber) itemNumber = newNumber + 1;\n cm.replaceRange(\n nextLine.replace(listRE, nextIndent + itemNumber + nextItem[4] + nextItem[5]),\n {\n line: nextLineNumber, ch: 0\n }, {\n line: nextLineNumber, ch: nextLine.length\n });\n } else {\n if (startIndent.length > nextIndent.length) return;\n // This doesn't run if the next line immediately indents, as it is\n // not clear of the users intention (new indented item or same level)\n if ((startIndent.length < nextIndent.length) && (lookAhead === 1)) return;\n skipCount += 1;\n }\n }\n } while (nextItem);\n }\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n// Utility function that allows modes to be combined. The mode given\n// as the base argument takes care of most of the normal mode\n// functionality, but a second (typically simple) mode is used, which\n// can override the style of text. Both modes get to parse all of the\n// text, but when both assign a non-null style to a piece of code, the\n// overlay wins, unless the combine argument was true and not overridden,\n// or state.overlay.combineTokens was true, in which case the styles are\n// combined.\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.overlayMode = function(base, overlay, combine) {\n return {\n startState: function() {\n return {\n base: CodeMirror.startState(base),\n overlay: CodeMirror.startState(overlay),\n basePos: 0, baseCur: null,\n overlayPos: 0, overlayCur: null,\n streamSeen: null\n };\n },\n copyState: function(state) {\n return {\n base: CodeMirror.copyState(base, state.base),\n overlay: CodeMirror.copyState(overlay, state.overlay),\n basePos: state.basePos, baseCur: null,\n overlayPos: state.overlayPos, overlayCur: null\n };\n },\n\n token: function(stream, state) {\n if (stream != state.streamSeen ||\n Math.min(state.basePos, state.overlayPos) < stream.start) {\n state.streamSeen = stream;\n state.basePos = state.overlayPos = stream.start;\n }\n\n if (stream.start == state.basePos) {\n state.baseCur = base.token(stream, state.base);\n state.basePos = stream.pos;\n }\n if (stream.start == state.overlayPos) {\n stream.pos = stream.start;\n state.overlayCur = overlay.token(stream, state.overlay);\n state.overlayPos = stream.pos;\n }\n stream.pos = Math.min(state.basePos, state.overlayPos);\n\n // state.overlay.combineTokens always takes precedence over combine,\n // unless set to null\n if (state.overlayCur == null) return state.baseCur;\n else if (state.baseCur != null &&\n state.overlay.combineTokens ||\n combine && state.overlay.combineTokens == null)\n return state.baseCur + \" \" + state.overlayCur;\n else return state.overlayCur;\n },\n\n indent: base.indent && function(state, textAfter, line) {\n return base.indent(state.base, textAfter, line);\n },\n electricChars: base.electricChars,\n\n innerMode: function(state) { return {state: state.base, mode: base}; },\n\n blankLine: function(state) {\n var baseToken, overlayToken;\n if (base.blankLine) baseToken = base.blankLine(state.base);\n if (overlay.blankLine) overlayToken = overlay.blankLine(state.overlay);\n\n return overlayToken == null ?\n baseToken :\n (combine && baseToken != null ? baseToken + \" \" + overlayToken : overlayToken);\n }\n };\n};\n\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n// Because sometimes you need to mark the selected *text*.\n//\n// Adds an option 'styleSelectedText' which, when enabled, gives\n// selected text the CSS class given as option value, or\n// \"CodeMirror-selectedtext\" when the value is not a string.\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\n CodeMirror.defineOption(\"styleSelectedText\", false, function(cm, val, old) {\n var prev = old && old != CodeMirror.Init;\n if (val && !prev) {\n cm.state.markedSelection = [];\n cm.state.markedSelectionStyle = typeof val == \"string\" ? val : \"CodeMirror-selectedtext\";\n reset(cm);\n cm.on(\"cursorActivity\", onCursorActivity);\n cm.on(\"change\", onChange);\n } else if (!val && prev) {\n cm.off(\"cursorActivity\", onCursorActivity);\n cm.off(\"change\", onChange);\n clear(cm);\n cm.state.markedSelection = cm.state.markedSelectionStyle = null;\n }\n });\n\n function onCursorActivity(cm) {\n if (cm.state.markedSelection)\n cm.operation(function() { update(cm); });\n }\n\n function onChange(cm) {\n if (cm.state.markedSelection && cm.state.markedSelection.length)\n cm.operation(function() { clear(cm); });\n }\n\n var CHUNK_SIZE = 8;\n var Pos = CodeMirror.Pos;\n var cmp = CodeMirror.cmpPos;\n\n function coverRange(cm, from, to, addAt) {\n if (cmp(from, to) == 0) return;\n var array = cm.state.markedSelection;\n var cls = cm.state.markedSelectionStyle;\n for (var line = from.line;;) {\n var start = line == from.line ? from : Pos(line, 0);\n var endLine = line + CHUNK_SIZE, atEnd = endLine >= to.line;\n var end = atEnd ? to : Pos(endLine, 0);\n var mark = cm.markText(start, end, {className: cls});\n if (addAt == null) array.push(mark);\n else array.splice(addAt++, 0, mark);\n if (atEnd) break;\n line = endLine;\n }\n }\n\n function clear(cm) {\n var array = cm.state.markedSelection;\n for (var i = 0; i < array.length; ++i) array[i].clear();\n array.length = 0;\n }\n\n function reset(cm) {\n clear(cm);\n var ranges = cm.listSelections();\n for (var i = 0; i < ranges.length; i++)\n coverRange(cm, ranges[i].from(), ranges[i].to());\n }\n\n function update(cm) {\n if (!cm.somethingSelected()) return clear(cm);\n if (cm.listSelections().length > 1) return reset(cm);\n\n var from = cm.getCursor(\"start\"), to = cm.getCursor(\"end\");\n\n var array = cm.state.markedSelection;\n if (!array.length) return coverRange(cm, from, to);\n\n var coverStart = array[0].find(), coverEnd = array[array.length - 1].find();\n if (!coverStart || !coverEnd || to.line - from.line <= CHUNK_SIZE ||\n cmp(from, coverEnd.to) >= 0 || cmp(to, coverStart.from) <= 0)\n return reset(cm);\n\n while (cmp(from, coverStart.from) > 0) {\n array.shift().clear();\n coverStart = array[0].find();\n }\n if (cmp(from, coverStart.from) < 0) {\n if (coverStart.to.line - from.line < CHUNK_SIZE) {\n array.shift().clear();\n coverRange(cm, from, coverStart.to, 0);\n } else {\n coverRange(cm, from, coverStart.from, 0);\n }\n }\n\n while (cmp(to, coverEnd.to) < 0) {\n array.pop().clear();\n coverEnd = array[array.length - 1].find();\n }\n if (cmp(to, coverEnd.to) > 0) {\n if (to.line - coverEnd.from.line < CHUNK_SIZE) {\n array.pop().clear();\n coverRange(cm, coverEnd.from, to);\n } else {\n coverRange(cm, coverEnd.to, to);\n }\n }\n }\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"), require(\"../markdown/markdown\"), require(\"../../addon/mode/overlay\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\", \"../markdown/markdown\", \"../../addon/mode/overlay\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nvar urlRE = /^((?:(?:aaas?|about|acap|adiumxtra|af[ps]|aim|apt|attachment|aw|beshare|bitcoin|bolo|callto|cap|chrome(?:-extension)?|cid|coap|com-eventbrite-attendee|content|crid|cvs|data|dav|dict|dlna-(?:playcontainer|playsingle)|dns|doi|dtn|dvb|ed2k|facetime|feed|file|finger|fish|ftp|geo|gg|git|gizmoproject|go|gopher|gtalk|h323|hcp|https?|iax|icap|icon|im|imap|info|ipn|ipp|irc[6s]?|iris(?:\\.beep|\\.lwz|\\.xpc|\\.xpcs)?|itms|jar|javascript|jms|keyparc|lastfm|ldaps?|magnet|mailto|maps|market|message|mid|mms|ms-help|msnim|msrps?|mtqp|mumble|mupdate|mvn|news|nfs|nih?|nntp|notes|oid|opaquelocktoken|palm|paparazzi|platform|pop|pres|proxy|psyc|query|res(?:ource)?|rmi|rsync|rtmp|rtsp|secondlife|service|session|sftp|sgn|shttp|sieve|sips?|skype|sm[bs]|snmp|soap\\.beeps?|soldat|spotify|ssh|steam|svn|tag|teamspeak|tel(?:net)?|tftp|things|thismessage|tip|tn3270|tv|udp|unreal|urn|ut2004|vemmi|ventrilo|view-source|webcal|wss?|wtai|wyciwyg|xcon(?:-userid)?|xfire|xmlrpc\\.beeps?|xmpp|xri|ymsgr|z39\\.50[rs]?):(?:\\/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}\\/)(?:[^\\s()<>]|\\([^\\s()<>]*\\))+(?:\\([^\\s()<>]*\\)|[^\\s`*!()\\[\\]{};:'\".,<>?«»“”‘’]))/i\n\nCodeMirror.defineMode(\"gfm\", function(config, modeConfig) {\n var codeDepth = 0;\n function blankLine(state) {\n state.code = false;\n return null;\n }\n var gfmOverlay = {\n startState: function() {\n return {\n code: false,\n codeBlock: false,\n ateSpace: false\n };\n },\n copyState: function(s) {\n return {\n code: s.code,\n codeBlock: s.codeBlock,\n ateSpace: s.ateSpace\n };\n },\n token: function(stream, state) {\n state.combineTokens = null;\n\n // Hack to prevent formatting override inside code blocks (block and inline)\n if (state.codeBlock) {\n if (stream.match(/^```+/)) {\n state.codeBlock = false;\n return null;\n }\n stream.skipToEnd();\n return null;\n }\n if (stream.sol()) {\n state.code = false;\n }\n if (stream.sol() && stream.match(/^```+/)) {\n stream.skipToEnd();\n state.codeBlock = true;\n return null;\n }\n // If this block is changed, it may need to be updated in Markdown mode\n if (stream.peek() === '`') {\n stream.next();\n var before = stream.pos;\n stream.eatWhile('`');\n var difference = 1 + stream.pos - before;\n if (!state.code) {\n codeDepth = difference;\n state.code = true;\n } else {\n if (difference === codeDepth) { // Must be exact\n state.code = false;\n }\n }\n return null;\n } else if (state.code) {\n stream.next();\n return null;\n }\n // Check if space. If so, links can be formatted later on\n if (stream.eatSpace()) {\n state.ateSpace = true;\n return null;\n }\n if (stream.sol() || state.ateSpace) {\n state.ateSpace = false;\n if (modeConfig.gitHubSpice !== false) {\n if(stream.match(/^(?:[a-zA-Z0-9\\-_]+\\/)?(?:[a-zA-Z0-9\\-_]+@)?(?=.{0,6}\\d)(?:[a-f0-9]{7,40}\\b)/)) {\n // User/Project@SHA\n // User@SHA\n // SHA\n state.combineTokens = true;\n return \"link\";\n } else if (stream.match(/^(?:[a-zA-Z0-9\\-_]+\\/)?(?:[a-zA-Z0-9\\-_]+)?#[0-9]+\\b/)) {\n // User/Project#Num\n // User#Num\n // #Num\n state.combineTokens = true;\n return \"link\";\n }\n }\n }\n if (stream.match(urlRE) &&\n stream.string.slice(stream.start - 2, stream.start) != \"](\" &&\n (stream.start == 0 || /\\W/.test(stream.string.charAt(stream.start - 1)))) {\n // URLs\n // Taken from http://daringfireball.net/2010/07/improved_regex_for_matching_urls\n // And then (issue #1160) simplified to make it not crash the Chrome Regexp engine\n // And then limited url schemes to the CommonMark list, so foo:bar isn't matched as a URL\n state.combineTokens = true;\n return \"link\";\n }\n stream.next();\n return null;\n },\n blankLine: blankLine\n };\n\n var markdownConfig = {\n taskLists: true,\n strikethrough: true,\n emoji: true\n };\n for (var attr in modeConfig) {\n markdownConfig[attr] = modeConfig[attr];\n }\n markdownConfig.name = \"markdown\";\n return CodeMirror.overlayMode(CodeMirror.getMode(config, markdownConfig), gfmOverlay);\n\n}, \"markdown\");\n\n CodeMirror.defineMIME(\"text/x-gfm\", \"gfm\");\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"), require(\"../xml/xml\"), require(\"../meta\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\", \"../xml/xml\", \"../meta\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"markdown\", function(cmCfg, modeCfg) {\n\n var htmlMode = CodeMirror.getMode(cmCfg, \"text/html\");\n var htmlModeMissing = htmlMode.name == \"null\"\n\n function getMode(name) {\n if (CodeMirror.findModeByName) {\n var found = CodeMirror.findModeByName(name);\n if (found) name = found.mime || found.mimes[0];\n }\n var mode = CodeMirror.getMode(cmCfg, name);\n return mode.name == \"null\" ? null : mode;\n }\n\n // Should characters that affect highlighting be highlighted separate?\n // Does not include characters that will be output (such as `1.` and `-` for lists)\n if (modeCfg.highlightFormatting === undefined)\n modeCfg.highlightFormatting = false;\n\n // Maximum number of nested blockquotes. Set to 0 for infinite nesting.\n // Excess `>` will emit `error` token.\n if (modeCfg.maxBlockquoteDepth === undefined)\n modeCfg.maxBlockquoteDepth = 0;\n\n // Turn on task lists? (\"- [ ] \" and \"- [x] \")\n if (modeCfg.taskLists === undefined) modeCfg.taskLists = false;\n\n // Turn on strikethrough syntax\n if (modeCfg.strikethrough === undefined)\n modeCfg.strikethrough = false;\n\n if (modeCfg.emoji === undefined)\n modeCfg.emoji = false;\n\n if (modeCfg.fencedCodeBlockHighlighting === undefined)\n modeCfg.fencedCodeBlockHighlighting = true;\n\n if (modeCfg.fencedCodeBlockDefaultMode === undefined)\n modeCfg.fencedCodeBlockDefaultMode = 'text/plain';\n\n if (modeCfg.xml === undefined)\n modeCfg.xml = true;\n\n // Allow token types to be overridden by user-provided token types.\n if (modeCfg.tokenTypeOverrides === undefined)\n modeCfg.tokenTypeOverrides = {};\n\n var tokenTypes = {\n header: \"header\",\n code: \"comment\",\n quote: \"quote\",\n list1: \"variable-2\",\n list2: \"variable-3\",\n list3: \"keyword\",\n hr: \"hr\",\n image: \"image\",\n imageAltText: \"image-alt-text\",\n imageMarker: \"image-marker\",\n formatting: \"formatting\",\n linkInline: \"link\",\n linkEmail: \"link\",\n linkText: \"link\",\n linkHref: \"string\",\n em: \"em\",\n strong: \"strong\",\n strikethrough: \"strikethrough\",\n emoji: \"builtin\"\n };\n\n for (var tokenType in tokenTypes) {\n if (tokenTypes.hasOwnProperty(tokenType) && modeCfg.tokenTypeOverrides[tokenType]) {\n tokenTypes[tokenType] = modeCfg.tokenTypeOverrides[tokenType];\n }\n }\n\n var hrRE = /^([*\\-_])(?:\\s*\\1){2,}\\s*$/\n , listRE = /^(?:[*\\-+]|^[0-9]+([.)]))\\s+/\n , taskListRE = /^\\[(x| )\\](?=\\s)/i // Must follow listRE\n , atxHeaderRE = modeCfg.allowAtxHeaderWithoutSpace ? /^(#+)/ : /^(#+)(?: |$)/\n , setextHeaderRE = /^ {0,3}(?:\\={1,}|-{2,})\\s*$/\n , textRE = /^[^#!\\[\\]*_\\\\<>` \"'(~:]+/\n , fencedCodeRE = /^(~~~+|```+)[ \\t]*([\\w\\/+#-]*)[^\\n`]*$/\n , linkDefRE = /^\\s*\\[[^\\]]+?\\]:.*$/ // naive link-definition\n , punctuation = /[!\"#$%&'()*+,\\-.\\/:;<=>?@\\[\\\\\\]^_`{|}~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E42\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]/\n , expandedTab = \" \" // CommonMark specifies tab as 4 spaces\n\n function switchInline(stream, state, f) {\n state.f = state.inline = f;\n return f(stream, state);\n }\n\n function switchBlock(stream, state, f) {\n state.f = state.block = f;\n return f(stream, state);\n }\n\n function lineIsEmpty(line) {\n return !line || !/\\S/.test(line.string)\n }\n\n // Blocks\n\n function blankLine(state) {\n // Reset linkTitle state\n state.linkTitle = false;\n state.linkHref = false;\n state.linkText = false;\n // Reset EM state\n state.em = false;\n // Reset STRONG state\n state.strong = false;\n // Reset strikethrough state\n state.strikethrough = false;\n // Reset state.quote\n state.quote = 0;\n // Reset state.indentedCode\n state.indentedCode = false;\n if (state.f == htmlBlock) {\n var exit = htmlModeMissing\n if (!exit) {\n var inner = CodeMirror.innerMode(htmlMode, state.htmlState)\n exit = inner.mode.name == \"xml\" && inner.state.tagStart === null &&\n (!inner.state.context && inner.state.tokenize.isInText)\n }\n if (exit) {\n state.f = inlineNormal;\n state.block = blockNormal;\n state.htmlState = null;\n }\n }\n // Reset state.trailingSpace\n state.trailingSpace = 0;\n state.trailingSpaceNewLine = false;\n // Mark this line as blank\n state.prevLine = state.thisLine\n state.thisLine = {stream: null}\n return null;\n }\n\n function blockNormal(stream, state) {\n var firstTokenOnLine = stream.column() === state.indentation;\n var prevLineLineIsEmpty = lineIsEmpty(state.prevLine.stream);\n var prevLineIsIndentedCode = state.indentedCode;\n var prevLineIsHr = state.prevLine.hr;\n var prevLineIsList = state.list !== false;\n var maxNonCodeIndentation = (state.listStack[state.listStack.length - 1] || 0) + 3;\n\n state.indentedCode = false;\n\n var lineIndentation = state.indentation;\n // compute once per line (on first token)\n if (state.indentationDiff === null) {\n state.indentationDiff = state.indentation;\n if (prevLineIsList) {\n state.list = null;\n // While this list item's marker's indentation is less than the deepest\n // list item's content's indentation,pop the deepest list item\n // indentation off the stack, and update block indentation state\n while (lineIndentation < state.listStack[state.listStack.length - 1]) {\n state.listStack.pop();\n if (state.listStack.length) {\n state.indentation = state.listStack[state.listStack.length - 1];\n // less than the first list's indent -> the line is no longer a list\n } else {\n state.list = false;\n }\n }\n if (state.list !== false) {\n state.indentationDiff = lineIndentation - state.listStack[state.listStack.length - 1]\n }\n }\n }\n\n // not comprehensive (currently only for setext detection purposes)\n var allowsInlineContinuation = (\n !prevLineLineIsEmpty && !prevLineIsHr && !state.prevLine.header &&\n (!prevLineIsList || !prevLineIsIndentedCode) &&\n !state.prevLine.fencedCodeEnd\n );\n\n var isHr = (state.list === false || prevLineIsHr || prevLineLineIsEmpty) &&\n state.indentation <= maxNonCodeIndentation && stream.match(hrRE);\n\n var match = null;\n if (state.indentationDiff >= 4 && (prevLineIsIndentedCode || state.prevLine.fencedCodeEnd ||\n state.prevLine.header || prevLineLineIsEmpty)) {\n stream.skipToEnd();\n state.indentedCode = true;\n return tokenTypes.code;\n } else if (stream.eatSpace()) {\n return null;\n } else if (firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(atxHeaderRE)) && match[1].length <= 6) {\n state.quote = 0;\n state.header = match[1].length;\n state.thisLine.header = true;\n if (modeCfg.highlightFormatting) state.formatting = \"header\";\n state.f = state.inline;\n return getType(state);\n } else if (state.indentation <= maxNonCodeIndentation && stream.eat('>')) {\n state.quote = firstTokenOnLine ? 1 : state.quote + 1;\n if (modeCfg.highlightFormatting) state.formatting = \"quote\";\n stream.eatSpace();\n return getType(state);\n } else if (!isHr && !state.setext && firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(listRE))) {\n var listType = match[1] ? \"ol\" : \"ul\";\n\n state.indentation = lineIndentation + stream.current().length;\n state.list = true;\n state.quote = 0;\n\n // Add this list item's content's indentation to the stack\n state.listStack.push(state.indentation);\n // Reset inline styles which shouldn't propagate across list items\n state.em = false;\n state.strong = false;\n state.code = false;\n state.strikethrough = false;\n\n if (modeCfg.taskLists && stream.match(taskListRE, false)) {\n state.taskList = true;\n }\n state.f = state.inline;\n if (modeCfg.highlightFormatting) state.formatting = [\"list\", \"list-\" + listType];\n return getType(state);\n } else if (firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(fencedCodeRE, true))) {\n state.quote = 0;\n state.fencedEndRE = new RegExp(match[1] + \"+ *$\");\n // try switching mode\n state.localMode = modeCfg.fencedCodeBlockHighlighting && getMode(match[2] || modeCfg.fencedCodeBlockDefaultMode );\n if (state.localMode) state.localState = CodeMirror.startState(state.localMode);\n state.f = state.block = local;\n if (modeCfg.highlightFormatting) state.formatting = \"code-block\";\n state.code = -1\n return getType(state);\n // SETEXT has lowest block-scope precedence after HR, so check it after\n // the others (code, blockquote, list...)\n } else if (\n // if setext set, indicates line after ---/===\n state.setext || (\n // line before ---/===\n (!allowsInlineContinuation || !prevLineIsList) && !state.quote && state.list === false &&\n !state.code && !isHr && !linkDefRE.test(stream.string) &&\n (match = stream.lookAhead(1)) && (match = match.match(setextHeaderRE))\n )\n ) {\n if ( !state.setext ) {\n state.header = match[0].charAt(0) == '=' ? 1 : 2;\n state.setext = state.header;\n } else {\n state.header = state.setext;\n // has no effect on type so we can reset it now\n state.setext = 0;\n stream.skipToEnd();\n if (modeCfg.highlightFormatting) state.formatting = \"header\";\n }\n state.thisLine.header = true;\n state.f = state.inline;\n return getType(state);\n } else if (isHr) {\n stream.skipToEnd();\n state.hr = true;\n state.thisLine.hr = true;\n return tokenTypes.hr;\n } else if (stream.peek() === '[') {\n return switchInline(stream, state, footnoteLink);\n }\n\n return switchInline(stream, state, state.inline);\n }\n\n function htmlBlock(stream, state) {\n var style = htmlMode.token(stream, state.htmlState);\n if (!htmlModeMissing) {\n var inner = CodeMirror.innerMode(htmlMode, state.htmlState)\n if ((inner.mode.name == \"xml\" && inner.state.tagStart === null &&\n (!inner.state.context && inner.state.tokenize.isInText)) ||\n (state.md_inside && stream.current().indexOf(\">\") > -1)) {\n state.f = inlineNormal;\n state.block = blockNormal;\n state.htmlState = null;\n }\n }\n return style;\n }\n\n function local(stream, state) {\n var currListInd = state.listStack[state.listStack.length - 1] || 0;\n var hasExitedList = state.indentation < currListInd;\n var maxFencedEndInd = currListInd + 3;\n if (state.fencedEndRE && state.indentation <= maxFencedEndInd && (hasExitedList || stream.match(state.fencedEndRE))) {\n if (modeCfg.highlightFormatting) state.formatting = \"code-block\";\n var returnType;\n if (!hasExitedList) returnType = getType(state)\n state.localMode = state.localState = null;\n state.block = blockNormal;\n state.f = inlineNormal;\n state.fencedEndRE = null;\n state.code = 0\n state.thisLine.fencedCodeEnd = true;\n if (hasExitedList) return switchBlock(stream, state, state.block);\n return returnType;\n } else if (state.localMode) {\n return state.localMode.token(stream, state.localState);\n } else {\n stream.skipToEnd();\n return tokenTypes.code;\n }\n }\n\n // Inline\n function getType(state) {\n var styles = [];\n\n if (state.formatting) {\n styles.push(tokenTypes.formatting);\n\n if (typeof state.formatting === \"string\") state.formatting = [state.formatting];\n\n for (var i = 0; i < state.formatting.length; i++) {\n styles.push(tokenTypes.formatting + \"-\" + state.formatting[i]);\n\n if (state.formatting[i] === \"header\") {\n styles.push(tokenTypes.formatting + \"-\" + state.formatting[i] + \"-\" + state.header);\n }\n\n // Add `formatting-quote` and `formatting-quote-#` for blockquotes\n // Add `error` instead if the maximum blockquote nesting depth is passed\n if (state.formatting[i] === \"quote\") {\n if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) {\n styles.push(tokenTypes.formatting + \"-\" + state.formatting[i] + \"-\" + state.quote);\n } else {\n styles.push(\"error\");\n }\n }\n }\n }\n\n if (state.taskOpen) {\n styles.push(\"meta\");\n return styles.length ? styles.join(' ') : null;\n }\n if (state.taskClosed) {\n styles.push(\"property\");\n return styles.length ? styles.join(' ') : null;\n }\n\n if (state.linkHref) {\n styles.push(tokenTypes.linkHref, \"url\");\n } else { // Only apply inline styles to non-url text\n if (state.strong) { styles.push(tokenTypes.strong); }\n if (state.em) { styles.push(tokenTypes.em); }\n if (state.strikethrough) { styles.push(tokenTypes.strikethrough); }\n if (state.emoji) { styles.push(tokenTypes.emoji); }\n if (state.linkText) { styles.push(tokenTypes.linkText); }\n if (state.code) { styles.push(tokenTypes.code); }\n if (state.image) { styles.push(tokenTypes.image); }\n if (state.imageAltText) { styles.push(tokenTypes.imageAltText, \"link\"); }\n if (state.imageMarker) { styles.push(tokenTypes.imageMarker); }\n }\n\n if (state.header) { styles.push(tokenTypes.header, tokenTypes.header + \"-\" + state.header); }\n\n if (state.quote) {\n styles.push(tokenTypes.quote);\n\n // Add `quote-#` where the maximum for `#` is modeCfg.maxBlockquoteDepth\n if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) {\n styles.push(tokenTypes.quote + \"-\" + state.quote);\n } else {\n styles.push(tokenTypes.quote + \"-\" + modeCfg.maxBlockquoteDepth);\n }\n }\n\n if (state.list !== false) {\n var listMod = (state.listStack.length - 1) % 3;\n if (!listMod) {\n styles.push(tokenTypes.list1);\n } else if (listMod === 1) {\n styles.push(tokenTypes.list2);\n } else {\n styles.push(tokenTypes.list3);\n }\n }\n\n if (state.trailingSpaceNewLine) {\n styles.push(\"trailing-space-new-line\");\n } else if (state.trailingSpace) {\n styles.push(\"trailing-space-\" + (state.trailingSpace % 2 ? \"a\" : \"b\"));\n }\n\n return styles.length ? styles.join(' ') : null;\n }\n\n function handleText(stream, state) {\n if (stream.match(textRE, true)) {\n return getType(state);\n }\n return undefined;\n }\n\n function inlineNormal(stream, state) {\n var style = state.text(stream, state);\n if (typeof style !== 'undefined')\n return style;\n\n if (state.list) { // List marker (*, +, -, 1., etc)\n state.list = null;\n return getType(state);\n }\n\n if (state.taskList) {\n var taskOpen = stream.match(taskListRE, true)[1] === \" \";\n if (taskOpen) state.taskOpen = true;\n else state.taskClosed = true;\n if (modeCfg.highlightFormatting) state.formatting = \"task\";\n state.taskList = false;\n return getType(state);\n }\n\n state.taskOpen = false;\n state.taskClosed = false;\n\n if (state.header && stream.match(/^#+$/, true)) {\n if (modeCfg.highlightFormatting) state.formatting = \"header\";\n return getType(state);\n }\n\n var ch = stream.next();\n\n // Matches link titles present on next line\n if (state.linkTitle) {\n state.linkTitle = false;\n var matchCh = ch;\n if (ch === '(') {\n matchCh = ')';\n }\n matchCh = (matchCh+'').replace(/([.?*+^\\[\\]\\\\(){}|-])/g, \"\\\\$1\");\n var regex = '^\\\\s*(?:[^' + matchCh + '\\\\\\\\]+|\\\\\\\\\\\\\\\\|\\\\\\\\.)' + matchCh;\n if (stream.match(new RegExp(regex), true)) {\n return tokenTypes.linkHref;\n }\n }\n\n // If this block is changed, it may need to be updated in GFM mode\n if (ch === '`') {\n var previousFormatting = state.formatting;\n if (modeCfg.highlightFormatting) state.formatting = \"code\";\n stream.eatWhile('`');\n var count = stream.current().length\n if (state.code == 0 && (!state.quote || count == 1)) {\n state.code = count\n return getType(state)\n } else if (count == state.code) { // Must be exact\n var t = getType(state)\n state.code = 0\n return t\n } else {\n state.formatting = previousFormatting\n return getType(state)\n }\n } else if (state.code) {\n return getType(state);\n }\n\n if (ch === '\\\\') {\n stream.next();\n if (modeCfg.highlightFormatting) {\n var type = getType(state);\n var formattingEscape = tokenTypes.formatting + \"-escape\";\n return type ? type + \" \" + formattingEscape : formattingEscape;\n }\n }\n\n if (ch === '!' && stream.match(/\\[[^\\]]*\\] ?(?:\\(|\\[)/, false)) {\n state.imageMarker = true;\n state.image = true;\n if (modeCfg.highlightFormatting) state.formatting = \"image\";\n return getType(state);\n }\n\n if (ch === '[' && state.imageMarker && stream.match(/[^\\]]*\\](\\(.*?\\)| ?\\[.*?\\])/, false)) {\n state.imageMarker = false;\n state.imageAltText = true\n if (modeCfg.highlightFormatting) state.formatting = \"image\";\n return getType(state);\n }\n\n if (ch === ']' && state.imageAltText) {\n if (modeCfg.highlightFormatting) state.formatting = \"image\";\n var type = getType(state);\n state.imageAltText = false;\n state.image = false;\n state.inline = state.f = linkHref;\n return type;\n }\n\n if (ch === '[' && !state.image) {\n if (state.linkText && stream.match(/^.*?\\]/)) return getType(state)\n state.linkText = true;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n return getType(state);\n }\n\n if (ch === ']' && state.linkText) {\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var type = getType(state);\n state.linkText = false;\n state.inline = state.f = stream.match(/\\(.*?\\)| ?\\[.*?\\]/, false) ? linkHref : inlineNormal\n return type;\n }\n\n if (ch === '<' && stream.match(/^(https?|ftps?):\\/\\/(?:[^\\\\>]|\\\\.)+>/, false)) {\n state.f = state.inline = linkInline;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var type = getType(state);\n if (type){\n type += \" \";\n } else {\n type = \"\";\n }\n return type + tokenTypes.linkInline;\n }\n\n if (ch === '<' && stream.match(/^[^> \\\\]+@(?:[^\\\\>]|\\\\.)+>/, false)) {\n state.f = state.inline = linkInline;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var type = getType(state);\n if (type){\n type += \" \";\n } else {\n type = \"\";\n }\n return type + tokenTypes.linkEmail;\n }\n\n if (modeCfg.xml && ch === '<' && stream.match(/^(!--|\\?|!\\[CDATA\\[|[a-z][a-z0-9-]*(?:\\s+[a-z_:.\\-]+(?:\\s*=\\s*[^>]+)?)*\\s*(?:>|$))/i, false)) {\n var end = stream.string.indexOf(\">\", stream.pos);\n if (end != -1) {\n var atts = stream.string.substring(stream.start, end);\n if (/markdown\\s*=\\s*('|\"){0,1}1('|\"){0,1}/.test(atts)) state.md_inside = true;\n }\n stream.backUp(1);\n state.htmlState = CodeMirror.startState(htmlMode);\n return switchBlock(stream, state, htmlBlock);\n }\n\n if (modeCfg.xml && ch === '<' && stream.match(/^\\/\\w*?>/)) {\n state.md_inside = false;\n return \"tag\";\n } else if (ch === \"*\" || ch === \"_\") {\n var len = 1, before = stream.pos == 1 ? \" \" : stream.string.charAt(stream.pos - 2)\n while (len < 3 && stream.eat(ch)) len++\n var after = stream.peek() || \" \"\n // See http://spec.commonmark.org/0.27/#emphasis-and-strong-emphasis\n var leftFlanking = !/\\s/.test(after) && (!punctuation.test(after) || /\\s/.test(before) || punctuation.test(before))\n var rightFlanking = !/\\s/.test(before) && (!punctuation.test(before) || /\\s/.test(after) || punctuation.test(after))\n var setEm = null, setStrong = null\n if (len % 2) { // Em\n if (!state.em && leftFlanking && (ch === \"*\" || !rightFlanking || punctuation.test(before)))\n setEm = true\n else if (state.em == ch && rightFlanking && (ch === \"*\" || !leftFlanking || punctuation.test(after)))\n setEm = false\n }\n if (len > 1) { // Strong\n if (!state.strong && leftFlanking && (ch === \"*\" || !rightFlanking || punctuation.test(before)))\n setStrong = true\n else if (state.strong == ch && rightFlanking && (ch === \"*\" || !leftFlanking || punctuation.test(after)))\n setStrong = false\n }\n if (setStrong != null || setEm != null) {\n if (modeCfg.highlightFormatting) state.formatting = setEm == null ? \"strong\" : setStrong == null ? \"em\" : \"strong em\"\n if (setEm === true) state.em = ch\n if (setStrong === true) state.strong = ch\n var t = getType(state)\n if (setEm === false) state.em = false\n if (setStrong === false) state.strong = false\n return t\n }\n } else if (ch === ' ') {\n if (stream.eat('*') || stream.eat('_')) { // Probably surrounded by spaces\n if (stream.peek() === ' ') { // Surrounded by spaces, ignore\n return getType(state);\n } else { // Not surrounded by spaces, back up pointer\n stream.backUp(1);\n }\n }\n }\n\n if (modeCfg.strikethrough) {\n if (ch === '~' && stream.eatWhile(ch)) {\n if (state.strikethrough) {// Remove strikethrough\n if (modeCfg.highlightFormatting) state.formatting = \"strikethrough\";\n var t = getType(state);\n state.strikethrough = false;\n return t;\n } else if (stream.match(/^[^\\s]/, false)) {// Add strikethrough\n state.strikethrough = true;\n if (modeCfg.highlightFormatting) state.formatting = \"strikethrough\";\n return getType(state);\n }\n } else if (ch === ' ') {\n if (stream.match('~~', true)) { // Probably surrounded by space\n if (stream.peek() === ' ') { // Surrounded by spaces, ignore\n return getType(state);\n } else { // Not surrounded by spaces, back up pointer\n stream.backUp(2);\n }\n }\n }\n }\n\n if (modeCfg.emoji && ch === \":\" && stream.match(/^(?:[a-z_\\d+][a-z_\\d+-]*|\\-[a-z_\\d+][a-z_\\d+-]*):/)) {\n state.emoji = true;\n if (modeCfg.highlightFormatting) state.formatting = \"emoji\";\n var retType = getType(state);\n state.emoji = false;\n return retType;\n }\n\n if (ch === ' ') {\n if (stream.match(/^ +$/, false)) {\n state.trailingSpace++;\n } else if (state.trailingSpace) {\n state.trailingSpaceNewLine = true;\n }\n }\n\n return getType(state);\n }\n\n function linkInline(stream, state) {\n var ch = stream.next();\n\n if (ch === \">\") {\n state.f = state.inline = inlineNormal;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var type = getType(state);\n if (type){\n type += \" \";\n } else {\n type = \"\";\n }\n return type + tokenTypes.linkInline;\n }\n\n stream.match(/^[^>]+/, true);\n\n return tokenTypes.linkInline;\n }\n\n function linkHref(stream, state) {\n // Check if space, and return NULL if so (to avoid marking the space)\n if(stream.eatSpace()){\n return null;\n }\n var ch = stream.next();\n if (ch === '(' || ch === '[') {\n state.f = state.inline = getLinkHrefInside(ch === \"(\" ? \")\" : \"]\");\n if (modeCfg.highlightFormatting) state.formatting = \"link-string\";\n state.linkHref = true;\n return getType(state);\n }\n return 'error';\n }\n\n var linkRE = {\n \")\": /^(?:[^\\\\\\(\\)]|\\\\.|\\((?:[^\\\\\\(\\)]|\\\\.)*\\))*?(?=\\))/,\n \"]\": /^(?:[^\\\\\\[\\]]|\\\\.|\\[(?:[^\\\\\\[\\]]|\\\\.)*\\])*?(?=\\])/\n }\n\n function getLinkHrefInside(endChar) {\n return function(stream, state) {\n var ch = stream.next();\n\n if (ch === endChar) {\n state.f = state.inline = inlineNormal;\n if (modeCfg.highlightFormatting) state.formatting = \"link-string\";\n var returnState = getType(state);\n state.linkHref = false;\n return returnState;\n }\n\n stream.match(linkRE[endChar])\n state.linkHref = true;\n return getType(state);\n };\n }\n\n function footnoteLink(stream, state) {\n if (stream.match(/^([^\\]\\\\]|\\\\.)*\\]:/, false)) {\n state.f = footnoteLinkInside;\n stream.next(); // Consume [\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n state.linkText = true;\n return getType(state);\n }\n return switchInline(stream, state, inlineNormal);\n }\n\n function footnoteLinkInside(stream, state) {\n if (stream.match(']:', true)) {\n state.f = state.inline = footnoteUrl;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var returnType = getType(state);\n state.linkText = false;\n return returnType;\n }\n\n stream.match(/^([^\\]\\\\]|\\\\.)+/, true);\n\n return tokenTypes.linkText;\n }\n\n function footnoteUrl(stream, state) {\n // Check if space, and return NULL if so (to avoid marking the space)\n if(stream.eatSpace()){\n return null;\n }\n // Match URL\n stream.match(/^[^\\s]+/, true);\n // Check for link title\n if (stream.peek() === undefined) { // End of line, set flag to check next line\n state.linkTitle = true;\n } else { // More content on line, check if link title\n stream.match(/^(?:\\s+(?:\"(?:[^\"\\\\]|\\\\.)+\"|'(?:[^'\\\\]|\\\\.)+'|\\((?:[^)\\\\]|\\\\.)+\\)))?/, true);\n }\n state.f = state.inline = inlineNormal;\n return tokenTypes.linkHref + \" url\";\n }\n\n var mode = {\n startState: function() {\n return {\n f: blockNormal,\n\n prevLine: {stream: null},\n thisLine: {stream: null},\n\n block: blockNormal,\n htmlState: null,\n indentation: 0,\n\n inline: inlineNormal,\n text: handleText,\n\n formatting: false,\n linkText: false,\n linkHref: false,\n linkTitle: false,\n code: 0,\n em: false,\n strong: false,\n header: 0,\n setext: 0,\n hr: false,\n taskList: false,\n list: false,\n listStack: [],\n quote: 0,\n trailingSpace: 0,\n trailingSpaceNewLine: false,\n strikethrough: false,\n emoji: false,\n fencedEndRE: null\n };\n },\n\n copyState: function(s) {\n return {\n f: s.f,\n\n prevLine: s.prevLine,\n thisLine: s.thisLine,\n\n block: s.block,\n htmlState: s.htmlState && CodeMirror.copyState(htmlMode, s.htmlState),\n indentation: s.indentation,\n\n localMode: s.localMode,\n localState: s.localMode ? CodeMirror.copyState(s.localMode, s.localState) : null,\n\n inline: s.inline,\n text: s.text,\n formatting: false,\n linkText: s.linkText,\n linkTitle: s.linkTitle,\n linkHref: s.linkHref,\n code: s.code,\n em: s.em,\n strong: s.strong,\n strikethrough: s.strikethrough,\n emoji: s.emoji,\n header: s.header,\n setext: s.setext,\n hr: s.hr,\n taskList: s.taskList,\n list: s.list,\n listStack: s.listStack.slice(0),\n quote: s.quote,\n indentedCode: s.indentedCode,\n trailingSpace: s.trailingSpace,\n trailingSpaceNewLine: s.trailingSpaceNewLine,\n md_inside: s.md_inside,\n fencedEndRE: s.fencedEndRE\n };\n },\n\n token: function(stream, state) {\n\n // Reset state.formatting\n state.formatting = false;\n\n if (stream != state.thisLine.stream) {\n state.header = 0;\n state.hr = false;\n\n if (stream.match(/^\\s*$/, true)) {\n blankLine(state);\n return null;\n }\n\n state.prevLine = state.thisLine\n state.thisLine = {stream: stream}\n\n // Reset state.taskList\n state.taskList = false;\n\n // Reset state.trailingSpace\n state.trailingSpace = 0;\n state.trailingSpaceNewLine = false;\n\n if (!state.localState) {\n state.f = state.block;\n if (state.f != htmlBlock) {\n var indentation = stream.match(/^\\s*/, true)[0].replace(/\\t/g, expandedTab).length;\n state.indentation = indentation;\n state.indentationDiff = null;\n if (indentation > 0) return null;\n }\n }\n }\n return state.f(stream, state);\n },\n\n innerMode: function(state) {\n if (state.block == htmlBlock) return {state: state.htmlState, mode: htmlMode};\n if (state.localState) return {state: state.localState, mode: state.localMode};\n return {state: state, mode: mode};\n },\n\n indent: function(state, textAfter, line) {\n if (state.block == htmlBlock && htmlMode.indent) return htmlMode.indent(state.htmlState, textAfter, line)\n if (state.localState && state.localMode.indent) return state.localMode.indent(state.localState, textAfter, line)\n return CodeMirror.Pass\n },\n\n blankLine: blankLine,\n\n getType: getType,\n\n blockCommentStart: \"\",\n closeBrackets: \"()[]{}''\\\"\\\"``\",\n fold: \"markdown\"\n };\n return mode;\n}, \"xml\");\n\nCodeMirror.defineMIME(\"text/markdown\", \"markdown\");\n\nCodeMirror.defineMIME(\"text/x-markdown\", \"markdown\");\n\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\n CodeMirror.modeInfo = [\n {name: \"APL\", mime: \"text/apl\", mode: \"apl\", ext: [\"dyalog\", \"apl\"]},\n {name: \"PGP\", mimes: [\"application/pgp\", \"application/pgp-encrypted\", \"application/pgp-keys\", \"application/pgp-signature\"], mode: \"asciiarmor\", ext: [\"asc\", \"pgp\", \"sig\"]},\n {name: \"ASN.1\", mime: \"text/x-ttcn-asn\", mode: \"asn.1\", ext: [\"asn\", \"asn1\"]},\n {name: \"Asterisk\", mime: \"text/x-asterisk\", mode: \"asterisk\", file: /^extensions\\.conf$/i},\n {name: \"Brainfuck\", mime: \"text/x-brainfuck\", mode: \"brainfuck\", ext: [\"b\", \"bf\"]},\n {name: \"C\", mime: \"text/x-csrc\", mode: \"clike\", ext: [\"c\", \"h\", \"ino\"]},\n {name: \"C++\", mime: \"text/x-c++src\", mode: \"clike\", ext: [\"cpp\", \"c++\", \"cc\", \"cxx\", \"hpp\", \"h++\", \"hh\", \"hxx\"], alias: [\"cpp\"]},\n {name: \"Cobol\", mime: \"text/x-cobol\", mode: \"cobol\", ext: [\"cob\", \"cpy\", \"cbl\"]},\n {name: \"C#\", mime: \"text/x-csharp\", mode: \"clike\", ext: [\"cs\"], alias: [\"csharp\", \"cs\"]},\n {name: \"Clojure\", mime: \"text/x-clojure\", mode: \"clojure\", ext: [\"clj\", \"cljc\", \"cljx\"]},\n {name: \"ClojureScript\", mime: \"text/x-clojurescript\", mode: \"clojure\", ext: [\"cljs\"]},\n {name: \"Closure Stylesheets (GSS)\", mime: \"text/x-gss\", mode: \"css\", ext: [\"gss\"]},\n {name: \"CMake\", mime: \"text/x-cmake\", mode: \"cmake\", ext: [\"cmake\", \"cmake.in\"], file: /^CMakeLists\\.txt$/},\n {name: \"CoffeeScript\", mimes: [\"application/vnd.coffeescript\", \"text/coffeescript\", \"text/x-coffeescript\"], mode: \"coffeescript\", ext: [\"coffee\"], alias: [\"coffee\", \"coffee-script\"]},\n {name: \"Common Lisp\", mime: \"text/x-common-lisp\", mode: \"commonlisp\", ext: [\"cl\", \"lisp\", \"el\"], alias: [\"lisp\"]},\n {name: \"Cypher\", mime: \"application/x-cypher-query\", mode: \"cypher\", ext: [\"cyp\", \"cypher\"]},\n {name: \"Cython\", mime: \"text/x-cython\", mode: \"python\", ext: [\"pyx\", \"pxd\", \"pxi\"]},\n {name: \"Crystal\", mime: \"text/x-crystal\", mode: \"crystal\", ext: [\"cr\"]},\n {name: \"CSS\", mime: \"text/css\", mode: \"css\", ext: [\"css\"]},\n {name: \"CQL\", mime: \"text/x-cassandra\", mode: \"sql\", ext: [\"cql\"]},\n {name: \"D\", mime: \"text/x-d\", mode: \"d\", ext: [\"d\"]},\n {name: \"Dart\", mimes: [\"application/dart\", \"text/x-dart\"], mode: \"dart\", ext: [\"dart\"]},\n {name: \"diff\", mime: \"text/x-diff\", mode: \"diff\", ext: [\"diff\", \"patch\"]},\n {name: \"Django\", mime: \"text/x-django\", mode: \"django\"},\n {name: \"Dockerfile\", mime: \"text/x-dockerfile\", mode: \"dockerfile\", file: /^Dockerfile$/},\n {name: \"DTD\", mime: \"application/xml-dtd\", mode: \"dtd\", ext: [\"dtd\"]},\n {name: \"Dylan\", mime: \"text/x-dylan\", mode: \"dylan\", ext: [\"dylan\", \"dyl\", \"intr\"]},\n {name: \"EBNF\", mime: \"text/x-ebnf\", mode: \"ebnf\"},\n {name: \"ECL\", mime: \"text/x-ecl\", mode: \"ecl\", ext: [\"ecl\"]},\n {name: \"edn\", mime: \"application/edn\", mode: \"clojure\", ext: [\"edn\"]},\n {name: \"Eiffel\", mime: \"text/x-eiffel\", mode: \"eiffel\", ext: [\"e\"]},\n {name: \"Elm\", mime: \"text/x-elm\", mode: \"elm\", ext: [\"elm\"]},\n {name: \"Embedded JavaScript\", mime: \"application/x-ejs\", mode: \"htmlembedded\", ext: [\"ejs\"]},\n {name: \"Embedded Ruby\", mime: \"application/x-erb\", mode: \"htmlembedded\", ext: [\"erb\"]},\n {name: \"Erlang\", mime: \"text/x-erlang\", mode: \"erlang\", ext: [\"erl\"]},\n {name: \"Esper\", mime: \"text/x-esper\", mode: \"sql\"},\n {name: \"Factor\", mime: \"text/x-factor\", mode: \"factor\", ext: [\"factor\"]},\n {name: \"FCL\", mime: \"text/x-fcl\", mode: \"fcl\"},\n {name: \"Forth\", mime: \"text/x-forth\", mode: \"forth\", ext: [\"forth\", \"fth\", \"4th\"]},\n {name: \"Fortran\", mime: \"text/x-fortran\", mode: \"fortran\", ext: [\"f\", \"for\", \"f77\", \"f90\", \"f95\"]},\n {name: \"F#\", mime: \"text/x-fsharp\", mode: \"mllike\", ext: [\"fs\"], alias: [\"fsharp\"]},\n {name: \"Gas\", mime: \"text/x-gas\", mode: \"gas\", ext: [\"s\"]},\n {name: \"Gherkin\", mime: \"text/x-feature\", mode: \"gherkin\", ext: [\"feature\"]},\n {name: \"GitHub Flavored Markdown\", mime: \"text/x-gfm\", mode: \"gfm\", file: /^(readme|contributing|history)\\.md$/i},\n {name: \"Go\", mime: \"text/x-go\", mode: \"go\", ext: [\"go\"]},\n {name: \"Groovy\", mime: \"text/x-groovy\", mode: \"groovy\", ext: [\"groovy\", \"gradle\"], file: /^Jenkinsfile$/},\n {name: \"HAML\", mime: \"text/x-haml\", mode: \"haml\", ext: [\"haml\"]},\n {name: \"Haskell\", mime: \"text/x-haskell\", mode: \"haskell\", ext: [\"hs\"]},\n {name: \"Haskell (Literate)\", mime: \"text/x-literate-haskell\", mode: \"haskell-literate\", ext: [\"lhs\"]},\n {name: \"Haxe\", mime: \"text/x-haxe\", mode: \"haxe\", ext: [\"hx\"]},\n {name: \"HXML\", mime: \"text/x-hxml\", mode: \"haxe\", ext: [\"hxml\"]},\n {name: \"ASP.NET\", mime: \"application/x-aspx\", mode: \"htmlembedded\", ext: [\"aspx\"], alias: [\"asp\", \"aspx\"]},\n {name: \"HTML\", mime: \"text/html\", mode: \"htmlmixed\", ext: [\"html\", \"htm\", \"handlebars\", \"hbs\"], alias: [\"xhtml\"]},\n {name: \"HTTP\", mime: \"message/http\", mode: \"http\"},\n {name: \"IDL\", mime: \"text/x-idl\", mode: \"idl\", ext: [\"pro\"]},\n {name: \"Pug\", mime: \"text/x-pug\", mode: \"pug\", ext: [\"jade\", \"pug\"], alias: [\"jade\"]},\n {name: \"Java\", mime: \"text/x-java\", mode: \"clike\", ext: [\"java\"]},\n {name: \"Java Server Pages\", mime: \"application/x-jsp\", mode: \"htmlembedded\", ext: [\"jsp\"], alias: [\"jsp\"]},\n {name: \"JavaScript\", mimes: [\"text/javascript\", \"text/ecmascript\", \"application/javascript\", \"application/x-javascript\", \"application/ecmascript\"],\n mode: \"javascript\", ext: [\"js\"], alias: [\"ecmascript\", \"js\", \"node\"]},\n {name: \"JSON\", mimes: [\"application/json\", \"application/x-json\"], mode: \"javascript\", ext: [\"json\", \"map\"], alias: [\"json5\"]},\n {name: \"JSON-LD\", mime: \"application/ld+json\", mode: \"javascript\", ext: [\"jsonld\"], alias: [\"jsonld\"]},\n {name: \"JSX\", mime: \"text/jsx\", mode: \"jsx\", ext: [\"jsx\"]},\n {name: \"Jinja2\", mime: \"text/jinja2\", mode: \"jinja2\", ext: [\"j2\", \"jinja\", \"jinja2\"]},\n {name: \"Julia\", mime: \"text/x-julia\", mode: \"julia\", ext: [\"jl\"], alias: [\"jl\"]},\n {name: \"Kotlin\", mime: \"text/x-kotlin\", mode: \"clike\", ext: [\"kt\"]},\n {name: \"LESS\", mime: \"text/x-less\", mode: \"css\", ext: [\"less\"]},\n {name: \"LiveScript\", mime: \"text/x-livescript\", mode: \"livescript\", ext: [\"ls\"], alias: [\"ls\"]},\n {name: \"Lua\", mime: \"text/x-lua\", mode: \"lua\", ext: [\"lua\"]},\n {name: \"Markdown\", mime: \"text/x-markdown\", mode: \"markdown\", ext: [\"markdown\", \"md\", \"mkd\"]},\n {name: \"mIRC\", mime: \"text/mirc\", mode: \"mirc\"},\n {name: \"MariaDB SQL\", mime: \"text/x-mariadb\", mode: \"sql\"},\n {name: \"Mathematica\", mime: \"text/x-mathematica\", mode: \"mathematica\", ext: [\"m\", \"nb\", \"wl\", \"wls\"]},\n {name: \"Modelica\", mime: \"text/x-modelica\", mode: \"modelica\", ext: [\"mo\"]},\n {name: \"MUMPS\", mime: \"text/x-mumps\", mode: \"mumps\", ext: [\"mps\"]},\n {name: \"MS SQL\", mime: \"text/x-mssql\", mode: \"sql\"},\n {name: \"mbox\", mime: \"application/mbox\", mode: \"mbox\", ext: [\"mbox\"]},\n {name: \"MySQL\", mime: \"text/x-mysql\", mode: \"sql\"},\n {name: \"Nginx\", mime: \"text/x-nginx-conf\", mode: \"nginx\", file: /nginx.*\\.conf$/i},\n {name: \"NSIS\", mime: \"text/x-nsis\", mode: \"nsis\", ext: [\"nsh\", \"nsi\"]},\n {name: \"NTriples\", mimes: [\"application/n-triples\", \"application/n-quads\", \"text/n-triples\"],\n mode: \"ntriples\", ext: [\"nt\", \"nq\"]},\n {name: \"Objective-C\", mime: \"text/x-objectivec\", mode: \"clike\", ext: [\"m\"], alias: [\"objective-c\", \"objc\"]},\n {name: \"Objective-C++\", mime: \"text/x-objectivec++\", mode: \"clike\", ext: [\"mm\"], alias: [\"objective-c++\", \"objc++\"]},\n {name: \"OCaml\", mime: \"text/x-ocaml\", mode: \"mllike\", ext: [\"ml\", \"mli\", \"mll\", \"mly\"]},\n {name: \"Octave\", mime: \"text/x-octave\", mode: \"octave\", ext: [\"m\"]},\n {name: \"Oz\", mime: \"text/x-oz\", mode: \"oz\", ext: [\"oz\"]},\n {name: \"Pascal\", mime: \"text/x-pascal\", mode: \"pascal\", ext: [\"p\", \"pas\"]},\n {name: \"PEG.js\", mime: \"null\", mode: \"pegjs\", ext: [\"jsonld\"]},\n {name: \"Perl\", mime: \"text/x-perl\", mode: \"perl\", ext: [\"pl\", \"pm\"]},\n {name: \"PHP\", mimes: [\"text/x-php\", \"application/x-httpd-php\", \"application/x-httpd-php-open\"], mode: \"php\", ext: [\"php\", \"php3\", \"php4\", \"php5\", \"php7\", \"phtml\"]},\n {name: \"Pig\", mime: \"text/x-pig\", mode: \"pig\", ext: [\"pig\"]},\n {name: \"Plain Text\", mime: \"text/plain\", mode: \"null\", ext: [\"txt\", \"text\", \"conf\", \"def\", \"list\", \"log\"]},\n {name: \"PLSQL\", mime: \"text/x-plsql\", mode: \"sql\", ext: [\"pls\"]},\n {name: \"PostgreSQL\", mime: \"text/x-pgsql\", mode: \"sql\"},\n {name: \"PowerShell\", mime: \"application/x-powershell\", mode: \"powershell\", ext: [\"ps1\", \"psd1\", \"psm1\"]},\n {name: \"Properties files\", mime: \"text/x-properties\", mode: \"properties\", ext: [\"properties\", \"ini\", \"in\"], alias: [\"ini\", \"properties\"]},\n {name: \"ProtoBuf\", mime: \"text/x-protobuf\", mode: \"protobuf\", ext: [\"proto\"]},\n {name: \"Python\", mime: \"text/x-python\", mode: \"python\", ext: [\"BUILD\", \"bzl\", \"py\", \"pyw\"], file: /^(BUCK|BUILD)$/},\n {name: \"Puppet\", mime: \"text/x-puppet\", mode: \"puppet\", ext: [\"pp\"]},\n {name: \"Q\", mime: \"text/x-q\", mode: \"q\", ext: [\"q\"]},\n {name: \"R\", mime: \"text/x-rsrc\", mode: \"r\", ext: [\"r\", \"R\"], alias: [\"rscript\"]},\n {name: \"reStructuredText\", mime: \"text/x-rst\", mode: \"rst\", ext: [\"rst\"], alias: [\"rst\"]},\n {name: \"RPM Changes\", mime: \"text/x-rpm-changes\", mode: \"rpm\"},\n {name: \"RPM Spec\", mime: \"text/x-rpm-spec\", mode: \"rpm\", ext: [\"spec\"]},\n {name: \"Ruby\", mime: \"text/x-ruby\", mode: \"ruby\", ext: [\"rb\"], alias: [\"jruby\", \"macruby\", \"rake\", \"rb\", \"rbx\"]},\n {name: \"Rust\", mime: \"text/x-rustsrc\", mode: \"rust\", ext: [\"rs\"]},\n {name: \"SAS\", mime: \"text/x-sas\", mode: \"sas\", ext: [\"sas\"]},\n {name: \"Sass\", mime: \"text/x-sass\", mode: \"sass\", ext: [\"sass\"]},\n {name: \"Scala\", mime: \"text/x-scala\", mode: \"clike\", ext: [\"scala\"]},\n {name: \"Scheme\", mime: \"text/x-scheme\", mode: \"scheme\", ext: [\"scm\", \"ss\"]},\n {name: \"SCSS\", mime: \"text/x-scss\", mode: \"css\", ext: [\"scss\"]},\n {name: \"Shell\", mimes: [\"text/x-sh\", \"application/x-sh\"], mode: \"shell\", ext: [\"sh\", \"ksh\", \"bash\"], alias: [\"bash\", \"sh\", \"zsh\"], file: /^PKGBUILD$/},\n {name: \"Sieve\", mime: \"application/sieve\", mode: \"sieve\", ext: [\"siv\", \"sieve\"]},\n {name: \"Slim\", mimes: [\"text/x-slim\", \"application/x-slim\"], mode: \"slim\", ext: [\"slim\"]},\n {name: \"Smalltalk\", mime: \"text/x-stsrc\", mode: \"smalltalk\", ext: [\"st\"]},\n {name: \"Smarty\", mime: \"text/x-smarty\", mode: \"smarty\", ext: [\"tpl\"]},\n {name: \"Solr\", mime: \"text/x-solr\", mode: \"solr\"},\n {name: \"SML\", mime: \"text/x-sml\", mode: \"mllike\", ext: [\"sml\", \"sig\", \"fun\", \"smackspec\"]},\n {name: \"Soy\", mime: \"text/x-soy\", mode: \"soy\", ext: [\"soy\"], alias: [\"closure template\"]},\n {name: \"SPARQL\", mime: \"application/sparql-query\", mode: \"sparql\", ext: [\"rq\", \"sparql\"], alias: [\"sparul\"]},\n {name: \"Spreadsheet\", mime: \"text/x-spreadsheet\", mode: \"spreadsheet\", alias: [\"excel\", \"formula\"]},\n {name: \"SQL\", mime: \"text/x-sql\", mode: \"sql\", ext: [\"sql\"]},\n {name: \"SQLite\", mime: \"text/x-sqlite\", mode: \"sql\"},\n {name: \"Squirrel\", mime: \"text/x-squirrel\", mode: \"clike\", ext: [\"nut\"]},\n {name: \"Stylus\", mime: \"text/x-styl\", mode: \"stylus\", ext: [\"styl\"]},\n {name: \"Swift\", mime: \"text/x-swift\", mode: \"swift\", ext: [\"swift\"]},\n {name: \"sTeX\", mime: \"text/x-stex\", mode: \"stex\"},\n {name: \"LaTeX\", mime: \"text/x-latex\", mode: \"stex\", ext: [\"text\", \"ltx\", \"tex\"], alias: [\"tex\"]},\n {name: \"SystemVerilog\", mime: \"text/x-systemverilog\", mode: \"verilog\", ext: [\"v\", \"sv\", \"svh\"]},\n {name: \"Tcl\", mime: \"text/x-tcl\", mode: \"tcl\", ext: [\"tcl\"]},\n {name: \"Textile\", mime: \"text/x-textile\", mode: \"textile\", ext: [\"textile\"]},\n {name: \"TiddlyWiki\", mime: \"text/x-tiddlywiki\", mode: \"tiddlywiki\"},\n {name: \"Tiki wiki\", mime: \"text/tiki\", mode: \"tiki\"},\n {name: \"TOML\", mime: \"text/x-toml\", mode: \"toml\", ext: [\"toml\"]},\n {name: \"Tornado\", mime: \"text/x-tornado\", mode: \"tornado\"},\n {name: \"troff\", mime: \"text/troff\", mode: \"troff\", ext: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"]},\n {name: \"TTCN\", mime: \"text/x-ttcn\", mode: \"ttcn\", ext: [\"ttcn\", \"ttcn3\", \"ttcnpp\"]},\n {name: \"TTCN_CFG\", mime: \"text/x-ttcn-cfg\", mode: \"ttcn-cfg\", ext: [\"cfg\"]},\n {name: \"Turtle\", mime: \"text/turtle\", mode: \"turtle\", ext: [\"ttl\"]},\n {name: \"TypeScript\", mime: \"application/typescript\", mode: \"javascript\", ext: [\"ts\"], alias: [\"ts\"]},\n {name: \"TypeScript-JSX\", mime: \"text/typescript-jsx\", mode: \"jsx\", ext: [\"tsx\"], alias: [\"tsx\"]},\n {name: \"Twig\", mime: \"text/x-twig\", mode: \"twig\"},\n {name: \"Web IDL\", mime: \"text/x-webidl\", mode: \"webidl\", ext: [\"webidl\"]},\n {name: \"VB.NET\", mime: \"text/x-vb\", mode: \"vb\", ext: [\"vb\"]},\n {name: \"VBScript\", mime: \"text/vbscript\", mode: \"vbscript\", ext: [\"vbs\"]},\n {name: \"Velocity\", mime: \"text/velocity\", mode: \"velocity\", ext: [\"vtl\"]},\n {name: \"Verilog\", mime: \"text/x-verilog\", mode: \"verilog\", ext: [\"v\"]},\n {name: \"VHDL\", mime: \"text/x-vhdl\", mode: \"vhdl\", ext: [\"vhd\", \"vhdl\"]},\n {name: \"Vue.js Component\", mimes: [\"script/x-vue\", \"text/x-vue\"], mode: \"vue\", ext: [\"vue\"]},\n {name: \"XML\", mimes: [\"application/xml\", \"text/xml\"], mode: \"xml\", ext: [\"xml\", \"xsl\", \"xsd\", \"svg\"], alias: [\"rss\", \"wsdl\", \"xsd\"]},\n {name: \"XQuery\", mime: \"application/xquery\", mode: \"xquery\", ext: [\"xy\", \"xquery\"]},\n {name: \"Yacas\", mime: \"text/x-yacas\", mode: \"yacas\", ext: [\"ys\"]},\n {name: \"YAML\", mimes: [\"text/x-yaml\", \"text/yaml\"], mode: \"yaml\", ext: [\"yaml\", \"yml\"], alias: [\"yml\"]},\n {name: \"Z80\", mime: \"text/x-z80\", mode: \"z80\", ext: [\"z80\"]},\n {name: \"mscgen\", mime: \"text/x-mscgen\", mode: \"mscgen\", ext: [\"mscgen\", \"mscin\", \"msc\"]},\n {name: \"xu\", mime: \"text/x-xu\", mode: \"mscgen\", ext: [\"xu\"]},\n {name: \"msgenny\", mime: \"text/x-msgenny\", mode: \"mscgen\", ext: [\"msgenny\"]},\n {name: \"WebAssembly\", mime: \"text/webassembly\", mode: \"wast\", ext: [\"wat\", \"wast\"]},\n ];\n // Ensure all modes have a mime property for backwards compatibility\n for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n var info = CodeMirror.modeInfo[i];\n if (info.mimes) info.mime = info.mimes[0];\n }\n\n CodeMirror.findModeByMIME = function(mime) {\n mime = mime.toLowerCase();\n for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n var info = CodeMirror.modeInfo[i];\n if (info.mime == mime) return info;\n if (info.mimes) for (var j = 0; j < info.mimes.length; j++)\n if (info.mimes[j] == mime) return info;\n }\n if (/\\+xml$/.test(mime)) return CodeMirror.findModeByMIME(\"application/xml\")\n if (/\\+json$/.test(mime)) return CodeMirror.findModeByMIME(\"application/json\")\n };\n\n CodeMirror.findModeByExtension = function(ext) {\n ext = ext.toLowerCase();\n for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n var info = CodeMirror.modeInfo[i];\n if (info.ext) for (var j = 0; j < info.ext.length; j++)\n if (info.ext[j] == ext) return info;\n }\n };\n\n CodeMirror.findModeByFileName = function(filename) {\n for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n var info = CodeMirror.modeInfo[i];\n if (info.file && info.file.test(filename)) return info;\n }\n var dot = filename.lastIndexOf(\".\");\n var ext = dot > -1 && filename.substring(dot + 1, filename.length);\n if (ext) return CodeMirror.findModeByExtension(ext);\n };\n\n CodeMirror.findModeByName = function(name) {\n name = name.toLowerCase();\n for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n var info = CodeMirror.modeInfo[i];\n if (info.name.toLowerCase() == name) return info;\n if (info.alias) for (var j = 0; j < info.alias.length; j++)\n if (info.alias[j].toLowerCase() == name) return info;\n }\n };\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nvar htmlConfig = {\n autoSelfClosers: {'area': true, 'base': true, 'br': true, 'col': true, 'command': true,\n 'embed': true, 'frame': true, 'hr': true, 'img': true, 'input': true,\n 'keygen': true, 'link': true, 'meta': true, 'param': true, 'source': true,\n 'track': true, 'wbr': true, 'menuitem': true},\n implicitlyClosed: {'dd': true, 'li': true, 'optgroup': true, 'option': true, 'p': true,\n 'rp': true, 'rt': true, 'tbody': true, 'td': true, 'tfoot': true,\n 'th': true, 'tr': true},\n contextGrabbers: {\n 'dd': {'dd': true, 'dt': true},\n 'dt': {'dd': true, 'dt': true},\n 'li': {'li': true},\n 'option': {'option': true, 'optgroup': true},\n 'optgroup': {'optgroup': true},\n 'p': {'address': true, 'article': true, 'aside': true, 'blockquote': true, 'dir': true,\n 'div': true, 'dl': true, 'fieldset': true, 'footer': true, 'form': true,\n 'h1': true, 'h2': true, 'h3': true, 'h4': true, 'h5': true, 'h6': true,\n 'header': true, 'hgroup': true, 'hr': true, 'menu': true, 'nav': true, 'ol': true,\n 'p': true, 'pre': true, 'section': true, 'table': true, 'ul': true},\n 'rp': {'rp': true, 'rt': true},\n 'rt': {'rp': true, 'rt': true},\n 'tbody': {'tbody': true, 'tfoot': true},\n 'td': {'td': true, 'th': true},\n 'tfoot': {'tbody': true},\n 'th': {'td': true, 'th': true},\n 'thead': {'tbody': true, 'tfoot': true},\n 'tr': {'tr': true}\n },\n doNotIndent: {\"pre\": true},\n allowUnquoted: true,\n allowMissing: true,\n caseFold: true\n}\n\nvar xmlConfig = {\n autoSelfClosers: {},\n implicitlyClosed: {},\n contextGrabbers: {},\n doNotIndent: {},\n allowUnquoted: false,\n allowMissing: false,\n allowMissingTagName: false,\n caseFold: false\n}\n\nCodeMirror.defineMode(\"xml\", function(editorConf, config_) {\n var indentUnit = editorConf.indentUnit\n var config = {}\n var defaults = config_.htmlMode ? htmlConfig : xmlConfig\n for (var prop in defaults) config[prop] = defaults[prop]\n for (var prop in config_) config[prop] = config_[prop]\n\n // Return variables for tokenizers\n var type, setStyle;\n\n function inText(stream, state) {\n function chain(parser) {\n state.tokenize = parser;\n return parser(stream, state);\n }\n\n var ch = stream.next();\n if (ch == \"<\") {\n if (stream.eat(\"!\")) {\n if (stream.eat(\"[\")) {\n if (stream.match(\"CDATA[\")) return chain(inBlock(\"atom\", \"]]>\"));\n else return null;\n } else if (stream.match(\"--\")) {\n return chain(inBlock(\"comment\", \"-->\"));\n } else if (stream.match(\"DOCTYPE\", true, true)) {\n stream.eatWhile(/[\\w\\._\\-]/);\n return chain(doctype(1));\n } else {\n return null;\n }\n } else if (stream.eat(\"?\")) {\n stream.eatWhile(/[\\w\\._\\-]/);\n state.tokenize = inBlock(\"meta\", \"?>\");\n return \"meta\";\n } else {\n type = stream.eat(\"/\") ? \"closeTag\" : \"openTag\";\n state.tokenize = inTag;\n return \"tag bracket\";\n }\n } else if (ch == \"&\") {\n var ok;\n if (stream.eat(\"#\")) {\n if (stream.eat(\"x\")) {\n ok = stream.eatWhile(/[a-fA-F\\d]/) && stream.eat(\";\");\n } else {\n ok = stream.eatWhile(/[\\d]/) && stream.eat(\";\");\n }\n } else {\n ok = stream.eatWhile(/[\\w\\.\\-:]/) && stream.eat(\";\");\n }\n return ok ? \"atom\" : \"error\";\n } else {\n stream.eatWhile(/[^&<]/);\n return null;\n }\n }\n inText.isInText = true;\n\n function inTag(stream, state) {\n var ch = stream.next();\n if (ch == \">\" || (ch == \"/\" && stream.eat(\">\"))) {\n state.tokenize = inText;\n type = ch == \">\" ? \"endTag\" : \"selfcloseTag\";\n return \"tag bracket\";\n } else if (ch == \"=\") {\n type = \"equals\";\n return null;\n } else if (ch == \"<\") {\n state.tokenize = inText;\n state.state = baseState;\n state.tagName = state.tagStart = null;\n var next = state.tokenize(stream, state);\n return next ? next + \" tag error\" : \"tag error\";\n } else if (/[\\'\\\"]/.test(ch)) {\n state.tokenize = inAttribute(ch);\n state.stringStartCol = stream.column();\n return state.tokenize(stream, state);\n } else {\n stream.match(/^[^\\s\\u00a0=<>\\\"\\']*[^\\s\\u00a0=<>\\\"\\'\\/]/);\n return \"word\";\n }\n }\n\n function inAttribute(quote) {\n var closure = function(stream, state) {\n while (!stream.eol()) {\n if (stream.next() == quote) {\n state.tokenize = inTag;\n break;\n }\n }\n return \"string\";\n };\n closure.isInAttribute = true;\n return closure;\n }\n\n function inBlock(style, terminator) {\n return function(stream, state) {\n while (!stream.eol()) {\n if (stream.match(terminator)) {\n state.tokenize = inText;\n break;\n }\n stream.next();\n }\n return style;\n }\n }\n\n function doctype(depth) {\n return function(stream, state) {\n var ch;\n while ((ch = stream.next()) != null) {\n if (ch == \"<\") {\n state.tokenize = doctype(depth + 1);\n return state.tokenize(stream, state);\n } else if (ch == \">\") {\n if (depth == 1) {\n state.tokenize = inText;\n break;\n } else {\n state.tokenize = doctype(depth - 1);\n return state.tokenize(stream, state);\n }\n }\n }\n return \"meta\";\n };\n }\n\n function lower(tagName) {\n return tagName && tagName.toLowerCase();\n }\n\n function Context(state, tagName, startOfLine) {\n this.prev = state.context;\n this.tagName = tagName || \"\";\n this.indent = state.indented;\n this.startOfLine = startOfLine;\n if (config.doNotIndent.hasOwnProperty(tagName) || (state.context && state.context.noIndent))\n this.noIndent = true;\n }\n function popContext(state) {\n if (state.context) state.context = state.context.prev;\n }\n function maybePopContext(state, nextTagName) {\n var parentTagName;\n while (true) {\n if (!state.context) {\n return;\n }\n parentTagName = state.context.tagName;\n if (!config.contextGrabbers.hasOwnProperty(lower(parentTagName)) ||\n !config.contextGrabbers[lower(parentTagName)].hasOwnProperty(lower(nextTagName))) {\n return;\n }\n popContext(state);\n }\n }\n\n function baseState(type, stream, state) {\n if (type == \"openTag\") {\n state.tagStart = stream.column();\n return tagNameState;\n } else if (type == \"closeTag\") {\n return closeTagNameState;\n } else {\n return baseState;\n }\n }\n function tagNameState(type, stream, state) {\n if (type == \"word\") {\n state.tagName = stream.current();\n setStyle = \"tag\";\n return attrState;\n } else if (config.allowMissingTagName && type == \"endTag\") {\n setStyle = \"tag bracket\";\n return attrState(type, stream, state);\n } else {\n setStyle = \"error\";\n return tagNameState;\n }\n }\n function closeTagNameState(type, stream, state) {\n if (type == \"word\") {\n var tagName = stream.current();\n if (state.context && state.context.tagName != tagName &&\n config.implicitlyClosed.hasOwnProperty(lower(state.context.tagName)))\n popContext(state);\n if ((state.context && state.context.tagName == tagName) || config.matchClosing === false) {\n setStyle = \"tag\";\n return closeState;\n } else {\n setStyle = \"tag error\";\n return closeStateErr;\n }\n } else if (config.allowMissingTagName && type == \"endTag\") {\n setStyle = \"tag bracket\";\n return closeState(type, stream, state);\n } else {\n setStyle = \"error\";\n return closeStateErr;\n }\n }\n\n function closeState(type, _stream, state) {\n if (type != \"endTag\") {\n setStyle = \"error\";\n return closeState;\n }\n popContext(state);\n return baseState;\n }\n function closeStateErr(type, stream, state) {\n setStyle = \"error\";\n return closeState(type, stream, state);\n }\n\n function attrState(type, _stream, state) {\n if (type == \"word\") {\n setStyle = \"attribute\";\n return attrEqState;\n } else if (type == \"endTag\" || type == \"selfcloseTag\") {\n var tagName = state.tagName, tagStart = state.tagStart;\n state.tagName = state.tagStart = null;\n if (type == \"selfcloseTag\" ||\n config.autoSelfClosers.hasOwnProperty(lower(tagName))) {\n maybePopContext(state, tagName);\n } else {\n maybePopContext(state, tagName);\n state.context = new Context(state, tagName, tagStart == state.indented);\n }\n return baseState;\n }\n setStyle = \"error\";\n return attrState;\n }\n function attrEqState(type, stream, state) {\n if (type == \"equals\") return attrValueState;\n if (!config.allowMissing) setStyle = \"error\";\n return attrState(type, stream, state);\n }\n function attrValueState(type, stream, state) {\n if (type == \"string\") return attrContinuedState;\n if (type == \"word\" && config.allowUnquoted) {setStyle = \"string\"; return attrState;}\n setStyle = \"error\";\n return attrState(type, stream, state);\n }\n function attrContinuedState(type, stream, state) {\n if (type == \"string\") return attrContinuedState;\n return attrState(type, stream, state);\n }\n\n return {\n startState: function(baseIndent) {\n var state = {tokenize: inText,\n state: baseState,\n indented: baseIndent || 0,\n tagName: null, tagStart: null,\n context: null}\n if (baseIndent != null) state.baseIndent = baseIndent\n return state\n },\n\n token: function(stream, state) {\n if (!state.tagName && stream.sol())\n state.indented = stream.indentation();\n\n if (stream.eatSpace()) return null;\n type = null;\n var style = state.tokenize(stream, state);\n if ((style || type) && style != \"comment\") {\n setStyle = null;\n state.state = state.state(type || style, stream, state);\n if (setStyle)\n style = setStyle == \"error\" ? style + \" error\" : setStyle;\n }\n return style;\n },\n\n indent: function(state, textAfter, fullLine) {\n var context = state.context;\n // Indent multi-line strings (e.g. css).\n if (state.tokenize.isInAttribute) {\n if (state.tagStart == state.indented)\n return state.stringStartCol + 1;\n else\n return state.indented + indentUnit;\n }\n if (context && context.noIndent) return CodeMirror.Pass;\n if (state.tokenize != inTag && state.tokenize != inText)\n return fullLine ? fullLine.match(/^(\\s*)/)[0].length : 0;\n // Indent the starts of attribute names.\n if (state.tagName) {\n if (config.multilineTagIndentPastTag !== false)\n return state.tagStart + state.tagName.length + 2;\n else\n return state.tagStart + indentUnit * (config.multilineTagIndentFactor || 1);\n }\n if (config.alignCDATA && /$/,\n blockCommentStart: \"\",\n\n configuration: config.htmlMode ? \"html\" : \"xml\",\n helperType: config.htmlMode ? \"html\" : \"xml\",\n\n skipAttribute: function(state) {\n if (state.state == attrValueState)\n state.state = attrState\n },\n\n xmlCurrentTag: function(state) {\n return state.tagName ? {name: state.tagName, close: state.type == \"closeTag\"} : null\n },\n\n xmlCurrentContext: function(state) {\n var context = []\n for (var cx = state.context; cx; cx = cx.prev)\n context.push(cx.tagName)\n return context.reverse()\n }\n };\n});\n\nCodeMirror.defineMIME(\"text/xml\", \"xml\");\nCodeMirror.defineMIME(\"application/xml\", \"xml\");\nif (!CodeMirror.mimeModes.hasOwnProperty(\"text/html\"))\n CodeMirror.defineMIME(\"text/html\", {name: \"xml\", htmlMode: true});\n\n});\n","/*jslint newcap: true */\n/*global inlineAttachment: false */\n/**\n * CodeMirror version for inlineAttachment\n *\n * Call inlineAttachment.attach(editor) to attach to a codemirror instance\n */\n(function() {\n 'use strict';\n\n var codeMirrorEditor = function(instance) {\n\n if (!instance.getWrapperElement) {\n throw \"Invalid CodeMirror object given\";\n }\n\n this.codeMirror = instance;\n };\n\n codeMirrorEditor.prototype.getValue = function() {\n return this.codeMirror.getValue();\n };\n\n codeMirrorEditor.prototype.insertValue = function(val) {\n this.codeMirror.replaceSelection(val);\n };\n\n codeMirrorEditor.prototype.setValue = function(val) {\n var cursor = this.codeMirror.getCursor();\n this.codeMirror.setValue(val);\n this.codeMirror.setCursor(cursor);\n };\n\n /**\n * Attach InlineAttachment to CodeMirror\n *\n * @param {CodeMirror} codeMirror\n */\n codeMirrorEditor.attach = function(codeMirror, options) {\n\n options = options || {};\n\n var editor = new codeMirrorEditor(codeMirror),\n inlineattach = new inlineAttachment(options, editor),\n el = codeMirror.getWrapperElement();\n\n el.addEventListener('paste', function(e) {\n inlineattach.onPaste(e);\n }, false);\n\n codeMirror.setOption('onDragEvent', function(data, e) {\n if (e.type === \"drop\") {\n e.stopPropagation();\n e.preventDefault();\n return inlineattach.onDrop(e);\n }\n });\n };\n\n var codeMirrorEditor4 = function(instance) {\n codeMirrorEditor.call(this, instance);\n };\n\n codeMirrorEditor4.attach = function(codeMirror, options) {\n\n options = options || {};\n\n var editor = new codeMirrorEditor(codeMirror),\n inlineattach = new inlineAttachment(options, editor),\n el = codeMirror.getWrapperElement();\n\n el.addEventListener('paste', function(e) {\n inlineattach.onPaste(e);\n }, false);\n\n codeMirror.on('drop', function(data, e) {\n if (inlineattach.onDrop(e)) {\n e.stopPropagation();\n e.preventDefault();\n return true;\n } else {\n return false;\n }\n });\n };\n\n inlineAttachment.editors.codemirror4 = codeMirrorEditor4;\n\n})();","/*jslint newcap: true */\n/*global XMLHttpRequest: false, FormData: false */\n/*\n * Inline Text Attachment\n *\n * Author: Roy van Kaathoven\n * Contact: ik@royvankaathoven.nl\n */\n(function(document, window) {\n 'use strict';\n\n var inlineAttachment = function(options, instance) {\n this.settings = inlineAttachment.util.merge(options, inlineAttachment.defaults);\n this.editor = instance;\n this.filenameTag = '{filename}';\n this.lastValue = null;\n };\n\n /**\n * Will holds the available editors\n *\n * @type {Object}\n */\n inlineAttachment.editors = {};\n\n /**\n * Utility functions\n */\n inlineAttachment.util = {\n\n /**\n * Simple function to merge the given objects\n *\n * @param {Object[]} object Multiple object parameters\n * @returns {Object}\n */\n merge: function() {\n var result = {};\n for (var i = arguments.length - 1; i >= 0; i--) {\n var obj = arguments[i];\n for (var k in obj) {\n if (obj.hasOwnProperty(k)) {\n result[k] = obj[k];\n }\n }\n }\n return result;\n },\n\n /**\n * Append a line of text at the bottom, ensuring there aren't unnecessary newlines\n *\n * @param {String} appended Current content\n * @param {String} previous Value which should be appended after the current content\n */\n appendInItsOwnLine: function(previous, appended) {\n return (previous + \"\\n\\n[[D]]\" + appended)\n .replace(/(\\n{2,})\\[\\[D\\]\\]/, \"\\n\\n\")\n .replace(/^(\\n*)/, \"\");\n },\n\n /**\n * Inserts the given value at the current cursor position of the textarea element\n *\n * @param {HtmlElement} el\n * @param {String} value Text which will be inserted at the cursor position\n */\n insertTextAtCursor: function(el, text) {\n var scrollPos = el.scrollTop,\n strPos = 0,\n browser = false,\n range;\n\n if ((el.selectionStart || el.selectionStart === '0')) {\n browser = \"ff\";\n } else if (document.selection) {\n browser = \"ie\";\n }\n\n if (browser === \"ie\") {\n el.focus();\n range = document.selection.createRange();\n range.moveStart('character', -el.value.length);\n strPos = range.text.length;\n } else if (browser === \"ff\") {\n strPos = el.selectionStart;\n }\n\n var front = (el.value).substring(0, strPos);\n var back = (el.value).substring(strPos, el.value.length);\n el.value = front + text + back;\n strPos = strPos + text.length;\n if (browser === \"ie\") {\n el.focus();\n range = document.selection.createRange();\n range.moveStart('character', -el.value.length);\n range.moveStart('character', strPos);\n range.moveEnd('character', 0);\n range.select();\n } else if (browser === \"ff\") {\n el.selectionStart = strPos;\n el.selectionEnd = strPos;\n el.focus();\n }\n el.scrollTop = scrollPos;\n }\n };\n\n /**\n * Default configuration options\n *\n * @type {Object}\n */\n inlineAttachment.defaults = {\n /**\n * URL where the file will be send\n */\n uploadUrl: 'upload_attachment.php',\n\n /**\n * Which method will be used to send the file to the upload URL\n */\n uploadMethod: 'POST',\n\n /**\n * Name in which the file will be placed\n */\n uploadFieldName: 'file',\n\n /**\n * Extension which will be used when a file extension could not\n * be detected\n */\n defaultExtension: 'png',\n\n /**\n * JSON field which refers to the uploaded file URL\n */\n jsonFieldName: 'filename',\n\n /**\n * Allowed MIME types\n */\n allowedTypes: [\n 'image/jpeg',\n 'image/png',\n 'image/jpg',\n 'image/gif'\n ],\n\n /**\n * Text which will be inserted when dropping or pasting a file.\n * Acts as a placeholder which will be replaced when the file is done with uploading\n */\n progressText: '![Uploading file...]()',\n\n /**\n * When a file has successfully been uploaded the progressText\n * will be replaced by the urlText, the {filename} tag will be replaced\n * by the filename that has been returned by the server\n */\n urlText: \"\",\n\n /**\n * Text which will be used when uploading has failed\n */\n errorText: \"Error uploading file\",\n\n /**\n * Extra parameters which will be send when uploading a file\n */\n extraParams: {},\n\n /**\n * Extra headers which will be send when uploading a file\n */\n extraHeaders: {},\n\n /**\n * Before the file is send\n */\n beforeFileUpload: function() {\n return true;\n },\n\n /**\n * Triggers when a file is dropped or pasted\n */\n onFileReceived: function() {},\n\n /**\n * Custom upload handler\n *\n * @return {Boolean} when false is returned it will prevent default upload behavior\n */\n onFileUploadResponse: function() {\n return true;\n },\n\n /**\n * Custom error handler. Runs after removing the placeholder text and before the alert().\n * Return false from this function to prevent the alert dialog.\n *\n * @return {Boolean} when false is returned it will prevent default error behavior\n */\n onFileUploadError: function() {\n return true;\n },\n\n /**\n * When a file has succesfully been uploaded\n */\n onFileUploaded: function() {}\n };\n\n /**\n * Uploads the blob\n *\n * @param {Blob} file blob data received from event.dataTransfer object\n * @return {XMLHttpRequest} request object which sends the file\n */\n inlineAttachment.prototype.uploadFile = function(file) {\n var me = this,\n formData = new FormData(),\n xhr = new XMLHttpRequest(),\n settings = this.settings,\n extension = settings.defaultExtension || settings.defualtExtension;\n\n if (typeof settings.setupFormData === 'function') {\n settings.setupFormData(formData, file);\n }\n\n // Attach the file. If coming from clipboard, add a default filename (only works in Chrome for now)\n // http://stackoverflow.com/questions/6664967/how-to-give-a-blob-uploaded-as-formdata-a-file-name\n if (file.name) {\n var fileNameMatches = file.name.match(/\\.(.+)$/);\n if (fileNameMatches) {\n extension = fileNameMatches[1];\n }\n }\n\n var remoteFilename = \"image-\" + Date.now() + \".\" + extension;\n if (typeof settings.remoteFilename === 'function') {\n remoteFilename = settings.remoteFilename(file);\n }\n\n formData.append(settings.uploadFieldName, file, remoteFilename);\n\n // Append the extra parameters to the formdata\n if (typeof settings.extraParams === \"object\") {\n for (var key in settings.extraParams) {\n if (settings.extraParams.hasOwnProperty(key)) {\n formData.append(key, settings.extraParams[key]);\n }\n }\n }\n\n xhr.open('POST', settings.uploadUrl);\n\n // Add any available extra headers\n if (typeof settings.extraHeaders === \"object\") {\n for (var header in settings.extraHeaders) {\n if (settings.extraHeaders.hasOwnProperty(header)) {\n xhr.setRequestHeader(header, settings.extraHeaders[header]);\n }\n }\n }\n\n xhr.onload = function() {\n // If HTTP status is OK or Created\n if (xhr.status === 200 || xhr.status === 201) {\n me.onFileUploadResponse(xhr);\n } else {\n me.onFileUploadError(xhr);\n }\n };\n if (settings.beforeFileUpload(xhr) !== false) {\n xhr.send(formData);\n }\n return xhr;\n };\n\n /**\n * Returns if the given file is allowed to handle\n *\n * @param {File} clipboard data file\n */\n inlineAttachment.prototype.isFileAllowed = function(file) {\n if (file.kind === 'string') { return false; }\n if (this.settings.allowedTypes.indexOf('*') === 0){\n return true;\n } else {\n return this.settings.allowedTypes.indexOf(file.type) >= 0;\n }\n };\n\n /**\n * Handles upload response\n *\n * @param {XMLHttpRequest} xhr\n * @return {Void}\n */\n inlineAttachment.prototype.onFileUploadResponse = function(xhr) {\n if (this.settings.onFileUploadResponse.call(this, xhr) !== false) {\n var result = JSON.parse(xhr.responseText),\n filename = result[this.settings.jsonFieldName];\n\n if (result && filename) {\n var newValue;\n if (typeof this.settings.urlText === 'function') {\n newValue = this.settings.urlText.call(this, filename, result);\n } else {\n newValue = this.settings.urlText.replace(this.filenameTag, filename);\n }\n var text = this.editor.getValue().replace(this.lastValue, newValue);\n this.editor.setValue(text);\n this.settings.onFileUploaded.call(this, filename);\n }\n }\n };\n\n\n /**\n * Called when a file has failed to upload\n *\n * @param {XMLHttpRequest} xhr\n * @return {Void}\n */\n inlineAttachment.prototype.onFileUploadError = function(xhr) {\n if (this.settings.onFileUploadError.call(this, xhr) !== false) {\n var text = this.editor.getValue().replace(this.lastValue, \"\");\n this.editor.setValue(text);\n }\n };\n\n /**\n * Called when a file has been inserted, either by drop or paste\n *\n * @param {File} file\n * @return {Void}\n */\n inlineAttachment.prototype.onFileInserted = function(file) {\n if (this.settings.onFileReceived.call(this, file) !== false) {\n this.lastValue = this.settings.progressText;\n this.editor.insertValue(this.lastValue);\n }\n };\n\n\n /**\n * Called when a paste event occured\n * @param {Event} e\n * @return {Boolean} if the event was handled\n */\n inlineAttachment.prototype.onPaste = function(e) {\n var result = false,\n clipboardData = e.clipboardData,\n items;\n\n if (typeof clipboardData === \"object\") {\n items = clipboardData.items || clipboardData.files || [];\n\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n if (this.isFileAllowed(item)) {\n result = true;\n this.onFileInserted(item.getAsFile());\n this.uploadFile(item.getAsFile());\n }\n }\n }\n\n if (result) { e.preventDefault(); }\n\n return result;\n };\n\n /**\n * Called when a drop event occures\n * @param {Event} e\n * @return {Boolean} if the event was handled\n */\n inlineAttachment.prototype.onDrop = function(e) {\n var result = false;\n for (var i = 0; i < e.dataTransfer.files.length; i++) {\n var file = e.dataTransfer.files[i];\n if (this.isFileAllowed(file)) {\n result = true;\n this.onFileInserted(file);\n this.uploadFile(file);\n }\n }\n\n return result;\n };\n\n window.inlineAttachment = inlineAttachment;\n\n})(document, window);\n","/*jslint newcap: true */\n/*global inlineAttachment: false, jQuery: false */\n/**\n * jQuery plugin for inline attach\n *\n * @param {document} document\n * @param {window} window\n * @param {jQuery} $\n */\n(function(document, window, $) {\n 'use strict';\n\n inlineAttachment.editors.jquery = {};\n\n /**\n * Creates a new editor using jQuery\n */\n var editor = function(instance) {\n\n var $this = $(instance);\n\n return {\n getValue: function() {\n return $this.val();\n },\n insertValue: function(val) {\n inlineAttachment.util.insertTextAtCursor($this[0], val);\n },\n setValue: function(val) {\n $this.val(val);\n }\n };\n };\n\n $.fn.inlineattachment = function(options) {\n\n var set = $(this);\n\n set.each(function() {\n\n var $this = $(this),\n ed = new editor($this),\n inlineattach = new inlineAttachment(options, ed);\n\n $this.bind({\n 'paste': function(e) {\n inlineattach.onPaste(e.originalEvent);\n },\n 'drop': function(e) {\n e.stopPropagation();\n e.preventDefault();\n inlineattach.onDrop(e.originalEvent);\n },\n 'dragenter dragover': function(e) {\n e.stopPropagation();\n e.preventDefault();\n }\n });\n });\n\n return this;\n };\n\n inlineAttachment.editors.jquery.Editor = editor;\n\n})(document, window, jQuery);","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\nvar CodeMirror = require('codemirror');\n\nCodeMirror.commands.tabAndIndentMarkdownList = function (cm) {\n var ranges = cm.listSelections();\n var pos = ranges[0].head;\n var eolState = cm.getStateAfter(pos.line);\n var inList = eolState.list !== false;\n\n if (inList) {\n cm.execCommand('indentMore');\n return;\n }\n\n if (cm.options.indentWithTabs) {\n cm.execCommand('insertTab');\n }\n else {\n var spaces = Array(cm.options.tabSize + 1).join(' ');\n cm.replaceSelection(spaces);\n }\n};\n\nCodeMirror.commands.shiftTabAndUnindentMarkdownList = function (cm) {\n var ranges = cm.listSelections();\n var pos = ranges[0].head;\n var eolState = cm.getStateAfter(pos.line);\n var inList = eolState.list !== false;\n\n if (inList) {\n cm.execCommand('indentLess');\n return;\n }\n\n if (cm.options.indentWithTabs) {\n cm.execCommand('insertTab');\n }\n else {\n var spaces = Array(cm.options.tabSize + 1).join(' ');\n cm.replaceSelection(spaces);\n }\n};\n","/**\n * marked - a markdown parser\n * Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n;(function(root) {\n'use strict';\n\n/**\n * Block-Level Grammar\n */\n\nvar block = {\n newline: /^\\n+/,\n code: /^( {4}[^\\n]+\\n*)+/,\n fences: noop,\n hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)/,\n heading: /^ *(#{1,6}) *([^\\n]+?) *#* *(?:\\n+|$)/,\n nptable: noop,\n blockquote: /^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/,\n list: /^( *)(bull) [\\s\\S]+?(?:hr|def|\\n{2,}(?! )(?!\\1bull )\\n*|\\s*$)/,\n html: /^ *(?:comment *(?:\\n|\\s*$)|closed *(?:\\n{2,}|\\s*$)|closing *(?:\\n{2,}|\\s*$))/,\n def: /^ {0,3}\\[(label)\\]: *\\n? *([^\\s>]+)>?(?:(?: +\\n? *| *\\n *)(title))? *(?:\\n+|$)/,\n table: noop,\n lheading: /^([^\\n]+)\\n *(=|-){2,} *(?:\\n+|$)/,\n paragraph: /^([^\\n]+(?:\\n?(?!hr|heading|lheading| {0,3}>|tag)[^\\n]+)+)/,\n text: /^[^\\n]+/\n};\n\nblock._label = /(?:\\\\[\\[\\]]|[^\\[\\]])+/;\nblock._title = /(?:\"(?:\\\\\"|[^\"]|\"[^\"\\n]*\")*\"|'\\n?(?:[^'\\n]+\\n?)*'|\\([^()]*\\))/;\nblock.def = edit(block.def)\n .replace('label', block._label)\n .replace('title', block._title)\n .getRegex();\n\nblock.bullet = /(?:[*+-]|\\d+\\.)/;\nblock.item = /^( *)(bull) [^\\n]*(?:\\n(?!\\1bull )[^\\n]*)*/;\nblock.item = edit(block.item, 'gm')\n .replace(/bull/g, block.bullet)\n .getRegex();\n\nblock.list = edit(block.list)\n .replace(/bull/g, block.bullet)\n .replace('hr', '\\\\n+(?=\\\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$))')\n .replace('def', '\\\\n+(?=' + block.def.source + ')')\n .getRegex();\n\nblock._tag = '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code'\n + '|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo'\n + '|span|br|wbr|ins|del|img)\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b';\n\nblock.html = edit(block.html)\n .replace('comment', //)\n .replace('closed', /<(tag)[\\s\\S]+?<\\/\\1>/)\n .replace('closing', / ' + text + '
';\n }\n\n return ''\n + (escaped ? code : escape(code, true))\n + '\\n
\\n';\n};\n\nRenderer.prototype.blockquote = function(quote) {\n return ''\n + (escaped ? code : escape(code, true))\n + '\\n
\\n' + quote + '
\\n';\n};\n\nRenderer.prototype.html = function(html) {\n return html;\n};\n\nRenderer.prototype.heading = function(text, level, raw) {\n return '
\\n' : '
\\n';\n};\n\nRenderer.prototype.list = function(body, ordered, start) {\n var type = ordered ? 'ol' : 'ul',\n startatt = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startatt + '>\\n' + body + '' + type + '>\\n';\n};\n\nRenderer.prototype.listitem = function(text) {\n return '
' + text + '
';\n};\n\nRenderer.prototype.br = function() {\n return this.options.xhtml ? 'An error occurred:
'\n + escape(e.message + '', true)\n + '';\n }\n throw e;\n }\n}\n\n/**\n * Options\n */\n\nmarked.options =\nmarked.setOptions = function(opt) {\n merge(marked.defaults, opt);\n return marked;\n};\n\nmarked.defaults = {\n gfm: true,\n tables: true,\n breaks: false,\n pedantic: false,\n sanitize: false,\n sanitizer: null,\n mangle: true,\n smartLists: false,\n silent: false,\n highlight: null,\n langPrefix: 'lang-',\n smartypants: false,\n headerPrefix: '',\n renderer: new Renderer(),\n xhtml: false,\n baseUrl: null\n};\n\n/**\n * Expose\n */\n\nmarked.Parser = Parser;\nmarked.parser = Parser.parse;\n\nmarked.Renderer = Renderer;\nmarked.TextRenderer = TextRenderer;\n\nmarked.Lexer = Lexer;\nmarked.lexer = Lexer.lex;\n\nmarked.InlineLexer = InlineLexer;\nmarked.inlineLexer = InlineLexer.output;\n\nmarked.parse = marked;\n\nif (typeof module !== 'undefined' && typeof exports === 'object') {\n module.exports = marked;\n} else if (typeof define === 'function' && define.amd) {\n define(function() { return marked; });\n} else {\n root.marked = marked;\n}\n})(this || (typeof window !== 'undefined' ? window : global));\n","/* globals chrome: false */\n/* globals __dirname: false */\n/* globals require: false */\n/* globals Buffer: false */\n/* globals module: false */\n\n/**\n * Typo is a JavaScript implementation of a spellchecker using hunspell-style \n * dictionaries.\n */\n\nvar Typo;\n\n(function () {\n\"use strict\";\n\n/**\n * Typo constructor.\n *\n * @param {String} [dictionary] The locale code of the dictionary being used. e.g.,\n * \"en_US\". This is only used to auto-load dictionaries.\n * @param {String} [affData] The data from the dictionary's .aff file. If omitted\n * and Typo.js is being used in a Chrome extension, the .aff\n * file will be loaded automatically from\n * lib/typo/dictionaries/[dictionary]/[dictionary].aff\n * In other environments, it will be loaded from\n * [settings.dictionaryPath]/dictionaries/[dictionary]/[dictionary].aff\n * @param {String} [wordsData] The data from the dictionary's .dic file. If omitted\n * and Typo.js is being used in a Chrome extension, the .dic\n * file will be loaded automatically from\n * lib/typo/dictionaries/[dictionary]/[dictionary].dic\n * In other environments, it will be loaded from\n * [settings.dictionaryPath]/dictionaries/[dictionary]/[dictionary].dic\n * @param {Object} [settings] Constructor settings. Available properties are:\n * {String} [dictionaryPath]: path to load dictionary from in non-chrome\n * environment.\n * {Object} [flags]: flag information.\n * {Boolean} [asyncLoad]: If true, affData and wordsData will be loaded\n * asynchronously.\n * {Function} [loadedCallback]: Called when both affData and wordsData\n * have been loaded. Only used if asyncLoad is set to true. The parameter\n * is the instantiated Typo object.\n *\n * @returns {Typo} A Typo object.\n */\n\nTypo = function (dictionary, affData, wordsData, settings) {\n\tsettings = settings || {};\n\n\tthis.dictionary = null;\n\t\n\tthis.rules = {};\n\tthis.dictionaryTable = {};\n\t\n\tthis.compoundRules = [];\n\tthis.compoundRuleCodes = {};\n\t\n\tthis.replacementTable = [];\n\t\n\tthis.flags = settings.flags || {}; \n\t\n\tthis.memoized = {};\n\n\tthis.loaded = false;\n\t\n\tvar self = this;\n\t\n\tvar path;\n\t\n\t// Loop-control variables.\n\tvar i, j, _len, _jlen;\n\t\n\tif (dictionary) {\n\t\tself.dictionary = dictionary;\n\t\t\n\t\t// If the data is preloaded, just setup the Typo object.\n\t\tif (affData && wordsData) {\n\t\t\tsetup();\n\t\t}\n\t\t// Loading data for Chrome extentions.\n\t\telse if (typeof window !== 'undefined' && 'chrome' in window && 'extension' in window.chrome && 'getURL' in window.chrome.extension) {\n\t\t\tif (settings.dictionaryPath) {\n\t\t\t\tpath = settings.dictionaryPath;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tpath = \"typo/dictionaries\";\n\t\t\t}\n\t\t\t\n\t\t\tif (!affData) readDataFile(chrome.extension.getURL(path + \"/\" + dictionary + \"/\" + dictionary + \".aff\"), setAffData);\n\t\t\tif (!wordsData) readDataFile(chrome.extension.getURL(path + \"/\" + dictionary + \"/\" + dictionary + \".dic\"), setWordsData);\n\t\t}\n\t\telse {\n\t\t\tif (settings.dictionaryPath) {\n\t\t\t\tpath = settings.dictionaryPath;\n\t\t\t}\n\t\t\telse if (typeof __dirname !== 'undefined') {\n\t\t\t\tpath = __dirname + '/dictionaries';\n\t\t\t}\n\t\t\telse {\n\t\t\t\tpath = './dictionaries';\n\t\t\t}\n\t\t\t\n\t\t\tif (!affData) readDataFile(path + \"/\" + dictionary + \"/\" + dictionary + \".aff\", setAffData);\n\t\t\tif (!wordsData) readDataFile(path + \"/\" + dictionary + \"/\" + dictionary + \".dic\", setWordsData);\n\t\t}\n\t}\n\t\n\tfunction readDataFile(url, setFunc) {\n\t\tvar response = self._readFile(url, null, settings.asyncLoad);\n\t\t\n\t\tif (settings.asyncLoad) {\n\t\t\tresponse.then(function(data) {\n\t\t\t\tsetFunc(data);\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tsetFunc(response);\n\t\t}\n\t}\n\n\tfunction setAffData(data) {\n\t\taffData = data;\n\n\t\tif (wordsData) {\n\t\t\tsetup();\n\t\t}\n\t}\n\n\tfunction setWordsData(data) {\n\t\twordsData = data;\n\n\t\tif (affData) {\n\t\t\tsetup();\n\t\t}\n\t}\n\n\tfunction setup() {\n\t\tself.rules = self._parseAFF(affData);\n\t\t\n\t\t// Save the rule codes that are used in compound rules.\n\t\tself.compoundRuleCodes = {};\n\t\t\n\t\tfor (i = 0, _len = self.compoundRules.length; i < _len; i++) {\n\t\t\tvar rule = self.compoundRules[i];\n\t\t\t\n\t\t\tfor (j = 0, _jlen = rule.length; j < _jlen; j++) {\n\t\t\t\tself.compoundRuleCodes[rule[j]] = [];\n\t\t\t}\n\t\t}\n\t\t\n\t\t// If we add this ONLYINCOMPOUND flag to self.compoundRuleCodes, then _parseDIC\n\t\t// will do the work of saving the list of words that are compound-only.\n\t\tif (\"ONLYINCOMPOUND\" in self.flags) {\n\t\t\tself.compoundRuleCodes[self.flags.ONLYINCOMPOUND] = [];\n\t\t}\n\t\t\n\t\tself.dictionaryTable = self._parseDIC(wordsData);\n\t\t\n\t\t// Get rid of any codes from the compound rule codes that are never used \n\t\t// (or that were special regex characters). Not especially necessary... \n\t\tfor (i in self.compoundRuleCodes) {\n\t\t\tif (self.compoundRuleCodes[i].length === 0) {\n\t\t\t\tdelete self.compoundRuleCodes[i];\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Build the full regular expressions for each compound rule.\n\t\t// I have a feeling (but no confirmation yet) that this method of \n\t\t// testing for compound words is probably slow.\n\t\tfor (i = 0, _len = self.compoundRules.length; i < _len; i++) {\n\t\t\tvar ruleText = self.compoundRules[i];\n\t\t\t\n\t\t\tvar expressionText = \"\";\n\t\t\t\n\t\t\tfor (j = 0, _jlen = ruleText.length; j < _jlen; j++) {\n\t\t\t\tvar character = ruleText[j];\n\t\t\t\t\n\t\t\t\tif (character in self.compoundRuleCodes) {\n\t\t\t\t\texpressionText += \"(\" + self.compoundRuleCodes[character].join(\"|\") + \")\";\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\texpressionText += character;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tself.compoundRules[i] = new RegExp(expressionText, \"i\");\n\t\t}\n\t\t\n\t\tself.loaded = true;\n\t\t\n\t\tif (settings.asyncLoad && settings.loadedCallback) {\n\t\t\tsettings.loadedCallback(self);\n\t\t}\n\t}\n\t\n\treturn this;\n};\n\nTypo.prototype = {\n\t/**\n\t * Loads a Typo instance from a hash of all of the Typo properties.\n\t *\n\t * @param object obj A hash of Typo properties, probably gotten from a JSON.parse(JSON.stringify(typo_instance)).\n\t */\n\t\n\tload : function (obj) {\n\t\tfor (var i in obj) {\n\t\t\tif (obj.hasOwnProperty(i)) {\n\t\t\t\tthis[i] = obj[i];\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * Read the contents of a file.\n\t * \n\t * @param {String} path The path (relative) to the file.\n\t * @param {String} [charset=\"ISO8859-1\"] The expected charset of the file\n\t * @param {Boolean} async If true, the file will be read asynchronously. For node.js this does nothing, all\n\t * files are read synchronously.\n\t * @returns {String} The file data if async is false, otherwise a promise object. If running node.js, the data is\n\t * always returned.\n\t */\n\t\n\t_readFile : function (path, charset, async) {\n\t\tcharset = charset || \"utf8\";\n\t\t\n\t\tif (typeof XMLHttpRequest !== 'undefined') {\n\t\t\tvar promise;\n\t\t\tvar req = new XMLHttpRequest();\n\t\t\treq.open(\"GET\", path, async);\n\t\t\t\n\t\t\tif (async) {\n\t\t\t\tpromise = new Promise(function(resolve, reject) {\n\t\t\t\t\treq.onload = function() {\n\t\t\t\t\t\tif (req.status === 200) {\n\t\t\t\t\t\t\tresolve(req.responseText);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treject(req.statusText);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t\n\t\t\t\t\treq.onerror = function() {\n\t\t\t\t\t\treject(req.statusText);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\n\t\t\tif (req.overrideMimeType)\n\t\t\t\treq.overrideMimeType(\"text/plain; charset=\" + charset);\n\t\t\n\t\t\treq.send(null);\n\t\t\t\n\t\t\treturn async ? promise : req.responseText;\n\t\t}\n\t\telse if (typeof require !== 'undefined') {\n\t\t\t// Node.js\n\t\t\tvar fs = require(\"fs\");\n\t\t\t\n\t\t\ttry {\n\t\t\t\tif (fs.existsSync(path)) {\n\t\t\t\t\treturn fs.readFileSync(path, charset);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tconsole.log(\"Path \" + path + \" does not exist.\");\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tconsole.log(e);\n\t\t\t\treturn '';\n\t\t\t}\n\t\t}\n\t},\n\t\n\t/**\n\t * Parse the rules out from a .aff file.\n\t *\n\t * @param {String} data The contents of the affix file.\n\t * @returns object The rules from the file.\n\t */\n\t\n\t_parseAFF : function (data) {\n\t\tvar rules = {};\n\t\t\n\t\tvar line, subline, numEntries, lineParts;\n\t\tvar i, j, _len, _jlen;\n\t\t\n\t\tvar lines = data.split(/\\r?\\n/);\n\t\t\n\t\tfor (i = 0, _len = lines.length; i < _len; i++) {\n\t\t\t// Remove comment lines\n\t\t\tline = this._removeAffixComments(lines[i]);\n\t\t\tline = line.trim();\n\t\t\t\n\t\t\tif ( ! line ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t\n\t\t\tvar definitionParts = line.split(/\\s+/);\n\t\t\t\n\t\t\tvar ruleType = definitionParts[0];\n\t\t\t\n\t\t\tif (ruleType == \"PFX\" || ruleType == \"SFX\") {\n\t\t\t\tvar ruleCode = definitionParts[1];\n\t\t\t\tvar combineable = definitionParts[2];\n\t\t\t\tnumEntries = parseInt(definitionParts[3], 10);\n\t\t\t\t\n\t\t\t\tvar entries = [];\n\t\t\t\t\n\t\t\t\tfor (j = i + 1, _jlen = i + 1 + numEntries; j < _jlen; j++) {\n\t\t\t\t\tsubline = lines[j];\n\t\t\t\t\t\n\t\t\t\t\tlineParts = subline.split(/\\s+/);\n\t\t\t\t\tvar charactersToRemove = lineParts[2];\n\t\t\t\t\t\n\t\t\t\t\tvar additionParts = lineParts[3].split(\"/\");\n\t\t\t\t\t\n\t\t\t\t\tvar charactersToAdd = additionParts[0];\n\t\t\t\t\tif (charactersToAdd === \"0\") charactersToAdd = \"\";\n\t\t\t\t\t\n\t\t\t\t\tvar continuationClasses = this.parseRuleCodes(additionParts[1]);\n\t\t\t\t\t\n\t\t\t\t\tvar regexToMatch = lineParts[4];\n\t\t\t\t\t\n\t\t\t\t\tvar entry = {};\n\t\t\t\t\tentry.add = charactersToAdd;\n\t\t\t\t\t\n\t\t\t\t\tif (continuationClasses.length > 0) entry.continuationClasses = continuationClasses;\n\t\t\t\t\t\n\t\t\t\t\tif (regexToMatch !== \".\") {\n\t\t\t\t\t\tif (ruleType === \"SFX\") {\n\t\t\t\t\t\t\tentry.match = new RegExp(regexToMatch + \"$\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tentry.match = new RegExp(\"^\" + regexToMatch);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (charactersToRemove != \"0\") {\n\t\t\t\t\t\tif (ruleType === \"SFX\") {\n\t\t\t\t\t\t\tentry.remove = new RegExp(charactersToRemove + \"$\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tentry.remove = charactersToRemove;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tentries.push(entry);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\trules[ruleCode] = { \"type\" : ruleType, \"combineable\" : (combineable == \"Y\"), \"entries\" : entries };\n\t\t\t\t\n\t\t\t\ti += numEntries;\n\t\t\t}\n\t\t\telse if (ruleType === \"COMPOUNDRULE\") {\n\t\t\t\tnumEntries = parseInt(definitionParts[1], 10);\n\t\t\t\t\n\t\t\t\tfor (j = i + 1, _jlen = i + 1 + numEntries; j < _jlen; j++) {\n\t\t\t\t\tline = lines[j];\n\t\t\t\t\t\n\t\t\t\t\tlineParts = line.split(/\\s+/);\n\t\t\t\t\tthis.compoundRules.push(lineParts[1]);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\ti += numEntries;\n\t\t\t}\n\t\t\telse if (ruleType === \"REP\") {\n\t\t\t\tlineParts = line.split(/\\s+/);\n\t\t\t\t\n\t\t\t\tif (lineParts.length === 3) {\n\t\t\t\t\tthis.replacementTable.push([ lineParts[1], lineParts[2] ]);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// ONLYINCOMPOUND\n\t\t\t\t// COMPOUNDMIN\n\t\t\t\t// FLAG\n\t\t\t\t// KEEPCASE\n\t\t\t\t// NEEDAFFIX\n\t\t\t\t\n\t\t\t\tthis.flags[ruleType] = definitionParts[1];\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn rules;\n\t},\n\t\n\t/**\n\t * Removes comments.\n\t *\n\t * @param {String} data A line from an affix file.\n\t * @return {String} The cleaned-up line.\n\t */\n\t\n\t_removeAffixComments : function (line) {\n\t\t// This used to remove any string starting with '#' up to the end of the line,\n\t\t// but some COMPOUNDRULE definitions include '#' as part of the rule.\n\t\t// So, only remove lines that begin with a comment, optionally preceded by whitespace.\n\t\tif ( line.match( /^\\s*#/, \"\" ) ) {\n\t\t\treturn '';\n\t\t}\n\t\t\n\t\treturn line;\n\t},\n\t\n\t/**\n\t * Parses the words out from the .dic file.\n\t *\n\t * @param {String} data The data from the dictionary file.\n\t * @returns object The lookup table containing all of the words and\n\t * word forms from the dictionary.\n\t */\n\t\n\t_parseDIC : function (data) {\n\t\tdata = this._removeDicComments(data);\n\t\t\n\t\tvar lines = data.split(/\\r?\\n/);\n\t\tvar dictionaryTable = {};\n\t\t\n\t\tfunction addWord(word, rules) {\n\t\t\t// Some dictionaries will list the same word multiple times with different rule sets.\n\t\t\tif (!dictionaryTable.hasOwnProperty(word)) {\n\t\t\t\tdictionaryTable[word] = null;\n\t\t\t}\n\t\t\t\n\t\t\tif (rules.length > 0) {\n\t\t\t\tif (dictionaryTable[word] === null) {\n\t\t\t\t\tdictionaryTable[word] = [];\n\t\t\t\t}\n\n\t\t\t\tdictionaryTable[word].push(rules);\n\t\t\t}\n\t\t}\n\t\t\n\t\t// The first line is the number of words in the dictionary.\n\t\tfor (var i = 1, _len = lines.length; i < _len; i++) {\n\t\t\tvar line = lines[i];\n\t\t\t\n\t\t\tif (!line) {\n\t\t\t\t// Ignore empty lines.\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar parts = line.split(\"/\", 2);\n\t\t\t\n\t\t\tvar word = parts[0];\n\n\t\t\t// Now for each affix rule, generate that form of the word.\n\t\t\tif (parts.length > 1) {\n\t\t\t\tvar ruleCodesArray = this.parseRuleCodes(parts[1]);\n\t\t\t\t\n\t\t\t\t// Save the ruleCodes for compound word situations.\n\t\t\t\tif (!(\"NEEDAFFIX\" in this.flags) || ruleCodesArray.indexOf(this.flags.NEEDAFFIX) == -1) {\n\t\t\t\t\taddWord(word, ruleCodesArray);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfor (var j = 0, _jlen = ruleCodesArray.length; j < _jlen; j++) {\n\t\t\t\t\tvar code = ruleCodesArray[j];\n\t\t\t\t\t\n\t\t\t\t\tvar rule = this.rules[code];\n\t\t\t\t\t\n\t\t\t\t\tif (rule) {\n\t\t\t\t\t\tvar newWords = this._applyRule(word, rule);\n\t\t\t\t\t\t\n\t\t\t\t\t\tfor (var ii = 0, _iilen = newWords.length; ii < _iilen; ii++) {\n\t\t\t\t\t\t\tvar newWord = newWords[ii];\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\taddWord(newWord, []);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (rule.combineable) {\n\t\t\t\t\t\t\t\tfor (var k = j + 1; k < _jlen; k++) {\n\t\t\t\t\t\t\t\t\tvar combineCode = ruleCodesArray[k];\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tvar combineRule = this.rules[combineCode];\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tif (combineRule) {\n\t\t\t\t\t\t\t\t\t\tif (combineRule.combineable && (rule.type != combineRule.type)) {\n\t\t\t\t\t\t\t\t\t\t\tvar otherNewWords = this._applyRule(newWord, combineRule);\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tfor (var iii = 0, _iiilen = otherNewWords.length; iii < _iiilen; iii++) {\n\t\t\t\t\t\t\t\t\t\t\t\tvar otherNewWord = otherNewWords[iii];\n\t\t\t\t\t\t\t\t\t\t\t\taddWord(otherNewWord, []);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (code in this.compoundRuleCodes) {\n\t\t\t\t\t\tthis.compoundRuleCodes[code].push(word);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\taddWord(word.trim(), []);\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn dictionaryTable;\n\t},\n\t\n\t\n\t/**\n\t * Removes comment lines and then cleans up blank lines and trailing whitespace.\n\t *\n\t * @param {String} data The data from a .dic file.\n\t * @return {String} The cleaned-up data.\n\t */\n\t\n\t_removeDicComments : function (data) {\n\t\t// I can't find any official documentation on it, but at least the de_DE\n\t\t// dictionary uses tab-indented lines as comments.\n\t\t\n\t\t// Remove comments\n\t\tdata = data.replace(/^\\t.*$/mg, \"\");\n\t\t\n\t\treturn data;\n\t},\n\t\n\tparseRuleCodes : function (textCodes) {\n\t\tif (!textCodes) {\n\t\t\treturn [];\n\t\t}\n\t\telse if (!(\"FLAG\" in this.flags)) {\n\t\t\t// The flag symbols are single characters\n\t\t\treturn textCodes.split(\"\");\n\t\t}\n\t\telse if (this.flags.FLAG === \"long\") {\n\t\t\t// The flag symbols are two characters long.\n\t\t\tvar flags = [];\n\t\t\t\n\t\t\tfor (var i = 0, _len = textCodes.length; i < _len; i += 2) {\n\t\t\t\tflags.push(textCodes.substr(i, 2));\n\t\t\t}\n\t\t\t\n\t\t\treturn flags;\n\t\t}\n\t\telse if (this.flags.FLAG === \"num\") {\n\t\t\t// The flag symbols are a CSV list of numbers.\n\t\t\treturn textCodes.split(\",\");\n\t\t}\n\t\telse if (this.flags.FLAG === \"UTF-8\") {\n\t\t\t// The flags are single UTF-8 characters.\n\t\t\t// @see https://github.com/cfinke/Typo.js/issues/57\n\t\t\treturn Array.from(textCodes);\n\t\t}\n\t\telse {\n\t\t\t// It's possible that this fallback case will not work for all FLAG values,\n\t\t\t// but I think it's more likely to work than not returning anything at all.\n\t\t\treturn textCodes.split(\"\");\n\t\t}\n\t},\n\t\n\t/**\n\t * Applies an affix rule to a word.\n\t *\n\t * @param {String} word The base word.\n\t * @param {Object} rule The affix rule.\n\t * @returns {String[]} The new words generated by the rule.\n\t */\n\t\n\t_applyRule : function (word, rule) {\n\t\tvar entries = rule.entries;\n\t\tvar newWords = [];\n\t\t\n\t\tfor (var i = 0, _len = entries.length; i < _len; i++) {\n\t\t\tvar entry = entries[i];\n\t\t\t\n\t\t\tif (!entry.match || word.match(entry.match)) {\n\t\t\t\tvar newWord = word;\n\t\t\t\t\n\t\t\t\tif (entry.remove) {\n\t\t\t\t\tnewWord = newWord.replace(entry.remove, \"\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (rule.type === \"SFX\") {\n\t\t\t\t\tnewWord = newWord + entry.add;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tnewWord = entry.add + newWord;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tnewWords.push(newWord);\n\t\t\t\t\n\t\t\t\tif (\"continuationClasses\" in entry) {\n\t\t\t\t\tfor (var j = 0, _jlen = entry.continuationClasses.length; j < _jlen; j++) {\n\t\t\t\t\t\tvar continuationRule = this.rules[entry.continuationClasses[j]];\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (continuationRule) {\n\t\t\t\t\t\t\tnewWords = newWords.concat(this._applyRule(newWord, continuationRule));\n\t\t\t\t\t\t}\n\t\t\t\t\t\t/*\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// This shouldn't happen, but it does, at least in the de_DE dictionary.\n\t\t\t\t\t\t\t// I think the author mistakenly supplied lower-case rule codes instead \n\t\t\t\t\t\t\t// of upper-case.\n\t\t\t\t\t\t}\n\t\t\t\t\t\t*/\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn newWords;\n\t},\n\t\n\t/**\n\t * Checks whether a word or a capitalization variant exists in the current dictionary.\n\t * The word is trimmed and several variations of capitalizations are checked.\n\t * If you want to check a word without any changes made to it, call checkExact()\n\t *\n\t * @see http://blog.stevenlevithan.com/archives/faster-trim-javascript re:trimming function\n\t *\n\t * @param {String} aWord The word to check.\n\t * @returns {Boolean}\n\t */\n\t\n\tcheck : function (aWord) {\n\t\tif (!this.loaded) {\n\t\t\tthrow \"Dictionary not loaded.\";\n\t\t}\n\t\t\n\t\t// Remove leading and trailing whitespace\n\t\tvar trimmedWord = aWord.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n\t\t\n\t\tif (this.checkExact(trimmedWord)) {\n\t\t\treturn true;\n\t\t}\n\t\t\n\t\t// The exact word is not in the dictionary.\n\t\tif (trimmedWord.toUpperCase() === trimmedWord) {\n\t\t\t// The word was supplied in all uppercase.\n\t\t\t// Check for a capitalized form of the word.\n\t\t\tvar capitalizedWord = trimmedWord[0] + trimmedWord.substring(1).toLowerCase();\n\t\t\t\n\t\t\tif (this.hasFlag(capitalizedWord, \"KEEPCASE\")) {\n\t\t\t\t// Capitalization variants are not allowed for this word.\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t\n\t\t\tif (this.checkExact(capitalizedWord)) {\n\t\t\t\t// The all-caps word is a capitalized word spelled correctly.\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (this.checkExact(trimmedWord.toLowerCase())) {\n\t\t\t\t// The all-caps is a lowercase word spelled correctly.\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\tvar uncapitalizedWord = trimmedWord[0].toLowerCase() + trimmedWord.substring(1);\n\t\t\n\t\tif (uncapitalizedWord !== trimmedWord) {\n\t\t\tif (this.hasFlag(uncapitalizedWord, \"KEEPCASE\")) {\n\t\t\t\t// Capitalization variants are not allowed for this word.\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t\n\t\t\t// Check for an uncapitalized form\n\t\t\tif (this.checkExact(uncapitalizedWord)) {\n\t\t\t\t// The word is spelled correctly but with the first letter capitalized.\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t},\n\t\n\t/**\n\t * Checks whether a word exists in the current dictionary.\n\t *\n\t * @param {String} word The word to check.\n\t * @returns {Boolean}\n\t */\n\t\n\tcheckExact : function (word) {\n\t\tif (!this.loaded) {\n\t\t\tthrow \"Dictionary not loaded.\";\n\t\t}\n\n\t\tvar ruleCodes = this.dictionaryTable[word];\n\t\t\n\t\tvar i, _len;\n\t\t\n\t\tif (typeof ruleCodes === 'undefined') {\n\t\t\t// Check if this might be a compound word.\n\t\t\tif (\"COMPOUNDMIN\" in this.flags && word.length >= this.flags.COMPOUNDMIN) {\n\t\t\t\tfor (i = 0, _len = this.compoundRules.length; i < _len; i++) {\n\t\t\t\t\tif (word.match(this.compoundRules[i])) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (ruleCodes === null) {\n\t\t\t// a null (but not undefined) value for an entry in the dictionary table\n\t\t\t// means that the word is in the dictionary but has no flags.\n\t\t\treturn true;\n\t\t}\n\t\telse if (typeof ruleCodes === 'object') { // this.dictionary['hasOwnProperty'] will be a function.\n\t\t\tfor (i = 0, _len = ruleCodes.length; i < _len; i++) {\n\t\t\t\tif (!this.hasFlag(word, \"ONLYINCOMPOUND\", ruleCodes[i])) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\t\n\t/**\n\t * Looks up whether a given word is flagged with a given flag.\n\t *\n\t * @param {String} word The word in question.\n\t * @param {String} flag The flag in question.\n\t * @return {Boolean}\n\t */\n\t \n\thasFlag : function (word, flag, wordFlags) {\n\t\tif (!this.loaded) {\n\t\t\tthrow \"Dictionary not loaded.\";\n\t\t}\n\n\t\tif (flag in this.flags) {\n\t\t\tif (typeof wordFlags === 'undefined') {\n\t\t\t\twordFlags = Array.prototype.concat.apply([], this.dictionaryTable[word]);\n\t\t\t}\n\t\t\t\n\t\t\tif (wordFlags && wordFlags.indexOf(this.flags[flag]) !== -1) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t},\n\t\n\t/**\n\t * Returns a list of suggestions for a misspelled word.\n\t *\n\t * @see http://www.norvig.com/spell-correct.html for the basis of this suggestor.\n\t * This suggestor is primitive, but it works.\n\t *\n\t * @param {String} word The misspelling.\n\t * @param {Number} [limit=5] The maximum number of suggestions to return.\n\t * @returns {String[]} The array of suggestions.\n\t */\n\t\n\talphabet : \"\",\n\t\n\tsuggest : function (word, limit) {\n\t\tif (!this.loaded) {\n\t\t\tthrow \"Dictionary not loaded.\";\n\t\t}\n\n\t\tlimit = limit || 5;\n\n\t\tif (this.memoized.hasOwnProperty(word)) {\n\t\t\tvar memoizedLimit = this.memoized[word]['limit'];\n\n\t\t\t// Only return the cached list if it's big enough or if there weren't enough suggestions\n\t\t\t// to fill a smaller limit.\n\t\t\tif (limit <= memoizedLimit || this.memoized[word]['suggestions'].length < memoizedLimit) {\n\t\t\t\treturn this.memoized[word]['suggestions'].slice(0, limit);\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (this.check(word)) return [];\n\t\t\n\t\t// Check the replacement table.\n\t\tfor (var i = 0, _len = this.replacementTable.length; i < _len; i++) {\n\t\t\tvar replacementEntry = this.replacementTable[i];\n\t\t\t\n\t\t\tif (word.indexOf(replacementEntry[0]) !== -1) {\n\t\t\t\tvar correctedWord = word.replace(replacementEntry[0], replacementEntry[1]);\n\t\t\t\t\n\t\t\t\tif (this.check(correctedWord)) {\n\t\t\t\t\treturn [ correctedWord ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tvar self = this;\n\t\tself.alphabet = \"abcdefghijklmnopqrstuvwxyz\";\n\t\t\n\t\t/*\n\t\tif (!self.alphabet) {\n\t\t\t// Use the alphabet as implicitly defined by the words in the dictionary.\n\t\t\tvar alphaHash = {};\n\t\t\t\n\t\t\tfor (var i in self.dictionaryTable) {\n\t\t\t\tfor (var j = 0, _len = i.length; j < _len; j++) {\n\t\t\t\t\talphaHash[i[j]] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tfor (var i in alphaHash) {\n\t\t\t\tself.alphabet += i;\n\t\t\t}\n\t\t\t\n\t\t\tvar alphaArray = self.alphabet.split(\"\");\n\t\t\talphaArray.sort();\n\t\t\tself.alphabet = alphaArray.join(\"\");\n\t\t}\n\t\t*/\n\t\t\n\t\t/**\n\t\t * Returns a hash keyed by all of the strings that can be made by making a single edit to the word (or words in) `words`\n\t\t * The value of each entry is the number of unique ways that the resulting word can be made.\n\t\t *\n\t\t * @arg mixed words Either a hash keyed by words or a string word to operate on.\n\t\t * @arg bool known_only Whether this function should ignore strings that are not in the dictionary.\n\t\t */\n\t\tfunction edits1(words, known_only) {\n\t\t\tvar rv = {};\n\t\t\t\n\t\t\tvar i, j, _iilen, _len, _jlen, _edit;\n\n\t\t\tvar alphabetLength = self.alphabet.length;\n\t\t\t\n\t\t\tif (typeof words == 'string') {\n\t\t\t\tvar word = words;\n\t\t\t\twords = {};\n\t\t\t\twords[word] = true;\n\t\t\t}\n\n\t\t\tfor (var word in words) {\n\t\t\t\tfor (i = 0, _len = word.length + 1; i < _len; i++) {\n\t\t\t\t\tvar s = [ word.substring(0, i), word.substring(i) ];\n\t\t\t\t\n\t\t\t\t\t// Remove a letter.\n\t\t\t\t\tif (s[1]) {\n\t\t\t\t\t\t_edit = s[0] + s[1].substring(1);\n\n\t\t\t\t\t\tif (!known_only || self.check(_edit)) {\n\t\t\t\t\t\t\tif (!(_edit in rv)) {\n\t\t\t\t\t\t\t\trv[_edit] = 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\trv[_edit] += 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// Transpose letters\n\t\t\t\t\t// Eliminate transpositions of identical letters\n\t\t\t\t\tif (s[1].length > 1 && s[1][1] !== s[1][0]) {\n\t\t\t\t\t\t_edit = s[0] + s[1][1] + s[1][0] + s[1].substring(2);\n\n\t\t\t\t\t\tif (!known_only || self.check(_edit)) {\n\t\t\t\t\t\t\tif (!(_edit in rv)) {\n\t\t\t\t\t\t\t\trv[_edit] = 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\trv[_edit] += 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (s[1]) {\n\t\t\t\t\t\t// Replace a letter with another letter.\n\n\t\t\t\t\t\tvar lettercase = (s[1].substring(0,1).toUpperCase() === s[1].substring(0,1)) ? 'uppercase' : 'lowercase';\n\n\t\t\t\t\t\tfor (j = 0; j < alphabetLength; j++) {\n\t\t\t\t\t\t\tvar replacementLetter = self.alphabet[j];\n\n\t\t\t\t\t\t\t// Set the case of the replacement letter to the same as the letter being replaced.\n\t\t\t\t\t\t\tif ( 'uppercase' === lettercase ) {\n\t\t\t\t\t\t\t\treplacementLetter = replacementLetter.toUpperCase();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Eliminate replacement of a letter by itself\n\t\t\t\t\t\t\tif (replacementLetter != s[1].substring(0,1)){\n\t\t\t\t\t\t\t\t_edit = s[0] + replacementLetter + s[1].substring(1);\n\n\t\t\t\t\t\t\t\tif (!known_only || self.check(_edit)) {\n\t\t\t\t\t\t\t\t\tif (!(_edit in rv)) {\n\t\t\t\t\t\t\t\t\t\trv[_edit] = 1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\trv[_edit] += 1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (s[1]) {\n\t\t\t\t\t\t// Add a letter between each letter.\n\t\t\t\t\t\tfor (j = 0; j < alphabetLength; j++) {\n\t\t\t\t\t\t\t// If the letters on each side are capitalized, capitalize the replacement.\n\t\t\t\t\t\t\tvar lettercase = (s[0].substring(-1).toUpperCase() === s[0].substring(-1) && s[1].substring(0,1).toUpperCase() === s[1].substring(0,1)) ? 'uppercase' : 'lowercase';\n\n\t\t\t\t\t\t\tvar replacementLetter = self.alphabet[j];\n\n\t\t\t\t\t\t\tif ( 'uppercase' === lettercase ) {\n\t\t\t\t\t\t\t\treplacementLetter = replacementLetter.toUpperCase();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t_edit = s[0] + replacementLetter + s[1];\n\n\t\t\t\t\t\t\tif (!known_only || self.check(_edit)) {\n\t\t\t\t\t\t\t\tif (!(_edit in rv)) {\n\t\t\t\t\t\t\t\t\trv[_edit] = 1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\trv[_edit] += 1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn rv;\n\t\t}\n\n\t\tfunction correct(word) {\n\t\t\t// Get the edit-distance-1 and edit-distance-2 forms of this word.\n\t\t\tvar ed1 = edits1(word);\n\t\t\tvar ed2 = edits1(ed1, true);\n\t\t\t\n\t\t\t// Sort the edits based on how many different ways they were created.\n\t\t\tvar weighted_corrections = ed2;\n\t\t\t\n\t\t\tfor (var ed1word in ed1) {\n\t\t\t\tif (!self.check(ed1word)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (ed1word in weighted_corrections) {\n\t\t\t\t\tweighted_corrections[ed1word] += ed1[ed1word];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tweighted_corrections[ed1word] = ed1[ed1word];\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tvar i, _len;\n\n\t\t\tvar sorted_corrections = [];\n\t\t\t\n\t\t\tfor (i in weighted_corrections) {\n\t\t\t\tif (weighted_corrections.hasOwnProperty(i)) {\n\t\t\t\t\tsorted_corrections.push([ i, weighted_corrections[i] ]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction sorter(a, b) {\n\t\t\t\tvar a_val = a[1];\n\t\t\t\tvar b_val = b[1];\n\t\t\t\tif (a_val < b_val) {\n\t\t\t\t\treturn -1;\n\t\t\t\t} else if (a_val > b_val) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t\t// @todo If a and b are equally weighted, add our own weight based on something like the key locations on this language's default keyboard.\n\t\t\t\treturn b[0].localeCompare(a[0]);\n\t\t\t}\n\t\t\t\n\t\t\tsorted_corrections.sort(sorter).reverse();\n\n\t\t\tvar rv = [];\n\n\t\t\tvar capitalization_scheme = \"lowercase\";\n\t\t\t\n\t\t\tif (word.toUpperCase() === word) {\n\t\t\t\tcapitalization_scheme = \"uppercase\";\n\t\t\t}\n\t\t\telse if (word.substr(0, 1).toUpperCase() + word.substr(1).toLowerCase() === word) {\n\t\t\t\tcapitalization_scheme = \"capitalized\";\n\t\t\t}\n\t\t\t\n\t\t\tvar working_limit = limit;\n\n\t\t\tfor (i = 0; i < Math.min(working_limit, sorted_corrections.length); i++) {\n\t\t\t\tif (\"uppercase\" === capitalization_scheme) {\n\t\t\t\t\tsorted_corrections[i][0] = sorted_corrections[i][0].toUpperCase();\n\t\t\t\t}\n\t\t\t\telse if (\"capitalized\" === capitalization_scheme) {\n\t\t\t\t\tsorted_corrections[i][0] = sorted_corrections[i][0].substr(0, 1).toUpperCase() + sorted_corrections[i][0].substr(1);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (!self.hasFlag(sorted_corrections[i][0], \"NOSUGGEST\") && rv.indexOf(sorted_corrections[i][0]) == -1) {\n\t\t\t\t\trv.push(sorted_corrections[i][0]);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// If one of the corrections is not eligible as a suggestion , make sure we still return the right number of suggestions.\n\t\t\t\t\tworking_limit++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn rv;\n\t\t}\n\t\t\n\t\tthis.memoized[word] = {\n\t\t\t'suggestions': correct(word),\n\t\t\t'limit': limit\n\t\t};\n\n\t\treturn this.memoized[word]['suggestions'];\n\t}\n};\n})();\n\n// Support for use as a node.js module.\nif (typeof module !== 'undefined') {\n\tmodule.exports = Typo;\n}\n"],"names":["Typo","CodeMirrorSpellChecker","options","codeMirrorInstance","defineMode","String","prototype","includes","indexOf","apply","this","arguments","config","aff_loading","xhr_aff","XMLHttpRequest","open","onload","readyState","status","aff_data","responseText","num_loaded","typo","dic_data","platform","send","dic_loading","xhr_dic","rx_word","overlay","token","stream","ch","peek","word","next","check","mode","getMode","backdrop","overlayMode","console","log","module","exports","CodeMirror","setFullscreen","cm","wrap","getWrapperElement","state","fullScreenRestore","scrollTop","window","pageYOffset","scrollLeft","pageXOffset","width","style","height","className","document","documentElement","overflow","refresh","setNormal","replace","info","scrollTo","defineOption","val","old","Init","mod","clearPlaceholder","placeholder","parentNode","removeChild","setPlaceholder","elt","createElement","cssText","direction","getOption","placeHolder","createTextNode","appendChild","display","lineSpace","insertBefore","firstChild","onComposition","setTimeout","empty","lineCount","input","getInputField","nodeName","getLine","length","test","querySelector","textContent","onBlur","isEmpty","onChange","wrapper","prev","on","placeholderCompose","off","hasFocus","listRE","emptyListRE","unorderedListRE","incrementRemainingMarkdownListNumbers","pos","startLine","line","lookAhead","skipCount","startItem","exec","startIndent","nextLineNumber","nextLine","nextItem","nextIndent","newNumber","parseInt","nextNumber","itemNumber","isNaN","replaceRange","commands","newlineAndIndentContinueMarkdownList","Pass","ranges","listSelections","replacements","i","head","eolState","getStateAfter","inner","innerMode","name","helperType","execCommand","inList","list","inQuote","quote","match","cursorBeforeBullet","slice","endOfQuote","endOfList","indent","after","numbered","bullet","replaceSelections","base","combine","startState","basePos","baseCur","overlayPos","overlayCur","streamSeen","copyState","Math","min","start","combineTokens","textAfter","electricChars","blankLine","baseToken","overlayToken","onCursorActivity","markedSelection","operation","update","clear","markedSelectionStyle","reset","CHUNK_SIZE","Pos","cmp","cmpPos","coverRange","from","to","addAt","array","cls","endLine","atEnd","end","mark","markText","push","splice","somethingSelected","getCursor","coverStart","find","coverEnd","shift","pop","urlRE","modeConfig","codeDepth","code","gfmOverlay","codeBlock","ateSpace","s","skipToEnd","sol","before","eatWhile","difference","eatSpace","gitHubSpice","string","charAt","markdownConfig","taskLists","strikethrough","emoji","attr","defineMIME","cmCfg","modeCfg","htmlMode","htmlModeMissing","findModeByName","found","mime","mimes","undefined","highlightFormatting","maxBlockquoteDepth","fencedCodeBlockHighlighting","fencedCodeBlockDefaultMode","xml","tokenTypeOverrides","tokenTypes","header","list1","list2","list3","hr","image","imageAltText","imageMarker","formatting","linkInline","linkEmail","linkText","linkHref","em","strong","tokenType","hasOwnProperty","hrRE","taskListRE","atxHeaderRE","allowAtxHeaderWithoutSpace","setextHeaderRE","textRE","fencedCodeRE","linkDefRE","punctuation","expandedTab","switchInline","f","inline","switchBlock","block","lineIsEmpty","linkTitle","indentedCode","htmlBlock","exit","htmlState","tagStart","context","tokenize","isInText","inlineNormal","blockNormal","trailingSpace","trailingSpaceNewLine","prevLine","thisLine","firstTokenOnLine","column","indentation","prevLineLineIsEmpty","prevLineIsIndentedCode","prevLineIsHr","prevLineIsList","maxNonCodeIndentation","listStack","lineIndentation","indentationDiff","allowsInlineContinuation","fencedCodeEnd","isHr","getType","eat","setext","listType","current","taskList","fencedEndRE","RegExp","localMode","localState","local","footnoteLink","md_inside","returnType","currListInd","hasExitedList","maxFencedEndInd","styles","taskOpen","join","taskClosed","listMod","handleText","text","matchCh","regex","previousFormatting","count","t","type","formattingEscape","atts","substring","backUp","len","leftFlanking","rightFlanking","setEm","setStrong","retType","getLinkHrefInside","linkRE","endChar","returnState","footnoteLinkInside","footnoteUrl","blockCommentStart","blockCommentEnd","closeBrackets","fold","modeInfo","ext","file","alias","findModeByMIME","toLowerCase","j","findModeByExtension","findModeByFileName","filename","dot","lastIndexOf","htmlConfig","autoSelfClosers","implicitlyClosed","contextGrabbers","doNotIndent","allowUnquoted","allowMissing","caseFold","xmlConfig","allowMissingTagName","editorConf","config_","setStyle","indentUnit","defaults","prop","inText","chain","parser","inBlock","doctype","inTag","baseState","tagName","inAttribute","stringStartCol","closure","eol","isInAttribute","terminator","depth","lower","Context","startOfLine","indented","noIndent","popContext","maybePopContext","nextTagName","parentTagName","tagNameState","closeTagNameState","attrState","matchClosing","closeState","closeStateErr","_stream","attrEqState","attrValueState","attrContinuedState","baseIndent","fullLine","multilineTagIndentPastTag","multilineTagIndentFactor","alignCDATA","tagAfter","grabbers","electricInput","configuration","skipAttribute","xmlCurrentTag","close","xmlCurrentContext","cx","reverse","mimeModes","codeMirrorEditor","instance","codeMirror","getValue","insertValue","replaceSelection","setValue","cursor","setCursor","attach","editor","inlineattach","inlineAttachment","addEventListener","e","onPaste","setOption","data","stopPropagation","preventDefault","onDrop","codeMirrorEditor4","call","editors","codemirror4","settings","util","merge","filenameTag","lastValue","result","obj","k","appendInItsOwnLine","previous","appended","insertTextAtCursor","el","range","scrollPos","strPos","browser","selectionStart","selection","focus","createRange","moveStart","value","front","back","moveEnd","select","selectionEnd","uploadUrl","uploadMethod","uploadFieldName","defaultExtension","jsonFieldName","allowedTypes","progressText","urlText","errorText","extraParams","extraHeaders","beforeFileUpload","onFileReceived","onFileUploadResponse","onFileUploadError","onFileUploaded","uploadFile","me","formData","FormData","xhr","extension","defualtExtension","setupFormData","fileNameMatches","remoteFilename","Date","now","append","key","setRequestHeader","isFileAllowed","kind","JSON","parse","newValue","onFileInserted","items","clipboardData","files","item","getAsFile","dataTransfer","$","jquery","$this","fn","inlineattachment","each","ed","bind","originalEvent","Editor","jQuery","tabAndIndentMarkdownList","indentWithTabs","spaces","Array","tabSize","shiftTabAndUnindentMarkdownList","root","newline","fences","noop","heading","nptable","blockquote","html","def","table","lheading","paragraph","Lexer","tokens","links","marked","rules","normal","gfm","tables","_label","_title","edit","getRegex","source","_tag","lex","src","top","loose","cap","bull","b","space","tag","l","isordered","pedantic","lang","split","align","cells","ordered","smartLists","sanitize","pre","sanitizer","href","title","Error","charCodeAt","escape","autolink","url","link","reflink","nolink","br","del","InlineLexer","renderer","Renderer","breaks","TextRenderer","Parser","encode","unescape","_","n","fromCharCode","opt","resolveUrl","baseUrls","_scheme","_email","_inside","_href","_backpedal","output","out","mangle","inLink","outputLink","codespan","trim","smartypants","random","toString","escaped","highlight","langPrefix","level","raw","headerPrefix","xhtml","body","listitem","tablerow","content","tablecell","flags","prot","decodeURIComponent","baseUrl","originIndependentUrl","inlineText","tok","parseText","row","cell","target","Object","callback","pending","done","err","message","silent","setOptions","lexer","inlineLexer","g","dictionary","affData","wordsData","dictionaryTable","compoundRules","compoundRuleCodes","replacementTable","memoized","loaded","path","_len","_jlen","self","readDataFile","setFunc","response","_readFile","asyncLoad","then","setAffData","setup","setWordsData","_parseAFF","rule","ONLYINCOMPOUND","_parseDIC","ruleText","expressionText","character","loadedCallback","chrome","dictionaryPath","getURL","__dirname","load","charset","async","promise","req","Promise","resolve","reject","statusText","onerror","overrideMimeType","fs","existsSync","readFileSync","numEntries","lineParts","lines","_removeAffixComments","definitionParts","ruleType","ruleCode","combineable","entries","charactersToRemove","additionParts","charactersToAdd","continuationClasses","parseRuleCodes","regexToMatch","entry","add","remove","_removeDicComments","addWord","parts","ruleCodesArray","NEEDAFFIX","newWords","_applyRule","ii","_iilen","newWord","combineCode","combineRule","otherNewWords","iii","_iiilen","textCodes","FLAG","substr","continuationRule","concat","aWord","trimmedWord","checkExact","toUpperCase","capitalizedWord","hasFlag","uncapitalizedWord","ruleCodes","COMPOUNDMIN","flag","wordFlags","alphabet","suggest","limit","memoizedLimit","replacementEntry","correctedWord","edits1","words","known_only","_edit","rv","alphabetLength","lettercase","replacementLetter","ed1","weighted_corrections","ed1word","sorted_corrections","sort","a","a_val","b_val","localeCompare","capitalization_scheme","working_limit","correct"],"sourceRoot":""}