{"version":3,"sources":["jsdelivr-header.js","/npm/ytpro@3.9.80/script.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACIA,GAAmB,MAAhB,OAAO,OAAoD,QAAnC,aAAa,QAAQ,WAAqB,CAErE,IAAI,OAAS,SAAS,cAAc,UAAW,OAAO,IAAI,oCAAqC,SAAS,KAAK,YAAY,QAAS,OAAO,OAAO,KAAK,MAAM,MAAM,CACjK,CAGA,IAAI,SAAS,CAGb,IAAI,SAAS,OACT,OAAO,GACP,KAAI,EACJ,MAAK,EACT,MAAM,EAAgB,iBAAiB,UAAU,MACjD,OAAO,SAAU,EACjB,OAAO,OAAM,EACb,OAAO,cAAe,EACtB,IAAI,MAAM,GACN,QAAQ,CAAC,gBAAgB,cAAc,UAAU,uBACjD,SAAS,GACT,aAAe,CACf,UAAW,oEACX,YAAa,oEACb,qBAAsB,oEACtB,eAAgB,oEAChB,iBAAkB,oEAClB,0BAA2B,oEAC3B,mBAAoB,oEACpB,qBAAsB,oEACtB,8BAA+B,qEAG/B,YAAY,CAChB,MAAM,CAAC,MAAM,MAAM,MAAM,QACzB,MAAM,CAAC,OAAO,SAGd,IAAI,EAAc,EACd,EAAY,EACZ,EAAgB,KAGpB,IAAI,KAAK,KACL,IAAI,QAAQ,YACZ,IAAM,QAAQ,gBAAgB,IAEM,MAArC,aAAa,QAAQ,cAAyD,MAAhC,aAAa,QAAQ,SAAmD,MAAhC,aAAa,QAAQ,SAAqD,MAAlC,aAAa,QAAQ,YACtJ,aAAa,QAAQ,UAAU,QAC/B,aAAa,QAAQ,SAAS,QAC9B,aAAa,QAAQ,OAAO,QAC5B,aAAa,QAAQ,OAAO,SAC5B,aAAa,QAAQ,QAAQ,SAC7B,aAAa,QAAQ,YAAY,QACjC,aAAa,QAAQ,cAAc,aACnC,aAAa,QAAQ,SAAS,oJAC9B,aAAa,QAAQ,UAAU,SAE/B,aAAa,QAAQ,cAAc,SAEnC,YAAY,MAAM,SAAS,IAC3B,aAAa,QAAQ,EAAE,OAAO,IAG9B,YAAY,MAAM,SAAS,IAC3B,aAAa,QAAQ,EAAE,OAAO,KAIM,QAAjC,aAAa,QAAQ,UACxB,SAAS,kBAAkB,YAAY,GAAG,aAAa,UAAU,IAG7D,CAAC,YAAa,qBAAsB,YAAa,WAAW,SAAS,aAAa,QAAQ,iBAC9F,aAAa,QAAQ,cAAe,aAKpC,OADG,OAAO,SAAS,SAAS,QAAQ,WAAa,EAC1C,OAAO,SAAS,SAGhB,IAAK,gBAAgB,OAAO,SAAS,QAAS,IAAI,KAKzD,IAAI,EAAE,OACF,EAAE,UACF,GAAG,OACH,KAAI,EACJ,SAAS,MAGV,SAAS,OAAO,QAAQ,aAAe,GAC1C,GAAI,OAAO,EAAG,OAAO,EAAE,wBACvB,KAAI,IAEJ,GAAI,OAAO,EAAE,OAAO,EAAE,mBACtB,KAAI,GAGJ,IAAI,QAAQ,qPAGF,4IAKoD,kBAa9D,SAAS,WAET,IAAI,EAAY,SAAS,cAAc,SACnC,EAAkB,EAAU,YAAY,KAAK,GACjD,EAAU,UAAU,YAAc,wBAAwB,GAE1D,IAAI,EAAM,OAAO,YAEjB,QAAY,IAAR,EAAJ,CACA,IAAI,EAAsB,EAAI,gBAAgB,KAAK,GACnD,EAAI,gBAAkB,wBAAwB,EAFjB,CAG7B,CAGA,SAAS,wBAAwB,GAGjC,OAAO,SAAU,GACjB,QAAa,IAAT,EAAoB,MAAO,GAC/B,IAAI,EAAmB,GACM,UAAzB,aAAmB,MACvB,EAAiB,KAAK,OAEM,UAAxB,aAAkB,KACtB,EAAiB,KAAK,OAEM,UAAxB,aAAkB,KACtB,EAAiB,KAAK,MAAO,QAED,SAAxB,aAAkB,KACtB,EAAiB,KAAK,OAAQ,QAED,UAAzB,aAAmB,MACvB,EAAiB,KAAK,QAEO,UAAzB,aAAmB,MACvB,EAAiB,KAAK,QAItB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAiB,OAAQ,IAC7C,IAA2C,IAAvC,EAAK,QAAQ,EAAiB,IAAY,MAAO,GAGrD,GAAoC,SAAhC,aAA0B,YAAc,CAC5C,IAAI,EAAQ,kBAAkB,KAAK,GACnC,GAAI,GAAS,EAAM,GAAK,GAAI,MAAO,EACnC,CAEA,OAAO,EAAY,EACnB,CACA,CAQA,SAAS,YAAY,EAAe,GACpC,IACA,EAAc,WAAW,aAAa,EAAS,EAAc,YAC7D,CAAC,MAAM,CACP,CAIA,eAAe,eAAe,EAAS,GACvC,OAAO,IAAI,SAAS,IACpB,MAAM,EAAU,SAAS,cAAc,GACvC,GAAG,EAAQ,CACX,GAAG,GAAsB,IAAf,EAAQ,IAAW,OAAO,EAAQ,GAC5C,IAAI,EAAK,OAAO,EAAQ,EACxB,CACA,MAAM,EAAW,IAAI,kBAAiB,KACtC,MAAM,EAAK,SAAS,cAAc,GAC9B,IAED,GAAO,EAAG,MAAK,EAAQ,GAAI,EAAS,cACnC,IAAK,EAAQ,GAAI,EAAS,cAC9B,IAEA,EAAS,QAAQ,SAAS,KAAM,CAChC,WAAW,EACX,SAAS,GACP,GAEF,CAlCA,WAsCA,IAAI,eAAe,KACnB,GAAwC,MAArC,SAAS,eAAe,UAAkB,CAC7C,IAAI,EAAO,SAAS,cAAc,OAClC,EAAO,aAAa,QAAQ,yGAO5B,EAAO,aAAa,KAAK,UACzB,IAAI,EAAI,SAAS,cAAc,+BAC/B,EAAI,UAAU,cAAe,OAAO,SAAS,KAAK,QAAQ,SAAW,EAAI,EAAI,s+BAE7E,EAAO,YAAY,GACnB,YAAY,SAAS,qBAAqB,iBAAiB,GAAG,GACvB,MAApC,SAAS,eAAe,UAC3B,SAAS,eAAe,SAAS,iBAAiB,SAClD,SAAS,GACT,OAAO,SAAS,KAAK,UACrB,GAEA,GASA,SAAS,oBAAoB,GAC7B,IAAI,EAAG,EACP,GAAI,EAAM,IACV,EAAK,MAED,CACJ,MAAM,EAAM,KAAK,MAAM,KAAK,MAAM,GAAO,GACnC,EAAU,GAAO,EAAM,EAAI,EAAI,GAErC,EADc,KAAK,MAAM,EAAM,IAAM,GACzB,IAAM,CAClB,CACA,IAAI,EACJ,GAAI,SAAS,gBAAgB,KAC7B,EAAc,SAAS,gBAAgB,UAChC,GAAI,UAAU,SACrB,EAAc,UAAU,cAExB,IACA,EAAc,IAAI,IAClB,MAAM,KAAK,SAAS,iBAAiB,+BACnC,MAAM,GAAM,GAAG,aAAa,SAAS,SAAS,eAC9C,aAAa,UACZ,cAAc,IAAI,SACrB,CAAE,MACF,EAAc,IACd,CAEA,OAAO,KAAK,aAAa,EAAa,CACtC,SAAU,UACV,eAAgB,UACb,OAAO,EACV,CAKA,eAAe,cACf,IAAI,EAAK,SAAS,cAAc,OAChC,EAAK,aAAa,QAAQ,2EAC1B,EAAK,aAAa,KAAK,QACvB,IACI,EADS,SAAS,uBAAuB,gBAAgB,GAC9C,SAEf,IAAG,MAAM,GAAT,CAEA,IAAI,IAAI,KAAK,MAAM,CACnB,IAAI,EAAG,SAAS,cAAc,OAC1B,EAAG,MAAM,GACb,EAAG,aAAa,QAAQ,oBAAqB,IAAI,GAAQ,EAAG,GAAG,EAAG,yDAA0D,IAAI,EAAO,EAAG,QAC1I,EAAK,YAAY,EACjB,OAKY,eAAe,mBAAkB,GAG7C,GAAsC,MAAnC,SAAS,eAAe,QAC3B,GAAoE,MAAjE,SAAS,uBAAuB,2BAA2B,GAC9D,SAAS,uBAAuB,2BAA2B,GAAG,YAAY,QAE1E,IAAI,SAAS,uBAAuB,oCAAoC,GAAG,YAAY,EAAM,CAAC,MAAM,CAnB/E,CA0BrB,CAOA,eAAe,UAAU,GACzB,IAAI,EAAI,IAAI,IAAI,GACZ,EAAI,GACL,EAAI,SAAS,QAAQ,WAAa,EACrC,EAAI,EAAI,SAAS,OAAO,EAAE,EAAI,SAAS,QAE/B,EAAI,SAAS,QAAQ,UAAY,IACzC,EAAI,EAAI,aAAa,IAAI,MAIzB,MAAM,qDAAqD,GAC1D,MAAK,GACC,EAAS,SACb,MAAK,IACL,aAAc,IACjB,SAAS,oBAAoB,SAAS,EAAW,WACjD,IACG,OAAM,OAET,CAKA,eAAe,cAAc,GAG7B,GAAG,EAAI,QAAQ,UAAY,EAAE,CAE7B,MAAM,SAEA,MAAM,qDAAqD,IAAI,IAAI,GAAK,aAAa,IAAI,MAC9F,MAAK,GACC,EAAS,SACb,MAAK,IACR,IAAI,IAAI,KAAK,EAAW,CACxB,IAAI,EAAK,EAAW,GAAG,QACvB,MAAM,KAAK,EACX,KACG,OAAM,QAKT,IAAI,QAAe,eAAe,iBAAgB,GAGlD,EAAO,aAAa,KACpB,cACA,IAAI,EAAI,EAAO,YACf,IAAI,IAAI,KAAK,MAAM,CACnB,IAAI,EAAG,MAAM,GACV,KAAK,MAAM,IAAQ,KAAK,MAAM,EAAG,KACE,QAAnC,aAAa,QAAQ,aACxB,EAAO,YAAY,EAAG,GACtB,WAAW,EAAG,IAGd,EAOA,CAEA,CASA,SAAS,WAAW,GACpB,IAAI,EAAM,SAAS,cAAc,OACjC,EAAM,aAAa,QAAQ,iBACZ,OAAO,MAAQ,OAAO,OAAU,aAAe,wSAQ9D,EAAM,UAAU,yjCAUhB,SAAS,eAAe,4BAA4B,YAAY,GAGhE,EAAM,iBAAiB,SAAS,IAC9B,IAAI,EAAG,EAAE,OAAO,QAAQ,iBAExB,GAAI,EAAJ,CACA,IAAI,EAAO,EAAG,QAAQ,OAET,SAAV,EACL,EAAG,cAAc,cAAc,SACV,UAAV,IACT,EAAG,cAAc,cAAc,SAC/B,SAAS,uBAAuB,gBAAgB,GAAG,YAAY,EAAG,EAPpD,CAQd,IAKF,YAAW,KAAK,EAAM,QAAQ,GAAG,IACjC,CAOA,GAJA,UAAU,OAAO,SAAS,MAC1B,cAAc,OAAO,SAAS,MAG1B,OAAO,SAAS,SAAS,QAAQ,UAAY,GAAO,OAAO,SAAS,SAAS,QAAQ,WAAa,EACtG,IAAI,IAAI,aAAY,KAKpB,SAAS,uBAAuB,gBAAgB,GAAG,OAAM,EAErD,SAAS,uBAAuB,gBAAgB,GAAG,OACvD,cAAc,IAEd,GAEG,GAKH,SAAS,IAAI,EAAE,GACf,IAAI,EAAE,CACN,QAAQ,OACR,WAAW,SACX,eAAe,SACf,WAAW,MACX,OAAO,MACP,SAAS,OACT,MAAM,OACN,aAAa,OACb,WAAW,EACX,SAAS,OACT,YAAY,MACZ,UAAU,UAEV,IAAI,KAAK,EACT,EAAE,MAAM,GAAG,EAAE,EAEb,CAGA,SAAS,kBACT,IAAI,EAAE,GAEN,IAAI,IAAI,KAAK,aAGb,GAAG,qDAC2C,MAAO,GAAK,aAAa,QAAQ,eAAkB,qBAAqB,WAAW,OAAS,OAAQ,2EAC3E,qMAMvE,OAAO,CAEP,CAIA,SAAS,iBACT,IAAI,EAAE,4QAEN,IAAI,IAAI,KAAK,YAAY,MAAM,CAI/B,GAAG,oDAFC,EAAE,YAAY,MAAM,OAEsC,QAAU,aAAa,QAAQ,GAAM,qBAAqB,WAAW,OAAS,OAAQ,YAC3I,QAAU,aAAa,QAAQ,GAAM,uBAAyB,sEAAuE,0LAI9I,CAGA,IAAI,IAAI,KADR,GAAG,4DACU,YAAY,MAAM,CAE/B,IAAI,EAEJ,GAAG,oDAFC,EAAE,YAAY,MAAM,OAEsC,QAAU,aAAa,QAAQ,GAAM,qBAAqB,WAAW,OAAS,OAAQ,WAC5I,QAAU,aAAa,QAAQ,GAAM,uBAAyB,sEAAuE,0LAI7I,CAQA,OANA,GAAG,qEACuD,OAAO,EAAE,EAAE,8BAA8B,OAAO,EAAE,EAAE,sCAE9G,GAAG,gHAAgH,WAAW,qBAK9H,CAGA,SAAS,eAAe,EAAE,GAGJ,QAAnB,aAAa,IAChB,aAAa,QAAQ,EAAE,SACvB,EAAE,MAAM,WAAW,IAAM,uBAAyB,iBAClD,EAAE,MAAM,MAAM,EACd,EAAE,SAAS,GAAG,MAAM,QAAQ,SAE5B,aAAa,QAAQ,EAAE,QACvB,EAAE,MAAM,WAAW,EACnB,EAAE,MAAM,MAAM,GACd,EAAE,SAAS,GAAG,MAAM,QAAQ,QAM5B,CAIA,eAAe,gBACf,IAAI,EAAO,SAAS,cAAc,OAC9B,EAAQ,SAAS,cAAc,OACnC,EAAO,aAAa,KAAK,kBACzB,EAAQ,aAAa,KAAK,aAC1B,EAAO,aAAa,QAAQ,6IAM5B,EAAO,iBAAiB,SACxB,SAAS,GAEJ,EAAG,QAAU,GAAY,EAAQ,SAAS,EAAG,SAElD,QAAQ,MAER,IAEA,EAAQ,aAAa,QAAQ,kEAEhB,IAAM,UAAY,6HAGkD,+BACzE,IAAM,OAAS,WAEvB,EAAQ,UAAU,ozBAiCyB,IAAM,QAAU,mFAG9C,IAAM,uBAAyB,wNAYpC,IAAM,OAAS,sSAgBf,IAAM,OAAS,uGAKV,mOASA,IAAM,UAAY,kgBAyBlB,0IASL,kBAGR,EAAQ,WAAW,qFACa,otBAOuC,IAAM,OAAS,qZASf,IAAM,OAAS,2UAMf,IAAM,OAAS,gSAKN,OAAO,EAAE,EAAE,0BAA0B,OAAO,EAAE,EAAE,kHAEpD,OAAO,EAAE,EAAE,uBAAuB,OAAO,EAAE,EAAE,iHAE3C,OAAO,EAAE,EAAE,uBAAuB,OAAO,EAAE,EAAE,2GAEnD,OAAO,EAAE,EAAE,wBAAwB,OAAO,EAAE,EAAE,mHAEzC,OAAO,EAAE,EAAE,yBAAyB,OAAO,EAAE,EAAE,gHAEnD,OAAO,EAAE,EAAE,yBAAyB,OAAO,EAAE,EAAE,8HAEjC,OAAO,EAAE,EAAE,4BAA4B,OAAO,EAAE,EAAE,uKAGlE,IAAM,OAAS,6UAMf,IAAM,OAAS,0UAMf,IAAM,OAAS,gUAMf,IAAM,OAAS,oYAMmB,IAAM,OAAS,+MAM3C,OAAO,EAAE,EAAE,0BAA0B,OAAO,EAAE,EAAE,+lBAc3H,aAAa,QAAQ,wIAGsF,WAAW,wXAerG,IAA2B,GAArB,iJAUzB,SAAS,KAAK,YAAY,GAC1B,EAAO,YAAY,GAGnB,SAAS,eAAe,iBAAiB,iBAAiB,QAAQ,WAKlE,IAAI,EAAY,CACd,OAAO,KACL,QAAQ,OAAO,2CAA2C,EAE5D,OAAO,KACL,OAAO,SAAS,KAAK,SAAS,EAEhC,YAAY,KACV,cAAc,EAEhB,OAAO,CAAC,EAAO,KACb,OAAO,EAAO,EAAO,EAEvB,aAAa,KACX,SAAS,uBAAuB,gBAAgB,GAAG,MAAM,QAAQ,QAAQ,SAAS,uBAAuB,gBAAgB,GAAG,UAAU,iBAAiB,EAEzJ,aAAa,KACX,SAAS,uBAAuB,gBAAgB,GAAG,MAAM,QAAQ,OAAO,EAE1E,OAAO,KACL,QAAQ,OAAO,kDAAkD,EAEnE,cAAc,KACZ,SAAS,uBAAuB,iBAAiB,GAAG,MAAM,QAAQ,QAAQ,SAAS,uBAAuB,iBAAiB,GAAG,UAAU,gBAAgB,EAE1J,QAAQ,KACN,QAAQ,OAAO,8CAA8C,EAE/D,WAAY,IACV,aAAa,QAAQ,SAAS,EAAG,uBAAuB,OAAO,EAAG,cAAc,MAAM,QAAQ,MAAM,EAEtG,KAAM,IACJ,EAAG,cAAc,MAAM,QAAQ,MAAM,EAEvC,eAAe,CAAC,EAAG,KACjB,eAAe,EAAM,EAAE,EAEzB,YAAa,IACX,OAAO,EAAG,cAAc,EAE1B,UAAU,CAAC,EAAG,KACZ,aAAa,WAAW,kBACxB,aAAa,QAAQ,cAAc,GACnC,EAAG,cAAc,MAAM,QAAQ,MAAM,GAKzC,EAAQ,iBAAiB,iBAAiB,SAAQ,IAChD,EAAO,iBAAiB,SAAQ,KAEH,UAAxB,EAAO,QAAQ,OAClB,EAAY,EAAO,QAAQ,QAAQ,EAAO,EAAO,QAAQ,OAEzD,EAAY,EAAO,QAAQ,QAAQ,EACnC,GACD,IAKH,EAAQ,cAAc,kBAAkB,iBAAiB,SAAS,IAChE,IAAI,EAAK,EAAE,OAAO,QAAQ,iBACtB,GAEJ,EAAY,EAAG,QAAQ,QAAQ,EAAG,EAAG,QAAQ,MAAM,IAMrD,EAAQ,cAAc,iBAAiB,iBAAiB,SAAS,IAC/D,IAAI,EAAK,EAAE,OAAO,QAAQ,iBACtB,GAEJ,EAAY,EAAG,QAAQ,QAAQ,EAAG,EAAG,QAAQ,MAAM,GAMrD,CAIA,SAAS,UAAU,GAGnB,GAAiB,KAAd,EAAE,SAAwB,UAAN,EAAc,CAErC,IAAI,EAAI,EAAE,OAAO,MACjB,MAAM,EAAQ,6JAER,EAAQ,EAAI,MAAM,GACxB,IAAI,EAAG,EAAQ,EAAM,GAAK,KAC1B,GAAG,EACD,OAAO,uBAAuB,GAIhC,IAAI,EAAE,SAAS,cAAc,KAC7B,EAAE,KAAK,EACP,SAAS,KAAK,YAAY,GAC1B,IAAI,SAAS,eAAe,kBAAkB,QAAS,CAAC,MAAM,CAC9D,EAAE,OAEF,CACA,CAEA,SAAS,eACN,WAAW,QAAQ,WAAa,WAAW,UAC9C,cAEA,QAAQ,UAAU,0BAGlB,MAAM,0CAA2C,CAAC,MAAO,WACzD,MAAM,oDAAqD,CAAC,MAAO,WACnE,MAAM,uDAAwD,CAAC,MAAO,UACtE,CAIA,SAAS,OAAO,EAAE,EAAE,GAGpB,GAAG,IACH,IAAI,EAAE,CAAC,OAAO,UAAU,aAEpB,EAAE,CAAC,OAAO,UAAU,WAKxB,GAAe,iBAAL,EAEV,MAA8B,QAA3B,aAAa,QAAQ,GAChB,GAAL,EACI,cAAc,EAAE,eAEhB,cAAc,EAAE,MAGf,GAAL,EACI,cAAc,EAAE,MAEhB,cAAc,EAAE,MAiCvB,GA7B8B,QAA3B,aAAa,QAAQ,IACxB,aAAa,QAAQ,EAAE,SACvB,EAAE,MAAM,WAAW,EAAE,GACrB,EAAE,SAAS,GAAG,MAAM,KAAK,MACzB,EAAE,SAAS,GAAG,MAAM,WAAW,EAAE,KAGjC,aAAa,QAAQ,EAAE,QACvB,EAAE,MAAM,WAAW,EAAE,GACrB,EAAE,SAAS,GAAG,MAAM,KAAK,OACzB,EAAE,SAAS,GAAG,MAAM,MAAM,MAC1B,EAAE,SAAS,GAAG,MAAM,WAAW,EAAE,IAGG,SAAjC,aAAa,QAAQ,SACxB,SAAS,kBAAkB,YAAY,GAAG,aAAa,UAAU,kGAEjE,SAAS,kBAAkB,YAAY,GAAG,aAAa,UAAU,IAK5B,QAAlC,aAAa,QAAQ,UACxB,QAAQ,WAAU,GAElB,QAAQ,WAAU,GAIiB,QAAhC,aAAa,QAAQ,QACxB,IACA,SAAS,eAAe,QAAQ,SAChC,SAAS,eAAe,QAAQ,QAChC,CAAC,MAAM,CAIP,GAAsC,SAAnC,aAAa,QAAQ,WACxB,IAAI,MAAM,SAAU,CAAC,MAAM,MACrB,IAAI,OAAO,OAA4C,QAAnC,aAAa,QAAQ,WAAqB,CACpE,IAAI,EAAS,SAAS,cAAc,UAAW,EAAO,IAAI,oCAAqC,SAAS,KAAK,YAAY,GAAS,EAAO,OAAO,KAAM,MAAM,MAAM,CAClK,CAIA,CAMA,SAAS,eAAe,GACxB,IAAI,EAAE,SAAS,GAEf,IAAK,IAAI,EAAE,EAAG,EAAI,KAAM,IAAK,GAAK,KAClC,MAAO,GAAG,EAAE,QAAQ,MAFX,CAAC,IAAK,KAAM,KAAM,KAAM,KAAM,MAEV,IAC7B,CAGA,eAAe,eAEf,OAAO,mBAEP,CAMA,SAAS,oBACH,SAAS,iBAAiB,eAC9B,SAAS,IACS,QAAjB,EAAE,MAAM,QACX,EAAE,MAAM,QAAQ,OAEhB,EAAE,MAAM,QAAQ,MAChB,GAIA,CAGA,SAAS,QAAQ,EAAE,GACnB,QAAQ,QAAQ,EAAE,EAAE,aACpB,CAGA,SAAS,UAAU,EAAE,GACrB,IAAI,EAAM,GACF,QAAL,EACH,EAAM,YACQ,QAAL,EACT,EAAM,YAEO,QAAL,IACR,EAAM,aAKN,QAAQ,QAAS,EAAE,aAAa,iBAAiB,EAAI,EAAE,aAAa,iBAAiB,EACrF,CASA,IAAI,UAAW,EACX,QAAO,EACP,MAAM,EAIV,SAAS,eAAe,GACnB,EAAY,GAAiB,EAAY,EAAc,GAC5D,UAAS,GACE,EAAY,GAAiB,EAAc,EAAY,IAClE,UAAS,EAGT,CAGA,SAAS,YAAY,GACrB,MAAO,EAAG,GAAK,EACf,OAAO,KAAK,MAAM,EAAE,MAAQ,EAAE,MAAO,EAAE,MAAQ,EAAE,MACjD,CAyFA,SAAS,SAAS,GA+ElB,IAAI,EAAS,SAAS,eAAe,eA5ElB,MAEnB,IAAI,EAAO,SAAS,cAAc,UAClC,EAAO,aAAa,KAAK,cACzB,EAAO,aAAa,QAAQ,4CAEf,wFAUb,EAAO,IAAI,yBACX,SAAS,KAAK,YAAY,GAG1B,IAAI,EAAU,EAAO,eAAiB,EAAO,gBAAgB,YACzD,EAAM,EAAQ,SAEK,YAAnB,EAAI,YACJ,EAAQ,cAAgB,EAAQ,aAAa,eAAiB,EAAQ,aAAa,eACvF,EAAQ,aAAa,aAAa,UAAW,CAAC,WAAa,GAAW,EAAO,gBAAiB,GAAU,EAAQ,aAAc,GAAU,IAIxI,EAAQ,WAAW,iBAAiB,YAAY,IAChD,GAAG,EAAE,YAAY,IAAI,QAAQ,gBAAkB,EAAE,EAC9C,EAAE,YAAY,IAAI,QAAQ,WAAa,GAAK,EAAE,YAAY,IAAI,QAAQ,YAAc,KACvF,OAAO,SAAS,KAAK,EAAE,YAAY,KAEtB,EAAI,cAAc,SAO/B,MAEA,OAAO,SAAS,KAAK,EAAE,YAAY,GACnC,IAKA,IAAI,EAAS,EAAI,cAAc,UAiB3B,EAAS,EAAI,eAhBA,6MAoBjB,OAHA,EAAO,YAAY,GACnB,EAAI,KAAK,YAAY,GAEd,CAAM,EAMyC,GAClD,EAAO,SAAS,eAAe,uBAOhC,GAEH,EAAO,MAAM,QAAQ,QAGrB,EAAO,aAAa,QAAQ,iBAAiB,GAAQ,KAGrD,EAAO,MAAM,UAAU,cACvB,EAAO,MAAM,IAAK,OAAO,OAAO,OAA8C,IAAtC,EAAO,wBAAwB,OAAa,KACpF,EAAO,MAAM,OAAO,SAKpB,EAAO,MAAM,QAAQ,OAIrB,EAAO,MAAM,UAAU,WACvB,EAAO,MAAM,IAAI,EAAO,aAAa,SACrC,EAAO,MAAM,OAAO,SAEpB,EAAO,gBAAgB,SAIvB,CAKA,SAAS,iBACT,OAAO,IAAI,SAAQ,IACnB,eAAe,QAAU,CAAO,GAEhC,CAGA,SAAS,uBACT,OAAO,IAAI,SAAQ,IACnB,qBAAqB,QAAU,CAAO,GAEtC,CAOA,SAAS,qBAAqB,GAkC9B,IAAI,EAAS,EAAI,OAEjB,GAAgB,MAAZ,EAAuB,OAAO,SAAS,eAAe,kBAAkB,UAAU,iFAEtF,IAAI,EAAM,EAAS,MAAM,MAIrB,EAtCU,CAAC,IACf,IAAI,IAAI,KAAK,EACb,IACA,IAAI,EAAK,KAAK,MAAM,EAAE,GAAG,IACzB,GAAG,EAAK,KAAK,KAAK,GAAG,QAAQ,QAAU,EAAG,OAAO,CACjD,CAAC,MAAM,GAAG,QAAQ,IAAI,qBAAqB,EAAG,CAAC,EAiCtC,CAHQ,KAAK,MAAM,EAAM,MAGA,GAI9B,EAAK,GAET,EAAK,KAAK,IAAO,KAAK,IACtB,EAAK,KAAK,IAAO,KAAK,IACtB,EAAK,KAAK,IAAO,KAAK,KAAK,IAG3B,aAAa,QAAQ,iBAAiB,EAAK,YAG3C,EAAK,IAAO,KAAK,GAEjB,IAAI,EAAK,IAAO,KAAK,IAAM,GAC3B,EAAK,EAAK,QAAQ,wCAAwC,IAC1D,IAAI,EAAW,IAAO,MAAM,KAAK,IAAM,KACnC,EAAO,GAEX,IAAI,IAAI,KAAK,IAAO,MAAM,GAAG,CAC7B,IAAI,EAAI,IAAO,MAAM,KAAK,GAC1B,EAAO,KAAK,CACZ,IAAI,EAAI,GAAG,GAAG,GACd,IAAI,EAAI,GAAG,GACX,MAAM,EAAI,GAAG,KAGb,GAAM,qBAAqB,EAAI,GAAG,YAAY,EAAI,GAAG,GAAG,eACxD,CASA,IAAI,EAAY,IAAI,SAAS,UAC7B,EAAU,UAAU,UACpB,IAAI,EAtEmB,CAAC,IACxB,IAAI,EAAK,EACL,EAAM,EAAK,MAAM,oBAAsB,GACvC,EAAM,IAAI,GAAO,KAAI,GAAO,EAAI,QAAQ,YAAa,MASzD,OARA,EAAM,SAAQ,CAAC,EAAE,KACjB,IAAI,EAAK,IAAI,IAAI,EAAK,IAAI,aAAa,IAAI,KAChC,MAAR,EACH,EAAK,EAAK,QAAQ,EAAE,uGAAuG,OAClH,EAAK,GAAG,QAAQ,eAAiB,GAAK,EAAK,GAAG,QAAQ,YAAc,IAC7E,EAAK,EAAK,QAAQ,EAAE,8HAA8H,EAAK,SACvJ,IAEO,CAAI,EA0DA,CAAiB,EAAU,SAAS,IAG3C,EAA0B,MAAZ,EAAoB,2ZACmF,IAAM,OAAS,6OAKtI,EAAU,SAAS,qBAGP,GAEd,SAAS,eAAe,kBAAkB,UAAU,2CAA2C,EAAK,GAAG,QAAQ,KAAK,uCAElH,wCAKA,aAKF,CAOA,eAAe,aACf,GAAgD,MAA7C,SAAS,eAAe,mBACvB,EAAU,SAAS,cAAc,QAC3B,aAAa,QAAQ,0LAA0L,2CACzN,EAAU,aAAa,KAAK,kBAG5B,YAAY,SAAS,eAAe,iBAAiB,QAGrD,IAAI,EAAU,SAAS,eAAe,kBAItC,SAAS,eAAe,kBAAkB,UAAU,qCAGpD,IAAI,EAAQ,QAAQ,cAAc,OAAO,SAAS,MAElD,GAAG,EAAQ,QAAQ,mBAAqB,EAYxC,YAXA,EAAU,UAAU,qLAKQ,WAAW,IAAM,OAAS,uJAYtD,EAAQ,EAAQ,MAAM,KAEtB,IAAI,EAAQ,GAEZ,EAAQ,SAAS,KACd,EAAE,QAAQ,oBAAsB,GAAK,EAAE,QAAQ,sBAAwB,KAC1E,GAAS,EAAE,IAAG,IAKd,IACI,EAAQ,KAAK,UAAU,CAC3B,OAAU,MACV,kBAAmB,KACnB,eAAe,kDACf,4BAA6B,aAAa,aAAa,QAAQ,gBAC/D,gBAAiB,IACjB,OAAU,EACV,QAAW,6BACX,kBAAmB,WAInB,GAAe,IAAZ,SAAe,CAClB,QAAQ,UAAU,GAClB,eAAe,iBAEf,IAAI,EAAK,SAAS,cAAc,UAChC,EAAG,IAAI,4DACP,SAAS,KAAK,YAAY,EAE1B,CAKA,IAAI,EAAO,aAAa,QAAQ,UAAU,WAAW,QAAQ,OAAO,SAAS,MAAM,WAAW,YAAY,IAAI,IAAI,OAAO,SAAS,MAAM,aAAa,IAAI,MAAM,WAAW,UAAU,SAAS,uBAAuB,8BAA8B,GAAG,YAAY,WAAW,IAAI,IAAI,WAAW,KAAK,IAAI,WAAW,IAAI,IAAI,WAAW,IAAI,IAAI,WAAW,IAAI,IAAI,WAAW,IAAI,IAAI,WAAW,IAAI,IAAI,WAAW,IAAI,IAAI,WAAW,IAAI,KAMra,EAAO,KAE6B,QAArC,aAAa,QAAQ,cAAoE,MAA1C,aAAa,QAAQ,oBACvE,EAAO,aAAa,QAAQ,kBAAkB,MAAM,MAGpD,MAAM,EAAW,IAAI,gBACrB,EAAS,OAAO,QAAS,KAAK,UAAU,CACxC,KACA,KAAK,UAAU,CAAC,CAAC,GAAQ,KAAK,OAG9B,EAAS,OAAO,KAAM,UAItB,QAAQ,aAhDK,iGAgDiB,EAAQ,EAAS,YAG/C,2BAFmB,uBAInB,CAtbA,SAAS,KAAK,iBAAiB,cAAc,IAC7C,EAAc,EAAE,eAAe,GAAG,QACT,IAArB,EAAE,QAAQ,SACd,EAAkB,YAAY,EAAE,SAChC,GACG,CAAE,SAAS,IAMd,SAAS,KAAK,iBAAiB,aAAc,IAO7C,GAJG,UACH,EAAE,kBAGuB,IAArB,EAAE,QAAQ,QAAoC,OAApB,EAA0B,CACxD,MACM,EADkB,YAAY,EAAE,SACV,EAK5B,GAHA,UAAS,GAGL,EAAE,OAAO,UAAU,WAAW,SAAS,iBAAmB,EAAE,OAAO,UAAU,WAAW,SAAS,gCAAkC,SAAS,kBAEhJ,GAAI,EAAI,KAAM,CACd,IAAI,EAAG,SAAS,uBAAuB,gBAAgB,GACvD,QAAO,EACP,MAAM,KAAK,IAAK,OAAO,OAAS,EAAG,aAAiB,OAAO,MAAQ,EAAG,aACtE,cACA,MAAW,EAAI,MACf,QAAO,EACP,MAAM,EACN,eAMA,IACE,CAAC,SAAQ,IAQX,SAAS,KAAK,iBAAiB,YAAY,IAG3C,EAAY,EAAE,eAAe,GAAG,SAE5B,EAAE,OAAO,UAAU,WAAW,SAAS,kBAAmB,EAAE,OAAO,UAAU,WAAW,SAAS,+BAAmC,SAAS,mBAAqD,QAAhC,aAAa,QAAQ,SAC3L,iBAGI,EAAE,QAAQ,OAAS,IACvB,EAAkB,KAElB,YAAW,KACX,UAAS,CAAK,GACZ,KAEF,GAEG,CAAE,SAAS,IAMd,WAAW,iBAAiB,YAAY,KACrC,EAAE,YAAY,IAAI,QAAQ,UAAY,GAAK,EAAE,YAAY,IAAI,QAAQ,WAAa,KACnF,SAAS,MACX,UAAU,EAAE,YAAY,KACxB,cAAc,EAAE,YAAY,KAC5B,IA0WA,IAAI,OAAO,wkBACP,OAAO,+qCAIX,eAAe,MAEf,GAAG,OAAO,SAAS,KAAK,QAAQ,sBAAwB,EAAE,CAG1D,IACA,IAAI,EAAI,SAAS,qBAAqB,6BAA6B,GAAG,SAAS,GAI/E,GAHA,EAAI,SAAS,GAAG,SAAS,GAAG,MAAM,MAAM,OACxC,EAAI,SAAS,GAAG,SAAS,GAAG,MAAM,aAAa,OAE3C,SAAS,eAAe,SAS5B,SAAS,eAAe,SAAS,UAAU,aATN,CACnC,IAAI,EAAM,SAAS,cAAc,QACjC,EAAM,aAAa,KAAK,SACxB,EAAM,UAAU,SAChB,EAAM,MAAM,WAAW,MAEzB,YAAY,EAAI,uBAAuB,mCAAmC,GAAG,EAE7E,CAIA,CAAC,MAAM,GAAG,CAIV,IAEA,GAAmC,QAAhC,aAAa,QAAQ,QAAkB,CAG1C,IAGI,EAAQ,CACZ,OAAO,MACP,MAAiB,IALV,SAAS,eAAe,uBACpB,wBAIA,MAAW,KACtB,QAAQ,OACR,iBAAiB,SACjB,cAAc,SACd,kBAAkB,SAClB,SAAS,WACT,IAAI,MACJ,MAAM,MACN,QAAQ,KAMJ,EAAG,SAAS,cAAc,OAC1B,EAAI,SAAS,cAAc,OAC/B,EAAI,aAAa,KAAK,QACtB,EAAG,aAAa,KAAK,QAErB,OAAO,OAAO,EAAG,MAAM,GACvB,OAAO,OAAO,EAAI,MAAM,GACxB,EAAI,MAAM,KAAK,IAEf,EAAG,UAAU,GAAG,6PAAmQ,IAAN,2GAC7Q,EAAI,UAAU,GAAG,6PAAmQ,IAAN,2GAG1Q,SAAS,eAAe,UAC5B,SAAS,eAAe,uBAAuB,YAAY,GAE3D,EAAI,iBAAiB,aAAa,IAClC,EAAE,iBACF,EAAI,MAAM,QAAQ,IAER,EAAc,EAAE,QAAQ,GAAG,MAE3B,EACV,KAAM,KAEN,KAAM,KAGH,IAAM,IAAG,IAAI,GACb,IAAM,IAAG,IAAK,GAEjB,EAAY,EAAE,QAAQ,GAAG,MAEzB,QAAQ,cAAc,KACtB,SAAS,eAAe,SAAS,MAAM,OAAW,IAAJ,IAAQ,GAAG,GAEvD,CAAE,SAAS,IAIb,EAAI,iBAAiB,YAAY,IACjC,EAAI,MAAM,QAAQ,GAAG,GACnB,CAAE,SAAS,KAQT,SAAS,eAAe,UAC5B,SAAS,eAAe,uBAAuB,YAAY,GAE3D,EAAG,iBAAiB,aAAa,IACjC,EAAE,iBACF,EAAG,MAAM,QAAQ,IAEP,EAAc,EAAE,QAAQ,GAAG,MAE3B,EACV,KAAM,KAEN,KAAM,KAGH,IAAM,IAAG,IAAI,GACb,IAAM,IAAG,IAAK,GAEjB,EAAY,EAAE,QAAQ,GAAG,MAEzB,QAAQ,UAAU,KAClB,SAAS,eAAe,SAAS,MAAM,OAAa,IAAN,IAAW,GAAG,GAE1D,CAAE,SAAS,IAKb,EAAG,iBAAiB,YAAY,IAChC,EAAG,MAAM,QAAQ,GAAG,GAClB,CAAE,SAAS,IAIb,CAIA,CAAC,MAAM,GACL,QAAQ,IAAI,EACd,CAaA,GAA+C,MAA5C,SAAS,eAAe,iBAAyB,CAIpD,IAAI,EAAc,SAAS,cAAc,OACzC,EAAc,aAAa,KAAK,iBAChC,EAAc,aAAa,QAAQ,2DAInC,YAAY,SAAS,uBAAuB,iCAAiC,GAAG,GAEhF,IAAI,EAAa,SAAS,cAAc,OACxC,EAAa,aAAa,QAAQ,2IAIlC,EAAc,YAAY,GAG1B,IAAI,EAAY,SAAS,cAAc,OACvC,IAAI,GACJ,EAAY,MAAM,MAAM,QACxB,EAAY,MAAM,OAAO,oBACzB,EAAY,MAAM,SAAS,WAC3B,EAAY,MAAM,WAAW,mBAAmB,IAAM,kBAAoB,gGAC1E,EAAY,MAAM,OAAO,wBACzB,EAAY,UAAU,y/BAqBT,iZA4BW,gQAiBhB,IAAM,OAAS,uGAKC,oBAUxB,EAAa,YAAY,GAGzB,EAAY,iBAAiB,SAC7B,iBAGG,WAAW,QAAQ,WAAa,WAAW,UAC9C,cAKA,YAGA,IAaA,IAAI,EAAa,SAAS,cAAc,OACxC,IAAI,GACA,UAGJ,EAAa,UAAU,yIAAyI,qRAFhK,EAAa,UAAU,yIAAyI,gcAIhK,EAAa,YAAY,GACzB,EAAa,iBAAiB,SAAQ,KAAK,WAAW,EAAa,IAKnE,IAAI,EAAiB,SAAS,cAAc,OAC5C,IAAI,GACJ,EAAiB,MAAM,MAAM,QAC7B,EAAiB,UAAU,GAAG,QAAQ,QAAQ,aAAa,cAAc,QAAQ,cAAc,6DAC/F,EAAa,YAAY,GACzB,EAAiB,iBAAiB,SAClC,WACA,OAAO,SAAS,KAAK,UACrB,IAGA,IAAI,EAAgB,SAAS,cAAc,OAC3C,IAAI,GACJ,EAAgB,MAAM,MAAM,QAC5B,EAAgB,UAAU,kGAAkG,4TAC5H,EAAa,YAAY,GACzB,EAAgB,iBAAiB,SACjC,WACA,UAAS,EACT,GAMA,CAMA,MAAM,GAAG,OAAO,SAAS,KAAK,QAAQ,uBAAyB,EAAE,CAGjE,IAAI,EAAI,SAAS,eAAe,QAC5B,EAAI,SAAS,eAAe,QAKhC,GAJI,GAAG,EAAE,SACL,GAAG,EAAE,SAGuC,MAA7C,SAAS,eAAe,kBAA0B,CACrD,IAAI,EAAG,SAAS,cAAc,OAC9B,EAAG,aAAa,KAAK,kBACrB,EAAG,aAAa,QAAQ,2DAIxB,OAAO,SAAS,cAAc,OAC9B,OAAO,aAAa,QAAQ,8IAK5B,OAAO,UAAU,QAAQ,WAAW,GAAG,IAAI,QAAQ,QAAQ,aAAa,cAAc,QAAQ,cAAc,eAG5G,OAAO,iBAAiB,SACxB,WACA,OAAO,SAAS,KAAK,UACrB,IAIA,QAAQ,SAAS,cAAc,OAC/B,QAAQ,aAAa,QAAQ,kKAQzB,UAGJ,QAAQ,UAAU,qXAFlB,QAAQ,UAAU,giBAMlB,QAAQ,iBAAiB,SACzB,WACA,WAAW,QACX,IAMA,IAEK,SAAS,uBAAuB,+BAA+B,GAAG,SAAS,KAEhF,SAAS,uBAAuB,+BAA+B,GAAG,aAAa,EAAG,SAAS,uBAAuB,+BAA+B,GAAG,SAAS,IAE7J,EAAG,YAAY,QACf,EAAG,YAAY,SAEf,CAAC,MAAM,CAEP,CAEA,IAAI,SAAS,iBAAiB,6BAA6B,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,QAAS,CAAC,MAAM,CAapJ,CAEA,CAUA,eAAe,aACf,IAAI,EAAO,SAAS,cAAc,OAC9B,EAAQ,SAAS,cAAc,OAiCnC,GAhCA,EAAQ,aAAa,KAAK,iBAC1B,EAAO,aAAa,KAAK,kBACzB,EAAO,aAAa,QAAQ,2IAO5B,EAAQ,aAAa,QAAQ,mDACmB,IAAM,UAAY,gIAIlE,EAAQ,UAAU,+JAA+J,yBACjL,EAAQ,WAAW,gCAGnB,EAAQ,WAAW,gJAEnB,SAAS,KAAK,YAAY,GAC1B,EAAO,YAAY,GAEnB,EAAO,iBAAiB,SACxB,SAAS,GACL,MAAM,eAAe,SAAS,IAClC,QAAQ,MAER,IAIqC,MAAlC,aAAa,QAAQ,UACxB,EAAQ,WAAW,sBACd,CAEL,IAAI,EAAE,KAAK,MAAM,aAAa,QAAQ,WAEtC,GAA6B,IAA1B,OAAO,KAAK,GAAG,OAClB,OAAO,EAAQ,WAAW,kBAG1B,IAAI,IAAI,EAAE,OAAO,KAAK,GAAG,OAAS,EAAG,GAAM,EAAI,IAAI,CACnD,IAAI,EAAE,OAAO,KAAK,GAAG,GACrB,EAAQ,WAAW,0EACkC,WAAW,EAAE,GAAG,mPAC+J,OAAO,EAAE,GAAG,qGAEzM,4ZAMjC,IAAI,SAAQ,GAAK,WAAW,EAAG,IACrC,CAGA,EAAQ,iBAAiB,SAAS,IAChC,IAAI,EAAG,EAAE,OAAO,QAAQ,iBAEpB,IACoB,0BAArB,EAAG,QAAQ,OACZ,uBAAuB,EAAG,QAAQ,IACN,YAArB,EAAG,QAAQ,QAClB,SAAS,EAAG,EAAG,QAAQ,IACzB,GAIF,CAMA,CAGA,SAAS,uBAAuB,GAC5B,OAAO,SAAS,KAAK,GACrB,MAAM,EAAO,SAAS,cAAc,KACpC,EAAK,KAAO,YAAY,IACxB,EAAK,MAAM,QAAU,OACrB,SAAS,KAAK,YAAY,GAC1B,EAAK,QACL,EAAK,QACT,CAIA,SAAS,SAAS,EAAE,GACpB,GAAG,aAAa,QAAQ,WAAW,QAAQ,IAAM,EAAE,CACnD,EAAE,cAAc,cAAc,SAC9B,IAAI,EAAE,KAAK,MAAM,aAAa,QAAQ,WAAa,aAC5C,EAAE,GACT,aAAa,QAAQ,SAAS,KAAK,UAAU,GAC7C,CAEA,CAEA,SAAS,WAAW,GAGpB,IAAI,EAAI,IAAK,gBAAgB,OAAO,SAAS,QAAS,IAAI,MAAQ,OAAO,SAAS,SAAS,QAAQ,WAAW,IAE1G,EAAM,SAAS,uBAAuB,gBAAgB,GACtD,EAAS,SAAS,cAAc,UACpC,EAAO,MAAM,MAAQ,SACrB,EAAO,MAAM,OAAS,QACtB,EAAO,MAAM,WAAW,QACxB,IAAI,EAAU,EAAO,WAAW,MAE/B,OAAO,SAAS,SAAS,QAAQ,WAAa,EAAK,EAAQ,UAAU,EAAM,IAAK,EAAG,GAAG,KAAQ,EAAQ,UAAU,EAAM,EAAG,EAAG,IAAI,KAEjI,IAAI,EAAU,EAAO,UAAU,cAG/B,GAAG,OAAO,SAAS,SAAS,QAAQ,WAAa,EAEjD,IAAI,EAAS,CACb,MAAM,EACN,MAAM,SAAS,uBAAuB,+CAA+C,GAAG,YAAY,WAAW,IAAI,IAAI,WAAW,KAAK,IAAI,WAAW,IAAI,IAAI,WAAW,IAAI,IAAI,WAAW,IAAI,IAAI,WAAW,IAAI,IAAI,WAAW,IAAI,IAAI,WAAW,IAAI,IAAI,WAAW,IAAI,UAKxQ,EAAS,CACb,MAAM,EACN,MAAM,SAAS,uBAAuB,8BAA8B,GAAG,YAAY,WAAW,IAAI,IAAI,WAAW,KAAK,IAAI,WAAW,IAAI,IAAI,WAAW,IAAI,IAAI,WAAW,IAAI,IAAI,WAAW,IAAI,IAAI,WAAW,IAAI,IAAI,WAAW,IAAI,IAAI,WAAW,IAAI,KAa3P,IAcI,EAdA,EAAE,KACF,EAAE,6CACsD,EAA3D,OAAO,SAAS,KAAK,QAAQ,uBAAyB,EAAO,GAAK,4CACP,GAA3D,OAAO,SAAS,KAAK,QAAQ,sBAAgC,MAI3D,aAAa,QAAQ,WAAW,QAAQ,IAAQ,WAC/C,EAAE,KAAK,MAAM,aAAa,QAAQ,WAAa,OAC1C,GACT,aAAa,QAAQ,SAAS,KAAK,UAAU,IAC7C,EAAE,UAAU,kDAAkD,cAAc,YAAa,OAAO,SAAS,KAAK,QAAQ,uBAAyB,EAAK,OAAS,+EACvG,OAAO,SAAS,KAAK,QAAQ,uBAAyB,EAAK,OAAS,uZAAwZ,OAE9gB,EAAE,KAAK,MAAM,aAAa,QAAQ,WAAa,OACjD,GAAK,EACP,aAAa,QAAQ,SAAS,KAAK,UAAU,IAC7C,EAAE,UAAU,kDAAkD,cAAc,8EAA+E,OAAO,SAAS,KAAK,QAAQ,uBAAyB,EAAK,OAAS,4OAA6O,IAG5c,CAKA,SAAS,UAET,OAAI,aAAa,QAAQ,WAAW,QAAQ,IAAK,gBAAgB,OAAO,SAAS,QAAS,IAAI,OAAU,GAAS,aAAa,QAAQ,WAAW,QAAQ,OAAO,SAAS,SAAS,QAAQ,WAAW,MAAS,CAM9M,CAQA,SAAS,YAET,OAAM,EACN,cAAe,EACf,SAAS,iBAET,SAAS,uBAAuB,gBAAgB,GAAG,QACnD,YAAW,KACX,SAAS,uBAAuB,gBAAgB,GAAG,MAAM,GACvD,EAGF,CAKA,SAAS,SAAS,GAAM,GAExB,IAAI,EAAE,SAAS,uBAAuB,gBAAgB,GAGnD,EAEA,EAAE,wBAAwB,OAAS,EAAE,wBAAwB,MAChE,QAAQ,OAAO,YAGf,QAAQ,OAAO,cAOf,EAAE,oBACF,EAAE,OACF,cAAe,EACf,OAAM,EAEN,CAzOA,YAAY,IAAI,GAiQhB,iBAAiB,UAAU,MAAQ,WAEnC,GAAI,cAAgB,QACpB,OAAO,EAAc,MAAM,KAAM,WAG7B,KAAK,QACT,KAAK,OAAO,OAAM,QAElB,EAUA,MAAM,EAAyB,SAAS,eAClC,EAA4B,QAAQ,UAAU,kBAGpD,SAAS,eAAiB,YAAa,GACtC,IAAI,MAAQ,OAAO,EAAuB,MAAM,KAAM,EACvD,EAIA,QAAQ,UAAU,kBAAoB,YAAa,GACnD,IAAI,EAAQ,SAAS,uBAAuB,gBAAgB,GAS5D,OAPG,EAAM,wBAAwB,OAAS,EAAM,wBAAwB,MACxE,QAAQ,YAAW,GAGnB,QAAQ,YAAW,GAGZ,EAA0B,MAAM,KAAM,EAC7C,EAQA,OAAO,aAAa,KACpB,IAAI,SAAS,eAAe,qBAAqB,QAAS,CAAC,MAAM,CACjE,IAAI,SAAS,eAAe,kBAAkB,QAAS,CAAC,MAAM,CAC9D,IAAI,SAAS,eAAe,kBAAkB,QAAS,CAAC,MAAM,CAGnC,aAAxB,OAAO,SAAS,KACnB,eACiC,aAAxB,OAAO,SAAS,KACzB,gBAEgC,WAAxB,OAAO,SAAS,MACxB,YACA,EAQA,MACA,MAAM,EAAa,OAAO,MAC1B,OAAO,MAAQ,eAAe,EAAO,GACrC,IACA,MAAM,EAAwB,iBAAV,EAAsB,EAAQ,EAAM,IAKxD,GAAG,EAAI,SAAS,gCAAkC,EAAI,SAAS,4CAA8C,EAAI,SAAS,8BAAgC,EAAI,SAAS,6BAGvK,MAAO,GACD,GAAG,EAAI,SAAS,yBAAyB,CAG/C,MAAM,QAAiB,EAAW,MAAM,KAAM,WAI9C,IAEA,MAAM,EAAQ,EAAS,QACvB,IAAI,QAAa,EAAM,OAI+F,kBAAnH,GAAM,iBAAiB,iCAAiC,+BAA+B,sBAAsB,IAA6I,qBAAnH,GAAM,iBAAiB,iCAAiC,+BAA+B,sBAAsB,KACvP,EAAK,CAAC,UAKC,GAAM,eACN,GAAM,iBACN,GAAM,oBACN,GAAM,8BAIN,IAAO,IAAI,gBAAgB,eAC3B,IAAO,IAAI,gBAAgB,iBAC3B,IAAO,IAAI,gBAAgB,oBAC3B,IAAO,IAAI,gBAAgB,uBAGlC,MAAM,EAAU,KAAK,UAAU,GAGzB,EAAa,IAAI,QAAQ,EAAS,SAKxC,OAJA,EAAW,IAAI,iBAAkB,OAAO,EAAQ,SAChD,EAAW,IAAI,eAAgB,oBAGxB,IAAI,SAAS,EAAS,CAC7B,OAAQ,EAAS,OACjB,WAAY,EAAS,WACrB,QAAS,GAET,CAAE,MAAO,GAET,OAAO,CACP,CAIA,CAEA,OAAO,EAAW,MAAM,KAAM,UAE9B,CAAE,MAAO,GAAiC,CAE1C,OAAO,EAAW,MAAM,KAAM,UAG9B,CAGC,EA9ED,GAmFA,MAAM,EAAM,OAAO,eACb,EAAW,EAAI,UAAU,KACzB,EAAW,EAAI,UAAU,KAoC/B,SAAS,WAGT,IACA,SAAS,uBAAuB,gBAAgB,GAAG,gBAAgB,0BACnE,CAAC,MAAM,CAIP,IAAI,EAAI,SAAS,qBAAqB,oBACtC,IAAI,IAAI,KAAK,EACb,IAAI,EAAI,GAAG,QAAS,CAAC,MAAM,CAE3B,IACA,SAAS,uBAAuB,mBAAmB,GAAG,qBAAqB,SAAS,GAAG,YAAY,SAAS,uBAAuB,mBAAmB,GAAG,qBAAqB,SAAS,GAAG,SAC1L,SAAS,uBAAuB,6BAA6B,GAAG,OAEhE,CAAC,MAAM,CAMP,IACA,SAAS,qBAAqB,sCAAsC,GAAG,QACvE,CAAC,MAAM,CACP,IACA,SAAS,qBAAqB,6BAA6B,GAAG,QAC9D,CAAC,MAAM,CAGP,IACA,SAAS,iBAAiB,KAAK,SAAQ,IACnC,EAAE,KAAK,QAAQ,cAAgB,IACnC,EAAE,MAAM,QAAU,OAClB,GAEA,CAAC,MAAM,CAEP,IAAI,SAAS,qBAAqB,qCAAqC,GAAG,MAAM,QAAQ,MAAO,CAAC,MAAM,CAGtG,GAAqC,QAAlC,aAAa,QAAQ,UAAoB,CAG5C,IAAK,KAAK,SAAS,uBAAuB,wBAC1C,IAAI,SAAS,uBAAuB,wBAAwB,GAAG,QAC/D,CAAC,MAAM,CAGP,IAAK,KAAK,SAAS,qBAAqB,2BAA2B,CACnE,IAAI,SAAS,qBAAqB,2BAA2B,GAAG,QAChE,CAAC,MAAM,CAEP,IAAK,KAAK,SAAS,qBAAqB,gCACxC,IAAI,SAAS,qBAAqB,gCAAgC,GAAG,QACrE,CAAC,MAAM,CAIP,CACA,CAKA,CAOA,SAAS,eAGT,IAAI,EAAM,SAAS,eAAe,uBAC9B,EAAG,SAAS,eAAe,UACxB,SAAS,uBAAuB,gBAAgB,GAIvD,GAAG,IAAU,SAAS,kBAGtB,IAEA,EAAG,MAAM,UADN,OACgB,SAAS,SAET,UAEnB,CAAC,MAAM,MAIP,IACA,EAAG,MAAM,UAAU,UACnB,CAAC,MAAM,CAIP,CAGA,eAAe,aACb,IAAI,EAAG,SAAS,cAAc,uDAC/B,IAAI,EAAI,OAGT,MAAM,EAAS,SAAS,eAAe,UAEvC,GAAe,IAAZ,EAAO,MAEV,EAAO,IAAM,GACb,EAAO,aAAe,KAEtB,EAAO,iBAAiB,SAAS,KAC/B,MAAM,EAAQ,SAAS,cAAc,iBACjC,IAAO,EAAM,aAAe,WAAW,EAAO,OAAM,IAGvD,EAAG,SAAS,QAAU,GAAG,EAAG,SAAS,GAAG,UAEvC,SAAS,eAAe,aAAY,CAExC,IAAI,EAAI,SAAS,cAAc,yDAE/B,EAAI,GAAG,WACP,EAAI,UAAU,4GAGd,EAAI,mBAAmB,YAAY,o/BAEnC,EAAI,iBAAiB,SAAS,KAE1B,EAAO,MAAM,GACb,EAAO,cAAc,IAAI,MAAM,QAAS,CAAE,SAAS,IAAQ,IAI/D,EAAG,YAAY,EAGf,CAEA,CAnLA,EAAI,UAAU,KAAO,SAAS,EAAQ,KAAQ,GAG9C,OAFA,KAAK,mBAAqB,EAC1B,KAAK,gBAAkB,EAChB,EAAS,MAAM,KAAM,CAAC,EAAQ,KAAQ,GAC7C,EAEA,EAAI,UAAU,KAAO,SAAS,GAE9B,KACA,KAAK,gBAAgB,SAAS,gCAC9B,KAAK,gBAAgB,SAAS,4CAC9B,KAAK,gBAAgB,SAAS,8BAC9B,KAAK,gBAAgB,SAAS,8BAM9B,OAAO,EAAS,MAAM,KAAM,UAC5B,EA+KA,MAAM,EAAa,SAAS,KACtB,EAAS,CAAE,WAAW,EAAM,SAAS,GAyC3C,SAAS,cACT,IAAI,EAAE,SAAS,cAAc,OAE7B,EAAE,aAAa,QAAQ,+HAEvB,EAAE,UAAU,0PAGK,81BAmBjB,EAAE,iBAAiB,SAAS,IAC1B,IAAI,EAAG,EAAE,OAAO,QAAQ,iBACxB,GAAI,EAAJ,CACA,IAAI,EAAO,EAAG,QAAQ,OAET,OAAV,EACD,QAAQ,OAAO,qDACE,YAAV,EACP,QAAQ,QAAQ,YAAY,6EAA6E,mBACzF,UAAT,GACP,EAAG,cAAc,cAAc,cAAc,QARjC,CASd,IAIF,SAAS,KAAK,YAAY,EAC1B,CAlFiB,IAAI,kBAAiB,KAKtC,aAGA,WAIA,eAGA,iBAGA,IACA,IAAI,EAAQ,SAAS,uBAAuB,gBAAgB,GACzD,EAAM,wBAAwB,OAAS,EAAM,wBAAwB,MACxE,QAAQ,YAAW,GAGnB,QAAQ,YAAW,EAClB,CACD,MAAM,KAMG,QAAQ,EAAY,GAwD7B,OAAO,OAAS,WACb,WAAW,QAAQ,WAAa,WAAW,YAAsC,0BAAxB,OAAO,SAAS,MAA4D,yBAAxB,OAAO,SAAS,OAChI,aAGA,EAKA,SAAS,iBAAiB,SAAS,IAEnC,IAAI,EAAS,EAAM,OAAO,QAAQ,KAClC,GAAI,GAGD,EAAO,KAAK,SAAS,4BAA4B,CAEpD,IACA,SAAS,uBAAuB,gBAAgB,GAAG,OACnD,CAAC,MAAM,CAEP,MAAM,EAAI,IAAI,IAAI,EAAO,MAAM,aAAa,IAAI,KAEhD,YAAW,KAAK,QAAQ,OAAO,EAAG,GAAG,IAErC,EAAM,iBACN,EAAM,iBAEN,CAGA,IAEA,EAKA","file":"/npm/ytpro@3.9.80/script.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/ytpro@3.9.80/script.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","/*****YTPRO*******\nAuthor: Prateek Chaubey\nVersion: 3.9.8\nURI: https://github.com/prateek-chaubey/YTPRO\nLast Updated On: 1 May , 2026 , 19:25 IST\n*/\n\n\n\n\nif(window.eruda == null && localStorage.getItem(\"devMode\") == \"true\"){\n//ERUDA\nvar script = document.createElement('script'); script.src=\"//youtube.com/ytpro_cdn/npm/eruda\"; document.body.appendChild(script); script.onload=()=>{eruda.init();}\n}\n/**/\n\nif(!YTProVer){\n\n/*Few Stupid Inits*/\nvar YTProVer=\"3.98\";\nvar ytoldV=\"\";\nvar isF=false;   //what is this for?\nvar isAp=false; // oh it's for bg play \nconst originalPause = HTMLMediaElement.prototype.pause; // well long story short , save the original pause function\nwindow.PIPause = false; // for pausing video when in PIP\nwindow.isPIP=false;\nwindow.pauseAllowed = true; // allow pause by default\nvar sTime=[];\nvar webUrls=[\"m.youtube.com\",\"youtube.com\",\"yout.be\",\"accounts.google.com\"];\nvar GeminiAT=\"\";\nvar GeminiModels = {\n    \"3.0 Pro\": '[1,null,null,null,\"9d8ca3786ebdfbea\",null,null,0,[4],null,null,1]',\n    \"3.0 Flash\": '[1,null,null,null,\"fbb127bbb056c959\",null,null,0,[4],null,null,1]',\n    \"3.0 Flash Thinking\": '[1,null,null,null,\"5bf011840784117a\",null,null,0,[4],null,null,1]',\n    \"3.0 Pro Plus\": '[1,null,null,null,\"e6fa609c3fa255c0\",null,null,0,[4],null,null,4]',\n    \"3.0 Flash Plus\": '[1,null,null,null,\"56fdd199312815e2\",null,null,0,[4],null,null,4]',\n    \"3.0 Flash Thinking Plus\": '[1,null,null,null,\"e051ce1aa80aa576\",null,null,0,[4],null,null,4]',\n    \"3.0 Pro Advanced\": '[1,null,null,null,\"e6fa609c3fa255c0\",null,null,0,[4],null,null,2]',\n    \"3.0 Flash Advanced\": '[1,null,null,null,\"56fdd199312815e2\",null,null,0,[4],null,null,2]',\n    \"3.0 Flash Thinking Advanced\": '[1,null,null,null,\"e051ce1aa80aa576\",null,null,0,[4],null,null,2]'\n};\n\nvar YTPROCodecs={\nvideo:[\"AV1\",\"VP8\",\"VP9\",\"H264\"],\naudio:[\"Opus\",\"Mp4a\"]\n}\n\nlet touchstartY = 0;\nlet touchendY = 0;\nlet initialDistance=null;\n\n//swipe controls\nvar sens=0.005;\nvar vol=Android.getVolume();\nvar brt = Android.getBrightness()/100;\n\nif(localStorage.getItem(\"saveCInfo\") == null  || localStorage.getItem(\"gesC\") == null || localStorage.getItem(\"gesM\") == null || localStorage.getItem(\"bgplay\") == null){\nlocalStorage.setItem(\"autoSpn\",\"true\");\nlocalStorage.setItem(\"bgplay\",\"true\");\nlocalStorage.setItem(\"gesC\",\"true\");\nlocalStorage.setItem(\"gesM\",\"false\");\nlocalStorage.setItem(\"fzoom\",\"false\");\nlocalStorage.setItem(\"saveCInfo\",\"true\");\nlocalStorage.setItem(\"geminiModel\",\"3.0 Flash\");\nlocalStorage.setItem(\"prompt\",\"Give me details about this YouTube video Id: {videoId} , a detailed summary of timestamps with facts , resources and reviews of the main content\");\nlocalStorage.setItem(\"devMode\",\"false\");\n\nlocalStorage.setItem(\"block_60fps\",\"false\");\n\nYTPROCodecs.video.forEach((x)=>{\nlocalStorage.setItem(x,\"true\");\n});\n\nYTPROCodecs.audio.forEach((x)=>{\nlocalStorage.setItem(x,\"true\");\n});\n\n}\nif(localStorage.getItem(\"fzoom\") == \"true\"){\ndocument.getElementsByName(\"viewport\")[0].setAttribute(\"content\",\"\");\n}\n\nif ([\"2.0 Flash\", \"2.0 Flash Thinking\", \"2.5 Flash\", \"2.5 Pro\"].includes(localStorage.getItem('geminiModel'))) {\nlocalStorage.setItem('geminiModel', \"3.0 Flash\");\n}\n\n\nif(window.location.pathname.indexOf(\"shorts\") > -1){\nytoldV=window.location.pathname;\n}\nelse{\nytoldV=(new URLSearchParams(window.location.search)).get('v') ;\n}\n\n\n/*Dark and Light Mode*/\nvar c=\"#000\";\nvar d=\"#f2f2f2\";\nvar dc=\"#fff\";\nvar isD=false;\nvar dislikes=\"...\";\n\n\nif(document.cookie.indexOf(\"f6=40000\") > -1){\ndc =\"#000\";c =\"#fff\";d=\"rgba(255,255,255,0.1)\";\nisD=true;\n}else{\ndc =\"#fff\";c=\"#000\";d=\"rgba(0,0,0,0.05)\";\nisD=false;\n}\n\nvar downBtn=`<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24\" width=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n<path\nd=\"M16.59 9H15V4a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v5H7.41a1 1 0 0 0-.7 1.7l4.59 4.59a1 1 0 0 0 1.42 0l4.59-4.59a1 1 0 0 0-.72-1.7Z\"\nstroke=\"${c}\"\nstroke-width=\"1.8\"\nstroke-linecap=\"round\"\nstroke-linejoin=\"round\"\n/>\n<rect x=\"5\" y=\"17.2\" width=\"14\" height=\"1.8\" rx=\"0.9\" fill=\"${c}\" />\n</svg>\n`;\n\n\n\n\n\n\n\n\n\n\nfunction override() {\n\nvar videoElem = document.createElement('video');\nvar origCanPlayType = videoElem.canPlayType.bind(videoElem);\nvideoElem.__proto__.canPlayType = makeModifiedTypeChecker(origCanPlayType);\n\nvar mse = window.MediaSource;\n\nif (mse === undefined) return;\nvar origIsTypeSupported = mse.isTypeSupported.bind(mse);\nmse.isTypeSupported = makeModifiedTypeChecker(origIsTypeSupported);\n}\n\n\nfunction makeModifiedTypeChecker(origChecker) {\n\n\nreturn function (type) {\nif (type === undefined) return '';\nvar disallowed_types = [];\nif (localStorage['H264'] === 'false') {\ndisallowed_types.push('avc');\n}\nif (localStorage['VP8'] === 'false') {\ndisallowed_types.push('vp8');\n}\nif (localStorage['VP9'] === 'false') {\ndisallowed_types.push('vp9', 'vp09');\n}\nif (localStorage['AV1'] === 'true') {\ndisallowed_types.push('av01', 'av99');\n}\nif (localStorage['Opus'] === 'false') {\ndisallowed_types.push('opus');\n}\nif (localStorage['Mp4a'] === 'false') {\ndisallowed_types.push('mp4a');\n}\n\n// If video type is in disallowed_types, say we don't support them\nfor (var i = 0; i < disallowed_types.length; i++) {\nif (type.indexOf(disallowed_types[i]) !== -1) return '';\n}\n\nif (localStorage['block_60fps'] === 'true') {\nvar match = /framerate=(\\d+)/.exec(type);\nif (match && match[1] > 30) return '';\n}\n\nreturn origChecker(type);\n};\n}\n\noverride();\n\n\n\n\n\nfunction insertAfter(referenceNode, newNode) {\ntry{\nreferenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);\n}catch{}\n}\n\n\n/*wait for the element , using observer*/\nasync function waitForElement(selector,vid) {\nreturn new Promise((resolve) => {\nconst element = document.querySelector(selector);\nif(element){\nif(vid && element.src != \"\") return resolve(element);\nif(!vid) return resolve(element);\n}\nconst observer = new MutationObserver(() => {\nconst el = document.querySelector(selector);\nif (el){\n\nif(vid && el.src) resolve(el),observer.disconnect();;\nif(!vid) resolve(el),observer.disconnect();;\n}\n});\nobserver.observe(document.body, {\nchildList: true,\nsubtree: true\n});\n});\n}\n\n\n/*Add Settings Tab*/\nvar addSettingsTab=()=>{\nif(document.getElementById(\"setDiv\") == null){\nvar setDiv=document.createElement(\"div\");\nsetDiv.setAttribute(\"style\",`\nz-index:9999999999;\nfont-size:22px;\ntext-align:center;\nline-height:35px;\npointer-events:auto;\n`);\nsetDiv.setAttribute(\"id\",\"setDiv\");\nvar svg=document.createElement(\"ytm-pivot-bar-item-renderer\");\nsvg.innerHTML=`<svg fill=\"${ window.location.href.indexOf(\"watch\") < 0 ? c : \"#fff\" }\" xmlns=\"http://www.w3.org/2000/svg\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\"  id=\"hSett\"><path d=\"M12.844 1h-1.687a2 2 0 00-1.962 1.616 3 3 0 01-3.92 2.263 2 2 0 00-2.38.891l-.842 1.46a2 2 0 00.417 2.507 3 3 0 010 4.525 2 2 0 00-.417 2.507l.843 1.46a2 2 0 002.38.892 3.001 3.001 0 013.918 2.263A2 2 0 0011.157 23h1.686a2 2 0 001.963-1.615 3.002 3.002 0 013.92-2.263 2 2 0 002.38-.892l.842-1.46a2 2 0 00-.418-2.507 3 3 0 010-4.526 2 2 0 00.418-2.508l-.843-1.46a2 2 0 00-2.38-.891 3 3 0 01-3.919-2.263A2 2 0 0012.844 1Zm-1.767 2.347a6 6 0 00.08-.347h1.687a4.98 4.98 0 002.407 3.37 4.98 4.98 0 004.122.4l.843 1.46A4.98 4.98 0 0018.5 12a4.98 4.98 0 001.716 3.77l-.843 1.46a4.98 4.98 0 00-4.123.4A4.979 4.979 0 0012.843 21h-1.686a4.98 4.98 0 00-2.408-3.371 4.999 4.999 0 00-4.12-.399l-.844-1.46A4.979 4.979 0 005.5 12a4.98 4.98 0 00-1.715-3.77l.842-1.459a4.98 4.98 0 004.123-.399 4.981 4.981 0 002.327-3.025ZM16 12a4 4 0 11-7.999 0 4 4 0 018 0Zm-4 2a2 2 0 100-4 2 2 0 000 4Z\"></path></svg>\n`;\nsetDiv.appendChild(svg);\ninsertAfter(document.getElementsByTagName(\"ytm-home-logo\")[0],setDiv)\nif(document.getElementById(\"hSett\") != null){\ndocument.getElementById(\"hSett\").addEventListener(\"click\",\nfunction(ev){\nwindow.location.hash=\"settings\";\n});\n}\n}\n\n\n};\n\n\n\n\n/*Dislikes To Locale, Credits: Return YT Dislikes*/\nfunction getDislikesInLocale(num){\nvar nn=num;\nif (num < 1000){\nnn = num;\n}\nelse{\nconst int = Math.floor(Math.log10(num) - 2);\nconst decimal = int + (int % 3 ? 1 : 0);\nconst value = Math.floor(num / 10 ** decimal);\nnn= value * 10 ** decimal;\n}\nlet userLocales;\nif (document.documentElement.lang) {\nuserLocales = document.documentElement.lang;\n} else if (navigator.language) {\nuserLocales = navigator.language;\n} else {\ntry {\nuserLocales = new URL(\nArray.from(document.querySelectorAll(\"head > link[rel='search']\"))\n?.find((n) => n?.getAttribute(\"href\")?.includes(\"?locale=\"))\n?.getAttribute(\"href\")\n)?.searchParams?.get(\"locale\");\n} catch {\nuserLocales = \"en\";\n}\n}\nreturn Intl.NumberFormat(userLocales, {\nnotation: \"compact\",\ncompactDisplay: \"short\",\n}).format(nn);\n}\n\n\n\n/*Skips the bad part :)*/\nasync function skipSponsor(){\nvar sDiv=document.createElement(\"div\");\nsDiv.setAttribute(\"style\",`height:3px;pointer-events:none;width:100%;position:absolute;z-index:99;`)\nsDiv.setAttribute(\"id\",\"sDiv\");\nvar player = document.getElementsByClassName(\"video-stream\")[0];\nvar dur=player.duration;\n\nif(isNaN(dur)) return;\n\nfor(var x in sTime){\nvar s1=document.createElement(\"div\");\nvar s2=sTime[x];\ns1.setAttribute(\"style\",`height:3px;width:${(100/dur) * (s2[1]-s2[0])}%;background:#0f8;position:absolute;z-index:9;left:${(100/dur) * s2[0]}%;`)\nsDiv.appendChild(s1);\n}\n\n\n\n\nvar e=await waitForElement(\"yt-progress-bar\",false);\n\n\nif(document.getElementById(\"sDiv\") == null){\nif(document.getElementsByClassName('ytPlayerProgressBarHost')[0] != null){\ndocument.getElementsByClassName('ytPlayerProgressBarHost')[0].appendChild(sDiv);\n}else{\ntry{document.getElementsByClassName('ytProgressBarLineProgressBarLine')[0].appendChild(sDiv);}catch{}\n}\n}\n\n\n\n\n}\n\n\n\n\n\n/*Fetch The Dislikes*/\nasync function fDislikes(url){ \nvar Url=new URL(url);\nvar vID=\"\";\nif(Url.pathname.indexOf(\"shorts\") > -1){\nvID=Url.pathname.substr(8,Url.pathname.length);\n}\nelse if(Url.pathname.indexOf(\"watch\") > -1){\nvID=Url.searchParams.get(\"v\");\n}\n\n\nfetch(\"https://returnyoutubedislikeapi.com/votes?videoId=\"+vID)\n.then(response => {\nreturn response.json();\n}).then(jsonObject => {\nif('dislikes' in jsonObject){\ndislikes=getDislikesInLocale(parseInt(jsonObject.dislikes));\n}\n}).catch(error => {});\n\n}\n\n\n\n/*Check For Sponsorships*/\nasync function checkSponsors(Url){\n\n\nif(Url.indexOf(\"watch\") > -1){\n\nsTime=[];\n\nawait fetch(\"https://sponsor.ajay.app/api/skipSegments?videoID=\"+new URL(Url).searchParams.get(\"v\"))\n.then(response => {\nreturn response.json();\n}).then(jsonObject => {\nfor(var x in jsonObject){\nvar time=jsonObject[x].segment;\nsTime.push(time);\n}\n}).catch(error => {});\n\n\n\n/*Skip the Sponsor*/\nvar player = await waitForElement(\".video-stream\",true);\n\n\nplayer.ontimeupdate=()=>{\nskipSponsor();\nvar cur=player.currentTime;\nfor(var x in sTime){\nvar s2=sTime[x];\nif(Math.floor(cur) == Math.floor(s2[0])){\nif(localStorage.getItem(\"autoSpn\") == \"true\"){\nplayer.currentTime=s2[1];\naddSkipper(s2[0]);\n}\n}\n}\n};\n\n\n\n\n\n}\n\n}\n\n\n//DEBUG\n/*\ns1: FoQR9rLpRy8\ns2: PN51tJhZscE\n*/\n/*Add Skip Sponsor Element*/\nfunction addSkipper(sT){\nvar sSDiv=document.createElement(\"div\");\nsSDiv.setAttribute(\"style\",`\nheight:50px;${(screen.width > screen.height) ? \"width:50%;\" : \"width:80%;\"}overflow:auto;background:rgba(130,130,130,.3);\nbackdrop-filter:blur(6px);\nposition:absolute;bottom:40px;\nline-height:50px;\nleft:calc(15% / 2 );padding-left:10px;padding-right:10px;\nz-index:99999999999999;text-align:center;border-radius:25px;\ncolor:white;text-align:center;\n`);\nsSDiv.innerHTML=`<span style=\"height:30px;line-height:30px;margin-top:10px;display:block;font-family:monospace;font-size:16px;float:left;\">Skipped Sponsor</span>\n<span style=\"height:30px;line-height:44px;float:right;padding-right:30px;margin-top:10px;display:block;padding-left:30px;border-left:1px solid white;\">\n<svg data-action=\"rewind\" xmlns=\"http://www.w3.org/2000/svg\" width=\"23\" height=\"23\" style=\"margin-top:0px;\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\n<path fill-rule=\"evenodd\" d=\"M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2v1z\"/>\n<path d=\"M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466z\"/>\n</svg>\n<svg data-action=\"close\" xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" style=\"margin-left:30px;\" fill=\"#f24\" class=\"bi bi-x-circle-fill\" viewBox=\"0 0 16 16\">\n<path d=\"M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM5.354 4.646a.5.5 0 1 0-.708.708L7.293 8l-2.647 2.646a.5.5 0 0 0 .708.708L8 8.707l2.646 2.647a.5.5 0 0 0 .708-.708L8.707 8l2.647-2.646a.5.5 0 0 0-.708-.708L8 7.293 5.354 4.646z\"/>\n</svg>\n</span>`;\ndocument.getElementById(\"player-control-container\").appendChild(sSDiv);\n\n\nsSDiv.addEventListener(\"click\",(e)=>{\n  var el=e.target.closest(\"[data-action]\");\n  \n  if(!el) return;\n  var action=el.dataset.action;\n  \n  if(action == \"close\"){\nel.parentElement.parentElement.remove();\n  }else if(action == \"rewind\"){\n  el.parentElement.parentElement.remove();\n  document.getElementsByClassName('video-stream')[0].currentTime=sT+1; \n  }\n  \n});\n\n\nsetTimeout(()=>{sSDiv.remove();},5000);\n}\n\n\nfDislikes(window.location.href);\ncheckSponsors(window.location.href);\n\n\nif((window.location.pathname.indexOf(\"watch\") > -1) || (window.location.pathname.indexOf(\"shorts\") > -1)){\nvar unV=setInterval(() => {\n\n\n/*Unmute The Video*/ \n\ndocument.getElementsByClassName('video-stream')[0].muted=false;\n\nif(!document.getElementsByClassName('video-stream')[0].muted){\nclearInterval(unV);\n\n}\n\n}, 5);\n\n}\n\n/*Funtion to set Element Styles*/\nfunction sty(e,v){\nvar s={\ndisplay:\"flex\",\nalignItems:\"center\",\njustifyContent:\"center\",\nfontWeight:\"550\",\nheight:\"65%\",\nminWidth:\"80px\",\nwidth:\"auto\",\nborderRadius:\"20px\",\nbackground:d,\nfontSize:\"12px\",\nmarginRight:\"5px\",\ntextAlign:\"center\",\n};\nfor(x in s){\ne.style[x]=s[x];\n}\n}\n\n\nfunction getGeminiModels(){\nvar t=\"\";\n\nfor(var x in GeminiModels){\n\n\nt+=`<br>\n<button data-action=\"saveModel\" data-value=\"${x}\" ${(x == localStorage.getItem('geminiModel')) ? `style=\"background:${c};color:${dc};\"` : \"\" } >${x}\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"${c}\"  viewBox=\"0 0 16 16\">\n<path fill-rule=\"evenodd\" d=\"M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708\"/>\n</svg>\n</button>`;\n}\n\nreturn t;\n\n}\n\n\n/*Get Codecs*/\nfunction getYTPROCodecs(){\nvar t=`<p style=\"text-align:center;font-size:14px;\">This feature is experimental , this may break YTPro if not configured correctly. By default all the codecs are enabled , tap on the buttons below to switch them.</p><br> <vc  style=\"font-size:14px;\">Video Codecs</vc><br>`;\n\nfor(var y in YTPROCodecs.video){\n\nvar x=YTPROCodecs.video[y];\n\nt+=`<button data-action=\"setRemoveCodec\" data-value=\"${x}\" ${(\"true\" == localStorage.getItem(x)) ? `style=\"background:${c};color:${dc};\"` : \"\" } >${x}\n<svg  ${(\"true\" != localStorage.getItem(x)) ? `style=\"display:none\"` : \"\" } xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"${dc}\"  viewBox=\"0 0 16 16\">\n<path d=\"M10.97 4.97a.75.75 0 0 1 1.07 1.05l-3.99 4.99a.75.75 0 0 1-1.08.02L4.324 8.384a.75.75 0 1 1 1.06-1.06l2.094 2.093 3.473-4.425z\"/>\n</svg>\n</button>`;\n}\n\nt+=`<br><br><vc  style=\"font-size:14px\">Audio Codecs</vc><br>`\nfor(var y in YTPROCodecs.audio){\n\nvar x=YTPROCodecs.audio[y];\n\nt+=`<button data-action=\"setRemoveCodec\" data-value=\"${x}\" ${(\"true\" == localStorage.getItem(x)) ? `style=\"background:${c};color:${dc};\"` : \"\" } >${x}\n<svg ${(\"true\" != localStorage.getItem(x)) ? `style=\"display:none\"` : \"\" } xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"${dc}\"  viewBox=\"0 0 16 16\">\n<path d=\"M10.97 4.97a.75.75 0 0 1 1.07 1.05l-3.99 4.99a.75.75 0 0 1-1.08.02L4.324 8.384a.75.75 0 1 1 1.06-1.06l2.094 2.093 3.473-4.425z\"/>\n</svg>\n</button>`;\n}\n\nt+=`<br><br>\n<div>Block 60FPS <span data-action=\"block_60fps\" style=\"${sttCnf(0,0,\"block_60fps\")}\" ><b style=\"${sttCnf(0,1,\"block_60fps\")}\" ></b></span></div> `;\n\nt+=`<br><br><button data-action=\"done\" style=\"margin-top:10px;width:25%;float:right;text-align:center;background:${c};color:${dc};\" >Done</button>`;\n\n\nreturn t;\n\n}\n\n\nfunction setRemoveCodec(x,y){\n\n\nif(localStorage[x] == \"true\"){\nlocalStorage.setItem(x,\"false\");\ny.style.background=isD ? \"rgba(255,255,255,.1)\" : \"rgba(0,0,0,.1)\";\ny.style.color=c;\ny.children[0].style.display=\"none\";\n}else{\nlocalStorage.setItem(x,\"true\");\ny.style.background=c;\ny.style.color=dc;\ny.children[0].style.display=\"block\";\n}\n\n\n\n\n}\n\n\n/*The settings tab*/\nasync function ytproSettings(){\nvar ytpSet=document.createElement(\"div\");\nvar ytpSetI=document.createElement(\"div\");\nytpSet.setAttribute(\"id\",\"settingsprodiv\");\nytpSetI.setAttribute(\"id\",\"ssprodivI\");\nytpSet.setAttribute(\"style\",`\nheight:100%;width:100%;position:fixed;top:0;left:0;\ndisplay:flex;justify-content:center;\nbackground:rgba(0,0,0,0.7);\nz-index:9999;\n`);\nytpSet.addEventListener(\"click\",\nfunction(ev){\n\nif(!(ev.target == ytpSetI  || ytpSetI.contains(ev.target))){\n\nhistory.back();\n}\n});\n\nytpSetI.setAttribute(\"style\",`\nheight:65%;width:calc(95% - 20px);overflow:auto;\nbackground:${isD ? \"#212121\" : \"#f1f1f1\"};\nposition:fixed;\nbottom:20px;\nz-index:99999999999999;padding:10px;text-align:center;border-radius:25px;color:${c};text-align:center;\ncolor:${isD ? \"#ccc\" : \"#444\"};`);\n\nytpSetI.innerHTML=`<style>\n@import url('https://fonts.googleapis.com/css2?family=Delius&display=swap');\n#settingsprodiv a{text-decoration:underline;} #settingsprodiv li{list-style:none; display:flex;align-items:center;justify-content:center;color:#fff;border-radius:25px;padding:10px;background:#000;margin:5px;}\n#ssprodivI div{\nheight:10px;\nwidth:calc(100% - 20px);\npadding:10px;\nfont-size:1.45rem;\ntext-align:left;\ndisplay:flex;\nalign-items:center;\nposition:relative;\nmargin-top:3px;\n}\n#ssprodivI div span{\ndisplay:block;\nheight:23px;\nwidth:40px;\nborder-radius:40px;\nright:10px;\nposition:absolute;\nbackground:#151515;\n}\n#ssprodivI div span b{\ndisplay:block;\nheight:19px;\nwidth:19px;\nposition:absolute;\nright:2px;\ntop:2px;\nborder-radius:50px;\nbackground:#fff;\n}\n#ssprodivI div input::placeholder{color:${ isD ? \"white\" : \"#000\"};}\n#ssprodivI div input,#ssprodivI div button{\nheight:35px;\nbackground:${isD ? \"rgba(255,255,255,.1)\" : \"rgba(0,0,0,.1)\"};\nwidth:100%;\nborder:0;\nborder-radius:20px;\npadding:10px;\nfont-size:1.25rem;\n}\n#ssprodivI button{\nbackground:transparent;\nfont-size:1.45rem;\nwidth:calc(100% - 20px);\nheight:40px;\ncolor:${isD ? \"#ccc\" : \"#444\"};\nmargin-top:3px;\ntext-align:left;\n}\n#ssprodivI button svg{\nfloat:right;\n}\n#ssprodivI .credit{\nfont-family: \"Delius\", cursive;\nfont-style: normal;\ndisplay:flex;\njustify-content:center;\nalign-items:center;\ntext-align:center;\nfont-size:1.55rem;\nfont-weight:bolder;\ncolor:${isD ? \"#fff\" : \"#000\"};\nposition:fixed;\nbottom:20px;\nwidth:calc(95% - 20px);\nleft:calc(2.5% + 0px);\nbackground:${d};\nborder-radius:0 0 25px 25px;\nbackdrop-filter:blur(10px);\nheight:15px;\n}\n#ssprodivI .geminiModels,#ssprodivI .disableCodecs,#ssprodivI .geminiPrompt{\nheight:auto;\nmin-height:100px;\npadding-bottom:12px;\nbackground:${isD ? \"#212121\" : \"#f1f1f1\"};\nposition:fixed;\ndisplay:block;\nwidth:calc(95% - 20px);\nleft:calc(2.5% + 0px);\nbottom:20px;\nz-index:999999;\nbox-shadow:0px 0px 5px black;\nborder-radius:25px;\ndisplay:none;\n}\n#ssprodivI .geminiModels:before,#ssprodivI .disableCodecs:before,#ssprodivI .geminiPrompt:before{\nheight:100%;\nwidth:100%;\nbackground:rgba(0,0,0,.6);\nposition:fixed;\ntop:0;\nleft:0;\nz-index:-999;\n}\n#ssprodivI .geminiPrompt textarea{\nheight:300px;\nwidth:95%;\nborder-radius:20px;\npadding:15px;\nbackground:${d};\n}\n#ssprodivI .disableCodecs{\ncolumn:50%;\n}\n#ssprodivI .disableCodecs button{\nwidth:48%;\ncolumn:50%;\nmargin-right:2%;\ncolor:${c};\n}\n</style>`;\nytpSetI.innerHTML+=`<br><b style='font-size:18px' >YT PRO Settings</b>\n<span style=\"font-size:10px\">v${YTProVer}</span>\n<br><br>\n<div data-action=\"follow\" style=\"min-height:35px;height:auto;width:95%;margin:auto;background:#ee2a7b44;border-radius:30px;margin-bottom:15px;border:1px solid #ee2a7b;display:flex;padding:5px;gap:8px;\">\n\n<img style=\"flex-shrink: 0;height:40px;width:40px;border-radius:50%;\" src=\"https://raw.githubusercontent.com/prateek-chaubey/YTPro/refs/heads/main/.github/img/habitius.webp\" >\n<div style=\"display:flex;flex-direction:column;align-items:flex-start;height:100%;width:auto;flex-shrink:0;font-size:14px;background:re;padding:0;\"><b>Please follow Habitius on Instagram</b>For daily habit,lifestyle and health tips </div>\n\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"${isD ? \"#ccc\" : \"#444\"}\" viewBox=\"0 0 16 16\">\n<path fill-rule=\"evenodd\" d=\"M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708\"/>\n</svg>\n\n</div>\n\n<div><input type=\"url\" placeholder=\"Enter Youtube URL\" id=\"ytproUrlInput\" ></div>\n<br>\n<button data-action=\"hearts\">Liked Videos\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"${isD ? \"#ccc\" : \"#444\"}\" viewBox=\"0 0 16 16\">\n<path fill-rule=\"evenodd\" d=\"M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708\"/>\n</svg>\n</button>\n<br>\n<button data-action=\"checkUpdate\">Check for Updates\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"${isD ? \"#ccc\" : \"#444\"}\"  viewBox=\"0 0 16 16\">\n<path fill-rule=\"evenodd\" d=\"M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708\"/>\n</svg>\n</button>\n<br>\n<div>Autoskip Sponsors <span data-action=\"sttCnf\" data-value=\"autoSpn\" style=\"${sttCnf(0,0,\"autoSpn\")}\" ><b style=\"${sttCnf(0,1,\"autoSpn\")}\"></b></span></div>\n<br>\n<div>Gesture Controls <span data-action=\"sttCnf\" data-value=\"gesC\" style=\"${sttCnf(0,0,\"gesC\")}\" ><b style=\"${sttCnf(0,1,\"gesC\")}\"></b></span></div>\n<br>\n<div>Miniplayer Gesture <span data-action=\"sttCnf\" data-value=\"gesM\" style=\"${sttCnf(0,0,\"gesM\")}\" ><b style=\"${sttCnf(0,1,\"gesM\")}\"></b></span></div>\n<br>\n<div>Force Zoom <span data-action=\"sttCnf\" data-value=\"fzoom\"  style=\"${sttCnf(0,0,\"fzoom\")}\" ><b style=\"${sttCnf(0,1,\"fzoom\")}\" ></b></span></div> \n<br>\n<div>Background Play <span data-action=\"sttCnf\" data-value=\"bgplay\" style=\"${sttCnf(0,0,\"bgplay\")}\" ><b style=\"${sttCnf(0,1,\"bgplay\")}\" ></b></span></div> \n<br>\n<div>Hide Shorts <span data-action=\"sttCnf\" data-value=\"shorts\" style=\"${sttCnf(0,0,\"shorts\")}\" ><b style=\"${sttCnf(0,1,\"shorts\")}\" ></b></span></div> \n<br>\n<div>Use single Gemini chat <span data-action=\"sttCnf\" data-value=\"saveCInfo\" style=\"${sttCnf(0,0,\"saveCInfo\")}\" ><b style=\"${sttCnf(0,1,\"saveCInfo\")}\"></b></span></div>\n<br>\n<button data-action=\"geminiModels\">Select Gemini Model\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"${isD ? \"#ccc\" : \"#444\"}\" viewBox=\"0 0 16 16\">\n<path fill-rule=\"evenodd\" d=\"M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708\"/>\n</svg>\n</button>\n<br>\n<button data-action=\"geminiPrompt\">Edit Gemini Prompt\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"${isD ? \"#ccc\" : \"#444\"}\" viewBox=\"0 0 16 16\">\n<path fill-rule=\"evenodd\" d=\"M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708\"/>\n</svg>\n</button>\n<br>\n<button data-action=\"disableCodecs\">Disable Codecs\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"${isD ? \"#ccc\" : \"#444\"}\" viewBox=\"0 0 16 16\">\n<path fill-rule=\"evenodd\" d=\"M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708\"/>\n</svg>\n</button>\n<br>\n<button data-action=\"issues\">Report Bugs\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"${isD ? \"#ccc\" : \"#444\"}\" viewBox=\"0 0 16 16\">\n<path fill-rule=\"evenodd\" d=\"M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708\"/>\n</svg>\n</button>\n<br>\n<button style=\"font-weight:bolder;\" data-action=\"sponsor\">Become a Sponsor\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"${isD ? \"#ccc\" : \"#444\"}\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n  <path d=\"M5 2l6 6-6 6\"/>\n</svg>\n\n</button>\n<br>\n<div>Developer Mode <span data-action=\"sttCnf\" data-value=\"devMode\" style=\"${sttCnf(0,0,\"devMode\")}\" ><b style=\"${sttCnf(0,1,\"devMode\")}\"></b></span></div>\n<br><br>\n<p style=\"font-size:1.25rem;width:calc(100% - 20px);margin:auto;text-align:left\"><b style=\"font-weight:bold\">Disclaimer</b>: This is an unofficial OSS Youtube Mod, all the logos and brand names are property of Google LLC.<br>\nYou can find the source code at <a href=\"https://www.youtube.com/redirect?q=https://github.com/prateek-chaubey/YTPRO\" style=\"font-family:monospace;\" > https://github.com/prateek-chaubey/YTPRO</a>\n<br><br></p><br><br><br>\n\n<div class=\"geminiModels\">\n\n</div>\n\n\n<div class=\"geminiPrompt\" style=\"text-align:center;\">\n\n<textarea>\n${localStorage.getItem(\"prompt\")}\n</textarea>\n\n<button data-action=\"savePrompt\" style=\"margin-top:10px;width:25%;float:right;text-align:center;background:${c};color:${dc};\" >Save</button>\n<br><br>\n</div>\n\n\n<div class=\"disableCodecs\">\n\n</div>\n\n\n<div class=\"credit\" >\n<z style=\"margin-right:6px\">Made with </z>\n\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" fill=\"#fff\" viewBox=\"-1 -1 18 18\">\n<path fill-rule=\"evenodd\" d=\"M8 1.314C12.438-3.248 23.534 4.735 8 15-7.534 4.736 3.562-3.248 8 1.314\" \nstroke=\"black\" ${ !isD ? \"stroke-width='1'\" : \"\" } stroke-linejoin=\"round\" stroke-linecap=\"round\"/>\n</svg>\n\n\n\n<z style=\"margin-left:6px\">by Prateek Chaubey</z>\n</div>\n`;\n\n\ndocument.body.appendChild(ytpSet);\nytpSet.appendChild(ytpSetI);\n\n\ndocument.getElementById(\"ytproUrlInput\").addEventListener(\"keyup\",searchUrl);\n\n\n\n\nvar actionsList={\n  follow:()=>{\n    Android.oplink(\"https://www.instagram.com/habitius.daily\");\n  },\n  hearts:()=>{\n    window.location.hash='#hearts';\n  },\n  checkUpdate:()=>{\n    checkUpdates();\n  },\n  sttCnf:(button,action)=>{\n    sttCnf(button,action);\n  },\n  geminiModels:()=>{\n    document.getElementsByClassName('geminiModels')[0].style.display='block';document.getElementsByClassName('geminiModels')[0].innerHTML=getGeminiModels();\n  },\n  geminiPrompt:()=>{\n    document.getElementsByClassName('geminiPrompt')[0].style.display='block';\n  },\n  issues:()=>{\n    Android.oplink('https://github.com/prateek-chaubey/YTPRO/issues');\n  },\n  disableCodecs:()=>{\n    document.getElementsByClassName('disableCodecs')[0].style.display='block';document.getElementsByClassName('disableCodecs')[0].innerHTML=getYTPROCodecs();\n  },\n  sponsor:()=>{\n    Android.oplink('https://github.com/sponsors/prateek-chaubey');\n  },\n  savePrompt:(el)=>{\n    localStorage.setItem('prompt',el.previousElementSibling.value);el.parentElement.style.display='none';\n  },\n  done:(el)=>{\n    el.parentElement.style.display='none';\n  },\n  setRemoveCodec:(el,value)=>{\n    setRemoveCodec(value,el)\n  },\n  block_60fps:(el)=>{\n    sttCnf(el,\"block_60fps\");\n  },\n  saveModel:(el,value)=>{\n    localStorage.removeItem('geminiChatInfo');\n    localStorage.setItem('geminiModel',value);\n    el.parentElement.style.display='none';\n  }\n}\n\n//buttons and switches\nytpSetI.querySelectorAll(\"[data-action]\").forEach(button =>{\n  button.addEventListener(\"click\",()=>{\n    \n    if(button.dataset.action== \"sttCnf\"){\n    actionsList[button.dataset.action](button,button.dataset.value);\n    }else{\n    actionsList[button.dataset.action](button);\n    }\n  })\n});\n\n\n//disable Codecs\nytpSetI.querySelector(\".disableCodecs\").addEventListener(\"click\",(e)=>{\n  var el = e.target.closest(\"[data-action]\");\n  if(!el) return;\n  \n  actionsList[el.dataset.action](el,el.dataset.value);\n\n})\n\n\n//gemini model selector\nytpSetI.querySelector(\".geminiModels\").addEventListener(\"click\",(e)=>{\n  var el = e.target.closest(\"[data-action]\");\n  if(!el) return;\n  \n  actionsList[el.dataset.action](el,el.dataset.value);\n\n})\n\n\n\n}\n\n\n\nfunction searchUrl(e){\n  \n  \nif(e.keyCode === 13 || e === \"Enter\"){\n\nvar url=e.target.value;\nconst regex = /(?:https?:\\/\\/)?(?:www\\.|m\\.)?(?:youtu\\.be\\/|youtube(?:-nocookie)?\\.com\\/(?:(?:watch)?\\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|shorts|live)\\/))([a-zA-Z0-9_-]{11})/;\n  \nconst match = url.match(regex);\nvar id=match ? match[1] : null;\nif(id){\n  return navigateInternalYtMweb(id);\n}\n\n\nvar a=document.createElement(\"a\");\na.href=url;\ndocument.body.appendChild(a);\ntry{document.getElementById(\"settingsprodiv\").remove();}catch{}\na.click();\n\n}\n}\n\nfunction checkUpdates(){\nif(parseFloat(Android.getInfo()) < parseFloat(YTProVer) ){\nupdateModel();\n}else{\nAndroid.showToast(\"Your app is up to date\");\n}\n\nfetch('https://youtube.com/ytpro_cdn/npm/ytpro', {cache: 'reload'});\nfetch('https://youtube.com/ytpro_cdn/npm/ytpro/bgplay.js', {cache: 'reload'});\nfetch('https://youtube.com/ytpro_cdn/npm/ytpro/innertube.js', {cache: 'reload'});\n}\n\n\n/*Set Configration*/\nfunction sttCnf(x,z,y){\n\n/*Way too complex to understand*/\nif(isD){\nvar s=[\"#000\",\"#717171\",\"#fff\"];\n}else{\nvar s=[\"#fff\",\"#909090\",\"#151515\"];\n}\n\n\n\nif(typeof y == \"string\"){\n\nif(localStorage.getItem(y) != \"true\"){\nif(z == 1){\nreturn `background:${s[0]};left:2px;`;\n}else{\nreturn `background:${s[1]};`;\n}\n}else{\nif(z == 1){\nreturn `background:${s[0]};`;\n}else{\nreturn `background:${s[2]};`;\n}\n}\n}\nif(localStorage.getItem(z) == \"true\"){\nlocalStorage.setItem(z,\"false\");\nx.style.background=s[1];\nx.children[0].style.left=\"2px\";\nx.children[0].style.background=s[0];\n}\nelse{\nlocalStorage.setItem(z,\"true\");\nx.style.background=s[2];\nx.children[0].style.left=\"auto\";\nx.children[0].style.right=\"2px\";\nx.children[0].style.background=s[0];\n}\n\nif(localStorage.getItem(\"fzoom\") == \"false\"){\ndocument.getElementsByName(\"viewport\")[0].setAttribute(\"content\",\"width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no,\");\n}else{\ndocument.getElementsByName(\"viewport\")[0].setAttribute(\"content\",\"\");\n}\n\n\n\nif(localStorage.getItem(\"bgplay\") == \"true\"){\nAndroid.setBgPlay(true);\n}else{\nAndroid.setBgPlay(false);\n}\n\n\nif(localStorage.getItem(\"gesC\") != \"true\"){\ntry{\ndocument.getElementById(\"brtS\").remove();\ndocument.getElementById(\"volS\").remove();\n}catch{}\n  \n}\n\nif(localStorage.getItem(\"devMode\") == \"false\"){\ntry{eruda.destroy();}catch{}\n}else if(!window.eruda && localStorage.getItem(\"devMode\") == \"true\"){\nvar script = document.createElement('script'); script.src=\"//youtube.com/ytpro_cdn/npm/eruda\"; document.body.appendChild(script); script.onload=()=>{ eruda.init();}\n}\n\n\n\n}\n\n\n\n\n/*Format File Size*/\nfunction formatFileSize(bytes){\nvar s=parseInt(bytes);\nlet ss = ['B', 'KB', 'MB', 'GB', 'TB', 'PB']\nfor (var i=0; s > 1024; i++) s /= 1024;\nreturn `${s.toFixed(1)} ${ss[i]}`;\n}\n\n/*Video Downloader*/\nasync function ytproDownVid(){\n\nwindow.ytproSabrDownload();\n\n}\n\n\n\n\n\nfunction showHideAdaptives(){\nvar z=document.querySelectorAll(\".adpFormats\");\nz.forEach((x)=>{\nif(x.style.display==\"none\"){\nx.style.display=\"flex\";\n}else{\nx.style.display=\"none\";\n}\n\n});\n\n}\n\n/*Add the meme type and extensions lol*/\nfunction downCap(x,t){\nAndroid.downvid(t,x,\"plain/text\");\n}\n\n/*Send to Download Manager*/\nfunction YTDownVid(o,ex){\nvar mtype=\"\";\nif(ex ==\".png\"){\nmtype=\"image/png\";\n}else if(ex ==\".mp4\"){\nmtype=\"video/mp4\";\n}\nelse if(ex ==\".mp3\"){\nmtype=\"audio/mp3\";\n}\n\n//console.log(o.getAttribute(\"data-ytprourl\"))\n\nAndroid.downvid((o.getAttribute(\"data-ytprotit\")+ex),o.getAttribute(\"data-ytprourl\"),mtype);\n}\n\n\n\n\n\n\n\n\nvar stopProp = false;\nvar zoomIn=false;\nvar scale=1;\n\n\n/*Checks the Direction of the Swipe*/\nfunction checkDirection(e) {\nif ((touchendY > touchstartY) && (touchendY - touchstartY > 20)) {\nminimize(true);\n}else if ((touchendY < touchstartY) && (touchstartY - touchendY > 20)) {\nminimize(false);\n//console.log((touchstartY - touchendY ))\n}\n}\n\n/*for zoom in and out*/\nfunction getDistance(touches) {\nconst [a, b] = touches;\nreturn Math.hypot(b.pageX - a.pageX, b.pageY - a.pageY);\n}\n\n\n\n/*touch start*/\ndocument.body.addEventListener('touchstart', e => {\ntouchstartY = e.changedTouches[0].screenY;\nif (e.touches.length === 2) {\ninitialDistance = getDistance(e.touches);\n}\n}, { capture: true });\n\n\n\n\n/*touch move*/\ndocument.body.addEventListener('touchmove', (e) => {\n\n\nif(stopProp){\ne.stopPropagation();\n}\n\nif (e.touches.length === 2 && initialDistance !== null) {\nconst currentDistance = getDistance(e.touches);\nconst z = currentDistance / initialDistance;\n\nstopProp=true;\n\n\nif((e.target.className.toString().includes(\"video-stream\") || e.target.className.toString().includes(\"player-controls-background\")) && document.fullscreenElement){\n\nif (z > 1.05) {\nvar Vv=document.getElementsByClassName('video-stream')[0];\nzoomIn=true;\nscale=Math.max((screen.height / Vv.offsetHeight) , (screen.width / Vv.offsetWidth)); \naddMaxButton();\n} else if (z < 0.95) {\nzoomIn=false;\nscale=1;\naddMaxButton();\n}\n}\n\n\n\n}\n},{capture:true});\n\n\n\n\n\n\n/*touch end*/\ndocument.body.addEventListener('touchend', e => {\n\n\ntouchendY = e.changedTouches[0].screenY;\n\nif((e.target.className.toString().includes(\"video-stream\") || e.target.className.toString().includes(\"player-controls-background\")) && !document.fullscreenElement && localStorage.getItem(\"gesM\") == \"true\"){\ncheckDirection();\n}\n\nif (e.touches.length < 2) {\ninitialDistance = null; // reset\n\nsetTimeout(()=>{\nstopProp=false;\n},500)\n\n}\n\n}, { capture: true });\n\n\n\n\n\nnavigation.addEventListener(\"navigate\", e => {\nif(e.destination.url.indexOf(\"watch\") > -1 || e.destination.url.indexOf(\"shorts\") > -1){\n  dislikes=\"...\";\nfDislikes(e.destination.url);\ncheckSponsors(e.destination.url);\n}\n});\n\n\n/*minimize function to mini the video*/\nfunction minimize(yes){\n\n\nconst createIframe=()=>{\n\nvar iframe=document.createElement(\"iframe\");\niframe.setAttribute(\"id\",`miniIframe`);\niframe.setAttribute(\"style\",`\nheight:99.999%;width:100%;\nbackground:${c};\ntop:0px;\nline-height:50px;\nposition:fixed;\nleft:0;\nz-index:999;\nborder:0;\n`);\n\n\niframe.src=\"https://m.youtube.com/\";\ndocument.body.appendChild(iframe);\n\n\nvar iwindow = iframe.contentWindow || iframe.contentDocument.defaultView;\nvar doc = iwindow.document;\n\nif (doc.readyState  == 'complete' ) {\nif (iwindow.trustedTypes && iwindow.trustedTypes.createPolicy && !iwindow.trustedTypes.defaultPolicy) {\niwindow.trustedTypes.createPolicy('default', {createHTML: (string) => string,createScriptURL: string => string, createScript: string => string, });\n}\n}\n\niwindow.navigation.addEventListener(\"navigate\", e => {\nif(e.destination.url.indexOf(\"youtube.com\") > -1){\nif(e.destination.url.indexOf(\"/watch\") > -1 || e.destination.url.indexOf(\"/shorts\") > -1){\nwindow.location.href=e.destination.url;\n}\nvar script = doc.createElement(\"script\");\nvar scriptSource=`window.addEventListener('DOMContentLoaded', function() {\nvar script2 = document.createElement('script');\nscript2.src=\"//youtube.com/ytpro_cdn/npm/ytpro\";\ndocument.body.appendChild(script2);\n});\n`;\n}\nelse{\nwindow.location.href=e.destination.url;\n}\n\n\n});\n\nvar script = doc.createElement(\"script\");\nvar scriptSource=`window.addEventListener('DOMContentLoaded', function() {\nvar script2 = document.createElement('script');\nscript2.src=\"//youtube.com/ytpro_cdn/npm/ytpro\";\ndocument.body.appendChild(script2);\n});\n`;\n\n/*\nvar script = document.createElement('script'); \nscript.src=\"//cdn.jsdelivr.net/npm/eruda\"; \ndocument.body.appendChild(script);\nscript.onload = function () { eruda.init() } ;\n*/\n\n\n  \nvar source = doc.createTextNode(scriptSource);\nscript.appendChild(source);\ndoc.body.appendChild(script);\n\nreturn iframe;\n\n}\n\n\n\nvar iframe = document.getElementById(\"miniIframe\") || createIframe();\nvar player=document.getElementById(\"player-container-id\");\n\n\n\n\n//var ogCss=getComputedStyle(player);\n\nif(yes){\n\niframe.style.display=\"block\";\n\n\nplayer.setAttribute(\"ogTop\",getComputedStyle(player).top)\n\n\nplayer.style.transform=\"scale(0.65)\";\nplayer.style.top=(window.screen.height-(player.getBoundingClientRect().height*2.5))+\"px\";\nplayer.style.zIndex=\"9999\";\n\n\n}else{\n\niframe.style.display=\"none\";\n\n\n\nplayer.style.transform=\"scale(1)\";\nplayer.style.top=player.getAttribute(\"ogTop\");\nplayer.style.zIndex=\"normal\";\n\nplayer.removeAttribute(\"ogTop\");\n\n\n}\n}\n\n\n\n/*JAVA Callback for AccessToken*/\nfunction callbackSNlM0e(){\nreturn new Promise(resolve => {\ncallbackSNlM0e.resolve = resolve; \n});\n}\n\n/*JAVA Callback for Gemini Response*/\nfunction callbackGeminiClient(){\nreturn new Promise(resolve => {\ncallbackGeminiClient.resolve = resolve; \n});\n}\n\n\n\n\n\n/*Handles the reponse*/\nfunction handleGeminiResponse(res){\n\n\n/*Extract the body from the response*/\nconst getBody=(x)=>{\nfor(var i in x){\ntry{\nvar json=JSON.parse(x[i][2]);\nif(json[4]?.[0]?.[0].indexOf(\"rc_\") > -1) return json;\n}catch(e){console.log(\"JSON parse error: \"+e);}}\n}\n\n/*Modifies the timestamps , to handle them inside the video element*/\nconst modifyTimestamps=(x)=>{\nvar html=x;\nvar hrefs=html.match(/href=\"([^\"]*)\"/g) || [];\nvar urls= [...hrefs].map(url => url.replace(/href=\"|\"/g, \"\"));\nhrefs.forEach((x,i)=>{\nvar time=new URL(urls[i]).searchParams.get(\"t\");\nif(time != null){\nhtml=html.replace(x,`href=\"javascript:void(0);\" onclick=\"document.getElementsByClassName('video-stream')[0].currentTime='${time}'\"`)\n}else if(urls[i].indexOf(\"youtube.com\") < 0 && urls[i].indexOf(\"youtu.be\") < 0){\nhtml=html.replace(x,`href=\"javascript:void(0);\" onclick=\"try{document.getElementsByClassName('video-stream')[0].pause();}catch{}Android.oplink('${urls[i]}')\"`)\n}\n})\nreturn html;\n}\n\n\n\n\n\n\n/*checks if the object is empty*/\nvar response=res.stream;\n\nif (response == undefined) return document.getElementById(\"GeminiResponse\").innerHTML=`<center style=\"margin-top:15px\" > An error Occurred while connecting to Gemini`;\n\nvar lines=response.split(\"\\n\");\nvar responseJson=JSON.parse(lines[2])\n\n\nvar body=getBody(responseJson) || [];\n\n//console.log(body)\n\nvar chat=[];\n\nchat.push(body?.[1]?.[0]);\nchat.push(body?.[1]?.[1]);\nchat.push(body?.[4]?.[0]?.[0]);\n\n/*Stores the recent chat info*/\nlocalStorage.setItem(\"geminiChatInfo\",chat.toString());\n\n\nbody=body?.[4]?.[0];\n\nvar text=body?.[1]?.[0] || \"\";\ntext=text.replace(/http:\\/\\/googleusercontent\\.com\\/\\S+/g,'');\nvar thoughts = body?.[37]?.[0]?.[0] || null;\nvar images=[];\n\nfor(var i in body?.[12]?.[1]){\nvar img=body?.[12]?.[1]?.[i]\nimages.push({\nurl:img[0][0][0],\nalt:img[0][4],\ntitle:img[7][0]\n});\n\ntext+=`<center><img alt=\"${img[0][4]}\" src=\"${img[0][0][0]}\"></center>`;\n}\n\n//console.log(text,\"\\n\\n\\n-------- \\n\\n\",thoughts)\n\n\n\n\n\n\nlet converter = new showdown.Converter();\nconverter.setFlavor('github');\nlet html = modifyTimestamps(converter.makeHtml(text));\n\n\nlet thoughtsHtml=(thoughts != null) ? `<button onclick=\"(this.nextElementSibling.style.height=='auto') ? (this.children[0].style.transform='rotate(-90deg)',this.nextElementSibling.style.height='0') : (this.children[0].style.transform='rotate(90deg)',this.nextElementSibling.style.height='auto');\" class=\"think\" >Show Thinking \n<svg xmlns=\"http://www.w3.org/2000/svg\" style=\"transform:rotate(-90deg);margin-left:10px\" width=\"16\" height=\"16\" fill=\"${isD ? \"#ccc\" : \"#444\"}\" viewBox=\"0 0 16 16\">\n<path fill-rule=\"evenodd\" d=\"M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708\"/>\n</svg></button>\n<div class=\"geminiThoughts\">\n<br>\n${converter.makeHtml(thoughts)}\n\n\n</div><br>` : \"\";\n\ndocument.getElementById(\"GeminiResponse\").innerHTML=`<a href=\"https://gemini.google.com/chat/${chat[0].replace(\"c_\",\"\")}\" >Go to the chat</a><br><br>\n\n${thoughtsHtml}\n\n\n\n<div class=\"geminiAnswer\">\n${html}\n</div>\n`;\n\n\n}\n\n\n\n\n\n/*Main Gemini Function*/\nasync function geminiInfo(){\nif(document.getElementById(\"GeminiResponse\") == null){\nvar GeminiRes=document.createElement(\"div\");\nGeminiRes.setAttribute(\"style\",`min-height:80px;max-height:400px;display:block;height:auto;overflow:scroll;font-weight:400;width:calc(92% - 20px);font-size:14px;padding:10px;position:relative;margin:auto;background:${d};border-radius:15px;margin-bottom:8px;`);\nGeminiRes.setAttribute(\"id\",\"GeminiResponse\");\n\n\ninsertAfter(document.getElementById('ytproMainDivE'),GeminiRes);\n\n}else{\nvar GeminiRes=document.getElementById(\"GeminiResponse\");\n}\n\n\ndocument.getElementById(\"GeminiResponse\").innerHTML=`\n<div class=\"geminiLoader\"></div>`;\n\nvar cookies=Android.getAllCookies(window.location.href);\n\nif(cookies.indexOf(\"__Secure-1PSID=\") < 0){\nGeminiRes.innerHTML=`\n<center style=\"margin-top:15px\">\n<span >Sign in to use Gemini<span>\n<br><br>\n<a href=\"https://accounts.google.com/ServiceLogin?service=youtube\" >\n<button style=\"background:${c};color:${isD ? \"#000\" : \"#fff\"};font-weight:500;height:35px;width:90px;border-radius:25px;text-align:center;line-height:35px;\">Sign In</button>\n</a>\n<br><br>\n\n</center>`;\n\nreturn;\n\n}\n\n\n/*checks if the user is logged in*/\ncookies=cookies.split(\";\");\n\nvar secured=\"\";\n\ncookies.forEach((x)=>{\nif(x.indexOf(\"__Secure-1PSID=\") > -1 || x.indexOf(\"__Secure-1PSIDTS=\") > -1)\nsecured+=x+\";\";\n})\n\n\n\nvar endpoint=\"https://gemini.google.com/_/BardChatUi/data/assistant.lamda.BardFrontendService/StreamGenerate\";\nvar headers=JSON.stringify({\n\"accept\": \"*/*\",\n\"accept-language\": \"en\",\n\"content-type\":\"application/x-www-form-urlencoded;charset=UTF-8\",\n\"x-goog-ext-525001261-jspb\": GeminiModels[localStorage.getItem('geminiModel')], \n\"x-same-domain\": \"1\",\n\"cookie\": secured,\n\"Referer\": \"https://gemini.google.com/\",\n\"Referrer-Policy\": \"origin\"\n});\n\n\nif(GeminiAT == \"\"){\nAndroid.getSNlM0e(secured);\nGeminiAT=await callbackSNlM0e();\n\nvar sd = document.createElement('script');\nsd.src=\"//youtube.com/ytpro_cdn/npm/showdown/dist/showdown.min.js\";\ndocument.body.appendChild(sd);\n\n}\n\n\n\n\nvar prompt=localStorage.getItem('prompt').replaceAll(\"{url}\",window.location.href).replaceAll(\"{videoId}\",new URL(window.location.href).searchParams.get(\"v\")).replaceAll(\"{title}\",document.getElementsByClassName('slim-video-metadata-header')[0].textContent.replaceAll(\"|\",\"\").replaceAll(\"\\\\\",\"\").replaceAll(\"?\",\"\").replaceAll(\"*\",\"\").replaceAll(\"<\",\"\").replaceAll(\"/\",\"\").replaceAll(\":\",\"\").replaceAll('\"',\"\").replaceAll(\">\",\"\")); \n//`send me details with timestamps and images related to this youtube com video ${}`;\n// , including all the aspects and scopes with timestamp , add facts in the analysis as well ,Here's the youtube \n\n\n\nvar chat = null;\n\nif(localStorage.getItem(\"saveCInfo\") == \"true\" && localStorage.getItem(\"geminiChatInfo\") != null){\nchat = localStorage.getItem(\"geminiChatInfo\").split(\",\");\n}\n\nconst formData = new URLSearchParams();\nformData.append(\"f.req\", JSON.stringify([\nnull,\nJSON.stringify([[prompt],null,chat])\n]));\n\nformData.append(\"at\", GeminiAT);\n\n\n\nAndroid.GeminiClient(endpoint,headers,formData.toString());\nvar response=await callbackGeminiClient();\n\nhandleGeminiResponse(response);\n\n}\n\n\nvar volSvg=`<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"16\" viewBox=\"0 0 24 24\" width=\"16\" focusable=\"false\" aria-hidden=\"true\" style=\"pointer-events: none;filter:drop-shadow(0px 0px 1px black);position:absolute;top:10%\"><path fill=\"#fff\" d=\"M11.485 2.143 3.913 6.687A6 6 0 001 11.832v.338a6 6 0 002.913 5.144l7.572 4.543A1 1 0 0013 21V3a1.001 1.001 0 00-1.515-.857Zm6.88 2.079a1 1 0 00-.001 1.414 9 9 0 010 12.728 1 1 0 001.414 1.414 11 11 0 000-15.556 1 1 0 00-1.413 0Zm-2.83 2.828a1 1 0 000 1.415 5 5 0 010 7.07 1 1 0 001.415 1.415 6.999 6.999 0 000-9.9 1 1 0 00-1.415 0Z\"></path></svg>`;\nvar brtSvg=`<svg xmlns=\"http://www.w3.org/2000/svg\" enable-background=\"new 0 0 24 24\" height=\"16\" viewBox=\"0 0 24 24\" width=\"16\" style=\"filter:drop-shadow(0px 0px 1px black);position:absolute;top:10%;\"><rect fill=\"none\" height=\"24\" width=\"24\"/><path fill=\"#fff\" d=\"M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0 c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2 c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1 C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06 c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41 l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41 c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36 c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z\"/></svg>`;\n\n\n/*THE 0NE AND 0NLY FUNCTION*/\nasync function pkc(){\n\nif(window.location.href.indexOf(\"youtube.com/watch\") > -1){\n\n\ntry{\nvar elm=document.getElementsByTagName(\"dislike-button-view-model\")[0].children[0]; \nelm.children[0].children[0].style.width=\"auto\";\nelm.children[0].children[0].style.paddingRight=\"15px\";\n\nif(!document.getElementById(\"diskl\")){\n  var diskl=document.createElement(\"span\");\n  diskl.setAttribute(\"id\",\"diskl\");\n  diskl.innerHTML=dislikes;\n  diskl.style.marginLeft=\"5px\";\n  \ninsertAfter(elm.getElementsByClassName(\"yt-spec-button-shape-next__icon\")[0],diskl);\n\n}else{\ndocument.getElementById(\"diskl\").innerHTML=dislikes;\n}\n\n}catch(e){}\n\n\n//Volume and brightness slider \ntry{\n\nif(localStorage.getItem(\"gesC\") == \"true\"){\n  \n\nvar v= document.getElementById(\"player-container-id\");\nvar rect=v.getBoundingClientRect();\n\nvar elStyle={\nheight:\"70%\",\nwidth:rect.width*0.14+\"px\",\ndisplay:\"flex\",\n\"flex-direction\":\"column\",\n\"align-items\":\"center\",\n\"justify-content\":\"center\",\nposition:\"absolute\",\ntop:\"16%\", \nright:\"0px\",\nopacity:\"0\",\n//background:\"#a57a\"\n};  \n  \n  \n\nvar el=document.createElement(\"div\");\nvar elB=document.createElement(\"div\");\nelB.setAttribute(\"id\",\"brtS\");\nel.setAttribute(\"id\",\"volS\");\n\nObject.assign(el.style,elStyle);\nObject.assign(elB.style,elStyle);\nelB.style.left=\"0\";\n\nel.innerHTML=`${volSvg}<div style=\"position:absolute;bottom:5%;left:calc(50% - 1.5px);background:rgba(255,255,255,0.5); height:70%;width:3px;border-radius:3px;color:red;box-shadow:0px 0px 2px black;pointer-events:none\" ><div style=\"background:white;width:100%;height:${vol * 100}%;border-radius:3px;position:absolute;bottom:0;box-shadow:0px 0px 2px black;\" id=\"volIS\"></div></div>`;\nelB.innerHTML=`${brtSvg}<div style=\"position:absolute;bottom:5%;left:calc(50% - 1.5px);background:rgba(255,255,255,0.5); height:70%;width:3px;border-radius:3px;color:red;box-shadow:0px 0px 2px black;pointer-events:none\" ><div style=\"background:white;width:100%;height:${brt * 100}%;border-radius:3px;position:absolute;bottom:0;box-shadow:0px 0px 1px black;\" id=\"brtIS\"></div></div>`;\n\n\nif(!document.getElementById(\"brtS\")){\ndocument.getElementById(\"player-container-id\").appendChild(elB);\n\nelB.addEventListener(\"touchmove\",(e)=>{\ne.preventDefault();\nelB.style.opacity=\"1\";\n\nvar diff= touchstartY - e.touches[0].pageY;\n\nif(diff > 0){\nbrt +=sens;\n}else{\nbrt -=sens;\n}\n\nif(brt > 1) brt=1;\nif(brt < 0) brt =0;\n\ntouchstartY=e.touches[0].pageY;\n\nAndroid.setBrightness(brt);\ndocument.getElementById(\"brtIS\").style.height=brt*100+\"%\";\n\n},{ passive: false })\n\n\n//hide the element after touch endas\nelB.addEventListener(\"touchend\",(e)=>{\nelB.style.opacity=\"0\";\n},{ passive: false });\n\n}\n\n\n\n\n\nif(!document.getElementById(\"volS\")){\ndocument.getElementById(\"player-container-id\").appendChild(el);\n\nel.addEventListener(\"touchmove\",(e)=>{\ne.preventDefault();\nel.style.opacity=\"1\";\n\nvar diff= touchstartY - e.touches[0].pageY;\n\nif(diff > 0){\nvol +=sens;\n}else{\nvol -=sens;\n}\n\nif(vol > 1) vol=1;\nif(vol < 0) vol =0;\n\ntouchstartY=e.touches[0].pageY;\n\nAndroid.setVolume(vol);\ndocument.getElementById(\"volIS\").style.height=vol * 100 +\"%\";\n\n},{ passive: false })\n\n\n\n//hide the element after touch endas , yes endas\nel.addEventListener(\"touchend\",(e)=>{\nel.style.opacity=\"0\";\n},{ passive: false });\n\n}\n\n}\n\n\n  \n}catch(e){\n  console.log(e)\n}\n\n\n\n\n\n\n\n\n\n\n\n/*Check If Element Already Exists*/\nif(document.getElementById(\"ytproMainDivE\") == null){\n\n\n\nvar ytproMainDivA=document.createElement(\"div\");\nytproMainDivA.setAttribute(\"id\",\"ytproMainDivE\");\nytproMainDivA.setAttribute(\"style\",`\nheight:50px;width:100%;display:block;overflow:auto;\n`);\n\ninsertAfter(document.getElementsByClassName('slim-video-action-bar-actions')[0],ytproMainDivA);\n\nvar ytproMainDiv=document.createElement(\"div\");\nytproMainDiv.setAttribute(\"style\",`\nheight:50px;width:100%;display:flex;overflow:auto;\nalign-items:center;justify-content:center;padding-left:20px;padding-right:10px;\n`);\nytproMainDivA.appendChild(ytproMainDiv);\n\n/*Gemini Button*/\nvar ytproGemini=document.createElement(\"div\");\nsty(ytproGemini);\nytproGemini.style.width=\"115px\";\nytproGemini.style.height=\"calc(65% - 4.5px)\";\nytproGemini.style.position=\"relative\";\nytproGemini.style.background=`linear-gradient(${isD ? \"#272727,#272727\" : \"#f2f2f2,#f2f2f2\"}) padding-box , linear-gradient(16deg ,#4285f4 ,#9b72cb ,#d96570) border-box`;\nytproGemini.style.border=\"2px solid transparent\";\nytproGemini.innerHTML=`\n<svg style=\"height:16px;width:16px\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"><path d=\"M16 8.016A8.522 8.522 0 008.016 16h-.032A8.521 8.521 0 000 8.016v-.032A8.521 8.521 0 007.984 0h.032A8.522 8.522 0 0016 7.984v.032z\" fill=\"url(#prefix__paint0_radial_980_20147)\"/><defs><radialGradient id=\"prefix__paint0_radial_980_20147\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"matrix(16.1326 5.4553 -43.70045 129.2322 1.588 6.503)\"><stop offset=\".067\" stop-color=\"#9168C0\"/><stop offset=\".343\" stop-color=\"#5684D1\"/><stop offset=\".672\" stop-color=\"#1BA1E3\"/></radialGradient></defs></svg>\n<span style=\"margin-left:4px\">Gemini</span>\n<style type=\"text/css\">\n#GeminiResponse img{\nmax-width:90%;\nheight:auto;\nborder-radius:10px;\nmargin-top:5px;\n}\n#GeminiResponse a{\ncolor:rgb(62,166,255);\n}\n.geminiLoader,.geminiLoader:before,.geminiLoader:after{\ncontent:'';\nheight:10px;\nwidth:70%;\nposition:absolute;\ntop:15px;\nborder-radius:5px;\nleft:10px;\nbackground:${d};\nanimation: geminiLoad 1s linear infinite alternate;\n}\n.geminiLoader:before{\ntop:27px;\nleft:0;\n}\n.geminiLoader:after{\ntop:54px;\nleft:0;\nwidth:90%;\n}\n@keyframes geminiLoad{\n0% {\nopacity:1;\n}\n100% {\nopacity:.4;\n}\n}\n.geminiThoughts{\nheight:0;\nwidth:calc(100% - 30px);\ntransition:5s;\nfloat:left;\noverflow:hidden;\npadding-left:5px;\nfont-style:italic;\nborder-left:3px solid ${d};\ndisplay:block;\nfloat:none;\nclear:both;\n}\n.geminiAnswer{\nheight:auto;\nwidth:100%;\ndisplay:block;\nfloat:none;\nclear:both;\n}\n#GeminiResponse .think{\nbackground:transparent;\nfont-size:1.45rem;\nwidth:calc(100% - 20px);\nheight:20px;\ncolor:${isD ? \"#ccc\" : \"#444\"};\nmargin-top:3px;\ntext-align:left;\ndisplay:flex;\npadding-left:5px;\nborder-left:3px solid ${d};\n}\n</style>\n`;\n\n\n\n\n\n\nytproMainDiv.appendChild(ytproGemini);\n\n\nytproGemini.addEventListener(\"click\",\nasync function(){\n\n\nif(parseFloat(Android.getInfo()) < parseFloat(YTProVer)){\nupdateModel();\n\nreturn;\n}\n\ngeminiInfo();\n\n\n});\n\n\n\n\n\n\n\n\n\n\n\n/*Heart Button*/\nvar ytproFavElem=document.createElement(\"div\");\nsty(ytproFavElem);\nif(!isHeart()){\nytproFavElem.innerHTML=`<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\"><path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path fill=\"${c}\" d=\"M19.66 3.99c-2.64-1.8-5.9-.96-7.66 1.1-1.76-2.06-5.02-2.91-7.66-1.1-1.4.96-2.28 2.58-2.34 4.29-.14 3.88 3.3 6.99 8.55 11.76l.1.09c.76.69 1.93.69 2.69-.01l.11-.1c5.25-4.76 8.68-7.87 8.55-11.75-.06-1.7-.94-3.32-2.34-4.28zM12.1 18.55l-.1.1-.1-.1C7.14 14.24 4 11.39 4 8.5 4 6.5 5.5 5 7.5 5c1.54 0 3.04.99 3.57 2.36h1.87C13.46 5.99 14.96 5 16.5 5c2 0 3.5 1.5 3.5 3.5 0 2.89-3.14 5.74-7.9 10.05z\"/></svg><span style=\"margin-left:8px\">Heart<span>`;\n}else{\nytproFavElem.innerHTML=`<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\"><path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path fill=\"${c}\" d=\"M13.35 20.13c-.76.69-1.93.69-2.69-.01l-.11-.1C5.3 15.27 1.87 12.16 2 8.28c.06-1.7.93-3.33 2.34-4.29 2.64-1.8 5.9-.96 7.66 1.1 1.76-2.06 5.02-2.91 7.66-1.1 1.41.96 2.28 2.59 2.34 4.29.14 3.88-3.3 6.99-8.55 11.76l-.1.09z\"/></svg><span style=\"margin-left:8px\">Heart<span>`;\n}\nytproMainDiv.appendChild(ytproFavElem);\nytproFavElem.addEventListener(\"click\",()=>{ytProHeart(ytproFavElem);});\n\n\n\n/*Download Button*/\nvar ytproDownVidElem=document.createElement(\"div\");\nsty(ytproDownVidElem);\nytproDownVidElem.style.width=\"140px\";\nytproDownVidElem.innerHTML=`${downBtn.replace('width=\"18\"','width=\"24\"').replace('height=\"18\"','height=\"24\"')}<span style=\"margin-left:2px\">Download<span>`;\nytproMainDiv.appendChild(ytproDownVidElem);\nytproDownVidElem.addEventListener(\"click\",\nfunction(){\nwindow.location.hash=\"download\";\n});\n\n/*PIP Button*/\nvar ytproPIPVidElem=document.createElement(\"div\");\nsty(ytproPIPVidElem);\nytproPIPVidElem.style.width=\"140px\";\nytproPIPVidElem.innerHTML=`<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"22\" viewBox=\"0 0 24 24\" width=\"22\"><path fill=\"${c}\" d=\"M18 7h-6c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1h6c.55 0 1-.45 1-1V8c0-.55-.45-1-1-1zm3-4H3c-1.1 0-2 .9-2 2v14c0 1.1.9 1.98 2 1.98h18c1.1 0 2-.88 2-1.98V5c0-1.1-.9-2-2-2zm-1 16.01H4c-.55 0-1-.45-1-1V5.98c0-.55.45-1 1-1h16c.55 0 1 .45 1 1v12.03c0 .55-.45 1-1 1z\"/></svg><span style=\"margin-left:8px\">PIP Mode<span>`;\nytproMainDiv.appendChild(ytproPIPVidElem);\nytproPIPVidElem.addEventListener(\"click\",\nfunction(){\nPIPlayer(true);\n});\n\n\n\n\n\n}\n\n\n\n\n\n}else if(window.location.href.indexOf(\"youtube.com/shorts\") > -1){\n\n\nlet b = document.getElementById(\"brtS\");\nlet v = document.getElementById(\"volS\");\nif (b) b.remove();\nif (v) v.remove();\n\n\nif(document.getElementById(\"ytproMainSDivE\") == null){\nvar ys=document.createElement(\"div\");\nys.setAttribute(\"id\",\"ytproMainSDivE\");\nys.setAttribute(\"style\",`width:50px;height:auto;position:relative;display:block;`);\n\n\n/*Download Button*/\nysDown=document.createElement(\"div\");\nysDown.setAttribute(\"style\",`\nheight:48px;width:48px;display:flex;align-items:center;justify-content:center;\nfilter:drop-shadow(0 0 1px #0009);\nborder-radius:50%;\n`);\nysDown.innerHTML=downBtn.replaceAll(`${c}`,`#fff`).replace(`width=\"24\"`,`width=\"30\"`).replace(`height=\"24\"`,`height=\"30\"`);\n\n\nysDown.addEventListener(\"click\",\nfunction(){\nwindow.location.hash=\"download\";\n});\n\n\n/*Heart Button*/\nysHeart=document.createElement(\"div\");\nysHeart.setAttribute(\"style\",`\nheight:48px;width:48px;\ndisplay:flex;align-items:center;justify-content:center;\nfilter:drop-shadow(0 0 1px #0009);\nborder-radius:50%;margin-bottom:0px;\n`);\n\n\nif(!isHeart()){\nysHeart.innerHTML=`<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\"><path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path fill=\"#fff\" d=\"M19.66 3.99c-2.64-1.8-5.9-.96-7.66 1.1-1.76-2.06-5.02-2.91-7.66-1.1-1.4.96-2.28 2.58-2.34 4.29-.14 3.88 3.3 6.99 8.55 11.76l.1.09c.76.69 1.93.69 2.69-.01l.11-.1c5.25-4.76 8.68-7.87 8.55-11.75-.06-1.7-.94-3.32-2.34-4.28zM12.1 18.55l-.1.1-.1-.1C7.14 14.24 4 11.39 4 8.5 4 6.5 5.5 5 7.5 5c1.54 0 3.04.99 3.57 2.36h1.87C13.46 5.99 14.96 5 16.5 5c2 0 3.5 1.5 3.5 3.5 0 2.89-3.14 5.74-7.9 10.05z\"/></svg>`;\n}else{\nysHeart.innerHTML=`<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\"><path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path fill=\"#fff\" d=\"M13.35 20.13c-.76.69-1.93.69-2.69-.01l-.11-.1C5.3 15.27 1.87 12.16 2 8.28c.06-1.7.93-3.33 2.34-4.29 2.64-1.8 5.9-.96 7.66 1.1 1.76-2.06 5.02-2.91 7.66-1.1 1.41.96 2.28 2.59 2.34 4.29.14 3.88-3.3 6.99-8.55 11.76l-.1.09z\"/></svg>`;\n}\n\n\nysHeart.addEventListener(\"click\",\nfunction(){\nytProHeart(ysHeart);\n});\n\n\n\n\n\ntry{\n  \n  if(document.getElementsByClassName(\"reel-player-overlay-actions\")[0].children[0]){\n  \ndocument.getElementsByClassName(\"reel-player-overlay-actions\")[0].insertBefore(ys,document.getElementsByClassName(\"reel-player-overlay-actions\")[0].children[1]);\n\nys.appendChild(ysDown);\nys.appendChild(ysHeart);\n}\n}catch{}\n\n}\n\ntry{document.querySelectorAll('dislike-button-view-model')[0].children[0].children[0].children[0].children[1].children[0].innerHTML=dislikes;}catch{}\n\n\n\n\n\n/*Watch The old and New URL*\nif(ytoldV != window.location.pathname){\nfDislikes();\nytoldV=window.location.pathname;\n}*/\n\n\n}\n\n}\n\n\nsetInterval(pkc,0);\n\n\n\n\n\n/*SHOW HEARTS*/\nasync function showHearts(){\nvar ytproH=document.createElement(\"div\");\nvar ytproHh=document.createElement(\"div\");\nytproHh.setAttribute(\"id\",\"heartytprodiv\");\nytproH.setAttribute(\"id\",\"outerheartsdiv\");\nytproH.setAttribute(\"style\",`\nheight:100%;width:100%;position:fixed;top:0;left:0;\ndisplay:flex;justify-content:center;\nbackground:rgba(0,0,0,0.4);\nz-index:99;\n`);\n\nytproHh.setAttribute(\"style\",`\nheight:50%;width:85%;overflow:auto;background:${isD ? \"#212121\" : \"#f1f1f1\"};\nposition:absolute;bottom:20px;\nz-index:9;padding:20px;text-align:center;border-radius:25px;text-align:center;\n`);\nytproHh.innerHTML=`<style>#heartytprodiv a{text-decoration:none;} #heartytprodiv li{list-style:none; display:flex;align-items:center;border-radius:15px;padding:0px;background:${d};margin:5px;}</style>`;\nytproHh.innerHTML+=\"Liked Videos<ul id='listurl'>\";\n\n\nytproHh.innerHTML+=\"<style>.thum{height:70px;border-radius:5px;}.thum img{float:left;height:70px;width:125px;border-radius:15px 0 0 15px;flex-shrink: 0;}</style>\";\n\ndocument.body.appendChild(ytproH);\nytproH.appendChild(ytproHh);\n\nytproH.addEventListener(\"click\",\nfunction(ev){\nif(!event.composedPath().includes(ytproHh)){\nhistory.back();\n}\n});\n\n\n\nif(localStorage.getItem(\"hearts\") == null){\nytproHh.innerHTML+=\"No Videos Found\";\n}else{\n\nvar v=JSON.parse(localStorage.getItem(\"hearts\"));\n\nif(Object.keys(v).length === 0){\nreturn ytproHh.innerHTML+=\"No Videos Found\";\n}\n\nfor(var n=Object.keys(v).length - 1; n >  -1 ; n--){\nvar x=Object.keys(v)[n];\nytproHh.innerHTML+=`<li class=\"thum\" >\n<img data-action=\"navigateInternalYtMweb\" data-id=\"${x}\" src=\"${v[x].thumb}\" ><br>\n<div style=\"width:calc(100% - 170px);margin-left:5px;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical; -webkit-line-clamp:3;overflow:hidden;text-overflow:ellipsis;\" data-action=\"navigateInternalYtMweb\" data-id=\"${x}\" >${v[x].title}</div>\n<div style=\"width:calc(100% - (100% - 35px))\">\n<svg data-action=\"remHeart\" data-id=\"${x}\" xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" style=\"margin-left:0px;\" fill=\"#f24\" class=\"bi bi-x-circle-fill\" viewBox=\"0 0 16 16\">\n<path d=\"M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM5.354 4.646a.5.5 0 1 0-.708.708L7.293 8l-2.647 2.646a.5.5 0 0 0 .708.708L8 8.707l2.646 2.647a.5.5 0 0 0 .708-.708L8.707 8l2.647-2.646a.5.5 0 0 0-.708-.708L8 7.293 5.354 4.646z\"/>\n</svg>\n</span>\n</div>\n</li>`;\nawait new Promise(r => setTimeout(r, 1));\n}\n\n\nytproHh.addEventListener(\"click\",(e)=>{\n  var el=e.target.closest(\"[data-action]\");\n  \n  if(!el) return;\n  if(el.dataset.action == \"navigateInternalYtMweb\"){\n    navigateInternalYtMweb(el.dataset.id);\n  }else if(el.dataset.action == \"remHeart\"){\n    remHeart(el,el.dataset.id);\n  }\n  \n});\n\n}\n\n\n\n\n\n}\n\n\nfunction navigateInternalYtMweb(videoId) {\n    window.location.hash=\"\";\n    const link = document.createElement('a');\n    link.href = `/watch?v=${videoId}`;\n    link.style.display = 'none';\n    document.body.appendChild(link);\n    link.click();\n    link.remove();\n}\n\n\n/*Dil hata diya vro*/\nfunction remHeart(y,x){\nif(localStorage.getItem(\"hearts\")?.indexOf(x) > -1){\ny.parentElement.parentElement.remove();\nvar j=JSON.parse(localStorage.getItem(\"hearts\") || \"{}\");\ndelete j[x];\nlocalStorage.setItem(\"hearts\",JSON.stringify(j));\n}\n\n}\n\nfunction ytProHeart(x){\n\n\nvar vid=(new URLSearchParams(window.location.search)).get('v') || window.location.pathname.replace(\"/shorts/\",\"\");\n\nvar video=document.getElementsByClassName('video-stream')[0];\nvar canvas = document.createElement('canvas');\ncanvas.style.width = \"1600px\"; \ncanvas.style.height = \"900px\";\ncanvas.style.background=\"black\";\nvar context = canvas.getContext('2d');\n\n(window.location.pathname.indexOf(\"shorts\") > -1) ? context.drawImage(video,105, 0, 90,160) :  context.drawImage(video,0, 0, 320,180);\n\nvar dataURI = canvas.toDataURL('image/jpeg');\n\n\nif(window.location.pathname.indexOf(\"shorts\") > -1){\n\nvar vDetails={\nthumb:dataURI,\ntitle:document.getElementsByClassName('ytShortsVideoTitleViewModelShortsVideoTitle')[0].textContent.replaceAll(\"|\",\"\").replaceAll(\"\\\\\",\"\").replaceAll(\"?\",\"\").replaceAll(\"*\",\"\").replaceAll(\"<\",\"\").replaceAll(\"/\",\"\").replaceAll(\":\",\"\").replaceAll('\"',\"\").replaceAll(\">\",\"\")\n};\n\n}else{\n\nvar vDetails={\nthumb:dataURI,\ntitle:document.getElementsByClassName('slim-video-metadata-header')[0].textContent.replaceAll(\"|\",\"\").replaceAll(\"\\\\\",\"\").replaceAll(\"?\",\"\").replaceAll(\"*\",\"\").replaceAll(\"<\",\"\").replaceAll(\"/\",\"\").replaceAll(\":\",\"\").replaceAll('\"',\"\").replaceAll(\">\",\"\")\n}\n\n/*\nvar vDetails={\nthumb:[...ytplayer.config.args.raw_player_response?.videoDetails?.thumbnail?.thumbnails].pop().url,\ntitle:ytplayer.config.args.raw_player_response?.videoDetails?.title.replaceAll(\"|\",\"\").replaceAll(\"\\\\\",\"\").replaceAll(\"?\",\"\").replaceAll(\"*\",\"\").replaceAll(\"<\",\"\").replaceAll(\"/\",\"\").replaceAll(\":\",\"\").replaceAll('\"',\"\").replaceAll(\">\",\"\")\n};*/\n\n}\n\n\n\nvar g=\"16\";\nvar h=`<span style=\"margin-left:8px\">Heart<span>`;\n(window.location.href.indexOf('youtube.com/shorts') > -1) ? h=``:h=`<span style=\"margin-left:8px\">Heart<span>`;\n(window.location.href.indexOf('youtube.com/shorts') > -1) ? g=\"24\" : g=\"24\" ;\n\n\n\nif(localStorage.getItem(\"hearts\")?.indexOf(vid) > -1){\nvar j=JSON.parse(localStorage.getItem(\"hearts\") || \"{}\");\ndelete j[vid];\nlocalStorage.setItem(\"hearts\",JSON.stringify(j));\nx.innerHTML=`<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${g}\" height=\"${g}\" fill=\"${(window.location.href.indexOf('youtube.com/shorts') > -1) ? \"#fff\" : c }\" viewBox=\"0 0 24 24\">\n<path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path fill=\"${(window.location.href.indexOf('youtube.com/shorts') > -1) ? \"#fff\" : c }\" d=\"M19.66 3.99c-2.64-1.8-5.9-.96-7.66 1.1-1.76-2.06-5.02-2.91-7.66-1.1-1.4.96-2.28 2.58-2.34 4.29-.14 3.88 3.3 6.99 8.55 11.76l.1.09c.76.69 1.93.69 2.69-.01l.11-.1c5.25-4.76 8.68-7.87 8.55-11.75-.06-1.7-.94-3.32-2.34-4.28zM12.1 18.55l-.1.1-.1-.1C7.14 14.24 4 11.39 4 8.5 4 6.5 5.5 5 7.5 5c1.54 0 3.04.99 3.57 2.36h1.87C13.46 5.99 14.96 5 16.5 5c2 0 3.5 1.5 3.5 3.5 0 2.89-3.14 5.74-7.9 10.05z\"/></svg>${h}`;\n}else{\nvar j=JSON.parse(localStorage.getItem(\"hearts\") || \"{}\");\nj[vid]=vDetails;\nlocalStorage.setItem(\"hearts\",JSON.stringify(j));\nx.innerHTML=`<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${g}\" height=\"${g}\" viewBox=\"0 0 24 24\" ><path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path fill=\"${(window.location.href.indexOf('youtube.com/shorts') > -1) ? \"#fff\" : c }\" d=\"M13.35 20.13c-.76.69-1.93.69-2.69-.01l-.11-.1C5.3 15.27 1.87 12.16 2 8.28c.06-1.7.93-3.33 2.34-4.29 2.64-1.8 5.9-.96 7.66 1.1 1.76-2.06 5.02-2.91 7.66-1.1 1.41.96 2.28 2.59 2.34 4.29.14 3.88-3.3 6.99-8.55 11.76l-.1.09z\"/></svg>${h}`;\n}\n\n}\n\n\n\n/*Dil diya hai ya nhi diya!!*/\nfunction isHeart(){\n\nif((localStorage.getItem(\"hearts\")?.indexOf((new URLSearchParams(window.location.search)).get('v'))  > -1)  ||  (localStorage.getItem(\"hearts\")?.indexOf(window.location.pathname.replace(\"/shorts/\",\"\"))  > -1)){\nreturn true;\n}else{\nreturn false;\n\n}\n}\n\n\n\n\n\n\n///PIP MODE CONFIG\nfunction removePIP(){\n\nisPIP=false;\npauseAllowed = true;\ndocument.exitFullscreen();\n \ndocument.getElementsByClassName('video-stream')[0].pause();\nsetTimeout(()=>{\ndocument.getElementsByClassName('video-stream')[0].play();\n},5);\n\n\n}\n\n\n\n\nfunction PIPlayer(pip = false){\n  \nvar v=document.getElementsByClassName('video-stream')[0];\n\n \nif(pip){\n\nif(v.getBoundingClientRect().height > v.getBoundingClientRect().width){\nAndroid.pipvid(\"portrait\");\n}\nelse{\nAndroid.pipvid(\"landscape\");\n}\n\nreturn;\n}\n\n\nv.requestFullscreen();\nv.play();\npauseAllowed = false;\nisPIP=true;\n\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// well this is for bypassing the pause function of Youtube when video is in\n// PIP mode , its a workaround for now , until i find a proper method\n// to allow the pip mode for the video element , like chromium browsers\n\nHTMLMediaElement.prototype.pause = function(){\n  \nif (pauseAllowed || PIPause) {\nreturn originalPause.apply(this, arguments);\n}\n\nif (this.paused) {\nthis.play().catch(() => {});\n}\n};\n\n\n\n\n\n\n\n\n\nconst originalExitFullscreen = document.exitFullscreen;\nconst originalRequestFullscreen = Element.prototype.requestFullscreen;\n\n//exit full screen\ndocument.exitFullscreen = function (...args) {\n if(!isPIP){ return originalExitFullscreen.apply(this, args);}\n};\n\n\n//request full screen\nElement.prototype.requestFullscreen = function (...args) {\nvar video = document.getElementsByClassName('video-stream')[0];\n\nif(video.getBoundingClientRect().height > video.getBoundingClientRect().width){\nAndroid.fullScreen(true);\n}\nelse{\nAndroid.fullScreen(false);\n}\n\nreturn originalRequestFullscreen.apply(this, args);\n};\n\n\n\n\n\n\n/*Check The Hash Change*/\nwindow.onhashchange=()=>{\ntry{document.getElementById(\"outerdownytprodiv\").remove();}catch{}\ntry{document.getElementById(\"outerheartsdiv\").remove();}catch{}\ntry{document.getElementById(\"settingsprodiv\").remove();}catch{}\n//try{document.querySelector(\"#ytproDownloadIndicator\").remove();}catch{}\n//try{document.querySelector(\"#ytProDownloaderDiv\").remove();}catch{}\nif(window.location.hash == \"#download\"){\nytproDownVid();\n}else if(window.location.hash == \"#settings\"){\nytproSettings();\n}\nelse if(window.location.hash == \"#hearts\"){\nshowHearts();\n}\n\n\n}\n\n\n\n// AdBlocker which removes the ad contents from the fetch requests itself !!\n(() => {\nconst _origFetch = window.fetch;\nwindow.fetch = async function(input, init) {\ntry {\nconst url = (typeof input === 'string') ? input : input.url;\n\n\n\n//block ad urls\nif(url.includes(\"googleads.g.doubleclick.net\") || url.includes(\"youtube.com/youtubei/v1/player/ad_break\") || url.includes(\"youtube.com/pagead/adview\") || url.includes(\"youtube.com/api/stats/ads\")){\n\n//console.log(\"Blocked\",url);\nreturn \"\";\n}else if(url.includes(\"youtube.com/youtubei/\")){\n\n\nconst response = await _origFetch.apply(this, arguments);\n\n\n\ntry {\n\nconst clone = response.clone();\nlet data = await clone.json();\n\n\n//older version\nif(data?.responseContext?.webResponseContextExtensionData?.webResponseContextPreloadData?.preloadMessageNames?.[0] == \"adSlotRenderer\" || data?.responseContext?.webResponseContextExtensionData?.webResponseContextPreloadData?.preloadMessageNames?.[0] == \"shortsAdsRenderer\"){\ndata={};\n}\n\n\n//remove the ad content\ndelete data?.adSlots;\ndelete data?.playerAds;\ndelete data?.adPlacements;\ndelete data?.adBreakHeartbeatParams;\n\n\n//newer version update: 09 Feb , 2026 23:27 IST\ndelete data?.[0]?.playerResponse?.adSlots;\ndelete data?.[0]?.playerResponse?.playerAds;\ndelete data?.[0]?.playerResponse?.adPlacements;\ndelete data?.[0]?.playerResponse?.adBreakHeartbeatParams;\n\n\nconst newBody = JSON.stringify(data);\n\n// Build new headers (update content-length + content-type)\nconst newHeaders = new Headers(response.headers);\nnewHeaders.set(\"content-length\", String(newBody.length));\nnewHeaders.set(\"content-type\", \"application/json\");\n\n// Return modified Response\nreturn new Response(newBody, {\nstatus: response.status,\nstatusText: response.statusText,\nheaders: newHeaders\n});\n} catch (e) {\n// not JSON, return original\nreturn response;\n}\n\n\n\n}\n\nreturn _origFetch.apply(this, arguments);\n\n} catch (e) { /* ignore logging errors */ }\n\nreturn _origFetch.apply(this, arguments);\n\n\n};\n\n\n})();\n\n\n\n//modified XHR for the same purpose\nconst XHR = window.XMLHttpRequest;\nconst origOpen = XHR.prototype.open;\nconst origSend = XHR.prototype.send;\n\nXHR.prototype.open = function(method, url, ...rest) {\nthis._interceptedMethod = method;\nthis._interceptedUrl = url;\nreturn origOpen.apply(this, [method, url, ...rest]);\n};\n\nXHR.prototype.send = function(body) {\n// Block certain URLs\nif (\nthis._interceptedUrl.includes(\"googleads.g.doubleclick.net\") ||\nthis._interceptedUrl.includes(\"youtube.com/youtubei/v1/player/ad_break\") ||\nthis._interceptedUrl.includes(\"youtube.com/pagead/adview\") ||\nthis._interceptedUrl.includes(\"youtube.com/api/stats/ads\")\n) {\n//console.warn(\"Blocked:\", this._interceptedUrl);\nreturn;\n}\n\nreturn origSend.apply(this, arguments);\n};\n\n\n\n\n\n\n\n\n\n\n\n\n/****** I LOVE YOU <3 *****/\n/*YT ADS BLOCKER*/\nfunction adsBlock(){\n\n\ntry{\ndocument.getElementsByClassName('video-stream')[0].removeAttribute('disablepictureinpicture');\n}catch{}\n\n\n/*Block Ads*/\nvar ads=document.getElementsByTagName(\"ad-slot-renderer\");\nfor(var x in ads){\ntry{ads[x].remove();}catch{}\n}\ntry{\ndocument.getElementsByClassName(\"ad-interrupting\")[0].getElementsByTagName(\"video\")[0].currentTime=document.getElementsByClassName(\"ad-interrupting\")[0].getElementsByTagName(\"video\")[0].duration;\ndocument.getElementsByClassName(\"ytp-ad-skip-button-modern\")[0].click();\n\n}catch{}\n\n\n\n\n/*Block Ads*/\ntry{\ndocument.getElementsByTagName(\"ytm-promoted-sparkles-web-renderer\")[0].remove();\n}catch{}\ntry{\ndocument.getElementsByTagName(\"ytm-companion-ad-renderer\")[0].remove();\n}catch{}\n\n/*Remove Open App*/\ntry{\ndocument.querySelectorAll('a').forEach(a => {\nif (a.href.indexOf(\"intent://\") > -1) {\na.style.display = 'none';\n}\n});\n}catch{}\n/*Remove Promotion Element*/\ntry{document.getElementsByTagName(\"ytm-paid-content-overlay-renderer\")[0].style.display=\"none\";}catch{}\n\n/*Hide Shorts*/\nif(localStorage.getItem(\"shorts\") == \"true\"){\n\n\nfor( x in document.getElementsByClassName(\"big-shorts-singleton\")){\ntry{document.getElementsByClassName(\"big-shorts-singleton\")[x].remove();\n}catch{}\n}\n\nfor( x in document.getElementsByTagName(\"ytm-reel-shelf-renderer\")){\ntry{document.getElementsByTagName(\"ytm-reel-shelf-renderer\")[x].remove();\n}catch{}\n\nfor( x in document.getElementsByTagName(\"ytm-shorts-lockup-view-model\")){\ntry{document.getElementsByTagName(\"ytm-shorts-lockup-view-model\")[x].remove();\n}catch{}\n\n}\n\n}\n}\n\n\n\n\n}\n\n\n\n\n\n//Add Maximize Gesture\nfunction addMaxButton(){\n\n\nvar pElem=document.getElementById('player-container-id');\nvar Ve=document.getElementById('player');\nvar Vv=document.getElementsByClassName('video-stream')[0];\n\n\n\nif(pElem === document.fullscreenElement){\n\n\ntry{\nif(zoomIn){\nVe.style.transform=`scale(${scale})`;\n}else{\nVe.style.transform=\"scale(1)\";  \n}\n}catch{}\n\n\n}else{\ntry{\nVe.style.transform=\"scale(1)\";\n}catch{}\n}\n\n\n}\n\n\nasync function extraSpeed(){\n  var el=document.querySelector(\".ytwVariableSpeedControllerViewModelButtonContainer\");\n if(!el) return;\n \n \nconst slider = document.getElementById(\"slider\");\n\nif(slider.max==10) return;\n\nslider.max = 10;\nslider.ariaValueMax = \"10\";\n\nslider.addEventListener(\"input\", () => {\n  const video = document.querySelector('.video-stream');\n  if (video) video.playbackRate = parseFloat(slider.value);\n});\n\nif(el.children.length >= 6) el.children[0].remove();\n\nif(!document.getElementById(\"10xSpeed\")){\n\nvar elm=document.createElement(\"ytw-variable-speed-controller-speed-button-view-model\");\n\nelm.id=\"10xSpeed\";\nelm.className=\"ytwVariableSpeedControllerSpeedButtonViewModelHost ytwVariableSpeedControllerViewModelPlaybackSpeedButton\";\n\n\nelm.insertAdjacentHTML(\"beforeend\",`<button-view-model class=\"ytSpecButtonViewModelHost\"><button class=\"ytSpecButtonShapeNextHost ytSpecButtonShapeNextTonal ytSpecButtonShapeNextMono ytSpecButtonShapeNextSizeS ytSpecButtonShapeNextEnableBackdropFilterExperiment\" title=\"\" aria-disabled=\"false\" style=\"\"><div class=\"ytSpecButtonShapeNextButtonTextContent ytSpecButtonShapeNextElevatedContent\">10x</div><yt-touch-feedback-shape aria-hidden=\"true\" class=\"ytSpecTouchFeedbackShapeHost ytSpecTouchFeedbackShapeTouchResponse\"><div class=\"ytSpecTouchFeedbackShapeStroke\"></div><div class=\"ytSpecTouchFeedbackShapeFill\"></div></yt-touch-feedback-shape><yt-light-shape aria-hidden=\"true\" class=\"contribYtLightShapeHost contribYtLightShapeStaticRimLight contribYtLightShapeStaticRimLightTonal\" style=\"--yt-light-wash-opacity: 0; --yt-light-wash-x: 0px; --yt-light-wash-y: 0px; --yt-light-wash-size: 0px;\"><div class=\"contribYtLightShapeStaticWashLight contribYtLightShapeStaticWashLightTonal\" style=\"\"></div></yt-light-shape></button></button-view-model>`);\n\nelm.addEventListener(\"click\", () => {\n   // document.querySelector('.video-stream').playbackRate = 10;\n    slider.value=10;\n    slider.dispatchEvent(new Event(\"input\", { bubbles: true }));\n\n});\n\nel.appendChild(elm);\n\n\n}\n\n}\n\n\n//https://youtube.com/watch?v=SInH_fP0deQ\n\n\n\n/*Mutation Observer*/\n//as i have been developing YTPRO for almost 4 years now\n//thus it still contains the code which i used when i was a\n//totally noob in copy pasting , that time i wasn't aware of\n//plenty of things and by which i used `setInterval` instead\n//of mutation observer , i shall be optimizing the code in future\n//releases but rn only a few code blocks will be in the obesrver\n\nconst targetNode = document.body;\nconst config = { childList: true, subtree: true };\n\nconst observer = new MutationObserver(() => {\n\n\n//speed\n\nextraSpeed(); \n  \n//ads Block\nadsBlock();\n\n\n//mE button\naddMaxButton();\n\n//settingsTab\naddSettingsTab();\n\n\ntry{\nvar video = document.getElementsByClassName('video-stream')[0];\nif(video.getBoundingClientRect().height > video.getBoundingClientRect().width){\nAndroid.fullScreen(true);\n}\nelse{\nAndroid.fullScreen(false);\n}}\ncatch{}\n\n\n});\n\n// Start observing changes in the body\nobserver.observe(targetNode, config);\n\n\n\n\n\n/*Update your app bruh*/\nfunction updateModel(){\nvar x=document.createElement(\"div\");\n\nx.setAttribute(\"style\",`height:100%;width:100%;position:fixed;display:grid;align-items:center;top:0;left:0;background:rgba(0,0,0,.6);z-index:99999;`);\n\nx.innerHTML=`\n<div style=\"height:auto;width:70%;padding:20px;background:rgba(0,0,0,.6);border:1px solid #888;box-shadow:0px 0px 5px black;color:white;backdrop-filter:blur(10px);border-radius:15px;margin:auto\">\n<h2> Mandatory Update </h2><br>\nLatest Version ${YTProVer} of YTPRO is available , update the YTPRO to get latest features.\n<br>- This update is mandatory as it fixes a ton of bugs and improves functionality <br>\n- Fixed Downloads, switched to SABR downloader<br>\n- Added muxing to the youtube videos<br>\n- Fixed gestures for brightness and volume control<br>\n- Optimized the UI of both Download and Settings menu<br>\n- Added speed increase upto 10x<br>\n- Fixed bugs and improved functionality<br>\n- for the full list <u data-action=\"url\" >click here</u>\n<br>\n<br>\n<div style=\"display:flex;\">\n<!--<button style=\"border:0;border-radius:10px;height:30px;width:150px;background:;\" data-action=\"cancel\">Cancel</button>-->\n<button style=\"border:0;border-radius:10px;height:30px;width:150px;background:rgba(255,50,50,.7);float:right;\" data-action=\"download\" >Download</button>\n</div>\n\n</div>\n`;\n\nx.addEventListener(\"click\",(e)=>{\n  var el=e.target.closest(\"[data-action]\");\n  if(!el) return;\n  var action=el.dataset.action;\n  \n  if(action == \"url\"){\n    Android.oplink('https://github.com/prateek-chaubey/YTPRO/releases');\n  }else if(action == \"download\"){\n    Android.downvid('YTPRO.zip','https://nightly.link/prateek-chaubey/YTPro/workflows/gradle/main/YTPRO.zip','application/zip');  \n  }else if(action ==\"cancel\"){\n    el.parentElement.parentElement.parentElement.remove();\n  }\n  \n})\n\ndocument.body.appendChild(x);\n}\n\n\n\n\n\nwindow.onload = function(){ \nif(parseFloat(Android.getInfo()) < parseFloat(YTProVer) && (window.location.href == \"https://m.youtube.com/\" || window.location.href == \"https://m.youtube.com\") ){\nupdateModel();\n}\n\n};\n\n\n\n\ndocument.addEventListener('click',(event) => {\n\nlet anchor = event.target.closest('a');\nif (anchor){\n\n\nif(anchor.href.includes(\"www.youtube.com/redirect\")){\n\ntry{\ndocument.getElementsByClassName('video-stream')[0].pause();\n}catch{}\n\nconst url=new URL(anchor.href).searchParams.get(\"q\");\n\nsetTimeout(()=>{Android.oplink(url)},50);\n\nevent.preventDefault();\nevent.stopPropagation(); \n\n}\n\n\n}\n},\ntrue);\n\n\n\n\n}\n"]}