{"version":3,"file":"chunks/1a1355dcc4f5b8.js","mappings":";4FAAA,oDAUGA,QAAU,CAAC,EAVd,QAUkB,SAASA,QACvB,IAAIC,MAAQ,6BAEZC,aAAe,GAEfC,iBAAkB,EAClBC,kBACAC,SAAW,iCAAiCC,KAAKC,UAAUC,WAC3DC,aAAe,CAAC,EAChBC,WAAaC,KAAKC,MAClBC,OACAC,OAASH,KAAKI,IACdC,QAAUL,KAAKM,KACfC,OAASP,KAAKQ,IACdC,SAAWT,KAAKU,MAChBC,OAASX,KAAKY,IACdC,OAASb,KAAKc,IACdC,QAAU,GAEVC,OAAS,CAAC,EASd,SAASC,mBAAmB,MAAO,CAAC,CAAC,EARpC,WACG,IACIC,EADAC,EAAgBC,OAAOC,oBAAoBrB,MACxCsB,EAAMH,EAAcI,OAC3B,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACbF,OAAOG,EAAcD,IAAMlB,KAAKmB,EAAcD,GAEtD,CANA,GAUAF,OAAOQ,OAASxB,KAAKwB,OACrBR,OAAOR,IAAM,SAASiB,GAElB,GAAc,iBADMA,GACMA,EAAIF,OAAO,CACjC,IACIL,EADAQ,EAASC,MAAMC,MAAM,KAAK,CAACL,OAAOE,EAAIF,SACnCD,EAAMG,EAAIF,OACjB,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACbQ,EAAOR,GAAKlB,KAAKQ,IAAIiB,EAAIP,IAE7B,OAAOQ,CACX,CACA,OAAO1B,KAAKQ,IAAIiB,EAEpB,EACA,IAAII,qBAAuB,IACvBC,UAAY9B,KAAK+B,GAAG,IACpBC,YAAc,MAElB,SAASC,YAAYC,GAEbhC,OADDgC,EACUlC,KAAKC,MAEL,SAASwB,GACd,OAAOA,CACX,CAER,CAGA,SAASU,iBAAiBV,GACtB,OAAOzB,KAAKC,MAAU,IAAJwB,GAAW,GACjC,CAEA,SAASW,iBAAiBX,GACtB,OAAOzB,KAAKC,MAAU,IAAJwB,GAAS,GAC/B,CAEA,SAASY,SAASC,GACdA,EAAQC,MAAMC,SAAW,WACzBF,EAAQC,MAAME,IAAM,EACpBH,EAAQC,MAAMG,KAAO,EACrBJ,EAAQC,MAAMI,QAAU,QACxBL,EAAQC,MAAMK,gBAAkBN,EAAQC,MAAMM,sBAAwB,MACtEP,EAAQC,MAAMO,mBAAsBR,EAAQC,MAAMQ,yBAA2B,UAC7ET,EAAQC,MAAMS,eAAiBV,EAAQC,MAAMU,qBAAuBX,EAAQC,MAAMW,kBAAoB,aAC1G,CAEA,SAASC,qBAAqBb,GAC1BA,EAAQC,MAAMa,WAAa,OAC3Bd,EAAQC,MAAMc,cAAgB,OAC9Bf,EAAQC,MAAMe,iBAAmB,OACjChB,EAAQC,MAAMgB,YAAc,MAEhC,CAEA,SAASC,kBAAkBC,EAAEC,EAAEC,EAAEC,GAC7BC,KAAKC,KAAOL,EACZI,KAAKE,YAAcL,EACnBG,KAAKG,UAAYL,EACjBE,KAAKI,UAAYL,EAAI,GAAK,EAAE,CAChC,CAEA,SAASM,gBAAgBT,EAAEG,GACvBC,KAAKC,KAAOL,EACZI,KAAKI,UAAYL,EAAI,GAAK,EAAE,CAChC,CAEA,SAASO,oBAAoBV,EAAEC,EAAEC,EAAEC,GAC/BC,KAAKC,KAAOL,EACZI,KAAKO,YAAcV,EACnBG,KAAKQ,WAAaV,EAClBE,KAAKI,UAAYL,EAAI,GAAK,EAAE,CAChC,CAEA,SAASU,oBAAoBb,EAAEc,EAAEZ,GAC7BE,KAAKC,KAAOL,EACZI,KAAKW,WAAaD,EAClBV,KAAKY,YAAcd,CACvB,CAEA,SAASe,eAAejB,EAAEE,GACtBE,KAAKC,KAAOL,EACZI,KAAKc,OAAShB,CAClB,CAEA,SAASiB,kBAAkBC,EAAWC,GAOrC,OALQjB,KAAKkB,KAAKF,KACXhB,KAAKkB,KAAKF,GAAa,IAE3BhB,KAAKkB,KAAKF,GAAWG,KAAKF,GAEtB,WACNjB,KAAKoB,oBAAoBJ,EAAWC,EACrC,EAAEI,KAAKrB,KACR,CAEA,SAASsB,qBAAqBN,EAAUC,GAEpC,GAAKA,GAEC,GAAGjB,KAAKkB,KAAKF,GAAW,CAE1B,IADA,IAAI3D,EAAI,EAAGI,EAAMuC,KAAKkB,KAAKF,GAAWtD,OAChCL,EAAEI,GACDuC,KAAKkB,KAAKF,GAAW3D,KAAO4D,IAC3BjB,KAAKkB,KAAKF,GAAWO,OAAOlE,EAAE,GAC9BA,GAAI,EACJI,GAAO,GAEXJ,GAAK,EAEL2C,KAAKkB,KAAKF,GAAWtD,SACrBsC,KAAKkB,KAAKF,GAAa,KAE/B,OAdIhB,KAAKkB,KAAKF,GAAa,IAgB/B,CAEA,SAASQ,cAAcR,EAAWS,GAC9B,GAAIzB,KAAKkB,KAAKF,GAEV,IADA,IAAIvD,EAAMuC,KAAKkB,KAAKF,GAAWtD,OACtBL,EAAI,EAAGA,EAAII,EAAKJ,IACrB2C,KAAKkB,KAAKF,GAAW3D,GAAGoE,EAGpC,CAEA,SAASC,aAAahE,EAAQiE,GAI1B,IAAItE,OAHSuE,IAAVD,IACCA,EAAQ,kEAGZ,IAAIE,EAAS,GACb,IAAKxE,EAAIK,EAAQL,EAAI,IAAKA,EAAGwE,GAAUF,EAAMxF,KAAKC,MAAMD,KAAKwB,UAAYgE,EAAMjE,OAAS,KACxF,OAAOmE,CACX,CAEA,SAASC,SAASC,EAAGC,EAAGC,GACpB,IAAIC,EAAGC,EAAGC,EAAG/E,EAAGqD,EAAG2B,EAAGC,EAAGxC,EASzB,OARyB,IAArByC,UAAU7E,SACVsE,EAAID,EAAEC,EAAGC,EAAIF,EAAEE,EAAGF,EAAIA,EAAEA,GAI5BM,EAAIJ,GAAK,EAAID,GACbM,EAAIL,GAAK,GAFTvB,EAAQ,EAAJqB,GADJ1E,EAAIlB,KAAKU,MAAU,EAAJkF,KAGEC,GACjBlC,EAAImC,GAAK,GAAK,EAAIvB,GAAKsB,GACf3E,EAAI,GACR,KAAK,EAAG6E,EAAID,EAAGE,EAAIrC,EAAGsC,EAAIC,EAAG,MAC7B,KAAK,EAAGH,EAAII,EAAGH,EAAIF,EAAGG,EAAIC,EAAG,MAC7B,KAAK,EAAGH,EAAIG,EAAGF,EAAIF,EAAGG,EAAItC,EAAG,MAC7B,KAAK,EAAGoC,EAAIG,EAAGF,EAAIG,EAAGF,EAAIH,EAAG,MAC7B,KAAK,EAAGC,EAAIpC,EAAGqC,EAAIE,EAAGD,EAAIH,EAAG,MAC7B,KAAK,EAAGC,EAAID,EAAGE,EAAIE,EAAGD,EAAIE,EAE9B,MAAO,CAAEJ,EACLC,EACCC,EACT,CAEA,SAASI,SAASN,EAAGC,EAAGC,GACK,IAArBG,UAAU7E,SACVyE,EAAID,EAAEC,EAAGC,EAAIF,EAAEE,EAAGF,EAAIA,EAAEA,GAE5B,IAEIH,EAFAhF,EAAMZ,KAAKY,IAAImF,EAAGC,EAAGC,GAAInF,EAAMd,KAAKc,IAAIiF,EAAGC,EAAGC,GAC9CrC,EAAIhD,EAAME,EAEV+E,EAAa,IAARjF,EAAY,EAAIgD,EAAIhD,EACzBkF,EAAIlF,EAAM,IAEd,OAAQA,GACJ,KAAKE,EAAK8E,EAAI,EAAG,MACjB,KAAKG,EAAGH,EAAKI,EAAIC,EAAKrC,GAAKoC,EAAIC,EAAI,EAAG,GAAIL,GAAK,EAAIhC,EAAG,MACtD,KAAKoC,EAAGJ,EAAKK,EAAIF,EAAS,EAAJnC,EAAOgC,GAAK,EAAIhC,EAAG,MACzC,KAAKqC,EAAGL,EAAKG,EAAIC,EAAS,EAAJpC,EAAOgC,GAAK,EAAIhC,EAG1C,MAAO,CACFgC,EACAC,EACAC,EAET,CAEA,SAASQ,mBAAmBC,EAAMC,GAC9B,IAAIC,EAAMJ,SAAkB,IAATE,EAAM,GAAgB,IAATA,EAAM,GAAgB,IAATA,EAAM,IAQnD,OAPAE,EAAI,IAAMD,EACNC,EAAI,GAAK,EACTA,EAAI,GAAK,EAEJA,EAAI,IAAM,IACfA,EAAI,GAAK,GAENd,SAASc,EAAI,GAAGA,EAAI,GAAGA,EAAI,GACtC,CAEA,SAASC,mBAAmBH,EAAMC,GAC9B,IAAIC,EAAMJ,SAAkB,IAATE,EAAM,GAAgB,IAATA,EAAM,GAAgB,IAATA,EAAM,IAQnD,OAPAE,EAAI,IAAMD,EACNC,EAAI,GAAK,EACTA,EAAI,GAAK,EAEJA,EAAI,GAAK,IACdA,EAAI,GAAK,GAENd,SAASc,EAAI,GAAGA,EAAI,GAAGA,EAAI,GACtC,CAEA,SAASE,YAAYJ,EAAMC,GACvB,IAAIC,EAAMJ,SAAkB,IAATE,EAAM,GAAgB,IAATA,EAAM,GAAgB,IAATA,EAAM,IAQnD,OAPAE,EAAI,IAAMD,EAAO,IACbC,EAAI,GAAK,EACTA,EAAI,IAAM,EAELA,EAAI,GAAK,IACdA,EAAI,IAAM,GAEPd,SAASc,EAAI,GAAGA,EAAI,GAAGA,EAAI,GACtC,CAEA,SAASG,eAAelD,GACpB,IAAImD,EAAMnD,EAAEoD,SAAS,IACrB,OAAqB,GAAdD,EAAItF,OAAc,IAAMsF,EAAMA,CACzC,CApMA5E,aAAY,GAsMZ,IAAI8E,SAAY,WACZ,IACI7F,EACA2F,EAFAG,EAAW,GAGf,IAAI9F,EAAE,EAAEA,EAAE,IAAIA,GAAG,EACb2F,EAAM3F,EAAE4F,SAAS,IACjBE,EAAS9F,GAAmB,GAAd2F,EAAItF,OAAc,IAAMsF,EAAMA,EAGhD,OAAO,SAASd,EAAGC,EAAGC,GAUlB,OATGF,EAAE,IACDA,EAAI,GAELC,EAAE,IACDA,EAAI,GAELC,EAAE,IACDA,EAAI,GAED,IAAMe,EAASjB,GAAKiB,EAAShB,GAAKgB,EAASf,EACtD,CACJ,CArBe,GAuBf,SAASgB,WAAWJ,EAAIK,GACpB,IAAIpH,aAAa+G,GAAK,CAClB,IAAInB,EAAS,4CAA4CyB,KAAKN,GAC9D/G,aAAa+G,GAAOO,SAAS1B,EAAO,GAAI,IAAI,IAAI0B,SAAS1B,EAAO,GAAI,IAAI,IAAI0B,SAAS1B,EAAO,GAAI,GACpG,CACA,MAAO,QAAQ5F,aAAa+G,GAAK,IAAIK,EAAM,GAC/C,CAEA,IAAIG,mBAEIL,SAAW,GACR,SAASM,EAASJ,GAgBrB,YAfazB,IAAVyB,IACCI,EAAS,GAAKJ,GAEdF,SAASM,EAAS,MAClBN,SAASM,EAAS,IAAM,CAAC,GAEzBN,SAASM,EAAS,IAAIA,EAAS,MAC/BN,SAASM,EAAS,IAAIA,EAAS,IAAM,CAAC,GAEtCN,SAASM,EAAS,IAAIA,EAAS,IAAIA,EAAS,MAC5CN,SAASM,EAAS,IAAIA,EAAS,IAAIA,EAAS,IAAM,CAAC,GAEnDN,SAASM,EAAS,IAAIA,EAAS,IAAIA,EAAS,IAAIA,EAAS,MACzDN,SAASM,EAAS,IAAIA,EAAS,IAAIA,EAAS,IAAIA,EAAS,IAAM,QAAUA,EAASC,KAAK,KAAK,KAEzFP,SAASM,EAAS,IAAIA,EAAS,IAAIA,EAAS,IAAIA,EAAS,GACpE,GAlBIN,SAqBR,SAASQ,cAAcC,EAAGC,GACtB7D,KAAK4D,GAAKA,EACV5D,KAAK6D,EAAIA,CACb,CAEA,SAASC,yBAAyBC,GAC9B,IAAI1G,EAAGI,EAAMuC,KAAKgE,kBAClB,IAAI3G,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb2C,KAAKgE,kBAAkB3G,GAAG4G,SAASF,EAE3C,CAEA,SAASG,YAAYC,GACjB,IACI9G,EAAGI,EADH2G,EAAO,GAAIC,EAAO,GAAIC,EAAO,GACrBC,EAAW,CAAC,EACpBC,EAAO,EACPL,EAAMtE,IACNuE,EAAK,GAAKD,EAAMN,EAAE,GAClBQ,EAAK,GAAKF,EAAM9G,EAAE,GAClBiH,EAAK,GAAKH,EAAMlC,EAAE,GAClBuC,EAAO,GAGX,IAAIC,GADJhH,EAAM0G,EAAM9G,EAAEK,QACE,EAEhB,IAAKL,EAAImH,EAAMnH,EAAII,EAAKJ,GAAK,EACzB+G,EAAKjD,KAAKgD,EAAMN,EAAEY,IAClBJ,EAAKlD,KAAKgD,EAAM9G,EAAEoH,IAClBH,EAAKnD,KAAKgD,EAAMlC,EAAEwC,IAClBA,GAAO,EAOX,OAJAF,EAASlH,EAAI+G,EACbG,EAASV,EAAIQ,EACbE,EAAStC,EAAIqC,EAENC,CACX,CA8BA,IAAIG,OAAU,WAEV,SAASC,IAiBL,OAhBA3E,KAAK4E,MAAM,GAAK,EAChB5E,KAAK4E,MAAM,GAAK,EAChB5E,KAAK4E,MAAM,GAAK,EAChB5E,KAAK4E,MAAM,GAAK,EAChB5E,KAAK4E,MAAM,GAAK,EAChB5E,KAAK4E,MAAM,GAAK,EAChB5E,KAAK4E,MAAM,GAAK,EAChB5E,KAAK4E,MAAM,GAAK,EAChB5E,KAAK4E,MAAM,GAAK,EAChB5E,KAAK4E,MAAM,GAAK,EAChB5E,KAAK4E,MAAM,IAAM,EACjB5E,KAAK4E,MAAM,IAAM,EACjB5E,KAAK4E,MAAM,IAAM,EACjB5E,KAAK4E,MAAM,IAAM,EACjB5E,KAAK4E,MAAM,IAAM,EACjB5E,KAAK4E,MAAM,IAAM,EACV5E,IACX,CAEA,SAAS6E,EAAOC,GACZ,GAAa,IAAVA,EACC,OAAO9E,KAEX,IAAI+E,EAAO5I,KAAK6I,IAAIF,GAChBG,EAAO9I,KAAK+I,IAAIJ,GACpB,OAAO9E,KAAKmF,GAAGJ,GAAOE,EAAO,EAAG,EAC1BA,EAAOF,EAAM,EAAG,EAChB,EAAI,EAAI,EAAG,EACX,EAAG,EAAG,EAAG,EACnB,CAEA,SAASK,EAAQN,GACb,GAAa,IAAVA,EACC,OAAO9E,KAEX,IAAI+E,EAAO5I,KAAK6I,IAAIF,GAChBG,EAAO9I,KAAK+I,IAAIJ,GACpB,OAAO9E,KAAKmF,GAAG,EAAG,EAAG,EAAG,EAClB,EAAGJ,GAAOE,EAAM,EAChB,EAAGA,EAAOF,EAAM,EAChB,EAAG,EAAG,EAAG,EACnB,CAEA,SAASM,EAAQP,GACb,GAAa,IAAVA,EACC,OAAO9E,KAEX,IAAI+E,EAAO5I,KAAK6I,IAAIF,GAChBG,EAAO9I,KAAK+I,IAAIJ,GACpB,OAAO9E,KAAKmF,GAAGJ,EAAO,EAAIE,EAAM,EAC1B,EAAG,EAAG,EAAG,GACRA,EAAO,EAAIF,EAAM,EAClB,EAAG,EAAG,EAAG,EACnB,CAEA,SAASO,EAAQR,GACb,GAAa,IAAVA,EACC,OAAO9E,KAEX,IAAI+E,EAAO5I,KAAK6I,IAAIF,GAChBG,EAAO9I,KAAK+I,IAAIJ,GACpB,OAAO9E,KAAKmF,GAAGJ,GAAOE,EAAO,EAAG,EAC1BA,EAAOF,EAAM,EAAG,EAChB,EAAI,EAAI,EAAG,EACX,EAAG,EAAG,EAAG,EACnB,CAEA,SAASQ,EAAMC,EAAGC,GACd,OAAOzF,KAAKmF,GAAG,EAAGM,EAAID,EAAI,EAAG,EAAG,EACpC,CAEA,SAASE,EAAKC,EAAIC,GACd,OAAO5F,KAAKuF,MAAMpJ,KAAK0J,IAAIF,GAAKxJ,KAAK0J,IAAID,GAC7C,CAEA,SAASE,EAAaH,EAAIb,GACtB,IAAIC,EAAO5I,KAAK6I,IAAIF,GAChBG,EAAO9I,KAAK+I,IAAIJ,GACpB,OAAO9E,KAAKmF,GAAGJ,EAAME,EAAO,EAAG,GACxBA,EAAOF,EAAM,EAAG,EACjB,EAAI,EAAI,EAAG,EACX,EAAG,EAAG,EAAG,GACVI,GAAG,EAAG,EAAI,EAAG,EACZhJ,KAAK0J,IAAIF,GAAM,EAAG,EAAG,EACrB,EAAI,EAAI,EAAG,EACX,EAAG,EAAG,EAAG,GACVR,GAAGJ,GAAOE,EAAO,EAAG,EACnBA,EAAOF,EAAM,EAAG,EAChB,EAAI,EAAI,EAAG,EACX,EAAG,EAAG,EAAG,EAEnB,CAEA,SAASgB,EAAMP,EAAIC,EAAIO,GAEnB,OADAA,EAAKC,MAAMD,GAAM,EAAIA,EACZ,GAANR,GAAiB,GAANC,GAAiB,GAANO,EACdhG,KAEJA,KAAKmF,GAAGK,EAAI,EAAG,EAAG,EAAG,EAAGC,EAAI,EAAG,EAAG,EAAG,EAAGO,EAAI,EAAG,EAAG,EAAG,EAAG,EACnE,CAEA,SAASE,EAAaC,EAAG/D,EAAGvC,EAAGE,EAAGqG,EAAG1F,EAAGyB,EAAGJ,EAAG1E,EAAGgJ,EAAGC,EAAGC,EAAGC,EAAG5G,EAAGiE,EAAGxB,GAiB/D,OAhBArC,KAAK4E,MAAM,GAAKuB,EAChBnG,KAAK4E,MAAM,GAAKxC,EAChBpC,KAAK4E,MAAM,GAAK/E,EAChBG,KAAK4E,MAAM,GAAK7E,EAChBC,KAAK4E,MAAM,GAAKwB,EAChBpG,KAAK4E,MAAM,GAAKlE,EAChBV,KAAK4E,MAAM,GAAKzC,EAChBnC,KAAK4E,MAAM,GAAK7C,EAChB/B,KAAK4E,MAAM,GAAKvH,EAChB2C,KAAK4E,MAAM,GAAKyB,EAChBrG,KAAK4E,MAAM,IAAM0B,EACjBtG,KAAK4E,MAAM,IAAM2B,EACjBvG,KAAK4E,MAAM,IAAM4B,EACjBxG,KAAK4E,MAAM,IAAMhF,EACjBI,KAAK4E,MAAM,IAAMf,EACjB7D,KAAK4E,MAAM,IAAMvC,EACVrC,IACX,CAEA,SAASyG,EAAUC,EAAIC,EAAIC,GAEvB,OADAA,EAAKA,GAAM,EACD,IAAPF,GAAmB,IAAPC,GAAmB,IAAPC,EAChB5G,KAAKmF,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAEuB,EAAGC,EAAGC,EAAG,GAE7C5G,IACX,CAEA,SAAS6G,EAAUC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,GAE3E,GAAU,IAAPf,GAAmB,IAAPC,GAAmB,IAAPC,GAAmB,IAAPC,GAAmB,IAAPC,GAAmB,IAAPC,GAAmB,IAAPC,GAAmB,IAAPC,GAAmB,IAAPC,GAAmB,IAAPC,GAAmB,IAAPC,GAAmB,IAAPC,EASnI,OARU,IAAPC,GAAmB,IAAPC,GAAmB,IAAPC,IAEvB5H,KAAK4E,MAAM,IAAM5E,KAAK4E,MAAM,IAAMkC,EAAK9G,KAAK4E,MAAM,IAAMsC,EAAKlH,KAAK4E,MAAM,IAAM0C,EAAKtH,KAAK4E,MAAM,IAAM8C,EACpG1H,KAAK4E,MAAM,IAAM5E,KAAK4E,MAAM,IAAMmC,EAAK/G,KAAK4E,MAAM,IAAMuC,EAAKnH,KAAK4E,MAAM,IAAM2C,EAAKvH,KAAK4E,MAAM,IAAM+C,EACpG3H,KAAK4E,MAAM,IAAM5E,KAAK4E,MAAM,IAAMoC,EAAKhH,KAAK4E,MAAM,IAAMwC,EAAKpH,KAAK4E,MAAM,IAAM4C,EAAKxH,KAAK4E,MAAM,IAAMgD,EACpG5H,KAAK4E,MAAM,IAAM5E,KAAK4E,MAAM,IAAMqC,EAAKjH,KAAK4E,MAAM,IAAMyC,EAAKrH,KAAK4E,MAAM,IAAM6C,EAAKzH,KAAK4E,MAAM,IAAMiD,GAExG7H,KAAK8H,qBAAsB,EACpB9H,KAGX,IAAI+H,EAAK/H,KAAK4E,MAAM,GAChBoD,EAAKhI,KAAK4E,MAAM,GAChBqD,EAAKjI,KAAK4E,MAAM,GAChBsD,EAAKlI,KAAK4E,MAAM,GAChBuD,EAAKnI,KAAK4E,MAAM,GAChBwD,EAAKpI,KAAK4E,MAAM,GAChByD,EAAKrI,KAAK4E,MAAM,GAChB0D,EAAKtI,KAAK4E,MAAM,GAChB2D,EAAKvI,KAAK4E,MAAM,GAChB4D,EAAKxI,KAAK4E,MAAM,GAChB6D,EAAKzI,KAAK4E,MAAM,IAChB8D,EAAK1I,KAAK4E,MAAM,IAChB+D,EAAK3I,KAAK4E,MAAM,IAChBgE,EAAK5I,KAAK4E,MAAM,IAChBiE,EAAK7I,KAAK4E,MAAM,IAChBkE,EAAK9I,KAAK4E,MAAM,IA4BpB,OArBA5E,KAAK4E,MAAM,GAAKmD,EAAKjB,EAAKkB,EAAKd,EAAKe,EAAKX,EAAKY,EAAKR,EACnD1H,KAAK4E,MAAM,GAAKmD,EAAKhB,EAAKiB,EAAKb,EAAKc,EAAKV,EAAKW,EAAKP,EACnD3H,KAAK4E,MAAM,GAAKmD,EAAKf,EAAKgB,EAAKZ,EAAKa,EAAKT,EAAKU,EAAKN,EACnD5H,KAAK4E,MAAM,GAAKmD,EAAKd,EAAKe,EAAKX,EAAKY,EAAKR,EAAKS,EAAKL,EAEnD7H,KAAK4E,MAAM,GAAKuD,EAAKrB,EAAKsB,EAAKlB,EAAKmB,EAAKf,EAAKgB,EAAKZ,EACnD1H,KAAK4E,MAAM,GAAKuD,EAAKpB,EAAKqB,EAAKjB,EAAKkB,EAAKd,EAAKe,EAAKX,EACnD3H,KAAK4E,MAAM,GAAKuD,EAAKnB,EAAKoB,EAAKhB,EAAKiB,EAAKb,EAAKc,EAAKV,EACnD5H,KAAK4E,MAAM,GAAKuD,EAAKlB,EAAKmB,EAAKf,EAAKgB,EAAKZ,EAAKa,EAAKT,EAEnD7H,KAAK4E,MAAM,GAAK2D,EAAKzB,EAAK0B,EAAKtB,EAAKuB,EAAKnB,EAAKoB,EAAKhB,EACnD1H,KAAK4E,MAAM,GAAK2D,EAAKxB,EAAKyB,EAAKrB,EAAKsB,EAAKlB,EAAKmB,EAAKf,EACnD3H,KAAK4E,MAAM,IAAM2D,EAAKvB,EAAKwB,EAAKpB,EAAKqB,EAAKjB,EAAKkB,EAAKd,EACpD5H,KAAK4E,MAAM,IAAM2D,EAAKtB,EAAKuB,EAAKnB,EAAKoB,EAAKhB,EAAKiB,EAAKb,EAEpD7H,KAAK4E,MAAM,IAAM+D,EAAK7B,EAAK8B,EAAK1B,EAAK2B,EAAKvB,EAAKwB,EAAKpB,EACpD1H,KAAK4E,MAAM,IAAM+D,EAAK5B,EAAK6B,EAAKzB,EAAK0B,EAAKtB,EAAKuB,EAAKnB,EACpD3H,KAAK4E,MAAM,IAAM+D,EAAK3B,EAAK4B,EAAKxB,EAAKyB,EAAKrB,EAAKsB,EAAKlB,EACpD5H,KAAK4E,MAAM,IAAM+D,EAAK1B,EAAK2B,EAAKvB,EAAKwB,EAAKpB,EAAKqB,EAAKjB,EAEpD7H,KAAK8H,qBAAsB,EACpB9H,IACX,CAEA,SAAS+I,IAQL,OAPI/I,KAAK8H,sBACL9H,KAAKgJ,YAAgC,IAAlBhJ,KAAK4E,MAAM,IAA8B,IAAlB5E,KAAK4E,MAAM,IAA8B,IAAlB5E,KAAK4E,MAAM,IAA8B,IAAlB5E,KAAK4E,MAAM,IAC1E,IAAlB5E,KAAK4E,MAAM,IAA8B,IAAlB5E,KAAK4E,MAAM,IAA8B,IAAlB5E,KAAK4E,MAAM,IAA8B,IAAlB5E,KAAK4E,MAAM,IAC9D,IAAlB5E,KAAK4E,MAAM,IAA8B,IAAlB5E,KAAK4E,MAAM,IAA+B,IAAnB5E,KAAK4E,MAAM,KAAgC,IAAnB5E,KAAK4E,MAAM,KAC9D,IAAnB5E,KAAK4E,MAAM,KAAgC,IAAnB5E,KAAK4E,MAAM,KAAgC,IAAnB5E,KAAK4E,MAAM,KAAgC,IAAnB5E,KAAK4E,MAAM,KAC1F5E,KAAK8H,qBAAsB,GAExB9H,KAAKgJ,SAChB,CAEA,SAASC,EAAMC,GACX,IAAI7L,EACJ,IAAIA,EAAE,EAAEA,EAAE,GAAGA,GAAG,EACZ6L,EAAKtE,MAAMvH,GAAK2C,KAAK4E,MAAMvH,EAEnC,CAEA,SAAS8L,EAAevE,GACpB,IAAIvH,EACJ,IAAIA,EAAE,EAAEA,EAAE,GAAGA,GAAG,EACZ2C,KAAK4E,MAAMvH,GAAKuH,EAAMvH,EAE9B,CAEA,SAAS+L,EAAaC,EAAGC,EAAGC,GAExB,MAAO,CACHF,EAAGA,EAAIrJ,KAAK4E,MAAM,GAAK0E,EAAItJ,KAAK4E,MAAM,GAAK2E,EAAIvJ,KAAK4E,MAAM,GAAK5E,KAAK4E,MAAM,IAC1E0E,EAAGD,EAAIrJ,KAAK4E,MAAM,GAAK0E,EAAItJ,KAAK4E,MAAM,GAAK2E,EAAIvJ,KAAK4E,MAAM,GAAK5E,KAAK4E,MAAM,IAC1E2E,EAAGF,EAAIrJ,KAAK4E,MAAM,GAAK0E,EAAItJ,KAAK4E,MAAM,GAAK2E,EAAIvJ,KAAK4E,MAAM,IAAM5E,KAAK4E,MAAM,IAMnF,CACA,SAAS4E,EAASH,EAAGC,EAAGC,GACpB,OAAOF,EAAIrJ,KAAK4E,MAAM,GAAK0E,EAAItJ,KAAK4E,MAAM,GAAK2E,EAAIvJ,KAAK4E,MAAM,GAAK5E,KAAK4E,MAAM,GAClF,CACA,SAAS6E,EAASJ,EAAGC,EAAGC,GACpB,OAAOF,EAAIrJ,KAAK4E,MAAM,GAAK0E,EAAItJ,KAAK4E,MAAM,GAAK2E,EAAIvJ,KAAK4E,MAAM,GAAK5E,KAAK4E,MAAM,GAClF,CACA,SAAS8E,EAASL,EAAGC,EAAGC,GACpB,OAAOF,EAAIrJ,KAAK4E,MAAM,GAAK0E,EAAItJ,KAAK4E,MAAM,GAAK2E,EAAIvJ,KAAK4E,MAAM,IAAM5E,KAAK4E,MAAM,GACnF,CAEA,SAAS+E,EAAaC,GAClB,IAAIC,EAAc7J,KAAK4E,MAAM,GAAK5E,KAAK4E,MAAM,GAAK5E,KAAK4E,MAAM,GAAK5E,KAAK4E,MAAM,GACzEuB,EAAInG,KAAK4E,MAAM,GAAGiF,EAClBzH,GAAMpC,KAAK4E,MAAM,GAAGiF,EACpBhK,GAAMG,KAAK4E,MAAM,GAAGiF,EACpB9J,EAAIC,KAAK4E,MAAM,GAAGiF,EAClBzD,GAAKpG,KAAK4E,MAAM,GAAK5E,KAAK4E,MAAM,IAAM5E,KAAK4E,MAAM,GAAK5E,KAAK4E,MAAM,KAAKiF,EACtEnJ,IAAOV,KAAK4E,MAAM,GAAK5E,KAAK4E,MAAM,IAAM5E,KAAK4E,MAAM,GAAK5E,KAAK4E,MAAM,KAAKiF,EAC5E,MAAO,CAACD,EAAG,GAAKzD,EAAIyD,EAAG,GAAK/J,EAAIuG,EAAGwD,EAAG,GAAKxH,EAAIwH,EAAG,GAAK7J,EAAIW,EAAG,EAClE,CAEA,SAASoJ,EAAcC,GACnB,IAAI1M,EAAGI,EAAMsM,EAAIrM,OAAQsM,EAAS,GAClC,IAAI3M,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb2M,EAAO3M,GAAKsM,EAAaI,EAAI1M,IAEjC,OAAO2M,CACX,CAEA,SAASC,EAAkBZ,EAAEC,EAAEC,EAAEW,GAC7B,GAAGA,GAA6B,IAAfA,EAAkB,CAC/B,IAAIC,EAAMC,WAAWC,WAGrB,OAFAF,EAAI,GAAKd,EAAIrJ,KAAK4E,MAAM,GAAK0E,EAAItJ,KAAK4E,MAAM,GAAK2E,EAAIvJ,KAAK4E,MAAM,GAAK5E,KAAK4E,MAAM,IAChFuF,EAAI,GAAKd,EAAIrJ,KAAK4E,MAAM,GAAK0E,EAAItJ,KAAK4E,MAAM,GAAK2E,EAAIvJ,KAAK4E,MAAM,GAAK5E,KAAK4E,MAAM,IACzEuF,CACX,CACA,MAAO,CAACd,EAAIrJ,KAAK4E,MAAM,GAAK0E,EAAItJ,KAAK4E,MAAM,GAAK2E,EAAIvJ,KAAK4E,MAAM,GAAK5E,KAAK4E,MAAM,IAAIyE,EAAIrJ,KAAK4E,MAAM,GAAK0E,EAAItJ,KAAK4E,MAAM,GAAK2E,EAAIvJ,KAAK4E,MAAM,GAAK5E,KAAK4E,MAAM,IAAIyE,EAAIrJ,KAAK4E,MAAM,GAAK0E,EAAItJ,KAAK4E,MAAM,GAAK2E,EAAIvJ,KAAK4E,MAAM,IAAM5E,KAAK4E,MAAM,IAC1O,CACA,SAAS0F,EAAwBjB,EAAGC,GAChC,OAAGtJ,KAAK+I,aACGM,EAAI,IAAMC,EAEbjN,OAAOgN,EAAIrJ,KAAK4E,MAAM,GAAK0E,EAAItJ,KAAK4E,MAAM,GAAK5E,KAAK4E,MAAM,KAAM,IAAKvI,OAAOgN,EAAIrJ,KAAK4E,MAAM,GAAK0E,EAAItJ,KAAK4E,MAAM,GAAK5E,KAAK4E,MAAM,IAC3I,CAEA,SAAS2F,IACL,MAAO,CAACvK,KAAK4E,MAAM,GAAG5E,KAAK4E,MAAM,GAAG5E,KAAK4E,MAAM,GAAG5E,KAAK4E,MAAM,GAAG5E,KAAK4E,MAAM,GAAG5E,KAAK4E,MAAM,GAAG5E,KAAK4E,MAAM,GAAG5E,KAAK4E,MAAM,GAAG5E,KAAK4E,MAAM,GAAG5E,KAAK4E,MAAM,GAAG5E,KAAK4E,MAAM,IAAI5E,KAAK4E,MAAM,IAAI5E,KAAK4E,MAAM,IAAI5E,KAAK4E,MAAM,IAAI5E,KAAK4E,MAAM,IAAI5E,KAAK4E,MAAM,IAC9O,CAEA,SAAS4F,IACL,OAAG3O,SACQ,YAAcyC,iBAAiB0B,KAAK4E,MAAM,IAAM,IAAMtG,iBAAiB0B,KAAK4E,MAAM,IAAM,IAAMtG,iBAAiB0B,KAAK4E,MAAM,IAAM,IAAMtG,iBAAiB0B,KAAK4E,MAAM,IAAM,IAAMtG,iBAAiB0B,KAAK4E,MAAM,IAAM,IAAMtG,iBAAiB0B,KAAK4E,MAAM,IAAM,IAAMtG,iBAAiB0B,KAAK4E,MAAM,IAAM,IAAMtG,iBAAiB0B,KAAK4E,MAAM,IAAM,IAAMtG,iBAAiB0B,KAAK4E,MAAM,IAAM,IAAMtG,iBAAiB0B,KAAK4E,MAAM,IAAM,IAAMtG,iBAAiB0B,KAAK4E,MAAM,KAAO,IAAMtG,iBAAiB0B,KAAK4E,MAAM,KAAO,IAAMtG,iBAAiB0B,KAAK4E,MAAM,KAAO,IAAMtG,iBAAiB0B,KAAK4E,MAAM,KAAO,IAAMtG,iBAAiB0B,KAAK4E,MAAM,KAAO,IAAMtG,iBAAiB0B,KAAK4E,MAAM,KAAO,KAErpB5E,KAAKyK,SAAS,GAAKzK,KAAK4E,MAAMlB,KAAK,KAC5B1D,KAAKyK,SAAS/G,KAAK,IAElC,CAEA,SAASgH,IACL,MAAO,UAAYpM,iBAAiB0B,KAAK4E,MAAM,IAAM,IAAMtG,iBAAiB0B,KAAK4E,MAAM,IAAM,IAAMtG,iBAAiB0B,KAAK4E,MAAM,IAAM,IAAMtG,iBAAiB0B,KAAK4E,MAAM,IAAM,IAAMtG,iBAAiB0B,KAAK4E,MAAM,KAAO,IAAMtG,iBAAiB0B,KAAK4E,MAAM,KAAO,GACnQ,CAEA,SAAS3B,IACL,MAAO,GAAKjD,KAAKuK,SACrB,CAEA,OAAO,WACHvK,KAAK2E,MAAQA,EACb3E,KAAK6E,OAASA,EACd7E,KAAKoF,QAAUA,EACfpF,KAAKqF,QAAUA,EACfrF,KAAKsF,QAAUA,EACftF,KAAK0F,KAAOA,EACZ1F,KAAK8F,aAAeA,EACpB9F,KAAKuF,MAAQA,EACbvF,KAAK+F,MAAQA,EACb/F,KAAKkG,aAAeA,EACpBlG,KAAKyG,UAAYA,EACjBzG,KAAK6G,UAAYA,EACjB7G,KAAKoJ,aAAeA,EACpBpJ,KAAKwJ,SAAWA,EAChBxJ,KAAKyJ,SAAWA,EAChBzJ,KAAK0J,SAAWA,EAChB1J,KAAKiK,kBAAoBA,EACzBjK,KAAKsK,wBAA0BA,EAC/BtK,KAAKuK,QAAUA,EACfvK,KAAKwK,MAAQA,EACbxK,KAAK0K,QAAUA,EACf1K,KAAKiD,SAAWA,EAChBjD,KAAKiJ,MAAQA,EACbjJ,KAAKmJ,eAAiBA,EACtBnJ,KAAK8J,cAAgBA,EACrB9J,KAAK2J,aAAeA,EACpB3J,KAAKmF,GAAKnF,KAAK6G,UACf7G,KAAK+I,WAAaA,EAClB/I,KAAKgJ,WAAY,EACjBhJ,KAAK8H,qBAAsB,EAE3B9H,KAAK4E,MAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAE5C5E,KAAKyK,SAAW,CAAC,YAAY,GAAG,IACpC,CACJ,CA3Ua,GA6Ub,SAAS/F,SAGT,EA0BA,SAAWiG,EAAMC,GAIb,IASIC,EATAC,EAAS9K,KACT+K,EAAQ,IAGRC,EAAU,SACVC,EAAaL,EAAKrO,IAAIwO,EAHb,GAITG,EAAeN,EAAKrO,IAAI,EAHf,IAIT4O,EAA0B,EAAfD,EACXE,EAAOL,IAgFX,SAASM,EAAKC,GACV,IAAIxL,EAAGyL,EAASD,EAAI5N,OAChB8N,EAAKxL,KAAM3C,EAAI,EAAGgJ,EAAImF,EAAGnO,EAAImO,EAAGnF,EAAI,EAAGrE,EAAIwJ,EAAGC,EAAI,GAMtD,IAHKF,IAAUD,EAAM,CAACC,MAGflO,EAAI0N,GACP/I,EAAE3E,GAAKA,IAEX,IAAKA,EAAI,EAAGA,EAAI0N,EAAO1N,IACnB2E,EAAE3E,GAAK2E,EAAEqE,EAAI+E,EAAQ/E,EAAIiF,EAAIjO,EAAIkO,IAAWzL,EAAIkC,EAAE3E,KAClD2E,EAAEqE,GAAKvG,GAIV0L,EAAGrJ,EAAI,SAASuJ,GAIb,IAFA,IAAI5L,EAAGoC,EAAI,EACP7E,EAAImO,EAAGnO,EAAGgJ,EAAImF,EAAGnF,EAAGrE,EAAIwJ,EAAGC,EACxBC,KACH5L,EAAIkC,EAAE3E,EAAI+N,EAAQ/N,EAAI,GACtB6E,EAAIA,EAAI6I,EAAQ/I,EAAEoJ,GAASpJ,EAAE3E,GAAK2E,EAAEqE,EAAI+E,EAAQ/E,EAAIvG,KAAQkC,EAAEqE,GAAKvG,IAGvE,OADA0L,EAAGnO,EAAIA,EAAGmO,EAAGnF,EAAIA,EACVnE,CAIX,GAAG6I,EACP,CAMA,SAASY,EAAKjL,EAAGZ,GAIb,OAHAA,EAAEzC,EAAIqD,EAAErD,EACRyC,EAAEuG,EAAI3F,EAAE2F,EACRvG,EAAE2L,EAAI/K,EAAE+K,EAAEG,QACH9L,CACX,CAMA,SAAS+L,EAAQC,EAAKC,GAClB,IAAqCC,EAAjCnK,EAAS,GAAIoK,SAAcH,EAC/B,GAAIC,GAAgB,UAAPE,EACT,IAAKD,KAAQF,EACT,IAAMjK,EAAOV,KAAK0K,EAAQC,EAAIE,GAAOD,EAAQ,GAAK,CAAE,MAAO3F,GAAI,CAGvE,OAAQvE,EAAOnE,OAASmE,EAAgB,UAAPoK,EAAkBH,EAAMA,EAAM,IACnE,CAOA,SAASI,EAAOC,EAAMb,GAElB,IADA,IAA4Bc,EAAxBC,EAAaF,EAAO,GAAW9F,EAAI,EAChCA,EAAIgG,EAAW3O,QAClB4N,EAAIF,EAAO/E,GACP+E,GAASgB,GAAyB,GAAhBd,EAAIF,EAAO/E,IAAWgG,EAAWC,WAAWjG,KAEtE,OAAOkG,EAASjB,EACpB,CAwBA,SAASiB,EAASpG,GACd,OAAOqG,OAAOC,aAAa1O,MAAM,EAAGoI,EACxC,CA5GAyE,EAAK,OAASI,GA7Dd,SAAoBmB,EAAMO,EAASzL,GAC/B,IAAIqK,EAAM,GAINqB,EAAYT,EAAOL,GAHvBa,EAAsB,GAAXA,EAAmB,CAAEE,SAAS,GAAUF,GAAW,CAAC,GAInDE,QAAU,CAACT,EAAMI,EAAS5B,IACrB,MAARwB,EA+Ib,WACI,IACQtB,EACJ,IAAIgC,EAAM,IAAIC,WAAW/B,GAEzB,OADCD,EAAOiC,QAAUjC,EAAOkC,UAAUC,gBAAgBJ,GAC5CN,EAASM,EACpB,CAAE,MAAOzG,GACL,IAAI8G,EAAUpC,EAAO/O,UACjBoR,EAAUD,GAAWA,EAAQC,QACjC,MAAO,EAAE,IAAIC,KAAMtC,EAAQqC,EAASrC,EAAOuC,OAAQd,EAAS5B,GAChE,CACJ,CA1J6B2C,GAAanB,EAAM,GAAIb,GAG5CiC,EAAO,IAAIlC,EAAKC,GAIhBkC,EAAO,WAIP,IAHA,IAAI5N,EAAI2N,EAAKpL,EA5BR,GA6BDpC,EAAIkL,EACJ5B,EAAI,EACDzJ,EAAIsL,GACPtL,GAAKA,EAAIyJ,GAAK0B,EACdhL,GAAKgL,EACL1B,EAAIkE,EAAKpL,EAAE,GAEf,KAAOvC,GAAKuL,GACRvL,GAAK,EACLG,GAAK,EACLsJ,KAAO,EAEX,OAAQzJ,EAAIyJ,GAAKtJ,CACrB,EAUA,OARAyN,EAAKC,MAAQ,WAAa,OAAmB,EAAZF,EAAKpL,EAAE,EAAQ,EAChDqL,EAAKE,MAAQ,WAAa,OAAOH,EAAKpL,EAAE,GAAK,UAAa,EAC1DqL,EAAKG,OAASH,EAGdtB,EAAOK,EAASgB,EAAK9B,GAAId,IAGjB+B,EAAQkB,MAAQ3M,GACxB,SAASuM,EAAMrB,EAAM0B,EAAcC,GAU/B,OATIA,IAEIA,EAAMrC,GAAKE,EAAKmC,EAAOP,GAE3BC,EAAKM,MAAQ,WAAa,OAAOnC,EAAK4B,EAAM,CAAC,EAAI,GAKjDM,GAAgBjD,EAAKI,GAAWwC,EAAarB,GAIrCqB,CAChB,GACIA,EACAb,EACA,WAAYD,EAAUA,EAAQ5B,OAAU9K,MAAQ4K,EAChD8B,EAAQoB,MAChB,EAsHA5B,EAAOtB,EAAKjN,SAAUgN,EAQzB,CA7MD,CA8MI,GACAxN,QAEJ,IAAI4Q,cAAiB,WAYb,IAAIC,EAAK,CACbA,gBAGA,SAAyB7H,EAAE/D,EAAEvC,EAAEE,EAAEkO,GAC7B,IAAIC,EAAMD,IAAO,OAAS9H,EAAE,IAAI/D,EAAE,IAAIvC,EAAE,IAAIE,GAAGoO,QAAQ,MAAO,KAC9D,GAAGC,EAAQF,GACP,OAAOE,EAAQF,GAEnB,IAAIG,EAAY,IAAIC,EAAa,CAACnI,EAAE/D,EAAEvC,EAAEE,IAExC,OADAqO,EAAQF,GAAOG,EACRA,CACX,GAVID,EAAU,CAAC,EAkBXG,EAAmB,GACnBC,EAAkB,GAAOD,EAAmB,GAE5CE,EAAgD,mBAAjBC,aAEnC,SAASC,EAAGC,EAAKC,GAAO,OAAO,EAAM,EAAMA,EAAM,EAAMD,CAAK,CAC5D,SAASE,EAAGF,EAAKC,GAAO,OAAO,EAAMA,EAAM,EAAMD,CAAK,CACtD,SAASG,EAAGH,GAAY,OAAO,EAAMA,CAAK,CAG1C,SAASI,EAAYC,EAAIL,EAAKC,GAC1B,QAASF,EAAEC,EAAKC,GAAKI,EAAKH,EAAEF,EAAKC,IAAMI,EAAKF,EAAEH,IAAMK,CACxD,CAGA,SAASC,EAAUD,EAAIL,EAAKC,GACxB,OAAO,EAAMF,EAAEC,EAAKC,GAAKI,EAAGA,EAAK,EAAMH,EAAEF,EAAKC,GAAOI,EAAKF,EAAEH,EAChE,CA6BA,SAASN,EAAca,GACnBnP,KAAKoP,GAAKD,EACVnP,KAAKqP,eAAiBZ,EAAwB,IAAIC,aAAaH,GAAoB,IAAIzQ,MAAMyQ,GAC7FvO,KAAKsP,cAAe,EAEpBtP,KAAKuP,IAAMvP,KAAKuP,IAAIlO,KAAKrB,KAC7B,CAqEA,OAnEAsO,EAAakB,UAAY,CAErBD,IAAK,SAAUlG,GACX,IAAIoG,EAAMzP,KAAKoP,GAAG,GACdM,EAAM1P,KAAKoP,GAAG,GACdO,EAAM3P,KAAKoP,GAAG,GACdQ,EAAM5P,KAAKoP,GAAG,GAElB,OADKpP,KAAKsP,cAActP,KAAK6P,cACzBJ,IAAQC,GAAOC,IAAQC,EAAYvG,EAE7B,IAANA,EAAgB,EACV,IAANA,EAAgB,EACb2F,EAAWhP,KAAK8P,UAAUzG,GAAIqG,EAAKE,EAC9C,EAIAC,YAAa,WACT,IAAIJ,EAAMzP,KAAKoP,GAAG,GACdM,EAAM1P,KAAKoP,GAAG,GACdO,EAAM3P,KAAKoP,GAAG,GACdQ,EAAM5P,KAAKoP,GAAG,GAClBpP,KAAKsP,cAAe,EAChBG,IAAQC,GAAOC,IAAQC,GACvB5P,KAAK+P,mBACb,EAEAA,kBAAmB,WAGf,IAFA,IAAIN,EAAMzP,KAAKoP,GAAG,GACdO,EAAM3P,KAAKoP,GAAG,GACT/R,EAAI,EAAGA,EAAIkR,IAAoBlR,EACpC2C,KAAKqP,eAAehS,GAAK2R,EAAW3R,EAAImR,EAAiBiB,EAAKE,EAEtE,EAKAG,UAAW,SAAUE,GASjB,IARA,IAAIP,EAAMzP,KAAKoP,GAAG,GACdO,EAAM3P,KAAKoP,GAAG,GACda,EAAgBjQ,KAAKqP,eAErBa,EAAgB,EAChBC,EAAgB,EAChBC,EAAa7B,EAAmB,EAE7B4B,IAAkBC,GAAcH,EAAcE,IAAkBH,IAAMG,EACzED,GAAiB1B,EAKrB,IACI6B,EAAYH,GADJF,EAAKC,IAHfE,KAGgDF,EAAcE,EAAc,GAAKF,EAAcE,IAC1D3B,EAEnC8B,EAAepB,EAASmB,EAAWZ,EAAKE,GAC5C,OAAIW,GAnHW,KAqCvB,SAA+BN,EAAIO,EAASd,EAAKE,GAC7C,IAAK,IAAItS,EAAI,EAAGA,EAvCI,IAuCqBA,EAAG,CACxC,IAAImT,EAAetB,EAASqB,EAASd,EAAKE,GAC1C,GAAqB,IAAjBa,EAAsB,OAAOD,EAEjCA,IADevB,EAAWuB,EAASd,EAAKE,GAAOK,GACzBQ,CAC1B,CACA,OAAOD,CACX,CAuEmBE,CAAqBT,EAAIK,EAAWZ,EAAKE,GACxB,IAAjBW,EACAD,EA/FnB,SAA0BL,EAAIU,EAAIC,EAAIlB,EAAKE,GACvC,IAAIiB,EAAUC,EAAUxT,EAAI,EAC5B,IAEIuT,EAAW5B,EADX6B,EAAWH,GAAMC,EAAKD,GAAM,EACIjB,EAAKE,GAAOK,GAC7B,EACXW,EAAKE,EAELH,EAAKG,QAEJ1U,KAAKQ,IAAIiU,GAhCM,QAgCiCvT,EA/B5B,IAgC7B,OAAOwT,CACX,CAqFmBC,CAAgBd,EAAIE,EAAeA,EAAgB1B,EAAiBiB,EAAKE,EAExF,GAGG3B,CAEX,CA3JoB,GAoLpB,SAAS+C,cAAcC,EAAOC,EAAMC,GAChC,IAAGD,EAIE,CACD,IAAIE,EAAW5T,OAAO6T,OAAOJ,EAAOxB,UAAU0B,GAK9C,OAHGC,GAAqD,sBAD1C,CAAC,EACQlO,SAASoO,KAAKF,EAAS3M,OAC1C2M,EAAS3M,OAEN2M,CACX,CAVIF,EAAMzB,UAAYjS,OAAO6T,OAAOJ,EAAOxB,WACvCyB,EAAMzB,UAAU8B,YAAcL,EAC9BA,EAAMzB,UAAU+B,QAAUP,EAAOxB,SASzC,CAEA,SAASgC,gBAAgBC,EAAOC,GAC5B,IAAK,IAAIC,KAAQF,EAAOjC,UAChBiC,EAAOjC,UAAUoC,eAAeD,KAAOD,EAAYlC,UAAUmC,GAAQF,EAAOjC,UAAUmC,GAElG,CACA,SAASE,cAKL,SAASC,EAAcC,EAAGC,EAAIC,EAAGC,EAAIC,EAAGC,GACpC,IAAIC,EAAQN,EAAGG,EAAOF,EAAGG,EAAOF,EAAGG,EAAOD,EAAGD,EAAOE,EAAGL,EAAOE,EAAGD,EACjE,OAAOK,GAAQ,MAAUA,EAAO,IACpC,CALWlW,KA0DX,IAAImW,EAAmB,WAEnB,SAASC,EAAQhM,EAAElE,GACfrC,KAAKuG,EAAIA,EACTvG,KAAKqC,EAAIA,CACb,CAEA,OAAO,SAASmQ,EAAIC,EAAIC,EAAIC,GACxB,IACIrM,EACAjJ,EAAGI,EACHmV,EAAQC,EACRC,EAJAC,EAAgB/U,qBAGHgV,EAAc,EAE3BC,EAAQ,GAAGC,EAAY,GACvBC,EAAa,CACbH,YAAa,EACbI,SAAU,IAGd,IADA3V,EAAMiV,EAAIhV,OACN4I,EAAE,EAAEA,EAAEyM,EAAczM,GAAG,EAAE,CAGzB,IAFAuM,EAAOvM,GAAGyM,EAAc,GACxBD,EAAa,EACTzV,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACbuV,EAAUtW,OAAO,EAAEuW,EAAK,GAAGL,EAAInV,GAAG,EAAEf,OAAO,EAAEuW,EAAK,GAAGA,EAAKH,EAAIrV,GAAG,GAAG,EAAEwV,GAAMvW,OAAOuW,EAAK,GAAGF,EAAItV,GAAGf,OAAOuW,EAAK,GAAGJ,EAAIpV,GACrH4V,EAAM5V,GAAKuV,EACS,OAAjBM,EAAU7V,KACTyV,GAAcxW,OAAO2W,EAAM5V,GAAK6V,EAAU7V,GAAG,IAEjD6V,EAAU7V,GAAK4V,EAAM5V,GAEtByV,IAECE,GADAF,EAAatW,QAAQsW,IAGzBK,EAAWC,SAASjS,KAAK,IAAIoR,EAAQS,EAAYH,GACrD,CAEA,OADAM,EAAWH,YAAcA,EAClBG,CACX,CACJ,CAvCsB,GA4DtB,SAASE,EAAW3V,GAChBsC,KAAKsT,cAAgB,EACrBtT,KAAKmP,OAAS,IAAIrR,MAAMJ,EAC5B,CAEA,SAAS6V,EAAUC,EAAQP,GACvBjT,KAAKyT,cAAgBD,EACrBxT,KAAKiT,MAAQA,CACjB,CAEA,IAEQS,EAFJC,GAEID,EAAa,CAAC,EAEX,SAAUE,GACb,IAAIpB,EAAMoB,EAAQ5R,EACdyQ,EAAMmB,EAAQxN,EACdsM,EAAMkB,EAAQC,GACdlB,EAAMiB,EAAQE,GACdC,GAAcvB,EAAI9O,KAAK,KAAK,IAAI+O,EAAI/O,KAAK,KAAK,IAAIgP,EAAIhP,KAAK,KAAK,IAAIiP,EAAIjP,KAAK,MAAMyK,QAAQ,MAAO,KACtG,GAAGuF,EAAWK,GACVH,EAAQI,WAAaN,EAAWK,OADpC,CAIJ,IACIzN,EAAGjJ,EAAGI,EACFmV,EAAQC,EACRC,EACAG,EAJJF,EAAgB/U,qBAECgV,EAAc,EAErBE,EAAY,KACJ,IAAfV,EAAI9U,SAAiB8U,EAAI,IAAMC,EAAI,IAAMD,EAAI,IAAMC,EAAI,KAAOX,EAAcU,EAAI,GAAGA,EAAI,GAAGC,EAAI,GAAGA,EAAI,GAAGD,EAAI,GAAGE,EAAI,GAAGF,EAAI,GAAGE,EAAI,KAAOZ,EAAcU,EAAI,GAAGA,EAAI,GAAGC,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGE,EAAI,GAAGF,EAAI,GAAGE,EAAI,MAC1MI,EAAgB,GAEpB,IAAIiB,EAAa,IAAIX,EAAWN,GAEhC,IADAtV,EAAMiV,EAAIhV,OACN4I,EAAE,EAAEA,EAAEyM,EAAczM,GAAG,EAAE,CAIzB,IAHJ2M,EAAQ,IAAInV,MAAML,GACdoV,EAAOvM,GAAGyM,EAAc,GACxBD,EAAa,EACTzV,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACjBuV,EAAUtW,OAAO,EAAEuW,EAAK,GAAGL,EAAInV,GAAG,EAAEf,OAAO,EAAEuW,EAAK,GAAGA,GAAML,EAAInV,GAAKqV,EAAIrV,IAAI,GAAG,EAAEwV,GAAMvW,OAAOuW,EAAK,IAAIJ,EAAIpV,GAAKsV,EAAItV,IAAIf,OAAOuW,EAAK,GAAGJ,EAAIpV,GAC3I4V,EAAM5V,GAAKuV,EACU,OAAdM,IACHJ,GAAcxW,OAAO2W,EAAM5V,GAAK6V,EAAU7V,GAAG,IAIjD2V,GADJF,EAAatW,QAAQsW,GAEjBkB,EAAW7E,OAAO7I,GAAK,IAAIiN,EAAUT,EAAWG,GAChDC,EAAYD,CAChB,CACAe,EAAWV,cAAgBN,EAC3BY,EAAQI,WAAaA,EACrBN,EAAWK,GAAcC,CA7BzB,CA+BJ,GAGJ,SAASC,EAAgBpB,EAAKmB,GAC1B,IAAIZ,EAAWY,EAAWZ,SACtB3V,EAAM2V,EAAS1V,OACfwW,EAAUtX,UAAUa,EAAI,GAAGoV,GAC3BsB,EAAYtB,EAAKmB,EAAWhB,YAC5BoB,EAAQ,EACZ,GAAGD,GAAaf,EAASc,GAAS3N,EAC9B,OAAO6M,EAASc,GAAS7R,EAIzB,IAFA,IAAIgS,EAAMjB,EAASc,GAAS3N,EAAI4N,GAAa,EAAI,EAC7C9V,GAAO,EACLA,GACC+U,EAASc,GAAS3N,GAAK4N,GAAaf,EAASc,EAAQ,GAAG3N,EAAI4N,GAC3DC,GAASD,EAAYf,EAASc,GAAS3N,IAAI6M,EAASc,EAAQ,GAAG3N,EAAE6M,EAASc,GAAS3N,GACnFlI,GAAO,GAEP6V,GAAWG,GAEZH,EAAU,GAAKA,GAAWzW,EAAM,KAC/BY,GAAO,GAGf,OAAO+U,EAASc,GAAS7R,GAAK+Q,EAASc,EAAQ,GAAG7R,EAAI+Q,EAASc,GAAS7R,GAAG+R,CAEnF,CAEA,SAASE,IACLtU,KAAKwS,IAAM,IAAI1U,MAAM,GACrBkC,KAAKyS,IAAM,IAAI3U,MAAM,GACrBkC,KAAK0S,IAAM,IAAI5U,MAAM,GACrBkC,KAAK2S,IAAM,IAAI7U,MAAM,EACzB,CA+BA,MAAO,CAEHwU,gBAAkBA,EAClBiC,kBA7IJ,SAA2BC,GACvB,IAIInX,EAJAoX,EAASD,EAAU3U,EACnB6U,EAAQF,EAAUvS,EAClB0S,EAAQH,EAAU3Q,EAClB+Q,EAAQJ,EAAUnX,EACfI,EAAM+W,EAAUK,QACnBC,EAAU,GACVC,EAAc,EAClB,IAAI1X,EAAE,EAAEA,EAAEI,EAAI,EAAEJ,GAAG,EACfyX,EAAQzX,GAAKiV,EAAgBoC,EAAMrX,GAAGqX,EAAMrX,EAAE,GAAGsX,EAAMtX,GAAGuX,EAAMvX,EAAE,IAClE0X,GAAeD,EAAQzX,GAAG2V,YAM9B,OAJGyB,IACCK,EAAQzX,GAAKiV,EAAgBoC,EAAMrX,GAAGqX,EAAM,GAAGC,EAAMtX,GAAGuX,EAAM,IAC9DG,GAAeD,EAAQzX,GAAG2V,aAEvB,CAAC8B,QAAQA,EAAQC,YAAYA,EACxC,EA6HIC,cAxBJ,SAAuBxC,EAAIC,EAAIC,EAAIC,EAAIsC,EAAUC,EAASlB,GAEtD,IAKI3W,EALA0M,EAAM,IAAIuK,EAEVa,EAAKlB,EADTgB,EAAYA,EAAY,EAAI,EAAIA,EAAY,EAAI,EAAIA,EACjBjB,GAE/BoB,EAAKnB,EADTiB,EAAUA,EAAU,EAAI,EAAIA,EACKlB,GAC1BvW,EAAM+U,EAAI9U,OACb2X,EAAK,EAAIF,EACTG,EAAK,EAAIF,EAEb,IAAI/X,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb0M,EAAIyI,IAAInV,GAAMlB,KAAKC,MAAoI,KAA7HiZ,EAAGA,EAAGA,EAAI7C,EAAInV,IAAM8X,EAAGE,EAAGA,EAAKA,EAAGF,EAAGE,EAAKA,EAAGA,EAAGF,GAAMzC,EAAIrV,IAAM8X,EAAGA,EAAGE,EAAKA,EAAGF,EAAGA,EAAKA,EAAGE,EAAGF,GAAKxC,EAAItV,GAAK8X,EAAGA,EAAGA,EAAI1C,EAAIpV,KAAa,IAC/J0M,EAAI2I,IAAIrV,GAAKlB,KAAKC,MAAkI,KAA3HiZ,EAAGA,EAAGC,EAAG9C,EAAInV,IAAM8X,EAAGE,EAAGC,EAAKD,EAAGF,EAAGG,EAAKD,EAAGA,EAAGD,GAAK1C,EAAIrV,IAAM8X,EAAGA,EAAGG,EAAKD,EAAGF,EAAGC,EAAKD,EAAGE,EAAGD,GAAKzC,EAAItV,GAAK8X,EAAGA,EAAGC,EAAI3C,EAAIpV,KAAa,IAC5J0M,EAAI4I,IAAItV,GAAKlB,KAAKC,MAAmI,KAA5HiZ,EAAGC,EAAGA,EAAI9C,EAAInV,IAAM8X,EAAGG,EAAGA,EAAKD,EAAGD,EAAGE,EAAKD,EAAGC,EAAGF,GAAK1C,EAAIrV,IAAM8X,EAAGC,EAAGE,EAAKD,EAAGD,EAAGA,EAAKD,EAAGG,EAAGF,GAAKzC,EAAItV,GAAK8X,EAAGC,EAAGA,EAAI3C,EAAIpV,KAAa,IAC7J0M,EAAI0I,IAAIpV,GAAKlB,KAAKC,MAAkI,KAA3HkZ,EAAGA,EAAGA,EAAI9C,EAAInV,IAAM+X,EAAGE,EAAGA,EAAKA,EAAGF,EAAGE,EAAKA,EAAGA,EAAGF,GAAK1C,EAAIrV,IAAM+X,EAAGA,EAAGE,EAAKA,EAAGF,EAAGA,EAAKA,EAAGE,EAAGF,GAAIzC,EAAItV,GAAK+X,EAAGA,EAAGA,EAAI3C,EAAIpV,KAAa,IAEhK,OAAO0M,CACX,EAOIwL,kBAlCJ,SAA2B/C,EAAKC,EAAKC,EAAKC,EAAK6C,EAASxB,GACpD,IAAIoB,EAAKnB,EAAgBuB,EAAQxB,GAE7BsB,EAAK,EAAIF,EAGb,MAAO,CAFGjZ,KAAKC,MAAkI,KAA3HkZ,EAAGA,EAAGA,EAAI9C,EAAI,IAAM4C,EAAGE,EAAGA,EAAKA,EAAGF,EAAGE,EAAKA,EAAGA,EAAGF,GAAK1C,EAAI,IAAM0C,EAAGA,EAAGE,EAAKA,EAAGF,EAAGA,EAAKA,EAAGE,EAAGF,GAAIzC,EAAI,GAAKyC,EAAGA,EAAGA,EAAI3C,EAAI,KAAa,IAC/ItW,KAAKC,MAAkI,KAA3HkZ,EAAGA,EAAGA,EAAI9C,EAAI,IAAM4C,EAAGE,EAAGA,EAAKA,EAAGF,EAAGE,EAAKA,EAAGA,EAAGF,GAAK1C,EAAI,IAAM0C,EAAGA,EAAGE,EAAKA,EAAGF,EAAGA,EAAKA,EAAGE,EAAGF,GAAIzC,EAAI,GAAKyC,EAAGA,EAAGA,EAAI3C,EAAI,KAAa,IAE7J,EA4BIkB,gBAAkBA,EAClB7B,cAAgBA,EAChB2D,cA9OJ,SAAuB1D,EAAGC,EAAG0D,EAAIzD,EAAGC,EAAGyD,EAAIxD,EAAGC,EAAGwD,GAC7C,GAAU,IAAPF,GAAmB,IAAPC,GAAmB,IAAPC,EACvB,OAAO9D,EAAcC,EAAGC,EAAIC,EAAGC,EAAIC,EAAGC,GAE1C,IAGIyD,EAHAC,EAAQ3Z,KAAKM,KAAKN,KAAKI,IAAI0V,EAAKF,EAAI,GAAK5V,KAAKI,IAAI2V,EAAKF,EAAI,GAAK7V,KAAKI,IAAIoZ,EAAKD,EAAI,IAClFK,EAAQ5Z,KAAKM,KAAKN,KAAKI,IAAI4V,EAAKJ,EAAI,GAAK5V,KAAKI,IAAI6V,EAAKJ,EAAI,GAAK7V,KAAKI,IAAIqZ,EAAKF,EAAI,IAClFM,EAAQ7Z,KAAKM,KAAKN,KAAKI,IAAI4V,EAAKF,EAAI,GAAK9V,KAAKI,IAAI6V,EAAKF,EAAI,GAAK/V,KAAKI,IAAIqZ,EAAKD,EAAI,IAatF,OATQE,EAFLC,EAAQC,EACJD,EAAQE,EACIF,EAAQC,EAAQC,EAEhBA,EAAQD,EAAQD,EAEzBE,EAAQD,EACHC,EAAQD,EAAQD,EAEhBC,EAAQD,EAAQE,IAEZ,MAAUH,EAAW,IAC5C,EA4NJ,EAtSC,WAGG,IAFA,IAAII,EAAW,EACXC,EAAU,CAAC,KAAM,MAAO,SAAU,KAC9B7M,EAAI,EAAGA,EAAI6M,EAAQxY,SAAWlC,OAAO2a,wBAAyB9M,EAClE7N,OAAO2a,sBAAwB3a,OAAO0a,EAAQ7M,GAAK,yBACnD7N,OAAO4a,qBAAuB5a,OAAO0a,EAAQ7M,GAAK,yBAA2B7N,OAAO0a,EAAQ7M,GAAK,+BAEjG7N,OAAO2a,wBACP3a,OAAO2a,sBAAwB,SAAUlV,EAAUxC,GAC/C,IAAI4X,GAAW,IAAIjJ,MAAOkJ,UACtBC,EAAapa,KAAKY,IAAI,EAAG,IAAMsZ,EAAWJ,IAC1CO,EAAKC,YAAW,WACZxV,EAASoV,EAAWE,EACxB,GACAA,GAEJ,OADAN,EAAWI,EAAWE,EACfC,CACX,GACAhb,OAAO4a,uBACP5a,OAAO4a,qBAAuB,SAAUI,GACpCE,aAAaF,EACjB,EACR,CAtBA,GAwSA,IAAIG,IAAM9E,cACV,SAAS+E,sBAIL,SAASC,EAAeC,EAAQC,EAAOC,GACnC,IAAIC,EAEA5Z,EACAgJ,EAAG6Q,EAAM5Q,EAAG6Q,EA2eEC,EA5eX3Z,EAAMqZ,EAAOpZ,OAEpB,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EAEb,GAAK,OADL4Z,EAAYH,EAAOzZ,MACQ4Z,EAAUI,UAArC,CASA,GANAJ,EAAUI,WAAY,EACnBJ,EAAUK,KACTR,EAAOzZ,EAAE,GAAGka,GAAKN,EAAUK,IAI5BL,EAAUO,QAAQ,CACjB,IAAIC,EAAYR,EAAUS,gBAE1B,IADAR,EAAOO,EAAU/Z,OACb2I,EAAE,EAAEA,EAAE6Q,EAAK7Q,GAAG,EACd,GAAGoR,EAAUpR,GAAGuD,GAAGtD,EAAEjJ,EACjBsa,EAA6BF,EAAUpR,GAAGuD,GAAGtD,QAG7C,IADA6Q,EAAOM,EAAUpR,GAAGuD,GAAGtD,EAAE5I,OACrB4I,EAAE,EAAEA,EAAE6Q,EAAK7Q,GAAG,EACXmR,EAAUpR,GAAGuD,GAAGtD,EAAEA,GAAGtE,GACpB2V,EAA6BF,EAAUpR,GAAGuD,GAAGtD,EAAEA,GAAGtE,EAAE,IAErDyV,EAAUpR,GAAGuD,GAAGtD,EAAEA,GAAGF,GACpBuR,EAA6BF,EAAUpR,GAAGuD,GAAGtD,EAAEA,GAAGF,EAAE,GAKxE,CACkB,IAAf6Q,EAAUtQ,IACTsQ,EAAUH,OAASc,EAAeX,EAAUY,MAAOd,GACnDF,EAAeI,EAAUH,OAAOC,EAAOC,IACjB,IAAjBC,EAAUtQ,GACfmR,EAAeb,EAAUc,QACJ,GAAhBd,EAAUtQ,KAwcA,KADLyQ,EAtcGH,GAucbnX,EAAEqG,EAAEzI,QAAkB,MAAO0Z,EAAKtX,EAAEuC,IACxC+U,EAAKY,aAAc,GAxenB,CAmCR,CAEA,SAASJ,EAAepB,EAAGO,GAEvB,IADA,IAAI1Z,EAAI,EAAGI,EAAMsZ,EAAMrZ,OACjBL,EAAEI,GAAI,CACR,GAAGsZ,EAAM1Z,GAAGmZ,KAAOA,EACf,OAAIO,EAAM1Z,GAAGyZ,OAAOmB,OAIbC,KAAKC,MAAMD,KAAKE,UAAUrB,EAAM1Z,GAAGyZ,UAHtCC,EAAM1Z,GAAGyZ,OAAOmB,QAAS,EAClBlB,EAAM1Z,GAAGyZ,QAIxBzZ,GAAK,CACT,CACJ,CAEA,SAASya,EAAe3N,GACpB,IAAI9M,EACAgJ,EAAG6Q,EAEP,IAAI7Z,EAHS8M,EAAIzM,OAGP,EAAEL,GAAG,EAAEA,GAAG,EAChB,GAAgB,MAAb8M,EAAI9M,GAAGsJ,GACN,GAAGwD,EAAI9M,GAAGgb,GAAG/R,EAAEjJ,EACXsa,EAA6BxN,EAAI9M,GAAGgb,GAAG/R,QAGvC,IADA4Q,EAAO/M,EAAI9M,GAAGgb,GAAG/R,EAAE5I,OACf2I,EAAE,EAAEA,EAAE6Q,EAAK7Q,GAAG,EACX8D,EAAI9M,GAAGgb,GAAG/R,EAAED,GAAGrE,GACd2V,EAA6BxN,EAAI9M,GAAGgb,GAAG/R,EAAED,GAAGrE,EAAE,IAE/CmI,EAAI9M,GAAGgb,GAAG/R,EAAED,GAAGD,GACduR,EAA6BxN,EAAI9M,GAAGgb,GAAG/R,EAAED,GAAGD,EAAE,QAKxC,MAAb+D,EAAI9M,GAAGsJ,IACZmR,EAAe3N,EAAI9M,GAAGib,GAelC,CAEA,SAASX,EAA6BY,GAClC,IAAIlb,EAAGI,EAAM8a,EAAKlb,EAAEK,OACpB,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACbkb,EAAKlb,EAAEA,GAAG,IAAMkb,EAAKtW,EAAE5E,GAAG,GAC1Bkb,EAAKlb,EAAEA,GAAG,IAAMkb,EAAKtW,EAAE5E,GAAG,GAC1Bkb,EAAK1U,EAAExG,GAAG,IAAMkb,EAAKtW,EAAE5E,GAAG,GAC1Bkb,EAAK1U,EAAExG,GAAG,IAAMkb,EAAKtW,EAAE5E,GAAG,EAElC,CAEA,SAASmb,EAAaC,EAAQC,GAC1B,IAAIC,EAAcD,EAAoBA,EAAkBE,MAAM,KAAO,CAAC,IAAI,IAAI,KAC9E,OAAGH,EAAQ,GAAGE,EAAY,MAEhBA,EAAY,GAAKF,EAAQ,MAGhCA,EAAQ,GAAGE,EAAY,MAEhBA,EAAY,GAAKF,EAAQ,MAGhCA,EAAQ,GAAGE,EAAY,MAEhBA,EAAY,GAAKF,EAAQ,UAA5B,GAGX,CAEA,IAyCQI,EAzCJC,EAAa,WACb,IAAID,EAAiB,CAAC,EAAE,EAAE,IAc1B,SAASE,EAAcjC,GACnB,IAAIzZ,EAbiB2b,EACjBC,EAYGxb,EAAMqZ,EAAOpZ,OACpB,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACO,IAAjByZ,EAAOzZ,GAAGsJ,UAdbsS,KADiBD,EAgBGlC,EAAOzZ,IAfFyC,EAAEC,EAC/BiZ,EAAUlZ,EAAEC,EAAI,CACZuG,EAAG,CACC,CACItE,EAAEiX,EACFnZ,EAAE,KAalB,CAEA,OAAO,SAAUoZ,GACb,GAAGV,EAAaK,EAAeK,EAAcjX,KACzC8W,EAAcG,EAAcpC,QACzBoC,EAAcC,QAAO,CACpB,IAAI9b,EAAGI,EAAMyb,EAAcC,OAAOzb,OAClC,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACV6b,EAAcC,OAAO9b,GAAGyZ,QACvBiC,EAAcG,EAAcC,OAAO9b,GAAGyZ,OAIlD,CAER,CACJ,CAtCgB,GAwCZsC,GACIP,EAAiB,CAAC,EAAE,EAAE,IACnB,SAAUK,GACb,GAAGA,EAAcvX,QAAU6W,EAAaK,EAAeK,EAAcjX,GAAG,CACpE,IAAI5E,EAAqCgJ,EAAG6Q,EACxCmC,EAAUlV,EADP1G,EAAMyb,EAAcvX,MAAMjE,OAEjC,IAAIL,EAAI,EAAGA,EAAII,EAAKJ,GAAK,EACrB,GAAG6b,EAAcvX,MAAMtE,GAAG+Z,MAAQ8B,EAAcvX,MAAMtE,GAAG+Z,KAAKW,OAI1D,IAFAb,GADA/S,EAAQ+U,EAAcvX,MAAMtE,GAAG+Z,KAAKW,OAAO,GAAGO,IACjC5a,OAET2I,EAAI,EAAGA,EAAI6Q,EAAM7Q,GAAK,GACtBgT,EAAWlV,EAAMkC,GAAGgS,GAAG/R,GACVgT,cACT3B,EAA6BxT,EAAMkC,GAAGgS,GAAG/R,GACzC+S,EAASC,aAAc,EAK3C,CACJ,GAIAC,EAAe,WACf,IAAIV,EAAiB,CAAC,EAAE,EAAE,GAE1B,SAASW,EAAczB,GACnB,IAAI1a,EACAgJ,EAAG6Q,EADAzZ,EAAMsa,EAAOra,OAEpB,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb,GAAoB,OAAjB0a,EAAO1a,GAAGsJ,GACT6S,EAAczB,EAAO1a,GAAGib,SACtB,GAAoB,OAAjBP,EAAO1a,GAAGsJ,IAAgC,OAAjBoR,EAAO1a,GAAGsJ,GACxC,GAAGoR,EAAO1a,GAAGwC,EAAEyG,GAAKyR,EAAO1a,GAAGwC,EAAEyG,EAAE,GAAGjJ,EAEjC,IADA6Z,EAAOa,EAAO1a,GAAGwC,EAAEyG,EAAE5I,OACjB2I,EAAE,EAAEA,EAAE6Q,EAAK7Q,GAAG,EACX0R,EAAO1a,GAAGwC,EAAEyG,EAAED,GAAGrE,IAChB+V,EAAO1a,GAAGwC,EAAEyG,EAAED,GAAGrE,EAAE,IAAM,IACzB+V,EAAO1a,GAAGwC,EAAEyG,EAAED,GAAGrE,EAAE,IAAM,IACzB+V,EAAO1a,GAAGwC,EAAEyG,EAAED,GAAGrE,EAAE,IAAM,IACzB+V,EAAO1a,GAAGwC,EAAEyG,EAAED,GAAGrE,EAAE,IAAM,KAE1B+V,EAAO1a,GAAGwC,EAAEyG,EAAED,GAAGD,IAChB2R,EAAO1a,GAAGwC,EAAEyG,EAAED,GAAGD,EAAE,IAAM,IACzB2R,EAAO1a,GAAGwC,EAAEyG,EAAED,GAAGD,EAAE,IAAM,IACzB2R,EAAO1a,GAAGwC,EAAEyG,EAAED,GAAGD,EAAE,IAAM,IACzB2R,EAAO1a,GAAGwC,EAAEyG,EAAED,GAAGD,EAAE,IAAM,UAIjC2R,EAAO1a,GAAGwC,EAAEyG,EAAE,IAAM,IACpByR,EAAO1a,GAAGwC,EAAEyG,EAAE,IAAM,IACpByR,EAAO1a,GAAGwC,EAAEyG,EAAE,IAAM,IACpByR,EAAO1a,GAAGwC,EAAEyG,EAAE,IAAM,GAIpC,CAEA,SAASyS,EAAcjC,GACnB,IAAIzZ,EAAGI,EAAMqZ,EAAOpZ,OACpB,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACO,IAAjByZ,EAAOzZ,GAAGsJ,IACT6S,EAAc1C,EAAOzZ,GAAG0a,OAGpC,CAEA,OAAO,SAAUmB,GACb,GAAGV,EAAaK,EAAeK,EAAcjX,KACzC8W,EAAcG,EAAcpC,QACzBoC,EAAcC,QAAO,CACpB,IAAI9b,EAAGI,EAAMyb,EAAcC,OAAOzb,OAClC,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACV6b,EAAcC,OAAO9b,GAAGyZ,QACvBiC,EAAcG,EAAcC,OAAO9b,GAAGyZ,OAIlD,CAER,CACJ,CA3DkB,GA6Dd2C,EAAe,WACf,IAAIZ,EAAiB,CAAC,EAAE,EAAE,IAI1B,SAASf,EAAe3N,GACpB,IAAI9M,EACAgJ,EAAG6Q,EAEP,IAAI7Z,EAHS8M,EAAIzM,OAGP,EAAEL,GAAG,EAAEA,GAAG,EAChB,GAAgB,MAAb8M,EAAI9M,GAAGsJ,GACN,GAAGwD,EAAI9M,GAAGgb,GAAG/R,EAAEjJ,EACX8M,EAAI9M,GAAGgb,GAAG/R,EAAEzG,EAAIsK,EAAI9M,GAAGoX,YAGvB,IADAyC,EAAO/M,EAAI9M,GAAGgb,GAAG/R,EAAE5I,OACf2I,EAAE,EAAEA,EAAE6Q,EAAK7Q,GAAG,EACX8D,EAAI9M,GAAGgb,GAAG/R,EAAED,GAAGrE,IACdmI,EAAI9M,GAAGgb,GAAG/R,EAAED,GAAGrE,EAAE,GAAGnC,EAAIsK,EAAI9M,GAAGoX,QAEhCtK,EAAI9M,GAAGgb,GAAG/R,EAAED,GAAGD,IACd+D,EAAI9M,GAAGgb,GAAG/R,EAAED,GAAGD,EAAE,GAAGvG,EAAIsK,EAAI9M,GAAGoX,YAKzB,MAAbtK,EAAI9M,GAAGsJ,IACZmR,EAAe3N,EAAI9M,GAAGib,GAGlC,CAEA,SAASS,EAAcjC,GACnB,IAAIG,EACA5Z,EACAgJ,EAAG6Q,EAAM5Q,EAAG6Q,EADT1Z,EAAMqZ,EAAOpZ,OAEpB,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EAAE,CAEf,IADA4Z,EAAYH,EAAOzZ,IACNma,QAAQ,CACjB,IAAIC,EAAYR,EAAUS,gBAE1B,IADAR,EAAOO,EAAU/Z,OACb2I,EAAE,EAAEA,EAAE6Q,EAAK7Q,GAAG,EACd,GAAGoR,EAAUpR,GAAGuD,GAAGtD,EAAEjJ,EACjBoa,EAAUpR,GAAGuD,GAAGtD,EAAEzG,EAAI4X,EAAUpR,GAAGqT,QAGnC,IADAvC,EAAOM,EAAUpR,GAAGuD,GAAGtD,EAAE5I,OACrB4I,EAAE,EAAEA,EAAE6Q,EAAK7Q,GAAG,EACXmR,EAAUpR,GAAGuD,GAAGtD,EAAEA,GAAGtE,IACpByV,EAAUpR,GAAGuD,GAAGtD,EAAEA,GAAGtE,EAAE,GAAGnC,EAAI4X,EAAUpR,GAAGqT,IAE5CjC,EAAUpR,GAAGuD,GAAGtD,EAAEA,GAAGF,IACpBqR,EAAUpR,GAAGuD,GAAGtD,EAAEA,GAAGF,EAAE,GAAGvG,EAAI4X,EAAUpR,GAAGqT,GAK/D,CACoB,IAAjBzC,EAAUtQ,IACTmR,EAAeb,EAAUc,OAEjC,CACJ,CAEA,OAAO,SAAUmB,GACb,GAAGV,EAAaK,EAAeK,EAAcjX,KACzC8W,EAAcG,EAAcpC,QACzBoC,EAAcC,QAAO,CACpB,IAAI9b,EAAGI,EAAMyb,EAAcC,OAAOzb,OAClC,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACV6b,EAAcC,OAAO9b,GAAGyZ,QACvBiC,EAAcG,EAAcC,OAAO9b,GAAGyZ,OAIlD,CAER,CACJ,CA5EkB,GAwPd6C,EAAW,CACfA,aApBA,SAAsBT,EAAelC,GAC9BkC,EAAcU,aAGjBL,EAAYL,GACZJ,EAAUI,GACVE,EAAWF,GACXO,EAAYP,GACZrC,EAAeqC,EAAcpC,OAAQoC,EAAcC,OAAQnC,GAC3DkC,EAAcU,YAAa,EAE/B,GAWA,OAAOD,CACX,CAEA,IAAIE,YAAcjD,sBACdkD,YAAe,WAIf,SAASC,EAAUC,EAAMC,GACrB,IAAIC,EAAaC,SAASpJ,cAAc,QACxCmJ,EAAWxb,MAAM0b,WAAgBH,EACjC,IAAII,EAAOF,SAASpJ,cAAc,QAElCsJ,EAAKC,UAAY,iBAEjBJ,EAAWxb,MAAMC,SAAgB,WACjCub,EAAWxb,MAAMG,KAAgB,WACjCqb,EAAWxb,MAAME,IAAgB,WAEjCsb,EAAWxb,MAAM6b,SAAgB,QAEjCL,EAAWxb,MAAM8b,YAAgB,SACjCN,EAAWxb,MAAM+b,UAAgB,SACjCP,EAAWxb,MAAMgc,WAAgB,SACjCR,EAAWxb,MAAMic,cAAgB,IACjCT,EAAWU,YAAYP,GACvBF,SAASU,KAAKD,YAAYV,GAG1B,IAAInP,EAAQsP,EAAKS,YAEjB,OADAT,EAAK3b,MAAM0b,WAAaJ,EAAO,KAAKC,EAC7B,CAACI,KAAKA,EAAMU,EAAEhQ,EAAOiG,OAAOkJ,EACvC,CAEA,SAASc,IACL,IAAI3d,EACAgd,EAAMU,EADHtd,EAAMuC,KAAKib,MAAMvd,OAEpBwd,EAAczd,EAClB,IAAIJ,EAAE,EAAEA,EAAEI,EAAKJ,GAAI,EACf,GAAG2C,KAAKib,MAAM5d,GAAG8d,OACbD,GAAe,OAGnB,GAA6B,MAA1Blb,KAAKib,MAAM5d,GAAG+d,SAA4C,IAAzBpb,KAAKib,MAAM5d,GAAGge,OAAa,CAC3D,GAAG7f,OAAO8f,SAAW9f,OAAO8f,QAAQC,MAA+B,IAAvBvb,KAAKwb,cAAoB,CACjExb,KAAKwb,cAAgB,EACrB,IAAIhgB,OAAO8f,QAAQC,KAAK,CACpBE,OAAO,EACPC,OAAQ,WACJ1b,KAAKwb,cAAgB,CACzB,EAAEna,KAAKrB,OACR,CAAC,MAAMoG,GAAG,CACjB,CAC0B,IAAvBpG,KAAKwb,gBACJxb,KAAKib,MAAM5d,GAAG8d,QAAS,EAE/B,KAAoC,MAA1Bnb,KAAKib,MAAM5d,GAAG+d,SAA4C,IAAzBpb,KAAKib,MAAM5d,GAAGge,OACrDrb,KAAKib,MAAM5d,GAAG8d,QAAS,GAEvBd,EAAOra,KAAKib,MAAM5d,GAAGse,SAAStB,KAC9BU,EAAI/a,KAAKib,MAAM5d,GAAGse,SAASZ,EACxBV,EAAKS,cAAgBC,GACpBG,GAAe,EACflb,KAAKib,MAAM5d,GAAG8d,QAAS,IAEvBd,EAAOra,KAAKib,MAAM5d,GAAGue,SAASvB,KAC9BU,EAAI/a,KAAKib,MAAM5d,GAAGue,SAASb,EACxBV,EAAKS,cAAgBC,IACpBG,GAAe,EACflb,KAAKib,MAAM5d,GAAG8d,QAAS,IAG5Bnb,KAAKib,MAAM5d,GAAG8d,SACbnb,KAAKib,MAAM5d,GAAGue,SAAS5K,OAAOkJ,WAAW2B,YAAY7b,KAAKib,MAAM5d,GAAGue,SAAS5K,QAC5EhR,KAAKib,MAAM5d,GAAGse,SAAS3K,OAAOkJ,WAAW2B,YAAY7b,KAAKib,MAAM5d,GAAGse,SAAS3K,UAKrE,IAAhBkK,GAAqB9N,KAAK0O,MAAQ9b,KAAK+b,SAzEzB,IA0EbtF,WAAWuE,EAAiB3Z,KAAKrB,MAAM,IAEvCyW,WAAW,WAAWzW,KAAKmb,QAAS,CAAK,EAAE9Z,KAAKrB,MAAM,EAG9D,CAEA,SAASgc,EAAaC,EAAKC,GACvB,IAAIC,EAAUhC,SAASiC,gBAAgB3gB,MAAM,QAC7C0gB,EAAQzd,MAAM6b,SAAW,QACzB4B,EAAQzd,MAAM0b,WAAa8B,EAASG,QACpCF,EAAQG,YAAc,IACnBJ,EAASK,QACRJ,EAAQzd,MAAM0b,WAAa,UAC3B+B,EAAQK,UAAYN,EAASK,QAE7BJ,EAAQzd,MAAM0b,WAAa8B,EAASG,QAExCJ,EAAIrB,YAAYuB,GAChB,IAAIM,EAAgBtC,SAASpJ,cAAc,UAAU2L,WAAW,MAEhE,OADAD,EAAczC,KAAO,SAAUkC,EAASG,QACjCI,CACX,CAmGA,IAAIE,EAAO,WACP3c,KAAKib,MAAQ,GACbjb,KAAK2B,MAAQ,KACb3B,KAAKwb,cAAgB,EACrBxb,KAAKmb,QAAS,EACdnb,KAAK+b,SAAW3O,KAAK0O,KACzB,EAOA,OANAa,EAAKnN,UAAUoN,SA7Df,SAAkBjb,GACd,GAAIA,EAAJ,CAGI3B,KAAK2B,QACL3B,KAAK2B,MAAQ,IAEjB,IAAItE,EACAgJ,EAA6BwW,EAD1Bpf,EAAMkE,EAAMjE,OACZwZ,EAAOlX,KAAK2B,MAAMjE,OACzB,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EAAE,CAGf,IAFAgJ,EAAI,EACJwW,GAAQ,EACFxW,EAAE6Q,GACDlX,KAAK2B,MAAM0E,GAAG3H,QAAUiD,EAAMtE,GAAGqB,OAASsB,KAAK2B,MAAM0E,GAAGgW,UAAY1a,EAAMtE,GAAGgf,SAAWrc,KAAK2B,MAAM0E,GAAGyW,KAAOnb,EAAMtE,GAAGyf,KACrHD,GAAQ,GAEZxW,GAAK,EAELwW,IACA7c,KAAK2B,MAAMR,KAAKQ,EAAMtE,IACtB6Z,GAAQ,EAEhB,CAnBA,CAoBJ,EAuCAyF,EAAKnN,UAAUuN,SAzGf,SAAkBb,EAAUc,GACxB,GAAId,EAAJ,CAIA,GAAGlc,KAAK2B,MAGJ,OAFA3B,KAAKmb,QAAS,OACdnb,KAAKib,MAAQiB,EAASe,MAI1B,IACI5f,EADA6f,EAAUhB,EAASe,KAChBxf,EAAMyf,EAAQxf,OACrB,IAAIL,EAAE,EAAGA,EAAEI,EAAKJ,GAAI,EAAE,CAIlB,GAHA6f,EAAQ7f,GAAG8d,QAAS,EACpB+B,EAAQ7f,GAAGse,SAAW5B,EAAUmD,EAAQ7f,GAAGgf,QAAQ,aACnDa,EAAQ7f,GAAGue,SAAW7B,EAAUmD,EAAQ7f,GAAGgf,QAAQ,cAC/Ca,EAAQ7f,GAAG8f,OAET,GAA0B,MAAvBD,EAAQ7f,GAAG+d,SAAyC,IAAtB8B,EAAQ7f,GAAGge,OAAa,CAC3D,IAAIrZ,EAAImY,SAASpJ,cAAc,SAC/B/O,EAAE/B,KAAO,WACT+B,EAAEsY,UAAY,4BAAiC4C,EAAQ7f,GAAGgf,QAAQ,mCAAmCa,EAAQ7f,GAAG8f,MAAM,OACtHH,EAAKpC,YAAY5Y,EACrB,MAAO,GAA0B,MAAvBkb,EAAQ7f,GAAG+d,SAAyC,IAAtB8B,EAAQ7f,GAAGge,OAAa,CAE5D,IAAI9U,EAAI4T,SAASpJ,cAAc,QAC/BxK,EAAEtG,KAAO,WACTsG,EAAE6W,IAAM,aACR7W,EAAE8W,KAAOH,EAAQ7f,GAAG8f,MACpBH,EAAKpC,YAAYrU,EACrB,MAAO,GAA0B,MAAvB2W,EAAQ7f,GAAG+d,SAAyC,IAAtB8B,EAAQ7f,GAAGge,OAAa,CAE5D,IAAIiC,EAAKnD,SAASpJ,cAAc,UAChCuM,EAAGC,aAAa,MAAML,EAAQ7f,GAAG8f,OACjCH,EAAKpC,YAAY0C,EACrB,OAlBIJ,EAAQ7f,GAAG8d,QAAS,EAmBxB+B,EAAQ7f,GAAGmgB,OAASxB,EAAagB,EAAKE,EAAQ7f,IAC9C2C,KAAKib,MAAM9Z,KAAK+b,EAAQ7f,GAC5B,CACA2d,EAAiB3Z,KAAKrB,KAAtBgb,EApCA,MAFIhb,KAAKmb,QAAS,CAuCtB,EAiEAwB,EAAKnN,UAAUiO,YAtCf,SAAqBC,EAAMhf,EAAOsb,GAE9B,IADA,IAAI3c,EAAI,EAAGI,EAAMuC,KAAK2B,MAAMjE,OACrBL,EAAII,GAAK,CACZ,GAAGuC,KAAK2B,MAAMtE,GAAGyf,KAAOY,GAAQ1d,KAAK2B,MAAMtE,GAAGqB,QAAUA,GAASsB,KAAK2B,MAAMtE,GAAGgf,UAAYrC,EACvF,OAAOha,KAAK2B,MAAMtE,GAEtBA,GAAI,CACR,CACJ,EA+BAsf,EAAKnN,UAAUmO,cArBf,SAAuBC,GAEnB,IADA,IAAIvgB,EAAI,EAAGI,EAAMuC,KAAKib,MAAMvd,OACtBL,EAAEI,GAAI,CACR,GAAGuC,KAAKib,MAAM5d,GAAGwgB,QAAUD,EACvB,OAAO5d,KAAKib,MAAM5d,GAEtBA,GAAK,CACT,CACA,MAAO,YACX,EAaAsf,EAAKnN,UAAUsO,YA9Bf,SAAqBJ,EAAMK,EAAUC,GAIjC,OAHehe,KAAK2d,cAAcI,GACXP,OAERM,YAAYJ,GAAM3S,MAAMiT,EAAK,GAEhD,EA0BOrB,CAEX,CApNkB,GAqNdsB,gBAAmB,WAEnB,IAAIC,GAAa,OAEjB,SAASC,EAAiBC,EAAUC,EAAgBC,EAAeC,GAC/D,IACIC,EADAC,EAAaze,KAAKye,WAEnBH,EAAchN,cAAgBxT,QAC7B0gB,EAAW1gB,MAAMC,MAAM,KAAK,CAACL,OAAO4gB,EAAc5gB,UAMtD,IAJA,IAEIkW,EAAS8K,EAwBTpY,EAAG6Q,EAAKtE,EAAKqE,EAAM7Q,EAAGsY,EA1BtBthB,EAAIghB,EACJ5gB,EAAMuC,KAAK4e,UAAUlhB,OAAQ,EAAEW,GAAO,EAGpCA,GAAK,CAGP,GAFAuV,EAAU5T,KAAK4e,UAAUvhB,GACzBqhB,EAAc1e,KAAK4e,UAAUvhB,EAAE,GAC5BA,GAAKI,EAAI,GAAK2gB,GAAYM,EAAY5e,EAAI2e,EAAW,CACjD7K,EAAQ7R,IACP6R,EAAU8K,GAEdL,EAAiB,EACjB,KACJ,CACA,GAAIK,EAAY5e,EAAI2e,EAAcL,EAAS,CACvCC,EAAiBhhB,EACjB,KACJ,CACGA,EAAII,EAAM,EACTJ,GAAK,GAELghB,EAAiB,EACjBhgB,GAAO,EAEf,CAGA,GAAGuV,EAAQC,GAAG,CAEND,EAAQI,YACR2C,IAAIhD,gBAAgBC,GAExB,IAAII,EAAaJ,EAAQI,WACzB,GAAGoK,GAAYM,EAAY5e,EAAE2e,GAAcL,EAAWxK,EAAQ9T,EAAE2e,EAAW,CACvE,IAAII,EAAMT,GAAYM,EAAY5e,EAAE2e,EAAazK,EAAW7E,OAAOzR,OAAS,EAAI,EAEhF,IADAyZ,EAAOnD,EAAW7E,OAAO0P,GAAK5L,MAAMvV,OAChC4I,EAAI,EAAGA,EAAI6Q,EAAM7Q,GAAK,EACtBkY,EAASlY,GAAK0N,EAAW7E,OAAO0P,GAAK5L,MAAM3M,GAE/CiY,EAAQO,gBAAkB,IAC9B,KAAK,CACElL,EAAQmL,OACPJ,EAAM/K,EAAQmL,QAEdJ,EAAM5Q,cAAciR,gBAAgBpL,EAAQ/P,EAAEwF,EAAEuK,EAAQ/P,EAAEyF,EAAEsK,EAAQvW,EAAEgM,EAAEuK,EAAQvW,EAAEiM,EAAEsK,EAAQhU,GAAG2P,IAC/FqE,EAAQmL,OAASJ,GAErB9L,EAAO8L,GAAKP,GAAUxK,EAAQ9T,EAAE2e,KAAeC,EAAY5e,EAAE2e,GAAa7K,EAAQ9T,EAAE2e,KACpF,IAEIQ,EAFAC,EAAiBlL,EAAWV,cAAcT,EAG1CG,EAAgBuL,EAAQY,UAAYf,GAAYG,EAAQO,kBAAoB9K,EAAcuK,EAAQa,iBAAmB,EAIzH,IAHA/Y,EAAMkY,EAAQY,UAAYf,GAAYG,EAAQO,kBAAoB9K,EAAcuK,EAAQc,WAAa,EACrGhhB,GAAO,EACP6Y,EAAOlD,EAAW7E,OAAOzR,OACnBW,GAAK,CAEP,GADA2U,GAAcgB,EAAW7E,OAAO9I,GAAGoN,cACb,IAAnByL,GAAiC,IAATrM,GAAcxM,GAAK2N,EAAW7E,OAAOzR,OAAS,EAAE,CAEvE,IADAyZ,EAAOnD,EAAW7E,OAAO9I,GAAG4M,MAAMvV,OAC9B4I,EAAE,EAAEA,EAAE6Q,EAAK7Q,GAAG,EACdkY,EAASlY,GAAK0N,EAAW7E,OAAO9I,GAAG4M,MAAM3M,GAE7C,KACJ,CAAM,GAAG4Y,GAAkBlM,GAAekM,EAAiBlM,EAAcgB,EAAW7E,OAAO9I,EAAE,GAAGoN,cAAc,CAG1G,IAFAwL,GAAeC,EAAelM,GAAcgB,EAAW7E,OAAO9I,EAAE,GAAgB,cAChF8Q,EAAOnD,EAAW7E,OAAO9I,GAAG4M,MAAMvV,OAC9B4I,EAAE,EAAEA,EAAE6Q,EAAK7Q,GAAG,EACdkY,EAASlY,GAAK0N,EAAW7E,OAAO9I,GAAG4M,MAAM3M,IAAM0N,EAAW7E,OAAO9I,EAAE,GAAG4M,MAAM3M,GAAK0N,EAAW7E,OAAO9I,GAAG4M,MAAM3M,IAAI2Y,EAEpH,KACJ,CACG5Y,EAAI6Q,EAAO,EACV7Q,GAAK,EAELhI,GAAO,CAEf,CACAkgB,EAAQc,WAAahZ,EACrBkY,EAAQa,iBAAmBpM,EAAcgB,EAAW7E,OAAO9I,GAAGoN,cAC9D8K,EAAQO,gBAAkB9K,CAC9B,CACJ,KAAK,CACD,IAAIsL,EAAKC,EAAKC,EAAIC,EAAKC,EAEvB,IADAjiB,EAAMmW,EAAQ5R,EAAEtE,OACZL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EAAE,CAoCf,GAnCiB,IAAduW,EAAQ7R,IACJqc,GAAYM,EAAY5e,EAAE2e,EACzB5L,EAAO,EACFuL,EAAWxK,EAAQ9T,EAAE2e,EAC1B5L,EAAO,GAEJe,EAAQ/P,EAAEwF,EAAEiI,cAAgBxT,OACvB8V,EAAQmL,SACRnL,EAAQmL,OAAS,IAEhBnL,EAAQmL,OAAO1hB,GAQhBshB,EAAM/K,EAAQmL,OAAO1hB,IAPrBiiB,EAAO1L,EAAQ/P,EAAEwF,EAAEhM,IAAMuW,EAAQ/P,EAAEwF,EAAE,GACrCkW,EAAO3L,EAAQ/P,EAAEyF,EAAEjM,IAAMuW,EAAQ/P,EAAEyF,EAAE,GACrCkW,EAAM5L,EAAQvW,EAAEgM,EAAEhM,IAAMuW,EAAQvW,EAAEgM,EAAE,GACpCoW,EAAM7L,EAAQvW,EAAEiM,EAAEjM,IAAMuW,EAAQvW,EAAEiM,EAAE,GACpCqV,EAAM5Q,cAAciR,gBAAgBM,EAAKC,EAAKC,EAAIC,GAAKlQ,IACvDqE,EAAQmL,OAAO1hB,GAAKshB,IAKnB/K,EAAQmL,OAQTJ,EAAM/K,EAAQmL,QAPdO,EAAO1L,EAAQ/P,EAAEwF,EACjBkW,EAAO3L,EAAQ/P,EAAEyF,EACjBkW,EAAM5L,EAAQvW,EAAEgM,EAChBoW,EAAM7L,EAAQvW,EAAEiM,EAChBqV,EAAM5Q,cAAciR,gBAAgBM,EAAKC,EAAKC,EAAIC,GAAKlQ,IACvDqE,EAAQmL,OAASJ,GAKzB9L,EAAO8L,GAAKP,GAAUxK,EAAQ9T,EAAE2e,KAAeC,EAAY5e,EAAE2e,GAAa7K,EAAQ9T,EAAE2e,OAGzFze,KAAK2f,IAAoB,IAAd/L,EAAQ7R,EAAQ,CAC1B,IAAI6d,EAAQhM,EAAQ5R,EAAE3E,GAClBwiB,EAAOjM,EAAQxN,EAAE/I,GAClBuiB,EAAMC,GAAQ,IACbD,GAAS,IACHA,EAAMC,EAAO,MACnBD,GAAS,KAEbF,EAAWE,GAAOC,EAAKD,GAAO/M,CAClC,MACI6M,EAAyB,IAAd9L,EAAQ7R,EAAU6R,EAAQ5R,EAAE3E,GAAKuW,EAAQ5R,EAAE3E,IAAIuW,EAAQxN,EAAE/I,GAAGuW,EAAQ5R,EAAE3E,IAAIwV,EAE9E,IAARpV,EACC+gB,EAAWkB,EAEXlB,EAASnhB,GAAKqiB,CAEtB,CACJ,CACA,MAAO,CACHI,MAAOtB,EACPH,eAAgBA,EAExB,CAEA,SAAS0B,IACL,GAAG/f,KAAKggB,KAAKC,WAAWC,UAAYlgB,KAAKkgB,QAAzC,CAGAlgB,KAAKmgB,KAAM,EACX,IAAI/B,EAAWpe,KAAKogB,KAAKC,cAAgBrgB,KAAKye,WAC1C1C,EAAW/b,KAAK4e,UAAU,GAAG9e,EAAEE,KAAKye,WACpC6B,EAAUtgB,KAAK4e,UAAU5e,KAAK4e,UAAUlhB,OAAQ,GAAGoC,EAAEE,KAAKye,WAC9D,KAAKL,IAAape,KAAKugB,SAASpB,WAAcnf,KAAKugB,SAASpB,YAAcjB,IAAele,KAAKugB,SAASpB,WAAamB,GAAWlC,GAAYkC,GAAatgB,KAAKugB,SAASpB,UAAYpD,GAAYqC,EAAWrC,IAAa,CAClN,IAAI1e,EAAI2C,KAAKugB,SAASpB,UAAYf,EAAWpe,KAAKugB,SAASC,UAAY,EACnEC,EAAezgB,KAAKme,iBAAiBC,EAAU/gB,EAAG2C,KAAK0gB,GAAI1gB,KAAKugB,UAEpE,GADAvgB,KAAKugB,SAASC,UAAYC,EAAapC,eACpCre,KAAK0gB,GAAGpP,cAAgBxT,MAEvB,IADAT,EAAI,EACEA,EAAE2C,KAAKiC,EAAEvE,QACXsC,KAAK0gB,GAAGrjB,GAAKojB,EAAaX,MAAMziB,GAChC2C,KAAKiC,EAAE5E,GAAK2C,KAAK2gB,KAAO3gB,KAAK0gB,GAAGrjB,GAAK2C,KAAK2gB,KAAO3gB,KAAK0gB,GAAGrjB,GACtD2C,KAAK4gB,WAAWvjB,KAAO2C,KAAK0gB,GAAGrjB,KAC9B2C,KAAKmgB,KAAM,EACXngB,KAAK4gB,WAAWvjB,GAAK2C,KAAK0gB,GAAGrjB,IAEjCA,GAAK,OAGT2C,KAAK0gB,GAAKD,EAAaX,MACvB9f,KAAKiC,EAAIjC,KAAK2gB,KAAO3gB,KAAK0gB,GAAG1gB,KAAK2gB,KAAO3gB,KAAK0gB,GAC3C1gB,KAAK4gB,YAAc5gB,KAAK0gB,KACvB1gB,KAAKmgB,KAAM,EACXngB,KAAK4gB,WAAa5gB,KAAK0gB,GAInC,CACA1gB,KAAKugB,SAASpB,UAAYf,EAC1Bpe,KAAKkgB,QAAUlgB,KAAKggB,KAAKC,WAAWC,OA/BpC,CAgCJ,CAEA,SAASW,IAAa,CAEtB,SAASC,EAAcd,EAAK5I,EAAMuJ,GAC9B3gB,KAAK2gB,KAAOA,EACZ3gB,KAAKiC,EAAI0e,EAAOvJ,EAAK9Q,EAAIqa,EAAOvJ,EAAK9Q,EACrCtG,KAAK0gB,GAAKtJ,EAAK9Q,EACftG,KAAKmgB,KAAM,EACXngB,KAAKogB,KAAOJ,EAAKI,KACjBpgB,KAAKsG,GAAI,EACTtG,KAAK+gB,IAAK,EACV/gB,KAAKghB,IAAM,EACXhhB,KAAKiE,SAAW4c,CACpB,CAEA,SAASI,EAAyBjB,EAAK5I,EAAMuJ,GACzC3gB,KAAK2gB,KAAOA,EACZ3gB,KAAKoX,KAAOA,EACZpX,KAAKmgB,KAAM,EACXngB,KAAKogB,KAAOJ,EAAKI,KACjBpgB,KAAKsG,GAAI,EACTtG,KAAK+gB,IAAK,EACV/gB,KAAKkgB,SAAW,EAChBlgB,KAAKiC,EAAInE,MAAMC,MAAM,KAAM,CAACL,OAAO0Z,EAAK9Q,EAAE5I,SAC1CsC,KAAK0gB,GAAK5iB,MAAMC,MAAM,KAAM,CAACL,OAAO0Z,EAAK9Q,EAAE5I,SAC3CsC,KAAKkhB,UAAYpjB,MAAMC,MAAM,KAAM,CAACL,OAAO0Z,EAAK9Q,EAAE5I,SAClD,IAAIyM,EAAMrM,MAAMC,MAAM,KAAM,CAACL,OAAO0Z,EAAK9Q,EAAE5I,SAC3CsC,KAAKghB,IAAM7W,EAAIgX,KAAI,WAAc,OAAO,CAAE,IAC1C,IAAI9jB,EAAGI,EAAM2Z,EAAK9Q,EAAE5I,OACpB,IAAIL,EAAI,EAAEA,EAAEI,EAAIJ,GAAG,EACf2C,KAAKiC,EAAE5E,GAAKsjB,EAAOvJ,EAAK9Q,EAAEjJ,GAAKsjB,EAAOvJ,EAAK9Q,EAAEjJ,GAC7C2C,KAAK0gB,GAAGrjB,GAAK+Z,EAAK9Q,EAAEjJ,GAExB2C,KAAKiE,SAAW4c,CACpB,CAEA,SAASO,EAAuBpB,EAAM5I,EAAMuJ,GACxC3gB,KAAK4e,UAAYxH,EAAK9Q,EACtBtG,KAAKye,WAAauB,EAAK5I,KAAKiK,GAC5BrhB,KAAKkhB,WAAa,MAClBlhB,KAAK4gB,YAAc,MACnB5gB,KAAKkgB,SAAW,EAChBlgB,KAAKugB,SAAS,CAACpB,UAAUjB,EAAUsC,UAAU,GAC7CxgB,KAAKsG,GAAI,EACTtG,KAAK+gB,IAAK,EACV/gB,KAAKoX,KAAOA,EACZpX,KAAK2gB,KAAOA,EACZ3gB,KAAKggB,KAAOA,EACZhgB,KAAKogB,KAAOJ,EAAKI,KACjBpgB,KAAKiC,EAAI0e,EAAOvJ,EAAK9Q,EAAE,GAAGtE,EAAE,GAAG2e,EAAOvJ,EAAK9Q,EAAE,GAAGtE,EAAE,GAClDhC,KAAK0gB,GAAKtJ,EAAK9Q,EAAE,GAAGtE,EAAE,GACtBhC,KAAKiE,SAAW8b,EAChB/f,KAAKme,iBAAmBA,CAC5B,CAEA,SAASmD,EAAkCtB,EAAM5I,EAAMuJ,GACnD,IAAItjB,EACA2E,EAAGoE,EAAEyN,EAAGC,EADLrW,EAAM2Z,EAAK9Q,EAAE5I,OAEpB,IAAIL,EAAE,EAAEA,EAAEI,EAAI,EAAEJ,GAAG,EACZ+Z,EAAK9Q,EAAEjJ,GAAGwW,IAAMuD,EAAK9Q,EAAEjJ,GAAG2E,GAAKoV,EAAK9Q,EAAEjJ,GAAG+I,IACxCpE,EAAIoV,EAAK9Q,EAAEjJ,GAAG2E,EACdoE,EAAIgR,EAAK9Q,EAAEjJ,GAAG+I,EACdyN,EAAKuD,EAAK9Q,EAAEjJ,GAAGwW,GACfC,EAAKsD,EAAK9Q,EAAEjJ,GAAGyW,IACE,IAAb9R,EAAEtE,SAAkBsE,EAAE,KAAOoE,EAAE,IAAMpE,EAAE,KAAOoE,EAAE,KAAOuQ,IAAI7E,cAAc9P,EAAE,GAAGA,EAAE,GAAGoE,EAAE,GAAGA,EAAE,GAAGpE,EAAE,GAAK6R,EAAG,GAAG7R,EAAE,GAAK6R,EAAG,KAAO8C,IAAI7E,cAAc9P,EAAE,GAAGA,EAAE,GAAGoE,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAK0N,EAAG,GAAG1N,EAAE,GAAK0N,EAAG,KAAsB,IAAb9R,EAAEtE,SAAkBsE,EAAE,KAAOoE,EAAE,IAAMpE,EAAE,KAAOoE,EAAE,IAAMpE,EAAE,KAAOoE,EAAE,KAAOuQ,IAAIlB,cAAczT,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGoE,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGpE,EAAE,GAAK6R,EAAG,GAAG7R,EAAE,GAAK6R,EAAG,GAAG7R,EAAE,GAAK6R,EAAG,KAAO8C,IAAIlB,cAAczT,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGoE,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAK0N,EAAG,GAAG1N,EAAE,GAAK0N,EAAG,GAAG1N,EAAE,GAAK0N,EAAG,OACxbsD,EAAK9Q,EAAEjJ,GAAGwW,GAAK,KACfuD,EAAK9Q,EAAEjJ,GAAGyW,GAAK,OAI3B9T,KAAK4e,UAAYxH,EAAK9Q,EACtBtG,KAAKye,WAAauB,EAAK5I,KAAKiK,GAC5BrhB,KAAKsG,GAAI,EACTtG,KAAK+gB,IAAK,EACV/gB,KAAK2gB,KAAOA,EACZ3gB,KAAKggB,KAAOA,EACZhgB,KAAKogB,KAAOJ,EAAKI,KACjBpgB,KAAKugB,SAAS,CAACpB,UAAUjB,EAAUsC,UAAU,GAC7CxgB,KAAKiE,SAAW8b,EAChB/f,KAAKme,iBAAmBA,EACxBne,KAAKkgB,SAAW,EAChBlgB,KAAKiC,EAAInE,MAAMC,MAAM,KAAM,CAACL,OAAO0Z,EAAK9Q,EAAE,GAAGtE,EAAEtE,SAC/CsC,KAAK0gB,GAAK5iB,MAAMC,MAAM,KAAM,CAACL,OAAO0Z,EAAK9Q,EAAE,GAAGtE,EAAEtE,SAChDsC,KAAKkhB,UAAYpjB,MAAMC,MAAM,KAAM,CAACL,OAAO0Z,EAAK9Q,EAAE,GAAGtE,EAAEtE,SACvDsC,KAAK4gB,WAAa9iB,MAAMC,MAAM,KAAM,CAACL,OAAO0Z,EAAK9Q,EAAE,GAAGtE,EAAEtE,QAC5D,CAEA,IAAI6jB,EAAqB,WACrB,SAASC,IACL,OAAGxhB,KAAKqC,EACGof,gBAAgBzhB,KAAKqC,GAErB,CAACrC,KAAK0hB,GAAGzf,EAAGjC,KAAK2hB,GAAG1f,EAAGjC,KAAK4hB,GAAK5hB,KAAK4hB,GAAG3f,EAAI,EAE5D,CACA,SAAS4f,IACL,OAAOJ,gBAAgBzhB,KAAK0hB,GAChC,CACA,SAASI,IACL,OAAOL,gBAAgBzhB,KAAK2hB,GAChC,CAIA,SAASI,IACL,OAAON,gBAAgBzhB,KAAKmG,EAChC,CACA,SAAS6b,IACL,OAAOP,gBAAgBzhB,KAAKiiB,GAChC,CACA,SAASC,IACL,OAAGliB,KAAKkC,EACGuf,gBAAgBzhB,KAAKkC,EAAG,EAAEjE,WAE1BwjB,gBAAgBzhB,KAAKmiB,GAAI,EAAElkB,UAE1C,CACA,SAASmkB,IACL,OAAOX,gBAAgBzhB,KAAKgC,EAAG,IACnC,CACA,SAASqgB,IACL,OAAOZ,gBAAgBzhB,KAAK6D,EAAG,IACnC,CACA,SAASye,IACL,OAAOb,gBAAgBzhB,KAAKuiB,GAChC,CACA,SAASC,IACL,OAAOf,gBAAgBzhB,KAAKyiB,GAChC,CACA,SAASC,EAAcC,GACnB,IAAItlB,EAAGI,EAAMuC,KAAKgE,kBAAkBtG,OACpC,IAAIL,EAAI,EAAGA,EAAII,EAAKJ,GAAK,EACrB2C,KAAKgE,kBAAkB3G,GAAG4G,WACtBjE,KAAKgE,kBAAkB3G,GAAG8iB,MAC1BngB,KAAKmgB,KAAM,GAGfngB,KAAKmG,GACLwc,EAAIlc,WAAWzG,KAAKmG,EAAElE,EAAE,IAAKjC,KAAKmG,EAAElE,EAAE,GAAIjC,KAAKmG,EAAElE,EAAE,IAEnDjC,KAAKgC,GACL2gB,EAAI5c,MAAM/F,KAAKgC,EAAEC,EAAE,GAAIjC,KAAKgC,EAAEC,EAAE,GAAIjC,KAAKgC,EAAEC,EAAE,IAE7CjC,KAAKkC,EACLygB,EAAI9d,QAAQ7E,KAAKkC,EAAED,GAEnB0gB,EAAIrd,SAAStF,KAAKmiB,GAAGlgB,GAAGoD,QAAQrF,KAAK4iB,GAAG3gB,GAAGmD,QAAQpF,KAAK6iB,GAAG5gB,GAAGqD,SAAStF,KAAKiiB,GAAGhgB,EAAE,IAAIoD,QAAQrF,KAAKiiB,GAAGhgB,EAAE,IAAImD,QAAQpF,KAAKiiB,GAAGhgB,EAAE,IAE7HjC,KAAKoX,KAAK/U,EAAEL,EACRhC,KAAKoX,KAAK/U,EAAEkH,EACZoZ,EAAIlc,UAAUzG,KAAK0hB,GAAGzf,EAAGjC,KAAK2hB,GAAG1f,GAAIjC,KAAK4hB,GAAG3f,GAE7C0gB,EAAIlc,UAAUzG,KAAK0hB,GAAGzf,EAAGjC,KAAK2hB,GAAG1f,EAAG,GAGxC0gB,EAAIlc,UAAUzG,KAAKqC,EAAEJ,EAAE,GAAIjC,KAAKqC,EAAEJ,EAAE,IAAKjC,KAAKqC,EAAEJ,EAAE,GAE1D,CACA,SAAS6gB,IACL,GAAI9iB,KAAKggB,KAAKC,WAAWC,UAAYlgB,KAAKkgB,QAA1C,CAIAlgB,KAAKmgB,KAAM,EACX,IAAI9iB,EAyBQ0lB,EAAGC,EAzBRvlB,EAAMuC,KAAKgE,kBAAkBtG,OAEpC,IAAIL,EAAI,EAAGA,EAAII,EAAKJ,GAAK,EACrB2C,KAAKgE,kBAAkB3G,GAAG4G,WACtBjE,KAAKgE,kBAAkB3G,GAAG8iB,MAC1BngB,KAAKmgB,KAAM,GAGfngB,KAAKmgB,MACLngB,KAAKiC,EAAE0C,QACH3E,KAAKmG,GACLnG,KAAKiC,EAAEwE,WAAWzG,KAAKmG,EAAElE,EAAE,IAAKjC,KAAKmG,EAAElE,EAAE,GAAIjC,KAAKmG,EAAElE,EAAE,IAEvDjC,KAAKgC,GACJhC,KAAKiC,EAAE8D,MAAM/F,KAAKgC,EAAEC,EAAE,GAAIjC,KAAKgC,EAAEC,EAAE,GAAIjC,KAAKgC,EAAEC,EAAE,IAEhDjC,KAAKuiB,IACLviB,KAAKiC,EAAE6D,cAAc9F,KAAKuiB,GAAGtgB,EAAGjC,KAAKyiB,GAAGxgB,GAExCjC,KAAKkC,EACLlC,KAAKiC,EAAE4C,QAAQ7E,KAAKkC,EAAED,GAEtBjC,KAAKiC,EAAEqD,SAAStF,KAAKmiB,GAAGlgB,GAAGoD,QAAQrF,KAAK4iB,GAAG3gB,GAAGmD,QAAQpF,KAAK6iB,GAAG5gB,GAAGqD,SAAStF,KAAKiiB,GAAGhgB,EAAE,IAAIoD,QAAQrF,KAAKiiB,GAAGhgB,EAAE,IAAImD,QAAQpF,KAAKiiB,GAAGhgB,EAAE,IAEhIjC,KAAKijB,cAAgBjjB,KAAKqC,EAAEuc,WAAa5e,KAAKqC,EAAE6gB,iBAE5CljB,KAAKqC,EAAEke,SAASpB,UAAUnf,KAAKqC,EAAEoc,YAAcze,KAAKqC,EAAEuc,UAAU,GAAG9e,GACnEijB,EAAK/iB,KAAKqC,EAAE6gB,gBAAgBljB,KAAKqC,EAAEuc,UAAU,GAAG9e,EAAI,KAAQE,KAAKggB,KAAKC,WAAWkD,UAAU,GAC3FH,EAAKhjB,KAAKqC,EAAE6gB,eAAeljB,KAAKqC,EAAEuc,UAAU,GAAG9e,EAAIE,KAAKggB,KAAKC,WAAWkD,UAAW,IAC7EnjB,KAAKqC,EAAEke,SAASpB,UAAUnf,KAAKqC,EAAEoc,YAAcze,KAAKqC,EAAEuc,UAAU5e,KAAKqC,EAAEuc,UAAUlhB,OAAS,GAAGoC,GACnGijB,EAAK/iB,KAAKqC,EAAE6gB,eAAgBljB,KAAKqC,EAAEuc,UAAU5e,KAAKqC,EAAEuc,UAAUlhB,OAAS,GAAGoC,EAAIE,KAAKggB,KAAKC,WAAWkD,UAAY,GAC/GH,EAAKhjB,KAAKqC,EAAE6gB,gBAAgBljB,KAAKqC,EAAEuc,UAAU5e,KAAKqC,EAAEuc,UAAUlhB,OAAS,GAAGoC,EAAI,KAAQE,KAAKggB,KAAKC,WAAWkD,UAAW,KAEtHJ,EAAK/iB,KAAKqC,EAAEqe,GACZsC,EAAKhjB,KAAKqC,EAAE6gB,gBAAgBljB,KAAKqC,EAAEke,SAASpB,UAAUnf,KAAKqC,EAAEoc,WAAa,KAAQze,KAAKggB,KAAKC,WAAWkD,UAAWnjB,KAAKqC,EAAEoc,aAE7Hze,KAAKiC,EAAE4C,QAAQ1I,KAAKinB,MAAML,EAAG,GAAKC,EAAG,GAAID,EAAG,GAAKC,EAAG,MAErDhjB,KAAKoX,KAAK/U,EAAEL,EACRhC,KAAKoX,KAAK/U,EAAEkH,EACXvJ,KAAKiC,EAAEwE,UAAUzG,KAAK0hB,GAAGzf,EAAGjC,KAAK2hB,GAAG1f,GAAIjC,KAAK4hB,GAAG3f,GAEhDjC,KAAKiC,EAAEwE,UAAUzG,KAAK0hB,GAAGzf,EAAGjC,KAAK2hB,GAAG1f,EAAG,GAG3CjC,KAAKiC,EAAEwE,UAAUzG,KAAKqC,EAAEJ,EAAE,GAAGjC,KAAKqC,EAAEJ,EAAE,IAAIjC,KAAKqC,EAAEJ,EAAE,KAG3DjC,KAAKkgB,QAAUlgB,KAAKggB,KAAKC,WAAWC,OAnDpC,CAoDJ,CAEA,SAASmD,IACLrjB,KAAKsjB,UAAW,EAChBtjB,KAAKujB,GAAK,IAAI7e,OACV1E,KAAKsG,IACFtG,KAAKoX,KAAK/U,EAAEL,EACXhC,KAAKujB,GAAG9c,UAAUzG,KAAK0hB,GAAGzf,EAAEjC,KAAK2hB,GAAG1f,GAAGjC,KAAK4hB,GAAG3f,GAE/CjC,KAAKujB,GAAG9c,UAAUzG,KAAKqC,EAAEJ,EAAE,GAAGjC,KAAKqC,EAAEJ,EAAE,IAAIjC,KAAKqC,EAAEJ,EAAE,IAErDjC,KAAKkC,EACJlC,KAAKujB,GAAG1e,QAAQ7E,KAAKkC,EAAED,GAEvBjC,KAAKujB,GAAGne,SAASpF,KAAK6iB,GAAG5gB,GAAGoD,SAASrF,KAAK4iB,GAAG3gB,GAAGqD,QAAQtF,KAAKmiB,GAAGlgB,GAEjEjC,KAAKgC,GACJhC,KAAKujB,GAAGxd,MAAM/F,KAAKgC,EAAEC,EAAE,GAAGjC,KAAKgC,EAAEC,EAAE,GAAG,GAEvCjC,KAAKmG,GACJnG,KAAKujB,GAAG9c,WAAWzG,KAAKmG,EAAElE,EAAE,IAAIjC,KAAKmG,EAAElE,EAAE,GAAGjC,KAAKmG,EAAElE,EAAE,IAGjE,CAEA,SAASuhB,IAGT,CAEA,OAAO,SAA2BxD,EAAK5I,EAAKjN,GACxCnK,KAAKggB,KAAOA,EACZhgB,KAAKkgB,SAAW,EAChBlgB,KAAKC,KAAO,YACZD,KAAKgE,kBAAoB,GACzBhE,KAAKmgB,KAAM,EACXngB,KAAKoX,KAAOA,EACZpX,KAAKiE,SAAW6e,EAChB9iB,KAAK0iB,cAAgBA,EACrB1iB,KAAKqjB,YAAcA,EACnBrjB,KAAKwjB,WAAaA,EAClBxjB,KAAKiC,EAAI,IAAIyC,OACV0S,EAAK/U,EAAEL,GACNhC,KAAK0hB,GAAKzD,gBAAgBwF,QAAQzD,EAAK5I,EAAK/U,EAAEgH,EAAE,EAAE,EAAErJ,KAAKgE,mBACzDhE,KAAK2hB,GAAK1D,gBAAgBwF,QAAQzD,EAAK5I,EAAK/U,EAAEiH,EAAE,EAAE,EAAEtJ,KAAKgE,mBACtDoT,EAAK/U,EAAEkH,IACNvJ,KAAK4hB,GAAK3D,gBAAgBwF,QAAQzD,EAAK5I,EAAK/U,EAAEkH,EAAE,EAAE,EAAEvJ,KAAKgE,qBAG7DhE,KAAKqC,EAAI4b,gBAAgBwF,QAAQzD,EAAK5I,EAAK/U,EAAE,EAAE,EAAErC,KAAKgE,mBAEvDoT,EAAKlV,EACJlC,KAAKkC,EAAI+b,gBAAgBwF,QAAQzD,EAAM5I,EAAKlV,EAAG,EAAGjE,UAAW+B,KAAKgE,mBAC5DoT,EAAKyL,KACX7iB,KAAK6iB,GAAK5E,gBAAgBwF,QAAQzD,EAAM5I,EAAKyL,GAAI,EAAG5kB,UAAW+B,KAAKgE,mBACpEhE,KAAK4iB,GAAK3E,gBAAgBwF,QAAQzD,EAAM5I,EAAKwL,GAAI,EAAG3kB,UAAW+B,KAAKgE,mBACpEhE,KAAKmiB,GAAKlE,gBAAgBwF,QAAQzD,EAAM5I,EAAK+K,GAAI,EAAGlkB,UAAW+B,KAAKgE,mBACpEhE,KAAKiiB,GAAKhE,gBAAgBwF,QAAQzD,EAAM5I,EAAK6K,GAAI,EAAGhkB,UAAW+B,KAAKgE,mBAEpEhE,KAAKiiB,GAAGtC,IAAK,GAEdvI,EAAKmL,KACJviB,KAAKuiB,GAAKtE,gBAAgBwF,QAAQzD,EAAM5I,EAAKmL,GAAI,EAAGtkB,UAAW+B,KAAKgE,mBACpEhE,KAAKyiB,GAAKxE,gBAAgBwF,QAAQzD,EAAM5I,EAAKqL,GAAI,EAAGxkB,UAAW+B,KAAKgE,oBAErEoT,EAAKjR,IACJnG,KAAKmG,EAAI8X,gBAAgBwF,QAAQzD,EAAK5I,EAAKjR,EAAE,EAAE,EAAEnG,KAAKgE,oBAEvDoT,EAAKpV,IACJhC,KAAKgC,EAAIic,gBAAgBwF,QAAQzD,EAAK5I,EAAKpV,EAAE,EAAE,IAAKhC,KAAKgE,oBAE1DoT,EAAKvT,EACJ7D,KAAK6D,EAAIoa,gBAAgBwF,QAAQzD,EAAK5I,EAAKvT,EAAE,EAAE,IAAK7D,KAAKgE,mBAEzDhE,KAAK6D,EAAI,CAACsc,KAAI,EAAMle,EAAE,GAEvBjC,KAAKgE,kBAAkBtG,OACtByM,EAAIhJ,KAAKnB,OAENA,KAAKmG,GACJnG,KAAKiC,EAAEwE,WAAWzG,KAAKmG,EAAElE,EAAE,IAAIjC,KAAKmG,EAAElE,EAAE,GAAGjC,KAAKmG,EAAElE,EAAE,IAErDjC,KAAKgC,GACJhC,KAAKiC,EAAE8D,MAAM/F,KAAKgC,EAAEC,EAAE,GAAGjC,KAAKgC,EAAEC,EAAE,GAAGjC,KAAKgC,EAAEC,EAAE,IAE/CjC,KAAKuiB,IACJviB,KAAKiC,EAAE6D,cAAc9F,KAAKuiB,GAAGtgB,EAAEjC,KAAKyiB,GAAGxgB,GAExCjC,KAAKkC,EACJlC,KAAKiC,EAAE4C,QAAQ7E,KAAKkC,EAAED,GAEtBjC,KAAKiC,EAAEqD,SAAStF,KAAKmiB,GAAGlgB,GAAGoD,QAAQrF,KAAK4iB,GAAG3gB,GAAGmD,QAAQpF,KAAK6iB,GAAG5gB,GAAGqD,SAAStF,KAAKiiB,GAAGhgB,EAAE,IAAIoD,QAAQrF,KAAKiiB,GAAGhgB,EAAE,IAAImD,QAAQpF,KAAKiiB,GAAGhgB,EAAE,IAEjIjC,KAAKoX,KAAK/U,EAAEL,EACRoV,EAAK/U,EAAEkH,EACNvJ,KAAKiC,EAAEwE,UAAUzG,KAAK0hB,GAAGzf,EAAGjC,KAAK2hB,GAAG1f,GAAIjC,KAAK4hB,GAAG3f,GAEhDjC,KAAKiC,EAAEwE,UAAUzG,KAAK0hB,GAAGzf,EAAGjC,KAAK2hB,GAAG1f,EAAG,GAG3CjC,KAAKiC,EAAEwE,UAAUzG,KAAKqC,EAAEJ,EAAE,GAAGjC,KAAKqC,EAAEJ,EAAE,IAAIjC,KAAKqC,EAAEJ,EAAE,KAG3D1E,OAAOmmB,eAAe1jB,KAAM,WAAY,CAAEuP,IAAKiS,IAC/CjkB,OAAOmmB,eAAe1jB,KAAM,YAAa,CAAEuP,IAAKsS,IAChDtkB,OAAOmmB,eAAe1jB,KAAM,YAAa,CAAEuP,IAAKuS,IAChDvkB,OAAOmmB,eAAe1jB,KAAM,cAAe,CAAEuP,IAAKyS,IAClDzkB,OAAOmmB,eAAe1jB,KAAM,cAAe,CAAEuP,IAAKwS,IAClDxkB,OAAOmmB,eAAe1jB,KAAM,WAAY,CAAEuP,IAAK2S,IAC/C3kB,OAAOmmB,eAAe1jB,KAAM,QAAS,CAAEuP,IAAK6S,IAC5C7kB,OAAOmmB,eAAe1jB,KAAM,UAAW,CAAEuP,IAAK8S,IAC9C9kB,OAAOmmB,eAAe1jB,KAAM,OAAQ,CAAEuP,IAAK+S,IAC3C/kB,OAAOmmB,eAAe1jB,KAAM,WAAY,CAAEuP,IAAKiT,GACnD,CACJ,CAhPwB,GAkPxB,SAASiB,EAAQzD,EAAK5I,EAAKnX,EAAM0gB,EAAMxW,GACnC,IAAI9H,EACJ,GAAY,IAATpC,EACCoC,EAAI,IAAIkf,EAAkBvB,EAAM5I,EAAMjN,QACnC,GAAc,IAAXiN,EAAKjR,EAEP9D,EADQ,IAATpC,EACK,IAAI6gB,EAAcd,EAAK5I,EAAKuJ,GAE5B,IAAIM,EAAyBjB,EAAK5I,EAAMuJ,QAE7C,GAAc,IAAXvJ,EAAKjR,EAEP9D,EADQ,IAATpC,EACK,IAAImhB,EAAuBpB,EAAK5I,EAAKuJ,GAErC,IAAIW,EAAkCtB,EAAK5I,EAAMuJ,QAEtD,GAAIvJ,EAAK9Q,EAAE5I,OAEZ,GAAyB,iBAAf0Z,EAAK9Q,EAAE,GACnBjE,EAAI,IAAI4e,EAAyBjB,EAAK5I,EAAMuJ,QAE5C,OAAO1gB,GACH,KAAK,EACDoC,EAAI,IAAI+e,EAAuBpB,EAAK5I,EAAKuJ,GACzC,MACJ,KAAK,EACDte,EAAI,IAAIif,EAAkCtB,EAAK5I,EAAKuJ,QAT5Dte,EAAI,IAAIye,EAAcd,EAAK5I,EAAMuJ,GAgBrC,OAHGte,EAAEiE,GACD6D,EAAIhJ,KAAKkB,GAENA,CACX,CAEA,IAAIshB,EAAmB,WAEnB,SAAS1f,EAAS2f,GAId,GAHA5jB,KAAKgM,KAAK/H,WACVjE,KAAK6jB,MAAO,EACZ7jB,KAAK8jB,MAAO,EACT9jB,KAAKgM,KAAKmU,KAAOyD,EAAY,CAC5B,IAAIvmB,EACAsjB,EAAM/iB,EADHH,EAAkB,EAAZuC,KAAKoX,KAAK/U,EAEvB,IAAIhF,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACbsjB,EAAOtjB,EAAE,GAAM,EAAI,IAAM,IACzBO,EAAMzB,KAAKC,MAAM4D,KAAKgM,KAAK/J,EAAE5E,GAAGsjB,GAC7B3gB,KAAKH,EAAExC,KAAOO,IACboC,KAAKH,EAAExC,GAAKO,EACZoC,KAAK6jB,MAAO,GAGpB,GAAG7jB,KAAK6D,EAAEnG,OAEN,IADAD,EAAMuC,KAAKgM,KAAK/J,EAAEvE,OACdL,EAAc,EAAZ2C,KAAKoX,KAAK/U,EAAIhF,EAAEI,EAAIJ,GAAG,EACzBsjB,EAAOtjB,EAAE,GAAM,EAAI,IAAM,EACzBO,EAAMP,EAAE,GAAM,EAAKlB,KAAKC,MAAqB,IAAf4D,KAAKgM,KAAK/J,EAAE5E,IAAQ2C,KAAKgM,KAAK/J,EAAE5E,GAC3D2C,KAAK6D,EAAExG,EAAc,EAAZ2C,KAAKoX,KAAK/U,KAASzE,IAC3BoC,KAAK6D,EAAExG,EAAc,EAAZ2C,KAAKoX,KAAK/U,GAAOzE,EAC1BoC,KAAK8jB,MAAO,EAI5B,CAEJ,CAEA,SAASC,EAAa/D,EAAK5I,EAAKjN,GAC5BnK,KAAKgM,KAAOyX,EAAQzD,EAAK5I,EAAK9Q,EAAE,EAAE,KAAK,IACvCtG,KAAKoX,KAAOA,EACZpX,KAAKsG,EAAItG,KAAKgM,KAAK1F,EACnBtG,KAAKH,EAAI/B,MAAMC,MAAM,KAAK,CAACL,OAAc,EAAP0Z,EAAK/U,IACvC,IAAI2hB,EAAU5M,EAAK9Q,EAAEA,EAAE,GAAGtE,EAAKoV,EAAK9Q,EAAEA,EAAE,GAAGtE,EAAEtE,OAAgB,EAAP0Z,EAAK/U,EAAO+U,EAAK9Q,EAAEA,EAAE5I,OAAgB,EAAP0Z,EAAK/U,EACzFrC,KAAK6D,EAAI/F,MAAMC,MAAM,KAAK,CAACL,OAAOsmB,IAClChkB,KAAK6jB,MAAO,EACZ7jB,KAAK8jB,MAAO,EACZ9jB,KAAKiE,SAAWA,EACbjE,KAAKgM,KAAK1F,GACT6D,EAAIhJ,KAAKnB,MAEbA,KAAKiE,UAAS,EAClB,CAEA,OAAO,SAAyB+b,EAAK5I,EAAKjN,GACtC,OAAO,IAAI4Z,EAAa/D,EAAK5I,EAAKjN,EACtC,CACJ,CAnDsB,GAwDlB8Z,EAAgB,WAEhB,SAASnB,EAAYc,GACjB,IAAIvmB,EAAI,EAAGI,EAAMuC,KAAKkkB,UAAUxmB,OAEhC,GAAGsC,KAAKggB,KAAKC,WAAWC,UAAYlgB,KAAKkgB,SAAY0D,EAArD,CAKA,IAFA5jB,KAAKmgB,KAAM,EACXngB,KAAKkgB,QAAUlgB,KAAKggB,KAAKC,WAAWC,QAC9B7iB,EAAEI,GAAI,CACR,GAAGuC,KAAKkkB,UAAU7mB,GAAGgF,EAAE8d,IAAI,CACvBngB,KAAKmgB,KAAM,EACX,KACJ,CACA9iB,GAAG,CACP,CACA,GAAG2C,KAAKmgB,KAAOyD,EAIX,IAHqB,QAAlB5jB,KAAKmkB,WACJnkB,KAAKokB,UAAY,IAEjB/mB,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACa,KAAvB2C,KAAKkkB,UAAU7mB,GAAGuC,EACI,QAAlBI,KAAKmkB,SACJnkB,KAAKokB,WAAa,IAAMpkB,KAAKkkB,UAAU7mB,GAAGgF,EAAEJ,EAE5CjC,KAAKokB,UAAU/mB,GAAK2C,KAAKkkB,UAAU7mB,GAAGgF,EAAEJ,EAG5CjC,KAAKqkB,WAAarkB,KAAKkkB,UAAU7mB,GAAGgF,EAAEJ,CAtBlD,CA0BJ,CAEA,OAAO,SAAS+d,EAAM5I,EAAK+M,EAAUngB,GACjChE,KAAKggB,KAAOA,EACZhgB,KAAKkgB,SAAW,EAChBlgB,KAAKkkB,UAAY,IAAIpmB,MAAMsZ,EAAK1Z,QAChCsC,KAAKmkB,SAAWA,EAChBnkB,KAAKmgB,KAAM,EACXngB,KAAKsG,GAAI,EACY,QAAlBtG,KAAKmkB,SACJnkB,KAAKokB,UAAY,GAGjBpkB,KAAKokB,UAAY,IAAItmB,MAAMsZ,EAAK1Z,OAAS,GAE7CsC,KAAKqkB,WAAa,EAClB,IAAIhnB,EAAsB2O,EAAnBvO,EAAM2Z,EAAK1Z,OAClB,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb2O,EAAOiS,gBAAgBwF,QAAQzD,EAAK5I,EAAK/Z,GAAG4E,EAAE,EAAG,EAAG+B,GACpDhE,KAAKsG,IAAI0F,EAAK1F,GAAWtG,KAAKsG,EAC9BtG,KAAKkkB,UAAU7mB,GAAK,CAACuC,EAAEwX,EAAK/Z,GAAGuC,EAAEyC,EAAE2J,GAEvChM,KAAKiE,SAAW6e,EACb9iB,KAAKsG,EACJtC,EAAkB7C,KAAKnB,MAEvBA,KAAKiE,UAAS,EAGtB,CACJ,CA/DmB,GAqEfqgB,EAAoB,WACpB,IAAIvnB,EAAMZ,KAAKY,IACXE,EAAMd,KAAKc,IACXJ,EAAQV,KAAKU,MACjB,SAAS0nB,EAAYC,GAEjB,GADAxkB,KAAKmgB,IAAMqE,IAAgB,EACxBxkB,KAAKgE,kBAAkBtG,OAAO,CAC7B,IAAIL,EAAGI,EAAMuC,KAAKgE,kBAAkBtG,OACpC,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb2C,KAAKgE,kBAAkB3G,GAAG4G,WACvBjE,KAAKgE,kBAAkB3G,GAAG8iB,MACzBngB,KAAKmgB,KAAM,EAGvB,CACA,IAAIsE,EAAazkB,KAAKggB,KAAK0E,aAAaC,YAAc3kB,KAAKggB,KAAK0E,aAAaC,YAAYpe,EAAE7I,OAAS,EACjG8mB,GAAgC,IAAhBxkB,KAAKoX,KAAKlV,IACzBlC,KAAKoG,EAAEnE,EAAIwiB,GAEf,IAAIG,EAA0B,IAAhB5kB,KAAKoX,KAAKlV,EAAU,EAAI,IAAMuiB,EACxC5gB,EAAI7D,KAAK6D,EAAE5B,EAAE2iB,EACb5iB,EAAIhC,KAAKgC,EAAEC,EAAE2iB,EAAU/gB,EACvBuC,EAAKpG,KAAKoG,EAAEnE,EAAE2iB,EAAW/gB,EAC7B,GAAG7B,EAAEoE,EAAE,CACH,IAAIye,EAAK7iB,EACTA,EAAIoE,EACJA,EAAIye,CACR,CACA7kB,KAAK8kB,OAAS9iB,EACdhC,KAAK+kB,OAAS3e,CAClB,CAEA,SAAS4e,EAAQnG,GAEb,IAAIoG,EAAQlX,cAAciR,gBAAgBhf,KAAKklB,GAAGjjB,EAAE,IAAI,EAAE,EAAEjC,KAAKmlB,GAAGljB,EAAE,IAAI,GAAGsN,IACzEoR,EAAO,EACP3e,EAAIhC,KAAK8kB,OACT1e,EAAIpG,KAAK+kB,OACT9kB,EAAOD,KAAKoX,KAAKuI,GACrB,GAAW,GAAR1f,EAMC0gB,EAAOsE,EAJHtE,EADDva,IAAMpE,EACE6c,GAAOzY,EAAI,EAAI,EAEfrJ,EAAI,EAAEE,EAAI,IAAKmJ,EAAEpE,IAAM6c,EAAI7c,IAAIoE,EAAEpE,GAAG,UAG7C,GAAW,GAAR/B,EAOL0gB,EAAOsE,EALHtE,EADDva,IAAMpE,EACE6c,GAAOzY,EAAI,EAAI,EAEf,EAAIrJ,EAAI,EAAEE,EAAI,IAAKmJ,EAAEpE,IAAM6c,EAAI7c,IAAIoE,EAAEpE,GAAG,UAIjD,GAAW,GAAR/B,EACFmG,IAAMpE,EACL2e,EAAO,GAEPA,EAAO5jB,EAAI,EAAEE,EAAI,IAAKmJ,EAAEpE,IAAM6c,EAAI7c,IAAIoE,EAAEpE,GAAG,KACnC,GACJ2e,GAAQ,EAERA,EAAO,EAAI,GAAGA,EAAK,IAG3BA,EAAOsE,EAAMtE,QACX,GAAW,GAAR1gB,EAAU,CACf,GAAGmG,IAAMpE,EACL2e,EAAO,MACN,CACD,IAAIyE,EAAMhf,EAAIpE,EAIVqH,GAAK+b,EAAI,GADbvG,EAAM5hB,EAAIF,EAAI,EAAE8hB,EAAI,GAAI7c,GAAGoE,EAAEpE,IAEzBmE,EAAIif,EAAI,EACZzE,EAAOxkB,KAAKM,KAAK,EAAK4M,EAAEA,GAAIlD,EAAEA,GAClC,CACAwa,EAAOsE,EAAMtE,EACjB,MAAiB,GAAR1gB,GACFmG,IAAMpE,EACL2e,EAAO,GAEP9B,EAAM5hB,EAAIF,EAAI,EAAE8hB,EAAI,GAAI7c,GAAGoE,EAAEpE,GAC7B2e,GAAQ,EAAGxkB,KAAK6I,IAAK7I,KAAK+B,GAAW,EAAR/B,KAAK+B,GAAK,GAAOkI,EAAEpE,KAAO,GAM3D2e,EAAOsE,EAAMtE,KAEV9B,GAAOhiB,EAAMmF,KAER2e,EADD9B,EAAI7c,EAAI,EACA,GAAKA,EAAI6c,GAET9hB,EAAI,EAAEE,EAAImJ,EAAEyY,EAAI,KAG/B8B,EAAOsE,EAAMtE,IAEjB,OAAOA,EAAK3gB,KAAKmG,EAAElE,CACvB,CAEA,OAAO,SAA0B+d,EAAK5I,EAAMjN,GACxCnK,KAAKmgB,KAAM,EACXngB,KAAKsG,GAAI,EACTtG,KAAKoX,KAAOA,EACZpX,KAAKgE,kBAAoB,GACzBhE,KAAKiE,SAAWsgB,EAChBvkB,KAAKglB,QAAUA,EACfhlB,KAAKggB,KAAOA,EACZhgB,KAAKogB,KAAOJ,EAAKI,KACjBpgB,KAAK8kB,OAAS,EACd9kB,KAAK+kB,OAAS,EACd/kB,KAAKgC,EAAIic,gBAAgBwF,QAAQzD,EAAK5I,EAAKpV,GAAK,CAACsE,EAAE,GAAG,EAAE,EAAEtG,KAAKgE,mBAE3DhE,KAAKoG,EADN,MAAOgR,EACG6G,gBAAgBwF,QAAQzD,EAAK5I,EAAKhR,EAAE,EAAE,EAAEpG,KAAKgE,mBAE7C,CAAC/B,EAAE,KAEhBjC,KAAK6D,EAAIoa,gBAAgBwF,QAAQzD,EAAK5I,EAAKvT,GAAK,CAACyC,EAAE,GAAG,EAAE,EAAEtG,KAAKgE,mBAC/DhE,KAAKmlB,GAAKlH,gBAAgBwF,QAAQzD,EAAK5I,EAAK+N,IAAM,CAAC7e,EAAE,GAAG,EAAE,EAAEtG,KAAKgE,mBACjEhE,KAAKklB,GAAKjH,gBAAgBwF,QAAQzD,EAAK5I,EAAK8N,IAAM,CAAC5e,EAAE,GAAG,EAAE,EAAEtG,KAAKgE,mBACjEhE,KAAKmG,EAAI8X,gBAAgBwF,QAAQzD,EAAK5I,EAAKjR,EAAE,EAAE,IAAKnG,KAAKgE,mBACtDhE,KAAKgE,kBAAkBtG,OACtByM,EAAIhJ,KAAKnB,MAETA,KAAKiE,UAEb,CACJ,CAnIuB,GAyInB+J,EAAK,CACLyV,QAASA,EACT4B,YA/IJ,SAAqBrF,EAAM5I,EAAK+M,EAAUngB,GACtC,OAAO,IAAIigB,EAAajE,EAAM5I,EAAK+M,EAAUngB,EACjD,EA8IIshB,oBAPJ,SAA6BtF,EAAM5I,EAAKjN,GACpC,OAAO,IAAIma,EAAiBtE,EAAM5I,EAAMjN,EAC5C,EAMIwZ,gBAAiBA,GAErB,OAAO3V,CACX,CAzzBsB,GA0zBtB,SAASuX,YACRvlB,KAAKH,GAAI,EACTG,KAAK6U,QAAU,EACf7U,KAAKwlB,WAAa,EAClBxlB,KAAKiC,EAAInE,MAAMC,MAAM,KAAK,CAACL,OAAOsC,KAAKwlB,aACvCxlB,KAAK6D,EAAI/F,MAAMC,MAAM,KAAK,CAACL,OAAOsC,KAAKwlB,aACvCxlB,KAAK3C,EAAIS,MAAMC,MAAM,KAAK,CAACL,OAAOsC,KAAKwlB,YACxC,CAEAD,UAAU/V,UAAUiW,YAAc,SAAShR,EAAQhX,GAClDuC,KAAKH,EAAI4U,EACTzU,KAAK0lB,UAAUjoB,GAEf,IADA,IAAIJ,EAAI,EACFA,EAAII,GACTuC,KAAKiC,EAAE5E,GAAK+M,WAAWC,WACvBrK,KAAK6D,EAAExG,GAAK+M,WAAWC,WACvBrK,KAAK3C,EAAEA,GAAK+M,WAAWC,WACvBhN,GAAK,CAEP,EAEAkoB,UAAU/V,UAAUkW,UAAY,SAASjoB,GACxC,KAAMuC,KAAKwlB,WAAa/nB,GACvBuC,KAAK2lB,oBAEN3lB,KAAK6U,QAAUpX,CAChB,EAEA8nB,UAAU/V,UAAUmW,kBAAoB,WACvC3lB,KAAKiC,EAAIjC,KAAKiC,EAAE2jB,OAAO9nB,MAAMC,MAAM,KAAK,CAACL,OAAOsC,KAAKwlB,cACrDxlB,KAAK3C,EAAI2C,KAAK3C,EAAEuoB,OAAO9nB,MAAMC,MAAM,KAAK,CAACL,OAAOsC,KAAKwlB,cACrDxlB,KAAK6D,EAAI7D,KAAK6D,EAAE+hB,OAAO9nB,MAAMC,MAAM,KAAK,CAACL,OAAOsC,KAAKwlB,cACrDxlB,KAAKwlB,YAAc,CACpB,EAEAD,UAAU/V,UAAUqW,QAAU,SAASxc,EAAGC,EAAGrJ,EAAM6lB,EAAK3X,GACvD,IAAIhE,EAKJ,OAJAnK,KAAK6U,QAAU1Y,KAAKY,IAAIiD,KAAK6U,QAASiR,EAAM,GACzC9lB,KAAK6U,SAAW7U,KAAKwlB,YACvBxlB,KAAK2lB,oBAEC1lB,GACN,IAAK,IACJkK,EAAMnK,KAAKiC,EACX,MACD,IAAK,IACJkI,EAAMnK,KAAK3C,EACX,MACD,IAAK,IACJ8M,EAAMnK,KAAK6D,IAGTsG,EAAI2b,IAAS3b,EAAI2b,KAAS3X,KAC7BhE,EAAI2b,GAAO1b,WAAWC,YAEvBF,EAAI2b,GAAK,GAAKzc,EACdc,EAAI2b,GAAK,GAAKxc,CACf,EAEAic,UAAU/V,UAAUuW,YAAc,SAASC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGP,EAAK3X,GACjEnO,KAAK6lB,QAAQG,EAAGC,EAAG,IAAIH,EAAK3X,GAC5BnO,KAAK6lB,QAAQK,EAAGC,EAAG,IAAIL,EAAK3X,GAC5BnO,KAAK6lB,QAAQO,EAAGC,EAAG,IAAIP,EAAK3X,EAC7B,EACA,IAAImY,qBAAwB,WAExB,IAAIpI,GAAa,OAEjB,SAASqI,EAAiBnI,EAAUC,EAAgBC,EAAekI,GAC/D,IAAIC,EAASC,EAASC,EACtB,GAAGvI,EAAWpe,KAAK4e,UAAU,GAAG9e,EAAEE,KAAKye,WACnCgI,EAAWzmB,KAAK4e,UAAU,GAAG5c,EAAE,GAC/B2kB,GAAS,EACTtI,EAAiB,OACf,GAAGD,GAAYpe,KAAK4e,UAAU5e,KAAK4e,UAAUlhB,OAAS,GAAGoC,EAAEE,KAAKye,WAE9DgI,EAD+C,IAAhDzmB,KAAK4e,UAAU5e,KAAK4e,UAAUlhB,OAAS,GAAGqE,EAC9B/B,KAAK4e,UAAU5e,KAAK4e,UAAUlhB,OAAS,GAAGsE,EAAE,GAE5ChC,KAAK4e,UAAU5e,KAAK4e,UAAUlhB,OAAS,GAAG0I,EAAE,GAE3DugB,GAAS,MACR,CAGD,IAFA,IAC+C/S,EAAQ8K,EAAarY,EAAG6Q,EAAM5Q,EAAG6Q,EAgB5EtE,EAjBAxV,EAAIghB,EACJ5gB,EAAMuC,KAAK4e,UAAUlhB,OAAQ,EAAEW,GAAO,EACpCA,IACFuV,EAAU5T,KAAK4e,UAAUvhB,MACzBqhB,EAAc1e,KAAK4e,UAAUvhB,EAAE,IACfyC,EAAIE,KAAKye,WAAcL,KAGpC/gB,EAAII,EAAM,EACTJ,GAAK,EAELgB,GAAO,EAOf,GAHAggB,EAAiBhhB,IADjBspB,EAAuB,IAAd/S,EAAQ7R,GAIN,CACP,GAAGqc,GAAYM,EAAY5e,EAAEE,KAAKye,WAC9B5L,EAAO,OACL,GAAGuL,EAAWxK,EAAQ9T,EAAEE,KAAKye,WAC/B5L,EAAO,MACN,CACD,IAAI8L,EACD/K,EAAQmL,OACPJ,EAAM/K,EAAQmL,QAEdJ,EAAM5Q,cAAciR,gBAAgBpL,EAAQ/P,EAAEwF,EAAEuK,EAAQ/P,EAAEyF,EAAEsK,EAAQvW,EAAEgM,EAAEuK,EAAQvW,EAAEiM,GAAGiG,IACrFqE,EAAQmL,OAASJ,GAErB9L,EAAO8L,GAAKP,GAAUxK,EAAQ9T,EAAEE,KAAKye,cAAeC,EAAY5e,EAAEE,KAAKye,YAAa7K,EAAQ9T,EAAEE,KAAKye,aACvG,CACAiI,EAAW9S,EAAQxN,EAAE,EACzB,CACAqgB,EAAW7S,EAAQ5R,EAAE,EACzB,CACAkV,EAAOoH,EAAczJ,QACrBsC,EAAOsP,EAASppB,EAAE,GAAGK,OACrB,IACIkpB,EADAC,GAAc,EAElB,IAAIxgB,EAAE,EAAEA,EAAE6Q,EAAK7Q,GAAG,EACd,IAAIC,EAAE,EAAEA,EAAE6Q,EAAK7Q,GAAG,EACXqgB,GACCC,EAAcH,EAASppB,EAAEgJ,GAAGC,GACzBgY,EAAcjhB,EAAEgJ,GAAGC,KAAOsgB,IACzBtI,EAAcjhB,EAAEgJ,GAAGC,GAAKsgB,EACrBJ,IACCxmB,KAAK0gB,GAAGrjB,EAAEgJ,GAAGC,GAAKsgB,GAEtBC,GAAc,GAElBD,EAAcH,EAAS5iB,EAAEwC,GAAGC,GACzBgY,EAAcza,EAAEwC,GAAGC,KAAOsgB,IACzBtI,EAAcza,EAAEwC,GAAGC,GAAKsgB,EACrBJ,IACCxmB,KAAK0gB,GAAG7c,EAAEwC,GAAGC,GAAKsgB,GAEtBC,GAAc,GAElBD,EAAcH,EAASxkB,EAAEoE,GAAGC,GACzBgY,EAAcrc,EAAEoE,GAAGC,KAAOsgB,IACzBtI,EAAcrc,EAAEoE,GAAGC,GAAKsgB,EACrBJ,IACCxmB,KAAK0gB,GAAGze,EAAEoE,GAAGC,GAAKsgB,GAEtBC,GAAc,KAGlBD,EAAcH,EAASppB,EAAEgJ,GAAGC,IAAIogB,EAASrpB,EAAEgJ,GAAGC,GAAGmgB,EAASppB,EAAEgJ,GAAGC,IAAIuM,EAChEyL,EAAcjhB,EAAEgJ,GAAGC,KAAOsgB,IACzBtI,EAAcjhB,EAAEgJ,GAAGC,GAAKsgB,EACrBJ,IACCxmB,KAAK0gB,GAAGrjB,EAAEgJ,GAAGC,GAAKsgB,GAEtBC,GAAc,GAElBD,EAAcH,EAAS5iB,EAAEwC,GAAGC,IAAIogB,EAAS7iB,EAAEwC,GAAGC,GAAGmgB,EAAS5iB,EAAEwC,GAAGC,IAAIuM,EAChEyL,EAAcza,EAAEwC,GAAGC,KAAOsgB,IACzBtI,EAAcza,EAAEwC,GAAGC,GAAKsgB,EACrBJ,IACCxmB,KAAK0gB,GAAG7c,EAAEwC,GAAGC,GAAKsgB,GAEtBC,GAAc,GAElBD,EAAcH,EAASxkB,EAAEoE,GAAGC,IAAIogB,EAASzkB,EAAEoE,GAAGC,GAAGmgB,EAASxkB,EAAEoE,GAAGC,IAAIuM,EAChEyL,EAAcrc,EAAEoE,GAAGC,KAAOsgB,IACzBtI,EAAcrc,EAAEoE,GAAGC,GAAKsgB,EACrBJ,IACCxmB,KAAK0gB,GAAGze,EAAEoE,GAAGC,GAAKsgB,GAEtBC,GAAc,IAQ9B,OAHGA,IACCvI,EAAcze,EAAI4mB,EAAS5mB,GAExB,CACHwe,eAAgBA,EAChBwI,YAAaA,EAErB,CA6BA,SAASC,IACL9mB,KAAKmE,MAAQnE,KAAK+mB,qBACd/mB,KAAKsG,IACLtG,KAAKmgB,KAAM,EAEnB,CAEA,SAAS6G,EAAchH,EAAM5I,EAAMnX,GAC/BD,KAAKinB,cAAgB,EACrBjnB,KAAKogB,KAAOJ,EAAKI,KACjBpgB,KAAKsG,GAAI,EACTtG,KAAKmgB,KAAM,EACX,IAAI9G,EAAoB,IAATpZ,EAAamX,EAAKxN,GAAGtD,EAAI8Q,EAAKiB,GAAG/R,EAChDtG,KAAKiC,EAAIilB,WAAWje,MAAMoQ,GAC1BrZ,KAAK0gB,GAAKwG,WAAWje,MAAMjJ,KAAKiC,GAChCjC,KAAK+mB,qBAAuBI,qBAAqBC,qBACjDpnB,KAAKmE,MAAQnE,KAAK+mB,qBAClB/mB,KAAKmE,MAAMkjB,SAASrnB,KAAKiC,GACzBjC,KAAK2E,MAAQmiB,CACjB,CAIA,SAASQ,EAAuBtH,EAAK5I,EAAKnX,GACtCD,KAAKinB,cAAgB,EACrBjnB,KAAKogB,KAAOJ,EAAKI,KACjBpgB,KAAKggB,KAAOA,EACZhgB,KAAKye,WAAauB,EAAK5I,KAAKiK,GAC5BrhB,KAAKunB,WAAa,EAClBvnB,KAAK4e,UAAqB,IAAT3e,EAAamX,EAAKxN,GAAGtD,EAAI8Q,EAAKiB,GAAG/R,EAClDtG,KAAKsG,GAAI,EACTtG,KAAK+gB,IAAK,EACV,IAAOtjB,EAAMuC,KAAK4e,UAAU,GAAG5c,EAAE,GAAG3E,EAAEK,OAC3BsC,KAAK4e,UAAU,GAAG5c,EAAE,GAAG3E,EAAE,GAAGK,OACvCsC,KAAKiC,EAAIilB,WAAWM,WACpBxnB,KAAKiC,EAAEwjB,YAAYzlB,KAAK4e,UAAU,GAAG5c,EAAE,GAAGnC,EAAGpC,GAC7CuC,KAAK0gB,GAAKwG,WAAWje,MAAMjJ,KAAKiC,GAChCjC,KAAK+mB,qBAAuBI,qBAAqBC,qBACjDpnB,KAAKmE,MAAQnE,KAAK+mB,qBAClB/mB,KAAKmE,MAAMkjB,SAASrnB,KAAKiC,GACzBjC,KAAKmf,UAAYjB,EACjBle,KAAK2E,MAAQmiB,CACjB,CAtBAE,EAAcxX,UAAU+W,iBAAmBA,EAC3CS,EAAcxX,UAAUvL,SAzBxB,WACI,OAAOjE,KAAKiC,CAChB,EA6CAqlB,EAAuB9X,UAAUvL,SAtEjC,WACI,GAAGjE,KAAKggB,KAAKC,WAAWC,UAAYlgB,KAAKkgB,QAAzC,CAGAlgB,KAAKmgB,KAAM,EACX,IAAI/B,EAAWpe,KAAKogB,KAAKC,cAAgBrgB,KAAKye,WAC1C1C,EAAW/b,KAAK4e,UAAU,GAAG9e,EAAIE,KAAKye,WACtC6B,EAAUtgB,KAAK4e,UAAU5e,KAAK4e,UAAUlhB,OAAS,GAAGoC,EAAIE,KAAKye,WACjE,GAAKze,KAAKmf,YAAcjB,KAAele,KAAKmf,UAAYpD,GAAYqC,EAAWrC,GAAc/b,KAAKmf,UAAYmB,GAAWlC,EAAWkC,GAAW,CAE3I,IAAIjjB,EAAI2C,KAAKmf,UAAYf,EAAWpe,KAAKunB,WAAa,EAClD9G,EAAezgB,KAAKumB,iBAAiBnI,EAAU/gB,EAAG2C,KAAKiC,GAAG,GAE9DjC,KAAKunB,WAAa9G,EAAapC,eAC/Bre,KAAKmgB,IAAMM,EAAaoG,YACrBpG,EAAaoG,cACZ7mB,KAAKmE,MAAQnE,KAAK+mB,qBAE1B,CACA/mB,KAAKmf,UAAYf,EACjBpe,KAAKkgB,QAAUlgB,KAAKggB,KAAKC,WAAWC,OAjBpC,CAkBJ,EAkDAoH,EAAuB9X,UAAU+W,iBAAmBA,EAEpD,IAAIkB,EAAoB,WAEpB,IAAIC,EAASvpB,YAEb,SAASwpB,IACL,IAAIC,EAAK5nB,KAAKqC,EAAEJ,EAAE,GAAI6G,EAAK9I,KAAKqC,EAAEJ,EAAE,GAAI4lB,EAAK7nB,KAAKgC,EAAEC,EAAE,GAAG,EAAG6lB,EAAK9nB,KAAKgC,EAAEC,EAAE,GAAG,EAC/D,IAAXjC,KAAKD,GACJC,KAAKiC,EAAEA,EAAE,GAAG,GAAK2lB,EACjB5nB,KAAKiC,EAAEA,EAAE,GAAG,GAAK6G,EAAGgf,EACpB9nB,KAAKiC,EAAEA,EAAE,GAAG,GAAK2lB,EAAKC,EACtB7nB,KAAKiC,EAAEA,EAAE,GAAG,GAAK6G,EACjB9I,KAAKiC,EAAEA,EAAE,GAAG,GAAK2lB,EACjB5nB,KAAKiC,EAAEA,EAAE,GAAG,GAAK6G,EAAGgf,EACpB9nB,KAAKiC,EAAEA,EAAE,GAAG,GAAK2lB,EAAKC,EACtB7nB,KAAKiC,EAAEA,EAAE,GAAG,GAAK6G,EACjB9I,KAAKiC,EAAE5E,EAAE,GAAG,GAAKuqB,EAAKC,EAAGH,EACzB1nB,KAAKiC,EAAE5E,EAAE,GAAG,GAAKyL,EAAKgf,EACtB9nB,KAAKiC,EAAE5E,EAAE,GAAG,GAAKuqB,EAAKC,EACtB7nB,KAAKiC,EAAE5E,EAAE,GAAG,GAAKyL,EAAKgf,EAAGJ,EACzB1nB,KAAKiC,EAAE5E,EAAE,GAAG,GAAKuqB,EAAKC,EAAGH,EACzB1nB,KAAKiC,EAAE5E,EAAE,GAAG,GAAKyL,EAAKgf,EACtB9nB,KAAKiC,EAAE5E,EAAE,GAAG,GAAKuqB,EAAKC,EACtB7nB,KAAKiC,EAAE5E,EAAE,GAAG,GAAKyL,EAAKgf,EAAGJ,EACzB1nB,KAAKiC,EAAE4B,EAAE,GAAG,GAAK+jB,EAAKC,EAAGH,EACzB1nB,KAAKiC,EAAE4B,EAAE,GAAG,GAAKiF,EAAKgf,EACtB9nB,KAAKiC,EAAE4B,EAAE,GAAG,GAAK+jB,EAAKC,EACtB7nB,KAAKiC,EAAE4B,EAAE,GAAG,GAAKiF,EAAKgf,EAAGJ,EACzB1nB,KAAKiC,EAAE4B,EAAE,GAAG,GAAK+jB,EAAKC,EAAGH,EACzB1nB,KAAKiC,EAAE4B,EAAE,GAAG,GAAKiF,EAAKgf,EACtB9nB,KAAKiC,EAAE4B,EAAE,GAAG,GAAK+jB,EAAKC,EACtB7nB,KAAKiC,EAAE4B,EAAE,GAAG,GAAKiF,EAAKgf,EAAGJ,IAEzB1nB,KAAKiC,EAAEA,EAAE,GAAG,GAAK2lB,EACjB5nB,KAAKiC,EAAEA,EAAE,GAAG,GAAK6G,EAAGgf,EACpB9nB,KAAKiC,EAAEA,EAAE,GAAG,GAAK2lB,EAAKC,EACtB7nB,KAAKiC,EAAEA,EAAE,GAAG,GAAK6G,EACjB9I,KAAKiC,EAAEA,EAAE,GAAG,GAAK2lB,EACjB5nB,KAAKiC,EAAEA,EAAE,GAAG,GAAK6G,EAAGgf,EACpB9nB,KAAKiC,EAAEA,EAAE,GAAG,GAAK2lB,EAAKC,EACtB7nB,KAAKiC,EAAEA,EAAE,GAAG,GAAK6G,EACjB9I,KAAKiC,EAAE5E,EAAE,GAAG,GAAKuqB,EAAKC,EAAGH,EACzB1nB,KAAKiC,EAAE5E,EAAE,GAAG,GAAKyL,EAAKgf,EACtB9nB,KAAKiC,EAAE5E,EAAE,GAAG,GAAKuqB,EAAKC,EACtB7nB,KAAKiC,EAAE5E,EAAE,GAAG,GAAKyL,EAAKgf,EAAGJ,EACzB1nB,KAAKiC,EAAE5E,EAAE,GAAG,GAAKuqB,EAAKC,EAAGH,EACzB1nB,KAAKiC,EAAE5E,EAAE,GAAG,GAAKyL,EAAKgf,EACtB9nB,KAAKiC,EAAE5E,EAAE,GAAG,GAAKuqB,EAAKC,EACtB7nB,KAAKiC,EAAE5E,EAAE,GAAG,GAAKyL,EAAKgf,EAAGJ,EACzB1nB,KAAKiC,EAAE4B,EAAE,GAAG,GAAK+jB,EAAKC,EAAGH,EACzB1nB,KAAKiC,EAAE4B,EAAE,GAAG,GAAKiF,EAAKgf,EACtB9nB,KAAKiC,EAAE4B,EAAE,GAAG,GAAK+jB,EAAKC,EACtB7nB,KAAKiC,EAAE4B,EAAE,GAAG,GAAKiF,EAAKgf,EAAGJ,EACzB1nB,KAAKiC,EAAE4B,EAAE,GAAG,GAAK+jB,EAAKC,EAAGH,EACzB1nB,KAAKiC,EAAE4B,EAAE,GAAG,GAAKiF,EAAKgf,EACtB9nB,KAAKiC,EAAE4B,EAAE,GAAG,GAAK+jB,EAAKC,EACtB7nB,KAAKiC,EAAE4B,EAAE,GAAG,GAAKiF,EAAKgf,EAAGJ,EAEjC,CAEA,SAAS5E,EAAY1E,GACjB,IAAI/gB,EAAGI,EAAMuC,KAAKgE,kBAAkBtG,OACpC,GAAGsC,KAAKggB,KAAKC,WAAWC,UAAYlgB,KAAKkgB,QAAzC,CAMA,IAHAlgB,KAAKmgB,KAAM,EACXngB,KAAKkgB,QAAUlgB,KAAKggB,KAAKC,WAAWC,QAEhC7iB,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb2C,KAAKgE,kBAAkB3G,GAAG4G,SAASma,GAChCpe,KAAKgE,kBAAkB3G,GAAG8iB,MACzBngB,KAAKmgB,KAAM,GAGhBngB,KAAKmgB,KACJngB,KAAK2nB,kBAXT,CAaJ,CAEA,OAAO,SAA0B3H,EAAK5I,GAOlCpX,KAAKiC,EAAIilB,WAAWM,WACpBxnB,KAAKiC,EAAEwjB,aAAY,EAAM,GACzBzlB,KAAK+mB,qBAAuBI,qBAAqBC,qBACjDpnB,KAAKmE,MAAQnE,KAAK+mB,qBAClB/mB,KAAK+mB,qBAAqBM,SAASrnB,KAAKiC,GACxCjC,KAAKD,EAAIqX,EAAKrX,EACdC,KAAKgE,kBAAoB,GACzBhE,KAAKggB,KAAOA,EACZhgB,KAAKogB,KAAOJ,EAAKI,KACjBpgB,KAAKkgB,SAAW,EAChBlgB,KAAKmgB,KAAM,EACXngB,KAAKiE,SAAW6e,EAChB9iB,KAAK2nB,iBAAmBA,EACxB3nB,KAAK2E,MAAQmiB,EACb9mB,KAAKqC,EAAI4b,gBAAgBwF,QAAQzD,EAAK5I,EAAK/U,EAAE,EAAE,EAAErC,KAAKgE,mBACtDhE,KAAKgC,EAAIic,gBAAgBwF,QAAQzD,EAAK5I,EAAKpV,EAAE,EAAE,EAAEhC,KAAKgE,mBACnDhE,KAAKgE,kBAAkBtG,OACtBsC,KAAKsG,GAAI,EAETtG,KAAK2nB,kBAEb,CACJ,CA3GuB,GA6GnBI,EAAqB,WAErB,SAASC,IACL,IAQI3qB,EARA4qB,EAAS9rB,KAAKU,MAAMmD,KAAK4J,GAAG3H,GAC5B6C,EAAgB,EAAR3I,KAAK+B,GAAK+pB,EAIlBC,EAAMloB,KAAKiiB,GAAGhgB,EACdkmB,EAAYnoB,KAAKooB,GAAGnmB,EACpBomB,EAAe,EAAElsB,KAAK+B,GAAGgqB,GAAY,EAAPD,GAC3BK,GAAcnsB,KAAK+B,GAAI,EAC1BmW,EAAsB,IAAhBrU,KAAKoX,KAAKrX,GAAW,EAAI,EAGnC,IAFAuoB,GAActoB,KAAKkC,EAAED,EACrBjC,KAAKiC,EAAE4S,QAAU,EACbxX,EAAE,EAAEA,EAAE4qB,EAAO5qB,GAAG,EAAE,CAClB,IAAIgM,EAAI6e,EAAM/rB,KAAK6I,IAAIsjB,GACnBhf,EAAI4e,EAAM/rB,KAAK+I,IAAIojB,GACnBC,EAAW,IAANlf,GAAiB,IAANC,EAAU,EAAIA,EAAEnN,KAAKM,KAAK4M,EAAEA,EAAIC,EAAEA,GAClDkf,EAAW,IAANnf,GAAiB,IAANC,EAAU,GAAKD,EAAElN,KAAKM,KAAK4M,EAAEA,EAAIC,EAAEA,GACvDD,IAAQrJ,KAAKqC,EAAEJ,EAAE,GACjBqH,IAAQtJ,KAAKqC,EAAEJ,EAAE,GACjBjC,KAAKiC,EAAE8jB,YAAY1c,EAAEC,EAAED,EAAEkf,EAAGF,EAAaF,EAAU9T,EAAI/K,EAAEkf,EAAGH,EAAaF,EAAU9T,EAAIhL,EAAEkf,EAAGF,EAAaF,EAAU9T,EAAI/K,EAAEkf,EAAGH,EAAaF,EAAU9T,EAAKhX,GAAG,GAI3JirB,GAAcxjB,EAAMuP,CACxB,CACArU,KAAKmE,MAAMzG,OAAS,EACpBsC,KAAKmE,MAAM,GAAKnE,KAAKiC,CACzB,CAEA,SAASwmB,IACL,IAYIprB,EAAG6qB,EAAIC,EAAUE,EAZjBJ,EAA+B,EAAtB9rB,KAAKU,MAAMmD,KAAK4J,GAAG3H,GAC5B6C,EAAgB,EAAR3I,KAAK+B,GAAK+pB,EAIlBS,GAAW,EACXC,EAAU3oB,KAAKiiB,GAAGhgB,EAClB2mB,EAAW5oB,KAAK6oB,GAAG5mB,EACnB6mB,EAAY9oB,KAAKooB,GAAGnmB,EACpB8mB,EAAa/oB,KAAKgpB,GAAG/mB,EACrBgnB,EAAmB,EAAE9sB,KAAK+B,GAAGyqB,GAAgB,EAAPV,GACtCiB,EAAoB,EAAE/sB,KAAK+B,GAAG0qB,GAAiB,EAAPX,GACTK,GAAcnsB,KAAK+B,GAAI,EAC1DoqB,GAActoB,KAAKkC,EAAED,EACrB,IAAIoS,EAAsB,IAAhBrU,KAAKoX,KAAKrX,GAAW,EAAI,EAEnC,IADAC,KAAKiC,EAAE4S,QAAU,EACbxX,EAAE,EAAEA,EAAE4qB,EAAO5qB,GAAG,EAAE,CAElB8qB,EAAYO,EAAWI,EAAYC,EACnCV,EAAeK,EAAWO,EAAmBC,EAC7C,IAAI7f,GAHJ6e,EAAMQ,EAAWC,EAAUC,GAGbzsB,KAAK6I,IAAIsjB,GACnBhf,EAAI4e,EAAM/rB,KAAK+I,IAAIojB,GACnBC,EAAW,IAANlf,GAAiB,IAANC,EAAU,EAAIA,EAAEnN,KAAKM,KAAK4M,EAAEA,EAAIC,EAAEA,GAClDkf,EAAW,IAANnf,GAAiB,IAANC,EAAU,GAAKD,EAAElN,KAAKM,KAAK4M,EAAEA,EAAIC,EAAEA,GACvDD,IAAQrJ,KAAKqC,EAAEJ,EAAE,GACjBqH,IAAQtJ,KAAKqC,EAAEJ,EAAE,GACjBjC,KAAKiC,EAAE8jB,YAAY1c,EAAEC,EAAED,EAAEkf,EAAGF,EAAaF,EAAU9T,EAAI/K,EAAEkf,EAAGH,EAAaF,EAAU9T,EAAIhL,EAAEkf,EAAGF,EAAaF,EAAU9T,EAAI/K,EAAEkf,EAAGH,EAAaF,EAAU9T,EAAKhX,GAAG,GAM3JqrB,GAAYA,EACZJ,GAAcxjB,EAAMuP,CACxB,CACJ,CAEA,SAASyO,IACL,GAAG9iB,KAAKggB,KAAKC,WAAWC,UAAYlgB,KAAKkgB,QAAzC,CAGAlgB,KAAKmgB,KAAM,EACXngB,KAAKkgB,QAAUlgB,KAAKggB,KAAKC,WAAWC,QACpC,IAAI7iB,EAAGI,EAAMuC,KAAKgE,kBAAkBtG,OAEpC,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb2C,KAAKgE,kBAAkB3G,GAAG4G,WACvBjE,KAAKgE,kBAAkB3G,GAAG8iB,MACzBngB,KAAKmgB,KAAM,GAGhBngB,KAAKmgB,KACJngB,KAAKmpB,eAZT,CAcJ,CAEA,OAAO,SAA2BnJ,EAAK5I,GAOnCpX,KAAKiC,EAAIilB,WAAWM,WACpBxnB,KAAKiC,EAAEwjB,aAAY,EAAM,GACzBzlB,KAAKggB,KAAOA,EACZhgB,KAAKogB,KAAOJ,EAAKI,KACjBpgB,KAAKoX,KAAOA,EACZpX,KAAKkgB,SAAW,EAChBlgB,KAAKD,EAAIqX,EAAKrX,EACdC,KAAKgE,kBAAoB,GACzBhE,KAAKmgB,KAAM,EACXngB,KAAKiE,SAAW6e,EAChB9iB,KAAK2E,MAAQmiB,EACE,IAAZ1P,EAAK3R,IACJzF,KAAK6oB,GAAK5K,gBAAgBwF,QAAQzD,EAAK5I,EAAKyR,GAAG,EAAE,EAAE7oB,KAAKgE,mBACxDhE,KAAKgpB,GAAK/K,gBAAgBwF,QAAQzD,EAAK5I,EAAK4R,GAAG,EAAE,IAAKhpB,KAAKgE,mBAC3DhE,KAAKmpB,cAAgBV,GAErBzoB,KAAKmpB,cAAgBnB,EAEzBhoB,KAAK4J,GAAKqU,gBAAgBwF,QAAQzD,EAAK5I,EAAKxN,GAAG,EAAE,EAAE5J,KAAKgE,mBACxDhE,KAAKqC,EAAI4b,gBAAgBwF,QAAQzD,EAAK5I,EAAK/U,EAAE,EAAE,EAAErC,KAAKgE,mBACtDhE,KAAKkC,EAAI+b,gBAAgBwF,QAAQzD,EAAK5I,EAAKlV,EAAE,EAAEjE,UAAU+B,KAAKgE,mBAC9DhE,KAAKiiB,GAAKhE,gBAAgBwF,QAAQzD,EAAK5I,EAAK6K,GAAG,EAAE,EAAEjiB,KAAKgE,mBACxDhE,KAAKooB,GAAKnK,gBAAgBwF,QAAQzD,EAAK5I,EAAKgR,GAAG,EAAE,IAAKpoB,KAAKgE,mBAC3DhE,KAAK+mB,qBAAuBI,qBAAqBC,qBACjDpnB,KAAK+mB,qBAAqBM,SAASrnB,KAAKiC,GACxCjC,KAAKmE,MAAQnE,KAAK+mB,qBACf/mB,KAAKgE,kBAAkBtG,OACtBsC,KAAKsG,GAAI,EAETtG,KAAKmpB,eAEb,CACJ,CAhIwB,GAkIpBC,EAAqB,WACrB,SAAStG,EAAY1E,GACjB,GAAGpe,KAAKggB,KAAKC,WAAWC,UAAYlgB,KAAKkgB,QAAzC,CAGAlgB,KAAKmgB,KAAM,EACXngB,KAAKkgB,QAAUlgB,KAAKggB,KAAKC,WAAWC,QACpC,IAAI7iB,EAAGI,EAAMuC,KAAKgE,kBAAkBtG,OAEpC,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb2C,KAAKgE,kBAAkB3G,GAAG4G,SAASma,GAChCpe,KAAKgE,kBAAkB3G,GAAG8iB,MACzBngB,KAAKmgB,KAAM,GAGhBngB,KAAKmgB,KACJngB,KAAKqpB,mBAZT,CAeJ,CAEA,SAASA,IACL,IAAIzB,EAAK5nB,KAAKqC,EAAEJ,EAAE,GAAI6G,EAAK9I,KAAKqC,EAAEJ,EAAE,GAAIqnB,EAAKtpB,KAAKgC,EAAEC,EAAE,GAAG,EAAG8gB,EAAK/iB,KAAKgC,EAAEC,EAAE,GAAG,EACzE7F,EAAQY,OAAOssB,EAAGvG,EAAG/iB,KAAKkC,EAAED,GAC5BylB,EAAStrB,GAAO,EAAE+B,aACtB6B,KAAKiC,EAAE4S,QAAU,EAEH,IAAX7U,KAAKD,GAAsB,IAAXC,KAAKD,GACpBC,KAAKiC,EAAE8jB,YAAY6B,EAAG0B,EAAIxgB,EAAGia,EAAG3mB,EAAMwrB,EAAG0B,EAAIxgB,EAAGia,EAAG3mB,EAAMwrB,EAAG0B,EAAGxgB,EAAGia,EAAG2E,EAAO,GAAG,GAC/E1nB,KAAKiC,EAAE8jB,YAAY6B,EAAG0B,EAAIxgB,EAAGia,EAAG3mB,EAAMwrB,EAAG0B,EAAIxgB,EAAGia,EAAG2E,EAAOE,EAAG0B,EAAIxgB,EAAGia,EAAG3mB,EAAM,GAAG,GACpE,IAATA,GACC4D,KAAKiC,EAAE8jB,YAAY6B,EAAG0B,EAAGltB,EAAO0M,EAAGia,EAAG6E,EAAG0B,EAAGltB,EAAM0M,EAAGia,EAAG6E,EAAG0B,EAAG5B,EAAO5e,EAAGia,EAAG,GAAG,GAC9E/iB,KAAKiC,EAAE8jB,YAAY6B,EAAG0B,EAAGltB,EAAM0M,EAAGia,EAAG6E,EAAG0B,EAAG5B,EAAO5e,EAAGia,EAAG6E,EAAG0B,EAAGltB,EAAM0M,EAAGia,EAAG,GAAG,GAC7E/iB,KAAKiC,EAAE8jB,YAAY6B,EAAG0B,EAAGxgB,EAAGia,EAAG3mB,EAAMwrB,EAAG0B,EAAGxgB,EAAGia,EAAG3mB,EAAMwrB,EAAG0B,EAAGxgB,EAAGia,EAAG2E,EAAO,GAAG,GAC7E1nB,KAAKiC,EAAE8jB,YAAY6B,EAAG0B,EAAGxgB,EAAGia,EAAG3mB,EAAMwrB,EAAG0B,EAAGxgB,EAAGia,EAAG2E,EAAOE,EAAG0B,EAAGxgB,EAAGia,EAAG3mB,EAAM,GAAG,GAC7E4D,KAAKiC,EAAE8jB,YAAY6B,EAAG0B,EAAGltB,EAAM0M,EAAGia,EAAG6E,EAAG0B,EAAGltB,EAAM0M,EAAGia,EAAG6E,EAAG0B,EAAG5B,EAAO5e,EAAGia,EAAG,GAAG,GAC7E/iB,KAAKiC,EAAE8jB,YAAY6B,EAAG0B,EAAGltB,EAAM0M,EAAGia,EAAG6E,EAAG0B,EAAG5B,EAAO5e,EAAGia,EAAG6E,EAAG0B,EAAGltB,EAAM0M,EAAGia,EAAG,GAAG,KAE7E/iB,KAAKiC,EAAE8jB,YAAY6B,EAAG0B,EAAGxgB,EAAGia,EAAG6E,EAAG0B,EAAG5B,EAAO5e,EAAGia,EAAG6E,EAAG0B,EAAGxgB,EAAGia,EAAG,GAC9D/iB,KAAKiC,EAAE8jB,YAAY6B,EAAG0B,EAAGxgB,EAAGia,EAAG6E,EAAG0B,EAAGxgB,EAAGia,EAAG2E,EAAOE,EAAG0B,EAAGxgB,EAAGia,EAAG,MAGlE/iB,KAAKiC,EAAE8jB,YAAY6B,EAAG0B,EAAGxgB,EAAGia,EAAG3mB,EAAMwrB,EAAG0B,EAAGxgB,EAAGia,EAAG2E,EAAOE,EAAG0B,EAAGxgB,EAAGia,EAAG3mB,EAAM,GAAG,GACjE,IAATA,GACC4D,KAAKiC,EAAE8jB,YAAY6B,EAAG0B,EAAGltB,EAAM0M,EAAGia,EAAG6E,EAAG0B,EAAGltB,EAAM0M,EAAGia,EAAG6E,EAAG0B,EAAG5B,EAAO5e,EAAGia,EAAG,GAAG,GAC7E/iB,KAAKiC,EAAE8jB,YAAY6B,EAAG0B,EAAGltB,EAAM0M,EAAGia,EAAG6E,EAAG0B,EAAG5B,EAAO5e,EAAGia,EAAG6E,EAAG0B,EAAGltB,EAAM0M,EAAGia,EAAG,GAAG,GAC7E/iB,KAAKiC,EAAE8jB,YAAY6B,EAAG0B,EAAGxgB,EAAGia,EAAG3mB,EAAMwrB,EAAG0B,EAAGxgB,EAAGia,EAAG3mB,EAAMwrB,EAAG0B,EAAGxgB,EAAGia,EAAG2E,EAAO,GAAG,GAC7E1nB,KAAKiC,EAAE8jB,YAAY6B,EAAG0B,EAAGxgB,EAAGia,EAAG3mB,EAAMwrB,EAAG0B,EAAGxgB,EAAGia,EAAG2E,EAAOE,EAAG0B,EAAGxgB,EAAGia,EAAG3mB,EAAM,GAAG,GAC7E4D,KAAKiC,EAAE8jB,YAAY6B,EAAG0B,EAAGltB,EAAM0M,EAAGia,EAAG6E,EAAG0B,EAAGltB,EAAM0M,EAAGia,EAAG6E,EAAG0B,EAAG5B,EAAO5e,EAAGia,EAAG,GAAG,GAC7E/iB,KAAKiC,EAAE8jB,YAAY6B,EAAG0B,EAAGltB,EAAM0M,EAAGia,EAAG6E,EAAG0B,EAAG5B,EAAO5e,EAAGia,EAAG6E,EAAG0B,EAAGltB,EAAM0M,EAAGia,EAAG,GAAG,GAC7E/iB,KAAKiC,EAAE8jB,YAAY6B,EAAG0B,EAAGxgB,EAAGia,EAAG3mB,EAAMwrB,EAAG0B,EAAGxgB,EAAGia,EAAG3mB,EAAMwrB,EAAG0B,EAAGxgB,EAAGia,EAAG2E,EAAO,GAAG,KAE7E1nB,KAAKiC,EAAE8jB,YAAY6B,EAAG0B,EAAGxgB,EAAGia,EAAG6E,EAAG0B,EAAG5B,EAAO5e,EAAGia,EAAG6E,EAAG0B,EAAGxgB,EAAGia,EAAG,GAAG,GACjE/iB,KAAKiC,EAAE8jB,YAAY6B,EAAG0B,EAAGxgB,EAAGia,EAAG6E,EAAG0B,EAAGxgB,EAAGia,EAAG2E,EAAOE,EAAG0B,EAAGxgB,EAAGia,EAAG,GAAG,GACjE/iB,KAAKiC,EAAE8jB,YAAY6B,EAAG0B,EAAGxgB,EAAGia,EAAG6E,EAAG0B,EAAG5B,EAAO5e,EAAGia,EAAG6E,EAAG0B,EAAGxgB,EAAGia,EAAG,GAAG,IAI7E,CAEA,OAAO,SAA2B/C,EAAK5I,GACnCpX,KAAKiC,EAAIilB,WAAWM,WACpBxnB,KAAKiC,EAAEpC,GAAI,EACXG,KAAK+mB,qBAAuBI,qBAAqBC,qBACjDpnB,KAAK+mB,qBAAqBM,SAASrnB,KAAKiC,GACxCjC,KAAKmE,MAAQnE,KAAK+mB,qBAClB/mB,KAAKggB,KAAOA,EACZhgB,KAAKogB,KAAOJ,EAAKI,KACjBpgB,KAAKkgB,SAAW,EAChBlgB,KAAKD,EAAIqX,EAAKrX,EACdC,KAAKgE,kBAAoB,GACzBhE,KAAKmgB,KAAM,EACXngB,KAAKiE,SAAW6e,EAChB9iB,KAAKqpB,kBAAoBA,EACzBrpB,KAAK2E,MAAQmiB,EACb9mB,KAAKqC,EAAI4b,gBAAgBwF,QAAQzD,EAAK5I,EAAK/U,EAAE,EAAE,EAAErC,KAAKgE,mBACtDhE,KAAKgC,EAAIic,gBAAgBwF,QAAQzD,EAAK5I,EAAKpV,EAAE,EAAE,EAAEhC,KAAKgE,mBACtDhE,KAAKkC,EAAI+b,gBAAgBwF,QAAQzD,EAAK5I,EAAKlV,EAAE,EAAE,EAAElC,KAAKgE,mBACnDhE,KAAKgE,kBAAkBtG,OACtBsC,KAAKsG,GAAI,EAETtG,KAAKqpB,mBAEb,CACJ,CApFwB,GAyHxB,MAJS,CACTrb,aAhCA,SAAsBgS,EAAK5I,EAAKnX,EAAMkK,GAClC,IAAI6B,EACJ,GAAY,IAAT/L,GAAuB,IAATA,EAAW,CACxB,IAAIspB,EAAoB,IAATtpB,EAAamX,EAAKxN,GAAKwN,EAAKiB,GACvCmR,EAAOD,EAASjjB,EAEhB0F,EADc,IAAfud,EAASpjB,GAAWqjB,EAAK9rB,OACjB,IAAI4pB,EAAuBtH,EAAM5I,EAAMnX,GAEvC,IAAI+mB,EAAchH,EAAM5I,EAAMnX,EAE7C,MAAkB,IAATA,EACL+L,EAAO,IAAIod,EAAkBpJ,EAAM5I,GACrB,IAATnX,EACL+L,EAAO,IAAIyb,EAAiBzH,EAAM5I,GACpB,IAATnX,IACL+L,EAAO,IAAI+b,EAAkB/H,EAAM5I,IAKvC,OAHGpL,EAAK1F,GACJ6D,EAAIhJ,KAAK6K,GAENA,CACX,EAYAgC,uBAVA,WACI,OAAOgZ,CACX,EASAhZ,gCAPA,WACI,OAAOsZ,CACX,EAOJ,CA7iB2B,GA8iBvBmC,gBACIzb,GAAK,CAAC,EACN0b,UAAY,CAAC,EACjB1b,GAAG2b,iBAGH,SAA0B1b,EAAG2b,GACrBF,UAAUzb,KACVyb,UAAUzb,GAAM2b,EAExB,EANA5b,GAAG6b,YAQH,SAAqB5b,EAAG+R,EAAM5I,EAAMpT,GAChC,OAAO,IAAI0lB,UAAUzb,GAAI+R,EAAM5I,EAAMpT,EACzC,EAEOgK,IAfHA,GACA0b,UAiBR,SAASI,gBAAgB,CA0BzB,SAASC,eAAe,CA0TxB,SAASC,uBAAuB,CA+GhC,SAASC,mBAAmB,CA8M5B,SAASC,kBACRlqB,KAAK6U,QAAU,EACf7U,KAAKwlB,WAAa,EAClBxlB,KAAK+X,OAASja,MAAMC,MAAM,KAAK,CAACL,OAAOsC,KAAKwlB,YAC7C,CAppBAsE,cAActa,UAAU2a,uBAAyB,WAAW,EAC5DL,cAActa,UAAU4a,mBAAqB,WAAW,EACxDN,cAActa,UAAU6X,SAAW,SAASjQ,GACpCpX,KAAKyU,SACLzU,KAAK+X,OAAO5W,KAAK,CAACkpB,MAAMjT,EAAKuI,GAAIvI,KAAMA,EAAM2P,qBAAqBI,qBAAqBC,uBACvFpnB,KAAKoqB,mBAAmBhT,EAAKuI,IAErC,EACAmK,cAActa,UAAUhL,KAAO,SAASwb,EAAK5I,EAAKpT,GAC9ChE,KAAKggB,KAAOA,EACZhgB,KAAKkgB,SAAW,EAChBlgB,KAAK+X,OAAS,GACd/X,KAAKgE,kBAAoB,GACzBhE,KAAKmgB,KAAM,EACXngB,KAAKyU,QAAS,EACdzU,KAAKsG,GAAI,EACTtG,KAAKogB,KAAOJ,EAAKI,KACjBpgB,KAAKmqB,uBAAuBnK,EAAK5I,GAC9BpX,KAAKgE,kBAAkBtG,QACtBsC,KAAKsG,GAAI,EACTtC,EAAkB7C,KAAKnB,OAEvBA,KAAKiE,UAAS,EAEtB,EAEAuN,gBAAgBsY,cAAcC,cAC9BA,aAAava,UAAUsT,YAAc,SAASc,GAC1C,GAAG5jB,KAAKggB,KAAKC,WAAWC,UAAYlgB,KAAKkgB,SAAY0D,EAArD,CAGA5jB,KAAKmgB,MAAMyD,EACX5jB,KAAKkgB,QAAUlgB,KAAKggB,KAAKC,WAAWC,QACpC,IAAI7iB,EAAGI,EAAMuC,KAAKgE,kBAAkBtG,OAEpC,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb2C,KAAKgE,kBAAkB3G,GAAG4G,WACvBjE,KAAKgE,kBAAkB3G,GAAG8iB,MACzBngB,KAAKmgB,KAAM,GAGnB,GAAGngB,KAAKmgB,KAAOyD,EAAY,CACvB,IAAI/f,EAAK7D,KAAK6D,EAAE5B,EAAE,IAAK,IACpB4B,EAAI,IACHA,GAAK,GAET,IAAI7B,EAAIhC,KAAKgC,EAAEC,EAAI4B,EACfuC,EAAIpG,KAAKoG,EAAEnE,EAAI4B,EAInB,GAAG7B,EAAEoE,EAAE,CACH,IAAIye,EAAK7iB,EACTA,EAAIoE,EACJA,EAAIye,CACR,CACA7kB,KAAKsqB,OAAStoB,EACdhC,KAAKuqB,OAASnkB,EACdpG,KAAKwqB,OAAS3mB,CAClB,CA7BA,CA8BJ,EACAkmB,aAAava,UAAU2a,uBAAyB,SAASnK,EAAK5I,GAC1DpX,KAAKsqB,OAAS,EACdtqB,KAAKuqB,OAAS,EACdvqB,KAAKwqB,OAAS,EACdxqB,KAAKiE,SAAWjE,KAAK8iB,YACrB9iB,KAAKgC,EAAIic,gBAAgBwF,QAAQzD,EAAK5I,EAAKpV,EAAE,EAAE,IAAKhC,KAAKgE,mBACzDhE,KAAKoG,EAAI6X,gBAAgBwF,QAAQzD,EAAK5I,EAAKhR,EAAE,EAAE,IAAKpG,KAAKgE,mBACzDhE,KAAK6D,EAAIoa,gBAAgBwF,QAAQzD,EAAK5I,EAAKvT,EAAE,EAAE,EAAE7D,KAAKgE,mBACtDhE,KAAKwG,EAAI4Q,EAAK5Q,EACVxG,KAAKgE,kBAAkBtG,QACvBsC,KAAKiE,UAAS,EAEtB,EAEA8lB,aAAava,UAAUib,oBAAsB,SAASzoB,EAAGoE,EAAGskB,EAAa1X,EAAa2X,GAClF,IAAIvX,EAAW,GACZhN,GAAK,EACJgN,EAASjS,KAAK,CACVa,EAAGA,EACHoE,IAECpE,GAAK,EACVoR,EAASjS,KAAK,CACVa,EAAGA,EAAI,EACPoE,EAAGA,EAAI,KAGXgN,EAASjS,KAAK,CACVa,EAAGA,EACHoE,EAAG,IAEPgN,EAASjS,KAAK,CACVa,EAAG,EACHoE,EAAGA,EAAI,KAGf,IACI/I,EAA0ButB,EAD1BC,EAAgB,GACbptB,EAAM2V,EAAS1V,OACtB,IAAIL,EAAI,EAAGA,EAAII,EAAKJ,GAAK,EAAG,CAKpB,IAAIytB,EAAQC,GAJhBH,EAAYxX,EAAS/V,IACP+I,EAAIukB,EAAsB3X,GAAe4X,EAAU5oB,EAAI2oB,EAAsB3X,EAAc0X,IAKjGI,EADDF,EAAU5oB,EAAI2oB,GAAuB3X,EAC3B,GAEC4X,EAAU5oB,EAAI2oB,EAAsB3X,GAAe0X,EAG7DK,EADDH,EAAUxkB,EAAIukB,GAAuB3X,EAAc0X,EACzC,GAEEE,EAAUxkB,EAAIukB,EAAsB3X,GAAe0X,EAElEG,EAAc1pB,KAAK,CAAC2pB,EAAQC,IAEpC,CAIA,OAHIF,EAAcntB,QACdmtB,EAAc1pB,KAAK,CAAC,EAAE,IAEnB0pB,CACX,EAEAd,aAAava,UAAUwb,cAAgB,SAASrqB,GAC5C,IAAIsqB,EACA5tB,EAIA6tB,EAAU7R,EAAU8R,EAJjB1tB,EAAMuC,KAAK+X,OAAOra,OAErBsE,EAAIhC,KAAKsqB,OACTlkB,EAAIpG,KAAKuqB,OAC6BI,EAAsB,EAEhE,GAAGvkB,IAAMpE,EACL,IAAI3E,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb2C,KAAK+X,OAAO1a,GAAG0pB,qBAAqBqE,gBACpCprB,KAAK+X,OAAO1a,GAAGgtB,MAAMlK,KAAM,EAC3BngB,KAAK+X,OAAO1a,GAAGgtB,MAAMlmB,MAAQnE,KAAK+X,OAAO1a,GAAG0pB,0BAE7C,GAAY,IAAN3gB,GAAiB,IAANpE,GAAiB,IAAJoE,GAAe,IAANpE,GAqFvC,GAAGhC,KAAKmgB,IACX,IAAI9iB,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb2C,KAAK+X,OAAO1a,GAAGgtB,MAAMlK,KAAM,MAvFqB,CACpD,IAAmB3L,EAAWuS,EAA1B3T,EAAW,GACf,IAAI/V,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EAEb,IADAmX,EAAYxU,KAAK+X,OAAO1a,IACVgtB,MAAMlK,KAAQngB,KAAKmgB,KAAQxf,GAAyB,IAAXX,KAAKwG,EAErD,CAIH,GAFA0Q,GADA+T,EAAazW,EAAU6V,MAAMlmB,OACX0Q,QAClBsW,EAAmB,GACf3W,EAAU6V,MAAMlK,KAAO3L,EAAU0W,UACjCC,EAAmB3W,EAAU2W,qBAC1B,CAEH,IADAD,EAAY,GACR7kB,EAAE,EAAEA,EAAE6Q,EAAK7Q,GAAG,EACdgT,EAAW1C,IAAIpC,kBAAkB0W,EAAWlT,OAAO1R,IACnD6kB,EAAU/pB,KAAKkY,GACf8R,GAAoB9R,EAAStE,YAEjCP,EAAU2W,iBAAmBA,EAC7B3W,EAAU0W,UAAYA,CAC1B,CAEAP,GAAuBQ,EACvB3W,EAAU6V,MAAMlK,KAAM,CAC1B,MApBI3L,EAAU6V,MAAMlmB,MAAQqQ,EAAUuS,qBAsB1C,IACI1gB,EAAG6Q,EADH4T,EAAS9oB,EAAG+oB,EAAS3kB,EAAG4M,EAAc,EAE1C,IAAI3V,EAAII,EAAM,EAAGJ,GAAK,EAAGA,GAAK,EAE1B,IADAmX,EAAYxU,KAAK+X,OAAO1a,IACVgtB,MAAMlK,IAAK,CAGrB,IAFA4G,EAAuBvS,EAAUuS,sBACZqE,gBACP,IAAXprB,KAAKwG,GAAW/I,EAAM,EAAG,CACxB,IAAI4tB,EAAQrrB,KAAKyqB,oBAAoBzoB,EAAGoE,EAAGoO,EAAU2W,iBAAkBnY,EAAa2X,GACpF3X,GAAewB,EAAU2W,gBAC7B,MACIE,EAAQ,CAAC,CAACP,EAAQC,IAGtB,IADA7T,EAAOmU,EAAM3tB,OACR2I,EAAI,EAAGA,EAAI6Q,EAAM7Q,GAAK,EAAG,CAC1BykB,EAASO,EAAMhlB,GAAG,GAClB0kB,EAASM,EAAMhlB,GAAG,GAClB+M,EAAS1V,OAAS,EACfqtB,GAAU,EACT3X,EAASjS,KAAK,CACVa,EAAEwS,EAAU2W,iBAAmBL,EAC/B1kB,EAAEoO,EAAU2W,iBAAmBJ,IAE9BD,GAAU,EACf1X,EAASjS,KAAK,CACVa,EAAEwS,EAAU2W,kBAAoBL,EAAS,GACzC1kB,EAAEoO,EAAU2W,kBAAoBJ,EAAS,MAG7C3X,EAASjS,KAAK,CACVa,EAAEwS,EAAU2W,iBAAmBL,EAC/B1kB,EAAEoO,EAAU2W,mBAEhB/X,EAASjS,KAAK,CACVa,EAAE,EACFoE,EAAEoO,EAAU2W,kBAAkBJ,EAAS,MAG/C,IAAIO,EAAgBtrB,KAAKurB,UAAU/W,EAAUpB,EAAS,IACtD,GAAIA,EAAS,GAAGpR,IAAMoR,EAAS,GAAGhN,EAAG,CAEjC,GAAGgN,EAAS1V,OAAS,EACjB,GAAG8W,EAAU6V,MAAMpoB,EAAEpC,EAAE,CACnB,IAAI2rB,EAAYF,EAAcG,MAC9BzrB,KAAK0rB,SAASJ,EAAevE,GAC7BuE,EAAgBtrB,KAAKurB,UAAU/W,EAAUpB,EAAS,GAAIoY,EAC1D,MACIxrB,KAAK0rB,SAASJ,EAAevE,GAC7BuE,EAAgBtrB,KAAKurB,UAAU/W,EAAUpB,EAAS,IAG1DpT,KAAK0rB,SAASJ,EAAevE,EACjC,CAEJ,CACAvS,EAAU6V,MAAMlmB,MAAQ4iB,CAC5B,CAER,CAKI/mB,KAAKgE,kBAAkBtG,SACvBsC,KAAKmgB,KAAM,EAEnB,EAEA4J,aAAava,UAAUkc,SAAW,SAASnnB,EAAUwiB,GACjD,IAAI1pB,EAAGI,EAAM8G,EAAS7G,OACtB,IAAIL,EAAI,EAAGA,EAAII,EAAKJ,GAAK,EACrB0pB,EAAqBM,SAAS9iB,EAASlH,GAE/C,EAEA0sB,aAAava,UAAUmc,WAAa,SAASnZ,EAAIC,EAAIC,EAAIC,EAAIiZ,EAAU9F,EAAK0B,GAMxEoE,EAAU/F,QAAQpT,EAAI,GAAGA,EAAI,GAAG,IAAIqT,GACpC8F,EAAU/F,QAAQnT,EAAI,GAAGA,EAAI,GAAG,IAAIoT,EAAM,GACvC0B,GACCoE,EAAU/F,QAAQrT,EAAI,GAAGA,EAAI,GAAG,IAAIsT,GAExC8F,EAAU/F,QAAQlT,EAAI,GAAGA,EAAI,GAAG,IAAImT,EAAM,EAC9C,EAEAiE,aAAava,UAAU+b,UAAY,SAAS/W,EAAWqX,EAAcD,GACjE,IAEIvuB,EAAwCgJ,EAAG6Q,EAE3C4U,EAAkBC,EAClBjX,EACAkX,EAEA9X,EARAgX,EAAY1W,EAAU0W,UACtBD,EAAazW,EAAU6V,MAAMlmB,MAAM4T,OAChCta,EAAM+W,EAAU6V,MAAMlmB,MAAM0Q,QAC/B7B,EAAc,EAId+E,EAAS,GAETyP,GAAW,EAUf,IATIoE,GAKAG,EAAeH,EAAU/W,QACzBX,EAAU0X,EAAU/W,UALpB+W,EAAY1E,WAAWM,WACvBuE,EAAe,EACf7X,EAAU,GAKd6D,EAAO5W,KAAKyqB,GACRvuB,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EAAE,CAIf,IAHAyX,EAAUoW,EAAU7tB,GAAGyX,QACvB8W,EAAU/rB,EAAIorB,EAAW5tB,GAAGwC,EAC5BqX,EAAO+T,EAAW5tB,GAAGwC,EAAIiV,EAAQpX,OAASoX,EAAQpX,OAAS,EACvD2I,EAAE,EAAEA,EAAE6Q,EAAK7Q,GAAG,EAEd,GAAG2M,GADH8Y,EAAoBhX,EAAQzO,EAAE,IACK2M,YAAc6Y,EAAa7pB,EAC1DgR,GAAe8Y,EAAkB9Y,YACjC4Y,EAAU/rB,GAAI,MACX,IAAGmT,EAAc6Y,EAAazlB,EAAE,CACnCwlB,EAAU/rB,GAAI,EACd,KACJ,CACOgsB,EAAa7pB,GAAKgR,GAAe6Y,EAAazlB,GAAK4M,EAAc8Y,EAAkB9Y,aAClFhT,KAAK2rB,WAAWV,EAAW5tB,GAAG4E,EAAEoE,EAAE,GAAG4kB,EAAW5tB,GAAGwG,EAAEwC,EAAE,GAAG4kB,EAAW5tB,GAAGA,EAAEgJ,GAAG4kB,EAAW5tB,GAAG4E,EAAEoE,GAAGulB,EAAUG,EAAavE,GACvHA,GAAW,IAEXwE,EAAUrV,IAAI3B,cAAciW,EAAW5tB,GAAG4E,EAAEoE,EAAE,GAAG4kB,EAAW5tB,GAAG4E,EAAEoE,GAAG4kB,EAAW5tB,GAAGwG,EAAEwC,EAAE,GAAG4kB,EAAW5tB,GAAGA,EAAEgJ,IAAKwlB,EAAa7pB,EAAIgR,GAAa8Y,EAAkB9Y,aAAa6Y,EAAazlB,EAAI4M,GAAa8Y,EAAkB9Y,YAAa8B,EAAQzO,EAAE,IAClPrG,KAAK2rB,WAAWK,EAAQxZ,IAAIwZ,EAAQtZ,IAAIsZ,EAAQrZ,IAAIqZ,EAAQvZ,IAAImZ,EAAUG,EAAavE,GACvFA,GAAW,EACXoE,EAAU/rB,GAAI,GAElBmT,GAAe8Y,EAAkB9Y,YACjC+Y,GAAgB,CACpB,CAEJ,GAAGd,EAAW5tB,GAAGwC,EAAE,CAEf,GADAisB,EAAoBhX,EAAQzO,EAAE,GAC3B2M,GAAe6Y,EAAazlB,EAAE,CAC7B,IAAIkN,EAAgBwB,EAAQzO,EAAE,GAAG2M,YAC9B6Y,EAAa7pB,GAAKgR,GAAe6Y,EAAazlB,GAAK4M,EAAcM,GAChEtT,KAAK2rB,WAAWV,EAAW5tB,GAAG4E,EAAEoE,EAAE,GAAG4kB,EAAW5tB,GAAGwG,EAAEwC,EAAE,GAAG4kB,EAAW5tB,GAAGA,EAAE,GAAG4tB,EAAW5tB,GAAG4E,EAAE,GAAG2pB,EAAUG,EAAavE,GACvHA,GAAW,IAEXwE,EAAUrV,IAAI3B,cAAciW,EAAW5tB,GAAG4E,EAAEoE,EAAE,GAAG4kB,EAAW5tB,GAAG4E,EAAE,GAAGgpB,EAAW5tB,GAAGwG,EAAEwC,EAAE,GAAG4kB,EAAW5tB,GAAGA,EAAE,IAAKwuB,EAAa7pB,EAAIgR,GAAaM,GAAeuY,EAAazlB,EAAI4M,GAAaM,EAAewB,EAAQzO,EAAE,IAClNrG,KAAK2rB,WAAWK,EAAQxZ,IAAIwZ,EAAQtZ,IAAIsZ,EAAQrZ,IAAIqZ,EAAQvZ,IAAImZ,EAAUG,EAAavE,GACvFA,GAAW,EACXoE,EAAU/rB,GAAI,EAEtB,MACI+rB,EAAU/rB,GAAI,EAElBmT,GAAe8Y,EAAkB9Y,YACjC+Y,GAAgB,CACpB,CAKA,GAJGH,EAAU/W,UACT+W,EAAU/F,QAAQ+F,EAAU3pB,EAAEiS,GAAS,GAAG0X,EAAU3pB,EAAEiS,GAAS,GAAG,IAAIA,GACtE0X,EAAU/F,QAAQ+F,EAAU3pB,EAAE2pB,EAAU/W,QAAU,GAAG,GAAG+W,EAAU3pB,EAAE2pB,EAAU/W,QAAU,GAAG,GAAG,IAAI+W,EAAU/W,QAAU,IAEvH7B,EAAc6Y,EAAazlB,EAC1B,MAED/I,EAAEI,EAAI,IACLmuB,EAAY1E,WAAWM,WACvBA,GAAW,EACXzP,EAAO5W,KAAKyqB,GACZG,EAAe,EAEvB,CACA,OAAOhU,CAEX,EAGA0R,eAAeE,iBAAiB,KAAKI,cAErCvY,gBAAgBsY,cAAcE,sBAC9BA,qBAAqBxa,UAAUsT,YAAc,SAASc,GAClD,GAAG5jB,KAAKggB,KAAKC,WAAWC,UAAYlgB,KAAKkgB,SAAY0D,EAArD,CAGA5jB,KAAKmgB,MAAMyD,EACX5jB,KAAKkgB,QAAUlgB,KAAKggB,KAAKC,WAAWC,QACpC,IAAI7iB,EAAGI,EAAMuC,KAAKgE,kBAAkBtG,OAEpC,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb2C,KAAKgE,kBAAkB3G,GAAG4G,WACvBjE,KAAKgE,kBAAkB3G,GAAG8iB,MACzBngB,KAAKmgB,KAAM,EARnB,CAWJ,EACA6J,qBAAqBxa,UAAU2a,uBAAyB,SAASnK,EAAK5I,GAClEpX,KAAKiE,SAAWjE,KAAK8iB,YACrB9iB,KAAKisB,GAAKhO,gBAAgBwF,QAAQzD,EAAK5I,EAAKlV,EAAE,EAAE,KAAKlC,KAAKgE,mBACtDhE,KAAKgE,kBAAkBtG,QACvBsC,KAAKiE,UAAS,EAEtB,EAEA+lB,qBAAqBxa,UAAU0c,YAAc,SAAS3T,EAAMnc,GACxD,IAAI+vB,EAAcjF,WAAWM,WAC7B2E,EAAYtsB,EAAI0Y,EAAK1Y,EACrB,IAAIxC,EACA+uB,EAASC,EAASC,EAASC,EAAwBC,EAASC,EAC5DzG,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAFZ5oB,EAAM8a,EAAK1D,QACyD6X,EAAQ,EAEnF,IAAIrvB,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb+uB,EAAW7T,EAAKtW,EAAE5E,GAClBivB,EAAW/T,EAAK1U,EAAExG,GAClBgvB,EAAW9T,EAAKlb,EAAEA,GACf+uB,EAAS,KAAKE,EAAS,IAAMF,EAAS,KAAKE,EAAS,IAAMF,EAAS,KAAKC,EAAS,IAAMD,EAAS,KAAKC,EAAS,GACrG,IAAJhvB,GAASA,IAAMI,EAAM,GAAO8a,EAAK1Y,GAQ7B0sB,EADG,IAAJlvB,EACWkb,EAAKtW,EAAExE,EAAI,GAEX8a,EAAKtW,EAAE5E,EAAE,GAGvBovB,GADAD,EAAWrwB,KAAKM,KAAKN,KAAKI,IAAI6vB,EAAS,GAAGG,EAAQ,GAAG,GAAGpwB,KAAKI,IAAI6vB,EAAS,GAAGG,EAAQ,GAAG,KAChEpwB,KAAKc,IAAIuvB,EAAS,EAAEpwB,GAAOowB,EAAW,EAC9DxG,EAAKI,EAAKgG,EAAS,IAAIG,EAAQ,GAAGH,EAAS,IAAIK,EAC/CxG,EAAKI,EAAK+F,EAAS,IAAIA,EAAS,GAAGG,EAAQ,IAAIE,EAC/CvG,EAAKF,GAAIA,EAAGoG,EAAS,IAAIjuB,YACzBgoB,EAAKF,GAAIA,EAAGmG,EAAS,IAAIjuB,YACzBguB,EAAYpG,YAAYC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGqG,GAC1CA,GAAS,EAGLH,EADDlvB,IAAMI,EAAM,EACD8a,EAAKtW,EAAE,GAEPsW,EAAKtW,EAAE5E,EAAE,GAGvBovB,GADAD,EAAWrwB,KAAKM,KAAKN,KAAKI,IAAI6vB,EAAS,GAAGG,EAAQ,GAAG,GAAGpwB,KAAKI,IAAI6vB,EAAS,GAAGG,EAAQ,GAAG,KAChEpwB,KAAKc,IAAIuvB,EAAS,EAAEpwB,GAAOowB,EAAW,EAC9DxG,EAAKE,EAAKkG,EAAS,IAAIG,EAAQ,GAAGH,EAAS,IAAIK,EAC/CxG,EAAKE,EAAKiG,EAAS,IAAIG,EAAQ,GAAGH,EAAS,IAAIK,EAC/CrG,EAAKJ,GAAIA,EAAGoG,EAAS,IAAIjuB,YACzBkoB,EAAKJ,GAAIA,EAAGmG,EAAS,IAAIjuB,YACzBguB,EAAYpG,YAAYC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGqG,GAC1CA,GAAS,IAhCTP,EAAYpG,YAAYqG,EAAS,GAAGA,EAAS,GAAGE,EAAS,GAAGA,EAAS,GAAGD,EAAS,GAAGA,EAAS,GAAGK,GAIhGA,GAAS,IA+BbP,EAAYpG,YAAYxN,EAAKtW,EAAE5E,GAAG,GAAGkb,EAAKtW,EAAE5E,GAAG,GAAGkb,EAAK1U,EAAExG,GAAG,GAAGkb,EAAK1U,EAAExG,GAAG,GAAGkb,EAAKlb,EAAEA,GAAG,GAAGkb,EAAKlb,EAAEA,GAAG,GAAGqvB,GACtGA,GAAS,GAGjB,OAAOP,CACX,EAEAnC,qBAAqBxa,UAAUwb,cAAgB,SAASrqB,GACpD,IAAIsqB,EACA5tB,EACAgJ,EAAG6Q,EAIC1C,EAAqBuS,EALtBtpB,EAAMuC,KAAK+X,OAAOra,OAErBuuB,EAAKjsB,KAAKisB,GAAGhqB,EAEjB,GAAU,IAAPgqB,EAEC,IAAI5uB,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EAAE,CAIf,IAHAmX,EAAYxU,KAAK+X,OAAO1a,IACHgtB,MAAMlmB,MAC3B4iB,EAAuBvS,EAAUuS,qBAC3BvS,EAAU6V,MAAMlK,KAAQngB,KAAKmgB,KAAQxf,EAKvC,IAJAomB,EAAqBqE,gBACrB5W,EAAU6V,MAAMlK,KAAM,EACtB8K,EAAazW,EAAU6V,MAAMlmB,MAAM4T,OACnCb,EAAO1C,EAAU6V,MAAMlmB,MAAM0Q,QACzBxO,EAAE,EAAEA,EAAE6Q,EAAK7Q,GAAG,EACd0gB,EAAqBM,SAASrnB,KAAKksB,YAAYjB,EAAW5kB,GAAG4lB,IAGrEzX,EAAU6V,MAAMlmB,MAAQqQ,EAAUuS,oBACtC,CAGA/mB,KAAKgE,kBAAkBtG,SACvBsC,KAAKmgB,KAAM,EAEnB,EAGAsJ,eAAeE,iBAAiB,KAAKK,sBAErCC,iBAAiBza,UAAUsT,YAAc,SAASc,GAC9C,GAAG5jB,KAAKggB,KAAKC,WAAWC,UAAYlgB,KAAKkgB,SAAY0D,EAArD,CAGA5jB,KAAKmgB,MAAMyD,EACX,IAAIvmB,EAAGI,EAAMuC,KAAKgE,kBAAkBtG,OAEpC,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb2C,KAAKgE,kBAAkB3G,GAAG4G,WACvBjE,KAAKgE,kBAAkB3G,GAAG8iB,MACzBngB,KAAKmgB,KAAM,EAPnB,CAUJ,EAEA8J,iBAAiBza,UAAU2a,uBAAyB,SAASnK,EAAK5I,GAC9DpX,KAAKiE,SAAWjE,KAAK8iB,YACrB9iB,KAAKH,EAAIoe,gBAAgBwF,QAAQzD,EAAK5I,EAAKvX,EAAE,EAAE,KAAKG,KAAKgE,mBACzDhE,KAAK6D,EAAIoa,gBAAgBwF,QAAQzD,EAAK5I,EAAKvT,EAAE,EAAE,KAAK7D,KAAKgE,mBACzDhE,KAAK4D,GAAKqa,gBAAgBwF,QAAQzD,EAAK5I,EAAKxT,GAAG,EAAE,KAAK5D,KAAKgE,mBAC3DhE,KAAKoX,KAAOA,EACRpX,KAAKgE,kBAAkBtG,QACvBsC,KAAKiE,UAAS,GAElBjE,KAAK2sB,QAAU,IAAIjoB,OACnB1E,KAAK4sB,QAAU,IAAIloB,OACnB1E,KAAK6sB,QAAU,IAAInoB,OACnB1E,KAAK8sB,QAAU,IAAIpoB,OACnB1E,KAAK+sB,OAAS,IAAIroB,MACtB,EAEAulB,iBAAiBza,UAAUwd,gBAAkB,SAASL,EAASC,EAASC,EAAShmB,EAAWgM,EAAMoa,GAC9F,IAAI5Y,EAAM4Y,GAAO,EAAI,EACjBC,EAASrmB,EAAU7E,EAAEC,EAAE,IAAM,EAAI4E,EAAU7E,EAAEC,EAAE,KAAO,EAAI4Q,GAC1Dsa,EAAStmB,EAAU7E,EAAEC,EAAE,IAAM,EAAI4E,EAAU7E,EAAEC,EAAE,KAAO,EAAI4Q,GAC9D8Z,EAAQlmB,UAAUI,EAAUxE,EAAEJ,EAAE,GAAKoS,EAAMxB,EAAMhM,EAAUxE,EAAEJ,EAAE,GAAKoS,EAAMxB,EAAMhM,EAAUxE,EAAEJ,EAAE,IAC9F2qB,EAAQnmB,WAAWI,EAAUV,EAAElE,EAAE,IAAK4E,EAAUV,EAAElE,EAAE,GAAI4E,EAAUV,EAAElE,EAAE,IACtE2qB,EAAQ/nB,QAAQgC,EAAU3E,EAAED,EAAIoS,EAAMxB,GACtC+Z,EAAQnmB,UAAUI,EAAUV,EAAElE,EAAE,GAAI4E,EAAUV,EAAElE,EAAE,GAAI4E,EAAUV,EAAElE,EAAE,IACpE4qB,EAAQpmB,WAAWI,EAAUV,EAAElE,EAAE,IAAK4E,EAAUV,EAAElE,EAAE,GAAI4E,EAAUV,EAAElE,EAAE,IACtE4qB,EAAQ9mB,MAAMknB,EAAM,EAAEC,EAASA,EAAQD,EAAM,EAAEE,EAASA,GACxDN,EAAQpmB,UAAUI,EAAUV,EAAElE,EAAE,GAAI4E,EAAUV,EAAElE,EAAE,GAAI4E,EAAUV,EAAElE,EAAE,GACxE,EAEAgoB,iBAAiBza,UAAUhL,KAAO,SAASwb,EAAM7V,EAAK2b,EAAKsH,EAAWppB,GAYlE,IAXAhE,KAAKggB,KAAOA,EACZhgB,KAAKmK,IAAMA,EACXnK,KAAK8lB,IAAMA,EACX9lB,KAAKotB,UAAYA,EACjBptB,KAAKqtB,eAAiB,EACtBrtB,KAAKstB,UAAY,GACjBttB,KAAKutB,QAAU,GACfvtB,KAAKgE,kBAAoB,GACzBhE,KAAKkgB,SAAW,EAChBlgB,KAAKmqB,uBAAuBnK,EAAK7V,EAAI2b,IAE/BA,EAAI,GACNA,GAAO,EAEP9lB,KAAKstB,UAAUE,QAAQrjB,EAAI2b,IAG5B9lB,KAAKgE,kBAAkBtG,QACtBsC,KAAKsG,GAAI,EACTtC,EAAkB7C,KAAKnB,OAEvBA,KAAKiE,UAAS,EAEtB,EAEAgmB,iBAAiBza,UAAUie,cAAgB,SAASC,GAChD,IAAIrwB,EAAGI,EAAMiwB,EAAShwB,OACtB,IAAIL,EAAI,EAAGA,EAAII,EAAKJ,GAAK,EACrBqwB,EAASrwB,GAAGswB,YAAa,EACH,OAAnBD,EAASrwB,GAAGsJ,IACX3G,KAAKytB,cAAcC,EAASrwB,GAAGib,GAG3C,EAEA2R,iBAAiBza,UAAUoe,cAAgB,SAASF,GACnCA,EAAShwB,OAAtB,IACImwB,EAAc3V,KAAKC,MAAMD,KAAKE,UAAUsV,IAE5C,OADA1tB,KAAKytB,cAAcI,GACZA,CACX,EAEA5D,iBAAiBza,UAAUse,kBAAoB,SAASJ,EAAUK,GAC9D,IAAI1wB,EAAGI,EAAMiwB,EAAShwB,OACtB,IAAIL,EAAI,EAAGA,EAAII,EAAMJ,GAAK,EACtBqwB,EAASrwB,GAAG2wB,QAAUD,EACA,OAAnBL,EAASrwB,GAAGsJ,IACX3G,KAAK8tB,kBAAkBJ,EAASrwB,GAAGib,GAAIyV,EAGnD,EAEA9D,iBAAiBza,UAAUwb,cAAgB,SAASrqB,GAEhD,GAAGX,KAAKggB,KAAKC,WAAWC,UAAYlgB,KAAKkgB,UAGzClgB,KAAKkgB,QAAUlgB,KAAKggB,KAAKC,WAAWC,QAChClgB,KAAKgE,kBAAkBtG,QAAWiD,IAClCX,KAAKmgB,KAAM,GAEZngB,KAAKmgB,KAAI,CACR,IAAI8N,EAAS9xB,KAAK+xB,KAAKluB,KAAKH,EAAEoC,GAC9B,GAAGjC,KAAKutB,QAAQ7vB,OAASuwB,EAAO,CAC5B,KAAMjuB,KAAKutB,QAAQ7vB,OAASuwB,GAAO,CAC/B,IAAIE,EAAQ,CACR7V,GAAGtY,KAAK4tB,cAAc5tB,KAAKstB,WAC3B3mB,GAAG,MAEPwnB,EAAM7V,GAAGnX,KAAK,CAAC,EAAI,CAAC,EAAI,EAAE,GAAK,EAAE,EAAI,CAAC,EAAE,IAAI,GAAK,YAAY,EAAI,CAAC,EAAI,EAAE,GAAK,EAAE,EAAI,KAAK,EAAI,CAAC,EAAI,EAAE,GAAK,EAAE,EAAI,CAAC,EAAE,IAAI,EAAI,CAAC,EAAI,EAAE,GAAK,EAAE,EAAI,GAAG,EAAI,CAAC,EAAI,EAAE,GAAK,EAAE,EAAI,CAAC,IAAI,MAAM,GAAK,CAAC,EAAI,EAAE,GAAK,EAAE,EAAI,GAAG,GAAK,CAAC,EAAI,EAAE,GAAK,EAAE,EAAI,GAAG,GAAK,OAExOnB,KAAKmK,IAAI5I,OAAO,EAAE,EAAE4sB,GACpBnuB,KAAKutB,QAAQhsB,OAAO,EAAE,EAAE4sB,GACxBnuB,KAAKqtB,gBAAkB,CAC3B,CACArtB,KAAKggB,KAAKoO,cACd,CACA,IAAI/wB,EAAa0wB,EAAVM,EAAO,EACd,IAAIhxB,EAAI,EAAGA,GAAM2C,KAAKutB,QAAQ7vB,OAAS,EAAGL,GAAK,EAC3C0wB,EAAaM,EAAOJ,EACpBjuB,KAAKutB,QAAQlwB,GAAG2wB,QAAUD,EAC1B/tB,KAAK8tB,kBAAkB9tB,KAAKutB,QAAQlwB,GAAGib,GAAIyV,GAC3CM,GAAQ,EAGZruB,KAAKqtB,eAAiBY,EACtBjuB,KAAKggB,KAAKrf,YAAa,EAGvB,IAAIgC,EAAS3C,KAAK6D,EAAE5B,EAChBqsB,EAAe3rB,EAAO,EACtB4rB,EAAc5rB,EAAS,EAAIxG,KAAKU,MAAM8F,GAAUxG,KAAK+xB,KAAKvrB,GAG1D6rB,GADOxuB,KAAK4D,GAAG3B,EAAE2C,MACR5E,KAAK2sB,QAAQ/nB,OACtB6pB,EAASzuB,KAAK4sB,QAAQhoB,MACtB8pB,EAAS1uB,KAAK6sB,QAAQjoB,MAC1B5E,KAAK2sB,QAAQhoB,QACb3E,KAAK4sB,QAAQjoB,QACb3E,KAAK6sB,QAAQloB,QACb3E,KAAK8sB,QAAQnoB,QACb3E,KAAK+sB,OAAOpoB,QACZ,IAAIgqB,EAAY,EAEhB,GAAGhsB,EAAS,EAAG,CACX,KAAMgsB,EAAUJ,GACZvuB,KAAKgtB,gBAAgBhtB,KAAK2sB,QAAS3sB,KAAK4sB,QAAS5sB,KAAK6sB,QAAS7sB,KAAK4D,GAAI,GAAG,GAC3E+qB,GAAa,EAEdL,IACCtuB,KAAKgtB,gBAAgBhtB,KAAK2sB,QAAS3sB,KAAK4sB,QAAS5sB,KAAK6sB,QAAS7sB,KAAK4D,GAAI0qB,GAAc,GACtFK,GAAaL,EAErB,MAAO,GAAG3rB,EAAS,EAAG,CAClB,KAAMgsB,EAAUJ,GACZvuB,KAAKgtB,gBAAgBhtB,KAAK2sB,QAAS3sB,KAAK4sB,QAAS5sB,KAAK6sB,QAAS7sB,KAAK4D,GAAI,GAAG,GAC3E+qB,GAAa,EAEdL,IACCtuB,KAAKgtB,gBAAgBhtB,KAAK2sB,QAAS3sB,KAAK4sB,QAAS5sB,KAAK6sB,QAAS7sB,KAAK4D,IAAM0qB,GAAc,GACxFK,GAAaL,EAErB,CACAjxB,EAAoB,IAAhB2C,KAAKoX,KAAK5Q,EAAU,EAAIxG,KAAKqtB,eAAiB,EAClD,IAAIhZ,EAAsB,IAAhBrU,KAAKoX,KAAK5Q,EAAU,GAAK,EAEnC,IADA6nB,EAAOruB,KAAKqtB,eACNgB,GAAK,CACP,GAAiB,IAAdM,EAAgB,EACL,IAANtxB,GAAmB,IAARgX,GAAehX,IAAM2C,KAAKqtB,eAAiB,IAAc,IAAThZ,IAC3DrU,KAAKgtB,gBAAgBhtB,KAAK2sB,QAAS3sB,KAAK4sB,QAAS5sB,KAAK6sB,QAAS7sB,KAAK4D,GAAI,GAAG,GAE/E5D,KAAK+sB,OAAOlmB,UAAU4nB,EAAO,GAAGA,EAAO,GAAGA,EAAO,GAAGA,EAAO,GAAGA,EAAO,GAAGA,EAAO,GAAGA,EAAO,GAAGA,EAAO,GAAGA,EAAO,GAAGA,EAAO,GAAGA,EAAO,IAAIA,EAAO,IAAIA,EAAO,IAAIA,EAAO,IAAIA,EAAO,IAAIA,EAAO,KACxLzuB,KAAK+sB,OAAOlmB,UAAU6nB,EAAO,GAAGA,EAAO,GAAGA,EAAO,GAAGA,EAAO,GAAGA,EAAO,GAAGA,EAAO,GAAGA,EAAO,GAAGA,EAAO,GAAGA,EAAO,GAAGA,EAAO,GAAGA,EAAO,IAAIA,EAAO,IAAIA,EAAO,IAAIA,EAAO,IAAIA,EAAO,IAAIA,EAAO,KACxL1uB,KAAK+sB,OAAOlmB,UAAU2nB,EAAO,GAAGA,EAAO,GAAGA,EAAO,GAAGA,EAAO,GAAGA,EAAO,GAAGA,EAAO,GAAGA,EAAO,GAAGA,EAAO,GAAGA,EAAO,GAAGA,EAAO,GAAGA,EAAO,IAAIA,EAAO,IAAIA,EAAO,IAAIA,EAAO,IAAIA,EAAO,IAAIA,EAAO,KACxL,IAEOtX,GADH0X,GADAC,EAAQ7uB,KAAKotB,UAAU/vB,GAAGib,IACHuW,EAAMnxB,OAAS,GAAGmJ,UAAUioB,OAAO7sB,EAAE2C,OACnClH,OAC7B,IAAI2I,EAAE,EAAEA,EAAE6Q,EAAK7Q,GAAG,EACduoB,EAAevoB,GAAKrG,KAAK+sB,OAAOnoB,MAAMyB,GAE1CrG,KAAK+sB,OAAOpoB,OAChB,KAAO,CAEH,IAAIkqB,EACAD,EACAvoB,EACJ,IAJArG,KAAK+sB,OAAOpoB,QAGLuS,GADH0X,GADAC,EAAQ7uB,KAAKotB,UAAU/vB,GAAGib,IACHuW,EAAMnxB,OAAS,GAAGmJ,UAAUioB,OAAO7sB,EAAE2C,OACnClH,OACzB2I,EAAE,EAAEA,EAAE6Q,EAAK7Q,GAAG,EACduoB,EAAevoB,GAAKrG,KAAK+sB,OAAOnoB,MAAMyB,EAE9C,CACAsoB,GAAa,EACbN,GAAQ,EACRhxB,GAAKgX,CACT,CACJ,CACJ,EAEA4V,iBAAiBza,UAAU6X,SAAW,WAAW,EAEjDoC,eAAeE,iBAAiB,KAAKM,kBAOrCC,gBAAgB1a,UAAU6X,SAAW,SAAS7S,GAC1CxU,KAAK6U,UAAY7U,KAAKwlB,aACxBxlB,KAAK+X,OAAS/X,KAAK+X,OAAO6N,OAAO9nB,MAAMC,MAAM,KAAK,CAACL,OAAOsC,KAAKwlB,cAC/DxlB,KAAKwlB,YAAc,GAEpBxlB,KAAK+X,OAAO/X,KAAK6U,SAAWL,EAC5BxU,KAAK6U,SAAW,CACjB,EAEAqV,gBAAgB1a,UAAU4b,cAAgB,WACzC,IAAI/tB,EACJ,IAAIA,EAAI,EAAGA,EAAI2C,KAAK6U,QAASxX,GAAK,EACjC6pB,WAAW6H,QAAQ/uB,KAAK+X,OAAO1a,IAEhC2C,KAAK6U,QAAU,CAChB,EACA,IAAIma,eAAkB,WAElB,IAAIC,EAEJ,SAASC,IACLlvB,KAAKmvB,cAAgB,EAClBnvB,KAAKmvB,eAAiBnvB,KAAKovB,aACvBH,GACCA,EAAe,KAG3B,CAEA,SAASI,EAAcC,GACnB,IAAI/W,EAAO,GACX,GAAGvY,KAAKuvB,WAAW,CACf,IAAIC,EAAYF,EAAUjtB,GACW,IAAlCmtB,EAAUC,QAAQ,aACjBD,EAAYA,EAAU5W,MAAM,KAAK,IAErCL,EAAOvY,KAAKuvB,WAAaC,CAC7B,MACIjX,EAAOvY,KAAKuY,KACZA,GAAQ+W,EAAUI,EAAIJ,EAAUI,EAAI,GACpCnX,GAAQ+W,EAAUjtB,EAEtB,OAAOkW,CACX,CAEA,SAASoX,EAAUpX,GACf,IAAIqX,EAAMzV,SAASpJ,cAAc,OACjC6e,EAAIC,iBAAiB,OAAQX,EAAY7tB,KAAKrB,OAAO,GACrD4vB,EAAIC,iBAAiB,QAASX,EAAY7tB,KAAKrB,OAAO,GACtD4vB,EAAIE,IAAMvX,CACd,CACA,SAASwX,EAAW5W,EAAQ6W,GAGxB,IAAI3yB,EACJ,IAHA4xB,EAAiBe,EACjBhwB,KAAKiwB,YAAc9W,EAAOzb,OAEtBL,EAAE,EAAEA,EAAE2C,KAAKiwB,YAAY5yB,GAAG,EACtB8b,EAAO9b,GAAGyZ,SACV6Y,EAAUtuB,KAAKrB,KAAf2vB,CAAqBN,EAAchuB,KAAKrB,KAAnBqvB,CAAyBlW,EAAO9b,KACrD2C,KAAKovB,aAAe,EAGhC,CAEA,SAASc,EAAQ3X,GACbvY,KAAKuY,KAAOA,GAAQ,EACxB,CAEA,SAAS4X,EAAc5X,GACnBvY,KAAKuvB,WAAahX,GAAQ,EAC9B,CAEA,OAAO,WACHvY,KAAK+vB,WAAaA,EAClB/vB,KAAKmwB,cAAgBA,EACrBnwB,KAAKkwB,QAAUA,EACflwB,KAAKuvB,WAAa,GAClBvvB,KAAKuY,KAAO,GACZvY,KAAKiwB,YAAc,EACnBjwB,KAAKovB,YAAc,EACnBpvB,KAAKmvB,aAAe,CACxB,CACJ,CAjEqB,GAkEjBiB,eAAkB,WACrB,IAAIpiB,EAAK,CACRqiB,UAAU,GAKX,OAHI,WAAWv0B,KAAKC,UAAUC,YAAc,UAAUF,KAAKC,UAAUC,YAAc,WAAWF,KAAKC,UAAUC,YAAc,aAAaF,KAAKC,UAAUC,cACpJgS,EAAGqiB,UAAW,GAEVriB,CACR,CARqB,GASjBsiB,eACM,CACTtiB,aAGA,SAAsBuiB,GACd,IAAIC,EAAMrW,SAASiC,gBAAgB3gB,MAAM,UAOlC,OANP+0B,EAAIjT,aAAa,KAAKgT,GACfC,EAAIjT,aAAa,cAAc,qBAC/BiT,EAAIjT,aAAa,IAAI,MACrBiT,EAAIjT,aAAa,IAAI,MACrBiT,EAAIjT,aAAa,QAAQ,QACzBiT,EAAIjT,aAAa,SAAS,QACnBiT,CACtB,EAXAxiB,6BAaA,WACe,IAAIyiB,EAAgBtW,SAASiC,gBAAgB3gB,MAAM,iBAInD,OAHAg1B,EAAclT,aAAa,OAAO,UAClCkT,EAAclT,aAAa,8BAA8B,QACzDkT,EAAclT,aAAa,SAAS,8CAC7BkT,CACtB,GAID,SAASC,qBAAqBC,EAAUC,EAAY5Q,GAChDhgB,KAAKmgB,KAAM,EACXngB,KAAK6wB,aAAc,EACtB7wB,KAAK8wB,gBAAiB,EACtB9wB,KAAK+wB,UAAY,EACjB/wB,KAAKgxB,mBAAqB,GAC1BhxB,KAAKixB,UAAYN,EACjB3wB,KAAKkxB,YAAcN,EACnB5wB,KAAKmxB,MAAQnR,EACbhgB,KAAKoxB,eAAiBtzB,MAAMC,MAAM,KAAK,CAACL,OAAOsC,KAAKixB,UAAU9qB,EAAEzI,SAChEsC,KAAKqxB,UAAY,CAAC,EAClBrxB,KAAKsxB,aAAe,CACnBC,UAAW,CAAC,GAEbvxB,KAAKwxB,gBAAkB,GACpBxxB,KAAKyxB,oBAAqB,CAE9B,CA+iBA,SAASC,YAAY7tB,EAAG8tB,EAAIrU,EAAIsU,EAAIprB,EAAGnE,GACnCrC,KAAK6D,EAAIA,EACT7D,KAAK2xB,GAAKA,EACV3xB,KAAKsd,GAAKA,EACVtd,KAAK4xB,GAAKA,EACV5xB,KAAKwG,EAAIA,EACTxG,KAAKqC,EAAIA,EACTrC,KAAKmgB,IAAM,CACVtc,GAAG,EACH8tB,KAAMA,EACNrU,KAAMA,EACNsU,KAAMA,EACNprB,GAAG,EACHnE,GAAG,EAER,CA2CA,SAASwvB,aAAa7R,EAAM5I,EAAMpT,GACjChE,KAAK+wB,UAAY,MACjB/wB,KAAK0gB,GAAK,GACV1gB,KAAKiC,EAAI,GACTjC,KAAK+gB,IAAK,EACV/gB,KAAKW,YAAa,EAClBX,KAAKmgB,KAAM,EACXngB,KAAKoX,KAAOA,EACZpX,KAAKggB,KAAOA,EACZhgB,KAAK8xB,WAAa,EAClB9xB,KAAK2kB,YAAc,CAClBoN,OAAQ,EACFC,SAAU,CAAC,EAAE,GACbtxB,EAAG,GACHuxB,OAAQ,GACRC,QAAS,GACTN,GAAI,GACJvrB,EAAG,GACH8rB,cAAe,GACf5rB,EAAG,GACH6rB,GAAI,EACJC,WAAY,GACZC,GAAI,GACJC,GAAI,GACJvwB,EAAG,GACHsb,GAAI,GACJqU,GAAI,EACJ7xB,EAAG,EACH8D,GAAI,EACJ4uB,eAAe,EACfC,iBAAiB,EACjBC,iBAAiB,EACjBC,QAAS,EACT/Y,YAAY,GAGhB5Z,KAAK4yB,iBACP5uB,EAAkB7C,KAAKnB,MAEvBA,KAAKiE,UAAS,EAEhB,CAhpBAysB,qBAAqBlhB,UAAUqjB,iBAAmB,SAAS7uB,GACvD,IAAI3G,EAAkCy1B,EAAcC,EAA7Ct1B,EAAMuC,KAAKixB,UAAU9qB,EAAEzI,OAC1B+lB,EAAUxF,gBAAgBwF,QAC9B,IAAIpmB,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EAEby1B,EAAe,CACX3sB,EAAG,CAAC,EACJnE,EAAG,CAAC,GAEL,MALH+wB,EAAgB/yB,KAAKixB,UAAU9qB,EAAE9I,IAKT8I,IACpB2sB,EAAa3sB,EAAEjE,EAAIuhB,EAAQzjB,KAAKmxB,MAAM4B,EAAc5sB,EAAEjE,EAAE,EAAEjE,UAAU+B,KAAKgxB,qBAE1E,OAAQ+B,EAAc5sB,IACrB2sB,EAAa3sB,EAAE0c,GAAKY,EAAQzjB,KAAKmxB,MAAM4B,EAAc5sB,EAAE0c,GAAG,EAAE5kB,UAAU+B,KAAKgxB,qBAE5E,OAAQ+B,EAAc5sB,IACrB2sB,EAAa3sB,EAAEyc,GAAKa,EAAQzjB,KAAKmxB,MAAM4B,EAAc5sB,EAAEyc,GAAG,EAAE3kB,UAAU+B,KAAKgxB,qBAE5E,OAAQ+B,EAAc5sB,IACrB2sB,EAAa3sB,EAAEoc,GAAKkB,EAAQzjB,KAAKmxB,MAAM4B,EAAc5sB,EAAEoc,GAAG,EAAEtkB,UAAU+B,KAAKgxB,qBAE5E,OAAQ+B,EAAc5sB,IACrB2sB,EAAa3sB,EAAEsc,GAAKgB,EAAQzjB,KAAKmxB,MAAM4B,EAAc5sB,EAAEsc,GAAG,EAAExkB,UAAU+B,KAAKgxB,qBAE5E,MAAO+B,EAAc5sB,IACpB2sB,EAAa3sB,EAAEnE,EAAIyhB,EAAQzjB,KAAKmxB,MAAM4B,EAAc5sB,EAAEnE,EAAE,EAAE,IAAKhC,KAAKgxB,qBAErE,MAAO+B,EAAc5sB,IACpB2sB,EAAa3sB,EAAEA,EAAIsd,EAAQzjB,KAAKmxB,MAAM4B,EAAc5sB,EAAEA,EAAE,EAAE,EAAEnG,KAAKgxB,qBAElE,MAAO+B,EAAc5sB,IACpB2sB,EAAa3sB,EAAEtC,EAAI4f,EAAQzjB,KAAKmxB,MAAM4B,EAAc5sB,EAAEtC,EAAE,EAAE,IAAK7D,KAAKgxB,qBAErE,MAAO+B,EAAc5sB,IACpB2sB,EAAa3sB,EAAE9D,EAAIohB,EAAQzjB,KAAKmxB,MAAM4B,EAAc5sB,EAAE9D,EAAE,EAAE,EAAErC,KAAKgxB,qBAElE,OAAQ+B,EAAc5sB,IACrB2sB,EAAa3sB,EAAEwrB,GAAKlO,EAAQzjB,KAAKmxB,MAAM4B,EAAc5sB,EAAEwrB,GAAG,EAAE,EAAE3xB,KAAKgxB,qBAEpE,OAAQ+B,EAAc5sB,IACrB2sB,EAAa3sB,EAAEmX,GAAKmG,EAAQzjB,KAAKmxB,MAAM4B,EAAc5sB,EAAEmX,GAAG,EAAE,EAAEtd,KAAKgxB,qBAEpE,OAAQ+B,EAAc5sB,IACrB2sB,EAAa3sB,EAAEyrB,GAAKnO,EAAQzjB,KAAKmxB,MAAM4B,EAAc5sB,EAAEyrB,GAAG,EAAE,EAAE5xB,KAAKgxB,qBAEpE,OAAQ+B,EAAc5sB,IACrB2sB,EAAa3sB,EAAE6sB,GAAKvP,EAAQzjB,KAAKmxB,MAAM4B,EAAc5sB,EAAE6sB,GAAG,EAAE,EAAEhzB,KAAKgxB,qBAEpE,OAAQ+B,EAAc5sB,IACrB2sB,EAAa3sB,EAAE8sB,GAAKxP,EAAQzjB,KAAKmxB,MAAM4B,EAAc5sB,EAAE8sB,GAAG,EAAE,IAAKjzB,KAAKgxB,qBAEvE,OAAQ+B,EAAc5sB,IACrB2sB,EAAa3sB,EAAE+sB,GAAKzP,EAAQzjB,KAAKmxB,MAAM4B,EAAc5sB,EAAE+sB,GAAG,EAAE,IAAKlzB,KAAKgxB,qBAEvE,MAAO+B,EAAc5sB,IACpB2sB,EAAa3sB,EAAErG,EAAI2jB,EAAQzjB,KAAKmxB,MAAM4B,EAAc5sB,EAAErG,EAAE,EAAE,EAAEE,KAAKgxB,qBAErE8B,EAAa9wB,EAAIic,gBAAgBqH,oBAAoBtlB,KAAKmxB,MAAM4B,EAAc/wB,EAAEhC,KAAKgxB,oBACrF8B,EAAa9wB,EAAElC,EAAIizB,EAAc/wB,EAAElC,EACnCE,KAAKoxB,eAAe/zB,GAAKy1B,EAE1B9yB,KAAKixB,UAAU5uB,GAAK,MAAOrC,KAAKixB,UAAU5uB,GACzCrC,KAAKqxB,UAAY,CACb3wB,EAAG+iB,EAAQzjB,KAAKmxB,MAAMnxB,KAAKixB,UAAU5uB,EAAE3B,EAAE,EAAE,EAAEV,KAAKgxB,oBAClDzqB,EAAGkd,EAAQzjB,KAAKmxB,MAAMnxB,KAAKixB,UAAU5uB,EAAEkE,EAAE,EAAE,EAAEvG,KAAKgxB,oBAClD9uB,EAAGlC,KAAKixB,UAAU5uB,EAAEH,EACpBsE,EAAGxG,KAAKmxB,MAAMgC,YAAYC,gBAAgBpzB,KAAKixB,UAAU5uB,EAAEmE,IAE/DxG,KAAK8wB,gBAAiB,GAEtB9wB,KAAK8wB,gBAAiB,EAE1B9wB,KAAKsxB,aAAaC,UAAY9N,EAAQzjB,KAAKmxB,MAAMnxB,KAAKixB,UAAUzqB,EAAEL,EAAE,EAAE,EAAEnG,KAAKgxB,oBAC1EhxB,KAAKgxB,mBAAmBtzB,QAC1BsG,EAAkB7C,KAAKnB,KAE5B,EAEA0wB,qBAAqBlhB,UAAU6jB,YAAc,SAASpa,EAAcwY,GAEhE,GADAzxB,KAAKyxB,mBAAqBA,EACtBzxB,KAAKmgB,KAAQngB,KAAK6wB,aAAgBY,GAAwBzxB,KAAK8wB,gBAAmB9wB,KAAKqxB,UAAU7qB,EAAE2Z,IAAvG,CAGAngB,KAAK6wB,aAAc,EACnB,IAOIyC,EAAKC,EACLl2B,EAAGI,EARH8zB,EAAYvxB,KAAKsxB,aAAaC,UAAUtvB,EACxCuxB,EAAYxzB,KAAKoxB,eACjBT,EAAW3wB,KAAKixB,UAChBwC,EAAezzB,KAAK0zB,QACpB9C,EAAa5wB,KAAKkxB,YAClByC,EAAuB3zB,KAAKwxB,gBAAgB9zB,OAI5Ck2B,GAHO5zB,KAAKoX,KAGF6B,EAAa1S,GAC3B,GAAGvG,KAAK8wB,eAAgB,CACpB,IAAI1lB,EAAOpL,KAAKqxB,UAAU7qB,EAC1B,IAAIxG,KAAKqxB,UAAUzxB,GAAKI,KAAKqxB,UAAUlR,IAAI,CACvC,IAAIhc,EAAQiH,EAAKnJ,EACdjC,KAAKqxB,UAAUnvB,IACdiC,EAAQD,YAAYC,IAExB,IAKIkV,EALAwa,EAAW,CACXC,QAAS,EACT1gB,SAAU,IAEd3V,EAAM0G,EAAM0Q,QAAU,EAEtB,IAAIE,EAAc,EAClB,IAAK1X,EAAI,EAAGA,EAAII,EAAKJ,GAAK,EACtBgc,EAAW,CACPrX,EAAGmC,EAAMlC,EAAE5E,GACX+I,EAAGjC,EAAMlC,EAAE5E,EAAI,GACfwW,GAAI,CAAC1P,EAAMN,EAAExG,GAAG,GAAK8G,EAAMlC,EAAE5E,GAAG,GAAI8G,EAAMN,EAAExG,GAAG,GAAK8G,EAAMlC,EAAE5E,GAAG,IAC/DyW,GAAI,CAAC3P,EAAM9G,EAAEA,EAAI,GAAG,GAAK8G,EAAMlC,EAAE5E,EAAI,GAAG,GAAI8G,EAAM9G,EAAEA,EAAI,GAAG,GAAK8G,EAAMlC,EAAE5E,EAAI,GAAG,KAEnFsZ,IAAIhD,gBAAgB0F,GACpBwa,EAASC,SAAWza,EAASrF,WAAWV,cACxCugB,EAASzgB,SAASjS,KAAKkY,GACvBtE,GAAesE,EAASrF,WAAWV,cAEvCjW,EAAII,EACA2N,EAAKnJ,EAAEpC,IACPwZ,EAAW,CACPrX,EAAGmC,EAAMlC,EAAE5E,GACX+I,EAAGjC,EAAMlC,EAAE,GACX4R,GAAI,CAAC1P,EAAMN,EAAExG,GAAG,GAAK8G,EAAMlC,EAAE5E,GAAG,GAAI8G,EAAMN,EAAExG,GAAG,GAAK8G,EAAMlC,EAAE5E,GAAG,IAC/DyW,GAAI,CAAC3P,EAAM9G,EAAE,GAAG,GAAK8G,EAAMlC,EAAE,GAAG,GAAIkC,EAAM9G,EAAE,GAAG,GAAK8G,EAAMlC,EAAE,GAAG,KAEnE0U,IAAIhD,gBAAgB0F,GACpBwa,EAASC,SAAWza,EAASrF,WAAWV,cACxCugB,EAASzgB,SAASjS,KAAKkY,GACvBtE,GAAesE,EAASrF,WAAWV,eAEvCtT,KAAKqxB,UAAU0C,GAAKF,CACxB,CACIA,EAAW7zB,KAAKqxB,UAAU0C,GAA9B,IAEsEC,EAAcC,EAAW9kB,EAA3F+kB,EAAgBl0B,KAAKqxB,UAAU3wB,EAAEuB,EAAGkyB,EAAa,EAAGC,EAAW,EAC/D9gB,EAAgB,EAAGjV,GAAO,EAC1B+U,EAAWygB,EAASzgB,SACxB,GAAI8gB,EAAgB,GAAK9oB,EAAKnJ,EAAEpC,EAO5B,IANIg0B,EAASC,QAAU33B,KAAKQ,IAAIu3B,KAC5BA,GAAiB/3B,KAAKQ,IAAIu3B,GAAiBL,EAASC,SAIxDM,GADAjlB,EAASiE,EADT+gB,EAAa/gB,EAAS1V,OAAS,GACDsW,WAAW7E,QACvBzR,OAAS,EACpBw2B,EAAgB,GACnBA,GAAiB/kB,EAAOilB,GAAU3gB,eAClC2gB,GAAY,GACG,IAGXA,GADAjlB,EAASiE,EADT+gB,GAAc,GACgBngB,WAAW7E,QACvBzR,OAAS,GAMvCu2B,GADA9kB,EAASiE,EAAS+gB,GAAYngB,WAAW7E,QACtBilB,EAAW,GAE9B,IACIvhB,EAAMwhB,EADN5gB,GADJugB,EAAe7kB,EAAOilB,IACW3gB,aAErC,CAGAhW,EAAMm2B,EAAQl2B,OACd41B,EAAO,EACPC,EAAO,EACP,IAEIR,EACA1sB,EAAG6Q,EACHod,EAJAC,EAAsB,IAAftb,EAAajX,EAAM,KAC1BwyB,GAAY,EAMhB,GADAtd,EAAOsc,EAAU91B,OACb+zB,EACA,IAAKprB,EAAI,EAAGA,EAAI6Q,EAAM7Q,GAAK,EACJmtB,EAAUntB,GAAGrE,EACfiC,UAAS,GAKlC,IAAI0c,EAAgB8T,EAAMC,EAAUC,EAEhCC,EACAtX,EAAGqU,EAAGC,EAAGtrB,EAETuuB,EAASC,EAASC,EAAuDC,EALnEnW,GAAO,EACboW,EAAcf,EAAcgB,EAAiBf,EAAYgB,EAAef,EAAUgB,GAAe,EAItEC,GAAU,GAAGC,GAAUt1B,KAAKu1B,kBAC3D,IAAKl4B,EAAI,EAAGA,EAAII,EAAKJ,GAAK,EAAG,CAGzB,GAFAo2B,EAAa9uB,QACbiwB,EAAc,EACXhB,EAAQv2B,GAAGuC,EACV0zB,EAAO,EACPC,GAAQta,EAAa0Z,QACrBY,GAAQiB,EAAY,EAAI,EACxBN,EAAgBe,EAChBT,GAAY,EAETx0B,KAAK8wB,iBAEJsD,EAAWe,EAEXlB,GADA9kB,EAASiE,EAFT+gB,EAAae,GAEiBlhB,WAAW7E,QACtBilB,EAAW,GAE9B3gB,GADAugB,EAAe7kB,EAAOilB,IACO3gB,cAC7BH,EAAgB,GAEpB0hB,EAAUH,EAAWE,EAAWM,GAAU,GAC1CC,GAAUt1B,KAAKu1B,sBACd,CACD,GAAGv1B,KAAK8wB,eAAgB,CACpB,GAAGsE,IAAgBxB,EAAQv2B,GAAGm4B,KAAK,CAC/B,OAAOvc,EAAa5S,GAChB,KAAK,EACD6tB,GAAiBnf,EAAckE,EAAaoZ,WAAWuB,EAAQv2B,GAAGm4B,MAClE,MACJ,KAAK,EACDtB,IAAkBnf,EAAckE,EAAaoZ,WAAWuB,EAAQv2B,GAAGm4B,OAAO,EAGlFJ,EAAcxB,EAAQv2B,GAAGm4B,IAC7B,CACI3W,IAAQ+U,EAAQv2B,GAAGwhB,MACf+U,EAAQ/U,KACRqV,GAAiBN,EAAQ/U,GAAK4W,OAElCvB,GAAiBN,EAAQv2B,GAAGq4B,GAAK,EACjC7W,EAAM+U,EAAQv2B,GAAGwhB,KAErBqV,GAAiB3C,EAAU,GAAKqC,EAAQv2B,GAAGq4B,GAAK,IAChD,IAAIC,GAAiB,EACrB,IAAKtvB,EAAI,EAAGA,EAAI6Q,EAAM7Q,GAAK,EAEnB,MADJ0sB,EAAgBS,EAAUntB,GAAGF,MAGzBwa,EADmB6S,EAAUntB,GAAGrE,EACRgjB,QAAQ4O,EAAQv2B,GAAGu4B,UAAUvvB,GAAGsqB,EAASxqB,EAAEE,GAAGrE,EAAEyiB,aAChE/mB,OACJi4B,IAAkB5C,EAAc1wB,EAAEJ,EAAE,GAAK0e,EAAK,GAE9CgV,IAAkB5C,EAAc1wB,EAAEJ,EAAE,GAAK0e,GAI7C,MAAOoS,KAEPpS,EADmB6S,EAAUntB,GAAGrE,EACRgjB,QAAQ4O,EAAQv2B,GAAGu4B,UAAUvvB,GAAGsqB,EAASxqB,EAAEE,GAAGrE,EAAEyiB,aAChE/mB,OACJi4B,IAAkB5C,EAAc5sB,EAAElE,EAAE,GAAK0e,EAAK,GAE9CgV,IAAkB5C,EAAc5sB,EAAElE,EAAE,GAAK0e,GAMrD,IADAtiB,GAAO,EACAA,GACCiV,EAAgBG,GAAiBygB,EAAgByB,KAAmBxmB,GACpE0D,GAAQqhB,EAAgByB,GAAiBriB,GAAiB0gB,EAAavgB,cACvEihB,EAAWT,EAAUhhB,MAAM,IAAM+gB,EAAa/gB,MAAM,GAAKghB,EAAUhhB,MAAM,IAAMJ,EAC/E8hB,EAAWV,EAAUhhB,MAAM,IAAM+gB,EAAa/gB,MAAM,GAAKghB,EAAUhhB,MAAM,IAAMJ,EAC/E4gB,EAAahtB,WAAW8qB,EAAU,GAAGqC,EAAQv2B,GAAGq4B,GAAG,KAAOnE,EAAU,GAAKgD,EAAO,KAChFl2B,GAAO,GACA8Q,IACPmE,GAAiB0gB,EAAavgB,eAC9B2gB,GAAY,IACIjlB,EAAOzR,SACnB02B,EAAW,EAENhhB,EADL+gB,GAAc,GAWVhlB,EAASiE,EAAS+gB,GAAYngB,WAAW7E,OATrC/D,EAAKnJ,EAAEpC,GACPu0B,EAAW,EAEXjlB,EAASiE,EADT+gB,EAAa,GACiBngB,WAAW7E,SAEzCmE,GAAiB0gB,EAAavgB,cAC9BtE,EAAS,OAMjBA,IACA8kB,EAAYD,EAEZvgB,GADAugB,EAAe7kB,EAAOilB,IACO3gB,gBAIzCghB,EAAOb,EAAQv2B,GAAGq4B,GAAK,EAAI9B,EAAQv2B,GAAGw4B,IACtCpC,EAAahtB,WAAWguB,EAAM,EAAG,EACrC,MACIA,EAAOb,EAAQv2B,GAAGq4B,GAAG,EAAI9B,EAAQv2B,GAAGw4B,IACpCpC,EAAahtB,WAAWguB,EAAK,EAAE,GAG/BhB,EAAahtB,WAAW8qB,EAAU,GAAGqC,EAAQv2B,GAAGq4B,GAAG,KAAMnE,EAAU,GAAGgD,EAAK,IAAK,GAIpF,IADcX,EAAQv2B,GAAGkJ,EACrBF,EAAE,EAAEA,EAAE6Q,EAAK7Q,GAAG,EAEV,MADJ0sB,EAAgBS,EAAUntB,GAAGF,KAGzBwa,EADmB6S,EAAUntB,GAAGrE,EACRgjB,QAAQ4O,EAAQv2B,GAAGu4B,UAAUvvB,GAAGsqB,EAASxqB,EAAEE,GAAGrE,EAAEyiB,YACrEzkB,KAAK8wB,eACDnQ,EAAKjjB,OACJw2B,GAAiBnB,EAAcjzB,EAAE6gB,EAAK,GAEtCuT,GAAiBnB,EAAcjzB,EAAE6gB,EAGlCA,EAAKjjB,OACJ41B,GAAQP,EAAcjzB,EAAEmC,EAAE0e,EAAK,GAE/B2S,GAAQP,EAAcjzB,EAAEmC,EAAE0e,GAmB1C,IAdciT,EAAQv2B,GAAGkJ,EACtB0S,EAAayZ,kBACZf,EAAK1Y,EAAa0Y,IAAM,GAEzB1Y,EAAawZ,kBAERnV,EADDrE,EAAaqE,GACP,CAACrE,EAAaqE,GAAG,GAAIrE,EAAaqE,GAAG,GAAIrE,EAAaqE,GAAG,IAEzD,CAAC,EAAE,EAAE,IAGfrE,EAAauZ,eAAiBvZ,EAAa2Y,KAC1CA,EAAK,CAAC3Y,EAAa2Y,GAAG,GAAI3Y,EAAa2Y,GAAG,GAAI3Y,EAAa2Y,GAAG,KAE9DvrB,EAAE,EAAEA,EAAE6Q,EAAK7Q,GAAG,EAEV,MADJ0sB,EAAgBS,EAAUntB,GAAGF,MAGzBwa,EADmB6S,EAAUntB,GAAGrE,EACRgjB,QAAQ4O,EAAQv2B,GAAGu4B,UAAUvvB,GAAGsqB,EAASxqB,EAAEE,GAAGrE,EAAEyiB,aAEhE/mB,OACJ+1B,EAAahtB,WAAWssB,EAAc5sB,EAAElE,EAAE,GAAG0e,EAAK,IAAKoS,EAAc5sB,EAAElE,EAAE,GAAG0e,EAAK,GAAIoS,EAAc5sB,EAAElE,EAAE,GAAG0e,EAAK,IAE/G8S,EAAahtB,WAAWssB,EAAc5sB,EAAElE,EAAE,GAAG0e,GAAOoS,EAAc5sB,EAAElE,EAAE,GAAG0e,EAAMoS,EAAc5sB,EAAElE,EAAE,GAAG0e,IAIhH,IAAIta,EAAE,EAAEA,EAAE6Q,EAAK7Q,GAAG,EAEV,MADJ0sB,EAAgBS,EAAUntB,GAAGF,MAGzBwa,EADmB6S,EAAUntB,GAAGrE,EACRgjB,QAAQ4O,EAAQv2B,GAAGu4B,UAAUvvB,GAAGsqB,EAASxqB,EAAEE,GAAGrE,EAAEyiB,aAChE/mB,OACJ+1B,EAAa1tB,MAAM,GAAIgtB,EAAc/wB,EAAEC,EAAE,GAAG,GAAG0e,EAAK,GAAI,GAAIoS,EAAc/wB,EAAEC,EAAE,GAAG,GAAG0e,EAAK,GAAI,GAE7F8S,EAAa1tB,MAAM,GAAIgtB,EAAc/wB,EAAEC,EAAE,GAAG,GAAG0e,EAAM,GAAIoS,EAAc/wB,EAAEC,EAAE,GAAG,GAAG0e,EAAM,IAInG,IAAIta,EAAE,EAAEA,EAAE6Q,EAAK7Q,GAAG,EAAG,CA+CjB,GA9CA0sB,EAAgBS,EAAUntB,GAAGF,EAE7Bwa,EADmB6S,EAAUntB,GAAGrE,EACRgjB,QAAQ4O,EAAQv2B,GAAGu4B,UAAUvvB,GAAGsqB,EAASxqB,EAAEE,GAAGrE,EAAEyiB,YACpE,OAAQsO,IACLpS,EAAKjjB,OACJ+1B,EAAa3tB,cAAcitB,EAAcxQ,GAAGtgB,EAAI0e,EAAK,GAAIoS,EAActQ,GAAGxgB,EAAI0e,EAAK,IAEnF8S,EAAa3tB,cAAcitB,EAAcxQ,GAAGtgB,EAAI0e,EAAMoS,EAActQ,GAAGxgB,EAAI0e,IAG/E,MAAOoS,IACJpS,EAAKjjB,OACJ+1B,EAAanuB,SAASytB,EAAc7wB,EAAED,EAAI0e,EAAK,IAE/C8S,EAAanuB,SAASytB,EAAc7wB,EAAED,EAAI0e,IAG9C,OAAQoS,IAELpS,EAAKjjB,OACJ+1B,EAAapuB,QAAQ0tB,EAAcnQ,GAAG3gB,EAAE0e,EAAK,IAE7C8S,EAAapuB,QAAQ0tB,EAAcnQ,GAAG3gB,EAAE0e,IAG5C,OAAQoS,IACLpS,EAAKjjB,OACJ+1B,EAAaruB,QAAQ2tB,EAAclQ,GAAG5gB,EAAE0e,EAAK,IAE7C8S,EAAaruB,QAAQ2tB,EAAclQ,GAAG5gB,EAAE0e,IAG5C,MAAOoS,IACJpS,EAAKjjB,OACJk3B,IAAiB7B,EAAclvB,EAAG,EAAE8c,EAAK,GAAKiU,GAAajU,EAAK,GAEhEiU,IAAiB7B,EAAclvB,EAAG,EAAE8c,EAAOiU,GAAajU,GAG5D1H,EAAayZ,iBAAmB,OAAQK,IACrCpS,EAAKjjB,OACJi0B,GAAMoB,EAAcpB,GAAG1vB,EAAE0e,EAAK,GAE9BgR,GAAMoB,EAAcpB,GAAG1vB,EAAE0e,GAG7B1H,EAAawZ,iBAAmB,OAAQM,EACxC,IAAIzsB,EAAE,EAAEA,EAAE,EAAEA,GAAG,EACRqa,EAAKjjB,OACJ4f,EAAGhX,GAAKgX,EAAGhX,IAAMysB,EAAczV,GAAGrb,EAAEqE,GAAKgX,EAAGhX,IAAIqa,EAAK,GAErDrD,EAAGhX,GAAKgX,EAAGhX,IAAMysB,EAAczV,GAAGrb,EAAEqE,GAAKgX,EAAGhX,IAAIqa,EAI5D,GAAI1H,EAAauZ,eAAiBvZ,EAAa2Y,GAAI,CAC/C,GAAG,OAAQmB,EACP,IAAIzsB,EAAE,EAAEA,EAAE,EAAEA,GAAG,EACRqa,EAAKjjB,OACJk0B,EAAGtrB,GAAKsrB,EAAGtrB,IAAMysB,EAAcnB,GAAG3vB,EAAEqE,GAAKsrB,EAAGtrB,IAAIqa,EAAK,GAErDiR,EAAGtrB,GAAKsrB,EAAGtrB,IAAMysB,EAAcnB,GAAG3vB,EAAEqE,GAAKsrB,EAAGtrB,IAAIqa,EAIzD,OAAQoS,IAEHnB,EADDjR,EAAKjjB,OACCoF,YAAY8uB,EAAGmB,EAAcC,GAAG/wB,EAAE0e,EAAK,IAEvC7d,YAAY8uB,EAAGmB,EAAcC,GAAG/wB,EAAE0e,IAG5C,OAAQoS,IAEHnB,EADDjR,EAAKjjB,OACC+E,mBAAmBmvB,EAAGmB,EAAcE,GAAGhxB,EAAE0e,EAAK,IAE9Cle,mBAAmBmvB,EAAGmB,EAAcE,GAAGhxB,EAAE0e,IAGnD,OAAQoS,IAEHnB,EADDjR,EAAKjjB,OACCmF,mBAAmB+uB,EAAGmB,EAAcG,GAAGjxB,EAAE0e,EAAK,IAE9C9d,mBAAmB+uB,EAAGmB,EAAcG,GAAGjxB,EAAE0e,GAG1D,CACJ,CAEA,IAAIta,EAAE,EAAEA,EAAE6Q,EAAK7Q,GAAG,EAGV,MAFJ0sB,EAAgBS,EAAUntB,GAAGF,KAIzBwa,EADmB6S,EAAUntB,GAAGrE,EACRgjB,QAAQ4O,EAAQv2B,GAAGu4B,UAAUvvB,GAAGsqB,EAASxqB,EAAEE,GAAGrE,EAAEyiB,YACrEzkB,KAAK8wB,eACDnQ,EAAKjjB,OACJ+1B,EAAahtB,UAAU,EAAGssB,EAAc1wB,EAAEJ,EAAE,GAAK0e,EAAK,IAAKoS,EAAc1wB,EAAEJ,EAAE,GAAK0e,EAAK,IAEvF8S,EAAahtB,UAAU,EAAGssB,EAAc1wB,EAAEJ,EAAE,GAAK0e,GAAOoS,EAAc1wB,EAAEJ,EAAE,GAAK0e,GAGhFA,EAAKjjB,OACJ+1B,EAAahtB,UAAUssB,EAAc1wB,EAAEJ,EAAE,GAAK0e,EAAK,GAAIoS,EAAc1wB,EAAEJ,EAAE,GAAK0e,EAAK,IAAKoS,EAAc1wB,EAAEJ,EAAE,GAAK0e,EAAK,IAEpH8S,EAAahtB,UAAUssB,EAAc1wB,EAAEJ,EAAE,GAAK0e,EAAMoS,EAAc1wB,EAAEJ,EAAE,GAAK0e,GAAOoS,EAAc1wB,EAAEJ,EAAE,GAAK0e,IAezH,GAVG1H,EAAayZ,kBACZmC,EAAWlD,EAAK,EAAI,EAAIA,GAEzB1Y,EAAawZ,kBACZqC,EAAW,OAAO34B,KAAKC,MAAY,IAANkhB,EAAG,IAAQ,IAAInhB,KAAKC,MAAY,IAANkhB,EAAG,IAAQ,IAAInhB,KAAKC,MAAY,IAANkhB,EAAG,IAAQ,KAE7FrE,EAAauZ,eAAiBvZ,EAAa2Y,KAC1CmD,EAAW,OAAO54B,KAAKC,MAAY,IAANw1B,EAAG,IAAQ,IAAIz1B,KAAKC,MAAY,IAANw1B,EAAG,IAAQ,IAAIz1B,KAAKC,MAAY,IAANw1B,EAAG,IAAQ,KAG7F5xB,KAAK8wB,eAAgB,CAIpB,GAHA2C,EAAahtB,UAAU,GAAGwS,EAAaqZ,IAEvCmB,EAAahtB,UAAU,EAAG8qB,EAAU,GAAGgD,EAAK,IAAMhB,EAAK,GACnD5C,EAAStuB,EAAEA,EAAG,CACdgyB,GAAYL,EAAa/gB,MAAM,GAAKghB,EAAUhhB,MAAM,KAAO+gB,EAAa/gB,MAAM,GAAKghB,EAAUhhB,MAAM,IACnG,IAAI6iB,GAA4B,IAAtB35B,KAAK45B,KAAK1B,GAAkBl4B,KAAK+B,GACvC81B,EAAa/gB,MAAM,GAAKghB,EAAUhhB,MAAM,KACxC6iB,IAAO,KAEXrC,EAAa5uB,QAAQixB,GAAM35B,KAAK+B,GAAK,IACzC,CACAu1B,EAAahtB,UAAUiuB,EAAUC,EAAU,GAC3CT,GAAiB3C,EAAU,GAAGqC,EAAQv2B,GAAGq4B,GAAG,IACzC9B,EAAQv2B,EAAE,IAAMwhB,IAAQ+U,EAAQv2B,EAAE,GAAGwhB,MACpCqV,GAAiBN,EAAQv2B,GAAGq4B,GAAK,EACjCxB,GAAiBjb,EAAarV,GAAG,IAAKqV,EAAajX,EAE3D,KAAK,CAQD,OANAyxB,EAAahtB,UAAU6sB,EAAKC,EAAK,GAE9Bta,EAAa+c,IAEZvC,EAAahtB,UAAUwS,EAAa+c,GAAG,GAAG/c,EAAa+c,GAAG,GAAK/c,EAAa8Y,OAAO,GAEhF9Y,EAAa5S,GAChB,KAAK,EACDotB,EAAahtB,UAAUwS,EAAakZ,eAAiBlZ,EAAa+Y,SAAW/Y,EAAaoZ,WAAWuB,EAAQv2B,GAAGm4B,OAAO,EAAE,GACzH,MACJ,KAAK,EACD/B,EAAahtB,UAAUwS,EAAakZ,eAAiBlZ,EAAa+Y,SAAW/Y,EAAaoZ,WAAWuB,EAAQv2B,GAAGm4B,OAAO,EAAE,EAAE,GAGnI/B,EAAahtB,UAAU,GAAGwS,EAAaqZ,IACvCmB,EAAahtB,UAAUguB,EAAK,EAAE,GAC9BhB,EAAahtB,UAAU8qB,EAAU,GAAGqC,EAAQv2B,GAAGq4B,GAAG,IAAInE,EAAU,GAAGgD,EAAK,IAAI,GAC5EjB,GAAQM,EAAQv2B,GAAGkJ,EAAI0S,EAAarV,GAAG,IAAKqV,EAAajX,CAC7D,CACkB,SAAf4uB,EACCyE,GAAU5B,EAAajpB,QACH,QAAfomB,EACLyE,GAAU5B,EAAa/oB,UAEvB4qB,GAAU,CAAC7B,EAAa7uB,MAAM,GAAG6uB,EAAa7uB,MAAM,GAAG6uB,EAAa7uB,MAAM,GAAG6uB,EAAa7uB,MAAM,GAAG6uB,EAAa7uB,MAAM,GAAG6uB,EAAa7uB,MAAM,GAAG6uB,EAAa7uB,MAAM,GAAG6uB,EAAa7uB,MAAM,GAAG6uB,EAAa7uB,MAAM,GAAG6uB,EAAa7uB,MAAM,GAAG6uB,EAAa7uB,MAAM,IAAI6uB,EAAa7uB,MAAM,IAAI6uB,EAAa7uB,MAAM,IAAI6uB,EAAa7uB,MAAM,IAAI6uB,EAAa7uB,MAAM,IAAI6uB,EAAa7uB,MAAM,KAEjXowB,EAAUJ,CACd,CAEGjB,GAAwBt2B,GACvBi3B,EAAc,IAAI5C,YAAYsD,EAAQH,EAASC,EAASC,EAASM,GAAQC,IACzEt1B,KAAKwxB,gBAAgBrwB,KAAKmzB,GAC1BX,GAAwB,EACxB3zB,KAAKyxB,oBAAqB,IAE1B6C,EAAct0B,KAAKwxB,gBAAgBn0B,GACnC2C,KAAKyxB,mBAAqB6C,EAAY2B,OAAOjB,EAASH,EAAUC,EAAUC,EAAUM,GAASC,KAAYt1B,KAAKyxB,mBAEtH,CAzcA,CA0cJ,EAEAf,qBAAqBlhB,UAAUvL,SAAW,WACzC,GAAGjE,KAAKmxB,MAAMlR,WAAWC,UAAYlgB,KAAK+wB,SAA1C,CAGG/wB,KAAK+wB,SAAW/wB,KAAKmxB,MAAMlR,WAAWC,QACzC,IAAI7iB,EAAGI,EAAMuC,KAAKgxB,mBAAmBtzB,OAErC,IADGsC,KAAKmgB,KAAM,EACV9iB,EAAI,EAAGA,EAAII,EAAKJ,GAAK,EACxB2C,KAAKgxB,mBAAmB3zB,GAAG4G,WACrBjE,KAAKmgB,IAAMngB,KAAKgxB,mBAAmB3zB,GAAG8iB,KAAOngB,KAAKmgB,GANtD,CAQJ,EAEAuQ,qBAAqBlhB,UAAUkkB,QAAU,IAAIhvB,OAC7CgsB,qBAAqBlhB,UAAU+lB,kBAAoB,GAkBnD7D,YAAYliB,UAAUymB,OAAS,SAASpyB,EAAG8tB,EAAIrU,EAAIsU,EAAIprB,EAAGnE,GACzDrC,KAAKmgB,IAAItc,GAAI,EACb7D,KAAKmgB,IAAIwR,IAAK,EACd3xB,KAAKmgB,IAAI7C,IAAK,EACdtd,KAAKmgB,IAAIyR,IAAK,EACd5xB,KAAKmgB,IAAI3Z,GAAI,EACbxG,KAAKmgB,IAAI9d,GAAI,EACb,IAAI6zB,GAAU,EAgCd,OA9BGl2B,KAAK6D,IAAMA,IACb7D,KAAK6D,EAAIA,EACT7D,KAAKmgB,IAAItc,GAAI,EACbqyB,GAAU,GAERl2B,KAAK2xB,KAAOA,IACd3xB,KAAK2xB,GAAKA,EACV3xB,KAAKmgB,IAAIwR,IAAK,EACduE,GAAU,GAERl2B,KAAKsd,KAAOA,IACdtd,KAAKsd,GAAKA,EACVtd,KAAKmgB,IAAI7C,IAAK,EACd4Y,GAAU,GAERl2B,KAAK4xB,KAAOA,IACd5xB,KAAK4xB,GAAKA,EACV5xB,KAAKmgB,IAAIyR,IAAK,EACdsE,GAAU,GAERl2B,KAAKwG,IAAMA,IACbxG,KAAKwG,EAAIA,EACTxG,KAAKmgB,IAAI3Z,GAAI,EACb0vB,GAAU,IAER7zB,EAAE3E,QAAWsC,KAAKqC,EAAE,KAAOA,EAAE,IAAMrC,KAAKqC,EAAE,KAAOA,EAAE,IAAMrC,KAAKqC,EAAE,KAAOA,EAAE,IAAMrC,KAAKqC,EAAE,KAAOA,EAAE,IAAMrC,KAAKqC,EAAE,MAAQA,EAAE,KAAOrC,KAAKqC,EAAE,MAAQA,EAAE,MAChJrC,KAAKqC,EAAIA,EACTrC,KAAKmgB,IAAI9d,GAAI,EACb6zB,GAAU,GAEJA,CACR,EA4CArE,aAAariB,UAAU2mB,eAAiB,SAAS/e,GAC/C,IAAIuN,EAAc3kB,KAAK2kB,YACjBA,EAAYoN,OAAS3a,EAAK2a,OAC1BpN,EAAYqN,SAAW5a,EAAK4a,SAAW5a,EAAK4a,SAAWrN,EAAYqN,SACnErN,EAAYjkB,EAAI0W,EAAK1W,EACrBikB,EAAYsN,OAAS7a,EAAK6a,OAC1BtN,EAAYuN,QAAU9a,EAAK8a,QAC3BvN,EAAYiN,GAAKxa,EAAKwa,GACtBjN,EAAYte,EAAI+Q,EAAK/Q,EACrBse,EAAYwN,cAAgB/a,EAAK+a,cACjCxN,EAAYpe,EAAI6Q,EAAK7Q,EACrBoe,EAAYyN,GAAKhb,EAAKgb,GACtBzN,EAAY0N,WAAajb,EAAKib,WAC9B1N,EAAY2N,GAAKlb,EAAKkb,GACtB3N,EAAY4N,GAAKnb,EAAKmb,GACtB5N,EAAY3iB,EAAIoV,EAAKpV,EACrB2iB,EAAYrH,GAAKlG,EAAKkG,GACtBqH,EAAYgN,GAAKva,EAAKua,GACtBhN,EAAY7kB,EAAIsX,EAAKtX,EACrB6kB,EAAY/gB,GAAKwT,EAAKxT,GACtB+gB,EAAY6N,cAAgBpb,EAAKob,eAAiB7N,EAAY6N,cAC9D7N,EAAY8N,gBAAkBrb,EAAKqb,iBAAmB9N,EAAY8N,gBAClE9N,EAAY+N,gBAAkBtb,EAAKsb,iBAAmB/N,EAAY+N,gBAClE/N,EAAYgO,QAAUvb,EAAKub,QAC3BhO,EAAY/K,YAAa,CACjC,EAEAiY,aAAariB,UAAUojB,eAAiB,WAEvC,OADA5yB,KAAK+gB,GAAK/gB,KAAKoX,KAAKrX,EAAEuG,EAAE5I,OAAS,EAC1BsC,KAAK+gB,EACb,EAEA8Q,aAAariB,UAAUvL,SAAW,WACjCjE,KAAKmgB,KAAM,EACX,IAAID,EAAUlgB,KAAKggB,KAAKC,WAAWC,QACnC,GAAIA,IAAYlgB,KAAK+wB,UAAa/wB,KAAK+gB,IAAQ/gB,KAAKW,WAApD,CAKG,IAFH,IAA8By1B,EAA1BC,EAAWr2B,KAAKoX,KAAKrX,EAAEuG,EACpBjJ,EAAI,EAAGI,EAAM44B,EAAS34B,OACpBL,GAAKI,EAAM,IACb24B,EAAmBC,EAASh5B,GAAG2E,IAC5B3E,IAAMI,EAAM,GAAK44B,EAASh5B,EAAE,GAAGyC,EAAIogB,KAGtC7iB,GAAK,EAEN2C,KAAK8xB,YAAcz0B,IACjB+4B,EAAiBxc,YACd5Z,KAAKs2B,iBAAiBF,GAE1Bp2B,KAAKm2B,eAAeC,GACpBp2B,KAAKmgB,KAAMngB,KAAKW,WAChBX,KAAK0gB,GAAK1gB,KAAKiC,EAAIjC,KAAK2kB,YAAY7kB,EACpCE,KAAK8xB,UAAYz0B,GAExB2C,KAAK+wB,SAAW7Q,CAnBhB,CAoBD,EAEA2R,aAAariB,UAAU8mB,iBAAmB,SAASrd,GAC/CA,EAAaW,YAAa,EAC1B,IAGIvc,EAAGI,EACH84B,EAAwB34B,EAKxByI,EAAG6Q,EAEHsf,EAXAxf,EAAchX,KAAKggB,KAAKC,WAAWjJ,YACnCI,EAAOpX,KAAKoX,KACZwc,EAAU,GAEGlH,EAAQ,EACrB+J,EAAiBrf,EAAK5Q,EAAErE,EACxBu0B,EAAc,EAAGC,EAAa,EAAGvB,EAAc,EAAG/C,EAAa,GAC/DuE,EAAY,EACZC,EAAe,EAEf3a,EAAWlF,EAAY2G,cAAc1E,EAAavY,GACxCsjB,EAAU,EACpB8S,EAAS5a,EAAS+V,OAAOrZ,MAAM,KAE/BsZ,EAAU,SAAUD,EAAS,SAGjC,IAFAx0B,EAAMq5B,EAAOp5B,OAETL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EAEb,OADYy5B,EAAOz5B,GAAG05B,eAElB,IAAK,SACL9E,EAAS,SACT,MACA,IAAK,OACLC,EAAU,MACV,MACA,IAAK,QACLA,EAAU,MACV,MACA,IAAK,SACLA,EAAU,MACV,MACA,IAAK,UACL,IAAK,SACLA,EAAU,MACV,IAAK,QACL,IAAK,OACLA,EAAU,MAIlBjZ,EAAaiZ,QAAUA,EACvBjZ,EAAagZ,OAASA,EACtBx0B,EAAMwb,EAAanZ,EAAEpC,OACrB,IAAIs5B,EAAiB/d,EAAarV,GAAG,IAAKqV,EAAajX,EACvD,GAAGiX,EAAajT,GAAG,CACf,IAAIgsB,EAAW/Y,EAAajT,GAAG,GAC3BixB,GAAkB,EACtB,IAAI55B,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACbk5B,GAAc,EACkB,MAA7Btd,EAAanZ,EAAEo3B,OAAO75B,GACrB45B,EAAiB55B,EACqB,KAAjC4b,EAAanZ,EAAEwM,WAAWjP,KAC/Bu5B,EAAY,EACZL,GAAc,GAEfvf,EAAYrV,OACX60B,EAAWxf,EAAYyG,YAAYxE,EAAanZ,EAAEo3B,OAAO75B,GAAI6e,EAAS+V,OAAQ/V,EAASG,SACvF2H,EAAUuS,EAAc,EAAIC,EAASzb,EAAE9B,EAAajX,EAAE,KAGtDgiB,EAAUhN,EAAY8G,YAAY7E,EAAanZ,EAAEo3B,OAAO75B,GAAI4b,EAAavY,EAAGuY,EAAajX,GAE1F40B,EAAY5S,EAAUgO,GAAyC,MAA7B/Y,EAAanZ,EAAEo3B,OAAO75B,KAChC,IAApB45B,EACCx5B,GAAO,EAEPJ,EAAI45B,EAERhe,EAAanZ,EAAImZ,EAAanZ,EAAEq3B,OAAO,EAAE95B,GAAK,KAAO4b,EAAanZ,EAAEq3B,OAAO95B,IAAM45B,EAAiB55B,EAAI,EAAIA,GAC1G45B,GAAkB,EAClBL,EAAY,IAEZA,GAAa5S,EACb4S,GAAaI,GAGrBv5B,EAAMwb,EAAanZ,EAAEpC,MACzB,CACAk5B,GAAcI,EACdhT,EAAU,EACV,IACIoT,EADAC,EAAoB,EAExB,IAAKh6B,EAAI,EAAEA,EAAII,EAAKJ,GAAK,EAiCrB,GAhCAk5B,GAAc,EAEK,OADnBa,EAAcne,EAAanZ,EAAEo3B,OAAO75B,IAEhCO,EAAM,IAC6B,KAA9Bw5B,EAAY9qB,WAAW,IAC5B+qB,EAAoB,EACpBhF,EAAWlxB,KAAKy1B,GAChBC,EAAeD,EAAYC,EAAeD,EAAYC,EACtDD,GAAc,EAAII,EAClBp5B,EAAM,GACN24B,GAAc,EACdnB,GAAe,GAEfx3B,EAAMqb,EAAanZ,EAAEo3B,OAAO75B,GAE7B2Z,EAAYrV,OACX60B,EAAWxf,EAAYyG,YAAY2Z,EAAalb,EAAS+V,OAAQjb,EAAY2G,cAAc1E,EAAavY,GAAG2b,SAC3G2H,EAAUuS,EAAc,EAAIC,EAASzb,EAAE9B,EAAajX,EAAE,KAItDgiB,EAAUhN,EAAY8G,YAAYlgB,EAAKqb,EAAavY,EAAGuY,EAAajX,GAIrD,MAAhBo1B,EACCC,GAAqBrT,EAAUgT,GAE/BJ,GAAa5S,EAAUgT,EAAiBK,EACxCA,EAAoB,GAExBzD,EAAQzyB,KAAK,CAACoF,EAAEyd,EAAQ0R,GAAG1R,EAAQ6R,IAAIa,EAAY92B,EAAE22B,EAAaX,UAAU,GAAIh4B,IAAKA,EAAK43B,KAAMJ,IAC3E,GAAlBqB,GAEC,GADAC,GAAe1S,EACL,IAAPpmB,GAAoB,KAAPA,GAAmBP,GAAKI,EAAM,EAAE,CAI5C,IAHU,IAAPG,GAAoB,KAAPA,IACZ84B,GAAe1S,GAEb2S,GAAYt5B,GACdu2B,EAAQ+C,GAAYjB,GAAKgB,EACzB9C,EAAQ+C,GAAY9X,IAAM6N,EAC1BkH,EAAQ+C,GAAYlB,MAAQzR,EAC5B2S,GAAc,EAElBjK,GAAS,EACTgK,EAAc,CAClB,OACE,GAAqB,GAAlBD,GAEL,GADAC,GAAe1S,EACL,IAAPpmB,GAAaP,GAAKI,EAAM,EAAE,CAIzB,IAHU,IAAPG,IACC84B,GAAe1S,GAEb2S,GAAYt5B,GACdu2B,EAAQ+C,GAAYjB,GAAKgB,EACzB9C,EAAQ+C,GAAY9X,IAAM6N,EAC1BkH,EAAQ+C,GAAYlB,MAAQzR,EAC5B2S,GAAc,EAElBD,EAAc,EACdhK,GAAS,CACb,OAEAkH,EAAQlH,GAAO7N,IAAM6N,EACrBkH,EAAQlH,GAAO+I,MAAQ,EACvB/I,GAAS,EAMjB,GAHAzT,EAAa1S,EAAIqtB,EACjBiD,EAAeD,EAAYC,EAAeD,EAAYC,EACtDxE,EAAWlxB,KAAKy1B,GACb3d,EAAajT,GACZiT,EAAa+Y,SAAW/Y,EAAajT,GAAG,GACxCiT,EAAakZ,cAAgB,OAG7B,OADAlZ,EAAa+Y,SAAW6E,EACjB5d,EAAa5S,GAChB,KAAK,EACD4S,EAAakZ,eAAkBlZ,EAAa+Y,SAC5C,MACJ,KAAK,EACD/Y,EAAakZ,eAAkBlZ,EAAa+Y,SAAS,EACrD,MACJ,QACI/Y,EAAakZ,cAAgB,EAGzClZ,EAAaoZ,WAAaA,EAE1B,IAAwBS,EAAcwE,EAAlC9D,EAAYpc,EAAKjR,EACrB+Q,EAAOsc,EAAU91B,OACjB,IAAI65B,EAAO1Y,EAAK2Y,EAAU,GAC1B,IAAInxB,EAAE,EAAEA,EAAE6Q,EAAK7Q,GAAG,EAAE,CAahB,KAZAysB,EAAeU,EAAUntB,IACTF,EAAEmX,KACdrE,EAAawZ,iBAAkB,GAEhCK,EAAa3sB,EAAEwrB,KACd1Y,EAAayZ,iBAAkB,IAEhCI,EAAa3sB,EAAEyrB,IAAMkB,EAAa3sB,EAAE6sB,IAAMF,EAAa3sB,EAAE8sB,IAAMH,EAAa3sB,EAAE+sB,MAC7Eja,EAAauZ,eAAgB,GAEjC3T,EAAM,EACN0Y,EAAQzE,EAAa9wB,EAAEI,EACnB/E,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,GACbi6B,EAAa1D,EAAQv2B,IACVu4B,UAAUvvB,GAAKwY,GACb,GAAT0Y,GAAgC,IAAlBD,EAAW15B,KAAwB,GAAT25B,GAAgC,IAAlBD,EAAW15B,KAA+B,KAAlB05B,EAAW15B,KAA8B,GAAT25B,IAAeD,EAAW13B,GAAuB,KAAlB03B,EAAW15B,KAAmBP,GAAKI,EAAM,IAAiB,GAAT85B,IAAeD,EAAW13B,GAAKvC,GAAKI,EAAM,MAC/M,IAAtBq1B,EAAa9wB,EAAEy1B,IACdD,EAAQr2B,KAAK0d,GAEjBA,GAAO,GAGfzH,EAAKjR,EAAEE,GAAGrE,EAAEyiB,WAAa5F,EACzB,IAAqB6Y,EAAjBC,GAAc,EAClB,GAAyB,IAAtB7E,EAAa9wB,EAAEy1B,GACd,IAAIp6B,EAAI,EAAGA,EAAII,EAAKJ,GAAK,EAElBs6B,IADHL,EAAa1D,EAAQv2B,IACOu4B,UAAUvvB,KAClCsxB,EAAaL,EAAW1B,UAAUvvB,GAClCqxB,EAASF,EAAQj2B,OAAOpF,KAAKU,MAAMV,KAAKwB,SAAS65B,EAAQ95B,QAAQ,GAAG,IAExE45B,EAAW1B,UAAUvvB,GAAKqxB,CAGtC,CACAze,EAAa0Z,QAAU1Z,EAAamZ,IAAqB,IAAfnZ,EAAajX,EACvDiX,EAAaqZ,GAAKrZ,EAAaqZ,IAAM,EACrCrZ,EAAa8Y,OAAS7V,EAAS6V,OAAO9Y,EAAajX,EAAE,GACzD,EAEA6vB,aAAariB,UAAUooB,mBAAqB,SAASC,EAASnL,GAC7DA,OAAkB9qB,IAAV8qB,EAAsB1sB,KAAK8xB,UAAYpF,EAC5C,IAAIoL,EAAQ93B,KAAKoX,KAAKrX,EAAEuG,EAAEomB,GAAO1qB,EACjC81B,EAAMle,YAAa,EACnBke,EAAMh4B,EAAI+3B,EAAQ/3B,EAClBE,KAAK8xB,WAAa,EAClB9xB,KAAKW,YAAa,EAClBX,KAAKiE,UACT,EAEA,IAAI8zB,QAMI,CACNpqB,OALD,SAAgBxD,GACf,OAAOA,EAAIyb,OAAO9nB,MAAMC,MAAM,KAAK,CAACL,OAAOyM,EAAIzM,SAChD,GAMG0M,WAAc,WACjB,IAAI4D,EAAK,CACR3D,SAQD,WAQC,OANGwK,EAEMlK,EADRkK,GAAW,GAGH,CAAC,GAAI,GAGf,EAhBCka,QAkBD,SAAiB9b,GACb4B,IAAY2Q,IACd7a,EAAOotB,QAAQpqB,OAAOhD,GACtB6a,GAAwB,GAEzB7a,EAAKkK,GAAW5B,EAChB4B,GAAW,CACZ,GAtBIA,EAAU,EACV2Q,EAAa,EACb7a,EAAO7M,MAAMC,MAAM,KAAK,CAACL,OAAO8nB,IAuBpC,OAAOxX,CACR,CAhCiB,GAiCbkZ,WAAc,WACjB,IAAIlZ,EAAK,CACR/E,MA+CD,SAAeohB,EAAOxjB,GACrB,IAAIxJ,EAKAuM,EALGnM,OAAwBmE,IAAlByoB,EAAMxV,QAAwBwV,EAAMpoB,EAAEvE,OAAS2sB,EAAMxV,QAC9DmjB,EAASxQ,IAMb,IALAwQ,EAAOtS,UAAUjoB,GACjBu6B,EAAOn4B,EAAIwqB,EAAMxqB,EAIbxC,EAAI,EAAGA,EAAII,EAAKJ,GAAK,EACrBwJ,GACF+C,EAAK/C,EAAUoD,kBAAkBogB,EAAMpoB,EAAE5E,GAAG,GAAGgtB,EAAMpoB,EAAE5E,GAAG,GAAG,EAAE,GAC/D26B,EAAOnS,QAAQjc,EAAG,GAAGA,EAAG,GAAG,IAAIvM,GAC/B+M,WAAW2kB,QAAQnlB,GACnBA,EAAK/C,EAAUoD,kBAAkBogB,EAAMxmB,EAAExG,GAAG,GAAGgtB,EAAMxmB,EAAExG,GAAG,GAAG,EAAE,GAC/D26B,EAAOnS,QAAQjc,EAAG,GAAGA,EAAG,GAAG,IAAIvM,GAC/B+M,WAAW2kB,QAAQnlB,GACnBA,EAAK/C,EAAUoD,kBAAkBogB,EAAMhtB,EAAEA,GAAG,GAAGgtB,EAAMhtB,EAAEA,GAAG,GAAG,EAAE,GAC/D26B,EAAOnS,QAAQjc,EAAG,GAAGA,EAAG,GAAG,IAAIvM,GAC/B+M,WAAW2kB,QAAQnlB,IAEnBouB,EAAOjS,YAAYsE,EAAMpoB,EAAE5E,GAAG,GAAGgtB,EAAMpoB,EAAE5E,GAAG,GAAGgtB,EAAMxmB,EAAExG,GAAG,GAAGgtB,EAAMxmB,EAAExG,GAAG,GAAGgtB,EAAMhtB,EAAEA,GAAG,GAAGgtB,EAAMhtB,EAAEA,GAAG,GAAIA,GAG1G,OAAO26B,CACR,EAtECxQ,SAAUA,EACVuH,QAASA,EACTkJ,aAsCD,SAAsBC,EAAsBx6B,GAC3C,KAAMA,KACLqxB,EAAQmJ,EAAqBx6B,GAE/B,GAvCImX,EAAU,EACV2Q,EAAa,EACb7a,EAAO7M,MAAMC,MAAM,KAAK,CAACL,OAAO8nB,IAEpC,SAASgC,IAQR,OANG3S,EAEUlK,EADZkK,GAAW,GAGC,IAAI0Q,SAGlB,CAEA,SAASwJ,EAAQnD,GACb/W,IAAY2Q,IACd7a,EAAOotB,QAAQpqB,OAAOhD,GACtB6a,GAAwB,GAEzB,IAA6BnoB,EAAzBI,EAAMmuB,EAAU/W,QACpB,IAAIxX,EAAI,EAAGA,EAAII,EAAKJ,GAAK,EACxB+M,WAAW2kB,QAAQnD,EAAU3pB,EAAE5E,IAC/B+M,WAAW2kB,QAAQnD,EAAUvuB,EAAEA,IAC/B+M,WAAW2kB,QAAQnD,EAAU/nB,EAAExG,IAC/BuuB,EAAU3pB,EAAE5E,GAAK,KACjBuuB,EAAUvuB,EAAEA,GAAK,KACjBuuB,EAAU/nB,EAAExG,GAAK,KAElBuuB,EAAU/W,QAAU,EACpB+W,EAAU/rB,GAAI,EACd8K,EAAKkK,GAAW+W,EAChB/W,GAAW,CACZ,CAmCA,OAAO7G,CACR,CA7EiB,GA8EbmZ,qBAAwB,WAC3B,IAAInZ,EAAK,CACRoZ,mBAWD,WAQC,OANGvS,EAEgBlK,EADlBkK,GAAW,GAGO,IAAIqV,eAGxB,EAnBC6E,QAASA,EACT9lB,MAmCD,SAAekvB,EAAiBC,GAC/BrJ,EAAQoJ,GACLtjB,IAAY2Q,IACd7a,EAAOotB,QAAQpqB,OAAOhD,GACtB6a,GAAwB,GAEzB7a,EAAKkK,GAAWsjB,EAChBtjB,GAAW,CACZ,GAxCIA,EAAU,EACV2Q,EAAa,EACb7a,EAAO7M,MAAMC,MAAM,KAAK,CAACL,OAAO8nB,IAepC,SAASuJ,EAAQoJ,GAChB,IAAI96B,EAAGI,EAAM06B,EAAgBtjB,QAC7B,IAAIxX,EAAI,EAAGA,EAAII,EAAKJ,GAAK,EACxB6pB,WAAW6H,QAAQoJ,EAAgBpgB,OAAO1a,IAE3C86B,EAAgBtjB,QAAU,EAEvBA,IAAY2Q,IACd7a,EAAOotB,QAAQpqB,OAAOhD,GACtB6a,GAAwB,GAEzB7a,EAAKkK,GAAWsjB,EAChBtjB,GAAW,CACZ,CAaA,OAAO7G,CACR,CAnD2B,GAoD3B,SAASqqB,eAAe,CAuGxB,SAASC,YAAYC,EAAeC,GAChCx4B,KAAKu4B,cAAgBA,EACrBv4B,KAAK8W,OAAS,KACd9W,KAAKqgB,eAAiB,EACtBrgB,KAAKigB,WAAa,CACd7B,UAAW,GAEfpe,KAAKy4B,aAAe,CAChBC,oBAAsBF,GAAUA,EAAOE,qBAAwB,gBAC/DC,gBAAkBH,GAAUA,EAAOG,kBAAoB,EACvDC,mBAAoBJ,IAAuC,IAA7BA,EAAOI,kBACrCC,YAAcL,GAAUA,EAAOK,cAAgB,EAC/Crc,UAAYgc,GAAUA,EAAOhc,WAAc,IAE/Cxc,KAAKigB,WAAWwY,aAAez4B,KAAKy4B,aACpCz4B,KAAK0tB,SAAW,GAChB1tB,KAAK84B,gBAAkB,GACvB94B,KAAK+4B,WAAY,CAErB,CA0NA,SAASC,YAAY5hB,EAAK3Y,EAAQwhB,GAC9BjgB,KAAKgE,kBAAoB,GACzBhE,KAAKoX,KAAOA,EACZpX,KAAKvB,QAAUA,EACfuB,KAAKigB,WAAaA,EAClBjgB,KAAK0T,WAAa,GAClB1T,KAAK0X,gBAAkB1X,KAAKoX,KAAKM,gBACjC1X,KAAKi5B,SAAWn7B,MAAMC,MAAM,KAAK,CAACL,OAAOsC,KAAK0X,gBAAgBha,SAC9DsC,KAAKk5B,YAAc,KACnBl5B,KAAKW,YAAa,EAClB,IACItD,EAGAkb,EAGAlS,EAAG6Q,EAEHiiB,EAAMC,EAAUC,EAAQhwB,EATxB2T,EAAOhd,KAAKigB,WAAWjD,KACpBvf,EAAMuC,KAAK0X,gBAAgBha,OAGxB47B,EAAat5B,KAAK0X,gBACxBhM,EAAQ,EACR6tB,EAAe,GAEfC,EAAU93B,aAAa,IAEvB2uB,EAAW,WAAYoJ,EAAU,YACrC,IAAKp8B,EAAI,EAAGA,EAAII,EAAKJ,IAkBjB,IAhB2B,MAAvBi8B,EAAWj8B,GAAGq8B,MAAuC,MAAvBJ,EAAWj8B,GAAGq8B,MAAgBJ,EAAWj8B,GAAG4vB,KAA6B,MAAtBqM,EAAWj8B,GAAGwG,EAAEyC,KACjG+pB,EAAW,OACXoJ,EAAU,QAGY,KAAtBH,EAAWj8B,GAAGq8B,MAAqC,KAAtBJ,EAAWj8B,GAAGq8B,MAAyB,GAAThuB,EAO3DytB,EAAO,OANPA,EAAOhf,SAASiC,gBAAgB3gB,MAAO,SAClC8hB,aAAa,OAAQ,WAC1B4b,EAAK5b,aAAa,QAASvd,KAAKvB,QAAQ2hB,KAAKhJ,KAAK2D,GAClDoe,EAAK5b,aAAa,SAAUvd,KAAKvB,QAAQ2hB,KAAKhJ,KAAKrV,GACnDw3B,EAAap4B,KAAKg4B,IAKtB5gB,EAAO4B,SAASiC,gBAAgB3gB,MAAO,QACd,KAAtB69B,EAAWj8B,GAAGq8B,KAAjB,CAkBA,GATAhuB,GAAS,EAEgB,KAAtB4tB,EAAWj8B,GAAGq8B,KACbnhB,EAAKgF,aAAa,OAAQ,WAE1BhF,EAAKgF,aAAa,OAAQ,WAE9BhF,EAAKgF,aAAa,YAAY,WAEL,IAAtB+b,EAAWj8B,GAAGgM,EAAE/C,EAAQ,CACvB+pB,EAAW,OACXoJ,EAAU,OACVpwB,EAAI4U,gBAAgBwF,QAAQzjB,KAAKvB,QAAQ66B,EAAWj8B,GAAGgM,EAAE,EAAE,KAAKrJ,KAAKgE,mBACrE,IAAI21B,EAAW,MAAMj4B,aAAa,KAClC03B,EAAWjf,SAASiC,gBAAgB3gB,MAAM,WACjC8hB,aAAa,KAAKoc,IAC3BN,EAAUlf,SAASiC,gBAAgB3gB,MAAM,iBACjC8hB,aAAa,WAAW,UAChC8b,EAAQ9b,aAAa,KAAK,iBAC1B8b,EAAQ9b,aAAa,SAAS,KAC9B6b,EAASxe,YAAYye,GACrBrc,EAAKpC,YAAYwe,GACQ,KAAtBE,EAAWj8B,GAAGq8B,KACbnhB,EAAKgF,aAAa,SAAU,WAE5BhF,EAAKgF,aAAa,SAAU,UAEpC,MACI8b,EAAU,KACVhwB,EAAI,KAaR,GATArJ,KAAK0T,WAAWrW,GAAK,CAChB2iB,KAAMzH,EACNlP,EAAGA,EACHuwB,MAAOP,EACRQ,SAAU,GACVC,aAAa,GACbC,SAASJ,EACTK,WAAW,GAEU,KAAtBV,EAAWj8B,GAAGq8B,KAAY,CACzBxiB,EAAOqiB,EAAa77B,OACpB,IAAIyE,EAAIgY,SAASiC,gBAAgB3gB,MAAM,KACvC,IAAI4K,EAAE,EAAEA,EAAE6Q,EAAK7Q,GAAG,EACdlE,EAAEyY,YAAY2e,EAAalzB,IAE/B,IAAI+E,EAAO+O,SAASiC,gBAAgB3gB,MAAM,QAC1C2P,EAAKmS,aAAa,YAAY,SAC9BnS,EAAKmS,aAAa,KAAKic,EAAQ,IAAI9tB,GACnCN,EAAKwP,YAAYrC,GACjByE,EAAKpC,YAAYxP,GACjBjJ,EAAEob,aAAa,OAAO,OAAS7hB,aAAe,IAAI89B,EAAQ,IAAI9tB,EAAM,KAEpE6tB,EAAa77B,OAAS,EACtB67B,EAAap4B,KAAKgB,EACtB,MACIo3B,EAAap4B,KAAKoX,GAEnB+gB,EAAWj8B,GAAG4vB,MAAQjtB,KAAKi6B,YAC1Bj6B,KAAKi6B,UAAYj6B,KAAKk6B,wBAE1Bl6B,KAAKi5B,SAAS57B,GAAK,CACf2iB,KAAMzH,EACNshB,SAAU,GACVM,GAAIlc,gBAAgBwF,QAAQzjB,KAAKvB,QAAQ66B,EAAWj8B,GAAGwG,EAAE,EAAE,IAAK7D,KAAKgE,mBACrEgI,KAAKsa,qBAAqB8T,aAAap6B,KAAKvB,QAAQ66B,EAAWj8B,GAAG,EAAE2C,KAAKgE,kBAAkB,OAE5Fm1B,IACCn5B,KAAKi5B,SAAS57B,GAAGg9B,QAAUlB,GAE3Bn5B,KAAKi5B,SAAS57B,GAAG2O,KAAK1F,GACtBtG,KAAKs6B,SAAShB,EAAWj8B,GAAG2C,KAAKi5B,SAAS57B,GAAG2O,KAAK/J,EAAEjC,KAAKi5B,SAAS57B,GA1EtE,MAPI2C,KAAKi5B,SAAS57B,GAAK,CACf88B,GAAIlc,gBAAgBwF,QAAQzjB,KAAKvB,QAAQ66B,EAAWj8B,GAAGwG,EAAE,EAAE,IAAK7D,KAAKgE,mBACrEgI,KAAMsa,qBAAqB8T,aAAap6B,KAAKvB,QAAQ66B,EAAWj8B,GAAG,EAAE2C,KAAKgE,kBAAkB,MAC5Fgc,KAAMzH,GAEVyE,EAAKpC,YAAYrC,GAmFzB,IAHAvY,KAAKk5B,YAAc/e,SAASiC,gBAAgB3gB,MAAO40B,GAEnD5yB,EAAM87B,EAAa77B,OACfL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb2C,KAAKk5B,YAAYte,YAAY2e,EAAal8B,IAG9C2C,KAAKk5B,YAAY3b,aAAa,KAAMic,GACjC9tB,EAAQ,GACP1L,KAAKvB,QAAQ87B,cAAchd,aAAakc,EAAS,OAAS/9B,aAAe,IAAM89B,EAAU,KAG7Fxc,EAAKpC,YAAY5a,KAAKk5B,YAC1B,CAmGA,SAASsB,cACT,CA4PA,SAASC,eAAerjB,EAAKsjB,EAAgBza,EAAWG,EAAMua,GAC1D36B,KAAKigB,WAAaA,EAClBjgB,KAAKogB,KAAOA,EACZpgB,KAAKoX,KAAOA,EACZpX,KAAK46B,aAAe,KACpB56B,KAAK66B,mBAAqB,KAC1B76B,KAAK86B,eAAgB,EACrB96B,KAAK06B,gBAAkBA,EACvB16B,KAAKw5B,QAAUmB,EAAcA,EAAYnB,QAAU,MAAM93B,aAAa,IACtE1B,KAAK26B,YAAcA,EACnB36B,KAAK+6B,cAAe,EACpB/6B,KAAKwE,MACT,CA+SA,SAASw2B,cAAc5jB,EAAKsjB,EAAgBza,EAAWG,EAAMua,GACzD36B,KAAK+X,OAAS,GACd/X,KAAKi7B,WAAa7jB,EAAKW,OACvB/X,KAAKk7B,WAAa,GAClBl7B,KAAKm7B,UAAY,GACjBn7B,KAAKo7B,aAAe,GACpBp7B,KAAKq7B,eAAiB,GACtBr7B,KAAKs7B,kBAAoB,GACzBt7B,KAAKuR,QAAQD,YAAYD,KAAKrR,KAAKoX,EAAKsjB,EAAgBza,EAAWG,EAAMua,EAC7E,CAjoCAtC,aAAa7oB,UAAU+rB,YAAc,SAASx3B,GAC1C,IAAI1G,EAA6B+Z,EAA1B3Z,EAAMuC,KAAK8W,OAAOpZ,OAEzB,IADAsC,KAAK6W,gBAAiB,EACjBxZ,EAAII,EAAM,EAAGJ,GAAK,EAAGA,IACjB2C,KAAK0tB,SAASrwB,KACf+Z,EAAOpX,KAAK8W,OAAOzZ,IACXm+B,GAAKpkB,EAAKiK,IAAOtd,EAAM/D,KAAK8W,OAAOzZ,GAAGgkB,IAAOjK,EAAK+iB,GAAK/iB,EAAKiK,GAAMtd,EAAM/D,KAAK8W,OAAOzZ,GAAGgkB,IAE3FrhB,KAAKy7B,UAAUp+B,GAGvB2C,KAAK6W,iBAAiB7W,KAAK0tB,SAASrwB,IAAK2C,KAAK6W,eAElD7W,KAAK07B,sBACT,EAEArD,aAAa7oB,UAAUmsB,WAAa,SAASC,GACzC,OAAOA,EAAMj1B,IACT,KAAK,EACD,OAAO3G,KAAK67B,YAAYD,GAC5B,KAAK,EACD,OAAO57B,KAAK87B,WAAWF,GAC3B,KAAK,EACD,OAAO57B,KAAK+7B,YAAYH,GAC5B,KAAK,EACD,OAAO57B,KAAKg8B,YAAYJ,GAC5B,KAAK,EACD,OAAO57B,KAAKi8B,WAAWL,GAC3B,KAAK,GACD,OAAO57B,KAAKk8B,aAAaN,GAC7B,KAAK,GACD,OAAO,KAEf,OAAO57B,KAAKm8B,WAAWP,EAC3B,EAEAvD,aAAa7oB,UAAU0sB,aAAe,WAClC,MAAM,IAAIE,MAAM,mDACpB,EAEA/D,aAAa7oB,UAAU6sB,cAAgB,WACnC,IAAIh/B,EAAGI,EAAMuC,KAAK8W,OAAOpZ,OACzB,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb2C,KAAKy7B,UAAUp+B,GAEnB2C,KAAK07B,sBACT,EAEArD,aAAa7oB,UAAU8sB,cAAgB,SAASC,GAC5Cv8B,KAAK6W,gBAAiB,EACtB,IAAIxZ,EACAgJ,EADG5I,EAAM8+B,EAAU7+B,OAChBwZ,EAAOlX,KAAK8W,OAAOpZ,OAC1B,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EAEb,IADAgJ,EAAI,EACEA,EAAE6Q,GAAK,CACT,GAAGlX,KAAK8W,OAAOzQ,GAAGmQ,IAAM+lB,EAAUl/B,GAAGmZ,GAAG,CACpCxW,KAAK8W,OAAOzQ,GAAKk2B,EAAUl/B,GAC3B,KACJ,CACAgJ,GAAK,CACT,CAER,EAEAgyB,aAAa7oB,UAAUgtB,oBAAsB,SAASC,GAClDz8B,KAAKigB,WAAWyc,iBAAmBD,CACvC,EAEApE,aAAa7oB,UAAUmtB,UAAY,WAC3B38B,KAAKigB,WAAW0Y,iBAChB34B,KAAKq8B,eAEb,EACAhE,aAAa7oB,UAAUotB,sBAAwB,SAASn+B,EAASo+B,EAAYC,GACzEA,EAAYA,GAAa,GAIzB,IAHA,IAAIpP,EAAW1tB,KAAK0tB,SAChB5W,EAAS9W,KAAK8W,OACdzZ,EAAE,EAAGI,EAAMqZ,EAAOpZ,OAChBL,EAAEI,GACDqZ,EAAOzZ,GAAGwhB,KAAOge,IACZnP,EAASrwB,KAAsB,IAAhBqwB,EAASrwB,QAGGuE,IAArBkV,EAAOzZ,GAAG2T,QAChB8rB,EAAU37B,KAAKusB,EAASrwB,IACxBqwB,EAASrwB,GAAG0/B,WAAY,EACxB/8B,KAAK48B,sBAAsBn+B,EAAQqY,EAAOzZ,GAAG2T,OAAQ8rB,KAErDA,EAAU37B,KAAKusB,EAASrwB,IACxBqwB,EAASrwB,GAAG0/B,WAAY,EACxBt+B,EAAQu+B,aAAaF,KATrB98B,KAAKy7B,UAAUp+B,GACf2C,KAAKi9B,kBAAkBx+B,KAa/BpB,GAAK,CAEb,EAEAg7B,aAAa7oB,UAAUytB,kBAAoB,SAASx+B,GAChDuB,KAAK84B,gBAAgB33B,KAAK1C,EAC9B,EAsBA+S,gBAAgB6mB,aAAaC,aAE7BA,YAAY9oB,UAAU2sB,WAAa,SAAU/kB,GACzC,OAAO,IAAIqjB,eAAerjB,EAAMpX,KAAKk9B,aAAal9B,KAAKigB,WAAWjgB,KACtE,EAEAs4B,YAAY9oB,UAAUwsB,YAAc,SAAU5kB,GAC1C,OAAO,IAAI4jB,cAAc5jB,EAAMpX,KAAKk9B,aAAal9B,KAAKigB,WAAWjgB,KACrE,EAEAs4B,YAAY9oB,UAAUysB,WAAa,SAAU7kB,GACzC,OAAO,IAAI+lB,eAAe/lB,EAAMpX,KAAKk9B,aAAal9B,KAAKigB,WAAWjgB,KAEtE,EAEAs4B,YAAY9oB,UAAUqsB,YAAc,SAAUzkB,GAC1C,OAAO,IAAIgmB,cAAchmB,EAAMpX,KAAKk9B,aAAal9B,KAAKigB,WAAWjgB,KACrE,EAEAs4B,YAAY9oB,UAAUssB,WAAa,SAAU1kB,GACzC,OAAO,IAAIimB,aAAajmB,EAAMpX,KAAKk9B,aAAal9B,KAAKigB,WAAWjgB,KAEpE,EAEAs4B,YAAY9oB,UAAUusB,YAAc,SAAU3kB,GAC1C,OAAO,IAAIkmB,cAAclmB,EAAMpX,KAAKk9B,aAAal9B,KAAKigB,WAAWjgB,KACrE,EAEAs4B,YAAY9oB,UAAU+tB,gBAAkB,SAASC,GAC7Cx9B,KAAKk9B,aAAe/iB,SAASiC,gBAAgB3gB,MAAM,OACnDuE,KAAKk9B,aAAa3f,aAAa,QAAQ,8BACvCvd,KAAKk9B,aAAa3f,aAAa,UAAU,OAAOigB,EAASziB,EAAE,IAAIyiB,EAASz7B,GACpE/B,KAAKy4B,aAAaI,cAClB74B,KAAKk9B,aAAa3f,aAAa,QAAQigB,EAASziB,GAChD/a,KAAKk9B,aAAa3f,aAAa,SAASigB,EAASz7B,GACjD/B,KAAKk9B,aAAax+B,MAAMqM,MAAQ,OAChC/K,KAAKk9B,aAAax+B,MAAM++B,OAAS,QAElCz9B,KAAKy4B,aAAajc,WACjBxc,KAAKk9B,aAAa3f,aAAa,QAASvd,KAAKy4B,aAAajc,WAE9Dxc,KAAKk9B,aAAa3f,aAAa,sBAAsBvd,KAAKy4B,aAAaC,qBAGvE14B,KAAKu4B,cAAcmF,QAAQ9iB,YAAY5a,KAAKk9B,cAE5C,IAAIlgB,EAAO7C,SAASiC,gBAAgB3gB,MAAO,QAC3CuE,KAAKigB,WAAWjD,KAAOA,EACvBhd,KAAKk9B,aAAatiB,YAAYoC,GAC9Bhd,KAAKigB,WAAW0d,aAAe39B,KAAKu4B,cAAcoF,aAAat8B,KAAKrB,KAAKu4B,eACzEv4B,KAAKigB,WAAWoP,cAAgBrvB,KAAKu4B,cAAclJ,cAAchuB,KAAKrB,KAAKu4B,eAC3Ev4B,KAAKigB,WAAW0Y,gBAAkB34B,KAAKy4B,aAAaE,gBACpD34B,KAAKigB,WAAWC,QAAU,EAC1BlgB,KAAKigB,WAAWhS,GAAKuvB,EAASvvB,GAC9BjO,KAAKigB,WAAW2d,SAAW,CACvB7iB,EAAGyiB,EAASziB,EACZhZ,EAAGy7B,EAASz7B,GAEhB/B,KAAKoX,KAAOomB,EACZx9B,KAAKigB,WAAWkD,UAAYqa,EAASK,GACrC,IAAI3E,EAAc/e,SAASiC,gBAAgB3gB,MAAO,YAC9C09B,EAAOhf,SAASiC,gBAAgB3gB,MAAM,QAC1C09B,EAAK5b,aAAa,QAAQigB,EAASziB,GACnCoe,EAAK5b,aAAa,SAASigB,EAASz7B,GACpCo3B,EAAK5b,aAAa,IAAI,GACtB4b,EAAK5b,aAAa,IAAI,GACtB,IAAIugB,EAAS,iBAAiBp8B,aAAa,IAC3Cw3B,EAAY3b,aAAa,KAAMugB,GAC/B5E,EAAYte,YAAYue,GACxB,IAAIoB,EAAgBpgB,SAASiC,gBAAgB3gB,MAAM,KACnD8+B,EAAchd,aAAa,YAAa,OAAS7hB,aAAe,IAAIoiC,EAAO,KAC3E99B,KAAKk9B,aAAatiB,YAAY2f,GAC9Bvd,EAAKpC,YAAYse,GACjBl5B,KAAKk9B,aAAe3C,EACpBv6B,KAAK8W,OAAS0mB,EAAS1mB,OACvB9W,KAAKigB,WAAWjJ,YAAc,IAAI8C,YAClC9Z,KAAKigB,WAAWjJ,YAAY4F,SAAS4gB,EAAS77B,OAC9C3B,KAAKigB,WAAWjJ,YAAY+F,SAASygB,EAASviB,MAAM+B,GACpDhd,KAAK0tB,SAAW5vB,MAAMC,MAAM,KAAK,CAACL,OAAO8/B,EAAS1mB,OAAOpZ,QAC7D,EAGA46B,YAAY9oB,UAAUuuB,QAAU,WAC5B/9B,KAAKu4B,cAAcmF,QAAQpjB,UAAY,GACvCta,KAAKk9B,aAAe,KACpBl9B,KAAKigB,WAAWjD,KAAO,KACvB,IAAI3f,EAAGI,EAAMuC,KAAK8W,OAAS9W,KAAK8W,OAAOpZ,OAAS,EAChD,IAAKL,EAAI,EAAGA,EAAII,EAAKJ,IACd2C,KAAK0tB,SAASrwB,IACb2C,KAAK0tB,SAASrwB,GAAG0gC,UAGzB/9B,KAAK0tB,SAAShwB,OAAS,EACvBsC,KAAK+4B,WAAY,EACjB/4B,KAAKu4B,cAAgB,IACzB,EAEAD,YAAY9oB,UAAUwuB,oBAAsB,WAC5C,EAEA1F,YAAY9oB,UAAUisB,UAAa,SAAS3V,GACxC,IAAI4H,EAAW1tB,KAAK0tB,SACpB,IAAGA,EAAS5H,IAA+B,IAAvB9lB,KAAK8W,OAAOgP,GAAKnf,GAArC,CAGA+mB,EAAS5H,IAAO,EAChB,IAAIrnB,EAAUuB,KAAK27B,WAAW37B,KAAK8W,OAAOgP,IAE1C4H,EAAS5H,GAAOrnB,EACb7C,oBAC4B,IAAxBoE,KAAK8W,OAAOgP,GAAKnf,IAChB3G,KAAKigB,WAAWyc,iBAAiBuB,oBAAoBx/B,GAEzDA,EAAQy/B,mBAEZl+B,KAAKm+B,mBAAmB1/B,EAAQqnB,GAC7B9lB,KAAK8W,OAAOgP,GAAKxO,KACZtX,KAAK0tB,SAAS5H,EAAM,KAAiC,IAA3B9lB,KAAK0tB,SAAS5H,EAAM,GAI9CrnB,EAAQ2/B,SAAS1Q,EAAS5H,EAAM,GAAG0T,UAHnCx5B,KAAKy7B,UAAU3V,EAAM,GACrB9lB,KAAKi9B,kBAAkBx+B,IAf/B,CAoBJ,EAEA65B,YAAY9oB,UAAUksB,qBAAwB,WAC1C,KAAM17B,KAAK84B,gBAAgBp7B,QAAO,CAC9B,IAAIe,EAAUuB,KAAK84B,gBAAgBrN,MAEnC,GADAhtB,EAAQ4/B,iBACL5/B,EAAQ2Y,KAAKE,GAEZ,IADA,IAAIja,EAAI,EAAGI,EAAMuC,KAAK0tB,SAAShwB,OACzBL,EAAEI,GAAI,CACR,GAAGuC,KAAK0tB,SAASrwB,KAAOoB,EAAQ,CAC5BA,EAAQ2/B,SAASp+B,KAAK0tB,SAASrwB,EAAI,GAAGm8B,SACtC,KACJ,CACAn8B,GAAK,CACT,CAER,CACJ,EAEAi7B,YAAY9oB,UAAU8uB,YAAc,SAASv6B,GACzC,GAAG/D,KAAKqgB,eAAiBtc,IAAO/D,KAAK+4B,UAArC,CAGW,OAARh1B,EACCA,EAAM/D,KAAKqgB,cAEXrgB,KAAKqgB,cAAgBtc,EAKzB/D,KAAKigB,WAAW7B,SAAWra,EAC3B/D,KAAKigB,WAAWC,SAAW,EAC3BlgB,KAAKigB,WAAWyc,iBAAiB6B,aAAex6B,EAChD,IAAI1G,EAAGI,EAAMuC,KAAK8W,OAAOpZ,OAIzB,IAHIsC,KAAK6W,gBACL7W,KAAKu7B,YAAYx3B,GAEhB1G,EAAII,EAAM,EAAGJ,GAAK,EAAGA,KACnB2C,KAAK6W,gBAAkB7W,KAAK0tB,SAASrwB,KACpC2C,KAAK0tB,SAASrwB,GAAGmhC,aAAaz6B,EAAM/D,KAAK8W,OAAOzZ,GAAGgkB,IAG3D,IAAKhkB,EAAII,EAAM,EAAGJ,GAAK,EAAGA,KACnB2C,KAAK6W,gBAAkB7W,KAAK0tB,SAASrwB,KACpC2C,KAAK0tB,SAASrwB,GAAGihC,aAvBzB,CA0BJ,EAEAhG,YAAY9oB,UAAU2uB,mBAAqB,SAAS1/B,EAASqnB,GACzD,IAAI2Y,EAAahgC,EAAQigC,iBACzB,GAAID,EAAJ,CAKA,IAFA,IACIE,EADAthC,EAAI,EAEFA,EAAEyoB,GACD9lB,KAAK0tB,SAASrwB,KAA0B,IAApB2C,KAAK0tB,SAASrwB,IAAc2C,KAAK0tB,SAASrwB,GAAGqhC,mBAChEC,EAAc3+B,KAAK0tB,SAASrwB,GAAGqhC,kBAEnCrhC,GAAK,EAENshC,EACC3+B,KAAKk9B,aAAa0B,aAAaH,EAAYE,GAE3C3+B,KAAKk9B,aAAatiB,YAAY6jB,EAZlC,CAcJ,EAEAnG,YAAY9oB,UAAUqvB,KAAO,WACzB7+B,KAAKk9B,aAAax+B,MAAMI,QAAU,MACtC,EAEAw5B,YAAY9oB,UAAUsvB,KAAO,WACzB9+B,KAAKk9B,aAAax+B,MAAMI,QAAU,OACtC,EAEAw5B,YAAY9oB,UAAUuvB,wBAA0B,SAAS5lB,GACrD,IAAI9b,EAAGI,EAAM0b,EAAOzb,OAChBshC,EAAoB7kB,SAASiC,gBAAgB3gB,MAAM,KACvD,IAAI4B,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb,GAAG8b,EAAO9b,GAAG4hC,GAAG,CACZ,IAAI7e,EAAOpgB,KAAK87B,WAAW3iB,EAAO9b,GAAG2hC,EAAkBh/B,KAAKigB,WAAWG,KAAK,MAC5EA,EAAK8d,kBAGLl+B,KAAKigB,WAAWyc,iBAAiBuB,oBAAoB7d,EACzD,CAER,EA8IA4Y,YAAYxpB,UAAU4jB,gBAAkB,SAAStN,GAC7C,OAAO9lB,KAAKi5B,SAASnT,GAAK9Z,IAC9B,EAEAgtB,YAAYxpB,UAAUgvB,aAAe,WACjC,IAAInhC,EAAGI,EAAMuC,KAAKgE,kBAAkBtG,OACpC,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb2C,KAAKgE,kBAAkB3G,GAAG4G,UAGlC,EAEA+0B,YAAYxpB,UAAU8uB,YAAc,SAAUY,GAC1C,IAAI7hC,EAAGI,EAAMuC,KAAK0X,gBAAgBha,OAClC,IAAKL,EAAI,EAAGA,EAAII,EAAKJ,IAOjB,IANG2C,KAAKi5B,SAAS57B,GAAG2O,KAAKmU,KAAOngB,KAAKW,aACjCX,KAAKs6B,SAASt6B,KAAK0X,gBAAgBra,GAAG2C,KAAKi5B,SAAS57B,GAAG2O,KAAK/J,EAAEjC,KAAKi5B,SAAS57B,KAE7E2C,KAAKi5B,SAAS57B,GAAG88B,GAAGha,KAAOngB,KAAKW,aAC/BX,KAAKi5B,SAAS57B,GAAG2iB,KAAKzC,aAAa,eAAevd,KAAKi5B,SAAS57B,GAAG88B,GAAGl4B,GAEtC,MAAjCjC,KAAK0X,gBAAgBra,GAAGq8B,OACpB15B,KAAKi5B,SAAS57B,GAAGg9B,UAAYr6B,KAAKvB,QAAQ0gC,eAAeC,MAAMjf,KAAOngB,KAAKW,cAC1EX,KAAKi5B,SAAS57B,GAAGg9B,QAAQ9c,aAAa,KAAM2hB,EAASt6B,MAAM,KAC3D5E,KAAKi5B,SAAS57B,GAAGg9B,QAAQ9c,aAAa,KAAM2hB,EAASt6B,MAAM,MAE5D5E,KAAK0T,WAAWrW,GAAGgM,IAAMrJ,KAAK0T,WAAWrW,GAAGgM,EAAE8W,KAAOngB,KAAKW,aAAY,CACrE,IAAI04B,EAAUr5B,KAAK0T,WAAWrW,GAAGu8B,MAC9B55B,KAAK0T,WAAWrW,GAAGgM,EAAEpH,EAAI,GACe,UAApCjC,KAAK0T,WAAWrW,GAAGy8B,eAClB95B,KAAK0T,WAAWrW,GAAGy8B,aAAe,QAClC95B,KAAK0T,WAAWrW,GAAG2iB,KAAKzC,aAAa,SAAS,OAAS7hB,aAAe,IAAIsE,KAAK0T,WAAWrW,GAAG08B,SAAS,MAE1GV,EAAQ9b,aAAa,UAAUvd,KAAK0T,WAAWrW,GAAGgM,EAAEpH,KAEb,WAApCjC,KAAK0T,WAAWrW,GAAGy8B,eAClB95B,KAAK0T,WAAWrW,GAAGy8B,aAAe,SAClC95B,KAAK0T,WAAWrW,GAAG2iB,KAAKzC,aAAa,SAAS,OAElDvd,KAAK0T,WAAWrW,GAAG2iB,KAAKzC,aAAa,eAAuC,EAAvBvd,KAAK0T,WAAWrW,GAAGgM,EAAEpH,GAGlF,CAGRjC,KAAKW,YAAa,CACtB,EAEAq4B,YAAYxpB,UAAU6vB,eAAiB,WACnC,OAAOr/B,KAAKk5B,WAChB,EAEAF,YAAYxpB,UAAU0qB,qBAAuB,WACzC,IAAI3hB,EAAO,QAKX,OAJAA,GAAQ,KAAOvY,KAAKigB,WAAW2d,SAAS7iB,EACxCxC,GAAQ,KAAOvY,KAAKigB,WAAW2d,SAAS77B,GACxCwW,GAAQ,MAAQvY,KAAKigB,WAAW2d,SAAS7iB,GACjC,MAAQ/a,KAAKigB,WAAW2d,SAAS77B,EAAI,GAEjD,EAEAi3B,YAAYxpB,UAAU8qB,SAAW,SAASjhB,EAASimB,EAAUrG,GACzD,IACI57B,EAAGI,EADH8hC,EAAa,KAAKD,EAAUr9B,EAAE,GAAG,GAAG,IAAIq9B,EAAUr9B,EAAE,GAAG,GAG3D,IADAxE,EAAM6hC,EAAUzqB,QACZxX,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EAEbkiC,GAAc,KAAKljC,OAAOijC,EAAUz7B,EAAExG,EAAE,GAAG,IAAI,IAAIhB,OAAOijC,EAAUz7B,EAAExG,EAAE,GAAG,IAAM,IAAIhB,OAAOijC,EAAUjiC,EAAEA,GAAG,IAAI,IAAIhB,OAAOijC,EAAUjiC,EAAEA,GAAG,IAAM,IAAIhB,OAAOijC,EAAUr9B,EAAE5E,GAAG,IAAI,IAAIhB,OAAOijC,EAAUr9B,EAAE5E,GAAG,IAGxMiiC,EAAUz/B,GAAKpC,EAAM,IACpB8hC,GAAc,KAAKljC,OAAOijC,EAAUz7B,EAAExG,EAAE,GAAG,IAAI,IAAIhB,OAAOijC,EAAUz7B,EAAExG,EAAE,GAAG,IAAM,IAAIhB,OAAOijC,EAAUjiC,EAAE,GAAG,IAAI,IAAIhB,OAAOijC,EAAUjiC,EAAE,GAAG,IAAM,IAAIhB,OAAOijC,EAAUr9B,EAAE,GAAG,IAAI,IAAI5F,OAAOijC,EAAUr9B,EAAE,GAAG,KAKxMg3B,EAASY,WAAa0F,IAClBtG,EAASjZ,OACJsf,EAAUz/B,EAELwZ,EAAS4T,IACdgM,EAASjZ,KAAKzC,aAAa,IAAIvd,KAAKi6B,UAAYsF,GAEhDtG,EAASjZ,KAAKzC,aAAa,IAAIgiB,GAJ/BtG,EAASjZ,KAAKzC,aAAa,IAAI,KAOvC0b,EAASY,SAAW0F,EAE5B,EAEAvG,YAAYxpB,UAAUuuB,QAAU,WAC5B/9B,KAAKvB,QAAU,KACfuB,KAAKigB,WAAa,KAClBjgB,KAAKk5B,YAAc,KACnBl5B,KAAKoX,KAAO,KACZpX,KAAK0X,gBAAkB,IAC3B,EAGA8iB,YAAYhrB,UAAUgwB,WAAa,WAC/B,IAAIx/B,KAAKoX,KAAKI,QACV,OAAO,EAGX,IADA,IAAIna,EAAI,EAAGI,EAAMuC,KAAKoX,KAAKM,gBAAgBha,OACrCL,EAAEI,GAAK,CACT,GAA0C,MAAtCuC,KAAKoX,KAAKM,gBAAgBra,GAAGq8B,OAAoD,IAApC15B,KAAKoX,KAAKM,gBAAgBra,GAAGqc,GAC1E,OAAO,EAEXrc,GAAK,CACT,CACA,OAAO,CACX,EAEAm9B,YAAYhrB,UAAU6uB,eAAiB,gBACXz8B,IAArB5B,KAAKoX,KAAKpG,QACThR,KAAKogB,KAAKwc,sBAAsB58B,KAAMA,KAAKoX,KAAKpG,OAExD,EAEAwpB,YAAYhrB,UAAUgvB,aAAe,SAASz6B,GACvC/D,KAAKoX,KAAKokB,GAAKx7B,KAAKoX,KAAKiK,IAAMtd,GAAO/D,KAAKoX,KAAK+iB,GAAKn6B,KAAKoX,KAAKiK,GAAKtd,GAE7C,IAAnB/D,KAAKy/B,YACJz/B,KAAK0/B,SAAU,EACf1/B,KAAKigB,WAAWE,KAAM,EACtBngB,KAAKy/B,WAAY,EACjBz/B,KAAKW,YAAa,EACfX,KAAKoX,KAAKI,UACTxX,KAAKmzB,YAAYxyB,YAAa,KAIhB,IAAnBX,KAAKy/B,YACJz/B,KAAK0/B,SAAU,EACf1/B,KAAKigB,WAAWE,KAAM,EACtBngB,KAAKy/B,WAAY,GAGzB,IAAIpiC,EAAGI,EAAMuC,KAAKgE,kBAAkBtG,OACpC,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,GACV2C,KAAKy/B,WAAcz/B,KAAK+8B,WAAgD,cAAnC/8B,KAAKgE,kBAAkB3G,GAAG4C,QAC9DD,KAAKgE,kBAAkB3G,GAAG4G,WACvBjE,KAAKgE,kBAAkB3G,GAAG8iB,MACzBngB,KAAK0/B,SAAU,EACf1/B,KAAKigB,WAAWE,KAAM,IAuBlC,OAnBGngB,KAAKoX,KAAKI,SAAWxX,KAAKy/B,WACzBz/B,KAAKmzB,YAAYqL,aAAaz6B,EAAI/D,KAAKoX,KAAKuoB,IAiBhD3/B,KAAK4/B,gBAAkB77B,EAAI/D,KAAKoX,KAAKuoB,GAC9B3/B,KAAKy/B,SAChB,EAEAjF,YAAYhrB,UAAUqwB,cAAgB,SAASj2B,GAC3C,IAAIk2B,EAAa,GACjBA,EAAW3+B,KAAKnB,KAAKm/B,gBAGrB,IAFA,IAAI9gC,GAAO,EACP+hB,EAAOpgB,KAAKogB,KACV/hB,GACC+hB,EAAK+e,gBACD/e,EAAKhJ,KAAKI,SACTsoB,EAAWv+B,OAAO,EAAE,EAAE6e,EAAK+e,gBAE/B/e,EAAOA,EAAKA,MAEZ/hB,GAAO,EAGf,IAAIhB,EAA2B0iC,EAAxBtiC,EAAMqiC,EAAWpiC,OACxB,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb0iC,EAAQD,EAAWziC,GAAGslB,IAAI1Y,kBAAkB,EAAE,EAAE,GAEhDL,EAAK,CAACA,EAAG,GAAKm2B,EAAM,GAAGn2B,EAAG,GAAKm2B,EAAM,GAAG,GAE5C,OAAOn2B,CACX,EAEA4wB,YAAYhrB,UAAU0uB,gBAAkB,WACpCl+B,KAAKggC,eAAiBC,yBAAyBjgC,MAG5CA,KAAKoX,KAAKI,SACTxX,KAAKggC,eAAeE,sBAAsBlgC,KAAKmzB,aAEnD,IAAIgN,EAAmBC,2BAA2BC,uBAAuBrgC,KAAKA,KAAKggC,gBACnFhgC,KAAKggC,eAAeM,yBAAyBH,GAEzB,IAAjBngC,KAAKoX,KAAKzQ,IAAY3G,KAAKoX,KAAK6nB,GAC/Bj/B,KAAKugC,cAAgBC,wBAAwBxgC,MACtB,IAAjBA,KAAKoX,KAAKzQ,GAChB3G,KAAKggC,eAAeS,eAAiBC,yBAAyBC,qBAAqB3gC,KAAKi7B,WAAWj7B,KAAKm7B,UAAUn7B,KAAKggC,gBAChG,IAAjBhgC,KAAKoX,KAAKzQ,KAChB3G,KAAKggC,eAAeY,cAAgBC,wBAAwB7gC,MAEpE,EAEAw6B,YAAYhrB,UAAUsxB,aAAe,WACjC,IAAIC,EAAiB,GACrB,OAAO/gC,KAAKoX,KAAK4pB,IACb,KAAK,EACDD,EAAiB,WACjB,MACJ,KAAK,EACDA,EAAiB,SACjB,MACJ,KAAK,EACDA,EAAiB,UACjB,MACJ,KAAK,EACDA,EAAiB,SACjB,MACJ,KAAK,EACDA,EAAiB,UACjB,MACJ,KAAK,EACDA,EAAiB,cACjB,MACJ,KAAK,EACDA,EAAiB,aACjB,MACJ,KAAK,EACDA,EAAiB,aACjB,MACJ,KAAK,EACDA,EAAiB,aACjB,MACJ,KAAK,GACDA,EAAiB,aACjB,MACJ,KAAK,GACDA,EAAiB,YACjB,MACJ,KAAK,GACDA,EAAiB,MACjB,MACJ,KAAK,GACDA,EAAiB,aACjB,MACJ,KAAK,GACDA,EAAiB,QACjB,MACJ,KAAK,GACDA,EAAiB,cAGd/gC,KAAKihC,aAAejhC,KAAKk9B,cAE/Bx+B,MAAM,kBAAoBqiC,CACnC,EAEAvG,YAAYhrB,UAAUhL,KAAO,WACrBxE,KAAKoX,KAAKuoB,KACV3/B,KAAKoX,KAAKuoB,GAAK,GAEnB3/B,KAAKgE,kBAAoBhE,KAAKgE,mBAAqB,GAChDhE,KAAKoX,KAAK8pB,KACTlhC,KAAKmhC,QAAU,IAAIC,eAAephC,KAAKoX,KAAKpX,KAAKA,KAAKgE,oBAI1DhE,KAAKqhC,QAAS,EACdrhC,KAAKW,YAAa,EAClBX,KAAKy/B,WAAY,EACjBz/B,KAAK+8B,WAAY,EACjB/8B,KAAK4/B,iBAAmB,MACxB5/B,KAAKshC,SAAW,MACbthC,KAAKoX,KAAKiB,KACTrY,KAAKm/B,eAAiB,CAClBC,MAAOnhB,gBAAgBwF,QAAQzjB,KAAKA,KAAKoX,KAAKiB,GAAG,EAAE,KAAKrY,KAAKgE,mBAC7Du9B,QAAQ,EACRC,OAAO,EACP7e,IAAK,IAAIje,OACT+8B,QAAS,GAEVzhC,KAAKoX,KAAKsqB,KACT1hC,KAAKm/B,eAAeC,MAAMnc,cAAe,GAE7CjjB,KAAKm/B,eAAehF,GAAKn6B,KAAKm/B,eAAeC,MAAMv7B,EACnD7D,KAAK6G,UAAY7G,KAAKm/B,eAAeC,MACjB,KAAjBp/B,KAAKoX,KAAKzQ,IACT3G,KAAK2hC,iBAEN3hC,KAAKoX,KAAKI,SACTxX,KAAK4hC,SAAS5hC,KAAKoX,OAG3BpX,KAAK0/B,SAAU,CACnB,EACAlF,YAAYhrB,UAAUqyB,QAAU,WAC5B,OAAO7hC,KAAKC,IAChB,EAEAu6B,YAAYhrB,UAAUsyB,eAAiB,WAC/B9hC,KAAK88B,UAGL98B,KAAK88B,UAAUp/B,OAAS,EAFxBsC,KAAK88B,UAAY,EAIzB,EAEAtC,YAAYhrB,UAAUuyB,aAAe,WAIjC,OAHI/hC,KAAK88B,YACL98B,KAAK88B,UAAY,IAEd98B,KAAK88B,SAChB,EAEAtC,YAAYhrB,UAAUwtB,aAAe,SAASF,GAC1C98B,KAAK88B,UAAYA,CACrB,EAEAtC,YAAYhrB,UAAUwyB,aAAe,WACjC,OAAoB,IAAjBhiC,KAAKoX,KAAKzQ,GACF,CAACoU,EAAE/a,KAAKoX,KAAKuZ,SAAS5lB,MAAMhJ,EAAE/B,KAAKoX,KAAKuZ,SAAS8M,QAEjD,CAAC1iB,EAAE/a,KAAKoX,KAAKrM,MAAMhJ,EAAE/B,KAAKoX,KAAKqmB,OAE9C,EAEAjD,YAAYhrB,UAAUqvB,KAAO,WAE7B,EAEArE,YAAYhrB,UAAUyyB,iBAAmB,WACrC,MAAO,CACHrjC,IAAI,EACJC,KAAK,EACLkM,MAAM,IACN0yB,OAAO,IAEf,EAEAjD,YAAYhrB,UAAUkkB,QAAU,IAAIhvB,OAepCqM,cAAcypB,YAAaC,gBAE3BA,eAAejrB,UAAUmyB,eAAiB,WACtC3hC,KAAKk9B,aAAe/iB,SAASiC,gBAAgB3gB,MAAM,KACnDuE,KAAK66B,mBAAqB76B,KAAKk9B,aAC5Bl9B,KAAKoX,KAAKI,UACTxX,KAAKu6B,cAAgBv6B,KAAKk9B,cAE9B,IAAIgF,EAAqB,KACzB,GAAGliC,KAAKoX,KAAKG,IACT,GAAmB,GAAhBvX,KAAKoX,KAAKG,IAA2B,GAAhBvX,KAAKoX,KAAKG,GAAQ,CACtC,IAAI4qB,EAAShoB,SAASiC,gBAAgB3gB,MAAM,QAO5C,GANA0mC,EAAO5kB,aAAa,KAAKvd,KAAKw5B,SAC9B2I,EAAO5kB,aAAa,YAA4B,GAAhBvd,KAAKoX,KAAKG,GAAU,YAAY,SAChE4qB,EAAOvnB,YAAY5a,KAAKk9B,cACxBgF,EAAqBC,EACrBniC,KAAKigB,WAAWjD,KAAKpC,YAAYunB,IAE7B/R,eAAeC,UAA4B,GAAhBrwB,KAAKoX,KAAKG,GAAQ,CAC7C4qB,EAAO5kB,aAAa,YAAY,aAChC,IAAIgT,EAAQ7uB,aAAa,IACrB8uB,EAAMF,eAAe8R,aAAa7R,GACtCvwB,KAAKigB,WAAWjD,KAAKpC,YAAY4V,GACjCA,EAAI5V,YAAY0V,eAAe+R,iCAC3BC,EAAKnoB,SAASiC,gBAAgB3gB,MAAM,MACrCmf,YAAY5a,KAAKk9B,cACpBgF,EAAqBI,EACrBH,EAAOvnB,YAAY0nB,GACnBA,EAAG/kB,aAAa,SAAS,OAAS7hB,aAAe,IAAI60B,EAAM,IAC/D,CACJ,MAAM,GAAmB,GAAhBvwB,KAAKoX,KAAKG,GAAQ,CACvB,IAAIgrB,EAAYpoB,SAASiC,gBAAgB3gB,MAAM,QAC/C8mC,EAAUhlB,aAAa,KAAKvd,KAAKw5B,SACjC+I,EAAUhlB,aAAa,YAAY,SACnC,IAAIilB,EAAcroB,SAASiC,gBAAgB3gB,MAAM,KACjD8mC,EAAU3nB,YAAY4nB,GAClBjS,EAAQ7uB,aAAa,IACrB8uB,EAAMF,eAAe8R,aAAa7R,GADtC,IAIIE,EAAgBtW,SAASiC,gBAAgB3gB,MAAM,iBACnDg1B,EAAclT,aAAa,OAAO,UAClCkT,EAAclT,aAAa,8BAA8B,QACzDkT,EAAclT,aAAa,SAAS,4CACpCiT,EAAI5V,YAAY6V,GAUhBzwB,KAAKigB,WAAWjD,KAAKpC,YAAY4V,GACjC,IAAIiS,EAAYtoB,SAASiC,gBAAgB3gB,MAAM,QAW/C,GAVAgnC,EAAUllB,aAAa,QAAQvd,KAAKogB,KAAKhJ,KAAK2D,GAC9C0nB,EAAUllB,aAAa,SAASvd,KAAKogB,KAAKhJ,KAAKrV,GAC/C0gC,EAAUllB,aAAa,IAAI,KAC3BklB,EAAUllB,aAAa,IAAI,KAC3BklB,EAAUllB,aAAa,OAAO,WAC9BklB,EAAUllB,aAAa,UAAU,KACjCilB,EAAYjlB,aAAa,SAAS,OAAS7hB,aAAe,IAAI60B,EAAM,KACpEiS,EAAY5nB,YAAY6nB,GACxBD,EAAY5nB,YAAY5a,KAAKk9B,cAC7BgF,EAAqBM,GACjBpS,eAAeC,SAAS,CACxBkS,EAAUhlB,aAAa,YAAY,aACnCiT,EAAI5V,YAAY0V,eAAe+R,gCAC/B,IAAIC,EAAKnoB,SAASiC,gBAAgB3gB,MAAM,KACxC+mC,EAAY5nB,YAAY6nB,GACxBH,EAAG1nB,YAAY5a,KAAKk9B,cACpBgF,EAAqBI,EACrBE,EAAY5nB,YAAY0nB,EAC5B,CACAtiC,KAAKigB,WAAWjD,KAAKpC,YAAY2nB,EACrC,OACKviC,KAAKoX,KAAKI,SAAWxX,KAAKoX,KAAKE,KACjCtX,KAAKoX,KAAKE,IACTtX,KAAK46B,aAAezgB,SAASiC,gBAAgB3gB,MAAM,KACnDuE,KAAK46B,aAAahgB,YAAY5a,KAAKk9B,cACnCgF,EAAqBliC,KAAK46B,aAC1B56B,KAAKihC,YAAcjhC,KAAK46B,cAK5B56B,KAAKihC,YAAcjhC,KAAKk9B,aAU5B,IARIl9B,KAAKoX,KAAKsrB,KAAM1iC,KAAKoX,KAAKsC,IAAyB,IAAjB1Z,KAAKoX,KAAKzQ,IAA6B,IAAjB3G,KAAKoX,KAAKzQ,KAC/D3G,KAAKoX,KAAKsrB,IACT1iC,KAAKk9B,aAAa3f,aAAa,KAAKvd,KAAKoX,KAAKsrB,IAE/C1iC,KAAKoX,KAAKsC,IACT1Z,KAAKk9B,aAAa3f,aAAa,QAAQvd,KAAKoX,KAAKsC,KAGrC,IAAjB1Z,KAAKoX,KAAKzQ,GAAS,CACd,IAAIg8B,EAAKxoB,SAASiC,gBAAgB3gB,MAAO,YACrCmO,EAAKuQ,SAASiC,gBAAgB3gB,MAAM,QACxCmO,EAAG2T,aAAa,IAAI,SAASvd,KAAKoX,KAAK2D,EAAnB,OAA+B/a,KAAKoX,KAAK2D,EAAE,IAAI/a,KAAKoX,KAAKrV,EAAE,OAAO/B,KAAKoX,KAAKrV,EAAE,KAClG,IAAI6gC,EAAS,MAAMlhC,aAAa,GAIpC,GAHIihC,EAAGplB,aAAa,KAAKqlB,GACrBD,EAAG/nB,YAAYhR,GACf5J,KAAKigB,WAAWjD,KAAKpC,YAAY+nB,GAClC3iC,KAAKw/B,aAAa,CACjB,IAAIqD,EAAU1oB,SAASiC,gBAAgB3gB,MAAM,KAC7ConC,EAAQtlB,aAAa,YAAY,OAAS7hB,aAAe,IAAIknC,EAAO,KACpEC,EAAQjoB,YAAY5a,KAAKk9B,cACzBl9B,KAAK66B,mBAAqBgI,EACvBX,EACCA,EAAmBtnB,YAAY5a,KAAK66B,oBAEpC76B,KAAKihC,YAAcjhC,KAAK66B,kBAEhC,MACI76B,KAAKk9B,aAAa3f,aAAa,YAAY,OAAS7hB,aAAe,IAAIknC,EAAO,IAGtF,CACoB,IAAjB5iC,KAAKoX,KAAK4pB,IACThhC,KAAK8gC,eAEN9gC,KAAKk9B,eAAiBl9B,KAAK06B,kBAC1B16B,KAAK26B,YAAc,MAmEpB36B,KAAKoX,KAAK8pB,KACTlhC,KAAK8iC,eAAiB,IAAIC,WAAW/iC,OAEzCA,KAAKq+B,gBACT,EAGA5D,eAAejrB,UAAUsxB,aAAetG,YAAYhrB,UAAUsxB,aAE9DrG,eAAejrB,UAAU8uB,YAAc,SAAS0E,GAC5C,GAAoB,IAAjBhjC,KAAKoX,KAAKzQ,IAAY3G,KAAKoX,KAAK6rB,KAAOjjC,KAAKy/B,UAC3C,OAAO,EAQX,IAAI9c,EALJ3iB,KAAKshC,QAAUthC,KAAK4/B,gBACpB5/B,KAAKm/B,eAAeqC,MAAQxhC,KAAKW,YAAcX,KAAKm/B,eAAehF,GAAGha,IACtEngB,KAAKm/B,eAAeoC,OAASvhC,KAAKW,YAAcX,KAAKm/B,eAAeC,MAAMjf,IAC1EngB,KAAKm/B,eAAesC,QAAUzhC,KAAKm/B,eAAehF,GAAGl4B,EAGrD,IAAIi9B,EAAWl/B,KAAKm/B,eAAexc,IAEnC,GAAG3iB,KAAK88B,UAAU,CACd,IAAIz/B,EAAI,EAAGI,EAAMuC,KAAK88B,UAAUp/B,OAChC,IAAIsC,KAAKm/B,eAAeoC,OACpB,KAAMlkC,EAAII,GAAK,CACX,GAAGuC,KAAK88B,UAAUz/B,GAAG8hC,eAAeC,MAAMjf,IAAK,CAC3CngB,KAAKm/B,eAAeoC,QAAS,EAC7B,KACJ,CACAlkC,GAAK,CACT,CAGJ,GAAG2C,KAAKm/B,eAAeoC,OAGnB,IAFA5e,EAAM3iB,KAAKm/B,eAAeC,MAAMn9B,EAAE2C,MAClCs6B,EAAS/1B,eAAewZ,GACpBtlB,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACbslB,EAAM3iB,KAAK88B,UAAUz/B,GAAG8hC,eAAeC,MAAMn9B,EAAE2C,MAC/Cs6B,EAASr4B,UAAU8b,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGA,EAAI,IAAIA,EAAI,IAAIA,EAAI,IAAIA,EAAI,IAAIA,EAAI,IAAIA,EAAI,IAIjJ,MAAS3iB,KAAKy/B,YACVP,EAAWl/B,KAAKm/B,eAAeC,MAAMn9B,GAwBzC,OAtBGjC,KAAKm/B,eAAeoC,QAAUvhC,KAAKk9B,cAClCl9B,KAAK66B,mBAAmBtd,aAAa,YAAY2hB,EAASx0B,WAE3D1K,KAAKm/B,eAAeqC,OAASxhC,KAAKk9B,eAC9Bl9B,KAAKm/B,eAAehF,GAAGl4B,GAAK,GACvBjC,KAAK86B,eAAiB96B,KAAKigB,WAAWwY,aAAaG,oBACnD54B,KAAK86B,eAAgB,EACrB96B,KAAK6+B,QAEH7+B,KAAKqhC,QAAUrhC,KAAK86B,gBAC1B96B,KAAK86B,eAAgB,EACrB96B,KAAK8+B,QAET9+B,KAAK66B,mBAAmBtd,aAAa,UAAUvd,KAAKm/B,eAAehF,GAAGl4B,IAGvEjC,KAAKoX,KAAKI,SACTxX,KAAKmzB,YAAYmL,YAAYY,GAE9Bl/B,KAAK8iC,gBACJ9iC,KAAK8iC,eAAexE,YAAYt+B,KAAKW,YAElCX,KAAKy/B,SAChB,EAEAhF,eAAejrB,UAAUuuB,QAAU,WAC/B/9B,KAAKk9B,aAAe,KACpBl9B,KAAK06B,gBAAkB,KACpB16B,KAAK46B,eACJ56B,KAAK46B,aAAe,MAErB56B,KAAKmzB,aACJnzB,KAAKmzB,YAAY4K,SAEzB,EAEAtD,eAAejrB,UAAUkvB,eAAiB,WACtC,OAAO1+B,KAAKihC,WAChB,EACAxG,eAAejrB,UAAUoyB,SAAW,SAASxqB,GACzCpX,KAAKmzB,YAAc,IAAI6F,YAAY5hB,EAAKpX,KAAKA,KAAKigB,WACtD,EAEAwa,eAAejrB,UAAU4uB,SAAW,SAAS5nB,GACrCxW,KAAK46B,cAGT56B,KAAK46B,aAAard,aAAa,OAAQ,OAAS7hB,aAAe,IAAM8a,EAAK,IAC9E,EAEAikB,eAAejrB,UAAUqvB,KAAO,WACxB7+B,KAAKqhC,SACLrhC,KAAKk9B,aAAax+B,MAAMI,QAAU,OAClCkB,KAAKqhC,QAAS,EAEtB,EAEA5G,eAAejrB,UAAUsvB,KAAO,WACzB9+B,KAAKy/B,YAAcz/B,KAAK86B,gBACvB96B,KAAKqhC,QAAS,EACdrhC,KAAKk9B,aAAax+B,MAAMI,QAAU,QAE1C,EAYAiS,cAAc0pB,eAAgBO,eAE9BA,cAAcxrB,UAAU0zB,eAAiB,IAAIx+B,OAE7Cs2B,cAAcxrB,UAAU2zB,OAAS,CAC7B,EAAK,OACL,EAAK,QACL,EAAK,UAGTnI,cAAcxrB,UAAU4zB,OAAS,CAC7B,EAAK,QACL,EAAK,QACL,EAAK,QAGTpI,cAAcxrB,UAAU6zB,uBAAyB,SAASrjB,GAEtD,IADA,IAAI3iB,EAAI2C,KAAKs7B,kBAAkB59B,OACzBL,GAEF,GADAA,GAAK,EACF2C,KAAKs7B,kBAAkBj+B,GAAG2iB,OAASA,EAClC,OAAOhgB,KAAKs7B,kBAAkBj+B,GAAGyoB,IAGzC,OAAO,CACX,EAEAkV,cAAcxrB,UAAU8zB,oBAAsB,SAAStjB,EAAM8F,GAEzD,IADA,IAAIzoB,EAAI2C,KAAKs7B,kBAAkB59B,OACzBL,GAEF,GADAA,GAAK,EACF2C,KAAKs7B,kBAAkBj+B,GAAG2iB,OAASA,EAAK,CACvChgB,KAAKs7B,kBAAkBj+B,GAAGyoB,IAAMA,EAChC,KACJ,CAEK,IAANzoB,GACC2C,KAAKs7B,kBAAkBn6B,KAAK,CACxB6e,KAAMA,EACN8F,IAAKA,GAGjB,EAEAkV,cAAcxrB,UAAU+zB,yBAA2B,WAAW,EAE9DvI,cAAcxrB,UAAUmyB,eAAiB,WAErC3hC,KAAKuR,QAAQowB,eAAetwB,KAAKrR,MACjCA,KAAKwjC,aAAaxjC,KAAKi7B,WAAWj7B,KAAKm7B,UAAUn7B,KAAKo7B,aAAap7B,KAAKk9B,aAAal9B,KAAKgE,kBAAmB,EAAG,IAAI,GAChHhE,KAAKoX,KAAK6rB,KAAMjjC,KAAKoX,KAAKG,IAC1BjY,qBAAqBU,KAAKk9B,aAElC,EAEAlC,cAAcxrB,UAAUi0B,gBAAkB,SAASC,EAAYv5B,EAAIiN,GAE/D,IACIusB,EADAC,EAAa,MAAMliC,aAAa,KAGhCiiC,EADS,IAAVx5B,EAAIrK,EACKqa,SAASiC,gBAAgB3gB,MAAM,kBAE/B0e,SAASiC,gBAAgB3gB,MAAM,mBAErC8hB,aAAa,KAAKqmB,GACxBD,EAAMpmB,aAAa,eAAe,OAClComB,EAAMpmB,aAAa,gBAAgB,kBACnC,IACIsmB,EAAMx9B,EAAG6Q,EADT4sB,EAAQ,GAGZ,IADA5sB,EAAe,EAAR/M,EAAIhI,EAAEE,EACTgE,EAAE,EAAEA,EAAE6Q,EAAK7Q,GAAG,EACdw9B,EAAO1pB,SAASiC,gBAAgB3gB,MAAM,QACtCkoC,EAAM/oB,YAAYipB,GAClBC,EAAM3iC,KAAK0iC,GAEfH,EAAYnmB,aAAyB,OAAXpT,EAAIxD,GAAc,OAAO,SAAS,QAAQi9B,EAAW,KAC/E5jC,KAAKigB,WAAWjD,KAAKpC,YAAY+oB,GACjCvsB,EAAK2sB,GAAKJ,EACVvsB,EAAK4sB,IAAMF,CACf,EAEA9I,cAAcxrB,UAAUy0B,mBAAqB,SAAS95B,EAAKiN,EAAM8sB,GAC7D,GAAI/5B,EAAIhI,EAAEmE,EAAEA,EAAE,GAAGtE,GAAKmI,EAAIhI,EAAEmE,EAAEA,EAAE,GAAGtE,EAAEtE,OAAiB,EAARyM,EAAIhI,EAAEE,GAAQ8H,EAAIhI,EAAEmE,EAAEA,EAAE5I,OAAiB,EAARyM,EAAIhI,EAAEE,EAAI,CACrF,IAAI8hC,EACAN,EAAMx9B,EAAG6Q,EACT9L,EAAO+O,SAASiC,gBAAgB3gB,MAAM,QACtCy9B,EAAc/e,SAASiC,gBAAgB3gB,MAAO,QAClD2P,EAAKwP,YAAYse,GACjB,IAAIkL,EAAY,MAAM1iC,aAAa,IAC/Bo8B,EAAS,MAAMp8B,aAAa,IAChC0J,EAAKmS,aAAa,KAAKugB,IAEnBqG,EADS,IAAVh6B,EAAIrK,EACMqa,SAASiC,gBAAgB3gB,MAAM,kBAE/B0e,SAASiC,gBAAgB3gB,MAAM,mBAErC8hB,aAAa,KAAK6mB,GACzBD,EAAO5mB,aAAa,eAAe,OACnC4mB,EAAO5mB,aAAa,gBAAgB,kBACpCrG,EAAO/M,EAAIhI,EAAEmE,EAAEA,EAAE,GAAGtE,EAAImI,EAAIhI,EAAEmE,EAAEA,EAAE,GAAGtE,EAAEtE,OAASyM,EAAIhI,EAAEmE,EAAEA,EAAE5I,OAC1D,IAAIomC,EAAQ,GACZ,IAAIz9B,EAAU,EAAR8D,EAAIhI,EAAEE,EAAIgE,EAAE6Q,EAAK7Q,GAAG,GACtBw9B,EAAO1pB,SAASiC,gBAAgB3gB,MAAM,SACjC8hB,aAAa,aAAa,oBAG/B4mB,EAAOvpB,YAAYipB,GACnBC,EAAM3iC,KAAK0iC,GAQf,OANA3K,EAAY3b,aAAyB,OAAXpT,EAAIxD,GAAc,OAAO,SAAS,QAAQy9B,EAAU,KAC9EpkC,KAAKigB,WAAWjD,KAAKpC,YAAYupB,GACjCnkC,KAAKigB,WAAWjD,KAAKpC,YAAYxP,GACjCgM,EAAKmb,GAAK4R,EACV/sB,EAAKitB,IAAMP,EACXI,EAAQI,OAASpL,EACV4E,CACX,CACJ,EAEA9C,cAAcxrB,UAAU+0B,mBAAqB,SAASntB,EAAMotB,EAAOxgC,GAC/D,IAAIygC,EAAc,CAClB,EACIP,EAAU,CACV9sB,KAAMA,EACNnX,KAAMmX,EAAKzQ,GACX5G,EAAG,GACH2kC,GAAI,GACJC,IAAKH,EACLrkB,KAAK,EACL1L,QAAQ,GAERivB,EAAcvpB,SAASiC,gBAAgB3gB,MAAO,QAElD,GADAgpC,EAAY5gC,EAAIoa,gBAAgBwF,QAAQzjB,KAAKoX,EAAKvT,EAAE,EAAE,IAAKG,IAC7C,MAAXoT,EAAKzQ,IAAyB,MAAXyQ,EAAKzQ,MACvB+8B,EAAYnmB,aAAa,iBAAkBvd,KAAKmjC,OAAO/rB,EAAKwtB,KAAO,SAEnElB,EAAYnmB,aAAa,kBAAkBvd,KAAKojC,OAAOhsB,EAAKytB,KAAO,SAEnEnB,EAAYnmB,aAAa,eAAe,KAE1B,GAAXnG,EAAKytB,IACJnB,EAAYnmB,aAAa,oBAAoBnG,EAAK0tB,IAItDL,EAAY1pB,EAAIkD,gBAAgBwF,QAAQzjB,KAAKoX,EAAK2D,EAAE,EAAE,KAAK/W,GACxDoT,EAAKrX,GAAE,CACN,IAAIA,EAAIke,gBAAgBoH,YAAYrlB,KAAKoX,EAAKrX,EAAE,MAAMiE,GAClDjE,EAAEuG,IACFo9B,EAAYnmB,aAAa,mBAAoBxd,EAAEqkB,WAE/Csf,EAAYnmB,aAAa,oBAAqBxd,EAAEskB,aAGpDogB,EAAY1kC,EAAIA,CACpB,CAGJ,GAAc,MAAXqX,EAAKzQ,IAAyB,MAAXyQ,EAAKzQ,GACvB89B,EAAY5kC,EAAIoe,gBAAgBwF,QAAQzjB,KAAKoX,EAAKvX,EAAE,EAAE,IAAImE,OACvD,CACHygC,EAAYtiC,EAAI8b,gBAAgB0F,gBAAgB3jB,KAAKoX,EAAKjV,EAAE6B,GAC/C,GAAVoT,EAAKtX,IACJ2kC,EAAY1iC,EAAIkc,gBAAgBwF,QAAQzjB,KAAKoX,EAAKrV,EAAE,EAAE,IAAKiC,GAC3DygC,EAAYt+B,EAAI8X,gBAAgBwF,QAAQzjB,KAAKoX,EAAKjR,EAAE,EAAElI,UAAU+F,IAEpEygC,EAAYziC,EAAIic,gBAAgBwF,QAAQzjB,KAAKoX,EAAKpV,EAAE,EAAE,KAAKgC,GAC3DygC,EAAYr+B,EAAI6X,gBAAgBwF,QAAQzjB,KAAKoX,EAAKhR,EAAE,EAAE,KAAKpC,GAC3DhE,KAAKyjC,gBAAgBC,EAAYtsB,EAAKqtB,EAAaP,GACnD,IAAIpG,EAAS99B,KAAKikC,mBAAmB7sB,EAAKqtB,EAAaP,GACpDpG,GACC4F,EAAYnmB,aAAa,OAAO,QAAQugB,EAAO,IAEvD,CAgBA,OAfA2G,EAAYzkB,KAAO0jB,EAEL,IAAXtsB,EAAKlV,GACJwhC,EAAYnmB,aAAa,YAAa,WAGvCnG,EAAKsrB,IACJgB,EAAYnmB,aAAa,KAAKnG,EAAKsrB,IAEpCtrB,EAAKsC,IACJgqB,EAAYnmB,aAAa,QAAQnG,EAAKsC,IAE1CwqB,EAAQa,MAAQrB,EAChB1jC,KAAKk7B,WAAW/5B,KAAK+iC,GACrBO,EAAY/lC,MAAQwlC,EACbO,CACX,EAEAzJ,cAAcxrB,UAAUw1B,mBAAqB,SAAS5tB,GAClD,IAAIqtB,EAAc,CACdnsB,GAAI,GACJ8iB,aAAc,IAEdj5B,EAAIgY,SAASiC,gBAAgB3gB,MAAM,KAKvC,OAJAgpC,EAAYQ,GAAK9iC,EACdiV,EAAKsrB,IACJ+B,EAAYQ,GAAG1nB,aAAa,KAAKnG,EAAKsrB,IAEnC+B,CACX,EAEAzJ,cAAcxrB,UAAU01B,uBAAyB,SAAS9tB,EAAMpT,GAQ5D,MAPkB,CACd6C,UAAY,CACRszB,GAAIlc,gBAAgBwF,QAAQzjB,KAAKoX,EAAKvT,EAAE,EAAE,IAAKG,GAC/C8qB,OAAQ7Q,gBAAgBwF,QAAQzjB,KAAKoX,EAAK,EAAE,KAAKpT,IAErD0pB,SAAU,GAGlB,EAEAsN,cAAcxrB,UAAU21B,mBAAqB,SAAS/tB,EAAMguB,EAAiBZ,EAAOxgC,GAChF,IAAIygC,EAAc,CACd/W,SAAW,GACX2X,OAAO,GACPvO,OAAS,GACTwO,aAAcF,EACdG,KAAM,IAEN5+B,EAAK,EAYT,MAXc,MAAXyQ,EAAKzQ,GACJA,EAAK,EACW,MAAXyQ,EAAKzQ,GACVA,EAAK,EACW,MAAXyQ,EAAKzQ,KACVA,EAAK,GAET89B,EAAY9kB,GAAK2G,qBAAqB8T,aAAap6B,KAAKoX,EAAKzQ,EAAG3C,GAChEygC,EAAYE,IAAMH,EAClBxkC,KAAK+X,OAAO5W,KAAKsjC,EAAY9kB,IAC7B3f,KAAKwlC,oBAAoBf,GAClBA,CACX,EAEA,IAAIpW,KAAO,EAqaX,SAASoX,aAAaruB,EAAMmhB,EAAcmC,EAAgBza,GAC1D,CA4DA,SAASkd,eAAe/lB,EAAKsjB,EAAgBza,EAAWG,EAAMua,GAC1D36B,KAAK0lC,UAAY,GACjB1lC,KAAK4wB,WAAa,MAClB5wB,KAAKuR,QAAQD,YAAYD,KAAKrR,KAAKoX,EAAKsjB,EAAgBza,EAAWG,EAAMua,EAC7E,CAuNA,SAASgL,cAAcC,EAAQC,GAC3B7lC,KAAK6lC,cAAgBA,EACrB,IAAIpV,EAAgBtW,SAASiC,gBAAgB3gB,MAAM,iBAanD,GAZAg1B,EAAclT,aAAa,OAAO,UAClCkT,EAAclT,aAAa,8BAA8B,aACzDkT,EAAclT,aAAa,SAAS,wFACpCkT,EAAclT,aAAa,SAAS,MACpCqoB,EAAOhrB,YAAY6V,IACnBA,EAAgBtW,SAASiC,gBAAgB3gB,MAAM,kBACjC8hB,aAAa,OAAO,UAClCkT,EAAclT,aAAa,8BAA8B,QACzDkT,EAAclT,aAAa,SAAS,2CACpCkT,EAAclT,aAAa,SAAS,MACpCqoB,EAAOhrB,YAAY6V,GACnBzwB,KAAK8lC,aAAerV,EACuB,MAAxCoV,EAAcE,eAAe,GAAG1jC,EAAEJ,GAAa4jC,EAAcE,eAAe,GAAG1jC,EAAEiE,EAAE,CAClF,IAEI0/B,EAFAC,EAAU9rB,SAASiC,gBAAgB3gB,MAAM,WAC7CmqC,EAAOhrB,YAAYqrB,IAEnBD,EAAc7rB,SAASiC,gBAAgB3gB,MAAM,gBACjC8hB,aAAa,KAAK,iBAC9B0oB,EAAQrrB,YAAYorB,IACpBA,EAAc7rB,SAASiC,gBAAgB3gB,MAAM,gBACjC8hB,aAAa,KAAK,MAC9B0oB,EAAQrrB,YAAYorB,EACxB,CACJ,CAUA,SAASE,cAAcN,EAAQC,GAC3B7lC,KAAK6lC,cAAgBA,EACrB,IAAIpV,EAAgBtW,SAASiC,gBAAgB3gB,MAAM,iBACnDg1B,EAAclT,aAAa,OAAO,UAClCkT,EAAclT,aAAa,8BAA8B,QACzDkT,EAAclT,aAAa,SAAS,2CACpCqoB,EAAOhrB,YAAY6V,GACnBzwB,KAAK8lC,aAAerV,CACxB,CAQA,SAAS0V,gBAAgBnmB,EAAM6lB,GAC3B7lC,KAAKomC,aAAc,EACnBpmC,KAAK6lC,cAAgBA,EACrB7lC,KAAKggB,KAAOA,EACZhgB,KAAKmE,MAAQ,EACjB,CAmGA,SAASkiC,iBAAiBT,EAAQC,GAC9B7lC,KAAK6lC,cAAgBA,EACrB,IAAIpV,EAAgBtW,SAASiC,gBAAgB3gB,MAAM,iBACnDg1B,EAAclT,aAAa,OAAO,UAClCkT,EAAclT,aAAa,8BAA8B,aACzDkT,EAAclT,aAAa,SAAS,wFACpCkT,EAAclT,aAAa,SAAS,MACpCqoB,EAAOhrB,YAAY6V,GACnB,IAAI6V,EAAsBnsB,SAASiC,gBAAgB3gB,MAAM,uBACzD6qC,EAAoB/oB,aAAa,8BAA8B,QAC/DqoB,EAAOhrB,YAAY0rB,GACnBtmC,KAAK8lC,aAAeQ,EACpB,IAAIC,EAAUpsB,SAASiC,gBAAgB3gB,MAAM,WAC7C8qC,EAAQhpB,aAAa,OAAO,SAC5B+oB,EAAoB1rB,YAAY2rB,GAChCvmC,KAAKumC,QAAUA,EACf,IAAIC,EAAUrsB,SAASiC,gBAAgB3gB,MAAM,WAC7C+qC,EAAQjpB,aAAa,OAAO,SAC5B+oB,EAAoB1rB,YAAY4rB,GAChCxmC,KAAKwmC,QAAUA,EACf,IAAIC,EAAUtsB,SAASiC,gBAAgB3gB,MAAM,WAC7CgrC,EAAQlpB,aAAa,OAAO,SAC5B+oB,EAAoB1rB,YAAY6rB,GAChCzmC,KAAKymC,QAAUA,CACnB,CAiBA,SAASC,mBAAmBd,EAAQC,GAChC7lC,KAAK6lC,cAAgBA,EACrB,IAAIE,EAAiB/lC,KAAK6lC,cAAcE,eACpCO,EAAsBnsB,SAASiC,gBAAgB3gB,MAAM,wBAGtDsqC,EAAe,GAAG1jC,EAAEiE,GAA+B,IAA1By/B,EAAe,GAAG1jC,EAAEJ,GAAW8jC,EAAe,IAAI1jC,EAAEiE,GAAgC,IAA3By/B,EAAe,IAAI1jC,EAAEJ,GAAW8jC,EAAe,IAAI1jC,EAAEiE,GAAgC,IAA3By/B,EAAe,IAAI1jC,EAAEJ,GAAW8jC,EAAe,IAAI1jC,EAAEiE,GAAgC,IAA3By/B,EAAe,IAAI1jC,EAAEJ,GAAW8jC,EAAe,IAAI1jC,EAAEiE,GAAgC,IAA3By/B,EAAe,IAAI1jC,EAAEJ,KACpRjC,KAAKumC,QAAUvmC,KAAK2mC,aAAa,UAAWL,KAE7CP,EAAe,IAAI1jC,EAAEiE,GAAgC,IAA3By/B,EAAe,IAAI1jC,EAAEJ,GAAW8jC,EAAe,IAAI1jC,EAAEiE,GAAgC,IAA3By/B,EAAe,IAAI1jC,EAAEJ,GAAW8jC,EAAe,IAAI1jC,EAAEiE,GAAgC,IAA3By/B,EAAe,IAAI1jC,EAAEJ,GAAW8jC,EAAe,IAAI1jC,EAAEiE,GAAgC,IAA3By/B,EAAe,IAAI1jC,EAAEJ,GAAW8jC,EAAe,IAAI1jC,EAAEiE,GAAgC,IAA3By/B,EAAe,IAAI1jC,EAAEJ,KACtRjC,KAAKwmC,QAAUxmC,KAAK2mC,aAAa,UAAWL,KAE7CP,EAAe,IAAI1jC,EAAEiE,GAAgC,IAA3By/B,EAAe,IAAI1jC,EAAEJ,GAAW8jC,EAAe,IAAI1jC,EAAEiE,GAAgC,IAA3By/B,EAAe,IAAI1jC,EAAEJ,GAAW8jC,EAAe,IAAI1jC,EAAEiE,GAAgC,IAA3By/B,EAAe,IAAI1jC,EAAEJ,GAAW8jC,EAAe,IAAI1jC,EAAEiE,GAAgC,IAA3By/B,EAAe,IAAI1jC,EAAEJ,GAAW8jC,EAAe,IAAI1jC,EAAEiE,GAAgC,IAA3By/B,EAAe,IAAI1jC,EAAEJ,KACtRjC,KAAKymC,QAAUzmC,KAAK2mC,aAAa,UAAWL,KAE7CP,EAAe,IAAI1jC,EAAEiE,GAAgC,IAA3By/B,EAAe,IAAI1jC,EAAEJ,GAAW8jC,EAAe,IAAI1jC,EAAEiE,GAAgC,IAA3By/B,EAAe,IAAI1jC,EAAEJ,GAAW8jC,EAAe,IAAI1jC,EAAEiE,GAAgC,IAA3By/B,EAAe,IAAI1jC,EAAEJ,GAAW8jC,EAAe,IAAI1jC,EAAEiE,GAAgC,IAA3By/B,EAAe,IAAI1jC,EAAEJ,GAAW8jC,EAAe,IAAI1jC,EAAEiE,GAAgC,IAA3By/B,EAAe,IAAI1jC,EAAEJ,KACtRjC,KAAK4mC,QAAU5mC,KAAK2mC,aAAa,UAAWL,KAG7CtmC,KAAKumC,SAAWvmC,KAAKwmC,SAAWxmC,KAAKymC,SAAWzmC,KAAK4mC,WACpDN,EAAoB/oB,aAAa,8BAA8B,QAC/DqoB,EAAOhrB,YAAY0rB,GACnBA,EAAsBnsB,SAASiC,gBAAgB3gB,MAAM,yBAGtDsqC,EAAe,GAAG1jC,EAAEiE,GAA+B,IAA1By/B,EAAe,GAAG1jC,EAAEJ,GAAW8jC,EAAe,GAAG1jC,EAAEiE,GAA+B,IAA1By/B,EAAe,GAAG1jC,EAAEJ,GAAW8jC,EAAe,GAAG1jC,EAAEiE,GAA+B,IAA1By/B,EAAe,GAAG1jC,EAAEJ,GAAW8jC,EAAe,GAAG1jC,EAAEiE,GAA+B,IAA1By/B,EAAe,GAAG1jC,EAAEJ,GAAW8jC,EAAe,GAAG1jC,EAAEiE,GAA+B,IAA1By/B,EAAe,GAAG1jC,EAAEJ,KAE5QqkC,EAAoB/oB,aAAa,8BAA8B,QAC/DqoB,EAAOhrB,YAAY0rB,GACnBtmC,KAAK6mC,gBAAkB7mC,KAAK2mC,aAAa,UAAWL,GACpDtmC,KAAK8mC,gBAAkB9mC,KAAK2mC,aAAa,UAAWL,GACpDtmC,KAAK+mC,gBAAkB/mC,KAAK2mC,aAAa,UAAWL,GAE5D,CAoEA,SAASU,oBAAoBpB,EAAQC,GAQjCD,EAAOroB,aAAa,IAAI,SACxBqoB,EAAOroB,aAAa,IAAI,SACxBqoB,EAAOroB,aAAa,QAAQ,QAC5BqoB,EAAOroB,aAAa,SAAS,QAC7Bvd,KAAK6lC,cAAgBA,EAErB,IAAIoB,EAAiB9sB,SAASiC,gBAAgB3gB,MAAM,kBACpDwrC,EAAe1pB,aAAa,KAAK,eACjC0pB,EAAe1pB,aAAa,SAAS,iBACrC0pB,EAAe1pB,aAAa,eAAe,KAC3Cvd,KAAKinC,eAAiBA,EACtBrB,EAAOhrB,YAAYqsB,GAEnB,IAAIC,EAAW/sB,SAASiC,gBAAgB3gB,MAAM,YAC9CyrC,EAAS3pB,aAAa,KAAK,MAC3B2pB,EAAS3pB,aAAa,KAAK,KAC3B2pB,EAAS3pB,aAAa,KAAK,iBAC3B2pB,EAAS3pB,aAAa,SAAS,iBAC/Bvd,KAAKknC,SAAWA,EAChBtB,EAAOhrB,YAAYssB,GACnB,IAAIC,EAAUhtB,SAASiC,gBAAgB3gB,MAAM,WAC7C0rC,EAAQ5pB,aAAa,cAAc,WACnC4pB,EAAQ5pB,aAAa,gBAAgB,KACrC4pB,EAAQ5pB,aAAa,SAAS,iBAC9Bvd,KAAKmnC,QAAUA,EACfvB,EAAOhrB,YAAYusB,GAEnB,IAAIC,EAAcjtB,SAASiC,gBAAgB3gB,MAAM,eACjD2rC,EAAY7pB,aAAa,KAAK,iBAC9B6pB,EAAY7pB,aAAa,MAAM,iBAC/B6pB,EAAY7pB,aAAa,WAAW,MACpC6pB,EAAY7pB,aAAa,SAAS,iBAClCqoB,EAAOhrB,YAAYwsB,GAGnB,IAEIpB,EAFAC,EAAU9rB,SAASiC,gBAAgB3gB,MAAM,WAC7CmqC,EAAOhrB,YAAYqrB,GAEnBD,EAAc7rB,SAASiC,gBAAgB3gB,MAAM,eAC7CwqC,EAAQrrB,YAAYorB,IACpBA,EAAc7rB,SAASiC,gBAAgB3gB,MAAM,gBACjC8hB,aAAa,KAAK,iBAC9Bvd,KAAKgmC,YAAcA,EACnBhmC,KAAKimC,QAAUA,EACfjmC,KAAKqnC,mBAAoB,EACzBpB,EAAQrrB,YAAYorB,EACxB,CAiCA,SAASsB,gBAAgBC,EAAY1B,EAAe7lB,GAChDhgB,KAAKomC,aAAc,EACnBpmC,KAAK6lC,cAAgBA,EACrB7lC,KAAKunC,WAAaA,EAClBvnC,KAAKggB,KAAOA,EACZA,EAAK4a,aAAezgB,SAASiC,gBAAgB3gB,MAAM,KACnDukB,EAAK4a,aAAahgB,YAAYoF,EAAKkd,cACnCld,EAAK4a,aAAahgB,YAAYoF,EAAK6a,oBACnC7a,EAAKihB,YAAcjhB,EAAK4a,YAC5B,CA8BA,SAASmI,WAAW/iB,GAChB,IAAI3iB,EAKAwoC,EALGpoC,EAAMuiB,EAAK5I,KAAK8pB,GAAGxjC,OACtB6yB,EAAQ7uB,aAAa,IACrB8uB,EAAMF,eAAe8R,aAAa7R,GAClC7kB,EAAQ,EAGZ,IAFA1L,KAAKwnC,QAAU,GAEXnqC,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACa,KAAvB2iB,EAAK5I,KAAK8pB,GAAG7jC,GAAGsJ,IACf+E,GAAS,EACTm6B,EAAgB,IAAIF,cAAcnV,EAAKxQ,EAAKmhB,QAAQ4E,eAAe1oC,IACnE2C,KAAKwnC,QAAQrmC,KAAK0kC,IACU,KAAvB7lB,EAAK5I,KAAK8pB,GAAG7jC,GAAGsJ,IACrB+E,GAAS,EACTm6B,EAAgB,IAAIK,cAAc1V,EAAKxQ,EAAKmhB,QAAQ4E,eAAe1oC,IACnE2C,KAAKwnC,QAAQrmC,KAAK0kC,IACU,KAAvB7lB,EAAK5I,KAAK8pB,GAAG7jC,GAAGsJ,IACrBk/B,EAAgB,IAAIM,gBAAgBnmB,EAAMA,EAAKmhB,QAAQ4E,eAAe1oC,IACtE2C,KAAKwnC,QAAQrmC,KAAK0kC,IACU,KAAvB7lB,EAAK5I,KAAK8pB,GAAG7jC,GAAGsJ,IACrB+E,GAAS,EACTm6B,EAAgB,IAAIQ,iBAAiB7V,EAAKxQ,EAAKmhB,QAAQ4E,eAAe1oC,IACtE2C,KAAKwnC,QAAQrmC,KAAK0kC,IACU,KAAvB7lB,EAAK5I,KAAK8pB,GAAG7jC,GAAGsJ,IACrB+E,GAAS,EACTm6B,EAAgB,IAAIa,mBAAmBlW,EAAKxQ,EAAKmhB,QAAQ4E,eAAe1oC,IACxE2C,KAAKwnC,QAAQrmC,KAAK0kC,IACU,KAAvB7lB,EAAK5I,KAAK8pB,GAAG7jC,GAAGsJ,IACrB+E,GAAS,EACTm6B,EAAgB,IAAImB,oBAAoBxW,EAAKxQ,EAAKmhB,QAAQ4E,eAAe1oC,IACzE2C,KAAKwnC,QAAQrmC,KAAK0kC,IACU,KAAvB7lB,EAAK5I,KAAK8pB,GAAG7jC,GAAGsJ,KAErBk/B,EAAgB,IAAIyB,gBAAgB9W,EAAKxQ,EAAKmhB,QAAQ4E,eAAe1oC,GAAI2iB,GACzEhgB,KAAKwnC,QAAQrmC,KAAK0kC,IAGvBn6B,IACCsU,EAAKC,WAAWjD,KAAKpC,YAAY4V,GACjCxQ,EAAKkd,aAAa3f,aAAa,SAAS,OAAS7hB,aAAe,IAAI60B,EAAM,KAElF,CAQA,SAAS8M,aAAajmB,EAAKsjB,EAAgBza,EAAWG,EAAMua,GACxD36B,KAAKuR,QAAQD,YAAYD,KAAKrR,KAAKoX,EAAKsjB,EAAgBza,EAAWG,EAAMua,GACzE36B,KAAK8W,OAASM,EAAKN,OACnB9W,KAAKynC,YAAa,EAClBznC,KAAK6W,gBAAiB,EACtB7W,KAAK84B,gBAAkB,GACvB94B,KAAK0tB,SAAW1tB,KAAK8W,OAAShZ,MAAMC,MAAM,KAAK,CAACL,OAAOsC,KAAK8W,OAAOpZ,SAAW,GAC3EsC,KAAKoX,KAAKswB,KACT1nC,KAAK0nC,GAAKzpB,gBAAgBwF,QAAQzjB,KAAKA,KAAKoX,KAAKswB,GAAG,EAAEznB,EAAWkD,UAAUnjB,KAAKgE,oBAEjFhE,KAAKoX,KAAK6nB,IACTj/B,KAAKk9B,aAAe/iB,SAASiC,gBAAgB3gB,MAAM,KACnDuE,KAAKq8B,iBACEpc,EAAW0Y,iBAClB34B,KAAKq8B,eAEb,CA8FA,SAASe,cAAchmB,EAAKsjB,EAAgBza,EAAWG,EAAKua,GACxD36B,KAAKsvB,UAAYrP,EAAW0d,aAAavmB,EAAKS,OAC9C7X,KAAKuR,QAAQD,YAAYD,KAAKrR,KAAKoX,EAAKsjB,EAAgBza,EAAWG,EAAKua,EAC5E,CA2CA,SAAS2C,cAAclmB,EAAKsjB,EAAgBza,EAAWG,EAAMua,GACzD36B,KAAKuR,QAAQD,YAAYD,KAAKrR,KAAKoX,EAAKsjB,EAAgBza,EAAWG,EAAMua,EAC7E,CAlzCAK,cAAcxrB,UAAUm4B,iBAAmB,WACvC,IAAIthC,EAAG6Q,EAAOlX,KAAKk7B,WAAWx9B,OAC1ByM,EAAM,GACV,IAAI9D,EAAE,EAAEA,EAAE6Q,EAAK7Q,GAAG,EACVrG,KAAKk7B,WAAW70B,GAAGoO,QACnBtK,EAAIhJ,KAAKnB,KAAKk7B,WAAW70B,IAGjC,OAAO8D,CACX,EAEA6wB,cAAcxrB,UAAU4e,aAAe,WACnCpuB,KAAKW,YAAa,EAClB,IAKItD,EALGI,EAAMuC,KAAKm7B,UAAUz9B,OAC5B,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb2C,KAAKo7B,aAAa/9B,GAAK2C,KAAKm7B,UAAU99B,GAI1C,IAFA2C,KAAKwjC,aAAaxjC,KAAKi7B,WAAWj7B,KAAKm7B,UAAUn7B,KAAKo7B,aAAap7B,KAAKk9B,aAAal9B,KAAKgE,kBAAmB,EAAG,IAAI,GAC7GvG,EAAMuC,KAAKgE,kBAAkBtG,OAChCL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb2C,KAAKgE,kBAAkB3G,GAAG4G,WAE9BjE,KAAK4nC,iBACT,EAEA5M,cAAcxrB,UAAUg0B,aAAe,SAASr5B,EAAIgxB,EAAUC,EAAayM,EAAU7jC,EAAmBwgC,EAAOc,EAAcwC,GACzH,IACIzqC,EACAgJ,EAAG6Q,EACyC6wB,EAAkBC,EAAUC,EAHxE7C,EAAkB,GAAGxf,OAAO0f,GACzB7nC,EAAM0M,EAAIzM,OAAS,EAEtBwqC,EAAY,GAAIC,EAAe,GACnC,IAAI9qC,EAAEI,EAAIJ,GAAG,EAAEA,GAAG,EAAE,CAOhB,IANA4qC,EAAejoC,KAAKqjC,uBAAuBl5B,EAAI9M,KAI3C89B,EAAU99B,GAAK+9B,EAAa6M,EAAe,GAF3C99B,EAAI9M,GAAG2wB,QAAU8Z,EAIL,MAAb39B,EAAI9M,GAAGsJ,IAA2B,MAAbwD,EAAI9M,GAAGsJ,IAA2B,MAAbwD,EAAI9M,GAAGsJ,IAA2B,MAAbwD,EAAI9M,GAAGsJ,GACjEshC,EAGA9M,EAAU99B,GAAGqB,MAAM+V,QAAS,EAF5B0mB,EAAU99B,GAAK2C,KAAKukC,mBAAmBp6B,EAAI9M,GAAImnC,EAAOxgC,GAIvDmG,EAAI9M,GAAG2wB,SACN6Z,EAAUjtB,YAAYugB,EAAU99B,GAAG2iB,MAEvCkoB,EAAU/mC,KAAKg6B,EAAU99B,GAAGqB,YAC1B,GAAgB,MAAbyL,EAAI9M,GAAGsJ,GAAW,CACvB,GAAIshC,EAIA,IADA/wB,EAAOikB,EAAU99B,GAAGib,GAAG5a,OACnB2I,EAAE,EAAEA,EAAE6Q,EAAK7Q,GAAG,EACd80B,EAAU99B,GAAG+9B,aAAa/0B,GAAK80B,EAAU99B,GAAGib,GAAGjS,QAJnD80B,EAAU99B,GAAK2C,KAAKglC,mBAAmB76B,EAAI9M,IAO/C2C,KAAKwjC,aAAar5B,EAAI9M,GAAGib,GAAG6iB,EAAU99B,GAAGib,GAAG6iB,EAAU99B,GAAG+9B,aAAaD,EAAU99B,GAAG4nC,GAAGjhC,EAAmBwgC,EAAQ,EAAGY,EAAiB0C,GAClI39B,EAAI9M,GAAG2wB,SACN6Z,EAAUjtB,YAAYugB,EAAU99B,GAAG4nC,GAE3C,KAAsB,MAAb96B,EAAI9M,GAAGsJ,IACRshC,IACA9M,EAAU99B,GAAK2C,KAAKklC,uBAAuB/6B,EAAI9M,GAAI2G,IAEvD+jC,EAAmB5M,EAAU99B,GAAGwJ,UAChCu+B,EAAgBjkC,KAAK4mC,IACH,MAAb59B,EAAI9M,GAAGsJ,IAA2B,MAAbwD,EAAI9M,GAAGsJ,IAA2B,MAAbwD,EAAI9M,GAAGsJ,IAA2B,MAAbwD,EAAI9M,GAAGsJ,IACvEshC,IACA9M,EAAU99B,GAAK2C,KAAKmlC,mBAAmBh7B,EAAI9M,GAAI+nC,EAAiBZ,EAAOxgC,IAE3Em3B,EAAU99B,GAAGqwB,SAAW1tB,KAAK2nC,oBAEX,MAAbx9B,EAAI9M,GAAGsJ,IAA2B,MAAbwD,EAAI9M,GAAGsJ,IAA2B,MAAbwD,EAAI9M,GAAGsJ,IAClDshC,GAMAD,EAAW7M,EAAU99B,IACZoX,QAAS,IANlBuzB,EAAWve,eAAeI,YAAY1f,EAAI9M,GAAGsJ,KACpCnC,KAAKxE,KAAKmK,EAAI9M,GAAG2G,GAC1Bm3B,EAAU99B,GAAK2qC,EACfhoC,KAAKq7B,eAAel6B,KAAK6mC,IAK7BG,EAAahnC,KAAK6mC,IACA,MAAb79B,EAAI9M,GAAGsJ,KACRshC,GAOAD,EAAW7M,EAAU99B,IACZoX,QAAS,GAPlBuzB,EAAWve,eAAeI,YAAY1f,EAAI9M,GAAGsJ,IAC7Cw0B,EAAU99B,GAAK2qC,EACfA,EAASxjC,KAAKxE,KAAKmK,EAAI9M,EAAE89B,EAAUn3B,GACnChE,KAAKq7B,eAAel6B,KAAK6mC,GACzBF,GAAS,GAKbK,EAAahnC,KAAK6mC,IAEtBhoC,KAAKsjC,oBAAoBn5B,EAAI9M,GAAIA,EAAI,EACzC,CAEA,IADAI,EAAMyqC,EAAUxqC,OACZL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb6qC,EAAU7qC,GAAGoX,QAAS,EAG1B,IADAhX,EAAM0qC,EAAazqC,OACfL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb8qC,EAAa9qC,GAAGoX,QAAS,CAEjC,EAEAumB,cAAcxrB,UAAUg2B,oBAAsB,SAASpuB,GACnD,IAAI/Z,EAAGI,EAAMuC,KAAKq7B,eAAe39B,OACjC,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb2C,KAAKq7B,eAAeh+B,GAAGgqB,SAASjQ,EAExC,EAEA4jB,cAAcxrB,UAAUo4B,gBAAkB,WACtC,GAAI5nC,KAAKq7B,eAAe39B,OAAxB,CAGA,IAAIL,EAAGI,EAAMuC,KAAK+X,OAAOra,OACzB,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb2C,KAAK+X,OAAO1a,GAAGsH,QAMnB,IAAItH,GAFJI,EAAMuC,KAAKq7B,eAAe39B,QAEhB,EAAEL,GAAG,EAAEA,GAAG,EAChB2C,KAAKq7B,eAAeh+B,GAAG2tB,cAAchrB,KAAKW,WAV9C,CAYJ,EAEAq6B,cAAcxrB,UAAU8uB,YAAc,SAAS8J,GAG3C,IAAkB,IADCpoC,KAAKuR,QAAQ+sB,YAAYjtB,KAAKrR,KAAKooC,GACtD,CAIGpoC,KAAKqhC,SACJrhC,KAAKk9B,aAAax+B,MAAMI,QAAU,QAClCkB,KAAKqhC,QAAS,GAElBrhC,KAAK4nC,kBACL,IAAIvqC,EAAGI,EAAMuC,KAAKk7B,WAAWx9B,OAC7B,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb2C,KAAKk7B,WAAW79B,GAAG0C,EAAI,GACvBC,KAAKk7B,WAAW79B,GAAG8iB,KAAM,EAI7B,IAFAngB,KAAKqoC,YAAYroC,KAAKi7B,WAAWj7B,KAAKm7B,UAAW,MAE5C99B,EAAI,EAAGA,EAAII,EAAKJ,GAAK,EACQ,MAA1B2C,KAAKk7B,WAAW79B,GAAGqnC,KACnB1kC,KAAKk7B,WAAW79B,GAAGqnC,GAAK,IACxB1kC,KAAKk7B,WAAW79B,GAAG0nC,MAAMrmC,MAAMI,QAAU,UAGzCkB,KAAKk7B,WAAW79B,GAAG8iB,KAAOngB,KAAKW,cAC/BX,KAAKk7B,WAAW79B,GAAG0nC,MAAMxnB,aAAa,IAAKvd,KAAKk7B,WAAW79B,GAAG0C,GAC3DC,KAAKk7B,WAAW79B,GAAGinC,QAClBtkC,KAAKk7B,WAAW79B,GAAGinC,OAAO/mB,aAAa,IAAKvd,KAAKk7B,WAAW79B,GAAG0C,IAIvEC,KAAKW,aACLX,KAAKW,YAAa,EA3BtB,MAFIX,KAAK6+B,MA+Bb,EAEA7D,cAAcxrB,UAAUqvB,KAAO,WAC3B,IAAI7+B,KAAKqhC,OAAO,CAEZ,IAAIhkC,EACJ,IAFA2C,KAAKk9B,aAAax+B,MAAMI,QAAU,OAE9BzB,EADS2C,KAAKk7B,WAAWx9B,OACnB,EAAEL,GAAG,EAAEA,GAAG,EACa,MAA1B2C,KAAKk7B,WAAW79B,GAAGqnC,KAClB1kC,KAAKk7B,WAAW79B,GAAGqnC,GAAK,IACxB1kC,KAAKk7B,WAAW79B,GAAG0nC,MAAMrmC,MAAMI,QAAU,OACtCkB,KAAKk7B,WAAW79B,GAAG0nC,MAAM7qB,aACxBla,KAAKk7B,WAAW79B,GAAG2T,OAAShR,KAAKk7B,WAAW79B,GAAG0nC,MAAM7qB,aAKjEla,KAAKqhC,QAAS,CAClB,CACJ,EAEArG,cAAcxrB,UAAU64B,YAAc,SAASxZ,EAAMzX,EAAMywB,GACvD,IAAIxqC,EACAsJ,EACJ,IAAItJ,EAFSwxB,EAAMnxB,OAAS,EAElBL,GAAG,EAAEA,GAAG,EAEL,OADTsJ,EAAKkoB,EAAMxxB,GAAGsJ,MAEP3G,KAAKW,YAAcyW,EAAK/Z,GAAGwJ,UAAUszB,GAAGha,KAAO0nB,IAC9CA,EAAUtqB,aAAa,UAAUnG,EAAK/Z,GAAGwJ,UAAUszB,GAAGl4B,IAEvDjC,KAAKW,YAAcyW,EAAK/Z,GAAGwJ,UAAUioB,OAAO3O,KAAO0nB,IAClDA,EAAUtqB,aAAa,YAAYnG,EAAK/Z,GAAGwJ,UAAUioB,OAAO7sB,EAAEyI,YAEvD,MAAN/D,GAAoB,MAANA,GAAoB,MAANA,GAAoB,MAANA,EAC/C3G,KAAKsoC,WAAWzZ,EAAMxxB,GAAG+Z,EAAK/Z,IACnB,MAANsJ,EACL3G,KAAKuoC,WAAW1Z,EAAMxxB,GAAG+Z,EAAK/Z,IACnB,MAANsJ,EACL3G,KAAKwoC,eAAe3Z,EAAMxxB,GAAG+Z,EAAK/Z,IACvB,MAANsJ,GACL3G,KAAKwoC,eAAe3Z,EAAMxxB,GAAG+Z,EAAK/Z,IAClC2C,KAAKyoC,aAAa5Z,EAAMxxB,GAAG+Z,EAAK/Z,KACrB,MAANsJ,EACL3G,KAAKyoC,aAAa5Z,EAAMxxB,GAAG+Z,EAAK/Z,IACrB,MAANsJ,GACL3G,KAAKqoC,YAAYxZ,EAAMxxB,GAAGib,GAAGlB,EAAK/Z,GAAGib,GAAIlB,EAAK/Z,GAAG4nC,GAM7D,EAEAjK,cAAcxrB,UAAUk5B,iBAAmB,SAASpJ,EAAW5hC,EAAQ+W,EAAQkO,GAC3E,IAAItlB,EAAGsrC,EAAc,GACrB,IAAItrC,EAAI,EAAGA,EAAIK,EAAQL,GAAK,EACd,IAANA,IACAsrC,GAAe,KAAOhmB,EAAIrY,wBAAwBg1B,EAAUr9B,EAAE,GAAG,GAAIq9B,EAAUr9B,EAAE,GAAG,KAExF0mC,GAAe,KAAOhmB,EAAIrY,wBAAwBg1B,EAAUz7B,EAAExG,EAAI,GAAG,GAAIiiC,EAAUz7B,EAAExG,EAAI,GAAG,IAAM,IAAMslB,EAAIrY,wBAAwBg1B,EAAUjiC,EAAEA,GAAG,GAAIiiC,EAAUjiC,EAAEA,GAAG,IAAM,IAAMslB,EAAIrY,wBAAwBg1B,EAAUr9B,EAAE5E,GAAG,GAAIiiC,EAAUr9B,EAAE5E,GAAG,IASpP,OAPe,IAAXK,IACAirC,GAAe,KAAOhmB,EAAIrY,wBAAwBg1B,EAAUr9B,EAAE,GAAG,GAAIq9B,EAAUr9B,EAAE,GAAG,KAEpFwS,GAAU/W,IACVirC,GAAe,KAAOhmB,EAAIrY,wBAAwBg1B,EAAUz7B,EAAExG,EAAI,GAAG,GAAIiiC,EAAUz7B,EAAExG,EAAI,GAAG,IAAM,IAAMslB,EAAIrY,wBAAwBg1B,EAAUjiC,EAAE,GAAG,GAAIiiC,EAAUjiC,EAAE,GAAG,IAAM,IAAMslB,EAAIrY,wBAAwBg1B,EAAUr9B,EAAE,GAAG,GAAIq9B,EAAUr9B,EAAE,GAAG,IAChP0mC,GAAe,KAEZA,CACX,EAEA3N,cAAcxrB,UAAU84B,WAAa,SAASjvB,EAASuvB,GACnD,IAAYviC,EAAG6Q,EAAK2xB,EAAsBC,EAAOxJ,EAAU/4B,EAAGwiC,EAAOH,EAASlb,SAAShwB,OACnFinC,EAAMiE,EAASjE,IACnB,GAAItrB,EAAS2U,QAGb,IAAIznB,EAAE,EAAEA,EAAEwiC,EAAKxiC,GAAG,EACd,GAAGqiC,EAASlb,SAASnnB,GAAG6Q,KAAK4W,QAAQ,CACjC8a,EAASF,EAASjpB,GAAGQ,KAAOngB,KAAKW,WACjCkoC,EAAwB,OACxB,IAAI1kC,EAAQykC,EAASjpB,GAAGxb,MAExB,GADA+S,EAAO/S,EAAM0Q,QACV+zB,EAASlb,SAASnnB,GAAGo+B,IAAMA,EAAI,CAI9B,IAHA,IAAgC//B,EAA5B+d,EAAM3iB,KAAK0zB,QAAQ/uB,QACnBqkC,EAAarE,EAAMiE,EAASlb,SAASnnB,GAAGo+B,IACxCr+B,EAAIsiC,EAAStD,aAAa5nC,OAAO,EAC/BsrC,EAAa,GACfF,EAASF,EAAStD,aAAah/B,GAAGwoB,OAAO3O,KAAO2oB,EAChDlkC,EAAQgkC,EAAStD,aAAah/B,GAAGwoB,OAAO7sB,EAAE2C,MAC1C+d,EAAI9b,UAAUjC,EAAM,GAAGA,EAAM,GAAGA,EAAM,GAAGA,EAAM,GAAGA,EAAM,GAAGA,EAAM,GAAGA,EAAM,GAAGA,EAAM,GAAGA,EAAM,GAAGA,EAAM,GAAGA,EAAM,IAAIA,EAAM,IAAIA,EAAM,IAAIA,EAAM,IAAIA,EAAM,IAAIA,EAAM,KAChKokC,IACA1iC,IAEJ,GAAGwiC,EAAO,CACN,IAAIziC,EAAE,EAAEA,EAAE6Q,EAAK7Q,GAAG,GACdi5B,EAAYn7B,EAAM4T,OAAO1R,KACTi5B,EAAUzqB,UACtBg0B,GAAyB7oC,KAAK0oC,iBAAiBpJ,EAAWA,EAAUzqB,QAASyqB,EAAUz/B,EAAG8iB,IAGlGimB,EAASvD,OAAO9+B,GAAKsiC,CACzB,MACIA,EAAwBD,EAASvD,OAAO9+B,EAEhD,MACI,GAAGuiC,EAAO,CACN,IAAIziC,EAAE,EAAEA,EAAE6Q,EAAK7Q,GAAG,GACdi5B,EAAYn7B,EAAM4T,OAAO1R,KACTi5B,EAAUzqB,UACtBg0B,GAAyB7oC,KAAK0oC,iBAAiBpJ,EAAWA,EAAUzqB,QAASyqB,EAAUz/B,EAAGG,KAAKkjC,iBAGvG0F,EAASvD,OAAO9+B,GAAKsiC,CACzB,MACIA,EAAwBD,EAASvD,OAAO9+B,GAGhDqiC,EAASlb,SAASnnB,GAAGxG,GAAK8oC,EAC1BD,EAASlb,SAASnnB,GAAG4Z,IAAM2oB,GAAUF,EAASlb,SAASnnB,GAAG4Z,GAC9D,MACIyoB,EAASlb,SAASnnB,GAAG4Z,KAAM,CAGvC,EAEA6a,cAAcxrB,UAAU+4B,WAAa,SAASU,EAAUL,GACpD,IAAIM,EAAYN,EAASlqC,OAEtBkqC,EAAS/oC,EAAEsgB,KAAOngB,KAAKW,aACtBuoC,EAAUnE,MAAMxnB,aAAa,OAAO,OAAO3gB,SAASgsC,EAAS/oC,EAAEoC,EAAE,IAAI,IAAIrF,SAASgsC,EAAS/oC,EAAEoC,EAAE,IAAI,IAAIrF,SAASgsC,EAAS/oC,EAAEoC,EAAE,IAAI,MAGlI2mC,EAAS/kC,EAAEsc,KAAOngB,KAAKW,aACtBuoC,EAAUnE,MAAMxnB,aAAa,eAAeqrB,EAAS/kC,EAAE5B,EAE/D,EAEA+4B,cAAcxrB,UAAUg5B,eAAiB,SAASS,EAAUL,GACxD,IAmBI9E,EAAOzmC,EAAGI,EAAKomC,EA+BX3b,EAlDJyb,EAAQiF,EAAS7E,GACjBI,EAASyE,EAASrW,GAClB/f,EAAMo2B,EAAS5mC,EAAEC,EAAEwQ,EAAMm2B,EAASxiC,EAAEnE,EAExC,GAAG2mC,EAAS/kC,EAAEsc,KAAOngB,KAAKW,WAAW,CACjC,IAAIgR,EAAwB,OAAjBs3B,EAAUtiC,GAAc,eAAe,iBAClDiiC,EAAS5oB,KAAKzC,aAAa5L,EAAKi3B,EAAS/kC,EAAE5B,EAC/C,CAEA,GAAG2mC,EAAS5mC,EAAEme,KAAOngB,KAAKW,WAAW,CACjC,IAAIwoC,EAAwB,IAAhBF,EAAUnpC,EAAU,KAAK,KACjCspC,EAAkB,OAAVD,EAAiB,KAAK,KAClCxF,EAAMpmB,aAAa4rB,EAAM32B,EAAI,IAC7BmxB,EAAMpmB,aAAa6rB,EAAM52B,EAAI,IAC1B2xB,IACCA,EAAO5mB,aAAa4rB,EAAM32B,EAAI,IAC9B2xB,EAAO5mB,aAAa6rB,EAAM52B,EAAI,IAEtC,CAEA,GAAGo2B,EAASzmC,EAAE0hB,MAAQ7jB,KAAKW,WAAW,CAClCmjC,EAAQ8E,EAAS5E,IACjB,IAAIqF,EAAUT,EAASzmC,EAAEtC,EAEzB,IADApC,EAAMqmC,EAAMpmC,OACRL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,GACbwmC,EAAOC,EAAMzmC,IACRkgB,aAAa,SAAS8rB,EAAU,EAAFhsC,GAAK,KACxCwmC,EAAKtmB,aAAa,aAAa,OAAO8rB,EAAU,EAAFhsC,EAAI,GAAG,IAAIgsC,EAAU,EAAFhsC,EAAI,GAAG,IAAIgsC,EAAU,EAAFhsC,EAAI,GAAG,IAEnG,CACA,GAAG8mC,IAAWyE,EAASzmC,EAAE2hB,MAAQ9jB,KAAKW,YAAY,CAC9CmjC,EAAQ8E,EAASvE,IACjB,IAAIiF,EAAUV,EAASzmC,EAAE0B,EAEzB,IADApG,EAAMqmC,EAAMpmC,OACRL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,GACbwmC,EAAOC,EAAMzmC,IACRkgB,aAAa,SAAS+rB,EAAU,EAAFjsC,GAAK,KACxCwmC,EAAKtmB,aAAa,eAAe+rB,EAAU,EAAFjsC,EAAI,GAErD,CACA,GAAmB,IAAhB4rC,EAAUnpC,GACN8oC,EAASxiC,EAAE+Z,KAAQngB,KAAKW,cACvBgjC,EAAMpmB,aAAa,KAAK9K,EAAI,IAC5BkxB,EAAMpmB,aAAa,KAAK9K,EAAI,IACzB0xB,IACCA,EAAO5mB,aAAa,KAAK9K,EAAI,IAC7B0xB,EAAO5mB,aAAa,KAAK9K,EAAI,WAYrC,IAPGm2B,EAAS5mC,EAAEme,KAAOyoB,EAASxiC,EAAE+Z,KAAOngB,KAAKW,cACxCunB,EAAM/rB,KAAKM,KAAKN,KAAKI,IAAIiW,EAAI,GAAGC,EAAI,GAAG,GAAGtW,KAAKI,IAAIiW,EAAI,GAAGC,EAAI,GAAG,IACjEkxB,EAAMpmB,aAAa,IAAI2K,GACpBic,GACCA,EAAO5mB,aAAa,IAAI2K,IAG7B0gB,EAASxiC,EAAE+Z,KAAOyoB,EAAS7mC,EAAEoe,KAAOyoB,EAASziC,EAAEga,KAAOngB,KAAKW,WAAW,CACjEunB,IACAA,EAAM/rB,KAAKM,KAAKN,KAAKI,IAAIiW,EAAI,GAAGC,EAAI,GAAG,GAAGtW,KAAKI,IAAIiW,EAAI,GAAGC,EAAI,GAAG,KAErE,IAAI82B,EAAMptC,KAAKinB,MAAM3Q,EAAI,GAAGD,EAAI,GAAIC,EAAI,GAAGD,EAAI,IAG3Cg3B,EAAOthB,GADG0gB,EAAS7mC,EAAEE,GAAK,EAAI,IAAO2mC,EAAS7mC,EAAEE,IAAM,GAAK,IAAK2mC,EAAS7mC,EAAEE,GAE3EoH,EAAIlN,KAAK6I,IAAIukC,EAAMX,EAASziC,EAAElE,GAAGunC,EAAOh3B,EAAI,GAC5ClJ,EAAInN,KAAK+I,IAAIqkC,EAAMX,EAASziC,EAAElE,GAAGunC,EAAOh3B,EAAI,GAChDmxB,EAAMpmB,aAAa,KAAKlU,GACxBs6B,EAAMpmB,aAAa,KAAKjU,GACrB66B,IACCA,EAAO5mB,aAAa,KAAKlU,GACzB86B,EAAO5mB,aAAa,KAAKjU,GAEjC,CAGR,EAEA0xB,cAAcxrB,UAAUi5B,aAAe,SAASQ,EAAUL,GACtD,IAAIM,EAAYN,EAASlqC,MAErBqB,EAAI6oC,EAAS7oC,EAEdA,GAAKA,EAAEuG,IAAMvG,EAAEogB,KAAOngB,KAAKW,cAC1BuoC,EAAUnE,MAAMxnB,aAAa,mBAAoBxd,EAAEqkB,WAEnD8kB,EAAUnE,MAAMxnB,aAAa,oBAAqBxd,EAAEskB,aAGrDukB,EAAS/oC,IAAM+oC,EAAS/oC,EAAEsgB,KAAOngB,KAAKW,aACrCuoC,EAAUnE,MAAMxnB,aAAa,SAAS,OAAO3gB,SAASgsC,EAAS/oC,EAAEoC,EAAE,IAAI,IAAIrF,SAASgsC,EAAS/oC,EAAEoC,EAAE,IAAI,IAAIrF,SAASgsC,EAAS/oC,EAAEoC,EAAE,IAAI,MAGpI2mC,EAAS/kC,EAAEsc,KAAOngB,KAAKW,aACtBuoC,EAAUnE,MAAMxnB,aAAa,iBAAiBqrB,EAAS/kC,EAAE5B,IAE1D2mC,EAAS7tB,EAAEoF,KAAOngB,KAAKW,cACtBuoC,EAAUnE,MAAMxnB,aAAa,eAAeqrB,EAAS7tB,EAAE9Y,GACpDinC,EAAU5E,QACT4E,EAAU5E,OAAO/mB,aAAa,eAAeqrB,EAAS7tB,EAAE9Y,GAIpE,EAEA+4B,cAAcxrB,UAAUuuB,QAAU,WAC9B/9B,KAAKuR,QAAQwsB,QAAQ1sB,KAAKrR,KAAKuR,SAC/BvR,KAAKwU,UAAY,KACjBxU,KAAKm7B,UAAY,KACjBn7B,KAAK06B,gBAAkB,KACvB16B,KAAK26B,YAAc,IACvB,EAIA8K,aAAaj2B,UAAUhL,KAAO,WAC1BxE,KAAKyxB,oBAAqB,EAC1BzxB,KAAKgE,kBAAoBhE,KAAKgE,mBAAqB,GACnDhE,KAAKypC,aAAe,IAAI/Y,qBAAqB1wB,KAAKoX,KAAKtX,EAAGE,KAAK4wB,WAAY5wB,MAC3EA,KAAK0kB,aAAe,IAAImN,aAAa7xB,KAAMA,KAAKoX,KAAKtX,EAAGE,KAAKgE,mBAC7DhE,KAAKuR,QAAQ/M,KAAK6M,KAAKrR,MACvBA,KAAKypC,aAAa5W,iBAAiB7yB,KAAKgE,kBAC5C,EAEAyhC,aAAaj2B,UAAUgvB,aAAe,SAASz6B,GAC3C/D,KAAKuR,QAAQitB,aAAantB,KAAKrR,KAAM+D,IAClC/D,KAAK0kB,aAAavE,KAAOngB,KAAK0kB,aAAa/jB,cAC1CX,KAAK0pC,eACL1pC,KAAK0kB,aAAa/jB,YAAa,EAEvC,EAEA8kC,aAAaj2B,UAAUm6B,gBAAkB,SAASlW,EAAc1b,GAC5D,IAAI1R,EACSi5B,EADPpoB,EAAOa,EAAOra,OAEhBksC,EAAW,GACf,IAAIvjC,EAAE,EAAEA,EAAE6Q,EAAK7Q,GAAG,EACdi5B,EAAYvnB,EAAO1R,GAAGgS,GAAG/R,EACzBsjC,GAAY5pC,KAAK0oC,iBAAiBpJ,EAAWA,EAAUjiC,EAAEK,QAAQ,EAAM+1B,GAE3E,OAAOmW,CACX,EAEAnE,aAAaj2B,UAAUooB,mBAAqB,SAASC,EAASnL,GAC1D1sB,KAAK0kB,aAAakT,mBAAmBC,EAASnL,EAClD,EAEA+Y,aAAaj2B,UAAUq6B,4BAA8B,SAAS5wB,EAAcwa,EAAcqW,EAAYxW,EAAMC,GAKxG,OAJGta,EAAa+c,IACZvC,EAAahtB,UAAUwS,EAAa+c,GAAG,GAAG/c,EAAa+c,GAAG,GAAK/c,EAAa8Y,OAAO,GAEvF0B,EAAahtB,UAAU,GAAGwS,EAAaqZ,GAAG,GACnCrZ,EAAa5S,GAChB,KAAK,EACDotB,EAAahtB,UAAUwS,EAAakZ,eAAiBlZ,EAAa+Y,SAAW/Y,EAAaoZ,WAAWyX,IAAa,EAAE,GACpH,MACJ,KAAK,EACDrW,EAAahtB,UAAUwS,EAAakZ,eAAiBlZ,EAAa+Y,SAAW/Y,EAAaoZ,WAAWyX,IAAc,EAAE,EAAE,GAG/HrW,EAAahtB,UAAU6sB,EAAMC,EAAM,EACvC,EAEAkS,aAAaj2B,UAAUu6B,WAAa,SAASC,GACzC,MAAO,OAAS7tC,KAAKC,MAAmB,IAAb4tC,EAAU,IAAU,IAAM7tC,KAAKC,MAAmB,IAAb4tC,EAAU,IAAU,IAAM7tC,KAAKC,MAAmB,IAAb4tC,EAAU,IAAU,GAC7H,EAEAvE,aAAaj2B,UAAUk5B,iBAAmB1N,cAAcxrB,UAAUk5B,iBAElEjD,aAAaj2B,UAAUy6B,UAAY,IAAIvY,YAEvC+T,aAAaj2B,UAAUuuB,QAAU,WAC7B/9B,KAAKuR,QAAQwsB,QAAQ1sB,KAAKrR,KAAKuR,QACnC,EAMAR,cAAc0pB,eAAgB0C,gBAE9B3rB,gBAAgBi0B,aAActI,gBAE9BA,eAAe3tB,UAAUmyB,eAAiB,WAEtC3hC,KAAKuR,QAAQowB,eAAetwB,KAAKrR,MAG9BA,KAAKoX,KAAKsrB,IACT1iC,KAAKk9B,aAAa3f,aAAa,KAAKvd,KAAKoX,KAAKsrB,IAE/C1iC,KAAKoX,KAAKsC,IACT1Z,KAAKk9B,aAAa3f,aAAa,QAAQvd,KAAKoX,KAAKsC,IAEjD1Z,KAAKoX,KAAKY,cAAgBhY,KAAKigB,WAAWjJ,YAAYrV,QACtD3B,KAAKkqC,cAAgB/vB,SAASiC,gBAAgB3gB,MAAM,QAE5D,EAEA0hC,eAAe3tB,UAAUk6B,aAAe,WACpC,IAAIrsC,EAAGI,EAEHwb,EAAejZ,KAAK0kB,aAAaC,YACrC3kB,KAAKwxB,gBAAkB1zB,MAAMC,MAAM,KAAK,CAACL,OAAOub,EAAeA,EAAa1S,EAAE7I,OAAS,IACpFub,EAAa2Y,GACZ5xB,KAAKk9B,aAAa3f,aAAa,OAAQvd,KAAK+pC,WAAW9wB,EAAa2Y,KAEpE5xB,KAAKk9B,aAAa3f,aAAa,OAAQ,iBAExCtE,EAAaqE,KACZtd,KAAKk9B,aAAa3f,aAAa,SAAUvd,KAAK+pC,WAAW9wB,EAAaqE,KACtEtd,KAAKk9B,aAAa3f,aAAa,eAAgBtE,EAAa0Y,KAEhE3xB,KAAKk9B,aAAa3f,aAAa,YAAatE,EAAajX,GACzD,IAAIka,EAAWlc,KAAKigB,WAAWjJ,YAAY2G,cAAc1E,EAAavY,GACtE,GAAGwb,EAASK,OACRvc,KAAKk9B,aAAa3f,aAAa,QAAQrB,EAASK,YAC7C,CACHvc,KAAKk9B,aAAa3f,aAAa,cAAerB,EAASG,SACvD,IAAI6V,EAAUjZ,EAAaiZ,QAASD,EAAShZ,EAAagZ,OAC1DjyB,KAAKk9B,aAAa3f,aAAa,aAAc0U,GAC7CjyB,KAAKk9B,aAAa3f,aAAa,cAAe2U,EAClD,CAEA,IAAI0B,EAAU3a,EAAa1S,GAAK,GAC5B4jC,EAAanqC,KAAKigB,WAAWjJ,YAAYrV,MAE7C,GADAlE,EAAMm2B,EAAQl2B,OACd,CAGA,IAAI0sC,EAEAryB,EADA0b,EAAezzB,KAAK0zB,QACZkW,EAAW,GAAI5xB,EAAchY,KAAKoX,KAAKY,YAC/Csb,EAAO,EAAGC,EAAO,EAAGiB,GAAY,EAChCwC,EAAiB/d,EAAarV,GAAG,IAAKqV,EAAajX,EACvD,GAAGgW,IAAgBmyB,EAAY,CAC3B,IAAIE,EAAWrqC,KAAKkqC,cAChBI,EAAU,GACd,OAAOrxB,EAAa5S,GAChB,KAAK,EACDikC,EAAU,MACV,MACJ,KAAK,EACDA,EAAU,SACV,MACJ,KAAK,EACDA,EAAU,QAGlBD,EAAS9sB,aAAa,cAAc+sB,GACpCD,EAAS9sB,aAAa,iBAAiByZ,GACvC,IAAI1a,EAAcrD,EAAanZ,EAAE8Y,MAAMpM,OAAOC,aAAa,KAG3D,IAFAhP,EAAM6e,EAAY5e,OACd61B,EAAOta,EAAa+c,GAAK/c,EAAa+c,GAAG,GAAK/c,EAAa8Y,OAAS,EAClE10B,EAAI,EAAGA,EAAII,EAAKJ,GAAK,GACvB+sC,EAAQpqC,KAAK0lC,UAAUroC,IAAM8c,SAASiC,gBAAgB3gB,MAAM,UACtD6gB,YAAcA,EAAYjf,GAChC+sC,EAAM7sB,aAAa,IAAK,GACxB6sB,EAAM7sB,aAAa,IAAKgW,GACxB6W,EAAM1rC,MAAMI,QAAU,UACtBurC,EAASzvB,YAAYwvB,GACrBpqC,KAAK0lC,UAAUroC,GAAK+sC,EACpB7W,GAAQta,EAAamZ,GAGzBpyB,KAAKk9B,aAAatiB,YAAYyvB,EAClC,KAAO,CACH,IACI71B,EAAWgiB,EADX+T,EAAoBvqC,KAAK0lC,UAAUhoC,OAEvC,IAAKL,EAAI,EAAGA,EAAII,EAAKJ,GAAK,EAClB8sC,GAAenyB,GAAqB,IAAN3a,IAC9B+sC,EAAQG,EAAoBltC,EAAI2C,KAAK0lC,UAAUroC,GAAK8c,SAASiC,gBAAgB3gB,MAAM0uC,EAAW,OAAO,QACjGI,GAAqBltC,IACrB+sC,EAAM7sB,aAAa,iBAAkB,QACrC6sB,EAAM7sB,aAAa,kBAAkB,SACrC6sB,EAAM7sB,aAAa,oBAAoB,KACvCvd,KAAK0lC,UAAUroC,GAAK+sC,EACpBpqC,KAAKk9B,aAAatiB,YAAYwvB,IAElCA,EAAM1rC,MAAMI,QAAU,WAG1B20B,EAAa9uB,QACVwlC,GACC1W,EAAa1tB,MAAMkT,EAAajX,EAAI,IAAKiX,EAAajX,EAAI,KACtDgW,IACG4b,EAAQv2B,GAAGuC,IACV0zB,GAAQ0D,EACRzD,GAAQta,EAAa0Z,QACrBY,GAAQiB,EAAY,EAAI,EACxBA,GAAY,GAEhBx0B,KAAK6pC,4BAA4B5wB,EAAcwa,EAAcG,EAAQv2B,GAAGm4B,KAAMlC,EAAMC,GACpFD,GAAQM,EAAQv2B,GAAGkJ,GAAK,EAExB+sB,GAAQ0D,GAIZjf,GADAvD,GADAgiB,EAAWx2B,KAAKigB,WAAWjJ,YAAYyG,YAAYxE,EAAanZ,EAAEo3B,OAAO75B,GAAI6e,EAAS+V,OAAQjyB,KAAKigB,WAAWjJ,YAAY2G,cAAc1E,EAAavY,GAAG2b,WAChIma,EAASpf,MAAQ,CAAC,GACvBW,OAASvD,EAAUuD,OAAO,GAAGO,GAAK,GACjDN,EAGA4xB,GAAY5pC,KAAK2pC,gBAAgBlW,EAAa1b,GAF9CqyB,EAAM7sB,aAAa,IAAIvd,KAAK2pC,gBAAgBlW,EAAa1b,MAK7DqyB,EAAM9tB,YAAcsX,EAAQv2B,GAAGO,IAC/BwsC,EAAMI,eAAe,uCAAwC,YAAY,aAI7ExyB,GACAoyB,EAAM7sB,aAAa,IAAIqsB,EAE/B,CACA,KAAOvsC,EAAI2C,KAAK0lC,UAAUhoC,QACtBsC,KAAK0lC,UAAUroC,GAAGqB,MAAMI,QAAU,OAClCzB,GAAK,EAGT2C,KAAK+6B,cAAe,CA3FpB,CA4FJ,EAEAoC,eAAe3tB,UAAUyyB,iBAAmB,SAASwI,GAGjD,GAFAzqC,KAAKw+B,aAAax+B,KAAKogB,KAAKC,cAAgBrgB,KAAKoX,KAAKiK,IACtDrhB,KAAK0qC,gBACF1qC,KAAK+6B,aAAa,CACjB/6B,KAAK+6B,cAAe,EACpB,IAAI4P,EAAU3qC,KAAKk9B,aAAa0N,UAChC5qC,KAAK6qC,KAAO,CACRjsC,IAAK+rC,EAAQrhC,EACbzK,KAAM8rC,EAAQthC,EACd0B,MAAO4/B,EAAQ5/B,MACf0yB,OAAQkN,EAAQlN,OAExB,CACA,OAAOz9B,KAAK6qC,IAChB,EAEA1N,eAAe3tB,UAAUk7B,cAAgB,WAErC,IAAI1qC,KAAKoX,KAAKY,cACVhY,KAAKypC,aAAapW,YAAYrzB,KAAK0kB,aAAaC,YAAa3kB,KAAKyxB,oBAC/DzxB,KAAKyxB,oBAAsBzxB,KAAKypC,aAAahY,oBAAmB,CAE/D,IAAKp0B,EAAEI,EADPuC,KAAK+6B,cAAe,EAEpB,IAKI+P,EAAgBC,EALhBvZ,EAAkBxxB,KAAKypC,aAAajY,gBAEpCoC,EAAU5zB,KAAK0kB,aAAaC,YAAYpe,EAI5C,IAFA9I,EAAMm2B,EAAQl2B,OAEVL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACVu2B,EAAQv2B,GAAGuC,IAGdkrC,EAAiBtZ,EAAgBn0B,GACjC0tC,EAAW/qC,KAAK0lC,UAAUroC,GACvBytC,EAAe3qB,IAAI3Z,GAClBukC,EAASxtB,aAAa,YAAYutB,EAAetkC,GAElDskC,EAAe3qB,IAAItc,GAClBknC,EAASxtB,aAAa,UAAUutB,EAAejnC,GAEhDinC,EAAe3qB,IAAIwR,IAClBoZ,EAASxtB,aAAa,eAAeutB,EAAenZ,IAErDmZ,EAAe3qB,IAAI7C,IAClBytB,EAASxtB,aAAa,SAASutB,EAAextB,IAE/CwtB,EAAe3qB,IAAIyR,IAClBmZ,EAASxtB,aAAa,OAAOutB,EAAelZ,IAGxD,CAER,EAEAuL,eAAe3tB,UAAU8uB,YAAc,SAAS8J,IAG1B,IADCpoC,KAAKuR,QAAQ+sB,YAAYjtB,KAAKrR,KAAKooC,IAKnDpoC,KAAKqhC,QACJrhC,KAAK8+B,OAEN9+B,KAAKW,aACJX,KAAKW,YAAa,GAEtBX,KAAK0qC,iBATD1qC,KAAK6+B,MAUb,EA6BA8G,cAAcn2B,UAAU8uB,YAAc,SAAS1a,GAC3C,GAAGA,GAAe5jB,KAAK6lC,cAAc1lB,IAAI,CACrC,IAAI6qB,EAAahrC,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAEJ,EACpDgpC,EAAajrC,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAEJ,EACpDw/B,EAAUzhC,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAEJ,EAAE,IACvDjC,KAAK8lC,aAAavoB,aAAa,SAAU0tB,EAAW,GAAID,EAAW,GAAI,UAAWA,EAAW,GAAI,KAAMC,EAAW,GAAID,EAAW,IAAK,UAAWA,EAAW,GAAI,KAAMC,EAAW,GAAID,EAAW,IAAK,UAAWA,EAAW,GAAI,UAAYvJ,EAAU,KACzP,CACJ,EAUAyE,cAAc12B,UAAU8uB,YAAc,SAAS1a,GAC3C,GAAGA,GAAe5jB,KAAK6lC,cAAc1lB,IAAI,CACrC,IAAIzd,EAAQ1C,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAEJ,EAC/Cw/B,EAAUzhC,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAEJ,EACrDjC,KAAK8lC,aAAavoB,aAAa,SAAS,WAAW7a,EAAM,GAAG,YAAYA,EAAM,GAAG,YAAYA,EAAM,GAAG,UAAU++B,EAAQ,KAC5H,CACJ,EAQA0E,gBAAgB32B,UAAU07B,WAAa,WAEnC,IACI3yB,EAAK4yB,EAAW9tC,EAAGI,EADnB2tC,EAAeprC,KAAKggB,KAAKkd,aAAamO,UAAYrrC,KAAKggB,KAAKkd,aAAaoO,WAa7E,IAXgD,IAA7CtrC,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAEJ,GACtCxE,EAAMuC,KAAKggB,KAAKmT,YAAYzb,gBAAgBha,OAC5CL,EAAI,GAGJI,EAAU,GADVJ,EAAI2C,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAEJ,EAAI,IAGnDkpC,EAAYhxB,SAASiC,gBAAgB3gB,MAAM,MACjC8hB,aAAa,OAAO,QAC9B4tB,EAAU5tB,aAAa,iBAAiB,SACxC4tB,EAAU5tB,aAAa,oBAAoB,GACrClgB,EAAEI,EAAIJ,GAAG,EACXkb,EAAO4B,SAASiC,gBAAgB3gB,MAAM,QACtC0vC,EAAUvwB,YAAYrC,GACtBvY,KAAKmE,MAAMhD,KAAK,CAACkB,EAAEkW,EAAK/R,EAAEnJ,IAE9B,GAAiD,IAA9C2C,KAAK6lC,cAAcE,eAAe,IAAI1jC,EAAEJ,EAAQ,CAC/C,IAAImJ,EAAO+O,SAASiC,gBAAgB3gB,MAAM,QACtC+a,EAAK,QAAU9U,aAAa,IAChC0J,EAAKmS,aAAa,KAAK/G,GACvBpL,EAAKmS,aAAa,YAAY,SAC9BnS,EAAKwP,YAAYuwB,GACjBnrC,KAAKggB,KAAKC,WAAWjD,KAAKpC,YAAYxP,GACtC,IAAIjJ,EAAIgY,SAASiC,gBAAgB3gB,MAAM,KACvC0G,EAAEob,aAAa,OAAO,OAAS7hB,aAAe,IAAI8a,EAAG,KAClD40B,EAAa,IACZjpC,EAAEyY,YAAYwwB,EAAa,IAE/BprC,KAAKggB,KAAKkd,aAAatiB,YAAYzY,GACnCnC,KAAKmiC,OAAS/2B,EACd+/B,EAAU5tB,aAAa,SAAS,OACpC,MAAO,GAAiD,IAA9Cvd,KAAK6lC,cAAcE,eAAe,IAAI1jC,EAAEJ,GAAyD,IAA9CjC,KAAK6lC,cAAcE,eAAe,IAAI1jC,EAAEJ,EAAQ,CACzG,GAAiD,IAA9CjC,KAAK6lC,cAAcE,eAAe,IAAI1jC,EAAEJ,EAEvC,IADImpC,EAAeprC,KAAKggB,KAAKkd,aAAamO,UAAYrrC,KAAKggB,KAAKkd,aAAaoO,WACvEF,EAAa1tC,QACfsC,KAAKggB,KAAKkd,aAAarhB,YAAYuvB,EAAa,IAGxDprC,KAAKggB,KAAKkd,aAAatiB,YAAYuwB,GACnCnrC,KAAKggB,KAAKkd,aAAaqO,gBAAgB,QACvCJ,EAAU5tB,aAAa,SAAS,OACpC,CACAvd,KAAKomC,aAAc,EACnBpmC,KAAKwrC,WAAaL,CACtB,EAEAhF,gBAAgB32B,UAAU8uB,YAAc,SAAS1a,GACzC5jB,KAAKomC,aACLpmC,KAAKkrC,aAET,IAAI7tC,EACA+N,EAAMmN,EADH9a,EAAMuC,KAAKmE,MAAMzG,OAExB,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EAMb,GALA+N,EAAOpL,KAAKggB,KAAKmT,YAAY8F,SAASj5B,KAAKmE,MAAM9G,GAAGmJ,GACpD+R,EAAOvY,KAAKmE,MAAM9G,GAAGgF,GAClBuhB,GAAe5jB,KAAK6lC,cAAc1lB,KAAO/U,EAAKY,KAAKmU,MAClD5H,EAAKgF,aAAa,IAAInS,EAAKyuB,UAE5BjW,GAAe5jB,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAE8d,KAAOngB,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAE8d,KAAOngB,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAE8d,KAAOngB,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAE8d,KAAO/U,EAAKY,KAAKmU,IAAI,CACpN,IAAIsrB,EACJ,GAAgD,IAA7CzrC,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAEJ,GAAwD,MAA7CjC,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAEJ,EAAU,CAClG,IAAID,EAAI7F,KAAKc,IAAI+C,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAEJ,EAAEjC,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAEJ,GAAG,IAChGmE,EAAIjK,KAAKY,IAAIiD,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAEJ,EAAEjC,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAEJ,GAAG,IAChGsE,EAAIgS,EAAKmzB,iBACbD,EAAiB,SAAWllC,EAAEvE,EAAI,IAClC,IAGIqE,EAHAslC,EAAaplC,GAAGH,EAAEpE,GAClBgqB,EAAU,EAA2C,EAAzChsB,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAEJ,EAAIjC,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAEJ,EAAE,IAChG2pC,EAAQzvC,KAAKU,MAAM8uC,EAAW3f,GAElC,IAAI3lB,EAAE,EAAEA,EAAEulC,EAAMvlC,GAAG,EACfolC,GAAkB,KAAgD,EAAzCzrC,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAEJ,EAAIjC,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAEJ,EAAE,IAAM,IAEvHwpC,GAAkB,KAAS,GAAFllC,EAAO,MACpC,MACIklC,EAAiB,KAAgD,EAAzCzrC,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAEJ,EAAIjC,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAEJ,EAAE,IAEhHsW,EAAKgF,aAAa,mBAAmBkuB,EACzC,CASJ,IAPG7nB,GAAe5jB,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAE8d,MACrDngB,KAAKwrC,WAAWjuB,aAAa,eAAwD,EAAzCvd,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAEJ,IAGpF2hB,GAAe5jB,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAE8d,MACrDngB,KAAKwrC,WAAWjuB,aAAa,UAAUvd,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAEJ,IAEjC,IAA9CjC,KAAK6lC,cAAcE,eAAe,IAAI1jC,EAAEJ,GAAyD,IAA9CjC,KAAK6lC,cAAcE,eAAe,IAAI1jC,EAAEJ,KACvF2hB,GAAe5jB,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAE8d,KAAI,CACzD,IAAIzd,EAAQ1C,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAEJ,EACnDjC,KAAKwrC,WAAWjuB,aAAa,SAAS,OAAO3gB,SAAkB,IAAT8F,EAAM,IAAQ,IAAI9F,SAAkB,IAAT8F,EAAM,IAAQ,IAAI9F,SAAkB,IAAT8F,EAAM,IAAQ,IAC9H,CAER,EA2BA2jC,iBAAiB72B,UAAU8uB,YAAc,SAAS1a,GAC9C,GAAGA,GAAe5jB,KAAK6lC,cAAc1lB,IAAI,CACrC,IAAI0rB,EAAS7rC,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAEJ,EAChD6pC,EAAS9rC,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAEJ,EAChD8pC,EAAS/rC,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAEJ,EAChD+pC,EAASD,EAAO,GAAK,IAAMD,EAAO,GAAK,IAAMD,EAAO,GACpDI,EAASF,EAAO,GAAK,IAAMD,EAAO,GAAK,IAAMD,EAAO,GACpDK,EAASH,EAAO,GAAK,IAAMD,EAAO,GAAK,IAAMD,EAAO,GACxD7rC,KAAKumC,QAAQhpB,aAAa,cAAeyuB,GACzChsC,KAAKwmC,QAAQjpB,aAAa,cAAe0uB,GACzCjsC,KAAKymC,QAAQlpB,aAAa,cAAe2uB,EAG7C,CACJ,EAoCAxF,mBAAmBl3B,UAAUm3B,aAAe,SAAS1mC,EAAMqmC,GACvD,IAAI6F,EAAShyB,SAASiC,gBAAgB3gB,MAAMwE,GAG5C,OAFAksC,EAAO5uB,aAAa,OAAO,SAC3B+oB,EAAoB1rB,YAAYuxB,GACzBA,CACX,EAEAzF,mBAAmBl3B,UAAU48B,cAAgB,SAASC,EAAYC,EAAYC,EAAOC,EAAaC,GAW9F,IAVA,IAEI55B,EAIA65B,EANAjoC,EAAM,EAGNxH,EAAMd,KAAKc,IAAIovC,EAAYC,GAC3BvvC,EAAMZ,KAAKY,IAAIsvC,EAAYC,GAC3BK,EAAQ7uC,MAAMuT,KAAK,KAAK,CAAC3T,OAJd,MAMXooB,EAAM,EACN8mB,EAAcH,EAAcD,EAC5BK,EAAaP,EAAaD,EACxB5nC,GAAO,KAGLioC,GAFJ75B,EAAOpO,EAAI,MACAxH,EACM4vC,EAAa,EAAIJ,EAAcD,EACtC35B,GAAQ9V,EACD8vC,EAAa,EAAIL,EAAcC,EAE9BD,EAAcI,EAAczwC,KAAKI,KAAKsW,EAAOw5B,GAAcQ,EAAY,EAAIN,GAE7FI,EAAM7mB,KAAS4mB,EACfjoC,GAAO,IAAI,IAEf,OAAOkoC,EAAMjpC,KAAK,IACtB,EAEAgjC,mBAAmBl3B,UAAU8uB,YAAc,SAAS1a,GAChD,GAAGA,GAAe5jB,KAAK6lC,cAAc1lB,IAAI,CACrC,IAAIviB,EACAmoC,EAAiB/lC,KAAK6lC,cAAcE,eACrC/lC,KAAK6mC,kBAAoBjjB,GAAemiB,EAAe,GAAG1jC,EAAE8d,KAAO4lB,EAAe,GAAG1jC,EAAE8d,KAAO4lB,EAAe,GAAG1jC,EAAE8d,KAAO4lB,EAAe,GAAG1jC,EAAE8d,KAAO4lB,EAAe,GAAG1jC,EAAE8d,OACvKviB,EAAMoC,KAAKosC,cAAcrG,EAAe,GAAG1jC,EAAEJ,EAAE8jC,EAAe,GAAG1jC,EAAEJ,EAAE8jC,EAAe,GAAG1jC,EAAEJ,EAAE8jC,EAAe,GAAG1jC,EAAEJ,EAAE8jC,EAAe,GAAG1jC,EAAEJ,GACrIjC,KAAK6mC,gBAAgBtpB,aAAa,cAAc3f,GAChDoC,KAAK8mC,gBAAgBvpB,aAAa,cAAc3f,GAChDoC,KAAK+mC,gBAAgBxpB,aAAa,cAAc3f,IAGjDoC,KAAKumC,UAAY3iB,GAAemiB,EAAe,GAAG1jC,EAAE8d,KAAO4lB,EAAe,IAAI1jC,EAAE8d,KAAO4lB,EAAe,IAAI1jC,EAAE8d,KAAO4lB,EAAe,IAAI1jC,EAAE8d,KAAO4lB,EAAe,IAAI1jC,EAAE8d,OACnKviB,EAAMoC,KAAKosC,cAAcrG,EAAe,GAAG1jC,EAAEJ,EAAE8jC,EAAe,IAAI1jC,EAAEJ,EAAE8jC,EAAe,IAAI1jC,EAAEJ,EAAE8jC,EAAe,IAAI1jC,EAAEJ,EAAE8jC,EAAe,IAAI1jC,EAAEJ,GACzIjC,KAAKumC,QAAQhpB,aAAa,cAAc3f,IAGzCoC,KAAKwmC,UAAY5iB,GAAemiB,EAAe,IAAI1jC,EAAE8d,KAAO4lB,EAAe,IAAI1jC,EAAE8d,KAAO4lB,EAAe,IAAI1jC,EAAE8d,KAAO4lB,EAAe,IAAI1jC,EAAE8d,KAAO4lB,EAAe,IAAI1jC,EAAE8d,OACpKviB,EAAMoC,KAAKosC,cAAcrG,EAAe,IAAI1jC,EAAEJ,EAAE8jC,EAAe,IAAI1jC,EAAEJ,EAAE8jC,EAAe,IAAI1jC,EAAEJ,EAAE8jC,EAAe,IAAI1jC,EAAEJ,EAAE8jC,EAAe,IAAI1jC,EAAEJ,GAC1IjC,KAAKwmC,QAAQjpB,aAAa,cAAc3f,IAGzCoC,KAAKymC,UAAY7iB,GAAemiB,EAAe,IAAI1jC,EAAE8d,KAAO4lB,EAAe,IAAI1jC,EAAE8d,KAAO4lB,EAAe,IAAI1jC,EAAE8d,KAAO4lB,EAAe,IAAI1jC,EAAE8d,KAAO4lB,EAAe,IAAI1jC,EAAE8d,OACpKviB,EAAMoC,KAAKosC,cAAcrG,EAAe,IAAI1jC,EAAEJ,EAAE8jC,EAAe,IAAI1jC,EAAEJ,EAAE8jC,EAAe,IAAI1jC,EAAEJ,EAAE8jC,EAAe,IAAI1jC,EAAEJ,EAAE8jC,EAAe,IAAI1jC,EAAEJ,GAC1IjC,KAAKymC,QAAQlpB,aAAa,cAAc3f,IAGzCoC,KAAK4mC,UAAYhjB,GAAemiB,EAAe,IAAI1jC,EAAE8d,KAAO4lB,EAAe,IAAI1jC,EAAE8d,KAAO4lB,EAAe,IAAI1jC,EAAE8d,KAAO4lB,EAAe,IAAI1jC,EAAE8d,KAAO4lB,EAAe,IAAI1jC,EAAE8d,OACpKviB,EAAMoC,KAAKosC,cAAcrG,EAAe,IAAI1jC,EAAEJ,EAAE8jC,EAAe,IAAI1jC,EAAEJ,EAAE8jC,EAAe,IAAI1jC,EAAEJ,EAAE8jC,EAAe,IAAI1jC,EAAEJ,EAAE8jC,EAAe,IAAI1jC,EAAEJ,GAC1IjC,KAAK4mC,QAAQrpB,aAAa,cAAc3f,GAGhD,CACJ,EAyDAopC,oBAAoBx3B,UAAU8uB,YAAc,SAAS1a,GACjD,GAAGA,GAAe5jB,KAAK6lC,cAAc1lB,IAAI,CAIrC,IAHGyD,GAAe5jB,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAE8d,MACrDngB,KAAKinC,eAAe1pB,aAAa,eAAgBvd,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAEJ,EAAI,GAE7F2hB,GAAe5jB,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAE8d,IAAI,CACzD,IAAI2sB,EAAM9sC,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAEJ,EACjDjC,KAAKmnC,QAAQ5pB,aAAa,cAAcra,SAAS/G,KAAKC,MAAa,IAAP0wC,EAAI,IAAQ3wC,KAAKC,MAAa,IAAP0wC,EAAI,IAAQ3wC,KAAKC,MAAa,IAAP0wC,EAAI,KAClH,CAIA,IAHGlpB,GAAe5jB,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAE8d,MACrDngB,KAAKmnC,QAAQ5pB,aAAa,gBAAgBvd,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAEJ,EAAE,KAEpF2hB,GAAe5jB,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAE8d,KAAOngB,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAE8d,IAAI,CACvG,IAAIqM,EAAWxsB,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAEJ,EAClD6C,GAAS9E,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAEJ,EAAI,IAAMhE,UAC1DoL,EAAImjB,EAAWrwB,KAAK6I,IAAIF,GACxBwE,EAAIkjB,EAAWrwB,KAAK+I,IAAIJ,GAC5B9E,KAAKknC,SAAS3pB,aAAa,KAAMlU,GACjCrJ,KAAKknC,SAAS3pB,aAAa,KAAMjU,EACrC,CAUJ,CACJ,EAYAg+B,gBAAgB93B,UAAUu9B,iBAAmB,SAAS/sB,EAAM5U,GACxD,IAAI+2B,EAAShoB,SAASiC,gBAAgB3gB,MAAM,QAC5C0mC,EAAO5kB,aAAa,KAAKnS,EAAKouB,SAC9B2I,EAAO5kB,aAAa,YAAY,SAChC4kB,EAAOvnB,YAAYxP,EAAK8xB,cACxBld,EAAKoe,SAAShzB,EAAKouB,SACnBpuB,EAAKgM,KAAK6rB,IAAK,EACJjjB,EAAKC,WAAWjD,KACtBpC,YAAYunB,EACrB,EAEAmF,gBAAgB93B,UAAU07B,WAAa,WAGnC,IAFA,IAAIrsB,EAAM7e,KAAK6lC,cAAcE,eAAe,GAAG1jC,EAAEJ,EAC7C5E,EAAI,EAAGI,EAAMuC,KAAKggB,KAAKI,KAAKsN,SAAShwB,OACnCL,EAAII,GACNuC,KAAKggB,KAAKI,KAAKsN,SAASrwB,GAAG+Z,KAAKyH,MAAQA,GAC1C7e,KAAK+sC,iBAAiB/sC,KAAKggB,KAAMhgB,KAAKggB,KAAKI,KAAKsN,SAASrwB,IAE1DA,GAAK,EAEN2C,KAAKomC,aAAc,CACvB,EAEAkB,gBAAgB93B,UAAU8uB,YAAc,WACnCt+B,KAAKomC,aACRpmC,KAAKkrC,YAEP,EA4CAnI,WAAWvzB,UAAU8uB,YAAc,SAAS39B,GACxC,IAAItD,EAAGI,EAAMuC,KAAKwnC,QAAQ9pC,OAC1B,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb2C,KAAKwnC,QAAQnqC,GAAGihC,YAAY39B,EAEpC,EAkBAoQ,cAAc0pB,eAAgB4C,cAE9BA,aAAa7tB,UAAUqvB,KAAO,WAC1B,IAAI7+B,KAAKqhC,OAAO,CACZrhC,KAAKuR,QAAQstB,KAAKxtB,KAAKrR,MACvB,IAAI3C,EAAEI,EAAMuC,KAAK0tB,SAAShwB,OAC1B,IAAKL,EAAI,EAAGA,EAAII,EAAKJ,GAAG,EACjB2C,KAAK0tB,SAASrwB,IACb2C,KAAK0tB,SAASrwB,GAAGwhC,MAG7B,CACJ,EAEAxB,aAAa7tB,UAAUgvB,aAAe,SAASz6B,GAE3C,GADA/D,KAAKuR,QAAQitB,aAAantB,KAAKrR,KAAK+D,IAChB,IAAjB/D,KAAKy/B,WAAsBz/B,KAAKoX,KAAK6nB,GAAxC,CAIA,GAAGj/B,KAAK0nC,GAAG,CACP,IAAIsF,EAAehtC,KAAK0nC,GAAGzlC,EACxB+qC,IAAiBhtC,KAAKoX,KAAK+iB,KAC1B6S,EAAehtC,KAAKoX,KAAK+iB,GAAK,GAElCn6B,KAAKqgB,cAAgB2sB,CACzB,MACIhtC,KAAKqgB,cAAgBtc,EAAI/D,KAAKoX,KAAKuoB,GAEvC,IAAItiC,EAAEI,EAAMuC,KAAK0tB,SAAShwB,OAI1B,IAHIsC,KAAK6W,gBACL7W,KAAKu7B,YAAYv7B,KAAKqgB,eAErBhjB,EAAI,EAAGA,EAAII,EAAKJ,GAAG,GACjB2C,KAAK6W,gBAAkB7W,KAAK0tB,SAASrwB,KACpC2C,KAAK0tB,SAASrwB,GAAGmhC,aAAax+B,KAAKqgB,cAAgBrgB,KAAK8W,OAAOzZ,GAAGgkB,GAjB1E,CAoBJ,EAEAgc,aAAa7tB,UAAU8uB,YAAc,SAAS8J,GAC1C,IACI/qC,EADA4vC,EAAejtC,KAAKuR,QAAQ+sB,YAAYjtB,KAAKrR,KAAKooC,GAChD3qC,EAAMuC,KAAK8W,OAAOpZ,OACxB,IAAkB,IAAfuvC,EAAH,CAQA,IAHGjtC,KAAKqhC,QACJrhC,KAAK8+B,OAEJzhC,EAAI,EAAGA,EAAII,EAAKJ,GAAG,GACjB2C,KAAK6W,gBAAkB7W,KAAK0tB,SAASrwB,KACpC2C,KAAK0tB,SAASrwB,GAAGihC,cAGtBt+B,KAAKW,aACJX,KAAKW,YAAa,EAXtB,MAFIX,KAAK6+B,MAeb,EAEAxB,aAAa7tB,UAAU09B,YAAc,SAASC,GAC1CntC,KAAK0tB,SAAWyf,CACpB,EAEA9P,aAAa7tB,UAAU49B,YAAc,WACjC,OAAOptC,KAAK0tB,QAChB,EAEA2P,aAAa7tB,UAAUuuB,QAAU,WAC7B/9B,KAAKuR,QAAQwsB,QAAQ1sB,KAAKrR,KAAKuR,SAC/B,IAAIlU,EAAEI,EAAMuC,KAAK8W,OAAOpZ,OACxB,IAAKL,EAAI,EAAGA,EAAII,EAAKJ,GAAG,EACjB2C,KAAK0tB,SAASrwB,IACb2C,KAAK0tB,SAASrwB,GAAG0gC,SAG7B,EAEAV,aAAa7tB,UAAU+rB,YAAcjD,YAAY9oB,UAAU+rB,YAC3D8B,aAAa7tB,UAAUisB,UAAYnD,YAAY9oB,UAAUisB,UACzD4B,aAAa7tB,UAAU6sB,cAAgB/D,YAAY9oB,UAAU6sB,cAC7DgB,aAAa7tB,UAAUotB,sBAAwBtE,YAAY9oB,UAAUotB,sBACrES,aAAa7tB,UAAUmsB,WAAarD,YAAY9oB,UAAUmsB,WAC1D0B,aAAa7tB,UAAUqsB,YAAcvD,YAAY9oB,UAAUqsB,YAC3DwB,aAAa7tB,UAAUssB,WAAaxD,YAAY9oB,UAAUssB,WAC1DuB,aAAa7tB,UAAUusB,YAAczD,YAAY9oB,UAAUusB,YAC3DsB,aAAa7tB,UAAUwsB,YAAc1D,YAAY9oB,UAAUwsB,YAC3DqB,aAAa7tB,UAAUysB,WAAa3D,YAAY9oB,UAAUysB,WAC1DoB,aAAa7tB,UAAU2sB,WAAa7D,YAAY9oB,UAAU2sB,WAC1DkB,aAAa7tB,UAAU2uB,mBAAqB7F,YAAY9oB,UAAU2uB,mBAClEd,aAAa7tB,UAAUksB,qBAAuBpD,YAAY9oB,UAAUksB,qBACpE2B,aAAa7tB,UAAUytB,kBAAoB3E,YAAY9oB,UAAUytB,kBAKjElsB,cAAc0pB,eAAgB2C,eAE9BA,cAAc5tB,UAAUmyB,eAAiB,WAErC,IAAI0L,EAAYrtC,KAAKigB,WAAWoP,cAAcrvB,KAAKsvB,WAEnDtvB,KAAKuR,QAAQowB,eAAetwB,KAAKrR,MAEjCA,KAAKstC,UAAYnzB,SAASiC,gBAAgB3gB,MAAM,SAChDuE,KAAKstC,UAAU/vB,aAAa,QAAQvd,KAAKsvB,UAAUvU,EAAE,MACrD/a,KAAKstC,UAAU/vB,aAAa,SAASvd,KAAKsvB,UAAUvtB,EAAE,MACtD/B,KAAKstC,UAAU/vB,aAAa,sBAAsB,kBAClDvd,KAAKstC,UAAU9C,eAAe,+BAA+B,OAAO6C,GACpErtC,KAAKu6B,cAAgBv6B,KAAKstC,UAC1BttC,KAAKk9B,aAAatiB,YAAY5a,KAAKstC,WAChCttC,KAAKoX,KAAKsrB,IACT1iC,KAAKk9B,aAAa3f,aAAa,KAAKvd,KAAKoX,KAAKsrB,IAE/C1iC,KAAKoX,KAAKsC,IACT1Z,KAAKk9B,aAAa3f,aAAa,QAAQvd,KAAKoX,KAAKsC,GAGzD,EAEA0jB,cAAc5tB,UAAU8uB,YAAc,SAAS8J,IAEzB,IADCpoC,KAAKuR,QAAQ+sB,YAAYjtB,KAAKrR,KAAKooC,IAKnDpoC,KAAKqhC,QACJrhC,KAAK8+B,OAEN9+B,KAAKW,aACJX,KAAKW,YAAa,IAPlBX,KAAK6+B,MASb,EAEAzB,cAAc5tB,UAAUuuB,QAAU,WAC9B/9B,KAAKuR,QAAQwsB,QAAQ1sB,KAAKrR,KAAKuR,SAC/BvR,KAAKstC,UAAa,IACtB,EAIAv8B,cAAc0pB,eAAgB6C,eAE9BA,cAAc9tB,UAAUmyB,eAAiB,WACrC3hC,KAAKuR,QAAQowB,eAAetwB,KAAKrR,MAEjC,IAAIm5B,EAAOhf,SAASiC,gBAAgB3gB,MAAM,QAI1C09B,EAAK5b,aAAa,QAAQvd,KAAKoX,KAAKua,IACpCwH,EAAK5b,aAAa,SAASvd,KAAKoX,KAAKuI,IACrCwZ,EAAK5b,aAAa,OAAOvd,KAAKoX,KAAKkG,IACnCtd,KAAKk9B,aAAatiB,YAAYue,GAC9Bn5B,KAAKstC,UAAYnU,EACdn5B,KAAKoX,KAAKsrB,IACT1iC,KAAKk9B,aAAa3f,aAAa,KAAKvd,KAAKoX,KAAKsrB,IAE/C1iC,KAAKoX,KAAKsC,IACT1Z,KAAKk9B,aAAa3f,aAAa,QAAQvd,KAAKoX,KAAKsC,GAEzD,EAEA4jB,cAAc9tB,UAAU8uB,YAAclB,cAAc5tB,UAAU8uB,YAC9DhB,cAAc9tB,UAAUuuB,QAAUX,cAAc5tB,UAAUuuB,QAE1D,IAAIwP,iBAAoB,WACpB,IAAI5zB,EAAW,CAAC,EACZ6zB,EAAuB,GACvBzxB,EAAW,EACXte,EAAM,EACNgwC,GAAQ,EACRC,EAAuB,EAE3B,SAASC,EAAcC,GAGnB,IAFA,IAAIvwC,EAAI,EACJwwC,EAAWD,EAAG9sC,OACZzD,EAAEI,GACA+vC,EAAqBnwC,GAAGywC,YAAcD,IACtCL,EAAqBjsC,OAAOlE,EAAG,GAC/BA,GAAK,EACLI,GAAO,EACHowC,EAASE,UACTC,KAGR3wC,GAAK,CAEb,CAEA,SAAS4wC,EAAkBxvC,EAASya,GAChC,IAAIza,EACA,OAAO,KAGX,IADA,IAAIpB,EAAE,EACAA,EAAEI,GAAI,CACR,GAAG+vC,EAAqBnwC,GAAG2iB,MAAQvhB,GAA4C,OAAjC+uC,EAAqBnwC,GAAG2iB,KAClE,OAAOwtB,EAAqBnwC,GAAGywC,UAEnCzwC,GAAG,CACP,CACA,IAAIwwC,EAAW,IAAIK,cAGnB,OAFAC,EAAeN,EAAUpvC,GACzBovC,EAASO,QAAQ3vC,EAASya,GACnB20B,CACX,CAEA,SAASQ,IACLX,GAAwB,EAiJrBD,IACCA,GAAQ,EACRjyC,OAAO2a,sBAAsBm4B,GAjJrC,CAEA,SAASN,IAEuB,IAD5BN,GAAwB,KAEpBD,GAAQ,EAEhB,CAEA,SAASU,EAAeN,EAAUpvC,GAC9BovC,EAAShe,iBAAiB,UAAU8d,GACpCE,EAAShe,iBAAiB,UAAUwe,GACpCR,EAAShe,iBAAiB,QAAQme,GAClCR,EAAqBrsC,KAAK,CAAC6e,KAAMvhB,EAAQqvC,UAAUD,IACnDpwC,GAAO,CACX,CAuCA,SAAS8wC,EAAOC,GAEZ,IACInxC,EADAoxC,EAAcD,EAAUzyB,EAE5B,IAAI1e,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACbmwC,EAAqBnwC,GAAGywC,UAAUY,YAAYD,GAElD1yB,EAAWyyB,EACPf,GACAjyC,OAAO2a,sBAAsBo4B,EAErC,CAEA,SAASD,EAAME,GACXzyB,EAAWyyB,EACXhzC,OAAO2a,sBAAsBo4B,EACjC,CAoEA,SAASI,IACLnzC,OAAO2a,sBAAsBm4B,EACjC,CA2BA,OAhBA73B,WAAWk4B,EAAM,GAEjBh1B,EAASs0B,kBAAoBA,EAC7Bt0B,EAASi1B,cAzIT,SAAuB19B,GACnB,IAAI28B,EAAW,IAAIK,cAGnB,OAFAC,EAAeN,EAAU,MACzBA,EAASgB,UAAU39B,GACZ28B,CACX,EAqIAl0B,EAASm1B,SAlIT,SAAkBlxC,EAAIkwC,GAClB,IAAIzwC,EACJ,IAAIA,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACbmwC,EAAqBnwC,GAAGywC,UAAUgB,SAASlxC,EAAKkwC,EAExD,EA8HAn0B,EAASo1B,aA5HT,SAAsBnxC,EAAKkwC,GACvB,IAAIzwC,EACJ,IAAIA,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACbmwC,EAAqBnwC,GAAGywC,UAAUiB,aAAanxC,EAAKkwC,EAE5D,EAwHAn0B,EAASq1B,KAtHT,SAAclB,GACV,IAAIzwC,EACJ,IAAIA,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACbmwC,EAAqBnwC,GAAGywC,UAAUkB,KAAKlB,EAE/C,EAkHAn0B,EAASs1B,UAhHT,SAAoBnvB,EAAOguB,GAEvB,IAAIzwC,EACJ,IAFA0e,EAAW3O,KAAK0O,MAEZze,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACbmwC,EAAqBnwC,GAAGywC,UAAUmB,UAAUnvB,EAAMguB,EAE1D,EA2GAn0B,EAASu1B,MAvFT,SAAepB,GACX,IAAIzwC,EACJ,IAAIA,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACbmwC,EAAqBnwC,GAAGywC,UAAUoB,MAAMpB,EAEhD,EAmFAn0B,EAASkqB,KA1ET,SAAciK,GACV,IAAIzwC,EACJ,IAAIA,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACbmwC,EAAqBnwC,GAAGywC,UAAUjK,KAAKiK,EAE/C,EAsEAn0B,EAASw1B,YApET,SAAqBrB,GACjB,IAAIzwC,EACJ,IAAIA,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACbmwC,EAAqBnwC,GAAGywC,UAAUqB,YAAYrB,EAEtD,EAgEAn0B,EAASy1B,iBAvDT,SAA0Bl2B,EAAem2B,EAAYlrB,GACjD,IACI9mB,EADAiyC,EAAen1B,SAASo1B,uBAAuB,aAC5C9xC,EAAM6xC,EAAa5xC,OAC1B,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACV8mB,GACCmrB,EAAajyC,GAAGkgB,aAAa,eAAe4G,GAEhD8pB,EAAkBqB,EAAajyC,GAAI6b,GAEvC,GAAGm2B,GAAsB,IAAR5xC,EAAU,CACnB0mB,IACAA,EAAW,OAEf,IAAItJ,EAAOV,SAASq1B,qBAAqB,QAAQ,GACjD30B,EAAKP,UAAY,GACjB,IAAIm1B,EAAMt1B,SAASpJ,cAAc,OACjC0+B,EAAI/wC,MAAMqM,MAAQ,OAClB0kC,EAAI/wC,MAAM++B,OAAS,OACnBgS,EAAIlyB,aAAa,eAAe4G,GAChCtJ,EAAKD,YAAY60B,GACjBxB,EAAkBwB,EAAKv2B,EAC3B,CACJ,EAkCAS,EAAS+1B,OAhCT,WACI,IAAIryC,EACJ,IAAIA,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACbmwC,EAAqBnwC,GAAGywC,UAAU4B,QAE1C,EA4BA/1B,EAASg1B,MAAQA,EACjBh1B,EAASg2B,YAtFT,SAAqB7vB,EAAM8vB,EAAQ9B,GAC/B,IAAIzwC,EACJ,IAAIA,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACbmwC,EAAqBnwC,GAAGywC,UAAU6B,YAAY7vB,EAAM8vB,EAAQ9B,EAEpE,EAkFAn0B,EAASokB,QAlET,SAAiB+P,GACb,IAAIzwC,EACJ,IAAIA,EAAGI,EAAI,EAAGJ,GAAG,EAAEA,GAAG,EAClBmwC,EAAqBnwC,GAAGywC,UAAU/P,QAAQ+P,EAElD,EA8DOn0B,CACX,CApNuB,GAsNnBu0B,cAAgB,WAChBluC,KAAKkB,KAAO,GACZlB,KAAK4d,KAAO,GACZ5d,KAAKuY,KAAO,GACZvY,KAAK6vC,UAAW,EAChB7vC,KAAKu+B,aAAe,EACpBv+B,KAAK8vC,gBAAkB,EACvB9vC,KAAKY,YAAc,EACnBZ,KAAKmjB,UAAY,EACjBnjB,KAAK+vC,UAAY,EACjB/vC,KAAKgwC,UAAY,EACjBhwC,KAAKiwC,cAAgB,EACrBjwC,KAAK84B,gBAAkB,EACvB94B,KAAKkwC,UAAY,EACjBlwC,KAAKmwC,qBAAsB,EAC3BnwC,KAAKkZ,cAAgB,CAAC,EACtBlZ,KAAK8W,OAAS,GACd9W,KAAKmZ,OAAS,GACdnZ,KAAK+tC,UAAW,EAChB/tC,KAAKowC,UAAW,EAChBpwC,KAAKqwC,MAAO,EACZrwC,KAAKmkB,SAAW,KAChBnkB,KAAKswC,YAAc5uC,aAAa,IAChC1B,KAAKuwC,UAAY,MACjBvwC,KAAKuvB,WAAa,GAClBvvB,KAAKwwC,cAAgB,EACrBxwC,KAAKywC,WAAa,EAClBzwC,KAAKrE,gBAAkBA,gBACvBqE,KAAKoT,SAAW,GAChBpT,KAAK0wC,gBAAiB,EACtB1wC,KAAK2wC,OAAQ,EACb3wC,KAAK08B,iBAAmBt/B,kBAC5B,EAunBA,SAASwzC,eAAerY,EAAeC,GAwBnC,IAAIn7B,EACJ,IAxBA2C,KAAKu4B,cAAgBA,EACrBv4B,KAAKy4B,aAAe,CAChBoY,aAAcrY,QAAiC52B,IAAvB42B,EAAOqY,aAA6BrY,EAAOqY,YACnEC,QAAUtY,GAAUA,EAAOsY,SAAY,KACvCnY,gBAAkBH,GAAUA,EAAOG,kBAAoB,EACvDD,oBAAsBF,GAAUA,EAAOE,qBAAwB,gBAC/Dlc,UAAYgc,GAAUA,EAAOhc,WAAc,IAE/Cxc,KAAKy4B,aAAasY,IAAOvY,GAAUA,EAAOuY,KAAQ,EAC9C/wC,KAAKu4B,cAAcmF,UACnB19B,KAAKy4B,aAAasY,IAAOvY,GAAUA,EAAOuY,KAAQv1C,OAAOw1C,kBAAoB,GAEjFhxC,KAAKqgB,eAAiB,EACtBrgB,KAAKigB,WAAa,CACd7B,UAAW,GAEfpe,KAAKixC,YAAc,CACfC,MAAQpzC,MAAMC,MAAM,KAAK,CAACL,OAAO,KACjCyzC,QAASrzC,MAAMC,MAAM,KAAK,CAACL,OAAO,KAClC0zC,QAAU,EACVC,IAAM,IAAI3sC,OACV4sC,GAAK,GAGLj0C,EAAE,EAAEA,EADK,GACCA,GAAG,EACb2C,KAAKixC,YAAYC,MAAM7zC,GAAKS,MAAMC,MAAM,KAAK,CAACL,OAAO,KAEzDsC,KAAK0tB,SAAW,GAChB1tB,KAAK84B,gBAAkB,GACvB94B,KAAKuxC,aAAe,IAAI7sC,OACxB1E,KAAK6W,gBAAiB,CAC1B,CA+TA,SAAS26B,eAAejZ,EAAeC,GACnCx4B,KAAKu4B,cAAgBA,EACrBv4B,KAAK8W,OAAS,KACd9W,KAAKqgB,eAAiB,EACtBrgB,KAAKigB,WAAa,CACd7B,UAAW,GAEfpe,KAAKy4B,aAAe,CAChBjc,UAAYgc,GAAUA,EAAOhc,WAAc,IAE/Cxc,KAAK84B,gBAAkB,GACvB94B,KAAK0tB,SAAW,GAChB1tB,KAAKyxC,eAAiB,GACtBzxC,KAAK+4B,WAAY,EACjB/4B,KAAK0xC,OAAS,KACd1xC,KAAKynC,YAAa,CAEtB,CA6QA,SAASkK,cAAcv6B,EAAMgJ,EAAKH,GAC9BjgB,KAAKigB,WAAaA,EAClBjgB,KAAKoX,KAAOA,EACZpX,KAAKogB,KAAOA,EACZpgB,KAAK4xC,cAAgB3xB,EAAW2xB,cAChC5xC,KAAKwE,MACT,CAyIA,SAASqtC,cAAcz6B,EAAMgJ,EAAKH,GAC9BjgB,KAAKuR,QAAQD,YAAYD,KAAKrR,KAAKoX,EAAMgJ,EAAKH,GAC9C,IAoBI5iB,EApBAy0C,EAAiB,CAAC,EACtB,IAAI,IAAI9vC,KAAKie,EACNA,EAAWrO,eAAe5P,KACzB8vC,EAAe9vC,GAAKie,EAAWje,IAkBvC,IAfA8vC,EAAe3tB,SAAWnkB,KAC1B8xC,EAAeC,WAAa/xC,KAAKoX,KAAKrV,EACtC+vC,EAAeE,UAAYhyC,KAAKoX,KAAK2D,EACrC/a,KAAKy4B,aAAe,CAChBoY,aAAa,GAEjB7wC,KAAKixC,YAAc,CACfC,MAAQpzC,MAAMC,MAAM,KAAK,CAACL,OAAO,KACjCyzC,QAASrzC,MAAMC,MAAM,KAAK,CAACL,OAAO,KAClC0zC,QAAU,EACVC,IAAM,IAAI3sC,OACV4sC,GAAK,GAETtxC,KAAK6W,gBAAiB,EAElBxZ,EAAE,EAAEA,EADK,GACCA,GAAG,EACb2C,KAAKixC,YAAYC,MAAM7zC,GAAKS,MAAMC,MAAM,KAAK,CAACL,OAAO,KAEzDsC,KAAKuxC,aAAe,IAAI7sC,OACxB1E,KAAKiyC,iBAAmBjyC,KAAKigB,WAC7B,IAAIiyB,EAAK/3B,SAASpJ,cAAc,UAEhC+gC,EAAeF,cAAgBM,EAAGx1B,WAAW,MAC7C1c,KAAK4xC,cAAgBE,EAAeF,cACpCM,EAAGnnC,MAAQ/K,KAAKoX,KAAK2D,EACrBm3B,EAAGzU,OAASz9B,KAAKoX,KAAKrV,EACtB/B,KAAKmyC,OAASD,EACdlyC,KAAKigB,WAAa6xB,EAClB9xC,KAAK8W,OAASM,EAAKN,OACnB9W,KAAK84B,gBAAkB,GACvB94B,KAAK0tB,SAAW5vB,MAAMC,MAAM,KAAK,CAACL,OAAOsC,KAAK8W,OAAOpZ,SAClDsC,KAAKoX,KAAKswB,KACT1nC,KAAK0nC,GAAKzpB,gBAAgBwF,QAAQzjB,KAAKA,KAAKoX,KAAKswB,GAAG,EAAEznB,EAAWkD,UAAUnjB,KAAKgE,qBAEjFhE,KAAKoX,KAAK6nB,IAAOhf,EAAW0Y,iBAC3B34B,KAAKq8B,eAEb,CA4HA,SAAS+V,eAAeh7B,EAAMgJ,EAAKH,GAC/BjgB,KAAKsvB,UAAYrP,EAAW0d,aAAavmB,EAAKS,OAC9C7X,KAAKuR,QAAQD,YAAYD,KAAKrR,KAAKoX,EAAMgJ,EAAKH,GAC9CjgB,KAAKigB,WAAWgd,mBACpB,CAmEA,SAASoV,cAAcj7B,EAAK3Y,GACxBuB,KAAKoX,KAAOA,EACZpX,KAAKvB,QAAUA,EACfuB,KAAKgE,kBAAoB,GACzBhE,KAAK0X,gBAAkB1X,KAAKoX,KAAKM,gBACjC1X,KAAKi5B,SAAWn7B,MAAMC,MAAM,KAAK,CAACL,OAAOsC,KAAK0X,gBAAgBha,SAC9D,IAAIL,EAAGI,EAAMuC,KAAK0X,gBAAgBha,OAClC,IAAKL,EAAI,EAAGA,EAAII,EAAKJ,IACjB2C,KAAKi5B,SAAS57B,GAAKipB,qBAAqB8T,aAAap6B,KAAKvB,QAAQuB,KAAK0X,gBAAgBra,GAAG,EAAE2C,KAAKgE,kBAAkB,KAE3H,CAwDA,SAASsuC,eAAel7B,EAAMgJ,EAAKH,GAC/BjgB,KAAK+X,OAAS,GACd/X,KAAKi7B,WAAa7jB,EAAKW,OACvB/X,KAAKk7B,WAAa,GAClBl7B,KAAKm7B,UAAY,GACjBn7B,KAAKo7B,aAAe,GACpBp7B,KAAKq7B,eAAiB,GACtBr7B,KAAKs7B,kBAAoB,GACzBt7B,KAAKuR,QAAQD,YAAYD,KAAKrR,KAAKoX,EAAMgJ,EAAKH,EAClD,CAsbA,SAASsyB,eAAen7B,EAAMgJ,EAAKH,GAC/BjgB,KAAKuR,QAAQD,YAAYD,KAAKrR,KAAKoX,EAAMgJ,EAAKH,EAClD,CAkBA,SAASuyB,cAAcp7B,EAAMgJ,EAAMH,GAC/BjgB,KAAK0lC,UAAY,GACjB1lC,KAAK2yB,QAAU,EACf3yB,KAAKwyB,eAAgB,EACrBxyB,KAAKyyB,iBAAkB,EACvBzyB,KAAK0yB,iBAAkB,EACvB1yB,KAAKyyC,QAAS,EACdzyC,KAAK0yC,MAAO,EACZ1yC,KAAKmyB,cAAgB,EACrBnyB,KAAK2yC,cAAgB,KACrB3yC,KAAK4wB,WAAa,SAClB5wB,KAAK4yC,OAAS,CACVF,KAAM,gBACND,OAAQ,gBACRI,OAAQ,EACRC,OAAQ,IAEZ9yC,KAAKuR,QAAQD,YAAYD,KAAKrR,KAAKoX,EAAKgJ,EAAMH,EAClD,CAmMA,SAAS8yB,aAAa37B,EAAKsjB,EAAgBza,EAAWG,EAAMua,GACxD36B,KAAKigB,WAAaA,EAClBjgB,KAAKogB,KAAOA,EACZpgB,KAAKoX,KAAOA,EACZpX,KAAK46B,aAAe,KACpB56B,KAAK06B,gBAAkBA,EACvB16B,KAAKw5B,QAAUmB,EAAcA,EAAYnB,QAAU,MAAM93B,aAAa,IACtE1B,KAAK26B,YAAcA,EACnB36B,KAAKwE,MACT,CA+IA,SAASwuC,cAAc57B,EAAKsjB,EAAgBza,EAAWG,EAAMua,GACzD36B,KAAKuR,QAAQD,YAAYD,KAAKrR,KAAKoX,EAAKsjB,EAAgBza,EAAWG,EAAMua,EAC7E,CAuCA,SAASsY,aAAa77B,EAAKsjB,EAAgBza,EAAWG,EAAMua,GACxD36B,KAAKuR,QAAQD,YAAYD,KAAKrR,KAAKoX,EAAKsjB,EAAgBza,EAAWG,EAAMua,GACzE36B,KAAK8W,OAASM,EAAKN,OACnB9W,KAAKynC,YAAa,EAClBznC,KAAK6W,gBAAiB,EACtB7W,KAAK84B,gBAAkB,GACvB94B,KAAK0tB,SAAW5vB,MAAMC,MAAM,KAAK,CAACL,OAAOsC,KAAK8W,OAAOpZ,SAClDsC,KAAKoX,KAAKswB,KACT1nC,KAAK0nC,GAAKzpB,gBAAgBwF,QAAQzjB,KAAKA,KAAKoX,KAAKswB,GAAG,EAAEznB,EAAWkD,UAAUnjB,KAAKgE,oBAEjFhE,KAAKoX,KAAKI,UACTxX,KAAKynC,YAAa,GAEnBznC,KAAKoX,KAAK6nB,KACTj/B,KAAKk9B,aAAe/iB,SAASpJ,cAAc,QAE/C/Q,KAAKq8B,eAET,CAuEA,SAAS6W,cAAc97B,EAAKsjB,EAAgBza,EAAWG,EAAMua,GACzD36B,KAAK+X,OAAS,GACd/X,KAAKi7B,WAAa7jB,EAAKW,OACvB/X,KAAKk7B,WAAa,GAClBl7B,KAAKm7B,UAAY,GACjBn7B,KAAKo7B,aAAe,GACpBp7B,KAAKq7B,eAAiB,GACtBr7B,KAAKs7B,kBAAoB,GACzBt7B,KAAKuR,QAAQD,YAAYD,KAAKrR,KAAKoX,EAAKsjB,EAAgBza,EAAWG,EAAMua,GACzE36B,KAAKmzC,YAAc,CACf9pC,EAAE,OACFC,GAAI,OACJvH,EAAG,EACHgZ,EAAG,EAEX,CApoFAmzB,cAAc1+B,UAAUq/B,UAAY,SAAS39B,GACzC,IAAIkiC,EAAOpzC,KACRkR,EAAO4/B,UACN9wC,KAAK8wC,QAAU5/B,EAAO4/B,UAEvB5/B,EAAOwsB,SAAWxsB,EAAO22B,aACxB7nC,KAAK09B,QAAUxsB,EAAOwsB,SAAWxsB,EAAO22B,WAE5C,IAAIwL,EAAWniC,EAAOmiC,SAAWniC,EAAOmiC,SAAWniC,EAAOiT,SAAWjT,EAAOiT,SAAW,MACvF,OAAOkvB,GACH,IAAK,SACDrzC,KAAKmkB,SAAW,IAAIysB,eAAe5wC,KAAMkR,EAAOoiC,kBAChD,MACJ,IAAK,MACDtzC,KAAKmkB,SAAW,IAAImU,YAAYt4B,KAAMkR,EAAOoiC,kBAC7C,MAGJ,QACItzC,KAAKmkB,SAAW,IAAIqtB,eAAexxC,KAAMkR,EAAOoiC,kBAkBxD,GAfAtzC,KAAKmkB,SAASqY,oBAAoBx8B,KAAK08B,kBACvC18B,KAAKqzC,SAAWA,EAEG,KAAhBniC,EAAOm/B,MAA+B,OAAhBn/B,EAAOm/B,QACP,IAAhBn/B,EAAOm/B,KACZrwC,KAAKqwC,MAAO,GACS,IAAhBn/B,EAAOm/B,KACZrwC,KAAKqwC,MAAO,EAEZrwC,KAAKqwC,KAAO9sC,SAAS2N,EAAOm/B,OAEhCrwC,KAAKowC,WAAW,aAAcl/B,IAASA,EAAOk/B,SAC9CpwC,KAAK4d,KAAO1M,EAAO0M,KAAO1M,EAAO0M,KAAQ,GACzC5d,KAAKmwC,sBAAsB,cAAej/B,IAASA,EAAOqiC,UAC1DvzC,KAAKwzC,kBAAmBtiC,EAAOU,eAAe,qBAAsBV,EAAOsiC,iBACxEtiC,EAAOgI,cACNk6B,EAAK7V,gBAAgBrsB,EAAOgI,oBAC1B,GAAGhI,EAAOqH,KAAK,CACY,QAA1BrH,EAAOqH,KAAK4e,QAAQ,KACc,KAA7BjmB,EAAOqH,KAAK4e,QAAQ,EAAG,KACvBjmB,EAAOqH,MAAQ,KAEnBrH,EAAOqH,MAAQ,aAGnB,IAAIk7B,EAAM,IAAIC,gBACuB,GAAlCxiC,EAAOqH,KAAKo7B,YAAY,MACvB3zC,KAAKuY,KAAOrH,EAAOqH,KAAK4e,OAAO,EAAEjmB,EAAOqH,KAAKo7B,YAAY,MAAM,GAE/D3zC,KAAKuY,KAAOrH,EAAOqH,KAAK4e,OAAO,EAAEjmB,EAAOqH,KAAKo7B,YAAY,KAAK,GAElE3zC,KAAKuvB,WAAare,EAAOqe,WACzBvvB,KAAK4zC,SAAW1iC,EAAOqH,KAAK4e,OAAOjmB,EAAOqH,KAAKo7B,YAAY,KAAK,GAChE3zC,KAAK4zC,SAAW5zC,KAAK4zC,SAASzc,OAAO,EAAEn3B,KAAK4zC,SAASD,YAAY,UACjEF,EAAII,KAAK,MAAO3iC,EAAOqH,MAAM,GAC7Bk7B,EAAIK,OACJL,EAAIM,mBAAqB,WACrB,GAAsB,GAAlBN,EAAIO,WACJ,GAAiB,KAAdP,EAAIQ,OACHb,EAAK7V,gBAAgBrlB,KAAKC,MAAMs7B,EAAIS,oBAEpC,IACI,IAAIC,EAAWj8B,KAAKC,MAAMs7B,EAAIS,cAC9Bd,EAAK7V,gBAAgB4W,EACzB,CAAC,MAAMC,GACP,CAGZ,CACJ,CACJ,EAEAlG,cAAc1+B,UAAU4+B,QAAU,SAAU1Q,EAASxkB,GACjD,IAAIhI,EAAS,CACTwsB,QAASA,EACTxkB,cAAeA,EAA2C,iBAAnBA,EAA+BA,EAAgBhB,KAAKC,MAAMe,GAAiB,MAElHm7B,EAAoB3W,EAAQ4W,WAEhCpjC,EAAOqH,KAAO87B,EAAkBE,aAAa,uBAAyBF,EAAkBE,aAAa,uBAAuBz0B,MAAQu0B,EAAkBE,aAAa,gBAAkBF,EAAkBE,aAAa,gBAAgBz0B,MAASu0B,EAAkBE,aAAa,WAAaF,EAAkBE,aAAa,WAAWz0B,MAAQ,GAC3U5O,EAAOmiC,SAAWgB,EAAkBE,aAAa,kBAAoBF,EAAkBE,aAAa,kBAAkBz0B,MAAQu0B,EAAkBE,aAAa,gBAAkBF,EAAkBE,aAAa,gBAAgBz0B,MAAQu0B,EAAkBE,aAAa,WAAaF,EAAkBE,aAAa,WAAWz0B,MAASu0B,EAAkBE,aAAa,oBAAsBF,EAAkBE,aAAa,oBAAoBz0B,MAAQu0B,EAAkBE,aAAa,eAAiBF,EAAkBE,aAAa,eAAez0B,MAAQ,SAE3hB,IAAIuwB,EAAOgE,EAAkBE,aAAa,kBAAoBF,EAAkBE,aAAa,kBAAkBz0B,MAASu0B,EAAkBE,aAAa,gBAAkBF,EAAkBE,aAAa,gBAAgBz0B,MAASu0B,EAAkBE,aAAa,WAAaF,EAAkBE,aAAa,WAAWz0B,MAAQ,GACnT,KAATuwB,IAECn/B,EAAOm/B,KADO,UAATA,IAES,SAATA,GAGS9sC,SAAS8sC,KAE3B,IAAID,EAAWiE,EAAkBE,aAAa,sBAAwBF,EAAkBE,aAAa,sBAAsBz0B,MAASu0B,EAAkBE,aAAa,oBAAsBF,EAAkBE,aAAa,oBAAoBz0B,OAASu0B,EAAkBE,aAAa,gBAAiBF,EAAkBE,aAAa,eAAez0B,MACnV5O,EAAOk/B,SAAwB,UAAbA,EAElBl/B,EAAO0M,KAAOy2B,EAAkBE,aAAa,aAAeF,EAAkBE,aAAa,aAAaz0B,MAASu0B,EAAkBE,aAAa,gBAAkBF,EAAkBE,aAAa,gBAAgBz0B,MAAQu0B,EAAkBE,aAAa,WAAaF,EAAkBE,aAAa,WAAWz0B,MAAS,GAGvS,WAFDu0B,EAAkBE,aAAa,uBAAyBF,EAAkBE,aAAa,uBAAuBz0B,MAASu0B,EAAkBE,aAAa,qBAAuBF,EAAkBE,aAAa,qBAAqBz0B,MAASu0B,EAAkBE,aAAa,gBAAkBF,EAAkBE,aAAa,gBAAgBz0B,MAAQ,MAG9V5O,EAAOqiC,WAAY,GAEvBvzC,KAAK6uC,UAAU39B,EACnB,EAEAg9B,cAAc1+B,UAAU8sB,cAAgB,SAASllB,GAC1CA,EAAK+iB,GAAKn6B,KAAKkZ,cAAcihB,KAC5Bn6B,KAAKkZ,cAAcihB,GAAK/iB,EAAK+iB,GAC7Bn6B,KAAKY,YAAczE,KAAKU,MAAMua,EAAK+iB,GAAKn6B,KAAKkZ,cAAcsiB,IAC3Dx7B,KAAKkZ,cAAcs7B,GAAKx0C,KAAKY,aAEjC,IACIvD,EAEAgJ,EAHAyQ,EAAS9W,KAAKkZ,cAAcpC,OACzBrZ,EAAMqZ,EAAOpZ,OAChB6+B,EAAYnlB,EAAKN,OACdI,EAAOqlB,EAAU7+B,OACxB,IAAI2I,EAAE,EAAEA,EAAE6Q,EAAK7Q,GAAG,EAEd,IADAhJ,EAAI,EACEA,EAAEI,GAAI,CACR,GAAGqZ,EAAOzZ,GAAGmZ,IAAM+lB,EAAUl2B,GAAGmQ,GAAG,CAC/BM,EAAOzZ,GAAKk/B,EAAUl2B,GACtB,KACJ,CACAhJ,GAAK,CACT,CAMJ,IAJG+Z,EAAKzV,OAASyV,EAAK6D,SAClBjb,KAAKmkB,SAASlE,WAAWjJ,YAAY4F,SAASxF,EAAKzV,OACnD3B,KAAKmkB,SAASlE,WAAWjJ,YAAY+F,SAAS3F,EAAK6D,MAAOjb,KAAKmkB,SAASlE,WAAWjD,OAEpF5F,EAAK+B,OAEJ,IADA1b,EAAM2Z,EAAK+B,OAAOzb,OACdL,EAAI,EAAGA,EAAII,EAAKJ,GAAK,EACrB2C,KAAKkZ,cAAcC,OAAOhY,KAAKiW,EAAK+B,OAAO9b,IAKnD2C,KAAKkZ,cAAcU,YAAa,EAChCC,YAAY46B,aAAaz0C,KAAKkZ,cAAclZ,KAAKmkB,SAASlE,WAAWjJ,aACrEhX,KAAKmkB,SAASmY,cAAcllB,EAAKN,QAC9Blb,mBACCA,kBAAkBsiC,gBAAgBl+B,MAEtCA,KAAKmkB,SAASma,YAAY,MAC1Bt+B,KAAK00C,iBACT,EAEAxG,cAAc1+B,UAAUklC,gBAAkB,WACtC,IAAIthC,EAAWpT,KAAKkZ,cAAc9F,SAClC,IAAIA,GAAgC,IAApBA,EAAS1V,SAAiBsC,KAAKwzC,iBAG3C,OAFAxzC,KAAK20C,QAAQ,mBACb30C,KAAKwwC,cAAgBxwC,KAAKkZ,cAAcs7B,IAG5C,IAAIxoB,EAAU5Y,EAASwhC,QACvB50C,KAAKwwC,cAAgBxkB,EAAQye,KAAOzqC,KAAKmjB,UACzC,IAAIswB,EAAM,IAAIC,eACVN,EAAOpzC,KACP60C,EAAc70C,KAAKuY,KAAKvY,KAAK4zC,SAAS,IAAM5zC,KAAKywC,WAAa,QAClEzwC,KAAKywC,YAAc,EACnBgD,EAAII,KAAK,MAAOgB,GAAa,GAC7BpB,EAAIK,OACJL,EAAIM,mBAAqB,WACrB,GAAsB,GAAlBN,EAAIO,WACJ,GAAiB,KAAdP,EAAIQ,OACHb,EAAK9W,cAAcpkB,KAAKC,MAAMs7B,EAAIS,oBAElC,IACI,IAAIC,EAAWj8B,KAAKC,MAAMs7B,EAAIS,cAC9Bd,EAAK9W,cAAc6X,EACvB,CAAC,MAAMC,GACP,CAGZ,CACJ,EAEAlG,cAAc1+B,UAAUslC,aAAe,WACpB90C,KAAKkZ,cAAc9F,WAE9BpT,KAAKwwC,cAAgBxwC,KAAKkZ,cAAcs7B,IAE5Cx0C,KAAK00C,iBACT,EAEAxG,cAAc1+B,UAAU+tB,gBAAkB,SAAUC,GAChD,IAAIuX,EAAQ/0C,KACTA,KAAKmkB,UAAYnkB,KAAKmkB,SAAS4U,YAMlC/4B,KAAKkZ,cAAgBskB,EACrBx9B,KAAKY,YAAczE,KAAKU,MAAMmD,KAAKkZ,cAAcihB,GAAKn6B,KAAKkZ,cAAcsiB,IACzEx7B,KAAKkZ,cAAcs7B,GAAKx0C,KAAKY,YAC7BZ,KAAKmkB,SAASoZ,gBAAgBC,GAC1BA,EAASrkB,SACTqkB,EAASrkB,OAAS,IAEnBqkB,EAASzmB,QACRymB,EAASrkB,OAASqkB,EAASrkB,OAAOyM,OAAO4X,EAASzmB,OAClDymB,EAASzmB,MAAQ,MAErB/W,KAAKmkB,SAAS4a,wBAAwBvB,EAASrkB,QAE/CnZ,KAAK8W,OAAS9W,KAAKkZ,cAAcpC,OACjC9W,KAAKmZ,OAASnZ,KAAKkZ,cAAcC,OACjCnZ,KAAKmjB,UAAYnjB,KAAKkZ,cAAc2kB,GACpC79B,KAAKW,WAAaxE,KAAKC,MAAM4D,KAAKkZ,cAAcsiB,IAChDx7B,KAAK+vC,UAAY/vC,KAAKkZ,cAAc2kB,GAAK,IACzC79B,KAAK20C,QAAQ,gBACb30C,KAAKg1C,eAAiB,IAAIhmB,eAC1BhvB,KAAKg1C,eAAe7kB,cAAcnwB,KAAKuvB,YACvCvvB,KAAKg1C,eAAe9kB,QAAQlwB,KAAKuY,MACjCvY,KAAKg1C,eAAejlB,WAAWyN,EAASrkB,QAAQ,SAASi7B,GACjDA,GACAW,EAAMJ,QAAQ,gBAEtB,IACA30C,KAAK80C,eACL90C,KAAKi1C,oBACFj1C,KAAKmkB,SAASlE,WAAWjJ,YACxBhX,KAAKk1C,sBAELr7B,YAAY46B,aAAaz0C,KAAKkZ,cAAclZ,KAAKmkB,SAASlE,WAAWjJ,aACrEhX,KAAKm1C,eAEb,EAEAjH,cAAc1+B,UAAU0lC,mBAAsB,WAC1C,SAASE,IACFp1C,KAAKmkB,SAASlE,WAAWjJ,YAAYmE,QACpCtB,YAAY46B,aAAaz0C,KAAKkZ,cAAclZ,KAAKmkB,SAASlE,WAAWjJ,aAErEhX,KAAKm1C,eAEL1+B,WAAW2+B,EAAiB/zC,KAAKrB,MAAM,GAE/C,CAEA,OAAO,WACHo1C,EAAiB/zC,KAAKrB,KAAtBo1C,EACJ,CACJ,CAd6C,GAgB7ClH,cAAc1+B,UAAUytB,kBAAoB,WACxCj9B,KAAK84B,iBAAmB,CAC5B,EAEAoV,cAAc1+B,UAAU6lC,cAAgB,WACpCr1C,KAAK84B,kBACL94B,KAAKm1C,aACT,EAEAjH,cAAc1+B,UAAU2lC,YAAc,WACL,IAAzBn1C,KAAK84B,kBACFl9B,mBACCA,kBAAkBsiC,gBAAgBl+B,MAEtCA,KAAKmkB,SAASwY,YACdlmB,WAAW,WACPzW,KAAK20C,QAAQ,YACjB,EAAEtzC,KAAKrB,MAAM,GACbA,KAAK6vC,UAAW,EAChB7vC,KAAKs1C,YACFt1C,KAAKowC,UACJpwC,KAAKgvC,OAGjB,EAEAd,cAAc1+B,UAAUkgC,OAAS,WAC7B1vC,KAAKmkB,SAAS6Z,qBAClB,EAEAkQ,cAAc1+B,UAAU+lC,YAAc,SAASl3C,GAC3C2B,KAAKrE,kBAAkB0C,CAC3B,EAEA6vC,cAAc1+B,UAAU8lC,UAAY,WAC7Bt1C,KAAKrE,gBACJqE,KAAKu+B,aAAev+B,KAAK8vC,gBAEzB9vC,KAAKu+B,aAAepiC,KAAKU,MAAMmD,KAAK8vC,iBAGrC9vC,KAAKwwC,gBAAkBxwC,KAAKY,aAAeZ,KAAKu+B,aAAev+B,KAAKwwC,gBACnExwC,KAAKu+B,aAAev+B,KAAKwwC,eAE7BxwC,KAAK20C,QAAQ,cACb30C,KAAKs+B,aACT,EAEA4P,cAAc1+B,UAAU8uB,YAAc,YACb,IAAlBt+B,KAAK6vC,UAIR7vC,KAAKmkB,SAASma,YAAYt+B,KAAKu+B,aAAev+B,KAAKW,WACvD,EAEAutC,cAAc1+B,UAAUw/B,KAAO,SAAUpxB,GAClCA,GAAQ5d,KAAK4d,MAAQA,IAGH,IAAlB5d,KAAK+tC,WACJ/tC,KAAK+tC,UAAW,EACb/tC,KAAK2wC,QACJ3wC,KAAK2wC,OAAQ,EACb3wC,KAAK20C,QAAQ,YAGzB,EAEAzG,cAAc1+B,UAAU0/B,MAAQ,SAAUtxB,GACnCA,GAAQ5d,KAAK4d,MAAQA,IAGH,IAAlB5d,KAAK+tC,WACJ/tC,KAAK+tC,UAAW,EACZ/tC,KAAK0wC,iBACL1wC,KAAK2wC,OAAQ,EACb3wC,KAAK20C,QAAQ,UAGzB,EAEAzG,cAAc1+B,UAAU2/B,YAAc,SAAUvxB,GACzCA,GAAQ5d,KAAK4d,MAAQA,KAGH,IAAlB5d,KAAK+tC,SACJ/tC,KAAKgvC,OAELhvC,KAAKkvC,QAEb,EAEAhB,cAAc1+B,UAAUq0B,KAAO,SAAUjmB,GAClCA,GAAQ5d,KAAK4d,MAAQA,IAGxB5d,KAAKkvC,QACLlvC,KAAKu+B,aAAev+B,KAAK8vC,gBAAkB,EAC3C9vC,KAAKkwC,UAAY,EACjBlwC,KAAKs1C,YACT,EAEApH,cAAc1+B,UAAUmgC,YAAc,SAAU7vB,EAAO8vB,EAAShyB,GACzDA,GAAQ5d,KAAK4d,MAAQA,IAGrBgyB,EACC5vC,KAAKw1C,wBAAwB11B,GAE7B9f,KAAKw1C,wBAAwB11B,EAAQ9f,KAAKy1C,eAE9Cz1C,KAAKkvC,QACT,EAEAhB,cAAc1+B,UAAUkmC,YAAc,SAAU51B,EAAO8vB,EAAShyB,GAC5D5d,KAAK2vC,YAAY7vB,EAAO8vB,EAAShyB,GACjC5d,KAAKgvC,MACT,EAEAd,cAAc1+B,UAAUk/B,YAAc,SAAU5uB,GAC5C,GAAG9f,KAAK0wC,eAMJ,OALA1wC,KAAK0wC,gBAAiB,EACtB1wC,KAAK21C,cAAc31C,KAAKoT,SAASwhC,cAC9B50C,KAAK+tC,UACJ/tC,KAAKgvC,SAIS,IAAlBhvC,KAAK+tC,WAAuC,IAAlB/tC,KAAK6vC,UAGnC7vC,KAAKw1C,wBAAwBx1C,KAAK8vC,gBAAkBhwB,EAAQ9f,KAAKy1C,cACrE,EAEAvH,cAAc1+B,UAAUomC,gBAAkB,SAAU/iC,GAChD7S,KAAKw1C,wBAAwBx1C,KAAKY,YAAciS,EACpD,EAEAq7B,cAAc1+B,UAAUy/B,UAAY,SAAUnvB,EAAOlC,GAC9CA,GAAQ5d,KAAK4d,MAAQA,GAGxB5d,KAAKw1C,wBAAwBx1C,KAAK8vC,gBAAgBhwB,EACtD,EAEAouB,cAAc1+B,UAAUmmC,cAAgB,SAASxrC,GAC7CnK,KAAKkwC,UAAY,EACd/lC,EAAI,GAAKA,EAAI,IACTnK,KAAKy1C,cAAgB,IACjBz1C,KAAKgwC,UAAY,EAChBhwC,KAAK8uC,UAAU9uC,KAAKgwC,WAEpBhwC,KAAK+uC,cAAc,IAG3B/uC,KAAKY,YAAcuJ,EAAI,GAAKA,EAAI,GAChCnK,KAAKW,WAAawJ,EAAI,GACtBnK,KAAKw1C,wBAAwBx1C,KAAKY,YAAc,MAC1CuJ,EAAI,GAAKA,EAAI,KAChBnK,KAAKy1C,cAAgB,IACjBz1C,KAAKgwC,UAAY,EAChBhwC,KAAK8uC,UAAU9uC,KAAKgwC,WAEpBhwC,KAAK+uC,aAAa,IAG1B/uC,KAAKY,YAAcuJ,EAAI,GAAKA,EAAI,GAChCnK,KAAKW,WAAawJ,EAAI,GACtBnK,KAAKw1C,wBAAwB,IAEjCx1C,KAAK20C,QAAQ,eACjB,EACAzG,cAAc1+B,UAAUqmC,WAAa,SAAUrxC,EAAKsxC,GAChD,IAAIC,GAAgB,EACjB/1C,KAAK+tC,WACA/tC,KAAK8vC,gBAAkB9vC,KAAKW,WAAa6D,EACzCuxC,EAAevxC,EACRxE,KAAK8vC,gBAAkB9vC,KAAKW,WAAam1C,IAChDC,EAAeD,EAAMtxC,EAAO,MAIpCxE,KAAKW,WAAa6D,EAClBxE,KAAKY,YAAck1C,EAAMtxC,GACJ,IAAlBuxC,GACC/1C,KAAK2vC,YAAYoG,GAAa,EAEtC,EAEA7H,cAAc1+B,UAAUwmC,aAAe,SAAU7rC,EAAI8rC,GACjD,GAAqB,iBAAX9rC,EAAI,GAAgB,CAC1B,IAAI9M,EAAGI,EAAM0M,EAAIzM,OACjB,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb2C,KAAKoT,SAASjS,KAAKgJ,EAAI9M,GAE/B,MACI2C,KAAKoT,SAASjS,KAAKgJ,GAEpB8rC,GACCj2C,KAAK21C,cAAc31C,KAAKoT,SAASwhC,SAElC50C,KAAK+tC,UACJ/tC,KAAKgvC,MAEb,EAEAd,cAAc1+B,UAAU0mC,cAAgB,SAAUD,GAC9Cj2C,KAAKoT,SAAS1V,OAAS,EACvBsC,KAAKoT,SAASjS,KAAK,CAACnB,KAAKkZ,cAAcsiB,GAAGx7B,KAAKmjB,UAAUhnB,KAAKU,MAAMmD,KAAKkZ,cAAcihB,GAAKn6B,KAAKkZ,cAAcsiB,GAAGx7B,KAAKkZ,cAAcsiB,GAAGx7B,KAAKmjB,aAC1I8yB,GACCj2C,KAAK21C,cAAc31C,KAAKoT,SAASwhC,QAEzC,EACA1G,cAAc1+B,UAAU2mC,cAAgB,WACjCn2C,KAAKoT,SAAS1V,SACbsC,KAAK0wC,gBAAiB,EAE9B,EAEAxC,cAAc1+B,UAAU4mC,OAAS,SAAUx4B,GACpCA,GAAQ5d,KAAK4d,MAAQA,GAGxB5d,KAAKmkB,SAAS4Z,SAClB,EAEAmQ,cAAc1+B,UAAUuuB,QAAU,SAAUngB,GACpCA,GAAQ5d,KAAK4d,MAAQA,GAAU5d,KAAKmkB,UAAYnkB,KAAKmkB,SAAS4U,YAGlE/4B,KAAKmkB,SAAS4Z,UACd/9B,KAAK20C,QAAQ,WACb30C,KAAKkB,KAAO,KACZlB,KAAKq2C,aAAer2C,KAAKs2C,eAAiBt2C,KAAKu2C,WAAav2C,KAAKw2C,eAAiBx2C,KAAKy2C,UAAY,KACvG,EAEAvI,cAAc1+B,UAAUgmC,wBAA0B,SAAS11B,GAGvD,GAFA9f,KAAK8vC,gBAAkBhwB,EAEnB9f,KAAK8vC,iBAAmB9vC,KAAKY,YAAa,CAE1C,GADAZ,KAAKm2C,iBACY,IAAdn2C,KAAKqwC,KAKJ,OAJArwC,KAAK8vC,gBAAkB9vC,KAAKY,YAAc,IAC1CZ,KAAKs1C,YACLt1C,KAAKkvC,aACLlvC,KAAK20C,QAAQ,YAKb,GAFA30C,KAAK20C,QAAQ,gBACb30C,KAAKkwC,WAAa,GACA,IAAdlwC,KAAKqwC,MAAiBrwC,KAAKkwC,WAAalwC,KAAKqwC,MAASrwC,KAAK0wC,eAK3D,OAJA1wC,KAAK8vC,gBAAkB9vC,KAAKY,YAAc,IAC1CZ,KAAKs1C,YACLt1C,KAAKkvC,aACLlvC,KAAK20C,QAAQ,YAGb30C,KAAK8vC,gBAAkB9vC,KAAK8vC,gBAAkB9vC,KAAKY,WAG/D,MAAO,GAAIZ,KAAK8vC,gBAAkB,EAM9B,OALA9vC,KAAKm2C,gBACLn2C,KAAKkwC,WAAa,EACflwC,KAAKkwC,UAAY,IAChBlwC,KAAKkwC,UAAY,IAEJ,IAAdlwC,KAAKqwC,MAAmBrwC,KAAK0wC,gBAC5B1wC,KAAK8vC,gBAAkB,EACvB9vC,KAAKs1C,YACLt1C,KAAKkvC,aACLlvC,KAAK20C,QAAQ,cAGb30C,KAAK20C,QAAQ,gBACb30C,KAAK8vC,iBAAmB9vC,KAAKY,YAAcZ,KAAK8vC,iBAAmB9vC,KAAKY,iBACxEZ,KAAKs1C,aAKbt1C,KAAKs1C,WACT,EAEApH,cAAc1+B,UAAUs/B,SAAW,SAAUlxC,GACzCoC,KAAKgwC,UAAYpyC,EACjBoC,KAAKi1C,mBACT,EAEA/G,cAAc1+B,UAAUu/B,aAAe,SAAUnxC,GAC7CoC,KAAKiwC,cAAgBryC,EAAM,GAAK,EAAI,EACpCoC,KAAKi1C,mBACT,EAEA/G,cAAc1+B,UAAUylC,kBAAoB,WACxCj1C,KAAKy1C,cAAgBz1C,KAAK+vC,UAAY/vC,KAAKgwC,UAAYhwC,KAAKiwC,aAChE,EAEA/B,cAAc1+B,UAAUknC,QAAU,WAC9B,OAAO12C,KAAKuY,IAChB,EAEA21B,cAAc1+B,UAAU6f,cAAgB,SAAUC,GAC9C,IAAI/W,EAAO,GACX,GAAGvY,KAAKuvB,WAAW,CACf,IAAIC,EAAYF,EAAUjtB,GACW,IAAlCmtB,EAAUC,QAAQ,aACjBD,EAAYA,EAAU5W,MAAM,KAAK,IAErCL,EAAOvY,KAAKuvB,WAAaC,CAC7B,MACIjX,EAAOvY,KAAKuY,KACZA,GAAQ+W,EAAUI,EAAIJ,EAAUI,EAAI,GACpCnX,GAAQ+W,EAAUjtB,EAEtB,OAAOkW,CACX,EAEA21B,cAAc1+B,UAAUmuB,aAAe,SAAUnnB,GAE7C,IADA,IAAInZ,EAAI,EAAGI,EAAMuC,KAAKmZ,OAAOzb,OACtBL,EAAII,GAAK,CACZ,GAAG+Y,GAAMxW,KAAKmZ,OAAO9b,GAAGmZ,GACpB,OAAOxW,KAAKmZ,OAAO9b,GAEvBA,GAAK,CACT,CACJ,EAEA6wC,cAAc1+B,UAAUqvB,KAAO,WAC3B7+B,KAAKmkB,SAAS0a,MAClB,EAEAqP,cAAc1+B,UAAUsvB,KAAO,WAC3B9+B,KAAKmkB,SAAS2a,MAClB,EAEAoP,cAAc1+B,UAAUmnC,UAAY,WAChC,OAAO32C,KAAKmZ,MAChB,EAEA+0B,cAAc1+B,UAAUmlC,QAAU,SAAS/2B,GACvC,GAAG5d,KAAKkB,MAAQlB,KAAKkB,KAAK0c,GACtB,OAAOA,GACH,IAAK,aACD5d,KAAK42C,aAAah5B,EAAK,IAAIje,kBAAkBie,EAAK5d,KAAKu+B,aAAav+B,KAAKY,YAAYZ,KAAK+vC,YAC1F,MACJ,IAAK,eACD/vC,KAAK42C,aAAah5B,EAAK,IAAItd,oBAAoBsd,EAAK5d,KAAKqwC,KAAKrwC,KAAKkwC,UAAUlwC,KAAK+vC,YAClF,MACJ,IAAK,WACD/vC,KAAK42C,aAAah5B,EAAK,IAAIvd,gBAAgBud,EAAK5d,KAAK+vC,YACrD,MACJ,IAAK,eACD/vC,KAAK42C,aAAah5B,EAAK,IAAInd,oBAAoBmd,EAAK5d,KAAKW,WAAWX,KAAKY,cACzE,MACJ,IAAK,UACDZ,KAAK42C,aAAah5B,EAAK,IAAI/c,eAAe+c,EAAK5d,OAC/C,MACJ,QACIA,KAAK42C,aAAah5B,GAGlB,eAATA,GAAyB5d,KAAKq2C,cAC7Br2C,KAAKq2C,aAAahlC,KAAKrR,KAAK,IAAIL,kBAAkBie,EAAK5d,KAAKu+B,aAAav+B,KAAKY,YAAYZ,KAAK+vC,YAEvF,iBAATnyB,GAA2B5d,KAAKs2C,gBAC/Bt2C,KAAKs2C,eAAejlC,KAAKrR,KAAK,IAAIM,oBAAoBsd,EAAK5d,KAAKqwC,KAAKrwC,KAAKkwC,UAAUlwC,KAAK+vC,YAEjF,aAATnyB,GAAuB5d,KAAKu2C,YAC3Bv2C,KAAKu2C,WAAWllC,KAAKrR,KAAK,IAAIK,gBAAgBud,EAAK5d,KAAK+vC,YAEhD,iBAATnyB,GAA2B5d,KAAKw2C,gBAC/Bx2C,KAAKw2C,eAAenlC,KAAKrR,KAAK,IAAIS,oBAAoBmd,EAAK5d,KAAKW,WAAWX,KAAKY,cAExE,YAATgd,GAAsB5d,KAAKy2C,WAC1Bz2C,KAAKy2C,UAAUplC,KAAKrR,KAAK,IAAIa,eAAe+c,EAAK5d,MAEzD,EAEAkuC,cAAc1+B,UAAUqgB,iBAAmB9uB,kBAC3CmtC,cAAc1+B,UAAUpO,oBAAsBE,qBAC9C4sC,cAAc1+B,UAAUonC,aAAep1C,cAmCvCgQ,gBAAgB6mB,aAAauY,gBAE7BA,eAAephC,UAAU2sB,WAAa,SAAU/kB,GAC5C,OAAO,IAAIu6B,cAAcv6B,EAAMpX,KAAMA,KAAKigB,WAC9C,EAEA2wB,eAAephC,UAAUwsB,YAAc,SAAU5kB,GAC7C,OAAO,IAAIk7B,eAAel7B,EAAMpX,KAAMA,KAAKigB,WAC/C,EAEA2wB,eAAephC,UAAUysB,WAAa,SAAU7kB,GAC5C,OAAO,IAAIo7B,cAAcp7B,EAAMpX,KAAMA,KAAKigB,WAC9C,EAEA2wB,eAAephC,UAAUqsB,YAAc,SAAUzkB,GAC7C,OAAO,IAAIg7B,eAAeh7B,EAAMpX,KAAMA,KAAKigB,WAC/C,EAEA2wB,eAAephC,UAAUssB,WAAa,SAAU1kB,GAC5C,OAAO,IAAIy6B,cAAcz6B,EAAMpX,KAAMA,KAAKigB,WAC9C,EAEA2wB,eAAephC,UAAUusB,YAAc,SAAU3kB,GAC7C,OAAO,IAAIm7B,eAAen7B,EAAMpX,KAAMA,KAAKigB,WAC/C,EAEA2wB,eAAephC,UAAUqnC,aAAe,SAASjyC,GAC7C,GAAgB,IAAbA,EAAM,IAAyB,IAAbA,EAAM,IAAyB,IAAbA,EAAM,IAAyB,IAAbA,EAAM,IAA0B,IAAdA,EAAM,KAA2B,IAAdA,EAAM,IAGpG,GAAI5E,KAAKy4B,aAAaoY,YAAtB,CAIA7wC,KAAKuxC,aAAapoC,eAAevE,GACjC5E,KAAKuxC,aAAa1qC,UAAU7G,KAAKixC,YAAYI,IAAIzsC,MAAM,GAAG5E,KAAKixC,YAAYI,IAAIzsC,MAAM,GAAG5E,KAAKixC,YAAYI,IAAIzsC,MAAM,GAAG5E,KAAKixC,YAAYI,IAAIzsC,MAAM,GAAG5E,KAAKixC,YAAYI,IAAIzsC,MAAM,GAAG5E,KAAKixC,YAAYI,IAAIzsC,MAAM,GAAG5E,KAAKixC,YAAYI,IAAIzsC,MAAM,GAAG5E,KAAKixC,YAAYI,IAAIzsC,MAAM,GAAG5E,KAAKixC,YAAYI,IAAIzsC,MAAM,GAAG5E,KAAKixC,YAAYI,IAAIzsC,MAAM,GAAG5E,KAAKixC,YAAYI,IAAIzsC,MAAM,IAAI5E,KAAKixC,YAAYI,IAAIzsC,MAAM,IAAI5E,KAAKixC,YAAYI,IAAIzsC,MAAM,IAAI5E,KAAKixC,YAAYI,IAAIzsC,MAAM,IAAI5E,KAAKixC,YAAYI,IAAIzsC,MAAM,IAAI5E,KAAKixC,YAAYI,IAAIzsC,MAAM,KAE9f5E,KAAKixC,YAAYI,IAAIloC,eAAenJ,KAAKuxC,aAAa3sC,OACtD,IAAIkyC,EAAU92C,KAAKixC,YAAYI,IAAIzsC,MACnC5E,KAAK4xC,cAAc1rC,aAAa4wC,EAAQ,GAAGA,EAAQ,GAAGA,EAAQ,GAAGA,EAAQ,GAAGA,EAAQ,IAAIA,EAAQ,IANhG,MAFI92C,KAAK4xC,cAAc/qC,UAAUjC,EAAM,GAAGA,EAAM,GAAGA,EAAM,GAAGA,EAAM,GAAGA,EAAM,IAAIA,EAAM,IASzF,EAEAgsC,eAAephC,UAAUunC,WAAa,SAAS5c,GACjC,IAAPA,IAGCn6B,KAAKy4B,aAAaoY,aAItB7wC,KAAKixC,YAAYK,IAAMnX,EAAK,EAAI,EAAIA,EACpCn6B,KAAK4xC,cAAcoF,YAAch3C,KAAKixC,YAAYK,IAJ9CtxC,KAAK4xC,cAAcoF,aAAe7c,EAAK,EAAI,EAAIA,EAKvD,EAEAyW,eAAephC,UAAU7K,MAAQ,WACzB3E,KAAKy4B,aAAaoY,aAItB7wC,KAAKixC,YAAYG,QAAU,EAC3BpxC,KAAKixC,YAAYI,IAAI1sC,QACrB3E,KAAKixC,YAAYK,GAAK,GALlBtxC,KAAK4xC,cAAcqF,SAM3B,EAEArG,eAAephC,UAAU0nC,KAAO,SAASC,GACrC,GAAIn3C,KAAKy4B,aAAaoY,YAAtB,CAIGsG,GACCn3C,KAAK4xC,cAAcsF,OAEvB,IAAItyC,EAAQ5E,KAAKixC,YAAYI,IAAIzsC,MACuB,OAArD5E,KAAKixC,YAAYC,MAAMlxC,KAAKixC,YAAYG,eAA0ExvC,IAArD5B,KAAKixC,YAAYC,MAAMlxC,KAAKixC,YAAYG,WACpGpxC,KAAKixC,YAAYC,MAAMlxC,KAAKixC,YAAYG,SAAW,IAAItzC,MAAM,KAEjE,IAAIT,EAAE8M,EAAMnK,KAAKixC,YAAYC,MAAMlxC,KAAKixC,YAAYG,SACpD,IAAI/zC,EAAE,EAAEA,EAAE,GAAGA,GAAG,EACZ8M,EAAI9M,GAAKuH,EAAMvH,GAEnB2C,KAAKixC,YAAYE,QAAQnxC,KAAKixC,YAAYG,SAAWpxC,KAAKixC,YAAYK,GACtEtxC,KAAKixC,YAAYG,SAAW,CAb5B,MAFIpxC,KAAK4xC,cAAcsF,MAgB3B,EAEAtG,eAAephC,UAAUynC,QAAU,SAASE,GACxC,GAAIn3C,KAAKy4B,aAAaoY,YAAtB,CAIGsG,GACCn3C,KAAK4xC,cAAcqF,UAEvBj3C,KAAKixC,YAAYG,SAAW,EAC5B,IACI/zC,EADA+5C,EAASp3C,KAAKixC,YAAYC,MAAMlxC,KAAKixC,YAAYG,SAC/CjnC,EAAMnK,KAAKixC,YAAYI,IAAIzsC,MACjC,IAAIvH,EAAE,EAAEA,EAAE,GAAGA,GAAG,EACZ8M,EAAI9M,GAAK+5C,EAAO/5C,GAEpB2C,KAAK4xC,cAAc1rC,aAAakxC,EAAO,GAAGA,EAAO,GAAGA,EAAO,GAAGA,EAAO,GAAGA,EAAO,IAAIA,EAAO,KAC1FA,EAASp3C,KAAKixC,YAAYE,QAAQnxC,KAAKixC,YAAYG,SACnDpxC,KAAKixC,YAAYK,GAAK8F,EACtBp3C,KAAK4xC,cAAcoF,YAAcI,CAbjC,MAFIp3C,KAAK4xC,cAAcqF,SAgB3B,EAEArG,eAAephC,UAAU+tB,gBAAkB,SAASC,GAC7Cx9B,KAAKu4B,cAAcmF,SAClB19B,KAAKu4B,cAAcsP,UAAY1tB,SAASpJ,cAAc,UACtD/Q,KAAKu4B,cAAcsP,UAAUnpC,MAAMqM,MAAQ,OAC3C/K,KAAKu4B,cAAcsP,UAAUnpC,MAAM++B,OAAS,OAG5Cz9B,KAAKu4B,cAAcsP,UAAUnpC,MAAMK,gBAAkBiB,KAAKu4B,cAAcsP,UAAUnpC,MAAM24C,mBAAqBr3C,KAAKu4B,cAAcsP,UAAUnpC,MAAMM,sBAAwBgB,KAAKu4B,cAAcsP,UAAUnpC,MAAM,qBAAuB,cAClOsB,KAAKu4B,cAAcmF,QAAQ9iB,YAAY5a,KAAKu4B,cAAcsP,WAC1D7nC,KAAK4xC,cAAgB5xC,KAAKu4B,cAAcsP,UAAUnrB,WAAW,MAC1D1c,KAAKy4B,aAAajc,WACjBxc,KAAKu4B,cAAcsP,UAAUtqB,aAAa,QAASvd,KAAKy4B,aAAajc,YAGzExc,KAAK4xC,cAAgB5xC,KAAKy4B,aAAaqY,QAE3C9wC,KAAKoX,KAAOomB,EACZx9B,KAAKigB,WAAW2xB,cAAgB5xC,KAAK4xC,cACrC5xC,KAAKigB,WAAWkE,SAAWnkB,KAC3BA,KAAKigB,WAAWq3B,UAAW,EAC3Bt3C,KAAKigB,WAAWrf,YAAczE,KAAKU,MAAM2gC,EAASgX,IAClDx0C,KAAKigB,WAAW+xB,UAAYxU,EAASziB,EACrC/a,KAAKigB,WAAW8xB,WAAavU,EAASz7B,EACtC/B,KAAKigB,WAAWkD,UAAYqa,EAASK,GACrC79B,KAAKigB,WAAWC,QAAU,EAC1BlgB,KAAKigB,WAAW2d,SAAW,CACvB7iB,EAAGyiB,EAASziB,EACZhZ,EAAGy7B,EAASz7B,GAEhB/B,KAAKigB,WAAW0Y,gBAAkB34B,KAAKy4B,aAAaE,gBACpD34B,KAAK8W,OAAS0mB,EAAS1mB,OACvB9W,KAAKu3C,gBAAkB,CAAC,EACxBv3C,KAAKu3C,gBAAgBx8B,EAAIyiB,EAASziB,EAClC/a,KAAKu3C,gBAAgBx1C,EAAIy7B,EAASz7B,EAClC/B,KAAKigB,WAAWjJ,YAAc,IAAI8C,YAClC9Z,KAAKigB,WAAWjJ,YAAY4F,SAAS4gB,EAAS77B,OAC9C3B,KAAKigB,WAAWjJ,YAAY+F,SAASygB,EAASviB,MAAMd,SAASU,MAC7D7a,KAAKigB,WAAW0d,aAAe39B,KAAKu4B,cAAcoF,aAAat8B,KAAKrB,KAAKu4B,eACzEv4B,KAAKigB,WAAWoP,cAAgBrvB,KAAKu4B,cAAclJ,cAAchuB,KAAKrB,KAAKu4B,eAC3Ev4B,KAAKigB,WAAWo1B,cAAgBr1C,KAAKu4B,cAAc8c,cAAch0C,KAAKrB,KAAKu4B,eAC3Ev4B,KAAKigB,WAAWgd,kBAAoBj9B,KAAKu4B,cAAc0E,kBAAkB57B,KAAKrB,KAAKu4B,eACnFv4B,KAAKigB,WAAWs3B,gBAAkBv3C,KAAKu3C,gBACvCv3C,KAAK0tB,SAAW5vB,MAAMC,MAAM,KAAK,CAACL,OAAO8/B,EAAS1mB,OAAOpZ,SAEzDsC,KAAKg+B,qBACT,EAEA4S,eAAephC,UAAUwuB,oBAAsB,WAC3C,IAAIwZ,EAAaC,EAUbC,EAAWC,EACf,GAVG33C,KAAKu4B,cAAcmF,SAAW19B,KAAKu4B,cAAcsP,WAChD2P,EAAex3C,KAAKu4B,cAAcmF,QAAQ5iB,YAC1C28B,EAAgBz3C,KAAKu4B,cAAcmF,QAAQka,aAC3C53C,KAAKu4B,cAAcsP,UAAUtqB,aAAa,QAAQi6B,EAAex3C,KAAKy4B,aAAasY,KACnF/wC,KAAKu4B,cAAcsP,UAAUtqB,aAAa,SAASk6B,EAAgBz3C,KAAKy4B,aAAasY,OAErFyG,EAAex3C,KAAK4xC,cAAcO,OAAOpnC,MAAQ/K,KAAKy4B,aAAasY,IACnE0G,EAAgBz3C,KAAK4xC,cAAcO,OAAO1U,OAASz9B,KAAKy4B,aAAasY,MAGX,IAA3D/wC,KAAKy4B,aAAaC,oBAAoBjJ,QAAQ,UAA8E,IAA5DzvB,KAAKy4B,aAAaC,oBAAoBjJ,QAAQ,SAAgB,CAC7H,IAAIooB,EAAM73C,KAAKy4B,aAAaC,oBAAoB9f,MAAM,KAClDk/B,EAAWD,EAAI,IAAM,OACrB/xB,EAAM+xB,EAAI,IAAM,WAChBvkB,EAAOxN,EAAIqR,OAAO,EAAE,GACpB5D,EAAOzN,EAAIqR,OAAO,GACtBugB,EAAaF,EAAaC,GAC1BE,EAAe33C,KAAKu3C,gBAAgBx8B,EAAE/a,KAAKu3C,gBAAgBx1C,GAC3C21C,GAA2B,SAAbI,GAAuBH,EAAaD,GAA2B,UAAbI,GAC5E93C,KAAKu3C,gBAAgB/xC,GAAKgyC,GAAcx3C,KAAKu3C,gBAAgBx8B,EAAE/a,KAAKy4B,aAAasY,KACjF/wC,KAAKu3C,gBAAgB9xC,GAAK+xC,GAAcx3C,KAAKu3C,gBAAgBx8B,EAAE/a,KAAKy4B,aAAasY,OAEjF/wC,KAAKu3C,gBAAgB/xC,GAAKiyC,GAAez3C,KAAKu3C,gBAAgBx1C,EAAI/B,KAAKy4B,aAAasY,KACpF/wC,KAAKu3C,gBAAgB9xC,GAAKgyC,GAAez3C,KAAKu3C,gBAAgBx1C,EAAI/B,KAAKy4B,aAAasY,MAIpF/wC,KAAKu3C,gBAAgB7wC,GADb,SAAT4sB,IAAqBqkB,EAAaD,GAAyB,SAAXI,GAAuBH,EAAaD,GAA2B,UAAbI,IACtEN,EAAax3C,KAAKu3C,gBAAgBx8B,GAAG08B,EAAcz3C,KAAKu3C,gBAAgBx1C,IAAI,EAAE/B,KAAKy4B,aAAasY,IAC5G,SAATzd,IAAqBqkB,EAAaD,GAAyB,SAAXI,GAAuBH,EAAaD,GAA2B,UAAbI,IAC7EN,EAAax3C,KAAKu3C,gBAAgBx8B,GAAG08B,EAAcz3C,KAAKu3C,gBAAgBx1C,IAAI/B,KAAKy4B,aAAasY,IAE/F,EAG1B/wC,KAAKu3C,gBAAgB5wC,GADb,SAAT4sB,IAAqBokB,EAAaD,GAAyB,SAAXI,GAAuBH,EAAaD,GAA2B,UAAbI,IACrEL,EAAcz3C,KAAKu3C,gBAAgBx1C,GAAGy1C,EAAax3C,KAAKu3C,gBAAgBx8B,IAAI,EAAG/a,KAAKy4B,aAAasY,IAC9G,SAATxd,IAAqBokB,EAAaD,GAAyB,SAAXI,GAAuBH,EAAaD,GAA2B,UAAbI,IAC5EL,EAAcz3C,KAAKu3C,gBAAgBx1C,GAAGy1C,EAAax3C,KAAKu3C,gBAAgBx8B,IAAK/a,KAAKy4B,aAAasY,IAEjG,CAGlC,KAAkD,QAAzC/wC,KAAKy4B,aAAaC,qBACvB14B,KAAKu3C,gBAAgB/xC,GAAKgyC,GAAcx3C,KAAKu3C,gBAAgBx8B,EAAE/a,KAAKy4B,aAAasY,KACjF/wC,KAAKu3C,gBAAgB9xC,GAAKgyC,GAAez3C,KAAKu3C,gBAAgBx1C,EAAE/B,KAAKy4B,aAAasY,KAClF/wC,KAAKu3C,gBAAgB7wC,GAAK,EAC1B1G,KAAKu3C,gBAAgB5wC,GAAK,IAE1B3G,KAAKu3C,gBAAgB/xC,GAAKxF,KAAKy4B,aAAasY,IAC5C/wC,KAAKu3C,gBAAgB9xC,GAAKzF,KAAKy4B,aAAasY,IAC5C/wC,KAAKu3C,gBAAgB7wC,GAAK,EAC1B1G,KAAKu3C,gBAAgB5wC,GAAK,GAE9B3G,KAAKu3C,gBAAgB3yC,MAAQ,CAAC5E,KAAKu3C,gBAAgB/xC,GAAG,EAAE,EAAE,EAAE,EAAExF,KAAKu3C,gBAAgB9xC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAEzF,KAAKu3C,gBAAgB7wC,GAAG1G,KAAKu3C,gBAAgB5wC,GAAG,EAAE,GACpJ,IAAItJ,EAAGI,EAAMuC,KAAK0tB,SAAShwB,OAC3B,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACV2C,KAAK0tB,SAASrwB,IAAmC,IAA7B2C,KAAK0tB,SAASrwB,GAAG+Z,KAAKzQ,IACzC3G,KAAK0tB,SAASrwB,GAAGqyC,OAAO1vC,KAAKigB,WAAWs3B,gBAGpD,EAEA3G,eAAephC,UAAUuuB,QAAU,WAI/B,IAAI1gC,EACJ,IAJG2C,KAAKy4B,aAAaoY,cACjB7wC,KAAKu4B,cAAcmF,QAAQpjB,UAAY,IAGtCjd,GADQ2C,KAAK8W,OAAS9W,KAAK8W,OAAOpZ,OAAS,GACjC,EAAGL,GAAK,EAAGA,GAAG,EACtB2C,KAAK0tB,SAASrwB,IACb2C,KAAK0tB,SAASrwB,GAAG0gC,UAGzB/9B,KAAK0tB,SAAShwB,OAAS,EACvBsC,KAAKigB,WAAW2xB,cAAgB,KAChC5xC,KAAKu4B,cAAcsP,UAAY,KAC/B7nC,KAAK+4B,WAAY,CACrB,EAEA6X,eAAephC,UAAU8uB,YAAc,SAASv6B,GAC5C,KAAI/D,KAAKqgB,eAAiBtc,IAAyC,IAAlC/D,KAAKy4B,aAAaoY,aAAyB7wC,KAAK+4B,WAAqB,OAARh1B,GAA9F,CAGA/D,KAAKqgB,cAAgBtc,EACrB/D,KAAKigB,WAAW7B,SAAWra,EAAM/D,KAAKu4B,cAAc53B,WACpDX,KAAKigB,WAAWC,SAAW,EAC3BlgB,KAAKigB,WAAWyc,iBAAiB6B,aAAex6B,GACX,IAAlC/D,KAAKy4B,aAAaoY,aACjB7wC,KAAK2E,QACL3E,KAAK4xC,cAAcsF,OAEnBl3C,KAAK4xC,cAAcmG,UAAU/3C,KAAKu3C,gBAAgB7wC,GAAI1G,KAAKu3C,gBAAgB5wC,GAAI3G,KAAKu3C,gBAAgBx8B,EAAE/a,KAAKu3C,gBAAgB/xC,GAAIxF,KAAKu3C,gBAAgBx1C,EAAE/B,KAAKu3C,gBAAgB9xC,KAE3KzF,KAAKk3C,OAETl3C,KAAK62C,aAAa72C,KAAKu3C,gBAAgB3yC,OACvC5E,KAAK4xC,cAAcoG,YACnBh4C,KAAK4xC,cAAczY,KAAK,EAAE,EAAEn5B,KAAKu3C,gBAAgBx8B,EAAE/a,KAAKu3C,gBAAgBx1C,GACxE/B,KAAK4xC,cAAcqG,YACnBj4C,KAAK4xC,cAAcsG,OAInB,IAAI76C,EAAGI,EAAMuC,KAAK8W,OAAOpZ,OAKzB,IAJIsC,KAAK6W,gBACL7W,KAAKu7B,YAAYx3B,GAGhB1G,EAAI,EAAGA,EAAII,EAAKJ,KACd2C,KAAK6W,gBAAkB7W,KAAK0tB,SAASrwB,KACpC2C,KAAK0tB,SAASrwB,GAAGmhC,aAAaz6B,EAAM/D,KAAK8W,OAAOzZ,GAAGgkB,IAG3D,IAAKhkB,EAAII,EAAM,EAAGJ,GAAK,EAAGA,GAAG,GACtB2C,KAAK6W,gBAAkB7W,KAAK0tB,SAASrwB,KACpC2C,KAAK0tB,SAASrwB,GAAGihC,eAGY,IAAlCt+B,KAAKy4B,aAAaoY,YACjB7wC,KAAKi3C,UAELj3C,KAAK4xC,cAAcqF,SAvCvB,CAyCJ,EAEArG,eAAephC,UAAUisB,UAAY,SAAS3V,GAC1C,IAAI4H,EAAW1tB,KAAK0tB,SACpB,IAAGA,EAAS5H,IAA+B,IAAvB9lB,KAAK8W,OAAOgP,GAAKnf,GAArC,CAGA,IAAIlI,EAAUuB,KAAK27B,WAAW37B,KAAK8W,OAAOgP,GAAM9lB,KAAKA,KAAKigB,YAC1DyN,EAAS5H,GAAOrnB,EAChBA,EAAQy/B,kBACmB,IAAxBl+B,KAAK8W,OAAOgP,GAAKnf,IAChBlI,EAAQixC,OAAO1vC,KAAKigB,WAAWs3B,gBALnC,CAOJ,EAEA3G,eAAephC,UAAUksB,qBAAwB,WAC7C,KAAM17B,KAAK84B,gBAAgBp7B,QACTsC,KAAK84B,gBAAgBrN,MAC3B4S,gBAEhB,EAEAuS,eAAephC,UAAUqvB,KAAO,WAC5B7+B,KAAKu4B,cAAcsP,UAAUnpC,MAAMI,QAAU,MACjD,EAEA8xC,eAAephC,UAAUsvB,KAAO,WAC5B9+B,KAAKu4B,cAAcsP,UAAUnpC,MAAMI,QAAU,OACjD,EAEA8xC,eAAephC,UAAUuvB,wBAA0B,SAAS5lB,GACxD,IAAI9b,EAAGI,EAAM0b,EAAOzb,OAEpB,IADwByc,SAASiC,gBAAgB3gB,MAAM,KACnD4B,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb,GAAG8b,EAAO9b,GAAG4hC,GAAG,CACZ,IAAI7e,EAAOpgB,KAAK87B,WAAW3iB,EAAO9b,GAAG2C,KAAKigB,WAAWG,KAAKpgB,KAAKigB,YAC/DG,EAAK8d,kBAGLl+B,KAAKigB,WAAWyc,iBAAiBuB,oBAAoB7d,EACzD,CAER,EAqBA5O,gBAAgB6mB,aAAamZ,gBAE7BA,eAAehiC,UAAUisB,UAAYnD,YAAY9oB,UAAUisB,UAE3D+V,eAAehiC,UAAUksB,qBAAwB,WAC7C,KAAM17B,KAAK84B,gBAAgBp7B,QACTsC,KAAK84B,gBAAgBrN,MAC3B4S,gBAEhB,EAEAmT,eAAehiC,UAAU2uB,mBAAqB,SAAS1/B,EAASqnB,GAC5D,IAAIqyB,EAAgB15C,EAAQigC,iBAC5B,GAAIyZ,EAAJ,CAGA,IAAIvc,EAAQ57B,KAAK8W,OAAOgP,GACxB,GAAI8V,EAAMwc,KAAQp4C,KAAKynC,WAoBnBznC,KAAKq4C,iBAAiBF,EAAcryB,OApBN,CAG9B,IAFA,IACIwyB,EAAgBC,EADhBl7C,EAAI,EAEFA,EAAEyoB,GACD9lB,KAAK0tB,SAASrwB,KAA0B,IAApB2C,KAAK0tB,SAASrwB,IAAc2C,KAAK0tB,SAASrwB,GAAGqhC,iBAChE6Z,EAAYv4C,KAAK0tB,SAASrwB,GAC1Bi7C,EAAiBt4C,KAAK8W,OAAOzZ,GAAG+6C,IAAMp4C,KAAKw4C,wBAAwBn7C,GAAKk7C,EAAU7Z,kBAEtFrhC,GAAK,EAENi7C,EACK1c,EAAMwc,KAAQp4C,KAAKynC,YACnBznC,KAAKk9B,aAAa0B,aAAauZ,EAAeG,GAG9C1c,EAAMwc,KAAQp4C,KAAKynC,YACnBznC,KAAKk9B,aAAatiB,YAAYu9B,EAG1C,CArBA,CAwBJ,EAGA3G,eAAehiC,UAAU2sB,WAAa,SAAU/kB,GAC5C,OAAO,IAAIqjB,eAAerjB,EAAMpX,KAAKk9B,aAAal9B,KAAKigB,WAAWjgB,KACtE,EAEAwxC,eAAehiC,UAAUwsB,YAAc,SAAU5kB,GAC7C,OAAIpX,KAAKynC,WAGF,IAAIyL,cAAc97B,EAAMpX,KAAKk9B,aAAal9B,KAAKigB,WAAWjgB,MAFtD,IAAIg7B,cAAc5jB,EAAMpX,KAAKk9B,aAAal9B,KAAKigB,WAAWjgB,KAGzE,EAEAwxC,eAAehiC,UAAUysB,WAAa,SAAU7kB,GAC5C,OAAIpX,KAAKynC,WAGF,IAAIgR,aAAarhC,EAAMpX,KAAKk9B,aAAal9B,KAAKigB,WAAWjgB,MAFrD,IAAIm9B,eAAe/lB,EAAMpX,KAAKk9B,aAAal9B,KAAKigB,WAAWjgB,KAG1E,EAEAwxC,eAAehiC,UAAU0sB,aAAe,SAAU9kB,GAE9C,OADApX,KAAK0xC,OAAS,IAAIgH,eAAethC,EAAMpX,KAAKk9B,aAAal9B,KAAKigB,WAAWjgB,MAClEA,KAAK0xC,MAChB,EAEAF,eAAehiC,UAAUqsB,YAAc,SAAUzkB,GAC7C,OAAIpX,KAAKynC,WAGF,IAAIkR,cAAcvhC,EAAMpX,KAAKk9B,aAAal9B,KAAKigB,WAAWjgB,MAFtD,IAAIo9B,cAAchmB,EAAMpX,KAAKk9B,aAAal9B,KAAKigB,WAAWjgB,KAGzE,EAEAwxC,eAAehiC,UAAUssB,WAAa,SAAU1kB,GAC5C,OAAIpX,KAAKynC,WAGF,IAAIwL,aAAa77B,EAAMpX,KAAKk9B,aAAal9B,KAAKigB,WAAWjgB,MAFrD,IAAIq9B,aAAajmB,EAAMpX,KAAKk9B,aAAal9B,KAAKigB,WAAWjgB,KAIxE,EAEAwxC,eAAehiC,UAAUusB,YAAc,SAAU3kB,GAC7C,OAAIpX,KAAKynC,WAGF,IAAIuL,cAAc57B,EAAMpX,KAAKk9B,aAAal9B,KAAKigB,WAAWjgB,MAFtD,IAAIs9B,cAAclmB,EAAMpX,KAAKk9B,aAAal9B,KAAKigB,WAAWjgB,KAGzE,EAEAwxC,eAAehiC,UAAUgpC,wBAA0B,SAAS1yB,GAExD,IADA,IAAIzoB,EAAI,EAAGI,EAAMuC,KAAKyxC,eAAe/zC,OAC/BL,EAAEI,GAAK,CACT,GAAGuC,KAAKyxC,eAAep0C,GAAGu7C,UAAY9yB,GAAO9lB,KAAKyxC,eAAep0C,GAAGw7C,QAAU/yB,EAC1E,OAAO9lB,KAAKyxC,eAAep0C,GAAGy7C,gBAElCz7C,GAAK,CACT,CACJ,EAEAm0C,eAAehiC,UAAUupC,sBAAwB,SAASjzB,GACtD,IAAIgzB,EAAkB3+B,SAASpJ,cAAc,OAC7CvS,SAASs6C,GACTA,EAAgBp6C,MAAMqM,MAAQ/K,KAAKigB,WAAW2d,SAAS7iB,EAAE,KACzD+9B,EAAgBp6C,MAAM++B,OAASz9B,KAAKigB,WAAW2d,SAAS77B,EAAE,KAC1D+2C,EAAgBp6C,MAAMK,gBAAkB+5C,EAAgBp6C,MAAM24C,mBAAqByB,EAAgBp6C,MAAMM,sBAAwB,UACjI,IAAI6oC,EAAY1tB,SAASpJ,cAAc,OACvCvS,SAASqpC,GACTA,EAAUnpC,MAAMmI,UAAYghC,EAAUnpC,MAAMs6C,gBAAkB,4CAC9DF,EAAgBl+B,YAAYitB,GAC5B7nC,KAAKi5C,YAAYr+B,YAAYk+B,GAC7B,IAAII,EAAsB,CACtBrR,UAAUA,EACViR,gBAAgBA,EAChBF,SAAU9yB,EACV+yB,OAAQ/yB,GAGZ,OADA9lB,KAAKyxC,eAAetwC,KAAK+3C,GAClBA,CACX,EAEA1H,eAAehiC,UAAU2pC,kBAAoB,WACzC,IAAI97C,EACA+7C,EADG37C,EAAMuC,KAAK8W,OAAOpZ,OAEzB,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACV2C,KAAK8W,OAAOzZ,GAAG+6C,KACVgB,IACAA,EAA0Bp5C,KAAK+4C,sBAAsB17C,IAEzD+7C,EAAwBP,OAAS18C,KAAKY,IAAIq8C,EAAwBP,OAAOx7C,IAEzE+7C,EAA0B,IAGtC,EAEA5H,eAAehiC,UAAU6oC,iBAAmB,SAASr4B,EAAK8F,GAEtD,IADA,IAAIzoB,EAAI,EAAGI,EAAMuC,KAAKyxC,eAAe/zC,OAC/BL,EAAEI,GAAI,CACR,GAAGqoB,GAAO9lB,KAAKyxC,eAAep0C,GAAGw7C,OAAO,CAGpC,IAFA,IACIla,EADAt4B,EAAIrG,KAAKyxC,eAAep0C,GAAGu7C,SAEzBvyC,EAAEyf,GACD9lB,KAAK0tB,SAASrnB,IAAMrG,KAAK0tB,SAASrnB,GAAGq4B,iBACpCC,EAAc3+B,KAAK0tB,SAASrnB,GAAGq4B,kBAEnCr4B,GAAK,EAENs4B,EACC3+B,KAAKyxC,eAAep0C,GAAGwqC,UAAUjJ,aAAa5e,EAAM2e,GAEpD3+B,KAAKyxC,eAAep0C,GAAGwqC,UAAUjtB,YAAYoF,GAEjD,KACJ,CACA3iB,GAAK,CACT,CACJ,EAEAm0C,eAAehiC,UAAU+tB,gBAAkB,SAASC,GAChD,IAAIyb,EAAc9+B,SAASpJ,cAAc,OACrC2sB,EAAU19B,KAAKu4B,cAAcmF,QACjCub,EAAYv6C,MAAMqM,MAAQyyB,EAASziB,EAAE,KACrCk+B,EAAYv6C,MAAM++B,OAASD,EAASz7B,EAAE,KACtC/B,KAAKi5C,YAAcA,EACnBz6C,SAASy6C,GACTA,EAAYv6C,MAAMS,eAAiB85C,EAAYv6C,MAAMU,qBAAuB65C,EAAYv6C,MAAMW,kBAAoB,OAC/GW,KAAKy4B,aAAajc,WACnBkhB,EAAQngB,aAAa,QAASvd,KAAKy4B,aAAajc,WAElDkhB,EAAQ9iB,YAAYq+B,GAEpBA,EAAYv6C,MAAMyM,SAAW,SAC7B,IAAIkuC,EAAMl/B,SAASiC,gBAAgB3gB,MAAM,OACzC49C,EAAI97B,aAAa,QAAQ,KACzB87B,EAAI97B,aAAa,SAAS,KAC1B/e,SAAS66C,GACTr5C,KAAKi5C,YAAYr+B,YAAYy+B,GAC7B,IAAIr8B,EAAO7C,SAASiC,gBAAgB3gB,MAAM,QAC1C49C,EAAIz+B,YAAYoC,GAChBhd,KAAKigB,WAAWjD,KAAOA,EACvBhd,KAAKoX,KAAOomB,EAEZx9B,KAAKigB,WAAW0d,aAAe39B,KAAKu4B,cAAcoF,aAAat8B,KAAKrB,KAAKu4B,eACzEv4B,KAAKigB,WAAWoP,cAAgBrvB,KAAKu4B,cAAclJ,cAAchuB,KAAKrB,KAAKu4B,eAC3Ev4B,KAAKigB,WAAWo1B,cAAgBr1C,KAAKu4B,cAAc8c,cAAch0C,KAAKrB,KAAKu4B,eAC3Ev4B,KAAKigB,WAAWC,QAAU,EAC1BlgB,KAAKigB,WAAW2d,SAAW,CACvB7iB,EAAGyiB,EAASziB,EACZhZ,EAAGy7B,EAASz7B,GAEhB/B,KAAKigB,WAAWkD,UAAYqa,EAASK,GACrC79B,KAAK8W,OAAS0mB,EAAS1mB,OACvB9W,KAAKigB,WAAWjJ,YAAc,IAAI8C,YAClC9Z,KAAKigB,WAAWjJ,YAAY4F,SAAS4gB,EAAS77B,OAC9C3B,KAAKigB,WAAWjJ,YAAY+F,SAASygB,EAASviB,MAAMo+B,GACpDr5C,KAAKk9B,aAAel9B,KAAKi5C,YACzBj5C,KAAKm5C,oBACLn5C,KAAKg+B,qBACT,EAEAwT,eAAehiC,UAAUuuB,QAAU,WAC/B/9B,KAAKu4B,cAAcmF,QAAQpjB,UAAY,GACvCta,KAAKu4B,cAAcsP,UAAY,KAC/B7nC,KAAKigB,WAAWjD,KAAO,KACvB,IAAI3f,EAAGI,EAAMuC,KAAK8W,OAAS9W,KAAK8W,OAAOpZ,OAAS,EAChD,IAAKL,EAAI,EAAGA,EAAII,EAAKJ,IACjB2C,KAAK0tB,SAASrwB,GAAG0gC,UAErB/9B,KAAK0tB,SAAShwB,OAAS,EACvBsC,KAAK+4B,WAAY,EACjB/4B,KAAKu4B,cAAgB,IACzB,EAEAiZ,eAAehiC,UAAUwuB,oBAAsB,WAC3C,IAIIx4B,EAAGC,EAAGiB,EAAGC,EAJT6wC,EAAex3C,KAAKu4B,cAAcmF,QAAQ5iB,YAC1C28B,EAAgBz3C,KAAKu4B,cAAcmF,QAAQka,aAC3CF,EAAaF,EAAaC,EACXz3C,KAAKigB,WAAW2d,SAAS7iB,EAAE/a,KAAKigB,WAAW2d,SAAS77B,EAEvD21C,GACZlyC,EAAKgyC,EAAcx3C,KAAKigB,WAAW2d,SAAU,EAC7Cn4B,EAAK+xC,EAAcx3C,KAAKigB,WAAW2d,SAAU,EAC7Cl3B,EAAK,EACLC,GAAO8wC,EAAcz3C,KAAKigB,WAAW2d,SAAS77B,GAAGy1C,EAAax3C,KAAKigB,WAAW2d,SAAS7iB,IAAI,IAE3FvV,EAAKiyC,EAAez3C,KAAKigB,WAAW2d,SAAU,EAC9Cn4B,EAAKgyC,EAAez3C,KAAKigB,WAAW2d,SAAU,EAC9Cl3B,GAAM8wC,EAAax3C,KAAKigB,WAAW2d,SAAS7iB,GAAG08B,EAAcz3C,KAAKigB,WAAW2d,SAAS77B,IAAI,EAC1F4E,EAAK,GAET3G,KAAKi5C,YAAYv6C,MAAMmI,UAAY7G,KAAKi5C,YAAYv6C,MAAMs6C,gBAAkB,YAAcxzC,EAAK,YAAYC,EAAG,gBAAgBiB,EAAG,IAAIC,EAAG,OAC5I,EAEA6qC,eAAehiC,UAAU8uB,YAAchG,YAAY9oB,UAAU8uB,YAE7DkT,eAAehiC,UAAUqvB,KAAO,WAC5B7+B,KAAKi5C,YAAYv6C,MAAMI,QAAU,MACrC,EAEA0yC,eAAehiC,UAAUsvB,KAAO,WAC5B9+B,KAAKi5C,YAAYv6C,MAAMI,QAAU,OACrC,EAEA0yC,eAAehiC,UAAUmtB,UAAY,WAEjC,GADA38B,KAAKq8B,gBACFr8B,KAAK0xC,OACJ1xC,KAAK0xC,OAAO4H,YACT,CACH,IAEIj8C,EAFAk8C,EAASv5C,KAAKigB,WAAW2d,SAAS7iB,EAClCy+B,EAAUx5C,KAAKigB,WAAW2d,SAAS77B,EAChCtE,EAAMuC,KAAKyxC,eAAe/zC,OACjC,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb2C,KAAKyxC,eAAep0C,GAAGy7C,gBAAgBp6C,MAAM+6C,YAAcz5C,KAAKyxC,eAAep0C,GAAGy7C,gBAAgBp6C,MAAMg7C,kBAAoBv9C,KAAKM,KAAKN,KAAKI,IAAIg9C,EAAO,GAAKp9C,KAAKI,IAAIi9C,EAAQ,IAAM,IAE1L,CACJ,EAEAhI,eAAehiC,UAAUuvB,wBAA0B,SAAS5lB,GACxD,IAAI9b,EAAGI,EAAM0b,EAAOzb,OAChBshC,EAAoB7kB,SAASpJ,cAAc,OAC/C,IAAI1T,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb,GAAG8b,EAAO9b,GAAG4hC,GAAG,CACZ,IAAI7e,EAAOpgB,KAAK87B,WAAW3iB,EAAO9b,GAAG2hC,EAAkBh/B,KAAKigB,WAAWG,KAAK,MAC5EA,EAAK8d,kBACLl+B,KAAKigB,WAAWyc,iBAAiBuB,oBAAoB7d,EACzD,CAER,EAUArP,cAAcypB,YAAamX,eAE3BA,cAAcniC,UAAUmyB,eAAiB,WACrC3hC,KAAKq+B,gBACT,EAEAsT,cAAcniC,UAAUmqC,eAAiB,SAAS15B,GAC9C,GAAGA,EAAW25B,YAAc55C,KAAKoX,KAAK4pB,GAAI,CACtC/gB,EAAW25B,UAAY55C,KAAKoX,KAAK4pB,GAEjC,IAAID,EAAiB,GACrB,OAAQ/gC,KAAKoX,KAAK4pB,IACd,KAAK,EACDD,EAAiB,SACjB,MACJ,KAAK,EACDA,EAAiB,WACjB,MACJ,KAAK,EACDA,EAAiB,SACjB,MACJ,KAAK,EACDA,EAAiB,UACjB,MACJ,KAAK,EACDA,EAAiB,SACjB,MACJ,KAAK,EACDA,EAAiB,UACjB,MACJ,KAAK,EACDA,EAAiB,cACjB,MACJ,KAAK,EACDA,EAAiB,aACjB,MACJ,KAAK,EACDA,EAAiB,aACjB,MACJ,KAAK,EACDA,EAAiB,aACjB,MACJ,KAAK,GACDA,EAAiB,aACjB,MACJ,KAAK,GACDA,EAAiB,YACjB,MACJ,KAAK,GACDA,EAAiB,MACjB,MACJ,KAAK,GACDA,EAAiB,aACjB,MACJ,KAAK,GACDA,EAAiB,QACjB,MACJ,KAAK,GACDA,EAAiB,aAGzB9gB,EAAW2xB,cAAciI,yBAA2B9Y,CACxD,CACJ,EAGA4Q,cAAcniC,UAAU8uB,YAAc,SAAS0E,GAC3C,GAAoB,IAAjBhjC,KAAKoX,KAAKzQ,GACT,OAAO,EAIX,GAFI3G,KAAK25C,eAAgC,IAAjB35C,KAAKoX,KAAKzQ,GAAS3G,KAAKiyC,iBAAiBjyC,KAAKigB,aAElEjgB,KAAKy/B,UACL,OAAOz/B,KAAKy/B,UAMhB,IAAI9c,EAJJ3iB,KAAKm/B,eAAeqC,MAAQxhC,KAAKm/B,eAAehF,GAAGha,IACnDngB,KAAKm/B,eAAeoC,OAASvhC,KAAKm/B,eAAeC,MAAMjf,IACvDngB,KAAKm/B,eAAesC,QAAUzhC,KAAKm/B,eAAehF,GAAGl4B,EAGrD,IAAIi9B,EAAWl/B,KAAKm/B,eAAexc,IAEnC,GAAG3iB,KAAK88B,UAAU,CACd,IAAIz/B,EAAGI,EAAMuC,KAAK88B,UAAUp/B,OAG5B,IAFAilB,EAAM3iB,KAAKm/B,eAAeC,MAAMn9B,EAAE2C,MAClCs6B,EAAS/1B,eAAewZ,GACpBtlB,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb2C,KAAKm/B,eAAeoC,SAASvhC,KAAK88B,UAAUz/B,GAAG8hC,eAAeC,MAAMjf,KAAangB,KAAKm/B,eAAeoC,OACrG5e,EAAM3iB,KAAK88B,UAAUz/B,GAAG8hC,eAAeC,MAAMn9B,EAAE2C,MAC/Cs6B,EAASr4B,UAAU8b,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGA,EAAI,IAAIA,EAAI,IAAIA,EAAI,IAAIA,EAAI,IAAIA,EAAI,IAAIA,EAAI,IAE7I,MACQqgB,GAGArgB,EAAM3iB,KAAKm/B,eAAeC,MAAMn9B,EAAE2C,MAClCs6B,EAAS/1B,eAAewZ,IAHxBuc,EAAS/1B,eAAenJ,KAAKm/B,eAAeC,MAAMn9B,EAAE2C,OAsB5D,OAfGo+B,IACCrgB,EAAMqgB,EAAgBrgB,IAAI/d,MAC1Bs6B,EAASr4B,UAAU8b,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGA,EAAI,IAAIA,EAAI,IAAIA,EAAI,IAAIA,EAAI,IAAIA,EAAI,IAAIA,EAAI,KACrI3iB,KAAKm/B,eAAesC,SAAWuB,EAAgBvB,QAC/CzhC,KAAKm/B,eAAeqC,QAAQwB,EAAgBxB,OAAexhC,KAAKm/B,eAAeqC,MAC/ExhC,KAAKm/B,eAAeoC,SAASyB,EAAgBzB,QAAgBvhC,KAAKm/B,eAAeoC,QAGlFvhC,KAAKoX,KAAKI,UACTxX,KAAKigB,WAAWkE,SAAS+yB,MAAK,GAC9Bl3C,KAAKmzB,YAAYmL,YAA6B,IAAjBt+B,KAAKoX,KAAKzQ,GAAS,KAAKu4B,IAEtDl/B,KAAKoX,KAAK6rB,KACTjjC,KAAKy/B,WAAY,GAEdz/B,KAAKy/B,SAEhB,EAEAkS,cAAcniC,UAAUoyB,SAAW,SAASxqB,GACxCpX,KAAKmzB,YAAc,IAAIkf,cAAcj7B,EAAKpX,KAAKA,KAAKigB,WACxD,EAGA0xB,cAAcniC,UAAUuuB,QAAU,WAC9B/9B,KAAK4xC,cAAgB,KACrB5xC,KAAKoX,KAAO,KACZpX,KAAKigB,WAAa,KACfjgB,KAAKmzB,aACJnzB,KAAKmzB,YAAY4K,SAEzB,EAEA4T,cAAcniC,UAAUkkB,QAAU,IAAIhvB,OAgDtCqM,cAAc4gC,cAAeE,eAE7BA,cAAcriC,UAAUqnC,aAAejG,eAAephC,UAAUqnC,aAChEhF,cAAcriC,UAAUunC,WAAanG,eAAephC,UAAUunC,WAC9DlF,cAAcriC,UAAU0nC,KAAOtG,eAAephC,UAAU0nC,KACxDrF,cAAcriC,UAAUynC,QAAUrG,eAAephC,UAAUynC,QAC3DpF,cAAcriC,UAAU7K,MAAS,WAC7B3E,KAAKixC,YAAYG,QAAU,EAC3BpxC,KAAKixC,YAAYI,IAAI1sC,QACrB3E,KAAKixC,YAAYK,GAAK,CAC1B,EACAO,cAAcriC,UAAUkgC,OAAS,SAAS6H,GACtC,IAAIuC,EAAW39C,KAAKY,IAAIw6C,EAAgB/xC,GAAG+xC,EAAgB9xC,IAC3DzF,KAAKmyC,OAAOpnC,MAAQ/K,KAAKoX,KAAK2D,EAAE++B,EAChC95C,KAAKmyC,OAAO1U,OAASz9B,KAAKoX,KAAKrV,EAAE+3C,EACjC95C,KAAKu3C,gBAAkB,CACnBj6B,GAAGw8B,EACH/+B,EAAE/a,KAAKoX,KAAK2D,EAAE++B,EACd/3C,EAAE/B,KAAKoX,KAAKrV,EAAE+3C,EACdl1C,MAAM,CAACk1C,EAAS,EAAE,EAAE,EAAE,EAAEA,EAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAEvD,IAAIz8C,EAAEI,EAAMuC,KAAK0tB,SAAShwB,OAC1B,IAAKL,EAAI,EAAGA,EAAII,EAAKJ,GAAG,EACjB2C,KAAK0tB,SAASrwB,IAAmC,IAA7B2C,KAAK0tB,SAASrwB,GAAG+Z,KAAKzQ,IACzC3G,KAAK0tB,SAASrwB,GAAGqyC,OAAO6H,EAGpC,EAEA1F,cAAcriC,UAAUgvB,aAAe,SAASz6B,GAI5C,GAHA/D,KAAKigB,WAAWC,QAAUlgB,KAAKiyC,iBAAiB/xB,QAChDlgB,KAAKigB,WAAWE,KAAM,EACtBngB,KAAKuR,QAAQitB,aAAantB,KAAKrR,KAAK+D,IAChB,IAAjB/D,KAAKy/B,WAAsBz/B,KAAKoX,KAAK6nB,GAAxC,CAGA,IAAI+N,EAAejpC,EAChB/D,KAAK0nC,KACJsF,EAAehtC,KAAK0nC,GAAGzlC,KACHjC,KAAKoX,KAAK+iB,KAC1B6S,EAAehtC,KAAKoX,KAAK+iB,GAAK,GAGtCn6B,KAAKqgB,cAAgB2sB,EAAahtC,KAAKoX,KAAKuoB,GAC5C,IAAItiC,EAAEI,EAAMuC,KAAK0tB,SAAShwB,OAM1B,IAJIsC,KAAK6W,gBACL7W,KAAKu7B,YAAYx3B,GAGhB1G,EAAI,EAAGA,EAAII,EAAKJ,GAAG,GACjB2C,KAAK6W,gBAAkB7W,KAAK0tB,SAASrwB,MACpC2C,KAAK0tB,SAASrwB,GAAGmhC,aAAawO,EAAahtC,KAAKoX,KAAKuoB,GAAK3/B,KAAK8W,OAAOzZ,GAAGgkB,IACzC,IAA7BrhB,KAAK0tB,SAASrwB,GAAG+Z,KAAKzQ,IAAY3G,KAAK0tB,SAASrwB,GAAG4iB,WAAWE,MAC7DngB,KAAKigB,WAAWE,KAAM,IAI/BngB,KAAKigB,WAAWE,MAAQngB,KAAKoX,KAAK6nB,KACjCj/B,KAAK4xC,cAAcmG,UAAU,EAAG,EAAG/3C,KAAKoX,KAAK2D,EAAG/a,KAAKoX,KAAKrV,GAC1D/B,KAAK62C,aAAa72C,KAAKu3C,gBAAgB3yC,OAzB3C,CA2BJ,EAEAitC,cAAcriC,UAAU8uB,YAAc,SAAS8J,GAC3C,IAAsD,IAAnDpoC,KAAKuR,QAAQ+sB,YAAYjtB,KAAKrR,KAAKooC,GAAtC,CAII,IAAI/qC,EADR,GAAG2C,KAAKigB,WAAWE,IAEf,IAAK9iB,EADO2C,KAAK8W,OAAOpZ,OACT,EAAGL,GAAK,EAAGA,GAAK,GACxB2C,KAAK6W,gBAAkB7W,KAAK0tB,SAASrwB,KACpC2C,KAAK0tB,SAASrwB,GAAGihC,cAI1Bt+B,KAAKoX,KAAKI,SACTxX,KAAKigB,WAAWkE,SAAS8yB,SAAQ,GAElCj3C,KAAKW,aACJX,KAAKW,YAAa,GAEtBX,KAAKiyC,iBAAiB9tB,SAAS+yB,OAC/Bl3C,KAAKiyC,iBAAiB9tB,SAAS0yB,aAAa72C,KAAKm/B,eAAexc,IAAI/d,OACpE5E,KAAKiyC,iBAAiB9tB,SAAS4yB,WAAW/2C,KAAKm/B,eAAesC,SAC9DzhC,KAAKiyC,iBAAiB9tB,SAASytB,cAAcmI,UAAU/5C,KAAKmyC,OAAO,EAAE,EAAEnyC,KAAKoX,KAAK2D,EAAE/a,KAAKoX,KAAKrV,GAC7F/B,KAAKiyC,iBAAiB9tB,SAAS8yB,UAE5Bj3C,KAAKigB,WAAWE,KACfngB,KAAK2E,OAtBT,CAwBJ,EAEAktC,cAAcriC,UAAU09B,YAAc,SAASC,GAC3CntC,KAAK0tB,SAAWyf,CACpB,EAEA0E,cAAcriC,UAAU49B,YAAc,WAClC,OAAOptC,KAAK0tB,QAChB,EAEAmkB,cAAcriC,UAAUuuB,QAAU,WAC9B,IAAI1gC,EACJ,IAAKA,EADO2C,KAAK8W,OAAOpZ,OACT,EAAGL,GAAK,EAAGA,GAAK,EAC3B2C,KAAK0tB,SAASrwB,GAAG0gC,UAErB/9B,KAAK8W,OAAS,KACd9W,KAAK0tB,SAAW,KAChB1tB,KAAKuR,QAAQwsB,QAAQ1sB,KAAKrR,KAAKuR,QACnC,EACAsgC,cAAcriC,UAAU+rB,YAAcqV,eAAephC,UAAU+rB,YAC/DsW,cAAcriC,UAAUisB,UAAYmV,eAAephC,UAAUisB,UAC7DoW,cAAcriC,UAAUksB,qBAAuBkV,eAAephC,UAAUksB,qBACxEmW,cAAcriC,UAAUytB,kBAAoB2T,eAAephC,UAAUytB,kBACrE4U,cAAcriC,UAAU6sB,cAAgBuU,eAAephC,UAAU6sB,cACjEwV,cAAcriC,UAAUmsB,WAAaiV,eAAephC,UAAUmsB,WAC9DkW,cAAcriC,UAAUqsB,YAAc+U,eAAephC,UAAUqsB,YAC/DgW,cAAcriC,UAAUssB,WAAa8U,eAAephC,UAAUssB,WAC9D+V,cAAcriC,UAAUusB,YAAc6U,eAAephC,UAAUusB,YAC/D8V,cAAcriC,UAAUwsB,YAAc4U,eAAephC,UAAUwsB,YAC/D6V,cAAcriC,UAAUysB,WAAa2U,eAAephC,UAAUysB,WAC9D4V,cAAcriC,UAAU2sB,WAAayU,eAAephC,UAAU2sB,WAC9D0V,cAAcriC,UAAUotB,sBAAwBgU,eAAephC,UAAUotB,sBAMzE7rB,cAAc4gC,cAAeS,gBAE7BA,eAAe5iC,UAAUmyB,eAAiB,WACtC,IAAIzS,EAAc,WAEd,GADAlvB,KAAKigB,WAAWo1B,gBACbr1C,KAAKsvB,UAAUvU,IAAM/a,KAAK4vB,IAAI7kB,OAAS/K,KAAKsvB,UAAUvtB,IAAM/B,KAAK4vB,IAAI6N,OAAO,CAC3E,IAAI0U,EAASh4B,SAASpJ,cAAc,UACpCohC,EAAOpnC,MAAQ/K,KAAKsvB,UAAUvU,EAC9Bo3B,EAAO1U,OAASz9B,KAAKsvB,UAAUvtB,EAC/B,IAMIi4C,EAAWC,EANXC,EAAM/H,EAAOz1B,WAAW,MAExBy9B,EAAOn6C,KAAK4vB,IAAI7kB,MAChBqvC,EAAOp6C,KAAK4vB,IAAI6N,OAChB4c,EAASF,EAAOC,EAChBE,EAAYt6C,KAAKsvB,UAAUvU,EAAE/a,KAAKsvB,UAAUvtB,EAE7Cs4C,EAAOC,EAENN,GADAC,EAAaG,GACUE,EAGvBL,GADAD,EAAYG,GACWG,EAE3BJ,EAAIH,UAAU/5C,KAAK4vB,KAAKuqB,EAAKH,GAAW,GAAGI,EAAKH,GAAY,EAAED,EAAUC,EAAW,EAAE,EAAEj6C,KAAKsvB,UAAUvU,EAAE/a,KAAKsvB,UAAUvtB,GACvH/B,KAAK4vB,IAAMuiB,CACf,CACJ,EAAE9wC,KAAKrB,MACHu6C,EAAc,WACdv6C,KAAKw6C,QAAS,EACdx6C,KAAKigB,WAAWo1B,eACpB,EAAEh0C,KAAKrB,MAEPA,KAAK4vB,IAAM,IAAI6qB,MACfz6C,KAAK4vB,IAAIC,iBAAiB,OAAQX,GAAa,GAC/ClvB,KAAK4vB,IAAIC,iBAAiB,QAAS0qB,GAAa,GAChD,IAAIlN,EAAYrtC,KAAKigB,WAAWoP,cAAcrvB,KAAKsvB,WACnDtvB,KAAK4vB,IAAIE,IAAMud,EAEfrtC,KAAKuR,QAAQowB,eAAetwB,KAAKrR,KAErC,EAEAoyC,eAAe5iC,UAAU8uB,YAAc,SAAS8J,GAC5C,IAAGpoC,KAAKw6C,SAG8C,IAAnDx6C,KAAKuR,QAAQ+sB,YAAYjtB,KAAKrR,KAAKooC,GAAtC,CAGA,IAAI8R,EAAMl6C,KAAK4xC,cACf5xC,KAAKigB,WAAWkE,SAAS+yB,OACzB,IAAIhY,EAAWl/B,KAAKm/B,eAAexc,IAAI/d,MACvC5E,KAAKigB,WAAWkE,SAAS0yB,aAAa3X,GACtCl/B,KAAKigB,WAAWkE,SAAS4yB,WAAW/2C,KAAKm/B,eAAesC,SACxDyY,EAAIH,UAAU/5C,KAAK4vB,IAAI,EAAE,GACzB5vB,KAAKigB,WAAWkE,SAAS8yB,QAAQj3C,KAAKoX,KAAKI,SACxCxX,KAAKW,aACJX,KAAKW,YAAa,EATtB,CAWJ,EAEAyxC,eAAe5iC,UAAUuuB,QAAU,WAC/B/9B,KAAK4vB,IAAM,KACX5vB,KAAKuR,QAAQwsB,QAAQ1sB,KAAKrR,KAAKuR,QACnC,EAcA8gC,cAAc7iC,UAAUgvB,aAAe,SAASz6B,GAC5C,IAAI1G,EAAGI,EAAMuC,KAAKgE,kBAAkBtG,OACpC,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb2C,KAAKgE,kBAAkB3G,GAAG4G,SAASF,GAChC/D,KAAKgE,kBAAkB3G,GAAG8iB,MACzBngB,KAAKvB,QAAQwhB,WAAWE,KAAM,EAG1C,EAEAkyB,cAAc7iC,UAAU8uB,YAAc,SAAUz3B,GAC5C,IACIxJ,EACAuM,EAAG6I,EAAIC,EAAI0E,EAFX8iC,EAAMl6C,KAAKvB,QAAQmzC,cAChBn0C,EAAMuC,KAAKoX,KAAKM,gBAAgBha,OAClBg9C,GAAW,EAChC,IAAKr9C,EAAI,EAAGA,EAAII,EAAKJ,IACjB,GAAoC,MAAjC2C,KAAK0X,gBAAgBra,GAAGq8B,KAA3B,EAGgB,IAAbghB,IACCR,EAAIlC,YACJ0C,GAAW,GAEX16C,KAAK0X,gBAAgBra,GAAG4vB,MACxBitB,EAAIS,OAAO,EAAG,GACdT,EAAIU,OAAO56C,KAAKvB,QAAQwhB,WAAW+xB,UAAW,GAC9CkI,EAAIU,OAAO56C,KAAKvB,QAAQwhB,WAAW+xB,UAAWhyC,KAAKvB,QAAQwhB,WAAW8xB,YACtEmI,EAAIU,OAAO,EAAG56C,KAAKvB,QAAQwhB,WAAW8xB,YACtCmI,EAAIU,OAAO,EAAG,IAElBxjC,EAAOpX,KAAKi5B,SAAS57B,GAAG4E,EACxB2H,EAAK/C,EAAYA,EAAUoD,kBAAkBmN,EAAKnV,EAAE,GAAG,GAAGmV,EAAKnV,EAAE,GAAG,GAAG,GAAGmV,EAAKnV,EAAE,GACjFi4C,EAAIS,OAAO/wC,EAAG,GAAIA,EAAG,IACrB,IAAIvD,EAAG6Q,EAAOE,EAAKvC,QACnB,IAAKxO,EAAI,EAAGA,EAAI6Q,EAAM7Q,IAClBuD,EAAK/C,EAAYA,EAAUoD,kBAAkBmN,EAAKvT,EAAEwC,EAAI,GAAG,GAAG+Q,EAAKvT,EAAEwC,EAAI,GAAG,GAAG,GAAK+Q,EAAKvT,EAAEwC,EAAI,GAC/FoM,EAAM5L,EAAYA,EAAUoD,kBAAkBmN,EAAK/Z,EAAEgJ,GAAG,GAAG+Q,EAAK/Z,EAAEgJ,GAAG,GAAG,GAAK+Q,EAAK/Z,EAAEgJ,GACpFqM,EAAM7L,EAAYA,EAAUoD,kBAAkBmN,EAAKnV,EAAEoE,GAAG,GAAG+Q,EAAKnV,EAAEoE,GAAG,GAAG,GAAK+Q,EAAKnV,EAAEoE,GACpF6zC,EAAIW,cAAcjxC,EAAG,GAAIA,EAAG,GAAI6I,EAAI,GAAIA,EAAI,GAAIC,EAAI,GAAIA,EAAI,IAEhE9I,EAAK/C,EAAYA,EAAUoD,kBAAkBmN,EAAKvT,EAAEwC,EAAI,GAAG,GAAG+Q,EAAKvT,EAAEwC,EAAI,GAAG,GAAG,GAAK+Q,EAAKvT,EAAEwC,EAAI,GAC/FoM,EAAM5L,EAAYA,EAAUoD,kBAAkBmN,EAAK/Z,EAAE,GAAG,GAAG+Z,EAAK/Z,EAAE,GAAG,GAAG,GAAK+Z,EAAK/Z,EAAE,GACpFqV,EAAM7L,EAAYA,EAAUoD,kBAAkBmN,EAAKnV,EAAE,GAAG,GAAGmV,EAAKnV,EAAE,GAAG,GAAG,GAAKmV,EAAKnV,EAAE,GACpFi4C,EAAIW,cAAcjxC,EAAG,GAAIA,EAAG,GAAI6I,EAAI,GAAIA,EAAI,GAAIC,EAAI,GAAIA,EAAI,GAzB5D,CA2BDgoC,GACCR,EAAIhC,MAEZ,EAEA7F,cAAc7iC,UAAU4jB,gBAAkB4F,YAAYxpB,UAAU4jB,gBAEhEif,cAAc7iC,UAAUuuB,QAAU,WAC9B/9B,KAAKvB,QAAU,IACnB,EAWAsS,cAAc4gC,cAAeW,gBAE7BA,eAAe9iC,UAAUsrC,gBAAkB,CAACrZ,QAAQ,EAAE9e,IAAI,IAAIje,OAAS68B,QAAO,EAAMC,OAAM,GAE1F8Q,eAAe9iC,UAAUurC,aAAe,GAExCzI,eAAe9iC,UAAUmyB,eAAiB,WAEtC3hC,KAAKuR,QAAQowB,eAAetwB,KAAKrR,MACjCA,KAAKwjC,aAAaxjC,KAAKi7B,WAAWj7B,KAAKm7B,UAAUn7B,KAAKo7B,aAAap7B,KAAKgE,mBAAmB,EAC/F,EAEAsuC,eAAe9iC,UAAU+0B,mBAAqB,SAASntB,EAAMpT,GACzD,IAAIklC,EAAY,CACZ9xB,KAAMA,EACNnX,KAAMmX,EAAKzQ,GACX+mB,SAAU,IAEV+W,EAAc,CAAC,EAQnB,GAPc,MAAXrtB,EAAKzQ,IAAyB,MAAXyQ,EAAKzQ,KACvB89B,EAAY5kC,EAAIoe,gBAAgBwF,QAAQzjB,KAAKoX,EAAKvX,EAAE,EAAE,IAAImE,GACtDygC,EAAY5kC,EAAEyG,IACd4iC,EAAU8R,GAAK,OAAOp+C,SAAS6nC,EAAY5kC,EAAEoC,EAAE,IAAI,IAAIrF,SAAS6nC,EAAY5kC,EAAEoC,EAAE,IAAI,IAAIrF,SAAS6nC,EAAY5kC,EAAEoC,EAAE,IAAI,MAG7HwiC,EAAY5gC,EAAIoa,gBAAgBwF,QAAQzjB,KAAKoX,EAAKvT,EAAE,EAAE,IAAKG,GAC7C,MAAXoT,EAAKzQ,IAUJ,GATAuiC,EAAUtE,GAAK5kC,KAAKmjC,OAAO/rB,EAAKwtB,KAAO,QACvCsE,EAAUrE,GAAK7kC,KAAKojC,OAAOhsB,EAAKytB,KAAO,QACzB,GAAXztB,EAAKytB,KACJqE,EAAUpE,GAAK1tB,EAAK0tB,IAExBL,EAAY1pB,EAAIkD,gBAAgBwF,QAAQzjB,KAAKoX,EAAK2D,EAAE,EAAE,KAAK/W,GACvDygC,EAAY1pB,EAAEzU,IACd4iC,EAAU+R,GAAKxW,EAAY1pB,EAAE9Y,GAE9BmV,EAAKrX,EAAE,CACN,IAAIA,EAAIke,gBAAgBoH,YAAYrlB,KAAKoX,EAAKrX,EAAE,SAASiE,GACzDygC,EAAY1kC,EAAIA,EACZ0kC,EAAY1kC,EAAEuG,IACd4iC,EAAUgS,GAAKzW,EAAY1kC,EAAEqkB,UAC7B8kB,EAAUiS,GAAK1W,EAAY1kC,EAAEskB,WAErC,OAIA6kB,EAAUhnC,EAAe,IAAXkV,EAAKlV,EAAU,UAAY,UAI7C,OAFAlC,KAAKk7B,WAAW/5B,KAAK+nC,GACrBzE,EAAY/lC,MAAQwqC,EACbzE,CACX,EAEA6N,eAAe9iC,UAAUw1B,mBAAqB,SAAS5tB,GAKnD,MAJkB,CACdkB,GAAI,GACJ8iB,aAAc,GAGtB,EAEAkX,eAAe9iC,UAAU01B,uBAAyB,SAAS9tB,EAAMpT,GAY7D,MAXkB,CACd6C,UAAY,CACR8b,IAAK,IAAIje,OACT+8B,QAAS,EACTF,QAAO,EACPC,OAAM,EACNrH,GAAIlc,gBAAgBwF,QAAQzjB,KAAKoX,EAAKvT,EAAE,EAAE,IAAKG,GAC/C8qB,OAAQ7Q,gBAAgBwF,QAAQzjB,KAAKoX,EAAK,EAAE,KAAKpT,IAErD0pB,SAAU,GAGlB,EAEA4kB,eAAe9iC,UAAU21B,mBAAqB,SAAS/tB,EAAMpT,GACzD,IAAIygC,EAAc,CACd2W,MAAM,GACNC,QAAQ,GACRz3C,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,IAEd+C,EAAK,EACK,MAAXyQ,EAAKzQ,GACJA,EAAK,EACW,MAAXyQ,EAAKzQ,GACVA,EAAK,EACW,MAAXyQ,EAAKzQ,KACVA,EAAK,GAET89B,EAAY9kB,GAAK2G,qBAAqB8T,aAAap6B,KAAKoX,EAAKzQ,EAAG3C,GAChEhE,KAAK+X,OAAO5W,KAAKsjC,EAAY9kB,IAC7B3f,KAAKwlC,oBAAoBf,GACzBvtB,KAAOlX,KAAKk7B,WAAWx9B,OACvB,IAAI49C,GAAa,EAAOC,GAAW,EACnC,IAAIl1C,EAAE,EAAEA,EAAE6Q,KAAK7Q,GAAG,EACVrG,KAAKk7B,WAAW70B,GAAGoO,SACnBzU,KAAKk7B,WAAW70B,GAAGqnB,SAASvsB,KAAKsjC,GACF,OAA5BzkC,KAAKk7B,WAAW70B,GAAGpG,KAClBq7C,GAAa,EAEbC,GAAW,GAMvB,OAFA9W,EAAYpjB,GAAKi6B,EACjB7W,EAAY+W,GAAKD,EACV9W,CACX,EAEA6N,eAAe9iC,UAAU4e,aAAe,WACpCpuB,KAAKW,YAAa,EAClB,IAKItD,EALGI,EAAMuC,KAAKm7B,UAAUz9B,OAC5B,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb2C,KAAKo7B,aAAa/9B,GAAK2C,KAAKm7B,UAAU99B,GAI1C,IAFA2C,KAAKwjC,aAAaxjC,KAAKi7B,WAAWj7B,KAAKm7B,UAAUn7B,KAAKo7B,aAAap7B,KAAKgE,mBAAmB,GACpFvG,EAAMuC,KAAKgE,kBAAkBtG,OAChCL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb2C,KAAKgE,kBAAkB3G,GAAG4G,WAE9BjE,KAAK4nC,iBACT,EAEA0K,eAAe9iC,UAAUg0B,aAAe,SAASr5B,EAAIgxB,EAAWC,EAAap3B,EAAmB8jC,GAC5F,IAAIzqC,EACAgJ,EAAG6Q,EACgC+wB,EAFhCxqC,EAAM0M,EAAIzM,OAAS,EAEtB+9C,EAAY,GAAItT,EAAe,GACnC,IAAI9qC,EAAEI,EAAIJ,GAAG,EAAEA,GAAG,EAAE,CAOhB,IANA4qC,EAAejoC,KAAKqjC,uBAAuBl5B,EAAI9M,KAI3C89B,EAAU99B,GAAK+9B,EAAa6M,EAAe,GAF3C99B,EAAI9M,GAAG2wB,QAAU8Z,EAIL,MAAb39B,EAAI9M,GAAGsJ,IAA2B,MAAbwD,EAAI9M,GAAGsJ,GACvBshC,EAGA9M,EAAU99B,GAAGqB,MAAM+V,QAAS,EAF5B0mB,EAAU99B,GAAK2C,KAAKukC,mBAAmBp6B,EAAI9M,GAAI2G,GAKnDy3C,EAAUt6C,KAAKg6B,EAAU99B,GAAGqB,YAC1B,GAAgB,MAAbyL,EAAI9M,GAAGsJ,GAAW,CACvB,GAAIshC,EAIA,IADA/wB,EAAOikB,EAAU99B,GAAGib,GAAG5a,OACnB2I,EAAE,EAAEA,EAAE6Q,EAAK7Q,GAAG,EACd80B,EAAU99B,GAAG+9B,aAAa/0B,GAAK80B,EAAU99B,GAAGib,GAAGjS,QAJnD80B,EAAU99B,GAAK2C,KAAKglC,mBAAmB76B,EAAI9M,IAO/C2C,KAAKwjC,aAAar5B,EAAI9M,GAAGib,GAAG6iB,EAAU99B,GAAGib,GAAG6iB,EAAU99B,GAAG+9B,aAAap3B,EAAmB8jC,EAC7F,MAAM,GAAgB,MAAb39B,EAAI9M,GAAGsJ,GACRshC,IACA9M,EAAU99B,GAAK2C,KAAKklC,uBAAuB/6B,EAAI9M,GAAI2G,SAErD,GAAgB,MAAbmG,EAAI9M,GAAGsJ,IAA2B,MAAbwD,EAAI9M,GAAGsJ,IAA2B,MAAbwD,EAAI9M,GAAGsJ,IAA2B,MAAbwD,EAAI9M,GAAGsJ,GACvEshC,IACA9M,EAAU99B,GAAK2C,KAAKmlC,mBAAmBh7B,EAAI9M,GAAI2G,SAGjD,GAAgB,MAAbmG,EAAI9M,GAAGsJ,IAA2B,MAAbwD,EAAI9M,GAAGsJ,GAAW,CAC5C,GAAIshC,GAMAD,EAAW7M,EAAU99B,IACZoX,QAAS,MAPL,CACb,IAAIuzB,EAAWve,eAAeI,YAAY1f,EAAI9M,GAAGsJ,IACjDqhC,EAASxjC,KAAKxE,KAAKmK,EAAI9M,GAAG2G,GAC1Bm3B,EAAU99B,GAAK2qC,EACfhoC,KAAKq7B,eAAel6B,KAAK6mC,EAC7B,CAIAG,EAAahnC,KAAK6mC,EACtB,KAAuB,MAAb79B,EAAI9M,GAAGsJ,KACTshC,GAOAD,EAAW7M,EAAU99B,IACZoX,QAAS,GAPlBuzB,EAAWve,eAAeI,YAAY1f,EAAI9M,GAAGsJ,IAC7Cw0B,EAAU99B,GAAK2qC,EACfA,EAASxjC,KAAKxE,KAAKmK,EAAI9M,EAAE89B,EAAUn3B,GACnChE,KAAKq7B,eAAel6B,KAAK6mC,GACzBF,GAAS,GAKbK,EAAahnC,KAAK6mC,IAEtBhoC,KAAKsjC,oBAAoBn5B,EAAI9M,GAAIA,EAAI,EACzC,CAEA,IADAI,EAAMg+C,EAAU/9C,OACZL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACbo+C,EAAUp+C,GAAGoX,QAAS,EAG1B,IADAhX,EAAM0qC,EAAazqC,OACfL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb8qC,EAAa9qC,GAAGoX,QAAS,CAEjC,EAEA69B,eAAe9iC,UAAUg2B,oBAAsBxK,cAAcxrB,UAAUg2B,oBACvE8M,eAAe9iC,UAAUo4B,gBAAkB5M,cAAcxrB,UAAUo4B,gBACnE0K,eAAe9iC,UAAU2zB,OAASnI,cAAcxrB,UAAU2zB,OAC1DmP,eAAe9iC,UAAU4zB,OAASpI,cAAcxrB,UAAU4zB,OAC1DkP,eAAe9iC,UAAU6zB,uBAAyBrI,cAAcxrB,UAAU6zB,uBAC1EiP,eAAe9iC,UAAU8zB,oBAAsBtI,cAAcxrB,UAAU8zB,oBAEvEgP,eAAe9iC,UAAU8uB,YAAc,SAAS8J,IACW,IAApDpoC,KAAKuR,QAAQ+sB,YAAYjtB,KAAKrR,KAAMooC,KAGvCpoC,KAAK86C,gBAAgBn4B,IAAIhe,QACzB3E,KAAK86C,gBAAgBrZ,QAAUzhC,KAAKm/B,eAAesC,QACnDzhC,KAAK86C,gBAAgBvZ,QAAS,EAC9BvhC,KAAK86C,gBAAgBtZ,MAAQxhC,KAAKm/B,eAAeqC,MACjDxhC,KAAK4nC,kBACL5nC,KAAKqoC,YAAYroC,KAAK86C,gBAAgB,KAAK,MAAK,GAC7C96C,KAAKoX,KAAKI,SACTxX,KAAKigB,WAAWkE,SAAS8yB,SAAQ,GAEzC,EAEA3E,eAAe9iC,UAAU64B,YAAc,SAASrF,EAAgBnU,EAAMzX,EAAKskC,GACvE,IAAIr+C,EAAGI,EAeHk+C,EAAeC,EAdnB,IAAI/sB,EAGA,IAFAA,EAAQ7uB,KAAKi7B,WACbx9B,EAAMuC,KAAKk7B,WAAWx9B,OAClBL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb2C,KAAKk7B,WAAW79B,GAAG0C,EAAI,GACvBC,KAAKk7B,WAAW79B,GAAG8iB,KAAM,EAWjC,IARI/I,IACAA,EAAOpX,KAAKm7B,WAMhBwgB,EAAiB3Y,EACb3lC,EAHJI,EAAMoxB,EAAMnxB,OAAS,EAGXL,GAAG,EAAEA,GAAG,EACd,GAAkB,MAAfwxB,EAAMxxB,GAAGsJ,GAAW,CACnBg1C,EAAiBvkC,EAAK/Z,GAAGwJ,UACzB,IAAIg1C,EAAQzkC,EAAK/Z,GAAGwJ,UAAUioB,OAAO7sB,EAAE2C,MAKvC,GAJA+2C,EAAepa,OAASoa,EAAe7sB,OAAO3O,IAC9Cw7B,EAAena,MAAQma,EAAexhB,GAAGha,KACzCy7B,EAAcD,EAAeh5B,KACjBxZ,eAAe0yC,GACxB7Y,EAAgB,CACf,IAAIp+B,EAAQo+B,EAAgBrgB,IAAI/d,MAChC+2C,EAAela,QAAUuB,EAAgBvB,QACzCka,EAAela,SAAWrqB,EAAK/Z,GAAGwJ,UAAUszB,GAAGl4B,EAC/C05C,EAAepa,SAASyB,EAAgBzB,QAAgBoa,EAAepa,OACvEoa,EAAena,QAAQwB,EAAgBxB,OAAema,EAAena,MACrEoa,EAAY/0C,UAAUjC,EAAM,GAAGA,EAAM,GAAGA,EAAM,GAAGA,EAAM,GAAGA,EAAM,GAAGA,EAAM,GAAGA,EAAM,GAAGA,EAAM,GAAGA,EAAM,GAAGA,EAAM,GAAGA,EAAM,IAAIA,EAAM,IAAIA,EAAM,IAAIA,EAAM,IAAIA,EAAM,IAAIA,EAAM,IAC5K,MACI+2C,EAAela,QAAUka,EAAexhB,GAAGt2B,CAEnD,KAAwB,MAAfgrB,EAAMxxB,GAAGsJ,IAA6B,MAAfkoB,EAAMxxB,GAAGsJ,IAA6B,MAAfkoB,EAAMxxB,GAAGsJ,IAA6B,MAAfkoB,EAAMxxB,GAAGsJ,GACnF3G,KAAKsoC,WAAWzZ,EAAMxxB,GAAG+Z,EAAK/Z,GAAGs+C,GACb,MAAf9sB,EAAMxxB,GAAGsJ,GACd3G,KAAKuoC,WAAW1Z,EAAMxxB,GAAG+Z,EAAK/Z,GAAGs+C,GACb,MAAf9sB,EAAMxxB,GAAGsJ,GACd3G,KAAKyoC,aAAa5Z,EAAMxxB,GAAG+Z,EAAK/Z,GAAGs+C,GACf,MAAf9sB,EAAMxxB,GAAGsJ,GACd3G,KAAKqoC,YAAYsT,EAAe9sB,EAAMxxB,GAAGib,GAAGlB,EAAK/Z,GAAGib,IAC/CuW,EAAMxxB,GAAGsJ,GAItB,GAAI+0C,EAAJ,CAGAj+C,EAAMuC,KAAKk7B,WAAWx9B,OACtB,IAAI2I,EAAG6Q,EAAM5Q,EAAG6Q,EAAKg2B,EAAMiO,EAAiFn7C,EAA1EkkB,EAAWnkB,KAAKigB,WAAWkE,SAAU+1B,EAAMl6C,KAAKigB,WAAW2xB,cAG7F,IAFAztB,EAAS+yB,OACT/yB,EAAS0yB,aAAa72C,KAAKm/B,eAAexc,IAAI/d,OAC1CvH,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EAEb,IAAa,QADb4C,EAAOD,KAAKk7B,WAAW79B,GAAG4C,OACqB,IAA1BD,KAAKk7B,WAAW79B,GAAG49C,KAAcj7C,KAAKk7B,WAAW79B,GAAG+Z,KAAK4W,QAA9E,CAmBA,IAhBA7J,EAAS+yB,OACT/J,EAAQntC,KAAKk7B,WAAW79B,GAAGqwB,SACf,OAATztB,GACCi6C,EAAI4B,YAAc97C,KAAKk7B,WAAW79B,GAAG29C,GACrCd,EAAItjB,UAAY52B,KAAKk7B,WAAW79B,GAAG49C,GACnCf,EAAI6B,QAAU/7C,KAAKk7B,WAAW79B,GAAGunC,GACjCsV,EAAI8B,SAAWh8C,KAAKk7B,WAAW79B,GAAGwnC,GAClCqV,EAAI+B,WAAaj8C,KAAKk7B,WAAW79B,GAAGynC,IAAM,GAE1CoV,EAAIgC,UAAYl8C,KAAKk7B,WAAW79B,GAAG29C,GAEvC72B,EAAS4yB,WAAW/2C,KAAKk7B,WAAW79B,GAAG8+C,MAC3B,OAATl8C,GACCi6C,EAAIlC,YAER9gC,EAAOi2B,EAAMzvC,OACT2I,EAAE,EAAEA,EAAE6Q,EAAK7Q,GAAG,EAAE,CAehB,IAdY,OAATpG,IACCi6C,EAAIlC,YACDh4C,KAAKk7B,WAAW79B,GAAG69C,IAClBhB,EAAIkC,YAAYp8C,KAAKk7B,WAAW79B,GAAG69C,IACnChB,EAAImC,eAAiBr8C,KAAKk7B,WAAW79B,GAAG89C,GACxCn7C,KAAKigB,WAAWq3B,UAAW,GACtBt3C,KAAKigB,WAAWq3B,WACrB4C,EAAIkC,YAAYp8C,KAAK+6C,cACrB/6C,KAAKigB,WAAWq3B,UAAW,IAInCngC,GADAikC,EAAQjO,EAAM9mC,GAAGg1C,SACJ39C,OAET4I,EAAE,EAAEA,EAAE6Q,EAAK7Q,GAAG,EACG,KAAd80C,EAAM90C,GAAGxG,EACRo6C,EAAIS,OAAOS,EAAM90C,GAAGjE,EAAE,GAAG+4C,EAAM90C,GAAGjE,EAAE,IACjB,KAAd+4C,EAAM90C,GAAGxG,EACdo6C,EAAIW,cAAcO,EAAM90C,GAAGwC,GAAG,GAAGsyC,EAAM90C,GAAGwC,GAAG,GAAGsyC,EAAM90C,GAAGuB,GAAG,GAAGuzC,EAAM90C,GAAGuB,GAAG,GAAGuzC,EAAM90C,GAAGg2C,GAAG,GAAGlB,EAAM90C,GAAGg2C,GAAG,IAEzGpC,EAAIjC,YAGA,OAATh4C,GACCi6C,EAAIzH,QAEZ,CACY,OAATxyC,GACCi6C,EAAIxH,KAAK1yC,KAAKk7B,WAAW79B,GAAG6E,GAEhCiiB,EAAS8yB,SAhDT,CAkDJ9yB,EAAS8yB,UACNj3C,KAAKW,aACJX,KAAKW,YAAa,EA7DtB,CA+DJ,EACA2xC,eAAe9iC,UAAU84B,WAAa,SAASjvB,EAASuvB,EAAS+S,GAC7D,IAAIl+C,EAAKJ,EAAGgJ,EAAE6Q,EAEd,GADaykC,EAAepa,QAAUqH,EAASjpB,GAAGQ,KAAOngB,KAAKW,WACnD,CACP,IAAIwD,EAAQykC,EAASjpB,GAAGxb,MAAOo4C,EAAoBZ,EAAeh5B,IAClEzL,EAAO/S,EAAM0Q,QACb,IAAIg0B,EAAwBD,EAASyS,QAErC,IADAxS,EAAsBnrC,OAAS,EAC3B2I,EAAE,EAAEA,EAAE6Q,EAAK7Q,GAAG,EAAE,CAChB,IAAIi5B,EAAYn7B,EAAM4T,OAAO1R,GAC7B,GAAGi5B,GAAaA,EAAUr9B,EAAE,CAExB,IADAxE,EAAM6hC,EAAUzqB,QACXxX,EAAI,EAAGA,EAAII,EAAKJ,GAAK,EACb,GAALA,GACAwrC,EAAsB1nC,KAAK,CACvBrB,EAAG,IACHuC,EAAGk6C,EAAkBtyC,kBAAkBq1B,EAAUr9B,EAAE,GAAG,GAAIq9B,EAAUr9B,EAAE,GAAG,GAAI,KAGrF4mC,EAAsB1nC,KAAK,CACvBrB,EAAG,IACHgJ,GAAIyzC,EAAkBtyC,kBAAkBq1B,EAAUz7B,EAAExG,EAAI,GAAG,GAAIiiC,EAAUz7B,EAAExG,EAAI,GAAG,GAAI,GACtFwK,GAAI00C,EAAkBtyC,kBAAkBq1B,EAAUjiC,EAAEA,GAAG,GAAIiiC,EAAUjiC,EAAEA,GAAG,GAAI,GAC9Ei/C,GAAIC,EAAkBtyC,kBAAkBq1B,EAAUr9B,EAAE5E,GAAG,GAAIiiC,EAAUr9B,EAAE5E,GAAG,GAAI,KAG3E,GAAPI,GACAorC,EAAsB1nC,KAAK,CACvBrB,EAAG,IACHuC,EAAGk6C,EAAkBtyC,kBAAkBq1B,EAAUr9B,EAAE,GAAG,GAAIq9B,EAAUr9B,EAAE,GAAG,GAAI,KAGjFq9B,EAAUz/B,GAAKpC,IACforC,EAAsB1nC,KAAK,CACvBrB,EAAG,IACHgJ,GAAIyzC,EAAkBtyC,kBAAkBq1B,EAAUz7B,EAAExG,EAAI,GAAG,GAAIiiC,EAAUz7B,EAAExG,EAAI,GAAG,GAAI,GACtFwK,GAAI00C,EAAkBtyC,kBAAkBq1B,EAAUjiC,EAAE,GAAG,GAAIiiC,EAAUjiC,EAAE,GAAG,GAAI,GAC9Ei/C,GAAIC,EAAkBtyC,kBAAkBq1B,EAAUr9B,EAAE,GAAG,GAAIq9B,EAAUr9B,EAAE,GAAG,GAAI,KAElF4mC,EAAsB1nC,KAAK,CACvBrB,EAAG,OAGX8oC,EAASrD,KAAOsD,CACpB,CAEJ,CAEA,GAAID,EAASvnB,GACT,IAAKhkB,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACrBurC,EAAShlC,GAAGvG,GAAKs+C,EAAeh5B,IAAI/d,MAAMvH,GAGlDurC,EAASyS,QAAUxS,CAEvB,CACJ,EAIAyJ,eAAe9iC,UAAU+4B,WAAa,SAASU,EAAUL,EAAU+S,GAC/D,IAAIzS,EAAYN,EAASlqC,OAEtBkqC,EAAS/oC,EAAEsgB,KAAOngB,KAAKW,cACtBuoC,EAAU8R,GAAK,OAAOp+C,SAASgsC,EAAS/oC,EAAEoC,EAAE,IAAI,IAAIrF,SAASgsC,EAAS/oC,EAAEoC,EAAE,IAAI,IAAIrF,SAASgsC,EAAS/oC,EAAEoC,EAAE,IAAI,MAE7G2mC,EAAS/kC,EAAEsc,KAAOw7B,EAAena,OAASxhC,KAAKW,cAC9CuoC,EAAUiT,KAAOvT,EAAS/kC,EAAE5B,EAAE05C,EAAela,QAErD,EAEA6Q,eAAe9iC,UAAUi5B,aAAe,SAASQ,EAAUL,EAAU+S,GACjE,IAAIzS,EAAYN,EAASlqC,MAErBqB,EAAI6oC,EAAS7oC,EAEdA,IAAMA,EAAEogB,KAAQngB,KAAKW,cACpBuoC,EAAUgS,GAAKn7C,EAAEqkB,UACjB8kB,EAAUiS,GAAKp7C,EAAEskB,aAElBukB,EAAS/oC,EAAEsgB,KAAOngB,KAAKW,cACtBuoC,EAAU8R,GAAK,OAAOp+C,SAASgsC,EAAS/oC,EAAEoC,EAAE,IAAI,IAAIrF,SAASgsC,EAAS/oC,EAAEoC,EAAE,IAAI,IAAIrF,SAASgsC,EAAS/oC,EAAEoC,EAAE,IAAI,MAE7G2mC,EAAS/kC,EAAEsc,KAAOw7B,EAAena,OAASxhC,KAAKW,cAC9CuoC,EAAUiT,KAAOvT,EAAS/kC,EAAE5B,EAAE05C,EAAela,UAE9CmH,EAAS7tB,EAAEoF,KAAOngB,KAAKW,cACtBuoC,EAAU+R,GAAKrS,EAAS7tB,EAAE9Y,EAElC,EAGAqwC,eAAe9iC,UAAUuuB,QAAU,WAC/B/9B,KAAKi7B,WAAa,KAClBj7B,KAAKigB,WAAa,KAClBjgB,KAAK4xC,cAAgB,KACrB5xC,KAAKk7B,WAAWx9B,OAAS,EACzBsC,KAAK4oC,SAASlrC,OAAS,EACvBsC,KAAKuR,QAAQwsB,QAAQ1sB,KAAKrR,KAAKuR,QACnC,EAMAR,cAAc4gC,cAAeY,gBAE7BA,eAAe/iC,UAAU8uB,YAAc,SAAS8J,GAC5C,IAAuD,IAApDpoC,KAAKuR,QAAQ+sB,YAAYjtB,KAAKrR,KAAMooC,GAAvC,CAGA,IAAI8R,EAAMl6C,KAAK4xC,cACf5xC,KAAKigB,WAAWkE,SAAS+yB,OACzBl3C,KAAKigB,WAAWkE,SAAS0yB,aAAa72C,KAAKm/B,eAAexc,IAAI/d,OAC9D5E,KAAKigB,WAAWkE,SAAS4yB,WAAW/2C,KAAKm/B,eAAesC,SACxDyY,EAAIgC,UAAUl8C,KAAKoX,KAAKkG,GACxB48B,EAAIsC,SAAS,EAAE,EAAEx8C,KAAKoX,KAAKua,GAAG3xB,KAAKoX,KAAKuI,IACxC3f,KAAKigB,WAAWkE,SAAS8yB,QAAQj3C,KAAKoX,KAAKI,SACxCxX,KAAKW,aACJX,KAAKW,YAAa,EATtB,CAWJ,EAoBAoQ,cAAc4gC,cAAea,eAE7BhhC,gBAAgBi0B,aAAc+M,eAE9BA,cAAchjC,UAAU2M,QAAUhC,SAASpJ,cAAc,UAAU2L,WAAW,MAE9E81B,cAAchjC,UAAUmyB,eAAiB,WAErC3hC,KAAKuR,QAAQowB,eAAetwB,KAAKrR,KAGrC,EAEAwyC,cAAchjC,UAAUk6B,aAAe,WACnC,IAAIzwB,EAAejZ,KAAK0kB,aAAaC,YACrC3kB,KAAKwxB,gBAAkB1zB,MAAMC,MAAM,KAAK,CAACL,OAAOub,EAAa1S,EAAI0S,EAAa1S,EAAE7I,OAAS,IAEzF,IAAI++C,GAAU,EACXxjC,EAAa2Y,IACZ6qB,GAAU,EACVz8C,KAAK4yC,OAAOF,KAAO1yC,KAAK+pC,WAAW9wB,EAAa2Y,KAEhD5xB,KAAK4yC,OAAOF,KAAO,gBAEvB1yC,KAAK0yC,KAAO+J,EACZ,IAAIC,GAAY,EACbzjC,EAAaqE,KACZo/B,GAAY,EACZ18C,KAAK4yC,OAAOH,OAASzyC,KAAK+pC,WAAW9wB,EAAaqE,IAClDtd,KAAK4yC,OAAOC,OAAS55B,EAAa0Y,IAEtC,IACIt0B,EAAGI,EADHye,EAAWlc,KAAKigB,WAAWjJ,YAAY2G,cAAc1E,EAAavY,GAElEkzB,EAAU3a,EAAa1S,EACvBktB,EAAezzB,KAAK0zB,QACxB1zB,KAAKyyC,OAASiK,EACd18C,KAAK4yC,OAAOE,OAAS75B,EAAajX,EAAI,MAAOhC,KAAKigB,WAAWjJ,YAAY2G,cAAc1E,EAAavY,GAAG2b,QACvG5e,EAAMwb,EAAanZ,EAAEpC,OAErB,IAAI84B,EAAUhiB,EAAWlO,EAAG6Q,EAAMY,EAAQ1R,EAAG6Q,EAAMooB,EAAWqd,EAAUC,EAAS5kC,EAAchY,KAAKoX,KAAKY,YACrGgf,EAAiB/d,EAAarV,GAAG,IAAKqV,EAAajX,EACnDsxB,EAAO,EAAGC,EAAO,EAAGiB,GAAY,EAChC/vB,EAAM,EACV,IAAKpH,EAAI,EAAGA,EAAII,EAAKJ,GAAK,EAAG,CAkBzB,IAhBAmX,GADAgiB,EAAWx2B,KAAKigB,WAAWjJ,YAAYyG,YAAYxE,EAAanZ,EAAEo3B,OAAO75B,GAAI6e,EAAS+V,OAAQjyB,KAAKigB,WAAWjJ,YAAY2G,cAAc1E,EAAavY,GAAG2b,WAChIma,EAASpf,MAAQ,CAAC,EAC1Cqc,EAAa9uB,QACVqT,GAAe4b,EAAQv2B,GAAGuC,IACzB0zB,GAAQ0D,EACRzD,GAAQta,EAAa0Z,QACrBY,GAAQiB,EAAY,EAAI,EACxBA,GAAY,GAIhBtd,GADAa,EAASvD,EAAUuD,OAASvD,EAAUuD,OAAO,GAAGO,GAAK,IACvC5a,OACd+1B,EAAa1tB,MAAMkT,EAAajX,EAAE,IAAIiX,EAAajX,EAAE,KAClDgW,GACChY,KAAK6pC,4BAA4B5wB,EAAcwa,EAAcG,EAAQv2B,GAAGm4B,KAAMlC,EAAMC,GAExFopB,EAAW7+C,MAAMC,MAAM,KAAK,CAACL,OAAOwZ,IAChC7Q,EAAE,EAAEA,EAAE6Q,EAAK7Q,GAAG,EAAE,CAIhB,IAHA8Q,EAAOY,EAAO1R,GAAGgS,GAAG/R,EAAEjJ,EAAEK,OACxB4hC,EAAYvnB,EAAO1R,GAAGgS,GAAG/R,EACzBs2C,EAAU,GACNt2C,EAAE,EAAEA,EAAE6Q,EAAK7Q,GAAG,EACR,GAAHA,GACCs2C,EAAQz7C,KAAKsyB,EAAajqB,SAAS81B,EAAUr9B,EAAE,GAAG,GAAGq9B,EAAUr9B,EAAE,GAAG,GAAG,GAAGwxB,EAAahqB,SAAS61B,EAAUr9B,EAAE,GAAG,GAAGq9B,EAAUr9B,EAAE,GAAG,GAAG,IAExI26C,EAAQz7C,KAAKsyB,EAAajqB,SAAS81B,EAAUz7B,EAAEyC,EAAE,GAAG,GAAGg5B,EAAUz7B,EAAEyC,EAAE,GAAG,GAAG,GAAGmtB,EAAahqB,SAAS61B,EAAUz7B,EAAEyC,EAAE,GAAG,GAAGg5B,EAAUz7B,EAAEyC,EAAE,GAAG,GAAG,GAAGmtB,EAAajqB,SAAS81B,EAAUjiC,EAAEiJ,GAAG,GAAGg5B,EAAUjiC,EAAEiJ,GAAG,GAAG,GAAGmtB,EAAahqB,SAAS61B,EAAUjiC,EAAEiJ,GAAG,GAAGg5B,EAAUjiC,EAAEiJ,GAAG,GAAG,GAAGmtB,EAAajqB,SAAS81B,EAAUr9B,EAAEqE,GAAG,GAAGg5B,EAAUr9B,EAAEqE,GAAG,GAAG,GAAGmtB,EAAahqB,SAAS61B,EAAUr9B,EAAEqE,GAAG,GAAGg5B,EAAUr9B,EAAEqE,GAAG,GAAG,IAEpYs2C,EAAQz7C,KAAKsyB,EAAajqB,SAAS81B,EAAUz7B,EAAEyC,EAAE,GAAG,GAAGg5B,EAAUz7B,EAAEyC,EAAE,GAAG,GAAG,GAAGmtB,EAAahqB,SAAS61B,EAAUz7B,EAAEyC,EAAE,GAAG,GAAGg5B,EAAUz7B,EAAEyC,EAAE,GAAG,GAAG,GAAGmtB,EAAajqB,SAAS81B,EAAUjiC,EAAE,GAAG,GAAGiiC,EAAUjiC,EAAE,GAAG,GAAG,GAAGo2B,EAAahqB,SAAS61B,EAAUjiC,EAAE,GAAG,GAAGiiC,EAAUjiC,EAAE,GAAG,GAAG,GAAGo2B,EAAajqB,SAAS81B,EAAUr9B,EAAE,GAAG,GAAGq9B,EAAUr9B,EAAE,GAAG,GAAG,GAAGwxB,EAAahqB,SAAS61B,EAAUr9B,EAAE,GAAG,GAAGq9B,EAAUr9B,EAAE,GAAG,GAAG,IAChY06C,EAASt2C,GAAKu2C,CAClB,CACG5kC,IACCsb,GAAQM,EAAQv2B,GAAGkJ,EACnB+sB,GAAQ0D,GAETh3B,KAAK0lC,UAAUjhC,GACdzE,KAAK0lC,UAAUjhC,GAAKub,KAAO28B,EAE3B38C,KAAK0lC,UAAUjhC,GAAO,CAACub,KAAM28B,GAEjCl4C,GAAM,CACV,CACJ,EAEA+tC,cAAchjC,UAAU8uB,YAAc,SAAS8J,GAC3C,IAAuD,IAApDpoC,KAAKuR,QAAQ+sB,YAAYjtB,KAAKrR,KAAMooC,GAAvC,CAGA,IAcK/qC,EAAEI,EAAK4I,EAAG6Q,EAAM5Q,EAAG6Q,EAdpB+iC,EAAMl6C,KAAK4xC,cACX1S,EAAWl/B,KAAKm/B,eAAexc,IAAI/d,MACvC5E,KAAKigB,WAAWkE,SAAS+yB,OACzBl3C,KAAKigB,WAAWkE,SAAS0yB,aAAa3X,GACtCl/B,KAAKigB,WAAWkE,SAAS4yB,WAAW/2C,KAAKm/B,eAAesC,SACxDyY,EAAIlgC,KAAOha,KAAK4yC,OAAOE,OACvBoH,EAAI6B,QAAU,OACd7B,EAAI8B,SAAW,QACf9B,EAAI+B,WAAa,EAEbj8C,KAAKoX,KAAKY,aACVhY,KAAKypC,aAAapW,YAAYrzB,KAAK0kB,aAAaC,YAAa3kB,KAAKyxB,oBAItE,IAKIqZ,EALAtZ,EAAkBxxB,KAAKypC,aAAajY,gBAEpCoC,EAAU5zB,KAAK0kB,aAAaC,YAAYpe,EAE5C9I,EAAMm2B,EAAQl2B,OAEd,IAA4Di/C,EAAUC,EAAlEC,EAAW,KAAMC,EAAa,KAAMC,EAAc,KACtD,IAAI1/C,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb,IAAGu2B,EAAQv2B,GAAGuC,EAAd,CASA,IANAkrC,EAAiBtZ,EAAgBn0B,MAE7B2C,KAAKigB,WAAWkE,SAAS+yB,OACzBl3C,KAAKigB,WAAWkE,SAAS0yB,aAAa/L,EAAezoC,GACrDrC,KAAKigB,WAAWkE,SAAS4yB,WAAWjM,EAAejnC,IAEpD7D,KAAK0yC,KAAK,CAaT,IAZG5H,GAAkBA,EAAelZ,GAC7BirB,IAAa/R,EAAelZ,KAC3BirB,EAAW/R,EAAelZ,GAC1BsoB,EAAIgC,UAAYpR,EAAelZ,IAE9BirB,IAAa78C,KAAK4yC,OAAOF,OAC9BmK,EAAW78C,KAAK4yC,OAAOF,KACvBwH,EAAIgC,UAAYl8C,KAAK4yC,OAAOF,MAGhCx7B,GADAylC,EAAW38C,KAAK0lC,UAAUroC,GAAG2iB,MACbtiB,OAChBsC,KAAKigB,WAAW2xB,cAAcoG,YAC1B3xC,EAAE,EAAEA,EAAE6Q,EAAK7Q,GAAG,EAId,IAFA8Q,GADAylC,EAAUD,EAASt2C,IACJ3I,OACfsC,KAAKigB,WAAW2xB,cAAc+I,OAAOiC,EAAQ,GAAIA,EAAQ,IACpDt2C,EAAI,EAAGA,EAAI6Q,EAAM7Q,GAAK,EACvBtG,KAAKigB,WAAW2xB,cAAciJ,cAAc+B,EAAQt2C,GAAIs2C,EAAQt2C,EAAI,GAAIs2C,EAAQt2C,EAAI,GAAIs2C,EAAQt2C,EAAI,GAAIs2C,EAAQt2C,EAAI,GAAIs2C,EAAQt2C,EAAI,IAG5ItG,KAAKigB,WAAW2xB,cAAcqG,YAC9Bj4C,KAAKigB,WAAW2xB,cAAcc,MAElC,CACA,GAAG1yC,KAAKyyC,OAAO,CAsBX,IArBG3H,GAAkBA,EAAenZ,GAC7BorB,IAAgBjS,EAAenZ,KAC9BorB,EAAcjS,EAAenZ,GAC7BuoB,EAAItjB,UAAYkU,EAAenZ,IAE9BorB,IAAgB/8C,KAAK4yC,OAAOC,SACjCkK,EAAc/8C,KAAK4yC,OAAOC,OAC1BqH,EAAItjB,UAAY52B,KAAK4yC,OAAOC,QAE7B/H,GAAkBA,EAAextB,GAC7Bw/B,IAAehS,EAAextB,KAC7Bw/B,EAAahS,EAAextB,GAC5B48B,EAAI4B,YAAchR,EAAextB,IAEhCw/B,IAAe98C,KAAK4yC,OAAOH,SAChCqK,EAAa98C,KAAK4yC,OAAOH,OACzByH,EAAI4B,YAAc97C,KAAK4yC,OAAOH,QAGlCv7B,GADAylC,EAAW38C,KAAK0lC,UAAUroC,GAAG2iB,MACbtiB,OAChBsC,KAAKigB,WAAW2xB,cAAcoG,YAC1B3xC,EAAE,EAAEA,EAAE6Q,EAAK7Q,GAAG,EAId,IAFA8Q,GADAylC,EAAUD,EAASt2C,IACJ3I,OACfsC,KAAKigB,WAAW2xB,cAAc+I,OAAOiC,EAAQ,GAAIA,EAAQ,IACpDt2C,EAAI,EAAGA,EAAI6Q,EAAM7Q,GAAK,EACvBtG,KAAKigB,WAAW2xB,cAAciJ,cAAc+B,EAAQt2C,GAAIs2C,EAAQt2C,EAAI,GAAIs2C,EAAQt2C,EAAI,GAAIs2C,EAAQt2C,EAAI,GAAIs2C,EAAQt2C,EAAI,GAAIs2C,EAAQt2C,EAAI,IAG5ItG,KAAKigB,WAAW2xB,cAAcqG,YAC9Bj4C,KAAKigB,WAAW2xB,cAAca,QAElC,CACG3H,GACC9qC,KAAKigB,WAAWkE,SAAS8yB,SAnE7B,CAyEJj3C,KAAKigB,WAAWkE,SAAS8yB,QAAQj3C,KAAKoX,KAAKI,SACxCxX,KAAKW,aACJX,KAAKW,YAAa,EArGtB,CAuGJ,EAYAoQ,cAAcypB,YAAauY,cAC3BA,aAAavjC,UAAUmqC,eAAiB,WAExC,EACA5G,aAAavjC,UAAUsxB,aAAetG,YAAYhrB,UAAUsxB,aAgB5DiS,aAAavjC,UAAUkvB,eAAiB,WACpC,OAAO1+B,KAAKihC,WAChB,EAEA8R,aAAavjC,UAAUmyB,eAAiB,WACjC3hC,KAAKoX,KAAKI,SACTxX,KAAKk9B,aAAe/iB,SAASiC,gBAAgB3gB,MAAM,OACnD+C,SAASwB,KAAKk9B,cAEdl9B,KAAKihC,YAAcjhC,KAAKk9B,aACxBl9B,KAAKu6B,cAAgBv6B,KAAKk9B,cAE1Bl9B,KAAKk9B,aAAel9B,KAAK06B,gBAE7B16B,KAAK66B,mBAAqB76B,KAAKk9B,cAC5Bl9B,KAAKoX,KAAKsrB,IAAwB,IAAjB1iC,KAAKoX,KAAKzQ,IAA6B,IAAjB3G,KAAKoX,KAAKzQ,KAC7C3G,KAAKk9B,eAAiBl9B,KAAK06B,kBAC1B16B,KAAKk9B,aAAe/iB,SAASiC,gBAAgB3gB,MAAM,KAEnDuE,KAAKihC,YAAcjhC,KAAKk9B,cAE5Bl9B,KAAKk9B,aAAa3f,aAAa,KAAKvd,KAAKoX,KAAKsrB,KAElD1iC,KAAK8gC,eACF9gC,KAAKk9B,eAAiBl9B,KAAK06B,kBAC1B16B,KAAK26B,YAAc,MAEvB36B,KAAKq+B,gBACT,EAEA0U,aAAavjC,UAAU8uB,YAAc,SAAS0E,GAC1C,GAAoB,IAAjBhjC,KAAKoX,KAAKzQ,GACT,OAAO,EAGX,GAAG3G,KAAK4/B,kBAAoB5/B,KAAKshC,UAAYthC,KAAKy/B,UAC9C,OAAOz/B,KAAKy/B,UAYhB,IAAI9c,EAVJ3iB,KAAKshC,QAAUthC,KAAK4/B,gBAEpB5/B,KAAKm/B,eAAeqC,MAAQxhC,KAAKm/B,eAAehF,GAAGha,IACnDngB,KAAKm/B,eAAeoC,OAASvhC,KAAKm/B,eAAeC,MAAMjf,IACvDngB,KAAKm/B,eAAesC,QAAUzhC,KAAKm/B,eAAehF,GAAGl4B,EAClDjC,KAAKW,aACJX,KAAKm/B,eAAeqC,OAAQ,EAC5BxhC,KAAKm/B,eAAeoC,QAAS,GAIjC,IAAIrC,EAAWl/B,KAAKm/B,eAAexc,IAEnC,GAAG3iB,KAAK88B,UAAU,CACd,IAAIz/B,EAAGI,EAAMuC,KAAK88B,UAAUp/B,OAI5B,IAFAilB,EAAM3iB,KAAKm/B,eAAeC,MAAMn9B,EAAE2C,MAClCs6B,EAAS/1B,eAAewZ,GACpBtlB,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb2C,KAAKm/B,eAAeoC,SAASvhC,KAAK88B,UAAUz/B,GAAG8hC,eAAeC,MAAMjf,KAAangB,KAAKm/B,eAAeoC,OACrG5e,EAAM3iB,KAAK88B,UAAUz/B,GAAG8hC,eAAeC,MAAMn9B,EAAE2C,MAC/Cs6B,EAASr4B,UAAU8b,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGA,EAAI,IAAIA,EAAI,IAAIA,EAAI,IAAIA,EAAI,IAAIA,EAAI,IAAIA,EAAI,IAE7I,MACO3iB,KAAKy/B,WAAaz/B,KAAKm/B,eAAeoC,SACjCyB,GAGArgB,EAAM3iB,KAAKm/B,eAAeC,MAAMn9B,EAAE2C,MAClCs6B,EAAS/1B,eAAewZ,IAHxBuc,EAAS/1B,eAAenJ,KAAKm/B,eAAeC,MAAMn9B,EAAE2C,QA0BhE,OAnBG5E,KAAKoX,KAAKI,SACTxX,KAAKmzB,YAAYmL,YAAYY,GAG9B8D,IACCrgB,EAAMqgB,EAAgBrgB,IAAI/d,MAC1Bs6B,EAAS/1B,eAAewZ,GACxB3iB,KAAKm/B,eAAesC,SAAWuB,EAAgBvB,QAC/CzhC,KAAKm/B,eAAeqC,QAAQwB,EAAgBxB,OAAexhC,KAAKm/B,eAAeqC,MAC/ExhC,KAAKm/B,eAAeoC,SAASyB,EAAgBzB,QAAgBvhC,KAAKm/B,eAAeoC,QAGlFvhC,KAAKm/B,eAAeoC,SACnBvhC,KAAK66B,mBAAmBn8B,MAAMmI,UAAY7G,KAAK66B,mBAAmBn8B,MAAMs6C,gBAAkB9Z,EAAS10B,QACnGxK,KAAKk/B,SAAWA,GAEjBl/B,KAAKm/B,eAAeqC,QACnBxhC,KAAK66B,mBAAmBn8B,MAAM+iC,QAAUzhC,KAAKm/B,eAAesC,SAEzDzhC,KAAKy/B,SAChB,EAEAsT,aAAavjC,UAAUuuB,QAAU,WAC7B/9B,KAAKk9B,aAAe,KACpBl9B,KAAK66B,mBAAqB,KAC1B76B,KAAK06B,gBAAkB,KACpB16B,KAAK46B,eACJ56B,KAAK46B,aAAe,MAErB56B,KAAKmzB,cACJnzB,KAAKmzB,YAAY4K,UACjB/9B,KAAKmzB,YAAc,KAE3B,EAEA4f,aAAavjC,UAAUwtC,cAAgB,WACnC,OAAOh9C,KAAKk9B,YAChB,EACA6V,aAAavjC,UAAUoyB,SAAW,SAASxqB,GACvCpX,KAAKmzB,YAAc,IAAI6F,YAAY5hB,EAAKpX,KAAKA,KAAKigB,WACtD,EAEA8yB,aAAavjC,UAAUqvB,KAAO,WAC9B,EAEAkU,aAAavjC,UAAU4uB,SAAW,WAElC,EAEA2U,aAAavjC,UAAUotB,sBAAwB4U,eAAehiC,UAAUotB,sBAIxE7rB,cAAcgiC,aAAcC,eAE5BA,cAAcxjC,UAAUmyB,eAAiB,WACrC,IAAI3wB,EAASmJ,SAASpJ,cAAc,OACpCvS,SAASwS,GACT,IAAIqd,EAAOlU,SAASiC,gBAAgB3gB,MAAM,OAC1C+C,SAAS6vB,GACTA,EAAK9Q,aAAa,QAAQvd,KAAKoX,KAAKua,IACpCtD,EAAK9Q,aAAa,SAASvd,KAAKoX,KAAKuI,IACrC3O,EAAO4J,YAAYyT,GACnBruB,KAAKk9B,aAAelsB,EACpBhR,KAAK66B,mBAAqB7pB,EAE1BhR,KAAKihC,YAAcjwB,EACnBhR,KAAKstC,UAAYt8B,EACdhR,KAAKoX,KAAKsrB,IACT1iC,KAAKstC,UAAU/vB,aAAa,KAAKvd,KAAKoX,KAAKsrB,IAE3B,IAAjB1iC,KAAKoX,KAAK4pB,IACThhC,KAAK8gC,eAET,IAAI3H,EAAOhf,SAASiC,gBAAgB3gB,MAAM,QAC1C09B,EAAK5b,aAAa,QAAQvd,KAAKoX,KAAKua,IACpCwH,EAAK5b,aAAa,SAASvd,KAAKoX,KAAKuI,IACrCwZ,EAAK5b,aAAa,OAAOvd,KAAKoX,KAAKkG,IACnC+Q,EAAKzT,YAAYue,GACdn5B,KAAKoX,KAAKI,UACTxX,KAAKu6B,cAAgBpB,GAEzBn5B,KAAKq+B,gBACT,EAIA2U,cAAcxjC,UAAUqvB,KAAOpE,eAAejrB,UAAUqvB,KACxDmU,cAAcxjC,UAAUsvB,KAAOrE,eAAejrB,UAAUsvB,KACxDkU,cAAcxjC,UAAU8uB,YAAclB,cAAc5tB,UAAU8uB,YAC9D0U,cAAcxjC,UAAUuuB,QAAUX,cAAc5tB,UAAUuuB,QAoB1DhtB,cAAcgiC,aAAcE,cAE5BA,aAAazjC,UAAUmyB,eAAiB,WACpC,IAAIsb,EAAa9iC,SAASpJ,cAAc,OAMxC,GALAvS,SAASy+C,GACNj9C,KAAKoX,KAAKsrB,IACTua,EAAW1/B,aAAa,KAAKvd,KAAKoX,KAAKsrB,IAE3Cua,EAAWv+C,MAAMw5C,KAAO,aAAal4C,KAAKoX,KAAK2D,EAAE,OAAO/a,KAAKoX,KAAKrV,EAAE,WACjE/B,KAAKoX,KAAKI,QAAQ,CACjB,IAAI0lC,EAAU/iC,SAASiC,gBAAgB3gB,MAAM,OAC7C+C,SAAS0+C,GACTA,EAAQ3/B,aAAa,QAAQvd,KAAKoX,KAAK2D,GACvCmiC,EAAQ3/B,aAAa,SAASvd,KAAKoX,KAAKrV,GACxC,IAAII,EAAIgY,SAASiC,gBAAgB3gB,MAAM,KACvCyhD,EAAQtiC,YAAYzY,GACpB86C,EAAWriC,YAAYsiC,GACvBl9C,KAAKu6B,cAAgBp4B,EACrBnC,KAAKihC,YAAcgc,EACnBj9C,KAAKk9B,aAAe/6B,EACpBnC,KAAK66B,mBAAqBoiB,CAC9B,MACIj9C,KAAKk9B,aAAe+f,EACpBj9C,KAAKihC,YAAcjhC,KAAKk9B,aACxBl9B,KAAK66B,mBAAqBoiB,EAG9Bj9C,KAAKq+B,gBACT,EAEA4U,aAAazjC,UAAUqvB,KAAOxB,aAAa7tB,UAAUqvB,KACrDoU,aAAazjC,UAAUgvB,aAAenB,aAAa7tB,UAAUgvB,aAC7DyU,aAAazjC,UAAU09B,YAAc7P,aAAa7tB,UAAU09B,YAC5D+F,aAAazjC,UAAU49B,YAAc/P,aAAa7tB,UAAU49B,YAC5D6F,aAAazjC,UAAUuuB,QAAUV,aAAa7tB,UAAUuuB,QAExDkV,aAAazjC,UAAU8uB,YAAc,SAAS8J,GAC1C,IACI/qC,EADA4vC,EAAejtC,KAAKuR,QAAQ+sB,YAAYjtB,KAAKrR,KAAKooC,GAChD3qC,EAAMuC,KAAK8W,OAAOpZ,OACxB,IAAkB,IAAfuvC,EAAH,CAOA,IAFAjtC,KAAKqhC,QAAS,EAEThkC,EAAI,EAAGA,EAAII,EAAKJ,GAAG,GACjB2C,KAAK6W,gBAAkB7W,KAAK0tB,SAASrwB,KACpC2C,KAAK0tB,SAASrwB,GAAGihC,cAGtBt+B,KAAKW,aACJX,KAAKW,YAAa,EAVtB,MAFIX,KAAK6+B,MAcb,EAEAoU,aAAazjC,UAAU+rB,YAAclD,aAAa7oB,UAAU+rB,YAC5D0X,aAAazjC,UAAUisB,UAAY+V,eAAehiC,UAAUisB,UAC5DwX,aAAazjC,UAAUksB,qBAAuB8V,eAAehiC,UAAUksB,qBACvEuX,aAAazjC,UAAUytB,kBAAoBuU,eAAehiC,UAAUytB,kBACpEgW,aAAazjC,UAAU6sB,cAAgBhE,aAAa7oB,UAAU6sB,cAC9D4W,aAAazjC,UAAUmsB,WAAa6V,eAAehiC,UAAUmsB,WAC7DsX,aAAazjC,UAAUotB,sBAAwB4U,eAAehiC,UAAUotB,sBACxEqW,aAAazjC,UAAUqsB,YAAc2V,eAAehiC,UAAUqsB,YAC9DoX,aAAazjC,UAAUssB,WAAa0V,eAAehiC,UAAUssB,WAC7DmX,aAAazjC,UAAUusB,YAAcyV,eAAehiC,UAAUusB,YAC9DkX,aAAazjC,UAAUwsB,YAAcwV,eAAehiC,UAAUwsB,YAC9DiX,aAAazjC,UAAUysB,WAAauV,eAAehiC,UAAUysB,WAC7DgX,aAAazjC,UAAU2sB,WAAaqV,eAAehiC,UAAU2sB,WAC7D8W,aAAazjC,UAAU2uB,mBAAqBqT,eAAehiC,UAAU2uB,mBAiBrEptB,cAAcgiC,aAAcG,eAC5B,IAAIliC,OAASkiC,cAAc1jC,UAAU+B,QA2ErC,SAASknC,aAAarhC,EAAKsjB,EAAgBza,EAAWG,EAAMua,GACxD36B,KAAK0lC,UAAY,GACjB1lC,KAAKm9C,UAAY,GACjBn9C,KAAKmzC,YAAc,CACf9pC,EAAE,OACFC,GAAI,OACJvH,EAAG,EACHgZ,EAAG,GAEP/a,KAAK4wB,WAAa,MAClB5wB,KAAKo9C,UAAW,EAChBp9C,KAAKuR,QAAQD,YAAYD,KAAKrR,KAAKoX,EAAKsjB,EAAgBza,EAAWG,EAAMua,EAE7E,CAqQA,SAASge,cAAcvhC,EAAKsjB,EAAgBza,EAAWG,EAAMua,GACzD36B,KAAKsvB,UAAYrP,EAAW0d,aAAavmB,EAAKS,OAC9C7X,KAAKuR,QAAQD,YAAYD,KAAKrR,KAAKoX,EAAKsjB,EAAgBza,EAAWG,EAAMua,EAC7E,CA4CA,SAAS+d,eAAethC,EAAKsjB,EAAgBza,EAAWG,EAAMua,GAC1D36B,KAAKuR,QAAQD,YAAYD,KAAKrR,KAAKoX,EAAKsjB,EAAgBza,EAAWG,EAAMua,GACzE,IAAIlX,EAAUxF,gBAAgBwF,QAY9B,GAXAzjB,KAAKq9C,GAAK55B,EAAQzjB,KAAKoX,EAAKimC,GAAG,EAAE,EAAEr9C,KAAKgE,mBACrCoT,EAAKiB,GAAGhW,EAAEL,GACThC,KAAK0hB,GAAK+B,EAAQzjB,KAAKoX,EAAKiB,GAAGhW,EAAEgH,EAAE,EAAE,EAAErJ,KAAKgE,mBAC5ChE,KAAK2hB,GAAK8B,EAAQzjB,KAAKoX,EAAKiB,GAAGhW,EAAEiH,EAAE,EAAE,EAAEtJ,KAAKgE,mBAC5ChE,KAAK4hB,GAAK6B,EAAQzjB,KAAKoX,EAAKiB,GAAGhW,EAAEkH,EAAE,EAAE,EAAEvJ,KAAKgE,oBAE5ChE,KAAKqC,EAAIohB,EAAQzjB,KAAKoX,EAAKiB,GAAGhW,EAAE,EAAE,EAAErC,KAAKgE,mBAE1CoT,EAAKiB,GAAGlS,IACPnG,KAAKmG,EAAIsd,EAAQzjB,KAAKoX,EAAKiB,GAAGlS,EAAE,EAAE,EAAEnG,KAAKgE,oBAE1CoT,EAAKiB,GAAG4J,GAAG3b,EAAE5I,QAAU0Z,EAAKiB,GAAG4J,GAAG3b,EAAE,GAAGuN,GAAG,CACzC,IAAIxW,EAAEI,EAAM2Z,EAAKiB,GAAG4J,GAAG3b,EAAE5I,OACzB,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb+Z,EAAKiB,GAAG4J,GAAG3b,EAAEjJ,GAAGwW,GAAK,KACrBuD,EAAKiB,GAAG4J,GAAG3b,EAAEjJ,GAAGyW,GAAK,IAE7B,CACA9T,KAAKiiB,GAAKwB,EAAQzjB,KAAKoX,EAAKiB,GAAG4J,GAAG,EAAEhkB,UAAU+B,KAAKgE,mBACnDhE,KAAKiiB,GAAGtC,IAAK,EACb3f,KAAK6iB,GAAKY,EAAQzjB,KAAKoX,EAAKiB,GAAGwK,GAAG,EAAE5kB,UAAU+B,KAAKgE,mBACnDhE,KAAK4iB,GAAKa,EAAQzjB,KAAKoX,EAAKiB,GAAGuK,GAAG,EAAE3kB,UAAU+B,KAAKgE,mBACnDhE,KAAKmiB,GAAKsB,EAAQzjB,KAAKoX,EAAKiB,GAAG8J,GAAG,EAAElkB,UAAU+B,KAAKgE,mBACnDhE,KAAK2iB,IAAM,IAAIje,MACnB,CAtaA8M,gBAAgBwpB,cAAekY,eAC/BA,cAAc1jC,UAAU+B,QAAUP,OAClCkiC,cAAc1jC,UAAU8tC,kBAAoBpK,cAAc1jC,UAAU8uB,YAEpE4U,cAAc1jC,UAAUmyB,eAAiB,WACrC,IAAI3wB,EAASmJ,SAASpJ,cAAc,OACpCvS,SAASwS,GACT,IAAIqd,EAAOlU,SAASiC,gBAAgB3gB,MAAM,OAC1C+C,SAAS6vB,GACT,IAAIrQ,EAAOhe,KAAKogB,KAAKhJ,KAAOpX,KAAKogB,KAAKhJ,KAAOpX,KAAKigB,WAAW2d,SAG7D,GAFAvP,EAAK9Q,aAAa,QAAQS,EAAKjD,GAC/BsT,EAAK9Q,aAAa,SAASS,EAAKjc,GAC7B/B,KAAKoX,KAAKI,QAAQ,CACjB,IAAIrV,EAAIgY,SAASiC,gBAAgB3gB,MAAM,KACvCuV,EAAO4J,YAAYyT,GACnBA,EAAKzT,YAAYzY,GACjBnC,KAAKu6B,cAAgBp4B,EACrBnC,KAAKk9B,aAAe/6B,EACpBnC,KAAKu9C,gBAAkBp7C,CAC3B,MACI6O,EAAO4J,YAAYyT,GACnBruB,KAAKk9B,aAAe7O,EACpBruB,KAAKu9C,gBAAkBpjC,SAASiC,gBAAgB3gB,MAAM,KACtDuE,KAAKk9B,aAAatiB,YAAY5a,KAAKu9C,iBAEnCv9C,KAAKoX,KAAK6rB,KAEVjjC,KAAKihC,YAAcjwB,GAEvBhR,KAAKstC,UAAYt8B,EACdhR,KAAKoX,KAAKsrB,IACT1iC,KAAKstC,UAAU/vB,aAAa,KAAKvd,KAAKoX,KAAKsrB,IAG/C1iC,KAAKwjC,aAAaxjC,KAAKi7B,WAAWj7B,KAAKm7B,UAAUn7B,KAAKo7B,aAAap7B,KAAKk9B,aAAal9B,KAAKgE,kBAAkB,EAAG,IAAI,GACnHhE,KAAKujC,2BACLvjC,KAAKk9B,aAAelsB,EACpBhR,KAAK66B,mBAAqB7pB,EAC1BhR,KAAKw9C,UAAYnvB,EACG,IAAjBruB,KAAKoX,KAAK4pB,IACThhC,KAAK8gC,eAET9gC,KAAKq+B,gBACT,EAEA6U,cAAc1jC,UAAU8uB,YAAc,SAAS8J,GAC3C,IAAIznC,EAAaX,KAAKW,WAGtB,GAFAX,KAAKs9C,oBAEFt9C,KAAKy/B,YAAcz/B,KAAK0/B,SAAW/+B,GAAY,CAC9C,IAAI88C,EAAcz9C,KAAKw9C,UAAU5S,UAC7B8S,GAAU,EACX19C,KAAKmzC,YAAYp4B,IAAM0iC,EAAY1yC,QAClC/K,KAAKmzC,YAAYp4B,EAAI0iC,EAAY1yC,MACjC/K,KAAKw9C,UAAUjgC,aAAa,QAAQkgC,EAAY1yC,OAChD2yC,GAAU,GAEX19C,KAAKmzC,YAAYpxC,IAAM07C,EAAYhgB,SAClCz9B,KAAKmzC,YAAYpxC,EAAI07C,EAAYhgB,OACjCz9B,KAAKw9C,UAAUjgC,aAAa,SAASkgC,EAAYhgB,QACjDigB,GAAU,IAEXA,GAAY19C,KAAKmzC,YAAY9pC,IAAMo0C,EAAYp0C,GAAMrJ,KAAKmzC,YAAY7pC,IAAMm0C,EAAYn0C,KACvFtJ,KAAKmzC,YAAYp4B,EAAI0iC,EAAY1yC,MACjC/K,KAAKmzC,YAAYpxC,EAAI07C,EAAYhgB,OACjCz9B,KAAKmzC,YAAY9pC,EAAIo0C,EAAYp0C,EACjCrJ,KAAKmzC,YAAY7pC,EAAIm0C,EAAYn0C,EAEjCtJ,KAAKw9C,UAAUjgC,aAAa,UAAUvd,KAAKmzC,YAAY9pC,EAAE,IAAIrJ,KAAKmzC,YAAY7pC,EAAE,IAAItJ,KAAKmzC,YAAYp4B,EAAE,IAAI/a,KAAKmzC,YAAYpxC,GAC5H/B,KAAKw9C,UAAU9+C,MAAMmI,UAAY7G,KAAKw9C,UAAU9+C,MAAMs6C,gBAAkB,aAAeh5C,KAAKmzC,YAAY9pC,EAAI,MAAQrJ,KAAKmzC,YAAY7pC,EAAI,MAEjJ,CAEJ,EAeAyH,cAAcgiC,aAAc0F,cAE5BjnC,gBAAgBi0B,aAAcgT,cAE9BA,aAAajpC,UAAUmyB,eAAiB,WACpC3hC,KAAKo9C,SAAWp9C,KAAKw/B,aACrB,IAAIxuB,EAASmJ,SAASpJ,cAAc,OAIpC,GAHAvS,SAASwS,GACThR,KAAKk9B,aAAelsB,EACpBhR,KAAK66B,mBAAqB7pB,EACvBhR,KAAKo9C,SAAS,CACbp9C,KAAK4wB,WAAa,MAClB,IAAIvC,EAAOlU,SAASiC,gBAAgB3gB,MAAM,OAC1C+C,SAAS6vB,GACTruB,KAAKquB,KAAOA,EACZruB,KAAK29C,MAAQ39C,KAAKogB,KAAKhJ,KAAK2D,EAC5B/a,KAAK49C,MAAQ59C,KAAKogB,KAAKhJ,KAAKrV,EAC5BssB,EAAK9Q,aAAa,QAAQvd,KAAK29C,OAC/BtvB,EAAK9Q,aAAa,SAASvd,KAAK49C,OAChC,IAAIz7C,EAAIgY,SAASiC,gBAAgB3gB,MAAM,KACvC4yB,EAAKzT,YAAYzY,GACjB6O,EAAO4J,YAAYyT,GACnBruB,KAAKu6B,cAAgBp4B,EACrBnC,KAAKstC,UAAYnrC,CACrB,MACInC,KAAK4wB,WAAa,OAClB5wB,KAAKstC,UAAYt8B,EAErBhR,KAAKihC,YAAcjwB,EAEnBhR,KAAKq+B,gBAET,EAEAoa,aAAajpC,UAAUk6B,aAAe,WAClC,IAAIzwB,EAAejZ,KAAK0kB,aAAaC,YACrC3kB,KAAKwxB,gBAAkB1zB,MAAMC,MAAM,KAAK,CAACL,OAAOsC,KAAK0kB,aAAaC,YAAYpe,EAAIvG,KAAK0kB,aAAaC,YAAYpe,EAAE7I,OAAS,IAC3H,IAAImgD,EAAiB79C,KAAKstC,UAAU5uC,MACpCm/C,EAAen7C,MAAQm7C,EAAenL,KAAOz5B,EAAa2Y,GAAK5xB,KAAK+pC,WAAW9wB,EAAa2Y,IAAM,gBAC/F3Y,EAAaqE,KACZugC,EAAepL,OAASzyC,KAAK+pC,WAAW9wB,EAAaqE,IACrDugC,EAAeC,YAAc7kC,EAAa0Y,GAAG,MAEjD,IAaIt0B,EAAGI,EAbHye,EAAWlc,KAAKigB,WAAWjJ,YAAY2G,cAAc1E,EAAavY,GACtE,IAAIV,KAAKigB,WAAWjJ,YAAYrV,MAG5B,GAFAk8C,EAAetjC,SAAWtB,EAAajX,EAAE,KACzC67C,EAAeE,WAAa9kC,EAAajX,EAAE,KACxCka,EAASK,OACRvc,KAAKstC,UAAU9wB,UAAYN,EAASK,WACjC,CACHshC,EAAezjC,WAAa8B,EAASG,QACrC,IAAI6V,EAAUjZ,EAAaiZ,QAASD,EAAShZ,EAAagZ,OAC1D4rB,EAAepjC,UAAYwX,EAC3B4rB,EAAenjC,WAAawX,CAChC,CAIJ,IAEIkY,EAAM4T,EAAQC,EAFdrqB,EAAU3a,EAAa1S,EAC3B9I,EAAMm2B,EAAQl2B,OAEd,IACIqa,EADA0b,EAAezzB,KAAK0zB,QACZkW,EAAW,GACnBnlC,EAAM,EACV,IAAKpH,EAAI,EAAEA,EAAII,EAAKJ,GAAK,EAAG,CAuCxB,GAtCG2C,KAAKigB,WAAWjJ,YAAYrV,OACvB3B,KAAKm9C,UAAU14C,GAMf2lC,EAAQpqC,KAAKm9C,UAAU14C,KALvB2lC,EAAQjwB,SAASiC,gBAAgB3gB,MAAM,SACjC8hB,aAAa,iBAAkB,QACrC6sB,EAAM7sB,aAAa,kBAAkB,SACrC6sB,EAAM7sB,aAAa,oBAAoB,MAIvCvd,KAAKo9C,WACFp9C,KAAK0lC,UAAUjhC,GAEdw5C,GADAD,EAAUh+C,KAAK0lC,UAAUjhC,IACT4mC,SAAS,IAGzB2S,EAAU7jC,SAASpJ,cAAc,QACjCktC,EAAQ9jC,SAASiC,gBAAgB3gB,MAAM,QACjCmf,YAAYwvB,GAClB5rC,SAASw/C,MAIbh+C,KAAKo9C,SAYLhT,EAAQpqC,KAAKm9C,UAAU14C,GAAOzE,KAAKm9C,UAAU14C,GAAO0V,SAASiC,gBAAgB3gB,MAAM,QAXhFuE,KAAK0lC,UAAUjhC,IACdu5C,EAAUh+C,KAAK0lC,UAAUjhC,GACzB2lC,EAAQpqC,KAAKm9C,UAAU14C,KAGvBjG,SADAw/C,EAAU7jC,SAASpJ,cAAc,SAGjCvS,SADA4rC,EAAQjwB,SAASpJ,cAAc,SAE/BitC,EAAQpjC,YAAYwvB,IAO7BpqC,KAAKigB,WAAWjJ,YAAYrV,MAAM,CACjC,IACI6S,EADAgiB,EAAWx2B,KAAKigB,WAAWjJ,YAAYyG,YAAYxE,EAAanZ,EAAEo3B,OAAO75B,GAAI6e,EAAS+V,OAAQjyB,KAAKigB,WAAWjJ,YAAY2G,cAAc1E,EAAavY,GAAG2b,SAc5J,GAXI7H,EADDgiB,EACaA,EAASpf,KAET,KAEhBqc,EAAa9uB,QACV6P,GAAaA,EAAUuD,SACtBA,EAASvD,EAAUuD,OAAO,GAAGO,GAC7Bmb,EAAa1tB,MAAMkT,EAAajX,EAAE,IAAIiX,EAAajX,EAAE,KACrD4nC,EAAW5pC,KAAK2pC,gBAAgBlW,EAAa1b,GAC7CqyB,EAAM7sB,aAAa,IAAIqsB,IAEvB5pC,KAAKo9C,SAmBLp9C,KAAKstC,UAAU1yB,YAAYwvB,QAjB3B,GADApqC,KAAKstC,UAAU1yB,YAAYojC,GACxBxpC,GAAaA,EAAUuD,OAAO,CAC7BoC,SAASU,KAAKD,YAAYqjC,GAE1B,IAAIR,EAAcQ,EAAMrT,UACxBqT,EAAM1gC,aAAa,QAAQkgC,EAAY1yC,MAAQ,GAC/CkzC,EAAM1gC,aAAa,SAASkgC,EAAYhgB,OAAS,GACjDwgB,EAAM1gC,aAAa,UAAWkgC,EAAYp0C,EAAE,EAAG,KAAMo0C,EAAYn0C,EAAE,GAAG,KAAMm0C,EAAY1yC,MAAM,GAAG,KAAM0yC,EAAYhgB,OAAO,IAC1HwgB,EAAMv/C,MAAMmI,UAAYo3C,EAAMv/C,MAAMs6C,gBAAkB,cAAgByE,EAAYp0C,EAAE,GAAK,OAASo0C,EAAYn0C,EAAE,GAAK,MAErHsqB,EAAQv2B,GAAGs1B,QAAU8qB,EAAYn0C,EAAE,EACnC00C,EAAQpjC,YAAYqjC,EAExB,MACIA,EAAM1gC,aAAa,QAAQ,GAC3B0gC,EAAM1gC,aAAa,SAAS,EAKxC,MACI6sB,EAAM9tB,YAAcsX,EAAQv2B,GAAGO,IAC/BwsC,EAAMI,eAAe,uCAAwC,YAAY,YACrExqC,KAAKo9C,SAKLp9C,KAAKstC,UAAU1yB,YAAYwvB,IAJ3BpqC,KAAKstC,UAAU1yB,YAAYojC,GAE3B5T,EAAM1rC,MAAMmI,UAAYujC,EAAM1rC,MAAMs6C,gBAAkB,kBAAmB//B,EAAajX,EAAE,IAAI,SAMhGhC,KAAKo9C,SAGLp9C,KAAK0lC,UAAUjhC,GAAO2lC,EAFtBpqC,KAAK0lC,UAAUjhC,GAAOu5C,EAI1Bh+C,KAAK0lC,UAAUjhC,GAAK/F,MAAMI,QAAU,QACpCkB,KAAKm9C,UAAU14C,GAAO2lC,EACtB3lC,GAAO,CACX,CACA,KAAMA,EAAMzE,KAAK0lC,UAAUhoC,QACvBsC,KAAK0lC,UAAUjhC,GAAK/F,MAAMI,QAAU,OACpC2F,GAAO,CAEf,EAEAg0C,aAAajpC,UAAUqvB,KAAO1B,eAAe3tB,UAAUqvB,KAEvD4Z,aAAajpC,UAAU8uB,YAAc,SAAS8J,GAG1C,IAAkB,IADCpoC,KAAKuR,QAAQ+sB,YAAYjtB,KAAKrR,KAAKooC,GACtD,CAUA,GANGpoC,KAAKqhC,SACJrhC,KAAKqhC,QAAS,EACdrhC,KAAKstC,UAAU5uC,MAAMI,QAAU,QAC/BkB,KAAKk9B,aAAax+B,MAAMI,QAAU,SAGnCkB,KAAKoX,KAAKY,YAAY,CACrB,IAAIhY,KAAKW,aAAeX,KAAKyxB,mBACzB,OAGIzxB,KAAKo9C,UAAYp9C,KAAKm/B,eAAeoC,SACpCvhC,KAAKquB,KAAK9Q,aAAa,WAAWvd,KAAKm/B,eAAeC,MAAM/8B,EAAEJ,EAAE,GAAG,KAAMjC,KAAKm/B,eAAeC,MAAM/8B,EAAEJ,EAAE,GAAG,IAAIjC,KAAK29C,MAAM,IAAI39C,KAAK49C,OACnI59C,KAAKquB,KAAK3vB,MAAMmI,UAAY7G,KAAKquB,KAAK3vB,MAAMs6C,gBAAkB,cAAgBh5C,KAAKm/B,eAAeC,MAAM/8B,EAAEJ,EAAE,GAAK,OAASjC,KAAKm/B,eAAeC,MAAM/8B,EAAEJ,EAAE,GAAK,MAGzK,CAGA,GADAjC,KAAKypC,aAAapW,YAAYrzB,KAAK0kB,aAAaC,YAAa3kB,KAAKyxB,oBAC9DzxB,KAAKyxB,oBAAuBzxB,KAAKypC,aAAahY,mBAAlD,CAGA,IAAKp0B,EAAEI,EAMHqtC,EAAgBC,EAAUmT,EANlBxyC,EAAQ,EAChB8lB,EAAkBxxB,KAAKypC,aAAajY,gBAEpCoC,EAAU5zB,KAAK0kB,aAAaC,YAAYpe,EAI5C,IAFA9I,EAAMm2B,EAAQl2B,OAEVL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACVu2B,EAAQv2B,GAAGuC,EACV8L,GAAS,GAGbq/B,EAAW/qC,KAAK0lC,UAAUroC,GAC1B6gD,EAAWl+C,KAAKm9C,UAAU9/C,GAC1BytC,EAAiBtZ,EAAgB9lB,GACjCA,GAAS,EACL1L,KAAKo9C,SAGLrS,EAASxtB,aAAa,YAAYutB,EAAetkC,GAFjDukC,EAASrsC,MAAMmI,UAAYkkC,EAASrsC,MAAMs6C,gBAAkBlO,EAAetkC,EAK/EukC,EAASrsC,MAAM+iC,QAAUqJ,EAAejnC,EACrCinC,EAAenZ,IACdusB,EAAS3gC,aAAa,eAAeutB,EAAenZ,IAErDmZ,EAAextB,IACd4gC,EAAS3gC,aAAa,SAASutB,EAAextB,IAE/CwtB,EAAelZ,KACdssB,EAAS3gC,aAAa,OAAOutB,EAAelZ,IAC5CssB,EAASx/C,MAAMgE,MAAQooC,EAAelZ,KAG9C,GAAG5xB,KAAKy/B,YAAcz/B,KAAK0/B,SAAW1/B,KAAKW,aACpCX,KAAKstC,UAAU1C,QAAQ,CACtB,IAAI6S,EAAcz9C,KAAKstC,UAAU1C,UAE9B5qC,KAAKmzC,YAAYp4B,IAAM0iC,EAAY1yC,QAClC/K,KAAKmzC,YAAYp4B,EAAI0iC,EAAY1yC,MACjC/K,KAAKquB,KAAK9Q,aAAa,QAAQkgC,EAAY1yC,QAE5C/K,KAAKmzC,YAAYpxC,IAAM07C,EAAYhgB,SAClCz9B,KAAKmzC,YAAYpxC,EAAI07C,EAAYhgB,OACjCz9B,KAAKquB,KAAK9Q,aAAa,SAASkgC,EAAYhgB,SAI7Cz9B,KAAKmzC,YAAYp4B,IAAO0iC,EAAY1yC,MAAQozC,GAAan+C,KAAKmzC,YAAYpxC,IAAO07C,EAAYhgB,OAAS0gB,GAAcn+C,KAAKmzC,YAAY9pC,IAAOo0C,EAAYp0C,EAD9I,GAC8JrJ,KAAKmzC,YAAY7pC,IAAOm0C,EAAYn0C,EADlM,IAETtJ,KAAKmzC,YAAYp4B,EAAI0iC,EAAY1yC,MAAQozC,EACzCn+C,KAAKmzC,YAAYpxC,EAAI07C,EAAYhgB,OAAS0gB,EAC1Cn+C,KAAKmzC,YAAY9pC,EAAIo0C,EAAYp0C,EAJxB,EAKTrJ,KAAKmzC,YAAY7pC,EAAIm0C,EAAYn0C,EALxB,EAOTtJ,KAAKquB,KAAK9Q,aAAa,UAAUvd,KAAKmzC,YAAY9pC,EAAE,IAAIrJ,KAAKmzC,YAAY7pC,EAAE,IAAItJ,KAAKmzC,YAAYp4B,EAAE,IAAI/a,KAAKmzC,YAAYpxC,GACvH/B,KAAKquB,KAAK3vB,MAAMmI,UAAY7G,KAAKquB,KAAK3vB,MAAMs6C,gBAAkB,aAAeh5C,KAAKmzC,YAAY9pC,EAAI,MAAQrJ,KAAKmzC,YAAY7pC,EAAI,MAEvI,CAEDtJ,KAAKW,aACJX,KAAKW,YAAa,EA7DtB,CAtBA,MAFIX,KAAK6+B,MAuFb,EAKA9tB,cAAcgiC,aAAc4F,eAE5BA,cAAcnpC,UAAUmyB,eAAiB,WAErC,IAAI0L,EAAYrtC,KAAKigB,WAAWoP,cAAcrvB,KAAKsvB,WAC/CM,EAAM,IAAI6qB,MAEd,GAAGz6C,KAAKoX,KAAKI,QAAQ,CACjB,IAAIxG,EAASmJ,SAASpJ,cAAc,OACpCvS,SAASwS,GACT,IAAIqd,EAAOlU,SAASiC,gBAAgB3gB,MAAM,OAC1C+C,SAAS6vB,GACTA,EAAK9Q,aAAa,QAAQvd,KAAKsvB,UAAUvU,GACzCsT,EAAK9Q,aAAa,SAASvd,KAAKsvB,UAAUvtB,GAC1CiP,EAAO4J,YAAYyT,GACnBruB,KAAKo+C,UAAYjkC,SAASiC,gBAAgB3gB,MAAM,SAChDuE,KAAKo+C,UAAU7gC,aAAa,QAAQvd,KAAKsvB,UAAUvU,EAAE,MACrD/a,KAAKo+C,UAAU7gC,aAAa,SAASvd,KAAKsvB,UAAUvtB,EAAE,MACtD/B,KAAKo+C,UAAU5T,eAAe,+BAA+B,OAAO6C,GACpEhf,EAAKzT,YAAY5a,KAAKo+C,WACtBp+C,KAAKk9B,aAAelsB,EACpBhR,KAAK66B,mBAAqB7pB,EAC1BhR,KAAKihC,YAAcjwB,EACnBhR,KAAKstC,UAAYt8B,EACjBhR,KAAKu6B,cAAgBv6B,KAAKo+C,SAC9B,MACI5/C,SAASoxB,GACT5vB,KAAKk9B,aAAetN,EACpB5vB,KAAKihC,YAAcrR,EACnB5vB,KAAKstC,UAAY1d,EACjB5vB,KAAK66B,mBAAqBjL,EAE9BA,EAAIE,IAAMud,EACPrtC,KAAKoX,KAAKsrB,IACT1iC,KAAKstC,UAAU/vB,aAAa,KAAKvd,KAAKoX,KAAKsrB,IAE/C1iC,KAAKq+B,gBACT,EAEAsa,cAAcnpC,UAAUsvB,KAAOkU,cAAcxjC,UAAUsvB,KACvD6Z,cAAcnpC,UAAUqvB,KAAOmU,cAAcxjC,UAAUqvB,KACvD8Z,cAAcnpC,UAAU8uB,YAAc0U,cAAcxjC,UAAU8uB,YAC9Dqa,cAAcnpC,UAAUuuB,QAAUiV,cAAcxjC,UAAUuuB,QA6B1DhtB,cAAcgiC,aAAc2F,gBAE5BA,eAAelpC,UAAU8pC,MAAQ,WAC7B,IAAIj8C,EAA0C+iB,EAAvC3iB,EAAMuC,KAAKogB,KAAKqxB,eAAe/zC,OACtC,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,GAEb+iB,EAAOpgB,KAAKogB,KAAKqxB,eAAep0C,IAC3By7C,gBAAgBp6C,MAAM+6C,YAAcr5B,EAAK04B,gBAAgBp6C,MAAMg7C,kBAAoB15C,KAAKq9C,GAAGp7C,EAAE,KAClGme,EAAKynB,UAAUnpC,MAAMK,gBAAkBqhB,EAAKynB,UAAUnpC,MAAM24C,mBAAqBj3B,EAAKynB,UAAUnpC,MAAMM,sBAAwB,cAC9HohB,EAAK04B,gBAAgBp6C,MAAMmI,UAAYuZ,EAAK04B,gBAAgBp6C,MAAMs6C,gBAAkB,2CAE5F,EAEAN,eAAelpC,UAAUmyB,eAAiB,WAC1C,EAEA+W,eAAelpC,UAAUqvB,KAAO,WAChC,EAEA6Z,eAAelpC,UAAU8uB,YAAc,WACnC,IACIjhC,EAAGI,EADH0iB,EAAMngB,KAAKW,WAEf,GAAGX,KAAK88B,UAEJ,IADAr/B,EAAMuC,KAAK88B,UAAUp/B,OACjBL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb8iB,IAAMngB,KAAK88B,UAAUz/B,GAAG8hC,eAAeC,MAAMjf,KAAaA,EAGlE,GAAGA,GAAQngB,KAAKqC,GAAKrC,KAAKqC,EAAE8d,KAASngB,KAAK0hB,KAAO1hB,KAAK0hB,GAAGvB,KAAOngB,KAAK2hB,GAAGxB,KAAOngB,KAAK4hB,GAAGzB,MAASngB,KAAK6iB,GAAG1C,KAAOngB,KAAK4iB,GAAGzC,KAAOngB,KAAKmiB,GAAGhC,KAAOngB,KAAKiiB,GAAG9B,KAAQngB,KAAKmG,GAAKnG,KAAKmG,EAAEga,IAAM,CAQhL,GAPAngB,KAAK2iB,IAAIhe,QAEN3E,KAAKqC,EACJrC,KAAK2iB,IAAIlc,WAAWzG,KAAKqC,EAAEJ,EAAE,IAAIjC,KAAKqC,EAAEJ,EAAE,GAAGjC,KAAKqC,EAAEJ,EAAE,IAEtDjC,KAAK2iB,IAAIlc,WAAWzG,KAAK0hB,GAAGzf,GAAGjC,KAAK2hB,GAAG1f,EAAEjC,KAAK4hB,GAAG3f,GAElDjC,KAAKmG,EAAE,CACN,IAAIk4C,EAAa,CAACr+C,KAAKqC,EAAEJ,EAAE,GAAGjC,KAAKmG,EAAElE,EAAE,GAAGjC,KAAKqC,EAAEJ,EAAE,GAAGjC,KAAKmG,EAAElE,EAAE,GAAGjC,KAAKqC,EAAEJ,EAAE,GAAGjC,KAAKmG,EAAElE,EAAE,IACnFq8C,EAAMniD,KAAKM,KAAKN,KAAKI,IAAI8hD,EAAW,GAAG,GAAGliD,KAAKI,IAAI8hD,EAAW,GAAG,GAAGliD,KAAKI,IAAI8hD,EAAW,GAAG,IAE3FE,EAAU,CAACF,EAAW,GAAGC,EAAID,EAAW,GAAGC,EAAID,EAAW,GAAGC,GAC7DE,EAAiBriD,KAAKM,KAAM8hD,EAAQ,GAAGA,EAAQ,GAAKA,EAAQ,GAAGA,EAAQ,IACvEE,EAAetiD,KAAKinB,MAAOm7B,EAAQ,GAAIC,GACvCE,EAAeviD,KAAKinB,MAAOm7B,EAAQ,IAAKA,EAAQ,IACpDv+C,KAAK2iB,IAAItd,QAAQq5C,GAAat5C,SAASq5C,EAE3C,CAMI,IAAI97B,EAQJvC,EATJ,GAJApgB,KAAK2iB,IAAIvd,SAASpF,KAAK6iB,GAAG5gB,GAAGoD,SAASrF,KAAK4iB,GAAG3gB,GAAGqD,QAAQtF,KAAKmiB,GAAGlgB,GACjEjC,KAAK2iB,IAAIvd,SAASpF,KAAKiiB,GAAGhgB,EAAE,IAAIoD,SAASrF,KAAKiiB,GAAGhgB,EAAE,IAAIqD,QAAQtF,KAAKiiB,GAAGhgB,EAAE,IACzEjC,KAAK2iB,IAAIlc,UAAUzG,KAAKigB,WAAW2d,SAAS7iB,EAAE,EAAE/a,KAAKigB,WAAW2d,SAAS77B,EAAE,EAAE,GAC7E/B,KAAK2iB,IAAIlc,UAAU,EAAE,EAAEzG,KAAKq9C,GAAGp7C,GAC5BjC,KAAK88B,UAGJ,IADAr/B,EAAMuC,KAAK88B,UAAUp/B,OACjBL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACbslB,EAAM3iB,KAAK88B,UAAUz/B,GAAG8hC,eAAeC,MAAM7b,GAAG3e,MAChD5E,KAAK2iB,IAAI9b,UAAU8b,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGA,EAAI,GAAGA,EAAI,IAAIA,EAAI,KAAKA,EAAI,KAAKA,EAAI,IAAIA,EAAI,IAAIA,EAAI,KAK/I,IAFAllB,EAAMuC,KAAKogB,KAAKqxB,eAAe/zC,OAE3BL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,GACb+iB,EAAOpgB,KAAKogB,KAAKqxB,eAAep0C,IAC3BwqC,UAAUnpC,MAAMmI,UAAYuZ,EAAKynB,UAAUnpC,MAAMs6C,gBAAkBh5C,KAAK2iB,IAAInY,OAEzF,CACAxK,KAAKW,YAAa,CACtB,EAEA+3C,eAAelpC,UAAUuuB,QAAU,WACnC,EACA,IAAI4gB,YACS,CACT3wC,gBAGA,SAAyB8/B,GACrBA,EAAU3pB,SAASoc,cAAgBC,wBAAwBsN,EAAU3pB,UACrE2pB,EAAU3pB,SAASlE,WAAWyc,iBAAiBuB,oBAAoB6P,EAAU3pB,SACjF,GAIJvoB,kBAAoB+iD,YAEnB,WAEG,SAASC,IACL,OAAO5+C,KAAK0gB,EAChB,CAEA,SAASm+B,EAAQ5+C,EAAK6+C,EAASC,GAC3B,IAAI/+C,KAAKsG,IAAMtG,KAAK4e,UAChB,OAAO5e,KAAK0gB,GAEhB,IAMQs+B,EAAeC,EANnB1gB,EAAev+B,KAAKogB,KAAKC,cACzBzB,EAAY5e,KAAK4e,UACjBsgC,EAAetgC,EAAUA,EAAUlhB,OAAS,GAAGoC,EACnD,GAAGy+B,GAAc2gB,EACb,OAAOl/C,KAAK0gB,GAGRq+B,EAYAE,EAAgBC,GAFZF,EAHAF,EAGgB3iD,KAAKQ,IAAIuiD,EAAel/B,KAAKI,KAAKH,WAAWkD,UAAU27B,GAFvD3iD,KAAKY,IAAI,EAAEmiD,EAAel/C,KAAKggB,KAAK5I,KAAKokB,QAPzDsjB,GAAYA,EAAWlgC,EAAUlhB,OAAS,KAC1CohD,EAAWlgC,EAAUlhB,OAAS,GAGlCshD,EAAgBE,GADhBD,EAAgBrgC,EAAUA,EAAUlhB,OAAS,EAAIohD,GAAUh/C,IAU/D,IACIzC,EAAGI,EAAK0hD,EADR1gC,EAAaze,KAAKye,YAAc,EAEpC,GAA0B,aAAvBxe,EAAK82B,eAEJ,GADiB56B,KAAKU,OAAO0hC,EAAe0gB,GAAeD,GAC3C,GAAM,EAClB,OAAOh/C,KAAKkjB,gBAAiB87B,GAAiBzgB,EAAe0gB,GAAiBD,EAAiBC,EAAiBxgC,GAAcze,KAAKogB,KAAKH,WAAWkD,UAAW,OAE/J,IAAY,WAATljB,EAAkB,CACxB,IAAIm/C,EAAQp/C,KAAKkjB,eAAe+7B,EAAgBj/C,KAAKogB,KAAKH,WAAWkD,UAAW,GAC5Ek8B,EAAOr/C,KAAKkjB,eAAeg8B,EAAel/C,KAAKogB,KAAKH,WAAWkD,UAAW,GAC1Em8B,EAAUt/C,KAAKkjB,iBAAiBqb,EAAe0gB,GAAiBD,EAAiBC,GAAiBj/C,KAAKogB,KAAKH,WAAWkD,UAAW,GAClIo8B,EAAUpjD,KAAKU,OAAO0hC,EAAe0gB,GAAeD,GACxD,GAAGh/C,KAAK0gB,GAAGhjB,OAAO,CAGd,IADAD,GADA0hD,EAAM,IAAIrhD,MAAMshD,EAAM1hD,SACZA,OACNL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb8hD,EAAI9hD,IAAMgiD,EAAKhiD,GAAG+hD,EAAM/hD,IAAIkiD,EAAUD,EAAQjiD,GAElD,OAAO8hD,CACX,CACA,OAAQE,EAAKD,GAAOG,EAAUD,CAClC,CAAO,GAAY,aAATr/C,EAAoB,CAC1B,IAAIihB,EAAYlhB,KAAKkjB,eAAeg8B,EAAel/C,KAAKogB,KAAKH,WAAWkD,UAAW,GAC/Eq8B,EAAgBx/C,KAAKkjB,gBAAgBg8B,EAAe,MAASl/C,KAAKogB,KAAKH,WAAWkD,UAAW,GACjG,GAAGnjB,KAAK0gB,GAAGhjB,OAAO,CAGd,IADAD,GADA0hD,EAAM,IAAIrhD,MAAMojB,EAAUxjB,SAChBA,OACNL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb8hD,EAAI9hD,GAAK6jB,EAAU7jB,IAAM6jB,EAAU7jB,GAAGmiD,EAAcniD,MAAMkhC,EAAe2gB,GAAel/C,KAAKogB,KAAKH,WAAWkD,WAAW,KAE5H,OAAOg8B,CACX,CACA,OAAOj+B,GAAyCqd,EAAe2gB,GAAe,MAA1Dh+B,EAAUs+B,EAClC,EACA,OAAOx/C,KAAKkjB,iBAAkBqb,EAAe0gB,GAAiBD,EAAiBC,EAAiBxgC,GAAcze,KAAKogB,KAAKH,WAAWkD,UAAW,EAEtJ,CAEA,SAASs8B,EAAOx/C,EAAK6+C,EAAUC,GAC3B,IAAI/+C,KAAKsG,EACL,OAAOtG,KAAK0gB,GAEhB,IAOQs+B,EAAeE,EAef7hD,EAAGI,EAAK0hD,EAtBZ5gB,EAAekM,KAAKzqB,KAAKI,KAAKH,WAAWkD,UACzCvE,EAAY5e,KAAK4e,UACjBqgC,EAAgBrgC,EAAU,GAAG9e,EAC7B2e,EAAaze,KAAKye,YAAc,EACpC,GAAG8f,GAAc0gB,EACb,OAAOj/C,KAAK0gB,GAkBZ,GAfIq+B,EAYAG,EAAeD,GAFXD,EAHAF,EAGgB3iD,KAAKQ,IAAIqjB,KAAKI,KAAKH,WAAWkD,UAAU27B,GAFxC3iD,KAAKY,IAAI,EAAEiD,KAAKggB,KAAK5I,KAAK+iB,GAAK8kB,OAP/CH,GAAYA,EAAWlgC,EAAUlhB,OAAS,KAC1CohD,EAAWlgC,EAAUlhB,OAAS,GAGlCshD,GADAE,EAAetgC,EAAUkgC,GAAUh/C,GACJm/C,GAUvB,aAATh/C,GAEC,GADiB9D,KAAKU,OAAOoiD,EAAgB1gB,GAAcygB,GAC3C,GAAM,EAClB,OAAOh/C,KAAKkjB,iBAAkB+7B,EAAgB1gB,GAAcygB,EAAiBC,EAAiBxgC,GAAcze,KAAKogB,KAAKH,WAAWkD,UAAW,OAE7I,IAAY,WAATljB,EAAkB,CACxB,IAAIm/C,EAAQp/C,KAAKkjB,eAAe+7B,EAAgBj/C,KAAKogB,KAAKH,WAAWkD,UAAW,GAC5Ek8B,EAAOr/C,KAAKkjB,eAAeg8B,EAAel/C,KAAKogB,KAAKH,WAAWkD,UAAW,GAC1Em8B,EAAUt/C,KAAKkjB,gBAAgB87B,GAAiBC,EAAgB1gB,GAAcygB,EAAiBC,GAAiBj/C,KAAKogB,KAAKH,WAAWkD,UAAW,GAChJo8B,EAAUpjD,KAAKU,OAAOoiD,EAAgB1gB,GAAcygB,GAAe,EACvE,GAAGh/C,KAAK0gB,GAAGhjB,OAAO,CAGd,IADAD,GADA0hD,EAAM,IAAIrhD,MAAMshD,EAAM1hD,SACZA,OACNL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb8hD,EAAI9hD,GAAKiiD,EAAQjiD,IAAIgiD,EAAKhiD,GAAG+hD,EAAM/hD,IAAIkiD,EAE3C,OAAOJ,CACX,CACA,OAAOG,GAASD,EAAKD,GAAOG,CAChC,CAAO,GAAY,aAATt/C,EAAoB,CAC1B,IAAIy/C,EAAa1/C,KAAKkjB,eAAe+7B,EAAgBj/C,KAAKogB,KAAKH,WAAWkD,UAAW,GACjFw8B,EAAiB3/C,KAAKkjB,gBAAgB+7B,EAAgB,MAASj/C,KAAKogB,KAAKH,WAAWkD,UAAW,GACnG,GAAGnjB,KAAK0gB,GAAGhjB,OAAO,CAGd,IADAD,GADA0hD,EAAM,IAAIrhD,MAAM4hD,EAAWhiD,SACjBA,OACNL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb8hD,EAAI9hD,GAAKqiD,EAAWriD,IAAMqiD,EAAWriD,GAAGsiD,EAAetiD,KAAK4hD,EAAgB1gB,GAAc,KAE9F,OAAO4gB,CACX,CACA,OAAOO,GAAcA,EAAWC,IAAiBV,EAAgB1gB,GAAc,IACnF,EAEA,OAAOv+B,KAAKkjB,gBAAiB87B,GAAiBC,EAAgB1gB,GAAgBygB,EAAiBC,EAAiBxgC,GAAcze,KAAKogB,KAAKH,WAAWkD,UAAW,EAEtK,CAEA,SAASD,EAAe9E,GAKpB,GAJIpe,KAAK4/C,iBACL5/C,KAAK4/C,eAAiB,CAAC1+B,WAAW,MAAMV,UAAU,IAGnDpC,IAAape,KAAK4/C,eAAezgC,UAAW,CAC3Cf,GAAYpe,KAAKggB,KAAKC,WAAWkD,UACjC/E,GAAYpe,KAAKye,WACjB,IAAIphB,EAAI2C,KAAKugB,SAASpB,UAAYf,EAAWpe,KAAKugB,SAASC,UAAY,EACnEq/B,EAAsB7/C,KAAKme,iBAAiBC,EAAU/gB,EAAG2C,KAAK0gB,GAAI1gB,KAAK4/C,gBAC3E5/C,KAAK4/C,eAAep/B,UAAYq/B,EAAoBxhC,eACpDre,KAAK4/C,eAAe9/B,MAAQ+/B,EAAoB//B,MAChD9f,KAAK4/C,eAAezgC,UAAYf,CACpC,CACA,OAAOpe,KAAK4/C,eAAe9/B,KAE/B,CAEA,SAASggC,EAAkB1hC,GACvB,QAAgBxc,IAAb5B,KAAKghB,IACJ,OAAOhhB,KAAKghB,IAEhB,IAII++B,EAGI1iD,EAPJ2iD,GAAS,IAETj9B,EAAK/iB,KAAKkjB,eAAe9E,GACzB4E,EAAKhjB,KAAKkjB,eAAe9E,EAAW4hC,GAExC,GAAGj9B,EAAGrlB,OAGF,IAFAqiD,EAAWjiD,MAAMC,MAAM,KAAK,CAACL,OAAOqlB,EAAGrlB,SAEnCL,EAAE,EAAEA,EAAE0lB,EAAGrlB,OAAOL,GAAG,EAInB0iD,EAAS1iD,IAAM2lB,EAAG3lB,GAAK0lB,EAAG1lB,IAAI2iD,OAGlCD,GAAY/8B,EAAKD,GAAIi9B,EAEzB,OAAOD,CACX,CAEA,SAASE,EAAiBC,GACtBlgD,KAAKkgD,cAAgBA,CACzB,CAEA,SAASC,EAAkBngC,EAAK5I,EAAKpL,GAC9BoL,EAAK/N,IACJ2C,EAAK1F,GAAI,EACT0F,EAAK3C,GAAI,EACN2C,EAAK/H,WACJ+H,EAAKo0C,YAAcp0C,EAAK/H,UAE5B+H,EAAK/H,SAAWo8C,kBAAkBC,mBAAmBj/C,KAAK2K,EAA1Cq0C,CAAgDrgC,EAAK5I,EAAKpL,GAElF,CAEA,SAASu0C,EAAwB9V,GAC7B+V,QAAQC,IAAI,QAAShW,EACzB,CAEA,SAASiW,EAA8BjW,GAEvC,CAEA,IAAIkW,EAA8B,WAE9B,SAASC,EAAcl0B,EAAMm0B,GAIzB,OAHA7gD,KAAK8gD,UAAYp0B,EAAM,EACvB1sB,KAAK+gD,UAAYF,EACjB7gD,KAAKiE,WACEjE,KAAKiC,CAChB,CAEA,OAAO,SAAoC+d,EAAK5I,GAC5CpX,KAAK0gB,GAAK,EACV1gB,KAAKogB,KAAOJ,EAAKI,KACjBpgB,KAAKggB,KAAOA,EACZhgB,KAAK2gB,KAAO,IACZ3gB,KAAKC,KAAO,eACZD,KAAK+gD,UAAY3pC,EAAKqN,WACtBzkB,KAAKghD,cAAgB,IACrBhhD,KAAKkhB,UAAY,CAAC,EAAE,EAAE,GACtBi/B,EAAkB9+C,KAAKrB,KAAvBmgD,CAA6BngC,EAAK5I,EAAKpX,MACvCA,KAAKglB,QAAU47B,EACf5gD,KAAK8/C,kBAAoBA,EACtB9/C,KAAK+gB,GACJ/gB,KAAKkjB,eAAiBA,EAAe7hB,KAAKrB,MAE1CA,KAAKkjB,eAAiB07B,EAAqBv9C,KAAKrB,MAEpDA,KAAKigD,iBAAmBA,CAC5B,CACJ,CA5BiC,GA+B7BgB,EAAkBhjC,gBAAgBwF,QACtCxF,gBAAgBwF,QAAU,SAASzD,EAAK5I,EAAKnX,EAAM0gB,EAAMxW,GACrD,IAAI6B,EAAOi1C,EAAgBjhC,EAAK5I,EAAKnX,EAAM0gB,EAAMxW,GAIrC,IAATlK,EACI+L,EAAKhI,kBAAkBtG,OACtBsO,EAAKkX,eAAiBq9B,EAAwBl/C,KAAK2K,GAEnDA,EAAKkX,eAAiBw9B,EAA8Br/C,KAAK2K,GAG1DA,EAAK+U,GACJ/U,EAAKkX,eAAiBA,EAAe7hB,KAAK2K,GAE1CA,EAAKkX,eAAiB07B,EAAqBv9C,KAAK2K,GAGxDA,EAAKi0C,iBAAmBA,EACxBj0C,EAAK6yC,QAAUA,EACf7yC,EAAKyzC,OAASA,EACdzzC,EAAK8zC,kBAAoBA,EACzB9zC,EAAKk1C,QAAqB,IAAX9pC,EAAKjR,EAAUiR,EAAK9Q,EAAE5I,OAAS,EAC9C,IAAIyjD,EAAUn1C,EAAK1F,EAanB,YAZe1E,IAAZwV,EAAKgqC,IACJ7jD,OAAOmmB,eAAe1X,EAAK,gBAAgB,CACvCuD,IAAK,WACD,OAAO6H,EAAKgqC,EAChB,IAGRjB,EAAkBngC,EAAK5I,EAAKpL,IACxBm1C,GAAWn1C,EAAK3C,GAChBc,EAAIhJ,KAAK6K,GAGNA,CACX,EAiBA,IAAIq1C,EAAmC/6B,qBAAqBg7B,yBACxDC,EAA4Cj7B,qBAAqBk7B,kCAErEH,EAAiC7xC,UAAUiyC,SAAW,SAASz1C,EAAMy+B,GACjE,IAAI7e,EAAY5rB,KAAKiC,OACTL,IAAT6oC,IACC7e,EAAY5rB,KAAKkjB,eAAeunB,EAAM,IAE1C,IAAIptC,EAAGI,EAAMmuB,EAAU/W,QACnB4sC,EAAW71B,EAAU5f,GACrBmD,EAASyc,EAAU3pB,EACnBkI,EAAMrM,MAAMC,MAAM,KAAK,CAACL,OAAOD,IACnC,IAAIJ,EAAI,EAAGA,EAAII,EAAKJ,GAAK,EAEjB8M,EAAI9M,GADI,MAAT2O,GAAyB,MAATA,EACN,CAACy1C,EAASpkD,GAAG,GAAK8R,EAAO9R,GAAG,GAAIokD,EAASpkD,GAAG,GAAK8R,EAAO9R,GAAG,IAE3D,CAACokD,EAASpkD,GAAG,GAAIokD,EAASpkD,GAAG,IAI9C,OAAO8M,CACX,EAEAk3C,EAAiC7xC,UAAUL,OAAS,SAASs7B,GACzD,OAAOzqC,KAAKyhD,SAAS,IAAKhX,EAC9B,EAEA4W,EAAiC7xC,UAAUkyC,WAAa,SAASjX,GAC7D,OAAOzqC,KAAKyhD,SAAS,IAAKhX,EAC9B,EAEA4W,EAAiC7xC,UAAUmyC,YAAc,SAASlX,GAC9D,OAAOzqC,KAAKyhD,SAAS,IAAKhX,EAC9B,EAEA4W,EAAiC7xC,UAAUoyC,SAAW,WAClD,OAAO5hD,KAAKiC,EAAEpC,CAClB,EAEAwhD,EAAiC7xC,UAAUqyC,YAAc,SAAShvC,EAAM43B,GACpE,IAAI7e,EAAY5rB,KAAKiC,OACTL,IAAT6oC,IACC7e,EAAY5rB,KAAKkjB,eAAeunB,EAAM,IAEtCzqC,KAAK8hD,kBACL9hD,KAAK8hD,gBAAkBnrC,IAAIpC,kBAAkBqX,IAUjD,IAPA,IAAIm2B,EAAiB/hD,KAAK8hD,gBACtBhtC,EAAUitC,EAAejtC,QACzBX,EAAY4tC,EAAehtC,YAAclC,EACzCxV,EAAI,EAAGI,EAAMqX,EAAQpX,OAErBskD,EAAoB,EAElB3kD,EAAII,GAAK,CACX,GAAGukD,EAAoBltC,EAAQzX,GAAG2V,YAAcmB,EAAW,CAC5CW,EAAQzX,GAAG+V,SACtB,IAAI6uC,EAAY5kD,EACZ6kD,EAAYt2B,EAAU/rB,GAAKxC,IAAMI,EAAM,EAAK,EAAIJ,EAAI,EACpD4hB,GAAe9K,EAAY6tC,GAAmBltC,EAAQzX,GAAG2V,YACzDpJ,EAAK+M,IAAIpB,kBAAkBqW,EAAU3pB,EAAEggD,GAAYr2B,EAAU3pB,EAAEigD,GAAWt2B,EAAU/nB,EAAEo+C,GAAYr2B,EAAUvuB,EAAE6kD,GAAWjjC,EAAanK,EAAQzX,IAClJ,KACJ,CACI2kD,GAAqBltC,EAAQzX,GAAG2V,YAEpC3V,GAAK,CACT,CAIA,OAHIuM,IACAA,EAAKgiB,EAAU/rB,EAAI,CAAC+rB,EAAU3pB,EAAE,GAAG,GAAG2pB,EAAU3pB,EAAE,GAAG,IAAI,CAAC2pB,EAAU3pB,EAAE2pB,EAAU/W,QAAQ,GAAG,GAAG+W,EAAU3pB,EAAE2pB,EAAU/W,QAAQ,GAAG,KAE5HjL,CACX,EAEAy3C,EAAiC7xC,UAAU2yC,aAAe,SAAStvC,EAAM43B,EAAM2X,GAE3EvvC,EAAe,GAARA,EAAY7S,KAAKiC,EAAEpC,EAAI,EAAI,KAAQgT,EAC1C,IAAIL,EAAMxS,KAAK6hD,YAAYhvC,EAAM43B,GAC7Bh4B,EAAMzS,KAAK6hD,YAAYhvC,EAAO,KAAO43B,GACrC4X,EAAU5vC,EAAI,GAAKD,EAAI,GACvB8vC,EAAU7vC,EAAI,GAAKD,EAAI,GACvB+vC,EAAYpmD,KAAKM,KAAKN,KAAKI,IAAI8lD,EAAQ,GAAKlmD,KAAKI,IAAI+lD,EAAQ,IAEjE,MADgC,YAAfF,EAA2B,CAACC,EAAQE,EAAWD,EAAQC,GAAa,EAAED,EAAQC,EAAWF,EAAQE,EAEtH,EAEAlB,EAAiC7xC,UAAUgzC,cAAgB,SAAS3vC,EAAM43B,GACtE,OAAOzqC,KAAKmiD,aAAatvC,EAAM43B,EAAM,UACzC,EAEA4W,EAAiC7xC,UAAUizC,aAAe,SAAS5vC,EAAM43B,GACrE,OAAOzqC,KAAKmiD,aAAatvC,EAAM43B,EAAM,SACzC,EAEA4W,EAAiC7xC,UAAUywC,iBAAmBA,EAC9DoB,EAAiC7xC,UAAU0T,eAAiB07B,EAE5D2C,EAA0C/xC,UAAUiyC,SAAWJ,EAAiC7xC,UAAUiyC,SAC1GF,EAA0C/xC,UAAUL,OAASkyC,EAAiC7xC,UAAUL,OACxGoyC,EAA0C/xC,UAAUkyC,WAAaL,EAAiC7xC,UAAUkyC,WAC5GH,EAA0C/xC,UAAUmyC,YAAcN,EAAiC7xC,UAAUmyC,YAC7GJ,EAA0C/xC,UAAUoyC,SAAWP,EAAiC7xC,UAAUoyC,SAC1GL,EAA0C/xC,UAAUqyC,YAAcR,EAAiC7xC,UAAUqyC,YAC7GN,EAA0C/xC,UAAU2yC,aAAed,EAAiC7xC,UAAU2yC,aAC9GZ,EAA0C/xC,UAAUgzC,cAAgBnB,EAAiC7xC,UAAUgzC,cAC/GjB,EAA0C/xC,UAAUizC,aAAepB,EAAiC7xC,UAAUizC,aAC9GlB,EAA0C/xC,UAAUywC,iBAAmBoB,EAAiC7xC,UAAUywC,iBAClHsB,EAA0C/xC,UAAU0T,eA1HpD,SAA6B9E,GAMzB,GALKpe,KAAK0iD,oBACN1iD,KAAK2iD,iBAAmB,EACxB3iD,KAAK4iD,iBAAmB,OACxB5iD,KAAK0iD,kBAAoBx7B,WAAWje,MAAMjJ,KAAK0gB,KAEhDtC,IAAape,KAAK4iD,gBAAiB,CAClC5iD,KAAK4iD,gBAAkBxkC,EACvBA,GAAYpe,KAAKggB,KAAKC,WAAWkD,UACjC,IAAI08B,EAAsB7/C,KAAKumB,iBAAiBnI,EAAUpe,KAAK2iD,iBAAkB3iD,KAAK0iD,mBAAmB,GACzG1iD,KAAK2iD,iBAAmB9C,EAAoBxhC,cAChD,CACA,OAAOre,KAAK0iD,iBAChB,EA+GA,IAAIG,EAAuBv8B,qBAAqB8T,aAChD9T,qBAAqB8T,aAAe,SAASpa,EAAK5I,EAAKnX,EAAMkK,EAAK24C,GAC9D,IAAI92C,EAAO62C,EAAqB7iC,EAAK5I,EAAKnX,EAAMkK,EAAK24C,GACjD3B,EAAUn1C,EAAK1F,EAgBnB,YAfe1E,IAAZwV,EAAKgqC,IACJ7jD,OAAOmmB,eAAe1X,EAAK,gBAAgB,CACvCuD,IAAK,WACD,OAAO6H,EAAKgqC,EAChB,IAGI,IAATnhD,EACCkgD,EAAkBngC,EAAK5I,EAAKxN,GAAGoC,GAChB,IAAT/L,GACNkgD,EAAkBngC,EAAK5I,EAAKiB,GAAGrM,IAE/Bm1C,GAAWn1C,EAAK3C,GAChBc,EAAIhJ,KAAK6K,GAENA,CACX,EAEA,IAAI+2C,EAAsB9kC,gBAAgBqH,oBAC1CrH,gBAAgBqH,oBAAsB,SAAStF,EAAM5I,EAAKjN,GACtD,OAAc,IAAXiN,EAAKtX,EACG,IAAI6gD,EAA2B3gC,EAAM5I,EAAKjN,GAE1C44C,EAAoB/iC,EAAK5I,EAAKjN,EAE7C,CACJ,CAvaA,GAubI0nB,aAAariB,UAAUojB,eAAiB,WAEpC,OADA5yB,KAAK+gB,GAAK/gB,KAAKmgD,qBAAuBngD,KAAKoX,KAAKrX,EAAEuG,EAAE5I,OAAS,EACtDsC,KAAK+gB,EAChB,EAEA8Q,aAAariB,UAAUwzC,mBAAqB,SAASj/C,GACjD/D,KAAKijD,sBACFjjD,KAAKmgB,MACJngB,KAAK2kB,YAAY7kB,EAAIE,KAAKiC,EAAEgB,WAC5BjD,KAAKs2B,iBAAiBt2B,KAAK2kB,aAEnC,EAEAkN,aAAariB,UAAU2wC,kBA1BvB,WACI,QAAGngD,KAAKoX,KAAKrX,EAAEsJ,IACXrJ,KAAKogB,KAAOpgB,KAAKggB,KAAKI,KACnBpgB,KAAKiE,WACJjE,KAAKogD,YAAcpgD,KAAKiE,UAE5BjE,KAAKijD,oBAAsB5C,kBAAkBC,mBAAmBj/C,KAAKrB,KAA1CqgD,CAAgDrgD,KAAKggB,KAAKhgB,KAAKoX,KAAKrX,EAAEC,MACjGA,KAAKiE,SAAWjE,KAAKgjD,oBACd,EAGf,EAkBJ,IAAI3C,kBAAqB,WACrB,IAAIryC,GAAK,CAAC,EACN7R,KAAOgB,OACP3B,OAAS,KACT2e,SAAW,KAEf,SAAS+oC,uBAAuBpjC,EAAOa,GAGnC,GAFAA,EAAOA,GAAQ,EAEK,iBAAVb,GAAuBA,aAAiBqjC,OAC9C,OAAOrjC,EAAMa,EACX,GAAGb,EAAMziB,EACX,OAAO6a,KAAKC,MAAMD,KAAKE,UAAU0H,IAEjC,IACIziB,EADA8M,EAAMrM,MAAMC,MAAM,KAAK,CAACL,OAAOoiB,EAAMpiB,SAClCD,EAAMqiB,EAAMpiB,OACnB,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb8M,EAAI9M,GAAGyiB,EAAMziB,GAAGsjB,EAEpB,OAAOxW,CAEf,CAEA,SAASi5C,YAAYC,EAAQC,GACzB,GAAGD,EAAOxuC,UAAYyuC,EAAOzuC,SAAWwuC,EAAOxjD,IAAMyjD,EAAOzjD,EACxD,OAAO,EAEX,IAAIxC,EAAGI,EAAM4lD,EAAOxuC,QACpB,IAAIxX,EAAI,EAAGA,EAAII,EAAKJ,GAAK,EACrB,GAAGgmD,EAAOphD,EAAE5E,GAAG,KAAOimD,EAAOrhD,EAAE5E,GAAG,IAAMgmD,EAAOphD,EAAE5E,GAAG,KAAOimD,EAAOrhD,EAAE5E,GAAG,IAChEgmD,EAAOx/C,EAAExG,GAAG,KAAOimD,EAAOz/C,EAAExG,GAAG,IAAMgmD,EAAOx/C,EAAExG,GAAG,KAAOimD,EAAOz/C,EAAExG,GAAG,IACpEgmD,EAAOhmD,EAAEA,GAAG,KAAOimD,EAAOjmD,EAAEA,GAAG,IAAMgmD,EAAOhmD,EAAEA,GAAG,KAAOimD,EAAOjmD,EAAEA,GAAG,GACvE,OAAO,EAGf,OAAO,CACX,CAEA,SAASkmD,QAAQp9C,GACb,IAAIq9C,SAAcr9C,EAClB,GAAY,WAATq9C,GAA8B,YAATA,GAAuBr9C,aAAag9C,OACxD,OAAQh9C,EAEZ,GAAGA,EAAEmL,cAAgBxT,MAAM,CACvB,IAAIT,EAAGomD,EAAOt9C,EAAEzI,OACZgmD,EAAS,GACb,IAAIrmD,EAAE,EAAEA,EAAEomD,EAAKpmD,GAAG,EACdqmD,EAAOrmD,IAAM8I,EAAE9I,GAEnB,OAAOqmD,CACX,CACJ,CAEA,SAASC,IAAIx9C,EAAE/D,GACX,IAAIohD,SAAcr9C,EACdy9C,SAAcxhD,EAClB,GAAY,WAATohD,GAA8B,WAATI,EACpB,OAAOz9C,EAAI/D,EAEf,IAAa,WAATohD,GAA8B,YAATA,GAA+B,WAATA,GAAqBr9C,aAAag9C,UAAqB,WAATS,GAA8B,YAATA,GAA+B,WAATA,GAAsBxhD,aAAa+gD,QACvK,OAAOh9C,EAAI/D,EAEf,GAAG+D,EAAEmL,cAAgBxT,QAAmB,WAAT8lD,GAA8B,YAATA,GAA+B,WAATA,GAAqBxhD,aAAa+gD,QAExG,OADAh9C,EAAE,GAAKA,EAAE,GAAK/D,EACP+D,EAEX,IAAa,WAATq9C,GAA8B,YAATA,GAA+B,WAATA,GAAqBr9C,aAAag9C,SAAY/gD,EAAEkP,cAAgBxT,MAE3G,OADAsE,EAAE,GAAK+D,EAAI/D,EAAE,GACNA,EAEX,GAAG+D,EAAEmL,cAAgBxT,OAASsE,EAAEkP,cAAgBxT,MAAM,CAIlD,IAFA,IAAIT,EAAI,EAAGomD,EAAOt9C,EAAEzI,OAAQmmD,EAAOzhD,EAAE1E,OACjCgmD,EAAS,GACPrmD,EAAEomD,GAAQpmD,EAAIwmD,IACI,iBAAT19C,EAAE9I,IAAmB8I,EAAE9I,aAAc8lD,UAA4B,iBAAT/gD,EAAE/E,IAAmB+E,EAAE/E,aAAc8lD,QACpGO,EAAOrmD,GAAK8I,EAAE9I,GAAK+E,EAAE/E,GAErBqmD,EAAOrmD,GAAauE,MAARQ,EAAE/E,GAAkB8I,EAAE9I,GAAK8I,EAAE9I,IAAM+E,EAAE/E,GAErDA,GAAK,EAET,OAAOqmD,CACX,CACA,OAAO,CACX,CACA,IAAI7tB,IAAM8tB,IAEV,SAASG,IAAI39C,EAAE/D,GACX,IAAIohD,SAAcr9C,EACdy9C,SAAcxhD,EAClB,IAAa,WAATohD,GAA8B,YAATA,GAA+B,WAATA,GAAqBr9C,aAAag9C,UAAsB,WAATS,GAA8B,YAATA,GAA+B,WAATA,GAAqBxhD,aAAa+gD,QAOvK,MANY,WAATK,IACCr9C,EAAI5C,SAAS4C,IAEL,WAATy9C,IACCxhD,EAAImB,SAASnB,IAEV+D,EAAI/D,EAEf,GAAI+D,EAAEmL,cAAgBxT,QAAmB,WAAT8lD,GAA8B,YAATA,GAA+B,WAATA,GAAqBxhD,aAAa+gD,QAEzG,OADAh9C,EAAE,GAAKA,EAAE,GAAK/D,EACP+D,EAEX,IAAa,WAATq9C,GAA8B,YAATA,GAA+B,WAATA,GAAqBr9C,aAAag9C,SAAa/gD,EAAEkP,cAAgBxT,MAE5G,OADAsE,EAAE,GAAK+D,EAAI/D,EAAE,GACNA,EAEX,GAAG+D,EAAEmL,cAAgBxT,OAASsE,EAAEkP,cAAgBxT,MAAM,CAGlD,IAFA,IAAIT,EAAI,EAAGomD,EAAOt9C,EAAEzI,OAAQmmD,EAAOzhD,EAAE1E,OACjCgmD,EAAS,GACPrmD,EAAEomD,GAAQpmD,EAAIwmD,IACI,iBAAT19C,EAAE9I,IAAmB8I,EAAE9I,aAAc8lD,UAAmC,iBAAT/gD,EAAE/E,IAAmB+E,EAAE/E,GAAtC,GACvDqmD,EAAOrmD,GAAK8I,EAAE9I,GAAK+E,EAAE/E,GAErBqmD,EAAOrmD,GAAauE,MAARQ,EAAE/E,GAAkB8I,EAAE9I,GAAK8I,EAAE9I,IAAM+E,EAAE/E,GAErDA,GAAK,EAET,OAAOqmD,CACX,CACA,OAAO,CACX,CAEA,SAASK,IAAI59C,EAAE/D,GACX,IAEI+H,EAKA9M,EAAGI,EAPH+lD,SAAcr9C,EACdy9C,SAAcxhD,EAElB,IAAa,WAATohD,GAA8B,YAATA,GAA+B,WAATA,GAAqBr9C,aAAag9C,UAAsB,WAATS,GAA8B,YAATA,GAA+B,WAATA,GAAqBxhD,aAAa+gD,QACvK,OAAOh9C,EAAI/D,EAIf,GAAG+D,EAAEmL,cAAgBxT,QAAmB,WAAT8lD,GAA8B,YAATA,GAA+B,WAATA,GAAqBxhD,aAAa+gD,QAAS,CAGjH,IAFA1lD,EAAM0I,EAAEzI,OACRyM,EAAMrM,MAAMC,MAAM,KAAK,CAACL,OAAOD,IAC3BJ,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb8M,EAAI9M,GAAK8I,EAAE9I,GAAK+E,EAEpB,OAAO+H,CACX,CACA,IAAa,WAATq5C,GAA8B,YAATA,GAA+B,WAATA,GAAqBr9C,aAAag9C,SAAY/gD,EAAEkP,cAAgBxT,MAAM,CAGjH,IAFAL,EAAM2E,EAAE1E,OACRyM,EAAMrM,MAAMC,MAAM,KAAK,CAACL,OAAOD,IAC3BJ,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb8M,EAAI9M,GAAK8I,EAAI/D,EAAE/E,GAEnB,OAAO8M,CACX,CACA,OAAO,CACX,CAEA,SAASslC,IAAItpC,EAAE/D,GACX,IAEI+H,EAIA9M,EAAGI,EANH+lD,SAAcr9C,EACdy9C,SAAcxhD,EAElB,IAAa,WAATohD,GAA8B,YAATA,GAA+B,WAATA,GAAqBr9C,aAAag9C,UAAsB,WAATS,GAA8B,YAATA,GAA+B,WAATA,GAAqBxhD,aAAa+gD,QACvK,OAAOh9C,EAAI/D,EAGf,GAAG+D,EAAEmL,cAAgBxT,QAAmB,WAAT8lD,GAA8B,YAATA,GAA+B,WAATA,GAAqBxhD,aAAa+gD,QAAU,CAGlH,IAFA1lD,EAAM0I,EAAEzI,OACRyM,EAAMrM,MAAMC,MAAM,KAAK,CAACL,OAAOD,IAC3BJ,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb8M,EAAI9M,GAAK8I,EAAE9I,GAAK+E,EAEpB,OAAO+H,CACX,CACA,IAAa,WAATq5C,GAA8B,YAATA,GAA+B,WAATA,GAAqBr9C,aAAag9C,SAAY/gD,EAAEkP,cAAgBxT,MAAM,CAGjH,IAFAL,EAAM2E,EAAE1E,OACRyM,EAAMrM,MAAMC,MAAM,KAAK,CAACL,OAAOD,IAC3BJ,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb8M,EAAI9M,GAAK8I,EAAI/D,EAAE/E,GAEnB,OAAO8M,CACX,CACA,OAAO,CACX,CACA,SAAS65C,IAAI79C,EAAE/D,GAOX,MANgB,iBAAN+D,IACNA,EAAI5C,SAAS4C,IAED,iBAAN/D,IACNA,EAAImB,SAASnB,IAEV+D,EAAI/D,CACf,CAEA,SAAS6hD,MAAMlgD,EAAK9G,EAAKF,GACrB,GAAGE,EAAMF,EAAI,CACT,IAAImnD,EAAKnnD,EACTA,EAAME,EACNA,EAAMinD,CACV,CACA,OAAO/nD,KAAKc,IAAId,KAAKY,IAAIgH,EAAK9G,GAAMF,EACxC,CAEA,SAASonD,iBAAiBvmD,GACtB,OAAOA,EAAIK,SACf,CACA,IAAImmD,mBAAqBD,iBAEzB,SAASE,iBAAiBzmD,GACtB,OAAOA,EAAIK,SACf,CACA,IAAIqmD,mBAAqBH,iBAErBI,kBAAoB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAEnC,SAAS7mD,OAAO8mD,EAAKC,GACjB,GAAmB,iBAATD,GAAqBA,aAAgBrB,OAE3C,OADAsB,EAAOA,GAAQ,EACRtoD,KAAKQ,IAAI6nD,EAAOC,GAEvBA,IACAA,EAAOF,mBAEX,IAAIlnD,EAAEI,EAAMtB,KAAKc,IAAIunD,EAAK9mD,OAAO+mD,EAAK/mD,QAClCsV,EAAc,EAClB,IAAI3V,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb2V,GAAe7W,KAAKI,IAAIkoD,EAAKpnD,GAAGmnD,EAAKnnD,GAAG,GAE5C,OAAOlB,KAAKM,KAAKuW,EACrB,CAEA,SAAS0xC,UAAUC,GACf,OAAOlV,IAAIkV,EAAKjnD,OAAOinD,GAC3B,CAEA,SAASC,SAAShnD,GACd,IAEImE,EAAGC,EAFHE,EAAItE,EAAI,GAAQuE,EAAIvE,EAAI,GAAQwE,EAAIxE,EAAI,GACxCb,EAAMZ,KAAKY,IAAImF,EAAGC,EAAGC,GAAInF,EAAMd,KAAKc,IAAIiF,EAAGC,EAAGC,GACxCmE,GAAKxJ,EAAME,GAAO,EAE5B,GAAGF,GAAOE,EACN8E,EAAIC,EAAI,MACP,CACD,IAAIjC,EAAIhD,EAAME,EAEd,OADA+E,EAAIuE,EAAI,GAAMxG,GAAK,EAAIhD,EAAME,GAAO8C,GAAKhD,EAAME,GACxCF,GACH,KAAKmF,EAAGH,GAAKI,EAAIC,GAAKrC,GAAKoC,EAAIC,EAAI,EAAI,GAAI,MAC3C,KAAKD,EAAGJ,GAAKK,EAAIF,GAAKnC,EAAI,EAAG,MAC7B,KAAKqC,EAAGL,GAAKG,EAAIC,GAAKpC,EAAI,EAE9BgC,GAAK,CACT,CAEA,MAAO,CAACA,EAAGC,EAAGuE,EAAE3I,EAAI,GACxB,CACA,SAASinD,SAASjnD,GACd,IAIIsE,EAAGC,EAAGC,EAJNL,EAAInE,EAAI,GACRoE,EAAIpE,EAAI,GACR2I,EAAI3I,EAAI,GAIZ,GAAQ,GAALoE,EACCE,EAAIC,EAAIC,EAAImE,MACX,CACD,SAASu+C,EAAQziD,EAAGC,EAAGxC,GAGnB,OAFGA,EAAI,IAAGA,GAAK,GACZA,EAAI,IAAGA,GAAK,GACZA,EAAI,EAAE,EAAUuC,EAAc,GAATC,EAAID,GAASvC,EAClCA,EAAI,GAAYwC,EAChBxC,EAAI,EAAE,EAAUuC,GAAKC,EAAID,IAAM,EAAE,EAAIvC,GAAK,EACtCuC,CACX,CAEA,IAAIC,EAAIiE,EAAI,GAAMA,GAAK,EAAIvE,GAAKuE,EAAIvE,EAAIuE,EAAIvE,EACxCK,EAAI,EAAIkE,EAAIjE,EAChBJ,EAAI4iD,EAAQziD,EAAGC,EAAGP,EAAI,EAAE,GACxBI,EAAI2iD,EAAQziD,EAAGC,EAAGP,GAClBK,EAAI0iD,EAAQziD,EAAGC,EAAGP,EAAI,EAAE,EAC5B,CAEA,MAAO,CAACG,EAAGC,EAAIC,EAAGxE,EAAI,GAC1B,CAEA,SAASmnD,OAAOjlD,EAAGklD,EAAMC,EAAMC,EAAQC,GACnC,QAAcvjD,IAAXsjD,QAAmCtjD,IAAXujD,EACvB,OAAOJ,OAAOjlD,EAAE,EAAE,EAAEklD,EAAKC,GAE7B,GAAGnlD,GAAKklD,EACJ,OAAOE,EACL,GAAGplD,GAAKmlD,EACV,OAAOE,EAEX,IAAItyC,EAAOoyC,IAASD,EAAO,GAAKllD,EAAEklD,IAAOC,EAAKD,GAC9C,IAAIE,EAAOxnD,OACP,OAAOwnD,GAAUC,EAAOD,GAAQryC,EAEpC,IAAIxV,EAAGI,EAAMynD,EAAOxnD,OAChByM,EAAMrM,MAAMC,MAAO,KAAM,CAAEL,OAAQD,IACvC,IAAIJ,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb8M,EAAI9M,GAAK6nD,EAAO7nD,IAAM8nD,EAAO9nD,GAAG6nD,EAAO7nD,IAAIwV,EAE/C,OAAO1I,CACX,CACA,SAASxM,OAAOV,EAAIF,GAUhB,QATW6E,IAAR7E,SACY6E,IAAR3E,GACCA,EAAM,EACNF,EAAM,IAENA,EAAME,EACNA,OAAM2E,IAGX7E,EAAIW,OAAO,CACV,IAAIL,EAAGI,EAAMV,EAAIW,OACbT,IACAA,EAAMa,MAAMC,MAAM,KAAK,CAACL,OAAOD,KAEnC,IAAI0M,EAAMrM,MAAMC,MAAM,KAAK,CAACL,OAAOD,IAC/B2nD,EAAMjoD,OAAOQ,SACjB,IAAIN,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb8M,EAAI9M,GAAKJ,EAAII,GAAK+nD,GAAKroD,EAAIM,GAAGJ,EAAII,IAEtC,OAAO8M,CACX,CAKA,YAJWvI,IAAR3E,IACCA,EAAM,GAGHA,EADIE,OAAOQ,UACCZ,EAAIE,EAC3B,CAEA,SAASooD,WAAWl2C,EAAQuyC,EAAYC,EAAaltC,GACjDitC,EAAaA,GAAcA,EAAWhkD,OAASgkD,EAAavyC,EAC5DwyC,EAAcA,GAAeA,EAAYjkD,OAASikD,EAAcxyC,EAChE,IAAIoJ,EAAO2O,WAAWM,WAClB/pB,EAAM0R,EAAOzR,OAEjB,IADA6a,EAAKkN,YAAYhR,EAAQhX,GACrBJ,EAAI,EAAGA,EAAII,EAAKJ,GAAK,EACrBkb,EAAKwN,YAAY5W,EAAO9R,GAAG,GAAG8R,EAAO9R,GAAG,GAAGskD,EAAYtkD,GAAG,GAAK8R,EAAO9R,GAAG,GAAGskD,EAAYtkD,GAAG,GAAK8R,EAAO9R,GAAG,GAAGqkD,EAAWrkD,GAAG,GAAK8R,EAAO9R,GAAG,GAAGqkD,EAAWrkD,GAAG,GAAK8R,EAAO9R,GAAG,GAAGA,GAAE,GAEnL,OAAOkb,CACX,CAEA,SAAS+nC,mBAAmBtgC,KAAK5I,KAAKkuC,UAClC,IAAI1nD,IAAMwZ,KAAK/N,EACXk8C,cAAgB,qBAAqBzpD,KAAK8B,KAC1C4nD,cAA0C,IAA3B5nD,IAAI6xB,QAAQ,UAC3Bg2B,SAAWzlC,KAAK5I,KAAKzQ,GACrBE,UAAU6+C,QAAQC,OAClBC,SAAW5lC,KAAKI,KAChBylC,aAAeP,SACnBtlC,KAAKI,KAAK0lC,cAAgB,EAAE9lC,KAAKI,KAAKH,WAAWkD,UACjD,IAAI4iC,QAAU/lC,KAAK5I,KAAKokB,GAAGxb,KAAKI,KAAKH,WAAWkD,UAC5C6iC,SAAWhmC,KAAK5I,KAAK+iB,GAAGna,KAAKI,KAAKH,WAAWkD,UAC7CpY,MAAQiV,KAAK5I,KAAKua,GAAK3R,KAAK5I,KAAKua,GAAK,EACtC8L,OAASzd,KAAK5I,KAAKuI,GAAKK,KAAK5I,KAAKuI,GAAK,EACvC8/B,OAAQwG,QAASpH,QAASqH,SAC1BC,QAAQC,UAAUC,SAASC,kBAAkBC,YAAYC,UAAUZ,SAASx6C,KAAKq7C,YAAYC,eAC7FC,GAAK,IAAIC,SAITD,GAAKE,KAAK,eAAiBjpD,IAAjB,uFAAiH,GAC3HkpD,SAAWH,GAAGtlD,KAAKrB,MACnBkhD,QAAUoE,SAASvkC,GAAK3J,KAAK9Q,EAAE5I,OAAS,EAExCqpD,OAAS,SAAgBC,EAAKC,GAC9B,IAAI5pD,EAAEgJ,EAAG5I,EAAMuC,KAAK0gB,GAAGhjB,OAASsC,KAAK0gB,GAAGhjB,OAAS,EAC7CwpD,EAAYppD,MAAMC,MAAM,KAAK,CAACN,IAAIA,IACtC,IAAI4I,EAAE,EAAEA,EAAE5I,EAAI4I,GAAG,EACb6gD,EAAU7gD,GAAK,EAGnB,IAAI2iC,EAAa7sC,KAAKU,MADf,EACqB4tC,MAG5B,IAFAptC,EAAI,EACJgJ,EAAI,EACEhJ,EAAE2rC,GAAW,CAEf,IAAI3iC,EAAE,EAAEA,EAAE5I,EAAI4I,GAAG,EACb6gD,EAAU7gD,KAAO4gD,EAAU,EAAJA,EAAM9pD,OAAOQ,SAGxCN,GAAK,CACT,CAEA,IAAI8pD,EAbG,EAaO1c,KACV53B,EAAOs0C,EAAUhrD,KAAKU,MAAMsqD,GAC5Bh9C,EAAMrM,MAAMC,MAAM,CAACL,OAAOD,IAC9B,GAAGA,EAAI,EAAE,CACL,IAAI4I,EAAE,EAAEA,EAAE5I,EAAI4I,GAAG,EACb8D,EAAI9D,GAAKrG,KAAK0gB,GAAGra,GAAK6gD,EAAU7gD,KAAO4gD,EAAU,EAAJA,EAAM9pD,OAAOQ,UAAUkV,EAIxE,OAAO1I,CACX,CACI,OAAOnK,KAAK0gB,GAAKwmC,EAAU,KAAOD,EAAU,EAAJA,EAAM9pD,OAAOQ,UAAUkV,CAEvE,EAAExR,KAAKrB,MAEJ6lD,aAAapG,SACZA,OAASoG,aAAapG,OAAOp+C,KAAKwkD,cAClCI,QAAUxG,QAGXoG,aAAahH,UACZA,QAAUgH,aAAahH,QAAQx9C,KAAKwkD,cACpCK,SAAWrH,SAGf,IAAIuI,eAAiB,SAAwBnnD,EAAK6+C,GAC9C,OAAOW,OAAOx/C,EAAK6+C,GAAS,EAChC,EAAEz9C,KAAKrB,MAEHqnD,gBAAkB,SAAyBpnD,EAAK6+C,GAChD,OAAOD,QAAQ5+C,EAAK6+C,GAAS,EACjC,EAAEz9C,KAAKrB,MAEJA,KAAKkjB,iBACJujC,YAAczmD,KAAKkjB,eAAe7hB,KAAKrB,OAGxCA,KAAK8/C,oBACJ4G,eAAiB1mD,KAAK8/C,kBAAkBz+C,KAAKrB,OAGjD,IAAIogB,KAAOJ,KAAKI,KAAKH,WAAWyc,iBAAiBr7B,KAAK2e,KAAKI,KAAKH,WAAWyc,kBAqGvE+N,KAAKsV,SAAUjgC,MAAMghC,UAAUC,UAAUC,cAnG7C,SAASsG,OAAOC,EAAMC,GAClB,IAAIC,EAAO,CAACD,EAAM,GAAGD,EAAM,GAAGC,EAAM,GAAGD,EAAM,GAAGC,EAAM,GAAGD,EAAM,IAC3DG,EAAQvrD,KAAKinB,MAAMqkC,EAAK,GAAGtrD,KAAKM,KAAKgrD,EAAK,GAAGA,EAAK,GAAGA,EAAK,GAAGA,EAAK,KAAKxpD,UAE3E,MAAO,EADI9B,KAAKinB,MAAMqkC,EAAK,GAAGA,EAAK,IAAIxpD,UAC3BypD,EAAM,EACtB,CAEA,SAASC,QAAQ7nD,EAAG8nD,EAAMC,GACtB,QAASA,EAAKD,GAAQ9nD,GAAGA,EAAE,GAAK8nD,CACpC,CAEA,SAASE,WAAWrd,GAChB,IAAIptC,EAAuBqvB,EAAMq7B,EAA1BtqD,EAAM2Z,KAAK9Q,EAAE5I,OACpB,GAAI0Z,KAAK9Q,EAAE5I,QAAgC,iBAAf0Z,KAAK9Q,EAAE,GAM/B,GAFAomB,GAAS,GACT+d,GAAQzqB,KAAKI,KAAKH,WAAWkD,WAClB/L,KAAK9Q,EAAE,GAAGxG,EACjB4sB,EAAQ,EACRq7B,EAAU3wC,KAAK9Q,EAAE,GAAGxG,MACjB,CACH,IAAIzC,EAAE,EAAEA,EAAEI,EAAI,EAAEJ,GAAG,EAAE,CACjB,GAAGotC,IAASrzB,KAAK9Q,EAAEjJ,GAAGyC,EAAE,CACpB4sB,EAAQrvB,EAAI,EACZ0qD,EAAU3wC,KAAK9Q,EAAEjJ,GAAGyC,EACpB,KACJ,CAAM,GAAG2qC,EAAKrzB,KAAK9Q,EAAEjJ,GAAGyC,GAAK2qC,EAAKrzB,KAAK9Q,EAAEjJ,EAAE,GAAGyC,EAAE,CACzC2qC,EAAKrzB,KAAK9Q,EAAEjJ,GAAGyC,EAAIsX,KAAK9Q,EAAEjJ,EAAE,GAAGyC,EAAI2qC,GAClC/d,EAAQrvB,EAAI,EACZ0qD,EAAU3wC,KAAK9Q,EAAEjJ,EAAE,GAAGyC,IAEtB4sB,EAAQrvB,EAAI,EACZ0qD,EAAU3wC,KAAK9Q,EAAEjJ,GAAGyC,GAExB,KACJ,CACJ,EACc,IAAX4sB,IACCA,EAAQrvB,EAAI,EACZ0qD,EAAU3wC,KAAK9Q,EAAEjJ,GAAGyC,EAE5B,MA7BA4sB,EAAQ,EACRq7B,EAAU,EA+Bd,IAAI/5C,EAAK,CAAC,EAGV,OAFAA,EAAG0e,MAAQA,EACX1e,EAAGy8B,KAAOsd,EAAQ/nC,KAAKI,KAAKH,WAAWkD,UAChCnV,CACX,CAEA,SAAS1C,IAAIuT,GACT,IAAI7Q,EAAI3Q,EAAGI,EAQP0M,EAPJ,IAAIiN,KAAK9Q,EAAE5I,QAAgC,iBAAf0Z,KAAK9Q,EAAE,GAC/B,MAAM,IAAI81B,MAAM,yCAA2Cvd,GAa/D,IAXAA,GAAO,EACP7Q,EAAK,CACDy8B,KAAMrzB,KAAK9Q,EAAEuY,GAAK/e,EAAEkgB,KAAKI,KAAKH,WAAWkD,WAQ7C1lB,GAFI0M,EAHD0U,IAAQzH,KAAK9Q,EAAE5I,OAAS,GAAM0Z,KAAK9Q,EAAEuY,GAAK9c,EAGnCqV,KAAK9Q,EAAEuY,GAAK7c,EAFZoV,KAAK9Q,EAAEuY,EAAI,GAAGzY,GAId1I,OACNL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb2Q,EAAG3Q,GAAK8M,EAAI9M,GAEhB,OAAO2Q,CACX,CAEA,SAASg6C,aAAaC,EAAOC,GAIzB,OAHIA,IACAA,EAAMloC,KAAKI,KAAKH,WAAWkD,WAExB8kC,EAAOC,CAClB,CAEA,SAASC,aAAaroD,EAAEooD,GAOpB,OANIpoD,GAAW,IAANA,IACLA,EAAI2qC,MAEJyd,IACAA,EAAMloC,KAAKI,KAAKH,WAAWkD,WAExBrjB,EAAEooD,CACb,CAEA,SAASE,WAAWj8C,GAChBhP,OAAOkrD,WAAWC,SAAWn8C,EACjC,CAEA,SAAS81B,mBACL,OAAOjiB,KAAKiiB,kBAChB,CAGA,IAAIvV,MAAQ1M,KAAK5I,KAAKyH,IAClB0pC,aAAevoC,KAAK8c,YAAa9c,KAAK8c,UAAUp/B,QAChDsT,OACAs3C,SAAWnsD,KAAKU,MAAoB,IAAdV,KAAKwB,UAC/B,SAAS6qD,oBAIL,GAHGhD,cACC4C,WAAWE,UAEZtoD,KAAKyoD,oBAAsBzoC,KAAKC,WAAWC,SAAyB,iBAAdlgB,KAAKC,KAA9D,CAGA,GAAGD,KAAK0oD,KAEJ,OADA1oD,KAAKiC,EAAIihD,uBAAuBljD,KAAK0gB,GAAG1gB,KAAK2gB,OACtC,EA0CX,IAAItjB,EAAEI,EACN,GAzCiB,iBAAduC,KAAKC,OACJ6gD,UAAY9gD,KAAK8gD,UACjBC,UAAY/gD,KAAK+gD,UACjBC,cAAgBhhD,KAAKghD,eAErBwF,YACAA,UAAYxmC,KAAKggB,eACjB4lB,SAAW5lC,KAAKI,KAAKmgB,cACrB4lB,QAAUK,UAAUL,QAAQ9kD,KAAKmlD,WACjCJ,UAAYI,UAAUJ,UAAU/kD,KAAKmlD,WACrCH,SAAWG,UAAUH,SAAShlD,KAAKmlD,WACnCp7C,KAAOo7C,UAAUp7C,KAAOo7C,UAAUp7C,KAAK/J,KAAKmlD,WAAW,KACvDF,kBAAoBD,UAEpBx/C,YACAA,UAAYmZ,KAAKggB,eAAe,wBAChCumB,YAAc1/C,UAAU0/C,aAGZ,IAAbd,UAAmBC,UAClBA,QAAUc,UAAU,4BAEpBb,SACAA,OAASa,UAAU,KAEvB+B,aAAevoC,KAAK8c,YAAa9c,KAAK8c,UAAUp/B,WAC/BsT,SACbA,OAASgP,KAAK8c,UAAU,GAAGkD,gBAE/BhgC,KAAK0oD,MAAO,EACT1oD,KAAKogD,aACJpgD,KAAKogD,cAETtgC,MAAQ9f,KAAK0gB,GACb+pB,KAAOzqC,KAAKogB,KAAKC,cAAcrgB,KAAKogB,KAAKH,WAAWkD,UACjDoiC,gBACCxF,SAAW2G,eAAejc,OAE9Bqc,WACA9mD,KAAKyoD,kBAAoBzoC,KAAKC,WAAWC,QAEtClgB,KAAK2gB,KACJ,GAAqB,iBAAX3gB,KAAKiC,GAAkBjC,KAAKiC,aAAakhD,QAAUnjD,KAAKiC,aAAauK,QAA4B,iBAAXxM,KAAKiC,EACjGjC,KAAKiC,GAAKjC,KAAK2gB,UACb,GAAqB,IAAlB3gB,KAAKiC,EAAEvE,OACZsC,KAAKiC,EAAIjC,KAAKiC,EAAE,GAAKjC,KAAK2gB,UAM1B,IAJAljB,EAAMuC,KAAKiC,EAAEvE,OACVoiB,QAAU9f,KAAKiC,IACdjC,KAAKiC,EAAY,IAARxE,EAAY,CAACqiB,MAAM,GAAGA,MAAM,IAAM,CAACA,MAAM,GAAGA,MAAM,GAAGA,MAAM,KAEpEziB,EAAI,EAAGA,EAAII,EAAKJ,GAAK,EACrB2C,KAAKiC,EAAE5E,IAAM2C,KAAK2gB,KAO9B,GAHqB,IAAlB3gB,KAAKiC,EAAEvE,SACNsC,KAAKiC,EAAIjC,KAAKiC,EAAE,IAEC,iBAAXjC,KAAKiC,GAAkBjC,KAAKiC,aAAakhD,QAAUnjD,KAAKiC,aAAauK,QAA4B,iBAAXxM,KAAKiC,EAC9FjC,KAAKkhB,YAAclhB,KAAKiC,IACvBjC,KAAKkhB,UAAYlhB,KAAKiC,EACtBjC,KAAKmgB,KAAM,QAEb,GAAIngB,KAAKiC,EAAE4S,QACTuuC,YAAYpjD,KAAKiC,EAAEjC,KAAK+mB,qBAAqBhP,OAAO,MACpD/X,KAAKmgB,KAAM,EACXngB,KAAK+mB,qBAAqBqE,gBAC1BprB,KAAK+mB,qBAAqBM,SAASH,WAAWje,MAAMjJ,KAAKiC,UAI7D,IADAxE,EAAMuC,KAAKiC,EAAEvE,OACTL,EAAI,EAAGA,EAAII,EAAKJ,GAAK,EAClB2C,KAAKiC,EAAE5E,KAAO2C,KAAKkhB,UAAU7jB,KAC5B2C,KAAKkhB,UAAU7jB,GAAK2C,KAAKiC,EAAE5E,GAC3B2C,KAAKmgB,KAAM,GAIvBngB,KAAK0oD,MAAO,CApFZ,CAqFJ,CACA,OAAOF,iBACX,CAGA,OADAx6C,GAAGsyC,mBAAqBA,mBACjBtyC,EACX,CAjnBwB,GAknBpB0yB,yBAA4B,WAC5B,IAAI1yB,EAAK,CACL2yB,qBAaJ,SAA8B5oB,EAAO4wC,EAAKzI,GACtC,OAAO0I,EAAsB7wC,EAAO4wC,EAAKzI,EAC7C,EAdI2I,qBAeJ,SAA8B9wC,EAAO4wC,EAAKzI,GACtC,OAAO4I,EAAsB/wC,EAAO4wC,EAAKzI,EAC7C,EAhBI6I,oBAuBJ,SAA6B1+B,EAAMs+B,EAAKzI,GACpC,OAAO8I,EAAqB3+B,EAAMs+B,EAAKzI,EAC3C,EAxBI+I,sBAmBJ,SAA+B5+B,EAAMs+B,EAAKzI,GACtC,OAAOgJ,EAAuB7+B,EAAMs+B,EAAKzI,EAC7C,EApBIiJ,yBAwBJ,SAAkC9+B,EAAMs+B,EAAKzI,GACzC,OAAOkJ,EAA0B/+B,EAAMs+B,EAAKzI,EAChD,EAzBImJ,uBA0BJ,SAAgCh/B,EAAMs+B,EAAKzI,GACvC,OAAOoJ,EAAwBj/B,EAAMs+B,EAAKzI,EAC9C,EA3BIqJ,oBA4BJ,SAA6Bl/B,EAAMs+B,EAAKzI,GACpC,OAAOsJ,EAAqBn/B,EAAMs+B,EAAKzI,EAC3C,EA7BIuJ,oBA8BJ,SAA6Bp/B,EAAMs+B,EAAKzI,GACpC,OAAOwJ,EAAqBr/B,EAAMs+B,EAAKzI,EAC3C,EA/BIyJ,uBAgCJ,SAAgCt/B,EAAMs+B,EAAKzI,GACvC,OAAO0J,EAAwBv/B,EAAMs+B,EAAKzI,EAC9C,EAjCI2J,wBAkCJ,SAAiCx/B,EAAMs+B,EAAKzI,GACxC,OAAO4J,EAAyBz/B,EAAMs+B,EAAKzI,EAC/C,EAnCI6J,oBAoCJ,SAA6B1/B,EAAMs+B,EAAKzI,GACpC,OAAO8J,EAAqB3/B,EAAMs+B,EAAKzI,EAC3C,EArCI+J,oBAQJ,SAA6B5/B,EAAMs+B,EAAKzI,GACpC,OAAOgK,EAAqB7/B,EAAMs+B,EAAKzI,EAC3C,GA6BA,SAASiK,EAAgBpyC,EAAO4wC,EAAMzI,GAClC,IACI7iD,EADA8M,EAAM,GACH1M,EAAMsa,EAASA,EAAOra,OAAS,EACtC,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACM,MAAhB0a,EAAO1a,GAAGsJ,GACTwD,EAAIhJ,KAAKu/B,yBAAyBmoB,qBAAqB9wC,EAAO1a,GAAGsrD,EAAKtrD,GAAG6iD,IACpD,MAAhBnoC,EAAO1a,GAAGsJ,GACfwD,EAAIhJ,KAAKu/B,yBAAyBupB,oBAAoBlyC,EAAO1a,GAAGsrD,EAAKtrD,GAAG6iD,IACnD,MAAhBnoC,EAAO1a,GAAGsJ,GACfwD,EAAIhJ,KAAKu/B,yBAAyBuoB,sBAAsBlxC,EAAO1a,GAAGsrD,EAAKtrD,GAAG6iD,IACrD,MAAhBnoC,EAAO1a,GAAGsJ,GACfwD,EAAIhJ,KAAKu/B,yBAAyBqoB,oBAAoBhxC,EAAO1a,GAAGsrD,EAAKtrD,GAAG6iD,IACnD,MAAhBnoC,EAAO1a,GAAGsJ,KAEM,MAAhBoR,EAAO1a,GAAGsJ,GACfwD,EAAIhJ,KAAKu/B,yBAAyB2oB,uBAAuBtxC,EAAO1a,GAAGsrD,EAAKtrD,GAAG6iD,IACtD,MAAhBnoC,EAAO1a,GAAGsJ,GACfwD,EAAIhJ,KAAKu/B,yBAAyB6oB,oBAAoBxxC,EAAO1a,GAAGsrD,EAAKtrD,GAAG6iD,IAClD,MAAhBnoC,EAAO1a,GAAGsJ,GAChBwD,EAAIhJ,KAAKu/B,yBAAyBqpB,oBAAoBhyC,EAAO1a,GAAGsrD,EAAKtrD,GAAG6iD,IAClD,MAAhBnoC,EAAO1a,GAAGsJ,GAChBwD,EAAIhJ,KAAKu/B,yBAAyB+oB,oBAAoB1xC,EAAO1a,GAAGsrD,EAAKtrD,GAAG6iD,IAClD,MAAhBnoC,EAAO1a,GAAGsJ,GAChBwD,EAAIhJ,KAAKu/B,yBAAyBipB,uBAAuB5xC,EAAO1a,GAAGsrD,EAAKtrD,GAAG6iD,IACrD,MAAhBnoC,EAAO1a,GAAGsJ,IAChBwD,EAAIhJ,KAAKu/B,yBAAyBmpB,wBAAwB9xC,EAAO1a,GAAGsrD,EAAKtrD,GAAG6iD,KAKpF,OAAO/1C,CACX,CAEA,IAAIy+C,EACO,SAAS7wC,EAAO4wC,EAAKzI,GACxB,IAAIkK,EACJ,SAASC,EAAmBvqC,GACxB,GAAoB,iBAAVA,EACN,OAAOsqC,EAAWtqC,EAAM,GAGxB,IADA,IAAIziB,EAAI,EAAGI,EAAM2sD,EAAW1sD,OACtBL,EAAEI,GAAI,CACR,GAAG2sD,EAAW/sD,GAAGitD,QAAUxqC,EACvB,OAAOsqC,EAAW/sD,GAEtBA,GAAG,CACP,CAER,CAGA,OAFAgtD,EAAmBnK,cAAgBA,EACnCkK,EAAaD,EAAgBpyC,EAAQ4wC,EAAM0B,GACpCA,CACX,EAiCAvB,EACO,SAASz+B,EAAMs+B,EAAMzI,GACxB,IAAIqK,EAAoB,SAA4BzqC,GAChD,OAAOA,GACH,IAAK,qBACL,IAAK,WACL,KAAK,EACD,OAAOyqC,EAAkB7E,QAG7B,QACI,OAAO6E,EAAkB1jD,UAErC,EACA0jD,EAAkBrK,cAAgB,SAAStiD,GACvC,OAAW,IAARA,EACQ2sD,EAEArK,EAActiD,EAAI,EAEjC,EACA,IAAI8nD,EAlDF,SAASr7B,EAAMs+B,EAAMzI,GACxB,IAAIkK,EACAG,EAAoB,SAA4BzqC,GAE/C,IADD,IAAIziB,EAAI,EAAGI,EAAM2sD,EAAW1sD,OACrBL,EAAEI,GAAI,CACR,GAAG2sD,EAAW/sD,GAAGitD,QAAUxqC,GAASsqC,EAAW/sD,GAAGmtD,KAAO1qC,GAASsqC,EAAW/sD,GAAGotD,gBAAkB3qC,GAASsqC,EAAW/sD,GAAG+jD,KAAOthC,GAASsqC,EAAW/sD,GAAGwhB,MAAQiB,EAC5J,OAAOsqC,EAAW/sD,GAErBA,GAAG,CACP,CACA,GAAoB,iBAAVyiB,EACP,OAAOsqC,EAAWtqC,EAAM,EAEhC,EAYA,OAXAyqC,EAAkBrK,cAAgB,SAAStiD,GACvC,OAAW,IAARA,EACQ2sD,EAEArK,EAActiD,EAAI,EAEjC,EACAwsD,EAAaD,EAAgB9/B,EAAM/R,GAAIqwC,EAAKrwC,GAAIiyC,EAAkBrK,eAClEqK,EAAkBG,cAAgBN,EAAW1sD,OAC7C6sD,EAAkBE,cAAgBpgC,EAAMsgC,IAEjCJ,CACX,CAwBmBK,CAAyBvgC,EAAMs+B,EAAK4B,EAAkBrK,eAChE2K,EAAqBnqB,yBAAyByoB,yBAAyB9+B,EAAM/R,GAAG+R,EAAM/R,GAAG5a,OAAS,GAAGirD,EAAKrwC,GAAGqwC,EAAKrwC,GAAG5a,OAAS,GAAG6sD,EAAkBrK,eAavJ,OAZAqK,EAAkB7E,QAAUA,EAC5B6E,EAAkB1jD,UAAYgkD,EAC9BttD,OAAOmmB,eAAe6mC,EAAmB,QAAS,CAC9Ch7C,IAAK,WACD,OAAO8a,EAAMpc,EACjB,IAGJs8C,EAAkBG,cAAgBrgC,EAAMygC,GACxCP,EAAkBE,cAAgBpgC,EAAM+2B,GACxCmJ,EAAkBt8C,GAAKoc,EAAMpc,GAC7Bs8C,EAAkBC,GAAKngC,EAAMmgC,GACtBD,CACX,EAGAL,EACO,SAAS7/B,EAAMs+B,EAAKzI,GAEvB,SAASqK,EAAkB3sD,GACvB,MAAW,UAARA,GAA2B,UAARA,EACX2sD,EAAkB7nD,MACX,YAAR9E,GAA6B,YAARA,EACpB2sD,EAAkB9oB,aADtB,CAGX,CAgBA,OAfAlkC,OAAOmmB,eAAe6mC,EAAmB,QAAS,CAC9Ch7C,IAAK,WACD,OAAOkS,gBAAgBknC,EAAK9oD,EAAG,EAAI8oD,EAAK9oD,EAAE8gB,KAAM,QACpD,IAEJpjB,OAAOmmB,eAAe6mC,EAAmB,UAAW,CAChDh7C,IAAK,WACD,OAAOkS,gBAAgBknC,EAAK9kD,EAAG,IACnC,IAEJtG,OAAOmmB,eAAe6mC,EAAmB,QAAS,CAAEzqC,MAAOuK,EAAMpc,KACjE1Q,OAAOmmB,eAAe6mC,EAAmB,KAAM,CAAEzqC,MAAOuK,EAAMmgC,KAE9D7B,EAAK9oD,EAAEogD,iBAAiBC,GACxByI,EAAK9kD,EAAEo8C,iBAAiBC,GACjBqK,CACX,EAGArB,EACO,SAAS7+B,EAAMs+B,EAAKzI,GACvB,SAAS6K,EAAentD,GACpB,OAAW,IAARA,EACQoQ,EAEAkyC,EAActiD,EAAI,EAEjC,CACA,SAASotD,EAAmBptD,GACxB,OAAW,IAARA,EACQqtD,EAEAF,EAAentD,EAAI,EAElC,CACA,SAASstD,EAAoB7tD,GACzBE,OAAOmmB,eAAeunC,EAAQ5gC,EAAMtqB,EAAE1C,GAAG4Q,GAAI,CACzCsB,IAAK,WACD,OAAOkS,gBAAgBknC,EAAK5oD,EAAEmkB,UAAU7mB,GAAGgF,EAC/C,GAER,CACA,IAAIhF,EAAGI,EAAM4sB,EAAMtqB,EAAIsqB,EAAMtqB,EAAErC,OAAS,EACpCutD,EAAS,CAAC,EACd,IAAK5tD,EAAI,EAAGA,EAAII,EAAKJ,GAAK,EACtB6tD,EAAoB7tD,GACpBsrD,EAAK5oD,EAAEmkB,UAAU7mB,GAAGgF,EAAE49C,iBAAiB+K,GAG3C,SAAST,EAAkB3sD,GACvB,MAAW,UAARA,GAA2B,UAARA,EACX2sD,EAAkB7nD,MACX,YAAR9E,GAA6B,YAARA,EACpB2sD,EAAkB9oB,QACX,iBAAR7jC,GAAkC,iBAARA,EACzB2sD,EAAkBzM,iBADtB,CAGX,CA2BA,OA1BAvgD,OAAOmmB,eAAe6mC,EAAmB,QAAS,CAC9Ch7C,IAAK,WACD,OAAOkS,gBAAgBknC,EAAK9oD,EAAG,EAAI8oD,EAAK9oD,EAAE8gB,KAAM,QACpD,IAEJpjB,OAAOmmB,eAAe6mC,EAAmB,UAAW,CAChDh7C,IAAK,WACD,OAAOkS,gBAAgBknC,EAAK9kD,EAAG,IACnC,IAEJtG,OAAOmmB,eAAe6mC,EAAmB,cAAe,CACpDh7C,IAAK,WACD,OAAOkS,gBAAgBknC,EAAK5tC,EAChC,IAEJxd,OAAOmmB,eAAe6mC,EAAmB,OAAQ,CAC7Ch7C,IAAK,WACD,OAAO07C,CACX,IAEJ1tD,OAAOmmB,eAAe6mC,EAAmB,QAAS,CAAEzqC,MAAOuK,EAAMpc,KACjE1Q,OAAOmmB,eAAe6mC,EAAmB,KAAM,CAAEzqC,MAAOuK,EAAMmgC,KAE9D7B,EAAK9oD,EAAEogD,iBAAiB8K,GACxBpC,EAAK9kD,EAAEo8C,iBAAiB8K,GACxBpC,EAAK5tC,EAAEklC,iBAAiB8K,GACjBR,CACX,EAGAvB,EACO,SAAS3+B,EAAMs+B,EAAKzI,GACvB,SAAS6K,EAAentD,GACpB,OAAU,GAAPA,EACQ2sD,EAEArK,IAAgBtiD,EAE/B,CAOA,SAAS2sD,EAAkB3sD,GACvB,OAAGA,IAAQysB,EAAMjkB,EAAEg7C,IAAc,QAARxjD,GAAyB,QAARA,EAC/B2sD,EAAkBzU,IAE1Bl4C,IAAQysB,EAAMroB,EAAEo/C,GACRmJ,EAAkB5b,MAE1B/wC,IAAQysB,EAAMxmB,EAAEu9C,GACRmJ,EAAkB5nD,YAD7B,CAGJ,CAuBA,OAvCA4nD,EAAkBE,cAAgBpgC,EAAM+2B,GAExCuH,EAAK3mD,EAAEi+C,iBAAiB8K,GACxBpC,EAAKviD,EAAE65C,iBAAiB8K,GACxBpC,EAAK9kD,EAAEo8C,iBAAiB8K,GAaxBR,EAAkBE,cAAgBpgC,EAAM+2B,GACxC7jD,OAAOmmB,eAAe6mC,EAAmB,QAAS,CAC9Ch7C,IAAK,WACD,OAAOkS,gBAAgBknC,EAAK3mD,EAAG,EAAI2mD,EAAK3mD,EAAE2e,KAC9C,IAEJpjB,OAAOmmB,eAAe6mC,EAAmB,MAAO,CAC5Ch7C,IAAK,WACD,OAAOkS,gBAAgBknC,EAAKviD,EAAG,EAAIuiD,EAAKviD,EAAEua,KAC9C,IAEJpjB,OAAOmmB,eAAe6mC,EAAmB,SAAU,CAC/Ch7C,IAAK,WACD,OAAOkS,gBAAgBknC,EAAK9kD,EAChC,IAEJtG,OAAOmmB,eAAe6mC,EAAmB,QAAS,CAC9Ch7C,IAAK,WACD,OAAO8a,EAAMpc,EACjB,IAEJs8C,EAAkBC,GAAKngC,EAAMmgC,GACtBD,CACX,EAGAnB,EACO,SAAS/+B,EAAMs+B,EAAKzI,GACvB,SAAS6K,EAAentD,GACpB,OAAU,GAAPA,EACQ2sD,EAEArK,IAAgBtiD,EAE/B,CAYA,SAAS2sD,EAAkBzqC,GACvB,OAAGuK,EAAMlkB,EAAEi7C,KAAOthC,EACPyqC,EAAkBhE,YAE1Bl8B,EAAMxmB,EAAEu9C,KAAOthC,EACPyqC,EAAkB9oB,QAE1BpX,EAAMhoB,EAAE++C,KAAOthC,EACPyqC,EAAkB5rD,SAE1B0rB,EAAMnoB,EAAEk/C,KAAOthC,EACPyqC,EAAkBY,SAE1B9gC,EAAMroB,EAAEo/C,KAAOthC,EACPyqC,EAAkBxkD,MAE1BskB,EAAM9H,IAAM8H,EAAM9H,GAAG6+B,KAAOthC,EACpByqC,EAAkB7kD,KAE1B2kB,EAAM5H,IAAM4H,EAAM5H,GAAG2+B,KAAOthC,EACpByqC,EAAkBa,SAEhB,YAAVtrC,EACQyqC,EAAkB9oB,QAEhB,aAAV3hB,EACQyqC,EAAkB5rD,SAEhB,iBAAVmhB,EACQyqC,EAAkBhE,YAEhB,UAAVzmC,EACQyqC,EAAkBxkD,MAEhB,aAAV+Z,GAAkC,yBAAVA,EAChByqC,EAAkBY,SAEhB,SAAVrrC,EACQyqC,EAAkB7kD,KAEhB,cAAVoa,EACQyqC,EAAkBa,cAD7B,CAIJ,CA4CA,OAnGAzC,EAAK9hD,UAAUioB,OAAOjrB,EAAEo8C,iBAAiB8K,GACzCpC,EAAK9hD,UAAUioB,OAAOzsB,EAAE49C,iBAAiB8K,GACzCpC,EAAK9hD,UAAUioB,OAAO3oB,EAAE85C,iBAAiB8K,GACzCpC,EAAK9hD,UAAUioB,OAAO9sB,EAAEi+C,iBAAiB8K,GACzCpC,EAAK9hD,UAAUioB,OAAO5sB,EAAE+9C,iBAAiB8K,GACtCpC,EAAK9hD,UAAUioB,OAAOvM,KACrBomC,EAAK9hD,UAAUioB,OAAOvM,GAAG09B,iBAAiB8K,GAC1CpC,EAAK9hD,UAAUioB,OAAOrM,GAAGw9B,iBAAiB8K,IAE9CpC,EAAK9hD,UAAUszB,GAAG8lB,iBAAiB8K,GA+CnCxtD,OAAOmmB,eAAe6mC,EAAmB,UAAW,CAChDh7C,IAAK,WACD,OAAOkS,gBAAgBknC,EAAK9hD,UAAUioB,OAAOjrB,EAAG,EAAE8kD,EAAK9hD,UAAUioB,OAAOjrB,EAAE8c,KAC9E,IAEJpjB,OAAOmmB,eAAe6mC,EAAmB,WAAY,CACjDh7C,IAAK,WACD,OAAOkS,gBAAgBknC,EAAK9hD,UAAUioB,OAAOzsB,EACjD,IAEJ9E,OAAOmmB,eAAe6mC,EAAmB,cAAe,CACpDh7C,IAAK,WACD,OAAOkS,gBAAgBknC,EAAK9hD,UAAUioB,OAAO3oB,EACjD,IAGJ5I,OAAOmmB,eAAe6mC,EAAmB,QAAS,CAC9Ch7C,IAAK,WACD,OAAOkS,gBAAgBknC,EAAK9hD,UAAUioB,OAAO9sB,EAAG,EAAI2mD,EAAK9hD,UAAUioB,OAAO9sB,EAAE2e,KAChF,IAEJpjB,OAAOmmB,eAAe6mC,EAAmB,WAAY,CACjDh7C,IAAK,WACD,OAAOkS,gBAAgBknC,EAAK9hD,UAAUioB,OAAO5sB,EAAG,EAAIymD,EAAK9hD,UAAUioB,OAAO5sB,EAAEye,KAChF,IAEJpjB,OAAOmmB,eAAe6mC,EAAmB,OAAQ,CAC7Ch7C,IAAK,WACD,OAAOkS,gBAAgBknC,EAAK9hD,UAAUioB,OAAOvM,GACjD,IAEJhlB,OAAOmmB,eAAe6mC,EAAmB,WAAY,CACjDh7C,IAAK,WACD,OAAOkS,gBAAgBknC,EAAK9hD,UAAUioB,OAAOrM,GACjD,IAEJllB,OAAOmmB,eAAe6mC,EAAmB,QAAS,CAC9Ch7C,IAAK,WACD,OAAO8a,EAAMpc,EACjB,IAEJs8C,EAAkB5jD,GAAK,KACvB4jD,EAAkBC,GAAKngC,EAAMmgC,GACtBD,CACX,EAGAjB,EACO,SAASj/B,EAAMs+B,EAAKzI,GACvB,SAAS6K,EAAentD,GACpB,OAAU,GAAPA,EACQ2sD,EAEArK,IAAgBtiD,EAE/B,CACA2sD,EAAkBE,cAAgBpgC,EAAM+2B,GACxC,IAAIp1C,EAAsB,OAAf28C,EAAKhpC,GAAGhZ,GAAcgiD,EAAKhpC,GAAG3T,KAAO28C,EAAKhpC,GAGrD,SAAS4qC,EAAkBzqC,GACvB,OAAGuK,EAAMhoB,EAAE++C,KAAOthC,EACPyqC,EAAkB5rD,SAE1B0rB,EAAMroB,EAAEo/C,KAAOthC,EACPyqC,EAAkBvsC,UAD7B,CAGJ,CAiBA,OA1BAhS,EAAKhK,EAAEi+C,iBAAiB8K,GACxB/+C,EAAK3J,EAAE49C,iBAAiB8K,GASxBxtD,OAAOmmB,eAAe6mC,EAAmB,OAAQ,CAC7Ch7C,IAAK,WACD,OAAOkS,gBAAgBzV,EAAKhK,EAChC,IAEJzE,OAAOmmB,eAAe6mC,EAAmB,WAAY,CACjDh7C,IAAK,WACD,OAAOkS,gBAAgBzV,EAAK3J,EAChC,IAEJ9E,OAAOmmB,eAAe6mC,EAAmB,QAAS,CAC9Ch7C,IAAK,WACD,OAAO8a,EAAMpc,EACjB,IAEJs8C,EAAkBC,GAAKngC,EAAMmgC,GACtBD,CACX,EAGAf,EACO,SAASn/B,EAAMs+B,EAAKzI,GACvB,SAAS6K,EAAentD,GACpB,OAAU,GAAPA,EACQ2sD,EAEArK,IAAgBtiD,EAE/B,CACA,IAAIoO,EAAsB,OAAf28C,EAAKhpC,GAAGhZ,GAAcgiD,EAAKhpC,GAAG3T,KAAO28C,EAAKhpC,GAYrD,SAAS4qC,EAAkBzqC,GACvB,OAAGuK,EAAMhoB,EAAE++C,KAAOthC,EACPyqC,EAAkB5rD,SAE1B0rB,EAAMnoB,EAAEk/C,KAAOthC,EACPyqC,EAAkBY,SAE1B9gC,EAAMzgB,GAAGw3C,KAAOthC,EACRyqC,EAAkBp7C,OAE1Bkb,EAAMpI,GAAGm/B,KAAOthC,GAAS,kCAAoCA,EACrDyqC,EAAkBc,YAE1BhhC,EAAMjC,GAAGg5B,KAAOthC,EACRyqC,EAAkBe,gBAE1BjhC,EAAMxB,IAAOwB,EAAMxB,GAAGu4B,KAAOthC,GAAS,kCAAoCA,EAG1EuK,EAAMrB,IAAMqB,EAAMrB,GAAGo4B,KAAOthC,EACpByqC,EAAkBgB,oBAD7B,EAFWhB,EAAkBiB,WAMjC,CAgDA,OAlFAjB,EAAkBE,cAAgBpgC,EAAM+2B,GACxCp1C,EAAKiW,GAAGg+B,iBAAiB8K,GACzB/+C,EAAKoc,GAAG63B,iBAAiB8K,GACzB/+C,EAAKpC,GAAGq2C,iBAAiB8K,GACzB/+C,EAAK3J,EAAE49C,iBAAiB8K,GACxB/+C,EAAK9J,EAAE+9C,iBAAiB8K,GACrB1gC,EAAMxB,KACL7c,EAAK6c,GAAGo3B,iBAAiB8K,GACzB/+C,EAAKgd,GAAGi3B,iBAAiB8K,IA2B7BxtD,OAAOmmB,eAAe6mC,EAAmB,WAAY,CACjDh7C,IAAK,WACD,OAAOkS,gBAAgBzV,EAAK3J,EAChC,IAEJ9E,OAAOmmB,eAAe6mC,EAAmB,WAAY,CACjDh7C,IAAK,WACD,OAAOkS,gBAAgBzV,EAAK9J,EAAG,EAAI8J,EAAK9J,EAAEye,KAC9C,IAEJpjB,OAAOmmB,eAAe6mC,EAAmB,SAAU,CAC/Ch7C,IAAK,WACD,OAAOkS,gBAAgBzV,EAAKpC,GAChC,IAEJrM,OAAOmmB,eAAe6mC,EAAmB,cAAe,CACpDh7C,IAAK,WACD,OAAOkS,gBAAgBzV,EAAKiW,GAChC,IAEJ1kB,OAAOmmB,eAAe6mC,EAAmB,iBAAkB,CACvDh7C,IAAK,WACD,OAAOkS,gBAAgBzV,EAAKoc,GAChC,IAEJ7qB,OAAOmmB,eAAe6mC,EAAmB,cAAe,CACpDh7C,IAAK,WACD,OAAIvD,EAAK6c,GAGFpH,gBAAgBzV,EAAK6c,IAFjB,CAGf,IAEJtrB,OAAOmmB,eAAe6mC,EAAmB,iBAAkB,CACvDh7C,IAAK,WACD,OAAIvD,EAAKgd,GAGFvH,gBAAgBzV,EAAKgd,GAAI,EAAIhd,EAAKgd,GAAGrI,MAFjC,CAGf,IAEJpjB,OAAOmmB,eAAe6mC,EAAmB,QAAS,CAC9Ch7C,IAAK,WACD,OAAO8a,EAAMpc,EACjB,IAEJs8C,EAAkBC,GAAKngC,EAAMmgC,GACtBD,CACX,EAGAb,EACO,SAASr/B,EAAMs+B,EAAKzI,GACvB,SAAS6K,EAAentD,GACpB,OAAU,GAAPA,EACQ2sD,EAEArK,IAAgBtiD,EAE/B,CACA,IAAIoO,EAAsB,OAAf28C,EAAKhpC,GAAGhZ,GAAcgiD,EAAKhpC,GAAG3T,KAAO28C,EAAKhpC,GAMrD,SAAS4qC,EAAkBzqC,GACvB,OAAGuK,EAAMhoB,EAAE++C,KAAOthC,EACPyqC,EAAkB5rD,SAE1B0rB,EAAMnoB,EAAEk/C,KAAOthC,EACPyqC,EAAkBpiC,UAE1BkC,EAAMroB,EAAEo/C,KAAOthC,GAAmB,SAAVA,EAChByqC,EAAkBvsC,UAD7B,CAIJ,CAuBA,OAvCAusC,EAAkBE,cAAgBpgC,EAAM+2B,GACxCp1C,EAAK3J,EAAE49C,iBAAiB8K,GACxB/+C,EAAKhK,EAAEi+C,iBAAiB8K,GACxB/+C,EAAK9J,EAAE+9C,iBAAiB8K,GAcxBxtD,OAAOmmB,eAAe6mC,EAAmB,WAAY,CACjDh7C,IAAK,WACD,OAAOkS,gBAAgBzV,EAAK3J,EAChC,IAEJ9E,OAAOmmB,eAAe6mC,EAAmB,YAAa,CAClDh7C,IAAK,WACD,OAAOkS,gBAAgBzV,EAAK9J,EAChC,IAEJ3E,OAAOmmB,eAAe6mC,EAAmB,OAAQ,CAC7Ch7C,IAAK,WACD,OAAOkS,gBAAgBzV,EAAKhK,EAChC,IAGJzE,OAAOmmB,eAAe6mC,EAAmB,QAAS,CAC9Ch7C,IAAK,WACD,OAAO8a,EAAMpc,EACjB,IAEJs8C,EAAkBC,GAAKngC,EAAMmgC,GACtBD,CACX,EAGAX,EACO,SAASv/B,EAAMs+B,EAAKzI,GAQvB,IAAIl0C,EAAO28C,EAIX,SAAS4B,EAAkBzqC,GACvB,GAAGuK,EAAMnoB,EAAEk/C,KAAOthC,GAAS,oBAAsBA,EAC7C,OAAOyqC,EAAkBkB,MAGjC,CAaA,OArBAlB,EAAkBE,cAAgBpgC,EAAM+2B,GACxCp1C,EAAKigB,GAAGg0B,kBATR,SAAwBriD,GACpB,OAAU,GAAPA,EACQ2sD,EAEArK,IAAgBtiD,EAE/B,IAWAL,OAAOmmB,eAAe6mC,EAAmB,SAAU,CAC/Ch7C,IAAK,WACD,OAAOkS,gBAAgBzV,EAAKigB,GAChC,IAGJ1uB,OAAOmmB,eAAe6mC,EAAmB,QAAS,CAC9Ch7C,IAAK,WACD,OAAO8a,EAAMpc,EACjB,IAEJs8C,EAAkBC,GAAKngC,EAAMmgC,GACtBD,CACX,EAGAT,EACO,SAASz/B,EAAMs+B,EAAKzI,GACvB,SAAS6K,EAAentD,GACpB,OAAU,GAAPA,EACQ2sD,EAEArK,IAAgBtiD,EAE/B,CACA,IAAIoO,EAAO28C,EAKX,SAAS4B,EAAkBzqC,GACvB,OAAGuK,EAAMxqB,EAAEuhD,KAAOthC,GAAS,WAAaA,EAC7ByqC,EAAkBt8B,OACnB5D,EAAMxmB,EAAEu9C,KAAOthC,GAAS,WAAaA,EACpCyqC,EAAkB5nD,YADtB,CAIX,CAmBA,OA9BA4nD,EAAkBE,cAAgBpgC,EAAM+2B,GACxCp1C,EAAKnM,EAAEogD,iBAAiB8K,GACxB/+C,EAAKnI,EAAEo8C,iBAAiB8K,GAUxBxtD,OAAOmmB,eAAe6mC,EAAmB,SAAU,CAC/Ch7C,IAAK,WACD,OAAOkS,gBAAgBzV,EAAKnM,EAChC,IAGJtC,OAAOmmB,eAAe6mC,EAAmB,SAAU,CAC/Ch7C,IAAK,WACD,OAAOkS,gBAAgBzV,EAAKnI,EAChC,IAGJtG,OAAOmmB,eAAe6mC,EAAmB,QAAS,CAC9Ch7C,IAAK,WACD,OAAO8a,EAAMpc,EACjB,IAEJs8C,EAAkBC,GAAKngC,EAAMmgC,GACtBD,CACX,EAGAP,EACO,SAAS3/B,EAAMs+B,EAAKzI,GACvB,IAAIl0C,EAAO28C,EAAKhpC,GAUhB,SAAS4qC,EAAkB3sD,GACvB,GAAW,UAARA,GAA2B,UAARA,GAA2B,SAARA,GAA0B,SAARA,GAA0B,sBAARA,GAAuC,IAARA,EACxG,OAAO2sD,EAAkBhyC,IAEjC,CAuBA,OA7BAvM,EAAKi0C,kBAPL,SAAwBriD,GACpB,OAAU,GAAPA,EACQ2sD,EAEArK,IAAgBtiD,EAE/B,IASAL,OAAOmmB,eAAe6mC,EAAmB,OAAQ,CAC7Ch7C,IAAK,WAID,OAHGvD,EAAK1F,GACJ0F,EAAK/H,WAEF+H,CAEX,IAEJzO,OAAOmmB,eAAe6mC,EAAmB,QAAS,CAC9Ch7C,IAAK,WAID,OAHGvD,EAAK1F,GACJ0F,EAAK/H,WAEF+H,CAEX,IAEJzO,OAAOmmB,eAAe6mC,EAAmB,QAAS,CAAEzqC,MAAOuK,EAAMpc,KACjE1Q,OAAOmmB,eAAe6mC,EAAmB,KAAM,CAAEzqC,MAAOuK,EAAM+2B,KAC9D7jD,OAAOmmB,eAAe6mC,EAAmB,KAAM,CAAEzqC,MAAOuK,EAAMmgC,KACvDD,CACX,EAIJ,OAAOv8C,CACX,CAhvB+B,GAkvB3B6yB,wBACI,SAAS7gB,GACT,IAAI0rC,EAAYC,EAChB,SAASC,IACT,CAaA,OAZAruD,OAAOmmB,eAAekoC,EAAoB,aAAc,CACpDr8C,IAAK,WACD,IAAIs8C,EAAc7rC,EAAK0E,aAAaC,YAAY7kB,EAOhD,OANGkgB,EAAK0E,aAAaC,YAAY7kB,IAAM4rD,IACnC1rC,EAAK0E,aAAaC,YAAY7kB,EAAI4rD,GAClCC,EAAc,IAAIn/C,OAAOq/C,IAEb/rC,MAAQ+rC,GAA4B,IAAIr/C,OAAOq/C,IAExDF,CACX,IAEGC,CACX,EAEA3rB,yBAA4B,WAC5B,SAASkmB,EAAQh8C,EAAKsgC,GAClB,IAAIqhB,EAAa,IAAIpnD,OAWrB,GAVAonD,EAAWnnD,QAKQ3E,KAAKmxB,MAAMgO,eAAeC,MAIhC1c,cAAcopC,GACxB9rD,KAAKmxB,MAAM2L,WAAa98B,KAAKmxB,MAAM2L,UAAUp/B,OAAO,CACnD,IAAIL,EAAGI,EAAMuC,KAAKmxB,MAAM2L,UAAUp/B,OAClC,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb2C,KAAKmxB,MAAM2L,UAAUz/B,GAAG8hC,eAAeC,MAAM1c,cAAcopC,GAE/D,OAAOA,EAAW7hD,kBAAkBE,EAAI,GAAGA,EAAI,GAAGA,EAAI,IAAI,EAC9D,CACA,OAAO2hD,EAAW7hD,kBAAkBE,EAAI,GAAGA,EAAI,GAAGA,EAAI,IAAI,EAC9D,CACA,SAASi8C,EAAUj8C,EAAKsgC,GACpB,IAAIqhB,EAAa,IAAIpnD,OAWrB,GAVAonD,EAAWnnD,QAKQ3E,KAAKmxB,MAAMgO,eAAeC,MAIhC1c,cAAcopC,GACxB9rD,KAAKmxB,MAAM2L,WAAa98B,KAAKmxB,MAAM2L,UAAUp/B,OAAO,CACnD,IAAIL,EAAGI,EAAMuC,KAAKmxB,MAAM2L,UAAUp/B,OAClC,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb2C,KAAKmxB,MAAM2L,UAAUz/B,GAAG8hC,eAAeC,MAAM1c,cAAcopC,GAE/D,OAAOA,EAAWniD,aAAaQ,EACnC,CACA,OAAO2hD,EAAWniD,aAAaQ,EACnC,CACA,SAASk8C,EAASl8C,GACd,IAAI2hD,EAAa,IAAIpnD,OAGrB,GAFAonD,EAAWnnD,QACX3E,KAAKmxB,MAAMgO,eAAeC,MAAM1c,cAAcopC,GAC3C9rD,KAAKmxB,MAAM2L,WAAa98B,KAAKmxB,MAAM2L,UAAUp/B,OAAO,CACnD,IAAIL,EAAGI,EAAMuC,KAAKmxB,MAAM2L,UAAUp/B,OAClC,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb2C,KAAKmxB,MAAM2L,UAAUz/B,GAAG8hC,eAAeC,MAAM1c,cAAcopC,GAE/D,OAAOA,EAAWniD,aAAaQ,EACnC,CACA,OAAO2hD,EAAWniD,aAAaQ,EACnC,CAGA,OAAO,SAAS6V,GAEZ,IAAI6qC,EAAqBkB,6BAA6B/rC,EAAKnZ,WAS3D,SAAS+kD,EAAmBhuC,GACxB,OAAOA,GACH,IAAK,0BACL,IAAK,WACL,KAAK,EACD,OAAOguC,EAAmBnrB,eAC9B,KAAK,EACL,KAAK,EACL,IAAK,YACL,IAAK,YACL,IAAK,uBACD,OAAOoqB,EACX,KAAK,EACL,IAAK,qBACD,OAAOe,EAAmBjG,OAEtC,CAiGA,OAhGAiG,EAAmBzF,QAAUA,EAC7ByF,EAAmBxF,UAAYA,EAC/BwF,EAAmBI,OAAS7F,EAC5ByF,EAAmBvF,SAAWA,EAC9BuF,EAAmB3pB,iBAAmBjiB,EAAKiiB,iBAAiB5gC,KAAK2e,GACjE4rC,EAAmBz6B,MAAQnR,EAC3BziB,OAAOmmB,eAAekoC,EAAoB,YAAa,CACnDr8C,IAAK,WACD,QAASyQ,EAAK8c,SAClB,IAEJv/B,OAAOmmB,eAAekoC,EAAoB,SAAU,CAChDr8C,IAAK,WACD,OAAOyQ,EAAK8c,UAAU,GAAGkD,cAC7B,IAEJziC,OAAOmmB,eAAekoC,EAAoB,WAAY,CAClDr8C,IAAK,WACD,OAAOs7C,EAAmBM,QAC9B,IAEJ5tD,OAAOmmB,eAAekoC,EAAoB,QAAS,CAC/Cr8C,IAAK,WACD,OAAOs7C,EAAmB9kD,KAC9B,IAGJxI,OAAOmmB,eAAekoC,EAAoB,WAAY,CAClDr8C,IAAK,WACD,OAAOs7C,EAAmBlsD,QAC9B,IAGJpB,OAAOmmB,eAAekoC,EAAoB,cAAe,CACrDr8C,IAAK,WACD,OAAOs7C,EAAmBtE,WAC9B,IAGJhpD,OAAOmmB,eAAekoC,EAAoB,YAAa,CACnDr8C,IAAK,WACD,OAAOs7C,CACX,IAGJttD,OAAOmmB,eAAekoC,EAAoB,QAAS,CAC/Cr8C,IAAK,WACD,OAAoB,IAAjByQ,EAAK5I,KAAKzQ,GACFqZ,EAAK5I,KAAK2D,EAEd,GACX,IAGJxd,OAAOmmB,eAAekoC,EAAoB,SAAU,CAChDr8C,IAAK,WACD,OAAoB,IAAjByQ,EAAK5I,KAAKzQ,GACFqZ,EAAK5I,KAAKrV,EAEd,GACX,IAGJxE,OAAOmmB,eAAekoC,EAAoB,SAAU,CAChDr8C,IAAK,WACD,OAAOyQ,EAAK5I,KAAKS,KACrB,IAGJta,OAAOmmB,eAAekoC,EAAoB,QAAS,CAC/Cr8C,IAAK,WACD,OAAOyQ,EAAK5I,KAAKyH,GACrB,IAGJthB,OAAOmmB,eAAekoC,EAAoB,QAAS,CAAE9rC,MAAME,EAAK5I,KAAKnJ,KACrE1Q,OAAOmmB,eAAekoC,EAAoB,UAAW,CACjDr8C,IAAK,WACD,OAAOq8C,EAAmBnrB,cAC9B,IAGJljC,OAAOmmB,eAAekoC,EAAoB,SAAU,CAChDr8C,IAAK,WACD,OAAOyQ,EAAKyf,SAChB,IAGJliC,OAAOmmB,eAAekoC,EAAoB,OAAQ,CAC9Cr8C,IAAK,WACD,OAAOq8C,EAAmBhrB,aAC9B,IAGJgrB,EAAmB1rB,sBAtHnB,SAAgC/M,GAC5By4B,EAAmBxgD,KAAO,IAAI6gD,qBAAqB94B,EAAanT,EACpE,EAqHA4rC,EAAmBtrB,yBApHnB,SAAmCa,GAC/ByqB,EAAmBjG,OAASxkB,CAChC,EAmHOyqB,CACX,CACJ,CAxL+B,GA0L3BprB,wBACO,SAASpgB,GACZ,SAASwrC,EAAmBhuC,GAExB,IADA,IAAIvgB,EAAE,EAAGI,EAAM2iB,EAAKtJ,OAAOpZ,OACrBL,EAAEI,GAAI,CACR,GAAG2iB,EAAKtJ,OAAOzZ,GAAG4Q,KAAO2P,GAAQwC,EAAKtJ,OAAOzZ,GAAGwhB,MAAQjB,EACpD,OAAOwC,EAAKsN,SAASrwB,GAAG2iC,eAE5B3iC,GAAK,CACT,CACA,MAAO,CAACqe,QAAO,EACnB,CAQA,OAPAne,OAAOmmB,eAAekoC,EAAoB,QAAS,CAAE9rC,MAAMM,EAAKhJ,KAAKnJ,KACrE29C,EAAmBhwB,MAAQgwB,EAC3BA,EAAmBM,YAAc,EACjCN,EAAmBnuB,OAASrd,EAAKH,WAAW2d,SAAS77B,EACrD6pD,EAAmB7gD,MAAQqV,EAAKH,WAAW2d,SAAS7iB,EACpD6wC,EAAmBM,YAAc,EACjCN,EAAmB9F,cAAgB,EAAE1lC,EAAKH,WAAWkD,UAC9CyoC,CACX,EAEAG,6BACO,SAASllD,GACZ,SAASslD,EAAcvuC,GACnB,OAAOA,GACH,IAAK,QACL,IAAK,QACL,IAAK,aACL,KAAK,EACD,OAAOuuC,EAAcpmD,MACzB,IAAK,WACL,IAAK,WACL,IAAK,gBACL,IAAK,gBACL,KAAK,GACD,OAAOomD,EAAchB,SACzB,IAAK,WACL,IAAK,WACL,IAAK,gBACL,KAAK,EACD,OAAOtkD,EAAUlI,SACrB,IAAK,cACL,IAAK,cACL,IAAK,eACL,IAAK,mBACL,KAAK,EACD,OAAOwtD,EAAc5F,YACzB,IAAK,UACL,IAAK,UACL,KAAK,GACD,OAAO4F,EAAc1qB,QAEjC,CAuDA,OArDAlkC,OAAOmmB,eAAeyoC,EAAe,WAAY,CAC7C58C,IAAK,WACD,OAAO1I,EAAUskD,QACrB,IAEJ5tD,OAAOmmB,eAAeyoC,EAAe,QAAS,CAC1C58C,IAAK,WACD,OAAO1I,EAAUd,KACrB,IAGJxI,OAAOmmB,eAAeyoC,EAAe,WAAY,CAC7C58C,IAAK,WACD,OAAO1I,EAAUlI,QACrB,IAGJpB,OAAOmmB,eAAeyoC,EAAe,YAAa,CAC9C58C,IAAK,WACD,OAAO1I,EAAUulD,SACrB,IAGJ7uD,OAAOmmB,eAAeyoC,EAAe,YAAa,CAC9C58C,IAAK,WACD,OAAO1I,EAAUwlD,SACrB,IAGJ9uD,OAAOmmB,eAAeyoC,EAAe,cAAe,CAChD58C,IAAK,WACD,OAAO1I,EAAU0/C,WACrB,IAGJhpD,OAAOmmB,eAAeyoC,EAAe,UAAW,CAC5C58C,IAAK,WACD,OAAO1I,EAAU46B,OACrB,IAGJlkC,OAAOmmB,eAAeyoC,EAAe,OAAQ,CACzC58C,IAAK,WACD,OAAO1I,EAAUnB,IACrB,IAGJnI,OAAOmmB,eAAeyoC,EAAe,WAAY,CAC7C58C,IAAK,WACD,OAAO1I,EAAUukD,QACrB,IAGGe,CACX,EAEA/uD,iBAAoB,WAEpB,SAAS6gC,EAAoB7d,GACzBpgB,KAAKssD,aAAanrD,KAAKif,EAC3B,CAEA,OAAO,WACH,SAASmsC,EAAqB3uC,GAE1B,IADA,IAAIvgB,EAAI,EAAGI,EAAMuC,KAAKssD,aAAa5uD,OAC7BL,EAAEI,GAAI,CACR,GAAGuC,KAAKssD,aAAajvD,GAAG+Z,MAAQpX,KAAKssD,aAAajvD,GAAG+Z,KAAKnJ,KAAO2P,EAI7D,OAHG5d,KAAKssD,aAAajvD,GAAGmhC,cACpBx+B,KAAKssD,aAAajvD,GAAGmhC,aAAax+B,KAAKu+B,cAEpCv+B,KAAKssD,aAAajvD,GAAGkjC,cAEhCljC,GAAG,CACP,CACJ,CASA,OAPAkvD,EAAqBD,aAAe,GACpCC,EAAqBhuB,aAAe,EAEpCguB,EAAqBtuB,oBAAsBA,EAIpCsuB,CACX,CACJ,CA7BuB,GA8BnBnsB,2BAA8B,WA2B9B,SAASyoB,EAAqBzxC,EAAKsW,EAAUwyB,EAAelgC,GACxD,IACI3iB,EADA0oC,EAAiB,GACdtoC,EAAM2Z,EAAK8pB,GAAGxjC,OACrB,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACQ,IAAlB+Z,EAAK8pB,GAAG7jC,GAAGsJ,GACVo/B,EAAe5kC,KAAK0nD,EAAqBzxC,EAAK8pB,GAAG7jC,GAAGqwB,EAASqY,eAAe1oC,GAAGqwB,EAASqY,eAAe1oC,GAAG6iD,cAAelgC,IAEzH+lB,EAAe5kC,KAAKqrD,EAAqB9+B,EAASqY,eAAe1oC,GAAG+Z,EAAK8pB,GAAG7jC,GAAGsJ,GAAIqZ,EAAM+qC,IAIjG,SAASA,EAAentD,GACpB,OAAW,IAARA,EACO6uD,EAEAvM,EAActiD,EAAI,EAEhC,CAEA,IAAI6uD,EAAiB,SAAS7uC,GAE1B,IADA,IAAIujB,EAAU/pB,EAAK8pB,GAAI7jC,EAAI,EAAGI,EAAM0jC,EAAQzjC,OACtCL,EAAEI,GAAK,CACT,GAAGmgB,IAASujB,EAAQ9jC,GAAG4Q,IAAM2P,IAASujB,EAAQ9jC,GAAGmtD,IAAM5sC,IAASujB,EAAQ9jC,GAAG+jD,GACvE,OAAqB,IAAlBjgB,EAAQ9jC,GAAGsJ,GACHo/B,EAAe1oC,GAEf0oC,EAAe1oC,KAG9BA,GAAK,CACT,CACA,OAAO0oC,EAAe,IAC1B,EAiBA,OAfA0mB,EAAevM,cAAgB6K,EAEhB,uBAAZ3zC,EAAKozC,IACJjtD,OAAOmmB,eAAe+oC,EAAgB,QAAS,CAC3Cl9C,IAAK,WACD,OAAOw2B,EAAe,IAC1B,IAGRxoC,OAAOmmB,eAAe+oC,EAAgB,gBAAiB,CACnDl9C,IAAK,WACD,OAAO6H,EAAK0zC,EAChB,IAEJ2B,EAAe/wC,OAAqB,IAAZtE,EAAKs1C,GACtBD,CACX,CAEA,SAASD,EAAqB/tD,EAASwB,EAAM+f,EAAMkgC,GAY/C,OAJGzhD,EAAQ4D,EAAE49C,kBACTxhD,EAAQ4D,EAAE49C,iBAAiBC,GAR/B,WACI,OAAY,KAATjgD,EACQ+f,EAAKI,KAAKmgB,cAAc9hC,EAAQ4D,EAAEJ,GAEtCwf,gBAAgBhjB,EAAQ4D,EACnC,CAOJ,CAEA,MA7FS,CACLg+B,uBAGJ,SAAgCrgB,EAAMkgC,GAClC,GAAGlgC,EAAKmhB,QAAQ,CAEZ,IAEI9jC,EAFA0oC,EAAiB,GACjB4mB,EAAc3sC,EAAK5I,KAAK8pB,GACrBzjC,EAAMuiB,EAAKmhB,QAAQ4E,eAAeroC,OACzC,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb0oC,EAAe5kC,KAAK0nD,EAAqB8D,EAAYtvD,GAAG2iB,EAAKmhB,QAAQ4E,eAAe1oC,GAAG6iD,EAAclgC,IAGzG,OAAO,SAASpC,GAEZ,IADA,IAAIujB,EAAUnhB,EAAK5I,KAAK8pB,GAAI7jC,EAAI,EAAGI,EAAM0jC,EAAQzjC,OAC3CL,EAAEI,GAAK,CACT,GAAGmgB,IAASujB,EAAQ9jC,GAAG4Q,IAAM2P,IAASujB,EAAQ9jC,GAAGmtD,IAAM5sC,IAASujB,EAAQ9jC,GAAG+jD,GACvE,OAAOrb,EAAe1oC,GAE1BA,GAAK,CACT,CACJ,CACJ,CACJ,EAuEJ,CAhGiC,GAiG7B4uD,qBAAwB,WAE3B,SAASW,EAAcxhD,EAAMgM,GAC5BpX,KAAK6sD,MAAQzhD,EACbpL,KAAK8sD,MAAQ11C,CACd,CA8BA,OA7BA7Z,OAAOmmB,eAAekpC,EAAcp9C,UAAW,WAAY,CACpDD,IAAK,WAIG,OAHGvP,KAAK6sD,MAAM7gD,KAAK1F,GACftG,KAAK6sD,MAAM7gD,KAAK/H,WAEbjE,KAAK6sD,MAAM7gD,IACtB,IAGO,SAASmnB,EAAanT,GACvC,IAGI3iB,EADA0vD,EAAmBjvD,MAAMC,MAAM,KAAK,CAACL,OAAQy1B,EAAY8F,SAASv7B,SAC/DD,EAAM01B,EAAY8F,SAASv7B,OAClC,IAAIL,EAAI,EAAGA,EAAII,EAAKJ,GAAK,EACxB0vD,EAAiB1vD,GAAK,IAAIuvD,EAAcz5B,EAAY8F,SAAS57B,GAAI81B,EAAYzb,gBAAgBra,IAY9F,OATmB,SAASugB,GAExB,IADHvgB,EAAI,EACKA,EAAEI,GAAI,CACR,GAAG01B,EAAYzb,gBAAgBra,GAAG4Q,KAAO2P,EACrC,OAAOmvC,EAAiB1vD,GAE5BA,GAAK,CACT,CACJ,CAED,CAED,CApC2B,GAuCvBokB,gBACI,SAASurC,EAAarsC,EAAM1gB,GAC5B,IAAIgtD,EAKA5vD,EAAGI,EAAKyvD,EACZ,GAJFF,EAAY1mD,GACN0mD,EAAY/oD,WAGZhE,GACH,GAAY,UAATA,EAAkB,CAIpB,IAHAxC,EAAM,EACNwvD,EAAkBnvD,MAAMC,MAAM,KAAM,CAACL,OAAQD,IAC7CyvD,EAAWpvD,MAAMC,MAAM,KAAM,CAACL,OAAQD,IACjCJ,EAAI,EAAGA,EAAII,EAAKJ,GAAK,EACtB4vD,EAAgB5vD,GAAK6vD,EAAS7vD,GAAMsjB,GAAQtjB,EAAI,EAAK2vD,EAAY/qD,EAAE5E,GAAKsjB,EAAO,EAEnFssC,EAAgBntC,MAAQotC,CACzB,OACM,GAA6B,iBAAlBF,EAAY/qD,GAAkB+qD,EAAY/qD,aAAakhD,QACrE8J,EAAyB,IAAI9J,OAAXxiC,EAAkBqsC,EAAY/qD,EAAI0e,EAAmBqsC,EAAY/qD,IACnE6d,MAAQa,EAAOqsC,EAAY/qD,EAAI0e,EAAOqsC,EAAY/qD,MAC/D,CAIN,IAHAxE,EAAMuvD,EAAY/qD,EAAEvE,OACpBuvD,EAAkBnvD,MAAMC,MAAM,KAAM,CAACL,OAAQD,IAC7CyvD,EAAWpvD,MAAMC,MAAM,KAAM,CAACL,OAAQD,IACjCJ,EAAI,EAAGA,EAAII,EAAKJ,GAAK,EACtB4vD,EAAgB5vD,GAAK6vD,EAAS7vD,GAAKsjB,EAAOqsC,EAAY/qD,EAAE5E,GAAKsjB,EAAOqsC,EAAY/qD,EAAE5E,GAEtF4vD,EAAgBntC,MAAQotC,CACzB,CAYA,OAVAD,EAAgB/L,QAAU8L,EAAYpuC,UAAYouC,EAAYpuC,UAAUlhB,OAAS,EACjFuvD,EAAgB3hD,IAAM,SAASwa,GAC3B,OAAKmnC,EAAgB/L,QAGV8L,EAAYpuC,UAAUkH,EAAI,GAAGhmB,EAF7B,CAIf,EACAmtD,EAAgBxG,YAAcuG,EAAY9pC,eAC1C+pC,EAAgB/M,cAAgB8M,EAAY9M,cACrC+M,CACd,EAED,SAASE,aAAa/1C,EAAK4I,EAAMhc,GAC7BhE,KAAKqC,EAAI4b,gBAAgBwF,QAAQzD,EAAK5I,EAAKnV,EAAE,EAAE,EAAE+B,EACrD,CACA,SAASopD,YAAYh2C,EAAK4I,EAAMhc,GAC5BhE,KAAKqC,EAAI4b,gBAAgBwF,QAAQzD,EAAK5I,EAAKnV,EAAE,EAAE,EAAE+B,EACrD,CACA,SAASqpD,YAAYj2C,EAAK4I,EAAMhc,GAC5BhE,KAAKqC,EAAI4b,gBAAgBwF,QAAQzD,EAAK5I,EAAKnV,EAAE,EAAE,EAAE+B,EACrD,CACA,SAASspD,YAAYl2C,EAAK4I,EAAMhc,GAC5BhE,KAAKqC,EAAI4b,gBAAgBwF,QAAQzD,EAAK5I,EAAKnV,EAAE,EAAE,EAAE+B,EACrD,CACA,SAASupD,iBAAiBn2C,EAAK4I,EAAMhc,GACjChE,KAAKqC,EAAI4b,gBAAgBwF,QAAQzD,EAAK5I,EAAKnV,EAAE,EAAE,EAAE+B,EACrD,CACA,SAASwpD,gBAAgBp2C,EAAK4I,EAAMhc,GAChChE,KAAKqC,EAAI4b,gBAAgBwF,QAAQzD,EAAK5I,EAAKnV,EAAE,EAAE,EAAE+B,EACrD,CACA,SAASypD,eAAer2C,EAAK4I,EAAMhc,GAC/BhE,KAAKqC,EAAI4b,gBAAgBwF,QAAQzD,EAAK5I,EAAKnV,EAAE,EAAE,EAAE+B,EACrD,CACA,SAAS0pD,gBACL1tD,KAAKqC,EAAI,CAAC,CACd,CACA,SAAS++B,eAAehqB,EAAK3Y,EAAQuF,GACjC,IAAIm9B,EAAU/pB,EAAK8pB,GACnBlhC,KAAK+lC,eAAiB,GACtB,IAAI1oC,EACAswD,EADElwD,EAAM0jC,EAAQzjC,OAEpB,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,IACVswD,EAAa,IAAIC,YAAYzsB,EAAQ9jC,GAAGoB,EAAQuF,GAChDhE,KAAK+lC,eAAe5kC,KAAKwsD,EAEjC,CAEA,SAASC,YAAYx2C,EAAK3Y,EAAQuF,GAC9BhE,KAAKgE,kBAAoB,GACzBhE,KAAKwE,KAAK4S,EAAK3Y,EAAQuB,KAAKgE,mBACzBhE,KAAKgE,kBAAkBtG,QACtBsG,EAAkB7C,KAAKnB,KAE/B,CAEA4tD,YAAYp+C,UAAUvL,SAAW,WAC7BjE,KAAKmgB,KAAM,EACX,IAAI9iB,EAAGI,EAAMuC,KAAKgE,kBAAkBtG,OACpC,IAAIL,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb2C,KAAKgE,kBAAkB3G,GAAG4G,WAC1BjE,KAAKmgB,MAAMngB,KAAKgE,kBAAkB3G,GAAG8iB,KAAangB,KAAKmgB,GAE/D,EAEAytC,YAAYp+C,UAAUhL,KAAO,SAAS4S,EAAK3Y,EAAQuF,GAC/ChE,KAAKoX,KAAOA,EACZpX,KAAKmgB,KAAM,EACXngB,KAAK+lC,eAAiB,GACtB,IAAI1oC,EACAwwD,EADGpwD,EAAMuC,KAAKoX,KAAK8pB,GAAGxjC,OACjByjC,EAAUnhC,KAAKoX,KAAK8pB,GAC7B,IAAI7jC,EAAE,EAAEA,EAAEI,EAAIJ,GAAG,EACb,OAAO8jC,EAAQ9jC,GAAGsJ,IACd,KAAK,EACDknD,EAAM,IAAIV,aAAahsB,EAAQ9jC,GAAGoB,EAAQuF,GAC1ChE,KAAK+lC,eAAe5kC,KAAK0sD,GACzB,MACJ,KAAK,EACDA,EAAM,IAAIT,YAAYjsB,EAAQ9jC,GAAGoB,EAAQuF,GACzChE,KAAK+lC,eAAe5kC,KAAK0sD,GACzB,MACJ,KAAK,EACDA,EAAM,IAAIR,YAAYlsB,EAAQ9jC,GAAGoB,EAAQuF,GACzChE,KAAK+lC,eAAe5kC,KAAK0sD,GACzB,MACJ,KAAK,EACDA,EAAM,IAAIP,YAAYnsB,EAAQ9jC,GAAGoB,EAAQuF,GACzChE,KAAK+lC,eAAe5kC,KAAK0sD,GACzB,MACJ,KAAK,EACL,KAAK,EACDA,EAAM,IAAIJ,eAAetsB,EAAQ9jC,GAAGoB,EAAQuF,GAC5ChE,KAAK+lC,eAAe5kC,KAAK0sD,GACzB,MACJ,KAAK,GACDA,EAAM,IAAIN,iBAAiBpsB,EAAQ9jC,GAAGoB,EAAQuF,GAC9ChE,KAAK+lC,eAAe5kC,KAAK0sD,GACzB,MACJ,KAAK,GACDA,EAAM,IAAIL,gBAAgBrsB,EAAQ9jC,GAAGoB,EAAQuF,GAC7ChE,KAAK+lC,eAAe5kC,KAAK0sD,GACzB,MACJ,KAAK,EACDA,EAAM,IAAIzsB,eAAeD,EAAQ9jC,GAAGoB,EAAQuF,GAC5ChE,KAAK+lC,eAAe5kC,KAAK0sD,GACzB,MACJ,KAAK,EACDA,EAAM,IAAIH,cAAcvsB,EAAQ9jC,GAAGoB,EAAQuF,GAC3ChE,KAAK+lC,eAAe5kC,KAAK0sD,GAIzC,EACI,IAAIC,YAAc,CAAC,EAEnB,SAASC,gBAAiB1wC,GACtB3hB,aAAe2hB,CACnB,CACA,SAAS2xB,KAAKlB,GACVP,iBAAiByB,KAAKlB,EAC1B,CAEA,SAASoB,MAAMpB,GACXP,iBAAiB2B,MAAMpB,EAC3B,CAEA,SAASqB,YAAYrB,GACjBP,iBAAiB4B,YAAYrB,EACjC,CAEA,SAASgB,SAAShvB,EAAOguB,GACrBP,iBAAiBuB,SAAShvB,EAAOguB,EACrC,CAEA,SAASiB,aAAajvB,EAAOguB,GACzBP,iBAAiBwB,aAAajvB,EAAOguB,EACzC,CAEA,SAASjK,KAAKiK,GACVP,iBAAiB1J,KAAKiK,EAC1B,CAEA,SAASmB,UAAUnvB,GACfytB,iBAAiB0B,UAAUnvB,EAC/B,CAEA,SAASsvB,oBACc,IAAfC,WACA9B,iBAAiB6B,iBAAiBl2B,cAAem2B,WAAYlrB,UAE7DopB,iBAAiB6B,kBAEzB,CAEA,SAASnB,kBAAkBjuB,GACvB,OAAOutB,iBAAiBU,kBAAkBjuB,EAC9C,CAEA,SAAS0vB,SACLnC,iBAAiBmC,QACrB,CAEA,SAASf,QACLpB,iBAAiBoB,OACrB,CAEA,SAASgB,YAAY/xC,EAAKgyC,EAAS9B,GAC/BP,iBAAiBoC,YAAY/xC,EAAKgyC,EAAS9B,EAC/C,CAEA,SAASkgB,qBAAqB3vD,GAC1B1C,gBAAkB0C,CACtB,CAEA,SAASuwC,cAAc19B,GAInB,OAHmB,IAAfm+B,aACAn+B,EAAOgI,cAAgBhB,KAAKC,MAAMe,gBAE/Bq0B,iBAAiBqB,cAAc19B,EAC1C,CAEA,SAAS6sB,QAAQ+P,GACb,OAAOP,iBAAiBxP,QAAQ+P,EACpC,CAEA,SAASmgB,WAAWnuC,GAChB,GAAqB,iBAAVA,EACP,OAAQA,GACJ,IAAK,OACD9hB,qBAAuB,IACvB,MACJ,IAAK,SACDA,qBAAuB,GACvB,MACJ,IAAK,MACDA,qBAAuB,QAGvBiI,MAAM6Z,IAAUA,EAAQ,IAChC9hB,qBAAuB8hB,GAGvB1hB,cADAJ,sBAAwB,IAKhC,CAEA,SAASkwD,YACL,MAA4B,oBAAdnyD,SAClB,CAEA,SAASoyD,cAAcluD,EAAMmuD,GACZ,gBAATnuD,IACArE,kBAAoBwyD,EAE5B,CAEA,SAASC,WAAWzwC,GAChB,OAAQA,GACJ,IAAK,kBACD,OAAOK,gBACX,IAAK,uBACD,OAAOqI,qBACX,IAAK,SACD,OAAO5hB,OAEnB,CAuBA,SAAS4pD,aACuB,aAAxBn0C,SAAS65B,aACTua,cAAcC,yBACdpf,mBAER,CAEA,SAASqf,iBAAiBC,GAEtB,IADA,IAAIC,EAAOC,YAAYh2C,MAAM,KACpBvb,EAAI,EAAGA,EAAIsxD,EAAKjxD,OAAQL,IAAK,CAClC,IAAIwxD,EAAOF,EAAKtxD,GAAGub,MAAM,KACzB,GAAIk2C,mBAAmBD,EAAK,KAAOH,EAC/B,OAAOI,mBAAmBD,EAAK,GAEvC,CACJ,CArCAf,YAAY9e,KAAOA,KACnB8e,YAAY5e,MAAQA,MACpB4e,YAAYC,gBAAkBA,gBAC9BD,YAAY3e,YAAcA,YAC1B2e,YAAYhf,SAAWA,SACvBgf,YAAY/e,aAAeA,aAC3B+e,YAAYjqB,KAAOA,KACnBiqB,YAAY7e,UAAYA,UACxB6e,YAAY1e,iBAAmBA,iBAC/B0e,YAAY7f,kBAAoBA,kBAChC6f,YAAYlf,cAAgBA,cAC5Bkf,YAAYE,qBAAuBA,qBACnCF,YAAYpe,OAASA,OACrBoe,YAAYnf,MAAQA,MACpBmf,YAAYne,YAAcA,YAC1Bme,YAAY/vB,QAAUA,QACtB+vB,YAAYG,WAAaA,WACzBH,YAAYI,UAAYA,UACxBJ,YAAYK,cAAgBA,cAC5BL,YAAYiB,aAAeV,WAC3BP,YAAYkB,QAAU,SAkBtB,IAAI3f,WAAa,mBACbn2B,cAAgB,sBAChBiL,SAAW,GACf,GAAIkrB,WAAY,CACZ,IAAI4f,QAAU90C,SAASq1B,qBAAqB,UACxC9iB,MAAQuiC,QAAQvxD,OAAS,EACzBwxD,SAAWD,QAAQviC,QAAU,CAC7BoD,IAAK,IAEL8+B,YAAcM,SAASp/B,IAAI3hB,QAAQ,aAAc,IACrDgW,SAAWsqC,iBAAiB,WAChC,CACA,IAAID,wBAA0BW,YAAYb,WAAY,KACtD,OAAOR,WACX,OA5gcS,KAFD,yCACI,OAAOlkC,QAAQwlC,KAClB","sources":["webpack:///./node_modules/bodymovin/build/player/bodymovin.js"],"sourcesContent":["(function(root, factory) {\r\n if (typeof define === \"function\" && define.amd) {\r\n define(function() {\r\n return factory(root);\r\n });\r\n } else if (typeof module === \"object\" && module.exports) {\r\n module.exports = factory(root);\r\n } else {\r\n root.bodymovin = factory(root);\r\n }\r\n}((window || {}), function(window) {\r\n var svgNS = \"http://www.w3.org/2000/svg\";\r\n\r\nvar locationHref = '';\r\n\nvar subframeEnabled = true;\r\nvar expressionsPlugin;\r\nvar isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\r\nvar cachedColors = {};\r\nvar bm_rounder = Math.round;\r\nvar bm_rnd;\r\nvar bm_pow = Math.pow;\r\nvar bm_sqrt = Math.sqrt;\r\nvar bm_abs = Math.abs;\r\nvar bm_floor = Math.floor;\r\nvar bm_max = Math.max;\r\nvar bm_min = Math.min;\r\nvar blitter = 10;\r\n\r\nvar BMMath = {};\r\n(function(){\r\n var propertyNames = Object.getOwnPropertyNames(Math);\r\n var i, len = propertyNames.length;\r\n for(i=0;i<len;i+=1){\r\n BMMath[propertyNames[i]] = Math[propertyNames[i]];\r\n }\r\n}());\r\n\r\nfunction ProjectInterface(){return {}};\r\n\r\nBMMath.random = Math.random;\r\nBMMath.abs = function(val){\r\n var tOfVal = typeof val;\r\n if(tOfVal === 'object' && val.length){\r\n var absArr = Array.apply(null,{length:val.length});\r\n var i, len = val.length;\r\n for(i=0;i<len;i+=1){\r\n absArr[i] = Math.abs(val[i]);\r\n }\r\n return absArr;\r\n }\r\n return Math.abs(val);\r\n\r\n}\r\nvar defaultCurveSegments = 150;\r\nvar degToRads = Math.PI/180;\r\nvar roundCorner = 0.5519;\r\n\r\nfunction roundValues(flag){\r\n if(flag){\r\n bm_rnd = Math.round;\r\n }else{\r\n bm_rnd = function(val){\r\n return val;\r\n };\r\n }\r\n}\r\nroundValues(false);\r\n\r\nfunction roundTo2Decimals(val){\r\n return Math.round(val*10000)/10000;\r\n}\r\n\r\nfunction roundTo3Decimals(val){\r\n return Math.round(val*100)/100;\r\n}\r\n\r\nfunction styleDiv(element){\r\n element.style.position = 'absolute';\r\n element.style.top = 0;\r\n element.style.left = 0;\r\n element.style.display = 'block';\r\n element.style.transformOrigin = element.style.webkitTransformOrigin = '0 0';\r\n element.style.backfaceVisibility = element.style.webkitBackfaceVisibility = 'visible';\r\n element.style.transformStyle = element.style.webkitTransformStyle = element.style.mozTransformStyle = \"preserve-3d\";\r\n}\r\n\r\nfunction styleUnselectableDiv(element){\r\n element.style.userSelect = 'none';\r\n element.style.MozUserSelect = 'none';\r\n element.style.webkitUserSelect = 'none';\r\n element.style.oUserSelect = 'none';\r\n\r\n}\r\n\r\nfunction BMEnterFrameEvent(n,c,t,d){\r\n this.type = n;\r\n this.currentTime = c;\r\n this.totalTime = t;\r\n this.direction = d < 0 ? -1:1;\r\n}\r\n\r\nfunction BMCompleteEvent(n,d){\r\n this.type = n;\r\n this.direction = d < 0 ? -1:1;\r\n}\r\n\r\nfunction BMCompleteLoopEvent(n,c,t,d){\r\n this.type = n;\r\n this.currentLoop = c;\r\n this.totalLoops = t;\r\n this.direction = d < 0 ? -1:1;\r\n}\r\n\r\nfunction BMSegmentStartEvent(n,f,t){\r\n this.type = n;\r\n this.firstFrame = f;\r\n this.totalFrames = t;\r\n}\r\n\r\nfunction BMDestroyEvent(n,t){\r\n this.type = n;\r\n this.target = t;\r\n}\r\n\r\nfunction _addEventListener(eventName, callback){\r\n\r\n if (!this._cbs[eventName]){\r\n this._cbs[eventName] = [];\r\n }\r\n this._cbs[eventName].push(callback);\r\n\r\n\treturn function() {\r\n\t\tthis.removeEventListener(eventName, callback);\r\n\t}.bind(this);\r\n}\r\n\r\nfunction _removeEventListener(eventName,callback){\r\n\r\n if (!callback){\r\n this._cbs[eventName] = null;\r\n }else if(this._cbs[eventName]){\r\n var i = 0, len = this._cbs[eventName].length;\r\n while(i<len){\r\n if(this._cbs[eventName][i] === callback){\r\n this._cbs[eventName].splice(i,1);\r\n i -=1;\r\n len -= 1;\r\n }\r\n i += 1;\r\n }\r\n if(!this._cbs[eventName].length){\r\n this._cbs[eventName] = null;\r\n }\r\n }\r\n\r\n}\r\n\r\nfunction _triggerEvent(eventName, args){\r\n if (this._cbs[eventName]) {\r\n var len = this._cbs[eventName].length;\r\n for (var i = 0; i < len; i++){\r\n this._cbs[eventName][i](args);\r\n }\r\n }\r\n}\r\n\r\nfunction randomString(length, chars){\r\n if(chars === undefined){\r\n chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';\r\n }\r\n var i;\r\n var result = '';\r\n for (i = length; i > 0; --i) result += chars[Math.round(Math.random() * (chars.length - 1))];\r\n return result;\r\n}\r\n\r\nfunction HSVtoRGB(h, s, v) {\r\n var r, g, b, i, f, p, q, t;\r\n if (arguments.length === 1) {\r\n s = h.s, v = h.v, h = h.h;\r\n }\r\n i = Math.floor(h * 6);\r\n f = h * 6 - i;\r\n p = v * (1 - s);\r\n q = v * (1 - f * s);\r\n t = v * (1 - (1 - f) * s);\r\n switch (i % 6) {\r\n case 0: r = v, g = t, b = p; break;\r\n case 1: r = q, g = v, b = p; break;\r\n case 2: r = p, g = v, b = t; break;\r\n case 3: r = p, g = q, b = v; break;\r\n case 4: r = t, g = p, b = v; break;\r\n case 5: r = v, g = p, b = q; break;\r\n }\r\n return [ r,\r\n g,\r\n b ];\r\n}\r\n\r\nfunction RGBtoHSV(r, g, b) {\r\n if (arguments.length === 1) {\r\n g = r.g, b = r.b, r = r.r;\r\n }\r\n var max = Math.max(r, g, b), min = Math.min(r, g, b),\r\n d = max - min,\r\n h,\r\n s = (max === 0 ? 0 : d / max),\r\n v = max / 255;\r\n\r\n switch (max) {\r\n case min: h = 0; break;\r\n case r: h = (g - b) + d * (g < b ? 6: 0); h /= 6 * d; break;\r\n case g: h = (b - r) + d * 2; h /= 6 * d; break;\r\n case b: h = (r - g) + d * 4; h /= 6 * d; break;\r\n }\r\n\r\n return [\r\n h,\r\n s,\r\n v\r\n ];\r\n}\r\n\r\nfunction addSaturationToRGB(color,offset){\r\n var hsv = RGBtoHSV(color[0]*255,color[1]*255,color[2]*255);\r\n hsv[1] += offset;\r\n if (hsv[1] > 1) {\r\n hsv[1] = 1;\r\n }\r\n else if (hsv[1] <= 0) {\r\n hsv[1] = 0;\r\n }\r\n return HSVtoRGB(hsv[0],hsv[1],hsv[2]);\r\n}\r\n\r\nfunction addBrightnessToRGB(color,offset){\r\n var hsv = RGBtoHSV(color[0]*255,color[1]*255,color[2]*255);\r\n hsv[2] += offset;\r\n if (hsv[2] > 1) {\r\n hsv[2] = 1;\r\n }\r\n else if (hsv[2] < 0) {\r\n hsv[2] = 0;\r\n }\r\n return HSVtoRGB(hsv[0],hsv[1],hsv[2]);\r\n}\r\n\r\nfunction addHueToRGB(color,offset) {\r\n var hsv = RGBtoHSV(color[0]*255,color[1]*255,color[2]*255);\r\n hsv[0] += offset/360;\r\n if (hsv[0] > 1) {\r\n hsv[0] -= 1;\r\n }\r\n else if (hsv[0] < 0) {\r\n hsv[0] += 1;\r\n }\r\n return HSVtoRGB(hsv[0],hsv[1],hsv[2]);\r\n}\r\n\r\nfunction componentToHex(c) {\r\n var hex = c.toString(16);\r\n return hex.length == 1 ? '0' + hex : hex;\r\n}\r\n\r\nvar rgbToHex = (function(){\r\n var colorMap = [];\r\n var i;\r\n var hex;\r\n for(i=0;i<256;i+=1){\r\n hex = i.toString(16);\r\n colorMap[i] = hex.length == 1 ? '0' + hex : hex;\r\n }\r\n\r\n return function(r, g, b) {\r\n if(r<0){\r\n r = 0;\r\n }\r\n if(g<0){\r\n g = 0;\r\n }\r\n if(b<0){\r\n b = 0;\r\n }\r\n return '#' + colorMap[r] + colorMap[g] + colorMap[b];\r\n };\r\n}());\r\n\r\nfunction fillToRgba(hex,alpha){\r\n if(!cachedColors[hex]){\r\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n cachedColors[hex] = parseInt(result[1], 16)+','+parseInt(result[2], 16)+','+parseInt(result[3], 16);\r\n }\r\n return 'rgba('+cachedColors[hex]+','+alpha+')';\r\n}\r\n\r\nvar fillColorToString = (function(){\r\n\r\n var colorMap = [];\r\n return function(colorArr,alpha){\r\n if(alpha !== undefined){\r\n colorArr[3] = alpha;\r\n }\r\n if(!colorMap[colorArr[0]]){\r\n colorMap[colorArr[0]] = {};\r\n }\r\n if(!colorMap[colorArr[0]][colorArr[1]]){\r\n colorMap[colorArr[0]][colorArr[1]] = {};\r\n }\r\n if(!colorMap[colorArr[0]][colorArr[1]][colorArr[2]]){\r\n colorMap[colorArr[0]][colorArr[1]][colorArr[2]] = {};\r\n }\r\n if(!colorMap[colorArr[0]][colorArr[1]][colorArr[2]][colorArr[3]]){\r\n colorMap[colorArr[0]][colorArr[1]][colorArr[2]][colorArr[3]] = 'rgba(' + colorArr.join(',')+')';\r\n }\r\n return colorMap[colorArr[0]][colorArr[1]][colorArr[2]][colorArr[3]];\r\n };\r\n}());\r\n\r\nfunction RenderedFrame(tr,o) {\r\n this.tr = tr;\r\n this.o = o;\r\n}\r\n\r\nfunction iterateDynamicProperties(num){\r\n var i, len = this.dynamicProperties;\r\n for(i=0;i<len;i+=1){\r\n this.dynamicProperties[i].getValue(num);\r\n }\r\n}\r\n\r\nfunction reversePath(paths){\r\n var newI = [], newO = [], newV = [];\r\n var i, len, newPaths = {};\r\n var init = 0;\r\n if (paths.c) {\r\n newI[0] = paths.o[0];\r\n newO[0] = paths.i[0];\r\n newV[0] = paths.v[0];\r\n init = 1;\r\n }\r\n len = paths.i.length;\r\n var cnt = len - 1;\r\n\r\n for (i = init; i < len; i += 1) {\r\n newI.push(paths.o[cnt]);\r\n newO.push(paths.i[cnt]);\r\n newV.push(paths.v[cnt]);\r\n cnt -= 1;\r\n }\r\n\r\n newPaths.i = newI;\r\n newPaths.o = newO;\r\n newPaths.v = newV;\r\n\r\n return newPaths;\r\n}\n/*!\r\n Transformation Matrix v2.0\r\n (c) Epistemex 2014-2015\r\n www.epistemex.com\r\n By Ken Fyrstenberg\r\n Contributions by leeoniya.\r\n License: MIT, header required.\r\n */\r\n\r\n/**\r\n * 2D transformation matrix object initialized with identity matrix.\r\n *\r\n * The matrix can synchronize a canvas context by supplying the context\r\n * as an argument, or later apply current absolute transform to an\r\n * existing context.\r\n *\r\n * All values are handled as floating point values.\r\n *\r\n * @param {CanvasRenderingContext2D} [context] - Optional context to sync with Matrix\r\n * @prop {number} a - scale x\r\n * @prop {number} b - shear y\r\n * @prop {number} c - shear x\r\n * @prop {number} d - scale y\r\n * @prop {number} e - translate x\r\n * @prop {number} f - translate y\r\n * @prop {CanvasRenderingContext2D|null} [context=null] - set or get current canvas context\r\n * @constructor\r\n */\r\n\r\nvar Matrix = (function(){\r\n\r\n function reset(){\r\n this.props[0] = 1;\r\n this.props[1] = 0;\r\n this.props[2] = 0;\r\n this.props[3] = 0;\r\n this.props[4] = 0;\r\n this.props[5] = 1;\r\n this.props[6] = 0;\r\n this.props[7] = 0;\r\n this.props[8] = 0;\r\n this.props[9] = 0;\r\n this.props[10] = 1;\r\n this.props[11] = 0;\r\n this.props[12] = 0;\r\n this.props[13] = 0;\r\n this.props[14] = 0;\r\n this.props[15] = 1;\r\n return this;\r\n }\r\n\r\n function rotate(angle) {\r\n if(angle === 0){\r\n return this;\r\n }\r\n var mCos = Math.cos(angle);\r\n var mSin = Math.sin(angle);\r\n return this._t(mCos, -mSin, 0, 0\r\n , mSin, mCos, 0, 0\r\n , 0, 0, 1, 0\r\n , 0, 0, 0, 1);\r\n }\r\n\r\n function rotateX(angle){\r\n if(angle === 0){\r\n return this;\r\n }\r\n var mCos = Math.cos(angle);\r\n var mSin = Math.sin(angle);\r\n return this._t(1, 0, 0, 0\r\n , 0, mCos, -mSin, 0\r\n , 0, mSin, mCos, 0\r\n , 0, 0, 0, 1);\r\n }\r\n\r\n function rotateY(angle){\r\n if(angle === 0){\r\n return this;\r\n }\r\n var mCos = Math.cos(angle);\r\n var mSin = Math.sin(angle);\r\n return this._t(mCos, 0, mSin, 0\r\n , 0, 1, 0, 0\r\n , -mSin, 0, mCos, 0\r\n , 0, 0, 0, 1);\r\n }\r\n\r\n function rotateZ(angle){\r\n if(angle === 0){\r\n return this;\r\n }\r\n var mCos = Math.cos(angle);\r\n var mSin = Math.sin(angle);\r\n return this._t(mCos, -mSin, 0, 0\r\n , mSin, mCos, 0, 0\r\n , 0, 0, 1, 0\r\n , 0, 0, 0, 1);\r\n }\r\n\r\n function shear(sx,sy){\r\n return this._t(1, sy, sx, 1, 0, 0);\r\n }\r\n\r\n function skew(ax, ay){\r\n return this.shear(Math.tan(ax), Math.tan(ay));\r\n }\r\n\r\n function skewFromAxis(ax, angle){\r\n var mCos = Math.cos(angle);\r\n var mSin = Math.sin(angle);\r\n return this._t(mCos, mSin, 0, 0\r\n , -mSin, mCos, 0, 0\r\n , 0, 0, 1, 0\r\n , 0, 0, 0, 1)\r\n ._t(1, 0, 0, 0\r\n , Math.tan(ax), 1, 0, 0\r\n , 0, 0, 1, 0\r\n , 0, 0, 0, 1)\r\n ._t(mCos, -mSin, 0, 0\r\n , mSin, mCos, 0, 0\r\n , 0, 0, 1, 0\r\n , 0, 0, 0, 1);\r\n //return this._t(mCos, mSin, -mSin, mCos, 0, 0)._t(1, 0, Math.tan(ax), 1, 0, 0)._t(mCos, -mSin, mSin, mCos, 0, 0);\r\n }\r\n\r\n function scale(sx, sy, sz) {\r\n sz = isNaN(sz) ? 1 : sz;\r\n if(sx == 1 && sy == 1 && sz == 1){\r\n return this;\r\n }\r\n return this._t(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1);\r\n }\r\n\r\n function setTransform(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {\r\n this.props[0] = a;\r\n this.props[1] = b;\r\n this.props[2] = c;\r\n this.props[3] = d;\r\n this.props[4] = e;\r\n this.props[5] = f;\r\n this.props[6] = g;\r\n this.props[7] = h;\r\n this.props[8] = i;\r\n this.props[9] = j;\r\n this.props[10] = k;\r\n this.props[11] = l;\r\n this.props[12] = m;\r\n this.props[13] = n;\r\n this.props[14] = o;\r\n this.props[15] = p;\r\n return this;\r\n }\r\n\r\n function translate(tx, ty, tz) {\r\n tz = tz || 0;\r\n if(tx !== 0 || ty !== 0 || tz !== 0){\r\n return this._t(1,0,0,0,0,1,0,0,0,0,1,0,tx,ty,tz,1);\r\n }\r\n return this;\r\n }\r\n\r\n function transform(a2, b2, c2, d2, e2, f2, g2, h2, i2, j2, k2, l2, m2, n2, o2, p2) {\r\n\r\n if(a2 === 1 && b2 === 0 && c2 === 0 && d2 === 0 && e2 === 0 && f2 === 1 && g2 === 0 && h2 === 0 && i2 === 0 && j2 === 0 && k2 === 1 && l2 === 0){\r\n if(m2 !== 0 || n2 !== 0 || o2 !== 0){\r\n\r\n this.props[12] = this.props[12] * a2 + this.props[13] * e2 + this.props[14] * i2 + this.props[15] * m2 ;\r\n this.props[13] = this.props[12] * b2 + this.props[13] * f2 + this.props[14] * j2 + this.props[15] * n2 ;\r\n this.props[14] = this.props[12] * c2 + this.props[13] * g2 + this.props[14] * k2 + this.props[15] * o2 ;\r\n this.props[15] = this.props[12] * d2 + this.props[13] * h2 + this.props[14] * l2 + this.props[15] * p2 ;\r\n }\r\n this._identityCalculated = false;\r\n return this;\r\n }\r\n\r\n var a1 = this.props[0];\r\n var b1 = this.props[1];\r\n var c1 = this.props[2];\r\n var d1 = this.props[3];\r\n var e1 = this.props[4];\r\n var f1 = this.props[5];\r\n var g1 = this.props[6];\r\n var h1 = this.props[7];\r\n var i1 = this.props[8];\r\n var j1 = this.props[9];\r\n var k1 = this.props[10];\r\n var l1 = this.props[11];\r\n var m1 = this.props[12];\r\n var n1 = this.props[13];\r\n var o1 = this.props[14];\r\n var p1 = this.props[15];\r\n\r\n /* matrix order (canvas compatible):\r\n * ace\r\n * bdf\r\n * 001\r\n */\r\n this.props[0] = a1 * a2 + b1 * e2 + c1 * i2 + d1 * m2;\r\n this.props[1] = a1 * b2 + b1 * f2 + c1 * j2 + d1 * n2 ;\r\n this.props[2] = a1 * c2 + b1 * g2 + c1 * k2 + d1 * o2 ;\r\n this.props[3] = a1 * d2 + b1 * h2 + c1 * l2 + d1 * p2 ;\r\n\r\n this.props[4] = e1 * a2 + f1 * e2 + g1 * i2 + h1 * m2 ;\r\n this.props[5] = e1 * b2 + f1 * f2 + g1 * j2 + h1 * n2 ;\r\n this.props[6] = e1 * c2 + f1 * g2 + g1 * k2 + h1 * o2 ;\r\n this.props[7] = e1 * d2 + f1 * h2 + g1 * l2 + h1 * p2 ;\r\n\r\n this.props[8] = i1 * a2 + j1 * e2 + k1 * i2 + l1 * m2 ;\r\n this.props[9] = i1 * b2 + j1 * f2 + k1 * j2 + l1 * n2 ;\r\n this.props[10] = i1 * c2 + j1 * g2 + k1 * k2 + l1 * o2 ;\r\n this.props[11] = i1 * d2 + j1 * h2 + k1 * l2 + l1 * p2 ;\r\n\r\n this.props[12] = m1 * a2 + n1 * e2 + o1 * i2 + p1 * m2 ;\r\n this.props[13] = m1 * b2 + n1 * f2 + o1 * j2 + p1 * n2 ;\r\n this.props[14] = m1 * c2 + n1 * g2 + o1 * k2 + p1 * o2 ;\r\n this.props[15] = m1 * d2 + n1 * h2 + o1 * l2 + p1 * p2 ;\r\n\r\n this._identityCalculated = false;\r\n return this;\r\n }\r\n\r\n function isIdentity() {\r\n if(!this._identityCalculated){\r\n this._identity = !(this.props[0] !== 1 || this.props[1] !== 0 || this.props[2] !== 0 || this.props[3] !== 0\r\n || this.props[4] !== 0 || this.props[5] !== 1 || this.props[6] !== 0 || this.props[7] !== 0\r\n || this.props[8] !== 0 || this.props[9] !== 0 || this.props[10] !== 1 || this.props[11] !== 0\r\n || this.props[12] !== 0 || this.props[13] !== 0 || this.props[14] !== 0 || this.props[15] !== 1);\r\n this._identityCalculated = true;\r\n }\r\n return this._identity;\r\n }\r\n\r\n function clone(matr){\r\n var i;\r\n for(i=0;i<16;i+=1){\r\n matr.props[i] = this.props[i];\r\n }\r\n }\r\n\r\n function cloneFromProps(props){\r\n var i;\r\n for(i=0;i<16;i+=1){\r\n this.props[i] = props[i];\r\n }\r\n }\r\n\r\n function applyToPoint(x, y, z) {\r\n\r\n return {\r\n x: x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12],\r\n y: x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13],\r\n z: x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]\r\n };\r\n /*return {\r\n x: x * me.a + y * me.c + me.e,\r\n y: x * me.b + y * me.d + me.f\r\n };*/\r\n }\r\n function applyToX(x, y, z) {\r\n return x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12];\r\n }\r\n function applyToY(x, y, z) {\r\n return x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13];\r\n }\r\n function applyToZ(x, y, z) {\r\n return x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14];\r\n }\r\n\r\n function inversePoint(pt) {\r\n var determinant = this.props[0] * this.props[5] - this.props[1] * this.props[4];\r\n var a = this.props[5]/determinant;\r\n var b = - this.props[1]/determinant;\r\n var c = - this.props[4]/determinant;\r\n var d = this.props[0]/determinant;\r\n var e = (this.props[4] * this.props[13] - this.props[5] * this.props[12])/determinant;\r\n var f = - (this.props[0] * this.props[13] - this.props[1] * this.props[12])/determinant;\r\n return [pt[0] * a + pt[1] * c + e, pt[0] * b + pt[1] * d + f, 0];\r\n }\r\n\r\n function inversePoints(pts){\r\n var i, len = pts.length, retPts = [];\r\n for(i=0;i<len;i+=1){\r\n retPts[i] = inversePoint(pts[i]);\r\n }\r\n return retPts;\r\n }\r\n\r\n function applyToPointArray(x,y,z,dimensions){\r\n if(dimensions && dimensions === 2) {\r\n var arr = point_pool.newPoint();\r\n arr[0] = x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12]; \r\n arr[1] = x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13]; \r\n return arr; \r\n }\r\n return [x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12],x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13],x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]];\r\n }\r\n function applyToPointStringified(x, y) {\r\n if(this.isIdentity()) {\r\n return x + ',' + y;\r\n }\r\n return (bm_rnd(x * this.props[0] + y * this.props[4] + this.props[12]))+','+(bm_rnd(x * this.props[1] + y * this.props[5] + this.props[13]));\r\n }\r\n\r\n function toArray() {\r\n return [this.props[0],this.props[1],this.props[2],this.props[3],this.props[4],this.props[5],this.props[6],this.props[7],this.props[8],this.props[9],this.props[10],this.props[11],this.props[12],this.props[13],this.props[14],this.props[15]];\r\n }\r\n\r\n function toCSS() {\r\n if(isSafari){\r\n return \"matrix3d(\" + roundTo2Decimals(this.props[0]) + ',' + roundTo2Decimals(this.props[1]) + ',' + roundTo2Decimals(this.props[2]) + ',' + roundTo2Decimals(this.props[3]) + ',' + roundTo2Decimals(this.props[4]) + ',' + roundTo2Decimals(this.props[5]) + ',' + roundTo2Decimals(this.props[6]) + ',' + roundTo2Decimals(this.props[7]) + ',' + roundTo2Decimals(this.props[8]) + ',' + roundTo2Decimals(this.props[9]) + ',' + roundTo2Decimals(this.props[10]) + ',' + roundTo2Decimals(this.props[11]) + ',' + roundTo2Decimals(this.props[12]) + ',' + roundTo2Decimals(this.props[13]) + ',' + roundTo2Decimals(this.props[14]) + ',' + roundTo2Decimals(this.props[15]) + ')';\r\n } else {\r\n this.cssParts[1] = this.props.join(',');\r\n return this.cssParts.join('');\r\n }\r\n }\r\n\r\n function to2dCSS() {\r\n return \"matrix(\" + roundTo2Decimals(this.props[0]) + ',' + roundTo2Decimals(this.props[1]) + ',' + roundTo2Decimals(this.props[4]) + ',' + roundTo2Decimals(this.props[5]) + ',' + roundTo2Decimals(this.props[12]) + ',' + roundTo2Decimals(this.props[13]) + \")\";\r\n }\r\n\r\n function toString() {\r\n return \"\" + this.toArray();\r\n }\r\n\r\n return function(){\r\n this.reset = reset;\r\n this.rotate = rotate;\r\n this.rotateX = rotateX;\r\n this.rotateY = rotateY;\r\n this.rotateZ = rotateZ;\r\n this.skew = skew;\r\n this.skewFromAxis = skewFromAxis;\r\n this.shear = shear;\r\n this.scale = scale;\r\n this.setTransform = setTransform;\r\n this.translate = translate;\r\n this.transform = transform;\r\n this.applyToPoint = applyToPoint;\r\n this.applyToX = applyToX;\r\n this.applyToY = applyToY;\r\n this.applyToZ = applyToZ;\r\n this.applyToPointArray = applyToPointArray;\r\n this.applyToPointStringified = applyToPointStringified;\r\n this.toArray = toArray;\r\n this.toCSS = toCSS;\r\n this.to2dCSS = to2dCSS;\r\n this.toString = toString;\r\n this.clone = clone;\r\n this.cloneFromProps = cloneFromProps;\r\n this.inversePoints = inversePoints;\r\n this.inversePoint = inversePoint;\r\n this._t = this.transform;\r\n this.isIdentity = isIdentity;\r\n this._identity = true;\r\n this._identityCalculated = false;\r\n\r\n this.props = [1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];\r\n\r\n this.cssParts = ['matrix3d(','',')'];\r\n }\r\n}());\r\n\r\nfunction Matrix() {\r\n\r\n\r\n}\r\n\n/*\r\n Copyright 2014 David Bau.\r\n\r\n Permission is hereby granted, free of charge, to any person obtaining\r\n a copy of this software and associated documentation files (the\r\n \"Software\"), to deal in the Software without restriction, including\r\n without limitation the rights to use, copy, modify, merge, publish,\r\n distribute, sublicense, and/or sell copies of the Software, and to\r\n permit persons to whom the Software is furnished to do so, subject to\r\n the following conditions:\r\n\r\n The above copyright notice and this permission notice shall be\r\n included in all copies or substantial portions of the Software.\r\n\r\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r\n IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\n CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\n TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\r\n SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n */\r\n\r\n(function (pool, math) {\r\n//\r\n// The following constants are related to IEEE 754 limits.\r\n//\r\n var global = this,\r\n width = 256, // each RC4 output is 0 <= x < 256\r\n chunks = 6, // at least six RC4 outputs for each double\r\n digits = 52, // there are 52 significant digits in a double\r\n rngname = 'random', // rngname: name for Math.random and Math.seedrandom\r\n startdenom = math.pow(width, chunks),\r\n significance = math.pow(2, digits),\r\n overflow = significance * 2,\r\n mask = width - 1,\r\n nodecrypto; // node.js crypto module, initialized at the bottom.\r\n\r\n//\r\n// seedrandom()\r\n// This is the seedrandom function described above.\r\n//\r\n function seedrandom(seed, options, callback) {\r\n var key = [];\r\n options = (options == true) ? { entropy: true } : (options || {});\r\n\r\n // Flatten the seed string or build one from local entropy if needed.\r\n var shortseed = mixkey(flatten(\r\n options.entropy ? [seed, tostring(pool)] :\r\n (seed == null) ? autoseed() : seed, 3), key);\r\n\r\n // Use the seed to initialize an ARC4 generator.\r\n var arc4 = new ARC4(key);\r\n\r\n // This function returns a random double in [0, 1) that contains\r\n // randomness in every bit of the mantissa of the IEEE 754 value.\r\n var prng = function() {\r\n var n = arc4.g(chunks), // Start with a numerator n < 2 ^ 48\r\n d = startdenom, // and denominator d = 2 ^ 48.\r\n x = 0; // and no 'extra last byte'.\r\n while (n < significance) { // Fill up all significant digits by\r\n n = (n + x) * width; // shifting numerator and\r\n d *= width; // denominator and generating a\r\n x = arc4.g(1); // new least-significant-byte.\r\n }\r\n while (n >= overflow) { // To avoid rounding up, before adding\r\n n /= 2; // last byte, shift everything\r\n d /= 2; // right using integer math until\r\n x >>>= 1; // we have exactly the desired bits.\r\n }\r\n return (n + x) / d; // Form the number within [0, 1).\r\n };\r\n\r\n prng.int32 = function() { return arc4.g(4) | 0; }\r\n prng.quick = function() { return arc4.g(4) / 0x100000000; }\r\n prng.double = prng;\r\n\r\n // Mix the randomness into accumulated entropy.\r\n mixkey(tostring(arc4.S), pool);\r\n\r\n // Calling convention: what to return as a function of prng, seed, is_math.\r\n return (options.pass || callback ||\r\n function(prng, seed, is_math_call, state) {\r\n if (state) {\r\n // Load the arc4 state from the given state if it has an S array.\r\n if (state.S) { copy(state, arc4); }\r\n // Only provide the .state method if requested via options.state.\r\n prng.state = function() { return copy(arc4, {}); }\r\n }\r\n\r\n // If called as a method of Math (Math.seedrandom()), mutate\r\n // Math.random because that is how seedrandom.js has worked since v1.0.\r\n if (is_math_call) { math[rngname] = prng; return seed; }\r\n\r\n // Otherwise, it is a newer calling convention, so return the\r\n // prng directly.\r\n else return prng;\r\n })(\r\n prng,\r\n shortseed,\r\n 'global' in options ? options.global : (this == math),\r\n options.state);\r\n }\r\n math['seed' + rngname] = seedrandom;\r\n\r\n//\r\n// ARC4\r\n//\r\n// An ARC4 implementation. The constructor takes a key in the form of\r\n// an array of at most (width) integers that should be 0 <= x < (width).\r\n//\r\n// The g(count) method returns a pseudorandom integer that concatenates\r\n// the next (count) outputs from ARC4. Its return value is a number x\r\n// that is in the range 0 <= x < (width ^ count).\r\n//\r\n function ARC4(key) {\r\n var t, keylen = key.length,\r\n me = this, i = 0, j = me.i = me.j = 0, s = me.S = [];\r\n\r\n // The empty key [] is treated as [0].\r\n if (!keylen) { key = [keylen++]; }\r\n\r\n // Set up S using the standard key scheduling algorithm.\r\n while (i < width) {\r\n s[i] = i++;\r\n }\r\n for (i = 0; i < width; i++) {\r\n s[i] = s[j = mask & (j + key[i % keylen] + (t = s[i]))];\r\n s[j] = t;\r\n }\r\n\r\n // The \"g\" method returns the next (count) outputs as one number.\r\n (me.g = function(count) {\r\n // Using instance members instead of closure state nearly doubles speed.\r\n var t, r = 0,\r\n i = me.i, j = me.j, s = me.S;\r\n while (count--) {\r\n t = s[i = mask & (i + 1)];\r\n r = r * width + s[mask & ((s[i] = s[j = mask & (j + t)]) + (s[j] = t))];\r\n }\r\n me.i = i; me.j = j;\r\n return r;\r\n // For robust unpredictability, the function call below automatically\r\n // discards an initial batch of values. This is called RC4-drop[256].\r\n // See http://google.com/search?q=rsa+fluhrer+response&btnI\r\n })(width);\r\n }\r\n\r\n//\r\n// copy()\r\n// Copies internal state of ARC4 to or from a plain object.\r\n//\r\n function copy(f, t) {\r\n t.i = f.i;\r\n t.j = f.j;\r\n t.S = f.S.slice();\r\n return t;\r\n };\r\n\r\n//\r\n// flatten()\r\n// Converts an object tree to nested arrays of strings.\r\n//\r\n function flatten(obj, depth) {\r\n var result = [], typ = (typeof obj), prop;\r\n if (depth && typ == 'object') {\r\n for (prop in obj) {\r\n try { result.push(flatten(obj[prop], depth - 1)); } catch (e) {}\r\n }\r\n }\r\n return (result.length ? result : typ == 'string' ? obj : obj + '\\0');\r\n }\r\n\r\n//\r\n// mixkey()\r\n// Mixes a string seed into a key that is an array of integers, and\r\n// returns a shortened string seed that is equivalent to the result key.\r\n//\r\n function mixkey(seed, key) {\r\n var stringseed = seed + '', smear, j = 0;\r\n while (j < stringseed.length) {\r\n key[mask & j] =\r\n mask & ((smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++));\r\n }\r\n return tostring(key);\r\n }\r\n\r\n//\r\n// autoseed()\r\n// Returns an object for autoseeding, using window.crypto and Node crypto\r\n// module if available.\r\n//\r\n function autoseed() {\r\n try {\r\n if (nodecrypto) { return tostring(nodecrypto.randomBytes(width)); }\r\n var out = new Uint8Array(width);\r\n (global.crypto || global.msCrypto).getRandomValues(out);\r\n return tostring(out);\r\n } catch (e) {\r\n var browser = global.navigator,\r\n plugins = browser && browser.plugins;\r\n return [+new Date, global, plugins, global.screen, tostring(pool)];\r\n }\r\n }\r\n\r\n//\r\n// tostring()\r\n// Converts an array of charcodes to a string\r\n//\r\n function tostring(a) {\r\n return String.fromCharCode.apply(0, a);\r\n }\r\n\r\n//\r\n// When seedrandom.js is loaded, we immediately mix a few bits\r\n// from the built-in RNG into the entropy pool. Because we do\r\n// not want to interfere with deterministic PRNG state later,\r\n// seedrandom will not call math.random on its own again after\r\n// initialization.\r\n//\r\n mixkey(math.random(), pool);\r\n\r\n//\r\n// Nodejs and AMD support: export the implementation as a module using\r\n// either convention.\r\n//\r\n\r\n// End anonymous scope, and pass initial values.\r\n})(\r\n [], // pool: entropy pool starts empty\r\n BMMath // math: package containing random, pow, and seedrandom\r\n);\nvar BezierFactory = (function(){\r\n /**\r\n * BezierEasing - use bezier curve for transition easing function\r\n * by Gaëtan Renaudeau 2014 - 2015 – MIT License\r\n *\r\n * Credits: is based on Firefox's nsSMILKeySpline.cpp\r\n * Usage:\r\n * var spline = BezierEasing([ 0.25, 0.1, 0.25, 1.0 ])\r\n * spline.get(x) => returns the easing value | x must be in [0, 1] range\r\n *\r\n */\r\n\r\n var ob = {};\r\n ob.getBezierEasing = getBezierEasing;\r\n var beziers = {};\r\n\r\n function getBezierEasing(a,b,c,d,nm){\r\n var str = nm || ('bez_' + a+'_'+b+'_'+c+'_'+d).replace(/\\./g, 'p');\r\n if(beziers[str]){\r\n return beziers[str];\r\n }\r\n var bezEasing = new BezierEasing([a,b,c,d]);\r\n beziers[str] = bezEasing;\r\n return bezEasing;\r\n }\r\n\r\n// These values are established by empiricism with tests (tradeoff: performance VS precision)\r\n var NEWTON_ITERATIONS = 4;\r\n var NEWTON_MIN_SLOPE = 0.001;\r\n var SUBDIVISION_PRECISION = 0.0000001;\r\n var SUBDIVISION_MAX_ITERATIONS = 10;\r\n\r\n var kSplineTableSize = 11;\r\n var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\r\n\r\n var float32ArraySupported = typeof Float32Array === \"function\";\r\n\r\n function A (aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1; }\r\n function B (aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1; }\r\n function C (aA1) { return 3.0 * aA1; }\r\n\r\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\r\n function calcBezier (aT, aA1, aA2) {\r\n return ((A(aA1, aA2)*aT + B(aA1, aA2))*aT + C(aA1))*aT;\r\n }\r\n\r\n// Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\r\n function getSlope (aT, aA1, aA2) {\r\n return 3.0 * A(aA1, aA2)*aT*aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\r\n }\r\n\r\n function binarySubdivide (aX, aA, aB, mX1, mX2) {\r\n var currentX, currentT, i = 0;\r\n do {\r\n currentT = aA + (aB - aA) / 2.0;\r\n currentX = calcBezier(currentT, mX1, mX2) - aX;\r\n if (currentX > 0.0) {\r\n aB = currentT;\r\n } else {\r\n aA = currentT;\r\n }\r\n } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\r\n return currentT;\r\n }\r\n\r\n function newtonRaphsonIterate (aX, aGuessT, mX1, mX2) {\r\n for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\r\n var currentSlope = getSlope(aGuessT, mX1, mX2);\r\n if (currentSlope === 0.0) return aGuessT;\r\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\r\n aGuessT -= currentX / currentSlope;\r\n }\r\n return aGuessT;\r\n }\r\n\r\n /**\r\n * points is an array of [ mX1, mY1, mX2, mY2 ]\r\n */\r\n function BezierEasing (points) {\r\n this._p = points;\r\n this._mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\r\n this._precomputed = false;\r\n\r\n this.get = this.get.bind(this);\r\n }\r\n\r\n BezierEasing.prototype = {\r\n\r\n get: function (x) {\r\n var mX1 = this._p[0],\r\n mY1 = this._p[1],\r\n mX2 = this._p[2],\r\n mY2 = this._p[3];\r\n if (!this._precomputed) this._precompute();\r\n if (mX1 === mY1 && mX2 === mY2) return x; // linear\r\n // Because JavaScript number are imprecise, we should guarantee the extremes are right.\r\n if (x === 0) return 0;\r\n if (x === 1) return 1;\r\n return calcBezier(this._getTForX(x), mY1, mY2);\r\n },\r\n\r\n // Private part\r\n\r\n _precompute: function () {\r\n var mX1 = this._p[0],\r\n mY1 = this._p[1],\r\n mX2 = this._p[2],\r\n mY2 = this._p[3];\r\n this._precomputed = true;\r\n if (mX1 !== mY1 || mX2 !== mY2)\r\n this._calcSampleValues();\r\n },\r\n\r\n _calcSampleValues: function () {\r\n var mX1 = this._p[0],\r\n mX2 = this._p[2];\r\n for (var i = 0; i < kSplineTableSize; ++i) {\r\n this._mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\r\n }\r\n },\r\n\r\n /**\r\n * getTForX chose the fastest heuristic to determine the percentage value precisely from a given X projection.\r\n */\r\n _getTForX: function (aX) {\r\n var mX1 = this._p[0],\r\n mX2 = this._p[2],\r\n mSampleValues = this._mSampleValues;\r\n\r\n var intervalStart = 0.0;\r\n var currentSample = 1;\r\n var lastSample = kSplineTableSize - 1;\r\n\r\n for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {\r\n intervalStart += kSampleStepSize;\r\n }\r\n --currentSample;\r\n\r\n // Interpolate to provide an initial guess for t\r\n var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample+1] - mSampleValues[currentSample]);\r\n var guessForT = intervalStart + dist * kSampleStepSize;\r\n\r\n var initialSlope = getSlope(guessForT, mX1, mX2);\r\n if (initialSlope >= NEWTON_MIN_SLOPE) {\r\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\r\n } else if (initialSlope === 0.0) {\r\n return guessForT;\r\n } else {\r\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\r\n }\r\n }\r\n };\r\n\r\n return ob;\r\n\r\n}());\n(function () {\r\n var lastTime = 0;\r\n var vendors = ['ms', 'moz', 'webkit', 'o'];\r\n for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {\r\n window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];\r\n window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];\r\n }\r\n if(!window.requestAnimationFrame)\r\n window.requestAnimationFrame = function (callback, element) {\r\n var currTime = new Date().getTime();\r\n var timeToCall = Math.max(0, 16 - (currTime - lastTime));\r\n var id = setTimeout(function () {\r\n callback(currTime + timeToCall);\r\n },\r\n timeToCall);\r\n lastTime = currTime + timeToCall;\r\n return id;\r\n };\r\n if(!window.cancelAnimationFrame)\r\n window.cancelAnimationFrame = function (id) {\r\n clearTimeout(id);\r\n };\r\n}());\r\n\nfunction createElement(parent,child,params){\r\n if(child){\r\n child.prototype = Object.create(parent.prototype);\r\n child.prototype.constructor = child;\r\n child.prototype._parent = parent.prototype;\r\n }else{\r\n var instance = Object.create(parent.prototype,params);\r\n var getType = {};\r\n if(instance && getType.toString.call(instance.init) === '[object Function]'){\r\n instance.init();\r\n }\r\n return instance;\r\n }\r\n}\r\n\r\nfunction extendPrototype(source,destination){\r\n for (var attr in source.prototype) {\r\n if (source.prototype.hasOwnProperty(attr)) destination.prototype[attr] = source.prototype[attr];\r\n }\r\n}\nfunction bezFunction(){\r\n\r\n var easingFunctions = [];\r\n var math = Math;\r\n\r\n function pointOnLine2D(x1,y1, x2,y2, x3,y3){\r\n var det1 = (x1*y2) + (y1*x3) + (x2*y3) - (x3*y2) - (y3*x1) - (x2*y1);\r\n return det1 > -0.0001 && det1 < 0.0001;\r\n }\r\n\r\n function pointOnLine3D(x1,y1,z1, x2,y2,z2, x3,y3,z3){\r\n if(z1 === 0 && z2 === 0 && z3 === 0) {\r\n return pointOnLine2D(x1,y1, x2,y2, x3,y3);\r\n }\r\n var dist1 = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2) + Math.pow(z2 - z1, 2));\r\n var dist2 = Math.sqrt(Math.pow(x3 - x1, 2) + Math.pow(y3 - y1, 2) + Math.pow(z3 - z1, 2));\r\n var dist3 = Math.sqrt(Math.pow(x3 - x2, 2) + Math.pow(y3 - y2, 2) + Math.pow(z3 - z2, 2));\r\n var diffDist;\r\n if(dist1 > dist2){\r\n if(dist1 > dist3){\r\n diffDist = dist1 - dist2 - dist3;\r\n } else {\r\n diffDist = dist3 - dist2 - dist1;\r\n }\r\n } else if(dist3 > dist2){\r\n diffDist = dist3 - dist2 - dist1;\r\n } else {\r\n diffDist = dist2 - dist1 - dist3;\r\n }\r\n return diffDist > -0.0001 && diffDist < 0.0001;\r\n }\r\n\r\n /*function getEasingCurve(aa,bb,cc,dd,encodedFuncName) {\r\n if(!encodedFuncName){\r\n encodedFuncName = ('bez_' + aa+'_'+bb+'_'+cc+'_'+dd).replace(/\\./g, 'p');\r\n }\r\n if(easingFunctions[encodedFuncName]){\r\n return easingFunctions[encodedFuncName];\r\n }\r\n var A0, B0, C0;\r\n var A1, B1, C1;\r\n easingFunctions[encodedFuncName] = function(tt) {\r\n var x = tt;\r\n var i = 0, z;\r\n while (++i < 20) {\r\n C0 = 3 * aa;\r\n B0 = 3 * (cc - aa) - C0;\r\n A0 = 1 - C0 - B0;\r\n z = (x * (C0 + x * (B0 + x * A0))) - tt;\r\n if (bm_abs(z) < 1e-3) break;\r\n x -= z / (C0 + x * (2 * B0 + 3 * A0 * x));\r\n }\r\n C1 = 3 * bb;\r\n B1 = 3 * (dd - bb) - C1;\r\n A1 = 1 - C1 - B1;\r\n var polyB = x * (C1 + x * (B1 + x * A1));\r\n //return c * polyB + b;\r\n return polyB;\r\n };\r\n return easingFunctions[encodedFuncName];\r\n }*/\r\n var getBezierLength = (function(){\r\n\r\n function Segment(l,p){\r\n this.l = l;\r\n this.p = p;\r\n }\r\n\r\n return function(pt1,pt2,pt3,pt4){\r\n var curveSegments = defaultCurveSegments;\r\n var k;\r\n var i, len;\r\n var ptCoord,perc,addedLength = 0;\r\n var ptDistance;\r\n var point = [],lastPoint = [];\r\n var lengthData = {\r\n addedLength: 0,\r\n segments: []\r\n };\r\n len = pt3.length;\r\n for(k=0;k<curveSegments;k+=1){\r\n perc = k/(curveSegments-1);\r\n ptDistance = 0;\r\n for(i=0;i<len;i+=1){\r\n ptCoord = bm_pow(1-perc,3)*pt1[i]+3*bm_pow(1-perc,2)*perc*pt3[i]+3*(1-perc)*bm_pow(perc,2)*pt4[i]+bm_pow(perc,3)*pt2[i];\r\n point[i] = ptCoord;\r\n if(lastPoint[i] !== null){\r\n ptDistance += bm_pow(point[i] - lastPoint[i],2);\r\n }\r\n lastPoint[i] = point[i];\r\n }\r\n if(ptDistance){\r\n ptDistance = bm_sqrt(ptDistance);\r\n addedLength += ptDistance;\r\n }\r\n lengthData.segments.push(new Segment(addedLength,perc));\r\n }\r\n lengthData.addedLength = addedLength;\r\n return lengthData;\r\n };\r\n }());\r\n\r\n function getSegmentsLength(shapeData) {\r\n var closed = shapeData.c;\r\n var pathV = shapeData.v;\r\n var pathO = shapeData.o;\r\n var pathI = shapeData.i;\r\n var i, len = shapeData._length;\r\n var lengths = [];\r\n var totalLength = 0;\r\n for(i=0;i<len-1;i+=1){\r\n lengths[i] = getBezierLength(pathV[i],pathV[i+1],pathO[i],pathI[i+1]);\r\n totalLength += lengths[i].addedLength;\r\n }\r\n if(closed){\r\n lengths[i] = getBezierLength(pathV[i],pathV[0],pathO[i],pathI[0]);\r\n totalLength += lengths[i].addedLength;\r\n }\r\n return {lengths:lengths,totalLength:totalLength};\r\n }\r\n\r\n function BezierData(length){\r\n this.segmentLength = 0;\r\n this.points = new Array(length);\r\n }\r\n\r\n function PointData(partial,point){\r\n this.partialLength = partial;\r\n this.point = point;\r\n }\r\n\r\n var buildBezierData = (function(){\r\n\r\n var storedData = {};\r\n\r\n return function (keyData){\r\n var pt1 = keyData.s;\r\n var pt2 = keyData.e;\r\n var pt3 = keyData.to;\r\n var pt4 = keyData.ti;\r\n var bezierName = (pt1.join('_')+'_'+pt2.join('_')+'_'+pt3.join('_')+'_'+pt4.join('_')).replace(/\\./g, 'p');\r\n if(storedData[bezierName]){\r\n keyData.bezierData = storedData[bezierName];\r\n return;\r\n }\r\n var curveSegments = defaultCurveSegments;\r\n var k, i, len;\r\n var ptCoord,perc,addedLength = 0;\r\n var ptDistance;\r\n var point,lastPoint = null;\r\n if(pt1.length === 2 && (pt1[0] != pt2[0] || pt1[1] != pt2[1]) && pointOnLine2D(pt1[0],pt1[1],pt2[0],pt2[1],pt1[0]+pt3[0],pt1[1]+pt3[1]) && pointOnLine2D(pt1[0],pt1[1],pt2[0],pt2[1],pt2[0]+pt4[0],pt2[1]+pt4[1])){\r\n curveSegments = 2;\r\n }\r\n var bezierData = new BezierData(curveSegments);\r\n len = pt3.length;\r\n for(k=0;k<curveSegments;k+=1){\r\n point = new Array(len);\r\n perc = k/(curveSegments-1);\r\n ptDistance = 0;\r\n for(i=0;i<len;i+=1){\r\n ptCoord = bm_pow(1-perc,3)*pt1[i]+3*bm_pow(1-perc,2)*perc*(pt1[i] + pt3[i])+3*(1-perc)*bm_pow(perc,2)*(pt2[i] + pt4[i])+bm_pow(perc,3)*pt2[i];\r\n point[i] = ptCoord;\r\n if(lastPoint !== null){\r\n ptDistance += bm_pow(point[i] - lastPoint[i],2);\r\n }\r\n }\r\n ptDistance = bm_sqrt(ptDistance);\r\n addedLength += ptDistance;\r\n bezierData.points[k] = new PointData(ptDistance,point);\r\n lastPoint = point;\r\n }\r\n bezierData.segmentLength = addedLength;\r\n keyData.bezierData = bezierData;\r\n storedData[bezierName] = bezierData;\r\n\r\n }\r\n }());\r\n\r\n function getDistancePerc(perc,bezierData){\r\n var segments = bezierData.segments;\r\n var len = segments.length;\r\n var initPos = bm_floor((len-1)*perc);\r\n var lengthPos = perc*bezierData.addedLength;\r\n var lPerc = 0;\r\n if(lengthPos == segments[initPos].l){\r\n return segments[initPos].p;\r\n }else{\r\n var dir = segments[initPos].l > lengthPos ? -1 : 1;\r\n var flag = true;\r\n while(flag){\r\n if(segments[initPos].l <= lengthPos && segments[initPos+1].l > lengthPos){\r\n lPerc = (lengthPos - segments[initPos].l)/(segments[initPos+1].l-segments[initPos].l);\r\n flag = false;\r\n }else{\r\n initPos += dir;\r\n }\r\n if(initPos < 0 || initPos >= len - 1){\r\n flag = false;\r\n }\r\n }\r\n return segments[initPos].p + (segments[initPos+1].p - segments[initPos].p)*lPerc;\r\n }\r\n }\r\n\r\n function SegmentPoints(){\r\n this.pt1 = new Array(2);\r\n this.pt2 = new Array(2);\r\n this.pt3 = new Array(2);\r\n this.pt4 = new Array(2);\r\n }\r\n\r\n function getPointInSegment(pt1, pt2, pt3, pt4, percent, bezierData) {\r\n var t1 = getDistancePerc(percent,bezierData);\r\n var u0 = 1;\r\n var u1 = 1 - t1;\r\n var ptX = Math.round((u1*u1*u1* pt1[0] + (t1*u1*u1 + u1*t1*u1 + u1*u1*t1)* pt3[0] + (t1*t1*u1 + u1*t1*t1 + t1*u1*t1)*pt4[0] + t1*t1*t1* pt2[0])* 1000) / 1000;\r\n var ptY = Math.round((u1*u1*u1* pt1[1] + (t1*u1*u1 + u1*t1*u1 + u1*u1*t1)* pt3[1] + (t1*t1*u1 + u1*t1*t1 + t1*u1*t1)*pt4[1] + t1*t1*t1* pt2[1])* 1000) / 1000;\r\n return [ptX, ptY];\r\n }\r\n\r\n function getNewSegment(pt1,pt2,pt3,pt4,startPerc,endPerc, bezierData){\r\n\r\n var pts = new SegmentPoints();\r\n startPerc = startPerc < 0 ? 0 : startPerc > 1 ? 1 : startPerc;\r\n var t0 = getDistancePerc(startPerc,bezierData);\r\n endPerc = endPerc > 1 ? 1 : endPerc;\r\n var t1 = getDistancePerc(endPerc,bezierData);\r\n var i, len = pt1.length;\r\n var u0 = 1 - t0;\r\n var u1 = 1 - t1;\r\n //Math.round(num * 100) / 100\r\n for(i=0;i<len;i+=1){\r\n pts.pt1[i] = Math.round((u0*u0*u0* pt1[i] + (t0*u0*u0 + u0*t0*u0 + u0*u0*t0) * pt3[i] + (t0*t0*u0 + u0*t0*t0 + t0*u0*t0)* pt4[i] + t0*t0*t0* pt2[i])* 1000) / 1000;\r\n pts.pt3[i] = Math.round((u0*u0*u1*pt1[i] + (t0*u0*u1 + u0*t0*u1 + u0*u0*t1)* pt3[i] + (t0*t0*u1 + u0*t0*t1 + t0*u0*t1)* pt4[i] + t0*t0*t1* pt2[i])* 1000) / 1000;\r\n pts.pt4[i] = Math.round((u0*u1*u1* pt1[i] + (t0*u1*u1 + u0*t1*u1 + u0*u1*t1)* pt3[i] + (t0*t1*u1 + u0*t1*t1 + t0*u1*t1)* pt4[i] + t0*t1*t1* pt2[i])* 1000) / 1000;\r\n pts.pt2[i] = Math.round((u1*u1*u1* pt1[i] + (t1*u1*u1 + u1*t1*u1 + u1*u1*t1)* pt3[i] + (t1*t1*u1 + u1*t1*t1 + t1*u1*t1)*pt4[i] + t1*t1*t1* pt2[i])* 1000) / 1000;\r\n }\r\n return pts;\r\n }\r\n\r\n return {\r\n //getEasingCurve : getEasingCurve,\r\n getBezierLength : getBezierLength,\r\n getSegmentsLength : getSegmentsLength,\r\n getNewSegment : getNewSegment,\r\n getPointInSegment : getPointInSegment,\r\n buildBezierData : buildBezierData,\r\n pointOnLine2D : pointOnLine2D,\r\n pointOnLine3D : pointOnLine3D\r\n };\r\n}\r\n\r\nvar bez = bezFunction();\nfunction dataFunctionManager(){\r\n\r\n //var tCanvasHelper = document.createElement('canvas').getContext('2d');\r\n\r\n function completeLayers(layers, comps, fontManager){\r\n var layerData;\r\n var animArray, lastFrame;\r\n var i, len = layers.length;\r\n var j, jLen, k, kLen;\r\n for(i=0;i<len;i+=1){\r\n layerData = layers[i];\r\n if(!('ks' in layerData) || layerData.completed){\r\n continue;\r\n }\r\n layerData.completed = true;\r\n if(layerData.tt){\r\n layers[i-1].td = layerData.tt;\r\n }\r\n animArray = [];\r\n lastFrame = -1;\r\n if(layerData.hasMask){\r\n var maskProps = layerData.masksProperties;\r\n jLen = maskProps.length;\r\n for(j=0;j<jLen;j+=1){\r\n if(maskProps[j].pt.k.i){\r\n convertPathsToAbsoluteValues(maskProps[j].pt.k);\r\n }else{\r\n kLen = maskProps[j].pt.k.length;\r\n for(k=0;k<kLen;k+=1){\r\n if(maskProps[j].pt.k[k].s){\r\n convertPathsToAbsoluteValues(maskProps[j].pt.k[k].s[0]);\r\n }\r\n if(maskProps[j].pt.k[k].e){\r\n convertPathsToAbsoluteValues(maskProps[j].pt.k[k].e[0]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if(layerData.ty===0){\r\n layerData.layers = findCompLayers(layerData.refId, comps);\r\n completeLayers(layerData.layers,comps, fontManager);\r\n }else if(layerData.ty === 4){\r\n completeShapes(layerData.shapes);\r\n }else if(layerData.ty == 5){\r\n completeText(layerData, fontManager);\r\n }\r\n }\r\n }\r\n\r\n function findCompLayers(id,comps){\r\n var i = 0, len = comps.length;\r\n while(i<len){\r\n if(comps[i].id === id){\r\n if(!comps[i].layers.__used) {\r\n comps[i].layers.__used = true;\r\n return comps[i].layers;\r\n }\r\n return JSON.parse(JSON.stringify(comps[i].layers));\r\n }\r\n i += 1;\r\n }\r\n }\r\n\r\n function completeShapes(arr){\r\n var i, len = arr.length;\r\n var j, jLen;\r\n var hasPaths = false;\r\n for(i=len-1;i>=0;i-=1){\r\n if(arr[i].ty == 'sh'){\r\n if(arr[i].ks.k.i){\r\n convertPathsToAbsoluteValues(arr[i].ks.k);\r\n }else{\r\n jLen = arr[i].ks.k.length;\r\n for(j=0;j<jLen;j+=1){\r\n if(arr[i].ks.k[j].s){\r\n convertPathsToAbsoluteValues(arr[i].ks.k[j].s[0]);\r\n }\r\n if(arr[i].ks.k[j].e){\r\n convertPathsToAbsoluteValues(arr[i].ks.k[j].e[0]);\r\n }\r\n }\r\n }\r\n hasPaths = true;\r\n }else if(arr[i].ty == 'gr'){\r\n completeShapes(arr[i].it);\r\n }\r\n }\r\n /*if(hasPaths){\r\n //mx: distance\r\n //ss: sensitivity\r\n //dc: decay\r\n arr.splice(arr.length-1,0,{\r\n \"ty\": \"ms\",\r\n \"mx\":20,\r\n \"ss\":10,\r\n \"dc\":0.001,\r\n \"maxDist\":200\r\n });\r\n }*/\r\n }\r\n\r\n function convertPathsToAbsoluteValues(path){\r\n var i, len = path.i.length;\r\n for(i=0;i<len;i+=1){\r\n path.i[i][0] += path.v[i][0];\r\n path.i[i][1] += path.v[i][1];\r\n path.o[i][0] += path.v[i][0];\r\n path.o[i][1] += path.v[i][1];\r\n }\r\n }\r\n\r\n function checkVersion(minimum,animVersionString){\r\n var animVersion = animVersionString ? animVersionString.split('.') : [100,100,100];\r\n if(minimum[0]>animVersion[0]){\r\n return true;\r\n } else if(animVersion[0] > minimum[0]){\r\n return false;\r\n }\r\n if(minimum[1]>animVersion[1]){\r\n return true;\r\n } else if(animVersion[1] > minimum[1]){\r\n return false;\r\n }\r\n if(minimum[2]>animVersion[2]){\r\n return true;\r\n } else if(animVersion[2] > minimum[2]){\r\n return false;\r\n }\r\n }\r\n\r\n var checkText = (function(){\r\n var minimumVersion = [4,4,14];\r\n\r\n function updateTextLayer(textLayer){\r\n var documentData = textLayer.t.d;\r\n textLayer.t.d = {\r\n k: [\r\n {\r\n s:documentData,\r\n t:0\r\n }\r\n ]\r\n }\r\n }\r\n\r\n function iterateLayers(layers){\r\n var i, len = layers.length;\r\n for(i=0;i<len;i+=1){\r\n if(layers[i].ty === 5){\r\n updateTextLayer(layers[i]);\r\n }\r\n }\r\n }\r\n\r\n return function (animationData){\r\n if(checkVersion(minimumVersion,animationData.v)){\r\n iterateLayers(animationData.layers);\r\n if(animationData.assets){\r\n var i, len = animationData.assets.length;\r\n for(i=0;i<len;i+=1){\r\n if(animationData.assets[i].layers){\r\n iterateLayers(animationData.assets[i].layers);\r\n\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }())\r\n\r\n var checkChars = (function() {\r\n var minimumVersion = [4,7,99];\r\n return function (animationData){\r\n if(animationData.chars && !checkVersion(minimumVersion,animationData.v)){\r\n var i, len = animationData.chars.length, j, jLen, k, kLen;\r\n var pathData, paths;\r\n for(i = 0; i < len; i += 1) {\r\n if(animationData.chars[i].data && animationData.chars[i].data.shapes) {\r\n paths = animationData.chars[i].data.shapes[0].it;\r\n jLen = paths.length;\r\n\r\n for(j = 0; j < jLen; j += 1) {\r\n pathData = paths[j].ks.k;\r\n if(!pathData.__converted) {\r\n convertPathsToAbsoluteValues(paths[j].ks.k);\r\n pathData.__converted = true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n }())\r\n\r\n var checkColors = (function(){\r\n var minimumVersion = [4,1,9];\r\n\r\n function iterateShapes(shapes){\r\n var i, len = shapes.length;\r\n var j, jLen;\r\n for(i=0;i<len;i+=1){\r\n if(shapes[i].ty === 'gr'){\r\n iterateShapes(shapes[i].it);\r\n }else if(shapes[i].ty === 'fl' || shapes[i].ty === 'st'){\r\n if(shapes[i].c.k && shapes[i].c.k[0].i){\r\n jLen = shapes[i].c.k.length;\r\n for(j=0;j<jLen;j+=1){\r\n if(shapes[i].c.k[j].s){\r\n shapes[i].c.k[j].s[0] /= 255;\r\n shapes[i].c.k[j].s[1] /= 255;\r\n shapes[i].c.k[j].s[2] /= 255;\r\n shapes[i].c.k[j].s[3] /= 255;\r\n }\r\n if(shapes[i].c.k[j].e){\r\n shapes[i].c.k[j].e[0] /= 255;\r\n shapes[i].c.k[j].e[1] /= 255;\r\n shapes[i].c.k[j].e[2] /= 255;\r\n shapes[i].c.k[j].e[3] /= 255;\r\n }\r\n }\r\n } else {\r\n shapes[i].c.k[0] /= 255;\r\n shapes[i].c.k[1] /= 255;\r\n shapes[i].c.k[2] /= 255;\r\n shapes[i].c.k[3] /= 255;\r\n }\r\n }\r\n }\r\n }\r\n\r\n function iterateLayers(layers){\r\n var i, len = layers.length;\r\n for(i=0;i<len;i+=1){\r\n if(layers[i].ty === 4){\r\n iterateShapes(layers[i].shapes);\r\n }\r\n }\r\n }\r\n\r\n return function (animationData){\r\n if(checkVersion(minimumVersion,animationData.v)){\r\n iterateLayers(animationData.layers);\r\n if(animationData.assets){\r\n var i, len = animationData.assets.length;\r\n for(i=0;i<len;i+=1){\r\n if(animationData.assets[i].layers){\r\n iterateLayers(animationData.assets[i].layers);\r\n\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }());\r\n\r\n var checkShapes = (function(){\r\n var minimumVersion = [4,4,18];\r\n\r\n\r\n\r\n function completeShapes(arr){\r\n var i, len = arr.length;\r\n var j, jLen;\r\n var hasPaths = false;\r\n for(i=len-1;i>=0;i-=1){\r\n if(arr[i].ty == 'sh'){\r\n if(arr[i].ks.k.i){\r\n arr[i].ks.k.c = arr[i].closed;\r\n }else{\r\n jLen = arr[i].ks.k.length;\r\n for(j=0;j<jLen;j+=1){\r\n if(arr[i].ks.k[j].s){\r\n arr[i].ks.k[j].s[0].c = arr[i].closed;\r\n }\r\n if(arr[i].ks.k[j].e){\r\n arr[i].ks.k[j].e[0].c = arr[i].closed;\r\n }\r\n }\r\n }\r\n hasPaths = true;\r\n }else if(arr[i].ty == 'gr'){\r\n completeShapes(arr[i].it);\r\n }\r\n }\r\n }\r\n\r\n function iterateLayers(layers){\r\n var layerData;\r\n var i, len = layers.length;\r\n var j, jLen, k, kLen;\r\n for(i=0;i<len;i+=1){\r\n layerData = layers[i];\r\n if(layerData.hasMask){\r\n var maskProps = layerData.masksProperties;\r\n jLen = maskProps.length;\r\n for(j=0;j<jLen;j+=1){\r\n if(maskProps[j].pt.k.i){\r\n maskProps[j].pt.k.c = maskProps[j].cl;\r\n }else{\r\n kLen = maskProps[j].pt.k.length;\r\n for(k=0;k<kLen;k+=1){\r\n if(maskProps[j].pt.k[k].s){\r\n maskProps[j].pt.k[k].s[0].c = maskProps[j].cl;\r\n }\r\n if(maskProps[j].pt.k[k].e){\r\n maskProps[j].pt.k[k].e[0].c = maskProps[j].cl;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if(layerData.ty === 4){\r\n completeShapes(layerData.shapes);\r\n }\r\n }\r\n }\r\n\r\n return function (animationData){\r\n if(checkVersion(minimumVersion,animationData.v)){\r\n iterateLayers(animationData.layers);\r\n if(animationData.assets){\r\n var i, len = animationData.assets.length;\r\n for(i=0;i<len;i+=1){\r\n if(animationData.assets[i].layers){\r\n iterateLayers(animationData.assets[i].layers);\r\n\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }());\r\n\r\n /*function blitPaths(path){\r\n var i, len = path.i.length;\r\n for(i=0;i<len;i+=1){\r\n path.i[i][0] /= blitter;\r\n path.i[i][1] /= blitter;\r\n path.o[i][0] /= blitter;\r\n path.o[i][1] /= blitter;\r\n path.v[i][0] /= blitter;\r\n path.v[i][1] /= blitter;\r\n }\r\n }\r\n\r\n function blitShapes(arr){\r\n var i, len = arr.length;\r\n var j, jLen;\r\n var hasPaths = false;\r\n for(i=len-1;i>=0;i-=1){\r\n if(arr[i].ty == 'sh'){\r\n if(arr[i].ks.k.i){\r\n blitPaths(arr[i].ks.k);\r\n }else{\r\n jLen = arr[i].ks.k.length;\r\n for(j=0;j<jLen;j+=1){\r\n if(arr[i].ks.k[j].s){\r\n blitPaths(arr[i].ks.k[j].s[0]);\r\n }\r\n if(arr[i].ks.k[j].e){\r\n blitPaths(arr[i].ks.k[j].e[0]);\r\n }\r\n }\r\n }\r\n hasPaths = true;\r\n }else if(arr[i].ty == 'gr'){\r\n blitShapes(arr[i].it);\r\n }else if(arr[i].ty == 'rc'){\r\n blitProperty(arr[i].p);\r\n blitProperty(arr[i].s);\r\n }else if(arr[i].ty == 'st'){\r\n blitProperty(arr[i].w);\r\n }else if(arr[i].ty == 'tr'){\r\n blitProperty(arr[i].p);\r\n blitProperty(arr[i].sk);\r\n blitProperty(arr[i].a);\r\n }else if(arr[i].ty == 'el'){\r\n blitProperty(arr[i].p);\r\n blitProperty(arr[i].s);\r\n }else if(arr[i].ty == 'rd'){\r\n blitProperty(arr[i].r);\r\n }else{\r\n\r\n //console.log(arr[i].ty );\r\n }\r\n }\r\n }\r\n\r\n function blitText(data, fontManager){\r\n\r\n }\r\n\r\n function blitValue(val){\r\n if(typeof(val) === 'number'){\r\n val /= blitter;\r\n } else {\r\n var i = val.length-1;\r\n while(i>=0){\r\n val[i] /= blitter;\r\n i-=1;\r\n }\r\n }\r\n return val;\r\n }\r\n\r\n function blitProperty(data){\r\n if(!data.k.length){\r\n data.k = blitValue(data.k);\r\n }else if(typeof(data.k[0]) === 'number'){\r\n data.k = blitValue(data.k);\r\n } else {\r\n var i, len = data.k.length;\r\n for(i=0;i<len;i+=1){\r\n if(data.k[i].s){\r\n //console.log('pre S: ', data.k[i].s);\r\n data.k[i].s = blitValue(data.k[i].s);\r\n //console.log('post S: ', data.k[i].s);\r\n }\r\n if(data.k[i].e){\r\n //console.log('pre E: ', data.k[i].e);\r\n data.k[i].e = blitValue(data.k[i].e);\r\n //console.log('post E: ', data.k[i].e);\r\n }\r\n }\r\n }\r\n }\r\n\r\n function blitLayers(layers,comps, fontManager){\r\n var layerData;\r\n var animArray, lastFrame;\r\n var i, len = layers.length;\r\n var j, jLen, k, kLen;\r\n for(i=0;i<len;i+=1){\r\n layerData = layers[i];\r\n if(!('ks' in layerData)){\r\n continue;\r\n }\r\n blitProperty(layerData.ks.a);\r\n blitProperty(layerData.ks.p);\r\n layerData.completed = true;\r\n if(layerData.tt){\r\n layers[i-1].td = layerData.tt;\r\n }\r\n animArray = [];\r\n lastFrame = -1;\r\n if(layerData.hasMask){\r\n var maskProps = layerData.masksProperties;\r\n jLen = maskProps.length;\r\n for(j=0;j<jLen;j+=1){\r\n if(maskProps[j].pt.k.i){\r\n blitPaths(maskProps[j].pt.k);\r\n }else{\r\n kLen = maskProps[j].pt.k.length;\r\n for(k=0;k<kLen;k+=1){\r\n if(maskProps[j].pt.k[k].s){\r\n blitPaths(maskProps[j].pt.k[k].s[0]);\r\n }\r\n if(maskProps[j].pt.k[k].e){\r\n blitPaths(maskProps[j].pt.k[k].e[0]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if(layerData.ty===0){\r\n layerData.w = Math.round(layerData.w/blitter);\r\n layerData.h = Math.round(layerData.h/blitter);\r\n blitLayers(layerData.layers,comps, fontManager);\r\n }else if(layerData.ty === 4){\r\n blitShapes(layerData.shapes);\r\n }else if(layerData.ty == 5){\r\n blitText(layerData, fontManager);\r\n }else if(layerData.ty == 1){\r\n layerData.sh /= blitter;\r\n layerData.sw /= blitter;\r\n } else {\r\n }\r\n }\r\n }\r\n\r\n function blitAnimation(animationData,comps, fontManager){\r\n blitLayers(animationData.layers,comps, fontManager);\r\n }*/\r\n\r\n function completeData(animationData, fontManager){\r\n if(animationData.__complete){\r\n return;\r\n }\r\n checkColors(animationData);\r\n checkText(animationData);\r\n checkChars(animationData);\r\n checkShapes(animationData);\r\n completeLayers(animationData.layers, animationData.assets, fontManager);\r\n animationData.__complete = true;\r\n //blitAnimation(animationData, animationData.assets, fontManager);\r\n }\r\n\r\n function completeText(data, fontManager){\r\n if(data.t.a.length === 0 && !('m' in data.t.p)){\r\n data.singleShape = true;\r\n }\r\n }\r\n\r\n var moduleOb = {};\r\n moduleOb.completeData = completeData;\r\n\r\n return moduleOb;\r\n}\r\n\r\nvar dataManager = dataFunctionManager();\nvar FontManager = (function(){\r\n\r\n var maxWaitingTime = 5000;\r\n\r\n function setUpNode(font, family){\r\n var parentNode = document.createElement('span');\r\n parentNode.style.fontFamily = family;\r\n var node = document.createElement('span');\r\n // Characters that vary significantly among different fonts\r\n node.innerHTML = 'giItT1WQy@!-/#';\r\n // Visible - so we can measure it - but not on the screen\r\n parentNode.style.position = 'absolute';\r\n parentNode.style.left = '-10000px';\r\n parentNode.style.top = '-10000px';\r\n // Large font size makes even subtle changes obvious\r\n parentNode.style.fontSize = '300px';\r\n // Reset any font properties\r\n parentNode.style.fontVariant = 'normal';\r\n parentNode.style.fontStyle = 'normal';\r\n parentNode.style.fontWeight = 'normal';\r\n parentNode.style.letterSpacing = '0';\r\n parentNode.appendChild(node);\r\n document.body.appendChild(parentNode);\r\n\r\n // Remember width with no applied web font\r\n var width = node.offsetWidth;\r\n node.style.fontFamily = font + ', '+family;\r\n return {node:node, w:width, parent:parentNode};\r\n }\r\n\r\n function checkLoadedFonts() {\r\n var i, len = this.fonts.length;\r\n var node, w;\r\n var loadedCount = len;\r\n for(i=0;i<len; i+= 1){\r\n if(this.fonts[i].loaded){\r\n loadedCount -= 1;\r\n continue;\r\n }\r\n if(this.fonts[i].fOrigin === 't' || this.fonts[i].origin === 2){\r\n if(window.Typekit && window.Typekit.load && this.typekitLoaded === 0){\r\n this.typekitLoaded = 1;\r\n try{window.Typekit.load({\r\n async: true,\r\n active: function() {\r\n this.typekitLoaded = 2;\r\n }.bind(this)\r\n });}catch(e){}\r\n }\r\n if(this.typekitLoaded === 2) {\r\n this.fonts[i].loaded = true;\r\n }\r\n } else if(this.fonts[i].fOrigin === 'n' || this.fonts[i].origin === 0){\r\n this.fonts[i].loaded = true;\r\n } else{\r\n node = this.fonts[i].monoCase.node;\r\n w = this.fonts[i].monoCase.w;\r\n if(node.offsetWidth !== w){\r\n loadedCount -= 1;\r\n this.fonts[i].loaded = true;\r\n }else{\r\n node = this.fonts[i].sansCase.node;\r\n w = this.fonts[i].sansCase.w;\r\n if(node.offsetWidth !== w){\r\n loadedCount -= 1;\r\n this.fonts[i].loaded = true;\r\n }\r\n }\r\n if(this.fonts[i].loaded){\r\n this.fonts[i].sansCase.parent.parentNode.removeChild(this.fonts[i].sansCase.parent);\r\n this.fonts[i].monoCase.parent.parentNode.removeChild(this.fonts[i].monoCase.parent);\r\n }\r\n }\r\n }\r\n\r\n if(loadedCount !== 0 && Date.now() - this.initTime < maxWaitingTime){\r\n setTimeout(checkLoadedFonts.bind(this),20);\r\n }else{\r\n setTimeout(function(){this.loaded = true;}.bind(this),0);\r\n\r\n }\r\n };\r\n\r\n function createHelper(def, fontData){\r\n var tHelper = document.createElementNS(svgNS,'text');\r\n tHelper.style.fontSize = '100px';\r\n tHelper.style.fontFamily = fontData.fFamily;\r\n tHelper.textContent = '1';\r\n if(fontData.fClass){\r\n tHelper.style.fontFamily = 'inherit';\r\n tHelper.className = fontData.fClass;\r\n } else {\r\n tHelper.style.fontFamily = fontData.fFamily;\r\n }\r\n def.appendChild(tHelper);\r\n var tCanvasHelper = document.createElement('canvas').getContext('2d');\r\n tCanvasHelper.font = '100px '+ fontData.fFamily;\r\n return tCanvasHelper;\r\n }\r\n\r\n function addFonts(fontData, defs){\r\n if(!fontData){\r\n this.loaded = true;\r\n return;\r\n }\r\n if(this.chars){\r\n this.loaded = true;\r\n this.fonts = fontData.list;\r\n return;\r\n }\r\n\r\n var fontArr = fontData.list;\r\n var i, len = fontArr.length;\r\n for(i=0; i<len; i+= 1){\r\n fontArr[i].loaded = false;\r\n fontArr[i].monoCase = setUpNode(fontArr[i].fFamily,'monospace');\r\n fontArr[i].sansCase = setUpNode(fontArr[i].fFamily,'sans-serif');\r\n if(!fontArr[i].fPath) {\r\n fontArr[i].loaded = true;\r\n }else if(fontArr[i].fOrigin === 'p' || fontArr[i].origin === 3){\r\n var s = document.createElement('style');\r\n s.type = \"text/css\";\r\n s.innerHTML = \"@font-face {\" + \"font-family: \"+fontArr[i].fFamily+\"; font-style: normal; src: url('\"+fontArr[i].fPath+\"');}\";\r\n defs.appendChild(s);\r\n } else if(fontArr[i].fOrigin === 'g' || fontArr[i].origin === 1){\r\n //<link href='https://fonts.googleapis.com/css?family=Montserrat' rel='stylesheet' type='text/css'>\r\n var l = document.createElement('link');\r\n l.type = \"text/css\";\r\n l.rel = \"stylesheet\";\r\n l.href = fontArr[i].fPath;\r\n defs.appendChild(l);\r\n } else if(fontArr[i].fOrigin === 't' || fontArr[i].origin === 2){\r\n //<link href='https://fonts.googleapis.com/css?family=Montserrat' rel='stylesheet' type='text/css'>\r\n var sc = document.createElement('script');\r\n sc.setAttribute('src',fontArr[i].fPath);\r\n defs.appendChild(sc);\r\n }\r\n fontArr[i].helper = createHelper(defs,fontArr[i]);\r\n this.fonts.push(fontArr[i]);\r\n }\r\n checkLoadedFonts.bind(this)();\r\n }\r\n\r\n function addChars(chars){\r\n if(!chars){\r\n return;\r\n }\r\n if(!this.chars){\r\n this.chars = [];\r\n }\r\n var i, len = chars.length;\r\n var j, jLen = this.chars.length, found;\r\n for(i=0;i<len;i+=1){\r\n j = 0;\r\n found = false;\r\n while(j<jLen){\r\n if(this.chars[j].style === chars[i].style && this.chars[j].fFamily === chars[i].fFamily && this.chars[j].ch === chars[i].ch){\r\n found = true;\r\n }\r\n j += 1;\r\n }\r\n if(!found){\r\n this.chars.push(chars[i]);\r\n jLen += 1;\r\n }\r\n }\r\n }\r\n\r\n function getCharData(char, style, font){\r\n var i = 0, len = this.chars.length;\r\n while( i < len) {\r\n if(this.chars[i].ch === char && this.chars[i].style === style && this.chars[i].fFamily === font){\r\n return this.chars[i];\r\n }\r\n i+= 1;\r\n }\r\n }\r\n\r\n function measureText(char, fontName, size){\r\n var fontData = this.getFontByName(fontName);\r\n var tHelper = fontData.helper;\r\n //tHelper.textContent = char;\r\n return tHelper.measureText(char).width*size/100;\r\n //return tHelper.getComputedTextLength()*size/100;\r\n }\r\n\r\n function getFontByName(name){\r\n var i = 0, len = this.fonts.length;\r\n while(i<len){\r\n if(this.fonts[i].fName === name) {\r\n return this.fonts[i];\r\n }\r\n i += 1;\r\n }\r\n return 'sans-serif';\r\n }\r\n\r\n var Font = function(){\r\n this.fonts = [];\r\n this.chars = null;\r\n this.typekitLoaded = 0;\r\n this.loaded = false;\r\n this.initTime = Date.now();\r\n };\r\n Font.prototype.addChars = addChars;\r\n Font.prototype.addFonts = addFonts;\r\n Font.prototype.getCharData = getCharData;\r\n Font.prototype.getFontByName = getFontByName;\r\n Font.prototype.measureText = measureText;\r\n\r\n return Font;\r\n\r\n}());\nvar PropertyFactory = (function(){\r\n\r\n var initFrame = -999999;\r\n\r\n function interpolateValue(frameNum, iterationIndex, previousValue, caching){\r\n var offsetTime = this.offsetTime;\r\n var newValue;\r\n if(previousValue.constructor === Array) {\r\n newValue = Array.apply(null,{length:previousValue.length})\r\n }\r\n var i = iterationIndex;\r\n var len = this.keyframes.length- 1,flag = true;\r\n var keyData, nextKeyData;\r\n\r\n while(flag){\r\n keyData = this.keyframes[i];\r\n nextKeyData = this.keyframes[i+1];\r\n if(i == len-1 && frameNum >= nextKeyData.t - offsetTime){\r\n if(keyData.h){\r\n keyData = nextKeyData;\r\n }\r\n iterationIndex = 0;\r\n break;\r\n }\r\n if((nextKeyData.t - offsetTime) > frameNum){\r\n iterationIndex = i;\r\n break;\r\n }\r\n if(i < len - 1){\r\n i += 1;\r\n }else{\r\n iterationIndex = 0;\r\n flag = false;\r\n }\r\n }\r\n\r\n var k, kLen,perc,jLen, j, fnc;\r\n if(keyData.to){\r\n\r\n if(!keyData.bezierData){\r\n bez.buildBezierData(keyData);\r\n }\r\n var bezierData = keyData.bezierData;\r\n if(frameNum >= nextKeyData.t-offsetTime || frameNum < keyData.t-offsetTime){\r\n var ind = frameNum >= nextKeyData.t-offsetTime ? bezierData.points.length - 1 : 0;\r\n kLen = bezierData.points[ind].point.length;\r\n for(k = 0; k < kLen; k += 1){\r\n newValue[k] = bezierData.points[ind].point[k];\r\n }\r\n caching._lastBezierData = null;\r\n }else{\r\n if(keyData.__fnct){\r\n fnc = keyData.__fnct;\r\n }else{\r\n fnc = BezierFactory.getBezierEasing(keyData.o.x,keyData.o.y,keyData.i.x,keyData.i.y,keyData.n).get;\r\n keyData.__fnct = fnc;\r\n }\r\n perc = fnc((frameNum-(keyData.t-offsetTime))/((nextKeyData.t-offsetTime)-(keyData.t-offsetTime)));\r\n var distanceInLine = bezierData.segmentLength*perc;\r\n\r\n var segmentPerc;\r\n var addedLength = (caching.lastFrame < frameNum && caching._lastBezierData === bezierData) ? caching._lastAddedLength : 0;\r\n j = (caching.lastFrame < frameNum && caching._lastBezierData === bezierData) ? caching._lastPoint : 0;\r\n flag = true;\r\n jLen = bezierData.points.length;\r\n while(flag){\r\n addedLength +=bezierData.points[j].partialLength;\r\n if(distanceInLine === 0 || perc === 0 || j == bezierData.points.length - 1){\r\n kLen = bezierData.points[j].point.length;\r\n for(k=0;k<kLen;k+=1){\r\n newValue[k] = bezierData.points[j].point[k];\r\n }\r\n break;\r\n }else if(distanceInLine >= addedLength && distanceInLine < addedLength + bezierData.points[j+1].partialLength){\r\n segmentPerc = (distanceInLine-addedLength)/(bezierData.points[j+1].partialLength);\r\n kLen = bezierData.points[j].point.length;\r\n for(k=0;k<kLen;k+=1){\r\n newValue[k] = bezierData.points[j].point[k] + (bezierData.points[j+1].point[k] - bezierData.points[j].point[k])*segmentPerc;\r\n }\r\n break;\r\n }\r\n if(j < jLen - 1){\r\n j += 1;\r\n }else{\r\n flag = false;\r\n }\r\n }\r\n caching._lastPoint = j;\r\n caching._lastAddedLength = addedLength - bezierData.points[j].partialLength;\r\n caching._lastBezierData = bezierData;\r\n }\r\n }else{\r\n var outX,outY,inX,inY, keyValue;\r\n len = keyData.s.length;\r\n for(i=0;i<len;i+=1){\r\n if(keyData.h !== 1){\r\n if(frameNum >= nextKeyData.t-offsetTime){\r\n perc = 1;\r\n }else if(frameNum < keyData.t-offsetTime){\r\n perc = 0;\r\n }else{\r\n if(keyData.o.x.constructor === Array){\r\n if(!keyData.__fnct){\r\n keyData.__fnct = [];\r\n }\r\n if (!keyData.__fnct[i]) {\r\n outX = keyData.o.x[i] || keyData.o.x[0];\r\n outY = keyData.o.y[i] || keyData.o.y[0];\r\n inX = keyData.i.x[i] || keyData.i.x[0];\r\n inY = keyData.i.y[i] || keyData.i.y[0];\r\n fnc = BezierFactory.getBezierEasing(outX,outY,inX,inY).get;\r\n keyData.__fnct[i] = fnc;\r\n } else {\r\n fnc = keyData.__fnct[i];\r\n }\r\n } else {\r\n if (!keyData.__fnct) {\r\n outX = keyData.o.x;\r\n outY = keyData.o.y;\r\n inX = keyData.i.x;\r\n inY = keyData.i.y;\r\n fnc = BezierFactory.getBezierEasing(outX,outY,inX,inY).get;\r\n keyData.__fnct = fnc;\r\n } else{\r\n fnc = keyData.__fnct;\r\n }\r\n }\r\n perc = fnc((frameNum-(keyData.t-offsetTime))/((nextKeyData.t-offsetTime)-(keyData.t-offsetTime)));\r\n }\r\n }\r\n if(this.sh && keyData.h !== 1){\r\n var initP = keyData.s[i];\r\n var endP = keyData.e[i];\r\n if(initP-endP < -180){\r\n initP += 360;\r\n } else if(initP-endP > 180){\r\n initP -= 360;\r\n }\r\n keyValue = initP+(endP-initP)*perc;\r\n } else {\r\n keyValue = keyData.h === 1 ? keyData.s[i] : keyData.s[i]+(keyData.e[i]-keyData.s[i])*perc;\r\n }\r\n if(len === 1){\r\n newValue = keyValue;\r\n }else{\r\n newValue[i] = keyValue;\r\n }\r\n }\r\n }\r\n return {\r\n value: newValue,\r\n iterationIndex: iterationIndex\r\n }\r\n }\r\n\r\n function getValueAtCurrentTime(){\r\n if(this.elem.globalData.frameId === this.frameId){\r\n return;\r\n }\r\n this.mdf = false;\r\n var frameNum = this.comp.renderedFrame - this.offsetTime;\r\n var initTime = this.keyframes[0].t-this.offsetTime;\r\n var endTime = this.keyframes[this.keyframes.length- 1].t-this.offsetTime;\r\n if(!(frameNum === this._caching.lastFrame || (this._caching.lastFrame !== initFrame && ((this._caching.lastFrame >= endTime && frameNum >= endTime) || (this._caching.lastFrame < initTime && frameNum < initTime))))){\r\n var i = this._caching.lastFrame < frameNum ? this._caching.lastIndex : 0;\r\n var renderResult = this.interpolateValue(frameNum, i, this.pv, this._caching);\r\n this._caching.lastIndex = renderResult.iterationIndex;\r\n if(this.pv.constructor === Array){\r\n i = 0;\r\n while(i<this.v.length){\r\n this.pv[i] = renderResult.value[i];\r\n this.v[i] = this.mult ? this.pv[i] * this.mult : this.pv[i];\r\n if(this.lastPValue[i] !== this.pv[i]) {\r\n this.mdf = true;\r\n this.lastPValue[i] = this.pv[i];\r\n }\r\n i += 1;\r\n }\r\n } else {\r\n this.pv = renderResult.value;\r\n this.v = this.mult ? this.pv*this.mult : this.pv;\r\n if(this.lastPValue != this.pv){\r\n this.mdf = true;\r\n this.lastPValue = this.pv;\r\n }\r\n }\r\n \r\n }\r\n this._caching.lastFrame = frameNum;\r\n this.frameId = this.elem.globalData.frameId;\r\n }\r\n\r\n function getNoValue(){}\r\n\r\n function ValueProperty(elem,data, mult){\r\n this.mult = mult;\r\n this.v = mult ? data.k * mult : data.k;\r\n this.pv = data.k;\r\n this.mdf = false;\r\n this.comp = elem.comp;\r\n this.k = false;\r\n this.kf = false;\r\n this.vel = 0;\r\n this.getValue = getNoValue;\r\n }\r\n\r\n function MultiDimensionalProperty(elem,data, mult){\r\n this.mult = mult;\r\n this.data = data;\r\n this.mdf = false;\r\n this.comp = elem.comp;\r\n this.k = false;\r\n this.kf = false;\r\n this.frameId = -1;\r\n this.v = Array.apply(null, {length:data.k.length});\r\n this.pv = Array.apply(null, {length:data.k.length});\r\n this.lastValue = Array.apply(null, {length:data.k.length});\r\n var arr = Array.apply(null, {length:data.k.length});\r\n this.vel = arr.map(function () { return 0 });\r\n var i, len = data.k.length;\r\n for(i = 0;i<len;i+=1){\r\n this.v[i] = mult ? data.k[i] * mult : data.k[i];\r\n this.pv[i] = data.k[i];\r\n }\r\n this.getValue = getNoValue;\r\n }\r\n\r\n function KeyframedValueProperty(elem, data, mult){\r\n this.keyframes = data.k;\r\n this.offsetTime = elem.data.st;\r\n this.lastValue = -99999;\r\n this.lastPValue = -99999;\r\n this.frameId = -1;\r\n this._caching={lastFrame:initFrame,lastIndex:0};\r\n this.k = true;\r\n this.kf = true;\r\n this.data = data;\r\n this.mult = mult;\r\n this.elem = elem;\r\n this.comp = elem.comp;\r\n this.v = mult ? data.k[0].s[0]*mult : data.k[0].s[0];\r\n this.pv = data.k[0].s[0];\r\n this.getValue = getValueAtCurrentTime;\r\n this.interpolateValue = interpolateValue;\r\n }\r\n\r\n function KeyframedMultidimensionalProperty(elem, data, mult){\r\n var i, len = data.k.length;\r\n var s, e,to,ti;\r\n for(i=0;i<len-1;i+=1){\r\n if(data.k[i].to && data.k[i].s && data.k[i].e){\r\n s = data.k[i].s;\r\n e = data.k[i].e;\r\n to = data.k[i].to;\r\n ti = data.k[i].ti;\r\n if((s.length === 2 && !(s[0] === e[0] && s[1] === e[1]) && bez.pointOnLine2D(s[0],s[1],e[0],e[1],s[0] + to[0],s[1] + to[1]) && bez.pointOnLine2D(s[0],s[1],e[0],e[1],e[0] + ti[0],e[1] + ti[1])) || (s.length === 3 && !(s[0] === e[0] && s[1] === e[1] && s[2] === e[2]) && bez.pointOnLine3D(s[0],s[1],s[2],e[0],e[1],e[2],s[0] + to[0],s[1] + to[1],s[2] + to[2]) && bez.pointOnLine3D(s[0],s[1],s[2],e[0],e[1],e[2],e[0] + ti[0],e[1] + ti[1],e[2] + ti[2]))){\r\n data.k[i].to = null;\r\n data.k[i].ti = null;\r\n }\r\n }\r\n }\r\n this.keyframes = data.k;\r\n this.offsetTime = elem.data.st;\r\n this.k = true;\r\n this.kf = true;\r\n this.mult = mult;\r\n this.elem = elem;\r\n this.comp = elem.comp;\r\n this._caching={lastFrame:initFrame,lastIndex:0};\r\n this.getValue = getValueAtCurrentTime;\r\n this.interpolateValue = interpolateValue;\r\n this.frameId = -1;\r\n this.v = Array.apply(null, {length:data.k[0].s.length});\r\n this.pv = Array.apply(null, {length:data.k[0].s.length});\r\n this.lastValue = Array.apply(null, {length:data.k[0].s.length});\r\n this.lastPValue = Array.apply(null, {length:data.k[0].s.length});\r\n }\r\n\r\n var TransformProperty = (function() {\r\n function positionGetter() {\r\n if(this.p) {\r\n return ExpressionValue(this.p);\r\n } else {\r\n return [this.px.v, this.py.v, this.pz ? this.pz.v : 0];\r\n }\r\n }\r\n function xPositionGetter() {\r\n return ExpressionValue(this.px);\r\n }\r\n function yPositionGetter() {\r\n return ExpressionValue(this.py);\r\n }\r\n function zPositionGetter() {\r\n return ExpressionValue(this.pz);\r\n }\r\n function anchorGetter() {\r\n return ExpressionValue(this.a);\r\n }\r\n function orientationGetter() {\r\n return ExpressionValue(this.or);\r\n }\r\n function rotationGetter() {\r\n if(this.r) {\r\n return ExpressionValue(this.r, 1/degToRads);\r\n } else {\r\n return ExpressionValue(this.rz, 1/degToRads);\r\n }\r\n }\r\n function scaleGetter() {\r\n return ExpressionValue(this.s, 100);\r\n }\r\n function opacityGetter() {\r\n return ExpressionValue(this.o, 100);\r\n }\r\n function skewGetter() {\r\n return ExpressionValue(this.sk);\r\n }\r\n function skewAxisGetter() {\r\n return ExpressionValue(this.sa);\r\n }\r\n function applyToMatrix(mat) {\r\n var i, len = this.dynamicProperties.length;\r\n for(i = 0; i < len; i += 1) {\r\n this.dynamicProperties[i].getValue();\r\n if (this.dynamicProperties[i].mdf) {\r\n this.mdf = true;\r\n }\r\n }\r\n if (this.a) {\r\n mat.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\r\n }\r\n if (this.s) {\r\n mat.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\r\n }\r\n if (this.r) {\r\n mat.rotate(-this.r.v);\r\n } else {\r\n mat.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\r\n }\r\n if (this.data.p.s) {\r\n if (this.data.p.z) {\r\n mat.translate(this.px.v, this.py.v, -this.pz.v);\r\n } else {\r\n mat.translate(this.px.v, this.py.v, 0);\r\n }\r\n } else {\r\n mat.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\r\n }\r\n }\r\n function processKeys(){\r\n if (this.elem.globalData.frameId === this.frameId) {\r\n return;\r\n }\r\n\r\n this.mdf = false;\r\n var i, len = this.dynamicProperties.length;\r\n\r\n for(i = 0; i < len; i += 1) {\r\n this.dynamicProperties[i].getValue();\r\n if (this.dynamicProperties[i].mdf) {\r\n this.mdf = true;\r\n }\r\n }\r\n if (this.mdf) {\r\n this.v.reset();\r\n if (this.a) {\r\n this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\r\n }\r\n if(this.s) {\r\n this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\r\n }\r\n if (this.sk) {\r\n this.v.skewFromAxis(-this.sk.v, this.sa.v);\r\n }\r\n if (this.r) {\r\n this.v.rotate(-this.r.v);\r\n } else {\r\n this.v.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\r\n }\r\n if (this.autoOriented && this.p.keyframes && this.p.getValueAtTime) {\r\n var v1,v2;\r\n if (this.p._caching.lastFrame+this.p.offsetTime <= this.p.keyframes[0].t) {\r\n v1 = this.p.getValueAtTime((this.p.keyframes[0].t + 0.01) / this.elem.globalData.frameRate,0);\r\n v2 = this.p.getValueAtTime(this.p.keyframes[0].t / this.elem.globalData.frameRate, 0);\r\n } else if(this.p._caching.lastFrame+this.p.offsetTime >= this.p.keyframes[this.p.keyframes.length - 1].t) {\r\n v1 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t / this.elem.globalData.frameRate), 0);\r\n v2 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t - 0.01) / this.elem.globalData.frameRate, 0);\r\n } else {\r\n v1 = this.p.pv;\r\n v2 = this.p.getValueAtTime((this.p._caching.lastFrame+this.p.offsetTime - 0.01) / this.elem.globalData.frameRate, this.p.offsetTime);\r\n }\r\n this.v.rotate(-Math.atan2(v1[1] - v2[1], v1[0] - v2[0]));\r\n }\r\n if(this.data.p.s){\r\n if(this.data.p.z) {\r\n this.v.translate(this.px.v, this.py.v, -this.pz.v);\r\n } else {\r\n this.v.translate(this.px.v, this.py.v, 0);\r\n }\r\n }else{\r\n this.v.translate(this.p.v[0],this.p.v[1],-this.p.v[2]);\r\n }\r\n }\r\n this.frameId = this.elem.globalData.frameId;\r\n }\r\n\r\n function setInverted(){\r\n this.inverted = true;\r\n this.iv = new Matrix();\r\n if(!this.k){\r\n if(this.data.p.s){\r\n this.iv.translate(this.px.v,this.py.v,-this.pz.v);\r\n }else{\r\n this.iv.translate(this.p.v[0],this.p.v[1],-this.p.v[2]);\r\n }\r\n if(this.r){\r\n this.iv.rotate(-this.r.v);\r\n }else{\r\n this.iv.rotateX(-this.rx.v).rotateY(-this.ry.v).rotateZ(this.rz.v);\r\n }\r\n if(this.s){\r\n this.iv.scale(this.s.v[0],this.s.v[1],1);\r\n }\r\n if(this.a){\r\n this.iv.translate(-this.a.v[0],-this.a.v[1],this.a.v[2]);\r\n }\r\n }\r\n }\r\n\r\n function autoOrient(){\r\n //\r\n //var prevP = this.getValueAtTime();\r\n }\r\n\r\n return function TransformProperty(elem,data,arr){\r\n this.elem = elem;\r\n this.frameId = -1;\r\n this.type = 'transform';\r\n this.dynamicProperties = [];\r\n this.mdf = false;\r\n this.data = data;\r\n this.getValue = processKeys;\r\n this.applyToMatrix = applyToMatrix;\r\n this.setInverted = setInverted;\r\n this.autoOrient = autoOrient;\r\n this.v = new Matrix();\r\n if(data.p.s){\r\n this.px = PropertyFactory.getProp(elem,data.p.x,0,0,this.dynamicProperties);\r\n this.py = PropertyFactory.getProp(elem,data.p.y,0,0,this.dynamicProperties);\r\n if(data.p.z){\r\n this.pz = PropertyFactory.getProp(elem,data.p.z,0,0,this.dynamicProperties);\r\n }\r\n }else{\r\n this.p = PropertyFactory.getProp(elem,data.p,1,0,this.dynamicProperties);\r\n }\r\n if(data.r) {\r\n this.r = PropertyFactory.getProp(elem, data.r, 0, degToRads, this.dynamicProperties);\r\n } else if(data.rx) {\r\n this.rx = PropertyFactory.getProp(elem, data.rx, 0, degToRads, this.dynamicProperties);\r\n this.ry = PropertyFactory.getProp(elem, data.ry, 0, degToRads, this.dynamicProperties);\r\n this.rz = PropertyFactory.getProp(elem, data.rz, 0, degToRads, this.dynamicProperties);\r\n this.or = PropertyFactory.getProp(elem, data.or, 1, degToRads, this.dynamicProperties);\r\n //sh Indicates it needs to be capped between -180 and 180\r\n this.or.sh = true;\r\n }\r\n if(data.sk){\r\n this.sk = PropertyFactory.getProp(elem, data.sk, 0, degToRads, this.dynamicProperties);\r\n this.sa = PropertyFactory.getProp(elem, data.sa, 0, degToRads, this.dynamicProperties);\r\n }\r\n if(data.a) {\r\n this.a = PropertyFactory.getProp(elem,data.a,1,0,this.dynamicProperties);\r\n }\r\n if(data.s) {\r\n this.s = PropertyFactory.getProp(elem,data.s,1,0.01,this.dynamicProperties);\r\n }\r\n if(data.o){\r\n this.o = PropertyFactory.getProp(elem,data.o,0,0.01,this.dynamicProperties);\r\n } else {\r\n this.o = {mdf:false,v:1};\r\n }\r\n if(this.dynamicProperties.length){\r\n arr.push(this);\r\n }else{\r\n if(this.a){\r\n this.v.translate(-this.a.v[0],-this.a.v[1],this.a.v[2]);\r\n }\r\n if(this.s){\r\n this.v.scale(this.s.v[0],this.s.v[1],this.s.v[2]);\r\n }\r\n if(this.sk){\r\n this.v.skewFromAxis(-this.sk.v,this.sa.v);\r\n }\r\n if(this.r){\r\n this.v.rotate(-this.r.v);\r\n }else{\r\n this.v.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\r\n }\r\n if(this.data.p.s){\r\n if(data.p.z) {\r\n this.v.translate(this.px.v, this.py.v, -this.pz.v);\r\n } else {\r\n this.v.translate(this.px.v, this.py.v, 0);\r\n }\r\n }else{\r\n this.v.translate(this.p.v[0],this.p.v[1],-this.p.v[2]);\r\n }\r\n }\r\n Object.defineProperty(this, \"position\", { get: positionGetter});\r\n Object.defineProperty(this, \"xPosition\", { get: xPositionGetter});\r\n Object.defineProperty(this, \"yPosition\", { get: yPositionGetter});\r\n Object.defineProperty(this, \"orientation\", { get: orientationGetter});\r\n Object.defineProperty(this, \"anchorPoint\", { get: anchorGetter});\r\n Object.defineProperty(this, \"rotation\", { get: rotationGetter});\r\n Object.defineProperty(this, \"scale\", { get: scaleGetter});\r\n Object.defineProperty(this, \"opacity\", { get: opacityGetter});\r\n Object.defineProperty(this, \"skew\", { get: skewGetter});\r\n Object.defineProperty(this, \"skewAxis\", { get: skewAxisGetter});\r\n }\r\n }());\r\n\r\n function getProp(elem,data,type, mult, arr) {\r\n var p;\r\n if(type === 2){\r\n p = new TransformProperty(elem, data, arr);\r\n } else if(data.a === 0){\r\n if(type === 0) {\r\n p = new ValueProperty(elem,data,mult);\r\n } else {\r\n p = new MultiDimensionalProperty(elem,data, mult);\r\n }\r\n } else if(data.a === 1){\r\n if(type === 0) {\r\n p = new KeyframedValueProperty(elem,data,mult);\r\n } else {\r\n p = new KeyframedMultidimensionalProperty(elem,data, mult);\r\n }\r\n } else if(!data.k.length){\r\n p = new ValueProperty(elem,data, mult);\r\n }else if(typeof(data.k[0]) === 'number'){\r\n p = new MultiDimensionalProperty(elem,data, mult);\r\n }else{\r\n switch(type){\r\n case 0:\r\n p = new KeyframedValueProperty(elem,data,mult);\r\n break;\r\n case 1:\r\n p = new KeyframedMultidimensionalProperty(elem,data,mult);\r\n break;\r\n }\r\n }\r\n if(p.k){\r\n arr.push(p);\r\n }\r\n return p;\r\n }\r\n\r\n var getGradientProp = (function(){\r\n\r\n function getValue(forceRender){\r\n this.prop.getValue();\r\n this.cmdf = false;\r\n this.omdf = false;\r\n if(this.prop.mdf || forceRender){\r\n var i, len = this.data.p*4;\r\n var mult, val;\r\n for(i=0;i<len;i+=1){\r\n mult = i%4 === 0 ? 100 : 255;\r\n val = Math.round(this.prop.v[i]*mult);\r\n if(this.c[i] !== val){\r\n this.c[i] = val;\r\n this.cmdf = true;\r\n }\r\n }\r\n if(this.o.length){\r\n len = this.prop.v.length;\r\n for(i=this.data.p*4;i<len;i+=1){\r\n mult = i%2 === 0 ? 100 : 1;\r\n val = i%2 === 0 ? Math.round(this.prop.v[i]*100):this.prop.v[i];\r\n if(this.o[i-this.data.p*4] !== val){\r\n this.o[i-this.data.p*4] = val;\r\n this.omdf = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n }\r\n\r\n function gradientProp(elem,data,arr){\r\n this.prop = getProp(elem,data.k,1,null,[]);\r\n this.data = data;\r\n this.k = this.prop.k;\r\n this.c = Array.apply(null,{length:data.p*4});\r\n var cLength = data.k.k[0].s ? (data.k.k[0].s.length - data.p*4) : data.k.k.length - data.p*4;\r\n this.o = Array.apply(null,{length:cLength});\r\n this.cmdf = false;\r\n this.omdf = false;\r\n this.getValue = getValue;\r\n if(this.prop.k){\r\n arr.push(this);\r\n }\r\n this.getValue(true);\r\n }\r\n\r\n return function getGradientProp(elem,data,arr){\r\n return new gradientProp(elem,data,arr);\r\n }\r\n }());\r\n\r\n\r\n\r\n\r\n var DashProperty = (function(){\r\n\r\n function processKeys(forceRender){\r\n var i = 0, len = this.dataProps.length;\r\n\r\n if(this.elem.globalData.frameId === this.frameId && !forceRender){\r\n return;\r\n }\r\n this.mdf = false;\r\n this.frameId = this.elem.globalData.frameId;\r\n while(i<len){\r\n if(this.dataProps[i].p.mdf){\r\n this.mdf = true;\r\n break;\r\n }\r\n i+=1;\r\n }\r\n if(this.mdf || forceRender){\r\n if(this.renderer === 'svg') {\r\n this.dasharray = '';\r\n }\r\n for(i=0;i<len;i+=1){\r\n if(this.dataProps[i].n != 'o'){\r\n if(this.renderer === 'svg') {\r\n this.dasharray += ' ' + this.dataProps[i].p.v;\r\n }else{\r\n this.dasharray[i] = this.dataProps[i].p.v;\r\n }\r\n }else{\r\n this.dashoffset = this.dataProps[i].p.v;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return function(elem, data,renderer, dynamicProperties){\r\n this.elem = elem;\r\n this.frameId = -1;\r\n this.dataProps = new Array(data.length);\r\n this.renderer = renderer;\r\n this.mdf = false;\r\n this.k = false;\r\n if(this.renderer === 'svg'){\r\n this.dasharray = '';\r\n }else{\r\n\r\n this.dasharray = new Array(data.length - 1);\r\n }\r\n this.dashoffset = 0;\r\n var i, len = data.length, prop;\r\n for(i=0;i<len;i+=1){\r\n prop = PropertyFactory.getProp(elem,data[i].v,0, 0, dynamicProperties);\r\n this.k = prop.k ? true : this.k;\r\n this.dataProps[i] = {n:data[i].n,p:prop};\r\n }\r\n this.getValue = processKeys;\r\n if(this.k){\r\n dynamicProperties.push(this);\r\n }else{\r\n this.getValue(true);\r\n }\r\n\r\n }\r\n }());\r\n\r\n function getDashProp(elem, data,renderer, dynamicProperties) {\r\n return new DashProperty(elem, data,renderer, dynamicProperties);\r\n };\r\n\r\n var TextSelectorProp = (function(){\r\n var max = Math.max;\r\n var min = Math.min;\r\n var floor = Math.floor;\r\n function updateRange(newCharsFlag){\r\n this.mdf = newCharsFlag || false;\r\n if(this.dynamicProperties.length){\r\n var i, len = this.dynamicProperties.length;\r\n for(i=0;i<len;i+=1){\r\n this.dynamicProperties[i].getValue();\r\n if(this.dynamicProperties[i].mdf){\r\n this.mdf = true;\r\n }\r\n }\r\n }\r\n var totalChars = this.elem.textProperty.currentData ? this.elem.textProperty.currentData.l.length : 0;\r\n if(newCharsFlag && this.data.r === 2) {\r\n this.e.v = totalChars;\r\n }\r\n var divisor = this.data.r === 2 ? 1 : 100 / totalChars;\r\n var o = this.o.v/divisor;\r\n var s = this.s.v/divisor + o;\r\n var e = (this.e.v/divisor) + o;\r\n if(s>e){\r\n var _s = s;\r\n s = e;\r\n e = _s;\r\n }\r\n this.finalS = s;\r\n this.finalE = e;\r\n }\r\n\r\n function getMult(ind){\r\n //var easer = bez.getEasingCurve(this.ne.v/100,0,1-this.xe.v/100,1);\r\n var easer = BezierFactory.getBezierEasing(this.ne.v/100,0,1-this.xe.v/100,1).get;\r\n var mult = 0;\r\n var s = this.finalS;\r\n var e = this.finalE;\r\n var type = this.data.sh;\r\n if(type == 2){\r\n if(e === s){\r\n mult = ind >= e ? 1 : 0;\r\n }else{\r\n mult = max(0,min(0.5/(e-s) + (ind-s)/(e-s),1));\r\n }\r\n mult = easer(mult);\r\n }else if(type == 3){\r\n if(e === s){\r\n mult = ind >= e ? 0 : 1;\r\n }else{\r\n mult = 1 - max(0,min(0.5/(e-s) + (ind-s)/(e-s),1));\r\n }\r\n\r\n mult = easer(mult);\r\n }else if(type == 4){\r\n if(e === s){\r\n mult = 0;\r\n }else{\r\n mult = max(0,min(0.5/(e-s) + (ind-s)/(e-s),1));\r\n if(mult<.5){\r\n mult *= 2;\r\n }else{\r\n mult = 1 - 2*(mult-0.5);\r\n }\r\n }\r\n mult = easer(mult);\r\n }else if(type == 5){\r\n if(e === s){\r\n mult = 0;\r\n }else{\r\n var tot = e - s;\r\n /*ind += 0.5;\r\n mult = -4/(tot*tot)*(ind*ind)+(4/tot)*ind;*/\r\n ind = min(max(0,ind+0.5-s),e-s);\r\n var x = -tot/2+ind;\r\n var a = tot/2;\r\n mult = Math.sqrt(1 - (x*x)/(a*a));\r\n }\r\n mult = easer(mult);\r\n }else if(type == 6){\r\n if(e === s){\r\n mult = 0;\r\n }else{\r\n ind = min(max(0,ind+0.5-s),e-s);\r\n mult = (1+(Math.cos((Math.PI+Math.PI*2*(ind)/(e-s)))))/2;\r\n /*\r\n ind = Math.min(Math.max(s,ind),e-1);\r\n mult = (1+(Math.cos((Math.PI+Math.PI*2*(ind-s)/(e-1-s)))))/2;\r\n mult = Math.max(mult,(1/(e-1-s))/(e-1-s));*/\r\n }\r\n mult = easer(mult);\r\n }else {\r\n if(ind >= floor(s)){\r\n if(ind-s < 0){\r\n mult = 1 - (s - ind);\r\n }else{\r\n mult = max(0,min(e-ind,1));\r\n }\r\n }\r\n mult = easer(mult);\r\n }\r\n return mult*this.a.v;\r\n }\r\n\r\n return function TextSelectorProp(elem,data, arr){\r\n this.mdf = false;\r\n this.k = false;\r\n this.data = data;\r\n this.dynamicProperties = [];\r\n this.getValue = updateRange;\r\n this.getMult = getMult;\r\n this.elem = elem;\r\n this.comp = elem.comp;\r\n this.finalS = 0;\r\n this.finalE = 0;\r\n this.s = PropertyFactory.getProp(elem,data.s || {k:0},0,0,this.dynamicProperties);\r\n if('e' in data){\r\n this.e = PropertyFactory.getProp(elem,data.e,0,0,this.dynamicProperties);\r\n }else{\r\n this.e = {v:100};\r\n }\r\n this.o = PropertyFactory.getProp(elem,data.o || {k:0},0,0,this.dynamicProperties);\r\n this.xe = PropertyFactory.getProp(elem,data.xe || {k:0},0,0,this.dynamicProperties);\r\n this.ne = PropertyFactory.getProp(elem,data.ne || {k:0},0,0,this.dynamicProperties);\r\n this.a = PropertyFactory.getProp(elem,data.a,0,0.01,this.dynamicProperties);\r\n if(this.dynamicProperties.length){\r\n arr.push(this);\r\n }else{\r\n this.getValue();\r\n }\r\n }\r\n }());\r\n\r\n function getTextSelectorProp(elem, data,arr) {\r\n return new TextSelectorProp(elem, data, arr);\r\n };\r\n\r\n var ob = {\r\n getProp: getProp,\r\n getDashProp: getDashProp,\r\n getTextSelectorProp: getTextSelectorProp,\r\n getGradientProp: getGradientProp\r\n };\r\n return ob;\r\n}());\nfunction ShapePath(){\r\n\tthis.c = false;\r\n\tthis._length = 0;\r\n\tthis._maxLength = 8;\r\n\tthis.v = Array.apply(null,{length:this._maxLength});\r\n\tthis.o = Array.apply(null,{length:this._maxLength});\r\n\tthis.i = Array.apply(null,{length:this._maxLength});\r\n};\r\n\r\nShapePath.prototype.setPathData = function(closed, len) {\r\n\tthis.c = closed;\r\n\tthis.setLength(len);\r\n\tvar i = 0;\r\n\twhile(i < len){\r\n\t\tthis.v[i] = point_pool.newPoint();\r\n\t\tthis.o[i] = point_pool.newPoint();\r\n\t\tthis.i[i] = point_pool.newPoint();\r\n\t\ti += 1;\r\n\t}\r\n};\r\n\r\nShapePath.prototype.setLength = function(len) {\r\n\twhile(this._maxLength < len) {\r\n\t\tthis.doubleArrayLength();\r\n\t}\r\n\tthis._length = len;\r\n}\r\n\r\nShapePath.prototype.doubleArrayLength = function() {\r\n\tthis.v = this.v.concat(Array.apply(null,{length:this._maxLength}))\r\n\tthis.i = this.i.concat(Array.apply(null,{length:this._maxLength}))\r\n\tthis.o = this.o.concat(Array.apply(null,{length:this._maxLength}))\r\n\tthis._maxLength *= 2;\r\n};\r\n\r\nShapePath.prototype.setXYAt = function(x, y, type, pos, replace) {\r\n\tvar arr;\r\n\tthis._length = Math.max(this._length, pos + 1);\r\n\tif(this._length >= this._maxLength) {\r\n\t\tthis.doubleArrayLength();\r\n\t}\r\n\tswitch(type){\r\n\t\tcase 'v':\r\n\t\t\tarr = this.v;\r\n\t\t\tbreak;\r\n\t\tcase 'i':\r\n\t\t\tarr = this.i;\r\n\t\t\tbreak;\r\n\t\tcase 'o':\r\n\t\t\tarr = this.o;\r\n\t\t\tbreak;\r\n\t}\r\n\tif(!arr[pos] || (arr[pos] && !replace)){\r\n\t\tarr[pos] = point_pool.newPoint();\r\n\t}\r\n\tarr[pos][0] = x;\r\n\tarr[pos][1] = y;\r\n};\r\n\r\nShapePath.prototype.setTripleAt = function(vX,vY,oX,oY,iX,iY,pos, replace) {\r\n\tthis.setXYAt(vX,vY,'v',pos, replace);\r\n\tthis.setXYAt(oX,oY,'o',pos, replace);\r\n\tthis.setXYAt(iX,iY,'i',pos, replace);\r\n};\nvar ShapePropertyFactory = (function(){\r\n\r\n var initFrame = -999999;\r\n\r\n function interpolateShape(frameNum, iterationIndex, previousValue, isCurrentRender) {\r\n var keyPropS,keyPropE,isHold;\r\n if(frameNum < this.keyframes[0].t-this.offsetTime){\r\n keyPropS = this.keyframes[0].s[0];\r\n isHold = true;\r\n iterationIndex = 0;\r\n }else if(frameNum >= this.keyframes[this.keyframes.length - 1].t-this.offsetTime){\r\n if(this.keyframes[this.keyframes.length - 2].h === 1){\r\n keyPropS = this.keyframes[this.keyframes.length - 1].s[0];\r\n }else{\r\n keyPropS = this.keyframes[this.keyframes.length - 2].e[0];\r\n }\r\n isHold = true;\r\n }else{\r\n var i = iterationIndex;\r\n var len = this.keyframes.length- 1,flag = true,keyData,nextKeyData, j, jLen, k, kLen;\r\n while(flag){\r\n keyData = this.keyframes[i];\r\n nextKeyData = this.keyframes[i+1];\r\n if((nextKeyData.t - this.offsetTime) > frameNum){\r\n break;\r\n }\r\n if(i < len - 1){\r\n i += 1;\r\n }else{\r\n flag = false;\r\n }\r\n }\r\n isHold = keyData.h === 1;\r\n iterationIndex = i;\r\n\r\n var perc;\r\n if(!isHold){\r\n if(frameNum >= nextKeyData.t-this.offsetTime){\r\n perc = 1;\r\n }else if(frameNum < keyData.t-this.offsetTime){\r\n perc = 0;\r\n }else{\r\n var fnc;\r\n if(keyData.__fnct){\r\n fnc = keyData.__fnct;\r\n }else{\r\n fnc = BezierFactory.getBezierEasing(keyData.o.x,keyData.o.y,keyData.i.x,keyData.i.y).get;\r\n keyData.__fnct = fnc;\r\n }\r\n perc = fnc((frameNum-(keyData.t-this.offsetTime))/((nextKeyData.t-this.offsetTime)-(keyData.t-this.offsetTime)));\r\n }\r\n keyPropE = keyData.e[0];\r\n }\r\n keyPropS = keyData.s[0];\r\n }\r\n jLen = previousValue._length;\r\n kLen = keyPropS.i[0].length;\r\n var hasModified = false;\r\n var vertexValue;\r\n for(j=0;j<jLen;j+=1){\r\n for(k=0;k<kLen;k+=1){\r\n if(isHold){\r\n vertexValue = keyPropS.i[j][k];\r\n if(previousValue.i[j][k] !== vertexValue){\r\n previousValue.i[j][k] = vertexValue;\r\n if(isCurrentRender) {\r\n this.pv.i[j][k] = vertexValue;\r\n }\r\n hasModified = true;\r\n }\r\n vertexValue = keyPropS.o[j][k];\r\n if(previousValue.o[j][k] !== vertexValue){\r\n previousValue.o[j][k] = vertexValue;\r\n if(isCurrentRender) {\r\n this.pv.o[j][k] = vertexValue;\r\n }\r\n hasModified = true;\r\n }\r\n vertexValue = keyPropS.v[j][k];\r\n if(previousValue.v[j][k] !== vertexValue){\r\n previousValue.v[j][k] = vertexValue;\r\n if(isCurrentRender) {\r\n this.pv.v[j][k] = vertexValue;\r\n }\r\n hasModified = true;\r\n }\r\n }else{\r\n vertexValue = keyPropS.i[j][k]+(keyPropE.i[j][k]-keyPropS.i[j][k])*perc;\r\n if(previousValue.i[j][k] !== vertexValue){\r\n previousValue.i[j][k] = vertexValue;\r\n if(isCurrentRender) {\r\n this.pv.i[j][k] = vertexValue;\r\n }\r\n hasModified = true;\r\n }\r\n vertexValue = keyPropS.o[j][k]+(keyPropE.o[j][k]-keyPropS.o[j][k])*perc;\r\n if(previousValue.o[j][k] !== vertexValue){\r\n previousValue.o[j][k] = vertexValue;\r\n if(isCurrentRender) {\r\n this.pv.o[j][k] = vertexValue;\r\n }\r\n hasModified = true;\r\n }\r\n vertexValue = keyPropS.v[j][k]+(keyPropE.v[j][k]-keyPropS.v[j][k])*perc;\r\n if(previousValue.v[j][k] !== vertexValue){\r\n previousValue.v[j][k] = vertexValue;\r\n if(isCurrentRender) {\r\n this.pv.v[j][k] = vertexValue;\r\n }\r\n hasModified = true;\r\n }\r\n }\r\n }\r\n }\r\n if(hasModified) {\r\n previousValue.c = keyPropS.c;\r\n }\r\n return {\r\n iterationIndex: iterationIndex,\r\n hasModified: hasModified\r\n }\r\n }\r\n\r\n function interpolateShapeCurrentTime(){\r\n if(this.elem.globalData.frameId === this.frameId){\r\n return;\r\n }\r\n this.mdf = false;\r\n var frameNum = this.comp.renderedFrame - this.offsetTime;\r\n var initTime = this.keyframes[0].t - this.offsetTime;\r\n var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\r\n if(!(this.lastFrame !== initFrame && ((this.lastFrame < initTime && frameNum < initTime) || (this.lastFrame > endTime && frameNum > endTime)))){\r\n ////\r\n var i = this.lastFrame < frameNum ? this._lastIndex : 0;\r\n var renderResult = this.interpolateShape(frameNum, i, this.v, true);\r\n ////\r\n this._lastIndex = renderResult.iterationIndex;\r\n this.mdf = renderResult.hasModified;\r\n if(renderResult.hasModified) {\r\n this.paths = this.localShapeCollection;\r\n }\r\n }\r\n this.lastFrame = frameNum;\r\n this.frameId = this.elem.globalData.frameId;\r\n }\r\n\r\n function getShapeValue(){\r\n return this.v;\r\n }\r\n\r\n function resetShape(){\r\n this.paths = this.localShapeCollection;\r\n if(!this.k){\r\n this.mdf = false;\r\n }\r\n }\r\n\r\n function ShapeProperty(elem, data, type){\r\n this.__shapeObject = 1;\r\n this.comp = elem.comp;\r\n this.k = false;\r\n this.mdf = false;\r\n var pathData = type === 3 ? data.pt.k : data.ks.k;\r\n this.v = shape_pool.clone(pathData);\r\n this.pv = shape_pool.clone(this.v);\r\n this.localShapeCollection = shapeCollection_pool.newShapeCollection();\r\n this.paths = this.localShapeCollection;\r\n this.paths.addShape(this.v);\r\n this.reset = resetShape;\r\n }\r\n ShapeProperty.prototype.interpolateShape = interpolateShape;\r\n ShapeProperty.prototype.getValue = getShapeValue;\r\n\r\n function KeyframedShapeProperty(elem,data,type){\r\n this.__shapeObject = 1;\r\n this.comp = elem.comp;\r\n this.elem = elem;\r\n this.offsetTime = elem.data.st;\r\n this._lastIndex = 0;\r\n this.keyframes = type === 3 ? data.pt.k : data.ks.k;\r\n this.k = true;\r\n this.kf = true;\r\n var i, len = this.keyframes[0].s[0].i.length;\r\n var jLen = this.keyframes[0].s[0].i[0].length;\r\n this.v = shape_pool.newShape();\r\n this.v.setPathData(this.keyframes[0].s[0].c, len);\r\n this.pv = shape_pool.clone(this.v);\r\n this.localShapeCollection = shapeCollection_pool.newShapeCollection();\r\n this.paths = this.localShapeCollection;\r\n this.paths.addShape(this.v);\r\n this.lastFrame = initFrame;\r\n this.reset = resetShape;\r\n }\r\n KeyframedShapeProperty.prototype.getValue = interpolateShapeCurrentTime;\r\n KeyframedShapeProperty.prototype.interpolateShape = interpolateShape;\r\n\r\n var EllShapeProperty = (function(){\r\n\r\n var cPoint = roundCorner;\r\n\r\n function convertEllToPath(){\r\n var p0 = this.p.v[0], p1 = this.p.v[1], s0 = this.s.v[0]/2, s1 = this.s.v[1]/2;\r\n if(this.d !== 3){\r\n this.v.v[0][0] = p0;\r\n this.v.v[0][1] = p1-s1;\r\n this.v.v[1][0] = p0 + s0;\r\n this.v.v[1][1] = p1;\r\n this.v.v[2][0] = p0;\r\n this.v.v[2][1] = p1+s1;\r\n this.v.v[3][0] = p0 - s0;\r\n this.v.v[3][1] = p1;\r\n this.v.i[0][0] = p0 - s0*cPoint;\r\n this.v.i[0][1] = p1 - s1;\r\n this.v.i[1][0] = p0 + s0;\r\n this.v.i[1][1] = p1 - s1*cPoint;\r\n this.v.i[2][0] = p0 + s0*cPoint;\r\n this.v.i[2][1] = p1 + s1;\r\n this.v.i[3][0] = p0 - s0;\r\n this.v.i[3][1] = p1 + s1*cPoint;\r\n this.v.o[0][0] = p0 + s0*cPoint;\r\n this.v.o[0][1] = p1 - s1;\r\n this.v.o[1][0] = p0 + s0;\r\n this.v.o[1][1] = p1 + s1*cPoint;\r\n this.v.o[2][0] = p0 - s0*cPoint;\r\n this.v.o[2][1] = p1 + s1;\r\n this.v.o[3][0] = p0 - s0;\r\n this.v.o[3][1] = p1 - s1*cPoint;\r\n }else{\r\n this.v.v[0][0] = p0;\r\n this.v.v[0][1] = p1-s1;\r\n this.v.v[1][0] = p0 - s0;\r\n this.v.v[1][1] = p1;\r\n this.v.v[2][0] = p0;\r\n this.v.v[2][1] = p1+s1;\r\n this.v.v[3][0] = p0 + s0;\r\n this.v.v[3][1] = p1;\r\n this.v.i[0][0] = p0 + s0*cPoint;\r\n this.v.i[0][1] = p1 - s1;\r\n this.v.i[1][0] = p0 - s0;\r\n this.v.i[1][1] = p1 - s1*cPoint;\r\n this.v.i[2][0] = p0 - s0*cPoint;\r\n this.v.i[2][1] = p1 + s1;\r\n this.v.i[3][0] = p0 + s0;\r\n this.v.i[3][1] = p1 + s1*cPoint;\r\n this.v.o[0][0] = p0 - s0*cPoint;\r\n this.v.o[0][1] = p1 - s1;\r\n this.v.o[1][0] = p0 - s0;\r\n this.v.o[1][1] = p1 + s1*cPoint;\r\n this.v.o[2][0] = p0 + s0*cPoint;\r\n this.v.o[2][1] = p1 + s1;\r\n this.v.o[3][0] = p0 + s0;\r\n this.v.o[3][1] = p1 - s1*cPoint;\r\n }\r\n }\r\n\r\n function processKeys(frameNum){\r\n var i, len = this.dynamicProperties.length;\r\n if(this.elem.globalData.frameId === this.frameId){\r\n return;\r\n }\r\n this.mdf = false;\r\n this.frameId = this.elem.globalData.frameId;\r\n\r\n for(i=0;i<len;i+=1){\r\n this.dynamicProperties[i].getValue(frameNum);\r\n if(this.dynamicProperties[i].mdf){\r\n this.mdf = true;\r\n }\r\n }\r\n if(this.mdf){\r\n this.convertEllToPath();\r\n }\r\n }\r\n\r\n return function EllShapeProperty(elem,data) {\r\n /*this.v = {\r\n v: Array.apply(null,{length:4}),\r\n i: Array.apply(null,{length:4}),\r\n o: Array.apply(null,{length:4}),\r\n c: true\r\n };*/\r\n this.v = shape_pool.newShape();\r\n this.v.setPathData(true, 4);\r\n this.localShapeCollection = shapeCollection_pool.newShapeCollection();\r\n this.paths = this.localShapeCollection;\r\n this.localShapeCollection.addShape(this.v);\r\n this.d = data.d;\r\n this.dynamicProperties = [];\r\n this.elem = elem;\r\n this.comp = elem.comp;\r\n this.frameId = -1;\r\n this.mdf = false;\r\n this.getValue = processKeys;\r\n this.convertEllToPath = convertEllToPath;\r\n this.reset = resetShape;\r\n this.p = PropertyFactory.getProp(elem,data.p,1,0,this.dynamicProperties);\r\n this.s = PropertyFactory.getProp(elem,data.s,1,0,this.dynamicProperties);\r\n if(this.dynamicProperties.length){\r\n this.k = true;\r\n }else{\r\n this.convertEllToPath();\r\n }\r\n }\r\n }());\r\n\r\n var StarShapeProperty = (function() {\r\n\r\n function convertPolygonToPath(){\r\n var numPts = Math.floor(this.pt.v);\r\n var angle = Math.PI*2/numPts;\r\n /*this.v.v.length = numPts;\r\n this.v.i.length = numPts;\r\n this.v.o.length = numPts;*/\r\n var rad = this.or.v;\r\n var roundness = this.os.v;\r\n var perimSegment = 2*Math.PI*rad/(numPts*4);\r\n var i, currentAng = -Math.PI/ 2;\r\n var dir = this.data.d === 3 ? -1 : 1;\r\n currentAng += this.r.v;\r\n this.v._length = 0;\r\n for(i=0;i<numPts;i+=1){\r\n var x = rad * Math.cos(currentAng);\r\n var y = rad * Math.sin(currentAng);\r\n var ox = x === 0 && y === 0 ? 0 : y/Math.sqrt(x*x + y*y);\r\n var oy = x === 0 && y === 0 ? 0 : -x/Math.sqrt(x*x + y*y);\r\n x += + this.p.v[0];\r\n y += + this.p.v[1];\r\n this.v.setTripleAt(x,y,x-ox*perimSegment*roundness*dir,y-oy*perimSegment*roundness*dir,x+ox*perimSegment*roundness*dir,y+oy*perimSegment*roundness*dir, i, true);\r\n /*this.v.v[i] = [x,y];\r\n this.v.i[i] = [x+ox*perimSegment*roundness*dir,y+oy*perimSegment*roundness*dir];\r\n this.v.o[i] = [x-ox*perimSegment*roundness*dir,y-oy*perimSegment*roundness*dir];*/\r\n currentAng += angle*dir;\r\n }\r\n this.paths.length = 0;\r\n this.paths[0] = this.v;\r\n }\r\n\r\n function convertStarToPath() {\r\n var numPts = Math.floor(this.pt.v)*2;\r\n var angle = Math.PI*2/numPts;\r\n /*this.v.v.length = numPts;\r\n this.v.i.length = numPts;\r\n this.v.o.length = numPts;*/\r\n var longFlag = true;\r\n var longRad = this.or.v;\r\n var shortRad = this.ir.v;\r\n var longRound = this.os.v;\r\n var shortRound = this.is.v;\r\n var longPerimSegment = 2*Math.PI*longRad/(numPts*2);\r\n var shortPerimSegment = 2*Math.PI*shortRad/(numPts*2);\r\n var i, rad,roundness,perimSegment, currentAng = -Math.PI/ 2;\r\n currentAng += this.r.v;\r\n var dir = this.data.d === 3 ? -1 : 1;\r\n this.v._length = 0;\r\n for(i=0;i<numPts;i+=1){\r\n rad = longFlag ? longRad : shortRad;\r\n roundness = longFlag ? longRound : shortRound;\r\n perimSegment = longFlag ? longPerimSegment : shortPerimSegment;\r\n var x = rad * Math.cos(currentAng);\r\n var y = rad * Math.sin(currentAng);\r\n var ox = x === 0 && y === 0 ? 0 : y/Math.sqrt(x*x + y*y);\r\n var oy = x === 0 && y === 0 ? 0 : -x/Math.sqrt(x*x + y*y);\r\n x += + this.p.v[0];\r\n y += + this.p.v[1];\r\n this.v.setTripleAt(x,y,x-ox*perimSegment*roundness*dir,y-oy*perimSegment*roundness*dir,x+ox*perimSegment*roundness*dir,y+oy*perimSegment*roundness*dir, i, true);\r\n\r\n /*this.v.v[i] = [x,y];\r\n this.v.i[i] = [x+ox*perimSegment*roundness*dir,y+oy*perimSegment*roundness*dir];\r\n this.v.o[i] = [x-ox*perimSegment*roundness*dir,y-oy*perimSegment*roundness*dir];\r\n this.v._length = numPts;*/\r\n longFlag = !longFlag;\r\n currentAng += angle*dir;\r\n }\r\n }\r\n\r\n function processKeys() {\r\n if(this.elem.globalData.frameId === this.frameId){\r\n return;\r\n }\r\n this.mdf = false;\r\n this.frameId = this.elem.globalData.frameId;\r\n var i, len = this.dynamicProperties.length;\r\n\r\n for(i=0;i<len;i+=1){\r\n this.dynamicProperties[i].getValue();\r\n if(this.dynamicProperties[i].mdf){\r\n this.mdf = true;\r\n }\r\n }\r\n if(this.mdf){\r\n this.convertToPath();\r\n }\r\n }\r\n\r\n return function StarShapeProperty(elem,data) {\r\n /*this.v = {\r\n v: [],\r\n i: [],\r\n o: [],\r\n c: true\r\n };*/\r\n this.v = shape_pool.newShape();\r\n this.v.setPathData(true, 0);\r\n this.elem = elem;\r\n this.comp = elem.comp;\r\n this.data = data;\r\n this.frameId = -1;\r\n this.d = data.d;\r\n this.dynamicProperties = [];\r\n this.mdf = false;\r\n this.getValue = processKeys;\r\n this.reset = resetShape;\r\n if(data.sy === 1){\r\n this.ir = PropertyFactory.getProp(elem,data.ir,0,0,this.dynamicProperties);\r\n this.is = PropertyFactory.getProp(elem,data.is,0,0.01,this.dynamicProperties);\r\n this.convertToPath = convertStarToPath;\r\n } else {\r\n this.convertToPath = convertPolygonToPath;\r\n }\r\n this.pt = PropertyFactory.getProp(elem,data.pt,0,0,this.dynamicProperties);\r\n this.p = PropertyFactory.getProp(elem,data.p,1,0,this.dynamicProperties);\r\n this.r = PropertyFactory.getProp(elem,data.r,0,degToRads,this.dynamicProperties);\r\n this.or = PropertyFactory.getProp(elem,data.or,0,0,this.dynamicProperties);\r\n this.os = PropertyFactory.getProp(elem,data.os,0,0.01,this.dynamicProperties);\r\n this.localShapeCollection = shapeCollection_pool.newShapeCollection();\r\n this.localShapeCollection.addShape(this.v);\r\n this.paths = this.localShapeCollection;\r\n if(this.dynamicProperties.length){\r\n this.k = true;\r\n }else{\r\n this.convertToPath();\r\n }\r\n }\r\n }());\r\n\r\n var RectShapeProperty = (function() {\r\n function processKeys(frameNum){\r\n if(this.elem.globalData.frameId === this.frameId){\r\n return;\r\n }\r\n this.mdf = false;\r\n this.frameId = this.elem.globalData.frameId;\r\n var i, len = this.dynamicProperties.length;\r\n\r\n for(i=0;i<len;i+=1){\r\n this.dynamicProperties[i].getValue(frameNum);\r\n if(this.dynamicProperties[i].mdf){\r\n this.mdf = true;\r\n }\r\n }\r\n if(this.mdf){\r\n this.convertRectToPath();\r\n }\r\n\r\n }\r\n\r\n function convertRectToPath(){\r\n var p0 = this.p.v[0], p1 = this.p.v[1], v0 = this.s.v[0]/2, v1 = this.s.v[1]/2;\r\n var round = bm_min(v0,v1,this.r.v);\r\n var cPoint = round*(1-roundCorner);\r\n this.v._length = 0;\r\n\r\n if(this.d === 2 || this.d === 1) {\r\n this.v.setTripleAt(p0+v0, p1-v1+round,p0+v0, p1-v1+round,p0+v0,p1-v1+cPoint,0, true);\r\n this.v.setTripleAt(p0+v0, p1+v1-round,p0+v0, p1+v1-cPoint,p0+v0, p1+v1-round,1, true);\r\n if(round!== 0){\r\n this.v.setTripleAt(p0+v0-round, p1+v1,p0+v0-round,p1+v1,p0+v0-cPoint,p1+v1,2, true);\r\n this.v.setTripleAt(p0-v0+round,p1+v1,p0-v0+cPoint,p1+v1,p0-v0+round,p1+v1,3, true);\r\n this.v.setTripleAt(p0-v0,p1+v1-round,p0-v0,p1+v1-round,p0-v0,p1+v1-cPoint,4, true);\r\n this.v.setTripleAt(p0-v0,p1-v1+round,p0-v0,p1-v1+cPoint,p0-v0,p1-v1+round,5, true);\r\n this.v.setTripleAt(p0-v0+round,p1-v1,p0-v0+round,p1-v1,p0-v0+cPoint,p1-v1,6, true);\r\n this.v.setTripleAt(p0+v0-round,p1-v1,p0+v0-cPoint,p1-v1,p0+v0-round,p1-v1,7, true);\r\n } else {\r\n this.v.setTripleAt(p0-v0,p1+v1,p0-v0+cPoint,p1+v1,p0-v0,p1+v1,2);\r\n this.v.setTripleAt(p0-v0,p1-v1,p0-v0,p1-v1+cPoint,p0-v0,p1-v1,3);\r\n }\r\n }else{\r\n this.v.setTripleAt(p0+v0,p1-v1+round,p0+v0,p1-v1+cPoint,p0+v0,p1-v1+round,0, true);\r\n if(round!== 0){\r\n this.v.setTripleAt(p0+v0-round,p1-v1,p0+v0-round,p1-v1,p0+v0-cPoint,p1-v1,1, true);\r\n this.v.setTripleAt(p0-v0+round,p1-v1,p0-v0+cPoint,p1-v1,p0-v0+round,p1-v1,2, true);\r\n this.v.setTripleAt(p0-v0,p1-v1+round,p0-v0,p1-v1+round,p0-v0,p1-v1+cPoint,3, true);\r\n this.v.setTripleAt(p0-v0,p1+v1-round,p0-v0,p1+v1-cPoint,p0-v0,p1+v1-round,4, true);\r\n this.v.setTripleAt(p0-v0+round,p1+v1,p0-v0+round,p1+v1,p0-v0+cPoint,p1+v1,5, true);\r\n this.v.setTripleAt(p0+v0-round,p1+v1,p0+v0-cPoint,p1+v1,p0+v0-round,p1+v1,6, true);\r\n this.v.setTripleAt(p0+v0,p1+v1-round,p0+v0,p1+v1-round,p0+v0,p1+v1-cPoint,7, true);\r\n } else {\r\n this.v.setTripleAt(p0-v0,p1-v1,p0-v0+cPoint,p1-v1,p0-v0,p1-v1,1, true);\r\n this.v.setTripleAt(p0-v0,p1+v1,p0-v0,p1+v1-cPoint,p0-v0,p1+v1,2, true);\r\n this.v.setTripleAt(p0+v0,p1+v1,p0+v0-cPoint,p1+v1,p0+v0,p1+v1,3, true);\r\n\r\n }\r\n }\r\n }\r\n\r\n return function RectShapeProperty(elem,data) {\r\n this.v = shape_pool.newShape();\r\n this.v.c = true;\r\n this.localShapeCollection = shapeCollection_pool.newShapeCollection();\r\n this.localShapeCollection.addShape(this.v);\r\n this.paths = this.localShapeCollection;\r\n this.elem = elem;\r\n this.comp = elem.comp;\r\n this.frameId = -1;\r\n this.d = data.d;\r\n this.dynamicProperties = [];\r\n this.mdf = false;\r\n this.getValue = processKeys;\r\n this.convertRectToPath = convertRectToPath;\r\n this.reset = resetShape;\r\n this.p = PropertyFactory.getProp(elem,data.p,1,0,this.dynamicProperties);\r\n this.s = PropertyFactory.getProp(elem,data.s,1,0,this.dynamicProperties);\r\n this.r = PropertyFactory.getProp(elem,data.r,0,0,this.dynamicProperties);\r\n if(this.dynamicProperties.length){\r\n this.k = true;\r\n }else{\r\n this.convertRectToPath();\r\n }\r\n }\r\n }());\r\n\r\n function getShapeProp(elem,data,type, arr){\r\n var prop;\r\n if(type === 3 || type === 4){\r\n var dataProp = type === 3 ? data.pt : data.ks;\r\n var keys = dataProp.k;\r\n if(dataProp.a === 1 || keys.length){\r\n prop = new KeyframedShapeProperty(elem, data, type);\r\n }else{\r\n prop = new ShapeProperty(elem, data, type);\r\n }\r\n }else if(type === 5){\r\n prop = new RectShapeProperty(elem, data);\r\n }else if(type === 6){\r\n prop = new EllShapeProperty(elem, data);\r\n }else if(type === 7){\r\n prop = new StarShapeProperty(elem, data);\r\n }\r\n if(prop.k){\r\n arr.push(prop);\r\n }\r\n return prop;\r\n }\r\n\r\n function getConstructorFunction() {\r\n return ShapeProperty;\r\n }\r\n\r\n function getKeyframedConstructorFunction() {\r\n return KeyframedShapeProperty;\r\n }\r\n\r\n var ob = {};\r\n ob.getShapeProp = getShapeProp;\r\n ob.getConstructorFunction = getConstructorFunction;\r\n ob.getKeyframedConstructorFunction = getKeyframedConstructorFunction;\r\n return ob;\r\n}());\nvar ShapeModifiers = (function(){\r\n var ob = {};\r\n var modifiers = {};\r\n ob.registerModifier = registerModifier;\r\n ob.getModifier = getModifier;\r\n\r\n function registerModifier(nm,factory){\r\n if(!modifiers[nm]){\r\n modifiers[nm] = factory;\r\n }\r\n }\r\n\r\n function getModifier(nm,elem, data, dynamicProperties){\r\n return new modifiers[nm](elem, data, dynamicProperties);\r\n }\r\n\r\n return ob;\r\n}());\r\n\r\nfunction ShapeModifier(){}\r\nShapeModifier.prototype.initModifierProperties = function(){};\r\nShapeModifier.prototype.addShapeToModifier = function(){};\r\nShapeModifier.prototype.addShape = function(data){\r\n if(!this.closed){\r\n this.shapes.push({shape:data.sh, data: data, localShapeCollection:shapeCollection_pool.newShapeCollection()});\r\n this.addShapeToModifier(data.sh);\r\n }\r\n}\r\nShapeModifier.prototype.init = function(elem,data,dynamicProperties){\r\n this.elem = elem;\r\n this.frameId = -1;\r\n this.shapes = [];\r\n this.dynamicProperties = [];\r\n this.mdf = false;\r\n this.closed = false;\r\n this.k = false;\r\n this.comp = elem.comp;\r\n this.initModifierProperties(elem,data);\r\n if(this.dynamicProperties.length){\r\n this.k = true;\r\n dynamicProperties.push(this);\r\n }else{\r\n this.getValue(true);\r\n }\r\n}\nfunction TrimModifier(){};\r\nextendPrototype(ShapeModifier,TrimModifier);\r\nTrimModifier.prototype.processKeys = function(forceRender){\r\n if(this.elem.globalData.frameId === this.frameId && !forceRender){\r\n return;\r\n }\r\n this.mdf = forceRender ? true : false;\r\n this.frameId = this.elem.globalData.frameId;\r\n var i, len = this.dynamicProperties.length;\r\n\r\n for(i=0;i<len;i+=1){\r\n this.dynamicProperties[i].getValue();\r\n if(this.dynamicProperties[i].mdf){\r\n this.mdf = true;\r\n }\r\n }\r\n if(this.mdf || forceRender){\r\n var o = (this.o.v%360)/360;\r\n if(o < 0){\r\n o += 1;\r\n }\r\n var s = this.s.v + o;\r\n var e = this.e.v + o;\r\n if(s == e){\r\n\r\n }\r\n if(s>e){\r\n var _s = s;\r\n s = e;\r\n e = _s;\r\n }\r\n this.sValue = s;\r\n this.eValue = e;\r\n this.oValue = o;\r\n }\r\n}\r\nTrimModifier.prototype.initModifierProperties = function(elem,data){\r\n this.sValue = 0;\r\n this.eValue = 0;\r\n this.oValue = 0;\r\n this.getValue = this.processKeys;\r\n this.s = PropertyFactory.getProp(elem,data.s,0,0.01,this.dynamicProperties);\r\n this.e = PropertyFactory.getProp(elem,data.e,0,0.01,this.dynamicProperties);\r\n this.o = PropertyFactory.getProp(elem,data.o,0,0,this.dynamicProperties);\r\n this.m = data.m;\r\n if(!this.dynamicProperties.length){\r\n this.getValue(true);\r\n }\r\n};\r\n\r\nTrimModifier.prototype.calculateShapeEdges = function(s, e, shapeLength, addedLength, totalModifierLength) {\r\n var segments = []\r\n if(e <= 1){\r\n segments.push({\r\n s: s,\r\n e: e\r\n })\r\n }else if(s >= 1){\r\n segments.push({\r\n s: s - 1,\r\n e: e - 1\r\n })\r\n }else{\r\n segments.push({\r\n s: s,\r\n e: 1\r\n })\r\n segments.push({\r\n s: 0,\r\n e: e - 1\r\n })\r\n }\r\n var shapeSegments = [];\r\n var i, len = segments.length, segmentOb;\r\n for(i = 0; i < len; i += 1) {\r\n segmentOb = segments[i];\r\n if (segmentOb.e * totalModifierLength < addedLength || segmentOb.s * totalModifierLength > addedLength + shapeLength) {\r\n \r\n } else {\r\n var shapeS, shapeE;\r\n if(segmentOb.s * totalModifierLength <= addedLength) {\r\n shapeS = 0;\r\n } else {\r\n shapeS = (segmentOb.s * totalModifierLength - addedLength) / shapeLength;\r\n }\r\n if(segmentOb.e * totalModifierLength >= addedLength + shapeLength) {\r\n shapeE = 1;\r\n } else {\r\n shapeE = ((segmentOb.e * totalModifierLength - addedLength) / shapeLength);\r\n }\r\n shapeSegments.push([shapeS, shapeE]);\r\n }\r\n }\r\n if(!shapeSegments.length){\r\n shapeSegments.push([0,0]);\r\n }\r\n return shapeSegments;\r\n}\r\n\r\nTrimModifier.prototype.processShapes = function(firstFrame){\r\n var shapePaths;\r\n var i, len = this.shapes.length;\r\n var j, jLen;\r\n var s = this.sValue;\r\n var e = this.eValue;\r\n var pathsData,pathData, totalShapeLength, totalModifierLength = 0;\r\n\r\n if(e === s){\r\n for(i=0;i<len;i+=1){\r\n this.shapes[i].localShapeCollection.releaseShapes();\r\n this.shapes[i].shape.mdf = true;\r\n this.shapes[i].shape.paths = this.shapes[i].localShapeCollection;\r\n }\r\n } else if(!((e === 1 && s === 0) || (e===0 && s === 1))){\r\n var segments = [], shapeData, localShapeCollection;\r\n for(i=0;i<len;i+=1){\r\n shapeData = this.shapes[i];\r\n if(!shapeData.shape.mdf && !this.mdf && !firstFrame && this.m !== 2){\r\n shapeData.shape.paths = shapeData.localShapeCollection;\r\n } else {\r\n shapePaths = shapeData.shape.paths;\r\n jLen = shapePaths._length;\r\n totalShapeLength = 0;\r\n if(!shapeData.shape.mdf && shapeData.pathsData){\r\n totalShapeLength = shapeData.totalShapeLength;\r\n } else {\r\n pathsData = [];\r\n for(j=0;j<jLen;j+=1){\r\n pathData = bez.getSegmentsLength(shapePaths.shapes[j]);\r\n pathsData.push(pathData);\r\n totalShapeLength += pathData.totalLength;\r\n }\r\n shapeData.totalShapeLength = totalShapeLength;\r\n shapeData.pathsData = pathsData;\r\n }\r\n\r\n totalModifierLength += totalShapeLength;\r\n shapeData.shape.mdf = true;\r\n }\r\n }\r\n var shapeS = s, shapeE = e, addedLength = 0;\r\n var j, jLen;\r\n for(i = len - 1; i >= 0; i -= 1){\r\n shapeData = this.shapes[i];\r\n if (shapeData.shape.mdf) {\r\n localShapeCollection = shapeData.localShapeCollection;\r\n localShapeCollection.releaseShapes();\r\n if(this.m === 2 && len > 1) {\r\n var edges = this.calculateShapeEdges(s, e, shapeData.totalShapeLength, addedLength, totalModifierLength);\r\n addedLength += shapeData.totalShapeLength;\r\n } else {\r\n edges = [[shapeS, shapeE]]\r\n }\r\n jLen = edges.length;\r\n for (j = 0; j < jLen; j += 1) {\r\n shapeS = edges[j][0];\r\n shapeE = edges[j][1];\r\n segments.length = 0;\r\n if(shapeE <= 1){\r\n segments.push({\r\n s:shapeData.totalShapeLength * shapeS,\r\n e:shapeData.totalShapeLength * shapeE\r\n })\r\n }else if(shapeS >= 1){\r\n segments.push({\r\n s:shapeData.totalShapeLength * (shapeS - 1),\r\n e:shapeData.totalShapeLength * (shapeE - 1)\r\n })\r\n }else{\r\n segments.push({\r\n s:shapeData.totalShapeLength * shapeS,\r\n e:shapeData.totalShapeLength\r\n })\r\n segments.push({\r\n s:0,\r\n e:shapeData.totalShapeLength*(shapeE - 1)\r\n })\r\n }\r\n var newShapesData = this.addShapes(shapeData,segments[0]);\r\n if (segments[0].s !== segments[0].e) {\r\n var lastPos;\r\n if(segments.length > 1){\r\n if(shapeData.shape.v.c){\r\n var lastShape = newShapesData.pop();\r\n this.addPaths(newShapesData, localShapeCollection);\r\n newShapesData = this.addShapes(shapeData,segments[1], lastShape);\r\n } else {\r\n this.addPaths(newShapesData, localShapeCollection);\r\n newShapesData = this.addShapes(shapeData,segments[1]);\r\n }\r\n } \r\n this.addPaths(newShapesData, localShapeCollection);\r\n }\r\n \r\n }\r\n shapeData.shape.paths = localShapeCollection;\r\n }\r\n }\r\n } else if(this.mdf){\r\n for(i=0;i<len;i+=1){\r\n this.shapes[i].shape.mdf = true;\r\n }\r\n }\r\n if(!this.dynamicProperties.length){\r\n this.mdf = false;\r\n }\r\n}\r\n\r\nTrimModifier.prototype.addPaths = function(newPaths, localShapeCollection) {\r\n var i, len = newPaths.length;\r\n for(i = 0; i < len; i += 1) {\r\n localShapeCollection.addShape(newPaths[i])\r\n }\r\n}\r\n\r\nTrimModifier.prototype.addSegment = function(pt1,pt2,pt3,pt4,shapePath,pos, newShape) {\r\n /*console.log(pt1, 'vertex: v, at: ', pos);\r\n console.log(pt2, 'vertex: o, at: ', pos);\r\n console.log(pt3, 'vertex: i, at: ', pos + 1);\r\n console.log(pt4, 'vertex: v, at: ', pos + 1);\r\n console.log('newShape: ', newShape);*/\r\n shapePath.setXYAt(pt2[0],pt2[1],'o',pos);\r\n shapePath.setXYAt(pt3[0],pt3[1],'i',pos + 1);\r\n if(newShape){\r\n shapePath.setXYAt(pt1[0],pt1[1],'v',pos);\r\n }\r\n shapePath.setXYAt(pt4[0],pt4[1],'v',pos + 1);\r\n}\r\n\r\nTrimModifier.prototype.addShapes = function(shapeData, shapeSegment, shapePath){\r\n var pathsData = shapeData.pathsData;\r\n var shapePaths = shapeData.shape.paths.shapes;\r\n var i, len = shapeData.shape.paths._length, j, jLen;\r\n var addedLength = 0;\r\n var currentLengthData,segmentCount;\r\n var lengths;\r\n var segment;\r\n var shapes = [];\r\n var initPos;\r\n var newShape = true;\r\n if(!shapePath){\r\n shapePath = shape_pool.newShape();\r\n segmentCount = 0;\r\n initPos = 0;\r\n } else {\r\n segmentCount = shapePath._length;\r\n initPos = shapePath._length;\r\n }\r\n shapes.push(shapePath);\r\n for(i=0;i<len;i+=1){\r\n lengths = pathsData[i].lengths;\r\n shapePath.c = shapePaths[i].c;\r\n jLen = shapePaths[i].c ? lengths.length : lengths.length + 1;\r\n for(j=1;j<jLen;j+=1){\r\n currentLengthData = lengths[j-1];\r\n if(addedLength + currentLengthData.addedLength < shapeSegment.s){\r\n addedLength += currentLengthData.addedLength;\r\n shapePath.c = false;\r\n } else if(addedLength > shapeSegment.e){\r\n shapePath.c = false;\r\n break;\r\n } else {\r\n if(shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + currentLengthData.addedLength){\r\n this.addSegment(shapePaths[i].v[j-1],shapePaths[i].o[j-1],shapePaths[i].i[j],shapePaths[i].v[j],shapePath,segmentCount,newShape);\r\n newShape = false;\r\n } else {\r\n segment = bez.getNewSegment(shapePaths[i].v[j-1],shapePaths[i].v[j],shapePaths[i].o[j-1],shapePaths[i].i[j], (shapeSegment.s - addedLength)/currentLengthData.addedLength,(shapeSegment.e - addedLength)/currentLengthData.addedLength, lengths[j-1]);\r\n this.addSegment(segment.pt1,segment.pt3,segment.pt4,segment.pt2,shapePath,segmentCount,newShape);\r\n newShape = false;\r\n shapePath.c = false;\r\n }\r\n addedLength += currentLengthData.addedLength;\r\n segmentCount += 1;\r\n }\r\n }\r\n if(shapePaths[i].c){\r\n currentLengthData = lengths[j-1];\r\n if(addedLength <= shapeSegment.e){\r\n var segmentLength = lengths[j-1].addedLength;\r\n if(shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + segmentLength){\r\n this.addSegment(shapePaths[i].v[j-1],shapePaths[i].o[j-1],shapePaths[i].i[0],shapePaths[i].v[0],shapePath,segmentCount,newShape);\r\n newShape = false;\r\n }else{\r\n segment = bez.getNewSegment(shapePaths[i].v[j-1],shapePaths[i].v[0],shapePaths[i].o[j-1],shapePaths[i].i[0], (shapeSegment.s - addedLength)/segmentLength,(shapeSegment.e - addedLength)/segmentLength, lengths[j-1]);\r\n this.addSegment(segment.pt1,segment.pt3,segment.pt4,segment.pt2,shapePath,segmentCount,newShape);\r\n newShape = false;\r\n shapePath.c = false;\r\n }\r\n } else {\r\n shapePath.c = false;\r\n }\r\n addedLength += currentLengthData.addedLength;\r\n segmentCount += 1;\r\n }\r\n if(shapePath._length){\r\n shapePath.setXYAt(shapePath.v[initPos][0],shapePath.v[initPos][1],'i',initPos);\r\n shapePath.setXYAt(shapePath.v[shapePath._length - 1][0],shapePath.v[shapePath._length - 1][1],'o',shapePath._length - 1);\r\n }\r\n if(addedLength > shapeSegment.e){\r\n break;\r\n }\r\n if(i<len-1){\r\n shapePath = shape_pool.newShape();\r\n newShape = true;\r\n shapes.push(shapePath);\r\n segmentCount = 0;\r\n }\r\n }\r\n return shapes;\r\n\r\n}\r\n\r\n\r\nShapeModifiers.registerModifier('tm',TrimModifier);\nfunction RoundCornersModifier(){};\r\nextendPrototype(ShapeModifier,RoundCornersModifier);\r\nRoundCornersModifier.prototype.processKeys = function(forceRender){\r\n if(this.elem.globalData.frameId === this.frameId && !forceRender){\r\n return;\r\n }\r\n this.mdf = forceRender ? true : false;\r\n this.frameId = this.elem.globalData.frameId;\r\n var i, len = this.dynamicProperties.length;\r\n\r\n for(i=0;i<len;i+=1){\r\n this.dynamicProperties[i].getValue();\r\n if(this.dynamicProperties[i].mdf){\r\n this.mdf = true;\r\n }\r\n }\r\n}\r\nRoundCornersModifier.prototype.initModifierProperties = function(elem,data){\r\n this.getValue = this.processKeys;\r\n this.rd = PropertyFactory.getProp(elem,data.r,0,null,this.dynamicProperties);\r\n if(!this.dynamicProperties.length){\r\n this.getValue(true);\r\n }\r\n};\r\n\r\nRoundCornersModifier.prototype.processPath = function(path, round){\r\n var cloned_path = shape_pool.newShape();\r\n cloned_path.c = path.c;\r\n var i, len = path._length;\r\n var currentV,currentI,currentO,closerV, newV,newO,newI,distance,newPosPerc,index = 0;\r\n var vX,vY,oX,oY,iX,iY;\r\n for(i=0;i<len;i+=1){\r\n currentV = path.v[i];\r\n currentO = path.o[i];\r\n currentI = path.i[i];\r\n if(currentV[0]===currentO[0] && currentV[1]===currentO[1] && currentV[0]===currentI[0] && currentV[1]===currentI[1]){\r\n if((i===0 || i === len - 1) && !path.c){\r\n cloned_path.setTripleAt(currentV[0],currentV[1],currentO[0],currentO[1],currentI[0],currentI[1],index);\r\n /*cloned_path.v[index] = currentV;\r\n cloned_path.o[index] = currentO;\r\n cloned_path.i[index] = currentI;*/\r\n index += 1;\r\n } else {\r\n if(i===0){\r\n closerV = path.v[len-1];\r\n } else {\r\n closerV = path.v[i-1];\r\n }\r\n distance = Math.sqrt(Math.pow(currentV[0]-closerV[0],2)+Math.pow(currentV[1]-closerV[1],2));\r\n newPosPerc = distance ? Math.min(distance/2,round)/distance : 0;\r\n vX = iX = currentV[0]+(closerV[0]-currentV[0])*newPosPerc;\r\n vY = iY = currentV[1]-(currentV[1]-closerV[1])*newPosPerc;\r\n oX = vX-(vX-currentV[0])*roundCorner;\r\n oY = vY-(vY-currentV[1])*roundCorner;\r\n cloned_path.setTripleAt(vX,vY,oX,oY,iX,iY,index);\r\n index += 1;\r\n\r\n if(i === len - 1){\r\n closerV = path.v[0];\r\n } else {\r\n closerV = path.v[i+1];\r\n }\r\n distance = Math.sqrt(Math.pow(currentV[0]-closerV[0],2)+Math.pow(currentV[1]-closerV[1],2));\r\n newPosPerc = distance ? Math.min(distance/2,round)/distance : 0;\r\n vX = oX = currentV[0]+(closerV[0]-currentV[0])*newPosPerc;\r\n vY = oY = currentV[1]+(closerV[1]-currentV[1])*newPosPerc;\r\n iX = vX-(vX-currentV[0])*roundCorner;\r\n iY = vY-(vY-currentV[1])*roundCorner;\r\n cloned_path.setTripleAt(vX,vY,oX,oY,iX,iY,index);\r\n index += 1;\r\n }\r\n } else {\r\n cloned_path.setTripleAt(path.v[i][0],path.v[i][1],path.o[i][0],path.o[i][1],path.i[i][0],path.i[i][1],index);\r\n index += 1;\r\n }\r\n }\r\n return cloned_path;\r\n}\r\n\r\nRoundCornersModifier.prototype.processShapes = function(firstFrame){\r\n var shapePaths;\r\n var i, len = this.shapes.length;\r\n var j, jLen;\r\n var rd = this.rd.v;\r\n\r\n if(rd !== 0){\r\n var shapeData, newPaths, localShapeCollection;\r\n for(i=0;i<len;i+=1){\r\n shapeData = this.shapes[i];\r\n newPaths = shapeData.shape.paths;\r\n localShapeCollection = shapeData.localShapeCollection;\r\n if(!(!shapeData.shape.mdf && !this.mdf && !firstFrame)){\r\n localShapeCollection.releaseShapes();\r\n shapeData.shape.mdf = true;\r\n shapePaths = shapeData.shape.paths.shapes;\r\n jLen = shapeData.shape.paths._length;\r\n for(j=0;j<jLen;j+=1){\r\n localShapeCollection.addShape(this.processPath(shapePaths[j],rd));\r\n }\r\n }\r\n shapeData.shape.paths = shapeData.localShapeCollection;\r\n }\r\n\r\n }\r\n if(!this.dynamicProperties.length){\r\n this.mdf = false;\r\n }\r\n}\r\n\r\n\r\nShapeModifiers.registerModifier('rd',RoundCornersModifier);\nfunction RepeaterModifier(){};\r\nRepeaterModifier.prototype.processKeys = function(forceRender){\r\n if(this.elem.globalData.frameId === this.frameId && !forceRender){\r\n return;\r\n }\r\n this.mdf = forceRender ? true : false;\r\n var i, len = this.dynamicProperties.length;\r\n\r\n for(i=0;i<len;i+=1){\r\n this.dynamicProperties[i].getValue();\r\n if(this.dynamicProperties[i].mdf){\r\n this.mdf = true;\r\n }\r\n }\r\n};\r\n\r\nRepeaterModifier.prototype.initModifierProperties = function(elem,data){\r\n this.getValue = this.processKeys;\r\n this.c = PropertyFactory.getProp(elem,data.c,0,null,this.dynamicProperties);\r\n this.o = PropertyFactory.getProp(elem,data.o,0,null,this.dynamicProperties);\r\n this.tr = PropertyFactory.getProp(elem,data.tr,2,null,this.dynamicProperties);\r\n this.data = data;\r\n if(!this.dynamicProperties.length){\r\n this.getValue(true);\r\n }\r\n this.pMatrix = new Matrix();\r\n this.rMatrix = new Matrix();\r\n this.sMatrix = new Matrix();\r\n this.tMatrix = new Matrix();\r\n this.matrix = new Matrix();\r\n};\r\n\r\nRepeaterModifier.prototype.applyTransforms = function(pMatrix, rMatrix, sMatrix, transform, perc, inv){\r\n var dir = inv ? -1 : 1;\r\n var scaleX = transform.s.v[0] + (1 - transform.s.v[0]) * (1 - perc);\r\n var scaleY = transform.s.v[1] + (1 - transform.s.v[1]) * (1 - perc);\r\n pMatrix.translate(transform.p.v[0] * dir * perc, transform.p.v[1] * dir * perc, transform.p.v[2]);\r\n rMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\r\n rMatrix.rotate(-transform.r.v * dir * perc);\r\n rMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\r\n sMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\r\n sMatrix.scale(inv ? 1/scaleX : scaleX, inv ? 1/scaleY : scaleY);\r\n sMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\r\n}\r\n\r\nRepeaterModifier.prototype.init = function(elem, arr, pos, elemsData, dynamicProperties) {\r\n this.elem = elem;\r\n this.arr = arr;\r\n this.pos = pos;\r\n this.elemsData = elemsData;\r\n this._currentCopies = 0;\r\n this._elements = [];\r\n this._groups = [];\r\n this.dynamicProperties = [];\r\n this.frameId = -1;\r\n this.initModifierProperties(elem,arr[pos]);\r\n var cont = 0;\r\n while(pos>0){\r\n pos -= 1;\r\n //this._elements.unshift(arr.splice(pos,1)[0]);\r\n this._elements.unshift(arr[pos]);\r\n cont += 1;\r\n }\r\n if(this.dynamicProperties.length){\r\n this.k = true;\r\n dynamicProperties.push(this);\r\n }else{\r\n this.getValue(true);\r\n }\r\n}\r\n\r\nRepeaterModifier.prototype.resetElements = function(elements){\r\n var i, len = elements.length;\r\n for(i = 0; i < len; i += 1) {\r\n elements[i]._processed = false;\r\n if(elements[i].ty === 'gr'){\r\n this.resetElements(elements[i].it);\r\n }\r\n }\r\n}\r\n\r\nRepeaterModifier.prototype.cloneElements = function(elements){\r\n var i, len = elements.length;\r\n var newElements = JSON.parse(JSON.stringify(elements));\r\n this.resetElements(newElements);\r\n return newElements;\r\n}\r\n\r\nRepeaterModifier.prototype.changeGroupRender = function(elements, renderFlag) {\r\n var i, len = elements.length;\r\n for(i = 0; i < len ; i += 1) {\r\n elements[i]._render = renderFlag;\r\n if(elements[i].ty === 'gr') {\r\n this.changeGroupRender(elements[i].it, renderFlag);\r\n }\r\n }\r\n}\r\n\r\nRepeaterModifier.prototype.processShapes = function(firstFrame){\r\n\r\n if(this.elem.globalData.frameId === this.frameId){\r\n return;\r\n }\r\n this.frameId = this.elem.globalData.frameId;\r\n if(!this.dynamicProperties.length && !firstFrame){\r\n this.mdf = false;\r\n }\r\n if(this.mdf){\r\n var copies = Math.ceil(this.c.v);\r\n if(this._groups.length < copies){\r\n while(this._groups.length < copies){\r\n var group = {\r\n it:this.cloneElements(this._elements),\r\n ty:'gr'\r\n }\r\n group.it.push({\"a\":{\"a\":0,\"ix\":1,\"k\":[0,0]},\"nm\":\"Transform\",\"o\":{\"a\":0,\"ix\":7,\"k\":100},\"p\":{\"a\":0,\"ix\":2,\"k\":[0,0]},\"r\":{\"a\":0,\"ix\":6,\"k\":0},\"s\":{\"a\":0,\"ix\":3,\"k\":[100,100]},\"sa\":{\"a\":0,\"ix\":5,\"k\":0},\"sk\":{\"a\":0,\"ix\":4,\"k\":0},\"ty\":\"tr\"});\r\n \r\n this.arr.splice(0,0,group);\r\n this._groups.splice(0,0,group);\r\n this._currentCopies += 1;\r\n }\r\n this.elem.reloadShapes();\r\n }\r\n var i, cont = 0, renderFlag;\r\n for(i = 0; i <= this._groups.length - 1; i += 1){\r\n renderFlag = cont < copies;\r\n this._groups[i]._render = renderFlag;\r\n this.changeGroupRender(this._groups[i].it, renderFlag);\r\n cont += 1;\r\n }\r\n \r\n this._currentCopies = copies;\r\n this.elem.firstFrame = true;\r\n ////\r\n\r\n var offset = this.o.v;\r\n var offsetModulo = offset%1;\r\n var roundOffset = offset > 0 ? Math.floor(offset) : Math.ceil(offset);\r\n var k;\r\n var tMat = this.tr.v.props;\r\n var pProps = this.pMatrix.props;\r\n var rProps = this.rMatrix.props;\r\n var sProps = this.sMatrix.props;\r\n this.pMatrix.reset();\r\n this.rMatrix.reset();\r\n this.sMatrix.reset();\r\n this.tMatrix.reset();\r\n this.matrix.reset();\r\n var iteration = 0;\r\n\r\n if(offset > 0) {\r\n while(iteration<roundOffset){\r\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\r\n iteration += 1;\r\n }\r\n if(offsetModulo){\r\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, offsetModulo, false);\r\n iteration += offsetModulo;\r\n }\r\n } else if(offset < 0) {\r\n while(iteration>roundOffset){\r\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, true);\r\n iteration -= 1;\r\n }\r\n if(offsetModulo){\r\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, - offsetModulo, true);\r\n iteration -= offsetModulo;\r\n }\r\n }\r\n i = this.data.m === 1 ? 0 : this._currentCopies - 1;\r\n var dir = this.data.m === 1 ? 1 : -1;\r\n cont = this._currentCopies;\r\n while(cont){\r\n if(iteration !== 0){\r\n if((i !== 0 && dir === 1) || (i !== this._currentCopies - 1 && dir === -1)){\r\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\r\n }\r\n this.matrix.transform(rProps[0],rProps[1],rProps[2],rProps[3],rProps[4],rProps[5],rProps[6],rProps[7],rProps[8],rProps[9],rProps[10],rProps[11],rProps[12],rProps[13],rProps[14],rProps[15]);\r\n this.matrix.transform(sProps[0],sProps[1],sProps[2],sProps[3],sProps[4],sProps[5],sProps[6],sProps[7],sProps[8],sProps[9],sProps[10],sProps[11],sProps[12],sProps[13],sProps[14],sProps[15]);\r\n this.matrix.transform(pProps[0],pProps[1],pProps[2],pProps[3],pProps[4],pProps[5],pProps[6],pProps[7],pProps[8],pProps[9],pProps[10],pProps[11],pProps[12],pProps[13],pProps[14],pProps[15]);\r\n var items = this.elemsData[i].it;\r\n var itemsTransform = items[items.length - 1].transform.mProps.v.props;\r\n var j, jLen = itemsTransform.length;\r\n for(j=0;j<jLen;j+=1) {\r\n itemsTransform[j] = this.matrix.props[j];\r\n }\r\n this.matrix.reset();\r\n } else {\r\n this.matrix.reset();\r\n var items = this.elemsData[i].it;\r\n var itemsTransform = items[items.length - 1].transform.mProps.v.props;\r\n var j, jLen = itemsTransform.length;\r\n for(j=0;j<jLen;j+=1) {\r\n itemsTransform[j] = this.matrix.props[j];\r\n }\r\n }\r\n iteration += 1;\r\n cont -= 1;\r\n i += dir;\r\n }\r\n }\r\n}\r\n\r\nRepeaterModifier.prototype.addShape = function(){}\r\n\r\nShapeModifiers.registerModifier('rp',RepeaterModifier);\nfunction ShapeCollection(){\r\n\tthis._length = 0;\r\n\tthis._maxLength = 4;\r\n\tthis.shapes = Array.apply(null,{length:this._maxLength});\r\n};\r\n\r\nShapeCollection.prototype.addShape = function(shapeData){\r\n\tif(this._length === this._maxLength){\r\n\t\tthis.shapes = this.shapes.concat(Array.apply(null,{length:this._maxLength}));\r\n\t\tthis._maxLength *= 2;\r\n\t}\r\n\tthis.shapes[this._length] = shapeData;\r\n\tthis._length += 1;\r\n};\r\n\r\nShapeCollection.prototype.releaseShapes = function(){\r\n\tvar i;\r\n\tfor(i = 0; i < this._length; i += 1) {\r\n\t\tshape_pool.release(this.shapes[i]);\r\n\t}\r\n\tthis._length = 0;\r\n};\nvar ImagePreloader = (function(){\r\n\r\n var imagesLoadedCb;\r\n\r\n function imageLoaded(){\r\n this.loadedAssets += 1;\r\n if(this.loadedAssets === this.totalImages){\r\n if(imagesLoadedCb) {\r\n imagesLoadedCb(null);\r\n }\r\n }\r\n }\r\n\r\n function getAssetsPath(assetData){\r\n var path = '';\r\n if(this.assetsPath){\r\n var imagePath = assetData.p;\r\n if(imagePath.indexOf('images/') !== -1){\r\n imagePath = imagePath.split('/')[1];\r\n }\r\n path = this.assetsPath + imagePath;\r\n } else {\r\n path = this.path;\r\n path += assetData.u ? assetData.u : '';\r\n path += assetData.p;\r\n }\r\n return path;\r\n }\r\n\r\n function loadImage(path){\r\n var img = document.createElement('img');\r\n img.addEventListener('load', imageLoaded.bind(this), false);\r\n img.addEventListener('error', imageLoaded.bind(this), false);\r\n img.src = path;\r\n }\r\n function loadAssets(assets, cb){\r\n imagesLoadedCb = cb;\r\n this.totalAssets = assets.length;\r\n var i;\r\n for(i=0;i<this.totalAssets;i+=1){\r\n if(!assets[i].layers){\r\n loadImage.bind(this)(getAssetsPath.bind(this)(assets[i]));\r\n this.totalImages += 1;\r\n }\r\n }\r\n }\r\n\r\n function setPath(path){\r\n this.path = path || '';\r\n }\r\n\r\n function setAssetsPath(path){\r\n this.assetsPath = path || '';\r\n }\r\n\r\n return function ImagePreloader(){\r\n this.loadAssets = loadAssets;\r\n this.setAssetsPath = setAssetsPath;\r\n this.setPath = setPath;\r\n this.assetsPath = '';\r\n this.path = '';\r\n this.totalAssets = 0;\r\n this.totalImages = 0;\r\n this.loadedAssets = 0;\r\n }\r\n}());\nvar featureSupport = (function(){\r\n\tvar ob = {\r\n\t\tmaskType: true\r\n\t}\r\n\tif (/MSIE 10/i.test(navigator.userAgent) || /MSIE 9/i.test(navigator.userAgent) || /rv:11.0/i.test(navigator.userAgent) || /Edge\\/\\d./i.test(navigator.userAgent)) {\r\n\t ob.maskType = false;\r\n\t}\r\n\treturn ob;\r\n}());\nvar filtersFactory = (function(){\r\n\tvar ob = {};\r\n\tob.createFilter = createFilter;\r\n\tob.createAlphaToLuminanceFilter = createAlphaToLuminanceFilter;\r\n\r\n\tfunction createFilter(filId){\r\n \tvar fil = document.createElementNS(svgNS,'filter');\r\n \tfil.setAttribute('id',filId);\r\n fil.setAttribute('filterUnits','objectBoundingBox');\r\n fil.setAttribute('x','0%');\r\n fil.setAttribute('y','0%');\r\n fil.setAttribute('width','100%');\r\n fil.setAttribute('height','100%');\r\n return fil;\r\n\t}\r\n\r\n\tfunction createAlphaToLuminanceFilter(){\r\n var feColorMatrix = document.createElementNS(svgNS,'feColorMatrix');\r\n feColorMatrix.setAttribute('type','matrix');\r\n feColorMatrix.setAttribute('color-interpolation-filters','sRGB');\r\n feColorMatrix.setAttribute('values','0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1');\r\n return feColorMatrix;\r\n\t}\r\n\r\n\treturn ob;\r\n}())\nfunction TextAnimatorProperty(textData, renderType, elem){\r\n this.mdf = false;\r\n this._firstFrame = true;\r\n\tthis._hasMaskedPath = false;\r\n\tthis._frameId = -1;\r\n\tthis._dynamicProperties = [];\r\n\tthis._textData = textData;\r\n\tthis._renderType = renderType;\r\n\tthis._elem = elem;\r\n\tthis._animatorsData = Array.apply(null,{length:this._textData.a.length});\r\n\tthis._pathData = {}\r\n\tthis._moreOptions = {\r\n\t\talignment: {}\r\n\t};\r\n\tthis.renderedLetters = [];\r\n this.lettersChangedFlag = false;\r\n\r\n}\r\n\r\nTextAnimatorProperty.prototype.searchProperties = function(dynamicProperties){\r\n var i, len = this._textData.a.length, animatorData, animatorProps;\r\n var getProp = PropertyFactory.getProp;\r\n for(i=0;i<len;i+=1){\r\n animatorProps = this._textData.a[i];\r\n animatorData = {\r\n a: {},\r\n s: {}\r\n };\r\n if('r' in animatorProps.a) {\r\n animatorData.a.r = getProp(this._elem,animatorProps.a.r,0,degToRads,this._dynamicProperties);\r\n }\r\n if('rx' in animatorProps.a) {\r\n animatorData.a.rx = getProp(this._elem,animatorProps.a.rx,0,degToRads,this._dynamicProperties);\r\n }\r\n if('ry' in animatorProps.a) {\r\n animatorData.a.ry = getProp(this._elem,animatorProps.a.ry,0,degToRads,this._dynamicProperties);\r\n }\r\n if('sk' in animatorProps.a) {\r\n animatorData.a.sk = getProp(this._elem,animatorProps.a.sk,0,degToRads,this._dynamicProperties);\r\n }\r\n if('sa' in animatorProps.a) {\r\n animatorData.a.sa = getProp(this._elem,animatorProps.a.sa,0,degToRads,this._dynamicProperties);\r\n }\r\n if('s' in animatorProps.a) {\r\n animatorData.a.s = getProp(this._elem,animatorProps.a.s,1,0.01,this._dynamicProperties);\r\n }\r\n if('a' in animatorProps.a) {\r\n animatorData.a.a = getProp(this._elem,animatorProps.a.a,1,0,this._dynamicProperties);\r\n }\r\n if('o' in animatorProps.a) {\r\n animatorData.a.o = getProp(this._elem,animatorProps.a.o,0,0.01,this._dynamicProperties);\r\n }\r\n if('p' in animatorProps.a) {\r\n animatorData.a.p = getProp(this._elem,animatorProps.a.p,1,0,this._dynamicProperties);\r\n }\r\n if('sw' in animatorProps.a) {\r\n animatorData.a.sw = getProp(this._elem,animatorProps.a.sw,0,0,this._dynamicProperties);\r\n }\r\n if('sc' in animatorProps.a) {\r\n animatorData.a.sc = getProp(this._elem,animatorProps.a.sc,1,0,this._dynamicProperties);\r\n }\r\n if('fc' in animatorProps.a) {\r\n animatorData.a.fc = getProp(this._elem,animatorProps.a.fc,1,0,this._dynamicProperties);\r\n }\r\n if('fh' in animatorProps.a) {\r\n animatorData.a.fh = getProp(this._elem,animatorProps.a.fh,0,0,this._dynamicProperties);\r\n }\r\n if('fs' in animatorProps.a) {\r\n animatorData.a.fs = getProp(this._elem,animatorProps.a.fs,0,0.01,this._dynamicProperties);\r\n }\r\n if('fb' in animatorProps.a) {\r\n animatorData.a.fb = getProp(this._elem,animatorProps.a.fb,0,0.01,this._dynamicProperties);\r\n }\r\n if('t' in animatorProps.a) {\r\n animatorData.a.t = getProp(this._elem,animatorProps.a.t,0,0,this._dynamicProperties);\r\n }\r\n animatorData.s = PropertyFactory.getTextSelectorProp(this._elem,animatorProps.s,this._dynamicProperties);\r\n animatorData.s.t = animatorProps.s.t;\r\n this._animatorsData[i] = animatorData;\r\n }\r\n if(this._textData.p && 'm' in this._textData.p){\r\n this._pathData = {\r\n f: getProp(this._elem,this._textData.p.f,0,0,this._dynamicProperties),\r\n l: getProp(this._elem,this._textData.p.l,0,0,this._dynamicProperties),\r\n r: this._textData.p.r,\r\n m: this._elem.maskManager.getMaskProperty(this._textData.p.m)\r\n };\r\n this._hasMaskedPath = true;\r\n } else {\r\n this._hasMaskedPath = false;\r\n }\r\n this._moreOptions.alignment = getProp(this._elem,this._textData.m.a,1,0,this._dynamicProperties);\r\n if(this._dynamicProperties.length) {\r\n \tdynamicProperties.push(this);\r\n }\r\n}\r\n\r\nTextAnimatorProperty.prototype.getMeasures = function(documentData, lettersChangedFlag){\r\n this.lettersChangedFlag = lettersChangedFlag;\r\n if(!this.mdf && !this._firstFrame && !lettersChangedFlag && (!this._hasMaskedPath || !this._pathData.m.mdf)) {\r\n return;\r\n }\r\n this._firstFrame = false;\r\n var alignment = this._moreOptions.alignment.v;\r\n var animators = this._animatorsData;\r\n var textData = this._textData;\r\n var matrixHelper = this.mHelper;\r\n var renderType = this._renderType;\r\n var renderedLettersCount = this.renderedLetters.length;\r\n var data = this.data;\r\n var xPos,yPos;\r\n var i, len;\r\n var letters = documentData.l;\r\n if(this._hasMaskedPath) {\r\n var mask = this._pathData.m;\r\n if(!this._pathData.n || this._pathData.mdf){\r\n var paths = mask.v;\r\n if(this._pathData.r){\r\n paths = reversePath(paths);\r\n }\r\n var pathInfo = {\r\n tLength: 0,\r\n segments: []\r\n };\r\n len = paths._length - 1;\r\n var pathData;\r\n var totalLength = 0;\r\n for (i = 0; i < len; i += 1) {\r\n pathData = {\r\n s: paths.v[i],\r\n e: paths.v[i + 1],\r\n to: [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]],\r\n ti: [paths.i[i + 1][0] - paths.v[i + 1][0], paths.i[i + 1][1] - paths.v[i + 1][1]]\r\n };\r\n bez.buildBezierData(pathData);\r\n pathInfo.tLength += pathData.bezierData.segmentLength;\r\n pathInfo.segments.push(pathData);\r\n totalLength += pathData.bezierData.segmentLength;\r\n }\r\n i = len;\r\n if (mask.v.c) {\r\n pathData = {\r\n s: paths.v[i],\r\n e: paths.v[0],\r\n to: [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]],\r\n ti: [paths.i[0][0] - paths.v[0][0], paths.i[0][1] - paths.v[0][1]]\r\n };\r\n bez.buildBezierData(pathData);\r\n pathInfo.tLength += pathData.bezierData.segmentLength;\r\n pathInfo.segments.push(pathData);\r\n totalLength += pathData.bezierData.segmentLength;\r\n }\r\n this._pathData.pi = pathInfo;\r\n }\r\n var pathInfo = this._pathData.pi;\r\n\r\n var currentLength = this._pathData.f.v, segmentInd = 0, pointInd = 1, currentPoint, prevPoint, points;\r\n var segmentLength = 0, flag = true;\r\n var segments = pathInfo.segments;\r\n if (currentLength < 0 && mask.v.c) {\r\n if (pathInfo.tLength < Math.abs(currentLength)) {\r\n currentLength = -Math.abs(currentLength) % pathInfo.tLength;\r\n }\r\n segmentInd = segments.length - 1;\r\n points = segments[segmentInd].bezierData.points;\r\n pointInd = points.length - 1;\r\n while (currentLength < 0) {\r\n currentLength += points[pointInd].partialLength;\r\n pointInd -= 1;\r\n if (pointInd < 0) {\r\n segmentInd -= 1;\r\n points = segments[segmentInd].bezierData.points;\r\n pointInd = points.length - 1;\r\n }\r\n }\r\n\r\n }\r\n points = segments[segmentInd].bezierData.points;\r\n prevPoint = points[pointInd - 1];\r\n currentPoint = points[pointInd];\r\n var partialLength = currentPoint.partialLength;\r\n var perc, tanAngle;\r\n }\r\n\r\n\r\n len = letters.length;\r\n xPos = 0;\r\n yPos = 0;\r\n var yOff = documentData.s*1.2*.714;\r\n var firstLine = true;\r\n var animatorProps, animatorSelector;\r\n var j, jLen;\r\n var letterValue;\r\n\r\n jLen = animators.length;\r\n if (lettersChangedFlag) {\r\n for (j = 0; j < jLen; j += 1) {\r\n animatorSelector = animators[j].s;\r\n animatorSelector.getValue(true);\r\n }\r\n }\r\n var lastLetter;\r\n\r\n var mult, ind = -1, offf, xPathPos, yPathPos;\r\n var initPathPos = currentLength,initSegmentInd = segmentInd, initPointInd = pointInd, currentLine = -1;\r\n var elemOpacity;\r\n var sc,sw,fc,k;\r\n var lineLength = 0;\r\n var letterSw,letterSc,letterFc,letterM = '',letterP = this.defaultPropsArray,letterO;\r\n for( i = 0; i < len; i += 1) {\r\n matrixHelper.reset();\r\n elemOpacity = 1;\r\n if(letters[i].n) {\r\n xPos = 0;\r\n yPos += documentData.yOffset;\r\n yPos += firstLine ? 1 : 0;\r\n currentLength = initPathPos ;\r\n firstLine = false;\r\n lineLength = 0;\r\n if(this._hasMaskedPath) {\r\n segmentInd = initSegmentInd;\r\n pointInd = initPointInd;\r\n points = segments[segmentInd].bezierData.points;\r\n prevPoint = points[pointInd - 1];\r\n currentPoint = points[pointInd];\r\n partialLength = currentPoint.partialLength;\r\n segmentLength = 0;\r\n }\r\n letterO = letterSw = letterFc = letterM = '';\r\n letterP = this.defaultPropsArray;\r\n }else{\r\n if(this._hasMaskedPath) {\r\n if(currentLine !== letters[i].line){\r\n switch(documentData.j){\r\n case 1:\r\n currentLength += totalLength - documentData.lineWidths[letters[i].line];\r\n break;\r\n case 2:\r\n currentLength += (totalLength - documentData.lineWidths[letters[i].line])/2;\r\n break;\r\n }\r\n currentLine = letters[i].line;\r\n }\r\n if (ind !== letters[i].ind) {\r\n if (letters[ind]) {\r\n currentLength += letters[ind].extra;\r\n }\r\n currentLength += letters[i].an / 2;\r\n ind = letters[i].ind;\r\n }\r\n currentLength += alignment[0] * letters[i].an / 200;\r\n var animatorOffset = 0;\r\n for (j = 0; j < jLen; j += 1) {\r\n animatorProps = animators[j].a;\r\n if ('p' in animatorProps) {\r\n animatorSelector = animators[j].s;\r\n mult = animatorSelector.getMult(letters[i].anIndexes[j],textData.a[j].s.totalChars);\r\n if(mult.length){\r\n animatorOffset += animatorProps.p.v[0] * mult[0];\r\n } else{\r\n animatorOffset += animatorProps.p.v[0] * mult;\r\n }\r\n\r\n }\r\n if ('a' in animatorProps) {\r\n animatorSelector = animators[j].s;\r\n mult = animatorSelector.getMult(letters[i].anIndexes[j],textData.a[j].s.totalChars);\r\n if(mult.length){\r\n animatorOffset += animatorProps.a.v[0] * mult[0];\r\n } else{\r\n animatorOffset += animatorProps.a.v[0] * mult;\r\n }\r\n\r\n }\r\n }\r\n flag = true;\r\n while (flag) {\r\n if (segmentLength + partialLength >= currentLength + animatorOffset || !points) {\r\n perc = (currentLength + animatorOffset - segmentLength) / currentPoint.partialLength;\r\n xPathPos = prevPoint.point[0] + (currentPoint.point[0] - prevPoint.point[0]) * perc;\r\n yPathPos = prevPoint.point[1] + (currentPoint.point[1] - prevPoint.point[1]) * perc;\r\n matrixHelper.translate(-alignment[0]*letters[i].an/200, -(alignment[1] * yOff / 100));\r\n flag = false;\r\n } else if (points) {\r\n segmentLength += currentPoint.partialLength;\r\n pointInd += 1;\r\n if (pointInd >= points.length) {\r\n pointInd = 0;\r\n segmentInd += 1;\r\n if (!segments[segmentInd]) {\r\n if (mask.v.c) {\r\n pointInd = 0;\r\n segmentInd = 0;\r\n points = segments[segmentInd].bezierData.points;\r\n } else {\r\n segmentLength -= currentPoint.partialLength;\r\n points = null;\r\n }\r\n } else {\r\n points = segments[segmentInd].bezierData.points;\r\n }\r\n }\r\n if (points) {\r\n prevPoint = currentPoint;\r\n currentPoint = points[pointInd];\r\n partialLength = currentPoint.partialLength;\r\n }\r\n }\r\n }\r\n offf = letters[i].an / 2 - letters[i].add;\r\n matrixHelper.translate(-offf, 0, 0);\r\n } else {\r\n offf = letters[i].an/2 - letters[i].add;\r\n matrixHelper.translate(-offf,0,0);\r\n\r\n // Grouping alignment\r\n matrixHelper.translate(-alignment[0]*letters[i].an/200, -alignment[1]*yOff/100, 0);\r\n }\r\n\r\n lineLength += letters[i].l/2;\r\n for(j=0;j<jLen;j+=1){\r\n animatorProps = animators[j].a;\r\n if ('t' in animatorProps) {\r\n animatorSelector = animators[j].s;\r\n mult = animatorSelector.getMult(letters[i].anIndexes[j],textData.a[j].s.totalChars);\r\n if(this._hasMaskedPath) {\r\n if(mult.length) {\r\n currentLength += animatorProps.t*mult[0];\r\n } else {\r\n currentLength += animatorProps.t*mult;\r\n }\r\n }else{\r\n if(mult.length) {\r\n xPos += animatorProps.t.v*mult[0];\r\n } else {\r\n xPos += animatorProps.t.v*mult;\r\n }\r\n }\r\n }\r\n }\r\n lineLength += letters[i].l/2;\r\n if(documentData.strokeWidthAnim) {\r\n sw = documentData.sw || 0;\r\n }\r\n if(documentData.strokeColorAnim) {\r\n if(documentData.sc){\r\n sc = [documentData.sc[0], documentData.sc[1], documentData.sc[2]];\r\n }else{\r\n sc = [0,0,0];\r\n }\r\n }\r\n if(documentData.fillColorAnim && documentData.fc) {\r\n fc = [documentData.fc[0], documentData.fc[1], documentData.fc[2]];\r\n }\r\n for(j=0;j<jLen;j+=1){\r\n animatorProps = animators[j].a;\r\n if ('a' in animatorProps) {\r\n animatorSelector = animators[j].s;\r\n mult = animatorSelector.getMult(letters[i].anIndexes[j],textData.a[j].s.totalChars);\r\n\r\n if(mult.length){\r\n matrixHelper.translate(-animatorProps.a.v[0]*mult[0], -animatorProps.a.v[1]*mult[1], animatorProps.a.v[2]*mult[2]);\r\n } else {\r\n matrixHelper.translate(-animatorProps.a.v[0]*mult, -animatorProps.a.v[1]*mult, animatorProps.a.v[2]*mult);\r\n }\r\n }\r\n }\r\n for(j=0;j<jLen;j+=1){\r\n animatorProps = animators[j].a;\r\n if ('s' in animatorProps) {\r\n animatorSelector = animators[j].s;\r\n mult = animatorSelector.getMult(letters[i].anIndexes[j],textData.a[j].s.totalChars);\r\n if(mult.length){\r\n matrixHelper.scale(1+((animatorProps.s.v[0]-1)*mult[0]),1+((animatorProps.s.v[1]-1)*mult[1]),1);\r\n } else {\r\n matrixHelper.scale(1+((animatorProps.s.v[0]-1)*mult),1+((animatorProps.s.v[1]-1)*mult),1);\r\n }\r\n }\r\n }\r\n for(j=0;j<jLen;j+=1) {\r\n animatorProps = animators[j].a;\r\n animatorSelector = animators[j].s;\r\n mult = animatorSelector.getMult(letters[i].anIndexes[j],textData.a[j].s.totalChars);\r\n if ('sk' in animatorProps) {\r\n if(mult.length) {\r\n matrixHelper.skewFromAxis(-animatorProps.sk.v * mult[0], animatorProps.sa.v * mult[1]);\r\n } else {\r\n matrixHelper.skewFromAxis(-animatorProps.sk.v * mult, animatorProps.sa.v * mult);\r\n }\r\n }\r\n if ('r' in animatorProps) {\r\n if(mult.length) {\r\n matrixHelper.rotateZ(-animatorProps.r.v * mult[2]);\r\n } else {\r\n matrixHelper.rotateZ(-animatorProps.r.v * mult);\r\n }\r\n }\r\n if ('ry' in animatorProps) {\r\n\r\n if(mult.length) {\r\n matrixHelper.rotateY(animatorProps.ry.v*mult[1]);\r\n }else{\r\n matrixHelper.rotateY(animatorProps.ry.v*mult);\r\n }\r\n }\r\n if ('rx' in animatorProps) {\r\n if(mult.length) {\r\n matrixHelper.rotateX(animatorProps.rx.v*mult[0]);\r\n } else {\r\n matrixHelper.rotateX(animatorProps.rx.v*mult);\r\n }\r\n }\r\n if ('o' in animatorProps) {\r\n if(mult.length) {\r\n elemOpacity += ((animatorProps.o.v)*mult[0] - elemOpacity)*mult[0];\r\n } else {\r\n elemOpacity += ((animatorProps.o.v)*mult - elemOpacity)*mult;\r\n }\r\n }\r\n if (documentData.strokeWidthAnim && 'sw' in animatorProps) {\r\n if(mult.length) {\r\n sw += animatorProps.sw.v*mult[0];\r\n } else {\r\n sw += animatorProps.sw.v*mult;\r\n }\r\n }\r\n if (documentData.strokeColorAnim && 'sc' in animatorProps) {\r\n for(k=0;k<3;k+=1){\r\n if(mult.length) {\r\n sc[k] = sc[k] + (animatorProps.sc.v[k] - sc[k])*mult[0]\r\n } else {\r\n sc[k] = sc[k] + (animatorProps.sc.v[k] - sc[k])*mult;\r\n }\r\n }\r\n }\r\n if (documentData.fillColorAnim && documentData.fc) {\r\n if('fc' in animatorProps){\r\n for(k=0;k<3;k+=1){\r\n if(mult.length) {\r\n fc[k] = fc[k] + (animatorProps.fc.v[k] - fc[k])*mult[0];\r\n } else {\r\n fc[k] = fc[k] + (animatorProps.fc.v[k] - fc[k])*mult;\r\n }\r\n }\r\n }\r\n if('fh' in animatorProps){\r\n if(mult.length) {\r\n fc = addHueToRGB(fc,animatorProps.fh.v*mult[0]);\r\n } else {\r\n fc = addHueToRGB(fc,animatorProps.fh.v*mult);\r\n }\r\n }\r\n if('fs' in animatorProps){\r\n if(mult.length) {\r\n fc = addSaturationToRGB(fc,animatorProps.fs.v*mult[0]);\r\n } else {\r\n fc = addSaturationToRGB(fc,animatorProps.fs.v*mult);\r\n }\r\n }\r\n if('fb' in animatorProps){\r\n if(mult.length) {\r\n fc = addBrightnessToRGB(fc,animatorProps.fb.v*mult[0]);\r\n } else {\r\n fc = addBrightnessToRGB(fc,animatorProps.fb.v*mult);\r\n }\r\n }\r\n }\r\n }\r\n\r\n for(j=0;j<jLen;j+=1){\r\n animatorProps = animators[j].a;\r\n\r\n if ('p' in animatorProps) {\r\n animatorSelector = animators[j].s;\r\n mult = animatorSelector.getMult(letters[i].anIndexes[j],textData.a[j].s.totalChars);\r\n if(this._hasMaskedPath) {\r\n if(mult.length) {\r\n matrixHelper.translate(0, animatorProps.p.v[1] * mult[0], -animatorProps.p.v[2] * mult[1]);\r\n } else {\r\n matrixHelper.translate(0, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\r\n }\r\n }else{\r\n if(mult.length) {\r\n matrixHelper.translate(animatorProps.p.v[0] * mult[0], animatorProps.p.v[1] * mult[1], -animatorProps.p.v[2] * mult[2]);\r\n } else {\r\n matrixHelper.translate(animatorProps.p.v[0] * mult, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\r\n }\r\n }\r\n }\r\n }\r\n if(documentData.strokeWidthAnim){\r\n letterSw = sw < 0 ? 0 : sw;\r\n }\r\n if(documentData.strokeColorAnim){\r\n letterSc = 'rgb('+Math.round(sc[0]*255)+','+Math.round(sc[1]*255)+','+Math.round(sc[2]*255)+')';\r\n }\r\n if(documentData.fillColorAnim && documentData.fc){\r\n letterFc = 'rgb('+Math.round(fc[0]*255)+','+Math.round(fc[1]*255)+','+Math.round(fc[2]*255)+')';\r\n }\r\n\r\n if(this._hasMaskedPath) {\r\n matrixHelper.translate(0,-documentData.ls);\r\n\r\n matrixHelper.translate(0, alignment[1]*yOff/100 + yPos,0);\r\n if (textData.p.p) {\r\n tanAngle = (currentPoint.point[1] - prevPoint.point[1]) / (currentPoint.point[0] - prevPoint.point[0]);\r\n var rot = Math.atan(tanAngle) * 180 / Math.PI;\r\n if (currentPoint.point[0] < prevPoint.point[0]) {\r\n rot += 180;\r\n }\r\n matrixHelper.rotate(-rot * Math.PI / 180);\r\n }\r\n matrixHelper.translate(xPathPos, yPathPos, 0);\r\n currentLength -= alignment[0]*letters[i].an/200;\r\n if(letters[i+1] && ind !== letters[i+1].ind){\r\n currentLength += letters[i].an / 2;\r\n currentLength += documentData.tr/1000*documentData.s;\r\n }\r\n }else{\r\n\r\n matrixHelper.translate(xPos,yPos,0);\r\n\r\n if(documentData.ps){\r\n //matrixHelper.translate(documentData.ps[0],documentData.ps[1],0);\r\n matrixHelper.translate(documentData.ps[0],documentData.ps[1] + documentData.ascent,0);\r\n }\r\n switch(documentData.j){\r\n case 1:\r\n matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]),0,0);\r\n break;\r\n case 2:\r\n matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line])/2,0,0);\r\n break;\r\n }\r\n matrixHelper.translate(0,-documentData.ls);\r\n matrixHelper.translate(offf,0,0);\r\n matrixHelper.translate(alignment[0]*letters[i].an/200,alignment[1]*yOff/100,0);\r\n xPos += letters[i].l + documentData.tr/1000*documentData.s;\r\n }\r\n if(renderType === 'html'){\r\n letterM = matrixHelper.toCSS();\r\n }else if(renderType === 'svg'){\r\n letterM = matrixHelper.to2dCSS();\r\n }else{\r\n letterP = [matrixHelper.props[0],matrixHelper.props[1],matrixHelper.props[2],matrixHelper.props[3],matrixHelper.props[4],matrixHelper.props[5],matrixHelper.props[6],matrixHelper.props[7],matrixHelper.props[8],matrixHelper.props[9],matrixHelper.props[10],matrixHelper.props[11],matrixHelper.props[12],matrixHelper.props[13],matrixHelper.props[14],matrixHelper.props[15]];\r\n }\r\n letterO = elemOpacity;\r\n }\r\n\r\n if(renderedLettersCount <= i) {\r\n letterValue = new LetterProps(letterO,letterSw,letterSc,letterFc,letterM,letterP);\r\n this.renderedLetters.push(letterValue);\r\n renderedLettersCount += 1;\r\n this.lettersChangedFlag = true;\r\n } else {\r\n letterValue = this.renderedLetters[i];\r\n this.lettersChangedFlag = letterValue.update(letterO, letterSw, letterSc, letterFc, letterM, letterP) || this.lettersChangedFlag;\r\n }\r\n }\r\n}\r\n\r\nTextAnimatorProperty.prototype.getValue = function(){\r\n\tif(this._elem.globalData.frameId === this._frameId){\r\n return;\r\n }\r\n this._frameId = this._elem.globalData.frameId;\r\n\tvar i, len = this._dynamicProperties.length;\r\n this.mdf = false;\r\n\tfor(i = 0; i < len; i += 1) {\r\n\t\tthis._dynamicProperties[i].getValue();\r\n this.mdf = this._dynamicProperties[i].mdf || this.mdf;\r\n\t}\r\n}\r\n\r\nTextAnimatorProperty.prototype.mHelper = new Matrix();\r\nTextAnimatorProperty.prototype.defaultPropsArray = [];\nfunction LetterProps(o, sw, sc, fc, m, p){\r\n this.o = o;\r\n this.sw = sw;\r\n this.sc = sc;\r\n this.fc = fc;\r\n this.m = m;\r\n this.p = p;\r\n this.mdf = {\r\n \to: true,\r\n \tsw: !!sw,\r\n \tsc: !!sc,\r\n \tfc: !!fc,\r\n \tm: true,\r\n \tp: true\r\n };\r\n}\r\n\r\nLetterProps.prototype.update = function(o, sw, sc, fc, m, p) {\r\n\tthis.mdf.o = false;\r\n\tthis.mdf.sw = false;\r\n\tthis.mdf.sc = false;\r\n\tthis.mdf.fc = false;\r\n\tthis.mdf.m = false;\r\n\tthis.mdf.p = false;\r\n\tvar updated = false;\r\n\r\n\tif(this.o !== o) {\r\n\t\tthis.o = o;\r\n\t\tthis.mdf.o = true;\r\n\t\tupdated = true;\r\n\t}\r\n\tif(this.sw !== sw) {\r\n\t\tthis.sw = sw;\r\n\t\tthis.mdf.sw = true;\r\n\t\tupdated = true;\r\n\t}\r\n\tif(this.sc !== sc) {\r\n\t\tthis.sc = sc;\r\n\t\tthis.mdf.sc = true;\r\n\t\tupdated = true;\r\n\t}\r\n\tif(this.fc !== fc) {\r\n\t\tthis.fc = fc;\r\n\t\tthis.mdf.fc = true;\r\n\t\tupdated = true;\r\n\t}\r\n\tif(this.m !== m) {\r\n\t\tthis.m = m;\r\n\t\tthis.mdf.m = true;\r\n\t\tupdated = true;\r\n\t}\r\n\tif(p.length && (this.p[0] !== p[0] || this.p[1] !== p[1] || this.p[4] !== p[4] || this.p[5] !== p[5] || this.p[12] !== p[12] || this.p[13] !== p[13])) {\r\n\t\tthis.p = p;\r\n\t\tthis.mdf.p = true;\r\n\t\tupdated = true;\r\n\t}\r\n\treturn updated;\r\n}\nfunction TextProperty(elem, data, dynamicProperties){\r\n\tthis._frameId = -99999;\r\n\tthis.pv = '';\r\n\tthis.v = '';\r\n\tthis.kf = false;\r\n\tthis.firstFrame = true;\r\n\tthis.mdf = true;\r\n\tthis.data = data;\r\n\tthis.elem = elem;\r\n\tthis.keysIndex = -1;\r\n\tthis.currentData = {\r\n\t\tascent: 0,\r\n boxWidth: [0,0],\r\n f: '',\r\n fStyle: '',\r\n fWeight: '',\r\n fc: '',\r\n j: '',\r\n justifyOffset: '',\r\n l: [],\r\n lh: 0,\r\n lineWidths: [],\r\n ls: '',\r\n of: '',\r\n s: '',\r\n sc: '',\r\n sw: 0,\r\n t: 0,\r\n tr: 0,\r\n fillColorAnim: false,\r\n strokeColorAnim: false,\r\n strokeWidthAnim: false,\r\n yOffset: 0,\r\n __complete: false\r\n\r\n\t}\r\n\tif(this.searchProperty()) {\r\n\t\tdynamicProperties.push(this);\r\n\t} else {\r\n\t\tthis.getValue(true);\r\n\t}\r\n}\r\n\r\nTextProperty.prototype.setCurrentData = function(data){\r\n\t\tvar currentData = this.currentData;\r\n currentData.ascent = data.ascent;\r\n currentData.boxWidth = data.boxWidth ? data.boxWidth : currentData.boxWidth;\r\n currentData.f = data.f;\r\n currentData.fStyle = data.fStyle;\r\n currentData.fWeight = data.fWeight;\r\n currentData.fc = data.fc;\r\n currentData.j = data.j;\r\n currentData.justifyOffset = data.justifyOffset;\r\n currentData.l = data.l;\r\n currentData.lh = data.lh;\r\n currentData.lineWidths = data.lineWidths;\r\n currentData.ls = data.ls;\r\n currentData.of = data.of;\r\n currentData.s = data.s;\r\n currentData.sc = data.sc;\r\n currentData.sw = data.sw;\r\n currentData.t = data.t;\r\n currentData.tr = data.tr;\r\n currentData.fillColorAnim = data.fillColorAnim || currentData.fillColorAnim;\r\n currentData.strokeColorAnim = data.strokeColorAnim || currentData.strokeColorAnim;\r\n currentData.strokeWidthAnim = data.strokeWidthAnim || currentData.strokeWidthAnim;\r\n currentData.yOffset = data.yOffset;\r\n currentData.__complete = false;\r\n}\r\n\r\nTextProperty.prototype.searchProperty = function() {\r\n\tthis.kf = this.data.d.k.length > 1;\r\n\treturn this.kf;\r\n}\r\n\r\nTextProperty.prototype.getValue = function() {\r\n\tthis.mdf = false;\r\n\tvar frameId = this.elem.globalData.frameId;\r\n\tif((frameId === this._frameId || !this.kf) && !this.firstFrame) {\r\n\t\treturn;\r\n\t}\r\n\tvar textKeys = this.data.d.k, textDocumentData;\r\n var i = 0, len = textKeys.length;\r\n while(i <= len - 1) {\r\n textDocumentData = textKeys[i].s;\r\n if(i === len - 1 || textKeys[i+1].t > frameId){\r\n break;\r\n }\r\n i += 1;\r\n }\r\n if(this.keysIndex !== i) {\r\n \tif(!textDocumentData.__complete) {\r\n this.completeTextData(textDocumentData);\r\n }\r\n this.setCurrentData(textDocumentData);\r\n this.mdf = this.firstFrame ? false : true;\r\n this.pv = this.v = this.currentData.t;\r\n this.keysIndex = i;\r\n }\r\n\tthis._frameId = frameId;\r\n}\r\n\r\nTextProperty.prototype.completeTextData = function(documentData) {\r\n documentData.__complete = true;\r\n var fontManager = this.elem.globalData.fontManager;\r\n var data = this.data;\r\n var letters = [];\r\n var i, len;\r\n var newLineFlag, index = 0, val;\r\n var anchorGrouping = data.m.g;\r\n var currentSize = 0, currentPos = 0, currentLine = 0, lineWidths = [];\r\n var lineWidth = 0;\r\n var maxLineWidth = 0;\r\n var j, jLen;\r\n var fontData = fontManager.getFontByName(documentData.f);\r\n var charData, cLength = 0;\r\n var styles = fontData.fStyle.split(' ');\r\n\r\n var fWeight = 'normal', fStyle = 'normal';\r\n len = styles.length;\r\n var styleName;\r\n for(i=0;i<len;i+=1){\r\n styleName = styles[i].toLowerCase();\r\n switch(styleName) {\r\n case 'italic':\r\n fStyle = 'italic';\r\n break;\r\n case 'bold':\r\n fWeight = '700';\r\n break;\r\n case 'black':\r\n fWeight = '900';\r\n break;\r\n case 'medium':\r\n fWeight = '500';\r\n break;\r\n case 'regular':\r\n case 'normal':\r\n fWeight = '400';\r\n case 'light':\r\n case 'thin':\r\n fWeight = '200';\r\n break;\r\n }\r\n }\r\n documentData.fWeight = fWeight;\r\n documentData.fStyle = fStyle;\r\n len = documentData.t.length;\r\n var trackingOffset = documentData.tr/1000*documentData.s;\r\n if(documentData.sz){\r\n var boxWidth = documentData.sz[0];\r\n var lastSpaceIndex = -1;\r\n for(i=0;i<len;i+=1){\r\n newLineFlag = false;\r\n if(documentData.t.charAt(i) === ' '){\r\n lastSpaceIndex = i;\r\n }else if(documentData.t.charCodeAt(i) === 13){\r\n lineWidth = 0;\r\n newLineFlag = true;\r\n }\r\n if(fontManager.chars){\r\n charData = fontManager.getCharData(documentData.t.charAt(i), fontData.fStyle, fontData.fFamily);\r\n cLength = newLineFlag ? 0 : charData.w*documentData.s/100;\r\n }else{\r\n //tCanvasHelper.font = documentData.s + 'px '+ fontData.fFamily;\r\n cLength = fontManager.measureText(documentData.t.charAt(i), documentData.f, documentData.s);\r\n }\r\n if(lineWidth + cLength > boxWidth && documentData.t.charAt(i) !== ' '){\r\n if(lastSpaceIndex === -1){\r\n len += 1;\r\n } else {\r\n i = lastSpaceIndex;\r\n }\r\n documentData.t = documentData.t.substr(0,i) + \"\\r\" + documentData.t.substr(i === lastSpaceIndex ? i + 1 : i);\r\n lastSpaceIndex = -1;\r\n lineWidth = 0;\r\n }else {\r\n lineWidth += cLength;\r\n lineWidth += trackingOffset;\r\n }\r\n }\r\n len = documentData.t.length;\r\n }\r\n lineWidth = - trackingOffset;\r\n cLength = 0;\r\n var uncollapsedSpaces = 0;\r\n var currentChar;\r\n for (i = 0;i < len ;i += 1) {\r\n newLineFlag = false;\r\n currentChar = documentData.t.charAt(i);\r\n if(currentChar === ' '){\r\n val = '\\u00A0';\r\n }else if(currentChar.charCodeAt(0) === 13){\r\n uncollapsedSpaces = 0;\r\n lineWidths.push(lineWidth);\r\n maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\r\n lineWidth = - 2 * trackingOffset;\r\n val = '';\r\n newLineFlag = true;\r\n currentLine += 1;\r\n }else{\r\n val = documentData.t.charAt(i);\r\n }\r\n if(fontManager.chars){\r\n charData = fontManager.getCharData(currentChar, fontData.fStyle, fontManager.getFontByName(documentData.f).fFamily);\r\n cLength = newLineFlag ? 0 : charData.w*documentData.s/100;\r\n }else{\r\n //var charWidth = fontManager.measureText(val, documentData.f, documentData.s);\r\n //tCanvasHelper.font = documentData.s + 'px '+ fontManager.getFontByName(documentData.f).fFamily;\r\n cLength = fontManager.measureText(val, documentData.f, documentData.s);\r\n }\r\n\r\n //\r\n if(currentChar === ' '){\r\n uncollapsedSpaces += cLength + trackingOffset;\r\n } else {\r\n lineWidth += cLength + trackingOffset + uncollapsedSpaces;\r\n uncollapsedSpaces = 0;\r\n }\r\n letters.push({l:cLength,an:cLength,add:currentSize,n:newLineFlag, anIndexes:[], val: val, line: currentLine});\r\n if(anchorGrouping == 2){\r\n currentSize += cLength;\r\n if(val == '' || val == '\\u00A0' || i == len - 1){\r\n if(val == '' || val == '\\u00A0'){\r\n currentSize -= cLength;\r\n }\r\n while(currentPos<=i){\r\n letters[currentPos].an = currentSize;\r\n letters[currentPos].ind = index;\r\n letters[currentPos].extra = cLength;\r\n currentPos += 1;\r\n }\r\n index += 1;\r\n currentSize = 0;\r\n }\r\n }else if(anchorGrouping == 3){\r\n currentSize += cLength;\r\n if(val == '' || i == len - 1){\r\n if(val == ''){\r\n currentSize -= cLength;\r\n }\r\n while(currentPos<=i){\r\n letters[currentPos].an = currentSize;\r\n letters[currentPos].ind = index;\r\n letters[currentPos].extra = cLength;\r\n currentPos += 1;\r\n }\r\n currentSize = 0;\r\n index += 1;\r\n }\r\n }else{\r\n letters[index].ind = index;\r\n letters[index].extra = 0;\r\n index += 1;\r\n }\r\n }\r\n documentData.l = letters;\r\n maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\r\n lineWidths.push(lineWidth);\r\n if(documentData.sz){\r\n documentData.boxWidth = documentData.sz[0];\r\n documentData.justifyOffset = 0;\r\n }else{\r\n documentData.boxWidth = maxLineWidth;\r\n switch(documentData.j){\r\n case 1:\r\n documentData.justifyOffset = - documentData.boxWidth;\r\n break;\r\n case 2:\r\n documentData.justifyOffset = - documentData.boxWidth/2;\r\n break;\r\n default:\r\n documentData.justifyOffset = 0;\r\n }\r\n }\r\n documentData.lineWidths = lineWidths;\r\n\r\n var animators = data.a, animatorData, letterData;\r\n jLen = animators.length;\r\n var based, ind, indexes = [];\r\n for(j=0;j<jLen;j+=1){\r\n animatorData = animators[j];\r\n if(animatorData.a.sc){\r\n documentData.strokeColorAnim = true;\r\n }\r\n if(animatorData.a.sw){\r\n documentData.strokeWidthAnim = true;\r\n }\r\n if(animatorData.a.fc || animatorData.a.fh || animatorData.a.fs || animatorData.a.fb){\r\n documentData.fillColorAnim = true;\r\n }\r\n ind = 0;\r\n based = animatorData.s.b;\r\n for(i=0;i<len;i+=1){\r\n letterData = letters[i];\r\n letterData.anIndexes[j] = ind;\r\n if((based == 1 && letterData.val != '') || (based == 2 && letterData.val != '' && letterData.val != '\\u00A0') || (based == 3 && (letterData.n || letterData.val == '\\u00A0' || i == len - 1)) || (based == 4 && (letterData.n || i == len - 1))){\r\n if(animatorData.s.rn === 1){\r\n indexes.push(ind);\r\n }\r\n ind += 1;\r\n }\r\n }\r\n data.a[j].s.totalChars = ind;\r\n var currentInd = -1, newInd;\r\n if(animatorData.s.rn === 1){\r\n for(i = 0; i < len; i += 1){\r\n letterData = letters[i];\r\n if(currentInd != letterData.anIndexes[j]){\r\n currentInd = letterData.anIndexes[j];\r\n newInd = indexes.splice(Math.floor(Math.random()*indexes.length),1)[0];\r\n }\r\n letterData.anIndexes[j] = newInd;\r\n }\r\n }\r\n }\r\n documentData.yOffset = documentData.lh || documentData.s*1.2;\r\n documentData.ls = documentData.ls || 0;\r\n documentData.ascent = fontData.ascent*documentData.s/100;\r\n}\r\n\r\nTextProperty.prototype.updateDocumentData = function(newData, index) {\r\n\tindex = index === undefined ? this.keysIndex : index;\r\n var dData = this.data.d.k[index].s;\r\n dData.__complete = false;\r\n dData.t = newData.t;\r\n this.keysIndex = -1;\r\n this.firstFrame = true;\r\n this.getValue();\r\n}\r\n\nvar pooling = (function(){\r\n\r\n\tfunction double(arr){\r\n\t\treturn arr.concat(Array.apply(null,{length:arr.length}))\r\n\t}\r\n\r\n\treturn {\r\n\t\tdouble: double\r\n\t}\r\n}());\nvar point_pool = (function(){\r\n\tvar ob = {\r\n\t\tnewPoint: newPoint,\r\n\t\trelease: release\r\n\t}\r\n\r\n\tvar _length = 0;\r\n\tvar _maxLength = 8;\r\n\tvar pool = Array.apply(null,{length:_maxLength});\r\n\r\n\tfunction newPoint(){\r\n\t\tvar point;\r\n\t\tif(_length){\r\n\t\t\t_length -= 1;\r\n\t\t\tpoint = pool[_length];\r\n\t\t} else {\r\n\t\t\tpoint = [0.1,0.1];\r\n\t\t}\r\n\t\treturn point;\r\n\t}\r\n\r\n\tfunction release(point) {\r\n\t\tif(_length === _maxLength) {\r\n\t\t\tpool = pooling.double(pool);\r\n\t\t\t_maxLength = _maxLength*2;\r\n\t\t}\r\n\t\tpool[_length] = point;\r\n\t\t_length += 1;\r\n\t}\r\n\r\n\r\n\treturn ob;\r\n}());\nvar shape_pool = (function(){\r\n\tvar ob = {\r\n\t\tclone: clone,\r\n\t\tnewShape: newShape,\r\n\t\trelease: release,\r\n\t\treleaseArray: releaseArray\r\n\t}\r\n\r\n\tvar _length = 0;\r\n\tvar _maxLength = 4;\r\n\tvar pool = Array.apply(null,{length:_maxLength});\r\n\r\n\tfunction newShape(){\r\n\t\tvar shapePath;\r\n\t\tif(_length){\r\n\t\t\t_length -= 1;\r\n\t\t\tshapePath = pool[_length];\r\n\t\t} else {\r\n\t\t\tshapePath = new ShapePath();\r\n\t\t}\r\n\t\treturn shapePath;\r\n\t}\r\n\r\n\tfunction release(shapePath) {\r\n\t\tif(_length === _maxLength) {\r\n\t\t\tpool = pooling.double(pool);\r\n\t\t\t_maxLength = _maxLength*2;\r\n\t\t}\r\n\t\tvar len = shapePath._length, i;\r\n\t\tfor(i = 0; i < len; i += 1) {\r\n\t\t\tpoint_pool.release(shapePath.v[i]);\r\n\t\t\tpoint_pool.release(shapePath.i[i]);\r\n\t\t\tpoint_pool.release(shapePath.o[i]);\r\n\t\t\tshapePath.v[i] = null;\r\n\t\t\tshapePath.i[i] = null;\r\n\t\t\tshapePath.o[i] = null;\r\n\t\t}\r\n\t\tshapePath._length = 0;\r\n\t\tshapePath.c = false;\r\n\t\tpool[_length] = shapePath;\r\n\t\t_length += 1;\r\n\t}\r\n\r\n\tfunction releaseArray(shapePathsCollection, length) {\r\n\t\twhile(length--) {\r\n\t\t\trelease(shapePathsCollection[length]);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction clone(shape, transform) {\r\n\t\tvar i, len = shape._length === undefined ? shape.v.length : shape._length;\r\n\t\tvar cloned = newShape();\r\n\t\tcloned.setLength(len);\r\n\t\tcloned.c = shape.c;\r\n\r\n\t\tvar pt;\r\n\t\t\r\n\t\tfor(i = 0; i < len; i += 1) {\r\n\t\t\tif(transform){\r\n\t\t\t\tpt = transform.applyToPointArray(shape.v[i][0],shape.v[i][1],0,2);\r\n\t\t\t\tcloned.setXYAt(pt[0],pt[1],'v',i);\r\n\t\t\t\tpoint_pool.release(pt);\r\n\t\t\t\tpt = transform.applyToPointArray(shape.o[i][0],shape.o[i][1],0,2);\r\n\t\t\t\tcloned.setXYAt(pt[0],pt[1],'o',i);\r\n\t\t\t\tpoint_pool.release(pt);\r\n\t\t\t\tpt = transform.applyToPointArray(shape.i[i][0],shape.i[i][1],0,2);\r\n\t\t\t\tcloned.setXYAt(pt[0],pt[1],'i',i);\r\n\t\t\t\tpoint_pool.release(pt);\r\n\t\t\t}else{\r\n\t\t\t\tcloned.setTripleAt(shape.v[i][0],shape.v[i][1],shape.o[i][0],shape.o[i][1],shape.i[i][0],shape.i[i][1], i);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn cloned\r\n\t}\r\n\r\n\r\n\treturn ob;\r\n}());\nvar shapeCollection_pool = (function(){\r\n\tvar ob = {\r\n\t\tnewShapeCollection: newShapeCollection,\r\n\t\trelease: release,\r\n\t\tclone: clone\r\n\t}\r\n\r\n\tvar _length = 0;\r\n\tvar _maxLength = 4;\r\n\tvar pool = Array.apply(null,{length:_maxLength});\r\n\r\n\tvar cont = 0;\r\n\r\n\tfunction newShapeCollection(){\r\n\t\tvar shapeCollection;\r\n\t\tif(_length){\r\n\t\t\t_length -= 1;\r\n\t\t\tshapeCollection = pool[_length];\r\n\t\t} else {\r\n\t\t\tshapeCollection = new ShapeCollection();\r\n\t\t}\r\n\t\treturn shapeCollection;\r\n\t}\r\n\r\n\tfunction release(shapeCollection) {\r\n\t\tvar i, len = shapeCollection._length;\r\n\t\tfor(i = 0; i < len; i += 1) {\r\n\t\t\tshape_pool.release(shapeCollection.shapes[i]);\r\n\t\t}\r\n\t\tshapeCollection._length = 0;\r\n\r\n\t\tif(_length === _maxLength) {\r\n\t\t\tpool = pooling.double(pool);\r\n\t\t\t_maxLength = _maxLength*2;\r\n\t\t}\r\n\t\tpool[_length] = shapeCollection;\r\n\t\t_length += 1;\r\n\t}\r\n\r\n\tfunction clone(shapeCollection, originCollection) {\r\n\t\trelease(shapeCollection);\r\n\t\tif(_length === _maxLength) {\r\n\t\t\tpool = pooling.double(pool);\r\n\t\t\t_maxLength = _maxLength*2;\r\n\t\t}\r\n\t\tpool[_length] = shapeCollection;\r\n\t\t_length += 1;\r\n\t}\r\n\r\n\r\n\treturn ob;\r\n}());\nfunction BaseRenderer(){}\r\nBaseRenderer.prototype.checkLayers = function(num){\r\n var i, len = this.layers.length, data;\r\n this.completeLayers = true;\r\n for (i = len - 1; i >= 0; i--) {\r\n if (!this.elements[i]) {\r\n data = this.layers[i];\r\n if(data.ip - data.st <= (num - this.layers[i].st) && data.op - data.st > (num - this.layers[i].st))\r\n {\r\n this.buildItem(i);\r\n }\r\n }\r\n this.completeLayers = this.elements[i] ? this.completeLayers:false;\r\n }\r\n this.checkPendingElements();\r\n};\r\n\r\nBaseRenderer.prototype.createItem = function(layer){\r\n switch(layer.ty){\r\n case 2:\r\n return this.createImage(layer);\r\n case 0:\r\n return this.createComp(layer);\r\n case 1:\r\n return this.createSolid(layer);\r\n case 4:\r\n return this.createShape(layer);\r\n case 5:\r\n return this.createText(layer);\r\n case 13:\r\n return this.createCamera(layer);\r\n case 99:\r\n return null;\r\n }\r\n return this.createBase(layer);\r\n};\r\n\r\nBaseRenderer.prototype.createCamera = function(){\r\n throw new Error('You\\'re using a 3d camera. Try the html renderer.');\r\n}\r\n\r\nBaseRenderer.prototype.buildAllItems = function(){\r\n var i, len = this.layers.length;\r\n for(i=0;i<len;i+=1){\r\n this.buildItem(i);\r\n }\r\n this.checkPendingElements();\r\n};\r\n\r\nBaseRenderer.prototype.includeLayers = function(newLayers){\r\n this.completeLayers = false;\r\n var i, len = newLayers.length;\r\n var j, jLen = this.layers.length;\r\n for(i=0;i<len;i+=1){\r\n j = 0;\r\n while(j<jLen){\r\n if(this.layers[j].id == newLayers[i].id){\r\n this.layers[j] = newLayers[i];\r\n break;\r\n }\r\n j += 1;\r\n }\r\n }\r\n};\r\n\r\nBaseRenderer.prototype.setProjectInterface = function(pInterface){\r\n this.globalData.projectInterface = pInterface;\r\n};\r\n\r\nBaseRenderer.prototype.initItems = function(){\r\n if(!this.globalData.progressiveLoad){\r\n this.buildAllItems();\r\n }\r\n};\r\nBaseRenderer.prototype.buildElementParenting = function(element, parentName, hierarchy){\r\n hierarchy = hierarchy || [];\r\n var elements = this.elements;\r\n var layers = this.layers;\r\n var i=0, len = layers.length;\r\n while(i<len){\r\n if(layers[i].ind == parentName){\r\n if(!elements[i] || elements[i] === true){\r\n this.buildItem(i);\r\n this.addPendingElement(element);\r\n } else if(layers[i].parent !== undefined){\r\n hierarchy.push(elements[i]);\r\n elements[i]._isParent = true;\r\n this.buildElementParenting(element,layers[i].parent, hierarchy);\r\n } else {\r\n hierarchy.push(elements[i]);\r\n elements[i]._isParent = true;\r\n element.setHierarchy(hierarchy);\r\n }\r\n\r\n\r\n }\r\n i += 1;\r\n }\r\n};\r\n\r\nBaseRenderer.prototype.addPendingElement = function(element){\r\n this.pendingElements.push(element);\r\n};\nfunction SVGRenderer(animationItem, config){\r\n this.animationItem = animationItem;\r\n this.layers = null;\r\n this.renderedFrame = -1;\r\n this.globalData = {\r\n frameNum: -1\r\n };\r\n this.renderConfig = {\r\n preserveAspectRatio: (config && config.preserveAspectRatio) || 'xMidYMid meet',\r\n progressiveLoad: (config && config.progressiveLoad) || false,\r\n hideOnTransparent: (config && config.hideOnTransparent === false) ? false : true,\r\n viewBoxOnly: (config && config.viewBoxOnly) || false,\r\n className: (config && config.className) || ''\r\n };\r\n this.globalData.renderConfig = this.renderConfig;\r\n this.elements = [];\r\n this.pendingElements = [];\r\n this.destroyed = false;\r\n\r\n}\r\n\r\nextendPrototype(BaseRenderer,SVGRenderer);\r\n\r\nSVGRenderer.prototype.createBase = function (data) {\r\n return new SVGBaseElement(data, this.layerElement,this.globalData,this);\r\n};\r\n\r\nSVGRenderer.prototype.createShape = function (data) {\r\n return new IShapeElement(data, this.layerElement,this.globalData,this);\r\n};\r\n\r\nSVGRenderer.prototype.createText = function (data) {\r\n return new SVGTextElement(data, this.layerElement,this.globalData,this);\r\n\r\n};\r\n\r\nSVGRenderer.prototype.createImage = function (data) {\r\n return new IImageElement(data, this.layerElement,this.globalData,this);\r\n};\r\n\r\nSVGRenderer.prototype.createComp = function (data) {\r\n return new ICompElement(data, this.layerElement,this.globalData,this);\r\n\r\n};\r\n\r\nSVGRenderer.prototype.createSolid = function (data) {\r\n return new ISolidElement(data, this.layerElement,this.globalData,this);\r\n};\r\n\r\nSVGRenderer.prototype.configAnimation = function(animData){\r\n this.layerElement = document.createElementNS(svgNS,'svg');\r\n this.layerElement.setAttribute('xmlns','http://www.w3.org/2000/svg');\r\n this.layerElement.setAttribute('viewBox','0 0 '+animData.w+' '+animData.h);\r\n if(!this.renderConfig.viewBoxOnly) {\r\n this.layerElement.setAttribute('width',animData.w);\r\n this.layerElement.setAttribute('height',animData.h);\r\n this.layerElement.style.width = '100%';\r\n this.layerElement.style.height = '100%';\r\n }\r\n if(this.renderConfig.className) {\r\n this.layerElement.setAttribute('class', this.renderConfig.className);\r\n }\r\n this.layerElement.setAttribute('preserveAspectRatio',this.renderConfig.preserveAspectRatio);\r\n //this.layerElement.style.transform = 'translate3d(0,0,0)';\r\n //this.layerElement.style.transformOrigin = this.layerElement.style.mozTransformOrigin = this.layerElement.style.webkitTransformOrigin = this.layerElement.style['-webkit-transform'] = \"0px 0px 0px\";\r\n this.animationItem.wrapper.appendChild(this.layerElement);\r\n //Mask animation\r\n var defs = document.createElementNS(svgNS, 'defs');\r\n this.globalData.defs = defs;\r\n this.layerElement.appendChild(defs);\r\n this.globalData.getAssetData = this.animationItem.getAssetData.bind(this.animationItem);\r\n this.globalData.getAssetsPath = this.animationItem.getAssetsPath.bind(this.animationItem);\r\n this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\r\n this.globalData.frameId = 0;\r\n this.globalData.nm = animData.nm;\r\n this.globalData.compSize = {\r\n w: animData.w,\r\n h: animData.h\r\n };\r\n this.data = animData;\r\n this.globalData.frameRate = animData.fr;\r\n var maskElement = document.createElementNS(svgNS, 'clipPath');\r\n var rect = document.createElementNS(svgNS,'rect');\r\n rect.setAttribute('width',animData.w);\r\n rect.setAttribute('height',animData.h);\r\n rect.setAttribute('x',0);\r\n rect.setAttribute('y',0);\r\n var maskId = 'animationMask_'+randomString(10);\r\n maskElement.setAttribute('id', maskId);\r\n maskElement.appendChild(rect);\r\n var maskedElement = document.createElementNS(svgNS,'g');\r\n maskedElement.setAttribute(\"clip-path\", \"url(\" + locationHref + \"#\"+maskId+\")\");\r\n this.layerElement.appendChild(maskedElement);\r\n defs.appendChild(maskElement);\r\n this.layerElement = maskedElement;\r\n this.layers = animData.layers;\r\n this.globalData.fontManager = new FontManager();\r\n this.globalData.fontManager.addChars(animData.chars);\r\n this.globalData.fontManager.addFonts(animData.fonts,defs);\r\n this.elements = Array.apply(null,{length:animData.layers.length});\r\n};\r\n\r\n\r\nSVGRenderer.prototype.destroy = function () {\r\n this.animationItem.wrapper.innerHTML = '';\r\n this.layerElement = null;\r\n this.globalData.defs = null;\r\n var i, len = this.layers ? this.layers.length : 0;\r\n for (i = 0; i < len; i++) {\r\n if(this.elements[i]){\r\n this.elements[i].destroy();\r\n }\r\n }\r\n this.elements.length = 0;\r\n this.destroyed = true;\r\n this.animationItem = null;\r\n};\r\n\r\nSVGRenderer.prototype.updateContainerSize = function () {\r\n};\r\n\r\nSVGRenderer.prototype.buildItem = function(pos){\r\n var elements = this.elements;\r\n if(elements[pos] || this.layers[pos].ty == 99){\r\n return;\r\n }\r\n elements[pos] = true;\r\n var element = this.createItem(this.layers[pos]);\r\n\r\n elements[pos] = element;\r\n if(expressionsPlugin){\r\n if(this.layers[pos].ty === 0){\r\n this.globalData.projectInterface.registerComposition(element);\r\n }\r\n element.initExpressions();\r\n }\r\n this.appendElementInPos(element,pos);\r\n if(this.layers[pos].tt){\r\n if(!this.elements[pos - 1] || this.elements[pos - 1] === true){\r\n this.buildItem(pos - 1);\r\n this.addPendingElement(element);\r\n } else {\r\n element.setMatte(elements[pos - 1].layerId);\r\n }\r\n }\r\n};\r\n\r\nSVGRenderer.prototype.checkPendingElements = function(){\r\n while(this.pendingElements.length){\r\n var element = this.pendingElements.pop();\r\n element.checkParenting();\r\n if(element.data.tt){\r\n var i = 0, len = this.elements.length;\r\n while(i<len){\r\n if(this.elements[i] === element){\r\n element.setMatte(this.elements[i - 1].layerId);\r\n break;\r\n }\r\n i += 1;\r\n }\r\n }\r\n }\r\n};\r\n\r\nSVGRenderer.prototype.renderFrame = function(num){\r\n if(this.renderedFrame == num || this.destroyed){\r\n return;\r\n }\r\n if(num === null){\r\n num = this.renderedFrame;\r\n }else{\r\n this.renderedFrame = num;\r\n }\r\n //clearPoints();\r\n /*console.log('-------');\r\n console.log('FRAME ',num);*/\r\n this.globalData.frameNum = num;\r\n this.globalData.frameId += 1;\r\n this.globalData.projectInterface.currentFrame = num;\r\n var i, len = this.layers.length;\r\n if(!this.completeLayers){\r\n this.checkLayers(num);\r\n }\r\n for (i = len - 1; i >= 0; i--) {\r\n if(this.completeLayers || this.elements[i]){\r\n this.elements[i].prepareFrame(num - this.layers[i].st);\r\n }\r\n }\r\n for (i = len - 1; i >= 0; i--) {\r\n if(this.completeLayers || this.elements[i]){\r\n this.elements[i].renderFrame();\r\n }\r\n }\r\n};\r\n\r\nSVGRenderer.prototype.appendElementInPos = function(element, pos){\r\n var newElement = element.getBaseElement();\r\n if(!newElement){\r\n return;\r\n }\r\n var i = 0;\r\n var nextElement;\r\n while(i<pos){\r\n if(this.elements[i] && this.elements[i]!== true && this.elements[i].getBaseElement()){\r\n nextElement = this.elements[i].getBaseElement();\r\n }\r\n i += 1;\r\n }\r\n if(nextElement){\r\n this.layerElement.insertBefore(newElement, nextElement);\r\n } else {\r\n this.layerElement.appendChild(newElement);\r\n }\r\n};\r\n\r\nSVGRenderer.prototype.hide = function(){\r\n this.layerElement.style.display = 'none';\r\n};\r\n\r\nSVGRenderer.prototype.show = function(){\r\n this.layerElement.style.display = 'block';\r\n};\r\n\r\nSVGRenderer.prototype.searchExtraCompositions = function(assets){\r\n var i, len = assets.length;\r\n var floatingContainer = document.createElementNS(svgNS,'g');\r\n for(i=0;i<len;i+=1){\r\n if(assets[i].xt){\r\n var comp = this.createComp(assets[i],floatingContainer,this.globalData.comp,null);\r\n comp.initExpressions();\r\n //comp.compInterface = CompExpressionInterface(comp);\r\n //Expressions.addLayersInterface(comp.elements, this.globalData.projectInterface);\r\n this.globalData.projectInterface.registerComposition(comp);\r\n }\r\n }\r\n};\r\n\nfunction MaskElement(data,element,globalData) {\r\n this.dynamicProperties = [];\r\n this.data = data;\r\n this.element = element;\r\n this.globalData = globalData;\r\n this.storedData = [];\r\n this.masksProperties = this.data.masksProperties;\r\n this.viewData = Array.apply(null,{length:this.masksProperties.length});\r\n this.maskElement = null;\r\n this.firstFrame = true;\r\n var defs = this.globalData.defs;\r\n var i, len = this.masksProperties.length;\r\n\r\n\r\n var path, properties = this.masksProperties;\r\n var count = 0;\r\n var currentMasks = [];\r\n var j, jLen;\r\n var layerId = randomString(10);\r\n var rect, expansor, feMorph,x;\r\n var maskType = 'clipPath', maskRef = 'clip-path';\r\n for (i = 0; i < len; i++) {\r\n\r\n if((properties[i].mode !== 'a' && properties[i].mode !== 'n')|| properties[i].inv || properties[i].o.k !== 100){\r\n maskType = 'mask';\r\n maskRef = 'mask';\r\n }\r\n\r\n if((properties[i].mode == 's' || properties[i].mode == 'i') && count == 0){\r\n rect = document.createElementNS(svgNS, 'rect');\r\n rect.setAttribute('fill', '#ffffff');\r\n rect.setAttribute('width', this.element.comp.data.w);\r\n rect.setAttribute('height', this.element.comp.data.h);\r\n currentMasks.push(rect);\r\n } else {\r\n rect = null;\r\n }\r\n\r\n path = document.createElementNS(svgNS, 'path');\r\n if(properties[i].mode == 'n') {\r\n this.viewData[i] = {\r\n op: PropertyFactory.getProp(this.element,properties[i].o,0,0.01,this.dynamicProperties),\r\n prop: ShapePropertyFactory.getShapeProp(this.element,properties[i],3,this.dynamicProperties,null),\r\n elem: path\r\n };\r\n defs.appendChild(path);\r\n continue;\r\n }\r\n count += 1;\r\n\r\n if(properties[i].mode == 's'){\r\n path.setAttribute('fill', '#000000');\r\n }else{\r\n path.setAttribute('fill', '#ffffff');\r\n }\r\n path.setAttribute('clip-rule','nonzero');\r\n\r\n if(properties[i].x.k !== 0){\r\n maskType = 'mask';\r\n maskRef = 'mask';\r\n x = PropertyFactory.getProp(this.element,properties[i].x,0,null,this.dynamicProperties);\r\n var filterID = 'fi_'+randomString(10);\r\n expansor = document.createElementNS(svgNS,'filter');\r\n expansor.setAttribute('id',filterID);\r\n feMorph = document.createElementNS(svgNS,'feMorphology');\r\n feMorph.setAttribute('operator','dilate');\r\n feMorph.setAttribute('in','SourceGraphic');\r\n feMorph.setAttribute('radius','0');\r\n expansor.appendChild(feMorph);\r\n defs.appendChild(expansor);\r\n if(properties[i].mode == 's'){\r\n path.setAttribute('stroke', '#000000');\r\n }else{\r\n path.setAttribute('stroke', '#ffffff');\r\n }\r\n }else{\r\n feMorph = null;\r\n x = null;\r\n }\r\n\r\n\r\n this.storedData[i] = {\r\n elem: path,\r\n x: x,\r\n expan: feMorph,\r\n lastPath: '',\r\n lastOperator:'',\r\n filterId:filterID,\r\n lastRadius:0\r\n };\r\n if(properties[i].mode == 'i'){\r\n jLen = currentMasks.length;\r\n var g = document.createElementNS(svgNS,'g');\r\n for(j=0;j<jLen;j+=1){\r\n g.appendChild(currentMasks[j]);\r\n }\r\n var mask = document.createElementNS(svgNS,'mask');\r\n mask.setAttribute('mask-type','alpha');\r\n mask.setAttribute('id',layerId+'_'+count);\r\n mask.appendChild(path);\r\n defs.appendChild(mask);\r\n g.setAttribute('mask','url(' + locationHref + '#'+layerId+'_'+count+')');\r\n\r\n currentMasks.length = 0;\r\n currentMasks.push(g);\r\n }else{\r\n currentMasks.push(path);\r\n }\r\n if(properties[i].inv && !this.solidPath){\r\n this.solidPath = this.createLayerSolidPath();\r\n }\r\n this.viewData[i] = {\r\n elem: path,\r\n lastPath: '',\r\n op: PropertyFactory.getProp(this.element,properties[i].o,0,0.01,this.dynamicProperties),\r\n prop:ShapePropertyFactory.getShapeProp(this.element,properties[i],3,this.dynamicProperties,null)\r\n };\r\n if(rect){\r\n this.viewData[i].invRect = rect;\r\n }\r\n if(!this.viewData[i].prop.k){\r\n this.drawPath(properties[i],this.viewData[i].prop.v,this.viewData[i]);\r\n }\r\n }\r\n\r\n this.maskElement = document.createElementNS(svgNS, maskType);\r\n\r\n len = currentMasks.length;\r\n for(i=0;i<len;i+=1){\r\n this.maskElement.appendChild(currentMasks[i]);\r\n }\r\n\r\n this.maskElement.setAttribute('id', layerId);\r\n if(count > 0){\r\n this.element.maskedElement.setAttribute(maskRef, \"url(\" + locationHref + \"#\" + layerId + \")\");\r\n }\r\n\r\n defs.appendChild(this.maskElement);\r\n};\r\n\r\nMaskElement.prototype.getMaskProperty = function(pos){\r\n return this.viewData[pos].prop;\r\n};\r\n\r\nMaskElement.prototype.prepareFrame = function(){\r\n var i, len = this.dynamicProperties.length;\r\n for(i=0;i<len;i+=1){\r\n this.dynamicProperties[i].getValue();\r\n\r\n }\r\n};\r\n\r\nMaskElement.prototype.renderFrame = function (finalMat) {\r\n var i, len = this.masksProperties.length;\r\n for (i = 0; i < len; i++) {\r\n if(this.viewData[i].prop.mdf || this.firstFrame){\r\n this.drawPath(this.masksProperties[i],this.viewData[i].prop.v,this.viewData[i]);\r\n }\r\n if(this.viewData[i].op.mdf || this.firstFrame){\r\n this.viewData[i].elem.setAttribute('fill-opacity',this.viewData[i].op.v);\r\n }\r\n if(this.masksProperties[i].mode !== 'n'){\r\n if(this.viewData[i].invRect && (this.element.finalTransform.mProp.mdf || this.firstFrame)){\r\n this.viewData[i].invRect.setAttribute('x', -finalMat.props[12]);\r\n this.viewData[i].invRect.setAttribute('y', -finalMat.props[13]);\r\n }\r\n if(this.storedData[i].x && (this.storedData[i].x.mdf || this.firstFrame)){\r\n var feMorph = this.storedData[i].expan;\r\n if(this.storedData[i].x.v < 0){\r\n if(this.storedData[i].lastOperator !== 'erode'){\r\n this.storedData[i].lastOperator = 'erode';\r\n this.storedData[i].elem.setAttribute('filter','url(' + locationHref + '#'+this.storedData[i].filterId+')');\r\n }\r\n feMorph.setAttribute('radius',-this.storedData[i].x.v);\r\n }else{\r\n if(this.storedData[i].lastOperator !== 'dilate'){\r\n this.storedData[i].lastOperator = 'dilate';\r\n this.storedData[i].elem.setAttribute('filter',null);\r\n }\r\n this.storedData[i].elem.setAttribute('stroke-width', this.storedData[i].x.v*2);\r\n\r\n }\r\n }\r\n }\r\n }\r\n this.firstFrame = false;\r\n};\r\n\r\nMaskElement.prototype.getMaskelement = function () {\r\n return this.maskElement;\r\n};\r\n\r\nMaskElement.prototype.createLayerSolidPath = function(){\r\n var path = 'M0,0 ';\r\n path += ' h' + this.globalData.compSize.w ;\r\n path += ' v' + this.globalData.compSize.h ;\r\n path += ' h-' + this.globalData.compSize.w ;\r\n path += ' v-' + this.globalData.compSize.h + ' ';\r\n return path;\r\n};\r\n\r\nMaskElement.prototype.drawPath = function(pathData,pathNodes,viewData){\r\n var pathString = \" M\"+pathNodes.v[0][0]+','+pathNodes.v[0][1];\r\n var i, len;\r\n len = pathNodes._length;\r\n for(i=1;i<len;i+=1){\r\n //pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[i][0]+','+pathNodes.i[i][1] + \" \"+pathNodes.v[i][0]+','+pathNodes.v[i][1];\r\n pathString += \" C\"+bm_rnd(pathNodes.o[i-1][0])+','+bm_rnd(pathNodes.o[i-1][1]) + \" \"+bm_rnd(pathNodes.i[i][0])+','+bm_rnd(pathNodes.i[i][1]) + \" \"+bm_rnd(pathNodes.v[i][0])+','+bm_rnd(pathNodes.v[i][1]);\r\n }\r\n //pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[0][0]+','+pathNodes.i[0][1] + \" \"+pathNodes.v[0][0]+','+pathNodes.v[0][1];\r\n if(pathNodes.c && len > 1){\r\n pathString += \" C\"+bm_rnd(pathNodes.o[i-1][0])+','+bm_rnd(pathNodes.o[i-1][1]) + \" \"+bm_rnd(pathNodes.i[0][0])+','+bm_rnd(pathNodes.i[0][1]) + \" \"+bm_rnd(pathNodes.v[0][0])+','+bm_rnd(pathNodes.v[0][1]);\r\n }\r\n //pathNodes.__renderedString = pathString;\r\n\r\n\r\n if(viewData.lastPath !== pathString){\r\n if(viewData.elem){\r\n if(!pathNodes.c){\r\n viewData.elem.setAttribute('d','');\r\n }else if(pathData.inv){\r\n viewData.elem.setAttribute('d',this.solidPath + pathString);\r\n }else{\r\n viewData.elem.setAttribute('d',pathString);\r\n }\r\n }\r\n viewData.lastPath = pathString;\r\n }\r\n};\r\n\r\nMaskElement.prototype.destroy = function(){\r\n this.element = null;\r\n this.globalData = null;\r\n this.maskElement = null;\r\n this.data = null;\r\n this.masksProperties = null;\r\n};\nfunction BaseElement(){\r\n};\r\nBaseElement.prototype.checkMasks = function(){\r\n if(!this.data.hasMask){\r\n return false;\r\n }\r\n var i = 0, len = this.data.masksProperties.length;\r\n while(i<len) {\r\n if((this.data.masksProperties[i].mode !== 'n' && this.data.masksProperties[i].cl !== false)) {\r\n return true;\r\n }\r\n i += 1;\r\n }\r\n return false;\r\n}\r\n\r\nBaseElement.prototype.checkParenting = function(){\r\n if(this.data.parent !== undefined){\r\n this.comp.buildElementParenting(this, this.data.parent);\r\n }\r\n}\r\n\r\nBaseElement.prototype.prepareFrame = function(num){\r\n if(this.data.ip - this.data.st <= num && this.data.op - this.data.st > num)\r\n {\r\n if(this.isVisible !== true){\r\n this.elemMdf = true;\r\n this.globalData.mdf = true;\r\n this.isVisible = true;\r\n this.firstFrame = true;\r\n if(this.data.hasMask){\r\n this.maskManager.firstFrame = true;\r\n }\r\n }\r\n }else{\r\n if(this.isVisible !== false){\r\n this.elemMdf = true;\r\n this.globalData.mdf = true;\r\n this.isVisible = false;\r\n }\r\n }\r\n var i, len = this.dynamicProperties.length;\r\n for(i=0;i<len;i+=1){\r\n if(this.isVisible || (this._isParent && this.dynamicProperties[i].type === 'transform')){\r\n this.dynamicProperties[i].getValue();\r\n if(this.dynamicProperties[i].mdf){\r\n this.elemMdf = true;\r\n this.globalData.mdf = true;\r\n }\r\n }\r\n }\r\n if(this.data.hasMask && this.isVisible){\r\n this.maskManager.prepareFrame(num*this.data.sr);\r\n }\r\n \r\n /* TODO check this\r\n if(this.data.sy){\r\n if(this.data.sy[0].renderedData[num]){\r\n if(this.data.sy[0].renderedData[num].c){\r\n this.feFlood.setAttribute('flood-color','rgb('+Math.round(this.data.sy[0].renderedData[num].c[0])+','+Math.round(this.data.sy[0].renderedData[num].c[1])+','+Math.round(this.data.sy[0].renderedData[num].c[2])+')');\r\n }\r\n if(this.data.sy[0].renderedData[num].s){\r\n this.feMorph.setAttribute('radius',this.data.sy[0].renderedData[num].s);\r\n }\r\n }\r\n }\r\n */\r\n\r\n\r\n this.currentFrameNum = num*this.data.sr;\r\n return this.isVisible;\r\n};\r\n\r\nBaseElement.prototype.globalToLocal = function(pt){\r\n var transforms = [];\r\n transforms.push(this.finalTransform);\r\n var flag = true;\r\n var comp = this.comp;\r\n while(flag){\r\n if(comp.finalTransform){\r\n if(comp.data.hasMask){\r\n transforms.splice(0,0,comp.finalTransform);\r\n }\r\n comp = comp.comp;\r\n } else {\r\n flag = false;\r\n }\r\n }\r\n var i, len = transforms.length,ptNew;\r\n for(i=0;i<len;i+=1){\r\n ptNew = transforms[i].mat.applyToPointArray(0,0,0);\r\n //ptNew = transforms[i].mat.applyToPointArray(pt[0],pt[1],pt[2]);\r\n pt = [pt[0] - ptNew[0],pt[1] - ptNew[1],0];\r\n }\r\n return pt;\r\n};\r\n\r\nBaseElement.prototype.initExpressions = function(){\r\n this.layerInterface = LayerExpressionInterface(this);\r\n //layers[i].layerInterface = LayerExpressionInterface(layers[i]);\r\n //layers[i].layerInterface = LayerExpressionInterface(layers[i]);\r\n if(this.data.hasMask){\r\n this.layerInterface.registerMaskInterface(this.maskManager);\r\n }\r\n var effectsInterface = EffectsExpressionInterface.createEffectsInterface(this,this.layerInterface);\r\n this.layerInterface.registerEffectsInterface(effectsInterface);\r\n\r\n if(this.data.ty === 0 || this.data.xt){\r\n this.compInterface = CompExpressionInterface(this);\r\n } else if(this.data.ty === 4){\r\n this.layerInterface.shapeInterface = ShapeExpressionInterface.createShapeInterface(this.shapesData,this.itemsData,this.layerInterface);\r\n } else if(this.data.ty === 5){\r\n this.layerInterface.textInterface = TextExpressionInterface(this);\r\n }\r\n}\r\n\r\nBaseElement.prototype.setBlendMode = function(){\r\n var blendModeValue = '';\r\n switch(this.data.bm){\r\n case 1:\r\n blendModeValue = 'multiply';\r\n break;\r\n case 2:\r\n blendModeValue = 'screen';\r\n break;\r\n case 3:\r\n blendModeValue = 'overlay';\r\n break;\r\n case 4:\r\n blendModeValue = 'darken';\r\n break;\r\n case 5:\r\n blendModeValue = 'lighten';\r\n break;\r\n case 6:\r\n blendModeValue = 'color-dodge';\r\n break;\r\n case 7:\r\n blendModeValue = 'color-burn';\r\n break;\r\n case 8:\r\n blendModeValue = 'hard-light';\r\n break;\r\n case 9:\r\n blendModeValue = 'soft-light';\r\n break;\r\n case 10:\r\n blendModeValue = 'difference';\r\n break;\r\n case 11:\r\n blendModeValue = 'exclusion';\r\n break;\r\n case 12:\r\n blendModeValue = 'hue';\r\n break;\r\n case 13:\r\n blendModeValue = 'saturation';\r\n break;\r\n case 14:\r\n blendModeValue = 'color';\r\n break;\r\n case 15:\r\n blendModeValue = 'luminosity';\r\n break;\r\n }\r\n var elem = this.baseElement || this.layerElement;\r\n\r\n elem.style['mix-blend-mode'] = blendModeValue;\r\n}\r\n\r\nBaseElement.prototype.init = function(){\r\n if(!this.data.sr){\r\n this.data.sr = 1;\r\n }\r\n this.dynamicProperties = this.dynamicProperties || [];\r\n if(this.data.ef){\r\n this.effects = new EffectsManager(this.data,this,this.dynamicProperties);\r\n //this.effect = this.effectsManager.bind(this.effectsManager);\r\n }\r\n //this.elemInterface = buildLayerExpressionInterface(this);\r\n this.hidden = false;\r\n this.firstFrame = true;\r\n this.isVisible = false;\r\n this._isParent = false;\r\n this.currentFrameNum = -99999;\r\n this.lastNum = -99999;\r\n if(this.data.ks){\r\n this.finalTransform = {\r\n mProp: PropertyFactory.getProp(this,this.data.ks,2,null,this.dynamicProperties),\r\n matMdf: false,\r\n opMdf: false,\r\n mat: new Matrix(),\r\n opacity: 1\r\n };\r\n if(this.data.ao){\r\n this.finalTransform.mProp.autoOriented = true;\r\n }\r\n this.finalTransform.op = this.finalTransform.mProp.o;\r\n this.transform = this.finalTransform.mProp;\r\n if(this.data.ty !== 11){\r\n this.createElements();\r\n }\r\n if(this.data.hasMask){\r\n this.addMasks(this.data);\r\n }\r\n }\r\n this.elemMdf = false;\r\n};\r\nBaseElement.prototype.getType = function(){\r\n return this.type;\r\n};\r\n\r\nBaseElement.prototype.resetHierarchy = function(){\r\n if(!this.hierarchy){\r\n this.hierarchy = [];\r\n }else{\r\n this.hierarchy.length = 0;\r\n }\r\n};\r\n\r\nBaseElement.prototype.getHierarchy = function(){\r\n if(!this.hierarchy){\r\n this.hierarchy = [];\r\n }\r\n return this.hierarchy;\r\n};\r\n\r\nBaseElement.prototype.setHierarchy = function(hierarchy){\r\n this.hierarchy = hierarchy;\r\n};\r\n\r\nBaseElement.prototype.getLayerSize = function(){\r\n if(this.data.ty === 5){\r\n return {w:this.data.textData.width,h:this.data.textData.height};\r\n }else{\r\n return {w:this.data.width,h:this.data.height};\r\n }\r\n};\r\n\r\nBaseElement.prototype.hide = function(){\r\n\r\n};\r\n\r\nBaseElement.prototype.sourceRectAtTime = function(){\r\n return {\r\n top:0,\r\n left:0,\r\n width:100,\r\n height:100\r\n }\r\n};\r\n\r\nBaseElement.prototype.mHelper = new Matrix();\nfunction SVGBaseElement(data,parentContainer,globalData,comp, placeholder){\r\n this.globalData = globalData;\r\n this.comp = comp;\r\n this.data = data;\r\n this.matteElement = null;\r\n this.transformedElement = null;\r\n this.isTransparent = false;\r\n this.parentContainer = parentContainer;\r\n this.layerId = placeholder ? placeholder.layerId : 'ly_'+randomString(10);\r\n this.placeholder = placeholder;\r\n this._sizeChanged = false;\r\n this.init();\r\n};\r\n\r\ncreateElement(BaseElement, SVGBaseElement);\r\n\r\nSVGBaseElement.prototype.createElements = function(){\r\n this.layerElement = document.createElementNS(svgNS,'g');\r\n this.transformedElement = this.layerElement;\r\n if(this.data.hasMask){\r\n this.maskedElement = this.layerElement;\r\n }\r\n var layerElementParent = null;\r\n if(this.data.td){\r\n if(this.data.td == 3 || this.data.td == 1){\r\n var masker = document.createElementNS(svgNS,'mask');\r\n masker.setAttribute('id',this.layerId);\r\n masker.setAttribute('mask-type',this.data.td == 3 ? 'luminance':'alpha');\r\n masker.appendChild(this.layerElement);\r\n layerElementParent = masker;\r\n this.globalData.defs.appendChild(masker);\r\n ////// This is only for IE and Edge when mask if of type alpha\r\n if(!featureSupport.maskType && this.data.td == 1){\r\n masker.setAttribute('mask-type','luminance');\r\n var filId = randomString(10);\r\n var fil = filtersFactory.createFilter(filId);\r\n this.globalData.defs.appendChild(fil);\r\n fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\r\n var gg = document.createElementNS(svgNS,'g');\r\n gg.appendChild(this.layerElement);\r\n layerElementParent = gg;\r\n masker.appendChild(gg);\r\n gg.setAttribute('filter','url(' + locationHref + '#'+filId+')');\r\n }\r\n }else if(this.data.td == 2){\r\n var maskGroup = document.createElementNS(svgNS,'mask');\r\n maskGroup.setAttribute('id',this.layerId);\r\n maskGroup.setAttribute('mask-type','alpha');\r\n var maskGrouper = document.createElementNS(svgNS,'g');\r\n maskGroup.appendChild(maskGrouper);\r\n var filId = randomString(10);\r\n var fil = filtersFactory.createFilter(filId);\r\n ////\r\n\r\n var feColorMatrix = document.createElementNS(svgNS,'feColorMatrix');\r\n feColorMatrix.setAttribute('type','matrix');\r\n feColorMatrix.setAttribute('color-interpolation-filters','sRGB');\r\n feColorMatrix.setAttribute('values','1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 -1 1');\r\n fil.appendChild(feColorMatrix);\r\n\r\n ////\r\n /*var feCTr = document.createElementNS(svgNS,'feComponentTransfer');\r\n feCTr.setAttribute('in','SourceGraphic');\r\n fil.appendChild(feCTr);\r\n var feFunc = document.createElementNS(svgNS,'feFuncA');\r\n feFunc.setAttribute('type','table');\r\n feFunc.setAttribute('tableValues','1.0 0.0');\r\n feCTr.appendChild(feFunc);*/\r\n this.globalData.defs.appendChild(fil);\r\n var alphaRect = document.createElementNS(svgNS,'rect');\r\n alphaRect.setAttribute('width',this.comp.data.w);\r\n alphaRect.setAttribute('height',this.comp.data.h);\r\n alphaRect.setAttribute('x','0');\r\n alphaRect.setAttribute('y','0');\r\n alphaRect.setAttribute('fill','#ffffff');\r\n alphaRect.setAttribute('opacity','0');\r\n maskGrouper.setAttribute('filter','url(' + locationHref + '#'+filId+')');\r\n maskGrouper.appendChild(alphaRect);\r\n maskGrouper.appendChild(this.layerElement);\r\n layerElementParent = maskGrouper;\r\n if(!featureSupport.maskType){\r\n maskGroup.setAttribute('mask-type','luminance');\r\n fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\r\n var gg = document.createElementNS(svgNS,'g');\r\n maskGrouper.appendChild(alphaRect);\r\n gg.appendChild(this.layerElement);\r\n layerElementParent = gg;\r\n maskGrouper.appendChild(gg);\r\n }\r\n this.globalData.defs.appendChild(maskGroup);\r\n }\r\n }else if(this.data.hasMask || this.data.tt){\r\n if(this.data.tt){\r\n this.matteElement = document.createElementNS(svgNS,'g');\r\n this.matteElement.appendChild(this.layerElement);\r\n layerElementParent = this.matteElement;\r\n this.baseElement = this.matteElement;\r\n }else{\r\n this.baseElement = this.layerElement;\r\n }\r\n }else{\r\n this.baseElement = this.layerElement;\r\n }\r\n if((this.data.ln || this.data.cl) && (this.data.ty === 4 || this.data.ty === 0)){\r\n if(this.data.ln){\r\n this.layerElement.setAttribute('id',this.data.ln);\r\n }\r\n if(this.data.cl){\r\n this.layerElement.setAttribute('class',this.data.cl);\r\n }\r\n }\r\n if(this.data.ty === 0){\r\n var cp = document.createElementNS(svgNS, 'clipPath');\r\n var pt = document.createElementNS(svgNS,'path');\r\n pt.setAttribute('d','M0,0 L'+this.data.w+',0'+' L'+this.data.w+','+this.data.h+' L0,'+this.data.h+'z');\r\n var clipId = 'cp_'+randomString(8);\r\n cp.setAttribute('id',clipId);\r\n cp.appendChild(pt);\r\n this.globalData.defs.appendChild(cp);\r\n if(this.checkMasks()){\r\n var cpGroup = document.createElementNS(svgNS,'g');\r\n cpGroup.setAttribute('clip-path','url(' + locationHref + '#'+clipId+')');\r\n cpGroup.appendChild(this.layerElement);\r\n this.transformedElement = cpGroup;\r\n if(layerElementParent){\r\n layerElementParent.appendChild(this.transformedElement);\r\n } else {\r\n this.baseElement = this.transformedElement;\r\n }\r\n } else {\r\n this.layerElement.setAttribute('clip-path','url(' + locationHref + '#'+clipId+')');\r\n }\r\n \r\n }\r\n if(this.data.bm !== 0){\r\n this.setBlendMode();\r\n }\r\n if(this.layerElement !== this.parentContainer){\r\n this.placeholder = null;\r\n }\r\n /* Todo performance killer\r\n if(this.data.sy){\r\n var filterID = 'st_'+randomString(10);\r\n var c = this.data.sy[0].c.k;\r\n var r = this.data.sy[0].s.k;\r\n var expansor = document.createElementNS(svgNS,'filter');\r\n expansor.setAttribute('id',filterID);\r\n var feFlood = document.createElementNS(svgNS,'feFlood');\r\n this.feFlood = feFlood;\r\n if(!c[0].e){\r\n feFlood.setAttribute('flood-color','rgb('+c[0]+','+c[1]+','+c[2]+')');\r\n }\r\n feFlood.setAttribute('result','base');\r\n expansor.appendChild(feFlood);\r\n var feMorph = document.createElementNS(svgNS,'feMorphology');\r\n feMorph.setAttribute('operator','dilate');\r\n feMorph.setAttribute('in','SourceGraphic');\r\n feMorph.setAttribute('result','bigger');\r\n this.feMorph = feMorph;\r\n if(!r.length){\r\n feMorph.setAttribute('radius',this.data.sy[0].s.k);\r\n }\r\n expansor.appendChild(feMorph);\r\n var feColorMatrix = document.createElementNS(svgNS,'feColorMatrix');\r\n feColorMatrix.setAttribute('result','mask');\r\n feColorMatrix.setAttribute('in','bigger');\r\n feColorMatrix.setAttribute('type','matrix');\r\n feColorMatrix.setAttribute('values','0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0');\r\n expansor.appendChild(feColorMatrix);\r\n var feComposite = document.createElementNS(svgNS,'feComposite');\r\n feComposite.setAttribute('result','drop');\r\n feComposite.setAttribute('in','base');\r\n feComposite.setAttribute('in2','mask');\r\n feComposite.setAttribute('operator','in');\r\n expansor.appendChild(feComposite);\r\n var feBlend = document.createElementNS(svgNS,'feBlend');\r\n feBlend.setAttribute('in','SourceGraphic');\r\n feBlend.setAttribute('in2','drop');\r\n feBlend.setAttribute('mode','normal');\r\n expansor.appendChild(feBlend);\r\n this.globalData.defs.appendChild(expansor);\r\n var cont = document.createElementNS(svgNS,'g');\r\n if(this.layerElement === this.parentContainer){\r\n this.layerElement = cont;\r\n }else{\r\n cont.appendChild(this.layerElement);\r\n }\r\n cont.setAttribute('filter','url(#'+filterID+')');\r\n if(this.data.td){\r\n cont.setAttribute('data-td',this.data.td);\r\n }\r\n if(this.data.td == 3){\r\n this.globalData.defs.appendChild(cont);\r\n }else if(this.data.td == 2){\r\n maskGrouper.appendChild(cont);\r\n }else if(this.data.td == 1){\r\n masker.appendChild(cont);\r\n }else{\r\n if(this.data.hasMask && this.data.tt){\r\n this.matteElement.appendChild(cont);\r\n }else{\r\n this.appendNodeToParent(cont);\r\n }\r\n }\r\n }*/\r\n if(this.data.ef){\r\n this.effectsManager = new SVGEffects(this);\r\n }\r\n this.checkParenting();\r\n};\r\n\r\n\r\nSVGBaseElement.prototype.setBlendMode = BaseElement.prototype.setBlendMode;\r\n\r\nSVGBaseElement.prototype.renderFrame = function(parentTransform){\r\n if(this.data.ty === 3 || this.data.hd || !this.isVisible){\r\n return false;\r\n }\r\n\r\n this.lastNum = this.currentFrameNum;\r\n this.finalTransform.opMdf = this.firstFrame || this.finalTransform.op.mdf;\r\n this.finalTransform.matMdf = this.firstFrame || this.finalTransform.mProp.mdf;\r\n this.finalTransform.opacity = this.finalTransform.op.v;\r\n\r\n var mat;\r\n var finalMat = this.finalTransform.mat;\r\n\r\n if(this.hierarchy){\r\n var i = 0, len = this.hierarchy.length;\r\n if(!this.finalTransform.matMdf) {\r\n while(i < len) {\r\n if(this.hierarchy[i].finalTransform.mProp.mdf) {\r\n this.finalTransform.matMdf = true;\r\n break;\r\n }\r\n i += 1;\r\n }\r\n }\r\n \r\n if(this.finalTransform.matMdf) {\r\n mat = this.finalTransform.mProp.v.props;\r\n finalMat.cloneFromProps(mat);\r\n for(i=0;i<len;i+=1){\r\n mat = this.hierarchy[i].finalTransform.mProp.v.props;\r\n finalMat.transform(mat[0],mat[1],mat[2],mat[3],mat[4],mat[5],mat[6],mat[7],mat[8],mat[9],mat[10],mat[11],mat[12],mat[13],mat[14],mat[15]);\r\n }\r\n }\r\n \r\n }else if(this.isVisible){\r\n finalMat = this.finalTransform.mProp.v;\r\n }\r\n if(this.finalTransform.matMdf && this.layerElement){\r\n this.transformedElement.setAttribute('transform',finalMat.to2dCSS());\r\n }\r\n if(this.finalTransform.opMdf && this.layerElement){\r\n if(this.finalTransform.op.v <= 0) {\r\n if(!this.isTransparent && this.globalData.renderConfig.hideOnTransparent){\r\n this.isTransparent = true;\r\n this.hide();\r\n }\r\n } else if(this.hidden && this.isTransparent){\r\n this.isTransparent = false;\r\n this.show();\r\n }\r\n this.transformedElement.setAttribute('opacity',this.finalTransform.op.v);\r\n }\r\n\r\n if(this.data.hasMask){\r\n this.maskManager.renderFrame(finalMat);\r\n }\r\n if(this.effectsManager){\r\n this.effectsManager.renderFrame(this.firstFrame);\r\n }\r\n return this.isVisible;\r\n};\r\n\r\nSVGBaseElement.prototype.destroy = function(){\r\n this.layerElement = null;\r\n this.parentContainer = null;\r\n if(this.matteElement) {\r\n this.matteElement = null;\r\n }\r\n if(this.maskManager) {\r\n this.maskManager.destroy();\r\n }\r\n};\r\n\r\nSVGBaseElement.prototype.getBaseElement = function(){\r\n return this.baseElement;\r\n};\r\nSVGBaseElement.prototype.addMasks = function(data){\r\n this.maskManager = new MaskElement(data,this,this.globalData);\r\n};\r\n\r\nSVGBaseElement.prototype.setMatte = function(id){\r\n if(!this.matteElement){\r\n return;\r\n }\r\n this.matteElement.setAttribute(\"mask\", \"url(\" + locationHref + \"#\" + id + \")\");\r\n};\r\n\r\nSVGBaseElement.prototype.hide = function(){\r\n if(!this.hidden){\r\n this.layerElement.style.display = 'none';\r\n this.hidden = true;\r\n }\r\n};\r\n\r\nSVGBaseElement.prototype.show = function(){\r\n if(this.isVisible && !this.isTransparent){\r\n this.hidden = false;\r\n this.layerElement.style.display = 'block';\r\n }\r\n};\r\n\nfunction IShapeElement(data,parentContainer,globalData,comp, placeholder){\r\n this.shapes = [];\r\n this.shapesData = data.shapes;\r\n this.stylesList = [];\r\n this.itemsData = [];\r\n this.prevViewData = [];\r\n this.shapeModifiers = [];\r\n this.processedElements = [];\r\n this._parent.constructor.call(this,data,parentContainer,globalData,comp, placeholder);\r\n}\r\ncreateElement(SVGBaseElement, IShapeElement);\r\n\r\nIShapeElement.prototype.identityMatrix = new Matrix();\r\n\r\nIShapeElement.prototype.lcEnum = {\r\n '1': 'butt',\r\n '2': 'round',\r\n '3': 'square'\r\n}\r\n\r\nIShapeElement.prototype.ljEnum = {\r\n '1': 'miter',\r\n '2': 'round',\r\n '3': 'butt'\r\n}\r\n\r\nIShapeElement.prototype.searchProcessedElement = function(elem){\r\n var i = this.processedElements.length;\r\n while(i){\r\n i -= 1;\r\n if(this.processedElements[i].elem === elem){\r\n return this.processedElements[i].pos;\r\n }\r\n }\r\n return 0;\r\n};\r\n\r\nIShapeElement.prototype.addProcessedElement = function(elem, pos){\r\n var i = this.processedElements.length;\r\n while(i){\r\n i -= 1;\r\n if(this.processedElements[i].elem === elem){\r\n this.processedElements[i].pos = pos;\r\n break;\r\n }\r\n }\r\n if(i === 0){\r\n this.processedElements.push({\r\n elem: elem,\r\n pos: pos\r\n })\r\n }\r\n};\r\n\r\nIShapeElement.prototype.buildExpressionInterface = function(){};\r\n\r\nIShapeElement.prototype.createElements = function(){\r\n //TODO check if I can use symbol so i can set its viewBox\r\n this._parent.createElements.call(this);\r\n this.searchShapes(this.shapesData,this.itemsData,this.prevViewData,this.layerElement,this.dynamicProperties, 0, [], true);\r\n if(!this.data.hd || this.data.td){\r\n styleUnselectableDiv(this.layerElement);\r\n }\r\n};\r\n\r\nIShapeElement.prototype.setGradientData = function(pathElement,arr,data){\r\n\r\n var gradientId = 'gr_'+randomString(10);\r\n var gfill;\r\n if(arr.t === 1){\r\n gfill = document.createElementNS(svgNS,'linearGradient');\r\n } else {\r\n gfill = document.createElementNS(svgNS,'radialGradient');\r\n }\r\n gfill.setAttribute('id',gradientId);\r\n gfill.setAttribute('spreadMethod','pad');\r\n gfill.setAttribute('gradientUnits','userSpaceOnUse');\r\n var stops = [];\r\n var stop, j, jLen;\r\n jLen = arr.g.p*4;\r\n for(j=0;j<jLen;j+=4){\r\n stop = document.createElementNS(svgNS,'stop');\r\n gfill.appendChild(stop);\r\n stops.push(stop);\r\n }\r\n pathElement.setAttribute( arr.ty === 'gf' ? 'fill':'stroke','url(#'+gradientId+')');\r\n this.globalData.defs.appendChild(gfill);\r\n data.gf = gfill;\r\n data.cst = stops;\r\n}\r\n\r\nIShapeElement.prototype.setGradientOpacity = function(arr, data, styleOb){\r\n if((arr.g.k.k[0].s && arr.g.k.k[0].s.length > arr.g.p*4) || arr.g.k.k.length > arr.g.p*4){\r\n var opFill;\r\n var stop, j, jLen;\r\n var mask = document.createElementNS(svgNS,\"mask\");\r\n var maskElement = document.createElementNS(svgNS, 'path');\r\n mask.appendChild(maskElement);\r\n var opacityId = 'op_'+randomString(10);\r\n var maskId = 'mk_'+randomString(10);\r\n mask.setAttribute('id',maskId);\r\n if(arr.t === 1){\r\n opFill = document.createElementNS(svgNS,'linearGradient');\r\n } else {\r\n opFill = document.createElementNS(svgNS,'radialGradient');\r\n }\r\n opFill.setAttribute('id',opacityId);\r\n opFill.setAttribute('spreadMethod','pad');\r\n opFill.setAttribute('gradientUnits','userSpaceOnUse');\r\n jLen = arr.g.k.k[0].s ? arr.g.k.k[0].s.length : arr.g.k.k.length;\r\n var stops = [];\r\n for(j=arr.g.p*4;j<jLen;j+=2){\r\n stop = document.createElementNS(svgNS,'stop');\r\n stop.setAttribute('stop-color','rgb(255,255,255)');\r\n //stop.setAttribute('offset',Math.round(arr.y[j][0]*100)+'%');\r\n //stop.setAttribute('style','stop-color:rgb(255,255,255);stop-opacity:'+arr.y[j][1]);\r\n opFill.appendChild(stop);\r\n stops.push(stop);\r\n }\r\n maskElement.setAttribute( arr.ty === 'gf' ? 'fill':'stroke','url(#'+opacityId+')');\r\n this.globalData.defs.appendChild(opFill);\r\n this.globalData.defs.appendChild(mask);\r\n data.of = opFill;\r\n data.ost = stops;\r\n styleOb.msElem = maskElement;\r\n return maskId;\r\n }\r\n};\r\n\r\nIShapeElement.prototype.createStyleElement = function(data, level, dynamicProperties){\r\n var elementData = {\r\n };\r\n var styleOb = {\r\n data: data,\r\n type: data.ty,\r\n d: '',\r\n ld: '',\r\n lvl: level,\r\n mdf: false,\r\n closed: false\r\n };\r\n var pathElement = document.createElementNS(svgNS, \"path\");\r\n elementData.o = PropertyFactory.getProp(this,data.o,0,0.01,dynamicProperties);\r\n if(data.ty == 'st' || data.ty == 'gs') {\r\n pathElement.setAttribute('stroke-linecap', this.lcEnum[data.lc] || 'round');\r\n ////pathElement.style.strokeLinecap = this.lcEnum[data.lc] || 'round';\r\n pathElement.setAttribute('stroke-linejoin',this.ljEnum[data.lj] || 'round');\r\n ////pathElement.style.strokeLinejoin = this.ljEnum[data.lj] || 'round';\r\n pathElement.setAttribute('fill-opacity','0');\r\n ////pathElement.style.fillOpacity = 0;\r\n if(data.lj == 1) {\r\n pathElement.setAttribute('stroke-miterlimit',data.ml);\r\n ////pathElement.style.strokeMiterlimit = data.ml;\r\n }\r\n\r\n elementData.w = PropertyFactory.getProp(this,data.w,0,null,dynamicProperties);\r\n if(data.d){\r\n var d = PropertyFactory.getDashProp(this,data.d,'svg',dynamicProperties);\r\n if(!d.k){\r\n pathElement.setAttribute('stroke-dasharray', d.dasharray);\r\n ////pathElement.style.strokeDasharray = d.dasharray;\r\n pathElement.setAttribute('stroke-dashoffset', d.dashoffset);\r\n ////pathElement.style.strokeDashoffset = d.dashoffset;\r\n }\r\n elementData.d = d;\r\n }\r\n\r\n }\r\n if(data.ty == 'fl' || data.ty == 'st'){\r\n elementData.c = PropertyFactory.getProp(this,data.c,1,255,dynamicProperties);\r\n } else {\r\n elementData.g = PropertyFactory.getGradientProp(this,data.g,dynamicProperties);\r\n if(data.t == 2){\r\n elementData.h = PropertyFactory.getProp(this,data.h,0,0.01,dynamicProperties);\r\n elementData.a = PropertyFactory.getProp(this,data.a,0,degToRads,dynamicProperties);\r\n }\r\n elementData.s = PropertyFactory.getProp(this,data.s,1,null,dynamicProperties);\r\n elementData.e = PropertyFactory.getProp(this,data.e,1,null,dynamicProperties);\r\n this.setGradientData(pathElement,data,elementData, styleOb);\r\n var maskId = this.setGradientOpacity(data,elementData, styleOb);\r\n if(maskId){\r\n pathElement.setAttribute('mask','url(#'+maskId+')');\r\n }\r\n }\r\n elementData.elem = pathElement;\r\n //container.appendChild(pathElement);\r\n if(data.r === 2) {\r\n pathElement.setAttribute('fill-rule', 'evenodd');\r\n }\r\n\r\n if(data.ln){\r\n pathElement.setAttribute('id',data.ln);\r\n }\r\n if(data.cl){\r\n pathElement.setAttribute('class',data.cl);\r\n }\r\n styleOb.pElem = pathElement;\r\n this.stylesList.push(styleOb);\r\n elementData.style = styleOb;\r\n return elementData;\r\n}\r\n\r\nIShapeElement.prototype.createGroupElement = function(data) {\r\n var elementData = {\r\n it: [],\r\n prevViewData: []\r\n };\r\n var g = document.createElementNS(svgNS,'g');\r\n elementData.gr = g;\r\n if(data.ln){\r\n elementData.gr.setAttribute('id',data.ln);\r\n }\r\n return elementData;\r\n}\r\n\r\nIShapeElement.prototype.createTransformElement = function(data, dynamicProperties) {\r\n var elementData = {\r\n transform : {\r\n op: PropertyFactory.getProp(this,data.o,0,0.01,dynamicProperties),\r\n mProps: PropertyFactory.getProp(this,data,2,null,dynamicProperties)\r\n },\r\n elements: []\r\n };\r\n return elementData;\r\n}\r\n\r\nIShapeElement.prototype.createShapeElement = function(data, ownTransformers, level, dynamicProperties) {\r\n var elementData = {\r\n elements : [],\r\n caches:[],\r\n styles : [],\r\n transformers: ownTransformers,\r\n lStr: ''\r\n };\r\n var ty = 4;\r\n if(data.ty == 'rc'){\r\n ty = 5;\r\n }else if(data.ty == 'el'){\r\n ty = 6;\r\n }else if(data.ty == 'sr'){\r\n ty = 7;\r\n }\r\n elementData.sh = ShapePropertyFactory.getShapeProp(this,data,ty,dynamicProperties);\r\n elementData.lvl = level;\r\n this.shapes.push(elementData.sh);\r\n this.addShapeToModifiers(elementData);\r\n return elementData;\r\n}\r\n\r\nvar cont = 0;\r\n\r\nIShapeElement.prototype.setElementStyles = function(){\r\n var j, jLen = this.stylesList.length;\r\n var arr = [];\r\n for(j=0;j<jLen;j+=1){\r\n if(!this.stylesList[j].closed){\r\n arr.push(this.stylesList[j]);\r\n }\r\n }\r\n return arr;\r\n}\r\n\r\nIShapeElement.prototype.reloadShapes = function(){\r\n this.firstFrame = true;\r\n var i, len = this.itemsData.length;\r\n for(i=0;i<len;i+=1){\r\n this.prevViewData[i] = this.itemsData[i];\r\n }\r\n this.searchShapes(this.shapesData,this.itemsData,this.prevViewData,this.layerElement,this.dynamicProperties, 0, [], true);\r\n var i, len = this.dynamicProperties.length;\r\n for(i=0;i<len;i+=1){\r\n this.dynamicProperties[i].getValue();\r\n }\r\n this.renderModifiers();\r\n}\r\n\r\nIShapeElement.prototype.searchShapes = function(arr,itemsData,prevViewData,container,dynamicProperties, level, transformers, render){\r\n var ownTransformers = [].concat(transformers);\r\n var i, len = arr.length - 1;\r\n var j, jLen;\r\n var ownStyles = [], ownModifiers = [], styleOb, currentTransform, modifier, processedPos;\r\n for(i=len;i>=0;i-=1){\r\n processedPos = this.searchProcessedElement(arr[i]);\r\n if(!processedPos){\r\n arr[i]._render = render;\r\n } else {\r\n itemsData[i] = prevViewData[processedPos - 1];\r\n }\r\n if(arr[i].ty == 'fl' || arr[i].ty == 'st' || arr[i].ty == 'gf' || arr[i].ty == 'gs'){\r\n if(!processedPos){\r\n itemsData[i] = this.createStyleElement(arr[i], level, dynamicProperties);\r\n } else {\r\n itemsData[i].style.closed = false;\r\n }\r\n if(arr[i]._render){\r\n container.appendChild(itemsData[i].elem);\r\n }\r\n ownStyles.push(itemsData[i].style);\r\n }else if(arr[i].ty == 'gr'){\r\n if(!processedPos){\r\n itemsData[i] = this.createGroupElement(arr[i]);\r\n } else {\r\n jLen = itemsData[i].it.length;\r\n for(j=0;j<jLen;j+=1){\r\n itemsData[i].prevViewData[j] = itemsData[i].it[j];\r\n }\r\n }\r\n this.searchShapes(arr[i].it,itemsData[i].it,itemsData[i].prevViewData,itemsData[i].gr,dynamicProperties, level + 1, ownTransformers, render);\r\n if(arr[i]._render){\r\n container.appendChild(itemsData[i].gr);\r\n }\r\n }else if(arr[i].ty == 'tr'){\r\n if(!processedPos){\r\n itemsData[i] = this.createTransformElement(arr[i], dynamicProperties);\r\n }\r\n currentTransform = itemsData[i].transform;\r\n ownTransformers.push(currentTransform);\r\n }else if(arr[i].ty == 'sh' || arr[i].ty == 'rc' || arr[i].ty == 'el' || arr[i].ty == 'sr'){\r\n if(!processedPos){\r\n itemsData[i] = this.createShapeElement(arr[i], ownTransformers, level, dynamicProperties);\r\n }\r\n itemsData[i].elements = this.setElementStyles();\r\n\r\n }else if(arr[i].ty == 'tm' || arr[i].ty == 'rd' || arr[i].ty == 'ms'){\r\n if(!processedPos){\r\n modifier = ShapeModifiers.getModifier(arr[i].ty);\r\n modifier.init(this,arr[i],dynamicProperties);\r\n itemsData[i] = modifier;\r\n this.shapeModifiers.push(modifier);\r\n } else {\r\n modifier = itemsData[i];\r\n modifier.closed = false;\r\n }\r\n ownModifiers.push(modifier);\r\n }else if(arr[i].ty == 'rp'){\r\n if(!processedPos){\r\n modifier = ShapeModifiers.getModifier(arr[i].ty);\r\n itemsData[i] = modifier;\r\n modifier.init(this,arr,i,itemsData,dynamicProperties);\r\n this.shapeModifiers.push(modifier);\r\n render = false;\r\n }else{\r\n modifier = itemsData[i];\r\n modifier.closed = true;\r\n }\r\n ownModifiers.push(modifier);\r\n }\r\n this.addProcessedElement(arr[i], i + 1);\r\n }\r\n len = ownStyles.length;\r\n for(i=0;i<len;i+=1){\r\n ownStyles[i].closed = true;\r\n }\r\n len = ownModifiers.length;\r\n for(i=0;i<len;i+=1){\r\n ownModifiers[i].closed = true;\r\n }\r\n};\r\n\r\nIShapeElement.prototype.addShapeToModifiers = function(data) {\r\n var i, len = this.shapeModifiers.length;\r\n for(i=0;i<len;i+=1){\r\n this.shapeModifiers[i].addShape(data);\r\n }\r\n};\r\n\r\nIShapeElement.prototype.renderModifiers = function() {\r\n if(!this.shapeModifiers.length){\r\n return;\r\n }\r\n var i, len = this.shapes.length;\r\n for(i=0;i<len;i+=1){\r\n this.shapes[i].reset();\r\n }\r\n\r\n\r\n len = this.shapeModifiers.length;\r\n\r\n for(i=len-1;i>=0;i-=1){\r\n this.shapeModifiers[i].processShapes(this.firstFrame);\r\n }\r\n};\r\n\r\nIShapeElement.prototype.renderFrame = function(parentMatrix){\r\n //this.reloadShapes();\r\n var renderParent = this._parent.renderFrame.call(this,parentMatrix);\r\n if(renderParent===false){\r\n this.hide();\r\n return;\r\n }\r\n if(this.hidden){\r\n this.layerElement.style.display = 'block';\r\n this.hidden = false;\r\n }\r\n this.renderModifiers();\r\n var i, len = this.stylesList.length;\r\n for(i=0;i<len;i+=1){\r\n this.stylesList[i].d = '';\r\n this.stylesList[i].mdf = false;\r\n }\r\n this.renderShape(this.shapesData,this.itemsData, null);\r\n\r\n for (i = 0; i < len; i += 1) {\r\n if (this.stylesList[i].ld === '0') {\r\n this.stylesList[i].ld = '1';\r\n this.stylesList[i].pElem.style.display = 'block';\r\n //this.stylesList[i].parent.appendChild(this.stylesList[i].pElem);\r\n }\r\n if (this.stylesList[i].mdf || this.firstFrame) {\r\n this.stylesList[i].pElem.setAttribute('d', this.stylesList[i].d);\r\n if(this.stylesList[i].msElem){\r\n this.stylesList[i].msElem.setAttribute('d', this.stylesList[i].d);\r\n }\r\n }\r\n }\r\n if (this.firstFrame) {\r\n this.firstFrame = false;\r\n }\r\n};\r\n\r\nIShapeElement.prototype.hide = function(){\r\n if(!this.hidden){\r\n this.layerElement.style.display = 'none';\r\n var i, len = this.stylesList.length;\r\n for(i=len-1;i>=0;i-=1){\r\n if(this.stylesList[i].ld !== '0'){\r\n this.stylesList[i].ld = '0';\r\n this.stylesList[i].pElem.style.display = 'none';\r\n if(this.stylesList[i].pElem.parentNode){\r\n this.stylesList[i].parent = this.stylesList[i].pElem.parentNode;\r\n //this.stylesList[i].pElem.parentNode.removeChild(this.stylesList[i].pElem);\r\n }\r\n }\r\n }\r\n this.hidden = true;\r\n }\r\n};\r\n\r\nIShapeElement.prototype.renderShape = function(items,data, container){\r\n var i, len = items.length - 1;\r\n var ty;\r\n for(i=len;i>=0;i-=1){\r\n ty = items[i].ty;\r\n if(ty == 'tr'){\r\n if(this.firstFrame || data[i].transform.op.mdf && container){\r\n container.setAttribute('opacity',data[i].transform.op.v);\r\n }\r\n if(this.firstFrame || data[i].transform.mProps.mdf && container){\r\n container.setAttribute('transform',data[i].transform.mProps.v.to2dCSS());\r\n }\r\n }else if(ty == 'sh' || ty == 'el' || ty == 'rc' || ty == 'sr'){\r\n this.renderPath(items[i],data[i]);\r\n }else if(ty == 'fl'){\r\n this.renderFill(items[i],data[i]);\r\n }else if(ty == 'gf'){\r\n this.renderGradient(items[i],data[i]);\r\n }else if(ty == 'gs'){\r\n this.renderGradient(items[i],data[i]);\r\n this.renderStroke(items[i],data[i]);\r\n }else if(ty == 'st'){\r\n this.renderStroke(items[i],data[i]);\r\n }else if(ty == 'gr'){\r\n this.renderShape(items[i].it,data[i].it, data[i].gr);\r\n }else if(ty == 'tm'){\r\n //\r\n }\r\n }\r\n\r\n};\r\n\r\nIShapeElement.prototype.buildShapeString = function(pathNodes, length, closed, mat) {\r\n var i, shapeString = '';\r\n for(i = 1; i < length; i += 1) {\r\n if (i === 1) {\r\n shapeString += \" M\" + mat.applyToPointStringified(pathNodes.v[0][0], pathNodes.v[0][1]);\r\n }\r\n shapeString += \" C\" + mat.applyToPointStringified(pathNodes.o[i - 1][0], pathNodes.o[i - 1][1]) + \" \" + mat.applyToPointStringified(pathNodes.i[i][0], pathNodes.i[i][1]) + \" \" + mat.applyToPointStringified(pathNodes.v[i][0], pathNodes.v[i][1]);\r\n }\r\n if (length === 1) {\r\n shapeString += \" M\" + mat.applyToPointStringified(pathNodes.v[0][0], pathNodes.v[0][1]);\r\n }\r\n if (closed && length) {\r\n shapeString += \" C\" + mat.applyToPointStringified(pathNodes.o[i - 1][0], pathNodes.o[i - 1][1]) + \" \" + mat.applyToPointStringified(pathNodes.i[0][0], pathNodes.i[0][1]) + \" \" + mat.applyToPointStringified(pathNodes.v[0][0], pathNodes.v[0][1]);\r\n shapeString += 'z';\r\n }\r\n return shapeString;\r\n};\r\n\r\nIShapeElement.prototype.renderPath = function(pathData,itemData){\r\n var len, i, j, jLen,pathStringTransformed,redraw,pathNodes,l, lLen = itemData.elements.length;\r\n var lvl = itemData.lvl;\r\n if(!pathData._render){\r\n return;\r\n }\r\n for(l=0;l<lLen;l+=1){\r\n if(itemData.elements[l].data._render){\r\n redraw = itemData.sh.mdf || this.firstFrame;\r\n pathStringTransformed = 'M0 0';\r\n var paths = itemData.sh.paths;\r\n jLen = paths._length;\r\n if(itemData.elements[l].lvl < lvl){\r\n var mat = this.mHelper.reset(), props;\r\n var iterations = lvl - itemData.elements[l].lvl;\r\n var k = itemData.transformers.length-1;\r\n while(iterations > 0) {\r\n redraw = itemData.transformers[k].mProps.mdf || redraw;\r\n props = itemData.transformers[k].mProps.v.props;\r\n mat.transform(props[0],props[1],props[2],props[3],props[4],props[5],props[6],props[7],props[8],props[9],props[10],props[11],props[12],props[13],props[14],props[15]);\r\n iterations --;\r\n k --;\r\n }\r\n if(redraw){\r\n for(j=0;j<jLen;j+=1){\r\n pathNodes = paths.shapes[j];\r\n if(pathNodes && pathNodes._length){\r\n pathStringTransformed += this.buildShapeString(pathNodes, pathNodes._length, pathNodes.c, mat);\r\n }\r\n }\r\n itemData.caches[l] = pathStringTransformed;\r\n } else {\r\n pathStringTransformed = itemData.caches[l];\r\n }\r\n } else {\r\n if(redraw){\r\n for(j=0;j<jLen;j+=1){\r\n pathNodes = paths.shapes[j];\r\n if(pathNodes && pathNodes._length){\r\n pathStringTransformed += this.buildShapeString(pathNodes, pathNodes._length, pathNodes.c, this.identityMatrix);\r\n }\r\n }\r\n itemData.caches[l] = pathStringTransformed;\r\n } else {\r\n pathStringTransformed = itemData.caches[l];\r\n }\r\n }\r\n itemData.elements[l].d += pathStringTransformed;\r\n itemData.elements[l].mdf = redraw || itemData.elements[l].mdf;\r\n } else {\r\n itemData.elements[l].mdf = true;\r\n }\r\n }\r\n};\r\n\r\nIShapeElement.prototype.renderFill = function(styleData,itemData){\r\n var styleElem = itemData.style;\r\n\r\n if(itemData.c.mdf || this.firstFrame){\r\n styleElem.pElem.setAttribute('fill','rgb('+bm_floor(itemData.c.v[0])+','+bm_floor(itemData.c.v[1])+','+bm_floor(itemData.c.v[2])+')');\r\n ////styleElem.pElem.style.fill = 'rgb('+bm_floor(itemData.c.v[0])+','+bm_floor(itemData.c.v[1])+','+bm_floor(itemData.c.v[2])+')';\r\n }\r\n if(itemData.o.mdf || this.firstFrame){\r\n styleElem.pElem.setAttribute('fill-opacity',itemData.o.v);\r\n }\r\n};\r\n\r\nIShapeElement.prototype.renderGradient = function(styleData,itemData){\r\n var gfill = itemData.gf;\r\n var opFill = itemData.of;\r\n var pt1 = itemData.s.v,pt2 = itemData.e.v;\r\n\r\n if(itemData.o.mdf || this.firstFrame){\r\n var attr = styleData.ty === 'gf' ? 'fill-opacity':'stroke-opacity';\r\n itemData.elem.setAttribute(attr,itemData.o.v);\r\n }\r\n //clippedElement.setAttribute('transform','matrix(1,0,0,1,-100,0)');\r\n if(itemData.s.mdf || this.firstFrame){\r\n var attr1 = styleData.t === 1 ? 'x1':'cx';\r\n var attr2 = attr1 === 'x1' ? 'y1':'cy';\r\n gfill.setAttribute(attr1,pt1[0]);\r\n gfill.setAttribute(attr2,pt1[1]);\r\n if(opFill){\r\n opFill.setAttribute(attr1,pt1[0]);\r\n opFill.setAttribute(attr2,pt1[1]);\r\n }\r\n }\r\n var stops, i, len, stop;\r\n if(itemData.g.cmdf || this.firstFrame){\r\n stops = itemData.cst;\r\n var cValues = itemData.g.c;\r\n len = stops.length;\r\n for(i=0;i<len;i+=1){\r\n stop = stops[i];\r\n stop.setAttribute('offset',cValues[i*4]+'%');\r\n stop.setAttribute('stop-color','rgb('+cValues[i*4+1]+','+cValues[i*4+2]+','+cValues[i*4+3]+')');\r\n }\r\n }\r\n if(opFill && (itemData.g.omdf || this.firstFrame)){\r\n stops = itemData.ost;\r\n var oValues = itemData.g.o;\r\n len = stops.length;\r\n for(i=0;i<len;i+=1){\r\n stop = stops[i];\r\n stop.setAttribute('offset',oValues[i*2]+'%');\r\n stop.setAttribute('stop-opacity',oValues[i*2+1]);\r\n }\r\n }\r\n if(styleData.t === 1){\r\n if(itemData.e.mdf || this.firstFrame){\r\n gfill.setAttribute('x2',pt2[0]);\r\n gfill.setAttribute('y2',pt2[1]);\r\n if(opFill){\r\n opFill.setAttribute('x2',pt2[0]);\r\n opFill.setAttribute('y2',pt2[1]);\r\n }\r\n }\r\n } else {\r\n var rad;\r\n if(itemData.s.mdf || itemData.e.mdf || this.firstFrame){\r\n rad = Math.sqrt(Math.pow(pt1[0]-pt2[0],2)+Math.pow(pt1[1]-pt2[1],2));\r\n gfill.setAttribute('r',rad);\r\n if(opFill){\r\n opFill.setAttribute('r',rad);\r\n }\r\n }\r\n if(itemData.e.mdf || itemData.h.mdf || itemData.a.mdf || this.firstFrame){\r\n if(!rad){\r\n rad = Math.sqrt(Math.pow(pt1[0]-pt2[0],2)+Math.pow(pt1[1]-pt2[1],2));\r\n }\r\n var ang = Math.atan2(pt2[1]-pt1[1], pt2[0]-pt1[0]);\r\n\r\n var percent = itemData.h.v >= 1 ? 0.99 : itemData.h.v <= -1 ? -0.99:itemData.h.v;\r\n var dist = rad*percent;\r\n var x = Math.cos(ang + itemData.a.v)*dist + pt1[0];\r\n var y = Math.sin(ang + itemData.a.v)*dist + pt1[1];\r\n gfill.setAttribute('fx',x);\r\n gfill.setAttribute('fy',y);\r\n if(opFill){\r\n opFill.setAttribute('fx',x);\r\n opFill.setAttribute('fy',y);\r\n }\r\n }\r\n //gfill.setAttribute('fy','200');\r\n }\r\n};\r\n\r\nIShapeElement.prototype.renderStroke = function(styleData,itemData){\r\n var styleElem = itemData.style;\r\n //TODO fix dashes\r\n var d = itemData.d;\r\n var dasharray,dashoffset;\r\n if(d && d.k && (d.mdf || this.firstFrame)){\r\n styleElem.pElem.setAttribute('stroke-dasharray', d.dasharray);\r\n ////styleElem.pElem.style.strokeDasharray = d.dasharray;\r\n styleElem.pElem.setAttribute('stroke-dashoffset', d.dashoffset);\r\n ////styleElem.pElem.style.strokeDashoffset = d.dashoffset;\r\n }\r\n if(itemData.c && (itemData.c.mdf || this.firstFrame)){\r\n styleElem.pElem.setAttribute('stroke','rgb('+bm_floor(itemData.c.v[0])+','+bm_floor(itemData.c.v[1])+','+bm_floor(itemData.c.v[2])+')');\r\n ////styleElem.pElem.style.stroke = 'rgb('+bm_floor(itemData.c.v[0])+','+bm_floor(itemData.c.v[1])+','+bm_floor(itemData.c.v[2])+')';\r\n }\r\n if(itemData.o.mdf || this.firstFrame){\r\n styleElem.pElem.setAttribute('stroke-opacity',itemData.o.v);\r\n }\r\n if(itemData.w.mdf || this.firstFrame){\r\n styleElem.pElem.setAttribute('stroke-width',itemData.w.v);\r\n if(styleElem.msElem){\r\n styleElem.msElem.setAttribute('stroke-width',itemData.w.v);\r\n }\r\n ////styleElem.pElem.style.strokeWidth = itemData.w.v;\r\n }\r\n};\r\n\r\nIShapeElement.prototype.destroy = function(){\r\n this._parent.destroy.call(this._parent);\r\n this.shapeData = null;\r\n this.itemsData = null;\r\n this.parentContainer = null;\r\n this.placeholder = null;\r\n};\r\n\nfunction ITextElement(data, animationItem,parentContainer,globalData){\r\n}\r\nITextElement.prototype.init = function(){\r\n this.lettersChangedFlag = true;\r\n this.dynamicProperties = this.dynamicProperties || [];\r\n this.textAnimator = new TextAnimatorProperty(this.data.t, this.renderType, this);\r\n this.textProperty = new TextProperty(this, this.data.t, this.dynamicProperties);\r\n this._parent.init.call(this);\r\n this.textAnimator.searchProperties(this.dynamicProperties);\r\n};\r\n\r\nITextElement.prototype.prepareFrame = function(num) {\r\n this._parent.prepareFrame.call(this, num);\r\n if(this.textProperty.mdf || this.textProperty.firstFrame) {\r\n this.buildNewText();\r\n this.textProperty.firstFrame = false;\r\n }\r\n}\r\n\r\nITextElement.prototype.createPathShape = function(matrixHelper, shapes) {\r\n var j,jLen = shapes.length;\r\n var k, kLen, pathNodes;\r\n var shapeStr = '';\r\n for(j=0;j<jLen;j+=1){\r\n pathNodes = shapes[j].ks.k;\r\n shapeStr += this.buildShapeString(pathNodes, pathNodes.i.length, true, matrixHelper);\r\n }\r\n return shapeStr;\r\n};\r\n\r\nITextElement.prototype.updateDocumentData = function(newData, index) {\r\n this.textProperty.updateDocumentData(newData, index);\r\n}\r\n\r\nITextElement.prototype.applyTextPropertiesToMatrix = function(documentData, matrixHelper, lineNumber, xPos, yPos) {\r\n if(documentData.ps){\r\n matrixHelper.translate(documentData.ps[0],documentData.ps[1] + documentData.ascent,0);\r\n }\r\n matrixHelper.translate(0,-documentData.ls,0);\r\n switch(documentData.j){\r\n case 1:\r\n matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]),0,0);\r\n break;\r\n case 2:\r\n matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber] )/2,0,0);\r\n break;\r\n }\r\n matrixHelper.translate(xPos, yPos, 0);\r\n}\r\n\r\nITextElement.prototype.buildColor = function(colorData) {\r\n return 'rgb(' + Math.round(colorData[0]*255) + ',' + Math.round(colorData[1]*255) + ',' + Math.round(colorData[2]*255) + ')';\r\n}\r\n\r\nITextElement.prototype.buildShapeString = IShapeElement.prototype.buildShapeString;\r\n\r\nITextElement.prototype.emptyProp = new LetterProps();\r\n\r\nITextElement.prototype.destroy = function(){\r\n this._parent.destroy.call(this._parent);\r\n};\nfunction SVGTextElement(data,parentContainer,globalData,comp, placeholder){\r\n this.textSpans = [];\r\n this.renderType = 'svg';\r\n this._parent.constructor.call(this,data,parentContainer,globalData,comp, placeholder);\r\n}\r\ncreateElement(SVGBaseElement, SVGTextElement);\r\n\r\nextendPrototype(ITextElement, SVGTextElement);\r\n\r\nSVGTextElement.prototype.createElements = function(){\r\n\r\n this._parent.createElements.call(this);\r\n\r\n\r\n if(this.data.ln){\r\n this.layerElement.setAttribute('id',this.data.ln);\r\n }\r\n if(this.data.cl){\r\n this.layerElement.setAttribute('class',this.data.cl);\r\n }\r\n if (this.data.singleShape && !this.globalData.fontManager.chars) {\r\n this.textContainer = document.createElementNS(svgNS,'text');\r\n }\r\n};\r\n\r\nSVGTextElement.prototype.buildNewText = function(){\r\n var i, len;\r\n\r\n var documentData = this.textProperty.currentData;\r\n this.renderedLetters = Array.apply(null,{length:documentData ? documentData.l.length : 0});\r\n if(documentData.fc) {\r\n this.layerElement.setAttribute('fill', this.buildColor(documentData.fc));\r\n }else{\r\n this.layerElement.setAttribute('fill', 'rgba(0,0,0,0)');\r\n }\r\n if(documentData.sc){\r\n this.layerElement.setAttribute('stroke', this.buildColor(documentData.sc));\r\n this.layerElement.setAttribute('stroke-width', documentData.sw);\r\n }\r\n this.layerElement.setAttribute('font-size', documentData.s);\r\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\r\n if(fontData.fClass){\r\n this.layerElement.setAttribute('class',fontData.fClass);\r\n } else {\r\n this.layerElement.setAttribute('font-family', fontData.fFamily);\r\n var fWeight = documentData.fWeight, fStyle = documentData.fStyle;\r\n this.layerElement.setAttribute('font-style', fStyle);\r\n this.layerElement.setAttribute('font-weight', fWeight);\r\n }\r\n\r\n var letters = documentData.l || [];\r\n var usesGlyphs = this.globalData.fontManager.chars;\r\n len = letters.length;\r\n if(!len){\r\n return;\r\n }\r\n var tSpan;\r\n var matrixHelper = this.mHelper;\r\n var shapes, shapeStr = '', singleShape = this.data.singleShape;\r\n var xPos = 0, yPos = 0, firstLine = true;\r\n var trackingOffset = documentData.tr/1000*documentData.s;\r\n if(singleShape && !usesGlyphs) {\r\n var tElement = this.textContainer;\r\n var justify = '';\r\n switch(documentData.j) {\r\n case 1:\r\n justify = 'end';\r\n break;\r\n case 2:\r\n justify = 'middle';\r\n break;\r\n case 2:\r\n justify = 'start';\r\n break;\r\n }\r\n tElement.setAttribute('text-anchor',justify);\r\n tElement.setAttribute('letter-spacing',trackingOffset);\r\n var textContent = documentData.t.split(String.fromCharCode(13));\r\n len = textContent.length;\r\n var yPos = documentData.ps ? documentData.ps[1] + documentData.ascent : 0;\r\n for ( i = 0; i < len; i += 1) {\r\n tSpan = this.textSpans[i] || document.createElementNS(svgNS,'tspan');\r\n tSpan.textContent = textContent[i];\r\n tSpan.setAttribute('x', 0);\r\n tSpan.setAttribute('y', yPos);\r\n tSpan.style.display = 'inherit';\r\n tElement.appendChild(tSpan);\r\n this.textSpans[i] = tSpan;\r\n yPos += documentData.lh;\r\n }\r\n \r\n this.layerElement.appendChild(tElement);\r\n } else {\r\n var cachedSpansLength = this.textSpans.length;\r\n var shapeData, charData;\r\n for (i = 0; i < len; i += 1) {\r\n if(!usesGlyphs || !singleShape || i === 0){\r\n tSpan = cachedSpansLength > i ? this.textSpans[i] : document.createElementNS(svgNS,usesGlyphs?'path':'text');\r\n if (cachedSpansLength <= i) {\r\n tSpan.setAttribute('stroke-linecap', 'butt');\r\n tSpan.setAttribute('stroke-linejoin','round');\r\n tSpan.setAttribute('stroke-miterlimit','4');\r\n this.textSpans[i] = tSpan;\r\n this.layerElement.appendChild(tSpan);\r\n }\r\n tSpan.style.display = 'inherit';\r\n }\r\n \r\n matrixHelper.reset();\r\n if(usesGlyphs) {\r\n matrixHelper.scale(documentData.s / 100, documentData.s / 100);\r\n if (singleShape) {\r\n if(letters[i].n) {\r\n xPos = -trackingOffset;\r\n yPos += documentData.yOffset;\r\n yPos += firstLine ? 1 : 0;\r\n firstLine = false;\r\n }\r\n this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\r\n xPos += letters[i].l || 0;\r\n //xPos += letters[i].val === ' ' ? 0 : trackingOffset;\r\n xPos += trackingOffset;\r\n }\r\n charData = this.globalData.fontManager.getCharData(documentData.t.charAt(i), fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\r\n shapeData = charData && charData.data || {};\r\n shapes = shapeData.shapes ? shapeData.shapes[0].it : [];\r\n if(!singleShape){\r\n tSpan.setAttribute('d',this.createPathShape(matrixHelper,shapes));\r\n } else {\r\n shapeStr += this.createPathShape(matrixHelper,shapes);\r\n }\r\n } else {\r\n tSpan.textContent = letters[i].val;\r\n tSpan.setAttributeNS(\"http://www.w3.org/XML/1998/namespace\", \"xml:space\",\"preserve\");\r\n }\r\n //\r\n }\r\n if (singleShape) {\r\n tSpan.setAttribute('d',shapeStr);\r\n }\r\n }\r\n while (i < this.textSpans.length){\r\n this.textSpans[i].style.display = 'none';\r\n i += 1;\r\n }\r\n \r\n this._sizeChanged = true;\r\n}\r\n\r\nSVGTextElement.prototype.sourceRectAtTime = function(time){\r\n this.prepareFrame(this.comp.renderedFrame - this.data.st);\r\n this.renderLetters();\r\n if(this._sizeChanged){\r\n this._sizeChanged = false;\r\n var textBox = this.layerElement.getBBox();\r\n this.bbox = {\r\n top: textBox.y,\r\n left: textBox.x,\r\n width: textBox.width,\r\n height: textBox.height\r\n }\r\n }\r\n return this.bbox;\r\n}\r\n\r\nSVGTextElement.prototype.renderLetters = function(){\r\n\r\n if(!this.data.singleShape){\r\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\r\n if(this.lettersChangedFlag || this.textAnimator.lettersChangedFlag){\r\n this._sizeChanged = true;\r\n var i,len;\r\n var renderedLetters = this.textAnimator.renderedLetters;\r\n\r\n var letters = this.textProperty.currentData.l;\r\n\r\n len = letters.length;\r\n var renderedLetter, textSpan;\r\n for(i=0;i<len;i+=1){\r\n if(letters[i].n){\r\n continue;\r\n }\r\n renderedLetter = renderedLetters[i];\r\n textSpan = this.textSpans[i];\r\n if(renderedLetter.mdf.m) {\r\n textSpan.setAttribute('transform',renderedLetter.m);\r\n }\r\n if(renderedLetter.mdf.o) {\r\n textSpan.setAttribute('opacity',renderedLetter.o);\r\n }\r\n if(renderedLetter.mdf.sw){\r\n textSpan.setAttribute('stroke-width',renderedLetter.sw);\r\n }\r\n if(renderedLetter.mdf.sc){\r\n textSpan.setAttribute('stroke',renderedLetter.sc);\r\n }\r\n if(renderedLetter.mdf.fc){\r\n textSpan.setAttribute('fill',renderedLetter.fc);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nSVGTextElement.prototype.renderFrame = function(parentMatrix){\r\n\r\n var renderParent = this._parent.renderFrame.call(this,parentMatrix);\r\n if(renderParent===false){\r\n this.hide();\r\n return;\r\n }\r\n if(this.hidden){\r\n this.show();\r\n }\r\n if(this.firstFrame) {\r\n this.firstFrame = false;\r\n }\r\n this.renderLetters();\r\n}\nfunction SVGTintFilter(filter, filterManager){\r\n this.filterManager = filterManager;\r\n var feColorMatrix = document.createElementNS(svgNS,'feColorMatrix');\r\n feColorMatrix.setAttribute('type','matrix');\r\n feColorMatrix.setAttribute('color-interpolation-filters','linearRGB');\r\n feColorMatrix.setAttribute('values','0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0');\r\n feColorMatrix.setAttribute('result','f1');\r\n filter.appendChild(feColorMatrix);\r\n feColorMatrix = document.createElementNS(svgNS,'feColorMatrix');\r\n feColorMatrix.setAttribute('type','matrix');\r\n feColorMatrix.setAttribute('color-interpolation-filters','sRGB');\r\n feColorMatrix.setAttribute('values','1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\r\n feColorMatrix.setAttribute('result','f2');\r\n filter.appendChild(feColorMatrix);\r\n this.matrixFilter = feColorMatrix;\r\n if(filterManager.effectElements[2].p.v !== 100 || filterManager.effectElements[2].p.k){\r\n var feMerge = document.createElementNS(svgNS,'feMerge');\r\n filter.appendChild(feMerge);\r\n var feMergeNode;\r\n feMergeNode = document.createElementNS(svgNS,'feMergeNode');\r\n feMergeNode.setAttribute('in','SourceGraphic');\r\n feMerge.appendChild(feMergeNode);\r\n feMergeNode = document.createElementNS(svgNS,'feMergeNode');\r\n feMergeNode.setAttribute('in','f2');\r\n feMerge.appendChild(feMergeNode);\r\n }\r\n}\r\n\r\nSVGTintFilter.prototype.renderFrame = function(forceRender){\r\n if(forceRender || this.filterManager.mdf){\r\n var colorBlack = this.filterManager.effectElements[0].p.v;\r\n var colorWhite = this.filterManager.effectElements[1].p.v;\r\n var opacity = this.filterManager.effectElements[2].p.v/100;\r\n this.matrixFilter.setAttribute('values',(colorWhite[0]- colorBlack[0])+' 0 0 0 '+ colorBlack[0] +' '+ (colorWhite[1]- colorBlack[1]) +' 0 0 0 '+ colorBlack[1] +' '+ (colorWhite[2]- colorBlack[2]) +' 0 0 0 '+ colorBlack[2] +' 0 0 0 ' + opacity + ' 0');\r\n }\r\n};\nfunction SVGFillFilter(filter, filterManager){\r\n this.filterManager = filterManager;\r\n var feColorMatrix = document.createElementNS(svgNS,'feColorMatrix');\r\n feColorMatrix.setAttribute('type','matrix');\r\n feColorMatrix.setAttribute('color-interpolation-filters','sRGB');\r\n feColorMatrix.setAttribute('values','1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\r\n filter.appendChild(feColorMatrix);\r\n this.matrixFilter = feColorMatrix;\r\n}\r\nSVGFillFilter.prototype.renderFrame = function(forceRender){\r\n if(forceRender || this.filterManager.mdf){\r\n var color = this.filterManager.effectElements[2].p.v;\r\n var opacity = this.filterManager.effectElements[6].p.v;\r\n this.matrixFilter.setAttribute('values','0 0 0 0 '+color[0]+' 0 0 0 0 '+color[1]+' 0 0 0 0 '+color[2]+' 0 0 0 '+opacity+' 0');\r\n }\r\n};\nfunction SVGStrokeEffect(elem, filterManager){\r\n this.initialized = false;\r\n this.filterManager = filterManager;\r\n this.elem = elem;\r\n this.paths = [];\r\n}\r\n\r\nSVGStrokeEffect.prototype.initialize = function(){\r\n\r\n var elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\r\n var path,groupPath, i, len;\r\n if(this.filterManager.effectElements[1].p.v === 1){\r\n len = this.elem.maskManager.masksProperties.length;\r\n i = 0;\r\n } else {\r\n i = this.filterManager.effectElements[0].p.v - 1;\r\n len = i + 1;\r\n }\r\n groupPath = document.createElementNS(svgNS,'g'); \r\n groupPath.setAttribute('fill','none');\r\n groupPath.setAttribute('stroke-linecap','round');\r\n groupPath.setAttribute('stroke-dashoffset',1);\r\n for(i;i<len;i+=1){\r\n path = document.createElementNS(svgNS,'path');\r\n groupPath.appendChild(path);\r\n this.paths.push({p:path,m:i});\r\n }\r\n if(this.filterManager.effectElements[10].p.v === 3){\r\n var mask = document.createElementNS(svgNS,'mask');\r\n var id = 'stms_' + randomString(10);\r\n mask.setAttribute('id',id);\r\n mask.setAttribute('mask-type','alpha');\r\n mask.appendChild(groupPath);\r\n this.elem.globalData.defs.appendChild(mask);\r\n var g = document.createElementNS(svgNS,'g');\r\n g.setAttribute('mask','url(' + locationHref + '#'+id+')');\r\n if(elemChildren[0]){\r\n g.appendChild(elemChildren[0]);\r\n }\r\n this.elem.layerElement.appendChild(g);\r\n this.masker = mask;\r\n groupPath.setAttribute('stroke','#fff');\r\n } else if(this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2){\r\n if(this.filterManager.effectElements[10].p.v === 2){\r\n var elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\r\n while(elemChildren.length){\r\n this.elem.layerElement.removeChild(elemChildren[0]);\r\n }\r\n }\r\n this.elem.layerElement.appendChild(groupPath);\r\n this.elem.layerElement.removeAttribute('mask');\r\n groupPath.setAttribute('stroke','#fff');\r\n }\r\n this.initialized = true;\r\n this.pathMasker = groupPath;\r\n}\r\n\r\nSVGStrokeEffect.prototype.renderFrame = function(forceRender){\r\n if(!this.initialized){\r\n this.initialize();\r\n }\r\n var i, len = this.paths.length;\r\n var mask, path;\r\n for(i=0;i<len;i+=1){\r\n mask = this.elem.maskManager.viewData[this.paths[i].m];\r\n path = this.paths[i].p;\r\n if(forceRender || this.filterManager.mdf || mask.prop.mdf){\r\n path.setAttribute('d',mask.lastPath);\r\n }\r\n if(forceRender || this.filterManager.effectElements[9].p.mdf || this.filterManager.effectElements[4].p.mdf || this.filterManager.effectElements[7].p.mdf || this.filterManager.effectElements[8].p.mdf || mask.prop.mdf){\r\n var dasharrayValue;\r\n if(this.filterManager.effectElements[7].p.v !== 0 || this.filterManager.effectElements[8].p.v !== 100){\r\n var s = Math.min(this.filterManager.effectElements[7].p.v,this.filterManager.effectElements[8].p.v)/100;\r\n var e = Math.max(this.filterManager.effectElements[7].p.v,this.filterManager.effectElements[8].p.v)/100;\r\n var l = path.getTotalLength();\r\n dasharrayValue = '0 0 0 ' + l*s + ' ';\r\n var lineLength = l*(e-s);\r\n var segment = 1+this.filterManager.effectElements[4].p.v*2*this.filterManager.effectElements[9].p.v/100;\r\n var units = Math.floor(lineLength/segment);\r\n var j;\r\n for(j=0;j<units;j+=1){\r\n dasharrayValue += '1 ' + this.filterManager.effectElements[4].p.v*2*this.filterManager.effectElements[9].p.v/100 + ' ';\r\n }\r\n dasharrayValue += '0 ' + l*10 + ' 0 0';\r\n } else {\r\n dasharrayValue = '1 ' + this.filterManager.effectElements[4].p.v*2*this.filterManager.effectElements[9].p.v/100;\r\n }\r\n path.setAttribute('stroke-dasharray',dasharrayValue);\r\n }\r\n }\r\n if(forceRender || this.filterManager.effectElements[4].p.mdf){\r\n this.pathMasker.setAttribute('stroke-width',this.filterManager.effectElements[4].p.v*2);\r\n }\r\n \r\n if(forceRender || this.filterManager.effectElements[6].p.mdf){\r\n this.pathMasker.setAttribute('opacity',this.filterManager.effectElements[6].p.v);\r\n }\r\n if(this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2){\r\n if(forceRender || this.filterManager.effectElements[3].p.mdf){\r\n var color = this.filterManager.effectElements[3].p.v;\r\n this.pathMasker.setAttribute('stroke','rgb('+bm_floor(color[0]*255)+','+bm_floor(color[1]*255)+','+bm_floor(color[2]*255)+')');\r\n }\r\n }\r\n};\nfunction SVGTritoneFilter(filter, filterManager){\r\n this.filterManager = filterManager;\r\n var feColorMatrix = document.createElementNS(svgNS,'feColorMatrix');\r\n feColorMatrix.setAttribute('type','matrix');\r\n feColorMatrix.setAttribute('color-interpolation-filters','linearRGB');\r\n feColorMatrix.setAttribute('values','0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0');\r\n feColorMatrix.setAttribute('result','f1');\r\n filter.appendChild(feColorMatrix);\r\n var feComponentTransfer = document.createElementNS(svgNS,'feComponentTransfer');\r\n feComponentTransfer.setAttribute('color-interpolation-filters','sRGB');\r\n filter.appendChild(feComponentTransfer);\r\n this.matrixFilter = feComponentTransfer;\r\n var feFuncR = document.createElementNS(svgNS,'feFuncR');\r\n feFuncR.setAttribute('type','table');\r\n feComponentTransfer.appendChild(feFuncR);\r\n this.feFuncR = feFuncR;\r\n var feFuncG = document.createElementNS(svgNS,'feFuncG');\r\n feFuncG.setAttribute('type','table');\r\n feComponentTransfer.appendChild(feFuncG);\r\n this.feFuncG = feFuncG;\r\n var feFuncB = document.createElementNS(svgNS,'feFuncB');\r\n feFuncB.setAttribute('type','table');\r\n feComponentTransfer.appendChild(feFuncB);\r\n this.feFuncB = feFuncB;\r\n}\r\n\r\nSVGTritoneFilter.prototype.renderFrame = function(forceRender){\r\n if(forceRender || this.filterManager.mdf){\r\n var color1 = this.filterManager.effectElements[0].p.v;\r\n var color2 = this.filterManager.effectElements[1].p.v;\r\n var color3 = this.filterManager.effectElements[2].p.v;\r\n var tableR = color3[0] + ' ' + color2[0] + ' ' + color1[0]\r\n var tableG = color3[1] + ' ' + color2[1] + ' ' + color1[1]\r\n var tableB = color3[2] + ' ' + color2[2] + ' ' + color1[2]\r\n this.feFuncR.setAttribute('tableValues', tableR);\r\n this.feFuncG.setAttribute('tableValues', tableG);\r\n this.feFuncB.setAttribute('tableValues', tableB);\r\n //var opacity = this.filterManager.effectElements[2].p.v/100;\r\n //this.matrixFilter.setAttribute('values',(colorWhite[0]- colorBlack[0])+' 0 0 0 '+ colorBlack[0] +' '+ (colorWhite[1]- colorBlack[1]) +' 0 0 0 '+ colorBlack[1] +' '+ (colorWhite[2]- colorBlack[2]) +' 0 0 0 '+ colorBlack[2] +' 0 0 0 ' + opacity + ' 0');\r\n }\r\n};\nfunction SVGProLevelsFilter(filter, filterManager){\r\n this.filterManager = filterManager;\r\n var effectElements = this.filterManager.effectElements;\r\n var feComponentTransfer = document.createElementNS(svgNS,'feComponentTransfer');\r\n var feFuncR, feFuncG, feFuncB;\r\n \r\n if(effectElements[9].p.k || effectElements[9].p.v !== 0 || effectElements[10].p.k || effectElements[10].p.v !== 1 || effectElements[11].p.k || effectElements[11].p.v !== 1 || effectElements[12].p.k || effectElements[12].p.v !== 0 || effectElements[13].p.k || effectElements[13].p.v !== 1){\r\n this.feFuncR = this.createFeFunc('feFuncR', feComponentTransfer);\r\n }\r\n if(effectElements[16].p.k || effectElements[16].p.v !== 0 || effectElements[17].p.k || effectElements[17].p.v !== 1 || effectElements[18].p.k || effectElements[18].p.v !== 1 || effectElements[19].p.k || effectElements[19].p.v !== 0 || effectElements[20].p.k || effectElements[20].p.v !== 1){\r\n this.feFuncG = this.createFeFunc('feFuncG', feComponentTransfer);\r\n }\r\n if(effectElements[23].p.k || effectElements[23].p.v !== 0 || effectElements[24].p.k || effectElements[24].p.v !== 1 || effectElements[25].p.k || effectElements[25].p.v !== 1 || effectElements[26].p.k || effectElements[26].p.v !== 0 || effectElements[27].p.k || effectElements[27].p.v !== 1){\r\n this.feFuncB = this.createFeFunc('feFuncB', feComponentTransfer);\r\n }\r\n if(effectElements[30].p.k || effectElements[30].p.v !== 0 || effectElements[31].p.k || effectElements[31].p.v !== 1 || effectElements[32].p.k || effectElements[32].p.v !== 1 || effectElements[33].p.k || effectElements[33].p.v !== 0 || effectElements[34].p.k || effectElements[34].p.v !== 1){\r\n this.feFuncA = this.createFeFunc('feFuncA', feComponentTransfer);\r\n }\r\n \r\n if(this.feFuncR || this.feFuncG || this.feFuncB || this.feFuncA){\r\n feComponentTransfer.setAttribute('color-interpolation-filters','sRGB');\r\n filter.appendChild(feComponentTransfer);\r\n feComponentTransfer = document.createElementNS(svgNS,'feComponentTransfer');\r\n }\r\n\r\n if(effectElements[2].p.k || effectElements[2].p.v !== 0 || effectElements[3].p.k || effectElements[3].p.v !== 1 || effectElements[4].p.k || effectElements[4].p.v !== 1 || effectElements[5].p.k || effectElements[5].p.v !== 0 || effectElements[6].p.k || effectElements[6].p.v !== 1){\r\n\r\n feComponentTransfer.setAttribute('color-interpolation-filters','sRGB');\r\n filter.appendChild(feComponentTransfer);\r\n this.feFuncRComposed = this.createFeFunc('feFuncR', feComponentTransfer);\r\n this.feFuncGComposed = this.createFeFunc('feFuncG', feComponentTransfer);\r\n this.feFuncBComposed = this.createFeFunc('feFuncB', feComponentTransfer);\r\n }\r\n}\r\n\r\nSVGProLevelsFilter.prototype.createFeFunc = function(type, feComponentTransfer) {\r\n var feFunc = document.createElementNS(svgNS,type);\r\n feFunc.setAttribute('type','table');\r\n feComponentTransfer.appendChild(feFunc);\r\n return feFunc;\r\n};\r\n\r\nSVGProLevelsFilter.prototype.getTableValue = function(inputBlack, inputWhite, gamma, outputBlack, outputWhite) {\r\n var cnt = 0;\r\n var segments = 256;\r\n var perc;\r\n var min = Math.min(inputBlack, inputWhite);\r\n var max = Math.max(inputBlack, inputWhite);\r\n var table = Array.call(null,{length:segments});\r\n var colorValue;\r\n var pos = 0;\r\n var outputDelta = outputWhite - outputBlack; \r\n var inputDelta = inputWhite - inputBlack; \r\n while(cnt <= 256) {\r\n perc = cnt/256;\r\n if(perc <= min){\r\n colorValue = inputDelta < 0 ? outputWhite : outputBlack;\r\n } else if(perc >= max){\r\n colorValue = inputDelta < 0 ? outputBlack : outputWhite;\r\n } else {\r\n colorValue = (outputBlack + outputDelta * Math.pow((perc - inputBlack) / inputDelta, 1 / gamma));\r\n }\r\n table[pos++] = colorValue;\r\n cnt += 256/(segments-1);\r\n }\r\n return table.join(' ');\r\n};\r\n\r\nSVGProLevelsFilter.prototype.renderFrame = function(forceRender){\r\n if(forceRender || this.filterManager.mdf){\r\n var val, cnt, perc, bezier;\r\n var effectElements = this.filterManager.effectElements;\r\n if(this.feFuncRComposed && (forceRender || effectElements[2].p.mdf || effectElements[3].p.mdf || effectElements[4].p.mdf || effectElements[5].p.mdf || effectElements[6].p.mdf)){\r\n val = this.getTableValue(effectElements[2].p.v,effectElements[3].p.v,effectElements[4].p.v,effectElements[5].p.v,effectElements[6].p.v);\r\n this.feFuncRComposed.setAttribute('tableValues',val);\r\n this.feFuncGComposed.setAttribute('tableValues',val);\r\n this.feFuncBComposed.setAttribute('tableValues',val);\r\n }\r\n\r\n if(this.feFuncR && (forceRender || effectElements[9].p.mdf || effectElements[10].p.mdf || effectElements[11].p.mdf || effectElements[12].p.mdf || effectElements[13].p.mdf)){\r\n val = this.getTableValue(effectElements[9].p.v,effectElements[10].p.v,effectElements[11].p.v,effectElements[12].p.v,effectElements[13].p.v);\r\n this.feFuncR.setAttribute('tableValues',val);\r\n }\r\n\r\n if(this.feFuncG && (forceRender || effectElements[16].p.mdf || effectElements[17].p.mdf || effectElements[18].p.mdf || effectElements[19].p.mdf || effectElements[20].p.mdf)){\r\n val = this.getTableValue(effectElements[16].p.v,effectElements[17].p.v,effectElements[18].p.v,effectElements[19].p.v,effectElements[20].p.v);\r\n this.feFuncG.setAttribute('tableValues',val);\r\n }\r\n\r\n if(this.feFuncB && (forceRender || effectElements[23].p.mdf || effectElements[24].p.mdf || effectElements[25].p.mdf || effectElements[26].p.mdf || effectElements[27].p.mdf)){\r\n val = this.getTableValue(effectElements[23].p.v,effectElements[24].p.v,effectElements[25].p.v,effectElements[26].p.v,effectElements[27].p.v);\r\n this.feFuncB.setAttribute('tableValues',val);\r\n }\r\n\r\n if(this.feFuncA && (forceRender || effectElements[30].p.mdf || effectElements[31].p.mdf || effectElements[32].p.mdf || effectElements[33].p.mdf || effectElements[34].p.mdf)){\r\n val = this.getTableValue(effectElements[30].p.v,effectElements[31].p.v,effectElements[32].p.v,effectElements[33].p.v,effectElements[34].p.v);\r\n this.feFuncA.setAttribute('tableValues',val);\r\n }\r\n \r\n }\r\n};\nfunction SVGDropShadowEffect(filter, filterManager){\r\n /*<feGaussianBlur in=\"SourceAlpha\" stdDeviation=\"3\"/> <!-- stdDeviation is how much to blur -->\r\n <feOffset dx=\"2\" dy=\"2\" result=\"offsetblur\"/> <!-- how much to offset -->\r\n <feMerge> \r\n <feMergeNode/> <!-- this contains the offset blurred image -->\r\n <feMergeNode in=\"SourceGraphic\"/> <!-- this contains the element that the filter is applied to -->\r\n </feMerge>*/\r\n /*<feFlood flood-color=\"#3D4574\" flood-opacity=\"0.5\" result=\"offsetColor\"/>*/\r\n filter.setAttribute('x','-100%');\r\n filter.setAttribute('y','-100%');\r\n filter.setAttribute('width','400%');\r\n filter.setAttribute('height','400%');\r\n this.filterManager = filterManager;\r\n\r\n var feGaussianBlur = document.createElementNS(svgNS,'feGaussianBlur');\r\n feGaussianBlur.setAttribute('in','SourceAlpha');\r\n feGaussianBlur.setAttribute('result','drop_shadow_1');\r\n feGaussianBlur.setAttribute('stdDeviation','0');\r\n this.feGaussianBlur = feGaussianBlur;\r\n filter.appendChild(feGaussianBlur);\r\n\r\n var feOffset = document.createElementNS(svgNS,'feOffset');\r\n feOffset.setAttribute('dx','25');\r\n feOffset.setAttribute('dy','0');\r\n feOffset.setAttribute('in','drop_shadow_1');\r\n feOffset.setAttribute('result','drop_shadow_2');\r\n this.feOffset = feOffset;\r\n filter.appendChild(feOffset);\r\n var feFlood = document.createElementNS(svgNS,'feFlood');\r\n feFlood.setAttribute('flood-color','#00ff00');\r\n feFlood.setAttribute('flood-opacity','1');\r\n feFlood.setAttribute('result','drop_shadow_3');\r\n this.feFlood = feFlood;\r\n filter.appendChild(feFlood);\r\n\r\n var feComposite = document.createElementNS(svgNS,'feComposite');\r\n feComposite.setAttribute('in','drop_shadow_3');\r\n feComposite.setAttribute('in2','drop_shadow_2');\r\n feComposite.setAttribute('operator','in');\r\n feComposite.setAttribute('result','drop_shadow_4');\r\n filter.appendChild(feComposite);\r\n\r\n\r\n var feMerge = document.createElementNS(svgNS,'feMerge');\r\n filter.appendChild(feMerge);\r\n var feMergeNode;\r\n feMergeNode = document.createElementNS(svgNS,'feMergeNode');\r\n feMerge.appendChild(feMergeNode);\r\n feMergeNode = document.createElementNS(svgNS,'feMergeNode');\r\n feMergeNode.setAttribute('in','SourceGraphic');\r\n this.feMergeNode = feMergeNode;\r\n this.feMerge = feMerge;\r\n this.originalNodeAdded = false;\r\n feMerge.appendChild(feMergeNode);\r\n}\r\n\r\nSVGDropShadowEffect.prototype.renderFrame = function(forceRender){\r\n if(forceRender || this.filterManager.mdf){\r\n if(forceRender || this.filterManager.effectElements[4].p.mdf){\r\n this.feGaussianBlur.setAttribute('stdDeviation', this.filterManager.effectElements[4].p.v / 4);\r\n }\r\n if(forceRender || this.filterManager.effectElements[0].p.mdf){\r\n var col = this.filterManager.effectElements[0].p.v;\r\n this.feFlood.setAttribute('flood-color',rgbToHex(Math.round(col[0]*255),Math.round(col[1]*255),Math.round(col[2]*255)));\r\n }\r\n if(forceRender || this.filterManager.effectElements[1].p.mdf){\r\n this.feFlood.setAttribute('flood-opacity',this.filterManager.effectElements[1].p.v/255);\r\n }\r\n if(forceRender || this.filterManager.effectElements[2].p.mdf || this.filterManager.effectElements[3].p.mdf){\r\n var distance = this.filterManager.effectElements[3].p.v\r\n var angle = (this.filterManager.effectElements[2].p.v - 90) * degToRads\r\n var x = distance * Math.cos(angle)\r\n var y = distance * Math.sin(angle)\r\n this.feOffset.setAttribute('dx', x);\r\n this.feOffset.setAttribute('dy', y);\r\n }\r\n /*if(forceRender || this.filterManager.effectElements[5].p.mdf){\r\n if(this.filterManager.effectElements[5].p.v === 1 && this.originalNodeAdded) {\r\n this.feMerge.removeChild(this.feMergeNode);\r\n this.originalNodeAdded = false;\r\n } else if(this.filterManager.effectElements[5].p.v === 0 && !this.originalNodeAdded) {\r\n this.feMerge.appendChild(this.feMergeNode);\r\n this.originalNodeAdded = true;\r\n }\r\n }*/\r\n }\r\n};\nfunction SVGMatte3Effect(filterElem, filterManager, elem){\r\n this.initialized = false;\r\n this.filterManager = filterManager;\r\n this.filterElem = filterElem;\r\n this.elem = elem;\r\n elem.matteElement = document.createElementNS(svgNS,'g');\r\n elem.matteElement.appendChild(elem.layerElement);\r\n elem.matteElement.appendChild(elem.transformedElement);\r\n elem.baseElement = elem.matteElement;\r\n}\r\n\r\nSVGMatte3Effect.prototype.setElementAsMask = function(elem, mask) {\r\n var masker = document.createElementNS(svgNS,'mask');\r\n masker.setAttribute('id',mask.layerId);\r\n masker.setAttribute('mask-type','alpha');\r\n masker.appendChild(mask.layerElement);\r\n elem.setMatte(mask.layerId);\r\n mask.data.hd = false;\r\n var defs = elem.globalData.defs;\r\n defs.appendChild(masker);\r\n}\r\n\r\nSVGMatte3Effect.prototype.initialize = function() {\r\n var ind = this.filterManager.effectElements[0].p.v;\r\n var i = 0, len = this.elem.comp.elements.length;\r\n while(i < len) {\r\n \tif(this.elem.comp.elements[i].data.ind === ind) {\r\n \t\tthis.setElementAsMask(this.elem, this.elem.comp.elements[i]);\r\n \t}\r\n \ti += 1;\r\n }\r\n this.initialized = true;\r\n}\r\n\r\nSVGMatte3Effect.prototype.renderFrame = function() {\r\n\tif(!this.initialized) {\r\n\t\tthis.initialize();\r\n\t}\r\n}\nfunction SVGEffects(elem){\r\n var i, len = elem.data.ef.length;\r\n var filId = randomString(10);\r\n var fil = filtersFactory.createFilter(filId);\r\n var count = 0;\r\n this.filters = [];\r\n var filterManager;\r\n for(i=0;i<len;i+=1){\r\n if(elem.data.ef[i].ty === 20){\r\n count += 1;\r\n filterManager = new SVGTintFilter(fil, elem.effects.effectElements[i]);\r\n this.filters.push(filterManager);\r\n }else if(elem.data.ef[i].ty === 21){\r\n count += 1;\r\n filterManager = new SVGFillFilter(fil, elem.effects.effectElements[i]);\r\n this.filters.push(filterManager);\r\n }else if(elem.data.ef[i].ty === 22){\r\n filterManager = new SVGStrokeEffect(elem, elem.effects.effectElements[i]);\r\n this.filters.push(filterManager);\r\n }else if(elem.data.ef[i].ty === 23){\r\n count += 1;\r\n filterManager = new SVGTritoneFilter(fil, elem.effects.effectElements[i]);\r\n this.filters.push(filterManager);\r\n }else if(elem.data.ef[i].ty === 24){\r\n count += 1;\r\n filterManager = new SVGProLevelsFilter(fil, elem.effects.effectElements[i]);\r\n this.filters.push(filterManager);\r\n }else if(elem.data.ef[i].ty === 25){\r\n count += 1;\r\n filterManager = new SVGDropShadowEffect(fil, elem.effects.effectElements[i]);\r\n this.filters.push(filterManager);\r\n }else if(elem.data.ef[i].ty === 28){\r\n //count += 1;\r\n filterManager = new SVGMatte3Effect(fil, elem.effects.effectElements[i], elem);\r\n this.filters.push(filterManager);\r\n }\r\n }\r\n if(count){\r\n elem.globalData.defs.appendChild(fil);\r\n elem.layerElement.setAttribute('filter','url(' + locationHref + '#'+filId+')');\r\n }\r\n}\r\n\r\nSVGEffects.prototype.renderFrame = function(firstFrame){\r\n var i, len = this.filters.length;\r\n for(i=0;i<len;i+=1){\r\n this.filters[i].renderFrame(firstFrame);\r\n }\r\n};\nfunction ICompElement(data,parentContainer,globalData,comp, placeholder){\r\n this._parent.constructor.call(this,data,parentContainer,globalData,comp, placeholder);\r\n this.layers = data.layers;\r\n this.supports3d = true;\r\n this.completeLayers = false;\r\n this.pendingElements = [];\r\n this.elements = this.layers ? Array.apply(null,{length:this.layers.length}) : [];\r\n if(this.data.tm){\r\n this.tm = PropertyFactory.getProp(this,this.data.tm,0,globalData.frameRate,this.dynamicProperties);\r\n }\r\n if(this.data.xt){\r\n this.layerElement = document.createElementNS(svgNS,'g');\r\n this.buildAllItems();\r\n } else if(!globalData.progressiveLoad){\r\n this.buildAllItems();\r\n }\r\n}\r\ncreateElement(SVGBaseElement, ICompElement);\r\n\r\nICompElement.prototype.hide = function(){\r\n if(!this.hidden){\r\n this._parent.hide.call(this);\r\n var i,len = this.elements.length;\r\n for( i = 0; i < len; i+=1 ){\r\n if(this.elements[i]){\r\n this.elements[i].hide();\r\n }\r\n }\r\n }\r\n};\r\n\r\nICompElement.prototype.prepareFrame = function(num){\r\n this._parent.prepareFrame.call(this,num);\r\n if(this.isVisible===false && !this.data.xt){\r\n return;\r\n }\r\n\r\n if(this.tm){\r\n var timeRemapped = this.tm.v;\r\n if(timeRemapped === this.data.op){\r\n timeRemapped = this.data.op - 1;\r\n }\r\n this.renderedFrame = timeRemapped;\r\n } else {\r\n this.renderedFrame = num/this.data.sr;\r\n }\r\n var i,len = this.elements.length;\r\n if(!this.completeLayers){\r\n this.checkLayers(this.renderedFrame);\r\n }\r\n for( i = 0; i < len; i+=1 ){\r\n if(this.completeLayers || this.elements[i]){\r\n this.elements[i].prepareFrame(this.renderedFrame - this.layers[i].st);\r\n }\r\n }\r\n};\r\n\r\nICompElement.prototype.renderFrame = function(parentMatrix){\r\n var renderParent = this._parent.renderFrame.call(this,parentMatrix);\r\n var i,len = this.layers.length;\r\n if(renderParent===false){\r\n this.hide();\r\n return;\r\n }\r\n\r\n if(this.hidden) {\r\n this.show();\r\n }\r\n for( i = 0; i < len; i+=1 ){\r\n if(this.completeLayers || this.elements[i]){\r\n this.elements[i].renderFrame();\r\n }\r\n }\r\n if(this.firstFrame){\r\n this.firstFrame = false;\r\n }\r\n};\r\n\r\nICompElement.prototype.setElements = function(elems){\r\n this.elements = elems;\r\n};\r\n\r\nICompElement.prototype.getElements = function(){\r\n return this.elements;\r\n};\r\n\r\nICompElement.prototype.destroy = function(){\r\n this._parent.destroy.call(this._parent);\r\n var i,len = this.layers.length;\r\n for( i = 0; i < len; i+=1 ){\r\n if(this.elements[i]){\r\n this.elements[i].destroy();\r\n }\r\n }\r\n};\r\n\r\nICompElement.prototype.checkLayers = SVGRenderer.prototype.checkLayers;\r\nICompElement.prototype.buildItem = SVGRenderer.prototype.buildItem;\r\nICompElement.prototype.buildAllItems = SVGRenderer.prototype.buildAllItems;\r\nICompElement.prototype.buildElementParenting = SVGRenderer.prototype.buildElementParenting;\r\nICompElement.prototype.createItem = SVGRenderer.prototype.createItem;\r\nICompElement.prototype.createImage = SVGRenderer.prototype.createImage;\r\nICompElement.prototype.createComp = SVGRenderer.prototype.createComp;\r\nICompElement.prototype.createSolid = SVGRenderer.prototype.createSolid;\r\nICompElement.prototype.createShape = SVGRenderer.prototype.createShape;\r\nICompElement.prototype.createText = SVGRenderer.prototype.createText;\r\nICompElement.prototype.createBase = SVGRenderer.prototype.createBase;\r\nICompElement.prototype.appendElementInPos = SVGRenderer.prototype.appendElementInPos;\r\nICompElement.prototype.checkPendingElements = SVGRenderer.prototype.checkPendingElements;\r\nICompElement.prototype.addPendingElement = SVGRenderer.prototype.addPendingElement;\nfunction IImageElement(data,parentContainer,globalData,comp,placeholder){\r\n this.assetData = globalData.getAssetData(data.refId);\r\n this._parent.constructor.call(this,data,parentContainer,globalData,comp,placeholder);\r\n}\r\ncreateElement(SVGBaseElement, IImageElement);\r\n\r\nIImageElement.prototype.createElements = function(){\r\n\r\n var assetPath = this.globalData.getAssetsPath(this.assetData);\r\n\r\n this._parent.createElements.call(this);\r\n\r\n this.innerElem = document.createElementNS(svgNS,'image');\r\n this.innerElem.setAttribute('width',this.assetData.w+\"px\");\r\n this.innerElem.setAttribute('height',this.assetData.h+\"px\");\r\n this.innerElem.setAttribute('preserveAspectRatio','xMidYMid slice');\r\n this.innerElem.setAttributeNS('http://www.w3.org/1999/xlink','href',assetPath);\r\n this.maskedElement = this.innerElem;\r\n this.layerElement.appendChild(this.innerElem);\r\n if(this.data.ln){\r\n this.layerElement.setAttribute('id',this.data.ln);\r\n }\r\n if(this.data.cl){\r\n this.layerElement.setAttribute('class',this.data.cl);\r\n }\r\n\r\n};\r\n\r\nIImageElement.prototype.renderFrame = function(parentMatrix){\r\n var renderParent = this._parent.renderFrame.call(this,parentMatrix);\r\n if(renderParent===false){\r\n this.hide();\r\n return;\r\n }\r\n if(this.hidden){\r\n this.show();\r\n }\r\n if(this.firstFrame){\r\n this.firstFrame = false;\r\n }\r\n};\r\n\r\nIImageElement.prototype.destroy = function(){\r\n this._parent.destroy.call(this._parent);\r\n this.innerElem = null;\r\n};\nfunction ISolidElement(data,parentContainer,globalData,comp, placeholder){\r\n this._parent.constructor.call(this,data,parentContainer,globalData,comp, placeholder);\r\n}\r\ncreateElement(SVGBaseElement, ISolidElement);\r\n\r\nISolidElement.prototype.createElements = function(){\r\n this._parent.createElements.call(this);\r\n\r\n var rect = document.createElementNS(svgNS,'rect');\r\n ////rect.style.width = this.data.sw;\r\n ////rect.style.height = this.data.sh;\r\n ////rect.style.fill = this.data.sc;\r\n rect.setAttribute('width',this.data.sw);\r\n rect.setAttribute('height',this.data.sh);\r\n rect.setAttribute('fill',this.data.sc);\r\n this.layerElement.appendChild(rect);\r\n this.innerElem = rect;\r\n if(this.data.ln){\r\n this.layerElement.setAttribute('id',this.data.ln);\r\n }\r\n if(this.data.cl){\r\n this.layerElement.setAttribute('class',this.data.cl);\r\n }\r\n};\r\n\r\nISolidElement.prototype.renderFrame = IImageElement.prototype.renderFrame;\r\nISolidElement.prototype.destroy = IImageElement.prototype.destroy;\r\n\nvar animationManager = (function(){\r\n var moduleOb = {};\r\n var registeredAnimations = [];\r\n var initTime = 0;\r\n var len = 0;\r\n var idled = true;\r\n var playingAnimationsNum = 0;\r\n\r\n function removeElement(ev){\r\n var i = 0;\r\n var animItem = ev.target;\r\n while(i<len) {\r\n if (registeredAnimations[i].animation === animItem) {\r\n registeredAnimations.splice(i, 1);\r\n i -= 1;\r\n len -= 1;\r\n if(!animItem.isPaused){\r\n subtractPlayingCount();\r\n }\r\n }\r\n i += 1;\r\n }\r\n }\r\n\r\n function registerAnimation(element, animationData){\r\n if(!element){\r\n return null;\r\n }\r\n var i=0;\r\n while(i<len){\r\n if(registeredAnimations[i].elem == element && registeredAnimations[i].elem !== null ){\r\n return registeredAnimations[i].animation;\r\n }\r\n i+=1;\r\n }\r\n var animItem = new AnimationItem();\r\n setupAnimation(animItem, element);\r\n animItem.setData(element, animationData);\r\n return animItem;\r\n }\r\n\r\n function addPlayingCount(){\r\n playingAnimationsNum += 1;\r\n activate();\r\n }\r\n\r\n function subtractPlayingCount(){\r\n playingAnimationsNum -= 1;\r\n if(playingAnimationsNum === 0){\r\n idled = true;\r\n }\r\n }\r\n\r\n function setupAnimation(animItem, element){\r\n animItem.addEventListener('destroy',removeElement);\r\n animItem.addEventListener('_active',addPlayingCount);\r\n animItem.addEventListener('_idle',subtractPlayingCount);\r\n registeredAnimations.push({elem: element,animation:animItem});\r\n len += 1;\r\n }\r\n\r\n function loadAnimation(params){\r\n var animItem = new AnimationItem();\r\n setupAnimation(animItem, null);\r\n animItem.setParams(params);\r\n return animItem;\r\n }\r\n\r\n\r\n function setSpeed(val,animation){\r\n var i;\r\n for(i=0;i<len;i+=1){\r\n registeredAnimations[i].animation.setSpeed(val, animation);\r\n }\r\n }\r\n\r\n function setDirection(val, animation){\r\n var i;\r\n for(i=0;i<len;i+=1){\r\n registeredAnimations[i].animation.setDirection(val, animation);\r\n }\r\n }\r\n\r\n function play(animation){\r\n var i;\r\n for(i=0;i<len;i+=1){\r\n registeredAnimations[i].animation.play(animation);\r\n }\r\n }\r\n\r\n function moveFrame (value, animation) {\r\n initTime = Date.now();\r\n var i;\r\n for(i=0;i<len;i+=1){\r\n registeredAnimations[i].animation.moveFrame(value,animation);\r\n }\r\n }\r\n\r\n function resume(nowTime) {\r\n\r\n var elapsedTime = nowTime - initTime;\r\n var i;\r\n for(i=0;i<len;i+=1){\r\n registeredAnimations[i].animation.advanceTime(elapsedTime);\r\n }\r\n initTime = nowTime;\r\n if(!idled) {\r\n window.requestAnimationFrame(resume);\r\n }\r\n }\r\n\r\n function first(nowTime){\r\n initTime = nowTime;\r\n window.requestAnimationFrame(resume);\r\n }\r\n\r\n function pause(animation) {\r\n var i;\r\n for(i=0;i<len;i+=1){\r\n registeredAnimations[i].animation.pause(animation);\r\n }\r\n }\r\n\r\n function goToAndStop(value,isFrame,animation) {\r\n var i;\r\n for(i=0;i<len;i+=1){\r\n registeredAnimations[i].animation.goToAndStop(value,isFrame,animation);\r\n }\r\n }\r\n\r\n function stop(animation) {\r\n var i;\r\n for(i=0;i<len;i+=1){\r\n registeredAnimations[i].animation.stop(animation);\r\n }\r\n }\r\n\r\n function togglePause(animation) {\r\n var i;\r\n for(i=0;i<len;i+=1){\r\n registeredAnimations[i].animation.togglePause(animation);\r\n }\r\n }\r\n\r\n function destroy(animation) {\r\n var i;\r\n for(i=(len-1);i>=0;i-=1){\r\n registeredAnimations[i].animation.destroy(animation);\r\n }\r\n }\r\n\r\n function searchAnimations(animationData, standalone, renderer){\r\n var animElements = document.getElementsByClassName('bodymovin');\r\n var i, len = animElements.length;\r\n for(i=0;i<len;i+=1){\r\n if(renderer){\r\n animElements[i].setAttribute('data-bm-type',renderer);\r\n }\r\n registerAnimation(animElements[i], animationData);\r\n }\r\n if(standalone && len === 0){\r\n if(!renderer){\r\n renderer = 'svg';\r\n }\r\n var body = document.getElementsByTagName('body')[0];\r\n body.innerHTML = '';\r\n var div = document.createElement('div');\r\n div.style.width = '100%';\r\n div.style.height = '100%';\r\n div.setAttribute('data-bm-type',renderer);\r\n body.appendChild(div);\r\n registerAnimation(div, animationData);\r\n }\r\n }\r\n\r\n function resize(){\r\n var i;\r\n for(i=0;i<len;i+=1){\r\n registeredAnimations[i].animation.resize();\r\n }\r\n }\r\n\r\n function start(){\r\n window.requestAnimationFrame(first);\r\n }\r\n\r\n function activate(){\r\n if(idled){\r\n idled = false;\r\n window.requestAnimationFrame(first);\r\n }\r\n }\r\n\r\n //start();\r\n\r\n setTimeout(start,0);\r\n\r\n moduleOb.registerAnimation = registerAnimation;\r\n moduleOb.loadAnimation = loadAnimation;\r\n moduleOb.setSpeed = setSpeed;\r\n moduleOb.setDirection = setDirection;\r\n moduleOb.play = play;\r\n moduleOb.moveFrame = moveFrame;\r\n moduleOb.pause = pause;\r\n moduleOb.stop = stop;\r\n moduleOb.togglePause = togglePause;\r\n moduleOb.searchAnimations = searchAnimations;\r\n moduleOb.resize = resize;\r\n moduleOb.start = start;\r\n moduleOb.goToAndStop = goToAndStop;\r\n moduleOb.destroy = destroy;\r\n return moduleOb;\r\n}());\r\n\nvar AnimationItem = function () {\r\n this._cbs = [];\r\n this.name = '';\r\n this.path = '';\r\n this.isLoaded = false;\r\n this.currentFrame = 0;\r\n this.currentRawFrame = 0;\r\n this.totalFrames = 0;\r\n this.frameRate = 0;\r\n this.frameMult = 0;\r\n this.playSpeed = 1;\r\n this.playDirection = 1;\r\n this.pendingElements = 0;\r\n this.playCount = 0;\r\n this.prerenderFramesFlag = true;\r\n this.animationData = {};\r\n this.layers = [];\r\n this.assets = [];\r\n this.isPaused = true;\r\n this.autoplay = false;\r\n this.loop = true;\r\n this.renderer = null;\r\n this.animationID = randomString(10);\r\n this.scaleMode = 'fit';\r\n this.assetsPath = '';\r\n this.timeCompleted = 0;\r\n this.segmentPos = 0;\r\n this.subframeEnabled = subframeEnabled;\r\n this.segments = [];\r\n this.pendingSegment = false;\r\n this._idle = true;\r\n this.projectInterface = ProjectInterface();\r\n};\r\n\r\nAnimationItem.prototype.setParams = function(params) {\r\n var self = this;\r\n if(params.context){\r\n this.context = params.context;\r\n }\r\n if(params.wrapper || params.container){\r\n this.wrapper = params.wrapper || params.container;\r\n }\r\n var animType = params.animType ? params.animType : params.renderer ? params.renderer : 'svg';\r\n switch(animType){\r\n case 'canvas':\r\n this.renderer = new CanvasRenderer(this, params.rendererSettings);\r\n break;\r\n case 'svg':\r\n this.renderer = new SVGRenderer(this, params.rendererSettings);\r\n break;\r\n case 'hybrid':\r\n case 'html':\r\n default:\r\n this.renderer = new HybridRenderer(this, params.rendererSettings);\r\n break;\r\n }\r\n this.renderer.setProjectInterface(this.projectInterface);\r\n this.animType = animType;\r\n\r\n if(params.loop === '' || params.loop === null){\r\n }else if(params.loop === false){\r\n this.loop = false;\r\n }else if(params.loop === true){\r\n this.loop = true;\r\n }else{\r\n this.loop = parseInt(params.loop);\r\n }\r\n this.autoplay = 'autoplay' in params ? params.autoplay : true;\r\n this.name = params.name ? params.name : '';\r\n this.prerenderFramesFlag = 'prerender' in params ? params.prerender : true;\r\n this.autoloadSegments = params.hasOwnProperty('autoloadSegments') ? params.autoloadSegments : true;\r\n if(params.animationData){\r\n self.configAnimation(params.animationData);\r\n }else if(params.path){\r\n if(params.path.substr(-4) != 'json'){\r\n if (params.path.substr(-1, 1) != '/') {\r\n params.path += '/';\r\n }\r\n params.path += 'data.json';\r\n }\r\n\r\n var xhr = new XMLHttpRequest();\r\n if(params.path.lastIndexOf('\\\\') != -1){\r\n this.path = params.path.substr(0,params.path.lastIndexOf('\\\\')+1);\r\n }else{\r\n this.path = params.path.substr(0,params.path.lastIndexOf('/')+1);\r\n }\r\n this.assetsPath = params.assetsPath;\r\n this.fileName = params.path.substr(params.path.lastIndexOf('/')+1);\r\n this.fileName = this.fileName.substr(0,this.fileName.lastIndexOf('.json'));\r\n xhr.open('GET', params.path, true);\r\n xhr.send();\r\n xhr.onreadystatechange = function () {\r\n if (xhr.readyState == 4) {\r\n if(xhr.status == 200){\r\n self.configAnimation(JSON.parse(xhr.responseText));\r\n }else{\r\n try{\r\n var response = JSON.parse(xhr.responseText);\r\n self.configAnimation(response);\r\n }catch(err){\r\n }\r\n }\r\n }\r\n };\r\n }\r\n};\r\n\r\nAnimationItem.prototype.setData = function (wrapper, animationData) {\r\n var params = {\r\n wrapper: wrapper,\r\n animationData: animationData ? (typeof animationData === \"object\") ? animationData : JSON.parse(animationData) : null\r\n };\r\n var wrapperAttributes = wrapper.attributes;\r\n\r\n params.path = wrapperAttributes.getNamedItem('data-animation-path') ? wrapperAttributes.getNamedItem('data-animation-path').value : wrapperAttributes.getNamedItem('data-bm-path') ? wrapperAttributes.getNamedItem('data-bm-path').value : wrapperAttributes.getNamedItem('bm-path') ? wrapperAttributes.getNamedItem('bm-path').value : '';\r\n params.animType = wrapperAttributes.getNamedItem('data-anim-type') ? wrapperAttributes.getNamedItem('data-anim-type').value : wrapperAttributes.getNamedItem('data-bm-type') ? wrapperAttributes.getNamedItem('data-bm-type').value : wrapperAttributes.getNamedItem('bm-type') ? wrapperAttributes.getNamedItem('bm-type').value : wrapperAttributes.getNamedItem('data-bm-renderer') ? wrapperAttributes.getNamedItem('data-bm-renderer').value : wrapperAttributes.getNamedItem('bm-renderer') ? wrapperAttributes.getNamedItem('bm-renderer').value : 'canvas';\r\n\r\n var loop = wrapperAttributes.getNamedItem('data-anim-loop') ? wrapperAttributes.getNamedItem('data-anim-loop').value : wrapperAttributes.getNamedItem('data-bm-loop') ? wrapperAttributes.getNamedItem('data-bm-loop').value : wrapperAttributes.getNamedItem('bm-loop') ? wrapperAttributes.getNamedItem('bm-loop').value : '';\r\n if(loop === ''){\r\n }else if(loop === 'false'){\r\n params.loop = false;\r\n }else if(loop === 'true'){\r\n params.loop = true;\r\n }else{\r\n params.loop = parseInt(loop);\r\n }\r\n var autoplay = wrapperAttributes.getNamedItem('data-anim-autoplay') ? wrapperAttributes.getNamedItem('data-anim-autoplay').value : wrapperAttributes.getNamedItem('data-bm-autoplay') ? wrapperAttributes.getNamedItem('data-bm-autoplay').value : wrapperAttributes.getNamedItem('bm-autoplay') ? wrapperAttributes.getNamedItem('bm-autoplay').value : true;\r\n params.autoplay = autoplay !== \"false\";\r\n\r\n params.name = wrapperAttributes.getNamedItem('data-name') ? wrapperAttributes.getNamedItem('data-name').value : wrapperAttributes.getNamedItem('data-bm-name') ? wrapperAttributes.getNamedItem('data-bm-name').value : wrapperAttributes.getNamedItem('bm-name') ? wrapperAttributes.getNamedItem('bm-name').value : '';\r\n var prerender = wrapperAttributes.getNamedItem('data-anim-prerender') ? wrapperAttributes.getNamedItem('data-anim-prerender').value : wrapperAttributes.getNamedItem('data-bm-prerender') ? wrapperAttributes.getNamedItem('data-bm-prerender').value : wrapperAttributes.getNamedItem('bm-prerender') ? wrapperAttributes.getNamedItem('bm-prerender').value : '';\r\n\r\n if(prerender === 'false'){\r\n params.prerender = false;\r\n }\r\n this.setParams(params);\r\n};\r\n\r\nAnimationItem.prototype.includeLayers = function(data) {\r\n if(data.op > this.animationData.op){\r\n this.animationData.op = data.op;\r\n this.totalFrames = Math.floor(data.op - this.animationData.ip);\r\n this.animationData.tf = this.totalFrames;\r\n }\r\n var layers = this.animationData.layers;\r\n var i, len = layers.length;\r\n var newLayers = data.layers;\r\n var j, jLen = newLayers.length;\r\n for(j=0;j<jLen;j+=1){\r\n i = 0;\r\n while(i<len){\r\n if(layers[i].id == newLayers[j].id){\r\n layers[i] = newLayers[j];\r\n break;\r\n }\r\n i += 1;\r\n }\r\n }\r\n if(data.chars || data.fonts){\r\n this.renderer.globalData.fontManager.addChars(data.chars);\r\n this.renderer.globalData.fontManager.addFonts(data.fonts, this.renderer.globalData.defs);\r\n }\r\n if(data.assets){\r\n len = data.assets.length;\r\n for(i = 0; i < len; i += 1){\r\n this.animationData.assets.push(data.assets[i]);\r\n }\r\n }\r\n //this.totalFrames = 50;\r\n //this.animationData.tf = 50;\r\n this.animationData.__complete = false;\r\n dataManager.completeData(this.animationData,this.renderer.globalData.fontManager);\r\n this.renderer.includeLayers(data.layers);\r\n if(expressionsPlugin){\r\n expressionsPlugin.initExpressions(this);\r\n }\r\n this.renderer.renderFrame(null);\r\n this.loadNextSegment();\r\n};\r\n\r\nAnimationItem.prototype.loadNextSegment = function() {\r\n var segments = this.animationData.segments;\r\n if(!segments || segments.length === 0 || !this.autoloadSegments){\r\n this.trigger('data_ready');\r\n this.timeCompleted = this.animationData.tf;\r\n return;\r\n }\r\n var segment = segments.shift();\r\n this.timeCompleted = segment.time * this.frameRate;\r\n var xhr = new XMLHttpRequest();\r\n var self = this;\r\n var segmentPath = this.path+this.fileName+'_' + this.segmentPos + '.json';\r\n this.segmentPos += 1;\r\n xhr.open('GET', segmentPath, true);\r\n xhr.send();\r\n xhr.onreadystatechange = function () {\r\n if (xhr.readyState == 4) {\r\n if(xhr.status == 200){\r\n self.includeLayers(JSON.parse(xhr.responseText));\r\n }else{\r\n try{\r\n var response = JSON.parse(xhr.responseText);\r\n self.includeLayers(response);\r\n }catch(err){\r\n }\r\n }\r\n }\r\n };\r\n};\r\n\r\nAnimationItem.prototype.loadSegments = function() {\r\n var segments = this.animationData.segments;\r\n if(!segments) {\r\n this.timeCompleted = this.animationData.tf;\r\n }\r\n this.loadNextSegment();\r\n};\r\n\r\nAnimationItem.prototype.configAnimation = function (animData) {\r\n var _this = this;\r\n if(this.renderer && this.renderer.destroyed){\r\n return;\r\n }\r\n //console.log(JSON.parse(JSON.stringify(animData)));\r\n //animData.w = Math.round(animData.w/blitter);\r\n //animData.h = Math.round(animData.h/blitter);\r\n this.animationData = animData;\r\n this.totalFrames = Math.floor(this.animationData.op - this.animationData.ip);\r\n this.animationData.tf = this.totalFrames;\r\n this.renderer.configAnimation(animData);\r\n if(!animData.assets){\r\n animData.assets = [];\r\n }\r\n if(animData.comps) {\r\n animData.assets = animData.assets.concat(animData.comps);\r\n animData.comps = null;\r\n }\r\n this.renderer.searchExtraCompositions(animData.assets);\r\n\r\n this.layers = this.animationData.layers;\r\n this.assets = this.animationData.assets;\r\n this.frameRate = this.animationData.fr;\r\n this.firstFrame = Math.round(this.animationData.ip);\r\n this.frameMult = this.animationData.fr / 1000;\r\n this.trigger('config_ready');\r\n this.imagePreloader = new ImagePreloader();\r\n this.imagePreloader.setAssetsPath(this.assetsPath);\r\n this.imagePreloader.setPath(this.path);\r\n this.imagePreloader.loadAssets(animData.assets, function(err) {\r\n if(!err) {\r\n _this.trigger('loaded_images');\r\n }\r\n });\r\n this.loadSegments();\r\n this.updaFrameModifier();\r\n if(this.renderer.globalData.fontManager){\r\n this.waitForFontsLoaded();\r\n }else{\r\n dataManager.completeData(this.animationData,this.renderer.globalData.fontManager);\r\n this.checkLoaded();\r\n }\r\n};\r\n\r\nAnimationItem.prototype.waitForFontsLoaded = (function(){\r\n function checkFontsLoaded(){\r\n if(this.renderer.globalData.fontManager.loaded){\r\n dataManager.completeData(this.animationData,this.renderer.globalData.fontManager);\r\n //this.renderer.buildItems(this.animationData.layers);\r\n this.checkLoaded();\r\n }else{\r\n setTimeout(checkFontsLoaded.bind(this),20);\r\n }\r\n }\r\n\r\n return function(){\r\n checkFontsLoaded.bind(this)();\r\n }\r\n}());\r\n\r\nAnimationItem.prototype.addPendingElement = function () {\r\n this.pendingElements += 1;\r\n}\r\n\r\nAnimationItem.prototype.elementLoaded = function () {\r\n this.pendingElements--;\r\n this.checkLoaded();\r\n};\r\n\r\nAnimationItem.prototype.checkLoaded = function () {\r\n if (this.pendingElements === 0) {\r\n if(expressionsPlugin){\r\n expressionsPlugin.initExpressions(this);\r\n }\r\n this.renderer.initItems();\r\n setTimeout(function(){\r\n this.trigger('DOMLoaded');\r\n }.bind(this),0);\r\n this.isLoaded = true;\r\n this.gotoFrame();\r\n if(this.autoplay){\r\n this.play();\r\n }\r\n }\r\n};\r\n\r\nAnimationItem.prototype.resize = function () {\r\n this.renderer.updateContainerSize();\r\n};\r\n\r\nAnimationItem.prototype.setSubframe = function(flag){\r\n this.subframeEnabled = flag ? true : false;\r\n}\r\n\r\nAnimationItem.prototype.gotoFrame = function () {\r\n if(this.subframeEnabled){\r\n this.currentFrame = this.currentRawFrame;\r\n }else{\r\n this.currentFrame = Math.floor(this.currentRawFrame);\r\n }\r\n\r\n if(this.timeCompleted !== this.totalFrames && this.currentFrame > this.timeCompleted){\r\n this.currentFrame = this.timeCompleted;\r\n }\r\n this.trigger('enterFrame');\r\n this.renderFrame();\r\n};\r\n\r\nAnimationItem.prototype.renderFrame = function () {\r\n if(this.isLoaded === false){\r\n return;\r\n }\r\n //console.log('this.currentFrame:',this.currentFrame + this.firstFrame);\r\n this.renderer.renderFrame(this.currentFrame + this.firstFrame);\r\n};\r\n\r\nAnimationItem.prototype.play = function (name) {\r\n if(name && this.name != name){\r\n return;\r\n }\r\n if(this.isPaused === true){\r\n this.isPaused = false;\r\n if(this._idle){\r\n this._idle = false;\r\n this.trigger('_active');\r\n }\r\n }\r\n};\r\n\r\nAnimationItem.prototype.pause = function (name) {\r\n if(name && this.name != name){\r\n return;\r\n }\r\n if(this.isPaused === false){\r\n this.isPaused = true;\r\n if(!this.pendingSegment){\r\n this._idle = true;\r\n this.trigger('_idle');\r\n }\r\n }\r\n};\r\n\r\nAnimationItem.prototype.togglePause = function (name) {\r\n if(name && this.name != name){\r\n return;\r\n }\r\n if(this.isPaused === true){\r\n this.play();\r\n }else{\r\n this.pause();\r\n }\r\n};\r\n\r\nAnimationItem.prototype.stop = function (name) {\r\n if(name && this.name != name){\r\n return;\r\n }\r\n this.pause();\r\n this.currentFrame = this.currentRawFrame = 0;\r\n this.playCount = 0;\r\n this.gotoFrame();\r\n};\r\n\r\nAnimationItem.prototype.goToAndStop = function (value, isFrame, name) {\r\n if(name && this.name != name){\r\n return;\r\n }\r\n if(isFrame){\r\n this.setCurrentRawFrameValue(value);\r\n }else{\r\n this.setCurrentRawFrameValue(value * this.frameModifier);\r\n }\r\n this.pause();\r\n};\r\n\r\nAnimationItem.prototype.goToAndPlay = function (value, isFrame, name) {\r\n this.goToAndStop(value, isFrame, name);\r\n this.play();\r\n};\r\n\r\nAnimationItem.prototype.advanceTime = function (value) {\r\n if(this.pendingSegment){\r\n this.pendingSegment = false;\r\n this.adjustSegment(this.segments.shift());\r\n if(this.isPaused){\r\n this.play();\r\n }\r\n return;\r\n }\r\n if (this.isPaused === true || this.isLoaded === false) {\r\n return;\r\n }\r\n this.setCurrentRawFrameValue(this.currentRawFrame + value * this.frameModifier);\r\n};\r\n\r\nAnimationItem.prototype.updateAnimation = function (perc) {\r\n this.setCurrentRawFrameValue(this.totalFrames * perc);\r\n};\r\n\r\nAnimationItem.prototype.moveFrame = function (value, name) {\r\n if(name && this.name != name){\r\n return;\r\n }\r\n this.setCurrentRawFrameValue(this.currentRawFrame+value);\r\n};\r\n\r\nAnimationItem.prototype.adjustSegment = function(arr){\r\n this.playCount = 0;\r\n if(arr[1] < arr[0]){\r\n if(this.frameModifier > 0){\r\n if(this.playSpeed < 0){\r\n this.setSpeed(-this.playSpeed);\r\n } else {\r\n this.setDirection(-1);\r\n }\r\n }\r\n this.totalFrames = arr[0] - arr[1];\r\n this.firstFrame = arr[1];\r\n this.setCurrentRawFrameValue(this.totalFrames - 0.01);\r\n } else if(arr[1] > arr[0]){\r\n if(this.frameModifier < 0){\r\n if(this.playSpeed < 0){\r\n this.setSpeed(-this.playSpeed);\r\n } else {\r\n this.setDirection(1);\r\n }\r\n }\r\n this.totalFrames = arr[1] - arr[0];\r\n this.firstFrame = arr[0];\r\n this.setCurrentRawFrameValue(0);\r\n }\r\n this.trigger('segmentStart');\r\n};\r\nAnimationItem.prototype.setSegment = function (init,end) {\r\n var pendingFrame = -1;\r\n if(this.isPaused) {\r\n if (this.currentRawFrame + this.firstFrame < init) {\r\n pendingFrame = init;\r\n } else if (this.currentRawFrame + this.firstFrame > end) {\r\n pendingFrame = end - init - 0.01;\r\n }\r\n }\r\n\r\n this.firstFrame = init;\r\n this.totalFrames = end - init;\r\n if(pendingFrame !== -1) {\r\n this.goToAndStop(pendingFrame,true);\r\n }\r\n}\r\n\r\nAnimationItem.prototype.playSegments = function (arr,forceFlag) {\r\n if(typeof arr[0] === 'object'){\r\n var i, len = arr.length;\r\n for(i=0;i<len;i+=1){\r\n this.segments.push(arr[i]);\r\n }\r\n }else{\r\n this.segments.push(arr);\r\n }\r\n if(forceFlag){\r\n this.adjustSegment(this.segments.shift());\r\n }\r\n if(this.isPaused){\r\n this.play();\r\n }\r\n};\r\n\r\nAnimationItem.prototype.resetSegments = function (forceFlag) {\r\n this.segments.length = 0;\r\n this.segments.push([this.animationData.ip*this.frameRate,Math.floor(this.animationData.op - this.animationData.ip+this.animationData.ip*this.frameRate)]);\r\n if(forceFlag){\r\n this.adjustSegment(this.segments.shift());\r\n }\r\n};\r\nAnimationItem.prototype.checkSegments = function(){\r\n if(this.segments.length){\r\n this.pendingSegment = true;\r\n }\r\n}\r\n\r\nAnimationItem.prototype.remove = function (name) {\r\n if(name && this.name != name){\r\n return;\r\n }\r\n this.renderer.destroy();\r\n};\r\n\r\nAnimationItem.prototype.destroy = function (name) {\r\n if((name && this.name != name) || (this.renderer && this.renderer.destroyed)){\r\n return;\r\n }\r\n this.renderer.destroy();\r\n this.trigger('destroy');\r\n this._cbs = null;\r\n this.onEnterFrame = this.onLoopComplete = this.onComplete = this.onSegmentStart = this.onDestroy = null;\r\n};\r\n\r\nAnimationItem.prototype.setCurrentRawFrameValue = function(value){\r\n this.currentRawFrame = value;\r\n //console.log(this.totalFrames);\r\n if (this.currentRawFrame >= this.totalFrames) {\r\n this.checkSegments();\r\n if(this.loop === false){\r\n this.currentRawFrame = this.totalFrames - 0.01;\r\n this.gotoFrame();\r\n this.pause();\r\n this.trigger('complete');\r\n return;\r\n }else{\r\n this.trigger('loopComplete');\r\n this.playCount += 1;\r\n if((this.loop !== true && this.playCount == this.loop) || this.pendingSegment){\r\n this.currentRawFrame = this.totalFrames - 0.01;\r\n this.gotoFrame();\r\n this.pause();\r\n this.trigger('complete');\r\n return;\r\n } else {\r\n this.currentRawFrame = this.currentRawFrame % this.totalFrames;\r\n }\r\n }\r\n } else if (this.currentRawFrame < 0) {\r\n this.checkSegments();\r\n this.playCount -= 1;\r\n if(this.playCount < 0){\r\n this.playCount = 0;\r\n }\r\n if(this.loop === false || this.pendingSegment){\r\n this.currentRawFrame = 0;\r\n this.gotoFrame();\r\n this.pause();\r\n this.trigger('complete');\r\n return;\r\n }else{\r\n this.trigger('loopComplete');\r\n this.currentRawFrame = (this.totalFrames + this.currentRawFrame) % this.totalFrames;\r\n this.gotoFrame();\r\n return;\r\n }\r\n }\r\n\r\n this.gotoFrame();\r\n};\r\n\r\nAnimationItem.prototype.setSpeed = function (val) {\r\n this.playSpeed = val;\r\n this.updaFrameModifier();\r\n};\r\n\r\nAnimationItem.prototype.setDirection = function (val) {\r\n this.playDirection = val < 0 ? -1 : 1;\r\n this.updaFrameModifier();\r\n};\r\n\r\nAnimationItem.prototype.updaFrameModifier = function () {\r\n this.frameModifier = this.frameMult * this.playSpeed * this.playDirection;\r\n};\r\n\r\nAnimationItem.prototype.getPath = function () {\r\n return this.path;\r\n};\r\n\r\nAnimationItem.prototype.getAssetsPath = function (assetData) {\r\n var path = '';\r\n if(this.assetsPath){\r\n var imagePath = assetData.p;\r\n if(imagePath.indexOf('images/') !== -1){\r\n imagePath = imagePath.split('/')[1];\r\n }\r\n path = this.assetsPath + imagePath;\r\n } else {\r\n path = this.path;\r\n path += assetData.u ? assetData.u : '';\r\n path += assetData.p;\r\n }\r\n return path;\r\n};\r\n\r\nAnimationItem.prototype.getAssetData = function (id) {\r\n var i = 0, len = this.assets.length;\r\n while (i < len) {\r\n if(id == this.assets[i].id){\r\n return this.assets[i];\r\n }\r\n i += 1;\r\n }\r\n};\r\n\r\nAnimationItem.prototype.hide = function () {\r\n this.renderer.hide();\r\n};\r\n\r\nAnimationItem.prototype.show = function () {\r\n this.renderer.show();\r\n};\r\n\r\nAnimationItem.prototype.getAssets = function () {\r\n return this.assets;\r\n};\r\n\r\nAnimationItem.prototype.trigger = function(name){\r\n if(this._cbs && this._cbs[name]){\r\n switch(name){\r\n case 'enterFrame':\r\n this.triggerEvent(name,new BMEnterFrameEvent(name,this.currentFrame,this.totalFrames,this.frameMult));\r\n break;\r\n case 'loopComplete':\r\n this.triggerEvent(name,new BMCompleteLoopEvent(name,this.loop,this.playCount,this.frameMult));\r\n break;\r\n case 'complete':\r\n this.triggerEvent(name,new BMCompleteEvent(name,this.frameMult));\r\n break;\r\n case 'segmentStart':\r\n this.triggerEvent(name,new BMSegmentStartEvent(name,this.firstFrame,this.totalFrames));\r\n break;\r\n case 'destroy':\r\n this.triggerEvent(name,new BMDestroyEvent(name,this));\r\n break;\r\n default:\r\n this.triggerEvent(name);\r\n }\r\n }\r\n if(name === 'enterFrame' && this.onEnterFrame){\r\n this.onEnterFrame.call(this,new BMEnterFrameEvent(name,this.currentFrame,this.totalFrames,this.frameMult));\r\n }\r\n if(name === 'loopComplete' && this.onLoopComplete){\r\n this.onLoopComplete.call(this,new BMCompleteLoopEvent(name,this.loop,this.playCount,this.frameMult));\r\n }\r\n if(name === 'complete' && this.onComplete){\r\n this.onComplete.call(this,new BMCompleteEvent(name,this.frameMult));\r\n }\r\n if(name === 'segmentStart' && this.onSegmentStart){\r\n this.onSegmentStart.call(this,new BMSegmentStartEvent(name,this.firstFrame,this.totalFrames));\r\n }\r\n if(name === 'destroy' && this.onDestroy){\r\n this.onDestroy.call(this,new BMDestroyEvent(name,this));\r\n }\r\n};\r\n\r\nAnimationItem.prototype.addEventListener = _addEventListener;\r\nAnimationItem.prototype.removeEventListener = _removeEventListener;\r\nAnimationItem.prototype.triggerEvent = _triggerEvent;\r\n\nfunction CanvasRenderer(animationItem, config){\r\n this.animationItem = animationItem;\r\n this.renderConfig = {\r\n clearCanvas: (config && config.clearCanvas !== undefined) ? config.clearCanvas : true,\r\n context: (config && config.context) || null,\r\n progressiveLoad: (config && config.progressiveLoad) || false,\r\n preserveAspectRatio: (config && config.preserveAspectRatio) || 'xMidYMid meet',\r\n className: (config && config.className) || ''\r\n };\r\n this.renderConfig.dpr = (config && config.dpr) || 1;\r\n if (this.animationItem.wrapper) {\r\n this.renderConfig.dpr = (config && config.dpr) || window.devicePixelRatio || 1;\r\n }\r\n this.renderedFrame = -1;\r\n this.globalData = {\r\n frameNum: -1\r\n };\r\n this.contextData = {\r\n saved : Array.apply(null,{length:15}),\r\n savedOp: Array.apply(null,{length:15}),\r\n cArrPos : 0,\r\n cTr : new Matrix(),\r\n cO : 1\r\n };\r\n var i, len = 15;\r\n for(i=0;i<len;i+=1){\r\n this.contextData.saved[i] = Array.apply(null,{length:16});\r\n }\r\n this.elements = [];\r\n this.pendingElements = [];\r\n this.transformMat = new Matrix();\r\n this.completeLayers = false;\r\n}\r\nextendPrototype(BaseRenderer,CanvasRenderer);\r\n\r\nCanvasRenderer.prototype.createBase = function (data) {\r\n return new CVBaseElement(data, this, this.globalData);\r\n};\r\n\r\nCanvasRenderer.prototype.createShape = function (data) {\r\n return new CVShapeElement(data, this, this.globalData);\r\n};\r\n\r\nCanvasRenderer.prototype.createText = function (data) {\r\n return new CVTextElement(data, this, this.globalData);\r\n};\r\n\r\nCanvasRenderer.prototype.createImage = function (data) {\r\n return new CVImageElement(data, this, this.globalData);\r\n};\r\n\r\nCanvasRenderer.prototype.createComp = function (data) {\r\n return new CVCompElement(data, this, this.globalData);\r\n};\r\n\r\nCanvasRenderer.prototype.createSolid = function (data) {\r\n return new CVSolidElement(data, this, this.globalData);\r\n};\r\n\r\nCanvasRenderer.prototype.ctxTransform = function(props){\r\n if(props[0] === 1 && props[1] === 0 && props[4] === 0 && props[5] === 1 && props[12] === 0 && props[13] === 0){\r\n return;\r\n }\r\n if(!this.renderConfig.clearCanvas){\r\n this.canvasContext.transform(props[0],props[1],props[4],props[5],props[12],props[13]);\r\n return;\r\n }\r\n this.transformMat.cloneFromProps(props);\r\n this.transformMat.transform(this.contextData.cTr.props[0],this.contextData.cTr.props[1],this.contextData.cTr.props[2],this.contextData.cTr.props[3],this.contextData.cTr.props[4],this.contextData.cTr.props[5],this.contextData.cTr.props[6],this.contextData.cTr.props[7],this.contextData.cTr.props[8],this.contextData.cTr.props[9],this.contextData.cTr.props[10],this.contextData.cTr.props[11],this.contextData.cTr.props[12],this.contextData.cTr.props[13],this.contextData.cTr.props[14],this.contextData.cTr.props[15])\r\n //this.contextData.cTr.transform(props[0],props[1],props[2],props[3],props[4],props[5],props[6],props[7],props[8],props[9],props[10],props[11],props[12],props[13],props[14],props[15]);\r\n this.contextData.cTr.cloneFromProps(this.transformMat.props);\r\n var trProps = this.contextData.cTr.props;\r\n this.canvasContext.setTransform(trProps[0],trProps[1],trProps[4],trProps[5],trProps[12],trProps[13]);\r\n};\r\n\r\nCanvasRenderer.prototype.ctxOpacity = function(op){\r\n if(op === 1){\r\n return;\r\n }\r\n if(!this.renderConfig.clearCanvas){\r\n this.canvasContext.globalAlpha *= op < 0 ? 0 : op;\r\n return;\r\n }\r\n this.contextData.cO *= op < 0 ? 0 : op;\r\n this.canvasContext.globalAlpha = this.contextData.cO;\r\n};\r\n\r\nCanvasRenderer.prototype.reset = function(){\r\n if(!this.renderConfig.clearCanvas){\r\n this.canvasContext.restore();\r\n return;\r\n }\r\n this.contextData.cArrPos = 0;\r\n this.contextData.cTr.reset();\r\n this.contextData.cO = 1;\r\n};\r\n\r\nCanvasRenderer.prototype.save = function(actionFlag){\r\n if(!this.renderConfig.clearCanvas){\r\n this.canvasContext.save();\r\n return;\r\n }\r\n if(actionFlag){\r\n this.canvasContext.save();\r\n }\r\n var props = this.contextData.cTr.props;\r\n if(this.contextData.saved[this.contextData.cArrPos] === null || this.contextData.saved[this.contextData.cArrPos] === undefined){\r\n this.contextData.saved[this.contextData.cArrPos] = new Array(16);\r\n }\r\n var i,arr = this.contextData.saved[this.contextData.cArrPos];\r\n for(i=0;i<16;i+=1){\r\n arr[i] = props[i];\r\n }\r\n this.contextData.savedOp[this.contextData.cArrPos] = this.contextData.cO;\r\n this.contextData.cArrPos += 1;\r\n};\r\n\r\nCanvasRenderer.prototype.restore = function(actionFlag){\r\n if(!this.renderConfig.clearCanvas){\r\n this.canvasContext.restore();\r\n return;\r\n }\r\n if(actionFlag){\r\n this.canvasContext.restore();\r\n }\r\n this.contextData.cArrPos -= 1;\r\n var popped = this.contextData.saved[this.contextData.cArrPos];\r\n var i,arr = this.contextData.cTr.props;\r\n for(i=0;i<16;i+=1){\r\n arr[i] = popped[i];\r\n }\r\n this.canvasContext.setTransform(popped[0],popped[1],popped[4],popped[5],popped[12],popped[13]);\r\n popped = this.contextData.savedOp[this.contextData.cArrPos];\r\n this.contextData.cO = popped;\r\n this.canvasContext.globalAlpha = popped;\r\n};\r\n\r\nCanvasRenderer.prototype.configAnimation = function(animData){\r\n if(this.animationItem.wrapper){\r\n this.animationItem.container = document.createElement('canvas');\r\n this.animationItem.container.style.width = '100%';\r\n this.animationItem.container.style.height = '100%';\r\n //this.animationItem.container.style.transform = 'translate3d(0,0,0)';\r\n //this.animationItem.container.style.webkitTransform = 'translate3d(0,0,0)';\r\n this.animationItem.container.style.transformOrigin = this.animationItem.container.style.mozTransformOrigin = this.animationItem.container.style.webkitTransformOrigin = this.animationItem.container.style['-webkit-transform'] = \"0px 0px 0px\";\r\n this.animationItem.wrapper.appendChild(this.animationItem.container);\r\n this.canvasContext = this.animationItem.container.getContext('2d');\r\n if(this.renderConfig.className) {\r\n this.animationItem.container.setAttribute('class', this.renderConfig.className);\r\n }\r\n }else{\r\n this.canvasContext = this.renderConfig.context;\r\n }\r\n this.data = animData;\r\n this.globalData.canvasContext = this.canvasContext;\r\n this.globalData.renderer = this;\r\n this.globalData.isDashed = false;\r\n this.globalData.totalFrames = Math.floor(animData.tf);\r\n this.globalData.compWidth = animData.w;\r\n this.globalData.compHeight = animData.h;\r\n this.globalData.frameRate = animData.fr;\r\n this.globalData.frameId = 0;\r\n this.globalData.compSize = {\r\n w: animData.w,\r\n h: animData.h\r\n };\r\n this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\r\n this.layers = animData.layers;\r\n this.transformCanvas = {};\r\n this.transformCanvas.w = animData.w;\r\n this.transformCanvas.h = animData.h;\r\n this.globalData.fontManager = new FontManager();\r\n this.globalData.fontManager.addChars(animData.chars);\r\n this.globalData.fontManager.addFonts(animData.fonts,document.body);\r\n this.globalData.getAssetData = this.animationItem.getAssetData.bind(this.animationItem);\r\n this.globalData.getAssetsPath = this.animationItem.getAssetsPath.bind(this.animationItem);\r\n this.globalData.elementLoaded = this.animationItem.elementLoaded.bind(this.animationItem);\r\n this.globalData.addPendingElement = this.animationItem.addPendingElement.bind(this.animationItem);\r\n this.globalData.transformCanvas = this.transformCanvas;\r\n this.elements = Array.apply(null,{length:animData.layers.length});\r\n\r\n this.updateContainerSize();\r\n};\r\n\r\nCanvasRenderer.prototype.updateContainerSize = function () {\r\n var elementWidth,elementHeight;\r\n if(this.animationItem.wrapper && this.animationItem.container){\r\n elementWidth = this.animationItem.wrapper.offsetWidth;\r\n elementHeight = this.animationItem.wrapper.offsetHeight;\r\n this.animationItem.container.setAttribute('width',elementWidth * this.renderConfig.dpr );\r\n this.animationItem.container.setAttribute('height',elementHeight * this.renderConfig.dpr);\r\n }else{\r\n elementWidth = this.canvasContext.canvas.width * this.renderConfig.dpr;\r\n elementHeight = this.canvasContext.canvas.height * this.renderConfig.dpr;\r\n }\r\n var elementRel,animationRel;\r\n if(this.renderConfig.preserveAspectRatio.indexOf('meet') !== -1 || this.renderConfig.preserveAspectRatio.indexOf('slice') !== -1){\r\n var par = this.renderConfig.preserveAspectRatio.split(' ');\r\n var fillType = par[1] || 'meet';\r\n var pos = par[0] || 'xMidYMid';\r\n var xPos = pos.substr(0,4);\r\n var yPos = pos.substr(4);\r\n elementRel = elementWidth/elementHeight;\r\n animationRel = this.transformCanvas.w/this.transformCanvas.h;\r\n if(animationRel>elementRel && fillType === 'meet' || animationRel<elementRel && fillType === 'slice'){\r\n this.transformCanvas.sx = elementWidth/(this.transformCanvas.w/this.renderConfig.dpr);\r\n this.transformCanvas.sy = elementWidth/(this.transformCanvas.w/this.renderConfig.dpr);\r\n }else{\r\n this.transformCanvas.sx = elementHeight/(this.transformCanvas.h / this.renderConfig.dpr);\r\n this.transformCanvas.sy = elementHeight/(this.transformCanvas.h / this.renderConfig.dpr);\r\n }\r\n\r\n if(xPos === 'xMid' && ((animationRel<elementRel && fillType==='meet') || (animationRel>elementRel && fillType === 'slice'))){\r\n this.transformCanvas.tx = (elementWidth-this.transformCanvas.w*(elementHeight/this.transformCanvas.h))/2*this.renderConfig.dpr;\r\n } else if(xPos === 'xMax' && ((animationRel<elementRel && fillType==='meet') || (animationRel>elementRel && fillType === 'slice'))){\r\n this.transformCanvas.tx = (elementWidth-this.transformCanvas.w*(elementHeight/this.transformCanvas.h))*this.renderConfig.dpr;\r\n } else {\r\n this.transformCanvas.tx = 0;\r\n }\r\n if(yPos === 'YMid' && ((animationRel>elementRel && fillType==='meet') || (animationRel<elementRel && fillType === 'slice'))){\r\n this.transformCanvas.ty = ((elementHeight-this.transformCanvas.h*(elementWidth/this.transformCanvas.w))/2)*this.renderConfig.dpr;\r\n } else if(yPos === 'YMax' && ((animationRel>elementRel && fillType==='meet') || (animationRel<elementRel && fillType === 'slice'))){\r\n this.transformCanvas.ty = ((elementHeight-this.transformCanvas.h*(elementWidth/this.transformCanvas.w)))*this.renderConfig.dpr;\r\n } else {\r\n this.transformCanvas.ty = 0;\r\n }\r\n\r\n }else if(this.renderConfig.preserveAspectRatio == 'none'){\r\n this.transformCanvas.sx = elementWidth/(this.transformCanvas.w/this.renderConfig.dpr);\r\n this.transformCanvas.sy = elementHeight/(this.transformCanvas.h/this.renderConfig.dpr);\r\n this.transformCanvas.tx = 0;\r\n this.transformCanvas.ty = 0;\r\n }else{\r\n this.transformCanvas.sx = this.renderConfig.dpr;\r\n this.transformCanvas.sy = this.renderConfig.dpr;\r\n this.transformCanvas.tx = 0;\r\n this.transformCanvas.ty = 0;\r\n }\r\n this.transformCanvas.props = [this.transformCanvas.sx,0,0,0,0,this.transformCanvas.sy,0,0,0,0,1,0,this.transformCanvas.tx,this.transformCanvas.ty,0,1];\r\n var i, len = this.elements.length;\r\n for(i=0;i<len;i+=1){\r\n if(this.elements[i] && this.elements[i].data.ty === 0){\r\n this.elements[i].resize(this.globalData.transformCanvas);\r\n }\r\n }\r\n};\r\n\r\nCanvasRenderer.prototype.destroy = function () {\r\n if(this.renderConfig.clearCanvas) {\r\n this.animationItem.wrapper.innerHTML = '';\r\n }\r\n var i, len = this.layers ? this.layers.length : 0;\r\n for (i = len - 1; i >= 0; i-=1) {\r\n if(this.elements[i]) {\r\n this.elements[i].destroy();\r\n }\r\n }\r\n this.elements.length = 0;\r\n this.globalData.canvasContext = null;\r\n this.animationItem.container = null;\r\n this.destroyed = true;\r\n};\r\n\r\nCanvasRenderer.prototype.renderFrame = function(num){\r\n if((this.renderedFrame == num && this.renderConfig.clearCanvas === true) || this.destroyed || num === null){\r\n return;\r\n }\r\n this.renderedFrame = num;\r\n this.globalData.frameNum = num - this.animationItem.firstFrame;\r\n this.globalData.frameId += 1;\r\n this.globalData.projectInterface.currentFrame = num;\r\n if(this.renderConfig.clearCanvas === true){\r\n this.reset();\r\n this.canvasContext.save();\r\n //this.canvasContext.canvas.width = this.canvasContext.canvas.width;\r\n this.canvasContext.clearRect(this.transformCanvas.tx, this.transformCanvas.ty, this.transformCanvas.w*this.transformCanvas.sx, this.transformCanvas.h*this.transformCanvas.sy);\r\n }else{\r\n this.save();\r\n }\r\n this.ctxTransform(this.transformCanvas.props);\r\n this.canvasContext.beginPath();\r\n this.canvasContext.rect(0,0,this.transformCanvas.w,this.transformCanvas.h);\r\n this.canvasContext.closePath();\r\n this.canvasContext.clip();\r\n\r\n //console.log('--------');\r\n //console.log('NEW: ',num);\r\n var i, len = this.layers.length;\r\n if(!this.completeLayers){\r\n this.checkLayers(num);\r\n }\r\n\r\n for (i = 0; i < len; i++) {\r\n if(this.completeLayers || this.elements[i]){\r\n this.elements[i].prepareFrame(num - this.layers[i].st);\r\n }\r\n }\r\n for (i = len - 1; i >= 0; i-=1) {\r\n if(this.completeLayers || this.elements[i]){\r\n this.elements[i].renderFrame();\r\n }\r\n }\r\n if(this.renderConfig.clearCanvas !== true){\r\n this.restore();\r\n } else {\r\n this.canvasContext.restore();\r\n }\r\n};\r\n\r\nCanvasRenderer.prototype.buildItem = function(pos){\r\n var elements = this.elements;\r\n if(elements[pos] || this.layers[pos].ty == 99){\r\n return;\r\n }\r\n var element = this.createItem(this.layers[pos], this,this.globalData);\r\n elements[pos] = element;\r\n element.initExpressions();\r\n if(this.layers[pos].ty === 0){\r\n element.resize(this.globalData.transformCanvas);\r\n }\r\n};\r\n\r\nCanvasRenderer.prototype.checkPendingElements = function(){\r\n while(this.pendingElements.length){\r\n var element = this.pendingElements.pop();\r\n element.checkParenting();\r\n }\r\n};\r\n\r\nCanvasRenderer.prototype.hide = function(){\r\n this.animationItem.container.style.display = 'none';\r\n};\r\n\r\nCanvasRenderer.prototype.show = function(){\r\n this.animationItem.container.style.display = 'block';\r\n};\r\n\r\nCanvasRenderer.prototype.searchExtraCompositions = function(assets){\r\n var i, len = assets.length;\r\n var floatingContainer = document.createElementNS(svgNS,'g');\r\n for(i=0;i<len;i+=1){\r\n if(assets[i].xt){\r\n var comp = this.createComp(assets[i],this.globalData.comp,this.globalData);\r\n comp.initExpressions();\r\n //comp.compInterface = CompExpressionInterface(comp);\r\n //Expressions.addLayersInterface(comp.elements, this.globalData.projectInterface);\r\n this.globalData.projectInterface.registerComposition(comp);\r\n }\r\n }\r\n};\r\n\nfunction HybridRenderer(animationItem, config){\r\n this.animationItem = animationItem;\r\n this.layers = null;\r\n this.renderedFrame = -1;\r\n this.globalData = {\r\n frameNum: -1\r\n };\r\n this.renderConfig = {\r\n className: (config && config.className) || ''\r\n };\r\n this.pendingElements = [];\r\n this.elements = [];\r\n this.threeDElements = [];\r\n this.destroyed = false;\r\n this.camera = null;\r\n this.supports3d = true;\r\n\r\n}\r\n\r\nextendPrototype(BaseRenderer,HybridRenderer);\r\n\r\nHybridRenderer.prototype.buildItem = SVGRenderer.prototype.buildItem;\r\n\r\nHybridRenderer.prototype.checkPendingElements = function(){\r\n while(this.pendingElements.length){\r\n var element = this.pendingElements.pop();\r\n element.checkParenting();\r\n }\r\n};\r\n\r\nHybridRenderer.prototype.appendElementInPos = function(element, pos){\r\n var newDOMElement = element.getBaseElement();\r\n if(!newDOMElement){\r\n return;\r\n }\r\n var layer = this.layers[pos];\r\n if(!layer.ddd || !this.supports3d){\r\n var i = 0;\r\n var nextDOMElement, nextLayer;\r\n while(i<pos){\r\n if(this.elements[i] && this.elements[i]!== true && this.elements[i].getBaseElement){\r\n nextLayer = this.elements[i];\r\n nextDOMElement = this.layers[i].ddd ? this.getThreeDContainerByPos(i) : nextLayer.getBaseElement();\r\n }\r\n i += 1;\r\n }\r\n if(nextDOMElement){\r\n if(!layer.ddd || !this.supports3d){\r\n this.layerElement.insertBefore(newDOMElement, nextDOMElement);\r\n }\r\n } else {\r\n if(!layer.ddd || !this.supports3d){\r\n this.layerElement.appendChild(newDOMElement);\r\n }\r\n }\r\n } else {\r\n this.addTo3dContainer(newDOMElement,pos);\r\n }\r\n};\r\n\r\n\r\nHybridRenderer.prototype.createBase = function (data) {\r\n return new SVGBaseElement(data, this.layerElement,this.globalData,this);\r\n};\r\n\r\nHybridRenderer.prototype.createShape = function (data) {\r\n if(!this.supports3d){\r\n return new IShapeElement(data, this.layerElement,this.globalData,this);\r\n }\r\n return new HShapeElement(data, this.layerElement,this.globalData,this);\r\n};\r\n\r\nHybridRenderer.prototype.createText = function (data) {\r\n if(!this.supports3d){\r\n return new SVGTextElement(data, this.layerElement,this.globalData,this);\r\n }\r\n return new HTextElement(data, this.layerElement,this.globalData,this);\r\n};\r\n\r\nHybridRenderer.prototype.createCamera = function (data) {\r\n this.camera = new HCameraElement(data, this.layerElement,this.globalData,this);\r\n return this.camera;\r\n};\r\n\r\nHybridRenderer.prototype.createImage = function (data) {\r\n if(!this.supports3d){\r\n return new IImageElement(data, this.layerElement,this.globalData,this);\r\n }\r\n return new HImageElement(data, this.layerElement,this.globalData,this);\r\n};\r\n\r\nHybridRenderer.prototype.createComp = function (data) {\r\n if(!this.supports3d){\r\n return new ICompElement(data, this.layerElement,this.globalData,this);\r\n }\r\n return new HCompElement(data, this.layerElement,this.globalData,this);\r\n\r\n};\r\n\r\nHybridRenderer.prototype.createSolid = function (data) {\r\n if(!this.supports3d){\r\n return new ISolidElement(data, this.layerElement,this.globalData,this);\r\n }\r\n return new HSolidElement(data, this.layerElement,this.globalData,this);\r\n};\r\n\r\nHybridRenderer.prototype.getThreeDContainerByPos = function(pos){\r\n var i = 0, len = this.threeDElements.length;\r\n while(i<len) {\r\n if(this.threeDElements[i].startPos <= pos && this.threeDElements[i].endPos >= pos) {\r\n return this.threeDElements[i].perspectiveElem;\r\n }\r\n i += 1;\r\n }\r\n}\r\n\r\nHybridRenderer.prototype.createThreeDContainer = function(pos){\r\n var perspectiveElem = document.createElement('div');\r\n styleDiv(perspectiveElem);\r\n perspectiveElem.style.width = this.globalData.compSize.w+'px';\r\n perspectiveElem.style.height = this.globalData.compSize.h+'px';\r\n perspectiveElem.style.transformOrigin = perspectiveElem.style.mozTransformOrigin = perspectiveElem.style.webkitTransformOrigin = \"50% 50%\";\r\n var container = document.createElement('div');\r\n styleDiv(container);\r\n container.style.transform = container.style.webkitTransform = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\r\n perspectiveElem.appendChild(container);\r\n this.resizerElem.appendChild(perspectiveElem);\r\n var threeDContainerData = {\r\n container:container,\r\n perspectiveElem:perspectiveElem,\r\n startPos: pos,\r\n endPos: pos\r\n };\r\n this.threeDElements.push(threeDContainerData);\r\n return threeDContainerData;\r\n};\r\n\r\nHybridRenderer.prototype.build3dContainers = function(){\r\n var i, len = this.layers.length;\r\n var lastThreeDContainerData;\r\n for(i=0;i<len;i+=1){\r\n if(this.layers[i].ddd){\r\n if(!lastThreeDContainerData){\r\n lastThreeDContainerData = this.createThreeDContainer(i);\r\n }\r\n lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos,i);\r\n } else {\r\n lastThreeDContainerData = null;\r\n }\r\n }\r\n};\r\n\r\nHybridRenderer.prototype.addTo3dContainer = function(elem,pos){\r\n var i = 0, len = this.threeDElements.length;\r\n while(i<len){\r\n if(pos <= this.threeDElements[i].endPos){\r\n var j = this.threeDElements[i].startPos;\r\n var nextElement;\r\n while(j<pos){\r\n if(this.elements[j] && this.elements[j].getBaseElement){\r\n nextElement = this.elements[j].getBaseElement();\r\n }\r\n j += 1;\r\n }\r\n if(nextElement){\r\n this.threeDElements[i].container.insertBefore(elem, nextElement);\r\n } else {\r\n this.threeDElements[i].container.appendChild(elem);\r\n }\r\n break;\r\n }\r\n i += 1;\r\n }\r\n};\r\n\r\nHybridRenderer.prototype.configAnimation = function(animData){\r\n var resizerElem = document.createElement('div');\r\n var wrapper = this.animationItem.wrapper;\r\n resizerElem.style.width = animData.w+'px';\r\n resizerElem.style.height = animData.h+'px';\r\n this.resizerElem = resizerElem;\r\n styleDiv(resizerElem);\r\n resizerElem.style.transformStyle = resizerElem.style.webkitTransformStyle = resizerElem.style.mozTransformStyle = \"flat\";\r\n if(this.renderConfig.className) {\r\n wrapper.setAttribute('class', this.renderConfig.className);\r\n }\r\n wrapper.appendChild(resizerElem);\r\n\r\n resizerElem.style.overflow = 'hidden';\r\n var svg = document.createElementNS(svgNS,'svg');\r\n svg.setAttribute('width','1');\r\n svg.setAttribute('height','1');\r\n styleDiv(svg);\r\n this.resizerElem.appendChild(svg);\r\n var defs = document.createElementNS(svgNS,'defs');\r\n svg.appendChild(defs);\r\n this.globalData.defs = defs;\r\n this.data = animData;\r\n //Mask animation\r\n this.globalData.getAssetData = this.animationItem.getAssetData.bind(this.animationItem);\r\n this.globalData.getAssetsPath = this.animationItem.getAssetsPath.bind(this.animationItem);\r\n this.globalData.elementLoaded = this.animationItem.elementLoaded.bind(this.animationItem);\r\n this.globalData.frameId = 0;\r\n this.globalData.compSize = {\r\n w: animData.w,\r\n h: animData.h\r\n };\r\n this.globalData.frameRate = animData.fr;\r\n this.layers = animData.layers;\r\n this.globalData.fontManager = new FontManager();\r\n this.globalData.fontManager.addChars(animData.chars);\r\n this.globalData.fontManager.addFonts(animData.fonts,svg);\r\n this.layerElement = this.resizerElem;\r\n this.build3dContainers();\r\n this.updateContainerSize();\r\n};\r\n\r\nHybridRenderer.prototype.destroy = function () {\r\n this.animationItem.wrapper.innerHTML = '';\r\n this.animationItem.container = null;\r\n this.globalData.defs = null;\r\n var i, len = this.layers ? this.layers.length : 0;\r\n for (i = 0; i < len; i++) {\r\n this.elements[i].destroy();\r\n }\r\n this.elements.length = 0;\r\n this.destroyed = true;\r\n this.animationItem = null;\r\n};\r\n\r\nHybridRenderer.prototype.updateContainerSize = function () {\r\n var elementWidth = this.animationItem.wrapper.offsetWidth;\r\n var elementHeight = this.animationItem.wrapper.offsetHeight;\r\n var elementRel = elementWidth/elementHeight;\r\n var animationRel = this.globalData.compSize.w/this.globalData.compSize.h;\r\n var sx,sy,tx,ty;\r\n if(animationRel>elementRel){\r\n sx = elementWidth/(this.globalData.compSize.w);\r\n sy = elementWidth/(this.globalData.compSize.w);\r\n tx = 0;\r\n ty = ((elementHeight-this.globalData.compSize.h*(elementWidth/this.globalData.compSize.w))/2);\r\n }else{\r\n sx = elementHeight/(this.globalData.compSize.h);\r\n sy = elementHeight/(this.globalData.compSize.h);\r\n tx = (elementWidth-this.globalData.compSize.w*(elementHeight/this.globalData.compSize.h))/2;\r\n ty = 0;\r\n }\r\n this.resizerElem.style.transform = this.resizerElem.style.webkitTransform = 'matrix3d(' + sx + ',0,0,0,0,'+sy+',0,0,0,0,1,0,'+tx+','+ty+',0,1)';\r\n};\r\n\r\nHybridRenderer.prototype.renderFrame = SVGRenderer.prototype.renderFrame;\r\n\r\nHybridRenderer.prototype.hide = function(){\r\n this.resizerElem.style.display = 'none';\r\n};\r\n\r\nHybridRenderer.prototype.show = function(){\r\n this.resizerElem.style.display = 'block';\r\n};\r\n\r\nHybridRenderer.prototype.initItems = function(){\r\n this.buildAllItems();\r\n if(this.camera){\r\n this.camera.setup();\r\n } else {\r\n var cWidth = this.globalData.compSize.w;\r\n var cHeight = this.globalData.compSize.h;\r\n var i, len = this.threeDElements.length;\r\n for(i=0;i<len;i+=1){\r\n this.threeDElements[i].perspectiveElem.style.perspective = this.threeDElements[i].perspectiveElem.style.webkitPerspective = Math.sqrt(Math.pow(cWidth,2) + Math.pow(cHeight,2)) + 'px';\r\n }\r\n }\r\n};\r\n\r\nHybridRenderer.prototype.searchExtraCompositions = function(assets){\r\n var i, len = assets.length;\r\n var floatingContainer = document.createElement('div');\r\n for(i=0;i<len;i+=1){\r\n if(assets[i].xt){\r\n var comp = this.createComp(assets[i],floatingContainer,this.globalData.comp,null);\r\n comp.initExpressions();\r\n this.globalData.projectInterface.registerComposition(comp);\r\n }\r\n }\r\n};\r\n\nfunction CVBaseElement(data, comp,globalData){\r\n this.globalData = globalData;\r\n this.data = data;\r\n this.comp = comp;\r\n this.canvasContext = globalData.canvasContext;\r\n this.init();\r\n}\r\n\r\ncreateElement(BaseElement, CVBaseElement);\r\n\r\nCVBaseElement.prototype.createElements = function(){\r\n this.checkParenting();\r\n};\r\n\r\nCVBaseElement.prototype.checkBlendMode = function(globalData){\r\n if(globalData.blendMode !== this.data.bm) {\r\n globalData.blendMode = this.data.bm;\r\n\r\n var blendModeValue = '';\r\n switch (this.data.bm) {\r\n case 0:\r\n blendModeValue = 'normal';\r\n break;\r\n case 1:\r\n blendModeValue = 'multiply';\r\n break;\r\n case 2:\r\n blendModeValue = 'screen';\r\n break;\r\n case 3:\r\n blendModeValue = 'overlay';\r\n break;\r\n case 4:\r\n blendModeValue = 'darken';\r\n break;\r\n case 5:\r\n blendModeValue = 'lighten';\r\n break;\r\n case 6:\r\n blendModeValue = 'color-dodge';\r\n break;\r\n case 7:\r\n blendModeValue = 'color-burn';\r\n break;\r\n case 8:\r\n blendModeValue = 'hard-light';\r\n break;\r\n case 9:\r\n blendModeValue = 'soft-light';\r\n break;\r\n case 10:\r\n blendModeValue = 'difference';\r\n break;\r\n case 11:\r\n blendModeValue = 'exclusion';\r\n break;\r\n case 12:\r\n blendModeValue = 'hue';\r\n break;\r\n case 13:\r\n blendModeValue = 'saturation';\r\n break;\r\n case 14:\r\n blendModeValue = 'color';\r\n break;\r\n case 15:\r\n blendModeValue = 'luminosity';\r\n break;\r\n }\r\n globalData.canvasContext.globalCompositeOperation = blendModeValue;\r\n }\r\n};\r\n\r\n\r\nCVBaseElement.prototype.renderFrame = function(parentTransform){\r\n if(this.data.ty === 3){\r\n return false;\r\n }\r\n this.checkBlendMode(this.data.ty === 0?this.parentGlobalData:this.globalData);\r\n\r\n if(!this.isVisible){\r\n return this.isVisible;\r\n }\r\n this.finalTransform.opMdf = this.finalTransform.op.mdf;\r\n this.finalTransform.matMdf = this.finalTransform.mProp.mdf;\r\n this.finalTransform.opacity = this.finalTransform.op.v;\r\n\r\n var mat;\r\n var finalMat = this.finalTransform.mat;\r\n\r\n if(this.hierarchy){\r\n var i, len = this.hierarchy.length;\r\n mat = this.finalTransform.mProp.v.props;\r\n finalMat.cloneFromProps(mat);\r\n for(i=0;i<len;i+=1){\r\n this.finalTransform.matMdf = this.hierarchy[i].finalTransform.mProp.mdf ? true : this.finalTransform.matMdf;\r\n mat = this.hierarchy[i].finalTransform.mProp.v.props;\r\n finalMat.transform(mat[0],mat[1],mat[2],mat[3],mat[4],mat[5],mat[6],mat[7],mat[8],mat[9],mat[10],mat[11],mat[12],mat[13],mat[14],mat[15]);\r\n }\r\n }else{\r\n if(!parentTransform){\r\n finalMat.cloneFromProps(this.finalTransform.mProp.v.props);\r\n }else{\r\n mat = this.finalTransform.mProp.v.props;\r\n finalMat.cloneFromProps(mat);\r\n }\r\n }\r\n\r\n if(parentTransform){\r\n mat = parentTransform.mat.props;\r\n finalMat.transform(mat[0],mat[1],mat[2],mat[3],mat[4],mat[5],mat[6],mat[7],mat[8],mat[9],mat[10],mat[11],mat[12],mat[13],mat[14],mat[15]);\r\n this.finalTransform.opacity *= parentTransform.opacity;\r\n this.finalTransform.opMdf = parentTransform.opMdf ? true : this.finalTransform.opMdf;\r\n this.finalTransform.matMdf = parentTransform.matMdf ? true : this.finalTransform.matMdf\r\n }\r\n\r\n if(this.data.hasMask){\r\n this.globalData.renderer.save(true);\r\n this.maskManager.renderFrame(this.data.ty === 0?null:finalMat);\r\n }\r\n if(this.data.hd){\r\n this.isVisible = false;\r\n }\r\n return this.isVisible;\r\n\r\n};\r\n\r\nCVBaseElement.prototype.addMasks = function(data){\r\n this.maskManager = new CVMaskElement(data,this,this.globalData);\r\n};\r\n\r\n\r\nCVBaseElement.prototype.destroy = function(){\r\n this.canvasContext = null;\r\n this.data = null;\r\n this.globalData = null;\r\n if(this.maskManager) {\r\n this.maskManager.destroy();\r\n }\r\n};\r\n\r\nCVBaseElement.prototype.mHelper = new Matrix();\r\n\nfunction CVCompElement(data, comp,globalData){\r\n this._parent.constructor.call(this,data, comp,globalData);\r\n var compGlobalData = {};\r\n for(var s in globalData){\r\n if(globalData.hasOwnProperty(s)){\r\n compGlobalData[s] = globalData[s];\r\n }\r\n }\r\n compGlobalData.renderer = this;\r\n compGlobalData.compHeight = this.data.h;\r\n compGlobalData.compWidth = this.data.w;\r\n this.renderConfig = {\r\n clearCanvas: true\r\n };\r\n this.contextData = {\r\n saved : Array.apply(null,{length:15}),\r\n savedOp: Array.apply(null,{length:15}),\r\n cArrPos : 0,\r\n cTr : new Matrix(),\r\n cO : 1\r\n };\r\n this.completeLayers = false;\r\n var i, len = 15;\r\n for(i=0;i<len;i+=1){\r\n this.contextData.saved[i] = Array.apply(null,{length:16});\r\n }\r\n this.transformMat = new Matrix();\r\n this.parentGlobalData = this.globalData;\r\n var cv = document.createElement('canvas');\r\n //document.body.appendChild(cv);\r\n compGlobalData.canvasContext = cv.getContext('2d');\r\n this.canvasContext = compGlobalData.canvasContext;\r\n cv.width = this.data.w;\r\n cv.height = this.data.h;\r\n this.canvas = cv;\r\n this.globalData = compGlobalData;\r\n this.layers = data.layers;\r\n this.pendingElements = [];\r\n this.elements = Array.apply(null,{length:this.layers.length});\r\n if(this.data.tm){\r\n this.tm = PropertyFactory.getProp(this,this.data.tm,0,globalData.frameRate,this.dynamicProperties);\r\n }\r\n if(this.data.xt || !globalData.progressiveLoad){\r\n this.buildAllItems();\r\n }\r\n}\r\ncreateElement(CVBaseElement, CVCompElement);\r\n\r\nCVCompElement.prototype.ctxTransform = CanvasRenderer.prototype.ctxTransform;\r\nCVCompElement.prototype.ctxOpacity = CanvasRenderer.prototype.ctxOpacity;\r\nCVCompElement.prototype.save = CanvasRenderer.prototype.save;\r\nCVCompElement.prototype.restore = CanvasRenderer.prototype.restore;\r\nCVCompElement.prototype.reset = function(){\r\n this.contextData.cArrPos = 0;\r\n this.contextData.cTr.reset();\r\n this.contextData.cO = 1;\r\n};\r\nCVCompElement.prototype.resize = function(transformCanvas){\r\n var maxScale = Math.max(transformCanvas.sx,transformCanvas.sy);\r\n this.canvas.width = this.data.w*maxScale;\r\n this.canvas.height = this.data.h*maxScale;\r\n this.transformCanvas = {\r\n sc:maxScale,\r\n w:this.data.w*maxScale,\r\n h:this.data.h*maxScale,\r\n props:[maxScale,0,0,0,0,maxScale,0,0,0,0,1,0,0,0,0,1]\r\n }\r\n var i,len = this.elements.length;\r\n for( i = 0; i < len; i+=1 ){\r\n if(this.elements[i] && this.elements[i].data.ty === 0){\r\n this.elements[i].resize(transformCanvas);\r\n }\r\n }\r\n};\r\n\r\nCVCompElement.prototype.prepareFrame = function(num){\r\n this.globalData.frameId = this.parentGlobalData.frameId;\r\n this.globalData.mdf = false;\r\n this._parent.prepareFrame.call(this,num);\r\n if(this.isVisible===false && !this.data.xt){\r\n return;\r\n }\r\n var timeRemapped = num;\r\n if(this.tm){\r\n timeRemapped = this.tm.v;\r\n if(timeRemapped === this.data.op){\r\n timeRemapped = this.data.op - 1;\r\n }\r\n }\r\n this.renderedFrame = timeRemapped/this.data.sr;\r\n var i,len = this.elements.length;\r\n\r\n if(!this.completeLayers){\r\n this.checkLayers(num);\r\n }\r\n\r\n for( i = 0; i < len; i+=1 ){\r\n if(this.completeLayers || this.elements[i]){\r\n this.elements[i].prepareFrame(timeRemapped/this.data.sr - this.layers[i].st);\r\n if(this.elements[i].data.ty === 0 && this.elements[i].globalData.mdf){\r\n this.globalData.mdf = true;\r\n }\r\n }\r\n }\r\n if(this.globalData.mdf && !this.data.xt){\r\n this.canvasContext.clearRect(0, 0, this.data.w, this.data.h);\r\n this.ctxTransform(this.transformCanvas.props);\r\n }\r\n};\r\n\r\nCVCompElement.prototype.renderFrame = function(parentMatrix){\r\n if(this._parent.renderFrame.call(this,parentMatrix)===false){\r\n return;\r\n }\r\n if(this.globalData.mdf){\r\n var i,len = this.layers.length;\r\n for( i = len - 1; i >= 0; i -= 1 ){\r\n if(this.completeLayers || this.elements[i]){\r\n this.elements[i].renderFrame();\r\n }\r\n }\r\n }\r\n if(this.data.hasMask){\r\n this.globalData.renderer.restore(true);\r\n }\r\n if(this.firstFrame){\r\n this.firstFrame = false;\r\n }\r\n this.parentGlobalData.renderer.save();\r\n this.parentGlobalData.renderer.ctxTransform(this.finalTransform.mat.props);\r\n this.parentGlobalData.renderer.ctxOpacity(this.finalTransform.opacity);\r\n this.parentGlobalData.renderer.canvasContext.drawImage(this.canvas,0,0,this.data.w,this.data.h);\r\n this.parentGlobalData.renderer.restore();\r\n\r\n if(this.globalData.mdf){\r\n this.reset();\r\n }\r\n};\r\n\r\nCVCompElement.prototype.setElements = function(elems){\r\n this.elements = elems;\r\n};\r\n\r\nCVCompElement.prototype.getElements = function(){\r\n return this.elements;\r\n};\r\n\r\nCVCompElement.prototype.destroy = function(){\r\n var i,len = this.layers.length;\r\n for( i = len - 1; i >= 0; i -= 1 ){\r\n this.elements[i].destroy();\r\n }\r\n this.layers = null;\r\n this.elements = null;\r\n this._parent.destroy.call(this._parent);\r\n};\r\nCVCompElement.prototype.checkLayers = CanvasRenderer.prototype.checkLayers;\r\nCVCompElement.prototype.buildItem = CanvasRenderer.prototype.buildItem;\r\nCVCompElement.prototype.checkPendingElements = CanvasRenderer.prototype.checkPendingElements;\r\nCVCompElement.prototype.addPendingElement = CanvasRenderer.prototype.addPendingElement;\r\nCVCompElement.prototype.buildAllItems = CanvasRenderer.prototype.buildAllItems;\r\nCVCompElement.prototype.createItem = CanvasRenderer.prototype.createItem;\r\nCVCompElement.prototype.createImage = CanvasRenderer.prototype.createImage;\r\nCVCompElement.prototype.createComp = CanvasRenderer.prototype.createComp;\r\nCVCompElement.prototype.createSolid = CanvasRenderer.prototype.createSolid;\r\nCVCompElement.prototype.createShape = CanvasRenderer.prototype.createShape;\r\nCVCompElement.prototype.createText = CanvasRenderer.prototype.createText;\r\nCVCompElement.prototype.createBase = CanvasRenderer.prototype.createBase;\r\nCVCompElement.prototype.buildElementParenting = CanvasRenderer.prototype.buildElementParenting;\nfunction CVImageElement(data, comp,globalData){\r\n this.assetData = globalData.getAssetData(data.refId);\r\n this._parent.constructor.call(this,data, comp,globalData);\r\n this.globalData.addPendingElement();\r\n}\r\ncreateElement(CVBaseElement, CVImageElement);\r\n\r\nCVImageElement.prototype.createElements = function(){\r\n var imageLoaded = function(){\r\n this.globalData.elementLoaded();\r\n if(this.assetData.w !== this.img.width || this.assetData.h !== this.img.height){\r\n var canvas = document.createElement('canvas');\r\n canvas.width = this.assetData.w;\r\n canvas.height = this.assetData.h;\r\n var ctx = canvas.getContext('2d');\r\n\r\n var imgW = this.img.width;\r\n var imgH = this.img.height;\r\n var imgRel = imgW / imgH;\r\n var canvasRel = this.assetData.w/this.assetData.h;\r\n var widthCrop, heightCrop;\r\n if(imgRel>canvasRel){\r\n heightCrop = imgH;\r\n widthCrop = heightCrop*canvasRel;\r\n } else {\r\n widthCrop = imgW;\r\n heightCrop = widthCrop/canvasRel;\r\n }\r\n ctx.drawImage(this.img,(imgW-widthCrop)/2,(imgH-heightCrop)/2,widthCrop,heightCrop,0,0,this.assetData.w,this.assetData.h);\r\n this.img = canvas;\r\n }\r\n }.bind(this);\r\n var imageFailed = function(){\r\n this.failed = true;\r\n this.globalData.elementLoaded();\r\n }.bind(this);\r\n\r\n this.img = new Image();\r\n this.img.addEventListener('load', imageLoaded, false);\r\n this.img.addEventListener('error', imageFailed, false);\r\n var assetPath = this.globalData.getAssetsPath(this.assetData);\r\n this.img.src = assetPath;\r\n\r\n this._parent.createElements.call(this);\r\n\r\n};\r\n\r\nCVImageElement.prototype.renderFrame = function(parentMatrix){\r\n if(this.failed){\r\n return;\r\n }\r\n if(this._parent.renderFrame.call(this,parentMatrix)===false){\r\n return;\r\n }\r\n var ctx = this.canvasContext;\r\n this.globalData.renderer.save();\r\n var finalMat = this.finalTransform.mat.props;\r\n this.globalData.renderer.ctxTransform(finalMat);\r\n this.globalData.renderer.ctxOpacity(this.finalTransform.opacity);\r\n ctx.drawImage(this.img,0,0);\r\n this.globalData.renderer.restore(this.data.hasMask);\r\n if(this.firstFrame){\r\n this.firstFrame = false;\r\n }\r\n};\r\n\r\nCVImageElement.prototype.destroy = function(){\r\n this.img = null;\r\n this._parent.destroy.call(this._parent);\r\n};\n\r\nfunction CVMaskElement(data,element){\r\n this.data = data;\r\n this.element = element;\r\n this.dynamicProperties = [];\r\n this.masksProperties = this.data.masksProperties;\r\n this.viewData = Array.apply(null,{length:this.masksProperties.length});\r\n var i, len = this.masksProperties.length;\r\n for (i = 0; i < len; i++) {\r\n this.viewData[i] = ShapePropertyFactory.getShapeProp(this.element,this.masksProperties[i],3,this.dynamicProperties,null);\r\n }\r\n}\r\n\r\nCVMaskElement.prototype.prepareFrame = function(num){\r\n var i, len = this.dynamicProperties.length;\r\n for(i=0;i<len;i+=1){\r\n this.dynamicProperties[i].getValue(num);\r\n if(this.dynamicProperties[i].mdf){\r\n this.element.globalData.mdf = true;\r\n }\r\n }\r\n};\r\n\r\nCVMaskElement.prototype.renderFrame = function (transform) {\r\n var ctx = this.element.canvasContext;\r\n var i, len = this.data.masksProperties.length;\r\n var pt,pt2,pt3,data, hasMasks = false;\r\n for (i = 0; i < len; i++) {\r\n if(this.masksProperties[i].mode === 'n'){\r\n continue;\r\n }\r\n if(hasMasks === false){\r\n ctx.beginPath();\r\n hasMasks = true;\r\n }\r\n if (this.masksProperties[i].inv) {\r\n ctx.moveTo(0, 0);\r\n ctx.lineTo(this.element.globalData.compWidth, 0);\r\n ctx.lineTo(this.element.globalData.compWidth, this.element.globalData.compHeight);\r\n ctx.lineTo(0, this.element.globalData.compHeight);\r\n ctx.lineTo(0, 0);\r\n }\r\n data = this.viewData[i].v;\r\n pt = transform ? transform.applyToPointArray(data.v[0][0],data.v[0][1],0):data.v[0];\r\n ctx.moveTo(pt[0], pt[1]);\r\n var j, jLen = data._length;\r\n for (j = 1; j < jLen; j++) {\r\n pt = transform ? transform.applyToPointArray(data.o[j - 1][0],data.o[j - 1][1],0) : data.o[j - 1];\r\n pt2 = transform ? transform.applyToPointArray(data.i[j][0],data.i[j][1],0) : data.i[j];\r\n pt3 = transform ? transform.applyToPointArray(data.v[j][0],data.v[j][1],0) : data.v[j];\r\n ctx.bezierCurveTo(pt[0], pt[1], pt2[0], pt2[1], pt3[0], pt3[1]);\r\n }\r\n pt = transform ? transform.applyToPointArray(data.o[j - 1][0],data.o[j - 1][1],0) : data.o[j - 1];\r\n pt2 = transform ? transform.applyToPointArray(data.i[0][0],data.i[0][1],0) : data.i[0];\r\n pt3 = transform ? transform.applyToPointArray(data.v[0][0],data.v[0][1],0) : data.v[0];\r\n ctx.bezierCurveTo(pt[0], pt[1], pt2[0], pt2[1], pt3[0], pt3[1]);\r\n }\r\n if(hasMasks){\r\n ctx.clip();\r\n }\r\n};\r\n\r\nCVMaskElement.prototype.getMaskProperty = MaskElement.prototype.getMaskProperty;\r\n\r\nCVMaskElement.prototype.destroy = function(){\r\n this.element = null;\r\n};\nfunction CVShapeElement(data, comp,globalData){\r\n this.shapes = [];\r\n this.shapesData = data.shapes;\r\n this.stylesList = [];\r\n this.itemsData = [];\r\n this.prevViewData = [];\r\n this.shapeModifiers = [];\r\n this.processedElements = [];\r\n this._parent.constructor.call(this,data, comp,globalData);\r\n}\r\ncreateElement(CVBaseElement, CVShapeElement);\r\n\r\nCVShapeElement.prototype.transformHelper = {opacity:1,mat:new Matrix(),matMdf:false,opMdf:false};\r\n\r\nCVShapeElement.prototype.dashResetter = [];\r\n\r\nCVShapeElement.prototype.createElements = function(){\r\n\r\n this._parent.createElements.call(this);\r\n this.searchShapes(this.shapesData,this.itemsData,this.prevViewData,this.dynamicProperties, true);\r\n};\r\n\r\nCVShapeElement.prototype.createStyleElement = function(data, dynamicProperties){\r\n var styleElem = {\r\n data: data,\r\n type: data.ty,\r\n elements: []\r\n };\r\n var elementData = {};\r\n if(data.ty == 'fl' || data.ty == 'st'){\r\n elementData.c = PropertyFactory.getProp(this,data.c,1,255,dynamicProperties);\r\n if(!elementData.c.k){\r\n styleElem.co = 'rgb('+bm_floor(elementData.c.v[0])+','+bm_floor(elementData.c.v[1])+','+bm_floor(elementData.c.v[2])+')';\r\n }\r\n }\r\n elementData.o = PropertyFactory.getProp(this,data.o,0,0.01,dynamicProperties);\r\n if(data.ty == 'st') {\r\n styleElem.lc = this.lcEnum[data.lc] || 'round';\r\n styleElem.lj = this.ljEnum[data.lj] || 'round';\r\n if(data.lj == 1) {\r\n styleElem.ml = data.ml;\r\n }\r\n elementData.w = PropertyFactory.getProp(this,data.w,0,null,dynamicProperties);\r\n if(!elementData.w.k){\r\n styleElem.wi = elementData.w.v;\r\n }\r\n if(data.d){\r\n var d = PropertyFactory.getDashProp(this,data.d,'canvas',dynamicProperties);\r\n elementData.d = d;\r\n if(!elementData.d.k){\r\n styleElem.da = elementData.d.dasharray;\r\n styleElem.do = elementData.d.dashoffset;\r\n }\r\n }\r\n\r\n } else {\r\n\r\n styleElem.r = data.r === 2 ? 'evenodd' : 'nonzero';\r\n }\r\n this.stylesList.push(styleElem);\r\n elementData.style = styleElem;\r\n return elementData;\r\n}\r\n\r\nCVShapeElement.prototype.createGroupElement = function(data) {\r\n var elementData = {\r\n it: [],\r\n prevViewData: []\r\n };\r\n return elementData;\r\n}\r\n\r\nCVShapeElement.prototype.createTransformElement = function(data, dynamicProperties) {\r\n var elementData = {\r\n transform : {\r\n mat: new Matrix(),\r\n opacity: 1,\r\n matMdf:false,\r\n opMdf:false,\r\n op: PropertyFactory.getProp(this,data.o,0,0.01,dynamicProperties),\r\n mProps: PropertyFactory.getProp(this,data,2,null,dynamicProperties)\r\n },\r\n elements: []\r\n };\r\n return elementData;\r\n}\r\n\r\nCVShapeElement.prototype.createShapeElement = function(data, dynamicProperties) {\r\n var elementData = {\r\n nodes:[],\r\n trNodes:[],\r\n tr:[0,0,0,0,0,0]\r\n };\r\n var ty = 4;\r\n if(data.ty == 'rc'){\r\n ty = 5;\r\n }else if(data.ty == 'el'){\r\n ty = 6;\r\n }else if(data.ty == 'sr'){\r\n ty = 7;\r\n }\r\n elementData.sh = ShapePropertyFactory.getShapeProp(this,data,ty,dynamicProperties);\r\n this.shapes.push(elementData.sh);\r\n this.addShapeToModifiers(elementData);\r\n jLen = this.stylesList.length;\r\n var hasStrokes = false, hasFills = false;\r\n for(j=0;j<jLen;j+=1){\r\n if(!this.stylesList[j].closed){\r\n this.stylesList[j].elements.push(elementData);\r\n if(this.stylesList[j].type === 'st'){\r\n hasStrokes = true;\r\n }else{\r\n hasFills = true;\r\n }\r\n }\r\n }\r\n elementData.st = hasStrokes;\r\n elementData.fl = hasFills;\r\n return elementData;\r\n}\r\n\r\nCVShapeElement.prototype.reloadShapes = function(){\r\n this.firstFrame = true;\r\n var i, len = this.itemsData.length;\r\n for(i=0;i<len;i+=1){\r\n this.prevViewData[i] = this.itemsData[i];\r\n }\r\n this.searchShapes(this.shapesData,this.itemsData,this.prevViewData,this.dynamicProperties, true);\r\n var i, len = this.dynamicProperties.length;\r\n for(i=0;i<len;i+=1){\r\n this.dynamicProperties[i].getValue();\r\n }\r\n this.renderModifiers();\r\n}\r\n\r\nCVShapeElement.prototype.searchShapes = function(arr,itemsData, prevViewData,dynamicProperties, render){\r\n var i, len = arr.length - 1;\r\n var j, jLen;\r\n var ownArrays = [], ownModifiers = [], processedPos;\r\n for(i=len;i>=0;i-=1){\r\n processedPos = this.searchProcessedElement(arr[i]);\r\n if(!processedPos){\r\n arr[i]._render = render;\r\n } else {\r\n itemsData[i] = prevViewData[processedPos - 1];\r\n }\r\n if(arr[i].ty == 'fl' || arr[i].ty == 'st'){\r\n if(!processedPos){\r\n itemsData[i] = this.createStyleElement(arr[i], dynamicProperties);\r\n } else {\r\n itemsData[i].style.closed = false;\r\n }\r\n \r\n ownArrays.push(itemsData[i].style);\r\n }else if(arr[i].ty == 'gr'){\r\n if(!processedPos){\r\n itemsData[i] = this.createGroupElement(arr[i]);\r\n } else {\r\n jLen = itemsData[i].it.length;\r\n for(j=0;j<jLen;j+=1){\r\n itemsData[i].prevViewData[j] = itemsData[i].it[j];\r\n }\r\n }\r\n this.searchShapes(arr[i].it,itemsData[i].it,itemsData[i].prevViewData,dynamicProperties, render);\r\n }else if(arr[i].ty == 'tr'){\r\n if(!processedPos){\r\n itemsData[i] = this.createTransformElement(arr[i], dynamicProperties);\r\n }\r\n }else if(arr[i].ty == 'sh' || arr[i].ty == 'rc' || arr[i].ty == 'el' || arr[i].ty == 'sr'){\r\n if(!processedPos){\r\n itemsData[i] = this.createShapeElement(arr[i], dynamicProperties);\r\n }\r\n \r\n }else if(arr[i].ty == 'tm' || arr[i].ty == 'rd'){\r\n if(!processedPos){\r\n var modifier = ShapeModifiers.getModifier(arr[i].ty);\r\n modifier.init(this,arr[i],dynamicProperties);\r\n itemsData[i] = modifier;\r\n this.shapeModifiers.push(modifier);\r\n } else {\r\n modifier = itemsData[i];\r\n modifier.closed = false;\r\n }\r\n ownModifiers.push(modifier);\r\n } else if(arr[i].ty == 'rp'){\r\n if(!processedPos){\r\n modifier = ShapeModifiers.getModifier(arr[i].ty);\r\n itemsData[i] = modifier;\r\n modifier.init(this,arr,i,itemsData,dynamicProperties);\r\n this.shapeModifiers.push(modifier);\r\n render = false;\r\n }else{\r\n modifier = itemsData[i];\r\n modifier.closed = true;\r\n }\r\n ownModifiers.push(modifier);\r\n }\r\n this.addProcessedElement(arr[i], i + 1);\r\n }\r\n len = ownArrays.length;\r\n for(i=0;i<len;i+=1){\r\n ownArrays[i].closed = true;\r\n }\r\n len = ownModifiers.length;\r\n for(i=0;i<len;i+=1){\r\n ownModifiers[i].closed = true;\r\n }\r\n};\r\n\r\nCVShapeElement.prototype.addShapeToModifiers = IShapeElement.prototype.addShapeToModifiers;\r\nCVShapeElement.prototype.renderModifiers = IShapeElement.prototype.renderModifiers;\r\nCVShapeElement.prototype.lcEnum = IShapeElement.prototype.lcEnum;\r\nCVShapeElement.prototype.ljEnum = IShapeElement.prototype.ljEnum;\r\nCVShapeElement.prototype.searchProcessedElement = IShapeElement.prototype.searchProcessedElement;\r\nCVShapeElement.prototype.addProcessedElement = IShapeElement.prototype.addProcessedElement;\r\n\r\nCVShapeElement.prototype.renderFrame = function(parentMatrix){\r\n if(this._parent.renderFrame.call(this, parentMatrix)===false){\r\n return;\r\n }\r\n this.transformHelper.mat.reset();\r\n this.transformHelper.opacity = this.finalTransform.opacity;\r\n this.transformHelper.matMdf = false;\r\n this.transformHelper.opMdf = this.finalTransform.opMdf;\r\n this.renderModifiers();\r\n this.renderShape(this.transformHelper,null,null,true);\r\n if(this.data.hasMask){\r\n this.globalData.renderer.restore(true);\r\n }\r\n};\r\n\r\nCVShapeElement.prototype.renderShape = function(parentTransform,items,data,isMain){\r\n var i, len;\r\n if(!items){\r\n items = this.shapesData;\r\n len = this.stylesList.length;\r\n for(i=0;i<len;i+=1){\r\n this.stylesList[i].d = '';\r\n this.stylesList[i].mdf = false;\r\n }\r\n }\r\n if(!data){\r\n data = this.itemsData;\r\n }\r\n ///\r\n ///\r\n len = items.length - 1;\r\n var groupTransform,groupMatrix;\r\n groupTransform = parentTransform;\r\n for(i=len;i>=0;i-=1){\r\n if(items[i].ty == 'tr'){\r\n groupTransform = data[i].transform;\r\n var mtArr = data[i].transform.mProps.v.props;\r\n groupTransform.matMdf = groupTransform.mProps.mdf;\r\n groupTransform.opMdf = groupTransform.op.mdf;\r\n groupMatrix = groupTransform.mat;\r\n groupMatrix.cloneFromProps(mtArr);\r\n if(parentTransform){\r\n var props = parentTransform.mat.props;\r\n groupTransform.opacity = parentTransform.opacity;\r\n groupTransform.opacity *= data[i].transform.op.v;\r\n groupTransform.matMdf = parentTransform.matMdf ? true : groupTransform.matMdf;\r\n groupTransform.opMdf = parentTransform.opMdf ? true : groupTransform.opMdf;\r\n groupMatrix.transform(props[0],props[1],props[2],props[3],props[4],props[5],props[6],props[7],props[8],props[9],props[10],props[11],props[12],props[13],props[14],props[15]);\r\n }else{\r\n groupTransform.opacity = groupTransform.op.o;\r\n }\r\n }else if(items[i].ty == 'sh' || items[i].ty == 'el' || items[i].ty == 'rc' || items[i].ty == 'sr'){\r\n this.renderPath(items[i],data[i],groupTransform);\r\n }else if(items[i].ty == 'fl'){\r\n this.renderFill(items[i],data[i],groupTransform);\r\n }else if(items[i].ty == 'st'){\r\n this.renderStroke(items[i],data[i],groupTransform);\r\n }else if(items[i].ty == 'gr'){\r\n this.renderShape(groupTransform,items[i].it,data[i].it);\r\n }else if(items[i].ty == 'tm'){\r\n //\r\n }\r\n }\r\n if(!isMain){\r\n return;\r\n }\r\n len = this.stylesList.length;\r\n var j, jLen, k, kLen,elems,nodes, renderer = this.globalData.renderer, ctx = this.globalData.canvasContext, type;\r\n renderer.save();\r\n renderer.ctxTransform(this.finalTransform.mat.props);\r\n for(i=0;i<len;i+=1){\r\n type = this.stylesList[i].type;\r\n if((type === 'st' && this.stylesList[i].wi === 0) || !this.stylesList[i].data._render){\r\n continue;\r\n }\r\n renderer.save();\r\n elems = this.stylesList[i].elements;\r\n if(type === 'st'){\r\n ctx.strokeStyle = this.stylesList[i].co;\r\n ctx.lineWidth = this.stylesList[i].wi;\r\n ctx.lineCap = this.stylesList[i].lc;\r\n ctx.lineJoin = this.stylesList[i].lj;\r\n ctx.miterLimit = this.stylesList[i].ml || 0;\r\n }else{\r\n ctx.fillStyle = this.stylesList[i].co;\r\n }\r\n renderer.ctxOpacity(this.stylesList[i].coOp);\r\n if(type !== 'st'){\r\n ctx.beginPath();\r\n }\r\n jLen = elems.length;\r\n for(j=0;j<jLen;j+=1){\r\n if(type === 'st'){\r\n ctx.beginPath();\r\n if(this.stylesList[i].da){\r\n ctx.setLineDash(this.stylesList[i].da);\r\n ctx.lineDashOffset = this.stylesList[i].do;\r\n this.globalData.isDashed = true;\r\n }else if(this.globalData.isDashed){\r\n ctx.setLineDash(this.dashResetter);\r\n this.globalData.isDashed = false;\r\n }\r\n }\r\n nodes = elems[j].trNodes;\r\n kLen = nodes.length;\r\n\r\n for(k=0;k<kLen;k+=1){\r\n if(nodes[k].t == 'm'){\r\n ctx.moveTo(nodes[k].p[0],nodes[k].p[1]);\r\n }else if(nodes[k].t == 'c'){\r\n ctx.bezierCurveTo(nodes[k].p1[0],nodes[k].p1[1],nodes[k].p2[0],nodes[k].p2[1],nodes[k].p3[0],nodes[k].p3[1]);\r\n }else{\r\n ctx.closePath();\r\n }\r\n }\r\n if(type === 'st'){\r\n ctx.stroke();\r\n }\r\n }\r\n if(type !== 'st'){\r\n ctx.fill(this.stylesList[i].r);\r\n }\r\n renderer.restore();\r\n }\r\n renderer.restore();\r\n if(this.firstFrame){\r\n this.firstFrame = false;\r\n }\r\n};\r\nCVShapeElement.prototype.renderPath = function(pathData,itemData,groupTransform){\r\n var len, i, j,jLen;\r\n var redraw = groupTransform.matMdf || itemData.sh.mdf || this.firstFrame;\r\n if(redraw) {\r\n var paths = itemData.sh.paths, groupTransformMat = groupTransform.mat;\r\n jLen = paths._length;\r\n var pathStringTransformed = itemData.trNodes;\r\n pathStringTransformed.length = 0;\r\n for(j=0;j<jLen;j+=1){\r\n var pathNodes = paths.shapes[j];\r\n if(pathNodes && pathNodes.v){\r\n len = pathNodes._length;\r\n for (i = 1; i < len; i += 1) {\r\n if (i == 1) {\r\n pathStringTransformed.push({\r\n t: 'm',\r\n p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\r\n });\r\n }\r\n pathStringTransformed.push({\r\n t: 'c',\r\n p1: groupTransformMat.applyToPointArray(pathNodes.o[i - 1][0], pathNodes.o[i - 1][1], 0),\r\n p2: groupTransformMat.applyToPointArray(pathNodes.i[i][0], pathNodes.i[i][1], 0),\r\n p3: groupTransformMat.applyToPointArray(pathNodes.v[i][0], pathNodes.v[i][1], 0)\r\n });\r\n }\r\n if (len == 1) {\r\n pathStringTransformed.push({\r\n t: 'm',\r\n p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\r\n });\r\n }\r\n if (pathNodes.c && len) {\r\n pathStringTransformed.push({\r\n t: 'c',\r\n p1: groupTransformMat.applyToPointArray(pathNodes.o[i - 1][0], pathNodes.o[i - 1][1], 0),\r\n p2: groupTransformMat.applyToPointArray(pathNodes.i[0][0], pathNodes.i[0][1], 0),\r\n p3: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\r\n });\r\n pathStringTransformed.push({\r\n t: 'z'\r\n });\r\n }\r\n itemData.lStr = pathStringTransformed;\r\n }\r\n\r\n }\r\n\r\n if (itemData.st) {\r\n for (i = 0; i < 16; i += 1) {\r\n itemData.tr[i] = groupTransform.mat.props[i];\r\n }\r\n }\r\n itemData.trNodes = pathStringTransformed;\r\n\r\n }\r\n};\r\n\r\n\r\n\r\nCVShapeElement.prototype.renderFill = function(styleData,itemData, groupTransform){\r\n var styleElem = itemData.style;\r\n\r\n if(itemData.c.mdf || this.firstFrame){\r\n styleElem.co = 'rgb('+bm_floor(itemData.c.v[0])+','+bm_floor(itemData.c.v[1])+','+bm_floor(itemData.c.v[2])+')';\r\n }\r\n if(itemData.o.mdf || groupTransform.opMdf || this.firstFrame){\r\n styleElem.coOp = itemData.o.v*groupTransform.opacity;\r\n }\r\n};\r\n\r\nCVShapeElement.prototype.renderStroke = function(styleData,itemData, groupTransform){\r\n var styleElem = itemData.style;\r\n //TODO fix dashes\r\n var d = itemData.d;\r\n var dasharray,dashoffset;\r\n if(d && (d.mdf || this.firstFrame)){\r\n styleElem.da = d.dasharray;\r\n styleElem.do = d.dashoffset;\r\n }\r\n if(itemData.c.mdf || this.firstFrame){\r\n styleElem.co = 'rgb('+bm_floor(itemData.c.v[0])+','+bm_floor(itemData.c.v[1])+','+bm_floor(itemData.c.v[2])+')';\r\n }\r\n if(itemData.o.mdf || groupTransform.opMdf || this.firstFrame){\r\n styleElem.coOp = itemData.o.v*groupTransform.opacity;\r\n }\r\n if(itemData.w.mdf || this.firstFrame){\r\n styleElem.wi = itemData.w.v;\r\n }\r\n};\r\n\r\n\r\nCVShapeElement.prototype.destroy = function(){\r\n this.shapesData = null;\r\n this.globalData = null;\r\n this.canvasContext = null;\r\n this.stylesList.length = 0;\r\n this.itemData.length = 0;\r\n this._parent.destroy.call(this._parent);\r\n};\r\n\r\n\nfunction CVSolidElement(data, comp,globalData){\r\n this._parent.constructor.call(this,data, comp,globalData);\r\n}\r\ncreateElement(CVBaseElement, CVSolidElement);\r\n\r\nCVSolidElement.prototype.renderFrame = function(parentMatrix){\r\n if(this._parent.renderFrame.call(this, parentMatrix)===false){\r\n return;\r\n }\r\n var ctx = this.canvasContext;\r\n this.globalData.renderer.save();\r\n this.globalData.renderer.ctxTransform(this.finalTransform.mat.props);\r\n this.globalData.renderer.ctxOpacity(this.finalTransform.opacity);\r\n ctx.fillStyle=this.data.sc;\r\n ctx.fillRect(0,0,this.data.sw,this.data.sh);\r\n this.globalData.renderer.restore(this.data.hasMask);\r\n if(this.firstFrame){\r\n this.firstFrame = false;\r\n }\r\n};\nfunction CVTextElement(data, comp, globalData){\r\n this.textSpans = [];\r\n this.yOffset = 0;\r\n this.fillColorAnim = false;\r\n this.strokeColorAnim = false;\r\n this.strokeWidthAnim = false;\r\n this.stroke = false;\r\n this.fill = false;\r\n this.justifyOffset = 0;\r\n this.currentRender = null;\r\n this.renderType = 'canvas';\r\n this.values = {\r\n fill: 'rgba(0,0,0,0)',\r\n stroke: 'rgba(0,0,0,0)',\r\n sWidth: 0,\r\n fValue: ''\r\n }\r\n this._parent.constructor.call(this,data,comp, globalData);\r\n}\r\ncreateElement(CVBaseElement, CVTextElement);\r\n\r\nextendPrototype(ITextElement, CVTextElement);\r\n\r\nCVTextElement.prototype.tHelper = document.createElement('canvas').getContext('2d');\r\n\r\nCVTextElement.prototype.createElements = function(){\r\n\r\n this._parent.createElements.call(this);\r\n //console.log('this.data: ',this.data);\r\n\r\n};\r\n\r\nCVTextElement.prototype.buildNewText = function(){\r\n var documentData = this.textProperty.currentData;\r\n this.renderedLetters = Array.apply(null,{length:documentData.l ? documentData.l.length : 0});\r\n\r\n var hasFill = false;\r\n if(documentData.fc) {\r\n hasFill = true;\r\n this.values.fill = this.buildColor(documentData.fc);\r\n }else{\r\n this.values.fill = 'rgba(0,0,0,0)';\r\n }\r\n this.fill = hasFill;\r\n var hasStroke = false;\r\n if(documentData.sc){\r\n hasStroke = true;\r\n this.values.stroke = this.buildColor(documentData.sc);\r\n this.values.sWidth = documentData.sw;\r\n }\r\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\r\n var i, len;\r\n var letters = documentData.l;\r\n var matrixHelper = this.mHelper;\r\n this.stroke = hasStroke;\r\n this.values.fValue = documentData.s + 'px '+ this.globalData.fontManager.getFontByName(documentData.f).fFamily;\r\n len = documentData.t.length;\r\n //this.tHelper.font = this.values.fValue;\r\n var charData, shapeData, k, kLen, shapes, j, jLen, pathNodes, commands, pathArr, singleShape = this.data.singleShape;\r\n var trackingOffset = documentData.tr/1000*documentData.s;\r\n var xPos = 0, yPos = 0, firstLine = true;\r\n var cnt = 0;\r\n for (i = 0; i < len; i += 1) {\r\n charData = this.globalData.fontManager.getCharData(documentData.t.charAt(i), fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\r\n shapeData = charData && charData.data || {};\r\n matrixHelper.reset();\r\n if(singleShape && letters[i].n) {\r\n xPos = -trackingOffset;\r\n yPos += documentData.yOffset;\r\n yPos += firstLine ? 1 : 0;\r\n firstLine = false;\r\n }\r\n\r\n shapes = shapeData.shapes ? shapeData.shapes[0].it : [];\r\n jLen = shapes.length;\r\n matrixHelper.scale(documentData.s/100,documentData.s/100);\r\n if(singleShape){\r\n this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\r\n }\r\n commands = Array.apply(null,{length:jLen})\r\n for(j=0;j<jLen;j+=1){\r\n kLen = shapes[j].ks.k.i.length;\r\n pathNodes = shapes[j].ks.k;\r\n pathArr = [];\r\n for(k=1;k<kLen;k+=1){\r\n if(k==1){\r\n pathArr.push(matrixHelper.applyToX(pathNodes.v[0][0],pathNodes.v[0][1],0),matrixHelper.applyToY(pathNodes.v[0][0],pathNodes.v[0][1],0));\r\n }\r\n pathArr.push(matrixHelper.applyToX(pathNodes.o[k-1][0],pathNodes.o[k-1][1],0),matrixHelper.applyToY(pathNodes.o[k-1][0],pathNodes.o[k-1][1],0),matrixHelper.applyToX(pathNodes.i[k][0],pathNodes.i[k][1],0),matrixHelper.applyToY(pathNodes.i[k][0],pathNodes.i[k][1],0),matrixHelper.applyToX(pathNodes.v[k][0],pathNodes.v[k][1],0),matrixHelper.applyToY(pathNodes.v[k][0],pathNodes.v[k][1],0));\r\n }\r\n pathArr.push(matrixHelper.applyToX(pathNodes.o[k-1][0],pathNodes.o[k-1][1],0),matrixHelper.applyToY(pathNodes.o[k-1][0],pathNodes.o[k-1][1],0),matrixHelper.applyToX(pathNodes.i[0][0],pathNodes.i[0][1],0),matrixHelper.applyToY(pathNodes.i[0][0],pathNodes.i[0][1],0),matrixHelper.applyToX(pathNodes.v[0][0],pathNodes.v[0][1],0),matrixHelper.applyToY(pathNodes.v[0][0],pathNodes.v[0][1],0));\r\n commands[j] = pathArr;\r\n }\r\n if(singleShape){\r\n xPos += letters[i].l;\r\n xPos += trackingOffset;\r\n }\r\n if(this.textSpans[cnt]){\r\n this.textSpans[cnt].elem = commands;\r\n } else {\r\n this.textSpans[cnt] = {elem: commands};\r\n }\r\n cnt +=1;\r\n }\r\n}\r\n\r\nCVTextElement.prototype.renderFrame = function(parentMatrix){\r\n if(this._parent.renderFrame.call(this, parentMatrix)===false){\r\n return;\r\n }\r\n var ctx = this.canvasContext;\r\n var finalMat = this.finalTransform.mat.props;\r\n this.globalData.renderer.save();\r\n this.globalData.renderer.ctxTransform(finalMat);\r\n this.globalData.renderer.ctxOpacity(this.finalTransform.opacity);\r\n ctx.font = this.values.fValue;\r\n ctx.lineCap = 'butt';\r\n ctx.lineJoin = 'miter';\r\n ctx.miterLimit = 4;\r\n\r\n if(!this.data.singleShape){\r\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\r\n }\r\n\r\n var i,len, j, jLen, k, kLen;\r\n var renderedLetters = this.textAnimator.renderedLetters;\r\n\r\n var letters = this.textProperty.currentData.l;\r\n\r\n len = letters.length;\r\n var renderedLetter;\r\n var lastFill = null, lastStroke = null, lastStrokeW = null, commands, pathArr;\r\n for(i=0;i<len;i+=1){\r\n if(letters[i].n){\r\n continue;\r\n }\r\n renderedLetter = renderedLetters[i];\r\n if(renderedLetter){\r\n this.globalData.renderer.save();\r\n this.globalData.renderer.ctxTransform(renderedLetter.p);\r\n this.globalData.renderer.ctxOpacity(renderedLetter.o);\r\n }\r\n if(this.fill){\r\n if(renderedLetter && renderedLetter.fc){\r\n if(lastFill !== renderedLetter.fc){\r\n lastFill = renderedLetter.fc;\r\n ctx.fillStyle = renderedLetter.fc;\r\n }\r\n }else if(lastFill !== this.values.fill){\r\n lastFill = this.values.fill;\r\n ctx.fillStyle = this.values.fill;\r\n }\r\n commands = this.textSpans[i].elem;\r\n jLen = commands.length;\r\n this.globalData.canvasContext.beginPath();\r\n for(j=0;j<jLen;j+=1) {\r\n pathArr = commands[j];\r\n kLen = pathArr.length;\r\n this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\r\n for (k = 2; k < kLen; k += 6) {\r\n this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\r\n }\r\n }\r\n this.globalData.canvasContext.closePath();\r\n this.globalData.canvasContext.fill();\r\n ///ctx.fillText(this.textSpans[i].val,0,0);\r\n }\r\n if(this.stroke){\r\n if(renderedLetter && renderedLetter.sw){\r\n if(lastStrokeW !== renderedLetter.sw){\r\n lastStrokeW = renderedLetter.sw;\r\n ctx.lineWidth = renderedLetter.sw;\r\n }\r\n }else if(lastStrokeW !== this.values.sWidth){\r\n lastStrokeW = this.values.sWidth;\r\n ctx.lineWidth = this.values.sWidth;\r\n }\r\n if(renderedLetter && renderedLetter.sc){\r\n if(lastStroke !== renderedLetter.sc){\r\n lastStroke = renderedLetter.sc;\r\n ctx.strokeStyle = renderedLetter.sc;\r\n }\r\n }else if(lastStroke !== this.values.stroke){\r\n lastStroke = this.values.stroke;\r\n ctx.strokeStyle = this.values.stroke;\r\n }\r\n commands = this.textSpans[i].elem;\r\n jLen = commands.length;\r\n this.globalData.canvasContext.beginPath();\r\n for(j=0;j<jLen;j+=1) {\r\n pathArr = commands[j];\r\n kLen = pathArr.length;\r\n this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\r\n for (k = 2; k < kLen; k += 6) {\r\n this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\r\n }\r\n }\r\n this.globalData.canvasContext.closePath();\r\n this.globalData.canvasContext.stroke();\r\n ///ctx.strokeText(letters[i].val,0,0);\r\n }\r\n if(renderedLetter) {\r\n this.globalData.renderer.restore();\r\n }\r\n }\r\n /*if(this.data.hasMask){\r\n this.globalData.renderer.restore(true);\r\n }*/\r\n this.globalData.renderer.restore(this.data.hasMask);\r\n if(this.firstFrame){\r\n this.firstFrame = false;\r\n }\r\n};\nfunction HBaseElement(data,parentContainer,globalData,comp, placeholder){\r\n this.globalData = globalData;\r\n this.comp = comp;\r\n this.data = data;\r\n this.matteElement = null;\r\n this.parentContainer = parentContainer;\r\n this.layerId = placeholder ? placeholder.layerId : 'ly_'+randomString(10);\r\n this.placeholder = placeholder;\r\n this.init();\r\n};\r\n\r\ncreateElement(BaseElement, HBaseElement);\r\nHBaseElement.prototype.checkBlendMode = function(){\r\n\r\n};\r\nHBaseElement.prototype.setBlendMode = BaseElement.prototype.setBlendMode;\r\n\r\n/*HBaseElement.prototype.appendNodeToParent = function(node) {\r\n if(this.data.hd){\r\n return;\r\n }\r\n if(this.placeholder){\r\n var g = this.placeholder.phElement;\r\n g.parentNode.insertBefore(node, g);\r\n //g.parentNode.removeChild(g);\r\n }else{\r\n this.parentContainer.appendChild(node);\r\n }\r\n};*/\r\n\r\n\r\nHBaseElement.prototype.getBaseElement = function(){\r\n return this.baseElement;\r\n};\r\n\r\nHBaseElement.prototype.createElements = function(){\r\n if(this.data.hasMask){\r\n this.layerElement = document.createElementNS(svgNS,'svg');\r\n styleDiv(this.layerElement);\r\n //this.appendNodeToParent(this.layerElement);\r\n this.baseElement = this.layerElement;\r\n this.maskedElement = this.layerElement;\r\n }else{\r\n this.layerElement = this.parentContainer;\r\n }\r\n this.transformedElement = this.layerElement;\r\n if(this.data.ln && (this.data.ty === 4 || this.data.ty === 0)){\r\n if(this.layerElement === this.parentContainer){\r\n this.layerElement = document.createElementNS(svgNS,'g');\r\n //this.appendNodeToParent(this.layerElement);\r\n this.baseElement = this.layerElement;\r\n }\r\n this.layerElement.setAttribute('id',this.data.ln);\r\n }\r\n this.setBlendMode();\r\n if(this.layerElement !== this.parentContainer){\r\n this.placeholder = null;\r\n }\r\n this.checkParenting();\r\n};\r\n\r\nHBaseElement.prototype.renderFrame = function(parentTransform){\r\n if(this.data.ty === 3){\r\n return false;\r\n }\r\n\r\n if(this.currentFrameNum === this.lastNum || !this.isVisible){\r\n return this.isVisible;\r\n }\r\n this.lastNum = this.currentFrameNum;\r\n\r\n this.finalTransform.opMdf = this.finalTransform.op.mdf;\r\n this.finalTransform.matMdf = this.finalTransform.mProp.mdf;\r\n this.finalTransform.opacity = this.finalTransform.op.v;\r\n if(this.firstFrame){\r\n this.finalTransform.opMdf = true;\r\n this.finalTransform.matMdf = true;\r\n }\r\n\r\n var mat;\r\n var finalMat = this.finalTransform.mat;\r\n\r\n if(this.hierarchy){\r\n var i, len = this.hierarchy.length;\r\n\r\n mat = this.finalTransform.mProp.v.props;\r\n finalMat.cloneFromProps(mat);\r\n for(i=0;i<len;i+=1){\r\n this.finalTransform.matMdf = this.hierarchy[i].finalTransform.mProp.mdf ? true : this.finalTransform.matMdf;\r\n mat = this.hierarchy[i].finalTransform.mProp.v.props;\r\n finalMat.transform(mat[0],mat[1],mat[2],mat[3],mat[4],mat[5],mat[6],mat[7],mat[8],mat[9],mat[10],mat[11],mat[12],mat[13],mat[14],mat[15]);\r\n }\r\n }else{\r\n if(this.isVisible && this.finalTransform.matMdf){\r\n if(!parentTransform){\r\n finalMat.cloneFromProps(this.finalTransform.mProp.v.props);\r\n }else{\r\n mat = this.finalTransform.mProp.v.props;\r\n finalMat.cloneFromProps(mat);\r\n }\r\n }\r\n }\r\n if(this.data.hasMask){\r\n this.maskManager.renderFrame(finalMat);\r\n }\r\n\r\n if(parentTransform){\r\n mat = parentTransform.mat.props;\r\n finalMat.cloneFromProps(mat);\r\n this.finalTransform.opacity *= parentTransform.opacity;\r\n this.finalTransform.opMdf = parentTransform.opMdf ? true : this.finalTransform.opMdf;\r\n this.finalTransform.matMdf = parentTransform.matMdf ? true : this.finalTransform.matMdf\r\n }\r\n\r\n if(this.finalTransform.matMdf){\r\n this.transformedElement.style.transform = this.transformedElement.style.webkitTransform = finalMat.toCSS();\r\n this.finalMat = finalMat;\r\n }\r\n if(this.finalTransform.opMdf){\r\n this.transformedElement.style.opacity = this.finalTransform.opacity;\r\n }\r\n return this.isVisible;\r\n};\r\n\r\nHBaseElement.prototype.destroy = function(){\r\n this.layerElement = null;\r\n this.transformedElement = null;\r\n this.parentContainer = null;\r\n if(this.matteElement) {\r\n this.matteElement = null;\r\n }\r\n if(this.maskManager) {\r\n this.maskManager.destroy();\r\n this.maskManager = null;\r\n }\r\n};\r\n\r\nHBaseElement.prototype.getDomElement = function(){\r\n return this.layerElement;\r\n};\r\nHBaseElement.prototype.addMasks = function(data){\r\n this.maskManager = new MaskElement(data,this,this.globalData);\r\n};\r\n\r\nHBaseElement.prototype.hide = function(){\r\n};\r\n\r\nHBaseElement.prototype.setMatte = function(){\r\n\r\n}\r\n\r\nHBaseElement.prototype.buildElementParenting = HybridRenderer.prototype.buildElementParenting;\nfunction HSolidElement(data,parentContainer,globalData,comp, placeholder){\r\n this._parent.constructor.call(this,data,parentContainer,globalData,comp, placeholder);\r\n}\r\ncreateElement(HBaseElement, HSolidElement);\r\n\r\nHSolidElement.prototype.createElements = function(){\r\n var parent = document.createElement('div');\r\n styleDiv(parent);\r\n var cont = document.createElementNS(svgNS,'svg');\r\n styleDiv(cont);\r\n cont.setAttribute('width',this.data.sw);\r\n cont.setAttribute('height',this.data.sh);\r\n parent.appendChild(cont);\r\n this.layerElement = parent;\r\n this.transformedElement = parent;\r\n //this.appendNodeToParent(parent);\r\n this.baseElement = parent;\r\n this.innerElem = parent;\r\n if(this.data.ln){\r\n this.innerElem.setAttribute('id',this.data.ln);\r\n }\r\n if(this.data.bm !== 0){\r\n this.setBlendMode();\r\n }\r\n var rect = document.createElementNS(svgNS,'rect');\r\n rect.setAttribute('width',this.data.sw);\r\n rect.setAttribute('height',this.data.sh);\r\n rect.setAttribute('fill',this.data.sc);\r\n cont.appendChild(rect);\r\n if(this.data.hasMask){\r\n this.maskedElement = rect;\r\n }\r\n this.checkParenting();\r\n};\r\n\r\n\r\n\r\nHSolidElement.prototype.hide = SVGBaseElement.prototype.hide;\r\nHSolidElement.prototype.show = SVGBaseElement.prototype.show;\r\nHSolidElement.prototype.renderFrame = IImageElement.prototype.renderFrame;\r\nHSolidElement.prototype.destroy = IImageElement.prototype.destroy;\nfunction HCompElement(data,parentContainer,globalData,comp, placeholder){\r\n this._parent.constructor.call(this,data,parentContainer,globalData,comp, placeholder);\r\n this.layers = data.layers;\r\n this.supports3d = true;\r\n this.completeLayers = false;\r\n this.pendingElements = [];\r\n this.elements = Array.apply(null,{length:this.layers.length});\r\n if(this.data.tm){\r\n this.tm = PropertyFactory.getProp(this,this.data.tm,0,globalData.frameRate,this.dynamicProperties);\r\n }\r\n if(this.data.hasMask) {\r\n this.supports3d = false;\r\n }\r\n if(this.data.xt){\r\n this.layerElement = document.createElement('div');\r\n }\r\n this.buildAllItems();\r\n\r\n}\r\ncreateElement(HBaseElement, HCompElement);\r\n\r\nHCompElement.prototype.createElements = function(){\r\n var divElement = document.createElement('div');\r\n styleDiv(divElement);\r\n if(this.data.ln){\r\n divElement.setAttribute('id',this.data.ln);\r\n }\r\n divElement.style.clip = 'rect(0px, '+this.data.w+'px, '+this.data.h+'px, 0px)';\r\n if(this.data.hasMask){\r\n var compSvg = document.createElementNS(svgNS,'svg');\r\n styleDiv(compSvg);\r\n compSvg.setAttribute('width',this.data.w);\r\n compSvg.setAttribute('height',this.data.h);\r\n var g = document.createElementNS(svgNS,'g');\r\n compSvg.appendChild(g);\r\n divElement.appendChild(compSvg);\r\n this.maskedElement = g;\r\n this.baseElement = divElement;\r\n this.layerElement = g;\r\n this.transformedElement = divElement;\r\n }else{\r\n this.layerElement = divElement;\r\n this.baseElement = this.layerElement;\r\n this.transformedElement = divElement;\r\n }\r\n //this.appendNodeToParent(this.layerElement);\r\n this.checkParenting();\r\n};\r\n\r\nHCompElement.prototype.hide = ICompElement.prototype.hide;\r\nHCompElement.prototype.prepareFrame = ICompElement.prototype.prepareFrame;\r\nHCompElement.prototype.setElements = ICompElement.prototype.setElements;\r\nHCompElement.prototype.getElements = ICompElement.prototype.getElements;\r\nHCompElement.prototype.destroy = ICompElement.prototype.destroy;\r\n\r\nHCompElement.prototype.renderFrame = function(parentMatrix){\r\n var renderParent = this._parent.renderFrame.call(this,parentMatrix);\r\n var i,len = this.layers.length;\r\n if(renderParent===false){\r\n this.hide();\r\n return;\r\n }\r\n\r\n this.hidden = false;\r\n\r\n for( i = 0; i < len; i+=1 ){\r\n if(this.completeLayers || this.elements[i]){\r\n this.elements[i].renderFrame();\r\n }\r\n }\r\n if(this.firstFrame){\r\n this.firstFrame = false;\r\n }\r\n};\r\n\r\nHCompElement.prototype.checkLayers = BaseRenderer.prototype.checkLayers;\r\nHCompElement.prototype.buildItem = HybridRenderer.prototype.buildItem;\r\nHCompElement.prototype.checkPendingElements = HybridRenderer.prototype.checkPendingElements;\r\nHCompElement.prototype.addPendingElement = HybridRenderer.prototype.addPendingElement;\r\nHCompElement.prototype.buildAllItems = BaseRenderer.prototype.buildAllItems;\r\nHCompElement.prototype.createItem = HybridRenderer.prototype.createItem;\r\nHCompElement.prototype.buildElementParenting = HybridRenderer.prototype.buildElementParenting;\r\nHCompElement.prototype.createImage = HybridRenderer.prototype.createImage;\r\nHCompElement.prototype.createComp = HybridRenderer.prototype.createComp;\r\nHCompElement.prototype.createSolid = HybridRenderer.prototype.createSolid;\r\nHCompElement.prototype.createShape = HybridRenderer.prototype.createShape;\r\nHCompElement.prototype.createText = HybridRenderer.prototype.createText;\r\nHCompElement.prototype.createBase = HybridRenderer.prototype.createBase;\r\nHCompElement.prototype.appendElementInPos = HybridRenderer.prototype.appendElementInPos;\nfunction HShapeElement(data,parentContainer,globalData,comp, placeholder){\r\n this.shapes = [];\r\n this.shapesData = data.shapes;\r\n this.stylesList = [];\r\n this.itemsData = [];\r\n this.prevViewData = [];\r\n this.shapeModifiers = [];\r\n this.processedElements = [];\r\n this._parent.constructor.call(this,data,parentContainer,globalData,comp, placeholder);\r\n this.currentBBox = {\r\n x:999999,\r\n y: -999999,\r\n h: 0,\r\n w: 0\r\n };\r\n}\r\ncreateElement(HBaseElement, HShapeElement);\r\nvar parent = HShapeElement.prototype._parent;\r\nextendPrototype(IShapeElement, HShapeElement);\r\nHShapeElement.prototype._parent = parent;\r\nHShapeElement.prototype._renderShapeFrame = HShapeElement.prototype.renderFrame;\r\n\r\nHShapeElement.prototype.createElements = function(){\r\n var parent = document.createElement('div');\r\n styleDiv(parent);\r\n var cont = document.createElementNS(svgNS,'svg');\r\n styleDiv(cont);\r\n var size = this.comp.data ? this.comp.data : this.globalData.compSize;\r\n cont.setAttribute('width',size.w);\r\n cont.setAttribute('height',size.h);\r\n if(this.data.hasMask){\r\n var g = document.createElementNS(svgNS,'g');\r\n parent.appendChild(cont);\r\n cont.appendChild(g);\r\n this.maskedElement = g;\r\n this.layerElement = g;\r\n this.shapesContainer = g;\r\n }else{\r\n parent.appendChild(cont);\r\n this.layerElement = cont;\r\n this.shapesContainer = document.createElementNS(svgNS,'g');\r\n this.layerElement.appendChild(this.shapesContainer);\r\n }\r\n if(!this.data.hd){\r\n //this.parentContainer.appendChild(parent);\r\n this.baseElement = parent;\r\n }\r\n this.innerElem = parent;\r\n if(this.data.ln){\r\n this.innerElem.setAttribute('id',this.data.ln);\r\n }\r\n\r\n this.searchShapes(this.shapesData,this.itemsData,this.prevViewData,this.layerElement,this.dynamicProperties,0, [], true);\r\n this.buildExpressionInterface();\r\n this.layerElement = parent;\r\n this.transformedElement = parent;\r\n this.shapeCont = cont;\r\n if(this.data.bm !== 0){\r\n this.setBlendMode();\r\n }\r\n this.checkParenting();\r\n};\r\n\r\nHShapeElement.prototype.renderFrame = function(parentMatrix){\r\n var firstFrame = this.firstFrame;\r\n this._renderShapeFrame();\r\n\r\n if(this.isVisible && (this.elemMdf || firstFrame)){\r\n var boundingBox = this.shapeCont.getBBox();\r\n var changed = false;\r\n if(this.currentBBox.w !== boundingBox.width){\r\n this.currentBBox.w = boundingBox.width;\r\n this.shapeCont.setAttribute('width',boundingBox.width);\r\n changed = true;\r\n }\r\n if(this.currentBBox.h !== boundingBox.height){\r\n this.currentBBox.h = boundingBox.height;\r\n this.shapeCont.setAttribute('height',boundingBox.height);\r\n changed = true;\r\n }\r\n if(changed || this.currentBBox.x !== boundingBox.x || this.currentBBox.y !== boundingBox.y){\r\n this.currentBBox.w = boundingBox.width;\r\n this.currentBBox.h = boundingBox.height;\r\n this.currentBBox.x = boundingBox.x;\r\n this.currentBBox.y = boundingBox.y;\r\n\r\n this.shapeCont.setAttribute('viewBox',this.currentBBox.x+' '+this.currentBBox.y+' '+this.currentBBox.w+' '+this.currentBBox.h);\r\n this.shapeCont.style.transform = this.shapeCont.style.webkitTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\r\n }\r\n }\r\n\r\n};\nfunction HTextElement(data,parentContainer,globalData,comp, placeholder){\r\n this.textSpans = [];\r\n this.textPaths = [];\r\n this.currentBBox = {\r\n x:999999,\r\n y: -999999,\r\n h: 0,\r\n w: 0\r\n }\r\n this.renderType = 'svg';\r\n this.isMasked = false;\r\n this._parent.constructor.call(this,data,parentContainer,globalData,comp, placeholder);\r\n\r\n}\r\ncreateElement(HBaseElement, HTextElement);\r\n\r\nextendPrototype(ITextElement, HTextElement);\r\n\r\nHTextElement.prototype.createElements = function(){\r\n this.isMasked = this.checkMasks();\r\n var parent = document.createElement('div');\r\n styleDiv(parent);\r\n this.layerElement = parent;\r\n this.transformedElement = parent;\r\n if(this.isMasked){\r\n this.renderType = 'svg';\r\n var cont = document.createElementNS(svgNS,'svg');\r\n styleDiv(cont);\r\n this.cont = cont;\r\n this.compW = this.comp.data.w;\r\n this.compH = this.comp.data.h;\r\n cont.setAttribute('width',this.compW);\r\n cont.setAttribute('height',this.compH);\r\n var g = document.createElementNS(svgNS,'g');\r\n cont.appendChild(g);\r\n parent.appendChild(cont);\r\n this.maskedElement = g;\r\n this.innerElem = g;\r\n } else {\r\n this.renderType = 'html';\r\n this.innerElem = parent;\r\n }\r\n this.baseElement = parent;\r\n\r\n this.checkParenting();\r\n\r\n};\r\n\r\nHTextElement.prototype.buildNewText = function(){\r\n var documentData = this.textProperty.currentData;\r\n this.renderedLetters = Array.apply(null,{length:this.textProperty.currentData.l ? this.textProperty.currentData.l.length : 0});\r\n var innerElemStyle = this.innerElem.style;\r\n innerElemStyle.color = innerElemStyle.fill = documentData.fc ? this.buildColor(documentData.fc) : 'rgba(0,0,0,0)';\r\n if(documentData.sc){\r\n innerElemStyle.stroke = this.buildColor(documentData.sc);\r\n innerElemStyle.strokeWidth = documentData.sw+'px';\r\n }\r\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\r\n if(!this.globalData.fontManager.chars){\r\n innerElemStyle.fontSize = documentData.s+'px';\r\n innerElemStyle.lineHeight = documentData.s+'px';\r\n if(fontData.fClass){\r\n this.innerElem.className = fontData.fClass;\r\n } else {\r\n innerElemStyle.fontFamily = fontData.fFamily;\r\n var fWeight = documentData.fWeight, fStyle = documentData.fStyle;\r\n innerElemStyle.fontStyle = fStyle;\r\n innerElemStyle.fontWeight = fWeight;\r\n }\r\n }\r\n var i, len;\r\n\r\n var letters = documentData.l;\r\n len = letters.length;\r\n var tSpan,tParent,tCont;\r\n var matrixHelper = this.mHelper;\r\n var shapes, shapeStr = '';\r\n var cnt = 0;\r\n for (i = 0;i < len ;i += 1) {\r\n if(this.globalData.fontManager.chars){\r\n if(!this.textPaths[cnt]){\r\n tSpan = document.createElementNS(svgNS,'path');\r\n tSpan.setAttribute('stroke-linecap', 'butt');\r\n tSpan.setAttribute('stroke-linejoin','round');\r\n tSpan.setAttribute('stroke-miterlimit','4');\r\n } else {\r\n tSpan = this.textPaths[cnt];\r\n }\r\n if(!this.isMasked){\r\n if(this.textSpans[cnt]){\r\n tParent = this.textSpans[cnt];\r\n tCont = tParent.children[0];\r\n } else {\r\n\r\n tParent = document.createElement('div');\r\n tCont = document.createElementNS(svgNS,'svg');\r\n tCont.appendChild(tSpan);\r\n styleDiv(tParent);\r\n }\r\n }\r\n }else{\r\n if(!this.isMasked){\r\n if(this.textSpans[cnt]){\r\n tParent = this.textSpans[cnt];\r\n tSpan = this.textPaths[cnt];\r\n } else {\r\n tParent = document.createElement('span');\r\n styleDiv(tParent);\r\n tSpan = document.createElement('span');\r\n styleDiv(tSpan);\r\n tParent.appendChild(tSpan);\r\n }\r\n } else {\r\n tSpan = this.textPaths[cnt] ? this.textPaths[cnt] : document.createElementNS(svgNS,'text');\r\n }\r\n }\r\n //tSpan.setAttribute('visibility', 'hidden');\r\n if(this.globalData.fontManager.chars){\r\n var charData = this.globalData.fontManager.getCharData(documentData.t.charAt(i), fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\r\n var shapeData;\r\n if(charData){\r\n shapeData = charData.data;\r\n } else {\r\n shapeData = null;\r\n }\r\n matrixHelper.reset();\r\n if(shapeData && shapeData.shapes){\r\n shapes = shapeData.shapes[0].it;\r\n matrixHelper.scale(documentData.s/100,documentData.s/100);\r\n shapeStr = this.createPathShape(matrixHelper,shapes);\r\n tSpan.setAttribute('d',shapeStr);\r\n }\r\n if(!this.isMasked){\r\n this.innerElem.appendChild(tParent);\r\n if(shapeData && shapeData.shapes){\r\n document.body.appendChild(tCont);\r\n\r\n var boundingBox = tCont.getBBox();\r\n tCont.setAttribute('width',boundingBox.width + 2);\r\n tCont.setAttribute('height',boundingBox.height + 2);\r\n tCont.setAttribute('viewBox',(boundingBox.x-1)+' '+ (boundingBox.y-1)+' '+ (boundingBox.width+2)+' '+ (boundingBox.height+2));\r\n tCont.style.transform = tCont.style.webkitTransform = 'translate(' + (boundingBox.x-1) + 'px,' + (boundingBox.y-1) + 'px)';\r\n\r\n letters[i].yOffset = boundingBox.y-1;\r\n tParent.appendChild(tCont);\r\n\r\n } else{\r\n tCont.setAttribute('width',1);\r\n tCont.setAttribute('height',1);\r\n }\r\n }else{\r\n this.innerElem.appendChild(tSpan);\r\n }\r\n }else{\r\n tSpan.textContent = letters[i].val;\r\n tSpan.setAttributeNS(\"http://www.w3.org/XML/1998/namespace\", \"xml:space\",\"preserve\");\r\n if(!this.isMasked){\r\n this.innerElem.appendChild(tParent);\r\n //\r\n tSpan.style.transform = tSpan.style.webkitTransform = 'translate3d(0,'+ -documentData.s/1.2+'px,0)';\r\n } else {\r\n this.innerElem.appendChild(tSpan);\r\n }\r\n }\r\n //\r\n if(!this.isMasked){\r\n this.textSpans[cnt] = tParent;\r\n }else{\r\n this.textSpans[cnt] = tSpan;\r\n }\r\n this.textSpans[cnt].style.display = 'block';\r\n this.textPaths[cnt] = tSpan;\r\n cnt += 1;\r\n }\r\n while(cnt < this.textSpans.length){\r\n this.textSpans[cnt].style.display = 'none';\r\n cnt += 1;\r\n }\r\n}\r\n\r\nHTextElement.prototype.hide = SVGTextElement.prototype.hide;\r\n\r\nHTextElement.prototype.renderFrame = function(parentMatrix){\r\n\r\n var renderParent = this._parent.renderFrame.call(this,parentMatrix);\r\n if(renderParent===false){\r\n this.hide();\r\n return;\r\n }\r\n if(this.hidden){\r\n this.hidden = false;\r\n this.innerElem.style.display = 'block';\r\n this.layerElement.style.display = 'block';\r\n }\r\n\r\n if(this.data.singleShape){\r\n if(!this.firstFrame && !this.lettersChangedFlag){\r\n return;\r\n } else {\r\n // Todo Benchmark if using this is better than getBBox\r\n if(this.isMasked && this.finalTransform.matMdf){\r\n this.cont.setAttribute('viewBox',-this.finalTransform.mProp.p.v[0]+' '+ -this.finalTransform.mProp.p.v[1]+' '+this.compW+' '+this.compH);\r\n this.cont.style.transform = this.cont.style.webkitTransform = 'translate(' + -this.finalTransform.mProp.p.v[0] + 'px,' + -this.finalTransform.mProp.p.v[1] + 'px)';\r\n }\r\n }\r\n }\r\n\r\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\r\n if(!this.lettersChangedFlag && !this.textAnimator.lettersChangedFlag){\r\n return;\r\n }\r\n var i,len, count = 0;\r\n var renderedLetters = this.textAnimator.renderedLetters;\r\n\r\n var letters = this.textProperty.currentData.l;\r\n\r\n len = letters.length;\r\n var renderedLetter, textSpan, textPath;\r\n for(i=0;i<len;i+=1){\r\n if(letters[i].n){\r\n count += 1;\r\n continue;\r\n }\r\n textSpan = this.textSpans[i];\r\n textPath = this.textPaths[i];\r\n renderedLetter = renderedLetters[count];\r\n count += 1;\r\n if(!this.isMasked){\r\n textSpan.style.transform = textSpan.style.webkitTransform = renderedLetter.m;\r\n }else{\r\n textSpan.setAttribute('transform',renderedLetter.m);\r\n }\r\n ////textSpan.setAttribute('opacity',renderedLetter.o);\r\n textSpan.style.opacity = renderedLetter.o;\r\n if(renderedLetter.sw){\r\n textPath.setAttribute('stroke-width',renderedLetter.sw);\r\n }\r\n if(renderedLetter.sc){\r\n textPath.setAttribute('stroke',renderedLetter.sc);\r\n }\r\n if(renderedLetter.fc){\r\n textPath.setAttribute('fill',renderedLetter.fc);\r\n textPath.style.color = renderedLetter.fc;\r\n }\r\n }\r\n if(this.isVisible && (this.elemMdf || this.firstFrame)){\r\n if(this.innerElem.getBBox){\r\n var boundingBox = this.innerElem.getBBox();\r\n\r\n if(this.currentBBox.w !== boundingBox.width){\r\n this.currentBBox.w = boundingBox.width;\r\n this.cont.setAttribute('width',boundingBox.width);\r\n }\r\n if(this.currentBBox.h !== boundingBox.height){\r\n this.currentBBox.h = boundingBox.height;\r\n this.cont.setAttribute('height',boundingBox.height);\r\n }\r\n\r\n var margin = 1;\r\n if(this.currentBBox.w !== (boundingBox.width + margin*2) || this.currentBBox.h !== (boundingBox.height + margin*2) || this.currentBBox.x !== (boundingBox.x - margin) || this.currentBBox.y !== (boundingBox.y - margin)){\r\n this.currentBBox.w = boundingBox.width + margin*2;\r\n this.currentBBox.h = boundingBox.height + margin*2;\r\n this.currentBBox.x = boundingBox.x - margin;\r\n this.currentBBox.y = boundingBox.y - margin;\r\n\r\n this.cont.setAttribute('viewBox',this.currentBBox.x+' '+this.currentBBox.y+' '+this.currentBBox.w+' '+this.currentBBox.h);\r\n this.cont.style.transform = this.cont.style.webkitTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\r\n }\r\n }\r\n }\r\n if(this.firstFrame){\r\n this.firstFrame = false;\r\n }\r\n}\nfunction HImageElement(data,parentContainer,globalData,comp, placeholder){\r\n this.assetData = globalData.getAssetData(data.refId);\r\n this._parent.constructor.call(this,data,parentContainer,globalData,comp, placeholder);\r\n}\r\ncreateElement(HBaseElement, HImageElement);\r\n\r\nHImageElement.prototype.createElements = function(){\r\n\r\n var assetPath = this.globalData.getAssetsPath(this.assetData);\r\n var img = new Image();\r\n\r\n if(this.data.hasMask){\r\n var parent = document.createElement('div');\r\n styleDiv(parent);\r\n var cont = document.createElementNS(svgNS,'svg');\r\n styleDiv(cont);\r\n cont.setAttribute('width',this.assetData.w);\r\n cont.setAttribute('height',this.assetData.h);\r\n parent.appendChild(cont);\r\n this.imageElem = document.createElementNS(svgNS,'image');\r\n this.imageElem.setAttribute('width',this.assetData.w+\"px\");\r\n this.imageElem.setAttribute('height',this.assetData.h+\"px\");\r\n this.imageElem.setAttributeNS('http://www.w3.org/1999/xlink','href',assetPath);\r\n cont.appendChild(this.imageElem);\r\n this.layerElement = parent;\r\n this.transformedElement = parent;\r\n this.baseElement = parent;\r\n this.innerElem = parent;\r\n this.maskedElement = this.imageElem;\r\n } else {\r\n styleDiv(img);\r\n this.layerElement = img;\r\n this.baseElement = img;\r\n this.innerElem = img;\r\n this.transformedElement = img;\r\n }\r\n img.src = assetPath;\r\n if(this.data.ln){\r\n this.innerElem.setAttribute('id',this.data.ln);\r\n }\r\n this.checkParenting();\r\n};\r\n\r\nHImageElement.prototype.show = HSolidElement.prototype.show;\r\nHImageElement.prototype.hide = HSolidElement.prototype.hide;\r\nHImageElement.prototype.renderFrame = HSolidElement.prototype.renderFrame;\r\nHImageElement.prototype.destroy = HSolidElement.prototype.destroy;\nfunction HCameraElement(data,parentContainer,globalData,comp, placeholder){\r\n this._parent.constructor.call(this,data,parentContainer,globalData,comp, placeholder);\r\n var getProp = PropertyFactory.getProp;\r\n this.pe = getProp(this,data.pe,0,0,this.dynamicProperties);\r\n if(data.ks.p.s){\r\n this.px = getProp(this,data.ks.p.x,1,0,this.dynamicProperties);\r\n this.py = getProp(this,data.ks.p.y,1,0,this.dynamicProperties);\r\n this.pz = getProp(this,data.ks.p.z,1,0,this.dynamicProperties);\r\n }else{\r\n this.p = getProp(this,data.ks.p,1,0,this.dynamicProperties);\r\n }\r\n if(data.ks.a){\r\n this.a = getProp(this,data.ks.a,1,0,this.dynamicProperties);\r\n }\r\n if(data.ks.or.k.length && data.ks.or.k[0].to){\r\n var i,len = data.ks.or.k.length;\r\n for(i=0;i<len;i+=1){\r\n data.ks.or.k[i].to = null;\r\n data.ks.or.k[i].ti = null;\r\n }\r\n }\r\n this.or = getProp(this,data.ks.or,1,degToRads,this.dynamicProperties);\r\n this.or.sh = true;\r\n this.rx = getProp(this,data.ks.rx,0,degToRads,this.dynamicProperties);\r\n this.ry = getProp(this,data.ks.ry,0,degToRads,this.dynamicProperties);\r\n this.rz = getProp(this,data.ks.rz,0,degToRads,this.dynamicProperties);\r\n this.mat = new Matrix();\r\n}\r\ncreateElement(HBaseElement, HCameraElement);\r\n\r\nHCameraElement.prototype.setup = function() {\r\n var i, len = this.comp.threeDElements.length, comp;\r\n for(i=0;i<len;i+=1){\r\n //[perspectiveElem,container]\r\n comp = this.comp.threeDElements[i];\r\n comp.perspectiveElem.style.perspective = comp.perspectiveElem.style.webkitPerspective = this.pe.v+'px';\r\n comp.container.style.transformOrigin = comp.container.style.mozTransformOrigin = comp.container.style.webkitTransformOrigin = \"0px 0px 0px\";\r\n comp.perspectiveElem.style.transform = comp.perspectiveElem.style.webkitTransform = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\r\n }\r\n};\r\n\r\nHCameraElement.prototype.createElements = function(){\r\n};\r\n\r\nHCameraElement.prototype.hide = function(){\r\n};\r\n\r\nHCameraElement.prototype.renderFrame = function(){\r\n var mdf = this.firstFrame;\r\n var i, len;\r\n if(this.hierarchy){\r\n len = this.hierarchy.length;\r\n for(i=0;i<len;i+=1){\r\n mdf = this.hierarchy[i].finalTransform.mProp.mdf ? true : mdf;\r\n }\r\n }\r\n if(mdf || (this.p && this.p.mdf) || (this.px && (this.px.mdf || this.py.mdf || this.pz.mdf)) || this.rx.mdf || this.ry.mdf || this.rz.mdf || this.or.mdf || (this.a && this.a.mdf)) {\r\n this.mat.reset();\r\n\r\n if(this.p){\r\n this.mat.translate(-this.p.v[0],-this.p.v[1],this.p.v[2]);\r\n }else{\r\n this.mat.translate(-this.px.v,-this.py.v,this.pz.v);\r\n }\r\n if(this.a){\r\n var diffVector = [this.p.v[0]-this.a.v[0],this.p.v[1]-this.a.v[1],this.p.v[2]-this.a.v[2]];\r\n var mag = Math.sqrt(Math.pow(diffVector[0],2)+Math.pow(diffVector[1],2)+Math.pow(diffVector[2],2));\r\n //var lookDir = getNormalizedPoint(getDiffVector(this.a.v,this.p.v));\r\n var lookDir = [diffVector[0]/mag,diffVector[1]/mag,diffVector[2]/mag];\r\n var lookLengthOnXZ = Math.sqrt( lookDir[2]*lookDir[2] + lookDir[0]*lookDir[0] );\r\n var m_rotationX = (Math.atan2( lookDir[1], lookLengthOnXZ ));\r\n var m_rotationY = (Math.atan2( lookDir[0], -lookDir[2]));\r\n this.mat.rotateY(m_rotationY).rotateX(-m_rotationX);\r\n\r\n }\r\n this.mat.rotateX(-this.rx.v).rotateY(-this.ry.v).rotateZ(this.rz.v);\r\n this.mat.rotateX(-this.or.v[0]).rotateY(-this.or.v[1]).rotateZ(this.or.v[2]);\r\n this.mat.translate(this.globalData.compSize.w/2,this.globalData.compSize.h/2,0);\r\n this.mat.translate(0,0,this.pe.v);\r\n if(this.hierarchy){\r\n var mat;\r\n len = this.hierarchy.length;\r\n for(i=0;i<len;i+=1){\r\n mat = this.hierarchy[i].finalTransform.mProp.iv.props;\r\n this.mat.transform(mat[0],mat[1],mat[2],mat[3],mat[4],mat[5],mat[6],mat[7],mat[8],mat[9],mat[10],mat[11],-mat[12],-mat[13],mat[14],mat[15]);\r\n }\r\n }\r\n len = this.comp.threeDElements.length;\r\n var comp;\r\n for(i=0;i<len;i+=1){\r\n comp = this.comp.threeDElements[i];\r\n comp.container.style.transform = comp.container.style.webkitTransform = this.mat.toCSS();\r\n }\r\n }\r\n this.firstFrame = false;\r\n};\r\n\r\nHCameraElement.prototype.destroy = function(){\r\n};\nvar Expressions = (function(){\r\n var ob = {};\r\n ob.initExpressions = initExpressions;\r\n\r\n\r\n function initExpressions(animation){\r\n animation.renderer.compInterface = CompExpressionInterface(animation.renderer);\r\n animation.renderer.globalData.projectInterface.registerComposition(animation.renderer);\r\n }\r\n return ob;\r\n}());\r\n\r\nexpressionsPlugin = Expressions;\r\n\n(function addPropertyDecorator() {\r\n\r\n function getStaticValueAtTime() {\r\n return this.pv;\r\n }\r\n\r\n function loopOut(type,duration,durationFlag){\r\n if(!this.k || !this.keyframes){\r\n return this.pv;\r\n }\r\n var currentFrame = this.comp.renderedFrame;\r\n var keyframes = this.keyframes;\r\n var lastKeyFrame = keyframes[keyframes.length - 1].t;\r\n if(currentFrame<=lastKeyFrame){\r\n return this.pv;\r\n }else{\r\n var cycleDuration, firstKeyFrame;\r\n if(!durationFlag){\r\n if(!duration || duration > keyframes.length - 1){\r\n duration = keyframes.length - 1;\r\n }\r\n firstKeyFrame = keyframes[keyframes.length - 1 - duration].t;\r\n cycleDuration = lastKeyFrame - firstKeyFrame;\r\n } else {\r\n if(!duration){\r\n cycleDuration = Math.max(0,lastKeyFrame - this.elem.data.ip);\r\n } else {\r\n cycleDuration = Math.abs(lastKeyFrame - elem.comp.globalData.frameRate*duration);\r\n }\r\n firstKeyFrame = lastKeyFrame - cycleDuration;\r\n }\r\n var offsetTime = this.offsetTime || 0;\r\n var i, len, ret;\r\n if(type.toLowerCase() === 'pingpong') {\r\n var iterations = Math.floor((currentFrame - firstKeyFrame)/cycleDuration);\r\n if(iterations % 2 !== 0){\r\n return this.getValueAtTime(((cycleDuration - (currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) - offsetTime) / this.comp.globalData.frameRate, 0);\r\n }\r\n } else if(type === 'offset'){\r\n var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\r\n var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\r\n var current = this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0);\r\n var repeats = Math.floor((currentFrame - firstKeyFrame)/cycleDuration);\r\n if(this.pv.length){\r\n ret = new Array(initV.length);\r\n len = ret.length;\r\n for(i=0;i<len;i+=1){\r\n ret[i] = (endV[i]-initV[i])*repeats + current[i];\r\n }\r\n return ret;\r\n }\r\n return (endV-initV)*repeats + current;\r\n } else if(type === 'continue'){\r\n var lastValue = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\r\n var nextLastValue = this.getValueAtTime((lastKeyFrame - 0.001) / this.comp.globalData.frameRate, 0);\r\n if(this.pv.length){\r\n ret = new Array(lastValue.length);\r\n len = ret.length;\r\n for(i=0;i<len;i+=1){\r\n ret[i] = lastValue[i] + (lastValue[i]-nextLastValue[i])*((currentFrame - lastKeyFrame)/ this.comp.globalData.frameRate)/0.0005;\r\n }\r\n return ret;\r\n }\r\n return lastValue + (lastValue-nextLastValue)*(((currentFrame - lastKeyFrame))/0.001);\r\n }\r\n return this.getValueAtTime((((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) - offsetTime) / this.comp.globalData.frameRate, 0);\r\n }\r\n }\r\n\r\n function loopIn(type,duration, durationFlag) {\r\n if(!this.k){\r\n return this.pv;\r\n }\r\n var currentFrame = time*elem.comp.globalData.frameRate;\r\n var keyframes = this.keyframes;\r\n var firstKeyFrame = keyframes[0].t;\r\n var offsetTime = this.offsetTime || 0;\r\n if(currentFrame>=firstKeyFrame){\r\n return this.pv;\r\n }else{\r\n var cycleDuration, lastKeyFrame;\r\n if(!durationFlag){\r\n if(!duration || duration > keyframes.length - 1){\r\n duration = keyframes.length - 1;\r\n }\r\n lastKeyFrame = keyframes[duration].t;\r\n cycleDuration = lastKeyFrame - firstKeyFrame;\r\n } else {\r\n if(!duration){\r\n cycleDuration = Math.max(0,this.elem.data.op - firstKeyFrame);\r\n } else {\r\n cycleDuration = Math.abs(elem.comp.globalData.frameRate*duration);\r\n }\r\n lastKeyFrame = firstKeyFrame + cycleDuration;\r\n }\r\n var i, len, ret;\r\n if(type === 'pingpong') {\r\n var iterations = Math.floor((firstKeyFrame - currentFrame)/cycleDuration);\r\n if(iterations % 2 === 0){\r\n return this.getValueAtTime((((firstKeyFrame - currentFrame)%cycleDuration + firstKeyFrame) - offsetTime) / this.comp.globalData.frameRate, 0);\r\n }\r\n } else if(type === 'offset'){\r\n var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\r\n var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\r\n var current = this.getValueAtTime((cycleDuration - (firstKeyFrame - currentFrame)%cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0);\r\n var repeats = Math.floor((firstKeyFrame - currentFrame)/cycleDuration)+1;\r\n if(this.pv.length){\r\n ret = new Array(initV.length);\r\n len = ret.length;\r\n for(i=0;i<len;i+=1){\r\n ret[i] = current[i]-(endV[i]-initV[i])*repeats;\r\n }\r\n return ret;\r\n }\r\n return current-(endV-initV)*repeats;\r\n } else if(type === 'continue'){\r\n var firstValue = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\r\n var nextFirstValue = this.getValueAtTime((firstKeyFrame + 0.001) / this.comp.globalData.frameRate, 0);\r\n if(this.pv.length){\r\n ret = new Array(firstValue.length);\r\n len = ret.length;\r\n for(i=0;i<len;i+=1){\r\n ret[i] = firstValue[i] + (firstValue[i]-nextFirstValue[i])*(firstKeyFrame - currentFrame)/0.001;\r\n }\r\n return ret;\r\n }\r\n return firstValue + (firstValue-nextFirstValue)*(firstKeyFrame - currentFrame)/0.001;\r\n }\r\n\r\n return this.getValueAtTime(((cycleDuration - (firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) - offsetTime) / this.comp.globalData.frameRate, 0);\r\n }\r\n }\r\n\r\n function getValueAtTime(frameNum) {\r\n if(!this._cachingAtTime) {\r\n this._cachingAtTime = {lastValue:-99999,lastIndex:0};\r\n }\r\n //console.log('this._cachingAtTime', JSON.parse(JSON.stringify(this._cachingAtTime)))\r\n if(frameNum !== this._cachingAtTime.lastFrame) {\r\n frameNum *= this.elem.globalData.frameRate;\r\n frameNum -= this.offsetTime;\r\n var i = this._caching.lastFrame < frameNum ? this._caching.lastIndex : 0;\r\n var interpolationResult = this.interpolateValue(frameNum, i, this.pv, this._cachingAtTime);\r\n this._cachingAtTime.lastIndex = interpolationResult.iterationIndex;\r\n this._cachingAtTime.value = interpolationResult.value;\r\n this._cachingAtTime.lastFrame = frameNum;\r\n }\r\n return this._cachingAtTime.value;\r\n\r\n }\r\n\r\n function getVelocityAtTime(frameNum) {\r\n if(this.vel !== undefined){\r\n return this.vel;\r\n }\r\n var delta = -0.01;\r\n //frameNum += this.elem.data.st;\r\n var v1 = this.getValueAtTime(frameNum);\r\n var v2 = this.getValueAtTime(frameNum + delta);\r\n var velocity;\r\n if(v1.length){\r\n velocity = Array.apply(null,{length:v1.length});\r\n var i;\r\n for(i=0;i<v1.length;i+=1){\r\n //removing frameRate\r\n //if needed, don't add it here\r\n //velocity[i] = this.elem.globalData.frameRate*((v2[i] - v1[i])/delta);\r\n velocity[i] = (v2[i] - v1[i])/delta;\r\n }\r\n } else {\r\n velocity = (v2 - v1)/delta;\r\n }\r\n return velocity;\r\n };\r\n\r\n function setGroupProperty(propertyGroup){\r\n this.propertyGroup = propertyGroup;\r\n }\r\n\r\n function searchExpressions(elem,data,prop){\r\n if(data.x){\r\n prop.k = true;\r\n prop.x = true;\r\n if(prop.getValue) {\r\n prop.getPreValue = prop.getValue;\r\n }\r\n prop.getValue = ExpressionManager.initiateExpression.bind(prop)(elem,data,prop);\r\n }\r\n }\r\n\r\n function getTransformValueAtTime(time) {\r\n console.log('time:', time)\r\n }\r\n\r\n function getTransformStaticValueAtTime(time) {\r\n\r\n }\r\n\r\n var TextExpressionSelectorProp = (function(){\r\n\r\n function getValueProxy(index,total){\r\n this.textIndex = index+1;\r\n this.textTotal = total;\r\n this.getValue();\r\n return this.v;\r\n }\r\n\r\n return function TextExpressionSelectorProp(elem,data){\r\n this.pv = 1;\r\n this.comp = elem.comp;\r\n this.elem = elem;\r\n this.mult = .01;\r\n this.type = 'textSelector';\r\n this.textTotal = data.totalChars;\r\n this.selectorValue = 100;\r\n this.lastValue = [1,1,1];\r\n searchExpressions.bind(this)(elem,data,this);\r\n this.getMult = getValueProxy;\r\n this.getVelocityAtTime = getVelocityAtTime;\r\n if(this.kf){\r\n this.getValueAtTime = getValueAtTime.bind(this);\r\n } else {\r\n this.getValueAtTime = getStaticValueAtTime.bind(this);\r\n }\r\n this.setGroupProperty = setGroupProperty;\r\n }\r\n }());\r\n\r\n\r\n var propertyGetProp = PropertyFactory.getProp;\r\n PropertyFactory.getProp = function(elem,data,type, mult, arr){\r\n var prop = propertyGetProp(elem,data,type, mult, arr);\r\n //prop.getVelocityAtTime = getVelocityAtTime;\r\n //prop.loopOut = loopOut;\r\n //prop.loopIn = loopIn;\r\n if(type === 2) {\r\n if(prop.dynamicProperties.length) {\r\n prop.getValueAtTime = getTransformValueAtTime.bind(prop);\r\n } else {\r\n prop.getValueAtTime = getTransformStaticValueAtTime.bind(prop);\r\n }\r\n } else {\r\n if(prop.kf){\r\n prop.getValueAtTime = getValueAtTime.bind(prop);\r\n } else {\r\n prop.getValueAtTime = getStaticValueAtTime.bind(prop);\r\n }\r\n }\r\n prop.setGroupProperty = setGroupProperty;\r\n prop.loopOut = loopOut;\r\n prop.loopIn = loopIn;\r\n prop.getVelocityAtTime = getVelocityAtTime;\r\n prop.numKeys = data.a === 1 ? data.k.length : 0;\r\n var isAdded = prop.k;\r\n if(data.ix !== undefined){\r\n Object.defineProperty(prop,'propertyIndex',{\r\n get: function(){\r\n return data.ix;\r\n }\r\n })\r\n }\r\n searchExpressions(elem,data,prop);\r\n if(!isAdded && prop.x){\r\n arr.push(prop);\r\n }\r\n\r\n return prop;\r\n }\r\n\r\n function getShapeValueAtTime(frameNum) {\r\n if (!this._shapeValueAtTime) {\r\n this._lastIndexAtTime = 0;\r\n this._lastTimeAtTime = -999999;\r\n this._shapeValueAtTime = shape_pool.clone(this.pv);\r\n }\r\n if(frameNum !== this._lastTimeAtTime) {\r\n this._lastTimeAtTime = frameNum;\r\n frameNum *= this.elem.globalData.frameRate;\r\n var interpolationResult = this.interpolateShape(frameNum, this._lastIndexAtTime, this._shapeValueAtTime, false);\r\n this._lastIndexAtTime = interpolationResult.iterationIndex;\r\n }\r\n return this._shapeValueAtTime;\r\n }\r\n\r\n var ShapePropertyConstructorFunction = ShapePropertyFactory.getConstructorFunction();\r\n var KeyframedShapePropertyConstructorFunction = ShapePropertyFactory.getKeyframedConstructorFunction();\r\n\r\n ShapePropertyConstructorFunction.prototype.vertices = function(prop, time){\r\n var shapePath = this.v;\r\n if(time !== undefined) {\r\n shapePath = this.getValueAtTime(time, 0);\r\n }\r\n var i, len = shapePath._length;\r\n var vertices = shapePath[prop];\r\n var points = shapePath.v;\r\n var arr = Array.apply(null,{length:len})\r\n for(i = 0; i < len; i += 1) {\r\n if(prop === 'i' || prop === 'o') {\r\n arr[i] = [vertices[i][0] - points[i][0], vertices[i][1] - points[i][1]]\r\n } else {\r\n arr[i] = [vertices[i][0], vertices[i][1]]\r\n }\r\n \r\n }\r\n return arr;\r\n }\r\n\r\n ShapePropertyConstructorFunction.prototype.points = function(time){\r\n return this.vertices('v', time);\r\n }\r\n\r\n ShapePropertyConstructorFunction.prototype.inTangents = function(time){\r\n return this.vertices('i', time);\r\n }\r\n\r\n ShapePropertyConstructorFunction.prototype.outTangents = function(time){\r\n return this.vertices('o', time);\r\n }\r\n\r\n ShapePropertyConstructorFunction.prototype.isClosed = function(){\r\n return this.v.c;\r\n }\r\n\r\n ShapePropertyConstructorFunction.prototype.pointOnPath = function(perc, time){\r\n var shapePath = this.v;\r\n if(time !== undefined) {\r\n shapePath = this.getValueAtTime(time, 0);\r\n }\r\n if(!this._segmentsLength) {\r\n this._segmentsLength = bez.getSegmentsLength(shapePath);\r\n }\r\n\r\n var segmentsLength = this._segmentsLength;\r\n var lengths = segmentsLength.lengths;\r\n var lengthPos = segmentsLength.totalLength * perc;\r\n var i = 0, len = lengths.length;\r\n var j = 0, jLen;\r\n var accumulatedLength = 0;\r\n var segments;\r\n while(i < len) {\r\n if(accumulatedLength + lengths[i].addedLength > lengthPos) {\r\n segments = lengths[i].segments;\r\n var initIndex = i;\r\n var endIndex = (shapePath.c && i === len - 1) ? 0 : i + 1;\r\n var segmentPerc = (lengthPos - accumulatedLength)/lengths[i].addedLength;\r\n var pt = bez.getPointInSegment(shapePath.v[initIndex], shapePath.v[endIndex], shapePath.o[initIndex], shapePath.i[endIndex], segmentPerc, lengths[i])\r\n break;\r\n } else {\r\n accumulatedLength += lengths[i].addedLength;\r\n }\r\n i += 1;\r\n }\r\n if(!pt){\r\n pt = shapePath.c ? [shapePath.v[0][0],shapePath.v[0][1]]:[shapePath.v[shapePath._length-1][0],shapePath.v[shapePath._length-1][1]]\r\n }\r\n return pt;\r\n }\r\n\r\n ShapePropertyConstructorFunction.prototype.vectorOnPath = function(perc, time, vectorType){\r\n //perc doesn't use triple equality because can be a Number object, not a primitive.\r\n perc = perc == 1 ? this.v.c ? 0 : 0.999 : perc;\r\n var pt1 = this.pointOnPath(perc, time);\r\n var pt2 = this.pointOnPath(perc + 0.001, time);\r\n var xLength = pt2[0] - pt1[0];\r\n var yLength = pt2[1] - pt1[1];\r\n var magnitude = Math.sqrt(Math.pow(xLength,2) + Math.pow(yLength,2));\r\n var unitVector = vectorType === 'tangent' ? [xLength/magnitude, yLength/magnitude] : [-yLength/magnitude, xLength/magnitude];\r\n return unitVector;\r\n }\r\n\r\n ShapePropertyConstructorFunction.prototype.tangentOnPath = function(perc, time){\r\n return this.vectorOnPath(perc, time, 'tangent');\r\n }\r\n\r\n ShapePropertyConstructorFunction.prototype.normalOnPath = function(perc, time){\r\n return this.vectorOnPath(perc, time, 'normal');\r\n }\r\n\r\n ShapePropertyConstructorFunction.prototype.setGroupProperty = setGroupProperty;\r\n ShapePropertyConstructorFunction.prototype.getValueAtTime = getStaticValueAtTime;\r\n\r\n KeyframedShapePropertyConstructorFunction.prototype.vertices = ShapePropertyConstructorFunction.prototype.vertices;\r\n KeyframedShapePropertyConstructorFunction.prototype.points = ShapePropertyConstructorFunction.prototype.points;\r\n KeyframedShapePropertyConstructorFunction.prototype.inTangents = ShapePropertyConstructorFunction.prototype.inTangents;\r\n KeyframedShapePropertyConstructorFunction.prototype.outTangents = ShapePropertyConstructorFunction.prototype.outTangents;\r\n KeyframedShapePropertyConstructorFunction.prototype.isClosed = ShapePropertyConstructorFunction.prototype.isClosed;\r\n KeyframedShapePropertyConstructorFunction.prototype.pointOnPath = ShapePropertyConstructorFunction.prototype.pointOnPath;\r\n KeyframedShapePropertyConstructorFunction.prototype.vectorOnPath = ShapePropertyConstructorFunction.prototype.vectorOnPath;\r\n KeyframedShapePropertyConstructorFunction.prototype.tangentOnPath = ShapePropertyConstructorFunction.prototype.tangentOnPath;\r\n KeyframedShapePropertyConstructorFunction.prototype.normalOnPath = ShapePropertyConstructorFunction.prototype.normalOnPath;\r\n KeyframedShapePropertyConstructorFunction.prototype.setGroupProperty = ShapePropertyConstructorFunction.prototype.setGroupProperty;\r\n KeyframedShapePropertyConstructorFunction.prototype.getValueAtTime = getShapeValueAtTime;\r\n\r\n var propertyGetShapeProp = ShapePropertyFactory.getShapeProp;\r\n ShapePropertyFactory.getShapeProp = function(elem,data,type, arr, trims){\r\n var prop = propertyGetShapeProp(elem,data,type, arr, trims);\r\n var isAdded = prop.k;\r\n if(data.ix !== undefined){\r\n Object.defineProperty(prop,'propertyIndex',{\r\n get: function(){\r\n return data.ix;\r\n }\r\n })\r\n }\r\n if(type === 3){\r\n searchExpressions(elem,data.pt,prop);\r\n } else if(type === 4){\r\n searchExpressions(elem,data.ks,prop);\r\n }\r\n if(!isAdded && prop.x){\r\n arr.push(prop);\r\n }\r\n return prop;\r\n }\r\n\r\n var propertyGetTextProp = PropertyFactory.getTextSelectorProp;\r\n PropertyFactory.getTextSelectorProp = function(elem, data,arr){\r\n if(data.t === 1){\r\n return new TextExpressionSelectorProp(elem, data,arr);\r\n } else {\r\n return propertyGetTextProp(elem,data,arr);\r\n }\r\n }\r\n}());\n(function addTextPropertyDecorator() {\r\n\r\n function searchExpressions(){\r\n if(this.data.d.x){\r\n this.comp = this.elem.comp;\r\n if(this.getValue) {\r\n this.getPreValue = this.getValue;\r\n }\r\n this.calculateExpression = ExpressionManager.initiateExpression.bind(this)(this.elem,this.data.d,this);\r\n this.getValue = this.getExpressionValue;\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n TextProperty.prototype.searchProperty = function(){\r\n this.kf = this.searchExpressions() || this.data.d.k.length > 1;\r\n return this.kf;\r\n }\r\n\r\n TextProperty.prototype.getExpressionValue = function(num){\r\n this.calculateExpression();\r\n if(this.mdf) {\r\n this.currentData.t = this.v.toString();\r\n this.completeTextData(this.currentData);\r\n }\r\n }\r\n\r\n TextProperty.prototype.searchExpressions = searchExpressions;\r\n \r\n}());\nvar ExpressionManager = (function(){\r\n var ob = {};\r\n var Math = BMMath;\r\n var window = null;\r\n var document = null;\r\n\r\n function duplicatePropertyValue(value, mult){\r\n mult = mult || 1;\r\n\r\n if(typeof value === 'number' || value instanceof Number){\r\n return value*mult;\r\n }else if(value.i){\r\n return JSON.parse(JSON.stringify(value));\r\n }else{\r\n var arr = Array.apply(null,{length:value.length});\r\n var i, len = value.length;\r\n for(i=0;i<len;i+=1){\r\n arr[i]=value[i]*mult;\r\n }\r\n return arr;\r\n }\r\n }\r\n\r\n function shapesEqual(shape1, shape2) {\r\n if(shape1._length !== shape2._length || shape1.c !== shape2.c){\r\n return false;\r\n }\r\n var i, len = shape1._length;\r\n for(i = 0; i < len; i += 1) {\r\n if(shape1.v[i][0] !== shape2.v[i][0] || shape1.v[i][1] !== shape2.v[i][1]\r\n || shape1.o[i][0] !== shape2.o[i][0] || shape1.o[i][1] !== shape2.o[i][1]\r\n || shape1.i[i][0] !== shape2.i[i][0] || shape1.i[i][1] !== shape2.i[i][1]){\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n function $bm_neg(a){\r\n var tOfA = typeof a;\r\n if(tOfA === 'number' || tOfA === 'boolean' || a instanceof Number ){\r\n return -a;\r\n }\r\n if(a.constructor === Array){\r\n var i, lenA = a.length;\r\n var retArr = [];\r\n for(i=0;i<lenA;i+=1){\r\n retArr[i] = -a[i];\r\n }\r\n return retArr;\r\n }\r\n }\r\n\r\n function sum(a,b) {\r\n var tOfA = typeof a;\r\n var tOfB = typeof b;\r\n if(tOfA === 'string' || tOfB === 'string'){\r\n return a + b;\r\n }\r\n if((tOfA === 'number' || tOfA === 'boolean' || tOfA === 'string' || a instanceof Number) && (tOfB === 'number' || tOfB === 'boolean' || tOfB === 'string' || b instanceof Number)) {\r\n return a + b;\r\n }\r\n if(a.constructor === Array && (tOfB === 'number' || tOfB === 'boolean' || tOfB === 'string' || b instanceof Number )){\r\n a[0] = a[0] + b;\r\n return a;\r\n }\r\n if((tOfA === 'number' || tOfA === 'boolean' || tOfA === 'string' || a instanceof Number ) && b.constructor === Array){\r\n b[0] = a + b[0];\r\n return b;\r\n }\r\n if(a.constructor === Array && b.constructor === Array){\r\n \r\n var i = 0, lenA = a.length, lenB = b.length;\r\n var retArr = [];\r\n while(i<lenA || i < lenB){\r\n if((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)){\r\n retArr[i] = a[i] + b[i];\r\n }else{\r\n retArr[i] = b[i] == undefined ? a[i] : a[i] || b[i];\r\n }\r\n i += 1;\r\n }\r\n return retArr;\r\n }\r\n return 0;\r\n }\r\n var add = sum;\r\n\r\n function sub(a,b) {\r\n var tOfA = typeof a;\r\n var tOfB = typeof b;\r\n if((tOfA === 'number' || tOfA === 'boolean' || tOfA === 'string' || a instanceof Number ) && (tOfB === 'number' || tOfB === 'boolean' || tOfB === 'string' || b instanceof Number )) {\r\n if(tOfA === 'string') {\r\n a = parseInt(a);\r\n }\r\n if(tOfB === 'string') {\r\n b = parseInt(b);\r\n }\r\n return a - b;\r\n }\r\n if( a.constructor === Array && (tOfB === 'number' || tOfB === 'boolean' || tOfB === 'string' || b instanceof Number )){\r\n a[0] = a[0] - b;\r\n return a;\r\n }\r\n if((tOfA === 'number' || tOfA === 'boolean' || tOfA === 'string' || a instanceof Number ) && b.constructor === Array){\r\n b[0] = a - b[0];\r\n return b;\r\n }\r\n if(a.constructor === Array && b.constructor === Array){\r\n var i = 0, lenA = a.length, lenB = b.length;\r\n var retArr = [];\r\n while(i<lenA || i < lenB){\r\n if((typeof a[i] === 'number' || a[i] instanceof Number) && typeof (typeof b[i] === 'number' || b[i] instanceof Number)){\r\n retArr[i] = a[i] - b[i];\r\n }else{\r\n retArr[i] = b[i] == undefined ? a[i] : a[i] || b[i];\r\n }\r\n i += 1;\r\n }\r\n return retArr;\r\n }\r\n return 0;\r\n }\r\n\r\n function mul(a,b) {\r\n var tOfA = typeof a;\r\n var tOfB = typeof b;\r\n var arr;\r\n if((tOfA === 'number' || tOfA === 'boolean' || tOfA === 'string' || a instanceof Number ) && (tOfB === 'number' || tOfB === 'boolean' || tOfB === 'string' || b instanceof Number )) {\r\n return a * b;\r\n }\r\n\r\n var i, len;\r\n if(a.constructor === Array && (tOfB === 'number' || tOfB === 'boolean' || tOfB === 'string' || b instanceof Number )){\r\n len = a.length;\r\n arr = Array.apply(null,{length:len});\r\n for(i=0;i<len;i+=1){\r\n arr[i] = a[i] * b;\r\n }\r\n return arr;\r\n }\r\n if((tOfA === 'number' || tOfA === 'boolean' || tOfA === 'string' || a instanceof Number ) && b.constructor === Array){\r\n len = b.length;\r\n arr = Array.apply(null,{length:len});\r\n for(i=0;i<len;i+=1){\r\n arr[i] = a * b[i];\r\n }\r\n return arr;\r\n }\r\n return 0;\r\n }\r\n\r\n function div(a,b) {\r\n var tOfA = typeof a;\r\n var tOfB = typeof b;\r\n var arr;\r\n if((tOfA === 'number' || tOfA === 'boolean' || tOfA === 'string' || a instanceof Number ) && (tOfB === 'number' || tOfB === 'boolean' || tOfB === 'string' || b instanceof Number )) {\r\n return a / b;\r\n }\r\n var i, len;\r\n if(a.constructor === Array && (tOfB === 'number' || tOfB === 'boolean' || tOfB === 'string' || b instanceof Number )){\r\n len = a.length;\r\n arr = Array.apply(null,{length:len});\r\n for(i=0;i<len;i+=1){\r\n arr[i] = a[i] / b;\r\n }\r\n return arr;\r\n }\r\n if((tOfA === 'number' || tOfA === 'boolean' || tOfA === 'string' || a instanceof Number ) && b.constructor === Array){\r\n len = b.length;\r\n arr = Array.apply(null,{length:len});\r\n for(i=0;i<len;i+=1){\r\n arr[i] = a / b[i];\r\n }\r\n return arr;\r\n }\r\n return 0;\r\n }\r\n function mod(a,b) {\r\n if(typeof a === 'string') {\r\n a = parseInt(a);\r\n }\r\n if(typeof b === 'string') {\r\n b = parseInt(b);\r\n }\r\n return a % b;\r\n }\r\n\r\n function clamp(num, min, max) {\r\n if(min > max){\r\n var mm = max;\r\n max = min;\r\n min = mm;\r\n }\r\n return Math.min(Math.max(num, min), max);\r\n }\r\n\r\n function radiansToDegrees(val) {\r\n return val/degToRads;\r\n }\r\n var radians_to_degrees = radiansToDegrees;\r\n\r\n function degreesToRadians(val) {\r\n return val*degToRads;\r\n }\r\n var degrees_to_radians = radiansToDegrees;\r\n\r\n var helperLengthArray = [0,0,0,0,0,0];\r\n\r\n function length(arr1,arr2){\r\n if(typeof arr1 === 'number' || arr1 instanceof Number){\r\n arr2 = arr2 || 0;\r\n return Math.abs(arr1 - arr2);\r\n }\r\n if(!arr2){\r\n arr2 = helperLengthArray;\r\n }\r\n var i,len = Math.min(arr1.length,arr2.length);\r\n var addedLength = 0;\r\n for(i=0;i<len;i+=1){\r\n addedLength += Math.pow(arr2[i]-arr1[i],2);\r\n }\r\n return Math.sqrt(addedLength);\r\n }\r\n\r\n function normalize(vec){\r\n return div(vec, length(vec));\r\n }\r\n\r\n function rgbToHsl(val){\r\n var r = val[0]; var g = val[1]; var b = val[2];\r\n var max = Math.max(r, g, b), min = Math.min(r, g, b);\r\n var h, s, l = (max + min) / 2;\r\n\r\n if(max == min){\r\n h = s = 0; // achromatic\r\n }else{\r\n var d = max - min;\r\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\r\n switch(max){\r\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\r\n case g: h = (b - r) / d + 2; break;\r\n case b: h = (r - g) / d + 4; break;\r\n }\r\n h /= 6;\r\n }\r\n\r\n return [h, s, l,val[3]];\r\n }\r\n function hslToRgb(val){\r\n var h = val[0];\r\n var s = val[1];\r\n var l = val[2];\r\n\r\n var r, g, b;\r\n\r\n if(s == 0){\r\n r = g = b = l; // achromatic\r\n }else{\r\n function hue2rgb(p, q, t){\r\n if(t < 0) t += 1;\r\n if(t > 1) t -= 1;\r\n if(t < 1/6) return p + (q - p) * 6 * t;\r\n if(t < 1/2) return q;\r\n if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;\r\n return p;\r\n }\r\n\r\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\r\n var p = 2 * l - q;\r\n r = hue2rgb(p, q, h + 1/3);\r\n g = hue2rgb(p, q, h);\r\n b = hue2rgb(p, q, h - 1/3);\r\n }\r\n\r\n return [r, g , b, val[3]];\r\n }\r\n\r\n function linear(t, tMin, tMax, value1, value2){\r\n if(value1 === undefined || value2 === undefined){\r\n return linear(t,0,1,tMin,tMax);\r\n }\r\n if(t <= tMin) {\r\n return value1;\r\n }else if(t >= tMax){\r\n return value2;\r\n }\r\n var perc = tMax === tMin ? 0 : (t-tMin)/(tMax-tMin);\r\n if(!value1.length){\r\n return value1 + (value2-value1)*perc;\r\n }\r\n var i, len = value1.length;\r\n var arr = Array.apply( null, { length: len } );\r\n for(i=0;i<len;i+=1){\r\n arr[i] = value1[i] + (value2[i]-value1[i])*perc;\r\n }\r\n return arr;\r\n }\r\n function random(min,max){\r\n if(max === undefined){\r\n if(min === undefined){\r\n min = 0;\r\n max = 1;\r\n } else {\r\n max = min;\r\n min = undefined;\r\n }\r\n }\r\n if(max.length){\r\n var i, len = max.length;\r\n if(!min){\r\n min = Array.apply(null,{length:len});\r\n }\r\n var arr = Array.apply(null,{length:len});\r\n var rnd = BMMath.random();\r\n for(i=0;i<len;i+=1){\r\n arr[i] = min[i] + rnd*(max[i]-min[i])\r\n }\r\n return arr;\r\n }\r\n if(min === undefined){\r\n min = 0;\r\n }\r\n var rndm = BMMath.random();\r\n return min + rndm*(max-min);\r\n }\r\n\r\n function createPath(points, inTangents, outTangents, closed) {\r\n inTangents = inTangents && inTangents.length ? inTangents : points;\r\n outTangents = outTangents && outTangents.length ? outTangents : points;\r\n var path = shape_pool.newShape();\r\n var len = points.length;\r\n path.setPathData(closed, len);\r\n for(i = 0; i < len; i += 1) {\r\n path.setTripleAt(points[i][0],points[i][1],outTangents[i][0] + points[i][0],outTangents[i][1] + points[i][1],inTangents[i][0] + points[i][0],inTangents[i][1] + points[i][1],i,true)\r\n }\r\n return path\r\n }\r\n\r\n function initiateExpression(elem,data,property){\r\n var val = data.x;\r\n var needsVelocity = /velocity(?![\\w\\d])/.test(val);\r\n var _needsRandom = val.indexOf('random') !== -1;\r\n var elemType = elem.data.ty;\r\n var transform,content,effect;\r\n var thisComp = elem.comp;\r\n var thisProperty = property;\r\n elem.comp.frameDuration = 1/elem.comp.globalData.frameRate;\r\n var inPoint = elem.data.ip/elem.comp.globalData.frameRate;\r\n var outPoint = elem.data.op/elem.comp.globalData.frameRate;\r\n var width = elem.data.sw ? elem.data.sw : 0;\r\n var height = elem.data.sh ? elem.data.sh : 0;\r\n var loopIn, loop_in, loopOut, loop_out;\r\n var toWorld,fromWorld,fromComp,fromCompToSurface,anchorPoint,thisLayer,thisComp,mask,valueAtTime,velocityAtTime;\r\n var fn = new Function();\r\n //var fnStr = 'var fn = function(){'+val+';this.v = $bm_rt;}';\r\n //eval(fnStr);\r\n\r\n var fn = eval('[function(){' + val+';if($bm_rt.__shapeObject){this.v=shape_pool.clone($bm_rt.v);}else{this.v=$bm_rt;}}' + ']')[0];\r\n var bindedFn = fn.bind(this);\r\n var numKeys = property.kf ? data.k.length : 0;\r\n\r\n var wiggle = function wiggle(freq,amp){\r\n var i,j, len = this.pv.length ? this.pv.length : 1;\r\n var addedAmps = Array.apply(null,{len:len});\r\n for(j=0;j<len;j+=1){\r\n addedAmps[j] = 0;\r\n }\r\n freq = 5;\r\n var iterations = Math.floor(time*freq);\r\n i = 0;\r\n j = 0;\r\n while(i<iterations){\r\n //var rnd = BMMath.random();\r\n for(j=0;j<len;j+=1){\r\n addedAmps[j] += -amp + amp*2*BMMath.random();\r\n //addedAmps[j] += -amp + amp*2*rnd;\r\n }\r\n i += 1;\r\n }\r\n //var rnd2 = BMMath.random();\r\n var periods = time*freq;\r\n var perc = periods - Math.floor(periods);\r\n var arr = Array.apply({length:len});\r\n if(len>1){\r\n for(j=0;j<len;j+=1){\r\n arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp*2*BMMath.random())*perc;\r\n //arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp*2*rnd)*perc;\r\n //arr[i] = this.pv[i] + addedAmp + amp1*perc + amp2*(1-perc);\r\n }\r\n return arr;\r\n } else {\r\n return this.pv + addedAmps[0] + (-amp + amp*2*BMMath.random())*perc;\r\n }\r\n }.bind(this);\r\n\r\n if(thisProperty.loopIn) {\r\n loopIn = thisProperty.loopIn.bind(thisProperty);\r\n loop_in = loopIn;\r\n }\r\n\r\n if(thisProperty.loopOut) {\r\n loopOut = thisProperty.loopOut.bind(thisProperty);\r\n loop_out = loopOut;\r\n }\r\n\r\n var loopInDuration = function loopInDuration(type,duration){\r\n return loopIn(type,duration,true);\r\n }.bind(this);\r\n\r\n var loopOutDuration = function loopOutDuration(type,duration){\r\n return loopOut(type,duration,true);\r\n }.bind(this);\r\n\r\n if(this.getValueAtTime) {\r\n valueAtTime = this.getValueAtTime.bind(this);\r\n }\r\n\r\n if(this.getVelocityAtTime) {\r\n velocityAtTime = this.getVelocityAtTime.bind(this);\r\n }\r\n\r\n var comp = elem.comp.globalData.projectInterface.bind(elem.comp.globalData.projectInterface);\r\n\r\n function lookAt(elem1,elem2){\r\n var fVec = [elem2[0]-elem1[0],elem2[1]-elem1[1],elem2[2]-elem1[2]];\r\n var pitch = Math.atan2(fVec[0],Math.sqrt(fVec[1]*fVec[1]+fVec[2]*fVec[2]))/degToRads;\r\n var yaw = -Math.atan2(fVec[1],fVec[2])/degToRads;\r\n return [yaw,pitch,0];\r\n };\r\n\r\n function easeOut(t, val1, val2){\r\n return -(val2-val1) * t*(t-2) + val1;\r\n };\r\n\r\n function nearestKey(time){\r\n var i, len = data.k.length,index,keyTime;\r\n if(!data.k.length || typeof(data.k[0]) === 'number'){\r\n index = 0;\r\n keyTime = 0;\r\n } else {\r\n index = -1;\r\n time *= elem.comp.globalData.frameRate;\r\n if (time < data.k[0].t) {\r\n index = 1;\r\n keyTime = data.k[0].t;\r\n } else {\r\n for(i=0;i<len-1;i+=1){\r\n if(time === data.k[i].t){\r\n index = i + 1;\r\n keyTime = data.k[i].t;\r\n break;\r\n }else if(time>data.k[i].t && time<data.k[i+1].t){\r\n if(time-data.k[i].t > data.k[i+1].t - time){\r\n index = i + 2;\r\n keyTime = data.k[i+1].t;\r\n } else {\r\n index = i + 1;\r\n keyTime = data.k[i].t;\r\n }\r\n break;\r\n }\r\n }\r\n if(index === -1){\r\n index = i + 1;\r\n keyTime = data.k[i].t;\r\n }\r\n }\r\n \r\n }\r\n var ob = {};\r\n ob.index = index;\r\n ob.time = keyTime/elem.comp.globalData.frameRate;\r\n return ob;\r\n };\r\n\r\n function key(ind){\r\n var ob, i, len;\r\n if(!data.k.length || typeof(data.k[0]) === 'number'){\r\n throw new Error('The property has no keyframe at index ' + ind);\r\n }\r\n ind -= 1;\r\n ob = {\r\n time: data.k[ind].t/elem.comp.globalData.frameRate\r\n };\r\n var arr;\r\n if(ind === data.k.length - 1 && !data.k[ind].h){\r\n arr = data.k[ind-1].e;\r\n }else{\r\n arr = data.k[ind].s;\r\n }\r\n len = arr.length;\r\n for(i=0;i<len;i+=1){\r\n ob[i] = arr[i];\r\n }\r\n return ob;\r\n };\r\n\r\n function framesToTime(frames,fps){\r\n if(!fps){\r\n fps = elem.comp.globalData.frameRate;\r\n }\r\n return frames/fps;\r\n };\r\n\r\n function timeToFrames(t,fps){\r\n if(!t && t !== 0){\r\n t = time;\r\n }\r\n if(!fps){\r\n fps = elem.comp.globalData.frameRate;\r\n }\r\n return t*fps;\r\n };\r\n\r\n function seedRandom(seed){\r\n BMMath.seedrandom(randSeed + seed);\r\n };\r\n\r\n function sourceRectAtTime() {\r\n return elem.sourceRectAtTime();\r\n }\r\n\r\n var time,velocity, value,textIndex,textTotal,selectorValue;\r\n var index = elem.data.ind;\r\n var hasParent = !!(elem.hierarchy && elem.hierarchy.length);\r\n var parent;\r\n var randSeed = Math.floor(Math.random()*1000000);\r\n function executeExpression(){\r\n if(_needsRandom){\r\n seedRandom(randSeed);\r\n }\r\n if(this.frameExpressionId === elem.globalData.frameId && this.type !== 'textSelector'){\r\n return;\r\n }\r\n if(this.lock){\r\n this.v = duplicatePropertyValue(this.pv,this.mult);\r\n return true;\r\n }\r\n if(this.type === 'textSelector'){\r\n textIndex = this.textIndex;\r\n textTotal = this.textTotal;\r\n selectorValue = this.selectorValue;\r\n }\r\n if(!thisLayer){\r\n thisLayer = elem.layerInterface;\r\n thisComp = elem.comp.compInterface;\r\n toWorld = thisLayer.toWorld.bind(thisLayer);\r\n fromWorld = thisLayer.fromWorld.bind(thisLayer);\r\n fromComp = thisLayer.fromComp.bind(thisLayer);\r\n mask = thisLayer.mask ? thisLayer.mask.bind(thisLayer):null;\r\n fromCompToSurface = fromComp;\r\n }\r\n if(!transform){\r\n transform = elem.layerInterface(\"ADBE Transform Group\");\r\n anchorPoint = transform.anchorPoint;\r\n }\r\n \r\n if(elemType === 4 && !content){\r\n content = thisLayer(\"ADBE Root Vectors Group\");\r\n }\r\n if(!effect){\r\n effect = thisLayer(4);\r\n }\r\n hasParent = !!(elem.hierarchy && elem.hierarchy.length);\r\n if(hasParent && !parent){\r\n parent = elem.hierarchy[0].layerInterface;\r\n }\r\n this.lock = true;\r\n if(this.getPreValue){\r\n this.getPreValue();\r\n }\r\n value = this.pv;\r\n time = this.comp.renderedFrame/this.comp.globalData.frameRate;\r\n if(needsVelocity){\r\n velocity = velocityAtTime(time);\r\n }\r\n bindedFn();\r\n this.frameExpressionId = elem.globalData.frameId;\r\n var i,len;\r\n if(this.mult){\r\n if(typeof this.v === 'number' || this.v instanceof Number || this.v instanceof String || typeof this.v === 'string'){\r\n this.v *= this.mult;\r\n }else if(this.v.length === 1){\r\n this.v = this.v[0] * this.mult;\r\n }else{\r\n len = this.v.length;\r\n if(value === this.v){\r\n this.v = len === 2 ? [value[0],value[1]] : [value[0],value[1],value[2]];\r\n }\r\n for(i = 0; i < len; i += 1){\r\n this.v[i] *= this.mult;\r\n }\r\n }\r\n }\r\n if(this.v.length === 1){\r\n this.v = this.v[0];\r\n }\r\n if(typeof this.v === 'number' || this.v instanceof Number || this.v instanceof String || typeof this.v === 'string'){\r\n if(this.lastValue !== this.v){\r\n this.lastValue = this.v;\r\n this.mdf = true;\r\n }\r\n }else if( this.v._length){\r\n if(!shapesEqual(this.v,this.localShapeCollection.shapes[0])){\r\n this.mdf = true;\r\n this.localShapeCollection.releaseShapes();\r\n this.localShapeCollection.addShape(shape_pool.clone(this.v));\r\n }\r\n }else{\r\n len = this.v.length;\r\n for(i = 0; i < len; i += 1){\r\n if(this.v[i] !== this.lastValue[i]){\r\n this.lastValue[i] = this.v[i];\r\n this.mdf = true;\r\n }\r\n }\r\n }\r\n this.lock = false;\r\n }\r\n return executeExpression;\r\n };\r\n\r\n ob.initiateExpression = initiateExpression;\r\n return ob;\r\n}());\nvar ShapeExpressionInterface = (function(){\r\n var ob = {\r\n createShapeInterface:createShapeInterface,\r\n createGroupInterface:createGroupInterface,\r\n createTrimInterface:createTrimInterface,\r\n createStrokeInterface:createStrokeInterface,\r\n createTransformInterface:createTransformInterface,\r\n createEllipseInterface:createEllipseInterface,\r\n createStarInterface:createStarInterface,\r\n createRectInterface:createRectInterface,\r\n createRoundedInterface:createRoundedInterface,\r\n createRepatearInterface:createRepatearInterface,\r\n createPathInterface:createPathInterface,\r\n createFillInterface:createFillInterface\r\n };\r\n function createShapeInterface(shapes,view,propertyGroup){\r\n return shapeInterfaceFactory(shapes,view,propertyGroup);\r\n }\r\n function createGroupInterface(shapes,view,propertyGroup){\r\n return groupInterfaceFactory(shapes,view,propertyGroup);\r\n }\r\n function createFillInterface(shape,view,propertyGroup){\r\n return fillInterfaceFactory(shape,view,propertyGroup);\r\n }\r\n function createStrokeInterface(shape,view,propertyGroup){\r\n return strokeInterfaceFactory(shape,view,propertyGroup);\r\n }\r\n function createTrimInterface(shape,view,propertyGroup){\r\n return trimInterfaceFactory(shape,view,propertyGroup);\r\n }\r\n function createTransformInterface(shape,view,propertyGroup){\r\n return transformInterfaceFactory(shape,view,propertyGroup);\r\n }\r\n function createEllipseInterface(shape,view,propertyGroup){\r\n return ellipseInterfaceFactory(shape,view,propertyGroup);\r\n }\r\n function createStarInterface(shape,view,propertyGroup){\r\n return starInterfaceFactory(shape,view,propertyGroup);\r\n }\r\n function createRectInterface(shape,view,propertyGroup){\r\n return rectInterfaceFactory(shape,view,propertyGroup);\r\n }\r\n function createRoundedInterface(shape,view,propertyGroup){\r\n return roundedInterfaceFactory(shape,view,propertyGroup);\r\n }\r\n function createRepatearInterface(shape,view,propertyGroup){\r\n return repeaterInterfaceFactory(shape,view,propertyGroup);\r\n }\r\n function createPathInterface(shape,view,propertyGroup){\r\n return pathInterfaceFactory(shape,view,propertyGroup);\r\n }\r\n\r\n function iterateElements(shapes,view, propertyGroup){\r\n var arr = [];\r\n var i, len = shapes ? shapes.length : 0;\r\n for(i=0;i<len;i+=1){\r\n if(shapes[i].ty == 'gr'){\r\n arr.push(ShapeExpressionInterface.createGroupInterface(shapes[i],view[i],propertyGroup));\r\n }else if(shapes[i].ty == 'fl'){\r\n arr.push(ShapeExpressionInterface.createFillInterface(shapes[i],view[i],propertyGroup));\r\n }else if(shapes[i].ty == 'st'){\r\n arr.push(ShapeExpressionInterface.createStrokeInterface(shapes[i],view[i],propertyGroup));\r\n }else if(shapes[i].ty == 'tm'){\r\n arr.push(ShapeExpressionInterface.createTrimInterface(shapes[i],view[i],propertyGroup));\r\n }else if(shapes[i].ty == 'tr'){\r\n //arr.push(ShapeExpressionInterface.createTransformInterface(shapes[i],view[i],propertyGroup));\r\n }else if(shapes[i].ty == 'el'){\r\n arr.push(ShapeExpressionInterface.createEllipseInterface(shapes[i],view[i],propertyGroup));\r\n }else if(shapes[i].ty == 'sr'){\r\n arr.push(ShapeExpressionInterface.createStarInterface(shapes[i],view[i],propertyGroup));\r\n } else if(shapes[i].ty == 'sh'){\r\n arr.push(ShapeExpressionInterface.createPathInterface(shapes[i],view[i],propertyGroup));\r\n } else if(shapes[i].ty == 'rc'){\r\n arr.push(ShapeExpressionInterface.createRectInterface(shapes[i],view[i],propertyGroup));\r\n } else if(shapes[i].ty == 'rd'){\r\n arr.push(ShapeExpressionInterface.createRoundedInterface(shapes[i],view[i],propertyGroup));\r\n } else if(shapes[i].ty == 'rp'){\r\n arr.push(ShapeExpressionInterface.createRepatearInterface(shapes[i],view[i],propertyGroup));\r\n } else{\r\n //console.log(shapes[i].ty);\r\n }\r\n }\r\n return arr;\r\n }\r\n\r\n var shapeInterfaceFactory = (function(){\r\n return function(shapes,view,propertyGroup){\r\n var interfaces;\r\n function _interfaceFunction(value){\r\n if(typeof value === 'number'){\r\n return interfaces[value-1];\r\n } else {\r\n var i = 0, len = interfaces.length;\r\n while(i<len){\r\n if(interfaces[i]._name === value){\r\n return interfaces[i];\r\n }\r\n i+=1;\r\n }\r\n }\r\n }\r\n _interfaceFunction.propertyGroup = propertyGroup;\r\n interfaces = iterateElements(shapes, view, _interfaceFunction);\r\n return _interfaceFunction;\r\n }\r\n }());\r\n\r\n var contentsInterfaceFactory = (function(){\r\n return function(shape,view, propertyGroup){\r\n var interfaces;\r\n var interfaceFunction = function _interfaceFunction(value){\r\n var i = 0, len = interfaces.length;\r\n while(i<len){\r\n if(interfaces[i]._name === value || interfaces[i].mn === value || interfaces[i].propertyIndex === value || interfaces[i].ix === value || interfaces[i].ind === value){\r\n return interfaces[i];\r\n }\r\n i+=1;\r\n }\r\n if(typeof value === 'number'){\r\n return interfaces[value-1];\r\n }\r\n };\r\n interfaceFunction.propertyGroup = function(val){\r\n if(val === 1){\r\n return interfaceFunction;\r\n } else{\r\n return propertyGroup(val-1);\r\n }\r\n };\r\n interfaces = iterateElements(shape.it, view.it, interfaceFunction.propertyGroup);\r\n interfaceFunction.numProperties = interfaces.length;\r\n interfaceFunction.propertyIndex = shape.cix;\r\n\r\n return interfaceFunction;\r\n }\r\n }());\r\n\r\n var groupInterfaceFactory = (function(){\r\n return function(shape,view, propertyGroup){\r\n var interfaceFunction = function _interfaceFunction(value){\r\n switch(value){\r\n case 'ADBE Vectors Group':\r\n case 'Contents':\r\n case 2:\r\n return interfaceFunction.content;\r\n case 'ADBE Vector Transform Group':\r\n case 3:\r\n default:\r\n return interfaceFunction.transform;\r\n }\r\n }\r\n interfaceFunction.propertyGroup = function(val){\r\n if(val === 1){\r\n return interfaceFunction;\r\n } else{\r\n return propertyGroup(val-1);\r\n }\r\n };\r\n var content = contentsInterfaceFactory(shape,view,interfaceFunction.propertyGroup);\r\n var transformInterface = ShapeExpressionInterface.createTransformInterface(shape.it[shape.it.length - 1],view.it[view.it.length - 1],interfaceFunction.propertyGroup);\r\n interfaceFunction.content = content;\r\n interfaceFunction.transform = transformInterface;\r\n Object.defineProperty(interfaceFunction, '_name', {\r\n get: function(){\r\n return shape.nm;\r\n }\r\n });\r\n //interfaceFunction.content = interfaceFunction;\r\n interfaceFunction.numProperties = shape.np;\r\n interfaceFunction.propertyIndex = shape.ix;\r\n interfaceFunction.nm = shape.nm;\r\n interfaceFunction.mn = shape.mn;\r\n return interfaceFunction;\r\n }\r\n }());\r\n\r\n var fillInterfaceFactory = (function(){\r\n return function(shape,view,propertyGroup){\r\n\r\n function interfaceFunction(val){\r\n if(val === 'Color' || val === 'color'){\r\n return interfaceFunction.color;\r\n } else if(val === 'Opacity' || val === 'opacity'){\r\n return interfaceFunction.opacity;\r\n }\r\n }\r\n Object.defineProperty(interfaceFunction, 'color', {\r\n get: function(){\r\n return ExpressionValue(view.c, 1 / view.c.mult, 'color');\r\n }\r\n });\r\n Object.defineProperty(interfaceFunction, 'opacity', {\r\n get: function(){\r\n return ExpressionValue(view.o, 100);\r\n }\r\n });\r\n Object.defineProperty(interfaceFunction, '_name', { value: shape.nm });\r\n Object.defineProperty(interfaceFunction, 'mn', { value: shape.mn });\r\n\r\n view.c.setGroupProperty(propertyGroup);\r\n view.o.setGroupProperty(propertyGroup);\r\n return interfaceFunction;\r\n }\r\n }());\r\n\r\n var strokeInterfaceFactory = (function(){\r\n return function(shape,view,propertyGroup){\r\n function _propertyGroup(val){\r\n if(val === 1){\r\n return ob;\r\n } else{\r\n return propertyGroup(val-1);\r\n }\r\n };\r\n function _dashPropertyGroup(val){\r\n if(val === 1){\r\n return dashOb;\r\n } else{\r\n return _propertyGroup(val-1);\r\n }\r\n };\r\n function addPropertyToDashOb(i) {\r\n Object.defineProperty(dashOb, shape.d[i].nm, {\r\n get: function(){\r\n return ExpressionValue(view.d.dataProps[i].p)\r\n }\r\n });\r\n }\r\n var i, len = shape.d ? shape.d.length : 0;\r\n var dashOb = {}\r\n for (i = 0; i < len; i += 1) {\r\n addPropertyToDashOb(i);\r\n view.d.dataProps[i].p.setGroupProperty(_dashPropertyGroup);\r\n }\r\n\r\n function interfaceFunction(val){\r\n if(val === 'Color' || val === 'color'){\r\n return interfaceFunction.color;\r\n } else if(val === 'Opacity' || val === 'opacity'){\r\n return interfaceFunction.opacity;\r\n } else if(val === 'Stroke Width' || val === 'stroke width'){\r\n return interfaceFunction.strokeWidth;\r\n }\r\n }\r\n Object.defineProperty(interfaceFunction, 'color', {\r\n get: function(){\r\n return ExpressionValue(view.c, 1 / view.c.mult, 'color');\r\n }\r\n });\r\n Object.defineProperty(interfaceFunction, 'opacity', {\r\n get: function(){\r\n return ExpressionValue(view.o, 100);\r\n }\r\n });\r\n Object.defineProperty(interfaceFunction, 'strokeWidth', {\r\n get: function(){\r\n return ExpressionValue(view.w);\r\n }\r\n });\r\n Object.defineProperty(interfaceFunction, 'dash', {\r\n get: function(){\r\n return dashOb;\r\n }\r\n });\r\n Object.defineProperty(interfaceFunction, '_name', { value: shape.nm });\r\n Object.defineProperty(interfaceFunction, 'mn', { value: shape.mn });\r\n\r\n view.c.setGroupProperty(_propertyGroup);\r\n view.o.setGroupProperty(_propertyGroup);\r\n view.w.setGroupProperty(_propertyGroup);\r\n return interfaceFunction;\r\n }\r\n }());\r\n\r\n var trimInterfaceFactory = (function(){\r\n return function(shape,view,propertyGroup){\r\n function _propertyGroup(val){\r\n if(val == 1){\r\n return interfaceFunction;\r\n } else {\r\n return propertyGroup(--val);\r\n }\r\n }\r\n interfaceFunction.propertyIndex = shape.ix;\r\n\r\n view.s.setGroupProperty(_propertyGroup);\r\n view.e.setGroupProperty(_propertyGroup);\r\n view.o.setGroupProperty(_propertyGroup);\r\n\r\n function interfaceFunction(val){\r\n if(val === shape.e.ix || val === 'End' || val === 'end'){\r\n return interfaceFunction.end;\r\n }\r\n if(val === shape.s.ix){\r\n return interfaceFunction.start;\r\n }\r\n if(val === shape.o.ix){\r\n return interfaceFunction.offset;\r\n }\r\n }\r\n interfaceFunction.propertyIndex = shape.ix;\r\n Object.defineProperty(interfaceFunction, 'start', {\r\n get: function(){\r\n return ExpressionValue(view.s, 1 / view.s.mult);\r\n }\r\n });\r\n Object.defineProperty(interfaceFunction, 'end', {\r\n get: function(){\r\n return ExpressionValue(view.e, 1 / view.e.mult);\r\n }\r\n });\r\n Object.defineProperty(interfaceFunction, 'offset', {\r\n get: function(){\r\n return ExpressionValue(view.o);\r\n }\r\n });\r\n Object.defineProperty(interfaceFunction, '_name', {\r\n get: function(){\r\n return shape.nm;\r\n }\r\n });\r\n interfaceFunction.mn = shape.mn;\r\n return interfaceFunction;\r\n }\r\n }());\r\n\r\n var transformInterfaceFactory = (function(){\r\n return function(shape,view,propertyGroup){\r\n function _propertyGroup(val){\r\n if(val == 1){\r\n return interfaceFunction;\r\n } else {\r\n return propertyGroup(--val);\r\n }\r\n }\r\n view.transform.mProps.o.setGroupProperty(_propertyGroup);\r\n view.transform.mProps.p.setGroupProperty(_propertyGroup);\r\n view.transform.mProps.a.setGroupProperty(_propertyGroup);\r\n view.transform.mProps.s.setGroupProperty(_propertyGroup);\r\n view.transform.mProps.r.setGroupProperty(_propertyGroup);\r\n if(view.transform.mProps.sk){\r\n view.transform.mProps.sk.setGroupProperty(_propertyGroup);\r\n view.transform.mProps.sa.setGroupProperty(_propertyGroup);\r\n }\r\n view.transform.op.setGroupProperty(_propertyGroup);\r\n\r\n function interfaceFunction(value){\r\n if(shape.a.ix === value){\r\n return interfaceFunction.anchorPoint;\r\n }\r\n if(shape.o.ix === value){\r\n return interfaceFunction.opacity;\r\n }\r\n if(shape.p.ix === value){\r\n return interfaceFunction.position;\r\n }\r\n if(shape.r.ix === value){\r\n return interfaceFunction.rotation;\r\n }\r\n if(shape.s.ix === value){\r\n return interfaceFunction.scale;\r\n }\r\n if(shape.sk && shape.sk.ix === value){\r\n return interfaceFunction.skew;\r\n }\r\n if(shape.sa && shape.sa.ix === value){\r\n return interfaceFunction.skewAxis;\r\n }\r\n if(value === 'Opacity') {\r\n return interfaceFunction.opacity;\r\n }\r\n if(value === 'Position') {\r\n return interfaceFunction.position;\r\n }\r\n if(value === 'Anchor Point') {\r\n return interfaceFunction.anchorPoint;\r\n }\r\n if(value === 'Scale') {\r\n return interfaceFunction.scale;\r\n }\r\n if(value === 'Rotation' || value === 'ADBE Vector Rotation') {\r\n return interfaceFunction.rotation;\r\n }\r\n if(value === 'Skew') {\r\n return interfaceFunction.skew;\r\n }\r\n if(value === 'Skew Axis') {\r\n return interfaceFunction.skewAxis;\r\n }\r\n\r\n }\r\n Object.defineProperty(interfaceFunction, 'opacity', {\r\n get: function(){\r\n return ExpressionValue(view.transform.mProps.o, 1/view.transform.mProps.o.mult);\r\n }\r\n });\r\n Object.defineProperty(interfaceFunction, 'position', {\r\n get: function(){\r\n return ExpressionValue(view.transform.mProps.p);\r\n }\r\n });\r\n Object.defineProperty(interfaceFunction, 'anchorPoint', {\r\n get: function(){\r\n return ExpressionValue(view.transform.mProps.a);\r\n }\r\n });\r\n var scaleArray = [];\r\n Object.defineProperty(interfaceFunction, 'scale', {\r\n get: function(){\r\n return ExpressionValue(view.transform.mProps.s, 1 / view.transform.mProps.s.mult);\r\n }\r\n });\r\n Object.defineProperty(interfaceFunction, 'rotation', {\r\n get: function(){\r\n return ExpressionValue(view.transform.mProps.r, 1 / view.transform.mProps.r.mult);\r\n }\r\n });\r\n Object.defineProperty(interfaceFunction, 'skew', {\r\n get: function(){\r\n return ExpressionValue(view.transform.mProps.sk);\r\n }\r\n });\r\n Object.defineProperty(interfaceFunction, 'skewAxis', {\r\n get: function(){\r\n return ExpressionValue(view.transform.mProps.sa);\r\n }\r\n });\r\n Object.defineProperty(interfaceFunction, '_name', {\r\n get: function(){\r\n return shape.nm;\r\n }\r\n });\r\n interfaceFunction.ty = 'tr';\r\n interfaceFunction.mn = shape.mn;\r\n return interfaceFunction;\r\n }\r\n }());\r\n\r\n var ellipseInterfaceFactory = (function(){\r\n return function(shape,view,propertyGroup){\r\n function _propertyGroup(val){\r\n if(val == 1){\r\n return interfaceFunction;\r\n } else {\r\n return propertyGroup(--val);\r\n }\r\n }\r\n interfaceFunction.propertyIndex = shape.ix;\r\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\r\n prop.s.setGroupProperty(_propertyGroup);\r\n prop.p.setGroupProperty(_propertyGroup);\r\n function interfaceFunction(value){\r\n if(shape.p.ix === value){\r\n return interfaceFunction.position;\r\n }\r\n if(shape.s.ix === value){\r\n return interfaceFunction.size;\r\n }\r\n }\r\n Object.defineProperty(interfaceFunction, 'size', {\r\n get: function(){\r\n return ExpressionValue(prop.s);\r\n }\r\n });\r\n Object.defineProperty(interfaceFunction, 'position', {\r\n get: function(){\r\n return ExpressionValue(prop.p);\r\n }\r\n });\r\n Object.defineProperty(interfaceFunction, '_name', {\r\n get: function(){\r\n return shape.nm;\r\n }\r\n });\r\n interfaceFunction.mn = shape.mn;\r\n return interfaceFunction;\r\n }\r\n }());\r\n\r\n var starInterfaceFactory = (function(){\r\n return function(shape,view,propertyGroup){\r\n function _propertyGroup(val){\r\n if(val == 1){\r\n return interfaceFunction;\r\n } else {\r\n return propertyGroup(--val);\r\n }\r\n }\r\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\r\n interfaceFunction.propertyIndex = shape.ix;\r\n prop.or.setGroupProperty(_propertyGroup);\r\n prop.os.setGroupProperty(_propertyGroup);\r\n prop.pt.setGroupProperty(_propertyGroup);\r\n prop.p.setGroupProperty(_propertyGroup);\r\n prop.r.setGroupProperty(_propertyGroup);\r\n if(shape.ir){\r\n prop.ir.setGroupProperty(_propertyGroup);\r\n prop.is.setGroupProperty(_propertyGroup);\r\n }\r\n\r\n function interfaceFunction(value){\r\n if(shape.p.ix === value){\r\n return interfaceFunction.position;\r\n }\r\n if(shape.r.ix === value){\r\n return interfaceFunction.rotation;\r\n }\r\n if(shape.pt.ix === value){\r\n return interfaceFunction.points;\r\n }\r\n if(shape.or.ix === value || 'ADBE Vector Star Outer Radius' === value){\r\n return interfaceFunction.outerRadius;\r\n }\r\n if(shape.os.ix === value){\r\n return interfaceFunction.outerRoundness;\r\n }\r\n if(shape.ir && (shape.ir.ix === value || 'ADBE Vector Star Inner Radius' === value)){\r\n return interfaceFunction.innerRadius;\r\n }\r\n if(shape.is && shape.is.ix === value){\r\n return interfaceFunction.innerRoundness;\r\n }\r\n\r\n }\r\n Object.defineProperty(interfaceFunction, 'position', {\r\n get: function(){\r\n return ExpressionValue(prop.p);\r\n }\r\n });\r\n Object.defineProperty(interfaceFunction, 'rotation', {\r\n get: function(){\r\n return ExpressionValue(prop.r, 1 / prop.r.mult);\r\n }\r\n });\r\n Object.defineProperty(interfaceFunction, 'points', {\r\n get: function(){\r\n return ExpressionValue(prop.pt);\r\n }\r\n });\r\n Object.defineProperty(interfaceFunction, 'outerRadius', {\r\n get: function(){\r\n return ExpressionValue(prop.or);\r\n }\r\n });\r\n Object.defineProperty(interfaceFunction, 'outerRoundness', {\r\n get: function(){\r\n return ExpressionValue(prop.os);\r\n }\r\n });\r\n Object.defineProperty(interfaceFunction, 'innerRadius', {\r\n get: function(){\r\n if(!prop.ir){\r\n return 0;\r\n }\r\n return ExpressionValue(prop.ir);\r\n }\r\n });\r\n Object.defineProperty(interfaceFunction, 'innerRoundness', {\r\n get: function(){\r\n if(!prop.is){\r\n return 0;\r\n }\r\n return ExpressionValue(prop.is, 1 / prop.is.mult);\r\n }\r\n });\r\n Object.defineProperty(interfaceFunction, '_name', {\r\n get: function(){\r\n return shape.nm;\r\n }\r\n });\r\n interfaceFunction.mn = shape.mn;\r\n return interfaceFunction;\r\n }\r\n }());\r\n\r\n var rectInterfaceFactory = (function(){\r\n return function(shape,view,propertyGroup){\r\n function _propertyGroup(val){\r\n if(val == 1){\r\n return interfaceFunction;\r\n } else {\r\n return propertyGroup(--val);\r\n }\r\n }\r\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\r\n interfaceFunction.propertyIndex = shape.ix;\r\n prop.p.setGroupProperty(_propertyGroup);\r\n prop.s.setGroupProperty(_propertyGroup);\r\n prop.r.setGroupProperty(_propertyGroup);\r\n\r\n function interfaceFunction(value){\r\n if(shape.p.ix === value){\r\n return interfaceFunction.position;\r\n }\r\n if(shape.r.ix === value){\r\n return interfaceFunction.roundness;\r\n }\r\n if(shape.s.ix === value || value === 'Size'){\r\n return interfaceFunction.size;\r\n }\r\n\r\n }\r\n Object.defineProperty(interfaceFunction, 'position', {\r\n get: function(){\r\n return ExpressionValue(prop.p);\r\n }\r\n });\r\n Object.defineProperty(interfaceFunction, 'roundness', {\r\n get: function(){\r\n return ExpressionValue(prop.r);\r\n }\r\n });\r\n Object.defineProperty(interfaceFunction, 'size', {\r\n get: function(){\r\n return ExpressionValue(prop.s);\r\n }\r\n });\r\n\r\n Object.defineProperty(interfaceFunction, '_name', {\r\n get: function(){\r\n return shape.nm;\r\n }\r\n });\r\n interfaceFunction.mn = shape.mn;\r\n return interfaceFunction;\r\n }\r\n }());\r\n\r\n var roundedInterfaceFactory = (function(){\r\n return function(shape,view,propertyGroup){\r\n function _propertyGroup(val){\r\n if(val == 1){\r\n return interfaceFunction;\r\n } else {\r\n return propertyGroup(--val);\r\n }\r\n }\r\n var prop = view;\r\n interfaceFunction.propertyIndex = shape.ix;\r\n prop.rd.setGroupProperty(_propertyGroup);\r\n\r\n function interfaceFunction(value){\r\n if(shape.r.ix === value || 'Round Corners 1' === value){\r\n return interfaceFunction.radius;\r\n }\r\n\r\n }\r\n Object.defineProperty(interfaceFunction, 'radius', {\r\n get: function(){\r\n return ExpressionValue(prop.rd);\r\n }\r\n });\r\n\r\n Object.defineProperty(interfaceFunction, '_name', {\r\n get: function(){\r\n return shape.nm;\r\n }\r\n });\r\n interfaceFunction.mn = shape.mn;\r\n return interfaceFunction;\r\n }\r\n }());\r\n\r\n var repeaterInterfaceFactory = (function(){\r\n return function(shape,view,propertyGroup){\r\n function _propertyGroup(val){\r\n if(val == 1){\r\n return interfaceFunction;\r\n } else {\r\n return propertyGroup(--val);\r\n }\r\n }\r\n var prop = view;\r\n interfaceFunction.propertyIndex = shape.ix;\r\n prop.c.setGroupProperty(_propertyGroup);\r\n prop.o.setGroupProperty(_propertyGroup);\r\n\r\n function interfaceFunction(value){\r\n if(shape.c.ix === value || 'Copies' === value){\r\n return interfaceFunction.copies;\r\n } else if(shape.o.ix === value || 'Offset' === value){\r\n return interfaceFunction.offset;\r\n }\r\n\r\n }\r\n Object.defineProperty(interfaceFunction, 'copies', {\r\n get: function(){\r\n return ExpressionValue(prop.c);\r\n }\r\n });\r\n\r\n Object.defineProperty(interfaceFunction, 'offset', {\r\n get: function(){\r\n return ExpressionValue(prop.o);\r\n }\r\n });\r\n\r\n Object.defineProperty(interfaceFunction, '_name', {\r\n get: function(){\r\n return shape.nm;\r\n }\r\n });\r\n interfaceFunction.mn = shape.mn;\r\n return interfaceFunction;\r\n }\r\n }());\r\n\r\n var pathInterfaceFactory = (function(){\r\n return function(shape,view,propertyGroup){\r\n var prop = view.sh;\r\n function _propertyGroup(val){\r\n if(val == 1){\r\n return interfaceFunction;\r\n } else {\r\n return propertyGroup(--val);\r\n }\r\n }\r\n prop.setGroupProperty(_propertyGroup);\r\n\r\n function interfaceFunction(val){\r\n if(val === 'Shape' || val === 'shape' || val === 'Path' || val === 'path' || val === 'ADBE Vector Shape' || val === 2){\r\n return interfaceFunction.path;\r\n }\r\n }\r\n\r\n Object.defineProperty(interfaceFunction, 'path', {\r\n get: function(){\r\n if(prop.k){\r\n prop.getValue();\r\n }\r\n return prop;\r\n //return shape_pool.clone(prop.v);\r\n }\r\n });\r\n Object.defineProperty(interfaceFunction, 'shape', {\r\n get: function(){\r\n if(prop.k){\r\n prop.getValue();\r\n }\r\n return prop;\r\n //return shape_pool.clone(prop.v);\r\n }\r\n });\r\n Object.defineProperty(interfaceFunction, '_name', { value: shape.nm });\r\n Object.defineProperty(interfaceFunction, 'ix', { value: shape.ix });\r\n Object.defineProperty(interfaceFunction, 'mn', { value: shape.mn });\r\n return interfaceFunction;\r\n }\r\n }());\r\n\r\n\r\n return ob;\r\n}())\r\n\nvar TextExpressionInterface = (function(){\r\n\treturn function(elem){\r\n var _prevValue, _sourceText;\r\n function _thisLayerFunction(){\r\n }\r\n Object.defineProperty(_thisLayerFunction, \"sourceText\", {\r\n get: function(){\r\n var stringValue = elem.textProperty.currentData.t;\r\n if(elem.textProperty.currentData.t !== _prevValue) {\r\n elem.textProperty.currentData.t = _prevValue;\r\n _sourceText = new String(stringValue);\r\n //If stringValue is an empty string, eval returns undefined, so it has to be returned as a String primitive\r\n _sourceText.value = stringValue ? stringValue : new String(stringValue);\r\n }\r\n return _sourceText;\r\n }\r\n });\r\n return _thisLayerFunction;\r\n }\r\n}())\nvar LayerExpressionInterface = (function (){\r\n function toWorld(arr, time){\r\n var toWorldMat = new Matrix();\r\n toWorldMat.reset();\r\n var transformMat;\r\n if(time) {\r\n //Todo implement value at time on transform properties\r\n //transformMat = this._elem.finalTransform.mProp.getValueAtTime(time);\r\n transformMat = this._elem.finalTransform.mProp;\r\n } else {\r\n transformMat = this._elem.finalTransform.mProp;\r\n }\r\n transformMat.applyToMatrix(toWorldMat);\r\n if(this._elem.hierarchy && this._elem.hierarchy.length){\r\n var i, len = this._elem.hierarchy.length;\r\n for(i=0;i<len;i+=1){\r\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat);\r\n }\r\n return toWorldMat.applyToPointArray(arr[0],arr[1],arr[2]||0);\r\n }\r\n return toWorldMat.applyToPointArray(arr[0],arr[1],arr[2]||0);\r\n }\r\n function fromWorld(arr, time){\r\n var toWorldMat = new Matrix();\r\n toWorldMat.reset();\r\n var transformMat;\r\n if(time) {\r\n //Todo implement value at time on transform properties\r\n //transformMat = this._elem.finalTransform.mProp.getValueAtTime(time);\r\n transformMat = this._elem.finalTransform.mProp;\r\n } else {\r\n transformMat = this._elem.finalTransform.mProp;\r\n }\r\n transformMat.applyToMatrix(toWorldMat);\r\n if(this._elem.hierarchy && this._elem.hierarchy.length){\r\n var i, len = this._elem.hierarchy.length;\r\n for(i=0;i<len;i+=1){\r\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat);\r\n }\r\n return toWorldMat.inversePoint(arr);\r\n }\r\n return toWorldMat.inversePoint(arr);\r\n }\r\n function fromComp(arr){\r\n var toWorldMat = new Matrix();\r\n toWorldMat.reset();\r\n this._elem.finalTransform.mProp.applyToMatrix(toWorldMat);\r\n if(this._elem.hierarchy && this._elem.hierarchy.length){\r\n var i, len = this._elem.hierarchy.length;\r\n for(i=0;i<len;i+=1){\r\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat);\r\n }\r\n return toWorldMat.inversePoint(arr);\r\n }\r\n return toWorldMat.inversePoint(arr);\r\n }\r\n\r\n\r\n return function(elem){\r\n\r\n var transformInterface = TransformExpressionInterface(elem.transform);\r\n\r\n function _registerMaskInterface(maskManager){\r\n _thisLayerFunction.mask = new MaskManagerInterface(maskManager, elem);\r\n }\r\n function _registerEffectsInterface(effects){\r\n _thisLayerFunction.effect = effects;\r\n }\r\n\r\n function _thisLayerFunction(name){\r\n switch(name){\r\n case \"ADBE Root Vectors Group\":\r\n case \"Contents\":\r\n case 2:\r\n return _thisLayerFunction.shapeInterface;\r\n case 1:\r\n case 6:\r\n case \"Transform\":\r\n case \"transform\":\r\n case \"ADBE Transform Group\":\r\n return transformInterface;\r\n case 4:\r\n case \"ADBE Effect Parade\":\r\n return _thisLayerFunction.effect;\r\n }\r\n }\r\n _thisLayerFunction.toWorld = toWorld;\r\n _thisLayerFunction.fromWorld = fromWorld;\r\n _thisLayerFunction.toComp = toWorld;\r\n _thisLayerFunction.fromComp = fromComp;\r\n _thisLayerFunction.sourceRectAtTime = elem.sourceRectAtTime.bind(elem);\r\n _thisLayerFunction._elem = elem;\r\n Object.defineProperty(_thisLayerFunction, 'hasParent', {\r\n get: function(){\r\n return !!elem.hierarchy;\r\n }\r\n });\r\n Object.defineProperty(_thisLayerFunction, 'parent', {\r\n get: function(){\r\n return elem.hierarchy[0].layerInterface;\r\n }\r\n });\r\n Object.defineProperty(_thisLayerFunction, \"rotation\", {\r\n get: function(){\r\n return transformInterface.rotation;\r\n }\r\n });\r\n Object.defineProperty(_thisLayerFunction, \"scale\", {\r\n get: function () {\r\n return transformInterface.scale;\r\n }\r\n });\r\n\r\n Object.defineProperty(_thisLayerFunction, \"position\", {\r\n get: function () {\r\n return transformInterface.position;\r\n }\r\n });\r\n\r\n Object.defineProperty(_thisLayerFunction, \"anchorPoint\", {\r\n get: function () {\r\n return transformInterface.anchorPoint;\r\n }\r\n });\r\n\r\n Object.defineProperty(_thisLayerFunction, \"transform\", {\r\n get: function () {\r\n return transformInterface;\r\n }\r\n });\r\n\r\n Object.defineProperty(_thisLayerFunction, \"width\", {\r\n get: function () {\r\n if(elem.data.ty === 0) {\r\n return elem.data.w\r\n }\r\n return 100;\r\n }\r\n });\r\n\r\n Object.defineProperty(_thisLayerFunction, \"height\", {\r\n get: function () {\r\n if(elem.data.ty === 0) {\r\n return elem.data.h\r\n }\r\n return 100;\r\n }\r\n });\r\n\r\n Object.defineProperty(_thisLayerFunction, \"source\", {\r\n get: function () {\r\n return elem.data.refId;\r\n }\r\n });\r\n\r\n Object.defineProperty(_thisLayerFunction, \"index\", {\r\n get: function () {\r\n return elem.data.ind;\r\n }\r\n });\r\n\r\n Object.defineProperty(_thisLayerFunction, \"_name\", { value:elem.data.nm });\r\n Object.defineProperty(_thisLayerFunction, \"content\", {\r\n get: function(){\r\n return _thisLayerFunction.shapeInterface;\r\n }\r\n });\r\n\r\n Object.defineProperty(_thisLayerFunction, \"active\", {\r\n get: function(){\r\n return elem.isVisible;\r\n }\r\n });\r\n\r\n Object.defineProperty(_thisLayerFunction, \"text\", {\r\n get: function(){\r\n return _thisLayerFunction.textInterface;\r\n }\r\n });\r\n\r\n _thisLayerFunction.registerMaskInterface = _registerMaskInterface;\r\n _thisLayerFunction.registerEffectsInterface = _registerEffectsInterface;\r\n return _thisLayerFunction;\r\n }\r\n}());\r\n\nvar CompExpressionInterface = (function (){\r\n return function(comp){\r\n function _thisLayerFunction(name){\r\n var i=0, len = comp.layers.length;\r\n while(i<len){\r\n if(comp.layers[i].nm === name || comp.layers[i].ind === name){\r\n return comp.elements[i].layerInterface;\r\n }\r\n i += 1;\r\n }\r\n return {active:false}\r\n }\r\n Object.defineProperty(_thisLayerFunction, \"_name\", { value:comp.data.nm });\r\n _thisLayerFunction.layer = _thisLayerFunction;\r\n _thisLayerFunction.pixelAspect = 1;\r\n _thisLayerFunction.height = comp.globalData.compSize.h;\r\n _thisLayerFunction.width = comp.globalData.compSize.w;\r\n _thisLayerFunction.pixelAspect = 1;\r\n _thisLayerFunction.frameDuration = 1/comp.globalData.frameRate;\r\n return _thisLayerFunction;\r\n }\r\n}());\nvar TransformExpressionInterface = (function (){\r\n return function(transform){\r\n function _thisFunction(name){\r\n switch(name){\r\n case \"scale\":\r\n case \"Scale\":\r\n case \"ADBE Scale\":\r\n case 6:\r\n return _thisFunction.scale;\r\n case \"rotation\":\r\n case \"Rotation\":\r\n case \"ADBE Rotation\":\r\n case \"ADBE Rotate Z\":\r\n case 10:\r\n return _thisFunction.rotation;\r\n case \"position\":\r\n case \"Position\":\r\n case \"ADBE Position\":\r\n case 2:\r\n return transform.position;\r\n case \"anchorPoint\":\r\n case \"AnchorPoint\":\r\n case \"Anchor Point\":\r\n case \"ADBE AnchorPoint\":\r\n case 1:\r\n return _thisFunction.anchorPoint;\r\n case \"opacity\":\r\n case \"Opacity\":\r\n case 11:\r\n return _thisFunction.opacity;\r\n }\r\n }\r\n\r\n Object.defineProperty(_thisFunction, \"rotation\", {\r\n get: function(){\r\n return transform.rotation;\r\n }\r\n });\r\n Object.defineProperty(_thisFunction, \"scale\", {\r\n get: function () {\r\n return transform.scale;\r\n }\r\n });\r\n\r\n Object.defineProperty(_thisFunction, \"position\", {\r\n get: function () {\r\n return transform.position;\r\n }\r\n });\r\n\r\n Object.defineProperty(_thisFunction, \"xPosition\", {\r\n get: function () {\r\n return transform.xPosition;\r\n }\r\n });\r\n\r\n Object.defineProperty(_thisFunction, \"yPosition\", {\r\n get: function () {\r\n return transform.yPosition;\r\n }\r\n });\r\n\r\n Object.defineProperty(_thisFunction, \"anchorPoint\", {\r\n get: function () {\r\n return transform.anchorPoint;\r\n }\r\n });\r\n\r\n Object.defineProperty(_thisFunction, \"opacity\", {\r\n get: function () {\r\n return transform.opacity;\r\n }\r\n });\r\n\r\n Object.defineProperty(_thisFunction, \"skew\", {\r\n get: function () {\r\n return transform.skew;\r\n }\r\n });\r\n\r\n Object.defineProperty(_thisFunction, \"skewAxis\", {\r\n get: function () {\r\n return transform.skewAxis;\r\n }\r\n });\r\n\r\n return _thisFunction;\r\n }\r\n}());\nvar ProjectInterface = (function (){\r\n\r\n function registerComposition(comp){\r\n this.compositions.push(comp);\r\n }\r\n\r\n return function(){\r\n function _thisProjectFunction(name){\r\n var i = 0, len = this.compositions.length;\r\n while(i<len){\r\n if(this.compositions[i].data && this.compositions[i].data.nm === name){\r\n if(this.compositions[i].prepareFrame) {\r\n this.compositions[i].prepareFrame(this.currentFrame);\r\n }\r\n return this.compositions[i].compInterface;\r\n }\r\n i+=1;\r\n }\r\n }\r\n\r\n _thisProjectFunction.compositions = [];\r\n _thisProjectFunction.currentFrame = 0;\r\n\r\n _thisProjectFunction.registerComposition = registerComposition;\r\n\r\n\r\n\r\n return _thisProjectFunction;\r\n }\r\n}());\nvar EffectsExpressionInterface = (function (){\r\n var ob = {\r\n createEffectsInterface: createEffectsInterface\r\n };\r\n\r\n function createEffectsInterface(elem, propertyGroup){\r\n if(elem.effects){\r\n\r\n var effectElements = [];\r\n var effectsData = elem.data.ef;\r\n var i, len = elem.effects.effectElements.length;\r\n for(i=0;i<len;i+=1){\r\n effectElements.push(createGroupInterface(effectsData[i],elem.effects.effectElements[i],propertyGroup,elem));\r\n }\r\n\r\n return function(name){\r\n var effects = elem.data.ef, i = 0, len = effects.length;\r\n while(i<len) {\r\n if(name === effects[i].nm || name === effects[i].mn || name === effects[i].ix){\r\n return effectElements[i];\r\n }\r\n i += 1;\r\n }\r\n }\r\n }\r\n }\r\n\r\n function createGroupInterface(data,elements, propertyGroup, elem){\r\n var effectElements = [];\r\n var i, len = data.ef.length;\r\n for(i=0;i<len;i+=1){\r\n if(data.ef[i].ty === 5){\r\n effectElements.push(createGroupInterface(data.ef[i],elements.effectElements[i],elements.effectElements[i].propertyGroup, elem));\r\n } else {\r\n effectElements.push(createValueInterface(elements.effectElements[i],data.ef[i].ty, elem, _propertyGroup));\r\n }\r\n }\r\n\r\n function _propertyGroup(val) {\r\n if(val === 1){\r\n return groupInterface;\r\n } else{\r\n return propertyGroup(val-1);\r\n }\r\n }\r\n\r\n var groupInterface = function(name){\r\n var effects = data.ef, i = 0, len = effects.length;\r\n while(i<len) {\r\n if(name === effects[i].nm || name === effects[i].mn || name === effects[i].ix){\r\n if(effects[i].ty === 5){\r\n return effectElements[i];\r\n } else {\r\n return effectElements[i]();\r\n }\r\n }\r\n i += 1;\r\n }\r\n return effectElements[0]();\r\n }\r\n\r\n groupInterface.propertyGroup = _propertyGroup;\r\n\r\n if(data.mn === 'ADBE Color Control'){\r\n Object.defineProperty(groupInterface, 'color', {\r\n get: function(){\r\n return effectElements[0]();\r\n }\r\n });\r\n }\r\n Object.defineProperty(groupInterface, 'numProperties', {\r\n get: function(){\r\n return data.np;\r\n }\r\n });\r\n groupInterface.active = data.en !== 0;\r\n return groupInterface\r\n }\r\n\r\n function createValueInterface(element, type, elem, propertyGroup){\r\n function interfaceFunction(){\r\n if(type === 10){\r\n return elem.comp.compInterface(element.p.v);\r\n }\r\n return ExpressionValue(element.p);\r\n }\r\n\r\n if(element.p.setGroupProperty) {\r\n element.p.setGroupProperty(propertyGroup);\r\n }\r\n\r\n return interfaceFunction;\r\n }\r\n\r\n return ob;\r\n\r\n}());\nvar MaskManagerInterface = (function(){\r\n\r\n\tfunction MaskInterface(mask, data){\r\n\t\tthis._mask = mask;\r\n\t\tthis._data = data;\r\n\t}\r\n\tObject.defineProperty(MaskInterface.prototype, 'maskPath', {\r\n get: function(){\r\n if(this._mask.prop.k){\r\n this._mask.prop.getValue();\r\n }\r\n return this._mask.prop;\r\n }\r\n });\r\n\r\n\tvar MaskManager = function(maskManager, elem){\r\n\t\tvar _maskManager = maskManager;\r\n\t\tvar _elem = elem;\r\n\t\tvar _masksInterfaces = Array.apply(null,{length: maskManager.viewData.length});\r\n\t\tvar i, len = maskManager.viewData.length;\r\n\t\tfor(i = 0; i < len; i += 1) {\r\n\t\t\t_masksInterfaces[i] = new MaskInterface(maskManager.viewData[i], maskManager.masksProperties[i]);\r\n\t\t}\r\n\r\n\t\tvar maskFunction = function(name){\r\n\t\t\ti = 0;\r\n\t\t while(i<len){\r\n\t\t if(maskManager.masksProperties[i].nm === name){\r\n\t\t return _masksInterfaces[i];\r\n\t\t }\r\n\t\t i += 1;\r\n\t\t }\r\n\t\t}\r\n\t\treturn maskFunction\r\n\t}\r\n\treturn MaskManager\r\n}())\r\n\r\n\nvar ExpressionValue = (function() {\r\n\treturn function(elementProp, mult, type) {\r\n var expressionValue, arrayValue;\r\n\r\n\t\tif (elementProp.k) {\r\n elementProp.getValue();\r\n }\r\n var i, len, arrValue;\r\n if (type) {\r\n \tif(type === 'color') {\r\n \t\tlen = 4;\r\n\t\t expressionValue = Array.apply(null, {length: len});\r\n\t\t arrValue = Array.apply(null, {length: len});\r\n\t\t for (i = 0; i < len; i += 1) {\r\n\t\t expressionValue[i] = arrValue[i] = (mult && i < 3) ? elementProp.v[i] * mult : 1;\r\n\t\t }\r\n\t \texpressionValue.value = arrValue;\r\n \t}\r\n } else if (typeof elementProp.v === 'number' || elementProp.v instanceof Number){\r\n expressionValue = mult ? new Number(elementProp.v * mult) : new Number(elementProp.v);\r\n expressionValue.value = mult ? elementProp.v * mult : elementProp.v;\r\n } else {\r\n \tlen = elementProp.v.length;\r\n\t expressionValue = Array.apply(null, {length: len});\r\n\t arrValue = Array.apply(null, {length: len});\r\n\t for (i = 0; i < len; i += 1) {\r\n\t expressionValue[i] = arrValue[i] = mult ? elementProp.v[i] * mult : elementProp.v[i];\r\n\t }\r\n\t expressionValue.value = arrValue;\r\n }\r\n \r\n expressionValue.numKeys = elementProp.keyframes ? elementProp.keyframes.length : 0;\r\n expressionValue.key = function(pos) {\r\n if (!expressionValue.numKeys) {\r\n return 0;\r\n } else {\r\n return elementProp.keyframes[pos-1].t;\r\n }\r\n };\r\n expressionValue.valueAtTime = elementProp.getValueAtTime;\r\n expressionValue.propertyGroup = elementProp.propertyGroup;\r\n return expressionValue;\r\n\t}\r\n}())\nfunction SliderEffect(data,elem, dynamicProperties){\r\n this.p = PropertyFactory.getProp(elem,data.v,0,0,dynamicProperties);\r\n}\r\nfunction AngleEffect(data,elem, dynamicProperties){\r\n this.p = PropertyFactory.getProp(elem,data.v,0,0,dynamicProperties);\r\n}\r\nfunction ColorEffect(data,elem, dynamicProperties){\r\n this.p = PropertyFactory.getProp(elem,data.v,1,0,dynamicProperties);\r\n}\r\nfunction PointEffect(data,elem, dynamicProperties){\r\n this.p = PropertyFactory.getProp(elem,data.v,1,0,dynamicProperties);\r\n}\r\nfunction LayerIndexEffect(data,elem, dynamicProperties){\r\n this.p = PropertyFactory.getProp(elem,data.v,0,0,dynamicProperties);\r\n}\r\nfunction MaskIndexEffect(data,elem, dynamicProperties){\r\n this.p = PropertyFactory.getProp(elem,data.v,0,0,dynamicProperties);\r\n}\r\nfunction CheckboxEffect(data,elem, dynamicProperties){\r\n this.p = PropertyFactory.getProp(elem,data.v,0,0,dynamicProperties);\r\n}\r\nfunction NoValueEffect(){\r\n this.p = {};\r\n}\nfunction EffectsManager(data,element,dynamicProperties){\r\n var effects = data.ef;\r\n this.effectElements = [];\r\n var i,len = effects.length;\r\n var effectItem;\r\n for(i=0;i<len;i++) {\r\n effectItem = new GroupEffect(effects[i],element,dynamicProperties);\r\n this.effectElements.push(effectItem);\r\n }\r\n}\r\n\r\nfunction GroupEffect(data,element,dynamicProperties){\r\n this.dynamicProperties = [];\r\n this.init(data,element,this.dynamicProperties);\r\n if(this.dynamicProperties.length){\r\n dynamicProperties.push(this);\r\n }\r\n}\r\n\r\nGroupEffect.prototype.getValue = function(){\r\n this.mdf = false;\r\n var i, len = this.dynamicProperties.length;\r\n for(i=0;i<len;i+=1){\r\n this.dynamicProperties[i].getValue();\r\n this.mdf = this.dynamicProperties[i].mdf ? true : this.mdf;\r\n }\r\n};\r\n\r\nGroupEffect.prototype.init = function(data,element,dynamicProperties){\r\n this.data = data;\r\n this.mdf = false;\r\n this.effectElements = [];\r\n var i, len = this.data.ef.length;\r\n var eff, effects = this.data.ef;\r\n for(i=0;i<len;i+=1){\r\n switch(effects[i].ty){\r\n case 0:\r\n eff = new SliderEffect(effects[i],element,dynamicProperties);\r\n this.effectElements.push(eff);\r\n break;\r\n case 1:\r\n eff = new AngleEffect(effects[i],element,dynamicProperties);\r\n this.effectElements.push(eff);\r\n break;\r\n case 2:\r\n eff = new ColorEffect(effects[i],element,dynamicProperties);\r\n this.effectElements.push(eff);\r\n break;\r\n case 3:\r\n eff = new PointEffect(effects[i],element,dynamicProperties);\r\n this.effectElements.push(eff);\r\n break;\r\n case 4:\r\n case 7:\r\n eff = new CheckboxEffect(effects[i],element,dynamicProperties);\r\n this.effectElements.push(eff);\r\n break;\r\n case 10:\r\n eff = new LayerIndexEffect(effects[i],element,dynamicProperties);\r\n this.effectElements.push(eff);\r\n break;\r\n case 11:\r\n eff = new MaskIndexEffect(effects[i],element,dynamicProperties);\r\n this.effectElements.push(eff);\r\n break;\r\n case 5:\r\n eff = new EffectsManager(effects[i],element,dynamicProperties);\r\n this.effectElements.push(eff);\r\n break;\r\n case 6:\r\n eff = new NoValueEffect(effects[i],element,dynamicProperties);\r\n this.effectElements.push(eff);\r\n break;\r\n }\r\n }\r\n};\r\n var bodymovinjs = {};\r\n\r\n function setLocationHref (href) {\r\n locationHref = href;\r\n }\r\n function play(animation){\r\n animationManager.play(animation);\r\n }\r\n\r\n function pause(animation) {\r\n animationManager.pause(animation);\r\n }\r\n\r\n function togglePause(animation) {\r\n animationManager.togglePause(animation);\r\n }\r\n\r\n function setSpeed(value, animation) {\r\n animationManager.setSpeed(value, animation);\r\n }\r\n\r\n function setDirection(value, animation) {\r\n animationManager.setDirection(value, animation);\r\n }\r\n\r\n function stop(animation) {\r\n animationManager.stop(animation);\r\n }\r\n\r\n function moveFrame(value) {\r\n animationManager.moveFrame(value);\r\n }\r\n\r\n function searchAnimations() {\r\n if (standalone === true) {\r\n animationManager.searchAnimations(animationData, standalone, renderer);\r\n } else {\r\n animationManager.searchAnimations();\r\n }\r\n }\r\n\r\n function registerAnimation(elem) {\r\n return animationManager.registerAnimation(elem);\r\n }\r\n\r\n function resize() {\r\n animationManager.resize();\r\n }\r\n\r\n function start() {\r\n animationManager.start();\r\n }\r\n\r\n function goToAndStop(val, isFrame, animation) {\r\n animationManager.goToAndStop(val, isFrame, animation);\r\n }\r\n\r\n function setSubframeRendering(flag) {\r\n subframeEnabled = flag;\r\n }\r\n\r\n function loadAnimation(params) {\r\n if (standalone === true) {\r\n params.animationData = JSON.parse(animationData);\r\n }\r\n return animationManager.loadAnimation(params);\r\n }\r\n\r\n function destroy(animation) {\r\n return animationManager.destroy(animation);\r\n }\r\n\r\n function setQuality(value) {\r\n if (typeof value === 'string') {\r\n switch (value) {\r\n case 'high':\r\n defaultCurveSegments = 200;\r\n break;\r\n case 'medium':\r\n defaultCurveSegments = 50;\r\n break;\r\n case 'low':\r\n defaultCurveSegments = 10;\r\n break;\r\n }\r\n } else if (!isNaN(value) && value > 1) {\r\n defaultCurveSegments = value;\r\n }\r\n if (defaultCurveSegments >= 50) {\r\n roundValues(false);\r\n } else {\r\n roundValues(true);\r\n }\r\n }\r\n\r\n function inBrowser() {\r\n return typeof navigator !== 'undefined';\r\n }\r\n\r\n function installPlugin(type, plugin) {\r\n if (type === 'expressions') {\r\n expressionsPlugin = plugin;\r\n }\r\n }\r\n\r\n function getFactory(name) {\r\n switch (name) {\r\n case \"propertyFactory\":\r\n return PropertyFactory;\r\n case \"shapePropertyFactory\":\r\n return ShapePropertyFactory;\r\n case \"matrix\":\r\n return Matrix;\r\n }\r\n }\r\n bodymovinjs.play = play;\r\n bodymovinjs.pause = pause;\r\n bodymovinjs.setLocationHref = setLocationHref;\r\n bodymovinjs.togglePause = togglePause;\r\n bodymovinjs.setSpeed = setSpeed;\r\n bodymovinjs.setDirection = setDirection;\r\n bodymovinjs.stop = stop;\r\n bodymovinjs.moveFrame = moveFrame;\r\n bodymovinjs.searchAnimations = searchAnimations;\r\n bodymovinjs.registerAnimation = registerAnimation;\r\n bodymovinjs.loadAnimation = loadAnimation;\r\n bodymovinjs.setSubframeRendering = setSubframeRendering;\r\n bodymovinjs.resize = resize;\r\n bodymovinjs.start = start;\r\n bodymovinjs.goToAndStop = goToAndStop;\r\n bodymovinjs.destroy = destroy;\r\n bodymovinjs.setQuality = setQuality;\r\n bodymovinjs.inBrowser = inBrowser;\r\n bodymovinjs.installPlugin = installPlugin;\r\n bodymovinjs.__getFactory = getFactory;\r\n bodymovinjs.version = '4.13.0';\r\n\r\n function checkReady() {\r\n if (document.readyState === \"complete\") {\r\n clearInterval(readyStateCheckInterval);\r\n searchAnimations();\r\n }\r\n }\r\n\r\n function getQueryVariable(variable) {\r\n var vars = queryString.split('&');\r\n for (var i = 0; i < vars.length; i++) {\r\n var pair = vars[i].split('=');\r\n if (decodeURIComponent(pair[0]) == variable) {\r\n return decodeURIComponent(pair[1]);\r\n }\r\n }\r\n }\r\n var standalone = '__[STANDALONE]__';\r\n var animationData = '__[ANIMATIONDATA]__';\r\n var renderer = '';\r\n if (standalone) {\r\n var scripts = document.getElementsByTagName('script');\r\n var index = scripts.length - 1;\r\n var myScript = scripts[index] || {\r\n src: ''\r\n };\r\n var queryString = myScript.src.replace(/^[^\\?]+\\??/, '');\r\n renderer = getQueryVariable('renderer');\r\n }\r\n var readyStateCheckInterval = setInterval(checkReady, 100);\r\n return bodymovinjs;\r\n}));"],"names":["window","svgNS","locationHref","subframeEnabled","expressionsPlugin","isSafari","test","navigator","userAgent","cachedColors","bm_rounder","Math","round","bm_rnd","bm_pow","pow","bm_sqrt","sqrt","bm_abs","abs","bm_floor","floor","bm_max","max","bm_min","min","blitter","BMMath","ProjectInterface","i","propertyNames","Object","getOwnPropertyNames","len","length","random","val","absArr","Array","apply","defaultCurveSegments","degToRads","PI","roundCorner","roundValues","flag","roundTo2Decimals","roundTo3Decimals","styleDiv","element","style","position","top","left","display","transformOrigin","webkitTransformOrigin","backfaceVisibility","webkitBackfaceVisibility","transformStyle","webkitTransformStyle","mozTransformStyle","styleUnselectableDiv","userSelect","MozUserSelect","webkitUserSelect","oUserSelect","BMEnterFrameEvent","n","c","t","d","this","type","currentTime","totalTime","direction","BMCompleteEvent","BMCompleteLoopEvent","currentLoop","totalLoops","BMSegmentStartEvent","f","firstFrame","totalFrames","BMDestroyEvent","target","_addEventListener","eventName","callback","_cbs","push","removeEventListener","bind","_removeEventListener","splice","_triggerEvent","args","randomString","chars","undefined","result","HSVtoRGB","h","s","v","r","g","b","p","q","arguments","RGBtoHSV","addSaturationToRGB","color","offset","hsv","addBrightnessToRGB","addHueToRGB","componentToHex","hex","toString","rgbToHex","colorMap","fillToRgba","alpha","exec","parseInt","fillColorToString","colorArr","join","RenderedFrame","tr","o","iterateDynamicProperties","num","dynamicProperties","getValue","reversePath","paths","newI","newO","newV","newPaths","init","cnt","Matrix","reset","props","rotate","angle","mCos","cos","mSin","sin","_t","rotateX","rotateY","rotateZ","shear","sx","sy","skew","ax","ay","tan","skewFromAxis","scale","sz","isNaN","setTransform","a","e","j","k","l","m","translate","tx","ty","tz","transform","a2","b2","c2","d2","e2","f2","g2","h2","i2","j2","k2","l2","m2","n2","o2","p2","_identityCalculated","a1","b1","c1","d1","e1","f1","g1","h1","i1","j1","k1","l1","m1","n1","o1","p1","isIdentity","_identity","clone","matr","cloneFromProps","applyToPoint","x","y","z","applyToX","applyToY","applyToZ","inversePoint","pt","determinant","inversePoints","pts","retPts","applyToPointArray","dimensions","arr","point_pool","newPoint","applyToPointStringified","toArray","toCSS","cssParts","to2dCSS","pool","math","nodecrypto","global","width","rngname","startdenom","significance","overflow","mask","ARC4","key","keylen","me","S","count","copy","slice","flatten","obj","depth","prop","typ","mixkey","seed","smear","stringseed","charCodeAt","tostring","String","fromCharCode","options","shortseed","entropy","out","Uint8Array","crypto","msCrypto","getRandomValues","browser","plugins","Date","screen","autoseed","arc4","prng","int32","quick","double","pass","is_math_call","state","BezierFactory","ob","nm","str","replace","beziers","bezEasing","BezierEasing","kSplineTableSize","kSampleStepSize","float32ArraySupported","Float32Array","A","aA1","aA2","B","C","calcBezier","aT","getSlope","points","_p","_mSampleValues","_precomputed","get","prototype","mX1","mY1","mX2","mY2","_precompute","_getTForX","_calcSampleValues","aX","mSampleValues","intervalStart","currentSample","lastSample","guessForT","initialSlope","aGuessT","currentSlope","newtonRaphsonIterate","aA","aB","currentX","currentT","binarySubdivide","createElement","parent","child","params","instance","create","call","constructor","_parent","extendPrototype","source","destination","attr","hasOwnProperty","bezFunction","pointOnLine2D","x1","y1","x2","y2","x3","y3","det1","getBezierLength","Segment","pt1","pt2","pt3","pt4","ptCoord","perc","ptDistance","curveSegments","addedLength","point","lastPoint","lengthData","segments","BezierData","segmentLength","PointData","partial","partialLength","storedData","buildBezierData","keyData","to","ti","bezierName","bezierData","getDistancePerc","initPos","lengthPos","lPerc","dir","SegmentPoints","getSegmentsLength","shapeData","closed","pathV","pathO","pathI","_length","lengths","totalLength","getNewSegment","startPerc","endPerc","t0","t1","u0","u1","getPointInSegment","percent","pointOnLine3D","z1","z2","z3","diffDist","dist1","dist2","dist3","lastTime","vendors","requestAnimationFrame","cancelAnimationFrame","currTime","getTime","timeToCall","id","setTimeout","clearTimeout","bez","dataFunctionManager","completeLayers","layers","comps","fontManager","layerData","jLen","kLen","data","completed","tt","td","hasMask","maskProps","masksProperties","convertPathsToAbsoluteValues","findCompLayers","refId","completeShapes","shapes","singleShape","__used","JSON","parse","stringify","ks","it","path","checkVersion","minimum","animVersionString","animVersion","split","minimumVersion","checkText","iterateLayers","textLayer","documentData","animationData","assets","checkChars","pathData","__converted","checkColors","iterateShapes","checkShapes","cl","moduleOb","__complete","dataManager","FontManager","setUpNode","font","family","parentNode","document","fontFamily","node","innerHTML","fontSize","fontVariant","fontStyle","fontWeight","letterSpacing","appendChild","body","offsetWidth","w","checkLoadedFonts","fonts","loadedCount","loaded","fOrigin","origin","Typekit","load","typekitLoaded","async","active","monoCase","sansCase","removeChild","now","initTime","createHelper","def","fontData","tHelper","createElementNS","fFamily","textContent","fClass","className","tCanvasHelper","getContext","Font","addChars","found","ch","addFonts","defs","list","fontArr","fPath","rel","href","sc","setAttribute","helper","getCharData","char","getFontByName","name","fName","measureText","fontName","size","PropertyFactory","initFrame","interpolateValue","frameNum","iterationIndex","previousValue","caching","newValue","offsetTime","nextKeyData","fnc","keyframes","ind","_lastBezierData","__fnct","getBezierEasing","segmentPerc","distanceInLine","lastFrame","_lastAddedLength","_lastPoint","outX","outY","inX","inY","keyValue","sh","initP","endP","value","getValueAtCurrentTime","elem","globalData","frameId","mdf","comp","renderedFrame","endTime","_caching","lastIndex","renderResult","pv","mult","lastPValue","getNoValue","ValueProperty","kf","vel","MultiDimensionalProperty","lastValue","map","KeyframedValueProperty","st","KeyframedMultidimensionalProperty","TransformProperty","positionGetter","ExpressionValue","px","py","pz","xPositionGetter","yPositionGetter","anchorGetter","orientationGetter","or","rotationGetter","rz","scaleGetter","opacityGetter","skewGetter","sk","skewAxisGetter","sa","applyToMatrix","mat","ry","rx","processKeys","v1","v2","autoOriented","getValueAtTime","frameRate","atan2","setInverted","inverted","iv","autoOrient","getProp","defineProperty","getGradientProp","forceRender","cmdf","omdf","gradientProp","cLength","DashProperty","dataProps","renderer","dasharray","dashoffset","TextSelectorProp","updateRange","newCharsFlag","totalChars","textProperty","currentData","divisor","_s","finalS","finalE","getMult","easer","ne","xe","tot","getDashProp","getTextSelectorProp","ShapePath","_maxLength","setPathData","setLength","doubleArrayLength","concat","setXYAt","pos","setTripleAt","vX","vY","oX","oY","iX","iY","ShapePropertyFactory","interpolateShape","isCurrentRender","keyPropS","keyPropE","isHold","vertexValue","hasModified","resetShape","localShapeCollection","ShapeProperty","__shapeObject","shape_pool","shapeCollection_pool","newShapeCollection","addShape","KeyframedShapeProperty","_lastIndex","newShape","EllShapeProperty","cPoint","convertEllToPath","p0","s0","s1","StarShapeProperty","convertPolygonToPath","numPts","rad","roundness","os","perimSegment","currentAng","ox","oy","convertStarToPath","longFlag","longRad","shortRad","ir","longRound","shortRound","is","longPerimSegment","shortPerimSegment","convertToPath","RectShapeProperty","convertRectToPath","v0","dataProp","keys","ShapeModifiers","modifiers","registerModifier","factory","getModifier","ShapeModifier","TrimModifier","RoundCornersModifier","RepeaterModifier","ShapeCollection","initModifierProperties","addShapeToModifier","shape","sValue","eValue","oValue","calculateShapeEdges","shapeLength","totalModifierLength","segmentOb","shapeSegments","shapeS","shapeE","processShapes","shapePaths","pathsData","totalShapeLength","releaseShapes","edges","newShapesData","addShapes","lastShape","pop","addPaths","addSegment","shapePath","shapeSegment","currentLengthData","segmentCount","segment","rd","processPath","cloned_path","currentV","currentI","currentO","closerV","distance","newPosPerc","index","pMatrix","rMatrix","sMatrix","tMatrix","matrix","applyTransforms","inv","scaleX","scaleY","elemsData","_currentCopies","_elements","_groups","unshift","resetElements","elements","_processed","cloneElements","newElements","changeGroupRender","renderFlag","_render","copies","ceil","group","reloadShapes","cont","offsetModulo","roundOffset","pProps","rProps","sProps","iteration","itemsTransform","items","mProps","release","ImagePreloader","imagesLoadedCb","imageLoaded","loadedAssets","totalImages","getAssetsPath","assetData","assetsPath","imagePath","indexOf","u","loadImage","img","addEventListener","src","loadAssets","cb","totalAssets","setPath","setAssetsPath","featureSupport","maskType","filtersFactory","filId","fil","feColorMatrix","TextAnimatorProperty","textData","renderType","_firstFrame","_hasMaskedPath","_frameId","_dynamicProperties","_textData","_renderType","_elem","_animatorsData","_pathData","_moreOptions","alignment","renderedLetters","lettersChangedFlag","LetterProps","sw","fc","TextProperty","keysIndex","ascent","boxWidth","fStyle","fWeight","justifyOffset","lh","lineWidths","ls","of","fillColorAnim","strokeColorAnim","strokeWidthAnim","yOffset","searchProperty","searchProperties","animatorData","animatorProps","fh","fs","fb","maskManager","getMaskProperty","getMeasures","xPos","yPos","animators","matrixHelper","mHelper","renderedLettersCount","letters","pathInfo","tLength","pi","currentPoint","prevPoint","currentLength","segmentInd","pointInd","tanAngle","letterValue","yOff","firstLine","offf","xPathPos","yPathPos","elemOpacity","letterSw","letterSc","letterFc","letterO","initPathPos","initSegmentInd","initPointInd","currentLine","letterM","letterP","defaultPropsArray","line","extra","an","animatorOffset","anIndexes","add","rot","atan","ps","update","updated","setCurrentData","textDocumentData","textKeys","completeTextData","newLineFlag","charData","anchorGrouping","currentSize","currentPos","lineWidth","maxLineWidth","styles","toLowerCase","trackingOffset","lastSpaceIndex","charAt","substr","currentChar","uncollapsedSpaces","letterData","based","indexes","rn","newInd","currentInd","updateDocumentData","newData","dData","pooling","cloned","releaseArray","shapePathsCollection","shapeCollection","originCollection","BaseRenderer","SVGRenderer","animationItem","config","renderConfig","preserveAspectRatio","progressiveLoad","hideOnTransparent","viewBoxOnly","pendingElements","destroyed","MaskElement","viewData","maskElement","rect","expansor","feMorph","properties","currentMasks","layerId","maskRef","mode","filterID","expan","lastPath","lastOperator","filterId","lastRadius","solidPath","createLayerSolidPath","op","getShapeProp","invRect","drawPath","maskedElement","BaseElement","SVGBaseElement","parentContainer","placeholder","matteElement","transformedElement","isTransparent","_sizeChanged","IShapeElement","shapesData","stylesList","itemsData","prevViewData","shapeModifiers","processedElements","checkLayers","ip","buildItem","checkPendingElements","createItem","layer","createImage","createComp","createSolid","createShape","createText","createCamera","createBase","Error","buildAllItems","includeLayers","newLayers","setProjectInterface","pInterface","projectInterface","initItems","buildElementParenting","parentName","hierarchy","_isParent","setHierarchy","addPendingElement","layerElement","SVGTextElement","IImageElement","ICompElement","ISolidElement","configAnimation","animData","height","wrapper","getAssetData","compSize","fr","maskId","destroy","updateContainerSize","registerComposition","initExpressions","appendElementInPos","setMatte","checkParenting","renderFrame","currentFrame","prepareFrame","newElement","getBaseElement","nextElement","insertBefore","hide","show","searchExtraCompositions","floatingContainer","xt","finalMat","finalTransform","mProp","getMaskelement","pathNodes","pathString","checkMasks","isVisible","elemMdf","sr","currentFrameNum","globalToLocal","transforms","ptNew","layerInterface","LayerExpressionInterface","registerMaskInterface","effectsInterface","EffectsExpressionInterface","createEffectsInterface","registerEffectsInterface","compInterface","CompExpressionInterface","shapeInterface","ShapeExpressionInterface","createShapeInterface","textInterface","TextExpressionInterface","setBlendMode","blendModeValue","bm","baseElement","ef","effects","EffectsManager","hidden","lastNum","matMdf","opMdf","opacity","ao","createElements","addMasks","getType","resetHierarchy","getHierarchy","getLayerSize","sourceRectAtTime","layerElementParent","masker","createFilter","createAlphaToLuminanceFilter","gg","maskGroup","maskGrouper","alphaRect","ln","cp","clipId","cpGroup","effectsManager","SVGEffects","parentTransform","hd","identityMatrix","lcEnum","ljEnum","searchProcessedElement","addProcessedElement","buildExpressionInterface","searchShapes","setGradientData","pathElement","gfill","gradientId","stop","stops","gf","cst","setGradientOpacity","styleOb","opFill","opacityId","ost","msElem","createStyleElement","level","elementData","ld","lvl","lc","lj","ml","pElem","createGroupElement","gr","createTransformElement","createShapeElement","ownTransformers","caches","transformers","lStr","addShapeToModifiers","ITextElement","textSpans","SVGTintFilter","filter","filterManager","matrixFilter","effectElements","feMergeNode","feMerge","SVGFillFilter","SVGStrokeEffect","initialized","SVGTritoneFilter","feComponentTransfer","feFuncR","feFuncG","feFuncB","SVGProLevelsFilter","createFeFunc","feFuncA","feFuncRComposed","feFuncGComposed","feFuncBComposed","SVGDropShadowEffect","feGaussianBlur","feOffset","feFlood","feComposite","originalNodeAdded","SVGMatte3Effect","filterElem","filters","supports3d","tm","setElementStyles","renderModifiers","container","render","currentTransform","modifier","processedPos","ownStyles","ownModifiers","parentMatrix","renderShape","renderPath","renderFill","renderGradient","renderStroke","buildShapeString","shapeString","itemData","pathStringTransformed","redraw","lLen","iterations","styleData","styleElem","attr1","attr2","cValues","oValues","ang","dist","textAnimator","buildNewText","createPathShape","shapeStr","applyTextPropertiesToMatrix","lineNumber","buildColor","colorData","emptyProp","textContainer","usesGlyphs","tSpan","tElement","justify","cachedSpansLength","setAttributeNS","time","renderLetters","textBox","getBBox","bbox","renderedLetter","textSpan","colorBlack","colorWhite","initialize","groupPath","elemChildren","children","childNodes","removeAttribute","pathMasker","dasharrayValue","getTotalLength","lineLength","units","color1","color2","color3","tableR","tableG","tableB","feFunc","getTableValue","inputBlack","inputWhite","gamma","outputBlack","outputWhite","colorValue","table","outputDelta","inputDelta","col","setElementAsMask","timeRemapped","renderParent","setElements","elems","getElements","assetPath","innerElem","animationManager","registeredAnimations","idled","playingAnimationsNum","removeElement","ev","animItem","animation","isPaused","subtractPlayingCount","registerAnimation","AnimationItem","setupAnimation","setData","addPlayingCount","first","resume","nowTime","elapsedTime","advanceTime","start","loadAnimation","setParams","setSpeed","setDirection","play","moveFrame","pause","togglePause","searchAnimations","standalone","animElements","getElementsByClassName","getElementsByTagName","div","resize","goToAndStop","isFrame","isLoaded","currentRawFrame","frameMult","playSpeed","playDirection","playCount","prerenderFramesFlag","autoplay","loop","animationID","scaleMode","timeCompleted","segmentPos","pendingSegment","_idle","CanvasRenderer","clearCanvas","context","dpr","devicePixelRatio","contextData","saved","savedOp","cArrPos","cTr","cO","transformMat","HybridRenderer","threeDElements","camera","CVBaseElement","canvasContext","CVCompElement","compGlobalData","compHeight","compWidth","parentGlobalData","cv","canvas","CVImageElement","CVMaskElement","CVShapeElement","CVSolidElement","CVTextElement","stroke","fill","currentRender","values","sWidth","fValue","HBaseElement","HSolidElement","HCompElement","HShapeElement","currentBBox","self","animType","rendererSettings","prerender","autoloadSegments","xhr","XMLHttpRequest","lastIndexOf","fileName","open","send","onreadystatechange","readyState","status","responseText","response","err","wrapperAttributes","attributes","getNamedItem","tf","completeData","loadNextSegment","trigger","shift","segmentPath","loadSegments","_this","imagePreloader","updaFrameModifier","waitForFontsLoaded","checkLoaded","checkFontsLoaded","elementLoaded","gotoFrame","setSubframe","setCurrentRawFrameValue","frameModifier","goToAndPlay","adjustSegment","updateAnimation","setSegment","end","pendingFrame","playSegments","forceFlag","resetSegments","checkSegments","remove","onEnterFrame","onLoopComplete","onComplete","onSegmentStart","onDestroy","getPath","getAssets","triggerEvent","ctxTransform","trProps","ctxOpacity","globalAlpha","restore","save","actionFlag","popped","mozTransformOrigin","isDashed","transformCanvas","elementWidth","elementHeight","elementRel","animationRel","offsetHeight","par","fillType","clearRect","beginPath","closePath","clip","newDOMElement","ddd","addTo3dContainer","nextDOMElement","nextLayer","getThreeDContainerByPos","HTextElement","HCameraElement","HImageElement","startPos","endPos","perspectiveElem","createThreeDContainer","webkitTransform","resizerElem","threeDContainerData","build3dContainers","lastThreeDContainerData","svg","setup","cWidth","cHeight","perspective","webkitPerspective","checkBlendMode","blendMode","globalCompositeOperation","maxScale","drawImage","widthCrop","heightCrop","ctx","imgW","imgH","imgRel","canvasRel","imageFailed","failed","Image","hasMasks","moveTo","lineTo","bezierCurveTo","transformHelper","dashResetter","co","wi","da","do","nodes","trNodes","hasStrokes","hasFills","fl","ownArrays","isMain","groupTransform","groupMatrix","mtArr","strokeStyle","lineCap","lineJoin","miterLimit","fillStyle","coOp","setLineDash","lineDashOffset","p3","groupTransformMat","fillRect","hasFill","hasStroke","commands","pathArr","lastFill","lastStroke","lastStrokeW","getDomElement","divElement","compSvg","textPaths","isMasked","pe","_renderShapeFrame","shapesContainer","shapeCont","boundingBox","changed","compW","compH","innerElemStyle","strokeWidth","lineHeight","tParent","tCont","textPath","margin","imageElem","diffVector","mag","lookDir","lookLengthOnXZ","m_rotationX","m_rotationY","Expressions","getStaticValueAtTime","loopOut","duration","durationFlag","cycleDuration","firstKeyFrame","lastKeyFrame","ret","initV","endV","current","repeats","nextLastValue","loopIn","firstValue","nextFirstValue","_cachingAtTime","interpolationResult","getVelocityAtTime","velocity","delta","setGroupProperty","propertyGroup","searchExpressions","getPreValue","ExpressionManager","initiateExpression","getTransformValueAtTime","console","log","getTransformStaticValueAtTime","TextExpressionSelectorProp","getValueProxy","total","textIndex","textTotal","selectorValue","propertyGetProp","numKeys","isAdded","ix","ShapePropertyConstructorFunction","getConstructorFunction","KeyframedShapePropertyConstructorFunction","getKeyframedConstructorFunction","vertices","inTangents","outTangents","isClosed","pointOnPath","_segmentsLength","segmentsLength","accumulatedLength","initIndex","endIndex","vectorOnPath","vectorType","xLength","yLength","magnitude","tangentOnPath","normalOnPath","_shapeValueAtTime","_lastIndexAtTime","_lastTimeAtTime","propertyGetShapeProp","trims","propertyGetTextProp","getExpressionValue","calculateExpression","duplicatePropertyValue","Number","shapesEqual","shape1","shape2","$bm_neg","tOfA","lenA","retArr","sum","tOfB","lenB","sub","mul","mod","clamp","mm","radiansToDegrees","radians_to_degrees","degreesToRadians","degrees_to_radians","helperLengthArray","arr1","arr2","normalize","vec","rgbToHsl","hslToRgb","hue2rgb","linear","tMin","tMax","value1","value2","rnd","createPath","property","needsVelocity","_needsRandom","elemType","content","effect","thisComp","thisProperty","frameDuration","inPoint","outPoint","loop_in","loop_out","toWorld","fromWorld","fromComp","fromCompToSurface","anchorPoint","thisLayer","valueAtTime","velocityAtTime","fn","Function","eval","bindedFn","wiggle","freq","amp","addedAmps","periods","loopInDuration","loopOutDuration","lookAt","elem1","elem2","fVec","pitch","easeOut","val1","val2","nearestKey","keyTime","framesToTime","frames","fps","timeToFrames","seedRandom","seedrandom","randSeed","hasParent","executeExpression","frameExpressionId","lock","view","shapeInterfaceFactory","createGroupInterface","groupInterfaceFactory","createTrimInterface","trimInterfaceFactory","createStrokeInterface","strokeInterfaceFactory","createTransformInterface","transformInterfaceFactory","createEllipseInterface","ellipseInterfaceFactory","createStarInterface","starInterfaceFactory","createRectInterface","rectInterfaceFactory","createRoundedInterface","roundedInterfaceFactory","createRepatearInterface","repeaterInterfaceFactory","createPathInterface","pathInterfaceFactory","createFillInterface","fillInterfaceFactory","iterateElements","interfaces","_interfaceFunction","_name","interfaceFunction","mn","propertyIndex","numProperties","cix","contentsInterfaceFactory","transformInterface","np","_propertyGroup","_dashPropertyGroup","dashOb","addPropertyToDashOb","rotation","skewAxis","outerRadius","outerRoundness","innerRoundness","innerRadius","radius","_prevValue","_sourceText","_thisLayerFunction","stringValue","toWorldMat","TransformExpressionInterface","toComp","MaskManagerInterface","pixelAspect","_thisFunction","xPosition","yPosition","compositions","_thisProjectFunction","createValueInterface","groupInterface","en","effectsData","MaskInterface","_mask","_data","_masksInterfaces","elementProp","expressionValue","arrValue","SliderEffect","AngleEffect","ColorEffect","PointEffect","LayerIndexEffect","MaskIndexEffect","CheckboxEffect","NoValueEffect","effectItem","GroupEffect","eff","bodymovinjs","setLocationHref","setSubframeRendering","setQuality","inBrowser","installPlugin","plugin","getFactory","checkReady","clearInterval","readyStateCheckInterval","getQueryVariable","variable","vars","queryString","pair","decodeURIComponent","__getFactory","version","scripts","myScript","setInterval","root"],"sourceRoot":""}