@internetarchive/bookreader 5.0.0-64 → 5.0.0-65

Sign up to get free protection for your applications and to get access to all the features.
@@ -1 +1 @@
1
- {"version":3,"file":"plugins/plugin.url.js","mappings":"krCAAO,ICkCgCA,EDlC1BC,EAAS,WACpB,SAAAA,IAA0B,IAAdC,EAAOC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,G,4FAACG,CAAA,KAAAL,GACtBM,KAAKC,kBAAoBN,EAGzBK,KAAKE,UAAY,CACf,CAAEC,KAAM,OAAQC,SAAU,OAAQC,QAAS,MAC3C,CAAEF,KAAM,OAAQC,SAAU,OAAQC,QAAS,OAC3C,CAAEF,KAAM,SAAUC,SAAU,OAAQE,eAAgB,KACpD,CAAEH,KAAM,IAAKC,SAAU,eACvB,CAAED,KAAM,OAAQC,SAAU,eAC1B,CAAED,KAAM,OAAQC,SAAU,eAC1B,CAAED,KAAM,QAASC,SAAU,gBAG7BJ,KAAKO,SAAW,CAAC,EACjBP,KAAKQ,QAAUR,KAAKC,kBAAkBO,SAAW,OACjDR,KAAKS,mBAAqBT,KAAKC,kBAAkBQ,oBAAuB,IACxET,KAAKU,kBAAoB,KACzBV,KAAKW,gBAAkB,KACvBX,KAAKY,YAAc,IACrB,C,QA0KC,O,EAxKDlB,E,EAAA,EAAAmB,IAAA,sBAAAC,MAMA,SAAoBP,GAAU,IAAAQ,EAAA,KACtBC,EAAe,IAAIC,gBACnBC,EAAa,CAAC,EAEpBC,OAAOC,KAAKb,GAAUc,SAAQ,SAAAR,GAAO,IAAAS,EAAAC,EAKHC,EAEzBC,EANHC,EAASX,EAAKb,UAAUyB,MAAK,SAAAD,GAAM,OAAIA,EAAOvB,OAASU,CAAG,IACpD,QAAVS,EAAII,SAAM,IAAAJ,GAANA,EAAQhB,iBACVoB,EAASX,EAAKb,UAAUyB,MAAK,SAAAC,GAAS,OAAIA,EAAUzB,OAASuB,EAAOpB,cAAc,KAE5D,SAAd,QAANiB,EAAAG,SAAM,IAAAH,OAAA,EAANA,EAAQnB,UACVc,EAAiB,QAAPM,EAACE,SAAM,IAAAF,OAAA,EAANA,EAAQrB,MAAQI,EAASM,GAEpCG,EAAaa,QAAa,QAANJ,EAAAC,SAAM,IAAAD,OAAA,EAANA,EAAQtB,OAAQU,EAAKN,EAASM,GAEtD,IAEA,IAAMiB,EAAgB9B,KAAKE,UACxB6B,QAAO,SAAAC,GAAC,MAAkB,QAAdA,EAAE5B,QAAkB,IAChC6B,KAAI,SAAAP,GAAM,OAAIR,EAAWQ,EAAOvB,MAAQ,GAAH+B,OAAMR,EAAOvB,KAAI,KAAA+B,OAAIhB,EAAWQ,EAAOvB,OAAU,EAAE,IACxFgC,KAAK,KAGFC,EAA2B,GAAHF,OAAMJ,EAAcO,QAAQ,OAAQ,KAAKA,QAAQ,OAAQ,KACjFC,EAAmB,GAAHJ,OAAME,EAAwB,KAAAF,OAAIlB,EAAauB,YACrE,OAAOvB,EAAauB,WAAaD,EAAmB,GAAHJ,OAAME,EACzD,GAEA,CAAAvB,IAAA,sBAAAC,MAQA,SAAoB0B,GAClB,IAAMjC,EAAW,CAAC,EAIZkC,EAAU,IAAIC,IAAIF,EAAW,sBAC7BG,EAAqBxB,OAAOyB,YAAYH,EAAQzB,aAAa6B,WAC7DC,EAAkBL,EAAQM,SAASC,MAAM,qBACzCC,EAAsBH,EAAkB3B,OAAOyB,YAAYE,EAAgBb,KAAI,SAAAiB,GAAC,OAAIA,EAAEC,MAAM,IAAI,KAAK,CAAC,EAEtGC,EAAgB,SAACC,EAASC,GAC9B,OAAOnC,OAAOC,KAAKiC,GAASE,MAAK,SAAAzC,GAAK,OAAIA,GAASwC,CAAI,GACzD,EAyBA,OAtBAtD,KAAKE,UACF6B,QAAO,SAAAL,GAAM,MAAuB,QAAnBA,EAAOtB,QAAkB,IAC1CiB,SAAQ,SAAAK,GACP,IAAM8B,EAAiBJ,EAAcH,EAAqBvB,EAAOvB,MACxCiD,EAAc1B,EAAQ,mBAAqB8B,EAGlEjD,EAASmB,EAAOpB,gBAAkB2C,EAAoBvB,EAAOvB,MAI3DqD,IACFjD,EAASmB,EAAOvB,MAAQ8C,EAAoBvB,EAAOvB,MAGvD,IAGFgB,OAAO0B,QAAQF,GAAoBtB,SAAQ,SAAAoC,GAAkB,I,IAAAC,G,EAAA,E,4CAAAD,I,o2BAAhB5C,EAAG6C,EAAA,GAAE5C,EAAK4C,EAAA,GACrDnD,EAASM,GAAOC,CAClB,IAEOP,CACT,GAEA,CAAAM,IAAA,cAAAC,MAKA,SAAYD,EAAKC,GACfd,KAAKO,SAASM,GAAOC,EAErBd,KAAK2D,kBACP,GAEA,CAAA9C,IAAA,iBAAAC,MAIA,SAAeD,UACNb,KAAKO,SAASM,GAErBb,KAAK2D,kBACP,GAEA,CAAA9C,IAAA,cAAAC,MAKA,SAAYD,GACV,OAAOb,KAAKO,SAASM,EACvB,GAEA,CAAAA,IAAA,mBAAAC,MAGA,WACE,IAAM8C,EAAa5D,KAAK6D,oBAAoB7D,KAAKO,UAC3C+B,EAAkC,MAAfsB,EAAqBA,EAAa,GAC3D,GAAoB,WAAhB5D,KAAKQ,QACP,GAAKsD,OAAOC,SAAYD,OAAOC,QAAQC,aAEhC,CACL,IAAMC,EAAa,GAAA/B,OAAGlC,KAAKS,oBAAkByB,OAAGI,GAAmB4B,OAAO7B,QAAQ,SAAU,KAC5F,IACEyB,OAAOC,QAAQC,aAAa,CAAC,EAAG,KAAMC,EACxC,CAAE,MAAOE,GAEPnE,KAAKQ,QAAU,MACjB,CACF,MATER,KAAKL,QAAQa,QAAU,OAYP,QAAhBR,KAAKQ,SACPsD,OAAOM,SAAS/B,QAAQ,IAAMC,GAEhCtC,KAAKW,gBAAkBiD,CACzB,GAEA,CAAA/C,IAAA,uBAAAC,MAIA,WAAuB,IAAAuD,EAAA,KACrBrE,KAAKW,gBAAkBmD,OAAOM,SAASE,KAAKC,OAAO,GAC/CvE,KAAKU,oBACP8D,cAAcxE,KAAKU,mBACnBV,KAAKU,kBAAoB,MAY3BV,KAAKU,kBAAoB+D,aARN,WACjB,IAAMC,EAAcZ,OAAOM,SAASE,KAAKC,OAAO,GACtBG,GAAeL,EAAK1D,kBAI9C0D,EAAK9D,SAAW8D,EAAKM,oBAAoBD,GAC3C,GACiD,IACnD,GAEA,CAAA7D,IAAA,qBAAAC,MAGA,WAAgD,IAA5BsD,EAAQxE,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAGkE,OAAOM,SAC9BQ,EAAwB,YAAjB5E,KAAKQ,QACb4D,EAASrB,SAASwB,OAAOvE,KAAKS,mBAAmBZ,QAAUuE,EAASS,OACrET,EAASE,KAAKC,OAAO,GACzBvE,KAAKO,SAAWP,KAAK2E,oBAAoBC,EAC3C,I,uEAAClF,CAAA,CA/LmB,G,wvCCUfoF,OAAOC,WAAWC,eAAgB,CACvCC,iBAAiB,EACjBC,OAAQ,GAERC,SAAU,KACVC,mBAAmB,EAGnB5E,QAAS,OAMTC,mBAAoB,IAGpB4E,iBAAkB,CAAC,OAAQ,SAAU,OAAQ,SAAU,YAAa,QAGpEC,gBAAgB,IAIlBP,WAAWQ,UAAUC,OAAkB/F,EAWpCsF,WAAWQ,UAAUC,MAVf,SAAS7F,GACdF,EAAOgG,KAAKzF,KAAML,GAElBK,KAAKkF,OAASvF,EAAQuF,OACtBlF,KAAKmF,SAAWxF,EAAQwF,SAExBnF,KAAK0F,eAAiB,KACtB1F,KAAKW,gBAAkB,KACvBX,KAAKY,YAAc,IACrB,GAIFmE,WAAWQ,UAAUI,KAAQ,SAASlG,GACpC,OAAO,WAAW,IAAAsB,EAAA,KAEZf,KAAKL,QAAQsF,kBACfjF,KAAK4F,KAAKb,WAAWc,WAAWC,UAAU,WACxC,IAAAC,EAAuChF,EAAKpB,QAApCyF,EAAiBW,EAAjBX,kBAAmB5E,EAAOuF,EAAPvF,QACvB4E,IACFY,SAASC,MAAQlF,EAAKmF,WAAWnF,EAAKoF,UAAW,KAEnC,SAAZ3F,GACFO,EAAKqF,yBAET,IAEApG,KAAK4F,KAAKb,WAAWc,WAAWQ,eAC9BrG,KAAKsG,kBAAkBV,KAAK5F,QAGhCP,EAAOgG,KAAKzF,KACd,CACF,CApB6B,CAoB1B+E,WAAWQ,UAAUI,MAOxBZ,WAAWQ,UAAUW,WAAa,SAASK,GACzC,OAAIvG,KAAKmG,UAAUtG,OAAS0G,EACnBvG,KAAKmG,UAGA,GAAHjE,OAAMlC,KAAKmG,UAAU5B,OAAO,EAAGgC,EAAoB,GAAE,MAElE,EAKAxB,WAAWQ,UAAUa,wBAA0B,WAAW,IAAA/B,EAAA,KACxDrE,KAAKW,gBAAkBX,KAAKwG,kBAExBxG,KAAK0F,iBACPlB,cAAcxE,KAAK0F,gBACnB1F,KAAK0F,eAAiB,MAyBxB1F,KAAK0F,eAAiBjB,aAtBH,WACjB,IAAMC,EAAcL,EAAKmC,kBAGzB,GAF2B9B,GAAeL,EAAK1D,iBAAqB+D,GAAeL,EAAKzD,YAExF,CAEA,IAAM6F,EAASpC,EAAKqC,mBAAmBhC,GAEjCiC,EAAe,WAAH,OAAStC,EAAKuC,iBAAiBH,EAAO,EAExDpC,EAAKwC,QAAQ9B,WAAWc,WAAWiB,MAC/BzC,EAAK0C,WAEH1C,EAAK2C,UAAU3C,EAAK2C,WACxB3C,EAAK4C,0BAA4BN,GAGjCA,IAEFtC,EAAKzD,YAAc8D,CAfe,CAgBpC,GAE8C,IAChD,EAMAK,WAAWQ,UAAUe,kBAAoB,WACvC,IAAMY,EAAYlH,KAAKmH,oBACvBC,EAA6CpH,KAAKL,QAA1C2F,EAAc8B,EAAd9B,eAAgBD,EAAgB+B,EAAhB/B,iBAEnBC,QAC+B,IAArB4B,EAAUG,OACE,IAApBH,EAAUG,eACRH,EAAUG,aACVH,EAAUI,MAGnB,IAAMb,EAASpB,EAAiBkC,QAAO,SAACC,EAAaC,GAInD,OAHIA,KAAaP,IACfM,EAAYC,GAAaP,EAAUO,IAE9BD,CACT,GAAG,CAAC,GAEE9C,EAAc1E,KAAK0H,mBAAmBjB,EAAQzG,KAAKL,QAAQa,SAC3DmH,EAAe3H,KAAKwG,kBACpBoB,EAAkB5H,KAAK6H,oBACvBC,EAAiB9H,KAAK+H,sBAAsBtB,EAAQmB,EAAiB5H,KAAKL,QAAQa,SACxF,GAAImH,IAAiBjD,GAAekD,IAAoBE,EAAxD,CAIA,GAA6B,YAAzB9H,KAAKL,QAAQa,QACf,GAAKsD,OAAOC,SAAYD,OAAOC,QAAQC,aAEhC,CACL,IAAMgE,EAAmBhI,KAAKL,QAAQc,mBAAmB4B,QAAQ,OAAQ,IACnE4F,EAAuC,KAAhBvD,EAAqB,GAAK,IAAHxC,OAAOwC,GAErDT,EAAa,GAAH/B,OAAM8F,GAAgB9F,OAAG+F,GAAoB/F,OAAG4F,GAChE,IACEhE,OAAOC,QAAQC,aAAa,CAAC,EAAG,KAAMC,GACtCjE,KAAKW,gBAAkB+D,EAAcoD,CACvC,CAAE,MAAO3D,GAEPnE,KAAKL,QAAQa,QAAU,MACzB,CACF,MAbER,KAAKL,QAAQa,QAAU,OAgB3B,GAA6B,SAAzBR,KAAKL,QAAQa,QAAqB,CACpC,IAAM0H,EAAuBlI,KAAKmI,2BAA2BnI,KAAKoI,mBAClEtE,OAAOM,SAAS/B,QAAQ,IAAMqC,EAAcwD,GAC5ClI,KAAKW,gBAAkB+D,EAAcwD,CACvC,CAxBA,CAyBF,EASAnD,WAAWQ,UAAU4C,2BAA6B,SAASE,GACzD,IAAM5B,EAAS,IAAIxF,gBAAgBoH,GACnC,OAAO5B,EAAO6B,IAAI,KAAO,IAAHpG,OAAO,IAAIjB,gBAAgB,CAAEsH,EAAG9B,EAAO+B,IAAI,QAAY,EAC/E,EAOAzD,WAAWQ,UAAUiB,gBAAkB,WACrC,IAAAiC,EAAwCzI,KAAKL,QAArCa,EAAOiI,EAAPjI,QAASC,EAAkBgI,EAAlBhI,mBACjB,MAAgB,YAAZD,EACKsD,OAAOM,SAASrB,SAASwB,OAAO9D,EAAmBZ,QAEnDiE,OAAOM,SAASE,KAAKC,OAAO,EAEvC,EAMAQ,WAAWQ,UAAUmD,oBAAsB,WACzC,OAAO5E,OAAOM,SAASE,KAAKC,OAAO,EACrC,EACO,IAAMoE,EAAmB,SAAAC,I,qRAAAC,CAAAF,EAAS5D,YAAT,I,QAAA+D,G,EAAAH,E,qrBAAA,SAAAA,IAAA,O,4FAAA5I,CAAA,KAAA4I,GAAAG,EAAAC,MAAA,KAAAnJ,UAAA,CAc7B,O,EAd6B+I,G,EAAA,EAAA9H,IAAA,OAAAC,MAC9B,WAAO,IAAAkI,EAAA,KACDhJ,KAAKL,QAAQsF,kBACfjF,KAAKiJ,UAAY,IAAIvJ,EAAUM,KAAKL,SACpCK,KAAK4F,KAAKb,WAAWc,WAAWC,UAAU,WAGxB,SAFIkD,EAAKrJ,QAAjBa,SAGNwI,EAAKC,UAAUC,sBAEnB,KAGFC,EAAAC,EAAAT,EAAApD,WAAA,aAAAE,KAAA,KACF,M,oEAACkD,CAAA,CAd6B,GAiBhC7E,OAAOiB,WAAa4D,C,uBChOpB,IAAIU,EAAc,EAAQ,MAEtBC,EAAS,WASTC,EAAgB,eAChBC,EAAkB,yBAClBC,EAAiB,kDAGjBC,EAAcC,WACdC,EAAOP,EAAYG,EAAgBI,MACnCC,EAAQC,KAAKD,MACbE,EAAeC,OAAOD,aACtBE,EAAaZ,EAAY,GAAGY,YAC5B9H,EAAOkH,EAAY,GAAGlH,MACtB+H,EAAOb,EAAY,GAAGa,MACtB7H,EAAUgH,EAAY,GAAGhH,SACzBc,EAAQkG,EAAY,GAAGlG,OACvBgH,EAAcd,EAAY,GAAGc,aAoC7BC,EAAe,SAAUC,GAG3B,OAAOA,EAAQ,GAAK,IAAMA,EAAQ,GACpC,EAMIC,EAAQ,SAAUC,EAAOC,EAAWC,GACtC,IAAIC,EAAI,EAGR,IAFAH,EAAQE,EAAYZ,EAAMU,EAlEjB,KAkEiCA,GAAS,EACnDA,GAASV,EAAMU,EAAQC,GAChBD,EAAQI,KACbJ,EAAQV,EAAMU,EA9DEK,IA+DhBF,GA1EO,GA4ET,OAAOb,EAAMa,EAAI,GAAsBH,GAASA,EAzEvC,IA0EX,EAMIM,EAAS,SAAUC,GACrB,IAAIC,EAAS,GAGbD,EAxDe,SAAUE,GAIzB,IAHA,IAAID,EAAS,GACTE,EAAU,EACVpL,EAASmL,EAAOnL,OACboL,EAAUpL,GAAQ,CACvB,IAAIiB,EAAQmJ,EAAWe,EAAQC,KAC/B,GAAInK,GAAS,OAAUA,GAAS,OAAUmK,EAAUpL,EAAQ,CAE1D,IAAIqL,EAAQjB,EAAWe,EAAQC,KACP,QAAX,MAARC,GACHhB,EAAKa,IAAkB,KAARjK,IAAkB,KAAe,KAARoK,GAAiB,QAIzDhB,EAAKa,EAAQjK,GACbmK,IAEJ,MACEf,EAAKa,EAAQjK,EAEjB,CACA,OAAOiK,CACT,CAkCUI,CAAWL,GAGnB,IAMIM,EAAGC,EANHC,EAAcR,EAAMjL,OAGpB0L,EAvFS,IAwFThB,EAAQ,EACRiB,EA1FY,GA8FhB,IAAKJ,EAAI,EAAGA,EAAIN,EAAMjL,OAAQuL,KAC5BC,EAAeP,EAAMM,IACF,KACjBlB,EAAKa,EAAQhB,EAAasB,IAI9B,IAAII,EAAcV,EAAOlL,OACrB6L,EAAiBD,EAQrB,IALIA,GACFvB,EAAKa,EAxGO,KA4GPW,EAAiBJ,GAAa,CAEnC,IAAIK,EAAIrC,EACR,IAAK8B,EAAI,EAAGA,EAAIN,EAAMjL,OAAQuL,KAC5BC,EAAeP,EAAMM,KACDG,GAAKF,EAAeM,IACtCA,EAAIN,GAKR,IAAIO,EAAwBF,EAAiB,EAC7C,GAAIC,EAAIJ,EAAI1B,GAAOP,EAASiB,GAASqB,GACnC,MAAMlC,EAAYD,GAMpB,IAHAc,IAAUoB,EAAIJ,GAAKK,EACnBL,EAAII,EAECP,EAAI,EAAGA,EAAIN,EAAMjL,OAAQuL,IAAK,CAEjC,IADAC,EAAeP,EAAMM,IACFG,KAAOhB,EAAQjB,EAChC,MAAMI,EAAYD,GAEpB,GAAI4B,GAAgBE,EAAG,CAIrB,IAFA,IAAIhD,EAAIgC,EACJG,EA9ID,KA+IU,CACX,IAAImB,EAAInB,GAAKc,EA/IZ,EA+I2Bd,GAAKc,EA9IhC,MA8IqDd,EAAIc,EAC1D,GAAIjD,EAAIsD,EAAG,MACX,IAAIC,EAAUvD,EAAIsD,EACdE,EAnJH,GAmJuBF,EACxB3B,EAAKa,EAAQhB,EAAaK,EAAayB,EAAIC,EAAUC,KACrDxD,EAAIsB,EAAMiC,EAAUC,GACpBrB,GAtJC,EAuJH,CAEAR,EAAKa,EAAQhB,EAAaK,EAAa7B,KACvCiD,EAAOlB,EAAMC,EAAOqB,EAAuBF,GAAkBD,GAC7DlB,EAAQ,EACRmB,GACF,CACF,CAEAnB,IACAgB,GACF,CACA,OAAOpJ,EAAK4I,EAAQ,GACtB,EAEAiB,EAAOC,QAAU,SAAUnB,GACzB,IAEIM,EAAGc,EAFHC,EAAU,GACVC,EAASjJ,EAAMd,EAAQ8H,EAAYW,GAAQtB,EAAiB,KAAW,KAE3E,IAAK4B,EAAI,EAAGA,EAAIgB,EAAOvM,OAAQuL,IAC7Bc,EAAQE,EAAOhB,GACflB,EAAKiC,EAASvC,EAAKL,EAAe2C,GAAS,OAASrB,EAAOqB,GAASA,GAEtE,OAAO/J,EAAKgK,EAAS,IACvB,C,uBCnLA,IAAIE,EAAuB,eACvBC,EAAQ,EAAQ,MAChBC,EAAc,EAAQ,MAM1BP,EAAOC,QAAU,SAAUO,GACzB,OAAOF,GAAM,WACX,QAASC,EAAYC,MANf,cAOGA,MACHH,GAAwBE,EAAYC,GAAarM,OAASqM,CAClE,GACF,C,uBCdA,IAAIC,EAAI,EAAQ,MACZC,EAAW,gBAIfD,EAAE,CAAEE,OAAQ,SAAUC,MAAM,GAAQ,CAClC/J,QAAS,SAAiBgK,GACxB,OAAOH,EAASG,EAClB,G,uBCRF,IAAIJ,EAAI,EAAQ,MACZK,EAAU,EAAQ,KAClBC,EAAiB,EAAQ,MAI7BN,EAAE,CAAEE,OAAQ,SAAUC,MAAM,GAAQ,CAClChK,YAAa,SAAqBoK,GAChC,IAAIC,EAAM,CAAC,EAIX,OAHAH,EAAQE,GAAU,SAAUtC,EAAGwC,GAC7BH,EAAeE,EAAKvC,EAAGwC,EACzB,GAAG,CAAEC,YAAY,IACVF,CACT,G,oCCZF,IAAIR,EAAI,EAAQ,MACZW,EAAQ,aAKZX,EAAE,CAAEE,OAAQ,SAAUU,OAAO,EAAMC,OAJN,EAAQ,KAIMC,CAAuB,SAAW,CAC3ErJ,KAAM,WACJ,OAAOkJ,EAAMpN,KACf,G,oCCRF,EAAQ,MACR,IAgEIwN,EAhEAf,EAAI,EAAQ,MACZgB,EAAc,EAAQ,MACtBC,EAAiB,EAAQ,MACzBC,EAAS,EAAQ,MACjB/H,EAAO,EAAQ,MACfyD,EAAc,EAAQ,MACtBuE,EAAgB,EAAQ,MACxBC,EAAwB,EAAQ,MAChCC,EAAa,EAAQ,MACrBC,EAAS,EAAQ,MACjBC,EAAS,EAAQ,MACjBC,EAAY,EAAQ,MACpBC,EAAa,EAAQ,MACrBC,EAAS,eACTC,EAAU,EAAQ,MAClBC,EAAY,EAAQ,MACpBC,EAAiB,EAAQ,MACzBC,EAA0B,EAAQ,MAClCC,EAAwB,EAAQ,MAChCC,EAAsB,EAAQ,MAE9BC,EAAmBD,EAAoBE,IACvCC,EAAsBH,EAAoBI,UAAU,OACpD5N,EAAkBuN,EAAsBvN,gBACxC6N,EAA+BN,EAAsBO,SAErDC,EAAYrB,EAAOjL,IACnBuM,EAAYtB,EAAOsB,UACnBC,EAAWvB,EAAOuB,SAClBrF,EAAQC,KAAKD,MACbsF,EAAMrF,KAAKqF,IACXC,EAAS/F,EAAY,GAAG+F,QACxBxF,EAAOP,EAAY,IAAIO,MACvBzH,EAAOkH,EAAY,GAAGlH,MACtBkN,EAAiBhG,EAAY,GAAI9G,UACjC+M,EAAMjG,EAAY,GAAGiG,KACrBpF,EAAOb,EAAY,GAAGa,MACtB7H,EAAUgH,EAAY,GAAGhH,SACzBkN,EAAQlG,EAAY,GAAGkG,OACvBpM,EAAQkG,EAAY,GAAGlG,OACvBqM,EAAcnG,EAAY,GAAGoG,OAC7BtF,EAAcd,EAAY,GAAGc,aAC7BuF,EAAUrG,EAAY,GAAGqG,SAGzBC,EAAiB,iBACjBC,EAAe,eACfC,EAAe,eAEfC,EAAQ,SAERC,EAAe,cACfC,EAAQ,KACRC,EAAY,OACZC,EAAM,WACNC,EAAM,QACNC,GAAM,cAENC,GAA4B,6BAC5BC,GAA8C,4BAC9CC,GAA8B,oBAC9BC,GAA+B,wCAC/BC,GAAmB,YAoJnBC,GAAgB,SAAUC,GAC5B,IAAIC,EAAQvJ,EAAOwJ,EAAUC,EAE7B,GAAmB,iBAARH,EAAkB,CAE3B,IADAC,EAAS,GACJvJ,EAAQ,EAAGA,EAAQ,EAAGA,IACzBqI,EAAQkB,EAAQD,EAAO,KACvBA,EAAO9G,EAAM8G,EAAO,KACpB,OAAOxO,EAAKyO,EAAQ,IAExB,CAAO,GAAmB,iBAARD,EAAkB,CAGlC,IAFAC,EAAS,GACTC,EAvC0B,SAAUE,GAMtC,IALA,IAAIC,EAAW,KACXC,EAAY,EACZC,EAAY,KACZC,EAAa,EACb9J,EAAQ,EACLA,EAAQ,EAAGA,IACI,IAAhB0J,EAAK1J,IACH8J,EAAaF,IACfD,EAAWE,EACXD,EAAYE,GAEdD,EAAY,KACZC,EAAa,IAEK,OAAdD,IAAoBA,EAAY7J,KAClC8J,GAON,OAJIA,EAAaF,IACfD,EAAWE,EACXD,EAAYE,GAEPH,CACT,CAeeI,CAAwBT,GAC9BtJ,EAAQ,EAAGA,EAAQ,EAAGA,IACrByJ,GAA2B,IAAhBH,EAAKtJ,KAChByJ,IAASA,GAAU,GACnBD,IAAaxJ,GACfuJ,GAAUvJ,EAAQ,IAAM,KACxByJ,GAAU,IAEVF,GAAUvB,EAAesB,EAAKtJ,GAAQ,IAClCA,EAAQ,IAAGuJ,GAAU,OAG7B,MAAO,IAAMA,EAAS,GACxB,CAAE,OAAOD,CACX,EAEIU,GAA4B,CAAC,EAC7BC,GAA2BtD,EAAO,CAAC,EAAGqD,GAA2B,CACnE,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,IAEnCE,GAAuBvD,EAAO,CAAC,EAAGsD,GAA0B,CAC9D,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,IAE3BE,GAA2BxD,EAAO,CAAC,EAAGuD,GAAsB,CAC9D,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,KAAM,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,IAG5EE,GAAgB,SAAUC,EAAK/C,GACjC,IAAIgD,EAAOxD,EAAOuD,EAAK,GACvB,OAAOC,EAAO,IAAQA,EAAO,MAAS5D,EAAOY,EAAK+C,GAAOA,EAAME,mBAAmBF,EACpF,EAGIG,GAAiB,CACnBC,IAAK,GACLC,KAAM,KACNC,KAAM,GACNC,MAAO,IACPC,GAAI,GACJC,IAAK,KAIHC,GAAuB,SAAUpH,EAAQqH,GAC3C,IAAIC,EACJ,OAAwB,GAAjBtH,EAAOnL,QAAe+J,EAAKkG,EAAOV,EAAOpE,EAAQ,MAClB,MAA/BsH,EAASlD,EAAOpE,EAAQ,MAAgBqH,GAAwB,KAAVC,EAC/D,EAGIC,GAA+B,SAAUvH,GAC3C,IAAIwH,EACJ,OAAOxH,EAAOnL,OAAS,GAAKuS,GAAqB5C,EAAYxE,EAAQ,EAAG,MACrD,GAAjBA,EAAOnL,QAC0B,OAA/B2S,EAAQpD,EAAOpE,EAAQ,KAAyB,OAAVwH,GAA4B,MAAVA,GAA2B,MAAVA,EAE/E,EAGIC,GAAc,SAAUC,GAC1B,MAAmB,MAAZA,GAA4C,QAAzBvI,EAAYuI,EACxC,EASIC,GAAe,CAAC,EAChBC,GAAS,CAAC,EACVC,GAAY,CAAC,EACbC,GAAgC,CAAC,EACjCC,GAAoB,CAAC,EACrBC,GAAW,CAAC,EACZC,GAAiB,CAAC,EAClBC,GAA4B,CAAC,EAC7BC,GAAmC,CAAC,EACpCC,GAAY,CAAC,EACbC,GAAO,CAAC,EACRC,GAAW,CAAC,EACZC,GAAO,CAAC,EACRC,GAAO,CAAC,EACRC,GAAa,CAAC,EACdC,GAAY,CAAC,EACbC,GAAa,CAAC,EACdC,GAAO,CAAC,EACRC,GAA4B,CAAC,EAC7BC,GAAQ,CAAC,EACTC,GAAW,CAAC,EAEZC,GAAW,SAAU3L,EAAK4L,EAAQrJ,GACpC,IACIsJ,EAAWC,EAASnT,EADpBwB,EAAY6L,EAAUhG,GAE1B,GAAI4L,EAAQ,CAEV,GADAE,EAAUnU,KAAKoU,MAAM5R,GACR,MAAMyM,EAAUkF,GAC7BnU,KAAKgB,aAAe,IACtB,KAAO,CAGL,QAFalB,IAAT8K,IAAoBsJ,EAAY,IAAIF,GAASpJ,GAAM,IACvDuJ,EAAUnU,KAAKoU,MAAM5R,EAAW,KAAM0R,GACzB,MAAMjF,EAAUkF,IAC7BnT,EAAe8N,EAA6B,IAAI7N,IACnCoT,QAAQrU,MACrBA,KAAKgB,aAAeA,CACtB,CACF,EAEAgT,GAASzO,UAAY,CACnB+O,KAAM,MAGNF,MAAO,SAAUtJ,EAAOyJ,EAAe3J,GACrC,IAOI4J,EAAY9C,EAAK+C,EAAkBN,EAzDfzB,EAkDpBrK,EAAMrI,KACN0U,EAAQH,GAAiB5B,GACzBgC,EAAU,EACVC,EAAS,GACTC,GAAS,EACTC,GAAc,EACdC,GAAoB,EAuBxB,IApBAjK,EAAQuD,EAAUvD,GAEbyJ,IACHlM,EAAI2M,OAAS,GACb3M,EAAI4M,SAAW,GACf5M,EAAI6M,SAAW,GACf7M,EAAIsI,KAAO,KACXtI,EAAI8M,KAAO,KACX9M,EAAIzD,KAAO,GACXyD,EAAI+M,MAAQ,KACZ/M,EAAIgN,SAAW,KACfhN,EAAIiN,kBAAmB,EACvBxK,EAAQzI,EAAQyI,EAAOyF,GAA6B,IACpDzF,EAAQzI,EAAQyI,EAAO0F,GAA8B,OAGvD1F,EAAQzI,EAAQyI,EAAO2F,GAAkB,IAEzC+D,EAAavG,EAAUnD,GAEhB6J,GAAWH,EAAW3U,QAAQ,CAEnC,OADA6R,EAAM8C,EAAWG,GACTD,GACN,KAAK/B,GACH,IAAIjB,IAAO9H,EAAKkG,EAAO4B,GAGhB,IAAK6C,EAGL,OAAO5E,EAFZ+E,EAAQ7B,GACR,QAC0B,CAL1B+B,GAAUzK,EAAYuH,GACtBgD,EAAQ9B,GAKV,MAEF,KAAKA,GACH,GAAIlB,IAAQ9H,EAAKmG,EAAc2B,IAAe,KAAPA,GAAqB,KAAPA,GAAqB,KAAPA,GACjEkD,GAAUzK,EAAYuH,OACjB,IAAW,KAAPA,EA0BJ,IAAK6C,EAKL,OAAO5E,EAJZiF,EAAS,GACTF,EAAQ7B,GACR8B,EAAU,EACV,QAC0B,CA9B1B,GAAIJ,IACDlM,EAAIkN,aAAexH,EAAO8D,GAAgB+C,IAChC,QAAVA,IAAqBvM,EAAImN,uBAAsC,OAAbnN,EAAI8M,OACxC,QAAd9M,EAAI2M,SAAqB3M,EAAIsI,MAC7B,OAEH,GADAtI,EAAI2M,OAASJ,EACTL,EAEF,YADIlM,EAAIkN,aAAe1D,GAAexJ,EAAI2M,SAAW3M,EAAI8M,OAAM9M,EAAI8M,KAAO,OAG5EP,EAAS,GACS,QAAdvM,EAAI2M,OACNN,EAAQlB,GACCnL,EAAIkN,aAAe3K,GAAQA,EAAKoK,QAAU3M,EAAI2M,OACvDN,EAAQ5B,GACCzK,EAAIkN,YACbb,EAAQxB,GAC4B,KAA3BsB,EAAWG,EAAU,IAC9BD,EAAQ3B,GACR4B,MAEAtM,EAAIiN,kBAAmB,EACvBpL,EAAK7B,EAAIzD,KAAM,IACf8P,EAAQb,GAOgB,CAC5B,MAEF,KAAKhB,GACH,IAAKjI,GAASA,EAAK0K,kBAA2B,KAAP5D,EAAa,OAAO/B,EAC3D,GAAI/E,EAAK0K,kBAA2B,KAAP5D,EAAY,CACvCrJ,EAAI2M,OAASpK,EAAKoK,OAClB3M,EAAIzD,KAAOsJ,EAAWtD,EAAKhG,MAC3ByD,EAAI+M,MAAQxK,EAAKwK,MACjB/M,EAAIgN,SAAW,GACfhN,EAAIiN,kBAAmB,EACvBZ,EAAQX,GACR,KACF,CACAW,EAAuB,QAAf9J,EAAKoK,OAAmBxB,GAAOR,GACvC,SAEF,KAAKF,GACH,GAAW,KAAPpB,GAAyC,KAA3B8C,EAAWG,EAAU,GAGhC,CACLD,EAAQ1B,GACR,QACF,CALE0B,EAAQvB,GACRwB,IAIA,MAEJ,KAAK5B,GACH,GAAW,KAAPrB,EAAY,CACdgD,EAAQtB,GACR,KACF,CACEsB,EAAQd,GACR,SAGJ,KAAKZ,GAEH,GADA3K,EAAI2M,OAASpK,EAAKoK,OACdtD,GAAOlE,EACTnF,EAAI4M,SAAWrK,EAAKqK,SACpB5M,EAAI6M,SAAWtK,EAAKsK,SACpB7M,EAAIsI,KAAO/F,EAAK+F,KAChBtI,EAAI8M,KAAOvK,EAAKuK,KAChB9M,EAAIzD,KAAOsJ,EAAWtD,EAAKhG,MAC3ByD,EAAI+M,MAAQxK,EAAKwK,WACZ,GAAW,KAAP1D,GAAsB,MAAPA,GAAerJ,EAAIkN,YAC3Cb,EAAQzB,QACH,GAAW,KAAPvB,EACTrJ,EAAI4M,SAAWrK,EAAKqK,SACpB5M,EAAI6M,SAAWtK,EAAKsK,SACpB7M,EAAIsI,KAAO/F,EAAK+F,KAChBtI,EAAI8M,KAAOvK,EAAKuK,KAChB9M,EAAIzD,KAAOsJ,EAAWtD,EAAKhG,MAC3ByD,EAAI+M,MAAQ,GACZV,EAAQZ,OACH,IAAW,KAAPpC,EASJ,CACLrJ,EAAI4M,SAAWrK,EAAKqK,SACpB5M,EAAI6M,SAAWtK,EAAKsK,SACpB7M,EAAIsI,KAAO/F,EAAK+F,KAChBtI,EAAI8M,KAAOvK,EAAKuK,KAChB9M,EAAIzD,KAAOsJ,EAAWtD,EAAKhG,MAC3ByD,EAAIzD,KAAK/E,SACT6U,EAAQd,GACR,QACF,CAjBEvL,EAAI4M,SAAWrK,EAAKqK,SACpB5M,EAAI6M,SAAWtK,EAAKsK,SACpB7M,EAAIsI,KAAO/F,EAAK+F,KAChBtI,EAAI8M,KAAOvK,EAAKuK,KAChB9M,EAAIzD,KAAOsJ,EAAWtD,EAAKhG,MAC3ByD,EAAI+M,MAAQxK,EAAKwK,MACjB/M,EAAIgN,SAAW,GACfX,EAAQX,EAUV,CAAE,MAEJ,KAAKd,GACH,IAAI5K,EAAIkN,aAAuB,KAAP7D,GAAqB,MAAPA,EAE/B,IAAW,KAAPA,EAEJ,CACLrJ,EAAI4M,SAAWrK,EAAKqK,SACpB5M,EAAI6M,SAAWtK,EAAKsK,SACpB7M,EAAIsI,KAAO/F,EAAK+F,KAChBtI,EAAI8M,KAAOvK,EAAKuK,KAChBT,EAAQd,GACR,QACF,CAREc,EAAQtB,EAQV,MAVEsB,EAAQvB,GAUR,MAEJ,KAAKD,GAEH,GADAwB,EAAQvB,GACG,KAAPzB,GAA6C,KAA/BtC,EAAOwF,EAAQD,EAAU,GAAW,SACtDA,IACA,MAEF,KAAKxB,GACH,GAAW,KAAPzB,GAAqB,MAAPA,EAAa,CAC7BgD,EAAQtB,GACR,QACF,CAAE,MAEJ,KAAKA,GACH,GAAW,KAAP1B,EAAY,CACVmD,IAAQD,EAAS,MAAQA,GAC7BC,GAAS,EACTJ,EAAmBxG,EAAU2G,GAC7B,IAAK,IAAIxJ,EAAI,EAAGA,EAAIqJ,EAAiB5U,OAAQuL,IAAK,CAChD,IAAIqK,EAAYhB,EAAiBrJ,GACjC,GAAiB,KAAbqK,GAAqBV,EAAzB,CAIA,IAAIW,EAAoBjE,GAAcgE,EAAWjE,IAC7CuD,EAAmB1M,EAAI6M,UAAYQ,EAClCrN,EAAI4M,UAAYS,CAHrB,MAFEX,GAAoB,CAMxB,CACAH,EAAS,EACX,MAAO,GACLlD,GAAOlE,GAAc,KAAPkE,GAAqB,KAAPA,GAAqB,KAAPA,GAClC,MAAPA,GAAerJ,EAAIkN,YACpB,CACA,GAAIV,GAAoB,IAAVD,EAAc,MAxehB,oBAyeZD,GAAW1G,EAAU2G,GAAQ/U,OAAS,EACtC+U,EAAS,GACTF,EAAQrB,EACV,MAAOuB,GAAUlD,EACjB,MAEF,KAAK2B,GACL,KAAKC,GACH,GAAIiB,GAA+B,QAAdlM,EAAI2M,OAAkB,CACzCN,EAAQhB,GACR,QACF,CAAO,GAAW,KAAPhC,GAAeoD,EAOnB,IACLpD,GAAOlE,GAAc,KAAPkE,GAAqB,KAAPA,GAAqB,KAAPA,GAClC,MAAPA,GAAerJ,EAAIkN,YACpB,CACA,GAAIlN,EAAIkN,aAAyB,IAAVX,EAAc,OAAOhF,EAC5C,GAAI2E,GAA2B,IAAVK,IAAiBvM,EAAImN,uBAAsC,OAAbnN,EAAI8M,MAAgB,OAEvF,GADAhB,EAAU9L,EAAIsN,UAAUf,GACX,OAAOT,EAGpB,GAFAS,EAAS,GACTF,EAAQf,GACJY,EAAe,OACnB,QACF,CACa,KAAP7C,EAAYoD,GAAc,EACd,KAAPpD,IAAYoD,GAAc,GACnCF,GAAUlD,CACZ,KAvBuC,CACrC,GAAc,IAAVkD,EAAc,OAAOhF,EAEzB,GADAuE,EAAU9L,EAAIsN,UAAUf,GACX,OAAOT,EAGpB,GAFAS,EAAS,GACTF,EAAQnB,GACJgB,GAAiBjB,GAAU,MACjC,CAgBE,MAEJ,KAAKC,GACH,IAAI3J,EAAKoG,EAAO0B,GAET,IACLA,GAAOlE,GAAc,KAAPkE,GAAqB,KAAPA,GAAqB,KAAPA,GAClC,MAAPA,GAAerJ,EAAIkN,aACpBhB,EACA,CACA,GAAc,IAAVK,EAAc,CAChB,IAAIO,EAAOjG,EAAS0F,EAAQ,IAC5B,GAAIO,EAAO,MAAQ,OAAOtF,EAC1BxH,EAAI8M,KAAQ9M,EAAIkN,aAAeJ,IAAStD,GAAexJ,EAAI2M,QAAW,KAAOG,EAC7EP,EAAS,EACX,CACA,GAAIL,EAAe,OACnBG,EAAQf,GACR,QACF,CAAO,OAAO9D,CAAY,CAfxB+E,GAAUlD,EAgBZ,MAEF,KAAK8B,GAEH,GADAnL,EAAI2M,OAAS,OACF,KAAPtD,GAAqB,MAAPA,EAAagD,EAAQjB,OAClC,KAAI7I,GAAuB,QAAfA,EAAKoK,OAyBf,CACLN,EAAQd,GACR,QACF,CA3BE,GAAIlC,GAAOlE,EACTnF,EAAIsI,KAAO/F,EAAK+F,KAChBtI,EAAIzD,KAAOsJ,EAAWtD,EAAKhG,MAC3ByD,EAAI+M,MAAQxK,EAAKwK,WACZ,GAAW,KAAP1D,EACTrJ,EAAIsI,KAAO/F,EAAK+F,KAChBtI,EAAIzD,KAAOsJ,EAAWtD,EAAKhG,MAC3ByD,EAAI+M,MAAQ,GACZV,EAAQZ,OACH,IAAW,KAAPpC,EAMJ,CACAa,GAA6BpQ,EAAK+L,EAAWsG,EAAYG,GAAU,OACtEtM,EAAIsI,KAAO/F,EAAK+F,KAChBtI,EAAIzD,KAAOsJ,EAAWtD,EAAKhG,MAC3ByD,EAAIuN,eAENlB,EAAQd,GACR,QACF,CAbEvL,EAAIsI,KAAO/F,EAAK+F,KAChBtI,EAAIzD,KAAOsJ,EAAWtD,EAAKhG,MAC3ByD,EAAI+M,MAAQxK,EAAKwK,MACjB/M,EAAIgN,SAAW,GACfX,EAAQX,EASV,CAIF,CAAE,MAEJ,KAAKN,GACH,GAAW,KAAP/B,GAAqB,MAAPA,EAAa,CAC7BgD,EAAQhB,GACR,KACF,CACI9I,GAAuB,QAAfA,EAAKoK,SAAqBzC,GAA6BpQ,EAAK+L,EAAWsG,EAAYG,GAAU,OACnGvC,GAAqBxH,EAAKhG,KAAK,IAAI,GAAOsF,EAAK7B,EAAIzD,KAAMgG,EAAKhG,KAAK,IAClEyD,EAAIsI,KAAO/F,EAAK+F,MAEvB+D,EAAQd,GACR,SAEF,KAAKF,GACH,GAAIhC,GAAOlE,GAAc,KAAPkE,GAAqB,MAAPA,GAAsB,KAAPA,GAAqB,KAAPA,EAAY,CACvE,IAAK6C,GAAiBnC,GAAqBwC,GACzCF,EAAQd,QACH,GAAc,IAAVgB,EAAc,CAEvB,GADAvM,EAAIsI,KAAO,GACP4D,EAAe,OACnBG,EAAQf,EACV,KAAO,CAEL,GADAQ,EAAU9L,EAAIsN,UAAUf,GACX,OAAOT,EAEpB,GADgB,aAAZ9L,EAAIsI,OAAqBtI,EAAIsI,KAAO,IACpC4D,EAAe,OACnBK,EAAS,GACTF,EAAQf,EACV,CAAE,QACJ,CAAOiB,GAAUlD,EACjB,MAEF,KAAKiC,GACH,GAAItL,EAAIkN,aAEN,GADAb,EAAQd,GACG,KAAPlC,GAAqB,MAAPA,EAAa,cAC1B,GAAK6C,GAAwB,KAAP7C,EAGtB,GAAK6C,GAAwB,KAAP7C,GAGtB,GAAIA,GAAOlE,IAChBkH,EAAQd,GACG,KAAPlC,GAAY,cAJhBrJ,EAAIgN,SAAW,GACfX,EAAQX,QAJR1L,EAAI+M,MAAQ,GACZV,EAAQZ,GAOR,MAEJ,KAAKF,GACH,GACElC,GAAOlE,GAAc,KAAPkE,GACN,MAAPA,GAAerJ,EAAIkN,cAClBhB,IAAyB,KAAP7C,GAAqB,KAAPA,GAClC,CAkBA,GAnZS,QADnBgB,EAAUvI,EADgBuI,EAoYAkC,KAlYa,SAAZlC,GAAkC,SAAZA,GAAkC,WAAZA,GAmY3DrK,EAAIuN,cACO,KAAPlE,GAAuB,MAAPA,GAAerJ,EAAIkN,aACrCrL,EAAK7B,EAAIzD,KAAM,KAER6N,GAAYmC,GACV,KAAPlD,GAAuB,MAAPA,GAAerJ,EAAIkN,aACrCrL,EAAK7B,EAAIzD,KAAM,KAGC,QAAdyD,EAAI2M,SAAqB3M,EAAIzD,KAAK/E,QAAUuS,GAAqBwC,KAC/DvM,EAAIsI,OAAMtI,EAAIsI,KAAO,IACzBiE,EAASxF,EAAOwF,EAAQ,GAAK,KAE/B1K,EAAK7B,EAAIzD,KAAMgQ,IAEjBA,EAAS,GACS,QAAdvM,EAAI2M,SAAqBtD,GAAOlE,GAAc,KAAPkE,GAAqB,KAAPA,GACvD,KAAOrJ,EAAIzD,KAAK/E,OAAS,GAAqB,KAAhBwI,EAAIzD,KAAK,IACrC2K,EAAMlH,EAAIzD,MAGH,KAAP8M,GACFrJ,EAAI+M,MAAQ,GACZV,EAAQZ,IACQ,KAAPpC,IACTrJ,EAAIgN,SAAW,GACfX,EAAQX,GAEZ,MACEa,GAAUnD,GAAcC,EAAKH,IAC7B,MAEJ,KAAKsC,GACQ,KAAPnC,GACFrJ,EAAI+M,MAAQ,GACZV,EAAQZ,IACQ,KAAPpC,GACTrJ,EAAIgN,SAAW,GACfX,EAAQX,IACCrC,GAAOlE,IAChBnF,EAAIzD,KAAK,IAAM6M,GAAcC,EAAKL,KAClC,MAEJ,KAAKyC,GACES,GAAwB,KAAP7C,EAGXA,GAAOlE,IACL,KAAPkE,GAAcrJ,EAAIkN,YAAalN,EAAI+M,OAAS,MAC3B/M,EAAI+M,OAAT,KAAP1D,EAAyB,MAChBD,GAAcC,EAAKL,MALrChJ,EAAIgN,SAAW,GACfX,EAAQX,IAKR,MAEJ,KAAKA,GACCrC,GAAOlE,IAAKnF,EAAIgN,UAAY5D,GAAcC,EAAKJ,KAIvDqD,GACF,CACF,EAEAgB,UAAW,SAAU7K,GACnB,IAAI8F,EAAQ4D,EAAYnN,EACxB,GAAwB,KAApB+H,EAAOtE,EAAO,GAAW,CAC3B,GAAuC,KAAnCsE,EAAOtE,EAAOA,EAAMjL,OAAS,GAAW,OAAO+P,EAEnD,GADAgB,EA1nBU,SAAU9F,GACxB,IAIIhK,EAAOjB,EAAQgW,EAAaC,EAAWC,EAAQC,EAAOC,EAJtDC,EAAU,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAChCC,EAAa,EACbtF,EAAW,KACX8D,EAAU,EAGVjD,EAAM,WACR,OAAOtC,EAAOtE,EAAO6J,EACvB,EAEA,GAAa,KAATjD,IAAc,CAChB,GAAwB,KAApBtC,EAAOtE,EAAO,GAAW,OAC7B6J,GAAW,EAEX9D,IADAsF,CAEF,CACA,KAAOzE,KAAO,CACZ,GAAkB,GAAdyE,EAAiB,OACrB,GAAa,KAATzE,IAAJ,CAQA,IADA5Q,EAAQjB,EAAS,EACVA,EAAS,GAAK+J,EAAKwG,GAAKsB,MAC7B5Q,EAAgB,GAARA,EAAaoO,EAASwC,IAAO,IACrCiD,IACA9U,IAEF,GAAa,KAAT6R,IAAc,CAChB,GAAc,GAAV7R,EAAa,OAEjB,GADA8U,GAAW9U,EACPsW,EAAa,EAAG,OAEpB,IADAN,EAAc,EACPnE,KAAO,CAEZ,GADAoE,EAAY,KACRD,EAAc,EAAG,CACnB,KAAa,KAATnE,KAAgBmE,EAAc,GAC7B,OADgClB,GAEvC,CACA,IAAK/K,EAAKoG,EAAO0B,KAAQ,OACzB,KAAO9H,EAAKoG,EAAO0B,MAAQ,CAEzB,GADAqE,EAAS7G,EAASwC,IAAO,IACP,OAAdoE,EAAoBA,EAAYC,MAC/B,IAAiB,GAAbD,EAAgB,OACpBA,EAAwB,GAAZA,EAAiBC,CAAM,CACxC,GAAID,EAAY,IAAK,OACrBnB,GACF,CACAuB,EAAQC,GAAoC,IAAtBD,EAAQC,GAAoBL,EAE/B,KADnBD,GACuC,GAAfA,GAAkBM,GAC5C,CACA,GAAmB,GAAfN,EAAkB,OACtB,KACF,CAAO,GAAa,KAATnE,KAET,GADAiD,KACKjD,IAAO,YACP,GAAIA,IAAO,OAClBwE,EAAQC,KAAgBrV,CArCxB,KANA,CACE,GAAiB,OAAb+P,EAAmB,OACvB8D,IAEA9D,IADAsF,CAGF,CAsCF,CACA,GAAiB,OAAbtF,EAGF,IAFAmF,EAAQG,EAAatF,EACrBsF,EAAa,EACQ,GAAdA,GAAmBH,EAAQ,GAChCC,EAAOC,EAAQC,GACfD,EAAQC,KAAgBD,EAAQrF,EAAWmF,EAAQ,GACnDE,EAAQrF,IAAamF,GAASC,OAE3B,GAAkB,GAAdE,EAAiB,OAC5B,OAAOD,CACT,CAgjBeE,CAAU5G,EAAY1E,EAAO,GAAI,KACrC8F,EAAQ,OAAOhB,EACpB5P,KAAK2Q,KAAOC,CAEd,MAAO,GAAK5Q,KAAKuV,YAQV,CAEL,GADAzK,EAAQsD,EAAQtD,GACZlB,EAAKyG,GAA2BvF,GAAQ,OAAO8E,EAEnD,GADAgB,EAjrBU,SAAU9F,GACxB,IACIuL,EAAaC,EAASjP,EAAOkP,EAAMC,EAAOT,EAAQU,EADlDC,EAAQvT,EAAM2H,EAAO,KAMzB,GAJI4L,EAAM7W,QAAqC,IAA3B6W,EAAMA,EAAM7W,OAAS,IACvC6W,EAAM7W,UAERwW,EAAcK,EAAM7W,QACF,EAAG,OAAOiL,EAE5B,IADAwL,EAAU,GACLjP,EAAQ,EAAGA,EAAQgP,EAAahP,IAAS,CAE5C,GAAY,KADZkP,EAAOG,EAAMrP,IACG,OAAOyD,EAMvB,GALA0L,EAAQ,GACJD,EAAK1W,OAAS,GAAwB,KAAnBuP,EAAOmH,EAAM,KAClCC,EAAQ5M,EAAKqG,EAAWsG,GAAQ,GAAK,EACrCA,EAAO/G,EAAY+G,EAAe,GAATC,EAAa,EAAI,IAE/B,KAATD,EACFR,EAAS,MACJ,CACL,IAAKnM,EAAc,IAAT4M,EAAcrG,EAAe,GAATqG,EAAatG,EAAME,GAAKmG,GAAO,OAAOzL,EACpEiL,EAAS7G,EAASqH,EAAMC,EAC1B,CACAtM,EAAKoM,EAASP,EAChB,CACA,IAAK1O,EAAQ,EAAGA,EAAQgP,EAAahP,IAEnC,GADA0O,EAASO,EAAQjP,GACbA,GAASgP,EAAc,GACzB,GAAIN,GAAU5G,EAAI,IAAK,EAAIkH,GAAc,OAAO,UAC3C,GAAIN,EAAS,IAAK,OAAO,KAGlC,IADAU,EAAOnH,EAAIgH,GACNjP,EAAQ,EAAGA,EAAQiP,EAAQzW,OAAQwH,IACtCoP,GAAQH,EAAQjP,GAAS8H,EAAI,IAAK,EAAI9H,GAExC,OAAOoP,CACT,CA6oBeE,CAAU7L,GACJ,OAAX8F,EAAiB,OAAOhB,EAC5B5P,KAAK2Q,KAAOC,CACd,KAd8B,CAC5B,GAAIhH,EAAK0G,GAA6CxF,GAAQ,OAAO8E,EAGrE,IAFAgB,EAAS,GACT4D,EAAavG,EAAUnD,GAClBzD,EAAQ,EAAGA,EAAQmN,EAAW3U,OAAQwH,IACzCuJ,GAAUa,GAAc+C,EAAWnN,GAAQgK,IAE7CrR,KAAK2Q,KAAOC,CACd,CAOF,EAEAgG,+BAAgC,WAC9B,OAAQ5W,KAAK2Q,MAAQ3Q,KAAKsV,kBAAmC,QAAftV,KAAKgV,MACrD,EAEAQ,oBAAqB,WACnB,MAAwB,IAAjBxV,KAAKiV,UAAmC,IAAjBjV,KAAKkV,QACrC,EAEAK,UAAW,WACT,OAAOxH,EAAO8D,GAAgB7R,KAAKgV,OACrC,EAEAY,YAAa,WACX,IAAIhR,EAAO5E,KAAK4E,KACZiS,EAAWjS,EAAK/E,QAChBgX,GAA4B,QAAf7W,KAAKgV,QAAgC,GAAZ6B,GAAkBzE,GAAqBxN,EAAK,IAAI,IACxFA,EAAK/E,QAET,EAEAiX,UAAW,WACT,IAAIzO,EAAMrI,KACNgV,EAAS3M,EAAI2M,OACbC,EAAW5M,EAAI4M,SACfC,EAAW7M,EAAI6M,SACfvE,EAAOtI,EAAIsI,KACXwE,EAAO9M,EAAI8M,KACXvQ,EAAOyD,EAAIzD,KACXwQ,EAAQ/M,EAAI+M,MACZC,EAAWhN,EAAIgN,SACftK,EAASiK,EAAS,IAYtB,OAXa,OAATrE,GACF5F,GAAU,KACN1C,EAAImN,wBACNzK,GAAUkK,GAAYC,EAAW,IAAMA,EAAW,IAAM,KAE1DnK,GAAU2F,GAAcC,GACX,OAATwE,IAAepK,GAAU,IAAMoK,IAChB,QAAVH,IAAkBjK,GAAU,MACvCA,GAAU1C,EAAIiN,iBAAmB1Q,EAAK,GAAKA,EAAK/E,OAAS,IAAMsC,EAAKyC,EAAM,KAAO,GACnE,OAAVwQ,IAAgBrK,GAAU,IAAMqK,GACnB,OAAbC,IAAmBtK,GAAU,IAAMsK,GAChCtK,CACT,EAEAgM,QAAS,SAAUC,GACjB,IAAI7C,EAAUnU,KAAKoU,MAAM4C,GACzB,GAAI7C,EAAS,MAAMlF,EAAUkF,GAC7BnU,KAAKgB,aAAaiW,QACpB,EAEAC,UAAW,WACT,IAAIlC,EAAShV,KAAKgV,OACdG,EAAOnV,KAAKmV,KAChB,GAAc,QAAVH,EAAkB,IACpB,OAAO,IAAImC,GAAenC,EAAOpQ,KAAK,IAAIwS,MAC5C,CAAE,MAAOC,GACP,MAAO,MACT,CACA,MAAc,QAAVrC,GAAqBhV,KAAKuV,YACvBP,EAAS,MAAQtE,GAAc1Q,KAAK2Q,OAAkB,OAATwE,EAAgB,IAAMA,EAAO,IAD/B,MAEpD,EAEAmC,YAAa,WACX,OAAOtX,KAAKgV,OAAS,GACvB,EACAuC,YAAa,SAAUC,GACrBxX,KAAKoU,MAAM/F,EAAUmJ,GAAY,IAAK7E,GACxC,EAEA8E,YAAa,WACX,OAAOzX,KAAKiV,QACd,EACAyC,YAAa,SAAUzC,GACrB,IAAIT,EAAavG,EAAUI,EAAU4G,IACrC,IAAIjV,KAAK4W,iCAAT,CACA5W,KAAKiV,SAAW,GAChB,IAAK,IAAI7J,EAAI,EAAGA,EAAIoJ,EAAW3U,OAAQuL,IACrCpL,KAAKiV,UAAYxD,GAAc+C,EAAWpJ,GAAIoG,GAHC,CAKnD,EAEAmG,YAAa,WACX,OAAO3X,KAAKkV,QACd,EACA0C,YAAa,SAAU1C,GACrB,IAAIV,EAAavG,EAAUI,EAAU6G,IACrC,IAAIlV,KAAK4W,iCAAT,CACA5W,KAAKkV,SAAW,GAChB,IAAK,IAAI9J,EAAI,EAAGA,EAAIoJ,EAAW3U,OAAQuL,IACrCpL,KAAKkV,UAAYzD,GAAc+C,EAAWpJ,GAAIoG,GAHC,CAKnD,EAEAqG,QAAS,WACP,IAAIlH,EAAO3Q,KAAK2Q,KACZwE,EAAOnV,KAAKmV,KAChB,OAAgB,OAATxE,EAAgB,GACV,OAATwE,EAAgBzE,GAAcC,GAC9BD,GAAcC,GAAQ,IAAMwE,CAClC,EACA2C,QAAS,SAAUnH,GACb3Q,KAAKsV,kBACTtV,KAAKoU,MAAMzD,EAAM0C,GACnB,EAEA0E,YAAa,WACX,IAAIpH,EAAO3Q,KAAK2Q,KAChB,OAAgB,OAATA,EAAgB,GAAKD,GAAcC,EAC5C,EACAqH,YAAa,SAAUC,GACjBjY,KAAKsV,kBACTtV,KAAKoU,MAAM6D,EAAU3E,GACvB,EAEA4E,QAAS,WACP,IAAI/C,EAAOnV,KAAKmV,KAChB,OAAgB,OAATA,EAAgB,GAAK9G,EAAU8G,EACxC,EACAgD,QAAS,SAAUhD,GACbnV,KAAK4W,mCAEG,KADZzB,EAAO9G,EAAU8G,IACDnV,KAAKmV,KAAO,KACvBnV,KAAKoU,MAAMe,EAAM5B,IACxB,EAEA6E,YAAa,WACX,IAAIxT,EAAO5E,KAAK4E,KAChB,OAAO5E,KAAKsV,iBAAmB1Q,EAAK,GAAKA,EAAK/E,OAAS,IAAMsC,EAAKyC,EAAM,KAAO,EACjF,EACAyT,YAAa,SAAUtV,GACjB/C,KAAKsV,mBACTtV,KAAK4E,KAAO,GACZ5E,KAAKoU,MAAMrR,EAAU4Q,IACvB,EAEA2E,UAAW,WACT,IAAIlD,EAAQpV,KAAKoV,MACjB,OAAOA,EAAQ,IAAMA,EAAQ,EAC/B,EACAmD,UAAW,SAAU1T,GAEL,KADdA,EAASwJ,EAAUxJ,IAEjB7E,KAAKoV,MAAQ,MAET,KAAOhG,EAAOvK,EAAQ,KAAIA,EAAS2K,EAAY3K,EAAQ,IAC3D7E,KAAKoV,MAAQ,GACbpV,KAAKoU,MAAMvP,EAAQiP,KAErB9T,KAAKgB,aAAaiW,QACpB,EAEAuB,gBAAiB,WACf,OAAOxY,KAAKgB,aAAayX,MAC3B,EAEAC,QAAS,WACP,IAAIrD,EAAWrV,KAAKqV,SACpB,OAAOA,EAAW,IAAMA,EAAW,EACrC,EACAsD,QAAS,SAAUrU,GAEL,KADZA,EAAO+J,EAAU/J,KAKb,KAAO8K,EAAO9K,EAAM,KAAIA,EAAOkL,EAAYlL,EAAM,IACrDtE,KAAKqV,SAAW,GAChBrV,KAAKoU,MAAM9P,EAAMyP,KALf/T,KAAKqV,SAAW,IAMpB,EACA4B,OAAQ,WACNjX,KAAKoV,MAAQpV,KAAKgB,aAAa8V,aAAe,IAChD,GAKF,IAAIK,GAAiB,SAAa9O,GAChC,IAAIuQ,EAAO9K,EAAW9N,KAAM6Y,IACxBjO,EAAO2D,EAAwB3O,UAAUC,OAAQ,GAAK,EAAID,UAAU,QAAKE,EACzE4U,EAAQhG,EAAiBkK,EAAM,IAAI5E,GAAS3L,GAAK,EAAOuC,IACvD6C,IACHmL,EAAK5B,KAAOtC,EAAMoC,YAClB8B,EAAKxB,OAAS1C,EAAMwC,YACpB0B,EAAKpB,SAAW9C,EAAM4C,cACtBsB,EAAK3D,SAAWP,EAAM+C,cACtBmB,EAAK1D,SAAWR,EAAMiD,cACtBiB,EAAKjI,KAAO+D,EAAMmD,UAClBe,EAAKX,SAAWvD,EAAMqD,cACtBa,EAAKzD,KAAOT,EAAMwD,UAClBU,EAAK7V,SAAW2R,EAAM0D,cACtBQ,EAAK/T,OAAS6P,EAAM4D,YACpBM,EAAK5X,aAAe0T,EAAM8D,kBAC1BI,EAAKtU,KAAOoQ,EAAMgE,UAEtB,EAEIG,GAAe1B,GAAe5R,UAE9BuT,GAAqB,SAAUC,EAAQC,GACzC,MAAO,CACLxQ,IAAK,WACH,OAAOoG,EAAoB5O,MAAM+Y,IACnC,EACApK,IAAKqK,GAAU,SAAUlY,GACvB,OAAO8N,EAAoB5O,MAAMgZ,GAAQlY,EAC3C,EACAmY,cAAc,EACdC,YAAY,EAEhB,EAqDA,GAnDIzL,IAGFI,EAAsBgL,GAAc,OAAQC,GAAmB,YAAa,YAG5EjL,EAAsBgL,GAAc,SAAUC,GAAmB,cAGjEjL,EAAsBgL,GAAc,WAAYC,GAAmB,cAAe,gBAGlFjL,EAAsBgL,GAAc,WAAYC,GAAmB,cAAe,gBAGlFjL,EAAsBgL,GAAc,WAAYC,GAAmB,cAAe,gBAGlFjL,EAAsBgL,GAAc,OAAQC,GAAmB,UAAW,YAG1EjL,EAAsBgL,GAAc,WAAYC,GAAmB,cAAe,gBAGlFjL,EAAsBgL,GAAc,OAAQC,GAAmB,UAAW,YAG1EjL,EAAsBgL,GAAc,WAAYC,GAAmB,cAAe,gBAGlFjL,EAAsBgL,GAAc,SAAUC,GAAmB,YAAa,cAG9EjL,EAAsBgL,GAAc,eAAgBC,GAAmB,oBAGvEjL,EAAsBgL,GAAc,OAAQC,GAAmB,UAAW,aAK5ElL,EAAciL,GAAc,UAAU,WACpC,OAAOjK,EAAoB5O,MAAM8W,WACnC,GAAG,CAAEoC,YAAY,IAIjBtL,EAAciL,GAAc,YAAY,WACtC,OAAOjK,EAAoB5O,MAAM8W,WACnC,GAAG,CAAEoC,YAAY,IAEblK,EAAW,CACb,IAAImK,GAAwBnK,EAAUoK,gBAClCC,GAAwBrK,EAAUsK,gBAGlCH,IAAuBvL,EAAcuJ,GAAgB,kBAAmBvR,EAAKuT,GAAuBnK,IAGpGqK,IAAuBzL,EAAcuJ,GAAgB,kBAAmBvR,EAAKyT,GAAuBrK,GAC1G,CAEAV,EAAe6I,GAAgB,OAE/B1K,EAAE,CAAEkB,QAAQ,EAAM4L,aAAa,EAAMjM,QAASI,EAAgB8L,MAAO/L,GAAe,CAClF/K,IAAKyU,I,sBCjhCP,EAAQ,K","sources":["webpack://@internetarchive/bookreader/./src/plugins/url/UrlPlugin.js","webpack://@internetarchive/bookreader/./src/plugins/url/plugin.url.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/string-punycode-to-ascii.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/string-trim-forced.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.object.entries.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.object.from-entries.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.trim.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/web.url.constructor.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/web.url.js"],"sourcesContent":["export class UrlPlugin {\n constructor(options = {}) {\n this.bookReaderOptions = options;\n\n // the canonical order of elements is important in the path and query string\n this.urlSchema = [\n { name: 'page', position: 'path', default: 'n0' },\n { name: 'mode', position: 'path', default: '2up' },\n { name: 'search', position: 'path', deprecated_for: 'q' },\n { name: 'q', position: 'query_param' },\n { name: 'sort', position: 'query_param' },\n { name: 'view', position: 'query_param' },\n { name: 'admin', position: 'query_param' },\n ];\n\n this.urlState = {};\n this.urlMode = this.bookReaderOptions.urlMode || 'hash';\n this.urlHistoryBasePath = this.bookReaderOptions.urlHistoryBasePath || '/';\n this.urlLocationPollId = null;\n this.oldLocationHash = null;\n this.oldUserHash = null;\n }\n\n /**\n * Parse JSON object URL state to string format\n * Arrange path names in an order that it is positioned on the urlSchema\n * @param {Object} urlState\n * @returns {string}\n */\n urlStateToUrlString(urlState) {\n const searchParams = new URLSearchParams();\n const pathParams = {};\n\n Object.keys(urlState).forEach(key => {\n let schema = this.urlSchema.find(schema => schema.name === key);\n if (schema?.deprecated_for) {\n schema = this.urlSchema.find(schemaKey => schemaKey.name === schema.deprecated_for);\n }\n if (schema?.position == 'path') {\n pathParams[schema?.name] = urlState[key];\n } else {\n searchParams.append(schema?.name || key, urlState[key]);\n }\n });\n\n const strPathParams = this.urlSchema\n .filter(s => s.position == 'path')\n .map(schema => pathParams[schema.name] ? `${schema.name}/${pathParams[schema.name]}` : '')\n .join('/');\n\n // replace consecutive slashes with a single slash + remove trailing slashes\n const strStrippedTrailingSlash = `${strPathParams.replace(/\\/+/g, '/').replace(/\\/+$/, '')}`;\n const concatenatedPath = `${strStrippedTrailingSlash}?${searchParams.toString()}`;\n return searchParams.toString() ? concatenatedPath : `${strStrippedTrailingSlash}`;\n }\n\n /**\n * Parse string URL and add it in the current urlState\n * Example:\n * /page/n7/mode/2up => {page: 'n7', mode: '2up'}\n * /page/n7/mode/2up/search/hello => {page: 'n7', mode: '2up', q: 'hello'}\n * @param {string} urlString\n * @returns {object}\n */\n urlStringToUrlState(urlString) {\n const urlState = {};\n\n // Fetch searchParams from given {str}\n // Note: whole URL path is needed for URL parsing\n const urlPath = new URL(urlString, 'http://example.com');\n const urlSearchParamsObj = Object.fromEntries(urlPath.searchParams.entries());\n const splitUrlMatches = urlPath.pathname.match(/[^\\\\/]+\\/[^\\\\/]+/g);\n const urlStrSplitSlashObj = splitUrlMatches ? Object.fromEntries(splitUrlMatches.map(x => x.split('/'))) : {};\n\n const doesKeyExists = (_object, _key) => {\n return Object.keys(_object).some(value => value == _key);\n };\n\n // Add path objects to urlState\n this.urlSchema\n .filter(schema => schema.position == 'path')\n .forEach(schema => {\n const hasPropertyKey = doesKeyExists(urlStrSplitSlashObj, schema.name);\n const hasDeprecatedKey = doesKeyExists(schema, 'deprecated_for') && hasPropertyKey;\n\n if (hasDeprecatedKey) {\n urlState[schema.deprecated_for] = urlStrSplitSlashObj[schema.name];\n return;\n }\n\n if (hasPropertyKey) {\n urlState[schema.name] = urlStrSplitSlashObj[schema.name];\n return;\n }\n });\n\n // Add searchParams to urlState\n Object.entries(urlSearchParamsObj).forEach(([key, value]) => {\n urlState[key] = value;\n });\n\n return urlState;\n }\n\n /**\n * Add or update key-value to the urlState\n * @param {string} key\n * @param {string} val\n */\n setUrlParam(key, value) {\n this.urlState[key] = value;\n\n this.pushToAddressBar();\n }\n\n /**\n * Delete key-value to the urlState\n * @param {string} key\n */\n removeUrlParam(key) {\n delete this.urlState[key];\n\n this.pushToAddressBar();\n }\n\n /**\n * Get key-value from the urlState\n * @param {string} key\n * @return {string}\n */\n getUrlParam(key) {\n return this.urlState[key];\n }\n\n /**\n * Push URL params to addressbar\n */\n pushToAddressBar() {\n const urlStrPath = this.urlStateToUrlString(this.urlState);\n const concatenatedPath = urlStrPath !== '/' ? urlStrPath : '';\n if (this.urlMode == 'history') {\n if (!window.history || !window.history.replaceState) {\n this.options.urlMode = 'hash';\n } else {\n const newUrlPath = `${this.urlHistoryBasePath}${concatenatedPath}`.trim().replace(/(\\/+)/g, '/');\n try {\n window.history.replaceState({}, null, newUrlPath);\n } catch (e) {\n // DOMException on Chrome when in sandboxed iframe\n this.urlMode = 'hash';\n }\n }\n }\n\n if (this.urlMode == 'hash') {\n window.location.replace('#' + concatenatedPath);\n }\n this.oldLocationHash = urlStrPath;\n }\n\n /**\n * Get the url and check if it has changed\n * If it was changeed, update the urlState\n */\n listenForHashChanges() {\n this.oldLocationHash = window.location.hash.substr(1);\n if (this.urlLocationPollId) {\n clearInterval(this.urlLocationPollId);\n this.urlLocationPollId = null;\n }\n\n // check if the URL changes\n const updateHash = () => {\n const newFragment = window.location.hash.substr(1);\n const hasFragmentChange = newFragment != this.oldLocationHash;\n\n if (!hasFragmentChange) { return; }\n\n this.urlState = this.urlStringToUrlState(newFragment);\n };\n this.urlLocationPollId = setInterval(updateHash, 500);\n }\n\n /**\n * Will read either the hash or URL and return the bookreader fragment\n */\n pullFromAddressBar (location = window.location) {\n const path = this.urlMode === 'history'\n ? (location.pathname.substr(this.urlHistoryBasePath.length) + location.search)\n : location.hash.substr(1);\n this.urlState = this.urlStringToUrlState(path);\n }\n}\n","/* global BookReader */\n\nimport { UrlPlugin } from \"./UrlPlugin\";\n\n/**\n * Plugin for URL management in BookReader\n * Note read more about the url \"fragment\" here:\n * https://openlibrary.org/dev/docs/bookurls\n */\n\njQuery.extend(BookReader.defaultOptions, {\n enableUrlPlugin: true,\n bookId: '',\n /** @type {string} Defaults can be a urlFragment string */\n defaults: null,\n updateWindowTitle: false,\n\n /** @type {'history' | 'hash'} */\n urlMode: 'hash',\n\n /**\n * When using 'history' mode, this part of the URL is kept constant\n * @example /details/plato/\n */\n urlHistoryBasePath: '/',\n\n /** Only these params will be reflected onto the URL */\n urlTrackedParams: ['page', 'search', 'mode', 'region', 'highlight', 'view'],\n\n /** If true, don't update the URL when `page == n0 (eg \"/page/n0\")` */\n urlTrackIndex0: false,\n});\n\n/** @override */\nBookReader.prototype.setup = (function(super_) {\n return function(options) {\n super_.call(this, options);\n\n this.bookId = options.bookId;\n this.defaults = options.defaults;\n\n this.locationPollId = null;\n this.oldLocationHash = null;\n this.oldUserHash = null;\n };\n})(BookReader.prototype.setup);\n\n/** @override */\nBookReader.prototype.init = (function(super_) {\n return function() {\n\n if (this.options.enableUrlPlugin) {\n this.bind(BookReader.eventNames.PostInit, () => {\n const { updateWindowTitle, urlMode } = this.options;\n if (updateWindowTitle) {\n document.title = this.shortTitle(this.bookTitle, 50);\n }\n if (urlMode === 'hash') {\n this.urlStartLocationPolling();\n }\n });\n\n this.bind(BookReader.eventNames.fragmentChange,\n this.urlUpdateFragment.bind(this)\n );\n }\n super_.call(this);\n };\n})(BookReader.prototype.init);\n\n/**\n * Returns a shortened version of the title with the maximum number of characters\n * @param {number} maximumCharacters\n * @return {string}\n */\nBookReader.prototype.shortTitle = function(maximumCharacters) {\n if (this.bookTitle.length < maximumCharacters) {\n return this.bookTitle;\n }\n\n const title = `${this.bookTitle.substr(0, maximumCharacters - 3)}...`;\n return title;\n};\n\n/**\n * Starts polling of window.location to see hash fragment changes\n */\nBookReader.prototype.urlStartLocationPolling = function() {\n this.oldLocationHash = this.urlReadFragment();\n\n if (this.locationPollId) {\n clearInterval(this.locationPollId);\n this.locationPollId = null;\n }\n\n const updateHash = () => {\n const newFragment = this.urlReadFragment();\n const hasFragmentChange = (newFragment != this.oldLocationHash) && (newFragment != this.oldUserHash);\n\n if (!hasFragmentChange) { return; }\n\n const params = this.paramsFromFragment(newFragment);\n\n const updateParams = () => this.updateFromParams(params);\n\n this.trigger(BookReader.eventNames.stop);\n if (this.animating) {\n // Queue change if animating\n if (this.autoStop) this.autoStop();\n this.animationFinishedCallback = updateParams;\n } else {\n // update immediately\n updateParams();\n }\n this.oldUserHash = newFragment;\n };\n\n this.locationPollId = setInterval(updateHash, 500);\n};\n\n/**\n * Update URL from the current parameters.\n * Call this instead of manually using window.location.replace\n */\nBookReader.prototype.urlUpdateFragment = function() {\n const allParams = this.paramsFromCurrent();\n const { urlTrackIndex0, urlTrackedParams } = this.options;\n\n if (!urlTrackIndex0\n && (typeof(allParams.index) !== 'undefined')\n && allParams.index === 0) {\n delete allParams.index;\n delete allParams.page;\n }\n\n const params = urlTrackedParams.reduce((validParams, paramName) => {\n if (paramName in allParams) {\n validParams[paramName] = allParams[paramName];\n }\n return validParams;\n }, {});\n\n const newFragment = this.fragmentFromParams(params, this.options.urlMode);\n const currFragment = this.urlReadFragment();\n const currQueryString = this.getLocationSearch();\n const newQueryString = this.queryStringFromParams(params, currQueryString, this.options.urlMode);\n if (currFragment === newFragment && currQueryString === newQueryString) {\n return;\n }\n\n if (this.options.urlMode === 'history') {\n if (!window.history || !window.history.replaceState) {\n this.options.urlMode = 'hash';\n } else {\n const baseWithoutSlash = this.options.urlHistoryBasePath.replace(/\\/+$/, '');\n const newFragmentWithSlash = newFragment === '' ? '' : `/${newFragment}`;\n\n const newUrlPath = `${baseWithoutSlash}${newFragmentWithSlash}${newQueryString}`;\n try {\n window.history.replaceState({}, null, newUrlPath);\n this.oldLocationHash = newFragment + newQueryString;\n } catch (e) {\n // DOMException on Chrome when in sandboxed iframe\n this.options.urlMode = 'hash';\n }\n }\n }\n\n if (this.options.urlMode === 'hash') {\n const newQueryStringSearch = this.urlParamsFiltersOnlySearch(this.readQueryString());\n window.location.replace('#' + newFragment + newQueryStringSearch);\n this.oldLocationHash = newFragment + newQueryStringSearch;\n }\n};\n\n/**\n * @private\n * Filtering query parameters to select only book search param (?q=foo)\n This needs to be updated/URL system modified if future query params are to be added\n * @param {string} url\n * @return {string}\n * */\nBookReader.prototype.urlParamsFiltersOnlySearch = function(url) {\n const params = new URLSearchParams(url);\n return params.has('q') ? `?${new URLSearchParams({ q: params.get('q') })}` : '';\n};\n\n\n/**\n * Will read either the hash or URL and return the bookreader fragment\n * @return {string}\n */\nBookReader.prototype.urlReadFragment = function() {\n const { urlMode, urlHistoryBasePath } = this.options;\n if (urlMode === 'history') {\n return window.location.pathname.substr(urlHistoryBasePath.length);\n } else {\n return window.location.hash.substr(1);\n }\n};\n\n/**\n * Will read the hash return the bookreader fragment\n * @return {string}\n */\nBookReader.prototype.urlReadHashFragment = function() {\n return window.location.hash.substr(1);\n};\nexport class BookreaderUrlPlugin extends BookReader {\n init() {\n if (this.options.enableUrlPlugin) {\n this.urlPlugin = new UrlPlugin(this.options);\n this.bind(BookReader.eventNames.PostInit, () => {\n const { urlMode } = this.options;\n\n if (urlMode === 'hash') {\n this.urlPlugin.listenForHashChanges();\n }\n });\n }\n\n super.init();\n }\n}\n\nwindow.BookReader = BookreaderUrlPlugin;\nexport default BookreaderUrlPlugin;\n","// based on https://github.com/bestiejs/punycode.js/blob/master/punycode.js\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\nvar base = 36;\nvar tMin = 1;\nvar tMax = 26;\nvar skew = 38;\nvar damp = 700;\nvar initialBias = 72;\nvar initialN = 128; // 0x80\nvar delimiter = '-'; // '\\x2D'\nvar regexNonASCII = /[^\\0-\\u007E]/; // non-ASCII chars\nvar regexSeparators = /[.\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\nvar OVERFLOW_ERROR = 'Overflow: input needs wider integers to process';\nvar baseMinusTMin = base - tMin;\n\nvar $RangeError = RangeError;\nvar exec = uncurryThis(regexSeparators.exec);\nvar floor = Math.floor;\nvar fromCharCode = String.fromCharCode;\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar join = uncurryThis([].join);\nvar push = uncurryThis([].push);\nvar replace = uncurryThis(''.replace);\nvar split = uncurryThis(''.split);\nvar toLowerCase = uncurryThis(''.toLowerCase);\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n */\nvar ucs2decode = function (string) {\n var output = [];\n var counter = 0;\n var length = string.length;\n while (counter < length) {\n var value = charCodeAt(string, counter++);\n if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n // It's a high surrogate, and there is a next character.\n var extra = charCodeAt(string, counter++);\n if ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n push(output, ((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n } else {\n // It's an unmatched surrogate; only append this code unit, in case the\n // next code unit is the high surrogate of a surrogate pair.\n push(output, value);\n counter--;\n }\n } else {\n push(output, value);\n }\n }\n return output;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n */\nvar digitToBasic = function (digit) {\n // 0..25 map to ASCII a..z or A..Z\n // 26..35 map to ASCII 0..9\n return digit + 22 + 75 * (digit < 26);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n */\nvar adapt = function (delta, numPoints, firstTime) {\n var k = 0;\n delta = firstTime ? floor(delta / damp) : delta >> 1;\n delta += floor(delta / numPoints);\n while (delta > baseMinusTMin * tMax >> 1) {\n delta = floor(delta / baseMinusTMin);\n k += base;\n }\n return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n */\nvar encode = function (input) {\n var output = [];\n\n // Convert the input in UCS-2 to an array of Unicode code points.\n input = ucs2decode(input);\n\n // Cache the length.\n var inputLength = input.length;\n\n // Initialize the state.\n var n = initialN;\n var delta = 0;\n var bias = initialBias;\n var i, currentValue;\n\n // Handle the basic code points.\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue < 0x80) {\n push(output, fromCharCode(currentValue));\n }\n }\n\n var basicLength = output.length; // number of basic code points.\n var handledCPCount = basicLength; // number of code points that have been handled;\n\n // Finish the basic string with a delimiter unless it's empty.\n if (basicLength) {\n push(output, delimiter);\n }\n\n // Main encoding loop:\n while (handledCPCount < inputLength) {\n // All non-basic code points < n have been handled already. Find the next larger one:\n var m = maxInt;\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue >= n && currentValue < m) {\n m = currentValue;\n }\n }\n\n // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>, but guard against overflow.\n var handledCPCountPlusOne = handledCPCount + 1;\n if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n throw $RangeError(OVERFLOW_ERROR);\n }\n\n delta += (m - n) * handledCPCountPlusOne;\n n = m;\n\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue < n && ++delta > maxInt) {\n throw $RangeError(OVERFLOW_ERROR);\n }\n if (currentValue == n) {\n // Represent delta as a generalized variable-length integer.\n var q = delta;\n var k = base;\n while (true) {\n var t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n if (q < t) break;\n var qMinusT = q - t;\n var baseMinusT = base - t;\n push(output, fromCharCode(digitToBasic(t + qMinusT % baseMinusT)));\n q = floor(qMinusT / baseMinusT);\n k += base;\n }\n\n push(output, fromCharCode(digitToBasic(q)));\n bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n delta = 0;\n handledCPCount++;\n }\n }\n\n delta++;\n n++;\n }\n return join(output, '');\n};\n\nmodule.exports = function (input) {\n var encoded = [];\n var labels = split(replace(toLowerCase(input), regexSeparators, '\\u002E'), '.');\n var i, label;\n for (i = 0; i < labels.length; i++) {\n label = labels[i];\n push(encoded, exec(regexNonASCII, label) ? 'xn--' + encode(label) : label);\n }\n return join(encoded, '.');\n};\n","var PROPER_FUNCTION_NAME = require('../internals/function-name').PROPER;\nvar fails = require('../internals/fails');\nvar whitespaces = require('../internals/whitespaces');\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n return !!whitespaces[METHOD_NAME]()\n || non[METHOD_NAME]() !== non\n || (PROPER_FUNCTION_NAME && whitespaces[METHOD_NAME].name !== METHOD_NAME);\n });\n};\n","var $ = require('../internals/export');\nvar $entries = require('../internals/object-to-array').entries;\n\n// `Object.entries` method\n// https://tc39.es/ecma262/#sec-object.entries\n$({ target: 'Object', stat: true }, {\n entries: function entries(O) {\n return $entries(O);\n }\n});\n","var $ = require('../internals/export');\nvar iterate = require('../internals/iterate');\nvar createProperty = require('../internals/create-property');\n\n// `Object.fromEntries` method\n// https://github.com/tc39/proposal-object-from-entries\n$({ target: 'Object', stat: true }, {\n fromEntries: function fromEntries(iterable) {\n var obj = {};\n iterate(iterable, function (k, v) {\n createProperty(obj, k, v);\n }, { AS_ENTRIES: true });\n return obj;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $trim = require('../internals/string-trim').trim;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\n// `String.prototype.trim` method\n// https://tc39.es/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n trim: function trim() {\n return $trim(this);\n }\n});\n","'use strict';\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\nrequire('../modules/es.string.iterator');\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar USE_NATIVE_URL = require('../internals/url-constructor-detection');\nvar global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar anInstance = require('../internals/an-instance');\nvar hasOwn = require('../internals/has-own-property');\nvar assign = require('../internals/object-assign');\nvar arrayFrom = require('../internals/array-from');\nvar arraySlice = require('../internals/array-slice-simple');\nvar codeAt = require('../internals/string-multibyte').codeAt;\nvar toASCII = require('../internals/string-punycode-to-ascii');\nvar $toString = require('../internals/to-string');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar validateArgumentsLength = require('../internals/validate-arguments-length');\nvar URLSearchParamsModule = require('../modules/web.url-search-params.constructor');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar getInternalURLState = InternalStateModule.getterFor('URL');\nvar URLSearchParams = URLSearchParamsModule.URLSearchParams;\nvar getInternalSearchParamsState = URLSearchParamsModule.getState;\n\nvar NativeURL = global.URL;\nvar TypeError = global.TypeError;\nvar parseInt = global.parseInt;\nvar floor = Math.floor;\nvar pow = Math.pow;\nvar charAt = uncurryThis(''.charAt);\nvar exec = uncurryThis(/./.exec);\nvar join = uncurryThis([].join);\nvar numberToString = uncurryThis(1.0.toString);\nvar pop = uncurryThis([].pop);\nvar push = uncurryThis([].push);\nvar replace = uncurryThis(''.replace);\nvar shift = uncurryThis([].shift);\nvar split = uncurryThis(''.split);\nvar stringSlice = uncurryThis(''.slice);\nvar toLowerCase = uncurryThis(''.toLowerCase);\nvar unshift = uncurryThis([].unshift);\n\nvar INVALID_AUTHORITY = 'Invalid authority';\nvar INVALID_SCHEME = 'Invalid scheme';\nvar INVALID_HOST = 'Invalid host';\nvar INVALID_PORT = 'Invalid port';\n\nvar ALPHA = /[a-z]/i;\n// eslint-disable-next-line regexp/no-obscure-range -- safe\nvar ALPHANUMERIC = /[\\d+-.a-z]/i;\nvar DIGIT = /\\d/;\nvar HEX_START = /^0x/i;\nvar OCT = /^[0-7]+$/;\nvar DEC = /^\\d+$/;\nvar HEX = /^[\\da-f]+$/i;\n/* eslint-disable regexp/no-control-character -- safe */\nvar FORBIDDEN_HOST_CODE_POINT = /[\\0\\t\\n\\r #%/:<>?@[\\\\\\]^|]/;\nvar FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\\0\\t\\n\\r #/:<>?@[\\\\\\]^|]/;\nvar LEADING_C0_CONTROL_OR_SPACE = /^[\\u0000-\\u0020]+/;\nvar TRAILING_C0_CONTROL_OR_SPACE = /(^|[^\\u0000-\\u0020])[\\u0000-\\u0020]+$/;\nvar TAB_AND_NEW_LINE = /[\\t\\n\\r]/g;\n/* eslint-enable regexp/no-control-character -- safe */\nvar EOF;\n\n// https://url.spec.whatwg.org/#ipv4-number-parser\nvar parseIPv4 = function (input) {\n var parts = split(input, '.');\n var partsLength, numbers, index, part, radix, number, ipv4;\n if (parts.length && parts[parts.length - 1] == '') {\n parts.length--;\n }\n partsLength = parts.length;\n if (partsLength > 4) return input;\n numbers = [];\n for (index = 0; index < partsLength; index++) {\n part = parts[index];\n if (part == '') return input;\n radix = 10;\n if (part.length > 1 && charAt(part, 0) == '0') {\n radix = exec(HEX_START, part) ? 16 : 8;\n part = stringSlice(part, radix == 8 ? 1 : 2);\n }\n if (part === '') {\n number = 0;\n } else {\n if (!exec(radix == 10 ? DEC : radix == 8 ? OCT : HEX, part)) return input;\n number = parseInt(part, radix);\n }\n push(numbers, number);\n }\n for (index = 0; index < partsLength; index++) {\n number = numbers[index];\n if (index == partsLength - 1) {\n if (number >= pow(256, 5 - partsLength)) return null;\n } else if (number > 255) return null;\n }\n ipv4 = pop(numbers);\n for (index = 0; index < numbers.length; index++) {\n ipv4 += numbers[index] * pow(256, 3 - index);\n }\n return ipv4;\n};\n\n// https://url.spec.whatwg.org/#concept-ipv6-parser\n// eslint-disable-next-line max-statements -- TODO\nvar parseIPv6 = function (input) {\n var address = [0, 0, 0, 0, 0, 0, 0, 0];\n var pieceIndex = 0;\n var compress = null;\n var pointer = 0;\n var value, length, numbersSeen, ipv4Piece, number, swaps, swap;\n\n var chr = function () {\n return charAt(input, pointer);\n };\n\n if (chr() == ':') {\n if (charAt(input, 1) != ':') return;\n pointer += 2;\n pieceIndex++;\n compress = pieceIndex;\n }\n while (chr()) {\n if (pieceIndex == 8) return;\n if (chr() == ':') {\n if (compress !== null) return;\n pointer++;\n pieceIndex++;\n compress = pieceIndex;\n continue;\n }\n value = length = 0;\n while (length < 4 && exec(HEX, chr())) {\n value = value * 16 + parseInt(chr(), 16);\n pointer++;\n length++;\n }\n if (chr() == '.') {\n if (length == 0) return;\n pointer -= length;\n if (pieceIndex > 6) return;\n numbersSeen = 0;\n while (chr()) {\n ipv4Piece = null;\n if (numbersSeen > 0) {\n if (chr() == '.' && numbersSeen < 4) pointer++;\n else return;\n }\n if (!exec(DIGIT, chr())) return;\n while (exec(DIGIT, chr())) {\n number = parseInt(chr(), 10);\n if (ipv4Piece === null) ipv4Piece = number;\n else if (ipv4Piece == 0) return;\n else ipv4Piece = ipv4Piece * 10 + number;\n if (ipv4Piece > 255) return;\n pointer++;\n }\n address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece;\n numbersSeen++;\n if (numbersSeen == 2 || numbersSeen == 4) pieceIndex++;\n }\n if (numbersSeen != 4) return;\n break;\n } else if (chr() == ':') {\n pointer++;\n if (!chr()) return;\n } else if (chr()) return;\n address[pieceIndex++] = value;\n }\n if (compress !== null) {\n swaps = pieceIndex - compress;\n pieceIndex = 7;\n while (pieceIndex != 0 && swaps > 0) {\n swap = address[pieceIndex];\n address[pieceIndex--] = address[compress + swaps - 1];\n address[compress + --swaps] = swap;\n }\n } else if (pieceIndex != 8) return;\n return address;\n};\n\nvar findLongestZeroSequence = function (ipv6) {\n var maxIndex = null;\n var maxLength = 1;\n var currStart = null;\n var currLength = 0;\n var index = 0;\n for (; index < 8; index++) {\n if (ipv6[index] !== 0) {\n if (currLength > maxLength) {\n maxIndex = currStart;\n maxLength = currLength;\n }\n currStart = null;\n currLength = 0;\n } else {\n if (currStart === null) currStart = index;\n ++currLength;\n }\n }\n if (currLength > maxLength) {\n maxIndex = currStart;\n maxLength = currLength;\n }\n return maxIndex;\n};\n\n// https://url.spec.whatwg.org/#host-serializing\nvar serializeHost = function (host) {\n var result, index, compress, ignore0;\n // ipv4\n if (typeof host == 'number') {\n result = [];\n for (index = 0; index < 4; index++) {\n unshift(result, host % 256);\n host = floor(host / 256);\n } return join(result, '.');\n // ipv6\n } else if (typeof host == 'object') {\n result = '';\n compress = findLongestZeroSequence(host);\n for (index = 0; index < 8; index++) {\n if (ignore0 && host[index] === 0) continue;\n if (ignore0) ignore0 = false;\n if (compress === index) {\n result += index ? ':' : '::';\n ignore0 = true;\n } else {\n result += numberToString(host[index], 16);\n if (index < 7) result += ':';\n }\n }\n return '[' + result + ']';\n } return host;\n};\n\nvar C0ControlPercentEncodeSet = {};\nvar fragmentPercentEncodeSet = assign({}, C0ControlPercentEncodeSet, {\n ' ': 1, '\"': 1, '<': 1, '>': 1, '`': 1\n});\nvar pathPercentEncodeSet = assign({}, fragmentPercentEncodeSet, {\n '#': 1, '?': 1, '{': 1, '}': 1\n});\nvar userinfoPercentEncodeSet = assign({}, pathPercentEncodeSet, {\n '/': 1, ':': 1, ';': 1, '=': 1, '@': 1, '[': 1, '\\\\': 1, ']': 1, '^': 1, '|': 1\n});\n\nvar percentEncode = function (chr, set) {\n var code = codeAt(chr, 0);\n return code > 0x20 && code < 0x7F && !hasOwn(set, chr) ? chr : encodeURIComponent(chr);\n};\n\n// https://url.spec.whatwg.org/#special-scheme\nvar specialSchemes = {\n ftp: 21,\n file: null,\n http: 80,\n https: 443,\n ws: 80,\n wss: 443\n};\n\n// https://url.spec.whatwg.org/#windows-drive-letter\nvar isWindowsDriveLetter = function (string, normalized) {\n var second;\n return string.length == 2 && exec(ALPHA, charAt(string, 0))\n && ((second = charAt(string, 1)) == ':' || (!normalized && second == '|'));\n};\n\n// https://url.spec.whatwg.org/#start-with-a-windows-drive-letter\nvar startsWithWindowsDriveLetter = function (string) {\n var third;\n return string.length > 1 && isWindowsDriveLetter(stringSlice(string, 0, 2)) && (\n string.length == 2 ||\n ((third = charAt(string, 2)) === '/' || third === '\\\\' || third === '?' || third === '#')\n );\n};\n\n// https://url.spec.whatwg.org/#single-dot-path-segment\nvar isSingleDot = function (segment) {\n return segment === '.' || toLowerCase(segment) === '%2e';\n};\n\n// https://url.spec.whatwg.org/#double-dot-path-segment\nvar isDoubleDot = function (segment) {\n segment = toLowerCase(segment);\n return segment === '..' || segment === '%2e.' || segment === '.%2e' || segment === '%2e%2e';\n};\n\n// States:\nvar SCHEME_START = {};\nvar SCHEME = {};\nvar NO_SCHEME = {};\nvar SPECIAL_RELATIVE_OR_AUTHORITY = {};\nvar PATH_OR_AUTHORITY = {};\nvar RELATIVE = {};\nvar RELATIVE_SLASH = {};\nvar SPECIAL_AUTHORITY_SLASHES = {};\nvar SPECIAL_AUTHORITY_IGNORE_SLASHES = {};\nvar AUTHORITY = {};\nvar HOST = {};\nvar HOSTNAME = {};\nvar PORT = {};\nvar FILE = {};\nvar FILE_SLASH = {};\nvar FILE_HOST = {};\nvar PATH_START = {};\nvar PATH = {};\nvar CANNOT_BE_A_BASE_URL_PATH = {};\nvar QUERY = {};\nvar FRAGMENT = {};\n\nvar URLState = function (url, isBase, base) {\n var urlString = $toString(url);\n var baseState, failure, searchParams;\n if (isBase) {\n failure = this.parse(urlString);\n if (failure) throw TypeError(failure);\n this.searchParams = null;\n } else {\n if (base !== undefined) baseState = new URLState(base, true);\n failure = this.parse(urlString, null, baseState);\n if (failure) throw TypeError(failure);\n searchParams = getInternalSearchParamsState(new URLSearchParams());\n searchParams.bindURL(this);\n this.searchParams = searchParams;\n }\n};\n\nURLState.prototype = {\n type: 'URL',\n // https://url.spec.whatwg.org/#url-parsing\n // eslint-disable-next-line max-statements -- TODO\n parse: function (input, stateOverride, base) {\n var url = this;\n var state = stateOverride || SCHEME_START;\n var pointer = 0;\n var buffer = '';\n var seenAt = false;\n var seenBracket = false;\n var seenPasswordToken = false;\n var codePoints, chr, bufferCodePoints, failure;\n\n input = $toString(input);\n\n if (!stateOverride) {\n url.scheme = '';\n url.username = '';\n url.password = '';\n url.host = null;\n url.port = null;\n url.path = [];\n url.query = null;\n url.fragment = null;\n url.cannotBeABaseURL = false;\n input = replace(input, LEADING_C0_CONTROL_OR_SPACE, '');\n input = replace(input, TRAILING_C0_CONTROL_OR_SPACE, '$1');\n }\n\n input = replace(input, TAB_AND_NEW_LINE, '');\n\n codePoints = arrayFrom(input);\n\n while (pointer <= codePoints.length) {\n chr = codePoints[pointer];\n switch (state) {\n case SCHEME_START:\n if (chr && exec(ALPHA, chr)) {\n buffer += toLowerCase(chr);\n state = SCHEME;\n } else if (!stateOverride) {\n state = NO_SCHEME;\n continue;\n } else return INVALID_SCHEME;\n break;\n\n case SCHEME:\n if (chr && (exec(ALPHANUMERIC, chr) || chr == '+' || chr == '-' || chr == '.')) {\n buffer += toLowerCase(chr);\n } else if (chr == ':') {\n if (stateOverride && (\n (url.isSpecial() != hasOwn(specialSchemes, buffer)) ||\n (buffer == 'file' && (url.includesCredentials() || url.port !== null)) ||\n (url.scheme == 'file' && !url.host)\n )) return;\n url.scheme = buffer;\n if (stateOverride) {\n if (url.isSpecial() && specialSchemes[url.scheme] == url.port) url.port = null;\n return;\n }\n buffer = '';\n if (url.scheme == 'file') {\n state = FILE;\n } else if (url.isSpecial() && base && base.scheme == url.scheme) {\n state = SPECIAL_RELATIVE_OR_AUTHORITY;\n } else if (url.isSpecial()) {\n state = SPECIAL_AUTHORITY_SLASHES;\n } else if (codePoints[pointer + 1] == '/') {\n state = PATH_OR_AUTHORITY;\n pointer++;\n } else {\n url.cannotBeABaseURL = true;\n push(url.path, '');\n state = CANNOT_BE_A_BASE_URL_PATH;\n }\n } else if (!stateOverride) {\n buffer = '';\n state = NO_SCHEME;\n pointer = 0;\n continue;\n } else return INVALID_SCHEME;\n break;\n\n case NO_SCHEME:\n if (!base || (base.cannotBeABaseURL && chr != '#')) return INVALID_SCHEME;\n if (base.cannotBeABaseURL && chr == '#') {\n url.scheme = base.scheme;\n url.path = arraySlice(base.path);\n url.query = base.query;\n url.fragment = '';\n url.cannotBeABaseURL = true;\n state = FRAGMENT;\n break;\n }\n state = base.scheme == 'file' ? FILE : RELATIVE;\n continue;\n\n case SPECIAL_RELATIVE_OR_AUTHORITY:\n if (chr == '/' && codePoints[pointer + 1] == '/') {\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n pointer++;\n } else {\n state = RELATIVE;\n continue;\n } break;\n\n case PATH_OR_AUTHORITY:\n if (chr == '/') {\n state = AUTHORITY;\n break;\n } else {\n state = PATH;\n continue;\n }\n\n case RELATIVE:\n url.scheme = base.scheme;\n if (chr == EOF) {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.query = base.query;\n } else if (chr == '/' || (chr == '\\\\' && url.isSpecial())) {\n state = RELATIVE_SLASH;\n } else if (chr == '?') {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.query = '';\n state = QUERY;\n } else if (chr == '#') {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.query = base.query;\n url.fragment = '';\n state = FRAGMENT;\n } else {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.path.length--;\n state = PATH;\n continue;\n } break;\n\n case RELATIVE_SLASH:\n if (url.isSpecial() && (chr == '/' || chr == '\\\\')) {\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n } else if (chr == '/') {\n state = AUTHORITY;\n } else {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n state = PATH;\n continue;\n } break;\n\n case SPECIAL_AUTHORITY_SLASHES:\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n if (chr != '/' || charAt(buffer, pointer + 1) != '/') continue;\n pointer++;\n break;\n\n case SPECIAL_AUTHORITY_IGNORE_SLASHES:\n if (chr != '/' && chr != '\\\\') {\n state = AUTHORITY;\n continue;\n } break;\n\n case AUTHORITY:\n if (chr == '@') {\n if (seenAt) buffer = '%40' + buffer;\n seenAt = true;\n bufferCodePoints = arrayFrom(buffer);\n for (var i = 0; i < bufferCodePoints.length; i++) {\n var codePoint = bufferCodePoints[i];\n if (codePoint == ':' && !seenPasswordToken) {\n seenPasswordToken = true;\n continue;\n }\n var encodedCodePoints = percentEncode(codePoint, userinfoPercentEncodeSet);\n if (seenPasswordToken) url.password += encodedCodePoints;\n else url.username += encodedCodePoints;\n }\n buffer = '';\n } else if (\n chr == EOF || chr == '/' || chr == '?' || chr == '#' ||\n (chr == '\\\\' && url.isSpecial())\n ) {\n if (seenAt && buffer == '') return INVALID_AUTHORITY;\n pointer -= arrayFrom(buffer).length + 1;\n buffer = '';\n state = HOST;\n } else buffer += chr;\n break;\n\n case HOST:\n case HOSTNAME:\n if (stateOverride && url.scheme == 'file') {\n state = FILE_HOST;\n continue;\n } else if (chr == ':' && !seenBracket) {\n if (buffer == '') return INVALID_HOST;\n failure = url.parseHost(buffer);\n if (failure) return failure;\n buffer = '';\n state = PORT;\n if (stateOverride == HOSTNAME) return;\n } else if (\n chr == EOF || chr == '/' || chr == '?' || chr == '#' ||\n (chr == '\\\\' && url.isSpecial())\n ) {\n if (url.isSpecial() && buffer == '') return INVALID_HOST;\n if (stateOverride && buffer == '' && (url.includesCredentials() || url.port !== null)) return;\n failure = url.parseHost(buffer);\n if (failure) return failure;\n buffer = '';\n state = PATH_START;\n if (stateOverride) return;\n continue;\n } else {\n if (chr == '[') seenBracket = true;\n else if (chr == ']') seenBracket = false;\n buffer += chr;\n } break;\n\n case PORT:\n if (exec(DIGIT, chr)) {\n buffer += chr;\n } else if (\n chr == EOF || chr == '/' || chr == '?' || chr == '#' ||\n (chr == '\\\\' && url.isSpecial()) ||\n stateOverride\n ) {\n if (buffer != '') {\n var port = parseInt(buffer, 10);\n if (port > 0xFFFF) return INVALID_PORT;\n url.port = (url.isSpecial() && port === specialSchemes[url.scheme]) ? null : port;\n buffer = '';\n }\n if (stateOverride) return;\n state = PATH_START;\n continue;\n } else return INVALID_PORT;\n break;\n\n case FILE:\n url.scheme = 'file';\n if (chr == '/' || chr == '\\\\') state = FILE_SLASH;\n else if (base && base.scheme == 'file') {\n if (chr == EOF) {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.query = base.query;\n } else if (chr == '?') {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.query = '';\n state = QUERY;\n } else if (chr == '#') {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.query = base.query;\n url.fragment = '';\n state = FRAGMENT;\n } else {\n if (!startsWithWindowsDriveLetter(join(arraySlice(codePoints, pointer), ''))) {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.shortenPath();\n }\n state = PATH;\n continue;\n }\n } else {\n state = PATH;\n continue;\n } break;\n\n case FILE_SLASH:\n if (chr == '/' || chr == '\\\\') {\n state = FILE_HOST;\n break;\n }\n if (base && base.scheme == 'file' && !startsWithWindowsDriveLetter(join(arraySlice(codePoints, pointer), ''))) {\n if (isWindowsDriveLetter(base.path[0], true)) push(url.path, base.path[0]);\n else url.host = base.host;\n }\n state = PATH;\n continue;\n\n case FILE_HOST:\n if (chr == EOF || chr == '/' || chr == '\\\\' || chr == '?' || chr == '#') {\n if (!stateOverride && isWindowsDriveLetter(buffer)) {\n state = PATH;\n } else if (buffer == '') {\n url.host = '';\n if (stateOverride) return;\n state = PATH_START;\n } else {\n failure = url.parseHost(buffer);\n if (failure) return failure;\n if (url.host == 'localhost') url.host = '';\n if (stateOverride) return;\n buffer = '';\n state = PATH_START;\n } continue;\n } else buffer += chr;\n break;\n\n case PATH_START:\n if (url.isSpecial()) {\n state = PATH;\n if (chr != '/' && chr != '\\\\') continue;\n } else if (!stateOverride && chr == '?') {\n url.query = '';\n state = QUERY;\n } else if (!stateOverride && chr == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (chr != EOF) {\n state = PATH;\n if (chr != '/') continue;\n } break;\n\n case PATH:\n if (\n chr == EOF || chr == '/' ||\n (chr == '\\\\' && url.isSpecial()) ||\n (!stateOverride && (chr == '?' || chr == '#'))\n ) {\n if (isDoubleDot(buffer)) {\n url.shortenPath();\n if (chr != '/' && !(chr == '\\\\' && url.isSpecial())) {\n push(url.path, '');\n }\n } else if (isSingleDot(buffer)) {\n if (chr != '/' && !(chr == '\\\\' && url.isSpecial())) {\n push(url.path, '');\n }\n } else {\n if (url.scheme == 'file' && !url.path.length && isWindowsDriveLetter(buffer)) {\n if (url.host) url.host = '';\n buffer = charAt(buffer, 0) + ':'; // normalize windows drive letter\n }\n push(url.path, buffer);\n }\n buffer = '';\n if (url.scheme == 'file' && (chr == EOF || chr == '?' || chr == '#')) {\n while (url.path.length > 1 && url.path[0] === '') {\n shift(url.path);\n }\n }\n if (chr == '?') {\n url.query = '';\n state = QUERY;\n } else if (chr == '#') {\n url.fragment = '';\n state = FRAGMENT;\n }\n } else {\n buffer += percentEncode(chr, pathPercentEncodeSet);\n } break;\n\n case CANNOT_BE_A_BASE_URL_PATH:\n if (chr == '?') {\n url.query = '';\n state = QUERY;\n } else if (chr == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (chr != EOF) {\n url.path[0] += percentEncode(chr, C0ControlPercentEncodeSet);\n } break;\n\n case QUERY:\n if (!stateOverride && chr == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (chr != EOF) {\n if (chr == \"'\" && url.isSpecial()) url.query += '%27';\n else if (chr == '#') url.query += '%23';\n else url.query += percentEncode(chr, C0ControlPercentEncodeSet);\n } break;\n\n case FRAGMENT:\n if (chr != EOF) url.fragment += percentEncode(chr, fragmentPercentEncodeSet);\n break;\n }\n\n pointer++;\n }\n },\n // https://url.spec.whatwg.org/#host-parsing\n parseHost: function (input) {\n var result, codePoints, index;\n if (charAt(input, 0) == '[') {\n if (charAt(input, input.length - 1) != ']') return INVALID_HOST;\n result = parseIPv6(stringSlice(input, 1, -1));\n if (!result) return INVALID_HOST;\n this.host = result;\n // opaque host\n } else if (!this.isSpecial()) {\n if (exec(FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT, input)) return INVALID_HOST;\n result = '';\n codePoints = arrayFrom(input);\n for (index = 0; index < codePoints.length; index++) {\n result += percentEncode(codePoints[index], C0ControlPercentEncodeSet);\n }\n this.host = result;\n } else {\n input = toASCII(input);\n if (exec(FORBIDDEN_HOST_CODE_POINT, input)) return INVALID_HOST;\n result = parseIPv4(input);\n if (result === null) return INVALID_HOST;\n this.host = result;\n }\n },\n // https://url.spec.whatwg.org/#cannot-have-a-username-password-port\n cannotHaveUsernamePasswordPort: function () {\n return !this.host || this.cannotBeABaseURL || this.scheme == 'file';\n },\n // https://url.spec.whatwg.org/#include-credentials\n includesCredentials: function () {\n return this.username != '' || this.password != '';\n },\n // https://url.spec.whatwg.org/#is-special\n isSpecial: function () {\n return hasOwn(specialSchemes, this.scheme);\n },\n // https://url.spec.whatwg.org/#shorten-a-urls-path\n shortenPath: function () {\n var path = this.path;\n var pathSize = path.length;\n if (pathSize && (this.scheme != 'file' || pathSize != 1 || !isWindowsDriveLetter(path[0], true))) {\n path.length--;\n }\n },\n // https://url.spec.whatwg.org/#concept-url-serializer\n serialize: function () {\n var url = this;\n var scheme = url.scheme;\n var username = url.username;\n var password = url.password;\n var host = url.host;\n var port = url.port;\n var path = url.path;\n var query = url.query;\n var fragment = url.fragment;\n var output = scheme + ':';\n if (host !== null) {\n output += '//';\n if (url.includesCredentials()) {\n output += username + (password ? ':' + password : '') + '@';\n }\n output += serializeHost(host);\n if (port !== null) output += ':' + port;\n } else if (scheme == 'file') output += '//';\n output += url.cannotBeABaseURL ? path[0] : path.length ? '/' + join(path, '/') : '';\n if (query !== null) output += '?' + query;\n if (fragment !== null) output += '#' + fragment;\n return output;\n },\n // https://url.spec.whatwg.org/#dom-url-href\n setHref: function (href) {\n var failure = this.parse(href);\n if (failure) throw TypeError(failure);\n this.searchParams.update();\n },\n // https://url.spec.whatwg.org/#dom-url-origin\n getOrigin: function () {\n var scheme = this.scheme;\n var port = this.port;\n if (scheme == 'blob') try {\n return new URLConstructor(scheme.path[0]).origin;\n } catch (error) {\n return 'null';\n }\n if (scheme == 'file' || !this.isSpecial()) return 'null';\n return scheme + '://' + serializeHost(this.host) + (port !== null ? ':' + port : '');\n },\n // https://url.spec.whatwg.org/#dom-url-protocol\n getProtocol: function () {\n return this.scheme + ':';\n },\n setProtocol: function (protocol) {\n this.parse($toString(protocol) + ':', SCHEME_START);\n },\n // https://url.spec.whatwg.org/#dom-url-username\n getUsername: function () {\n return this.username;\n },\n setUsername: function (username) {\n var codePoints = arrayFrom($toString(username));\n if (this.cannotHaveUsernamePasswordPort()) return;\n this.username = '';\n for (var i = 0; i < codePoints.length; i++) {\n this.username += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n }\n },\n // https://url.spec.whatwg.org/#dom-url-password\n getPassword: function () {\n return this.password;\n },\n setPassword: function (password) {\n var codePoints = arrayFrom($toString(password));\n if (this.cannotHaveUsernamePasswordPort()) return;\n this.password = '';\n for (var i = 0; i < codePoints.length; i++) {\n this.password += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n }\n },\n // https://url.spec.whatwg.org/#dom-url-host\n getHost: function () {\n var host = this.host;\n var port = this.port;\n return host === null ? ''\n : port === null ? serializeHost(host)\n : serializeHost(host) + ':' + port;\n },\n setHost: function (host) {\n if (this.cannotBeABaseURL) return;\n this.parse(host, HOST);\n },\n // https://url.spec.whatwg.org/#dom-url-hostname\n getHostname: function () {\n var host = this.host;\n return host === null ? '' : serializeHost(host);\n },\n setHostname: function (hostname) {\n if (this.cannotBeABaseURL) return;\n this.parse(hostname, HOSTNAME);\n },\n // https://url.spec.whatwg.org/#dom-url-port\n getPort: function () {\n var port = this.port;\n return port === null ? '' : $toString(port);\n },\n setPort: function (port) {\n if (this.cannotHaveUsernamePasswordPort()) return;\n port = $toString(port);\n if (port == '') this.port = null;\n else this.parse(port, PORT);\n },\n // https://url.spec.whatwg.org/#dom-url-pathname\n getPathname: function () {\n var path = this.path;\n return this.cannotBeABaseURL ? path[0] : path.length ? '/' + join(path, '/') : '';\n },\n setPathname: function (pathname) {\n if (this.cannotBeABaseURL) return;\n this.path = [];\n this.parse(pathname, PATH_START);\n },\n // https://url.spec.whatwg.org/#dom-url-search\n getSearch: function () {\n var query = this.query;\n return query ? '?' + query : '';\n },\n setSearch: function (search) {\n search = $toString(search);\n if (search == '') {\n this.query = null;\n } else {\n if ('?' == charAt(search, 0)) search = stringSlice(search, 1);\n this.query = '';\n this.parse(search, QUERY);\n }\n this.searchParams.update();\n },\n // https://url.spec.whatwg.org/#dom-url-searchparams\n getSearchParams: function () {\n return this.searchParams.facade;\n },\n // https://url.spec.whatwg.org/#dom-url-hash\n getHash: function () {\n var fragment = this.fragment;\n return fragment ? '#' + fragment : '';\n },\n setHash: function (hash) {\n hash = $toString(hash);\n if (hash == '') {\n this.fragment = null;\n return;\n }\n if ('#' == charAt(hash, 0)) hash = stringSlice(hash, 1);\n this.fragment = '';\n this.parse(hash, FRAGMENT);\n },\n update: function () {\n this.query = this.searchParams.serialize() || null;\n }\n};\n\n// `URL` constructor\n// https://url.spec.whatwg.org/#url-class\nvar URLConstructor = function URL(url /* , base */) {\n var that = anInstance(this, URLPrototype);\n var base = validateArgumentsLength(arguments.length, 1) > 1 ? arguments[1] : undefined;\n var state = setInternalState(that, new URLState(url, false, base));\n if (!DESCRIPTORS) {\n that.href = state.serialize();\n that.origin = state.getOrigin();\n that.protocol = state.getProtocol();\n that.username = state.getUsername();\n that.password = state.getPassword();\n that.host = state.getHost();\n that.hostname = state.getHostname();\n that.port = state.getPort();\n that.pathname = state.getPathname();\n that.search = state.getSearch();\n that.searchParams = state.getSearchParams();\n that.hash = state.getHash();\n }\n};\n\nvar URLPrototype = URLConstructor.prototype;\n\nvar accessorDescriptor = function (getter, setter) {\n return {\n get: function () {\n return getInternalURLState(this)[getter]();\n },\n set: setter && function (value) {\n return getInternalURLState(this)[setter](value);\n },\n configurable: true,\n enumerable: true\n };\n};\n\nif (DESCRIPTORS) {\n // `URL.prototype.href` accessors pair\n // https://url.spec.whatwg.org/#dom-url-href\n defineBuiltInAccessor(URLPrototype, 'href', accessorDescriptor('serialize', 'setHref'));\n // `URL.prototype.origin` getter\n // https://url.spec.whatwg.org/#dom-url-origin\n defineBuiltInAccessor(URLPrototype, 'origin', accessorDescriptor('getOrigin'));\n // `URL.prototype.protocol` accessors pair\n // https://url.spec.whatwg.org/#dom-url-protocol\n defineBuiltInAccessor(URLPrototype, 'protocol', accessorDescriptor('getProtocol', 'setProtocol'));\n // `URL.prototype.username` accessors pair\n // https://url.spec.whatwg.org/#dom-url-username\n defineBuiltInAccessor(URLPrototype, 'username', accessorDescriptor('getUsername', 'setUsername'));\n // `URL.prototype.password` accessors pair\n // https://url.spec.whatwg.org/#dom-url-password\n defineBuiltInAccessor(URLPrototype, 'password', accessorDescriptor('getPassword', 'setPassword'));\n // `URL.prototype.host` accessors pair\n // https://url.spec.whatwg.org/#dom-url-host\n defineBuiltInAccessor(URLPrototype, 'host', accessorDescriptor('getHost', 'setHost'));\n // `URL.prototype.hostname` accessors pair\n // https://url.spec.whatwg.org/#dom-url-hostname\n defineBuiltInAccessor(URLPrototype, 'hostname', accessorDescriptor('getHostname', 'setHostname'));\n // `URL.prototype.port` accessors pair\n // https://url.spec.whatwg.org/#dom-url-port\n defineBuiltInAccessor(URLPrototype, 'port', accessorDescriptor('getPort', 'setPort'));\n // `URL.prototype.pathname` accessors pair\n // https://url.spec.whatwg.org/#dom-url-pathname\n defineBuiltInAccessor(URLPrototype, 'pathname', accessorDescriptor('getPathname', 'setPathname'));\n // `URL.prototype.search` accessors pair\n // https://url.spec.whatwg.org/#dom-url-search\n defineBuiltInAccessor(URLPrototype, 'search', accessorDescriptor('getSearch', 'setSearch'));\n // `URL.prototype.searchParams` getter\n // https://url.spec.whatwg.org/#dom-url-searchparams\n defineBuiltInAccessor(URLPrototype, 'searchParams', accessorDescriptor('getSearchParams'));\n // `URL.prototype.hash` accessors pair\n // https://url.spec.whatwg.org/#dom-url-hash\n defineBuiltInAccessor(URLPrototype, 'hash', accessorDescriptor('getHash', 'setHash'));\n}\n\n// `URL.prototype.toJSON` method\n// https://url.spec.whatwg.org/#dom-url-tojson\ndefineBuiltIn(URLPrototype, 'toJSON', function toJSON() {\n return getInternalURLState(this).serialize();\n}, { enumerable: true });\n\n// `URL.prototype.toString` method\n// https://url.spec.whatwg.org/#URL-stringification-behavior\ndefineBuiltIn(URLPrototype, 'toString', function toString() {\n return getInternalURLState(this).serialize();\n}, { enumerable: true });\n\nif (NativeURL) {\n var nativeCreateObjectURL = NativeURL.createObjectURL;\n var nativeRevokeObjectURL = NativeURL.revokeObjectURL;\n // `URL.createObjectURL` method\n // https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL\n if (nativeCreateObjectURL) defineBuiltIn(URLConstructor, 'createObjectURL', bind(nativeCreateObjectURL, NativeURL));\n // `URL.revokeObjectURL` method\n // https://developer.mozilla.org/en-US/docs/Web/API/URL/revokeObjectURL\n if (nativeRevokeObjectURL) defineBuiltIn(URLConstructor, 'revokeObjectURL', bind(nativeRevokeObjectURL, NativeURL));\n}\n\nsetToStringTag(URLConstructor, 'URL');\n\n$({ global: true, constructor: true, forced: !USE_NATIVE_URL, sham: !DESCRIPTORS }, {\n URL: URLConstructor\n});\n","// TODO: Remove this module from `core-js@4` since it's replaced to module below\nrequire('../modules/web.url.constructor');\n"],"names":["super_","UrlPlugin","options","arguments","length","undefined","_classCallCheck","this","bookReaderOptions","urlSchema","name","position","default","deprecated_for","urlState","urlMode","urlHistoryBasePath","urlLocationPollId","oldLocationHash","oldUserHash","key","value","_this","searchParams","URLSearchParams","pathParams","Object","keys","forEach","_schema","_schema2","_schema3","_schema4","schema","find","schemaKey","append","strPathParams","filter","s","map","concat","join","strStrippedTrailingSlash","replace","concatenatedPath","toString","urlString","urlPath","URL","urlSearchParamsObj","fromEntries","entries","splitUrlMatches","pathname","match","urlStrSplitSlashObj","x","split","doesKeyExists","_object","_key","some","hasPropertyKey","_ref","_ref2","pushToAddressBar","urlStrPath","urlStateToUrlString","window","history","replaceState","newUrlPath","trim","e","location","_this2","hash","substr","clearInterval","setInterval","newFragment","urlStringToUrlState","path","search","extend","BookReader","defaultOptions","enableUrlPlugin","bookId","defaults","updateWindowTitle","urlTrackedParams","urlTrackIndex0","prototype","setup","call","locationPollId","init","bind","eventNames","PostInit","_this$options","document","title","shortTitle","bookTitle","urlStartLocationPolling","fragmentChange","urlUpdateFragment","maximumCharacters","urlReadFragment","params","paramsFromFragment","updateParams","updateFromParams","trigger","stop","animating","autoStop","animationFinishedCallback","allParams","paramsFromCurrent","_this$options2","index","page","reduce","validParams","paramName","fragmentFromParams","currFragment","currQueryString","getLocationSearch","newQueryString","queryStringFromParams","baseWithoutSlash","newFragmentWithSlash","newQueryStringSearch","urlParamsFiltersOnlySearch","readQueryString","url","has","q","get","_this$options3","urlReadHashFragment","BookreaderUrlPlugin","_BookReader","_inherits","_super","apply","_this3","urlPlugin","listenForHashChanges","_get","_getPrototypeOf","uncurryThis","maxInt","regexNonASCII","regexSeparators","OVERFLOW_ERROR","$RangeError","RangeError","exec","floor","Math","fromCharCode","String","charCodeAt","push","toLowerCase","digitToBasic","digit","adapt","delta","numPoints","firstTime","k","baseMinusTMin","base","encode","input","output","string","counter","extra","ucs2decode","i","currentValue","inputLength","n","bias","basicLength","handledCPCount","m","handledCPCountPlusOne","t","qMinusT","baseMinusT","module","exports","label","encoded","labels","PROPER_FUNCTION_NAME","fails","whitespaces","METHOD_NAME","$","$entries","target","stat","O","iterate","createProperty","iterable","obj","v","AS_ENTRIES","$trim","proto","forced","forcedStringTrimMethod","EOF","DESCRIPTORS","USE_NATIVE_URL","global","defineBuiltIn","defineBuiltInAccessor","anInstance","hasOwn","assign","arrayFrom","arraySlice","codeAt","toASCII","$toString","setToStringTag","validateArgumentsLength","URLSearchParamsModule","InternalStateModule","setInternalState","set","getInternalURLState","getterFor","getInternalSearchParamsState","getState","NativeURL","TypeError","parseInt","pow","charAt","numberToString","pop","shift","stringSlice","slice","unshift","INVALID_SCHEME","INVALID_HOST","INVALID_PORT","ALPHA","ALPHANUMERIC","DIGIT","HEX_START","OCT","DEC","HEX","FORBIDDEN_HOST_CODE_POINT","FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT","LEADING_C0_CONTROL_OR_SPACE","TRAILING_C0_CONTROL_OR_SPACE","TAB_AND_NEW_LINE","serializeHost","host","result","compress","ignore0","ipv6","maxIndex","maxLength","currStart","currLength","findLongestZeroSequence","C0ControlPercentEncodeSet","fragmentPercentEncodeSet","pathPercentEncodeSet","userinfoPercentEncodeSet","percentEncode","chr","code","encodeURIComponent","specialSchemes","ftp","file","http","https","ws","wss","isWindowsDriveLetter","normalized","second","startsWithWindowsDriveLetter","third","isSingleDot","segment","SCHEME_START","SCHEME","NO_SCHEME","SPECIAL_RELATIVE_OR_AUTHORITY","PATH_OR_AUTHORITY","RELATIVE","RELATIVE_SLASH","SPECIAL_AUTHORITY_SLASHES","SPECIAL_AUTHORITY_IGNORE_SLASHES","AUTHORITY","HOST","HOSTNAME","PORT","FILE","FILE_SLASH","FILE_HOST","PATH_START","PATH","CANNOT_BE_A_BASE_URL_PATH","QUERY","FRAGMENT","URLState","isBase","baseState","failure","parse","bindURL","type","stateOverride","codePoints","bufferCodePoints","state","pointer","buffer","seenAt","seenBracket","seenPasswordToken","scheme","username","password","port","query","fragment","cannotBeABaseURL","isSpecial","includesCredentials","codePoint","encodedCodePoints","parseHost","shortenPath","numbersSeen","ipv4Piece","number","swaps","swap","address","pieceIndex","parseIPv6","partsLength","numbers","part","radix","ipv4","parts","parseIPv4","cannotHaveUsernamePasswordPort","pathSize","serialize","setHref","href","update","getOrigin","URLConstructor","origin","error","getProtocol","setProtocol","protocol","getUsername","setUsername","getPassword","setPassword","getHost","setHost","getHostname","setHostname","hostname","getPort","setPort","getPathname","setPathname","getSearch","setSearch","getSearchParams","facade","getHash","setHash","that","URLPrototype","accessorDescriptor","getter","setter","configurable","enumerable","nativeCreateObjectURL","createObjectURL","nativeRevokeObjectURL","revokeObjectURL","constructor","sham"],"sourceRoot":""}
1
+ {"version":3,"file":"plugins/plugin.url.js","mappings":"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","sources":["webpack://@internetarchive/bookreader/./src/plugins/url/UrlPlugin.js","webpack://@internetarchive/bookreader/./src/plugins/url/plugin.url.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/define-built-in-accessor.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/string-punycode-to-ascii.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/string-trim-forced.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.object.entries.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.object.from-entries.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.trim.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/web.url.constructor.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/web.url.js"],"sourcesContent":["export class UrlPlugin {\n constructor(options = {}) {\n this.bookReaderOptions = options;\n\n // the canonical order of elements is important in the path and query string\n this.urlSchema = [\n { name: 'page', position: 'path', default: 'n0' },\n { name: 'mode', position: 'path', default: '2up' },\n { name: 'search', position: 'path', deprecated_for: 'q' },\n { name: 'q', position: 'query_param' },\n { name: 'sort', position: 'query_param' },\n { name: 'view', position: 'query_param' },\n { name: 'admin', position: 'query_param' },\n ];\n\n this.urlState = {};\n this.urlMode = this.bookReaderOptions.urlMode || 'hash';\n this.urlHistoryBasePath = this.bookReaderOptions.urlHistoryBasePath || '/';\n this.urlLocationPollId = null;\n this.oldLocationHash = null;\n this.oldUserHash = null;\n }\n\n /**\n * Parse JSON object URL state to string format\n * Arrange path names in an order that it is positioned on the urlSchema\n * @param {Object} urlState\n * @returns {string}\n */\n urlStateToUrlString(urlState) {\n const searchParams = new URLSearchParams();\n const pathParams = {};\n\n Object.keys(urlState).forEach(key => {\n let schema = this.urlSchema.find(schema => schema.name === key);\n if (schema?.deprecated_for) {\n schema = this.urlSchema.find(schemaKey => schemaKey.name === schema.deprecated_for);\n }\n if (schema?.position == 'path') {\n pathParams[schema?.name] = urlState[key];\n } else {\n searchParams.append(schema?.name || key, urlState[key]);\n }\n });\n\n const strPathParams = this.urlSchema\n .filter(s => s.position == 'path')\n .map(schema => pathParams[schema.name] ? `${schema.name}/${pathParams[schema.name]}` : '')\n .join('/');\n\n // replace consecutive slashes with a single slash + remove trailing slashes\n const strStrippedTrailingSlash = `${strPathParams.replace(/\\/+/g, '/').replace(/\\/+$/, '')}`;\n const concatenatedPath = `${strStrippedTrailingSlash}?${searchParams.toString()}`;\n return searchParams.toString() ? concatenatedPath : `${strStrippedTrailingSlash}`;\n }\n\n /**\n * Parse string URL and add it in the current urlState\n * Example:\n * /page/n7/mode/2up => {page: 'n7', mode: '2up'}\n * /page/n7/mode/2up/search/hello => {page: 'n7', mode: '2up', q: 'hello'}\n * @param {string} urlString\n * @returns {object}\n */\n urlStringToUrlState(urlString) {\n const urlState = {};\n\n // Fetch searchParams from given {str}\n // Note: whole URL path is needed for URL parsing\n const urlPath = new URL(urlString, 'http://example.com');\n const urlSearchParamsObj = Object.fromEntries(urlPath.searchParams.entries());\n const splitUrlMatches = urlPath.pathname.match(/[^\\\\/]+\\/[^\\\\/]+/g);\n const urlStrSplitSlashObj = splitUrlMatches ? Object.fromEntries(splitUrlMatches.map(x => x.split('/'))) : {};\n\n const doesKeyExists = (_object, _key) => {\n return Object.keys(_object).some(value => value == _key);\n };\n\n // Add path objects to urlState\n this.urlSchema\n .filter(schema => schema.position == 'path')\n .forEach(schema => {\n const hasPropertyKey = doesKeyExists(urlStrSplitSlashObj, schema.name);\n const hasDeprecatedKey = doesKeyExists(schema, 'deprecated_for') && hasPropertyKey;\n\n if (hasDeprecatedKey) {\n urlState[schema.deprecated_for] = urlStrSplitSlashObj[schema.name];\n return;\n }\n\n if (hasPropertyKey) {\n urlState[schema.name] = urlStrSplitSlashObj[schema.name];\n return;\n }\n });\n\n // Add searchParams to urlState\n Object.entries(urlSearchParamsObj).forEach(([key, value]) => {\n urlState[key] = value;\n });\n\n return urlState;\n }\n\n /**\n * Add or update key-value to the urlState\n * @param {string} key\n * @param {string} val\n */\n setUrlParam(key, value) {\n this.urlState[key] = value;\n\n this.pushToAddressBar();\n }\n\n /**\n * Delete key-value to the urlState\n * @param {string} key\n */\n removeUrlParam(key) {\n delete this.urlState[key];\n\n this.pushToAddressBar();\n }\n\n /**\n * Get key-value from the urlState\n * @param {string} key\n * @return {string}\n */\n getUrlParam(key) {\n return this.urlState[key];\n }\n\n /**\n * Push URL params to addressbar\n */\n pushToAddressBar() {\n const urlStrPath = this.urlStateToUrlString(this.urlState);\n const concatenatedPath = urlStrPath !== '/' ? urlStrPath : '';\n if (this.urlMode == 'history') {\n if (!window.history || !window.history.replaceState) {\n this.options.urlMode = 'hash';\n } else {\n const newUrlPath = `${this.urlHistoryBasePath}${concatenatedPath}`.trim().replace(/(\\/+)/g, '/');\n try {\n window.history.replaceState({}, null, newUrlPath);\n } catch (e) {\n // DOMException on Chrome when in sandboxed iframe\n this.urlMode = 'hash';\n }\n }\n }\n\n if (this.urlMode == 'hash') {\n window.location.replace('#' + concatenatedPath);\n }\n this.oldLocationHash = urlStrPath;\n }\n\n /**\n * Get the url and check if it has changed\n * If it was changeed, update the urlState\n */\n listenForHashChanges() {\n this.oldLocationHash = window.location.hash.substr(1);\n if (this.urlLocationPollId) {\n clearInterval(this.urlLocationPollId);\n this.urlLocationPollId = null;\n }\n\n // check if the URL changes\n const updateHash = () => {\n const newFragment = window.location.hash.substr(1);\n const hasFragmentChange = newFragment != this.oldLocationHash;\n\n if (!hasFragmentChange) { return; }\n\n this.urlState = this.urlStringToUrlState(newFragment);\n };\n this.urlLocationPollId = setInterval(updateHash, 500);\n }\n\n /**\n * Will read either the hash or URL and return the bookreader fragment\n */\n pullFromAddressBar (location = window.location) {\n const path = this.urlMode === 'history'\n ? (location.pathname.substr(this.urlHistoryBasePath.length) + location.search)\n : location.hash.substr(1);\n this.urlState = this.urlStringToUrlState(path);\n }\n}\n","/* global BookReader */\n\nimport { UrlPlugin } from \"./UrlPlugin\";\n\n/**\n * Plugin for URL management in BookReader\n * Note read more about the url \"fragment\" here:\n * https://openlibrary.org/dev/docs/bookurls\n */\n\njQuery.extend(BookReader.defaultOptions, {\n enableUrlPlugin: true,\n bookId: '',\n /** @type {string} Defaults can be a urlFragment string */\n defaults: null,\n updateWindowTitle: false,\n\n /** @type {'history' | 'hash'} */\n urlMode: 'hash',\n\n /**\n * When using 'history' mode, this part of the URL is kept constant\n * @example /details/plato/\n */\n urlHistoryBasePath: '/',\n\n /** Only these params will be reflected onto the URL */\n urlTrackedParams: ['page', 'search', 'mode', 'region', 'highlight', 'view'],\n\n /** If true, don't update the URL when `page == n0 (eg \"/page/n0\")` */\n urlTrackIndex0: false,\n});\n\n/** @override */\nBookReader.prototype.setup = (function(super_) {\n return function(options) {\n super_.call(this, options);\n\n this.bookId = options.bookId;\n this.defaults = options.defaults;\n\n this.locationPollId = null;\n this.oldLocationHash = null;\n this.oldUserHash = null;\n };\n})(BookReader.prototype.setup);\n\n/** @override */\nBookReader.prototype.init = (function(super_) {\n return function() {\n\n if (this.options.enableUrlPlugin) {\n this.bind(BookReader.eventNames.PostInit, () => {\n const { updateWindowTitle, urlMode } = this.options;\n if (updateWindowTitle) {\n document.title = this.shortTitle(this.bookTitle, 50);\n }\n if (urlMode === 'hash') {\n this.urlStartLocationPolling();\n }\n });\n\n this.bind(BookReader.eventNames.fragmentChange,\n this.urlUpdateFragment.bind(this)\n );\n }\n super_.call(this);\n };\n})(BookReader.prototype.init);\n\n/**\n * Returns a shortened version of the title with the maximum number of characters\n * @param {number} maximumCharacters\n * @return {string}\n */\nBookReader.prototype.shortTitle = function(maximumCharacters) {\n if (this.bookTitle.length < maximumCharacters) {\n return this.bookTitle;\n }\n\n const title = `${this.bookTitle.substr(0, maximumCharacters - 3)}...`;\n return title;\n};\n\n/**\n * Starts polling of window.location to see hash fragment changes\n */\nBookReader.prototype.urlStartLocationPolling = function() {\n this.oldLocationHash = this.urlReadFragment();\n\n if (this.locationPollId) {\n clearInterval(this.locationPollId);\n this.locationPollId = null;\n }\n\n const updateHash = () => {\n const newFragment = this.urlReadFragment();\n const hasFragmentChange = (newFragment != this.oldLocationHash) && (newFragment != this.oldUserHash);\n\n if (!hasFragmentChange) { return; }\n\n const params = this.paramsFromFragment(newFragment);\n\n const updateParams = () => this.updateFromParams(params);\n\n this.trigger(BookReader.eventNames.stop);\n if (this.animating) {\n // Queue change if animating\n if (this.autoStop) this.autoStop();\n this.animationFinishedCallback = updateParams;\n } else {\n // update immediately\n updateParams();\n }\n this.oldUserHash = newFragment;\n };\n\n this.locationPollId = setInterval(updateHash, 500);\n};\n\n/**\n * Update URL from the current parameters.\n * Call this instead of manually using window.location.replace\n */\nBookReader.prototype.urlUpdateFragment = function() {\n const allParams = this.paramsFromCurrent();\n const { urlTrackIndex0, urlTrackedParams } = this.options;\n\n if (!urlTrackIndex0\n && (typeof(allParams.index) !== 'undefined')\n && allParams.index === 0) {\n delete allParams.index;\n delete allParams.page;\n }\n\n const params = urlTrackedParams.reduce((validParams, paramName) => {\n if (paramName in allParams) {\n validParams[paramName] = allParams[paramName];\n }\n return validParams;\n }, {});\n\n const newFragment = this.fragmentFromParams(params, this.options.urlMode);\n const currFragment = this.urlReadFragment();\n const currQueryString = this.getLocationSearch();\n const newQueryString = this.queryStringFromParams(params, currQueryString, this.options.urlMode);\n if (currFragment === newFragment && currQueryString === newQueryString) {\n return;\n }\n\n if (this.options.urlMode === 'history') {\n if (!window.history || !window.history.replaceState) {\n this.options.urlMode = 'hash';\n } else {\n const baseWithoutSlash = this.options.urlHistoryBasePath.replace(/\\/+$/, '');\n const newFragmentWithSlash = newFragment === '' ? '' : `/${newFragment}`;\n\n const newUrlPath = `${baseWithoutSlash}${newFragmentWithSlash}${newQueryString}`;\n try {\n window.history.replaceState({}, null, newUrlPath);\n this.oldLocationHash = newFragment + newQueryString;\n } catch (e) {\n // DOMException on Chrome when in sandboxed iframe\n this.options.urlMode = 'hash';\n }\n }\n }\n\n if (this.options.urlMode === 'hash') {\n const newQueryStringSearch = this.urlParamsFiltersOnlySearch(this.readQueryString());\n window.location.replace('#' + newFragment + newQueryStringSearch);\n this.oldLocationHash = newFragment + newQueryStringSearch;\n }\n};\n\n/**\n * @private\n * Filtering query parameters to select only book search param (?q=foo)\n This needs to be updated/URL system modified if future query params are to be added\n * @param {string} url\n * @return {string}\n * */\nBookReader.prototype.urlParamsFiltersOnlySearch = function(url) {\n const params = new URLSearchParams(url);\n return params.has('q') ? `?${new URLSearchParams({ q: params.get('q') })}` : '';\n};\n\n\n/**\n * Will read either the hash or URL and return the bookreader fragment\n * @return {string}\n */\nBookReader.prototype.urlReadFragment = function() {\n const { urlMode, urlHistoryBasePath } = this.options;\n if (urlMode === 'history') {\n return window.location.pathname.substr(urlHistoryBasePath.length);\n } else {\n return window.location.hash.substr(1);\n }\n};\n\n/**\n * Will read the hash return the bookreader fragment\n * @return {string}\n */\nBookReader.prototype.urlReadHashFragment = function() {\n return window.location.hash.substr(1);\n};\nexport class BookreaderUrlPlugin extends BookReader {\n init() {\n if (this.options.enableUrlPlugin) {\n this.urlPlugin = new UrlPlugin(this.options);\n this.bind(BookReader.eventNames.PostInit, () => {\n const { urlMode } = this.options;\n\n if (urlMode === 'hash') {\n this.urlPlugin.listenForHashChanges();\n }\n });\n }\n\n super.init();\n }\n}\n\nwindow.BookReader = BookreaderUrlPlugin;\nexport default BookreaderUrlPlugin;\n","var makeBuiltIn = require('../internals/make-built-in');\nvar defineProperty = require('../internals/object-define-property');\n\nmodule.exports = function (target, name, descriptor) {\n if (descriptor.get) makeBuiltIn(descriptor.get, name, { getter: true });\n if (descriptor.set) makeBuiltIn(descriptor.set, name, { setter: true });\n return defineProperty.f(target, name, descriptor);\n};\n","'use strict';\n// based on https://github.com/bestiejs/punycode.js/blob/master/punycode.js\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\nvar base = 36;\nvar tMin = 1;\nvar tMax = 26;\nvar skew = 38;\nvar damp = 700;\nvar initialBias = 72;\nvar initialN = 128; // 0x80\nvar delimiter = '-'; // '\\x2D'\nvar regexNonASCII = /[^\\0-\\u007E]/; // non-ASCII chars\nvar regexSeparators = /[.\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\nvar OVERFLOW_ERROR = 'Overflow: input needs wider integers to process';\nvar baseMinusTMin = base - tMin;\n\nvar $RangeError = RangeError;\nvar exec = uncurryThis(regexSeparators.exec);\nvar floor = Math.floor;\nvar fromCharCode = String.fromCharCode;\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar join = uncurryThis([].join);\nvar push = uncurryThis([].push);\nvar replace = uncurryThis(''.replace);\nvar split = uncurryThis(''.split);\nvar toLowerCase = uncurryThis(''.toLowerCase);\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n */\nvar ucs2decode = function (string) {\n var output = [];\n var counter = 0;\n var length = string.length;\n while (counter < length) {\n var value = charCodeAt(string, counter++);\n if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n // It's a high surrogate, and there is a next character.\n var extra = charCodeAt(string, counter++);\n if ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n push(output, ((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n } else {\n // It's an unmatched surrogate; only append this code unit, in case the\n // next code unit is the high surrogate of a surrogate pair.\n push(output, value);\n counter--;\n }\n } else {\n push(output, value);\n }\n }\n return output;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n */\nvar digitToBasic = function (digit) {\n // 0..25 map to ASCII a..z or A..Z\n // 26..35 map to ASCII 0..9\n return digit + 22 + 75 * (digit < 26);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n */\nvar adapt = function (delta, numPoints, firstTime) {\n var k = 0;\n delta = firstTime ? floor(delta / damp) : delta >> 1;\n delta += floor(delta / numPoints);\n while (delta > baseMinusTMin * tMax >> 1) {\n delta = floor(delta / baseMinusTMin);\n k += base;\n }\n return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n */\nvar encode = function (input) {\n var output = [];\n\n // Convert the input in UCS-2 to an array of Unicode code points.\n input = ucs2decode(input);\n\n // Cache the length.\n var inputLength = input.length;\n\n // Initialize the state.\n var n = initialN;\n var delta = 0;\n var bias = initialBias;\n var i, currentValue;\n\n // Handle the basic code points.\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue < 0x80) {\n push(output, fromCharCode(currentValue));\n }\n }\n\n var basicLength = output.length; // number of basic code points.\n var handledCPCount = basicLength; // number of code points that have been handled;\n\n // Finish the basic string with a delimiter unless it's empty.\n if (basicLength) {\n push(output, delimiter);\n }\n\n // Main encoding loop:\n while (handledCPCount < inputLength) {\n // All non-basic code points < n have been handled already. Find the next larger one:\n var m = maxInt;\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue >= n && currentValue < m) {\n m = currentValue;\n }\n }\n\n // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>, but guard against overflow.\n var handledCPCountPlusOne = handledCPCount + 1;\n if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n throw $RangeError(OVERFLOW_ERROR);\n }\n\n delta += (m - n) * handledCPCountPlusOne;\n n = m;\n\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue < n && ++delta > maxInt) {\n throw $RangeError(OVERFLOW_ERROR);\n }\n if (currentValue == n) {\n // Represent delta as a generalized variable-length integer.\n var q = delta;\n var k = base;\n while (true) {\n var t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n if (q < t) break;\n var qMinusT = q - t;\n var baseMinusT = base - t;\n push(output, fromCharCode(digitToBasic(t + qMinusT % baseMinusT)));\n q = floor(qMinusT / baseMinusT);\n k += base;\n }\n\n push(output, fromCharCode(digitToBasic(q)));\n bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n delta = 0;\n handledCPCount++;\n }\n }\n\n delta++;\n n++;\n }\n return join(output, '');\n};\n\nmodule.exports = function (input) {\n var encoded = [];\n var labels = split(replace(toLowerCase(input), regexSeparators, '\\u002E'), '.');\n var i, label;\n for (i = 0; i < labels.length; i++) {\n label = labels[i];\n push(encoded, exec(regexNonASCII, label) ? 'xn--' + encode(label) : label);\n }\n return join(encoded, '.');\n};\n","var PROPER_FUNCTION_NAME = require('../internals/function-name').PROPER;\nvar fails = require('../internals/fails');\nvar whitespaces = require('../internals/whitespaces');\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n return !!whitespaces[METHOD_NAME]()\n || non[METHOD_NAME]() !== non\n || (PROPER_FUNCTION_NAME && whitespaces[METHOD_NAME].name !== METHOD_NAME);\n });\n};\n","var $ = require('../internals/export');\nvar $entries = require('../internals/object-to-array').entries;\n\n// `Object.entries` method\n// https://tc39.es/ecma262/#sec-object.entries\n$({ target: 'Object', stat: true }, {\n entries: function entries(O) {\n return $entries(O);\n }\n});\n","var $ = require('../internals/export');\nvar iterate = require('../internals/iterate');\nvar createProperty = require('../internals/create-property');\n\n// `Object.fromEntries` method\n// https://github.com/tc39/proposal-object-from-entries\n$({ target: 'Object', stat: true }, {\n fromEntries: function fromEntries(iterable) {\n var obj = {};\n iterate(iterable, function (k, v) {\n createProperty(obj, k, v);\n }, { AS_ENTRIES: true });\n return obj;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $trim = require('../internals/string-trim').trim;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\n// `String.prototype.trim` method\n// https://tc39.es/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n trim: function trim() {\n return $trim(this);\n }\n});\n","'use strict';\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\nrequire('../modules/es.string.iterator');\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar USE_NATIVE_URL = require('../internals/url-constructor-detection');\nvar global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar anInstance = require('../internals/an-instance');\nvar hasOwn = require('../internals/has-own-property');\nvar assign = require('../internals/object-assign');\nvar arrayFrom = require('../internals/array-from');\nvar arraySlice = require('../internals/array-slice-simple');\nvar codeAt = require('../internals/string-multibyte').codeAt;\nvar toASCII = require('../internals/string-punycode-to-ascii');\nvar $toString = require('../internals/to-string');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar validateArgumentsLength = require('../internals/validate-arguments-length');\nvar URLSearchParamsModule = require('../modules/web.url-search-params.constructor');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar getInternalURLState = InternalStateModule.getterFor('URL');\nvar URLSearchParams = URLSearchParamsModule.URLSearchParams;\nvar getInternalSearchParamsState = URLSearchParamsModule.getState;\n\nvar NativeURL = global.URL;\nvar TypeError = global.TypeError;\nvar parseInt = global.parseInt;\nvar floor = Math.floor;\nvar pow = Math.pow;\nvar charAt = uncurryThis(''.charAt);\nvar exec = uncurryThis(/./.exec);\nvar join = uncurryThis([].join);\nvar numberToString = uncurryThis(1.0.toString);\nvar pop = uncurryThis([].pop);\nvar push = uncurryThis([].push);\nvar replace = uncurryThis(''.replace);\nvar shift = uncurryThis([].shift);\nvar split = uncurryThis(''.split);\nvar stringSlice = uncurryThis(''.slice);\nvar toLowerCase = uncurryThis(''.toLowerCase);\nvar unshift = uncurryThis([].unshift);\n\nvar INVALID_AUTHORITY = 'Invalid authority';\nvar INVALID_SCHEME = 'Invalid scheme';\nvar INVALID_HOST = 'Invalid host';\nvar INVALID_PORT = 'Invalid port';\n\nvar ALPHA = /[a-z]/i;\n// eslint-disable-next-line regexp/no-obscure-range -- safe\nvar ALPHANUMERIC = /[\\d+-.a-z]/i;\nvar DIGIT = /\\d/;\nvar HEX_START = /^0x/i;\nvar OCT = /^[0-7]+$/;\nvar DEC = /^\\d+$/;\nvar HEX = /^[\\da-f]+$/i;\n/* eslint-disable regexp/no-control-character -- safe */\nvar FORBIDDEN_HOST_CODE_POINT = /[\\0\\t\\n\\r #%/:<>?@[\\\\\\]^|]/;\nvar FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\\0\\t\\n\\r #/:<>?@[\\\\\\]^|]/;\nvar LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE = /^[\\u0000-\\u0020]+|[\\u0000-\\u0020]+$/g;\nvar TAB_AND_NEW_LINE = /[\\t\\n\\r]/g;\n/* eslint-enable regexp/no-control-character -- safe */\nvar EOF;\n\n// https://url.spec.whatwg.org/#ipv4-number-parser\nvar parseIPv4 = function (input) {\n var parts = split(input, '.');\n var partsLength, numbers, index, part, radix, number, ipv4;\n if (parts.length && parts[parts.length - 1] == '') {\n parts.length--;\n }\n partsLength = parts.length;\n if (partsLength > 4) return input;\n numbers = [];\n for (index = 0; index < partsLength; index++) {\n part = parts[index];\n if (part == '') return input;\n radix = 10;\n if (part.length > 1 && charAt(part, 0) == '0') {\n radix = exec(HEX_START, part) ? 16 : 8;\n part = stringSlice(part, radix == 8 ? 1 : 2);\n }\n if (part === '') {\n number = 0;\n } else {\n if (!exec(radix == 10 ? DEC : radix == 8 ? OCT : HEX, part)) return input;\n number = parseInt(part, radix);\n }\n push(numbers, number);\n }\n for (index = 0; index < partsLength; index++) {\n number = numbers[index];\n if (index == partsLength - 1) {\n if (number >= pow(256, 5 - partsLength)) return null;\n } else if (number > 255) return null;\n }\n ipv4 = pop(numbers);\n for (index = 0; index < numbers.length; index++) {\n ipv4 += numbers[index] * pow(256, 3 - index);\n }\n return ipv4;\n};\n\n// https://url.spec.whatwg.org/#concept-ipv6-parser\n// eslint-disable-next-line max-statements -- TODO\nvar parseIPv6 = function (input) {\n var address = [0, 0, 0, 0, 0, 0, 0, 0];\n var pieceIndex = 0;\n var compress = null;\n var pointer = 0;\n var value, length, numbersSeen, ipv4Piece, number, swaps, swap;\n\n var chr = function () {\n return charAt(input, pointer);\n };\n\n if (chr() == ':') {\n if (charAt(input, 1) != ':') return;\n pointer += 2;\n pieceIndex++;\n compress = pieceIndex;\n }\n while (chr()) {\n if (pieceIndex == 8) return;\n if (chr() == ':') {\n if (compress !== null) return;\n pointer++;\n pieceIndex++;\n compress = pieceIndex;\n continue;\n }\n value = length = 0;\n while (length < 4 && exec(HEX, chr())) {\n value = value * 16 + parseInt(chr(), 16);\n pointer++;\n length++;\n }\n if (chr() == '.') {\n if (length == 0) return;\n pointer -= length;\n if (pieceIndex > 6) return;\n numbersSeen = 0;\n while (chr()) {\n ipv4Piece = null;\n if (numbersSeen > 0) {\n if (chr() == '.' && numbersSeen < 4) pointer++;\n else return;\n }\n if (!exec(DIGIT, chr())) return;\n while (exec(DIGIT, chr())) {\n number = parseInt(chr(), 10);\n if (ipv4Piece === null) ipv4Piece = number;\n else if (ipv4Piece == 0) return;\n else ipv4Piece = ipv4Piece * 10 + number;\n if (ipv4Piece > 255) return;\n pointer++;\n }\n address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece;\n numbersSeen++;\n if (numbersSeen == 2 || numbersSeen == 4) pieceIndex++;\n }\n if (numbersSeen != 4) return;\n break;\n } else if (chr() == ':') {\n pointer++;\n if (!chr()) return;\n } else if (chr()) return;\n address[pieceIndex++] = value;\n }\n if (compress !== null) {\n swaps = pieceIndex - compress;\n pieceIndex = 7;\n while (pieceIndex != 0 && swaps > 0) {\n swap = address[pieceIndex];\n address[pieceIndex--] = address[compress + swaps - 1];\n address[compress + --swaps] = swap;\n }\n } else if (pieceIndex != 8) return;\n return address;\n};\n\nvar findLongestZeroSequence = function (ipv6) {\n var maxIndex = null;\n var maxLength = 1;\n var currStart = null;\n var currLength = 0;\n var index = 0;\n for (; index < 8; index++) {\n if (ipv6[index] !== 0) {\n if (currLength > maxLength) {\n maxIndex = currStart;\n maxLength = currLength;\n }\n currStart = null;\n currLength = 0;\n } else {\n if (currStart === null) currStart = index;\n ++currLength;\n }\n }\n if (currLength > maxLength) {\n maxIndex = currStart;\n maxLength = currLength;\n }\n return maxIndex;\n};\n\n// https://url.spec.whatwg.org/#host-serializing\nvar serializeHost = function (host) {\n var result, index, compress, ignore0;\n // ipv4\n if (typeof host == 'number') {\n result = [];\n for (index = 0; index < 4; index++) {\n unshift(result, host % 256);\n host = floor(host / 256);\n } return join(result, '.');\n // ipv6\n } else if (typeof host == 'object') {\n result = '';\n compress = findLongestZeroSequence(host);\n for (index = 0; index < 8; index++) {\n if (ignore0 && host[index] === 0) continue;\n if (ignore0) ignore0 = false;\n if (compress === index) {\n result += index ? ':' : '::';\n ignore0 = true;\n } else {\n result += numberToString(host[index], 16);\n if (index < 7) result += ':';\n }\n }\n return '[' + result + ']';\n } return host;\n};\n\nvar C0ControlPercentEncodeSet = {};\nvar fragmentPercentEncodeSet = assign({}, C0ControlPercentEncodeSet, {\n ' ': 1, '\"': 1, '<': 1, '>': 1, '`': 1\n});\nvar pathPercentEncodeSet = assign({}, fragmentPercentEncodeSet, {\n '#': 1, '?': 1, '{': 1, '}': 1\n});\nvar userinfoPercentEncodeSet = assign({}, pathPercentEncodeSet, {\n '/': 1, ':': 1, ';': 1, '=': 1, '@': 1, '[': 1, '\\\\': 1, ']': 1, '^': 1, '|': 1\n});\n\nvar percentEncode = function (chr, set) {\n var code = codeAt(chr, 0);\n return code > 0x20 && code < 0x7F && !hasOwn(set, chr) ? chr : encodeURIComponent(chr);\n};\n\n// https://url.spec.whatwg.org/#special-scheme\nvar specialSchemes = {\n ftp: 21,\n file: null,\n http: 80,\n https: 443,\n ws: 80,\n wss: 443\n};\n\n// https://url.spec.whatwg.org/#windows-drive-letter\nvar isWindowsDriveLetter = function (string, normalized) {\n var second;\n return string.length == 2 && exec(ALPHA, charAt(string, 0))\n && ((second = charAt(string, 1)) == ':' || (!normalized && second == '|'));\n};\n\n// https://url.spec.whatwg.org/#start-with-a-windows-drive-letter\nvar startsWithWindowsDriveLetter = function (string) {\n var third;\n return string.length > 1 && isWindowsDriveLetter(stringSlice(string, 0, 2)) && (\n string.length == 2 ||\n ((third = charAt(string, 2)) === '/' || third === '\\\\' || third === '?' || third === '#')\n );\n};\n\n// https://url.spec.whatwg.org/#single-dot-path-segment\nvar isSingleDot = function (segment) {\n return segment === '.' || toLowerCase(segment) === '%2e';\n};\n\n// https://url.spec.whatwg.org/#double-dot-path-segment\nvar isDoubleDot = function (segment) {\n segment = toLowerCase(segment);\n return segment === '..' || segment === '%2e.' || segment === '.%2e' || segment === '%2e%2e';\n};\n\n// States:\nvar SCHEME_START = {};\nvar SCHEME = {};\nvar NO_SCHEME = {};\nvar SPECIAL_RELATIVE_OR_AUTHORITY = {};\nvar PATH_OR_AUTHORITY = {};\nvar RELATIVE = {};\nvar RELATIVE_SLASH = {};\nvar SPECIAL_AUTHORITY_SLASHES = {};\nvar SPECIAL_AUTHORITY_IGNORE_SLASHES = {};\nvar AUTHORITY = {};\nvar HOST = {};\nvar HOSTNAME = {};\nvar PORT = {};\nvar FILE = {};\nvar FILE_SLASH = {};\nvar FILE_HOST = {};\nvar PATH_START = {};\nvar PATH = {};\nvar CANNOT_BE_A_BASE_URL_PATH = {};\nvar QUERY = {};\nvar FRAGMENT = {};\n\nvar URLState = function (url, isBase, base) {\n var urlString = $toString(url);\n var baseState, failure, searchParams;\n if (isBase) {\n failure = this.parse(urlString);\n if (failure) throw TypeError(failure);\n this.searchParams = null;\n } else {\n if (base !== undefined) baseState = new URLState(base, true);\n failure = this.parse(urlString, null, baseState);\n if (failure) throw TypeError(failure);\n searchParams = getInternalSearchParamsState(new URLSearchParams());\n searchParams.bindURL(this);\n this.searchParams = searchParams;\n }\n};\n\nURLState.prototype = {\n type: 'URL',\n // https://url.spec.whatwg.org/#url-parsing\n // eslint-disable-next-line max-statements -- TODO\n parse: function (input, stateOverride, base) {\n var url = this;\n var state = stateOverride || SCHEME_START;\n var pointer = 0;\n var buffer = '';\n var seenAt = false;\n var seenBracket = false;\n var seenPasswordToken = false;\n var codePoints, chr, bufferCodePoints, failure;\n\n input = $toString(input);\n\n if (!stateOverride) {\n url.scheme = '';\n url.username = '';\n url.password = '';\n url.host = null;\n url.port = null;\n url.path = [];\n url.query = null;\n url.fragment = null;\n url.cannotBeABaseURL = false;\n input = replace(input, LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE, '');\n }\n\n input = replace(input, TAB_AND_NEW_LINE, '');\n\n codePoints = arrayFrom(input);\n\n while (pointer <= codePoints.length) {\n chr = codePoints[pointer];\n switch (state) {\n case SCHEME_START:\n if (chr && exec(ALPHA, chr)) {\n buffer += toLowerCase(chr);\n state = SCHEME;\n } else if (!stateOverride) {\n state = NO_SCHEME;\n continue;\n } else return INVALID_SCHEME;\n break;\n\n case SCHEME:\n if (chr && (exec(ALPHANUMERIC, chr) || chr == '+' || chr == '-' || chr == '.')) {\n buffer += toLowerCase(chr);\n } else if (chr == ':') {\n if (stateOverride && (\n (url.isSpecial() != hasOwn(specialSchemes, buffer)) ||\n (buffer == 'file' && (url.includesCredentials() || url.port !== null)) ||\n (url.scheme == 'file' && !url.host)\n )) return;\n url.scheme = buffer;\n if (stateOverride) {\n if (url.isSpecial() && specialSchemes[url.scheme] == url.port) url.port = null;\n return;\n }\n buffer = '';\n if (url.scheme == 'file') {\n state = FILE;\n } else if (url.isSpecial() && base && base.scheme == url.scheme) {\n state = SPECIAL_RELATIVE_OR_AUTHORITY;\n } else if (url.isSpecial()) {\n state = SPECIAL_AUTHORITY_SLASHES;\n } else if (codePoints[pointer + 1] == '/') {\n state = PATH_OR_AUTHORITY;\n pointer++;\n } else {\n url.cannotBeABaseURL = true;\n push(url.path, '');\n state = CANNOT_BE_A_BASE_URL_PATH;\n }\n } else if (!stateOverride) {\n buffer = '';\n state = NO_SCHEME;\n pointer = 0;\n continue;\n } else return INVALID_SCHEME;\n break;\n\n case NO_SCHEME:\n if (!base || (base.cannotBeABaseURL && chr != '#')) return INVALID_SCHEME;\n if (base.cannotBeABaseURL && chr == '#') {\n url.scheme = base.scheme;\n url.path = arraySlice(base.path);\n url.query = base.query;\n url.fragment = '';\n url.cannotBeABaseURL = true;\n state = FRAGMENT;\n break;\n }\n state = base.scheme == 'file' ? FILE : RELATIVE;\n continue;\n\n case SPECIAL_RELATIVE_OR_AUTHORITY:\n if (chr == '/' && codePoints[pointer + 1] == '/') {\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n pointer++;\n } else {\n state = RELATIVE;\n continue;\n } break;\n\n case PATH_OR_AUTHORITY:\n if (chr == '/') {\n state = AUTHORITY;\n break;\n } else {\n state = PATH;\n continue;\n }\n\n case RELATIVE:\n url.scheme = base.scheme;\n if (chr == EOF) {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.query = base.query;\n } else if (chr == '/' || (chr == '\\\\' && url.isSpecial())) {\n state = RELATIVE_SLASH;\n } else if (chr == '?') {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.query = '';\n state = QUERY;\n } else if (chr == '#') {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.query = base.query;\n url.fragment = '';\n state = FRAGMENT;\n } else {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.path.length--;\n state = PATH;\n continue;\n } break;\n\n case RELATIVE_SLASH:\n if (url.isSpecial() && (chr == '/' || chr == '\\\\')) {\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n } else if (chr == '/') {\n state = AUTHORITY;\n } else {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n state = PATH;\n continue;\n } break;\n\n case SPECIAL_AUTHORITY_SLASHES:\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n if (chr != '/' || charAt(buffer, pointer + 1) != '/') continue;\n pointer++;\n break;\n\n case SPECIAL_AUTHORITY_IGNORE_SLASHES:\n if (chr != '/' && chr != '\\\\') {\n state = AUTHORITY;\n continue;\n } break;\n\n case AUTHORITY:\n if (chr == '@') {\n if (seenAt) buffer = '%40' + buffer;\n seenAt = true;\n bufferCodePoints = arrayFrom(buffer);\n for (var i = 0; i < bufferCodePoints.length; i++) {\n var codePoint = bufferCodePoints[i];\n if (codePoint == ':' && !seenPasswordToken) {\n seenPasswordToken = true;\n continue;\n }\n var encodedCodePoints = percentEncode(codePoint, userinfoPercentEncodeSet);\n if (seenPasswordToken) url.password += encodedCodePoints;\n else url.username += encodedCodePoints;\n }\n buffer = '';\n } else if (\n chr == EOF || chr == '/' || chr == '?' || chr == '#' ||\n (chr == '\\\\' && url.isSpecial())\n ) {\n if (seenAt && buffer == '') return INVALID_AUTHORITY;\n pointer -= arrayFrom(buffer).length + 1;\n buffer = '';\n state = HOST;\n } else buffer += chr;\n break;\n\n case HOST:\n case HOSTNAME:\n if (stateOverride && url.scheme == 'file') {\n state = FILE_HOST;\n continue;\n } else if (chr == ':' && !seenBracket) {\n if (buffer == '') return INVALID_HOST;\n failure = url.parseHost(buffer);\n if (failure) return failure;\n buffer = '';\n state = PORT;\n if (stateOverride == HOSTNAME) return;\n } else if (\n chr == EOF || chr == '/' || chr == '?' || chr == '#' ||\n (chr == '\\\\' && url.isSpecial())\n ) {\n if (url.isSpecial() && buffer == '') return INVALID_HOST;\n if (stateOverride && buffer == '' && (url.includesCredentials() || url.port !== null)) return;\n failure = url.parseHost(buffer);\n if (failure) return failure;\n buffer = '';\n state = PATH_START;\n if (stateOverride) return;\n continue;\n } else {\n if (chr == '[') seenBracket = true;\n else if (chr == ']') seenBracket = false;\n buffer += chr;\n } break;\n\n case PORT:\n if (exec(DIGIT, chr)) {\n buffer += chr;\n } else if (\n chr == EOF || chr == '/' || chr == '?' || chr == '#' ||\n (chr == '\\\\' && url.isSpecial()) ||\n stateOverride\n ) {\n if (buffer != '') {\n var port = parseInt(buffer, 10);\n if (port > 0xFFFF) return INVALID_PORT;\n url.port = (url.isSpecial() && port === specialSchemes[url.scheme]) ? null : port;\n buffer = '';\n }\n if (stateOverride) return;\n state = PATH_START;\n continue;\n } else return INVALID_PORT;\n break;\n\n case FILE:\n url.scheme = 'file';\n if (chr == '/' || chr == '\\\\') state = FILE_SLASH;\n else if (base && base.scheme == 'file') {\n if (chr == EOF) {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.query = base.query;\n } else if (chr == '?') {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.query = '';\n state = QUERY;\n } else if (chr == '#') {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.query = base.query;\n url.fragment = '';\n state = FRAGMENT;\n } else {\n if (!startsWithWindowsDriveLetter(join(arraySlice(codePoints, pointer), ''))) {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.shortenPath();\n }\n state = PATH;\n continue;\n }\n } else {\n state = PATH;\n continue;\n } break;\n\n case FILE_SLASH:\n if (chr == '/' || chr == '\\\\') {\n state = FILE_HOST;\n break;\n }\n if (base && base.scheme == 'file' && !startsWithWindowsDriveLetter(join(arraySlice(codePoints, pointer), ''))) {\n if (isWindowsDriveLetter(base.path[0], true)) push(url.path, base.path[0]);\n else url.host = base.host;\n }\n state = PATH;\n continue;\n\n case FILE_HOST:\n if (chr == EOF || chr == '/' || chr == '\\\\' || chr == '?' || chr == '#') {\n if (!stateOverride && isWindowsDriveLetter(buffer)) {\n state = PATH;\n } else if (buffer == '') {\n url.host = '';\n if (stateOverride) return;\n state = PATH_START;\n } else {\n failure = url.parseHost(buffer);\n if (failure) return failure;\n if (url.host == 'localhost') url.host = '';\n if (stateOverride) return;\n buffer = '';\n state = PATH_START;\n } continue;\n } else buffer += chr;\n break;\n\n case PATH_START:\n if (url.isSpecial()) {\n state = PATH;\n if (chr != '/' && chr != '\\\\') continue;\n } else if (!stateOverride && chr == '?') {\n url.query = '';\n state = QUERY;\n } else if (!stateOverride && chr == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (chr != EOF) {\n state = PATH;\n if (chr != '/') continue;\n } break;\n\n case PATH:\n if (\n chr == EOF || chr == '/' ||\n (chr == '\\\\' && url.isSpecial()) ||\n (!stateOverride && (chr == '?' || chr == '#'))\n ) {\n if (isDoubleDot(buffer)) {\n url.shortenPath();\n if (chr != '/' && !(chr == '\\\\' && url.isSpecial())) {\n push(url.path, '');\n }\n } else if (isSingleDot(buffer)) {\n if (chr != '/' && !(chr == '\\\\' && url.isSpecial())) {\n push(url.path, '');\n }\n } else {\n if (url.scheme == 'file' && !url.path.length && isWindowsDriveLetter(buffer)) {\n if (url.host) url.host = '';\n buffer = charAt(buffer, 0) + ':'; // normalize windows drive letter\n }\n push(url.path, buffer);\n }\n buffer = '';\n if (url.scheme == 'file' && (chr == EOF || chr == '?' || chr == '#')) {\n while (url.path.length > 1 && url.path[0] === '') {\n shift(url.path);\n }\n }\n if (chr == '?') {\n url.query = '';\n state = QUERY;\n } else if (chr == '#') {\n url.fragment = '';\n state = FRAGMENT;\n }\n } else {\n buffer += percentEncode(chr, pathPercentEncodeSet);\n } break;\n\n case CANNOT_BE_A_BASE_URL_PATH:\n if (chr == '?') {\n url.query = '';\n state = QUERY;\n } else if (chr == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (chr != EOF) {\n url.path[0] += percentEncode(chr, C0ControlPercentEncodeSet);\n } break;\n\n case QUERY:\n if (!stateOverride && chr == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (chr != EOF) {\n if (chr == \"'\" && url.isSpecial()) url.query += '%27';\n else if (chr == '#') url.query += '%23';\n else url.query += percentEncode(chr, C0ControlPercentEncodeSet);\n } break;\n\n case FRAGMENT:\n if (chr != EOF) url.fragment += percentEncode(chr, fragmentPercentEncodeSet);\n break;\n }\n\n pointer++;\n }\n },\n // https://url.spec.whatwg.org/#host-parsing\n parseHost: function (input) {\n var result, codePoints, index;\n if (charAt(input, 0) == '[') {\n if (charAt(input, input.length - 1) != ']') return INVALID_HOST;\n result = parseIPv6(stringSlice(input, 1, -1));\n if (!result) return INVALID_HOST;\n this.host = result;\n // opaque host\n } else if (!this.isSpecial()) {\n if (exec(FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT, input)) return INVALID_HOST;\n result = '';\n codePoints = arrayFrom(input);\n for (index = 0; index < codePoints.length; index++) {\n result += percentEncode(codePoints[index], C0ControlPercentEncodeSet);\n }\n this.host = result;\n } else {\n input = toASCII(input);\n if (exec(FORBIDDEN_HOST_CODE_POINT, input)) return INVALID_HOST;\n result = parseIPv4(input);\n if (result === null) return INVALID_HOST;\n this.host = result;\n }\n },\n // https://url.spec.whatwg.org/#cannot-have-a-username-password-port\n cannotHaveUsernamePasswordPort: function () {\n return !this.host || this.cannotBeABaseURL || this.scheme == 'file';\n },\n // https://url.spec.whatwg.org/#include-credentials\n includesCredentials: function () {\n return this.username != '' || this.password != '';\n },\n // https://url.spec.whatwg.org/#is-special\n isSpecial: function () {\n return hasOwn(specialSchemes, this.scheme);\n },\n // https://url.spec.whatwg.org/#shorten-a-urls-path\n shortenPath: function () {\n var path = this.path;\n var pathSize = path.length;\n if (pathSize && (this.scheme != 'file' || pathSize != 1 || !isWindowsDriveLetter(path[0], true))) {\n path.length--;\n }\n },\n // https://url.spec.whatwg.org/#concept-url-serializer\n serialize: function () {\n var url = this;\n var scheme = url.scheme;\n var username = url.username;\n var password = url.password;\n var host = url.host;\n var port = url.port;\n var path = url.path;\n var query = url.query;\n var fragment = url.fragment;\n var output = scheme + ':';\n if (host !== null) {\n output += '//';\n if (url.includesCredentials()) {\n output += username + (password ? ':' + password : '') + '@';\n }\n output += serializeHost(host);\n if (port !== null) output += ':' + port;\n } else if (scheme == 'file') output += '//';\n output += url.cannotBeABaseURL ? path[0] : path.length ? '/' + join(path, '/') : '';\n if (query !== null) output += '?' + query;\n if (fragment !== null) output += '#' + fragment;\n return output;\n },\n // https://url.spec.whatwg.org/#dom-url-href\n setHref: function (href) {\n var failure = this.parse(href);\n if (failure) throw TypeError(failure);\n this.searchParams.update();\n },\n // https://url.spec.whatwg.org/#dom-url-origin\n getOrigin: function () {\n var scheme = this.scheme;\n var port = this.port;\n if (scheme == 'blob') try {\n return new URLConstructor(scheme.path[0]).origin;\n } catch (error) {\n return 'null';\n }\n if (scheme == 'file' || !this.isSpecial()) return 'null';\n return scheme + '://' + serializeHost(this.host) + (port !== null ? ':' + port : '');\n },\n // https://url.spec.whatwg.org/#dom-url-protocol\n getProtocol: function () {\n return this.scheme + ':';\n },\n setProtocol: function (protocol) {\n this.parse($toString(protocol) + ':', SCHEME_START);\n },\n // https://url.spec.whatwg.org/#dom-url-username\n getUsername: function () {\n return this.username;\n },\n setUsername: function (username) {\n var codePoints = arrayFrom($toString(username));\n if (this.cannotHaveUsernamePasswordPort()) return;\n this.username = '';\n for (var i = 0; i < codePoints.length; i++) {\n this.username += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n }\n },\n // https://url.spec.whatwg.org/#dom-url-password\n getPassword: function () {\n return this.password;\n },\n setPassword: function (password) {\n var codePoints = arrayFrom($toString(password));\n if (this.cannotHaveUsernamePasswordPort()) return;\n this.password = '';\n for (var i = 0; i < codePoints.length; i++) {\n this.password += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n }\n },\n // https://url.spec.whatwg.org/#dom-url-host\n getHost: function () {\n var host = this.host;\n var port = this.port;\n return host === null ? ''\n : port === null ? serializeHost(host)\n : serializeHost(host) + ':' + port;\n },\n setHost: function (host) {\n if (this.cannotBeABaseURL) return;\n this.parse(host, HOST);\n },\n // https://url.spec.whatwg.org/#dom-url-hostname\n getHostname: function () {\n var host = this.host;\n return host === null ? '' : serializeHost(host);\n },\n setHostname: function (hostname) {\n if (this.cannotBeABaseURL) return;\n this.parse(hostname, HOSTNAME);\n },\n // https://url.spec.whatwg.org/#dom-url-port\n getPort: function () {\n var port = this.port;\n return port === null ? '' : $toString(port);\n },\n setPort: function (port) {\n if (this.cannotHaveUsernamePasswordPort()) return;\n port = $toString(port);\n if (port == '') this.port = null;\n else this.parse(port, PORT);\n },\n // https://url.spec.whatwg.org/#dom-url-pathname\n getPathname: function () {\n var path = this.path;\n return this.cannotBeABaseURL ? path[0] : path.length ? '/' + join(path, '/') : '';\n },\n setPathname: function (pathname) {\n if (this.cannotBeABaseURL) return;\n this.path = [];\n this.parse(pathname, PATH_START);\n },\n // https://url.spec.whatwg.org/#dom-url-search\n getSearch: function () {\n var query = this.query;\n return query ? '?' + query : '';\n },\n setSearch: function (search) {\n search = $toString(search);\n if (search == '') {\n this.query = null;\n } else {\n if ('?' == charAt(search, 0)) search = stringSlice(search, 1);\n this.query = '';\n this.parse(search, QUERY);\n }\n this.searchParams.update();\n },\n // https://url.spec.whatwg.org/#dom-url-searchparams\n getSearchParams: function () {\n return this.searchParams.facade;\n },\n // https://url.spec.whatwg.org/#dom-url-hash\n getHash: function () {\n var fragment = this.fragment;\n return fragment ? '#' + fragment : '';\n },\n setHash: function (hash) {\n hash = $toString(hash);\n if (hash == '') {\n this.fragment = null;\n return;\n }\n if ('#' == charAt(hash, 0)) hash = stringSlice(hash, 1);\n this.fragment = '';\n this.parse(hash, FRAGMENT);\n },\n update: function () {\n this.query = this.searchParams.serialize() || null;\n }\n};\n\n// `URL` constructor\n// https://url.spec.whatwg.org/#url-class\nvar URLConstructor = function URL(url /* , base */) {\n var that = anInstance(this, URLPrototype);\n var base = validateArgumentsLength(arguments.length, 1) > 1 ? arguments[1] : undefined;\n var state = setInternalState(that, new URLState(url, false, base));\n if (!DESCRIPTORS) {\n that.href = state.serialize();\n that.origin = state.getOrigin();\n that.protocol = state.getProtocol();\n that.username = state.getUsername();\n that.password = state.getPassword();\n that.host = state.getHost();\n that.hostname = state.getHostname();\n that.port = state.getPort();\n that.pathname = state.getPathname();\n that.search = state.getSearch();\n that.searchParams = state.getSearchParams();\n that.hash = state.getHash();\n }\n};\n\nvar URLPrototype = URLConstructor.prototype;\n\nvar accessorDescriptor = function (getter, setter) {\n return {\n get: function () {\n return getInternalURLState(this)[getter]();\n },\n set: setter && function (value) {\n return getInternalURLState(this)[setter](value);\n },\n configurable: true,\n enumerable: true\n };\n};\n\nif (DESCRIPTORS) {\n // `URL.prototype.href` accessors pair\n // https://url.spec.whatwg.org/#dom-url-href\n defineBuiltInAccessor(URLPrototype, 'href', accessorDescriptor('serialize', 'setHref'));\n // `URL.prototype.origin` getter\n // https://url.spec.whatwg.org/#dom-url-origin\n defineBuiltInAccessor(URLPrototype, 'origin', accessorDescriptor('getOrigin'));\n // `URL.prototype.protocol` accessors pair\n // https://url.spec.whatwg.org/#dom-url-protocol\n defineBuiltInAccessor(URLPrototype, 'protocol', accessorDescriptor('getProtocol', 'setProtocol'));\n // `URL.prototype.username` accessors pair\n // https://url.spec.whatwg.org/#dom-url-username\n defineBuiltInAccessor(URLPrototype, 'username', accessorDescriptor('getUsername', 'setUsername'));\n // `URL.prototype.password` accessors pair\n // https://url.spec.whatwg.org/#dom-url-password\n defineBuiltInAccessor(URLPrototype, 'password', accessorDescriptor('getPassword', 'setPassword'));\n // `URL.prototype.host` accessors pair\n // https://url.spec.whatwg.org/#dom-url-host\n defineBuiltInAccessor(URLPrototype, 'host', accessorDescriptor('getHost', 'setHost'));\n // `URL.prototype.hostname` accessors pair\n // https://url.spec.whatwg.org/#dom-url-hostname\n defineBuiltInAccessor(URLPrototype, 'hostname', accessorDescriptor('getHostname', 'setHostname'));\n // `URL.prototype.port` accessors pair\n // https://url.spec.whatwg.org/#dom-url-port\n defineBuiltInAccessor(URLPrototype, 'port', accessorDescriptor('getPort', 'setPort'));\n // `URL.prototype.pathname` accessors pair\n // https://url.spec.whatwg.org/#dom-url-pathname\n defineBuiltInAccessor(URLPrototype, 'pathname', accessorDescriptor('getPathname', 'setPathname'));\n // `URL.prototype.search` accessors pair\n // https://url.spec.whatwg.org/#dom-url-search\n defineBuiltInAccessor(URLPrototype, 'search', accessorDescriptor('getSearch', 'setSearch'));\n // `URL.prototype.searchParams` getter\n // https://url.spec.whatwg.org/#dom-url-searchparams\n defineBuiltInAccessor(URLPrototype, 'searchParams', accessorDescriptor('getSearchParams'));\n // `URL.prototype.hash` accessors pair\n // https://url.spec.whatwg.org/#dom-url-hash\n defineBuiltInAccessor(URLPrototype, 'hash', accessorDescriptor('getHash', 'setHash'));\n}\n\n// `URL.prototype.toJSON` method\n// https://url.spec.whatwg.org/#dom-url-tojson\ndefineBuiltIn(URLPrototype, 'toJSON', function toJSON() {\n return getInternalURLState(this).serialize();\n}, { enumerable: true });\n\n// `URL.prototype.toString` method\n// https://url.spec.whatwg.org/#URL-stringification-behavior\ndefineBuiltIn(URLPrototype, 'toString', function toString() {\n return getInternalURLState(this).serialize();\n}, { enumerable: true });\n\nif (NativeURL) {\n var nativeCreateObjectURL = NativeURL.createObjectURL;\n var nativeRevokeObjectURL = NativeURL.revokeObjectURL;\n // `URL.createObjectURL` method\n // https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL\n if (nativeCreateObjectURL) defineBuiltIn(URLConstructor, 'createObjectURL', bind(nativeCreateObjectURL, NativeURL));\n // `URL.revokeObjectURL` method\n // https://developer.mozilla.org/en-US/docs/Web/API/URL/revokeObjectURL\n if (nativeRevokeObjectURL) defineBuiltIn(URLConstructor, 'revokeObjectURL', bind(nativeRevokeObjectURL, NativeURL));\n}\n\nsetToStringTag(URLConstructor, 'URL');\n\n$({ global: true, constructor: true, forced: !USE_NATIVE_URL, sham: !DESCRIPTORS }, {\n URL: URLConstructor\n});\n","// TODO: Remove this module from `core-js@4` since it's replaced to module below\nrequire('../modules/web.url.constructor');\n"],"names":["super_","UrlPlugin","options","arguments","length","undefined","_classCallCheck","this","bookReaderOptions","urlSchema","name","position","default","deprecated_for","urlState","urlMode","urlHistoryBasePath","urlLocationPollId","oldLocationHash","oldUserHash","key","value","_this","searchParams","URLSearchParams","pathParams","Object","keys","forEach","_schema","_schema2","_schema3","_schema4","schema","find","schemaKey","append","strPathParams","filter","s","map","concat","join","strStrippedTrailingSlash","replace","concatenatedPath","toString","urlString","urlPath","URL","urlSearchParamsObj","fromEntries","entries","splitUrlMatches","pathname","match","urlStrSplitSlashObj","x","split","doesKeyExists","_object","_key","some","hasPropertyKey","_ref","_ref2","pushToAddressBar","urlStrPath","urlStateToUrlString","window","history","replaceState","newUrlPath","trim","e","location","_this2","hash","substr","clearInterval","setInterval","newFragment","urlStringToUrlState","path","search","extend","BookReader","defaultOptions","enableUrlPlugin","bookId","defaults","updateWindowTitle","urlTrackedParams","urlTrackIndex0","prototype","setup","call","locationPollId","init","bind","eventNames","PostInit","_this$options","document","title","shortTitle","bookTitle","urlStartLocationPolling","fragmentChange","urlUpdateFragment","maximumCharacters","urlReadFragment","params","paramsFromFragment","updateParams","updateFromParams","trigger","stop","animating","autoStop","animationFinishedCallback","allParams","paramsFromCurrent","_this$options2","index","page","reduce","validParams","paramName","fragmentFromParams","currFragment","currQueryString","getLocationSearch","newQueryString","queryStringFromParams","baseWithoutSlash","newFragmentWithSlash","newQueryStringSearch","urlParamsFiltersOnlySearch","readQueryString","url","has","q","get","_this$options3","urlReadHashFragment","BookreaderUrlPlugin","_BookReader","_inherits","_super","apply","_this3","urlPlugin","listenForHashChanges","_get","_getPrototypeOf","makeBuiltIn","defineProperty","module","exports","target","descriptor","getter","set","setter","f","uncurryThis","maxInt","regexNonASCII","regexSeparators","OVERFLOW_ERROR","$RangeError","RangeError","exec","floor","Math","fromCharCode","String","charCodeAt","push","toLowerCase","digitToBasic","digit","adapt","delta","numPoints","firstTime","k","baseMinusTMin","base","encode","input","output","string","counter","extra","ucs2decode","i","currentValue","inputLength","n","bias","basicLength","handledCPCount","m","handledCPCountPlusOne","t","qMinusT","baseMinusT","label","encoded","labels","PROPER_FUNCTION_NAME","fails","whitespaces","METHOD_NAME","$","$entries","stat","O","iterate","createProperty","iterable","obj","v","AS_ENTRIES","$trim","proto","forced","forcedStringTrimMethod","EOF","DESCRIPTORS","USE_NATIVE_URL","global","defineBuiltIn","defineBuiltInAccessor","anInstance","hasOwn","assign","arrayFrom","arraySlice","codeAt","toASCII","$toString","setToStringTag","validateArgumentsLength","URLSearchParamsModule","InternalStateModule","setInternalState","getInternalURLState","getterFor","getInternalSearchParamsState","getState","NativeURL","TypeError","parseInt","pow","charAt","numberToString","pop","shift","stringSlice","slice","unshift","INVALID_SCHEME","INVALID_HOST","INVALID_PORT","ALPHA","ALPHANUMERIC","DIGIT","HEX_START","OCT","DEC","HEX","FORBIDDEN_HOST_CODE_POINT","FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT","LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE","TAB_AND_NEW_LINE","serializeHost","host","result","compress","ignore0","ipv6","maxIndex","maxLength","currStart","currLength","findLongestZeroSequence","C0ControlPercentEncodeSet","fragmentPercentEncodeSet","pathPercentEncodeSet","userinfoPercentEncodeSet","percentEncode","chr","code","encodeURIComponent","specialSchemes","ftp","file","http","https","ws","wss","isWindowsDriveLetter","normalized","second","startsWithWindowsDriveLetter","third","isSingleDot","segment","SCHEME_START","SCHEME","NO_SCHEME","SPECIAL_RELATIVE_OR_AUTHORITY","PATH_OR_AUTHORITY","RELATIVE","RELATIVE_SLASH","SPECIAL_AUTHORITY_SLASHES","SPECIAL_AUTHORITY_IGNORE_SLASHES","AUTHORITY","HOST","HOSTNAME","PORT","FILE","FILE_SLASH","FILE_HOST","PATH_START","PATH","CANNOT_BE_A_BASE_URL_PATH","QUERY","FRAGMENT","URLState","isBase","baseState","failure","parse","bindURL","type","stateOverride","codePoints","bufferCodePoints","state","pointer","buffer","seenAt","seenBracket","seenPasswordToken","scheme","username","password","port","query","fragment","cannotBeABaseURL","isSpecial","includesCredentials","codePoint","encodedCodePoints","parseHost","shortenPath","numbersSeen","ipv4Piece","number","swaps","swap","address","pieceIndex","parseIPv6","partsLength","numbers","part","radix","ipv4","parts","parseIPv4","cannotHaveUsernamePasswordPort","pathSize","serialize","setHref","href","update","getOrigin","URLConstructor","origin","error","getProtocol","setProtocol","protocol","getUsername","setUsername","getPassword","setPassword","getHost","setHost","getHostname","setHostname","hostname","getPort","setPort","getPathname","setPathname","getSearch","setSearch","getSearchParams","facade","getHash","setHash","that","URLPrototype","accessorDescriptor","configurable","enumerable","nativeCreateObjectURL","createObjectURL","nativeRevokeObjectURL","revokeObjectURL","constructor","sham"],"sourceRoot":""}
package/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ # 5.0.0-65
2
+ - Dev: Remove Debug console dev helper @cdrini
3
+ - Dev: Fix deno esm.sh esbuild erroring @cdrini
4
+ - Dev: Update test/build deps @cdrini
5
+
1
6
  # 5.0.0-64
