{"version":3,"file":"/js/carousel.js","mappings":"mBAAA,IAAIA,EAAMC,OAECC,EAAMF,EAAIG,uBAChBH,EAAII,6BACJJ,EAAIK,0BACJL,EAAIM,yBACJ,SAASC,GAAM,OAAOC,WAAWD,EAAI,KCNtC,EAAMN,OAECQ,EAAM,EAAIC,sBAChB,EAAIC,yBACJ,SAASC,GAAKC,aAAaD,ICJzB,SAASE,IAMd,IALA,IAAIC,EAAKC,EAAMC,EACXC,EAASC,UAAU,IAAM,GACzBC,EAAI,EACJC,EAASF,UAAUE,OAEhBD,EAAIC,EAAQD,IACjB,GAA6B,QAAxBL,EAAMI,UAAUC,IACnB,IAAKJ,KAAQD,EAGPG,KAFJD,EAAOF,EAAIC,UAISM,IAATL,IACTC,EAAOF,GAAQC,GAKvB,OAAOC,ECnBF,SAASK,EAAmBC,GACjC,MAAO,CAAC,OAAQ,SAASC,QAAQD,IAAU,EAAIE,KAAKC,MAAMH,GAASA,ECD9D,SAASI,EAAgBC,EAASC,EAAKN,EAAOO,GACnD,GAAIA,EACF,IAAMF,EAAQG,QAAQF,EAAKN,GAAU,MAAOS,IAE9C,OAAOT,ECJF,SAASU,IACd,IAAIC,EAAMC,SACNC,EAAOF,EAAIE,KAOf,OALKA,KACHA,EAAOF,EAAIG,cAAc,SACpBC,MAAO,GAGPF,ECTF,IAAIG,EAAaJ,SAASK,gBCE1B,SAASC,EAAaL,GAC3B,IAAIM,EAAc,GAUlB,OATIN,EAAKE,OACPI,EAAcH,EAAWI,MAAMC,SAE/BR,EAAKO,MAAME,WAAa,GAExBT,EAAKO,MAAMC,SAAWL,EAAWI,MAAMC,SAAW,SAClDL,EAAWO,YAAYV,IAGlBM,ECXF,SAASK,EAAeX,EAAMM,GAC/BN,EAAKE,OACPF,EAAKY,SACLT,EAAWI,MAAMC,SAAWF,EAG5BH,EAAWU,cCNR,SAASC,EAAWC,EAAOC,EAAUC,EAAOC,GAE/C,eAAgBH,EACdA,EAAMI,WAAWH,EAAW,IAAMC,EAAQ,IAAKC,GAC/CH,EAAMK,QAAQJ,EAAUC,EAAOC,GCN9B,SAASG,EAAkBN,GAEhC,OADY,eAAgBA,EAASA,EAAMO,SAAWP,EAAME,OAChDjC,OCDP,SAASuC,EAASC,EAAKC,EAAUC,GACtC,IAAK,IAAI3C,EAAI,EAAG4C,EAAIH,EAAIxC,OAAQD,EAAI4C,EAAG5C,IACrC0C,EAASG,KAAKF,EAAOF,EAAIzC,GAAIA,GCH1B,IAAI8C,EAAmB,cAAe9B,SAASE,cAAc,KCEhE6B,EAAWD,EACX,SAAUE,EAAIC,GAAO,OAAOD,EAAGE,UAAUC,SAASF,IAClD,SAAUD,EAAIC,GAAO,OAAOD,EAAGI,UAAU/C,QAAQ4C,IAAQ,GCHzDI,EAAWP,EACX,SAAUE,EAAIC,GACPF,EAASC,EAAKC,IAAQD,EAAGE,UAAUI,IAAIL,IAE9C,SAAUD,EAAIC,GACPF,EAASC,EAAKC,KAAQD,EAAGI,WAAa,IAAMH,ICLnDM,EAAcT,EACd,SAAUE,EAAIC,GACRF,EAASC,EAAKC,IAAQD,EAAGE,UAAUrB,OAAOoB,IAEhD,SAAUD,EAAIC,GACRF,EAASC,EAAIC,KAAQD,EAAGI,UAAYJ,EAAGI,UAAUI,QAAQP,EAAK,MCNjE,SAASQ,EAAQT,EAAIU,GAC1B,OAAOV,EAAGW,aAAaD,GCDlB,SAASE,EAAQZ,EAAIU,GAC1B,OAAOV,EAAGa,aAAaH,GCDlB,SAASI,EAAWd,GAEzB,YAA0B,IAAZA,EAAGe,KCAZ,SAASC,EAASC,EAAKC,GAE5B,GADAD,EAAOH,EAAWG,IAAQA,aAAeE,MAASF,EAAM,CAACA,GACX,oBAA1CG,OAAOC,UAAUC,SAASzB,KAAKqB,GAEnC,IAAK,IAAIlE,EAAIiE,EAAIhE,OAAQD,KACvB,IAAI,IAAIU,KAAOwD,EACbD,EAAIjE,GAAGuE,aAAa7D,EAAKwD,EAAMxD,ICN9B,SAAS8D,EAAYP,EAAKC,GAC/BD,EAAOH,EAAWG,IAAQA,aAAeE,MAASF,EAAM,CAACA,GAIzD,IADA,IAAIQ,GAFJP,EAASA,aAAiBC,MAASD,EAAQ,CAACA,IAErBjE,OACdD,EAAIiE,EAAIhE,OAAQD,KACvB,IAAK,IAAI0E,EAAID,EAAYC,KACvBT,EAAIjE,GAAG2E,gBAAgBT,EAAMQ,ICT5B,SAASE,EAAmBC,GAEjC,IADA,IAAIpC,EAAM,GACDzC,EAAI,EAAG4C,EAAIiC,EAAG5E,OAAQD,EAAI4C,EAAG5C,IACpCyC,EAAIqC,KAAKD,EAAG7E,IAEd,OAAOyC,ECLF,SAASsC,EAAY/B,EAAIgC,GACL,SAArBhC,EAAGxB,MAAMyD,UAAsBjC,EAAGxB,MAAMyD,QAAU,QCDjD,SAASC,EAAYlC,EAAIgC,GACL,SAArBhC,EAAGxB,MAAMyD,UAAsBjC,EAAGxB,MAAMyD,QAAU,ICDjD,SAASE,EAAUnC,GACxB,MAA+C,SAAxCnE,OAAOuG,iBAAiBpC,GAAIiC,QCD9B,SAASI,EAAcC,GAC5B,GAAqB,iBAAVA,EAAoB,CAC7B,IAAI7C,EAAM,CAAC6C,GACPC,EAAQD,EAAME,OAAO,GAAGC,cAAgBH,EAAMI,OAAO,GAC1C,CAAC,SAAU,MAAO,KAAM,KAE9BlD,SAAQ,SAASmD,GACT,OAAXA,GAA6B,cAAVL,GACrB7C,EAAIqC,KAAKa,EAASJ,MAItBD,EAAQ7C,EAKV,IAFA,IAAIO,EAAKhC,SAASE,cAAc,eAExBlB,GADEsF,EAAMrF,OACJ,GAAGD,EAAIsF,EAAMrF,OAAQD,IAAI,CACnC,IAAI4F,EAAON,EAAMtF,GACjB,QAAuBE,IAAnB8C,EAAGxB,MAAMoE,GAAuB,OAAOA,EAG7C,OAAO,EClBF,SAASC,EAAeC,EAAQC,GACrC,IAAIC,GAAU,EAQd,MAPI,UAAUC,KAAKH,GACjBE,EAAU,SAAWD,EAAU,MACtB,KAAKE,KAAKH,GACnBE,EAAU,IAAMD,EAAU,MACjBD,IACTE,EAAUD,EAAQG,cAAgB,OAE7BF,ECZT,IAAIG,GAAkB,EACtB,IACE,IAAIC,EAAOhC,OAAOiC,eAAe,GAAI,UAAW,CAC9CC,IAAK,WACHH,GAAkB,KAGtBtH,OAAO0H,iBAAiB,OAAQ,KAAMH,GACtC,MAAOvF,IACF,IAAI2F,IAAgBL,GAAkB,CAAEM,SAAS,GCRjD,SAASC,EAAU1D,EAAIrD,EAAKgH,GACjC,IAAK,IAAIf,KAAQjG,EAAK,CACpB,IAAIiH,EAAS,CAAC,aAAc,aAAavG,QAAQuF,IAAS,IAAMe,GAAmBH,EACnFxD,EAAGuD,iBAAiBX,EAAMjG,EAAIiG,GAAOgB,ICHlC,SAASC,EAAa7D,EAAIrD,GAC/B,IAAK,IAAIiG,KAAQjG,EAAK,CACpB,IAAIiH,EAAS,CAAC,aAAc,aAAavG,QAAQuF,IAAS,GAAIY,EAC9DxD,EAAG8D,oBAAoBlB,EAAMjG,EAAIiG,GAAOgB,ICLrC,SAASG,IACd,MAAO,CACLC,OAAQ,GACRC,GAAI,SAAUC,EAAWC,GACvBC,KAAKJ,OAAOE,GAAaE,KAAKJ,OAAOE,IAAc,GACnDE,KAAKJ,OAAOE,GAAWpC,KAAKqC,IAE9BE,IAAK,SAASH,EAAWC,GACvB,GAAIC,KAAKJ,OAAOE,GACd,IAAK,IAAIlH,EAAI,EAAGA,EAAIoH,KAAKJ,OAAOE,GAAWjH,OAAQD,IACjD,GAAIoH,KAAKJ,OAAOE,GAAWlH,KAAOmH,EAAI,CACpCC,KAAKJ,OAAOE,GAAWI,OAAOtH,EAAG,GACjC,QAKRuH,KAAM,SAAUL,EAAWM,GACzBA,EAAKC,KAAOP,EACRE,KAAKJ,OAAOE,IACdE,KAAKJ,OAAOE,GAAW1E,SAAQ,SAAS2E,GACtCA,EAAGK,EAAMN,QCpBd9C,OAAOsD,OACVtD,OAAOsD,KAAO,SAASC,GACrB,IAAID,EAAO,GACX,IAAK,IAAI9H,KAAQ+H,EACXvD,OAAOC,UAAUuD,eAAe/E,KAAK8E,EAAQ/H,IAC/C8H,EAAK5C,KAAKlF,GAGd,OAAO8H,IAKN,WAAYG,QAAQxD,YACvBwD,QAAQxD,UAAUxC,OAAS,WACtBuF,KAAKU,YACNV,KAAKU,WAAWC,YAAYX,QAwC3B,IAAIY,EAAM,SAASC,GACxBA,EAAUvI,EAAO,CACfwI,UAAW,UACXC,KAAM,WACNC,KAAM,aACNC,MAAO,EACPC,OAAQ,EACRC,YAAa,EACbC,YAAY,EACZC,WAAW,EACXC,aAAa,EACbC,QAAS,EACTC,QAAQ,EACRC,UAAU,EACVC,iBAAkB,MAClBC,aAAc,CAAC,OAAQ,QACvBC,mBAAmB,EACnBC,YAAY,EACZC,YAAY,EACZC,KAAK,EACLC,YAAa,MACbC,cAAc,EACdC,iBAAiB,EACjBC,WAAW,EACXC,MAAO,IACPC,UAAU,EACVC,iBAAkB,MAClBC,gBAAiB,IACjBC,kBAAmB,UACnBC,aAAc,CAAC,QAAS,QACxBC,oBAAoB,EACpBC,gBAAgB,EAChBC,sBAAsB,EACtBC,2BAA2B,EAC3BC,UAAW,aACXC,WAAY,cACZC,cAAe,aACfC,cAAc,EACdC,MAAM,EACNC,QAAQ,EACRC,YAAY,EACZC,YAAY,EACZC,UAAU,EACVC,iBAAkB,gBAClBC,OAAO,EACPC,WAAW,EACXC,WAAY,GACZC,QAAQ,EACRC,0BAA0B,EAC1BC,sBAAsB,EACtBC,WAAW,EACXC,QAAQ,EACRC,iBAAiB,EACjBC,OAAO,GACNpD,GAAW,IAEd,IAAIlH,EAAMC,SACNpC,EAAMC,OACNyM,EAAO,CACLC,MAAO,GACPC,MAAO,GACPC,KAAM,GACNC,MAAO,IAETC,EAAa,GACbC,EAAqB3D,EAAQmD,gBAEjC,GAAIQ,EAAoB,CAEtB,IAAIC,EAAcC,UAAUC,UACxBC,EAAM,IAAIC,KAEd,KACEN,EAAa/M,EAAIsN,eAEfP,EAAW/K,QAAQoL,EAAKA,GACxBJ,EAAqBD,EAAWQ,QAAQH,IAAQA,EAChDL,EAAWS,WAAWJ,IAEtBJ,GAAqB,EAElBA,IAAsBD,EAAa,IACxC,MAAM9K,GACN+K,GAAqB,EAGnBA,IAEED,EAAmB,QAAKA,EAAmB,SAAME,GACnD,CAAC,KAAM,MAAO,MAAO,MAAO,MAAO,OAAQ,OAAQ,OAAQ,OAAQ,MAAO,OAAOrJ,SAAQ,SAASuB,GAAQ4H,EAAWS,WAAWrI,MAGlImI,aAAqB,OAAIL,GAI7B,IAAIQ,EAAOV,EAAe,GAAIxL,EAAkBwL,EAAe,IAAKnL,EAAgBmL,EAAY,KClJ3F,WACL,IAAI5K,EAAMC,SACNC,EAAOH,IACPS,EAAcD,EAAYL,GAC1BqL,EAAMvL,EAAIG,cAAc,OACxBqL,GAAS,EAEbtL,EAAKU,YAAY2K,GACjB,IAIE,IAHA,IAEIE,EAFAvJ,EAAM,cACNwJ,EAAO,CAAC,OAASxJ,EAAK,YAAcA,EAAK,eAAiBA,GAErDjD,EAAI,EAAGA,EAAI,EAAGA,IAGrB,GAFAwM,EAAMC,EAAKzM,GACXsM,EAAI9K,MAAMkL,MAAQF,EACM,MAApBF,EAAIK,YAAqB,CAC3BJ,EAASC,EAAIhJ,QAAQP,EAAK,IAC1B,OAGJ,MAAOpC,IAIT,OAFAI,EAAKE,KAAOS,EAAcX,EAAMM,GAAe+K,EAAIzK,SAE5C0K,ED0H+FK,GAAQhB,GAC1GiB,EAAmBlB,EAAgB,IAAIxL,EAAkBwL,EAAgB,KAAKnL,EAAgBmL,EAAY,MEpJzG,WAEL,IAQImB,EARA/L,EAAMC,SACNC,EAAOH,IACPS,EAAcD,EAAYL,GAC1B8L,EAAUhM,EAAIG,cAAc,OAC5B8L,EAAQjM,EAAIG,cAAc,OAC1B+B,EAAM,GAKV8J,EAAQ3J,UAAY,cACpB4J,EAAM5J,UAAY,WAElB,IAAK,IAAIpD,EAAI,EAAGA,EAPJ,GAOeA,IACzBiD,GAAO,cAWT,OARA+J,EAAMC,UAAYhK,EAClB8J,EAAQpL,YAAYqL,GACpB/L,EAAKU,YAAYoL,GAEjBD,EAAYI,KAAKC,IAAIJ,EAAQK,wBAAwBC,KAAOL,EAAMM,SAASC,IAAiBH,wBAAwBC,MAAQ,EAE5HpM,EAAKE,KAAOS,EAAcX,EAAMM,GAAewL,EAAQlL,SAEhDiL,EFyH8GU,GAAoB5B,GACrI6B,EAAQ9B,EAAgB,IAAIxL,EAAkBwL,EAAgB,KAAKnL,EAAgBmL,EAAY,MGvJ9F,WACL,GAAI9M,OAAO6O,YAAc7O,OAAO8O,aAC9B,OAAO,EAGT,IAMIC,EANA7M,EAAMC,SACNC,EAAOH,IACPS,EAAcD,EAAYL,GAC1BqL,EAAMvL,EAAIG,cAAc,OACxBM,EAAQT,EAAIG,cAAc,SAC1B2M,EAAO,kEAmBX,OAhBArM,EAAMiG,KAAO,WACb6E,EAAIlJ,UAAY,cAEhBnC,EAAKU,YAAYH,GACjBP,EAAKU,YAAY2K,GAEb9K,EAAMsM,WACRtM,EAAMsM,WAAWC,QAAUF,EAE3BrM,EAAMG,YAAYZ,EAAIiN,eAAeH,IAGvCD,EAAW/O,OAAOuG,iBAAmBvG,OAAOuG,iBAAiBkH,GAAKsB,SAAWtB,EAAI2B,aAAuB,SAExGhN,EAAKE,KAAOS,EAAcX,EAAMM,GAAe+K,EAAIzK,SAE/B,aAAb+L,EH0HmGM,GAAqBtC,GAC3HuC,EAAYxC,EAAgB,IAAIxL,EAAkBwL,EAAgB,KAAKnL,EAAgBmL,EAAY,MAAOtG,EAAc,aAAcuG,GACtIwC,EAAkBzC,EAAgB,IAAIxL,EAAkBwL,EAAgB,KAAKnL,EAAgBmL,EAAY,MIzJxG,SAAyB0C,GAC9B,IAAKA,EAAM,OAAO,EAClB,IAAKxP,OAAOuG,iBAAoB,OAAO,EAEvC,IAIIkJ,EAJAvN,EAAMC,SACNC,EAAOH,IACPS,EAAcD,EAAYL,GAC1B+B,EAAKjC,EAAIG,cAAc,KAEvBqN,EAAQF,EAAGpO,OAAS,EAAI,IAAMoO,EAAGG,MAAM,GAAI,GAAGtI,cAAgB,IAAM,GAYxE,OAVAqI,GAAS,YAGTtN,EAAKwN,aAAazL,EAAI,MAEtBA,EAAGxB,MAAM6M,GAAM,2BACfC,EAAQzP,OAAOuG,iBAAiBpC,GAAI0L,iBAAiBH,GAErDtN,EAAKE,KAAOS,EAAcX,EAAMM,GAAeyB,EAAGnB,cAEhC3B,IAAVoO,GAAuBA,EAAMrO,OAAS,GAAe,SAAVqO,EJoIiEK,CAAgBR,GAAYvC,GAC5IgD,EAAqBjD,EAAiB,KAAIxL,EAAkBwL,EAAiB,MAAKnL,EAAgBmL,EAAY,OAAQtG,EAAc,sBAAuBuG,GAC3JiD,EAAkBlD,EAAiB,KAAIxL,EAAkBwL,EAAiB,MAAKnL,EAAgBmL,EAAY,OAAQtG,EAAc,mBAAoBuG,GACrJkD,EAAoBnD,EAAiB,KAAIxL,EAAkBwL,EAAiB,MAAKnL,EAAgBmL,EAAY,OAAQtG,EAAc,qBAAsBuG,GACzJmD,EAAiBpD,EAAiB,KAAIxL,EAAkBwL,EAAiB,MAAKnL,EAAgBmL,EAAY,OAAQtG,EAAc,kBAAmBuG,GACnJoD,EAAgBrD,EAAgB,IAAIxL,EAAkBwL,EAAgB,KAAKnL,EAAgBmL,EAAY,MAAO9F,EAAe+I,EAAoB,cAAehD,GAChKqD,EAAetD,EAAgB,IAAIxL,EAAkBwL,EAAgB,KAAKnL,EAAgBmL,EAAY,MAAO9F,EAAeiJ,EAAmB,aAAclD,GAG7JsD,EAAqBtQ,EAAIuQ,SAAuC,mBAArBvQ,EAAIuQ,QAAQC,KACvDC,EAAU,CAAC,YAAa,oBAAqB,aAAc,aAAc,eAAgB,kBACzFC,EAAkB,GAkBtB,GAhBAD,EAAQ7M,SAAQ,SAASuB,GACvB,GAA6B,iBAAlBkE,EAAQlE,GAAoB,CACrC,IAAId,EAAMgF,EAAQlE,GACdf,EAAKjC,EAAIwO,cAActM,GAG3B,GAFAqM,EAAgBvL,GAAQd,GAEpBD,IAAMA,EAAGwM,SAIX,YADIN,GAAsBC,QAAQC,KAAK,aAAenH,EAAQlE,KAF9DkE,EAAQlE,GAAQf,QASlBiF,EAAQC,UAAUoF,SAASrN,OAAS,GAAxC,CAMA,IAAIwK,EAAaxC,EAAQwC,WACrBM,EAAS9C,EAAQ8C,OACjB0E,EAA4B,aAAjBxH,EAAQE,KAEvB,GAAIsC,EAAY,CAEV,KAAKA,IACPxC,EAAUvI,EAAOuI,EAASwC,EAAW,WAC9BA,EAAW,IAGpB,IAAIiF,EAAgB,GACpB,IAAK,IAAIhP,MAAO+J,EAAY,CAC1B,IAAI+B,GAAM/B,EAAW/J,IAOrB8L,GAAqB,iBAARA,GAAmB,CAACnE,MAAOmE,IAAOA,GAC/CkD,EAAchP,IAAO8L,GAEvB/B,EAAaiF,EACbA,EAAgB,KAoBlB,GAJKD,GAZL,SAASE,EAAehQ,GACtB,IAAK,IAAIe,KAAOf,EACT8P,IACS,YAAR/O,IAAqBf,EAAIe,GAAO,QACxB,gBAARA,IAAyBf,EAAIe,IAAO,GAC5B,eAARA,IAAwBf,EAAIe,IAAO,IAI7B,eAARA,GAAwBiP,EAAchQ,EAAIe,IAGjCiP,CAAc1H,IAI1BwH,EAAU,CACbxH,EAAQG,KAAO,aACfH,EAAQU,QAAU,OAClBV,EAAQM,aAAc,EAEtB,IAAI2B,GAAYjC,EAAQiC,UACpBC,GAAalC,EAAQkC,WACrBE,GAAepC,EAAQoC,aACvBD,GAAgBnC,EAAQmC,cAG9B,IAGIwF,GAMAC,GATAC,GAA8B,eAAjB7H,EAAQG,KACrB2H,GAAehP,EAAIG,cAAc,OACjC8O,GAAejP,EAAIG,cAAc,OAEjCgH,GAAYD,EAAQC,UACpB+H,GAAkB/H,GAAUJ,WAC5BoI,GAAgBhI,GAAUiI,UAC1BC,GAAalI,GAAUoF,SACvB+C,GAAaD,GAAWnQ,OAExBqQ,GAAcC,KACdC,IAAO,EACP/F,GAAcgG,KACdhB,IAAYvH,GAAU9E,WAAa,cAGvC,IA2BIsN,GA0FAC,GACAC,GK5XApR,GL4gBEqR,GACAtE,GM7gB0BuE,GAAOzF,GAEnC7J,GNoQAiH,GAAYR,EAAQQ,UACpBD,GAAauI,GAAU,cACvBxI,GAAcwI,GAAU,eACxBzI,GAASyI,GAAU,UACnBC,GAAWC,KACXrI,GAASmI,GAAU,UACnB1I,GAASI,GAA6C,EAAjCyE,KAAKgE,MAAMH,GAAU,UAC1CpI,GAAUoI,GAAU,WACpBrI,GAAcT,EAAQS,aAAeT,EAAQkJ,wBAC7C5H,GAAYwH,GAAU,aACtBvH,GAAQuH,GAAU,SAClBxG,GAAStC,EAAQsC,OACjBD,IAAOC,IAAiBtC,EAAQqC,KAChCE,GAAauG,GAAU,cACvBlI,GAAWkI,GAAU,YACrBhI,GAAegI,GAAU,gBACzB5H,GAAM4H,GAAU,OAChBnG,GAAQmG,GAAU,SAClBlG,GAAYkG,GAAU,aACtBtH,GAAWsH,GAAU,YACrBpH,GAAkBoH,GAAU,mBAC5BlH,GAAekH,GAAU,gBACzBjH,GAAqBiH,GAAU,sBAC/B9G,GAA4B8G,GAAU,6BACtC/O,IM9R4B8O,GN8RH,KM9RUzF,GN8RJ0F,GAAU,SM5RzCvP,GAAQR,SAASE,cAAc,SAM/B4P,IAAStP,GAAM+C,aAAa,QAASuM,IAGrCzF,IAAS7J,GAAM+C,aAAa,QAAS8G,IAMzCrK,SAASuO,cAAc,QAAQ5N,YAAYH,IAEpCA,GAAMQ,MAAQR,GAAMQ,MAAQR,GAAMsM,YN4QrCpD,GAAWzC,EAAQyC,SACnBC,GAAmB1C,EAAQ0C,iBAE3ByG,GAAgB,GAChBC,GAAa/G,IAyOXuG,GAzBN,WAEE,GAAIpI,IAAcD,KAAeE,GAC/B,OAAO2H,GAAa,EAGpB,IAAIpN,EAAMuF,GAAa,aAAe,QAClC/F,EAAM,GAIV,IAFI+F,IAAcP,EAAQhF,GAAOoN,KAAc5N,EAAIqC,KAAKmD,EAAQhF,IAE5DwH,EACF,IAAK,IAAI6G,KAAM7G,EAAY,CACzB,IAAI8G,EAAM9G,EAAW6G,GAAIrO,GACrBsO,IAAQ/I,IAAc+I,EAAMlB,KAAe5N,EAAIqC,KAAKyM,GAM5D,OAFK9O,EAAIxC,QAAUwC,EAAIqC,KAAK,GAErBoI,KAAKsE,KAAKhJ,GAAaE,GAAcwE,KAAKuE,IAAIC,MAAM,KAAMjP,GAAOyK,KAAKyE,IAAID,MAAM,KAAMjP,IAKhFmP,GACXrF,GAASkD,EAAWvC,KAAKsE,MAAiB,EAAXX,GAAeR,IAAY,GAAiB,EAAXQ,GAAeR,GACnF9D,GAASW,KAAKyE,IAAId,GAAUtE,IAErBsF,GAAU,eAAiBtF,GAAS,EAAIA,IA7OA,EAC7CuF,GAAiBrC,EAAqCY,GAA0B,EAAbgB,GAAvChB,GAAagB,GACzCU,MAAoBvJ,KAAcC,IAAe6B,IACjD0H,GAAgBxJ,GAAayJ,KAAqB,KAClDC,IAA+BzC,IAAanF,GAE5C6H,GAAgBrC,GAAa,OAAS,MACtCsC,GAAkB,GAClBC,GAAmB,GAEnBC,GACM9J,GACK,WAAa,OAAOI,KAAW0B,GAAO+F,GAAa,EAAInD,KAAKsE,MAAOQ,IAAiBxJ,GAAaF,MAC/FG,GACF,WACL,IAAK,IAAIzI,EAAI,EAAGA,EAAI8R,GAAe9R,IACjC,GAAI0Q,GAAe1Q,KAAQgS,GAAiB,OAAOhS,GAIhD,WACL,OAAI4I,IAAU6G,IAAanF,GAClB+F,GAAa,EAEb/F,IAAQmF,EAAWvC,KAAKyE,IAAI,EAAGG,GAAgB5E,KAAKsE,KAAKnJ,KAAUyJ,GAAgB,GAKlG3P,GAAQoQ,GAAcxB,GAAU,eAChCyB,GAAcrQ,GAEdsQ,IADeC,KACJ,GACXC,GAAYlK,GAA4B,KAAhB6J,KAGxBtH,GAA2B/C,EAAQ+C,yBACnCF,GAAa7C,EAAQ6C,WACrB8H,IAAwB9H,IAAa,IACrC+H,IAAU,EACV1H,GAASlD,EAAQkD,OACjB2H,GAAS,IAAI/L,EAEbgM,GAAsB,mBAAqB9K,EAAQE,KACnD6K,GAAU9K,GAAU1I,KK/UpBA,GAAKX,OAAOoU,MAChBpU,OAAOoU,MAASzT,GAASA,GAAK,EAAT,EAEd,MAAQX,OAAOoU,OL6UlBC,GAAUnC,GAAU,WACpBoC,IAAW,EACXjI,GAAYjD,EAAQiD,UACpBkI,MAASlI,IAAczC,KAAY4K,KACnCC,IAAS,EACTC,GAAiB,CACf,MAASC,GACT,QAulEN,SAA4B3S,GAC1BA,EAAI4S,GAAS5S,GACb,IAAI6S,EAAW,CAACpI,EAAKG,KAAMH,EAAKI,OAAOrL,QAAQQ,EAAE8S,SAE7CD,GAAY,IACG,IAAbA,EACGzK,GAAWkK,UAAYK,GAAgB3S,GAAI,GACtCqI,GAAWiK,UACrBK,GAAgB3S,EAAG,MA7lErB+S,GAAY,CACV,MAm+DN,SAAqB/S,GACnB,GAAIgS,GAAS,CACX,GAAI7H,GAA4B,OAAiB6I,KAInD,IAAI/T,EAASgU,GADbjT,EAAI4S,GAAS5S,IAIb,KAAOf,IAAWuJ,KAAiB5F,EAAQ3D,EAAQ,aAAeA,EAASA,EAAOgI,WAClF,GAAIrE,EAAQ3D,EAAQ,YAAa,CAC/B,IAAIiU,EAAWC,GAAaC,OAAOrQ,EAAQ9D,EAAQ,aAC/CoU,EAAkB1L,IAAcC,GAAYsL,EAAW1D,GAAa8D,GAAQJ,EAAW1L,GAE3F+L,GADkB9K,GAAkByK,EAAW7G,KAAKuE,IAAIvE,KAAKsE,KAAK0C,GAAkB7D,GAAa,GAC/ExP,GAEdwT,KAAoBN,IAClBO,IAAaC,KACjBP,IAAc,KAp/Dd,QAsmEN,SAAuBnT,GACrBA,EAAI4S,GAAS5S,GACb,IAAI2T,EAAazT,EAAI0T,cACrB,IAAKhR,EAAQ+Q,EAAY,YAAe,OAGxC,IAAId,EAAW,CAACpI,EAAKG,KAAMH,EAAKI,MAAOJ,EAAKC,MAAOD,EAAKE,OAAOnL,QAAQQ,EAAE8S,SACrEI,EAAWE,OAAOrQ,EAAQ4Q,EAAY,aAEtCd,GAAY,IACG,IAAbA,EACEK,EAAW,GAAKW,GAASC,GAASZ,EAAW,IAC3B,IAAbL,EACLK,EAAWI,GAAQ,GAAKO,GAASC,GAASZ,EAAW,KAEzDC,GAAaD,EACbK,GAAKL,EAAUlT,OApnEjB+T,GAAc,CACZ,UAujEN,WACMN,KACFO,KACAC,IAAsB,IAzjEpB,SA6jEN,WACMA,KACFC,KACAD,IAAsB,KA9jEtBE,GAAkB,CAAC,iBAwiEvB,WACMjU,EAAIkU,OACFX,KACFO,KACAK,IAA2B,GAEpBA,KACTH,KACAG,IAA2B,KA/iE3BC,GAAsB,CAAC,QAkkE3B,SAA4BtU,GAC1BA,EAAI4S,GAAS5S,GACb,IAAI6S,EAAW,CAACpI,EAAKG,KAAMH,EAAKI,OAAOrL,QAAQQ,EAAE8S,SAE7CD,GAAY,GACdF,GAAgB3S,EAAgB,IAAb6S,GAAkB,EAAI,KAtkEzC0B,GAAc,CACZ,WAAcC,GACd,UAAaC,GACb,SAAYC,GACZ,YAAeA,IACdC,GAAa,CACd,UAAaH,GACb,UAAaC,GACb,QAAWC,GACX,WAAcA,IAEhBE,GAAc5D,GAAU,YACxB6D,GAAS7D,GAAU,OACnBvI,KAAkBb,IAAmBR,EAAQqB,gBAC7CqM,GAAc9D,GAAU,YACxB+D,GAAW/D,GAAU,SACrBgE,GAAehE,GAAU,aACzBiE,GAAmB,mBACnBC,GAAmB,mBACnBC,GAAmB,eACnBC,GAAY,CACV,KA85CN,SAAsBpV,GACpBqV,GAAUpC,GAAUjT,KA95ChB,MAi6CN,SAAsBA,GASFsV,EARRrC,GAAUjT,GASpBwC,EAAS8S,EAAK,UACdC,GAAaD,GAFf,IAAoBA,IAt6ChBE,GAAiD,UAAjCpO,EAAQgD,qBAG5B,GAAIwK,GACF,IAMIa,GACAC,GAPAvN,GAAoBf,EAAQe,kBAC5BwN,GAAwBvO,EAAQe,kBAAoBf,EAAQe,kBAAkBmH,UAAY,GAC1FlH,GAAahB,EAAQgB,WACrBC,GAAajB,EAAQiB,WACrBuN,GAAiBxO,EAAQgB,WAAahB,EAAQgB,WAAWkH,UAAY,GACrEuG,GAAiBzO,EAAQiB,WAAajB,EAAQiB,WAAWiH,UAAY,GAM3E,GAAIuF,GACF,IAEIf,GAFAtL,GAAepB,EAAQoB,aACvBsN,GAAmB1O,EAAQoB,aAAepB,EAAQoB,aAAa8G,UAAY,GAE3EgE,GAAQ1L,GAAY4H,GAAauG,KACjCC,GAAc,EACd7C,IAAc,EACdK,GAAkByC,KAClBC,GAAwB1C,GACxB2C,GAAiB,iBACjBC,GAAS,iBACTC,GAAgB,mBAItB,GAAIvB,GACF,IAIIwB,GACA7C,GACAQ,GACAsC,GACAlC,GARAtL,GAAkD,YAA9B3B,EAAQ2B,kBAAkC,GAAK,EACnEG,GAAiB9B,EAAQ8B,eACzBsN,GAAqBpP,EAAQ8B,eAAiB9B,EAAQ8B,eAAeoG,UAAY,GACjFmH,GAAsB,CAAC,qCAAwC,qBAQrE,GAAI1B,IAAYC,GACd,IAEI0B,GAIAC,GANAC,GAAe,GACfC,GAAe,GAIfC,IAAW,EAEXC,GAAU9H,GACR,SAAS+H,EAAGC,GAAK,OAAOD,EAAEE,EAAID,EAAEC,GAChC,SAASF,EAAGC,GAAK,OAAOD,EAAEG,EAAIF,EAAEE,GAInCvP,IAAawP,GAAyB/E,IAAWE,IAElDjF,IACFgE,GAAgBhE,EAChBiE,GAAkB,YAEdhE,GACFgE,IAAmBtC,GAAa,MAAQ,WACxCuC,GAAmBvC,GAAa,cAAgB,WAEhDsC,IAAmBtC,GAAa,KAAO,KACvCuC,GAAmB,MAKnB5C,IAAYvH,GAAU9E,UAAY8E,GAAU9E,UAAUI,QAAQ,YAAa,KAkO/E,WAGkBqO,GAAU,UAE1B9B,GAAa3M,UAJI,YAKjB4M,GAAa5M,UAJI,YAKjB2M,GAAavQ,GAAKwT,GAAU,MAC5BhD,GAAaxQ,GAAKwT,GAAU,MAGP,KAAjB9K,GAAU1I,KAAa0I,GAAU1I,GAAKwT,IAC1CD,IAAuBlG,GAAoBpE,GAAY,gBAAkB,mBACzEsK,IAAuB1G,EAAO,YAAc,eACxC5D,KAAasK,IAAuB,kBACxCA,IAAuB,QAAU9K,EAAQG,KACzCF,GAAU9E,WAAa2P,GAGnBtD,IACFG,GAAgB7O,EAAIG,cAAc,QACpB1B,GAAKwT,GAAU,MAC7BpD,GAAcxM,UAAY,UAE1B2M,GAAapO,YAAYiO,IACzBA,GAAcjO,YAAYqO,KAE1BD,GAAapO,YAAYqO,IAG3B,GAAIxF,GAAY,EACLoF,IAAgCI,IACtC5M,WAAa,UAqBlB,GAlBA6M,GAAgBxB,aAAasB,GAAc7H,IAC3C8H,GAAarO,YAAYuG,IAIzB1F,EAAQ4N,IAAY,SAASrM,EAAM/D,GACjCqD,EAASU,EAAM,YACVA,EAAKvE,KAAMuE,EAAKvE,GAAKwT,GAAU,QAAUhT,IACzCyP,GAAYrF,IAAiB/G,EAASU,EAAMqG,IACjDpG,EAASD,EAAM,CACb,cAAe,OACf,SAAY,UAOZsN,GAAY,CAId,IAHA,IAAI6G,EAAiBnX,EAAIoX,yBACrBC,EAAgBrX,EAAIoX,yBAEfzT,EAAI2M,GAAY3M,KAAM,CAC7B,IAAI2T,EAAM3T,EAAE2L,GACRiI,EAAalI,GAAWiI,GAAKE,WAAU,GAK3C,GAJAlV,EAASiV,EAAYvC,IACrBvR,EAAY8T,EAAY,MACxBF,EAAc3J,aAAa6J,EAAYF,EAAcI,YAEjD/I,EAAU,CACZ,IAAIgJ,EAAYrI,GAAWC,GAAa,EAAIgI,GAAKE,WAAU,GAC3DlV,EAASoV,EAAW1C,IACpBvR,EAAYiU,EAAW,MACvBP,EAAevW,YAAY8W,IAI/BvQ,GAAUuG,aAAayJ,EAAgBhQ,GAAUsQ,YACjDtQ,GAAUvG,YAAYyW,GACtBhI,GAAalI,GAAUoF,UA3S3BoL,GAqYA,WAGE,IAAKjJ,EACH,IAAK,IAAIzP,EAAImC,GAAOS,EAAIT,GAAQ+K,KAAKuE,IAAIpB,GAAYhI,IAAQrI,EAAI4C,EAAG5C,IAAK,CACvE,IAAI+D,EAAOqM,GAAWpQ,GACtB+D,EAAKvC,MAAM6L,KAAqB,KAAbrN,EAAImC,IAAekG,GAAQ,IAC9ChF,EAASU,EAAMmG,IACf3G,EAAYQ,EAAMqG,IAkBlB0F,KACEjD,GAAoBpE,IACtB1G,EAAWC,GAAO,IAAMgR,GAAU,eAAgB,aAAepU,EAAIwG,iBAAiBgL,GAAW,IAAIuI,SAAW,IAAKrW,EAAkBN,KACvID,EAAWC,GAAO,IAAMgR,GAAS,eAAgB1Q,EAAkBN,MAC1DyN,GACTjN,EAAQ4N,IAAY,SAAUwI,EAAO5Y,GACnC4Y,EAAMpX,MAAMqX,WAvRpB,SAA6B7Y,GAC3B,OAAOqM,EACLA,EAAO,IAAU,IAAJrM,EAAU,OAAS8R,GAAgB,IAC5C,IAAJ9R,EAAU8R,GAAgB,IAoRGgH,CAAmB9Y,OAOlD,GAAIyN,EAAO,CAET,GAAImB,EAAoB,CACtB,IAAI3L,EAAM2M,IAAiB3H,EAAQuC,WAAauO,GAA2B9Q,EAAQuB,OAAS,GAC5FzH,EAAWC,GAAO,IAAMgR,GAAU,MAAO/P,EAAKX,EAAkBN,KAIlEiB,EAAM+V,GAAsB/Q,EAAQM,YAAaN,EAAQK,OAAQL,EAAQO,WAAYP,EAAQuB,MAAOvB,EAAQuC,YAC5GzI,EAAWC,GAAO,IAAMgR,GAAU,MAAO/P,EAAKX,EAAkBN,KAG5DyN,IACFxM,EAAM6M,KAAerH,GAAY,SAAWwQ,GAAkBhR,EAAQO,WAAYP,EAAQK,OAAQL,EAAQI,OAAS,IAAM,GACrHuG,IAAsB3L,GAAO8V,GAA2BvP,KAC5DzH,EAAWC,GAAO,IAAMgR,GAAS/P,EAAKX,EAAkBN,MAI1DiB,EAAM6M,KAAerH,GAAYyQ,GAAmBjR,EAAQO,WAAYP,EAAQK,OAAQL,EAAQI,OAAS,GACrGJ,EAAQK,SAAUrF,GAAOkW,GAAoBlR,EAAQK,SAEpDmH,IACCb,IAAsB3L,GAAO8V,GAA2BvP,KACxDsF,IAAqB7L,GAAOmW,GAA0B5P,MAExDvG,GAAOlB,EAAWC,GAAO,IAAMgR,GAAU,eAAgB/P,EAAKX,EAAkBN,SAM/E,CA08BHyN,GAAYjF,KACdoF,GAAcpO,MAAMoN,GAAsBpF,GAAQ,IAAO,KAt8BzDwG,GAAaxO,MAAMuM,QAAUiL,GAAsBzQ,GAAaD,GAAQE,GAAYgC,IAGhFiF,GAAYK,KAAerH,KAC7BP,GAAU1G,MAAMkL,MAAQuM,GAAkBzQ,GAAYF,GAAQD,KAI5DpF,EAAM6M,KAAerH,GAAYyQ,GAAmB1Q,GAAYF,GAAQD,IAAS,GACjFC,KAAUrF,GAAOkW,GAAoB7Q,KAGrCrF,GAAOlB,EAAWC,GAAO,IAAMgR,GAAU,eAAgB/P,EAAKX,EAAkBN,KAItF,GAAIyI,GAAcgD,EAChB,IAAK,IAAI6D,KAAM7G,EAAY,CAEzB6G,EAAK+H,SAAS/H,GAEd,IAAIlL,EAAOqE,EAAW6G,GAElBgI,GADArW,EAAM,GACa,IACnBsW,EAAkB,GAClBC,EAAe,GACfC,EAAW,GACXC,EAAWjR,GAAqC,KAAzBsI,GAAU,QAASO,GAC1CqI,EAAe5I,GAAU,aAAcO,GACvCsI,EAAU7I,GAAU,QAASO,GAC7BuI,EAAgB9I,GAAU,cAAeO,GACzCwI,EAAe/I,GAAU,aAAcO,GACvCyI,EAAWhJ,GAAU,SAAUO,GAG/B1C,GAAsBgB,IAAiBmB,GAAU,aAAcO,IAAO,UAAWlL,IACnFkT,EAAmB,IAAMtG,GAAU,OAAS+F,GAA2Ba,GAAW,MAIhF,gBAAiBxT,GAAQ,WAAYA,KACvCmT,EAAkB,IAAMvG,GAAU,OAASgG,GAAsBa,EAAeE,EAAUJ,EAAcC,EAASE,GAAgB,KAI/HrK,GAAYK,KAAerH,KAAc,eAAgBrC,GAAQ,UAAWA,GAASoC,IAAc,WAAYpC,KACjHoT,EAAe,SAAWP,GAAkBU,EAAcI,EAAUL,GAAW,KAE7E9K,GAAsB,UAAWxI,IACnCoT,GAAgBT,GAA2Ba,IAEzCJ,IACFA,EAAe,IAAMxG,GAAU,IAAMwG,EAAe,MAIlD,eAAgBpT,GAASoC,IAAc,WAAYpC,IAAUqJ,GAAY,UAAWrJ,KACtFqT,GAAYP,GAAmBS,EAAcI,EAAUL,IAErD,WAAYtT,IACdqT,GAAYN,GAAoBY,KAG7BtK,GAAY,UAAWrJ,IACtBwI,IAAsB6K,GAAYV,GAA2Ba,IAC7D9K,IAAqB2K,GAAYL,GAA0BQ,KAE7DH,IAAYA,EAAW,IAAMzG,GAAU,gBAAkByG,EAAW,MAGxExW,EAAMqW,EAAmBC,EAAkBC,EAAeC,IAGxDzX,GAAMI,WAAW,sBAAwBkP,EAAK,GAAK,QAAUrO,EAAM,IAAKjB,GAAMO,SAAStC,SAzhB/F+Z,GACAC,KAqjCA,IAAIC,GACK5P,GACLmF,EAEE,WACE,IAAI0K,EAAW1H,GACX2H,EAAYzH,GAEhBwH,GAAYxR,GACZyR,GAAazR,GAITJ,IACF4R,GAAY,EACZC,GAAa,GACJ5R,KACJwI,GAAW1I,KAASE,GAAaF,MAAW8R,GAAa,GAG5D/I,KACElP,GAAQiY,EACVjY,IAASkO,GACAlO,GAAQgY,IACjBhY,IAASkO,MAKf,WACE,GAAIlO,GAAQwQ,GACV,KAAOxQ,IAASsQ,GAAWpC,IAAclO,IAASkO,QAC7C,GAAIlO,GAAQsQ,GACjB,KAAOtQ,IAASwQ,GAAWtC,IAAclO,IAASkO,IAIxD,WACElO,GAAQ+K,KAAKyE,IAAIc,GAAUvF,KAAKuE,IAAIkB,GAAUxQ,MA4jBhDkY,GACK5K,EACL,WOlmEC,IAAqB6K,EAAS5W,EAAMiC,EAAQ4U,EAASC,EAAIC,EAAU/X,EACpEgY,EACAC,EAEAC,EACAC,EP8lEEC,GAAc5S,GAAW,IACrB0G,IAAuBpF,IAGzBuR,KAGKvR,IAAUrE,EAAU+C,KAAc2L,OO1mErByG,EP8mENpS,GO9mEexE,EP8mEJyO,GO9mEUxM,EP8mEKyM,GO9mEGmI,EP8mEclI,GO9mELmI,EP8mEuBQ,KO9mEnBP,EP8mEiDjR,GO9mEvC9G,EP8mE8CmR,GO7mElH6G,EAAOxN,KAAKuE,IAAIgJ,EAAU,IAC1BE,EAAQH,EAAGna,QAAQ,MAAQ,EAAK,IAAM,KACtCma,EAAKA,EAAGhX,QAAQmX,EAAM,IACtBC,EAAO3G,OAAOqG,EAAQ9Y,MAAMkC,GAAMF,QAAQmC,EAAQ,IAAInC,QAAQ+W,EAAS,IAAI/W,QAAQmX,EAAM,KACzFE,GAAgBL,EAAKI,GAAQH,EAAWC,EAG5Ctb,YACA,SAAS6b,IACPR,GAAYC,EACZE,GAAQC,EACRP,EAAQ9Y,MAAMkC,GAAQiC,EAASiV,EAAOD,EAAOJ,EACzCE,EAAW,EACbrb,WAAW6b,EAAaP,GAExBhY,MARoBgY,IPymEb5K,IAAcoL,MAErB,WACE9J,GAAgB,GAEhB,IAAI+J,EAAM,GACVA,EAAInM,GAAiBmM,EAAIlM,GAAgB4E,GACzChN,EAAauJ,GAAWoC,IAAc2I,GACtCzU,EAAU0J,GAAWjO,IAAQgZ,GAE7BC,GAAa5I,GAAatI,GAAWC,IAAY,GACjDiR,GAAajZ,GAAOiI,GAAeF,IAI9B8E,GAAkBC,GAAiBzF,IAAUrE,EAAU+C,KAAc2L,MA8jBhF,MAAO,CACLwH,QAAS,QACTC,QAASC,GACTzI,OAAQA,GACRsB,KAAMA,GACNoH,KAhVF,WACM/R,KAAa6K,KACfmH,KACArE,IAAqB,IA8UvBsE,MA3UF,WACMpH,KACFC,KACA6C,IAAqB,IAyUvB5G,KAAMA,GACNmL,mBAAoBC,GACpBC,QAAS5B,GACT6B,QArjDF,WAoBE,GAlBA9Z,GAAMmR,UAAW,EACbnR,GAAM+Z,WAAa/Z,GAAM+Z,UAAUla,SAGvCgF,EAAajI,EAAK,CAAC,OAAUod,KAGzBzS,IAAa1C,EAAa9F,EAAKoU,IAC/BnM,IAAqBnC,EAAamC,GAAmBuK,IACrDlK,IAAgBxC,EAAawC,GAAcuK,IAG/C/M,EAAaqB,GAAW0M,IACxB/N,EAAaqB,GAAW8M,IACpBjL,IAAkBlD,EAAakD,GAAgB,CAAC,MAASkS,KACzDxS,IAAYyS,cAAc/E,IAG1B1H,GAAYT,EAAe,CAC7B,IAAImM,EAAM,GACVA,EAAInM,GAAiB6E,GACrBhN,EAAaqB,GAAWiT,GAEtBvQ,IAAS/D,EAAaqB,GAAWkN,IACjCvK,IAAahE,EAAaqB,GAAWsN,IAGzC,IAAI2G,EAAW,CAACjM,GAAesG,GAAuBC,GAAgBC,GAAgBC,GAAkBU,IAmBxG,IAAK,IAAIQ,KAjBTxI,EAAQ7M,SAAQ,SAASuB,EAAM/D,GAC7B,IAAIgD,EAAc,cAATe,EAAuBgM,GAAe9H,EAAQlE,GAEvD,GAAkB,iBAAPf,GAAmBA,EAAI,CAChC,IAAIoZ,IAASpZ,EAAGqZ,wBAAyBrZ,EAAGqZ,uBACxCC,EAAWtZ,EAAG8E,WAClB9E,EAAGmN,UAAYgM,EAASnc,GACxBiI,EAAQlE,GAAQqY,EAASA,EAAOG,mBAAqBD,EAASE,sBAMlEnN,EAAUnF,GAAYC,GAAaE,GAAeD,GAAgB0F,GAAaC,GAAeC,GAAe9H,GAAY+H,GAAkBC,GAAgBE,GAAaC,GAAaR,GAAiBS,GAAc7H,GAAYD,GAAaD,GAAcD,GAAS0I,GAAW3I,GAAQM,GAAUD,GAAca,GAAYC,GAAQe,GAASD,GAAOE,GAAaxI,GAAQ0I,GAAWgG,GAAiBU,GAAgBC,GAAaS,GAAgBC,GAAmBC,GAAgBE,GAA6BC,GAAgBC,GAAkBC,GAAmBC,GAAcnQ,GAAQqQ,GAAcC,GAAWE,GAAyB7H,GAAa8H,GAAwBC,GAAU1H,GAAS2H,GAASC,GAAsBC,GAAUE,GAAUC,GAAWjI,GAAYkI,GAASE,GAASC,GAAiBK,GAAYgB,GAAcI,GAAkBG,GAAsBC,GAAcI,GAAaC,GAAcC,GAASpM,GAAkBqM,GAAcC,GAAWC,GAAeC,GAAmBE,GAAmBC,GAAYtF,GAAe9H,GAAWE,GAAeC,GAAoBwN,GAAwBvN,GAAaC,GAAaoN,GAAeC,GAAepN,GAAME,GAAesN,GAAmBhC,GAAWR,GAAQ0C,GAAc7C,GAAaK,GAAkB0C,GAAwBC,GAAiBC,GAASC,GAAgBzN,GAAWE,GAAkBC,GAAoBC,GAAeC,GAAqBC,GAAiBsN,GAAqBpN,GAA4BqN,GAAsBH,GAAgB7C,GAAYQ,GAAsBsC,GAAqBlC,GAA2BuC,GAAeC,GAAeH,GAA8BI,GAAWH,GAAWI,GAAUhN,GAAQC,GAAY,KAI3pDzD,KACF,YAANyQ,IAAmBzQ,KAAKyQ,GAAK,MAEnCrH,IAAO,GAmgDPiM,QAAS,WACP,OAAOzU,EAAItI,EAAOuI,EAASqH,MA9vE/B,SAAS2I,GAA0ByE,GAC7BA,IACF7T,GAAWM,GAAMyB,GAAQC,GAAYtB,GAAYE,GAAWK,GAAqBG,IAA4B,GAIjH,SAASyI,KAEP,IADA,IAAInB,EAAM9B,EAAWtN,GAAQkP,GAAalP,GACnCoP,EAAM,GAAKA,GAAOlB,GACzB,OAAOkB,EAAIlB,GAAa,EAG1B,SAASkC,GAAeoK,GAEtB,OADAA,EAAMA,EAAMzP,KAAKyE,IAAI,EAAGzE,KAAKuE,IAAInH,GAAO+F,GAAa,EAAIA,GAAahI,GAAOsU,IAAQ,EAC9ElN,EAAWkN,EAAMtL,GAAasL,EAGvC,SAASC,GAAa5c,GAIpB,IAHS,MAALA,IAAaA,EAAImC,IAEjBsN,IAAYzP,GAAKqR,IACdrR,EAAI,GAAKA,GAAKqQ,GAErB,OAAOnD,KAAKgE,MAAMlR,EAAEqQ,IAGtB,SAASyG,KACP,IACIvK,EADAsQ,EAAWD,KAUf,OAPArQ,EAASjD,GAAkBuT,EACzBrU,IAAcC,GAAYyE,KAAKsE,MAAMqL,EAAW,GAAK1I,GAAQ9D,GAAa,GACtEnD,KAAKgE,MAAM2L,EAAWxU,KAGvBiC,IAAQmF,GAAYtN,KAAUwQ,KAAYpG,EAAS4H,GAAQ,GAEzD5H,EAmCT,SAASgE,KACP,OAAO3R,EAAIke,YAAc/b,EAAIM,gBAAgB0b,aAAehc,EAAIE,KAAK8b,YAGvE,SAASC,GAAmBC,GAC1B,MAAe,QAARA,EAAgB,aAAe,YAGxC,SAASC,GAAgBla,GACvB,GAAU,MAANA,EAAJ,CACA,IAAoCma,EAAMzQ,EAAtCJ,EAAMvL,EAAIG,cAAc,OAK5B,OAJA8B,EAAGrB,YAAY2K,GAEfI,GADAyQ,EAAO7Q,EAAIc,yBACEgQ,MAAQD,EAAK9P,KAC1Bf,EAAIzK,SACG6K,GAASwQ,GAAela,EAAG8E,aAGpC,SAASmJ,KACP,IAAIoM,EAAM9U,GAA4B,EAAdA,GAAkBD,GAAS,EACnD,OAAO4U,GAAejN,IAAmBoN,EAG3C,SAASxL,GAAW9N,GAClB,GAAIkE,EAAQlE,GACV,OAAO,EAEP,GAAI0G,EACF,IAAK,IAAI6G,KAAM7G,EACb,GAAIA,EAAW6G,GAAIvN,GAAS,OAAO,EAGvC,OAAO,EAQX,SAASgN,GAAWhN,EAAMuZ,GAGxB,GAFU,MAANA,IAAcA,EAAKhN,IAEV,UAATvM,GAAoByE,GACtB,OAAO0E,KAAKgE,OAAOF,GAAW1I,KAAWE,GAAaF,MAAY,EAGlE,IAAIiE,EAAStE,EAAQlE,GAErB,GAAI0G,EACF,IAAK,IAAI6G,KAAM7G,EAET6S,GAAMjE,SAAS/H,IACbvN,KAAQ0G,EAAW6G,KAAO/E,EAAS9B,EAAW6G,GAAIvN,IAQ5D,MAHa,YAATA,GAAiC,SAAXwI,IAAqBA,EAASwE,GAAU,UAC7DtB,GAAsB,YAAT1L,GAA+B,UAATA,IAAqBwI,EAASW,KAAKgE,MAAM3E,IAE1EA,EAUX,SAASyM,GAAuBuE,EAAgBC,EAAWC,EAAeC,EAAU5D,GAClF,IAAI7W,EAAM,GAEV,QAAuB/C,IAAnBqd,EAA8B,CAChC,IAAIF,EAAME,EACNC,IAAaH,GAAOG,GACxBva,EAAM6M,GACJ,aAAeuN,EAAM,QAAUE,EAAiB,MAChD,WAAaA,EAAiB,QAAUF,EAAM,aAC3C,GAAIG,IAAcC,EAAe,CACtC,IAAIE,EAAgB,IAAMH,EAAY,KAEtCva,EAAM,cADI6M,GAAa6N,EAAgB,OAAS,KAAOA,EAAgB,MAC5C,IAI7B,OADKlO,GAAYqK,GAAgBlL,GAAsB8O,IAAYza,GAAO8V,GAA2B2E,IAC9Fza,EAGT,SAASgW,GAAmBwE,EAAeD,EAAWI,GACpD,OAAIH,GACMA,EAAgBD,GAAa1L,GAAgB,KAE9CzF,EACLA,EAAO,IAAsB,IAAhByF,GAAsB,OAAS8L,EAAW,IACvC,IAAhB9L,GAAsB8L,EAAW,IAIvC,SAAS1E,GAAoBuE,EAAeD,EAAWI,GACrD,IAAIlR,EAEJ,GAAI+Q,EACF/Q,EAAS+Q,EAAgBD,EAAa,SACjC,CACA/N,IAAYmO,EAAW1Q,KAAKgE,MAAM0M,IACvC,IAAIC,EAAWpO,EAAWqC,GAAgB8L,EAC1ClR,EAAQL,EACNA,EAAO,WAAawR,EAAW,IAC/B,IAAMA,EAAW,IAMrB,OAHAnR,EAAQ,SAAWA,EAGD,UAAX3B,EAAqB2B,EAAQ,IAAMA,EAAQ,eAGpD,SAASyM,GAAqBqE,GAC5B,IAAIva,EAAM,IAIQ,IAAdua,IAGFva,GAFW6M,GAAa,WAAa,YAC3BA,GAAa,QAAU,UACb,KAAO0N,EAAY,OAGzC,OAAOva,EAGT,SAAS6a,GAAcle,EAAMyY,GAC3B,IAAI1S,EAAS/F,EAAKme,UAAU,EAAGne,EAAKK,OAASoY,GAAKnS,cAGlD,OAFIP,IAAUA,EAAS,IAAMA,EAAS,KAE/BA,EAGT,SAASoT,GAA4BvP,GACnC,OAAOsU,GAAalP,EAAoB,IAAM,uBAAyBpF,EAAQ,IAAO,KAGxF,SAAS4P,GAA2B5P,GAClC,OAAOsU,GAAahP,EAAmB,IAAM,sBAAwBtF,EAAQ,IAAO,KAkFtF,SAASyQ,KAEP,GAAIpI,GAAU,eAAiBpJ,KAAcqH,GAAY,CACvD,IAAIkO,EAAO9V,GAAU+V,iBAAiB,OAGtCzb,EAAQwb,GAAM,SAAS7H,GACrB,IAAI+H,EAAM/H,EAAI+H,IAETxT,KAECwT,GAAOA,EAAI7d,QAAQ,cAAgB,GACrC8V,EAAI+H,IAAM,GACVxX,EAAUyP,EAAKF,IACf5S,EAAS8S,EAAK,WAEdA,EAAI+H,IAAMA,GAGVhI,GAAUC,OAMhBrX,GAAI,WAAYqf,GAAgBvZ,EAAkBoZ,IAAO,WAAarN,IAAe,QAGjFkB,GAAU,gBAAiBmM,EAAOI,GAAcjc,GAAO+K,KAAKuE,IAAItP,GAAQkG,GAAQ,EAAGyJ,GAAgB,KAEvGpH,GAAW2T,KAAkCvf,GAAI,WAAYqf,GAAgBvZ,EAAkBoZ,GAAOK,YAIlG5O,GAAY6O,KAGhBC,KACAC,KAIJ,SAASH,KACP,GAAI5V,IAAa4H,GAAa,EAAG,CAE/B,IAAIgI,EAAM/N,GAAOnI,GAAQkO,GAAa,GAEtC,SAAUoO,IACR,IAAIpR,EAAO+C,GAAWiI,GAAKjL,wBAAwBC,KAC/C+P,EAAQhN,GAAWiI,EAAM,GAAGjL,wBAAwBgQ,MAEvDlQ,KAAKC,IAAIE,EAAO+P,IAAU,EACzBsB,KACAtf,YAAW,WAAYqf,MAA4B,IANvD,QAUAC,KAKJ,SAASA,KAEF5O,KAAcrH,KACjBkW,KAEIlW,IACFuJ,GAAgBC,KACZ/G,KAAakI,GAASC,MAC1BV,GAAWL,KACX2F,GAAyB/E,IAAWE,KAEpC8H,MAKAzL,GAAY6O,KAGhBC,KACAC,KA8JF,SAASD,KASP,GAPAK,KAGA7O,GAAa8O,mBAAmB,aAAc,qHAAuHC,KAAqB,eAAiBzO,GAAa,UACxNO,GAAoBb,GAAaR,cAAc,4BAG3CoG,GAAa,CACf,IAAIoJ,EAAMtV,GAAW,OAAS,QAC1BM,GACF/F,EAAS+F,GAAgB,CAAC,cAAegV,IAChC9W,EAAQ+B,uBACjB+F,GAAa8O,mBAAmB7B,GAAkB/U,EAAQyB,kBAAmB,sCAAwCqV,EAAM,KAAOzH,GAAoB,GAAKyH,EAAMzH,GAAoB,GAAKzN,GAAa,GAAK,aAC5ME,GAAiBgG,GAAaR,cAAc,kBAI1CxF,IACFrD,EAAUqD,GAAgB,CAAC,MAASkS,KAGlCxS,KACFgS,KACI3R,IAAsBpD,EAAUwB,GAAW0M,IAC3C3K,IAA6BvD,EAAUwB,GAAW8M,KAK1D,GAAIU,GAAQ,CAIV,GAAIrM,GACFrF,EAASqF,GAAc,CAAC,aAAc,wBAEtC7G,EADAmS,GAAWtL,GAAaiE,UACN,SAASvJ,EAAM/D,GAC/BgE,EAASD,EAAM,CACb,WAAY/D,EACZ,SAAY,KACZ,aAAciX,IAAUjX,EAAI,GAC5B,gBAAiBgT,YAKhB,CAGL,IAFA,IAAIgM,EAAU,GACVC,EAAY3V,GAAkB,GAAK,uBAC9BtJ,EAAI,EAAGA,EAAIqQ,GAAYrQ,IAE9Bgf,GAAW,mCAAqChf,EAAG,kCAAoCgT,GAAU,KAAOiM,EAAY,gBAAkBhI,IAAUjX,EAAI,GAAI,cAE1Jgf,EAAU,yDAA2DA,EAAU,SAC/EjP,GAAa8O,mBAAmB7B,GAAkB/U,EAAQmB,aAAc4V,GAExE3V,GAAe0G,GAAaR,cAAc,YAC1CoF,GAAWtL,GAAaiE,SAM1B,GAHA4R,KAGItQ,EAAoB,CACtB,IAAIjJ,EAASiJ,EAAmBmP,UAAU,EAAGnP,EAAmB3O,OAAS,IAAIiG,cACzEjD,EAAM,mBAAqBuG,GAAQ,IAAO,IAE1C7D,IACF1C,EAAM,IAAM0C,EAAS,IAAM1C,GAG7BlB,EAAWC,GAAO,mBAAqBgR,GAAU,SAAU/P,EAAKX,EAAkBN,KAGpFgC,EAAS2Q,GAASN,IAAkB,CAAC,aAAc4C,IAAU5C,GAAkB,GAAK6C,KACpF1S,EAAYmQ,GAASN,IAAkB,YACvChR,EAASsR,GAASN,IAAkB2C,IAGpCtQ,EAAU2C,GAAcuK,IAMtB6B,KACGzM,IAAuBC,IAAeC,KACzC6G,GAAa8O,mBAAmB7B,GAAkB/U,EAAQa,kBAAmB,mJAAqJkK,GAAS,KAAOjK,GAAa,GAAK,oFAAsFiK,GAAS,KAAOjK,GAAa,GAAK,mBAE5XC,GAAoB+G,GAAaR,cAAc,kBAG5CtG,IAAeC,KAClBD,GAAaD,GAAkBsE,SAAS,GACxCpE,GAAaF,GAAkBsE,SAAS,IAGtCrF,EAAQe,mBACVhF,EAASgF,GAAmB,CAC1B,aAAc,sBACd,SAAY,OAIZf,EAAQe,mBAAsBf,EAAQgB,YAAchB,EAAQiB,aAC9DlF,EAAS,CAACiF,GAAYC,IAAa,CACjC,gBAAiB8J,GACjB,SAAY,QAIZ/K,EAAQe,mBAAsBf,EAAQgB,YAAchB,EAAQiB,cAC9DlF,EAASiF,GAAY,CAAC,gBAAkB,SACxCjF,EAASkF,GAAY,CAAC,gBAAkB,UAG1CoN,GAAe6I,GAASlW,IACxBsN,GAAe4I,GAASjW,IAExBkW,KAGIpW,GACFtC,EAAUsC,GAAmBuK,KAE7B7M,EAAUuC,GAAYsK,IACtB7M,EAAUwC,GAAYqK,MAK1B8L,KAGF,SAASb,KAEP,GAAI/O,GAAYT,EAAe,CAC7B,IAAImM,EAAM,GACVA,EAAInM,GAAiB6E,GACrBnN,EAAUwB,GAAWiT,GAGnBvQ,IAASlE,EAAUwB,GAAWkN,GAAanN,EAAQgD,sBACnDJ,IAAanE,EAAUwB,GAAWsN,IAClCjM,IAAa7C,EAAU3F,EAAKoU,IAEjB,UAAXpK,EACF+H,GAAO7L,GAAG,gBAAgB,WACxBqY,KACAxM,GAAOvL,KAAK,cAAegU,UAEpB9Q,GAAcjC,IAAcC,IAAa+B,KAAesF,KACjEpJ,EAAU9H,EAAK,CAAC,OAAUod,KAGxBxR,KACa,UAAXO,EACF+H,GAAO7L,GAAG,cAAesY,IACfrM,IAAWqM,MAGzBC,KACItM,GAAWuM,KAA4BrM,IAAUsM,KAErD5M,GAAO7L,GAAG,eAAgB0Y,IACX,UAAX5U,GAAsB+H,GAAOvL,KAAK,cAAegU,MAC/B,mBAAXpQ,IAAyBA,GAAOoQ,MAC3C/K,IAAO,EA2DT,SAASwL,GAAUnb,GACjB/B,GAAI,WAAYwgB,GAAY7L,GAAS5S,OAGvC,SAASye,GAAaze,GACpB,GAAK2P,GAAL,CACe,UAAXzF,GAAsB+H,GAAOvL,KAAK,eAAgBgU,GAAK1a,IAC3DyP,GAAcC,KACd,IAAIqP,EACAC,EAAoBhQ,GACpBiQ,GAAyB,EAEzBrV,IACFgG,MACAmP,EAAYC,IAAsBhQ,KAEjBiD,GAAOvL,KAAK,qBAAsBgU,GAAK1a,KAG1D,IAAIkf,EACAC,EACApC,EAAWvV,GACX4X,EAAa/M,GACbgN,EAAY9M,GACZ+M,EAAe5W,GACf6W,EAAcvX,GACdwX,EAASlX,GACTmX,EAAW1V,GACX2V,EAAe1V,GACf2V,EAAc/W,GACdgX,EAAwB3W,GACxB4W,EAA+BzW,GAC/B0W,EAAWxe,GAEf,GAAIyd,EAAW,CACb,IAAInC,EAAgBjV,GAChBoY,EAAgBpW,GAChBqW,EAAkB9X,GAClB+X,EAAYlY,GACZmY,EAAkBlX,GAEtB,IAAK4D,EACH,IAAI+P,EAAYlV,GACZiV,EAAiBhV,GAwJzB,GAhJAgB,GAAYwH,GAAU,aACtBlI,GAAWkI,GAAU,YACrB5H,GAAM4H,GAAU,OAChBnG,GAAQmG,GAAU,SAClBnI,GAASmI,GAAU,UACnBlG,GAAYkG,GAAU,aACtBtH,GAAWsH,GAAU,YACrBjH,GAAqBiH,GAAU,sBAC/B9G,GAA4B8G,GAAU,6BAElC6O,IACF1M,GAAUnC,GAAU,WACpBvI,GAAauI,GAAU,cACvBvH,GAAQuH,GAAU,SAClBvG,GAAauG,GAAU,cACvBhI,GAAegI,GAAU,gBACzBlH,GAAekH,GAAU,gBACzBpH,GAAkBoH,GAAU,mBAEvBtD,IACHlF,GAAcwI,GAAU,eACxBzI,GAASyI,GAAU,YAIvBkH,GAAyB/E,IAEzBlC,GAAWC,KACLnB,KAAcrH,IAAeyK,KACjCyL,KACK7O,KACHoL,KACA4E,GAAyB,KAGzBtX,IAAcC,MAChBuJ,GAAgBC,KAEhBU,GAAWL,OAITsN,GAAapX,MACfH,GAAQ0I,GAAU,SAClBpI,GAAUoI,GAAU,YACpBiP,EAAe3X,KAAUuV,KAGlBpV,IAAeC,KAAakK,GAAWL,MAG5C4H,OAIA0F,GACE1M,KAAY+M,IACV/M,GACFuM,KAqVR,WACE,IAAKtM,GAAY,OAMjB,GAJAnR,GAAMmR,UAAW,EACjBjL,GAAU9E,WAAa2P,GACvBuL,KAEIhU,GACF,IAAK,IAAI5F,EAAI2M,GAAY3M,KACnB+K,GAAYvK,EAAYkL,GAAW1L,IACvCQ,EAAYkL,GAAW0B,GAAgBpN,EAAI,IAK/C,IAAK+K,EACH,IAAK,IAAIzP,EAAImC,GAAOS,EAAIT,GAAQkO,GAAYrQ,EAAI4C,EAAG5C,IAAK,CACtD,IAAI+D,EAAOqM,GAAWpQ,GAClBghB,EAAShhB,EAAImC,GAAQkG,GAAQ6B,GAAYE,GAC7CrG,EAAKvC,MAAM6L,KAAqB,KAAbrN,EAAImC,IAAekG,GAAQ,IAC9ChF,EAASU,EAAMid,GAKnBC,KAEA9N,IAAW,EA9WL+N,IAKFhW,KAAc0U,GAAapX,IAAcC,MAC3C2K,GAASC,QAIM6M,IACT9M,IACF2H,GAAqBC,GAA2BzI,GAAc,KAC9DmN,QAgRR,WACE,IAAKpM,GAAU,OAIX/K,IAAekF,IAASuC,GAAaxO,MAAM2f,OAAS,IAGxD,GAAI9P,GAEF,IADA,IAAIpO,EAAM,kBACDjD,EAAIqR,GAAYrR,KACnByP,GAAYlM,EAAY6M,GAAWpQ,GAAIiD,GAC3CM,EAAY6M,GAAW0B,GAAgB9R,EAAI,GAAIiD,GAKnDge,KAEA3N,IAAS,EAjSH8N,GACAtB,GAAyB,IAK/B7H,GAAyB/E,IAAWE,IAC/B3J,KAAYK,GAAqBG,IAA4B,GAE9DV,KAAc4W,IAChB5W,GACE7C,EAAU3F,EAAKoU,IACftO,EAAa9F,EAAKoU,KAElBtM,KAAauX,IACXvX,GACEG,GACF9D,EAAY8D,KAERC,IAAc/D,EAAY+D,IAC1BC,IAAchE,EAAYgE,KAG5BF,GACFjE,EAAYiE,KAERC,IAAclE,EAAYkE,IAC1BC,IAAcnE,EAAYmE,MAIhCC,KAAQkX,IACNlX,IACFjE,EAAYmE,IACZ6V,MAEAna,EAAYsE,KAGZuB,KAAU0V,IACZ1V,GACElE,EAAUwB,GAAWkN,GAAanN,EAAQgD,sBAC1CpE,EAAaqB,GAAWkN,KAExBvK,KAAc0V,IAChB1V,GACEnE,EAAUwB,GAAWsN,IACrB3O,EAAaqB,GAAWsN,KAExB/L,KAAa+W,IACX/W,IACEM,IAAkB7E,EAAY6E,IAC7BuK,IAAc8C,IAAsBqE,OAErC1R,IAAkBhF,EAAYgF,IAC9BuK,IAAaC,OAGjBzK,KAAuB2W,IACzB3W,GACEpD,EAAUwB,GAAW0M,IACrB/N,EAAaqB,GAAW0M,KAExB3K,KAA8ByW,IAChCzW,GACEvD,EAAU3F,EAAKiU,IACfnO,EAAa9F,EAAKiU,KAGlB4K,GAYF,GAXIpX,KAAeiV,GAAiB7U,KAAWkY,IAAahB,GAAyB,GAEjFtV,KAAeoW,IACZpW,KAAcwF,GAAaxO,MAAM6f,OAAS,KAG7CxY,IAAYE,KAAiB8X,IAC/B5X,GAAWgE,UAAYlE,GAAa,GACpCG,GAAW+D,UAAYlE,GAAa,IAGlCgB,IAAkBF,KAAiBkX,EAAiB,CACtD,IAAI/gB,EAAIyJ,GAAW,EAAI,EACnB6X,EAAOvX,GAAekD,UACtBsU,EAAMD,EAAKrhB,OAAS8gB,EAAgB/gB,GAAGC,OACvCqhB,EAAKvD,UAAUwD,KAASR,EAAgB/gB,KAC1C+J,GAAekD,UAAYqU,EAAKvD,UAAU,EAAGwD,GAAO1X,GAAa7J,UAIjE4I,KAAWJ,IAAcC,MAAcqX,GAAyB,GAsBtE,IAnBIE,GAAgBxX,KAAeC,MACjC0L,GAAQyC,KACRsI,OAGFa,EAAa5d,KAAUwe,IAErB7N,GAAOvL,KAAK,eAAgBgU,MAC5BuE,GAAyB,GAChBE,EACJD,GAAcJ,MACVnX,IAAcC,MACvB+W,KACAZ,KACA4C,MAGExB,IAAiBvQ,GA2evB,WAEE,IADA,IAAI7M,EAAIT,GAAQ+K,KAAKuE,IAAIpB,GAAYhI,IAC5BrI,EAAI8R,GAAe9R,KAAM,CAChC,IAAI+D,EAAOqM,GAAWpQ,GAElBA,GAAKmC,IAASnC,EAAI4C,GAEpBS,EAASU,EAAM,cAEfA,EAAKvC,MAAM6L,KAAqB,KAAbrN,EAAImC,IAAekG,GAAQ,IAC9ChF,EAASU,EAAMmG,IACf3G,EAAYQ,EAAMqG,KACTrG,EAAKvC,MAAM6L,OACpBtJ,EAAKvC,MAAM6L,KAAO,GAClBhK,EAASU,EAAMqG,IACf7G,EAAYQ,EAAMmG,KAIpB3G,EAAYQ,EAAMoG,IAIpB/K,YAAW,WACToD,EAAQ4N,IAAY,SAASpN,GAC3BO,EAAYP,EAAI,mBAEjB,KAtgB8Bye,IAE5BvO,KAAYE,GAAQ,CAEvB,GAAIwM,IAAcnS,IAIZlF,KAAgBgV,GAAkBjV,KAAWkV,IAC/CxN,GAAaxO,MAAMuM,QAAUiL,GAAsBzQ,GAAaD,GAAQE,GAAYgB,GAAOgB,KAGzFsF,IAAY,CAEVL,IACFvH,GAAU1G,MAAMkL,MAAQuM,GAAkBzQ,GAAYF,GAAQD,KAIhE,IAAIpF,EAAMiW,GAAmB1Q,GAAYF,GAAQD,IACvC8Q,GAAoB7Q,KQz8CjC,SAAuBtG,EAAOG,GAEjC,eAAgBH,EACdA,EAAM0f,WAAWvf,GACjBH,EAAM2f,WAAWxf,GRy8Cbyf,CAAc5f,GAAOM,EAAkBN,IAAS,GAChDD,EAAWC,GAAO,IAAMgR,GAAU,eAAgB/P,EAAKX,EAAkBN,KAKzEwI,IAAc+U,KAEdO,IACFxB,KACA9L,GAAcrQ,IAIdyd,GAAa9M,GAAOvL,KAAK,mBAAoBgU,GAAK1a,KAQxD,SAASwS,KACP,IAAK7K,KAAeC,GAElB,OAAQ4H,KADAzH,GAASP,IAASA,GAAQ,GAAK,EAAIA,IAI7C,IAAIqE,EAAQlE,IAAcA,GAAaF,IAAU+H,GAAaK,GAAeL,IACzEwR,EAAKtZ,GAAcyI,GAAyB,EAAdzI,GAAkByI,GAAW1I,GAM/D,OAJIM,KACFiZ,GAAMrZ,IAAcwI,GAAWxI,IAAc,GAAKwI,IAAYN,GAAevO,GAAQ,GAAKuO,GAAevO,IAASmG,KAAW,GAGxHoE,GAASmV,EAGlB,SAASpR,KAEP,IAAK,IAAIa,KADTzB,GAAiB,EACFpF,EACb6G,EAAK+H,SAAS/H,GACVhB,IAAegB,IAAMzB,GAAiByB,GA+C9C,SAAS+N,MACF5V,IAAYM,IAAkBhF,EAAYgF,KAC1CZ,IAAOE,IAAgBtE,EAAYsE,IACnCR,KACCG,GACFjE,EAAYiE,KAERC,IAAclE,EAAYkE,IAC1BC,IAAcnE,EAAYmE,MAKpC,SAAS+X,KACHxX,IAAYM,IAAkB7E,EAAY6E,IAC1CZ,IAAOE,IAAgBnE,EAAYmE,IACnCR,KACEG,GACF9D,EAAY8D,KAERC,IAAc/D,EAAY+D,IAC1BC,IAAchE,EAAYgE,MAKpC,SAASwW,KACP,IAAIpM,GAAJ,CAMA,GAHI/K,KAAeyH,GAAaxO,MAAM2f,OAAS,OAG3C9P,GAEF,IADA,IAAIpO,EAAM,kBACDjD,EAAIqR,GAAYrR,KACnByP,GAAYpM,EAAS+M,GAAWpQ,GAAIiD,GACxCI,EAAS+M,GAAW0B,GAAgB9R,EAAI,GAAIiD,GAKhDoc,KAEA/L,IAAS,GAyBX,SAASmM,KACP,IAAItM,GAAJ,CAKA,GAHAnR,GAAMmR,UAAW,EACjBjL,GAAU9E,UAAY8E,GAAU9E,UAAUI,QAAQuP,GAAoBgL,UAAU,GAAI,IACpFvZ,EAAY0D,GAAW,CAAC,UACpBoC,GACF,IAAK,IAAI5F,EAAI2M,GAAY3M,KACnB+K,GAAY1K,EAAYqL,GAAW1L,IACvCK,EAAYqL,GAAW0B,GAAgBpN,EAAI,IAQ/C,GAHKoL,IAAeL,GAAYjL,EAAYwL,GAAc,CAAC,WAGtDP,EACH,IAAK,IAAIzP,EAAImC,GAAOS,EAAIT,GAAQkO,GAAYrQ,EAAI4C,EAAG5C,IAAK,CACtD,IAAI+D,EAAOqM,GAAWpQ,GACtBwE,EAAYT,EAAM,CAAC,UACnBR,EAAYQ,EAAMmG,IAClB3G,EAAYQ,EAAMqG,IAKtBiV,KAEAlM,IAAW,GAiCb,SAASqO,KACP,IAAIve,EAAM6b,KACNlO,GAAkB3D,YAAchK,IAAO2N,GAAkB3D,UAAYhK,GAG3E,SAAS6b,KACP,IAAIrc,EAAMqf,KACNC,EAAQtf,EAAI,GAAK,EACjBuf,EAAMvf,EAAI,GAAK,EACnB,OAAOsf,IAAUC,EAAMD,EAAQ,GAAKA,EAAQ,OAASC,EAGvD,SAASF,GAAsBtV,GAClB,MAAPA,IAAeA,EAAMwO,MACzB,IAAmBgH,EAAKC,EAAYC,EAAhCH,EAAQ5f,GAiBZ,GAdIyG,IAAUL,IACRE,IAAaD,MACfyZ,IAAgBE,WAAW3V,GAAOjE,IAClC2Z,EAAWD,EAAajR,GAAyB,EAAdzI,IAGjCE,KACFwZ,EAAavR,GAAevO,IAC5B+f,EAAWD,EAAajR,IAMxBvI,GACFiI,GAAelO,SAAQ,SAAS4f,EAAOpiB,GACjCA,EAAI8R,MACDlJ,IAAUL,KAAgB6Z,GAASH,EAAa,KAAOF,EAAQ/hB,GAChEkiB,EAAWE,GAAS,KAAOJ,EAAMhiB,WAKpC,CAEL,GAAIwI,GAAY,CACd,IAAI6Z,EAAO7Z,GAAaF,GACpBM,IAAUL,IACZwZ,EAAQ7U,KAAKgE,MAAM+Q,EAAWI,GAC9BL,EAAM9U,KAAKsE,KAAK0Q,EAASG,EAAO,IAEhCL,EAAMD,EAAQ7U,KAAKsE,KAAKR,GAASqR,GAAQ,OAI3C,GAAIzZ,IAAUL,GAAa,CACzB,IAAIsP,EAAIxP,GAAQ,EAQhB,GAPIO,IACFmZ,GAASlK,EAAI,EACbmK,EAAM7f,GAAQ0V,EAAI,GAElBmK,EAAM7f,GAAQ0V,EAGZtP,GAAa,CACf,IAAIuP,EAAIvP,GAAcF,GAAQ2I,GAC9B+Q,GAASjK,EACTkK,GAAOlK,EAGTiK,EAAQ7U,KAAKgE,MAAM6Q,GACnBC,EAAM9U,KAAKsE,KAAKwQ,QAEhBA,EAAMD,EAAQ1Z,GAAQ,EAI1B0Z,EAAQ7U,KAAKyE,IAAIoQ,EAAO,GACxBC,EAAM9U,KAAKuE,IAAIuQ,EAAKlQ,GAAgB,GAGtC,MAAO,CAACiQ,EAAOC,GAGjB,SAASxC,KACP,GAAI9U,KAAawI,GAAS,CACxB,IAAIoP,EAAMR,KACVQ,EAAIxd,KAAK6F,IAETyT,GAAc1M,MAAM,KAAM4Q,GAAK9f,SAAQ,SAAU2T,GAC/C,IAAKpT,EAASoT,EAAKH,IAAmB,CAEpC,IAAImF,EAAM,GACVA,EAAInM,GAAiB,SAAUnO,GAAKA,EAAE0hB,mBACtC7b,EAAUyP,EAAKgF,GAEfzU,EAAUyP,EAAKF,IAGfE,EAAI+H,IAAMta,EAAQuS,EAAK,YAGvB,IAAIqM,EAAS5e,EAAQuS,EAAK,eACtBqM,IAAUrM,EAAIqM,OAASA,GAE3Bnf,EAAS8S,EAAK,gBActB,SAASD,GAAWC,GAClB9S,EAAS8S,EAAK,UACdC,GAAaD,GAQf,SAASC,GAAcD,GACrB9S,EAAS8S,EAAKH,IACdzS,EAAY4S,EAAK,WACjBtP,EAAasP,EAAKF,IAGpB,SAASmI,GAAe2D,EAAOC,EAAKS,GAClC,IAAIzE,EAAO,GAGX,IAFKyE,IAAeA,EAAc,OAE3BV,GAASC,GACdxf,EAAQ4N,GAAW2R,GAAO9D,iBAAiBwE,IAAc,SAAUtM,GAAO6H,EAAKlZ,KAAKqR,MACpF4L,IAGF,OAAO/D,EAKT,SAASuB,KACP,IAAIvB,EAAOI,GAAc1M,MAAM,KAAMoQ,MACrChjB,GAAI,WAAYqf,GAAgBH,EAAMpC,OAGxC,SAASuC,GAAiBH,EAAM7e,GAE9B,OAAIwR,GAAuBxR,KAG3B6e,EAAKxb,SAAQ,SAAU2T,EAAKhU,IACrBuI,IAAYyL,EAAIuM,UAAYtM,GAAaD,GAC1CpT,EAASoT,EAAKH,KAAqBgI,EAAK1W,OAAOnF,EAAO,MAIvD6b,EAAK/d,YAGVnB,GAAI,WAAYqf,GAAgBH,EAAM7e,MAHXA,KAM7B,SAASwgB,KACPH,KACAZ,KACA4C,KACApC,KA0GF,WAEE,GAAIjW,KACFkL,GAAkBL,IAAc,EAAIA,GAAa8C,KACjD9C,IAAc,EAEVK,KAAoB0C,IAAuB,CAC7C,IAAI4L,EAAUhO,GAASoC,IACnB6L,EAAajO,GAASN,IAE1BrQ,EAAS2e,EAAS,CAChB,SAAY,KACZ,aAAc1L,IAAUF,GAAwB,KAElDxT,EAAYof,EAAS3L,IAErBhT,EAAS4e,EAAY,CAAC,aAAc3L,IAAU5C,GAAkB,GAAK6C,KACrE1S,EAAYoe,EAAY,YACxBvf,EAASuf,EAAY5L,IAErBD,GAAwB1C,IA7H5BwO,GAUF,SAASC,GAAmBC,EAAYC,GAEtC,IADA,IAAIC,EAAU,GACLjjB,EAAI+iB,EAAYngB,EAAIsK,KAAKuE,IAAIsR,EAAaC,EAAYlR,IAAgB9R,EAAI4C,EAAG5C,IACpFijB,EAAQne,KAAKsL,GAAWpQ,GAAG8B,cAG7B,OAAOoL,KAAKyE,IAAID,MAAM,KAAMuR,GAQ9B,SAASrH,KACP,IAAIsH,EAAY1Y,GAAasY,GAAkB3gB,GAAOkG,IAASya,GAAkBzR,GAAYhB,IACzF8S,EAAKvT,IAAgCI,GAErCmT,EAAG3hB,MAAM6f,SAAW6B,IAAaC,EAAG3hB,MAAM6f,OAAS6B,EAAY,MAKrE,SAASvE,KACPjO,GAAiB,CAAC,GAClB,IAAIhN,EAAOoM,GAAa,OAAS,MAC7BsT,EAAQtT,GAAa,QAAU,SAC/BuT,EAAOjT,GAAW,GAAGhD,wBAAwB1J,GAEjDlB,EAAQ4N,IAAY,SAASrM,EAAM/D,GAE7BA,GAAK0Q,GAAe5L,KAAKf,EAAKqJ,wBAAwB1J,GAAQ2f,GAE9DrjB,IAAM8R,GAAgB,GAAKpB,GAAe5L,KAAKf,EAAKqJ,wBAAwBgW,GAASC,MAK7F,SAASzE,KACP,IAAI0E,EAAQxB,KACRC,EAAQuB,EAAM,GACdtB,EAAMsB,EAAM,GAEhB9gB,EAAQ4N,IAAY,SAASrM,EAAM/D,GAE7BA,GAAK+hB,GAAS/hB,GAAKgiB,EACjBve,EAAQM,EAAM,iBAChBS,EAAYT,EAAM,CAAC,cAAe,aAClCV,EAASU,EAAM+R,KAIZrS,EAAQM,EAAM,iBACjBC,EAASD,EAAM,CACb,cAAe,OACf,SAAY,OAEdR,EAAYQ,EAAM+R,QA+D1B,SAASyN,GAAsBvgB,GAC7B,OAAOA,EAAGwM,SAAStJ,cAGrB,SAASiZ,GAAUnc,GACjB,MAAoC,WAA7BugB,GAAqBvgB,GAG9B,SAASwgB,GAAgBxgB,GACvB,MAA4C,SAArCA,EAAGa,aAAa,iBAGzB,SAAS4f,GAAkBtE,EAAUnc,EAAIwJ,GACnC2S,EACFnc,EAAGmQ,SAAW3G,EAEdxJ,EAAGuB,aAAa,gBAAiBiI,EAAIlI,YAKzC,SAAS8a,KACP,GAAKvW,KAAY0B,KAAUD,GAA3B,CAEA,IAAIoZ,EAAe,GAAiBza,GAAWkK,SAAWqQ,GAAeva,IACrE0a,EAAe,GAAiBza,GAAWiK,SAAWqQ,GAAeta,IACrE0a,EAAezhB,IAASsQ,GACxBoR,GAAgBtZ,IAAUpI,IAASwQ,GAEnCiR,IAAgBF,GAClBD,GAAiBnN,GAAcrN,IAAY,IAExC2a,GAAeF,GAClBD,GAAiBnN,GAAcrN,IAAY,GAEzC4a,IAAgBF,GAClBF,GAAiBlN,GAAcrN,IAAY,IAExC2a,GAAeF,GAClBF,GAAiBlN,GAAcrN,IAAY,IAK/C,SAAS4R,GAAe9X,EAAIC,GACtB2L,IAAsB5L,EAAGxB,MAAMoN,GAAsB3L,GAO3D,SAAS6gB,GAAczL,GAIrB,OAHW,MAAPA,IAAeA,EAAMlW,IAGlBsG,IAAcuI,IADXzI,GAAcD,GAAS,IACOoI,GAAe2H,EAAM,GAAK3H,GAAe2H,GAAO/P,KAAS,EAC/FE,IAAcwI,GAAWxI,IAAc,GACpCH,GAAQ,GAAK,EAGpB,SAAS4J,KACP,IACI1F,EAAUyE,IADJzI,GAAcD,GAAS,IAb1BE,IAAcA,GAAaF,IAAUwJ,GAAgBpB,GAAeoB,KAsB3E,OANIlJ,KAAW0B,KACbiC,EAAS/D,KAAgBA,GAAaF,KAAWwJ,GAAgB,GAAKgS,KACpEA,GAAahS,GAAgB,GAAKpB,GAAeoB,GAAgB,IAEjEvF,EAAS,IAAKA,EAAS,GAEpBA,EAGT,SAASyO,GAA4B3C,GAGnC,IAAI7L,EACJ,GAHW,MAAP6L,IAAeA,EAAMlW,IAGrB2N,KAAerH,GACjB,GAAID,GACFgE,IAAShE,GAAaF,IAAU+P,EAC5BzP,KAAU4D,GAAOsX,UAChB,CACL,IAAIC,EAAc5V,EAAY2D,GAAgBzJ,GAC1CO,KAAUyP,GAAOyL,MACrBtX,EAAc,KAAN6L,EAAY0L,OAGtBvX,GAAQkE,GAAe2H,GACnBzP,IAAUH,KACZ+D,GAAOsX,MAQX,OAJI/R,KAAoBvF,EAAMU,KAAKyE,IAAInF,EAAKwF,KAE5CxF,IAAQsD,IAAerH,IAAcD,GAAoB,KAAN,IAKrD,SAAS8V,GAA4B9R,GACnCsO,GAAc5S,GAAW,MACzB6S,GAAqBvO,GAGvB,SAASuO,GAAsBvO,GAClB,MAAPA,IAAeA,EAAMwO,MACzB9S,GAAU1G,MAAM2Q,IAAiBC,GAAkB5F,EAAM6F,GAG3D,SAAS+I,GAAc4I,EAAQC,EAAUC,EAASC,GAChD,IAAIvhB,EAAIohB,EAAS3b,GACZiC,KAAQ1H,EAAIsK,KAAKuE,IAAI7O,EAAGkP,KAE7B,IAAK,IAAI9R,EAAIgkB,EAAQhkB,EAAI4C,EAAG5C,IAAK,CAC7B,IAAI+D,EAAOqM,GAAWpQ,GAGnBmkB,IAASpgB,EAAKvC,MAAM6L,KAAqB,KAAbrN,EAAImC,IAAekG,GAAQ,KAExDgC,IAAgBwE,IAClB9K,EAAKvC,MAAMqN,GAAmB9K,EAAKvC,MAAMuN,GAAkB1E,IAAgBrK,EAAIgkB,GAAU,IAAO,KAElGzgB,EAAYQ,EAAMkgB,GAClB5gB,EAASU,EAAMmgB,GAEXC,GAAS/S,GAActM,KAAKf,IA2CpC,SAASqgB,GAAQvjB,EAAGwjB,GACdnS,IAA8BgI,MAG9B/X,KAAUqQ,IAAe6R,KAE3BvR,GAAOvL,KAAK,eAAgBgU,MAC5BzI,GAAOvL,KAAK,kBAAmBgU,MAC3B/Q,IAAc+U,KAGdjL,IAAazT,GAAK,CAAC,QAAS,WAAWR,QAAQQ,EAAE4G,OAAS,GAAK8M,KAEnE1B,IAAU,EACVwH,MAWJ,SAASiK,GAAUrhB,GACjB,OAAOA,EAAIiD,cAAc1C,QAAQ,KAAM,IAWzC,SAASqQ,GAAiB0Q,GAGxB,GAAI9U,GAAYoD,GAAS,CAGvB,GAFAC,GAAOvL,KAAK,gBAAiBgU,GAAKgJ,KAE7B9U,GAAY2B,GAAcnR,OAAS,EACtC,IAAK,IAAID,EAAI,EAAGA,EAAIoR,GAAcnR,OAAQD,IAAK,CAC7C,IAAI+D,EAAOqN,GAAcpR,GAEzB+D,EAAKvC,MAAM6L,KAAO,GAEd0B,GAAkBF,IACpB9K,EAAKvC,MAAMuN,GAAkB,GAC7BhL,EAAKvC,MAAMqN,GAAmB,IAEhCtL,EAAYQ,EAAMoG,IAClB9G,EAASU,EAAMqG,IAanB,IAAKma,IACA9U,GAAY8U,EAAMzkB,OAAOgI,aAAeI,IACzCqc,EAAMzkB,SAAWoI,IAAaoc,GAASC,EAAMC,gBAAkBF,GAASnS,IAAgB,CAE1F,IAAKD,GAA4B,CAC/B,IAAIyO,EAAWxe,GACf+X,KACI/X,KAAUwe,IACZ7N,GAAOvL,KAAK,eAAgBgU,MAE5B+C,MAIW,UAAXvT,GAAsB+H,GAAOvL,KAAK,cAAegU,MACrD1I,IAAU,EACVL,GAAcrQ,KAOpB,SAASiS,GAAMqQ,EAAa5jB,GAC1B,IAAIuS,GAGJ,GAAoB,SAAhBqR,EACFjR,GAAgB3S,GAAI,QAGf,GAAoB,SAAhB4jB,EACTjR,GAAgB3S,EAAG,OAGd,CACL,GAAIgS,GAAS,CACX,GAAI7H,GAA4B,OAAiB6I,KAGnD,IAAIgJ,EAAWD,KACX8H,EAAW,EAkBf,GAhBoB,UAAhBD,EACFC,GAAa7H,EACY,SAAhB4H,EACTC,EAAWjV,EAAWY,GAAahI,GAAQwU,EAAWxM,GAAa,EAAIwM,GAE5C,iBAAhB4H,IAA4BA,EAAcpL,SAASoL,IAEzDE,MAAMF,KAEJ5jB,IAAK4jB,EAAcvX,KAAKyE,IAAI,EAAGzE,KAAKuE,IAAIpB,GAAa,EAAGoU,KAE7DC,EAAWD,EAAc5H,KAKxBpN,GAAYiV,GAAYxX,KAAKC,IAAIuX,GAAYrc,GAAO,CACvD,IAAIuc,EAASF,EAAW,EAAI,GAAK,EACjCA,GAAaviB,GAAQuiB,EAAWrU,IAAeoC,GAAWpC,GAAauU,EAAsB,EAAbvU,GAAiBuU,GAAU,EAG7GziB,IAASuiB,EAGLjV,GAAYnF,KACVnI,GAAQsQ,KAAYtQ,IAASkO,IAC7BlO,GAAQwQ,KAAYxQ,IAASkO,KAI/BuM,GAAYza,MAAWya,GAAYpK,KACrC4R,GAAOvjB,IAOb,SAAS2S,GAAiB3S,EAAGgkB,GAC3B,GAAIhS,GAAS,CACX,GAAI7H,GAA4B,OAAiB6I,KAEnD,IAAIiR,EAEJ,IAAKD,EAAK,CAIR,IAFA,IAAI/kB,EAASgU,GADbjT,EAAI4S,GAAS5S,IAGNf,IAAWkJ,IAAqB,CAACC,GAAYC,IAAY7I,QAAQP,GAAU,GAAKA,EAASA,EAAOgI,WAEvG,IAAIid,EAAW,CAAC9b,GAAYC,IAAY7I,QAAQP,GAC5CilB,GAAY,IACdD,GAAkB,EAClBD,EAAmB,IAAbE,GAAkB,EAAI,GAIhC,GAAIxa,GAAQ,CACV,GAAIpI,KAAUsQ,KAAqB,IAAToS,EAExB,YADAzQ,GAAK,OAAQvT,GAER,GAAIsB,KAAUwQ,IAAoB,IAARkS,EAE/B,YADAzQ,GAAK,QAASvT,GAKdgkB,IACF1iB,IAASwG,GAAUkc,EACfpc,KAAatG,GAAQ+K,KAAKgE,MAAM/O,KAEpCiiB,GAAQU,GAAoBjkB,GAAgB,YAAXA,EAAE4G,KAAuB5G,EAAI,OA6BlE,SAASkU,KACPoC,GAAgB6N,aAAY,WAC1BxR,GAAgB,KAAM5J,MACrBD,IAEH2K,IAAY,EAGd,SAASO,KACPqH,cAAc/E,IACd7C,IAAY,EAGd,SAAS2Q,GAAsBC,EAAQnG,GACrC/a,EAAS+F,GAAgB,CAAC,cAAemb,IACzCnb,GAAekD,UAAYqK,GAAoB,GAAK4N,EAAS5N,GAAoB,GAAKyH,EAGxF,SAAStD,KACP1G,KACIhL,IAAkBkb,GAAqB,OAAQpb,GAAa,IAGlE,SAAS0K,KACPM,KACI9K,IAAkBkb,GAAqB,QAASpb,GAAa,IAiBnE,SAASoS,KACH3H,IACFC,KACA6C,IAAqB,IAErBqE,KACArE,IAAqB,GAuDzB,SAAS1C,GAAU1R,GACjBA,EAAGmiB,QAyBL,SAAS1R,GAAU5S,GAEjB,OAAOukB,GADPvkB,EAAIA,GAAKjC,EAAI2lB,OACY1jB,EAAEwkB,eAAe,GAAKxkB,EAEjD,SAASiT,GAAWjT,GAClB,OAAOA,EAAEf,QAAUlB,EAAI2lB,MAAMe,WAG/B,SAASF,GAAcvkB,GACrB,OAAOA,EAAE4G,KAAKpH,QAAQ,UAAY,EAGpC,SAASklB,GAAwB1kB,GAC/BA,EAAE2kB,eAAiB3kB,EAAE2kB,iBAAmB3kB,EAAE4kB,aAAc,EAG1D,SAASC,KACP,OSx+EsB1N,ETw+EYN,GAAaM,EAAIP,GAAaO,ESx+EvCD,ETw+E0CL,GAAaK,EAAIN,GAAaM,EUx+EnE4N,EDCzBzY,KAAK0Y,MAAM5N,EAAGD,IAAM,IAAM7K,KAAK2Y,ICDCvC,EVw+EgExY,GUv+EnGgb,GAAY,GACZzI,EAAMnQ,KAAKC,IAAI,GAAKD,KAAKC,IAAIwY,MAEtB,GAAKrC,EACdwC,EAAY,aACHzI,GAAOiG,IAChBwC,EAAY,YAGPA,IV89EgH7d,EAAQG,KUx+E1H,IAA2Bud,EAAOrC,EACnCwC,EACAzI,EDFoBrF,EAAGD,ET2+E3B,SAAS1C,GAAYxU,GACnB,GAAIgS,GAAS,CACX,GAAI7H,GAA4B,OAAiB6I,KAG/CpK,IAAY6K,IAAaO,KAE7B8C,IAAW,EACPH,KACFnY,EAAImY,IACJA,GAAW,MAGb,IAAIuO,EAAItS,GAAS5S,GACjBiS,GAAOvL,KAAK6d,GAAavkB,GAAK,aAAe,YAAa0a,GAAK1a,KAE1DukB,GAAavkB,IAAM,CAAC,MAAO,KAAKR,QAAQkjB,GAAqBzP,GAAUjT,MAAQ,GAClF0kB,GAAuB1kB,GAGzB6W,GAAaK,EAAIN,GAAaM,EAAIgO,EAAEC,QACpCtO,GAAaM,EAAIP,GAAaO,EAAI+N,EAAEE,QAChCxW,IACF8H,GAAgB4K,WAAWja,GAAU1G,MAAM2Q,IAAe3O,QAAQ4O,GAAiB,KACnF0I,GAAc5S,GAAW,OAI7B,SAASoN,GAAWzU,GAClB,GAAI8W,GAAU,CACZ,IAAIoO,EAAItS,GAAS5S,GACjB6W,GAAaK,EAAIgO,EAAEC,QACnBtO,GAAaM,EAAI+N,EAAEE,QAEfxW,EACG+H,KAAYA,GAAW1Y,GAAI,WAAYonB,GAAUrlB,QAExB,MAA1B+R,KAAiCA,GAAwB8S,MACzD9S,KAAyByD,IAAgB,KAGlB,kBAAjBxV,EAAEslB,YAA4BtlB,EAAEslB,aAAe9P,IACzDxV,EAAE2kB,kBAKR,SAASU,GAAWrlB,GAClB,GAAK+R,IAQL,GAJAvT,EAAImY,IACAG,KAAYH,GAAW1Y,GAAI,WAAYonB,GAAUrlB,OAEvB,MAA1B+R,KAAiCA,GAAwB8S,MACzD9S,GAAuB,EACpByD,IAAiB+O,GAAavkB,KAAMwV,IAAgB,GAEzD,IACMxV,EAAE4G,MAAQqL,GAAOvL,KAAK6d,GAAavkB,GAAK,YAAc,WAAY0a,GAAK1a,IAC3E,MAAMulB,IAER,IAAIrO,EAAIR,GACJ8O,EAAOzO,GAAQF,GAAcD,IACjC,IAAK3H,IAActH,IAAcC,GAC/BsP,GAAKsO,EACLtO,GAAK,UAGLA,GADkB5J,EAAYkY,EAAOhe,GAAQ,MAAQ2I,GAAW1I,IAAUwJ,IAAuB,IAAPuU,GAAcrV,GAAW1I,IAEnHyP,GAAK,IAGP7P,GAAU1G,MAAM2Q,IAAiBC,GAAkB2F,EAAI1F,SAzBvDsF,IAAW,EA6Bf,SAASpC,GAAU1U,GACjB,GAAI8W,GAAU,CACRH,KACFnY,EAAImY,IACJA,GAAW,MAET/H,GAAYqL,GAAc5S,GAAW,IACzCyP,IAAW,EAEX,IAAIoO,EAAItS,GAAS5S,GACjB6W,GAAaK,EAAIgO,EAAEC,QACnBtO,GAAaM,EAAI+N,EAAEE,QACnB,IAAII,EAAOzO,GAAQF,GAAcD,IAEjC,GAAIvK,KAAKC,IAAIkZ,GAAO,CAElB,IAAKjB,GAAavkB,GAAI,CAEpB,IAAIf,EAASgU,GAAUjT,GACvB6F,EAAU5G,EAAQ,CAAC,MAAS,SAASwmB,EAAczlB,GACjD0kB,GAAuB1kB,GACvBgG,EAAa/G,EAAQ,CAAC,MAASwmB,OAI/B7W,EACF+H,GAAW1Y,GAAI,WACb,GAAIgR,KAAerH,GAAW,CAC5B,IAAI8d,GAAeF,EAAOhe,IAAS2I,GAAW1I,IAC9Cie,EAAaF,EAAO,EAAInZ,KAAKgE,MAAMqV,GAAcrZ,KAAKsE,KAAK+U,GAC3DpkB,IAASokB,MACJ,CACL,IAAIC,IAAWjP,GAAgB8O,GAC/B,GAAIG,GAAS,EACXrkB,GAAQsQ,QACH,GAAI+T,GAAS9V,GAAeoB,GAAgB,GACjD3P,GAAQwQ,QAGR,IADA,IAAI3S,EAAI,EACDA,EAAI8R,IAAiB0U,GAAS9V,GAAe1Q,IAClDmC,GAAQnC,EACJwmB,EAAQ9V,GAAe1Q,IAAMqmB,EAAO,IAAKlkB,IAAS,GACtDnC,IAKNokB,GAAOvjB,EAAGwlB,GACVvT,GAAOvL,KAAK6d,GAAavkB,GAAK,WAAa,UAAW0a,GAAK1a,OAGzD+R,IACFY,GAAgB3S,EAAGwlB,EAAO,GAAK,EAAI,IAON,SAAjCpe,EAAQgD,uBAAmCoL,IAAgB,GAC3DvL,KAAc8H,GAAwB,KACtCnJ,KAAa6K,IAAaS,KAKhC,SAASmG,MACEtL,IAAgCI,IACtCxO,MAAM6f,OAAS3Q,GAAevO,GAAQkG,IAASqI,GAAevO,IAAS,KAG5E,SAASyU,KACP,IAAI6P,EAAQje,IAAcA,GAAaF,IAAU+H,GAAaW,GAAWX,GAAahI,GACtF,OAAO6E,KAAKuE,IAAIvE,KAAKsE,KAAKiV,GAAQpW,IAQpC,SAAS6O,KACP,GAAK/V,KAAOG,IAER6K,KAAU0C,GAAa,CACzB,IAAIpF,EAAMoF,GACNlF,EAAMwC,GACNhN,EAAKjC,EAQT,IANI2R,GAAc1C,KAChB1C,EAAM0C,GACNxC,EAAMkF,GACN1P,EAAKpC,GAGA0M,EAAME,GACXxK,EAAGwN,GAASlD,IACZA,IAIFoF,GAAc1C,IAIlB,SAASoH,GAAM1a,GACb,MAAO,CACLqH,UAAWA,GACXkI,WAAYA,GACZ/G,aAAcA,GACdsL,SAAUA,GACV3L,kBAAmBA,GACnByM,YAAaA,GACbxM,WAAYA,GACZC,WAAYA,GACZb,MAAOA,GACPM,QAASA,GACT0I,WAAYA,GACZhB,WAAYA,GACZyB,cAAeA,GACf3P,MAAOA,GACPqQ,YAAaA,GACbkU,aAAchU,KACd2B,gBAAiBA,GACjB0C,sBAAuBA,GACvB5C,MAAOA,GACP0C,YAAaA,GACb7U,MAAOA,GACPwO,KAAMA,GACN+T,MAAO1jB,GAAK,IA//EVqO,GAAsBC,QAAQC,KAAK,qBAAsBnH,EAAQC,YWxLzElH,SAASid,iBAAiB,oBAAoBzb,SAAQ,SAACmkB,GACnD3e,EAAI,CACAE,UAAWye,EACXte,MAAO,EACPM,QAAS,EACTE,UAAU,EACVM,KAAK,EACLM,UAAU,EACVO,sBAAsB,EACtBR,MAAO,IACPc,MAAM,EACNG,WAAY,CACR,IAAK,CACDnC,OAAQ,EACRD,MAAO,GAEX,IAAK,CACDC,OAAQ,EACRD,MAAO,GAEX,IAAK,CACDA,MAAO,SAMvBrH,SAASid,iBAAiB,qBAAqBzb,SAAQ,SAACmkB,GACpD3e,EAAI,CACAE,UAAWye,EACXte,MAAO,EACPM,QAAS,EACTE,UAAU,EACVM,KAAK,EACLX,WAAY,IACZiB,UAAU,EACVO,sBAAsB,EACtBR,MAAO,IACPd,YAAa,IACb4B,MAAM,EACNG,WAAY,CACR,IAAK,CACDnC,OAAQ,EACRD,MAAO,GAEX,IAAK,CACDC,OAAQ,EACRD,MAAO,GAEX,IAAK,CACDC,OAAQ,GACRD,MAAO,GAEX,IAAK,CACDC,OAAQ,GACRD,MAAO,GAEX,IAAK,CACDA,MAAO,SAMvBrH,SAASid,iBAAiB,sBAAsBzb,SAAQ,SAACmkB,GACrD3e,EAAI,CACAE,UAAWye,EACXte,MAAO,EACPQ,UAAU,EACVM,KAAK,EACLV,WAAW,EACXgB,UAAU,EACVO,sBAAsB,EACtBR,MAAO,IACPc,MAAM,EACNG,WAAY,CACR,IAAK,CACDnC,OAAQ,EACRD,MAAO,GAEX,IAAK,CACDC,OAAQ,EACRD,MAAO,GAEX,IAAK,CACDC,OAAQ,EACRD,MAAO,GAEX,IAAK,CACDC,OAAQ,GACRD,MAAO,GAEX,IAAK,CACDC,OAAQ,GACRD,MAAO,U","sources":["webpack://indoconnex/./node_modules/tiny-slider/src/helpers/raf.js","webpack://indoconnex/./node_modules/tiny-slider/src/helpers/caf.js","webpack://indoconnex/./node_modules/tiny-slider/src/helpers/extend.js","webpack://indoconnex/./node_modules/tiny-slider/src/helpers/checkStorageValue.js","webpack://indoconnex/./node_modules/tiny-slider/src/helpers/setLocalStorage.js","webpack://indoconnex/./node_modules/tiny-slider/src/helpers/getBody.js","webpack://indoconnex/./node_modules/tiny-slider/src/helpers/docElement.js","webpack://indoconnex/./node_modules/tiny-slider/src/helpers/setFakeBody.js","webpack://indoconnex/./node_modules/tiny-slider/src/helpers/resetFakeBody.js","webpack://indoconnex/./node_modules/tiny-slider/src/helpers/addCSSRule.js","webpack://indoconnex/./node_modules/tiny-slider/src/helpers/getCssRulesLength.js","webpack://indoconnex/./node_modules/tiny-slider/src/helpers/forEach.js","webpack://indoconnex/./node_modules/tiny-slider/src/helpers/classListSupport.js","webpack://indoconnex/./node_modules/tiny-slider/src/helpers/hasClass.js","webpack://indoconnex/./node_modules/tiny-slider/src/helpers/addClass.js","webpack://indoconnex/./node_modules/tiny-slider/src/helpers/removeClass.js","webpack://indoconnex/./node_modules/tiny-slider/src/helpers/hasAttr.js","webpack://indoconnex/./node_modules/tiny-slider/src/helpers/getAttr.js","webpack://indoconnex/./node_modules/tiny-slider/src/helpers/isNodeList.js","webpack://indoconnex/./node_modules/tiny-slider/src/helpers/setAttrs.js","webpack://indoconnex/./node_modules/tiny-slider/src/helpers/removeAttrs.js","webpack://indoconnex/./node_modules/tiny-slider/src/helpers/arrayFromNodeList.js","webpack://indoconnex/./node_modules/tiny-slider/src/helpers/hideElement.js","webpack://indoconnex/./node_modules/tiny-slider/src/helpers/showElement.js","webpack://indoconnex/./node_modules/tiny-slider/src/helpers/isVisible.js","webpack://indoconnex/./node_modules/tiny-slider/src/helpers/whichProperty.js","webpack://indoconnex/./node_modules/tiny-slider/src/helpers/getEndProperty.js","webpack://indoconnex/./node_modules/tiny-slider/src/helpers/passiveOption.js","webpack://indoconnex/./node_modules/tiny-slider/src/helpers/addEvents.js","webpack://indoconnex/./node_modules/tiny-slider/src/helpers/removeEvents.js","webpack://indoconnex/./node_modules/tiny-slider/src/helpers/events.js","webpack://indoconnex/./node_modules/tiny-slider/src/tiny-slider.js","webpack://indoconnex/./node_modules/tiny-slider/src/helpers/calc.js","webpack://indoconnex/./node_modules/tiny-slider/src/helpers/percentageLayout.js","webpack://indoconnex/./node_modules/tiny-slider/src/helpers/mediaquerySupport.js","webpack://indoconnex/./node_modules/tiny-slider/src/helpers/has3DTransforms.js","webpack://indoconnex/./node_modules/tiny-slider/src/helpers/getSlideId.js","webpack://indoconnex/./node_modules/tiny-slider/src/helpers/createStyleSheet.js","webpack://indoconnex/./node_modules/tiny-slider/src/helpers/jsTransform.js","webpack://indoconnex/./node_modules/tiny-slider/src/helpers/removeCSSRule.js","webpack://indoconnex/./node_modules/tiny-slider/src/helpers/toDegree.js","webpack://indoconnex/./node_modules/tiny-slider/src/helpers/getTouchDirection.js","webpack://indoconnex/./resources/js/carousel.js"],"sourcesContent":["var win = window;\n\nexport var raf = win.requestAnimationFrame\n  || win.webkitRequestAnimationFrame\n  || win.mozRequestAnimationFrame\n  || win.msRequestAnimationFrame\n  || function(cb) { return setTimeout(cb, 16); };\n","var win = window;\n\nexport var caf = win.cancelAnimationFrame\n  || win.mozCancelAnimationFrame\n  || function(id){ clearTimeout(id); };\n","export function extend() {\n  var obj, name, copy,\n      target = arguments[0] || {},\n      i = 1,\n      length = arguments.length;\n\n  for (; i < length; i++) {\n    if ((obj = arguments[i]) !== null) {\n      for (name in obj) {\n        copy = obj[name];\n\n        if (target === copy) {\n          continue;\n        } else if (copy !== undefined) {\n          target[name] = copy;\n        }\n      }\n    }\n  }\n  return target;\n}","export function checkStorageValue (value) {\n  return ['true', 'false'].indexOf(value) >= 0 ? JSON.parse(value) : value;\n}","export function setLocalStorage(storage, key, value, access) {\n  if (access) {\n    try { storage.setItem(key, value); } catch (e) {}\n  }\n  return value;\n}","export function getBody () {\n  var doc = document,\n      body = doc.body;\n\n  if (!body) {\n    body = doc.createElement('body');\n    body.fake = true;\n  }\n\n  return body;\n}","export var docElement = document.documentElement;","import { docElement } from './docElement.js';\n\nexport function setFakeBody (body) {\n  var docOverflow = '';\n  if (body.fake) {\n    docOverflow = docElement.style.overflow;\n    //avoid crashing IE8, if background image is used\n    body.style.background = '';\n    //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible\n    body.style.overflow = docElement.style.overflow = 'hidden';\n    docElement.appendChild(body);\n  }\n\n  return docOverflow;\n}","import { docElement } from './docElement.js';\n\nexport function resetFakeBody (body, docOverflow) {\n  if (body.fake) {\n    body.remove();\n    docElement.style.overflow = docOverflow;\n    // Trigger layout so kinetic scrolling isn't disabled in iOS6+\n    // eslint-disable-next-line\n    docElement.offsetHeight;\n  }\n}","// cross browsers addRule method\nimport { raf } from './raf.js';\nexport function addCSSRule(sheet, selector, rules, index) {\n  // return raf(function() {\n    'insertRule' in sheet ?\n      sheet.insertRule(selector + '{' + rules + '}', index) :\n      sheet.addRule(selector, rules, index);\n  // });\n}","export function getCssRulesLength(sheet) {\n  var rule = ('insertRule' in sheet) ? sheet.cssRules : sheet.rules;\n  return rule.length;\n}","// https://toddmotto.com/ditch-the-array-foreach-call-nodelist-hack/\nexport function forEach (arr, callback, scope) {\n  for (var i = 0, l = arr.length; i < l; i++) {\n    callback.call(scope, arr[i], i);\n  }\n}","export var classListSupport = 'classList' in document.createElement('_');","import { classListSupport } from './classListSupport.js';\n\nvar hasClass = classListSupport ?\n    function (el, str) { return el.classList.contains(str); } :\n    function (el, str) { return el.className.indexOf(str) >= 0; };\n\nexport { classListSupport, hasClass };","import { classListSupport, hasClass } from './hasClass.js';\nvar addClass = classListSupport ?\n    function (el, str) {\n      if (!hasClass(el,  str)) { el.classList.add(str); }\n    } :\n    function (el, str) {\n      if (!hasClass(el,  str)) { el.className += ' ' + str; }\n    };\n\nexport { addClass };","import { classListSupport, hasClass } from './hasClass.js';\nvar removeClass = classListSupport ?\n    function (el, str) {\n      if (hasClass(el,  str)) { el.classList.remove(str); }\n    } :\n    function (el, str) {\n      if (hasClass(el, str)) { el.className = el.className.replace(str, ''); }\n    };\n\nexport { removeClass };","export function hasAttr(el, attr) {\n  return el.hasAttribute(attr);\n}","export function getAttr(el, attr) {\n  return el.getAttribute(attr);\n}","export function isNodeList(el) {\n  // Only NodeList has the \"item()\" function\n  return typeof el.item !== \"undefined\"; \n}","import { isNodeList } from \"./isNodeList.js\";\n\nexport function setAttrs(els, attrs) {\n  els = (isNodeList(els) || els instanceof Array) ? els : [els];\n  if (Object.prototype.toString.call(attrs) !== '[object Object]') { return; }\n\n  for (var i = els.length; i--;) {\n    for(var key in attrs) {\n      els[i].setAttribute(key, attrs[key]);\n    }\n  }\n}","import { isNodeList } from \"./isNodeList.js\";\n\nexport function removeAttrs(els, attrs) {\n  els = (isNodeList(els) || els instanceof Array) ? els : [els];\n  attrs = (attrs instanceof Array) ? attrs : [attrs];\n\n  var attrLength = attrs.length;\n  for (var i = els.length; i--;) {\n    for (var j = attrLength; j--;) {\n      els[i].removeAttribute(attrs[j]);\n    }\n  }\n}","export function arrayFromNodeList (nl) {\n  var arr = [];\n  for (var i = 0, l = nl.length; i < l; i++) {\n    arr.push(nl[i]);\n  }\n  return arr;\n}","export function hideElement(el, forceHide) {\n  if (el.style.display !== 'none') { el.style.display = 'none'; }\n}","export function showElement(el, forceHide) {\n  if (el.style.display === 'none') { el.style.display = ''; }\n}","export function isVisible(el) {\n  return window.getComputedStyle(el).display !== 'none';\n}","export function whichProperty(props){\n  if (typeof props === 'string') {\n    var arr = [props],\n        Props = props.charAt(0).toUpperCase() + props.substr(1),\n        prefixes = ['Webkit', 'Moz', 'ms', 'O'];\n        \n    prefixes.forEach(function(prefix) {\n      if (prefix !== 'ms' || props === 'transform') {\n        arr.push(prefix + Props);\n      }\n    });\n\n    props = arr;\n  }\n\n  var el = document.createElement('fakeelement'),\n      len = props.length;\n  for(var i = 0; i < props.length; i++){\n    var prop = props[i];\n    if( el.style[prop] !== undefined ){ return prop; }\n  }\n\n  return false; // explicit for ie9-\n}\n","// get transitionend, animationend based on transitionDuration\n// @propin: string\n// @propOut: string, first-letter uppercase\n// Usage: getEndProperty('WebkitTransitionDuration', 'Transition') => webkitTransitionEnd\nexport function getEndProperty(propIn, propOut) {\n  var endProp = false;\n  if (/^Webkit/.test(propIn)) {\n    endProp = 'webkit' + propOut + 'End';\n  } else if (/^O/.test(propIn)) {\n    endProp = 'o' + propOut + 'End';\n  } else if (propIn) {\n    endProp = propOut.toLowerCase() + 'end';\n  }\n  return endProp;\n}","// Test via a getter in the options object to see if the passive property is accessed\nvar supportsPassive = false;\ntry {\n  var opts = Object.defineProperty({}, 'passive', {\n    get: function() {\n      supportsPassive = true;\n    }\n  });\n  window.addEventListener(\"test\", null, opts);\n} catch (e) {}\nexport var passiveOption = supportsPassive ? { passive: true } : false;","import { passiveOption } from './passiveOption.js';\n\nexport function addEvents(el, obj, preventScrolling) {\n  for (var prop in obj) {\n    var option = ['touchstart', 'touchmove'].indexOf(prop) >= 0 && !preventScrolling ? passiveOption : false;\n    el.addEventListener(prop, obj[prop], option);\n  }\n}","import { passiveOption } from './passiveOption.js';\n\nexport function removeEvents(el, obj) {\n  for (var prop in obj) {\n    var option = ['touchstart', 'touchmove'].indexOf(prop) >= 0 ? passiveOption : false;\n    el.removeEventListener(prop, obj[prop], option);\n  }\n}","export function Events() {\n  return {\n    topics: {},\n    on: function (eventName, fn) {\n      this.topics[eventName] = this.topics[eventName] || [];\n      this.topics[eventName].push(fn);\n    },\n    off: function(eventName, fn) {\n      if (this.topics[eventName]) {\n        for (var i = 0; i < this.topics[eventName].length; i++) {\n          if (this.topics[eventName][i] === fn) {\n            this.topics[eventName].splice(i, 1);\n            break;\n          }\n        }\n      }\n    },\n    emit: function (eventName, data) {\n      data.type = eventName;\n      if (this.topics[eventName]) {\n        this.topics[eventName].forEach(function(fn) {\n          fn(data, eventName);\n        });\n      }\n    }\n  };\n};","// Object.keys\nif (!Object.keys) {\n  Object.keys = function(object) {\n    var keys = [];\n    for (var name in object) {\n      if (Object.prototype.hasOwnProperty.call(object, name)) {\n        keys.push(name);\n      }\n    }\n    return keys;\n  };\n}\n\n// ChildNode.remove\nif(!(\"remove\" in Element.prototype)){\n  Element.prototype.remove = function(){\n    if(this.parentNode) {\n      this.parentNode.removeChild(this);\n    }\n  };\n}\n\nimport { raf } from './helpers/raf.js';\nimport { caf } from './helpers/caf.js';\nimport { extend } from './helpers/extend.js';\nimport { checkStorageValue } from './helpers/checkStorageValue.js';\nimport { setLocalStorage } from './helpers/setLocalStorage.js';\nimport { getSlideId } from './helpers/getSlideId.js';\nimport { calc } from './helpers/calc.js';\nimport { percentageLayout } from './helpers/percentageLayout.js';\nimport { mediaquerySupport } from './helpers/mediaquerySupport.js';\nimport { createStyleSheet } from './helpers/createStyleSheet.js';\nimport { addCSSRule } from './helpers/addCSSRule.js';\nimport { removeCSSRule } from './helpers/removeCSSRule.js';\nimport { getCssRulesLength } from './helpers/getCssRulesLength.js';\nimport { toDegree } from './helpers/toDegree.js';\nimport { getTouchDirection } from './helpers/getTouchDirection.js';\nimport { forEach } from './helpers/forEach.js';\nimport { hasClass } from './helpers/hasClass.js';\nimport { addClass } from './helpers/addClass.js';\nimport { removeClass } from './helpers/removeClass.js';\nimport { hasAttr } from './helpers/hasAttr.js';\nimport { getAttr } from './helpers/getAttr.js';\nimport { setAttrs } from './helpers/setAttrs.js';\nimport { removeAttrs } from './helpers/removeAttrs.js';\nimport { arrayFromNodeList } from './helpers/arrayFromNodeList.js';\nimport { hideElement } from './helpers/hideElement.js';\nimport { showElement } from './helpers/showElement.js';\nimport { isVisible } from './helpers/isVisible.js';\nimport { whichProperty } from './helpers/whichProperty.js';\nimport { has3DTransforms } from './helpers/has3DTransforms.js';\nimport { getEndProperty } from './helpers/getEndProperty.js';\nimport { addEvents } from './helpers/addEvents.js';\nimport { removeEvents } from './helpers/removeEvents.js';\nimport { Events } from './helpers/events.js';\nimport { jsTransform } from './helpers/jsTransform.js';\n\nexport var tns = function(options) {\n  options = extend({\n    container: '.slider',\n    mode: 'carousel',\n    axis: 'horizontal',\n    items: 1,\n    gutter: 0,\n    edgePadding: 0,\n    fixedWidth: false,\n    autoWidth: false,\n    viewportMax: false,\n    slideBy: 1,\n    center: false,\n    controls: true,\n    controlsPosition: 'top',\n    controlsText: ['prev', 'next'],\n    controlsContainer: false,\n    prevButton: false,\n    nextButton: false,\n    nav: true,\n    navPosition: 'top',\n    navContainer: false,\n    navAsThumbnails: false,\n    arrowKeys: false,\n    speed: 300,\n    autoplay: false,\n    autoplayPosition: 'top',\n    autoplayTimeout: 5000,\n    autoplayDirection: 'forward',\n    autoplayText: ['start', 'stop'],\n    autoplayHoverPause: false,\n    autoplayButton: false,\n    autoplayButtonOutput: true,\n    autoplayResetOnVisibility: true,\n    animateIn: 'tns-fadeIn',\n    animateOut: 'tns-fadeOut',\n    animateNormal: 'tns-normal',\n    animateDelay: false,\n    loop: true,\n    rewind: false,\n    autoHeight: false,\n    responsive: false,\n    lazyload: false,\n    lazyloadSelector: '.tns-lazy-img',\n    touch: true,\n    mouseDrag: false,\n    swipeAngle: 15,\n    nested: false,\n    preventActionWhenRunning: false,\n    preventScrollOnTouch: false,\n    freezable: true,\n    onInit: false,\n    useLocalStorage: true,\n    nonce: false\n  }, options || {});\n\n  var doc = document,\n      win = window,\n      KEYS = {\n        ENTER: 13,\n        SPACE: 32,\n        LEFT: 37,\n        RIGHT: 39\n      },\n      tnsStorage = {},\n      localStorageAccess = options.useLocalStorage;\n\n  if (localStorageAccess) {\n    // check browser version and local storage access\n    var browserInfo = navigator.userAgent;\n    var uid = new Date;\n\n    try {\n      tnsStorage = win.localStorage;\n      if (tnsStorage) {\n        tnsStorage.setItem(uid, uid);\n        localStorageAccess = tnsStorage.getItem(uid) == uid;\n        tnsStorage.removeItem(uid);\n      } else {\n        localStorageAccess = false;\n      }\n      if (!localStorageAccess) { tnsStorage = {}; }\n    } catch(e) {\n      localStorageAccess = false;\n    }\n\n    if (localStorageAccess) {\n      // remove storage when browser version changes\n      if (tnsStorage['tnsApp'] && tnsStorage['tnsApp'] !== browserInfo) {\n        ['tC', 'tPL', 'tMQ', 'tTf', 't3D', 'tTDu', 'tTDe', 'tADu', 'tADe', 'tTE', 'tAE'].forEach(function(item) { tnsStorage.removeItem(item); });\n      }\n      // update browserInfo\n      localStorage['tnsApp'] = browserInfo;\n    }\n  }\n\n  var CALC = tnsStorage['tC'] ? checkStorageValue(tnsStorage['tC']) : setLocalStorage(tnsStorage, 'tC', calc(), localStorageAccess),\n      PERCENTAGELAYOUT = tnsStorage['tPL'] ? checkStorageValue(tnsStorage['tPL']) : setLocalStorage(tnsStorage, 'tPL', percentageLayout(), localStorageAccess),\n      CSSMQ = tnsStorage['tMQ'] ? checkStorageValue(tnsStorage['tMQ']) : setLocalStorage(tnsStorage, 'tMQ', mediaquerySupport(), localStorageAccess),\n      TRANSFORM = tnsStorage['tTf'] ? checkStorageValue(tnsStorage['tTf']) : setLocalStorage(tnsStorage, 'tTf', whichProperty('transform'), localStorageAccess),\n      HAS3DTRANSFORMS = tnsStorage['t3D'] ? checkStorageValue(tnsStorage['t3D']) : setLocalStorage(tnsStorage, 't3D', has3DTransforms(TRANSFORM), localStorageAccess),\n      TRANSITIONDURATION = tnsStorage['tTDu'] ? checkStorageValue(tnsStorage['tTDu']) : setLocalStorage(tnsStorage, 'tTDu', whichProperty('transitionDuration'), localStorageAccess),\n      TRANSITIONDELAY = tnsStorage['tTDe'] ? checkStorageValue(tnsStorage['tTDe']) : setLocalStorage(tnsStorage, 'tTDe', whichProperty('transitionDelay'), localStorageAccess),\n      ANIMATIONDURATION = tnsStorage['tADu'] ? checkStorageValue(tnsStorage['tADu']) : setLocalStorage(tnsStorage, 'tADu', whichProperty('animationDuration'), localStorageAccess),\n      ANIMATIONDELAY = tnsStorage['tADe'] ? checkStorageValue(tnsStorage['tADe']) : setLocalStorage(tnsStorage, 'tADe', whichProperty('animationDelay'), localStorageAccess),\n      TRANSITIONEND = tnsStorage['tTE'] ? checkStorageValue(tnsStorage['tTE']) : setLocalStorage(tnsStorage, 'tTE', getEndProperty(TRANSITIONDURATION, 'Transition'), localStorageAccess),\n      ANIMATIONEND = tnsStorage['tAE'] ? checkStorageValue(tnsStorage['tAE']) : setLocalStorage(tnsStorage, 'tAE', getEndProperty(ANIMATIONDURATION, 'Animation'), localStorageAccess);\n\n  // get element nodes from selectors\n  var supportConsoleWarn = win.console && typeof win.console.warn === \"function\",\n      tnsList = ['container', 'controlsContainer', 'prevButton', 'nextButton', 'navContainer', 'autoplayButton'],\n      optionsElements = {};\n\n  tnsList.forEach(function(item) {\n    if (typeof options[item] === 'string') {\n      var str = options[item],\n          el = doc.querySelector(str);\n      optionsElements[item] = str;\n\n      if (el && el.nodeName) {\n        options[item] = el;\n      } else {\n        if (supportConsoleWarn) { console.warn('Can\\'t find', options[item]); }\n        return;\n      }\n    }\n  });\n\n  // make sure at least 1 slide\n  if (options.container.children.length < 1) {\n    if (supportConsoleWarn) { console.warn('No slides found in', options.container); }\n    return;\n   }\n\n  // update options\n  var responsive = options.responsive,\n      nested = options.nested,\n      carousel = options.mode === 'carousel' ? true : false;\n\n  if (responsive) {\n    // apply responsive[0] to options and remove it\n    if (0 in responsive) {\n      options = extend(options, responsive[0]);\n      delete responsive[0];\n    }\n\n    var responsiveTem = {};\n    for (var key in responsive) {\n      var val = responsive[key];\n      // update responsive\n      // from: 300: 2\n      // to:\n      //   300: {\n      //     items: 2\n      //   }\n      val = typeof val === 'number' ? {items: val} : val;\n      responsiveTem[key] = val;\n    }\n    responsive = responsiveTem;\n    responsiveTem = null;\n  }\n\n  // update options\n  function updateOptions (obj) {\n    for (var key in obj) {\n      if (!carousel) {\n        if (key === 'slideBy') { obj[key] = 'page'; }\n        if (key === 'edgePadding') { obj[key] = false; }\n        if (key === 'autoHeight') { obj[key] = false; }\n      }\n\n      // update responsive options\n      if (key === 'responsive') { updateOptions(obj[key]); }\n    }\n  }\n  if (!carousel) { updateOptions(options); }\n\n\n  // === define and set variables ===\n  if (!carousel) {\n    options.axis = 'horizontal';\n    options.slideBy = 'page';\n    options.edgePadding = false;\n\n    var animateIn = options.animateIn,\n        animateOut = options.animateOut,\n        animateDelay = options.animateDelay,\n        animateNormal = options.animateNormal;\n  }\n\n  var horizontal = options.axis === 'horizontal' ? true : false,\n      outerWrapper = doc.createElement('div'),\n      innerWrapper = doc.createElement('div'),\n      middleWrapper,\n      container = options.container,\n      containerParent = container.parentNode,\n      containerHTML = container.outerHTML,\n      slideItems = container.children,\n      slideCount = slideItems.length,\n      breakpointZone,\n      windowWidth = getWindowWidth(),\n      isOn = false;\n  if (responsive) { setBreakpointZone(); }\n  if (carousel) { container.className += ' tns-vpfix'; }\n\n  // fixedWidth: viewport > rightBoundary > indexMax\n  var autoWidth = options.autoWidth,\n      fixedWidth = getOption('fixedWidth'),\n      edgePadding = getOption('edgePadding'),\n      gutter = getOption('gutter'),\n      viewport = getViewportWidth(),\n      center = getOption('center'),\n      items = !autoWidth ? Math.floor(getOption('items')) : 1,\n      slideBy = getOption('slideBy'),\n      viewportMax = options.viewportMax || options.fixedWidthViewportWidth,\n      arrowKeys = getOption('arrowKeys'),\n      speed = getOption('speed'),\n      rewind = options.rewind,\n      loop = rewind ? false : options.loop,\n      autoHeight = getOption('autoHeight'),\n      controls = getOption('controls'),\n      controlsText = getOption('controlsText'),\n      nav = getOption('nav'),\n      touch = getOption('touch'),\n      mouseDrag = getOption('mouseDrag'),\n      autoplay = getOption('autoplay'),\n      autoplayTimeout = getOption('autoplayTimeout'),\n      autoplayText = getOption('autoplayText'),\n      autoplayHoverPause = getOption('autoplayHoverPause'),\n      autoplayResetOnVisibility = getOption('autoplayResetOnVisibility'),\n      sheet = createStyleSheet(null, getOption('nonce')),\n      lazyload = options.lazyload,\n      lazyloadSelector = options.lazyloadSelector,\n      slidePositions, // collection of slide positions\n      slideItemsOut = [],\n      cloneCount = loop ? getCloneCountForLoop() : 0,\n      slideCountNew = !carousel ? slideCount + cloneCount : slideCount + cloneCount * 2,\n      hasRightDeadZone = (fixedWidth || autoWidth) && !loop ? true : false,\n      rightBoundary = fixedWidth ? getRightBoundary() : null,\n      updateIndexBeforeTransform = (!carousel || !loop) ? true : false,\n      // transform\n      transformAttr = horizontal ? 'left' : 'top',\n      transformPrefix = '',\n      transformPostfix = '',\n      // index\n      getIndexMax = (function () {\n        if (fixedWidth) {\n          return function() { return center && !loop ? slideCount - 1 : Math.ceil(- rightBoundary / (fixedWidth + gutter)); };\n        } else if (autoWidth) {\n          return function() {\n            for (var i = 0; i < slideCountNew; i++) {\n              if (slidePositions[i] >= - rightBoundary) { return i; }\n            }\n          };\n        } else {\n          return function() {\n            if (center && carousel && !loop) {\n              return slideCount - 1;\n            } else {\n              return loop || carousel ? Math.max(0, slideCountNew - Math.ceil(items)) : slideCountNew - 1;\n            }\n          };\n        }\n      })(),\n      index = getStartIndex(getOption('startIndex')),\n      indexCached = index,\n      displayIndex = getCurrentSlide(),\n      indexMin = 0,\n      indexMax = !autoWidth ? getIndexMax() : null,\n      // resize\n      resizeTimer,\n      preventActionWhenRunning = options.preventActionWhenRunning,\n      swipeAngle = options.swipeAngle,\n      moveDirectionExpected = swipeAngle ? '?' : true,\n      running = false,\n      onInit = options.onInit,\n      events = new Events(),\n      // id, class\n      newContainerClasses = ' tns-slider tns-' + options.mode,\n      slideId = container.id || getSlideId(),\n      disable = getOption('disable'),\n      disabled = false,\n      freezable = options.freezable,\n      freeze = freezable && !autoWidth ? getFreeze() : false,\n      frozen = false,\n      controlsEvents = {\n        'click': onControlsClick,\n        'keydown': onControlsKeydown\n      },\n      navEvents = {\n        'click': onNavClick,\n        'keydown': onNavKeydown\n      },\n      hoverEvents = {\n        'mouseover': mouseoverPause,\n        'mouseout': mouseoutRestart\n      },\n      visibilityEvent = {'visibilitychange': onVisibilityChange},\n      docmentKeydownEvent = {'keydown': onDocumentKeydown},\n      touchEvents = {\n        'touchstart': onPanStart,\n        'touchmove': onPanMove,\n        'touchend': onPanEnd,\n        'touchcancel': onPanEnd\n      }, dragEvents = {\n        'mousedown': onPanStart,\n        'mousemove': onPanMove,\n        'mouseup': onPanEnd,\n        'mouseleave': onPanEnd\n      },\n      hasControls = hasOption('controls'),\n      hasNav = hasOption('nav'),\n      navAsThumbnails = autoWidth ? true : options.navAsThumbnails,\n      hasAutoplay = hasOption('autoplay'),\n      hasTouch = hasOption('touch'),\n      hasMouseDrag = hasOption('mouseDrag'),\n      slideActiveClass = 'tns-slide-active',\n      slideClonedClass = 'tns-slide-cloned',\n      imgCompleteClass = 'tns-complete',\n      imgEvents = {\n        'load': onImgLoaded,\n        'error': onImgFailed\n      },\n      imgsComplete,\n      liveregionCurrent,\n      preventScroll = options.preventScrollOnTouch === 'force' ? true : false;\n\n  // controls\n  if (hasControls) {\n    var controlsContainer = options.controlsContainer,\n        controlsContainerHTML = options.controlsContainer ? options.controlsContainer.outerHTML : '',\n        prevButton = options.prevButton,\n        nextButton = options.nextButton,\n        prevButtonHTML = options.prevButton ? options.prevButton.outerHTML : '',\n        nextButtonHTML = options.nextButton ? options.nextButton.outerHTML : '',\n        prevIsButton,\n        nextIsButton;\n  }\n\n  // nav\n  if (hasNav) {\n    var navContainer = options.navContainer,\n        navContainerHTML = options.navContainer ? options.navContainer.outerHTML : '',\n        navItems,\n        pages = autoWidth ? slideCount : getPages(),\n        pagesCached = 0,\n        navClicked = -1,\n        navCurrentIndex = getCurrentNavIndex(),\n        navCurrentIndexCached = navCurrentIndex,\n        navActiveClass = 'tns-nav-active',\n        navStr = 'Carousel Page ',\n        navStrCurrent = ' (Current Slide)';\n  }\n\n  // autoplay\n  if (hasAutoplay) {\n    var autoplayDirection = options.autoplayDirection === 'forward' ? 1 : -1,\n        autoplayButton = options.autoplayButton,\n        autoplayButtonHTML = options.autoplayButton ? options.autoplayButton.outerHTML : '',\n        autoplayHtmlStrings = ['<span class=\\'tns-visually-hidden\\'>', ' animation</span>'],\n        autoplayTimer,\n        animating,\n        autoplayHoverPaused,\n        autoplayUserPaused,\n        autoplayVisibilityPaused;\n  }\n\n  if (hasTouch || hasMouseDrag) {\n    var initPosition = {},\n        lastPosition = {},\n        translateInit,\n        disX,\n        disY,\n        panStart = false,\n        rafIndex,\n        getDist = horizontal ?\n          function(a, b) { return a.x - b.x; } :\n          function(a, b) { return a.y - b.y; };\n  }\n\n  // disable slider when slidecount <= items\n  if (!autoWidth) { resetVariblesWhenDisable(disable || freeze); }\n\n  if (TRANSFORM) {\n    transformAttr = TRANSFORM;\n    transformPrefix = 'translate';\n\n    if (HAS3DTRANSFORMS) {\n      transformPrefix += horizontal ? '3d(' : '3d(0px, ';\n      transformPostfix = horizontal ? ', 0px, 0px)' : ', 0px)';\n    } else {\n      transformPrefix += horizontal ? 'X(' : 'Y(';\n      transformPostfix = ')';\n    }\n\n  }\n\n  if (carousel) { container.className = container.className.replace('tns-vpfix', ''); }\n  initStructure();\n  initSheet();\n  initSliderTransform();\n\n  // === COMMON FUNCTIONS === //\n  function resetVariblesWhenDisable (condition) {\n    if (condition) {\n      controls = nav = touch = mouseDrag = arrowKeys = autoplay = autoplayHoverPause = autoplayResetOnVisibility = false;\n    }\n  }\n\n  function getCurrentSlide () {\n    var tem = carousel ? index - cloneCount : index;\n    while (tem < 0) { tem += slideCount; }\n    return tem%slideCount + 1;\n  }\n\n  function getStartIndex (ind) {\n    ind = ind ? Math.max(0, Math.min(loop ? slideCount - 1 : slideCount - items, ind)) : 0;\n    return carousel ? ind + cloneCount : ind;\n  }\n\n  function getAbsIndex (i) {\n    if (i == null) { i = index; }\n\n    if (carousel) { i -= cloneCount; }\n    while (i < 0) { i += slideCount; }\n\n    return Math.floor(i%slideCount);\n  }\n\n  function getCurrentNavIndex () {\n    var absIndex = getAbsIndex(),\n        result;\n\n    result = navAsThumbnails ? absIndex :\n      fixedWidth || autoWidth ? Math.ceil((absIndex + 1) * pages / slideCount - 1) :\n          Math.floor(absIndex / items);\n\n    // set active nav to the last one when reaches the right edge\n    if (!loop && carousel && index === indexMax) { result = pages - 1; }\n\n    return result;\n  }\n\n  function getItemsMax () {\n    // fixedWidth or autoWidth while viewportMax is not available\n    if (autoWidth || (fixedWidth && !viewportMax)) {\n      return slideCount - 1;\n    // most cases\n    } else {\n      var str = fixedWidth ? 'fixedWidth' : 'items',\n          arr = [];\n\n      if (fixedWidth || options[str] < slideCount) { arr.push(options[str]); }\n\n      if (responsive) {\n        for (var bp in responsive) {\n          var tem = responsive[bp][str];\n          if (tem && (fixedWidth || tem < slideCount)) { arr.push(tem); }\n        }\n      }\n\n      if (!arr.length) { arr.push(0); }\n\n      return Math.ceil(fixedWidth ? viewportMax / Math.min.apply(null, arr) : Math.max.apply(null, arr));\n    }\n  }\n\n  function getCloneCountForLoop () {\n    var itemsMax = getItemsMax(),\n        result = carousel ? Math.ceil((itemsMax * 5 - slideCount)/2) : (itemsMax * 4 - slideCount);\n    result = Math.max(itemsMax, result);\n\n    return hasOption('edgePadding') ? result + 1 : result;\n  }\n\n  function getWindowWidth () {\n    return win.innerWidth || doc.documentElement.clientWidth || doc.body.clientWidth;\n  }\n\n  function getInsertPosition (pos) {\n    return pos === 'top' ? 'afterbegin' : 'beforeend';\n  }\n\n  function getClientWidth (el) {\n    if (el == null) { return; }\n    var div = doc.createElement('div'), rect, width;\n    el.appendChild(div);\n    rect = div.getBoundingClientRect();\n    width = rect.right - rect.left;\n    div.remove();\n    return width || getClientWidth(el.parentNode);\n  }\n\n  function getViewportWidth () {\n    var gap = edgePadding ? edgePadding * 2 - gutter : 0;\n    return getClientWidth(containerParent) - gap;\n  }\n\n  function hasOption (item) {\n    if (options[item]) {\n      return true;\n    } else {\n      if (responsive) {\n        for (var bp in responsive) {\n          if (responsive[bp][item]) { return true; }\n        }\n      }\n      return false;\n    }\n  }\n\n  // get option:\n  // fixed width: viewport, fixedWidth, gutter => items\n  // others: window width => all variables\n  // all: items => slideBy\n  function getOption (item, ww) {\n    if (ww == null) { ww = windowWidth; }\n\n    if (item === 'items' && fixedWidth) {\n      return Math.floor((viewport + gutter) / (fixedWidth + gutter)) || 1;\n\n    } else {\n      var result = options[item];\n\n      if (responsive) {\n        for (var bp in responsive) {\n          // bp: convert string to number\n          if (ww >= parseInt(bp)) {\n            if (item in responsive[bp]) { result = responsive[bp][item]; }\n          }\n        }\n      }\n\n      if (item === 'slideBy' && result === 'page') { result = getOption('items'); }\n      if (!carousel && (item === 'slideBy' || item === 'items')) { result = Math.floor(result); }\n\n      return result;\n    }\n  }\n\n  function getSlideMarginLeft (i) {\n    return CALC ?\n      CALC + '(' + i * 100 + '% / ' + slideCountNew + ')' :\n      i * 100 / slideCountNew + '%';\n  }\n\n  function getInnerWrapperStyles (edgePaddingTem, gutterTem, fixedWidthTem, speedTem, autoHeightBP) {\n    var str = '';\n\n    if (edgePaddingTem !== undefined) {\n      var gap = edgePaddingTem;\n      if (gutterTem) { gap -= gutterTem; }\n      str = horizontal ?\n        'margin: 0 ' + gap + 'px 0 ' + edgePaddingTem + 'px;' :\n        'margin: ' + edgePaddingTem + 'px 0 ' + gap + 'px 0;';\n    } else if (gutterTem && !fixedWidthTem) {\n      var gutterTemUnit = '-' + gutterTem + 'px',\n          dir = horizontal ? gutterTemUnit + ' 0 0' : '0 ' + gutterTemUnit + ' 0';\n      str = 'margin: 0 ' + dir + ';'\n    }\n\n    if (!carousel && autoHeightBP && TRANSITIONDURATION && speedTem) { str += getTransitionDurationStyle(speedTem); }\n    return str;\n  }\n\n  function getContainerWidth (fixedWidthTem, gutterTem, itemsTem) {\n    if (fixedWidthTem) {\n      return (fixedWidthTem + gutterTem) * slideCountNew + 'px';\n    } else {\n      return CALC ?\n        CALC + '(' + slideCountNew * 100 + '% / ' + itemsTem + ')' :\n        slideCountNew * 100 / itemsTem + '%';\n    }\n  }\n\n  function getSlideWidthStyle (fixedWidthTem, gutterTem, itemsTem) {\n    var width;\n\n    if (fixedWidthTem) {\n      width = (fixedWidthTem + gutterTem) + 'px';\n    } else {\n      if (!carousel) { itemsTem = Math.floor(itemsTem); }\n      var dividend = carousel ? slideCountNew : itemsTem;\n      width = CALC ?\n        CALC + '(100% / ' + dividend + ')' :\n        100 / dividend + '%';\n    }\n\n    width = 'width:' + width;\n\n    // inner slider: overwrite outer slider styles\n    return nested !== 'inner' ? width + ';' : width + ' !important;';\n  }\n\n  function getSlideGutterStyle (gutterTem) {\n    var str = '';\n\n    // gutter maybe interger || 0\n    // so can't use 'if (gutter)'\n    if (gutterTem !== false) {\n      var prop = horizontal ? 'padding-' : 'margin-',\n          dir = horizontal ? 'right' : 'bottom';\n      str = prop +  dir + ': ' + gutterTem + 'px;';\n    }\n\n    return str;\n  }\n\n  function getCSSPrefix (name, num) {\n    var prefix = name.substring(0, name.length - num).toLowerCase();\n    if (prefix) { prefix = '-' + prefix + '-'; }\n\n    return prefix;\n  }\n\n  function getTransitionDurationStyle (speed) {\n    return getCSSPrefix(TRANSITIONDURATION, 18) + 'transition-duration:' + speed / 1000 + 's;';\n  }\n\n  function getAnimationDurationStyle (speed) {\n    return getCSSPrefix(ANIMATIONDURATION, 17) + 'animation-duration:' + speed / 1000 + 's;';\n  }\n\n  function initStructure () {\n    var classOuter = 'tns-outer',\n        classInner = 'tns-inner',\n        hasGutter = hasOption('gutter');\n\n    outerWrapper.className = classOuter;\n    innerWrapper.className = classInner;\n    outerWrapper.id = slideId + '-ow';\n    innerWrapper.id = slideId + '-iw';\n\n    // set container properties\n    if (container.id === '') { container.id = slideId; }\n    newContainerClasses += PERCENTAGELAYOUT || autoWidth ? ' tns-subpixel' : ' tns-no-subpixel';\n    newContainerClasses += CALC ? ' tns-calc' : ' tns-no-calc';\n    if (autoWidth) { newContainerClasses += ' tns-autowidth'; }\n    newContainerClasses += ' tns-' + options.axis;\n    container.className += newContainerClasses;\n\n    // add constrain layer for carousel\n    if (carousel) {\n      middleWrapper = doc.createElement('div');\n      middleWrapper.id = slideId + '-mw';\n      middleWrapper.className = 'tns-ovh';\n\n      outerWrapper.appendChild(middleWrapper);\n      middleWrapper.appendChild(innerWrapper);\n    } else {\n      outerWrapper.appendChild(innerWrapper);\n    }\n\n    if (autoHeight) {\n      var wp = middleWrapper ? middleWrapper : innerWrapper;\n      wp.className += ' tns-ah';\n    }\n\n    containerParent.insertBefore(outerWrapper, container);\n    innerWrapper.appendChild(container);\n\n    // add id, class, aria attributes\n    // before clone slides\n    forEach(slideItems, function(item, i) {\n      addClass(item, 'tns-item');\n      if (!item.id) { item.id = slideId + '-item' + i; }\n      if (!carousel && animateNormal) { addClass(item, animateNormal); }\n      setAttrs(item, {\n        'aria-hidden': 'true',\n        'tabindex': '-1'\n      });\n    });\n\n    // ## clone slides\n    // carousel: n + slides + n\n    // gallery:      slides + n\n    if (cloneCount) {\n      var fragmentBefore = doc.createDocumentFragment(),\n          fragmentAfter = doc.createDocumentFragment();\n\n      for (var j = cloneCount; j--;) {\n        var num = j%slideCount,\n            cloneFirst = slideItems[num].cloneNode(true);\n        addClass(cloneFirst, slideClonedClass);\n        removeAttrs(cloneFirst, 'id');\n        fragmentAfter.insertBefore(cloneFirst, fragmentAfter.firstChild);\n\n        if (carousel) {\n          var cloneLast = slideItems[slideCount - 1 - num].cloneNode(true);\n          addClass(cloneLast, slideClonedClass);\n          removeAttrs(cloneLast, 'id');\n          fragmentBefore.appendChild(cloneLast);\n        }\n      }\n\n      container.insertBefore(fragmentBefore, container.firstChild);\n      container.appendChild(fragmentAfter);\n      slideItems = container.children;\n    }\n\n  }\n\n  function initSliderTransform () {\n    // ## images loaded/failed\n    if (hasOption('autoHeight') || autoWidth || !horizontal) {\n      var imgs = container.querySelectorAll('img');\n\n      // add img load event listener\n      forEach(imgs, function(img) {\n        var src = img.src;\n\n        if (!lazyload) {\n          // not data img\n          if (src && src.indexOf('data:image') < 0) {\n            img.src = '';\n            addEvents(img, imgEvents);\n            addClass(img, 'loading');\n\n            img.src = src;\n          // data img\n          } else {\n            imgLoaded(img);\n          }\n        }\n      });\n\n      // set imgsComplete\n      raf(function(){ imgsLoadedCheck(arrayFromNodeList(imgs), function() { imgsComplete = true; }); });\n\n      // reset imgs for auto height: check visible imgs only\n      if (hasOption('autoHeight')) { imgs = getImageArray(index, Math.min(index + items - 1, slideCountNew - 1)); }\n\n      lazyload ? initSliderTransformStyleCheck() : raf(function(){ imgsLoadedCheck(arrayFromNodeList(imgs), initSliderTransformStyleCheck); });\n\n    } else {\n      // set container transform property\n      if (carousel) { doContainerTransformSilent(); }\n\n      // update slider tools and events\n      initTools();\n      initEvents();\n    }\n  }\n\n  function initSliderTransformStyleCheck () {\n    if (autoWidth && slideCount > 1) {\n      // check styles application\n      var num = loop ? index : slideCount - 1;\n\n      (function stylesApplicationCheck() {\n        var left = slideItems[num].getBoundingClientRect().left;\n        var right = slideItems[num - 1].getBoundingClientRect().right;\n\n        (Math.abs(left - right) <= 1) ?\n          initSliderTransformCore() :\n          setTimeout(function(){ stylesApplicationCheck() }, 16);\n      })();\n\n    } else {\n      initSliderTransformCore();\n    }\n  }\n\n\n  function initSliderTransformCore () {\n    // run Fn()s which are rely on image loading\n    if (!horizontal || autoWidth) {\n      setSlidePositions();\n\n      if (autoWidth) {\n        rightBoundary = getRightBoundary();\n        if (freezable) { freeze = getFreeze(); }\n        indexMax = getIndexMax(); // <= slidePositions, rightBoundary <=\n        resetVariblesWhenDisable(disable || freeze);\n      } else {\n        updateContentWrapperHeight();\n      }\n    }\n\n    // set container transform property\n    if (carousel) { doContainerTransformSilent(); }\n\n    // update slider tools and events\n    initTools();\n    initEvents();\n  }\n\n  function initSheet () {\n    // gallery:\n    // set animation classes and left value for gallery slider\n    if (!carousel) {\n      for (var i = index, l = index + Math.min(slideCount, items); i < l; i++) {\n        var item = slideItems[i];\n        item.style.left = (i - index) * 100 / items + '%';\n        addClass(item, animateIn);\n        removeClass(item, animateNormal);\n      }\n    }\n\n    // #### LAYOUT\n\n    // ## INLINE-BLOCK VS FLOAT\n\n    // ## PercentageLayout:\n    // slides: inline-block\n    // remove blank space between slides by set font-size: 0\n\n    // ## Non PercentageLayout:\n    // slides: float\n    //         margin-right: -100%\n    //         margin-left: ~\n\n    // Resource: https://docs.google.com/spreadsheets/d/147up245wwTXeQYve3BRSAD4oVcvQmuGsFteJOeA5xNQ/edit?usp=sharing\n    if (horizontal) {\n      if (PERCENTAGELAYOUT || autoWidth) {\n        addCSSRule(sheet, '#' + slideId + ' > .tns-item', 'font-size:' + win.getComputedStyle(slideItems[0]).fontSize + ';', getCssRulesLength(sheet));\n        addCSSRule(sheet, '#' + slideId, 'font-size:0;', getCssRulesLength(sheet));\n      } else if (carousel) {\n        forEach(slideItems, function (slide, i) {\n          slide.style.marginLeft = getSlideMarginLeft(i);\n        });\n      }\n    }\n\n\n    // ## BASIC STYLES\n    if (CSSMQ) {\n      // middle wrapper style\n      if (TRANSITIONDURATION) {\n        var str = middleWrapper && options.autoHeight ? getTransitionDurationStyle(options.speed) : '';\n        addCSSRule(sheet, '#' + slideId + '-mw', str, getCssRulesLength(sheet));\n      }\n\n      // inner wrapper styles\n      str = getInnerWrapperStyles(options.edgePadding, options.gutter, options.fixedWidth, options.speed, options.autoHeight);\n      addCSSRule(sheet, '#' + slideId + '-iw', str, getCssRulesLength(sheet));\n\n      // container styles\n      if (carousel) {\n        str = horizontal && !autoWidth ? 'width:' + getContainerWidth(options.fixedWidth, options.gutter, options.items) + ';' : '';\n        if (TRANSITIONDURATION) { str += getTransitionDurationStyle(speed); }\n        addCSSRule(sheet, '#' + slideId, str, getCssRulesLength(sheet));\n      }\n\n      // slide styles\n      str = horizontal && !autoWidth ? getSlideWidthStyle(options.fixedWidth, options.gutter, options.items) : '';\n      if (options.gutter) { str += getSlideGutterStyle(options.gutter); }\n      // set gallery items transition-duration\n      if (!carousel) {\n        if (TRANSITIONDURATION) { str += getTransitionDurationStyle(speed); }\n        if (ANIMATIONDURATION) { str += getAnimationDurationStyle(speed); }\n      }\n      if (str) { addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet)); }\n\n    // non CSS mediaqueries: IE8\n    // ## update inner wrapper, container, slides if needed\n    // set inline styles for inner wrapper & container\n    // insert stylesheet (one line) for slides only (since slides are many)\n    } else {\n      // middle wrapper styles\n      update_carousel_transition_duration();\n\n      // inner wrapper styles\n      innerWrapper.style.cssText = getInnerWrapperStyles(edgePadding, gutter, fixedWidth, autoHeight);\n\n      // container styles\n      if (carousel && horizontal && !autoWidth) {\n        container.style.width = getContainerWidth(fixedWidth, gutter, items);\n      }\n\n      // slide styles\n      var str = horizontal && !autoWidth ? getSlideWidthStyle(fixedWidth, gutter, items) : '';\n      if (gutter) { str += getSlideGutterStyle(gutter); }\n\n      // append to the last line\n      if (str) { addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet)); }\n    }\n\n    // ## MEDIAQUERIES\n    if (responsive && CSSMQ) {\n      for (var bp in responsive) {\n        // bp: convert string to number\n        bp = parseInt(bp);\n\n        var opts = responsive[bp],\n            str = '',\n            middleWrapperStr = '',\n            innerWrapperStr = '',\n            containerStr = '',\n            slideStr = '',\n            itemsBP = !autoWidth ? getOption('items', bp) : null,\n            fixedWidthBP = getOption('fixedWidth', bp),\n            speedBP = getOption('speed', bp),\n            edgePaddingBP = getOption('edgePadding', bp),\n            autoHeightBP = getOption('autoHeight', bp),\n            gutterBP = getOption('gutter', bp);\n\n        // middle wrapper string\n        if (TRANSITIONDURATION && middleWrapper && getOption('autoHeight', bp) && 'speed' in opts) {\n          middleWrapperStr = '#' + slideId + '-mw{' + getTransitionDurationStyle(speedBP) + '}';\n        }\n\n        // inner wrapper string\n        if ('edgePadding' in opts || 'gutter' in opts) {\n          innerWrapperStr = '#' + slideId + '-iw{' + getInnerWrapperStyles(edgePaddingBP, gutterBP, fixedWidthBP, speedBP, autoHeightBP) + '}';\n        }\n\n        // container string\n        if (carousel && horizontal && !autoWidth && ('fixedWidth' in opts || 'items' in opts || (fixedWidth && 'gutter' in opts))) {\n          containerStr = 'width:' + getContainerWidth(fixedWidthBP, gutterBP, itemsBP) + ';';\n        }\n        if (TRANSITIONDURATION && 'speed' in opts) {\n          containerStr += getTransitionDurationStyle(speedBP);\n        }\n        if (containerStr) {\n          containerStr = '#' + slideId + '{' + containerStr + '}';\n        }\n\n        // slide string\n        if ('fixedWidth' in opts || (fixedWidth && 'gutter' in opts) || !carousel && 'items' in opts) {\n          slideStr += getSlideWidthStyle(fixedWidthBP, gutterBP, itemsBP);\n        }\n        if ('gutter' in opts) {\n          slideStr += getSlideGutterStyle(gutterBP);\n        }\n        // set gallery items transition-duration\n        if (!carousel && 'speed' in opts) {\n          if (TRANSITIONDURATION) { slideStr += getTransitionDurationStyle(speedBP); }\n          if (ANIMATIONDURATION) { slideStr += getAnimationDurationStyle(speedBP); }\n        }\n        if (slideStr) { slideStr = '#' + slideId + ' > .tns-item{' + slideStr + '}'; }\n\n        // add up\n        str = middleWrapperStr + innerWrapperStr + containerStr + slideStr;\n\n        if (str) {\n          sheet.insertRule('@media (min-width: ' + bp / 16 + 'em) {' + str + '}', sheet.cssRules.length);\n        }\n      }\n    }\n  }\n\n  function initTools () {\n    // == slides ==\n    updateSlideStatus();\n\n    // == live region ==\n    outerWrapper.insertAdjacentHTML('afterbegin', '<div class=\"tns-liveregion tns-visually-hidden\" aria-live=\"polite\" aria-atomic=\"true\">slide <span class=\"current\">' + getLiveRegionStr() + '</span>  of ' + slideCount + '</div>');\n    liveregionCurrent = outerWrapper.querySelector('.tns-liveregion .current');\n\n    // == autoplayInit ==\n    if (hasAutoplay) {\n      var txt = autoplay ? 'stop' : 'start';\n      if (autoplayButton) {\n        setAttrs(autoplayButton, {'data-action': txt});\n      } else if (options.autoplayButtonOutput) {\n        outerWrapper.insertAdjacentHTML(getInsertPosition(options.autoplayPosition), '<button type=\"button\" data-action=\"' + txt + '\">' + autoplayHtmlStrings[0] + txt + autoplayHtmlStrings[1] + autoplayText[0] + '</button>');\n        autoplayButton = outerWrapper.querySelector('[data-action]');\n      }\n\n      // add event\n      if (autoplayButton) {\n        addEvents(autoplayButton, {'click': toggleAutoplay});\n      }\n\n      if (autoplay) {\n        startAutoplay();\n        if (autoplayHoverPause) { addEvents(container, hoverEvents); }\n        if (autoplayResetOnVisibility) { addEvents(container, visibilityEvent); }\n      }\n    }\n\n    // == navInit ==\n    if (hasNav) {\n      var initIndex = !carousel ? 0 : cloneCount;\n      // customized nav\n      // will not hide the navs in case they're thumbnails\n      if (navContainer) {\n        setAttrs(navContainer, {'aria-label': 'Carousel Pagination'});\n        navItems = navContainer.children;\n        forEach(navItems, function(item, i) {\n          setAttrs(item, {\n            'data-nav': i,\n            'tabindex': '-1',\n            'aria-label': navStr + (i + 1),\n            'aria-controls': slideId,\n          });\n        });\n\n      // generated nav\n      } else {\n        var navHtml = '',\n            hiddenStr = navAsThumbnails ? '' : 'style=\"display:none\"';\n        for (var i = 0; i < slideCount; i++) {\n          // hide nav items by default\n          navHtml += '<button type=\"button\" data-nav=\"' + i +'\" tabindex=\"-1\" aria-controls=\"' + slideId + '\" ' + hiddenStr + ' aria-label=\"' + navStr + (i + 1) +'\"></button>';\n        }\n        navHtml = '<div class=\"tns-nav\" aria-label=\"Carousel Pagination\">' + navHtml + '</div>';\n        outerWrapper.insertAdjacentHTML(getInsertPosition(options.navPosition), navHtml);\n\n        navContainer = outerWrapper.querySelector('.tns-nav');\n        navItems = navContainer.children;\n      }\n\n      updateNavVisibility();\n\n      // add transition\n      if (TRANSITIONDURATION) {\n        var prefix = TRANSITIONDURATION.substring(0, TRANSITIONDURATION.length - 18).toLowerCase(),\n            str = 'transition: all ' + speed / 1000 + 's';\n\n        if (prefix) {\n          str = '-' + prefix + '-' + str;\n        }\n\n        addCSSRule(sheet, '[aria-controls^=' + slideId + '-item]', str, getCssRulesLength(sheet));\n      }\n\n      setAttrs(navItems[navCurrentIndex], {'aria-label': navStr + (navCurrentIndex + 1) + navStrCurrent});\n      removeAttrs(navItems[navCurrentIndex], 'tabindex');\n      addClass(navItems[navCurrentIndex], navActiveClass);\n\n      // add events\n      addEvents(navContainer, navEvents);\n    }\n\n\n\n    // == controlsInit ==\n    if (hasControls) {\n      if (!controlsContainer && (!prevButton || !nextButton)) {\n        outerWrapper.insertAdjacentHTML(getInsertPosition(options.controlsPosition), '<div class=\"tns-controls\" aria-label=\"Carousel Navigation\" tabindex=\"0\"><button type=\"button\" data-controls=\"prev\" tabindex=\"-1\" aria-controls=\"' + slideId +'\">' + controlsText[0] + '</button><button type=\"button\" data-controls=\"next\" tabindex=\"-1\" aria-controls=\"' + slideId +'\">' + controlsText[1] + '</button></div>');\n\n        controlsContainer = outerWrapper.querySelector('.tns-controls');\n      }\n\n      if (!prevButton || !nextButton) {\n        prevButton = controlsContainer.children[0];\n        nextButton = controlsContainer.children[1];\n      }\n\n      if (options.controlsContainer) {\n        setAttrs(controlsContainer, {\n          'aria-label': 'Carousel Navigation',\n          'tabindex': '0'\n        });\n      }\n\n      if (options.controlsContainer || (options.prevButton && options.nextButton)) {\n        setAttrs([prevButton, nextButton], {\n          'aria-controls': slideId,\n          'tabindex': '-1',\n        });\n      }\n\n      if (options.controlsContainer || (options.prevButton && options.nextButton)) {\n        setAttrs(prevButton, {'data-controls' : 'prev'});\n        setAttrs(nextButton, {'data-controls' : 'next'});\n      }\n\n      prevIsButton = isButton(prevButton);\n      nextIsButton = isButton(nextButton);\n\n      updateControlsStatus();\n\n      // add events\n      if (controlsContainer) {\n        addEvents(controlsContainer, controlsEvents);\n      } else {\n        addEvents(prevButton, controlsEvents);\n        addEvents(nextButton, controlsEvents);\n      }\n    }\n\n    // hide tools if needed\n    disableUI();\n  }\n\n  function initEvents () {\n    // add events\n    if (carousel && TRANSITIONEND) {\n      var eve = {};\n      eve[TRANSITIONEND] = onTransitionEnd;\n      addEvents(container, eve);\n    }\n\n    if (touch) { addEvents(container, touchEvents, options.preventScrollOnTouch); }\n    if (mouseDrag) { addEvents(container, dragEvents); }\n    if (arrowKeys) { addEvents(doc, docmentKeydownEvent); }\n\n    if (nested === 'inner') {\n      events.on('outerResized', function () {\n        resizeTasks();\n        events.emit('innerLoaded', info());\n      });\n    } else if (responsive || fixedWidth || autoWidth || autoHeight || !horizontal) {\n      addEvents(win, {'resize': onResize});\n    }\n\n    if (autoHeight) {\n      if (nested === 'outer') {\n        events.on('innerLoaded', doAutoHeight);\n      } else if (!disable) { doAutoHeight(); }\n    }\n\n    doLazyLoad();\n    if (disable) { disableSlider(); } else if (freeze) { freezeSlider(); }\n\n    events.on('indexChanged', additionalUpdates);\n    if (nested === 'inner') { events.emit('innerLoaded', info()); }\n    if (typeof onInit === 'function') { onInit(info()); }\n    isOn = true;\n  }\n\n  function destroy () {\n    // sheet\n    sheet.disabled = true;\n    if (sheet.ownerNode) { sheet.ownerNode.remove(); }\n\n    // remove win event listeners\n    removeEvents(win, {'resize': onResize});\n\n    // arrowKeys, controls, nav\n    if (arrowKeys) { removeEvents(doc, docmentKeydownEvent); }\n    if (controlsContainer) { removeEvents(controlsContainer, controlsEvents); }\n    if (navContainer) { removeEvents(navContainer, navEvents); }\n\n    // autoplay\n    removeEvents(container, hoverEvents);\n    removeEvents(container, visibilityEvent);\n    if (autoplayButton) { removeEvents(autoplayButton, {'click': toggleAutoplay}); }\n    if (autoplay) { clearInterval(autoplayTimer); }\n\n    // container\n    if (carousel && TRANSITIONEND) {\n      var eve = {};\n      eve[TRANSITIONEND] = onTransitionEnd;\n      removeEvents(container, eve);\n    }\n    if (touch) { removeEvents(container, touchEvents); }\n    if (mouseDrag) { removeEvents(container, dragEvents); }\n\n    // cache Object values in options && reset HTML\n    var htmlList = [containerHTML, controlsContainerHTML, prevButtonHTML, nextButtonHTML, navContainerHTML, autoplayButtonHTML];\n\n    tnsList.forEach(function(item, i) {\n      var el = item === 'container' ? outerWrapper : options[item];\n\n      if (typeof el === 'object' && el) {\n        var prevEl = el.previousElementSibling ? el.previousElementSibling : false,\n            parentEl = el.parentNode;\n        el.outerHTML = htmlList[i];\n        options[item] = prevEl ? prevEl.nextElementSibling : parentEl.firstElementChild;\n      }\n    });\n\n\n    // reset variables\n    tnsList = animateIn = animateOut = animateDelay = animateNormal = horizontal = outerWrapper = innerWrapper = container = containerParent = containerHTML = slideItems = slideCount = breakpointZone = windowWidth = autoWidth = fixedWidth = edgePadding = gutter = viewport = items = slideBy = viewportMax = arrowKeys = speed = rewind = loop = autoHeight = sheet = lazyload = slidePositions = slideItemsOut = cloneCount = slideCountNew = hasRightDeadZone = rightBoundary = updateIndexBeforeTransform = transformAttr = transformPrefix = transformPostfix = getIndexMax = index = indexCached = indexMin = indexMax = resizeTimer = swipeAngle = moveDirectionExpected = running = onInit = events = newContainerClasses = slideId = disable = disabled = freezable = freeze = frozen = controlsEvents = navEvents = hoverEvents = visibilityEvent = docmentKeydownEvent = touchEvents = dragEvents = hasControls = hasNav = navAsThumbnails = hasAutoplay = hasTouch = hasMouseDrag = slideActiveClass = imgCompleteClass = imgEvents = imgsComplete = controls = controlsText = controlsContainer = controlsContainerHTML = prevButton = nextButton = prevIsButton = nextIsButton = nav = navContainer = navContainerHTML = navItems = pages = pagesCached = navClicked = navCurrentIndex = navCurrentIndexCached = navActiveClass = navStr = navStrCurrent = autoplay = autoplayTimeout = autoplayDirection = autoplayText = autoplayHoverPause = autoplayButton = autoplayButtonHTML = autoplayResetOnVisibility = autoplayHtmlStrings = autoplayTimer = animating = autoplayHoverPaused = autoplayUserPaused = autoplayVisibilityPaused = initPosition = lastPosition = translateInit = disX = disY = panStart = rafIndex = getDist = touch = mouseDrag = null;\n    // check variables\n    // [animateIn, animateOut, animateDelay, animateNormal, horizontal, outerWrapper, innerWrapper, container, containerParent, containerHTML, slideItems, slideCount, breakpointZone, windowWidth, autoWidth, fixedWidth, edgePadding, gutter, viewport, items, slideBy, viewportMax, arrowKeys, speed, rewind, loop, autoHeight, sheet, lazyload, slidePositions, slideItemsOut, cloneCount, slideCountNew, hasRightDeadZone, rightBoundary, updateIndexBeforeTransform, transformAttr, transformPrefix, transformPostfix, getIndexMax, index, indexCached, indexMin, indexMax, resizeTimer, swipeAngle, moveDirectionExpected, running, onInit, events, newContainerClasses, slideId, disable, disabled, freezable, freeze, frozen, controlsEvents, navEvents, hoverEvents, visibilityEvent, docmentKeydownEvent, touchEvents, dragEvents, hasControls, hasNav, navAsThumbnails, hasAutoplay, hasTouch, hasMouseDrag, slideActiveClass, imgCompleteClass, imgEvents, imgsComplete, controls, controlsText, controlsContainer, controlsContainerHTML, prevButton, nextButton, prevIsButton, nextIsButton, nav, navContainer, navContainerHTML, navItems, pages, pagesCached, navClicked, navCurrentIndex, navCurrentIndexCached, navActiveClass, navStr, navStrCurrent, autoplay, autoplayTimeout, autoplayDirection, autoplayText, autoplayHoverPause, autoplayButton, autoplayButtonHTML, autoplayResetOnVisibility, autoplayHtmlStrings, autoplayTimer, animating, autoplayHoverPaused, autoplayUserPaused, autoplayVisibilityPaused, initPosition, lastPosition, translateInit, disX, disY, panStart, rafIndex, getDist, touch, mouseDrag ].forEach(function(item) { if (item !== null) { console.log(item); } });\n\n    for (var a in this) {\n      if (a !== 'rebuild') { this[a] = null; }\n    }\n    isOn = false;\n  }\n\n// === ON RESIZE ===\n  // responsive || fixedWidth || autoWidth || !horizontal\n  function onResize (e) {\n    raf(function(){ resizeTasks(getEvent(e)); });\n  }\n\n  function resizeTasks (e) {\n    if (!isOn) { return; }\n    if (nested === 'outer') { events.emit('outerResized', info(e)); }\n    windowWidth = getWindowWidth();\n    var bpChanged,\n        breakpointZoneTem = breakpointZone,\n        needContainerTransform = false;\n\n    if (responsive) {\n      setBreakpointZone();\n      bpChanged = breakpointZoneTem !== breakpointZone;\n      // if (hasRightDeadZone) { needContainerTransform = true; } // *?\n      if (bpChanged) { events.emit('newBreakpointStart', info(e)); }\n    }\n\n    var indChanged,\n        itemsChanged,\n        itemsTem = items,\n        disableTem = disable,\n        freezeTem = freeze,\n        arrowKeysTem = arrowKeys,\n        controlsTem = controls,\n        navTem = nav,\n        touchTem = touch,\n        mouseDragTem = mouseDrag,\n        autoplayTem = autoplay,\n        autoplayHoverPauseTem = autoplayHoverPause,\n        autoplayResetOnVisibilityTem = autoplayResetOnVisibility,\n        indexTem = index;\n\n    if (bpChanged) {\n      var fixedWidthTem = fixedWidth,\n          autoHeightTem = autoHeight,\n          controlsTextTem = controlsText,\n          centerTem = center,\n          autoplayTextTem = autoplayText;\n\n      if (!CSSMQ) {\n        var gutterTem = gutter,\n            edgePaddingTem = edgePadding;\n      }\n    }\n\n    // get option:\n    // fixed width: viewport, fixedWidth, gutter => items\n    // others: window width => all variables\n    // all: items => slideBy\n    arrowKeys = getOption('arrowKeys');\n    controls = getOption('controls');\n    nav = getOption('nav');\n    touch = getOption('touch');\n    center = getOption('center');\n    mouseDrag = getOption('mouseDrag');\n    autoplay = getOption('autoplay');\n    autoplayHoverPause = getOption('autoplayHoverPause');\n    autoplayResetOnVisibility = getOption('autoplayResetOnVisibility');\n\n    if (bpChanged) {\n      disable = getOption('disable');\n      fixedWidth = getOption('fixedWidth');\n      speed = getOption('speed');\n      autoHeight = getOption('autoHeight');\n      controlsText = getOption('controlsText');\n      autoplayText = getOption('autoplayText');\n      autoplayTimeout = getOption('autoplayTimeout');\n\n      if (!CSSMQ) {\n        edgePadding = getOption('edgePadding');\n        gutter = getOption('gutter');\n      }\n    }\n    // update options\n    resetVariblesWhenDisable(disable);\n\n    viewport = getViewportWidth(); // <= edgePadding, gutter\n    if ((!horizontal || autoWidth) && !disable) {\n      setSlidePositions();\n      if (!horizontal) {\n        updateContentWrapperHeight(); // <= setSlidePositions\n        needContainerTransform = true;\n      }\n    }\n    if (fixedWidth || autoWidth) {\n      rightBoundary = getRightBoundary(); // autoWidth: <= viewport, slidePositions, gutter\n                                          // fixedWidth: <= viewport, fixedWidth, gutter\n      indexMax = getIndexMax(); // autoWidth: <= rightBoundary, slidePositions\n                                // fixedWidth: <= rightBoundary, fixedWidth, gutter\n    }\n\n    if (bpChanged || fixedWidth) {\n      items = getOption('items');\n      slideBy = getOption('slideBy');\n      itemsChanged = items !== itemsTem;\n\n      if (itemsChanged) {\n        if (!fixedWidth && !autoWidth) { indexMax = getIndexMax(); } // <= items\n        // check index before transform in case\n        // slider reach the right edge then items become bigger\n        updateIndex();\n      }\n    }\n\n    if (bpChanged) {\n      if (disable !== disableTem) {\n        if (disable) {\n          disableSlider();\n        } else {\n          enableSlider(); // <= slidePositions, rightBoundary, indexMax\n        }\n      }\n    }\n\n    if (freezable && (bpChanged || fixedWidth || autoWidth)) {\n      freeze = getFreeze(); // <= autoWidth: slidePositions, gutter, viewport, rightBoundary\n                            // <= fixedWidth: fixedWidth, gutter, rightBoundary\n                            // <= others: items\n\n      if (freeze !== freezeTem) {\n        if (freeze) {\n          doContainerTransform(getContainerTransformValue(getStartIndex(0)));\n          freezeSlider();\n        } else {\n          unfreezeSlider();\n          needContainerTransform = true;\n        }\n      }\n    }\n\n    resetVariblesWhenDisable(disable || freeze); // controls, nav, touch, mouseDrag, arrowKeys, autoplay, autoplayHoverPause, autoplayResetOnVisibility\n    if (!autoplay) { autoplayHoverPause = autoplayResetOnVisibility = false; }\n\n    if (arrowKeys !== arrowKeysTem) {\n      arrowKeys ?\n        addEvents(doc, docmentKeydownEvent) :\n        removeEvents(doc, docmentKeydownEvent);\n    }\n    if (controls !== controlsTem) {\n      if (controls) {\n        if (controlsContainer) {\n          showElement(controlsContainer);\n        } else {\n          if (prevButton) { showElement(prevButton); }\n          if (nextButton) { showElement(nextButton); }\n        }\n      } else {\n        if (controlsContainer) {\n          hideElement(controlsContainer);\n        } else {\n          if (prevButton) { hideElement(prevButton); }\n          if (nextButton) { hideElement(nextButton); }\n        }\n      }\n    }\n    if (nav !== navTem) {\n      if (nav) {\n        showElement(navContainer);\n        updateNavVisibility();\n      } else {\n        hideElement(navContainer)\n      }\n    }\n    if (touch !== touchTem) {\n      touch ?\n        addEvents(container, touchEvents, options.preventScrollOnTouch) :\n        removeEvents(container, touchEvents);\n    }\n    if (mouseDrag !== mouseDragTem) {\n      mouseDrag ?\n        addEvents(container, dragEvents) :\n        removeEvents(container, dragEvents);\n    }\n    if (autoplay !== autoplayTem) {\n      if (autoplay) {\n        if (autoplayButton) { showElement(autoplayButton); }\n        if (!animating && !autoplayUserPaused) { startAutoplay(); }\n      } else {\n        if (autoplayButton) { hideElement(autoplayButton); }\n        if (animating) { stopAutoplay(); }\n      }\n    }\n    if (autoplayHoverPause !== autoplayHoverPauseTem) {\n      autoplayHoverPause ?\n        addEvents(container, hoverEvents) :\n        removeEvents(container, hoverEvents);\n    }\n    if (autoplayResetOnVisibility !== autoplayResetOnVisibilityTem) {\n      autoplayResetOnVisibility ?\n        addEvents(doc, visibilityEvent) :\n        removeEvents(doc, visibilityEvent);\n    }\n\n    if (bpChanged) {\n      if (fixedWidth !== fixedWidthTem || center !== centerTem) { needContainerTransform = true; }\n\n      if (autoHeight !== autoHeightTem) {\n        if (!autoHeight) { innerWrapper.style.height = ''; }\n      }\n\n      if (controls && controlsText !== controlsTextTem) {\n        prevButton.innerHTML = controlsText[0];\n        nextButton.innerHTML = controlsText[1];\n      }\n\n      if (autoplayButton && autoplayText !== autoplayTextTem) {\n        var i = autoplay ? 1 : 0,\n            html = autoplayButton.innerHTML,\n            len = html.length - autoplayTextTem[i].length;\n        if (html.substring(len) === autoplayTextTem[i]) {\n          autoplayButton.innerHTML = html.substring(0, len) + autoplayText[i];\n        }\n      }\n    } else {\n      if (center && (fixedWidth || autoWidth)) { needContainerTransform = true; }\n    }\n\n    if (itemsChanged || fixedWidth && !autoWidth) {\n      pages = getPages();\n      updateNavVisibility();\n    }\n\n    indChanged = index !== indexTem;\n    if (indChanged) {\n      events.emit('indexChanged', info());\n      needContainerTransform = true;\n    } else if (itemsChanged) {\n      if (!indChanged) { additionalUpdates(); }\n    } else if (fixedWidth || autoWidth) {\n      doLazyLoad();\n      updateSlideStatus();\n      updateLiveRegion();\n    }\n\n    if (itemsChanged && !carousel) { updateGallerySlidePositions(); }\n\n    if (!disable && !freeze) {\n      // non-mediaqueries: IE8\n      if (bpChanged && !CSSMQ) {\n        // middle wrapper styles\n\n        // inner wrapper styles\n        if (edgePadding !== edgePaddingTem || gutter !== gutterTem) {\n          innerWrapper.style.cssText = getInnerWrapperStyles(edgePadding, gutter, fixedWidth, speed, autoHeight);\n        }\n\n        if (horizontal) {\n          // container styles\n          if (carousel) {\n            container.style.width = getContainerWidth(fixedWidth, gutter, items);\n          }\n\n          // slide styles\n          var str = getSlideWidthStyle(fixedWidth, gutter, items) +\n                    getSlideGutterStyle(gutter);\n\n          // remove the last line and\n          // add new styles\n          removeCSSRule(sheet, getCssRulesLength(sheet) - 1);\n          addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet));\n        }\n      }\n\n      // auto height\n      if (autoHeight) { doAutoHeight(); }\n\n      if (needContainerTransform) {\n        doContainerTransformSilent();\n        indexCached = index;\n      }\n    }\n\n    if (bpChanged) { events.emit('newBreakpointEnd', info(e)); }\n  }\n\n\n\n\n\n  // === INITIALIZATION FUNCTIONS === //\n  function getFreeze () {\n    if (!fixedWidth && !autoWidth) {\n      var a = center ? items - (items - 1) / 2 : items;\n      return  slideCount <= a;\n    }\n\n    var width = fixedWidth ? (fixedWidth + gutter) * slideCount : slidePositions[slideCount],\n        vp = edgePadding ? viewport + edgePadding * 2 : viewport + gutter;\n\n    if (center) {\n      vp -= fixedWidth ? (viewport - fixedWidth) / 2 : (viewport - (slidePositions[index + 1] - slidePositions[index] - gutter)) / 2;\n    }\n\n    return width <= vp;\n  }\n\n  function setBreakpointZone () {\n    breakpointZone = 0;\n    for (var bp in responsive) {\n      bp = parseInt(bp); // convert string to number\n      if (windowWidth >= bp) { breakpointZone = bp; }\n    }\n  }\n\n  // (slideBy, indexMin, indexMax) => index\n  var updateIndex = (function () {\n    return loop ?\n      carousel ?\n        // loop + carousel\n        function () {\n          var leftEdge = indexMin,\n              rightEdge = indexMax;\n\n          leftEdge += slideBy;\n          rightEdge -= slideBy;\n\n          // adjust edges when has edge paddings\n          // or fixed-width slider with extra space on the right side\n          if (edgePadding) {\n            leftEdge += 1;\n            rightEdge -= 1;\n          } else if (fixedWidth) {\n            if ((viewport + gutter)%(fixedWidth + gutter)) { rightEdge -= 1; }\n          }\n\n          if (cloneCount) {\n            if (index > rightEdge) {\n              index -= slideCount;\n            } else if (index < leftEdge) {\n              index += slideCount;\n            }\n          }\n        } :\n        // loop + gallery\n        function() {\n          if (index > indexMax) {\n            while (index >= indexMin + slideCount) { index -= slideCount; }\n          } else if (index < indexMin) {\n            while (index <= indexMax - slideCount) { index += slideCount; }\n          }\n        } :\n      // non-loop\n      function() {\n        index = Math.max(indexMin, Math.min(indexMax, index));\n      };\n  })();\n\n  function disableUI () {\n    if (!autoplay && autoplayButton) { hideElement(autoplayButton); }\n    if (!nav && navContainer) { hideElement(navContainer); }\n    if (!controls) {\n      if (controlsContainer) {\n        hideElement(controlsContainer);\n      } else {\n        if (prevButton) { hideElement(prevButton); }\n        if (nextButton) { hideElement(nextButton); }\n      }\n    }\n  }\n\n  function enableUI () {\n    if (autoplay && autoplayButton) { showElement(autoplayButton); }\n    if (nav && navContainer) { showElement(navContainer); }\n    if (controls) {\n      if (controlsContainer) {\n        showElement(controlsContainer);\n      } else {\n        if (prevButton) { showElement(prevButton); }\n        if (nextButton) { showElement(nextButton); }\n      }\n    }\n  }\n\n  function freezeSlider () {\n    if (frozen) { return; }\n\n    // remove edge padding from inner wrapper\n    if (edgePadding) { innerWrapper.style.margin = '0px'; }\n\n    // add class tns-transparent to cloned slides\n    if (cloneCount) {\n      var str = 'tns-transparent';\n      for (var i = cloneCount; i--;) {\n        if (carousel) { addClass(slideItems[i], str); }\n        addClass(slideItems[slideCountNew - i - 1], str);\n      }\n    }\n\n    // update tools\n    disableUI();\n\n    frozen = true;\n  }\n\n  function unfreezeSlider () {\n    if (!frozen) { return; }\n\n    // restore edge padding for inner wrapper\n    // for mordern browsers\n    if (edgePadding && CSSMQ) { innerWrapper.style.margin = ''; }\n\n    // remove class tns-transparent to cloned slides\n    if (cloneCount) {\n      var str = 'tns-transparent';\n      for (var i = cloneCount; i--;) {\n        if (carousel) { removeClass(slideItems[i], str); }\n        removeClass(slideItems[slideCountNew - i - 1], str);\n      }\n    }\n\n    // update tools\n    enableUI();\n\n    frozen = false;\n  }\n\n  function disableSlider () {\n    if (disabled) { return; }\n\n    sheet.disabled = true;\n    container.className = container.className.replace(newContainerClasses.substring(1), '');\n    removeAttrs(container, ['style']);\n    if (loop) {\n      for (var j = cloneCount; j--;) {\n        if (carousel) { hideElement(slideItems[j]); }\n        hideElement(slideItems[slideCountNew - j - 1]);\n      }\n    }\n\n    // vertical slider\n    if (!horizontal || !carousel) { removeAttrs(innerWrapper, ['style']); }\n\n    // gallery\n    if (!carousel) {\n      for (var i = index, l = index + slideCount; i < l; i++) {\n        var item = slideItems[i];\n        removeAttrs(item, ['style']);\n        removeClass(item, animateIn);\n        removeClass(item, animateNormal);\n      }\n    }\n\n    // update tools\n    disableUI();\n\n    disabled = true;\n  }\n\n  function enableSlider () {\n    if (!disabled) { return; }\n\n    sheet.disabled = false;\n    container.className += newContainerClasses;\n    doContainerTransformSilent();\n\n    if (loop) {\n      for (var j = cloneCount; j--;) {\n        if (carousel) { showElement(slideItems[j]); }\n        showElement(slideItems[slideCountNew - j - 1]);\n      }\n    }\n\n    // gallery\n    if (!carousel) {\n      for (var i = index, l = index + slideCount; i < l; i++) {\n        var item = slideItems[i],\n            classN = i < index + items ? animateIn : animateNormal;\n        item.style.left = (i - index) * 100 / items + '%';\n        addClass(item, classN);\n      }\n    }\n\n    // update tools\n    enableUI();\n\n    disabled = false;\n  }\n\n  function updateLiveRegion () {\n    var str = getLiveRegionStr();\n    if (liveregionCurrent.innerHTML !== str) { liveregionCurrent.innerHTML = str; }\n  }\n\n  function getLiveRegionStr () {\n    var arr = getVisibleSlideRange(),\n        start = arr[0] + 1,\n        end = arr[1] + 1;\n    return start === end ? start + '' : start + ' to ' + end;\n  }\n\n  function getVisibleSlideRange (val) {\n    if (val == null) { val = getContainerTransformValue(); }\n    var start = index, end, rangestart, rangeend;\n\n    // get range start, range end for autoWidth and fixedWidth\n    if (center || edgePadding) {\n      if (autoWidth || fixedWidth) {\n        rangestart = - (parseFloat(val) + edgePadding);\n        rangeend = rangestart + viewport + edgePadding * 2;\n      }\n    } else {\n      if (autoWidth) {\n        rangestart = slidePositions[index];\n        rangeend = rangestart + viewport;\n      }\n    }\n\n    // get start, end\n    // - check auto width\n    if (autoWidth) {\n      slidePositions.forEach(function(point, i) {\n        if (i < slideCountNew) {\n          if ((center || edgePadding) && point <= rangestart + 0.5) { start = i; }\n          if (rangeend - point >= 0.5) { end = i; }\n        }\n      });\n\n    // - check percentage width, fixed width\n    } else {\n\n      if (fixedWidth) {\n        var cell = fixedWidth + gutter;\n        if (center || edgePadding) {\n          start = Math.floor(rangestart/cell);\n          end = Math.ceil(rangeend/cell - 1);\n        } else {\n          end = start + Math.ceil(viewport/cell) - 1;\n        }\n\n      } else {\n        if (center || edgePadding) {\n          var a = items - 1;\n          if (center) {\n            start -= a / 2;\n            end = index + a / 2;\n          } else {\n            end = index + a;\n          }\n\n          if (edgePadding) {\n            var b = edgePadding * items / viewport;\n            start -= b;\n            end += b;\n          }\n\n          start = Math.floor(start);\n          end = Math.ceil(end);\n        } else {\n          end = start + items - 1;\n        }\n      }\n\n      start = Math.max(start, 0);\n      end = Math.min(end, slideCountNew - 1);\n    }\n\n    return [start, end];\n  }\n\n  function doLazyLoad () {\n    if (lazyload && !disable) {\n      var arg = getVisibleSlideRange();\n      arg.push(lazyloadSelector);\n\n      getImageArray.apply(null, arg).forEach(function (img) {\n        if (!hasClass(img, imgCompleteClass)) {\n          // stop propagation transitionend event to container\n          var eve = {};\n          eve[TRANSITIONEND] = function (e) { e.stopPropagation(); };\n          addEvents(img, eve);\n\n          addEvents(img, imgEvents);\n\n          // update src\n          img.src = getAttr(img, 'data-src');\n\n          // update srcset\n          var srcset = getAttr(img, 'data-srcset');\n          if (srcset) { img.srcset = srcset; }\n\n          addClass(img, 'loading');\n        }\n      });\n    }\n  }\n\n  function onImgLoaded (e) {\n    imgLoaded(getTarget(e));\n  }\n\n  function onImgFailed (e) {\n    imgFailed(getTarget(e));\n  }\n\n  function imgLoaded (img) {\n    addClass(img, 'loaded');\n    imgCompleted(img);\n  }\n\n  function imgFailed (img) {\n    addClass(img, 'failed');\n    imgCompleted(img);\n  }\n\n  function imgCompleted (img) {\n    addClass(img, imgCompleteClass);\n    removeClass(img, 'loading');\n    removeEvents(img, imgEvents);\n  }\n\n  function getImageArray (start, end, imgSelector) {\n    var imgs = [];\n    if (!imgSelector) { imgSelector = 'img'; }\n\n    while (start <= end) {\n      forEach(slideItems[start].querySelectorAll(imgSelector), function (img) { imgs.push(img); });\n      start++;\n    }\n\n    return imgs;\n  }\n\n  // check if all visible images are loaded\n  // and update container height if it's done\n  function doAutoHeight () {\n    var imgs = getImageArray.apply(null, getVisibleSlideRange());\n    raf(function(){ imgsLoadedCheck(imgs, updateInnerWrapperHeight); });\n  }\n\n  function imgsLoadedCheck (imgs, cb) {\n    // execute callback function if all images are complete\n    if (imgsComplete) { return cb(); }\n\n    // check image classes\n    imgs.forEach(function (img, index) {\n      if (!lazyload && img.complete) { imgCompleted(img); } // Check image.complete\n      if (hasClass(img, imgCompleteClass)) { imgs.splice(index, 1); }\n    });\n\n    // execute callback function if selected images are all complete\n    if (!imgs.length) { return cb(); }\n\n    // otherwise execute this functiona again\n    raf(function(){ imgsLoadedCheck(imgs, cb); });\n  }\n\n  function additionalUpdates () {\n    doLazyLoad();\n    updateSlideStatus();\n    updateLiveRegion();\n    updateControlsStatus();\n    updateNavStatus();\n  }\n\n\n  function update_carousel_transition_duration () {\n    if (carousel && autoHeight) {\n      middleWrapper.style[TRANSITIONDURATION] = speed / 1000 + 's';\n    }\n  }\n\n  function getMaxSlideHeight (slideStart, slideRange) {\n    var heights = [];\n    for (var i = slideStart, l = Math.min(slideStart + slideRange, slideCountNew); i < l; i++) {\n      heights.push(slideItems[i].offsetHeight);\n    }\n\n    return Math.max.apply(null, heights);\n  }\n\n  // update inner wrapper height\n  // 1. get the max-height of the visible slides\n  // 2. set transitionDuration to speed\n  // 3. update inner wrapper height to max-height\n  // 4. set transitionDuration to 0s after transition done\n  function updateInnerWrapperHeight () {\n    var maxHeight = autoHeight ? getMaxSlideHeight(index, items) : getMaxSlideHeight(cloneCount, slideCount),\n        wp = middleWrapper ? middleWrapper : innerWrapper;\n\n    if (wp.style.height !== maxHeight) { wp.style.height = maxHeight + 'px'; }\n  }\n\n  // get the distance from the top edge of the first slide to each slide\n  // (init) => slidePositions\n  function setSlidePositions () {\n    slidePositions = [0];\n    var attr = horizontal ? 'left' : 'top',\n        attr2 = horizontal ? 'right' : 'bottom',\n        base = slideItems[0].getBoundingClientRect()[attr];\n\n    forEach(slideItems, function(item, i) {\n      // skip the first slide\n      if (i) { slidePositions.push(item.getBoundingClientRect()[attr] - base); }\n      // add the end edge\n      if (i === slideCountNew - 1) { slidePositions.push(item.getBoundingClientRect()[attr2] - base); }\n    });\n  }\n\n  // update slide\n  function updateSlideStatus () {\n    var range = getVisibleSlideRange(),\n        start = range[0],\n        end = range[1];\n\n    forEach(slideItems, function(item, i) {\n      // show slides\n      if (i >= start && i <= end) {\n        if (hasAttr(item, 'aria-hidden')) {\n          removeAttrs(item, ['aria-hidden', 'tabindex']);\n          addClass(item, slideActiveClass);\n        }\n      // hide slides\n      } else {\n        if (!hasAttr(item, 'aria-hidden')) {\n          setAttrs(item, {\n            'aria-hidden': 'true',\n            'tabindex': '-1'\n          });\n          removeClass(item, slideActiveClass);\n        }\n      }\n    });\n  }\n\n  // gallery: update slide position\n  function updateGallerySlidePositions () {\n    var l = index + Math.min(slideCount, items);\n    for (var i = slideCountNew; i--;) {\n      var item = slideItems[i];\n\n      if (i >= index && i < l) {\n        // add transitions to visible slides when adjusting their positions\n        addClass(item, 'tns-moving');\n\n        item.style.left = (i - index) * 100 / items + '%';\n        addClass(item, animateIn);\n        removeClass(item, animateNormal);\n      } else if (item.style.left) {\n        item.style.left = '';\n        addClass(item, animateNormal);\n        removeClass(item, animateIn);\n      }\n\n      // remove outlet animation\n      removeClass(item, animateOut);\n    }\n\n    // removing '.tns-moving'\n    setTimeout(function() {\n      forEach(slideItems, function(el) {\n        removeClass(el, 'tns-moving');\n      });\n    }, 300);\n  }\n\n  // set tabindex on Nav\n  function updateNavStatus () {\n    // get current nav\n    if (nav) {\n      navCurrentIndex = navClicked >= 0 ? navClicked : getCurrentNavIndex();\n      navClicked = -1;\n\n      if (navCurrentIndex !== navCurrentIndexCached) {\n        var navPrev = navItems[navCurrentIndexCached],\n            navCurrent = navItems[navCurrentIndex];\n\n        setAttrs(navPrev, {\n          'tabindex': '-1',\n          'aria-label': navStr + (navCurrentIndexCached + 1)\n        });\n        removeClass(navPrev, navActiveClass);\n\n        setAttrs(navCurrent, {'aria-label': navStr + (navCurrentIndex + 1) + navStrCurrent});\n        removeAttrs(navCurrent, 'tabindex');\n        addClass(navCurrent, navActiveClass);\n\n        navCurrentIndexCached = navCurrentIndex;\n      }\n    }\n  }\n\n  function getLowerCaseNodeName (el) {\n    return el.nodeName.toLowerCase();\n  }\n\n  function isButton (el) {\n    return getLowerCaseNodeName(el) === 'button';\n  }\n\n  function isAriaDisabled (el) {\n    return el.getAttribute('aria-disabled') === 'true';\n  }\n\n  function disEnableElement (isButton, el, val) {\n    if (isButton) {\n      el.disabled = val;\n    } else {\n      el.setAttribute('aria-disabled', val.toString());\n    }\n  }\n\n  // set 'disabled' to true on controls when reach the edges\n  function updateControlsStatus () {\n    if (!controls || rewind || loop) { return; }\n\n    var prevDisabled = (prevIsButton) ? prevButton.disabled : isAriaDisabled(prevButton),\n        nextDisabled = (nextIsButton) ? nextButton.disabled : isAriaDisabled(nextButton),\n        disablePrev = (index <= indexMin) ? true : false,\n        disableNext = (!rewind && index >= indexMax) ? true : false;\n\n    if (disablePrev && !prevDisabled) {\n      disEnableElement(prevIsButton, prevButton, true);\n    }\n    if (!disablePrev && prevDisabled) {\n      disEnableElement(prevIsButton, prevButton, false);\n    }\n    if (disableNext && !nextDisabled) {\n      disEnableElement(nextIsButton, nextButton, true);\n    }\n    if (!disableNext && nextDisabled) {\n      disEnableElement(nextIsButton, nextButton, false);\n    }\n  }\n\n  // set duration\n  function resetDuration (el, str) {\n    if (TRANSITIONDURATION) { el.style[TRANSITIONDURATION] = str; }\n  }\n\n  function getSliderWidth () {\n    return fixedWidth ? (fixedWidth + gutter) * slideCountNew : slidePositions[slideCountNew];\n  }\n\n  function getCenterGap (num) {\n    if (num == null) { num = index; }\n\n    var gap = edgePadding ? gutter : 0;\n    return autoWidth ? ((viewport - gap) - (slidePositions[num + 1] - slidePositions[num] - gutter))/2 :\n      fixedWidth ? (viewport - fixedWidth) / 2 :\n        (items - 1) / 2;\n  }\n\n  function getRightBoundary () {\n    var gap = edgePadding ? gutter : 0,\n        result = (viewport + gap) - getSliderWidth();\n\n    if (center && !loop) {\n      result = fixedWidth ? - (fixedWidth + gutter) * (slideCountNew - 1) - getCenterGap() :\n        getCenterGap(slideCountNew - 1) - slidePositions[slideCountNew - 1];\n    }\n    if (result > 0) { result = 0; }\n\n    return result;\n  }\n\n  function getContainerTransformValue (num) {\n    if (num == null) { num = index; }\n\n    var val;\n    if (horizontal && !autoWidth) {\n      if (fixedWidth) {\n        val = - (fixedWidth + gutter) * num;\n        if (center) { val += getCenterGap(); }\n      } else {\n        var denominator = TRANSFORM ? slideCountNew : items;\n        if (center) { num -= getCenterGap(); }\n        val = - num * 100 / denominator;\n      }\n    } else {\n      val = - slidePositions[num];\n      if (center && autoWidth) {\n        val += getCenterGap();\n      }\n    }\n\n    if (hasRightDeadZone) { val = Math.max(val, rightBoundary); }\n\n    val += (horizontal && !autoWidth && !fixedWidth) ? '%' : 'px';\n\n    return val;\n  }\n\n  function doContainerTransformSilent (val) {\n    resetDuration(container, '0s');\n    doContainerTransform(val);\n  }\n\n  function doContainerTransform (val) {\n    if (val == null) { val = getContainerTransformValue(); }\n    container.style[transformAttr] = transformPrefix + val + transformPostfix;\n  }\n\n  function animateSlide (number, classOut, classIn, isOut) {\n    var l = number + items;\n    if (!loop) { l = Math.min(l, slideCountNew); }\n\n    for (var i = number; i < l; i++) {\n        var item = slideItems[i];\n\n      // set item positions\n      if (!isOut) { item.style.left = (i - index) * 100 / items + '%'; }\n\n      if (animateDelay && TRANSITIONDELAY) {\n        item.style[TRANSITIONDELAY] = item.style[ANIMATIONDELAY] = animateDelay * (i - number) / 1000 + 's';\n      }\n      removeClass(item, classOut);\n      addClass(item, classIn);\n\n      if (isOut) { slideItemsOut.push(item); }\n    }\n  }\n\n  // make transfer after click/drag:\n  // 1. change 'transform' property for mordern browsers\n  // 2. change 'left' property for legacy browsers\n  var transformCore = (function () {\n    return carousel ?\n      function () {\n        resetDuration(container, '');\n        if (TRANSITIONDURATION || !speed) {\n          // for morden browsers with non-zero duration or\n          // zero duration for all browsers\n          doContainerTransform();\n          // run fallback function manually\n          // when duration is 0 / container is hidden\n          if (!speed || !isVisible(container)) { onTransitionEnd(); }\n\n        } else {\n          // for old browser with non-zero duration\n          jsTransform(container, transformAttr, transformPrefix, transformPostfix, getContainerTransformValue(), speed, onTransitionEnd);\n        }\n\n        if (!horizontal) { updateContentWrapperHeight(); }\n      } :\n      function () {\n        slideItemsOut = [];\n\n        var eve = {};\n        eve[TRANSITIONEND] = eve[ANIMATIONEND] = onTransitionEnd;\n        removeEvents(slideItems[indexCached], eve);\n        addEvents(slideItems[index], eve);\n\n        animateSlide(indexCached, animateIn, animateOut, true);\n        animateSlide(index, animateNormal, animateIn);\n\n        // run fallback function manually\n        // when transition or animation not supported / duration is 0\n        if (!TRANSITIONEND || !ANIMATIONEND || !speed || !isVisible(container)) { onTransitionEnd(); }\n      };\n  })();\n\n  function render (e, sliderMoved) {\n    if (updateIndexBeforeTransform) { updateIndex(); }\n\n    // render when slider was moved (touch or drag) even though index may not change\n    if (index !== indexCached || sliderMoved) {\n      // events\n      events.emit('indexChanged', info());\n      events.emit('transitionStart', info());\n      if (autoHeight) { doAutoHeight(); }\n\n      // pause autoplay when click or keydown from user\n      if (animating && e && ['click', 'keydown'].indexOf(e.type) >= 0) { stopAutoplay(); }\n\n      running = true;\n      transformCore();\n    }\n  }\n\n  /*\n   * Transfer prefixed properties to the same format\n   * CSS: -Webkit-Transform => webkittransform\n   * JS: WebkitTransform => webkittransform\n   * @param {string} str - property\n   *\n   */\n  function strTrans (str) {\n    return str.toLowerCase().replace(/-/g, '');\n  }\n\n  // AFTER TRANSFORM\n  // Things need to be done after a transfer:\n  // 1. check index\n  // 2. add classes to visible slide\n  // 3. disable controls buttons when reach the first/last slide in non-loop slider\n  // 4. update nav status\n  // 5. lazyload images\n  // 6. update container height\n  function onTransitionEnd (event) {\n    // check running on gallery mode\n    // make sure trantionend/animationend events run only once\n    if (carousel || running) {\n      events.emit('transitionEnd', info(event));\n\n      if (!carousel && slideItemsOut.length > 0) {\n        for (var i = 0; i < slideItemsOut.length; i++) {\n          var item = slideItemsOut[i];\n          // set item positions\n          item.style.left = '';\n\n          if (ANIMATIONDELAY && TRANSITIONDELAY) {\n            item.style[ANIMATIONDELAY] = '';\n            item.style[TRANSITIONDELAY] = '';\n          }\n          removeClass(item, animateOut);\n          addClass(item, animateNormal);\n        }\n      }\n\n      /* update slides, nav, controls after checking ...\n       * => legacy browsers who don't support 'event'\n       *    have to check event first, otherwise event.target will cause an error\n       * => or 'gallery' mode:\n       *   + event target is slide item\n       * => or 'carousel' mode:\n       *   + event target is container,\n       *   + event.property is the same with transform attribute\n       */\n      if (!event ||\n          !carousel && event.target.parentNode === container ||\n          event.target === container && strTrans(event.propertyName) === strTrans(transformAttr)) {\n\n        if (!updateIndexBeforeTransform) {\n          var indexTem = index;\n          updateIndex();\n          if (index !== indexTem) {\n            events.emit('indexChanged', info());\n\n            doContainerTransformSilent();\n          }\n        }\n\n        if (nested === 'inner') { events.emit('innerLoaded', info()); }\n        running = false;\n        indexCached = index;\n      }\n    }\n\n  }\n\n  // # ACTIONS\n  function goTo (targetIndex, e) {\n    if (freeze) { return; }\n\n    // prev slideBy\n    if (targetIndex === 'prev') {\n      onControlsClick(e, -1);\n\n    // next slideBy\n    } else if (targetIndex === 'next') {\n      onControlsClick(e, 1);\n\n    // go to exact slide\n    } else {\n      if (running) {\n        if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\n      }\n\n      var absIndex = getAbsIndex(),\n          indexGap = 0;\n\n      if (targetIndex === 'first') {\n        indexGap = - absIndex;\n      } else if (targetIndex === 'last') {\n        indexGap = carousel ? slideCount - items - absIndex : slideCount - 1 - absIndex;\n      } else {\n        if (typeof targetIndex !== 'number') { targetIndex = parseInt(targetIndex); }\n\n        if (!isNaN(targetIndex)) {\n          // from directly called goTo function\n          if (!e) { targetIndex = Math.max(0, Math.min(slideCount - 1, targetIndex)); }\n\n          indexGap = targetIndex - absIndex;\n        }\n      }\n\n      // gallery: make sure new page won't overlap with current page\n      if (!carousel && indexGap && Math.abs(indexGap) < items) {\n        var factor = indexGap > 0 ? 1 : -1;\n        indexGap += (index + indexGap - slideCount) >= indexMin ? slideCount * factor : slideCount * 2 * factor * -1;\n      }\n\n      index += indexGap;\n\n      // make sure index is in range\n      if (carousel && loop) {\n        if (index < indexMin) { index += slideCount; }\n        if (index > indexMax) { index -= slideCount; }\n      }\n\n      // if index is changed, start rendering\n      if (getAbsIndex(index) !== getAbsIndex(indexCached)) {\n        render(e);\n      }\n\n    }\n  }\n\n  // on controls click\n  function onControlsClick (e, dir) {\n    if (running) {\n      if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\n    }\n    var passEventObject;\n\n    if (!dir) {\n      e = getEvent(e);\n      var target = getTarget(e);\n\n      while (target !== controlsContainer && [prevButton, nextButton].indexOf(target) < 0) { target = target.parentNode; }\n\n      var targetIn = [prevButton, nextButton].indexOf(target);\n      if (targetIn >= 0) {\n        passEventObject = true;\n        dir = targetIn === 0 ? -1 : 1;\n      }\n    }\n\n    if (rewind) {\n      if (index === indexMin && dir === -1) {\n        goTo('last', e);\n        return;\n      } else if (index === indexMax && dir === 1) {\n        goTo('first', e);\n        return;\n      }\n    }\n\n    if (dir) {\n      index += slideBy * dir;\n      if (autoWidth) { index = Math.floor(index); }\n      // pass e when click control buttons or keydown\n      render((passEventObject || (e && e.type === 'keydown')) ? e : null);\n    }\n  }\n\n  // on nav click\n  function onNavClick (e) {\n    if (running) {\n      if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\n    }\n\n    e = getEvent(e);\n    var target = getTarget(e), navIndex;\n\n    // find the clicked nav item\n    while (target !== navContainer && !hasAttr(target, 'data-nav')) { target = target.parentNode; }\n    if (hasAttr(target, 'data-nav')) {\n      var navIndex = navClicked = Number(getAttr(target, 'data-nav')),\n          targetIndexBase = fixedWidth || autoWidth ? navIndex * slideCount / pages : navIndex * items,\n          targetIndex = navAsThumbnails ? navIndex : Math.min(Math.ceil(targetIndexBase), slideCount - 1);\n      goTo(targetIndex, e);\n\n      if (navCurrentIndex === navIndex) {\n        if (animating) { stopAutoplay(); }\n        navClicked = -1; // reset navClicked\n      }\n    }\n  }\n\n  // autoplay functions\n  function setAutoplayTimer () {\n    autoplayTimer = setInterval(function () {\n      onControlsClick(null, autoplayDirection);\n    }, autoplayTimeout);\n\n    animating = true;\n  }\n\n  function stopAutoplayTimer () {\n    clearInterval(autoplayTimer);\n    animating = false;\n  }\n\n  function updateAutoplayButton (action, txt) {\n    setAttrs(autoplayButton, {'data-action': action});\n    autoplayButton.innerHTML = autoplayHtmlStrings[0] + action + autoplayHtmlStrings[1] + txt;\n  }\n\n  function startAutoplay () {\n    setAutoplayTimer();\n    if (autoplayButton) { updateAutoplayButton('stop', autoplayText[1]); }\n  }\n\n  function stopAutoplay () {\n    stopAutoplayTimer();\n    if (autoplayButton) { updateAutoplayButton('start', autoplayText[0]); }\n  }\n\n  // programaitcally play/pause the slider\n  function play () {\n    if (autoplay && !animating) {\n      startAutoplay();\n      autoplayUserPaused = false;\n    }\n  }\n  function pause () {\n    if (animating) {\n      stopAutoplay();\n      autoplayUserPaused = true;\n    }\n  }\n\n  function toggleAutoplay () {\n    if (animating) {\n      stopAutoplay();\n      autoplayUserPaused = true;\n    } else {\n      startAutoplay();\n      autoplayUserPaused = false;\n    }\n  }\n\n  function onVisibilityChange () {\n    if (doc.hidden) {\n      if (animating) {\n        stopAutoplayTimer();\n        autoplayVisibilityPaused = true;\n      }\n    } else if (autoplayVisibilityPaused) {\n      setAutoplayTimer();\n      autoplayVisibilityPaused = false;\n    }\n  }\n\n  function mouseoverPause () {\n    if (animating) {\n      stopAutoplayTimer();\n      autoplayHoverPaused = true;\n    }\n  }\n\n  function mouseoutRestart () {\n    if (autoplayHoverPaused) {\n      setAutoplayTimer();\n      autoplayHoverPaused = false;\n    }\n  }\n\n  // keydown events on document\n  function onDocumentKeydown (e) {\n    e = getEvent(e);\n    var keyIndex = [KEYS.LEFT, KEYS.RIGHT].indexOf(e.keyCode);\n\n    if (keyIndex >= 0) {\n      onControlsClick(e, keyIndex === 0 ? -1 : 1);\n    }\n  }\n\n  // on key control\n  function onControlsKeydown (e) {\n    e = getEvent(e);\n    var keyIndex = [KEYS.LEFT, KEYS.RIGHT].indexOf(e.keyCode);\n\n    if (keyIndex >= 0) {\n      if (keyIndex === 0) {\n        if (!prevButton.disabled) { onControlsClick(e, -1); }\n      } else if (!nextButton.disabled) {\n        onControlsClick(e, 1);\n      }\n    }\n  }\n\n  // set focus\n  function setFocus (el) {\n    el.focus();\n  }\n\n  // on key nav\n  function onNavKeydown (e) {\n    e = getEvent(e);\n    var curElement = doc.activeElement;\n    if (!hasAttr(curElement, 'data-nav')) { return; }\n\n    // var code = e.keyCode,\n    var keyIndex = [KEYS.LEFT, KEYS.RIGHT, KEYS.ENTER, KEYS.SPACE].indexOf(e.keyCode),\n        navIndex = Number(getAttr(curElement, 'data-nav'));\n\n    if (keyIndex >= 0) {\n      if (keyIndex === 0) {\n        if (navIndex > 0) { setFocus(navItems[navIndex - 1]); }\n      } else if (keyIndex === 1) {\n        if (navIndex < pages - 1) { setFocus(navItems[navIndex + 1]); }\n      } else {\n        navClicked = navIndex;\n        goTo(navIndex, e);\n      }\n    }\n  }\n\n  function getEvent (e) {\n    e = e || win.event;\n    return isTouchEvent(e) ? e.changedTouches[0] : e;\n  }\n  function getTarget (e) {\n    return e.target || win.event.srcElement;\n  }\n\n  function isTouchEvent (e) {\n    return e.type.indexOf('touch') >= 0;\n  }\n\n  function preventDefaultBehavior (e) {\n    e.preventDefault ? e.preventDefault() : e.returnValue = false;\n  }\n\n  function getMoveDirectionExpected () {\n    return getTouchDirection(toDegree(lastPosition.y - initPosition.y, lastPosition.x - initPosition.x), swipeAngle) === options.axis;\n  }\n\n  function onPanStart (e) {\n    if (running) {\n      if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\n    }\n\n    if (autoplay && animating) { stopAutoplayTimer(); }\n\n    panStart = true;\n    if (rafIndex) {\n      caf(rafIndex);\n      rafIndex = null;\n    }\n\n    var $ = getEvent(e);\n    events.emit(isTouchEvent(e) ? 'touchStart' : 'dragStart', info(e));\n\n    if (!isTouchEvent(e) && ['img', 'a'].indexOf(getLowerCaseNodeName(getTarget(e))) >= 0) {\n      preventDefaultBehavior(e);\n    }\n\n    lastPosition.x = initPosition.x = $.clientX;\n    lastPosition.y = initPosition.y = $.clientY;\n    if (carousel) {\n      translateInit = parseFloat(container.style[transformAttr].replace(transformPrefix, ''));\n      resetDuration(container, '0s');\n    }\n  }\n\n  function onPanMove (e) {\n    if (panStart) {\n      var $ = getEvent(e);\n      lastPosition.x = $.clientX;\n      lastPosition.y = $.clientY;\n\n      if (carousel) {\n        if (!rafIndex) { rafIndex = raf(function(){ panUpdate(e); }); }\n      } else {\n        if (moveDirectionExpected === '?') { moveDirectionExpected = getMoveDirectionExpected(); }\n        if (moveDirectionExpected) { preventScroll = true; }\n      }\n\n      if ((typeof e.cancelable !== 'boolean' || e.cancelable) && preventScroll) {\n        e.preventDefault();\n      }\n    }\n  }\n\n  function panUpdate (e) {\n    if (!moveDirectionExpected) {\n      panStart = false;\n      return;\n    }\n    caf(rafIndex);\n    if (panStart) { rafIndex = raf(function(){ panUpdate(e); }); }\n\n    if (moveDirectionExpected === '?') { moveDirectionExpected = getMoveDirectionExpected(); }\n    if (moveDirectionExpected) {\n      if (!preventScroll && isTouchEvent(e)) { preventScroll = true; }\n\n      try {\n        if (e.type) { events.emit(isTouchEvent(e) ? 'touchMove' : 'dragMove', info(e)); }\n      } catch(err) {}\n\n      var x = translateInit,\n          dist = getDist(lastPosition, initPosition);\n      if (!horizontal || fixedWidth || autoWidth) {\n        x += dist;\n        x += 'px';\n      } else {\n        var percentageX = TRANSFORM ? dist * items * 100 / ((viewport + gutter) * slideCountNew): dist * 100 / (viewport + gutter);\n        x += percentageX;\n        x += '%';\n      }\n\n      container.style[transformAttr] = transformPrefix + x + transformPostfix;\n    }\n  }\n\n  function onPanEnd (e) {\n    if (panStart) {\n      if (rafIndex) {\n        caf(rafIndex);\n        rafIndex = null;\n      }\n      if (carousel) { resetDuration(container, ''); }\n      panStart = false;\n\n      var $ = getEvent(e);\n      lastPosition.x = $.clientX;\n      lastPosition.y = $.clientY;\n      var dist = getDist(lastPosition, initPosition);\n\n      if (Math.abs(dist)) {\n        // drag vs click\n        if (!isTouchEvent(e)) {\n          // prevent \"click\"\n          var target = getTarget(e);\n          addEvents(target, {'click': function preventClick (e) {\n            preventDefaultBehavior(e);\n            removeEvents(target, {'click': preventClick});\n          }});\n        }\n\n        if (carousel) {\n          rafIndex = raf(function() {\n            if (horizontal && !autoWidth) {\n              var indexMoved = - dist * items / (viewport + gutter);\n              indexMoved = dist > 0 ? Math.floor(indexMoved) : Math.ceil(indexMoved);\n              index += indexMoved;\n            } else {\n              var moved = - (translateInit + dist);\n              if (moved <= 0) {\n                index = indexMin;\n              } else if (moved >= slidePositions[slideCountNew - 1]) {\n                index = indexMax;\n              } else {\n                var i = 0;\n                while (i < slideCountNew && moved >= slidePositions[i]) {\n                  index = i;\n                  if (moved > slidePositions[i] && dist < 0) { index += 1; }\n                  i++;\n                }\n              }\n            }\n\n            render(e, dist);\n            events.emit(isTouchEvent(e) ? 'touchEnd' : 'dragEnd', info(e));\n          });\n        } else {\n          if (moveDirectionExpected) {\n            onControlsClick(e, dist > 0 ? -1 : 1);\n          }\n        }\n      }\n    }\n\n    // reset\n    if (options.preventScrollOnTouch === 'auto') { preventScroll = false; }\n    if (swipeAngle) { moveDirectionExpected = '?'; }\n    if (autoplay && !animating) { setAutoplayTimer(); }\n  }\n\n  // === RESIZE FUNCTIONS === //\n  // (slidePositions, index, items) => vertical_conentWrapper.height\n  function updateContentWrapperHeight () {\n    var wp = middleWrapper ? middleWrapper : innerWrapper;\n    wp.style.height = slidePositions[index + items] - slidePositions[index] + 'px';\n  }\n\n  function getPages () {\n    var rough = fixedWidth ? (fixedWidth + gutter) * slideCount / viewport : slideCount / items;\n    return Math.min(Math.ceil(rough), slideCount);\n  }\n\n  /*\n   * 1. update visible nav items list\n   * 2. add \"hidden\" attributes to previous visible nav items\n   * 3. remove \"hidden\" attrubutes to new visible nav items\n   */\n  function updateNavVisibility () {\n    if (!nav || navAsThumbnails) { return; }\n\n    if (pages !== pagesCached) {\n      var min = pagesCached,\n          max = pages,\n          fn = showElement;\n\n      if (pagesCached > pages) {\n        min = pages;\n        max = pagesCached;\n        fn = hideElement;\n      }\n\n      while (min < max) {\n        fn(navItems[min]);\n        min++;\n      }\n\n      // cache pages\n      pagesCached = pages;\n    }\n  }\n\n  function info (e) {\n    return {\n      container: container,\n      slideItems: slideItems,\n      navContainer: navContainer,\n      navItems: navItems,\n      controlsContainer: controlsContainer,\n      hasControls: hasControls,\n      prevButton: prevButton,\n      nextButton: nextButton,\n      items: items,\n      slideBy: slideBy,\n      cloneCount: cloneCount,\n      slideCount: slideCount,\n      slideCountNew: slideCountNew,\n      index: index,\n      indexCached: indexCached,\n      displayIndex: getCurrentSlide(),\n      navCurrentIndex: navCurrentIndex,\n      navCurrentIndexCached: navCurrentIndexCached,\n      pages: pages,\n      pagesCached: pagesCached,\n      sheet: sheet,\n      isOn: isOn,\n      event: e || {},\n    };\n  }\n\n  return {\n    version: '2.9.4',\n    getInfo: info,\n    events: events,\n    goTo: goTo,\n    play: play,\n    pause: pause,\n    isOn: isOn,\n    updateSliderHeight: updateInnerWrapperHeight,\n    refresh: initSliderTransform,\n    destroy: destroy,\n    rebuild: function() {\n      return tns(extend(options, optionsElements));\n    }\n  };\n};\n","// get css-calc \n// @return - false | calc | -webkit-calc | -moz-calc\n// @usage - var calc = getCalc(); \nimport { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function calc() {\n  var doc = document, \n      body = getBody(),\n      docOverflow = setFakeBody(body),\n      div = doc.createElement('div'), \n      result = false;\n\n  body.appendChild(div);\n  try {\n    var str = '(10px * 10)',\n        vals = ['calc' + str, '-moz-calc' + str, '-webkit-calc' + str],\n        val;\n    for (var i = 0; i < 3; i++) {\n      val = vals[i];\n      div.style.width = val;\n      if (div.offsetWidth === 100) { \n        result = val.replace(str, ''); \n        break;\n      }\n    }\n  } catch (e) {}\n  \n  body.fake ? resetFakeBody(body, docOverflow) : div.remove();\n\n  return result;\n}","// get subpixel support value\n// @return - boolean\nimport { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function percentageLayout() {\n  // check subpixel layout supporting\n  var doc = document,\n      body = getBody(),\n      docOverflow = setFakeBody(body),\n      wrapper = doc.createElement('div'),\n      outer = doc.createElement('div'),\n      str = '',\n      count = 70,\n      perPage = 3,\n      supported = false;\n\n  wrapper.className = \"tns-t-subp2\";\n  outer.className = \"tns-t-ct\";\n\n  for (var i = 0; i < count; i++) {\n    str += '<div></div>';\n  }\n\n  outer.innerHTML = str;\n  wrapper.appendChild(outer);\n  body.appendChild(wrapper);\n\n  supported = Math.abs(wrapper.getBoundingClientRect().left - outer.children[count - perPage].getBoundingClientRect().left) < 2;\n\n  body.fake ? resetFakeBody(body, docOverflow) : wrapper.remove();\n\n  return supported;\n}","import { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function mediaquerySupport () {\n  if (window.matchMedia || window.msMatchMedia) {\n    return true;\n  }\n  \n  var doc = document,\n      body = getBody(),\n      docOverflow = setFakeBody(body),\n      div = doc.createElement('div'),\n      style = doc.createElement('style'),\n      rule = '@media all and (min-width:1px){.tns-mq-test{position:absolute}}',\n      position;\n\n  style.type = 'text/css';\n  div.className = 'tns-mq-test';\n\n  body.appendChild(style);\n  body.appendChild(div);\n\n  if (style.styleSheet) {\n    style.styleSheet.cssText = rule;\n  } else {\n    style.appendChild(doc.createTextNode(rule));\n  }\n\n  position = window.getComputedStyle ? window.getComputedStyle(div).position : div.currentStyle['position'];\n\n  body.fake ? resetFakeBody(body, docOverflow) : div.remove();\n\n  return position === \"absolute\";\n}\n","import { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function has3DTransforms(tf){\n  if (!tf) { return false; }\n  if (!window.getComputedStyle) { return false; }\n  \n  var doc = document,\n      body = getBody(),\n      docOverflow = setFakeBody(body),\n      el = doc.createElement('p'),\n      has3d,\n      cssTF = tf.length > 9 ? '-' + tf.slice(0, -9).toLowerCase() + '-' : '';\n\n  cssTF += 'transform';\n\n  // Add it to the body to get the computed style\n  body.insertBefore(el, null);\n\n  el.style[tf] = 'translate3d(1px,1px,1px)';\n  has3d = window.getComputedStyle(el).getPropertyValue(cssTF);\n\n  body.fake ? resetFakeBody(body, docOverflow) : el.remove();\n\n  return (has3d !== undefined && has3d.length > 0 && has3d !== \"none\");\n}\n","export function getSlideId() {\n  var id = window.tnsId;\n  window.tnsId = !id ? 1 : id + 1;\n  \n  return 'tns' + window.tnsId;\n}","// create and append style sheet\nexport function createStyleSheet (media, nonce) {\n  // Create the <style> tag\n  var style = document.createElement(\"style\");\n  // style.setAttribute(\"type\", \"text/css\");\n\n  // Add a media (and/or media query) here if you'd like!\n  // style.setAttribute(\"media\", \"screen\")\n  // style.setAttribute(\"media\", \"only screen and (max-width : 1024px)\")\n  if (media) { style.setAttribute(\"media\", media); }\n\n  // Add nonce attribute for Content Security Policy\n  if (nonce) { style.setAttribute(\"nonce\", nonce); }\n\n  // WebKit hack :(\n  // style.appendChild(document.createTextNode(\"\"));\n\n  // Add the <style> element to the page\n  document.querySelector('head').appendChild(style);\n\n  return style.sheet ? style.sheet : style.styleSheet;\n};","export function jsTransform(element, attr, prefix, postfix, to, duration, callback) {\n  var tick = Math.min(duration, 10),\n      unit = (to.indexOf('%') >= 0) ? '%' : 'px',\n      to = to.replace(unit, ''),\n      from = Number(element.style[attr].replace(prefix, '').replace(postfix, '').replace(unit, '')),\n      positionTick = (to - from) / duration * tick,\n      running;\n\n  setTimeout(moveElement, tick);\n  function moveElement() {\n    duration -= tick;\n    from += positionTick;\n    element.style[attr] = prefix + from + unit + postfix;\n    if (duration > 0) { \n      setTimeout(moveElement, tick); \n    } else {\n      callback();\n    }\n  }\n}","// cross browsers addRule method\nimport { raf } from './raf.js';\nexport function removeCSSRule(sheet, index) {\n  // return raf(function() {\n    'deleteRule' in sheet ?\n      sheet.deleteRule(index) :\n      sheet.removeRule(index);\n  // });\n}","export function toDegree (y, x) {\n  return Math.atan2(y, x) * (180 / Math.PI);\n}","export function getTouchDirection(angle, range) {\n  var direction = false,\n      gap = Math.abs(90 - Math.abs(angle));\n      \n  if (gap >= 90 - range) {\n    direction = 'horizontal';\n  } else if (gap <= range) {\n    direction = 'vertical';\n  }\n\n  return direction;\n}","import { tns } from 'tiny-slider/src/tiny-slider'\n\n// /* ---------- CATEGORY: SLIDER ----------- */\ndocument.querySelectorAll('.content6-slider').forEach((slider) => {\n    tns({\n        container: slider,\n        items: 4,\n        slideBy: 2,\n        controls: false,\n        nav: false,\n        autoplay: true,\n        autoplayButtonOutput: false,\n        speed: 1000,\n        loop: true,\n        responsive: {\n            150: {\n                gutter: 0,\n                items: 1,\n            },\n            320: {\n                gutter: 5,\n                items: 2,\n            },\n            768: {\n                items: 6,\n            },\n        },\n    })\n})\n\ndocument.querySelectorAll('.supported-slider').forEach((slider) => {\n    tns({\n        container: slider,\n        items: 6,\n        slideBy: 1,\n        controls: false,\n        nav: false,\n        fixedWidth: 176,\n        autoplay: true,\n        autoplayButtonOutput: false,\n        speed: 1000,\n        viewportMax: 1000,\n        loop: true,\n        responsive: {\n            150: {\n                gutter: 0,\n                items: 1,\n            },\n            320: {\n                gutter: 5,\n                items: 2,\n            },\n            640: {\n                gutter: 10,\n                items: 2,\n            },\n            700: {\n                gutter: 15,\n                items: 4,\n            },\n            900: {\n                items: 6,\n            },\n        },\n    })\n})\n\ndocument.querySelectorAll('.vertical-center-4').forEach((slider) => {\n    tns({\n        container: slider,\n        items: 4,\n        controls: false,\n        nav: false,\n        autoWidth: true,\n        autoplay: true,\n        autoplayButtonOutput: false,\n        speed: 2000,\n        loop: true,\n        responsive: {\n            150: {\n                gutter: 0,\n                items: 1,\n            },\n            320: {\n                gutter: 5,\n                items: 2,\n            },\n            640: {\n                gutter: 5,\n                items: 2,\n            },\n            700: {\n                gutter: 10,\n                items: 3,\n            },\n            900: {\n                gutter: 10,\n                items: 4,\n            },\n        },\n    })\n})\n"],"names":["win","window","raf","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","msRequestAnimationFrame","cb","setTimeout","caf","cancelAnimationFrame","mozCancelAnimationFrame","id","clearTimeout","extend","obj","name","copy","target","arguments","i","length","undefined","checkStorageValue","value","indexOf","JSON","parse","setLocalStorage","storage","key","access","setItem","e","getBody","doc","document","body","createElement","fake","docElement","documentElement","setFakeBody","docOverflow","style","overflow","background","appendChild","resetFakeBody","remove","offsetHeight","addCSSRule","sheet","selector","rules","index","insertRule","addRule","getCssRulesLength","cssRules","forEach","arr","callback","scope","l","call","classListSupport","hasClass","el","str","classList","contains","className","addClass","add","removeClass","replace","hasAttr","attr","hasAttribute","getAttr","getAttribute","isNodeList","item","setAttrs","els","attrs","Array","Object","prototype","toString","setAttribute","removeAttrs","attrLength","j","removeAttribute","arrayFromNodeList","nl","push","hideElement","forceHide","display","showElement","isVisible","getComputedStyle","whichProperty","props","Props","charAt","toUpperCase","substr","prefix","prop","getEndProperty","propIn","propOut","endProp","test","toLowerCase","supportsPassive","opts","defineProperty","get","addEventListener","passiveOption","passive","addEvents","preventScrolling","option","removeEvents","removeEventListener","Events","topics","on","eventName","fn","this","off","splice","emit","data","type","keys","object","hasOwnProperty","Element","parentNode","removeChild","tns","options","container","mode","axis","items","gutter","edgePadding","fixedWidth","autoWidth","viewportMax","slideBy","center","controls","controlsPosition","controlsText","controlsContainer","prevButton","nextButton","nav","navPosition","navContainer","navAsThumbnails","arrowKeys","speed","autoplay","autoplayPosition","autoplayTimeout","autoplayDirection","autoplayText","autoplayHoverPause","autoplayButton","autoplayButtonOutput","autoplayResetOnVisibility","animateIn","animateOut","animateNormal","animateDelay","loop","rewind","autoHeight","responsive","lazyload","lazyloadSelector","touch","mouseDrag","swipeAngle","nested","preventActionWhenRunning","preventScrollOnTouch","freezable","onInit","useLocalStorage","nonce","KEYS","ENTER","SPACE","LEFT","RIGHT","tnsStorage","localStorageAccess","browserInfo","navigator","userAgent","uid","Date","localStorage","getItem","removeItem","CALC","div","result","val","vals","width","offsetWidth","calc","PERCENTAGELAYOUT","supported","wrapper","outer","innerHTML","Math","abs","getBoundingClientRect","left","children","count","percentageLayout","CSSMQ","matchMedia","msMatchMedia","position","rule","styleSheet","cssText","createTextNode","currentStyle","mediaquerySupport","TRANSFORM","HAS3DTRANSFORMS","tf","has3d","cssTF","slice","insertBefore","getPropertyValue","has3DTransforms","TRANSITIONDURATION","TRANSITIONDELAY","ANIMATIONDURATION","ANIMATIONDELAY","TRANSITIONEND","ANIMATIONEND","supportConsoleWarn","console","warn","tnsList","optionsElements","querySelector","nodeName","carousel","responsiveTem","updateOptions","middleWrapper","breakpointZone","horizontal","outerWrapper","innerWrapper","containerParent","containerHTML","outerHTML","slideItems","slideCount","windowWidth","getWindowWidth","isOn","setBreakpointZone","slidePositions","imgsComplete","liveregionCurrent","itemsMax","media","getOption","viewport","getViewportWidth","floor","fixedWidthViewportWidth","slideItemsOut","cloneCount","bp","tem","ceil","min","apply","max","getItemsMax","hasOption","slideCountNew","hasRightDeadZone","rightBoundary","getRightBoundary","updateIndexBeforeTransform","transformAttr","transformPrefix","transformPostfix","getIndexMax","getStartIndex","indexCached","indexMin","getCurrentSlide","indexMax","moveDirectionExpected","running","events","newContainerClasses","slideId","tnsId","disable","disabled","freeze","getFreeze","frozen","controlsEvents","onControlsClick","getEvent","keyIndex","keyCode","navEvents","onTransitionEnd","getTarget","navIndex","navClicked","Number","targetIndexBase","pages","goTo","navCurrentIndex","animating","stopAutoplay","curElement","activeElement","setFocus","navItems","hoverEvents","stopAutoplayTimer","autoplayHoverPaused","setAutoplayTimer","visibilityEvent","hidden","autoplayVisibilityPaused","docmentKeydownEvent","touchEvents","onPanStart","onPanMove","onPanEnd","dragEvents","hasControls","hasNav","hasAutoplay","hasTouch","hasMouseDrag","slideActiveClass","slideClonedClass","imgCompleteClass","imgEvents","imgLoaded","img","imgCompleted","preventScroll","prevIsButton","nextIsButton","controlsContainerHTML","prevButtonHTML","nextButtonHTML","navContainerHTML","getPages","pagesCached","getCurrentNavIndex","navCurrentIndexCached","navActiveClass","navStr","navStrCurrent","autoplayTimer","autoplayUserPaused","autoplayButtonHTML","autoplayHtmlStrings","translateInit","rafIndex","initPosition","lastPosition","panStart","getDist","a","b","x","y","resetVariblesWhenDisable","fragmentBefore","createDocumentFragment","fragmentAfter","num","cloneFirst","cloneNode","firstChild","cloneLast","initStructure","fontSize","slide","marginLeft","getSlideMarginLeft","getTransitionDurationStyle","getInnerWrapperStyles","getContainerWidth","getSlideWidthStyle","getSlideGutterStyle","getAnimationDurationStyle","parseInt","middleWrapperStr","innerWrapperStr","containerStr","slideStr","itemsBP","fixedWidthBP","speedBP","edgePaddingBP","autoHeightBP","gutterBP","initSheet","initSliderTransform","updateIndex","leftEdge","rightEdge","transformCore","element","postfix","to","duration","tick","unit","from","positionTick","resetDuration","doContainerTransform","getContainerTransformValue","moveElement","updateContentWrapperHeight","eve","animateSlide","version","getInfo","info","play","startAutoplay","pause","updateSliderHeight","updateInnerWrapperHeight","refresh","destroy","ownerNode","onResize","toggleAutoplay","clearInterval","htmlList","prevEl","previousElementSibling","parentEl","nextElementSibling","firstElementChild","rebuild","condition","ind","getAbsIndex","absIndex","innerWidth","clientWidth","getInsertPosition","pos","getClientWidth","rect","right","gap","ww","edgePaddingTem","gutterTem","fixedWidthTem","speedTem","gutterTemUnit","itemsTem","dividend","getCSSPrefix","substring","imgs","querySelectorAll","src","imgsLoadedCheck","getImageArray","initSliderTransformStyleCheck","doContainerTransformSilent","initTools","initEvents","stylesApplicationCheck","initSliderTransformCore","setSlidePositions","updateSlideStatus","insertAdjacentHTML","getLiveRegionStr","txt","navHtml","hiddenStr","updateNavVisibility","isButton","updateControlsStatus","disableUI","resizeTasks","doAutoHeight","doLazyLoad","disableSlider","freezeSlider","additionalUpdates","bpChanged","breakpointZoneTem","needContainerTransform","indChanged","itemsChanged","disableTem","freezeTem","arrowKeysTem","controlsTem","navTem","touchTem","mouseDragTem","autoplayTem","autoplayHoverPauseTem","autoplayResetOnVisibilityTem","indexTem","autoHeightTem","controlsTextTem","centerTem","autoplayTextTem","classN","enableUI","enableSlider","margin","unfreezeSlider","height","html","len","updateLiveRegion","updateGallerySlidePositions","deleteRule","removeRule","removeCSSRule","vp","getVisibleSlideRange","start","end","rangestart","rangeend","parseFloat","point","cell","arg","stopPropagation","srcset","imgSelector","complete","navPrev","navCurrent","updateNavStatus","getMaxSlideHeight","slideStart","slideRange","heights","maxHeight","wp","attr2","base","range","getLowerCaseNodeName","isAriaDisabled","disEnableElement","prevDisabled","nextDisabled","disablePrev","disableNext","getCenterGap","denominator","number","classOut","classIn","isOut","render","sliderMoved","strTrans","event","propertyName","targetIndex","indexGap","isNaN","factor","dir","passEventObject","targetIn","setInterval","updateAutoplayButton","action","focus","isTouchEvent","changedTouches","srcElement","preventDefaultBehavior","preventDefault","returnValue","getMoveDirectionExpected","angle","atan2","PI","direction","$","clientX","clientY","panUpdate","cancelable","err","dist","preventClick","indexMoved","moved","rough","displayIndex","slider"],"sourceRoot":""}