{"version":3,"file":"main.js","mappings":"iOAOO,IAAMA,GAAkB,MAAzB,MAAOA,EAEXC,cAAgB,CAEhBC,WACA,EALWF,SAAkB,oCAAlBA,EAAkB,EAAlBA,EAAkB,sBAAlBA,EAAkBG,+TCP/BC,iBAAuB,UAAvBA,CAAuB,UAEQA,uBAAUA,QAErCA,iBAA+B,aAA/BA,CAA+B,YAEnBA,4BAAgBA,QACxBA,kBAAQA,4BAAgBA,QACxBA,mBAAQA,4CAA+BA,QACvCA,mBAAQA,iCAAoBA,UAG9BA,oBAAwC,WAAxCA,CAAwC,QAAxCA,CAAwC,WAGpBA,mBAAMA,QACtBA,iBAAgBA,uBAAUA,QAC1BA,iBAAgBA,uBAAUA,QAC1BA,iBAAgBA,uBAAUA,QAC1BA,iBAAgBA,uBAAUA,QAC1BA,iBAAgBA,uBAAUA,QAC1BA,iBAAgBA,uBAAUA,QAC1BA,iBAAgBA,uBAAUA,QAC1BA,iBAAgBA,uBAAUA,QAC1BA,iBAAgBA,uBAAUA,QAC1BA,iBAAgBA,uBAAUA,QAC1BA,iBAAgBA,uBAAUA,YAG5BA,kBAAO,QAAPA,CAAO,UAAPA,CAAO,UAGeA,gBAAGA,UAEvBA,eAAIA,eAAEA,QACNA,eAAIA,eAAEA,QACNA,eAAIA,eAAEA,QACNA,eAAIA,eAAEA,QACNA,eAAIA,eAAEA,QACNA,eAAIA,eAAEA,QACNA,eAAIA,eAAEA,QACNA,eAAIA,eAAEA,QACNA,eAAIA,eAAEA,QACNA,eAAIA,eAAEA,QACNA,eAAIA,eAAEA,UAERA,eAAI,UAAJA,CAAI,UAEkBA,qBAAQA,UAE5BA,eAAIA,eAAEA,QACNA,eAAIA,eAAEA,QACNA,eAAIA,eAAEA,QACNA,eAAIA,eAAEA,QACNA,eAAIA,eAAEA,QACNA,eAAIA,eAAEA,QACNA,eAAIA,eAAEA,QACNA,eAAIA,eAAEA,QACNA,eAAIA,eAAEA,QACNA,eAAIA,eAAEA,QACNA,eAAIA,eAAEA,UAERA,eAAI,UAAJA,CAAI,UAEkBA,2BAAcA,UAElCA,eAAIA,eAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,UAERA,gBAAI,WAAJA,CAAI,WAEkBA,wBAAUA,UAE9BA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,UAERA,gBAAI,WAAJA,CAAI,WAEkBA,uBAASA,UAE7BA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,UAGRA,gBAAI,WAAJA,CAAI,WAEkBA,2BAAaA,UAEjCA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,UAGRA,gBAAI,WAAJA,CAAI,WAEkBA,iBAAGA,UAEvBA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,UAGRA,gBAAI,WAAJA,CAAI,WAEkBA,qBAAOA,UAE3BA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,UAGRA,gBAAI,WAAJA,CAAI,WAEkBA,6BAAeA,UAEnCA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,UAERA,gBAAI,WAAJA,CAAI,WAEkBA,wBAAUA,UAE9BA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,UAGRA,gBAAI,WAAJA,CAAI,WAEkBA,2BAAaA,UAEjCA,gBAAS,SAATA,CAAS,SAATA,CAAS,SAATA,CAAS,SAATA,CAAS,SAATA,CAAS,SAATA,CAAS,UAQTA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,UAGRA,gBAAI,WAAJA,CAAI,WAEkBA,qBAAOA,UAE3BA,gBAAS,SAATA,CAAS,SAATA,CAAS,SAATA,CAAS,SAATA,CAAS,SAATA,CAAS,SAATA,CAAS,UAQTA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,QACNA,gBAAIA,gBAAEA,sDD3NHJ,CAAkB,uCELxB,MAAMK,UAGF,qCAMPC,cAAiC,qDCoQnCF,iBAAmE,UAAnEA,CAAmE,YAExBA,sBAAUA,uCAa7CA,aACEA,SACAA,gBAGEA,SAAyBA,oCAJ3BA,8DAEEA,oFAEAA,kEAPNA,SACEA,cAAKA,SAAiBA,QACtBA,uBAOFA,wCAROA,8BACkBA,6DAH3BA,SACEA,kCAUFA,sDAViBA,+DAFnBA,kBACEA,sDAYFA,+BAZqCA,mFAPvCA,iBAAiD,UACDA,oBAAOA,QACrDA,eAA2BA,8QAEyCA,QACpEA,cACAA,wBAeFA,8BAfwBA,kCC9QnB,IAAMG,GAAiB,MAAxB,MAAOA,EAOXN,YACUO,eANVC,cAAmB,EACnBA,eAAmB,GACnBA,UAAiB,GACjBA,sBAAqD,CAAC,mBAAoB,GAItE,CAEJP,WACEO,KAAKC,SAAU,EAEfD,KAAKD,KAAKG,IADgB,GAAGN,8BACSO,UAAUC,IAC9CJ,KAAKK,UAAYD,EAAME,KAEvBN,KAAKO,KAAO,GACZC,YAAUR,KAAKK,UAAYI,IACpBT,KAAKO,KAAKG,SAASD,EAAEE,gBAOxBX,KAAKY,iBAAiBH,EAAEE,gBAAgBE,KAAKJ,IAN7CT,KAAKO,KAAKM,KAAKJ,EAAEE,gBACjBG,QAAQC,IAAIN,EAAEE,gBAEdX,KAAKY,iBAAiBH,EAAEE,gBAAkB,CAACF,GAAC,GAMhDK,QAAQC,IAAIf,KAAKO,MACjBO,QAAQC,IAAIf,KAAKY,kBACjBZ,KAAKC,SAAU,GAEnB,EAjCWH,SAAiB,oCAAjBA,GAAiBkB,cAAjBlB,EAAiB,sBAAjBA,EAAiBJ,goBDkQ9BC,iBACEA,wBAKAA,wBAsBFA,eA3BQA,iCAKAA,44CCxQKG,CAAiB,KCTjBmB,GAAQ,MAAf,MAAOA,EACXC,UAAUd,GACR,OAAKA,EACEe,OAAOC,KAAKhB,GADA,IAErB,EAJWa,SAAQ,oCAARA,EAAQ,EAARA,EAAQ,mCAARA,EAAQI,UAARJ,CAAQ,KCARK,GAAO,MAAd,MAAOA,EACXJ,UAAUd,GACR,OAAGA,EACU,SAARA,EACM,QAEO,YAARA,EACC,WAEO,UAARA,EACC,SAEO,mBAARA,EACC,kBAEO,gBAARA,EACC,eAEO,gBAARA,EACC,eAEO,kBAARA,EACC,iBAEO,kBAARA,EACC,iBAED,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,OAAOM,SAASN,GACnDA,EAGAA,EAEJmB,QAAQ,WAAY,OAEpBA,QAAQ,KAAM,SAASC,GAAM,OAAOA,EAAIC,aAAe,GAGvD,IACT,EAvCWH,SAAO,oCAAPA,EAAO,EAAPA,EAAO,kCAAPA,EAAOD,UAAPC,CAAO,+BCOZ3B,kBACEA,oBACAA,oBAA4CA,wBAAeA,8CADXA,uBAAU,oBAAVA,CAAU,0BAC1BA,wBAAYA,wDAMhDA,kBAAuE,UACrCA,SACiEA,gCADjEA,mOAKhCA,wCACAA,cACEA,SAEFA,kDAFEA,sQAMAA,gBACEA,SACFA,wCAFgDA,gCAA0B,6BACxEA,0DAGAA,gBACEA,SACFA,wCAFGA,0BACDA,0DAKJA,mBAGEA,wBACFA,6CAHMA,uEACAA,iIACJA,gEAtBNA,kBACEA,wBACAA,wBAMAA,cACEA,uBAGAA,4CAKFA,QACAA,eACEA,0BAKFA,yDAvBKA,4DACAA,4DAOCA,qCAAwB,cAUNA,kCCjCzB,IAAM+B,GAAkB,MAAzB,MAAOA,EAiFXlC,YACUmC,sBAhFV3B,iBAAmB,CACjB4B,aAAa,EACbC,SAAS,EACTC,iBAAiB,EACjBC,UAAU,EACVC,OAAO,EACPC,KAAK,EACLC,iBAAiB,EACjBC,QAAQ,EACRC,KAAK,EACLC,KAAK,EACLC,cAAc,EACdC,mBAAmB,EACnBC,gBAAgB,EAChBC,cAAc,EACdC,SAAS,EACTC,gBAAgB,EAChBC,gBAAgB,EAChBC,iBAAiB,EACjBC,gBAAgB,EAChBC,MAAM,EACNC,OAAO,EACPC,UAAU,EACVC,kBAAkB,EAClBC,YAAY,EACZC,aAAa,EACbC,KAAK,EACLC,mBAAmB,EACnBC,YAAY,EACZC,kBAAkB,EAClBC,gBAAgB,EAChBC,YAAY,EACZC,mBAAmB,EACnBC,eAAe,EACfC,eAAe,EACfC,WAAW,EACXC,OAAO,EACPC,eAAe,EACfC,KAAK,EACLC,eAAe,EACfC,wBAAwB,EACxBC,KAAK,GAGPpE,WAAQ,CACN,CAACqE,YAAa,CAACC,KAAM,OAAQC,KAAM,8BAA+BC,KAAM,CAAC,MAAO,kBAAmB,eAAgB,UAAW,iBAAkB,iBAAkB,OAAQ,QAAS,iBAAkBC,MAAO,EAAGC,WAAY,qBAC3N,CAACL,YAAa,CAACC,KAAM,WAAYC,KAAM,UAAWC,KAAM,CAAC,eAAgB,oBAAqB,iBAAkB,qBAAsBC,MAAO,EAAGC,WAAY,WAC5J,CAACL,YAAa,CAACC,KAAM,YAAaC,KAAM,WAAYC,KAAM,CAAC,eAAgB,oBAAqB,kBAAmBC,MAAO,EAAGC,WAAY,YACzI,CAACL,YAAa,CAACC,KAAM,QAASC,KAAM,OAAQC,KAAM,CAAC,iBAAkB,gBAAiB,gBAAiB,UAAWC,MAAO,EAAGC,WAAY,UACxI,CAACL,YAAa,CAACC,KAAM,YAAaC,KAAM,6BAA8BC,KAAM,CAAC,kBAAmB,SAAU,MAAO,oBAAqB,eAAgB,UAAW,iBAAkB,iBAAkB,OAAQ,aAAc,SAAUC,MAAO,EAAGC,WAAY,WAC3P,CAACL,YAAa,CAACC,KAAM,aAAcC,KAAM,4BAA6BC,KAAM,CAAC,SAAS,aAAc,OAAQC,MAAO,EAAGC,WAAY,WAClI,CAACC,IAAK,+BAAgCJ,KAAM,8BAA+BC,KAAM,CAAC,UAAW,kBAAmB,MAAO,eAAgB,UAAW,iBAAkB,QAAS,SAAUC,MAAO,EAAGC,WAAY,UAC7M,CAACC,IAAK,+BAAgCJ,KAAM,oCAAqCC,KAAM,CAAC,WAAY,QAAS,UAAW,kBAAkB,kBAAmBC,MAAO,EAAGC,WAAY,UACnL,CAACC,IAAK,qCAAsCJ,KAAM,gCAAiCC,KAAM,CAAC,gBAAiBC,MAAO,EAAGC,WAAY,UACjI,CAACC,IAAK,mCAAoCJ,KAAM,aAAcC,KAAM,CAAE,cAAe,WAAY,QAAS,oBAAqB,UAAW,kBAAmB,iBAAkB,OAASC,MAAO,EAAGC,WAAY,UAC9M,CAACC,IAAK,oCAAqCJ,KAAM,uBAAwBC,KAAO,CAAC,kBAAmB,iBAAkB,aAAc,qBAAsBC,MAAO,EAAGC,WAAY,UAChL,CAACC,IAAK,iCAAkCJ,KAAM,WAAYC,KAAM,CAAE,cAAe,WAAY,QAAS,oBAAqB,UAAW,kBAAmB,iBAAkB,OAAQC,MAAO,EAAGC,WAAY,UACzM,CAACC,IAAK,kCAAmCJ,KAAM,YAAaC,KAAM,CAAE,kBAAmB,MAAO,MAAO,UAAW,iBAAkB,OAAQ,QAAS,aAAc,SAAUC,MAAO,EAAGC,WAAY,UACjM,CAACC,IAAK,wCAAyCJ,KAAM,kBAAmBC,KAAM,CAAC,kBAAmB,iBAAmB,iBAAkB,OAAQ,QAAS,QAAU,0BAA2BC,MAAO,EAAGC,WAAY,UACnN,CAACC,IAAK,kCAAmCJ,KAAM,YAAaC,KAAM,CAAC,cAAe,iBAAkB,OAAQ,WAAY,mBAAoB,mBAAmB,MAAO,MAAO,SAAUC,MAAO,EAAGC,WAAY,UAC7M,CAACC,IAAK,8BAA+BJ,KAAM,QAASC,KAAM,CAAC,cAAe,WAAY,MAAO,QAAS,oBAAqB,WAAY,MAAO,MAAM,SAAUC,MAAO,EAAGC,WAAY,UACpL,CAACC,IAAK,yCAA0CJ,KAAM,mBAAoBC,KAAM,CAAE,oBAAqB,UAAW,iBAAkB,WAAY,qBAAsBC,MAAO,EAAGC,WAAY,UAC5L,CAACC,IAAK,8BAA+BJ,KAAM,QAASC,KAAM,CAAC,WAAY,iBAAkB,OAAQ,QAAS,oBAAqB,SAAUC,MAAO,EAAGC,WAAY,UAC/J,CAACC,IAAK,+BAAgCJ,KAAM,UAAWC,KAAM,CAAC,SAAU,MAAO,UAAW,OAAQ,QAAS,gBAAiB,MAAO,iBAAkBC,MAAO,EAAGC,WAAY,UAC3K,CAACC,IAAK,kCAAmCJ,KAAM,YAAaC,KAAM,CAAC,MAAO,MAAO,QAAS,OAAQC,MAAO,EAAGC,WAAY,UACxH,CAACC,IAAK,8CAA+CJ,KAAM,wBAAyBC,KAAM,CAAC,QAAS,oBAAqB,UAAW,cAAe,gBAAiB,SAAUC,MAAO,EAAGC,WAAY,UACpM,CAACC,IAAK,iCAAkCJ,KAAM,WAAYC,KAAM,CAAC,cAAc,QAAS,MAAO,OAAQ,QAAS,MAAO,QAAS,OAAQC,MAAO,EAAGC,WAAY,UAC9J,CAACC,IAAK,kCAAmCJ,KAAM,gCAAiCC,KAAM,CAAC,aAAcC,MAAO,EAAGC,WAAY,WAG7H1E,iBAAmB,GAEnBA,mBAAuB,GACvBA,kBAAyB,GACzBA,uBAA8B,GAC9BA,4BAAgC,EAM5B,CAEJP,WACEO,KAAK4E,cAAgB5E,KAAK2B,YAAYkD,MAAM7E,KAAK8E,aAEjD,MAAMC,EAAa/E,KAAKgF,MAAMC,MAAM,EAAG,GACjCC,EAAclF,KAAKgF,MAAMC,MAAM,GAErCjF,KAAKmF,YAAcJ,EAAWK,OAAO5E,YAAU0E,EAAa,SAE5DlF,KAAKqF,uBAAyB7E,YAAUA,WAASA,YAAUR,KAAKmF,YAAa,UAC7ErE,QAAQC,IAAIf,KAAKqF,wBACjBrF,KAAKsF,UACP,CAEAA,WAIEtF,KAAK4E,cAAcW,aAAapF,UAAUqF,IAexC,GAdA1E,QAAQC,IAAIyE,GAEZxF,KAAKyF,cAAgB,GACrBzF,KAAKmF,YAAc,GACnBnF,KAAK0F,kBAAoB,GAEzB1F,KAAK2F,aAAenF,SAAOA,WAASgF,EAAK,CAACI,EAAQC,KACtC,IAAND,EACKC,EAEF,OAET/E,QAAQC,IAAIf,KAAK2F,cAEe,IAA7B3F,KAAK2F,aAAaG,OAAc,CACjC,MAAMf,EAAa/E,KAAKgF,MAAMC,MAAM,EAAG,GACjCC,EAAclF,KAAKgF,MAAMC,MAAM,EAAG,IAGxC,YADAjF,KAAKmF,YAAcJ,EAAWK,OAAO5E,YAAU0E,EAAa,SAC5D,CAGF,MAAMa,EAA8B,GAEpCvF,YAAUR,KAAK2F,aAAeK,IAC5BlF,QAAQC,IAAIiF,GACZxF,YAAUR,KAAKgF,MAAQV,IACjBA,EAAKE,KAAK9D,SAASsF,IACrBD,EAAkBlF,KAAKyD,EAAKC,KAAI,EAEnC,GAGHzD,QAAQC,IAAIgF,GAEZ/F,KAAKyF,cAAgBjF,WAASA,YAAUuF,IAAoBE,IAAIC,KAAO3B,KAAM2B,EAAE,GAAIzB,MAAOyB,EAAEJ,UAE5FtF,YAAUR,KAAKgF,MAAQV,IACrB9D,YAAUR,KAAKyF,cAAgBU,IACzB7B,EAAKC,OAAS4B,EAAK5B,OACrBD,EAAKG,MAAQ0B,EAAK1B,MAClBzE,KAAKmF,YAAYtE,KAAKyD,GAAI,EAE7B,GAEHtE,KAAKmF,YAAc3E,YAAUR,KAAKmF,YAAa,QAAS,QACxD,IAAIiB,EAAYpG,KAAKmF,YAAY,GAAGV,MAAQ,EAC5CzE,KAAK0F,kBAAkB7E,KAAKb,KAAKmF,YAAY,GAAGZ,MAC/C/D,YAAUR,KAAKmF,YAAcb,IACzBA,EAAKG,QAAU2B,IAChBA,GAAa,EACbpG,KAAK0F,kBAAkB7E,KAAKyD,EAAKC,MAAI,GAIzCvE,KAAKqF,uBAAyB7E,YAAUA,WAASA,YAAUR,KAAKmF,YAAa,UAAS,EAS1F,CAEAkB,gBAAgBC,GAIdtG,KAAK4E,cAAc2B,QACnBvG,KAAK2F,aAAe,GACpB3F,KAAK0F,kBAAoB,GACzB1F,KAAKyF,cAAgB,GAErB,MAAMV,EAAa/E,KAAKgF,MAAMC,MAAM,EAAG,GACjCC,EAAclF,KAAKgF,MAAMC,MAAM,EAAG,IACxCjF,KAAKmF,YAAcJ,EAAWK,OAAO5E,YAAU0E,EAAa,QAC9D,EArLWxD,SAAkB,oCAAlBA,GAAkBV,cAAlBU,EAAkB,sBAAlBA,EAAkBhC,q4BDT/BC,iBAAiD,UAAjDA,CAAiD,UAAjDA,CAAiD,UAAjDA,CAAiD,OAItCA,gBAAIA,QACPA,oBAA2EA,iCAAS6G,oBAAuB,GACzG7G,mBACFA,UAEFA,kBACEA,yCAIFA,UAGFA,kBACEA,yBAKAA,yBA2BAA,eAEAA,cAAIA,0CAA4BA,qBA/CWA,kDAIrCA,4CACoCA,oDAQCA,8CAKrBA,+nDCdf+B,CAAkB,KCFlB+E,GAAyB,MAAhC,MAAOA,EAEXjH,cAAgB,CAEhBC,WACA,EALWgH,SAAyB,oCAAzBA,EAAyB,EAAzBA,EAAyB,sBAAzBA,EAAyB/G,6vFCPtCC,iBAAwD,UAAxDA,CAAwD,UAENA,mDAAsCA,QACpFA,iBAAuC,OAEnCA,6iBAMFA,UAEFA,gBAA8CA,sCAAyBA,QACvEA,iBAAuC,YAEnCA,0BAEEA,mBAEFA,QACAA,yBACEA,4BACFA,UAEFA,+CACAA,eAAI,SAEAA,mGACFA,QACAA,eACEA,kDACFA,QACAA,eACEA,mFACFA,QACAA,eACEA,6FACFA,YAIJA,kBAAuC,YAEnCA,0BACEA,mBACFA,QACAA,yBACEA,4BACFA,UAEFA,iMAEFA,QAEAA,kBAAuC,YAEnCA,2BAEEA,oBAEFA,QACAA,yBACEA,0BACFA,UAEFA,oPAGFA,QAEAA,kBAAuC,YAEnCA,2BAEEA,oBAC2M,cAG7MA,QACAA,yBACEA,yBACFA,UAEFA,sGACFA,QAEAA,kBAAuC,YAEnCA,2BAEEA,oBAC+I,cAGjJA,QACAA,yBACEA,+BACFA,UAEFA,2QAEFA,QAEAA,kBAAuC,YAEnCA,2BAEEA,oBAA8F,cAEhGA,QACAA,yBACEA,yBACFA,UAEFA,sHACFA,4FD7GS8G,CAAyB,wEEJ/B,MAAMC,GAAkC,CAC7CC,aAAc,EACdC,WAAY,aACZC,WAAY,OACZC,mBAAoB,8BACpBC,iBAAkB,GAElBC,YAAa,CAAC,CAACC,MAAO,gBAAiBC,QAAS,KAChDC,eAAgB,CAACC,OAAQ,GAAIC,SAAU,KAG5BC,GAA0B,CACrCX,aAAc,EACdC,WAAY,aACZC,WAAY,UACZC,mBAAoB,UACpBC,iBAAkB,GAElBC,YAAa,CAAC,CAACC,MAAO,gBAAiBC,QAAS,KAChDC,eAAgB,CAACC,OAAQ,GAAIC,SAAU,KAG5BE,GAA2B,CACtCZ,aAAc,EACdC,WAAY,aACZC,WAAY,WACZC,mBAAoB,WACpBC,iBAAkB,GAElBC,YAAa,CAAC,CAACC,MAAO,gBAAiBC,QAAS,KAChDC,eAAgB,CAACC,OAAQ,GAAIC,SAAU,KAG5BG,GAAuB,CAClCb,aAAc,EACdC,WAAY,aACZC,WAAY,OACZC,mBAAoB,OACpBC,iBAAkB,GAElBC,YAAa,CAAC,CAACC,MAAO,gBAAiBC,QAAS,IAAK,CAACD,MAAO,6BAA8BC,QAAS,KACpGC,eAAgB,CAACC,OAAQ,GAAIC,SAAU,KAG5BI,GAA2C,CACtDd,aAAc,EACdC,WAAY,aACZC,WAAY,6BACZC,mBAAoB,6BACpBC,iBAAkB,GAClBC,YAAa,CAAC,CAACC,MAAO,gBAAiBC,QAAS,KAEhDC,eAAgB,CAACC,OAAQ,GAAIC,SAAU,KAG5BK,GAA0C,CACrDf,aAAc,EACdC,WAAY,aACZC,WAAY,SACZC,mBAAoB,4BACpBC,iBAAkB,GAClBC,YAAa,CAAC,CAACC,MAAO,iBAAkBC,QAAS,IAAK,CAACD,MAAO,UAAWC,QAAS,KAClFC,eAAgB,CAACC,OAAQ,GAAIC,SAAU,KAK5BM,GAAgC,CAC3CpD,KAAM,oBACNqD,UAAW,OACX3H,SAAS,EACT4H,WAAW,EACXC,oBAAgBC,EAChBC,UAAU,GAGCC,GAAwB,CACnC1D,KAAM,UACNqD,UAAW,UACX3H,SAAS,EACT4H,WAAW,EACXC,oBAAgBC,EAChBC,UAAU,GAGCE,GAAyB,CACpC3D,KAAM,WACNqD,UAAW,WACX3H,SAAS,EACT4H,WAAW,EACXC,oBAAgBC,EAChBC,UAAU,GAGCG,GAAqB,CAChC5D,KAAM,OACNqD,UAAW,OACX3H,SAAS,EACT4H,WAAW,EACXC,oBAAgBC,EAChBC,UAAU,GAGCI,GAAyC,CACpD7D,KAAM,6BACNqD,UAAW,6BACX3H,SAAS,EACT4H,WAAW,EACXC,oBAAgBC,EAChBC,UAAU,GAGCK,GAAwC,CACnD9D,KAAM,4BACNqD,UAAW,SACX3H,SAAS,EACT4H,WAAW,EACXC,oBAAgBC,EAChBC,UAAU,GAKCM,GAAa,CACxBC,YAAe,GACfC,gBAAmB,CAAC,EAAG,GACvBC,OAAU,iaCjIN,SAAUC,EAAQlH,GAEtB,MAAO,iBAAiBmH,KAAKnH,EAC/B,CAEM,SAAUoH,GAAapH,GAC3B,IACEqH,KAAKC,MAAMtH,SAEX,OAAO,EAET,OAAO,CACT,CAEM,SAAUuH,GAAMvH,GAIpB,OAAIA,GACGA,EAAID,QAAQ,QAAS,GAC9B,CCpBM,SAAUyH,EAAYxH,EAAayH,GAEvC,OAAOzH,EAAIsE,QAAUmD,CACvB,2BCAM,MAAOC,GAGGC,YACZ,OAAOnJ,KAAKoJ,OAAOC,UACrB,CAEA7J,YAAY8J,GACVtJ,KAAKoJ,OAAS,IAAIG,KAAmBD,EACvC,CAEUE,OAAUC,GAClB,OAAOzJ,KAAKoJ,OAAOM,eAAeC,QAChC1D,MAAKkD,GAAaM,EAAMN,KAAM,EAC9BS,QAEJ,CAEUC,SAASC,GACjB9J,KAAKoJ,OAAOW,KAAK,IACZ/J,KAAKmJ,SACLW,GAEP,ECjBF,MAAME,GAAU,GAAGpK,4BACbqK,GAAwB,GAAGrK,iCAElB,IAAIsK,KAKZ,IAAMC,EAAe,MAAtB,MAAOA,EAIAC,wBACT,OAAOpK,KAAKqK,mBAAmBX,cACjC,CAGAlK,YAAoBO,eAPbC,wBAAsB,IAAIuJ,KAAgB,GAQjD,CAEAe,aAAahK,GAIXQ,eAAQC,IAAI8H,KAAK0B,UAAUjK,EAAM,KAAM,IAChCN,KAAKD,KAAKyK,KAAKR,GAAS1J,GAC5BqJ,QACCc,KAAKC,OAIX,CAEAC,YAAYC,EAAoBtK,GAI9BQ,eAAQC,IAAI8H,KAAK0B,UAAUjK,EAAM,KAAM,IAChCN,KAAKD,KAAK8K,IAAI,GAAGb,MAAWY,IAActK,GAC9CqJ,QACCc,KAAKC,OAIX,CAEAI,YAAYF,GAkCV,OAAO5K,KAAKD,KAAKG,IAAI,GAAG8J,MAAWY,4BAChCjB,QACCc,KAAKC,IACH5J,QAAQC,IAAI2J,EAAI,GAGxB,CAEAK,gBAAgBC,GAgEd,OAAOhL,KAAKD,KAAKG,IAAI,GAAG+J,MAAyBe,KAC9CrB,QACCc,KAAKC,IACH5J,QAAQC,IAAI2J,EAAI,GAGxB,CAEAO,WAAWC,GACTpK,eAAQC,IAAImK,GACLlL,KAAKD,KAAKG,IAASgL,EAC5B,CAGAC,iBAAkBC,GAEhB,MAAMC,EAAkB7K,MAAM4K,EAAUlL,IAAI,YAAYE,MAAOkL,GAAUA,EAAOC,OAAOC,KAAK,KAAKjK,QAAQ,MAAO,IAC1GkK,EAAiBL,EAAUlL,IAAI,kBAAkBE,MAOvD,MAAO,CACLsL,QAASL,EAETM,qBAAsBF,EAAiB,KALZL,EAAUhL,MAAMwL,cAM3CC,WARiBT,EAAUhL,MAAM0L,iBAUrC,CAEAC,mBAAoBC,GAElB,MAAMC,EAAYD,EAAYE,cAAcD,UAE5C,IAAIE,EAAcH,EAAYE,cAAcN,cAAc,GAC1DO,EAA8B,IAAhBA,EAAoB,EAAIA,EAEtC,IAAIC,EAAcJ,EAAYE,cAAcN,cAAc,GAK1D,OAJAQ,EAA8B,KAAhBA,EAAqB,EAAIA,EAIhC,CACLC,qBAAwBJ,EACxBN,qBAAwB,CAACQ,EAAYC,GACrCP,WAAc,CACZ,CACES,KAAQ,UACRC,OAROP,EAAYE,cAAcK,SAYzC,CAEAC,oBAAqBC,GAEnB,MAAMC,EAAWD,EAAKP,cAAcQ,SAEpC,IAAIC,EAAaF,EAAKP,cAAcU,UAMpC,MAAO,CACLF,WACAG,SANaJ,EAAKP,cAAcW,SAOhCF,aACAG,2BAN+BL,EAAKP,cAAcY,2BAQtD,CAEAC,gBAAiBN,GAQf,MAAO,CACLO,OAPaP,EAAKP,cAAcc,OAQhCC,WANeR,EAAKP,cAAce,WAOlCC,WALeT,EAAKP,cAAcgB,WAOtC,CAEAC,mBAAmBV,GAMjB,MAAO,CACLf,QALsBlL,MAAMiM,EAAKvM,IAAI,YAAYE,MAAOkL,GAAUA,EAAOC,OAAOC,KAAK,KAAKjK,QAAQ,MAAO,IAMzGsK,WAJiBY,EAAKrM,MAAM0L,iBAMhC,CAEAsB,kBAAkBX,GAEhB,MAAMY,EAAiBZ,EAAKP,cAAcN,cAE1C,IAAI0B,EAA6Bb,EAAKP,cAAcqB,yBAEhDC,EAA6Bf,EAAKP,cAAcuB,yBAEhDC,EAAqBjB,EAAKP,cAAcyB,kBAExCC,EAAyBnB,EAAKP,cAAc2B,qBAGhD,OAD8BpB,EAAKP,cAC5B,CACLmB,iBACAC,6BACAE,6BACAE,qBACAE,yBACAE,wBAAyB,GACzBC,iBAAoB,SAExB,EA3QW5D,SAAe,oCAAfA,GAAenJ,cAAfmJ,EAAe,wBAAfA,EAAe6D,QAAf7D,EAAe,qBAFd,SAEDA,CAAe,KCyC5B,MAAMb,GAA8B,CAClCf,YAAa,GACb0F,iBAAkB,GAClBC,kBAAmB,GAEnB1F,gBAAiB,CAAC,EAAG,GACrBC,OAAQ,GACRzD,MAAO,GACPmJ,OAAQ,CACN5F,YAAa,GACbC,gBAAiB,CAAC,EAAG,GACrBC,OAAQ,KAOL,IAAM2F,EAAqB,MAA5B,MAAOA,UAA6BlF,GAUxC1J,YACU6O,GAERC,MAAMhF,IAFEtJ,wBATVA,aAA+BA,KAAKwJ,OAAOL,GAASA,EAAMV,QAC1DzI,YAA6BA,KAAKwJ,OAAOL,GAASA,EAAMnE,OACxDhF,iBAAkCA,KAAKwJ,OAAOL,GAASA,EAAMZ,aAC7DvI,qBAAsCA,KAAKwJ,OAAOL,GAASA,EAAM8E,kBACjEjO,wBAAqDA,KAAKwJ,OAAOL,GAASA,EAAM+E,mBAChFlO,mBAAgDA,KAAKwJ,OAAOL,GAASA,EAAMoF,cAC3EvO,aAAsCA,KAAKwJ,OAAOL,GAASA,EAAMgF,QAM/DnO,KAAKwO,QAAQrO,UAAUC,IAErBU,QAAQC,IAAIX,GACS,IAAjBA,EAAM0F,QACR9F,KAAK6J,SAAS,CACZpB,OAAQ,CACN/B,KAEH,GAGL1G,KAAKyO,OAAOtO,UAAUC,IAEpBU,QAAQC,IAAIX,GACS,IAAjBA,EAAM0F,QACR9F,KAAK6J,SAAS,CACZ7E,MAAO,CACL2C,KAEH,EAGP,CAGA+G,UAAUP,GACRnO,KAAK6J,SAAS,CAACsE,UACjB,CAEAQ,cAAc/D,GACZ5K,KAAK6J,SAAS,CAACtB,YAAaqC,GAC9B,CAEAgE,kBAAkB5D,GAChBhL,KAAK6J,SAAS,CAACoE,iBAAkBjD,GACnC,CAEA6D,sBAAsBjE,GACpB,MAAMuD,EAAS,IAAInO,KAAKmJ,MAAMgF,QAC9BrN,QAAQC,IAAIoN,GACZA,EAAO5F,YAAcqC,EACrB5K,KAAK6J,SAAS,CAACsE,UACjB,CAEAW,kBAAkBrG,GAIhB,MAAM0F,EAAS,IAAInO,KAAKmJ,MAAMgF,QAC9BrN,QAAQC,IAAIoN,GACZA,EAAO1F,OAASA,EAChBzI,KAAK6J,SAAS,CAACsE,UACjB,CAGAY,iBAAiBC,GACf,MAAMb,EAAS,IAAInO,KAAKmJ,MAAMgF,QAC9BrN,QAAQC,IAAIoN,GACZA,EAAO1F,OAAO5H,KAAKmO,GACnBhP,KAAK6J,SAAS,CAACsE,UACjB,CAEAc,oBAAoBD,EAAcE,GAChC,MAAMf,EAAS,IAAInO,KAAKmJ,MAAMgF,QAC9B,IAAI1F,EAAS0F,EAAO1F,OACpBA,EAAOyG,GAASF,EAChBb,EAAO1F,OAASA,EAEhBzI,KAAK6J,SAAS,CAACsE,UACjB,CAEAgB,qBAAqBC,EAAoBlI,GAKvC,MAAMiH,EAAS,IAAInO,KAAKmJ,MAAMgF,QACxB1F,EAAS0F,EAAO1F,OACtB3H,QAAQC,IAAI0H,GACZ,MAAM4G,EAAY5G,EAAO2G,GACzBC,EAAUrI,YAAYE,QAAUA,EAChCuB,EAAO2G,GAAcC,EACrBlB,EAAO1F,OAASA,EAChBzI,KAAK6J,SAAS,CAACsE,UACjB,CAEAmB,qBACE,MAAMnB,EAAS,IAAInO,KAAKmJ,MAAMgF,QAC9B,IAAI1F,EAAS0F,EAAO1F,OAEpBA,EAAO8G,MAEPpB,EAAO1F,OAASA,EAChBzI,KAAK6J,SAAS,CAACsE,UACjB,CAMAqB,SAASR,GAIPhP,KAAK6J,SAAS,CACZpB,OAAQ,IAAIzI,KAAKmJ,MAAMV,OAAQuG,IAEnC,CAEAS,UAAUhH,GAIRzI,KAAK6J,SAAS,CACZpB,OAAQA,GAEZ,CAEAiH,gBAAgB/K,EAAauK,GAC3B,IAAIzG,EAAS,IAAIzI,KAAKmJ,MAAMV,QAC5BA,EAAOyG,GAAOhE,WAAavG,EAC3B8D,EAAOyG,GAAO/H,eAAgBE,SAAW,GACzCoB,EAAOyG,GAAO/H,eAAgBC,OAAS,GACvCpH,KAAK6J,SAAS,CACZpB,OAAQA,GAEZ,CAEAkH,gBAAgBX,GAIdhP,KAAK6J,SAAS,CACZpB,OAAQ,CAACuG,IAEb,CAEAY,YAAYZ,EAAcE,GACxB,IAAIzG,EAAS,IAAIzI,KAAKmJ,MAAMV,QAC5BA,EAAOyG,GAASF,EAChBhP,KAAK6J,SAAS,CAACpB,UACjB,CAEAoH,wBAAwB7I,EAAkBkI,GACxC,IAAIzG,EAAS,IAAIzI,KAAKmJ,MAAMV,QAC5BA,EAAOyG,GAAOlI,YAAcA,EAC5BhH,KAAK6J,SAAS,CAACpB,UACjB,CAEAqH,6BAA6B/I,EAAuBmI,GAClD,IAAIzG,EAAS,IAAIzI,KAAKmJ,MAAMV,QAC5BA,EAAOyG,GAAOnI,iBAAmBA,EACjC/G,KAAK6J,SAAS,CAACpB,UACjB,CAEAsH,WACE,IAAItH,EAAS,IAAIzI,KAAKmJ,MAAMV,QAC5BA,EAAO8G,MACPvP,KAAK6J,SAAS,CAACpB,UACjB,CAKAuH,SAAShL,GACPhF,KAAK6J,SAAS,CACZ7E,SAEJ,CAGAiL,eAAe3L,GACb,MAAM4L,EAAO/O,OAAOgP,OAAO,GAAI7L,GAI/BtE,KAAK6J,SAAS,CACZ7E,MAAO,CAACkL,IAEZ,CAEAE,WAAW9L,EAAY4K,GACrB,IAAIlK,EAAQ,IAAIhF,KAAKmJ,MAAMnE,OAC3BA,EAAMkK,GAAS5K,EACftE,KAAK6J,SAAS,CAAC7E,SACjB,CAEAqL,UACE,IAAIrL,EAAQ,IAAIhF,KAAKmJ,MAAMnE,OAC3BA,EAAMuK,MACNvP,KAAK6J,SAAS,CAAC7E,SACjB,CAEAsL,gBAAgBtI,EAAmBkH,GACjC,IAAIlK,EAAQ,IAAIhF,KAAKmJ,MAAMnE,OAC3B,MAAMuL,EAAWvL,EAAMkK,GACvBqB,EAASvI,SAAWA,EACpBhD,EAAMkK,GAASqB,EACfvQ,KAAK6J,SAAS,CAAC7E,SACjB,CAEAwL,eAAevQ,EAAkB4H,EAAoBqH,GACnD,IAAIlK,EAAQ,IAAIhF,KAAKmJ,MAAMnE,OAC3B,MAAMuL,EAAWvL,EAAMkK,GACvBqB,EAAStQ,QAAUA,EACnBsQ,EAAS1I,UAAYA,EACrB7C,EAAMkK,GAASqB,EACfvQ,KAAK6J,SAAS,CAAC7E,SACjB,CAEAyL,sBAAsB3I,EAAyBoH,GAC7C,IAAIlK,EAAQ,IAAIhF,KAAKmJ,MAAMnE,OAC3B,MAAMuL,EAAWvL,EAAMkK,GACvBqB,EAASzI,eAAiBA,EAC1B9C,EAAMkK,GAASqB,EACfvQ,KAAK6J,SAAS,CAAC7E,SACjB,CAEA0L,yBAAyBC,EAAqBzB,GAC5C,IAAIlK,EAAQ,IAAIhF,KAAKmJ,MAAMnE,OAC3BA,EAAMkK,GAAOyB,eAAiBA,EAC9B3Q,KAAK6J,SAAS,CAAC7E,SACjB,CAEA4L,qBAAqBxQ,GAInBJ,KAAK6J,SAAS,CAACqE,kBAAmB9N,GACpC,CACAyQ,gBAAgBzQ,GAIdJ,KAAK6J,SAAS,CAAC0E,aAAcnO,GAC/B,EAzPWgO,SAAqB,oCAArBA,GAAoBpN,WAApBoN,EAAqB,wBAArBA,EAAoBJ,QAApBI,EAAoB,qBAFnB,SAEDA,CAAqB,KCrElC,MAAM0C,GAAwB,GAAGlR,kCAE3BmR,GAAS,IAAI7G,KAKZ,IAAM8G,GAAmB,MAA1B,MAAOA,EAEXxR,YAAoBO,cAAoB,CAExCkR,OAAOC,GACL,GAAa,KAATA,EACF,SAAOC,MAAG,IAEZJ,GAAOK,IAAI,QAASF,GACpB,IAAIG,EAAqB,GAAGP,YAA+BI,gBAC3DpQ,eAAQC,IAAIsQ,GACLrR,KAAKD,KACTG,IAAImR,GAAoB1H,QACvB1D,MAAIqL,IAEFxQ,QAAQC,IAAIuQ,EAAS5F,SAEd4F,EAAS5F,UAGxB,EApBWsF,SAAmB,oCAAnBA,GAAmBhQ,cAAnBgQ,EAAmB,wBAAnBA,EAAmBhD,QAAnBgD,EAAmB,qBAFlB,SAEDA,CAAmB,KCThC,MAAMhH,GAAU,GAAGpK,iCAMZ,IAAM2R,GAAmB,MAA1B,MAAOA,EAEX/R,YAAoBO,cAAoB,CAExCyR,mBACE,OAAOxR,KAAKD,KAAKG,IAAI8J,GACvB,EANWuH,SAAmB,oCAAnBA,GAAmBvQ,cAAnBuQ,EAAmB,wBAAnBA,EAAmBvD,QAAnBuD,EAAmB,qBAHlB,SAGDA,CAAmB,KCNnBE,EAAmB,MAA1B,MAAOA,EAHbjS,cAKSQ,cAAqB,GACrBA,aAAU,GACVA,YAAS,eAEhB0R,IAAIC,EAAiBC,GACnB5R,KAAK6R,SAAShR,KAAK8Q,GACnB3R,KAAK2R,QAAUA,EACf3R,KAAK8R,OAASF,CAChB,CACAG,QACE/R,KAAK2R,QAAU,GACf3R,KAAK6R,SAAW,EAClB,CAEAG,iBACE,OAAIhS,KAAK6R,SAAS/L,OAAS,GAGpB,IACT,EArBW2L,SAAmB,oCAAnBA,EAAmB,EAAnBA,EAAmB,wBAAnBA,EAAmBzD,QAAnByD,EAAmB,qBAFlB,SAEDA,CAAmB,6ECLhC9R,iBAAmE,UAAnEA,CAAmE,SAO1DA,SAAwBA,kCAN1BA,4DAMEA,wCCAF,IAAMsS,EAAuB,MAA9B,MAAOA,EAEXzS,YAAmB0S,sBAAqC,CAExDzS,WACA,EALWwS,SAAuB,oCAAvBA,GAAuBjR,WAAvBiR,EAAuB,sBAAvBA,EAAuBvS,mMDPpCC,6BAAMA,0ECOOsS,CAAuB,KCKvBE,EAAqB,MAA5B,MAAOA,EAHb3S,cAMYQ,iBAAc,IAAIoS,MAGUC,WAAWC,GAC/CA,EAAIC,iBACJD,EAAIE,kBACJxS,KAAKyS,WAAY,CACnB,CAG8CC,YAAYJ,GACxDA,EAAIC,iBACJD,EAAIE,kBACJxS,KAAKyS,WAAY,CACnB,CAGyCE,OAAOL,GAC9CA,EAAIC,iBACJD,EAAIE,kBACJxS,KAAKyS,WAAY,EACjB,IAAIG,EAAQN,EAAIO,aAAaD,MACzBA,EAAM9M,OAAS,GACjB9F,KAAK8S,YAAYC,KAAKH,EAE1B,EA5BWT,SAAqB,oCAArBA,EAAqB,EAArBA,EAAqB,sBAArBA,EAAqBzS,4GAArB8G,eAAkB,kCAAlBA,gBAAmB,6BAAnBA,WAAc,6EAAd2L,CAAqB,kFCJxBxS,iBAAgD,UAG5CA,SACFA,oCAFoBA,mCAClBA,0EA8KAA,qBAEQA,qEAASA,yBAA2B,GAI1CA,0BAGEA,mBAAiF,aAGnFA,SAAM,sEAgBNA,iBACEA,SACFA,kCAF4CA,6BAC1CA,wEAFJA,cACEA,wBAGFA,+BAHyBA,uEAJzBA,eACEA,2CACFA,QACAA,8CAAKA,wEAOPA,kBAAiE,WAAjEA,CAAiE,aAEvBA,sBAAUA,qFAMhDA,gBACEA,+BACFA,cAFMA,0CA+LdA,kBAAiE,WAAjEA,CAAiE,aAEvBA,sBAAUA,sDAYpDA,iBAAwHA,SACtHA,qBAAkDA,4FAASA,mCAA2C,GAEtGA,SAAS,wCAH6GA,+BAE9GA,kEARdA,kBAA0F,WAMtFA,wBAKFA,iCALoBA,yEAwBhBA,wBAEEA,wFACFA,kDA3ERA,kBAA0B,WAEtBA,SACFA,QACAA,qBACQA,yDAASA,6BAAoB,GAErCA,UAGFA,kBAAwB,WAAxBA,CAAwB,WAAxBA,CAAwB,cAKhBA,2BACFA,UAEFA,kBAAsC,kBAO7BA,2EAAcA,2CAA4D,EAA1EA,CAA2E,+DAEnEA,gCAA6C,EAFrDA,CAA2E,6DAG1C,GAAIA,oBAA8B,GAAE,GAR5EA,UAaFA,mBACEA,0BAKFA,UAGFA,0BAaAA,mBAA0B,iBAA1BA,CAA0B,gBAE0BA,qEAASA,6BAAoC,GAElEA,6BAC3BA,QACAA,sBAGEA,2BAEEA,oBAAiF,cAGnFA,UAEFA,6CAMAA,2BAAuB,gBACgCA,qEAASA,8BAAqC,GACjGA,uCACFA,QACAA,sBAAoDA,8DAASqT,gCAAwBrT,gBAAoB,GACvGA,qBACFA,eAAS,qCAjFbA,6EAWSA,sCAQAA,wCAAuB,kCAAvBA,CAAuB,oCAAvBA,CAAuB,cAAvBA,CAAuB,uEAAvBA,CAAuB,iCAaxBA,mCAQJA,+CAoBMA,yEAwDdA,kBAA0B,WACuBA,+BAAmBA,QAClEA,qBAA2DA,2DAASA,gBAAe,eAAc,GACjGA,UAEFA,kBACEA,+BACFA,QACAA,wRCjeK,IAAMsT,GAAa,MAApB,MAAOA,EAyCXzT,YACUmC,EACAuR,EACAC,EACAC,EACAC,EACAC,EACAC,EACDrB,GAPClS,mBACAA,aACAA,gBACAA,oBACAA,qBACAA,gBACAA,4BACDA,oBA/CTA,gBAAa,GAAGJ,oBAEhBI,mBAAgB,IAEhBA,aAAS,EAETA,gBAAY,EACZA,mBAAe,EAEfA,eAAY,IAAIwT,KAAiB,IAGjCxT,qBAA4B,GAC5BA,kBAAyB,GAGzBA,mBAAuB,CACrB,sDAGFA,cAA0C,CACxC,CAACyT,MAAO,2DAA4D9O,IAAK,0DACzE,CAAC8O,MAAO,2DAA4D9O,IAAK,0DACzE,CAAC8O,MAAO,2DAA4D9O,IAAK,0DACzE,CAAC8O,MAAO,2DAA4D9O,IAAK,2DAG3E3E,WAAQ,CAEN,CAACqE,YAAa,CAACC,KAAM,WAAYC,KAAM,UAAWC,KAAM,CAAC,eAAgB,oBAAqB,iBAAkB,qBAAsBC,MAAO,EAAGC,WAAY,WAC5J,CAACL,YAAa,CAACC,KAAM,YAAaC,KAAM,WAAYC,KAAM,CAAC,eAAgB,oBAAqB,kBAAmBC,MAAO,EAAGC,WAAY,YACzI,CAACL,YAAa,CAACC,KAAM,QAASC,KAAM,OAAQC,KAAM,CAAC,iBAAkB,gBAAiB,iBAAkBC,MAAO,EAAGC,WAAY,UAC9H,CAACL,YAAa,CAACC,KAAM,YAAaC,KAAM,6BAA8BC,KAAM,CAAC,kBAAmB,SAAU,MAAO,oBAAqB,eAAgB,UAAW,iBAAkB,iBAAkB,OAAQ,aAAc,SAAUC,MAAO,EAAGC,WAAY,WAC3P,CAACL,YAAa,CAACC,KAAM,aAAcC,KAAM,4BAA6BC,KAAM,CAAC,SAAS,aAAc,OAAQC,MAAO,EAAGC,WAAY,YA8HpI1E,YAAU0T,GACRA,EAAM/J,QACJgK,MAAa,MAAG,EAChB/J,SAAoB,EACpBa,KAAI,IAAMzK,KAAK4T,WAAY,IAAI,EAC/BC,MAAU3C,IACNpQ,QAAQC,IAAImQ,GACLlR,KAAKsT,SAASrC,OAAOC,GAAMvH,QAChCc,KAAI,IAAMzK,KAAK8T,cAAe,IAAK,EACnCC,MAAW,KACT/T,KAAK8T,cAAe,KACb3C,MAAG,UAEf,EAEH1G,KAAI,IAAMzK,KAAK4T,WAAY,IAG/B5T,qBAAmBgU,GAIVA,EAAOC,SAASnO,OAAS,EAAI,GAAGkO,EAAOzI,WAAWyI,EAAOC,WAAaD,EAAOzI,KArIlF,CAEJ9L,WACEO,KAAKoL,UAAYpL,KAAK2B,YAAYkD,MAAM,CACtCqP,UAAW,KAEblU,KAAKmU,UAAYnU,KAAK2B,YAAYkD,MAAM,CACtCqP,UAAW,KAGblU,KAAKqT,cAAc1E,cAAc,IACjC3O,KAAKqT,cAAczE,kBAAkB,GAQvC,CAGAwF,cAAcC,GACZvT,QAAQC,IAAIsT,GACZ,MAAMC,EAAOD,EAAO,GACdE,EAAWD,EAAKE,KAAO,KAC7B1T,QAAQC,IAAIuT,EAAKhI,MACbiI,EAAW,KACbvU,KAAKkS,aAAaR,IAAI,mCAAoC,gBAC1D1R,KAAKyU,KAAKzU,KAAK0U,aAGf1U,KAAK2U,wBAAwBN,EAEjC,CAEAM,wBAAwB/B,GACtB9R,QAAQC,IAAI6R,GAEZ,MAAMgC,EAAS,IAAIC,WACbC,EAAS9U,KAAKoL,UACpB,UAAW2J,KAAQnC,EAEjBgC,EAAOI,WAAWD,GAClBH,EAAOK,OAAS,KACd,MAAMzP,EAAMoP,EAAOZ,QAAQkB,YAAc,GACzCpU,QAAQC,IAAIyE,GACZ,MAAMI,EAAI8C,EAAQlD,GAClB1E,QAAQC,IAAI6E,GACRA,EAEQoD,EAAYxD,EAAKxF,KAAKiJ,eAE9B6L,EAAOK,WAAW,CAACjB,UAAW1O,KAE9BxF,KAAKkS,aAAaR,IAAI,iDAAiD1R,KAAKiJ,cAAcmM,eAAe,sBAAuB,gBAChIpV,KAAKyU,KAAKzU,KAAK0U,cAIjB1U,KAAKkS,aAAaR,IAAI,2EAA4E,gBAClG1R,KAAKyU,KAAKzU,KAAK0U,YAAU,EAI7BE,EAAOS,QAAU,KACfvU,QAAQC,IAAI6T,EAAOU,MAAK,EAE1BP,EAAKQ,SAAW,CAEpB,CAEAC,qBAUEC,eAAeC,QAAQ,YAAa1V,KAAKoL,UAAUlL,IAAI,cAAcE,OACrEqV,eAAeC,QAAQ,kBAAmB7M,KAAK0B,UAAUvK,KAAKqL,kBAW9DrL,KAAKqT,cAAc1D,gBAAgBjJ,IACnC1G,KAAKqT,cAAcpD,eAtBc,CAC/B1L,KAAM,oBACNqD,UAAW,OACX3H,SAAS,EACT4H,WAAW,EACXC,oBAAgBC,EAChBC,UAAU,IAkBZhI,KAAKqT,cAAc1E,cAAc,IACjC3O,KAAKqT,cAAczE,kBAAkB,GACvC,CAII+G,2BACF,OAAO3V,KAAKqL,gBAAgBpF,IAAK2P,GAAKA,EAAErK,OAAQC,KAAK,KACvD,CAEIqK,gCACF,OAAO7V,KAAK8V,aAAa7P,IAAM2P,GAA0BA,EAAErK,OAAQC,KAAK,KAC1E,CA4BAuK,eAAe3V,GAIb,OAAIA,EAAMmL,MACD,GAAGnL,EAAMmL,QAEX,EACT,CAGAyK,eAAe1P,EAAQ2P,GAErB3P,EAAEiM,iBACF,MAAM2D,EAAiB5P,EAAEyO,KACzBjU,QAAQC,IAAImV,GACC1V,QAAMR,KAAKqL,gBAAkBC,GAAWA,EAAOC,OAChD7K,SAASwV,EAAe3K,QAClCvL,KAAKqL,gBAAgBxK,KAAKqV,GAG5BD,EAAM7V,MAAQ,EAChB,CAEA+V,qBAAqB7P,IAAG2P,UACtB3P,EAAEiM,iBACF,MAAM2D,EAAiB5P,EAAEyO,KACZvU,QAAMR,KAAK8V,aAAexK,GAAWA,EAAOC,OAC7C7K,SAASwV,EAAe3K,QAClCvL,KAAK8V,aAAajV,KAAKqV,GAEzBD,EAAM7V,MAAQ,EAChB,CAEAgW,mBAAmB9P,EAAQ2P,GAOzB,GAHA3P,EAAEiM,iBACF0D,EAAM7V,MAAQ,GACd6V,EAAMI,YAAc,kBACjBrW,KAAKqL,gBAAgBvF,OAAQ,CAC9B,MAAMwQ,EAAS9V,QAAMR,KAAKqL,gBAAkBuK,GACnCA,EAAErK,OAEX0K,EAAM7V,MAAQkW,EAAO9K,KAAK,KAAI,CAElC,CAEAiJ,KAAK8B,GACHvW,KAAKoT,aAAaqB,KAAK8B,EAAS,CAC9BC,eAAgB,oBAChBhC,KAAM,KACNiC,WAAW,EACXC,SAAU,WACT1C,OAAO2C,KAAM3C,MAIZ4C,MAGN,CAEAC,oBACE7W,KAAKyU,KAAKzU,KAAK8W,aACf9W,KAAK8V,aAAe,IAAI9V,KAAKqL,iBAC7BvK,QAAQC,IAAIf,KAAK8V,aACnB,CAGAiB,qBACE/W,KAAKoT,aAAa4D,YACpB,CAGAC,cAAchB,GACZjW,KAAKqL,gBAAkB,GACvB4K,EAAM7V,MAAQ,GACd6V,EAAMI,YAAc,iBACtB,CAEAa,iBAAiBhB,EAAwBD,GAEvC,GADAjW,KAAKqL,gBAAkB7K,WAASR,KAAKqL,gBAAkB8L,GAAMA,EAAE5L,QAAU2K,EAAe3K,OACrFvL,KAAKqL,gBAAgBvF,OAAQ,CAC9B,MAAMwQ,EAAS9V,QAAMR,KAAKqL,gBAAkBuK,GACnCA,EAAErK,OAEX0K,EAAM7V,MAAQkW,EAAO9K,KAAK,KAAI,CAElC,CAEA4L,sBAAsBlI,EAAe+G,GACnCzV,WAASR,KAAK8V,aAAc,CAAC5G,IAC7B,MAAMoH,EAAStW,KAAK8V,aAAa7P,IAAM2P,GAA0BA,EAAErK,OAAQC,KAAK,MAChFyK,EAAM7V,MAAQJ,KAAK8V,aAAahQ,OAASwQ,EAAS,EACpD,CAEAe,kBAAkBpB,GAChB,MAAQvK,WAAY4L,GACpBtX,KAAK8V,aAAetV,QAAMkL,EAAQ6L,MAAM,KAAOjM,KAAmBC,MAAOD,EAAQkM,QAAS,KAAMC,MAAO,QACvGxB,EAAM7V,MAAQJ,KAAK2V,oBACrB,CAEA+B,uBACE1X,KAAKqL,gBAAkB,GACvB7K,YAAUR,KAAK8V,aAAeI,IAC5BlW,KAAKqL,gBAAgBxK,KAAKqV,EAAc,GAE1ClW,KAAKoT,aAAa4D,YACpB,CAEAW,mBAAmB1B,GACjBjW,KAAK8V,aAAe,GACpBG,EAAM7V,MAAQ,EAChB,EA9SW6S,SAAa,oCAAbA,GAAajS,wFAAbiS,EAAa,sBAAbA,EAAavT,2mLD7B1BC,iBAA+C,UAA/CA,CAA+C,UAA/CA,CAA+C,UAA/CA,CAA+C,UAMTA,0BAAaA,QAC3CA,gBACEA,uBAMFA,UAGFA,iBAAqD,UACrBA,kCAAoBA,QAElDA,kBAAO,aAAPA,CAAO,QAAPA,CAAO,QAAPA,CAAO,UAKCA,oCACFA,UAEFA,iBAAsBA,0BAAaA,UAErCA,eAAI,SAEAA,yBACAA,iBACEA,mBACFA,YASJA,eAAI,SACEA,kCAAqBA,QACzBA,iBAAsBA,8BAAiBA,UAEzCA,eAAI,SACEA,sBAASA,QACbA,iBAAsBA,8BAAiBA,UAEzCA,eAAI,SACEA,6BAAgBA,QACpBA,iBAAsBA,0BAAaA,gBAgDzCA,mBAAwE,YACvBA,iCAAoBA,QACnEA,mBAAgC,WAG5BA,kBACFA,QAIAA,iBACEA,wBACFA,cAMNA,mBAAsC,YACWA,4DAA+CA,QAC9FA,iBAA6BA,oKAC4CA,QAEzEA,iBAA6H,QAAGA,sBAASA,QAAKA,6CAE9IA,QAGAA,mBAA0EA,uCAAe6G,kBAAqB,GAC9G7G,eAAI,UAAJA,CAAI,QAE+DA,wCAA2BA,YAE5FA,kBAAiB,YAAjBA,CAAiB,eAEaA,yFAA4EA,YAY1GA,oBAA8B,YAA9BA,CAA8B,aAGxBA,wBAMFA,QACAA,mBACEA,mBAGFA,YAIJA,mBAA2C,YAA3CA,CAA2C,eAEdA,0BAAaA,UAExCA,mBAAuC,kBAM9BA,iEAAcA,4BAAoC,EAAlDA,CAAmD,qDAE3CA,gCAAwC,EAFhDA,CAAmD,6DAGvB,GAAIA,oBAAyB,GAAE,GARlEA,QAYAA,mBACEA,6BAcAA,yBACQA,gCAAS6G,qBAAmB,GAIlC7G,UACFA,UAGJA,6CAUAA,mBACEA,0BAKFA,QACAA,mBACEA,6CAMAA,sBAA0EA,gCAAS6G,sBAAoB,GAKrG7G,2BAEEA,oBAEFA,kBAORA,yBAA4I,QACvIA,6BAAgBA,UAGrBA,mBAA0EA,uCAAe6G,kBAAqB,GAG5G7G,mBAAsB,YAAtBA,CAAsB,QAAtBA,CAAsB,WAAtBA,CAAsB,SAImDA,qBAAOA,cAG9EA,oBAAsB,gBACMA,iDAAmCA,YAGjEA,oBAAsB,aAAtBA,CAAsB,SAAtBA,CAAsB,WAAtBA,CAAsB,SAIqDA,uCAAyBA,cAGlGA,oBAAsB,gBACMA,6CAA+BA,YAG7DA,oBAAsB,aAAtBA,CAAsB,SAAtBA,CAAsB,WAAtBA,CAAsB,SAIoDA,wCAA0BA,cAGlGA,oBAAsB,gBACOA,4GAE3BA,YAGJA,oBAAsB,aAAtBA,CAAsB,SAAtBA,CAAsB,WAAtBA,CAAsB,SAIoDA,sBAAQA,cAGhFA,oBAAsB,gBACMA,yEAA2DA,YAGzFA,oBAAsB,aAAtBA,CAAsB,SAAtBA,CAAsB,WAAtBA,CAAsB,SAIgDA,kBAAIA,cAGxEA,oBAAsB,gBACMA,yEAA2DA,oBA0EjGA,gDAsHAA,oFA7e6CA,qCAiGuBA,2CA4BvDA,0CAA0B,4BAgBzBA,wCAOUA,u6CAiBLA,wCAAuB,kCAAvBA,CAAuB,oCAAvBA,CAAuB,cAAvBA,CAAuB,kEAAvBA,CAAuB,iCAYnBA,gDAgBDA,+BAAyB,gBAG/BA,iDAeEA,mCAeEA,qCAAqB,gBAyBxBA,0CAA0B,4BAW1BA,yCAA0B,4BAW1BA,yCAA0B,4BAa1BA,yCAA0B,4BAW1BA,yCAA0B,0kECpR9BsT,CAAa,4BC0BlBtT,gBACEA,2JACFA,gCACAA,gBACEA,oHACFA,gCACAA,gBACEA,yMAEFA,gCACAA,gBACEA,mPAIFA,gCACAA,gBACEA,iMAGFA,gCACAA,gBACEA,+LAGFA,SCnED,IAAMiY,GAAoB,MAA3B,MAAOA,EAIXpY,YACUO,EACA8X,EAAwBC,EAAwC3E,GADhEnT,YACAA,cAAwBA,sBAAwCA,gBAJ1EA,kBAAe,sBAMbA,KAAK+X,aAAe/X,KAAK6X,OAAOG,wBAAwBC,QAAQ9O,MAAQnJ,KAAK6X,OAAOG,uBAAwBC,OAAO9O,OAAO7E,KAAO,qBACnI,CAEA7E,WAAkB,CAElByY,qBAWE,OAAQlY,KAAK+X,cACX,IAAK,sBAEH,YADAI,OAAO1D,KAAK,gFAAiF,SAE/F,IAAK,WAGH,YADA0D,OAAO1D,KAAK,8EAA+E,SAE7F,IAAK,UAEH,YADA0D,OAAO1D,KAAK,6EAA8E,SAE5F,IAAK,OAEH,YADA0D,OAAO1D,KAAK,0EAA2E,SAEzF,IAAK,UAEH,YADA0D,OAAO1D,KAAK,gGAAiG,SAE/G,IAAK,SAEH,YADA0D,OAAO1D,KAAK,+FAAgG,SAE9G,QACE,OAEN,CAEA2D,oBACE,MAAM7T,EAAO,wBAcbvE,KAAKD,KAAKG,IAAI,mBAAmBqE,IAAQ,CAAE8T,aAAc,SACtDlY,UAAUG,KAbb,SAASgY,EAAahY,EAAWgM,GAC/B,MAAMiM,EAAO,IAAIC,KAAK,CAAClY,GAAO,CAACgM,KAAMA,IAC/B6K,EAAIsB,SAASC,cAAc,KACjCvB,EAAEwB,aAAa,QAAS,iBACxBF,SAASG,KAAKC,YAAY1B,GAG1BA,EAAE2B,KAAOX,OAAOY,IAAIC,gBAAgBT,GACpCpB,EAAE8B,SAAW,GAAG1U,IAChB4S,EAAE+B,OACJ,CAIIZ,CAAahY,EAAM,MAAK,EAG9B,CAEA6Y,cACE,MAAM5U,EAAO,cAcbvE,KAAKD,KAAKG,IAAI,mBAAmBqE,IAAQ,CAAE8T,aAAc,SACtDlY,UAAUG,KAbb,SAASgY,EAAahY,EAAWgM,GAC/B,MAAMiM,EAAO,IAAIC,KAAK,CAAClY,GAAO,CAACgM,KAAMA,IAC/B6K,EAAIsB,SAASC,cAAc,KACjCvB,EAAEwB,aAAa,QAAS,iBACxBF,SAASG,KAAKC,YAAY1B,GAG1BA,EAAE2B,KAAOX,OAAOY,IAAIC,gBAAgBT,GACpCpB,EAAE8B,SAAW,GAAG1U,IAChB4S,EAAE+B,OACJ,CAIIZ,CAAahY,EAAM,MAAK,EAG9B,EA3FWsX,SAAoB,oCAApBA,GAAoB5W,kDAApB4W,EAAoB,sBAApBA,EAAoBlY,uxBDbjCC,iBAAmD,UAAnDA,CAAmD,UAEPA,sCAAyBA,QACjEA,iBAAuC,OAGnCA,iJACFA,UAGFA,gBAAmCA,iCAAoBA,QACvDA,iBAAuC,WACRA,6DAAgDA,QAC7EA,cACEA,4RAE4CA,gBAAmCA,uBAAUA,QAAKA,gDAEhGA,UAGFA,kBAAuC,WACRA,gCAAmBA,QAChDA,cACEA,oRAEuCA,gBAA4DA,iBAAIA,QAAIA,eAC7GA,UAGFA,kBAAgC,WAEKA,2CAA6BA,QAChEA,qBAAkEA,4DAChEA,sBACEA,0CACFA,QACAA,sBACEA,uBACFA,QACAA,sBACEA,sBACFA,QACAA,sBACEA,mBACFA,QACAA,sBACEA,yCACFA,QACAA,sBACEA,wCACFA,UAEFA,kBAAuC,WACRA,wBAAWA,QACxCA,wBAGAA,wBAGAA,wBAIAA,wBAMAA,wBAKAA,wBAMAA,iBAA6BA,gCAAmBA,QAChDA,iBACEA,6DAA+CA,iBAA8BA,gCAAS6G,qBAAmB,GAAE7G,2EAA8DA,QACzKA,mHAAqGA,iBAA8BA,gCAAS6G,eAAa,GAAG7G,6CACxIA,QAAIA,8GAE1BA,UAGFA,iBAAiEA,gCAAS6G,sBAAoB,GAC5F7G,iCACFA,qBA5DkEA,0CAsB/CA,+DAGAA,kDAGAA,mDAIAA,+CAMAA,kDAKAA,86CC/DZiY,CAAoB,y2HCXnB,SAAUwB,EAA2BpP,EAAiBjK,EAAkBsZ,EAAY,OAKhG,MAAMC,EAAYtP,EAAQuN,MAAM,KAAKvN,EAAQuN,MAAM,KAAKzR,OAAS,GAE3DyT,EAAU,IAAIC,KACpBD,EAAQE,OAAO,SAAU,oEAoBZ1Z,EAAKG,IAAS8J,EAAS,CAACqO,aAAc,cAAyBkB,QAASA,IAEhFpZ,UAAWmR,KAfhB,SAASgH,EAAahY,EAAWgM,GAC/B,MAAMiM,EAAO,IAAIC,KAAK,CAAClY,GAAO,CAACgM,KAAMA,IAC/B6K,EAAIsB,SAASC,cAAc,KACjCvB,EAAEwB,aAAa,QAAS,iBACxBF,SAASG,KAAKC,YAAY1B,GAG1BA,EAAE2B,KAAOX,OAAOY,IAAIC,gBAAgBT,GACpCpB,EAAE8B,SAAW,GAAGK,KAAaD,IAC7BlC,EAAE+B,OACJ,CAMEZ,CAAahH,EAAU,uBAAsB,EAEjD,CCjCM,SAAUoI,EAAmBxS,EAAgBL,GAMjD,IAAI8S,EAAS,GAEbnZ,iBAAU0G,EAAS,CAAC0S,EAAKC,KACvB,MAAOvN,OAAMwN,gBAAgBF,EAG7B,GAAU,SAAPtN,GAAiBsN,EAAIE,aAAaC,eAAejU,OAAQ,CAE1D,MAAMkU,EAAMJ,EAAIK,WACRF,kBAAmBH,EAAIE,aACzBI,EAAwC,GAAzBH,EAAejU,OAAciU,EAAe,GAAKA,EAAevO,KAAK,KAG1FmO,EAAOK,GAAO,CACZ/I,OAAQ,CACNA,OAAQiJ,GAEVrT,WAAYA,EACZsT,OAAQjT,EAAQ2S,GAAGM,OACnB5V,KAAM2C,EAAQ2S,GAAGtV,UAIJ,QAAP+H,GAAsB,UAAPA,IACtBwN,EAAaM,WAAYN,EAAaO,UAAsC,IAA1BP,EAAaM,UAA4C,IAA1BN,EAAaO,WAK/FV,EAFYC,EAAIK,WAEF,CACZhJ,OAAQ,CACNqJ,IAAKV,EAAIE,aAAaM,SACtBG,IAAKX,EAAIE,aAAaO,UAExBxT,WAAYA,EACZsT,OAAQjT,EAAQ2S,GAAGM,OACnB5V,KAAM2C,EAAQ2S,GAAGtV,SAKhBoV,CACT,CC3CO,IAAMa,GAAqB,MAA5B,MAAOA,EAHbhb,cASSQ,uBAA2D,GAE3DA,eAAoB,GAE3Bya,YAAYC,GACV1a,KAAK2a,kBAAoB,GACzB,MAAMC,EAAgBF,EAAWnD,MAAM,KACvCqD,EAAcC,QACd7a,KAAK8a,QAAU,EACfta,YAAUoa,EAAe,CAACG,EAAKlB,KAC7B,MAAMmB,EAAS,CACbzW,KAAM0W,GAAaF,GACnB7G,UAAWgH,GAAYH,IAEzB/a,KAAK2a,kBAAkB9Z,KAAKma,GAC5Bhb,KAAK8a,SAAWE,EAAO9G,UAAUpO,SAEnC9F,KAAKmb,UAAY,OACnB,CAEAC,cAAcV,GAKZ,IAAIE,EAAgBF,EAAWnD,MAAM,MAAMtS,MAAM,EAAG,IAEhDoW,GAAU,EAGVC,EAAiB,IAAIC,OAAO,gBAEhC/a,mBAAUoa,EAAe,CAACpV,EAAKqU,IAKjB,KAARrU,IAIW,MAAXA,EAAI,KAAekD,EAAQlD,IAIX,MAAXA,EAAI,KAAe8V,EAAe3S,KAAKnD,IAF9C6V,GAAQ,GAAa,QAElB,IAKPrb,KAAKmb,UAAY,SACTE,CACV,CAEAG,WAAWC,GACTzb,KAAK2a,kBAAoB,GACzB,MAAMe,EAAW7S,KAAKC,MAAM2S,GAC5Bzb,KAAK8a,QAAU,EACXa,MAAMC,QAAQF,IAChB1b,KAAK2a,kBAAoBe,EACzB1b,KAAK8a,QAAU,IAEf9a,KAAK2a,kBAAkB9Z,KAAK6a,GAC5B1b,KAAK8a,SAAWY,EAASG,SAAS/V,QAEpC9F,KAAKmb,UAAY,MACnB,CAEAW,uBAAuBC,GAmBrB/b,KAAK2a,kBAAoB,GAGzB,IAAIC,EAAgBmB,EAAYxE,MAAM,MACtCqD,EAAgBpa,WAASoa,EAAgBhF,GAAY,KAANA,GAE/C5V,KAAK8a,QAAU,EACfta,YAAUoa,EAAgBoB,IACxB,MAAMC,EAAMD,EAAKtb,SAAS,KAAOsb,EAAKzE,MAAM,KAAOyE,EAAKzE,MAAM,MAExDyD,EAAS,CACbzW,KAAM0X,EAAI,GACV/H,UAAW+H,EAAI,IAEjBjc,KAAK2a,kBAAkB9Z,KAAKma,GAC5Bhb,KAAK8a,SAAWE,EAAO9G,UAAUpO,SAEnC9F,KAAKmb,UAAY,mBACnB,CAEAe,wBAAwBH,EAAqBxE,GA+B3CvX,KAAK2a,kBAAoB,GAIzB,IAAIC,EAAgBmB,EAAYxE,MAAM,MAAMtS,MAAM,EAAG,IACrD2V,EAAgBpa,WAASoa,EAAgBhF,GAAY,KAANA,GAE/C5V,KAAK8a,QAAU,EACf,IAAImB,EAAgB,GAChBZ,GAAU,EAMVc,EAAY,QACZC,EAAU,IAAIb,OAAO,uBACrBc,EAAU,IAAId,OAAO,eACzB/a,mBAAUoa,EAAe,CAACoB,EAAMnC,KAK9B,GAFAoC,EAAMD,EAAKzE,MAAMA,GAGA,IAAf0E,EAAInW,SAAiBsW,EAAQzT,KAAKsT,EAAI,MAAQI,EAAQ1T,KAAKsT,EAAI,IAC/Dnb,eAAQC,IAAI,SAAUsa,GAAQ,GAAa,EAE1CW,EAAKtb,SAAS,KAEfyb,EAAY,QACHH,EAAKtb,SAAS,MAGvByb,EAAY,MACHH,EAAKtb,SAAS,OAEvByb,EAAY,WAKhBnc,KAAKmb,UAAY,sBAAsBgB,MAG/Bd,CAGV,CAmBAiB,0BAA0BP,GACxB/b,KAAK2a,kBAAoB,GAEzB7Z,QAAQC,IAAIgb,GACZ,IAAInB,EAAgB,GAElBA,EADEmB,EAAYrb,SAAS,KACPqb,EAAYxE,MAAM,KAAKtS,MAAM,EAAG,IAEhC8W,EAAYxE,MAAM,MAAMtS,MAAM,EAAG,IAEnD2V,EAAgBpa,WAASoa,EAAgBhF,GAAY,KAANA,GAC/C5V,KAAK8a,QAAU,EACf,IACIO,GAAU,EAEVkB,EAAS,IAAIhB,OAAO,kBAYxB,OAXA/a,YAAUoa,EAAe,CAACoB,EAAMnC,KAI9B,IACG0C,EAAO5T,KAAKqT,GACblb,eAAQC,IAAI,SAAUsa,GAAQ,GAAa,IAE/Crb,KAAKmb,UAAY,wBAGdE,GAGIrb,KAAK2a,kBAAkB7U,QAAU,EAC1C,EAjPW0U,SAAqB,oCAArBA,EAAqB,EAArBA,EAAqB,wBAArBA,EAAqBxM,QAArBwM,EAAqB,qBAFpB,SAEDA,CAAqB,KA8QlC,SAASS,GAAauB,GACpB,IAAItN,EAAQsN,EAAKC,QAAQ,MACzB,OAAc,IAAVvN,IACFA,EAAQwN,KAEHF,EAAKG,UAAU,EAAGzN,EAC3B,CAEA,SAASgM,GAAYsB,GACnB,IAAItN,EAAQsN,EAAKC,QAAQ,MACzB,OAAc,IAAVvN,IACFA,EAAQwN,KAEHF,EAAKG,UAAUzN,GAAO3N,QAAQ,MAAO,GAC9C,mDC1RU5B,qBACgDA,SAA0BA,kCADlEA,4BACwCA,0DAHlDA,qBAEEA,4BAEFA,8BAH+CA,qCAElBA,qEAE7BA,kBAAgF,WAAhFA,CAAgF,aAEtCA,sBAAUA,aCNrD,IAAMid,GAA4B,MAAnC,MAAOA,EAgBXpd,YACSqd,EACCC,GADD9c,wBACCA,UAdDA,sBAMH,GAEIA,8BAA2B,IAAIoS,MACzCpS,oBAAyB,EAClBA,iBAAmB,IAM1B,CAEAP,WACEO,KAAK+c,YAAc/c,KAAK6c,iBAAiBG,OAC3C,CAEAC,gBACEjd,KAAKkd,yBAAyBnK,KAAK/S,KAAKmd,WAC1C,CAEAC,uBAAuBC,EAAa,SAAUC,EAAgB,EAAGC,EAAY,IAC3Evd,KAAK+c,YAAYS,WACf,aACAxd,KAAK8c,GAAGjY,MAAM,CACZwY,WAAYrd,KAAK8c,GAAGE,QAAQK,GAC5BC,cAAetd,KAAK8c,GAAGE,QAAQM,GAC/BC,UAAWvd,KAAK8c,GAAGE,QAAQO,KAGjC,CAEAE,4BACEzd,KAAK+c,YAAYW,cAAc,aACjC,CAEAC,wBACE3d,KAAK4d,eAAiB5d,KAAK4d,cAC3B5d,KAAK4d,cAAgB5d,KAAKod,yBAA2Bpd,KAAKyd,2BAC5D,EAhDWb,SAA4B,oCAA5BA,GAA4B5b,0BAA5B4b,EAA4B,sBAA5BA,EAA4Bld,skCDRzCC,WACEA,iBAA6B,UAA7BA,CAA6B,aAG4CA,mCAAsBA,QAC3FA,iBAAuE,aACjCA,6BAAiBA,QACrDA,2BAKAA,wBAKFA,QACAA,kBAA4E,eACfA,gCAAS6G,iBAAe,GACnF7G,cAIRA,eAxBcA,iCAOGA,iDAKHA,kDAO+EA,qGCXhFid,CAA4B,2BCOnCjd,oBCPC,IAAMke,GAAoC,MAA3C,MAAOA,EAOXre,YAAmBqd,2BAHT7c,8BAA2B,IAAIoS,MAClCpS,iBAAmB,IAG1B,CAEAP,WACEO,KAAK+c,YAAc/c,KAAK6c,iBAAiBG,OAC3C,CAEIc,kBACF,OAAO9d,KAAK+c,YAAYgB,SAASD,YAAe1d,KAClD,CAEA6c,gBACEjd,KAAKkd,yBAAyBnK,KAAK/S,KAAKmd,WAC1C,EApBWU,SAAoC,oCAApCA,GAAoC7c,cAApC6c,EAAoC,sBAApCA,EAAoCne,04BDRjDC,WACEA,iBAA4C,aAExCA,yCACFA,QACAA,iBAA0F,aAE5DA,6BAAiBA,QAE7CA,oBAC+C,cACjBA,oCAAwBA,QACpDA,qBAA8BA,4BAAeA,QAC7CA,qBAA2BA,mBAAMA,UAEnCA,2BAEFA,QAEAA,kBAA4E,eACfA,gCAAS6G,iBAAe,GACnF7G,YAGNA,eAxBcA,iCAUAA,8CACEA,kCACAA,oCACAA,iCAGFA,gDAI6EA,qGCZ9Eke,CAAoC,qGC0D7Cle,6BAKQA,yDAASA,2BAAkB,GACjCA,0BAEEA,mBAEFA,QACAA,8BACFA,4CAVQA,yCAA4D,0BAA5DA,CAA4D,kOAYlEA,wGAGAA,6BAEoG,WAFpGA,CAEoG,aAE1DA,sBAAUA,UAElDA,uBACFA,cANQA,8IAkBJA,qDACyCA,oCAAmC,+eAoClEA,SACEA,mBAAqC,WAArCA,CAAqC,WAE1BA,gBAAIA,QACXA,oBAIFA,QAEAA,kBAAwB,WACfA,iBAAKA,QACZA,oBAIFA,QAEAA,mBAA6B,gBAEnBA,2EAASqe,OAAThd,QAASgd,uBAAwBre,gBAAsB,GAAEA,mBACjEA,QACAA,sBACQA,2EAASse,OAATjd,QAASid,kBAAmBte,gBAAsB,GACxDA,iBACFA,YAGNA,iDAvBaA,yHAAsG,4CAAtGA,CAAsG,4CAQtGA,yHAAsG,4CAAtGA,CAAsG,sFAqC7GA,iBAAsF,cAI7EA,4EAAUA,uCAAoC,GAFrDA,QAIAA,0BACFA,iDAFSA,8QAGTA,iBAC8E,cAKrDA,4EAAUA,+BAA4B,GAJ7DA,QAKAA,SACFA,iFAPIA,qDAEKA,0FAA2E,+CAA3EA,CAA2E,uEAA3EA,CAA2E,WAIlFA,oEAlCNA,mBAAiC,WAAjCA,CAAiC,cAEoBA,6BAAiBA,QAClEA,kBAAwC,cAG/BA,2EAASA,oCAAiC,GAFjDA,QAGAA,kBAAgC,aAEhCA,0BAEEA,mBAEFA,gBAKJA,0BACEA,yBAQAA,yBASFA,QAGAA,mBAA6B,gBAEnBA,2EAASue,OAATld,QAASkd,qBAAsBve,gBAAsB,GAC3DA,oBACFA,QACAA,sBACQA,2EAASwe,OAATnd,QAASmd,gBAAiBxe,gBAAsB,GAAGA,gBAC3DA,WAAS,kDA5CFA,wDAGEA,uDAcJA,qGAQiBA,6IAjFlCA,qBAEKA,gEAAcA,+BAA2B,GAK5CA,qBAEQA,mEAASye,qBAAkBze,+BAAsB,GACvDA,0BAEEA,mBAEFA,UAEFA,0BAAqBA,2DAASA,oBAAgB,GAC5CA,qBAAwBA,yEAASA,wBAAiB,OAAM,GAAEA,yBAAaA,QACvEA,qBAAwBA,yEAASA,wBAAiB,QAAO,GAAEA,yBAAaA,QACxEA,mBAEAA,gBAEEA,oCA6BAA,8CAoDFA,WAAM,+CAjGAA,+GAgBWA,qDAAiD,yCAsFxEA,gBAAoDA,SAAgBA,oCAAhBA,+CADpDA,mBACAA,0BACFA,4DADSA,oFAhHTA,iBACEA,SAEEA,0BA4GFA,0BAGFA,4CAjHEA,uCAKQA,sCAyGYA,oEA4BtBA,kBAGEA,oBAEAA,oBAC2BA,SAAkBA,QAC7CA,iBACEA,SACFA,iEARGA,4EAE6CA,iCAAkB,+BAG3DA,kCAAoBA,+BAEzBA,iEATNA,YACEA,yBAWFA,sDAXQA,+DAPVA,kBAAoE,WAEhEA,8BAGFA,QACAA,kCAaFA,6CAjBIA,oEAI0BA,8EAZlCA,kBAA0B,WACgCA,qCAAyBA,QACjFA,qBAA2DA,yDAASA,uBAAc,GAAEA,UAEtFA,kBAAwB,aAEpBA,yBAoBFA,UAEFA,kBAA0B,eACwBA,yDAASA,2BAAkB,GAAEA,iBAAKA,QAClFA,sBAAgEA,yDAASA,8BAAqB,GAAEA,oBAAOA,SAAS,yBAzB1GA,gDACgDA,mHA4BxDA,aACAA,+FACAA,cAFGA,mBChPE,IAAM0e,GAAoB,MAA3B,MAAOA,EAuDX7e,YACUmC,EACAyR,EACAkL,EACAjL,GAHArT,mBACAA,oBACAA,YACAA,qBAxDVA,eAAyB,GAQhBA,kBAAuB,EAEvBA,gBAAoC,CAAC,IACrCA,WAAoB,GAE7BA,yBAA8B,GACrBA,cAAe,GAGfA,uBAAmB,EAGlBA,wBAAqB,IAAIoS,MACzBpS,uBAAoB,IAAIoS,MACxBpS,yBAAsB,IAAIoS,MAIpCpS,iBAAwB,GAGxBA,eAAkC,IAAIue,KAEtCve,kBAAe,IAAIue,KAGnBve,YAA6BA,KAAKqT,cAAc5E,OAChDzO,WAAgB,GAEhBA,aAA+BA,KAAKqT,cAAc7E,QAClDxO,YAAkB,GAElBA,iBAAkCA,KAAKqT,cAAcmL,YACrDxe,gBAAa,GAEbA,gBAAqB,GACrBA,iBAAsB,GAKtBA,gBAAoB,GAEpBA,cAAU,CAOV,CAEAP,WACEO,KAAKye,aAAe,IAAIze,KAAK0e,OAE7B1e,KAAK2e,UAAY,CACfC,IACE,6HAUFC,WAAW,EACXC,WAAY,iBACZC,QAAQ,EACRC,WAAY,GACZC,UAAU,EACVC,YAAY,EACZC,WAAW,EACXC,SAAU,CACRC,WAAY,mBACZC,KAAM,mCACNC,aAAc,oCAEhBjf,KAAMN,KAAKwf,WACXd,MAAO1e,KAAKye,aACZgB,WAAYjf,QAAMR,KAAKkH,QAAS,CAACwY,EAAQ7F,MAErC8F,QAAS,CAAC9F,GACV+F,YAAa,CAACC,EAAIC,EAAUC,EAASC,EAAKpG,KACxC,IAAIqG,EAAY,CAAC,MAAO,SAASvf,SAASgf,EAAOpT,MAAQ,QAAU,OACnE4T,EAAEL,GAAIM,IAAI,aAAcF,EAAS,EAEnCG,SAAUV,EAAOW,OACjBC,OAAQ,CAAChgB,EAAMgM,IAEO,QAAhBoT,EAAOpT,MAAkBiU,MAAMjgB,GAAckgB,SAASlgB,GACjC,UAAhBof,EAAOpT,OAAqBiU,MAAMjgB,IAChC,YAATgM,GAAsBoT,EAAOe,iBAAyBC,WAAWpgB,GAAMqgB,QAAQjB,EAAOe,kBAC/D,UAAhBf,EAAOpT,MAAqBiU,MAAMjgB,GAClB,UAAhBof,EAAOpT,MAAoBiU,MAAMjgB,GAAc,KAEjDA,EAHkDogB,WAAWpgB,MAO1EsgB,SAAS,EACTC,aAAa,EACbC,cAAc,EACdC,WAAY,IAId/gB,KAAKyO,OAAO9E,QAAKqX,KAAUhhB,KAAKihB,eAAe9gB,UAAUC,IAGvDJ,KAAKgF,MAAQ5E,IAGfJ,KAAKwO,QAAQ7E,QAAKqX,KAAUhhB,KAAKihB,eAAe9gB,UAAUC,IAIxD,GAHAJ,KAAKyI,OAASrI,EAGXJ,KAAKyI,OAAO3C,QAAQ,EAAG,CACxB,MAAMkJ,EAAQhP,KAAKyI,OAAOzI,KAAKkP,MAAM,GAGrClP,KAAKkhB,WAAalS,GAAOmS,YAAcnS,EAAOmS,YAAYC,aAAepS,EAAMmS,WAAWC,YAAY,IAAIC,aAAc,IAAM,GAC9HrhB,KAAKshB,YAActS,GAAOmS,YAAcnS,EAAOmS,YAAYC,aAAepS,EAAMmS,WAAWC,YAAY,IAAIC,aAAc,IAAM,GAC/HvgB,QAAQC,IAAI,gBAAgBf,KAAKkhB,cACjCpgB,QAAQC,IAAI,iBAAiBf,KAAKshB,cAAa,MAE/CthB,KAAKkhB,WAAa,GAClBlhB,KAAKshB,YAAc,GAcrB,IAAIC,EACJ,OAVAvhB,KAAKgH,YAAchH,KAAKyI,OAAOzI,KAAKkP,QAAQlI,YAC5ChH,KAAK+gB,WAAapF,MAAM6F,KAAK,CAAC1b,OAAQ9F,KAAKkH,QAAQpB,QAAS,QASpD9F,KAAKyhB,YACX,IAAK,6BAGL,IAAK,UACHF,EAAa,EACb,MAIF,QACEA,EAAa,EAGjB,GAAGvhB,KAAKgH,aAAehH,KAAKgH,YAAYua,KAAgB/gB,YAAUR,KAAKgH,YAAYua,IAAara,SAI9F,UAAW0S,KAAO5Z,KAAKgH,YAAYua,GAAYra,QAAS,CACtD,IAAIwY,EAAS1f,KAAKgH,YAAYua,GAAYra,QAAQ0S,GAClD,MAAOrV,OAAM4V,UAAWuF,GAChBpF,MAAKC,MAAKtJ,UAAWyO,EAAOzO,OACpC,IAAI4I,EAAIrZ,cAAYR,KAAKkH,QAAS,CAAC3C,OAAM4V,WAKzCna,KAAKkH,QAAQ2S,GAAGC,aAAaM,SAAWE,GAAe,IAARA,EAAYA,EAAMoC,IACjE1c,KAAKkH,QAAQ2S,GAAGC,aAAaO,SAAWE,GAAe,IAARA,EAAYA,EAAMmC,IAEjE1c,KAAK+gB,WAAWlH,GAAK,CAAC5I,OAAQA,EAAQyQ,OAAO,EAAMC,OAAO,GAC1D3hB,KAAKkH,QAAQ2S,GAAGC,aAAaC,eAAiB9I,EAASA,EAAOsG,MAAM,KAAO,GAC3EvX,KAAKkH,QAAQ2S,GAAGC,aAAa8H,SAAU,EAK3C5hB,KAAK2e,UAAUoC,WAAa/gB,KAAK+gB,aAGnC/gB,KAAKwe,YAAY7U,QAAKqX,KAAUhhB,KAAKihB,eAAe9gB,UAAUC,IAC5DU,QAAQC,IAAI,cAAcX,KAC1BJ,KAAK4K,WAAaxK,GAGtB,CAEAyhB,kBACE7hB,KAAK8hB,uBACL9hB,KAAK+hB,UAAUhY,MAIjB,CAEAiY,cAEEhiB,KAAK+hB,UAAUE,cACfjiB,KAAKihB,aAAalX,OAClB/J,KAAKihB,aAAaiB,UACpB,CAEIC,qBACF,OAAO3hB,WAASR,KAAKkH,QAASzG,IAAMA,EAAE4f,OACxC,CAEA+B,2BACEpiB,KAAKqiB,2BAA6BriB,KAAKsiB,kBAAkBliB,MACzDU,QAAQC,IAAIf,KAAKsiB,kBAAkBliB,OACnCJ,KAAKuiB,4BACLviB,KAAKwiB,sBACLxiB,KAAKyU,KAAKzU,KAAKyiB,mBACjB,CAEAF,4BAKEviB,KAAKsiB,kBAAkBI,SACvB1iB,KAAK2iB,UAAUC,WAAWjM,KAAMiM,IAC9B,MAAMC,EAAW,GACXnE,EAAQkE,EAAWzZ,QAAQuV,MACjCle,YAAUke,EAAQ9I,IAChB9U,QAAQC,IAAI6U,GACZiN,EAAShiB,KAAK+U,EAAE,IAChB,MAAMkN,EAAkB9iB,KAAKkH,QAAQ0O,EAAE,IAAIqE,UAC3CnZ,QAAQC,IAAI+hB,GACZ9iB,KAAKsiB,kBAAkBvE,SAAS,GAAG+E,KAAmBC,SAAO,EAC9D,EAEL,CAEAP,sBAKExiB,KAAKsiB,kBAAkBvE,SAAS,iBAAiB3d,OAASJ,KAAKsiB,kBAAkBvE,SAAS,gBAAgBgF,UAC1G/iB,KAAKsiB,kBAAkBvE,SAAS,oBAAoB3d,OAASJ,KAAKsiB,kBAAkBvE,SAAS,mBAAmBgF,UAChH/iB,KAAKsiB,kBAAkBvE,SAAS,8BAA8B3d,OAASJ,KAAKsiB,kBAAkBvE,SAAS,6BAA6BgF,SAEtI,CAIAtO,KAAK8B,GAIHvW,KAAKoT,aAAaqB,KAAK8B,EAAS,CAC9BC,eAAgB,oBAChBhC,KAAM,KACNiC,WAAW,EACXC,SAAU,WACT1C,OAAO2C,KAAM3C,IACdlT,QAAQC,IAAIiT,EAAM,EAEhB4C,IACF9V,QAAQC,IAAI6V,EAAM,EAEtB,CAEAoM,eACEhjB,KAAKsiB,kBAAkBnN,WAAWnV,KAAKqiB,4BAEvCriB,KAAKoT,aAAa4D,YACpB,CAEAiM,sBAIE,IAAId,EAA2B,GAC3Be,EAA6B,GAEjCljB,KAAK2iB,UAAUC,WAAWjM,KAAMiM,IAC9B9hB,QAAQC,IAAI6hB,GACZpiB,YAAUR,KAAKkH,QAAS,CAAC0O,EAAGiE,KACtB7Z,KAAKsiB,kBAAkBvE,SAAS,GAAGnI,EAAEqE,aAAa7Z,OACpD+hB,EAAethB,KAAKgZ,GACpB7Z,KAAKkH,QAAQ2S,GAAGwG,QAAS,IAGzB6C,EAAiBriB,KAAKgZ,GACtB7Z,KAAKkH,QAAQ2S,GAAGwG,QAAS,KAG7BuC,EAAW1b,QAAQib,GAAgB/B,SAAQ,GAC3CwC,EAAW1b,QAAQgc,GAAkB9C,SAAQ,GAC7CpgB,KAAKoT,aAAa4D,YAAU,EAEhC,CAEA8K,uBAME,IAAIqB,EAAqB,GACzBnjB,KAAKojB,YAAc,GACnB5iB,YAAUR,KAAKkH,QAAS,CAAC0S,EAAKC,KAC5BsJ,EAAc,GAAGvJ,EAAIK,cAAgBL,EAAIyG,OACpCrgB,KAAKojB,YAAY1iB,SAASkZ,EAAIO,SACjCna,KAAKojB,YAAYviB,KAAK+Y,EAAIO,QAG5B+F,EAAEmD,GAAGC,UAAaC,IAAItS,OAAOpQ,KAAK,CAAC2iB,EAAeljB,EAAgBmjB,KAGhE,GAAID,EAASE,OAAOC,KAAO,cAAc3jB,KAAK6G,aAAa7G,KAAKyhB,aAC9D,OAAO,EAIT,MAAMjc,EAAMkb,WAAWpgB,EAAKuZ,IAI5B,SAAK0G,MAAMvgB,KAAKkH,QAAQ2S,GAAGC,cAAcM,WAAamG,MAAMvgB,KAAKkH,QAAQ2S,GAAGC,cAAcO,WACvFkG,MAAMvgB,KAAKkH,QAAQ2S,GAAGC,cAAcM,WAAa5U,GAAOxF,KAAKkH,QAAQ2S,GAAGC,cAAcO,UACtFra,KAAKkH,QAAQ2S,GAAGC,cAAcM,UAAY5U,GAAO+a,MAAMvgB,KAAKkH,QAAQ2S,GAAGC,cAAcO,WACrFra,KAAKkH,QAAQ2S,GAAGC,cAAcM,UAAY5U,GAAOA,GAAOxF,KAAKkH,QAAQ2S,GAAGC,cAAcO,WAK1F,GAEHra,KAAKsiB,kBAAoBtiB,KAAK2B,YAAYkD,MAAMse,GAChDnjB,KAAK4jB,oBAAsBT,CAC7B,CAEAU,mBAIE7jB,KAAKsiB,kBAAoBtiB,KAAK2B,YAAYkD,MAAM7E,KAAK4jB,oBACvD,CAEAE,SAASxd,GAEPA,EAAEkM,iBACJ,CAEAuR,cAAclB,EAAkBnE,GAE9B1e,KAAK2iB,UAAUC,WAAWjM,KAAMiM,IAC9BA,EAAWlE,MAAM,CAACmE,EAAUnE,IAAQsF,MAAI,EAE5C,CAGAC,uBACE/D,EAAE,uBAAuBgE,YAAY,kBACrChE,EAAE,iBAAiBiE,KAAK,YAAY,GACpCjE,EAAE,eAAeiE,KAAK,YAAY,EACpC,CAEAC,wBACElE,EAAE,uBAAuBmE,SAAS,kBAClCnE,EAAE,iBAAiBiE,KAAK,YAAY,GACpCjE,EAAE,eAAeiE,KAAK,YAAY,EACpC,CAEAG,oBAAoBhe,GACdA,GAAItG,KAAKikB,sBACf,CAEAM,oBAAoB1K,GAKlB7Z,KAAKwkB,SAAWxkB,KAAKykB,UAAUvkB,IAAI2Z,GAEhC7Z,KAAKwkB,SAASE,UAAW1kB,KAAKokB,uBACnC,CAIAO,eACE,IAAIC,EAAO5kB,KACXA,KAAK2iB,UAAUC,WAAWjM,KAAMiM,IACXA,EAAW1b,UACnB2d,MAAM,SAAShL,GAIxB,IAAIiL,EACgB,iBAJP9kB,KACc+kB,YAIzBD,EAAW,CAAC3N,EAAW6N,IAAc7N,EAAI6N,GAG3C,IAAIC,EAAuB,GARdjlB,KASNM,OAAO4kB,KAAKJ,GAAUK,KAAK,SAAUjf,EAAGkf,IACb,GAA5BH,EAAcxI,QAAQvW,IACxB+e,EAAcpkB,KAAKqF,EAEvB,GAGgC,SAA5B0e,EAAK1d,QAAQ2S,GAAGvN,KAClBsY,EAAK1d,QAAQ2S,GAAGC,aAAgBuL,eAAoBJ,GAEpDL,EAAK1d,QAAQ2S,GAAGC,aAAgBQ,IAAS2K,EAAc,GACvDL,EAAK1d,QAAQ2S,GAAGC,aAAgBS,IAAS0K,EAAcA,EAAcnf,OAAS,GAElF,EAAC,EAEL,CAEAwf,oBAAoBzL,GAClBqG,EAAE,OAAOrG,IAAI7Z,KAAK6G,aAAa7G,KAAKyhB,mBAAmB5H,IAAI7Z,KAAK6G,aAAa7G,KAAKyhB,cAAcjc,IAAIkX,KACpG1c,KAAKkH,QAAQ2S,GAAGC,aAAgB8H,SAAa,EAC7C5hB,KAAKkH,QAAQ2S,GAAGC,aAAgBM,SAAcsC,IAC9C1c,KAAKkH,QAAQ2S,GAAGC,aAAgBO,SAAcqC,IAC9C1c,KAAK2iB,UAAUC,WAAWjM,KAAMiM,IAC9BA,EAAWlD,OAAO7F,GAAG5I,OACnB,IACA,GAAM,GACN+S,OACFhkB,KAAKulB,kBAAkBxS,MAAI,EAE/B,CACAyS,eAAe3L,GAEb7Z,KAAKkH,QAAQ2S,GAAGC,aAAgBM,SAAcsG,WAAmBR,EAAE,OAAOrG,IAAI7Z,KAAK6G,aAAa7G,KAAKyhB,cAAcjc,OACnHxF,KAAKkH,QAAQ2S,GAAGC,aAAgBO,SAAcqG,WAAmBR,EAAE,OAAOrG,IAAI7Z,KAAK6G,aAAa7G,KAAKyhB,cAAcjc,OAEnH,MAAO4U,WAAUC,YAAYra,KAAKkH,QAAQ2S,GAAGC,aAG7C9Z,KAAKkH,QAAQ2S,GAAGC,aAAgB8H,WADPxH,IAAYC,GAAyB,IAAbD,GAA+B,IAAbC,GAGnEvZ,QAAQC,IAAI,SAAS8Y,KACrB/Y,QAAQC,IAAIqZ,GACZtZ,QAAQC,IAAIsZ,GAEZra,KAAK2iB,UAAUC,WAAWjM,KAAMiM,IAC9BA,EAAWoB,OACXhkB,KAAKulB,kBAAkBxS,MAAI,EAE/B,CAGA0S,uBAAuBnf,EAAQuT,GAK7B,IAAIzZ,EAAQkG,EAAEof,OAAOtlB,MACrBJ,KAAK2iB,UAAUC,WAAWjM,KAAMiM,IAC9B,IAAIlD,EAASkD,EAAWlD,OAAO7F,GAC3BoL,EAAuB,GAC3BvF,EAAOpf,OAAO4kB,OAAOC,KAAK,SAAUjf,EAAGkf,IACL,GAA5BH,EAAcxI,QAAQvW,IACxB+e,EAAcpkB,KAAKqF,EAEvB,GACAlG,KAAKkH,QAAQ2S,GAAGC,aAAgBuL,eAAoBjlB,EAClDI,WAASykB,EAAgBlQ,GAASvU,eAAauU,EAAKtT,cAAerB,EAAMqB,gBACzEwjB,GAGN,CAEAU,kBAAkB9L,GAChB7Z,KAAKkH,QAAQ2S,GAAGC,aAAgB8H,SAAa,EAC7C1B,EAAE,oBAAoB9a,OAAOyU,EAAE3E,aAAaiP,KAAK,WAAW,GAC5DnkB,KAAKkH,QAAQ2S,GAAGC,aAAgBC,eAAiB,GACjD/Z,KAAK2iB,UAAUC,WAAWjM,KAAMiM,IAC9BA,EAAWlD,OAAO7F,GAAG5I,OACnB,IACA,GAAM,GACN+S,OACFhkB,KAAKulB,kBAAkBxS,MAAI,EAG/B,CAEA6S,aAAa/L,GAaX,MAAuBC,gBAAyB9Z,KAAKkH,QAAQ2S,IACtDE,kBAAkBD,EACzB,IAAII,EAAwC,GAAzBH,EAAejU,OAAciU,EAAe,GAAKA,EAAevO,KAAK,KACxFxL,KAAKkH,QAAQ2S,GAAGC,aAAgB8H,UAAgB7H,EAAejU,OAG/DhF,QAAQC,IAAImZ,GAEZla,KAAK2iB,UAAUC,WAAWjM,KAAMiM,IAC5BA,EAAWlD,OAAO7F,GAAG5I,OACnBiJ,GACA,GAAM,GACN8J,OACFhkB,KAAKulB,kBAAkBxS,MAAI,EAGjC,CAEA8S,gBAAgB3L,GAId,MAAO,IAAMA,EAAahF,WAAWqC,MAAM,KAAK/L,KAAK,OAAO+L,MAAM,KAAK/L,KAAK,OAAO+L,MAAM,KAAK/L,KAAK,OAAO+L,MAAM,KAAK/L,KAAK,OAAO+L,MAAM,KAAK/L,KAAK,OAAS,GAC5J,CAEAsa,0BAA0Bxf,EAAQuT,GAKhC,MAAMkM,EAAUzf,EAAEof,OAAOK,QACzB/lB,KAAKkH,QAAQ2S,GAAGC,aAAgBC,eAAiB,GAC7CgM,GACFvlB,YAAUR,KAAKkH,QAAQ2S,GAAGC,aAAgBuL,eAAoBjlB,IAC5DJ,KAAKkH,QAAQ2S,GAAGC,aAAgBC,eAAelZ,KAC7Cb,KAAK6lB,gBAAgBzlB,GAAM,EAInC,CAEA4lB,kBAAkB1f,EAAQuT,GACxB,MAAkCzZ,EAAQkG,EAAEof,OAAOtlB,MAAnCkG,EAAEof,OAAOK,QAGvB/lB,KAAKkH,QAAQ2S,GAAGC,aAAgBC,eAAelZ,KAC7Cb,KAAK6lB,gBAAgBzlB,IAGvBI,WAASR,KAAKkH,QAAQ2S,GAAGC,aAAgBC,eAAiBkM,GAAkBjmB,KAAK6lB,gBAAgBzlB,KAAW6lB,EAGhH,CAEAC,kBAEElmB,KAAKmmB,oBAAoBpT,OAEzB/S,KAAKye,aAAe,IAAIze,KAAK0e,OAC7B1e,KAAK2e,UAAUD,MAAQ1e,KAAKye,aAE5Bze,KAAK+hB,UAAUhY,KAAK/J,KAAK2e,WAGzB,MAAMyH,EAAkB,IADPpmB,KAAKgF,MAAMhF,KAAKkP,OAG/BpH,oBAAgBC,GAElB/H,KAAKqT,cAAcjD,WAAWgW,EAAiBpmB,KAAKkP,OAEpDlP,KAAKqT,cAAcxD,wBADC,CAAC,CAAC5I,MAAO,gBAAiBC,QAAS,KACClH,KAAKkP,OAC7DlP,KAAKqT,cAAclE,qBAAqBnP,KAAKkP,MAAO,IACpDlP,KAAK8hB,uBACL9hB,KAAK2kB,cACP,CAEA0B,mBAUErmB,KAAKsmB,mBAAmBvT,MAC1B,CAEAwT,oBAAoBjmB,EAAckmB,EAAgBC,EAAS,UACzD,MAAMtP,EAAIsB,SAASC,cAAc,KACjCvB,EAAEwB,aAAa,QAAS,iBACxBF,SAASG,KAAKC,YAAY1B,GAG1B,MAAMoB,EAAO,IAAIC,KAAK,CAAClY,IAIvB,OADA6W,EAAE2B,KAAOX,OAAOY,IAAIC,gBAAgBT,GAC5BiO,GACN,IAAK,MACHrP,EAAE8B,SAAW,GAAGwN,QAChB,MACF,IAAK,MACHtP,EAAE8B,SAAW,GAAGwN,QAChB,MACF,IAAK,OACHtP,EAAE8B,SAAW,GAAGwN,SAChB,MACF,QACEtP,EAAE8B,SAAW,GAAGwN,QAIpBtP,EAAE+B,OACJ,CA+CAwN,6BACE,OAAOlmB,QAAMR,KAAKwf,WAAaQ,IAC7B,IAAI2G,EAAW,GACfnmB,mBAAUwf,EAAK,CAAC5f,EAAOyZ,KACrB8M,EAAI3mB,KAAKkH,QAAQ2S,GAAG+M,cAAgBxmB,IAE/BumB,GAEX,CAEAE,4BAA4BvmB,EAAWwmB,GACrC,OAAOtmB,QAAMF,EAAO0f,IAClB,IAAI2G,EAAW,GACfnmB,mBAAUwf,EAAK,CAAC5f,EAAOyZ,KAClBiN,EAAgBjN,KACjB8M,EAAI3mB,KAAKkH,QAAQ2S,GAAG+M,cAAgBxmB,KAGjCumB,GAEX,CAEAI,iBAIE,MAAMN,EAAW,GAAGzmB,KAAKyhB,cAAczhB,KAAK4K,WAAW+R,UAAU,EAAG,KAEpE3c,KAAK2iB,UAAUC,WAAWjM,KAAMiM,IAE9B,MAAMlE,EAAQkE,EAAWlE,QAEnBsI,EAAchnB,KAAKinB,uBAAuBvI,GAG1Cpe,EAAON,KAAK0mB,6BAEZQ,EAAa1mB,YAAUF,KAAS0mB,GAEtClmB,QAAQC,IAAImmB,GAEZ,MAIMC,EAAUnnB,KAAKse,KAAK8I,QAAQF,EAJnB,CACbG,UAAW,OAIbvmB,QAAQC,IAAIomB,GACZnnB,KAAKumB,oBAAoBY,EAAS,MAAOV,EAAQ,EAErD,CAEAa,iBAIE,MAAMb,EAAW,GAAGzmB,KAAKyhB,cAAczhB,KAAK4K,WAAW+R,UAAU,EAAG,KAEpE3c,KAAK2iB,UAAUC,WAAWjM,KAAMiM,IAE9B,MAAMlE,EAAQkE,EAAWlE,QAEnBsI,EAAchnB,KAAKinB,uBAAuBvI,GAG1Cpe,EAAON,KAAK0mB,6BAEZQ,EAAa1mB,YAAUF,KAAS0mB,GAEhCG,EAAUnnB,KAAKse,KAAK8I,QAAQF,GAClCpmB,QAAQC,IAAIomB,GACZnnB,KAAKumB,oBAAoBY,EAAS,MAAOV,EAAQ,EAErD,CAEAc,kBAIE,MAAMd,EAAW,GAAGzmB,KAAKyhB,cAAczhB,KAAK4K,WAAW+R,UAAU,EAAG,KAEpE3c,KAAK2iB,UAAUC,WAAWjM,KAAMiM,IAE9B,MAAMlE,EAAQkE,EAAWlE,QAEnBsI,EAAchnB,KAAKinB,uBAAuBvI,GAG1Cpe,EAAON,KAAK0mB,6BAEZQ,EAAa1mB,YAAUF,KAAS0mB,GAGtChnB,KAAKumB,oBAAoB1d,KAAK0B,UAAU2c,EAAY,KAAM,GAAI,OAAQT,EAAQ,EAGlF,CAEAe,cACE,MAAMf,EAAW,GAAGzmB,KAAKyhB,cAAczhB,KAAK4K,WAAW+R,UAAU,EAAG,eAEpE3c,KAAK2iB,UAAUC,WAAWjM,KAAMiM,IAC5B,MAAM6E,EAAgB7E,EAAW8E,KAAK,CAACC,KAAM,UAAW1W,OAAQ,YAAY3Q,OAC5EQ,QAAQC,IAAI0mB,GACZ,MAAMvhB,EAAI0c,EAAW1b,UAAUkZ,UAC/Btf,QAAQC,IAAImF,GAEZ,MAAM5F,EAAON,KAAK6mB,4BAA4BY,EAAevhB,GAIvDihB,EAAUnnB,KAAKse,KAAK8I,QAAQ9mB,EAHnB,CACb+mB,UAAW,OAGbvmB,QAAQC,IAAIomB,GACZnnB,KAAKumB,oBAAoBY,EAAS,MAAOV,EAAQ,EAGvD,CAEAmB,cACE,MAAMnB,EAAW,GAAGzmB,KAAKyhB,cAAczhB,KAAK4K,WAAW+R,UAAU,EAAG,eAEpE3c,KAAK2iB,UAAUC,WAAWjM,KAAMiM,IAC5B,MAAM6E,EAAgB7E,EAAW8E,KAAK,CAACC,KAAM,UAAW1W,OAAQ,YAAY3Q,OAC5EQ,QAAQC,IAAI0mB,GACZ,MAAMvhB,EAAI0c,EAAW1b,UAAUkZ,UAC/Btf,QAAQC,IAAImF,GAEZ,MAAM5F,EAAON,KAAK6mB,4BAA4BY,EAAevhB,GACvDihB,EAAUnnB,KAAKse,KAAK8I,QAAQ9mB,GAClCQ,QAAQC,IAAIomB,GACZnnB,KAAKumB,oBAAoBY,EAAS,MAAOV,EAAQ,EAGvD,CAEAoB,eACE,MAAMpB,EAAW,GAAGzmB,KAAKyhB,cAAczhB,KAAK4K,WAAW+R,UAAU,EAAG,eAEpE3c,KAAK2iB,UAAUC,WAAWjM,KAAMiM,IAC9B,MAAM6E,EAAgB7E,EAAW8E,KAAM,CAACC,KAAK,UAAW1W,OAAQ,YAAa3Q,OAC7EQ,QAAQC,IAAI0mB,GACZ,MAAMvhB,EAAI0c,EAAW1b,UAAUkZ,UAC/Btf,QAAQC,IAAImF,GACZ,MAAM5F,EAAON,KAAK6mB,4BAA4BY,EAAevhB,GAC7DpF,QAAQC,IAAIT,GACZN,KAAKumB,oBAAoB1d,KAAK0B,UAAUjK,EAAM,KAAM,GAAI,OAAQmmB,EAAQ,EAG5E,CAEAQ,uBAAuBvI,GAUrB,MAAMoJ,EAAUtnB,QAAMke,EAAQ9I,GAGrB,CAFG5V,KAAKkH,QAAQ0O,EAAE,IAEfgR,aAAiBhR,EAAE,KAGzBmS,EAAkB,GAClBC,EAAkB,GACxBxnB,mBAAUsnB,EAAUlS,IAClBmS,EAAMlnB,KAAK+U,EAAE,IACboS,EAAMnnB,KAAK+U,EAAE,GAAE,GAGV,CAACmS,EAAOC,EACjB,EA50BW3J,SAAoB,oCAApBA,GAAoBrd,+CAApBqd,EAAoB,sBAApBA,EAAoB3e,uEAEpBuoB,KAAkB,mBAMfC,KAAW,s2MDzC3BvoB,iBAAyD,UAAzDA,CAAyD,cAOnDA,yBAEEA,kBAC4I,WAD5IA,CAC4I,YAI9IA,QACAA,sBACFA,QACAA,mCAA6B,eAC6BA,qBAAQA,QAChEA,qBAA0DA,2BAAcA,UAG1EA,4BAAiC,gBACTA,gCAAS6G,kBAAgB,GAAE7G,gBAAGA,QACpDA,sBAAsBA,gCAAS6G,kBAAgB,GAAE7G,gBAAGA,QACpDA,sBAAsBA,gCAAS6G,mBAAiB,GAAE7G,iBAAIA,UAExDA,6BAAmC,gBACXA,gCAAS6G,eAAa,GAAE7G,gBAAGA,QACjDA,sBAAsBA,gCAAS6G,eAAa,GAAE7G,gBAAGA,QACjDA,sBAAsBA,gCAAS6G,gBAAc,GAAE7G,iBAAIA,UAerDA,sBAEQA,gCAAQ6G,mBAAiB,GAC/B7G,2BAEEA,oBAA+F,cAGjGA,QACAA,0BACFA,QACAA,8BAEQA,gCAAS6G,4BAA0B,GACzC7G,2BAEEA,oBAEFA,QACAA,8BACFA,QACAA,6BAaAA,6CAGAA,6CAWFA,QAEAA,2BAAwC,YAAxCA,CAAwC,cAAxCA,CAAwC,eAOhCA,2BAOFA,QAEAA,kBAAO,SAELA,yBAmHFA,kBAURA,8CAkCAA,wGA1QuDA,sCAY3BA,sCACAA,sCA+CfA,4CAAyB,cAgCzBA,4DADUA,+BAAuB,wBAAvBA,CAAuB,8DAMfA,2CAUEA,8wIChFpB0e,CAAoB,+BCxBvB1e,qBACiDA,SAA0BA,kCADnEA,4BACyCA,yEAHnDA,qBAC+CA,2DAAUA,0BAAsB,GAC7EA,4BAEFA,gCAHiFA,qCAEpDA,sEAE7BA,kBAAiF,WAAjFA,CAAiF,aAEvCA,sBAAUA,uCAgBhDA,qBAC+DA,SAA0BA,kCADjFA,4BACuDA,0DAPvEA,SACEA,iBACAA,kBAA2C,cACoBA,mCAAsBA,QACnFA,iBAAuE,eAEnEA,4BAEFA,YAGJA,kBAAkE,WAAlEA,CAAkE,eAEhCA,gCAAmBA,QACjDA,sBAC6G,gBAChFA,mBAAMA,QACjCA,sBAAiCA,yBAAYA,YAGjDA,mBAAgF,YACpCA,2DAA8CA,QACxFA,mBAAuF,YAAvFA,CAAuF,YAAvFA,CAAuF,eAKjDA,oCAAuBA,QACvDA,mBACEA,qBAOFA,YAIJA,mBAAgC,YAAhCA,CAAgC,eAGGA,yBAAYA,QAC3CA,mBACEA,qBAMFA,kBAQZA,8BAtDoFA,8CAEjDA,4DAQyCA,8CAC5DA,iCACAA,uCAkBKA,+CAeAA,yEAWrBA,SACEA,iBACAA,kBAAqC,cACbA,2CAA8BA,QACpDA,kBACIA,yBAIJA,UAEFA,kBAAqC,cACbA,gDAAmCA,QACzDA,mBACEA,0BAIFA,UAEFA,mBAAqC,eACbA,wBAAUA,QAChCA,mBACEA,0BAIFA,UAEJA,8BAtBUA,oCASFA,4BAAc,qBASdA,0CAAyB,gDAMjCA,SACEA,iBACAA,kBAAqC,cACbA,4BAAeA,QACrCA,kBAAoB,cAApBA,CAAoB,eAEWA,sBAAUA,QACrCA,qBAAwBA,mBAAMA,cAIpCA,mBAAqC,eACbA,wBAAUA,QAChCA,mBACEA,0BAKFA,UAEJA,8BAhBgFA,8CAChEA,iCACAA,8BAURA,2CAA0B,qBAF1BA,gEAQRA,SACEA,iBACAA,kBAAqC,cACbA,2CAA8BA,QACpDA,kBAEEA,yBAKFA,UAEFA,kBAAqC,cACbA,+CAAkCA,QACxDA,mBACEA,0BAKFA,UAGFA,mBAAqC,eACbA,wCAA0BA,QAChDA,mBACEA,0BAKFA,UAEJA,8BAzBQA,6BAAe,sBAUfA,6BAAe,sBAWfA,0BAAW,uBC9JhB,IAAMwoB,GAAmC,MAA1C,MAAOA,EAkDX3oB,YACSqd,EACCC,GADD9c,wBACCA,UAjDDA,eAAoB,EACpBA,uBAAsH,GACtHA,qCAAoI,GAEnIA,8BAA2B,IAAIoS,MACzCpS,oBAAyB,EAClBA,iBAAmB,KAG1BA,sBAAmB,GACnBA,qBAAkB,IAClBA,aAAmB,CACjBgI,UAAU,EACVogB,MAAO,EACPC,KAAM,EACNC,KAAM,IACNC,WAAY,CAAC,EAAG,GAAK,GACrBC,iBAAiB,EACjBC,UAAYroB,GACHA,EAAMugB,QAAQ,IAIzB3gB,cAAoB,CAClBgI,UAAU,EACVogB,MAAO,EACPC,KAAM,EACNC,KAAM,KACNC,WAAY,CAAC,EAAG,GAAK,GACrBC,iBAAiB,EACjBC,UAAYroB,GACHA,EAAMugB,QAAQ,IAIzB3gB,cAAoB,CAClBgI,UAAU,EACVogB,MAAO,EACPC,KAAM,IACNC,KAAM,GACNC,WAAY,CAAC,EAAG,GAAI,KACpBC,iBAAiB,EACjBC,UAAYroB,GACHA,EAAMugB,QAAQ,GAOrB,CAEJlhB,WACEO,KAAK+c,YAAc/c,KAAK6c,iBAAiBG,OAQ3C,CACA0L,YAAYC,GACV,GAAIA,EAAQ3gB,SAAY,CACtB,MAAMA,EAAW2gB,EAAQ3gB,SAAY4gB,aACrC9nB,QAAQC,IAAI,YAAYiH,KACxBhI,KAAK6oB,QAAU1nB,OAAOgP,OAAO,GAAInQ,KAAK6oB,QAAS,CAAC7gB,aAChDhI,KAAK8oB,SAAW3nB,OAAOgP,OAAO,GAAInQ,KAAK8oB,SAAU,CAAC9gB,aAClDhI,KAAK+oB,SAAW5nB,OAAOgP,OAAO,GAAInQ,KAAK+oB,SAAU,CAAC/gB,YAAS,CAE/D,CAGIghB,gBACF,OAAOxoB,OAAOR,KAAKipB,kBAAmB,CAACC,WAAYlpB,KAAK+c,YAAYgB,SAASxR,OAAUnM,SAAS+oB,QAClG,CAEIC,uBACF,OAAOppB,KAAK+c,YAAYgB,SAASxR,OAAUnM,KAC7C,CAEA6c,gBACEjd,KAAKkd,yBAAyBnK,KAAK/S,KAAKmd,WAC1C,CAEAkM,eAAe/iB,GAKb,MAAMlG,EAAQkG,EAAEof,OAAOtlB,MAMvB,OALAI,SAASR,KAAK+c,YAAY3c,MAAO,CAACwF,EAAGC,KAAO7F,KAAK+c,YAAYW,cAAc7X,EAAC,GAE5E7F,KAAK+c,YAAYuM,WAAW,OAAQtpB,KAAK8c,GAAGE,QAAQ,eACpDhd,KAAK+c,YAAYuM,WAAW,SAAUtpB,KAAK8c,GAAGE,QAAQ5c,IAE9CA,GACN,IAAK,mBACHJ,KAAK+c,YAAYuM,WAAW,qBAAsBtpB,KAAK8c,GAAGE,QAAQ,iBAClEhd,KAAK+c,YAAYuM,WAAW,aAActpB,KAAK8c,GAAGE,QAAQ,WAC1Dhd,KAAK+c,YAAYuM,WAAW,gBAAiBtpB,KAAK8c,GAAGE,QAAQ,IAC7Dhd,KAAK+c,YAAYuM,WAAW,YAAatpB,KAAK8c,GAAGE,QAAQ,KACzD,MAEF,IAAK,UACHhd,KAAK+c,YAAYuM,WAAW,iBAAkBtpB,KAAK8c,GAAGE,QAAQ,WAC9Dhd,KAAK+c,YAAYuM,WAAW,YAAatpB,KAAK8c,GAAGE,QAAQ,KACzD,MAEF,IAAK,SACHhd,KAAK+c,YAAYuM,WAAW,kBAAmBtpB,KAAK8c,GAAGE,QAAQ,MAC/Dhd,KAAK+c,YAAYuM,WAAW,aAActpB,KAAK8c,GAAGE,QAAQ,MAC1Dhd,KAAK+c,YAAYuM,WAAW,YAAatpB,KAAK8c,GAAGE,QAAQ,MACzD,MAEF,IAAK,YACHhd,KAAK+c,YAAYuM,WAAW,kBAAmBtpB,KAAK8c,GAAGE,QAAQ,OAC/Dhd,KAAK+c,YAAYuM,WAAW,aAActpB,KAAK8c,GAAGE,QAAQ,OAC1Dhd,KAAK+c,YAAYuM,WAAW,oBAAqBtpB,KAAK8c,GAAGE,QAAQ,IAOvE,EAhIWmL,SAAmC,oCAAnCA,GAAmCnnB,0BAAnCmnB,EAAmC,sBAAnCA,EAAmCzoB,+/FDXhDC,WACEA,iBAA6B,UAA7BA,CAA6B,aAG4CA,8BAAiBA,QACtFA,iBAAuE,aACjCA,6BAAiBA,QACrDA,2BAKAA,wBAKFA,QACAA,kBAA4E,eACfA,gCAAS6G,iBAAe,GACnF7G,YAIJA,oCA6DAA,oCA+BAA,oCAuBAA,oCAoCFA,QACFA,eAhLcA,iCAOGA,kDAKHA,mDAO+EA,sCAK1EA,+DA6DAA,qDA+BAA,sDAuBAA,k5CChINwoB,CAAmC,+GCkGtCxoB,eACEA,kCAAqBA,cAAKA,mCAC5BA,mCA6BFA,oBACEA,2BACFA,+BADEA,6HAGAA,oBACEA,2BACFA,+BADEA,kHAGJA,oBACEA,iDACFA,0DA1FNA,iBACEA,kBAAqB,WACSA,6BAAiBA,QAE7CA,kBAAmB,eAEsDA,gCAAS,IAAI,GAIlFA,0BAEEA,mBAC+I,aAGjJA,UAEFA,0BAAgE,YAAhEA,CAAgE,YAErDA,0BAAaA,QACpBA,mBACAA,mBAAuB,gBAGLA,yDAASA,yBAAgB,GACvCA,mBACFA,QACAA,sBAEgBA,yDAASA,0BAAiB,GACzCA,mBACDA,QACAA,sBAEgBA,yDAASA,6BAAoB,GAC5CA,sBACDA,cAINA,mBACAA,wBAIOA,2DAAUA,8BAA0B,GAJ3CA,QAMAA,6CAMAA,sBAAuEA,2DAASA,gBAAgB,GAG9FA,2BAEEA,oBAC+I,cAGjJA,UAEFA,mBACFA,UAEFA,2BAA2CA,gEAAeA,yBAAqB,GAE7EA,wBASAA,mBACEA,4BAGAA,6CAKAA,4BAGFA,UAEJA,wDAtFcA,wCAiBAA,mGAKAA,kGAKAA,kGAoB0FA,qCAAoB,gBAiB9GA,gFAIAA,mCAA2B,qBAA3BA,CAA2B,w5CAK3BA,mEAAiD,cAQjDA,gFAaRA,wDA2BAA,oBACEA,iDACFA,kCA4BEA,sEAAeA,qCAA6B,kCAehDA,mBAA+E,YAA/EA,CAA+E,cAErCA,sBAAUA,sDAiBpDA,oBACEA,SACAA,sBAAsBA,iEAASA,4BAAmB,GAChDA,oBAAUA,kBAAMA,WAAW,uCAF7BA,gCACoDA,6DAMxDA,oBACEA,iDACFA,0DA8BIA,iDAI2BA,4FAA4BA,kCAAyB,GAAEA,kEAJXA,qBAAsB,eAAtBA,CAAsB,qBAAtBA,CAAsB,0FAK7FA,yDAGmCA,4FAA4BA,kCAAyB,GAAEA,kEAHJA,qBAAsB,eAAtBA,CAAsB,wEAI5GA,0DAKoCA,4FAA4BA,kCAAyB,GAAEA,kEALRA,qBAAsB,eAAtBA,CAAsB,qBAAtBA,CAAsB,wCAAtBA,CAAsB,gGAlB3GA,mBAAoJ,aAGhJA,2BAEEA,oBAEFA,UAEFA,gDAKAA,wDAIAA,yDAWFA,sDA7BwHA,mCAS1FA,0EAKQA,iFAICA,qGAc3CA,oBACEA,iDACFA,0DA2CIA,wBAAsC,gBACgBA,yDAASA,mBAAU,GAAGA,wBAAWA,SAAS,mDAG9FA,0BAA8D,WAA9DA,CAA8D,gBAQxDA,2BACEA,oBACFA,UAEFA,8BAQAA,mBAA2B,WACAA,0DAASA,mBAAU,GAAEA,yBAAaA,aAAI,0BAlBzDA,0IAYAA,mIAWVA,8BAMEA,2BACEA,oBACFA,iCAPMA,oKA3BVA,0BAyBAA,8EAzBMA,0BAAiB,sCAkDvBA,2BAEEA,oBAEFA,gCAGAA,2BAEEA,oBAEFA,mCAQIA,cAAwDA,SAAWA,kCAAXA,6CAD1DA,cACEA,wBACFA,+BAD0BA,qEAxBlCA,uBAAwG,WAAxGA,CAAwG,eAAxGA,CAAwG,cAGhEA,SAAiCA,QAEnEA,0BAOAA,0BAMFA,UAEFA,mBAA0B,aAEtBA,+BAKFA,6CA3BiFA,sBAG7CA,sDAE5BA,mCAOAA,4DAuBNA,2BAEEA,oBAEFA,gCACAA,2BAEEA,oBAEFA,mCAOIA,cAA0DA,SAAWA,kCAAXA,6CAD5DA,cACEA,wBACFA,+BAD0BA,uEApBlCA,uBAA4G,WAA5GA,CAA4G,eAA5GA,CAA4G,cAGnEA,SAAqCA,QACxEA,0BAKAA,0BAKFA,UAEFA,mBAA0B,aAEtBA,+BAKFA,6CAvBqFA,sBAGhDA,0DAC7BA,mCAKAA,+DAmBdA,mBAEgD,eAE5CA,iDACFA,gCAHGA,uFAUHA,qBACEA,uDAA0CA,iBAA6BA,0DAASA,8BAAqB,GAAEA,gBAAIA,QAAKA,+BAElHA,gCACAA,qBACEA,iDACFA,mCAVFA,mBAA8G,YAA9GA,CAA8G,cAEpEA,sBAAUA,UAElDA,4BAIAA,4BAGFA,8BAXmEA,6CAIzDA,4CAIAA,qFAgBFA,gCAQkBA,sEAAqBA,0BAAiB,EAAtCA,CAAuC,kEAChBA,4BAAmB,EAD1CA,CAAuC,iEAEjBA,+BAAsB,GAAEA,iCAV9CA,oCAA4B,8BAA5BA,CAA4B,kCAA5BA,CAA4B,6BAA5BA,CAA4B,gBAA5BA,CAA4B,wCAA5BA,CAA4B,+DARlDA,kBAAmE,WACnDA,yBAAaA,QAC3BA,kCAkBFA,cApBoCA,6DAwBhCA,sDAAkBA,oCAA4B,8BAA5BA,CAA4B,kCAA5BA,CAA4B,sDAHlDA,kBAAmE,WACnDA,yBAAaA,QAC3BA,kCAOFA,cAToCA,6DAahCA,sDAAkBA,6CAAqC,uCAArCA,CAAqC,2CAArCA,CAAqC,sDAH3DA,kBAAqF,WACrEA,qCAAyBA,QACvCA,kCAOFA,cAT6CA,uEAoBjCA,sBACsBA,SAAMA,kCAApBA,iBAAcA,oDAStBA,sBAAuDA,SAAMA,kCAApBA,iBAAcA,oDASvDA,sBACsBA,SAAMA,kCAApBA,iBAAcA,iDAM5BA,mBAA+E,YAA/EA,CAA+E,cAErCA,sBAAUA,oCAS1CA,oBAAgGA,gCAAoBA,gCAElHA,oBAA+BA,2BAAeA,kDAPxDA,mBAAyG,YAAzGA,CAAyG,YAElFA,SAAeA,QAClCA,mBAA6B,aAEzBA,2BACAA,6CAGAA,qBAA0CA,oEAAaA,yBACtE,GADeA,QACAA,uBAAyDA,oFAASA,qCAAgC,GAAEA,mBAAMA,cAKhHA,oBACFA,+CAduBA,gCAGRA,yDAA2C,cAIRA,2CAM3CA,kCAAgB,0CAfvBA,iDAAwEA,2DAkB1EA,mBAAgG,SACzFA,6BAAiBA,oDAzD1BA,mBAAqE,YAArEA,CAAqE,YAArEA,CAAqE,cAGhCA,iBAAKA,QACpCA,sBAAgEA,oGAAiC,sDAC/EA,iCAA6B,GAC7CA,6BAEFA,UAIFA,mBAAwC,cACPA,kBAAMA,QACrCA,uBAAgEA,oGAAiC,sDAC/EA,+BAA2B,GAC3CA,8BACFA,UAIFA,oBAAwC,eACPA,mBAAMA,QACrCA,uBAAgEA,oGAAiC,sDAC/EA,+BAA2B,GAC3CA,8BAEFA,YAKJA,2BAKAA,8CAmBAA,0BAGFA,6CAvDsEA,gDAEvCA,4CAQuCA,gDAEvCA,yCAOuCA,gDAEvCA,6FAOvBA,qCAAmB,cAwBnBA,yFA5DZA,kBACsC,WACtBA,4BAAgBA,QAC9BA,mCA8DFA,cAhEIA,gFAoEAA,gCAKkBA,wEAAuBA,4BAAmB,GAAEA,iCAL5CA,qCAA6B,+BAA7BA,CAA6B,mCAA7BA,CAA6B,sDAHnDA,kBAAqE,WACpDA,4BAAeA,QAC9BA,kCAQFA,cAVqCA,8EA9GzCA,mBACyF,gBAC9DA,uFACvBA,yBAqBAA,yBAUAA,yBAUAA,yBAkEAA,yBAWFA,QAEAA,mBACFA,2CA1H2BA,oCAAqB,eAArBA,CAAqB,oBACvCA,iDAqBAA,iDAUAA,0DAUAA,2FAkEAA,kDAaFA,yDAsCCA,mBAAiE,YAAjEA,CAAiE,cAEvBA,sBAAUA,sDAUpDA,kBAAwHA,SACtHA,sBAAkDA,4FAASA,+BAAuC,GAElGA,SAAS,wCAH6GA,+BAE9GA,gEANdA,mBAA0F,YAItFA,yBAKFA,iCALoBA,yEAwBhBA,yBAEEA,wFACFA,kDAxERA,mBAA0B,YAEtBA,SACFA,QACAA,sBACQA,yDAASA,6BAAoB,GACrCA,UAGFA,mBAAwB,YAAxBA,CAAwB,WAAxBA,CAAwB,cAIhBA,2BACFA,UAEFA,mBAAsC,oBAQ7BA,2EAAcA,2CAA4D,EAA1EA,CAA2E,+DACnEA,qCAAkD,EAD1DA,CAA2E,6DAE1C,GAAIA,oBAA8B,GAAE,GAR5EA,UAcFA,oBACEA,0BAKFA,UAGFA,2BAWAA,oBAAqE,kBAArEA,CAAqE,iBAEjBA,qEAASA,6BAAoC,GAElEA,6BAC3BA,QACAA,uBAGEA,4BAEEA,qBAAiF,eAGnFA,UAEFA,8CAMAA,4BAAuB,iBAC8BA,qEAASA,8BAAqC,GACjGA,uCACFA,QACEA,uBAAqEA,yDAASA,+BAAsB,GAClGA,qBACFA,eAAS,iDA9EbA,0EAUSA,+CAOAA,wCAAuB,kCAAvBA,CAAuB,mBAAvBA,CAAuB,cAAvBA,CAAuB,qBAAvBA,CAAuB,oEAAvBA,CAAuB,iCAcxBA,mCAQJA,+CAkBMA,yEAgCdA,mBAA0B,YACuBA,+BAAmBA,QAClEA,sBAA2DA,8DAAS4pB,iBAAe,eAAcvoB,mBAAY,EAAK,GAClHrB,UAEFA,mBACEA,+BACFA,QACAA,8CAiBMA,cAAoDA,SAAcA,kCAAdA,0DAHxDA,eAAoD,MAApDA,CAAoD,YACvCA,+FAAmFA,UAC9FA,cACEA,wBACFA,QACAA,aAAG,YAAQA,gEAAoDA,mCAFxCA,8EAQrBA,cAAoDA,SAAcA,kCAAdA,0DAHtDA,aAAG,YAAQA,wIACeA,UAC1BA,cACEA,wBACFA,QACAA,aAAG,YAAQA,gEAAoDA,iCAFxCA,6FAjB3BA,mBAA0B,YACiBA,yBAAaA,QACtDA,sBAA2DA,8DAAS6pB,iBAAqB,eAAcxoB,mBAAY,EAAK,GACxHrB,UAEFA,mBACEA,yBAOAA,6CASAA,mBACEA,qBACAA,uBACEA,4BAEEA,qBACgK,eAGlKA,cAINA,4BAA0B,iBACgCA,2DAASA,gBAAqB,gBAAe,GAAEA,gBACvGA,QACAA,uBAA6CA,8DAAS6pB,eAAmB,YAAa7pB,uBAAc,GAAGA,wDAEvGA,SAAS,oCAlCHA,oCAAkB,cAiB0CA,sCAC9BA,0KCtrBlCqK,GAAU,GAAGpK,wBAOZ,IAAM6pB,GAAwB,MAA/B,MAAOA,EAiJXjqB,YACS0S,EACCnS,EACA+c,EACA4M,EACArb,EACAgF,EACAsW,EACAzW,EACA2E,EACA+R,EACAzW,EACA0W,EACAzW,GAZDpT,oBACCA,YACAA,UACAA,4BACAA,wBACAA,qBACAA,qBACAA,aACAA,cACAA,oBACAA,gBACAA,6BACAA,oBAvJVA,YAAS,mBAECA,eAAY,IAAIoS,MAEhBpS,oBAAiB,IAAIoS,MAErBpS,kBAAe,IAAIoS,MAO7BpS,kBAAe,IAAIue,KAEnBve,aAA+BA,KAAKqT,cAAc7E,QAClDxO,YAA6BA,KAAKqT,cAAc5E,OAChDzO,iBAAkCA,KAAKqT,cAAcmL,YACrDxe,aAAsCA,KAAKqT,cAAcyW,QAEzD9pB,YAAkB,GAClBA,WAAgB,GAChBA,gBAAa,GAGbA,gCAA6B,GAM7BA,iBAAc,CAEZ+pB,qBAAqB,EACrBre,SAAS,EACTse,SAAS,EACTne,YAAY,EACZ7E,aAAa,GAEfhH,gCAAsC,CACpCwoB,iBAAiB,EACjBxgB,UAAU,EACViiB,WAAY,CACV,CAAC7pB,MAAO,GACR,CAACA,MAAO,GACR,CAACA,MAAO,IACR,CAACA,MAAO,IACR,CAACA,MAAO,IACR,CAACA,MAAO,IACR,CAACA,MAAO,MAIZJ,uBAAoH,GACpHA,qCAAkI,GAClIA,uBAAoH,GAEpHA,kBAAuB,EACvBA,oBAAwB,GAIxBA,4BAAyB,CACvBkqB,uBAAwB,GACxBC,wBAAyB,GACzBC,mBAAoB,IAGtBpqB,gBAAa,GAAGJ,oBAEhBI,uBAA2D,GAC3DA,aAAkB,EAClBA,qBAA0B,EAC1BA,eAAoB,UAIpBA,gBAAY,EACZA,cAAU,EACVA,wBAAoB,EACpBA,sBAAkB,EAClBA,uBAAmB,EACnBA,gBAAY,EAEZA,cAAmB,EAEnBA,kBAAc,EACdA,qBAA2E,GAC3EA,yBAAsB,GACtBA,yBAAsB,GACtBA,yBAAsB,GACtBA,qBAAkB,GAElBA,0BAA8B,GAE9BA,oBAAwC,CAAC,IAEzCA,yBAA6B,GAE7BA,mBAAuC,CAAC,IAExCA,kCAAsC,GAEtCA,4BAAgD,CAAC,IAEjDA,yBAA6B,GAE7BA,mBAAuC,CAAC,IAExCA,kBAAsB,GAGtBA,mBAA0B,GAC1BA,qBAA4B,GAC5BA,iBAAc,GAGdA,gBAAY,EACZA,mBAAe,EAEfA,kBAAyB,GACzBA,gBAAY,EAGZA,mBAAgB,IAChBA,WAAe,GACfA,cAAW,GAEXA,iBAAsB,GAIbA,eAA2BmR,QAC5BnR,wBAAoC,IAAIqqB,IAEvCrqB,oBAAgCmR,QACjCnR,wBAAoC,IAAIqqB,IAkmChDrqB,YAAU0T,GACRA,EAAM/J,QACJgK,MAAa,MAAI,EACjB/J,SAAoB,EACpBa,KAAI,IAAMzK,KAAK4T,WAAY,IAAI,EAC/BC,MAAU3C,GAEClR,KAAK0pB,qBAAqBzY,OAAOC,GAAMvH,QAC5Cc,KAAI,IAAMzK,KAAK8T,cAAe,IAAK,EACnCC,MAAW,KACT/T,KAAK8T,cAAe,KACb3C,MAAG,SAEf,EAEH1G,KAAI,IAAMzK,KAAK4T,WAAY,IAG/B5T,qBAAmBgU,GAIVA,EAAOC,SAASnO,OAAS,EAAI,GAAGkO,EAAOzI,YAAYyI,EAAOC,YAAcD,EAAOzI,KAvmCxF,CAEA9L,YACE,EAAI6qB,SACFxpB,QAAQC,IAAI,gBAEZD,QAAQC,IAAI,eAGdf,KAAKuqB,cAELvqB,KAAKoL,UAAYpL,KAAK2pB,cAAc3M,QAAQ9c,IAAIF,KAAKwqB,eACrDxqB,KAAKyqB,2BAA6BtpB,OAAOgP,OAAO,GAAInQ,KAAKyqB,2BAA4B,CAACziB,SAAUhI,KAAK0qB,gBAErG1qB,KAAKwe,YAAY7U,QAAKqX,KAAUhhB,KAAKihB,eAAe9gB,UAAUC,IAC5DU,QAAQC,IAAI,cAAcX,KAC1BJ,KAAK4K,WAAaxK,EAClBJ,KAAK2qB,YAAc,GAAGxS,OAAOhF,SAASyX,mBAAmBxqB,MAE3DJ,KAAKwO,QAAQ7E,QAAKqX,KAAUhhB,KAAKihB,eAAe9gB,UAAUC,IACxDU,QAAQC,IAAIX,GACZJ,KAAKyI,OAASrI,EACdJ,KAAK6qB,cAAgB7qB,KAAKyI,OAAOzI,KAAKkP,QAAQ/H,eAAgBC,OAC9DpH,KAAK8qB,gBAAkB9qB,KAAKyI,OAAOzI,KAAKkP,QAAQ/H,eAAgBE,WAElErH,KAAKyO,OAAO9E,QAAKqX,KAAUhhB,KAAKihB,eAAe9gB,UAAUC,IACvDU,QAAQC,IAAI,UACZD,QAAQC,IAAIX,GACZJ,KAAKgF,MAAQ5E,EACbJ,KAAK6H,UAAY7H,KAAKgF,MAAMhF,KAAKkP,QAAQrH,UAEzC,MAAMkjB,EAAsB/qB,KAAKgF,MAAMhF,KAAKkP,QAAQyB,gBAAgBqa,uBAEpEhrB,KAAKirB,uBAAuBf,uBAAyB,GAAGtqB,uCAAoDmrB,IAC5G/qB,KAAKirB,uBAAuBd,wBAA0B,GAAGvqB,wCAAqDmrB,IAC9G/qB,KAAKirB,uBAAuBb,mBAAqB,GAAGxqB,uCAAoDmrB,IAGpG/qB,KAAKgF,MAAMhF,KAAKkP,QAAQjP,UAC1BD,KAAKC,SAAU,EACfirB,cAAclrB,KAAKmrB,iBAIrBnrB,KAAKorB,gBAAkB5qB,SAAOR,KAAKgF,MAAO,CAAC/E,SAAS,IAMpDa,QAAQC,IAAI,mBACZD,QAAQC,IAAIf,KAAKorB,gBAAe,GAIlCprB,KAAK8pB,QAAQngB,QAAKqX,KAAUhhB,KAAKihB,eAAe9gB,UAAUC,IACxDU,QAAQC,IAAI,UACZD,QAAQC,IAAIX,GACZJ,KAAKmO,OAAS/N,IAGhBJ,KAAKqrB,mBAAqBrrB,KAAKsrB,OAAOnrB,UAAU,IAAMH,KAAKurB,aAC3DvrB,KAAKwrB,mBAAqBxrB,KAAKyrB,YAAYtrB,UAAU,IAAMH,KAAK0rB,YAEhE1rB,KAAK2rB,YAEF3rB,KAAKoL,UAAUlL,IAAI,sBAAsBE,OAC1CJ,KAAK4rB,eAAe5rB,KAAKoL,UAAUlL,IAAI,sBAAsBE,MAWjE,CAEA4hB,cACEkJ,cAAclrB,KAAKmrB,gBACnBD,cAAclrB,KAAKqO,iBAAiB8c,gBACpCnrB,KAAKihB,aAAalX,OAClB/J,KAAKihB,aAAaiB,WAElBliB,KAAKqrB,mBAAmBpJ,cACxBjiB,KAAKwrB,mBAAmBvJ,aAC1B,CAEAJ,kBACEgK,WAAW,KACGC,QAAQ3iB,OAAO4iB,KAEpB/rB,KAAKurB,WAAS,EACpB,EACL,CAEA7C,YAAYC,GACPA,EAAQqD,WAAWpD,eACpB9nB,QAAQC,IAAI4nB,EAAQqD,UAAUpD,cAC9B9nB,QAAQC,IAAI,sBACZf,KAAKC,SAAU,EACfD,KAAKisB,sBAAsBtD,EAAQqD,UAAUpD,cAEjD,CAEIjT,2BACF,OAAO3V,KAAK0L,QAAQtL,MAAM6F,IAAM2P,GAA0BA,EAAErK,OAAQC,KAAK,KAC3E,CAEIqK,gCACF,OAAO7V,KAAK8V,aAAa7P,IAAM2P,GAA0BA,EAAErK,OAAQC,KAAK,KAC1E,CAEIM,uBACF,OAAO9L,KAAKoL,UAAUlL,IAAI,mBAC5B,CAEIwL,cACF,OAAO1L,KAAKoL,UAAUlL,IAAI,UAC5B,CAEIwqB,oBACF,OAAO1qB,KAAKoL,UAAUlL,IAAI,kBAAkBE,KAC9C,CAEI8N,wBACF,OAAOlO,KAAKoL,UAAUlL,IAAI,sBAAsBE,KAClD,CAEIwL,oBACF,OAAO5L,KAAKoL,UAAUlL,IAAI,kBAAkBE,KAC9C,CASI8rB,mBACF,OAAOlsB,KAAKyI,OAAOzI,KAAKkP,QAAQnI,kBAAkB2E,SAAS6L,MAAM,IACnE,CAEI4U,8BACF,OAAOnsB,KAAKyI,OAAOzI,KAAKkP,QAAQnI,kBAAkB4E,oBACpD,CAEAygB,MAAMC,EAAeC,GACnB,OAAQ,IAAI3Q,MAAM2Q,EAAMD,EAAQ,GAAIE,UAAKxkB,GAAW9B,IAAI,CAACzF,EAAGqZ,IAAMA,EAAIwS,EACxE,CAEA9B,cACEvqB,KAAKwsB,aAAc,EACnBxsB,KAAKD,KAAKG,IAAW8J,IAClBL,OAAOxJ,UACRuK,IAEE1K,KAAKysB,eAAiB/hB,EAAKmB,WAE3B7L,KAAK0sB,kBAAoBlsB,WAASR,KAAKysB,eAAgB,CAAC5nB,MAAS,YACjE7E,KAAK2sB,gCAAkCnsB,WAASR,KAAKysB,eAAgB,CAAC5nB,MAAS,UAAWskB,UAAY,IACtGnpB,KAAKipB,kBAAoBzoB,WAASR,KAAKysB,eAAgB,CAAC5nB,MAAS,eACjE/D,QAAQC,IAAIf,KAAKipB,mBACjBjpB,KAAKwsB,aAAc,GAGzB,CAEAd,WACE1rB,KAAK4sB,uBACL5sB,KAAK6sB,UAAU9Z,KAAK/S,KAAKkP,MAC3B,CAEAqc,YACE,GAAGvrB,KAAKoL,UAAUiQ,QAIhB,OAFArb,KAAKkS,aAAaR,IAAI,gFAAgF1R,KAAKiJ,cAAcmM,4CAA4CpV,KAAKkO,kBAAkBpI,OAAOsP,mBAAoB,qBACvNpV,KAAKyU,KAAKzU,KAAK0U,YAIjB,MAAMoY,EAAYtsB,SAAOR,KAAKgF,MAAMC,MAAMjF,KAAKkP,MAAM,GAAK0G,GAAMA,EAAE/N,WAAa+N,EAAE3V,SAC9ED,KAAKyI,OAAO3C,OAAS,GAAKgnB,EAC3B9sB,KAAKyU,KAAKzU,KAAK+sB,eAEf/sB,KAAKgtB,mBAAoB,EACT,IAAbhtB,KAAKkP,MACNlP,KAAKitB,QAELjtB,KAAKktB,SAGX,CAGAN,uBAEE,IAAI7R,EAAc,GACdoS,EAAc,GAC0C,CAC1D,MAAOpD,sBAAqBre,WAAY0hB,GACxCrS,EAAMgP,EACNoD,EAAMzhB,GAQQ1L,KAAKoL,UAAUhL,MAAM8N,mBACP,IAAblO,KAAKkP,QACpBlP,KAAKqT,cAAczC,qBAAqBmK,GACxC/a,KAAKoL,UAAU2S,SAAS7P,kBAAkBmf,SAAStS,IAIrD,MAAMuS,EAAc,CAAChiB,EAAgBkM,EAAU,GAAIC,EAAQ,OAElDzX,KAAK8c,GAAGjY,MAAM,CACnB0G,MAAO,CAACD,GACRkM,QAAS,CAACA,GACVC,MAAO,CAACA,KAGa,IAAtBzX,KAAK0L,QAAQ5F,QACdtF,YAAU2sB,EAAI5V,MAAM,KAAOjM,IACzBtL,KAAK0L,QAAQ7K,KAAKysB,EAAYhiB,GAAO,EAI3C,CAEAiiB,eACI,IACIC,EADAC,EAAWjtB,UAAQR,KAAKkP,MAAQ,EAAGlP,KAAKyI,OAAO3C,QAEnDhF,QAAQC,IAAI0sB,GACZjtB,YAAUitB,EAAU5T,IAClB2T,EAAWxtB,KAAKgF,MAAM6U,GACtB,MAAMuM,EAAkB,IACnBoH,EACHvtB,SAAS,EACT4H,WAAW,GAEb7H,KAAKqT,cAAcjD,WAAWgW,EAAiBvM,EAAC,GAElD7Z,KAAK0tB,UAAY1tB,KAAKqmB,mBAAqBrmB,KAAKurB,WACpD,CAEA0B,QAME/M,EAAEmD,GAAGC,UAAUC,IAAItS,OAAS,GAE5B,MAAMtK,EAAe3G,KAAKkP,MAAQ,EAE5B1G,EAAoC,CAAC7B,EAAcA,GAEzD3G,KAAK4sB,uBAEL,IAAI1Y,EAAYlU,KAAKoL,UAAUhL,MAAM8N,kBAGrC,MAAMyf,EAAkB3tB,KAAKqO,iBAAiBlD,iBAAiBnL,KAAKoL,YAG5DpE,eAAgBhH,KAAKyI,OAAOzI,KAAKkP,OAYnCf,EAAS,CACb5F,YAAe,GACfqlB,eAAkB5tB,KAAK6tB,UAAU9P,SAASxZ,KAAQnE,MAClD0tB,MAAS9tB,KAAK6tB,UAAU9P,SAAS+P,MAAS1tB,MAC1CoI,gBAAmBA,EACnBC,OAAU,CAfK,CACf3B,mBAAsB,oBACtBH,aAAgBA,EAChBC,WAAc,aACdC,WAAc,OACdkjB,oBAAuB7V,EACvBnN,iBAAoB4mB,EACpB3mB,YAAeA,KAcX+mB,EAA6B5sB,OAAOgP,OAAOxI,GAAyB,CACxE1H,SAAS,EACT4H,WAAW,EACXC,gBAAiBtH,YAAUwG,GAAaE,WAE1ClH,KAAKqT,cAAc3E,UAAUP,GAC7BnO,KAAKqT,cAAcjD,WAAW2d,EAA4B/tB,KAAKkP,OAC/DlP,KAAKqT,cAAcvD,6BAA6B6d,EAAiB3tB,KAAKkP,OAItElP,KAAKguB,gBAAgB7f,EACvB,CAGA+e,SAEE,MAAM/e,EAASnO,KAAKmO,OACdxH,EAAe3G,KAAKkP,MAAQ,EAC5B+e,EAAqBjuB,KAAKkP,MAG1B1G,EAAoC,CAAC7B,EAAcA,GAEzD3G,KAAK4sB,uBAGL,MAAMe,EAAkB3tB,KAAKqO,iBAAiBlD,iBAAiBnL,KAAKoL,WAC9D8iB,EAAeluB,KAAKyI,OAAOzI,KAAKkP,QAG9BlI,eAAgBhH,KAAKyI,OAAOzI,KAAKkP,OAEnCF,EAAe,IAChBkf,EACHhjB,gBAAYnD,EACZpB,aAAcA,EACdsnB,mBAAoBA,EACpBlnB,iBAAkB4mB,EAClB3mB,eAIFmH,EAAO1F,OAAOzI,KAAKkP,OAASF,EAC5Bb,EAAO3F,gBAAkBA,EACzB2F,EAAOyf,eAAiB5tB,KAAK6tB,UAAU9P,SAASxZ,KAAQnE,MACxD+N,EAAO2f,MAAQ9tB,KAAK6tB,UAAU9P,SAAS+P,MAAS1tB,MAKhD,MAAM+tB,EAAkBhtB,OAAOgP,OAAOxI,GAAyB,CAC7D1H,SAAS,EACT4H,WAAW,EACXC,gBAAiBtH,YAAUwG,GAAaE,WAG1ClH,KAAKqT,cAAc3E,UAAUP,GAC7BnO,KAAKqT,cAAcjD,WAAW+d,EAAiBnuB,KAAKkP,OACpDlP,KAAKqT,cAAcvD,6BAA6B6d,EAAiB3tB,KAAKkP,OAEtElP,KAAKguB,gBAAgB7f,EACvB,CAEA8d,sBAAsB/gB,GAEpBlL,KAAKgtB,mBAAoB,EAEzBhtB,KAAKouB,oBAAsB,GAC3BpuB,KAAKquB,sBAAwB,KAC7BruB,KAAKsuB,cAAgB,CAAC,IAEtBtuB,KAAKuuB,eAAiB,CAAC,IACvBvuB,KAAKwuB,uBAAyB,CAAC,IAC/BxuB,KAAKsuB,cAAgB,CAAC,IACtBtuB,KAAKynB,cAAgB,CAAC,IACtBznB,KAAKyuB,gBAAkB,GAEvBzuB,KAAKgsB,UAAY9gB,EACjBpK,QAAQC,IAAImK,GACZlL,KAAK0uB,YAAcluB,cAAYR,KAAK0uB,YAAa,KAAM,GACvD,IAAIC,EAAY,EAEhB3uB,KAAKmrB,eAAiByD,YAAY,KAChC5uB,KAAKqO,iBAAiBpD,WAAW,GAAGC,qBAA8B/K,UAChE,CACE4J,KAAMW,IAER,GADA5J,QAAQC,IAAI2J,GACW,UAAnBA,EAAKmkB,QAAyBnkB,EAAKtD,OAAW,CAGhDpH,KAAK6H,WAAY,EACjB7H,KAAKC,SAAU,EACf,MACM6uB,EAAgB3tB,OAAOgP,OADZnQ,KAAKgF,MAAMhF,KAAKkP,OACa,CAC5CrH,UAAW7H,KAAK6H,UAChB5H,QAASD,KAAKC,UAEhBD,KAAKqT,cAAcjD,WAAW0e,EAAe9uB,KAAKkP,OAClDgc,cAAclrB,KAAKmrB,gBACnBnrB,KAAK+uB,cAAY,CAyNnB,GAvNIrkB,EAAKpK,KAAQ+G,UAAavB,SAE5B9F,KAAK8qB,gBAAkBpgB,EAAKpK,KAAQ+G,UAElCqD,EAAKpK,KAAQ8G,QAAWtB,SAE1B9F,KAAK6qB,cAAgBngB,EAAKpK,KAAQ8G,QAEb,SAAnBsD,EAAKmkB,SACP3D,cAAclrB,KAAKmrB,gBAEnBnrB,KAAKqO,iBAAiBpD,WAAWC,GAAY/K,UAAUuK,IAErD5J,QAAQC,IAAI2J,GACZ1K,KAAKgvB,aAAe,CAAC,IAErB,MAAM1uB,EAAOoK,EAAKpK,KAAQ2uB,QAE1BjvB,KAAKkvB,OAAS5uB,EAAK,GAAGgM,KACtB9L,YAAUF,EAAM2G,IA6Jd,GA1JmB,kBAAfA,EAAMqF,OACRtM,KAAKquB,sBAAwB7tB,QAAMyG,EAAMkoB,cAAe,CAACzP,EAAQ7F,KAC3D6F,EAAO0P,eAAiBC,OAAOC,SAAS5P,EAAO6P,qBACjDvvB,KAAKouB,oBAAoB1O,EAAO6P,mBAAqB,CAAC1V,EAA4B,cAAzB6F,EAAO0P,cAAgC,MAAQ,SAE1G1P,EAAOjM,MAAW,GAAGiM,EAAOkH,eAC5BlH,EAAOpf,KAAU,GAAGof,EAAOnb,OAC3B,IAAI4V,EAASuF,EAAOvF,OAEpBuF,EAAOzF,UAAe,GAAGE,KAAUuF,EAAOnb,OAG1C,IAAIirB,EAAarV,EAAO5C,MAAM,KAE9B4C,SAASqV,EAAWA,EAAW1pB,OAAS,GAExC4Z,EAAOpf,KAAU,GAAG6Z,KAAUuF,EAAOnb,OAGrCmb,EAAO5F,aAAqC,QAAnB4F,EAAOpT,KAAoB,CAClD8N,SAAUsC,IACVrC,SAAUqC,IACVkF,SAAS,GACP,CACFyD,eAAgB,GAChBoK,UAAW,KACX1V,eAAgB,GAChB6H,SAAS,GAEJlC,IAGL1f,KAAKquB,wBACPruB,KAAKsuB,cAAgBrnB,EAAMuY,aAMZ,8BAAfvY,EAAMqF,OACRtM,KAAK0vB,+BAAiClvB,QAAMyG,EAAMkoB,cAAe,CAACzP,EAAQ7F,KACpE6F,EAAO0P,eAAiBC,OAAOC,SAAS5P,EAAO6P,qBACjDvvB,KAAKwuB,uBAAuB9O,EAAO6P,mBAAqB,CAAC1V,EAA4B,cAAzB6F,EAAO0P,cAAgC,MAAQ,SAE7G1P,EAAOjM,MAAW,GAAGiM,EAAOkH,eAC5BlH,EAAOpf,KAAU,GAAGof,EAAOnb,OAC3B,IAAI4V,EAASuF,EAAOvF,OAEpBuF,EAAOzF,UAAe,GAAGE,KAAUuF,EAAOnb,OAG1C,IAAIirB,EAAarV,EAAO5C,MAAM,KAE9B4C,SAASqV,EAAWA,EAAW1pB,OAAS,GAExC4Z,EAAOpf,KAAU,GAAG6Z,KAAUuF,EAAOnb,OAarCmb,EAAO5F,aAAkB4F,EAAO5F,aAAkB9Z,KAAK2vB,eAAejQ,QAAU3X,EACzE2X,IAGL1f,KAAK0vB,iCACP1vB,KAAKwuB,uBAAyBvnB,EAAMuY,aAGrB,kBAAfvY,EAAMqF,OACRtM,KAAK4vB,sBAAwBpvB,QAAMyG,EAAMkoB,cAAe,CAACzP,EAAQ7F,KAC3D6F,EAAO0P,eAAiBC,OAAOC,SAAS5P,EAAO6P,qBACjDvvB,KAAKgvB,aAAatP,EAAO6P,mBAAqB,CAAC1V,EAA4B,cAAzB6F,EAAO0P,cAAgC,MAAQ,SAEnG1P,EAAOjM,MAAW,GAAGiM,EAAOkH,eAC5BlH,EAAOpf,KAAU,GAAGof,EAAOnb,OAC3B,IAAI4V,EAASuF,EAAOvF,OAEpBuF,EAAOzF,UAAe,GAAGE,KAAUuF,EAAOnb,OAG1C,IAAIirB,EAAarV,EAAO5C,MAAM,KAE9B4C,SAASqV,EAAWA,EAAW1pB,OAAS,GAExC4Z,EAAOpf,KAAU,GAAG6Z,KAAUuF,EAAOnb,OAIrCmb,EAAO5F,aAAkB4F,EAAO5F,cAAoB9Z,KAAK2vB,eAAejQ,GAKjEA,IAET1f,KAAK6vB,oBAAsB,IAAI7vB,KAAKgvB,cAChChvB,KAAK4vB,wBACP5vB,KAAKynB,cAAgBxgB,EAAMuY,aAMZ,yBAAfvY,EAAMqF,OACRtM,KAAK8vB,uBAAyBtvB,QAAMyG,EAAMkoB,cAAe,CAACzP,EAAQ7F,KAIhE6F,EAAOjM,MAAW,GAAGiM,EAAOkH,eAC5BlH,EAAOpf,KAAU,GAAGof,EAAOnb,OAC3B,IAAI4V,EAASuF,EAAOvF,OAEpBuF,EAAOzF,UAAe,GAAGE,KAAUuF,EAAOnb,OAG1C,IAAIirB,EAAarV,EAAO5C,MAAM,KAE9B4C,SAASqV,EAAWA,EAAW1pB,OAAS,GAExC4Z,EAAOpf,KAAU,GAAG6Z,KAAUuF,EAAOnb,OAcrCmb,EAAO5F,aAAkB4F,EAAO5F,aAAkB9Z,KAAK2vB,eAAejQ,QAAU3X,EAEzE2X,IAKT1f,KAAK+vB,qBAAuB,GACxB/vB,KAAK8vB,yBAEP9vB,KAAKuuB,eAAiBtnB,EAAMuY,aAGb,qBAAfvY,EAAMqF,KAA6B,CACrC,MAAM0jB,EAAgB,IAAIjX,IAAI9R,EAAM+oB,eAEpChwB,KAAKiwB,oBAAsBD,EAAcE,aAAahwB,IAAI,oBAAsB,GAChFF,KAAKmwB,oBAAsBH,EAAcE,aAAahwB,IAAI,WAAa,GACvEF,KAAKowB,oBAAsBJ,EAAcE,aAAahwB,IAAI,WAAa,GAEvEF,KAAKqwB,gBAAkBppB,EAAMqpB,iBAE7BtwB,KAAKyuB,gBAAkBjuB,QAAMyG,EAAMspB,KAAOC,KAMtCC,eAJU,IAAI1X,IAAIyX,EAAK7rB,KACEurB,aAAahwB,IAAI,gBAIvCswB,KAIP1vB,QAAQC,IAAIf,KAAKyuB,gBAAe,IAKpCzuB,KAAK6H,WAAY,EAAM7H,KAAKC,SAAU,EACtC,MAAMywB,EAAW1wB,KAAKgF,MAAMhF,KAAKkP,OACjCpO,QAAQC,IAAI2vB,GACZ,MAAMC,EAA+BxvB,OAAOgP,OAAOugB,EAAU,CAC3D7oB,UAAW7H,KAAK6H,UAChB5H,QAASD,KAAKC,UAEhBD,KAAKqT,cAAcjD,WAAWugB,EAA8B3wB,KAAKkP,OAEjEpO,QAAQC,IAAIT,GACZQ,QAAQC,IAAI2J,EAAKnC,aACjBvI,KAAK+uB,cAAY,IAGE,aAAnBrkB,EAAKmkB,OAA0B,CAEjC7uB,KAAK6H,WAAY,EACjB7H,KAAKC,SAAU,EACf,MAAMywB,EAAW1wB,KAAKgF,MAAMhF,KAAKkP,OACjCpO,QAAQC,IAAI2vB,GACZ,MAAMC,EAA+BxvB,OAAOgP,OAAOugB,EAAU,CAC3D7oB,UAAW7H,KAAK6H,UAChB5H,QAASD,KAAKC,UAEhBD,KAAKqT,cAAcjD,WAAWugB,EAA8B3wB,KAAKkP,OACjEgc,cAAclrB,KAAKmrB,gBAEnBnrB,KAAK+uB,cAAY,MAKjB/uB,KAAKgtB,mBAAoB,EACzBlsB,QAAQC,IAAI,mBAAmB2J,EAAKmkB,YAAeF,KACnDA,GAAa,GAGbrZ,MAAOA,IACLxU,QAAQwU,MAAMA,GACdtV,KAAK+uB,eACL7D,cAAclrB,KAAKmrB,gBACnBnrB,KAAKC,SAAU,IAElB,EAxQgB,IA2QvB,CAEA0vB,eAAejQ,GAEb,MAA0B,QAAnBA,EAAOpT,MAAwC,UAAnBoT,EAAOpT,KAAsB,IAC3DoT,EAAO5F,aACVM,SAAUsC,IACVrC,SAAUqC,IACVkF,SAAS,GACP,CAEFyD,eAAgB3F,EAAO5F,aAAgB8W,cACvCnB,UAAW,KACX1V,eAAgB,GAChB6H,SAAS,EAEb,CAEAoM,gBAAgB7f,EAAwBlD,GAAsB,GAO5DjL,KAAK6wB,gBACD5lB,IACFjL,KAAK6qB,cAAgB,GACrB7qB,KAAK8qB,gBAAkB,IAEzB9qB,KAAKC,QAAUgL,EACfjL,KAAK6H,WAAaoD,EAClBjL,KAAK8wB,kBAAoB7lB,EAWzBjL,KAAKqO,iBAAiB/D,aAAa6D,GAAQhO,UACxCuK,IAED,GAAIA,EAAKtD,QAAasD,EAAKtD,OAAUtB,OAAQ,CAC3ChF,QAAQC,IAAI2J,GACZ5J,QAAQwU,MAAM5K,EAAKtD,QACnBpH,KAAK6qB,cAAgBngB,EAAKtD,OACtBsD,EAAKrD,SAAYvB,SACnBhF,QAAQC,IAAI2J,EAAKrD,UACjBrH,KAAK8qB,gBAAkBpgB,EAAKrD,UAE9BrH,KAAKC,SAAU,EACfD,KAAK6H,WAAY,EACjB,MAAM8oB,EAA+BxvB,OAAOgP,OAAOxI,GAAyB,CAC1EE,WAAW,EACX5H,SAAS,IAIX,OAFAD,KAAKqT,cAAcjD,WAAWugB,EAA8B3wB,KAAKkP,YACjElP,KAAK+uB,cACL,CAoBF,GAjBIrkB,EAAKrD,SAAYvB,SACnBhF,QAAQC,IAAI2J,EAAKrD,UACjBrH,KAAK8qB,gBAAkBpgB,EAAKrD,UAI9BrH,KAAKqT,cAAc3C,yBADE,CAACsa,uBAAwBtgB,EAAKsgB,wBACOhrB,KAAKkP,OAE/DlP,KAAKqT,cAAc1E,cAAcjE,EAAKnC,aACtCvI,KAAKqT,cAAcxE,sBAAsBnE,EAAKnC,aAC9CvI,KAAKqT,cAAczE,kBAAkBlE,EAAKuD,kBAE1CjO,KAAKmT,SAAS4d,GAAG,YAAYrmB,EAAKnC,eAK9B0C,EAAY,CACd,MAAMC,EAAa,GAAGR,EAAKsmB,cAC3BlwB,QAAQC,IAAImK,GACZlL,KAAKisB,sBAAsB/gB,EAAU,MAErClL,KAAK0uB,YAAY1nB,aAAc,EAC/BhH,KAAK6H,WAAY,EACjB7H,KAAKC,SAAU,EACfD,KAAK8wB,kBAAmB,EACxB9wB,KAAK+uB,cAAY,EAGlBzZ,IACCxU,QAAQwU,MAAMA,GACdtV,KAAK6qB,cAAchqB,KAAKyU,EAAMA,OAC9BtV,KAAK6H,WAAY,EACjB7H,KAAKC,SAAU,EACf,MACM6uB,EAAgB3tB,OAAOgP,OADZnQ,KAAKgF,MAAMhF,KAAKkP,OACa,CAC5CrH,UAAW7H,KAAK6H,UAChB5H,QAASD,KAAKC,UAEhBD,KAAKqT,cAAcjD,WAAW0e,EAAe9uB,KAAKkP,OAClDgc,cAAclrB,KAAKmrB,gBACnBnrB,KAAK+uB,cAAY,EAGvB,CAGAkC,uBACoBzwB,SAAOR,KAAKgF,MAAMC,MAAMjF,KAAKkP,MAAM,GAAI,CAACrH,WAAW,KAEnE7H,KAAK0tB,WAAY,EACjB1tB,KAAKyU,KAAKzU,KAAK+sB,eAEf/sB,KAAKqmB,kBAET,CAEAA,mBACE,MAEMlY,EAASnO,KAAKmO,OAEpB,IAAIwL,EAASD,EAAmB1Z,KAAK4vB,sBAJlB,QAKnB,MAAMnnB,EAAS0F,EAAO1F,OAChB4G,EAAY5G,EAAOzI,KAAKkP,OAE9BG,EAAUrI,YAAc,CAAC,CAACC,MAAO,gBAAiBC,QAASyS,IAC3DlR,EAAOzI,KAAKkP,OAASG,EACrBlB,EAAO1F,OAASA,EAEhB,MAAM9B,EAAe3G,KAAKkP,MAAQ,EAClCf,EAAO3F,gBAAkB,CAAC7B,EAAcA,GACxC3G,KAAKqT,cAAc3E,UAAUP,GAE7B,IAAIrG,GAAkBtH,YAAUmZ,GAChC3Z,KAAKqT,cAAc5C,sBAAsB3I,EAAgB9H,KAAKkP,OAC9DlP,KAAKguB,gBAAgB7f,GAAQ,GAC7BnO,KAAK0tB,WAAY,CACnB,CAEAwD,kBACElxB,KAAK0uB,YAAY1nB,YAAchH,KAAK6H,SACtC,CAEAspB,oBACEnxB,KAAK4vB,sBAAwBpvB,QAAMR,KAAK4vB,sBAAwBnvB,IAC9DA,EAAEqZ,aAA0B,QAAXrZ,EAAE6L,KAAgB,CACjC8N,SAAUsC,IACVrC,SAAUqC,IACVkF,SAAS,GAET,CACEyD,eAAgB,GAChBoK,UAAW,KACX1V,eAAgB,GAChB6H,SAAS,GAENnhB,IAETT,KAAK0uB,YAAY1nB,YAAchH,KAAK6H,SACtC,CAEAupB,WACEtwB,QAAQC,IAAIf,KAAKmrB,gBACjBD,cAAclrB,KAAKmrB,gBACnBnrB,KAAKqxB,aAAate,OAElB/S,KAAK0uB,YAAY1nB,aAAc,EAG/B,MAAMof,EAAkB,IADJpmB,KAAKgF,MAAMhF,KAAKkP,OAGlCjP,SAAS,EACT4H,WAAW,EACXC,oBAAgBC,GAElB/H,KAAKqT,cAAcjD,WAAWgW,EAAiBpmB,KAAKkP,OACpDlP,KAAK8qB,gBAAkB,GACvB9qB,KAAKC,SAAU,EACfD,KAAK8wB,kBAAmB,EACxB9wB,KAAK+uB,cACP,CAEAuC,UACEtxB,KAAKkS,aAAaH,QAClB/R,KAAK6qB,cAAgB,GACrB7qB,KAAK8qB,gBAAkB,GAEvB,MAAMyG,EAAcvxB,KAAKyI,OAAOzI,KAAKkP,OAAO6a,oBACtChjB,EAAmB/G,KAAKmO,OAAO1F,OAAOzI,KAAKkP,OAAOnI,iBAExDjG,QAAQC,IAAIgG,GAGZ/G,KAAK2a,kBAAoB,GACzB3a,KAAK8a,QAAU,EAEf9a,KAAK6vB,oBAAsB,GAC3B7vB,KAAKgvB,aAAe,GAEpB,MAAMpjB,EAAgB,CAAC,EAAG,IAC1B5L,KAAKoL,UAAU+J,WAAW,CACxBjH,kBAAmB,GACnBtC,iBACC,CAAC4lB,WAAW,IAGfxxB,KAAK0L,QAAQqG,QAGb,MAAM0f,EAAgB,CACpBnlB,KAAM,UACNC,OAAQ,gBAEJmlB,EAAK1xB,KAAKoL,UAAU2S,SAASjS,iBACnC4lB,EAAG3f,MAAM,CAACyf,WAAW,IACrBE,EAAG7wB,KAAKb,KAAK8c,GAAGjY,MAAM4sB,GAAgB,CAACD,WAAW,IAElDxxB,KAAK+uB,eAEF/uB,KAAK6H,YACN7H,KAAK0uB,YAAe,IACf1uB,KAAK0uB,YAER3E,oBAAqC,KAAhBwH,EACrB7lB,SAAUlL,YAAU,GAAIuG,EAAiB2E,SACzCse,SAAUxpB,YAAUoL,EAAe7E,EAAiB4E,sBACpDE,YAAarL,YAAU,CAACixB,GAAgB1qB,EAAiB8E,aAG/D,CAEAuI,cAAcC,GACZvT,QAAQC,IAAIsT,GACZ,MAAMC,EAAOD,EAAO,GACdE,EAAWD,EAAKE,KAAO,KAC7B1T,QAAQC,IAAIuT,EAAKhI,MACbiI,EAAW,KACbvU,KAAKkS,aAAaR,IAAI,mCAAoC,gBAC1D1R,KAAKyU,KAAKzU,KAAK0U,aAGf1U,KAAK2U,wBAAwBN,EAEjC,CAEAM,wBAAwB/B,GACtB9R,QAAQC,IAAI6R,GACZ5S,KAAKymB,SAAW7T,EAAM,GAAGrO,KACzB,MAAMqQ,EAAS,IAAIC,WACbC,EAAS9U,KAAKoL,UACpB,UAAW2J,KAAQnC,EAEjBgC,EAAOI,WAAWD,GAClBH,EAAOK,OAAS,KACd,MAAMzP,EAAMoP,EAAOZ,QAAQkB,YAAc,GACzCpU,QAAQC,IAAIyE,GACZ,MAAMI,EAAI8C,EAAQlD,GAClB1E,QAAQC,IAAI6E,GACRA,EAEQoD,EAAYxD,EAAKxF,KAAKiJ,eAE9B6L,EAAOK,WAAW,CAACjH,kBAAmB1I,KAEtCxF,KAAKkS,aAAaR,IAAI,iDAAiD1R,KAAKiJ,cAAcmM,eAAe,sBAAuB,gBAChIpV,KAAKyU,KAAKzU,KAAK0U,cAIjB1U,KAAKkS,aAAaR,IAAI,2EAA4E,gBAClG1R,KAAKyU,KAAKzU,KAAK0U,YAAU,EAI7BE,EAAOS,QAAU,KACfvU,QAAQC,IAAI6T,EAAOU,MAAK,EAE1BP,EAAKQ,SAAW,EAChBvV,KAAK4S,MAAM/R,KAAKkU,EAEpB,CAIA4c,oBAAoBplB,EAAS,gBAM3B,OAAOvM,KAAK8c,GAAGjY,MAAM,CACnByH,KAAM,UACNC,OAAQvM,KAAK8c,GAAGE,QAAQzQ,IAE5B,CAEAqlB,2BAA2B9T,EAAc,UAAW+T,EAAmB,SAGrE,OAAO7xB,KAAK8c,GAAGjY,MAAM,CACnByH,KAAM,iBACNwR,YAAaA,EACb+T,iBAAkB7xB,KAAK8c,GAAGE,QAAQ6U,IAEtC,CAEAC,wBAAwBzU,EAAa,SAAUC,EAAgB,EAAGC,EAAY,IAW5E,OAAOvd,KAAK8c,GAAGjY,MAAM,CACnByH,KAAM,aACN+Q,WAAYrd,KAAK8c,GAAGE,QAAQK,GAC5BC,cAAetd,KAAK8c,GAAGE,QAAQM,GAC/BC,UAAWvd,KAAK8c,GAAGE,QAAQO,IAE/B,CAEAwU,2BAA2BxlB,EAAO,oBAWhC,OAAOvM,KAAK8c,GAAGjY,MAAM,CACnByH,KAAM,aACNC,OAAQvM,KAAK8c,GAAGE,QAAQzQ,GACxBylB,mBAAoB,eACpB3U,WAAY,SACZC,cAAe,EACfC,UAAW,IAEf,CAEA0U,qBAWE,OAAOjyB,KAAK8c,GAAGjY,MAAM,CACnByH,KAAM,SAEV,CAQA4lB,iBACE9Y,EAA2BpZ,KAAKirB,uBAAuBf,uBAAwBlqB,KAAKD,KAAM,OAC5F,CAEAoyB,kBACE/Y,EAA2BpZ,KAAKirB,uBAAuBd,wBAAyBnqB,KAAKD,KAAM,QAC7F,CAEAqyB,qBACEhZ,EAA2BpZ,KAAKirB,uBAAuBb,mBAAoBpqB,KAAKD,KAAM,MACxF,CAGAiW,gBAAgB1P,IAAG2P,UACjB3P,EAAEiM,iBACF,MAAM2D,EAAiB5P,EAAEyO,KACZvU,QAAMR,KAAK0L,QAAQtL,MAAQkL,GAAWA,EAAOC,OAC9C7K,SAASwV,EAAe3K,QAClCvL,KAAK0L,QAAQ7K,KAAKb,KAAK8c,GAAGjY,MAAMqR,IAGlCD,EAAM7V,MAAQ,GACdJ,KAAK0uB,YAAYhjB,QAAU1L,KAAK6H,SAClC,CAEAsO,qBAAqB7P,IAAG2P,UACtB3P,EAAEiM,iBACF,MAAM2D,EAAiB5P,EAAEyO,KACZvU,QAAMR,KAAK8V,aAAexK,GAAWA,EAAOC,OAC7C7K,SAASwV,EAAe3K,QAClCvL,KAAK8V,aAAajV,KAAKqV,GAEzBD,EAAM7V,MAAQ,EAChB,CAEAgW,mBAAmB9P,EAAoC2P,GAOrD,GAHA3P,EAAEiM,iBACF0D,EAAM7V,MAAQ,GACd6V,EAAMI,YAAc,kBAChBrW,KAAK0L,QAAQ5F,OAAQ,CACvB,MAAMwQ,EAAS9V,QAAMR,KAAK0L,QAAQtL,MAAQwV,GACjCA,EAAErK,OAEX0K,EAAM7V,MAAQkW,EAAO9K,KAAK,KAAI,CAElC,CAEA6mB,wBAAwB/rB,EAAoC2P,GAI1D3P,EAAEiM,iBACF0D,EAAMI,YAAc,kBACpBJ,EAAM7V,MAAQJ,KAAK8V,aAAahQ,OAAS9F,KAAK6V,0BAA4B,EAC5E,CAEAoB,cAAchB,GACZjW,KAAK0uB,YAAYhjB,QAAU1L,KAAK6H,UAChC7H,KAAK0L,QAAQqG,QACbkE,EAAM7V,MAAQ,EAChB,CAEAuX,mBAAmB1B,GACjBjW,KAAK8V,aAAe,GACpBG,EAAM7V,MAAQ,EAChB,CAEA8W,iBAAiBhI,GACflP,KAAK0L,QAAQ4mB,SAASpjB,GACtBlP,KAAK0uB,YAAYhjB,QAAU1L,KAAK6H,SAKlC,CAGA0qB,kBAAkBrjB,EAAe+G,GAC/BnV,QAAQC,IAAImO,GACZ1O,WAASR,KAAK8V,aAAc,CAAC5G,IAC7B,MAAMoH,EAAStW,KAAK8V,aAAa7P,IAAM2P,GAA0BA,EAAErK,OAAQC,KAAK,MAChFyK,EAAM7V,MAAQJ,KAAK8V,aAAahQ,OAASwQ,EAAS,EACpD,CA2BAP,eAAe3V,GAIb,GAAIA,EAAMmL,MACR,MAAO,GAAGnL,EAAMmL,OAEpB,CAIAinB,oBAAoBC,GAClB,MAAOC,gBAAeC,gBAAgBF,EAEhCzV,EAAUhd,KAAK8L,iBAAiB8mB,GAAGF,GACzC1yB,KAAK8L,iBAAiBwmB,SAASI,GAC/B1yB,KAAK8L,iBAAiB+mB,OAAOF,EAAc3V,GAEvC0V,IAAkBC,IACpB3yB,KAAK0uB,YAAY7iB,WAAa7L,KAAK6H,UAEvC,CAEAirB,yBAAyB1yB,GACvBJ,KAAK0uB,YAAY7iB,WAAa7L,KAAK6H,SACrC,CAEAkrB,uBAAuB7jB,GACrBlP,KAAK8L,iBAAiBwmB,SAASpjB,GAC/BlP,KAAK0uB,YAAY7iB,WAAa7L,KAAK6H,SACrC,CAEAmrB,qBACEhzB,KAAK8L,iBAAiBjL,KAAKb,KAAK2xB,uBAChC3xB,KAAK0uB,YAAY7iB,WAAa7L,KAAK6H,SACrC,CAEAorB,+BACEjzB,KAAK8L,iBAAiBjL,KAAKb,KAAK4xB,8BAChC5xB,KAAK0uB,YAAY7iB,WAAa7L,KAAK6H,SACrC,CAOAqrB,gCACElzB,KAAK8L,iBAAiBjL,KAAKb,KAAK+xB,8BAChC/xB,KAAK0uB,YAAY7iB,WAAa7L,KAAK6H,SACrC,CAEAsrB,oBACEnzB,KAAK8L,iBAAiBjL,KAAKb,KAAKiyB,sBAChCjyB,KAAK0uB,YAAY7iB,WAAa7L,KAAK6H,SACrC,CAEIurB,2BACF,OAAQpzB,KAAKC,SAAWD,KAAK6H,UAAY,OAAS,QACpD,CAIAwrB,UACE,CAKFC,sBACE,MAAMhzB,EAAON,KAAKqO,iBAAiBlD,iBAAiBnL,KAAKoL,WAEnD+L,EAAIsB,SAASC,cAAc,KACjCvB,EAAEwB,aAAa,QAAS,iBACxBF,SAASG,KAAKC,YAAY1B,GAG1B,MAAMoB,EAAO,IAAIC,KAAK,CAAC3P,KAAK0B,UAAUjK,EAAM,KAAM,KAClD6W,EAAE2B,KAAOX,OAAOY,IAAIC,gBAAgBT,GACpCpB,EAAE8B,SAAW,iBAEb9B,EAAE+B,OACJ,CAGAqa,mBAAmBlf,GACjBA,EAAO9B,iBAIP,MAAOK,SAASyB,EAAOqR,OACvB9S,GAAS5S,KAAKoU,cAAcxB,EAC9B,CAEA4gB,oBAAoBnf,EAAa4B,GAC/BnV,QAAQC,IAAIsT,GACZA,EAAO9B,gBAMT,CAEAqZ,eAAepmB,GAEb,MAAMiuB,EAAY1qB,GAAMvD,GAAK,GACvBkuB,EAAYluB,EAAI+R,MAAM,MAAM,GAClCzW,QAAQC,IAAI2yB,GAGZ,IAAIC,EAAyB,EACzBxX,EAAY,IACbuX,EAAUhzB,SAAS,KACpByb,EAAY,IACHuX,EAAUhzB,SAAS,MAC5Byb,EAAY,KACHuX,EAAUhzB,SAAS,OAC5Byb,EAAY,KAEdwX,EAAyBD,EAAUnc,MAAM4E,GAAWrW,OACpDhF,QAAQC,IAAI4yB,GACZ7yB,QAAQC,IAAIob,GAEZ,MAAMyX,EAAYpuB,EAAIP,MAAM,EAAGjF,KAAKiJ,eAEjCzD,EAAIM,OAAS9F,KAAKiJ,gBAEI,MAAdwqB,GAAqBzzB,KAAK6pB,sBAAsBzO,cAAc5V,IACvExF,KAAKmb,UAAYnb,KAAK6pB,sBAAsB1O,UAC5Cnb,KAAK6zB,gBAAkBD,EAAU9tB,QACT,MAAd2tB,GAAmC,MAAdA,IAAsB7qB,GAAapD,GAG9B,IAA3BmuB,GAAgC3zB,KAAK6pB,sBAAsB3N,wBAAwB1W,EAAK2W,IAIxF3W,EAAIM,OAAS,IAAMN,EAAI9E,SAAS,MAAQV,KAAK6pB,sBAAsBvN,0BAA0B9W,IAFtGxF,KAAKmb,UAAYnb,KAAK6pB,sBAAsB1O,UAC5Cnb,KAAK6zB,gBAAkBD,EAAU9tB,QAKhB,KAARN,GAITxF,KAAKmb,UAAY,UACjBnb,KAAK6zB,gBAAkB,IAEvB7zB,KAAKmb,UAAY,QACjBnb,KAAK6zB,gBAAkB,IAlBvB7zB,KAAKmb,UAAY,OACjBnb,KAAK6zB,gBAAkBD,EAAU9tB,QAmBrC,CAEAguB,eAAeC,GAOb/zB,KAAK0uB,YAAY1E,QAAUhqB,KAAK6H,SAClC,CAEA8jB,YAEE3rB,KAAKoL,UAAUlL,IAAI,qBAAqBqF,aAAapF,UAAUqF,IAE7DxF,KAAK0uB,YAAY7iB,WAAa7L,KAAK6H,YAGrC,MAAMmsB,EAAsBh0B,KAAKoL,UAAUlL,IAAI,sBAAsBqF,aAAaoE,QAChFsqB,MAASruB,MAAKsuB,MAAM,OAGtBl0B,KAAKoL,UAAUlL,IAAI,kBAAkBqF,aAAapF,UAAUqF,IAC1DxF,KAAKyqB,2BAA6BtpB,OAAOgP,OAAO,GAAInQ,KAAKyqB,2BAA4B,CAACziB,SAAUxC,GAAI,GAGtGwuB,GAAqB7zB,UAAUqF,IAC7B1E,QAAQC,IAAI,uBAEZf,KAAK4rB,eAAepmB,GACpBxF,KAAK0uB,YAAY3E,oBAAsB/pB,KAAK6H,UAChC,KAARrC,IACFxF,KAAK2a,kBAAoB,GACzB3a,KAAK8a,QAAU,IAOrB,CAGArG,KAAK8B,GACHvW,KAAKm0B,WAAY,EACjBn0B,KAAKoT,aAAaqB,KAAK8B,EAAS,CAC9BC,eAAgB,oBAChBhC,KAAM,KACNiC,WAAW,EACXC,SAAU,WACT1C,OAAO2C,KAAM3C,IAEdhU,KAAK0tB,WAAY,EACjB1tB,KAAKm0B,WAAY,GACfvd,IACF5W,KAAK0tB,WAAY,EACjB1tB,KAAKo0B,aAAaC,cAAcC,OAAK,EAGzC,CAEAzd,oBACE7W,KAAKyU,KAAKzU,KAAK8W,aACf9W,KAAK8V,aAAe,IAAI9V,KAAK0L,QAAQtL,OACrCU,QAAQC,IAAIf,KAAK8V,aACnB,CAEAiB,qBACE/W,KAAKm0B,WAAY,EACjBn0B,KAAKoT,aAAa4D,YACpB,CAEAU,uBACE1X,KAAK0L,QAAQqG,QACbvR,YAAUR,KAAK8V,aAAeI,IAC5BlW,KAAK0L,QAAQ7K,KAAKb,KAAK8c,GAAGjY,MAAMqR,GAAe,GAEjDlW,KAAK0uB,YAAYhjB,QAAU1L,KAAK6H,UAChC7H,KAAKoT,aAAa4D,aAClBhX,KAAKm0B,WAAY,CACnB,CAEA9c,kBAAkBpB,GAChBjW,KAAK8V,aAAe,GAEpB,MAAQpK,WAAY4L,GACpB9W,YAAUkL,EAAQ6L,MAAM,KAAOjM,IAAYtL,KAAK8V,aAAajV,KAAK,CAAC0K,MAAOD,EAAQkM,QAAS,KAAMC,MAAO,MAAK,GAC7GxB,EAAM7V,MAAQJ,KAAK6V,yBACrB,CAEAkZ,eAEE/uB,KAAKyqB,2BAA6BtpB,OAAOgP,OAAO,GAAInQ,KAAKyqB,2BAA4B,CAACziB,SAAUhI,KAAK0qB,eACvG,CAEAmG,gBAEE7wB,KAAKyqB,2BAA6BtpB,OAAOgP,OAAO,GAAInQ,KAAKyqB,2BAA4B,CAACziB,UAAU,GAClG,CAEAusB,uBAAuB5iB,EAAiBzC,GAClCA,GAAQ,GACVlP,KAAK6qB,cAAc2J,OAAOtlB,EAAO,GAEnClP,KAAK6qB,cAAgBrqB,WAASR,KAAK6qB,cAAgB4J,GAAOA,IAAO9iB,EACnE,CAEA+iB,yBAAyB/iB,EAAiBzC,GACpCA,GAAQ,GACVlP,KAAK8qB,gBAAgB0J,OAAOtlB,EAAO,GAErClP,KAAK8qB,gBAAkBtqB,WAASR,KAAK8qB,gBAAkB6J,GAAOA,IAAOhjB,EACvE,CAEAijB,oBAAoBjwB,EAAakV,GAC/B,MAAMzZ,EAAQJ,KAAKyuB,gBAAgB5U,GAAG4W,eAChCoE,EAAUlwB,EAAI4S,MAAM,KAAK,GACzBpJ,EAAS,IAAI4K,IAAIpU,GAAKurB,aAC5B/hB,EAAOiD,IAAI,YAAa,GAAGhR,KAC3BJ,KAAKyuB,gBAAgB5U,GAAGlV,IAAM,GAAGkwB,KAAW1mB,GAC9C,CAIA2mB,sBAAsBxuB,GACpB,MAAMyuB,EAAS,GAAG/0B,KAAKgsB,mCAAmC1lB,EAAEof,OAAOtlB,gBAAgBJ,KAAKmwB,8BAA8BnwB,KAAKowB,sBAC3HtvB,QAAQC,IAAIg0B,GACZ/0B,KAAKg1B,aAAc,EACnBh1B,KAAKD,KAAKG,IAAI60B,GAAQ50B,UAAWC,IAC/BU,QAAQC,IAAIX,GACZJ,KAAKyuB,gBAAkBjuB,QAAMJ,EAAMmwB,KAAOC,KAMtCC,eAJU,IAAI1X,IAAIyX,EAAK7rB,KACEurB,aAAahwB,IAAI,gBAIvCswB,KAGPxwB,KAAKg1B,aAAc,GAEvB,CAEAC,oBAAoB3uB,GAClB,MAAMyuB,EAAS,GAAG/0B,KAAKgsB,mCAAmChsB,KAAKiwB,8BAA8BjwB,KAAKmwB,8BAA8B7pB,EAAEof,OAAOtlB,QACzIU,QAAQC,IAAIg0B,GACZ/0B,KAAKg1B,aAAc,EACnBh1B,KAAKD,KAAKG,IAAI60B,GAAQ50B,UAAWC,IAC/BU,QAAQC,IAAIX,GACZJ,KAAKyuB,gBAAkBjuB,QAAMJ,EAAMmwB,KAAOC,KAMtCC,eAJU,IAAI1X,IAAIyX,EAAK7rB,KACEurB,aAAahwB,IAAI,gBAIvCswB,KAGPxwB,KAAKg1B,aAAc,GAEvB,CAEAE,oBAAoB5uB,GAClB,MAAMyuB,EAAS,GAAG/0B,KAAKgsB,mCAAmChsB,KAAKiwB,8BAA8B3pB,EAAEof,OAAOtlB,gBAAgBJ,KAAKowB,sBAC3HtvB,QAAQC,IAAIg0B,GACZ/0B,KAAKg1B,aAAc,EACnBh1B,KAAKD,KAAKG,IAAI60B,GAAQ50B,UAAWC,IAC/BU,QAAQC,IAAIX,GACZJ,KAAKyuB,gBAAkBjuB,QAAMJ,EAAMmwB,KAAOC,KAMtCC,eAJU,IAAI1X,IAAIyX,EAAK7rB,KACEurB,aAAahwB,IAAI,gBAIvCswB,KAGPxwB,KAAKg1B,aAAc,GAEvB,EAzlDWvL,SAAwB,oCAAxBA,GAAwBzoB,iJAAxByoB,EAAwB,sBAAxBA,EAAwB/pB,2nkBD5DrCC,kBAA8BA,mCAAY6G,aAAW,GACnD7G,iBAAiC,UACJA,SAAaA,QACxCA,gBACFA,QACAA,iBAAyB,UACmBA,uCAA2BA,QACrEA,iBAA6E,aAA7EA,CAA6E,UAGvEA,0BAEEA,oBACsH,aADtHA,CACsH,cAIxHA,QACFA,mBACAA,UAEFA,8BAA2C,WAEvCA,2BAEEA,oBAC8uC,cAGhvCA,QACAA,kBACFA,UAEFA,8BAGEA,2BAEEA,oBACid,cAGndA,QACAA,uBACFA,QACAA,8BAEEA,2BAEEA,oBACuR,cAGzRA,QACAA,mBACFA,YAIJA,qCAgGAA,2BAAqB,YACSA,kCAAqBA,QACjDA,mBAEEA,6CAIAA,sBAAuEA,gCAAS6G,uBAAqB,GAEnG7G,2BAEEA,oBAC+I,cAGjJA,cAKNA,2BAAsD,YAAtDA,CAAsD,eAEzBA,8BAAiBA,UAG5CA,mBAAsB,YAAtBA,CAAsB,oBAIhBA,yCAAiB6G,mBAAsB,GACA7G,QACzCA,4BAGFA,UAGFA,mBAAsB,aAElBA,qBAMAA,qBACEA,oBACFA,cAKNA,mBAA+C,YAA/CA,CAA+C,eAGzCA,4BACFA,UAEFA,mBAAsB,aAElBA,6CAGAA,wBAOOA,iEAAcA,sCAAkD,GAPvEA,YAYJA,mBACEA,0BAKFA,QACAA,mBAAiC,gBAEzBA,gCAAS6G,qBAAmB,GAGlC7G,4BACFA,YAGFA,mBAAqB,YAArBA,CAAqB,YAArBA,CAAqB,oBAIjBA,+BAMFA,UAEAA,4BAGFA,UAGAA,mBAAiE,eAE/DA,UACAA,UAIFA,mBAAqB,eAEjBA,kCACFA,UAGFA,mBAA4CA,8CAAsB6G,wBAA2B,GAG3F7G,mBACEA,0BA8BFA,UAEFA,4BAKAA,mBAAyC,YAAzCA,CAAyC,YAAzCA,CAAyC,gBAOjCA,qCACFA,QACAA,mBAA2D,gBACbA,gCAAS6G,sBAAoB,GAAE7G,gCAAmBA,QAC9FA,sBAA4CA,gCAAS6G,gCAA8B,GAAE7G,yCAErFA,QACAA,sBAA4CA,gCAAS6G,iCAA+B,GAAE7G,8BAEtFA,gBAQRA,eAEAA,oBAAqD,aAArDA,CAAqD,iBAKzCA,oDAAS6G,mBAAW7G,cAAmB,GAAE,GAC/CA,4BAEEA,qBAA+F,eAGjGA,UAEFA,oBACAA,4BAGAA,8CAwCFA,YAIJA,4BAEEA,4BA+BAA,4BA0BFA,QAEAA,2BAQAA,2BAaAA,2BA+HAA,gDA2FAA,8CAgBAA,kGAltBMA,+BAEyBA,0BAoBJA,2CAabA,qCAwBGA,oCAyGHA,+BAkBHA,4FAIDA,uDACMA,6CAYDA,6CAqBAA,qEACAA,+BAAuB,kCAAvBA,CAAuB,mBAAvBA,CAAuB,cAAvBA,CAAuB,qBAAvBA,CAAuB,iCAW1BA,iDASAA,6BACAA,4BAOHA,kFAE0BA,0CAQvBA,6CAQRA,mDAcKA,yEACiEA,sDAgChEA,gDAWiDA,qCAwBeA,sCAU7DA,iCAAe,cAiDKA,8CA+BCA,gDA4B5BA,mGAQAA,iCAcAA,qgGC7aO8pB,CAAwB,mBC1D9B,IAAM0L,GAAiB,MAAxB,MAAOA,EACXj0B,UAAUd,GACR,OAAKA,EACEA,EAAMmB,QAAQ,IAAK,KADP,IAErB,EAJW4zB,SAAiB,oCAAjBA,EAAiB,EAAjBA,EAAiB,4CAAjBA,EAAiB9zB,UAAjB8zB,CAAiB,gECuClBx1B,oBAAkEA,kCAA6BA,kCAAhDA,iBAAmBA,sCCxBvE,IAAMy1B,GAAgB,MAAvB,MAAOA,EAQP90B,SAAKF,GAEPJ,KAAKq1B,MAAMtrB,KAAK3J,EAClB,CAEIE,WAEF,OAAON,KAAKq1B,MAAMhsB,UACpB,CAeA7J,YAAoBO,eA3BZC,WAAQ,IAAIuJ,KAA0B,IAcrCvJ,oBAA2B,GAI5BA,WAAgB,IAChBA,YAAiB,IACjBA,YAAiB,GAIjBA,WAAe,GACvBA,WAAQ,EAEgC,CAExC6hB,kBACE7hB,KAAKs1B,YAAct1B,KAAKu1B,SAASlB,cAEjCr0B,KAAKw1B,KAAOC,KAAUz1B,KAAKs1B,aAC3Bt1B,KAAK01B,WAEL11B,KAAKq1B,MACFl1B,UAAUG,IACTN,KAAK21B,MAAQr1B,EACbN,KAAK41B,YAAU,EAErB,CAEQF,WACN11B,KAAKw1B,MAAMK,KAAK,IAGhB,MAAMC,EAAkCL,QACrCM,YAAY,EAAC,EAAI,IACjBC,GAAG,OAAQvD,IACVzyB,KAAKi2B,KAAKC,KAAK,YAAazD,EAAMvxB,UAAS,GAK/ClB,KAAKi2B,IAAMj2B,KAAKw1B,MAAM/b,OAAO,OAC1Byc,KAAK,QAASl2B,KAAKm2B,OACnBD,KAAK,SAAUl2B,KAAKo2B,QACpBC,KAAKP,GACLrc,OAAO,IACZ,CAEQmc,aACNp1B,YAAUR,KAAK21B,MAAQW,IAErBA,EAAKnc,OAASna,KAAKu2B,MAAMD,EAAKnc,UAAYna,KAAKu2B,MAAMD,EAAKnc,QAAU,CAAC5V,KAAM+xB,EAAKnc,OAAQqc,QAASF,EAAKE,UAEtGF,EAAK5Q,OAAS1lB,KAAKu2B,MAAMD,EAAK5Q,UAAY1lB,KAAKu2B,MAAMD,EAAK5Q,QAAU,CAACnhB,KAAM+xB,EAAK5Q,OAAQ8Q,QAASF,EAAKE,SAAO,GAG/Gx2B,KAAKu2B,MAAQ,GAEb/1B,YAAUR,KAAK21B,MAAQW,IAEjBt2B,KAAKu2B,MAAMD,EAAKnc,OAAO5V,MAEzBvE,KAAKu2B,MAAMD,EAAKnc,OAAO5V,MAAMiyB,QAAUx2B,KAAKu2B,MAAMD,EAAKnc,OAAO5V,MAAMiyB,QAAQpxB,OAAOkxB,EAAKE,SAGxFx2B,KAAKu2B,MAAMD,EAAKnc,OAAO5V,MAAQ,CAC7BA,KAAM+xB,EAAKnc,OAAO5V,KAClBiyB,QAASF,EAAKE,SAIlBF,EAAKnc,OAASna,KAAKu2B,MAAMD,EAAKnc,OAAO5V,MAEjCvE,KAAKu2B,MAAMD,EAAK5Q,OAAOnhB,MAEzBvE,KAAKu2B,MAAMD,EAAK5Q,OAAOnhB,MAAMiyB,QAAUx2B,KAAKu2B,MAAMD,EAAK5Q,OAAOnhB,MAAMiyB,QAAQpxB,OAAOkxB,EAAKE,SAIxFx2B,KAAKu2B,MAAMD,EAAK5Q,OAAOnhB,MAAQ,CAC7BA,KAAM+xB,EAAK5Q,OAAOnhB,KAClBiyB,QAASF,EAAKE,SAIlBF,EAAK5Q,OAAS1lB,KAAKu2B,MAAMD,EAAK5Q,OAAOnhB,KAAI,GAI3C,IAAIkyB,EAAahB,MAAmBt0B,OAAOu1B,OAAO12B,KAAKu2B,QACpDI,MAAM,SAAUlB,QAAmBmB,UAAS,KAC5CD,MAAM,OAAQlB,MAAaz1B,KAAK21B,QAChCgB,MAAM,SAAUlB,MAAez1B,KAAKm2B,MAAM,EAAGn2B,KAAKo2B,OAAO,IAE5D,MAAME,EAAOt2B,KAAKi2B,IACfY,UAAU,SACVv2B,KAAKN,KAAK21B,OACVmB,QAAQrd,OAAO,QACfsd,MAAM,SAAU,WAChBb,KAAK,QAAUhwB,GAAM,QAASA,EAAEswB,QAAQhrB,KAAK,MAiDhD,IAAIwrB,EAAOh3B,KAAKi2B,IACbY,UAAU,SACVv2B,KAAKa,OAAOu1B,OAAO12B,KAAKu2B,QACxBO,QAAQrd,OAAO,KACfyc,KAAK,QAAUhwB,GAAW,QAASA,EAAEswB,QAAWhrB,KAAK,MACrDwqB,GAAG,YAnDY,CAACvD,EAAgCvsB,KACjDuvB,KAAUhD,EAAMwE,eAAeztB,OAAO,UAAU0tB,aAC7CC,SAAS,KACTjB,KAAK,IAAK,GAEbT,KAAUhD,EAAMwE,eAAeztB,OAAO,QAAQ0tB,aAC3CC,SAAS,KACTjB,KAAK,aAAc,UAAS,GA6C9BF,GAAG,WAzCW,CAACvD,EAAgCvsB,KAChDuvB,KAAUhD,EAAMwE,eAAeztB,OAAO,UAAU0tB,aAC7CC,SAAS,KACTjB,KAAK,IAAK,KAEbT,KAAUhD,EAAMwE,eAAeztB,OAAO,QAAQ0tB,aAC3CC,SAAS,KACTjB,KAAK,aAAc,SAAQ,GAoC7BG,MAjCUI,EAiCAA,EAdJhB,QACJO,GAAG,QAlBN,SAASoB,EAAY3E,GACdA,EAAMvD,QAAQuH,EAAWY,YAAY,IAAKC,UAC/C7E,EAAM8E,QAAQC,GAAK/E,EAAM8E,QAAQE,EACjChF,EAAM8E,QAAQG,GAAKjF,EAAM8E,QAAQI,CACnC,GAeG3B,GAAG,OAbN,SAAS4B,EAAQnF,GACfA,EAAM8E,QAAQC,GAAK/E,EAAMgF,EACzBhF,EAAM8E,QAAQG,GAAKjF,EAAMkF,CAC3B,GAWG3B,GAAG,MATN,SAAS6B,EAAUpF,GACZA,EAAMvD,QAAQuH,EAAWY,YAAY,GAC1C5E,EAAM8E,QAAQC,GAAK,KACnB/E,EAAM8E,QAAQG,GAAK,IACrB,KAjBWjB,MAmCb,MAAMqB,EAASd,EAAKvd,OAAO,UACxByc,KAAK,IAAK,KAEP3qB,EAAQyrB,EAAKvd,OAAO,QACvByc,KAAK,KAAM,SACXA,KAAK,aAAa,UAClB1Z,KAAK,SAAStW,GAAU,OAAOA,EAAE3B,IAAS,GAE7CkyB,EAAWT,GAAG,OAAQ,KACpBM,EACGJ,KAAK,KAAMhwB,GAAKA,EAAEiU,OAAOsd,GACzBvB,KAAK,KAAMhwB,GAAKA,EAAEiU,OAAOwd,GACzBzB,KAAK,KAAMhwB,GAAKA,EAAEwf,OAAO+R,GACzBvB,KAAK,KAAMhwB,GAAKA,EAAEwf,OAAOiS,GAC5BG,EAAO5B,KAAK,KAAOhwB,GAAUA,EAAEuxB,GAAMvB,KAAK,KAAOhwB,GAAWA,EAAEyxB,GAC9DpsB,EAAM2qB,KAAK,IAAK,SAAShwB,GAAU,OAAOA,EAAEuxB,EAAO,CAAG,GAAGvB,KAAK,IAAK,SAAShwB,GAAU,OAAOA,EAAEyxB,CAAM,EAAC,EAE1G,CAEQI,gBACN,CAGFC,cAAc1xB,GACZA,EAAEiM,iBACF,MAAMnS,EAAQkG,EAAEof,OAAOtlB,MAEV,OAATA,GACF8f,EAAE,SAAS+X,OACX/X,EAAE,SAAS+X,SAIX/X,EAAE,SAASgY,OACXhY,EAAE,SAASgY,OAEXhY,EAAE,IAAI9f,GAAO63B,OAEjB,EArNW7C,SAAgB,oCAAhBA,GAAgBp0B,cAAhBo0B,EAAgB,sBAAhBA,EAAgB11B,+dDlB7BC,iBAAwF,YAAxFA,CAAwF,QAqClFA,6CAAiCA,QACrCA,gBACMA,8CACEA,oBAAQA,kCAAU6G,kBAAqB,GACrC7G,oBAAqBA,iBAAIA,QACzBA,4BACFA,UAERA,uBACFA,iBAJwCA,iFCxB3By1B,CAAgB,0FCyFnBz1B,eACEA,kCAAqBA,cAAKA,mCAC5BA,mCA2BFA,oBACEA,2BACFA,+BADEA,6HAGAA,oBACEA,2BACFA,+BADEA,kHAGJA,oBACEA,iDACFA,0DAvFNA,iBACEA,iBAAiC,WACHA,6BAAiBA,QAE7CA,kBAAmB,eAEsDA,gCAAS,IAAI,GAIlFA,0BAEEA,mBAC+I,aAGjJA,UAEFA,0BAAgE,YAAhEA,CAAgE,YAErDA,0BAAaA,QACpBA,mBACAA,mBAAuB,gBAGLA,yDAASA,yBAAgB,GACvCA,mBACFA,QACAA,sBAEgBA,yDAASA,0BAAiB,GACxCA,oBACFA,QACAA,sBAEgBA,yDAASA,6BAAoB,GAAEA,sBAC/CA,cAINA,mBACAA,wBAIOA,2DAAUA,8BAA0B,GAJ3CA,QAMAA,6CAMAA,sBAAuEA,2DAASA,gBAAgB,GAG9FA,2BAEEA,oBAC+I,cAGjJA,UAEFA,mBACFA,UAEFA,2BAA2CA,gEAAeA,yBAAqB,GAC3EA,wBAQFA,mBACEA,4BAGAA,6CAKAA,4BAGFA,UAEJA,wDAnFcA,wCAiBAA,mGAKAA,kGAKAA,kGAmB0FA,qCAAoB,gBAgB5GA,gFAIAA,4BAAoB,i5CAItBA,mEAAiD,cAQjDA,iFAsDRA,oBACEA,iDACFA,gCA4BAA,oBACEA,iDACFA,gCAgBFA,oBACEA,iDACFA,0DA6BAA,wBAAsC,eACkBA,yDAASA,mBAAU,GAAGA,wBAAWA,SAAS,mDAGhGA,0BAA8D,WAA9DA,CAA8D,eAKxDA,0BACEA,mBACFA,UAEFA,6BAMAA,kBAA2B,UACAA,0DAASA,mBAAU,GAAEA,yBAAaA,aAAI,0BAbzDA,uFAUCA,gFAQXA,6BAGEA,0BACEA,mBACFA,iCAJMA,iHAtBVA,yBAoBAA,6EApBMA,0BAAiB,sCA2CrBA,2BAEEA,oBAEFA,gCAGAA,2BAEEA,oBAEFA,mCAQEA,cAAwDA,SAAWA,kCAAXA,6CAD1DA,cACEA,yBACFA,+BAD0BA,qEAxBlCA,qBAAwG,UAAxGA,CAAwG,cAAxGA,CAAwG,aAGpEA,SAAiCA,QAE7DA,yBAOAA,yBAMJA,UAEFA,mBAA0B,aAEtBA,+BAKFA,6CA3BiFA,sBAGjDA,sDAEtBA,mCAOAA,4DAuBNA,2BAEEA,oBAEFA,gCACAA,2BAEEA,oBAEFA,mCAOEA,cAA0DA,SAAWA,kCAAXA,6CAD5DA,cACEA,yBACFA,+BAD0BA,uEApBlCA,uBAA4G,UAA5GA,CAA4G,cAA5GA,CAA4G,cAGvEA,SAAqCA,QAClEA,0BAKAA,0BAKJA,UAEFA,mBAA0B,aAEtBA,+BAKFA,6CAvBqFA,sBAGpDA,0DACvBA,mCAKAA,+DAmBhBA,mBAAiL,eAE7KA,gDACFA,gCAHoIA,uFAUpIA,qBACEA,uDAA0CA,iBAA6BA,0DAASA,8BAAqB,GAAEA,gBAAIA,QAAKA,+BAElHA,gCACAA,qBACEA,iDACFA,mCAVFA,mBAA8G,YAA9GA,CAA8G,cAEnEA,sBAAUA,UAEnDA,4BAIAA,4BAGFA,8BAXmEA,6CAIzDA,4CAIAA,qFAWJA,gCAQkBA,sEAAqBA,0BAAiB,EAAtCA,CAAuC,kEAChBA,4BAAmB,EAD1CA,CAAuC,iEAEjBA,+BAAsB,GAAEA,iCAV9CA,oCAA4B,wCAA5BA,CAA4B,8BAA5BA,CAA4B,kCAA5BA,CAA4B,6BAA5BA,CAA4B,gBAA5BA,CAA4B,+DAHhDA,kBAAmE,WACnDA,yBAAaA,QAC3BA,kCAaFA,cAfoCA,6DAmB9BA,kDAAcA,sBAAc,6DAM9BA,sDAAkBA,qCAA6B,+BAA7BA,CAA6B,mCAA7BA,CAA6B,sDAHnDA,kBAAqE,WACpDA,4BAAeA,QAC9BA,kCAOFA,cATqCA,8EAxBzCA,mBAAiJ,gBACtHA,uFACvBA,yBAgBAA,kBAAmC,WACnBA,yBAAaA,QAC3BA,kCAGFA,QACAA,yBAUFA,QACAA,mBACFA,2CAnC2BA,oCAAqB,eAArBA,CAAqB,oBACvCA,iDAgBDA,6CAMCA,kDAWFA,2EAKLA,mBAA0B,YACuBA,+BAAmBA,QAClEA,sBAA2DA,2DAASA,gBAAe,eAAc,GACjGA,UAEFA,mBACEA,+BACFA,QACAA,8CAcMA,cAAoDA,SAAcA,kCAAdA,0DAHxDA,eAAoD,MAApDA,CAAoD,YACvCA,+FAAmFA,UAC9FA,cACEA,yBACFA,QACAA,aAAG,YAAQA,gEAAoDA,mCAFxCA,8EAQrBA,cAAoDA,SAAcA,kCAAdA,0DAHtDA,aAAG,YAAQA,wIACeA,UAC1BA,cACEA,yBACFA,QACAA,aAAG,YAAQA,gEAAoDA,iCAFxCA,6FAhB3BA,mBAA0B,YACiBA,yBAAaA,QACtDA,sBAA2DA,2DAASA,gBAAqB,eAAc,GAAEA,UAE3GA,mBACEA,yBAOAA,6CASAA,mBACEA,qBACAA,uBACEA,4BAEEA,qBACgK,eAGlKA,cAINA,4BAA0B,iBACgCA,2DAASA,gBAAqB,gBAAe,GAAEA,gBACvGA,QACAA,uBAA6CA,8DAASw4B,eAAmB,YAAax4B,uBAAc,GAAGA,wDAEvGA,SAAS,oCAlCHA,oCAAkB,cAiB0CA,sCAC9BA,gGCtbjC,IAAMy4B,GAAgB,MAAvB,MAAOA,EAwIX54B,YACS0S,EACCnS,EACA+c,EACA3J,EACAyW,EACAxW,EACA/E,EACAgF,EACAsW,EACAE,GATD7pB,oBACCA,YACAA,UACAA,gBACAA,oBACAA,oBACAA,wBACAA,qBACAA,qBACAA,6BAhJVA,gBAAa,GAAGJ,oBAEhBI,kBAAe,IAAIue,KACnBve,YAA6BA,KAAKqT,cAAc5E,OAChDzO,aAA+BA,KAAKqT,cAAc7E,QAClDxO,iBAAkCA,KAAKqT,cAAcmL,YACrDxe,aAAsCA,KAAKqT,cAAcyW,QAEzD9pB,YAAS,EAETA,iBAAsB,GAEtBA,gBAAa,GACbA,WAAgB,GAChBA,YAAkB,GAOlBA,iBAAc,CAEZ+pB,qBAAqB,EACrB9d,WAAW,EACX+d,SAAS,EACTne,YAAY,EACZ7E,aAAa,GAGLhH,eAAY,IAAIoS,MAChBpS,kBAAe,IAAIoS,MAQpBpS,qBAA0B,EACzBA,0BAAuB,IAAIoS,MAC3BpS,oBAAiB,IAAIoS,MAOtBpS,eAA2BmR,QAC5BnR,wBAAoC,IAAIqqB,IAEvCrqB,oBAAgCmR,QACjCnR,wBAAoC,IAAIqqB,IAGhDrqB,mBAAgB,IAChBA,WAAe,GACfA,cAAW,GAGXA,4BAAkC,CAChCooB,MAAO,EACPC,KAAM,IACNG,iBAAiB,EACjBC,UAAYroB,GAAqB,IAARA,EAAH,IACtB6pB,WAAY,CACV,CAAC7pB,MAAO,IACR,CAACA,MAAO,IACR,CAACA,MAAO,IACR,CAACA,MAAO,IACR,CAACA,MAAO,IACR,CAACA,MAAO,IACR,CAACA,MAAO,IACR,CAACA,MAAO,IACR,CAACA,MAAO,IACR,CAACA,MAAO,KAMZJ,0BAAgC,CAC9Bq4B,WAAW,EACXpO,WAAYzpB,QAAMA,UAAQ,EAAG,IAAM83B,KAAuCl4B,MAAOk4B,EAAKC,OAAQD,EAAM,GAAM,EAAI,GAAGA,SAAQvwB,KACzHywB,SAAU,EACVC,aAAa,EACbhQ,UAAYroB,GACI,IAAVA,EAAoB,SACV,KAAVA,EAAqB,SACb,GAAGA,KAInBJ,4BAAyB,CACvBkqB,uBAAwB,GACxBC,wBAAyB,GACzBC,mBAAoB,IAGtBpqB,uBAA2D,GAC3DA,aAAkB,EAClBA,qBAA0B,EAC1BA,eAAoB,UAEpBA,sBAAkB,EAGlBA,gBAAY,EACZA,cAAU,EACVA,wBAAoB,EAEpBA,uBAAmB,EACnBA,gBAAY,EAEZA,cAAmB,EAGnBA,mBAAuC,CAAC,IACxCA,yBAA6B,GAE7BA,0BAA8B,GAE9BA,oBAAwC,CAAC,IAEzCA,kBAAsB,GAGtBA,mBAA0B,GAC1BA,qBAA4B,GAC5BA,iBAAc,GAGdA,WAAe,GACfA,oBAA2B,EAYvB,CAEJP,WACEO,KAAKgM,YAAchM,KAAK2pB,cAAc3M,QAAQ9c,IAAIF,KAAKwqB,eAEvDxqB,KAAKwe,YAAY7U,QAAKqX,KAAUhhB,KAAKihB,eAAe9gB,UAAUC,IAC5DU,QAAQC,IAAI,cAAcX,KAC1BJ,KAAK4K,WAAaxK,EAClBJ,KAAK2qB,YAAc,GAAGxS,OAAOhF,SAASyX,mBAAmBxqB,MAG3DJ,KAAKyO,OAAO9E,QAAKqX,KAAUhhB,KAAKihB,eAAe9gB,UAAUC,IACvDU,QAAQC,IAAI,UACZD,QAAQC,IAAIX,GACZJ,KAAKgF,MAAQ5E,EACbJ,KAAK6H,UAAY7H,KAAKgF,MAAMhF,KAAKkP,QAAQrH,UAEzC,MAAMkjB,EAAsB/qB,KAAKgF,MAAMhF,KAAKkP,QAAQyB,gBAAgBqa,uBAEpEhrB,KAAKirB,uBAAuBf,uBAAyB,GAAGtqB,uCAAoDmrB,IAC5G/qB,KAAKirB,uBAAuBd,wBAA0B,GAAGvqB,wCAAqDmrB,IAC9G/qB,KAAKirB,uBAAuBb,mBAAqB,GAAGxqB,uCAAoDmrB,IAGxG/qB,KAAKorB,gBAAkB5qB,SAAOR,KAAKgF,MAAO,CAAC/E,SAAS,IAEhDD,KAAKgF,MAAMhF,KAAKkP,QAAQjP,UAC1BD,KAAKC,SAAU,EACfirB,cAAclrB,KAAKmrB,gBAAc,GAIrCnrB,KAAKwO,QAAQ7E,QAAKqX,KAAUhhB,KAAKihB,eAAe9gB,UAAUC,IACxDU,QAAQC,IAAIX,GACZJ,KAAKyI,OAASrI,EACdJ,KAAK6qB,cAAgB7qB,KAAKyI,OAAOzI,KAAKkP,QAAQ/H,eAAgBC,OAC9DpH,KAAK8qB,gBAAkB9qB,KAAKyI,OAAOzI,KAAKkP,QAAQ/H,eAAgBE,WAGlErH,KAAK8pB,QAAQngB,QAAKqX,KAAUhhB,KAAKihB,eAAe9gB,UAAUC,IACxDU,QAAQC,IAAI,UACZD,QAAQC,IAAIX,GACZJ,KAAKmO,OAAS/N,IAIhBJ,KAAKqrB,mBAAqBrrB,KAAKsrB,OAAOnrB,UAAU,IAAMH,KAAKurB,aAC3DvrB,KAAKwrB,mBAAqBxrB,KAAKyrB,YAAYtrB,UAAU,IAAMH,KAAK0rB,YAEhE1rB,KAAK2rB,YACF3rB,KAAKgM,YAAY9L,IAAI,sBAAsBE,OAC5CJ,KAAK4rB,eAAe5rB,KAAKgM,YAAY9L,IAAI,sBAAsBE,MAWnE,CAEAsoB,YAAYC,GACPA,EAAQqD,WAAWpD,eACpB9nB,QAAQC,IAAI4nB,EAAQqD,UAAUpD,cAC9B9nB,QAAQC,IAAI,uBACZf,KAAKC,SAAU,EACfD,KAAKisB,sBAAsBtD,EAAQqD,UAAUpD,cAEjD,CAEAqD,sBAAsB/gB,GAEpBlL,KAAKgtB,mBAAoB,EAEzBhtB,KAAKuuB,eAAiB,CAAC,IACvBvuB,KAAKynB,cAAgB,CAAC,IACtBznB,KAAK04B,eAAiB,GAGtB14B,KAAK0uB,YAAcluB,cAAYR,KAAK0uB,YAAa,KAAM,GACvD,IAAIC,EAAY,EAEhB3uB,KAAKmrB,eAAiByD,YAAY,KAChC5uB,KAAKqO,iBAAiBpD,WAAWC,GAAY/K,UAAUuK,IACrD,GAAuB,UAAnBA,EAAKmkB,QAAyBnkB,EAAKtD,OAAW,CAChDpH,KAAK6qB,cAAgBngB,EAAKpK,KAAQ8G,OAClCpH,KAAK8qB,gBAAkBpgB,EAAKpK,KAAQ+G,SACpCrH,KAAK6H,WAAY,EACjB7H,KAAKC,SAAU,EACf,MAAMywB,EAAW1wB,KAAKgF,MAAMhF,KAAKkP,OACjCpO,QAAQC,IAAI2vB,GACZ,MAAMC,EAA+BxvB,OAAOgP,OAAOugB,EAAU,CAC3D7oB,UAAW7H,KAAK6H,UAChB5H,QAASD,KAAKC,UAEhBD,KAAKqT,cAAcjD,WAAWugB,EAA8B3wB,KAAKkP,OACjEgc,cAAclrB,KAAKmrB,gBACnBnrB,KAAK+uB,cAAY,CAUnB,GARIrkB,EAAKpK,KAAQ+G,UAAavB,SAE5B9F,KAAK8qB,gBAAkBpgB,EAAKpK,KAAQ+G,UAElCqD,EAAKpK,KAAQ8G,QAAWtB,SAE1B9F,KAAK6qB,cAAgBngB,EAAKpK,KAAQ8G,QAEb,SAAnBsD,EAAKmkB,OAAsB,CAE7B,MAAMvuB,EAAOoK,EAAKpK,KAAQ2uB,QAC1BnuB,QAAQC,IAAIT,GAEZN,KAAKkvB,OAAS5uB,EAAK,GAAGgM,KAEtB9L,YAAUF,EAAM2G,IACK,kBAAfA,EAAMqF,OACRtM,KAAK4vB,sBAAwBpvB,QAAMyG,EAAMkoB,cAAe,CAACzP,EAAQ7F,KAC3D6F,EAAO0P,eAAiBC,OAAOC,SAAS5P,EAAO6P,qBAEjDvvB,KAAKgvB,aAAatP,EAAO6P,mBAAqB,CAAC1V,EAA4B,cAAzB6F,EAAO0P,cAAgC,MAAQ,SAEnG1P,EAAOjM,MAAW,GAAGiM,EAAOkH,eAC5BlH,EAAOpf,KAAU,GAAGof,EAAOnb,OAC3B,IAAI4V,EAASuF,EAAOvF,OAEpBuF,EAAOzF,UAAe,GAAGE,KAAUuF,EAAOnb,OAE1C,IAAIirB,EAAarV,EAAO5C,MAAM,KAE9B4C,SAASqV,EAAWA,EAAW1pB,OAAS,GAExC4Z,EAAOpf,KAAU,GAAG6Z,KAAUuF,EAAOnb,OAcrCmb,EAAO5F,aAAkB4F,EAAO5F,cAAoB9Z,KAAK2vB,eAAejQ,GACjEA,IAET1f,KAAK6vB,oBAAsB,IAAI7vB,KAAKgvB,cAChChvB,KAAK4vB,wBACP5vB,KAAKynB,cAAgBxgB,EAAMuY,aAGZ,kBAAfvY,EAAMqF,OAERtM,KAAK21B,MAAQr1B,EAAK,GAAGq4B,WACrB34B,KAAK04B,eAAiB,GACtBl4B,YAAUR,KAAK21B,MAAQW,IACjBt2B,KAAK04B,eAAeh4B,SAAS41B,EAAKE,QAAQ,KAC5Cx2B,KAAK04B,eAAe73B,KAAKy1B,EAAKE,QAAQ,GAAE,IAI3B,yBAAfvvB,EAAMqF,OACRtM,KAAK8vB,uBAAyBtvB,QAAMyG,EAAMkoB,cAAe,CAACzP,EAAQ7F,KAIhE6F,EAAOjM,MAAW,GAAGiM,EAAOkH,eAC5BlH,EAAOpf,KAAU,GAAGof,EAAOnb,OAC3B,IAAI4V,EAASuF,EAAOvF,OAEpBuF,EAAOzF,UAAe,GAAGE,KAAUuF,EAAOnb,OAG1C,IAAIirB,EAAarV,EAAO5C,MAAM,KAE9B4C,SAASqV,EAAWA,EAAW1pB,OAAS,GAExC4Z,EAAOpf,KAAU,GAAG6Z,KAAUuF,EAAOnb,OAarCmb,EAAO5F,aAAkB4F,EAAO5F,aAAkB9Z,KAAK2vB,eAAejQ,QAAU3X,EACzE2X,IAET1f,KAAK+vB,qBAAuB,GACxB/vB,KAAK8vB,yBAEP9vB,KAAKuuB,eAAiBtnB,EAAMuY,eAKlCxf,KAAK6H,WAAY,EAAM7H,KAAKC,SAAU,EACtC,MAAMywB,EAAW1wB,KAAKgF,MAAMhF,KAAKkP,OACjCpO,QAAQC,IAAI2vB,GACZ,MAAMC,EAA+BxvB,OAAOgP,OAAOugB,EAAU,CAC3D7oB,UAAW7H,KAAK6H,UAChB5H,QAASD,KAAKC,UAEhBD,KAAKqT,cAAcjD,WAAWugB,EAA8B3wB,KAAKkP,OACjEgc,cAAclrB,KAAKmrB,gBACnBrqB,QAAQC,IAAIT,GACZN,KAAK+uB,cAAY,CAGnB,GAAuB,aAAnBrkB,EAAKmkB,OAA0B,CAEjC7uB,KAAK6H,WAAY,EACjB7H,KAAKC,SAAU,EACf,MAAMywB,EAAW1wB,KAAKgF,MAAMhF,KAAKkP,OACjCpO,QAAQC,IAAI2vB,GACZ,MAAMC,EAA+BxvB,OAAOgP,OAAOugB,EAAU,CAC3D7oB,UAAW7H,KAAK6H,UAChB5H,QAASD,KAAKC,UAEhBD,KAAKqT,cAAcjD,WAAWugB,EAA8B3wB,KAAKkP,OACjEgc,cAAclrB,KAAKmrB,gBAEnBnrB,KAAK+uB,cAAY,MAKjB/uB,KAAKgtB,mBAAoB,EAEzBlsB,QAAQC,IAAI,mBAAmB2J,EAAKmkB,YAAeF,KACnDA,GAAa,GAEdrZ,IACDxU,QAAQwU,MAAMA,GACdtV,KAAK+uB,eACL7D,cAAclrB,KAAKmrB,gBACnBnrB,KAAK6H,WAAY,EACjB7H,KAAKC,SAAU,GAChB,EApKkB,IAsKvB,CAEA+hB,cACEkJ,cAAclrB,KAAKmrB,gBACnBD,cAAclrB,KAAKqO,iBAAiB8c,gBACpCnrB,KAAKihB,aAAalX,OAClB/J,KAAKihB,aAAaiB,WAElBliB,KAAKqrB,mBAAmBpJ,cACxBjiB,KAAKwrB,mBAAmBvJ,aAC1B,CAEI/T,wBACF,OAAOlO,KAAKgM,YAAY9L,IAAI,sBAAsBE,KACpD,CAEA0zB,eAAeC,GACb/zB,KAAK0uB,YAAY1E,QAAUhqB,KAAK6H,SAClC,CAEA+wB,kBAAkB7E,GAChB/zB,KAAK0uB,YAAYziB,UAAYjM,KAAK6H,SACpC,CAEA8jB,YAcE3rB,KAAKgM,YAAY9L,IAAI,WAAWqF,aAAapF,UAAU,KACrDH,KAAK0uB,YAAY7iB,WAAa7L,KAAK6H,YAGT7H,KAAKgM,YAAY9L,IAAI,sBAAsBqF,aAAaoE,QAClFsqB,MAASruB,MAAKsuB,MAAM,QAGD/zB,UAAWqF,IAC9BiQ,eAAeC,QAAQ,mBAAoBlQ,GAC3CxF,KAAK4rB,eAAepmB,GACpBxF,KAAK0uB,YAAY3E,oBAAsB/pB,KAAK6H,UAChC,KAARrC,IACFxF,KAAK2a,kBAAoB,GACzB3a,KAAK8a,QAAU,IAOrB,CAIAoX,iBACEpxB,QAAQC,IAAIf,KAAKirB,uBAAuBf,wBACxC9Q,EAA2BpZ,KAAKirB,uBAAuBf,uBAAwBlqB,KAAKD,KAAM,OAC5F,CAEAoyB,kBACErxB,QAAQC,IAAIf,KAAKirB,uBAAuBd,yBACxC/Q,EAA2BpZ,KAAKirB,uBAAuBd,wBAAyBnqB,KAAKD,KAAM,QAC7F,CACAqyB,qBACEtxB,QAAQC,IAAIf,KAAKirB,uBAAuBb,oBACxChR,EAA2BpZ,KAAKirB,uBAAuBb,mBAAoBpqB,KAAKD,KAAM,MACxF,CAEA0U,KAAK8B,GACHvW,KAAKoT,aAAaqB,KAAK8B,EAAS,CAC9BC,eAAgB,oBAChBhC,KAAM,KACNiC,WAAW,IACVzC,OAAO2C,KAAM3C,IACdhU,KAAK0tB,WAAY,GAEf9W,IACF5W,KAAK0tB,WAAY,GAIrB,CAEA9B,eAAepmB,GAEb,MAAMiuB,EAAY1qB,GAAMvD,GAAK,GACvBkuB,EAAYluB,EAAI+R,MAAM,MAAM,GAClCzW,QAAQC,IAAI2yB,GAGZ,IAAIC,EAAyB,EACzBxX,EAAY,IACbuX,EAAUhzB,SAAS,KACpByb,EAAY,IACHuX,EAAUhzB,SAAS,MAC5Byb,EAAY,KACHuX,EAAUhzB,SAAS,OAC5Byb,EAAY,KAEdwX,EAAyBD,EAAUnc,MAAM4E,GAAWrW,OACpDhF,QAAQC,IAAI4yB,GACZ7yB,QAAQC,IAAIob,GAEZ,MAAMyX,EAAYpuB,EAAIP,MAAM,EAAGjF,KAAKiJ,eAEjCzD,EAAIM,OAAS9F,KAAKiJ,gBAEI,MAAdwqB,GAAqBzzB,KAAK6pB,sBAAsBzO,cAAc5V,IACvExF,KAAKmb,UAAYnb,KAAK6pB,sBAAsB1O,UAC5Cnb,KAAK6zB,gBAAkBD,EAAU9tB,QACT,MAAd2tB,GAAmC,MAAdA,IAAsB7qB,GAAapD,GAG9B,IAA3BmuB,GAAgC3zB,KAAK6pB,sBAAsB3N,wBAAwB1W,EAAK2W,IAIxF3W,EAAIM,OAAS,IAAMN,EAAI9E,SAAS,MAAQV,KAAK6pB,sBAAsBvN,0BAA0B9W,IAFtGxF,KAAKmb,UAAYnb,KAAK6pB,sBAAsB1O,UAC5Cnb,KAAK6zB,gBAAkBD,EAAU9tB,QAKhB,KAARN,GAITxF,KAAKmb,UAAY,UACjBnb,KAAK6zB,gBAAkB,IAEvB7zB,KAAKmb,UAAY,QACjBnb,KAAK6zB,gBAAkB,IAlBvB7zB,KAAKmb,UAAY,OACjBnb,KAAK6zB,gBAAkBD,EAAU9tB,QAmBrC,CAEAwtB,sBACE,MAAMhzB,EAAON,KAAKqO,iBAAiBtC,mBAAmB/L,KAAKgM,aAErDmL,EAAIsB,SAASC,cAAc,KACjCvB,EAAEwB,aAAa,QAAS,iBACxBF,SAASG,KAAKC,YAAY1B,GAG1B,MAAMoB,EAAO,IAAIC,KAAK,CAAC3P,KAAK0B,UAAUjK,EAAM,KAAM,KAClD6W,EAAE2B,KAAOX,OAAOY,IAAIC,gBAAgBT,GACpCpB,EAAE8B,SAAW,iBAEb9B,EAAE+B,OACJ,CAEAyW,eAAejQ,GAEb,MAA0B,QAAnBA,EAAOpT,MAAwC,UAAnBoT,EAAOpT,KAAsB,IAC3DoT,EAAO5F,aACVM,SAAUsC,IACVrC,SAAUqC,IACVkF,SAAS,GACP,CAEFyD,eAAgB3F,EAAO5F,aAAgB8W,cACvCnB,UAAW,KACX1V,eAAgB,GAChB6H,SAAS,EAEb,CAEAoM,gBAAgB7f,EAAwBlD,GAAsB,GAC5DjL,KAAK6wB,gBACD5lB,IACFjL,KAAK6qB,cAAgB,GACrB7qB,KAAK8qB,gBAAkB,IAGzB9qB,KAAKC,QAAUgL,EACfjL,KAAK6H,WAAaoD,EAClBjL,KAAK8wB,kBAAoB7lB,EAEzBjL,KAAKqO,iBAAiB/D,aAAa6D,GAAQhO,UACxCuK,IACC,GAAIA,EAAKtD,QAAasD,EAAKtD,OAAUtB,OAAQ,CAC3ChF,QAAQwU,MAAM5K,EAAKtD,QACnBpH,KAAK6qB,cAAgBngB,EAAKtD,OACtBsD,EAAKrD,SAAYvB,SACnBhF,QAAQC,IAAI2J,EAAKrD,UACjBrH,KAAK8qB,gBAAkBpgB,EAAKrD,UAE9BrH,KAAKC,SAAU,EACf,MAAM44B,EAAuB13B,OAAOgP,OAAOlI,GAAiB,CAC1DJ,WAAW,EACX5H,SAAS,IAIX,OAFAD,KAAKqT,cAAcjD,WAAWyoB,EAAsB74B,KAAKkP,YACzDlP,KAAK+uB,cACL,CAoBF,GAlBIrkB,EAAKrD,SAAYvB,SACnBhF,QAAQC,IAAI2J,EAAKrD,UACjBrH,KAAK8qB,gBAAkBpgB,EAAKrD,UAG1BrH,KAAK84B,gBACP94B,KAAKyU,KAAKzU,KAAK+4B,YAIjB/4B,KAAKqT,cAAc3C,yBADE,CAACsa,uBAAwBtgB,EAAKsgB,wBACOhrB,KAAKkP,OAE/DlP,KAAKqT,cAAc1E,cAAcjE,EAAKnC,aACtCvI,KAAKqT,cAAcxE,sBAAsBnE,EAAKnC,aAC9CvI,KAAKqT,cAAczE,kBAAkBlE,EAAKuD,kBAC1CjO,KAAKmT,SAAS4d,GAAG,YAAYrmB,EAAKnC,eAG9B0C,EAAY,CACd,MAAMC,EAAa,GAAGR,EAAKsmB,cAC3BlwB,QAAQC,IAAImK,GACZlL,KAAKisB,sBAAsB/gB,EAAU,MAErClL,KAAK0uB,YAAY1nB,aAAc,EAC/BhH,KAAK+uB,eACL/uB,KAAK6H,WAAY,EACjB7H,KAAKC,SAAU,EACfD,KAAK8wB,kBAAmB,GAG5Bxb,IACExU,QAAQwU,MAAMA,GACdtV,KAAK6qB,cAAchqB,KAAKyU,EAAMA,OAC9BtV,KAAK6H,WAAY,EACjB7H,KAAKC,SAAU,EACf,MACM6uB,EAAgB3tB,OAAOgP,OADZnQ,KAAKgF,MAAMhF,KAAKkP,OACa,CAC5CrH,UAAW7H,KAAK6H,UAChB5H,QAASD,KAAKC,UAEhBD,KAAKqT,cAAcjD,WAAW0e,EAAe9uB,KAAKkP,OAClDgc,cAAclrB,KAAKmrB,gBACnBnrB,KAAK+uB,cAAY,EAEvB,CAEArD,WAEE1rB,KAAK6sB,UAAU9Z,KAAK/S,KAAKkP,MAC3B,CAEAqc,YACE,GAAGvrB,KAAKgM,YAAYqP,QAGlB,OAFArb,KAAKkS,aAAaR,IAAI,gFAAgF1R,KAAKiJ,cAAcmM,4CAA4CpV,KAAKkO,kBAAkBpI,OAAOsP,mBAAoB,qBACvNpV,KAAKyU,KAAKzU,KAAK0U,YAIjB,MAAMoY,EAAYtsB,SAAOR,KAAKgF,MAAMC,MAAMjF,KAAKkP,MAAM,GAAK0G,GAAMA,EAAE/N,WAAa+N,EAAE3V,SAC9ED,KAAKyI,OAAO3C,OAAS,GAAKgnB,EAC3B9sB,KAAKyU,KAAKzU,KAAK+sB,eAEf/sB,KAAKgtB,mBAAoB,EACT,IAAbhtB,KAAKkP,MACNlP,KAAKitB,QAELjtB,KAAKktB,SAGX,CAEAK,eACE,IACIC,EADAC,EAAWjtB,UAAQR,KAAKkP,MAAQ,EAAGlP,KAAKyI,OAAO3C,QAEnDhF,QAAQC,IAAI0sB,GACZjtB,YAAUitB,EAAU5T,IAClB2T,EAAWxtB,KAAKgF,MAAM6U,GACtB,MAAMuM,EAAkB,IACnBoH,EACHvtB,SAAS,EACT4H,WAAW,GAEb7H,KAAKqT,cAAcjD,WAAWgW,EAAiBvM,EAAC,GAElD7Z,KAAK0tB,UAAY1tB,KAAKqmB,mBAAqBrmB,KAAKitB,OAClD,CAEAL,uBAEE,MAAO7C,uBAAwBiP,IAEfh5B,KAAKgM,YAAY5L,MAAM8N,mBACT,IAAblO,KAAKkP,QACpBlP,KAAKqT,cAAczC,qBAAqBmZ,GACxC/pB,KAAKgM,YAAY+R,SAAS7P,kBAAkBmf,SAAStD,GAEzD,CAEAkD,QAEE/M,EAAEmD,GAAGC,UAAUC,IAAItS,OAAS,GAC5B,MAAMtK,EAAe3G,KAAKkP,MAAQ,EAE5B1G,EAAoC,CAAC7B,EAAcA,GAEzD3G,KAAK4sB,uBAEL,IAAI1Y,EAAYlU,KAAKgM,YAAY5L,MAAM8N,kBAGvC,MAAM+H,EAAQjW,KAAKqO,iBAAiBtC,mBAAmB/L,KAAKgM,cAGpDhF,eAAgBhH,KAAKyI,OAAOzI,KAAKkP,OAEnCf,EAAS,CACb5F,YAAe,GACfqlB,eAAkB5tB,KAAK6tB,UAAU9P,SAASxZ,KAAQnE,MAClD0tB,MAAS9tB,KAAK6tB,UAAU9P,SAAS+P,MAAS1tB,MAC1CoI,gBAAmBA,EACnBC,OAAU,CACR,CACE3B,mBAAsB,UACtBH,aAAgBA,EAChBC,WAAc,aACdC,WAAc,UACdkjB,oBAAuB7V,EAEvBnN,iBAAoBkP,EACpBjP,YAAeA,KAKrBhH,KAAKqT,cAAc3E,UAAUP,GAC7B,MAAM8qB,EAAqB93B,OAAOgP,OAAOlI,GAAiB,CACxDhI,SAAS,EACT4H,WAAW,EACXC,gBAAiBtH,YAAUwG,GAAaE,WAE1CpG,QAAQC,IAAIk4B,GACZn4B,QAAQC,IAAI,cAAcf,KAAKkP,SAC/BlP,KAAKqT,cAAcjD,WAAW6oB,EAAoBj5B,KAAKkP,OAEvDlP,KAAKC,SAAU,EACfD,KAAKguB,gBAAgB7f,EACvB,CAEA+e,SAEE,MAAM/e,EAASnO,KAAKmO,OACdxH,EAAe3G,KAAKkP,MAAQ,EAC5B+e,EAAqBjuB,KAAKkP,MAE1B1G,EAAoC,CAAC7B,EAAcA,GAInDsP,EAAQjW,KAAKqO,iBAAiBtC,mBAAmB/L,KAAKgM,aAEtDkiB,EAAeluB,KAAKyI,OAAOzI,KAAKkP,QAG9BlI,eAAgBhH,KAAKyI,OAAOzI,KAAKkP,OAEnCF,EAAQ,IACTkf,EACHhjB,gBAAYnD,EACZkmB,mBAAsBA,EACtBlnB,iBAAoBkP,EACpBjP,eAGFmH,EAAO1F,OAAOzI,KAAKkP,OAASF,EAC5Bb,EAAO3F,gBAAkBA,EACzB2F,EAAOyf,eAAiB5tB,KAAK6tB,UAAU9P,SAASxZ,KAAQnE,MACxD+N,EAAO2f,MAAQ9tB,KAAK6tB,UAAU9P,SAAS+P,MAAS1tB,MAEhDU,QAAQC,IAAIoN,GAGZnO,KAAKqT,cAAc3E,UAAUP,GAC7B,MAAM8qB,EAAqB93B,OAAOgP,OAAOlI,GAAiB,CACxDhI,SAAS,EACT4H,WAAW,EACXC,gBAAiBtH,YAAUwG,GAAaE,WAE1CpG,QAAQC,IAAIk4B,GACZn4B,QAAQC,IAAI,yBAAyBf,KAAKkP,SAC1ClP,KAAKqT,cAAcjD,WAAW6oB,EAAoBj5B,KAAKkP,OACvDlP,KAAKC,SAAU,EACfD,KAAKguB,gBAAgB7f,EACvB,CAEAijB,WACEtwB,QAAQC,IAAIf,KAAKmrB,gBACjBD,cAAclrB,KAAKmrB,gBACnBnrB,KAAKqxB,aAAate,OAElB/S,KAAK0uB,YAAY1nB,aAAc,EAG/B,MAAMof,EAAkB,IADJpmB,KAAKgF,MAAMhF,KAAKkP,OAGlCjP,SAAS,EACT4H,WAAW,EACXC,oBAAgBC,GAElB/H,KAAKqT,cAAcjD,WAAWgW,EAAiBpmB,KAAKkP,OACpDlP,KAAK8qB,gBAAkB,GACvB9qB,KAAKC,SAAU,EACfD,KAAK8wB,kBAAmB,EACxB9wB,KAAK+uB,cACP,CAEAmC,kBACElxB,KAAK0uB,YAAY1nB,YAAchH,KAAK6H,SACtC,CAEAspB,oBACEnxB,KAAK4vB,sBAAwBpvB,QAAMR,KAAK4vB,sBAAwBnvB,IAC9DA,EAAEy4B,QAAU,CAAC,MAAO,SAASx4B,SAASD,EAAE6L,MAAQ,CAC5C8N,SAAUsC,IACVrC,SAAUqC,IACVkF,SAAS,GAEX,CACEyD,eAAgB,GAChBoK,UAAW,KACX1V,eAAgB,GAChB6H,SAAS,GAENnhB,IAETT,KAAK0uB,YAAY1nB,YAAchH,KAAK6H,SACtC,CAEAsxB,yBACEn5B,KAAK84B,gBAAkB94B,KAAK84B,eAC5B94B,KAAKo5B,qBAAqBrmB,KAAK/S,KAAK84B,eACtC,CAEA7H,uBACoBzwB,SAAOR,KAAKgF,MAAMC,MAAMjF,KAAKkP,MAAM,GAAI,CAACrH,WAAW,KAEnE7H,KAAK0tB,WAAY,EACjB1tB,KAAKyU,KAAKzU,KAAK+sB,eAEf/sB,KAAKqmB,kBAET,CAEAA,mBACE,MAEMlY,EAASnO,KAAKmO,OAEpB,IAAIwL,EAASD,EAAmB1Z,KAAK4vB,sBAJlB,WAKnB,MAAMnnB,EAAS0F,EAAO1F,OAChB4G,EAAY5G,EAAOzI,KAAKkP,OAG9BG,EAAUrI,YAAc,CAAC,CAACC,MAAO,gBAAiBC,QAASyS,IAE3DlR,EAAOzI,KAAKkP,OAASG,EACrBlB,EAAO1F,OAASA,EAEhB,MAAM9B,EAAe3G,KAAKkP,MAAQ,EAClCf,EAAO3F,gBAAkB,CAAC7B,EAAcA,GACxC3G,KAAKqT,cAAc3E,UAAUP,GAE7B,IAAIrG,GAAkBtH,YAAUmZ,GAChC3Z,KAAKqT,cAAc5C,sBAAsB3I,EAAgB9H,KAAKkP,OAC9DlP,KAAKguB,gBAAgB7f,GAAQ,GAC7BnO,KAAK0tB,WAAY,CACnB,CAEAtZ,cAAcC,GACZvT,QAAQC,IAAIsT,GACZ,MAAMC,EAAOD,EAAO,GACdE,EAAWD,EAAKE,KAAO,KAC7B1T,QAAQC,IAAIuT,EAAKhI,MACbiI,EAAW,KACbvU,KAAKkS,aAAaR,IAAI,mCAAoC,gBAC1D1R,KAAKyU,KAAKzU,KAAK0U,aAGf1U,KAAK2U,wBAAwBN,EAEjC,CAEAM,wBAAwB/B,GACtB9R,QAAQC,IAAI6R,GACZ5S,KAAKymB,SAAW7T,EAAM,GAAGrO,KACzB,MAAMqQ,EAAS,IAAIC,WACbC,EAAS9U,KAAKgM,YACpB,UAAW+I,KAAQnC,EAEjBgC,EAAOI,WAAWD,GAClBH,EAAOK,OAAS,KACd,MAAMzP,EAAMoP,EAAOZ,QAAQkB,YAAc,GACzCpU,QAAQC,IAAIyE,GACZ,MAAMI,EAAI8C,EAAQlD,GAClB1E,QAAQC,IAAI6E,GACRA,EAEQoD,EAAYxD,EAAKxF,KAAKiJ,eAE9B6L,EAAOK,WAAW,CAACjH,kBAAmB1I,KAEtCxF,KAAKkS,aAAaR,IAAI,iDAAiD1R,KAAKiJ,cAAcmM,eAAe,sBAAuB,gBAChIpV,KAAKyU,KAAKzU,KAAK0U,cAGjB1U,KAAKkS,aAAaR,IAAI,2EAA4E,gBAClG1R,KAAKyU,KAAKzU,KAAK0U,YAAU,EAI7BE,EAAOS,QAAU,KACfvU,QAAQC,IAAI6T,EAAOU,MAAK,EAE1BP,EAAKQ,SAAW,EAChBvV,KAAK4S,MAAM/R,KAAKkU,EAEpB,CAEAskB,mBACA,CAGA/H,UACEtxB,KAAKkS,aAAaH,QAClB/R,KAAK6qB,cAAgB,GACrB7qB,KAAK8qB,gBAAkB,GAEvB,MAAMyG,EAAcvxB,KAAKyI,OAAOzI,KAAKkP,OAAO6a,oBACtChjB,EAAmB/G,KAAKmO,OAAO1F,OAAOzI,KAAKkP,OAAOnI,iBAGxD/G,KAAK2a,kBAAoB,GACzB3a,KAAK8a,QAAU,EAEf9a,KAAK6vB,oBAAsB,GAC3B7vB,KAAKgvB,aAAe,GAGpBhvB,KAAKgM,YAAYmJ,WAAW,CAC1BjH,kBAAmB,GACnBtC,cAAe,CAAC,EAAG,IACnBK,UAAW,GACXM,OAAQ,iBACP,CAACilB,WAAW,IAEfxxB,KAAK+uB,eAEL,MAAMxiB,EAASxF,EAAiB8E,WAAW,GAAGU,OAE3CvM,KAAK6H,YACN7H,KAAK0uB,YAAe,IACf1uB,KAAK0uB,YAER3E,oBAAqC,KAAhBwH,EACrBtlB,UAAqD,KAA1ClF,EAAiBsF,qBAC5B2d,SAAUxpB,YAAU,CAAC,EAAG,GAAIuG,EAAiB4E,sBAC7CE,WAAuB,kBAAXU,GAUlB,CAEI6mB,2BACF,OAAQpzB,KAAKC,SAAWD,KAAK6H,UAAY,OAAS,QACpD,CAGA0rB,mBAAmBlf,GACjBA,EAAO9B,iBAIP,MAAOK,SAASyB,EAAOqR,OACvB9S,GAAS5S,KAAKoU,cAAcxB,EAC9B,CAEA4gB,oBAAoBnf,EAAa4B,GAC/BnV,QAAQC,IAAIsT,GACZA,EAAO9B,gBAMT,CAIAwc,eAEE/uB,KAAKgM,YAAY+R,SAASxR,OAAUmW,OAAO,CAAC8O,WAAW,IACvDxxB,KAAKs5B,uBAAyBn4B,OAAOgP,OAAO,GAAInQ,KAAKs5B,uBAAwB,CAACtxB,UAAU,IACxFhI,KAAKu5B,qBAAuBp4B,OAAOgP,OAAO,GAAInQ,KAAKu5B,qBAAsB,CAACvxB,UAAU,GACtF,CAEA6oB,gBAEE7wB,KAAKgM,YAAY+R,SAASxR,OAAUwW,QAAQ,CAACyO,WAAW,IACxDxxB,KAAKs5B,uBAAyBn4B,OAAOgP,OAAO,GAAInQ,KAAKs5B,uBAAwB,CAACtxB,UAAU,IACxFhI,KAAKu5B,qBAAuBp4B,OAAOgP,OAAO,GAAInQ,KAAKu5B,qBAAsB,CAACvxB,UAAU,GACtF,CAEAusB,uBAAuB5iB,EAAiBzC,GAClCA,GAAQ,GACVlP,KAAK6qB,cAAc2J,OAAOtlB,EAAO,GAEnClP,KAAK6qB,cAAgBrqB,WAASR,KAAK6qB,cAAgB4J,GAAOA,IAAO9iB,EACnE,CAEA+iB,yBAAyB/iB,EAAiBzC,GACpCA,GAAQ,GACVlP,KAAK8qB,gBAAgB0J,OAAOtlB,EAAO,GAErClP,KAAK8qB,gBAAkBtqB,WAASR,KAAK8qB,gBAAkB6J,GAAOA,IAAOhjB,EACvE,EApgCWymB,SAAgB,oCAAhBA,GAAgBp3B,+GAAhBo3B,EAAgB,sBAAhBA,EAAgB14B,0iaDrC7BC,kBAAgCA,mCAAY6G,aAAW,GACrD7G,iBAAiC,UACJA,SAAaA,QACxCA,gBACFA,QACAA,iBAAyB,UACsBA,mBAAOA,QACpDA,iBAA6E,aAA7EA,CAA6E,UAGvEA,0BAEEA,oBACsH,aADtHA,CACsH,cAIxHA,QACAA,mBACFA,UAEFA,8BAA2C,WAEvCA,2BAEEA,oBAC8uC,cAGhvCA,QACAA,kBACFA,UAEFA,8BAGEA,2BAEEA,oBACid,cAGndA,QACAA,uBACFA,QACAA,8BAEEA,2BAEEA,oBACuR,cAGzRA,QACAA,mBACFA,YAIJA,qCA4FAA,2BAAqB,YACaA,kCAAqBA,QACrDA,mBAAmB,gBACsDA,gCAAS6G,uBAAqB,GAEnG7G,2BAEEA,oBAC+I,cAGjJA,UAEFA,2BAAgE,YAAhEA,CAAgE,gBAEEA,gCAAS,IAAI,GAGzEA,6CACFA,YAGJA,oBAaFA,UAGFA,mBAAqD,YAArDA,CAAqD,eAExBA,wCAA2BA,UAEtDA,mBAAsB,YAAtBA,CAAsB,oBAGRA,yCAAiB6G,sBAAyB,GACP7G,QAC7CA,4BAGFA,YAiBJA,mBAAsD,YAAtDA,CAAsD,eAEzBA,8BAAiBA,UAE5CA,mBAAsB,YAAtBA,CAAsB,oBAIlBA,yCAAiB6G,mBAAsB,GACN7G,QACjCA,4BAGFA,YAIJA,mBAA+C,YAA/CA,CAA+C,eAElBA,2BAAcA,UAEzCA,mBAAsB,eAAtBA,CAAsB,gBAGOA,qDAAuCA,QAChEA,sBAA+BA,6DAA+CA,QAC9EA,sBAAwBA,oDAAuCA,UAEjEA,4BAGFA,UAEFA,eAaAA,mBAAqD,YAArDA,CAAqD,gBAIzCA,gCAAS6G,WAAS,GACxB7G,2BAEEA,oBAA+F,cAGjGA,UAEFA,mBACAA,2BAGAA,6CAgCFA,YAKJA,2BAEEA,2BA+BAA,2BA0BFA,QAEAA,0BAMAA,0BAcAA,2BAuCAA,6CAcAA,sEAncMA,iCAEyBA,0BAoBJA,2CAabA,qCAwBGA,oCAuINA,+FAGOA,mDACFA,+CAyBLA,4FAIHA,iDACQA,6CAaFA,uEAKAA,gDAqB4DA,qCAU7DA,iCAAe,cA0CKA,8CA+BCA,gDA4B5BA,mGAMAA,iCAcwDA,opDCzWjDy4B,CAAgB,wEC0EnBz4B,eACEA,kCAAqBA,cAAKA,mCAC5BA,mCA4BFA,oBACEA,2BACFA,+BADEA,6HAGAA,oBACEA,2BACFA,+BADEA,kHAIJA,oBACEA,iDACFA,0DA3FNA,iBACEA,iBAAiC,WACHA,6BAAiBA,QAE7CA,kBAAmB,eAEsDA,gCAAS,IAAI,GAIlFA,0BAEEA,mBAC+I,aAGjJA,UAEFA,0BAAgE,YAAhEA,CAAgE,YAErDA,0BAAaA,QACpBA,mBACAA,mBAAuB,gBAGLA,yDAASA,yBAAgB,GACvCA,mBACFA,QACAA,sBAEgBA,yDAASA,0BAAiB,GACxCA,oBACFA,QACAA,sBAEgBA,yDAASA,6BAAoB,GAC3CA,uBACFA,cAINA,mBAEAA,wBAIOA,2DAAUA,8BAA0B,GAJ3CA,QAMAA,6CAMAA,sBAAuEA,2DAASA,gBAAgB,GAG9FA,2BAEEA,oBAC+I,cAGjJA,UAEFA,mBACFA,UAEFA,2BAA2CA,gEAAeA,yBAAqB,GAE7EA,wBAQAA,mBACEA,4BAGAA,6CAMAA,4BAGFA,UAEJA,wDAvFcA,wCAiBAA,mGAKAA,kGAKAA,kGAqB0FA,qCAAoB,gBAiB9GA,gFAIAA,4BAAoB,qCAIpBA,mEAAiD,cASjDA,iFAgDRA,oBACEA,iDACFA,mCAYAA,qBAAsDA,SAAKA,kCAAjBA,iBAAYA,0CAExDA,oBACEA,iDACFA,gCAuBAA,oBACEA,iDACFA,0DAwCAA,wBAAsC,eACoBA,yDAASA,mBAAU,GAAGA,wBAAWA,SAAS,mDAGlGA,0BAA8D,WAA9DA,CAA8D,eAKxDA,0BAEEA,mBAEFA,UAEFA,6BAMAA,kBAA2B,UACAA,0DAASA,mBAAU,GAAEA,yBAAaA,aAAI,0BAfzDA,uFAYAA,gFAQVA,6BAGEA,0BAEEA,mBAEFA,iCANMA,iHAxBVA,yBAsBAA,6EAtBMA,0BAAiB,sCA+CvBA,2BAEEA,oBAEFA,gCAGAA,2BAEEA,oBAEFA,mCAQIA,cAAwDA,SAAWA,kCAAXA,6CAD1DA,cACEA,yBACFA,+BAD0BA,qEAxBlCA,sBAAwG,WAAxGA,CAAwG,eAAxGA,CAAwG,cAGpEA,SAAiCA,QAE/DA,0BAOAA,0BAMFA,UAEFA,mBAA0B,aAEtBA,+BAKFA,6CA3BiFA,sBAGjDA,sDAExBA,mCAOAA,4DAuBNA,2BAEEA,oBAEFA,gCACAA,2BAEEA,oBAEFA,mCAOIA,cAA0DA,SAAWA,kCAAXA,6CAD5DA,cACEA,yBACFA,+BAD0BA,uEApBlCA,uBAA4G,WAA5GA,CAA4G,eAA5GA,CAA4G,cAGvEA,SAAqCA,QACpEA,0BAKAA,0BAKFA,UAEFA,mBAA0B,aAEtBA,+BAKFA,6CAvBqFA,sBAGpDA,0DACzBA,mCAKAA,+DAmBdA,mBAEgD,eAE5CA,gDACFA,gCAHGA,wEAMLA,mBAA8G,YAA9GA,CAA8G,cAEpEA,sBAAUA,UAElDA,qBAEEA,iDACFA,gCAPiEA,uFAiB3DA,gCAQkBA,sEAAqBA,0BAAiB,EAAtCA,CAAuC,kEAChBA,4BAAmB,EAD1CA,CAAuC,iEAEjBA,+BAAsB,GAAEA,iCAVbA,oCAA4B,uBAA5BA,CAA4B,oBAA5BA,CAA4B,6BAA5BA,CAA4B,gBAA5BA,CAA4B,wCAA5BA,CAA4B,+DAW/EA,mBAAoD,mBAE9CA,qFACFA,iBAFWA,4DAZfA,uCAWAA,iDAXmBA,sEAWbA,wGAYNA,sDAAkBA,qCAA6B,+BAA7BA,CAA6B,mCAA7BA,CAA6B,sDAHnDA,kBAA4E,WAC3DA,4BAAeA,QAC9BA,kCAOFA,cATsCA,oFA3B1CA,mBACyG,gBAC9EA,uFAEvBA,kBAAmC,WACnBA,yBAAaA,QAC3BA,kCAmBFA,QAEAA,yBAUFA,QACAA,mBACFA,2CArC2BA,oCAAqB,eAArBA,CAAqB,oBAExCA,6CAuBCA,iFAWFA,4DAaCA,cAAsDA,SAA6BA,kCAA7BA,wEAH1DA,eAAoD,MAApDA,CAAoD,YACvCA,+FAAmFA,UAC9FA,cACEA,yBACFA,QACAA,aAAG,YAAQA,gEAAoDA,mCAFvCA,+EAQtBA,cAAsDA,SAA6BA,kCAA7BA,wEAHxDA,aAAG,YAAQA,wIACeA,UAC1BA,cACEA,yBACFA,QACAA,aAAG,YAAQA,gEAAoDA,iCAFvCA,8FAhB5BA,mBAA0B,YACiBA,yBAAaA,QACtDA,sBAA2DA,2DAASA,gBAAqB,eAAc,GAAEA,UAE3GA,mBACEA,yBAOAA,6CASAA,mBACEA,qBACAA,uBACEA,4BAEEA,qBACgK,eAGlKA,cAINA,4BAA0B,iBACgCA,2DAASA,gBAAqB,gBAAe,GAAEA,gBACvGA,QACAA,uBAA6CA,8DAAS65B,eAAmB,YAAa75B,uBAAc,GAAGA,wDAEvGA,SAAS,oCAlCHA,oCAAkB,cAiB0CA,sCAC9BA,6FAsBtCA,mBAA0B,YACuBA,+BAAmBA,QAClEA,sBAA2DA,2DAASA,gBAAe,eAAc,GACjGA,UAEFA,mBACEA,+BACFA,QACAA,iECvcIqK,GAAU,GAAGpK,4BAeZ,IAAM65B,GAAiB,MAAxB,MAAOA,EAiHXj6B,YACS0S,EACCnS,EAEAoT,EACAyW,EACAF,EACArb,EACAgF,EACAsW,EACAE,EACAzW,GAVDpT,oBACCA,YAEAA,gBACAA,oBACAA,4BACAA,wBACAA,qBACAA,qBACAA,6BACAA,oBA1HVA,yBAAsB,kMAYbA,qBAA0B,EAGzBA,oBAAiB,IAAIoS,MAGrBpS,eAAY,IAAIoS,MAChBpS,kBAAe,IAAIoS,MAKpBpS,eAA2BmR,QAC5BnR,wBAAoC,IAAIqqB,IAEvCrqB,oBAAgCmR,QACjCnR,wBAAoC,IAAIqqB,IAEhDrqB,kBAAe,IAAIue,KAEnBve,aAA+BA,KAAKqT,cAAc7E,QAClDxO,YAA6BA,KAAKqT,cAAc5E,OAChDzO,iBAAkCA,KAAKqT,cAAcmL,YACrDxe,aAAsCA,KAAKqT,cAAcyW,QAEzD9pB,YAAkB,GAClBA,WAAgB,GAChBA,gBAAa,GAEbA,iBAAsB,GAEtBA,gBAAa,GAAGJ,oBAGhBI,4BAAyB,CACvBkqB,uBAAwB,GACxBC,wBAAyB,GACzBC,mBAAoB,IAMtBpqB,uBAA2D,GAC3DA,aAAkB,EAClBA,qBAAkB,EAClBA,eAAoB,UAEpBA,iBAAc,CAEZ+pB,qBAAqB,EACrBld,UAAU,EACVH,UAAU,EACVE,WAAW,EACX5F,aAAa,GAGfhH,aAAmB,CACjBooB,MAAO,EACPC,KAAM,EACNC,KAAM,EACN+P,WAAW,EACX7P,iBAAiB,GAGnBxoB,uBAAoH,GACpHA,qBAA4B,GAE5BA,sBAA2B,EAI3BA,gBAAY,EACZA,cAAU,EACVA,wBAAoB,EAEpBA,sBAAkB,EAClBA,uBAAmB,EACnBA,gBAAY,EAEZA,mBAA0B,GAC1BA,qBAA4B,GAG5BA,mBAAuC,CAAC,IACxCA,kBAAsB,GACtBA,kBAAsB,GAEtBA,0BAA8B,GAE9BA,oBAAwC,CAAC,IAGzCA,mBAAgB,IAChBA,WAAe,GACfA,cAAW,GAEXA,YAAS,eAcL,CAEJP,WACEO,KAAK05B,cACL15B,KAAK25B,aAAe35B,KAAK2pB,cAAc3M,QAAQ9c,IAAIF,KAAKwqB,eAExDxqB,KAAKwe,YAAY7U,QAAKqX,KAAUhhB,KAAKihB,eAAe9gB,UAAUC,IAC5DJ,KAAK4K,WAAaxK,EAClBJ,KAAK2qB,YAAc,GAAGxS,OAAOhF,SAASyX,mBAAmBxqB,MAE3DJ,KAAKwO,QAAQ7E,QAAKqX,KAAUhhB,KAAKihB,eAAe9gB,UAAUC,IACxDJ,KAAKyI,OAASrI,EACdJ,KAAK6qB,cAAgB7qB,KAAKyI,OAAOzI,KAAKkP,QAAQ/H,eAAgBC,OAC9DpH,KAAK8qB,gBAAkB9qB,KAAKyI,OAAOzI,KAAKkP,QAAQ/H,eAAgBE,WAElErH,KAAKyO,OAAO9E,QAAKqX,KAAUhhB,KAAKihB,eAAe9gB,UAAUC,IACvDU,QAAQC,IAAI,UACZD,QAAQC,IAAIX,GACZJ,KAAKgF,MAAQ5E,EACbJ,KAAK6H,UAAY7H,KAAKgF,MAAMhF,KAAKkP,QAAQrH,UAGzC,MAAMkjB,EAAsB/qB,KAAKgF,MAAMhF,KAAKkP,QAAQyB,gBAAgBqa,uBAEpEhrB,KAAKirB,uBAAuBf,uBAAyB,GAAGtqB,uCAAoDmrB,IAC5G/qB,KAAKirB,uBAAuBd,wBAA0B,GAAGvqB,wCAAqDmrB,IAC9G/qB,KAAKirB,uBAAuBb,mBAAqB,GAAGxqB,uCAAoDmrB,IAExG/qB,KAAKorB,gBAAkB5qB,OAAOR,KAAKgF,MAAO,CAAC/E,SAAS,IAGhDD,KAAKgF,MAAMhF,KAAKkP,QAAQjP,UAC1BD,KAAKC,SAAU,EACfirB,cAAclrB,KAAKmrB,gBAAc,GAQrCnrB,KAAK8pB,QAAQngB,QAAKqX,KAAUhhB,KAAKihB,eAAe9gB,UAAUC,IACxDU,QAAQC,IAAI,UACZD,QAAQC,IAAIX,GACZJ,KAAKmO,OAAS/N,IAGhBJ,KAAKqrB,mBAAqBrrB,KAAKsrB,OAAOnrB,UAAU,IAAMH,KAAKurB,aAC3DvrB,KAAKwrB,mBAAqBxrB,KAAKyrB,YAAYtrB,UAAU,IAAMH,KAAK0rB,YAEhE1rB,KAAK2rB,YAEF3rB,KAAK25B,aAAaz5B,IAAI,sBAAsBE,OAC7CJ,KAAK4rB,eAAe5rB,KAAK25B,aAAaz5B,IAAI,sBAAsBE,MAapE,CAEA4hB,cACEkJ,cAAclrB,KAAKmrB,gBACnBD,cAAclrB,KAAKqO,iBAAiB8c,gBACpCnrB,KAAKihB,aAAalX,OAClB/J,KAAKihB,aAAaiB,WAClBliB,KAAKqrB,mBAAmBpJ,aAC1B,CAEAyG,YAAYC,GACNA,EAAQqD,WAAWpD,eACrB9nB,QAAQC,IAAI4nB,EAAQqD,UAAUpD,cAC9B9nB,QAAQC,IAAI,wBACZf,KAAKC,SAAU,EACfD,KAAKisB,sBAAsBtD,EAAQqD,UAAUpD,cAEjD,CAEIwK,2BACF,OAAQpzB,KAAKC,SAAWD,KAAK6H,UAAY,OAAS,QACpD,CAEIqG,wBACF,OAAOlO,KAAK25B,aAAaz5B,IAAI,sBAAsBE,KACrD,CAIA8xB,iBACE9Y,EAA2BpZ,KAAKirB,uBAAuBf,uBAAwBlqB,KAAKD,KAAM,OAC5F,CAEAoyB,kBACE/Y,EAA2BpZ,KAAKirB,uBAAuBd,wBAAyBnqB,KAAKD,KAAM,QAC7F,CACAqyB,qBACEhZ,EAA2BpZ,KAAKirB,uBAAuBb,mBAAoBpqB,KAAKD,KAAM,MACxF,CAIAwzB,mBAAmBlf,GACjBA,EAAO9B,iBAIP,MAAOK,SAASyB,EAAOqR,OACvB9S,GAAS5S,KAAKoU,cAAcxB,EAC9B,CAEA4gB,oBAAoBnf,EAAa4B,GAC/BnV,QAAQC,IAAIsT,GACZA,EAAO9B,gBAMT,CAEA+gB,sBACE,MAAMhzB,EAAON,KAAKqO,iBAAiB7B,oBAAoBxM,KAAK25B,cAEtDxiB,EAAIsB,SAASC,cAAc,KACjCvB,EAAEwB,aAAa,QAAS,iBACxBF,SAASG,KAAKC,YAAY1B,GAG1B,MAAMoB,EAAO,IAAIC,KAAK,CAAC3P,KAAK0B,UAAUjK,EAAM,KAAM,KAClD6W,EAAE2B,KAAOX,OAAOY,IAAIC,gBAAgBT,GACpCpB,EAAE8B,SAAW,iBAEb9B,EAAE+B,OACJ,CAEAwgB,cACE15B,KAAK45B,iBAAkB,EACvB55B,KAAKD,KAAKG,IAAW8J,IAClBL,OAAOxJ,UACRuK,IAGE1K,KAAK65B,gBAAkBnvB,EAAKovB,oBAAoB,GAAGC,OAGnDj5B,QAAQC,IAAIf,KAAK65B,iBACjB75B,KAAK45B,iBAAkB,GAG7B,CAEAjO,YAEE3rB,KAAK25B,aAAaz5B,IAAI,aAAaqF,aAAapF,UAAU,KACxDH,KAAK0uB,YAAY7hB,SAAW7M,KAAK6H,YAGnC7H,KAAK25B,aAAaz5B,IAAI,cAAcqF,aAAapF,UAAU,KACzDH,KAAK0uB,YAAY9hB,UAAY5M,KAAK6H,YAGR7H,KAAK25B,aAAaz5B,IAAI,sBAAsBqF,aAAaoE,QACnFsqB,MAASruB,MAAKsuB,MAAM,QAGD/zB,UAAUqF,IAE7BxF,KAAK4rB,eAAepmB,GACpBxF,KAAK0uB,YAAY3E,oBAAsB/pB,KAAK6H,UAChC,KAARrC,IACFxF,KAAK2a,kBAAoB,GACzB3a,KAAK8a,QAAU,IAGrB,CAEA4Q,WACE1rB,KAAK4sB,uBACL5sB,KAAK6qB,cAAgB,GACrB7qB,KAAK8qB,gBAAkB,GACvB9qB,KAAK6sB,UAAU9Z,KAAK/S,KAAKkP,MAC3B,CAEAqc,YACE,GAAGvrB,KAAK25B,aAAate,QAGnB,OAFArb,KAAKkS,aAAaR,IAAI,gFAAgF1R,KAAKiJ,cAAcmM,4CAA4CpV,KAAKkO,kBAAkBpI,OAAOsP,mBAAoB,qBACvNpV,KAAKyU,KAAKzU,KAAK0U,YAIjB,MAAMoY,EAAYtsB,OAAOR,KAAKgF,MAAMC,MAAMjF,KAAKkP,MAAM,GAAK0G,GAAMA,EAAE/N,WAAa+N,EAAE3V,SAC9ED,KAAKyI,OAAO3C,OAAS,GAAKgnB,EAC3B9sB,KAAKyU,KAAKzU,KAAK+sB,eAEf/sB,KAAKgtB,mBAAoB,EACT,IAAbhtB,KAAKkP,MACNlP,KAAKitB,QAELjtB,KAAKktB,SAGX,CAEAN,uBAEE,MAAO7C,uBAAuBiQ,IAEdh6B,KAAK25B,aAAav5B,MAAM8N,mBACV,IAAblO,KAAKkP,QACpBlP,KAAKqT,cAAczC,qBAAqBmZ,GACxC/pB,KAAK25B,aAAa5b,SAAS7P,kBAAkBmf,SAAStD,GAE1D,CAEAwD,eACE,IACIC,EADAC,EAAWjtB,QAAQR,KAAKkP,MAAQ,EAAGlP,KAAKyI,OAAO3C,QAEnDhF,QAAQC,IAAI0sB,GACZjtB,UAAUitB,EAAU5T,IAClB2T,EAAWxtB,KAAKgF,MAAM6U,GACtB,MAAMuM,EAAkB,IACnBoH,EACHvtB,SAAS,EACT4H,WAAW,GAEb7H,KAAKqT,cAAcjD,WAAWgW,EAAiBvM,EAAC,GAElD7Z,KAAK0tB,UAAY1tB,KAAKqmB,mBAAqBrmB,KAAKitB,OAClD,CAEAA,QAME/M,EAAEmD,GAAGC,UAAUC,IAAItS,OAAS,GAE5B,MAAMtK,EAAe3G,KAAKkP,MAAQ,EAE5B1G,EAAoC,CAAC7B,EAAcA,GAEzD3G,KAAK4sB,uBAEL,IAAI1Y,EAAYlU,KAAK25B,aAAav5B,MAAM8N,kBAGxC,MAAMyf,EAAkB3tB,KAAKqO,iBAAiB7B,oBAAoBxM,KAAK25B,eAI/D3yB,eAAgBhH,KAAKyI,OAAOzI,KAAKkP,OAYnCf,EAAS,CACb5F,YAAe,GACfqlB,eAAkB5tB,KAAK6tB,UAAU9P,SAASxZ,KAAQnE,MAClD0tB,MAAS9tB,KAAK6tB,UAAU9P,SAAS+P,MAAS1tB,MAC1CoI,gBAAmBA,EACnBC,OAAU,CAfK,CACf3B,mBAAsB,WACtBH,aAAgBA,EAChBC,WAAc,aACdC,WAAc,WACdkjB,oBAAuB7V,EACvBnN,iBAAoB4mB,EACpB3mB,YAAeA,KAcXwmB,EAAWrsB,OAAOgP,OAAOjI,GAAkB,CAC/CjI,SAAS,EACT4H,WAAW,EACXC,gBAAiBtH,UAAUwG,GAAaE,WAE1ClH,KAAKqT,cAAc3E,UAAUP,GAC7BnO,KAAKqT,cAAcjD,WAAWod,EAAUxtB,KAAKkP,OAG7ClP,KAAKguB,gBAAgB7f,EACvB,CAEA+e,SAEE,MAAM/e,EAASnO,KAAKmO,OACdxH,EAAe3G,KAAKkP,MAAQ,EAC5B+e,EAAqBjuB,KAAKkP,MAG1B1G,EAAoC,CAAC7B,EAAcA,GAEzD3G,KAAK4sB,uBAGL,MAAMe,EAAkB3tB,KAAKqO,iBAAiB7B,oBAAoBxM,KAAK25B,cAEjEzL,EAAeluB,KAAKyI,OAAOzI,KAAKkP,OACtCpO,QAAQC,IAAI,gBACZD,QAAQC,IAAImtB,GAGZ,MAAQlnB,eAAgBhH,KAAKyI,OAAOzI,KAAKkP,OAEnCF,EAAe,IAChBkf,EACHhjB,gBAAYnD,EACZpB,aAAcA,EACdsnB,mBAAoBA,EACpBlnB,iBAAkB4mB,EAClB3mB,eAIFmH,EAAO1F,OAAOzI,KAAKkP,OAASF,EAC5Bb,EAAO3F,gBAAkBA,EACzB2F,EAAOyf,eAAiB5tB,KAAK6tB,UAAU9P,SAASxZ,KAAQnE,MACxD+N,EAAO2f,MAAQ9tB,KAAK6tB,UAAU9P,SAAS+P,MAAS1tB,MAEhDU,QAAQC,IAAIoN,GAGZnO,KAAKqT,cAAc3E,UAAUP,GAC7B,MAAM4f,EAA6B5sB,OAAOgP,OAAOjI,GAAkB,CACjEjI,SAAS,EACT4H,WAAW,EACXC,gBAAiBtH,UAAUwG,GAAaE,WAE1CpG,QAAQC,IAAI,8BACZD,QAAQC,IAAIgtB,GACZ/tB,KAAKqT,cAAcjD,WAAW2d,EAA4B/tB,KAAKkP,OAE/DlP,KAAKguB,gBAAgB7f,EACvB,CAEAwhB,eAAejQ,GAEb,MAA0B,QAAnBA,EAAOpT,MAAwC,UAAnBoT,EAAOpT,KAAsB,IAC3DoT,EAAO5F,aACVM,SAAUsC,IACVrC,SAAUqC,IACVkF,SAAS,GACP,CAEFyD,eAAgB3F,EAAO5F,aAAgB8W,cACvCnB,UAAW,KACX1V,eAAgB,GAChB6H,SAAS,EAEb,CAEAoM,gBAAgB7f,EAAwBlD,GAAsB,GAO5DjL,KAAK6wB,gBACL7wB,KAAKC,QAAUgL,EACfjL,KAAK6H,WAAaoD,EAClBjL,KAAK8wB,kBAAoB7lB,EACrBA,IACFjL,KAAK6qB,cAAgB,GACrB7qB,KAAK8qB,gBAAkB,IAEzB9qB,KAAKqO,iBAAiB/D,aAAa6D,GAAQhO,UACxCuK,IAED,GAAIA,EAAKtD,QAAasD,EAAKtD,OAAUtB,OAAQ,CAC3ChF,QAAQC,IAAI2J,GACZ5J,QAAQwU,MAAM5K,EAAKtD,QACnBpH,KAAK6qB,cAAgBngB,EAAKtD,OACtBsD,EAAKrD,SAAYvB,SACnBhF,QAAQC,IAAI2J,EAAKrD,UACjBrH,KAAK8qB,gBAAkBpgB,EAAKrD,UAE9BrH,KAAKC,SAAU,EACfD,KAAK6H,WAAY,EACjB,MAAMinB,EAAgB3tB,OAAOgP,OAAOjI,GAAkB,CACpDL,WAAW,EACX5H,SAAS,IAIX,OAFAD,KAAKqT,cAAcjD,WAAW0e,EAAe9uB,KAAKkP,YAClDlP,KAAK+uB,cACL,CAuBF,GApBIrkB,EAAKrD,SAAYvB,SACnBhF,QAAQC,IAAI2J,EAAKrD,UACjBrH,KAAK8qB,gBAAkBpgB,EAAKrD,UAG9BvG,QAAQC,IAAI2J,EAAKnC,aAGjBvI,KAAKqT,cAAc3C,yBADE,CAACsa,uBAAwBtgB,EAAKsgB,wBACOhrB,KAAKkP,OAE/DlP,KAAKqT,cAAc1E,cAAcjE,EAAKnC,aACtCvI,KAAKqT,cAAcxE,sBAAsBnE,EAAKnC,aAC9CvI,KAAKqT,cAAczE,kBAAkBlE,EAAKuD,kBAK1CjO,KAAKmT,SAAS8mB,aAAa,YAAYvvB,EAAKnC,eAGxC0C,EAAY,CACd,MAAMC,EAAa,GAAGR,EAAKsmB,cAC3BlwB,QAAQC,IAAImK,GACZlL,KAAKisB,sBAAsB/gB,EAAU,MAErClL,KAAK0uB,YAAY1nB,aAAc,EAC/BhH,KAAK6H,WAAY,EACjB7H,KAAKC,SAAU,EACfD,KAAK8wB,kBAAmB,EACxB9wB,KAAK+uB,cAAY,EAGnBzZ,IACExU,QAAQwU,MAAMA,GACdtV,KAAK6qB,cAAchqB,KAAKyU,EAAMA,OAC9BtV,KAAK6H,WAAY,EACjB7H,KAAKC,SAAU,EACf,MACM6uB,EAAgB3tB,OAAOgP,OADZnQ,KAAKgF,MAAMhF,KAAKkP,OACa,CAC5CrH,UAAW7H,KAAK6H,UAChB5H,QAASD,KAAKC,UAEhBD,KAAKqT,cAAcjD,WAAW0e,EAAe9uB,KAAKkP,OAClDgc,cAAclrB,KAAKmrB,gBACnBnrB,KAAK+uB,cAAY,EAEvB,CAEA9C,sBAAsB/gB,GACpBlL,KAAKgtB,mBAAoB,EAEzBhtB,KAAKuuB,eAAiB,CAAC,IACvBvuB,KAAKynB,cAAgB,CAAC,IAEtBznB,KAAK0uB,YAAcluB,YAAYR,KAAK0uB,YAAa,KAAM,GACvD,IAAIC,EAAY,EAEhB3uB,KAAKmrB,eAAiByD,YAAY,KAChC5uB,KAAKqO,iBAAiBpD,WAAWC,GAAY/K,UAAUuK,IACrD,GAAuB,UAAnBA,EAAKmkB,QAAyBnkB,EAAKtD,OAAW,CAChDpH,KAAK6qB,cAAgBngB,EAAKpK,KAAQ8G,OAClCpH,KAAK8qB,gBAAkBpgB,EAAKpK,KAAQ+G,SACpCrH,KAAK6H,WAAY,EACjB7H,KAAKC,SAAU,EACf,MAAMywB,EAAW1wB,KAAKgF,MAAMhF,KAAKkP,OACjCpO,QAAQC,IAAI2vB,GACZ,MAAM5B,EAAgB3tB,OAAOgP,OAAOugB,EAAU,CAC5C7oB,UAAW7H,KAAK6H,UAChB5H,QAASD,KAAKC,UAEhBD,KAAKqT,cAAcjD,WAAW0e,EAAe9uB,KAAKkP,OAClDgc,cAAclrB,KAAKmrB,gBACnBnrB,KAAK+uB,cAAY,CAUnB,GARIrkB,EAAKpK,KAAQ+G,UAAavB,SAE5B9F,KAAK8qB,gBAAkBpgB,EAAKpK,KAAQ+G,UAElCqD,EAAKpK,KAAQ8G,QAAWtB,SAE1B9F,KAAK6qB,cAAgBngB,EAAKpK,KAAQ8G,QAEb,SAAnBsD,EAAKmkB,OAAsB,CAE7B,MAAMvuB,EAAOoK,EAAKpK,KAAQ2uB,QAC1BnuB,QAAQC,IAAIT,GAEZN,KAAKkvB,OAAS5uB,EAAK,GAAGgM,KAItB9L,UAAUF,EAAM2G,IACd,GAAmB,kBAAfA,EAAMqF,OACRtM,KAAKkH,QAAU1G,MAAMyG,EAAMkoB,cAAe,CAACzP,EAAQ7F,KAC7C6F,EAAO0P,eAAiBC,OAAOC,SAAS5P,EAAO6P,qBAEjDvvB,KAAKgvB,aAAatP,EAAO6P,mBAAqB,CAAC1V,EAA4B,cAAzB6F,EAAO0P,cAAgC,MAAQ,SAEnG1P,EAAOjM,MAAW,GAAGiM,EAAOkH,eAC5BlH,EAAOpf,KAAU,GAAGof,EAAOnb,OAC3B,IAAI4V,EAASuF,EAAOvF,OAEpBuF,EAAOzF,UAAe,GAAGE,KAAUuF,EAAOnb,OAE1C,IAAIirB,EAAarV,EAAO5C,MAAM,KAE9B4C,SAASqV,EAAWA,EAAW1pB,OAAS,GAExC4Z,EAAOpf,KAAU,GAAG6Z,KAAUuF,EAAOnb,OAcrCmb,EAAO5F,aAAkB4F,EAAO5F,cAAoB9Z,KAAK2vB,eAAejQ,GACjEA,IAET1f,KAAKye,aAAe,IAAIze,KAAKgvB,cACzBhvB,KAAKkH,SAAS,CAChBlH,KAAKynB,cAAgBxgB,EAAMuY,WAC3B,MAAMkR,EAAW1wB,KAAKgF,MAAMhF,KAAKkP,OACjCpO,QAAQC,IAAI2vB,GACZ,MAAMmI,EAAuB13B,OAAOgP,OAAOugB,EAAU,CACnD7oB,WAAW,EACX5H,SAAS,IAGXD,KAAKqT,cAAcjD,WAAWyoB,EAAsB74B,KAAKkP,OAEzDgc,cAAclrB,KAAKmrB,gBACnBnrB,KAAK+uB,eAEL/uB,KAAK6H,WAAY,EACjB7H,KAAKC,SAAU,EAGA,yBAAfgH,EAAMqF,OACRtM,KAAK8vB,uBAAyBtvB,MAAMyG,EAAMkoB,cAAe,CAACzP,EAAQ7F,KAIhE6F,EAAOjM,MAAW,GAAGiM,EAAOkH,eAC5BlH,EAAOpf,KAAU,GAAGof,EAAOnb,OAC3B,IAAI4V,EAASuF,EAAOvF,OAEpBuF,EAAOzF,UAAe,GAAGE,KAAUuF,EAAOnb,OAG1C,IAAIirB,EAAarV,EAAO5C,MAAM,KAE9B4C,SAASqV,EAAWA,EAAW1pB,OAAS,GAExC4Z,EAAOpf,KAAU,GAAG6Z,KAAUuF,EAAOnb,OAarCmb,EAAO5F,aAAkB4F,EAAO5F,aAAkB9Z,KAAK2vB,eAAejQ,QAAU3X,EACzE2X,IAET1f,KAAK+vB,qBAAuB,GACxB/vB,KAAK8vB,yBAEP9vB,KAAKuuB,eAAiBtnB,EAAMuY,cAGjC,CAEH,GAAuB,aAAnB9U,EAAKmkB,OAA0B,CAEjC7uB,KAAK6H,WAAY,EACjB7H,KAAKC,SAAU,EACf,MAAMywB,EAAW1wB,KAAKgF,MAAMhF,KAAKkP,OACjCpO,QAAQC,IAAI2vB,GACZ,MAAMC,EAA+BxvB,OAAOgP,OAAOugB,EAAU,CAC3D7oB,UAAW7H,KAAK6H,UAChB5H,QAASD,KAAKC,UAEhBD,KAAKqT,cAAcjD,WAAWugB,EAA8B3wB,KAAKkP,OACjEgc,cAAclrB,KAAKmrB,gBAEnBnrB,KAAK+uB,cAAY,MAKjB/uB,KAAKgtB,mBAAoB,EAEzBlsB,QAAQC,IAAI,mBAAmB2J,EAAKmkB,YAAeF,KACnDA,GAAa,GAEdrZ,IACDxU,QAAQwU,MAAMA,GACdtV,KAAK+uB,eACL7D,cAAclrB,KAAKmrB,gBACnBnrB,KAAK6H,WAAY,EACjB7H,KAAKC,SAAU,GAChB,EA7JkB,IA+JvB,CAEAmU,cAAcC,GACZvT,QAAQC,IAAIsT,GACZ,MAAMC,EAAOD,EAAO,GACdE,EAAWD,EAAKE,KAAO,KAC7B1T,QAAQC,IAAIuT,EAAKhI,MACbiI,EAAW,KACbvU,KAAKkS,aAAaR,IAAI,mCAAoC,gBAC1D1R,KAAKyU,KAAKzU,KAAK0U,aAGf1U,KAAK2U,wBAAwBN,EAEjC,CAEAM,wBAAwB/B,GACtB9R,QAAQC,IAAI6R,GACZ5S,KAAKymB,SAAW7T,EAAM,GAAGrO,KACzB,MAAMqQ,EAAS,IAAIC,WACbC,EAAS9U,KAAK25B,aACpB,UAAW5kB,KAAQnC,EAEjBgC,EAAOI,WAAWD,GAClBH,EAAOK,OAAS,KACd,MAAMzP,EAAMoP,EAAOZ,QAAQkB,YAAc,GACzCpU,QAAQC,IAAIyE,GACZ,MAAMI,EAAI8C,EAAQlD,GAClB1E,QAAQC,IAAI6E,GACRA,EAEQoD,EAAYxD,EAAKxF,KAAKiJ,eAE9B6L,EAAOK,WAAW,CAACjH,kBAAmB1I,KAEtCxF,KAAKkS,aAAaR,IAAI,iDAAiD1R,KAAKiJ,cAAcmM,eAAe,sBAAuB,gBAChIpV,KAAKyU,KAAKzU,KAAK0U,cAIjB1U,KAAKkS,aAAaR,IAAI,2EAA4E,gBAClG1R,KAAKyU,KAAKzU,KAAK0U,YAAU,EAI7BE,EAAOS,QAAU,KACfvU,QAAQC,IAAI6T,EAAOU,MAAK,EAE1BP,EAAKQ,SAAW,EAChBvV,KAAK4S,MAAM/R,KAAKkU,EAEpB,CAIAN,KAAK8B,GACHvW,KAAKoT,aAAaqB,KAAK8B,EAAS,CAC9BC,eAAgB,oBAChBhC,KAAM,KACNiC,WAAW,IACVzC,OAAO2C,KAAM3C,IAEdhU,KAAK0tB,WAAY,GACf9W,IACF5W,KAAK0tB,WAAY,GAIrB,CAGA0D,WACEtwB,QAAQC,IAAIf,KAAKmrB,gBACjBD,cAAclrB,KAAKmrB,gBACnBnrB,KAAKqxB,aAAate,OAKlB,MAAMqT,EAAkB,IADJpmB,KAAKgF,MAAMhF,KAAKkP,OAGlCjP,SAAS,EACT4H,WAAW,EACXC,oBAAgBC,GAElB/H,KAAKqT,cAAcjD,WAAWgW,EAAiBpmB,KAAKkP,OACpDlP,KAAK8qB,gBAAkB,GACvB9qB,KAAKC,SAAU,EACfD,KAAK8wB,kBAAmB,EACxB9wB,KAAK+uB,cACP,CAEAuC,UACEtxB,KAAKkS,aAAaH,QAClB/R,KAAK6qB,cAAgB,GACrB7qB,KAAK8qB,gBAAkB,EACzB,CAEAiE,eAEE/uB,KAAK25B,aAAa5b,SAASnR,UAAa8V,OAAO,CAAC8O,WAAW,IAC3DxxB,KAAK25B,aAAa5b,SAASlR,SAAY6V,OAAO,CAAC8O,WAAW,IAC1DxxB,KAAK6oB,QAAU1nB,OAAOgP,OAAO,GAAInQ,KAAK6oB,QAAS,CAAC7gB,UAAU,GAC5D,CAEA6oB,gBAEE7wB,KAAK25B,aAAa5b,SAASnR,UAAamW,QAAQ,CAACyO,WAAW,IAC5DxxB,KAAK25B,aAAa5b,SAASlR,SAAYkW,QAAQ,CAACyO,WAAW,IAC3DxxB,KAAK6oB,QAAU1nB,OAAOgP,OAAO,GAAInQ,KAAK6oB,QAAS,CAAC7gB,UAAU,GAC5D,CAEAkpB,kBACElxB,KAAK0uB,YAAY1nB,YAAchH,KAAK6H,SACtC,CAEAspB,oBACEnxB,KAAKkH,QAAU1G,MAAMR,KAAKkH,QAAUzG,IAClCA,EAAEy4B,QAAqB,QAAXz4B,EAAE6L,KAAgB,CAC1B8N,SAAUsC,IACVrC,SAAUqC,IACVkF,SAAS,GAEX,CACEyD,eAAgB,GAChBoK,UAAW,KACX1V,eAAgB,GAChB6H,SAAS,GAENnhB,IAETT,KAAK0uB,YAAY1nB,YAAchH,KAAK6H,SACtC,CAEAopB,uBACoBzwB,OAAOR,KAAKgF,MAAMC,MAAMjF,KAAKkP,MAAM,GAAI,CAACrH,WAAW,KAEnE7H,KAAK0tB,WAAY,EACjB1tB,KAAKyU,KAAKzU,KAAK+sB,eAEf/sB,KAAKqmB,kBAET,CAEAA,mBACE,MAEMlY,EAASnO,KAAKmO,OAEpB,IAAIwL,EAASD,EAAmB1Z,KAAKkH,QAJlB,YAKnB,MAAMuB,EAAS0F,EAAO1F,OAChB4G,EAAY5G,EAAOzI,KAAKkP,OAG9BG,EAAUrI,YAAc,CAAC,CAACC,MAAO,gBAAiBC,QAASyS,IAE3DlR,EAAOzI,KAAKkP,OAASG,EACrBlB,EAAO1F,OAASA,EAEhB,MAAM9B,EAAe3G,KAAKkP,MAAQ,EAClCf,EAAO3F,gBAAkB,CAAC7B,EAAcA,GACxC3G,KAAKqT,cAAc3E,UAAUP,GAE7B,IAAIrG,GAAkBtH,UAAUmZ,GAChC3Z,KAAKqT,cAAc5C,sBAAsB3I,EAAgB9H,KAAKkP,OAC9DlP,KAAKguB,gBAAgB7f,GAAQ,GAC7BnO,KAAK0tB,WAAY,CACnB,CAEAwM,wBAAwBnG,GACtB/zB,KAAK0uB,YAAYhiB,SAAW1M,KAAK6H,SACnC,CAEA+jB,eAAepmB,GAEb,MAAMiuB,EAAY1qB,GAAMvD,GAAK,GACvBkuB,EAAYluB,EAAI+R,MAAM,MAAM,GAClCzW,QAAQC,IAAI2yB,GAGZ,IAAIC,EAAyB,EACzBxX,EAAY,IACbuX,EAAUhzB,SAAS,KACpByb,EAAY,IACHuX,EAAUhzB,SAAS,MAC5Byb,EAAY,KACHuX,EAAUhzB,SAAS,OAC5Byb,EAAY,KAEdwX,EAAyBD,EAAUnc,MAAM4E,GAAWrW,OACpDhF,QAAQC,IAAI4yB,GACZ7yB,QAAQC,IAAIob,GAEZ,MAAMyX,EAAYpuB,EAAIP,MAAM,EAAGjF,KAAKiJ,eAEjCzD,EAAIM,OAAS9F,KAAKiJ,gBAEI,MAAdwqB,GAAqBzzB,KAAK6pB,sBAAsBzO,cAAc5V,IACvExF,KAAKmb,UAAYnb,KAAK6pB,sBAAsB1O,UAC5Cnb,KAAK6zB,gBAAkBD,EAAU9tB,QACT,MAAd2tB,GAAmC,MAAdA,IAAsB7qB,GAAapD,GAG9B,IAA3BmuB,GAAgC3zB,KAAK6pB,sBAAsB3N,wBAAwB1W,EAAK2W,IAIxF3W,EAAIM,OAAS,IAAMN,EAAI9E,SAAS,MAAQV,KAAK6pB,sBAAsBvN,0BAA0B9W,IAFtGxF,KAAKmb,UAAYnb,KAAK6pB,sBAAsB1O,UAC5Cnb,KAAK6zB,gBAAkBD,EAAU9tB,QAKhB,KAARN,GAITxF,KAAKmb,UAAY,UACjBnb,KAAK6zB,gBAAkB,IAEvB7zB,KAAKmb,UAAY,QACjBnb,KAAK6zB,gBAAkB,IAlBvB7zB,KAAKmb,UAAY,OACjBnb,KAAK6zB,gBAAkBD,EAAU9tB,QAmBrC,EA/7BW2zB,SAAiB,oCAAjBA,GAAiBz4B,6GAAjBy4B,EAAiB,sBAAjBA,EAAiB/5B,m3aD5D9BC,kBAAiCA,mCAAY6G,aAAW,GACtD7G,iBAAiC,UACJA,SAAaA,QACxCA,gBACFA,QACAA,iBAAyB,UACuBA,oBAAQA,QACtDA,iBAA6E,aAA7EA,CAA6E,UAIvEA,0BAEEA,oBACsH,aADtHA,CACsH,cAIxHA,QACAA,mBACFA,UAEFA,8BAA2C,WAGvCA,2BAEEA,oBAC8uC,cAGhvCA,QACAA,kBACFA,UAEFA,8BAGEA,2BAEEA,oBACid,cAGndA,QACAA,uBACFA,QACAA,8BAEEA,2BAEEA,oBACuR,cAGzRA,QACAA,mBACFA,YAIJA,qCAiGAA,2BAAqB,YACaA,kCAAqBA,QACrDA,mBAAmB,gBAEsDA,gCAAS6G,uBAAqB,GAEnG7G,2BAEEA,oBAC+I,cAGjJA,UAEFA,mBAaFA,UAGFA,2BAAgC,YAAhCA,CAAgC,eAEMA,yCAA4BA,UAEhEA,mBAAsB,YAAtBA,CAAsB,oBAIhBA,yCAAiB6G,4BAA+B,GAC5B7G,QACtBA,4BAGFA,YAIJA,mBAAgC,YAAhCA,CAAgC,eAEMA,qBAAQA,UAE5CA,mBAAsB,gBAGlBA,6BACFA,QACAA,4BAGFA,UAGFA,mBAAgC,YAAhCA,CAAgC,eAEMA,0DAA6CA,UAEjFA,mBAAsB,aAElBA,qBAEAA,qBACEA,qCACFA,UAEFA,mBACEA,qBAEAA,qBACEA,0BACFA,UAEFA,4BAGFA,QACEA,mBAAsB,aAEpBA,qBAMAA,qBACEA,yCACFA,cAcNA,eACAA,mBAAqD,YAArDA,CAAqD,gBAIzCA,gCAAS6G,WAAS,GACxB7G,2BAEEA,oBAA+F,cAGjGA,UAEFA,mBACAA,2BAGAA,6CAoCFA,YAKJA,2BAEEA,2BA+BAA,2BA0BFA,QAEAA,0BAQAA,0BAUAA,0BA0CAA,8CA6CAA,qEA3eMA,kCAEyBA,0BAqBJA,2CAcbA,qCAwBGA,oCAoINA,8FAIDA,oCACMA,8CAaFA,qEACgBA,4CAEhBA,8CAaCA,2BAOAA,2BAKDA,+CAUCA,6CAsB2DA,qCAU7DA,iCAAe,cA8CKA,8CA+BCA,gDA4B5BA,mGAQAA,iCAWAA,2vDCzVO85B,CAAiB,wECqDpB95B,eACEA,kCAAqBA,cAAKA,mCAC5BA,mCA4BFA,oBACEA,2BACFA,+BADEA,6HAGAA,oBACEA,2BACFA,+BADEA,kHAIJA,oBACEA,iDACFA,0DA1FNA,iBACEA,iBAAiC,WACHA,6BAAiBA,QAE7CA,kBAAmB,eACsDA,gCAAS,IAAI,GAIlFA,0BAEEA,mBAC+I,aAGjJA,UAEFA,0BAAgE,YAAhEA,CAAgE,YAErDA,0BAAaA,QACpBA,mBACAA,mBAAuB,gBAGLA,yDAASA,yBAAgB,GACvCA,mBACFA,QACAA,sBAEgBA,yDAASA,0BAAiB,GACxCA,oBACFA,QACAA,sBAEgBA,yDAASA,6BAAoB,GAC3CA,uBACFA,cAINA,mBAEAA,wBAIOA,2DAAUA,8BAA0B,GAJ3CA,QAMAA,6CAMAA,sBAAuEA,2DAASA,gBAAgB,GAG9FA,2BAEEA,oBAC+I,cAGjJA,UAEFA,mBACFA,UAEFA,2BAA2CA,gEAAeA,yBAAqB,GAE7EA,wBAQAA,mBACEA,4BAGAA,6CAMAA,4BAGFA,UAEJA,wDAvFcA,wCAiBAA,mGAKAA,kGAKAA,kGAqB0FA,qCAAoB,gBAiB9GA,gFAIAA,4BAAoB,qCAIpBA,mEAAiD,cASjDA,iFA4CVA,oBACEA,iDACFA,gCASAA,kBAAgG,WAAhGA,CAAgG,aAEtDA,sBAAUA,uCAOhDA,qBAAkDA,SAAOA,kCAAnBA,iBAAYA,0CAEpDA,oBACEA,iDACFA,kDAPAA,qBAEQA,2DAAUA,8BAA0B,GAC1CA,4BACFA,QACAA,mDAJQA,+DAEgBA,wCAEhBA,yEAYVA,kBAA0F,WAA1FA,CAA0F,aAEhDA,sBAAUA,uCAMlDA,qBAA0DA,SAAWA,kCAAlCA,4BAAuBA,gDAE5DA,oBACEA,iDACFA,mCANAA,qBAEEA,4BACFA,QACAA,iDAHQA,+DACgBA,qCAEhBA,iFAqBRA,wBAAsC,eACoBA,gCAAS,IAAI,GAAGA,wBAAWA,6CAGnFA,0BAA8D,WAA9DA,CAA8D,eAKxDA,0BAEEA,mBAEFA,UAEFA,8BAMAA,mBAA2B,WACAA,gCAAS,IAAI,GAAEA,yBAAaA,qCAf/CA,uFAYAA,gFAQVA,6BAGEA,0BAEEA,mBAEFA,iCANMA,iHAxBVA,yBAsBAA,6EAtBMA,0BAAiB,sCAgDvBA,2BAEEA,oBAEFA,gCAGAA,2BAEEA,oBAEFA,mCAQIA,cAAwDA,SAAWA,kCAAXA,6CAD1DA,cACEA,yBACFA,+BAD0BA,qEAxBlCA,uBAAwG,WAAxGA,CAAwG,eAAxGA,CAAwG,cAGpEA,SAAiCA,QAE/DA,0BAOAA,0BAMFA,UAEFA,mBAA0B,aAEtBA,+BAKFA,6CA3BiFA,sBAGjDA,sDAExBA,mCAOAA,4DAuBNA,2BAEEA,oBAEFA,gCACAA,2BAEEA,oBAEFA,mCAOIA,cAA0DA,SAAWA,kCAAXA,6CAD5DA,cACEA,yBACFA,+BAD0BA,uEApBlCA,uBAA4G,WAA5GA,CAA4G,eAA5GA,CAA4G,cAGvEA,SAAqCA,QACpEA,0BAKAA,0BAKFA,UAEFA,mBAA0B,aAEtBA,+BAKFA,6CAvBqFA,sBAGpDA,0DACzBA,mCAKAA,+DAmBdA,mBAEgD,eAE5CA,gDACFA,gCAHGA,wEAMLA,mBAA8G,YAA9GA,CAA8G,aAEpEA,sBAAUA,UAElDA,qBAEEA,iDACFA,gCAPiEA,uFAiB3DA,gCAQkBA,sEAAqBA,0BAAiB,EAAtCA,CAAuC,kEAChBA,4BAAmB,EAD1CA,CAAuC,iEAEjBA,6BAAqB,iBAAgB,GAAEA,iCAV5BA,oCAA4B,qCAA5BA,CAA4B,kCAA5BA,CAA4B,6BAA5BA,CAA4B,gBAA5BA,CAA4B,0CAA5BA,CAA4B,+DAW/EA,mBAAoD,mBAEhDA,qFACFA,iBAFWA,4DAZbA,uCAWAA,iDAXmBA,sEAWbA,wHAYNA,gCAOkBA,sEAAqBA,2BAAkB,EAAvCA,CAAwC,kEACjBA,6BAAoB,EAD3CA,CAAwC,iEAElBA,6BAAqB,8BAA6B,GACzFA,iCAV+DA,iDAAyC,oCAAzCA,CAAyC,iCAAzCA,CAAyC,6BAAzCA,CAAyC,gBAAzCA,CAAyC,mEAWzGA,mBAAiE,mBAE7DA,qFACFA,iBAFWA,4DAZbA,uCAWAA,iDAXmBA,gGAWbA,kIAYNA,sDAAkBA,qCAA6B,+BAA7BA,CAA6B,mCAA7BA,CAA6B,sDAHnDA,kBAA4E,WAC3DA,4BAAeA,QAC9BA,kCAOFA,cATsCA,oFAlD1CA,mBACyG,gBAC9EA,uFAEvBA,kBAAmC,WACnBA,yBAAaA,QAC3BA,kCAmBFA,QAEAA,kBAAgD,WAChCA,sCAA0BA,QACxCA,mCAmBFA,QAEAA,0BAUFA,QACAA,oBACFA,2CA5D2BA,oCAAqB,eAArBA,CAAqB,oBAExCA,6CAuBAA,0DAuBCA,iFAWFA,4DAaCA,cAAsDA,SAA6BA,kCAA7BA,wEAH1DA,eAAoD,MAApDA,CAAoD,YACvCA,+FAAmFA,UAC9FA,cACEA,yBACFA,QACAA,aAAG,YAAQA,gEAAoDA,mCAFvCA,+EAQtBA,cAAsDA,SAA6BA,kCAA7BA,wEAHxDA,aAAG,YAAQA,wIACeA,UAC1BA,cACEA,yBACFA,QACAA,aAAG,YAAQA,gEAAoDA,iCAFvCA,8FAhB5BA,mBAA0B,YACiBA,yBAAaA,QACtDA,sBAA2DA,2DAASA,gBAAqB,eAAc,GAAEA,UAE3GA,mBACEA,yBAOAA,6CASAA,mBACEA,qBACAA,uBACEA,4BAEEA,qBACgK,eAGlKA,cAINA,4BAA0B,iBACgCA,2DAASA,gBAAqB,gBAAe,GAAEA,gBACvGA,QACAA,uBAA6CA,8DAASw6B,eAAmB,YAAax6B,uBAAc,GAAGA,wDAEvGA,SAAS,oCAlCHA,oCAAkB,cAiB0CA,sCAC9BA,6FAsBtCA,mBAA0B,YACuBA,+BAAmBA,QAClEA,sBAA2DA,2DAASA,gBAAe,eAAc,GACjGA,UAEFA,mBACEA,+BACFA,QACAA,6DCndIqK,GAAU,GAAGpK,wBAOZ,IAAMw6B,GAAa,MAApB,MAAOA,EA0IX56B,YACS0S,EACCnS,EACAoT,EACA9E,EACAgF,EACAsW,EACAE,EACAzW,EACAwW,GARD5pB,oBACCA,YACAA,gBACAA,wBACAA,qBACAA,qBACAA,6BACAA,oBACAA,oBAlJVA,yBAAsB,0SAgCtBA,wBAAoB,EACpBA,qBAAiB,EAEjBA,iBAAwB,GACxBA,cAA2F,GAMlFA,qBAA0B,EAGzBA,oBAAiB,IAAIoS,MAGrBpS,eAAY,IAAIoS,MAChBpS,kBAAe,IAAIoS,MAKpBpS,eAA2BmR,QAC5BnR,wBAAoC,IAAIqqB,IAEvCrqB,oBAAgCmR,QACjCnR,wBAAoC,IAAIqqB,IAEhDrqB,kBAAe,IAAIue,KAEnBve,aAA+BA,KAAKqT,cAAc7E,QAClDxO,YAA6BA,KAAKqT,cAAc5E,OAChDzO,iBAAkCA,KAAKqT,cAAcmL,YACrDxe,aAAsCA,KAAKqT,cAAcyW,QAEzD9pB,YAAkB,GAClBA,WAAgB,GAChBA,gBAAa,GAEbA,iBAAsB,GAEtBA,gBAAa,GAAGJ,oBAGhBI,4BAAyB,CACvBkqB,uBAAwB,GACxBC,wBAAyB,GACzBC,mBAAoB,IAMtBpqB,uBAA2D,GAC3DA,aAAkB,EAClBA,qBAAkB,EAClBA,eAAoB,UAEpBA,iBAAc,CAEZ+pB,qBAAqB,EACrBsQ,oBAAoB,EACpBC,aAAa,EAGbC,eAAe,EACfC,eAAe,GAOjBx6B,gBAAY,EACZA,cAAU,EACVA,wBAAoB,EAEpBA,sBAAkB,EAClBA,uBAAmB,EACnBA,gBAAY,EAEZA,mBAA0B,GAC1BA,qBAA4B,GAG5BA,mBAAuC,CAAC,IACxCA,gCAAoC,GACpCA,gCAAoC,GAGpCA,gCAAoD,CAAC,IACrDA,+BAAmC,GACnCA,+BAAmC,GAEnCA,0BAA8B,GAE9BA,oBAAwC,CAAC,IAGzCA,mBAAgB,IAChBA,WAAe,GACfA,cAAW,GAEXA,YAAS,eAaT,CAEAP,WACEO,KAAKy6B,SAAWz6B,KAAK2pB,cAAc3M,QAAQ9c,IAAIF,KAAKwqB,eAEpD,MAAMxd,EAAShN,KAAKy6B,SAAS1c,SAAS/Q,QAAW5M,MAC3C6M,EAAajN,KAAKy6B,SAAS1c,SAAS9Q,YAAe7M,MACzDJ,KAAK06B,QAAQ1tB,EAAQC,GAErBjN,KAAKwe,YAAY7U,QAAKqX,KAAUhhB,KAAKihB,eAAe9gB,UAAUC,IAC5DJ,KAAK4K,WAAaxK,EAClBJ,KAAK2qB,YAAc,GAAGxS,OAAOhF,SAASyX,mBAAmBxqB,MAE3DJ,KAAKwO,QAAQ7E,QAAKqX,KAAUhhB,KAAKihB,eAAe9gB,UAAUC,IACxDJ,KAAKyI,OAASrI,EACdJ,KAAK6qB,cAAgB7qB,KAAKyI,OAAOzI,KAAKkP,QAAQ/H,eAAgBC,OAC9DpH,KAAK8qB,gBAAkB9qB,KAAKyI,OAAOzI,KAAKkP,QAAQ/H,eAAgBE,WAElErH,KAAKyO,OAAO9E,QAAKqX,KAAUhhB,KAAKihB,eAAe9gB,UAAUC,IACvDU,QAAQC,IAAI,UACZD,QAAQC,IAAIX,GACZJ,KAAKgF,MAAQ5E,EACbJ,KAAK6H,UAAY7H,KAAKgF,MAAMhF,KAAKkP,QAAQrH,UAGzC,MAAMkjB,EAAsB/qB,KAAKgF,MAAMhF,KAAKkP,QAAQyB,gBAAgBqa,uBAEpEhrB,KAAKirB,uBAAuBf,uBAAyB,GAAGtqB,uCAAoDmrB,IAC5G/qB,KAAKirB,uBAAuBd,wBAA0B,GAAGvqB,wCAAqDmrB,IAC9G/qB,KAAKirB,uBAAuBb,mBAAqB,GAAGxqB,uCAAoDmrB,IAExG/qB,KAAKorB,gBAAkB5qB,SAAOR,KAAKgF,MAAO,CAAC/E,SAAS,IAGhDD,KAAKgF,MAAMhF,KAAKkP,QAAQjP,UAC1BD,KAAKC,SAAU,EACfirB,cAAclrB,KAAKmrB,gBAAc,GAQrCnrB,KAAK8pB,QAAQngB,QAAKqX,KAAUhhB,KAAKihB,eAAe9gB,UAAUC,IACxDU,QAAQC,IAAI,UACZD,QAAQC,IAAIX,GACZJ,KAAKmO,OAAS/N,IAGhBJ,KAAKqrB,mBAAqBrrB,KAAKsrB,OAAOnrB,UAAU,IAAMH,KAAKurB,aAC3DvrB,KAAKwrB,mBAAqBxrB,KAAKyrB,YAAYtrB,UAAU,IAAMH,KAAK0rB,YAEhE1rB,KAAK2rB,YAEF3rB,KAAKy6B,SAASv6B,IAAI,sBAAsBE,OACzCJ,KAAK4rB,eAAe5rB,KAAKy6B,SAASv6B,IAAI,sBAAsBE,MAahE,CAEA4hB,cACEkJ,cAAclrB,KAAKmrB,gBACnBD,cAAclrB,KAAKqO,iBAAiB8c,gBACpCnrB,KAAKihB,aAAalX,OAClB/J,KAAKihB,aAAaiB,WAClBliB,KAAKqrB,mBAAmBpJ,aAC1B,CAEAJ,kBACEgK,WAAW,KACGC,QAAQ3iB,OAAO4iB,KAEpB/rB,KAAKurB,WAAS,EACpB,EACL,CAEA7C,YAAYC,GACNA,EAAQqD,WAAWpD,eACrB9nB,QAAQC,IAAI4nB,EAAQqD,UAAUpD,cAC9B9nB,QAAQC,IAAI,oBACZf,KAAKC,SAAU,EACfD,KAAKisB,sBAAsBtD,EAAQqD,UAAUpD,cAEjD,CAEIwK,2BACF,OAAQpzB,KAAKC,SAAWD,KAAK6H,UAAY,OAAS,QACpD,CAEIqG,wBACF,OAAOlO,KAAKy6B,SAASv6B,IAAI,sBAAsBE,KACjD,CAEIu6B,wBACF,OAAO36B,KAAKy6B,SAASv6B,IAAI,WAAWE,KACtC,CAIA8xB,iBACE9Y,EAA2BpZ,KAAKirB,uBAAuBf,uBAAwBlqB,KAAKD,KAAM,OAC5F,CAEAoyB,kBACE/Y,EAA2BpZ,KAAKirB,uBAAuBd,wBAAyBnqB,KAAKD,KAAM,QAC7F,CACAqyB,qBACEhZ,EAA2BpZ,KAAKirB,uBAAuBb,mBAAoBpqB,KAAKD,KAAM,MACxF,CAEAuzB,sBACE,MAAMhzB,EAAON,KAAKqO,iBAAiBtB,gBAAgB/M,KAAKy6B,UAElDtjB,EAAIsB,SAASC,cAAc,KACjCvB,EAAEwB,aAAa,QAAS,iBACxBF,SAASG,KAAKC,YAAY1B,GAG1B,MAAMoB,EAAO,IAAIC,KAAK,CAAC3P,KAAK0B,UAAUjK,EAAM,KAAM,KAClD6W,EAAE2B,KAAOX,OAAOY,IAAIC,gBAAgBT,GACpCpB,EAAE8B,SAAW,iBAEb9B,EAAE+B,OACJ,CAEAwhB,QAAQ1tB,EAAiB,OAAQC,EAAW,UAE1CjN,KAAK46B,gBAAiB,EACtB56B,KAAK66B,mBAAoB,EAGzB76B,KAAKD,KAAKG,IAAW,GAAG8J,aAAkBgD,gBAAqBC,KAC5DtD,OAAOxJ,UACRuK,IAGE5J,QAAQC,IAAI2J,GAEZ1K,KAAK86B,SAAWpwB,EAAKqwB,SACrBj6B,QAAQC,IAAIf,KAAK86B,UAEjB96B,KAAKg7B,YAActwB,EAAKswB,YAOxBh7B,KAAK46B,gBAAiB,EACtB56B,KAAK66B,mBAAoB,GAG/B,CAIAtH,mBAAmBlf,GACjBA,EAAO9B,iBAIP,MAAOK,SAASyB,EAAOqR,OACvB9S,GAAS5S,KAAKoU,cAAcxB,EAC9B,CAEA8Y,WACE1rB,KAAK4sB,uBACL5sB,KAAK6sB,UAAU9Z,KAAK/S,KAAKkP,MAC3B,CAGAqc,YACE,GAAGvrB,KAAKy6B,SAASpf,QAGf,OAFArb,KAAKkS,aAAaR,IAAI,gFAAgF1R,KAAKiJ,cAAcmM,4CAA4CpV,KAAKkO,kBAAkBpI,OAAOsP,mBAAoB,qBACvNpV,KAAKyU,KAAKzU,KAAK0U,YAIjB,MAAMoY,EAAYtsB,SAAOR,KAAKgF,MAAMC,MAAMjF,KAAKkP,MAAM,GAAK0G,GAAMA,EAAE/N,WAAa+N,EAAE3V,SAC9ED,KAAKyI,OAAO3C,OAAS,GAAKgnB,EAC3B9sB,KAAKyU,KAAKzU,KAAK+sB,eAEf/sB,KAAKgtB,mBAAoB,EACT,IAAbhtB,KAAKkP,MACNlP,KAAKitB,QAELjtB,KAAKktB,SAGX,CAEAN,uBAEE,MAAO7C,uBAAuBkR,IAEdj7B,KAAKy6B,SAASr6B,MAAM8N,mBACN,IAAblO,KAAKkP,QACpBlP,KAAKqT,cAAczC,qBAAqBmZ,GACxC/pB,KAAKy6B,SAAS1c,SAAS7P,kBAAkBmf,SAAStD,GAEtD,CAEA4B,YAO8B3rB,KAAKy6B,SAASv6B,IAAI,sBAAsBqF,aAAaoE,QAC/EsqB,MAASruB,MAAKsuB,MAAM,QAOD/zB,UAAUqF,IAC7B1E,QAAQC,IAAI,uBAEZf,KAAK4rB,eAAepmB,GACpBxF,KAAK0uB,YAAY3E,oBAAsB/pB,KAAK6H,UAChC,KAARrC,IACFxF,KAAK2a,kBAAoB,GACzB3a,KAAK8a,QAAU,IAGrB,CAIArG,KAAK8B,GACHvW,KAAKoT,aAAaqB,KAAK8B,EAAS,CAC9BC,eAAgB,oBAChBhC,KAAM,KACNiC,WAAW,IACVzC,OAAO2C,KAAM3C,IAEdhU,KAAK0tB,WAAY,GACf9W,IACF5W,KAAK0tB,WAAY,GAIrB,CAEA0D,WACEtwB,QAAQC,IAAIf,KAAKmrB,gBACjBD,cAAclrB,KAAKmrB,gBACnBnrB,KAAKqxB,aAAate,OAKlB,MAAMqT,EAAkB,IADJpmB,KAAKgF,MAAMhF,KAAKkP,OAGlCjP,SAAS,EACT4H,WAAW,EACXC,oBAAgBC,GAElB/H,KAAKqT,cAAcjD,WAAWgW,EAAiBpmB,KAAKkP,OACpDlP,KAAK8qB,gBAAkB,GACvB9qB,KAAKC,SAAU,EACfD,KAAK8wB,kBAAmB,EACxB9wB,KAAK+uB,cACP,CAEAuC,UACEtxB,KAAKkS,aAAaH,QAClB/R,KAAK6qB,cAAgB,GACrB7qB,KAAK8qB,gBAAkB,EACzB,CAEAiE,eACE/uB,KAAKy6B,SAAS1c,SAAS/Q,OAAU0V,OAAO,CAAC8O,WAAW,IACpDxxB,KAAKy6B,SAAS1c,SAAS9Q,WAAcyV,OAAO,CAAC8O,WAAW,IACxDxxB,KAAKy6B,SAAS1c,SAAS7Q,WAAcwV,OAAO,CAAC8O,WAAW,GAE1D,CAEAX,gBACE7wB,KAAKy6B,SAAS1c,SAAS/Q,OAAU+V,QAAQ,CAACyO,WAAW,IACrDxxB,KAAKy6B,SAAS1c,SAAS9Q,WAAc8V,QAAQ,CAACyO,WAAW,IACzDxxB,KAAKy6B,SAAS1c,SAAS7Q,WAAc6V,QAAQ,CAACyO,WAAW,GAE3D,CAEAN,kBACElxB,KAAK0uB,YAAY6L,cAAgBv6B,KAAK6H,SACxC,CACAqzB,mBACEl7B,KAAK0uB,YAAY8L,cAAgBx6B,KAAK6H,SACxC,CAEAspB,oBACEnxB,KAAK4vB,sBAAwBpvB,QAAMR,KAAK4vB,sBAAwBnvB,IAC9DA,EAAEqZ,aAA0B,QAAXrZ,EAAE6L,KAAgB,CAC/B8N,SAAUsC,IACVrC,SAAUqC,IACVkF,SAAS,GAEX,CACEyD,eAAgB,GAChBoK,UAAW,KACX1V,eAAgB,GAChB6H,SAAS,GAENnhB,IAETT,KAAK0uB,YAAY6L,cAAgBv6B,KAAK6H,SACxC,CAEAszB,qBACEn7B,KAAKo7B,qBAAuB56B,QAAMR,KAAKo7B,qBAAuB36B,IAC5DA,EAAEqZ,aAA0B,QAAXrZ,EAAE6L,KAAgB,CAC/B8N,SAAUsC,IACVrC,SAAUqC,IACVkF,SAAS,GAEX,CACEyD,eAAgB,GAChBoK,UAAW,KACX1V,eAAgB,GAChB6H,SAAS,GAENnhB,IAETT,KAAK0uB,YAAY8L,cAAgBx6B,KAAK6H,SACxC,CAEAopB,qBAAqBxP,GAIDjhB,SAAOR,KAAKgF,MAAMC,MAAMjF,KAAKkP,MAAM,GAAI,CAACrH,WAAW,KAEnE7H,KAAK0tB,WAAY,EACjB1tB,KAAKyU,KAAKzU,KAAK+sB,eAGR,+BADCtL,EAEJzhB,KAAKq7B,oBAGLr7B,KAAKs7B,mBAGb,CAEAA,oBACE,MAAMz0B,EAAa,OAEbsH,EAASnO,KAAKmO,OAEpB,IAAIwL,EAASD,EAAmB1Z,KAAK4vB,sBAAuB/oB,GACxD00B,EAAU7hB,EAAmB1Z,KAAKo7B,qBAAsBv0B,GAM5D7G,KAAKqT,cAAcxD,wBAJC,CAClB,CAAC5I,MAAO,gBAAiBC,QAASyS,GAClC,CAAC1S,MAAO,6BAA8BC,QAASq0B,IAEOv7B,KAAKkP,OAG7D,MAAMzG,EAAS0F,EAAO1F,OAChB4G,EAAY5G,EAAOzI,KAAKkP,OAG9BG,EAAUrI,YAAY,GAAGE,QAAUyS,EAEnClR,EAAOzI,KAAKkP,OAASG,EACrBlB,EAAO1F,OAASA,EAEhB,MAAM9B,EAAe3G,KAAKkP,MAAQ,EAClCf,EAAO3F,gBAAkB,CAAC7B,EAAcA,GACxC3G,KAAKqT,cAAc3E,UAAUP,GAE7B,IAAIrG,GAAkBtH,YAAUmZ,GAChC3Z,KAAKqT,cAAc5C,sBAAsB3I,EAAgB9H,KAAKkP,OAC9DlP,KAAKguB,gBAAgB7f,GAAQ,GAC7BnO,KAAK0uB,YAAY6L,eAAgB,EAEjCv6B,KAAK0tB,WAAY,CACnB,CAEA2N,oBACE,MAAMx0B,EAAa,OAEbsH,EAASnO,KAAKmO,OAEpB,IAAIwL,EAASD,EAAmB1Z,KAAKynB,cAAe5gB,GAChD00B,EAAU7hB,EAAmB1Z,KAAKo7B,qBAAsBv0B,GAM5D7G,KAAKqT,cAAcxD,wBAJC,CAClB,CAAC5I,MAAO,gBAAiBC,QAASyS,GAClC,CAAC1S,MAAO,6BAA8BC,QAASq0B,IAEOv7B,KAAKkP,OAE7D,MAAMzG,EAAS0F,EAAO1F,OAChB4G,EAAY5G,EAAOzI,KAAKkP,OAC9BpO,QAAQC,IAAIf,KAAKw7B,4BACjB16B,QAAQC,IAAIsO,GAEZA,EAAUrI,YAAY,GAAGE,QAAUq0B,EAEnC9yB,EAAOzI,KAAKkP,OAASG,EACrBlB,EAAO1F,OAASA,EAEhB,MAAM9B,EAAe3G,KAAKkP,MAAQ,EAClCf,EAAO3F,gBAAkB,CAAC7B,EAAcA,GACxC3G,KAAKqT,cAAc3E,UAAUP,GAE7B,IAAIrG,GAAkBtH,YAAUmZ,GAChC3Z,KAAKqT,cAAc5C,sBAAsB3I,EAAgB9H,KAAKkP,OAC9DlP,KAAKguB,gBAAgB7f,GAAQ,GAC7BnO,KAAK0uB,YAAY8L,eAAgB,EAEjCx6B,KAAK0tB,WAAY,CACnB,CAEAtZ,cAAcC,GACZvT,QAAQC,IAAIsT,GACZ,MAAMC,EAAOD,EAAO,GACdE,EAAWD,EAAKE,KAAO,KAC7B1T,QAAQC,IAAIuT,EAAKhI,MACbiI,EAAW,KACbvU,KAAKkS,aAAaR,IAAI,mCAAoC,gBAC1D1R,KAAKyU,KAAKzU,KAAK0U,aAGf1U,KAAK2U,wBAAwBN,EAEjC,CAEAM,wBAAwB/B,GACtB9R,QAAQC,IAAI6R,GACZ5S,KAAKymB,SAAW7T,EAAM,GAAGrO,KACzB,MAAMqQ,EAAS,IAAIC,WACbC,EAAS9U,KAAKy6B,SACpB,UAAW1lB,KAAQnC,EAEjBgC,EAAOI,WAAWD,GAClBH,EAAOK,OAAS,KACd,MAAMzP,EAAMoP,EAAOZ,QAAQkB,YAAc,GACzCpU,QAAQC,IAAIyE,GACZ,MAAMI,EAAI8C,EAAQlD,GAClB1E,QAAQC,IAAI6E,GACRA,EAEQoD,EAAYxD,EAAKxF,KAAKiJ,eAE9B6L,EAAOK,WAAW,CAACjH,kBAAmB1I,KAEtCxF,KAAKkS,aAAaR,IAAI,iDAAiD1R,KAAKiJ,cAAcmM,eAAe,sBAAuB,gBAChIpV,KAAKyU,KAAKzU,KAAK0U,cAIjB1U,KAAKkS,aAAaR,IAAI,2EAA4E,gBAClG1R,KAAKyU,KAAKzU,KAAK0U,YAAU,EAI7BE,EAAOS,QAAU,KACfvU,QAAQC,IAAI6T,EAAOU,MAAK,EAE1BP,EAAKQ,SAAW,EAChBvV,KAAK4S,MAAM/R,KAAKkU,EAEpB,CAEA6W,eAAepmB,GAEb,MAAMiuB,EAAY1qB,GAAMvD,GAAK,GACvBkuB,EAAYluB,EAAI+R,MAAM,MAAM,GAClCzW,QAAQC,IAAI2yB,GAGZ,IAAIC,EAAyB,EACzBxX,EAAY,IACbuX,EAAUhzB,SAAS,KACpByb,EAAY,IACHuX,EAAUhzB,SAAS,MAC5Byb,EAAY,KACHuX,EAAUhzB,SAAS,OAC5Byb,EAAY,KAEdwX,EAAyBD,EAAUnc,MAAM4E,GAAWrW,OACpDhF,QAAQC,IAAI4yB,GACZ7yB,QAAQC,IAAIob,GAEZ,MAAMyX,EAAYpuB,EAAIP,MAAM,EAAGjF,KAAKiJ,eAEjCzD,EAAIM,OAAS9F,KAAKiJ,gBAEI,MAAdwqB,GAAqBzzB,KAAK6pB,sBAAsBzO,cAAc5V,IACvExF,KAAKmb,UAAYnb,KAAK6pB,sBAAsB1O,UAC5Cnb,KAAK6zB,gBAAkBD,EAAU9tB,QACT,MAAd2tB,GAAmC,MAAdA,IAAsB7qB,GAAapD,GAG9B,IAA3BmuB,GAAgC3zB,KAAK6pB,sBAAsB3N,wBAAwB1W,EAAK2W,IAIxF3W,EAAIM,OAAS,IAAMN,EAAI9E,SAAS,MAAQV,KAAK6pB,sBAAsBvN,0BAA0B9W,IAFtGxF,KAAKmb,UAAYnb,KAAK6pB,sBAAsB1O,UAC5Cnb,KAAK6zB,gBAAkBD,EAAU9tB,QAKhB,KAARN,GAITxF,KAAKmb,UAAY,UACjBnb,KAAK6zB,gBAAkB,IAEvB7zB,KAAKmb,UAAY,QACjBnb,KAAK6zB,gBAAkB,IAlBvB7zB,KAAKmb,UAAY,OACjBnb,KAAK6zB,gBAAkBD,EAAU9tB,QAmBrC,CAGA21B,mBAAmBr7B,GACjBU,QAAQC,IAAIX,EAAMslB,OAAOtlB,OAGzB,MAAM6M,EAAa7M,EAAMslB,OAAOtlB,MAGhCJ,KAAK46B,gBAAiB,EACtB56B,KAAKD,KAAKG,IAAW,GAAG8J,aAAkBhK,KAAK26B,gCAAgC1tB,KAC5EtD,OAAOxJ,UACRuK,IAGE5J,QAAQC,IAAI2J,GAEZ1K,KAAK86B,SAAWpwB,EAAKqwB,SACrB/6B,KAAKy6B,SAAStlB,WAAW,CAACjI,WAAYlN,KAAK86B,SAAS,GAAG5tB,aAEvDlN,KAAKg7B,YAActwB,EAAKswB,YAOxBh7B,KAAK46B,gBAAiB,GAI5B,CAEAc,0BAA0Bt7B,GACxBU,QAAQC,IAAIX,GACZ,MAAM4M,EAAS5M,EAEJ,SAARA,GAGDJ,KAAKy6B,SAAS1c,SAAS9Q,WAAckI,WAAW,UAIvC,eAAR/U,GAGDJ,KAAKy6B,SAAS1c,SAAS9Q,WAAckI,WAAW,QAIlDnV,KAAK66B,mBAAoB,EACzB76B,KAAK46B,gBAAiB,EACtB56B,KAAKD,KAAKG,IAAW,GAAG8J,aAAkBgD,iBACvCrD,OAAOxJ,UACRuK,IAGE5J,QAAQC,IAAI2J,GAEZ1K,KAAK86B,SAAWpwB,EAAKqwB,SAErB/6B,KAAKg7B,YAActwB,EAAKswB,YACxBh7B,KAAKy6B,SAAStlB,WAAW,CAACjI,WAAYlN,KAAK86B,SAAS,GAAG5tB,aAMvDlN,KAAK66B,mBAAoB,EACzB76B,KAAK46B,gBAAiB,GAI5B,CAEA3N,QAME/M,EAAEmD,GAAGC,UAAUC,IAAItS,OAAS,GAE5B,MAAMtK,EAAe3G,KAAKkP,MAAQ,EAE5B1G,EAAoC,CAAC7B,EAAcA,GAEzD3G,KAAK4sB,uBAEL,IAAI1Y,EAAYlU,KAAKy6B,SAASr6B,MAAM8N,kBAGpC,MAAMyf,EAAkB3tB,KAAKqO,iBAAiBtB,gBAAgB/M,KAAKy6B,WAG3DzzB,eAAgBhH,KAAKyI,OAAOzI,KAAKkP,OAYnCf,EAAS,CACb5F,YAAe,GACfqlB,eAAkB5tB,KAAK6tB,UAAU9P,SAASxZ,KAAQnE,MAClD0tB,MAAS9tB,KAAK6tB,UAAU9P,SAAS+P,MAAS1tB,MAC1CoI,gBAAmBA,EACnBC,OAAU,CAfK,CACf3B,mBAAsB,OACtBH,aAAgBA,EAChBC,WAAc,aACdC,WAAc,OACdkjB,oBAAuB7V,EACvBnN,iBAAoB4mB,EACpB3mB,YAAeA,KAcXwmB,EAAWrsB,OAAOgP,OAAOhI,GAAc,CAC3ClI,SAAS,EACT4H,WAAW,EACXC,gBAAiBtH,YAAUwG,GAAaE,WAE1ClH,KAAKqT,cAAc3E,UAAUP,GAC7BnO,KAAKqT,cAAcjD,WAAWod,EAAUxtB,KAAKkP,OAG7CpO,QAAQC,IAAIoN,GACZnO,KAAKguB,gBAAgB7f,EACvB,CAEA+e,SAEE,MAAM/e,EAASnO,KAAKmO,OACdxH,EAAe3G,KAAKkP,MAAQ,EAC5B+e,EAAqBjuB,KAAKkP,MAG1B1G,EAAoC,CAAC7B,EAAcA,GAEzD3G,KAAK4sB,uBAGL,MAAMe,EAAkB3tB,KAAKqO,iBAAiBtB,gBAAgB/M,KAAKy6B,UAC7DvM,EAAeluB,KAAKyI,OAAOzI,KAAKkP,QAG9BlI,eAAgBhH,KAAKyI,OAAOzI,KAAKkP,OAEnCF,EAAe,IAChBkf,EACHhjB,gBAAYnD,EACZpB,aAAcA,EACdsnB,mBAAoBA,EACpBlnB,iBAAkB4mB,EAClB3mB,eAIFmH,EAAO1F,OAAOzI,KAAKkP,OAASF,EAC5Bb,EAAO3F,gBAAkBA,EACzB2F,EAAOyf,eAAiB5tB,KAAK6tB,UAAU9P,SAASxZ,KAAQnE,MACxD+N,EAAO2f,MAAQ9tB,KAAK6tB,UAAU9P,SAAS+P,MAAS1tB,MAEhDU,QAAQC,IAAIoN,GAGZ,MAAMwtB,EAAcx6B,OAAOgP,OAAOhI,GAAc,CAC9ClI,SAAS,EACT4H,WAAW,EACXC,gBAAiBtH,YAAUwG,GAAaE,WAE1CpG,QAAQC,IAAI,mBACZD,QAAQC,IAAI46B,GACZ37B,KAAKqT,cAAc3E,UAAUP,GAC7BnO,KAAKqT,cAAcjD,WAAWurB,EAAa37B,KAAKkP,OAChDlP,KAAKqT,cAAcvD,6BAA6B6d,EAAiB3tB,KAAKkP,OAEtElP,KAAKguB,gBAAgB7f,EACvB,CAEAwhB,eAAejQ,GAEb,MAA0B,QAAnBA,EAAOpT,MAAwC,UAAnBoT,EAAOpT,KAAsB,IAC3DoT,EAAO5F,aACVM,SAAUsC,IACVrC,SAAUqC,IACVkF,SAAS,GACP,CAEFyD,eAAgB3F,EAAO5F,aAAgB8W,cACvCnB,UAAW,KACX1V,eAAgB,GAChB6H,SAAS,EAEb,CAEAoM,gBAAgB7f,EAAwBlD,GAAsB,GAO5DjL,KAAK6wB,gBACL7wB,KAAKC,QAAUgL,EACfjL,KAAK6H,WAAaoD,EAClBjL,KAAK8wB,kBAAoB7lB,EACrBA,IACFjL,KAAK6qB,cAAgB,GACrB7qB,KAAK8qB,gBAAkB,IAEzB9qB,KAAKqO,iBAAiB/D,aAAa6D,GAAQhO,UACxCuK,IAEC,GAAIA,EAAKtD,QAAasD,EAAKtD,OAAUtB,OAAQ,CAC3ChF,QAAQC,IAAI2J,GACZ5J,QAAQwU,MAAM5K,EAAKtD,QACnBpH,KAAK6qB,cAAgBngB,EAAKtD,OACtBsD,EAAKrD,UAAavB,SACpBhF,QAAQC,IAAI2J,EAAKrD,UACjBrH,KAAK8qB,gBAAkBpgB,EAAKrD,UAE9BrH,KAAKC,SAAU,EACfD,KAAK6H,WAAY,EACjB,MAAMinB,EAAgB3tB,OAAOgP,OAAOhI,GAAc,CAChDN,WAAW,EACX5H,SAAS,IAIX,OAFAD,KAAKqT,cAAcjD,WAAW0e,EAAe9uB,KAAKkP,YAClDlP,KAAK+uB,cACL,CAuBF,GApBIrkB,EAAKrD,SAAYvB,SACnBhF,QAAQC,IAAI2J,EAAKrD,UACjBrH,KAAK8qB,gBAAkBpgB,EAAKrD,UAG9BvG,QAAQC,IAAI2J,EAAKnC,aAGjBvI,KAAKqT,cAAc3C,yBADE,CAACsa,uBAAwBtgB,EAAKsgB,wBACOhrB,KAAKkP,OAE/DlP,KAAKqT,cAAc1E,cAAcjE,EAAKnC,aACtCvI,KAAKqT,cAAcxE,sBAAsBnE,EAAKnC,aAC9CvI,KAAKqT,cAAczE,kBAAkBlE,EAAKuD,kBAK1CjO,KAAKmT,SAAS8mB,aAAa,YAAYvvB,EAAKnC,eAGxC0C,EAAY,CACd,MAAMC,EAAa,GAAGR,EAAKsmB,cAC3BlwB,QAAQC,IAAImK,GACZlL,KAAKisB,sBAAsB/gB,EAAU,MAIrClL,KAAK6H,WAAY,EACjB7H,KAAKC,SAAU,EACfD,KAAK8wB,kBAAmB,EACxB9wB,KAAK+uB,cAAY,EAGrBzZ,IACExU,QAAQwU,MAAMA,GACdtV,KAAK6qB,cAAchqB,KAAKyU,EAAMA,OAC9BtV,KAAK6H,WAAY,EACjB7H,KAAKC,SAAU,EACf,MACM6uB,EAAgB3tB,OAAOgP,OADZnQ,KAAKgF,MAAMhF,KAAKkP,OACa,CAC5CrH,UAAW7H,KAAK6H,UAChB5H,QAASD,KAAKC,UAEhBD,KAAKqT,cAAcjD,WAAW0e,EAAe9uB,KAAKkP,OAClDgc,cAAclrB,KAAKmrB,gBACnBnrB,KAAK+uB,cAAY,EAEvB,CAEA9C,sBAAsB/gB,GACpBlL,KAAKgtB,mBAAoB,EAGzBhtB,KAAKynB,cAAgB,CAAC,IAEtBznB,KAAK0uB,YAAcluB,cAAYR,KAAK0uB,YAAa,KAAM,GACvD,IAAIC,EAAY,EAEhB3uB,KAAKmrB,eAAiByD,YAAY,KAChC5uB,KAAKqO,iBAAiBpD,WAAWC,GAAY/K,UAAUuK,IACrD,GAAuB,UAAnBA,EAAKmkB,QAAyBnkB,EAAKtD,OAAW,CAChDpH,KAAK6qB,cAAgBngB,EAAKpK,KAAQ8G,OAClCpH,KAAK8qB,gBAAkBpgB,EAAKpK,KAAQ+G,SACpCrH,KAAK6H,WAAY,EACjB7H,KAAKC,SAAU,EACf,MAAMywB,EAAW1wB,KAAKgF,MAAMhF,KAAKkP,OACjCpO,QAAQC,IAAI2vB,GACZ,MAAM5B,EAAgB3tB,OAAOgP,OAAOugB,EAAU,CAC5C7oB,UAAW7H,KAAK6H,UAChB5H,QAASD,KAAKC,UAEhBD,KAAKqT,cAAcjD,WAAW0e,EAAe9uB,KAAKkP,OAClDgc,cAAclrB,KAAKmrB,gBACnBnrB,KAAK+uB,cAAY,CAUnB,GARIrkB,EAAKpK,KAAQ+G,UAAavB,SAE5B9F,KAAK8qB,gBAAkBpgB,EAAKpK,KAAQ+G,UAElCqD,EAAKpK,KAAQ8G,QAAWtB,SAE1B9F,KAAK6qB,cAAgBngB,EAAKpK,KAAQ8G,QAEb,SAAnBsD,EAAKmkB,OAAsB,CAE7B,MAAMvuB,EAAOoK,EAAKpK,KAAQ2uB,QAC1BnuB,QAAQC,IAAIT,GAEZN,KAAKkvB,OAAS5uB,EAAK,GAAGgM,KAItB9L,YAAUF,EAAM2G,IACd,GAAmB,kBAAfA,EAAMqF,OACRtM,KAAK4vB,sBAAwBpvB,QAAMyG,EAAMkoB,cAAe,CAACzP,EAAQ7F,KAC3D6F,EAAO0P,eAAiBC,OAAOC,SAAS5P,EAAO6P,qBAEjDvvB,KAAK47B,2BAA2Blc,EAAO6P,mBAAqB,CAAC1V,EAA4B,cAAzB6F,EAAO0P,cAAgC,MAAQ,SAEjH1P,EAAOjM,MAAW,GAAGiM,EAAOkH,eAC5BlH,EAAOpf,KAAU,GAAGof,EAAOnb,OAC3B,IAAI4V,EAASuF,EAAOvF,OAEpBuF,EAAOzF,UAAe,GAAGE,KAAUuF,EAAOnb,OAE1C,IAAIirB,EAAarV,EAAO5C,MAAM,KAE9B4C,SAASqV,EAAWA,EAAW1pB,OAAS,GAExC4Z,EAAOpf,KAAU,GAAG6Z,KAAUuF,EAAOnb,OAcrCmb,EAAO5F,aAAkB4F,EAAO5F,cAAoB9Z,KAAK2vB,eAAejQ,GACjEA,IAET1f,KAAK67B,2BAA6B,IAAI77B,KAAK47B,4BACvC57B,KAAK4vB,uBAAuB,CAC9B5vB,KAAKynB,cAAgBxgB,EAAMuY,WAC3B,MAAMkR,EAAW1wB,KAAKgF,MAAMhF,KAAKkP,OACjCpO,QAAQC,IAAI2vB,GACZ,MAAMmI,EAAuB13B,OAAOgP,OAAOugB,EAAU,CACnD7oB,WAAW,EACX5H,SAAS,IAGXD,KAAKqT,cAAcjD,WAAWyoB,EAAsB74B,KAAKkP,OAEzDgc,cAAclrB,KAAKmrB,gBACnBnrB,KAAK+uB,eAEL/uB,KAAK6H,WAAY,EACjB7H,KAAKC,SAAU,EAGA,+BAAfgH,EAAMqF,OACRtM,KAAKo7B,qBAAuB56B,QAAMyG,EAAMkoB,cAAe,CAACzP,EAAQ7F,KAC1D6F,EAAO0P,eAAiBC,OAAOC,SAAS5P,EAAO6P,qBAEjDvvB,KAAK87B,0BAA0Bpc,EAAO6P,mBAAqB,CAAC1V,EAA4B,cAAzB6F,EAAO0P,cAAgC,MAAQ,SAEhH1P,EAAOjM,MAAW,GAAGiM,EAAOkH,eAC5BlH,EAAOpf,KAAU,GAAGof,EAAOnb,OAC3B,IAAI4V,EAASuF,EAAOvF,OAEpBuF,EAAOzF,UAAe,GAAGE,KAAUuF,EAAOnb,OAE1C,IAAIirB,EAAarV,EAAO5C,MAAM,KAE9B4C,SAASqV,EAAWA,EAAW1pB,OAAS,GAExC4Z,EAAOpf,KAAU,GAAG6Z,KAAUuF,EAAOnb,OAcrCmb,EAAO5F,aAAkB4F,EAAO5F,cAAoB9Z,KAAK2vB,eAAejQ,GACjEA,IAET1f,KAAK+7B,0BAA4B,IAAI/7B,KAAK87B,2BACtC97B,KAAKo7B,uBACPp7B,KAAKw7B,2BAA6Bv0B,EAAMuY,aAiBzB,yBAAfvY,EAAMqF,OACRtM,KAAK8vB,uBAAyBtvB,QAAMyG,EAAMkoB,cAAe,CAACzP,EAAQ7F,KAIhE6F,EAAOjM,MAAW,GAAGiM,EAAOkH,eAC5BlH,EAAOpf,KAAU,GAAGof,EAAOnb,OAC3B,IAAI4V,EAASuF,EAAOvF,OAEpBuF,EAAOzF,UAAe,GAAGE,KAAUuF,EAAOnb,OAG1C,IAAIirB,EAAarV,EAAO5C,MAAM,KAE9B4C,SAASqV,EAAWA,EAAW1pB,OAAS,GAExC4Z,EAAOpf,KAAU,GAAG6Z,KAAUuF,EAAOnb,OAarCmb,EAAO5F,aAAkB4F,EAAO5F,aAAkB9Z,KAAK2vB,eAAejQ,QAAU3X,EACzE2X,IAET1f,KAAK+vB,qBAAuB,GACxB/vB,KAAK8vB,yBAEP9vB,KAAKuuB,eAAiBtnB,EAAMuY,cAGjC,CAEH,GAAuB,aAAnB9U,EAAKmkB,OAA0B,CAEjC7uB,KAAK6H,WAAY,EACjB7H,KAAKC,SAAU,EACf,MAAMywB,EAAW1wB,KAAKgF,MAAMhF,KAAKkP,OACjCpO,QAAQC,IAAI2vB,GACZ,MAAMC,EAA+BxvB,OAAOgP,OAAOugB,EAAU,CAC3D7oB,UAAW7H,KAAK6H,UAChB5H,QAASD,KAAKC,UAEhBD,KAAKqT,cAAcjD,WAAWugB,EAA8B3wB,KAAKkP,OACjEgc,cAAclrB,KAAKmrB,gBAEnBnrB,KAAK+uB,cAAY,MAKjB/uB,KAAKgtB,mBAAoB,EAEzBlsB,QAAQC,IAAI,mBAAmB2J,EAAKmkB,YAAeF,KACnDA,GAAa,GAEdrZ,IACDxU,QAAQwU,MAAMA,GACdtV,KAAK+uB,eACL7D,cAAclrB,KAAKmrB,gBACnBnrB,KAAK6H,WAAY,EACjB7H,KAAKC,SAAU,GAChB,EAjNkB,IAmNvB,CAEAstB,eACE,IACIC,EADAC,EAAWjtB,UAAQR,KAAKkP,MAAQ,EAAGlP,KAAKyI,OAAO3C,QAEnDhF,QAAQC,IAAI0sB,GACZjtB,YAAUitB,EAAU5T,IAClB2T,EAAWxtB,KAAKgF,MAAM6U,GACtB,MAAMuM,EAAkB,IACnBoH,EACHvtB,SAAS,EACT4H,WAAW,GAEb7H,KAAKqT,cAAcjD,WAAWgW,EAAiBvM,EAAC,GAIlD7Z,KAAK0tB,UAAY1tB,KAAKixB,qBAAqB,iBAAmBjxB,KAAKitB,OACrE,EAlrCWmN,SAAa,oCAAbA,GAAap5B,mGAAbo5B,EAAa,sBAAbA,EAAa16B,25bD5C1BC,kBAA6BA,mCAAY6G,aAAW,GAClD7G,iBAAiC,UACJA,SAAaA,QACxCA,gBACFA,QACAA,iBAAyB,UAErBA,kDACAA,iBACFA,QACAA,iBAA6E,cAA7EA,CAA6E,UAIvEA,2BAEEA,oBACsH,aADtHA,CACsH,cAIxHA,QACAA,mBACFA,UAEFA,8BAA2C,WAGvCA,2BAEEA,oBAC8uC,cAGhvCA,QACAA,kBACFA,UAEFA,8BAGEA,2BAEEA,oBACid,cAGndA,QACAA,uBACFA,QACAA,8BAEEA,2BAEEA,oBACuR,cAGzRA,QACAA,mBACFA,YAIJA,qCA+FAA,2BAAqB,YACaA,kCAAqBA,QACrDA,mBAAmB,gBACsDA,gCAAS6G,uBAAqB,GAEnG7G,2BAEEA,oBAC+I,cAGjJA,cAKNA,2BAAgC,YAAhCA,CAAgC,eAEMA,+BAAkBA,UAEtDA,mBAAsB,YAAtBA,CAAsB,YAAtBA,CAAsB,eAI6BA,iCAAU6G,4BAA0B,OAAO,GADxF7G,QAEAA,qBACEA,mBACFA,UAEFA,mBAA0C,eAEWA,iCAAU6G,4BAA0B,aAAa,GADpG7G,QAEAA,qBACEA,yBACFA,YAGJA,4BAGFA,UAGFA,mBAAmD,YAAnDA,CAAmD,eAEtBA,wBAAWA,UAEtCA,mBACEA,0BAKAA,6CAUFA,UAGFA,mBAAgD,YAAhDA,CAAgD,eAEnBA,oBAAOA,UAElCA,mBACEA,0BAKAA,6CASFA,UAGFA,eACAA,mBAAqD,YAArDA,CAAqD,gBAIzCA,gCAAS,IAAI,GACnBA,2BAEEA,oBAA+F,cAGjGA,UAEFA,mBACAA,2BAGAA,6CAoCFA,YAMJA,2BAEEA,2BA+BAA,2BA0BFA,QAEAA,0BAQAA,0BAUAA,2BAiEAA,8CA6CAA,6FA/eMA,8BAEyBA,0BAwBJA,2CAcbA,qCAwBGA,oCAoIHA,yDAWFA,2CAAyB,cAuBzBA,wCAAsB,cAqBwCA,qCAU7DA,iCAAe,cA+CKA,8CA+BCA,gDA4B5BA,mGAQAA,iCAWAA,sqDCtVOy6B,CAAa,iECvCdz6B,oBAA8CA,SAAQA,kCAArBA,iBAAaA,qDAM9CA,oBAA+DA,SAAaA,kCAA/BA,iBAAkBA,2BCDpE,IAAMq8B,GAAe,MAAtB,MAAOA,EAwBP17B,SAAKF,GAEPJ,KAAKq1B,MAAMtrB,KAAK3J,EAClB,CAEIE,WAEF,OAAON,KAAKq1B,MAAMhsB,UACpB,CAWA7J,cAtCQQ,WAAQ,IAAIuJ,KAAqB,IAWzCvJ,mBAAqB,GACrBA,oBAAiB,GACjBA,oBAAiB,GACjBA,mBAA0B,GAC1BA,YAAmB,GAiBXA,YAAS,CAACi8B,IAAK,GAAIC,MAAO,GAAIC,OAAQ,GAAIC,KAAM,IAChDp8B,WAAQ,IAAMA,KAAKq8B,OAAOD,KAAOp8B,KAAKq8B,OAAOH,MAC7Cl8B,YAAS,IAAMA,KAAKq8B,OAAOJ,IAAMj8B,KAAKq8B,OAAOF,MAItC,CAEf18B,WAGEqB,QAAQC,IAAIf,KAAKs8B,UAGjBt8B,KAAKu8B,OAAS/7B,UAAQR,KAAKs8B,UACxBr2B,IAAKs2B,GAAWA,EAAOC,aACvBj8B,OACAH,QAGHJ,KAAKy8B,eAAiBz8B,KAAKu8B,OAAO,GAElCv8B,KAAK08B,cAAgB18B,KAAK08B,cAAgBl8B,UAAQR,KAAKs8B,UACpDr2B,IAAKs2B,GAAUA,EAAOjxB,QACtB/K,OACAH,QAGHJ,KAAKkW,eAAiBlW,KAAK08B,cAAc,EAC3C,CAEA7a,kBAEE7hB,KAAK28B,YACL38B,KAAK48B,UACP,CAEQD,YACN38B,KAAKs1B,YAAct1B,KAAKu1B,SAASlB,cAUjCr0B,KAAKi2B,IAAMR,KAAUz1B,KAAKs1B,aACvB7b,OAAO,OACPyc,KAAK,QAASl2B,KAAKm2B,OAASn2B,KAAKq8B,OAAOD,KAAOp8B,KAAKq8B,OAAOH,QAC3DhG,KAAK,SAAUl2B,KAAKo2B,QAAUp2B,KAAKq8B,OAAOJ,IAAMj8B,KAAKq8B,OAAOF,SAC5DjG,KAAK,QAAS,eAEjBl2B,KAAKs0B,MAAQt0B,KAAKi2B,IAAIxc,OAAO,KAC1Byc,KAAK,QAAS,SACdA,KAAK,YAAa,aAAel2B,KAAKq8B,OAAOD,KAAO,IAAMp8B,KAAKq8B,OAAOJ,IAAM,IAGjF,CAEQW,SACN1mB,EAAyBlW,KAAKkW,eAC9BumB,EAAyBz8B,KAAKy8B,gBAa9B,IAAII,EAAWr8B,SAAOR,KAAKs8B,SAAU,CAACE,YAAaC,EAAgBnxB,OAAQ4K,IAE3E,GAAI2mB,EAAU,CAmOZ,IAASC,GAAT,SAAqBrK,EAAYvsB,GAG/B,IAAI62B,EAAOtK,EAAMvxB,UAAU87B,SAASvF,GAChCwF,EAAOxK,EAAMvxB,UAAUg8B,SAASvF,GAEhCwF,GAAkB1K,EAAM2K,MAG5BC,EAAMhH,KAAKZ,MAAcsH,IACzBO,EAAMjH,KAAKZ,MAAYwH,IAGvBM,GACG1G,UAAU,UACVX,KAAK,KAAOhwB,GAAW62B,EAAK72B,EAAEs3B,WAC9BtH,KAAK,KAAOhwB,GAAW+2B,EAAK/2B,EAAEu3B,WAGjCzhB,EACGka,KAAK,KAAOhwB,GAAY62B,EAAK72B,EAAEw3B,KAC/BxH,KAAK,KAAOhwB,GAAY+2B,EAAK/2B,EAAEy3B,KAC/BzH,KAAK,KAAOhwB,GAAY62B,EAAK72B,EAAE03B,KAC/B1H,KAAK,KAAOhwB,GAAY+2B,EAAK/2B,EAAE23B,KAC/B3H,KAAK,eAAiBhwB,GAAWA,EAAE43B,YAAcX,IAEpDY,EACG7H,KAAK,KAAOhwB,GAAY62B,EAAK72B,EAAEw3B,KAC/BxH,KAAK,KAAOhwB,GAAY+2B,EAAK/2B,EAAEy3B,KAC/BzH,KAAK,KAAOhwB,GAAY62B,EAAK72B,EAAE03B,KAC/B1H,KAAK,KAAOhwB,GAAY+2B,EAAK/2B,EAAE23B,KAC/B3H,KAAK,eAAiBhwB,GAAWA,EAAE43B,YAAcX,IAEpDa,EACG9H,KAAK,KAAOhwB,GAAY62B,EAAK72B,EAAEw3B,KAC/BxH,KAAK,KAAOhwB,GAAY+2B,EAAK/2B,EAAEy3B,KAC/BzH,KAAK,KAAOhwB,GAAY62B,EAAK72B,EAAE03B,KAC/B1H,KAAK,KAAOhwB,GAAY+2B,EAAK/2B,EAAE23B,KAC/B3H,KAAK,eAAiBhwB,GAAWA,EAAE43B,YAAcX,GACtD,EAxQAn9B,KAAKi+B,cAAgB,GACrBz9B,YACEA,QAAMq8B,EAAUqB,SAAarB,EAAUsB,SAAUtB,EAAUuB,SAAUvB,EAAUwB,UAC/E79B,WAAS,CAAC89B,EAAOC,EAAOC,EAAOC,KAC7Bz+B,KAAKi+B,cAAcp9B,KAAK,CACtB28B,SAAUc,EAAOb,SAAUc,EAC3BG,UAAWF,EAAOG,UAAWF,GAC9B,IAaL,IAAIG,EAAUnJ,KAAUz1B,KAAKs1B,aACxB7b,OAAO,OACPsd,MAAM,UAAW,GACjBb,KAAK,QAAS,WACda,MAAM,mBAAoB,SAC1BA,MAAM,SAAU,SAChBA,MAAM,eAAgB,OACtBA,MAAM,gBAAiB,OACvBA,MAAM,UAAW,OAGlB8H,EAAapJ,KAAUz1B,KAAKs1B,aAC7B7b,OAAO,OACPsd,MAAM,WAAY,YAClBA,MAAM,UAAW,GACjBb,KAAK,QAAS,WACda,MAAM,mBAAoB,SAC1BA,MAAM,SAAU,SAChBA,MAAM,eAAgB,OACtBA,MAAM,gBAAiB,OACvBA,MAAM,UAAW,OAGpB/2B,KAAKs0B,MAAM7a,OAAO,QACfyc,KAAK,IAAMl2B,KAAKm2B,MAAQ,GACxBD,KAAK,IAAK,EAAKl2B,KAAKq8B,OAAOJ,IAAM,GACjC/F,KAAK,cAAe,UACpBa,MAAM,YAAa,QACnBA,MAAM,kBAAmB,aACzBva,KAAKqgB,EAASppB,OAGjB,MAAMgkB,EAAIhC,QACPqJ,OAAOjC,EAASkC,SAChB3S,MAAM,CAAC,EAAGpsB,KAAKm2B,QAEZkH,EAAQr9B,KAAKs0B,MAAM7a,OAAO,KAC7Byc,KAAK,YAAa,eAAiBl2B,KAAKo2B,OAAS,KACjDC,KAAKZ,MAAcgC,IAGtBz3B,KAAKs0B,MAAM7a,OAAO,QACfyc,KAAK,cAAe,UACpBA,KAAK,IAAMl2B,KAAKm2B,MAAQ,GACxBD,KAAK,IAAK,KACV1Z,KAAKqgB,EAASmC,SAGjB,MAAMrH,EAAIlC,QACPqJ,OAAOjC,EAASoC,SAChB7S,MAAM,CAACpsB,KAAKo2B,OAAQ,IAEjBkH,EAAQt9B,KAAKs0B,MAAM7a,OAAO,KAC7B4c,KAAKZ,MAAYkC,IAGpB33B,KAAKs0B,MAAM7a,OAAO,QACfyc,KAAK,cAAe,OACpBA,KAAK,YAAa,eAClBA,KAAK,IAAyB,GAAnBl2B,KAAKq8B,OAAOD,MAEvBlG,KAAK,KAAK,KACV1Z,KAAKqgB,EAASqC,SAcjB,IAAIC,EAAW,CACXzB,GAAIb,EAASkC,QAAQ,GACrBpB,GAAId,EAASoC,QAAQ,GACrBrB,GAAIf,EAASkC,QAAQ,GACrBlB,GAAIhB,EAASoC,QAAQ,GACrBnB,YAAa,GAEjB,MAAM9hB,EAAOhc,KAAKs0B,MAAM7a,OAAO,KAC5Byc,KAAK,YAAa,cAClBA,KAAK,QAAS,cACdW,UAAU,QAAQv2B,KAAK,CAAC6+B,IACxBrI,QAAQrd,OAAO,QACfyc,KAAK,KAAOhwB,GAAYuxB,EAAEvxB,EAAEw3B,KAC5BxH,KAAK,KAAOhwB,GAAYyxB,EAAEzxB,EAAEy3B,KAC5BzH,KAAK,KAAOhwB,GAAYuxB,EAAEvxB,EAAE03B,KAC5B1H,KAAK,KAAOhwB,GAAYyxB,EAAEzxB,EAAE23B,KAC5B9G,MAAM,SAAU,QAChBA,MAAM,mBAAoB,OAC1BA,MAAM,eAAiB7wB,GAAWA,EAAE43B,aAEvC,IAAIsB,EAAY,CAAC1B,IAAI,MAAQC,GAAI,EAAGC,GAAI,MAAOC,GAAI,EAAGC,YAAa,GACnE,MAAME,EAAQh+B,KAAKs0B,MAAM7a,OAAO,KAC7Byc,KAAK,YAAa,cAClBA,KAAK,QAAS,cACdW,UAAU,QAAQv2B,KAAK,CAAC8+B,IACxBtI,QAAQrd,OAAO,QACfyc,KAAK,KAAOhwB,GAAYuxB,EAAEvxB,EAAEw3B,KAC5BxH,KAAK,KAAOhwB,GAAYyxB,EAAEzxB,EAAEy3B,KAC5BzH,KAAK,KAAOhwB,GAAYuxB,EAAEvxB,EAAE03B,KAC5B1H,KAAK,KAAOhwB,GAAYyxB,EAAEzxB,EAAE23B,KAC5B9G,MAAM,SAAU,QAEhBA,MAAM,eAAiB7wB,GAAWA,EAAE43B,aAEvC,IAAIuB,EAAY,CAAC3B,GAAI,EAAGC,IAAI,MAAQC,GAAI,EAAGC,GAAI,MAAOC,YAAa,GACnE,MAAMC,EAAQ/9B,KAAKs0B,MAAM7a,OAAO,KAC7Byc,KAAK,YAAa,cAClBA,KAAK,QAAS,cACdW,UAAU,QAAQv2B,KAAK,CAAC++B,IACxBvI,QAAQrd,OAAO,QACfyc,KAAK,KAAOhwB,GAAYuxB,EAAEvxB,EAAEw3B,KAC5BxH,KAAK,KAAOhwB,GAAYyxB,EAAEzxB,EAAEy3B,KAC5BzH,KAAK,KAAOhwB,GAAYuxB,EAAEvxB,EAAE03B,KAC5B1H,KAAK,KAAOhwB,GAAYyxB,EAAEzxB,EAAE23B,KAC5B9G,MAAM,SAAU,QAEhBA,MAAM,eAAiB7wB,GAAWA,EAAE43B,aAIjCwB,GAAY,CAAC7M,EAAYvsB,EAAQq5B,KACrCX,EACG1H,aACAH,MAAM,UAAW,GAEpB8H,EACG3H,aACAH,MAAM,UAAW,EAAC,EAUjByI,GAAY,SAAU/M,EAAYvsB,EAAQq5B,GAC9CX,EACG/I,KAAK,iBAAiB3vB,EAAEs3B,aAAat3B,EAAEu3B,aACvC1G,MAAM,OAAStE,EAAMgF,EAAK,EAAI,MAC9BV,MAAM,MAAQtE,EAAMkF,EAAK,EAAI,MAC7BZ,MAAM,aAAc,QAIvB8H,EAAWhJ,KAAK,mDAAmD3vB,EAAEw4B,yGACIx4B,EAAEy4B,oBAChE5H,MAAM,OAAStE,EAAMgN,MAAQ,IAAO,MACpC1I,MAAM,MAAQtE,EAAMiN,MAAQ,IAAO,KAGhD,EAGMC,GAAa,SAAUlN,EAAYvsB,EAAQq5B,GAC/CX,EACG1H,aACAH,MAAM,UAAW,GAEpB8H,EACG3H,aACAH,MAAM,UAAW,EACtB,EAcMwG,IAXOv9B,KAAKi2B,IAAIxc,OAAO,QAAQA,OAAO,gBACzCyc,KAAK,KAAM,QACXzc,OAAO,YACPyc,KAAK,QAASl2B,KAAKm2B,OACnBD,KAAK,SAAUl2B,KAAKo2B,QACpBF,KAAK,IAAK,GACVA,KAAK,IAAK,GAKAl2B,KAAKs0B,MAAM7a,OAAO,KAC5Byc,KAAK,YAAa,eAIrBqH,GAAK1G,UAAU,OACZv2B,KAAKN,KAAKi+B,eACVnH,QACArd,OAAO,UACPyc,KAAK,IAAK,KACVA,KAAK,KAAOhwB,GAAWuxB,EAAEvxB,EAAEs3B,WAC3BtH,KAAK,KAAOhwB,GAAWyxB,EAAEzxB,EAAEu3B,WAC3B1G,MAAM,UAAW,IACjBA,MAAM,OAAQ,WACdb,KAAK,SAAU,WACfA,KAAK,eAAgB,KACrBF,GAAG,YAAasJ,IAChBtJ,GAAG,YAAawJ,IAChBxJ,GAAG,aAAc2J,IA8CpB,MAAM7J,GAAOL,QACVM,YAAY,CAAC,EAAG,MAChB6J,OAAO,CAAC,CAAC,EAAG,GAAI,CAAC5/B,KAAKm2B,MAAOn2B,KAAKo2B,UAClCJ,GAAG,OAAQ8G,IAGd98B,KAAKs0B,MAAM7a,OAAO,QACfyc,KAAK,QAASl2B,KAAKm2B,OACnBD,KAAK,SAAUl2B,KAAKo2B,QACpByJ,QACA9I,MAAM,OAAQ,QACdA,MAAM,iBAAkB,OACxBb,KAAK,YAAa,kBAErBl2B,KAAKs0B,MAAM+B,KAAKP,GAAI,MAGpB91B,KAAKi2B,IAAIxc,OAAO,QACbyc,KAAK,IAAMl2B,KAAKm2B,MAAQ,GACxBD,KAAK,IAAMl2B,KAAKo2B,OAAS,GACzB5Z,KAAK,oBAEZ,CAUAsjB,mBAAmBx5B,GACjBA,EAAEiM,iBACFvS,KAAKkW,eAAiB5P,EAAEof,OAAOtlB,MAE/Bq1B,MAAa,mBAAmBsK,SAChCtK,MAAa,YAAYsK,SAEzB//B,KAAK28B,YAEL38B,KAAK48B,SAAS58B,KAAKkW,eAAgBlW,KAAKy8B,eAC1C,CAEAuD,mBAAmB15B,GACjBA,EAAEiM,iBACFvS,KAAKy8B,eAAiBn2B,EAAEof,OAAOtlB,MAI/Bq1B,MAAa,mBAAmBsK,SAChCtK,MAAa,YAAYsK,SAEzB//B,KAAK28B,YAEL38B,KAAK48B,SAAS58B,KAAKkW,eAAgBlW,KAAKy8B,eAC1C,EAxbWT,SAAe,oCAAfA,EAAe,EAAfA,EAAe,sBAAfA,EAAet8B,8cDV5BC,iBAAwF,UAAxFA,CAAwF,UAGhFA,oBACEA,oBAAQA,kCAAU6G,uBAA0B,EAApC7G,CAAqC,wDAC3CA,2BACFA,UAENA,gBACIA,oBACEA,oBAAQA,kCAAU6G,uBAA0B,EAApC7G,CAAqC,wDAC3CA,2BACFA,YAGRA,kBACEA,uBACFA,iBAbsDA,2CACtBA,mCAKsBA,2CACjBA,0RCD1Bq8B,CAAe,+GCgGlBr8B,eACEA,kCAAqBA,cAAKA,mCAC5BA,mCA6BFA,oBACEA,2BACFA,+BADEA,6HAGAA,oBACEA,2BACFA,+BADEA,wFAGJA,oBACEA,iDACFA,0DArFNA,iBACEA,kBAAqB,WACSA,yBAAaA,QAEzCA,kBAAmB,eAEsDA,gCAAS,IAAI,GAIlFA,0BAEEA,mBAC+I,aAGjJA,UAEFA,0BAAgE,YAAhEA,CAAgE,YAErDA,0BAAaA,QACpBA,mBACAA,mBAAuB,gBAGLA,yDAASA,yBAAgB,GACvCA,mBACFA,QACAA,sBAEgBA,yDAASA,6BAAoB,GAC5CA,sBACDA,cAINA,mBACAA,wBAIOA,2DAAUA,8BAA0B,GAJ3CA,QAMAA,6CAMAA,sBAAuEA,2DAASA,gBAAgB,GAG9FA,2BAEEA,oBAC+I,cAGjJA,UAEFA,mBACFA,UAEFA,2BAA2CA,gEAAeA,yBAAqB,GAE7EA,wBASAA,mBACEA,4BAGAA,6CAKAA,4BAGFA,UAEJA,wDAjFcA,wCAiBAA,mGAKAA,kGAoB0FA,qCAAoB,gBAiB9GA,gFAIAA,mCAA2B,qBAA3BA,CAA2B,uUAK3BA,mEAAiD,cAQjDA,gFAgCRA,0DAyDEA,qEAAeA,qCAA6B,kCAehDA,kBAA+E,WAA/EA,CAA+E,aAErCA,sBAAUA,sDAiBhDA,oBACEA,SACAA,qBAAsBA,iEAASA,4BAAmB,GAChDA,oBAAUA,kBAAMA,WAAW,uCAF7BA,gCACoDA,6DAM1DA,oBACEA,iDACFA,0DA8BEA,iDAI2BA,4FAA4BA,kCAAyB,GAAEA,kEAJXA,qBAAsB,eAAtBA,CAAsB,qBAAtBA,CAAsB,0FAK7FA,yDAGmCA,4FAA4BA,kCAAyB,GAAEA,kEAHJA,qBAAsB,eAAtBA,CAAsB,iDAd9GA,mBAAoJ,aAGhJA,2BAEEA,oBAEFA,UAEFA,gDAKAA,wDAeFA,oDA7BwHA,mCAS1FA,0EAKQA,yGAkB1CA,oBACEA,iDACFA,0DA6CIA,wBAAsC,gBACgBA,yDAASA,mBAAU,GAAGA,wBAAWA,SAAS,mDAG9FA,0BAA8D,WAA9DA,CAA8D,gBAQxDA,2BACEA,oBACFA,UAEFA,8BAQAA,mBAA2B,WACAA,0DAASA,mBAAU,GAAEA,yBAAaA,aAAI,0BAlBzDA,4IAYAA,qIAWVA,8BAMEA,2BACEA,oBACFA,iCAPMA,sKA3BVA,0BAyBAA,8EAzBMA,0BAAiB,sCAkDvBA,2BAEEA,oBAEFA,gCAGAA,2BAEEA,oBAEFA,mCAQIA,cAAwDA,SAAWA,kCAAXA,6CAD1DA,cACEA,wBACFA,+BAD0BA,qEAxBlCA,uBAAwG,WAAxGA,CAAwG,eAAxGA,CAAwG,cAGpEA,SAAiCA,QAE/DA,0BAOAA,0BAMFA,UAEFA,mBAA0B,aAEtBA,+BAKFA,6CA3BiFA,sBAGjDA,sDAExBA,mCAOAA,4DAuBNA,2BAEEA,oBAEFA,gCACAA,2BAEEA,oBAEFA,mCAOIA,cAA0DA,SAAWA,kCAAXA,6CAD5DA,cACEA,wBACFA,+BAD0BA,uEApBlCA,uBAA4G,WAA5GA,CAA4G,eAA5GA,CAA4G,cAGvEA,SAAqCA,QACpEA,0BAKAA,0BAKFA,UAEFA,mBAA0B,aAEtBA,+BAKFA,6CAvBqFA,sBAGpDA,0DACzBA,mCAKAA,+DAmBdA,mBAEgD,eAE5CA,iDACFA,gCAHGA,uFAUHA,qBACEA,uDAA0CA,iBAA6BA,0DAASA,8BAAqB,GAAEA,gBAAIA,QAAKA,+BAElHA,gCACAA,qBACEA,iDACFA,mCAVFA,mBAA8G,YAA9GA,CAA8G,aAEpEA,sBAAUA,UAElDA,4BAIAA,4BAGFA,8BAXmEA,6CAIzDA,4CAIAA,qFAaFA,gCAQkBA,sEAAqBA,0BAAiB,EAAtCA,CAAuC,kEAChBA,4BAAmB,EAD1CA,CAAuC,iEAEjBA,+BAAsB,GAAEA,iCAV9CA,oCAA4B,8BAA5BA,CAA4B,kCAA5BA,CAA4B,6BAA5BA,CAA4B,gBAA5BA,CAA4B,wCAA5BA,CAA4B,+DAJlDA,kBAAmE,WACnDA,yBAAaA,QAC3BA,kCAcFA,cAhBoCA,6EAqBhCA,gCAKkBA,wEAAuBA,4BAAmB,GAAEA,iCAL5CA,qCAA6B,+BAA7BA,CAA6B,mCAA7BA,CAA6B,sDAHnDA,kBAAqE,WACpDA,4BAAeA,QAC9BA,kCAQFA,cAVqCA,8DAejCA,iDAAaA,8EArCrBA,mBACyF,gBAC9DA,uFAEvBA,yBAkBAA,yBAYAA,kBAAmC,WACnBA,yBAAaA,QAC3BA,kCAGFA,UAGFA,mBACFA,2CAzC2BA,oCAAqB,eAArBA,CAAqB,oBAEvCA,iDAkBAA,kDAYDA,6CAQDA,yDAsCCA,kBAAiE,WAAjEA,CAAiE,aAEvBA,sBAAUA,sDAUpDA,kBAAwHA,SACtHA,sBAAkDA,4FAASA,+BAAuC,GAElGA,SAAS,wCAH6GA,+BAE9GA,gEANdA,mBAA0F,YAItFA,yBAKFA,iCALoBA,yEAwBhBA,yBAEEA,wFACFA,kDAxERA,mBAA0B,YAEtBA,SACFA,QACAA,sBACQA,yDAASA,6BAAoB,GACrCA,UAGFA,mBAAwB,YAAxBA,CAAwB,WAAxBA,CAAwB,cAIhBA,2BACFA,UAEFA,mBAAsC,oBAQ7BA,2EAAcA,2CAA4D,EAA1EA,CAA2E,+DACnEA,qCAAkD,EAD1DA,CAA2E,6DAE1C,GAAIA,oBAA8B,GAAE,GAR5EA,UAcFA,oBACEA,0BAKFA,UAGFA,2BAWAA,oBAAqE,kBAArEA,CAAqE,iBAEjBA,qEAASA,6BAAoC,GAElEA,6BAC3BA,QACAA,uBAGEA,4BAEEA,qBAAiF,eAGnFA,UAEFA,8CAMAA,4BAAuB,iBACgCA,qEAASA,8BAAqC,GACjGA,uCACFA,QACAA,uBAAqEA,yDAASA,+BAAsB,GAClGA,qBACFA,eAAS,iDA9EbA,0EAUSA,+CAOAA,wCAAuB,kCAAvBA,CAAuB,mBAAvBA,CAAuB,cAAvBA,CAAuB,qBAAvBA,CAAuB,oEAAvBA,CAAuB,iCAcxBA,mCAQJA,+CAkBMA,yEAiCdA,mBAA0B,YACuBA,+BAAmBA,QAClEA,sBAA2DA,8DAASsgC,iBAAe,eAAcj/B,mBAAY,EAAK,GAClHrB,UAEFA,mBACEA,+BACFA,QACAA,8CAiBMA,cAAoDA,SAAcA,kCAAdA,0DAHxDA,eAAoD,MAApDA,CAAoD,YACvCA,+FAAmFA,UAC9FA,cACEA,wBACFA,QACAA,aAAG,YAAQA,gEAAoDA,mCAFxCA,8EAQrBA,cAAoDA,SAAcA,kCAAdA,0DAHtDA,aAAG,YAAQA,wIACeA,UAC1BA,cACEA,wBACFA,QACAA,aAAG,YAAQA,gEAAoDA,iCAFxCA,6FAjB3BA,mBAA0B,YACiBA,yBAAaA,QACtDA,sBAA2DA,8DAASugC,iBAAqB,eAAcl/B,mBAAY,EAAK,GACxHrB,UAEFA,mBACEA,yBAOAA,6CASAA,mBACEA,qBACAA,uBACEA,4BAEEA,qBACgK,eAGlKA,cAINA,4BAA0B,iBACgCA,2DAASA,gBAAqB,gBAAe,GAAEA,gBACvGA,QACAA,uBAA6CA,8DAASugC,eAAmB,YAAavgC,uBAAc,GAAGA,wDAEvGA,SAAS,oCAlCHA,oCAAkB,cAiB0CA,sCAC9BA,0KC1nBlCqK,GAAU,GAAGpK,2BAOZ,IAAMugC,GAAiC,MAAxC,MAAOA,EAgRX3gC,YACS0S,EACCnS,EACA+c,EACA4M,EACArb,EACAgF,EACAsW,EACAzW,EACA2E,EACA+R,EACAzW,EACA0W,EACAzW,GAZDpT,oBACCA,YACAA,UACAA,4BACAA,wBACAA,qBACAA,qBACAA,aACAA,cACAA,oBACAA,gBACAA,6BACAA,oBA5RVA,yBAAsB,wOAiBbA,qBAA0B,EAGzBA,oBAAiB,IAAIoS,MAE/BpS,YAAS,mBAECA,eAAY,IAAIoS,MAChBpS,kBAAe,IAAIoS,MAQpBpS,eAA2BmR,QAC5BnR,wBAAoC,IAAIqqB,IAEvCrqB,oBAAgCmR,QACjCnR,wBAAoC,IAAIqqB,IAEhDrqB,kBAAe,IAAIue,KAMnBve,WAAe,CACb,CAACogC,UAAa,MAAOC,MAAS,SAAUC,SAAY,QACpD,CAACF,UAAa,QAASC,MAAS,SAAUC,SAAY,QACtD,CAACF,UAAa,UAAWC,MAAS,QAASC,SAAY,QACvD,CAACF,UAAa,WAAYC,MAAS,QAASC,SAAY,QACxD,CAACF,UAAa,QAASC,MAAS,QAASC,SAAY,SAWvDtgC,qBAAuB,GAiHvBA,sBAAwB,GACxBA,wBAA+B,GAC/BA,6BAAoC,GAEpCA,yBAAsB,GACtBA,yBAAsB,GACtBA,yBAAsB,GACtBA,qBAAkB,GAElBA,0BAA8B,GAE9BA,oBAAwC,CAAC,IAEzCA,yBAA6B,GAE7BA,mBAAuC,CAAC,IAExCA,kCAAsC,GAEtCA,4BAAgD,CAAC,IAEjDA,yBAA6B,GAE7BA,mBAAuC,CAAC,IAExCA,aAA+BA,KAAKqT,cAAc7E,QAClDxO,YAA6BA,KAAKqT,cAAc5E,OAChDzO,iBAAkCA,KAAKqT,cAAcmL,YACrDxe,aAAsCA,KAAKqT,cAAcyW,QAEzD9pB,YAAkB,GAClBA,WAAgB,GAChBA,gBAAa,GAObA,4BAAyB,CACvBkqB,uBAAwB,GACxBC,wBAAyB,GACzBC,mBAAoB,IAGtBpqB,gBAAa,GAAGJ,oBAEhBI,uBAA2D,GAC3DA,aAAkB,EAClBA,qBAA0B,EAC1BA,eAAoB,UAIpBA,gBAAY,EACZA,cAAU,EACVA,wBAAoB,EACpBA,sBAAkB,EAClBA,uBAAmB,EACnBA,gBAAY,EAEZA,kBAAsB,GAEtBA,mBAA0B,GAC1BA,qBAA4B,GAG5BA,gBAAY,EACZA,mBAAe,EAEfA,kBAAyB,GACzBA,gBAAY,EAGZA,mBAAgB,IAChBA,WAAe,GACfA,cAAW,GAEXA,iBAAsB,GAItBA,iBAAc,CAEZ+pB,qBAAqB,EACrBre,SAAS,EACTG,YAAY,EACZ7E,aAAa,GAGfhH,uBAAoH,GACpHA,qCAAkI,GAClIA,uBAAoH,GAEpHA,kBAAuB,EACvBA,oBAAwB,GAgtCxBA,YAAU0T,GACRA,EAAM/J,QACJgK,MAAa,MAAI,EACjB/J,SAAoB,EACpBa,KAAI,IAAMzK,KAAK4T,WAAY,IAAI,EAC/BC,MAAU3C,GAEClR,KAAK0pB,qBAAqBzY,OAAOC,GAAMvH,QAC5Cc,KAAI,IAAMzK,KAAK8T,cAAe,IAAK,EACnCC,MAAW,KACT/T,KAAK8T,cAAe,KACb3C,MAAG,SAEf,EAEH1G,KAAI,IAAMzK,KAAK4T,WAAY,IAG/B5T,qBAAmBgU,GAIVA,EAAOC,SAASnO,OAAS,EAAI,GAAGkO,EAAOzI,YAAYyI,EAAOC,YAAcD,EAAOzI,KArtCxF,CAIA9L,YACE,EAAI6qB,SACFxpB,QAAQC,IAAI,gBAEZD,QAAQC,IAAI,eAGdf,KAAKuqB,cAELvqB,KAAKugC,YAAcvgC,KAAK2pB,cAAc3M,QAAQ9c,IAAIF,KAAKwqB,eAGvDxqB,KAAKwe,YAAY7U,QAAKqX,KAAUhhB,KAAKihB,eAAe9gB,UAAUC,IAC5DU,QAAQC,IAAI,cAAcX,KAC1BJ,KAAK4K,WAAaxK,EAClBJ,KAAK2qB,YAAc,GAAGxS,OAAOhF,SAASyX,mBAAmBxqB,MAE3DJ,KAAKwO,QAAQ7E,QAAKqX,KAAUhhB,KAAKihB,eAAe9gB,UAAUC,IACxDU,QAAQC,IAAIX,GACZJ,KAAKyI,OAASrI,EACdJ,KAAK6qB,cAAgB7qB,KAAKyI,OAAOzI,KAAKkP,QAAQ/H,eAAgBC,OAC9DpH,KAAK8qB,gBAAkB9qB,KAAKyI,OAAOzI,KAAKkP,QAAQ/H,eAAgBE,WAElErH,KAAKyO,OAAO9E,QAAKqX,KAAUhhB,KAAKihB,eAAe9gB,UAAUC,IACvDU,QAAQC,IAAI,UACZD,QAAQC,IAAIX,GACZJ,KAAKgF,MAAQ5E,EACbJ,KAAK6H,UAAY7H,KAAKgF,MAAMhF,KAAKkP,QAAQrH,UAEzC,MAAMkjB,EAAsB/qB,KAAKgF,MAAMhF,KAAKkP,QAAQyB,gBAAgBqa,uBAEpEhrB,KAAKirB,uBAAuBf,uBAAyB,GAAGtqB,uCAAoDmrB,IAC5G/qB,KAAKirB,uBAAuBd,wBAA0B,GAAGvqB,wCAAqDmrB,IAC9G/qB,KAAKirB,uBAAuBb,mBAAqB,GAAGxqB,uCAAoDmrB,IAGpG/qB,KAAKgF,MAAMhF,KAAKkP,QAAQjP,UAC1BD,KAAKC,SAAU,EACfirB,cAAclrB,KAAKmrB,iBAIrBnrB,KAAKorB,gBAAkB5qB,SAAOR,KAAKgF,MAAO,CAAC/E,SAAS,IAMpDa,QAAQC,IAAI,mBACZD,QAAQC,IAAIf,KAAKorB,gBAAe,GAIlCprB,KAAK8pB,QAAQngB,QAAKqX,KAAUhhB,KAAKihB,eAAe9gB,UAAUC,IACxDU,QAAQC,IAAI,UACZD,QAAQC,IAAIX,GACZJ,KAAKmO,OAAS/N,IAGhBJ,KAAKqrB,mBAAqBrrB,KAAKsrB,OAAOnrB,UAAU,IAAMH,KAAKurB,aAC3DvrB,KAAKwrB,mBAAqBxrB,KAAKyrB,YAAYtrB,UAAU,IAAMH,KAAK0rB,YAEhE1rB,KAAK2rB,YAEF3rB,KAAKugC,YAAYrgC,IAAI,sBAAsBE,OAC5CJ,KAAK4rB,eAAe5rB,KAAKugC,YAAYrgC,IAAI,sBAAsBE,MAGnE,CAEA4hB,cACEkJ,cAAclrB,KAAKmrB,gBACnBD,cAAclrB,KAAKqO,iBAAiB8c,gBACpCnrB,KAAKihB,aAAalX,OAClB/J,KAAKihB,aAAaiB,WAElBliB,KAAKqrB,mBAAmBpJ,cACxBjiB,KAAKwrB,mBAAmBvJ,aAC1B,CAEAJ,kBACEgK,WAAW,KACGC,QAAQ3iB,OAAO4iB,KAEpB/rB,KAAKurB,WAAS,EACpB,EACL,CAEA7C,YAAYC,GACPA,EAAQqD,WAAWpD,eACpB9nB,QAAQC,IAAI4nB,EAAQqD,UAAUpD,cAC9B9nB,QAAQC,IAAI,sBACZf,KAAKC,SAAU,EACfD,KAAKisB,sBAAsBtD,EAAQqD,UAAUpD,cAEjD,CAEIjT,2BACF,OAAO3V,KAAK0L,QAAQtL,MAAM6F,IAAM2P,GAA0BA,EAAErK,OAAQC,KAAK,KAC3E,CAEIqK,gCACF,OAAO7V,KAAK8V,aAAa7P,IAAM2P,GAA0BA,EAAErK,OAAQC,KAAK,KAC1E,CAEIM,uBACF,OAAO9L,KAAKugC,YAAYrgC,IAAI,mBAC9B,CAEIwL,cACF,OAAO1L,KAAKugC,YAAYrgC,IAAI,UAC9B,CAEIwqB,oBACF,OAAO1qB,KAAKugC,YAAYrgC,IAAI,kBAAkBE,KAChD,CAEI8N,wBACF,OAAOlO,KAAKugC,YAAYrgC,IAAI,sBAAsBE,KACpD,CAEIwL,oBACF,OAAO5L,KAAKugC,YAAYrgC,IAAI,kBAAkBE,KAChD,CAEIgzB,2BACF,OAAQpzB,KAAKC,SAAWD,KAAK6H,UAAY,OAAS,QACpD,CAEA+kB,uBAEE,IAAI7R,EAAc,GACdoS,EAAc,GAC0C,CAC1D,MAAOpD,sBAAqBre,WAAY80B,GACxCzlB,EAAMgP,EACNoD,EAAMzhB,GAOQ1L,KAAKugC,YAAYngC,MAAM8N,mBACT,IAAblO,KAAKkP,QACpBlP,KAAKqT,cAAczC,qBAAqBmK,GACxC/a,KAAKugC,YAAYxiB,SAAS7P,kBAAkBmf,SAAStS,IAIvD,MAAMuS,EAAc,CAAChiB,EAAgBkM,EAAU,GAAIC,EAAQ,OAElDzX,KAAK8c,GAAGjY,MAAM,CACnB0G,MAAO,CAACD,GACRkM,QAAS,CAACA,GACVC,MAAO,CAACA,KAGa,IAAtBzX,KAAK0L,QAAQ5F,QACdtF,YAAU2sB,EAAI5V,MAAM,KAAOjM,IACzBtL,KAAK0L,QAAQ7K,KAAKysB,EAAYhiB,GAAO,EAI3C,CAEA2hB,QAME/M,EAAEmD,GAAGC,UAAUC,IAAItS,OAAS,GAE5B,MAAMtK,EAAe3G,KAAKkP,MAAQ,EAE5B1G,EAAoC,CAAC7B,EAAcA,GAEzD3G,KAAK4sB,uBAEL,IAAI1Y,EAAYlU,KAAKugC,YAAYngC,MAAM8N,kBAGvC,MAAMyf,EAAkB3tB,KAAKqO,iBAAiBlB,mBAAmBnN,KAAKugC,cAG9Dv5B,eAAgBhH,KAAKyI,OAAOzI,KAAKkP,OAYnCf,EAAS,CACb5F,YAAe,GACfqlB,eAAkB5tB,KAAK6tB,UAAU9P,SAASxZ,KAAQnE,MAClD0tB,MAAS9tB,KAAK6tB,UAAU9P,SAAS+P,MAAS1tB,MAC1CoI,gBAAmBA,EACnBC,OAAU,CAfK,CACf3B,mBAAsB,6BACtBH,aAAgBA,EAChBC,WAAc,aACdC,WAAc,6BACdkjB,oBAAuB7V,EACvBnN,iBAAoB4mB,EACpB3mB,YAAeA,KAcXmnB,EAAkBhtB,OAAOgP,OAAO/H,GAAkC,CACtEnI,SAAS,EACT4H,WAAW,EACXC,gBAAiBtH,YAAUwG,GAAaE,WAE1ClH,KAAKqT,cAAc3E,UAAUP,GAC7BnO,KAAKqT,cAAcjD,WAAW+d,EAAiBnuB,KAAKkP,OACpDlP,KAAKqT,cAAcvD,6BAA6B6d,EAAiB3tB,KAAKkP,OAItElP,KAAKguB,gBAAgB7f,EACvB,CAEA+e,SACE,MAAM/e,EAASnO,KAAKmO,OACdxH,EAAe3G,KAAKkP,MAAQ,EAC5B+e,EAAqBjuB,KAAKkP,MAG1B1G,EAAoC,CAAC7B,EAAcA,GAEzD3G,KAAK4sB,uBAGL,MAAMe,EAAkB3tB,KAAKqO,iBAAiBlB,mBAAmBnN,KAAKugC,aAChErS,EAAeluB,KAAKyI,OAAOzI,KAAKkP,QAG9BlI,eAAgBhH,KAAKyI,OAAOzI,KAAKkP,OAEnCF,EAAe,IAChBkf,EACHhjB,gBAAYnD,EACZpB,aAAcA,EACdsnB,mBAAoBA,EACpBlnB,iBAAkB4mB,EAClB3mB,eAIFmH,EAAO1F,OAAOzI,KAAKkP,OAASF,EAC5Bb,EAAO3F,gBAAkBA,EACzB2F,EAAOyf,eAAiB5tB,KAAK6tB,UAAU9P,SAASxZ,KAAQnE,MACxD+N,EAAO2f,MAAQ9tB,KAAK6tB,UAAU9P,SAAS+P,MAAS1tB,MAKhD,MAAMu7B,EAAcx6B,OAAOgP,OAAO/H,GAAkC,CAClEnI,SAAS,EACT4H,WAAW,EACXC,gBAAiBtH,YAAUwG,GAAaE,WAG1ClH,KAAKqT,cAAc3E,UAAUP,GAC7BnO,KAAKqT,cAAcjD,WAAWurB,EAAa37B,KAAKkP,OAChDlP,KAAKqT,cAAcvD,6BAA6B6d,EAAiB3tB,KAAKkP,OAEtElP,KAAKguB,gBAAgB7f,EACvB,CAEA8d,sBAAsB/gB,GAEpBlL,KAAKgtB,mBAAoB,EAEzBhtB,KAAKouB,oBAAsB,GAC3BpuB,KAAKquB,sBAAwB,KAC7BruB,KAAKsuB,cAAgB,CAAC,IAEtBtuB,KAAKuuB,eAAiB,CAAC,IACvBvuB,KAAKwuB,uBAAyB,CAAC,IAC/BxuB,KAAKsuB,cAAgB,CAAC,IACtBtuB,KAAKynB,cAAgB,CAAC,IAGtBznB,KAAKgsB,UAAY9gB,EACjBpK,QAAQC,IAAImK,GACZlL,KAAK0uB,YAAcluB,cAAYR,KAAK0uB,YAAa,KAAM,GACvD,IAAIC,EAAY,EAEhB3uB,KAAKmrB,eAAiByD,YAAY,KAChC5uB,KAAKqO,iBAAiBpD,WAAW,GAAGC,qBAA8B/K,UAChE,CACE4J,KAAMW,IAEJ,GADA5J,QAAQC,IAAI2J,GACW,UAAnBA,EAAKmkB,QAAyBnkB,EAAKtD,OAAW,CAGhDpH,KAAK6H,WAAY,EACjB7H,KAAKC,SAAU,EACf,MACM6uB,EAAgB3tB,OAAOgP,OADZnQ,KAAKgF,MAAMhF,KAAKkP,OACa,CAC5CrH,UAAW7H,KAAK6H,UAChB5H,QAASD,KAAKC,UAEhBD,KAAKqT,cAAcjD,WAAW0e,EAAe9uB,KAAKkP,OAClDgc,cAAclrB,KAAKmrB,gBACnBnrB,KAAK+uB,cAAY,CAoRnB,GAlRIrkB,EAAKpK,KAAQ+G,UAAavB,SAE5B9F,KAAK8qB,gBAAkBpgB,EAAKpK,KAAQ+G,UAElCqD,EAAKpK,KAAQ8G,QAAWtB,SAE1B9F,KAAK6qB,cAAgBngB,EAAKpK,KAAQ8G,QAGb,SAAnBsD,EAAKmkB,SACP3D,cAAclrB,KAAKmrB,gBAEnBnrB,KAAKqO,iBAAiBpD,WAAWC,GAAY/K,UAAUuK,IAErD5J,QAAQC,IAAI2J,GACZ1K,KAAKgvB,aAAe,CAAC,IAErB,MAAM1uB,EAAOoK,EAAKpK,KAAQ2uB,QAC1BjvB,KAAKkvB,OAAS5uB,EAAK,GAAGgM,KACtB9L,YAAUF,EAAM2G,IA6Ed,GA5EmB,kBAAfA,EAAMqF,OACRtM,KAAKquB,sBAAwB7tB,QAAMyG,EAAMkoB,cAAe,CAACzP,EAAQ7F,KAC3D6F,EAAO0P,eAAiBC,OAAOC,SAAS5P,EAAO6P,qBACjDvvB,KAAKouB,oBAAoB1O,EAAO6P,mBAAqB,CAAC1V,EAA4B,cAAzB6F,EAAO0P,cAAgC,MAAQ,SAE1G1P,EAAOjM,MAAW,GAAGiM,EAAOkH,eAC5BlH,EAAOpf,KAAU,GAAGof,EAAOnb,OAC3B,IAAI4V,EAASuF,EAAOvF,OAEpBuF,EAAOzF,UAAe,GAAGE,KAAUuF,EAAOnb,OAG1C,IAAIirB,EAAarV,EAAO5C,MAAM,KAE9B4C,SAASqV,EAAWA,EAAW1pB,OAAS,GAExC4Z,EAAOpf,KAAU,GAAG6Z,KAAUuF,EAAOnb,OAGrCmb,EAAO5F,aAAqC,QAAnB4F,EAAOpT,KAAoB,CAClD8N,SAAUsC,IACVrC,SAAUqC,IACVkF,SAAS,GACP,CACFyD,eAAgB,GAChBoK,UAAW,KACX1V,eAAgB,GAChB6H,SAAS,GAEJlC,IAGL1f,KAAKquB,wBACPruB,KAAKsuB,cAAgBrnB,EAAMuY,aAMZ,8BAAfvY,EAAMqF,OACRtM,KAAK0vB,+BAAiClvB,QAAMyG,EAAMkoB,cAAe,CAACzP,EAAQ7F,KACpE6F,EAAO0P,eAAiBC,OAAOC,SAAS5P,EAAO6P,qBACjDvvB,KAAKwuB,uBAAuB9O,EAAO6P,mBAAqB,CAAC1V,EAA4B,cAAzB6F,EAAO0P,cAAgC,MAAQ,SAE7G1P,EAAOjM,MAAW,GAAGiM,EAAOkH,eAC5BlH,EAAOpf,KAAU,GAAGof,EAAOnb,OAC3B,IAAI4V,EAASuF,EAAOvF,OAEpBuF,EAAOzF,UAAe,GAAGE,KAAUuF,EAAOnb,OAG1C,IAAIirB,EAAarV,EAAO5C,MAAM,KAE9B4C,SAASqV,EAAWA,EAAW1pB,OAAS,GAExC4Z,EAAOpf,KAAU,GAAG6Z,KAAUuF,EAAOnb,OAarCmb,EAAO5F,aAAkB4F,EAAO5F,aAAkB9Z,KAAK2vB,eAAejQ,QAAU3X,EACzE2X,IAGL1f,KAAK0vB,iCACP1vB,KAAKwuB,uBAAyBvnB,EAAMuY,aAGrB,kBAAfvY,EAAMqF,KAA0B,CAElC,IAAIm0B,EAAiB,EACjBC,EAAiB,EACrB1gC,KAAK4vB,sBAAwBpvB,QAAMyG,EAAMkoB,cAAe,CAACzP,EAAQ7F,KAC3D6F,EAAO0P,eAAiBC,OAAOC,SAAS5P,EAAO6P,qBACjDvvB,KAAKgvB,aAAatP,EAAO6P,mBAAqB,CAAC1V,EAA4B,cAAzB6F,EAAO0P,cAAgC,MAAQ,SAEnG1P,EAAOjM,MAAW,GAAGiM,EAAOkH,eAC5BlH,EAAOpf,KAAU,GAAGof,EAAOnb,OAC3B,IAAI4V,EAASuF,EAAOvF,OAEpBuF,EAAOzF,UAAe,GAAGE,KAAUuF,EAAOnb,OAG1C,IAAIirB,EAAarV,EAAO5C,MAAM,KAE9B4C,SAASqV,EAAWA,EAAW1pB,OAAS,GAExC4Z,EAAOpf,KAAU,GAAG6Z,KAAUuF,EAAOnb,OAIrCmb,EAAO5F,aAAkB4F,EAAO5F,cAAoB9Z,KAAK2vB,eAAejQ,GAaxE+gB,EAAoC,+CAA3B/gB,EAAOkH,aAAmEyI,OAAOxV,GAAK4mB,EAC/FC,EAAoC,+CAA3BhhB,EAAOkH,aAAmEyI,OAAOxV,GAAK6mB,EAexFhhB,IAET1f,KAAK6vB,oBAAsB,IAAI7vB,KAAKgvB,cAChChvB,KAAK4vB,wBACP5vB,KAAKynB,cAAgBxgB,EAAMuY,YAqE/B,GA3CmB,yBAAfvY,EAAMqF,OACRtM,KAAK8vB,uBAAyBtvB,QAAMyG,EAAMkoB,cAAe,CAACzP,EAAQ7F,KAIhE6F,EAAOjM,MAAW,GAAGiM,EAAOkH,eAC5BlH,EAAOpf,KAAU,GAAGof,EAAOnb,OAC3B,IAAI4V,EAASuF,EAAOvF,OAEpBuF,EAAOzF,UAAe,GAAGE,KAAUuF,EAAOnb,OAG1C,IAAIirB,EAAarV,EAAO5C,MAAM,KAE9B4C,SAASqV,EAAWA,EAAW1pB,OAAS,GAExC4Z,EAAOpf,KAAU,GAAG6Z,KAAUuF,EAAOnb,OAcrCmb,EAAO5F,aAAkB4F,EAAO5F,aAAkB9Z,KAAK2vB,eAAejQ,QAAU3X,EAEzE2X,IAKT1f,KAAK+vB,qBAAuB,GACxB/vB,KAAK8vB,yBAEP9vB,KAAKuuB,eAAiBtnB,EAAMuY,aAGb,qBAAfvY,EAAMqF,KAA6B,CACrC,MAAM0jB,EAAgB,IAAIjX,IAAI9R,EAAM+oB,eAEpChwB,KAAKiwB,oBAAsBD,EAAcE,aAAahwB,IAAI,oBAAsB,GAChFF,KAAKmwB,oBAAsBH,EAAcE,aAAahwB,IAAI,WAAa,GACvEF,KAAKowB,oBAAsBJ,EAAcE,aAAahwB,IAAI,WAAa,GAEvEF,KAAKqwB,gBAAkBppB,EAAMqpB,oBAiBjCtwB,KAAKqO,iBAAiBpD,WAAW,GAAGC,eAAwB/K,UAAUuK,IACpE5J,QAAQC,IAAI2J,GACZ1K,KAAK2gC,gBAAkBj2B,EAAKk2B,UAC5B9/B,QAAQC,IAAI,QACZD,QAAQC,IAAIf,KAAK2gC,iBAEjB3gC,KAAK6H,WAAY,EAAM7H,KAAKC,SAAU,EACtC,MAAMywB,EAAW1wB,KAAKgF,MAAMhF,KAAKkP,OACjCpO,QAAQC,IAAI2vB,GACZ,MAAMC,EAA+BxvB,OAAOgP,OAAOugB,EAAU,CAC3D7oB,UAAW7H,KAAK6H,UAChB5H,QAASD,KAAKC,UAEhBD,KAAKqT,cAAcjD,WAAWugB,EAA8B3wB,KAAKkP,MAAK,GAaxElP,KAAK+uB,cAAY,IAGE,aAAnBrkB,EAAKmkB,OAA0B,CAEjC7uB,KAAK6H,WAAY,EACjB7H,KAAKC,SAAU,EACf,MAAMywB,EAAW1wB,KAAKgF,MAAMhF,KAAKkP,OACjCpO,QAAQC,IAAI2vB,GACZ,MAAMC,EAA+BxvB,OAAOgP,OAAOugB,EAAU,CAC3D7oB,UAAW7H,KAAK6H,UAChB5H,QAASD,KAAKC,UAEhBD,KAAKqT,cAAcjD,WAAWugB,EAA8B3wB,KAAKkP,OACjEgc,cAAclrB,KAAKmrB,gBAEnBnrB,KAAK+uB,cAAY,MAKjB/uB,KAAKgtB,mBAAoB,EACzBlsB,QAAQC,IAAI,mBAAmB2J,EAAKmkB,YAAeF,KACnDA,GAAa,GAGjBrZ,MAAOA,IACLxU,QAAQwU,MAAMA,GACdtV,KAAK+uB,eACL7D,cAAclrB,KAAKmrB,gBACnBnrB,KAAKC,SAAU,IAElB,EAnUgB,IAsUvB,CAEA0vB,eAAejQ,GAEb,MAA0B,QAAnBA,EAAOpT,MAAwC,UAAnBoT,EAAOpT,KAAsB,IAC3DoT,EAAO5F,aACVM,SAAUsC,IACVrC,SAAUqC,IACVkF,SAAS,GACP,CAEFyD,eAAgB3F,EAAO5F,aAAgB8W,cACvCnB,UAAW,KACX1V,eAAgB,GAChB6H,SAAS,EAEb,CAEAoM,gBAAgB7f,EAAwBlD,GAAsB,GAC5DjL,KAAK6wB,gBACD5lB,IACFjL,KAAK6qB,cAAgB,GACrB7qB,KAAK8qB,gBAAkB,IAEzB9qB,KAAKC,QAAUgL,EACfjL,KAAK6H,WAAaoD,EAClBjL,KAAK8wB,kBAAoB7lB,EAEzBjL,KAAKqO,iBAAiB/D,aAAa6D,GAAQhO,UACxCuK,IAEC,GAAIA,EAAKtD,QAAasD,EAAKtD,OAAUtB,OAAQ,CAC3ChF,QAAQC,IAAI2J,GACZ5J,QAAQwU,MAAM5K,EAAKtD,QACnBpH,KAAK6qB,cAAgBngB,EAAKtD,OACtBsD,EAAKrD,SAAYvB,SACnBhF,QAAQC,IAAI2J,EAAKrD,UACjBrH,KAAK8qB,gBAAkBpgB,EAAKrD,UAE9BrH,KAAKC,SAAU,EACfD,KAAK6H,WAAY,EACjB,MAAM8oB,EAA+BxvB,OAAOgP,OAAO/H,GAAkC,CACnFP,WAAW,EACX5H,SAAS,IAIX,OAFAD,KAAKqT,cAAcjD,WAAWugB,EAA8B3wB,KAAKkP,YACjElP,KAAK+uB,cACL,CAoBF,GAjBIrkB,EAAKrD,SAAYvB,SACnBhF,QAAQC,IAAI2J,EAAKrD,UACjBrH,KAAK8qB,gBAAkBpgB,EAAKrD,UAI9BrH,KAAKqT,cAAc3C,yBADE,CAACsa,uBAAwBtgB,EAAKsgB,wBACOhrB,KAAKkP,OAE/DlP,KAAKqT,cAAc1E,cAAcjE,EAAKnC,aACtCvI,KAAKqT,cAAcxE,sBAAsBnE,EAAKnC,aAC9CvI,KAAKqT,cAAczE,kBAAkBlE,EAAKuD,kBAE1CjO,KAAKmT,SAAS8mB,aAAa,YAAYvvB,EAAKnC,eAKxC0C,EAAY,CACd,MAAMC,EAAa,GAAGR,EAAKsmB,cAC3BlwB,QAAQC,IAAImK,GACZlL,KAAKisB,sBAAsB/gB,EAAU,MAErClL,KAAK0uB,YAAY1nB,aAAc,EAC/BhH,KAAK6H,WAAY,EACjB7H,KAAKC,SAAU,EACfD,KAAK8wB,kBAAmB,EACxB9wB,KAAK+uB,cAAY,EAGpBzZ,IACCxU,QAAQwU,MAAMA,GACdtV,KAAK6qB,cAAchqB,KAAKyU,EAAMA,OAC9BtV,KAAK6H,WAAY,EACjB7H,KAAKC,SAAU,EACf,MACM6uB,EAAgB3tB,OAAOgP,OADZnQ,KAAKgF,MAAMhF,KAAKkP,OACa,CAC5CrH,UAAW7H,KAAK6H,UAChB5H,QAASD,KAAKC,UAEhBD,KAAKqT,cAAcjD,WAAW0e,EAAe9uB,KAAKkP,OAClDgc,cAAclrB,KAAKmrB,gBACnBnrB,KAAK+uB,cAAY,EAIvB,CAEAxB,eACE,IACIC,EADAC,EAAWjtB,UAAQR,KAAKkP,MAAQ,EAAGlP,KAAKyI,OAAO3C,QAEnDhF,QAAQC,IAAI0sB,GACZjtB,YAAUitB,EAAU5T,IAClB2T,EAAWxtB,KAAKgF,MAAM6U,GACtB,MAAMuM,EAAkB,IACnBoH,EACHvtB,SAAS,EACT4H,WAAW,GAEb7H,KAAKqT,cAAcjD,WAAWgW,EAAiBvM,EAAC,GAElD7Z,KAAK0tB,UAAY1tB,KAAKixB,uBAAyBjxB,KAAKitB,OACtD,CAEAvB,WACE1rB,KAAK4sB,uBACL5sB,KAAK6sB,UAAU9Z,KAAK/S,KAAKkP,MAC3B,CAEAqc,YACE,GAAGvrB,KAAKugC,YAAYllB,QAIlB,OAFArb,KAAKkS,aAAaR,IAAI,gFAAgF1R,KAAKiJ,cAAcmM,4CAA4CpV,KAAKkO,kBAAkBpI,OAAOsP,mBAAoB,qBACvNpV,KAAKyU,KAAKzU,KAAK0U,YAIjB,MAAMoY,EAAYtsB,SAAOR,KAAKgF,MAAMC,MAAMjF,KAAKkP,MAAM,GAAK0G,GAAMA,EAAE/N,WAAa+N,EAAE3V,SAC9ED,KAAKyI,OAAO3C,OAAS,GAAKgnB,EAC3B9sB,KAAKyU,KAAKzU,KAAK+sB,eAEf/sB,KAAKgtB,mBAAoB,EACT,IAAbhtB,KAAKkP,MACNlP,KAAKitB,QAELjtB,KAAKktB,SAGX,CAGAvB,YAEE3rB,KAAKugC,YAAYrgC,IAAI,qBAAqBqF,aAAapF,UAAUqF,IAE/DxF,KAAK0uB,YAAY7iB,WAAa7L,KAAK6H,YAGT7H,KAAKugC,YAAYrgC,IAAI,sBAAsBqF,aAAaoE,QAClFsqB,MAASruB,MAAKsuB,MAAM,QAOD/zB,UAAUqF,IAC7B1E,QAAQC,IAAI,uBAEZf,KAAK4rB,eAAepmB,GACpBxF,KAAK0uB,YAAY3E,oBAAsB/pB,KAAK6H,UAChC,KAARrC,IACFxF,KAAK2a,kBAAoB,GACzB3a,KAAK8a,QAAU,IAOrB,CAGA8Q,eAAepmB,GAEb,MAAMiuB,EAAYjuB,EAAI,GAChBkuB,EAAYluB,EAAI+R,MAAM,MAAM,GAClCzW,QAAQC,IAAI2yB,GAGZ,IAAIC,EAAyB,EACzBxX,EAAY,IACbuX,EAAUhzB,SAAS,KACpByb,EAAY,IACHuX,EAAUhzB,SAAS,MAC5Byb,EAAY,KACHuX,EAAUhzB,SAAS,OAC5Byb,EAAY,KAEdwX,EAAyBD,EAAUnc,MAAM4E,GAAWrW,OACpDhF,QAAQC,IAAI4yB,GACZ7yB,QAAQC,IAAIob,GAEZ,MAAMyX,EAAYpuB,EAAIP,MAAM,EAAGjF,KAAKiJ,eAEjCzD,EAAIM,OAAS9F,KAAKiJ,gBAEI,MAAdwqB,GAAqBzzB,KAAK6pB,sBAAsBzO,cAAc5V,IACvExF,KAAKmb,UAAYnb,KAAK6pB,sBAAsB1O,UAC5Cnb,KAAK6zB,gBAAkBD,EAAU9tB,QACT,MAAd2tB,GAAmC,MAAdA,IAAsB7qB,GAAapD,GAG9B,IAA3BmuB,GAAgC3zB,KAAK6pB,sBAAsB3N,wBAAwB1W,EAAK2W,IAIxF3W,EAAIM,OAAS,IAAMN,EAAI9E,SAAS,MAAQV,KAAK6pB,sBAAsBvN,0BAA0B9W,IAFtGxF,KAAKmb,UAAYnb,KAAK6pB,sBAAsB1O,UAC5Cnb,KAAK6zB,gBAAkBD,EAAU9tB,QAKhB,KAARN,GAITxF,KAAKmb,UAAY,UACjBnb,KAAK6zB,gBAAkB,IAEvB7zB,KAAKmb,UAAY,QACjBnb,KAAK6zB,gBAAkB,IAlBvB7zB,KAAKmb,UAAY,OACjBnb,KAAK6zB,gBAAkBD,EAAU9tB,QAmBrC,CAGA2O,KAAK8B,GACHvW,KAAKm0B,WAAY,EACjBn0B,KAAKoT,aAAaqB,KAAK8B,EAAS,CAC9BC,eAAgB,oBAChBhC,KAAM,KACNiC,WAAW,EACXC,SAAU,WACT1C,OAAO2C,KAAM3C,IAEdhU,KAAK0tB,WAAY,EACjB1tB,KAAKm0B,WAAY,GACfvd,IACF5W,KAAK0tB,WAAY,EACjB1tB,KAAKo0B,aAAaC,cAAcC,OAAK,EAGzC,CAEAzd,oBACE7W,KAAKyU,KAAKzU,KAAK8W,aACf9W,KAAK8V,aAAe,IAAI9V,KAAK0L,QAAQtL,OACrCU,QAAQC,IAAIf,KAAK8V,aACnB,CAEAiB,qBACE/W,KAAKm0B,WAAY,EACjBn0B,KAAKoT,aAAa4D,YACpB,CAEAU,uBACE1X,KAAK0L,QAAQqG,QACbvR,YAAUR,KAAK8V,aAAeI,IAC5BlW,KAAK0L,QAAQ7K,KAAKb,KAAK8c,GAAGjY,MAAMqR,GAAe,GAEjDlW,KAAK0uB,YAAYhjB,QAAU1L,KAAK6H,UAChC7H,KAAKoT,aAAa4D,aAClBhX,KAAKm0B,WAAY,CACnB,CAEA9c,kBAAkBpB,GAChBjW,KAAK8V,aAAe,GAEpB,MAAQpK,WAAY4L,GACpB9W,YAAUkL,EAAQ6L,MAAM,KAAOjM,IAAYtL,KAAK8V,aAAajV,KAAK,CAAC0K,MAAOD,EAAQkM,QAAS,KAAMC,MAAO,MAAK,GAC7GxB,EAAM7V,MAAQJ,KAAK6V,yBACrB,CAEAkZ,eAEE,CAGF8B,gBAEE,CAIF0C,mBAAmBlf,GACjBA,EAAO9B,iBAIP,MAAOK,SAASyB,EAAOqR,OACvB9S,GAAS5S,KAAKoU,cAAcxB,EAC9B,CAGAwe,WACEtwB,QAAQC,IAAIf,KAAKmrB,gBACjBD,cAAclrB,KAAKmrB,gBACnBnrB,KAAKqxB,aAAate,OAElB/S,KAAK0uB,YAAY1nB,aAAc,EAG/B,MAAMof,EAAkB,IADJpmB,KAAKgF,MAAMhF,KAAKkP,OAGlCjP,SAAS,EACT4H,WAAW,EACXC,oBAAgBC,GAElB/H,KAAKqT,cAAcjD,WAAWgW,EAAiBpmB,KAAKkP,OACpDlP,KAAK8qB,gBAAkB,GACvB9qB,KAAKC,SAAU,EACfD,KAAK8wB,kBAAmB,EACxB9wB,KAAK+uB,cACP,CAEAuC,UACEtxB,KAAKkS,aAAaH,QAClB/R,KAAK6qB,cAAgB,GACrB7qB,KAAK8qB,gBAAkB,GAEvB,MAAMyG,EAAcvxB,KAAKyI,OAAOzI,KAAKkP,OAAO6a,oBACtChjB,EAAmB/G,KAAKmO,OAAO1F,OAAOzI,KAAKkP,OAAOnI,iBAExDjG,QAAQC,IAAIgG,GAGZ/G,KAAK2a,kBAAoB,GACzB3a,KAAK8a,QAAU,EAEf9a,KAAK6vB,oBAAsB,GAC3B7vB,KAAKgvB,aAAe,GAGpBhvB,KAAKugC,YAAYprB,WAAW,CAC1BjH,kBAAmB,GACnBtC,cAHoB,CAAC,EAAG,KAIvB,CAAC4lB,WAAW,IAGfxxB,KAAK0L,QAAQqG,QAGb,MAAM0f,EAAgB,CACpBnlB,KAAM,UACNC,OAAQ,gBAEJmlB,EAAK1xB,KAAKugC,YAAYxiB,SAASjS,iBACrC4lB,EAAG3f,MAAM,CAACyf,WAAW,IACrBE,EAAG7wB,KAAKb,KAAK8c,GAAGjY,MAAM4sB,GAAgB,CAACD,WAAW,IAElDxxB,KAAK+uB,eAEF/uB,KAAK6H,YACN7H,KAAK0uB,YAAe,IACf1uB,KAAK0uB,YAER3E,oBAAqC,KAAhBwH,EACrB7lB,SAAUlL,YAAU,GAAIuG,EAAiB2E,SAEzCG,YAAarL,YAAU,CAACixB,GAAgB1qB,EAAiB8E,aAG/D,CAEAuI,cAAcC,GACZvT,QAAQC,IAAIsT,GACZ,MAAMC,EAAOD,EAAO,GACdE,EAAWD,EAAKE,KAAO,KAC7B1T,QAAQC,IAAIuT,EAAKhI,MACbiI,EAAW,KACbvU,KAAKkS,aAAaR,IAAI,mCAAoC,gBAC1D1R,KAAKyU,KAAKzU,KAAK0U,aAGf1U,KAAK2U,wBAAwBN,EAEjC,CAEAM,wBAAwB/B,GACtB9R,QAAQC,IAAI6R,GACZ5S,KAAKymB,SAAW7T,EAAM,GAAGrO,KACzB,MAAMqQ,EAAS,IAAIC,WACbC,EAAS9U,KAAKugC,YACpB,UAAWxrB,KAAQnC,EAEjBgC,EAAOI,WAAWD,GAClBH,EAAOK,OAAS,KACd,MAAMzP,EAAMoP,EAAOZ,QAAQkB,YAAc,GACzCpU,QAAQC,IAAIyE,GACZ,MAAMI,EAAI8C,EAAQlD,GAClB1E,QAAQC,IAAI6E,GACRA,EAEQoD,EAAYxD,EAAKxF,KAAKiJ,eAE9B6L,EAAOK,WAAW,CAACjH,kBAAmB1I,KAEtCxF,KAAKkS,aAAaR,IAAI,iDAAiD1R,KAAKiJ,cAAcmM,eAAe,sBAAuB,gBAChIpV,KAAKyU,KAAKzU,KAAK0U,cAIjB1U,KAAKkS,aAAaR,IAAI,2EAA4E,gBAClG1R,KAAKyU,KAAKzU,KAAK0U,YAAU,EAI7BE,EAAOS,QAAU,KACfvU,QAAQC,IAAI6T,EAAOU,MAAK,EAE1BP,EAAKQ,SAAW,EAChBvV,KAAK4S,MAAM/R,KAAKkU,EAEpB,CAEAkc,uBACoBzwB,SAAOR,KAAKgF,MAAMC,MAAMjF,KAAKkP,MAAM,GAAI,CAACrH,WAAW,KAEnE7H,KAAK0tB,WAAY,EACjB1tB,KAAKyU,KAAKzU,KAAK+sB,eAEf/sB,KAAKqmB,kBAET,CAEAA,mBACE,MAEMlY,EAASnO,KAAKmO,OAEpB,IAAIwL,EAASD,EAAmB1Z,KAAK4vB,sBAJlB,QAKnB,MAAMnnB,EAAS0F,EAAO1F,OAChB4G,EAAY5G,EAAOzI,KAAKkP,OAC9BG,EAAUrI,YAAc,CAAC,CAACC,MAAO,gBAAiBC,QAASyS,IAC3DlR,EAAOzI,KAAKkP,OAASG,EACrBlB,EAAO1F,OAASA,EAEhB,MAAM9B,EAAe3G,KAAKkP,MAAQ,EAClCf,EAAO3F,gBAAkB,CAAC7B,EAAcA,GACxC3G,KAAKqT,cAAc3E,UAAUP,GAE7B,IAAIrG,GAAkBtH,YAAUmZ,GAChC3Z,KAAKqT,cAAc5C,sBAAsB3I,EAAgB9H,KAAKkP,OAC9DlP,KAAKguB,gBAAgB7f,GAAQ,GAC7BnO,KAAK0tB,WAAY,CACnB,CAEAwD,kBACElxB,KAAK0uB,YAAY1nB,YAAchH,KAAK6H,SACtC,CAEAspB,oBACEnxB,KAAK4vB,sBAAwBpvB,QAAMR,KAAK4vB,sBAAwBnvB,IAC9DA,EAAEqZ,aAA0B,QAAXrZ,EAAE6L,KAAgB,CAC/B8N,SAAUsC,IACVrC,SAAUqC,IACVkF,SAAS,GAEX,CACEyD,eAAgB,GAChBoK,UAAW,KACX1V,eAAgB,GAChB6H,SAAS,GAENnhB,IAETT,KAAK0uB,YAAY1nB,YAAchH,KAAK6H,SACtC,CAIA2qB,oBAAoBC,GAClB,MAAOC,gBAAeC,gBAAgBF,EAEhCzV,EAAUhd,KAAK8L,iBAAiB8mB,GAAGF,GACzC1yB,KAAK8L,iBAAiBwmB,SAASI,GAC/B1yB,KAAK8L,iBAAiB+mB,OAAOF,EAAc3V,GAEvC0V,IAAkBC,IACpB3yB,KAAK0uB,YAAY7iB,WAAa7L,KAAK6H,UAEvC,CAEAirB,yBAAyB1yB,GACvBJ,KAAK0uB,YAAY7iB,WAAa7L,KAAK6H,SACrC,CAEAkrB,uBAAuB7jB,GACrBlP,KAAK8L,iBAAiBwmB,SAASpjB,GAC/BlP,KAAK0uB,YAAY7iB,WAAa7L,KAAK6H,SACrC,CAEAmrB,qBACEhzB,KAAK8L,iBAAiBjL,KAAKb,KAAK2xB,uBAChC3xB,KAAK0uB,YAAY7iB,WAAa7L,KAAK6H,SACrC,CAEAorB,+BACEjzB,KAAK8L,iBAAiBjL,KAAKb,KAAK4xB,8BAChC5xB,KAAK0uB,YAAY7iB,WAAa7L,KAAK6H,SACrC,CAEA8pB,oBAAoBplB,EAAS,gBAM3B,OAAOvM,KAAK8c,GAAGjY,MAAM,CACnByH,KAAM,UACNC,OAAQvM,KAAK8c,GAAGE,QAAQzQ,IAE5B,CAEAqlB,2BAA2B9T,EAAc,UAAW+T,EAAmB,SAGrE,OAAO7xB,KAAK8c,GAAGjY,MAAM,CACnByH,KAAM,iBACNwR,YAAaA,EACb+T,iBAAkB7xB,KAAK8c,GAAGE,QAAQ6U,IAEtC,CAGA7b,gBAAgB1P,IAAG2P,UACjB3P,EAAEiM,iBACF,MAAM2D,EAAiB5P,EAAEyO,KACZvU,QAAMR,KAAK0L,QAAQtL,MAAQkL,GAAWA,EAAOC,OAC9C7K,SAASwV,EAAe3K,QAClCvL,KAAK0L,QAAQ7K,KAAKb,KAAK8c,GAAGjY,MAAMqR,IAGlCD,EAAM7V,MAAQ,GACdJ,KAAK0uB,YAAYhjB,QAAU1L,KAAK6H,SAClC,CAEAsO,qBAAqB7P,IAAG2P,UACtB3P,EAAEiM,iBACF,MAAM2D,EAAiB5P,EAAEyO,KACZvU,QAAMR,KAAK8V,aAAexK,GAAWA,EAAOC,OAC7C7K,SAASwV,EAAe3K,QAClCvL,KAAK8V,aAAajV,KAAKqV,GAEzBD,EAAM7V,MAAQ,EAChB,CAEAgW,mBAAmB9P,EAAoC2P,GAOrD,GAHA3P,EAAEiM,iBACF0D,EAAM7V,MAAQ,GACd6V,EAAMI,YAAc,kBAChBrW,KAAK0L,QAAQ5F,OAAQ,CACvB,MAAMwQ,EAAS9V,QAAMR,KAAK0L,QAAQtL,MAAQwV,GACjCA,EAAErK,OAEX0K,EAAM7V,MAAQkW,EAAO9K,KAAK,KAAI,CAElC,CAEA6mB,wBAAwB/rB,EAAoC2P,GAI1D3P,EAAEiM,iBACF0D,EAAMI,YAAc,kBACpBJ,EAAM7V,MAAQJ,KAAK8V,aAAahQ,OAAS9F,KAAK6V,0BAA4B,EAC5E,CAEAoB,cAAchB,GACZjW,KAAK0uB,YAAYhjB,QAAU1L,KAAK6H,UAChC7H,KAAK0L,QAAQqG,QACbkE,EAAM7V,MAAQ,EAChB,CAEAuX,mBAAmB1B,GACjBjW,KAAK8V,aAAe,GACpBG,EAAM7V,MAAQ,EAChB,CAEA8W,iBAAiBhI,GACflP,KAAK0L,QAAQ4mB,SAASpjB,GACtBlP,KAAK0uB,YAAYhjB,QAAU1L,KAAK6H,SAKlC,CAGA0qB,kBAAkBrjB,EAAe+G,GAC/BnV,QAAQC,IAAImO,GACZ1O,WAASR,KAAK8V,aAAc,CAAC5G,IAC7B,MAAMoH,EAAStW,KAAK8V,aAAa7P,IAAM2P,GAA0BA,EAAErK,OAAQC,KAAK,MAChFyK,EAAM7V,MAAQJ,KAAK8V,aAAahQ,OAASwQ,EAAS,EACpD,CA2BAP,eAAe3V,GAIb,GAAIA,EAAMmL,MACR,MAAO,GAAGnL,EAAMmL,OAEpB,CAEA+nB,sBAEE,MAAMhzB,EAAON,KAAKqO,iBAAiBlD,iBAAiBnL,KAAKugC,aAEnDppB,EAAIsB,SAASC,cAAc,KACjCvB,EAAEwB,aAAa,QAAS,iBACxBF,SAASG,KAAKC,YAAY1B,GAG1B,MAAMoB,EAAO,IAAIC,KAAK,CAAC3P,KAAK0B,UAAUjK,EAAM,KAAM,KAClD6W,EAAE2B,KAAOX,OAAOY,IAAIC,gBAAgBT,GACpCpB,EAAE8B,SAAW,iBAEb9B,EAAE+B,OACJ,CAQAgZ,iBACE9Y,EAA2BpZ,KAAKirB,uBAAuBf,uBAAwBlqB,KAAKD,KAAM,OAC5F,CAMAqyB,qBACEhZ,EAA2BpZ,KAAKirB,uBAAuBb,mBAAoBpqB,KAAKD,KAAM,MACxF,CAEAwqB,cACEvqB,KAAKwsB,aAAc,EACnBxsB,KAAKD,KAAKG,IAAW8J,IAClBL,OAAOxJ,UACRuK,IAEE1K,KAAKysB,eAAiB/hB,EAAKmB,WAE3B7L,KAAK0sB,kBAAoBlsB,WAASR,KAAKysB,eAAgB,CAAC5nB,MAAS,YACjE7E,KAAK2sB,gCAAkCnsB,WAASR,KAAKysB,eAAgB,CAAC5nB,MAAS,UAAWskB,UAAY,IACtGnpB,KAAKipB,kBAAoBzoB,WAASR,KAAKysB,eAAgB,CAAC5nB,MAAS,eACjE/D,QAAQC,IAAIf,KAAKipB,mBACjBjpB,KAAKwsB,aAAc,GAGzB,EAjjDW2T,SAAiC,oCAAjCA,GAAiCn/B,iJAAjCm/B,EAAiC,sBAAjCA,EAAiCzgC,iohBD1D9CC,kBAAgCA,mCAAY6G,aAAW,GACrD7G,iBAAiC,UACJA,SAAaA,QACxCA,gBACFA,QACAA,iBAAyB,UACyCA,uCAC9DA,iBACFA,QACAA,iBAA6E,cAA7EA,CAA6E,UAGvEA,2BAEEA,oBACsH,aADtHA,CACsH,cAIxHA,QACAA,mBACFA,UAEFA,8BAA2C,WAEvCA,2BAEEA,oBAC8uC,cAGhvCA,QACAA,kBACFA,UAEFA,8BAGEA,2BAEEA,oBACid,cAGndA,QACAA,uBACFA,QACAA,8BAEEA,2BAEEA,oBACuR,cAGzRA,QACAA,mBACFA,YAIJA,qCA2FAA,2BAAqB,YACSA,kCAAqBA,QACjDA,mBAqBEA,6CAIAA,sBAAuEA,gCAAS6G,uBAAqB,GAEnG7G,2BAEEA,oBAC+I,cAGjJA,cAqCNA,2BAA+C,YAA/CA,CAA+C,eAGzCA,4BACFA,UAEFA,mBAAsB,aAElBA,6CAGAA,wBAOOA,iEAAcA,sCAAkD,GAPvEA,YAYJA,mBACEA,0BAKFA,QACAA,mBAAiC,gBAEvBA,gCAAS6G,qBAAmB,GAGlC7G,4BACFA,YAGJA,mBAAqB,YAArBA,CAAqB,YAArBA,CAAqB,oBAIbA,+BAMFA,UAEFA,4BAGFA,UAGFA,mBAAiE,eAE7DA,UACFA,UAIFA,mBAAqB,eAEjBA,kCACFA,UAGFA,mBAA4CA,8CAAsB6G,wBAA2B,GAG3F7G,mBACEA,0BA8BFA,UAEFA,4BAKAA,mBAAyC,YAAzCA,CAAyC,YAAzCA,CAAyC,gBAOjCA,qCACFA,QACAA,mBAA2D,gBAGbA,gCAAS6G,sBAAoB,GAAE7G,gCAAmBA,QAC9FA,sBAA4CA,gCAAS6G,gCAA8B,GAAE7G,yCAErFA,gBAWRA,eAEAA,mBAAqD,YAArDA,CAAqD,gBAKzCA,oDAAS6G,mBAAW7G,cAAmB,GAAE,GAC/CA,2BAEEA,oBAA+F,cAGjGA,UAEFA,mBACAA,2BAGAA,6CAwCFA,YAIJA,2BAEEA,2BA+BAA,2BA0BFA,QAEAA,0BAQAA,2BAaAA,4BA8CAA,gDA4FAA,8CAgBAA,iGAppBMA,iCAEyBA,0BAsBJA,2CAabA,qCAwBGA,oCAuHHA,+BAwDCA,qEACAA,+BAAuB,kCAAvBA,CAAuB,mBAAvBA,CAAuB,cAAvBA,CAAuB,qBAAvBA,CAAuB,iCAW1BA,iDASEA,6BACAA,4BAOHA,kFAE4BA,0CAQzBA,6CAQRA,mDAcGA,yEACiEA,sDAgChEA,gDAWiDA,qCA0BeA,sCAU7DA,iCAAe,cAiDKA,8CA+BCA,gDA4B5BA,mGAQAA,iCAcAA,k+FCjcOwgC,CAAiC,oBCrDxC,SAAUU,GAAWr/B,EAAas/B,GAEtC,OAAQC,OAAOv/B,GAAKw/B,MAAM,QAAU,IAAIl7B,OAAS,EAAIg7B,CACvD,uFCkGUnhC,eACEA,kCAAqBA,cAAKA,oBAC5BA,0DA9CRA,iBACEA,kBAAqB,WACSA,qCAAyBA,QAErDA,kBAAmB,eAEsDA,gCAAS,IAAI,GAIlFA,0BAEEA,mBAC+I,aAGjJA,UAEFA,0BAAgE,YAAhEA,CAAgE,YAErDA,0BAAaA,QACpBA,mBACAA,mBAAuB,gBAGLA,yDAASA,yBAAgB,GACvCA,mBACFA,QACAA,sBAEgBA,yDAASA,6BAAoB,GAC5CA,iBACDA,cAINA,mBACAA,wBAIOA,2DAAUA,8BAA0B,GAJ3CA,QAMAA,6CAMAA,sBAAuEA,2DAASA,gBAAgB,GAG9FA,2BAEEA,oBAC+I,cAGjJA,UAEFA,mBACFA,UAEFA,2BAA2CA,gEAAeA,yBAAqB,GAC7EA,wBAqBFA,QACFA,4CA/EcA,wCAiBAA,mGAKAA,kGAoB0FA,qCAAoB,gBAgB9GA,gFAIAA,4BAAoB,6DAsC5BA,oBACEA,iDACFA,gCAcFA,oBACEA,iDACFA,gCAUAA,oBACEA,iDACFA,gCASAA,oBACEA,iDACFA,gCASAA,oBACEA,iDACFA,0DAoBAA,wBAAsC,eACgBA,yDAASA,mBAAU,GAAGA,wBAAWA,SAAS,mDAG9FA,0BAA8D,WAA9DA,CAA8D,eAOxDA,0BACEA,mBACFA,UAEFA,6BAMAA,kBAA2B,UACAA,0DAASA,mBAAU,GAAEA,yBAAaA,aAAI,0BAfzDA,uFAWAA,gFASVA,6BAKEA,0BACEA,mBACFA,iCANMA,iHAxBVA,yBAsBAA,6EAtBMA,0BAAiB,sCA+CvBA,0BAEEA,mBAEFA,gCAGAA,0BAEEA,mBAEFA,mCAQIA,cAAwDA,SAAWA,kCAAXA,6CAD1DA,cACEA,yBACFA,+BAD0BA,qEAxBlCA,qBAAwG,UAAxGA,CAAwG,cAAxGA,CAAwG,aAGpEA,SAAiCA,QAE/DA,yBAOAA,yBAMFA,UAEFA,kBAA0B,YAEtBA,+BAKFA,6CA3BiFA,sBAGjDA,sDAExBA,mCAOAA,4DAuBNA,2BAEEA,mBAEFA,gCACAA,2BAEEA,mBAEFA,mCAOIA,cAA0DA,SAAWA,kCAAXA,6CAD5DA,cACEA,yBACFA,+BAD0BA,uEApBlCA,uBAA4G,UAA5GA,CAA4G,cAA5GA,CAA4G,cAGvEA,SAAqCA,QACpEA,0BAKAA,0BAKFA,UAEFA,kBAA0B,YAEtBA,+BAKFA,6CAvBqFA,sBAGpDA,0DACzBA,mCAKAA,+DAmBdA,mBAEgD,eAE5CA,iDACFA,gCAHGA,uFAUHA,qBACEA,uDAA0CA,iBAA6BA,0DAASA,8BAAqB,GAAEA,gBAAIA,QAAKA,+BAElHA,gCACAA,qBACEA,iDACFA,mCAVFA,mBAA8G,YAA9GA,CAA8G,cAEpEA,sBAAUA,UAElDA,4BAIAA,4BAGFA,8BAXmEA,6CAIzDA,4CAIAA,qFAYFA,gCAQkBA,sEAAqBA,0BAAiB,EAAtCA,CAAuC,kEAChBA,4BAAmB,EAD1CA,CAAuC,iEAEjBA,6BAAqB,kBAAiB,GAC7EA,iCAXiBA,2CAAmC,qCAAnCA,CAAmC,yCAAnCA,CAAmC,6BAAnCA,CAAmC,gBAAnCA,CAAmC,0CAAnCA,CAAmC,+DAHzDA,kBAA2E,WAC1DA,6BAAgBA,QAC/BA,kCAcFA,cAhB2CA,8EAqBvCA,gCAQkBA,sEAAqBA,2BAAkB,EAAvCA,CAAwC,kEACjBA,6BAAoB,EAD3CA,CAAwC,iEAElBA,6BAAqB,WAAU,GACtEA,iCAXiBA,oCAA4B,8BAA5BA,CAA4B,kCAA5BA,CAA4B,6BAA5BA,CAA4B,gBAA5BA,CAA4B,0CAA5BA,CAA4B,+DAHlDA,kBAA6D,WAC5CA,0BAAaA,QAC5BA,kCAcFA,cAhBoCA,uDAsBhCA,sDAAkBA,gCAAwB,0BAAxBA,CAAwB,8BAAxBA,CAAwB,sDAJ9CA,kBAAqD,WACrCA,oBAAQA,QACtBA,kCAcFA,cAhBgCA,mEAxCpCA,mBACyF,gBAC9DA,uFAEvBA,yBAkBAA,yBAkBAA,yBAiBFA,QAEAA,mBACFA,2CA1D2BA,oCAAqB,eAArBA,CAAqB,oBAEvCA,wDAkBAA,iDAkBAA,6CAmBFA,2EAKLA,mBAA0B,YACuBA,+BAAmBA,QAClEA,sBAA2DA,8DAASshC,iBAAe,eAAcjgC,mBAAY,EAAK,GAClHrB,UAEFA,mBACEA,+BACFA,QACAA,8CAiBMA,cAAoDA,SAAcA,kCAAdA,0DAHxDA,eAAoD,MAApDA,CAAoD,YACvCA,+FAAmFA,UAC9FA,cACEA,yBACFA,QACAA,aAAG,YAAQA,gEAAoDA,mCAFxCA,8EAQrBA,cAAoDA,SAAcA,kCAAdA,0DAHtDA,aAAG,YAAQA,wIACeA,UAC1BA,cACEA,yBACFA,QACAA,aAAG,YAAQA,gEAAoDA,iCAFxCA,6FAjB3BA,mBAA0B,YACiBA,yBAAaA,QACtDA,sBAA2DA,8DAASuhC,iBAAqB,eAAclgC,mBAAY,EAAK,GACxHrB,UAEFA,mBACEA,yBAOAA,6CASAA,mBACEA,qBACAA,uBACEA,4BAEEA,qBACgK,eAGlKA,cAINA,4BAA0B,iBACgCA,2DAASA,gBAAqB,gBAAe,GAAEA,gBACvGA,QACAA,uBAA6CA,8DAASuhC,eAAmB,YAAavhC,uBAAc,GAAGA,wDAEvGA,SAAS,oCAlCHA,oCAAkB,cAiB0CA,sCAC9BA,4GCrajC,IAAMwhC,GAAgC,MAAvC,MAAOA,EA2SX3hC,YACS0S,EACCnS,EACA+c,EACAzO,EACAgF,EACAsW,EACAzW,EACA2E,EACA1E,EACAyW,EACAC,EACAzW,GAXDpT,oBACCA,YACAA,UACAA,wBACAA,qBACAA,qBACAA,aACAA,cACAA,gBACAA,oBACAA,6BACAA,oBAjTDA,qBAA0B,EAGzBA,oBAAiB,IAAIoS,MAE/BpS,YAAS,iBAECA,eAAY,IAAIoS,MAChBpS,kBAAe,IAAIoS,MAOpBpS,eAA2BmR,QAC5BnR,wBAAoC,IAAIqqB,IAEvCrqB,oBAAgCmR,QACjCnR,wBAAoC,IAAIqqB,IAEhDrqB,kBAAe,IAAIue,KAEnBve,gBAAY,EAIZA,gBAAY,EACZA,cAAU,EACVA,wBAAoB,EACpBA,sBAAkB,EAClBA,uBAAmB,EACnBA,gBAAY,EAEZA,kBAAsB,GAEtBA,mBAA0B,GAC1BA,qBAA4B,GAE5BA,qBAAyB,GAEzBA,eAAmC,CAAC,IAEpCA,gCAAoC,GAEpCA,0BAA8C,CAAC,IAE/CA,yBAA6B,GAE7BA,mBAAuC,CAAC,IAExCA,aAA+BA,KAAKqT,cAAc7E,QAClDxO,YAA6BA,KAAKqT,cAAc5E,OAChDzO,iBAAkCA,KAAKqT,cAAcmL,YACrDxe,aAAsCA,KAAKqT,cAAcyW,QAEzD9pB,YAAkB,GAClBA,WAAgB,GAChBA,gBAAa,GAKbA,yBAA8B,GAE9BA,yBAAsB,w/oJAqKtBA,iBAAc,CAEZ+pB,qBAAqB,EACrBC,SAAS,EACTzc,0BAA0B,EAC1BE,0BAA0B,EAC1BE,mBAAmB,EACnBE,sBAAsB,EACtB0sB,eAAe,EACfC,eAAe,GAcjBx6B,gCAAsC,CACpCq4B,WAAW,EACXrwB,UAAU,EACViiB,WAAYzpB,QAAMA,UAAQ,EAAG,IAAM83B,KAAuCl4B,MAAOk4B,EAAKC,OAAQD,EAAM,GAAM,EAAI,GAAGA,SAAQvwB,KACzHywB,SAAU,EACVC,aAAa,EACb2I,iBAAiB,GAoBnBphC,cAAW,IACXA,WAAe,GACfA,cAAW,GAEXA,iBAAsB,GAGtBA,4BAAyB,CACvBkqB,uBAAwB,GACxBmX,iBAAkB,IAGpBrhC,gBAAa,GAAGJ,mBAgBhB,CAEAH,WAGEO,KAAKD,KAAKG,IAAI,mEAAoE,CAACmY,aAAc,SAASlY,UAAUG,IAClHQ,QAAQC,IAAIT,GACZN,KAAKshC,oBAAsBhhC,IAG7BN,KAAKuhC,WAAavhC,KAAK2pB,cAAc3M,QAAQ9c,IAAIF,KAAKwqB,eAEtDxqB,KAAKwe,YAAY7U,QAAKqX,KAAUhhB,KAAKihB,eAAe9gB,UAAUC,IAC5DJ,KAAK4K,WAAaxK,EAClBJ,KAAK2qB,YAAc,GAAGxS,OAAOhF,SAASyX,mBAAmBxqB,MAE3DJ,KAAKwO,QAAQ7E,QAAKqX,KAAUhhB,KAAKihB,eAAe9gB,UAAUC,IACxDJ,KAAKyI,OAASrI,EACdJ,KAAK6qB,cAAgB7qB,KAAKyI,OAAOzI,KAAKkP,QAAQ/H,eAAgBC,OAC9DpH,KAAK8qB,gBAAkB9qB,KAAKyI,OAAOzI,KAAKkP,QAAQ/H,eAAgBE,WAElErH,KAAKyO,OAAO9E,QAAKqX,KAAUhhB,KAAKihB,eAAe9gB,UAAUC,IACvDU,QAAQC,IAAI,UACZD,QAAQC,IAAIX,GACZJ,KAAKgF,MAAQ5E,EACbJ,KAAK6H,UAAY7H,KAAKgF,MAAMhF,KAAKkP,QAAQrH,UAGzC,MAAMkjB,EAAsB/qB,KAAKgF,MAAMhF,KAAKkP,QAAQyB,gBAAgB6wB,kBAEpExhC,KAAKirB,uBAAuBf,uBAAyB,GAAGtqB,uCAAoDmrB,IAC5G/qB,KAAKirB,uBAAuBoW,iBAAmB,GAAGzhC,uCAAoDmrB,IAGtG/qB,KAAKorB,gBAAkB5qB,SAAOR,KAAKgF,MAAO,CAAC/E,SAAS,IAGhDD,KAAKgF,MAAMhF,KAAKkP,QAAQjP,UAC1BD,KAAKC,SAAU,EACfirB,cAAclrB,KAAKmrB,gBAAc,GAQrCnrB,KAAK8pB,QAAQngB,QAAKqX,KAAUhhB,KAAKihB,eAAe9gB,UAAUC,IACxDU,QAAQC,IAAI,UACZD,QAAQC,IAAIX,GACZJ,KAAKmO,OAAS/N,IAGhBJ,KAAKqrB,mBAAqBrrB,KAAKsrB,OAAOnrB,UAAU,IAAMH,KAAKurB,aAC3DvrB,KAAKwrB,mBAAqBxrB,KAAKyrB,YAAYtrB,UAAU,IAAMH,KAAK0rB,YAEhE1rB,KAAK2rB,WAEP,CAEA3J,cACEkJ,cAAclrB,KAAKmrB,gBACnBD,cAAclrB,KAAKqO,iBAAiB8c,gBACpCnrB,KAAKihB,aAAalX,OAClB/J,KAAKihB,aAAaiB,WAElBliB,KAAKqrB,mBAAmBpJ,cACxBjiB,KAAKwrB,mBAAmBvJ,aAC1B,CAEAJ,kBACEgK,WAAW,KACGC,QAAQ3iB,OAAO4iB,KAEpB/rB,KAAKurB,WAAS,EACpB,EACL,CAEA7C,YAAYC,GACPA,EAAQqD,WAAWpD,eACpB9nB,QAAQC,IAAI4nB,EAAQqD,UAAUpD,cAC9B9nB,QAAQC,IAAI,sBACZf,KAAKC,SAAU,EACfD,KAAKisB,sBAAsBtD,EAAQqD,UAAUpD,cAEjD,CAEIwK,2BACF,OAAQpzB,KAAKC,SAAWD,KAAK6H,UAAY,OAAS,QACpD,CAEIqG,wBACF,OAAOlO,KAAKuhC,WAAWrhC,IAAI,iBAAiBE,KAC9C,CAEImN,+BACF,OAAOvN,KAAKuhC,WAAWrhC,IAAI,6BAA6BE,KAC1D,CAEIqN,+BACF,OAAOzN,KAAKuhC,WAAWrhC,IAAI,6BAA6BE,KAC1D,CAEAurB,YACE3rB,KAAKuhC,WAAWrhC,IAAI,6BAA6BqF,aAAapF,UAAU,KACtEH,KAAK0uB,YAAYnhB,yBAA2BvN,KAAK6H,YAEnD7H,KAAKuhC,WAAWrhC,IAAI,6BAA6BqF,aAAapF,UAAU,KACtEH,KAAK0uB,YAAYjhB,yBAA2BzN,KAAK6H,YAEnD7H,KAAKuhC,WAAWrhC,IAAI,sBAAsBqF,aAAapF,UAAU,KAC/DH,KAAK0uB,YAAY/gB,kBAAoB3N,KAAK6H,YAE5C7H,KAAKuhC,WAAWrhC,IAAI,yBAAyBqF,aAAapF,UAAU,KAClEH,KAAK0uB,YAAY7gB,qBAAuB7N,KAAK6H,WAEjD,CAEA0jB,YAOE,MAAMuB,EAAYtsB,SAAOR,KAAKgF,MAAMC,MAAMjF,KAAKkP,MAAM,GAAK0G,GAAMA,EAAE/N,WAAa+N,EAAE3V,SAC9ED,KAAKyI,OAAO3C,OAAS,GAAKgnB,EAC3B9sB,KAAKyU,KAAKzU,KAAK+sB,eAEf/sB,KAAKgtB,mBAAoB,EACT,IAAbhtB,KAAKkP,OACNlP,KAAKitB,QAKX,CAEAA,QAME/M,EAAEmD,GAAGC,UAAUC,IAAItS,OAAS,GAE5B,MAAMtK,EAAe3G,KAAKkP,MAAQ,EAE5B1G,EAAoC,CAAC7B,EAAcA,GAEzD3G,KAAK4sB,uBAEL,IAAI1Y,EAAYlU,KAAKuhC,WAAWnhC,MAAMmO,aAGtC,MAAMof,EAAkB3tB,KAAKqO,iBAAiBjB,kBAAkBpN,KAAKuhC,aAG7Dv6B,eAAgBhH,KAAKyI,OAAOzI,KAAKkP,OAYnCf,EAAS,CACb5F,YAAe,GACfqlB,eAAkB5tB,KAAK6tB,UAAU9P,SAASxZ,KAAQnE,MAClD0tB,MAAS9tB,KAAK6tB,UAAU9P,SAAS+P,MAAS1tB,MAC1CoI,gBAAmBA,EACnBC,OAAU,CAfK,CACf3B,mBAAsB,4BACtBH,aAAgBA,EAChBC,WAAc,aACdC,WAAc,SACd46B,eAAkBvtB,EAClBnN,iBAAoB4mB,EACpB3mB,YAAeA,KAcXmnB,EAAkBhtB,OAAOgP,OAAO9H,GAAiC,CACrEpI,SAAS,EACT4H,WAAW,EACXC,gBAAiBtH,YAAUwG,GAAaE,WAE1ClH,KAAKqT,cAAc3E,UAAUP,GAC7BnO,KAAKqT,cAAcjD,WAAW+d,EAAiBnuB,KAAKkP,OACpDlP,KAAKqT,cAAcvD,6BAA6B6d,EAAiB3tB,KAAKkP,OAItElP,KAAKguB,gBAAgB7f,EACvB,CAOAolB,mBAAmBlf,GACjBA,EAAO9B,iBAIP,MAAOK,SAASyB,EAAOqR,OACvB9S,GAAS5S,KAAKoU,cAAcxB,EAC9B,CAEAwB,cAAcC,GACZvT,QAAQC,IAAIsT,GACZ,MAAMC,EAAOD,EAAO,GACdE,EAAWD,EAAKE,KAAO,KAC7B1T,QAAQC,IAAIuT,EAAKhI,MACbiI,EAAW,KACbvU,KAAKkS,aAAaR,IAAI,mCAAoC,gBAC1D1R,KAAKyU,KAAKzU,KAAK0U,aACK,uBAAZJ,EAAKhI,MACbxL,QAAQC,IAAI,WACZf,KAAK0hC,oBAAoBrtB,IAEzBrU,KAAK2U,wBAAwBN,EAEjC,CAGAI,KAAK8B,GACHvW,KAAKm0B,WAAY,EACjBn0B,KAAKoT,aAAaqB,KAAK8B,EAAS,CAC9BC,eAAgB,oBAChBhC,KAAM,KACNiC,WAAW,EACXC,SAAU,WACT1C,OAAO2C,KAAM3C,IAEdhU,KAAK0tB,WAAY,EACjB1tB,KAAKm0B,WAAY,GACfvd,IACF5W,KAAK0tB,WAAY,GAIrB,CAEA/Y,wBAAwB/B,GAItB9R,QAAQC,IAAI6R,GACZ5S,KAAKymB,SAAW7T,EAAM,GAAGrO,KACzBzD,QAAQC,IAAIf,KAAKymB,UACjB,MAAM7R,EAAS,IAAIC,WACbC,EAAS9U,KAAKuhC,WACpB,UAAWxsB,KAAQnC,EAEjBgC,EAAOI,WAAWD,GAClBH,EAAOK,OAAS,KACd,MAAMzP,EAAMoP,EAAOZ,QAAQkB,YAAc,GACzCpU,QAAQC,IAAIyE,GACZ,MAAMI,EAAI8C,EAAQlD,GAClB1E,QAAQC,IAAI6E,GACRA,EACQi7B,GAAWr7B,EAAKxF,KAAK2hC,UAE7B7sB,EAAOK,WAAW,CAAC5G,aAAc/I,KAEjCxF,KAAKkS,aAAaR,IAAI,qBAAqB1R,KAAK2hC,SAASvsB,eAAe,qBAAsB,gBAC9FpV,KAAKyU,KAAKzU,KAAK0U,cAGjB1U,KAAKkS,aAAaR,IAAI,0DAA2D,gBACjF1R,KAAKyU,KAAKzU,KAAK0U,YAAU,EAI7BE,EAAOS,QAAU,KACfvU,QAAQC,IAAI6T,EAAOU,MAAK,EAE1BP,EAAKQ,SAAW,EAChBvV,KAAK4S,MAAM/R,KAAKkU,EAEpB,CAEA2sB,oBAAoB9uB,GAIlB9R,QAAQC,IAAI6R,GACZ5S,KAAKymB,SAAW7T,EAAM,GAAGrO,KACzBzD,QAAQC,IAAIf,KAAKymB,UACjB,MAAM7R,EAAS,IAAIC,WACbC,EAAS9U,KAAKuhC,WACpB,UAAWxsB,KAAQnC,EAEjBgC,EAAOgtB,kBAAkB7sB,GACzBH,EAAOK,OAAS,KACdnU,QAAQC,IAAI6T,EAAOZ,QAEnB,IAAIxO,EAAM,GACV,IACEA,EAAMq8B,MAAajtB,EAAOZ,OAAqB,CAAE8tB,GAAI,iBAC9CxsB,GACPtV,KAAKkS,aAAaR,IAAI,sBAAsB1R,KAAKymB,8IAA+I,gBAChMzmB,KAAKyU,KAAKzU,KAAK0U,YACf5T,QAAQC,IAAIuU,GAIJ5M,EAAQlD,GAGNq7B,GAAWr7B,EAAKxF,KAAK2hC,UAE7B7sB,EAAOK,WAAW,CAAC5G,aAAc/I,KAEjCxF,KAAKkS,aAAaR,IAAI,qBAAqB1R,KAAK2hC,SAASvsB,eAAe,qBAAsB,gBAC9FpV,KAAKyU,KAAKzU,KAAK0U,cAGjB1U,KAAKkS,aAAaR,IAAI,0DAA2D,gBACjF1R,KAAKyU,KAAKzU,KAAK0U,YAAU,EAI7BE,EAAOS,QAAU,KACfvU,QAAQC,IAAI6T,EAAOU,MAAK,EAE1BP,EAAKQ,SAAW,EAChBvV,KAAK4S,MAAM/R,KAAKkU,EAEpB,CAEA+e,eAAeC,GAIb/zB,KAAK0uB,YAAY1E,QAAUhqB,KAAK6H,SAClC,CACAk6B,0BAA0BhO,GAIxB/zB,KAAK0uB,YAAY/gB,kBAAoB3N,KAAK6H,SAC5C,CAEAm6B,6BAA6BjO,GAI3B/zB,KAAK0uB,YAAY7gB,qBAAuB7N,KAAK6H,SAC/C,CACAo6B,iCAAiClO,GAI/B/zB,KAAK0uB,YAAYnhB,yBAA2BvN,KAAK6H,SACnD,CACAq6B,iCAAiCnO,GAI/B/zB,KAAK0uB,YAAYjhB,yBAA2BzN,KAAK6H,SACnD,CAEA8nB,eAAejQ,GAEb,MAA0B,QAAnBA,EAAOpT,MAAwC,UAAnBoT,EAAOpT,KAAsB,IAC3DoT,EAAO5F,aACVM,SAAUsC,IACVrC,SAAUqC,IACVkF,SAAS,GACP,CAEFyD,eAAgB3F,EAAO5F,aAAgB8W,cACvCnB,UAAW,KACX1V,eAAgB,GAChB6H,SAAS,EAEb,CAEAoM,gBAAgB7f,EAAwBlD,GAAsB,GAO5DjL,KAAK6wB,gBACL7wB,KAAKC,QAAUgL,EACfjL,KAAK6H,WAAaoD,EAClBjL,KAAK8wB,kBAAoB7lB,EACrBA,IACFjL,KAAK6qB,cAAgB,GACrB7qB,KAAK8qB,gBAAkB,IAEzB9qB,KAAKqO,iBAAiB/D,aAAa6D,GAAQhO,UACxCuK,IAEC,GAAIA,EAAKtD,QAAasD,EAAKtD,OAAUtB,OAAQ,CAC3ChF,QAAQC,IAAI2J,GACZ5J,QAAQwU,MAAM5K,EAAKtD,QACnBpH,KAAK6qB,cAAgBngB,EAAKtD,OACtBsD,EAAKrD,SAAYvB,SACnBhF,QAAQC,IAAI2J,EAAKrD,UACjBrH,KAAK8qB,gBAAkBpgB,EAAKrD,UAE9BrH,KAAKC,SAAU,EACfD,KAAK6H,WAAY,EACjB,MAAMinB,EAAgB3tB,OAAOgP,OAAO9H,GAAiC,CACnER,WAAW,EACX5H,SAAS,IAIX,OAFAD,KAAKqT,cAAcjD,WAAW0e,EAAe9uB,KAAKkP,YAClDlP,KAAK+uB,cACL,CAuBF,GApBIrkB,EAAKrD,SAAYvB,SACnBhF,QAAQC,IAAI2J,EAAKrD,UACjBrH,KAAK8qB,gBAAkBpgB,EAAKrD,UAG9BvG,QAAQC,IAAI2J,EAAKnC,aAGjBvI,KAAKqT,cAAc3C,yBADE,CAACsa,uBAAwBtgB,EAAKsgB,wBACOhrB,KAAKkP,OAE/DlP,KAAKqT,cAAc1E,cAAcjE,EAAKnC,aACtCvI,KAAKqT,cAAcxE,sBAAsBnE,EAAKnC,aAC9CvI,KAAKqT,cAAczE,kBAAkBlE,EAAKuD,kBAK1CjO,KAAKmT,SAAS8mB,aAAa,YAAYvvB,EAAKnC,eAGxC0C,EAAY,CACd,MAAMC,EAAa,GAAGR,EAAKsmB,cAC3BlwB,QAAQC,IAAImK,GACZlL,KAAKisB,sBAAsB/gB,EAAU,MAErClL,KAAK6H,WAAY,EACjB7H,KAAKC,SAAU,EACfD,KAAK8wB,kBAAmB,EACxB9wB,KAAK+uB,cAAY,EAGrBzZ,IACExU,QAAQwU,MAAMA,GACdtV,KAAK6qB,cAAchqB,KAAKyU,EAAMA,OAC9BtV,KAAK6H,WAAY,EACjB7H,KAAKC,SAAU,EACf,MACM6uB,EAAgB3tB,OAAOgP,OADZnQ,KAAKgF,MAAMhF,KAAKkP,OACa,CAC5CrH,UAAW7H,KAAK6H,UAChB5H,QAASD,KAAKC,UAEhBD,KAAKqT,cAAcjD,WAAW0e,EAAe9uB,KAAKkP,OAClDgc,cAAclrB,KAAKmrB,gBACnBnrB,KAAK+uB,cAAY,EAEvB,CAEA9C,sBAAsB/gB,GAEpBlL,KAAKgtB,mBAAoB,EASzBhtB,KAAKmiC,UAAY,CAAC,IAGlBniC,KAAKgsB,UAAY9gB,EACjBpK,QAAQC,IAAImK,GACZlL,KAAK0uB,YAAcluB,cAAYR,KAAK0uB,YAAa,KAAM,GACvD,IAAIC,EAAY,EAEhB3uB,KAAKmrB,eAAiByD,YAAY,KAChC5uB,KAAKqO,iBAAiBpD,WAAW,GAAGC,qBAA8B/K,UAChE,CACE4J,KAAMW,IAEJ,GADA5J,QAAQC,IAAI2J,GACW,UAAnBA,EAAKmkB,QAAyBnkB,EAAKtD,OAAW,CAGhDpH,KAAK6H,WAAY,EACjB7H,KAAKC,SAAU,EACf,MACM6uB,EAAgB3tB,OAAOgP,OADZnQ,KAAKgF,MAAMhF,KAAKkP,OACa,CAC5CrH,UAAW7H,KAAK6H,UAChB5H,QAASD,KAAKC,UAEhBD,KAAKqT,cAAcjD,WAAW0e,EAAe9uB,KAAKkP,OAClDgc,cAAclrB,KAAKmrB,gBACnBnrB,KAAK+uB,cAAY,CAqJnB,GAnJIrkB,EAAKpK,KAAQ+G,UAAavB,SAE5B9F,KAAK8qB,gBAAkBpgB,EAAKpK,KAAQ+G,UAElCqD,EAAKpK,KAAQ8G,QAAWtB,SAE1B9F,KAAK6qB,cAAgBngB,EAAKpK,KAAQ8G,QAGb,SAAnBsD,EAAKmkB,SACP3D,cAAclrB,KAAKmrB,gBAEnBnrB,KAAKqO,iBAAiBpD,WAAWC,GAAY/K,UAAUuK,IAErD5J,QAAQC,IAAI2J,GACZ1K,KAAKgvB,aAAe,CAAC,IAErB,MAAM1uB,EAAOoK,EAAKpK,KAAQ2uB,QAC1BjvB,KAAKkvB,OAAS5uB,EAAK,GAAGgM,KACtBxL,QAAQC,IAAIf,KAAKkvB,QACjB1uB,YAAUF,EAAM2G,IACK,QAAfA,EAAMqF,OAERtM,KAAKoiC,kBAAoB5hC,QAAMyG,EAAMkoB,cAAe,CAACzP,EAAQ7F,KACvD6F,EAAO0P,eAAiBC,OAAOC,SAAS5P,EAAO6P,qBACjDvvB,KAAKgvB,aAAatP,EAAO6P,mBAAqB,CAAC1V,EAA4B,cAAzB6F,EAAO0P,cAAgC,MAAQ,SAEnG1P,EAAOjM,MAAW,GAAGiM,EAAOkH,eAC5BlH,EAAOpf,KAAU,GAAGof,EAAOnb,OAC3B,IAAI4V,EAASuF,EAAOvF,OAEpBuF,EAAOzF,UAAe,GAAGE,KAAUuF,EAAOnb,OAG1C,IAAIirB,EAAarV,EAAO5C,MAAM,KAE9B4C,SAASqV,EAAWA,EAAW1pB,OAAS,GAExC4Z,EAAOpf,KAAU,GAAG6Z,KAAUuF,EAAOnb,OAIrCmb,EAAO5F,aAAkB4F,EAAO5F,cAAoB9Z,KAAK2vB,eAAejQ,GAEjEA,IAET1f,KAAKqiC,gBAAkB,IAAIriC,KAAKgvB,cAC5BhvB,KAAKoiC,oBACPpiC,KAAKmiC,UAAYl7B,EAAMuY,aA0BR,mBAAfvY,EAAMqF,OAERtM,KAAKsiC,6BAA+B9hC,QAAMyG,EAAMkoB,cAAe,CAACzP,EAAQ7F,KAClE6F,EAAO0P,eAAiBC,OAAOC,SAAS5P,EAAO6P,qBACjDvvB,KAAKgvB,aAAatP,EAAO6P,mBAAqB,CAAC1V,EAA4B,cAAzB6F,EAAO0P,cAAgC,MAAQ,SAEnG1P,EAAOjM,MAAW,GAAGiM,EAAOkH,eAC5BlH,EAAOpf,KAAU,GAAGof,EAAOnb,OAC3B,IAAI4V,EAASuF,EAAOvF,OAEpBuF,EAAOzF,UAAe,GAAGE,KAAUuF,EAAOnb,OAG1C,IAAIirB,EAAarV,EAAO5C,MAAM,KAE9B4C,SAASqV,EAAWA,EAAW1pB,OAAS,GAExC4Z,EAAOpf,KAAU,GAAG6Z,KAAUuF,EAAOnb,OAIrCmb,EAAO5F,aAAkB4F,EAAO5F,cAAoB9Z,KAAK2vB,eAAejQ,GAEjEA,IAET1f,KAAKuiC,2BAA6B,IAAIviC,KAAKgvB,cACvChvB,KAAKsiC,+BACPtiC,KAAKwiC,qBAAuBv7B,EAAMuY,aAGnB,YAAfvY,EAAMqF,OAERtM,KAAK4vB,sBAAwBpvB,QAAMyG,EAAMkoB,cAAe,CAACzP,EAAQ7F,KAC3D6F,EAAO0P,eAAiBC,OAAOC,SAAS5P,EAAO6P,qBACjDvvB,KAAKgvB,aAAatP,EAAO6P,mBAAqB,CAAC1V,EAA4B,cAAzB6F,EAAO0P,cAAgC,MAAQ,SAEnG1P,EAAOjM,MAAW,GAAGiM,EAAOkH,eAC5BlH,EAAOpf,KAAU,GAAGof,EAAOnb,OAC3B,IAAI4V,EAASuF,EAAOvF,OAEpBuF,EAAOzF,UAAe,GAAGE,KAAUuF,EAAOnb,OAG1C,IAAIirB,EAAarV,EAAO5C,MAAM,KAE9B4C,SAASqV,EAAWA,EAAW1pB,OAAS,GAExC4Z,EAAOpf,KAAU,GAAG6Z,KAAUuF,EAAOnb,OAIrCmb,EAAO5F,aAAkB4F,EAAO5F,cAAoB9Z,KAAK2vB,eAAejQ,GAEjEA,IAET1f,KAAK6vB,oBAAsB,IAAI7vB,KAAKgvB,cAChChvB,KAAK4vB,wBACP5vB,KAAKynB,cAAgBxgB,EAAMuY,eAIjCxf,KAAK6H,WAAY,EAAM7H,KAAKC,SAAU,EACtC,MAAMywB,EAAW1wB,KAAKgF,MAAMhF,KAAKkP,OACjCpO,QAAQC,IAAI2vB,GACZ,MAAMC,EAA+BxvB,OAAOgP,OAAOugB,EAAU,CAC3D7oB,UAAW7H,KAAK6H,UAChB5H,QAASD,KAAKC,UAEhBD,KAAKqT,cAAcjD,WAAWugB,EAA8B3wB,KAAKkP,OAEjElP,KAAK+uB,cAAY,IAGE,aAAnBrkB,EAAKmkB,OAA0B,CAEjC7uB,KAAK6H,WAAY,EACjB7H,KAAKC,SAAU,EACf,MAAMywB,EAAW1wB,KAAKgF,MAAMhF,KAAKkP,OACjCpO,QAAQC,IAAI2vB,GACZ,MAAMC,EAA+BxvB,OAAOgP,OAAOugB,EAAU,CAC3D7oB,UAAW7H,KAAK6H,UAChB5H,QAASD,KAAKC,UAEhBD,KAAKqT,cAAcjD,WAAWugB,EAA8B3wB,KAAKkP,OACjEgc,cAAclrB,KAAKmrB,gBAEnBnrB,KAAK+uB,cAAY,MAKjB/uB,KAAKgtB,mBAAoB,EACzBlsB,QAAQC,IAAI,mBAAmB2J,EAAKmkB,YAAeF,KACnDA,GAAa,GAGjBrZ,MAAOA,IACLxU,QAAQwU,MAAMA,GACdtV,KAAK+uB,eACL7D,cAAclrB,KAAKmrB,gBACnBnrB,KAAKC,SAAU,IAElB,EApMgB,IAuMvB,CAEAqxB,UACEtxB,KAAKkS,aAAaH,QAClB/R,KAAK6qB,cAAgB,GACrB7qB,KAAK8qB,gBAAkB,GAUvB9qB,KAAKuhC,WAAWpsB,WAAW,CACzB5G,aAAc,GACd3C,cAT4B,GAU5B2B,yBATuC,GAUvCE,yBAT8C,KAU9CE,kBATgC,EAUhC80B,uBAT6B,GAU7B50B,qBAT2B,IAU1B,CAAC2jB,WAAW,GACjB,CAEAJ,WACEtwB,QAAQC,IAAIf,KAAKmrB,gBACjBD,cAAclrB,KAAKmrB,gBACnBnrB,KAAKqxB,aAAate,OAElB/S,KAAK0uB,YAAY6L,eAAgB,EAAOv6B,KAAK0uB,YAAY8L,eAAgB,EAGzE,MAAMpU,EAAkB,IADJpmB,KAAKgF,MAAMhF,KAAKkP,OAGlCjP,SAAS,EACT4H,WAAW,EACXC,oBAAgBC,GAElB/H,KAAKqT,cAAcjD,WAAWgW,EAAiBpmB,KAAKkP,OACpDlP,KAAK8qB,gBAAkB,GACvB9qB,KAAKC,SAAU,EACfD,KAAK8wB,kBAAmB,EACxB9wB,KAAK+uB,cACP,CAEAmC,kBACElxB,KAAK0uB,YAAY6L,cAAgBv6B,KAAK6H,SACxC,CACAqzB,mBACEl7B,KAAK0uB,YAAY8L,cAAgBx6B,KAAK6H,SACxC,CAEAspB,oBACEnxB,KAAKsiC,6BAA+B9hC,QAAMR,KAAKsiC,6BAA+B7hC,IAC5EA,EAAEy4B,QAAU,CAAC,MAAO,SAASx4B,SAASD,EAAE6L,MAAQ,CAC5C8N,SAAUsC,IACVrC,SAAUqC,IACVkF,SAAS,GAEX,CACEyD,eAAgB,GAChBoK,UAAW,KACX1V,eAAgB,GAChB6H,SAAS,GAENnhB,IAETT,KAAK0uB,YAAY6L,cAAgBv6B,KAAK6H,SACxC,CAEAszB,qBACEn7B,KAAK4vB,sBAAwBpvB,QAAMR,KAAK4vB,sBAAwBnvB,IAC9DA,EAAEqZ,aAA0B,QAAXrZ,EAAE6L,KAAgB,CAC/B8N,SAAUsC,IACVrC,SAAUqC,IACVkF,SAAS,GAEX,CACEyD,eAAgB,GAChBoK,UAAW,KACX1V,eAAgB,GAChB6H,SAAS,GAENnhB,IAETT,KAAK0uB,YAAY8L,cAAgBx6B,KAAK6H,SACxC,CAEAopB,qBAAqBxP,GAGnB,GAFA3gB,QAAQC,IAAI0gB,GACMjhB,SAAOR,KAAKgF,MAAMC,MAAMjF,KAAKkP,MAAM,GAAI,CAACrH,WAAW,IAEnE7H,KAAK0tB,WAAY,EACjB1tB,KAAKyU,KAAKzU,KAAK+sB,mBAEf,OAAQtL,GACN,IAAK,iBACHzhB,KAAKs7B,oBACL,MACF,IAAK,UACHt7B,KAAKq7B,oBAIb,CACAC,oBACE,MAAMz0B,EAAa,SAEbsH,EAASnO,KAAKmO,OAEpBrN,QAAQC,IAAIf,KAAKsiC,8BACjBxhC,QAAQC,IAAIf,KAAK4vB,uBAEjB,IAAIjW,EAASD,EAAmB1Z,KAAKsiC,6BAA8Bz7B,GAC/D00B,EAAU7hB,EAAmB1Z,KAAK4vB,sBAAuB/oB,GAM7D7G,KAAKqT,cAAcxD,wBAJC,CAClB,CAAC5I,MAAO,iBAAkBC,QAASyS,GACnC,CAAC1S,MAAO,UAAWC,QAASq0B,IAE0Bv7B,KAAKkP,OAG7D,MAAMzG,EAAS0F,EAAO1F,OAChB4G,EAAY5G,EAAOzI,KAAKkP,OAG9BG,EAAUrI,YAAY,GAAGE,QAAUyS,EAEnClR,EAAOzI,KAAKkP,OAASG,EACrBlB,EAAO1F,OAASA,EAEhB,MAAM9B,EAAe3G,KAAKkP,MAAQ,EAClCf,EAAO3F,gBAAkB,CAAC7B,EAAcA,GACxC3G,KAAKqT,cAAc3E,UAAUP,GAE7B,IAAIrG,GAAkBtH,YAAUmZ,GAChC3Z,KAAKqT,cAAc5C,sBAAsB3I,EAAgB9H,KAAKkP,OAC9DlP,KAAKguB,gBAAgB7f,GAAQ,GAC7BnO,KAAK0uB,YAAY6L,eAAgB,EAEjCv6B,KAAK0tB,WAAY,CACnB,CAEA2N,oBACE,MAAMx0B,EAAa,SAEbsH,EAASnO,KAAKmO,OAEpB,IAAIwL,EAASD,EAAmB1Z,KAAKsiC,6BAA8Bz7B,GAC/D00B,EAAU7hB,EAAmB1Z,KAAK4vB,sBAAuB/oB,GAM7D7G,KAAKqT,cAAcxD,wBAJC,CAClB,CAAC5I,MAAO,iBAAkBC,QAASyS,GACnC,CAAC1S,MAAO,UAAWC,QAASq0B,IAE0Bv7B,KAAKkP,OAE7D,MAAMzG,EAAS0F,EAAO1F,OAChB4G,EAAY5G,EAAOzI,KAAKkP,OAC9BpO,QAAQC,IAAIf,KAAK4vB,uBACjB9uB,QAAQC,IAAIsO,GAEZA,EAAUrI,YAAY,GAAGE,QAAUq0B,EAEnC9yB,EAAOzI,KAAKkP,OAASG,EACrBlB,EAAO1F,OAASA,EAEhB,MAAM9B,EAAe3G,KAAKkP,MAAQ,EAClCf,EAAO3F,gBAAkB,CAAC7B,EAAcA,GACxC3G,KAAKqT,cAAc3E,UAAUP,GAE7B,IAAIrG,GAAkBtH,YAAU+6B,GAChCv7B,KAAKqT,cAAc5C,sBAAsB3I,EAAgB9H,KAAKkP,OAC9DlP,KAAKguB,gBAAgB7f,GAAQ,GAC7BnO,KAAK0uB,YAAY8L,eAAgB,EAEjCx6B,KAAK0tB,WAAY,CACnB,CAEAH,eACE,IACIC,EADAC,EAAWjtB,UAAQR,KAAKkP,MAAQ,EAAGlP,KAAKyI,OAAO3C,QAEnDhF,QAAQC,IAAI0sB,GACZjtB,YAAUitB,EAAU5T,IAClB2T,EAAWxtB,KAAKgF,MAAM6U,GACtB,MAAMuM,EAAkB,IACnBoH,EACHvtB,SAAS,EACT4H,WAAW,GAEb7H,KAAKqT,cAAcjD,WAAWgW,EAAiBvM,EAAC,GAGlD7Z,KAAK0tB,UAAY1tB,KAAKixB,qBAAqB,kBAAoBjxB,KAAKitB,OACtE,CAEAvB,WACE1rB,KAAK4sB,uBACL5sB,KAAK6sB,UAAU9Z,KAAK/S,KAAKkP,MAC3B,CAEA0d,uBAEE,MAAM6U,EAA0BzhC,KAAKshC,qBAErBthC,KAAKuhC,WAAWnhC,MAAMmO,cACR,IAAbvO,KAAKkP,QACpBlP,KAAKqT,cAAcxC,gBAAgB4wB,GACnCzhC,KAAKuhC,WAAWxjB,SAASxP,aAAa8e,SAASoU,GAEnD,CAEA1S,eACE/uB,KAAKuhC,WAAWxjB,SAASxQ,yBAA4BmV,OAAO,CAAC8O,WAAW,IACxExxB,KAAKuhC,WAAWxjB,SAAStQ,yBAA4BiV,OAAO,CAAC8O,WAAW,IACxExxB,KAAKuhC,WAAWxjB,SAASpQ,kBAAqB+U,OAAO,CAAC8O,WAAW,IACjExxB,KAAKuhC,WAAWxjB,SAASlQ,qBAAwB6U,OAAO,CAAC8O,WAAW,IAEpExxB,KAAKyqB,2BAA6BtpB,OAAOgP,OAAO,GAAInQ,KAAKyqB,2BAA4B,CAACziB,UAAU,GAClG,CAEA6oB,gBACE7wB,KAAKuhC,WAAWxjB,SAASxQ,yBAA4BwV,QAAQ,CAACyO,WAAW,IACzExxB,KAAKuhC,WAAWxjB,SAAStQ,yBAA4BsV,QAAQ,CAACyO,WAAW,IACzExxB,KAAKuhC,WAAWxjB,SAASpQ,kBAAqBoV,QAAQ,CAACyO,WAAW,IAClExxB,KAAKuhC,WAAWxjB,SAASlQ,qBAAwBkV,QAAQ,CAACyO,WAAW,IAErExxB,KAAKyqB,2BAA6BtpB,OAAOgP,OAAO,GAAInQ,KAAKyqB,2BAA4B,CAACziB,UAAU,GAClG,CAEAkqB,iBACE9Y,EAA2BpZ,KAAKirB,uBAAuBf,uBAAwBlqB,KAAKD,KAAM,OAC5F,CAEAqyB,qBAEEhZ,EAA2BpZ,KAAKirB,uBAAuBoW,iBAAkBrhC,KAAKD,KAAM,MACtF,EAltCWohC,SAAgC,oCAAhCA,GAAgCngC,uIAAhCmgC,EAAgC,sBAAhCA,EAAgCzhC,ylaDnD7CC,kBAA+BA,mCAAY6G,aAAW,GACpD7G,iBAAiC,UACJA,SAAaA,QACxCA,gBACFA,QAEAA,iBAAyB,UACqBA,sCAC1CA,iBACFA,QACAA,iBAA6E,cAA7EA,CAA6E,UAGvEA,2BAEEA,oBACsH,aADtHA,CACsH,cAIxHA,QACAA,mBACFA,UAEFA,8BAA2C,WAEvCA,2BAEEA,oBAC8uC,cAGhvCA,QACAA,kBACFA,UAEFA,8BAGEA,2BAEEA,oBACid,cAGndA,QACAA,uBACFA,QACAA,8BAEEA,2BAEEA,oBACuR,cAGzRA,QACAA,mBACFA,YAKJA,oCAyFAA,2BAAqB,YACSA,kCAAqBA,QACjDA,mBAEFA,QAGAA,mBAAsD,YAAtDA,CAAsD,eAEzBA,2BAAcA,UAGzCA,mBAAsB,YAAtBA,CAAsB,oBAIhBA,yCAAiB6G,mBAAsB,GACA7G,QACzCA,4BAGFA,YAKJA,mBAA2E,YAA3EA,CAA2E,eAE9CA,wCAA2BA,UAEtDA,mBACEA,qBAGAA,4BAGFA,QAEAA,mBAAgC,eACLA,wCAA2BA,UAEtDA,mBACEA,qBAGAA,4BAGFA,QACAA,mBAAgC,eACLA,+BAAkBA,UAE7CA,mBACEA,qBAGAA,4BAGFA,QACAA,mBAAqC,eACVA,mCAAsBA,UAEjDA,mBACEA,qBAGAA,4BAGFA,UAGFA,eAEAA,mBAAqD,YAArDA,CAAqD,gBAKzCA,gCAAS6G,WAAS,GACxB7G,2BAEEA,oBAA+F,cAGjGA,UAEFA,mBACAA,2BAGAA,6CAoCFA,YAKJA,2BAEEA,2BA+BAA,2BA0BFA,QAEAA,0BAQAA,0BAaAA,0BA+DAA,6CAgBAA,sEA/bMA,gCAEyBA,0BAuBJA,2CAabA,qCAyBGA,oCAsGNA,6FAIDA,uDACMA,6CAgBFA,8DAYAA,8DAWAA,uDAWAA,0DAY4DA,qCAU7DA,iCAAe,cA8CKA,8CA+BCA,gDA4B5BA,mGAQAA,iCAcAA,umEC9TOwhC,CAAgC,sECnD7CxhC,iBAAwF,UAAxFA,CAAwF,YAEtDA,sBAAUA,sDA2F9BA,oBAA0D,OAA1DA,CAA0D,OAA1DA,CAA0D,UAErBA,qEAASA,gBAAgB,GACjCA,yBAAaA,UACtCA,cACEA,SACFA,UAEFA,cAAI,OAAJA,CAAI,UAC+BA,qEAASA,gBAAgB,GACjCA,kBAAKA,UAC9BA,eACEA,UACFA,WAAK,0BARHA,kDAOAA,2EAkCIA,kBACyE,YACzCA,sBAAUA,kCAG1CA,kBACEA,0BAEEA,mBAEFA,kCAGFA,kBACEA,0BAEEA,mBAEFA,yFA6BQA,eACEA,SAGFA,4CAHEA,wHASVA,gBACEA,kBACFA,mCAEEA,gBAEEA,SAEFA,+BAFEA,iJAIAA,gBACIA,SACJA,+BADIA,+FAPNA,0BAKQA,+EAJLA,wGAAqG,yCAelHA,gBACCA,SACDA,+BADCA,gFAEeA,gBACbA,SACHA,+BADGA,gHAEaA,gBACdA,SACFA,+BADEA,4IAlDMA,kBAAwF,aAAxFA,CAAwF,UAAxFA,CAAwF,OAAxFA,CAAwF,WAMhFA,6BACFA,YAGFA,cAAI,QACGA,uBAAUA,QACfA,cACEA,0BAKFA,UAEFA,eAAI,SACGA,uBAASA,QACdA,eACNA,2BAGQA,8CAYFA,UAEFA,eAAI,SACGA,qBAAOA,QACZA,eACdA,4BAGgBA,4BAGAA,4BAGFA,iDAvCqBA,8CAUpBA,gEAAiD,cAoBzDA,oDAGgBA,oDAGAA,6EAQfA,kBAA2F,aAA3FA,CAA2F,UAA3FA,CAA2F,OAA3FA,CAA2F,WAMnFA,6BACFA,YAGFA,cAAI,QACGA,sBAASA,QACdA,cACEA,UACFA,UAEFA,eAAI,SACGA,uBAASA,QACdA,eAAI,WAElBA,UACAA,YAGYA,eAAI,SACGA,oBAAMA,QACXA,eAAI,WAEhBA,UACFA,uCAhBgBA,qEAOhBA,gFAQEA,uFAOMA,kBAA4F,aAA5FA,CAA4F,UAA5FA,CAA4F,OAA5FA,CAA4F,WAMpFA,6BACFA,YAGFA,cAAI,QACGA,qBAAQA,QACbA,cACEA,UACFA,UAEFA,eAAI,SACGA,4BAAcA,QACnBA,eAAI,WAElBA,UACAA,YAGYA,eAAI,SACGA,oCAAsBA,QAC3BA,eAAI,WAEhBA,UACFA,uCAhBgBA,gEAOhBA,+DAQEA,2FAQMA,kBAAwF,aAAxFA,CAAwF,UAAxFA,CAAwF,OAAxFA,CAAwF,WAMhFA,6BACFA,YAGFA,cAAI,QACGA,+BAAkBA,QACvBA,cACEA,UACFA,UAEFA,eAAI,SACGA,yBAAWA,QAChBA,eACEA,UACFA,UAEFA,eAAI,SACGA,wBAAUA,QACfA,eAAI,WAElBA,UACAA,uCAdgBA,0DAMAA,6DAOhBA,wFAwDAA,gBACCA,SACDA,+BADCA,iFAEeA,gBACbA,SACHA,+BADGA,kHAEaA,gBACdA,SACFA,+BADEA,+IAOcA,eACEA,SAGFA,4CAHEA,2HA7BVA,kBACsD,aADtDA,CACsD,UADtDA,CACsD,OADtDA,CACsD,WAM9CA,6BACFA,YAGFA,cAAI,QACGA,oBAAOA,QACZA,cACdA,4BAGgBA,4BAGAA,4BAGFA,UAEFA,eAAI,SACGA,wBAAUA,QACfA,eACEA,0BAKFA,qCAnBPA,sDAGgBA,qDAGAA,mDAQYA,yEAU3BA,kBAA0F,aAA1FA,CAA0F,UAA1FA,CAA0F,OAA1FA,CAA0F,WAMlFA,6BACFA,YAGFA,cAAI,QACGA,2BAAcA,QACnBA,cAAI,WAEJA,UACAA,YAGFA,eAAI,SACGA,yCAA2BA,QAChCA,eAAI,WAEJA,UACAA,YAGFA,eAAI,SACGA,yCAA2BA,QAChCA,eAAI,WAEJA,UACAA,YAGFA,eAAI,SACGA,gCAAkBA,QACvBA,eAAI,WAEJA,UACAA,YAGFA,eAAI,SACGA,oCAAsBA,QAC3BA,eAAI,WAEJA,UACAA,uCAjCAA,mEAQAA,6EAQAA,6EAQAA,sEAQAA,sGAxRNA,0BAyDAA,0BAmCAA,0BAoCAA,0BAoEAA,0BAsCAA,0DA1OMA,oCAyDAA,gDAmCAA,iDAoCAA,6CAoEAA,mEAsCAA,yFArRhBA,SACEA,kBAAyC,WAAzCA,CAAyC,WAAzCA,CAAyC,WAIFA,sEAASA,kCAA6B,GACzEA,SACAA,QAEEA,yBAKAA,yBAQAA,yBAQFA,QAEAA,qBAEAA,sBACQA,sEAASA,6CAAwC,GAEzDA,UAEFA,mBAA0B,aAEtBA,+BA0SFA,YAGNA,yDArVwBA,+BAKlBA,6CAGQA,iEAKAA,iDAQAA,iEAcAA,yGA0TZA,sBAGEA,eACFA,kDAHQA,uDAA6C,kDA2BrDA,sBAGEA,eACFA,mDAHQA,uDAA6C,kDAsCrDA,sBAGEA,eACFA,mDAHQA,uDAA6C,kDAwCrDA,sBAGEA,eACFA,mDAHQA,uDAA6C,kDAuCrDA,sBAGEA,eACFA,oDAHQA,uDAA6C,kDAsCrDA,sBAGEA,eACFA,oDAHQA,uDAA6C,uDAgEnDA,yBAEEA,2BACFA,0DAKJA,wBAA8C,gBACMA,0DAASA,uBAAc,GAAGA,wBAAWA,SAAS,mDAGhGA,2BAAyE,YAAzEA,CAAyE,gBAWZA,0DAASA,2BAAkB,GAClFA,2BAEEA,oBAEFA,UAGFA,8BAKAA,mBAA2B,WACWA,0DAASA,4BAAmB,GAAEA,yBAAaA,aAAI,mDAcvFA,8BACQA,0DAASA,2BAAkB,GACjCA,2BAEEA,oBAEFA,SAAM,0BANiDA,uFAvC3DA,0BA6BAA,+EA7BMA,kCAA4B,wDAvmBtCA,kBACEA,oDAuVFA,QAIAA,kBAAgF,SAG5EA,4BAMAA,4BAAsC,eAEqBA,oBACzDA,QACAA,sBAC0DA,sBAC1DA,QACAA,sBACsDA,kBACtDA,UAEFA,6BAAyC,gBACjBA,0DAASA,mCAA6B,GAAEA,oCAAuBA,UAEvFA,6BAA0C,gBAClBA,0DAASA,oCAA8B,GAAEA,oCAAuBA,UAExFA,6BAAsC,gBACdA,0DAASA,gCAA0B,GAAEA,oCAAuBA,UAIpFA,6BAMAA,6BAAyC,gBAEeA,yCACtDA,QACAA,sBAC0DA,sBAC1DA,QACAA,sBACsDA,kBACtDA,UAEFA,6BAAyC,gBACjBA,0DAASA,0CAAsC,WAAU,GAAEA,qCAEjFA,QACAA,sBAAsBA,0DAASA,0CAAsC,qBAAoB,GAAEA,+CAE3FA,UAEFA,6BAA6C,gBACrBA,0DAASA,oCAA8B,GAAEA,oCAAuBA,QACtFA,sBAAsBA,0DAASA,mCAA+B,qBAAoB,GAAEA,+CAEpFA,UAEFA,6BAAyC,gBACjBA,0DAASA,gCAA0B,GAAEA,oCAAuBA,QAClFA,sBAAsBA,0DAASA,+BAA2B,qBAAoB,GAAEA,+CAEhFA,UAIFA,6BAKAA,6BAA0C,gBAEcA,yCACtDA,QACAA,sBACyDA,qBACzDA,QACAA,sBACsDA,kBACtDA,UAEFA,6BAA0C,gBAClBA,0DAASA,0CAAsC,WAAU,GAAEA,qCAEjFA,QACAA,sBAAsBA,0DAASA,0CAAsC,oBAAmB,GAAEA,8CAG1FA,UAEFA,6BAA6C,gBACrBA,0DAASA,kCAA8B,WAAU,GAAEA,qCACzEA,QACAA,sBAAsBA,0DAASA,kCAA8B,oBAAmB,GAAEA,8CAElFA,UAEFA,6BAA0C,gBAClBA,0DAASA,+BAA2B,WAAU,GAAEA,qCACtEA,QACAA,sBAAsBA,0DAASA,+BAA2B,oBAAmB,GAAEA,8CAE/EA,UAIFA,6BAMAA,6BAAsC,gBAEkBA,yCACtDA,QACAA,sBACyDA,qBACzDA,QACAA,sBAC0DA,sBAC1DA,UAEFA,6BAAsC,gBACdA,0DAASA,0CAAsC,UAAW,iBAAgB,GAC9FA,sCACFA,QACAA,sBACQA,0DAASA,0CAAsC,UAAW,8BAA6B,GAC7FA,mDACFA,UAEFA,6BAAyC,gBACjBA,0DAASA,mCAA6B,GAAEA,oCAAuBA,QACrFA,sBAAsBA,0DAASA,kCAA8B,UAAW,8BAA6B,GAAEA,mDAEvGA,UAEFA,8BAA0C,iBAClBA,0DAASA,oCAA8B,GAAEA,qCAAuBA,QACtFA,uBAAsBA,0DAASA,mCAA+B,UAAW,8BAA6B,GAAEA,mDAExGA,UAIFA,8BAMAA,8BAAyC,iBAEeA,0CACtDA,QACAA,uBACyDA,sBACzDA,QACAA,uBAC0DA,uBAC1DA,QACAA,uBACsDA,mBACtDA,UAGFA,8BAAyC,iBACjBA,0DAASA,0CAAsC,oBAAmB,GAAEA,uCAAyBA,QACnHA,uBAAsBA,0DAASA,0CAAsC,oBAAmB,GAAEA,uCAAyBA,UAErHA,8BAA4C,iBACpBA,0DAASA,kCAA8B,oBAAmB,GAAEA,uCAAyBA,QAC3GA,uBAAsBA,0DAASA,kCAA8B,oBAAmB,GAAEA,uCAAyBA,UAE7GA,8BAA6C,iBACrBA,0DAASA,mCAA+B,oBAAmB,GAAEA,uCAAyBA,QAC5GA,uBAAsBA,0DAASA,mCAA+B,oBAAmB,GAAEA,uCAAyBA,UAE9GA,8BAAyC,iBACjBA,0DAASA,+BAA2B,oBAAmB,GAAEA,uCAAyBA,QACxGA,uBAAsBA,0DAASA,+BAA2B,oBAAmB,GAAEA,uCAAyBA,UAI1GA,8BAMAA,8BAAwC,iBAEgBA,0CACtDA,QACAA,uBACyDA,sBACzDA,QACAA,uBAC0DA,uBAC1DA,QACAA,uBACsDA,mBACtDA,QACAA,uBACsDA,yCACtDA,UAGFA,8BAAwC,iBAChBA,0DAASA,0CAAsC,oBAAqB,kBAAiB,GAAEA,iDAAmCA,QAChJA,uBAAsBA,0DAASA,0CAAsC,iBAAkB,kBAAiB,GAAEA,8CAAgCA,QAC1IA,uBAAsBA,0DAASA,0CAAsC,oBAAqB,WAAU,GAAEA,mDAAqCA,QAC3IA,uBAAsBA,0DAASA,0CAAsC,iBAAkB,WAAU,GAAEA,gDAAkCA,UAEvIA,8BAA2C,iBACnBA,0DAASA,kCAA8B,oBAAqB,kBAAiB,GAAEA,iDAAmCA,QACxIA,uBAAsBA,0DAASA,kCAA8B,iBAAkB,kBAAiB,GAAEA,8CAAgCA,QAClIA,uBAAsBA,0DAASA,kCAA8B,oBAAqB,WAAU,GAAEA,mDAAqCA,QACnIA,uBAAsBA,0DAASA,kCAA8B,iBAAkB,WAAU,GAAEA,gDAAkCA,UAE/HA,8BAA4C,iBACpBA,0DAASA,mCAA+B,oBAAqB,kBAAiB,GAAEA,iDAAmCA,QACzIA,uBAAsBA,0DAASA,mCAA+B,iBAAkB,kBAAiB,GAAEA,8CAAgCA,QACnIA,uBAAsBA,0DAASA,mCAA+B,oBAAqB,WAAU,GAAEA,mDAAqCA,QACpIA,uBAAsBA,0DAASA,mCAA+B,iBAAkB,WAAU,GAAEA,gDAAkCA,UAEhIA,8BAAwC,iBAChBA,0DAASA,+BAA2B,oBAAqB,kBAAiB,GAAEA,iDAAmCA,QACrIA,uBAAsBA,0DAASA,+BAA2B,iBAAkB,kBAAiB,GAAEA,8CAAgCA,QAC/HA,uBAAsBA,0DAASA,+BAA2B,oBAAqB,WAAU,GAAEA,mDAAqCA,QAChIA,uBAAsBA,0DAASA,+BAA2B,iBAAkB,WAAU,GAAEA,gDAAkCA,UAE5HA,8BAA8D,iBACtCA,0DAASA,kCAA8B,iBAAkB,oBAAqB,kBAAiB,GAAEA,kEAAoDA,QAC3KA,uBAAsBA,0DAASA,kCAA8B,UAAW,oBAAqB,kBAAiB,GAAEA,oEAAsDA,UAGxKA,uBAGEA,4BAGEA,qBAAiF,eAGnFA,UAEFA,8CAMFA,QAGAA,4BAGAA,8CAkDFA,wUAvpBkCA,gDA8VrBA,uEAOeA,sCAAyC,kDAGzCA,sCAA0C,mDAG1CA,sCAAsC,+CAerDA,2EAOeA,sCAAyC,+CAGzCA,sCAA6C,mDAG7CA,sCAAyC,+CA0BxDA,4EAMeA,sCAA0C,+CAG1CA,sCAA6C,kDAG7CA,sCAA0C,+CA6BzDA,wEAOeA,sCAAsC,+CAGtCA,sCAAyC,kDAGzCA,sCAA0C,mDA2BzDA,8FAOeA,sCAAyC,+CAGzCA,sCAA4C,kDAG5CA,sCAA6C,mDAG7CA,uCAAyC,+CAuBxDA,0EAOeA,uCAAwC,+CAGxCA,uCAA2C,kDAG3CA,uCAA4C,mDAG5CA,uCAAwC,+CAGxCA,uCAA8D,+CAmC9EA,iCAmBHA,yCAAuB,wDAqEtCA,qBAAyEA,oGAAwCA,eAAEA,kDAMnHA,qCAIEA,8EAAaA,oBAAW,EAAxBA,CAAyB,2DACTA,uBAAc,EAD9BA,CAAyB,6DAGRA,2BAAkB,GAGeA,mEARlDA,gCAA8B,UAA9BA,CAA8B,wBAA9BA,CAA8B,0CAA9BA,CAA8B,6FAWhCA,2BAIEA,8EAAaA,oBAAW,EAAxBA,CAAyB,2DACTA,uBAAc,EAD9BA,CAAyB,6DAGRA,2BAAkB,GAGiBA,mEARpDA,gCAA8B,UAA9BA,CAA8B,wBAA9BA,CAA8B,4CAA9BA,CAA8B,+FAWhCA,4BAIEA,8EAAaA,oBAAW,EAAxBA,CAAyB,2DACTA,uBAAc,EAD9BA,CAAyB,6DAGRA,2BAAkB,GAGkBA,mEARrDA,gCAA8B,UAA9BA,CAA8B,wBAA9BA,CAA8B,6CAA9BA,CAA8B,gGAShCA,wBAIEA,8EAAaA,oBAAW,EAAxBA,CAAyB,2DACTA,uBAAc,EAD9BA,CAAyB,6DAGRA,2BAAkB,GAGcA,mEARjDA,gCAA8B,UAA9BA,CAA8B,wBAA9BA,CAA8B,yCAA9BA,CAA8B,4FAShCA,8CAIEA,8EAAaA,oBAAW,EAAxBA,CAAyB,2DACTA,uBAAc,EAD9BA,CAAyB,6DAGRA,2BAAkB,GAGiBA,mEARpDA,gCAA8B,UAA9BA,CAA8B,wBAA9BA,CAA8B,4CAA9BA,CAA8B,+FAShCA,6CAIEA,8EAAaA,oBAAW,EAAxBA,CAAyB,2DACTA,uBAAc,EAD9BA,CAAyB,6DAGRA,2BAAkB,GAGgBA,mEARnDA,gCAA8B,UAA9BA,CAA8B,wBAA9BA,CAA8B,2CAA9BA,CAA8B,+EA9DlCA,SACEA,4CAaAA,kCAaAA,mCAWAA,+BAWAA,qDAWAA,oDAYFA,kCAjEKA,6CAaAA,gDAaAA,iDAWAA,6CAWAA,mEAWAA,yFA12BXA,kCAAkE,kBACxCA,4FACtBA,iBAAsD,eACFA,mGAAwCA,eAAEA,QAC5FA,iBAAiBA,wBAAYA,QAE7BA,kBAAkC,eAS9BA,0BAEEA,oBACgK,cAGlKA,UAGFA,0BAA8C,WAA9CA,CAA8C,YAA9CA,CAA8C,eAGRA,kCAAqBA,QACrDA,mBACEA,qBACAA,sBAEEA,2BAEEA,oBACgK,cAGlKA,gBAKRA,0BAA0B,YAA1BA,CAA0B,eAEgBA,2CAA8BA,QACpEA,mBACEA,qBACAA,sBAEEA,2BAEEA,oBACgK,cAGlKA,gBAMRA,0BAAwD,gBAE7BA,oCACzBA,gBAORA,mBAAkB,YAAlBA,CAAkB,WAAlBA,CAAkB,eAAlBA,CAAkB,WAAlBA,CAAkB,cAORA,mBACFA,cAIJA,mBAA0B,aAEtBA,gCAkBFA,YAIJA,mBAA0C,WAA1CA,CAA0C,eAA1CA,CAA0C,WAA1CA,CAA0C,cAMlCA,oBACFA,cAIJA,mBAA0B,aAEtBA,kCA6pBFA,gBAURA,+BAAoB,YAApBA,CAAoB,aAGdA,6BACFA,UAGFA,aACEA,qDAyEFA,QAMFA,SAAqB,yBAt3BGA,yCAOhBA,yCAAwB,wDAqB8CA,uCAC9BA,mDAiBoCA,0CACpCA,uDAeJA,oDAWlBA,+BAkCAA,+BAurB+BA,yCAIzCA,uCACoBA,yEAmGxBA,eACEA,2BAEEA,oBAEFA,kCAEFA,2BAEEA,oBAEFA,mCAdJA,mBAA8D,cAClCA,SAAmCA,QAC7DA,sBACEA,0BAOAA,0BAKFA,4CAd0BA,sDAElBA,0BAOAA,oDAWRA,cAAwDA,SAAaA,kCAAbA,6CAD1DA,cACEA,wBACFA,+BAD0BA,kEAxB9BA,yBAEEA,kCAoBAA,kCAKFA,gCAQQA,eACEA,2BAEEA,oBAEFA,kCAEFA,2BAEEA,oBAEFA,mCAdJA,mBAA8D,cACjCA,SAAwCA,QACnEA,sBACEA,0BAOAA,0BAKFA,4CAd2BA,2DAEnBA,0BAOAA,oDAWRA,cAA0DA,SAAaA,kCAAbA,6CAD5DA,cACEA,wBACFA,+BAD0BA,uEAxB9BA,yBAEEA,kCAoBAA,kCAKFA,+BAzBkDA,gFAxCtDA,mBAA0B,YACuBA,sCAA0BA,QACzEA,sBAA2DA,2DAASA,gBAAe,eAAc,GACjGA,UAEFA,mBAAwB,OAClBA,kFAAqEA,QACzEA,kCAEEA,gCA6BAA,iCA4BFA,UAEFA,4CA3DgBA,8CA6BAA,0FAoChBA,mBAA0B,YAEtBA,qCACFA,QACAA,sBACQA,2DAASA,gBAAe,eAAc,GAC9CA,UAEFA,oBAA8BA,4DAAYA,6BAAoB,GAC5DA,mBAAwB,OAEpBA,0HACFA,QACAA,mBACAA,mBAA4B,gBACiDA,0BAAaA,QACxFA,oBACEA,sBACFA,UAEFA,oBAA4B,gBAC0CA,kBAAKA,QACzEA,oBACEA,sBAKFA,YAGJA,oBAA0B,iBACwCA,mBAAMA,WAAS,yBAxB7EA,yCCt6BD,IAAM+iC,GAAoB,MAA3B,MAAOA,EAmHXljC,YACU6O,EACAgF,EACAyJ,EACA1J,EACAyE,EAAwBC,EAAwC3E,EAChEpT,EACA6pB,EACE+Y,GAPF3iC,wBACAA,qBACAA,UACAA,oBACAA,cAAwBA,sBAAwCA,gBAChEA,YACAA,oBACEA,kBAtHZA,qBAAiC,IAAIue,KACrCve,uBAAmC,IAAIue,KACvCve,wBAAoC,IAAIue,KACxCve,oBAAgC,IAAIue,KACpCve,uBAAmC,IAAIue,KACvCve,sBAAkC,IAAIue,KAEtCve,wBAAoC,IAAIue,KACxCve,0BAAsC,IAAIue,KAC1Cve,2BAAuC,IAAIue,KAC3Cve,uBAAmC,IAAIue,KACvCve,0BAAsC,IAAIue,KAC1Cve,yBAAqC,IAAIue,KAEzCve,oBAAgB,EAGhBA,YAAkB,GAElBA,WAAgB,GAEhBA,kBAAuB,GACvBA,gBAAqB,GACrBA,iBAAsB,GACtBA,qBAA0B,GAC1BA,mBAAgB,IAChBA,iBAAc,IAEdA,aAA+BA,KAAKqT,cAAc7E,QAClDxO,YAA6BA,KAAKqT,cAAc5E,OAChDzO,iBAAkCA,KAAKqT,cAAcmL,YACrDxe,qBAAsCA,KAAKqT,cAAcuvB,gBACzD5iC,aAAsCA,KAAKqT,cAAcyW,QAkDzD9pB,wBAAqB,CACnB,CAAC4G,WAAY,aAAcC,WAAY,UAAWtC,KAAM,UAAWs+B,SAAS,IAE9E7iC,2BAAwB,CACtB,CAAC4G,WAAY,aAAcC,WAAY,OAAQtC,KAAM,oBAAqBs+B,SAAS,IAGrF7iC,gBAAqB,GAKrBA,wBAAsD,CAACuE,KAAM,GAAIupB,MAAO,IAExE9tB,uBAAoB,GAEpBA,kBAAe,IAAIue,KAEnBve,qBAA0B,EAG1BA,cAAmB,EACnBA,mBAA0B,GAC1BA,qBAA4B,GAE5BA,sBAAkB,CAclB,CAEAP,WAIEO,KAAK8X,eAAe3J,OAAOhO,UAAWgO,IACpCrN,QAAQC,IAAIoN,GACZ,MAAMwV,EAAKxV,EAAOwV,GACdA,IACF3jB,KAAKC,SAAU,EACfD,KAAKqO,iBAAiBvD,YAAY6Y,GAAIxjB,UAAU,CAC9C4J,KAAOW,IAUDA,EAAKtD,QACPpH,KAAK6X,OAAOirB,SAAS,CAAC,WAGxBhiC,QAAQC,IAAI8H,KAAK0B,UAAUG,EAAM,KAAM,IAEvC1K,KAAKqT,cAAc1E,cAAcgV,GACjC3jB,KAAKqT,cAAcxE,sBAAsB8U,GACzC3jB,KAAKqT,cAAczE,kBAAkBlE,EAAKuD,kBAW1C,MAAMxF,EAASiC,EAAKjC,OACpBzI,KAAK+iC,aAAat6B,GAClBzI,KAAK4pB,aAAaoZ,SAAS,GAAGv6B,EAAO,GAAG3B,qBAAoB,EAE9DwO,MAAQ2tB,IACNniC,QAAQwU,MAAM2tB,EAAG,KAKvB,MAAMC,EAAS/0B,EAAOnD,eAClBk4B,IACFpiC,QAAQC,IAAImiC,GACZljC,KAAKC,SAAU,EACfD,KAAKqO,iBAAiBtD,gBAAgBm4B,GAAQ/iC,UAAWuK,IAEvD5J,QAAQC,IAAI8H,KAAK0B,UAAUG,EAAM,KAAM,IAGvC,MAAMjC,EAASiC,EAAKy4B,gBAAgB16B,OACpCzI,KAAK+iC,aAAat6B,GAElBzI,KAAK4pB,aAAaoZ,SAAS,GAAGv6B,EAAO,GAAG3B,qBAAoB,GAG9D9G,KAAKmT,SAAS8mB,aAAa,aAI7Bj6B,KAAKojC,kBACLpjC,KAAKwO,QAAQ7E,QAAKqX,KAAUhhB,KAAKihB,eAAe9gB,UAAUC,IACxDU,QAAQC,IAAIX,GACZJ,KAAKyI,OAASrI,IAEhBJ,KAAKyO,OAAO9E,QAAKqX,KAAUhhB,KAAKihB,eAAe9gB,UAAUC,IACvDU,QAAQC,IAAIX,GACZJ,KAAKgF,MAAQ5E,GACZujB,IAAOuf,GAA2B,IAAjB9iC,EAAM0F,SAAiB1F,EAAM,GAAGyH,YAAczH,EAAM,GAAGH,SAAWD,KAAKqjC,eAAejjC,EAAM,IAE9GJ,KAAKorB,gBAAkB5qB,SAAOR,KAAKgF,MAAO,CAAC/E,SAAS,GAAK,GAE3DD,KAAK8pB,QAAQngB,QAAKqX,KAAUhhB,KAAKihB,eAAe9gB,UAAUC,IACxDU,QAAQC,IAAIX,GACZJ,KAAKmO,OAAS/N,EACdJ,KAAKsjC,aAAez6B,KAAK0B,UAAUnK,EAAO,KAAM,EAAC,GAGnDJ,KAAKwe,YAAY7U,QAAKqX,KAAUhhB,KAAKihB,eAAe9gB,UAAUC,IAC5DU,QAAQC,IAAI,cAAcX,KAC1BJ,KAAK4K,WAAaxK,EAClBJ,KAAK2qB,YAAc,GAAGxS,OAAOhF,SAASyX,mBAAmBxqB,MAG3DJ,KAAK4iC,gBAAgBj5B,QAAKqX,KAAUhhB,KAAKihB,eAAe9gB,UAAUC,IAChEU,QAAQC,IAAI,kBAAkBX,KAC9BJ,KAAKujC,gBAAkB,GAAGprB,OAAOhF,SAASyX,wBAAwBxqB,KACnE,GAGHJ,KAAK8X,eAAe0rB,cAAcrjC,UAAUG,IAW1C,MAAMmjC,EAAQnjC,EAGd,GAFAQ,QAAQC,IAAI0iC,GACKA,EAAMvjC,IAAI,QAEzB,OAAQujC,EAAMvjC,IAAI,SAChB,IAAK,UACHF,KAAK4pB,aAAaoZ,SAAS,4BAS3BhjC,KAAK0jC,4BAA4Bp8B,GARH,CAC5B/C,KAAM,UACNqD,UAAW,UACX3H,SAAS,EACT4H,WAAW,EACXC,oBAAgBC,EAChBC,UAAU,IAGZ,MACF,IAAK,MACHhI,KAAK4pB,aAAaoZ,SAAS,+BAS3BhjC,KAAK0jC,4BAA4Bh9B,GARK,CACpCnC,KAAM,oBACNqD,UAAW,OACX3H,SAAS,EACT4H,WAAW,EACXC,oBAAgBC,EAChBC,UAAU,IAGZ,MACF,IAAK,WACHhI,KAAK4pB,aAAaoZ,SAAS,YAS3BhjC,KAAK0jC,4BAA4Bn8B,GARR,CACvBhD,KAAM,WACNqD,UAAW,WACX3H,SAAS,EACT4H,WAAW,EACXC,oBAAgBC,EAChBC,UAAU,IAGZ,MACF,IAAK,OACHhI,KAAK4pB,aAAaoZ,SAAS,QAS3BhjC,KAAK0jC,4BAA4Bl8B,GARZ,CACnBjD,KAAM,OACNqD,UAAW,OACX3H,SAAS,EACT4H,WAAW,EACXC,oBAAgBC,EAChBC,UAAU,IAGZ,MACF,IAAK,WACHhI,KAAK4pB,aAAaoZ,SAAS,8BAS3BhjC,KAAK0jC,4BAA4Bj8B,GARQ,CACvClD,KAAM,6BACNqD,UAAW,6BACX3H,SAAS,EACT4H,WAAW,EACXC,oBAAgBC,EAChBC,UAAU,IAGZ,MACF,IAAK,YACHhI,KAAK4pB,aAAaoZ,SAAS,6BAS3BhjC,KAAK0jC,4BAA4Bh8B,GARb,CAClBnD,KAAM,4BACNqD,UAAW,SACX3H,SAAS,EACT4H,WAAW,EACXC,oBAAgBC,EAChBC,UAAU,IAGZ,MACF,QACEhI,KAAKmT,SAAS8mB,aAAa,YAC3Bj6B,KAAK4pB,aAAaoZ,SAAS,0BACrB,GAMdhjC,KAAK6tB,UAAY7tB,KAAK8c,GAAGjY,MAAM,CAC7BipB,MAAO,GACPvpB,KAAM,IAEV,CAEAo/B,mBAEmD,SAA9C3jC,KAAKgF,MAAMhF,KAAKgF,MAAMc,OAAO,GAAG8B,WACjC5H,KAAK4jC,gBAAgB75B,OAE0B,YAA9C/J,KAAKgF,MAAMhF,KAAKgF,MAAMc,OAAO,GAAG8B,WACjC5H,KAAK6jC,kBAAkB95B,OAEwB,aAA9C/J,KAAKgF,MAAMhF,KAAKgF,MAAMc,OAAO,GAAG8B,WACjC5H,KAAK8jC,mBAAmB/5B,OAEuB,SAA9C/J,KAAKgF,MAAMhF,KAAKgF,MAAMc,OAAO,GAAG8B,WACjC5H,KAAK+jC,eAAeh6B,OAE2B,+BAA9C/J,KAAKgF,MAAMhF,KAAKgF,MAAMc,OAAO,GAAG8B,WACjC5H,KAAKgkC,kBAAkBj6B,OAEwB,WAA9C/J,KAAKgF,MAAMhF,KAAKgF,MAAMc,OAAO,GAAG8B,WACjC5H,KAAKikC,iBAAiBl6B,MAE1B,CAEAm6B,oBACmD,SAA9ClkC,KAAKgF,MAAMhF,KAAKgF,MAAMc,OAAO,GAAG8B,WACjC5H,KAAKmkC,mBAAmBp6B,OAEuB,YAA9C/J,KAAKgF,MAAMhF,KAAKgF,MAAMc,OAAO,GAAG8B,WACjC5H,KAAKokC,qBAAqBr6B,OAEqB,aAA9C/J,KAAKgF,MAAMhF,KAAKgF,MAAMc,OAAO,GAAG8B,WACjC5H,KAAKqkC,sBAAsBt6B,OAEoB,SAA9C/J,KAAKgF,MAAMhF,KAAKgF,MAAMc,OAAO,GAAG8B,WACjC5H,KAAKskC,kBAAkBv6B,OAEwB,+BAA9C/J,KAAKgF,MAAMhF,KAAKgF,MAAMc,OAAO,GAAG8B,WACjC5H,KAAKukC,qBAAqBx6B,OAEqB,WAA9C/J,KAAKgF,MAAMhF,KAAKgF,MAAMc,OAAO,GAAG8B,WACjC5H,KAAKwkC,oBAAoBz6B,MAE7B,CAGA06B,cAAcz1B,GAeZ,MAAO,CACLlI,mBAAoBkI,EAAMlI,mBAC1BH,aAAcqI,EAAMrI,aACpBC,WAAYoI,EAAMpI,WAClBC,WAAYmI,EAAMnI,WAClBE,iBAAkBiI,EAAMjI,iBACxBmE,WAAY8D,EAAM01B,iBAAmB11B,EAAM01B,sBAAmB38B,EAC9DgiB,oBAAqB/a,EAAM+a,oBAAsB/a,EAAM+a,yBAAsBhiB,EAC7E05B,eAAgBzyB,EAAMyyB,eAAiBzyB,EAAMyyB,oBAAiB15B,EAC9DoZ,WAAYnS,EAAMmS,WAAanS,EAAMmS,gBAAapZ,EAElDf,YAAagI,EAAMhI,YAAcgI,EAAMhI,YAAc,CACnD,CACEC,MAAS,GACTC,QAAW,KAGfC,eAAgB6H,EAAM7H,eAAiB6H,EAAM7H,eAAiB,CAACC,OAAQ,GAAIC,SAAU,IAEzF,CAEAs9B,aAAa31B,EAAY/O,GAAU,GAQjC,MAAM6H,GAAkBtH,YAAUwO,EAAMhI,YAAY,IAAIE,WAAa1G,YAAUwO,EAAMhI,YAAY,IAAIE,SACrG,MAAO,CACL3C,KAAMyK,EAAMnI,WACZe,UAAWoH,EAAMnI,WACjB5G,UACA6H,iBACAE,UAAU,EACVH,WAAW,EACX8I,eAAgB3B,EAAM2B,eAAiB3B,EAAM2B,oBAAiB5I,EAElE,CAEAg7B,aAAat6B,GAIX,IAAIm8B,EAAuB,GACvBC,EAAuB,GACvBC,EAAqB,GACzBtkC,YAAUiI,EAAQ,CAACuG,EAAO6K,KAExB,MAAMkrB,EAAW/kC,KAAKykC,cAAcz1B,GAGpC41B,EAAY/jC,KAAKkkC,GACjBF,EAAYhkC,KAAK,IAAIkkC,EAAU75B,gBAAYnD,IAE3C,MAAMi9B,EAAUhlC,KAAK2kC,aAAa31B,IAAShP,KAAK4K,YAChDk6B,EAAWjkC,KAAKmkC,GAEhB,MAAM1kC,EAAO0O,EAAMjI,iBAGbgjB,EAAsB/a,EAAM+a,oBAET,YAArB/a,EAAMnI,WACmB,IAAvBmI,EAAMrI,aACR3G,KAAKilC,oBAAoB3kC,EAAMypB,GAE/B/pB,KAAKklC,qBAAqB5kC,GAEE,SAArB0O,EAAMnI,WACY,IAAvBmI,EAAMrI,aACR3G,KAAKmlC,iBAAiB7kC,EAAMypB,GAE5B/pB,KAAKolC,kBAAkB9kC,GAEK,aAArB0O,EAAMnI,WACY,IAAvBmI,EAAMrI,aACR3G,KAAKqlC,qBAAqB/kC,EAAMypB,GAEhC/pB,KAAKslC,sBAAsBhlC,GAEC,SAArB0O,EAAMnI,WACY,IAAvBmI,EAAMrI,aACR3G,KAAKulC,iBAAiBjlC,EAAMypB,GAE5B/pB,KAAKwlC,kBAAkBllC,GAEK,+BAArB0O,EAAMnI,WACY,IAAvBmI,EAAMrI,aACR3G,KAAKylC,oBAAoBnlC,EAAMypB,GAE/B/pB,KAAK0lC,qBAAqBplC,GAEE,WAArB0O,EAAMnI,YAEY,IAAvBmI,EAAMrI,cACR3G,KAAK2lC,mBAAmBrlC,EAFH0O,EAAMyyB,eAEiB,GAOlDzhC,KAAKqT,cAAcrD,SAAS80B,GAC5B9kC,KAAKqT,cAAc5D,UAAUm1B,GAC7B5kC,KAAKqT,cAAcvE,kBAAkB+1B,GAErC7kC,KAAKC,SAAU,CACjB,CAGAwU,KAAK8B,GACHvW,KAAKoT,aAAaqB,KAAK8B,EAAS,CAC9BC,eAAgB,oBAChBhC,KAAM,KACNiC,WAAW,EACXC,SAAU,WACT1C,OAAO2C,KAAM3C,MAEZ4C,MAIN,CAKAuuB,iBAAiB7kC,EAAW4N,EAAoB,IAC9CpN,QAAQC,IAAIT,GACZQ,QAAQC,IAAImN,GAEZ,MAAOxC,UAASG,aAAYF,wBAAwCrL,EAE9DslC,EAAmBplC,QAAMkL,EAAQ6L,MAAM,KAAOJ,KAC1C5L,MAAO4L,EAAGK,QAAS,KAAMC,MAAO,QAIpCouB,EAA0CrlC,QAAMqL,EAAai6B,IACjE,GAAe,YAAXA,EAAEx5B,KACJ,OAAOtM,KAAK2xB,oBAAoBmU,EAAEv5B,QAC7B,GAAe,eAAXu5B,EAAEx5B,KACX,OAAOtM,KAAK8xB,wBAAwBgU,GAC/B,GAAe,mBAAXA,EAAEx5B,KAA2B,CACtC,MAAOwR,cAAa+T,oBAAoBiU,EACxC,OAAO9lC,KAAK4xB,2BAA2B9T,EAAa+T,EAAgB,OAChD,UAAXiU,EAAEx5B,KACJtM,KAAK+lC,iBAEP/lC,KAAK8c,GAAGjY,MAAM,GAAE,GAWzB,IAAImhC,EAAc,CAACC,KARRjmC,KAAKkmC,4BACdh4B,EACAvC,EAAuBA,EAAqB,GAAK,EACjDA,EAAuBA,EAAqB,GAAK,EACjDi6B,GACCj6B,EACDk6B,IAGF7lC,KAAKmmC,SAAWnmC,KAAK8c,GAAGjY,MAAMmhC,EAChC,CAEAZ,kBAAkB9kC,GAChBQ,QAAQC,IAAIT,GAEZ,MAAOoL,UAASG,aAAYF,wBAAwCrL,EAE9DslC,EAAmBplC,QAAMkL,EAAQ6L,MAAM,KAAOJ,KAC1C5L,MAAO4L,EAAGK,QAAS,KAAMC,MAAO,QAGpCouB,EAA0CrlC,QAAMqL,EAAai6B,GAClD,YAAXA,EAAEx5B,KACGtM,KAAK2xB,oBAAoBmU,EAAEv5B,QACd,eAAXu5B,EAAEx5B,KACJtM,KAAK8xB,wBAAwBgU,GAE/B9lC,KAAK8c,GAAGjY,MAAM,KAGjBuhC,EAAuB,CAC3Bx6B,cAAe,IAAIy6B,KAAmB,CACpC16B,EAAuBA,EAAqB,GAAK,EACjDA,EAAuBA,EAAqB,GAAK,IAEnDD,QAAS1L,KAAK8c,GAAGwpB,MAAMV,GACvB95B,iBAAkB9L,KAAK8c,GAAGwpB,MAAMT,GAChCnb,eAAgB/e,GAGZ46B,EAAKvmC,KAAK8c,GAAGjY,MAAMuhC,GACzBpmC,KAAKmmC,SAAS3oB,WAAW,OAAQ+oB,EAGnC,CAEAtB,oBAAoB3kC,EAAW4N,EAAoB,IACjDpN,QAAQC,IAAIT,GACZ,MAAO+L,uBAAsBR,aAAYF,wBAAwBrL,EAYjE,IAAI0lC,EAAc,CAACxP,QAPRx2B,KAAKwmC,oBACdt4B,EACA7B,EACAV,EAAqB,GACrBA,EAAqB,GARRE,EAAW,GAAGU,SAY7BvM,KAAKmmC,SAAWnmC,KAAK8c,GAAGjY,MAAMmhC,EAChC,CAEAd,qBAAqB5kC,GACnBQ,QAAQC,IAAIT,GACZ,MAAO+L,uBAAsBR,aAAYF,wBAAwBrL,EAC3DiM,EAASV,EAAW,GAAGU,OAG7B,IAAIk6B,EAAmB96B,EAAqB,GACxC+6B,EAAmB/6B,EAAqB,GAE5C86B,EAAwC,IAArBA,EAAyB,EAAIA,EAChDC,EAAwC,IAArBA,EAAyB,GAAKA,EAGjD1mC,KAAKqT,cAAc7D,SAAS,CAC1B7I,aAAc3G,KAAKyI,OAAO3C,OAAS,EACnCc,WAAY,aACZC,WAAY,UACZC,mBAAoB,2BAEpBC,iBAAkB,KAGpB/G,KAAKqT,cAAcjD,WAAW,CAC5B7L,KAAM,UACNqD,UAAW,UACX3H,SAAS,EACT4H,WAAW,EACXG,UAAU,GACThI,KAAKgF,MAAMc,QAEd9F,KAAKqT,cAAc/C,iBAAgB,EAAMtQ,KAAKgF,MAAMc,OAAS,GAE7D,MAAMsgC,EAAuB,CAC3Bn6B,UAAWI,EACXT,cAAe,IAAIy6B,KAAmB,CAACI,EAAkBC,IACzDn6B,UAGIg6B,EAAKvmC,KAAK8c,GAAGjY,MAAMuhC,GAEzBpmC,KAAKmmC,SAAS3oB,WAAW,UAAW+oB,EACtC,CAEAlB,qBAAqB/kC,EAAW4N,EAAoB,IAClDpN,QAAQC,IAAIT,GACZ,MAAOuM,WAAUH,WAAUC,aAAYG,8BAA8BxM,EASrE,IAAI0lC,EAAc,CAACW,SAPR3mC,KAAK4mC,qBACd14B,EACArB,EACAH,EACAC,EACAG,IAGF9M,KAAKmmC,SAAWnmC,KAAK8c,GAAGjY,MAAMmhC,EAChC,CAEAV,sBAAsBhlC,GACpBQ,QAAQC,IAAIT,GAGZN,KAAKqT,cAAc7D,SAAS,CAC1B7I,aAAc3G,KAAKyI,OAAO3C,OAAS,EACnCc,WAAY,aACZC,WAAY,WACZC,mBAAoB,WAEpBC,iBAAkB,KAGpB/G,KAAKqT,cAAcjD,WAAW,CAC5B7L,KAAM,WACNqD,UAAW,WACX3H,SAAS,EACT4H,WAAW,EACXG,UAAU,GACThI,KAAKgF,MAAMc,QAEd,MAAO+G,WAAUH,WAAUC,aAAYG,8BAA8BxM,EAS/DimC,EAAKvmC,KAAK8c,GAAGjY,MAPU,CAC3BgI,WACAH,WACAE,UAAWD,EACXG,+BAIF9M,KAAKmmC,SAAS3oB,WAAW,WAAY+oB,EACvC,CAEAhB,iBAAiBjlC,EAAW4N,EAAoB,IAC9CpN,QAAQC,IAAIT,GACZ,MAAO0M,SAAQC,aAAYC,cAAe5M,EAO1C,IAAI0lC,EAAc,CAACa,KANR7mC,KAAK8mC,iBACd54B,EACAlB,EACAC,EACAC,IAGFlN,KAAKmmC,SAAWnmC,KAAK8c,GAAGjY,MAAMmhC,EAChC,CAEAR,kBAAkBllC,GAChBQ,QAAQC,IAAIT,GAGZN,KAAKqT,cAAc7D,SAAS,CAC1B7I,aAAc3G,KAAKyI,OAAO3C,OAAS,EACnCc,WAAY,aACZC,WAAY,OACZC,mBAAoB,OAEpBC,iBAAkB,KAGpB/G,KAAKqT,cAAcjD,WAAW,CAC5B7L,KAAM,OACNqD,UAAW,OACX3H,SAAS,EACT4H,WAAW,EACXG,UAAU,GACThI,KAAKgF,MAAMc,QAEd,MAAOkH,SAAQC,aAAYC,cAAc5M,EAQnCimC,EAAKvmC,KAAK8c,GAAGjY,MANU,CAC3BmI,SACAC,aACAC,eAIFlN,KAAKmmC,SAAS3oB,WAAW,OAAQ+oB,EACnC,CAEAd,oBAAoBnlC,EAAW4N,EAAoB,IACjDpN,QAAQC,IAAIT,GACZQ,QAAQC,IAAImN,GAEZ,MAAOxC,UAASG,cAA8BvL,EAExCslC,EAAmBplC,QAAMkL,EAAQ6L,MAAM,KAAOJ,KAC1C5L,MAAO4L,EAAGK,QAAS,KAAMC,MAAO,QAIpCouB,EAA0CrlC,QAAMqL,EAAai6B,IACjE,GAAe,YAAXA,EAAEx5B,KACJ,OAAOtM,KAAK2xB,oBAAoBmU,EAAEv5B,QAC7B,GAAe,eAAXu5B,EAAEx5B,KACX,OAAOtM,KAAK8xB,wBAAwBgU,GAC/B,GAAe,mBAAXA,EAAEx5B,KAA2B,CACtC,MAAOwR,cAAa+T,oBAAoBiU,EACxC,OAAO9lC,KAAK4xB,2BAA2B9T,EAAa+T,EAAgB,OAChD,UAAXiU,EAAEx5B,KACJtM,KAAK+lC,iBAEP/lC,KAAK8c,GAAGjY,MAAM,GAAE,GAQzB,IAAImhC,EAAc,CAACe,QALR/mC,KAAKgnC,qBACd94B,EACA03B,EACAC,IAGF7lC,KAAKmmC,SAAWnmC,KAAK8c,GAAGjY,MAAMmhC,EAChC,CAEAN,qBAAqBplC,GACnBQ,QAAQC,IAAIT,GAGZN,KAAKqT,cAAc7D,SAAS,CAC1B7I,aAAc3G,KAAKyI,OAAO3C,OAAS,EACnCc,WAAY,aACZC,WAAY,6BACZC,mBAAoB,6BACpBC,iBAAkB,GAClBC,YAAa,CAAC,CAACC,MAAO,gBAAiBC,QAAS,KAChDC,eAAgB,CAACC,OAAQ,GAAIC,SAAU,MAGzCrH,KAAKqT,cAAcjD,WAAW,CAC5B7L,KAAM,6BACNqD,UAAW,6BACX3H,SAAS,EACT4H,WAAW,EACXC,oBAAgBC,EAChBC,UAAU,GACThI,KAAKgF,MAAMc,QAEd,MAAO4F,UAASG,cAA8BvL,EAExCslC,EAAmBplC,QAAMkL,EAAQ6L,MAAM,KAAOJ,KAC1C5L,MAAO4L,EAAGK,QAAS,KAAMC,MAAO,QAIpCouB,EAA0CrlC,QAAMqL,EAAai6B,IACjE,GAAe,YAAXA,EAAEx5B,KACJ,OAAOtM,KAAK2xB,oBAAoBmU,EAAEv5B,QAC7B,GAAe,eAAXu5B,EAAEx5B,KACX,OAAOtM,KAAK8xB,wBAAwBgU,GAC/B,GAAe,mBAAXA,EAAEx5B,KAA2B,CACtC,MAAOwR,cAAa+T,oBAAoBiU,EACxC,OAAO9lC,KAAK4xB,2BAA2B9T,EAAa+T,EAAgB,OAChD,UAAXiU,EAAEx5B,KACJtM,KAAK+lC,iBAEP/lC,KAAK8c,GAAGjY,MAAM,GAAE,GAGnBuhC,EAAuB,CAG3B16B,QAAS1L,KAAK8c,GAAGwpB,MAAMV,GACvB95B,iBAAkB9L,KAAK8c,GAAGwpB,MAAMT,IAI5BU,EAAKvmC,KAAK8c,GAAGjY,MAAMuhC,GACzBpmC,KAAKmmC,SAAS3oB,WAAW,UAAW+oB,EACtC,CAEAZ,mBAAmBrlC,EAAWiO,EAAe,IAG3C,MAAOlB,iBAAgBC,6BAA4BE,6BAC5CE,qBAAoBE,0BAA0BtN,EAWrD,IAAI0lC,EAAc,CAACiB,OATRjnC,KAAKknC,mBACd34B,EACAlB,EACAC,EACAE,EACAE,EACAE,IAIF5N,KAAKmmC,SAAWnmC,KAAK8c,GAAGjY,MAAMmhC,EAChC,CAEAhkB,cACEkJ,cAAclrB,KAAKqO,iBAAiB8c,gBACpCnrB,KAAKihB,aAAalX,OAClB/J,KAAKihB,aAAaiB,UACpB,CAEIilB,sBACF,OAAO3mC,QAAMR,KAAKyI,OAASmN,GAAMA,EAAE/O,WACrC,CAEAw8B,eAAer0B,GAIblO,QAAQC,IAAIiO,GACZ,IAAIg3B,EAAc,GACO,SAArBh3B,GAAOpH,UACTo+B,EAAc,CAACC,KAAMjmC,KAAKkmC,+BACI,YAArBl3B,GAAOpH,UAChBo+B,EAAc,CAACxP,QAASx2B,KAAKwmC,uBACC,aAArBx3B,GAAOpH,UAChBo+B,EAAc,CAACW,SAAU3mC,KAAK4mC,wBACA,SAArB53B,GAAOpH,UAChBo+B,EAAc,CAACa,KAAM7mC,KAAK8mC,oBAEE,+BAArB93B,GAAOpH,UACdo+B,EAAc,CAACe,QAAS/mC,KAAKonC,uBAED,WAArBp4B,GAAOpH,YACdo+B,EAAc,CAACiB,OAAQjnC,KAAKknC,uBAE9BpmC,QAAQC,IAAIilC,GACZhmC,KAAKmmC,SAAWnmC,KAAK8c,GAAGjY,MAAMmhC,EAChC,CAEAtC,4BAA4Bv6B,EAAY7E,GAItC,MAAM+iC,EAAY7mC,cAAY2I,GAS9BnJ,KAAKqT,cAAc1D,gBAAgB03B,GACnCrnC,KAAKqT,cAAcpD,eAAe3L,GAClCtE,KAAKqT,cAAc3E,UAAUpG,IAC7BtI,KAAKqT,cAAc1E,cAAc,IACjC3O,KAAKqT,cAAczE,kBAAkB,GACvC,CAEIxD,gBACF,OAAOpL,KAAKmmC,SAASjmC,IAAI,OAC3B,CAEI8L,kBACF,OAAOhM,KAAKmmC,SAASjmC,IAAI,UAC3B,CAEIy5B,mBACF,OAAO35B,KAAKmmC,SAASjmC,IAAI,WAC3B,CAEIu6B,eACF,OAAOz6B,KAAKmmC,SAASjmC,IAAI,OAC3B,CAEIqgC,kBACF,OAAOvgC,KAAKmmC,SAASjmC,IAAI,UAC3B,CAEIqhC,iBACF,OAAOvhC,KAAKmmC,SAASjmC,IAAI,SAC3B,CAEImL,sBAIF,OAAOrL,KAAKoL,UAAU2S,SAASrS,QAAWtL,KAC5C,CAEIknC,uBAIF,OAAOtnC,KAAKugC,YAAYxiB,SAASrS,QAAWtL,KAC9C,CAEIuV,2BAIF,OAAO3V,KAAKoL,UAAU2S,SAASrS,QAAWtL,MAAM6F,IAAK2P,GAAcA,EAAErK,OAAOC,KAAK,KACnF,CAEIM,uBAIF,OAAO9L,KAAKoL,UAAU2S,SAASjS,iBAAoB1L,KACrD,CAEImnC,wBAIF,OAAOvnC,KAAKugC,YAAYxiB,SAASjS,iBAAoB1L,KACvD,CAEIonC,8BACF,MAAO,CAAC,EAAG,IAAI9mC,SAASV,KAAKgM,YAAY+R,SAASnS,cAAiBxL,MAAM,IACvE,EAAIJ,KAAKgM,YAAY+R,SAASnS,cAAiBxL,MAAM,EACzD,CAEIqnC,8BACF,MAAO,CAAC,EAAG,IAAI/mC,SAASV,KAAKgM,YAAY+R,SAASnS,cAAiBxL,MAAM,IACvE,EAAIJ,KAAKgM,YAAY+R,SAASnS,cAAiBxL,MAAM,EACzD,CAEAsnC,QAGE5mC,QAAQC,IAAIf,KAAKkO,mBACjBlO,KAAKwe,YAAY7U,QAAKqX,KAAUhhB,KAAKihB,eAAe9gB,UAAUC,IAC5DU,QAAQC,IAAI,cAAcX,IAAO,GAEnCJ,KAAKwO,QAAQ7E,QAAKqX,KAAUhhB,KAAKihB,eAAe9gB,UAAUC,IACxDU,QAAQC,IAAI,gBACZD,QAAQC,IAAIX,EAAK,GAEnBJ,KAAKyO,OAAO9E,QAAKqX,KAAUhhB,KAAKihB,eAAe9gB,UAAUC,IACvDU,QAAQC,IAAI,eACZD,QAAQC,IAAIX,EAAK,GAKnBJ,KAAK8pB,QAAQngB,QAAKqX,KAAUhhB,KAAKihB,eAAe9gB,UAAUC,IACxDU,QAAQC,IAAI,gBACZD,QAAQC,IAAI,UACZD,QAAQC,IAAIX,EAAK,EAErB,CAEAunC,eAUE3nC,KAAKqO,iBAAiB1D,YAAY3K,KAAK4K,WAJxB,CACbg9B,YAAY,IAG6CznC,UAAWuK,IACpE5J,QAAQC,IAAI2J,EAAI,GAGlBlK,YAAUR,KAAKgF,MAAO,CAACV,EAAMuV,KAC3B/Y,QAAQC,IAAIuD,GACZ,MAAMujC,EAAa,IACdvjC,EACHrE,SAAS,GAEXD,KAAKqT,cAAcjD,WAAWy3B,EAAYhuB,EAAC,EAE/C,CAEAiuB,kBAAkBxhC,GAChBxF,QAAQC,IAAIuF,GACZtG,KAAK84B,eAAiBxyB,CACxB,CAEAyhC,mBACE/nC,KAAKyU,KAAKzU,KAAK+4B,WACjB,CAEArN,SAASxc,GAIPgR,EAAEmD,GAAGC,UAAUC,IAAItS,OAAS,GAE5B,MAAMtK,EAAeuI,EAAQ,EAEvB1G,EAAoC,CAAC,EAAG7B,GAE9C7F,QAAQC,IAAIf,KAAKmO,QAEjB,MAAM1F,EAASzI,KAAKyI,OAAOxD,MAAM,EAAG0B,GAGpC,IAAI6mB,EAFJ1sB,QAAQC,IAAI0H,GACZzI,KAAKmO,OAAO3F,gBAAkBA,EAG9BhI,YAAUR,KAAKyI,OAAQ,CAACuG,EAAO6K,KAM7B,OALA/Y,QAAQC,IAAIiO,GACAA,EAAMnI,YAKhB,IAAK,OACH,GAAU,IAANgT,EAAS,CACX,IAAIkB,EAAc,GACdoS,EAAc,GAC0C,CAC1D,MAAOpD,sBAAqBre,WAAYs8B,GACxCjtB,EAAMgP,EACNoD,EAAMzhB,EAOR,IAAIwI,EAAYlU,KAAKoL,UAAUlL,IAAI,sBAAsBE,MACpD8T,IACHlU,KAAKqT,cAAczC,qBAAqBmK,GACxC/a,KAAKoL,UAAU2S,SAAS7P,kBAAkBmf,SAAStS,GACnD7G,EAAY6G,GAEd/a,KAAKmO,OAAO1F,OAAOoR,GAAGkQ,oBAAsB7V,EAG9C,GAAI2F,GAAK3K,EACPlP,KAAKmO,OAAO1F,OAAOoR,GAAG9S,iBAAmB/G,KAAKqO,iBAAiBlD,iBAAiBnL,KAAKoL,WACrFpL,KAAKqT,cAAc7C,gBAAe,GAAM,EAAOqJ,OAC1C,CACL7Z,KAAKmO,OAAO1F,OAAOoR,GAAG9S,iBAAmB,GACzCymB,EAAWxtB,KAAKgF,MAAM6U,GACtB,MAAMuM,EAAkB,IACnBoH,EACHvtB,SAAS,EACT4H,WAAW,GAEb7H,KAAKqT,cAAcjD,WAAWgW,EAAiBvM,EAAC,CAGlD,MAEF,IAAK,UACH,GAAU,IAANA,EAAS,CACX,MAAOkQ,uBAAuBke,GAC9B,IAAI/zB,EAAYlU,KAAKgM,YAAY9L,IAAI,sBAAsBE,MACtD8T,IACHlU,KAAKqT,cAAczC,qBAAqBmZ,GACxC/pB,KAAKgM,YAAY+R,SAAS7P,kBAAkBmf,SAAStD,GACrD7V,EAAY6V,GAEd/pB,KAAKmO,OAAO1F,OAAOoR,GAAGkQ,oBAAsB7V,EAE9C,GAAI2F,GAAK3K,EACPlP,KAAKmO,OAAO1F,OAAOoR,GAAG9S,iBAAmB/G,KAAKqO,iBAAiBtC,mBAAmB/L,KAAKgM,aACvFhM,KAAKqT,cAAc7C,gBAAe,GAAM,EAAOqJ,OAC1C,CACL7Z,KAAKmO,OAAO1F,OAAOoR,GAAG9S,iBAAmB,GACzCymB,EAAWxtB,KAAKgF,MAAM6U,GACtB,MAAMuM,EAAkB,IACnBoH,EACHvtB,SAAS,EACT4H,WAAW,GAEb7H,KAAKqT,cAAcjD,WAAWgW,EAAiBvM,EAAC,CAElD,MAEF,IAAK,WAEH,GAAU,IAANA,EAAS,CACX,MAAOkQ,uBAAuBme,GAC9B,IAAIh0B,EAAYlU,KAAK25B,aAAaz5B,IAAI,sBAAsBE,MACvD8T,IACHlU,KAAKqT,cAAczC,qBAAqBmZ,GACxC/pB,KAAK25B,aAAa5b,SAAS7P,kBAAkBmf,SAAStD,GACtD7V,EAAY6V,GAEd/pB,KAAKmO,OAAO1F,OAAOoR,GAAGkQ,oBAAsB7V,EAE9C,GAAI2F,GAAK3K,EACPlP,KAAKmO,OAAO1F,OAAOoR,GAAG9S,iBAAmB/G,KAAKqO,iBAAiB7B,oBAAoBxM,KAAK25B,cACxF35B,KAAKqT,cAAc7C,gBAAe,GAAM,EAAOqJ,OAC1C,CACL7Z,KAAKmO,OAAO1F,OAAOoR,GAAG9S,iBAAmB,GACzCymB,EAAWxtB,KAAKgF,MAAM6U,GACtB,MAAMuM,EAAkB,IACnBoH,EACHvtB,SAAS,EACT4H,WAAW,GAEb7H,KAAKqT,cAAcjD,WAAWgW,EAAiBvM,EAAC,CAElD,MAEF,IAAK,OACH,GAAU,IAANA,EAAS,CACX,MAAOkQ,uBAAuBkR,GAC9B,IAAI/mB,EAAYlU,KAAKy6B,SAASv6B,IAAI,sBAAsBE,MACnD8T,IACHlU,KAAKqT,cAAczC,qBAAqBmZ,GACxC/pB,KAAKy6B,SAAS1c,SAAS7P,kBAAkBmf,SAAStD,GAClD7V,EAAY6V,GAEd/pB,KAAKmO,OAAO1F,OAAOoR,GAAGkQ,oBAAsB7V,EAE9C,GAAI2F,GAAK3K,EACPlP,KAAKmO,OAAO1F,OAAOoR,GAAG9S,iBAAmB/G,KAAKqO,iBAAiBtB,gBAAgB/M,KAAKy6B,UACpFz6B,KAAKqT,cAAc7C,gBAAe,GAAM,EAAOqJ,OAC1C,CACL7Z,KAAKmO,OAAO1F,OAAOoR,GAAG9S,iBAAmB,GACzCymB,EAAWxtB,KAAKgF,MAAM6U,GACtB,MAAMuM,EAAkB,IACnBoH,EACHvtB,SAAS,EACT4H,WAAW,GAEb7H,KAAKqT,cAAcjD,WAAWgW,EAAiBvM,EAAC,CAElD,MAEF,IAAK,6BACH,GAAU,IAANA,EAAS,CACX,MAAOkQ,uBAAuBoe,GAC9B,IAAIj0B,EAAYlU,KAAKugC,YAAYrgC,IAAI,sBAAsBE,MACtD8T,IACHlU,KAAKqT,cAAczC,qBAAqBmZ,GACxC/pB,KAAKugC,YAAYxiB,SAAS7P,kBAAkBmf,SAAStD,GACrD7V,EAAY6V,GAEd/pB,KAAKmO,OAAO1F,OAAOoR,GAAGkQ,oBAAsB7V,EAE9C,GAAI2F,GAAK3K,EACPlP,KAAKmO,OAAO1F,OAAOoR,GAAG9S,iBAAmB/G,KAAKqO,iBAAiBlB,mBAAmBnN,KAAKugC,aACvFvgC,KAAKqT,cAAc7C,gBAAe,GAAM,EAAOqJ,OAC1C,CACL7Z,KAAKmO,OAAO1F,OAAOoR,GAAG9S,iBAAmB,GACzCymB,EAAWxtB,KAAKgF,MAAM6U,GACtB,MAAMuM,EAAkB,IACnBoH,EACHvtB,SAAS,EACT4H,WAAW,GAEb7H,KAAKqT,cAAcjD,WAAWgW,EAAiBvM,EAAC,CAElD,MAEF,IAAK,SACH,GAAU,IAANA,EAAS,CACX,IAAIkB,EAAc,GACdoS,EAAc,GAC0C,CAC1D,MAAOpD,sBAAqBre,WAAYs8B,GACxCjtB,EAAMgP,EACNoD,EAAMzhB,EAOR,IAAIwI,EAAYlU,KAAKuhC,WAAWrhC,IAAI,iBAAiBE,MAChD8T,IACHlU,KAAKqT,cAAczC,qBAAqBmK,GACxC/a,KAAKuhC,WAAWxjB,SAAS7P,kBAAkBmf,SAAStS,GACpD7G,EAAY6G,GAEd/a,KAAKmO,OAAO1F,OAAOoR,GAAGkQ,oBAAsB7V,EAG9C,GAAI2F,GAAK3K,EACPlP,KAAKmO,OAAO1F,OAAOoR,GAAG9S,iBAAmB/G,KAAKqO,iBAAiBjB,kBAAkBpN,KAAKuhC,YACtFvhC,KAAKqT,cAAc7C,gBAAe,GAAM,EAAOqJ,OAC1C,CACL7Z,KAAKmO,OAAO1F,OAAOoR,GAAG9S,iBAAmB,GACzCymB,EAAWxtB,KAAKgF,MAAM6U,GACtB,MAAMuM,EAAkB,IACnBoH,EACHvtB,SAAS,EACT4H,WAAW,GAEb7H,KAAKqT,cAAcjD,WAAWgW,EAAiBvM,EAAC,EAOnD,GAIL7Z,KAAKmO,OAAOyf,eAAiB5tB,KAAK6tB,UAAU9P,SAASxZ,KAAQnE,MAC7DJ,KAAKmO,OAAO2f,MAAQ9tB,KAAK6tB,UAAU9P,SAAS+P,MAAS1tB,MAGrDU,QAAQC,IAAIf,KAAKmO,QACjBnO,KAAKqT,cAAc3E,UAAU1O,KAAKmO,QAElCnO,KAAKguB,gBAAgBhuB,KAAKmO,OAC5B,CAEA6f,gBAAgB7f,EAAwBlD,GAAsB,GAI5DjL,KAAKqO,iBAAiB/D,aAAa6D,GAAQhO,UACxCuK,IACD5J,QAAQC,IAAI2J,GACRA,EAAKnC,aACPvI,KAAKqT,cAAc1E,cAAcjE,EAAKnC,aACtCvI,KAAKqT,cAAcxE,sBAAsBnE,EAAKnC,aAC9CvI,KAAKqT,cAAczE,kBAAkBlE,EAAKuD,kBAC1CjO,KAAKmT,SAAS8mB,aAAa,YAAYvvB,EAAKnC,eAG5CvI,KAAKqO,iBAAiBvD,YAAYJ,EAAKnC,aAAapI,UAAUC,IAC5DU,QAAQC,IAAIX,GACZU,QAAQC,IAAIX,EAAMqI,QAClBjI,YAAUJ,EAAMqI,OAAQ,CAAC2/B,EAAGvuB,KAC1B/Y,QAAQC,IAAI8Y,GACJ,IAAJA,GACF7Z,KAAK4pB,aAAaoZ,SAAS,GAAGoF,EAAEthC,sBAElC9G,KAAKqT,cAAc3D,gBAAgB04B,EAAE1D,iBAAkB7qB,EAAC,EACzD,KAEMnP,EAAKtD,QAAUsD,EAAKrD,YAC7BrH,KAAK6qB,cAAgBngB,EAAKtD,OAC1BpH,KAAK8qB,gBAAkBpgB,EAAKrD,SAC5BrH,KAAKyU,KAAKzU,KAAK0U,YACf5T,QAAQC,IAAI2J,GAAI,EAEjB4K,IACCxU,QAAQwU,MAAMA,GACdtV,KAAK6qB,cAAchqB,KAAKyU,GACxBtV,KAAKC,SAAU,GAKrB,CAEAmjC,kBAKEpjC,KAAKD,KAAKG,IADM,GAAGN,yCACIO,UAAUC,IAC/BJ,KAAKqoC,WAAajoC,EAClBU,QAAQC,IAAIX,EAAK,EAErB,CAEA8lC,4BACEh4B,EAAoB,GACpBu4B,EAAmB,EACnBC,EAAmB,EACnBh7B,EAAoB,GACpBgf,GAAyB,EACzB4d,EAAc,CAACtoC,KAAK2xB,wBAEpB,MAAM5W,EAAMtF,eAAe8yB,QAAQ,aAAe9yB,eAAe8yB,QAAQ,aAAer6B,EACxFuH,eAAe+yB,WAAW,aAE1B,MAAMrb,EAAM1X,eAAe8yB,QAAQ,mBAAqB1/B,KAAKC,MAAM2M,eAAe8yB,QAAQ,oBAAgC78B,EAC1H+J,eAAe+yB,WAAW,mBAE1B,MAAMpC,EAAuB,CAC3Bl4B,kBAAmB,CAAC6M,EAAK0tB,eAAqBzoC,KAAKiJ,gBACnD2C,cAAe,IAAIy6B,KAAmB,CAACI,EAAkBC,IACzDh7B,QAAS1L,KAAK8c,GAAGwpB,MAAMnZ,GACvBzC,cAAeA,EACf5e,iBAAkB9L,KAAK8c,GAAGwpB,MAAMgC,IAElC,OAAOtoC,KAAK8c,GAAGjY,MAAMuhC,EACvB,CAEAY,qBACE94B,EAAoB,GAGpBxC,EAAoB,GAEpB48B,EAAc,CAACtoC,KAAK2xB,wBAEpB,MAAM5W,EAAMtF,eAAe8yB,QAAQ,aAAe9yB,eAAe8yB,QAAQ,aAAer6B,EACxFuH,eAAe+yB,WAAW,aAE1B,MAAMrb,EAAM1X,eAAe8yB,QAAQ,mBAAqB1/B,KAAKC,MAAM2M,eAAe8yB,QAAQ,oBAAgC78B,EAC1H+J,eAAe+yB,WAAW,mBAE1B,MAAMpC,EAAuB,CAC3Bl4B,kBAAmB,CAAC6M,EAAK0tB,eAAqBzoC,KAAKiJ,gBAEnDyC,QAAS1L,KAAK8c,GAAGwpB,MAAMnZ,GAEvBrhB,iBAAkB9L,KAAK8c,GAAGwpB,MAAMgC,IAElC,OAAOtoC,KAAK8c,GAAGjY,MAAMuhC,EACvB,CAEAsC,uBAAuB5lB,GAOrB9iB,KAAKqT,cAActD,WACnB/P,KAAKqT,cAAchD,UACnBrQ,KAAKqT,cAAc/D,qBAEnBtP,KAAKmmC,SAASzoB,cAAcoF,EAC9B,CAEA6lB,mBAAmB9uB,EAAWqH,EAAoB0nB,EAAoB,iBACpE,MAAM55B,EAAQ,CACZrI,aAAc3G,KAAKyI,OAAO3C,OAAS,EACnCc,WAAY,aACZC,WAAY,OACZsa,WAAY,CAACC,YAAa,CACxB,CACEC,aAAc,CAAC,GAAGunB,KAAa1nB,KAC/B2nB,mBAAoBhvB,KAGxB/S,mBAAoB,8BACpBC,iBAAkB,GAClBC,YAAa,CAACE,QAAS,IACvBC,eAAgB,CAACC,OAAQ,GAAIC,SAAU,KAGzCrH,KAAKqT,cAAc7D,SAASR,GAC5BhP,KAAKqT,cAActE,iBAAiBC,GAEpChP,KAAKqT,cAAcjD,WAAW,CAC5B7L,KAAM,oBACNqD,UAAW,OACX3H,SAAS,EACT4H,WAAW,EACXG,UAAU,GACT6R,GAEH,MAAMusB,EAAuB,CAC3Bl4B,kBAAmB,GAEnBtC,cAAe,IAAIy6B,KAAmB,CAAC,EAAG,KAC1C36B,QAAS1L,KAAK8c,GAAGwpB,MAAM,IAGvB5b,eAAe,EACf5e,iBAAkB9L,KAAK8c,GAAGwpB,MAAM,CAC9BtmC,KAAK2xB,yBAQT3xB,KAAKmmC,SAAS3oB,WAAW,OAAQxd,KAAK8c,GAAGjY,MAAMuhC,GACjD,CAEAI,oBACEt4B,EAAoB,GACpBjC,EAAY,GACZw6B,EAAmB,EACnBC,EAAmB,GACnBn6B,EAAS,iBAGT,MAAMwO,EAAMtF,eAAe8yB,QAAQ,aAAe9yB,eAAe8yB,QAAQ,aAAer6B,EACxFuH,eAAe+yB,WAAW,aAE1B/B,EAAwC,IAArBA,EAAyB,EAAIA,EAChDC,EAAwC,IAArBA,EAAyB,GAAKA,EAEjD,MAAMN,EAAuB,CAC3Bl4B,kBAAmB,CAAC6M,EAAK0tB,eAAqBzoC,KAAKiJ,gBACnDgD,YACAL,cAAe,IAAIy6B,KAAmB,CAACI,EAAkBC,IACzDn6B,UAEF,OAAOvM,KAAK8c,GAAGjY,MAAMuhC,EACvB,CAEA0C,WAAWjvB,EAAWqH,EAAqB,UAAW0nB,EAAoB,iBAIxE9nC,QAAQC,IAAI,eACZ,MAAMiO,EAAQ,CACZrI,aAAc3G,KAAKyI,OAAO3C,OAAS,EACnCc,WAAY,aACZC,WAAY,UACZC,mBAAoB,2BACpBqa,WAAY,CAACC,YAAa,CACtB,CACEC,aAAc,CAAC,GAAGunB,KAAa1nB,KAC/B2nB,mBAAoBhvB,KAG1B9S,iBAAkB,GAClBC,YAAa,CAACE,QAAS,IACvBC,eAAgB,CAACC,OAAQ,GAAIC,SAAU,KAIzCrH,KAAKqT,cAAc7D,SAASR,GAC5BhP,KAAKqT,cAActE,iBAAiBC,GAEpChP,KAAKqT,cAAcjD,WAAW,CAC5B7L,KAAM,UACNqD,UAAW,UACX3H,SAAS,EACT4H,WAAW,EACXC,oBAAgBC,EAChBC,UAAU,GACT6R,GAEH7Z,KAAKqT,cAAc/C,iBAAgB,EAAMuJ,EAAI,GAG7C,MAAMusB,EAAuB,CAC3Bl4B,kBAAmB,GACnBjC,UAAW,GACXL,cAAe,IAAIy6B,KAAmB,CAAC,EAAG,KAC1C95B,OAAQ,iBAGVvM,KAAKmmC,SAAS3oB,WAAW,UAAWxd,KAAK8c,GAAGjY,MAAMuhC,GACpD,CAQAzU,oBAAoBplB,EAAS,gBAM3B,OAAOvM,KAAK8c,GAAGjY,MAAM,CACnByH,KAAM,UACNC,OAAQvM,KAAK8c,GAAGE,QAAQzQ,IAE5B,CAEAw5B,iBAIE,OAAO/lC,KAAK8c,GAAGjY,MAAM,CACnByH,KAAM,SAEV,CAEAslB,2BAA2B9T,EAAc,UAAW+T,EAAmB,SAGrE,OAAO7xB,KAAK8c,GAAGjY,MAAM,CACnByH,KAAM,iBACNwR,YAAaA,EACb+T,iBAAkB7xB,KAAK8c,GAAGE,QAAQ6U,IAEtC,CAEAC,wBAAwBiX,GAQtB,MAAMx8B,EAASw8B,EAAUx8B,OAEzB,OAAQA,GACN,IAAK,mBACH,OAAOvM,KAAK8c,GAAGjY,MAAM,CACnByH,KAAM,aACNC,OAAQvM,KAAK8c,GAAGE,QAAQzQ,GACxBylB,mBAAoB,eACpB3U,WAAY,SACZC,cAAe,EACfC,UAAW,KAIf,IAAK,UACH,OAAOvd,KAAK8c,GAAGjY,MAAM,CACnByH,KAAM,aACNC,OAAQvM,KAAK8c,GAAGE,QAAQzQ,GACxBy8B,eAAgBD,EAAUC,eAC1B/8B,UAAW88B,EAAU98B,YAGzB,IAAK,SACH,OAAOjM,KAAK8c,GAAGjY,MAAM,CACnByH,KAAM,aACNC,OAAQvM,KAAK8c,GAAGE,QAAQzQ,GACxB08B,gBAAiBF,EAAUE,gBAC3BC,WAAYH,EAAUG,WACtBj9B,UAAW88B,EAAU98B,YAGzB,IAAK,YACH,OAAOjM,KAAK8c,GAAGjY,MAAM,CACnByH,KAAM,aACNC,OAAQvM,KAAK8c,GAAGE,QAAQzQ,GACxB08B,gBAAiBF,EAAUE,gBAC3BC,WAAYH,EAAUG,WACtBC,kBAAmBJ,EAAUI,oBAGjC,QACE,OAAOnpC,KAAK8c,GAAGjY,MAAM,CACnByH,KAAM,aACNC,OAAQvM,KAAK8c,GAAGE,QAAQzQ,KAKhC,CAEA68B,YAAYxhC,GAMVuQ,OAAOkxB,OAAO,CACZjN,KAAM,EACNH,IAAKxjB,SAAS6wB,eAAe,GAAG1hC,WAAoB2hC,UAAYC,GAChEC,SAAU,UAEd,CAGA7C,qBACE14B,EAAoB,GACpBrB,EAAW,QACXH,EAAW,EACXE,GAAY,EACZE,GAA6B,GAG7B,MAAMiO,EAAMtF,eAAe8yB,QAAQ,aAAe9yB,eAAe8yB,QAAQ,aAAer6B,EACxFuH,eAAe+yB,WAAW,aAE1B,MAAMpC,EAAuB,CAC3Bl4B,kBAAmB,CAAC6M,EAAK0tB,eAAqBzoC,KAAKiJ,gBACnD4D,WACAH,WACAE,YACAE,8BAEF,OAAO9M,KAAK8c,GAAGjY,MAAMuhC,EACvB,CAEAsD,YAAY7vB,EAAWqH,EAAqB,UAAW0nB,EAAoB,iBACzE9nC,QAAQC,IAAI,gBACZ,MAAMiO,EAAQ,CACZrI,aAAc3G,KAAKyI,OAAO3C,OAAS,EACnCc,WAAY,aACZC,WAAY,WACZC,mBAAoB,WACpBqa,WAAY,CAACC,YAAa,CACtB,CACEC,aAAc,CAAC,GAAGunB,KAAa1nB,KAC/B2nB,mBAAoBhvB,KAG1B9S,iBAAkB,GAClBC,YAAa,CAACE,QAAS,IACvBC,eAAgB,CAACC,OAAQ,GAAIC,SAAU,KAIzCrH,KAAKqT,cAAc7D,SAASR,GAC5BhP,KAAKqT,cAActE,iBAAiBC,GAEpChP,KAAKqT,cAAcjD,WAAW,CAC5B7L,KAAM,WACNqD,UAAW,WACX3H,SAAS,EACT4H,WAAW,EACXG,UAAU,GACT6R,GAEH7Z,KAAKqT,cAAc/C,iBAAgB,EAAMuJ,EAAI,GAG7C,MAAM8vB,EAAmB3pC,KAAK4mC,uBAE9B5mC,KAAKmmC,SAAS3oB,WAAW,WAAYmsB,EACvC,CAGA7C,iBACE54B,EAAoB,GACpBlB,EAAS,OACTC,EAAa,SAEbC,EAAa,GAGb,MAAM6N,EAAMtF,eAAe8yB,QAAQ,aAAe9yB,eAAe8yB,QAAQ,aAAer6B,EACxFuH,eAAe+yB,WAAW,aAE1B,MAAMpC,EAAuB,CAC3Bl4B,kBAAmB,CAAC6M,EAAK0tB,eAAqBzoC,KAAKiJ,gBACnD+D,SACAC,aAEAC,cAEF,OAAOlN,KAAK8c,GAAGjY,MAAMuhC,EACvB,CAEAwD,QAAQ/vB,EAAWqH,EAAqB,UAAW0nB,EAAoB,iBACrE9nC,QAAQC,IAAI,YACZ,MAAMiO,EAAQ,CACZrI,aAAc3G,KAAKyI,OAAO3C,OAAS,EACnCc,WAAY,aACZC,WAAY,OACZC,mBAAoB,OACpBqa,WAAY,CAACC,YAAa,CACtB,CACEC,aAAc,CAAC,GAAGunB,KAAa1nB,KAC/B2nB,mBAAoBhvB,KAG1B9S,iBAAkB,GAClBC,YAAa,CAACE,QAAS,IACvBC,eAAgB,CAACC,OAAQ,GAAIC,SAAU,KAIzCrH,KAAKqT,cAAc7D,SAASR,GAC5BhP,KAAKqT,cAActE,iBAAiBC,GAEpChP,KAAKqT,cAAcjD,WAAW,CAC5B7L,KAAM,OACNqD,UAAW,OACX3H,SAAS,EACT4H,WAAW,EACXG,UAAU,GACT6R,GAEH7Z,KAAKqT,cAAc/C,iBAAgB,EAAMuJ,EAAI,GAI7C,MAAM8vB,EAAmB3pC,KAAK8mC,mBAE9B9mC,KAAKmmC,SAAS3oB,WAAW,OAAQmsB,EACnC,CAGAvC,oBACEl5B,EAAoB,GACpBxC,EAAU1L,KAAK8c,GAAGwpB,MAAM,IACxBx6B,EAAmB9L,KAAK8c,GAAGwpB,MAAM,CAACtmC,KAAK2xB,yBAGvC,MAAM5W,EAAMtF,eAAe8yB,QAAQ,aAAe9yB,eAAe8yB,QAAQ,aAAer6B,EASxF,OARAuH,eAAe+yB,WAAW,aAQnBxoC,KAAK8c,GAAGjY,MANc,CAC3BqJ,kBAAmB6M,EACnBrP,QAASA,EACTI,iBAAkBA,GAItB,CAEA+9B,WAAWhwB,EAAW+uB,EAAoB,iBAAkBkB,EAAsB,oBAAqBxoB,EAAsB,kBAC3HxgB,QAAQC,IAAI,cACZ,MAAMiO,EAAQ,CACZrI,aAAc3G,KAAKyI,OAAO3C,OAAS,EACnCc,WAAY,aACZC,WAAY,6BACZC,mBAAoB,6BACpBqa,WAAY,CAACC,YAAa,CACtB,CACEC,aAAc,CAAC,GAAGunB,KAAakB,IAAc,GAAGlB,KAAatnB,KAC7DunB,mBAAoBhvB,KAG1B9S,iBAAkB,GAClBC,YAAa,CAAC,CAACC,MAAO,gBAAiBC,QAAS,KAChDC,eAAgB,CAACC,OAAQ,GAAIC,SAAU,KAGzCrH,KAAKqT,cAAc7D,SAASR,GAC5BhP,KAAKqT,cAActE,iBAAiBC,GAEpChP,KAAKqT,cAAcjD,WAAW,CAC5B7L,KAAM,6BACNqD,UAAW,6BACX3H,SAAS,EACT4H,WAAW,EACXC,oBAAgBC,EAChBC,UAAU,GACT6R,GACH7Z,KAAKqT,cAAc/C,iBAAgB,EAAMuJ,EAAI,GAE7C,MAAM8vB,EAAmB3pC,KAAKonC,sBAE9BpnC,KAAKmmC,SAAS3oB,WAAW,UAAWmsB,EACtC,CAYAzC,mBACE34B,EAAe,GACflB,EAAyB,GACzBC,EAAqC,GACrCE,EAA4C,KAC5CE,EAA6B,EAC7BI,EAAkC,GAClCF,EAAiC,IAGjC,MAAMmN,EAAMtF,eAAe8yB,QAAQ,aAAe9yB,eAAe8yB,QAAQ,aAAeh6B,EAaxF,OAZAkH,eAAe+yB,WAAW,aAYnBxoC,KAAK8c,GAAGjY,MAVc,CAC3B0J,aAAcwM,EACdnP,cAAeyB,EACfE,yBAA0BD,EAC1BG,yBAA0BD,EAC1BG,kBAAmBD,EACnB+0B,uBAAwB30B,EACxBD,qBAAsBD,GAI1B,CAGAm8B,qBAEE/pC,KAAKgqC,mBAAqB,IAAIhqC,KAAK6tB,UAAUztB,OAIzCJ,KAAK4K,YAMP5K,KAAKqO,iBAAiB1D,YAAY3K,KAAK4K,WALxB,CACbkjB,MAAO9tB,KAAKgqC,mBAAmBlc,MAC/BF,eAAgB5tB,KAAKgqC,mBAAmBzlC,OAGiBpE,UAAWuK,OAKxE1K,KAAKoT,aAAa4D,YACpB,EAryDW0rB,SAAoB,oCAApBA,GAAoB1hC,qHAApB0hC,EAAoB,sBAApBA,EAAoBhjC,ymVD9CjCC,wBAMAA,2CA23BAA,4CA0EAA,mDA38BMA,wBAMiBA,82ICwCV+iC,CAAoB,+BC1C7B/iC,cACEA,SACFA,kCADEA,2BCQN,MAAMsqC,GAAiB,CACrB,CACEC,KAAM,iBACNC,UAAWzoC,GACXpB,KAAM,CAACmT,MAAO,uBAEhB,CACEy2B,KAAM,YACNC,UAAW5qC,GACXe,KAAM,CAACmT,MAAO,6BAEhB,CACEy2B,KAAM,WACNC,UAAWrqC,GACXQ,KAAM,CAACmT,MAAO,4BAEhB,CACEy2B,KAAM,qBACNC,UAAW1jC,GACXnG,KAAM,CAACmT,MAAO,kCAEhB,CACEy2B,KAAM,eACNC,UAAWvyB,GACXtX,KAAM,CAACmT,MAAO,4BAEhB,CACEy2B,KAAM,QACNC,UC/B+B,MAA7B,MAAOC,EASX5qC,YACU6T,wBARVrT,iBAAkCA,KAAKqT,cAAcmL,YACrDxe,gBAAa,GAEbA,kBAAe,GAEfA,kBAAe,IAAIue,IAKnB,CAEA9e,WACEO,KAAKwe,YAAY7U,QAAKqX,KAAUhhB,KAAKihB,eAAe9gB,UAAUC,IAC5DU,QAAQC,IAAI,cAAcX,KAC1BJ,KAAK4K,WAAaxK,EAClBJ,KAAKqqC,aAAe,YAAYrqC,KAAK4K,6BAGzC,EArBWw/B,SAAsB,oCAAtBA,GAAsBppC,WAAtBopC,EAAsB,sBAAtBA,EAAsB1qC,sMCTnCC,iBAAgD,UAAhDA,CAAgD,OAG5CA,SACAA,QACAA,eACEA,kBACFA,mBAJAA,+HDMSyqC,CAAsB,KDgC/B9pC,KAAM,CAACmT,MAAO,wBAEhB,CACEy2B,KAAM,OACNC,UAAWl3B,GACX3S,KAAM,CAACmT,MAAO,+BAEhB,CACEy2B,KAAM,WACNC,UAAWzH,IAEb,CACEwH,KAAM,eACNC,UAAWzH,IAEb,CACEwH,KAAM,gCACNC,UAAWzH,IAEb,CACEwH,KAAM,WACNC,UGpDyB,MAAvB,MAAOG,EAWX9qC,YACUO,eAVVC,cAAmB,EAKnBA,iBAAsB,GACtBA,gBAAuB,EAKnB,CAEJP,WACEO,KAAKuqC,gBACP,CAEAA,iBACEvqC,KAAKC,SAAU,EAGfD,KAAKD,KAAKG,IADE,kCACO,CAACmY,aAAc,SAASlY,UAAUC,IACnDU,QAAQC,IAAIX,GACZJ,KAAKwqC,YAAcpqC,EACnBJ,KAAKyqC,WAAarqC,EAAMmX,MAAM,MAiB9BvX,KAAKC,SAAU,GAEnB,EA7CWqqC,SAAgB,oCAAhBA,GAAgBtpC,cAAhBspC,EAAgB,sBAAhBA,EAAgB5qC,gJJX7BC,iBAA8C,SAI1CA,uBAGFA,iBAHoBA,iIIOT2qC,CAAgB,KHqDzBhqC,KAAM,CAACmT,MAAO,sBAEhB,CACEy2B,KAAM,GACNC,UAAWl3B,GACX3S,KAAM,CAACmT,MAAO,+BAEhB,CAAEy2B,KAAM,KAAMQ,WAAY,KAOrB,IAAMC,GAAgB,MAAvB,MAAOA,YAAgB,oCAAhBA,EAAgB,EAAhBA,EAAgB,sBAAhBA,MAAgB,0BAHjBC,aAAqBX,IACrBW,QAECD,CAAgB,6DI/D3BhrC,iBAA0B,UAEtBA,qBACFA,UAMFA,iBAAwB,UAEpBA,oMACkDA,gBAAuBA,0BAAcA,YAG3FA,kBAA0B,eAC8BA,2DAASA,kBAAqB,GAAEA,mBAAMA,SAAS,gCCrBlG,IAAMkrC,GAAe,MAAtB,MAAOA,EAOXrrC,cAEI,CAEJC,WACA,CAEAqrC,mBACE9qC,KAAK+qC,gBAAgBD,kBACvB,EAhBWD,SAAe,oCAAfA,EAAe,EAAfA,EAAe,sBAAfA,EAAenrC,koBDV5BC,oBAAqE,UAArEA,CAAqE,YAG/DA,8BAAcA,eAAgDA,qBAASA,QAAKA,eAC5EA,eAAgCA,mBAAOA,QAAKA,eAC5CA,gBAAqBA,gCAAS6G,oBAAkB,GAAE7G,6BAAgBA,cASxEA,oDATSA,o9CCKIkrC,CAAe,KCHfG,GAAsB,MAA7B,MAAOA,EACXxrC,cAAe,CACRyrC,aAAaC,EAAmBC,EAAuBC,EAAqBC,EAAoBC,GACrGC,KAAK,QAASL,EAAW,CACvBC,gBACAE,aACAD,cACAE,cAEJ,EATWN,SAAsB,oCAAtBA,EAAsB,EAAtBA,EAAsB,wBAAtBA,EAAsBh9B,QAAtBg9B,EAAsB,qBAFrB,SAEDA,CAAsB,KCFtBQ,GAAa,MAApB,MAAOA,EAHbhsC,cAIEQ,sBAA2B,GADhBwrC,SAAa,oCAAbA,EAAa,EAAbA,EAAa,wBAAbA,EAAax9B,QAAbw9B,EAAa,qBAFZ,SAEDA,CAAa,8CCHtB7rC,uBACWA,0DAAUA,eAAM,GACzBA,iBAA+C,UACnBA,4BAAgBA,QAC1CA,eACEA,iPAEOA,eACmBA,0BAAcA,UAG1CA,iBAAsB,cACEA,kDAAS8rC,gBAAQ9rC,yBAAgB,GAAK,GAE1DA,2CACFA,QACAA,qBAAsBA,kDAAS+rC,kBAAU/rC,yBAAgB,GAAK,GAE5DA,iCACFA,aAAS,MAnBkEA,qBCe9E,IAAMgsC,GAAqB,MAA5B,MAAOA,EAEXnsC,YAAoBqY,EAAwB+zB,EAAuDC,EAAsCjiB,GAArH5pB,cAAwBA,8BAAuDA,qBAAsCA,oBAClIA,iBAAa,CAD2I,CAI/JP,WAEMO,KAAK8rC,kBAEP9rC,KAAK+rC,UAIL/rC,KAAKgsC,OACLhsC,KAAK6rC,cAAcI,iBAAkB,EACrCjsC,KAAKksC,YAAa,EAEtB,CAEOpB,mBACL9qC,KAAKksC,YAAa,CACpB,CAGOC,aACL,IAAIvzB,EAAuBH,SAASG,KAChCwzB,EAAS3zB,SAASC,cAAc,UACpC0zB,EAAOC,UAAY,GACnBD,EAAOE,IAAM,2DACbF,EAAOG,OAAQ,EACfH,EAAOI,OAAQ,EACf5zB,EAAKC,YAAYuzB,EACnB,CAEOJ,OACLhsC,KAAK6rC,cAAcI,iBAAkB,EACrCjsC,KAAKysC,aAAa,OAClBzsC,KAAKysC,aAAa,kBAClBzsC,KAAK0sC,YAAW,GAChB1sC,KAAKksC,YAAa,CACpB,CAEOH,SACL/rC,KAAK6X,OAAOyT,OAAOnrB,UAAUsyB,IACvBA,aAAiBka,aACRpB,KAAS,KAClBA,KAAK,SAAU,eAAgB,CAC7BqB,WAAYna,EAAMoa,kBAClBC,cAAera,EAAMoa,kBACrBE,UAAWta,EAAMoa,mBAClB,GAIP7sC,KAAKmsC,aACLnsC,KAAK4rC,uBAAuBX,aAAajrC,KAAK4pB,aAAaojB,WAAY70B,OAAOhF,SAAS2F,KAAM,QAAS,QAAS,GAC/G9Y,KAAK6rC,cAAcI,iBAAkB,EACrCjsC,KAAK0sC,YAAW,GAEhB1sC,KAAKksC,YAAa,CACpB,CAEOe,kBACFjtC,KAAKktC,cACNltC,KAAK4rC,uBAAuBX,aAAa,UAAW,UAAW,UAAW,UAAW,EACzF,CAEOa,kBAEL,MAAiD,SAA1CqB,aAAa5E,QAAQ,gBAE9B,CAEO6E,gBAAgBhtC,GACrB+sC,aAAaz3B,QAAQ,gBAAiBtV,EAAQ,OAAS,QACzD,CAEO8sC,aAEL,MAAqD,SAA9CC,aAAa5E,QAAQ,oBAE9B,CAEOmE,WAAWtsC,GAChB+sC,aAAaz3B,QAAQ,oBAAqBtV,EAAQ,OAAS,QAC7D,CAEQqsC,aAAaloC,GACnBvE,KAAKqtC,UAAU9oC,EAAM,IAAI,EAC3B,CAEQ8oC,UAAU9oC,EAAcnE,EAAektC,EAAoBpD,EAAe,WAChF,IAAIhkC,EAAU,IAAIqnC,KAClBrnC,EAAEsnC,QAAQtnC,EAAEunC,UAAyB,GAAbH,EAAkB,GAAK,GAAK,KACpD,IAAII,EAAkB,WAAWxnC,EAAEynC,gBAC/B7O,EAAkB,YAES,aAA5B3mB,OAAOhF,SAASy6B,WAGb9O,EAAS,YAGfrmB,SAASo1B,OAAS,GAAGtpC,KAAQnE,MAAUstC,IADnBxD,EAAO,UAAUA,aAAgBpL,IAAW,IAElE,EAzGW6M,SAAqB,oCAArBA,GAAqB3qC,8CAArB2qC,EAAqB,sBAArBA,EAAqBjsC,kDAFrB,CAACsrC,MAAuB8C,0kBDfrCnuC,iBAAuB,SAEnBA,+BAuBFA,iBAvB2DA,6oBCehDgsC,CAAqB,4OCN3B,IAAMoC,GAAe,MAAtB,MAAOA,EAIXvuC,cAHAQ,eATM,uCAUNA,aAAkB,CAEH,EAJJ+tC,SAAe,oCAAfA,EAAe,EAAfA,EAAe,sBAAfA,EAAeruC,yuDCX5BC,iBAAuC,UAAvCA,CAAuC,UAAvCA,CAAuC,cAK/BA,kBACFA,QACAA,iBAAkE,SAAlEA,CAAkE,OAAlEA,CAAkE,SAI1DA,iBAEFA,YAIJA,iBAAsD,WAAtDA,CAAsD,WAMhDA,oBACFA,QACAA,mBAAwF,WACJA,yCACxEA,QACVA,iBAAsFA,qBAAQA,QAC9FA,iBAAuFA,sBAASA,QAChGA,iBAAmFA,kBACjFA,mBACFA,QACAA,iBAAuFA,wCAErFA,mBACFA,QACAA,iBAAwFA,uCAEtFA,mBACFA,QAEAA,mBACAA,iBAAsDA,2BAAcA,YAGxEA,kBAA8B,WAK1BA,0BACFA,QACAA,mBAAwF,WAE1BA,gCAAmBA,QAC/EA,iBAA0EA,oBAAOA,QAEjFA,iBAAgDA,oBAAOA,QACvDA,iBAAoDA,sBAASA,QAC7DA,iBAA0DA,8BAAiBA,6BAjDtEA,wCAeoBA,yCAA0B,4BAE1BA,yCAA0B,4BAC1BA,yCAA0B,4BAC1BA,yCAA0B,4BAG1BA,yCAA0B,4BAI1BA,yCAA0B,kgDD1BpDouC,CAAe,KEDfC,GAAY,MAAnB,MAAOA,EACXxuC,YACUqY,EACA+R,GADA5pB,cACAA,mBACP,CAEHP,WACEO,KAAK6X,OAAOyT,OACT3hB,QACCskC,MAAQxb,GAAUA,aAAiBka,OAAa,EAChD1mC,MAAI,KACF,IAAIiN,EAAwBlT,KAAK6X,OAAOq2B,YAAYC,KAChDC,EAAa,GACjB,KAAOl7B,EAAOm7B,YACZn7B,EAAQA,EAAMm7B,WAEhB,OAAIn7B,EAAMo7B,SAAShuC,KAAKmT,QACtB26B,EAAal7B,EAAOo7B,SAAShuC,KAAKmT,OAE7B26B,KAGVjuC,UAAWsT,IACNA,GACFzT,KAAK4pB,aAAaoZ,SAAS,GAAGvvB,IAAO,EAG7C,EA3BWu6B,SAAY,oCAAZA,GAAYhtC,0BAAZgtC,EAAY,sBAAZA,EAAYtuC,2HCVzBC,sBAAyB,kBAAzBA,CAAyB,iBAAzBA,CAAyB,oDAEbA,qEDQCquC,CAAY,oBE2HlB,IAAMO,GAAS,MAAhB,MAAOA,YAAS,oCAATA,EAAS,EAATA,EAAS,sBAATA,EAASC,WAFRR,MAEDO,EAAS,2BAHT,CAACE,MAAMC,SAzBhBC,KACAC,KAEAjE,GACAkE,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,MACAC,MACAC,KACAC,KACAC,MACAC,KACAC,QAKSzB,CAAS,MC7HlB3uC,EACFqwC,SACA93B,OAAOrX,QAAQC,IAAM,OAGvBmvC,OAAyBC,gBAAgB5B,IACtC6B,MAAMnN,GAAOniC,QAAQwU,MAAM2tB","names":["BenchmarkComponent","constructor","ngOnInit","selectors","i0","environment","NgxGoogleAnalyticsModule","CitationComponent","http","this","loading","get","subscribe","value","citations","data","uniq","_","c","includes","grouping_title","groupedCitations","push","console","log","core","KeysPipe","transform","Object","keys","pure","tagPipe","replace","str","toUpperCase","ToolsListComponent","formBuilder","structure3D","allele7","alleleFrequency","antibody","bCell","BCR","bindingAffinity","cancer","CD4","CD8","conservation","dataVisualization","deimmunization","elutedLigand","epitope","geneExpression","hlaAssociation","humoralImmunity","immunogenicity","mhcI","mhcII","modeling","molecularDocking","neoepitope","nonPeptidic","PDB","peptideSimilarity","population","proteinStructure","proteomeSearch","protrusion","responseFrequency","rnaExpression","smallMolecule","synthesis","tCell","tapProcessing","TCR","transcription","unwantedImmuneResponse","VCF","queryParams","tool","name","tags","count","routerLink","url","toolsListForm","group","initialTags","firstTools","tools","slice","legacyTools","sortedTools","concat","countsForSelectedTools","onChange","valueChanges","val","selectedTools","horizontalDivider","selectedTags","v","k","length","tempSelectedTools","tag","map","d","fool","mostcount","deSelectAllTags","e","reset","ctx","ToolContributionComponent","initTCellPredictionState","stage_number","stage_type","tool_group","stage_display_name","input_parameters","table_state","table","columns","stage_messages","errors","warnings","initClusterState","initPepMatchState","initPepXState","initPeptideBindingComparisonState","initMutatedPeptideGeneratorState","initTCellPredictionTool","toolGroup","submitted","appliedFilters","undefined","disabled","initClusterTool","initPepmatchTool","initPepxTool","initPeptideBindingComparisonTool","initMutatedPeptideGeneratorTool","initParams","pipeline_id","run_stage_range","stages","isASCII","test","IsJsonString","JSON","parse","ltrim","isMaxLength","maxCharacters","StateService","state","state$","getValue","initialState","BehaviorSubject","select","mapFn","asObservable","pipe","distinctUntilChanged","setState","newState","next","API_URL","PIPELINE_SPEC_API_URL","HttpParams","PipelineService","currentPipelineId","_currentPipelineId","postPipeline","stringify","post","tap","resp","putPipeline","pipelineId","put","getPipeline","getPipelineSpec","pipelineSpecId","getResults","result_url","convertTCellForm","tCellForm","selectedAlleles","allele","label","join","break_peptides","alleles","peptide_length_range","peptideLength","predictors","predictionModels","convertClusterForm","clusterForm","threshold","getRawValue","minimum_len","maximum_len","cluster_pct_identity","type","method","convertPepmatchForm","form","mismatch","best_match","bestMatch","proteome","include_unmatched_peptides","convertPepxForm","qlevel","datasource","dataset_id","convertPepcompForm","convertMutgenForm","peptide_length","peptide_mutation_position1","peptideMutationPosition1","peptide_mutation_position2","peptideMutationPosition2","frameshift_overlap","frameshiftOverlap","maximum_peptide_length","maximumPeptideLength","min_len_near_start_stop","reference_genome","factory","pipeline_spec_id","inputSequenceText","params","PipelineStateService","_pipelineService","super","inputVcfText","stages$","tools$","setParams","setPipelineId","setPipelineSpecId","setPipelineIdToParams","setStagesToParams","addStageToParams","stage","insertStageToParams","index","applyFiltersToParams","stageIndex","stageTemp","popStageFromParams","pop","addStage","setStages","changeResultUrl","setInitialStage","insertStage","insertTableStateToStage","insertInputParametersToStage","popStage","setTools","setInitialTool","copy","assign","insertTool","popTool","setToolDisabled","tempTool","setToolLoading","setToolAppliedFilters","insertInputDataUriToTool","input_data_uri","setInputSequenceText","setInputVcfText","ALLELE_SEARCH_API_URL","PARAMS","AlleleSearchService","search","term","of","set","new_search_api_url","response","AnnouncementService","getAnnouncements","AlertServiceService","add","message","alertType","messages","colors","clear","displayMessage","AlertComponentComponent","alertService","DndDirectiveDirective","EventEmitter","onDragOver","evt","preventDefault","stopPropagation","_fileOver","onDragLeave","ondrop","files","dataTransfer","fileDropped","emit","ctx_r37","HomeComponent","route","location","modalService","_stateService","_service","_announcementService","UntypedFormGroup","title","text$","debounceTime","searching","switchMap","searchFailed","catchError","result","synonyms","sequences","bCellForm","onFileDropped","$event","file","fileSize","size","open","alertModal","prepareSequenceFileList","reader","FileReader","myForm","item","readAsText","onload","toString","patchValue","toLocaleString","onerror","error","progress","runTCellPrediction","sessionStorage","setItem","selectedAlleleLabels","o","selectedModalAlleleLabels","modalAlleles","inputFormatter","onAlleleSelect","input","selectedAllele","onAlleleSelectModal","onBlurAlleleSelect","placeholder","labels","content","ariaLabelledBy","animation","backdrop","then","reason","onOpenAlleleModal","alleleModal","dismissAlleleModal","dismissAll","onAlleleClear","onAlleleDeselect","a","onAlleleDeselectModal","generate27Alleles","alleleData","split","synonym","score","onSubmitModalAlleles","onAlleleClearModal","DownloadAllComponent","router","activatedRoute","selectedTool","getCurrentNavigation","extras","onAgreeAndDownload","window","downloadNonProfit","responseType","downLoadFile","blob","Blob","document","createElement","setAttribute","body","appendChild","href","URL","createObjectURL","download","click","downloadDTU","onCsvDownloadAllClickedNew","extension","tableType","headers","HttpHeaders","append","columnListToObject","colObj","col","i","value_limits","selectedValues","key","filterKey","searchString","source","minValue","maxValue","min","max","SequenceParserService","fastaParser","fastaTexts","filteredSequences","sequenceArray","shift","numOfAA","seq","newObj","getFirstLine","getSequence","seqFormat","fastaValidate","invalid","alphabetRegexp","RegExp","jsonParser","jsonTexts","parseObj","Array","isArray","sequence","namedWhiteSpaceParser2","inputString","line","arr","namedWhiteSpaceValidate","separator","regexp1","regexp2","unnamedWhiteSpaceValidate","regexp","text","indexOf","NaN","substring","MhcBindingFormgroupComponent","controlContainer","fb","ogFormGroup","control","onCancelClick","emitPredictionModelIndex","modelIndex","addProcessingFormGroup","proteasome","tap_precursor","tap_alpha","addControl","removeProcessingFormGroup","removeControl","onAddProcessingChange","addProcessing","PmhcImmunogenicityFormgroupComponent","mask_choice","controls","ctx_r25","ctx_r28","ctx_r45","ctx_r47","ctx_r52","ResultTableComponent","papa","Subject","pipelineId$","currentOrder","order","dtOptions","dom","autoWidth","pagingType","paging","pageLength","ordering","orderMulti","stateSave","language","lengthMenu","info","infoFiltered","table_data","columnDefs","column","targets","createdCell","td","cellData","rowData","row","textAlign","$","css","visible","hidden","render","isNaN","parseInt","number_of_digits","parseFloat","toFixed","destroy","deferRender","orderClasses","searchCols","takeUntil","unsubscribe$","dataToPipe","piped_data","piped_input","piped_fields","dataToPipe2","tableIndex","from","table_name","regex","smart","applied","ngAfterViewInit","setColumnDisplayForm","dtTrigger","ngOnDestroy","unsubscribe","complete","visibleColumns","onOpenDisplayColumnModal","prevColumnDisplayFormValue","columnDisplayForm","disableSortedColumnInputs","disableInputColumns","displayColumnModal","enable","dtElement","dtInstance","colIndex","formControlName","disable","dismissModal","onSetDisplayColumns","invisibleColumns","controlConfig","uniqSources","fn","dataTable","ext","settings","dataIndex","nTable","id","defaultColumnConfig","onDefaultColumns","stopProp","onSortColumns","draw","onFilterDropdownOpen","removeClass","prop","onFilterDropdownClose","addClass","checkClosedDropdown","checkOpenedDropdown","dropdown","dropdowns","isOpen","setMinAndMax","that","every","sortFunc","dataSrc","b","distinctArray","sort","each","j","possibleValues","onClearNumberFilter","emitFilterApplied","onNumberFilter","onFilterPossibleValues","target","onClearTextFilter","onTextFilter","createRegexSafe","onCheckSelectAllTextValue","checked","onTextValueSelect","possibleValue","clearTableState","emitResetTableState","unSubmittedTool","onSaveTableState","emitSaveTableState","downloadResultFiles","format","fileName","convertCurrentResultToJSON","obj","display_name","convertCurrentResultToJSON2","visible_columns","downloadAllTsv","lodashOrder","convertDTOrderToLodash","sortedData","csvData","unparse","delimiter","downloadAllCsv","downloadAllJSON","downloadTSV","peptide_table","rows","page","downloadCSV","downloadJSON","tempVal","temp1","temp2","DataTableDirective","NgbDropdown","MhcIProcessingFormgroupNewComponent","floor","ceil","step","ticksArray","showTicksValues","translate","ngOnChanges","changes","currentValue","options","options2","options3","has_ice50","processingOptions","short_name","has_ic50","processingMethod","onMethodChange","setControl","modal4_r153","confirmModal_r156","TCellPredictionComponent","_alleleSearchService","rootFormGroup","titleService","sequenceParserService","params$","input_sequence_text","lengths","stepsArray","sequence_list_json_uri","sequence_list_fasta_uri","download_sequences","Subscription","isDevMode","getMHCIList","formGroupName","peptideLengthSliderOptions","breakPeptides","pipelineUrl","origin","errorMessages","warningMessages","inputSequenceTextId","input_sequence_text_id","synthesisDownloadLinks","clearInterval","runSetInterval","pipelineLoading","eventsSubscription","events","onRunMain","runAllSubscription","runAllEvent","onRunAll","onChanges","sequenceParser","setTimeout","history","run","resultUrl","getResultsSetInterval","stageAlleles","stagePeptideLengthRange","range","start","end","fill","mhciLoading","mhciPredictors","predictionOptions","basicProcessingPredictionOption","setDefaultFormValues","emitIndex","hasResult","confirmModal","getResultsClicked","onRun","onRun2","all","sarsSampleData","setValue","patchValues","onRunConfirm","initTool","indicies","saveState","inputParameters","pipeline_title","emailForm","email","loadingTCellPredictionTool","postPipelineAPI","input_stage_number","initialStage","initToolLoading","residue_table_order","residue_table_columns","residue_table","sequence_table","allele_distances_table","processingPlots","inputChange","increment","setInterval","status","submittedTool","enableInputs","defaultOrder","results","active","table_columns","default_order","Number","isFinite","row_sort_priority","tempSource","textValue","allele_distances_table_columns","setValueLimits","peptide_table_columns","peptide_table_order","sequence_table_columns","sequence_table_order","all_plots_uri","selectedSeqNumPlots","searchParams","selectedLengthPlots","selectedAllelePlots","sequenceNumbers","sequence_numbers","urls","plot","thresholdInput","prevTool","submittedTCellPredictionTool","unique_values","disableInputs","tableStateSaving","go","results_uri","onSaveTableStateMain","onFilterApplied","onClearTableState","onCancel","emitOnCancel","onReset","oldSequence","emitEvent","initPredictor","pm","mhcBindingFormGroup","pmhcImmunogencityFormGroup","position_to_mask","mhcIProcessingFormGroup","mhcIProcessingNewFormGroup","mhc_binding_method","mhcINPNewFormGroup","onDownloadJson","onDownloadFasta","onDownloadOriginal","onBlurAlleleSelectModal","removeAt","onAlleleDeselect2","dropPredictionModel","event","previousIndex","currentIndex","at","insert","setInputChangePredictors","removePredictorByIndex","addpredictionModel","addPmhcImmungencityFormGroup","addMhcIProcessingNewFormGroup","addMhcNPFormGroup","styleResultContainer","formUrl","onDownloadParameter","uploadSequenceFile","uploadParameterFile","firstChar","firstLine","firstLineNumOfElements","slicedVal","numOfCharacters","onLengthChange","changeContext","sequenceFieldChange","debounce","timer","modalOpen","alleleSearch","nativeElement","focus","onErrorMessageDeselect","splice","em","onWarningMessageDeselect","wm","changePlotThreshold","tempUrl","changePlotsBySequence","newUrl","plotLoading","changePlotsByAllele","changePlotsByLength","DashToDecimalPipe","D3ForceComponent","_data","htmlElement","element","host","d3","buildSVG","links","buildForce","html","zoom","scaleExtent","on","svg","attr","width","height","call","link","nodes","cluster","simulation","values","force","strength","selectAll","enter","style","node","currentTarget","transition","duration","dragstarted","alphaTarget","restart","subject","fx","x","fy","y","dragged","dragended","circle","populateForce","onFilterGraph","show","hide","confirmModal_r71","ClusterComponent","showTicks","num","legend","minRange","noSwitching","uniqueClusters","graph_data","onThresholdChange","submittedClusterTool","showEmailModal","emailModal","pipelineData","loadingClusterTool","filters","onShowEmailModalChange","shoeEmailModalChange","sendNotification","thresholdSliderOptions","peptideLengthOptions","confirmModal_r66","PepmatchComponent","getPepmatch","pepmatchForm","pepmatchLoading","proteomeOptions","optional_parameters","choice","pepmatchData","replaceState","onNumOfMismatchesChange","confirmModal_r81","PepxComponent","quantitation_level","data_source","table_state_1","table_state_2","pepxForm","getPepx","quantitationLevel","datasetLoading","datasourceLoading","dataSets","datasets","datasources","pepxData","onFilterApplied2","onClearTable2State","peptide_gene_columns","onSaveTable2State","onSaveTable1State","colObj2","peptide_gene_summary_table","onDataSourceChange","onQuantitationLevelChange","loadingTool","peptide_table_defaultOrder","peptide_table_currentOrder","peptide_gene_defaultOrder","peptide_gene_currentOrder","D3PlotComponent","top","right","bottom","left","margin","plotData","series","series_name","selectedSeries","uniqueAlleles","createSvg","drawPlot","selected","updateChart","newX","rescaleX","newY","rescaleY","scaleMultiplier","scale","xAxis","yAxis","dots","peptidea","peptideb","x1","y1","x2","y2","strokeWidth","lineX","lineY","plottedPoints","x_values","y_values","x_labels","y_labels","x_val","y_val","x_lab","y_lab","sequenceA","sequenceB","tooltip","seqTooltip","domain","x_range","x_title","y_range","y_title","lineData","lineDataY","lineDataX","mouseover","n","mousemove","pageX","pageY","mouseleave","extent","lower","onAllelePlotChange","remove","onSeriesPlotChange","modal4_r115","confirmModal_r118","PeptideVariantComparisonComponent","Framework","Stars","Released","pepcompForm","pepCompSampleData","indexA","indexB","scatterPlotData","plot_data","isMaxLines","maxNoLines","String","match","modal4_r70","confirmModal_r73","MutatedPeptideGeneratorComponent","hideLimitLabels","vcf_download_uri","defaultInputVcfText","mutgenForm","input_vcf_text_id","input_vcf_text","prepareGzipFileList","maxLines","readAsArrayBuffer","pako","to","onFrameshiftOverlapChange","onMaximumPeptideLengthChange","onPeptideMutationPosition1Change","onPeptideMutationPosition2Change","snp_table","snp_table_columns","snp_table_order","unique_peptide_table_columns","unique_peptide_table_order","unique_peptide_table","minLengthNearStartStop","PipelineNewComponent","$gaService","pipelineSpecId$","enabled","navigate","initPipeline","setTitle","err","specId","pipeline_params","fetchValidSteps","setInitialForm","paramsString","pipelineSpecUrl","queryParamMap","data1","setInitialStageAndToolGroup","emitEventToChild","runTCellSubject","runClusterSubject","runPepmatchSubject","runPepxSubject","runPepcompSubject","runMutgenSubject","emitRunAllToChild","runAllTCellSubject","runAllClusterSubject","runAllPepmatchSubject","runAllPepxSubject","runAllPepcompSubject","runAllMutgenSubject","generateStage","stage_result_uri","generateTool","finalStages","paramStages","finalTools","newStage","newTool","setClusterFormGroup","setClusterFormGroup2","setMhciFormGroup","setMhciFormGroup2","setPepmatchFormGroup","setPepmatchFormGroup2","setPepXFormGroup","setPepXFormGroup2","setPepCompFormGroup","setPepCompFormGroup2","setMutGenFormGroup","allelesFormatted","predictorsFormatted","p","mhcNpFormGroup","root_config","mhci","addTCellPredictionFormGroup","rootForm","initialControlConfig","UntypedFormControl","array","fg","addClusterFormGroup","minPeptideLength","maxPeptideLength","pepmatch","addPepmatchFormGroup","pepx","addPepXFormGroup","pepcomp","initPepCompFormGroup","mutgen","addMutGenFormGroup","addedToolGroups","addPepCompFormGroup","initState","selectedAlleles2","predictionModels2","clusterMinPeptideLength","clusterMaxPeptideLength","debug","onCancelRuns","cancel_run","cancelTool","onShowEmailChange","onOpenEmailModal","tCellData","clusterData","pepmatchiData","peptideBindingComparisonData","s","validSteps","predictions","getItem","removeItem","Validators","removeToolFromPipeline","addTCellPrediction","tableName","piped_stage_number","addCluster","predictor","network_method","cleavage_weight","tap_weight","epitope_threshold","onGoToStage","scroll","getElementById","offsetTop","navbarHeight","behavior","addPepmatch","defaultFormGroup","addPepX","addPepComp","dataToPipe1","onSubmitEmailModal","submittedEmailForm","routes","path","component","PipelineErrorComponent","errorMessage","VersionComponent","getVersionInfo","versionInfo","versionArr","redirectTo","AppRoutingModule","RouterModule","FooterComponent","showCookieDialog","cookieComponent","GoogleAnalyticsService","eventEmitter","eventName","eventCategory","eventAction","eventLabel","eventValue","gtag","SharedService","ctx_r3","ctx_r4","CookieDialogComponent","googleAnalyticsService","sharedService","getUserAnswered","accept","deny","acceptedConsent","closePopup","loadScript","script","innerHTML","src","async","defer","deleteCookie","setConsent","NavigationEnd","page_title","urlAfterRedirects","page_location","page_path","getTitle","contactFormUsed","getConsent","localStorage","setUserAnswered","setCookie","expireDays","Date","setTime","getTime","expires","toUTCString","hostname","cookie","decls","NavbarComponent","AppComponent","filter","routerState","root","routeTitle","firstChild","snapshot","AppModule","bootstrap","Title","imports","BrowserModule","HttpClientModule","DragDropModule","FormsModule","ReactiveFormsModule","DataTablesModule","NgbAlertModule","NgbTypeaheadModule","NgbAccordionModule","NgbDropdownModule","NgbTooltipModule","NgbPopoverModule","NgbNavModule","NgbToastModule","NgxSliderModule","BrowserAnimationsModule","MatSidenavModule","MatMenuModule","MatChipsModule","MatIconModule","ClipboardModule","NgbModule","enableProdMode","__NgCli_bootstrap_1","bootstrapModule","catch"],"sourceRoot":"webpack:///","sources":["./src/app/benchmark/benchmark.component.ts","./src/app/benchmark/benchmark.component.html","./src/environments/environment.prod.ts","./src/app/citation/citation.component.html","./src/app/citation/citation.component.ts","./src/app/_pipes/keys.pipe.ts","./src/app/_pipes/tag.pipe.ts","./src/app/tools-list/tools-list.component.html","./src/app/tools-list/tools-list.component.ts","./src/app/tool-contribution/tool-contribution.component.ts","./src/app/tool-contribution/tool-contribution.component.html","./src/app/services/state-services/default-stage-states.ts","./src/app/util/string-helpers.ts","./src/app/util/is-max-length.ts","./src/app/services/state-services/state.service.ts","./src/app/services/pipeline-service/pipeline.service.ts","./src/app/services/state-services/pipeline-state-service/pipeline-state.service.ts","./src/app/services/allele-search/allele-search.service.ts","./src/app/services/announcement-service/announcement-service.service.ts","./src/app/services/alert-service/alert-service.service.ts","./src/app/alert-component/alert-component.component.html","./src/app/alert-component/alert-component.component.ts","./src/app/directives/dnd-directive.directive.ts","./src/app/home/home.component.html","./src/app/home/home.component.ts","./src/app/download-all/download-all.component.html","./src/app/download-all/download-all.component.ts","./src/app/util/on-csv-download.ts","./src/app/util/convert-columns.ts","./src/app/services/sequence-parser/sequence-parser.service.ts","./src/app/mhci/prediction-model-formgroups/mhc-binding-formgroup/mhc-binding-formgroup.component.html","./src/app/mhci/prediction-model-formgroups/mhc-binding-formgroup/mhc-binding-formgroup.component.ts","./src/app/mhci/prediction-model-formgroups/pmhc-immunogenicity-formgroup/pmhc-immunogenicity-formgroup.component.html","./src/app/mhci/prediction-model-formgroups/pmhc-immunogenicity-formgroup/pmhc-immunogenicity-formgroup.component.ts","./src/app/result-table/result-table.component.html","./src/app/result-table/result-table.component.ts","./src/app/mhci/prediction-model-formgroups/mhc-i-processing-formgroup-new/mhc-i-processing-formgroup-new.component.html","./src/app/mhci/prediction-model-formgroups/mhc-i-processing-formgroup-new/mhc-i-processing-formgroup-new.component.ts","./src/app/mhci/t-cell-prediction/t-cell-prediction.component.html","./src/app/mhci/t-cell-prediction/t-cell-prediction.component.ts","./src/app/_pipes/dash-to-decimal.pipe.ts","./src/app/d3-force/d3-force.component.html","./src/app/d3-force/d3-force.component.ts","./src/app/cluster/cluster.component.html","./src/app/cluster/cluster.component.ts","./src/app/pepmatch/pepmatch.component.html","./src/app/pepmatch/pepmatch.component.ts","./src/app/pepx/pepx.component.html","./src/app/pepx/pepx.component.ts","./src/app/d3-plot/d3-plot.component.html","./src/app/d3-plot/d3-plot.component.ts","./src/app/mhci/peptide-variant-comparison/peptide-variant-comparison.component.html","./src/app/mhci/peptide-variant-comparison/peptide-variant-comparison.component.ts","./src/app/util/is-max-lines.ts","./src/app/mutated-peptide-generator/mutated-peptide-generator.component.html","./src/app/mutated-peptide-generator/mutated-peptide-generator.component.ts","./src/app/pipeline-new/pipeline-new.component.html","./src/app/pipeline-new/pipeline-new.component.ts","./src/app/version/version.component.html","./src/app/app-routing.module.ts","./src/app/pipeline-error/pipeline-error.component.ts","./src/app/pipeline-error/pipeline-error.component.html","./src/app/version/version.component.ts","./src/app/footer/footer.component.html","./src/app/footer/footer.component.ts","./src/app/services/google-analytics/google-analaytics.service.ts","./src/app/services/google-analytics/shared.service.ts","./src/app/cookie-dialog/cookie-dialog.component.html","./src/app/cookie-dialog/cookie-dialog.component.ts","./src/app/navbar/navbar.component.ts","./src/app/navbar/navbar.component.html","./src/app/app.component.ts","./src/app/app.component.html","./src/app/app.module.ts","./src/main.ts"],"sourcesContent":["import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-benchmark',\n templateUrl: './benchmark.component.html',\n styleUrls: ['./benchmark.component.scss']\n})\nexport class BenchmarkComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","
\n
\n

Benchmarks

\n\n
\n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n
Server2021-03-052021-02-192021-01-292021-01-152021-01-012020-12-252020-12-182020-12-112020-11-132020-10-022020-09-11
\n ARB\n 7863623738685136504551
\n SMMPMBEC\n 7462634131638068654551
\n NetMHCSPan 4.0\n 7462634131638068654551
\n NetMHCcons\n 7462634131638068654551
\n DeepSeqPa\n 7462634131638068654551
\n NetMHCpan 2.8\n 7462634131638068654551
\n SMM\n 5655616231638068654551
\n ANN 4.0\n 5655616231638068654551
\n mhcflurry 1.2.0\n 4344447031638068654551
\n Pickpocket\n 2523352331633018575441
\n NetMHCpan 3.0\n 666561
\n Ann 3.4\n 666666
\n
\n\n
\n
\n","import { NgxGoogleAnalyticsModule, NgxGoogleAnalyticsRouterModule } from 'ngx-google-analytics';\n\nexport const environment = {\n name: 'PROD',\n production: true,\n api_url: 'https://api-nextgen-tools.iedb.org',\n api_port: '443',\n auth_endpoint: '/token/',\n auth_refresh_endpoint: '/token/refresh/',\n upload_endpoint: '/import/',\n optionalModules: [\n NgxGoogleAnalyticsModule.forRoot('G-MFNL7MJ8EV'),\n NgxGoogleAnalyticsRouterModule\n ],\n};\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
\n
\n Loading...\n
\n
\n
\n

Cite Us

\n

Publications for each of the individual methods that have been implemented on this site\n are listed below, as well as publications describing the IEDB Analysis Resource in general. Please cite\n accordingly in any works published that make use of this resource.

\n
\n
\n \n \n

{{citation.key}}

\n

\n {{article.display_name}} ({{article.method_version}})\n \n {{article.citation_html}}\n

\n
\n
\n
\n\n
\n
\n","import { Component, OnInit } from '@angular/core';\nimport {HttpClient} from \"@angular/common/http\";\nimport _ from 'lodash';\nimport {environment} from \"../../environments/environment\";\n\nimport Citation from \"../_global/Citation\"\n\n@Component({\n selector: 'app-citation',\n templateUrl: './citation.component.html',\n styleUrls: ['./citation.component.scss']\n})\nexport class CitationComponent implements OnInit {\n\n loading: boolean = false;\n citations: any[] = [];\n uniq: string[] = []\n groupedCitations: {\"T cell - class I\": Citation[]} = {\"T cell - class I\": []}\n\n constructor(\n private http: HttpClient\n ) { }\n\n ngOnInit(): void {\n this.loading = true;\n const CITATIONS_API_URL = `${environment['api_url']}/api/v1/citations`;\n this.http.get(CITATIONS_API_URL).subscribe(value => {\n this.citations = value.data;\n // this.citations = _.orderBy(value.data, ['grouping_title', 'key']) /** uncomment later */\n this.uniq = []\n _.forEach(this.citations, (c) => {\n if (!this.uniq.includes(c.grouping_title)) {\n this.uniq.push(c.grouping_title)\n console.log(c.grouping_title)\n // @ts-ignore\n this.groupedCitations[c.grouping_title] = [c]\n } else {\n // @ts-ignore\n this.groupedCitations[c.grouping_title].push(c)\n }\n })\n console.log(this.uniq)\n console.log(this.groupedCitations)\n this.loading = false;\n })\n }\n\n\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'keys' })\nexport class KeysPipe implements PipeTransform {\n transform(value: {}): any {\n if (!value) return null;\n return Object.keys(value);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'tag' })\nexport class tagPipe implements PipeTransform {\n transform(value: string): any {\n if(value) {\n if(value==='mhcI') {\n return 'MHC I';\n }\n else if(value==='allele7') {\n return '7-Allele';\n }\n else if(value==='mhcII') {\n return 'MHC II';\n }\n else if(value==='hlaAssociation') {\n return 'HLA Association';\n }\n else if(value==='structure3D') {\n return '3D Structure';\n }\n else if(value==='nonPeptidic') {\n return 'Non-Peptidic';\n }\n else if(value==='mhcProcessing') {\n return 'MHC Processing';\n }\n else if(value==='tapProcessing') {\n return 'TAP Processing';\n }\n else if(['TCR', 'BCR', 'PDB', 'CD4', 'CD8', 'VCF'].includes(value)) {\n return value;\n }\n else {\n return value\n // insert a space before all caps\n .replace(/([A-Z])/g, ' $1')\n // uppercase the first character\n .replace(/^./, function(str){ return str.toUpperCase(); });\n }\n }\n return null;\n }\n}\n","
\n
\n
\n
\n Tags\n \n
\n
\n
\n \n \n
\n
\n
\n\n
\n
\n

Tools Matching Any Selected Tags: {{ selectedTools.length }} | Tools Matching All Selected\n Tags: {{ selectedTags.length === sortedTools[0].count ? countsForSelectedTools[0].length : 0 }}

\n
\n\n
\n
\n
\n {{ countsForSelectedTools[horizontalDivider.indexOf(tool.name)].length }} {{countsForSelectedTools[horizontalDivider.indexOf(tool.name)].length === 1 ? 'Tool' : 'Tools'}} Matching {{ tool.count }} {{tool.count === 1 ? 'Tag' : 'Tags' }}\n\n
\n\n \n
\n \n {{ tool.name }}\n \n \n \n {{ tool.name }}\n \n \n
\n
\n \n {{ tag | tag }}\n \n
\n
\n\n
\n\n

* - Redirect to legacy site.

\n
\n\n
\n
\n","import { Component, OnInit } from '@angular/core';\nimport {UntypedFormBuilder, UntypedFormGroup} from \"@angular/forms\";\nimport _ from 'lodash';\n\n@Component({\n selector: 'app-tools-list',\n templateUrl: './tools-list.component.html',\n styleUrls: ['./tools-list.component.scss']\n})\nexport class ToolsListComponent implements OnInit {\n\n initialTags: any = {\n structure3D: false,\n allele7: false,\n alleleFrequency: false,\n antibody: false,\n bCell: false,\n BCR: false,\n bindingAffinity: false,\n cancer: false,\n CD4: false,\n CD8: false,\n conservation: false,\n dataVisualization: false,\n deimmunization: false,\n elutedLigand: false,\n epitope: false,\n geneExpression: false,\n hlaAssociation: false,\n humoralImmunity: false,\n immunogenicity: false,\n mhcI: false,\n mhcII: false,\n modeling: false,\n molecularDocking: false,\n neoepitope: false,\n nonPeptidic: false,\n PDB: false,\n peptideSimilarity: false,\n population: false,\n proteinStructure: false,\n proteomeSearch: false,\n protrusion: false,\n responseFrequency: false,\n rnaExpression: false,\n smallMolecule: false,\n synthesis: false,\n tCell: false,\n tapProcessing: false,\n TCR: false,\n transcription: false,\n unwantedImmuneResponse: false,\n VCF: false\n }\n\n tools = [\n {queryParams: {tool: 'tc1'}, name: 'T Cell Prediction - Class I', tags: [\"CD8\", \"bindingAffinity\", \"elutedLigand\", \"epitope\", \"hlaAssociation\", \"immunogenicity\", \"mhcI\", \"tCell\", \"tapProcessing\"], count: 0, routerLink: 't-cell-prediction'},\n {queryParams: {tool: 'cluster'}, name: 'Cluster', tags: [\"conservation\", \"dataVisualization\", \"hlaAssociation\", \"peptideSimilarity\"], count: 0, routerLink: 'cluster'},\n {queryParams: {tool: 'pepmatch'}, name: 'PEPMatch', tags: ['conservation', 'peptideSimilarity', 'proteomeSearch'], count: 0, routerLink: 'pepmatch'},\n {queryParams: {tool: 'pepx'}, name: 'PepX', tags: ['geneExpression', 'rnaExpression', 'transcription', 'cancer'], count: 0, routerLink: '_blank'},\n {queryParams: {tool: 'pepvcomp'}, name: 'Peptide Variant Comparison', tags: ['bindingAffinity', 'cancer', 'CD8', 'dataVisualization', 'elutedLigand', 'epitope', 'hlaAssociation', 'immunogenicity', 'mhcI', 'neoepitope', 'tCell'], count: 0, routerLink: 'pepcomp'},\n {queryParams: {tool: 'mutpepgen'}, name: 'Mutated Peptide Generator', tags: ['cancer','neoepitope', 'VCF'], count: 0, routerLink: 'pepcomp'},\n {url: 'http://tools.iedb.org/mhcii/', name: 'MHC-II Binding Predictions*', tags: [\"allele7\", \"bindingAffinity\", \"CD4\", \"elutedLigand\", \"epitope\", \"immunogenicity\", \"mhcII\", \"tCell\"], count: 0, routerLink: '_blank'},\n {url: 'http://tools.iedb.org/bcell/', name: 'B Cell Linear Epitope Prediction*', tags: ['antibody', 'bCell', 'epitope', 'humoralImmunity','immunogenicity'], count: 0, routerLink: '_blank'},\n {url: 'http://tools.iedb.org/conservancy/', name: 'Epitope Conservancy Analysis*', tags: ['conservation'], count: 0, routerLink: '_blank'},\n {url: 'http://tools.iedb.org/discotope/', name: 'Discotope*', tags: [ \"structure3D\", \"antibody\", \"bCell\", \"dataVisualization\", \"epitope\", \"humoralImmunity\", \"immunogenicity\", \"PDB\",], count: 0, routerLink: '_blank'},\n {url: 'http://tools.iedb.org/population/', name: 'Population Coverage*', tags: [\"alleleFrequency\", \"hlaAssociation\", \"population\", \"responseFrequency\"], count: 0, routerLink: '_blank'},\n {url: 'http://tools.iedb.org/ellipro/', name: 'Ellipro*', tags: [ \"structure3D\", \"antibody\", \"bCell\", \"dataVisualization\", \"epitope\", \"humoralImmunity\", \"immunogenicity\", \"PDB\"], count: 0, routerLink: '_blank'},\n {url: 'http://tools.iedb.org/tepitool/', name: 'TepiTool*', tags: [ 'bindingAffinity', 'CD4', 'CD8', 'epitope', 'hlaAssociation', 'mhcI', 'mhcII', 'protrusion', 'tCell'], count: 0, routerLink: '_blank'},\n {url: 'http://tools.iedb.org/deimmunization/', name: 'Deimmunization*', tags: ['bindingAffinity', 'deimmunization', 'immunogenicity', 'mhcI', 'mhcII', 'tCell', 'unwantedImmuneResponse'], count: 0, routerLink: '_blank'},\n {url: 'http://tools.iedb.org/docktope/', name: 'Docktope*', tags: [\"structure3D\", \"hlaAssociation\", \"mhcI\", \"modeling\", \"molecularDocking\", \"proteinStructure\",\"PDB\", \"TCR\", \"tCell\"], count: 0, routerLink: '_blank'},\n {url: 'http://tools.iedb.org/lyra/', name: 'LYRA*', tags: [\"structure3D\", \"antibody\", \"BCR\", \"bCell\", \"dataVisualization\", \"modeling\", \"PDB\", \"TCR\",\"tCell\"], count: 0, routerLink: '_blank'},\n {url: 'http://tools.iedb.org/immunomebrowser/', name: 'ImmunomeBrowser*', tags: [ 'dataVisualization', 'epitope', 'immunogenicity', 'modeling', 'responseFrequency'], count: 0, routerLink: '_blank'},\n {url: 'http://tools.iedb.org/rate/', name: 'RATE*', tags: ['antibody', 'hlaAssociation', 'mhcI', 'mhcII', 'responseFrequency', 'tCell'], count: 0, routerLink: '_blank'},\n {url: 'http://tools.iedb.org/axelf/', name: 'Axel-F*', tags: ['cancer', 'CD8', 'epitope', 'mhcI', 'tCell', 'rnaExpression', 'TCR', 'transcription'], count: 0, routerLink: '_blank'},\n {url: 'http://tools.iedb.org/tcrmatch/', name: 'TCRMatch*', tags: ['CD4', 'CD8', 'tCell', 'TCR'], count: 0, routerLink: '_blank'},\n {url: 'http://tools.iedb.org/np_epitope_predictor/', name: 'NP Epitope Predictor*', tags: ['bCell', 'dataVisualization', 'epitope', 'nonPeptidic', 'smallMolecule', 'tCell'], count: 0, routerLink: '_blank'},\n {url: 'http://tools.iedb.org/sceptre/', name: 'SCEptRe*', tags: ['structure3D','bCell', 'BCR', 'mhcI', 'mhcII', 'PDB', 'tCell', 'TCR'], count: 0, routerLink: '_blank'},\n {url: 'http://tools.iedb.org/pepsysco/', name: 'PepSySco* (Peptide Synthesis)', tags: ['synthesis'], count: 0, routerLink: '_blank'},\n ]\n\n sortedTools: any = []\n\n selectedTools: any[] = [] // used for counts\n selectedTags: string[] = [] // used for counts\n horizontalDivider: string[] = [];\n countsForSelectedTools: any[] = [];\n\n toolsListForm!: UntypedFormGroup;\n\n constructor(\n private formBuilder: UntypedFormBuilder,\n ) { }\n\n ngOnInit(): void {\n this.toolsListForm = this.formBuilder.group(this.initialTags);\n\n const firstTools = this.tools.slice(0, 6)\n const legacyTools = this.tools.slice(6, )\n\n this.sortedTools = firstTools.concat(_.orderBy(legacyTools, 'name'));\n\n this.countsForSelectedTools = _.reverse(_.values(_.groupBy(this.sortedTools, 'name')));\n console.log(this.countsForSelectedTools);\n this.onChange();\n }\n\n onChange(): void {\n /**\n *\n * */\n this.toolsListForm.valueChanges.subscribe(val => {\n console.log(val);\n\n this.selectedTools = [];\n this.sortedTools = [];\n this.horizontalDivider = [];\n\n this.selectedTags = _.keys(_.pickBy(val, (v: any, k:string) => {\n if (v === true) {\n return k\n }\n return null\n }));\n console.log(this.selectedTags);\n\n if(this.selectedTags.length === 0) {\n const firstTools = this.tools.slice(0, 3)\n const legacyTools = this.tools.slice(3, 21)\n\n this.sortedTools = firstTools.concat(_.orderBy(legacyTools, 'name'));\n return\n }\n\n const tempSelectedTools: string[] = [];\n\n _.forEach(this.selectedTags, (tag) => {\n console.log(tag);\n _.forEach(this.tools, (tool) => {\n if (tool.tags.includes(tag)) {\n tempSelectedTools.push(tool.name);\n }\n })\n })\n\n console.log(tempSelectedTools);\n\n this.selectedTools = _.values(_.groupBy(tempSelectedTools)).map(d => ({name: d[0], count: d.length}));\n\n _.forEach(this.tools, (tool) => {\n _.forEach(this.selectedTools, (fool) => {\n if (tool.name === fool.name) {\n tool.count = fool.count;\n this.sortedTools.push(tool);\n }\n })\n })\n this.sortedTools = _.orderBy(this.sortedTools, 'count', 'desc');\n let mostcount = this.sortedTools[0].count - 1;\n this.horizontalDivider.push(this.sortedTools[0].name);\n _.forEach(this.sortedTools, (tool) => {\n if(tool.count === mostcount) {\n mostcount -= 1;\n this.horizontalDivider.push(tool.name);\n }\n });\n\n this.countsForSelectedTools = _.reverse(_.values(_.groupBy(this.sortedTools, 'count')));\n\n /** DEBUGGER */\n // console.log(this.selectedTools);\n // console.log(this.sortedTools);\n // console.log(this.selectedTags);\n // console.log(this.horizontalDivider);\n // console.log(this.countsForSelectedTools);\n })\n }\n\n deSelectAllTags(e: any) {\n /**\n *\n * */\n this.toolsListForm.reset();\n this.selectedTags = [];\n this.horizontalDivider = [];\n this.selectedTools = [];\n\n const firstTools = this.tools.slice(0, 3)\n const legacyTools = this.tools.slice(3, 21)\n this.sortedTools = firstTools.concat(_.orderBy(legacyTools, 'name'));\n }\n}\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-tool-contribution',\n templateUrl: './tool-contribution.component.html',\n styleUrls: ['./tool-contribution.component.scss']\n})\nexport class ToolContributionComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","
\n
\n

Contribution To The IEDB NextGen Tools

\n
\n

\n An overarching goal of the IEDB is to be the central repository for tools that are of general use to the\n immunology and immunoinformatics community.\n We encourage developers of such tools to contact us to inquire about hosting your tool at the IEDB.\n The IEDB team would work with developers to create a web portal and keep it up and running indefinitely.\n We believe this arrangement benefits all parties involved and the immunology community as a whole.\n The process for submitting your tool for inclusion at the IEDB NG Tools is outlined below.\n

\n
\n

Tool Contribution Process

\n
\n
\n \n \n \n

\n 1. Submission\n

\n
\n Email help@iedb.org and include:\n
    \n
  • \n A summary of the problem that your tool addresses and what it is of general interest\n
  • \n
  • \n The publication status of your tool\n
  • \n
  • \n If there’s a web server that hosts the tool, please provide URL\n
  • \n
  • \n Time frame in which you will be ready to hand off your tool to IEDB developers\n
  • \n
\n
\n\n
\n
\n \n \n \n

\n 2. Evaluation\n

\n
\n Submissions will be evaluated by IEDB staff to determine whether the tool fits within the scope of the IEDB and we\n have the capability (hardware, personnel, etc) to implement it.\n
\n\n
\n
\n \n \n \n

\n 3. Decision\n

\n
\n You will receive a reply within 4 weeks with either a decision or a request for further information. If your tool\n is approved for inclusion, you will work with IEDB developers to hand off code and create a web portal at the\n IEDB.\n
\n\n
\n
\n \n \n \n \n

\n 4. Testing\n

\n
\n The tool will be thoroughly tested for bugs and the load it exerts on the IEDB servers.\n
\n\n
\n
\n \n \n \n \n

\n 5. Tools Go Live\n

\n
\n After you give the go-ahead, links will be made public and it will be officially announced under 'New and Noteworthy'\n and the 'Release Notes' on the IEDB support pages, and incorporated into the IEDB's next submission to the annual NAR webserver issue.\n
\n\n
\n
\n \n \n \n \n

\n 6. Updates\n

\n
\n Any updates you make to the tool can be applied, tested, and released in our 6-month development cycle.\n
\n
\n
\n","import Stage from \"../../_global/Stage\";\nimport Tool from \"../../_global/Tool\";\n\nexport const initTCellPredictionState: Stage = {\n stage_number: 1,\n stage_type: 'prediction',\n tool_group: 'mhci',\n stage_display_name: 'T Cell Prediction - Class I',\n input_parameters: {},\n // table_state: {columns: {}},\n table_state: [{table: 'peptide_table', columns: {}}],\n stage_messages: {errors: [], warnings: []}\n}\n\nexport const initClusterState: Stage = {\n stage_number: 1,\n stage_type: 'prediction',\n tool_group: 'cluster',\n stage_display_name: 'Cluster',\n input_parameters: {},\n // table_state: {columns: {}},\n table_state: [{table: 'peptide_table', columns: {}}],\n stage_messages: {errors: [], warnings: []}\n}\n\nexport const initPepMatchState: Stage = {\n stage_number: 1,\n stage_type: 'prediction',\n tool_group: 'pepmatch',\n stage_display_name: 'Pepmatch',\n input_parameters: {},\n // table_state: {columns: {}},\n table_state: [{table: 'peptide_table', columns: {}}],\n stage_messages: {errors: [], warnings: []}\n}\n\nexport const initPepXState: Stage = {\n stage_number: 1,\n stage_type: 'prediction',\n tool_group: 'pepx',\n stage_display_name: 'PepX',\n input_parameters: {},\n // table_state: {columns: {}},\n table_state: [{table: 'peptide_table', columns: {}}, {table: 'peptide_gene_summary_table', columns: {}}],\n stage_messages: {errors: [], warnings: []}\n}\n\nexport const initPeptideBindingComparisonState: Stage = {\n stage_number: 1,\n stage_type: 'prediction',\n tool_group: 'peptide_variant_comparison',\n stage_display_name: 'Peptide Variant Comparison',\n input_parameters: {},\n table_state: [{table: 'peptide_table', columns: {}}],\n // table_state: {columns: {}},\n stage_messages: {errors: [], warnings: []}\n}\n\nexport const initMutatedPeptideGeneratorState: Stage = {\n stage_number: 1,\n stage_type: 'prediction',\n tool_group: 'mutgen',\n stage_display_name: 'Mutated Peptide Generator',\n input_parameters: {},\n table_state: [{table: 'unique_peptide', columns: {}}, {table: 'peptide', columns: {}}],\n stage_messages: {errors: [], warnings: []}\n}\n\n/////////////\n\nexport const initTCellPredictionTool: Tool = {\n name: 'T-Cell Prediction',\n toolGroup: 'mhci',\n loading: false,\n submitted: false,\n appliedFilters: undefined,\n disabled: false\n}\n\nexport const initClusterTool: Tool = {\n name: 'Cluster',\n toolGroup: 'cluster',\n loading: false,\n submitted: false,\n appliedFilters: undefined,\n disabled: false\n}\n\nexport const initPepmatchTool: Tool = {\n name: 'Pepmatch',\n toolGroup: 'pepmatch',\n loading: false,\n submitted: false,\n appliedFilters: undefined,\n disabled: false\n}\n\nexport const initPepxTool: Tool = {\n name: 'Pepx',\n toolGroup: 'pepx',\n loading: false,\n submitted: false,\n appliedFilters: undefined,\n disabled: false\n}\n\nexport const initPeptideBindingComparisonTool: Tool = {\n name: 'Peptide Variant Comparison',\n toolGroup: 'peptide_variant_comparison',\n loading: false,\n submitted: false,\n appliedFilters: undefined,\n disabled: false\n}\n\nexport const initMutatedPeptideGeneratorTool: Tool = {\n name: 'Mutated Peptide Generator',\n toolGroup: 'mutgen',\n loading: false,\n submitted: false,\n appliedFilters: undefined,\n disabled: false\n}\n\n/////////// Params //////////\n\nexport const initParams = {\n \"pipeline_id\": '',\n \"run_stage_range\": [1, 1],\n \"stages\": []\n}\n","export function isASCII(str: string)\n{\n return /^[\\x00-\\x7F]*$/.test(str);\n}\n\nexport function IsJsonString(str: string) {\n try {\n JSON.parse(str);\n } catch (e) {\n return false;\n }\n return true;\n}\n\nexport function ltrim(str:string) {\n /**\n * https://stackoverflow.com/a/24282245/8794234\n * */\n if(!str) return str;\n return str.replace(/^\\s+/g, '');\n}\n","export function isMaxLength(str: string, maxCharacters: number)\n{\n return str.length <= maxCharacters;\n}\n","import { BehaviorSubject, Observable } from 'rxjs';\nimport { distinctUntilChanged, map } from 'rxjs/operators';\n\nexport class StateService {\n\n private state$: BehaviorSubject;\n protected get state(): T {\n return this.state$.getValue();\n }\n\n constructor(initialState: T) {\n this.state$ = new BehaviorSubject(initialState);\n }\n\n protected select(mapFn: (state: T) => K): Observable {\n return this.state$.asObservable().pipe(\n map((state: T) => mapFn(state)),\n distinctUntilChanged()\n );\n }\n\n protected setState(newState: Partial) {\n this.state$.next({\n ...this.state,\n ...newState,\n });\n }\n}\n","import {Injectable} from '@angular/core';\nimport {HttpClient, HttpParams} from '@angular/common/http';\nimport {UntypedFormGroup} from \"@angular/forms\";\nimport {Observable, BehaviorSubject} from 'rxjs';\nimport {debounce, catchError, debounceTime, distinctUntilChanged, map, tap, switchMap} from 'rxjs/operators';\n\nimport {environment} from '../../../environments/environment';\nimport * as _ from \"lodash\";\n\nconst API_URL = `${environment['api_url']}/api/v1/pipeline`;\nconst PIPELINE_SPEC_API_URL = `${environment['api_url']}/api/v1/pipeline_spec`;\nconst RESULT_API_URL = `${environment['api_url']}/results`;\nconst PARAMS = new HttpParams();\nimport Allele from \"../../_global/Allele\";\n@Injectable({\n providedIn: 'root'\n})\nexport class PipelineService {\n\n public _currentPipelineId = new BehaviorSubject('');\n\n public get currentPipelineId(): Observable {\n return this._currentPipelineId.asObservable();\n }\n runSetInterval: any;\n\n constructor(private http: HttpClient) {\n }\n\n postPipeline(data: object): Observable {\n /**\n /api/v1/pipeline\n * */\n console.log(JSON.stringify(data, null, 2));\n return this.http.post(API_URL, data)\n .pipe(\n tap((resp: any) => {\n // console.log(resp); // debugger\n })\n )\n }\n\n putPipeline(pipelineId: string, data: object): Observable {\n /**\n /api/v1/pipeline\n * */\n console.log(JSON.stringify(data, null, 2));\n return this.http.put(`${API_URL}/${pipelineId}`, data)\n .pipe(\n tap((resp: any) => {\n // console.log(resp); // debugger\n })\n )\n }\n\n getPipeline(pipelineId: string) {\n /**\n /api/v1/pipeline/{pipeline_id}\n {\n \"pipeline_id\": \"b5bec4c9-d657-483f-9cab-5113d62c6c2e\",\n \"pipeline_title\": \"\",\n \"pipeline_date\": \"2022-01-17\",\n \"pipeline_spec_id\": \"631f3a1c-4fbd-4968-9266-b56019f0a5e4\",\n \"email\": \"\",\n \"title\": \"\",\n \"stages\": [\n {\n \"stage_id\": \"dd20849b-642a-4c00-9b71-8b799c6c8e57\",\n \"stage_url\": \"https://api-iedb-ar-prototype-dev.lji.org/api/v1/stage/dd20849b-642a-4c00-9b71-8b799c6c8e57\",\n \"stage_number\": 1,\n \"input_stage_number\": null,\n \"input_stage_id\": null,\n \"stage_type\": \"prediction\",\n \"tool_group\": \"mhci\",\n \"stage_messages\": {},\n \"stage_status\": \"done\",\n \"stage_result_id\": \"1642448438.4946783-crBK5D3C\",\n \"stage_result_uri\": \"https://api-iedb-ar-prototype-dev.lji.org/api/v1/results/1642448438.4946783-crBK5D3C\",\n \"input_data\": {\n \"input_parameters_id\": \"1642448437.0379062-7KNyAzhE\",\n \"input_parameters_uri\": \"https://api-iedb-ar-prototype-dev.lji.org/api/v1/get_object/1642448437.0379062-7KNyAzhE\",\n \"input_sequence_text_id\": \"1642448437.0429754-blM9DgMu\",\n \"input_sequence_text_uri\": \"https://api-iedb-ar-prototype-dev.lji.org/api/v1/get_object/1642448437.0429754-blM9DgMu\"\n }\n }\n ]\n}\n */\n\n return this.http.get(`${API_URL}/${pipelineId}?return_input_URIs=True`)\n .pipe(\n tap((resp: any) => {\n console.log(resp);\n })\n )\n }\n\n getPipelineSpec(pipelineSpecId: string) {\n /**\n {\n \"pipeline_spec_id\": \"8acffb74-f561-433e-b1f4-082e616ef287\",\n \"description\": \"\",\n \"pipeline_params\": {\n \"stages\": [\n {\n \"stage_type\": \"prediction\",\n \"tool_group\": \"cluster\",\n \"table_state\": {\n \"columns\": {}\n },\n \"stage_number\": 1,\n \"input_datasets\": [\n {}\n ],\n \"input_parameters\": {\n \"predictors\": [\n {\n \"type\": \"cluster\",\n \"method\": \"cliques\"\n }\n ],\n \"cluster_pct_identity\": 0.4,\n \"peptide_length_range\": [\n 0,\n 0\n ]\n }\n },\n {\n \"stage_type\": \"prediction\",\n \"tool_group\": \"mhci\",\n \"table_state\": {\n \"columns\": {}\n },\n \"stage_number\": 2,\n \"input_datasets\": [\n {\n \"data_to_pipe\": \"peptide\",\n \"input_stage_number\": 1\n }\n ],\n \"input_parameters\": {\n \"alleles\": \"H2-Kb,H2-Db\",\n \"predictors\": [\n {\n \"type\": \"binding\",\n \"method\": \"netmhcpan_el\"\n }\n ],\n \"peptide_length_range\": [\n 9,\n 10\n ]\n }\n }\n ],\n \"api_version\": \"0.1.0\"\n }\n}\n */\n\n return this.http.get(`${PIPELINE_SPEC_API_URL}/${pipelineSpecId}`)\n .pipe(\n tap((resp: any) => {\n console.log(resp);\n })\n )\n }\n\n getResults(result_url: string) {\n console.log(result_url);\n return this.http.get(result_url);\n }\n\n /** formgroup -> params convert functions */\n convertTCellForm (tCellForm: UntypedFormGroup) {\n /** Alleles */\n const selectedAlleles = _.map(tCellForm.get('alleles')?.value, allele => allele.label).join(',').replace(/\\s/g, '')\n const break_peptides = tCellForm.get('breakPeptides')?.value;\n\n /** predictors */\n const predictors = tCellForm.value.predictionModels;\n /** peptide length range */\n const peptide_length_range = tCellForm.value.peptideLength;\n\n return {\n alleles: selectedAlleles,\n // break_peptides: !break_peptides,\n peptide_length_range: break_peptides ? null : peptide_length_range,\n predictors,\n };\n }\n\n convertClusterForm (clusterForm: UntypedFormGroup) {\n /** threshold */\n const threshold = clusterForm.getRawValue().threshold;\n /** minimum_len */\n let minimum_len = clusterForm.getRawValue().peptideLength[0];\n minimum_len = minimum_len === 4 ? 0 : minimum_len;\n /** maximum_len */\n let maximum_len = clusterForm.getRawValue().peptideLength[1];\n maximum_len = maximum_len === 26 ? 0 : maximum_len;\n /** method */\n let method = clusterForm.getRawValue().method;\n\n return {\n \"cluster_pct_identity\": threshold,\n \"peptide_length_range\": [minimum_len,maximum_len],\n \"predictors\": [\n {\n \"type\": \"cluster\",\n \"method\": method\n }\n ]\n }\n }\n\n convertPepmatchForm (form: UntypedFormGroup) {\n /** mismatch */\n const mismatch = form.getRawValue().mismatch;\n /** one_match */\n let best_match = form.getRawValue().bestMatch;\n /** proteome */\n let proteome = form.getRawValue().proteome;\n /** include_unmatched_peptides */\n let include_unmatched_peptides = form.getRawValue().include_unmatched_peptides;\n\n return {\n mismatch,\n proteome,\n best_match,\n include_unmatched_peptides\n }\n }\n\n convertPepxForm (form: UntypedFormGroup) {\n /** qLevel */\n const qlevel = form.getRawValue().qlevel;\n /** datasource - optional */\n let datasource = form.getRawValue().datasource;\n /** datasets */\n let dataset_id = form.getRawValue().dataset_id;\n\n return {\n qlevel,\n datasource,\n dataset_id\n }\n }\n\n convertPepcompForm(form: UntypedFormGroup) {\n /** alleles */\n const selectedAlleles = _.map(form.get('alleles')?.value, allele => allele.label).join(',').replace(/\\s/g, '')\n /** predictors */\n const predictors = form.value.predictionModels;\n\n return {\n alleles: selectedAlleles,\n predictors,\n }\n }\n\n convertMutgenForm(form: UntypedFormGroup) {\n /** peptideLength */\n const peptide_length = form.getRawValue().peptideLength;\n /** peptideMutationPosition1 */\n let peptide_mutation_position1 = form.getRawValue().peptideMutationPosition1;\n /** peptideMutationPosition1 */\n let peptide_mutation_position2 = form.getRawValue().peptideMutationPosition2;\n /** frameshiftOverlap */\n let frameshift_overlap = form.getRawValue().frameshiftOverlap;\n // /** maximum_peptide_length */\n let maximum_peptide_length = form.getRawValue().maximumPeptideLength;\n /** min_len_near_start_stop */\n let min_len_near_start_stop = form.getRawValue().minLengthNearStartStop;\n return {\n peptide_length,\n peptide_mutation_position1,\n peptide_mutation_position2,\n frameshift_overlap,\n maximum_peptide_length,\n min_len_near_start_stop: 16,\n \"reference_genome\": \"GRCh38\",\n }\n }\n}\n","import {Injectable} from '@angular/core';\nimport {HttpClient} from \"@angular/common/http\";\nimport {Observable} from \"rxjs\";\n// import {tap} from \"rxjs/operators\";\n\nimport Stage from \"../../../_global/Stage\";\nimport Tool from \"../../../_global/Tool\";\nimport PipelineParams from \"../../../_global/PipelineParams\";\nimport {StateService} from \"../state.service\";\nimport {PipelineService} from \"../../pipeline-service/pipeline.service\";\nimport {\n initTCellPredictionState, initTCellPredictionTool,\n initClusterState, initClusterTool, initPepmatchTool, initPepMatchState\n} from \"../default-stage-states\";\n\n\n/**\n {\n \"pipeline_id\": \"\",\n \"run_stage_range\": [\n 1,\n 1\n ],\n \"stages\": [\n {\n \"stage_number\": 1,\n \"stage_type\": \"prediction\",\n \"tool_group\": \"mhci\",\n \"input_sequence_text\": \">LCMV Armstrong, Protein GP\\nMGQIVTMFEALPHIIDEVINI\\n\",\n \"input_parameters\": {\n \"alleles\": \"H2-Kb,H2-Db\",\n \"peptide_length_range\": [\n 9,\n 10\n ],\n \"predictors\": [\n {\n \"type\": \"binding\",\n \"method\": \"netmhcpan_el\"\n }\n ]\n }\n }\n ]\n * */\n\ninterface PipelineState {\n pipeline_id: string,\n pipeline_spec_id: string,\n run_stage_range: [number, number],\n inputSequenceText?: string,\n inputVcfText?: string,\n stages: Stage[],\n tools: Tool[],\n // table_states: TableState[],\n params: PipelineParams\n}\n\nconst initialState: PipelineState = {\n pipeline_id: '',\n pipeline_spec_id: '',\n inputSequenceText: '',\n // inputVcfText: '',\n run_stage_range: [1, 1],\n stages: [],\n tools: [],\n params: {\n pipeline_id: '',\n run_stage_range: [1, 1],\n stages: []\n } // last parameter sent to api\n};\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PipelineStateService extends StateService {\n\n stages$: Observable = this.select(state => state.stages);\n tools$: Observable = this.select(state => state.tools);\n pipelineId$: Observable = this.select(state => state.pipeline_id);\n pipelineSpecId$: Observable = this.select(state => state.pipeline_spec_id);\n inputSequenceText$: Observable = this.select(state => state.inputSequenceText);\n inputVcfText$: Observable = this.select(state => state.inputVcfText);\n params$: Observable = this.select(state => state.params);\n\n constructor(\n private _pipelineService: PipelineService\n ) {\n super(initialState); // now need to set stages\n this.stages$.subscribe(value => {\n // Default initial state - set to initTCellPredictionState\n console.log(value);\n if (value.length === 0) {\n this.setState({\n stages: [\n initTCellPredictionState\n ]\n })\n }\n })\n this.tools$.subscribe(value => {\n // Default initial state - set to initTCellPredictionState\n console.log(value);\n if (value.length === 0) {\n this.setState({\n tools: [\n initTCellPredictionTool\n ]\n })\n }\n })\n }\n\n /** Params */\n setParams(params: any) {\n this.setState({params})\n }\n\n setPipelineId(pipelineId: string) {\n this.setState({pipeline_id: pipelineId});\n }\n\n setPipelineSpecId(pipelineSpecId: string) {\n this.setState({pipeline_spec_id: pipelineSpecId});\n }\n\n setPipelineIdToParams(pipelineId: string) {\n const params = {...this.state.params} // hard copy\n console.log(params);\n params.pipeline_id = pipelineId\n this.setState({params})\n }\n\n setStagesToParams(stages: Stage[]) {\n /**\n Used in GET Pipeline to set all stages at once.\n * */\n const params = {...this.state.params} // hard copy\n console.log(params);\n params.stages = stages;\n this.setState({params})\n }\n\n\n addStageToParams(stage: Stage) {\n const params = {...this.state.params} // hard copy\n console.log(params);\n params.stages.push(stage);\n this.setState({params})\n }\n\n insertStageToParams(stage: Stage, index: number) {\n const params = {...this.state.params} // hard copy\n let stages = params.stages;\n stages[index] = stage;\n params.stages = stages;\n // console.log(params);\n this.setState({params})\n }\n\n applyFiltersToParams(stageIndex: number, columns: any) {\n /**\n * Adds columns object as table_state.columns in params\n *\n * */\n const params = {...this.state.params} // hard copy\n const stages = params.stages;\n console.log(stages);\n const stageTemp = stages[stageIndex];\n stageTemp.table_state.columns = columns;\n stages[stageIndex] = stageTemp\n params.stages = stages;\n this.setState({params})\n }\n\n popStageFromParams() {\n const params = {...this.state.params} // hard copy\n let stages = params.stages;\n\n stages.pop();\n\n params.stages = stages;\n this.setState({params})\n }\n\n /**\n * Stage\n * */\n\n addStage(stage: Stage) {\n /**\n Add T-cell or Cluster (no results)\n * */\n this.setState({\n stages: [...this.state.stages, stage]\n })\n }\n\n setStages(stages: Stage[]) {\n /**\n Used in GET Pipeline to set all stages at once.\n * */\n this.setState({\n stages: stages\n })\n }\n\n changeResultUrl(url: string, index: number) {\n let stages = [...this.state.stages]\n stages[index].result_url = url\n stages[index].stage_messages!.warnings = []\n stages[index].stage_messages!.errors = []\n this.setState({\n stages: stages\n })\n }\n\n setInitialStage(stage: Stage) {\n /**\n Used in navbar component\n * */\n this.setState({\n stages: [stage]\n })\n }\n\n insertStage(stage: Stage, index: number) {\n let stages = [...this.state.stages]\n stages[index] = stage;\n this.setState({stages})\n }\n\n insertTableStateToStage(table_state: any, index: number) {\n let stages = [...this.state.stages]\n stages[index].table_state = table_state;\n this.setState({stages})\n }\n\n insertInputParametersToStage(input_parameters: any, index: number) {\n let stages = [...this.state.stages]\n stages[index].input_parameters = input_parameters;\n this.setState({stages})\n }\n\n popStage() {\n let stages = [...this.state.stages]\n stages.pop();\n this.setState({stages});\n }\n\n /**\n * Tool\n * */\n setTools(tools: Tool[]) {\n this.setState({\n tools\n })\n }\n\n\n setInitialTool(tool: Tool) {\n const copy = Object.assign({}, tool)\n /**\n Used in navbar component\n * */\n this.setState({\n tools: [copy]\n })\n }\n\n insertTool(tool: Tool, index: number) {\n let tools = [...this.state.tools]\n tools[index] = tool;\n this.setState({tools})\n }\n\n popTool() {\n let tools = [...this.state.tools]\n tools.pop();\n this.setState({tools})\n }\n\n setToolDisabled(disabled: boolean, index: number) {\n let tools = [...this.state.tools]\n const tempTool = tools[index];\n tempTool.disabled = disabled;\n tools[index] = tempTool;\n this.setState({tools})\n }\n\n setToolLoading(loading: boolean, submitted: boolean, index: number) {\n let tools = [...this.state.tools]\n const tempTool = tools[index];\n tempTool.loading = loading;\n tempTool.submitted = submitted;\n tools[index] = tempTool;\n this.setState({tools})\n }\n\n setToolAppliedFilters(appliedFilters: boolean, index: number) {\n let tools = [...this.state.tools]\n const tempTool = tools[index];\n tempTool.appliedFilters = appliedFilters;\n tools[index] = tempTool;\n this.setState({tools})\n }\n\n insertInputDataUriToTool(input_data_uri: any, index: number) {\n let tools = [...this.state.tools]\n tools[index].input_data_uri = input_data_uri;\n this.setState({tools})\n }\n\n setInputSequenceText(value: string) {\n /**\n updates inputSequenceText: string\n * */\n this.setState({inputSequenceText: value});\n }\n setInputVcfText(value: string) {\n /**\n updates InputVcfText: string\n * */\n this.setState({inputVcfText: value});\n }\n}\n\n/**\n * state.service.ts\n export class StateService {\n\n private state$: BehaviorSubject;\n protected get state(): T {\n return this.state$.getValue();\n }\n\n constructor(initialState: T) {\n this.state$ = new BehaviorSubject(initialState);\n }\n\n protected select(mapFn: (state: T) => K): Observable {\n return this.state$.asObservable().pipe(\n map((state: T) => mapFn(state)),\n distinctUntilChanged()\n );\n }\n\n protected setState(newState: Partial) {\n this.state$.next({\n ...this.state,\n ...newState,\n });\n }\n}\n */\n","import { Injectable } from '@angular/core';\nimport {HttpClient, HttpParams} from '@angular/common/http';\nimport {Observable, timer, of} from \"rxjs\";\nimport {debounce, catchError, debounceTime, distinctUntilChanged, map, tap, switchMap} from 'rxjs/operators';\n\nimport {environment} from '../../../environments/environment';\n\nconst ALLELE_SEARCH_API_URL = `${environment['api_url']}/api/v1/alleles/search`;\n\nconst PARAMS = new HttpParams();\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AlleleSearchService {\n\n constructor(private http: HttpClient) { }\n\n search(term: string) {\n if (term === '') {\n return of([]);\n }\n PARAMS.set('query', term)\n let new_search_api_url = `${ALLELE_SEARCH_API_URL}?query=${term}&method=mhci`\n console.log(new_search_api_url);\n return this.http\n .get(new_search_api_url).pipe(\n map(response => {\n // @ts-ignore\n console.log(response['alleles']);\n // @ts-ignore\n return response['alleles']\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport {HttpClient, HttpHeaders} from \"@angular/common/http\";\n\nimport {environment} from '../../../environments/environment';\n// import * as _ from \"lodash\";\nconst API_URL = `${environment['api_url']}/api/v1/announcements`;\n\n@Injectable({\n providedIn: 'root'\n})\n\nexport class AnnouncementService {\n\n constructor(private http: HttpClient) { }\n\n getAnnouncements() : any {\n return this.http.get(API_URL)\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AlertServiceService {\n\n public messages: string[] = []; // used only for conditional rendering\n public message = '';\n public colors = 'alert-danger';\n\n add(message: string, alertType: string) {\n this.messages.push(message);\n this.message = message;\n this.colors = alertType;\n }\n clear() {\n this.message = '';\n this.messages = [];\n }\n\n displayMessage() {\n if (this.messages.length > 0) {\n return true;\n }\n return null;\n }\n}\n","
\n
\n\n\n\n\n\n
{{alertService.message}}
\n
\n
\n\n","import { Component, OnInit } from '@angular/core';\nimport { AlertServiceService } from '../services/alert-service/alert-service.service';\n@Component({\n selector: 'app-alert-component',\n templateUrl: './alert-component.component.html',\n styleUrls: ['./alert-component.component.scss']\n})\nexport class AlertComponentComponent implements OnInit {\n\n constructor(public alertService: AlertServiceService) { }\n\n ngOnInit(): void {\n }\n\n}\n","import {\n Directive,\n Output,\n Input,\n EventEmitter,\n HostBinding,\n HostListener\n} from '@angular/core';\n\n@Directive({\n selector: '[appDnd]'\n})\nexport class DndDirectiveDirective {\n\n @HostBinding('class.fileover') private _fileOver: boolean | undefined;\n @Output() fileDropped = new EventEmitter();\n\n // Dragover listener\n @HostListener('dragover', ['$event']) onDragOver(evt: { preventDefault: () => void; stopPropagation: () => void; }) {\n evt.preventDefault();\n evt.stopPropagation();\n this._fileOver = true;\n }\n\n // Dragleave listener\n @HostListener('dragleave', ['$event']) public onDragLeave(evt: { preventDefault: () => void; stopPropagation: () => void; }) {\n evt.preventDefault();\n evt.stopPropagation();\n this._fileOver = false;\n }\n\n // Drop listener\n @HostListener('drop', ['$event']) public ondrop(evt: { preventDefault: () => void; stopPropagation: () => void; dataTransfer: { files: any; }; }) {\n evt.preventDefault();\n evt.stopPropagation();\n this._fileOver = false;\n let files = evt.dataTransfer.files;\n if (files.length > 0) {\n this.fileDropped.emit(files);\n }\n }\n}\n","
\n
\n \n
\n\n
\n
Announcements
\n \n
\n\n
\n
Appearances & Events
\n\n \n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n Virtual User Workshop\n \n Nov 5-7, 2024
\n * Register\n \n Here\n \n
Festival of BiologicsApril 23-25, 2025
AACR 2025April 25-30, 2025
Immunology 2025 May 3-7, 2025
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n\n
\n
Additional Resources
\n \n
\n
\n\n \n
\n

Welcome to the Next-Generation IEDB Tools site!

\n

As a companion site to the Immune Epitope Database (IEDB), this site provides a\n collection of tools for the prediction and analysis of immune epitopes.

\n\n New User? Learn to\n use the website here!\n \n\n \n
\n
\n \n T Cell Prediction - Class I\n
\n
\n
\n \n\n\n\n\n\n\n\n\n\n
\n
\n
\n
\n
\n \n\n
\n
\n
\n
\n\n
\n
\n
\n\n
\n
\n \n
\n
\n \n
\n \n \n
\n\n \n
\n Click to open Allele Selector\n
\n
    \n
  1. \n {{allele?.label}}\n
  2. \n
\n
\n
\n
\n
\n Loading...\n
\n
\n
\n
\n \n \n Click to run tool\n \n \n \n \n
\n
\n
\n
\n\n \n Additional Tools\n \n \n
\n\n\n
\n
\n
\n \n Cluster\n
\n
\n
\n \n
\n
\n
\n \n
\n \n
\n
\n
\n \n
\n \n
\n
\n
\n
\n
\n \n PEPMatch\n
\n
\n
\n \n
\n
\n
\n
\n
\n \n PepX\n
\n
\n
\n \n
\n
\n\n
\n\n \n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
\n
\n\n\n\n
\n

\n Number of Selected Alleles: {{selectedAlleles.length}}\n

\n \n
\n\n
\n
\n
\n \n
\n
\n \n \n
\n
\n
\n
\n Loading...\n
\n
\n
\n
\n\n
0\" class=\"p-2 d-flex flex-column justify-content-start\">\n\n \n\n
    \n \n
  • {{i['label']}}\n \n
  • \n
\n
\n
\n
\n \n \n \n \n HLA allele frequencies and reference sets with maximal population coverage\n \n \n
\n \n \n
\n
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n\n
\n\n\n\n
\n

Validation Error(s)

\n \n
\n
\n \n
\n
\n \n \n
\n
\n","import {Component, ElementRef, OnInit, ViewChild} from '@angular/core';\nimport {UntypedFormBuilder, UntypedFormGroup} from \"@angular/forms\";\nimport {Router} from '@angular/router';\n\nimport _ from 'lodash';\nimport {NgbModal} from \"@ng-bootstrap/ng-bootstrap\";\n\nimport {Observable, of} from \"rxjs\";\nimport {catchError, debounceTime, distinctUntilChanged, switchMap, tap} from \"rxjs/operators\";\n\nimport Allele from \"../_global/Allele\";\nimport {AlleleSearchService} from \"../services/allele-search/allele-search.service\";\nimport {PipelineStateService} from \"../services/state-services/pipeline-state-service/pipeline-state.service\";\nimport {\n initTCellPredictionState\n} from \"../services/state-services/default-stage-states\";\nimport {environment} from \"../../environments/environment\";\nimport * as alleleData from \"../services/data/27-alleles.json\";\nimport {isASCII} from \"../util/string-helpers\";\nimport {Location} from \"@angular/common\";\nimport {isMaxLength} from \"../util/is-max-length\";\nimport {AlertServiceService} from \"../services/alert-service/alert-service.service\";\nimport {AnnouncementService} from \"../services/announcement-service/announcement-service.service\";\n\n@Component({\n selector: 'app-home',\n templateUrl: './home.component.html',\n styleUrls: ['./home.component.scss']\n})\nexport class HomeComponent implements OnInit {\n\n swaggerUrl = `${environment['api_url']}/apidocs`\n\n maxCharacters = 1000000\n\n classI = true;\n tCellForm!: UntypedFormGroup;\n searching = false;\n searchFailed = false;\n\n bCellForm = new UntypedFormGroup({});\n\n /** Allele Variables */\n selectedAlleles: Allele[] = [];\n modalAlleles: Allele[] = [];\n\n // topics: any[] = []; // events\n announcements: any[] = [\n \"Next-Generation IEDB Tools site released to public\"\n ]; // topics\n\n releases:{title: string, url: string}[] = [\n {title: 'Next-Generation IEDB Tools Website and API - Release 2.0', url: 'https://help.iedb.org/hc/en-us/articles/27040672746907'},\n {title: 'Next-Generation IEDB Tools Website and API - Release 1.2', url: 'https://help.iedb.org/hc/en-us/articles/23989174535707'},\n {title: 'Next-Generation IEDB Tools Website and API - Release 1.1', url: 'https://help.iedb.org/hc/en-us/articles/19688305823515'},\n {title: 'Next-Generation IEDB Tools Website and API - Release 1.0', url: 'https://help.iedb.org/hc/en-us/articles/12422998636955'}\n ]\n\n tools = [\n // {queryParams: {tool: 'tc1'}, name: 'T Cell Prediction - Class I', tags: [\"CD8\", \"bindingAffinity\", \"elutedLigand\", \"epitope\", \"hlaAssociation\", \"immunogenicity\", \"mhcI\", \"tCell\", \"tapProcessing\"], count: 0, routerLink: 't-cell-prediction'},\n {queryParams: {tool: 'cluster'}, name: 'Cluster', tags: [\"conservation\", \"dataVisualization\", \"hlaAssociation\", \"peptideSimilarity\"], count: 0, routerLink: 'cluster'},\n {queryParams: {tool: 'pepmatch'}, name: 'PEPMatch', tags: ['conservation', 'peptideSimilarity', 'proteomeSearch'], count: 0, routerLink: 'pepmatch'},\n {queryParams: {tool: 'pepx'}, name: 'PepX', tags: ['geneExpression', 'rnaExpression', 'transcription'], count: 0, routerLink: '_blank'},\n {queryParams: {tool: 'pepvcomp'}, name: 'Peptide Variant Comparison', tags: ['bindingAffinity', 'cancer', 'CD8', 'dataVisualization', 'elutedLigand', 'epitope', 'hlaAssociation', 'immunogenicity', 'mhcI', 'neoepitope', 'tCell'], count: 0, routerLink: 'pepcomp'},\n {queryParams: {tool: 'mutpepgen'}, name: 'Mutated Peptide Generator', tags: ['cancer','neoepitope', 'VCF'], count: 0, routerLink: 'pepcomp'},\n ]\n\n @ViewChild('selectedAlleleModal') alleleModal!: ElementRef;\n @ViewChild('alertModal') alertModal!: ElementRef;\n\n constructor(\n private formBuilder: UntypedFormBuilder,\n private route: Router,\n private location: Location,\n private modalService: NgbModal,\n private _stateService: PipelineStateService,\n private _service: AlleleSearchService,\n private _announcementService: AnnouncementService,\n public alertService: AlertServiceService,\n ) { }\n\n ngOnInit(): void {\n this.tCellForm = this.formBuilder.group({\n sequences: '',\n });\n this.bCellForm = this.formBuilder.group({\n sequences: '',\n });\n\n this._stateService.setPipelineId('');\n this._stateService.setPipelineSpecId('');\n\n // this._announcementService.getAnnouncements().subscribe((resp: { [x: string]: any[]; }) => {\n // console.log(resp)\n // // this.topics = resp['topics'];\n // // this.events = resp['topics'].filter(o=>o['tags'][0] === 'event').slice(-3)\n // // this.announcements = resp['topics'].filter(o=>o['tags'][0] === 'announcement').slice(-3)\n // })\n }\n\n\n onFileDropped($event: any[]) {\n console.log($event);\n const file = $event[0];\n const fileSize = file.size / 1024; // in kB\n console.log(file.type);\n if (fileSize > 20000) {\n this.alertService.add('File Size is too big! (20mB max)', 'alert-danger');\n this.open(this.alertModal);\n }\n else {\n this.prepareSequenceFileList($event);\n }\n }\n\n prepareSequenceFileList(files: Array) {\n console.log(files);\n // this.fileName = files[0].name;\n const reader = new FileReader();\n const myForm = this.tCellForm;\n for (const item of files) {\n // console.log(item);\n reader.readAsText(item);\n reader.onload = () => {\n const val = reader.result?.toString() || '';\n console.log(val);\n const v = isASCII(val);\n console.log(v);\n if (v) {\n // myForm.patchValue({inputSequenceText: val.substring(0, this.maxCharacters)});\n const w = isMaxLength(val, this.maxCharacters)\n if (w) {\n myForm.patchValue({sequences: val});\n } else {\n this.alertService.add(`Sequence is too long - max Sequence length is ${this.maxCharacters.toLocaleString(\"en-US\")} characters`, 'alert-danger');\n this.open(this.alertModal);\n }\n // this.sequenceParser(val); // auto parser\n } else {\n this.alertService.add('Invalid file type.\\nValid file types are .txt, .fa, .fasta, .json, .faa,', 'alert-danger');\n this.open(this.alertModal);\n }\n };\n\n reader.onerror = () => {\n console.log(reader.error);\n };\n item.progress = 0;\n }\n }\n\n runTCellPrediction() {\n const initTCellPredictionTool2 = {\n name: 'T-Cell Prediction',\n toolGroup: 'mhci',\n loading: false,\n submitted: false,\n appliedFilters: undefined,\n disabled: false\n }\n\n sessionStorage.setItem('sequences', this.tCellForm.get('sequences')?.value);\n sessionStorage.setItem('selectedAlleles', JSON.stringify(this.selectedAlleles));\n\n // const source = {\n // input_parameters: {\n // inputSequenceText: this.tCellForm.get('sequences')?.value,\n // alleles: this.selectedAlleles\n // }\n // }\n // const initState = Object.assign(initTCellPredictionState, source)\n //\n // console.log(initState)\n this._stateService.setInitialStage(initTCellPredictionState)\n this._stateService.setInitialTool(initTCellPredictionTool2)\n // this._stateService.setParams(initParams)\n this._stateService.setPipelineId('')\n this._stateService.setPipelineSpecId('')\n }\n\n\n /** T Cell Prediction Functions */\n get selectedAlleleLabels() {\n return this.selectedAlleles.map((o => o.label)).join(', ');\n }\n\n get selectedModalAlleleLabels() {\n return this.modalAlleles.map(((o: { label: string; }) => o.label)).join(', ');\n }\n\n search = (text$: Observable) =>\n text$.pipe(\n debounceTime(300),\n distinctUntilChanged(),\n tap(() => this.searching = true),\n switchMap(term => {\n console.log(term);\n return this._service.search(term).pipe(\n tap(() => this.searchFailed = false),\n catchError(() => {\n this.searchFailed = true;\n return of([]);\n }))\n }\n ),\n tap(() => this.searching = false)\n )\n\n resultFormatter = (result: any) => {\n /**\n * The function that converts an item from the result list to a string to display in the popup.\n * */\n return result.synonyms.length > 0 ? `${result.label} - ${result.synonyms}` : result.label;\n }\n\n\n inputFormatter(value: any) {\n /**\n * The function that converts an item from the result list to a string to display in the field.\n * */\n if (value.label) {\n return `${value.label}`;\n }\n return '';\n }\n\n /** Allele Search Functions */\n onAlleleSelect(e: any, input: any) {\n // this.inputEl.nativeElement.value = '';\n e.preventDefault();\n const selectedAllele = e.item;\n console.log(selectedAllele);\n let labels = _.map(this.selectedAlleles, (allele) => allele.label)\n if (!labels.includes(selectedAllele.label)) {\n this.selectedAlleles.push(selectedAllele);\n }\n // sessionStorage.setItem('selectedAlleles', JSON.stringify(this.selectedAlleles));\n input.value = '';\n }\n\n onAlleleSelectModal({e, input}: { e: any, input: any }) {\n e.preventDefault();\n const selectedAllele = e.item;\n let labels = _.map(this.modalAlleles, (allele) => allele.label)\n if (!labels.includes(selectedAllele.label)) {\n this.modalAlleles.push(selectedAllele);\n }\n input.value = '';\n }\n\n onBlurAlleleSelect(e: any, input: any) {\n /**\n * Displays alleles in the text box when out of focus.\n * */\n e.preventDefault();\n input.value = '';\n input.placeholder = 'Ex. HLA-A*02:01'\n if(this.selectedAlleles.length) {\n const labels = _.map(this.selectedAlleles, (o) => {\n return o.label;\n });\n input.value = labels.join(', ');\n }\n }\n\n open(content: any) {\n this.modalService.open(content, {\n ariaLabelledBy: 'modal-basic-title',\n size: 'lg',\n animation: true,\n backdrop: 'static'\n }).result.then((result) => {\n // this.closeResult = `Closed with: ${result}`;\n // this.saveState = false;\n // this.modalOpen = false;\n }, (reason) => {\n // this.closeResult = `Dismissed ${HomeComponentComponent.getDismissReason(reason)}`;\n });\n }\n\n onOpenAlleleModal() {\n this.open(this.alleleModal)\n this.modalAlleles = [...this.selectedAlleles]\n console.log(this.modalAlleles)\n }\n\n\n dismissAlleleModal() {\n this.modalService.dismissAll()\n }\n\n\n onAlleleClear(input: any) {\n this.selectedAlleles = []\n input.value = '';\n input.placeholder = 'Ex. HLA-A*02:01'\n }\n\n onAlleleDeselect(selectedAllele: Allele, input: any) {\n this.selectedAlleles = _.filter(this.selectedAlleles, (a) => a.label !== selectedAllele.label);\n if(this.selectedAlleles.length) {\n const labels = _.map(this.selectedAlleles, (o) => {\n return o.label;\n });\n input.value = labels.join(', ');\n }\n }\n\n onAlleleDeselectModal(index: number, input: { value: string }) {\n _.pullAt(this.modalAlleles, [index])\n const labels = this.modalAlleles.map(((o: { label: string; }) => o.label)).join(', ')\n input.value = this.modalAlleles.length ? labels : ''\n }\n\n generate27Alleles(input: any) {\n const { alleles } = alleleData;\n this.modalAlleles = _.map(alleles.split(','), (allele) => {return{label: allele, synonym: null, score: null}})\n input.value = this.selectedAlleleLabels;\n }\n\n onSubmitModalAlleles() {\n this.selectedAlleles = []\n _.forEach(this.modalAlleles, (selectedAllele) => {\n this.selectedAlleles.push(selectedAllele);\n })\n this.modalService.dismissAll()\n }\n\n onAlleleClearModal(input: { value: string; }) {\n this.modalAlleles = []\n input.value = ''\n }\n}\n","
\n
\n

IEDB Tools: Website Usage

\n
\n\n

\n Data and tools within the IEDB are presented as a public resource and are free to access for all users, including commercial users.\n

\n
\n\n

IEDB Tools: Download

\n
\n
Complete Download: Entire IEDB Analysis Resource
\n

\n For users that would like to run the entire analysis resource locally, a virtual machine image file is available\n with a paid commercial license. The image is kept in sync with the current version of the IEDB Analysis Resource\n and is updated on a six month cycle. Please contact us for details on\n licensing options.\n

\n
\n\n
\n
Standalone Download
\n

\n Several of the tools hosted on the IEDB NG Tools website are available as command-line tools, freely available\n to academic users through an open source license. For complete list of all versions of standalone tools used on\n the Legacy or NG Tools websites, click here.\n

\n
\n\n
\n\n

IEDB Tools: License Agreement

\n \n
\n
Description
\n

\n This tool wraps up several methods to support the prediction of class I peptide: MHC binding, elution, immunogenicity, and antigen processing\n

\n

\n This tool groups epitopes into clusters based on sequence identity using one of 3 different algorithms\n

\n

\n The PepMatch standalone includes all functionality to scan a list of peptides for closely related sequences in\n custom proteome databases using an ultra-efficient, deterministic algorithm.\n

\n

\n The Peptide eXpression annotator (pepX) takes a peptide as input,\n identifies from which proteins the peptide can be derived, and returns\n an estimate of the expression level of those source proteins from selected\n public databases.\n

\n

\n This package is a wrapper around T Cell Class I tool and will run predictors\n from that tool (binding, elution, immunogenicity) on a set of paired peptides\n and compare the results.\n

\n

\n The Mutant Peptide Generator tool will take a two-sample, SNPEff-annotated VCF as\n input and generate predicted neo-peptides and the reference / WT peptides\n with which they pair.\n

\n\n
License Agreements
\n

\n All standalone tools are distributed under the Non-Profit Open Software License (Non-Profit OSL) version 3.0.\n Some tools, developed in coordination with the Technical University of Denmark, are distributed with additional\n terms and conditions. By downloading the tools, you are implicitly agreeing to the terms of all applicable\n licenses.\n

\n
\n\n \n Agree and Download\n \n
\n\n
\n
\n","import { Component, OnInit } from '@angular/core';\nimport {NgModel} from \"@angular/forms\";\nimport onCsvDownloadAllClickedNew from \"../util/on-csv-download\";\nimport {HttpClient, HttpHeaders} from \"@angular/common/http\";\nimport {ActivatedRoute, Router} from \"@angular/router\";\nimport {Location} from \"@angular/common\";\n// import * as data from \"./\"\n\n@Component({\n selector: 'app-download-all',\n templateUrl: './download-all.component.html',\n styleUrls: ['./download-all.component.scss']\n})\nexport class DownloadAllComponent implements OnInit {\n\n selectedTool = 'mhc-class-i-binding'\n\n constructor(\n private http: HttpClient,\n private router: Router, private activatedRoute: ActivatedRoute, private location: Location,\n ) {\n this.selectedTool = this.router.getCurrentNavigation()?.extras?.state ? this.router.getCurrentNavigation()!.extras.state?.tool : 'mhc-class-i-binding'\n }\n\n ngOnInit(): void {}\n\n onAgreeAndDownload() {\n /**\n T Cell, Class I\n http://downloads.iedb.org/nextgen-tools/retrieve_package.php?tool=tcell_mhci\n\n Cluster\n http://downloads.iedb.org/nextgen-tools/retrieve_package.php?tool=cluster\n\n PepMatch (will be uploaded soon)\n http://downloads.iedb.org/nextgen-tools/retrieve_package.php?tool=pepmatch\n * */\n switch (this.selectedTool){\n case 'mhc-class-i-binding':\n window.open('https://downloads.iedb.org/nextgen-tools/retrieve_package.php?tool=tcell_mhci', '_self')\n return\n case 'pepmatch':\n // window.open('https://github.com/IEDB/PEPMatch', \"_blank\")\n window.open('https://downloads.iedb.org/nextgen-tools/retrieve_package.php?tool=pepmatch', \"_self\")\n return\n case 'cluster':\n window.open('https://downloads.iedb.org/nextgen-tools/retrieve_package.php?tool=cluster', '_self')\n return\n case 'pepx':\n window.open('https://downloads.iedb.org/nextgen-tools/retrieve_package.php?tool=pepx', '_self')\n return\n case 'pepcomp':\n window.open('https://downloads.iedb.org/nextgen-tools/retrieve_package.php?tool=peptide_variant_comparison', '_self')\n return\n case 'mutgen':\n window.open('https://downloads.iedb.org/nextgen-tools/retrieve_package.php?tool=mutated_peptide_generator', '_self')\n return\n default:\n return\n }\n }\n\n downloadNonProfit() {\n const name = 'LICENSE-NonProfitOSL3'\n\n function downLoadFile(data: any, type: string) {\n const blob = new Blob([data], {type: type}); // thx: http://stackoverflow.com/a/18925211\n const a = document.createElement('a');\n a.setAttribute('style', 'display:none;');\n document.body.appendChild(a);\n const contentType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-16';\n // var blob = new Blob([csvData], { type: contentType });\n a.href = window.URL.createObjectURL(blob);\n a.download = `${name}`\n a.click();\n }\n\n this.http.get(`assets/LICENSES/${name}`, { responseType: 'text' })\n .subscribe(data => {\n downLoadFile(data, 'txt')\n // console.log(data)\n });\n }\n\n downloadDTU() {\n const name = 'LICENSE-DTU'\n\n function downLoadFile(data: any, type: string) {\n const blob = new Blob([data], {type: type}); // thx: http://stackoverflow.com/a/18925211\n const a = document.createElement('a');\n a.setAttribute('style', 'display:none;');\n document.body.appendChild(a);\n const contentType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-16';\n // var blob = new Blob([csvData], { type: contentType });\n a.href = window.URL.createObjectURL(blob);\n a.download = `${name}`\n a.click();\n }\n\n this.http.get(`assets/LICENSES/${name}`, { responseType: 'text' })\n .subscribe(data => {\n downLoadFile(data, 'txt')\n // console.log(data)\n });\n }\n\n}\n","import {HttpClient, HttpHeaders} from '@angular/common/http';\n\nexport default function onCsvDownloadAllClickedNew(API_URL: string, http: HttpClient, extension = 'txt') {\n /**\n * Creates a csv file of all the query_set in the backend.\n * */\n // console.log(API_URL);\n const tableType = API_URL.split('/')[API_URL.split('/').length - 1];\n\n const headers = new HttpHeaders();\n headers.append('Accept', 'application/vnd.openxmlformatsofficedocument.spreadsheetml.sheet');\n\n /**\n * Method is use to download file.\n * @param data - Array Buffer data\n * @param type - type of the document.\n */\n function downLoadFile(data: any, type: string) {\n const blob = new Blob([data], {type: type}); // thx: http://stackoverflow.com/a/18925211\n const a = document.createElement('a');\n a.setAttribute('style', 'display:none;');\n document.body.appendChild(a);\n const contentType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-16';\n // var blob = new Blob([csvData], { type: contentType });\n a.href = window.URL.createObjectURL(blob);\n a.download = `${tableType}.${extension}`;\n a.click();\n }\n\n\n const resp = http.get(API_URL, {responseType: 'arraybuffer' as 'json', headers: headers,});\n\n resp.subscribe((response) => {\n downLoadFile(response, 'application/ms-excel');\n });\n}\n","import * as _ from \"lodash\";\n\nexport function columnListToObject(columns: any[], tool_group: string)\n{\n /**\n * Creates column object that contains\n\n * */\n let colObj = {}\n\n _.forEach(columns, (col, i) => {\n const {type, value_limits} = col\n // console.log(col.filterKey)\n // console.log(value_limits)\n if(type==='text' && col.value_limits.selectedValues.length) {\n /** Text filter */\n const key = col.filterKey;\n const { selectedValues } = col.value_limits\n const searchString = selectedValues.length == 1 ? selectedValues[0] : selectedValues.join('|')\n\n // @ts-ignore\n colObj[key] = {\n search: {\n search: searchString\n },\n tool_group: tool_group,\n source: columns[i]['source'],\n name: columns[i]['name']\n }\n }\n //@ts-ignore\n else if ((type==='int'|| type==='float') &&\n (value_limits.minValue || value_limits.maxValue || value_limits.minValue === 0 || value_limits.maxValue === 0)) {\n /** Number filter */\n // this._stateService.applyFiltersToParams()\n const key = col.filterKey;\n // @ts-ignore\n colObj[key] = {\n search: {\n min: col.value_limits.minValue,\n max: col.value_limits.maxValue\n },\n tool_group: tool_group,\n source: columns[i]['source'],\n name: columns[i]['name']\n };\n }\n })\n\n return colObj\n}\n\nexport function columnObjectToList(str: string) {\n try {\n JSON.parse(str);\n } catch (e) {\n return false;\n }\n return true;\n}\n","import { Injectable } from '@angular/core';\nimport _ from 'lodash';\nimport {isASCII} from \"../../util/string-helpers\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SequenceParserService {\n /**\n * contains functions to parse string and structure them in filteredSequence.\n * Also counts number of amino acids -> numOfAA\n\n * */\n public filteredSequences: { name: string, sequences: string }[] = [];\n public numOfAA!: number;\n public seqFormat: string = '';\n\n fastaParser(fastaTexts: string): void {\n this.filteredSequences = [];\n const sequenceArray = fastaTexts.split('>');\n sequenceArray.shift();\n this.numOfAA = 0;\n _.forEach(sequenceArray, (seq, i) => {\n const newObj = {\n name: getFirstLine(seq),\n sequences: getSequence(seq)\n };\n this.filteredSequences.push(newObj);\n this.numOfAA += newObj.sequences.length;\n });\n this.seqFormat = 'FASTA'\n }\n\n fastaValidate(fastaTexts: string): boolean {\n /**\n Validates the first 20 raw string lines\n *\n * */\n let sequenceArray = fastaTexts.split('\\n').slice(0, 20);\n\n let invalid = false;\n\n // let nameRegexp = new RegExp('^[a-zA-Z0-9.\\\\-_>]+$')\n let alphabetRegexp = new RegExp('^[a-zA-Z ]+$')\n\n _.forEach(sequenceArray, (val, i): any => {\n // console.log(i)\n // console.log(val)\n // console.log(typeof val)\n\n if (val === ''){\n // console.log('break0')\n return false;\n }\n if (val[0] === '>' && !isASCII(val)) { // name\n // console.log('break1');\n invalid=true; return false;\n }\n else if (val[0] !== '>' && !alphabetRegexp.test(val)) {\n // console.log('break2');\n invalid=true; return false;\n }\n });\n this.seqFormat = 'FASTA'\n return !invalid;\n }\n\n jsonParser(jsonTexts: string): void {\n this.filteredSequences = [];\n const parseObj = JSON.parse(jsonTexts);\n this.numOfAA = 0;\n if (Array.isArray(parseObj)) {\n this.filteredSequences = parseObj;\n this.numOfAA = 1;\n } else {\n this.filteredSequences.push(parseObj);\n this.numOfAA += parseObj.sequence.length;\n }\n this.seqFormat = 'JSON'\n }\n\n namedWhiteSpaceParser2(inputString: string): void {\n /**\n Two columns separated by ' ' or '\\t'\n *\n EX:\n \"seq1 DDEDSKQNIFH\n my_favorite_seq ADPGPHLMG\n denv4.3 KAVELGVKLLHA\n this-is-a_validName2 QLQNLGINP\"\n\n TODO: As a first pass, I think the valid characters for names should be:\n\n a-z (case insensitive)\n 0-9\n - (hyphen)\n . (period)\n _ (underscore)\n\n * */\n this.filteredSequences = [];\n\n // console.log(inputString);\n let sequenceArray = inputString.split('\\n');\n sequenceArray = _.filter(sequenceArray, (o) => o !== '');\n // console.log(sequenceArray);\n this.numOfAA = 0;\n _.forEach(sequenceArray, (line) => {\n const arr = line.includes(' ') ? line.split(' ') : line.split('\\t')\n // console.log(arr);\n const newObj = {\n name: arr[0],\n sequences: arr[1]\n };\n this.filteredSequences.push(newObj);\n this.numOfAA += newObj.sequences.length;\n });\n this.seqFormat = 'Named White Space'\n }\n\n namedWhiteSpaceValidate(inputString: string, split: string): boolean {\n /**\n Two columns separated by ' ' or '\\t'\n *\n EX:\n \"seq1 DDEDSKQNIFH\n my_favorite_seq ADPGPHLMG\n denv4.3 KAVELGVKLLHA\n this-is-a_validName2 QLQNLGINP\"\n\n TODO: As a first pass, I think the valid characters for names should be:\n\n a-z (case insensitive)\n 0-9\n - (hyphen)\n . (period)\n _ (underscore)\n\n\n ^[\\w\\_\\-\\.]+$\n\n [ACDEFGHIKLMNPQRSTVWYacdefghiklmnpqrstvwy]+\n\n TODO: Document\n regexp1\n regexp2\n general function\n\n also take out this.filteredSequence\n\n * */\n this.filteredSequences = [];\n\n // console.log(inputString);\n\n let sequenceArray = inputString.split('\\n').slice(0, 10);\n sequenceArray = _.filter(sequenceArray, (o) => o !== '');\n // console.log(sequenceArray);\n this.numOfAA = 0;\n let arr: string[] = [];\n let invalid = false;\n /**\n do\n statement\n while (condition);\n * */\n let separator = 'Space'\n let regexp1 = new RegExp('^[a-zA-Z0-9.\\\\-_]+$')\n let regexp2 = new RegExp('^[a-zA-Z]+$')\n _.forEach(sequenceArray, (line, i): any => {\n // console.log(i)\n // split by it's separator\n arr = line.split(split)\n // console.log(arr)\n if(\n arr.length !== 2 || !regexp1.test(arr[0]) || !regexp2.test(arr[1])\n ){console.log('break'); invalid=true; return false}\n\n if(line.includes(' ')){\n // arr = line.split(' ')\n separator = 'Space'\n } else if (line.includes('\\t')){\n // console.log('inside tab if statement')\n // arr = line.split('\\t')\n separator = 'Tab'\n } else if (line.includes('\\s')){\n // arr = line.split('\\s')\n separator = 'Space'\n }\n // console.log(separator)\n\n });\n this.seqFormat = `Named White Space (${separator})`\n // console.log(sequenceArray)\n // console.log(this.filteredSequences)\n return !invalid;\n\n // return this.filteredSequences.length <= 10\n }\n\n // namedWhiteSpaceParser(inputString: string): void {\n // this.filteredSequences = [];\n //\n // console.log(inputString);\n // let sequenceArray = inputString.split('\\n');\n // sequenceArray = _.filter(sequenceArray, (o) => o !== '');\n // this.numOfAA = 0;\n // _.forEach(sequenceArray, (seq) => {\n // const newObj = {\n // name: getFirstLine(seq),\n // sequences: getSequence(seq)\n // };\n // this.filteredSequences.push(newObj);\n // this.numOfAA += newObj.sequences.length;\n // });\n // }\n\n unnamedWhiteSpaceValidate(inputString: string): boolean {\n this.filteredSequences = [];\n\n console.log(inputString);\n let sequenceArray = [];\n if (inputString.includes(' ')) {\n sequenceArray = inputString.split(' ').slice(0, 10);\n } else {\n sequenceArray = inputString.split('\\n').slice(0, 10);\n }\n sequenceArray = _.filter(sequenceArray, (o) => o !== '');\n this.numOfAA = 0;\n let arr: string[] = [];\n let invalid = false;\n\n let regexp = new RegExp('^[a-zA-Z\\s\\t]+$')\n _.forEach(sequenceArray, (line, i) : any=> {\n // console.log(i)\n // split by it's separator\n // console.log(arr)\n if(\n !regexp.test(line)\n ){console.log('break'); invalid=true; return false}\n });\n this.seqFormat = 'Un-named White Space'\n // console.log(sequenceArray)\n // console.log(this.filteredSequences)\n if(invalid) {\n return false\n }\n return this.filteredSequences.length <= 10\n }\n\n // unnamedWhiteSpaceParser(inputString: string): void {\n // this.filteredSequences = [];\n //\n // console.log(inputString);\n // let sequenceArray = [];\n // if (inputString.includes(' ')) {\n // sequenceArray = inputString.split(' ');\n // } else {\n // sequenceArray = inputString.split('\\n');\n // }\n // sequenceArray = _.filter(sequenceArray, (o) => o !== '');\n // this.numOfAA = 0;\n // _.forEach(sequenceArray, (seq) => {\n // const newObj = {\n // name: getFirstLine(seq),\n // sequences: getSequence(seq)\n // };\n // this.filteredSequences.push(newObj);\n // this.numOfAA += newObj.sequences.length;\n // });\n // this.seqFormat = 'Un-named White Space'\n // }\n\n}\n\n\n\nfunction getFirstLine(text: string) {\n let index = text.indexOf('\\n');\n if (index === -1) {\n index = NaN;\n }\n return text.substring(0, index);\n}\n\nfunction getSequence(text: string) {\n let index = text.indexOf('\\n');\n if (index === -1) {\n index = NaN;\n }\n return text.substring(index).replace(/\\n/g, '');\n}\n","\n
\n
\n \n \n
\n \n \n
\n
\n Loading...\n
\n
\n
\n
\n \n
\n
\n
\n
\n","import {Component, EventEmitter, OnInit, Output, Input} from '@angular/core';\nimport {ControlContainer, UntypedFormBuilder} from '@angular/forms'\n\n@Component({\n selector: 'app-mhc-binding-formgroup',\n templateUrl: './mhc-binding-formgroup.component.html',\n styleUrls: ['./mhc-binding-formgroup.component.scss']\n})\nexport class MhcBindingFormgroupComponent implements OnInit {\n\n @Input() modelIndex: number | any;\n @Input() disabled: boolean | any;\n @Input() predictionOption: {\n display_name: string,\n short_name: string,\n group: string,\n source: string,\n has_ic50: boolean\n }[] = [];\n\n @Output() emitPredictionModelIndex = new EventEmitter();\n addProcessing: boolean = false;\n public ogFormGroup: any = null;\n\n constructor(\n public controlContainer: ControlContainer,\n private fb: UntypedFormBuilder\n ) {\n }\n\n ngOnInit(): void {\n this.ogFormGroup = this.controlContainer.control;\n }\n\n onCancelClick() {\n this.emitPredictionModelIndex.emit(this.modelIndex);\n }\n\n addProcessingFormGroup(proteasome = 'immuno', tap_precursor = 1, tap_alpha = 0.2) {\n this.ogFormGroup.addControl(\n 'processing',\n this.fb.group({\n proteasome: this.fb.control(proteasome),\n tap_precursor: this.fb.control(tap_precursor),\n tap_alpha: this.fb.control(tap_alpha)\n })\n )\n }\n\n removeProcessingFormGroup() {\n this.ogFormGroup.removeControl('processing')\n }\n\n onAddProcessingChange() {\n this.addProcessing = !this.addProcessing\n this.addProcessing ? this.addProcessingFormGroup() : this.removeProcessingFormGroup()\n }\n}\n","\n
\n \n
\n\n \n \n \n \n
\n \n
\n \n
\n
\n
\n","import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';\nimport {ControlContainer} from '@angular/forms'\n\n@Component({\n selector: 'app-pmhc-immunogenicity-formgroup',\n templateUrl: './pmhc-immunogenicity-formgroup.component.html',\n styleUrls: ['./pmhc-immunogenicity-formgroup.component.scss']\n})\nexport class PmhcImmunogenicityFormgroupComponent implements OnInit {\n @Input() modelIndex: number | any;\n @Input() disabled: boolean | any;\n\n @Output() emitPredictionModelIndex = new EventEmitter();\n public ogFormGroup: any = null;\n\n constructor(public controlContainer: ControlContainer) {\n }\n\n ngOnInit(): void {\n this.ogFormGroup = this.controlContainer.control;\n }\n\n get mask_choice() {\n return this.ogFormGroup.controls['mask_choice'].value\n }\n\n onCancelClick() {\n this.emitPredictionModelIndex.emit(this.modelIndex);\n }\n\n}\n","
\n \n
\n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n \n Please save table state in order to pipe to the next tool.\n \n \n \n \n\n
\n \n
\n
\n \n \n \n \n\n \n \n \n \n \n\n \n
\n
\n\n
\n\n\n\n
\n

Select Columns to Display

\n \n
\n
\n
\n
\n
\n {{uniqSrc.split('.')[1] || uniqSrc.split('.')[0] | titlecase}}\n \n \n
\n \n
\n \n \n \n {{o.description}}\n \n
\n
\n
\n
\n
\n
\n \n \n
\n
\n\n

\n Sorted column and columns that can be used as inputs downstream cannot be hidden.\n

\n
\n","import {\n Component,\n OnInit,\n AfterViewInit,\n ViewChild,\n ViewChildren,\n Input,\n OnDestroy,\n Output,\n EventEmitter, ElementRef,\n QueryList\n} from '@angular/core';\nimport {UntypedFormBuilder, UntypedFormGroup} from \"@angular/forms\";\n\nimport {NgbModal, NgbDropdown} from '@ng-bootstrap/ng-bootstrap';\nimport _ from 'lodash';\nimport {Observable, Subject} from 'rxjs';\nimport {takeUntil} from \"rxjs/operators\";\nimport { Papa } from 'ngx-papaparse';\n\nimport {DataTableDirective} from 'angular-datatables';\nimport {ADTSettings} from 'angular-datatables/src/models/settings';\n\nimport {PipelineStateService} from \"../services/state-services/pipeline-state-service/pipeline-state.service\";\nimport Columns from '../_global/Columns';\nimport Tool from \"../_global/Tool\";\nimport Stage from \"../_global/Stage\";\n\n@Component({\n selector: 'app-result-table',\n templateUrl: './result-table.component.html',\n styleUrls: ['./result-table.component.scss']\n})\nexport class ResultTableComponent implements OnInit, AfterViewInit, OnDestroy {\n\n @ViewChild(DataTableDirective, {static: false}) dtElement!: DataTableDirective;\n dtOptions: ADTSettings = {};\n\n @ViewChild('displayColumnModal') displayColumnModal!: ElementRef;\n\n /** NgbDropdowns */\n @ViewChildren(NgbDropdown) dropdowns!: QueryList;\n private dropdown!: NgbDropdown;\n\n @Input() inputChange: boolean = false;\n /** API Call Variables */\n @Input() table_data: [(number | string)[]] = [[]]; // peptide_table\n @Input() order: [][] | any = [];\n @Input() columns: Columns[] | any; // peptide_table\n defaultColumnConfig: object = {};\n @Input() warnings: [] = []\n @Input() tool_group!: string;\n @Input() index!: number;\n @Input() tableStateSaving = false;\n @Input() table_name!: string;\n\n @Output() emitSaveTableState = new EventEmitter();\n @Output() emitFilterApplied = new EventEmitter();\n @Output() emitResetTableState = new EventEmitter();\n\n prevColumnDisplayFormValue!: object\n columnDisplayForm!: UntypedFormGroup\n uniqSources: string[] = [];\n /** We use this trigger because fetching the list of persons can be quite long,\n thus we ensure the data is fetched before rendering */\n dtTrigger: Subject = new Subject();\n\n unsubscribe$ = new Subject();\n // params$: Observable = this._stateService.params$;\n\n tools$: Observable = this._stateService.tools$;\n tools: Tool[] = [];\n\n stages$: Observable = this._stateService.stages$;\n stages: Stage[] = [];\n\n pipelineId$: Observable = this._stateService.pipelineId$;\n pipelineId = '';\n\n dataToPipe: string = '';\n dataToPipe2: string = '';\n\n currentOrder: [][] | any;\n\n table_state: any; // used in GET Pipeline\n searchCols: any[] = [] // used in GET Pipeline\n\n loading = false;\n constructor(\n private formBuilder: UntypedFormBuilder,\n private modalService: NgbModal,\n private papa: Papa,\n private _stateService: PipelineStateService\n ) {\n }\n\n ngOnInit() {\n this.currentOrder = [...this.order];\n\n this.dtOptions = {\n dom:\n '<\"\" ' +\n '<\"row p-1\" ' +\n '<\"col-3 pt-3\" l>' +\n '<\"col-4 px-5\" i>' +\n '<\"col-5\" p>>> t' +\n '<\"\" ' +\n '<\"row p-1\" ' +\n '<\"col-3 pt-3\" l>' +\n '<\"col-4 px-5\" i>' +\n '<\"col-5\" p>>>', // https://datatables.net/examples/basic_init/dom.html\n autoWidth: false,\n pagingType: 'simple_numbers',\n paging: true,\n pageLength: 50,\n ordering: true,\n orderMulti: true,\n stateSave: false,\n language: {\n lengthMenu: \"Show _MENU_ rows\",\n info: \"_START_ to _END_ of _TOTAL_ rows\",\n infoFiltered: \"(filtered from _MAX_ total rows)\"\n },\n data: this.table_data,\n order: this.currentOrder,\n columnDefs: _.map(this.columns, (column, i) => {\n return {\n targets: [i],\n createdCell: (td, cellData, rowData, row, col) => {\n let textAlign = ['int', 'float'].includes(column.type) ? 'right' : 'left';\n $(td).css('text-align', textAlign);\n },\n visible: !column.hidden, // set default visible columns\n render: (data, type) => {\n // console.log(i, data, type);\n if (column.type === 'int' && isNaN(data)) return parseInt(data);\n else if (column.type === 'float' && !isNaN(data) &&\n type === 'display' && column.number_of_digits) return parseFloat(data).toFixed(column.number_of_digits);\n else if (column.type === 'float' && !isNaN(data)) return parseFloat(data);\n else if (column.type === 'float' && isNaN(data)) return null;\n // if (column.name === 'protein_name' && data.length>=column.display_length) return `${data.substring(0, column.display_length)}...`;\n return data;\n }\n }\n }),\n destroy: true,\n deferRender: true,\n orderClasses: false,\n searchCols: []\n };\n\n // get tools\n this.tools$.pipe(takeUntil(this.unsubscribe$)).subscribe(value => {\n // console.log('tools$');\n // console.log(value);\n this.tools = value;\n })\n\n this.stages$.pipe(takeUntil(this.unsubscribe$)).subscribe(value => {\n this.stages = value;\n\n /** set dataToPipe */\n if(this.stages.length>=2) {\n const stage = this.stages[this.index+1]; // get the last stage\n // this.dataToPipe = stage?.piped_input && stage.piped_input[0].piped_fields[0];\n\n this.dataToPipe = stage?.piped_data && stage!.piped_data?.piped_input && stage.piped_data.piped_input[0]?.piped_fields![0] || '';\n this.dataToPipe2 = stage?.piped_data && stage!.piped_data?.piped_input && stage.piped_data.piped_input[0]?.piped_fields![1] || '';\n console.log(`dataToPipe = ${this.dataToPipe}`)\n console.log(`dataToPipe2 = ${this.dataToPipe2}`)\n } else {\n this.dataToPipe = '';\n this.dataToPipe2 = '';\n }\n // console.log(this.dataToPipe);\n\n /** set filters from GET Pipeline */\n this.table_state = this.stages[this.index]?.table_state;\n this.searchCols = Array.from({length: this.columns.length}, ()=> {})\n\n /**\n * Added 'this.table_state' in if statement and\n *\n * this.table_state[0] = peptide_table\n * this.table_state[1] = peptide_gene_summary_table (pepx)\n * */\n let tableIndex: number\n switch (this.table_name) {\n case 'peptide_gene_summary_table':\n tableIndex = 1\n break;\n case 'peptide':\n tableIndex = 1\n break;\n case 'unique_peptide':\n tableIndex = 0\n break;\n default: // peptide_table\n tableIndex = 0\n }\n\n if(this.table_state && this.table_state[tableIndex] && !_.isEmpty(this.table_state[tableIndex]?.columns)) {\n // console.log(`tableIndex=${tableIndex}`);\n // console.log(this.table_state[tableIndex].columns);\n // console.log(this.columns);\n for (const col in this.table_state[tableIndex].columns) {\n let column = this.table_state[tableIndex].columns[col]\n const{ name, source } = column\n const { min, max, search } = column.search;\n let i = _.findIndex(this.columns, {name, source})\n\n // console.log(i)\n // console.log({name, source})\n\n this.columns[i].value_limits.minValue = min || min === 0 ? min : NaN\n this.columns[i].value_limits.maxValue = max || max === 0 ? max : NaN\n\n this.searchCols[i] = {search: search, regex: true, smart: false}\n this.columns[i].value_limits.selectedValues = search ? search.split('|') : []\n this.columns[i].value_limits.applied = true\n }\n\n }\n // this.dtOptionsArr[this.index].searchCols = this.searchCols;\n this.dtOptions.searchCols = this.searchCols;\n })\n\n this.pipelineId$.pipe(takeUntil(this.unsubscribe$)).subscribe(value => {\n console.log(`pipelineId=${value}`);\n this.pipelineId = value;\n })\n\n }\n\n ngAfterViewInit() {\n this.setColumnDisplayForm();\n this.dtTrigger.next();\n // this.setMinAndMax();\n\n // console.log(this.filterDropdown.isOpen())\n }\n\n ngOnDestroy(): void {\n // $.fn.dataTable.ext.search = [];\n this.dtTrigger.unsubscribe();\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n\n get visibleColumns() {\n return _.filter(this.columns, c => !c.hidden) as Columns[]\n }\n\n onOpenDisplayColumnModal() {\n this.prevColumnDisplayFormValue = this.columnDisplayForm.value;\n console.log(this.columnDisplayForm.value)\n this.disableSortedColumnInputs()\n this.disableInputColumns()\n this.open(this.displayColumnModal)\n }\n\n disableSortedColumnInputs() {\n /**\n * Prior to opening modal,\n * disable controls from columnDisplayForm that have sorted columns.\n * */\n this.columnDisplayForm.enable();\n this.dtElement.dtInstance.then((dtInstance: DataTables.Api) => {\n const colIndex = [];\n const order = dtInstance.state().order;\n _.forEach(order, (o) => {\n console.log(o);\n colIndex.push(o[0]);\n const formControlName = this.columns[o[0]].filterKey;\n console.log(formControlName);\n this.columnDisplayForm.controls[`${formControlName}`].disable();\n })\n });\n }\n\n disableInputColumns() {\n /**\n * Prior to opening modal,\n * disable controls from columnDisplayForm that have columns that can be used downstream (i.e. peptide and cluster_concensus).\n * */\n this.columnDisplayForm.controls['core.peptide']?.value && this.columnDisplayForm.controls['core.peptide'].disable()\n this.columnDisplayForm.controls['cluster.peptide']?.value && this.columnDisplayForm.controls['cluster.peptide'].disable()\n this.columnDisplayForm.controls['cluster.cluster_consensus']?.value && this.columnDisplayForm.controls['cluster.cluster_consensus'].disable()\n\n }\n\n /** Column Display Modal Functions*/\n\n open(content: any) {\n /**\n * Open Modal\n * */\n this.modalService.open(content, {\n ariaLabelledBy: 'modal-basic-title',\n size: 'lg',\n animation: true,\n backdrop: 'static'\n }).result.then((result) => {\n console.log(result)\n // this.closeResult = `Closed with: ${result}`;\n }, (reason) => {\n console.log(reason)\n });\n }\n\n dismissModal() {\n this.columnDisplayForm.patchValue(this.prevColumnDisplayFormValue)\n\n this.modalService.dismissAll()\n }\n\n onSetDisplayColumns() {\n /**\n * Display onClick\n * */\n let visibleColumns: number[] = []; // let visibleColumns: string[] = [];\n let invisibleColumns: number[] = []; // let invisibleColumns: string[] = [];\n\n this.dtElement.dtInstance.then((dtInstance: DataTables.Api) => {\n console.log(dtInstance);\n _.forEach(this.columns, (o, i: number) => {\n if (this.columnDisplayForm.controls[`${o.filterKey}`].value) {\n visibleColumns.push(i)\n this.columns[i].hidden = false\n }\n else {\n invisibleColumns.push(i);\n this.columns[i].hidden = true\n }\n })\n dtInstance.columns(visibleColumns).visible(true);\n dtInstance.columns(invisibleColumns).visible(false);\n this.modalService.dismissAll();\n });\n }\n\n setColumnDisplayForm() {\n /**\n * 1) set's this.selectedColumn w/ recommendedColumns, smmColumns, consensusColumns\n * 2) set's this.columnDisplayForm with the proper inputs.\n * 3) Also sets $.fn.dataTable.ext which allows number filtering\n * */\n let controlConfig: any = {}\n this.uniqSources = [];\n _.forEach(this.columns, (col, i: number) => {\n controlConfig[`${col.filterKey}`] = !col.hidden;\n if (!this.uniqSources.includes(col.source)) {\n this.uniqSources.push(col.source);\n }\n // datatables adding min/max filters for each of the table\n $.fn['dataTable'].ext.search.push((settings: any, data: string[], dataIndex: any) => {\n\n // const table = settings.table()\n if (settings.nTable.id !== `DataTables_${this.tool_group}${this.table_name}`){\n return true;\n }\n\n // const id = parseFloat(data[i]) || i; // use data for the id column - can't use this because '0' does not get\n const val = parseFloat(data[i]); // 0 does get set properly\n /**\n 1. Both min and max are numbers\n * */\n if ((isNaN(this.columns[i].value_limits?.minValue) && isNaN(this.columns[i].value_limits?.maxValue)) ||\n (isNaN(this.columns[i].value_limits?.minValue) && val <= this.columns[i].value_limits?.maxValue) ||\n (this.columns[i].value_limits?.minValue <= val && isNaN(this.columns[i].value_limits?.maxValue)) ||\n (this.columns[i].value_limits?.minValue <= val && val <= this.columns[i].value_limits?.maxValue)) {\n return true;\n }\n return false;\n\n })\n })\n this.columnDisplayForm = this.formBuilder.group(controlConfig);\n this.defaultColumnConfig = controlConfig\n }\n\n onDefaultColumns() {\n /**\n uses this.defaultColumnConfig that gets set in this.setColumnDisplayForm()\n * */\n this.columnDisplayForm = this.formBuilder.group(this.defaultColumnConfig);\n }\n\n stopProp(e: { stopPropagation: () => void; }) {\n /** used in column filters */\n e.stopPropagation();\n }\n\n onSortColumns(colIndex: number, order: string) {\n /** used in column filters */\n this.dtElement.dtInstance.then((dtInstance: DataTables.Api) => {\n dtInstance.order([colIndex, order]).draw();\n });\n }\n\n /** General filter functions */\n onFilterDropdownOpen() {\n $('.mat-drawer-content').removeClass(\"fixed-position\");\n $('.reset-button').prop(\"disabled\", false);\n $('.run-button').prop(\"disabled\", false);\n }\n\n onFilterDropdownClose() {\n $('.mat-drawer-content').addClass(\"fixed-position\");\n $('.reset-button').prop(\"disabled\", true);\n $('.run-button').prop(\"disabled\", true);\n }\n\n checkClosedDropdown(e: boolean) {\n if(!e) {this.onFilterDropdownOpen();}\n }\n\n checkOpenedDropdown(i: number) {\n /**\n * used in ngbDropdown - disable scroll when dropdown filter is applied.\n * */\n // Check which dropdown was clicked\n this.dropdown = this.dropdowns.get(i) as NgbDropdown;\n // Check if the clicked dropdown is open\n if(this.dropdown.isOpen()) {this.onFilterDropdownClose();}\n }\n\n\n /** Number Filter Functions*/\n setMinAndMax() {\n let that = this;\n this.dtElement.dtInstance.then((dtInstance: DataTables.Api) => {\n const newColumns = dtInstance.columns()\n newColumns.every(function(i) {\n let column = this;\n const columnValue = column.dataSrc();\n\n let sortFunc;\n if (columnValue !== 'core_peptide') {\n sortFunc = (a: number, b: number) => a - b\n }\n /** Text Filter */\n let distinctArray: any[] = [];\n column.data().sort(sortFunc).each(function (d, j) {\n if (distinctArray.indexOf(d) == -1) {\n distinctArray.push(d);\n }\n });\n /** Set Text/Number Filter Values */\n // console.log(that.columns[i]['type']);\n if (that.columns[i]['type'] === 'text') {\n that.columns[i]['value_limits']['possibleValues'] = distinctArray\n } else {\n that.columns[i]['value_limits']['min'] = distinctArray[0]\n that.columns[i]['value_limits']['max'] = distinctArray[distinctArray.length - 1]\n }\n })\n })\n }\n\n onClearNumberFilter(i: number) {\n $(`.min${i}${this.tool_group}${this.table_name}, .max${i}${this.tool_group}${this.table_name}`).val(NaN);\n this.columns[i]['value_limits']['applied'] = false;\n this.columns[i]['value_limits']['minValue'] = NaN;\n this.columns[i]['value_limits']['maxValue'] = NaN;\n this.dtElement.dtInstance.then((dtInstance: DataTables.Api) => {\n dtInstance.column(i).search(\n '',\n true, false\n ).draw();\n this.emitFilterApplied.emit()\n });\n }\n onNumberFilter(i: number) {\n\n this.columns[i]['value_limits']['minValue'] = parseFloat($(`.min${i}${this.tool_group}${this.table_name}`).val());\n this.columns[i]['value_limits']['maxValue'] = parseFloat($(`.max${i}${this.tool_group}${this.table_name}`).val());\n\n const {minValue, maxValue} = this.columns[i]['value_limits'];\n\n const filterApplied = !!(minValue || maxValue || minValue === 0 || maxValue === 0);\n this.columns[i]['value_limits']['applied'] = filterApplied\n\n console.log(`index=${i}`)\n console.log(minValue)\n console.log(maxValue)\n\n this.dtElement.dtInstance.then((dtInstance: DataTables.Api) => {\n dtInstance.draw();\n this.emitFilterApplied.emit()\n });\n }\n\n /** Text Filter Functions*/\n onFilterPossibleValues(e: any, i: number) {\n /**\n * .toUpperCase() make it case insensitive\n * */\n\n let value = e.target.value;\n this.dtElement.dtInstance.then((dtInstance: DataTables.Api) => {\n let column = dtInstance.column(i);\n let distinctArray: any[] = [];\n column.data().sort().each(function (d, j) {\n if (distinctArray.indexOf(d) == -1) {\n distinctArray.push(d);\n }\n });\n this.columns[i]['value_limits']['possibleValues'] = value ?\n _.filter(distinctArray, (item) => _.startsWith(item.toUpperCase(), value.toUpperCase())) :\n distinctArray\n });\n\n }\n\n onClearTextFilter(i: number) {\n this.columns[i]['value_limits']['applied'] = false;\n $('.column-checkbox-'.concat(i.toString())).prop('checked', false);\n this.columns[i]['value_limits'].selectedValues = []\n this.dtElement.dtInstance.then((dtInstance: DataTables.Api) => {\n dtInstance.column(i).search(\n '',\n true, false\n ).draw();\n this.emitFilterApplied.emit()\n // this.checkFilterApplied(dtInstance);\n });\n }\n\n onTextFilter(i: number) {\n /**\n *\n * TODO: Edit this for params\n {\n \"search\": {\n \"search\": \"^MGQIVTMFE$|^GQIVTMFEA$|^QIVTMFEAL$\"\n },\n \"tool_group\": \"mhci\",\n \"name\": \"peptide\",\n \"source\": \"core\"\n },\n * */\n const { name, filters, value_limits, source } = this.columns[i];\n const {selectedValues} = value_limits;\n let searchString = selectedValues.length == 1 ? selectedValues[0] : selectedValues.join('|')\n this.columns[i]['value_limits']['applied'] = !!(selectedValues.length);\n /** create searchObject */\n\n console.log(searchString)\n\n this.dtElement.dtInstance.then((dtInstance: DataTables.Api) => {\n dtInstance.column(i).search(\n searchString,\n true, false\n ).draw();\n this.emitFilterApplied.emit()\n }\n );\n }\n\n createRegexSafe(searchString: string) {\n /**\n * Helper function - used in onTextValueSelect\n * */\n return '^' + searchString.toString().split('+').join('\\\\+').split('-').join('\\\\-').split('[').join('\\\\[').split(']').join('\\\\]').split('*').join('\\\\*') + '$';\n }\n\n onCheckSelectAllTextValue(e: any, i: number) {\n /**\n * e: $event\n * i: column index\n * */\n const checked = e.target.checked;\n this.columns[i]['value_limits'].selectedValues = [];\n if (checked) { // select all\n _.forEach(this.columns[i]['value_limits']['possibleValues'], (value) => {\n this.columns[i]['value_limits'].selectedValues.push(\n this.createRegexSafe(value)\n );\n });\n }\n }\n\n onTextValueSelect(e: any, i: number) {\n const checked = e.target.checked, value = e.target.value;\n // console.log(`checked=${checked} || value=${value}`)\n if (checked) {\n this.columns[i]['value_limits'].selectedValues.push(\n this.createRegexSafe(value)\n );\n } else {\n _.remove(this.columns[i]['value_limits'].selectedValues, (possibleValue) => this.createRegexSafe(value) === possibleValue)\n }\n // console.log(this.columns[i]['value_limits']);\n }\n\n clearTableState(): void {\n\n this.emitResetTableState.emit()\n\n this.currentOrder = [...this.order]\n this.dtOptions.order = this.currentOrder\n\n this.dtTrigger.next(this.dtOptions);\n\n const initTool = this.tools[this.index];\n const unSubmittedTool = {\n ...initTool,\n appliedFilters: undefined\n }\n this._stateService.insertTool(unSubmittedTool, this.index);\n const table_state = [{table: 'peptide_table', columns: {}}]\n this._stateService.insertTableStateToStage(table_state, this.index);\n this._stateService.applyFiltersToParams(this.index, {});\n this.setColumnDisplayForm();\n this.setMinAndMax();\n }\n\n onSaveTableState() {\n // Create colObj\n // console.log(this.columns)\n // console.log(this.tool_group)\n // let colObj = columnListToObject(this.columns, this.tool_group)\n //\n // const table_state = [{table: 'peptide_table', columns: colObj}]\n // this._stateService.insertTableStateToStage(table_state, this.index)\n // this._stateService.insertTableStateToStage({columns: colObj}, this.index)\n\n this.emitSaveTableState.emit()\n }\n\n downloadResultFiles(data: string, format: string, fileName='result') {\n const a = document.createElement('a');\n a.setAttribute('style', 'display:none;');\n document.body.appendChild(a);\n // const contentType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-16';\n // var blob = new Blob([csvData], { type: contentType });\n const blob = new Blob([data]); // thx: http://stackoverflow.com/a/18925211\n\n // const blob = new Blob([data]); // thx: http://stackoverflow.com/a/18925211\n a.href = window.URL.createObjectURL(blob);\n switch (format) {\n case 'csv':\n a.download = `${fileName}.csv`;\n break;\n case 'tsv':\n a.download = `${fileName}.tsv`;\n break;\n case 'json':\n a.download = `${fileName}.json`;\n break;\n default:\n a.download = `${fileName}.txt`;\n break;\n }\n\n a.click();\n }\n\n // convertCurrentResultToTsv() : string {\n // // currently csv instead of tsv\n // let str = '';\n // let header = ''\n // _.forEach(this.columns, (col) => {\n // // header+= `${col.name}\\t`\n // header+= `${col.name},`\n // })\n // str += `${header}\\n`\n // _.forEach(this.table_data, (row) => {\n // console.log(row)\n // // let newRow = row.toString().replace(/,/g, '\\t')\n // let newRow = row.toString()\n // console.log(newRow)\n // str += `${newRow}\\n`\n // })\n // str += '\\n'\n // return str\n // }\n\n // convertCurrentResultToTSV2(data: any, visible_columns: any) : any {\n // // currently csv instead of tsv\n // let str = '';\n // let header = ''\n // _.forEach(this.columns, (col, i) => {\n // if(visible_columns[i]) {\n // header+= `${col.name},` // header+= `${col.name}\\t`\n // }\n // })\n // str += `${header}\\n`\n // _.forEach(data, (row) => {\n // const tempRow: any = []\n // _.forEach(row, (val, i) => {\n // if(visible_columns[i]) {\n // // let newRow = row.toString().replace(/,/g, '\\t')\n // tempRow.push(val)\n // }\n // })\n // let newRow = tempRow.toString()\n // str += `${newRow}\\n`\n // })\n // str += '\\n'\n // return str\n // }\n\n convertCurrentResultToJSON() : any {\n return _.map(this.table_data, (row) => {\n let obj: any = {}\n _.forEach(row, (value, i) => {\n obj[this.columns[i].display_name] = value\n })\n return obj\n })\n }\n\n convertCurrentResultToJSON2(data: any, visible_columns: any) : any {\n return _.map(data, (row) => {\n let obj: any = {}\n _.forEach(row, (value, i) => {\n if(visible_columns[i]) {\n obj[this.columns[i].display_name] = value\n }\n })\n return obj\n })\n }\n\n downloadAllTsv() {\n /**\n * JSON -> TSV -> File\n * */\n const fileName = `${this.table_name}_${this.pipelineId.substring(0, 8)}`\n\n this.dtElement.dtInstance.then((dtInstance: DataTables.Api) => {\n /** dtInstance.order() -> lodash order */\n const order = dtInstance.order()\n\n const lodashOrder = this.convertDTOrderToLodash(order)\n\n /** get and sort data */\n const data = this.convertCurrentResultToJSON();\n\n const sortedData = _.orderBy(data, ...lodashOrder)\n\n console.log(sortedData)\n\n const config = {\n delimiter: \"\\t\",\n }\n /** convert to tsv and download result */\n const csvData = this.papa.unparse(sortedData, config)\n console.log(csvData)\n this.downloadResultFiles(csvData, 'tsv', fileName)\n })\n }\n\n downloadAllCsv() {\n /**\n * JSON -> CSV -> File\n * */\n const fileName = `${this.table_name}_${this.pipelineId.substring(0, 8)}`\n\n this.dtElement.dtInstance.then((dtInstance: DataTables.Api) => {\n /** dtInstance.order() -> lodash order */\n const order = dtInstance.order()\n\n const lodashOrder = this.convertDTOrderToLodash(order)\n\n /** get and sort data */\n const data = this.convertCurrentResultToJSON();\n\n const sortedData = _.orderBy(data, ...lodashOrder)\n /** download sorted data */\n const csvData = this.papa.unparse(sortedData)\n console.log(csvData)\n this.downloadResultFiles(csvData, 'csv', fileName)\n })\n }\n\n downloadAllJSON() {\n /**\n * JSON -> File\n * */\n const fileName = `${this.table_name}_${this.pipelineId.substring(0, 8)}`\n\n this.dtElement.dtInstance.then((dtInstance: DataTables.Api) => {\n /** dtInstance.order() -> lodash order */\n const order = dtInstance.order()\n\n const lodashOrder = this.convertDTOrderToLodash(order)\n\n /** get and sort data */\n const data = this.convertCurrentResultToJSON();\n\n const sortedData = _.orderBy(data, ...lodashOrder)\n\n /** download sorted data */\n this.downloadResultFiles(JSON.stringify(sortedData, null, 2), 'json', fileName)\n })\n\n }\n\n downloadTSV() {\n const fileName = `${this.table_name}_${this.pipelineId.substring(0, 8)}_displayed`\n\n this.dtElement.dtInstance.then((dtInstance: DataTables.Api) => {\n const peptide_table = dtInstance.rows({page: 'current', search: 'applied'}).data();\n console.log(peptide_table)\n const d = dtInstance.columns().visible();\n console.log(d)\n // const data = this.convertCurrentResultToTSV2(peptide_table, d)\n const data = this.convertCurrentResultToJSON2(peptide_table, d)\n const config = {\n delimiter: \"\\t\",\n }\n const csvData = this.papa.unparse(data, config)\n console.log(csvData)\n this.downloadResultFiles(csvData, 'tsv', fileName)\n }\n );\n }\n\n downloadCSV() {\n const fileName = `${this.table_name}_${this.pipelineId.substring(0, 8)}_displayed`\n\n this.dtElement.dtInstance.then((dtInstance: DataTables.Api) => {\n const peptide_table = dtInstance.rows({page: 'current', search: 'applied'}).data();\n console.log(peptide_table)\n const d = dtInstance.columns().visible();\n console.log(d)\n // const data = this.convertCurrentResultToTSV2(peptide_table, d)\n const data = this.convertCurrentResultToJSON2(peptide_table, d)\n const csvData = this.papa.unparse(data)\n console.log(csvData)\n this.downloadResultFiles(csvData, 'csv', fileName)\n }\n );\n }\n\n downloadJSON() {\n const fileName = `${this.table_name}_${this.pipelineId.substring(0, 8)}_displayed`\n\n this.dtElement.dtInstance.then((dtInstance: DataTables.Api) => {\n const peptide_table = dtInstance.rows( {page:'current', search: 'applied'} ).data();\n console.log(peptide_table)\n const d = dtInstance.columns().visible();\n console.log(d)\n const data = this.convertCurrentResultToJSON2(peptide_table, d)\n console.log(data)\n this.downloadResultFiles(JSON.stringify(data, null, 2), 'json', fileName)\n }\n );\n }\n\n convertDTOrderToLodash(order: (string | number)[][]) {\n /**\n Helper function for download all\n convert dt table order -> lodash orderBy\n\n * https://datatables.net/reference/api/order()\n * https://lodash.com/docs/4.17.15#orderBy\n\n * */\n // console.log(this.columns)\n const tempVal = _.map(order, (o) => {\n const a = this.columns[o[0]]\n // console.log(a)\n return [a['display_name'], o[1]]\n })\n\n const temp1: string[] = []\n const temp2: string[] = []\n _.forEach(tempVal, (o) => {\n temp1.push(o[0])\n temp2.push(o[1])\n })\n\n return [temp1, temp2]\n }\n}\n","\n
\n
\n \n \n
\n \n \n
\n
\n Loading...\n
\n
\n
\n
\n \n
\n
\n \n \n
\n
\n \n
\n \n
\n
\n
\n
\n \n \n
\n
\n
Transporter associated with antigen processing
\n
\n \n
\n
\n \n
\n \n
\n
\n
\n \n
\n
\n \n
\n \n
\n
\n
\n\n
\n
\n
\n\n
\n \n \n
\n
\n \n
\n \n
\n
\n
\n \n
\n \n
\n
\n
\n \n
\n \n
\n
\n
\n \n \n
\n
\n \n
\n \n
\n
\n
\n \n
\n \n
\n
\n
\n \n \n
\n
\n \n
\n \n \n
\n
\n
\n \n
\n \n
\n
\n\n
\n \n
\n \n
\n
\n
\n\n
\n
\n","import {Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges} from '@angular/core';\nimport {ControlContainer, UntypedFormBuilder, FormGroup} from \"@angular/forms\";\nimport * as _ from \"lodash\";\n// import {Options} from \"@angular-slider/ngx-slider\";\nimport {Options} from 'ngx-slider-v2'\n\n@Component({\n selector: 'app-mhc-i-processing-formgroup-new',\n templateUrl: './mhc-i-processing-formgroup-new.component.html',\n styleUrls: ['./mhc-i-processing-formgroup-new.component.scss']\n})\nexport class MhcIProcessingFormgroupNewComponent implements OnInit, OnChanges {\n\n @Input() modelIndex: number | any;\n @Input() disabled: boolean = false;\n @Input() processingOptions: { display_name: string, short_name: string, group: string, source: string, has_ic50: boolean }[] = [];\n @Input() basicProcessingPredictionOption: { display_name: string, short_name: string, group: string, source: string, has_ic50: boolean }[] = [];\n\n @Output() emitPredictionModelIndex = new EventEmitter();\n addProcessing: boolean = false;\n public ogFormGroup: any = null;\n\n // Netchop\n netChopThreshold = 0.5\n netCtlThreshold = 0.75\n options: Options = {\n disabled: false,\n floor: 0,\n ceil: 1,\n step: 0.01,\n ticksArray: [0, 0.5, 1],\n showTicksValues: true,\n translate: (value: number): string => {\n return value.toFixed(2);\n }\n };\n\n options2: Options = {\n disabled: true,\n floor: 0,\n ceil: 1,\n step: 0.005,\n ticksArray: [0, 0.5, 1],\n showTicksValues: true,\n translate: (value: number): string => {\n return value.toFixed(3);\n }\n };\n\n options3: Options = {\n disabled: false,\n floor: 0,\n ceil: 100,\n step: 0.5,\n ticksArray: [0, 50, 100],\n showTicksValues: true,\n translate: (value: number): string => {\n return value.toFixed(1);\n }\n };\n\n constructor(\n public controlContainer: ControlContainer,\n private fb: UntypedFormBuilder,\n ) { }\n\n ngOnInit(): void {\n this.ogFormGroup = this.controlContainer.control;\n // this.options = Object.assign({}, this.options, {disabled: this.disabled});\n // this.options2 = Object.assign({}, this.options2, {disabled: this.disabled});\n // this.options3 = Object.assign({}, this.options3, {disabled: this.disabled});\n\n // this.ogFormGroup.controls['method'].valueChanges.subscribe((val: any) => {\n // console.log(val);\n // })\n }\n ngOnChanges(changes: SimpleChanges) {\n if (changes['disabled']){\n const disabled = changes['disabled'].currentValue;\n console.log(`disabled=${disabled}`)\n this.options = Object.assign({}, this.options, {disabled});\n this.options2 = Object.assign({}, this.options2, {disabled});\n this.options3 = Object.assign({}, this.options3, {disabled});\n }\n }\n\n\n get has_ice50() {\n return _.find(this.processingOptions, {short_name: this.ogFormGroup.controls['method'].value})?.has_ic50\n }\n\n get processingMethod() {\n return this.ogFormGroup.controls['method'].value\n }\n\n onCancelClick() {\n this.emitPredictionModelIndex.emit(this.modelIndex);\n }\n\n onMethodChange(e: any) {\n /**\n * Note MHC-NP only requires 'type' and 'method'\n * */\n\n const value = e.target.value\n _.forOwn(this.ogFormGroup.value, (v, k) => {this.ogFormGroup.removeControl(k)}) // clear ogFormGroup\n\n this.ogFormGroup.setControl('type', this.fb.control('processing'))\n this.ogFormGroup.setControl('method', this.fb.control(value))\n\n switch (value) {\n case 'basic_processing': {\n this.ogFormGroup.setControl('mhc_binding_method', this.fb.control('netmhcpan_ba'))\n this.ogFormGroup.setControl('proteasome', this.fb.control('immuno'))\n this.ogFormGroup.setControl('tap_precursor', this.fb.control(1))\n this.ogFormGroup.setControl('tap_alpha', this.fb.control(0.2))\n break;\n }\n case 'netchop': {\n this.ogFormGroup.setControl('network_method', this.fb.control('c_term'))\n this.ogFormGroup.setControl('threshold', this.fb.control(0.7))\n break;\n }\n case 'netctl': {\n this.ogFormGroup.setControl('cleavage_weight', this.fb.control(0.15))\n this.ogFormGroup.setControl('tap_weight', this.fb.control(0.05))\n this.ogFormGroup.setControl('threshold', this.fb.control(0.75))\n break;\n }\n case 'netctlpan': {\n this.ogFormGroup.setControl('cleavage_weight', this.fb.control(0.225))\n this.ogFormGroup.setControl('tap_weight', this.fb.control(0.025))\n this.ogFormGroup.setControl('epitope_threshold', this.fb.control(1.0))\n break;\n }\n default:\n break\n }\n\n }\n}\n","\n
\n
\n

{{index + 1}}

\n
\n
\n
\n

T Cell Prediction - Class I

\n
\n \n \n \n \n
\n
\n \n \n
\n
Input Sequence(s)
\n\n
\n \n \n
\n
\n \n  \n
\n \n JSON\n \n FASTA\n \n Original\n \n
\n
\n
\n  \n \n\n \n
\n Upload sequence file
(.txt, .json, .fasta)\n
\n\n
\n \n  \n
\n
\n
\n \n \n\n
\n = maxCharacters; else sequenceCounter\" class=\"text-danger-new\">\n Sequence text is too long - {{maxCharacters | number}} characters allowed\n \n \n \n Format: {{seqFormat}} | {{numOfCharacters | number}} characters\n \n \n \n Parameter changed since prediction.\n \n
\n
\n
\n\n \n
\n
Prediction Parameters
\n
\n\n \n Download parameters\n \n\n \n
\n
\n \n
\n
\n \n
\n\n
\n
\n \n \n Parameter changed since prediction.\n \n
\n\n
\n
\n
\n \n \n
\n
\n
\n\n
\n
\n \n
\n
\n
\n \n \n \n \n
\n
\n
\n
\n
\n Loading...\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n \n \n {{allele.label}}\n \n \n \n
\n \n Parameter changed since prediction.\n \n
\n
\n\n
\n \n {{alleles.length}} allele(s)\n \n
\n\n\n
\n \n
\n\n
\n \n
\n
\n \n
\n \n \n \n
\n \n \n \n\n\n\n\n\n
\n
\n
\n \n Parameter changed since prediction.\n \n\n\n
\n
\n
\n \n
\n \n \n \n\n\n\n
\n
\n
\n
\n
\n\n
\n\n
\n \n \n  \n \n \n \n \n
\n
\n \n \n \n
\n
\n \n \n \n\n
\n
\n
\n
\n\n
\n \n
\n

\n \n

\n
\n
\n \n
    \n
  1. {{message}}
  2. \n
\n
\n
\n
\n
\n \n
\n

\n \n

\n
\n
\n \n
    \n
  1. {{message}}
  2. \n
\n
\n
\n
\n
\n
\n\n
\n \n
\n\n
\n
\n Loading...\n
\n \n \n
\n\n
\n
    \n
  • \n Peptide Table\n \n\n\n\n\n\n \n \n
  • \n
  • \n Residue Table\n \n \n \n
  • \n
  • \n NetMHCpan Allele Distance\n \n \n \n
  • \n
  • \n Processing Plots\n \n
    \n
    \n
    \n Seq #\n \n\n
    \n\n
    \n Allele\n \n\n
    \n\n
    \n Length\n \n\n
    \n
    \n\n
    \n
    \n Loading...\n
    \n
    \n \n
    \n
    \n

    {{plot.method}}

    \n
    \n
    \n Percentile Threshold\n \n Score Threshold\n \n \n \n
    \n
    \n
    \n\n \n
    \n
    \n
    \n
    NO DATA AVAILABLE
    \n
    \n
    \n
    \n
  • \n
  • \n Sequence Table \n \n \n \n
  • \n
\n\n
\n
\n\n\n\n
\n

\n Number of Selected Alleles: {{modalAlleles.length}}\n

\n \n
\n\n
\n
\n
\n \n
\n
\n \n \n
\n
\n
\n
\n Loading...\n
\n
\n
\n
\n\n
0\" class=\"p-2 d-flex flex-column justify-content-start\">\n\n
    \n \n
  • {{i['label']}}\n \n
  • \n
\n
\n
\n
\n \n \n \n \n HLA allele frequencies and reference sets with maximal population coverage\n \n \n
\n \n \n
\n
\n
\n\n\n
\n
\n\n\n\n
\n

Validation Error(s)

\n \n
\n
\n \n
\n
\n \n \n
\n
\n\n\n\n
\n

Are you sure?

\n \n
\n
\n
\n

Re-running this step of the pipeline will delete all downstream results, including:

\n
    \n
  1. {{tool.name}}
  2. \n
\n

To access the current results, you can use this link

\n
\n \n

Applying these filters for input to the next stage will delete results from all downstream steps in\n this session, including:

\n
    \n
  1. {{tool.name}}
  2. \n
\n

To access the current results, you can use this link

\n
\n \n
\n \n \n
\n
\n
\n \n \n
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","import {\n Component,\n OnInit,\n OnDestroy,\n Input,\n Output,\n EventEmitter,\n ViewChild,\n ElementRef,\n OnChanges,\n SimpleChanges,\n AfterViewInit,\n isDevMode\n} from '@angular/core';\nimport {HttpClient} from \"@angular/common/http\";\nimport {UntypedFormBuilder, UntypedFormGroup, FormControl, UntypedFormArray, FormGroupDirective, Validators} from \"@angular/forms\";\nimport {CdkDragDrop} from '@angular/cdk/drag-drop';\nimport {Location} from '@angular/common';\nimport {Title} from \"@angular/platform-browser\";\n\nimport {Observable, timer, of, from, Subject, Subscription} from \"rxjs\";\nimport {NgbModal, NgbActiveModal} from '@ng-bootstrap/ng-bootstrap';\n\nimport {catchError, debounce, debounceTime, distinctUntilChanged, tap, switchMap, takeUntil} from 'rxjs/operators';\n\n// import {Options, ChangeContext} from '@angular-slider/ngx-slider';\nimport {Options, ChangeContext} from 'ngx-slider-v2';\nimport {isASCII, IsJsonString, ltrim}from \"../../util/string-helpers\";\nimport {isMaxLength} from \"../../util/is-max-length\";\nimport {SequenceParserService} from \"../../services/sequence-parser/sequence-parser.service\";\nimport {AlleleSearchService} from \"../../services/allele-search/allele-search.service\";\nimport {PipelineService} from \"../../services/pipeline-service/pipeline.service\";\nimport {AlertServiceService} from \"../../services/alert-service/alert-service.service\";\nimport Columns from \"../../_global/Columns\";\nimport Allele from \"../../_global/Allele\";\n\nimport onCsvDownloadAllClickedNew from '../../util/on-csv-download';\nimport * as sarsSampleData from \"../../services/data/t-cell-sample.json\";\nimport * as pipelineData from \"../../services/data/pipeline-example.json\";\nimport * as alleleData from \"../../services/data/27-alleles.json\";\nimport _ from \"lodash\";\n\nimport {environment} from '../../../environments/environment';\nimport {ActivatedRoute, Router} from \"@angular/router\";\nimport {PipelineStateService} from \"../../services/state-services/pipeline-state-service/pipeline-state.service\";\nimport Stage from \"../../_global/Stage\";\nimport PipelineParams from \"../../_global/PipelineParams\";\nimport Tool from \"../../_global/Tool\";\nimport {\n initTCellPredictionTool\n} from \"../../services/state-services/default-stage-states\";\n\nimport {columnListToObject} from \"../../util/convert-columns\";\n\nconst API_URL = `${environment['api_url']}/api/v1/mhci`;\n\n@Component({\n selector: 'app-t-cell-prediction',\n templateUrl: './t-cell-prediction.component.html',\n styleUrls: ['./t-cell-prediction.component.scss']\n})\nexport class TCellPredictionComponent implements OnInit, OnDestroy, AfterViewInit, OnChanges {\n /** Pipeline form */\n @Input() formGroupName!: string\n @Input() index!: number;\n @Input() resultUrl!: string | undefined;\n @Input() emailForm!: UntypedFormGroup;\n\n active = 'processing_plots'\n\n @Output() emitIndex = new EventEmitter(); // used for run all\n\n @Output() openEmailModal = new EventEmitter();\n\n @Output() emitOnCancel = new EventEmitter();\n\n @ViewChild('alleleSearch') alleleSearch!: ElementRef;\n @ViewChild('alertModal') alertModal!: ElementRef;\n @ViewChild('confirmModal') confirmModal!: ElementRef;\n @ViewChild('alleleModal') alleleModal!: ElementRef;\n\n unsubscribe$ = new Subject();\n\n stages$: Observable = this._stateService.stages$;\n tools$: Observable = this._stateService.tools$;\n pipelineId$: Observable = this._stateService.pipelineId$;\n params$: Observable = this._stateService.params$;\n\n stages: Stage[] = [];\n tools: Tool[] = [];\n pipelineId = '';\n params!: PipelineParams;\n\n sequence_table_result_link = ''\n\n /** Form variables */\n tCellForm!: UntypedFormGroup;\n // emailForm!: FormGroup;\n\n inputChange = {\n /** Keeps track of inputChanges to highlight selected parameter table row*/\n input_sequence_text: false,\n alleles: false,\n lengths: false,\n predictors: false,\n table_state: false,\n }\n peptideLengthSliderOptions: Options = { // ngx-slider option\n showTicksValues: true,\n disabled: false,\n stepsArray: [\n {value: 8},\n {value: 9},\n {value: 10},\n {value: 11},\n {value: 12},\n {value: 13},\n {value: 14}\n ]\n };\n\n predictionOptions: {display_name: string, short_name: string, group: string, source: string, has_ic50: boolean}[] = [];\n basicProcessingPredictionOption: {display_name: string, short_name: string, group: string, source: string, has_ic50: boolean}[] = []\n processingOptions: {display_name: string, short_name: string, group: string, source: string, has_ic50: boolean}[] = [];\n\n mhciLoading: boolean = false;\n mhciPredictors: any[] = [];\n // bindingPredictors: object[] = [];\n\n /** sequence variables */\n synthesisDownloadLinks = {\n sequence_list_json_uri: '',\n sequence_list_fasta_uri: '',\n download_sequences: ''\n };\n\n swaggerUrl = `${environment['api_url']}/apidocs`\n\n filteredSequences: { name: string, sequences: string }[] = [];\n numOfAA: number = 0;\n numOfCharacters: number = 0;\n seqFormat: string = 'Unknown';\n\n /** API Call variables */\n runSetInterval: any;\n submitted = false;\n loading = false;\n getResultsClicked = true;\n pipelineLoading = false;\n tableStateSaving = false;\n saveState = false;\n\n resultId: number = 0;\n\n plotLoading = false;\n processingPlots: {method: string, url: string, thresholdInput: number}[] = []\n selectedSeqNumPlots = '';\n selectedAllelePlots = '';\n selectedLengthPlots = ''\n sequenceNumbers = []\n\n sequence_table_order: any[] = [];\n sequence_table_columns: Columns[] | any;\n sequence_table: [(string | number)[]] = [[]]\n\n residue_table_order: any[] = [];\n residue_table_columns: Columns[] | any;\n residue_table: [(string | number)[]] = [[]]\n\n allele_distances_table_order: any[] = [];\n allele_distances_table_columns: Columns[] | any;\n allele_distances_table: [(string | number)[]] = [[]]\n\n peptide_table_order: any[] = [];\n peptide_table_columns: Columns[] | any;\n peptide_table: [(string | number)[]] = [[]]\n\n defaultOrder: any[] = [];\n\n // apiStatus: string;\n errorMessages: string[] = [];\n warningMessages: string[] = [];\n closeResult = '';\n\n /** Alleles */\n searching = false;\n searchFailed = false;\n\n modalAlleles: Allele[] = [];\n modalOpen = false;\n\n /** sequence files */\n maxCharacters = 1000000;\n files: any[] = [];\n fileName = '';\n\n pipelineUrl: string = ''\n\n data: any\n\n @Input() events: Observable = of();\n private eventsSubscription: Subscription = new Subscription();\n\n @Input() runAllEvent: Observable = of();\n private runAllSubscription: Subscription = new Subscription();\n\n constructor(\n public alertService: AlertServiceService,\n private http: HttpClient,\n private fb: UntypedFormBuilder,\n private _alleleSearchService: AlleleSearchService,\n private _pipelineService: PipelineService,\n private _stateService: PipelineStateService,\n private rootFormGroup: FormGroupDirective, // pipeline component\n private route: ActivatedRoute,\n private router: Router,\n private titleService: Title,\n private location: Location,\n private sequenceParserService: SequenceParserService,\n private modalService: NgbModal,\n ) {\n }\n\n ngOnInit(): void {\n if (isDevMode()) {\n console.log('Development!');\n } else {\n console.log('Production!');\n }\n\n this.getMHCIList();\n // this.tCellForm = this.fb.group(this.initialControlConfig);\n this.tCellForm = this.rootFormGroup.control.get(this.formGroupName) as UntypedFormGroup;\n this.peptideLengthSliderOptions = Object.assign({}, this.peptideLengthSliderOptions, {disabled: this.breakPeptides});\n\n this.pipelineId$.pipe(takeUntil(this.unsubscribe$)).subscribe(value => {\n console.log(`pipelineId=${value}`);\n this.pipelineId = value;\n this.pipelineUrl = `${window.location.origin}/pipeline/${value}`;\n })\n this.stages$.pipe(takeUntil(this.unsubscribe$)).subscribe(value => {\n console.log(value);\n this.stages = value;\n this.errorMessages = this.stages[this.index]?.stage_messages!.errors\n this.warningMessages = this.stages[this.index]?.stage_messages!.warnings\n })\n this.tools$.pipe(takeUntil(this.unsubscribe$)).subscribe(value => {\n console.log('tools$');\n console.log(value);\n this.tools = value;\n this.submitted = this.tools[this.index]?.submitted\n\n const inputSequenceTextId = this.tools[this.index]?.input_data_uri?.input_sequence_text_id\n\n this.synthesisDownloadLinks.sequence_list_json_uri = `${environment['api_url']}/api/v1/sequence_list_json/${inputSequenceTextId}`\n this.synthesisDownloadLinks.sequence_list_fasta_uri = `${environment['api_url']}/api/v1/sequence_list_fasta/${inputSequenceTextId}`\n this.synthesisDownloadLinks.download_sequences = `${environment['api_url']}/api/v1/download_sequences/${inputSequenceTextId}`\n\n // this.loading = this.tools[this.index]?.loading\n if(!this.tools[this.index]?.loading) {\n this.loading = false;\n clearInterval(this.runSetInterval)\n }\n\n /** pipeline Loading */\n this.pipelineLoading = _.some(this.tools, {loading: true})\n // if(this.pipelineLoading) {\n // this.disableInputs();\n // } else {\n // this.enableInputs();\n // }\n console.log('pipelineLoading')\n console.log(this.pipelineLoading)\n\n })\n\n this.params$.pipe(takeUntil(this.unsubscribe$)).subscribe(value => {\n console.log(`params`);\n console.log(value);\n this.params = value;\n })\n\n this.eventsSubscription = this.events.subscribe(() => this.onRunMain());\n this.runAllSubscription = this.runAllEvent.subscribe(() => this.onRunAll())\n\n this.onChanges();\n\n if(this.tCellForm.get('inputSequenceText')?.value) {\n this.sequenceParser(this.tCellForm.get('inputSequenceText')?.value)\n }\n\n // if(this.loading) {\n // this.disableInputs()\n // }\n\n // if(this.resultUrl) {\n // this.loading = true\n // this.getResultsSetInterval(this.resultUrl)\n // }\n }\n\n ngOnDestroy() {\n clearInterval(this.runSetInterval);\n clearInterval(this._pipelineService.runSetInterval)\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n\n this.eventsSubscription.unsubscribe();\n this.runAllSubscription.unsubscribe();\n }\n\n ngAfterViewInit() {\n setTimeout(() => {\n const run = history.state?.run;\n // console.log(run);\n run && this.onRunMain();\n }, 0)\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if(changes.resultUrl?.currentValue) {\n console.log(changes.resultUrl.currentValue);\n console.log('ngOnChanges t-cell')\n this.loading = true;\n this.getResultsSetInterval(changes.resultUrl.currentValue);\n }\n }\n\n get selectedAlleleLabels() {\n return this.alleles.value.map(((o: { label: string; }) => o.label)).join(', ');\n }\n\n get selectedModalAlleleLabels() {\n return this.modalAlleles.map(((o: { label: string; }) => o.label)).join(', ');\n }\n\n get predictionModels() {\n return this.tCellForm.get('predictionModels') as UntypedFormArray;\n }\n\n get alleles() {\n return this.tCellForm.get('alleles') as UntypedFormArray;\n }\n\n get breakPeptides() : boolean {\n return this.tCellForm.get('breakPeptides')?.value;\n }\n\n get inputSequenceText(){\n return this.tCellForm.get('inputSequenceText')?.value\n }\n\n get peptideLength() {\n return this.tCellForm.get('peptideLength')?.value;\n }\n\n /** processing plot filters **/\n\n // get sequenceNumberRange() {\n // const seq_num_arr =_.map(this.peptide_table, (o) => o[0])\n // return [_.min(seq_num_arr), _.max(seq_num_arr)] as number[]\n // }\n\n get stageAlleles() {\n return this.stages[this.index]?.input_parameters?.alleles?.split(',');\n }\n\n get stagePeptideLengthRange() {\n return this.stages[this.index]?.input_parameters?.peptide_length_range;\n }\n\n range(start: number, end: number) {\n return (new Array(end - start + 1)).fill(undefined).map((_, i) => i + start);\n }\n\n getMHCIList() {\n this.mhciLoading = true;\n this.http.get(API_URL)\n .pipe().subscribe(\n resp => {\n // @ts-ignore\n this.mhciPredictors = resp['predictors'];\n // console.log(this.mhciPredictors);\n this.predictionOptions = _.filter(this.mhciPredictors, {'group': 'binding'});\n this.basicProcessingPredictionOption = _.filter(this.mhciPredictors, {'group': 'binding', 'has_ic50': true})\n this.processingOptions = _.filter(this.mhciPredictors, {'group': 'processing'});\n console.log(this.processingOptions)\n this.mhciLoading = false;\n }\n )\n }\n\n onRunAll() {\n this.setDefaultFormValues()\n this.emitIndex.emit(this.index);\n }\n\n onRunMain() {\n if(this.tCellForm.invalid){\n\n this.alertService.add(`Input sequence text is too long. The maximum number of characters allowed is ${this.maxCharacters.toLocaleString()}\\nYour sequence contains ${this.inputSequenceText.length.toLocaleString()}`, 'alert-danger');\n this.open(this.alertModal)\n return;\n }\n\n const hasResult = _.find(this.tools.slice(this.index+1), (o) => o.submitted || o.loading)\n if(this.stages.length > 1 && hasResult) {\n this.open(this.confirmModal);\n } else {\n this.getResultsClicked = true;\n if(this.index===0) {\n this.onRun();\n } else {\n this.onRun2()\n }\n }\n }\n\n\n setDefaultFormValues() {\n /** defaults - use Sars placeholders*/\n let seq: string = ''\n let all: string = ''\n if(environment.production || environment['name'] === 'DEV') { // prod or dev\n const {input_sequence_text, alleles } = sarsSampleData; // correct examples\n seq = input_sequence_text\n all = alleles\n } else {\n const {input_sequence_text, alleles } = pipelineData;\n seq = input_sequence_text\n all = alleles\n }\n\n /** Sequences */\n let sequences = this.tCellForm.value.inputSequenceText\n if(!sequences && this.index===0) {\n this._stateService.setInputSequenceText(seq);\n this.tCellForm.controls.inputSequenceText.setValue(seq);\n }\n\n /** Alleles */\n const patchValues = (allele: string, synonym = '', score = null) => {\n /** patchValues - helper function */\n return this.fb.group({\n label: [allele],\n synonym: [synonym],\n score: [score]\n })\n }\n if(this.alleles.length===0) {\n _.forEach(all.split(','), (allele) => {\n this.alleles.push(patchValues(allele));\n })\n // this.alleleSearch!.nativeElement.value = alleles;\n }\n }\n\n onRunConfirm() {\n let indicies = _.range(this.index + 1, this.stages.length)\n let initTool: Tool;\n console.log(indicies);\n _.forEach(indicies, i => {\n initTool = this.tools[i];\n const unSubmittedTool = {\n ...initTool,\n loading: false,\n submitted: false,\n }\n this._stateService.insertTool(unSubmittedTool, i);\n })\n this.saveState ? this.onSaveTableState() : this.onRunMain();\n }\n\n onRun() {\n /**\n Update pipeline State\n *\n * */\n /** Reset global datatables search ext */\n $.fn.dataTable.ext.search = [];\n\n const stage_number = this.index + 1;\n /** run_stage_range */\n const run_stage_range: [number, number] = [stage_number, stage_number]\n /** default formValue */\n this.setDefaultFormValues()\n /** Sequences */\n let sequences = this.tCellForm.value.inputSequenceText\n\n /** input parameters */\n const inputParameters = this._pipelineService.convertTCellForm(this.tCellForm)\n\n /** Table State */\n const { table_state } = this.stages[this.index];\n\n const newStage = {\n \"stage_display_name\": \"T-Cell Prediction\",\n \"stage_number\": stage_number,\n \"stage_type\": \"prediction\",\n \"tool_group\": \"mhci\",\n \"input_sequence_text\": sequences,\n \"input_parameters\": inputParameters,\n \"table_state\": table_state\n }\n\n const params = {\n \"pipeline_id\": '',\n \"pipeline_title\": this.emailForm.controls['name'].value,\n \"email\": this.emailForm.controls['email'].value,\n \"run_stage_range\": run_stage_range,\n \"stages\": [\n newStage\n ]\n }\n\n /** set params */\n const loadingTCellPredictionTool = Object.assign(initTCellPredictionTool, {\n loading: true,\n submitted: false,\n appliedFilters: !_.isEmpty(table_state?.columns)\n })\n this._stateService.setParams(params);\n this._stateService.insertTool(loadingTCellPredictionTool, this.index);\n this._stateService.insertInputParametersToStage(inputParameters, this.index);\n\n // this._stateService.insertTableStateToStage({columns: {}}, this.index);\n\n this.postPipelineAPI(params);\n }\n\n\n onRun2() {\n\n const params = this.params;\n const stage_number = this.index + 1;\n const input_stage_number = this.index; // previous index\n\n /** run_stage_range */\n const run_stage_range: [number, number] = [stage_number, stage_number]\n /** default formValue */\n this.setDefaultFormValues()\n\n /** input parameters */\n const inputParameters = this._pipelineService.convertTCellForm(this.tCellForm)\n const initialStage = this.stages[this.index];\n\n /** Table State */\n const { table_state } = this.stages[this.index];\n\n const stage: Stage = {\n ...initialStage,\n result_url: undefined,\n stage_number: stage_number,\n input_stage_number: input_stage_number,\n input_parameters: inputParameters,\n table_state\n }\n\n // this.params.stages.push(stage);\n params.stages[this.index] = stage;\n params.run_stage_range = run_stage_range;\n params.pipeline_title = this.emailForm.controls['name'].value;\n params.email = this.emailForm.controls['email'].value;\n\n // console.log(params)\n\n /** set params */\n const initToolLoading = Object.assign(initTCellPredictionTool, {\n loading: true,\n submitted: false,\n appliedFilters: !_.isEmpty(table_state?.columns)\n })\n\n this._stateService.setParams(params);\n this._stateService.insertTool(initToolLoading, this.index);\n this._stateService.insertInputParametersToStage(inputParameters, this.index);\n\n this.postPipelineAPI(params);\n }\n\n getResultsSetInterval(result_url: string) {\n /** */\n this.getResultsClicked = true\n\n this.residue_table_order = [];\n this.residue_table_columns = null;\n this.residue_table = [[]]\n\n this.sequence_table = [[]]\n this.allele_distances_table = [[]]\n this.residue_table = [[]]\n this.peptide_table = [[]]\n this.processingPlots = []\n\n this.resultUrl = result_url;\n console.log(result_url)\n this.inputChange = _.mapValues(this.inputChange, () => false);\n let increment = 0;\n const milliseconds = 3000;\n this.runSetInterval = setInterval(() => {\n this._pipelineService.getResults(`${result_url}?statusOnly=true`).subscribe(\n {\n next: resp => {\n console.log(resp);\n if (resp['status'] === 'error' || resp['errors']) {\n // this.errorMessages = resp['errors'];\n // this.warningMessages = resp['warnings'];\n this.submitted = false;\n this.loading = false;\n const prevTool = this.tools[this.index];\n const submittedTool = Object.assign(prevTool, {\n submitted: this.submitted,\n loading: this.loading,\n })\n this._stateService.insertTool(submittedTool, this.index);\n clearInterval(this.runSetInterval);\n this.enableInputs();\n }\n if (resp['data']['warnings']?.length) {\n // console.log(resp['warnings']);\n this.warningMessages = resp['data']['warnings'];\n }\n if (resp['data']['errors']?.length) {\n // console.log(resp['warnings']);\n this.errorMessages = resp['data']['errors'];\n }\n if (resp['status'] === 'done') {\n clearInterval(this.runSetInterval);\n\n this._pipelineService.getResults(result_url).subscribe(resp => {\n // clearInterval(this.runSetInterval);\n console.log(resp)\n this.defaultOrder = [[]]\n /** 1) Create Column */\n const data = resp['data']['results'];\n // check for residue_table\n this.active = data[0].type\n _.forEach(data, table => {\n\n\n if (table.type === 'residue_table') {\n this.residue_table_columns = _.map(table.table_columns, (column, i) => {\n if (column.default_order && Number.isFinite(column.row_sort_priority)) { // set defaultOrder\n this.residue_table_order[column.row_sort_priority] = [i, column.default_order === \"ascending\" ? 'asc' : 'desc'];\n }\n column['title'] = `${column['display_name']}`; // required\n column['data'] = `${column['name']}`;\n let source = column['source'];\n\n column['filterKey'] = `${source}.${column.name}`\n\n // console.log(`source=${source}`);\n let tempSource = source.split('.')\n // console.log(tempSource);\n source = tempSource[tempSource.length - 1];\n // console.log(`source=${source}`);\n column['data'] = `${source}_${column['name']}`;\n /** remove `core` from name */\n // column['name'] = column['display_name'] ? column['display_name'] : column['name']\n column['value_limits'] = column['type'] === 'int' ? {\n minValue: NaN,\n maxValue: NaN,\n applied: false\n } : {\n possibleValues: [],\n textValue: null,\n selectedValues: [],\n applied: false\n }\n return column\n });\n // this.currentOrder = [...this.defaultOrder];\n if (this.residue_table_columns) {\n this.residue_table = table.table_data;\n }\n // console.log(this.residue_table_order);\n // console.log(this.residue_table_columns);\n // console.log(this.residue_table);\n }\n if (table.type === 'netmhcpan_allele_distance') {\n this.allele_distances_table_columns = _.map(table.table_columns, (column, i) => {\n if (column.default_order && Number.isFinite(column.row_sort_priority)) { // set defaultOrder\n this.allele_distances_table[column.row_sort_priority] = [i, column.default_order === \"ascending\" ? 'asc' : 'desc'];\n }\n column['title'] = `${column['display_name']}`; // required\n column['data'] = `${column['name']}`;\n let source = column['source'];\n\n column['filterKey'] = `${source}.${column.name}`\n\n // console.log(`source=${source}`);\n let tempSource = source.split('.')\n // console.log(tempSource);\n source = tempSource[tempSource.length - 1];\n // console.log(`source=${source}`);\n column['data'] = `${source}_${column['name']}`;\n /** remove `core` from name */\n // column['name'] = column['display_name'] ? column['display_name'] : column['name']\n // column['value_limits'] = column['type'] === 'int' ? {\n // minValue: NaN,\n // maxValue: NaN,\n // applied: false\n // } : {\n // possibleValues: [],\n // textValue: null,\n // selectedValues: [],\n // applied: false\n // }\n column['value_limits'] = column['value_limits'] ? this.setValueLimits(column) : undefined\n return column\n });\n // this.currentOrder = [...this.defaultOrder];\n if (this.allele_distances_table_columns) {\n this.allele_distances_table = table.table_data;\n }\n }\n if (table.type === 'peptide_table') {\n this.peptide_table_columns = _.map(table.table_columns, (column, i) => {\n if (column.default_order && Number.isFinite(column.row_sort_priority)) { // set defaultOrder\n this.defaultOrder[column.row_sort_priority] = [i, column.default_order === \"ascending\" ? 'asc' : 'desc'];\n }\n column['title'] = `${column['display_name']}`; // required\n column['data'] = `${column['name']}`;\n let source = column['source'];\n\n column['filterKey'] = `${source}.${column.name}`\n\n // console.log(`source=${source}`);\n let tempSource = source.split('.')\n // console.log(tempSource);\n source = tempSource[tempSource.length - 1];\n // console.log(`source=${source}`);\n column['data'] = `${source}_${column['name']}`;\n /** remove `core` from name */\n // column['name'] = column['display_name'] ? column['display_name'] : column['name']\n\n column['value_limits'] = column['value_limits'] && this.setValueLimits(column)\n\n // console.log(column['value_limits'])\n // column['value_limits'] = column['value_limits'] ? {...column['value_limits'], applied: false, possibleValues: []} : undefined\n\n return column\n });\n this.peptide_table_order = [...this.defaultOrder];\n if (this.peptide_table_columns) {\n this.peptide_table = table.table_data;\n }\n // console.log(this.peptide_table_order);\n // console.log(this.peptide_table_columns);\n // console.log(this.peptide_table);\n }\n if (table.type === 'input_sequence_table') {\n this.sequence_table_columns = _.map(table.table_columns, (column, i) => {\n // if (column.default_order && Number.isFinite(column.row_sort_priority)) { // set defaultOrder\n // this.defaultOrder[column.row_sort_priority] = [i, column.default_order === \"ascending\" ? 'asc' : 'desc'];\n // }\n column['title'] = `${column['display_name']}`; // required\n column['data'] = `${column['name']}`;\n let source = column['source'];\n\n column['filterKey'] = `${source}.${column.name}`\n\n // console.log(`source=${source}`);\n let tempSource = source.split('.')\n // console.log(tempSource);\n source = tempSource[tempSource.length - 1];\n // console.log(`source=${source}`);\n column['data'] = `${source}_${column['name']}`;\n /** remove `core` from name */\n // column['name'] = column['display_name'] ? column['display_name'] : column['name']\n // column['value_limits'] = column['type'] === 'int' ? {\n // minValue: NaN,\n // maxValue: NaN,\n // applied: false\n // } : {\n // possibleValues: [],\n // textValue: null,\n // selectedValues: [],\n // applied: false\n // }\n\n column['value_limits'] = column['value_limits'] ? this.setValueLimits(column) : undefined\n // column['value_limits'] = column['value_limits'] && this.setValueLimits(column)\n return column\n\n\n\n });\n this.sequence_table_order = []\n if (this.sequence_table_columns) {\n\n this.sequence_table = table.table_data\n }\n }\n if (table.type === 'processing_plots') {\n const all_plots_uri = new URL(table.all_plots_uri)\n\n this.selectedSeqNumPlots = all_plots_uri.searchParams.get('sequence_number') || ''\n this.selectedLengthPlots = all_plots_uri.searchParams.get('length') || ''\n this.selectedAllelePlots = all_plots_uri.searchParams.get('allele') || ''\n\n this.sequenceNumbers = table.sequence_numbers\n\n this.processingPlots = _.map(table.urls, (plot) => {\n\n const url = new URL(plot.url)\n const thresholdInput = url.searchParams.get('threshold')\n\n return {\n thresholdInput,\n ...plot\n }\n })\n // this.processingPlots = table.urls\n console.log(this.processingPlots)\n }\n\n })\n\n this.submitted = true; this.loading = false;\n const prevTool = this.tools[this.index];\n console.log(prevTool)\n const submittedTCellPredictionTool = Object.assign(prevTool, {\n submitted: this.submitted,\n loading: this.loading,\n })\n this._stateService.insertTool(submittedTCellPredictionTool, this.index);\n // clearInterval(this.runSetInterval); // remove later\n console.log(data);\n console.log(resp.pipeline_id)\n this.enableInputs();\n })\n }\n if (resp['status'] === 'canceled') {\n /** if status is canceled, then just stop loader **/\n this.submitted = false;\n this.loading = false;\n const prevTool = this.tools[this.index];\n console.log(prevTool)\n const submittedTCellPredictionTool = Object.assign(prevTool, {\n submitted: this.submitted,\n loading: this.loading,\n })\n this._stateService.insertTool(submittedTCellPredictionTool, this.index);\n clearInterval(this.runSetInterval);\n // console.log(data);\n this.enableInputs();\n // set error message\n // this.errorMessages = [`PIPELINE_ID=${this.pipelineId} w/ STATUS=${resp['status']}`]\n }\n else {\n this.getResultsClicked = false;\n console.log(`current status: ${resp['status']} - ${increment}`);\n increment += 1;\n }\n },\n error: error => {\n console.error(error);\n this.enableInputs();\n clearInterval(this.runSetInterval);\n this.loading = false;\n }\n }\n )\n }, milliseconds);\n }\n\n setValueLimits(column: Columns) : any {\n /* set value_limits (i.e. filters) for each column based on if type is a number/string */\n return column['type'] === 'int' || column['type'] === 'float' ? {\n ...column['value_limits'],\n minValue: NaN,\n maxValue: NaN,\n applied: false\n } : {\n // ...column['value_limits'],\n possibleValues: column['value_limits']['unique_values'],\n textValue: null,\n selectedValues: [],\n applied: false\n }\n }\n\n postPipelineAPI(params: PipelineParams, getResults: boolean = true) {\n /**\n * params\n * getResults: boolean\n * false - used in 'Save Table State'\n * */\n /** initial set up */\n this.disableInputs();\n if (getResults) {\n this.errorMessages = [];\n this.warningMessages = [];\n }\n this.loading = getResults; // true - defaults\n this.submitted = !getResults; // false - defaults\n this.tableStateSaving = !getResults\n // this.residue_table_order = [];\n // this.residue_table_columns = null;\n // this.residue_table = [[]]\n //\n // this.sequence_table = [[]]\n // this.allele_distances_table = [[]]\n // this.residue_table = [[]]\n // this.peptide_table = [[]]\n // this.processingPlots = []\n\n this._pipelineService.postPipeline(params).subscribe(\n (resp) => {\n // Errors and Warnings\n if (resp['errors'] && resp['errors'].length) {\n console.log(resp);\n console.error(resp['errors']);\n this.errorMessages = resp['errors'];\n if (resp['warnings'].length) {\n console.log(resp['warnings']);\n this.warningMessages = resp['warnings'];\n }\n this.loading = false;\n this.submitted = true;\n const submittedTCellPredictionTool = Object.assign(initTCellPredictionTool, {\n submitted: false,\n loading: false,\n })\n this._stateService.insertTool(submittedTCellPredictionTool, this.index);\n this.enableInputs();\n return;\n }\n // Warnings\n if (resp['warnings'].length) {\n console.log(resp['warnings']);\n this.warningMessages = resp['warnings'];\n }\n\n const inputDataUri = {input_sequence_text_id: resp.input_sequence_text_id}\n this._stateService.insertInputDataUriToTool(inputDataUri, this.index)\n\n this._stateService.setPipelineId(resp.pipeline_id);\n this._stateService.setPipelineIdToParams(resp.pipeline_id);\n this._stateService.setPipelineSpecId(resp.pipeline_spec_id);\n /** Display email Modal if emailModalShow=true */\n this.location.go(`pipeline/${resp.pipeline_id}`)\n // this.titleService.setTitle(`IEDB NG Tools Pipeline`);\n\n // this.location.replaceState(`pipeline/${resp.pipeline_id}`)\n // this.router.createUrlTree([`pipeline/${resp.pipeline_id}`])\n if (getResults) {\n const result_url = `${resp.results_uri}`;\n console.log(result_url);\n this.getResultsSetInterval(result_url);\n } else {\n this.inputChange.table_state = false;\n this.submitted = true;\n this.loading = false;\n this.tableStateSaving = false;\n this.enableInputs();\n }\n },\n (error) => {\n console.error(error);\n this.errorMessages.push(error.error);\n this.submitted = false;\n this.loading = false;\n const prevTool = this.tools[this.index];\n const submittedTool = Object.assign(prevTool, {\n submitted: this.submitted,\n loading: this.loading,\n })\n this._stateService.insertTool(submittedTool, this.index);\n clearInterval(this.runSetInterval);\n this.enableInputs();\n }\n )\n }\n\n\n onSaveTableStateMain() {\n const hasResult = _.find(this.tools.slice(this.index+1), {submitted: true})\n if (hasResult) {\n this.saveState = true;\n this.open(this.confirmModal);\n } else {\n this.onSaveTableState();\n }\n }\n\n onSaveTableState() {\n const tool_group = 'mhci'\n\n const params = this.params\n // create colObj and params\n let colObj = columnListToObject(this.peptide_table_columns, tool_group)\n const stages = params.stages;\n const stageTemp = stages[this.index];\n\n stageTemp.table_state = [{table: 'peptide_table', columns: colObj}];\n stages[this.index] = stageTemp\n params.stages = stages;\n // run_stage_range\n const stage_number = this.index + 1;\n params.run_stage_range = [stage_number, stage_number];\n this._stateService.setParams(params);\n // appliedFilters\n let appliedFilters = !_.isEmpty(colObj);\n this._stateService.setToolAppliedFilters(appliedFilters, this.index)\n this.postPipelineAPI(params, false);\n this.saveState = false;\n }\n\n onFilterApplied() {\n this.inputChange.table_state = this.submitted;\n }\n\n onClearTableState() {\n this.peptide_table_columns = _.map(this.peptide_table_columns, (c) => {\n c.value_limits = c.type === 'int'? {\n minValue: NaN,\n maxValue: NaN,\n applied: false\n } :\n {\n possibleValues: [],\n textValue: null,\n selectedValues: [],\n applied: false\n }\n return c\n })\n this.inputChange.table_state = this.submitted;\n }\n\n onCancel() {\n console.log(this.runSetInterval)\n clearInterval(this.runSetInterval);\n this.emitOnCancel.emit()\n\n this.inputChange.table_state = false;\n // this.submitted = false;\n const currentTool = this.tools[this.index];\n const unSubmittedTool = {\n ...currentTool,\n loading: false,\n submitted: false,\n appliedFilters: undefined\n }\n this._stateService.insertTool(unSubmittedTool, this.index);\n this.warningMessages = [];\n this.loading = false;\n this.tableStateSaving = false;\n this.enableInputs();\n }\n\n onReset() {\n this.alertService.clear();\n this.errorMessages = [];\n this.warningMessages = [];\n\n const oldSequence = this.stages[this.index].input_sequence_text\n const input_parameters = this.params.stages[this.index].input_parameters\n\n console.log(input_parameters)\n\n // sequences\n this.filteredSequences = [];\n this.numOfAA = 0;\n // order\n this.peptide_table_order = [];\n this.defaultOrder = [];\n // tCellForm values\n const peptideLength = [9, 10];\n this.tCellForm.patchValue({\n inputSequenceText: '',\n peptideLength,\n }, {emitEvent: false});\n\n // selected alleles\n this.alleles.clear()\n\n // predictors\n const initPredictor = {\n type: 'binding',\n method: 'netmhcpan_el',\n }\n const pm = this.tCellForm.controls.predictionModels as UntypedFormArray\n pm.clear({emitEvent: false})\n pm.push(this.fb.group(initPredictor), {emitEvent: false});\n\n this.enableInputs();\n\n if(this.submitted){\n this.inputChange = {\n ...this.inputChange,\n /** Keeps track of inputChanges to highlight selected parameter table row*/\n input_sequence_text: oldSequence !== '',\n alleles: !_.isEqual([], input_parameters.alleles),\n lengths: !_.isEqual(peptideLength, input_parameters.peptide_length_range),\n predictors: !_.isEqual([initPredictor], input_parameters.predictors),\n }\n }\n }\n\n onFileDropped($event: any[]) {\n console.log($event);\n const file = $event[0];\n const fileSize = file.size / 1024; // in kB\n console.log(file.type);\n if (fileSize > 20000) {\n this.alertService.add('File Size is too big! (20mB max)', 'alert-danger');\n this.open(this.alertModal);\n }\n else {\n this.prepareSequenceFileList($event);\n }\n }\n\n prepareSequenceFileList(files: Array) {\n console.log(files);\n this.fileName = files[0].name;\n const reader = new FileReader();\n const myForm = this.tCellForm;\n for (const item of files) {\n // console.log(item);\n reader.readAsText(item);\n reader.onload = () => {\n const val = reader.result?.toString() || '';\n console.log(val);\n const v = isASCII(val);\n console.log(v);\n if (v) {\n // myForm.patchValue({inputSequenceText: val.substring(0, this.maxCharacters)});\n const w = isMaxLength(val, this.maxCharacters)\n if (w) {\n myForm.patchValue({inputSequenceText: val});\n } else {\n this.alertService.add(`Sequence is too long - max Sequence length is ${this.maxCharacters.toLocaleString(\"en-US\")} characters`, 'alert-danger');\n this.open(this.alertModal);\n }\n // this.sequenceParser(val); // auto parser\n } else {\n this.alertService.add('Invalid file type.\\nValid file types are .txt, .fa, .fasta, .json, .faa,', 'alert-danger');\n this.open(this.alertModal);\n }\n };\n\n reader.onerror = () => {\n console.log(reader.error);\n };\n item.progress = 0;\n this.files.push(item);\n }\n }\n\n /** Add Prediction Model FormGroups */\n\n mhcBindingFormGroup(method = 'netmhcpan_el') {\n /**\n * Creates mhcBindingFormGroup using formBuilder\n *\n * Currently defaulted to 'netmhcpan_el'\n * */\n return this.fb.group({\n type: 'binding',\n method: this.fb.control(method),\n })\n }\n\n pmhcImmunogencityFormGroup(mask_choice = 'default', position_to_mask = '2,5,9') {\n /**\n * */\n return this.fb.group({\n type: 'immunogenicity',\n mask_choice: mask_choice,\n position_to_mask: this.fb.control(position_to_mask),\n })\n }\n\n mhcIProcessingFormGroup(proteasome = 'immuno', tap_precursor = 1, tap_alpha = 0.2) {\n /**\n *\n * Defaults:\n * {\n * type: 'processing'\n * proteasome: 'immuno'\n * tap_precursor: 1,\n * tap_alpha: 0.2\n * }\n * */\n return this.fb.group({\n type: 'processing',\n proteasome: this.fb.control(proteasome),\n tap_precursor: this.fb.control(tap_precursor),\n tap_alpha: this.fb.control(tap_alpha)\n })\n }\n\n mhcIProcessingNewFormGroup(method='basic_processing') {\n /**\n *\n * Defaults:\n * {\n * type: 'processing'\n * proteasome: 'immuno'\n * tap_precursor: 1,\n * tap_alpha: 0.2\n * }\n * */\n return this.fb.group({\n type: 'processing',\n method: this.fb.control(method),\n mhc_binding_method: \"netmhcpan_ba\",\n proteasome: \"immuno\",\n tap_precursor: 1,\n tap_alpha: 0.2\n })\n }\n\n mhcINPNewFormGroup() {\n /**\n *\n * Defaults:\n * {\n * type: 'processing'\n * proteasome: 'immuno'\n * tap_precursor: 1,\n * tap_alpha: 0.2\n * }\n * */\n return this.fb.group({\n type: 'mhcnp'\n })\n }\n\n /** Download Sequence File API calls\n * onDownloadJson()\n * onDownloadFasta()\n * onDownloadOriginal()\n * */\n\n onDownloadJson() {\n onCsvDownloadAllClickedNew(this.synthesisDownloadLinks.sequence_list_json_uri, this.http, 'json');\n }\n\n onDownloadFasta() {\n onCsvDownloadAllClickedNew(this.synthesisDownloadLinks.sequence_list_fasta_uri, this.http, 'fasta');\n }\n\n onDownloadOriginal() {\n onCsvDownloadAllClickedNew(this.synthesisDownloadLinks.download_sequences, this.http, 'txt');\n }\n\n /** Allele Search Functions */\n onAlleleSelect({e, input}: { e: any, input: any }) {\n e.preventDefault();\n const selectedAllele = e.item;\n let labels = _.map(this.alleles.value, (allele) => allele.label)\n if (!labels.includes(selectedAllele.label)) {\n this.alleles.push(this.fb.group(selectedAllele));\n }\n // sessionStorage.setItem('selectedAlleles', JSON.stringify(this.selectedAlleles));\n input.value = '';\n this.inputChange.alleles = this.submitted;\n }\n\n onAlleleSelectModal({e, input}: { e: any, input: any }) {\n e.preventDefault();\n const selectedAllele = e.item;\n let labels = _.map(this.modalAlleles, (allele) => allele.label)\n if (!labels.includes(selectedAllele.label)) {\n this.modalAlleles.push(selectedAllele);\n }\n input.value = '';\n }\n\n onBlurAlleleSelect(e: { preventDefault: () => void; }, input: { value: string; placeholder: string; }) {\n /**\n * Displays alleles in the text box when out of focus.\n * */\n e.preventDefault();\n input.value = '';\n input.placeholder = 'Ex. HLA-A*02:01'\n if (this.alleles.length) {\n const labels = _.map(this.alleles.value, (o) => {\n return o.label;\n });\n input.value = labels.join(', ');\n }\n }\n\n onBlurAlleleSelectModal(e: { preventDefault: () => void; }, input: { value: string; placeholder: string; }) {\n /**\n * Displays alleles in the text box when out of focus.\n * */\n e.preventDefault();\n input.placeholder = 'Ex. HLA-A*02:01'\n input.value = this.modalAlleles.length ? this.selectedModalAlleleLabels : ''\n }\n\n onAlleleClear(input: { value: string; }) {\n this.inputChange.alleles = this.submitted;\n this.alleles.clear()\n input.value = '';\n }\n\n onAlleleClearModal(input: { value: string; }) {\n this.modalAlleles = []\n input.value = ''\n }\n\n onAlleleDeselect(index: number) {\n this.alleles.removeAt(index)\n this.inputChange.alleles = this.submitted;\n // input.value = '';\n // if (this.alleles.length) {\n // input.value = this.selectedAlleleLabels\n // }\n }\n\n\n onAlleleDeselect2(index: number, input: { value: string }) {\n console.log(index)\n _.pullAt(this.modalAlleles, [index])\n const labels = this.modalAlleles.map(((o: { label: string; }) => o.label)).join(', ')\n input.value = this.modalAlleles.length ? labels : ''\n }\n\n search = (text$: Observable) =>\n text$.pipe(\n debounceTime(1000),\n distinctUntilChanged(),\n tap(() => this.searching = true),\n switchMap(term => {\n // console.log(term);\n return this._alleleSearchService.search(term).pipe(\n tap(() => this.searchFailed = false),\n catchError(() => {\n this.searchFailed = true;\n return of([]);\n }))\n }\n ),\n tap(() => this.searching = false)\n )\n\n resultFormatter = (result: any) => {\n /**\n * The function that converts an item from the result list to a string to display in the popup.\n * */\n return result.synonyms.length > 0 ? `${result.label} - (${result.synonyms})` : result.label;\n }\n\n inputFormatter(value: any): any {\n /**\n * The function that converts an item from the result list to a string to display in the field.\n * */\n if (value.label) {\n return `${value.label}`;\n }\n }\n\n /** Predictors Drag and Drop */\n\n dropPredictionModel(event: CdkDragDrop) {\n const {previousIndex, currentIndex} = event;\n\n const control = this.predictionModels.at(previousIndex);\n this.predictionModels.removeAt(previousIndex);\n this.predictionModels.insert(currentIndex, control);\n\n if (previousIndex !== currentIndex) {\n this.inputChange.predictors = this.submitted;\n }\n }\n\n setInputChangePredictors(value: boolean) {\n this.inputChange.predictors = this.submitted;\n }\n\n removePredictorByIndex(index: number) {\n this.predictionModels.removeAt(index);\n this.inputChange.predictors = this.submitted;\n }\n\n addpredictionModel() {\n this.predictionModels.push(this.mhcBindingFormGroup());\n this.inputChange.predictors = this.submitted;\n }\n\n addPmhcImmungencityFormGroup() {\n this.predictionModels.push(this.pmhcImmunogencityFormGroup());\n this.inputChange.predictors = this.submitted;\n }\n\n // addMhcIProcessingFormGroup() {\n // this.predictionModels.push(this.mhcIProcessingFormGroup());\n // this.inputChange.predictors = this.submitted;\n // }\n\n addMhcIProcessingNewFormGroup() {\n this.predictionModels.push(this.mhcIProcessingNewFormGroup());\n this.inputChange.predictors = this.submitted;\n }\n\n addMhcNPFormGroup() {\n this.predictionModels.push(this.mhcINPNewFormGroup());\n this.inputChange.predictors = this.submitted;\n }\n\n get styleResultContainer(){\n return !this.loading && this.submitted ? 'none' : 'dotted';\n }\n\n /** Prediction Parameter Functions */\n\n formUrl() {\n /**\n http://localhost:4200/t-cell-prediction?params=\n * */\n }\n\n onDownloadParameter() {\n const data = this._pipelineService.convertTCellForm(this.tCellForm)\n\n const a = document.createElement('a');\n a.setAttribute('style', 'display:none;');\n document.body.appendChild(a);\n // const contentType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-16';\n // var blob = new Blob([csvData], { type: contentType });\n const blob = new Blob([JSON.stringify(data, null, 2)], ); // thx: http://stackoverflow.com/a/18925211\n a.href = window.URL.createObjectURL(blob);\n a.download = 'parameter.json';\n\n a.click();\n }\n\n /** File Download/Upload*/\n uploadSequenceFile($event: any) {\n $event.preventDefault();\n /**\n * Used for 'Upload' button\n * */\n const {files} = $event.target;\n files && this.onFileDropped(files);\n }\n\n uploadParameterFile($event: any, input: any) {\n console.log($event);\n $event.preventDefault();\n /**\n * Used for 'Upload' button to upload parameters\n * */\n // const {files} = $event.target;\n // files && this.onParameterFileDropped(files, input);\n }\n\n sequenceParser(val: string) {\n\n const firstChar = ltrim(val)[0];\n const firstLine = val.split('\\n')[0]\n console.log(firstLine)\n\n /** Named white space */\n let firstLineNumOfElements = 0\n let separator = ' '\n if(firstLine.includes(' ')){\n separator = ' '\n } else if (firstLine.includes('\\t')){\n separator = '\\t'\n } else if (firstLine.includes('\\s')){\n separator = '\\s'\n }\n firstLineNumOfElements = firstLine.split(separator).length\n console.log(firstLineNumOfElements)\n console.log(separator)\n\n const slicedVal = val.slice(0, this.maxCharacters)\n\n if(val.length > this.maxCharacters) {\n // Skip parsing\n } else if (firstChar === '>' && this.sequenceParserService.fastaValidate(val)) { // fasta\n this.seqFormat = this.sequenceParserService.seqFormat;\n this.numOfCharacters = slicedVal.length\n } else if ((firstChar === '{' || firstChar === '[') && IsJsonString(val)) { // json\n this.seqFormat = 'JSON'\n this.numOfCharacters = slicedVal.length\n } else if (firstLineNumOfElements === 2 && this.sequenceParserService.namedWhiteSpaceValidate(val, separator)) {\n // named white space\n this.seqFormat = this.sequenceParserService.seqFormat;\n this.numOfCharacters = slicedVal.length\n } else if (val.length > 3 && !val.includes('>') && this.sequenceParserService.unnamedWhiteSpaceValidate(val)) {\n // Unnamed\n this.seqFormat = this.sequenceParserService.seqFormat;\n this.numOfCharacters = slicedVal.length\n } else if (val === '') { // delete\n /**\n * Takes care of it up top - still need this if statement\n * */\n this.seqFormat = 'Unknown';\n this.numOfCharacters = 0\n } else { // error\n this.seqFormat = 'Error';\n this.numOfCharacters = 0\n }\n }\n\n onLengthChange(changeContext: ChangeContext): void {\n /**\n * used in (userChangeEnd)\n * Saves minPeptideLength and maxPeptideLength in session storage\n * */\n // sessionStorage.setItem('minPeptideLength', JSON.stringify(changeContext.value));\n // sessionStorage.setItem('maxPeptideLength', JSON.stringify(changeContext.highValue));\n this.inputChange.lengths = this.submitted;\n }\n\n onChanges(): void {\n /** PredictionModel sessionStorage */\n this.tCellForm.get('predictionModels')?.valueChanges.subscribe(val => {\n // sessionStorage.setItem('predictionModels', JSON.stringify(val));\n this.inputChange.predictors = this.submitted\n });\n\n const sequenceFieldChange = this.tCellForm.get('inputSequenceText')?.valueChanges.pipe(\n debounce(v => timer(1000)),\n );\n\n this.tCellForm.get('breakPeptides')?.valueChanges.subscribe(val => {\n this.peptideLengthSliderOptions = Object.assign({}, this.peptideLengthSliderOptions, {disabled: val});\n })\n\n sequenceFieldChange?.subscribe(val => {\n console.log('sequenceFieldChange')\n // sessionStorage.setItem('sequences', val);\n this.sequenceParser(val);\n this.inputChange.input_sequence_text = this.submitted;\n if (val === '') { // delete\n this.filteredSequences = [];\n this.numOfAA = 0;\n // this.alertService.clear();\n // this.myForm.patchValue({\n // inputFormat: 0\n // });\n }\n });\n }\n\n /** Allele Modal Functions */\n open(content: any) {\n this.modalOpen = true;\n this.modalService.open(content, {\n ariaLabelledBy: 'modal-basic-title',\n size: 'lg',\n animation: true,\n backdrop: 'static'\n }).result.then((result) => {\n // this.closeResult = `Closed with: ${result}`;\n this.saveState = false;\n this.modalOpen = false;\n }, (reason) => {\n this.saveState = false;\n this.alleleSearch.nativeElement.focus();\n // this.closeResult = `Dismissed ${TCellPredictionComponent.getDismissReason(reason)}`;\n });\n }\n\n onOpenAlleleModal() {\n this.open(this.alleleModal)\n this.modalAlleles = [...this.alleles.value]\n console.log(this.modalAlleles)\n }\n\n dismissAlleleModal() {\n this.modalOpen = false;\n this.modalService.dismissAll()\n }\n\n onSubmitModalAlleles() {\n this.alleles.clear()\n _.forEach(this.modalAlleles, (selectedAllele) => {\n this.alleles.push(this.fb.group(selectedAllele));\n })\n this.inputChange.alleles = this.submitted;\n this.modalService.dismissAll()\n this.modalOpen = false;\n }\n\n generate27Alleles(input: any) {\n this.modalAlleles = []\n // this.alleles.clear()\n const { alleles } = alleleData;\n _.forEach(alleles.split(','), (allele) => {this.modalAlleles.push({label: allele, synonym: null, score: null})})\n input.value = this.selectedModalAlleleLabels;\n }\n\n enableInputs() {\n // this.tCellForm.enable({emitEvent: false});\n this.peptideLengthSliderOptions = Object.assign({}, this.peptideLengthSliderOptions, {disabled: this.breakPeptides});\n }\n\n disableInputs() {\n // this.tCellForm.disable({emitEvent: false});\n this.peptideLengthSliderOptions = Object.assign({}, this.peptideLengthSliderOptions, {disabled: true});\n }\n\n onErrorMessageDeselect(message: string, index: number) {\n if (index > -1) {\n this.errorMessages.splice(index, 1);\n }\n this.errorMessages = _.filter(this.errorMessages, (em) => em !== message);\n }\n\n onWarningMessageDeselect(message: string, index: number) {\n if (index > -1) {\n this.warningMessages.splice(index, 1);\n }\n this.warningMessages = _.filter(this.warningMessages, (wm) => wm !== message);\n }\n\n changePlotThreshold(url: string, i: number) {\n const value = this.processingPlots[i].thresholdInput\n const tempUrl = url.split('?')[0]\n const params = new URL(url).searchParams\n params.set('threshold', `${value}`)\n this.processingPlots[i].url = `${tempUrl}?${params}`\n }\n\n\n\n changePlotsBySequence(e: any) {\n const newUrl = `${this.resultUrl}/plots?sequence_number=${e.target.value}&length=${this.selectedLengthPlots}&allele=${this.selectedAllelePlots}`\n console.log(newUrl)\n this.plotLoading = true;\n this.http.get(newUrl).subscribe((value: any) => {\n console.log(value)\n this.processingPlots = _.map(value.urls, (plot) => {\n\n const url = new URL(plot.url)\n const thresholdInput = url.searchParams.get('threshold')\n\n return {\n thresholdInput,\n ...plot\n }\n })\n this.plotLoading = false;\n })\n }\n\n changePlotsByAllele(e: any) {\n const newUrl = `${this.resultUrl}/plots?sequence_number=${this.selectedSeqNumPlots}&length=${this.selectedLengthPlots}&allele=${e.target.value}`\n console.log(newUrl)\n this.plotLoading = true;\n this.http.get(newUrl).subscribe((value: any) => {\n console.log(value)\n this.processingPlots = _.map(value.urls, (plot) => {\n\n const url = new URL(plot.url)\n const thresholdInput = url.searchParams.get('threshold')\n\n return {\n thresholdInput,\n ...plot\n }\n })\n this.plotLoading = false;\n })\n }\n\n changePlotsByLength(e: any) {\n const newUrl = `${this.resultUrl}/plots?sequence_number=${this.selectedSeqNumPlots}&length=${e.target.value}&allele=${this.selectedAllelePlots}`\n console.log(newUrl)\n this.plotLoading = true;\n this.http.get(newUrl).subscribe((value: any) => {\n console.log(value)\n this.processingPlots = _.map(value.urls, (plot) => {\n\n const url = new URL(plot.url)\n const thresholdInput = url.searchParams.get('threshold')\n\n return {\n thresholdInput,\n ...plot\n }\n })\n this.plotLoading = false;\n })\n }\n\n // sendNotification() {\n // const param = {\n // request_id: this.resultId,\n // email: this.emailForm.get('email')?.value,\n // job_title: this.emailForm.get('jobTitle')?.value\n // }\n // this.http.post(EMAIL_URL, param)\n // .subscribe(resp => {\n // console.log(resp);\n // this.modalService.dismissAll('sendNotification()');\n // })\n // }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'dashToDecimal' })\nexport class DashToDecimalPipe implements PipeTransform {\n transform(value: string): any {\n if (!value) return null;\n return value.replace('_', '.');\n }\n}\n","
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n

Interactive Cluster Visualization

\n \n Visualize a selected Sub-cluster\n \n \n
\n
\n
\n","import {AfterViewInit, Component, ElementRef, Input, ViewChild} from '@angular/core';\nimport {HttpClient} from \"@angular/common/http\";\nimport * as d3 from \"d3\";\nimport _ from 'lodash';\nimport {BehaviorSubject} from \"rxjs\";\n\ninterface IAData {\n label: string,\n value: number\n}\n\n\n@Component({\n selector: 'app-d3-force',\n templateUrl: './d3-force.component.html',\n styleUrls: ['./d3-force.component.scss']\n})\n\nexport class D3ForceComponent implements AfterViewInit {\n @ViewChild(\"containerForceChart\") element: ElementRef | undefined\n\n // initialize a private variable _data, it's a BehaviorSubject\n private _data = new BehaviorSubject([]);\n\n // change data to use getter and setter\n @Input()\n set data(value) {\n // set the latest value for _data BehaviorSubject\n this._data.next(value);\n };\n\n get data() {\n // get the latest value from _data BehaviorSubject\n return this._data.getValue();\n }\n\n @Input() uniqueClusters: string[] = [];\n\n private host: d3.Selection | undefined\n private svg?: d3.Selection\n private width: number = 960;\n private height: number = 600;\n private radius: number = 10;\n\n private htmlElement?: HTMLElement;\n\n private links: any[] = [];\n nodes = {}\n\n constructor(private http: HttpClient) { }\n\n ngAfterViewInit() {\n this.htmlElement = this.element?.nativeElement;\n // @ts-ignore\n this.host = d3.select(this.htmlElement);\n this.buildSVG()\n\n this._data\n .subscribe(data => {\n this.links = data;\n this.buildForce()\n })\n }\n\n private buildSVG(): void {\n this.host?.html(\"\");\n\n // zoom\n const zoom: d3.ZoomBehavior = d3.zoom()\n .scaleExtent([-1, 3])\n .on(\"zoom\", event => {\n this.svg?.attr('transform', event.transform)\n })\n\n\n // @ts-ignore\n this.svg = this.host?.append(\"svg\")\n .attr(\"width\", this.width)\n .attr(\"height\", this.height) // add zoom feature here\n .call(zoom)\n .append(\"g\")\n }\n\n private buildForce(): void {\n _.forEach(this.links, (link) => {\n // @ts-ignore\n link.source = this.nodes[link.source] || (this.nodes[link.source] = {name: link.source, cluster: link.cluster});\n // @ts-ignore\n link.target = this.nodes[link.target] || (this.nodes[link.target] = {name: link.target, cluster: link.cluster});\n })\n\n this.nodes = {}\n\n _.forEach(this.links, (link) => {\n // @ts-ignore\n if( this.nodes[link.source.name] ){\n // @ts-ignore\n this.nodes[link.source.name].cluster = this.nodes[link.source.name].cluster.concat(link.cluster)\n }\n else{ // @ts-ignore\n this.nodes[link.source.name] = {\n name: link.source.name,\n cluster: link.cluster\n }\n }\n // @ts-ignore\n link.source = this.nodes[link.source.name]\n // @ts-ignore\n if( this.nodes[link.target.name] ){\n // @ts-ignore\n this.nodes[link.target.name].cluster = this.nodes[link.target.name].cluster.concat(link.cluster)\n }\n else{\n // @ts-ignore\n this.nodes[link.target.name] = {\n name: link.target.name,\n cluster: link.cluster\n }\n }\n // @ts-ignore\n link.target = this.nodes[link.target.name]\n })\n\n // @ts-ignore\n let simulation = d3.forceSimulation(Object.values(this.nodes))\n .force(\"charge\", d3.forceManyBody().strength(-10))\n .force(\"link\", d3.forceLink(this.links))\n .force('center', d3.forceCenter(this.width/2, this.height/2))\n // @ts-ignore\n const link = this.svg\n .selectAll(\".link\")\n .data(this.links)\n .enter().append(\"line\")\n .style(\"stroke\", \"#6b7071\")\n .attr(\"class\", (d) => \"link \"+ d.cluster.join(' '));\n\n // mouseover\n const mouseover = (event: { currentTarget: any; }, d: any) => {\n d3.select(event.currentTarget).select(\"circle\").transition()\n .duration(750)\n .attr(\"r\", 8)\n\n d3.select(event.currentTarget).select(\"text\").transition()\n .duration(750)\n .attr(\"visibility\", \"visible\");\n }\n\n // mouseout\n const mouseout = (event: { currentTarget: any; }, d: any) => {\n d3.select(event.currentTarget).select(\"circle\").transition()\n .duration(750)\n .attr(\"r\", 4.5);\n\n d3.select(event.currentTarget).select(\"text\").transition()\n .duration(750)\n .attr(\"visibility\", \"hidden\");\n }\n // @ts-ignore\n const drag = simulation => {\n\n function dragstarted(event: { active: any; subject: { fx: any; x: any; fy: any; y: any; }; }) {\n if (!event.active) simulation.alphaTarget(0.3).restart();\n event.subject.fx = event.subject.x;\n event.subject.fy = event.subject.y;\n }\n\n function dragged(event: { subject: { fx: any; fy: any; }; x: any; y: any; }) {\n event.subject.fx = event.x;\n event.subject.fy = event.y;\n }\n\n function dragended(event: { active: any; subject: { fx: null; fy: null; }; }) {\n if (!event.active) simulation.alphaTarget(0);\n event.subject.fx = null;\n event.subject.fy = null;\n }\n\n return d3.drag()\n .on(\"start\", dragstarted)\n .on(\"drag\", dragged)\n .on(\"end\", dragended);\n }\n // @ts-ignore\n let node = this.svg\n .selectAll(\".node\")\n .data(Object.values(this.nodes))\n .enter().append(\"g\")\n .attr(\"class\", (d: any) => \"node \"+ d['cluster'].join(' '))\n .on('mouseover', mouseover)\n .on('mouseout', mouseout)\n // @ts-ignore\n .call(drag(simulation))\n\n const circle = node.append(\"circle\")\n .attr(\"r\", 4.5);\n\n const label = node.append(\"text\")\n .attr(\"dy\", \".35em\")\n .attr('visibility','hidden')\n .text(function(d: any) { return d['name']; });\n\n simulation.on(\"tick\", () => {\n link\n .attr(\"x1\", d => d.source.x)\n .attr(\"y1\", d => d.source.y)\n .attr(\"x2\", d => d.target.x)\n .attr(\"y2\", d => d.target.y);\n circle.attr(\"cx\", (d:any) => d['x']).attr(\"cy\", (d: any) => d['y']);\n label.attr(\"x\", function(d: any) { return d['x'] + 8; }).attr(\"y\", function(d: any) { return d['y']; });\n });\n }\n\n private populateForce(): void {\n /** can break down buildForce to populate Force here.*/\n }\n\n onFilterGraph(e: any) {\n e.preventDefault();\n const value = e.target.value;\n /* https://gitlab.lji.org/iedb/tools/djangotools/-/blob/master/cluster2/templates/cluster2/results.html#L340 */\n if (value == 'all'){\n $(\".node\").show();\n $(\".link\").show();\n }\n else{\n\n $(\".node\").hide();\n $(\".link\").hide();\n\n $(\".\"+value).show();\n }\n }\n\n}\n","
\n
\n

{{index + 1}}

\n
\n
\n
\n

Cluster

\n
\n \n \n \n \n
\n
\n\n \n
\n
Input Sequence(s)
\n\n
\n \n \n
\n
\n \n  \n
\n \n JSON\n \n \n FASTA\n \n Original\n \n
\n
\n
\n  \n \n\n \n
\n Upload sequence file
(.txt, .json, .fasta)\n
\n\n
\n \n  \n
\n
\n
\n \n\n
\n = maxCharacters; else sequenceCounter\" class=\"text-danger\">\n Sequence text is too long - {{maxCharacters | number}} characters allowed\n \n \n \n Format: {{seqFormat}} | {{numOfCharacters | number}} characters\n \n \n \n Parameter changed since prediction.\n \n
\n
\n
\n \n
\n
Prediction Parameters
\n
\n \n
\n
\n \n
\n
\n  \n\n\n\n\n\n\n\n\n\n\n\n\n
\n
\n\n
\n
\n \n
\n
\n
\n \n \n Parameter changed since prediction.\n \n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n\n
\n
\n \n
\n
\n
\n \n \n Parameter changed since prediction.\n \n
\n
\n
\n\n
\n
\n \n
\n
\n \n \n Parameter changed since prediction.\n \n
\n
\n
\n\n\n\n\n\n\n\n\n\n\n\n \n
\n\n
\n \n  \n \n \n \n \n
\n
\n \n \n \n
\n
\n \n \n \n\n
\n
\n
\n\n
\n\n
\n \n
\n

\n \n

\n
\n
\n \n
    \n
  1. {{message}}
  2. \n
\n
\n
\n
\n
\n \n
\n

\n \n

\n
\n
\n \n
    \n
  1. {{message}}
  2. \n
\n
\n
\n
\n
\n
\n\n
\n \n
\n\n
\n
\n Loading...\n
\n \n \n
\n\n\n
\n \n
\n
\n\n\n\n
\n

Validation Error(s)

\n \n
\n
\n \n
\n
\n
\n
\n\n\n\n
\n

Are you sure?

\n \n
\n
\n
\n

Re-running this step of the pipeline will delete all downstream results, including:

\n
    \n
  1. {{tool.name}}
  2. \n
\n

To access the current results, you can use this link

\n
\n \n

Applying these filters for input to the next stage will delete results from all downstream steps in\n this session, including:

\n
    \n
  1. {{tool.name}}
  2. \n
\n

To access the current results, you can use this link

\n
\n \n
\n \n \n
\n
\n
\n \n \n
\n
\n","import {Component, OnInit, OnDestroy, OnChanges, Input, Output, EventEmitter, ViewChild, ElementRef, SimpleChanges} from '@angular/core';\nimport {UntypedFormGroup, UntypedFormBuilder, FormGroupDirective} from \"@angular/forms\";\nimport {Title} from \"@angular/platform-browser\";\nimport {takeUntil, debounce} from \"rxjs/operators\";\nimport {Observable, timer, of, from, Subject, concat, Subscription} from \"rxjs\";\nimport _ from 'lodash';\n\n// import {ChangeContext, Options} from '@angular-slider/ngx-slider';\nimport {ChangeContext, Options, CustomStepDefinition} from 'ngx-slider-v2'\n\nimport Columns from \"../_global/Columns\";\nimport {PipelineService} from \"../services/pipeline-service/pipeline.service\";\nimport {PipelineStateService} from \"../services/state-services/pipeline-state-service/pipeline-state.service\";\nimport {SequenceParserService} from \"../services/sequence-parser/sequence-parser.service\";\n\nimport Stage from \"../_global/Stage\";\nimport PipelineParams from \"../_global/PipelineParams\";\nimport * as pipelineData from \"../services/data/cluster-sample.json\";\nimport {\n initClusterTool,\n} from \"../services/state-services/default-stage-states\";\nimport {isASCII, IsJsonString, ltrim} from \"../util/string-helpers\";\nimport {NgbModal} from \"@ng-bootstrap/ng-bootstrap\";\nimport {Location} from \"@angular/common\";\nimport Tool from \"../_global/Tool\";\nimport {AlertServiceService} from \"../services/alert-service/alert-service.service\";\nimport {columnListToObject} from \"../util/convert-columns\";\nimport {environment} from \"../../environments/environment\";\nimport onCsvDownloadAllClickedNew from \"../util/on-csv-download\";\nimport {HttpClient} from \"@angular/common/http\";\nimport {isMaxLength} from \"../util/is-max-length\";\n\n@Component({\n selector: 'app-cluster',\n templateUrl: './cluster.component.html',\n styleUrls: ['./cluster.component.scss']\n})\nexport class ClusterComponent implements OnInit, OnDestroy, OnChanges {\n\n swaggerUrl = `${environment['api_url']}/apidocs`\n\n unsubscribe$ = new Subject();\n tools$: Observable = this._stateService.tools$;\n stages$: Observable = this._stateService.stages$;\n pipelineId$: Observable = this._stateService.pipelineId$;\n params$: Observable = this._stateService.params$;\n\n active = 1\n\n pipelineUrl: string = ''\n\n pipelineId = '';\n tools: Tool[] = [];\n stages: Stage[] = [];\n params!: PipelineParams;\n\n /** Form variables */\n clusterForm!: UntypedFormGroup;\n @Input() emailForm!: UntypedFormGroup;\n\n inputChange = {\n /** Keeps track of inputChanges to highlight selected parameter table row*/\n input_sequence_text: false,\n threshold: false,\n lengths: false,\n predictors: false,\n table_state: false,\n }\n\n @Output() emitIndex = new EventEmitter(); // used for run all\n @Output() emitOnCancel = new EventEmitter();\n\n @Input() formGroupName!: string\n @Input() index!: number\n // @Input() index!: number\n @Input() resultUrl!: string | undefined;\n\n\n @Input() showEmailModal: boolean = false;\n @Output() shoeEmailModalChange = new EventEmitter(); // used for run all\n @Output() openEmailModal = new EventEmitter();\n\n @ViewChild('confirmModal') confirmModal!: ElementRef;\n @ViewChild('alertModal') alertModal!: ElementRef;\n @ViewChild('emailModal') emailModal! : ElementRef;\n // showEmailModal: boolean = false;\n\n @Input() events: Observable = of();\n private eventsSubscription: Subscription = new Subscription();\n\n @Input() runAllEvent: Observable = of();\n private runAllSubscription: Subscription = new Subscription();\n\n /** sequence files */\n maxCharacters = 1000000;\n files: any[] = [];\n fileName = '';\n\n\n thresholdSliderOptions: Options = {\n floor: 0,\n ceil: 100,\n showTicksValues: true,\n translate: (value) => `${value * 100}%`,\n stepsArray: [\n {value: 0.1},\n {value: 0.2},\n {value: 0.3},\n {value: 0.4},\n {value: 0.5},\n {value: 0.6},\n {value: 0.7},\n {value: 0.8},\n {value: 0.9},\n {value: 1},\n ]\n }\n\n // minValue: number = 5;\n // maxValue: number = 26;\n peptideLengthOptions: Options = {\n showTicks: true,\n stepsArray: _.map(_.range(4, 27), (num): CustomStepDefinition => {return {value: num, legend: num % 5 === 0 ? `${num}` : undefined}}),\n minRange: 1,\n noSwitching: true,\n translate: (value) => {\n if (value === 4) return 'No Min';\n if (value === 26) return 'No Max';\n else return `${value}`;\n }\n }\n /** sequence variables */\n synthesisDownloadLinks = {\n sequence_list_json_uri: '',\n sequence_list_fasta_uri: '',\n download_sequences: ''\n };\n\n filteredSequences: { name: string, sequences: string }[] = [];\n numOfAA: number = 0;\n numOfCharacters: number = 0;\n seqFormat: string = 'Unknown';\n\n pipelineLoading = false;\n /** API Call variables */\n runSetInterval: any;\n submitted = false;\n loading = false;\n getResultsClicked = true;\n\n tableStateSaving = false;\n saveState = false;\n\n resultId: number = 0;\n\n peptide_table_columns: Columns[] | any;\n peptide_table: [(string | number)[]] = [[]]\n peptide_table_order: any[] = [];\n\n sequence_table_order: any[] = [];\n sequence_table_columns: Columns[] | any;\n sequence_table: [(string | number)[]] = [[]]\n\n defaultOrder: any[] = [];\n\n // apiStatus: string;\n errorMessages: string[] = [];\n warningMessages: string[] = [];\n closeResult = '';\n\n // d3-force variable\n links: any[] = [];\n uniqueClusters: string[] = [];\n constructor(\n public alertService: AlertServiceService,\n private http: HttpClient,\n private fb: UntypedFormBuilder,\n private location: Location,\n private titleService: Title,\n private modalService: NgbModal,\n private _pipelineService: PipelineService,\n private _stateService: PipelineStateService,\n private rootFormGroup: FormGroupDirective, // pipeline component\n private sequenceParserService: SequenceParserService\n ) { }\n\n ngOnInit(): void {\n this.clusterForm = this.rootFormGroup.control.get(this.formGroupName) as UntypedFormGroup;\n\n this.pipelineId$.pipe(takeUntil(this.unsubscribe$)).subscribe(value => {\n console.log(`pipelineId=${value}`);\n this.pipelineId = value;\n this.pipelineUrl = `${window.location.origin}/pipeline/${value}`;\n })\n\n this.tools$.pipe(takeUntil(this.unsubscribe$)).subscribe(value => {\n console.log('tools$');\n console.log(value);\n this.tools = value;\n this.submitted = this.tools[this.index]?.submitted\n\n const inputSequenceTextId = this.tools[this.index]?.input_data_uri?.input_sequence_text_id\n\n this.synthesisDownloadLinks.sequence_list_json_uri = `${environment['api_url']}/api/v1/sequence_list_json/${inputSequenceTextId}`\n this.synthesisDownloadLinks.sequence_list_fasta_uri = `${environment['api_url']}/api/v1/sequence_list_fasta/${inputSequenceTextId}`\n this.synthesisDownloadLinks.download_sequences = `${environment['api_url']}/api/v1/download_sequences/${inputSequenceTextId}`\n\n /** pipeline Loading */\n this.pipelineLoading = _.some(this.tools, {loading: true})\n\n if(!this.tools[this.index]?.loading) {\n this.loading = false;\n clearInterval(this.runSetInterval)\n }\n })\n\n this.stages$.pipe(takeUntil(this.unsubscribe$)).subscribe(value => {\n console.log(value);\n this.stages = value;\n this.errorMessages = this.stages[this.index]?.stage_messages!.errors\n this.warningMessages = this.stages[this.index]?.stage_messages!.warnings\n })\n\n this.params$.pipe(takeUntil(this.unsubscribe$)).subscribe(value => {\n console.log(`params`);\n console.log(value);\n this.params = value;\n // if (this.tools[this.index]?.submitted){this.submitted = true}\n })\n\n this.eventsSubscription = this.events.subscribe(() => this.onRunMain());\n this.runAllSubscription = this.runAllEvent.subscribe(() => this.onRunAll())\n\n this.onChanges();\n if(this.clusterForm.get('inputSequenceText')?.value) {\n this.sequenceParser(this.clusterForm.get('inputSequenceText')?.value)\n }\n\n // if(this.loading) {\n // this.disableInputs()\n // }\n\n // if (this.resultUrl) {\n // this.loading = true;\n // this.getResultsSetInterval(this.resultUrl);\n // }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if(changes.resultUrl?.currentValue) {\n console.log(changes.resultUrl.currentValue);\n console.log('ngOnChanges cluster')\n this.loading = true;\n this.getResultsSetInterval(changes.resultUrl.currentValue);\n }\n }\n\n getResultsSetInterval(result_url: string) {\n /** */\n this.getResultsClicked = true\n\n this.sequence_table = [[]]\n this.peptide_table = [[]]\n this.uniqueClusters = []\n\n\n this.inputChange = _.mapValues(this.inputChange, () => false);\n let increment = 0;\n const milliseconds = 3000;\n this.runSetInterval = setInterval(() => {\n this._pipelineService.getResults(result_url).subscribe(resp => {\n if (resp['status'] === 'error' || resp['errors']) {\n this.errorMessages = resp['data']['errors'];\n this.warningMessages = resp['data']['warnings'];\n this.submitted = false;\n this.loading = false;\n const prevTool = this.tools[this.index];\n console.log(prevTool)\n const submittedTCellPredictionTool = Object.assign(prevTool, {\n submitted: this.submitted,\n loading: this.loading,\n })\n this._stateService.insertTool(submittedTCellPredictionTool, this.index);\n clearInterval(this.runSetInterval);\n this.enableInputs();\n }\n if (resp['data']['warnings']?.length) {\n // console.log(resp['warnings']);\n this.warningMessages = resp['data']['warnings'];\n }\n if (resp['data']['errors']?.length) {\n // console.log(resp['warnings']);\n this.errorMessages = resp['data']['errors'];\n }\n if (resp['status'] === 'done') {\n /** 1) Create Column */\n const data = resp['data']['results'];\n console.log(data);\n\n this.active = data[0].type\n\n _.forEach(data, table => {\n if (table.type === 'peptide_table') {\n this.peptide_table_columns = _.map(table.table_columns, (column, i) => {\n if (column.default_order && Number.isFinite(column.row_sort_priority)) { // set defaultOrder\n // console.log(column);\n this.defaultOrder[column.row_sort_priority] = [i, column.default_order === \"ascending\" ? 'asc' : 'desc'];\n }\n column['title'] = `${column['display_name']}`; // required\n column['data'] = `${column['name']}`;\n let source = column['source'];\n\n column['filterKey'] = `${source}.${column.name}`\n // console.log(`source=${source}`);\n let tempSource = source.split('.')\n // console.log(tempSource);\n source = tempSource[tempSource.length - 1];\n // console.log(`source=${source}`);\n column['data'] = `${source}_${column['name']}`;\n /** remove `core` from name */\n // column['name'] = column['display_name'] ? column['display_name'] : column['name']\n // column['name'] = source === 'core' ? display_name: `${source} ${display_name}`;\n // column['filters'] = column['type'] === 'int' ? {\n // minValue: NaN,\n // maxValue: NaN,\n // applied: false\n // } : {\n // possibleValues: [],\n // textValue: null,\n // selectedValues: [],\n // applied: false\n // }\n column['value_limits'] = column['value_limits'] && this.setValueLimits(column)\n return column\n });\n this.peptide_table_order = [...this.defaultOrder];\n if (this.peptide_table_columns) {\n this.peptide_table = table.table_data;\n }\n }\n if (table.type === 'network_graph') {\n // set d3-force inputs\n this.links = data[1].graph_data;\n this.uniqueClusters = [];\n _.forEach(this.links, (link) => {\n if(!this.uniqueClusters.includes(link.cluster[0])) {\n this.uniqueClusters.push(link.cluster[0]);\n }\n });\n }\n if (table.type === 'input_sequence_table') {\n this.sequence_table_columns = _.map(table.table_columns, (column, i) => {\n // if (column.default_order && Number.isFinite(column.row_sort_priority)) { // set defaultOrder\n // this.defaultOrder[column.row_sort_priority] = [i, column.default_order === \"ascending\" ? 'asc' : 'desc'];\n // }\n column['title'] = `${column['display_name']}`; // required\n column['data'] = `${column['name']}`;\n let source = column['source'];\n\n column['filterKey'] = `${source}.${column.name}`\n\n // console.log(`source=${source}`);\n let tempSource = source.split('.')\n // console.log(tempSource);\n source = tempSource[tempSource.length - 1];\n // console.log(`source=${source}`);\n column['data'] = `${source}_${column['name']}`;\n /** remove `core` from name */\n // column['name'] = column['display_name'] ? column['display_name'] : column['name']\n // column['filters'] = column['type'] === 'int' ? {\n // minValue: NaN,\n // maxValue: NaN,\n // applied: false\n // } : {\n // possibleValues: [],\n // textValue: null,\n // selectedValues: [],\n // applied: false\n // }\n column['value_limits'] = column['value_limits'] ? this.setValueLimits(column) : undefined\n return column\n });\n this.sequence_table_order = []\n if (this.sequence_table_columns) {\n\n this.sequence_table = table.table_data\n }\n }\n })\n\n this.submitted = true; this.loading = false;\n const prevTool = this.tools[this.index];\n console.log(prevTool)\n const submittedTCellPredictionTool = Object.assign(prevTool, {\n submitted: this.submitted,\n loading: this.loading,\n })\n this._stateService.insertTool(submittedTCellPredictionTool, this.index);\n clearInterval(this.runSetInterval);\n console.log(data);\n this.enableInputs();\n\n }\n if (resp['status'] === 'canceled') {\n /** if status is canceled, then just stop loader **/\n this.submitted = false;\n this.loading = false;\n const prevTool = this.tools[this.index];\n console.log(prevTool)\n const submittedTCellPredictionTool = Object.assign(prevTool, {\n submitted: this.submitted,\n loading: this.loading,\n })\n this._stateService.insertTool(submittedTCellPredictionTool, this.index);\n clearInterval(this.runSetInterval);\n // console.log(data);\n this.enableInputs();\n // set error message\n // this.errorMessages = [`PIPELINE_ID=${this.pipelineId} w/ STATUS=${resp['status']}`]\n }\n else {\n this.getResultsClicked = false;\n // this.apiStatus = resp['status'];\n console.log(`current status: ${resp['status']} - ${increment}`);\n increment += 1;\n }\n }, error => {\n console.error(error);\n this.enableInputs();\n clearInterval(this.runSetInterval);\n this.submitted = true;\n this.loading = false;\n })\n }, milliseconds);\n }\n\n ngOnDestroy() {\n clearInterval(this.runSetInterval);\n clearInterval(this._pipelineService.runSetInterval)\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n\n this.eventsSubscription.unsubscribe();\n this.runAllSubscription.unsubscribe();\n }\n\n get inputSequenceText(){\n return this.clusterForm.get('inputSequenceText')?.value\n }\n\n onLengthChange(changeContext: ChangeContext): void {\n this.inputChange.lengths = this.submitted;\n }\n\n onThresholdChange(changeContext: ChangeContext): void {\n this.inputChange.threshold = this.submitted;\n }\n\n onChanges(): void {\n /** Immediate - Deletion, */\n // this.clusterForm.get('inputSequenceText').valueChanges.subscribe(val => {\n // if (val === '') { // delete\n // this.filteredSequences = [];\n // this.numOfAA = 0;\n // // this.alertService.clear();\n // // this.myForm.patchValue({\n // // inputFormat: 0\n // // });\n // }\n // })\n\n /** PredictionModel sessionStorage */\n this.clusterForm.get('method')?.valueChanges.subscribe(() => {\n this.inputChange.predictors = this.submitted\n });\n\n const sequenceFieldChange = this.clusterForm.get('inputSequenceText')?.valueChanges.pipe(\n debounce(v => timer(1000)),\n );\n\n sequenceFieldChange?.subscribe((val: string) => {\n sessionStorage.setItem('clusterSequences', val);\n this.sequenceParser(val);\n this.inputChange.input_sequence_text = this.submitted;\n if (val === '') { // delete\n this.filteredSequences = [];\n this.numOfAA = 0;\n // this.alertService.clear();\n // this.myForm.patchValue({\n // inputFormat: 0\n // });\n }\n });\n }\n\n /** Download Sequence File API calls*/\n\n onDownloadJson() {\n console.log(this.synthesisDownloadLinks.sequence_list_json_uri);\n onCsvDownloadAllClickedNew(this.synthesisDownloadLinks.sequence_list_json_uri, this.http, 'json');\n }\n\n onDownloadFasta() {\n console.log(this.synthesisDownloadLinks.sequence_list_fasta_uri);\n onCsvDownloadAllClickedNew(this.synthesisDownloadLinks.sequence_list_fasta_uri, this.http, 'fasta');\n }\n onDownloadOriginal() {\n console.log(this.synthesisDownloadLinks.download_sequences);\n onCsvDownloadAllClickedNew(this.synthesisDownloadLinks.download_sequences, this.http, 'txt');\n }\n\n open(content: any) {\n this.modalService.open(content, {\n ariaLabelledBy: 'modal-basic-title',\n size: 'lg',\n animation: true\n }).result.then((result) => {\n this.saveState = false;\n // this.closeResult = `Closed with: ${result}`;\n }, (reason) => {\n this.saveState = false;\n // this.alleleSearch.nativeElement.focus();\n // this.closeResult = `Dismissed ${TCellPredictionComponent.getDismissReason(reason)}`;\n });\n }\n\n sequenceParser(val: string) {\n\n const firstChar = ltrim(val)[0];\n const firstLine = val.split('\\n')[0]\n console.log(firstLine)\n\n /** Named white space */\n let firstLineNumOfElements = 0\n let separator = ' '\n if(firstLine.includes(' ')){\n separator = ' '\n } else if (firstLine.includes('\\t')){\n separator = '\\t'\n } else if (firstLine.includes('\\s')){\n separator = '\\s'\n }\n firstLineNumOfElements = firstLine.split(separator).length\n console.log(firstLineNumOfElements)\n console.log(separator)\n\n const slicedVal = val.slice(0, this.maxCharacters)\n\n if(val.length > this.maxCharacters) {\n // Skip parsing\n } else if (firstChar === '>' && this.sequenceParserService.fastaValidate(val)) { // fasta\n this.seqFormat = this.sequenceParserService.seqFormat;\n this.numOfCharacters = slicedVal.length\n } else if ((firstChar === '{' || firstChar === '[') && IsJsonString(val)) { // json\n this.seqFormat = 'JSON'\n this.numOfCharacters = slicedVal.length\n } else if (firstLineNumOfElements === 2 && this.sequenceParserService.namedWhiteSpaceValidate(val, separator)) {\n // named white space\n this.seqFormat = this.sequenceParserService.seqFormat;\n this.numOfCharacters = slicedVal.length\n } else if (val.length > 3 && !val.includes('>') && this.sequenceParserService.unnamedWhiteSpaceValidate(val)) {\n // Unnamed\n this.seqFormat = this.sequenceParserService.seqFormat;\n this.numOfCharacters = slicedVal.length\n } else if (val === '') { // delete\n /**\n * Takes care of it up top - still need this if statement\n * */\n this.seqFormat = 'Unknown';\n this.numOfCharacters = 0\n } else { // error\n this.seqFormat = 'Error';\n this.numOfCharacters = 0\n }\n }\n\n onDownloadParameter() {\n const data = this._pipelineService.convertClusterForm(this.clusterForm)\n\n const a = document.createElement('a');\n a.setAttribute('style', 'display:none;');\n document.body.appendChild(a);\n // const contentType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-16';\n // var blob = new Blob([csvData], { type: contentType });\n const blob = new Blob([JSON.stringify(data, null, 2)], ); // thx: http://stackoverflow.com/a/18925211\n a.href = window.URL.createObjectURL(blob);\n a.download = 'parameter.json';\n\n a.click();\n }\n\n setValueLimits(column: Columns) : any {\n /* set value_limits (i.e. filters) for each column based on if type is a number/string */\n return column['type'] === 'int' || column['type'] === 'float' ? {\n ...column['value_limits'],\n minValue: NaN,\n maxValue: NaN,\n applied: false\n } : {\n // ...column['value_limits'],\n possibleValues: column['value_limits']['unique_values'],\n textValue: null,\n selectedValues: [],\n applied: false\n }\n }\n\n postPipelineAPI(params: PipelineParams, getResults: boolean = true) {\n this.disableInputs();\n if (getResults) {\n this.errorMessages = [];\n this.warningMessages = [];\n }\n\n this.loading = getResults; // true - defaults\n this.submitted = !getResults; // false - defaults\n this.tableStateSaving = !getResults\n\n this._pipelineService.postPipeline(params).subscribe(\n (resp) => {\n if (resp['errors'] && resp['errors'].length) {\n console.error(resp['errors']);\n this.errorMessages = resp['errors'];\n if (resp['warnings'].length) {\n console.log(resp['warnings']);\n this.warningMessages = resp['warnings'];\n }\n this.loading = false;\n const submittedClusterTool = Object.assign(initClusterTool, {\n submitted: false,\n loading: false,\n })\n this._stateService.insertTool(submittedClusterTool, this.index);\n this.enableInputs();\n return;\n }\n if (resp['warnings'].length) {\n console.log(resp['warnings']);\n this.warningMessages = resp['warnings'];\n }\n\n if (this.showEmailModal) {\n this.open(this.emailModal);\n }\n\n const inputDataUri = {input_sequence_text_id: resp.input_sequence_text_id}\n this._stateService.insertInputDataUriToTool(inputDataUri, this.index)\n\n this._stateService.setPipelineId(resp.pipeline_id);\n this._stateService.setPipelineIdToParams(resp.pipeline_id);\n this._stateService.setPipelineSpecId(resp.pipeline_spec_id);\n this.location.go(`pipeline/${resp.pipeline_id}`);\n // this.titleService.setTitle(`IEDB NG Tools Pipeline`);\n\n if (getResults) {\n const result_url = `${resp.results_uri}`;\n console.log(result_url);\n this.getResultsSetInterval(result_url);\n } else {\n this.inputChange.table_state = false;\n this.enableInputs();\n this.submitted = true;\n this.loading = false;\n this.tableStateSaving = false;\n }\n },\n error => {\n console.error(error);\n this.errorMessages.push(error.error);\n this.submitted = false;\n this.loading = false;\n const prevTool = this.tools[this.index];\n const submittedTool = Object.assign(prevTool, {\n submitted: this.submitted,\n loading: this.loading,\n })\n this._stateService.insertTool(submittedTool, this.index);\n clearInterval(this.runSetInterval);\n this.enableInputs();\n });\n }\n\n onRunAll() {\n // this.setDefaultFormValues() // not needed because all defaults are already set in formValues\n this.emitIndex.emit(this.index);\n }\n\n onRunMain() {\n if(this.clusterForm.invalid){\n this.alertService.add(`Input sequence text is too long. The maximum number of characters allowed is ${this.maxCharacters.toLocaleString()}\\nYour sequence contains ${this.inputSequenceText.length.toLocaleString()}`, 'alert-danger');\n this.open(this.alertModal)\n return;\n }\n\n const hasResult = _.find(this.tools.slice(this.index+1), (o) => o.submitted || o.loading)\n if(this.stages.length > 1 && hasResult) {\n this.open(this.confirmModal);\n } else {\n this.getResultsClicked = true;\n if(this.index===0) {\n this.onRun();\n } else {\n this.onRun2()\n }\n }\n }\n\n onRunConfirm() {\n let indicies = _.range(this.index + 1, this.stages.length)\n let initTool: Tool;\n console.log(indicies);\n _.forEach(indicies, i => {\n initTool = this.tools[i];\n const unSubmittedTool = {\n ...initTool,\n loading: false,\n submitted: false,\n }\n this._stateService.insertTool(unSubmittedTool, i);\n })\n this.saveState ? this.onSaveTableState() : this.onRun();\n }\n\n setDefaultFormValues() {\n /** defaults - use Sars placeholders*/\n const {input_sequence_text } = pipelineData;\n /** Sequences */\n let sequences = this.clusterForm.value.inputSequenceText\n if(!sequences && this.index===0) {\n this._stateService.setInputSequenceText(input_sequence_text);\n this.clusterForm.controls.inputSequenceText.setValue(input_sequence_text);\n }\n }\n\n onRun() {\n /** Reset global datatables search ext */\n $.fn.dataTable.ext.search = [];\n const stage_number = this.index + 1;\n /** run_stage_range */\n const run_stage_range: [number, number] = [stage_number, stage_number]\n /** default formValue */\n this.setDefaultFormValues()\n /** Sequences */\n let sequences = this.clusterForm.value.inputSequenceText\n\n /** input_parameters */\n const input = this._pipelineService.convertClusterForm(this.clusterForm)\n\n /** Table State */\n const { table_state } = this.stages[this.index];\n\n const params = {\n \"pipeline_id\": '',\n \"pipeline_title\": this.emailForm.controls['name'].value,\n \"email\": this.emailForm.controls['email'].value,\n \"run_stage_range\": run_stage_range,\n \"stages\": [\n {\n \"stage_display_name\": \"Cluster\",\n \"stage_number\": stage_number,\n \"stage_type\": \"prediction\",\n \"tool_group\": \"cluster\",\n \"input_sequence_text\": sequences,\n // \"input_stage_number\": 1,\n \"input_parameters\": input,\n \"table_state\": table_state\n }\n ]\n }\n /** set params */\n this._stateService.setParams(params);\n const loadingClusterTool = Object.assign(initClusterTool, {\n loading: true,\n submitted: false,\n appliedFilters: !_.isEmpty(table_state?.columns)\n })\n console.log(loadingClusterTool)\n console.log(`this.index=${this.index}`);\n this._stateService.insertTool(loadingClusterTool, this.index);\n // this._stateService.insertTableStateToStage({columns: {}}, this.index);\n this.loading = true;\n this.postPipelineAPI(params);\n }\n\n onRun2() {\n\n const params = this.params;\n const stage_number = this.index + 1;\n const input_stage_number = this.index;\n /** run_stage_range */\n const run_stage_range: [number, number] = [stage_number, stage_number]\n /** default formValue */\n // this.setDefaultFormValues() // no need because no sequences\n /** input_parameters */\n const input = this._pipelineService.convertClusterForm(this.clusterForm)\n\n const initialStage = this.stages[this.index];\n\n /** Table State */\n const { table_state } = this.stages[this.index];\n\n const stage = {\n ...initialStage,\n result_url: undefined,\n \"input_stage_number\": input_stage_number,\n \"input_parameters\": input,\n table_state\n }\n\n params.stages[this.index] = stage;\n params.run_stage_range = run_stage_range;\n params.pipeline_title = this.emailForm.controls['name'].value;\n params.email = this.emailForm.controls['email'].value;\n\n console.log(params)\n\n /** set params */\n this._stateService.setParams(params);\n const loadingClusterTool = Object.assign(initClusterTool, {\n loading: true,\n submitted: false,\n appliedFilters: !_.isEmpty(table_state?.columns)\n })\n console.log(loadingClusterTool)\n console.log(`onRun2() - this.index=${this.index}`);\n this._stateService.insertTool(loadingClusterTool, this.index);\n this.loading = true;\n this.postPipelineAPI(params);\n }\n\n onCancel() {\n console.log(this.runSetInterval)\n clearInterval(this.runSetInterval);\n this.emitOnCancel.emit()\n\n this.inputChange.table_state = false;\n // this.submitted = false;\n const currentTool = this.tools[this.index];\n const unSubmittedTool = {\n ...currentTool,\n loading: false,\n submitted: false,\n appliedFilters: undefined\n }\n this._stateService.insertTool(unSubmittedTool, this.index);\n this.warningMessages = [];\n this.loading = false;\n this.tableStateSaving = false;\n this.enableInputs();\n }\n\n onFilterApplied() {\n this.inputChange.table_state = this.submitted;\n }\n\n onClearTableState() {\n this.peptide_table_columns = _.map(this.peptide_table_columns, (c) => {\n c.filters = ['int', 'float'].includes(c.type) ? {\n minValue: NaN,\n maxValue: NaN,\n applied: false\n } :\n {\n possibleValues: [],\n textValue: null,\n selectedValues: [],\n applied: false\n }\n return c\n })\n this.inputChange.table_state = this.submitted;\n }\n\n onShowEmailModalChange() {\n this.showEmailModal = !this.showEmailModal\n this.shoeEmailModalChange.emit(this.showEmailModal)\n }\n\n onSaveTableStateMain() {\n const hasResult = _.find(this.tools.slice(this.index+1), {submitted: true})\n if (hasResult) {\n this.saveState = true;\n this.open(this.confirmModal);\n } else {\n this.onSaveTableState();\n }\n }\n\n onSaveTableState() {\n const tool_group = 'cluster'\n\n const params = this.params\n // create colObj and params\n let colObj = columnListToObject(this.peptide_table_columns, tool_group)\n const stages = params.stages;\n const stageTemp = stages[this.index];\n\n // stageTemp.table_state.columns = colObj;\n stageTemp.table_state = [{table: 'peptide_table', columns: colObj}];\n\n stages[this.index] = stageTemp\n params.stages = stages;\n // run_stage_range\n const stage_number = this.index + 1;\n params.run_stage_range = [stage_number, stage_number];\n this._stateService.setParams(params);\n // appliedFilters\n let appliedFilters = !_.isEmpty(colObj);\n this._stateService.setToolAppliedFilters(appliedFilters, this.index)\n this.postPipelineAPI(params, false);\n this.saveState = false;\n }\n\n onFileDropped($event: any[]) {\n console.log($event);\n const file = $event[0];\n const fileSize = file.size / 1024; // in kB\n console.log(file.type);\n if (fileSize > 20000) {\n this.alertService.add('File Size is too big! (20mB max)', 'alert-danger');\n this.open(this.alertModal);\n }\n else {\n this.prepareSequenceFileList($event);\n }\n }\n\n prepareSequenceFileList(files: Array) {\n console.log(files);\n this.fileName = files[0].name;\n const reader = new FileReader();\n const myForm = this.clusterForm;\n for (const item of files) {\n // console.log(item);\n reader.readAsText(item);\n reader.onload = () => {\n const val = reader.result?.toString() || '';\n console.log(val);\n const v = isASCII(val);\n console.log(v);\n if (v) {\n // myForm.patchValue({inputSequenceText: val.substring(0, this.maxCharacters)});\n const w = isMaxLength(val, this.maxCharacters)\n if (w) {\n myForm.patchValue({inputSequenceText: val});\n } else {\n this.alertService.add(`Sequence is too long - max Sequence length is ${this.maxCharacters.toLocaleString(\"en-US\")} characters`, 'alert-danger');\n this.open(this.alertModal);\n }\n } else {\n this.alertService.add('Invalid file type.\\nValid file types are .txt, .fa, .fasta, .json, .faa,', 'alert-danger');\n this.open(this.alertModal);\n }\n };\n\n reader.onerror = () => {\n console.log(reader.error);\n };\n item.progress = 0;\n this.files.push(item);\n }\n }\n\n sendNotification() {\n // TODO - used in email modal\n }\n\n onReset() {\n this.alertService.clear();\n this.errorMessages = [];\n this.warningMessages = [];\n\n const oldSequence = this.stages[this.index].input_sequence_text\n const input_parameters = this.params.stages[this.index].input_parameters\n\n // sequences\n this.filteredSequences = [];\n this.numOfAA = 0;\n // order\n this.peptide_table_order = [];\n this.defaultOrder = [];\n // clusterForm values\n\n this.clusterForm.patchValue({\n inputSequenceText: '',\n peptideLength: [4, 26],\n threshold: 0.7,\n method: 'cluster-break'\n }, {emitEvent: false});\n\n this.enableInputs()\n\n const method = input_parameters.predictors[0].method\n\n if(this.submitted){\n this.inputChange = {\n ...this.inputChange,\n /** Keeps track of inputChanges to highlight selected parameter table row*/\n input_sequence_text: oldSequence !== '',\n threshold: input_parameters.cluster_pct_identity !== 0.7,\n lengths: !_.isEqual([0, 0], input_parameters.peptide_length_range),\n predictors: method !== 'cluster-break',\n }\n }\n\n // this.errorMessages = [];\n // this.warningMessages = [];\n // this.loading = false;\n // this.submitted = false;\n // this.saveState = false;\n // this.tableStateSaving = false;\n }\n\n get styleResultContainer(){\n return !this.loading && this.submitted ? 'none' : 'dotted';\n }\n\n /** File Download/Upload*/\n uploadSequenceFile($event: any) {\n $event.preventDefault();\n /**\n * Used for 'Upload' button\n * */\n const {files} = $event.target;\n files && this.onFileDropped(files);\n }\n\n uploadParameterFile($event: any, input: any) {\n console.log($event);\n $event.preventDefault();\n // /**\n // * Used for 'Upload' button to upload parameters\n // * */\n // const {files} = $event.target;\n // files && this.onParameterFileDropped(files, input);\n }\n\n /** changes peptideLengthSliderOptions */\n\n enableInputs() {\n // this.clusterForm.enable({emitEvent: false});\n this.clusterForm.controls['method'].enable({emitEvent: false})\n this.thresholdSliderOptions = Object.assign({}, this.thresholdSliderOptions, {disabled: false});\n this.peptideLengthOptions = Object.assign({}, this.peptideLengthOptions, {disabled: false})\n }\n\n disableInputs() {\n // this.clusterForm.disable({emitEvent: false});\n this.clusterForm.controls['method'].disable({emitEvent: false})\n this.thresholdSliderOptions = Object.assign({}, this.thresholdSliderOptions, {disabled: true});\n this.peptideLengthOptions = Object.assign({}, this.peptideLengthOptions, {disabled: true})\n }\n\n onErrorMessageDeselect(message: string, index: number) {\n if (index > -1) {\n this.errorMessages.splice(index, 1);\n }\n this.errorMessages = _.filter(this.errorMessages, (em) => em !== message);\n }\n\n onWarningMessageDeselect(message: string, index: number) {\n if (index > -1) {\n this.warningMessages.splice(index, 1);\n }\n this.warningMessages = _.filter(this.warningMessages, (wm) => wm !== message);\n }\n\n}\n","
\n
\n

{{index + 1}}

\n
\n
\n
\n

PEPMatch

\n
\n \n \n \n \n
\n
\n \n \n
\n
Input Sequence(s)
\n\n
\n \n \n
\n
\n \n  \n
\n \n JSON\n \n \n FASTA\n \n \n Original\n \n
\n
\n
\n  \n\n \n\n \n
\n Upload sequence file
(.txt, .json, .fasta)\n
\n\n
\n \n  \n
\n
\n
\n \n \n\n
\n = maxCharacters; else sequenceCounter\" class=\"text-danger\">\n Sequence text is too long - {{maxCharacters | number}} characters allowed\n \n \n \n Format: {{seqFormat}} | {{numOfCharacters | number}} characters\n \n \n\n \n Parameter changed since prediction.\n \n
\n
\n
\n\n \n
\n
Prediction Parameters
\n
\n \n \n  \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n \n
\n
\n \n
\n
\n
\n \n \n Parameter changed since prediction.\n \n
\n
\n
\n \n
\n
\n \n
\n
\n \n \n Parameter changed since prediction.\n \n
\n
\n\n
\n
\n \n
\n
\n
\n \n \n
\n
\n \n \n
\n \n Parameter changed since prediction.\n \n
\n
\n
\n \n \n
\n
\n
\n\n \n \n \n \n \n \n \n \n \n
\n
\n\n
\n \n  \n \n \n \n \n
\n
\n \n \n \n
\n
\n \n \n \n\n
\n
\n
\n
\n\n\n
\n \n
\n

\n \n

\n
\n
\n \n
    \n
  1. {{message}}
  2. \n
\n
\n
\n
\n
\n \n
\n

\n \n

\n
\n
\n \n
    \n
  1. {{message}}
  2. \n
\n
\n
\n
\n
\n
\n\n
\n \n
\n\n
\n
\n Loading...\n
\n \n
\n\n
\n
    \n \n
  • \n Peptide Table\n \n \n
    \n \n No matches found with the given input peptides and selected parameters.\n \n
    \n\n
    \n
  • \n \n
  • \n Sequence Table \n \n \n \n
  • \n
\n
\n
\n\n\n\n
\n

Are you sure?

\n \n
\n
\n
\n

Re-running this step of the pipeline will delete all downstream results, including:

\n
    \n
  1. {{stage.stage_display_name}}
  2. \n
\n

To access the current results, you can use this link

\n
\n \n

Applying these filters for input to the next stage will delete results from all downstream steps in\n this session, including:

\n
    \n
  1. {{stage.stage_display_name}}
  2. \n
\n

To access the current results, you can use this link

\n
\n \n
\n \n \n
\n
\n
\n \n \n
\n
\n\n\n\n
\n

Validation Error(s)

\n \n
\n
\n \n
\n
\n
\n
\n","import {\n Component,\n OnInit,\n OnDestroy,\n Input,\n Output,\n EventEmitter,\n ViewChild,\n ElementRef,\n OnChanges, SimpleChanges\n} from '@angular/core';\nimport {HttpClient} from \"@angular/common/http\";\nimport {Title} from \"@angular/platform-browser\";\nimport {ActivatedRoute, Router} from \"@angular/router\";\nimport {FormBuilder, UntypedFormGroup, FormControl, FormArray, FormGroupDirective} from \"@angular/forms\";\nimport {CdkDragDrop} from '@angular/cdk/drag-drop';\nimport { Location } from '@angular/common';\n\nimport {Observable, timer, of, from, Subject, Subscription} from \"rxjs\";\nimport {NgbModal, NgbActiveModal} from '@ng-bootstrap/ng-bootstrap';\nimport {Options, ChangeContext} from '@angular-slider/ngx-slider';\n\nimport Columns from \"../_global/Columns\";\nimport {PipelineService} from \"../services/pipeline-service/pipeline.service\";\nimport {PipelineStateService} from \"../services/state-services/pipeline-state-service/pipeline-state.service\";\nimport {SequenceParserService} from \"../services/sequence-parser/sequence-parser.service\";\n\nimport Stage from \"../_global/Stage\";\nimport PipelineParams from \"../_global/PipelineParams\";\nimport * as pipelineData from \"../services/data/cluster-sample.json\";\nimport * as pepmatchData from \"../services/data/pepmatch-mismatch-sample.json\";\nimport {\n initClusterTool, initParams, initClusterState, initTCellPredictionTool, initPepmatchTool\n} from \"../services/state-services/default-stage-states\";\nimport {isASCII, IsJsonString, ltrim} from \"../util/string-helpers\";\nimport Tool from \"../_global/Tool\";\nimport {AlertServiceService} from \"../services/alert-service/alert-service.service\";\nimport {columnListToObject} from \"../util/convert-columns\";\nimport {AlleleSearchService} from \"../services/allele-search/allele-search.service\";\nimport * as _ from \"lodash\";\nimport {environment} from \"../../environments/environment\";\nimport {debounce, takeUntil} from \"rxjs/operators\";\nimport onCsvDownloadAllClickedNew from '../util/on-csv-download';\nimport {isMaxLength} from \"../util/is-max-length\";\n\nconst API_URL = `${environment['api_url']}/api/v1/pepmatch`;\nconst EMAIL_URL = `${environment['api_url']}/api/v1/request`;\n\n@Component({\n selector: 'app-pepmatch',\n templateUrl: './pepmatch.component.html',\n styleUrls: ['./pepmatch.component.scss'],\n styles: [\n `\n\t\t\t.accordion-button::after {\n\t\t\t\tcontent: none;\n\t\t\t}\n\t\t`,\n ]\n})\nexport class PepmatchComponent implements OnInit, OnDestroy, OnChanges {\n\n sequencePlaceHolder = `Type/paste/drag a set of peptides (max: 1,000) into this box or click 'Run' to use the example sequence:\nDDEDSKQNIFHFLYR\nADPGPHLMGGGGRAK\nKAVELGVKLLHAFHT\nQLQNLGINPANIGLS\nHEVWFFGLQYVDSKG\n`\n\n /** Pipeline form */\n @Input() formGroupName!: string\n @Input() index!: number;\n @Input() resultUrl!: string | undefined;\n @Input() showEmailModal: boolean = false;\n\n @Input() emailForm!: UntypedFormGroup;\n @Output() openEmailModal = new EventEmitter();\n\n\n @Output() emitIndex = new EventEmitter(); // used for run all\n @Output() emitOnCancel = new EventEmitter();\n\n @ViewChild('alertModal') alertModal!: ElementRef;\n @ViewChild('confirmModal') confirmModal!: ElementRef;\n\n @Input() events: Observable = of();\n private eventsSubscription: Subscription = new Subscription();\n\n @Input() runAllEvent: Observable = of();\n private runAllSubscription: Subscription = new Subscription();\n\n unsubscribe$ = new Subject();\n\n stages$: Observable = this._stateService.stages$;\n tools$: Observable = this._stateService.tools$;\n pipelineId$: Observable = this._stateService.pipelineId$;\n params$: Observable = this._stateService.params$;\n\n stages: Stage[] = [];\n tools: Tool[] = [];\n pipelineId = '';\n params!: PipelineParams;\n pipelineUrl: string = ''\n\n swaggerUrl = `${environment['api_url']}/apidocs`\n\n /** sequence variables */\n synthesisDownloadLinks = {\n sequence_list_json_uri: '',\n sequence_list_fasta_uri: '',\n download_sequences: ''\n };\n\n /** Form variables */\n pepmatchForm!: UntypedFormGroup;\n\n filteredSequences: { name: string, sequences: string }[] = [];\n numOfAA: number = 0;\n numOfCharacters = 0\n seqFormat: string = 'Unknown';\n\n inputChange = {\n /** Keeps track of inputChanges to highlight selected parameter table row*/\n input_sequence_text: false,\n proteome: false,\n mismatch: false,\n bestMatch: false,\n table_state: false,\n }\n\n options: Options = {\n floor: 0,\n ceil: 5,\n step: 1,\n showTicks: true,\n showTicksValues: true\n };\n\n predictionOptions: {display_name: string, short_name: string, group: string, source: string, has_ic50: boolean}[] = [];\n proteomeOptions: string[] = [];\n\n pepmatchLoading: boolean = false;\n\n /** API Call variables */\n runSetInterval: any;\n submitted = false;\n loading = false;\n getResultsClicked = true;\n\n pipelineLoading = false;\n tableStateSaving = false;\n saveState = false;\n\n errorMessages: string[] = [];\n warningMessages: string[] = [];\n\n columns: Columns[] | any;\n peptide_table: [(string | number)[]] = [[]]\n currentOrder: any[] = [];\n defaultOrder: any[] = [];\n\n sequence_table_order: any[] = [];\n sequence_table_columns: Columns[] | any;\n sequence_table: [(string | number)[]] = [[]]\n\n /** sequence files */\n maxCharacters = 1000000;\n files: any[] = [];\n fileName = '';\n\n active = 'peptide_table'\n\n constructor(\n public alertService: AlertServiceService,\n private http: HttpClient,\n // private fb: FormBuilder,\n private location: Location,\n private titleService: Title,\n private _alleleSearchService: AlleleSearchService,\n private _pipelineService: PipelineService,\n private _stateService: PipelineStateService,\n private rootFormGroup: FormGroupDirective, // pipeline component\n private sequenceParserService: SequenceParserService,\n private modalService: NgbModal,\n ) { }\n\n ngOnInit(): void {\n this.getPepmatch()\n this.pepmatchForm = this.rootFormGroup.control.get(this.formGroupName) as UntypedFormGroup;\n\n this.pipelineId$.pipe(takeUntil(this.unsubscribe$)).subscribe(value => {\n this.pipelineId = value;\n this.pipelineUrl = `${window.location.origin}/pipeline/${value}`;\n })\n this.stages$.pipe(takeUntil(this.unsubscribe$)).subscribe(value => {\n this.stages = value;\n this.errorMessages = this.stages[this.index]?.stage_messages!.errors\n this.warningMessages = this.stages[this.index]?.stage_messages!.warnings\n })\n this.tools$.pipe(takeUntil(this.unsubscribe$)).subscribe(value => {\n console.log('tools$');\n console.log(value);\n this.tools = value;\n this.submitted = this.tools[this.index]?.submitted\n\n // inputSequenceTextURIs\n const inputSequenceTextId = this.tools[this.index]?.input_data_uri?.input_sequence_text_id\n\n this.synthesisDownloadLinks.sequence_list_json_uri = `${environment['api_url']}/api/v1/sequence_list_json/${inputSequenceTextId}`\n this.synthesisDownloadLinks.sequence_list_fasta_uri = `${environment['api_url']}/api/v1/sequence_list_fasta/${inputSequenceTextId}`\n this.synthesisDownloadLinks.download_sequences = `${environment['api_url']}/api/v1/download_sequences/${inputSequenceTextId}`\n /** pipeline Loading */\n this.pipelineLoading = _.some(this.tools, {loading: true})\n\n /** cancel run all */\n if(!this.tools[this.index]?.loading) {\n this.loading = false;\n clearInterval(this.runSetInterval)\n }\n // this.loading = this.tools[this.index]?.loading\n // if (this.tools[this.index]?.submitted){this.submitted = true}\n // if (this.tools[this.index].appliedFilters){this.submitted = true}\n // this.componentDisabled = value[this.index].disabled;\n })\n\n this.params$.pipe(takeUntil(this.unsubscribe$)).subscribe(value => {\n console.log(`params`);\n console.log(value);\n this.params = value;\n })\n\n this.eventsSubscription = this.events.subscribe(() => this.onRunMain());\n this.runAllSubscription = this.runAllEvent.subscribe(() => this.onRunAll())\n\n this.onChanges()\n\n if(this.pepmatchForm.get('inputSequenceText')?.value) {\n this.sequenceParser(this.pepmatchForm.get('inputSequenceText')?.value)\n }\n // if(this.loading) {\n // this.disableInputs()\n // }\n\n // if(this.resultUrl) {\n // this.loading = true;\n // this.getResultsSetInterval(this.resultUrl);\n // }\n\n // filteredSequences\n // numOfAA\n }\n\n ngOnDestroy() {\n clearInterval(this.runSetInterval);\n clearInterval(this._pipelineService.runSetInterval)\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n this.eventsSubscription.unsubscribe();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.resultUrl?.currentValue) {\n console.log(changes.resultUrl.currentValue);\n console.log('ngOnChanges pepmatch')\n this.loading = true;\n this.getResultsSetInterval(changes.resultUrl.currentValue);\n }\n }\n\n get styleResultContainer(){\n return !this.loading && this.submitted ? 'none' : 'dotted';\n }\n\n get inputSequenceText(){\n return this.pepmatchForm.get('inputSequenceText')?.value\n }\n\n /** Download Sequence File API calls*/\n\n onDownloadJson() {\n onCsvDownloadAllClickedNew(this.synthesisDownloadLinks.sequence_list_json_uri, this.http, 'json');\n }\n\n onDownloadFasta() {\n onCsvDownloadAllClickedNew(this.synthesisDownloadLinks.sequence_list_fasta_uri, this.http, 'fasta');\n }\n onDownloadOriginal() {\n onCsvDownloadAllClickedNew(this.synthesisDownloadLinks.download_sequences, this.http, 'txt');\n }\n\n\n /** File Download/Upload*/\n uploadSequenceFile($event: any) {\n $event.preventDefault();\n /**\n * Used for 'Upload' button\n * */\n const {files} = $event.target;\n files && this.onFileDropped(files);\n }\n\n uploadParameterFile($event: any, input: any) {\n console.log($event);\n $event.preventDefault();\n /**\n * Used for 'Upload' button to upload parameters\n * */\n // const {files} = $event.target;\n // files && this.onParameterFileDropped(files, input);\n }\n\n onDownloadParameter() {\n const data = this._pipelineService.convertPepmatchForm(this.pepmatchForm)\n\n const a = document.createElement('a');\n a.setAttribute('style', 'display:none;');\n document.body.appendChild(a);\n // const contentType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-16';\n // var blob = new Blob([csvData], { type: contentType });\n const blob = new Blob([JSON.stringify(data, null, 2)], ); // thx: http://stackoverflow.com/a/18925211\n a.href = window.URL.createObjectURL(blob);\n a.download = 'parameter.json';\n\n a.click();\n }\n\n getPepmatch() {\n this.pepmatchLoading = true;\n this.http.get(API_URL)\n .pipe().subscribe(\n resp => {\n // @ts-ignore\n // this.mhciPredictors = resp['predictors'];\n this.proteomeOptions = resp.optional_parameters[0].choice\n // console.log(resp.optional_parameters[0]);\n\n console.log(this.proteomeOptions)\n this.pepmatchLoading = false;\n }\n )\n }\n\n onChanges(): void {\n /** PredictionModel sessionStorage */\n this.pepmatchForm.get('proteome')?.valueChanges.subscribe(() => {\n this.inputChange.proteome = this.submitted\n });\n\n this.pepmatchForm.get('bestMatch')?.valueChanges.subscribe(() => {\n this.inputChange.bestMatch = this.submitted\n });\n\n const sequenceFieldChange = this.pepmatchForm.get('inputSequenceText')?.valueChanges.pipe(\n debounce(v => timer(1000)),\n );\n\n sequenceFieldChange?.subscribe(val => {\n // sessionStorage.setItem('sequences', val);\n this.sequenceParser(val);\n this.inputChange.input_sequence_text = this.submitted;\n if (val === '') { // delete\n this.filteredSequences = [];\n this.numOfAA = 0;\n }\n });\n }\n\n onRunAll() {\n this.setDefaultFormValues()\n this.errorMessages = [];\n this.warningMessages = [];\n this.emitIndex.emit(this.index);\n }\n\n onRunMain() {\n if(this.pepmatchForm.invalid){\n this.alertService.add(`Input sequence text is too long. The maximum number of characters allowed is ${this.maxCharacters.toLocaleString()}\\nYour sequence contains ${this.inputSequenceText.length.toLocaleString()}`, 'alert-danger');\n this.open(this.alertModal)\n return;\n }\n\n const hasResult = _.find(this.tools.slice(this.index+1), (o) => o.submitted || o.loading)\n if(this.stages.length > 1 && hasResult) {\n this.open(this.confirmModal);\n } else {\n this.getResultsClicked = true;\n if(this.index===0) {\n this.onRun();\n } else {\n this.onRun2()\n }\n }\n }\n\n setDefaultFormValues() {\n /** defaults - use Sars placeholders*/\n const {input_sequence_text} = pepmatchData;\n /** Sequences */\n let sequences = this.pepmatchForm.value.inputSequenceText\n if(!sequences && this.index===0) {\n this._stateService.setInputSequenceText(input_sequence_text);\n this.pepmatchForm.controls.inputSequenceText.setValue(input_sequence_text);\n }\n }\n\n onRunConfirm() {\n let indicies = _.range(this.index + 1, this.stages.length)\n let initTool: Tool;\n console.log(indicies);\n _.forEach(indicies, i => {\n initTool = this.tools[i];\n const unSubmittedTool = {\n ...initTool,\n loading: false,\n submitted: false,\n }\n this._stateService.insertTool(unSubmittedTool, i);\n })\n this.saveState ? this.onSaveTableState() : this.onRun();\n }\n\n onRun() {\n /**\n Update pipeline State\n *\n * */\n /** Reset global datatables search ext */\n $.fn.dataTable.ext.search = [];\n\n const stage_number = this.index + 1;\n /** run_stage_range */\n const run_stage_range: [number, number] = [stage_number, stage_number]\n /** default formValue */\n this.setDefaultFormValues()\n /** Sequences */\n let sequences = this.pepmatchForm.value.inputSequenceText\n\n /** input parameters */\n const inputParameters = this._pipelineService.convertPepmatchForm(this.pepmatchForm)\n\n /** Table State */\n\n const { table_state } = this.stages[this.index];\n\n const newStage = {\n \"stage_display_name\": \"Pepmatch\",\n \"stage_number\": stage_number,\n \"stage_type\": \"prediction\",\n \"tool_group\": \"pepmatch\",\n \"input_sequence_text\": sequences,\n \"input_parameters\": inputParameters,\n \"table_state\": table_state\n }\n\n const params = {\n \"pipeline_id\": '',\n \"pipeline_title\": this.emailForm.controls['name'].value,\n \"email\": this.emailForm.controls['email'].value,\n \"run_stage_range\": run_stage_range,\n \"stages\": [\n newStage\n ]\n }\n\n /** set params */\n const initTool = Object.assign(initPepmatchTool, {\n loading: true,\n submitted: false,\n appliedFilters: !_.isEmpty(table_state?.columns)\n })\n this._stateService.setParams(params);\n this._stateService.insertTool(initTool, this.index);\n // this._stateService.insertTableStateToStage({columns: {}}, this.index);\n\n this.postPipelineAPI(params);\n }\n\n onRun2() {\n\n const params = this.params;\n const stage_number = this.index + 1;\n const input_stage_number = this.index; // previous index\n\n /** run_stage_range */\n const run_stage_range: [number, number] = [stage_number, stage_number]\n /** default formValue */\n this.setDefaultFormValues()\n\n /** input parameters */\n const inputParameters = this._pipelineService.convertPepmatchForm(this.pepmatchForm)\n\n const initialStage = this.stages[this.index];\n console.log('initialStage');\n console.log(initialStage);\n\n /** Table State */\n const { table_state } = this.stages[this.index];\n\n const stage: Stage = {\n ...initialStage,\n result_url: undefined,\n stage_number: stage_number,\n input_stage_number: input_stage_number,\n input_parameters: inputParameters,\n table_state\n }\n\n // this.params.stages.push(stage);\n params.stages[this.index] = stage;\n params.run_stage_range = run_stage_range;\n params.pipeline_title = this.emailForm.controls['name'].value;\n params.email = this.emailForm.controls['email'].value;\n\n console.log(params)\n\n /** set params */\n this._stateService.setParams(params);\n const loadingTCellPredictionTool = Object.assign(initPepmatchTool, {\n loading: true,\n submitted: false,\n appliedFilters: !_.isEmpty(table_state?.columns)\n })\n console.log('loadingTCellPredictionTool')\n console.log(loadingTCellPredictionTool)\n this._stateService.insertTool(loadingTCellPredictionTool, this.index);\n\n this.postPipelineAPI(params);\n }\n\n setValueLimits(column: Columns) : any {\n /* set value_limits (i.e. filters) for each column based on if type is a number/string */\n return column['type'] === 'int' || column['type'] === 'float' ? {\n ...column['value_limits'],\n minValue: NaN,\n maxValue: NaN,\n applied: false\n } : {\n // ...column['value_limits'],\n possibleValues: column['value_limits']['unique_values'],\n textValue: null,\n selectedValues: [],\n applied: false\n }\n }\n\n postPipelineAPI(params: PipelineParams, getResults: boolean = true) {\n /**\n * params\n * getResults: boolean\n * false - used in 'Save Table State'\n * */\n /** initial set up */\n this.disableInputs();\n this.loading = getResults; // true - defaults\n this.submitted = !getResults; // false - defaults\n this.tableStateSaving = !getResults\n if (getResults) {\n this.errorMessages = [];\n this.warningMessages = [];\n }\n this._pipelineService.postPipeline(params).subscribe(\n (resp) => {\n // Errors and Warnings\n if (resp['errors'] && resp['errors'].length) {\n console.log(resp);\n console.error(resp['errors']);\n this.errorMessages = resp['errors'];\n if (resp['warnings'].length) {\n console.log(resp['warnings']);\n this.warningMessages = resp['warnings'];\n }\n this.loading = false;\n this.submitted = true;\n const submittedTool = Object.assign(initPepmatchTool, {\n submitted: false,\n loading: false,\n })\n this._stateService.insertTool(submittedTool, this.index);\n this.enableInputs();\n return;\n }\n // Warnings\n if (resp['warnings'].length) {\n console.log(resp['warnings']);\n this.warningMessages = resp['warnings'];\n }\n\n console.log(resp.pipeline_id);\n\n const inputDataUri = {input_sequence_text_id: resp.input_sequence_text_id}\n this._stateService.insertInputDataUriToTool(inputDataUri, this.index)\n\n this._stateService.setPipelineId(resp.pipeline_id);\n this._stateService.setPipelineIdToParams(resp.pipeline_id);\n this._stateService.setPipelineSpecId(resp.pipeline_spec_id);\n /** Display email Modal if emailModalShow=true */\n if (this.showEmailModal) {\n // this.open(this.emailModal);\n }\n this.location.replaceState(`pipeline/${resp.pipeline_id}`)\n // this.titleService.setTitle(`IEDB NG Tools Pipeline`);\n\n if (getResults) {\n const result_url = `${resp.results_uri}`;\n console.log(result_url);\n this.getResultsSetInterval(result_url);\n } else {\n this.inputChange.table_state = false;\n this.submitted = true;\n this.loading = false;\n this.tableStateSaving = false;\n this.enableInputs();\n }\n },\n error => {\n console.error(error);\n this.errorMessages.push(error.error);\n this.submitted = false;\n this.loading = false;\n const prevTool = this.tools[this.index];\n const submittedTool = Object.assign(prevTool, {\n submitted: this.submitted,\n loading: this.loading,\n })\n this._stateService.insertTool(submittedTool, this.index);\n clearInterval(this.runSetInterval);\n this.enableInputs();\n })\n }\n\n getResultsSetInterval(result_url: string) {\n this.getResultsClicked = true\n\n this.sequence_table = [[]]\n this.peptide_table = [[]]\n\n this.inputChange = _.mapValues(this.inputChange, () => false);\n let increment = 0;\n const milliseconds = 3000;\n this.runSetInterval = setInterval(() => {\n this._pipelineService.getResults(result_url).subscribe(resp => {\n if (resp['status'] === 'error' || resp['errors']) {\n this.errorMessages = resp['data']['errors'];\n this.warningMessages = resp['data']['warnings'];\n this.submitted = false;\n this.loading = false;\n const prevTool = this.tools[this.index];\n console.log(prevTool)\n const submittedTool = Object.assign(prevTool, {\n submitted: this.submitted,\n loading: this.loading,\n })\n this._stateService.insertTool(submittedTool, this.index);\n clearInterval(this.runSetInterval);\n this.enableInputs();\n }\n if (resp['data']['warnings']?.length) {\n // console.log(resp['warnings']);\n this.warningMessages = resp['data']['warnings'];\n }\n if (resp['data']['errors']?.length) {\n // console.log(resp['warnings']);\n this.errorMessages = resp['data']['errors'];\n }\n if (resp['status'] === 'done') {\n /** 1) Create Column */\n const data = resp['data']['results'];\n console.log(data);\n\n this.active = data[0].type\n\n // this.active = data[0].table_data.length ? data[0].type : data[1].type\n\n _.forEach(data, table => {\n if (table.type === 'peptide_table') {\n this.columns = _.map(table.table_columns, (column, i) => {\n if (column.default_order && Number.isFinite(column.row_sort_priority)) { // set defaultOrder\n // console.log(column);\n this.defaultOrder[column.row_sort_priority] = [i, column.default_order === \"ascending\" ? 'asc' : 'desc'];\n }\n column['title'] = `${column['display_name']}`; // required\n column['data'] = `${column['name']}`;\n let source = column['source'];\n\n column['filterKey'] = `${source}.${column.name}`\n // console.log(`source=${source}`);\n let tempSource = source.split('.')\n // console.log(tempSource);\n source = tempSource[tempSource.length - 1];\n // console.log(`source=${source}`);\n column['data'] = `${source}_${column['name']}`;\n /** remove `core` from name */\n // column['name'] = column['display_name'] ? column['display_name'] : column['name']\n // column['name'] = source === 'core' ? display_name: `${source} ${display_name}`;\n // column['filters'] = column['type'] === 'int' ? {\n // minValue: NaN,\n // maxValue: NaN,\n // applied: false\n // } : {\n // possibleValues: [],\n // textValue: null,\n // selectedValues: [],\n // applied: false\n // }\n column['value_limits'] = column['value_limits'] && this.setValueLimits(column)\n return column\n });\n this.currentOrder = [...this.defaultOrder];\n if (this.columns) {\n this.peptide_table = table.table_data;\n const prevTool = this.tools[this.index];\n console.log(prevTool)\n const submittedClusterTool = Object.assign(prevTool, {\n submitted: true,\n loading: false,\n })\n\n this._stateService.insertTool(submittedClusterTool, this.index);\n\n clearInterval(this.runSetInterval);\n this.enableInputs();\n\n this.submitted = true;\n this.loading = false;\n }\n }\n if (table.type === 'input_sequence_table') {\n this.sequence_table_columns = _.map(table.table_columns, (column, i) => {\n // if (column.default_order && Number.isFinite(column.row_sort_priority)) { // set defaultOrder\n // this.defaultOrder[column.row_sort_priority] = [i, column.default_order === \"ascending\" ? 'asc' : 'desc'];\n // }\n column['title'] = `${column['display_name']}`; // required\n column['data'] = `${column['name']}`;\n let source = column['source'];\n\n column['filterKey'] = `${source}.${column.name}`\n\n // console.log(`source=${source}`);\n let tempSource = source.split('.')\n // console.log(tempSource);\n source = tempSource[tempSource.length - 1];\n // console.log(`source=${source}`);\n column['data'] = `${source}_${column['name']}`;\n /** remove `core` from name */\n // column['name'] = column['display_name'] ? column['display_name'] : column['name']\n // column['filters'] = column['type'] === 'int' ? {\n // minValue: NaN,\n // maxValue: NaN,\n // applied: false\n // } : {\n // possibleValues: [],\n // textValue: null,\n // selectedValues: [],\n // applied: false\n // }\n column['value_limits'] = column['value_limits'] ? this.setValueLimits(column) : undefined\n return column\n });\n this.sequence_table_order = []\n if (this.sequence_table_columns) {\n\n this.sequence_table = table.table_data\n }\n }\n })\n }\n if (resp['status'] === 'canceled') {\n /** if status is canceled, then just stop loader **/\n this.submitted = false;\n this.loading = false;\n const prevTool = this.tools[this.index];\n console.log(prevTool)\n const submittedTCellPredictionTool = Object.assign(prevTool, {\n submitted: this.submitted,\n loading: this.loading,\n })\n this._stateService.insertTool(submittedTCellPredictionTool, this.index);\n clearInterval(this.runSetInterval);\n // console.log(data);\n this.enableInputs();\n // set error message\n // this.errorMessages = [`PIPELINE_ID=${this.pipelineId} w/ STATUS=${resp['status']}`]\n }\n else {\n this.getResultsClicked = false;\n // this.apiStatus = resp['status'];\n console.log(`current status: ${resp['status']} - ${increment}`);\n increment += 1;\n }\n }, error => {\n console.error(error);\n this.enableInputs();\n clearInterval(this.runSetInterval);\n this.submitted = true;\n this.loading = false;\n })\n }, milliseconds);\n }\n\n onFileDropped($event: any[]) {\n console.log($event);\n const file = $event[0];\n const fileSize = file.size / 1024; // in kB\n console.log(file.type);\n if (fileSize > 20000) {\n this.alertService.add('File Size is too big! (20mB max)', 'alert-danger');\n this.open(this.alertModal);\n }\n else {\n this.prepareSequenceFileList($event);\n }\n }\n\n prepareSequenceFileList(files: Array) {\n console.log(files);\n this.fileName = files[0].name;\n const reader = new FileReader();\n const myForm = this.pepmatchForm;\n for (const item of files) {\n // console.log(item);\n reader.readAsText(item);\n reader.onload = () => {\n const val = reader.result?.toString() || '';\n console.log(val);\n const v = isASCII(val);\n console.log(v);\n if (v) {\n // myForm.patchValue({inputSequenceText: val.substring(0, this.maxCharacters)});\n const w = isMaxLength(val, this.maxCharacters)\n if (w) {\n myForm.patchValue({inputSequenceText: val});\n } else {\n this.alertService.add(`Sequence is too long - max Sequence length is ${this.maxCharacters.toLocaleString(\"en-US\")} characters`, 'alert-danger');\n this.open(this.alertModal);\n }\n // this.sequenceParser(val); // auto parser\n } else {\n this.alertService.add('Invalid file type.\\nValid file types are .txt, .fa, .fasta, .json, .faa,', 'alert-danger');\n this.open(this.alertModal);\n }\n };\n\n reader.onerror = () => {\n console.log(reader.error);\n };\n item.progress = 0;\n this.files.push(item);\n }\n }\n\n // Allele Modal Functions\n\n open(content: any) {\n this.modalService.open(content, {\n ariaLabelledBy: 'modal-basic-title',\n size: 'lg',\n animation: true,\n }).result.then((result) => {\n // this.closeResult = `Closed with: ${result}`;\n this.saveState = false;\n }, (reason) => {\n this.saveState = false;\n // this.alleleSearch.nativeElement.focus();\n // this.closeResult = `Dismissed ${TCellPredictionComponent.getDismissReason(reason)}`;\n });\n }\n\n\n onCancel() {\n console.log(this.runSetInterval)\n clearInterval(this.runSetInterval);\n this.emitOnCancel.emit()\n\n // this.inputChange.table_state = false;\n // // this.submitted = false;\n const currentTool = this.tools[this.index]\n const unSubmittedTool = {\n ...currentTool,\n loading: false,\n submitted: false,\n appliedFilters: undefined\n }\n this._stateService.insertTool(unSubmittedTool, this.index);\n this.warningMessages = [];\n this.loading = false;\n this.tableStateSaving = false;\n this.enableInputs();\n }\n\n onReset() {\n this.alertService.clear();\n this.errorMessages = [];\n this.warningMessages = [];\n }\n\n enableInputs() {\n // this.pepmatchForm.enable({emitEvent: false});\n this.pepmatchForm.controls['bestMatch'].enable({emitEvent: false})\n this.pepmatchForm.controls['proteome'].enable({emitEvent: false})\n this.options = Object.assign({}, this.options, {disabled: false});\n }\n\n disableInputs() {\n // this.pepmatchForm.disable({emitEvent: false});\n this.pepmatchForm.controls['bestMatch'].disable({emitEvent: false})\n this.pepmatchForm.controls['proteome'].disable({emitEvent: false})\n this.options = Object.assign({}, this.options, {disabled: true});\n }\n\n onFilterApplied() {\n this.inputChange.table_state = this.submitted;\n }\n\n onClearTableState() {\n this.columns = _.map(this.columns, (c) => {\n c.filters = c.type === 'int'? {\n minValue: NaN,\n maxValue: NaN,\n applied: false\n } :\n {\n possibleValues: [],\n textValue: null,\n selectedValues: [],\n applied: false\n }\n return c\n })\n this.inputChange.table_state = this.submitted;\n }\n\n onSaveTableStateMain() {\n const hasResult = _.find(this.tools.slice(this.index+1), {submitted: true})\n if (hasResult) {\n this.saveState = true;\n this.open(this.confirmModal);\n } else {\n this.onSaveTableState();\n }\n }\n\n onSaveTableState() {\n const tool_group = 'pepmatch'\n\n const params = this.params\n // create colObj and params\n let colObj = columnListToObject(this.columns, tool_group)\n const stages = params.stages;\n const stageTemp = stages[this.index];\n\n // stageTemp.table_state.columns = colObj;\n stageTemp.table_state = [{table: 'peptide_table', columns: colObj}];\n\n stages[this.index] = stageTemp\n params.stages = stages;\n // run_stage_range\n const stage_number = this.index + 1;\n params.run_stage_range = [stage_number, stage_number];\n this._stateService.setParams(params);\n // appliedFilters\n let appliedFilters = !_.isEmpty(colObj);\n this._stateService.setToolAppliedFilters(appliedFilters, this.index)\n this.postPipelineAPI(params, false);\n this.saveState = false;\n }\n\n onNumOfMismatchesChange(changeContext: ChangeContext) : void {\n this.inputChange.mismatch = this.submitted;\n }\n\n sequenceParser(val: string) {\n\n const firstChar = ltrim(val)[0];\n const firstLine = val.split('\\n')[0]\n console.log(firstLine)\n\n /** Named white space */\n let firstLineNumOfElements = 0\n let separator = ' '\n if(firstLine.includes(' ')){\n separator = ' '\n } else if (firstLine.includes('\\t')){\n separator = '\\t'\n } else if (firstLine.includes('\\s')){\n separator = '\\s'\n }\n firstLineNumOfElements = firstLine.split(separator).length\n console.log(firstLineNumOfElements)\n console.log(separator)\n\n const slicedVal = val.slice(0, this.maxCharacters)\n\n if(val.length > this.maxCharacters) {\n // Skip parsing\n } else if (firstChar === '>' && this.sequenceParserService.fastaValidate(val)) { // fasta\n this.seqFormat = this.sequenceParserService.seqFormat;\n this.numOfCharacters = slicedVal.length\n } else if ((firstChar === '{' || firstChar === '[') && IsJsonString(val)) { // json\n this.seqFormat = 'JSON'\n this.numOfCharacters = slicedVal.length\n } else if (firstLineNumOfElements === 2 && this.sequenceParserService.namedWhiteSpaceValidate(val, separator)) {\n // named white space\n this.seqFormat = this.sequenceParserService.seqFormat;\n this.numOfCharacters = slicedVal.length\n } else if (val.length > 3 && !val.includes('>') && this.sequenceParserService.unnamedWhiteSpaceValidate(val)) {\n // Unnamed\n this.seqFormat = this.sequenceParserService.seqFormat;\n this.numOfCharacters = slicedVal.length\n } else if (val === '') { // delete\n /**\n * Takes care of it up top - still need this if statement\n * */\n this.seqFormat = 'Unknown';\n this.numOfCharacters = 0\n } else { // error\n this.seqFormat = 'Error';\n this.numOfCharacters = 0\n }\n }\n\n}\n","
\n
\n

{{index + 1}}

\n
\n
\n
\n

\n PepX - Peptide Expression Annotation\n \"cedar\"\n

\n
\n \n \n \n \n
\n
\n \n \n
\n
Input Sequence(s)
\n\n
\n \n
\n
\n \n  \n
\n \n JSON\n \n \n FASTA\n \n \n Original\n \n
\n
\n
\n  \n\n \n\n \n
\n Upload sequence file
(.txt, .json, .fasta)\n
\n\n
\n \n  \n
\n
\n
\n \n \n\n
\n = maxCharacters; else sequenceCounter\" class=\"text-danger\">\n Sequence text is too long - {{maxCharacters | number}} characters allowed\n \n \n \n Format: {{seqFormat}} | {{numOfCharacters | number}} characters\n \n \n\n \n Parameter changed since prediction.\n \n
\n
\n
\n \n
\n
Prediction Parameters
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n Parameter changed since prediction.\n \n
\n
\n \n
\n
\n \n
\n
\n
\n
\n Loading...\n
\n
\n \n \n \n Parameter changed since prediction.\n \n \n
\n
\n \n
\n
\n \n
\n
\n
\n
\n Loading...\n
\n
\n \n \n \n Parameter changed since prediction.\n \n \n
\n
\n\n
\n
\n\n
\n \n  \n \n \n \n \n
\n
\n \n \n \n
\n
\n \n \n \n\n
\n
\n
\n\n
\n\n\n
\n \n
\n

\n \n

\n
\n
\n \n
    \n
  1. {{message}}
  2. \n
\n
\n
\n
\n
\n \n
\n

\n \n

\n
\n
\n \n
    \n
  1. {{message}}
  2. \n
\n
\n
\n
\n
\n
\n\n
\n \n
\n\n
\n
\n Loading...\n
\n \n
\n\n
\n
    \n \n
  • \n Peptide Table\n \n \n
    \n \n No matches found with the given input peptides and selected parameters.\n \n
    \n\n
    \n
  • \n \n
  • \n Peptide Gene Summary Table\n \n \n
    \n \n No matches found with the given input peptides and selected parameters.\n \n
    \n\n
    \n
  • \n \n
  • \n Sequence Table \n \n \n \n
  • \n
\n
\n
\n\n\n\n
\n

Are you sure?

\n \n
\n
\n
\n

Re-running this step of the pipeline will delete all downstream results, including:

\n
    \n
  1. {{stage.stage_display_name}}
  2. \n
\n

To access the current results, you can use this link

\n
\n \n

Applying these filters for input to the next stage will delete results from all downstream steps in\n this session, including:

\n
    \n
  1. {{stage.stage_display_name}}
  2. \n
\n

To access the current results, you can use this link

\n
\n \n
\n \n \n
\n
\n
\n \n \n
\n
\n\n\n\n
\n

Validation Error(s)

\n \n
\n
\n \n
\n
\n
\n
\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Input, OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport {FormGroupDirective, UntypedFormGroup} from \"@angular/forms\";\nimport {Title} from \"@angular/platform-browser\";\n\nimport {Observable, of, Subject, Subscription, timer} from \"rxjs\";\nimport _ from \"lodash\";\nimport {AlertServiceService} from \"../services/alert-service/alert-service.service\";\nimport Stage from \"../_global/Stage\";\nimport Tool from \"../_global/Tool\";\nimport PipelineParams from \"../_global/PipelineParams\";\nimport {environment} from \"../../environments/environment\";\nimport {PipelineStateService} from \"../services/state-services/pipeline-state-service/pipeline-state.service\";\nimport {HttpClient} from \"@angular/common/http\";\nimport {Location} from \"@angular/common\";\nimport Columns from \"../_global/Columns\";\nimport {NgbModal} from \"@ng-bootstrap/ng-bootstrap\";\nimport {PipelineService} from \"../services/pipeline-service/pipeline.service\";\nimport {isASCII, IsJsonString, ltrim} from \"../util/string-helpers\";\nimport {isMaxLength} from \"../util/is-max-length\";\nimport onCsvDownloadAllClickedNew from \"../util/on-csv-download\";\nimport {debounce, takeUntil} from \"rxjs/operators\";\nimport {SequenceParserService} from \"../services/sequence-parser/sequence-parser.service\";\n// import {initPepmatchTool} from \"../services/state-services/default-stage-states\";\nimport {initPepxTool} from \"../services/state-services/default-stage-states\";\nimport * as pepxData from \"../services/data/pepx-sample.json\";\nimport {columnListToObject} from \"../util/convert-columns\";\nconst API_URL = `${environment['api_url']}/api/v1/pepx`;\n\n@Component({\n selector: 'app-pepx',\n templateUrl: './pepx.component.html',\n styleUrls: ['./pepx.component.scss']\n})\nexport class PepxComponent implements OnInit, OnDestroy, AfterViewInit, OnChanges {\n sequencePlaceHolder = `Ex:\nFVQMMTAK\nMRYVASYL\nEDIISFIK\nYEVSQLKD\nYISEHEHF\nAEMYVAKF\nSEFEARVI\nIESIVHAF\nKYGPVFSF\nWERLAVLV\nHETTFNSI\nYVHMVTHF\nKYPENFFL\nPNLAFLRF\nTEFIFTTI\nHESLSHEL\nYERSIVDY\nIEKLFQSV\nTDGKVFQF\nTEFKFPQI\nHQKQISSL\nNQKRLTVY\nHQVVVAKY\nLQNSVKQY\nHSVLIHEY\nVSAVVHEY\nMQKEITAL\nSQAIIHQY\nTQQLMRVY\n`\n\n datasourceLoading = false;\n datasetLoading = false;\n\n datasources: string[] = []\n dataSets: {dataset_id: number, nSamples: null | string, source: string, title: string}[] = []\n\n /** Pipeline form */\n @Input() formGroupName!: string\n @Input() index!: number;\n @Input() resultUrl!: string | undefined;\n @Input() showEmailModal: boolean = false;\n\n @Input() emailForm!: UntypedFormGroup;\n @Output() openEmailModal = new EventEmitter();\n\n\n @Output() emitIndex = new EventEmitter(); // used for run all\n @Output() emitOnCancel = new EventEmitter();\n\n @ViewChild('alertModal') alertModal!: ElementRef;\n @ViewChild('confirmModal') confirmModal!: ElementRef;\n\n @Input() events: Observable = of();\n private eventsSubscription: Subscription = new Subscription();\n\n @Input() runAllEvent: Observable = of();\n private runAllSubscription: Subscription = new Subscription();\n\n unsubscribe$ = new Subject();\n\n stages$: Observable = this._stateService.stages$;\n tools$: Observable = this._stateService.tools$;\n pipelineId$: Observable = this._stateService.pipelineId$;\n params$: Observable = this._stateService.params$;\n\n stages: Stage[] = [];\n tools: Tool[] = [];\n pipelineId = '';\n params!: PipelineParams;\n pipelineUrl: string = ''\n\n swaggerUrl = `${environment['api_url']}/apidocs`\n\n /** sequence variables */\n synthesisDownloadLinks = {\n sequence_list_json_uri: '',\n sequence_list_fasta_uri: '',\n download_sequences: ''\n };\n\n /** Form variables */\n pepxForm!: UntypedFormGroup;\n\n filteredSequences: { name: string, sequences: string }[] = [];\n numOfAA: number = 0;\n numOfCharacters = 0\n seqFormat: string = 'Unknown';\n\n inputChange = {\n /** Keeps track of inputChanges to highlight selected parameter table row*/\n input_sequence_text: false,\n quantitation_level: false,\n data_source: false,\n // lengths: false,\n // predictors: false,\n table_state_1: false,\n table_state_2: false,\n }\n\n // pepxLoading: boolean = false;\n\n /** API Call variables */\n runSetInterval: any;\n submitted = false;\n loading = false;\n getResultsClicked = true;\n\n pipelineLoading = false;\n tableStateSaving = false;\n saveState = false;\n\n errorMessages: string[] = [];\n warningMessages: string[] = [];\n\n peptide_table_columns: Columns[] | any;\n peptide_table: [(string | number)[]] = [[]]\n peptide_table_currentOrder: any[] = [];\n peptide_table_defaultOrder: any[] = [];\n\n peptide_gene_columns: Columns[] | any;\n peptide_gene_summary_table: [(string | number)[]] = [[]]\n peptide_gene_currentOrder: any[] = [];\n peptide_gene_defaultOrder: any[] = [];\n\n sequence_table_order: any[] = [];\n sequence_table_columns: Columns[] | any;\n sequence_table: [(string | number)[]] = [[]]\n\n /** sequence files */\n maxCharacters = 1000000;\n files: any[] = [];\n fileName = '';\n\n active = 'peptide_table'\n\n constructor(\n public alertService: AlertServiceService,\n private http: HttpClient,\n private location: Location,\n private _pipelineService: PipelineService,\n private _stateService: PipelineStateService,\n private rootFormGroup: FormGroupDirective, // pipeline component\n private sequenceParserService: SequenceParserService,\n private modalService: NgbModal,\n private titleService: Title,\n ) {\n }\n\n ngOnInit(): void {\n this.pepxForm = this.rootFormGroup.control.get(this.formGroupName) as UntypedFormGroup;\n\n const qlevel = this.pepxForm.controls['qlevel']?.value\n const datasource = this.pepxForm.controls['datasource']?.value\n this.getPepx(qlevel, datasource)\n\n this.pipelineId$.pipe(takeUntil(this.unsubscribe$)).subscribe(value => {\n this.pipelineId = value;\n this.pipelineUrl = `${window.location.origin}/pipeline/${value}`;\n })\n this.stages$.pipe(takeUntil(this.unsubscribe$)).subscribe(value => {\n this.stages = value;\n this.errorMessages = this.stages[this.index]?.stage_messages!.errors\n this.warningMessages = this.stages[this.index]?.stage_messages!.warnings\n })\n this.tools$.pipe(takeUntil(this.unsubscribe$)).subscribe(value => {\n console.log('tools$');\n console.log(value);\n this.tools = value;\n this.submitted = this.tools[this.index]?.submitted\n\n // inputSequenceTextURIs\n const inputSequenceTextId = this.tools[this.index]?.input_data_uri?.input_sequence_text_id\n\n this.synthesisDownloadLinks.sequence_list_json_uri = `${environment['api_url']}/api/v1/sequence_list_json/${inputSequenceTextId}`\n this.synthesisDownloadLinks.sequence_list_fasta_uri = `${environment['api_url']}/api/v1/sequence_list_fasta/${inputSequenceTextId}`\n this.synthesisDownloadLinks.download_sequences = `${environment['api_url']}/api/v1/download_sequences/${inputSequenceTextId}`\n /** pipeline Loading */\n this.pipelineLoading = _.some(this.tools, {loading: true})\n\n /** cancel run all */\n if(!this.tools[this.index]?.loading) {\n this.loading = false;\n clearInterval(this.runSetInterval)\n }\n // this.loading = this.tools[this.index]?.loading\n // if (this.tools[this.index]?.submitted){this.submitted = true}\n // if (this.tools[this.index].appliedFilters){this.submitted = true}\n // this.componentDisabled = value[this.index].disabled;\n })\n\n this.params$.pipe(takeUntil(this.unsubscribe$)).subscribe(value => {\n console.log(`params`);\n console.log(value);\n this.params = value;\n })\n\n this.eventsSubscription = this.events.subscribe(() => this.onRunMain());\n this.runAllSubscription = this.runAllEvent.subscribe(() => this.onRunAll())\n\n this.onChanges()\n\n if(this.pepxForm.get('inputSequenceText')?.value) {\n this.sequenceParser(this.pepxForm.get('inputSequenceText')?.value)\n }\n // if(this.loading) {\n // this.disableInputs()\n // }\n\n // if(this.resultUrl) {\n // this.loading = true;\n // this.getResultsSetInterval(this.resultUrl);\n // }\n\n // filteredSequences\n // numOfAA\n }\n\n ngOnDestroy() {\n clearInterval(this.runSetInterval);\n clearInterval(this._pipelineService.runSetInterval)\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n this.eventsSubscription.unsubscribe();\n }\n\n ngAfterViewInit() {\n setTimeout(() => {\n const run = history.state?.run;\n // console.log(run);\n run && this.onRunMain();\n }, 0)\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.resultUrl?.currentValue) {\n console.log(changes.resultUrl.currentValue);\n console.log('ngOnChanges pepx')\n this.loading = true;\n this.getResultsSetInterval(changes.resultUrl.currentValue);\n }\n }\n\n get styleResultContainer(){\n return !this.loading && this.submitted ? 'none' : 'dotted';\n }\n\n get inputSequenceText(){\n return this.pepxForm.get('inputSequenceText')?.value\n }\n\n get quantitationLevel(){\n return this.pepxForm.get('qlevel')?.value\n }\n\n /** Download Sequence File API calls*/\n\n onDownloadJson() {\n onCsvDownloadAllClickedNew(this.synthesisDownloadLinks.sequence_list_json_uri, this.http, 'json');\n }\n\n onDownloadFasta() {\n onCsvDownloadAllClickedNew(this.synthesisDownloadLinks.sequence_list_fasta_uri, this.http, 'fasta');\n }\n onDownloadOriginal() {\n onCsvDownloadAllClickedNew(this.synthesisDownloadLinks.download_sequences, this.http, 'txt');\n }\n\n onDownloadParameter() {\n const data = this._pipelineService.convertPepxForm(this.pepxForm)\n\n const a = document.createElement('a');\n a.setAttribute('style', 'display:none;');\n document.body.appendChild(a);\n // const contentType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-16';\n // var blob = new Blob([csvData], { type: contentType });\n const blob = new Blob([JSON.stringify(data, null, 2)], ); // thx: http://stackoverflow.com/a/18925211\n a.href = window.URL.createObjectURL(blob);\n a.download = 'parameter.json';\n\n a.click();\n }\n\n getPepx(qlevel: string = 'gene', datasource='Abelin') {\n // this.pepxLoading = true;\n this.datasetLoading = true\n this.datasourceLoading = true\n\n // https://api-nextgen-tools-dev.iedb.org/api/v1/pepx?datasource=Abelin\n this.http.get(`${API_URL}?qlevel=${qlevel}&datasource=${datasource}`)\n .pipe().subscribe(\n resp => {\n // @ts-ignore\n // this.mhciPredictors = resp['predictors'];\n console.log(resp)\n // @ts-ignore\n this.dataSets = resp.datasets\n console.log(this.dataSets)\n // @ts-ignore\n this.datasources = resp.datasources\n // this.pepxForm.patchValue({dataset_id: this.dataSets[0].dataset_id})\n // this.proteomeOptions = resp.optional_parameters[0].choice\n // console.log(resp.optional_parameters[0]);\n\n // console.log(this.proteomeOptions)\n // this.pepxLoading = false;\n this.datasetLoading = false\n this.datasourceLoading = false\n }\n )\n }\n\n\n /** File Download/Upload*/\n uploadSequenceFile($event: any) {\n $event.preventDefault();\n /**\n * Used for 'Upload' button\n * */\n const {files} = $event.target;\n files && this.onFileDropped(files);\n }\n\n onRunAll() {\n this.setDefaultFormValues()\n this.emitIndex.emit(this.index);\n }\n\n\n onRunMain() {\n if(this.pepxForm.invalid){\n this.alertService.add(`Input sequence text is too long. The maximum number of characters allowed is ${this.maxCharacters.toLocaleString()}\\nYour sequence contains ${this.inputSequenceText.length.toLocaleString()}`, 'alert-danger');\n this.open(this.alertModal)\n return;\n }\n\n const hasResult = _.find(this.tools.slice(this.index+1), (o) => o.submitted || o.loading)\n if(this.stages.length > 1 && hasResult) {\n this.open(this.confirmModal);\n } else {\n this.getResultsClicked = true;\n if(this.index===0) {\n this.onRun();\n } else {\n this.onRun2()\n }\n }\n }\n\n setDefaultFormValues() {\n /** defaults - use Sars placeholders*/\n const {input_sequence_text} = pepxData;\n /** Sequences */\n let sequences = this.pepxForm.value.inputSequenceText\n if(!sequences && this.index===0) {\n this._stateService.setInputSequenceText(input_sequence_text);\n this.pepxForm.controls.inputSequenceText.setValue(input_sequence_text);\n }\n }\n\n onChanges(): void {\n /** PredictionModel sessionStorage */\n // this.pepxForm.get('predictionModels')?.valueChanges.subscribe(val => {\n // // sessionStorage.setItem('predictionModels', JSON.stringify(val));\n // this.inputChange.predictors = this.submitted\n // });\n //\n const sequenceFieldChange = this.pepxForm.get('inputSequenceText')?.valueChanges.pipe(\n debounce(v => timer(1000)),\n );\n //\n // this.pepxForm.get('breakPeptides')?.valueChanges.subscribe(val => {\n // this.peptideLengthSliderOptions = Object.assign({}, this.peptideLengthSliderOptions, {disabled: val});\n // })\n //\n sequenceFieldChange?.subscribe(val => {\n console.log('sequenceFieldChange')\n // sessionStorage.setItem('sequences', val);\n this.sequenceParser(val);\n this.inputChange.input_sequence_text = this.submitted;\n if (val === '') { // delete\n this.filteredSequences = [];\n this.numOfAA = 0;\n }\n });\n }\n\n // Allele Modal Functions\n\n open(content: any) {\n this.modalService.open(content, {\n ariaLabelledBy: 'modal-basic-title',\n size: 'lg',\n animation: true,\n }).result.then((result) => {\n // this.closeResult = `Closed with: ${result}`;\n this.saveState = false;\n }, (reason) => {\n this.saveState = false;\n // this.alleleSearch.nativeElement.focus();\n // this.closeResult = `Dismissed ${TCellPredictionComponent.getDismissReason(reason)}`;\n });\n }\n\n onCancel() {\n console.log(this.runSetInterval)\n clearInterval(this.runSetInterval);\n this.emitOnCancel.emit()\n\n // this.inputChange.table_state = false;\n // // this.submitted = false;\n const currentTool = this.tools[this.index]\n const unSubmittedTool = {\n ...currentTool,\n loading: false,\n submitted: false,\n appliedFilters: undefined\n }\n this._stateService.insertTool(unSubmittedTool, this.index);\n this.warningMessages = [];\n this.loading = false;\n this.tableStateSaving = false;\n this.enableInputs();\n }\n\n onReset() {\n this.alertService.clear();\n this.errorMessages = [];\n this.warningMessages = [];\n }\n\n enableInputs() {\n this.pepxForm.controls['qlevel'].enable({emitEvent: false})\n this.pepxForm.controls['datasource'].enable({emitEvent: false})\n this.pepxForm.controls['dataset_id'].enable({emitEvent: false})\n // this.options = Object.assign({}, this.options, {disabled: false});\n }\n\n disableInputs() {\n this.pepxForm.controls['qlevel'].disable({emitEvent: false})\n this.pepxForm.controls['datasource'].disable({emitEvent: false})\n this.pepxForm.controls['dataset_id'].disable({emitEvent: false})\n // this.options = Object.assign({}, this.options, {disabled: true});\n }\n\n onFilterApplied() {\n this.inputChange.table_state_1 = this.submitted;\n }\n onFilterApplied2() {\n this.inputChange.table_state_2 = this.submitted;\n }\n\n onClearTableState() {\n this.peptide_table_columns = _.map(this.peptide_table_columns, (c) => {\n c.value_limits = c.type === 'int'? {\n minValue: NaN,\n maxValue: NaN,\n applied: false\n } :\n {\n possibleValues: [],\n textValue: null,\n selectedValues: [],\n applied: false\n }\n return c\n })\n this.inputChange.table_state_1 = this.submitted;\n }\n\n onClearTable2State() {\n this.peptide_gene_columns = _.map(this.peptide_gene_columns, (c) => {\n c.value_limits = c.type === 'int'? {\n minValue: NaN,\n maxValue: NaN,\n applied: false\n } :\n {\n possibleValues: [],\n textValue: null,\n selectedValues: [],\n applied: false\n }\n return c\n })\n this.inputChange.table_state_2 = this.submitted;\n }\n\n onSaveTableStateMain(table_name: string) {\n /**\n * @table_name: string - shows which table is used for save table state\n * */\n const hasResult = _.find(this.tools.slice(this.index+1), {submitted: true})\n if (hasResult) {\n this.saveState = true;\n this.open(this.confirmModal);\n } else {\n switch (table_name) {\n case 'peptide_gene_summary_table':\n this.onSaveTable2State();\n break;\n default:\n this.onSaveTable1State();\n }\n }\n }\n\n onSaveTable1State() {\n const tool_group = 'pepx'\n\n const params = this.params\n // create colObj and params\n let colObj = columnListToObject(this.peptide_table_columns, tool_group)\n let colObj2 = columnListToObject(this.peptide_gene_columns, tool_group)\n\n const table_state = [\n {table: 'peptide_table', columns: colObj},\n {table: 'peptide_gene_summary_table', columns: colObj2}\n ]\n this._stateService.insertTableStateToStage(table_state, this.index)\n // this._stateService.insertTableStateToStage({columns: colObj}, this.index)\n\n const stages = params.stages;\n const stageTemp = stages[this.index];\n\n\n stageTemp.table_state[0].columns = colObj\n\n stages[this.index] = stageTemp\n params.stages = stages;\n // run_stage_range\n const stage_number = this.index + 1;\n params.run_stage_range = [stage_number, stage_number];\n this._stateService.setParams(params);\n // appliedFilters\n let appliedFilters = !_.isEmpty(colObj);\n this._stateService.setToolAppliedFilters(appliedFilters, this.index)\n this.postPipelineAPI(params, false);\n this.inputChange.table_state_1 = false;\n\n this.saveState = false;\n }\n\n onSaveTable2State() {\n const tool_group = 'pepx'\n\n const params = this.params\n /** create colObj and params */\n let colObj = columnListToObject(this.peptide_table, tool_group)\n let colObj2 = columnListToObject(this.peptide_gene_columns, tool_group)\n\n const table_state = [\n {table: 'peptide_table', columns: colObj},\n {table: 'peptide_gene_summary_table', columns: colObj2}\n ]\n this._stateService.insertTableStateToStage(table_state, this.index)\n\n const stages = params.stages;\n const stageTemp = stages[this.index];\n console.log(this.peptide_gene_summary_table)\n console.log(stageTemp)\n\n stageTemp.table_state[1].columns = colObj2\n\n stages[this.index] = stageTemp\n params.stages = stages;\n /** run_stage_range */\n const stage_number = this.index + 1;\n params.run_stage_range = [stage_number, stage_number];\n this._stateService.setParams(params);\n /** appliedFilters */\n let appliedFilters = !_.isEmpty(colObj);\n this._stateService.setToolAppliedFilters(appliedFilters, this.index)\n this.postPipelineAPI(params, false);\n this.inputChange.table_state_2 = false;\n\n this.saveState = false;\n }\n\n onFileDropped($event: any[]) {\n console.log($event);\n const file = $event[0];\n const fileSize = file.size / 1024; // in kB\n console.log(file.type);\n if (fileSize > 20000) {\n this.alertService.add('File Size is too big! (20mB max)', 'alert-danger');\n this.open(this.alertModal);\n }\n else {\n this.prepareSequenceFileList($event);\n }\n }\n\n prepareSequenceFileList(files: Array) {\n console.log(files);\n this.fileName = files[0].name;\n const reader = new FileReader();\n const myForm = this.pepxForm;\n for (const item of files) {\n // console.log(item);\n reader.readAsText(item);\n reader.onload = () => {\n const val = reader.result?.toString() || '';\n console.log(val);\n const v = isASCII(val);\n console.log(v);\n if (v) {\n // myForm.patchValue({inputSequenceText: val.substring(0, this.maxCharacters)});\n const w = isMaxLength(val, this.maxCharacters)\n if (w) {\n myForm.patchValue({inputSequenceText: val});\n } else {\n this.alertService.add(`Sequence is too long - max Sequence length is ${this.maxCharacters.toLocaleString(\"en-US\")} characters`, 'alert-danger');\n this.open(this.alertModal);\n }\n // this.sequenceParser(val); // auto parser\n } else {\n this.alertService.add('Invalid file type.\\nValid file types are .txt, .fa, .fasta, .json, .faa,', 'alert-danger');\n this.open(this.alertModal);\n }\n };\n\n reader.onerror = () => {\n console.log(reader.error);\n };\n item.progress = 0;\n this.files.push(item);\n }\n }\n\n sequenceParser(val: string) {\n\n const firstChar = ltrim(val)[0];\n const firstLine = val.split('\\n')[0]\n console.log(firstLine)\n\n /** Named white space */\n let firstLineNumOfElements = 0\n let separator = ' '\n if(firstLine.includes(' ')){\n separator = ' '\n } else if (firstLine.includes('\\t')){\n separator = '\\t'\n } else if (firstLine.includes('\\s')){\n separator = '\\s'\n }\n firstLineNumOfElements = firstLine.split(separator).length\n console.log(firstLineNumOfElements)\n console.log(separator)\n\n const slicedVal = val.slice(0, this.maxCharacters)\n\n if(val.length > this.maxCharacters) {\n // Skip parsing\n } else if (firstChar === '>' && this.sequenceParserService.fastaValidate(val)) { // fasta\n this.seqFormat = this.sequenceParserService.seqFormat;\n this.numOfCharacters = slicedVal.length\n } else if ((firstChar === '{' || firstChar === '[') && IsJsonString(val)) { // json\n this.seqFormat = 'JSON'\n this.numOfCharacters = slicedVal.length\n } else if (firstLineNumOfElements === 2 && this.sequenceParserService.namedWhiteSpaceValidate(val, separator)) {\n // named white space\n this.seqFormat = this.sequenceParserService.seqFormat;\n this.numOfCharacters = slicedVal.length\n } else if (val.length > 3 && !val.includes('>') && this.sequenceParserService.unnamedWhiteSpaceValidate(val)) {\n // Unnamed\n this.seqFormat = this.sequenceParserService.seqFormat;\n this.numOfCharacters = slicedVal.length\n } else if (val === '') { // delete\n /**\n * Takes care of it up top - still need this if statement\n * */\n this.seqFormat = 'Unknown';\n this.numOfCharacters = 0\n } else { // error\n this.seqFormat = 'Error';\n this.numOfCharacters = 0\n }\n }\n\n // Function for dataSource and quanitation level on change\n onDataSourceChange(value: any) {\n console.log(value.target.value)\n // this.getPepx(this.quantitationLevel, value.target.value)\n\n const datasource = value.target.value\n\n // this.datasourceLoading = true\n this.datasetLoading = true\n this.http.get(`${API_URL}?qlevel=${this.quantitationLevel}&datasource=${datasource}`)\n .pipe().subscribe(\n resp => {\n // @ts-ignore\n // this.mhciPredictors = resp['predictors'];\n console.log(resp)\n // @ts-ignore\n this.dataSets = resp.datasets\n this.pepxForm.patchValue({dataset_id: this.dataSets[0].dataset_id})\n // @ts-ignore\n this.datasources = resp.datasources\n // this.proteomeOptions = resp.optional_parameters[0].choice\n // console.log(resp.optional_parameters[0]);\n\n // console.log(this.proteomeOptions)\n // this.pepxLoading = false;\n // this.datasourceLoading = false\n this.datasetLoading = false\n }\n )\n\n }\n\n onQuantitationLevelChange(value: any) {\n console.log(value)\n const qlevel = value\n let datasource = ''\n if(value==='gene'){\n // qlevel = value;\n // const datasource = this.pepxForm.get('datasource')\n this.pepxForm.controls['datasource'].patchValue('Abelin')\n // datasource = 'Abelin'\n // this.getPepx('gene','Abelin')\n }\n if(value==='transcript'){\n // qlevel = value;\n // this.getPepx('transcript','CCLE')\n this.pepxForm.controls['datasource'].patchValue('CCLE')\n // datasource = 'CCLE'\n }\n\n this.datasourceLoading = true\n this.datasetLoading = true\n this.http.get(`${API_URL}?qlevel=${qlevel}&datasource=${datasource}`)\n .pipe().subscribe(\n resp => {\n // @ts-ignore\n // this.mhciPredictors = resp['predictors'];\n console.log(resp)\n // @ts-ignore\n this.dataSets = resp.datasets\n // @ts-ignore\n this.datasources = resp.datasources\n this.pepxForm.patchValue({dataset_id: this.dataSets[0].dataset_id})\n // this.proteomeOptions = resp.optional_parameters[0].choice\n // console.log(resp.optional_parameters[0]);\n\n // console.log(this.proteomeOptions)\n // this.pepxLoading = false;\n this.datasourceLoading = false\n this.datasetLoading = false\n }\n )\n\n }\n\n onRun() {\n /**\n Update pipeline State\n *\n * */\n /** Reset global datatables search ext */\n $.fn.dataTable.ext.search = [];\n\n const stage_number = this.index + 1;\n /** run_stage_range */\n const run_stage_range: [number, number] = [stage_number, stage_number]\n /** default formValue */\n this.setDefaultFormValues()\n /** Sequences */\n let sequences = this.pepxForm.value.inputSequenceText\n\n /** input parameters */\n const inputParameters = this._pipelineService.convertPepxForm(this.pepxForm)\n\n /** Table State */\n const { table_state } = this.stages[this.index];\n\n const newStage = {\n \"stage_display_name\": \"PepX\",\n \"stage_number\": stage_number,\n \"stage_type\": \"prediction\",\n \"tool_group\": \"pepx\",\n \"input_sequence_text\": sequences,\n \"input_parameters\": inputParameters,\n \"table_state\": table_state\n }\n\n const params = {\n \"pipeline_id\": '',\n \"pipeline_title\": this.emailForm.controls['name'].value,\n \"email\": this.emailForm.controls['email'].value,\n \"run_stage_range\": run_stage_range,\n \"stages\": [\n newStage\n ]\n }\n\n /** set params */\n const initTool = Object.assign(initPepxTool, {\n loading: true,\n submitted: false,\n appliedFilters: !_.isEmpty(table_state?.columns)\n })\n this._stateService.setParams(params);\n this._stateService.insertTool(initTool, this.index);\n // this._stateService.insertTableStateToStage({columns: {}}, this.index);\n\n console.log(params)\n this.postPipelineAPI(params);\n }\n\n onRun2() {\n\n const params = this.params;\n const stage_number = this.index + 1;\n const input_stage_number = this.index; // previous index\n\n /** run_stage_range */\n const run_stage_range: [number, number] = [stage_number, stage_number]\n /** default formValue */\n this.setDefaultFormValues()\n\n /** input parameters */\n const inputParameters = this._pipelineService.convertPepxForm(this.pepxForm)\n const initialStage = this.stages[this.index];\n\n /** Table State */\n const { table_state } = this.stages[this.index];\n\n const stage: Stage = {\n ...initialStage,\n result_url: undefined,\n stage_number: stage_number,\n input_stage_number: input_stage_number,\n input_parameters: inputParameters,\n table_state\n }\n\n // this.params.stages.push(stage);\n params.stages[this.index] = stage;\n params.run_stage_range = run_stage_range;\n params.pipeline_title = this.emailForm.controls['name'].value;\n params.email = this.emailForm.controls['email'].value;\n\n console.log(params)\n\n /** set params */\n const loadingTool = Object.assign(initPepxTool, {\n loading: true,\n submitted: false,\n appliedFilters: !_.isEmpty(table_state?.columns)\n })\n console.log('loadingPepxTool')\n console.log(loadingTool)\n this._stateService.setParams(params);\n this._stateService.insertTool(loadingTool, this.index);\n this._stateService.insertInputParametersToStage(inputParameters, this.index);\n\n this.postPipelineAPI(params);\n }\n\n setValueLimits(column: Columns) : any {\n /* set value_limits (i.e. filters) for each column based on if type is a number/string */\n return column['type'] === 'int' || column['type'] === 'float' ? {\n ...column['value_limits'],\n minValue: NaN,\n maxValue: NaN,\n applied: false\n } : {\n // ...column['value_limits'],\n possibleValues: column['value_limits']['unique_values'],\n textValue: null,\n selectedValues: [],\n applied: false\n }\n }\n\n postPipelineAPI(params: PipelineParams, getResults: boolean = true) {\n /**\n * params\n * getResults: boolean\n * false - used in 'Save Table State'\n * */\n /** initial set up */\n this.disableInputs();\n this.loading = getResults; // true - defaults\n this.submitted = !getResults; // false - defaults\n this.tableStateSaving = !getResults\n if (getResults) {\n this.errorMessages = [];\n this.warningMessages = [];\n }\n this._pipelineService.postPipeline(params).subscribe(\n (resp) => {\n // Errors and Warnings\n if (resp['errors'] && resp['errors'].length) {\n console.log(resp);\n console.error(resp['errors']);\n this.errorMessages = resp['errors'];\n if (resp['warnings']?.length) {\n console.log(resp['warnings']);\n this.warningMessages = resp['warnings'];\n }\n this.loading = false;\n this.submitted = true;\n const submittedTool = Object.assign(initPepxTool, {\n submitted: true,\n loading: false,\n })\n this._stateService.insertTool(submittedTool, this.index);\n this.enableInputs();\n return;\n }\n // Warnings\n if (resp['warnings'].length) {\n console.log(resp['warnings']);\n this.warningMessages = resp['warnings'];\n }\n\n console.log(resp.pipeline_id);\n\n const inputDataUri = {input_sequence_text_id: resp.input_sequence_text_id}\n this._stateService.insertInputDataUriToTool(inputDataUri, this.index)\n\n this._stateService.setPipelineId(resp.pipeline_id);\n this._stateService.setPipelineIdToParams(resp.pipeline_id);\n this._stateService.setPipelineSpecId(resp.pipeline_spec_id);\n /** Display email Modal if emailModalShow=true */\n if (this.showEmailModal) {\n // this.open(this.emailModal);\n }\n this.location.replaceState(`pipeline/${resp.pipeline_id}`)\n // this.titleService.setTitle(`IEDB NG Tools Pipeline`);\n\n if (getResults) {\n const result_url = `${resp.results_uri}`;\n console.log(result_url);\n this.getResultsSetInterval(result_url);\n } else {\n // this.inputChange.table_state_1 = false;\n // this.inputChange.table_state_2 = false;\n this.submitted = true;\n this.loading = false;\n this.tableStateSaving = false;\n this.enableInputs();\n }\n },\n error => {\n console.error(error);\n this.errorMessages.push(error.error);\n this.submitted = false;\n this.loading = false;\n const prevTool = this.tools[this.index];\n const submittedTool = Object.assign(prevTool, {\n submitted: this.submitted,\n loading: this.loading,\n })\n this._stateService.insertTool(submittedTool, this.index);\n clearInterval(this.runSetInterval);\n this.enableInputs();\n })\n }\n\n getResultsSetInterval(result_url: string) {\n this.getResultsClicked = true\n\n // this.sequence_table = [[]]\n this.peptide_table = [[]]\n\n this.inputChange = _.mapValues(this.inputChange, () => false);\n let increment = 0;\n const milliseconds = 3000;\n this.runSetInterval = setInterval(() => {\n this._pipelineService.getResults(result_url).subscribe(resp => {\n if (resp['status'] === 'error' || resp['errors']) {\n this.errorMessages = resp['data']['errors'];\n this.warningMessages = resp['data']['warnings'];\n this.submitted = false;\n this.loading = false;\n const prevTool = this.tools[this.index];\n console.log(prevTool)\n const submittedTool = Object.assign(prevTool, {\n submitted: this.submitted,\n loading: this.loading,\n })\n this._stateService.insertTool(submittedTool, this.index);\n clearInterval(this.runSetInterval);\n this.enableInputs();\n }\n if (resp['data']['warnings']?.length) {\n // console.log(resp['warnings']);\n this.warningMessages = resp['data']['warnings'];\n }\n if (resp['data']['errors']?.length) {\n // console.log(resp['warnings']);\n this.errorMessages = resp['data']['errors'];\n }\n if (resp['status'] === 'done') {\n /** 1) Create Column */\n const data = resp['data']['results'];\n console.log(data);\n\n this.active = data[0].type\n\n // this.active = data[0].table_data.length ? data[0].type : data[1].type\n\n _.forEach(data, table => {\n if (table.type === 'peptide_table') {\n this.peptide_table_columns = _.map(table.table_columns, (column, i) => {\n if (column.default_order && Number.isFinite(column.row_sort_priority)) { // set defaultOrder\n // console.log(column);\n this.peptide_table_defaultOrder[column.row_sort_priority] = [i, column.default_order === \"ascending\" ? 'asc' : 'desc'];\n }\n column['title'] = `${column['display_name']}`; // required\n column['data'] = `${column['name']}`;\n let source = column['source'];\n\n column['filterKey'] = `${source}.${column.name}`\n // console.log(`source=${source}`);\n let tempSource = source.split('.')\n // console.log(tempSource);\n source = tempSource[tempSource.length - 1];\n // console.log(`source=${source}`);\n column['data'] = `${source}_${column['name']}`;\n /** remove `core` from name */\n // column['name'] = column['display_name'] ? column['display_name'] : column['name']\n // column['name'] = source === 'core' ? display_name: `${source} ${display_name}`;\n // column['filters'] = column['type'] === 'int' ? {\n // minValue: NaN,\n // maxValue: NaN,\n // applied: false\n // } : {\n // possibleValues: [],\n // textValue: null,\n // selectedValues: [],\n // applied: false\n // }\n column['value_limits'] = column['value_limits'] && this.setValueLimits(column)\n return column\n });\n this.peptide_table_currentOrder = [...this.peptide_table_defaultOrder];\n if (this.peptide_table_columns) {\n this.peptide_table = table.table_data;\n const prevTool = this.tools[this.index];\n console.log(prevTool)\n const submittedClusterTool = Object.assign(prevTool, {\n submitted: true,\n loading: false,\n })\n\n this._stateService.insertTool(submittedClusterTool, this.index);\n\n clearInterval(this.runSetInterval);\n this.enableInputs();\n\n this.submitted = true;\n this.loading = false;\n }\n }\n if (table.type === 'peptide_gene_summary_table') {\n this.peptide_gene_columns = _.map(table.table_columns, (column, i) => {\n if (column.default_order && Number.isFinite(column.row_sort_priority)) { // set defaultOrder\n // console.log(column);\n this.peptide_gene_defaultOrder[column.row_sort_priority] = [i, column.default_order === \"ascending\" ? 'asc' : 'desc'];\n }\n column['title'] = `${column['display_name']}`; // required\n column['data'] = `${column['name']}`;\n let source = column['source'];\n\n column['filterKey'] = `${source}.${column.name}`\n // console.log(`source=${source}`);\n let tempSource = source.split('.')\n // console.log(tempSource);\n source = tempSource[tempSource.length - 1];\n // console.log(`source=${source}`);\n column['data'] = `${source}_${column['name']}`;\n /** remove `core` from name */\n // column['name'] = column['display_name'] ? column['display_name'] : column['name']\n // column['name'] = source === 'core' ? display_name: `${source} ${display_name}`;\n // column['filters'] = column['type'] === 'int' ? {\n // minValue: NaN,\n // maxValue: NaN,\n // applied: false\n // } : {\n // possibleValues: [],\n // textValue: null,\n // selectedValues: [],\n // applied: false\n // }\n column['value_limits'] = column['value_limits'] && this.setValueLimits(column)\n return column\n });\n this.peptide_gene_currentOrder = [...this.peptide_gene_defaultOrder];\n if (this.peptide_gene_columns) {\n this.peptide_gene_summary_table = table.table_data;\n // const prevTool = this.tools[this.index];\n // console.log(prevTool)\n // const submittedTool = Object.assign(prevTool, {\n // submitted: true,\n // loading: false,\n // })\n //\n // this._stateService.insertTool(submittedTool, this.index);\n\n // clearInterval(this.runSetInterval);\n // this.enableInputs();\n //\n // this.submitted = true;\n // this.loading = false;\n }\n }\n if (table.type === 'input_sequence_table') {\n this.sequence_table_columns = _.map(table.table_columns, (column, i) => {\n // if (column.default_order && Number.isFinite(column.row_sort_priority)) { // set defaultOrder\n // this.defaultOrder[column.row_sort_priority] = [i, column.default_order === \"ascending\" ? 'asc' : 'desc'];\n // }\n column['title'] = `${column['display_name']}`; // required\n column['data'] = `${column['name']}`;\n let source = column['source'];\n\n column['filterKey'] = `${source}.${column.name}`\n\n // console.log(`source=${source}`);\n let tempSource = source.split('.')\n // console.log(tempSource);\n source = tempSource[tempSource.length - 1];\n // console.log(`source=${source}`);\n column['data'] = `${source}_${column['name']}`;\n /** remove `core` from name */\n // column['name'] = column['display_name'] ? column['display_name'] : column['name']\n // column['filters'] = column['type'] === 'int' ? {\n // minValue: NaN,\n // maxValue: NaN,\n // applied: false\n // } : {\n // possibleValues: [],\n // textValue: null,\n // selectedValues: [],\n // applied: false\n // }\n column['value_limits'] = column['value_limits'] ? this.setValueLimits(column) : undefined\n return column\n });\n this.sequence_table_order = []\n if (this.sequence_table_columns) {\n\n this.sequence_table = table.table_data\n }\n }\n })\n }\n if (resp['status'] === 'canceled') {\n /** if status is canceled, then just stop loader **/\n this.submitted = false;\n this.loading = false;\n const prevTool = this.tools[this.index];\n console.log(prevTool)\n const submittedTCellPredictionTool = Object.assign(prevTool, {\n submitted: this.submitted,\n loading: this.loading,\n })\n this._stateService.insertTool(submittedTCellPredictionTool, this.index);\n clearInterval(this.runSetInterval);\n // console.log(data);\n this.enableInputs();\n // set error message\n // this.errorMessages = [`PIPELINE_ID=${this.pipelineId} w/ STATUS=${resp['status']}`]\n }\n else {\n this.getResultsClicked = false;\n // this.apiStatus = resp['status'];\n console.log(`current status: ${resp['status']} - ${increment}`);\n increment += 1;\n }\n }, error => {\n console.error(error);\n this.enableInputs();\n clearInterval(this.runSetInterval);\n this.submitted = true;\n this.loading = false;\n })\n }, milliseconds);\n }\n\n onRunConfirm() {\n let indicies = _.range(this.index + 1, this.stages.length)\n let initTool: Tool;\n console.log(indicies);\n _.forEach(indicies, i => {\n initTool = this.tools[i];\n const unSubmittedTool = {\n ...initTool,\n loading: false,\n submitted: false,\n }\n this._stateService.insertTool(unSubmittedTool, i);\n })\n\n // TODO - work oout logic on how to save respecive table when confirm modal pops up...\n this.saveState ? this.onSaveTableStateMain('peptide_table') : this.onRun();\n }\n\n}\n","
\n
\n \n Metric\n \n \n \n Allele\n \n \n
\n
\n
\n
\n
\n","import {AfterViewInit, Component, ElementRef, Input, ViewChild} from '@angular/core';\nimport * as d3 from \"d3\";\nimport {BehaviorSubject} from \"rxjs\";\nimport _ from \"lodash\";\n\n@Component({\n selector: 'app-d3-plot',\n templateUrl: './d3-plot.component.html',\n styleUrls: ['./d3-plot.component.scss']\n})\nexport class D3PlotComponent implements AfterViewInit {\n @ViewChild(\"containerScatterPlot\") element: ElementRef | undefined\n\n /** initialize a private variable _data, it's a BehaviorSubject */\n // private _data = new BehaviorSubject([]);\n private _data = new BehaviorSubject([]);\n\n @Input() plotData!: any\n /**\n {\n : {\n : float, : float,\n : string, : string\n }\n }\n * */\n plottedPoints: any = []\n selectedAllele = ''\n selectedSeries = ''\n uniqueAlleles: string[] = []\n series: string[] = []\n\n // change data to use getter and setter\n @Input()\n set data(value) {\n // set the latest value for _data BehaviorSubject\n this._data.next(value);\n };\n\n get data() {\n // get the latest value from _data BehaviorSubject\n return this._data.getValue();\n }\n\n private svg: any; // private svg?: d3.Selection\n private focus: any;\n\n private margin = {top: 40, right: 70, bottom: 50, left: 70}\n private width = 520 - this.margin.left - this.margin.right\n private height = 470 - this.margin.top - this.margin.bottom\n\n private htmlElement?: HTMLElement;\n\n constructor() {}\n\n ngOnInit(): void {\n // this.createSvg();\n // this.drawPlot();\n console.log(this.plotData)\n\n\n this.series = _.chain(this.plotData)\n .map((series) => series.series_name)\n .uniq()\n .value()\n\n // console.log(this.series)\n this.selectedSeries = this.series[0]\n\n this.uniqueAlleles = this.uniqueAlleles = _.chain(this.plotData)\n .map((series) =>series.allele)\n .uniq()\n .value()\n\n // console.log(this.uniqueAlleles)\n this.selectedAllele = this.uniqueAlleles[0]\n }\n\n ngAfterViewInit() {\n\n this.createSvg()\n this.drawPlot()\n }\n\n private createSvg(): void {\n this.htmlElement = this.element?.nativeElement;\n\n // const zoom: d3.ZoomBehavior = d3.zoom()\n // .scaleExtent([-1, 3])\n // .on(\"zoom\", event => {\n //\n // this.svg?.attr('transform', event.transform)\n // })\n\n // @ts-ignore\n this.svg = d3.select(this.htmlElement)\n .append(\"svg\")\n .attr(\"width\", this.width + (this.margin.left + this.margin.right))\n .attr(\"height\", this.height + (this.margin.top + this.margin.bottom))\n .attr(\"class\", \"allele-plot\")\n\n this.focus = this.svg.append(\"g\")\n .attr(\"class\", \"focus\")\n .attr(\"transform\", \"translate(\" + this.margin.left + \",\" + this.margin.top + \")\")\n // .call(zoom)\n\n }\n\n private drawPlot(\n selectedAllele: string = this.selectedAllele,\n selectedSeries: string = this.selectedSeries,\n ): void {\n /**\n * Set up plottedPoints\n [\n {\n : float, : float,\n : string, : string\n }\n ]\n * */\n // _.forEach(_.zip(['a', 'b', 'c'], [1, 2, 3]), _.spread(function(name, score){ /* */ }));\n\n let selected = _.find(this.plotData, {series_name: selectedSeries, allele: selectedAllele})\n // console.log(selected)\n if (selected) {\n // zip\n this.plottedPoints = []\n _.forEach(\n _.zip(selected!['x_values'], selected!.y_values, selected!.x_labels, selected!.y_labels),\n _.spread((x_val, y_val, x_lab, y_lab) => {\n this.plottedPoints.push({\n peptidea: x_val, peptideb: y_val,\n sequenceA: x_lab, sequenceB: y_lab\n })\n }))\n\n /**\n * Set up D3 elements\n * */\n\n // this.htmlElement = this.element?.nativeElement;\n /** TOOLTIPS\n * tooltip - coordinates\n * seqTooltip - sequences\n * */\n // @ts-ignore\n let tooltip = d3.select(this.htmlElement)\n .append(\"div\")\n .style(\"opacity\", 0)\n .attr(\"class\", \"tooltip\")\n .style(\"background-color\", \"white\")\n .style(\"border\", \"solid\")\n .style(\"border-width\", \"2px\")\n .style(\"border-radius\", \"5px\")\n .style(\"padding\", \"5px\")\n\n // @ts-ignore\n let seqTooltip = d3.select(this.htmlElement)\n .append(\"div\")\n .style(\"position\", \"absolute\")\n .style(\"opacity\", 0)\n .attr(\"class\", \"tooltip\")\n .style(\"background-color\", \"white\")\n .style(\"border\", \"solid\")\n .style(\"border-width\", \"2px\")\n .style(\"border-radius\", \"5px\")\n .style(\"padding\", \"5px\")\n\n // Title\n this.focus.append(\"text\")\n .attr(\"x\", (this.width / 2))\n .attr(\"y\", 0 - (this.margin.top / 2))\n .attr(\"text-anchor\", \"middle\")\n .style(\"font-size\", \"16px\")\n .style(\"text-decoration\", \"underline\")\n .text(selected.title);\n // Add X axis\n\n const x = d3.scaleLinear()\n .domain(selected.x_range)\n .range([0, this.width]);\n\n const xAxis = this.focus.append(\"g\")\n .attr(\"transform\", \"translate(0,\" + this.height + \")\")\n .call(d3.axisBottom(x));\n\n // Add X axis label:\n this.focus.append(\"text\")\n .attr(\"text-anchor\", \"middle\")\n .attr(\"x\", (this.width / 2))\n .attr(\"y\", 420)\n .text(selected.x_title); // add here\n\n // Add Y axis\n const y = d3.scaleLinear()\n .domain(selected.y_range)\n .range([this.height, 0]);\n\n const yAxis = this.focus.append(\"g\")\n .call(d3.axisLeft(y));\n\n // Y axis label:\n this.focus.append(\"text\")\n .attr(\"text-anchor\", \"end\")\n .attr(\"transform\", \"rotate(-90)\")\n .attr(\"y\", -this.margin.left + 20)\n // .attr(\"y\", (this.height / 2))\n .attr(\"x\", -150)\n .text(selected.y_title) // add here\n\n /** draw line old */\n // const line = this.focus.append('line')\n // .style('stroke', 'black')\n // .style(\"stroke-dasharray\",\"5,5\")//dashed array for line\n // .style(\"stroke-width\", 1)\n // .attr(\"x1\", x(0))\n // .attr(\"y1\", y(0))\n // .attr(\"x2\", x(1))\n // .attr(\"y2\", y(1))\n\n /** draw line */\n // let lineData = {x1: -1, y1: -1, x2: 1, y2: 1, strokeWidth: 1}\n let lineData = {\n x1: selected.x_range[0],\n y1: selected.y_range[0],\n x2: selected.x_range[1],\n y2: selected.y_range[1],\n strokeWidth: 1\n }\n const line = this.focus.append('g')\n .attr(\"clip-path\", \"url(#clip)\")\n .attr('class', 'line-group')\n .selectAll('line').data([lineData])\n .enter().append(\"line\")\n .attr(\"x1\", (d: any) => (x(d.x1)))\n .attr(\"y1\", (d: any) => (y(d.y1)))\n .attr(\"x2\", (d: any) => (x(d.x2)))\n .attr(\"y2\", (d: any) => (y(d.y2)))\n .style('stroke', 'grey')\n .style(\"stroke-dasharray\", \"5,5\")//dashed array for line\n .style(\"stroke-width\", (d: any) => d.strokeWidth)\n\n let lineDataY = {x1: -1e100, y1: 0, x2: 1e100, y2: 0, strokeWidth: 1}\n const lineY = this.focus.append('g')\n .attr(\"clip-path\", \"url(#clip)\")\n .attr('class', 'line-group')\n .selectAll('line').data([lineDataY])\n .enter().append(\"line\")\n .attr(\"x1\", (d: any) => (x(d.x1)))\n .attr(\"y1\", (d: any) => (y(d.y1)))\n .attr(\"x2\", (d: any) => (x(d.x2)))\n .attr(\"y2\", (d: any) => (y(d.y2)))\n .style('stroke', 'grey')\n // .style(\"stroke-dasharray\",\"5,5\")//dashed array for line\n .style(\"stroke-width\", (d: any) => d.strokeWidth)\n\n let lineDataX = {x1: 0, y1: -1e100, x2: 0, y2: 1e100, strokeWidth: 1}\n const lineX = this.focus.append('g')\n .attr(\"clip-path\", \"url(#clip)\")\n .attr('class', 'line-group')\n .selectAll('line').data([lineDataX])\n .enter().append(\"line\")\n .attr(\"x1\", (d: any) => (x(d.x1)))\n .attr(\"y1\", (d: any) => (y(d.y1)))\n .attr(\"x2\", (d: any) => (x(d.x2)))\n .attr(\"y2\", (d: any) => (y(d.y2)))\n .style('stroke', 'grey')\n // .style(\"stroke-dasharray\",\"5,5\")//dashed array for line\n .style(\"stroke-width\", (d: any) => d.strokeWidth)\n\n\n // 1) mouseover - insert the data point’s value and place it near the mouse.\n const mouseover = (event: any, d: any, n: any) => {\n tooltip\n .transition()\n .style(\"opacity\", 1)\n\n seqTooltip\n .transition()\n .style(\"opacity\", 1)\n // d3.select(this)\n // .style(\"stroke\", \"black\")\n // .style(\"opacity\", 1)\n }\n\n /** 2) mousemove\n * .toLocaleString() - format w/ commas for thousands separator\n *\n * */\n const mousemove = function (event: any, d: any, n: any) {\n tooltip\n .html(`Coordinates: (${d.peptidea}, ${d.peptideb})`)\n .style(\"left\", (event.x) / 2 + \"px\") // It is important to put the +90: other wise the tooltip is exactly where the point is an it creates a weird effect\n .style(\"top\", (event.y) / 2 + \"px\")\n .style('margin-top', '10px')\n\n // const [left, top] = d3.pointer(event);\n\n seqTooltip.html(`peptide A: ${d.sequenceA}
\n peptide B: ${d.sequenceB}`)\n .style(\"left\", (event.pageX - 400) + \"px\")\n .style(\"top\", (event.pageY - 100) + \"px\")\n // .style(\"left\", (event.x+70) + \"px\")\n // .style(\"top\", (event.y) + \"px\")\n }\n\n // 3) mouseleave - A function that change this tooltip when the leaves a point: just need to set opacity to 0 again\n const mouseleave = function (event: any, d: any, n: any) {\n tooltip\n .transition()\n .style(\"opacity\", 0)\n\n seqTooltip\n .transition()\n .style(\"opacity\", 0)\n }\n\n // Add a clipPath: everything out of this area won't be drawn.\n const clip = this.svg.append(\"defs\").append(\"SVG:clipPath\")\n .attr(\"id\", \"clip\")\n .append(\"SVG:rect\")\n .attr(\"width\", this.width)\n .attr(\"height\", this.height)\n .attr(\"x\", 0)\n .attr(\"y\", 0)\n\n\n // Create the dot/scatter variable: where both the circles and the brush take place\n // const scatter = this.svg.append('g')\n const dots = this.focus.append('g')\n .attr(\"clip-path\", \"url(#clip)\");\n // add dots\n\n // .data(this.plotData[selectedAllele])\n dots.selectAll(\"dot\")\n .data(this.plottedPoints)\n .enter()\n .append(\"circle\")\n .attr(\"r\", 4.5)\n .attr(\"cx\", (d: any) => x(d.peptidea))\n .attr(\"cy\", (d: any) => y(d.peptideb))\n .style(\"opacity\", .5)\n .style(\"fill\", \"#8FC2E8\")\n .attr(\"stroke\", \"#759dc3\")\n .attr(\"stroke-width\", 1.5)\n .on('mouseover', mouseover)\n .on(\"mousemove\", mousemove)\n .on(\"mouseleave\", mouseleave)\n\n\n // A function that updates the chart when the user zoom and thus new boundaries are available\n function updateChart(event: any, d: any) {\n\n // recover the new scale\n let newX = event.transform.rescaleX(x);\n let newY = event.transform.rescaleY(y);\n\n let scaleMultiplier = event.scale\n\n // update axes with these new boundaries\n xAxis.call(d3.axisBottom(newX))\n yAxis.call(d3.axisLeft(newY))\n\n // update circle position\n dots\n .selectAll(\"circle\")\n .attr(\"cx\", (d: any) => newX(d.peptidea))\n .attr(\"cy\", (d: any) => newY(d.peptideb))\n\n // redraw lines\n line\n .attr(\"x1\", (d: any) => (newX(d.x1)))\n .attr(\"y1\", (d: any) => (newY(d.y1)))\n .attr(\"x2\", (d: any) => (newX(d.x2)))\n .attr(\"y2\", (d: any) => (newY(d.y2)))\n .attr('stroke-width', (d: any) => d.strokeWidth * scaleMultiplier)\n\n lineX\n .attr(\"x1\", (d: any) => (newX(d.x1)))\n .attr(\"y1\", (d: any) => (newY(d.y1)))\n .attr(\"x2\", (d: any) => (newX(d.x2)))\n .attr(\"y2\", (d: any) => (newY(d.y2)))\n .attr('stroke-width', (d: any) => d.strokeWidth * scaleMultiplier)\n\n lineY\n .attr(\"x1\", (d: any) => (newX(d.x1)))\n .attr(\"y1\", (d: any) => (newY(d.y1)))\n .attr(\"x2\", (d: any) => (newX(d.x2)))\n .attr(\"y2\", (d: any) => (newY(d.y2)))\n .attr('stroke-width', (d: any) => d.strokeWidth * scaleMultiplier)\n }\n\n // Set the zoom and Pan features: how much you can zoom, on which part, and what to do when there is a zoom\n const zoom = d3.zoom()\n .scaleExtent([1, 100]) // This control how much you can unzoom (x0.5) and zoom (x20)\n .extent([[0, 0], [this.width, this.height]])\n .on(\"zoom\", updateChart);\n\n // This add an invisible rect on top of the chart area. This rect can recover pointer events: necessary to understand when the user zoom\n this.focus.append(\"rect\")\n .attr(\"width\", this.width)\n .attr(\"height\", this.height)\n .lower()\n .style(\"fill\", \"none\")\n .style(\"pointer-events\", \"all\")\n .attr('transform', 'translate(' + 0 + ',' + 0 + ')');\n\n this.focus.call(zoom)\n }\n else { // if there is no 'selected', then show 'No Data Available' in the plot\n this.svg.append(\"text\")\n .attr(\"x\", (this.width / 2))\n .attr(\"y\", (this.height / 2))\n .text('No Data Available'); // add here\n }\n }\n\n // filterUniqueAlleles(selectedSeriesName: string): string[] {\n // return _.chain(this.plotData)\n // .filter(series => series.series_name == selectedSeriesName)\n // .map(series => series.allele)\n // // .uniqBy({series_name: selectedSeriesName})\n // .value()\n // }\n\n onAllelePlotChange(e: any) {\n e.preventDefault();\n this.selectedAllele = e.target.value;\n\n d3.selectAll(\"svg.allele-plot\").remove();\n d3.selectAll(\".tooltip\").remove();\n\n this.createSvg()\n\n this.drawPlot(this.selectedAllele, this.selectedSeries)\n }\n\n onSeriesPlotChange(e: any) {\n e.preventDefault();\n this.selectedSeries = e.target.value;\n // this.uniqueAlleles = this.filterUniqueAlleles(this.selectedSeries)\n // this.selectedAllele = this.uniqueAlleles[0]\n\n d3.selectAll(\"svg.allele-plot\").remove();\n d3.selectAll(\".tooltip\").remove();\n\n this.createSvg()\n\n this.drawPlot(this.selectedAllele, this.selectedSeries)\n }\n}\n","\n
\n
\n

{{index + 1}}

\n
\n
\n
\n

Peptide Variant Comparison\n \"cedar\"\n

\n
\n \n \n \n \n
\n
\n \n \n
\n
Peptide Pairs
\n\n
\n \n \n
\n
\n \n  \n
\n \n JSON\n \n Original\n \n
\n
\n
\n  \n \n\n \n
\n Upload sequence file
(.txt, .json, .fasta)\n
\n\n
\n \n  \n
\n
\n
\n \n \n\n
\n = maxCharacters; else sequenceCounter\" class=\"text-danger\">\n Sequence text is too long - {{maxCharacters | number}} characters allowed\n \n \n \n {{numOfCharacters | number}} characters\n \n \n \n Parameter changed since prediction.\n \n
\n
\n
\n\n \n
\n
Prediction Parameters
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n Download parameters\n \n\n \n
\n
\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
\n \n
\n
\n
\n \n \n \n \n
\n
\n
\n
\n
\n Loading...\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n \n \n {{allele.label}}\n \n \n \n
\n \n Parameter changed since prediction.\n \n
\n
\n\n
\n \n {{alleles.length}} allele(s)\n \n
\n\n\n
\n \n
\n\n
\n \n
\n
\n \n
\n \n \n \n
\n \n \n\n\n\n\n\n\n \n \n \n \n \n
\n
\n
\n \n Parameter changed since prediction.\n \n\n\n
\n
\n
\n \n
\n\n\n \n \n\n\n\n \n \n \n
\n
\n
\n
\n
\n\n
\n\n
\n \n \n  \n \n \n \n \n
\n
\n \n \n \n
\n
\n \n \n \n\n
\n
\n
\n
\n\n
\n \n
\n

\n \n

\n
\n
\n \n
    \n
  1. {{message}}
  2. \n
\n
\n
\n
\n
\n \n
\n

\n \n

\n
\n
\n \n
    \n
  1. {{message}}
  2. \n
\n
\n
\n
\n
\n
\n\n
\n \n
\n\n
\n
\n Loading...\n
\n \n \n
\n\n
\n \n\n
\n
\n\n\n\n
\n

\n Number of Selected Alleles: {{modalAlleles.length}}\n

\n \n
\n\n
\n
\n
\n \n
\n
\n \n \n
\n
\n
\n
\n Loading...\n
\n
\n
\n
\n\n
0\" class=\"p-2 d-flex flex-column justify-content-start\">\n\n
    \n \n
  • {{i['label']}}\n \n
  • \n
\n
\n
\n
\n \n \n \n \n HLA allele frequencies and reference sets with maximal population coverage\n \n \n
\n \n \n
\n
\n
\n\n\n
\n
\n\n\n\n\n
\n

Validation Error(s)

\n \n
\n
\n \n
\n
\n \n \n
\n
\n\n\n\n
\n

Are you sure?

\n \n
\n
\n
\n

Re-running this step of the pipeline will delete all downstream results, including:

\n
    \n
  1. {{tool.name}}
  2. \n
\n

To access the current results, you can use this link

\n
\n \n

Applying these filters for input to the next stage will delete results from all downstream steps in\n this session, including:

\n
    \n
  1. {{tool.name}}
  2. \n
\n

To access the current results, you can use this link

\n
\n \n
\n \n \n
\n
\n
\n \n \n
\n
\n","import {\n Component,\n OnInit,\n OnDestroy,\n Input,\n Output,\n EventEmitter,\n ViewChild,\n ElementRef,\n OnChanges,\n SimpleChanges,\n AfterViewInit,\n isDevMode\n} from '@angular/core';\nimport {HttpClient} from \"@angular/common/http\";\nimport {UntypedFormBuilder, UntypedFormGroup, FormControl, UntypedFormArray, FormGroupDirective, Validators} from \"@angular/forms\";\n\nimport {CdkDragDrop} from '@angular/cdk/drag-drop';\nimport { Location } from '@angular/common';\nimport {Title} from \"@angular/platform-browser\";\n\nimport {Observable, timer, of, from, Subject, Subscription} from \"rxjs\";\nimport {NgbModal, NgbActiveModal} from '@ng-bootstrap/ng-bootstrap';\n\nimport {catchError, debounce, debounceTime, distinctUntilChanged, tap, switchMap, takeUntil} from 'rxjs/operators';\nimport {environment} from \"../../../environments/environment\";\nimport {AlertServiceService} from \"../../services/alert-service/alert-service.service\";\nimport {AlleleSearchService} from \"../../services/allele-search/allele-search.service\";\nimport {PipelineService} from \"../../services/pipeline-service/pipeline.service\";\nimport {PipelineStateService} from \"../../services/state-services/pipeline-state-service/pipeline-state.service\";\nimport {ActivatedRoute, Router} from \"@angular/router\";\nimport {SequenceParserService} from \"../../services/sequence-parser/sequence-parser.service\";\nimport Stage from \"../../_global/Stage\";\nimport Tool from \"../../_global/Tool\";\nimport PipelineParams from \"../../_global/PipelineParams\";\nimport _ from \"lodash\";\nimport * as sarsSampleData from \"../../services/data/t-cell-sample.json\";\nimport * as pepCompSampleData from \"../../services/data/pepcomp-sample.json\";\nimport * as pipelineData from \"../../services/data/pipeline-example.json\";\nimport Allele from \"../../_global/Allele\";\nimport * as alleleData from \"../../services/data/27-alleles.json\";\n// import {initTCellPredictionTool} from \"../../services/state-services/default-stage-states\";\nimport {\n initPeptideBindingComparisonTool,\n initTCellPredictionTool\n} from \"../../services/state-services/default-stage-states\";\nimport {isASCII, IsJsonString} from \"../../util/string-helpers\";\nimport {isMaxLength} from \"../../util/is-max-length\";\nimport Columns from \"../../_global/Columns\";\nimport {columnListToObject} from \"../../util/convert-columns\";\nimport onCsvDownloadAllClickedNew from \"../../util/on-csv-download\";\n\nconst API_URL = `${environment['api_url']}/api/v1/pepcomp`;\n\n@Component({\n selector: 'app-peptide-variant-comparison',\n templateUrl: './peptide-variant-comparison.component.html',\n styleUrls: ['./peptide-variant-comparison.component.scss']\n})\nexport class PeptideVariantComparisonComponent implements OnInit, OnDestroy, AfterViewInit, OnChanges{\n sequencePlaceHolder = `Ex:\nFLYNPLTRV\\tFLYNLLTRV\nMLGERLFPL\\tMLGEQLFPL\nFLDEFMEAV\\tFLDEFMEGV\nVVLSWAPPV\\tVVMSWAPPV\nLLLDDSLVSI\\tLLLDDLLVSI\nGSFGDIYLA\\tGLFGDIYLA\nALYGSVPVL\\tALYGFVPVL\nILTGLNYEA\\tILTGLNYEV\nSLADEAEVHL\\tSLADEAEVYL\nCQWGRLWQL\\tCMWGRLWQL\n`\n\n /** Pipeline form */\n @Input() formGroupName!: string\n @Input() index!: number;\n @Input() resultUrl!: string | undefined;\n @Input() showEmailModal: boolean = false;\n\n @Input() emailForm!: UntypedFormGroup;\n @Output() openEmailModal = new EventEmitter();\n\n active = 'processing_plots'\n\n @Output() emitIndex = new EventEmitter(); // used for run all\n @Output() emitOnCancel = new EventEmitter();\n\n @ViewChild('alleleSearch') alleleSearch!: ElementRef;\n @ViewChild('alertModal') alertModal!: ElementRef;\n @ViewChild('confirmModal') confirmModal!: ElementRef;\n @ViewChild('alleleModal') alleleModal!: ElementRef;\n\n\n @Input() events: Observable = of();\n private eventsSubscription: Subscription = new Subscription();\n\n @Input() runAllEvent: Observable = of();\n private runAllSubscription: Subscription = new Subscription();\n\n unsubscribe$ = new Subject();\n\n // plotLoading = false;\n // processingPlots: {method: string, url: string, thresholdInput: number}[] = []\n\n // d3-plot variable\n links: any[] = [\n {\"Framework\": \"Vue\", \"Stars\": \"166443\", \"Released\": \"2014\"},\n {\"Framework\": \"React\", \"Stars\": \"150793\", \"Released\": \"2013\"},\n {\"Framework\": \"Angular\", \"Stars\": \"62342\", \"Released\": \"2016\"},\n {\"Framework\": \"Backbone\", \"Stars\": \"27647\", \"Released\": \"2010\"},\n {\"Framework\": \"Ember\", \"Stars\": \"21471\", \"Released\": \"2011\"},\n ];\n\n /**\n {\n : {\n : float, : float,\n : string, : string\n }\n }\n * */\n scatterPlotData: any = []\n /**\n There are 63 peptide_table columns (\"results.peptide_table.table_columns\") in\n https://api-nextgen-tools-dev.iedb.org/api/v1/results/d4b4a399-a0b4-4a88-b07d-03288ab9aef7\n\n\n Also, consider scales for each column,\n\n i.e. https://gitlab.lji.org/iedb/tools/tools-redesign/ar-redesign-prototype/-/issues/609#note_35183\n\n peptideA median binding/elution percentile = 1\n peptideA netmhcpan_el score =\n peptideA netmhcpan_el percentile = 1\n peptideA netmhcpan_ba IC50\n peptideA netmhcpan_ba percentile = 1\n ...\n peptideA comblib_sidney2008 IC50/SCORE = ?\n peptideA comblib_sidney2008 percentile = 1? such small numbers maybe make it 0.1?\n\n ************************************************\n\n DISPLAY_NAME value\n\n peptideA median binding/elution percentile\n peptideA netmhcpan_el score\n peptideA netmhcpan_el percentile\n peptideA netmhcpan_ba IC50\n peptideA netmhcpan_ba percentile\n peptideA ann IC50\n peptideA ann percentile\n peptideA smmpmbec IC50\n peptideA smmpmbec percentile\n peptideA smm IC50\n peptideA smm percentile\n peptideA comblib_sidney2008 IC50\n peptideA comblib_sidney2008 percentile\n peptideA mhcflurry IC50\n peptideA mhcflurry percentile\n peptideA mhcnp score\n peptideA mhcnp percentile\n peptideA immunogenicity score\n peptideA immunogenicity percentile\n\n { :\n [\n {\n : string,\n : string, : string,\n : float, : float,\n },\n {\n : string,\n : string, : string,\n : float, : float,\n },\n ],\n : [collection],\n : [collection],\n }\n\n EX:\n { median binding/elution percentile:\n [\n {\n allele: \"HLA-A*02:01\",\n : \"FLYNPLTRV\", : \"FLYNLLTRV\",\n : float, : float,\n },\n {\n : string,\n : \"MLGERLFPL\", : \"MLGEQLFPL\",\n : float, : float,\n },\n ],\n netmhcpan_el score: [collection],\n netmhcpan_el percentile: [collection],\n netmhcpan_ba IC50: [],\n netmhcpan_ba percentile: [],\n\n }\n\n Note: collection = # of alleles * greatest seq #\n so if ran w/ 27 alleles and 10 seq # (default), collection has 270 elements\n\n ************\n\n\n [\n {\n : string,\n : string,\n : string, : string,\n : float, : float,\n },\n ]\n\n EX:\n\n [\n {\n display_name: \"median binding/elution percentile\",\n allele: \"HLA-A*02:01\",\n peptidea: \"FLYNPLTRV\", peptideb: \"FLYNLLTRV\",\n valuea: float, valueb: float,\n },\n {\n display_name: \"median binding/elution percentile\",\n allele: \"HLA-A*02:02\",\n peptidea: \"FLYNPLTRV\", peptideb: \"FLYNLLTRV\",\n valuea: float, valueb: float,\n },\n ]\n * */\n scatterPlotData2: any = []\n scatterPlotAlleles: string[] = []\n scatterPlotDisplayNames: string[] = []\n\n selectedSeqNumPlots = '';\n selectedAllelePlots = '';\n selectedLengthPlots = ''\n sequenceNumbers = []\n\n sequence_table_order: any[] = [];\n sequence_table_columns: Columns[] | any;\n sequence_table: [(string | number)[]] = [[]]\n\n residue_table_order: any[] = [];\n residue_table_columns: Columns[] | any;\n residue_table: [(string | number)[]] = [[]]\n\n allele_distances_table_order: any[] = [];\n allele_distances_table_columns: Columns[] | any;\n allele_distances_table: [(string | number)[]] = [[]]\n\n peptide_table_order: any[] = [];\n peptide_table_columns: Columns[] | any;\n peptide_table: [(string | number)[]] = [[]]\n\n stages$: Observable = this._stateService.stages$;\n tools$: Observable = this._stateService.tools$;\n pipelineId$: Observable = this._stateService.pipelineId$;\n params$: Observable = this._stateService.params$;\n\n stages: Stage[] = [];\n tools: Tool[] = [];\n pipelineId = '';\n params!: PipelineParams;\n\n /** Form variables */\n pepcompForm!: UntypedFormGroup;\n\n /** sequence variables */\n synthesisDownloadLinks = {\n sequence_list_json_uri: '',\n sequence_list_fasta_uri: '',\n download_sequences: ''\n };\n\n swaggerUrl = `${environment['api_url']}/apidocs`\n\n filteredSequences: { name: string, sequences: string }[] = [];\n numOfAA: number = 0;\n numOfCharacters: number = 0;\n seqFormat: string = 'Unknown';\n\n /** API Call variables */\n runSetInterval: any;\n submitted = false;\n loading = false;\n getResultsClicked = true;\n pipelineLoading = false;\n tableStateSaving = false;\n saveState = false;\n\n defaultOrder: any[] = [];\n\n errorMessages: string[] = [];\n warningMessages: string[] = [];\n\n /** Alleles */\n searching = false;\n searchFailed = false;\n\n modalAlleles: Allele[] = [];\n modalOpen = false;\n\n /** sequence files */\n maxCharacters = 1000000;\n files: any[] = [];\n fileName = '';\n\n pipelineUrl: string = ''\n\n data: any\n\n inputChange = {\n /** Keeps track of inputChanges to highlight selected parameter table row*/\n input_sequence_text: false,\n alleles: false,\n predictors: false,\n table_state: false,\n }\n\n predictionOptions: {display_name: string, short_name: string, group: string, source: string, has_ic50: boolean}[] = [];\n basicProcessingPredictionOption: {display_name: string, short_name: string, group: string, source: string, has_ic50: boolean}[] = []\n processingOptions: {display_name: string, short_name: string, group: string, source: string, has_ic50: boolean}[] = [];\n\n mhciLoading: boolean = false;\n mhciPredictors: any[] = [];\n\n constructor(\n public alertService: AlertServiceService,\n private http: HttpClient,\n private fb: UntypedFormBuilder,\n private _alleleSearchService: AlleleSearchService,\n private _pipelineService: PipelineService,\n private _stateService: PipelineStateService,\n private rootFormGroup: FormGroupDirective, // pipeline component\n private route: ActivatedRoute,\n private router: Router,\n private titleService: Title,\n private location: Location,\n private sequenceParserService: SequenceParserService,\n private modalService: NgbModal,\n ) {\n }\n\n\n\n ngOnInit(): void {\n if (isDevMode()) {\n console.log('Development!');\n } else {\n console.log('Production!');\n }\n\n this.getMHCIList();\n // this.tCellForm = this.fb.group(this.initialControlConfig);\n this.pepcompForm = this.rootFormGroup.control.get(this.formGroupName) as UntypedFormGroup;\n // this.peptideLengthSliderOptions = Object.assign({}, this.peptideLengthSliderOptions, {disabled: this.breakPeptides});\n\n this.pipelineId$.pipe(takeUntil(this.unsubscribe$)).subscribe(value => {\n console.log(`pipelineId=${value}`);\n this.pipelineId = value;\n this.pipelineUrl = `${window.location.origin}/pipeline/${value}`;\n })\n this.stages$.pipe(takeUntil(this.unsubscribe$)).subscribe(value => {\n console.log(value);\n this.stages = value;\n this.errorMessages = this.stages[this.index]?.stage_messages!.errors\n this.warningMessages = this.stages[this.index]?.stage_messages!.warnings\n })\n this.tools$.pipe(takeUntil(this.unsubscribe$)).subscribe(value => {\n console.log('tools$');\n console.log(value);\n this.tools = value;\n this.submitted = this.tools[this.index]?.submitted\n\n const inputSequenceTextId = this.tools[this.index]?.input_data_uri?.input_sequence_text_id\n\n this.synthesisDownloadLinks.sequence_list_json_uri = `${environment['api_url']}/api/v1/sequence_list_json/${inputSequenceTextId}`\n this.synthesisDownloadLinks.sequence_list_fasta_uri = `${environment['api_url']}/api/v1/sequence_list_fasta/${inputSequenceTextId}`\n this.synthesisDownloadLinks.download_sequences = `${environment['api_url']}/api/v1/download_sequences/${inputSequenceTextId}`\n\n // this.loading = this.tools[this.index]?.loading\n if(!this.tools[this.index]?.loading) {\n this.loading = false;\n clearInterval(this.runSetInterval)\n }\n\n /** pipeline Loading */\n this.pipelineLoading = _.some(this.tools, {loading: true})\n // if(this.pipelineLoading) {\n // this.disableInputs();\n // } else {\n // this.enableInputs();\n // }\n console.log('pipelineLoading')\n console.log(this.pipelineLoading)\n\n })\n\n this.params$.pipe(takeUntil(this.unsubscribe$)).subscribe(value => {\n console.log(`params`);\n console.log(value);\n this.params = value;\n })\n\n this.eventsSubscription = this.events.subscribe(() => this.onRunMain());\n this.runAllSubscription = this.runAllEvent.subscribe(() => this.onRunAll())\n\n this.onChanges();\n\n if(this.pepcompForm.get('inputSequenceText')?.value) {\n this.sequenceParser(this.pepcompForm.get('inputSequenceText')?.value)\n }\n\n }\n\n ngOnDestroy() {\n clearInterval(this.runSetInterval);\n clearInterval(this._pipelineService.runSetInterval)\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n\n this.eventsSubscription.unsubscribe();\n this.runAllSubscription.unsubscribe();\n }\n\n ngAfterViewInit() {\n setTimeout(() => {\n const run = history.state?.run;\n // console.log(run);\n run && this.onRunMain();\n }, 0)\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if(changes.resultUrl?.currentValue) {\n console.log(changes.resultUrl.currentValue);\n console.log('ngOnChanges t-cell')\n this.loading = true;\n this.getResultsSetInterval(changes.resultUrl.currentValue);\n }\n }\n\n get selectedAlleleLabels() {\n return this.alleles.value.map(((o: { label: string; }) => o.label)).join(', ');\n }\n\n get selectedModalAlleleLabels() {\n return this.modalAlleles.map(((o: { label: string; }) => o.label)).join(', ');\n }\n\n get predictionModels() {\n return this.pepcompForm.get('predictionModels') as UntypedFormArray;\n }\n\n get alleles() {\n return this.pepcompForm.get('alleles') as UntypedFormArray;\n }\n\n get breakPeptides() : boolean {\n return this.pepcompForm.get('breakPeptides')?.value;\n }\n\n get inputSequenceText(){\n return this.pepcompForm.get('inputSequenceText')?.value\n }\n\n get peptideLength() {\n return this.pepcompForm.get('peptideLength')?.value;\n }\n\n get styleResultContainer(){\n return !this.loading && this.submitted ? 'none' : 'dotted';\n }\n\n setDefaultFormValues() {\n /** defaults - use Sars placeholders*/\n let seq: string = ''\n let all: string = ''\n if(environment.production || environment['name'] === 'DEV') { // prod or dev\n const {input_sequence_text, alleles } = pepCompSampleData; // correct examples\n seq = input_sequence_text\n all = alleles\n } else {\n const {input_sequence_text, alleles } = pipelineData;\n seq = input_sequence_text\n all = alleles\n }\n /** Sequences */\n let sequences = this.pepcompForm.value.inputSequenceText\n if(!sequences && this.index===0) {\n this._stateService.setInputSequenceText(seq);\n this.pepcompForm.controls.inputSequenceText.setValue(seq);\n }\n\n /** Alleles */\n const patchValues = (allele: string, synonym = '', score = null) => {\n /** patchValues - helper function */\n return this.fb.group({\n label: [allele],\n synonym: [synonym],\n score: [score]\n })\n }\n if(this.alleles.length===0) {\n _.forEach(all.split(','), (allele) => {\n this.alleles.push(patchValues(allele));\n })\n // this.alleleSearch!.nativeElement.value = alleles;\n }\n }\n\n onRun() {\n /**\n Update pipeline State\n *\n * */\n /** Reset global datatables search ext */\n $.fn.dataTable.ext.search = [];\n\n const stage_number = this.index + 1;\n /** run_stage_range */\n const run_stage_range: [number, number] = [stage_number, stage_number]\n /** default formValue */\n this.setDefaultFormValues()\n /** Sequences */\n let sequences = this.pepcompForm.value.inputSequenceText\n\n /** input parameters */\n const inputParameters = this._pipelineService.convertPepcompForm(this.pepcompForm)\n\n /** Table State */\n const { table_state } = this.stages[this.index];\n\n const newStage = {\n \"stage_display_name\": \"Peptide Variant Comparison\",\n \"stage_number\": stage_number,\n \"stage_type\": \"prediction\",\n \"tool_group\": \"peptide_variant_comparison\",\n \"input_sequence_text\": sequences,\n \"input_parameters\": inputParameters,\n \"table_state\": table_state\n }\n\n const params = {\n \"pipeline_id\": '',\n \"pipeline_title\": this.emailForm.controls['name'].value,\n \"email\": this.emailForm.controls['email'].value,\n \"run_stage_range\": run_stage_range,\n \"stages\": [\n newStage\n ]\n }\n\n /** set params */\n const initToolLoading = Object.assign(initPeptideBindingComparisonTool, {\n loading: true,\n submitted: false,\n appliedFilters: !_.isEmpty(table_state?.columns)\n })\n this._stateService.setParams(params);\n this._stateService.insertTool(initToolLoading, this.index);\n this._stateService.insertInputParametersToStage(inputParameters, this.index);\n\n // this._stateService.insertTableStateToStage({columns: {}}, this.index);\n\n this.postPipelineAPI(params);\n }\n\n onRun2(){\n const params = this.params;\n const stage_number = this.index + 1;\n const input_stage_number = this.index; // previous index\n\n /** run_stage_range */\n const run_stage_range: [number, number] = [stage_number, stage_number]\n /** default formValue */\n this.setDefaultFormValues()\n\n /** input parameters */\n const inputParameters = this._pipelineService.convertPepcompForm(this.pepcompForm)\n const initialStage = this.stages[this.index];\n\n /** Table State */\n const { table_state } = this.stages[this.index];\n\n const stage: Stage = {\n ...initialStage,\n result_url: undefined,\n stage_number: stage_number,\n input_stage_number: input_stage_number,\n input_parameters: inputParameters,\n table_state\n }\n\n // this.params.stages.push(stage);\n params.stages[this.index] = stage;\n params.run_stage_range = run_stage_range;\n params.pipeline_title = this.emailForm.controls['name'].value;\n params.email = this.emailForm.controls['email'].value;\n\n // console.log(params)\n\n /** set params */\n const loadingTool = Object.assign(initPeptideBindingComparisonTool, {\n loading: true,\n submitted: false,\n appliedFilters: !_.isEmpty(table_state?.columns)\n })\n\n this._stateService.setParams(params);\n this._stateService.insertTool(loadingTool, this.index);\n this._stateService.insertInputParametersToStage(inputParameters, this.index);\n\n this.postPipelineAPI(params);\n }\n\n getResultsSetInterval(result_url: string) {\n /** */\n this.getResultsClicked = true\n\n this.residue_table_order = [];\n this.residue_table_columns = null;\n this.residue_table = [[]]\n\n this.sequence_table = [[]]\n this.allele_distances_table = [[]]\n this.residue_table = [[]]\n this.peptide_table = [[]]\n // this.processingPlots = []\n\n this.resultUrl = result_url;\n console.log(result_url)\n this.inputChange = _.mapValues(this.inputChange, () => false);\n let increment = 0;\n const milliseconds = 3000;\n this.runSetInterval = setInterval(() => {\n this._pipelineService.getResults(`${result_url}?statusOnly=true`).subscribe(\n {\n next: resp => {\n console.log(resp);\n if (resp['status'] === 'error' || resp['errors']) {\n // this.errorMessages = resp['errors'];\n // this.warningMessages = resp['warnings'];\n this.submitted = false;\n this.loading = false;\n const prevTool = this.tools[this.index];\n const submittedTool = Object.assign(prevTool, {\n submitted: this.submitted,\n loading: this.loading,\n })\n this._stateService.insertTool(submittedTool, this.index);\n clearInterval(this.runSetInterval);\n this.enableInputs();\n }\n if (resp['data']['warnings']?.length) {\n // console.log(resp['warnings']);\n this.warningMessages = resp['data']['warnings'];\n }\n if (resp['data']['errors']?.length) {\n // console.log(resp['warnings']);\n this.errorMessages = resp['data']['errors'];\n }\n\n if (resp['status'] === 'done') {\n clearInterval(this.runSetInterval);\n\n this._pipelineService.getResults(result_url).subscribe(resp => {\n // clearInterval(this.runSetInterval);\n console.log(resp)\n this.defaultOrder = [[]]\n /** 1) Create Column */\n const data = resp['data']['results'];\n this.active = data[0].type // = 'peptide_table' // this.active = 'scatter_plots'\n _.forEach(data, table => {\n if (table.type === 'residue_table') {\n this.residue_table_columns = _.map(table.table_columns, (column, i) => {\n if (column.default_order && Number.isFinite(column.row_sort_priority)) { // set defaultOrder\n this.residue_table_order[column.row_sort_priority] = [i, column.default_order === \"ascending\" ? 'asc' : 'desc'];\n }\n column['title'] = `${column['display_name']}`; // required\n column['data'] = `${column['name']}`;\n let source = column['source'];\n\n column['filterKey'] = `${source}.${column.name}`\n\n // console.log(`source=${source}`);\n let tempSource = source.split('.')\n // console.log(tempSource);\n source = tempSource[tempSource.length - 1];\n // console.log(`source=${source}`);\n column['data'] = `${source}_${column['name']}`;\n /** remove `core` from name */\n // column['name'] = column['display_name'] ? column['display_name'] : column['name']\n column['value_limits'] = column['type'] === 'int' ? {\n minValue: NaN,\n maxValue: NaN,\n applied: false\n } : {\n possibleValues: [],\n textValue: null,\n selectedValues: [],\n applied: false\n }\n return column\n });\n // this.currentOrder = [...this.defaultOrder];\n if (this.residue_table_columns) {\n this.residue_table = table.table_data;\n }\n // console.log(this.residue_table_order);\n // console.log(this.residue_table_columns);\n // console.log(this.residue_table);\n }\n if (table.type === 'netmhcpan_allele_distance') {\n this.allele_distances_table_columns = _.map(table.table_columns, (column, i) => {\n if (column.default_order && Number.isFinite(column.row_sort_priority)) { // set defaultOrder\n this.allele_distances_table[column.row_sort_priority] = [i, column.default_order === \"ascending\" ? 'asc' : 'desc'];\n }\n column['title'] = `${column['display_name']}`; // required\n column['data'] = `${column['name']}`;\n let source = column['source'];\n\n column['filterKey'] = `${source}.${column.name}`\n\n // console.log(`source=${source}`);\n let tempSource = source.split('.')\n // console.log(tempSource);\n source = tempSource[tempSource.length - 1];\n // console.log(`source=${source}`);\n column['data'] = `${source}_${column['name']}`;\n /** remove `core` from name */\n // column['name'] = column['display_name'] ? column['display_name'] : column['name']\n // column['value_limits'] = column['type'] === 'int' ? {\n // minValue: NaN,\n // maxValue: NaN,\n // applied: false\n // } : {\n // possibleValues: [],\n // textValue: null,\n // selectedValues: [],\n // applied: false\n // }\n column['value_limits'] = column['value_limits'] ? this.setValueLimits(column) : undefined\n return column\n });\n // this.currentOrder = [...this.defaultOrder];\n if (this.allele_distances_table_columns) {\n this.allele_distances_table = table.table_data;\n }\n }\n if (table.type === 'peptide_table') {\n /** peptide_table_columns */\n let indexA: number = 0\n let indexB: number = 0\n this.peptide_table_columns = _.map(table.table_columns, (column, i: number) => {\n if (column.default_order && Number.isFinite(column.row_sort_priority)) { // set defaultOrder\n this.defaultOrder[column.row_sort_priority] = [i, column.default_order === \"ascending\" ? 'asc' : 'desc'];\n }\n column['title'] = `${column['display_name']}`; // required\n column['data'] = `${column['name']}`;\n let source = column['source'];\n\n column['filterKey'] = `${source}.${column.name}`\n\n // console.log(`source=${source}`);\n let tempSource = source.split('.')\n // console.log(tempSource);\n source = tempSource[tempSource.length - 1];\n // console.log(`source=${source}`);\n column['data'] = `${source}_${column['name']}`;\n /** remove `core` from name */\n // column['name'] = column['display_name'] ? column['display_name'] : column['name']\n\n column['value_limits'] = column['value_limits'] && this.setValueLimits(column)\n\n /** Check and find indeces for EL score */\n\n /** using name instead of display_name, but name is not unique */\n // indexA = column['name'] === 'score-peptidea' ? Number(i) : indexA\n // indexB = column['name'] === 'score-peptideb' ? Number(i) : indexB\n\n /** netmhcpan_el score */\n // indexA = column['display_name'] === 'peptideA netmhcpan_el score' ? Number(i) : indexA\n // indexB = column['display_name'] === 'peptideB netmhcpan_el score' ? Number(i) : indexB\n\n /** median binding/elution percentile */\n indexA = column['display_name'] === 'peptideA median binding/elution percentile' ? Number(i) : indexA\n indexB = column['display_name'] === 'peptideB median binding/elution percentile' ? Number(i) : indexB\n\n /** immunogenicity score */\n // indexA = column['display_name'] === 'peptideA immunogenicity score' ? Number(i) : indexA\n // indexB = column['display_name'] === 'peptideB immunogenicity score' ? Number(i) : indexB\n\n // /**\n // * 1. Needs to be passed index 5\n // * 2.\n // * */\n // if(i > 4) {\n // this.scatterPlotData2[column.display_name]\n // }\n\n // indexB = column['name'].includes(['score-peptideb']) ? Number(i) : indexB\n return column\n });\n this.peptide_table_order = [...this.defaultOrder];\n if (this.peptide_table_columns) {\n this.peptide_table = table.table_data;\n }\n // console.log(this.peptide_table_order);\n // console.log(this.peptide_table_columns);\n // console.log(this.peptide_table);\n /**\n scatterPlotData\n * = \n * 5 = allele\n *\n * indexA (9) = score-peptidea\n * indexB (14) = score-peptideb\n * */\n // TODO COMMENTED THIS OUT\n // _.forEach(table.table_data, (i) => {\n // // console.log(indexA)\n // // console.log(indexB)\n // if(this.scatterPlotData[i[5]]){ // already exists, push\n // this.scatterPlotData[i[5]].push({'peptidea': i[indexA], 'peptideb': i[indexB], 'sequenceA': i[1], 'sequenceB': i[2]})\n // } else { // else, create data and push alleles\n // this.scatterPlotData[i[5]] = [{'peptidea': i[indexA], 'peptideb': i[indexB], 'sequenceA': i[1], 'sequenceB': i[2]}]\n // this.scatterPlotAlleles.push(i[5])\n // }\n // })\n // console.error(this.scatterPlotData)\n }\n if (table.type === 'input_sequence_table') {\n this.sequence_table_columns = _.map(table.table_columns, (column, i) => {\n // if (column.default_order && Number.isFinite(column.row_sort_priority)) { // set defaultOrder\n // this.defaultOrder[column.row_sort_priority] = [i, column.default_order === \"ascending\" ? 'asc' : 'desc'];\n // }\n column['title'] = `${column['display_name']}`; // required\n column['data'] = `${column['name']}`;\n let source = column['source'];\n\n column['filterKey'] = `${source}.${column.name}`\n\n // console.log(`source=${source}`);\n let tempSource = source.split('.')\n // console.log(tempSource);\n source = tempSource[tempSource.length - 1];\n // console.log(`source=${source}`);\n column['data'] = `${source}_${column['name']}`;\n /** remove `core` from name */\n // column['name'] = column['display_name'] ? column['display_name'] : column['name']\n // column['value_limits'] = column['type'] === 'int' ? {\n // minValue: NaN,\n // maxValue: NaN,\n // applied: false\n // } : {\n // possibleValues: [],\n // textValue: null,\n // selectedValues: [],\n // applied: false\n // }\n\n column['value_limits'] = column['value_limits'] ? this.setValueLimits(column) : undefined\n // column['value_limits'] = column['value_limits'] && this.setValueLimits(column)\n return column\n\n\n\n });\n this.sequence_table_order = []\n if (this.sequence_table_columns) {\n\n this.sequence_table = table.table_data\n }\n }\n if (table.type === 'processing_plots') {\n const all_plots_uri = new URL(table.all_plots_uri)\n\n this.selectedSeqNumPlots = all_plots_uri.searchParams.get('sequence_number') || ''\n this.selectedLengthPlots = all_plots_uri.searchParams.get('length') || ''\n this.selectedAllelePlots = all_plots_uri.searchParams.get('allele') || ''\n\n this.sequenceNumbers = table.sequence_numbers\n\n // this.processingPlots = _.map(table.urls, (plot) => {\n //\n // const url = new URL(plot.url)\n // const thresholdInput = url.searchParams.get('threshold')\n //\n // return {\n // thresholdInput,\n // ...plot\n // }\n // })\n // this.processingPlots = table.urls\n // console.log(this.processingPlots)\n }\n\n })\n this._pipelineService.getResults(`${result_url}/plot_data`).subscribe(resp => {\n console.log(resp)\n this.scatterPlotData = resp['plot_data']\n console.log('HERE')\n console.log(this.scatterPlotData)\n // added here from TODO below\n this.submitted = true; this.loading = false;\n const prevTool = this.tools[this.index];\n console.log(prevTool)\n const submittedTCellPredictionTool = Object.assign(prevTool, {\n submitted: this.submitted,\n loading: this.loading,\n })\n this._stateService.insertTool(submittedTCellPredictionTool, this.index);\n })\n\n // TODO, added GET Result/plot_data get result because of how Yan implemented it now, not ideal...\n // this.submitted = true; this.loading = false;\n // const prevTool = this.tools[this.index];\n // console.log(prevTool)\n // const submittedTCellPredictionTool = Object.assign(prevTool, {\n // submitted: this.submitted,\n // loading: this.loading,\n // })\n // this._stateService.insertTool(submittedTCellPredictionTool, this.index);\n\n this.enableInputs();\n })\n }\n if (resp['status'] === 'canceled') {\n /** if status is canceled, then just stop loader **/\n this.submitted = false;\n this.loading = false;\n const prevTool = this.tools[this.index];\n console.log(prevTool)\n const submittedTCellPredictionTool = Object.assign(prevTool, {\n submitted: this.submitted,\n loading: this.loading,\n })\n this._stateService.insertTool(submittedTCellPredictionTool, this.index);\n clearInterval(this.runSetInterval);\n // console.log(data);\n this.enableInputs();\n // set error message\n // this.errorMessages = [`PIPELINE_ID=${this.pipelineId} w/ STATUS=${resp['status']}`]\n }\n else {\n this.getResultsClicked = false;\n console.log(`current status: ${resp['status']} - ${increment}`);\n increment += 1;\n }\n },\n error: error => {\n console.error(error);\n this.enableInputs();\n clearInterval(this.runSetInterval);\n this.loading = false;\n }\n }\n )\n }, milliseconds);\n }\n\n setValueLimits(column: Columns) : any {\n /* set value_limits (i.e. filters) for each column based on if type is a number/string */\n return column['type'] === 'int' || column['type'] === 'float' ? {\n ...column['value_limits'],\n minValue: NaN,\n maxValue: NaN,\n applied: false\n } : {\n // ...column['value_limits'],\n possibleValues: column['value_limits']['unique_values'],\n textValue: null,\n selectedValues: [],\n applied: false\n }\n }\n\n postPipelineAPI(params: PipelineParams, getResults: boolean = true) {\n this.disableInputs();\n if (getResults) {\n this.errorMessages = [];\n this.warningMessages = [];\n }\n this.loading = getResults; // true - defaults\n this.submitted = !getResults; // false - defaults\n this.tableStateSaving = !getResults\n\n this._pipelineService.postPipeline(params).subscribe(\n (resp) => {\n // Errors and Warnings\n if (resp['errors'] && resp['errors'].length) {\n console.log(resp);\n console.error(resp['errors']);\n this.errorMessages = resp['errors'];\n if (resp['warnings'].length) {\n console.log(resp['warnings']);\n this.warningMessages = resp['warnings'];\n }\n this.loading = false;\n this.submitted = true;\n const submittedTCellPredictionTool = Object.assign(initPeptideBindingComparisonTool, {\n submitted: false,\n loading: false,\n })\n this._stateService.insertTool(submittedTCellPredictionTool, this.index);\n this.enableInputs();\n return;\n }\n // Warnings\n if (resp['warnings'].length) {\n console.log(resp['warnings']);\n this.warningMessages = resp['warnings'];\n }\n\n const inputDataUri = {input_sequence_text_id: resp.input_sequence_text_id}\n this._stateService.insertInputDataUriToTool(inputDataUri, this.index)\n\n this._stateService.setPipelineId(resp.pipeline_id);\n this._stateService.setPipelineIdToParams(resp.pipeline_id);\n this._stateService.setPipelineSpecId(resp.pipeline_spec_id);\n /** Display email Modal if emailModalShow=true */\n this.location.replaceState(`pipeline/${resp.pipeline_id}`)\n // this.titleService.setTitle(`IEDB NG Tools Pipeline`);\n\n // this.location.replaceState(`pipeline/${resp.pipeline_id}`)\n // this.router.createUrlTree([`pipeline/${resp.pipeline_id}`])\n if (getResults) {\n const result_url = `${resp.results_uri}`;\n console.log(result_url);\n this.getResultsSetInterval(result_url);\n } else {\n this.inputChange.table_state = false;\n this.submitted = true;\n this.loading = false;\n this.tableStateSaving = false;\n this.enableInputs();\n }\n },\n (error) => {\n console.error(error);\n this.errorMessages.push(error.error);\n this.submitted = false;\n this.loading = false;\n const prevTool = this.tools[this.index];\n const submittedTool = Object.assign(prevTool, {\n submitted: this.submitted,\n loading: this.loading,\n })\n this._stateService.insertTool(submittedTool, this.index);\n clearInterval(this.runSetInterval);\n this.enableInputs();\n }\n )\n\n }\n\n onRunConfirm() {\n let indicies = _.range(this.index + 1, this.stages.length)\n let initTool: Tool;\n console.log(indicies);\n _.forEach(indicies, i => {\n initTool = this.tools[i];\n const unSubmittedTool = {\n ...initTool,\n loading: false,\n submitted: false,\n }\n this._stateService.insertTool(unSubmittedTool, i);\n })\n this.saveState ? this.onSaveTableStateMain() : this.onRun();\n }\n\n onRunAll() {\n this.setDefaultFormValues()\n this.emitIndex.emit(this.index);\n }\n\n onRunMain() {\n if(this.pepcompForm.invalid){\n\n this.alertService.add(`Input sequence text is too long. The maximum number of characters allowed is ${this.maxCharacters.toLocaleString()}\\nYour sequence contains ${this.inputSequenceText.length.toLocaleString()}`, 'alert-danger');\n this.open(this.alertModal)\n return;\n }\n\n const hasResult = _.find(this.tools.slice(this.index+1), (o) => o.submitted || o.loading)\n if(this.stages.length > 1 && hasResult) {\n this.open(this.confirmModal);\n } else {\n this.getResultsClicked = true;\n if(this.index===0) {\n this.onRun();\n } else {\n this.onRun2()\n }// There is no onRun2() because Peptide Variant Comparison can only be the initial tool\n }\n }\n\n\n onChanges(): void {\n /** PredictionModel sessionStorage */\n this.pepcompForm.get('predictionModels')?.valueChanges.subscribe(val => {\n // sessionStorage.setItem('predictionModels', JSON.stringify(val));\n this.inputChange.predictors = this.submitted\n });\n\n const sequenceFieldChange = this.pepcompForm.get('inputSequenceText')?.valueChanges.pipe(\n debounce(v => timer(1000)),\n );\n\n // this.pepcompForm.get('breakPeptides')?.valueChanges.subscribe(val => {\n // this.peptideLengthSliderOptions = Object.assign({}, this.peptideLengthSliderOptions, {disabled: val});\n // })\n\n sequenceFieldChange?.subscribe(val => {\n console.log('sequenceFieldChange')\n // sessionStorage.setItem('sequences', val);\n this.sequenceParser(val);\n this.inputChange.input_sequence_text = this.submitted;\n if (val === '') { // delete\n this.filteredSequences = [];\n this.numOfAA = 0;\n // this.alertService.clear();\n // this.myForm.patchValue({\n // inputFormat: 0\n // });\n }\n });\n }\n\n\n sequenceParser(val: string) {\n\n const firstChar = val[0];\n const firstLine = val.split('\\n')[0]\n console.log(firstLine)\n\n /** Named white space */\n let firstLineNumOfElements = 0\n let separator = ' '\n if(firstLine.includes(' ')){\n separator = ' '\n } else if (firstLine.includes('\\t')){\n separator = '\\t'\n } else if (firstLine.includes('\\s')){\n separator = '\\s'\n }\n firstLineNumOfElements = firstLine.split(separator).length\n console.log(firstLineNumOfElements)\n console.log(separator)\n\n const slicedVal = val.slice(0, this.maxCharacters)\n\n if(val.length > this.maxCharacters) {\n // Skip parsing\n } else if (firstChar === '>' && this.sequenceParserService.fastaValidate(val)) { // fasta\n this.seqFormat = this.sequenceParserService.seqFormat;\n this.numOfCharacters = slicedVal.length\n } else if ((firstChar === '{' || firstChar === '[') && IsJsonString(val)) { // json\n this.seqFormat = 'JSON'\n this.numOfCharacters = slicedVal.length\n } else if (firstLineNumOfElements === 2 && this.sequenceParserService.namedWhiteSpaceValidate(val, separator)) {\n // named white space\n this.seqFormat = this.sequenceParserService.seqFormat;\n this.numOfCharacters = slicedVal.length\n } else if (val.length > 3 && !val.includes('>') && this.sequenceParserService.unnamedWhiteSpaceValidate(val)) {\n // Unnamed\n this.seqFormat = this.sequenceParserService.seqFormat;\n this.numOfCharacters = slicedVal.length\n } else if (val === '') { // delete\n /**\n * Takes care of it up top - still need this if statement\n * */\n this.seqFormat = 'Unknown';\n this.numOfCharacters = 0\n } else { // error\n this.seqFormat = 'Error';\n this.numOfCharacters = 0\n }\n }\n\n /** Allele Modal Functions */\n open(content: any) {\n this.modalOpen = true;\n this.modalService.open(content, {\n ariaLabelledBy: 'modal-basic-title',\n size: 'lg',\n animation: true,\n backdrop: 'static'\n }).result.then((result) => {\n // this.closeResult = `Closed with: ${result}`;\n this.saveState = false;\n this.modalOpen = false;\n }, (reason) => {\n this.saveState = false;\n this.alleleSearch.nativeElement.focus();\n // this.closeResult = `Dismissed ${TCellPredictionComponent.getDismissReason(reason)}`;\n });\n }\n\n onOpenAlleleModal() {\n this.open(this.alleleModal)\n this.modalAlleles = [...this.alleles.value]\n console.log(this.modalAlleles)\n }\n\n dismissAlleleModal() {\n this.modalOpen = false;\n this.modalService.dismissAll()\n }\n\n onSubmitModalAlleles() {\n this.alleles.clear()\n _.forEach(this.modalAlleles, (selectedAllele) => {\n this.alleles.push(this.fb.group(selectedAllele));\n })\n this.inputChange.alleles = this.submitted;\n this.modalService.dismissAll()\n this.modalOpen = false;\n }\n\n generate27Alleles(input: any) {\n this.modalAlleles = []\n // this.alleles.clear()\n const { alleles } = alleleData;\n _.forEach(alleles.split(','), (allele) => {this.modalAlleles.push({label: allele, synonym: null, score: null})})\n input.value = this.selectedModalAlleleLabels;\n }\n\n enableInputs() {\n // this.tCellForm.enable({emitEvent: false});\n // this.peptideLengthSliderOptions = Object.assign({}, this.peptideLengthSliderOptions, {disabled: this.breakPeptides});\n }\n\n disableInputs() {\n // this.tCellForm.disable({emitEvent: false});\n // this.peptideLengthSliderOptions = Object.assign({}, this.peptideLengthSliderOptions, {disabled: true});\n }\n\n /** File Download/Upload*/\n uploadSequenceFile($event: any) {\n $event.preventDefault();\n /**\n * Used for 'Upload' button\n * */\n const {files} = $event.target;\n files && this.onFileDropped(files);\n }\n\n\n onCancel() {\n console.log(this.runSetInterval)\n clearInterval(this.runSetInterval);\n this.emitOnCancel.emit()\n\n this.inputChange.table_state = false;\n // this.submitted = false;\n const currentTool = this.tools[this.index];\n const unSubmittedTool = {\n ...currentTool,\n loading: false,\n submitted: false,\n appliedFilters: undefined\n }\n this._stateService.insertTool(unSubmittedTool, this.index);\n this.warningMessages = [];\n this.loading = false;\n this.tableStateSaving = false;\n this.enableInputs();\n }\n\n onReset() {\n this.alertService.clear();\n this.errorMessages = [];\n this.warningMessages = [];\n\n const oldSequence = this.stages[this.index].input_sequence_text\n const input_parameters = this.params.stages[this.index].input_parameters\n\n console.log(input_parameters)\n\n // sequences\n this.filteredSequences = [];\n this.numOfAA = 0;\n // order\n this.peptide_table_order = [];\n this.defaultOrder = [];\n // tCellForm values\n const peptideLength = [9, 10];\n this.pepcompForm.patchValue({\n inputSequenceText: '',\n peptideLength,\n }, {emitEvent: false});\n\n // selected alleles\n this.alleles.clear()\n\n // predictors\n const initPredictor = {\n type: 'binding',\n method: 'netmhcpan_el',\n }\n const pm = this.pepcompForm.controls.predictionModels as UntypedFormArray\n pm.clear({emitEvent: false})\n pm.push(this.fb.group(initPredictor), {emitEvent: false});\n\n this.enableInputs();\n\n if(this.submitted){\n this.inputChange = {\n ...this.inputChange,\n /** Keeps track of inputChanges to highlight selected parameter table row*/\n input_sequence_text: oldSequence !== '',\n alleles: !_.isEqual([], input_parameters.alleles),\n // lengths: !_.isEqual(peptideLength, input_parameters.peptide_length_range),\n predictors: !_.isEqual([initPredictor], input_parameters.predictors),\n }\n }\n }\n\n onFileDropped($event: any[]) {\n console.log($event);\n const file = $event[0];\n const fileSize = file.size / 1024; // in kB\n console.log(file.type);\n if (fileSize > 20000) {\n this.alertService.add('File Size is too big! (20mB max)', 'alert-danger');\n this.open(this.alertModal);\n }\n else {\n this.prepareSequenceFileList($event);\n }\n }\n\n prepareSequenceFileList(files: Array) {\n console.log(files);\n this.fileName = files[0].name;\n const reader = new FileReader();\n const myForm = this.pepcompForm;\n for (const item of files) {\n // console.log(item);\n reader.readAsText(item);\n reader.onload = () => {\n const val = reader.result?.toString() || '';\n console.log(val);\n const v = isASCII(val);\n console.log(v);\n if (v) {\n // myForm.patchValue({inputSequenceText: val.substring(0, this.maxCharacters)});\n const w = isMaxLength(val, this.maxCharacters)\n if (w) {\n myForm.patchValue({inputSequenceText: val});\n } else {\n this.alertService.add(`Sequence is too long - max Sequence length is ${this.maxCharacters.toLocaleString(\"en-US\")} characters`, 'alert-danger');\n this.open(this.alertModal);\n }\n // this.sequenceParser(val); // auto parser\n } else {\n this.alertService.add('Invalid file type.\\nValid file types are .txt, .fa, .fasta, .json, .faa,', 'alert-danger');\n this.open(this.alertModal);\n }\n };\n\n reader.onerror = () => {\n console.log(reader.error);\n };\n item.progress = 0;\n this.files.push(item);\n }\n }\n\n onSaveTableStateMain() {\n const hasResult = _.find(this.tools.slice(this.index+1), {submitted: true})\n if (hasResult) {\n this.saveState = true;\n this.open(this.confirmModal);\n } else {\n this.onSaveTableState();\n }\n }\n\n onSaveTableState() {\n const tool_group = 'mhci'\n\n const params = this.params\n // create colObj and params\n let colObj = columnListToObject(this.peptide_table_columns, tool_group)\n const stages = params.stages;\n const stageTemp = stages[this.index];\n stageTemp.table_state = [{table: 'peptide_table', columns: colObj}];\n stages[this.index] = stageTemp\n params.stages = stages;\n // run_stage_range\n const stage_number = this.index + 1;\n params.run_stage_range = [stage_number, stage_number];\n this._stateService.setParams(params);\n // appliedFilters\n let appliedFilters = !_.isEmpty(colObj);\n this._stateService.setToolAppliedFilters(appliedFilters, this.index)\n this.postPipelineAPI(params, false);\n this.saveState = false;\n }\n\n onFilterApplied() {\n this.inputChange.table_state = this.submitted;\n }\n\n onClearTableState() {\n this.peptide_table_columns = _.map(this.peptide_table_columns, (c) => {\n c.value_limits = c.type === 'int'? {\n minValue: NaN,\n maxValue: NaN,\n applied: false\n } :\n {\n possibleValues: [],\n textValue: null,\n selectedValues: [],\n applied: false\n }\n return c\n })\n this.inputChange.table_state = this.submitted;\n }\n\n /** Predictors Drag and Drop */\n\n dropPredictionModel(event: CdkDragDrop) {\n const {previousIndex, currentIndex} = event;\n\n const control = this.predictionModels.at(previousIndex);\n this.predictionModels.removeAt(previousIndex);\n this.predictionModels.insert(currentIndex, control);\n\n if (previousIndex !== currentIndex) {\n this.inputChange.predictors = this.submitted;\n }\n }\n\n setInputChangePredictors(value: boolean) {\n this.inputChange.predictors = this.submitted;\n }\n\n removePredictorByIndex(index: number) {\n this.predictionModels.removeAt(index);\n this.inputChange.predictors = this.submitted;\n }\n\n addpredictionModel() {\n this.predictionModels.push(this.mhcBindingFormGroup());\n this.inputChange.predictors = this.submitted;\n }\n\n addPmhcImmungencityFormGroup() {\n this.predictionModels.push(this.pmhcImmunogencityFormGroup());\n this.inputChange.predictors = this.submitted;\n }\n\n mhcBindingFormGroup(method = 'netmhcpan_el') {\n /**\n * Creates mhcBindingFormGroup using formBuilder\n *\n * Currently defaulted to 'netmhcpan_el'\n * */\n return this.fb.group({\n type: 'binding',\n method: this.fb.control(method),\n })\n }\n\n pmhcImmunogencityFormGroup(mask_choice = 'default', position_to_mask = '2,5,9') {\n /**\n * */\n return this.fb.group({\n type: 'immunogenicity',\n mask_choice: mask_choice,\n position_to_mask: this.fb.control(position_to_mask),\n })\n }\n\n /** Allele Search Functions */\n onAlleleSelect({e, input}: { e: any, input: any }) {\n e.preventDefault();\n const selectedAllele = e.item;\n let labels = _.map(this.alleles.value, (allele) => allele.label)\n if (!labels.includes(selectedAllele.label)) {\n this.alleles.push(this.fb.group(selectedAllele));\n }\n // sessionStorage.setItem('selectedAlleles', JSON.stringify(this.selectedAlleles));\n input.value = '';\n this.inputChange.alleles = this.submitted;\n }\n\n onAlleleSelectModal({e, input}: { e: any, input: any }) {\n e.preventDefault();\n const selectedAllele = e.item;\n let labels = _.map(this.modalAlleles, (allele) => allele.label)\n if (!labels.includes(selectedAllele.label)) {\n this.modalAlleles.push(selectedAllele);\n }\n input.value = '';\n }\n\n onBlurAlleleSelect(e: { preventDefault: () => void; }, input: { value: string; placeholder: string; }) {\n /**\n * Displays alleles in the text box when out of focus.\n * */\n e.preventDefault();\n input.value = '';\n input.placeholder = 'Ex. HLA-A*02:01'\n if (this.alleles.length) {\n const labels = _.map(this.alleles.value, (o) => {\n return o.label;\n });\n input.value = labels.join(', ');\n }\n }\n\n onBlurAlleleSelectModal(e: { preventDefault: () => void; }, input: { value: string; placeholder: string; }) {\n /**\n * Displays alleles in the text box when out of focus.\n * */\n e.preventDefault();\n input.placeholder = 'Ex. HLA-A*02:01'\n input.value = this.modalAlleles.length ? this.selectedModalAlleleLabels : ''\n }\n\n onAlleleClear(input: { value: string; }) {\n this.inputChange.alleles = this.submitted;\n this.alleles.clear()\n input.value = '';\n }\n\n onAlleleClearModal(input: { value: string; }) {\n this.modalAlleles = []\n input.value = ''\n }\n\n onAlleleDeselect(index: number) {\n this.alleles.removeAt(index)\n this.inputChange.alleles = this.submitted;\n // input.value = '';\n // if (this.alleles.length) {\n // input.value = this.selectedAlleleLabels\n // }\n }\n\n\n onAlleleDeselect2(index: number, input: { value: string }) {\n console.log(index)\n _.pullAt(this.modalAlleles, [index])\n const labels = this.modalAlleles.map(((o: { label: string; }) => o.label)).join(', ')\n input.value = this.modalAlleles.length ? labels : ''\n }\n\n search = (text$: Observable) =>\n text$.pipe(\n debounceTime(1000),\n distinctUntilChanged(),\n tap(() => this.searching = true),\n switchMap(term => {\n // console.log(term);\n return this._alleleSearchService.search(term).pipe(\n tap(() => this.searchFailed = false),\n catchError(() => {\n this.searchFailed = true;\n return of([]);\n }))\n }\n ),\n tap(() => this.searching = false)\n )\n\n resultFormatter = (result: any) => {\n /**\n * The function that converts an item from the result list to a string to display in the popup.\n * */\n return result.synonyms.length > 0 ? `${result.label} - (${result.synonyms})` : result.label;\n }\n\n inputFormatter(value: any): any {\n /**\n * The function that converts an item from the result list to a string to display in the field.\n * */\n if (value.label) {\n return `${value.label}`;\n }\n }\n\n onDownloadParameter() {\n // TODO change convert function\n const data = this._pipelineService.convertTCellForm(this.pepcompForm)\n\n const a = document.createElement('a');\n a.setAttribute('style', 'display:none;');\n document.body.appendChild(a);\n // const contentType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-16';\n // var blob = new Blob([csvData], { type: contentType });\n const blob = new Blob([JSON.stringify(data, null, 2)], ); // thx: http://stackoverflow.com/a/18925211\n a.href = window.URL.createObjectURL(blob);\n a.download = 'parameter.json';\n\n a.click();\n }\n\n\n /** Download Sequence File API calls\n * onDownloadJson()\n * onDownloadFasta() - removed\n * onDownloadOriginal()\n * */\n onDownloadJson() {\n onCsvDownloadAllClickedNew(this.synthesisDownloadLinks.sequence_list_json_uri, this.http, 'json');\n }\n\n // onDownloadFasta() {\n // onCsvDownloadAllClickedNew(this.synthesisDownloadLinks.sequence_list_fasta_uri, this.http, 'fasta');\n // }\n\n onDownloadOriginal() {\n onCsvDownloadAllClickedNew(this.synthesisDownloadLinks.download_sequences, this.http, 'txt');\n }\n\n getMHCIList() {\n this.mhciLoading = true;\n this.http.get(API_URL)\n .pipe().subscribe(\n resp => {\n // @ts-ignore\n this.mhciPredictors = resp['predictors'];\n // console.log(this.mhciPredictors);\n this.predictionOptions = _.filter(this.mhciPredictors, {'group': 'binding'});\n this.basicProcessingPredictionOption = _.filter(this.mhciPredictors, {'group': 'binding', 'has_ic50': true})\n this.processingOptions = _.filter(this.mhciPredictors, {'group': 'processing'});\n console.log(this.processingOptions)\n this.mhciLoading = false;\n }\n )\n }\n}\n","/**\n *\n * Used for vcf file validation\n * limit should be 5000\n * */\n\nexport function isMaxLines(str: string, maxNoLines: number)\n{\n return (String(str).match(/\\n/g) || '').length + 1 < maxNoLines\n}\n","
\n
\n

{{index + 1}}

\n
\n
\n\n
\n

Mutated Peptide Generator\n \"cedar\"\n

\n
\n \n \n \n \n
\n
\n\n \n \n
\n
Input Variant Calls (VCF)
\n\n
\n \n \n
\n
\n \n  \n
\n \n JSON\n \n VCF\n \n
\n
\n
\n  \n \n\n \n
\n Upload sequence file
(.vcf)\n
\n\n
\n \n  \n
\n
\n
\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
\n\n \n
\n
Prediction Parameters
\n
\n
\n
\n\n \n
\n
\n \n
\n\n
\n
\n \n \n Parameter changed since prediction.\n \n
\n\n
\n
\n\n
\n
\n \n
\n
\n \n \n Parameter changed since prediction.\n \n
\n\n
\n \n
\n
\n \n \n Parameter changed since prediction.\n \n
\n
\n \n
\n
\n \n \n Parameter changed since prediction.\n \n
\n
\n \n
\n
\n \n \n Parameter changed since prediction.\n \n
\n
\n\n
\n\n
\n\n
\n \n \n  \n \n \n \n \n
\n
\n \n \n \n
\n
\n \n \n \n\n
\n
\n
\n\n
\n\n
\n \n
\n

\n \n

\n
\n
\n \n
    \n
  1. {{message}}
  2. \n
\n
\n
\n
\n
\n \n
\n

\n \n

\n
\n
\n \n
    \n
  1. {{message}}
  2. \n
\n
\n
\n
\n
\n
\n\n
\n \n
\n\n
\n
\n Loading...\n
\n \n \n
\n\n
\n \n\n
\n
\n\n\n\n
\n

Validation Error(s)

\n \n
\n
\n \n
\n
\n \n \n
\n
\n\n\n\n
\n

Are you sure?

\n \n
\n
\n
\n

Re-running this step of the pipeline will delete all downstream results, including:

\n
    \n
  1. {{tool.name}}
  2. \n
\n

To access the current results, you can use this link

\n
\n \n

Applying these filters for input to the next stage will delete results from all downstream steps in\n this session, including:

\n
    \n
  1. {{tool.name}}
  2. \n
\n

To access the current results, you can use this link

\n
\n \n
\n \n \n
\n
\n
\n \n \n
\n
\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges, OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport {FormGroupDirective, UntypedFormArray, UntypedFormBuilder, UntypedFormGroup} from \"@angular/forms\";\nimport {HttpClient} from \"@angular/common/http\";\nimport {ActivatedRoute, Router} from \"@angular/router\";\nimport {Location} from \"@angular/common\";\nimport {Title} from \"@angular/platform-browser\";\n\nimport {NgbModal} from \"@ng-bootstrap/ng-bootstrap\";\nimport {Observable, of, Subject, Subscription} from \"rxjs\";\nimport {takeUntil} from \"rxjs/operators\";\nimport _ from \"lodash\";\nimport * as pako from 'pako';\n\nimport {ChangeContext, Options, CustomStepDefinition} from \"ngx-slider-v2\";\n\nimport Columns from \"../_global/Columns\";\nimport Stage from \"../_global/Stage\";\nimport Tool from \"../_global/Tool\";\nimport PipelineParams from \"../_global/PipelineParams\";\n\nimport {AlertServiceService} from \"../services/alert-service/alert-service.service\";\nimport {PipelineService} from \"../services/pipeline-service/pipeline.service\";\nimport {PipelineStateService} from \"../services/state-services/pipeline-state-service/pipeline-state.service\";\nimport {SequenceParserService} from \"../services/sequence-parser/sequence-parser.service\";\nimport {\n initMutatedPeptideGeneratorTool\n} from \"../services/state-services/default-stage-states\";\n\nimport {isASCII} from \"../util/string-helpers\";\nimport {isMaxLines} from \"../util/is-max-lines\";\nimport {columnListToObject} from \"../util/convert-columns\";\nimport onCsvDownloadAllClickedNew from \"../util/on-csv-download\";\n\nimport {environment} from \"../../environments/environment\";\n\n@Component({\n selector: 'app-mutated-peptide-generator',\n templateUrl: './mutated-peptide-generator.component.html',\n styleUrls: ['./mutated-peptide-generator.component.scss']\n})\nexport class MutatedPeptideGeneratorComponent implements OnInit, OnDestroy, AfterViewInit, OnChanges{\n\n /** Pipeline form */\n @Input() formGroupName!: string\n @Input() index!: number;\n @Input() resultUrl!: string | undefined;\n @Input() showEmailModal: boolean = false;\n\n @Input() emailForm!: UntypedFormGroup;\n @Output() openEmailModal = new EventEmitter();\n\n active = 'unique_peptide'\n\n @Output() emitIndex = new EventEmitter(); // used for run all\n @Output() emitOnCancel = new EventEmitter();\n\n // @ViewChild('alleleSearch') alleleSearch!: ElementRef;\n @ViewChild('alertModal') alertModal!: ElementRef;\n @ViewChild('confirmModal') confirmModal!: ElementRef;\n @ViewChild('alleleModal') alleleModal!: ElementRef;\n\n @Input() events: Observable = of();\n private eventsSubscription: Subscription = new Subscription();\n\n @Input() runAllEvent: Observable = of();\n private runAllSubscription: Subscription = new Subscription();\n\n unsubscribe$ = new Subject();\n\n modalOpen = false;\n\n /** API Call variables */\n runSetInterval: any;\n submitted = false;\n loading = false;\n getResultsClicked = true;\n pipelineLoading = false;\n tableStateSaving = false;\n saveState = false;\n\n defaultOrder: any[] = [];\n\n errorMessages: string[] = [];\n warningMessages: string[] = [];\n\n snp_table_order: any[] = []\n snp_table_columns: Columns[] | any;\n snp_table: [(string | number)[]] = [[]]\n\n unique_peptide_table_order: any[] = [];\n unique_peptide_table_columns: Columns[] | any;\n unique_peptide_table: [(string | number)[]] = [[]]\n\n peptide_table_order: any[] = [];\n peptide_table_columns: Columns[] | any;\n peptide_table: [(string | number)[]] = [[]]\n\n stages$: Observable = this._stateService.stages$;\n tools$: Observable = this._stateService.tools$;\n pipelineId$: Observable = this._stateService.pipelineId$;\n params$: Observable = this._stateService.params$;\n\n stages: Stage[] = [];\n tools: Tool[] = [];\n pipelineId = '';\n params!: PipelineParams;\n\n /** Form variables */\n mutgenForm!: UntypedFormGroup;\n defaultInputVcfText: string = ''\n\n sequencePlaceHolder = `Drag a SNPeff-annotated VCF file (max: 5,000 lines) into this box or click 'Run' to use this example:\n##fileformat=VCFv4.1\n##fileDate=20240220\n##source=freeBayes v0.9.21\n##reference=Homo_sapiens.GRCh38.dna.primary_assembly.fa\n##phasing=none\n##commandline=\"freebayes -f Homo_sapiens.GRCh38.dna.primary_assembly.fa --pooled-discrete --genotype-qualities --min-repeat-entropy 1 --min-alternate-fraction 0.02 --min-alternate-count 2 --region 1:0..248956422 output/syntheticX/syntheticX/syntheticX_normal.bam output/syntheticX/syntheticX_tumor.bam\"\n##INFO=\n##INFO=\n##INFO=\n##INFO=\n##INFO=\n##INFO=\n##INFO=\n##INFO=\n##INFO=\n##INFO=\n##INFO=\n##INFO=\n##INFO=\n##INFO=\n##INFO=\n##INFO=\n##INFO=\n##INFO=\n##INFO=\n##INFO=\n##INFO=\n##INFO=\n##INFO=\n##INFO=\n##INFO=\n##INFO=\n##INFO=\n##INFO=\n##INFO=\n##INFO=\n##INFO=\n##INFO=\n##INFO=\n##INFO=\n##INFO=\n##INFO=\n##INFO=\n##INFO=\n##INFO=\n##INFO=\n##INFO=\n##FORMAT=\n##FORMAT=\n##FORMAT=\n##FORMAT=\n##FORMAT=\n##FORMAT=\n##FORMAT=\n##FORMAT=\n##INFO=\n##SnpEffVersion=\"5.2c (build 2024-04-09 12:24), by Pablo Cingolani\"\n##SnpEffCmd=\"SnpEff -noStats -cancer -cancerSamples in.samples GRCh38.86 \"\n##INFO=\n##INFO=\n##INFO=\n#CHROM\\tPOS\\tID\\tREF\\tALT\\tQUAL\\tFILTER\\tINFO\\tFORMAT\\tsyntheticX_normal\\tsyntheticX_tumor\n19\\t36007191\\t.\\tC\\tA\\t24.8697\\tPASS\\tSSC=8.6069;TYPE=snp;ANN=A|synonymous_variant|LOW|SYNE4|ENSG00000181392|transcript|ENST00000490730.1|protein_coding|3/8|c.357G>T|p.Arg119Arg|469/1175|357/1063|119/353||WARNING_TRANSCRIPT_INCOMPLETE,A|synonymous_variant|LOW|SYNE4|ENSG00000181392|transcript|ENST00000324444.7|protein_coding|3/8|c.357G>T|p.Arg119Arg|469/1354|357/1215|119/404||,A|downstream_gene_variant|MODIFIER|ALKBH6|ENSG00000239382|transcript|ENST00000378875.7|protein_coding||c.*2099G>T|||||1933|,A|downstream_gene_variant|MODIFIER|ALKBH6|ENSG00000239382|transcript|ENST00000490986.5|nonsense_mediated_decay||n.*2509G>T|||||1930|,A|downstream_gene_variant|MODIFIER|ALKBH6|ENSG00000239382|transcript|ENST00000252984.11|protein_coding||c.*2099G>T|||||2014|,A|downstream_gene_variant|MODIFIER|ALKBH6|ENSG00000239382|transcript|ENST00000392183.7|retained_intron||n.*3099G>T|||||3099|,A|downstream_gene_variant|MODIFIER|ALKBH6|ENSG00000239382|transcript|ENST00000466196.5|retained_intron||n.*3547G>T|||||3547|,A|downstream_gene_variant|MODIFIER|AC002116.8|ENSG00000248101|transcript|ENST00000473572.2|retained_intron||n.*1447G>T|||||1447|,A|downstream_gene_variant|MODIFIER|ALKBH6|ENSG00000239382|transcript|ENST00000495116.6|processed_transcript||n.*1929G>T|||||1929|,A|downstream_gene_variant|MODIFIER|ALKBH6|ENSG00000239382|transcript|ENST00000471323.1|retained_intron||n.*1931G>T|||||1931|,A|downstream_gene_variant|MODIFIER|ALKBH6|ENSG00000239382|transcript|ENST00000475223.5|retained_intron||n.*3547G>T|||||3547|,A|downstream_gene_variant|MODIFIER|ALKBH6|ENSG00000239382|transcript|ENST00000486389.5|protein_coding||c.*2376G>T|||||1933|,A|downstream_gene_variant|MODIFIER|ALKBH6|ENSG00000239382|transcript|ENST00000462793.5|retained_intron||n.*2270G>T|||||2270|,A|downstream_gene_variant|MODIFIER|ALKBH6|ENSG00000239382|transcript|ENST00000590666.5|retained_intron||n.*3989G>T|||||3989|,A|downstream_gene_variant|MODIFIER|ALKBH6|ENSG00000239382|transcript|ENST00000461668.5|nonsense_mediated_decay||n.*2581G>T|||||1930|,A|downstream_gene_variant|MODIFIER|ALKBH6|ENSG00000239382|transcript|ENST00000490483.5|nonsense_mediated_decay||n.*2509G>T|||||1930|,A|downstream_gene_variant|MODIFIER|ALKBH6|ENSG00000239382|transcript|ENST00000485128.5|protein_coding||c.*2376G>T|||||1984|,A|downstream_gene_variant|MODIFIER|ALKBH6|ENSG00000239382|transcript|ENST00000497999.1|nonsense_mediated_decay||n.*2598G>T|||||2091|,A|downstream_gene_variant|MODIFIER|ALKBH6|ENSG00000239382|transcript|ENST00000468004.5|retained_intron||n.*3353G>T|||||3353|,A|downstream_gene_variant|MODIFIER|ALKBH6|ENSG00000239382|transcript|ENST00000481257.5|nonsense_mediated_decay||n.*3846G>T|||||3445|,A|downstream_gene_variant|MODIFIER|ALKBH6|ENSG00000239382|transcript|ENST00000592353.1|retained_intron||n.*3847G>T|||||3847|,A|intron_variant|MODIFIER|SYNE4|ENSG00000181392|transcript|ENST00000340477.9|protein_coding|2/5|c.280-520G>T||||||,A|intron_variant|MODIFIER|SYNE4|ENSG00000181392|transcript|ENST00000505054.2|retained_intron|1/2|n.394+1026G>T||||||,A|intron_variant|MODIFIER|SYNE4|ENSG00000181392|transcript|ENST00000397428.7|protein_coding|1/2|c.39+1363G>T||||||WARNING_TRANSCRIPT_INCOMPLETE,A|intron_variant|MODIFIER|SYNE4|ENSG00000181392|transcript|ENST00000503121.5|protein_coding|2/2|c.240+1026G>T||||||WARNING_TRANSCRIPT_INCOMPLETE,A|non_coding_transcript_exon_variant|MODIFIER|SYNE4|ENSG00000181392|transcript|ENST00000465425.1|retained_intron|3/7|n.469G>T||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:39.9452:8:8:320:0:0:0,-2.40824,-29.1663\\t0/1:24.8697:4:2:82:2:78:-6.19866,0,-6.57556\n10\\t101131861\\t.\\tT\\tC\\t0.0\\tPASS\\tSSC=176.441;TYPE=snp;ANN=C|missense_variant|MODERATE|TLX1|ENSG00000107807|transcript|ENST00000370196.10|protein_coding|1/3|c.320T>C|p.Leu107Ser|1357/2906|320/993|107/330||,C|missense_variant|MODERATE|TLX1|ENSG00000107807|transcript|ENST00000467928.2|protein_coding|1/3|c.320T>C|p.Leu107Ser|558/1838|320/774|107/257||,C|missense_variant|MODERATE|TLX1|ENSG00000107807|transcript|ENST00000463716.3|protein_coding|1/2|c.134T>C|p.Leu45Ser|134/469|134/469|45/155||WARNING_TRANSCRIPT_INCOMPLETE,C|upstream_gene_variant|MODIFIER|TLX1NB|ENSG00000236311|transcript|ENST00000445873.5|processed_transcript||n.-735A>G|||||735|,C|upstream_gene_variant|MODIFIER|TLX1NB|ENSG00000236311|transcript|ENST00000425505.1|processed_transcript||n.-735A>G|||||735|,C|upstream_gene_variant|MODIFIER|TLX1|ENSG00000107807|transcript|ENST00000533319.1|processed_transcript||n.-921T>C|||||921|,C|upstream_gene_variant|MODIFIER|TLX1|ENSG00000107807|transcript|ENST00000525019.1|processed_transcript||n.-2453T>C|||||2453|\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:658:657:25828:1:12:0,-196.878,-2320.96\\t0/0:99:97:94:3642:3:94:0,-20.4367,-319.031\n22\\t25351843\\t.\\tTG\\tT\\t0.0\\tPASS\\tSSC=153.764;TYPE=del;OLD_VARIANT=22:25351843:TGGGGCGT/TGGGCGT;ANN=T|frameshift_variant|HIGH|LRP5L|ENSG00000100068|transcript|ENST00000402785.2|protein_coding|4/4|c.714delC|p.Thr239fs|811/1193|714/759|238/252||,T|frameshift_variant|HIGH|LRP5L|ENSG00000100068|transcript|ENST00000610821.4|protein_coding|4/4|c.714delC|p.Thr239fs|3179/3602|714/759|238/252||,T|frameshift_variant|HIGH|LRP5L|ENSG00000100068|transcript|ENST00000402859.6|protein_coding|6/6|c.714delC|p.Thr239fs|1238/1661|714/759|238/252||,T|3_prime_UTR_variant|MODIFIER|LRP5L|ENSG00000100068|transcript|ENST00000474163.1|nonsense_mediated_decay|4/4|n.*412delC|||||5547|,T|upstream_gene_variant|MODIFIER|CTA-246H3.11|ENSG00000231466|transcript|ENST00000434827.1|processed_pseudogene||n.-1522delC|||||1522|,T|downstream_gene_variant|MODIFIER|LRP5L|ENSG00000100068|transcript|ENST00000484509.1|retained_intron||n.*2913delC|||||2913|,T|intron_variant|MODIFIER|LRP5L|ENSG00000100068|transcript|ENST00000444995.7|protein_coding|6/6|c.656-30delC||||||,T|non_coding_transcript_exon_variant|MODIFIER|LRP5L|ENSG00000100068|transcript|ENST00000467672.5|retained_intron|4/4|n.3179delC||||||,T|non_coding_transcript_exon_variant|MODIFIER|LRP5L|ENSG00000100068|transcript|ENST00000474163.1|nonsense_mediated_decay|4/4|n.*412delC||||||;LOF=(LRP5L|ENSG00000100068|8|0.38)\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:504:501:19784:0:0:0,-178.21,-1896.78\\t0/0:99:84:81:3200:2:82:0,-24.446,-284.026\n17\\t7024470\\t.\\tACCA\\tCCCC\\t1.78519E-4\\tPASS\\tSSC=0.42928;TYPE=complex;ANN=CCCC|synonymous_variant|LOW|BCL6B|ENSG00000161940|transcript|ENST00000293805.9|protein_coding|4/9|c.471_474delACCAinsCCCC|p.159|563/3555|471/1440|157/479||,CCCC|upstream_gene_variant|MODIFIER|BCL6B|ENSG00000161940|transcript|ENST00000571729.1|retained_intron||n.-2321_-2318delACCAinsCCCC|||||2321|,CCCC|upstream_gene_variant|MODIFIER|MIR497HG|ENSG00000267532|transcript|ENST00000443997.1|antisense||n.-4843_-4840delTGGTinsGGGG|||||4840|,CCCC|upstream_gene_variant|MODIFIER|BCL6B|ENSG00000161940|transcript|ENST00000537931.2|protein_coding||c.-2031_-2028delACCAinsCCCC|||||2031|WARNING_TRANSCRIPT_NO_START_CODON,CCCC|upstream_gene_variant|MODIFIER|MIR497HG|ENSG00000267532|transcript|ENST00000572453.1|antisense||n.-4814_-4811delTGGTinsGGGG|||||4811|,CCCC|downstream_gene_variant|MODIFIER|BCL6B|ENSG00000161940|transcript|ENST00000573503.1|protein_coding||c.*233_*236delACCAinsCCCC|||||233|WARNING_TRANSCRIPT_INCOMPLETE,CCCC|downstream_gene_variant|MODIFIER|BCL6B|ENSG00000161940|transcript|ENST00000576705.1|protein_coding||c.*166_*169delACCAinsCCCC|||||166|WARNING_TRANSCRIPT_INCOMPLETE,CCCC|non_coding_transcript_exon_variant|MODIFIER|BCL6B|ENSG00000161940|transcript|ENST00000572216.1|processed_transcript|4/4|n.379_382delACCAinsCCCC||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:58.2077:12:10:324:2:24:0,-1.33237,-27.1817\\t0/0:44.0237:3:3:119:0:0:0,-0.90309,-11.095\n22\\t42128903\\t.\\tT\\tA\\t9.57029E-16\\tPASS\\tSSC=171.425;TYPE=snp;ANN=A|missense_variant|MODERATE|CYP2D6|ENSG00000100197|transcript|ENST00000360608.9|protein_coding|4/9|c.547A>T|p.Ser183Cys|662/1684|547/1494|183/497||,A|missense_variant|MODERATE|CYP2D6|ENSG00000100197|transcript|ENST00000359033.4|protein_coding|3/8|c.394A>T|p.Ser132Cys|468/1433|394/1341|132/446||,A|missense_variant|MODERATE|CYP2D6|ENSG00000100197|transcript|ENST00000389970.7|protein_coding|4/10|c.481A>T|p.Ser161Cys|637/1714|481/1485|161/494||,A|upstream_gene_variant|MODIFIER|NDUFA6-AS1|ENSG00000237037|transcript|ENST00000617009.4|antisense||n.-3128T>A|||||3128|,A|upstream_gene_variant|MODIFIER|NDUFA6-AS1|ENSG00000237037|transcript|ENST00000621190.1|antisense||n.-3128T>A|||||3128|,A|upstream_gene_variant|MODIFIER|RP4-669P10.19|ENSG00000227370|transcript|ENST00000417586.1|processed_pseudogene||n.-3640T>A|||||3640|,A|downstream_gene_variant|MODIFIER|NDUFA6-AS1|ENSG00000237037|transcript|ENST00000451451.1|antisense||n.*3875T>A|||||3875|,A|downstream_gene_variant|MODIFIER|NDUFA6-AS1|ENSG00000237037|transcript|ENST00000417327.5|antisense||n.*3554T>A|||||3554|,A|downstream_gene_variant|MODIFIER|NDUFA6-AS1|ENSG00000237037|transcript|ENST00000536447.6|antisense||n.*3944T>A|||||3944|,A|downstream_gene_variant|MODIFIER|NDUFA6-AS1|ENSG00000237037|transcript|ENST00000595777.5|antisense||n.*3944T>A|||||3944|,A|downstream_gene_variant|MODIFIER|NDUFA6-AS1|ENSG00000237037|transcript|ENST00000600968.5|antisense||n.*3944T>A|||||3944|,A|downstream_gene_variant|MODIFIER|NDUFA6-AS1|ENSG00000237037|transcript|ENST00000434834.5|antisense||n.*3901T>A|||||3901|,A|downstream_gene_variant|MODIFIER|NDUFA6-AS1|ENSG00000237037|transcript|ENST00000610250.5|antisense||n.*4004T>A|||||4004|,A|downstream_gene_variant|MODIFIER|NDUFA6-AS1|ENSG00000237037|transcript|ENST00000547929.6|retained_intron||n.*4004T>A|||||4004|,A|downstream_gene_variant|MODIFIER|NDUFA6-AS1|ENSG00000237037|transcript|ENST00000617396.4|antisense||n.*4341T>A|||||4341|,A|downstream_gene_variant|MODIFIER|NDUFA6-AS1|ENSG00000237037|transcript|ENST00000609499.5|retained_intron||n.*4004T>A|||||4004|,A|downstream_gene_variant|MODIFIER|NDUFA6-AS1|ENSG00000237037|transcript|ENST00000609833.5|retained_intron||n.*4004T>A|||||4004|,A|downstream_gene_variant|MODIFIER|NDUFA6-AS1|ENSG00000237037|transcript|ENST00000608643.5|retained_intron||n.*4019T>A|||||4019|,A|intron_variant|MODIFIER|NDUFA6-AS1|ENSG00000237037|transcript|ENST00000439129.5|antisense|5/6|n.1718+3496T>A||||||,A|non_coding_transcript_exon_variant|MODIFIER|CYP2D6|ENSG00000100197|transcript|ENST00000360124.9|nonsense_mediated_decay|2/7|n.214A>T||||||,A|non_coding_transcript_exon_variant|MODIFIER|CYP2D6|ENSG00000100197|transcript|ENST00000488442.1|retained_intron|3/8|n.1271A>T||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:646:646:24929:0:0:0,-194.465,-2195.25\\t0/0:99:92:90:3541:2:49:0,-23.04,-304.263\n6\\t160064455\\t.\\tC\\tCG\\t1.09451E-13\\tPASS\\tSSC=226.209;TYPE=ins;OLD_VARIANT=6:160064455:CGGGGGGGGACA/CGGGGGGGGGACA;ANN=CG|frameshift_variant|HIGH|IGF2R|ENSG00000197081|transcript|ENST00000356956.5|protein_coding|28/48|c.3949dupG|p.Asp1317fs|4098/14044|3950/7476|1317/2491||INFO_REALIGN_3_PRIME;LOF=(IGF2R|ENSG00000197081|5|0.20)\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:1057:1004:39425:21:778:0,-326.753,-3525.51\\t0/0:99:352:327:12912:11:406:0,-100.544,-1130.26\n9\\t70286221\\t.\\tT\\tC\\t0.0\\tPASS\\tSSC=160.285;TYPE=snp;ANN=C|missense_variant|MODERATE|SMC5|ENSG00000198887|transcript|ENST00000361138.6|protein_coding|8/25|c.1003T>C|p.Ser335Pro|1120/5980|1003/3306|335/1101||,C|non_coding_transcript_exon_variant|MODIFIER|SMC5|ENSG00000198887|transcript|ENST00000618375.1|processed_transcript|2/3|n.134T>C||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:1133:1089:36523:24:308:0,-307.33,-3255.79\\t0/0:99:537:514:17203:10:120:0,-147.045,-1535.38\n1\\t227732408\\t.\\tG\\tT\\t0.0\\tPASS\\tSSC=135.632;TYPE=snp;ANN=T|missense_variant|MODERATE|JMJD4|ENSG00000081692|transcript|ENST00000366758.7|protein_coding|6/6|c.1376C>A|p.Ala459Asp|1376/2595|1376/1392|459/463||,T|missense_variant|MODERATE|JMJD4|ENSG00000081692|transcript|ENST00000615711.4|protein_coding|6/6|c.1376C>A|p.Ala459Asp|1376/2591|1376/1392|459/463||,T|missense_variant|MODERATE|JMJD4|ENSG00000081692|transcript|ENST00000620518.4|protein_coding|6/6|c.1238C>A|p.Ala413Asp|1248/2432|1238/1254|413/417||,T|missense_variant|MODERATE|JMJD4|ENSG00000081692|transcript|ENST00000438896.2|protein_coding|6/6|c.1328C>A|p.Ala443Asp|1328/2502|1328/1344|443/447||,T|upstream_gene_variant|MODIFIER|SNAP47|ENSG00000143740|transcript|ENST00000315781.9|protein_coding||c.-3002G>T|||||2588|,T|upstream_gene_variant|MODIFIER|SNAP47|ENSG00000143740|transcript|ENST00000366759.8|protein_coding||c.-3002G>T|||||2588|,T|upstream_gene_variant|MODIFIER|SNAP47|ENSG00000143740|transcript|ENST00000418653.5|protein_coding||c.-3024G>T|||||3023|WARNING_TRANSCRIPT_NO_START_CODON,T|upstream_gene_variant|MODIFIER|SNAP47|ENSG00000143740|transcript|ENST00000617596.4|protein_coding||c.-3137G>T|||||3045|,T|upstream_gene_variant|MODIFIER|SNAP47|ENSG00000143740|transcript|ENST00000426344.5|protein_coding||c.-3029G>T|||||3028|WARNING_TRANSCRIPT_NO_START_CODON,T|upstream_gene_variant|MODIFIER|SNAP47|ENSG00000143740|transcript|ENST00000470038.1|processed_transcript||n.-3765G>T|||||3765|,T|downstream_gene_variant|MODIFIER|JMJD4|ENSG00000081692|transcript|ENST00000480590.1|retained_intron||n.*740C>A|||||740|,T|downstream_gene_variant|MODIFIER|JMJD4|ENSG00000081692|transcript|ENST00000465251.1|retained_intron||n.*1211C>A|||||1211|,T|intron_variant|MODIFIER|SNAP47|ENSG00000143740|transcript|ENST00000366760.5|protein_coding|1/3|c.-95+3622G>T||||||,T|intron_variant|MODIFIER|SNAP47|ENSG00000143740|transcript|ENST00000475930.1|processed_transcript|2/2|n.297+696G>T||||||,T|intron_variant|MODIFIER|SNAP47|ENSG00000143740|transcript|ENST00000491439.1|processed_transcript|2/2|n.243+661G>T||||||,T|non_coding_transcript_exon_variant|MODIFIER|SNAP47|ENSG00000143740|transcript|ENST00000480897.5|processed_transcript|3/3|n.431G>T||||||,T|non_coding_transcript_exon_variant|MODIFIER|SNAP47|ENSG00000143740|transcript|ENST00000480265.1|processed_transcript|2/2|n.258G>T||||||,T|non_coding_transcript_exon_variant|MODIFIER|JMJD4|ENSG00000081692|transcript|ENST00000485807.1|retained_intron|2/2|n.1766C>A||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:527:526:20653:1:37:0,-154.945,-1853.29\\t0/0:99:90:88:3530:2:82:0,-19.313,-309.931\n3\\t123722214\\t.\\tG\\tC\\t5.93688E-15\\tPASS\\tSSC=149.583;TYPE=snp;ANN=C|missense_variant|MODERATE|MYLK|ENSG00000065534|transcript|ENST00000475616.5|protein_coding|10/31|c.1718C>G|p.Ala573Gly|1718/5745|1718/5745|573/1914||,C|missense_variant|MODERATE|MYLK|ENSG00000065534|transcript|ENST00000360304.7|protein_coding|12/33|c.1718C>G|p.Ala573Gly|1904/7738|1718/5745|573/1914||,C|missense_variant|MODERATE|MYLK|ENSG00000065534|transcript|ENST00000360772.7|protein_coding|14/34|c.1718C>G|p.Ala573Gly|2097/10027|1718/5592|573/1863||,C|missense_variant|MODERATE|MYLK|ENSG00000065534|transcript|ENST00000354792.9|protein_coding|11/32|c.1511C>G|p.Ala504Gly|1697/7531|1511/5538|504/1845||,C|missense_variant|MODERATE|MYLK|ENSG00000065534|transcript|ENST00000359169.5|protein_coding|12/32|c.1718C>G|p.Ala573Gly|1904/7585|1718/5592|573/1863||,C|missense_variant|MODERATE|MYLK|ENSG00000065534|transcript|ENST00000346322.9|protein_coding|12/33|c.1511C>G|p.Ala504Gly|1805/5892|1511/5538|504/1845||,C|3_prime_UTR_variant|MODIFIER|MYLK|ENSG00000065534|transcript|ENST00000464489.5|nonsense_mediated_decay|12/33|n.*1297C>G|||||17740|,C|non_coding_transcript_exon_variant|MODIFIER|MYLK|ENSG00000065534|transcript|ENST00000464489.5|nonsense_mediated_decay|12/33|n.*1297C>G||||||,C|non_coding_transcript_exon_variant|MODIFIER|MYLK|ENSG00000065534|transcript|ENST00000514623.1|retained_intron|3/4|n.2286C>G||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:554:553:22058:0:0:0,-166.47,-1971.73\\t0/0:99:82:79:3198:2:82:0,-16.8869,-279.96\n19\\t643332\\t.\\tC\\tG\\t3.4716E-14\\tPASS\\tSSC=183.092;TYPE=snp;ANN=G|stop_gained|HIGH|FGF22|ENSG00000070388|transcript|ENST00000215530.6|protein_coding|2/3|c.312C>G|p.Tyr104*|343/1311|312/513|104/170||,G|stop_gained|HIGH|FGF22|ENSG00000070388|transcript|ENST00000586042.6|protein_coding|2/3|c.312C>G|p.Tyr104*|343/1288|312/498|104/165||,G|downstream_gene_variant|MODIFIER|RNF126|ENSG00000070423|transcript|ENST00000292363.9|protein_coding||c.*4796G>C|||||4194|,G|downstream_gene_variant|MODIFIER|RNF126|ENSG00000070423|transcript|ENST00000586749.1|retained_intron||n.*4198G>C|||||4198|,G|downstream_gene_variant|MODIFIER|RNF126|ENSG00000070423|transcript|ENST00000589762.5|protein_coding||c.*4800G>C|||||4800|WARNING_TRANSCRIPT_INCOMPLETE,G|downstream_gene_variant|MODIFIER|RNF126|ENSG00000070423|transcript|ENST00000605891.5|nonsense_mediated_decay||n.*5567G>C|||||4194|,G|downstream_gene_variant|MODIFIER|RNF126|ENSG00000070423|transcript|ENST00000590885.6|processed_transcript||n.*4197G>C|||||4197|,G|downstream_gene_variant|MODIFIER|FGF22|ENSG00000070388|transcript|ENST00000591390.1|retained_intron||n.*1742C>G|||||1742|\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:855:815:29588:39:478:0,-214.057,-2617.14\\t0/0:99:121:115:4120:5:60:0,-30.9648,-365.175\n3\\t160425010\\t.\\tA\\tC\\t0.0\\tPASS\\tSSC=162.974;TYPE=snp;ANN=C|synonymous_variant|LOW|SMC4|ENSG00000113810|transcript|ENST00000344722.5|protein_coding|15/23|c.2469A>C|p.Ala823Ala|2814/5356|2469/3867|823/1288||,C|synonymous_variant|LOW|SMC4|ENSG00000113810|transcript|ENST00000357388.7|protein_coding|16/24|c.2469A>C|p.Ala823Ala|2920/5471|2469/3867|823/1288||,C|synonymous_variant|LOW|SMC4|ENSG00000113810|transcript|ENST00000469762.5|protein_coding|16/24|c.2394A>C|p.Ala798Ala|2499/3998|2394/3792|798/1263||,C|synonymous_variant|LOW|SMC4|ENSG00000113810|transcript|ENST00000462787.5|protein_coding|15/22|c.2469A>C|p.Ala823Ala|3628/5033|2469/3693|823/1230||,C|upstream_gene_variant|MODIFIER|SMC4|ENSG00000113810|transcript|ENST00000488017.1|retained_intron||n.-3786A>C|||||3786|,C|downstream_gene_variant|MODIFIER|SMC4|ENSG00000113810|transcript|ENST00000469858.5|nonsense_mediated_decay||n.*1777A>C|||||63|,C|downstream_gene_variant|MODIFIER|SMC4|ENSG00000113810|transcript|ENST00000497203.1|retained_intron||n.*1416A>C|||||1416|,C|intron_variant|MODIFIER|RP11-432B6.3|ENSG00000248710|transcript|ENST00000483754.1|nonsense_mediated_decay|3/18|n.952+13222T>G||||||,C|non_coding_transcript_exon_variant|MODIFIER|SMC4|ENSG00000113810|transcript|ENST00000462668.5|retained_intron|8/16|n.1692A>C||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:1620:1579:56755:40:495:0,-443.125,-5044.11\\t0/0:99:1001:982:36062:17:229:0,-280.151,-3212.6\n19\\t9757955\\t.\\tA\\tT\\t2.43962E-7\\tPASS\\tSSC=1.89386;TYPE=snp;ANN=T|synonymous_variant|LOW|ZNF846|ENSG00000196605|transcript|ENST00000397902.6|protein_coding|6/6|c.1122T>A|p.Ala374Ala|1536/2016|1122/1602|374/533||,T|3_prime_UTR_variant|MODIFIER|ZNF846|ENSG00000196605|transcript|ENST00000586293.5|protein_coding|5/5|c.*778T>A|||||778|,T|upstream_gene_variant|MODIFIER|CTD-2623N2.3|ENSG00000267370|transcript|ENST00000588113.1|unprocessed_pseudogene||n.-1092T>A|||||1092|,T|downstream_gene_variant|MODIFIER|ZNF846|ENSG00000196605|transcript|ENST00000591377.1|retained_intron||n.*519T>A|||||519|,T|downstream_gene_variant|MODIFIER|ZNF846|ENSG00000196605|transcript|ENST00000590471.1|processed_transcript||n.*4433T>A|||||4433|,T|downstream_gene_variant|MODIFIER|ZNF846|ENSG00000196605|transcript|ENST00000587650.1|processed_transcript||n.*4145T>A|||||4145|,T|downstream_gene_variant|MODIFIER|ZNF846|ENSG00000196605|transcript|ENST00000589412.5|protein_coding||c.*592T>A|||||592|WARNING_TRANSCRIPT_INCOMPLETE,T|downstream_gene_variant|MODIFIER|ZNF846|ENSG00000196605|transcript|ENST00000586814.5|protein_coding||c.*794T>A|||||794|WARNING_TRANSCRIPT_INCOMPLETE,T|downstream_gene_variant|MODIFIER|ZNF846|ENSG00000196605|transcript|ENST00000592587.1|protein_coding||c.*1918T>A|||||1918|WARNING_TRANSCRIPT_INCOMPLETE,T|intron_variant|MODIFIER|ZNF846|ENSG00000196605|transcript|ENST00000589453.5|nonsense_mediated_decay|5/7|n.*674+104T>A||||||,T|intron_variant|MODIFIER|ZNF846|ENSG00000196605|transcript|ENST00000588267.5|protein_coding|5/5|c.631+104T>A||||||,T|intron_variant|MODIFIER|ZNF846|ENSG00000196605|transcript|ENST00000592859.1|protein_coding|2/2|c.631+104T>A||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:94.3483:28:26:1049:2:53:0,-3.39901,-89.6661\\t0/0:72.5331:6:5:205:0:0:0,-1.50515,-18.4586\n22\\t17548233\\t.\\tA\\tG\\t4.2069E-14\\tPASS\\tSSC=328.198;TYPE=snp;ANN=G|synonymous_variant|LOW|CECR2|ENSG00000099954|transcript|ENST00000400585.6|protein_coding|17/19|c.2454A>G|p.Thr818Thr|2892/4833|2454/3903|818/1300||,G|synonymous_variant|LOW|CECR2|ENSG00000099954|transcript|ENST00000262608.12|protein_coding|17/19|c.2457A>G|p.Thr819Thr|2842/4783|2457/3906|819/1301||,G|synonymous_variant|LOW|CECR2|ENSG00000099954|transcript|ENST00000342247.9|protein_coding|18/20|c.3006A>G|p.Thr1002Thr|3424/6178|3006/4455|1002/1484||,G|synonymous_variant|LOW|CECR2|ENSG00000099954|transcript|ENST00000612582.1|protein_coding|17/19|c.2880A>G|p.Thr960Thr|2887/9645|2880/4329|960/1442||,G|upstream_gene_variant|MODIFIER|CECR2|ENSG00000099954|transcript|ENST00000355219.3|nonsense_mediated_decay||n.-766A>G|||||766|\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:1473:1421:47573:36:437:0,-399.278,-4238.46\\t0/0:99:274:262:8853:10:120:0,-71.0802,-785.455\n6\\t35452666\\t.\\tC\\tT\\t0.0\\tPASS\\tSSC=132.932;TYPE=snp;ANN=T|missense_variant|MODERATE|FANCE|ENSG00000112039|transcript|ENST00000229769.2|protein_coding|1/10|c.121C>T|p.Arg41Trp|306/2554|121/1611|41/536||,T|downstream_gene_variant|MODIFIER|MKRNP2|ENSG00000227154|transcript|ENST00000436521.1|unprocessed_pseudogene||n.*2800C>T|||||2800|\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:503:503:19998:0:0:0,-151.418,-1798.06\\t0/0:99:86:84:3354:2:78:0,-18.4858,-294.497\n11\\t108250705\\t.\\tC\\tT\\t0.0\\tPASS\\tSSC=111.591;TYPE=snp;OLD_MULTIALLELIC=11:108250705:C/G/T;ANN=T|stop_gained|HIGH|ATM|ENSG00000149311|transcript|ENST00000527805.5|protein_coding|10/27|c.1240C>T|p.Gln414*|1973/4841|1240/4108|414/1368||WARNING_TRANSCRIPT_INCOMPLETE,T|stop_gained|HIGH|ATM|ENSG00000149311|transcript|ENST00000452508.6|protein_coding|11/64|c.1240C>T|p.Gln414*|1429/12954|1240/9171|414/3056||,T|stop_gained|HIGH|ATM|ENSG00000149311|transcript|ENST00000278616.8|protein_coding|10/63|c.1240C>T|p.Gln414*|1625/13147|1240/9171|414/3056||,T|upstream_gene_variant|MODIFIER|ATM|ENSG00000149311|transcript|ENST00000525012.5|processed_transcript||n.-2116C>T|||||2116|,T|upstream_gene_variant|MODIFIER|ATM|ENSG00000149311|transcript|ENST00000533526.1|processed_transcript||n.-2116C>T|||||2116|;LOF=(ATM|ENSG00000149311|25|0.12);NMD=(ATM|ENSG00000149311|25|0.12)\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:683:659:22302:15:190:0,-185.787,-1988.09\\t0/0:99:303:291:9534:5:70:0,-82.8026,-851.246\n2\\t39035228\\t.\\tT\\tC\\t1.30189E-14\\tPASS\\tSSC=261.19;TYPE=snp;ANN=C|missense_variant|MODERATE|SOS1|ENSG00000115904|transcript|ENST00000402219.6|protein_coding|8/23|c.1058A>G|p.Tyr353Cys|1099/8314|1058/4002|353/1333||,C|missense_variant|MODERATE|SOS1|ENSG00000115904|transcript|ENST00000426016.5|protein_coding|9/24|c.1058A>G|p.Tyr353Cys|1145/8517|1058/4002|353/1333||,C|missense_variant|MODERATE|SOS1|ENSG00000115904|transcript|ENST00000395038.6|protein_coding|8/22|c.1058A>G|p.Tyr353Cys|1086/4123|1058/3957|353/1318||,C|non_coding_transcript_exon_variant|MODIFIER|SOS1|ENSG00000115904|transcript|ENST00000461545.1|retained_intron|3/4|n.408A>G||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:1743:1665:60732:50:630:0,-459.576,-5403.2\\t0/0:99:735:706:25542:17:214:0,-198.386,-2277.24\n9\\t94320516\\t.\\tT\\tC\\t4.3455E-14\\tPASS\\tSSC=483.276;TYPE=snp;ANN=C|missense_variant|MODERATE|NUTM2F|ENSG00000130950|transcript|ENST00000253262.8|protein_coding|5/7|c.1060A>G|p.Thr354Ala|1081/2561|1060/2271|354/756||,C|missense_variant|MODERATE|NUTM2F|ENSG00000130950|transcript|ENST00000341207.5|protein_coding|5/8|c.1060A>G|p.Thr354Ala|1081/2516|1060/2226|354/741||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:1982:1933:70604:42:529:0,-546.925,-6030.86\\t0/0:99:237:230:8640:6:82:0,-63.6489,-725.973\n10\\t102504189\\t.\\tACCG\\tCCCC\\t0.0\\tPASS\\tSSC=158.978;TYPE=complex;OLD_MULTIALLELIC=10:102504189:ACCG/CCCC/CCCG/ACCC;ANN=CCCC|missense_variant|MODERATE|SUFU|ENSG00000107882|transcript|ENST00000369902.7|protein_coding|1/12|c.37_40delACCGinsCCCC|p.ThrAla13ProPro|203/5001|37/1455|13/484||,CCCC|missense_variant|MODERATE|SUFU|ENSG00000107882|transcript|ENST00000369899.6|protein_coding|1/11|c.37_40delACCGinsCCCC|p.ThrAla13ProPro|183/1839|37/1302|13/433||,CCCC|missense_variant|MODERATE|SUFU|ENSG00000107882|transcript|ENST00000423559.2|protein_coding|1/10|c.37_40delACCGinsCCCC|p.ThrAla13ProPro|111/2601|37/1446|13/481||,CCCC|upstream_gene_variant|MODIFIER|ACTR1A|ENSG00000138107|transcript|ENST00000369905.8|protein_coding||c.-1545_-1542delCGGTinsGGGG|||||1478|,CCCC|upstream_gene_variant|MODIFIER|ACTR1A|ENSG00000138107|transcript|ENST00000481044.6|processed_transcript||n.-1538_-1535delCGGTinsGGGG|||||1535|,CCCC|upstream_gene_variant|MODIFIER|ACTR1A|ENSG00000138107|transcript|ENST00000487599.1|protein_coding||c.-1545_-1542delCGGTinsGGGG|||||1511|,CCCC|upstream_gene_variant|MODIFIER|ACTR1A|ENSG00000138107|transcript|ENST00000636707.1|nonsense_mediated_decay||n.-1545_-1542delCGGTinsGGGG|||||1480|\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:832:682:23916:38:472:0,-197.548,-2101.91\\t0/0:99:156:126:4526:8:120:0,-38.5703,-394.886\n17\\t41586597\\t.\\tAGCT\\tA\\t22.2524\\tPASS\\tSSC=6.40064;TYPE=del;OLD_VARIANT=17:41586597:AGCTGCTGCTGCTGCTGCTG/AGCTGCTGCTGCTGCTG;ANN=A|conservative_inframe_deletion|MODERATE|KRT14|ENSG00000186847|transcript|ENST00000167586.6|protein_coding|1/8|c.235_237delAGC|p.Ser79del|324/1662|235/1419|79/472||,A|upstream_gene_variant|MODIFIER|KRT14|ENSG00000186847|transcript|ENST00000441550.2|retained_intron||n.-3145_-3143delAGC|||||3143|,A|upstream_gene_variant|MODIFIER|KRT14|ENSG00000186847|transcript|ENST00000476662.1|retained_intron||n.-2129_-2127delAGC|||||2127|\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:11.6396:2:2:81:0:0:0,-0.60206,-7.68573\\t0/1:22.2521:4:2:81:2:74:-5.79858,0,-6.48161\n12\\t389017\\t.\\tA\\tC\\t0.0\\tPASS\\tSSC=183.031;TYPE=snp;ANN=C|missense_variant|MODERATE|KDM5A|ENSG00000073614|transcript|ENST00000399788.6|protein_coding|1/28|c.75T>G|p.Ser25Arg|438/10763|75/5073|25/1690||,C|missense_variant|MODERATE|KDM5A|ENSG00000073614|transcript|ENST00000544760.1|protein_coding|1/13|c.75T>G|p.Ser25Arg|266/2338|75/2147|25/714||WARNING_TRANSCRIPT_INCOMPLETE,C|missense_variant|MODERATE|KDM5A|ENSG00000073614|transcript|ENST00000535014.5|protein_coding|1/3|c.75T>G|p.Ser25Arg|248/551|75/378|25/125||WARNING_TRANSCRIPT_NO_STOP_CODON,C|missense_variant|MODERATE|KDM5A|ENSG00000073614|transcript|ENST00000543507.1|protein_coding|1/4|c.75T>G|p.Ser25Arg|257/575|75/393|25/130||WARNING_TRANSCRIPT_NO_STOP_CODON,C|upstream_gene_variant|MODIFIER|CCDC77|ENSG00000120647|transcript|ENST00000543504.5|protein_coding||c.-582A>C|||||378|WARNING_TRANSCRIPT_NO_STOP_CODON,C|upstream_gene_variant|MODIFIER|CCDC77|ENSG00000120647|transcript|ENST00000540180.5|protein_coding||c.-528A>C|||||331|,C|upstream_gene_variant|MODIFIER|CCDC77|ENSG00000120647|transcript|ENST00000537453.1|processed_transcript||n.-256A>C|||||256|,C|upstream_gene_variant|MODIFIER|KDM5A|ENSG00000073614|transcript|ENST00000536014.5|protein_coding||c.-677T>G|||||487|WARNING_TRANSCRIPT_INCOMPLETE,C|upstream_gene_variant|MODIFIER|CCDC77|ENSG00000120647|transcript|ENST00000422000.5|protein_coding||c.-582A>C|||||333|,C|upstream_gene_variant|MODIFIER|CCDC77|ENSG00000120647|transcript|ENST00000535052.5|protein_coding||c.-625A>C|||||345|WARNING_TRANSCRIPT_NO_STOP_CODON,C|upstream_gene_variant|MODIFIER|CCDC77|ENSG00000120647|transcript|ENST00000540344.5|processed_transcript||n.-402A>C|||||402|\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:1137:1114:40658:23:296:0,-315.503,-3629.07\\t0/0:99:460:453:16529:5:60:0,-132.472,-1480.89\n21\\t41473484\\t.\\tT\\tA\\t2.97738E-14\\tPASS\\tSSC=97.0928;TYPE=snp;ANN=A|missense_variant|MODERATE|TMPRSS2|ENSG00000184012|transcript|ENST00000332149.9|protein_coding|9/14|c.740A>T|p.Asn247Ile|875/3205|740/1479|247/492||,A|missense_variant|MODERATE|TMPRSS2|ENSG00000184012|transcript|ENST00000454499.5|protein_coding|10/14|c.740A>T|p.Asn247Ile|1174/1901|740/1467|247/488||WARNING_TRANSCRIPT_NO_STOP_CODON,A|missense_variant|MODERATE|TMPRSS2|ENSG00000184012|transcript|ENST00000398585.7|protein_coding|9/14|c.851A>T|p.Asn284Ile|912/3240|851/1590|284/529||,A|missense_variant|MODERATE|TMPRSS2|ENSG00000184012|transcript|ENST00000458356.5|protein_coding|9/14|c.740A>T|p.Asn247Ile|829/1701|740/1479|247/492||,A|missense_variant|MODERATE|TMPRSS2|ENSG00000184012|transcript|ENST00000424093.5|protein_coding|8/8|c.620A>T|p.Asn207Ile|688/726|620/658|207/218||WARNING_TRANSCRIPT_INCOMPLETE,A|upstream_gene_variant|MODIFIER|TMPRSS2|ENSG00000184012|transcript|ENST00000469395.1|retained_intron||n.-4647A>T|||||4647|\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:400:399:15720:1:22:0,-118.212,-1411.29\\t0/0:99:96:94:3652:2:82:0,-21.1192,-320.899\n2\\t39278433\\t.\\tC\\tG\\t3.85729E-14\\tPASS\\tSSC=207.86;TYPE=snp;ANN=G|missense_variant|MODERATE|MAP4K3|ENSG00000011566|transcript|ENST00000263881.7|protein_coding|24/34|c.1768G>C|p.Glu590Gln|2093/4362|1768/2685|590/894||,G|missense_variant|MODERATE|MAP4K3|ENSG00000011566|transcript|ENST00000341681.9|protein_coding|23/33|c.1705G>C|p.Glu569Gln|2019/4271|1705/2622|569/873||,G|missense_variant|MODERATE|MAP4K3|ENSG00000011566|transcript|ENST00000437545.5|protein_coding|23/33|c.1516G>C|p.Glu506Gln|1667/3924|1516/2433|506/810||,G|upstream_gene_variant|MODIFIER|MAP4K3|ENSG00000011566|transcript|ENST00000495648.3|retained_intron||n.-14G>C|||||14|\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:1220:1186:43554:26:330:0,-335.143,-3885.88\\t0/0:99:433:428:15911:2:24:0,-127.283,-1428.41\n19\\t48498789\\t.\\tA\\tG\\t0.0\\tPASS\\tSSC=45.7104;TYPE=snp;OLD_MULTIALLELIC=19:48498789:AGGAGGTGGCGGC/GGGGGGGGGGGGG/GGGGGGGGGCGGG/GGGGGGGGGCGGC/GGGGGGTGGCGGG/GGGGGGTGGCGGC/GGGAGGGGGGGGG/AGGGGGTGGGGGC/GGGAGGTGGCGGC/AGGGGGTGGCGGC/AGGAGGGGGCGGC;OLD_VARIANT=19:48498789:AGGAGGTGGCGGC/GGGAGGTGGCGGC;ANN=G|synonymous_variant|LOW|LMTK3|ENSG00000142235|transcript|ENST00000270238.3|protein_coding|12/16|c.2367T>C|p.Pro789Pro|2367/4972|2367/4470|789/1489||,G|synonymous_variant|LOW|LMTK3|ENSG00000142235|transcript|ENST00000600059.5|protein_coding|11/15|c.2280T>C|p.Pro760Pro|2508/5113|2280/4383|760/1460||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:147:81:3015:7:94:0,-52.6494,-348.753\\t0/0:99:29:18:647:1:12:0,-6.44703,-77.6863\n19\\t50415746\\t.\\tA\\tG\\t0.0\\tPASS\\tSSC=135.077;TYPE=snp;ANN=G|missense_variant|MODERATE|POLD1|ENSG00000062822|transcript|ENST00000595904.5|protein_coding|21/26|c.2818A>G|p.Ser940Gly|2818/3402|2818/3402|940/1133||,G|missense_variant|MODERATE|POLD1|ENSG00000062822|transcript|ENST00000440232.6|protein_coding|22/27|c.2740A>G|p.Ser914Gly|2793/3444|2740/3324|914/1107||,G|missense_variant|MODERATE|POLD1|ENSG00000062822|transcript|ENST00000599857.5|protein_coding|22/27|c.2740A>G|p.Ser914Gly|2784/3435|2740/3324|914/1107||,G|missense_variant|MODERATE|POLD1|ENSG00000062822|transcript|ENST00000613923.4|protein_coding|22/27|c.2818A>G|p.Ser940Gly|2887/3542|2818/3402|940/1133||,G|missense_variant|MODERATE|POLD1|ENSG00000062822|transcript|ENST00000593407.5|protein_coding|5/8|c.520A>G|p.Ser174Gly|521/867|520/866|174/287||WARNING_TRANSCRIPT_INCOMPLETE,G|missense_variant|MODERATE|POLD1|ENSG00000062822|transcript|ENST00000593981.1|protein_coding|4/8|c.364A>G|p.Ser122Gly|366/873|364/871|122/289||WARNING_TRANSCRIPT_INCOMPLETE,G|upstream_gene_variant|MODIFIER|SPIB|ENSG00000269404|transcript|ENST00000595883.5|protein_coding||c.-3217A>G|||||3192|,G|upstream_gene_variant|MODIFIER|SPIB|ENSG00000269404|transcript|ENST00000270632.7|protein_coding||c.-3217A>G|||||3212|,G|upstream_gene_variant|MODIFIER|POLD1|ENSG00000062822|transcript|ENST00000597963.5|retained_intron||n.-567A>G|||||567|,G|upstream_gene_variant|MODIFIER|POLD1|ENSG00000062822|transcript|ENST00000596221.1|retained_intron||n.-1207A>G|||||1207|,G|upstream_gene_variant|MODIFIER|SPIB|ENSG00000269404|transcript|ENST00000439922.6|protein_coding||c.-3275A>G|||||3192|,G|upstream_gene_variant|MODIFIER|SPIB|ENSG00000269404|transcript|ENST00000596074.5|protein_coding||c.-3217A>G|||||3195|,G|upstream_gene_variant|MODIFIER|SPIB|ENSG00000269404|transcript|ENST00000594685.1|protein_coding||c.-3217A>G|||||3208|WARNING_TRANSCRIPT_INCOMPLETE,G|upstream_gene_variant|MODIFIER|SPIB|ENSG00000269404|transcript|ENST00000599923.5|retained_intron||n.-3193A>G|||||3193|,G|upstream_gene_variant|MODIFIER|SPIB|ENSG00000269404|transcript|ENST00000594188.1|retained_intron||n.-3195A>G|||||3195|,G|upstream_gene_variant|MODIFIER|SPIB|ENSG00000269404|transcript|ENST00000597855.5|protein_coding||c.-3217A>G|||||3195|,G|upstream_gene_variant|MODIFIER|CTD-2545M3.6|ENSG00000142539|transcript|ENST00000599632.1|protein_coding||c.-54A>G|||||53|WARNING_TRANSCRIPT_NO_START_CODON,G|downstream_gene_variant|MODIFIER|POLD1|ENSG00000062822|transcript|ENST00000596425.1|protein_coding||c.*2245A>G|||||2245|WARNING_TRANSCRIPT_INCOMPLETE,G|intron_variant|MODIFIER|POLD1|ENSG00000062822|transcript|ENST00000600859.5|nonsense_mediated_decay|21/25|n.2717+156A>G||||||,G|non_coding_transcript_exon_variant|MODIFIER|POLD1|ENSG00000062822|transcript|ENST00000596648.1|retained_intron|2/4|n.105A>G||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:578:573:22174:5:80:0,-166.637,-1986.42\\t0/0:99:116:113:4261:3:36:0,-31.5595,-380.086\n17\\t31940471\\t.\\tG\\tT\\t0.0\\tPASS\\tSSC=78.2338;TYPE=snp;ANN=T|missense_variant|MODERATE|SUZ12|ENSG00000178691|transcript|ENST00000322652.9|protein_coding|3/16|c.371G>T|p.Arg124Ile|600/4491|371/2220|124/739||,T|missense_variant|MODERATE|SUZ12|ENSG00000178691|transcript|ENST00000580398.1|protein_coding|3/15|c.371G>T|p.Arg124Ile|551/3977|371/2151|124/716||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:501:489:17464:11:138:0,-138.237,-1244.84\\t0/0:99:214:210:7495:2:59:0,-60.0032,-553.172\n14\\t24375678\\t.\\tA\\tC\\t0.0\\tPASS\\tSSC=150.353;TYPE=snp;ANN=C|missense_variant|MODERATE|NFATC4|ENSG00000100968|transcript|ENST00000413692.6|protein_coding|8/10|c.2081A>C|p.Glu694Ala|2225/5700|2081/2895|694/964||,C|missense_variant|MODERATE|NFATC4|ENSG00000100968|transcript|ENST00000554591.5|protein_coding|8/11|c.2081A>C|p.Glu694Ala|2197/2893|2081/2574|694/857||,C|missense_variant|MODERATE|NFATC4|ENSG00000100968|transcript|ENST00000554966.5|protein_coding|8/11|c.1931A>C|p.Glu644Ala|2013/2506|1931/2424|644/807||,C|missense_variant|MODERATE|NFATC4|ENSG00000100968|transcript|ENST00000555590.5|protein_coding|8/11|c.1931A>C|p.Glu644Ala|2013/2830|1931/2748|644/915||,C|missense_variant|MODERATE|NFATC4|ENSG00000100968|transcript|ENST00000424781.6|protein_coding|8/10|c.1931A>C|p.Glu644Ala|2013/5488|1931/2745|644/914||,C|missense_variant|MODERATE|NFATC4|ENSG00000100968|transcript|ENST00000539237.6|protein_coding|8/10|c.1988A>C|p.Glu663Ala|2211/5686|1988/2802|663/933||,C|missense_variant|MODERATE|NFATC4|ENSG00000100968|transcript|ENST00000556279.5|protein_coding|8/11|c.1988A>C|p.Glu663Ala|2107/2924|1988/2805|663/934||,C|missense_variant|MODERATE|NFATC4|ENSG00000100968|transcript|ENST00000553469.5|protein_coding|8/11|c.1988A>C|p.Glu663Ala|2073/2566|1988/2481|663/826||,C|missense_variant|MODERATE|NFATC4|ENSG00000100968|transcript|ENST00000554050.5|protein_coding|7/10|c.1892A>C|p.Glu631Ala|2213/3057|1892/2385|631/794||,C|missense_variant|MODERATE|NFATC4|ENSG00000100968|transcript|ENST00000250373.8|protein_coding|7/10|c.1892A>C|p.Glu631Ala|2033/4749|1892/2709|631/902||,C|missense_variant|MODERATE|NFATC4|ENSG00000100968|transcript|ENST00000553708.5|protein_coding|7/9|c.1892A>C|p.Glu631Ala|1892/5367|1892/2706|631/901||,C|missense_variant|MODERATE|NFATC4|ENSG00000100968|transcript|ENST00000554344.5|protein_coding|6/9|c.1682A>C|p.Glu561Ala|2138/2955|1682/2499|561/832||,C|missense_variant|MODERATE|NFATC4|ENSG00000100968|transcript|ENST00000554661.5|protein_coding|6/9|c.1682A>C|p.Glu561Ala|2138/2631|1682/2175|561/724||,C|missense_variant|MODERATE|NFATC4|ENSG00000100968|transcript|ENST00000556169.5|protein_coding|7/10|c.1856A>C|p.Glu619Ala|2016/2509|1856/2349|619/782||,C|missense_variant|MODERATE|NFATC4|ENSG00000100968|transcript|ENST00000422617.7|protein_coding|7/9|c.1856A>C|p.Glu619Ala|2016/5491|1856/2670|619/889||,C|missense_variant|MODERATE|NFATC4|ENSG00000100968|transcript|ENST00000557451.5|protein_coding|6/8|c.1682A>C|p.Glu561Ala|2138/5613|1682/2496|561/831||,C|missense_variant|MODERATE|NFATC4|ENSG00000100968|transcript|ENST00000555453.5|protein_coding|7/10|c.1856A>C|p.Glu619Ala|2002/3169|1856/2673|619/890||,C|missense_variant|MODERATE|NFATC4|ENSG00000100968|transcript|ENST00000554473.5|protein_coding|4/7|c.497A>C|p.Glu166Ala|889/1382|497/990|166/329||,C|missense_variant|MODERATE|NFATC4|ENSG00000100968|transcript|ENST00000556759.5|protein_coding|4/7|c.497A>C|p.Glu166Ala|889/2025|497/1314|166/437||,C|missense_variant|MODERATE|NFATC4|ENSG00000100968|transcript|ENST00000555167.1|protein_coding|4/6|c.497A>C|p.Glu166Ala|889/4364|497/1311|166/436||,C|missense_variant|MODERATE|NFATC4|ENSG00000100968|transcript|ENST00000553879.5|protein_coding|7/10|c.1682A>C|p.Glu561Ala|1867/2707|1682/2499|561/832||,C|5_prime_UTR_variant|MODIFIER|NFATC4|ENSG00000100968|transcript|ENST00000555393.5|protein_coding|2/4|c.-245A>C|||||696|,C|5_prime_UTR_variant|MODIFIER|NFATC4|ENSG00000100968|transcript|ENST00000555802.1|protein_coding|2/5|c.-245A>C|||||696|,C|5_prime_UTR_variant|MODIFIER|NFATC4|ENSG00000100968|transcript|ENST00000557767.5|protein_coding|2/5|c.-245A>C|||||696|,C|upstream_gene_variant|MODIFIER|NFATC4|ENSG00000100968|transcript|ENST00000555821.1|processed_transcript||n.-396A>C|||||396|,C|downstream_gene_variant|MODIFIER|NFATC4|ENSG00000100968|transcript|ENST00000440487.6|processed_transcript||n.*3862A>C|||||3862|,C|downstream_gene_variant|MODIFIER|NFATC4|ENSG00000100968|transcript|ENST00000556957.5|retained_intron||n.*1533A>C|||||1533|,C|downstream_gene_variant|MODIFIER|NFATC4|ENSG00000100968|transcript|ENST00000557028.5|retained_intron||n.*971A>C|||||971|,C|downstream_gene_variant|MODIFIER|NFATC4|ENSG00000100968|transcript|ENST00000554779.1|protein_coding||c.*3092A>C|||||3092|WARNING_TRANSCRIPT_INCOMPLETE,C|non_coding_transcript_exon_variant|MODIFIER|NFATC4|ENSG00000100968|transcript|ENST00000556302.5|retained_intron|6/7|n.2349A>C||||||,C|non_coding_transcript_exon_variant|MODIFIER|NFATC4|ENSG00000100968|transcript|ENST00000554655.5|retained_intron|7/10|n.2548A>C||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:852:818:30252:32:434:0,-217.063,-2680.52\\t0/0:99:243:238:8969:5:70:0,-66.7104,-800.255\n2\\t105089049\\t.\\tC\\tT\\t39.442\\tPASS\\tSSC=7.70381;TYPE=snp;ANN=T|synonymous_variant|LOW|MRPS9|ENSG00000135972|transcript|ENST00000258455.7|protein_coding|6/11|c.555C>T|p.Leu185Leu|665/1500|555/1191|185/396||,T|upstream_gene_variant|MODIFIER|MRPS9|ENSG00000135972|transcript|ENST00000472220.1|retained_intron||n.-3049C>T|||||3049|,T|non_coding_transcript_exon_variant|MODIFIER|MRPS9|ENSG00000135972|transcript|ENST00000413583.5|nonsense_mediated_decay|1/6|n.30C>T||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:1.78475:1:1:41:0:0:0,-0.30103,-4.09457\\t1/1:13.7445:2:0:0:2:78:-7.40278,-0.60206,0\n16\\t30980043\\t.\\tT\\tC\\t1.42238E-14\\tPASS\\tSSC=221.913;TYPE=snp;ANN=C|synonymous_variant|LOW|SETD1A|ENSG00000099381|transcript|ENST00000262519.12|protein_coding|14/19|c.4257T>C|p.Ser1419Ser|4943/6903|4257/5124|1419/1707||,C|downstream_gene_variant|MODIFIER|RP11-1072A3.3|ENSG00000279196|transcript|ENST00000624286.1|TEC||n.*4587A>G|||||4587|\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:911:886:32097:19:229:0,-252.087,-2864.89\\t0/0:99:112:108:3976:3:36:0,-30.1743,-354.449\n7\\t102277952\\t.\\tA\\tC\\t2.05223E-14\\tPASS\\tSSC=129.744;TYPE=snp;ANN=C|missense_variant|MODERATE|CUX1|ENSG00000257923|transcript|ENST00000437600.8|protein_coding|18/23|c.1567A>C|p.Asn523His|1694/3031|1567/2037|523/678||,C|missense_variant|MODERATE|CUX1|ENSG00000257923|transcript|ENST00000622516.4|protein_coding|18/23|c.1561A>C|p.Asn521His|1653/2990|1561/2031|521/676||,C|missense_variant|MODERATE|CUX1|ENSG00000257923|transcript|ENST00000292538.8|protein_coding|18/23|c.1567A>C|p.Asn523His|1593/2930|1567/2037|523/678||,C|missense_variant|MODERATE|CUX1|ENSG00000257923|transcript|ENST00000393824.7|protein_coding|17/22|c.1450A>C|p.Asn484His|1473/2331|1450/1920|484/639||,C|missense_variant|MODERATE|CUX1|ENSG00000257923|transcript|ENST00000547394.6|protein_coding|17/22|c.1519A>C|p.Asn507His|1541/2878|1519/1989|507/662||,C|missense_variant|MODERATE|CUX1|ENSG00000257923|transcript|ENST00000425244.6|protein_coding|17/22|c.1429A>C|p.Asn477His|1439/2776|1429/1899|477/632||,C|non_coding_transcript_exon_variant|MODIFIER|CUX1|ENSG00000257923|transcript|ENST00000487284.2|retained_intron|3/8|n.254A>C||||||,C|non_coding_transcript_exon_variant|MODIFIER|CUX1|ENSG00000257923|transcript|ENST00000560541.5|processed_transcript|18/23|n.1839A>C||||||,C|non_coding_transcript_exon_variant|MODIFIER|CUX1|ENSG00000257923|transcript|ENST00000558836.5|processed_transcript|17/22|n.1673A>C||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:593:587:18985:4:48:0,-173.589,-1702.86\\t0/0:99:162:156:5061:4:48:0,-43.8448,-450.919\n17\\t37731789\\t.\\tT\\tC\\t0.0\\tPASS\\tSSC=290.046;TYPE=snp;ANN=C|missense_variant|MODERATE|HNF1B|ENSG00000275410|transcript|ENST00000617811.4|protein_coding|4/9|c.851A>G|p.His284Arg|1214/2977|851/1674|284/557||,C|missense_variant|MODERATE|HNF1B|ENSG00000275410|transcript|ENST00000621123.4|protein_coding|4/9|c.773A>G|p.His258Arg|948/1971|773/1596|258/531||,C|missense_variant|MODERATE|HNF1B|ENSG00000275410|transcript|ENST00000613727.4|protein_coding|4/7|c.773A>G|p.His258Arg|907/1546|773/1374|258/457||,C|missense_variant|MODERATE|HNF1B|ENSG00000275410|transcript|ENST00000617272.4|protein_coding|4/8|c.851A>G|p.His284Arg|985/1820|851/1278|284/425||,C|missense_variant|MODERATE|HNF1B|ENSG00000275410|transcript|ENST00000614313.4|protein_coding|4/8|c.851A>G|p.His284Arg|985/1819|851/1647|284/548||,C|missense_variant|MODERATE|HNF1B|ENSG00000275410|transcript|ENST00000620125.1|protein_coding|6/6|c.754A>G|p.Thr252Ala|975/1103|754/882|252/293||,C|non_coding_transcript_exon_variant|MODIFIER|HNF1B|ENSG00000275410|transcript|ENST00000618894.1|retained_intron|2/2|n.303A>G||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:1461:1420:52449:36:527:0,-390.901,-4668.11\\t0/0:99:359:355:13371:4:78:0,-100.855,-1195.18\n6\\t31355560\\t.\\tTGGGG\\tCGGGA\\t0.0\\tPASS\\tSSC=92.3602;TYPE=complex;ANN=CGGGA|missense_variant|MODERATE|HLA-B|ENSG00000234745|transcript|ENST00000412585.6|protein_coding|4/8|c.648_652delCCCCAinsTCCCG|p.Ile218Val|681/1547|648/1089|216/362||,CGGGA|missense_variant|MODERATE|HLA-B|ENSG00000234745|transcript|ENST00000434333.1|protein_coding|3/3|c.681_685delCCCCAinsTCCCG|p.Ile229Val|810/863|681/738|227/245||WARNING_TRANSCRIPT_NO_STOP_CODON,CGGGA|upstream_gene_variant|MODIFIER|MIR6891|ENSG00000277402|transcript|ENST00000618788.1|miRNA||n.-248_-244delCCCCAinsTCCCG|||||244|,CGGGA|upstream_gene_variant|MODIFIER|XXbac-BPG248L24.12|ENSG00000271581|transcript|ENST00000603274.1|unprocessed_pseudogene||n.-1087_-1083delTGGGGinsCGGGA|||||1087|,CGGGA|upstream_gene_variant|MODIFIER|HLA-B|ENSG00000234745|transcript|ENST00000481849.5|retained_intron||n.-758_-754delCCCCAinsTCCCG|||||754|,CGGGA|upstream_gene_variant|MODIFIER|HLA-B|ENSG00000234745|transcript|ENST00000497377.5|retained_intron||n.-488_-484delCCCCAinsTCCCG|||||484|,CGGGA|non_coding_transcript_exon_variant|MODIFIER|HLA-B|ENSG00000234745|transcript|ENST00000463574.1|retained_intron|1/2|n.239_243delCCCCAinsTCCCG||||||,CGGGA|non_coding_transcript_exon_variant|MODIFIER|HLA-B|ENSG00000234745|transcript|ENST00000498007.1|retained_intron|3/3|n.914_918delCCCCAinsTCCCG||||||,CGGGA|non_coding_transcript_exon_variant|MODIFIER|HLA-B|ENSG00000234745|transcript|ENST00000474381.1|retained_intron|2/2|n.1097_1101delCCCCAinsTCCCG||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:968:902:35747:55:2195:0,-156.895,-3176.54\\t0/0:99:266:259:10300:6:242:0,-64.5348,-943.326\n19\\t5135358\\t.\\tA\\tT\\t0.0\\tPASS\\tSSC=248.905;TYPE=snp;ANN=T|missense_variant|MODERATE|KDM4B|ENSG00000127663|transcript|ENST00000536461.5|protein_coding|15/23|c.2207A>T|p.Glu736Val|2247/5027|2207/3393|736/1130||,T|missense_variant|MODERATE|KDM4B|ENSG00000127663|transcript|ENST00000159111.8|protein_coding|15/23|c.2105A>T|p.Glu702Val|2323/5593|2105/3291|702/1096||,T|missense_variant|MODERATE|KDM4B|ENSG00000127663|transcript|ENST00000588361.1|protein_coding|8/12|c.1340A>T|p.Glu447Val|1342/3039|1340/1869|447/622||WARNING_TRANSCRIPT_NO_START_CODON,T|missense_variant|MODERATE|KDM4B|ENSG00000127663|transcript|ENST00000611640.4|protein_coding|16/24|c.2207A>T|p.Glu736Val|2433/5703|2207/3393|736/1130||,T|upstream_gene_variant|MODIFIER|KDM4B|ENSG00000127663|transcript|ENST00000588166.1|processed_transcript||n.-178A>T|||||178|,T|non_coding_transcript_exon_variant|MODIFIER|KDM4B|ENSG00000127663|transcript|ENST00000589104.5|retained_intron|9/17|n.1871A>T||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:899:897:34686:0:0:0,-270.024,-3118.27\\t0/0:99:96:94:3644:2:82:0,-21.1192,-320.199\n7\\t7969419\\t.\\tG\\tA\\t0.0\\tPASS\\tSSC=43.9033;TYPE=snp;ANN=A|missense_variant|MODERATE|GLCCI1|ENSG00000106415|transcript|ENST00000223145.9|protein_coding|1/8|c.69G>A|p.Met23Ile|626/4743|69/1644|23/547||,A|upstream_gene_variant|MODIFIER|GLCCI1|ENSG00000106415|transcript|ENST00000492797.5|retained_intron||n.-288G>A|||||288|,A|upstream_gene_variant|MODIFIER|GLCCI1|ENSG00000106415|transcript|ENST00000460897.1|retained_intron||n.-317G>A|||||317|,A|upstream_gene_variant|MODIFIER|GLCCI1|ENSG00000106415|transcript|ENST00000414914.5|protein_coding||c.-268G>A|||||268|WARNING_TRANSCRIPT_INCOMPLETE,A|upstream_gene_variant|MODIFIER|GLCCI1|ENSG00000106415|transcript|ENST00000430798.1|protein_coding||c.-268G>A|||||268|WARNING_TRANSCRIPT_INCOMPLETE,A|upstream_gene_variant|MODIFIER|GLCCI1|ENSG00000106415|transcript|ENST00000470583.5|processed_transcript||n.-1022G>A|||||1022|,A|upstream_gene_variant|MODIFIER|GLCCI1|ENSG00000106415|transcript|ENST00000474269.5|processed_transcript||n.-1033G>A|||||1033|,A|downstream_gene_variant|MODIFIER|UMAD1|ENSG00000219545|transcript|ENST00000482067.3|protein_coding||c.*1646G>A|||||1399|,A|intron_variant|MODIFIER|AC006042.7|ENSG00000233108|transcript|ENST00000428660.1|antisense|1/1|n.132+353C>T||||||,A|intron_variant|MODIFIER|RP11-505D17.1|ENSG00000283549|transcript|ENST00000469183.5|processed_transcript|4/4|n.492-34489G>A||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:204:204:8080:0:0:0,-61.4101,-726.729\\t0/0:99:84:82:3281:2:82:0,-17.5068,-287.543\n13\\t87677763\\t.\\tTGCA\\tT\\t3.50176E-14\\tPASS\\tSSC=31.1978;TYPE=del;OLD_VARIANT=13:87677763:TGCAGCAGCAGCAGCAG/TGCAGCAGCAGCAG;ANN=T|disruptive_inframe_deletion|MODERATE|SLITRK5|ENSG00000165300|transcript|ENST00000325089.7|protein_coding|2/2|c.2390_2392delAGC|p.Gln797del|2609/21103|2390/2877|797/958||INFO_REALIGN_3_PRIME\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:148:137:5428:4:155:0,-50.1627,-500.181\\t0/0:99:44:42:1657:0:0:0,-18.9649,-152.513\n2\\t74101995\\t.\\tA\\tG\\t1.3531E-14\\tPASS\\tSSC=169.858;TYPE=snp;ANN=G|missense_variant|MODERATE|TET3|ENSG00000187605|transcript|ENST00000409262.7|protein_coding|11/11|c.5207A>G|p.Glu1736Gly|5207/11388|5207/5388|1736/1795||,G|missense_variant|MODERATE|TET3|ENSG00000187605|transcript|ENST00000305799.8|protein_coding|11/11|c.4928A>G|p.Glu1643Gly|4993/5174|4928/5109|1643/1702||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:639:637:24904:1:12:0,-190.977,-2237.96\\t0/0:99:96:94:3701:2:82:0,-21.1192,-325.324\n17\\t31236017\\t.\\tA\\tC\\t0.0\\tPASS\\tSSC=169.999;TYPE=snp;ANN=C|missense_variant|MODERATE|NF1|ENSG00000196712|transcript|ENST00000358273.8|protein_coding|29/58|c.3970A>C|p.Thr1324Pro|4353/12425|3970/8520|1324/2839||,C|missense_variant|MODERATE|NF1|ENSG00000196712|transcript|ENST00000356175.7|protein_coding|29/57|c.3970A>C|p.Thr1324Pro|4353/12362|3970/8457|1324/2818||,C|missense_variant|MODERATE|NF1|ENSG00000196712|transcript|ENST00000456735.6|protein_coding|21/50|c.2968A>C|p.Thr990Pro|2968/7787|2968/7509|990/2502||WARNING_TRANSCRIPT_NO_START_CODON,C|3_prime_UTR_variant|MODIFIER|NF1|ENSG00000196712|transcript|ENST00000495910.6|nonsense_mediated_decay|27/29|n.*3371A>C|||||54583|,C|non_coding_transcript_exon_variant|MODIFIER|NF1|ENSG00000196712|transcript|ENST00000579081.5|nonsense_mediated_decay|29/58|n.4072A>C||||||,C|non_coding_transcript_exon_variant|MODIFIER|NF1|ENSG00000196712|transcript|ENST00000495910.6|nonsense_mediated_decay|27/29|n.*3371A>C||||||,C|non_coding_transcript_exon_variant|MODIFIER|NF1|ENSG00000196712|transcript|ENST00000493220.5|retained_intron|12/21|n.2506A>C||||||,C|non_coding_transcript_exon_variant|MODIFIER|NF1|ENSG00000196712|transcript|ENST00000466819.5|nonsense_mediated_decay|3/10|n.445A>C||||||,C|non_coding_transcript_exon_variant|MODIFIER|NF1|ENSG00000196712|transcript|ENST00000479614.1|nonsense_mediated_decay|3/9|n.445A>C||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:1152:1079:39413:52:668:0,-280.346,-3483.25\\t0/0:99:457:429:15688:23:286:0,-110.347,-1384.79\n1\\t76868591\\t.\\tCGCA\\tC\\t5.82463E-5\\tPASS\\tSSC=20.1327;TYPE=del;OLD_VARIANT=1:76868591:CGCAGCAGCAGCAGCAGCAGCAGCAA/CGCAGCAGCAGCAGCAGCAGCAA;ANN=C|disruptive_inframe_deletion|MODERATE|ST6GALNAC5|ENSG00000117069|transcript|ENST00000477717.5|protein_coding|2/5|c.132_134delGCA|p.Gln45del|367/3751|132/1011|44/336||INFO_REALIGN_3_PRIME,C|non_coding_transcript_exon_variant|MODIFIER|ST6GALNAC5|ENSG00000117069|transcript|ENST00000496845.1|processed_transcript|2/2|n.326_328delGCA||||||INFO_REALIGN_3_PRIME,C|non_coding_transcript_exon_variant|MODIFIER|ST6GALNAC5|ENSG00000117069|transcript|ENST00000480428.1|processed_transcript|2/3|n.328_330delGCA||||||INFO_REALIGN_3_PRIME,C|non_coding_transcript_exon_variant|MODIFIER|ST6GALNAC5|ENSG00000117069|transcript|ENST00000318803.6|nonsense_mediated_decay|2/5|n.132_134delGCA||||||INFO_REALIGN_3_PRIME\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:56:52:2094:2:82:0,-16.8685,-184.324\\t0/1:5.82463e-05:11:9:366:2:82:-3.26423,0,-28.7895\n2\\t85303979\\t.\\tT\\tG\\t6.58156E-14\\tPASS\\tSSC=294.911;TYPE=snp;ANN=G|missense_variant|MODERATE|TCF7L1|ENSG00000152284|transcript|ENST00000282111.3|protein_coding|6/12|c.743T>G|p.Leu248Arg|1018/2968|743/1767|248/588||,G|downstream_gene_variant|MODIFIER|TCF7L1|ENSG00000152284|transcript|ENST00000442813.1|protein_coding||c.*1485T>G|||||1485|WARNING_TRANSCRIPT_INCOMPLETE,G|non_coding_transcript_exon_variant|MODIFIER|TCF7L1|ENSG00000152284|transcript|ENST00000490744.1|retained_intron|1/2|n.587T>G||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:1675:1587:52933:81:1166:0,-397.205,-4655.24\\t0/0:99:398:384:13209:13:191:0,-102.294,-1170.74\n3\\t128101645\\t.\\tC\\tG\\t0.0\\tPASS\\tSSC=195.793;TYPE=snp;ANN=G|missense_variant|MODERATE|RUVBL1|ENSG00000175792|transcript|ENST00000322623.9|protein_coding|5/11|c.517G>C|p.Asp173His|617/1761|517/1371|173/456||,G|missense_variant|MODERATE|RUVBL1|ENSG00000175792|transcript|ENST00000464873.5|protein_coding|5/10|c.337G>C|p.Asp113His|1088/2126|337/948|113/315||,G|upstream_gene_variant|MODIFIER|RUVBL1|ENSG00000175792|transcript|ENST00000585057.5|nonsense_mediated_decay||n.-4149G>C|||||4149|,G|upstream_gene_variant|MODIFIER|RUVBL1|ENSG00000175792|transcript|ENST00000472125.5|protein_coding||c.-27G>C|||||26|WARNING_TRANSCRIPT_NO_START_CODON,G|upstream_gene_variant|MODIFIER|RUVBL1|ENSG00000175792|transcript|ENST00000478892.1|protein_coding||c.-901G>C|||||901|WARNING_TRANSCRIPT_NO_START_CODON\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:1016:989:34913:27:423:0,-267.633,-3101.28\\t0/0:99:262:258:8926:4:76:0,-71.8402,-795.744\n22\\t40266750\\t.\\tG\\tA\\t0.0\\tPASS\\tSSC=41.2466;TYPE=snp;ANN=A|stop_gained|HIGH|TNRC6B|ENSG00000100354|transcript|ENST00000335727.13|protein_coding|5/21|c.2520G>A|p.Trp840*|2714/17933|2520/5172|840/1723||,A|stop_gained|HIGH|TNRC6B|ENSG00000100354|transcript|ENST00000446273.1|protein_coding|1/17|c.1746G>A|p.Trp582*|1748/4741|1746/4173|582/1390||WARNING_TRANSCRIPT_NO_START_CODON,A|stop_gained|HIGH|TNRC6B|ENSG00000100354|transcript|ENST00000454349.6|protein_coding|5/23|c.2520G>A|p.Trp840*|2731/18279|2520/5502|840/1833||,A|intron_variant|MODIFIER|TNRC6B|ENSG00000100354|transcript|ENST00000402203.5|protein_coding|7/23|c.566-3372G>A||||||,A|intron_variant|MODIFIER|TNRC6B|ENSG00000100354|transcript|ENST00000301923.13|protein_coding|7/23|c.566-3372G>A||||||;LOF=(TNRC6B|ENSG00000100354|9|0.33);NMD=(TNRC6B|ENSG00000100354|9|0.33)\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:133:133:5314:0:0:0,-40.037,-478.067\\t0/1:7.76924e-18:19:17:669:2:73:-1.20962,0,-54.8095\n22\\t37983649\\t.\\tG\\tA\\t0.0\\tPASS\\tSSC=251.666;TYPE=snp;ANN=A|missense_variant|MODERATE|SOX10|ENSG00000100146|transcript|ENST00000360880.6|protein_coding|3/5|c.136C>T|p.Pro46Ser|401/2861|136/1401|46/466||,A|missense_variant|MODERATE|SOX10|ENSG00000100146|transcript|ENST00000396884.6|protein_coding|2/4|c.136C>T|p.Pro46Ser|419/2879|136/1401|46/466||,A|missense_variant|MODERATE|SOX10|ENSG00000100146|transcript|ENST00000427770.1|protein_coding|2/3|c.136C>T|p.Pro46Ser|368/873|136/641|46/212||WARNING_TRANSCRIPT_INCOMPLETE,A|upstream_gene_variant|MODIFIER|SOX10|ENSG00000100146|transcript|ENST00000446929.5|protein_coding||c.-237C>T|||||235|WARNING_TRANSCRIPT_NO_START_CODON,A|upstream_gene_variant|MODIFIER|POLR2F|ENSG00000100142|transcript|ENST00000333418.4|protein_coding||c.-2545G>A|||||2544|WARNING_TRANSCRIPT_NO_START_CODON,A|upstream_gene_variant|MODIFIER|POLR2F|ENSG00000100142|transcript|ENST00000427034.1|protein_coding||c.-2552G>A|||||2550|WARNING_TRANSCRIPT_NO_START_CODON,A|intron_variant|MODIFIER|POLR2F|ENSG00000100142|transcript|ENST00000443002.5|nonsense_mediated_decay|5/7|n.*39-1403G>A||||||,A|intron_variant|MODIFIER|POLR2F|ENSG00000100142|transcript|ENST00000407936.5|protein_coding|4/5|c.294-2505G>A||||||,A|intron_variant|MODIFIER|POLR2F|ENSG00000100142|transcript|ENST00000405557.5|protein_coding|4/4|c.293+16479G>A||||||,A|intron_variant|MODIFIER|SOX10|ENSG00000100146|transcript|ENST00000470555.1|processed_transcript|1/1|n.70+690C>T||||||,A|non_coding_transcript_exon_variant|MODIFIER|MIR4534|ENSG00000279010|transcript|ENST00000623111.1|sense_overlapping|1/1|n.35298G>A||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:906:906:35931:0:0:0,-272.733,-3230.15\\t0/0:99:93:91:3544:2:73:0,-21.0666,-312.046\n7\\t99493944\\t.\\tC\\tT\\t5.07465E-12\\tPASS\\tSSC=8.07507;TYPE=snp;ANN=T|missense_variant|MODERATE|ZNF394|ENSG00000160908|transcript|ENST00000337673.6|protein_coding|3/3|c.1271G>A|p.Arg424Lys|1475/2179|1271/1686|424/561||,T|3_prime_UTR_variant|MODIFIER|ZNF394|ENSG00000160908|transcript|ENST00000426306.2|protein_coding|2/2|c.*655G>A|||||655|,T|downstream_gene_variant|MODIFIER|ZNF394|ENSG00000160908|transcript|ENST00000481881.1|retained_intron||n.*3918G>A|||||3918|,T|downstream_gene_variant|MODIFIER|ZNF394|ENSG00000160908|transcript|ENST00000485576.1|retained_intron||n.*4540G>A|||||4540|,T|downstream_gene_variant|MODIFIER|ZNF394|ENSG00000160908|transcript|ENST00000464401.1|retained_intron||n.*4641G>A|||||4641|,T|downstream_gene_variant|MODIFIER|ZNF394|ENSG00000160908|transcript|ENST00000394177.3|processed_transcript||n.*635G>A|||||635|,T|intron_variant|MODIFIER|ZNF789|ENSG00000198556|transcript|ENST00000494186.1|processed_transcript|1/1|n.115-6779C>T||||||,T|intron_variant|MODIFIER|ZNF394|ENSG00000160908|transcript|ENST00000462024.1|processed_transcript|1/1|n.83+4772G>A||||||,T|intron_variant|MODIFIER|ZNF789|ENSG00000198556|transcript|ENST00000493485.5|protein_coding|4/4|c.131-9603C>T||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:46:43:1737:2:24:0,-11.3864,-154.251\\t0/0:99:11:11:424:0:0:0,-3.31133,-38.5031\n17\\t82830857\\t.\\tT\\tG\\t5.85226E-14\\tPASS\\tSSC=197.44;TYPE=snp;ANN=G|missense_variant|MODERATE|ZNF750|ENSG00000141579|transcript|ENST00000269394.3|protein_coding|3/3|c.1457A>C|p.Asp486Ala|2291/3713|1457/2172|486/723||,G|missense_variant|MODERATE|ZNF750|ENSG00000141579|transcript|ENST00000572562.1|protein_coding|3/3|c.260A>C|p.Asp87Ala|585/1513|260/975|87/324||,G|intron_variant|MODIFIER|TBCD|ENSG00000141556|transcript|ENST00000355528.8|protein_coding|13/38|c.1318+15923T>G||||||,G|intron_variant|MODIFIER|TBCD|ENSG00000141556|transcript|ENST00000539345.6|protein_coding|13/39|c.1318+15923T>G||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:854:842:31570:5:60:0,-249.572,-2833.07\\t0/0:99:191:187:6837:4:58:0,-52.1318,-609.71\n4\\t87114595\\t.\\tGGA\\tCGG\\t7.47356E-14\\tPASS\\tSSC=220.86;TYPE=complex;OLD_MULTIALLELIC=4:87114595:GGA/CGG/CGA/GGG;ANN=CGG|missense_variant|MODERATE|AFF1|ENSG00000172493|transcript|ENST00000307808.10|protein_coding|11/20|c.1741_1743delGGAinsCGG|p.Gly581Arg|2161/9390|1741/3633|581/1210||,CGG|missense_variant|MODERATE|AFF1|ENSG00000172493|transcript|ENST00000395146.8|protein_coding|12/21|c.1762_1764delGGAinsCGG|p.Gly588Arg|2037/9285|1762/3657|588/1218||,CGG|missense_variant|MODERATE|AFF1|ENSG00000172493|transcript|ENST00000544085.5|protein_coding|11/23|c.1741_1743delGGAinsCGG|p.Gly581Arg|1753/3644|1741/3618|581/1205||,CGG|upstream_gene_variant|MODIFIER|AFF1|ENSG00000172493|transcript|ENST00000503369.1|retained_intron||n.-348_-346delGGAinsCGG|||||348|\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:1341:1066:39163:72:925:0,-296.629,-3429.05\\t0/0:99:345:270:9885:18:223:0,-75.7695,-864.765\n16\\t72795165\\t.\\tT\\tA\\t4.82166E-14\\tPASS\\tSSC=526.717;TYPE=snp;ANN=A|missense_variant|MODERATE|ZFHX3|ENSG00000140836|transcript|ENST00000268489.9|protein_coding|9/10|c.7517A>T|p.His2506Leu|8190/16064|7517/11112|2506/3703||,A|missense_variant|MODERATE|ZFHX3|ENSG00000140836|transcript|ENST00000397992.5|protein_coding|8/9|c.4775A>T|p.His1592Leu|5967/13841|4775/8370|1592/2789||,A|downstream_gene_variant|MODIFIER|RP5-991G20.1|ENSG00000259768|transcript|ENST00000563328.4|antisense||n.*3541T>A|||||3541|\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:2418:2334:79409:77:1019:0,-634.117,-7048.95\\t0/0:99:414:399:13698:15:190:0,-107.4,-1214.83\n19\\t49601523\\t.\\tACT\\tCCC\\t0.00243228\\tPASS\\tSSC=3.25855;TYPE=complex;OLD_MULTIALLELIC=19:49601523:ACT/CCC/ACC;ANN=CCC|missense_variant|MODERATE|PRR12|ENSG00000126464|transcript|ENST00000418929.6|protein_coding|6/14|c.4378_4380delACTinsCCC|p.Thr1460Pro|4390/6955|4378/6111|1460/2036||,CCC|missense_variant|MODERATE|PRR12|ENSG00000126464|transcript|ENST00000615927.1|protein_coding|4/12|c.1915_1917delACTinsCCC|p.Thr639Pro|1915/4479|1915/3648|639/1215||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:84.6254:24:18:602:2:24:0,-3.86061,-52.1599\\t0/.:0.00238636:3:2:62:0:0:-1.29684,-1.8989,-6.93536\n7\\t154968982\\t.\\tCCTG\\tC\\t1.78401E-13\\tPASS\\tSSC=183.705;TYPE=del;OLD_VARIANT=7:154968982:CCTGCTGCTGCTGCTGT/CCTGCTGCTGCTGT;ANN=C|conservative_inframe_deletion|MODERATE|PAXIP1|ENSG00000157212|transcript|ENST00000397192.5|protein_coding|7/21|c.1216_1218delCAG|p.Gln406del|1261/3711|1216/3210|406/1069||,C|conservative_inframe_deletion|MODERATE|PAXIP1|ENSG00000157212|transcript|ENST00000404141.5|protein_coding|7/21|c.1216_1218delCAG|p.Gln406del|1373/3827|1216/3210|406/1069||,C|3_prime_UTR_variant|MODIFIER|PAXIP1|ENSG00000157212|transcript|ENST00000457196.5|nonsense_mediated_decay|8/22|n.*935_*937delCAG|||||17075|,C|upstream_gene_variant|MODIFIER|PAXIP1|ENSG00000157212|transcript|ENST00000464717.5|retained_intron||n.-3275_-3273delCAG|||||3273|,C|downstream_gene_variant|MODIFIER|PAXIP1|ENSG00000157212|transcript|ENST00000494182.1|processed_transcript||n.*64_*66delCAG|||||66|,C|non_coding_transcript_exon_variant|MODIFIER|PAXIP1|ENSG00000157212|transcript|ENST00000475066.1|retained_intron|3/4|n.1304_1306delCAG||||||,C|non_coding_transcript_exon_variant|MODIFIER|PAXIP1|ENSG00000157212|transcript|ENST00000457196.5|nonsense_mediated_decay|8/22|n.*935_*937delCAG||||||,C|non_coding_transcript_exon_variant|MODIFIER|PAXIP1|ENSG00000157212|transcript|ENST00000473219.5|processed_transcript|7/21|n.3156_3158delCAG||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:788:736:29188:33:1248:0,-263.694,-2702.74\\t0/0:99:244:230:9186:8:315:0,-79.9888,-832.854\n17\\t7848045\\t.\\tG\\tA\\t0.0\\tPASS\\tSSC=452.635;TYPE=snp;ANN=A|missense_variant|MODERATE|KDM6B|ENSG00000132510|transcript|ENST00000254846.9|protein_coding|11/22|c.1757G>A|p.Arg586Gln|2146/6713|1757/5049|586/1682||,A|missense_variant|MODERATE|KDM6B|ENSG00000132510|transcript|ENST00000448097.6|protein_coding|11/23|c.1757G>A|p.Arg586Gln|2088/5422|1757/4932|586/1643||,A|downstream_gene_variant|MODIFIER|KDM6B|ENSG00000132510|transcript|ENST00000571047.5|processed_transcript||n.*2698G>A|||||2698|,A|downstream_gene_variant|MODIFIER|KDM6B|ENSG00000132510|transcript|ENST00000575521.1|processed_transcript||n.*3073G>A|||||3073|,A|downstream_gene_variant|MODIFIER|KDM6B|ENSG00000132510|transcript|ENST00000570632.1|protein_coding||c.*474G>A|||||474|WARNING_TRANSCRIPT_INCOMPLETE\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:2497:2409:83668:78:1176:0,-642.874,-7417.09\\t0/0:99:679:666:24333:13:156:0,-190.239,-2173.91\n17\\t4894305\\t.\\tT\\tC\\t7.47356E-14\\tPASS\\tSSC=267.869;TYPE=snp;OLD_MULTIALLELIC=17:4894305:T/G/C;ANN=C|synonymous_variant|LOW|MINK1|ENSG00000141503|transcript|ENST00000355280.10|protein_coding|23/32|c.2802T>C|p.Ser934Ser|2998/4961|2802/3999|934/1332||,C|synonymous_variant|LOW|MINK1|ENSG00000141503|transcript|ENST00000347992.11|protein_coding|23/32|c.2715T>C|p.Ser905Ser|2899/4863|2715/3912|905/1303||,C|synonymous_variant|LOW|MINK1|ENSG00000141503|transcript|ENST00000453408.7|protein_coding|23/32|c.2742T>C|p.Ser914Ser|2742/3939|2742/3939|914/1312||,C|3_prime_UTR_variant|MODIFIER|MINK1|ENSG00000141503|transcript|ENST00000574453.5|nonsense_mediated_decay|23/32|n.*2471T>C|||||13134|,C|3_prime_UTR_variant|MODIFIER|MINK1|ENSG00000141503|transcript|ENST00000571207.5|nonsense_mediated_decay|19/28|n.*1453T>C|||||3874|,C|upstream_gene_variant|MODIFIER|MINK1|ENSG00000141503|transcript|ENST00000574871.1|retained_intron||n.-239T>C|||||239|,C|upstream_gene_variant|MODIFIER|MINK1|ENSG00000141503|transcript|ENST00000575511.1|retained_intron||n.-553T>C|||||553|,C|upstream_gene_variant|MODIFIER|MINK1|ENSG00000141503|transcript|ENST00000576037.1|protein_coding||c.-1900T>C|||||1900|WARNING_TRANSCRIPT_NO_START_CODON,C|downstream_gene_variant|MODIFIER|CHRNE|ENSG00000108556|transcript|ENST00000293780.4|protein_coding||c.*4431A>G|||||3469|,C|downstream_gene_variant|MODIFIER|MINK1|ENSG00000141503|transcript|ENST00000572629.1|retained_intron||n.*655T>C|||||655|,C|downstream_gene_variant|MODIFIER|MINK1|ENSG00000141503|transcript|ENST00000571526.1|retained_intron||n.*434T>C|||||434|,C|downstream_gene_variant|MODIFIER|MINK1|ENSG00000141503|transcript|ENST00000572304.1|retained_intron||n.*89T>C|||||89|,C|downstream_gene_variant|MODIFIER|CHRNE|ENSG00000108556|transcript|ENST00000572438.1|retained_intron||n.*3752A>G|||||3752|,C|non_coding_transcript_exon_variant|MODIFIER|MINK1|ENSG00000141503|transcript|ENST00000574453.5|nonsense_mediated_decay|23/32|n.*2471T>C||||||,C|non_coding_transcript_exon_variant|MODIFIER|MINK1|ENSG00000141503|transcript|ENST00000572330.5|retained_intron|22/31|n.3584T>C||||||,C|non_coding_transcript_exon_variant|MODIFIER|MINK1|ENSG00000141503|transcript|ENST00000571207.5|nonsense_mediated_decay|19/28|n.*1453T>C||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:1159:1110:39728:30:410:0,-306.28,-3535.13\\t0/0:99:213:201:7501:5:70:0,-55.7099,-668.273\n22\\t17505004\\t.\\tG\\tA\\t0.0\\tPASS\\tSSC=233.422;TYPE=snp;ANN=A|missense_variant|MODERATE|CECR2|ENSG00000099954|transcript|ENST00000400585.6|protein_coding|7/19|c.369G>A|p.Met123Ile|807/4833|369/3903|123/1300||,A|missense_variant|MODERATE|CECR2|ENSG00000099954|transcript|ENST00000262608.12|protein_coding|7/19|c.369G>A|p.Met123Ile|754/4783|369/3906|123/1301||,A|missense_variant|MODERATE|CECR2|ENSG00000099954|transcript|ENST00000342247.9|protein_coding|7/20|c.858G>A|p.Met286Ile|1276/6178|858/4455|286/1484||,A|missense_variant|MODERATE|CECR2|ENSG00000099954|transcript|ENST00000612582.1|protein_coding|7/19|c.792G>A|p.Met264Ile|799/9645|792/4329|264/1442||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:943:941:36337:2:24:0,-281.591,-3264.69\\t0/0:99:213:207:8203:5:172:0,-48.1686,-722.01\n19\\t35633777\\t.\\tC\\tT\\t0.0\\tPASS\\tSSC=20.2972;TYPE=snp;ANN=T|synonymous_variant|LOW|RBM42|ENSG00000126254|transcript|ENST00000262633.8|protein_coding|7/10|c.775C>T|p.Leu259Leu|880/1680|775/1443|259/480||,T|synonymous_variant|LOW|RBM42|ENSG00000126254|transcript|ENST00000588161.5|protein_coding|6/9|c.685C>T|p.Leu229Leu|809/1609|685/1353|229/450||,T|synonymous_variant|LOW|RBM42|ENSG00000126254|transcript|ENST00000592202.5|protein_coding|5/8|c.613C>T|p.Leu205Leu|700/1469|613/1281|205/426||,T|synonymous_variant|LOW|RBM42|ENSG00000126254|transcript|ENST00000589559.5|protein_coding|6/8|c.688C>T|p.Leu230Leu|765/1328|688/1161|230/386||,T|synonymous_variant|LOW|RBM42|ENSG00000126254|transcript|ENST00000589871.1|protein_coding|6/9|c.709C>T|p.Leu237Leu|732/1487|709/1377|237/458||,T|downstream_gene_variant|MODIFIER|RBM42|ENSG00000126254|transcript|ENST00000592526.1|retained_intron||n.*1865C>T|||||1865|,T|intron_variant|MODIFIER|RBM42|ENSG00000126254|transcript|ENST00000586618.5|protein_coding|3/4|c.339+2581C>T||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:91:89:3533:2:24:0,-25.1137,-315.702\\t0/0:99:16:16:639:0:0:0,-4.81648,-57.8408\n6\\t99613712\\t.\\tC\\tG\\t0.0\\tPASS\\tSSC=62.8682;TYPE=snp;ANN=G|missense_variant|MODERATE|PRDM13|ENSG00000112238|transcript|ENST00000369215.4|protein_coding|4/4|c.1077C>G|p.His359Gln|1382/2429|1077/2124|359/707||,G|3_prime_UTR_variant|MODIFIER|PRDM13|ENSG00000112238|transcript|ENST00000369214.2|nonsense_mediated_decay|4/4|n.*739C>G|||||4464|,G|non_coding_transcript_exon_variant|MODIFIER|PRDM13|ENSG00000112238|transcript|ENST00000369214.2|nonsense_mediated_decay|4/4|n.*739C>G||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:217:217:8622:0:0:0,-65.3235,-775.43\\t0/0:99:34:32:1260:2:82:0,-2.45534,-105.884\n9\\t65737394\\t.\\tT\\tA\\t0.0\\tPASS\\tSSC=38.2653;TYPE=snp;ANN=A|synonymous_variant|LOW|FOXD4L4|ENSG00000184659|transcript|ENST00000377413.2|protein_coding|1/1|c.249T>A|p.Pro83Pro|840/2230|249/1251|83/416||,A|downstream_gene_variant|MODIFIER|CBWD5|ENSG00000147996|transcript|ENST00000382405.7|protein_coding||c.*3778T>A|||||3353|,A|downstream_gene_variant|MODIFIER|CBWD5|ENSG00000147996|transcript|ENST00000377389.5|nonsense_mediated_decay||n.*4887T>A|||||3721|,A|downstream_gene_variant|MODIFIER|CBWD5|ENSG00000147996|transcript|ENST00000497250.5|nonsense_mediated_decay||n.*4511T>A|||||3724|,A|downstream_gene_variant|MODIFIER|CBWD5|ENSG00000147996|transcript|ENST00000430059.6|protein_coding||c.*3778T>A|||||3720|,A|downstream_gene_variant|MODIFIER|CBWD5|ENSG00000147996|transcript|ENST00000486221.5|nonsense_mediated_decay||n.*4562T>A|||||3722|,A|downstream_gene_variant|MODIFIER|CBWD5|ENSG00000147996|transcript|ENST00000377395.8|protein_coding||c.*3778T>A|||||3718|,A|downstream_gene_variant|MODIFIER|CBWD5|ENSG00000147996|transcript|ENST00000461932.5|retained_intron||n.*3400T>A|||||3400|,A|downstream_gene_variant|MODIFIER|CBWD5|ENSG00000147996|transcript|ENST00000377392.9|protein_coding||c.*3778T>A|||||3354|,A|downstream_gene_variant|MODIFIER|CBWD5|ENSG00000147996|transcript|ENST00000480229.5|nonsense_mediated_decay||n.*4564T>A|||||3535|,A|downstream_gene_variant|MODIFIER|CBWD5|ENSG00000147996|transcript|ENST00000429800.6|protein_coding||c.*3778T>A|||||3721|,A|downstream_gene_variant|MODIFIER|CBWD5|ENSG00000147996|transcript|ENST00000476797.5|processed_transcript||n.*3721T>A|||||3721|,A|downstream_gene_variant|MODIFIER|CBWD5|ENSG00000147996|transcript|ENST00000485088.5|retained_intron||n.*3402T>A|||||3402|,A|downstream_gene_variant|MODIFIER|CBWD5|ENSG00000147996|transcript|ENST00000463075.1|retained_intron||n.*3722T>A|||||3722|,A|downstream_gene_variant|MODIFIER|CBWD5|ENSG00000147996|transcript|ENST00000491485.1|retained_intron||n.*3720T>A|||||3720|,A|downstream_gene_variant|MODIFIER|CBWD5|ENSG00000147996|transcript|ENST00000489273.1|protein_coding||c.*3778T>A|||||3723|WARNING_TRANSCRIPT_NO_START_CODON,A|downstream_gene_variant|MODIFIER|CBWD5|ENSG00000147996|transcript|ENST00000468066.5|processed_transcript||n.*3814T>A|||||3814|,A|downstream_gene_variant|MODIFIER|CBWD5|ENSG00000147996|transcript|ENST00000480819.6|retained_intron||n.*3723T>A|||||3723|,A|downstream_gene_variant|MODIFIER|CBWD5|ENSG00000147996|transcript|ENST00000486191.5|processed_transcript||n.*3747T>A|||||3747|\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:175:170:6441:5:139:0,-45.7911,-422.912\\t0/0:99:25:25:934:0:0:0,-7.52575,-65.7374\n7\\t105041014\\t.\\tC\\tA\\t3.82117E-14\\tPASS\\tSSC=44.903;TYPE=snp;ANN=A|missense_variant|MODERATE|KMT2E|ENSG00000005483|transcript|ENST00000257745.8|protein_coding|2/26|c.62C>A|p.Ala21Glu|448/6714|62/5577|21/1858||,A|missense_variant|MODERATE|KMT2E|ENSG00000005483|transcript|ENST00000311117.7|protein_coding|3/27|c.62C>A|p.Ala21Glu|607/6874|62/5577|21/1858||,A|missense_variant|MODERATE|KMT2E|ENSG00000005483|transcript|ENST00000495267.5|protein_coding|2/7|c.62C>A|p.Ala21Glu|504/1133|62/691|21/229||WARNING_TRANSCRIPT_INCOMPLETE,A|missense_variant|MODERATE|KMT2E|ENSG00000005483|transcript|ENST00000476671.5|protein_coding|3/15|c.62C>A|p.Ala21Glu|568/2523|62/1830|21/609||,A|missense_variant|MODERATE|KMT2E|ENSG00000005483|transcript|ENST00000474203.5|protein_coding|4/6|c.62C>A|p.Ala21Glu|466/617|62/213|21/70||WARNING_TRANSCRIPT_NO_STOP_CODON,A|missense_variant|MODERATE|KMT2E|ENSG00000005483|transcript|ENST00000478990.5|protein_coding|2/10|c.62C>A|p.Ala21Glu|506/1500|62/1056|21/351||WARNING_TRANSCRIPT_NO_STOP_CODON,A|downstream_gene_variant|MODIFIER|KMT2E|ENSG00000005483|transcript|ENST00000480368.5|processed_transcript||n.*158C>A|||||158|,A|non_coding_transcript_exon_variant|MODIFIER|KMT2E|ENSG00000005483|transcript|ENST00000334884.9|nonsense_mediated_decay|3/26|n.62C>A||||||,A|non_coding_transcript_exon_variant|MODIFIER|KMT2E|ENSG00000005483|transcript|ENST00000482560.6|nonsense_mediated_decay|2/14|n.62C>A||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:850:823:27658:23:286:0,-228.929,-2459.83\\t0/0:99:672:653:21767:15:190:0,-184.026,-1940.17\n3\\t9447999\\t.\\tC\\tG\\t0.0\\tPASS\\tSSC=381.417;TYPE=snp;ANN=G|missense_variant|MODERATE|SETD5|ENSG00000168137|transcript|ENST00000302463.10|protein_coding|14/22|c.1802C>G|p.Thr601Ser|2166/4786|1802/4035|601/1344||,G|missense_variant|MODERATE|SETD5|ENSG00000168137|transcript|ENST00000407969.5|protein_coding|13/21|c.2153C>G|p.Thr718Ser|2167/6463|2153/4386|718/1461||,G|missense_variant|MODERATE|SETD5|ENSG00000168137|transcript|ENST00000402198.5|protein_coding|15/23|c.2096C>G|p.Thr699Ser|2531/6827|2096/4329|699/1442||,G|missense_variant|MODERATE|SETD5|ENSG00000168137|transcript|ENST00000406341.5|protein_coding|14/22|c.2096C>G|p.Thr699Ser|2286/6582|2096/4329|699/1442||,G|missense_variant|MODERATE|SETD5|ENSG00000168137|transcript|ENST00000399686.6|protein_coding|6/14|c.1097C>G|p.Thr366Ser|1098/3362|1097/2733|366/910||WARNING_TRANSCRIPT_NO_START_CODON,G|missense_variant|MODERATE|SETD5|ENSG00000168137|transcript|ENST00000421188.1|protein_coding|1/7|c.29C>G|p.Thr10Ser|30/1323|29/1322|10/439||WARNING_TRANSCRIPT_INCOMPLETE,G|3_prime_UTR_variant|MODIFIER|SETD5|ENSG00000168137|transcript|ENST00000443339.5|nonsense_mediated_decay|17/20|n.*2356C>G|||||18085|,G|3_prime_UTR_variant|MODIFIER|SETD5|ENSG00000168137|transcript|ENST00000413704.5|nonsense_mediated_decay|6/14|n.*600C>G|||||2287|,G|upstream_gene_variant|MODIFIER|SETD5|ENSG00000168137|transcript|ENST00000478961.5|processed_transcript||n.-476C>G|||||476|,G|upstream_gene_variant|MODIFIER|SETD5|ENSG00000168137|transcript|ENST00000476740.1|processed_transcript||n.-560C>G|||||560|,G|downstream_gene_variant|MODIFIER|SETD5|ENSG00000168137|transcript|ENST00000497213.5|processed_transcript||n.*2267C>G|||||2267|,G|downstream_gene_variant|MODIFIER|SETD5|ENSG00000168137|transcript|ENST00000464410.1|retained_intron||n.*281C>G|||||281|,G|non_coding_transcript_exon_variant|MODIFIER|SETD5|ENSG00000168137|transcript|ENST00000493918.5|retained_intron|11/19|n.2260C>G||||||,G|non_coding_transcript_exon_variant|MODIFIER|SETD5|ENSG00000168137|transcript|ENST00000443339.5|nonsense_mediated_decay|17/20|n.*2356C>G||||||,G|non_coding_transcript_exon_variant|MODIFIER|SETD5|ENSG00000168137|transcript|ENST00000413704.5|nonsense_mediated_decay|6/14|n.*600C>G||||||,G|non_coding_transcript_exon_variant|MODIFIER|SETD5|ENSG00000168137|transcript|ENST00000466242.5|retained_intron|5/13|n.1437C>G||||||,G|non_coding_transcript_exon_variant|MODIFIER|SETD5|ENSG00000168137|transcript|ENST00000488236.5|processed_transcript|1/5|n.313C>G||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:2206:2158:85723:45:732:0,-597.376,-7639.94\\t0/0:99:811:795:31645:16:311:0,-215.959,-2816.74\n11\\t64810090\\t.\\tT\\tG\\t0.0\\tPASS\\tSSC=121.879;TYPE=snp;ANN=G|missense_variant|MODERATE|MEN1|ENSG00000133895|transcript|ENST00000377321.5|protein_coding|2/10|c.20A>C|p.Gln7Pro|88/2614|20/1728|7/575||,G|missense_variant|MODERATE|MEN1|ENSG00000133895|transcript|ENST00000312049.10|protein_coding|2/10|c.20A>C|p.Gln7Pro|130/2761|20/1833|7/610||,G|missense_variant|MODERATE|MEN1|ENSG00000133895|transcript|ENST00000424912.1|protein_coding|3/3|c.20A>C|p.Gln7Pro|396/816|20/440|7/145||WARNING_TRANSCRIPT_INCOMPLETE,G|missense_variant|MODERATE|MEN1|ENSG00000133895|transcript|ENST00000429702.5|protein_coding|2/2|c.20A>C|p.Gln7Pro|524/944|20/440|7/145||WARNING_TRANSCRIPT_INCOMPLETE,G|missense_variant|MODERATE|MEN1|ENSG00000133895|transcript|ENST00000377313.5|protein_coding|1/9|c.20A>C|p.Gln7Pro|43/1871|20/1848|7/615||,G|missense_variant|MODERATE|MEN1|ENSG00000133895|transcript|ENST00000413626.1|protein_coding|2/4|c.20A>C|p.Gln7Pro|107/870|20/783|7/260||WARNING_TRANSCRIPT_NO_STOP_CODON,G|missense_variant|MODERATE|MEN1|ENSG00000133895|transcript|ENST00000337652.5|protein_coding|2/10|c.20A>C|p.Gln7Pro|524/3162|20/1848|7/615||,G|missense_variant|MODERATE|MEN1|ENSG00000133895|transcript|ENST00000377316.6|protein_coding|1/8|c.20A>C|p.Gln7Pro|396/2868|20/1668|7/555||,G|missense_variant|MODERATE|MEN1|ENSG00000133895|transcript|ENST00000377326.7|protein_coding|1/9|c.20A>C|p.Gln7Pro|519/3150|20/1833|7/610||,G|missense_variant|MODERATE|MEN1|ENSG00000133895|transcript|ENST00000315422.8|protein_coding|2/10|c.20A>C|p.Gln7Pro|517/3148|20/1833|7/610||,G|missense_variant|MODERATE|MEN1|ENSG00000133895|transcript|ENST00000394374.6|protein_coding|2/10|c.20A>C|p.Gln7Pro|517/3155|20/1848|7/615||,G|missense_variant|MODERATE|MEN1|ENSG00000133895|transcript|ENST00000394376.5|protein_coding|3/11|c.20A>C|p.Gln7Pro|396/3034|20/1848|7/615||,G|missense_variant|MODERATE|MEN1|ENSG00000133895|transcript|ENST00000440873.5|protein_coding|2/7|c.20A>C|p.Gln7Pro|88/1107|20/1039|7/345||WARNING_TRANSCRIPT_INCOMPLETE,G|missense_variant|MODERATE|MEN1|ENSG00000133895|transcript|ENST00000450708.5|protein_coding|2/6|c.20A>C|p.Gln7Pro|99/922|20/843|7/280||WARNING_TRANSCRIPT_NO_STOP_CODON,G|upstream_gene_variant|MODIFIER|MEN1|ENSG00000133895|transcript|ENST00000478548.1|retained_intron||n.-3722A>C|||||3722|,G|upstream_gene_variant|MODIFIER|MEN1|ENSG00000133895|transcript|ENST00000487019.1|processed_transcript||n.-4098A>C|||||4098|\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:747:701:26219:44:584:0,-171.696,-2304.7\\t0/0:99:191:184:6864:7:84:0,-49.8168,-609.737\n1\\t22593326\\t.\\tC\\tT\\t0.0\\tPASS\\tSSC=130.137;TYPE=snp;ANN=T|missense_variant&splice_region_variant|MODERATE|EPHA8|ENSG00000070886|transcript|ENST00000166244.7|protein_coding|6/17|c.1316C>T|p.Ala439Val|1388/4943|1316/3018|439/1005||,T|downstream_gene_variant|MODIFIER|EPHA8|ENSG00000070886|transcript|ENST00000374644.8|protein_coding||c.*3947C>T|||||3705|\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:466:466:18718:0:0:0,-140.28,-1682.94\\t0/0:99:46:44:1756:2:39:0,-10.1426,-154.542\n7\\t151570202\\t.\\tT\\tA\\t1.45857E-14\\tPASS\\tSSC=111.852;TYPE=snp;ANN=A|stop_gained|HIGH|PRKAG2|ENSG00000106617|transcript|ENST00000287878.8|protein_coding|10/16|c.1075A>T|p.Lys359*|1580/3305|1075/1710|359/569||,A|stop_gained|HIGH|PRKAG2|ENSG00000106617|transcript|ENST00000418337.6|protein_coding|6/12|c.352A>T|p.Lys118*|606/2318|352/987|118/328||,A|stop_gained|HIGH|PRKAG2|ENSG00000106617|transcript|ENST00000392801.6|protein_coding|10/16|c.943A>T|p.Lys315*|1386/2281|943/1578|315/525||,A|stop_gained|HIGH|PRKAG2|ENSG00000106617|transcript|ENST00000476632.1|protein_coding|7/8|c.352A>T|p.Lys118*|986/1123|352/489|118/162||WARNING_TRANSCRIPT_NO_STOP_CODON,A|stop_gained|HIGH|PRKAG2|ENSG00000106617|transcript|ENST00000492843.5|protein_coding|8/14|c.703A>T|p.Lys235*|1024/2699|703/1338|235/445||,A|3_prime_UTR_variant|MODIFIER|PRKAG2|ENSG00000106617|transcript|ENST00000488258.5|nonsense_mediated_decay|9/10|n.*315A>T|||||25247|,A|3_prime_UTR_variant|MODIFIER|PRKAG2|ENSG00000106617|transcript|ENST00000493872.5|nonsense_mediated_decay|7/7|n.*324A>T|||||61439|,A|downstream_gene_variant|MODIFIER|PRKAG2|ENSG00000106617|transcript|ENST00000491938.5|retained_intron||n.*2206A>T|||||2206|,A|non_coding_transcript_exon_variant|MODIFIER|PRKAG2|ENSG00000106617|transcript|ENST00000488258.5|nonsense_mediated_decay|9/10|n.*315A>T||||||,A|non_coding_transcript_exon_variant|MODIFIER|PRKAG2|ENSG00000106617|transcript|ENST00000478989.5|nonsense_mediated_decay|3/8|n.127A>T||||||,A|non_coding_transcript_exon_variant|MODIFIER|PRKAG2|ENSG00000106617|transcript|ENST00000493872.5|nonsense_mediated_decay|7/7|n.*324A>T||||||;LOF=(PRKAG2|ENSG00000106617|16|0.25);NMD=(PRKAG2|ENSG00000106617|16|0.25)\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:764:741:26773:17:229:0,-207.573,-2386.51\\t0/0:99:345:337:12050:7:87:0,-95.7206,-1075.69\n18\\t55403662\\t.\\tG\\tA\\t0.0\\tPASS\\tSSC=17.3356;TYPE=snp;ANN=A|missense_variant|MODERATE|TCF4|ENSG00000196628|transcript|ENST00000564228.5|protein_coding|1/16|c.53C>T|p.Ser18Phe|53/1915|53/1791|18/596||,A|missense_variant|MODERATE|TCF4|ENSG00000196628|transcript|ENST00000544241.6|protein_coding|1/16|c.53C>T|p.Ser18Phe|334/2264|53/1803|18/600||,A|missense_variant|MODERATE|TCF4|ENSG00000196628|transcript|ENST00000630828.2|protein_coding|1/7|c.53C>T|p.Ser18Phe|103/735|53/685|18/227||WARNING_TRANSCRIPT_INCOMPLETE,A|5_prime_UTR_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000628078.2|protein_coding|1/8|c.-230C>T|||||52680|WARNING_TRANSCRIPT_INCOMPLETE,A|upstream_gene_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000562680.5|retained_intron||n.-1623C>T|||||1623|,A|upstream_gene_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000562638.5|protein_coding||c.-1995C>T|||||1950|WARNING_TRANSCRIPT_INCOMPLETE,A|upstream_gene_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000537856.7|protein_coding||c.-2101C>T|||||1905|,A|upstream_gene_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000570177.6|protein_coding||c.-1629C>T|||||1422|,A|upstream_gene_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000568186.5|protein_coding||c.-227C>T|||||2|WARNING_TRANSCRIPT_INCOMPLETE,A|upstream_gene_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000569012.5|protein_coding||c.-2184C>T|||||2111|WARNING_TRANSCRIPT_INCOMPLETE,A|upstream_gene_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000630268.2|protein_coding||c.-1626C>T|||||1456|WARNING_TRANSCRIPT_NO_STOP_CODON,A|upstream_gene_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000562030.3|protein_coding||c.-2683C>T|||||2137|WARNING_TRANSCRIPT_INCOMPLETE,A|upstream_gene_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000562607.5|protein_coding||c.-2680C>T|||||2569|WARNING_TRANSCRIPT_INCOMPLETE,A|upstream_gene_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000566376.3|processed_transcript||n.-157C>T|||||157|,A|upstream_gene_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000590810.5|protein_coding||c.-1790C>T|||||1623|WARNING_TRANSCRIPT_NO_STOP_CODON,A|upstream_gene_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000637250.1|processed_transcript||n.-2745C>T|||||2745|,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000398339.5|protein_coding|6/20|c.611-144C>T||||||,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000356073.8|protein_coding|5/19|c.305-144C>T||||||,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000543082.5|protein_coding|3/17|c.179-144C>T||||||,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000567880.5|protein_coding|4/16|c.305-144C>T||||||,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000566286.5|protein_coding|4/18|c.299-144C>T||||||,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000625716.2|processed_transcript|3/4|n.235-144C>T||||||,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000562543.5|protein_coding|5/6|c.305-144C>T||||||WARNING_TRANSCRIPT_INCOMPLETE,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000540999.5|protein_coding|4/18|c.233-144C>T||||||,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000537578.5|protein_coding|4/18|c.233-144C>T||||||,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000561992.5|protein_coding|1/15|c.-86-144C>T||||||,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000563686.5|retained_intron|2/7|n.160-144C>T||||||,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000566514.5|protein_coding|4/9|c.266-144C>T||||||WARNING_TRANSCRIPT_INCOMPLETE,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000630712.2|protein_coding|1/5|c.-86-144C>T||||||WARNING_TRANSCRIPT_INCOMPLETE,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000565908.6|protein_coding|4/8|c.233-144C>T||||||WARNING_TRANSCRIPT_INCOMPLETE,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000562847.5|protein_coding|5/6|c.68-144C>T||||||WARNING_TRANSCRIPT_INCOMPLETE,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000565580.3|processed_transcript|3/5|n.234-144C>T||||||,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000626425.2|protein_coding|4/7|c.233-144C>T||||||WARNING_TRANSCRIPT_NO_STOP_CODON,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000563824.5|protein_coding|3/5|c.233-144C>T||||||WARNING_TRANSCRIPT_INCOMPLETE,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000568147.5|protein_coding|4/6|c.269-144C>T||||||WARNING_TRANSCRIPT_INCOMPLETE,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000563888.6|protein_coding|4/6|c.233-144C>T||||||WARNING_TRANSCRIPT_NO_STOP_CODON,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000564343.5|protein_coding|4/5|c.233-144C>T||||||WARNING_TRANSCRIPT_NO_STOP_CODON,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000627784.2|protein_coding|5/6|c.305-144C>T||||||WARNING_TRANSCRIPT_NO_STOP_CODON,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000616053.4|protein_coding|5/17|c.233-144C>T||||||,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000564999.5|protein_coding|5/19|c.305-144C>T||||||,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000354452.7|protein_coding|5/19|c.305-144C>T||||||,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000629387.2|protein_coding|5/19|c.305-144C>T||||||,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000568673.5|protein_coding|4/18|c.233-144C>T||||||,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000568740.5|protein_coding|4/18|c.233-144C>T||||||,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000566279.5|protein_coding|5/17|c.305-144C>T||||||,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000565018.6|protein_coding|4/16|c.233-144C>T||||||,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000564403.6|protein_coding|5/19|c.305-144C>T||||||,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000626584.2|protein_coding|1/12|c.-164-144C>T||||||,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000629343.2|protein_coding|1/8|c.-22+18530C>T||||||WARNING_TRANSCRIPT_INCOMPLETE,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000628636.2|protein_coding|1/8|c.-86-144C>T||||||WARNING_TRANSCRIPT_INCOMPLETE,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000627136.2|processed_transcript|4/8|n.279-144C>T||||||,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000630319.2|protein_coding|1/6|c.74-144C>T||||||WARNING_TRANSCRIPT_INCOMPLETE,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000568169.5|protein_coding|4/9|c.317-144C>T||||||WARNING_TRANSCRIPT_INCOMPLETE,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000625925.2|protein_coding|1/6|c.-83-144C>T||||||WARNING_TRANSCRIPT_NO_STOP_CODON,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000566777.5|protein_coding|1/6|c.-86-144C>T||||||WARNING_TRANSCRIPT_INCOMPLETE,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000631043.2|processed_transcript|1/5|n.104-144C>T||||||,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000627685.2|protein_coding|4/8|c.233-144C>T||||||WARNING_TRANSCRIPT_NO_STOP_CODON,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000626595.2|protein_coding|5/9|c.305-144C>T||||||WARNING_TRANSCRIPT_NO_STOP_CODON,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000569357.4|nonsense_mediated_decay|5/6|n.*141-144C>T||||||,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000637239.1|processed_transcript|3/17|n.372-144C>T||||||,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000638154.1|protein_coding|4/18|c.305-144C>T||||||,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000637115.1|nonsense_mediated_decay|6/20|n.*195-144C>T||||||,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000635822.1|protein_coding|5/19|c.305-144C>T||||||,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000636400.1|protein_coding|5/19|c.233-144C>T||||||,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000636751.1|nonsense_mediated_decay|4/19|n.233-144C>T||||||,A|intron_variant|MODIFIER|TCF4|ENSG00000196628|transcript|ENST00000637500.1|processed_transcript|1/1|n.94-144C>T||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:110:109:4309:1:12:0,-31.9133,-386.542\\t0/0:99:56:54:2157:2:24:0,-14.5777,-192.014\n19\\t7911277\\t.\\tA\\tG\\t4.68907E-14\\tPASS\\tSSC=318.745;TYPE=snp;ANN=G|missense_variant|MODERATE|MAP2K7|ENSG00000076984|transcript|ENST00000397983.7|protein_coding|9/12|c.931A>G|p.Thr311Ala|991/3396|931/1308|311/435||,G|missense_variant|MODERATE|MAP2K7|ENSG00000076984|transcript|ENST00000397981.7|protein_coding|8/11|c.883A>G|p.Thr295Ala|985/3430|883/1281|295/426||,G|missense_variant|MODERATE|MAP2K7|ENSG00000076984|transcript|ENST00000397979.3|protein_coding|8/11|c.883A>G|p.Thr295Ala|937/3361|883/1260|295/419||,G|upstream_gene_variant|MODIFIER|TGFBR3L|ENSG00000260001|transcript|ENST00000565886.1|protein_coding||c.-4991A>G|||||4868|,G|downstream_gene_variant|MODIFIER|MAP2K7|ENSG00000076984|transcript|ENST00000475022.1|retained_intron||n.*4211A>G|||||4211|,G|downstream_gene_variant|MODIFIER|CTD-3193O13.13|ENSG00000268149|transcript|ENST00000595655.1|antisense||n.*1371T>C|||||1371|,G|downstream_gene_variant|MODIFIER|MAP2K7|ENSG00000076984|transcript|ENST00000494348.1|retained_intron||n.*172A>G|||||172|,G|downstream_gene_variant|MODIFIER|MAP2K7|ENSG00000076984|transcript|ENST00000465324.1|retained_intron||n.*542A>G|||||542|,G|non_coding_transcript_exon_variant|MODIFIER|MAP2K7|ENSG00000076984|transcript|ENST00000468058.1|retained_intron|7/10|n.1078A>G||||||,G|non_coding_transcript_exon_variant|MODIFIER|MAP2K7|ENSG00000076984|transcript|ENST00000498118.1|retained_intron|2/2|n.89A>G||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:1374:1338:45283:28:386:0,-376.47,-4037.32\\t0/0:99:226:217:7534:8:111:0,-57.7253,-667.65\n4\\t13544317\\t.\\tC\\tT\\t0.0\\tPASS\\tSSC=157.392;TYPE=snp;ANN=T|missense_variant|MODERATE|NKX3-2|ENSG00000109705|transcript|ENST00000382438.5|protein_coding|1/2|c.98G>A|p.Arg33His|734/2801|98/1002|33/333||,T|downstream_gene_variant|MODIFIER|LINC01096|ENSG00000246095|transcript|ENST00000501050.1|lincRNA||n.*1759G>A|||||1759|,T|downstream_gene_variant|MODIFIER|LINC01096|ENSG00000246095|transcript|ENST00000503938.1|lincRNA||n.*1758G>A|||||1758|\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:560:560:22471:0:0:0,-168.577,-2020.3\\t0/0:99:63:61:2461:2:82:0,-11.1852,-213.834\n7\\t151570191\\t.\\tC\\tA\\t4.55042E-14\\tPASS\\tSSC=108.562;TYPE=snp;ANN=A|splice_region_variant&non_coding_transcript_exon_variant|LOW|PRKAG2|ENSG00000106617|transcript|ENST00000493872.5|nonsense_mediated_decay|7/7|n.*335G>T||||||,A|synonymous_variant|LOW|PRKAG2|ENSG00000106617|transcript|ENST00000287878.8|protein_coding|10/16|c.1086G>T|p.Val362Val|1591/3305|1086/1710|362/569||,A|synonymous_variant|LOW|PRKAG2|ENSG00000106617|transcript|ENST00000418337.6|protein_coding|6/12|c.363G>T|p.Val121Val|617/2318|363/987|121/328||,A|synonymous_variant|LOW|PRKAG2|ENSG00000106617|transcript|ENST00000392801.6|protein_coding|10/16|c.954G>T|p.Val318Val|1397/2281|954/1578|318/525||,A|synonymous_variant|LOW|PRKAG2|ENSG00000106617|transcript|ENST00000476632.1|protein_coding|7/8|c.363G>T|p.Val121Val|997/1123|363/489|121/162||WARNING_TRANSCRIPT_NO_STOP_CODON,A|synonymous_variant|LOW|PRKAG2|ENSG00000106617|transcript|ENST00000492843.5|protein_coding|8/14|c.714G>T|p.Val238Val|1035/2699|714/1338|238/445||,A|3_prime_UTR_variant|MODIFIER|PRKAG2|ENSG00000106617|transcript|ENST00000488258.5|nonsense_mediated_decay|9/10|n.*326G>T|||||25258|,A|3_prime_UTR_variant|MODIFIER|PRKAG2|ENSG00000106617|transcript|ENST00000493872.5|nonsense_mediated_decay|7/7|n.*335G>T|||||61450|,A|downstream_gene_variant|MODIFIER|PRKAG2|ENSG00000106617|transcript|ENST00000491938.5|retained_intron||n.*2217G>T|||||2217|,A|non_coding_transcript_exon_variant|MODIFIER|PRKAG2|ENSG00000106617|transcript|ENST00000488258.5|nonsense_mediated_decay|9/10|n.*326G>T||||||,A|non_coding_transcript_exon_variant|MODIFIER|PRKAG2|ENSG00000106617|transcript|ENST00000478989.5|nonsense_mediated_decay|3/8|n.138G>T||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:754:726:24946:20:265:0,-200.714,-2219.11\\t0/0:99:345:332:11540:10:120:0,-92.1523,-1026.9\n3\\t44721521\\t.\\tG\\tT\\t32.7588\\tPASS\\tSSC=8.68277;TYPE=snp;ANN=T|missense_variant|MODERATE|ZNF502|ENSG00000196653|transcript|ENST00000296091.8|protein_coding|4/4|c.704G>T|p.Gly235Val|960/3270|704/1635|235/544||,T|missense_variant|MODERATE|ZNF502|ENSG00000196653|transcript|ENST00000436624.6|protein_coding|3/3|c.704G>T|p.Gly235Val|858/2314|704/1635|235/544||,T|missense_variant|MODERATE|ZNF502|ENSG00000196653|transcript|ENST00000449836.5|protein_coding|3/3|c.704G>T|p.Gly235Val|865/3173|704/1635|235/544||,T|downstream_gene_variant|MODIFIER|ZNF502|ENSG00000196653|transcript|ENST00000411443.1|protein_coding||c.*239G>T|||||239|WARNING_TRANSCRIPT_NO_STOP_CODON\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:28.6358:6:6:204:0:0:0,-1.80618,-18.6824\\t0/1:32.1936:3:1:41:2:82:-6.87659,0,-3.19148\n5\\t57482408\\t.\\tATCTGGT\\tCTCGGGA\\t0.0\\tPASS\\tSSC=51.3288;TYPE=complex;ANN=CTCGGGA|missense_variant|MODERATE|ACTBL2|ENSG00000169067|transcript|ENST00000423391.2|protein_coding|1/1|c.294_300delACCAGATinsTCCCGAG|p.Asp100Glu|402/2794|294/1131|98/376||,CTCGGGA|intron_variant|MODIFIER|CTD-2023N9.1|ENSG00000250961|transcript|ENST00000506106.1|antisense|1/3|n.120-11667_120-11661delATCTGGTinsCTCGGGA||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:197:196:7835:0:0:0,-63.8184,-758.476\\t0/0:99:61:58:2274:2:80:0,-12.4896,-217.738\n1\\t53594360\\t.\\tG\\tT\\t0.0\\tPASS\\tSSC=177.655;TYPE=snp;ANN=T|synonymous_variant|LOW|GLIS1|ENSG00000174332|transcript|ENST00000312233.4|protein_coding|3/10|c.543C>A|p.Gly181Gly|1110/2812|543/1863|181/620||,T|synonymous_variant|LOW|GLIS1|ENSG00000174332|transcript|ENST00000628545.1|protein_coding|3/10|c.1068C>A|p.Gly356Gly|1110/2807|1068/2388|356/795||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:665:663:26240:1:41:0,-196.054,-2355.23\\t0/0:99:89:86:3430:3:90:0,-18.3988,-300.336\n10\\t112950777\\t.\\tT\\tA\\t5.71366E-14\\tPASS\\tSSC=173.418;TYPE=snp;ANN=A|synonymous_variant|LOW|TCF7L2|ENSG00000148737|transcript|ENST00000355995.8|protein_coding|1/15|c.21T>A|p.Gly7Gly|528/4073|21/1860|7/619||,A|synonymous_variant|LOW|TCF7L2|ENSG00000148737|transcript|ENST00000534894.5|protein_coding|1/11|c.21T>A|p.Gly7Gly|528/3778|21/1227|7/408||,A|synonymous_variant|LOW|TCF7L2|ENSG00000148737|transcript|ENST00000536810.5|protein_coding|1/13|c.21T>A|p.Gly7Gly|528/3953|21/1740|7/579||,A|synonymous_variant|LOW|TCF7L2|ENSG00000148737|transcript|ENST00000538897.5|protein_coding|1/14|c.21T>A|p.Gly7Gly|528/4000|21/1449|7/482||,A|synonymous_variant|LOW|TCF7L2|ENSG00000148737|transcript|ENST00000543371.5|protein_coding|1/14|c.21T>A|p.Gly7Gly|528/4037|21/1824|7/607||,A|synonymous_variant|LOW|TCF7L2|ENSG00000148737|transcript|ENST00000627217.2|protein_coding|1/14|c.21T>A|p.Gly7Gly|371/3680|21/1809|7/602||,A|synonymous_variant|LOW|TCF7L2|ENSG00000148737|transcript|ENST00000369397.8|protein_coding|1/14|c.21T>A|p.Gly7Gly|326/3802|21/1791|7/596||,A|synonymous_variant|LOW|TCF7L2|ENSG00000148737|transcript|ENST00000355717.9|protein_coding|1/13|c.21T>A|p.Gly7Gly|192/1979|21/1470|7/489||,A|synonymous_variant|LOW|TCF7L2|ENSG00000148737|transcript|ENST00000352065.10|protein_coding|1/15|c.21T>A|p.Gly7Gly|118/1553|21/1380|7/459||,A|synonymous_variant|LOW|TCF7L2|ENSG00000148737|transcript|ENST00000545257.6|protein_coding|1/15|c.21T>A|p.Gly7Gly|114/2160|21/1431|7/476||,A|synonymous_variant|LOW|TCF7L2|ENSG00000148737|transcript|ENST00000629706.2|protein_coding|1/13|c.21T>A|p.Gly7Gly|21/1755|21/1755|7/584||,A|synonymous_variant|LOW|TCF7L2|ENSG00000148737|transcript|ENST00000369395.6|protein_coding|1/15|c.21T>A|p.Gly7Gly|118/1541|21/1368|7/455||,A|5_prime_UTR_variant|MODIFIER|TCF7L2|ENSG00000148737|transcript|ENST00000542695.5|protein_coding|1/15|c.-298T>A|||||768|,A|upstream_gene_variant|MODIFIER|TCF7L2|ENSG00000148737|transcript|ENST00000346198.5|protein_coding||c.-139T>A|||||139|WARNING_TRANSCRIPT_INCOMPLETE,A|non_coding_transcript_exon_variant|MODIFIER|RP11-57H14.2|ENSG00000233547|transcript|ENST00000369391.3|antisense|2/2|n.329A>T||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:1483:1392:45103:61:912:0,-355.306,-3973.74\\t0/0:99:760:708:24073:29:444:0,-181.888,-2124.43\n14\\t50428753\\t.\\tT\\tC\\t2.001E-14\\tPASS\\tSSC=155.498;TYPE=snp;ANN=C|splice_region_variant&synonymous_variant|LOW|MAP4K5|ENSG00000012983|transcript|ENST00000013125.8|protein_coding|29/32|c.2235A>G|p.Lys745Lys|2554/4354|2235/2541|745/846||,C|splice_region_variant&non_coding_transcript_exon_variant|LOW|MAP4K5|ENSG00000012983|transcript|ENST00000554990.5|retained_intron|15/18|n.2988A>G||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:935:913:31825:22:289:0,-255.322,-2835.73\\t0/0:99:376:365:12759:11:147:0,-99.8239,-1134.2\n19\\t50416471\\t.\\tC\\tT\\t0.0\\tPASS\\tSSC=124.579;TYPE=snp;ANN=T|missense_variant|MODERATE|POLD1|ENSG00000062822|transcript|ENST00000595904.5|protein_coding|22/26|c.2974C>T|p.Leu992Phe|2974/3402|2974/3402|992/1133||,T|missense_variant|MODERATE|POLD1|ENSG00000062822|transcript|ENST00000440232.6|protein_coding|23/27|c.2896C>T|p.Leu966Phe|2949/3444|2896/3324|966/1107||,T|missense_variant|MODERATE|POLD1|ENSG00000062822|transcript|ENST00000599857.5|protein_coding|23/27|c.2896C>T|p.Leu966Phe|2940/3435|2896/3324|966/1107||,T|missense_variant|MODERATE|CTD-2545M3.6|ENSG00000142539|transcript|ENST00000599632.1|protein_coding|2/10|c.103C>T|p.Leu35Phe|104/1265|103/1191|35/396||WARNING_TRANSCRIPT_NO_START_CODON,T|missense_variant|MODERATE|POLD1|ENSG00000062822|transcript|ENST00000613923.4|protein_coding|23/27|c.2974C>T|p.Leu992Phe|3043/3542|2974/3402|992/1133||,T|missense_variant|MODERATE|POLD1|ENSG00000062822|transcript|ENST00000593407.5|protein_coding|6/8|c.676C>T|p.Leu226Phe|677/867|676/866|226/287||WARNING_TRANSCRIPT_INCOMPLETE,T|missense_variant|MODERATE|POLD1|ENSG00000062822|transcript|ENST00000593981.1|protein_coding|5/8|c.520C>T|p.Leu174Phe|522/873|520/871|174/289||WARNING_TRANSCRIPT_INCOMPLETE,T|upstream_gene_variant|MODIFIER|SPIB|ENSG00000269404|transcript|ENST00000595883.5|protein_coding||c.-2492C>T|||||2467|,T|upstream_gene_variant|MODIFIER|SPIB|ENSG00000269404|transcript|ENST00000270632.7|protein_coding||c.-2492C>T|||||2487|,T|upstream_gene_variant|MODIFIER|POLD1|ENSG00000062822|transcript|ENST00000596221.1|retained_intron||n.-482C>T|||||482|,T|upstream_gene_variant|MODIFIER|SPIB|ENSG00000269404|transcript|ENST00000439922.6|protein_coding||c.-2550C>T|||||2467|,T|upstream_gene_variant|MODIFIER|SPIB|ENSG00000269404|transcript|ENST00000596074.5|protein_coding||c.-2492C>T|||||2470|,T|upstream_gene_variant|MODIFIER|SPIB|ENSG00000269404|transcript|ENST00000594685.1|protein_coding||c.-2492C>T|||||2483|WARNING_TRANSCRIPT_INCOMPLETE,T|upstream_gene_variant|MODIFIER|SPIB|ENSG00000269404|transcript|ENST00000599923.5|retained_intron||n.-2468C>T|||||2468|,T|upstream_gene_variant|MODIFIER|SPIB|ENSG00000269404|transcript|ENST00000594188.1|retained_intron||n.-2470C>T|||||2470|,T|upstream_gene_variant|MODIFIER|SPIB|ENSG00000269404|transcript|ENST00000597855.5|protein_coding||c.-2492C>T|||||2470|,T|downstream_gene_variant|MODIFIER|POLD1|ENSG00000062822|transcript|ENST00000596425.1|protein_coding||c.*2970C>T|||||2970|WARNING_TRANSCRIPT_INCOMPLETE,T|non_coding_transcript_exon_variant|MODIFIER|POLD1|ENSG00000062822|transcript|ENST00000600859.5|nonsense_mediated_decay|22/26|n.2793C>T||||||,T|non_coding_transcript_exon_variant|MODIFIER|POLD1|ENSG00000062822|transcript|ENST00000597963.5|retained_intron|1/4|n.159C>T||||||,T|non_coding_transcript_exon_variant|MODIFIER|POLD1|ENSG00000062822|transcript|ENST00000596648.1|retained_intron|2/4|n.830C>T||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:476:476:18787:0:0:0,-143.29,-1689.23\\t0/0:99:88:86:3411:2:82:0,-18.711,-299.241\n16\\t4337131\\t.\\tT\\tTG\\t0.0\\tPASS\\tSSC=283.339;TYPE=ins;OLD_MULTIALLELIC=16:4337131:TGGGGGGGGCAT/TGGGGGGGGGCAT/GGGGGGGGGCAT;OLD_VARIANT=16:4337131:TGGGGGGGGCAT/TGGGGGGGGGCAT;ANN=TG|frameshift_variant|HIGH|GLIS2|ENSG00000126603|transcript|ENST00000433375.1|protein_coding|6/6|c.1190dupG|p.Met398fs|1248/3705|1191/1575|397/524||INFO_REALIGN_3_PRIME,TG|frameshift_variant|HIGH|GLIS2|ENSG00000126603|transcript|ENST00000262366.7|protein_coding|8/8|c.1190dupG|p.Met398fs|2012/4469|1191/1575|397/524||INFO_REALIGN_3_PRIME,TG|downstream_gene_variant|MODIFIER|PAM16|ENSG00000217930|transcript|ENST00000318059.7|protein_coding||c.*3187dupC|||||3116|,TG|downstream_gene_variant|MODIFIER|PAM16|ENSG00000217930|transcript|ENST00000573236.5|retained_intron||n.*3117dupC|||||3117|,TG|downstream_gene_variant|MODIFIER|CORO7-PAM16|ENSG00000103426|transcript|ENST00000572467.5|protein_coding||c.*3187dupC|||||3119|,TG|downstream_gene_variant|MODIFIER|PAM16|ENSG00000217930|transcript|ENST00000573450.5|processed_transcript||n.*3119dupC|||||3119|,TG|downstream_gene_variant|MODIFIER|PAM16|ENSG00000217930|transcript|ENST00000573553.5|protein_coding||c.*3187dupC|||||3119|,TG|downstream_gene_variant|MODIFIER|CORO7-PAM16|ENSG00000103426|transcript|ENST00000575334.5|nonsense_mediated_decay||n.*4860dupC|||||3119|,TG|downstream_gene_variant|MODIFIER|PAM16|ENSG00000217930|transcript|ENST00000571941.5|protein_coding||c.*3187dupC|||||3119|,TG|downstream_gene_variant|MODIFIER|PAM16|ENSG00000217930|transcript|ENST00000575848.5|protein_coding||c.*3187dupC|||||3119|,TG|downstream_gene_variant|MODIFIER|PAM16|ENSG00000217930|transcript|ENST00000575636.5|nonsense_mediated_decay||n.*3458dupC|||||3119|,TG|downstream_gene_variant|MODIFIER|PAM16|ENSG00000217930|transcript|ENST00000571986.5|nonsense_mediated_decay||n.*3458dupC|||||3119|,TG|downstream_gene_variant|MODIFIER|PAM16|ENSG00000217930|transcript|ENST00000571178.1|nonsense_mediated_decay||n.*3360dupC|||||3186|,TG|downstream_gene_variant|MODIFIER|PAM16|ENSG00000217930|transcript|ENST00000573614.5|processed_transcript||n.*3119dupC|||||3119|,TG|downstream_gene_variant|MODIFIER|PAM16|ENSG00000217930|transcript|ENST00000576217.1|protein_coding||c.*3187dupC|||||3119|,TG|downstream_gene_variant|MODIFIER|CORO7-PAM16|ENSG00000103426|transcript|ENST00000572274.1|processed_transcript||n.*3809dupC|||||3809|,TG|downstream_gene_variant|MODIFIER|PAM16|ENSG00000217930|transcript|ENST00000571819.1|processed_transcript||n.*4520dupC|||||4520|,TG|intron_variant|MODIFIER|PAM16|ENSG00000217930|transcript|ENST00000577031.5|protein_coding|4/4|c.291+3788dupC||||||,TG|non_coding_transcript_exon_variant|MODIFIER|RP11-295D4.1|ENSG00000262712|transcript|ENST00000574705.1|sense_intronic|1/1|n.687dupC||||||;LOF=(GLIS2|ENSG00000126603|2|1.00)\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:994:923:36342:33:1111:0,-322.811,-3219.44\\t0/0:99:105:93:3665:3:123:0,-39.4717,-325.383\n12\\t49051739\\t.\\tA\\tT\\t1.16443E-13\\tPASS\\tSSC=411.947;TYPE=snp;ANN=T|synonymous_variant|LOW|KMT2D|ENSG00000167548|transcript|ENST00000301067.11|protein_coding|10/54|c.1944T>A|p.Pro648Pro|1944/19419|1944/16614|648/5537||,T|downstream_gene_variant|MODIFIER|KMT2D|ENSG00000167548|transcript|ENST00000547610.1|protein_coding||c.*2641T>A|||||2641|WARNING_TRANSCRIPT_INCOMPLETE\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:2176:2063:71414:100:1355:0,-529.173,-6298.78\\t0/0:99:442:428:14910:12:169:0,-117.226,-1325.59\n9\\t21971181\\t.\\tC\\tT\\t2.57703E-15\\tPASS\\tSSC=81.231;TYPE=snp;ANN=T|missense_variant|MODERATE|CDKN2A|ENSG00000147889|transcript|ENST00000498124.1|protein_coding|2/4|c.178G>A|p.Ala60Thr|217/880|178/504|60/167||,T|missense_variant|MODERATE|CDKN2A|ENSG00000147889|transcript|ENST00000304494.9|protein_coding|2/3|c.178G>A|p.Ala60Thr|449/1218|178/471|60/156||,T|missense_variant|MODERATE|CDKN2A|ENSG00000147889|transcript|ENST00000579755.1|protein_coding|2/3|c.221G>A|p.Gly74Asp|514/1283|221/399|74/132||,T|missense_variant|MODERATE|CDKN2A|ENSG00000147889|transcript|ENST00000578845.2|protein_coding|1/2|c.25G>A|p.Ala9Thr|152/678|25/318|9/105||,T|missense_variant|MODERATE|CDKN2A|ENSG00000147889|transcript|ENST00000498628.6|protein_coding|2/3|c.25G>A|p.Ala9Thr|509/926|25/318|9/105||,T|missense_variant|MODERATE|CDKN2A|ENSG00000147889|transcript|ENST00000579122.1|protein_coding|2/3|c.178G>A|p.Ala60Thr|209/666|178/417|60/138||,T|missense_variant|MODERATE|CDKN2A|ENSG00000147889|transcript|ENST00000494262.5|protein_coding|3/4|c.25G>A|p.Ala9Thr|649/989|25/318|9/105||,T|missense_variant|MODERATE|CDKN2A|ENSG00000147889|transcript|ENST00000497750.1|protein_coding|2/2|c.25G>A|p.Ala9Thr|100/565|25/315|9/104||,T|missense_variant|MODERATE|CDKN2A|ENSG00000147889|transcript|ENST00000530628.2|protein_coding|2/3|c.221G>A|p.Gly74Asp|301/748|221/399|74/132||,T|missense_variant|MODERATE|CDKN2A|ENSG00000147889|transcript|ENST00000479692.2|protein_coding|2/3|c.25G>A|p.Ala9Thr|40/544|25/366|9/121||,T|3_prime_UTR_variant|MODIFIER|CDKN2A|ENSG00000147889|transcript|ENST00000380151.3|nonsense_mediated_decay|2/3|n.*101G>A|||||3296|,T|upstream_gene_variant|MODIFIER|CDKN2A|ENSG00000147889|transcript|ENST00000577854.1|processed_transcript||n.-714G>A|||||714|,T|downstream_gene_variant|MODIFIER|CDKN2A-AS1|ENSG00000224854|transcript|ENST00000441769.3|lincRNA||n.*3430C>T|||||3430|,T|intron_variant|MODIFIER|RP11-145E5.5|ENSG00000264545|transcript|ENST00000404796.2|nonsense_mediated_decay|4/5|n.348-58252C>T||||||,T|non_coding_transcript_exon_variant|MODIFIER|CDKN2A|ENSG00000147889|transcript|ENST00000380151.3|nonsense_mediated_decay|2/3|n.*101G>A||||||,T|non_coding_transcript_exon_variant|MODIFIER|CDKN2A|ENSG00000147889|transcript|ENST00000380150.2|processed_transcript|1/2|n.152G>A||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:307:306:12215:0:0:0,-92.1152,-1098.27\\t0/0:99:62:60:2387:2:82:0,-10.8842,-207.182\n5\\t87383752\\t.\\tG\\tC\\t6.08732E-15\\tPASS\\tSSC=53.614;TYPE=snp;ANN=C|synonymous_variant|LOW|RASA1|ENSG00000145715|transcript|ENST00000274376.10|protein_coding|21/25|c.2730G>C|p.Leu910Leu|3294/3752|2730/3144|910/1047||,C|synonymous_variant|LOW|RASA1|ENSG00000145715|transcript|ENST00000456692.6|protein_coding|21/25|c.2199G>C|p.Leu733Leu|2314/3776|2199/2613|733/870||,C|synonymous_variant|LOW|RASA1|ENSG00000145715|transcript|ENST00000512763.5|protein_coding|22/26|c.2229G>C|p.Leu743Leu|2430/3060|2229/2643|743/880||,C|synonymous_variant|LOW|RASA1|ENSG00000145715|transcript|ENST00000506290.1|protein_coding|22/26|c.2232G>C|p.Leu744Leu|2349/3009|2232/2646|744/881||,C|3_prime_UTR_variant|MODIFIER|RASA1|ENSG00000145715|transcript|ENST00000515800.6|nonsense_mediated_decay|22/26|n.*1255G>C|||||17392|,C|non_coding_transcript_exon_variant|MODIFIER|RASA1|ENSG00000145715|transcript|ENST00000515800.6|nonsense_mediated_decay|22/26|n.*1255G>C||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:742:719:26782:17:204:0,-203.198,-2389.48\\t0/0:99:552:536:20533:14:178:0,-149.584,-1829.98\n19\\t38395985\\t.\\tC\\tG\\t3.49569E-14\\tPASS\\tSSC=101.701;TYPE=snp;ANN=G|missense_variant|MODERATE|SPRED3|ENSG00000188766|transcript|ENST00000338502.8|protein_coding|5/5|c.1073C>G|p.Pro358Arg|1176/4778|1073/1233|358/410||,G|missense_variant|MODERATE|SPRED3|ENSG00000188766|transcript|ENST00000587013.5|protein_coding|5/5|c.1205C>G|p.Pro402Arg|1283/1539|1205/1365|402/454||,G|missense_variant|MODERATE|SPRED3|ENSG00000188766|transcript|ENST00000586301.5|protein_coding|6/6|c.1073C>G|p.Pro358Arg|1203/1366|1073/1233|358/410||,G|downstream_gene_variant|MODIFIER|SPRED3|ENSG00000188766|transcript|ENST00000587564.2|processed_transcript||n.*1509C>G|||||1509|,G|downstream_gene_variant|MODIFIER|SPRED3|ENSG00000188766|transcript|ENST00000586958.1|nonsense_mediated_decay||n.*1423C>G|||||1315|,G|downstream_gene_variant|MODIFIER|SPRED3|ENSG00000188766|transcript|ENST00000587947.5|protein_coding||c.*1222C>G|||||1222|WARNING_TRANSCRIPT_INCOMPLETE,G|downstream_gene_variant|MODIFIER|SPRED3|ENSG00000188766|transcript|ENST00000590962.1|retained_intron||n.*3338C>G|||||3338|\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:369:369:14689:0:0:0,-111.08,-1320.79\\t0/0:99:57:55:2167:2:82:0,-9.37903,-187.417\n11\\t65599516\\t.\\tAGC\\tGGG\\t9.52344E-15\\tPASS\\tSSC=163.894;TYPE=complex;OLD_MULTIALLELIC=11:65599516:AGC/GGG/GGC;ANN=GGG|missense_variant|MODERATE|MAP3K11|ENSG00000173327|transcript|ENST00000309100.7|protein_coding|9/10|c.2082_2084delGCTinsCCC|p.Leu695Pro|2570/3566|2082/2544|694/847||,GGG|missense_variant|MODERATE|MAP3K11|ENSG00000173327|transcript|ENST00000532507.5|protein_coding|4/5|c.330_332delGCTinsCCC|p.Leu111Pro|817/1812|330/792|110/263||,GGG|missense_variant|MODERATE|MAP3K11|ENSG00000173327|transcript|ENST00000530153.5|protein_coding|9/10|c.1311_1313delGCTinsCCC|p.Leu438Pro|1835/2830|1311/1773|437/590||,GGG|3_prime_UTR_variant|MODIFIER|MAP3K11|ENSG00000173327|transcript|ENST00000524848.5|nonsense_mediated_decay|8/9|n.*550_*552delGCTinsCCC|||||7244|,GGG|upstream_gene_variant|MODIFIER|KCNK7|ENSG00000173338|transcript|ENST00000340313.4|protein_coding||c.-3746_-3744delGCTinsCCC|||||3520|,GGG|upstream_gene_variant|MODIFIER|KCNK7|ENSG00000173338|transcript|ENST00000342202.8|protein_coding||c.-3746_-3744delGCTinsCCC|||||3708|,GGG|upstream_gene_variant|MODIFIER|KCNK7|ENSG00000173338|transcript|ENST00000394216.6|protein_coding||c.-3746_-3744delGCTinsCCC|||||3520|,GGG|upstream_gene_variant|MODIFIER|KCNK7|ENSG00000173338|transcript|ENST00000394217.6|protein_coding||c.-3746_-3744delGCTinsCCC|||||3520|,GGG|non_coding_transcript_exon_variant|MODIFIER|MAP3K11|ENSG00000173327|transcript|ENST00000524848.5|nonsense_mediated_decay|8/9|n.*550_*552delGCTinsCCC||||||,GGG|non_coding_transcript_exon_variant|MODIFIER|MAP3K11|ENSG00000173327|transcript|ENST00000534432.1|processed_transcript|5/5|n.597_599delGCTinsCCC||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:803:745:27288:17:236:0,-213.21,-2457.46\\t0/0:99:171:163:6033:2:24:0,-49.3161,-552.777\n17\\t39530715\\t.\\tA\\tT\\t0.0\\tPASS\\tSSC=450.606;TYPE=snp;ANN=T|missense_variant|MODERATE|CDK12|ENSG00000167258|transcript|ENST00000447079.4|protein_coding|14/14|c.3872A>T|p.Gln1291Leu|3905/8336|3872/4473|1291/1490||,T|missense_variant|MODERATE|CDK12|ENSG00000167258|transcript|ENST00000430627.6|protein_coding|14/14|c.3845A>T|p.Gln1282Leu|4156/5918|3845/4446|1282/1481||,T|downstream_gene_variant|MODIFIER|CDK12|ENSG00000167258|transcript|ENST00000584632.5|protein_coding||c.*4552A>T|||||4552|WARNING_TRANSCRIPT_INCOMPLETE,T|intron_variant|MODIFIER|CDK12|ENSG00000167258|transcript|ENST00000559663.1|nonsense_mediated_decay|1/4|n.448+4399A>T||||||,T|non_coding_transcript_exon_variant|MODIFIER|CDK12|ENSG00000167258|transcript|ENST00000584336.1|retained_intron|1/1|n.834A>T||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:2289:2218:80248:70:880:0,-609.552,-7135.65\\t0/0:99:579:567:21001:12:169:0,-158.946,-1873.01\n19\\t18768684\\t.\\tT\\tA\\t0.0\\tPASS\\tSSC=168.819;TYPE=snp;ANN=A|missense_variant|MODERATE|CRTC1|ENSG00000105662|transcript|ENST00000338797.10|protein_coding|11/15|c.1259T>A|p.Leu420Gln|1284/6929|1259/1953|420/650||,A|missense_variant|MODERATE|CRTC1|ENSG00000105662|transcript|ENST00000321949.12|protein_coding|10/14|c.1211T>A|p.Leu404Gln|1237/2501|1211/1905|404/634||,A|missense_variant|MODERATE|CRTC1|ENSG00000105662|transcript|ENST00000594658.5|protein_coding|10/14|c.1088T>A|p.Leu363Gln|1120/2384|1088/1782|363/593||,A|intron_variant|MODIFIER|CRTC1|ENSG00000105662|transcript|ENST00000601916.1|protein_coding|8/9|c.786+3156T>A||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:805:771:28444:34:488:0,-198.271,-2513.49\\t0/0:99:109:106:4015:3:36:0,-29.4523,-357.979\n9\\t93308569\\t.\\tT\\tG\\t3.0256E-14\\tPASS\\tSSC=79.0426;TYPE=snp;ANN=G|synonymous_variant|LOW|WNK2|ENSG00000165238|transcript|ENST00000297954.8|protein_coding|28/30|c.6612T>G|p.Pro2204Pro|6612/7138|6612/6894|2204/2297||,G|synonymous_variant|LOW|WNK2|ENSG00000165238|transcript|ENST00000432730.5|protein_coding|27/29|c.6486T>G|p.Pro2162Pro|6488/7792|6486/6660|2162/2219||WARNING_TRANSCRIPT_NO_START_CODON,G|synonymous_variant|LOW|WNK2|ENSG00000165238|transcript|ENST00000411624.5|protein_coding|21/22|c.4974T>G|p.Pro1658Pro|4975/6679|4974/5319|1658/1772||WARNING_TRANSCRIPT_NO_START_CODON,G|synonymous_variant|LOW|WNK2|ENSG00000165238|transcript|ENST00000448251.5|protein_coding|13/15|c.2889T>G|p.Pro963Pro|2891/3224|2889/3042|963/1013||WARNING_TRANSCRIPT_NO_START_CODON,G|synonymous_variant|LOW|WNK2|ENSG00000165238|transcript|ENST00000395477.6|protein_coding|27/29|c.6501T>G|p.Pro2167Pro|6501/6834|6501/6654|2167/2217||,G|synonymous_variant|LOW|WNK2|ENSG00000165238|transcript|ENST00000453718.2|protein_coding|7/7|c.1920T>G|p.Pro640Pro|1922/1937|1920/1935|640/644||WARNING_TRANSCRIPT_NO_START_CODON,G|non_coding_transcript_exon_variant|MODIFIER|WNK2|ENSG00000165238|transcript|ENST00000467401.1|retained_intron|1/3|n.1933T>G||||||,G|non_coding_transcript_exon_variant|MODIFIER|WNK2|ENSG00000165238|transcript|ENST00000474009.5|processed_transcript|3/3|n.542T>G||||||,G|non_coding_transcript_exon_variant|MODIFIER|WNK2|ENSG00000165238|transcript|ENST00000460335.1|processed_transcript|1/2|n.69T>G||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:409:392:14685:17:234:0,-101.925,-1299.31\\t0/0:99:80:79:3079:1:12:0,-22.8824,-275.97\n19\\t38483504\\t.\\tC\\tT\\t0.0\\tPASS\\tSSC=83.6393;TYPE=snp;ANN=T|missense_variant|MODERATE|RYR1|ENSG00000196218|transcript|ENST00000355481.8|protein_coding|33/105|c.4922C>T|p.Pro1641Leu|5053/15377|4922/15102|1641/5033||,T|missense_variant|MODERATE|RYR1|ENSG00000196218|transcript|ENST00000359596.7|protein_coding|33/106|c.4922C>T|p.Pro1641Leu|4922/15117|4922/15117|1641/5038||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:296:296:11759:0:0:0,-89.1049,-1057.44\\t0/0:99:44:42:1608:2:82:0,-5.46564,-137.159\n6\\t42268688\\t.\\tC\\tA\\t0.00281751\\tPASS\\tSSC=17.1642;TYPE=snp;ANN=A|missense_variant|MODERATE|TRERF1|ENSG00000124496|transcript|ENST00000541110.5|protein_coding|5/18|c.903G>T|p.Gln301His|1472/7646|903/3663|301/1220||,A|missense_variant|MODERATE|TRERF1|ENSG00000124496|transcript|ENST00000372922.8|protein_coding|5/18|c.903G>T|p.Gln301His|1466/7286|903/3603|301/1200||,A|missense_variant|MODERATE|TRERF1|ENSG00000124496|transcript|ENST00000372917.8|protein_coding|5/17|c.420G>T|p.Gln140His|1244/3914|420/2871|140/956||,A|missense_variant|MODERATE|TRERF1|ENSG00000124496|transcript|ENST00000340840.6|protein_coding|4/16|c.903G>T|p.Gln301His|1491/4174|903/3390|301/1129||,A|missense_variant|MODERATE|TRERF1|ENSG00000124496|transcript|ENST00000354325.2|protein_coding|4/16|c.903G>T|p.Gln301His|1491/4138|903/3354|301/1117||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:43:43:1702:0:0:0,-12.9443,-153.397\\t0/1:0.00281751:9:7:273:2:73:-4.21992,0,-22.2207\n2\\t131264040\\t.\\tC\\tT\\t0.0\\tPASS\\tSSC=64.5985;TYPE=snp;ANN=T|missense_variant|MODERATE|POTEE|ENSG00000188219|transcript|ENST00000356920.9|protein_coding|15/15|c.2585C>T|p.Thr862Ile|2921/4159|2585/3228|862/1075||,T|downstream_gene_variant|MODIFIER|POTEE|ENSG00000188219|transcript|ENST00000358087.9|nonsense_mediated_decay||n.*1359C>T|||||449|,T|downstream_gene_variant|MODIFIER|POTEE|ENSG00000188219|transcript|ENST00000514256.5|nonsense_mediated_decay||n.*1338C>T|||||449|,T|downstream_gene_variant|MODIFIER|POTEE|ENSG00000188219|transcript|ENST00000626191.1|protein_coding||c.*1293C>T|||||449|,T|downstream_gene_variant|MODIFIER|POTEE|ENSG00000188219|transcript|ENST00000613282.3|protein_coding||c.*687C>T|||||340|,T|intron_variant|MODIFIER|PLEKHB2|ENSG00000115762|transcript|ENST00000404460.5|protein_coding|6/6|c.424-88980C>T||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:226:224:8976:0:0:0,-67.4307,-723.002\\t0/0:99:34:32:1286:2:78:0,-2.83224,-99.6752\n3\\t65379364\\t.\\tG\\tT\\t1.23661E-6\\tPASS\\tSSC=19.5198;TYPE=snp;ANN=T|synonymous_variant|LOW|MAGI1|ENSG00000151276|transcript|ENST00000402939.6|protein_coding|17/23|c.2892C>A|p.Thr964Thr|2892/4389|2892/4389|964/1462||,T|synonymous_variant|LOW|MAGI1|ENSG00000151276|transcript|ENST00000330909.12|protein_coding|18/25|c.2976C>A|p.Thr992Thr|2976/7415|2976/3864|992/1287||,T|synonymous_variant|LOW|MAGI1|ENSG00000151276|transcript|ENST00000611645.4|protein_coding|17/24|c.2055C>A|p.Thr685Thr|2665/6398|2055/2943|685/980||,T|synonymous_variant|LOW|MAGI1|ENSG00000151276|transcript|ENST00000621418.4|protein_coding|16/22|c.1971C>A|p.Thr657Thr|2581/6225|1971/3468|657/1155||,T|synonymous_variant|LOW|MAGI1|ENSG00000151276|transcript|ENST00000483466.5|protein_coding|18/23|c.2976C>A|p.Thr992Thr|3218/4791|2976/3771|992/1256||,T|synonymous_variant|LOW|MAGI1|ENSG00000151276|transcript|ENST00000463103.6|protein_coding|17/22|c.2601C>A|p.Thr867Thr|2601/4193|2601/3396|867/1131||WARNING_TRANSCRIPT_NO_START_CODON,T|synonymous_variant|LOW|MAGI1|ENSG00000151276|transcript|ENST00000460329.6|protein_coding|17/22|c.2616C>A|p.Thr872Thr|2618/3694|2616/3408|872/1135||WARNING_TRANSCRIPT_NO_START_CODON,T|synonymous_variant|LOW|MAGI1|ENSG00000151276|transcript|ENST00000497477.6|protein_coding|17/21|c.2892C>A|p.Thr964Thr|2892/3555|2892/3483|964/1160||,T|synonymous_variant|LOW|MAGI1|ENSG00000151276|transcript|ENST00000472257.5|protein_coding|14/19|c.2250C>A|p.Thr750Thr|2250/3045|2250/3045|750/1014||WARNING_TRANSCRIPT_NO_START_CODON,T|non_coding_transcript_exon_variant|MODIFIER|MAGI1|ENSG00000151276|transcript|ENST00000468159.1|retained_intron|6/6|n.952C>A||||||,T|non_coding_transcript_exon_variant|MODIFIER|MAGI1|ENSG00000151276|transcript|ENST00000480729.1|processed_transcript|2/3|n.281C>A||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:55:55:2178:0:0:0,-16.5566,-196.178\\t0/1:1.23661e-06:16:14:566:2:82:-2.9632,0,-46.4647\n11\\t64766958\\t.\\tC\\tT\\t1.20541E-16\\tPASS\\tSSC=114.106;TYPE=snp;ANN=T|missense_variant|MODERATE|SF1|ENSG00000168066|transcript|ENST00000377394.7|protein_coding|12/13|c.1528G>A|p.Ala510Thr|1883/2854|1528/1716|510/571||,T|missense_variant|MODERATE|SF1|ENSG00000168066|transcript|ENST00000413725.5|protein_coding|3/4|c.232G>A|p.Ala78Thr|233/843|232/540|78/179||WARNING_TRANSCRIPT_NO_START_CODON,T|missense_variant|MODERATE|SF1|ENSG00000168066|transcript|ENST00000486867.1|protein_coding|5/6|c.682G>A|p.Ala228Thr|682/875|682/875|228/290||WARNING_TRANSCRIPT_INCOMPLETE,T|synonymous_variant|LOW|SF1|ENSG00000168066|transcript|ENST00000377387.5|protein_coding|12/13|c.1899G>A|p.Pro633Pro|1976/2947|1899/2022|633/673||,T|synonymous_variant|LOW|SF1|ENSG00000168066|transcript|ENST00000377390.7|protein_coding|12/13|c.1524G>A|p.Pro508Pro|1862/3470|1524/1920|508/639||,T|synonymous_variant|LOW|SF1|ENSG00000168066|transcript|ENST00000227503.13|protein_coding|12/13|c.1524G>A|p.Pro508Pro|1879/2850|1524/1647|508/548||,T|synonymous_variant|LOW|SF1|ENSG00000168066|transcript|ENST00000334944.9|protein_coding|12/14|c.1524G>A|p.Pro508Pro|1918/3094|1524/1917|508/638||,T|synonymous_variant|LOW|SF1|ENSG00000168066|transcript|ENST00000433274.6|protein_coding|12/13|c.1446G>A|p.Pro482Pro|1755/2317|1446/1842|482/613||,T|synonymous_variant|LOW|SF1|ENSG00000168066|transcript|ENST00000443908.5|protein_coding|3/4|c.480G>A|p.Pro160Pro|480/767|480/603|160/200||WARNING_TRANSCRIPT_NO_START_CODON,T|3_prime_UTR_variant|MODIFIER|SF1|ENSG00000168066|transcript|ENST00000448404.5|nonsense_mediated_decay|11/12|n.*1119G>A|||||3076|,T|downstream_gene_variant|MODIFIER|SF1|ENSG00000168066|transcript|ENST00000489544.1|processed_transcript||n.*1213G>A|||||1213|,T|downstream_gene_variant|MODIFIER|SF1|ENSG00000168066|transcript|ENST00000486960.5|retained_intron||n.*2320G>A|||||2320|,T|downstream_gene_variant|MODIFIER|SF1|ENSG00000168066|transcript|ENST00000626028.1|protein_coding||c.*3076G>A|||||3076|,T|downstream_gene_variant|MODIFIER|SF1|ENSG00000168066|transcript|ENST00000413951.5|nonsense_mediated_decay||n.*3691G>A|||||3339|,T|downstream_gene_variant|MODIFIER|SF1|ENSG00000168066|transcript|ENST00000496969.1|processed_transcript||n.*2584G>A|||||2584|,T|downstream_gene_variant|MODIFIER|SF1|ENSG00000168066|transcript|ENST00000633899.1|processed_transcript||n.*3320G>A|||||3320|,T|downstream_gene_variant|MODIFIER|SF1|ENSG00000168066|transcript|ENST00000432725.1|protein_coding||c.*3422G>A|||||3422|WARNING_TRANSCRIPT_INCOMPLETE,T|non_coding_transcript_exon_variant|MODIFIER|SF1|ENSG00000168066|transcript|ENST00000448404.5|nonsense_mediated_decay|11/12|n.*1119G>A||||||,T|non_coding_transcript_exon_variant|MODIFIER|SF1|ENSG00000168066|transcript|ENST00000477596.1|retained_intron|3/3|n.258G>A||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:566:556:20885:10:130:0,-158.553,-1866.07\\t0/0:99:163:158:6152:4:48:0,-44.4469,-548.983\n21\\t10567752\\t.\\tAT\\tA\\t5.09165E-13\\tPASS\\tSSC=574.304;TYPE=del;OLD_VARIANT=21:10567752:ATTTTTTTTGAC/ATTTTTTTGAC;ANN=A|frameshift_variant|HIGH|TPTE|ENSG00000274391|transcript|ENST00000618007.4|protein_coding|11/24|c.537delT|p.Phe179fs|867/2150|537/1656|179/551||INFO_REALIGN_3_PRIME,A|frameshift_variant|HIGH|TPTE|ENSG00000274391|transcript|ENST00000622113.4|protein_coding|10/23|c.483delT|p.Phe161fs|835/2542|483/1602|161/533||INFO_REALIGN_3_PRIME,A|frameshift_variant|HIGH|TPTE|ENSG00000274391|transcript|ENST00000427445.6|protein_coding|9/22|c.423delT|p.Phe141fs|753/2036|423/1542|141/513||INFO_REALIGN_3_PRIME,A|frameshift_variant|HIGH|TPTE|ENSG00000274391|transcript|ENST00000612746.1|protein_coding|6/19|c.123delT|p.Phe41fs|591/1874|123/1242|41/413||INFO_REALIGN_3_PRIME,A|downstream_gene_variant|MODIFIER|TPTE|ENSG00000274391|transcript|ENST00000612957.4|protein_coding||c.*54delT|||||54|WARNING_TRANSCRIPT_INCOMPLETE,A|non_coding_transcript_exon_variant|MODIFIER|AL078471.5|ENSG00000273840|transcript|ENST00000612267.1|processed_transcript|20/32|n.2159delT||||||INFO_REALIGN_3_PRIME;LOF=(TPTE|ENSG00000274391|5|0.80)\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:3276:3076:122177:72:2867:0,-935.792,-11021.9\\t0/0:99:1256:1177:46810:26:1058:0,-361.488,-4223.02\n15\\t90890431\\t.\\tA\\tT\\t1.1542E-14\\tPASS\\tSSC=200.781;TYPE=snp;ANN=T|missense_variant|MODERATE|FES|ENSG00000182511|transcript|ENST00000328850.7|protein_coding|10/19|c.1267A>T|p.Thr423Ser|1409/2829|1267/2469|423/822||,T|missense_variant|MODERATE|FES|ENSG00000182511|transcript|ENST00000394300.7|protein_coding|8/17|c.1093A>T|p.Thr365Ser|1093/2302|1093/2295|365/764||,T|missense_variant|MODERATE|FES|ENSG00000182511|transcript|ENST00000444422.2|protein_coding|9/17|c.1267A>T|p.Thr423Ser|1267/2266|1267/2259|423/752||,T|missense_variant|MODERATE|FES|ENSG00000182511|transcript|ENST00000414248.6|protein_coding|9/17|c.1093A>T|p.Thr365Ser|1200/2327|1093/2085|365/694||,T|missense_variant|MODERATE|FES|ENSG00000182511|transcript|ENST00000394302.5|protein_coding|9/17|c.1093A>T|p.Thr365Ser|1178/2133|1093/2046|365/681||,T|downstream_gene_variant|MODIFIER|FES|ENSG00000182511|transcript|ENST00000470152.6|nonsense_mediated_decay||n.*1581A>T|||||1053|,T|downstream_gene_variant|MODIFIER|FES|ENSG00000182511|transcript|ENST00000481665.5|retained_intron||n.*4902A>T|||||4902|,T|downstream_gene_variant|MODIFIER|FES|ENSG00000182511|transcript|ENST00000452243.5|protein_coding||c.*3416A>T|||||3416|WARNING_TRANSCRIPT_INCOMPLETE,T|downstream_gene_variant|MODIFIER|FES|ENSG00000182511|transcript|ENST00000559355.5|protein_coding||c.*3222A>T|||||3222|WARNING_TRANSCRIPT_NO_STOP_CODON,T|downstream_gene_variant|MODIFIER|FES|ENSG00000182511|transcript|ENST00000443697.1|protein_coding||c.*4889A>T|||||4889|WARNING_TRANSCRIPT_INCOMPLETE,T|downstream_gene_variant|MODIFIER|FES|ENSG00000182511|transcript|ENST00000494259.1|retained_intron||n.*492A>T|||||492|,T|downstream_gene_variant|MODIFIER|FES|ENSG00000182511|transcript|ENST00000497945.2|retained_intron||n.*1106A>T|||||1106|,T|non_coding_transcript_exon_variant|MODIFIER|FES|ENSG00000182511|transcript|ENST00000448367.5|processed_transcript|4/5|n.463A>T||||||,T|non_coding_transcript_exon_variant|MODIFIER|FES|ENSG00000182511|transcript|ENST00000496379.5|retained_intron|3/5|n.341A>T||||||,T|non_coding_transcript_exon_variant|MODIFIER|FES|ENSG00000182511|transcript|ENST00000462476.1|retained_intron|3/3|n.367A>T||||||,T|non_coding_transcript_exon_variant|MODIFIER|FES|ENSG00000182511|transcript|ENST00000464684.5|nonsense_mediated_decay|10/18|n.1267A>T||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:904:880:32880:17:227:0,-249.58,-2935.73\\t0/0:99:183:179:6954:4:68:0,-48.7986,-619.223\n9\\t130664844\\t.\\tC\\tG\\t0.0\\tPASS\\tSSC=108.925;TYPE=snp;ANN=G|missense_variant|MODERATE|PRDM12|ENSG00000130711|transcript|ENST00000253008.2|protein_coding|1/5|c.191C>G|p.Thr64Ser|251/2476|191/1104|64/367||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:381:381:15151:0:0:0,-114.692,-1362.33\\t0/0:99:45:43:1741:2:82:0,-5.76667,-149.116\n15\\t67827863\\t.\\tG\\tA\\t1.507E-15\\tPASS\\tSSC=298.045;TYPE=snp;ANN=A|missense_variant|MODERATE|SKOR1|ENSG00000188779|transcript|ENST00000341418.9|protein_coding|7/15|c.1855G>A|p.Glu619Lys|1855/3332|1855/2607|619/868||,A|missense_variant|MODERATE|SKOR1|ENSG00000188779|transcript|ENST00000380035.2|protein_coding|2/9|c.2035G>A|p.Glu679Lys|2093/3675|2035/2898|679/965||,A|missense_variant|MODERATE|SKOR1|ENSG00000188779|transcript|ENST00000554240.5|protein_coding|2/9|c.1918G>A|p.Glu640Lys|2032/3597|1918/2781|640/926||,A|missense_variant|MODERATE|SKOR1|ENSG00000188779|transcript|ENST00000554054.5|protein_coding|2/9|c.1951G>A|p.Glu651Lys|2038/3620|1951/2814|651/937||,A|upstream_gene_variant|MODIFIER|RP11-34F13.3|ENSG00000259410|transcript|ENST00000558889.5|lincRNA||n.-4862G>A|||||4862|\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:1076:1076:42423:0:0:0,-323.908,-3813.94\\t0/0:99:124:121:4901:3:123:0,-25.8629,-429.472\n14\\t95711797\\t.\\tG\\tA\\t3.05875E-14\\tPASS\\tSSC=107.617;TYPE=snp;ANN=A|synonymous_variant|LOW|TCL1A|ENSG00000100721|transcript|ENST00000402399.5|protein_coding|3/4|c.303C>T|p.Asp101Asp|433/1395|303/345|101/114||,A|synonymous_variant|LOW|TCL1A|ENSG00000100721|transcript|ENST00000554012.5|protein_coding|3/4|c.303C>T|p.Asp101Asp|433/1391|303/345|101/114||,A|synonymous_variant|LOW|TCL1A|ENSG00000100721|transcript|ENST00000555202.1|protein_coding|3/3|c.303C>T|p.Asp101Asp|367/717|303/345|101/114||,A|synonymous_variant|LOW|TCL1A|ENSG00000100721|transcript|ENST00000556450.5|protein_coding|3/4|c.303C>T|p.Asp101Asp|335/872|303/345|101/114||,A|synonymous_variant|LOW|TCL1A|ENSG00000100721|transcript|ENST00000557043.4|protein_coding|3/4|c.120C>T|p.Asp40Asp|226/980|120/162|40/53||,A|3_prime_UTR_variant|MODIFIER|TCL1A|ENSG00000100721|transcript|ENST00000555886.5|nonsense_mediated_decay|4/5|n.*386C>T|||||957|,A|3_prime_UTR_variant|MODIFIER|TCL1A|ENSG00000100721|transcript|ENST00000556156.1|nonsense_mediated_decay|3/4|n.*540C>T|||||957|,A|upstream_gene_variant|MODIFIER|RP11-164H13.1|ENSG00000257275|transcript|ENST00000556386.1|antisense||n.-3683G>A|||||3683|,A|intron_variant|MODIFIER|TCL1A|ENSG00000100721|transcript|ENST00000554119.5|nonsense_mediated_decay|2/2|n.*534+423C>T||||||,A|non_coding_transcript_exon_variant|MODIFIER|RP11-164H13.1|ENSG00000257275|transcript|ENST00000547644.6|antisense|1/3|n.51G>A||||||,A|non_coding_transcript_exon_variant|MODIFIER|TCL1A|ENSG00000100721|transcript|ENST00000555886.5|nonsense_mediated_decay|4/5|n.*386C>T||||||,A|non_coding_transcript_exon_variant|MODIFIER|TCL1A|ENSG00000100721|transcript|ENST00000553467.1|retained_intron|1/2|n.166C>T||||||,A|non_coding_transcript_exon_variant|MODIFIER|RP11-164H13.1|ENSG00000257275|transcript|ENST00000553445.5|antisense|1/3|n.41G>A||||||,A|non_coding_transcript_exon_variant|MODIFIER|TCL1A|ENSG00000100721|transcript|ENST00000556156.1|nonsense_mediated_decay|3/4|n.*540C>T||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:451:449:17679:2:78:0,-128.362,-1582.21\\t0/0:99:107:104:4135:3:123:0,-20.7454,-360.63\n12\\t52428367\\t.\\tT\\tC\\t1.65146E-14\\tPASS\\tSSC=9.68008;TYPE=snp;ANN=C|missense_variant|MODERATE|KRT75|ENSG00000170454|transcript|ENST00000252245.5|protein_coding|7/9|c.1271A>G|p.Lys424Arg|1492/2324|1271/1656|424/551||,C|non_coding_transcript_exon_variant|MODIFIER|RP11-1020M18.10|ENSG00000257500|transcript|ENST00000548135.1|antisense|3/3|n.502T>C||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:72:70:2817:2:82:0,-13.8945,-245.835\\t0/0:99:14:14:555:0:0:0,-4.21442,-50.2823\n17\\t7890682\\t.\\tG\\tA\\t0.0\\tPASS\\tSSC=162.369;TYPE=snp;OLD_VARIANT=17:7890681:AG/AA;ANN=A|missense_variant|MODERATE|CHD3|ENSG00000170004|transcript|ENST00000358181.8|protein_coding|3/39|c.325G>A|p.Glu109Lys|535/7286|325/5901|109/1966||,A|missense_variant|MODERATE|CHD3|ENSG00000170004|transcript|ENST00000330494.11|protein_coding|3/40|c.325G>A|p.Glu109Lys|475/7328|325/6003|109/2000||,A|missense_variant|MODERATE|CHD3|ENSG00000170004|transcript|ENST00000380358.8|protein_coding|3/40|c.502G>A|p.Glu168Lys|503/7356|502/6180|168/2059||,A|upstream_gene_variant|MODIFIER|CHD3|ENSG00000170004|transcript|ENST00000572579.1|retained_intron||n.-2604G>A|||||2604|,A|upstream_gene_variant|MODIFIER|CHD3|ENSG00000170004|transcript|ENST00000571249.1|protein_coding||c.-3149G>A|||||3147|WARNING_TRANSCRIPT_INCOMPLETE,A|upstream_gene_variant|MODIFIER|CHD3|ENSG00000170004|transcript|ENST00000452447.1|protein_coding||c.-54G>A|||||53|WARNING_TRANSCRIPT_NO_START_CODON,A|upstream_gene_variant|MODIFIER|CHD3|ENSG00000170004|transcript|ENST00000479080.1|retained_intron||n.-3872G>A|||||3872|,A|downstream_gene_variant|MODIFIER|CHD3|ENSG00000170004|transcript|ENST00000574022.1|processed_transcript||n.*77G>A|||||77|,A|non_coding_transcript_exon_variant|MODIFIER|CHD3|ENSG00000170004|transcript|ENST00000570758.1|processed_transcript|2/2|n.166G>A||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:1115:1081:38357:31:604:0,-285.873,-3393.65\\t0/0:99:493:477:17187:13:275:0,-123.504,-1519.68\n22\\t50249162\\t.\\tT\\tA\\t1.6876E-14\\tPASS\\tSSC=299;TYPE=snp;ANN=A|missense_variant|MODERATE|HDAC10|ENSG00000100429|transcript|ENST00000216271.9|protein_coding|8/20|c.697A>T|p.Met233Leu|1050/2687|697/2010|233/669||,A|missense_variant|MODERATE|HDAC10|ENSG00000100429|transcript|ENST00000349505.4|protein_coding|8/19|c.697A>T|p.Met233Leu|697/1950|697/1950|233/649||,A|missense_variant|MODERATE|HDAC10|ENSG00000100429|transcript|ENST00000448072.5|protein_coding|8/18|c.697A>T|p.Met233Leu|905/2133|697/1860|233/619||,A|3_prime_UTR_variant|MODIFIER|HDAC10|ENSG00000100429|transcript|ENST00000415993.5|nonsense_mediated_decay|7/18|n.*325A>T|||||902|,A|3_prime_UTR_variant|MODIFIER|HDAC10|ENSG00000100429|transcript|ENST00000626012.2|protein_coding|7/19|c.*309A>T|||||902|,A|upstream_gene_variant|MODIFIER|TUBGCP6|ENSG00000128159|transcript|ENST00000248846.9|protein_coding||c.-4703A>T|||||4598|,A|upstream_gene_variant|MODIFIER|TUBGCP6|ENSG00000128159|transcript|ENST00000439308.6|protein_coding||c.-4703A>T|||||4191|,A|upstream_gene_variant|MODIFIER|TUBGCP6|ENSG00000128159|transcript|ENST00000498611.5|retained_intron||n.-4170A>T|||||4170|,A|upstream_gene_variant|MODIFIER|HDAC10|ENSG00000100429|transcript|ENST00000475965.1|retained_intron||n.-707A>T|||||707|,A|upstream_gene_variant|MODIFIER|HDAC10|ENSG00000100429|transcript|ENST00000476310.5|retained_intron||n.-87A>T|||||87|,A|upstream_gene_variant|MODIFIER|HDAC10|ENSG00000100429|transcript|ENST00000497952.5|retained_intron||n.-1214A>T|||||1214|,A|upstream_gene_variant|MODIFIER|HDAC10|ENSG00000100429|transcript|ENST00000496235.5|retained_intron||n.-790A>T|||||790|,A|upstream_gene_variant|MODIFIER|HDAC10|ENSG00000100429|transcript|ENST00000471375.5|retained_intron||n.-122A>T|||||122|,A|downstream_gene_variant|MODIFIER|MAPK12|ENSG00000188130|transcript|ENST00000215659.12|protein_coding||c.*4239A>T|||||3741|,A|downstream_gene_variant|MODIFIER|MAPK12|ENSG00000188130|transcript|ENST00000395780.5|protein_coding||c.*4239A>T|||||3741|,A|downstream_gene_variant|MODIFIER|MAPK12|ENSG00000188130|transcript|ENST00000622558.4|protein_coding||c.*4239A>T|||||3741|,A|downstream_gene_variant|MODIFIER|MAPK12|ENSG00000188130|transcript|ENST00000497738.1|retained_intron||n.*4691A>T|||||4691|,A|downstream_gene_variant|MODIFIER|HDAC10|ENSG00000100429|transcript|ENST00000497483.1|processed_transcript||n.*957A>T|||||957|,A|downstream_gene_variant|MODIFIER|MAPK12|ENSG00000188130|transcript|ENST00000496942.5|retained_intron||n.*4619A>T|||||4619|,A|downstream_gene_variant|MODIFIER|MAPK12|ENSG00000188130|transcript|ENST00000482969.5|retained_intron||n.*4626A>T|||||4626|,A|downstream_gene_variant|MODIFIER|HDAC10|ENSG00000100429|transcript|ENST00000488270.1|retained_intron||n.*125A>T|||||125|,A|downstream_gene_variant|MODIFIER|HDAC10|ENSG00000100429|transcript|ENST00000482213.1|retained_intron||n.*1095A>T|||||1095|,A|downstream_gene_variant|MODIFIER|HDAC10|ENSG00000100429|transcript|ENST00000489424.5|processed_transcript||n.*697A>T|||||697|,A|downstream_gene_variant|MODIFIER|HDAC10|ENSG00000100429|transcript|ENST00000470965.1|processed_transcript||n.*706A>T|||||706|,A|downstream_gene_variant|MODIFIER|MAPK12|ENSG00000188130|transcript|ENST00000488504.5|retained_intron||n.*3741A>T|||||3741|,A|downstream_gene_variant|MODIFIER|MAPK12|ENSG00000188130|transcript|ENST00000467891.5|retained_intron||n.*3758A>T|||||3758|,A|intron_variant|MODIFIER|HDAC10|ENSG00000100429|transcript|ENST00000429374.5|nonsense_mediated_decay|5/13|n.*175+473A>T||||||,A|non_coding_transcript_exon_variant|MODIFIER|HDAC10|ENSG00000100429|transcript|ENST00000415993.5|nonsense_mediated_decay|7/18|n.*325A>T||||||,A|non_coding_transcript_exon_variant|MODIFIER|HDAC10|ENSG00000100429|transcript|ENST00000454936.5|nonsense_mediated_decay|8/16|n.697A>T||||||,A|non_coding_transcript_exon_variant|MODIFIER|HDAC10|ENSG00000100429|transcript|ENST00000477814.5|retained_intron|1/10|n.47A>T||||||,A|non_coding_transcript_exon_variant|MODIFIER|MAPK12|ENSG00000188130|transcript|ENST00000497036.5|processed_transcript|14/26|n.4969A>T||||||,A|non_coding_transcript_exon_variant|MODIFIER|HDAC10|ENSG00000100429|transcript|ENST00000470378.1|retained_intron|1/3|n.42A>T||||||,A|non_coding_transcript_exon_variant|MODIFIER|HDAC10|ENSG00000100429|transcript|ENST00000496909.5|processed_transcript|6/8|n.556A>T||||||,A|non_coding_transcript_exon_variant|MODIFIER|HDAC10|ENSG00000100429|transcript|ENST00000483222.5|processed_transcript|7/19|n.744A>T||||||,A|non_coding_transcript_exon_variant|MODIFIER|HDAC10|ENSG00000100429|transcript|ENST00000498366.5|processed_transcript|7/19|n.806A>T||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:1398:1358:51345:37:603:0,-368.432,-4564.43\\t0/0:99:247:241:9044:4:48:0,-69.4324,-808.981\n4\\t87127027\\t.\\tG\\tT\\t1.20541E-13\\tPASS\\tSSC=198.588;TYPE=snp;ANN=T|missense_variant&splice_region_variant|MODERATE|AFF1|ENSG00000172493|transcript|ENST00000307808.10|protein_coding|14/20|c.2792G>T|p.Gly931Val|3212/9390|2792/3633|931/1210||,T|missense_variant&splice_region_variant|MODERATE|AFF1|ENSG00000172493|transcript|ENST00000395146.8|protein_coding|15/21|c.2813G>T|p.Gly938Val|3088/9285|2813/3657|938/1218||,T|missense_variant&splice_region_variant|MODERATE|AFF1|ENSG00000172493|transcript|ENST00000544085.5|protein_coding|16/23|c.2789G>T|p.Gly930Val|2801/3644|2789/3618|930/1205||,T|downstream_gene_variant|MODIFIER|AFF1|ENSG00000172493|transcript|ENST00000503369.1|retained_intron||n.*1750G>T|||||1750|\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:1300:1267:44359:33:516:0,-344.749,-3942.2\\t0/0:99:526:514:18264:11:132:0,-146.161,-1630.48\n2\\t37228986\\t.\\tA\\tG\\t0.0\\tPASS\\tSSC=220.397;TYPE=snp;ANN=G|synonymous_variant|LOW|CEBPZ|ENSG00000115816|transcript|ENST00000234170.9|protein_coding|2/16|c.207T>C|p.Asp69Asp|353/3463|207/3165|69/1054||,G|synonymous_variant|LOW|CEBPZ|ENSG00000115816|transcript|ENST00000446769.1|protein_coding|2/2|c.60T>C|p.Asp20Asp|148/526|60/438|20/145||WARNING_TRANSCRIPT_NO_STOP_CODON,G|upstream_gene_variant|MODIFIER|NDUFAF7|ENSG00000003509|transcript|ENST00000002125.8|protein_coding||c.-2720A>G|||||2680|,G|upstream_gene_variant|MODIFIER|NDUFAF7|ENSG00000003509|transcript|ENST00000336237.10|protein_coding||c.-2720A>G|||||2693|,G|upstream_gene_variant|MODIFIER|NDUFAF7|ENSG00000003509|transcript|ENST00000474154.5|retained_intron||n.-2677A>G|||||2677|,G|upstream_gene_variant|MODIFIER|NDUFAF7|ENSG00000003509|transcript|ENST00000469831.1|retained_intron||n.-2781A>G|||||2781|,G|upstream_gene_variant|MODIFIER|NDUFAF7|ENSG00000003509|transcript|ENST00000416653.5|protein_coding||c.-2921A>G|||||2781|WARNING_TRANSCRIPT_NO_STOP_CODON,G|upstream_gene_variant|MODIFIER|NDUFAF7|ENSG00000003509|transcript|ENST00000439218.5|protein_coding||c.-2965A>G|||||2834|WARNING_TRANSCRIPT_INCOMPLETE,G|upstream_gene_variant|MODIFIER|NDUFAF7|ENSG00000003509|transcript|ENST00000431821.5|protein_coding||c.-2796A>G|||||2703|WARNING_TRANSCRIPT_NO_STOP_CODON,G|upstream_gene_variant|MODIFIER|NDUFAF7|ENSG00000003509|transcript|ENST00000455230.5|nonsense_mediated_decay||n.-2720A>G|||||2645|,G|upstream_gene_variant|MODIFIER|NDUFAF7|ENSG00000003509|transcript|ENST00000483999.5|processed_transcript||n.-2790A>G|||||2790|,G|upstream_gene_variant|MODIFIER|NDUFAF7|ENSG00000003509|transcript|ENST00000432075.1|protein_coding||c.-3075A>G|||||2856|WARNING_TRANSCRIPT_NO_STOP_CODON\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:1561:1519:59283:41:591:0,-416.639,-5276.18\\t0/0:99:705:692:27124:12:174:0,-196.242,-2422.79\n19\\t18768666\\t.\\tT\\tA\\t0.0\\tPASS\\tSSC=95.7259;TYPE=snp;ANN=A|missense_variant|MODERATE|CRTC1|ENSG00000105662|transcript|ENST00000338797.10|protein_coding|11/15|c.1241T>A|p.Leu414Gln|1266/6929|1241/1953|414/650||,A|missense_variant|MODERATE|CRTC1|ENSG00000105662|transcript|ENST00000321949.12|protein_coding|10/14|c.1193T>A|p.Leu398Gln|1219/2501|1193/1905|398/634||,A|missense_variant|MODERATE|CRTC1|ENSG00000105662|transcript|ENST00000594658.5|protein_coding|10/14|c.1070T>A|p.Leu357Gln|1102/2384|1070/1782|357/593||,A|intron_variant|MODIFIER|CRTC1|ENSG00000105662|transcript|ENST00000601916.1|protein_coding|8/9|c.786+3138T>A||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:743:673:25017:67:1139:0,-120.21,-2146.77\\t0/0:99:101:97:3442:4:64:0,-24.4841,-303.882\n3\\t187725066\\t.\\tG\\tC\\t3.50176E-14\\tPASS\\tSSC=251.531;TYPE=snp;ANN=C|missense_variant|MODERATE|BCL6|ENSG00000113916|transcript|ENST00000232014.8|protein_coding|9/10|c.1852C>G|p.Arg618Gly|2381/2710|1852/2121|618/706||,C|missense_variant|MODERATE|BCL6|ENSG00000113916|transcript|ENST00000406870.6|protein_coding|9/10|c.1852C>G|p.Arg618Gly|2219/3569|1852/2121|618/706||,C|missense_variant|MODERATE|BCL6|ENSG00000113916|transcript|ENST00000450123.6|protein_coding|7/8|c.1684C>G|p.Arg562Gly|1708/2003|1684/1953|562/650||,C|missense_variant|MODERATE|BCL6|ENSG00000113916|transcript|ENST00000621333.4|protein_coding|8/9|c.1684C>G|p.Arg562Gly|2049/3399|1684/1953|562/650||,C|3_prime_UTR_variant|MODIFIER|BCL6|ENSG00000113916|transcript|ENST00000419510.6|nonsense_mediated_decay|9/10|n.*1622C>G|||||6796|,C|intron_variant|MODIFIER|RP11-211G3.3|ENSG00000228804|transcript|ENST00000449623.5|antisense|2/2|n.347-8458G>C||||||,C|intron_variant|MODIFIER|RP11-211G3.3|ENSG00000228804|transcript|ENST00000437407.1|antisense|2/2|n.294-7305G>C||||||,C|non_coding_transcript_exon_variant|MODIFIER|BCL6|ENSG00000113916|transcript|ENST00000419510.6|nonsense_mediated_decay|9/10|n.*1622C>G||||||,C|non_coding_transcript_exon_variant|MODIFIER|BCL6|ENSG00000113916|transcript|ENST00000479110.1|retained_intron|2/2|n.138C>G||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:1004:1002:39973:0:0:0,-301.632,-3593.14\\t0/0:99:229:224:8891:5:205:0,-50.1009,-780.789\n17\\t7847274\\t.\\tT\\tA\\t0.0\\tPASS\\tSSC=231.21;TYPE=snp;ANN=A|missense_variant|MODERATE|KDM6B|ENSG00000132510|transcript|ENST00000254846.9|protein_coding|10/22|c.1079T>A|p.Leu360His|1468/6713|1079/5049|360/1682||,A|missense_variant|MODERATE|KDM6B|ENSG00000132510|transcript|ENST00000448097.6|protein_coding|10/23|c.1079T>A|p.Leu360His|1410/5422|1079/4932|360/1643||,A|missense_variant|MODERATE|KDM6B|ENSG00000132510|transcript|ENST00000570632.1|protein_coding|8/9|c.881T>A|p.Leu294His|1135/1339|881/1085|294/360||WARNING_TRANSCRIPT_INCOMPLETE,A|downstream_gene_variant|MODIFIER|KDM6B|ENSG00000132510|transcript|ENST00000571047.5|processed_transcript||n.*1927T>A|||||1927|,A|downstream_gene_variant|MODIFIER|KDM6B|ENSG00000132510|transcript|ENST00000575521.1|processed_transcript||n.*2302T>A|||||2302|\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:1448:1359:49260:87:1196:0,-327.635,-4321.17\\t0/0:99:381:366:13261:13:196:0,-96.4245,-1174.77\n19\\t1615670\\t.\\tA\\tG\\t0.0\\tPASS\\tSSC=174.592;TYPE=snp;ANN=G|synonymous_variant|LOW|TCF3|ENSG00000071564|transcript|ENST00000395423.7|protein_coding|15/16|c.1449T>C|p.Pro483Pro|1793/2779|1449/1977|483/658||,G|downstream_gene_variant|MODIFIER|TCF3|ENSG00000071564|transcript|ENST00000590605.2|retained_intron||n.*121T>C|||||121|,G|downstream_gene_variant|MODIFIER|TCF3|ENSG00000071564|transcript|ENST00000586410.2|protein_coding||c.*141T>C|||||141|WARNING_TRANSCRIPT_NO_START_CODON,G|downstream_gene_variant|MODIFIER|RNU6-1223P|ENSG00000252933|transcript|ENST00000517124.1|snRNA||n.*822T>C|||||822|,G|intron_variant|MODIFIER|TCF3|ENSG00000071564|transcript|ENST00000262965.9|protein_coding|17/18|c.1586+16T>C||||||,G|intron_variant|MODIFIER|TCF3|ENSG00000071564|transcript|ENST00000611869.4|protein_coding|16/17|c.1586+16T>C||||||,G|intron_variant|MODIFIER|TCF3|ENSG00000071564|transcript|ENST00000610756.4|retained_intron|8/9|n.944+16T>C||||||,G|intron_variant|MODIFIER|TCF3|ENSG00000071564|transcript|ENST00000593064.5|protein_coding|2/4|c.233+16T>C||||||WARNING_TRANSCRIPT_NO_START_CODON,G|intron_variant|MODIFIER|TCF3|ENSG00000071564|transcript|ENST00000587425.5|protein_coding|1/3|c.119+16T>C||||||WARNING_TRANSCRIPT_NO_START_CODON,G|intron_variant|MODIFIER|TCF3|ENSG00000071564|transcript|ENST00000585731.5|protein_coding|1/2|c.113+16T>C||||||WARNING_TRANSCRIPT_NO_START_CODON,G|intron_variant|MODIFIER|TCF3|ENSG00000071564|transcript|ENST00000588136.5|protein_coding|16/18|c.1586+16T>C||||||,G|intron_variant|MODIFIER|TCF3|ENSG00000071564|transcript|ENST00000590684.5|protein_coding|3/4|c.290+16T>C||||||,G|intron_variant|MODIFIER|TCF3|ENSG00000071564|transcript|ENST00000585855.2|nonsense_mediated_decay|2/4|n.176+16T>C||||||,G|intron_variant|MODIFIER|TCF3|ENSG00000071564|transcript|ENST00000586164.1|nonsense_mediated_decay|1/2|n.113+16T>C||||||,G|intron_variant|MODIFIER|TCF3|ENSG00000071564|transcript|ENST00000453954.6|protein_coding|17/19|c.1673+16T>C||||||,G|intron_variant|MODIFIER|TCF3|ENSG00000071564|transcript|ENST00000344749.9|protein_coding|15/16|c.1433+16T>C||||||,G|intron_variant|MODIFIER|TCF3|ENSG00000071564|transcript|ENST00000592395.5|nonsense_mediated_decay|1/4|n.113+16T>C||||||,G|intron_variant|MODIFIER|TCF3|ENSG00000071564|transcript|ENST00000592628.5|protein_coding|2/4|c.161+16T>C||||||WARNING_TRANSCRIPT_NO_START_CODON,G|intron_variant|MODIFIER|TCF3|ENSG00000071564|transcript|ENST00000590436.5|protein_coding|3/5|c.572+16T>C||||||WARNING_TRANSCRIPT_NO_START_CODON\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:942:888:29718:52:709:0,-219.144,-2608.64\\t0/0:99:148:148:5063:0:0:0,-44.5524,-455.574\n16\\t30979221\\t.\\tACG\\tCCC\\t4.31541E-14\\tPASS\\tSSC=316.342;TYPE=complex;OLD_MULTIALLELIC=16:30979221:ACG/CCC/CCG;ANN=CCC|missense_variant|MODERATE|SETD1A|ENSG00000099381|transcript|ENST00000262519.12|protein_coding|14/19|c.3435_3437delACGinsCCC|p.Arg1146Pro|4121/6903|3435/5124|1145/1707||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:1470:1264:45150:34:455:0,-382.387,-4069.26\\t0/0:99:248:213:7749:2:24:0,-66.0449,-699.417\n11\\t32435204\\t.\\tC\\tT\\t0.0\\tPASS\\tSSC=114.344;TYPE=snp;ANN=T|missense_variant|MODERATE|WT1|ENSG00000184937|transcript|ENST00000332351.7|protein_coding|1/10|c.142G>A|p.Ala48Thr|427/3122|142/1554|48/517||,T|missense_variant|MODERATE|WT1|ENSG00000184937|transcript|ENST00000452863.7|protein_coding|1/9|c.142G>A|p.Ala48Thr|142/2768|142/1494|48/497||,T|missense_variant|MODERATE|WT1|ENSG00000184937|transcript|ENST00000448076.7|protein_coding|1/10|c.142G>A|p.Ala48Thr|332/2114|142/1545|48/514||,T|upstream_gene_variant|MODIFIER|WT1|ENSG00000184937|transcript|ENST00000379079.6|protein_coding||c.-4665G>A|||||4391|,T|upstream_gene_variant|MODIFIER|WT1-AS|ENSG00000183242|transcript|ENST00000395900.1|antisense||n.-375C>T|||||375|,T|upstream_gene_variant|MODIFIER|WT1|ENSG00000184937|transcript|ENST00000530998.5|protein_coding||c.-4665G>A|||||4391|,T|upstream_gene_variant|MODIFIER|WT1-AS|ENSG00000183242|transcript|ENST00000459866.1|antisense||n.-572C>T|||||572|,T|upstream_gene_variant|MODIFIER|WT1-AS|ENSG00000183242|transcript|ENST00000442957.1|antisense||n.-3166C>T|||||3166|,T|upstream_gene_variant|MODIFIER|WT1-AS|ENSG00000183242|transcript|ENST00000494911.5|antisense||n.-314C>T|||||314|,T|upstream_gene_variant|MODIFIER|WT1-AS|ENSG00000183242|transcript|ENST00000478367.5|antisense||n.-2419C>T|||||2419|,T|upstream_gene_variant|MODIFIER|WT1-AS|ENSG00000183242|transcript|ENST00000525436.1|antisense||n.-597C>T|||||597|,T|upstream_gene_variant|MODIFIER|WT1-AS_1|ENSG00000278822|transcript|ENST00000619639.1|misc_RNA||n.-534C>T|||||534|,T|upstream_gene_variant|MODIFIER|WT1-AS_2|ENSG00000273677|transcript|ENST00000613208.1|misc_RNA||n.-1107C>T|||||1107|,T|upstream_gene_variant|MODIFIER|WT1-AS_3|ENSG00000278045|transcript|ENST00000613262.1|misc_RNA||n.-1593C>T|||||1593|,T|upstream_gene_variant|MODIFIER|WT1-AS_6|ENSG00000276530|transcript|ENST00000614919.1|misc_RNA||n.-3882C>T|||||3882|,T|upstream_gene_variant|MODIFIER|WT1-AS_7|ENSG00000273908|transcript|ENST00000426618.3|misc_RNA||n.-4512C>T|||||4512|,T|upstream_gene_variant|MODIFIER|WT1-AS_8|ENSG00000277119|transcript|ENST00000615200.1|misc_RNA||n.-4905C>T|||||4905|,T|upstream_gene_variant|MODIFIER|WT1-AS|ENSG00000183242|transcript|ENST00000612620.1|misc_RNA||n.-1866C>T|||||1866|,T|upstream_gene_variant|MODIFIER|WT1-AS|ENSG00000183242|transcript|ENST00000615677.1|misc_RNA||n.-2419C>T|||||2419|,T|non_coding_transcript_exon_variant|MODIFIER|WT1|ENSG00000184937|transcript|ENST00000379077.7|nonsense_mediated_decay|1/10|n.142G>A||||||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:407:407:16227:0:0:0,-122.519,-1459.02\\t0/0:99:53:51:2047:2:82:0,-8.17491,-176.625\n16\\t3729155\\t.\\tA\\tT\\t0.0\\tPASS\\tSSC=200.889;TYPE=snp;ANN=T|synonymous_variant|LOW|CREBBP|ENSG00000005339|transcript|ENST00000262367.9|protein_coding|31/31|c.5892T>A|p.Arg1964Arg|6702/10803|5892/7329|1964/2442||,T|synonymous_variant|LOW|CREBBP|ENSG00000005339|transcript|ENST00000382070.7|protein_coding|30/30|c.5778T>A|p.Arg1926Arg|5982/7598|5778/7215|1926/2404||,T|downstream_gene_variant|MODIFIER|CREBBP|ENSG00000005339|transcript|ENST00000571763.5|retained_intron||n.*2753T>A|||||2753|,T|downstream_gene_variant|MODIFIER|CREBBP|ENSG00000005339|transcript|ENST00000576720.1|retained_intron||n.*2756T>A|||||2756|,T|downstream_gene_variant|MODIFIER|CREBBP|ENSG00000005339|transcript|ENST00000637492.1|protein_coding||c.*1357T>A|||||1357|WARNING_TRANSCRIPT_INCOMPLETE\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:99:839:804:27986:26:312:0,-221.796,-2488.24\\t0/0:99:98:91:3314:7:94:0,-20.9068,-289.701\n19\\t49596858\\t.\\tG\\tA\\t23.8449\\tPASS\\tSSC=11.1436;TYPE=snp;ANN=A|synonymous_variant|LOW|PRR12|ENSG00000126464|transcript|ENST00000418929.6|protein_coding|4/14|c.2523G>A|p.Pro841Pro|2535/6955|2523/6111|841/2036||,A|synonymous_variant|LOW|PRR12|ENSG00000126464|transcript|ENST00000615927.1|protein_coding|2/12|c.60G>A|p.Pro20Pro|60/4479|60/3648|20/1215||\\tGT:GQ:DP:RO:QR:AO:QA:GL\\t0/0:65.1424:14:14:520:0:0:0,-4.21442,-47.1235\\t1/1:0.087987:2:0:0:2:73:-6.92919,-0.60206,0\n`\n\n inputChange = {\n /** Keeps track of inputChanges to highlight selected parameter table row*/\n input_sequence_text: false,\n lengths: false,\n peptideMutationPosition1: false,\n peptideMutationPosition2: false,\n frameshiftOverlap: false,\n maximumPeptideLength: false,\n table_state_1: false,\n table_state_2: false,\n }\n /**\n input_vcf_text: string\n peptide_length: int range(9-40, default=20)\n peptide_mutation_position1 number field: range(1-peptide_length)\n peptide_mutation_position2 number field: range(1-peptide_length)\n by default, this should be null\n frameshift_overlap: int range(1-20, default=9)\n min_length_near_start_stop: int range(5-peptide_lenth)\n maximum_peptide_length: int range(peptide_length +1 - peptide_length+10, default=peptide_length+3)\n reference_genome: text\n * */\n\n peptideLengthSliderOptions: Options = { // ngx-slider option\n showTicks: true,\n disabled: false,\n stepsArray: _.map(_.range(9, 41), (num): CustomStepDefinition => {return {value: num, legend: num % 5 === 0 ? `${num}` : undefined}}),\n minRange: 1,\n noSwitching: true,\n hideLimitLabels: true\n };\n /** Peptide Length slider: The '9' and '40' above the control aren't necessary and don't seem to be aligned with the notches. I would suggest to remove them altogether. Also, to be more consistent with TC1, can we move all of the labels above the line? Potentially move the selected length to below the line.*/\n // peptideLengthSliderOptions: Options = {\n // floor: 9,\n // ceil: 40,\n // showTicksValues: true,\n // translate: (value) => {\n // if (value === 9) return '';\n // if (value === 40) return '';\n // else return `${value}`;\n // },\n // // @ts-ignore\n // stepsArray: _.map(_.range(9, 41), (num) => {\n // return {value: num, legend: num % 5 === 0 ? num : null}\n // }),\n // }\n\n /** sequence files */\n // maxCharacters = 1000000;\n maxLines = 5000;\n files: any[] = [];\n fileName = '';\n\n pipelineUrl: string = ''\n\n /** sequence variables */\n synthesisDownloadLinks = {\n sequence_list_json_uri: '',\n vcf_download_uri: ''\n };\n\n swaggerUrl = `${environment['api_url']}/apidocs`\n\n constructor(\n public alertService: AlertServiceService,\n private http: HttpClient,\n private fb: UntypedFormBuilder,\n private _pipelineService: PipelineService,\n private _stateService: PipelineStateService,\n private rootFormGroup: FormGroupDirective, // pipeline component\n private route: ActivatedRoute,\n private router: Router,\n private location: Location,\n private titleService: Title,\n private sequenceParserService: SequenceParserService,\n private modalService: NgbModal,\n ) {\n }\n\n ngOnInit(): void {\n\n /** Load default vcf file*/\n this.http.get(\"assets/vcf-files/syntheticX.rand.speedseq.nrm.decomp.ann.100.vcf\", {responseType: 'text'}).subscribe(data =>{\n console.log(data);\n this.defaultInputVcfText = data;\n })\n\n this.mutgenForm = this.rootFormGroup.control.get(this.formGroupName) as UntypedFormGroup;\n\n this.pipelineId$.pipe(takeUntil(this.unsubscribe$)).subscribe(value => {\n this.pipelineId = value;\n this.pipelineUrl = `${window.location.origin}/pipeline/${value}`;\n })\n this.stages$.pipe(takeUntil(this.unsubscribe$)).subscribe(value => {\n this.stages = value;\n this.errorMessages = this.stages[this.index]?.stage_messages!.errors\n this.warningMessages = this.stages[this.index]?.stage_messages!.warnings\n })\n this.tools$.pipe(takeUntil(this.unsubscribe$)).subscribe(value => {\n console.log('tools$');\n console.log(value);\n this.tools = value;\n this.submitted = this.tools[this.index]?.submitted\n\n // input_vcf_text_id INSTEAD OF inputSequenceTextURIs\n const inputSequenceTextId = this.tools[this.index]?.input_data_uri?.input_vcf_text_id\n\n this.synthesisDownloadLinks.sequence_list_json_uri = `${environment['api_url']}/api/v1/sequence_list_json/${inputSequenceTextId}`\n this.synthesisDownloadLinks.vcf_download_uri = `${environment['api_url']}/api/v1/download_sequences/${inputSequenceTextId}`\n\n /** pipeline Loading */\n this.pipelineLoading = _.some(this.tools, {loading: true})\n\n /** cancel run all */\n if(!this.tools[this.index]?.loading) {\n this.loading = false;\n clearInterval(this.runSetInterval)\n }\n // this.loading = this.tools[this.index]?.loading\n // if (this.tools[this.index]?.submitted){this.submitted = true}\n // if (this.tools[this.index].appliedFilters){this.submitted = true}\n // this.componentDisabled = value[this.index].disabled;\n })\n\n this.params$.pipe(takeUntil(this.unsubscribe$)).subscribe(value => {\n console.log(`params`);\n console.log(value);\n this.params = value;\n })\n\n this.eventsSubscription = this.events.subscribe(() => this.onRunMain());\n this.runAllSubscription = this.runAllEvent.subscribe(() => this.onRunAll())\n\n this.onChanges() // TODO uncomment\n\n }\n\n ngOnDestroy() {\n clearInterval(this.runSetInterval);\n clearInterval(this._pipelineService.runSetInterval)\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n\n this.eventsSubscription.unsubscribe();\n this.runAllSubscription.unsubscribe();\n }\n\n ngAfterViewInit() {\n setTimeout(() => {\n const run = history.state?.run;\n // console.log(run);\n run && this.onRunMain();\n }, 0)\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if(changes.resultUrl?.currentValue) {\n console.log(changes.resultUrl.currentValue);\n console.log('ngOnChanges t-cell')\n this.loading = true;\n this.getResultsSetInterval(changes.resultUrl.currentValue);\n }\n }\n\n get styleResultContainer(){\n return !this.loading && this.submitted ? 'none' : 'dotted';\n }\n\n get inputSequenceText(){\n return this.mutgenForm.get('inputVcfText')?.value\n }\n\n get peptideMutationPosition1() {\n return this.mutgenForm.get('peptideMutationPosition1')?.value;\n }\n\n get peptideMutationPosition2() {\n return this.mutgenForm.get('peptideMutationPosition2')?.value;\n }\n\n onChanges(): void {\n this.mutgenForm.get('peptideMutationPosition1')?.valueChanges.subscribe(() => {\n this.inputChange.peptideMutationPosition1 = this.submitted\n });\n this.mutgenForm.get('peptideMutationPosition2')?.valueChanges.subscribe(() => {\n this.inputChange.peptideMutationPosition2 = this.submitted\n });\n this.mutgenForm.get('frameshiftOverlap')?.valueChanges.subscribe(() => {\n this.inputChange.frameshiftOverlap = this.submitted\n });\n this.mutgenForm.get('maximumPeptideLength')?.valueChanges.subscribe(() => {\n this.inputChange.maximumPeptideLength = this.submitted\n });\n }\n\n onRunMain() {\n // if(this.mutgenForm.invalid){\n // this.alertService.add(`Input sequence text is too long. The maximum number of characters allowed is ${this.maxCharacters.toLocaleString()}\\nYour sequence contains ${this.inputSequenceText.length.toLocaleString()}`, 'alert-danger');\n // this.open(this.alertModal)\n // return;\n // }\n\n const hasResult = _.find(this.tools.slice(this.index+1), (o) => o.submitted || o.loading)\n if(this.stages.length > 1 && hasResult) {\n this.open(this.confirmModal);\n } else {\n this.getResultsClicked = true;\n if(this.index===0) {\n this.onRun();\n } else {\n // this.onRun2()\n }\n }\n }\n\n onRun() {\n /**\n Update pipeline State\n *\n * */\n /** Reset global datatables search ext */\n $.fn.dataTable.ext.search = [];\n\n const stage_number = this.index + 1;\n /** run_stage_range */\n const run_stage_range: [number, number] = [stage_number, stage_number]\n /** default formValue */\n this.setDefaultFormValues()\n /** Sequences */\n let sequences = this.mutgenForm.value.inputVcfText\n\n /** input parameters */\n const inputParameters = this._pipelineService.convertMutgenForm(this.mutgenForm)\n\n /** Table State */\n const { table_state } = this.stages[this.index];\n\n const newStage = {\n \"stage_display_name\": \"Mutated Peptide Generator\",\n \"stage_number\": stage_number,\n \"stage_type\": \"prediction\",\n \"tool_group\": \"mutgen\",\n \"input_vcf_text\": sequences,\n \"input_parameters\": inputParameters,\n \"table_state\": table_state\n }\n\n const params = {\n \"pipeline_id\": '',\n \"pipeline_title\": this.emailForm.controls['name'].value,\n \"email\": this.emailForm.controls['email'].value,\n \"run_stage_range\": run_stage_range,\n \"stages\": [\n newStage\n ]\n }\n\n /** set params */\n const initToolLoading = Object.assign(initMutatedPeptideGeneratorTool, {\n loading: true,\n submitted: false,\n appliedFilters: !_.isEmpty(table_state?.columns)\n })\n this._stateService.setParams(params);\n this._stateService.insertTool(initToolLoading, this.index);\n this._stateService.insertInputParametersToStage(inputParameters, this.index);\n\n // this._stateService.insertTableStateToStage({columns: {}}, this.index);\n\n this.postPipelineAPI(params);\n }\n\n // onRun2() {\n //\n // }\n\n /** File Download/Upload*/\n uploadSequenceFile($event: any) {\n $event.preventDefault();\n /**\n * Used for 'Upload' button\n * */\n const {files} = $event.target;\n files && this.onFileDropped(files);\n }\n\n onFileDropped($event: any[]) {\n console.log($event);\n const file = $event[0];\n const fileSize = file.size / 1024; // in kB\n console.log(file.type);\n if (fileSize > 20000) {\n this.alertService.add('File Size is too big! (20mB max)', 'alert-danger');\n this.open(this.alertModal);\n } else if(file.type==='application/x-gzip') {\n console.log('GZIPPED')\n this.prepareGzipFileList($event)\n } else {\n this.prepareSequenceFileList($event);\n }\n }\n\n /** Modal Functions */\n open(content: any) {\n this.modalOpen = true;\n this.modalService.open(content, {\n ariaLabelledBy: 'modal-basic-title',\n size: 'lg',\n animation: true,\n backdrop: 'static'\n }).result.then((result) => {\n // this.closeResult = `Closed with: ${result}`;\n this.saveState = false;\n this.modalOpen = false;\n }, (reason) => {\n this.saveState = false;\n // this.alleleSearch.nativeElement.focus();\n // this.closeResult = `Dismissed ${TCellPredictionComponent.getDismissReason(reason)}`;\n });\n }\n\n prepareSequenceFileList(files: Array) {\n /**\n * Reads vcf file and enters it via myForm.patchValue({inputVcfText: val});\n * */\n console.log(files);\n this.fileName = files[0].name;\n console.log(this.fileName)\n const reader = new FileReader();\n const myForm = this.mutgenForm;\n for (const item of files) {\n // console.log(item);\n reader.readAsText(item);\n reader.onload = () => {\n const val = reader.result?.toString() || '';\n console.log(val);\n const v = isASCII(val);\n console.log(v);\n if (v) {\n const w = isMaxLines(val, this.maxLines)\n if (w) {\n myForm.patchValue({inputVcfText: val});\n } else {\n this.alertService.add(`VCF is too long - ${this.maxLines.toLocaleString(\"en-US\")} lines max`, 'alert-danger');\n this.open(this.alertModal);\n }\n } else {\n this.alertService.add('Invalid file type.\\nValid file types are .vcf.gz, .vcf,', 'alert-danger');\n this.open(this.alertModal);\n }\n };\n\n reader.onerror = () => {\n console.log(reader.error);\n };\n item.progress = 0;\n this.files.push(item);\n }\n }\n\n prepareGzipFileList(files: Array) {\n /**\n * Reads vcf.gz file and enters it via myForm.patchValue({inputVcfText: val});\n * */\n console.log(files);\n this.fileName = files[0].name;\n console.log(this.fileName)\n const reader = new FileReader();\n const myForm = this.mutgenForm;\n for (const item of files) {\n // console.log(item);\n reader.readAsArrayBuffer(item);\n reader.onload = () => {\n console.log(reader.result)\n // const val = 'asdfads'\n let val = ''\n try {\n val = pako.inflate(reader.result as pako.Data, { to: 'string' });\n } catch (error) {\n this.alertService.add(`Error reading file ${this.fileName}.\\nIf this file was compressed with bgzip, try recompressing with gzip.\\nOtherwise, contact support (help@iedb.org) for assistance.`, 'alert-danger');\n this.open(this.alertModal);\n console.log(error);\n }\n\n // console.log(val);\n const v = isASCII(val);\n\n if (v) {\n const w = isMaxLines(val, this.maxLines)\n if (w) {\n myForm.patchValue({inputVcfText: val});\n } else {\n this.alertService.add(`VCF is too long - ${this.maxLines.toLocaleString(\"en-US\")} lines max`, 'alert-danger');\n this.open(this.alertModal);\n }\n } else {\n this.alertService.add('Invalid file type.\\nValid file types are .vcf.gz, .vcf,', 'alert-danger');\n this.open(this.alertModal);\n }\n };\n\n reader.onerror = () => {\n console.log(reader.error);\n };\n item.progress = 0;\n this.files.push(item);\n }\n }\n\n onLengthChange(changeContext: ChangeContext): void {\n /**\n * used in (userChangeEnd)\n * */\n this.inputChange.lengths = this.submitted;\n }\n onFrameshiftOverlapChange(changeContext: ChangeContext): void {\n /**\n * used in (userChangeEnd)\n * */\n this.inputChange.frameshiftOverlap = this.submitted;\n }\n\n onMaximumPeptideLengthChange(changeContext: ChangeContext): void {\n /**\n * used in (userChangeEnd)\n * */\n this.inputChange.maximumPeptideLength = this.submitted;\n }\n onPeptideMutationPosition1Change(changeContext: ChangeContext): void {\n /**\n * used in (userChangeEnd)\n * */\n this.inputChange.peptideMutationPosition1 = this.submitted;\n }\n onPeptideMutationPosition2Change(changeContext: ChangeContext): void {\n /**\n * used in (userChangeEnd)\n * */\n this.inputChange.peptideMutationPosition2 = this.submitted;\n }\n\n setValueLimits(column: Columns) : any {\n /* set value_limits (i.e. filters) for each column based on if type is a number/string */\n return column['type'] === 'int' || column['type'] === 'float' ? {\n ...column['value_limits'],\n minValue: NaN,\n maxValue: NaN,\n applied: false\n } : {\n // ...column['value_limits'],\n possibleValues: column['value_limits']['unique_values'],\n textValue: null,\n selectedValues: [],\n applied: false\n }\n }\n\n postPipelineAPI(params: PipelineParams, getResults: boolean = true) {\n /**\n * params\n * getResults: boolean\n * false - used in 'Save Table State'\n * */\n /** initial set up */\n this.disableInputs(); // TODO uncomment this\n this.loading = getResults; // true - defaults\n this.submitted = !getResults; // false - defaults\n this.tableStateSaving = !getResults\n if (getResults) {\n this.errorMessages = [];\n this.warningMessages = [];\n }\n this._pipelineService.postPipeline(params).subscribe(\n (resp) => {\n // Errors and Warnings\n if (resp['errors'] && resp['errors'].length) {\n console.log(resp);\n console.error(resp['errors']);\n this.errorMessages = resp['errors'];\n if (resp['warnings'].length) {\n console.log(resp['warnings']);\n this.warningMessages = resp['warnings'];\n }\n this.loading = false;\n this.submitted = true;\n const submittedTool = Object.assign(initMutatedPeptideGeneratorTool, {\n submitted: false,\n loading: false,\n })\n this._stateService.insertTool(submittedTool, this.index);\n this.enableInputs();\n return;\n }\n // Warnings\n if (resp['warnings'].length) {\n console.log(resp['warnings']);\n this.warningMessages = resp['warnings'];\n }\n\n console.log(resp.pipeline_id);\n\n const inputDataUri = {input_sequence_text_id: resp.input_sequence_text_id}\n this._stateService.insertInputDataUriToTool(inputDataUri, this.index)\n\n this._stateService.setPipelineId(resp.pipeline_id);\n this._stateService.setPipelineIdToParams(resp.pipeline_id);\n this._stateService.setPipelineSpecId(resp.pipeline_spec_id);\n /** Display email Modal if emailModalShow=true */\n if (this.showEmailModal) {\n // this.open(this.emailModal);\n }\n this.location.replaceState(`pipeline/${resp.pipeline_id}`)\n // this.titleService.setTitle(`IEDB NG Tools Pipeline`);\n\n if (getResults) {\n const result_url = `${resp.results_uri}`;\n console.log(result_url);\n this.getResultsSetInterval(result_url);\n } else {\n this.submitted = true;\n this.loading = false;\n this.tableStateSaving = false;\n this.enableInputs();\n }\n },\n error => {\n console.error(error);\n this.errorMessages.push(error.error);\n this.submitted = false;\n this.loading = false;\n const prevTool = this.tools[this.index];\n const submittedTool = Object.assign(prevTool, {\n submitted: this.submitted,\n loading: this.loading,\n })\n this._stateService.insertTool(submittedTool, this.index);\n clearInterval(this.runSetInterval);\n this.enableInputs();\n })\n }\n\n getResultsSetInterval(result_url: string) {\n /** */\n this.getResultsClicked = true\n\n // this.residue_table_order = [];\n // this.residue_table_columns = null;\n // this.residue_table = [[]]\n //\n // this.sequence_table = [[]]\n // this.allele_distances_table = [[]]\n // this.residue_table = [[]]\n this.snp_table = [[]]\n // this.processingPlots = []\n\n this.resultUrl = result_url;\n console.log(result_url)\n this.inputChange = _.mapValues(this.inputChange, () => false);\n let increment = 0;\n const milliseconds = 3000;\n this.runSetInterval = setInterval(() => {\n this._pipelineService.getResults(`${result_url}?statusOnly=true`).subscribe(\n {\n next: resp => {\n console.log(resp);\n if (resp['status'] === 'error' || resp['errors']) {\n // this.errorMessages = resp['errors'];\n // this.warningMessages = resp['warnings'];\n this.submitted = false;\n this.loading = false;\n const prevTool = this.tools[this.index];\n const submittedTool = Object.assign(prevTool, {\n submitted: this.submitted,\n loading: this.loading,\n })\n this._stateService.insertTool(submittedTool, this.index);\n clearInterval(this.runSetInterval);\n this.enableInputs();\n }\n if (resp['data']['warnings']?.length) {\n // console.log(resp['warnings']);\n this.warningMessages = resp['data']['warnings'];\n }\n if (resp['data']['errors']?.length) {\n // console.log(resp['warnings']);\n this.errorMessages = resp['data']['errors'];\n }\n\n if (resp['status'] === 'done') {\n clearInterval(this.runSetInterval);\n\n this._pipelineService.getResults(result_url).subscribe(resp => {\n // clearInterval(this.runSetInterval);\n console.log(resp)\n this.defaultOrder = [[]]\n /** 1) Create Column */\n const data = resp['data']['results'];\n this.active = data[0].type // = 'unique_table' // this.active = 'scatter_plots'\n console.log(this.active)\n _.forEach(data, table => {\n if (table.type === 'snp') {\n /** snp_table_columns */\n this.snp_table_columns = _.map(table.table_columns, (column, i: number) => {\n if (column.default_order && Number.isFinite(column.row_sort_priority)) { // set defaultOrder\n this.defaultOrder[column.row_sort_priority] = [i, column.default_order === \"ascending\" ? 'asc' : 'desc'];\n }\n column['title'] = `${column['display_name']}`; // required\n column['data'] = `${column['name']}`;\n let source = column['source'];\n\n column['filterKey'] = `${source}.${column.name}`\n\n // console.log(`source=${source}`);\n let tempSource = source.split('.')\n // console.log(tempSource);\n source = tempSource[tempSource.length - 1];\n // console.log(`source=${source}`);\n column['data'] = `${source}_${column['name']}`;\n /** remove `core` from name */\n // column['name'] = column['display_name'] ? column['display_name'] : column['name']\n\n column['value_limits'] = column['value_limits'] && this.setValueLimits(column)\n\n return column\n });\n this.snp_table_order = [...this.defaultOrder];\n if (this.snp_table_columns) {\n this.snp_table = table.table_data;\n }\n // console.log(this.peptide_table_order);\n // console.log(this.peptide_table_columns);\n // console.log(this.peptide_table);\n /**\n scatterPlotData\n * = \n * 5 = allele\n *\n * indexA (9) = score-peptidea\n * indexB (14) = score-peptideb\n * */\n // TODO COMMENTED THIS OUT\n // _.forEach(table.table_data, (i) => {\n // // console.log(indexA)\n // // console.log(indexB)\n // if(this.scatterPlotData[i[5]]){ // already exists, push\n // this.scatterPlotData[i[5]].push({'peptidea': i[indexA], 'peptideb': i[indexB], 'sequenceA': i[1], 'sequenceB': i[2]})\n // } else { // else, create data and push alleles\n // this.scatterPlotData[i[5]] = [{'peptidea': i[indexA], 'peptideb': i[indexB], 'sequenceA': i[1], 'sequenceB': i[2]}]\n // this.scatterPlotAlleles.push(i[5])\n // }\n // })\n // console.error(this.scatterPlotData)\n }\n if (table.type === 'unique_peptide') {\n /** peptide_output_columns */\n this.unique_peptide_table_columns = _.map(table.table_columns, (column, i: number) => {\n if (column.default_order && Number.isFinite(column.row_sort_priority)) { // set defaultOrder\n this.defaultOrder[column.row_sort_priority] = [i, column.default_order === \"ascending\" ? 'asc' : 'desc'];\n }\n column['title'] = `${column['display_name']}`; // required\n column['data'] = `${column['name']}`;\n let source = column['source'];\n\n column['filterKey'] = `${source}.${column.name}`\n\n // console.log(`source=${source}`);\n let tempSource = source.split('.')\n // console.log(tempSource);\n source = tempSource[tempSource.length - 1];\n // console.log(`source=${source}`);\n column['data'] = `${source}_${column['name']}`;\n /** remove `core` from name */\n // column['name'] = column['display_name'] ? column['display_name'] : column['name']\n\n column['value_limits'] = column['value_limits'] && this.setValueLimits(column)\n\n return column\n });\n this.unique_peptide_table_order = [...this.defaultOrder];\n if (this.unique_peptide_table_columns) {\n this.unique_peptide_table = table.table_data;\n }\n }\n if (table.type === 'peptide') {\n /** output_columns */\n this.peptide_table_columns = _.map(table.table_columns, (column, i: number) => {\n if (column.default_order && Number.isFinite(column.row_sort_priority)) { // set defaultOrder\n this.defaultOrder[column.row_sort_priority] = [i, column.default_order === \"ascending\" ? 'asc' : 'desc'];\n }\n column['title'] = `${column['display_name']}`; // required\n column['data'] = `${column['name']}`;\n let source = column['source'];\n\n column['filterKey'] = `${source}.${column.name}`\n\n // console.log(`source=${source}`);\n let tempSource = source.split('.')\n // console.log(tempSource);\n source = tempSource[tempSource.length - 1];\n // console.log(`source=${source}`);\n column['data'] = `${source}_${column['name']}`;\n /** remove `core` from name */\n // column['name'] = column['display_name'] ? column['display_name'] : column['name']\n\n column['value_limits'] = column['value_limits'] && this.setValueLimits(column)\n\n return column\n });\n this.peptide_table_order = [...this.defaultOrder];\n if (this.peptide_table_columns) {\n this.peptide_table = table.table_data;\n }\n }\n })\n this.submitted = true; this.loading = false;\n const prevTool = this.tools[this.index];\n console.log(prevTool)\n const submittedTCellPredictionTool = Object.assign(prevTool, {\n submitted: this.submitted,\n loading: this.loading,\n })\n this._stateService.insertTool(submittedTCellPredictionTool, this.index);\n\n this.enableInputs();\n })\n }\n if (resp['status'] === 'canceled') {\n /** if status is canceled, then just stop loader **/\n this.submitted = false;\n this.loading = false;\n const prevTool = this.tools[this.index];\n console.log(prevTool)\n const submittedTCellPredictionTool = Object.assign(prevTool, {\n submitted: this.submitted,\n loading: this.loading,\n })\n this._stateService.insertTool(submittedTCellPredictionTool, this.index);\n clearInterval(this.runSetInterval);\n // console.log(data);\n this.enableInputs();\n // set error message\n // this.errorMessages = [`PIPELINE_ID=${this.pipelineId} w/ STATUS=${resp['status']}`]\n }\n else {\n this.getResultsClicked = false;\n console.log(`current status: ${resp['status']} - ${increment}`);\n increment += 1;\n }\n },\n error: error => {\n console.error(error);\n this.enableInputs();\n clearInterval(this.runSetInterval);\n this.loading = false;\n }\n }\n )\n }, milliseconds);\n }\n\n onReset() {\n this.alertService.clear();\n this.errorMessages = [];\n this.warningMessages = [];\n\n // input parameters\n const peptideLength: number = 21;\n const peptideMutationPosition1: number = 11;\n const peptideMutationPosition2: number | null = null;\n const frameshiftOverlap: number = 9\n const minLengthNearStartStop = 16\n const maximumPeptideLength = 24\n\n this.mutgenForm.patchValue({\n inputVcfText: '',\n peptideLength,\n peptideMutationPosition1,\n peptideMutationPosition2,\n frameshiftOverlap,\n minLengthNearStartStop,\n maximumPeptideLength\n }, {emitEvent: false});\n }\n\n onCancel(){\n console.log(this.runSetInterval)\n clearInterval(this.runSetInterval);\n this.emitOnCancel.emit()\n\n this.inputChange.table_state_1 = false; this.inputChange.table_state_2 = false;\n // this.submitted = false;\n const currentTool = this.tools[this.index];\n const unSubmittedTool = {\n ...currentTool,\n loading: false,\n submitted: false,\n appliedFilters: undefined\n }\n this._stateService.insertTool(unSubmittedTool, this.index);\n this.warningMessages = [];\n this.loading = false;\n this.tableStateSaving = false;\n this.enableInputs();\n }\n\n onFilterApplied() {\n this.inputChange.table_state_1 = this.submitted;\n }\n onFilterApplied2() {\n this.inputChange.table_state_2 = this.submitted;\n }\n\n onClearTableState() {\n this.unique_peptide_table_columns = _.map(this.unique_peptide_table_columns, (c) => {\n c.filters = ['int', 'float'].includes(c.type) ? {\n minValue: NaN,\n maxValue: NaN,\n applied: false\n } :\n {\n possibleValues: [],\n textValue: null,\n selectedValues: [],\n applied: false\n }\n return c\n })\n this.inputChange.table_state_1 = this.submitted;\n }\n\n onClearTable2State() {\n this.peptide_table_columns = _.map(this.peptide_table_columns, (c) => {\n c.value_limits = c.type === 'int'? {\n minValue: NaN,\n maxValue: NaN,\n applied: false\n } :\n {\n possibleValues: [],\n textValue: null,\n selectedValues: [],\n applied: false\n }\n return c\n })\n this.inputChange.table_state_2 = this.submitted;\n }\n\n onSaveTableStateMain(table_name: string) {\n console.log(table_name)\n const hasResult = _.find(this.tools.slice(this.index+1), {submitted: true})\n if (hasResult) {\n this.saveState = true;\n this.open(this.confirmModal);\n } else {\n switch (table_name) {\n case 'unique_peptide':\n this.onSaveTable1State();\n break;\n case 'peptide':\n this.onSaveTable2State();\n break;\n }\n }\n }\n onSaveTable1State() {\n const tool_group = 'mutgen'\n\n const params = this.params\n // create colObj and params\n console.log(this.unique_peptide_table_columns)\n console.log(this.peptide_table_columns)\n\n let colObj = columnListToObject(this.unique_peptide_table_columns, tool_group)\n let colObj2 = columnListToObject(this.peptide_table_columns, tool_group)\n\n const table_state = [\n {table: 'unique_peptide', columns: colObj},\n {table: 'peptide', columns: colObj2}\n ]\n this._stateService.insertTableStateToStage(table_state, this.index)\n // this._stateService.insertTableStateToStage({columns: colObj}, this.index)\n\n const stages = params.stages;\n const stageTemp = stages[this.index];\n\n\n stageTemp.table_state[0].columns = colObj\n\n stages[this.index] = stageTemp\n params.stages = stages;\n // run_stage_range\n const stage_number = this.index + 1;\n params.run_stage_range = [stage_number, stage_number];\n this._stateService.setParams(params);\n // appliedFilters\n let appliedFilters = !_.isEmpty(colObj);\n this._stateService.setToolAppliedFilters(appliedFilters, this.index)\n this.postPipelineAPI(params, false);\n this.inputChange.table_state_1 = false;\n\n this.saveState = false;\n }\n\n onSaveTable2State() {\n const tool_group = 'mutgen'\n\n const params = this.params\n /** create colObj and params */\n let colObj = columnListToObject(this.unique_peptide_table_columns, tool_group)\n let colObj2 = columnListToObject(this.peptide_table_columns, tool_group)\n\n const table_state = [\n {table: 'unique_peptide', columns: colObj},\n {table: 'peptide', columns: colObj2 }\n ]\n this._stateService.insertTableStateToStage(table_state, this.index)\n\n const stages = params.stages;\n const stageTemp = stages[this.index];\n console.log(this.peptide_table_columns)\n console.log(stageTemp)\n\n stageTemp.table_state[1].columns = colObj2\n\n stages[this.index] = stageTemp\n params.stages = stages;\n /** run_stage_range */\n const stage_number = this.index + 1;\n params.run_stage_range = [stage_number, stage_number];\n this._stateService.setParams(params);\n /** appliedFilters */\n let appliedFilters = !_.isEmpty(colObj2);\n this._stateService.setToolAppliedFilters(appliedFilters, this.index)\n this.postPipelineAPI(params, false);\n this.inputChange.table_state_2 = false;\n\n this.saveState = false;\n }\n\n onRunConfirm() {\n let indicies = _.range(this.index + 1, this.stages.length)\n let initTool: Tool;\n console.log(indicies);\n _.forEach(indicies, i => {\n initTool = this.tools[i];\n const unSubmittedTool = {\n ...initTool,\n loading: false,\n submitted: false,\n }\n this._stateService.insertTool(unSubmittedTool, i);\n })\n // TODO - need to have a way to save table on confirm modal based on what table was saved - created a variable to keep track of what table is selected\n this.saveState ? this.onSaveTableStateMain('unique_peptide') : this.onRun();\n }\n\n onRunAll() {\n this.setDefaultFormValues()\n this.emitIndex.emit(this.index);\n }\n\n setDefaultFormValues() {\n /** defaults - use Sars placeholders*/\n const input_vcf_text: string = this.defaultInputVcfText;\n /** Sequences */\n let sequences = this.mutgenForm.value.inputVcfText\n if(!sequences && this.index===0) {\n this._stateService.setInputVcfText(input_vcf_text);\n this.mutgenForm.controls.inputVcfText.setValue(input_vcf_text);\n }\n }\n\n enableInputs() {\n this.mutgenForm.controls['peptideMutationPosition1'].enable({emitEvent: false})\n this.mutgenForm.controls['peptideMutationPosition2'].enable({emitEvent: false})\n this.mutgenForm.controls['frameshiftOverlap'].enable({emitEvent: false})\n this.mutgenForm.controls['maximumPeptideLength'].enable({emitEvent: false})\n // this.mutgenForm.enable({emitEvent: false});\n this.peptideLengthSliderOptions = Object.assign({}, this.peptideLengthSliderOptions, {disabled: false});\n }\n\n disableInputs() {\n this.mutgenForm.controls['peptideMutationPosition1'].disable({emitEvent: false})\n this.mutgenForm.controls['peptideMutationPosition2'].disable({emitEvent: false})\n this.mutgenForm.controls['frameshiftOverlap'].disable({emitEvent: false})\n this.mutgenForm.controls['maximumPeptideLength'].disable({emitEvent: false})\n // this.mutgenForm.disable({emitEvent: false}); // this enables the slider for some reason, so disable the controls individually\n this.peptideLengthSliderOptions = Object.assign({}, this.peptideLengthSliderOptions, {disabled: true});\n }\n\n onDownloadJson() {\n onCsvDownloadAllClickedNew(this.synthesisDownloadLinks.sequence_list_json_uri, this.http, 'json');\n }\n\n onDownloadOriginal() {\n /** download vcf file */\n onCsvDownloadAllClickedNew(this.synthesisDownloadLinks.vcf_download_uri, this.http, 'vcf');\n }\n}\n\n\n","
\n
\n Loading...\n
\n
\n\n\n \n
\n \n

Pipeline Map

\n \n
\n \n \n \n \n \n \n \n
    \n
  • \n
    \n \n
    \n \n \n
    \n
    \n
  • \n
  • \n
    \n \n
    \n \n \n
    \n\n
    \n
  • \n
  • \n \n
  • \n
\n
\n
\n\n \n
\n \n
\n

\n \n

\n
\n
\n \n \n \n \n \n \n \n \n \n \n
Pipeline Name\n {{ submittedEmailForm['name'] }}\n
Email\n {{ submittedEmailForm['email'] }}\n
\n
\n
\n
\n
\n \n
\n\n

\n \n

\n
\n
\n \n \n
\n \n
\n\n
\n
\n \n \n
\n Loading...\n
\n \n
\n \n \n \n
\n \n
\n \n \n \n
\n\n
\n \n \n \n \n
\n
\n
\n \n \n
\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n Tool Parameters\n
Predictors\n
\n {{ i + 1 }}\n . {{ o.type }} {{ ['binding', 'processing'].includes(o.type) ? '(' + o.method + ')' : null }}\n \n
\n
length(s)\n \n None\n \n \n \n {{ tCellForm.controls['peptideLength'].value[0] }}\n - {{ tCellForm.controls['peptideLength'].value[1] }}\n \n \n \n {{ tCellForm.controls['peptideLength'].value[0] }}\n \n \n \n
Alleles\n \n ({{ selectedAlleles[0].label }})\n \n \n ({{ selectedAlleles[0].label }}, {{ selectedAlleles[1].label }})\n \n 2\">\n ({{ selectedAlleles[0].label }},... {{ selectedAlleles[selectedAlleles.length - 1].label }})\n \n
\n
\n \n
\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n Tool Parameters\n
Threshold\n {{ clusterForm.controls['threshold'].value * 100 }}%\n
length(s)\n \n {{ clusterMinPeptideLength }}-{{ clusterMaxPeptideLength }}\n \n
Method\n \n {{ clusterForm.controls['method'].value }}\n \n
\n
\n \n
\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n Tool Parameters\n
Proteome\n {{ pepmatchForm.controls['proteome'].value }}\n
Max mismatches\n \n {{ pepmatchForm.controls['mismatch'].value }}\n \n
Best match per peptide\n \n {{ pepmatchForm.controls['bestMatch'].value }}\n \n
\n\n
\n \n
\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n
\n Tool Parameters\n
Quantitation Level\n {{ pepxForm.controls['qlevel'].value }}\n
Data Source\n {{ pepxForm.controls['datasource'].value }}\n
Dataset ID\n \n {{ pepxForm.controls['dataset_id'].value }}\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n Tool Parameters\n
Alleles\n \n ({{ selectedAlleles2[0].label }})\n \n \n ({{ selectedAlleles2[0].label }}, {{ selectedAlleles2[1].label }})\n \n 2\">\n ({{ selectedAlleles2[0].label }},... {{ selectedAlleles2[selectedAlleles2.length - 1].label }})\n \n
Predictors\n
\n {{ i + 1 }}\n . {{ o.type }} {{ ['binding', 'processing'].includes(o.type) ? '(' + o.method + ')' : null }}\n \n
\n
\n
\n \n
\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n\n\n\n\n\n\n\n\n
\n Tool Parameters\n
Peptide Length\n \n {{ mutgenForm.controls['peptideLength'].value }}\n \n
Peptide Mutation Position 1\n \n {{ mutgenForm.controls['peptideMutationPosition1'].value }}\n \n
Peptide Mutation Position 2\n \n {{ mutgenForm.controls['peptideMutationPosition2'].value }}\n \n
Frameshift Overlap\n \n {{ mutgenForm.controls['frameshiftOverlap'].value }}\n \n
Minimum Peptide Length\n \n {{ mutgenForm.controls['minLengthNearStartStop'].value }}\n \n
\n
\n
\n
\n
\n
\n
\n
\n\n\n \n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n Documentation\n \n \n
\n \n \n \n \n \n \n
\n
\n \n \n \n \n \n \n \n \n\n \n\n \n \n
\n
\n \n \n \n \n \n \n \n \n \n\n \n \n
\n
\n\n
\n
\n
\n
\n
\n\n \n \n \n\n
\n \n
\n
\n \n
\n
\n\n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n
\n
\n\n\n\n
\n

Missing/Invalid Parameters

\n \n
\n
\n

Please address the following issues in order for the pipeline to run:

\n \n \n \n \n \n
\n Errors ({{ errorMessages.length }})\n \n
\n
\n \n \n
    \n
  1. {{ message }}
  2. \n
\n
\n
\n \n \n \n \n
\n Warnings ({{ warningMessages.length }}) \n \n
\n
\n \n \n
    \n
  1. {{ message }}
  2. \n
\n
\n
\n
\n
\n
\n
\n
\n\n\n\n
\n

\n Pipeline Name and Email\n

\n \n
\n
\n
\n

\n Add or change the pipeline title and email address and we will send you an email when your job has finished.\n

\n
\n
\n \n
\n \n
\n
\n
\n \n
\n \n
\n
\n
\n
\n \n
\n
\n
\n\n","import {Component, ElementRef, OnDestroy, OnInit, ViewChild} from '@angular/core';\nimport { Title } from '@angular/platform-browser';\n\nimport Stage from \"../_global/Stage\";\nimport {Observable, Subject} from \"rxjs\";\nimport {UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators} from \"@angular/forms\";\nimport {PipelineService} from \"../services/pipeline-service/pipeline.service\";\nimport {PipelineStateService} from \"../services/state-services/pipeline-state-service/pipeline-state.service\";\nimport {ActivatedRoute, Router, Params} from \"@angular/router\";\nimport {HttpClient} from \"@angular/common/http\";\nimport {takeUntil} from \"rxjs/operators\";\nimport Allele from \"../_global/Allele\";\nimport _ from 'lodash';\n\nimport * as pipelineData from \"../services/data/pipeline-example.json\";\nimport * as clusterData from \"../services/data/cluster-sample.json\";\nimport * as tCellData from \"../services/data/t-cell-sample.json\";\nimport * as pepmatchiData from \"../services/data/pepmatch-mismatch-sample.json\";\nimport * as pepxData from \"../services/data/pepx-sample.json\";\nimport * as peptideBindingComparisonData from \"../services/data/pepcomp-sample.json\";\n\n\nimport {environment} from \"../../environments/environment\";\nimport Tool from \"../_global/Tool\";\nimport PipelineParams from \"../_global/PipelineParams\";\nimport {Location} from \"@angular/common\";\nimport {GoogleAnalyticsService} from \"ngx-google-analytics\";\n\nimport {NgbModal} from \"@ng-bootstrap/ng-bootstrap\";\n// import * as sarsSampleData from \"../services/data/t-cell-sample.json\";\n\nimport {\n initClusterState,\n initParams,\n initPepMatchState,\n initTCellPredictionState,\n initPepXState,\n initPeptideBindingComparisonState,\n initMutatedPeptideGeneratorState,\n} from \"../services/state-services/default-stage-states\";\n\n@Component({\n selector: 'app-pipeline-new',\n templateUrl: './pipeline-new.component.html',\n styleUrls: ['./pipeline-new.component.scss']\n})\nexport class PipelineNewComponent implements OnInit, OnDestroy {\n\n @ViewChild('alertModal') alertModal!: ElementRef;\n @ViewChild('emailModal') emailModal!: ElementRef;\n\n runTCellSubject: Subject = new Subject();\n runClusterSubject: Subject = new Subject();\n runPepmatchSubject: Subject = new Subject();\n runPepxSubject: Subject = new Subject();\n runPepcompSubject: Subject = new Subject();\n runMutgenSubject: Subject = new Subject();\n\n runAllTCellSubject: Subject = new Subject();\n runAllClusterSubject: Subject = new Subject();\n runAllPepmatchSubject: Subject = new Subject();\n runAllPepxSubject: Subject = new Subject();\n runAllPepcompSubject: Subject = new Subject();\n runAllMutgenSubject: Subject = new Subject();\n\n sidebarOpened = true;\n\n // state\n stages: Stage[] = []\n\n tools: Tool[] = []\n params!: PipelineParams\n paramsString: string = ''\n pipelineId: string = ''\n pipelineUrl: string = ''\n pipelineSpecUrl: string = ''\n maxCharacters = 1000000\n maxVcfLines = 5000\n\n stages$: Observable = this._stateService.stages$;\n tools$: Observable = this._stateService.tools$;\n pipelineId$: Observable = this._stateService.pipelineId$;\n pipelineSpecId$: Observable = this._stateService.pipelineSpecId$;\n params$: Observable = this._stateService.params$;\n\n /**\n {\n \"mhci\": [\n {\n \"valid_next_step\": \"cluster\",\n \"columns_to_pipe\": [\n \"peptide\"\n ]\n },\n {\n \"valid_next_step\": \"pepmatch\",\n \"columns_to_pipe\": [\n \"peptide\"\n ]\n }\n ],\n \"cluster\": [\n {\n \"valid_next_step\": \"mhci\",\n \"columns_to_pipe\": [\n \"peptide\",\n \"cluster_consensus\"\n ]\n },\n {\n \"valid_next_step\": \"pepmatch\",\n \"columns_to_pipe\": [\n \"peptide\",\n \"cluster_consensus\"\n ]\n }\n ],\n \"pepmatch\": [\n {\n \"valid_next_step\": \"mhci\",\n \"columns_to_pipe\": [\n \"peptide\"\n ]\n },\n {\n \"valid_next_step\": \"cluster\",\n \"columns_to_pipe\": [\n \"peptide\"\n ]\n }\n ]\n}\n * */\n possibleInputsMHCI = [\n {stage_type: 'prediction', tool_group: 'cluster', name: 'Cluster', enabled: true},\n ]\n possibleInputsCluster = [\n {stage_type: 'prediction', tool_group: 'mhci', name: 'T-Cell Prediction', enabled: true},\n ]\n\n validSteps: object = {};\n\n rootForm!: UntypedFormGroup;\n\n emailForm!: UntypedFormGroup;\n submittedEmailForm: { name: string, email: string } = {name: '', email: ''};\n\n inputSequenceText = '';\n\n unsubscribe$ = new Subject();\n\n showEmailModal: boolean = false;\n\n // get pipeline\n loading: boolean = false\n errorMessages: string[] = []\n warningMessages: string[] = []\n\n pipelineLoading = false;\n\n\n constructor(\n private _pipelineService: PipelineService,\n private _stateService: PipelineStateService,\n private fb: UntypedFormBuilder,\n private modalService: NgbModal,\n private router: Router, private activatedRoute: ActivatedRoute, private location: Location,\n private http: HttpClient,\n private titleService: Title,\n protected $gaService: GoogleAnalyticsService\n ) {\n // console.log(this.router.getCurrentNavigation()!.extras.state);\n }\n\n ngOnInit(): void {\n // this.$gaService.pageView('/pipeline-new', 'Teste de Title')\n\n\n this.activatedRoute.params.subscribe((params: Params) => {\n console.log(params)\n const id = params['id'];\n if (id) {\n this.loading = true;\n this._pipelineService.getPipeline(id).subscribe({\n next: (resp) => {\n /**\n if pipeline doesn't exist, navigate back to /pipeline\n\n {\n \"errors\": [\n \"pipeline: aaaa4968-744f-49e9-be96-95d49a does not exist\"\n ]\n }\n */\n if (resp.errors) {\n this.router.navigate(['/error'])\n }\n\n console.log(JSON.stringify(resp, null, 2));\n\n this._stateService.setPipelineId(id);\n this._stateService.setPipelineIdToParams(id);\n this._stateService.setPipelineSpecId(resp.pipeline_spec_id);\n\n /** set emailForm and submittedEmailForm */\n // const emailValue = {\n // email: resp.email,\n // name: resp.pipeline_title\n // }\n // this.emailForm.setValue(emailValue)\n // this.submittedEmailForm = emailValue\n\n /** stages */\n const stages = resp.stages;\n this.initPipeline(stages)\n this.titleService.setTitle(`${stages[0].stage_display_name}`)\n },\n error: (err) => {\n console.error(err)\n }\n })\n }\n\n const specId = params['pipelineSpecId']\n if (specId) {\n console.log(specId)\n this.loading = true;\n this._pipelineService.getPipelineSpec(specId).subscribe((resp) => {\n\n console.log(JSON.stringify(resp, null, 2));\n\n /** stages */\n const stages = resp.pipeline_params.stages;\n this.initPipeline(stages)\n\n this.titleService.setTitle(`${stages[0].stage_display_name}`);\n })\n\n this.location.replaceState('pipeline');\n\n }\n\n this.fetchValidSteps();\n this.stages$.pipe(takeUntil(this.unsubscribe$)).subscribe(value => {\n console.log(value);\n this.stages = value;\n })\n this.tools$.pipe(takeUntil(this.unsubscribe$)).subscribe(value => {\n console.log(value);\n this.tools = value;\n !id && !specId && value.length === 1 && !value[0].submitted && !value[0].loading && this.setInitialForm(value[0]);\n\n this.pipelineLoading = _.some(this.tools, {loading: true})\n })\n this.params$.pipe(takeUntil(this.unsubscribe$)).subscribe(value => {\n console.log(value);\n this.params = value;\n this.paramsString = JSON.stringify(value, null, 2)\n })\n\n this.pipelineId$.pipe(takeUntil(this.unsubscribe$)).subscribe(value => {\n console.log(`pipelineId=${value}`);\n this.pipelineId = value;\n this.pipelineUrl = `${window.location.origin}/pipeline/${value}`;\n })\n\n this.pipelineSpecId$.pipe(takeUntil(this.unsubscribe$)).subscribe(value => {\n console.log(`pipelineSpecId=${value}`);\n this.pipelineSpecUrl = `${window.location.origin}/pipeline_spec/${value}`;\n })\n })\n\n this.activatedRoute.queryParamMap.subscribe(data => {\n /**\n * init pipeline setup\n default) /pipeline\n 1) T-Cell Class I - http://localhost:4200/pipeline?tool=tc1\n 2) Cluster - http://localhost:4200/pipeline?tool=cluster\n 3) PEPMatch - http://localhost:4200/pipeline?tool=pepmatch\n 4) PepX - http://localhost:4200/pipeline?tool=pepx\n 5) Peptide Comparision - http://localhost:4200/pipeline?tool=pepvcomp\n 6) Mutated Peptide Generator - http://localhost:4200/pipeline?tool=mutpepgen\n * */\n const data1 = data\n console.log(data1)\n const initTool = data1.get('tool');\n if(initTool) {\n switch (data1.get('tool')) {\n case 'cluster':\n this.titleService.setTitle(`Epitope Cluster Analysis`);\n const initClusterTool: Tool = {\n name: 'Cluster',\n toolGroup: 'cluster',\n loading: false,\n submitted: false,\n appliedFilters: undefined,\n disabled: false\n }\n this.setInitialStageAndToolGroup(initClusterState, initClusterTool);\n break;\n case 'tc1':\n this.titleService.setTitle(`T Cell Prediction - Class I`);\n const initTCellPredictionTool: Tool = {\n name: 'T-Cell Prediction',\n toolGroup: 'mhci',\n loading: false,\n submitted: false,\n appliedFilters: undefined,\n disabled: false\n }\n this.setInitialStageAndToolGroup(initTCellPredictionState, initTCellPredictionTool)\n break\n case 'pepmatch':\n this.titleService.setTitle(`PEPMatch`);\n const initPepmatchTool = {\n name: 'Pepmatch',\n toolGroup: 'pepmatch',\n loading: false,\n submitted: false,\n appliedFilters: undefined,\n disabled: false\n }\n this.setInitialStageAndToolGroup(initPepMatchState, initPepmatchTool)\n break\n case 'pepx': // http://localhost:4200/pipeline?tool=pepx\n this.titleService.setTitle(`PepX`);\n const initPepxTool = {\n name: 'Pepx',\n toolGroup: 'pepx',\n loading: false,\n submitted: false,\n appliedFilters: undefined,\n disabled: false\n }\n this.setInitialStageAndToolGroup(initPepXState, initPepxTool)\n break\n case 'pepvcomp': // http://localhost:4200/pipeline?tool=pepvcomp\n this.titleService.setTitle(`Peptide Variant Comparison`);\n const initPeptideVariantComparisonTool = {\n name: 'Peptide Variant Comparison',\n toolGroup: 'peptide_variant_comparison',\n loading: false,\n submitted: false,\n appliedFilters: undefined,\n disabled: false\n }\n this.setInitialStageAndToolGroup(initPeptideBindingComparisonState, initPeptideVariantComparisonTool)\n break\n case 'mutpepgen': // http://localhost:4200/pipeline?tool=mutpepgen\n this.titleService.setTitle(`Mutated Peptide Generator`);\n const initMPGTool = {\n name: 'Mutated Peptide Generator',\n toolGroup: 'mutgen',\n loading: false,\n submitted: false,\n appliedFilters: undefined,\n disabled: false\n }\n this.setInitialStageAndToolGroup(initMutatedPeptideGeneratorState, initMPGTool)\n break\n default:\n this.location.replaceState('pipeline');\n this.titleService.setTitle(`IEDB NG Tools Pipeline`);\n break;\n }\n }\n });\n\n\n this.emailForm = this.fb.group({\n email: '',\n name: ''\n });\n }\n\n emitEventToChild() {\n // !tools[tools.length-1].submitted\n if(this.tools[this.tools.length-1].toolGroup === 'mhci'){\n this.runTCellSubject.next();\n }\n if(this.tools[this.tools.length-1].toolGroup === 'cluster'){\n this.runClusterSubject.next();\n }\n if(this.tools[this.tools.length-1].toolGroup === 'pepmatch'){\n this.runPepmatchSubject.next()\n }\n if(this.tools[this.tools.length-1].toolGroup === 'pepx'){\n this.runPepxSubject.next()\n }\n if(this.tools[this.tools.length-1].toolGroup === 'peptide_variant_comparison'){\n this.runPepcompSubject.next()\n }\n if(this.tools[this.tools.length-1].toolGroup === 'mutgen'){\n this.runMutgenSubject.next()\n }\n }\n\n emitRunAllToChild() {\n if(this.tools[this.tools.length-1].toolGroup === 'mhci'){\n this.runAllTCellSubject.next()\n }\n if(this.tools[this.tools.length-1].toolGroup === 'cluster'){\n this.runAllClusterSubject.next();\n }\n if(this.tools[this.tools.length-1].toolGroup === 'pepmatch'){\n this.runAllPepmatchSubject.next()\n }\n if(this.tools[this.tools.length-1].toolGroup === 'pepx'){\n this.runAllPepxSubject.next()\n }\n if(this.tools[this.tools.length-1].toolGroup === 'peptide_variant_comparison'){\n this.runAllPepcompSubject.next()\n }\n if(this.tools[this.tools.length-1].toolGroup === 'mutgen'){\n this.runAllMutgenSubject.next()\n }\n }\n\n\n generateStage(stage: any): Stage {\n /**\n * export default interface Stage {\n * stage_number: number // index\n * stage_type: string // prediction | filter\n * tool_group: string // mhci | cluster | ''\n * input_sequence_text?: string\n * input_stage_number?: number\n * data_to_pipe?: string\n * input_parameters: any\n * name: string\n * result_url?: string\n * }\n * */\n\n return {\n stage_display_name: stage.stage_display_name,\n stage_number: stage.stage_number,\n stage_type: stage.stage_type,\n tool_group: stage.tool_group,\n input_parameters: stage.input_parameters,\n result_url: stage.stage_result_uri ? stage.stage_result_uri : undefined,\n input_sequence_text: stage.input_sequence_text ? stage.input_sequence_text : undefined,\n input_vcf_text: stage.input_vcf_text ? stage.input_vcf_text : undefined,\n piped_data: stage.piped_data ? stage.piped_data : undefined,\n // piped_input: stage.piped_input ? stage.piped_input : undefined,\n table_state: stage.table_state ? stage.table_state : [\n {\n \"table\": \"\",\n \"columns\": {}\n }\n ],\n stage_messages: stage.stage_messages ? stage.stage_messages : {errors: [], warnings: []}\n }\n }\n\n generateTool(stage: any, loading = true): Tool {\n /**\n * toolGroup: 'mhci',\n * loading: false,\n * submitted: false,\n * appliedFilters: undefined,\n * disabled: false\n * */\n const appliedFilters = !_.isEmpty(stage.table_state[0]?.columns) || !_.isEmpty(stage.table_state[1]?.columns)\n return {\n name: stage.tool_group,\n toolGroup: stage.tool_group,\n loading,\n appliedFilters,\n disabled: false,\n submitted: false,\n input_data_uri: stage.input_data_uri ? stage.input_data_uri : undefined\n }\n }\n\n initPipeline(stages: Stage[]) {\n /**\n * Used for GET Pipeline and PipelineSpec\n * */\n let finalStages: Stage[] = []\n let paramStages: Stage[] = []\n let finalTools: Tool[] = []\n _.forEach(stages, (stage, i) => {\n\n const newStage = this.generateStage(stage);\n\n // this._stateService.setInitialStage(newStage);\n finalStages.push(newStage)\n paramStages.push({...newStage, result_url: undefined});\n\n const newTool = this.generateTool(stage, !!this.pipelineId);\n finalTools.push(newTool)\n\n const data = stage.input_parameters;\n\n // Sequence Input\n const input_sequence_text = stage.input_sequence_text;\n\n if (stage.tool_group === 'cluster') { // #1\n if (stage.stage_number === 1) {\n this.setClusterFormGroup(data, input_sequence_text);\n } else {\n this.setClusterFormGroup2(data)\n }\n } else if (stage.tool_group === 'mhci') { // #2\n if (stage.stage_number === 1) {\n this.setMhciFormGroup(data, input_sequence_text);\n } else {\n this.setMhciFormGroup2(data)\n }\n } else if (stage.tool_group === 'pepmatch') { // #3\n if (stage.stage_number === 1) {\n this.setPepmatchFormGroup(data, input_sequence_text);\n } else {\n this.setPepmatchFormGroup2(data)\n }\n } else if (stage.tool_group === 'pepx') { // # 4\n if (stage.stage_number === 1) {\n this.setPepXFormGroup(data, input_sequence_text);\n } else {\n this.setPepXFormGroup2(data)\n }\n } else if (stage.tool_group === 'peptide_variant_comparison') { // # 5\n if (stage.stage_number === 1) {\n this.setPepCompFormGroup(data, input_sequence_text);\n } else {\n this.setPepCompFormGroup2(data)\n }\n } else if (stage.tool_group === 'mutgen') { // # 6\n const input_vcf_text = stage.input_vcf_text;\n if (stage.stage_number === 1) {\n this.setMutGenFormGroup(data, input_vcf_text);\n } else {\n // this.setPepXFormGroup2(data)\n }\n }\n })\n\n this._stateService.setTools(finalTools);\n this._stateService.setStages(finalStages);\n this._stateService.setStagesToParams(paramStages);\n\n this.loading = false;\n }\n\n /** Pipeline Error Modal Functions */\n open(content: any) {\n this.modalService.open(content, {\n ariaLabelledBy: 'modal-basic-title',\n size: 'lg',\n animation: true,\n backdrop: \"static\"\n }).result.then((result) => {\n // this.closeResult = `Closed with: ${result}`;\n }, (reason) => {\n // this.alleleSearch.nativeElement.focus();\n // this.closeResult = `Dismissed ${TCellPredictionComponent.getDismissReason(reason)}`;\n });\n }\n\n /**\n Set FormGroup\n * */\n setMhciFormGroup(data: any, inputSequenceText = '') {\n console.log(data);\n console.log(inputSequenceText);\n\n const {alleles, predictors, peptide_length_range, break_peptides} = data;\n // alleles\n const allelesFormatted = _.map(alleles.split(','), (a: string) => {\n return {label: a, synonym: null, score: null}\n })\n\n // predictors\n const predictorsFormatted: UntypedFormGroup[] = _.map(predictors, (p) => {\n if (p.type === 'binding') {\n return this.mhcBindingFormGroup(p.method)\n } else if (p.type === 'processing') {\n return this.mhcIProcessingFormGroup(p)\n } else if (p.type === 'immunogenicity') {\n const {mask_choice, position_to_mask} = p;\n return this.pmhcImmunogencityFormGroup(mask_choice, position_to_mask)\n } else if (p.type === 'mhcnp') {\n return this.mhcNpFormGroup()\n }\n return this.fb.group({})\n });\n\n const fg = this.addTCellPredictionFormGroup(\n inputSequenceText,\n peptide_length_range ? peptide_length_range[0] : 9,\n peptide_length_range ? peptide_length_range[1] : 9,\n allelesFormatted,\n !peptide_length_range,\n predictorsFormatted\n )\n let root_config = {mhci: fg}\n this.rootForm = this.fb.group(root_config);\n }\n\n setMhciFormGroup2(data: any) {\n console.log(data);\n\n const {alleles, predictors, peptide_length_range, break_peptides} = data;\n\n const allelesFormatted = _.map(alleles.split(','), (a: string) => {\n return {label: a, synonym: null, score: null}\n })\n\n const predictorsFormatted: UntypedFormGroup[] = _.map(predictors, (p) => {\n if (p.type === 'binding') {\n return this.mhcBindingFormGroup(p.method)\n } else if (p.type === 'processing') {\n return this.mhcIProcessingFormGroup(p)\n }\n return this.fb.group({})\n });\n\n const initialControlConfig = {\n peptideLength: new UntypedFormControl([\n peptide_length_range ? peptide_length_range[0] : 9,\n peptide_length_range ? peptide_length_range[1] : 9,\n ]),\n alleles: this.fb.array(allelesFormatted),\n predictionModels: this.fb.array(predictorsFormatted),\n breakPeptides: !peptide_length_range,\n };\n\n const fg = this.fb.group(initialControlConfig)\n this.rootForm.addControl('mhci', fg);\n // let root_config = {mhci: fg}\n // this.rootForm = this.fb.group(root_config);\n }\n\n setClusterFormGroup(data: any, inputSequenceText = '') {\n console.log(data);\n const {cluster_pct_identity, predictors, peptide_length_range} = data;\n const method = predictors[0].method;\n // const allelesFormatted = _.map(alleles.split(','), (a: string) => {return {label: a, synonym: null, score: null}})\n\n\n const fg = this.addClusterFormGroup(\n inputSequenceText,\n cluster_pct_identity,\n peptide_length_range[0],\n peptide_length_range[1],\n method\n )\n let root_config = {cluster: fg}\n this.rootForm = this.fb.group(root_config);\n }\n\n setClusterFormGroup2(data: any) {\n console.log(data);\n const {cluster_pct_identity, predictors, peptide_length_range} = data;\n const method = predictors[0].method;\n // const allelesFormatted = _.map(alleles.split(','), (a: string) => {return {label: a, synonym: null, score: null}})\n\n let minPeptideLength = peptide_length_range[0];\n let maxPeptideLength = peptide_length_range[1];\n\n minPeptideLength = minPeptideLength === 0 ? 4 : minPeptideLength\n maxPeptideLength = maxPeptideLength === 0 ? 26 : maxPeptideLength\n\n /** state update*/\n this._stateService.addStage({\n stage_number: this.stages.length + 1,\n stage_type: 'prediction',\n tool_group: 'cluster',\n stage_display_name: 'Epitope Cluster Analysis',\n // data_to_pipe: 'peptide',\n input_parameters: {}\n })\n\n this._stateService.insertTool({\n name: 'Cluster',\n toolGroup: 'cluster',\n loading: false,\n submitted: false,\n disabled: false\n }, this.tools.length)\n\n this._stateService.setToolDisabled(true, this.tools.length - 1)\n\n const initialControlConfig = {\n threshold: cluster_pct_identity,\n peptideLength: new UntypedFormControl([minPeptideLength, maxPeptideLength]),\n method\n };\n\n const fg = this.fb.group(initialControlConfig)\n // let root_config = {cluster: fg}\n this.rootForm.addControl('cluster', fg);\n }\n\n setPepmatchFormGroup(data: any, inputSequenceText = '') {\n console.log(data);\n const {proteome, mismatch, best_match, include_unmatched_peptides} = data;\n // const method = predictors[0].method;\n const fg = this.addPepmatchFormGroup(\n inputSequenceText,\n proteome,\n mismatch,\n best_match,\n include_unmatched_peptides\n )\n let root_config = {pepmatch: fg}\n this.rootForm = this.fb.group(root_config);\n }\n\n setPepmatchFormGroup2(data: any) {\n console.log(data);\n\n /** state update*/\n this._stateService.addStage({\n stage_number: this.stages.length + 1,\n stage_type: 'prediction',\n tool_group: 'pepmatch',\n stage_display_name: 'Pepmatch',\n // data_to_pipe: 'peptide',\n input_parameters: {}\n })\n\n this._stateService.insertTool({\n name: 'Pepmatch',\n toolGroup: 'pepmatch',\n loading: false,\n submitted: false,\n disabled: false\n }, this.tools.length)\n\n const {proteome, mismatch, best_match, include_unmatched_peptides} = data;\n\n const initialControlConfig = {\n proteome,\n mismatch,\n bestMatch: best_match,\n include_unmatched_peptides\n };\n\n const fg = this.fb.group(initialControlConfig)\n this.rootForm.addControl('pepmatch', fg);\n }\n\n setPepXFormGroup(data: any, inputSequenceText = '') {\n console.log(data);\n const {qlevel, datasource, dataset_id } = data;\n const fg = this.addPepXFormGroup(\n inputSequenceText,\n qlevel,\n datasource,\n dataset_id\n )\n let root_config = {pepx: fg}\n this.rootForm = this.fb.group(root_config);\n }\n\n setPepXFormGroup2(data: any) {\n console.log(data);\n\n /** state update*/\n this._stateService.addStage({\n stage_number: this.stages.length + 1,\n stage_type: 'prediction',\n tool_group: 'pepx',\n stage_display_name: 'PepX',\n // data_to_pipe: 'peptide',\n input_parameters: {}\n })\n\n this._stateService.insertTool({\n name: 'PepX',\n toolGroup: 'pepx',\n loading: false,\n submitted: false,\n disabled: false\n }, this.tools.length)\n\n const {qlevel, datasource, dataset_id} = data;\n\n const initialControlConfig = {\n qlevel,\n datasource,\n dataset_id\n };\n\n const fg = this.fb.group(initialControlConfig)\n this.rootForm.addControl('pepx', fg);\n }\n\n setPepCompFormGroup(data: any, inputSequenceText = '') {\n console.log(data);\n console.log(inputSequenceText);\n\n const {alleles, predictors, break_peptides} = data;\n // alleles\n const allelesFormatted = _.map(alleles.split(','), (a: string) => {\n return {label: a, synonym: null, score: null}\n })\n\n // predictors\n const predictorsFormatted: UntypedFormGroup[] = _.map(predictors, (p) => {\n if (p.type === 'binding') {\n return this.mhcBindingFormGroup(p.method)\n } else if (p.type === 'processing') {\n return this.mhcIProcessingFormGroup(p)\n } else if (p.type === 'immunogenicity') {\n const {mask_choice, position_to_mask} = p;\n return this.pmhcImmunogencityFormGroup(mask_choice, position_to_mask)\n } else if (p.type === 'mhcnp') {\n return this.mhcNpFormGroup()\n }\n return this.fb.group({})\n });\n\n const fg = this.initPepCompFormGroup(\n inputSequenceText,\n allelesFormatted,\n predictorsFormatted\n )\n let root_config = {pepcomp: fg}\n this.rootForm = this.fb.group(root_config);\n }\n\n setPepCompFormGroup2(data: any) {\n console.log(data);\n\n /** state update*/\n this._stateService.addStage({\n stage_number: this.stages.length + 1,\n stage_type: 'prediction',\n tool_group: 'peptide_variant_comparison',\n stage_display_name: 'Peptide Variant Comparison',\n input_parameters: {},\n table_state: [{table: 'peptide_table', columns: {}}],\n stage_messages: {errors: [], warnings: []}\n })\n\n this._stateService.insertTool({\n name: 'Peptide Variant Comparison',\n toolGroup: 'peptide_variant_comparison',\n loading: false,\n submitted: false,\n appliedFilters: undefined,\n disabled: false\n }, this.tools.length)\n\n const {alleles, predictors, break_peptides} = data;\n // alleles\n const allelesFormatted = _.map(alleles.split(','), (a: string) => {\n return {label: a, synonym: null, score: null}\n })\n\n // predictors\n const predictorsFormatted: UntypedFormGroup[] = _.map(predictors, (p) => {\n if (p.type === 'binding') {\n return this.mhcBindingFormGroup(p.method)\n } else if (p.type === 'processing') {\n return this.mhcIProcessingFormGroup(p)\n } else if (p.type === 'immunogenicity') {\n const {mask_choice, position_to_mask} = p;\n return this.pmhcImmunogencityFormGroup(mask_choice, position_to_mask)\n } else if (p.type === 'mhcnp') {\n return this.mhcNpFormGroup()\n }\n return this.fb.group({})\n });\n\n const initialControlConfig = {\n // inputSequenceText: [seq, Validators.maxLength(this.maxCharacters)],\n // peptideLength: new UntypedFormControl([minPeptideLength, maxPeptideLength]),\n alleles: this.fb.array(allelesFormatted),\n predictionModels: this.fb.array(predictorsFormatted)\n };\n\n\n const fg = this.fb.group(initialControlConfig)\n this.rootForm.addControl('pepcomp', fg);\n }\n\n setMutGenFormGroup(data: any, inputVcfText = '') {\n // console.log(data);\n // console.log(inputVcfText);\n const {peptide_length, peptide_mutation_position1, peptide_mutation_position2,\n frameshift_overlap, maximum_peptide_length} = data;\n\n const fg = this.addMutGenFormGroup(\n inputVcfText,\n peptide_length,\n peptide_mutation_position1,\n peptide_mutation_position2,\n frameshift_overlap,\n maximum_peptide_length\n )\n\n let root_config = {mutgen: fg}\n this.rootForm = this.fb.group(root_config);\n }\n\n ngOnDestroy() {\n clearInterval(this._pipelineService.runSetInterval)\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n\n get addedToolGroups() {\n return _.map(this.stages, (o) => o.tool_group);\n }\n\n setInitialForm(stage: Tool) {\n /**\n Used to set rootForm with either 'mhci' or 'cluster'\n * */\n console.log(stage);\n let root_config = {}\n if (stage?.toolGroup === 'mhci') { // t-cell prediction\n root_config = {mhci: this.addTCellPredictionFormGroup()}\n } else if (stage?.toolGroup === 'cluster') { // cluster\n root_config = {cluster: this.addClusterFormGroup()}\n } else if (stage?.toolGroup === 'pepmatch') { // pepmatch\n root_config = {pepmatch: this.addPepmatchFormGroup()}\n } else if (stage?.toolGroup === 'pepx') { // pepx\n root_config = {pepx: this.addPepXFormGroup()}\n }\n else if (stage?.toolGroup === 'peptide_variant_comparison') { // pepx\n root_config = {pepcomp: this.addPepCompFormGroup()}\n }\n else if (stage?.toolGroup === 'mutgen') { // mutgen\n root_config = {mutgen: this.addMutGenFormGroup()}\n }\n console.log(root_config);\n this.rootForm = this.fb.group(root_config);\n }\n\n setInitialStageAndToolGroup(state: any, tool: any) {\n /**\n Mainly used in this.activatedRoute.queryParamMap.subscribe()\n * */\n const initState = _.cloneDeep(state)\n // const initTool = _.cloneDeep(tool)\n\n // const initState = JSON.parse(JSON.stringify(state))\n // const initTool = JSON.parse(JSON.stringify(tool))\n\n // const initState = Object.assign({}, state)\n // const initTool = Object.assign({}, tool)\n\n this._stateService.setInitialStage(initState)\n this._stateService.setInitialTool(tool)\n this._stateService.setParams(initParams)\n this._stateService.setPipelineId('')\n this._stateService.setPipelineSpecId('')\n }\n\n get tCellForm() {\n return this.rootForm.get('mhci') as UntypedFormGroup;\n }\n\n get clusterForm() {\n return this.rootForm.get('cluster') as UntypedFormGroup;\n }\n\n get pepmatchForm() {\n return this.rootForm.get('pepmatch') as UntypedFormGroup;\n }\n\n get pepxForm() {\n return this.rootForm.get('pepx') as UntypedFormGroup;\n }\n\n get pepcompForm() {\n return this.rootForm.get('pepcomp') as UntypedFormGroup;\n }\n\n get mutgenForm() {\n return this.rootForm.get('mutgen') as UntypedFormGroup;\n }\n\n get selectedAlleles() {\n /**\n\n * */\n return this.tCellForm.controls['alleles'].value;\n }\n\n get selectedAlleles2() {\n /**\n\n * */\n return this.pepcompForm.controls['alleles'].value;\n }\n\n get selectedAlleleLabels() {\n /**\n sidebar - Used to show min and max peptide length\n * */\n return this.tCellForm.controls['alleles'].value.map((o: Allele) => o.label).join(', ');\n }\n\n get predictionModels() {\n /**\n sidebar - Used to show min and max peptide length\n * */\n return this.tCellForm.controls['predictionModels'].value;\n }\n\n get predictionModels2() {\n /**\n sidebar - Used to show min and max peptide length\n * */\n return this.pepcompForm.controls['predictionModels'].value;\n }\n\n get clusterMinPeptideLength() {\n return [4, 26].includes(this.clusterForm.controls['peptideLength'].value[0]) ?\n 0 : this.clusterForm.controls['peptideLength'].value[0]\n }\n\n get clusterMaxPeptideLength() {\n return [4, 26].includes(this.clusterForm.controls['peptideLength'].value[1]) ?\n 0 : this.clusterForm.controls['peptideLength'].value[1]\n }\n\n debug() { // debugger\n /** defaults - use Sars placeholders*/\n\n console.log(this.inputSequenceText);\n this.pipelineId$.pipe(takeUntil(this.unsubscribe$)).subscribe(value => {\n console.log(`pipelineId=${value}`);\n })\n this.stages$.pipe(takeUntil(this.unsubscribe$)).subscribe(value => {\n console.log('this.stages$');\n console.log(value);\n })\n this.tools$.pipe(takeUntil(this.unsubscribe$)).subscribe(value => {\n console.log('this.tools$');\n console.log(value);\n })\n // this.inputSequenceText$.pipe(takeUntil(this.unsubscribe$)).subscribe(value => {\n // console.log(value);\n // })\n this.params$.pipe(takeUntil(this.unsubscribe$)).subscribe(value => {\n console.log('this.params$');\n console.log('params');\n console.log(value);\n })\n }\n\n onCancelRuns() {\n /**\n Sends a PUT request to change status to 'canceled'\n\n Also stops\n * */\n const params = {\n cancel_run: true\n }\n\n this._pipelineService.putPipeline(this.pipelineId, params).subscribe((resp) => {\n console.log(resp)\n })\n\n _.forEach(this.tools, (tool, i) => {\n console.log(tool)\n const cancelTool = {\n ...tool,\n loading: false,\n }\n this._stateService.insertTool(cancelTool, i);\n })\n }\n\n onShowEmailChange(e: boolean) {\n console.log(e)\n this.showEmailModal = e;\n }\n\n onOpenEmailModal() {\n this.open(this.emailModal)\n }\n\n onRunAll(index: number) {\n // debugger\n // console.log(JSON.stringify(this.rootForm.value, null, 2));\n\n $.fn.dataTable.ext.search = [];\n\n const stage_number = index + 1;\n /** run_stage_range */\n const run_stage_range: [number, number] = [1, stage_number]\n\n console.log(this.params);\n\n const stages = this.stages.slice(0, stage_number)\n console.log(stages);\n this.params.run_stage_range = run_stage_range\n let initTool: Tool;\n\n _.forEach(this.stages, (stage, i) => {\n console.log(stage)\n const key = stage.tool_group\n\n /** Input sequence text */\n\n switch (key) {\n case \"mhci\": {\n if (i === 0) {\n let seq: string = ''\n let all: string = ''\n if(environment.production || environment['name'] === 'DEV') { // prod or dev\n const {input_sequence_text, alleles } = tCellData; // correct examples\n seq = input_sequence_text\n all = alleles\n } else {\n const {input_sequence_text, alleles } = pipelineData;\n seq = input_sequence_text\n all = alleles\n }\n // const {input_sequence_text} = tCellData;\n let sequences = this.tCellForm.get('inputSequenceText')?.value;\n if (!sequences) {\n this._stateService.setInputSequenceText(seq); // TODO - delete (prob don't need)\n this.tCellForm.controls.inputSequenceText.setValue(seq);\n sequences = seq;\n }\n this.params.stages[i].input_sequence_text = sequences\n }\n\n if (i <= index) {\n this.params.stages[i].input_parameters = this._pipelineService.convertTCellForm(this.tCellForm)\n this._stateService.setToolLoading(true, false, i)\n } else {\n this.params.stages[i].input_parameters = {}\n initTool = this.tools[i];\n const unSubmittedTool = {\n ...initTool,\n loading: false,\n submitted: false,\n }\n this._stateService.insertTool(unSubmittedTool, i);\n }\n\n break\n }\n case 'cluster': {\n if (i === 0) {\n const {input_sequence_text} = clusterData;\n let sequences = this.clusterForm.get('inputSequenceText')?.value;\n if (!sequences) {\n this._stateService.setInputSequenceText(input_sequence_text); // TODO - delete (prob don't need)\n this.clusterForm.controls.inputSequenceText.setValue(input_sequence_text);\n sequences = input_sequence_text;\n }\n this.params.stages[i].input_sequence_text = sequences\n }\n if (i <= index) {\n this.params.stages[i].input_parameters = this._pipelineService.convertClusterForm(this.clusterForm)\n this._stateService.setToolLoading(true, false, i)\n } else {\n this.params.stages[i].input_parameters = {}\n initTool = this.tools[i];\n const unSubmittedTool = {\n ...initTool,\n loading: false,\n submitted: false,\n }\n this._stateService.insertTool(unSubmittedTool, i);\n }\n break\n }\n case 'pepmatch': {\n\n if (i === 0) {\n const {input_sequence_text} = pepmatchiData;\n let sequences = this.pepmatchForm.get('inputSequenceText')?.value;\n if (!sequences) {\n this._stateService.setInputSequenceText(input_sequence_text); // TODO - delete (prob don't need)\n this.pepmatchForm.controls.inputSequenceText.setValue(input_sequence_text);\n sequences = input_sequence_text;\n }\n this.params.stages[i].input_sequence_text = sequences\n }\n if (i <= index) {\n this.params.stages[i].input_parameters = this._pipelineService.convertPepmatchForm(this.pepmatchForm)\n this._stateService.setToolLoading(true, false, i)\n } else {\n this.params.stages[i].input_parameters = {}\n initTool = this.tools[i];\n const unSubmittedTool = {\n ...initTool,\n loading: false,\n submitted: false,\n }\n this._stateService.insertTool(unSubmittedTool, i);\n }\n break\n }\n case 'pepx': {\n if (i === 0) {\n const {input_sequence_text} = pepxData;\n let sequences = this.pepxForm.get('inputSequenceText')?.value;\n if (!sequences) {\n this._stateService.setInputSequenceText(input_sequence_text); // TODO - delete (prob don't need)\n this.pepxForm.controls.inputSequenceText.setValue(input_sequence_text);\n sequences = input_sequence_text;\n }\n this.params.stages[i].input_sequence_text = sequences\n }\n if (i <= index) {\n this.params.stages[i].input_parameters = this._pipelineService.convertPepxForm(this.pepxForm)\n this._stateService.setToolLoading(true, false, i)\n } else {\n this.params.stages[i].input_parameters = {}\n initTool = this.tools[i];\n const unSubmittedTool = {\n ...initTool,\n loading: false,\n submitted: false,\n }\n this._stateService.insertTool(unSubmittedTool, i);\n }\n break\n }\n case 'peptide_variant_comparison': {\n if (i === 0) {\n const {input_sequence_text} = peptideBindingComparisonData;\n let sequences = this.pepcompForm.get('inputSequenceText')?.value;\n if (!sequences) {\n this._stateService.setInputSequenceText(input_sequence_text); // TODO - delete (prob don't need)\n this.pepcompForm.controls.inputSequenceText.setValue(input_sequence_text);\n sequences = input_sequence_text;\n }\n this.params.stages[i].input_sequence_text = sequences\n }\n if (i <= index) {\n this.params.stages[i].input_parameters = this._pipelineService.convertPepcompForm(this.pepcompForm)\n this._stateService.setToolLoading(true, false, i)\n } else {\n this.params.stages[i].input_parameters = {}\n initTool = this.tools[i];\n const unSubmittedTool = {\n ...initTool,\n loading: false,\n submitted: false,\n }\n this._stateService.insertTool(unSubmittedTool, i);\n }\n break\n }\n case 'mutgen': {\n if (i === 0) {\n let seq: string = ''\n let all: string = ''\n if(environment.production || environment['name'] === 'DEV') { // prod or dev\n const {input_sequence_text, alleles } = tCellData; // correct examples\n seq = input_sequence_text\n all = alleles\n } else {\n const {input_sequence_text, alleles } = pipelineData;\n seq = input_sequence_text\n all = alleles\n }\n // const {input_sequence_text} = tCellData;\n let sequences = this.mutgenForm.get('inputVcfText')?.value;\n if (!sequences) {\n this._stateService.setInputSequenceText(seq); // TODO - delete (prob don't need)\n this.mutgenForm.controls.inputSequenceText.setValue(seq);\n sequences = seq;\n }\n this.params.stages[i].input_sequence_text = sequences\n }\n\n if (i <= index) {\n this.params.stages[i].input_parameters = this._pipelineService.convertMutgenForm(this.mutgenForm)\n this._stateService.setToolLoading(true, false, i)\n } else {\n this.params.stages[i].input_parameters = {}\n initTool = this.tools[i];\n const unSubmittedTool = {\n ...initTool,\n loading: false,\n submitted: false,\n }\n this._stateService.insertTool(unSubmittedTool, i);\n }\n\n break\n }\n default: {\n break\n }\n }\n })\n\n this.params.pipeline_title = this.emailForm.controls['name'].value;\n this.params.email = this.emailForm.controls['email'].value;\n\n\n console.log(this.params);\n this._stateService.setParams(this.params);\n\n this.postPipelineAPI(this.params);\n }\n\n postPipelineAPI(params: PipelineParams, getResults: boolean = true) {\n /**\n * Run All Above Post Pipeline\n * */\n this._pipelineService.postPipeline(params).subscribe(\n (resp) => {\n console.log(resp);\n if (resp.pipeline_id) {\n this._stateService.setPipelineId(resp.pipeline_id);\n this._stateService.setPipelineIdToParams(resp.pipeline_id);\n this._stateService.setPipelineSpecId(resp.pipeline_spec_id);\n this.location.replaceState(`pipeline/${resp.pipeline_id}`)\n // this.titleService.setTitle(`IEDB NG Tools Pipeline`);\n\n this._pipelineService.getPipeline(resp.pipeline_id).subscribe(value => {\n console.log(value);\n console.log(value.stages);\n _.forEach(value.stages, (s, i: number) => {\n console.log(i)\n if (i===0) {\n this.titleService.setTitle(`${s.stage_display_name}`)\n }\n this._stateService.changeResultUrl(s.stage_result_uri, i)\n })\n })\n } else if (resp.errors || resp.warnings) {\n this.errorMessages = resp.errors;\n this.warningMessages = resp.warnings;\n this.open(this.alertModal)\n console.log(resp)\n }\n }, error => {\n console.error(error)\n this.errorMessages.push(error)\n this.loading = false\n // this.submitted = false\n // this.tableStateSaving = false\n // this.enableInputs()\n });\n }\n\n fetchValidSteps() {\n /**\n /api/v1/pipeline/valid_steps\n * */\n const API_URL = `${environment['api_url']}/api/v1/pipeline/valid_steps`;\n this.http.get(API_URL).subscribe(value => {\n this.validSteps = value;\n console.log(value);\n })\n }\n\n addTCellPredictionFormGroup(\n inputSequenceText = '',\n minPeptideLength = 9,\n maxPeptideLength = 9,\n alleles: Allele[] = [],\n breakPeptides: boolean = false,\n predictions = [this.mhcBindingFormGroup()]\n ) {\n const seq = sessionStorage.getItem('sequences') ? sessionStorage.getItem('sequences') : inputSequenceText;\n sessionStorage.removeItem('sequences');\n\n const all = sessionStorage.getItem('selectedAlleles') ? JSON.parse(sessionStorage.getItem('selectedAlleles') as string) : alleles\n sessionStorage.removeItem('selectedAlleles')\n\n const initialControlConfig = {\n inputSequenceText: [seq, Validators.maxLength(this.maxCharacters)],\n peptideLength: new UntypedFormControl([minPeptideLength, maxPeptideLength]),\n alleles: this.fb.array(all),\n breakPeptides: breakPeptides,\n predictionModels: this.fb.array(predictions)\n };\n return this.fb.group(initialControlConfig)\n }\n\n initPepCompFormGroup(\n inputSequenceText = '',\n // minPeptideLength = 9,\n // maxPeptideLength = 9,\n alleles: Allele[] = [],\n // breakPeptides: boolean = false,\n predictions = [this.mhcBindingFormGroup()]\n ) {\n const seq = sessionStorage.getItem('sequences') ? sessionStorage.getItem('sequences') : inputSequenceText;\n sessionStorage.removeItem('sequences');\n\n const all = sessionStorage.getItem('selectedAlleles') ? JSON.parse(sessionStorage.getItem('selectedAlleles') as string) : alleles\n sessionStorage.removeItem('selectedAlleles')\n\n const initialControlConfig = {\n inputSequenceText: [seq, Validators.maxLength(this.maxCharacters)],\n // peptideLength: new UntypedFormControl([minPeptideLength, maxPeptideLength]),\n alleles: this.fb.array(all),\n // breakPeptides: breakPeptides,\n predictionModels: this.fb.array(predictions)\n };\n return this.fb.group(initialControlConfig)\n }\n\n removeToolFromPipeline(formControlName: string) {\n /**\n * pop - Remove an item from the end of an array (Tools)\n 2 situations:\n When there is result\n When there is no result.\n * */\n this._stateService.popStage()\n this._stateService.popTool()\n this._stateService.popStageFromParams()\n\n this.rootForm.removeControl(formControlName)\n }\n\n addTCellPrediction(i: number, dataToPipe: string, tableName: string = 'peptide_table' ) {\n const stage = {\n stage_number: this.stages.length + 1,\n stage_type: 'prediction',\n tool_group: 'mhci',\n piped_data: {piped_input: [\n {\n piped_fields: [`${tableName}.${dataToPipe}`],\n piped_stage_number: i,\n }\n ]},\n stage_display_name: 'T Cell Prediction - Class I',\n input_parameters: {},\n table_state: {columns: {}},\n stage_messages: {errors: [], warnings: []},\n }\n\n this._stateService.addStage(stage)\n this._stateService.addStageToParams(stage)\n\n this._stateService.insertTool({\n name: 'T-Cell Prediction',\n toolGroup: 'mhci',\n loading: false,\n submitted: false,\n disabled: false\n }, i)\n // this.stages.push({stage_number: 3, stage_type: 'prediction', tool_group: 'cluster', name: 'Cluster', input_parameters: {}});\n const initialControlConfig = {\n inputSequenceText: '',\n // sequences: sessionStorage.getItem('sequences') ? sessionStorage.getItem('sequences') : '',\n peptideLength: new UntypedFormControl([9, 10]),\n alleles: this.fb.array([]),\n // email: null,\n // jobTitle: null,\n breakPeptides: false,\n predictionModels: this.fb.array([\n this.mhcBindingFormGroup(),\n // this.mhcBindingFormGroup('smmpmbec'),\n // this.mhcBindingFormGroup('smm'),\n // this.pmhcImmunogencityFormGroup(),\n // this.mhcIProcessingFormGroup()\n ])\n };\n\n this.rootForm.addControl('mhci', this.fb.group(initialControlConfig));\n }\n\n addClusterFormGroup(\n inputSequenceText = '',\n threshold = 0.7,\n minPeptideLength = 4,\n maxPeptideLength = 26,\n method = 'cluster-break'\n ) {\n\n const seq = sessionStorage.getItem('sequences') ? sessionStorage.getItem('sequences') : inputSequenceText;\n sessionStorage.removeItem('sequences');\n\n minPeptideLength = minPeptideLength === 0 ? 4 : minPeptideLength\n maxPeptideLength = maxPeptideLength === 0 ? 26 : maxPeptideLength\n\n const initialControlConfig = {\n inputSequenceText: [seq, Validators.maxLength(this.maxCharacters)],\n threshold,\n peptideLength: new UntypedFormControl([minPeptideLength, maxPeptideLength]),\n method\n };\n return this.fb.group(initialControlConfig)\n }\n\n addCluster(i: number, dataToPipe: string = 'peptide', tableName: string = 'peptide_table') {\n /**\n i - tools.length\n * */\n console.log('add cluster');\n const stage = {\n stage_number: this.stages.length + 1,\n stage_type: 'prediction',\n tool_group: 'cluster',\n stage_display_name: 'Epitope Cluster Analysis',\n piped_data: {piped_input: [\n {\n piped_fields: [`${tableName}.${dataToPipe}`],\n piped_stage_number: i,\n }\n ]},\n input_parameters: {},\n table_state: {columns: {}},\n stage_messages: {errors: [], warnings: []},\n }\n\n /** state update*/\n this._stateService.addStage(stage)\n this._stateService.addStageToParams(stage)\n\n this._stateService.insertTool({\n name: 'Cluster',\n toolGroup: 'cluster',\n loading: false,\n submitted: false,\n appliedFilters: undefined,\n disabled: false\n }, i)\n\n this._stateService.setToolDisabled(true, i - 1)\n /** rootForm update */\n\n const initialControlConfig = {\n inputSequenceText: \"\",\n threshold: 0.7,\n peptideLength: new UntypedFormControl([4, 26]),\n method: 'cluster-break'\n };\n\n this.rootForm.addControl('cluster', this.fb.group(initialControlConfig));\n }\n\n /**\n Used in T-Cell Predictions\n 1) mhcBindingFormGroup\n 2) pmhcImmunogencityFormGroup\n 3) mhcIProcessingFormGroup\n * */\n mhcBindingFormGroup(method = 'netmhcpan_el') {\n /**\n * Creates mhcBindingFormGroup using formBuilder\n *\n * Currently defaulted to 'netmhcpan_el'\n * */\n return this.fb.group({\n type: 'binding',\n method: this.fb.control(method),\n })\n }\n\n mhcNpFormGroup() {\n /**\n * Creates mhcNpFormGroup using formBuilder\n * */\n return this.fb.group({\n type: 'mhcnp'\n })\n }\n\n pmhcImmunogencityFormGroup(mask_choice = 'default', position_to_mask = '2,5,9') {\n /**\n * */\n return this.fb.group({\n type: 'immunogenicity',\n mask_choice: mask_choice,\n position_to_mask: this.fb.control(position_to_mask),\n })\n }\n\n mhcIProcessingFormGroup(predictor: any) {\n /**\n * TODO: add the rest of methods in\n * Creates mhcBindingFormGroup using formBuilder\n *\n * Currently defaulted to 'netmhcpan_el'\n * */\n\n const method = predictor.method\n\n switch (method) {\n case 'basic_processing': {\n return this.fb.group({\n type: \"processing\",\n method: this.fb.control(method),\n mhc_binding_method: \"netmhcpan_ba\",\n proteasome: \"immuno\",\n tap_precursor: 1,\n tap_alpha: 0.2\n\n })\n }\n case 'netchop': {\n return this.fb.group({\n type: 'processing',\n method: this.fb.control(method),\n network_method: predictor.network_method,\n threshold: predictor.threshold\n })\n }\n case 'netctl': {\n return this.fb.group({\n type: 'processing',\n method: this.fb.control(method),\n cleavage_weight: predictor.cleavage_weight,\n tap_weight: predictor.tap_weight,\n threshold: predictor.threshold\n })\n }\n case 'netctlpan': {\n return this.fb.group({\n type: 'processing',\n method: this.fb.control(method),\n cleavage_weight: predictor.cleavage_weight,\n tap_weight: predictor.tap_weight,\n epitope_threshold: predictor.epitope_threshold\n })\n }\n default:\n return this.fb.group({\n type: 'processing',\n method: this.fb.control(method),\n })\n }\n\n\n }\n\n onGoToStage(toolGroup: string) {\n /**\n * used in pipeline sidebar to go to specific stage\n * all Tools' labels' ids are set to ${toolGroup}-label\n * */\n const navbarHeight = 81 // same as $navbar-height: 81px;\n window.scroll({\n left: 0,\n top: document.getElementById(`${toolGroup}-label`)!.offsetTop - navbarHeight,\n behavior: 'smooth'\n });\n }\n\n /* PepMatch Functions */\n addPepmatchFormGroup(\n inputSequenceText = '',\n proteome = 'Human',\n mismatch = 3,\n bestMatch = true,\n include_unmatched_peptides = false\n ) {\n\n const seq = sessionStorage.getItem('sequences') ? sessionStorage.getItem('sequences') : inputSequenceText;\n sessionStorage.removeItem('sequences');\n\n const initialControlConfig = {\n inputSequenceText: [seq, Validators.maxLength(this.maxCharacters)],\n proteome,\n mismatch,\n bestMatch,\n include_unmatched_peptides\n };\n return this.fb.group(initialControlConfig)\n }\n\n addPepmatch(i: number, dataToPipe: string = 'peptide', tableName: string = 'peptide_table') {\n console.log('add pepmatch');\n const stage = {\n stage_number: this.stages.length + 1,\n stage_type: 'prediction',\n tool_group: 'pepmatch',\n stage_display_name: 'Pepmatch',\n piped_data: {piped_input: [\n {\n piped_fields: [`${tableName}.${dataToPipe}`],\n piped_stage_number: i,\n }\n ]},\n input_parameters: {},\n table_state: {columns: {}},\n stage_messages: {errors: [], warnings: []},\n }\n\n /** state update*/\n this._stateService.addStage(stage)\n this._stateService.addStageToParams(stage)\n\n this._stateService.insertTool({\n name: 'Pepmatch',\n toolGroup: 'pepmatch',\n loading: false,\n submitted: false,\n disabled: false\n }, i)\n\n this._stateService.setToolDisabled(true, i - 1)\n /** rootForm update */\n\n const defaultFormGroup = this.addPepmatchFormGroup()\n\n this.rootForm.addControl('pepmatch', defaultFormGroup);\n }\n\n /* PepX Functions */\n addPepXFormGroup(\n inputSequenceText = '',\n qlevel = 'gene',\n datasource = 'Abelin',\n // dataset = 'v1'\n dataset_id = 2\n ) {\n\n const seq = sessionStorage.getItem('sequences') ? sessionStorage.getItem('sequences') : inputSequenceText;\n sessionStorage.removeItem('sequences');\n\n const initialControlConfig = {\n inputSequenceText: [seq, Validators.maxLength(this.maxCharacters)],\n qlevel,\n datasource,\n // dataset\n dataset_id\n };\n return this.fb.group(initialControlConfig)\n }\n\n addPepX(i: number, dataToPipe: string = 'peptide', tableName: string = 'peptide_table') {\n console.log('add pepx');\n const stage = {\n stage_number: this.stages.length + 1,\n stage_type: 'prediction',\n tool_group: 'pepx',\n stage_display_name: 'PepX',\n piped_data: {piped_input: [\n {\n piped_fields: [`${tableName}.${dataToPipe}`],\n piped_stage_number: i,\n }\n ]},\n input_parameters: {},\n table_state: {columns: {}},\n stage_messages: {errors: [], warnings: []},\n }\n\n /** state update*/\n this._stateService.addStage(stage)\n this._stateService.addStageToParams(stage)\n\n this._stateService.insertTool({\n name: 'PepX',\n toolGroup: 'pepx',\n loading: false,\n submitted: false,\n disabled: false\n }, i)\n\n this._stateService.setToolDisabled(true, i - 1)\n /** rootForm update */\n\n // const defaultFormGroup = this.addPepmatchFormGroup()\n const defaultFormGroup = this.addPepXFormGroup()\n\n this.rootForm.addControl('pepx', defaultFormGroup);\n }\n\n /* PepComp Functions */\n addPepCompFormGroup(\n inputSequenceText = '',\n alleles = this.fb.array([]),\n predictionModels = this.fb.array([this.mhcBindingFormGroup()])\n ) {\n\n const seq = sessionStorage.getItem('sequences') ? sessionStorage.getItem('sequences') : inputSequenceText;\n sessionStorage.removeItem('sequences');\n\n const initialControlConfig = {\n inputSequenceText: seq,\n alleles: alleles,\n predictionModels: predictionModels,\n };\n\n return this.fb.group(initialControlConfig)\n }\n\n addPepComp(i: number, tableName: string = 'unique_peptide', dataToPipe1: string = 'reference_peptide', dataToPipe2: string = 'mutant_peptide') {\n console.log('addPepComp');\n const stage = {\n stage_number: this.stages.length + 1,\n stage_type: 'prediction',\n tool_group: 'peptide_variant_comparison',\n stage_display_name: 'Peptide Variant Comparison',\n piped_data: {piped_input: [\n {\n piped_fields: [`${tableName}.${dataToPipe1}`,`${tableName}.${dataToPipe2}`],\n piped_stage_number: i,\n }\n ]},\n input_parameters: {},\n table_state: [{table: 'peptide_table', columns: {}}],\n stage_messages: {errors: [], warnings: []}\n }\n\n this._stateService.addStage(stage)\n this._stateService.addStageToParams(stage)\n\n this._stateService.insertTool({\n name: 'Peptide Variant Comparison',\n toolGroup: 'peptide_variant_comparison',\n loading: false,\n submitted: false,\n appliedFilters: undefined,\n disabled: false\n }, i)\n this._stateService.setToolDisabled(true, i - 1)\n\n const defaultFormGroup = this.addPepCompFormGroup()\n\n this.rootForm.addControl('pepcomp', defaultFormGroup);\n }\n\n // isToolGroupSelected(toolGroup: string) {\n // /**\n // * Used to display different tools in root form\n // * filters and finds tool_group name (i.e 'mhci', 'cluster').\n // * */\n // const a = _.filter(this.stages, (o) => o.tool_group === toolGroup);\n // return a.length;\n // }\n\n /** MutGen Functions */\n addMutGenFormGroup(\n inputVcfText = '',\n peptide_length: number = 21,\n peptide_mutation_position1: number = 11,\n peptide_mutation_position2: number | null = null,\n frameshift_overlap: number = 9,\n min_len_near_start_stop: number = 16,\n maximum_peptide_length: number = 24\n ) {\n\n const seq = sessionStorage.getItem('sequences') ? sessionStorage.getItem('sequences') : inputVcfText;\n sessionStorage.removeItem('sequences');\n\n const initialControlConfig = {\n inputVcfText: seq,\n peptideLength: peptide_length,\n peptideMutationPosition1: peptide_mutation_position1,\n peptideMutationPosition2: peptide_mutation_position2,\n frameshiftOverlap: frameshift_overlap,\n minLengthNearStartStop: min_len_near_start_stop,\n maximumPeptideLength: maximum_peptide_length\n };\n\n return this.fb.group(initialControlConfig)\n }\n\n /*** Email functions */\n onSubmitEmailModal() {\n\n this.submittedEmailForm = {...this.emailForm.value}\n\n // console.log(this.submittedEmailForm)\n\n if (this.pipelineId) {\n const params = {\n email: this.submittedEmailForm.email,\n pipeline_title: this.submittedEmailForm.name\n }\n\n this._pipelineService.putPipeline(this.pipelineId, params).subscribe((resp) => {\n // console.log(resp)\n })\n }\n\n this.modalService.dismissAll()\n }\n\n\n}\n","
\n\n\n
\n

\n {{e}}\n

\n
\n
\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\n\nimport {BenchmarkComponent} from \"./benchmark/benchmark.component\";\nimport {CitationComponent} from './citation/citation.component';\nimport {ToolsListComponent} from './tools-list/tools-list.component';\nimport {ToolContributionComponent} from \"./tool-contribution/tool-contribution.component\";\nimport {HomeComponent} from \"./home/home.component\";\nimport {DownloadAllComponent} from \"./download-all/download-all.component\";\nimport {PipelineNewComponent} from \"./pipeline-new/pipeline-new.component\";\nimport {VersionComponent} from \"./version/version.component\";\nimport {PipelineErrorComponent} from \"./pipeline-error/pipeline-error.component\";\n\nconst routes: Routes = [\n {\n path: 'all-tools-list',\n component: ToolsListComponent,\n data: {title: 'IEDB NG Tools List'}\n },\n {\n path: 'benchmark',\n component: BenchmarkComponent,\n data: {title: 'IEDB NG Tools Benchmarks'}\n },\n {\n path: 'citation',\n component: CitationComponent,\n data: {title: 'IEDB NG Tools Citations'}\n },\n {\n path: 'contributing-tools',\n component: ToolContributionComponent,\n data: {title: 'Contributing to IEDB NG Tools'}\n },\n {\n path: 'download-all',\n component: DownloadAllComponent,\n data: {title: 'IEDB NG Tools Downloads'}\n },\n {\n path: 'error',\n component: PipelineErrorComponent,\n data: {title: 'IEDB NG Tools Error'}\n },\n {\n path: 'home',\n component: HomeComponent,\n data: {title: 'IEDB Next-Generation Tools'}\n },\n {\n path: 'pipeline',\n component: PipelineNewComponent\n },\n {\n path: 'pipeline/:id',\n component: PipelineNewComponent,\n },\n {\n path: 'pipeline_spec/:pipelineSpecId',\n component: PipelineNewComponent,\n },\n {\n path: '_version',\n component: VersionComponent,\n data: {title: 'IEDB Version Info'},\n },\n {\n path: '',\n component: HomeComponent,\n data: {title: 'IEDB Next-Generation Tools'},\n },\n { path: '**', redirectTo: ''}\n];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes)],\n exports: [RouterModule]\n})\nexport class AppRoutingModule { }\n","import { Component } from '@angular/core';\nimport {PipelineStateService} from \"../services/state-services/pipeline-state-service/pipeline-state.service\";\nimport {Observable, Subject} from \"rxjs\";\nimport {takeUntil} from \"rxjs/operators\";\n\n@Component({\n selector: 'app-pipeline-error',\n templateUrl: './pipeline-error.component.html',\n styleUrls: ['./pipeline-error.component.scss']\n})\nexport class PipelineErrorComponent {\n\n pipelineId$: Observable = this._stateService.pipelineId$;\n pipelineId = '';\n\n errorMessage = ''\n\n unsubscribe$ = new Subject();\n\n constructor(\n private _stateService: PipelineStateService,\n ) {\n }\n\n ngOnInit(): void {\n this.pipelineId$.pipe(takeUntil(this.unsubscribe$)).subscribe(value => {\n console.log(`pipelineId=${value}`);\n this.pipelineId = value;\n this.errorMessage = `Pipeline ${this.pipelineId} does not exist`\n })\n\n }\n\n}\n","\n
\n
\n

\n {{errorMessage}}\n

\n \n Home\n \n
\n
\n","import { Component, OnInit } from '@angular/core';\nimport {HttpClient} from \"@angular/common/http\";\nimport Citation from \"../_global/Citation\";\nimport {environment} from \"../../environments/environment\";\nimport * as _ from \"lodash\";\n\n@Component({\n selector: 'app-version',\n templateUrl: './version.component.html',\n styleUrls: ['./version.component.scss']\n})\nexport class VersionComponent implements OnInit {\n\n loading: boolean = false;\n // citations: any[] = [];\n // uniq: string[] = []\n // groupedCitations: {\"T cell - class I\": Citation[]} = {\"T cell - class I\": []}\n\n versionInfo: string = ''\n versionArr: string[] = []\n\n\n constructor(\n private http: HttpClient\n ) { }\n\n ngOnInit(): void {\n this.getVersionInfo()\n }\n\n getVersionInfo() {\n this.loading = true;\n const CITATIONS_API_URL = `${environment['api_url']}/api/v1/citations`;\n const URL = 'assets/_version/versioninfo.yml'\n this.http.get(URL, {responseType: 'text'}).subscribe(value => {\n console.log(value)\n this.versionInfo = value;\n this.versionArr = value.split('\\n')\n // this.citations = value.data;\n // // this.citations = _.orderBy(value.data, ['grouping_title', 'key']) /** uncomment later */\n // this.uniq = []\n // _.forEach(this.citations, (c) => {\n // if (!this.uniq.includes(c.grouping_title)) {\n // this.uniq.push(c.grouping_title)\n // console.log(c.grouping_title)\n // // @ts-ignore\n // this.groupedCitations[c.grouping_title] = [c]\n // } else {\n // // @ts-ignore\n // this.groupedCitations[c.grouping_title].push(c)\n // }\n // })\n // console.log(this.uniq)\n // console.log(this.groupedCitations)\n this.loading = false;\n })\n }\n\n}\n","\n\n\n\n
\n

\n Cookies\n

\n\n\n\n
\n\n
\n

\n We use cookies to provide you with an optimal website experience. By continuing to use the website, you agree to the use of cookies.\n You can learn more about the cookies we use here: Privacy Policy\n

\n
\n
\n \n
\n\n
\n","import { Component, Input, OnInit } from '@angular/core';\n// import {NgbModal} from \"@ng-bootstrap/ng-bootstrap\";\nimport { CookieDialogComponent } from '../cookie-dialog/cookie-dialog.component';\n\n\n@Component({\n selector: 'app-footer',\n templateUrl: './footer.component.html',\n styleUrls: ['./footer.component.scss']\n})\nexport class FooterComponent implements OnInit {\n\n @Input()\n public cookieComponent!: CookieDialogComponent;\n\n // modalOpen = false;\n\n constructor(\n // private modalService: NgbModal,\n ) { }\n\n ngOnInit(): void {\n }\n\n showCookieDialog() {\n this.cookieComponent.showCookieDialog();\n }\n\n // open(content: any) {\n // this.modalOpen = true;\n // this.modalService.open(content, {\n // ariaLabelledBy: 'modal-basic-title',\n // size: 'lg',\n // animation: true,\n // backdrop: 'static'\n // }).result.then((result) => {\n // // this.closeResult = `Closed with: ${result}`;\n // // this.saveState = false;\n // this.modalOpen = false;\n // }, (reason) => {\n // // this.saveState = false;\n // // this.alleleSearch.nativeElement.focus();\n // // this.closeResult = `Dismissed ${TCellPredictionComponent.getDismissReason(reason)}`;\n // });\n // }\n\n}\n","import { Injectable } from '@angular/core';\n\ndeclare let gtag: Function;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class GoogleAnalyticsService {\n constructor() {}\n public eventEmitter(eventName: string, eventCategory: string, eventAction: string, eventLabel: string, eventValue: number) {\n gtag('event', eventName, {\n eventCategory,\n eventLabel,\n eventAction,\n eventValue,\n });\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SharedService {\n acceptedConsent: boolean = false;\n}\n","
\n
\n \n
\n

Privacy settings

\n

\n We use cookies to gather anonymized analytics data and use this information to monitor website performance and\n make user interface improvements. You can learn more about our use of cookies and how your privacy is managed\n in our Privacy Policy\n\n

\n
\n \n \n
\n
\n
\n
\n
\n","import {Component, OnInit} from '@angular/core';\nimport {NavigationEnd, Router} from '@angular/router';\nimport {Title} from \"@angular/platform-browser\";\n\n// import {environment} from \"../../environments/environment\";\n\nimport {GoogleAnalyticsService} from '../services/google-analytics/google-analaytics.service';\nimport {SharedService} from '../services/google-analytics/shared.service';\n\ndeclare let gtag: Function;\n\n@Component({\n selector: 'app-cookie-dialog',\n templateUrl: './cookie-dialog.component.html',\n styleUrls: ['./cookie-dialog.component.css'],\n providers: [GoogleAnalyticsService]\n})\nexport class CookieDialogComponent implements OnInit {\n\n constructor(private router: Router, private googleAnalyticsService: GoogleAnalyticsService, public sharedService: SharedService, private titleService:Title) { }\n public closePopup = false;\n\n\n ngOnInit() {\n // if (this.getConsent()) {\n if (this.getUserAnswered()) {\n\n this.accept();\n }\n else {\n //delete all cookies from this page\n this.deny();\n this.sharedService.acceptedConsent = false;\n this.closePopup = false;\n }\n }\n\n public showCookieDialog() {\n this.closePopup = false;\n }\n\n\n public loadScript() {\n let body = document.body;\n let script = document.createElement('script');\n script.innerHTML = '';\n script.src = 'https://www.googletagmanager.com/gtag/js?id=G-MFNL7MJ8EV';\n script.async = true;\n script.defer = true;\n body.appendChild(script);\n }\n\n public deny(): void {\n this.sharedService.acceptedConsent = false;\n this.deleteCookie(\"_ga\");\n this.deleteCookie(\"_ga_MFNL7MJ8EV\");\n this.setConsent(false);\n this.closePopup = true;\n }\n\n public accept(): void {\n this.router.events.subscribe(event => {\n if (event instanceof NavigationEnd) {\n if (typeof gtag !== 'undefined') {\n gtag('config', 'G-MFNL7MJ8EV', {\n page_title: event.urlAfterRedirects,\n page_location: event.urlAfterRedirects,\n page_path: event.urlAfterRedirects,\n });\n }\n }\n });\n this.loadScript();\n this.googleAnalyticsService.eventEmitter(this.titleService.getTitle(), window.location.href, \"Visit\", 'Visit', 1);\n this.sharedService.acceptedConsent = true;\n this.setConsent(true);\n // this.setUserAnswered(true);\n this.closePopup = true;\n }\n\n public contactFormUsed() {\n if(this.getConsent()) {\n this.googleAnalyticsService.eventEmitter('Contact', 'Contact', \"Contact\", 'Contact', 1);}\n }\n\n public getUserAnswered(): boolean {\n\n return localStorage.getItem('user_answered') === 'true';\n\n }\n\n public setUserAnswered(value: boolean): void {\n localStorage.setItem('user_answered', value ? 'true' : 'false');\n }\n\n public getConsent(): boolean {\n\n return localStorage.getItem('cookies_consented') === 'true';\n\n }\n\n public setConsent(value: boolean): void {\n localStorage.setItem('cookies_consented', value ? 'true' : 'false');\n }\n\n private deleteCookie(name: string) {\n this.setCookie(name, '', -1);\n }\n\n private setCookie(name: string, value: string, expireDays: number, path: string = 'path=/;') {\n let d: Date = new Date();\n d.setTime(d.getTime() + expireDays * 24 * 60 * 60 * 1000);\n let expires: string = `expires=${d.toUTCString()}`;\n let domain : string = \"localhost\";\n\n if(window.location.hostname != \"localhost\")\n {\n // if window.location.hostname is not equal to 'localhost' then check environment.production and set to prod/dev domain\n domain = 'iedb.org'\n }\n let cpath: string = path ? `; path=${path}; domain=${domain}` : '';\n document.cookie = `${name}=${value}; ${expires}${cpath}`;\n }\n\n}\n","import {Component} from '@angular/core';\n\nexport const GLOBALS = {\n logo: 'assets/logos/iedb/IEDB-logo-blue.svg',\n};\n\n@Component({\n selector: 'app-navbar',\n templateUrl: './navbar.component.html',\n styleUrls: ['./navbar.component.scss']\n})\nexport class NavbarComponent {\n logoImage = GLOBALS.logo;\n status: boolean = false;\n\n constructor() {}\n\n}\n","\n","import { Component } from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport { Router, NavigationEnd, ActivatedRoute } from '@angular/router';\nimport { filter, map } from 'rxjs/operators';\n\n@Component({\n selector: 'app-root',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.scss']\n})\nexport class AppComponent {\n constructor(\n private router: Router,\n private titleService: Title\n ) {}\n\n ngOnInit() {\n this.router.events\n .pipe(\n filter((event) => event instanceof NavigationEnd),\n map(() => {\n let route: ActivatedRoute = this.router.routerState.root;\n let routeTitle = '';\n while (route!.firstChild) {\n route = route.firstChild;\n }\n if (route.snapshot.data['title']) {\n routeTitle = route!.snapshot.data['title'];\n }\n return routeTitle;\n })\n )\n .subscribe((title: string) => {\n if (title) {\n this.titleService.setTitle(`${title}`);\n }\n });\n }\n\n // title = 'Nextgen IEDB Tools';\n}\n","\n\n\n\n","import { NgModule } from '@angular/core';\nimport { BrowserModule, Title } from '@angular/platform-browser';\n\nimport {HttpClientModule} from '@angular/common/http';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {DragDropModule} from '@angular/cdk/drag-drop';\n\nimport {DataTablesModule} from \"angular-datatables\";\nimport { NgxSliderModule } from 'ngx-slider-v2';\nimport {\n NgbTypeaheadModule,\n NgbAccordionModule,\n NgbDropdownModule,\n NgbTooltipModule,\n NgbPopoverModule,\n NgbNavModule,\n NgbAlertModule,\n NgbToastModule, NgbModule\n} from '@ng-bootstrap/ng-bootstrap';\n\n// import { NgxGoogleAnalyticsModule, NgxGoogleAnalyticsRouterModule } from 'ngx-google-analytics';\n\n// import {environment} from \"../environments/environment\";\n\nimport {AppRoutingModule} from './app-routing.module';\n\nimport {AppComponent} from './app.component';\nimport {AlertComponentComponent} from './alert-component/alert-component.component';\nimport {HomeComponent} from './home/home.component';\nimport {FooterComponent} from './footer/footer.component';\nimport { CookieDialogComponent } from './cookie-dialog/cookie-dialog.component';\nimport {NavbarComponent} from \"./navbar/navbar.component\";\nimport {DndDirectiveDirective} from './directives/dnd-directive.directive';\n// import {PlaygroundComponent} from './playground/playground.component';\nimport {TCellPredictionComponent} from './mhci/t-cell-prediction/t-cell-prediction.component';\n\nimport { BenchmarkComponent } from './benchmark/benchmark.component';\nimport { CitationComponent } from './citation/citation.component';\nimport { ToolContributionComponent } from './tool-contribution/tool-contribution.component';\nimport { DownloadAllComponent } from './download-all/download-all.component';\nimport { MhcBindingFormgroupComponent } from './mhci/prediction-model-formgroups/mhc-binding-formgroup/mhc-binding-formgroup.component';\nimport { PmhcImmunogenicityFormgroupComponent } from './mhci/prediction-model-formgroups/pmhc-immunogenicity-formgroup/pmhc-immunogenicity-formgroup.component';\nimport { MhcIProcessingFormgroupNewComponent } from './mhci/prediction-model-formgroups/mhc-i-processing-formgroup-new/mhc-i-processing-formgroup-new.component';\n\n// import { MhcNpFormgroupComponent } from './mhci/prediction-model-formgroups/mhc-np-formgroup/mhc-np-formgroup.component';\nimport { ResultTableComponent } from './result-table/result-table.component';\nimport { ClusterComponent } from './cluster/cluster.component';\nimport {ToolsListComponent} from './tools-list/tools-list.component';\nimport { SequenceInputComponent } from './sequence-input/sequence-input.component';\nimport { D3ForceComponent } from './d3-force/d3-force.component';\nimport { KeysPipe } from \"./_pipes/keys.pipe\";\nimport { tagPipe } from \"./_pipes/tag.pipe\";\nimport { DashToDecimalPipe } from \"./_pipes/dash-to-decimal.pipe\";\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport {MatSidenavModule} from \"@angular/material/sidenav\";\nimport {ClipboardModule} from \"@angular/cdk/clipboard\";\nimport {MatMenuModule} from '@angular/material/menu';\nimport {MatChipsModule} from '@angular/material/chips';\nimport {MatIconModule} from \"@angular/material/icon\";\nimport {PipelineNewComponent} from \"./pipeline-new/pipeline-new.component\";\nimport { PepmatchComponent } from './pepmatch/pepmatch.component';\nimport { VersionComponent } from './version/version.component';\nimport { ResultTableAngularComponent } from './result-table-angular/result-table-angular.component';\nimport { PipelineErrorComponent } from './pipeline-error/pipeline-error.component';\nimport { PepxComponent } from './pepx/pepx.component';\nimport { PeptideVariantComparisonComponent } from './mhci/peptide-variant-comparison/peptide-variant-comparison.component';\nimport { D3PlotComponent } from './d3-plot/d3-plot.component';\nimport { MutatedPeptideGeneratorComponent } from './mutated-peptide-generator/mutated-peptide-generator.component';\n@NgModule({\n declarations: [\n AppComponent,\n AlertComponentComponent,\n FooterComponent,\n CookieDialogComponent,\n HomeComponent,\n NavbarComponent,\n DndDirectiveDirective,\n TCellPredictionComponent,\n BenchmarkComponent,\n CitationComponent,\n ToolContributionComponent,\n ToolsListComponent,\n DownloadAllComponent,\n MhcBindingFormgroupComponent,\n // MhcNpFormgroupComponent,\n PmhcImmunogenicityFormgroupComponent,\n ResultTableComponent,\n ClusterComponent,\n SequenceInputComponent,\n D3ForceComponent,\n KeysPipe,\n tagPipe,\n DashToDecimalPipe,\n PipelineNewComponent,\n MhcIProcessingFormgroupNewComponent,\n PepmatchComponent,\n VersionComponent,\n ResultTableAngularComponent,\n PipelineErrorComponent,\n PepxComponent,\n PeptideVariantComparisonComponent,\n D3PlotComponent,\n MutatedPeptideGeneratorComponent\n ],\n imports: [\n BrowserModule,\n HttpClientModule,\n // ...environment.optionalModules,\n AppRoutingModule,\n DragDropModule,\n FormsModule,\n ReactiveFormsModule,\n DataTablesModule,\n NgbAlertModule,\n NgbTypeaheadModule,\n NgbAccordionModule,\n NgbDropdownModule,\n NgbTooltipModule,\n NgbPopoverModule,\n NgbNavModule,\n NgbToastModule,\n NgxSliderModule,\n BrowserAnimationsModule,\n MatSidenavModule,\n MatMenuModule,\n MatChipsModule,\n MatIconModule,\n ClipboardModule,\n NgbModule\n ],\n providers: [Title],\n bootstrap: [AppComponent]\n})\nexport class AppModule { }\n","/// \n\nimport { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport { AppModule } from './app/app.module';\nimport { environment } from './environments/environment';\n\nif (environment.production) {\n enableProdMode();\n window.console.log = () => { }\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule)\n .catch(err => console.error(err));\n"],"x_google_ignoreList":[]}