2
7
  - Dev: update dependencies @renovate
3
8
  - Dev: update build step @cdrini
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@internetarchive/bookreader",
3
- "version": "5.0.0-64",
3
+ "version": "5.0.0-65",
4
4
  "description": "The Internet Archive BookReader.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -41,18 +41,18 @@
41
41
  "lit": "^2.5.0"
42
42
  },
43
43
  "devDependencies": {
44
- "@babel/core": "7.22.5",
45
- "@babel/eslint-parser": "7.21.8",
44
+ "@babel/core": "7.22.9",
45
+ "@babel/eslint-parser": "7.22.9",
46
46
  "@babel/plugin-proposal-class-properties": "7.18.6",
47
- "@babel/plugin-proposal-decorators": "7.22.5",
48
- "@babel/preset-env": "7.22.5",
47
+ "@babel/plugin-proposal-decorators": "7.22.7",
48
+ "@babel/preset-env": "7.22.9",
49
49
  "@open-wc/testing-helpers": "^2.3.0",
50
- "@types/jest": "29.5.2",
50
+ "@types/jest": "29.5.3",
51
51
  "@webcomponents/webcomponentsjs": "^2.6.0",
52
- "babel-loader": "9.1.2",
52
+ "babel-loader": "9.1.3",
53
53
  "codecov": "^3.8.3",
54
54
  "concurrently": "7.4.0",
55
- "core-js": "3.30.2",
55
+ "core-js": "3.27.1",
56
56
  "cpx2": "4.2.3",
57
57
  "eslint": "^7.32.0",
58
58
  "eslint-plugin-no-jquery": "^2.7.0",
@@ -60,7 +60,7 @@
60
60
  "hammerjs": "^2.0.8",
61
61
  "http-server": "14.1.1",
62
62
  "iso-language-codes": "1.1.0",
63
- "jest": "29.5.0",
63
+ "jest": "29.6.2",
64
64
  "jest-environment-jsdom": "^29.4.3",
65
65
  "jquery": "3.6.1",
66
66
  "jquery-colorbox": "1.6.4",
@@ -71,13 +71,13 @@
71
71
  "live-server": "1.2.2",
72
72
  "node-fetch": "3.2.10",
73
73
  "regenerator-runtime": "0.13.11",
74
- "sass": "1.63.3",
75
- "sinon": "15.1.0",
74
+ "sass": "1.64.2",
75
+ "sinon": "^15.1.0",
76
76
  "soundmanager2": "2.97.20170602",
77
77
  "svgo": "3.0.2",
78
78
  "testcafe": "2.6.2",
79
79
  "testcafe-browser-provider-browserstack": "^1.13.2-alpha.1",
80
- "webpack": "5.86.0",
80
+ "webpack": "5.88.2",
81
81
  "webpack-cli": "5.1.4"
82
82
  },
83
83
  "jest": {
@@ -121,7 +121,7 @@
121
121
  "DOCS:update:test-deps": "If CI succeeds, these should be good to update",
122
122
  "update:test-deps": "npm i @babel/eslint-parser@latest @open-wc/testing-helpers@latest @types/jest@latest codecov@latest eslint@7 eslint-plugin-testcafe@latest jest@latest sinon@latest testcafe@latest",
123
123
  "DOCS:update:build-deps": "These can cause strange changes, so do an npm run build + check file size (git diff --stat), and check the site is as expected",
124
- "update:build-deps": "npm i @babel/core@latest @babel/preset-env@latest @babel/plugin-proposal-class-properties@latest @babel/plugin-proposal-decorators@latest babel-loader@latest core-js@latest regenerator-runtime@latest sass@latest svgo@latest webpack@latest webpack-cli@latest",
124
+ "update:build-deps": "npm i @babel/core@latest @babel/preset-env@latest @babel/plugin-proposal-class-properties@latest @babel/plugin-proposal-decorators@latest babel-loader@latest core-js@3.27.1 regenerator-runtime@latest sass@latest svgo@latest webpack@latest webpack-cli@latest",
125
125
  "codecov": "npx codecov"
126
126
  }
127
127
  }
package/src/BookReader.js CHANGED
@@ -33,7 +33,6 @@ import { DEFAULT_OPTIONS, OptionsParseError } from './BookReader/options.js';
33
33
  /** @typedef {import('./BookReader/options.js').ReductionFactor} ReductionFactor */
34
34
  /** @typedef {import('./BookReader/BookModel.js').PageIndex} PageIndex */
35
35
  import { EVENTS } from './BookReader/events.js';
36
- import { DebugConsole } from './BookReader/DebugConsole.js';
37
36
  import { Toolbar } from './BookReader/Toolbar/Toolbar.js';
38
37
  import { BookModel } from './BookReader/BookModel.js';
39
38
  import { Mode1Up } from './BookReader/Mode1Up.js';
@@ -43,10 +42,6 @@ import { ImageCache } from './BookReader/ImageCache.js';
43
42
  import { PageContainer } from './BookReader/PageContainer.js';
44
43
  import { NAMED_REDUCE_SETS } from './BookReader/ReduceSet';
45
44
 
46
- if (location.toString().indexOf('_debugShowConsole=true') != -1) {
47
- $(() => new DebugConsole().init());
48
- }
49
-
50
45
  /**
51
46
  * BookReader
52
47
  * @param {BookReaderOptions} options