{"version":3,"mappings":"6WAyDA,MAAMA,GAAoE,CACtEC,iBAAiB,GAsEd,IAAMC,GAAb,MAAM,sDAAOA,6DARE,CACP,CACIC,QAASC,KACTC,SAAUL,KAEjBM,SA7CQ,CACLC,KACAC,KACAC,MACAC,KACAC,MACAC,MAEAC,KACAC,MACAC,KACAC,KACAC,KACAC,MACAC,KACAC,MACAC,MAIAX,KACAC,MACAC,SA0BKV,GAAb,kPCxHO,IAAMoB,EAAb,MAAM,QAOJC,YAAoBC,EAA0BC,GAA1BC,YAA0BA,gBAHvCA,sBAA2B,EAC3BA,sBAAmB,IAAIC,MAK9BC,yBAAyBC,GACvB,OAAOH,KAAKF,KAAKM,IAAID,GAGvBE,QAAWC,GACT,OAAON,KAAKF,KAAKM,IAAOE,GAG1BC,yBAAyBC,EAAiBC,EAAgBC,GAC1C,WAAVA,EACFF,EAAU,kBAAUA,EAEH,SAAVE,IACPF,EAAU,aAAUA,GAEtBR,KAAKD,SAASY,KAAKH,EAASC,EAAQ,CAClCG,SAAU,IACVC,iBAAkB,MAClBC,mBAAoB,WAIjBC,0BACY,QAAjBC,OAAKC,oBAAYC,SAAEC,SAGdC,0BACW,QAAhBJ,OAAKK,mBAAWH,SAAEC,SAEbG,yBACW,QAAhBN,OAAKK,mBAAWH,SAAEK,QAEbC,oBACO,QAAZR,OAAKS,eAAOP,SAAEQ,OAETC,oBACO,QAAZX,OAAKS,eAAOP,SAAEU,OAGTC,UAAUC,GACf9B,KAAK+B,iBAAiBC,KAAKF,iDAlDlBlC,GAAcqC,qDAAdrC,EAAcsC,QAAdtC,EAAc,YAAdA,GAAb,GCJM,SAANC,cAEIG,YAAiB,KACjBA,YAA4B,MAMzB,IAAMmC,GAAb,MAAM,QAMFtC,YAAoBE,mBALZC,kBAA2BoC,QAG3BpC,wBAAoB,EAI5BqC,iBAAiB7B,EAAcC,EAAiB6B,EAA4BC,EAAsB,GAAIC,EAAwB,iBAErHF,KACDA,EAAS,IAAIG,OACN7B,SAAW,IAClB0B,EAAOzB,iBAAmB,SAC1ByB,EAAOxB,mBAAqB,MAC5BwB,EAAOI,WAAa,CAACF,IAGzB,MAAMG,EAAY,IAAIC,GACtBD,EAAUnC,QAAUA,EACpBmC,EAAUlC,OAASA,EACnBkC,EAAUL,OAASA,EACnBK,EAAUJ,YAAcA,EAExBvC,KAAK6C,aAAaC,KAAKH,GAElB3C,KAAK+C,mBACN/C,KAAKgD,WAILA,WACJ,GAAiC,IAA7BhD,KAAK6C,aAAaI,OAClB,OAGJ,MAAMzC,EAAUR,KAAK6C,aAAaK,QAClClD,KAAK+C,mBAAoB,EAEE,YAA3B/B,EAAYuB,aACRY,QAAQC,IAAI,KAAM5C,GAClBR,KAAKqD,YAAcrD,KAAKD,SAASuD,iBAAiB9C,EAAQA,QAASA,EAAQ8B,UAG3Ea,QAAQC,IAAI,OAAQ5C,GACpBR,KAAKqD,YAAcrD,KAAKD,SAASY,KAAKH,EAAQA,QAASA,EAAQC,OAAQD,EAAQ8B,SAEnFtC,KAAKqD,YAAYE,iBAAiBC,UAAU,KACxCxD,KAAK+C,mBAAoB,EACzB/C,KAAKgD,aAIbS,cACIzD,KAAK0D,aAAaC,4DAtDbxB,GAAgBF,yCAAhBE,EAAgBD,QAAhBC,EAAgB,YAAhBA,GAAb,GCkJayB,GAAb,MAAM,sDAAOA,6DAFE,CAAChE,EAAgBuC,IAAiBvD,SAjGpC,CACLiF,KACAC,KACAjF,KACAkF,MACAjF,KACAC,MACAP,GAEAW,KACA6E,MACAC,MACAC,KACAvE,KACAwE,KACAC,MACAC,MACAC,KACA/E,KACAF,KACAkF,KACA/E,MACAF,KACAkF,KACAC,KACAC,IACAhF,MACAiF,MACAC,KACAC,KACAC,KACAC,KACAC,MACAC,KAAqBC,KACrBC,KACA/F,MACAgG,MACAC,OAcAxB,KACAC,KACAC,MACAhF,MACAP,GAEAW,KACA6E,MACAC,MACAC,KACAvE,KACAwE,KACAC,MACAC,MACAC,KACA/E,KACAF,KACAkF,KACA/E,MACAF,KACAkF,KACAC,KACAC,IACAhF,MACAiF,MACAC,KACAC,KACAC,KACAC,KACAC,MACAC,KACAC,KACAC,KACA/F,MACAgG,MACAC,SAaKzB,GAAb,GC5Ja0B,GAAb,MAAM,QACJzF,eAGO0F,UACL,IAAIC,EAEAC,EAGJ,IADAD,EAAS,GACJC,EAAI,EAAGA,EAAI,GAAIA,KACT,GAALA,GAAe,IAALA,GAAgB,IAALA,GAAgB,IAALA,KAClCD,GAAkB,KAEpBA,GADIE,KAAKC,MAAsB,GAAhBD,KAAKE,UAAeC,SAAS,IAAIC,cAGlD,OAAON,EAGFO,gBACL,IAAIP,EAEAC,EAGJ,IADAD,EAAS,GACJC,EAAI,EAAGA,EAAI,GAAIA,IAElBD,GADIE,KAAKC,MAAsB,GAAhBD,KAAKE,UAAeC,SAAS,IAAIC,cAGlD,OAAON,gDA7BEF,gCAAYpD,QAAZoD,EAAY,YAAZA,GAAb,GCKaU,GAAb,MAAM,QAQJnG,YAAoBoG,eAHpBjG,gBAAqB,EACrBA,mBAAyB,EAGvBA,KAAKkG,aAAe,GACpBlG,KAAKmG,YAAc,GACnBnG,KAAKoG,YAAc,GAGrBC,gBAAgBC,GACdA,SAAYL,KAAOjG,KAAKiG,KAAKV,UAC7Be,EAAYC,WAAaC,KAAKC,MAE9BzG,KAAKkG,aAAaQ,QAAQJ,GAEnBA,EAGTK,WAAWV,EAAcW,GACvB,IAAIC,EAAe7G,KAAKkG,aAAaY,KAAKC,GAAKA,EAAEd,MAAQA,GACzDY,EAAaG,cAAgBJ,EAAWf,WACxCgB,EAAaI,YAAcL,EAAWlG,OACtCmG,EAAaK,SAAWV,KAAKC,MAE7BzG,KAAKmG,YAAYO,QAAQG,GACzB7G,KAAKmH,mBAAmBlB,GAEC,KAArBW,EAAWlG,SACbV,KAAKoH,WAAY,GAIrBD,mBAAmBlB,GACjB,IAAIoB,EAAQrH,KAAKkG,aAAaoB,UAAUP,GAAKA,EAAEd,MAAQA,GACvD,GAAIoB,GAAQ,EAAI,CACd,IAAIR,EAAe7G,KAAKkG,aAAaY,KAAKC,GAAKA,EAAEd,MAAQA,GACzDY,EAAaK,SAAWV,KAAKC,MAC7BI,EAAaU,wBAA0BV,EAAaK,SAAWL,EAAaN,WAE5EvG,KAAKoG,YAAYM,QAAQG,GAEzB7G,KAAKkG,aAAasB,OAAOH,EAAO,IAIpCI,sBACE,OAAOzH,KAAKoH,wDAnDHpB,GAAiB/D,sCAAjB+D,EAAiB9D,QAAjB8D,EAAiB,YAAjBA,GAAb,GCRM,SAANnG,cACSG,iBAAsB,GCIxB,IAAM0H,EAAb,MAAM,QADN7H,cAEWG,iBAA2B,IAAI2H,iDAD7BD,gCAAmBxF,QAAnBwF,EAAmB,YAAnBA,GAAb,kBCLM,UCAA,uBCYC,IAAME,EAAb,MAAM,QAEJ/H,YAAoBC,EAA0B+H,EAAoC7B,GAA9DhG,YAA0BA,oBAAoCA,yBAG1E8H,cAAcxH,GACpB,IAAIyH,EAAmB,IAAIzB,GAC3ByB,SAAiBC,SAAW1H,EAErBN,KAAKgG,kBAAkBK,gBAAgB0B,GAGzCE,gBAAmB3H,EAAa4H,GAErC,IAAIC,EAAYnI,KAAK8H,cAAcxH,GAE/B8H,GAAU,IAAIC,MAAcC,IAAI,gBAAiB,UAAYJ,GAE7DK,EAASvI,KAAKF,KAAKM,IAAOE,EAAK,CAAEkI,QAASJ,IAAWK,QAAKC,QAC9DH,SAAO/E,UAAU,KACfmF,GAAS3I,KAAKgG,kBAAkBW,WAAWwB,EAAUlC,KAAM0C,GAC3D,IAAM3I,KAAKgG,kBAAkBmB,mBAAmBgB,EAAUlC,OAGrDsC,EAGDK,gBAGN,OAFc,IAAIP,MAAcC,IAAI,gBAAiB,UAAYtI,KAAK6H,aAAagB,kBAK7EC,cAGN,OAFc,IAAIT,MAAcC,IAAI,eAAgB,wBAK9CS,uBAAuBzI,EAAa4H,GAE1C,IAAIC,EAAYnI,KAAK8H,cAAcxH,GAG/BiI,EAASvI,KAAKF,KAAKM,IAAIE,EAAK,CAAE0I,QAAS,aAAcP,QAAKC,QAC9DH,SAAO/E,UAAU,KACfmF,GAAS3I,KAAKgG,kBAAkBW,WAAWwB,EAAUlC,KAAM0C,GAC3D,IAAM3I,KAAKgG,kBAAkBmB,mBAAmBgB,EAAUlC,OAGrDsC,EAGFU,gBAAmB3I,EAAa4I,GACrC,IAAIf,EAAYnI,KAAK8H,cAAcxH,GAE/BiI,EAASvI,KAAKF,KAAKM,IAAOE,EAAK,CAAEkI,SAAS,IAAIH,MAAcC,IAAI,oCAAqCY,GAAWF,QAAS,aAAcP,QAAKC,QAChJH,SAAO/E,UAAU,KACfmF,GAAS3I,KAAKgG,kBAAkBW,WAAWwB,EAAUlC,KAAM0C,GAC3D,IAAM3I,KAAKgG,kBAAkBmB,mBAAmBgB,EAAUlC,OAGrDsC,EAGFY,iBAAoBC,EAAaC,EAAiBH,GACvD,IAAIf,EAAYnI,KAAK8H,cAAcsB,GAE/Bb,EAASvI,KAAKF,KAAKwJ,KAAQF,EAAKC,EAAY,CAAEb,SAAS,IAAIH,MAAcC,IAAI,oCAAqCY,GAAWF,QAAS,aAAcP,QAAKC,QAE7JH,SAAO/E,UAAU,KACfmF,GAAS3I,KAAKgG,kBAAkBW,WAAWwB,EAAUlC,KAAM0C,GAC3D,IAAM3I,KAAKgG,kBAAkBmB,mBAAmBgB,EAAUlC,OAErDsC,EAGFgB,UAAaH,EAAaC,GAC/B,IAAIlB,EAAYnI,KAAK8H,cAAcsB,GAE/Bb,EAASvI,KAAKF,KAAKwJ,KAAQF,EAAKC,EAAY,CAAEb,QAASxI,KAAK4I,gBAAkBI,QAAS,aAAeP,QAAKC,QAE/GH,SAAO/E,UAAU,KACfmF,GAAS3I,KAAKgG,kBAAkBW,WAAWwB,EAAUlC,KAAM0C,GAC3D,IAAM3I,KAAKgG,kBAAkBmB,mBAAmBgB,EAAUlC,OAErDsC,EAGFiB,sBAAsBJ,EAAaK,GACtC,OAAOzJ,KAAKF,KAAKwJ,KAAKF,EAAKK,EAAU5D,WAAY,CAAE2C,SAAS,IAAIH,MAAcC,IAAI,eAAgB,uCAAuCG,QAAKC,QAG3IgB,SAAYN,EAAaC,GAC9B,IAAIlB,EAAYnI,KAAK8H,cAAcsB,GAE/Bb,EAASvI,KAAKF,KAAK6J,IAAOP,EAAKC,EAAY,CAAEb,QAASxI,KAAK4I,gBAAiBI,QAAS,aAAcP,QAAKC,QAE5GH,SAAO/E,UAAU,KACfmF,GAAS3I,KAAKgG,kBAAkBW,WAAWwB,EAAUlC,KAAM0C,GAC3D,IAAM3I,KAAKgG,kBAAkBmB,mBAAmBgB,EAAUlC,OAErDsC,EAGFqB,YAAYR,GACjB,IAAIjB,EAAYnI,KAAK8H,cAAcsB,GAE/Bb,EAASvI,KAAKF,KAAK+J,OAAOT,EAAK,CAAEZ,QAASxI,KAAK4I,gBAAiBI,QAAS,aAAcP,QAAKC,QAChGH,SAAO/E,UAAU,KACfmF,GAAS3I,KAAKgG,kBAAkBW,WAAWwB,EAAUlC,KAAM0C,GAC3D,IAAM3I,KAAKgG,kBAAkBmB,mBAAmBgB,EAAUlC,OAErDsC,EAGFuB,mBAAmBC,GACxB,OAAiB,MAAbA,GAIqB,MAArBA,EAAUvB,QAHL,IAAIwB,EAONC,KAAKC,MAAMH,EAAUvB,QAAQpI,IAAI,iBAGnC+J,kBAAkB7J,GACvB,OAAON,KAAK+I,uBAAuBzI,EAAKN,KAAK6H,aAAagB,kBAGrDuB,YAAe9J,GACpB,OAAON,KAAKiI,gBAAmB3H,EAAKN,KAAK6H,aAAagB,kBAGjDwB,sBAAyB/J,GAC9B,IAAI6H,EAAYnI,KAAK8H,cAAcxH,GAE/BiI,EAASvI,KAAKF,KAAKM,IAAIE,GAAKmI,QAAKC,QACrCH,SAAO/E,UAAU,KACfmF,GAAS3I,KAAKgG,kBAAkBW,WAAWwB,EAAUlC,KAAM0C,GAC3D,IAAM3I,KAAKgG,kBAAkBmB,mBAAmBgB,EAAUlC,OAGrDsC,EAMF+B,cAAiBlB,EAAaC,GACnC,IAAIlB,EAAYnI,KAAK8H,cAAcsB,GAE/Bb,EAASvI,KAAKF,KAAKwJ,KAAQF,EAAKC,EAAY,CAAEb,QAASxI,KAAK8I,cAAgBE,QAAS,aAAeP,QAAKC,QAE7GH,SAAO/E,UAAU,KACfmF,GAAS3I,KAAKgG,kBAAkBW,WAAWwB,EAAUlC,KAAM0C,GAC3D,IAAM3I,KAAKgG,kBAAkBmB,mBAAmBgB,EAAUlC,OAErDsC,EAGDgC,YAAY5B,GAClBxF,eAAQwF,MAAMA,GACP6B,WAAiB7B,EAAM8B,QAAU,8DArK/B7C,GAAgB3F,8DAAhB2F,EAAgB1F,QAAhB0F,EAAgB,YAAhBA,GAAb,GCPa8C,GAAb,MAAM,QAEF7K,eAEO8K,gBAAgBC,EAAOC,EAAeC,GAEzC,IAAIC,EAAS,IAAIf,EAEjBe,EAAOC,aAAeC,OAAOJ,IAAS,EACtCE,EAAOD,UAAYA,GAAa,GAChCC,EAAOG,YAAcN,EAAM3H,OAE3B,IACIkI,EAAiBP,EAAMQ,OADbL,EAAOC,aAAe,GAAKD,EAAOD,WACPM,MAAM,EAAGL,EAAOD,WACrDO,EAAc3F,KAAK4F,KAAKV,EAAM3H,OAAS8H,EAAOD,WAC9CS,EAAkBF,EAAcN,EAAOC,aAAgBD,EAAOC,aAAe,EAAI,KACjFQ,EAAqBT,EAAOC,aAAe,EAAID,EAAOC,aAAe,EAAI,KAE7ED,SAAOM,YAAcA,EAEC,MAAlBE,IACAR,EAAOQ,eAAiBE,OAAOF,IAET,MAAtBC,IACAT,EAAOS,mBAAqBC,OAAOD,IAEhC,CACHxB,WAAYe,EACZW,KAAMP,iDA5BLT,gCAAkBxI,QAAlBwI,EAAkB,YAAlBA,GAAb,GCHM,UCAA,UCFA,SAAN7K,cAQSG,mBAA6B,EAC7BA,oBAA4B,EAC5BA,gBAA4B,EAC5BA,cAA4B,GCP9B,IAAM2L,GAAb,MAAM,QAKJ9L,cAHAG,iBAAwB,CAAC,UAAW,WAAY,QAAS,QAAS,MAAO,OAAQ,OAAQ,SAAU,YAAa,UAAW,WAAY,YACvIA,eAAsB,CAAC,SAAU,SAAU,UAAW,YAAa,WAAY,SAAU,YAKzF4L,SAASC,GACP,OAAOA,EAAUC,WAAa,IAAItF,KAAKA,KAAKC,OAAOqF,WAAaD,EAAUE,YAAc,IAAIvF,KAAKA,KAAKC,OAAOsF,YAAcF,EAAUG,eAAiB,IAAIxF,KAAKA,KAAKC,OAAOuF,cAG7KC,YAAYJ,GACV,OAAOA,EAAUG,cAAgB,KAAOH,EAAUE,WAAa,GAAK,IAAOF,EAAUC,UAGvFI,mBAAmBL,GACjB,OAAOA,EAAUG,cAAgB,IAAMhM,KAAKmM,YAAYN,EAAUE,YAAc,IAAM/L,KAAKmM,YAAYN,EAAUC,WAGnHM,aAAaC,GACX,IAAIC,EAAmB,IAAI9F,KAAK6F,GAEhC,OAAOC,EAAWN,cAAgB,IAAMhM,KAAKmM,YAAYG,EAAWP,YAAc,IAAM/L,KAAKmM,YAAYG,EAAWR,WAGtHS,YAAYF,GACV,IAAIC,EAAmB,IAAI9F,KAAK6F,GAEhC,OAAOC,EAAWN,cAAgB,IAAMhM,KAAKmM,YAAYG,EAAWP,WAAa,GAAK,IAAM/L,KAAKmM,YAAYG,EAAWR,WAG1HK,YAAYK,GACV,OAAQ,IAAMA,GAAYC,OAAOD,EAAW3G,WAAW5C,OAAS,GAGlEyJ,UAAUL,GACR,GAAYM,MAARN,EAAqB,MAAO,GAEhC,IAAIO,EAAc,IAAIpG,KAAK6F,GAE3B,OAAOrM,KAAK6M,UAAUD,EAAYE,UAAY,IAAMF,EAAYd,UAAY,IAAM9L,KAAK+M,YAAYH,EAAYb,YAAc,IAAMa,EAAYZ,cAGjJgB,YAAYX,GACV,OAAOA,EAAKY,SAAS,EAAG,EAAG,EAAG,GAGhCC,gBAAgBC,GAEd,IAAIC,EAAcD,EAAUL,SAAW,EAEvC,OAAIM,EAAc,IAChBA,GAAe,GAGjBD,EAAUE,QAAQF,EAAUrB,WAA2B,EAAdsB,GAElCD,EAGTG,WAAWC,EAAcC,GAGvB,OAFoB,IAAIhH,KAAK+G,EAAMC,EAAO,GAK5CC,iBAAiBD,GACf,OAAOxN,KAAK+M,YAAYS,EAAQ,GAGlCE,gBAAgBrB,GACd,OAAOrM,KAAK+M,YAAYV,EAAKN,YAG/B4B,qBACE,OAAO,IAAInH,KAAKA,KAAKC,OAAOmH,UAAY,IAAO,EAGjDC,cAAcC,EAAmBlN,GAC/B,GAAiB+L,MAAbmB,GAAuC,IAAbA,EAAiB,MAAO,GAEtD,IAAIC,EAAa,IAAIvH,KAAKsH,GAC1BC,SAAWV,QAAQU,EAAWjC,WAAalL,EAAW,IAE/CZ,KAAKiM,YAAY8B,GAG1BC,0BAA0BF,EAAmBlN,GAC3C,IAAIqN,EAAsBjO,KAAK6N,cAAcC,EAAWlN,GACxD,OAAOZ,KAAK0M,UAAUuB,iDA1FbtC,gCAAYzJ,QAAZyJ,EAAY,YAAZA,GAAb,GCKauC,GAAb,MAAM,QACJrO,YAAoB8L,uBAGpBwC,YAAYC,GAEV,IAAIC,EAAaD,EAAWrC,WAE5BqC,EAAWf,QAAQe,EAAWtC,WAAasC,EAAWtC,UAAY,IAClEsC,EAAapO,KAAK2L,aAAauB,gBAAgBkB,GAE/C,IAAIE,EAAwB,IAAIC,GAChCD,EAAsBE,MAAQ,GAI9B,QAFIC,GAAO,EAAOpC,EAAO+B,EAAYM,EAAQ,GAErCD,GACNH,EAAsBE,MAAM1L,KAAK9C,KAAK2O,WAAW,IAAInI,KAAK6F,GAAOgC,IACjEhC,EAAKgB,QAAQhB,EAAKP,UAAY,GAC9B2C,EAAOC,IAAU,GAAKL,IAAehC,EAAKN,WAC1CsC,EAAahC,EAAKN,WAGpB,OAAOuC,EAGTK,WAAWtC,EAAYuC,GACrB,IAAIC,EAAsB,IAAIC,GAC9BD,EAAKE,KAAO,GAEZ,QAASC,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAE1B,IAAIC,EAAoB,IAAIC,GAC5BD,EAAIE,KAAO9C,EAAKP,UAAUjG,WAC1BoJ,EAAIG,OAAS/C,EAAKP,UAClBmD,EAAII,iBAAmBhD,EAAKN,aAAe6C,EAC3CK,EAAIrD,SAAW5L,KAAK2L,aAAaC,SAASS,GAC1C4C,EAAI5C,KAAOrM,KAAK2L,aAAaM,YAAYI,GACzC4C,EAAI1C,YAAcvM,KAAK2L,aAAaO,mBAAmBG,GAEvDwC,EAAKE,KAAKjM,KAAKmM,GAEf5C,EAAKgB,QAAQhB,EAAKP,UAAY,GAEhC,OAAO+C,gDA5CEX,GAAgBjM,sCAAhBiM,EAAgBhM,QAAhBgM,EAAgB,YAAhBA,GAAb,kBCJO,IAAMoB,GAAb,MAAM,QACJzP,eAGA0P,cAAcC,EAAoBC,GAChC,OAAOC,cAAkBD,EAAQD,GAAY3J,SAAS6J,6DAL7CJ,gCAAoBpN,QAApBoN,EAAoB,YAApBA,GAAb,GCGaK,GAAb,MAAM,QACJ9P,YAAmB+P,EAAmCC,EAAoCP,GAAvEtP,oBAAmCA,oBAAoCA,4BAW1FA,mBAAgB,CAAC8P,EAAgBC,MACjBpD,MAAVmD,GAAkCnD,MAAXoD,GAAkC,IAAVD,GAA2B,IAAXC,IACjE5M,QAAQC,IAAI,yCAGd,MAAM4M,EAAehQ,KAAK6P,aAAa9J,gBACjCkK,EAAYvK,KAAK4F,KAAK9E,KAAKC,MAAQ,KACnCiF,EAAOoE,EAASG,EAAYD,EAC5BE,EAAMR,oBAAwBK,GAC9BI,EAAOT,cAAkBhE,EAAMwE,GAGrC,OAFgBR,wBAA4BS,GAE3B,IAAMH,EAAe,IAAMC,GApB9CG,aAAanN,EAAiBoN,GAE5B,QADI7K,EAAS,GACJwJ,EAAI/L,EAAQ+L,EAAI,IAAKA,EAC5BxJ,GAAU6K,EAAM3K,KAAKC,MAAMD,KAAKE,SAAWyK,EAAMpN,SAEnD,OAAOuC,gDATEmK,GAAgB1N,0DAAhB0N,EAAgBzN,QAAhByN,EAAgB,YAAhBA,GAAb,GCRM,UCAA,UCEA,UCFA,UCKC,IAAMW,GAAb,MAAM,QAIJzQ,cAFQG,qBAA0B,cAI1BuQ,QAAQL,EAAaM,GAC3BC,aAAaC,QAAQR,EAAKM,GAGpBnQ,QAAQ6P,GACd,OAAOO,aAAaE,QAAQT,GAEtBU,WAAWV,GACjBO,aAAaI,WAAWX,GAGnBY,YACLL,aAAaM,QAGRC,eAAeC,GACpBjR,KAAKuQ,QAAQvQ,KAAKkR,gBAAiBD,GAG9BpI,iBACL,OAAO7I,KAAKK,QAAQL,KAAKkR,iBAGpBC,oBACLnR,KAAK4Q,WAAW5Q,KAAKkR,+DA9BZZ,gCAAoBpO,QAApBoO,EAAoB,qBAFnB,SAEDA,GAAb,GCsBac,EAAb,MAAM,QAEJvR,YACUgI,EACAD,EACA5B,EACA0B,EACA2J,EACAC,EACgBC,GAExB,GARQvR,oBACAA,wBACAA,yBACAA,2BACAA,cACAA,4BAUHA,eAAoC,IAAIwR,GAC/CxR,gBAA0C,IAAIyR,GARxCF,EACF,MAAM,IAAIG,MACR,oEAQCC,mBACL,IAAIC,EAAyB,IAAIC,KACjCD,EAAWE,OAAS9R,KAAK0H,oBAAoBC,YAAYoK,gBACzDH,EAAWI,YAAcC,OAAOC,SAASC,SAAW,KAAOF,OAAOC,SAASE,KAC3ER,EAAWS,SAAWrS,KAAK0H,oBAAoBC,YAAY2K,mBAC3DV,EAAWW,MAAQvS,KAAK0H,oBAAoBC,YAAY6K,eACxDZ,EAAWa,yBAA2BR,OAAOC,SAASQ,OAAS,8BAE/D1S,KAAK6H,aAAa8K,UAAUf,GAC5B5R,KAAK6H,aAAa+K,8BAElB5S,KAAK6H,aAAagL,mCAGbC,QACL9S,KAAK6H,aAAakL,mBAGbC,SACLhT,KAAKsR,qBAAqBH,oBAC1BnR,KAAK6H,aAAaoL,SAGbC,eACL,GAAyB,GAArBlT,KAAKmT,aAAsB,CAC7B,IAAIlC,EAAQjR,KAAKoT,WACjBjQ,eAAQC,IAAI,4BAA8B6N,EAAMoC,UAAUpC,EAAMhO,OAAS,KAClEjD,KAAK4H,iBAAiBK,gBAAmBjI,KAAK0H,oBAAoBC,YAAYoK,gBAAkB,oBAAqBd,IAIzHqC,kBAAkBC,EAAmBC,GAC1C,YAAK3L,aAAa4L,cAAgBzT,KAAK0H,oBAAoBC,YAAYoK,gBAAkB,iBACzF/R,KAAK6H,aAAawK,SAAWrS,KAAK0H,oBAAoBC,YAAY2K,mBAClEtS,KAAK6H,aAAa6L,kBAAoB1T,KAAK0H,oBAAoBC,YAAYgM,uBAEpE3T,KAAK6H,aAAa+L,4BAA4BL,EAAWC,GAG3DL,aACL,OAA8C,MAAtCnT,KAAK6H,aAAagB,kBAA4E,GAAhD7I,KAAKgG,kBAAkByB,sBAGxEoM,SAAS5C,GACd9N,QAAQC,IAAI,cAAgB6N,EAAMoC,UAAUpC,EAAMhO,OAAS,KAE3DjD,KAAKsR,qBAAqBN,eAAeC,GACzC9N,QAAQC,IAAI,cAAgBpD,KAAK8T,sBAAsBT,UAAUrT,KAAK8T,sBAAsB7Q,OAAS,KAGhG6Q,sBACL,OAAO9T,KAAKsR,qBAAqBzI,iBAG5BuK,WACL,GAAoD,GAAhDpT,KAAKgG,kBAAkByB,sBAA+B,CACxD,GAAkC,MAA9BzH,KAAK8T,sBACP,OAAO9T,KAAK8T,sBAEd,IAAIC,EAAc/T,KAAK6H,aAAagB,iBACpC,YAAKyI,qBAAqBN,eAAe+C,GAClCA,EAET,MAAO,GAGFC,iBAAiBC,GACtB,OAAOjU,KAAK4H,iBAAiBwC,YAA2BpK,KAAK0H,oBAAoBC,YAAYoK,gBAAkB,kCAAoCkC,GAG9IC,eAAeC,GACpB,OAAOnU,KAAK4H,iBAAiB2B,UAAuCvJ,KAAK0H,oBAAoBC,YAAYoK,gBAAkB,aAAe/R,KAAK0H,oBAAoBC,YAAYyM,uBAAyB,yBAA0BD,GAG7NE,gBACLrU,KAAKkT,eAAuC1P,UAC1C8Q,IACEnR,QAAQC,IAAI,uBAAyBkR,EAAUC,YAAc,IAAMD,EAAUE,mBAC7ExU,KAAKyU,UAAYH,EACjB,IAAII,EAA0C,IAAIC,GAClDD,EAAiBE,UAAYN,EAAUnF,KAEvCnP,KAAKkU,eAAeQ,GAAkBlR,UAAUqR,IAC9C7U,KAAK8U,WAAaD,EAAeE,KAEjC/U,KAAKyU,UAAUO,YAAchV,KAAK8U,WAAWG,OAAO,GAAGC,SAAS,GAAGC,QAAQrO,KAAKsO,IAAK,MAAC,SAAGC,KAAoB,QAAdC,OAAKb,iBAASvT,eAAEsT,qBAAmBrF,QAGtIoG,IAGEpS,QAAQC,IAAImS,GAGZvV,KAAKyU,UAAY,KACjBzU,KAAKsR,qBAAqBH,oBAC1BnR,KAAKgT,SAGLhT,KAAK8S,UAKJ0C,mBAAmBjC,EAAmBkC,GAC3C,IAAIC,EAAuE,IAAIC,GAC/ED,SAA2Bd,UAAYrB,EACvCmC,EAA2BlB,mBAAqBiB,EAEzCzV,KAAK4H,iBAAiB2B,UAAqDvJ,KAAK0H,oBAAoBC,YAAYoK,gBAAkB,aAAe/R,KAAK0H,oBAAoBC,YAAYyM,uBAAyB,qCAAsCsB,GAGvPE,aACL,IAAInM,EAAwB,IAAIoM,KAChCpM,EAAUnB,IAAI,QAAStI,KAAK6H,aAAagB,kBACzCY,EAAUnB,IAAI,YAAatI,KAAK0H,oBAAoBC,YAAY2K,oBAChE7I,EAAUnB,IAAI,gBAAiBtI,KAAK0H,oBAAoBC,YAAYgM,wBAEpE3T,KAAK4H,iBAAiB4B,sBAAsBxJ,KAAK0H,oBAAoBC,YAAYoK,gBAAkB,sBAAuBtI,GAE1HzJ,KAAKsR,qBAAqBH,oBAE1BnR,KAAKqR,OAAOyE,SAAS,CAAC,mBAGjBC,mBACL,OAAO/V,KAAK6H,aAAagL,mCACtBmD,KAAK,KACJ,GAAKhW,KAAK6H,aAAaoO,sBAIrB,OAAOjW,KAAK6H,aAAaqO,kBAAkBF,KAAK,IACvChW,KAAK6H,aAAaoO,uBAJ3BjW,KAAK6H,aAAakL,qBAUtBoD,mBACF,OAAOnW,KAAK6H,aAAagL,mCAAmCmD,KAAK,IACxDhW,KAAK6H,aAAaoO,uBAIzBG,qBACF,OAAOC,OAAOC,OAAOtW,KAAK6H,aAAa0O,mEAvK9BnF,GAAanP,oEASiBmP,EAAa,gCAT3CA,EAAalP,QAAbkP,EAAa,qBAFZ,SAEDA,GAAb,kBCnBO,IAAMoF,GAAb,MAAM,QAEJ3W,YAAoB+H,EAA4CF,GAA5C1H,wBAA4CA,2BAEhEyW,aAAaC,GAEX,OACS1W,KAAK4H,iBAAiBuC,kBADd,MAAbuM,EAC6CA,EAEF1W,KAAK0H,oBAAoBC,YAAYoK,gBAAkB,gBAExG4E,SAASC,EAAmB9L,EAAkB+L,GAE5C,GAAmB,MAAfD,GAAoC,MAAb9L,EACzB,OAAO9K,KAAK4H,iBAAiBuC,kBAAkBnK,KAAK0H,oBAAoBC,YAAYoK,gBAAkB,4BAA6B6E,EAAa,cAAgB9L,GAGlK,IAAIgM,EAA2B,GAEjB,IAAVD,GACFC,EAAehU,KAAK,UAAY+T,GAMlC,QAFIE,EAAwB,GAEnBC,EAAQ,EAAGA,EAAQF,EAAe7T,OAAQ+T,IACjDD,EAAgBA,GAA2B,GAATC,EAAc,IAAM,KAAOF,EAAeE,GAE9E,OAAOhX,KAAK4H,iBAAiBuC,kBAAkBnK,KAAK0H,oBAAoBC,YAAYoK,gBAAkB,eAAiBgF,GAGzHE,WAAWC,EAAgBC,GACzB,OAAOnX,KAAK4H,iBAAiB8B,SAAS1J,KAAK0H,oBAAoBC,YAAYoK,gBAAkB,gBAAkBmF,EAAQC,GAEzHC,QAAQD,GACN,OAAOnX,KAAK4H,iBAAiB2B,UAAUvJ,KAAK0H,oBAAoBC,YAAYoK,gBAAkB,gBAAiBoF,GAEjHE,WAAWC,GACT,OAAOtX,KAAK4H,iBAAiBgC,YAAY5J,KAAK0H,oBAAoBC,YAAYoK,gBAAkB,gBAAkBuF,EAAKjC,IAEzHkC,YAAYb,EAAmBc,GAC7B,OACSxX,KAAK4H,iBAAiBuC,kBADd,MAAbuM,EAC6CA,EAEF1W,KAAK0H,oBAAoBC,YAAYoK,gBAAkB,gBAAkByF,iDA7C/GhB,GAAYvU,8CAAZuU,EAAYtU,QAAZsU,EAAY,YAAZA,GAAb,GCGaiB,GAAb,MAAM,QAEF5X,YAAoB2W,EAAoCpF,EAAsCxR,GAA1EI,oBAAoCA,qBAAsCA,sBAE9F0X,0BAA0BC,GACtB,IAAIC,GAAqB,EACzB,OAAI5X,KAAKoR,cAAc+E,aACZnW,KAAKwW,aAAae,YAAY,KAAMM,SAAS7X,KAAKoR,cAAcgF,eAAeoB,UAAU/O,QAC5FqP,MAAKC,IACMA,EAAIhD,KAAMiD,YAAYC,QAAQC,IAC7BA,EAAMC,OAAOC,aAAaC,KAAKC,GAAKA,EAAEX,MAAMxI,OAASwI,KACrDC,GAAY,KAGH,GAAbA,GACA5X,KAAKJ,eAAeW,yBAAyB,iDAAkD,QAAS,SAErGqX,KAKRA,gDAtBNH,GAAmBxV,wDAAnBwV,EAAmBvV,QAAnBuV,EAAmB,YAAnBA,GAAb,kBCOO,IAAMc,GAAb,MAAM,QAYF1Y,YAAoB2Y,iBAVbxY,eAAY,IAAIC,MACfD,0BAA+B,QAEhCA,mCAAwC,oBAQ3CA,KAAKyY,iBAAmB,IAAIC,iBAAiB1Y,KAAK2Y,sBAClD3Y,KAAKyY,iBAAiBG,UAAapY,GAAYR,KAAK6Y,UAAU7W,KAAKxB,EAAQkL,MAG/EoN,QAAQtY,GACJR,KAAKyY,iBAAiBM,YAAYvY,GAClC2C,QAAQC,IAAI,wBAAyB5C,GAGzCwY,eAAeC,GACX,OAAOjZ,KAAK6Y,UAAUpQ,KClCxB,YAAuByQ,GACzB,OAAQC,GACG,IAAI3O,KAAW4O,GAIXD,EAAO3V,UAHEgN,GAAa0I,EAAKG,IAAI,IAAMD,EAASpX,KAAKwO,IACzC8I,GAAWJ,EAAKG,IAAI,IAAMD,EAASzQ,MAAM2Q,IACvC,IAAMJ,EAAKG,IAAI,IAAMD,EAASG,cD+BjDC,CAAUxZ,KAAKwY,SACfiB,QAAOjZ,GAAWA,EAAQyY,OAASA,kDA1BlCV,GAAiBtW,yCAAjBsW,EAAiBrW,QAAjBqW,EAAiB,YAAjBA,GAAb,GEVamB,GAAb,MAAM,QAEF7Z,YAAoBuR,wBAChBpR,KAAKoR,cAAcO,mBAGvBgI,YAAYC,EAA+BC,GACvC,OAAO7Z,KAAKoR,cAAc2E,iEAPrB2D,GAAUzX,qCAAVyX,EAAUxX,QAAVwX,EAAU,YAAVA,GAAb,GCAaI,GAAb,MAAM,QAEFja,YAAoBgI,EAAmCH,GAAnC1H,oBAAmCA,2BAEnD,IAAI4R,EAAyB,IAAIC,KACjCD,EAAWE,OAAS9R,KAAK0H,oBAAoBC,YAAYoK,gBACzDH,EAAWI,YAAchS,KAAK0H,oBAAoBC,YAAYoS,+BAC9DnI,EAAWS,SAAWrS,KAAK0H,oBAAoBC,YAAY2K,mBAC3DV,EAAWW,MAAQvS,KAAK0H,oBAAoBC,YAAY6K,eACxDZ,EAAWa,yBAA2BR,OAAOC,SAASQ,OAAS,8BAC/Dd,EAAWoI,cAAe,EAC1Bha,KAAK6H,aAAa8K,UAAUf,GAC5B5R,KAAK6H,aAAaoS,uBAAyB,IAAIC,KAC/Cla,KAAK6H,aAAagL,mCAClB7S,KAAK6H,aAAa+K,8BAGtB+G,YAAYC,EAA+BC,GAEvC,OAAO7Z,KAAK6H,aAAagL,mCACxBmD,KAAK,KACJ,GAAKhW,KAAK6H,aAAaoO,sBAIrB,OAAOjW,KAAK6H,aAAaqO,kBAAkBF,KAAK,IACvChW,KAAK6H,aAAaoO,uBAJ3BjW,KAAK6H,aAAakL,mEAtBjB+G,GAA6B7X,iDAA7B6X,EAA6B5X,QAA7B4X,EAA6B,YAA7BA,GAAb,GC6BaK,GAAb,MAAM,QAAoBC,iBAEtB,MAAO,CACLC,SAAUF,EACVG,UAAW,CAACtU,GAAmB0B,EAAqBE,EAClDsG,GAAkBvC,GAAcrG,GAAc8L,EAAe1G,GAC7D4E,GAAsBK,GAAkB8H,GAAqBiC,GAAYI,GACzEvB,GAAmBjI,mDAPd6J,4DANF,CAACtb,KAAcgF,KAAa0W,KAAkB3W,IAIwDA,MAEpGuW,GAAb,GCrBaK,GAAb,MAAM,sDAAOA,4DAVF,CACPL,OASSK,GAAb,GCRaC,GAAb,MAAM,QAEJ5a,YAAoB+H,EAA4CF,GAA5C1H,wBAA4CA,2BAEhE0a,mBAAmB9D,EAAmB9L,GAEpC,OACS9K,KAAK4H,iBAAiBuC,kBADZ,MAAfyM,GAAoC,MAAb9L,EACsB9K,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,oDAAqD/D,EAAa,cAAgB9L,EAEhJ9K,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,wCAG7GC,eAAelE,EAAmBG,GAChC,GAAiB,MAAbH,EACF,OAAO1W,KAAK4H,iBAAiBuC,kBAAkBuM,GAGjD,IAAII,EAA2B,GAEjB,IAAVD,GACFC,EAAehU,KAAK,UAAY+T,GAMlC,QAFIE,EAAwB,GAEnBC,EAAQ,EAAGA,EAAQF,EAAe7T,OAAQ+T,IACjDD,EAAgBA,GAA2B,GAATC,EAAc,IAAM,KAAOF,EAAeE,GAE9E,OAAOhX,KAAK4H,iBAAiBuC,kBAAkBnK,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,uCAAyC5D,GAGtJ8D,iBAAiBC,GACf,OAAO9a,KAAK4H,iBAAiB8B,SAAS1J,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,uCAAwCG,GAG5IC,cAAcC,GACZ,OAAOhb,KAAK4H,iBAAiB2B,UAAUvJ,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,uCAAwCK,GAG7IC,iBAAiBH,GACf,OAAO9a,KAAK4H,iBAAiBgC,YAAY5J,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,wCAA0CG,EAAWzF,kDAzCjJoF,GAAkBxY,8CAAlBwY,EAAkBvY,QAAlBuY,EAAkB,YAAlBA,GAAb,GCAaS,GAAb,MAAM,QAEJrb,YAAoB+H,EAA4CF,GAA5C1H,wBAA4CA,2BAEhEmb,mBAAmBvE,EAAmB9L,GAEpC,OACS9K,KAAK4H,iBAAiBuC,kBADZ,MAAfyM,GAAoC,MAAb9L,EACsB9K,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,oDAAqD/D,EAAa,cAAgB9L,EAEhJ9K,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,wCAG7GS,eAAe1E,EAAmBG,GAChC,GAAiB,MAAbH,EACF,OAAO1W,KAAK4H,iBAAiBuC,kBAAkBuM,GAGjD,IAAII,EAA2B,GAEjB,IAAVD,GACFC,EAAehU,KAAK,UAAY+T,GAMlC,QAFIE,EAAwB,GAEnBC,EAAQ,EAAGA,EAAQF,EAAe7T,OAAQ+T,IACjDD,EAAgBA,GAA2B,GAATC,EAAc,IAAM,KAAOF,EAAeE,GAE9E,OAAOhX,KAAK4H,iBAAiBuC,kBAAkBnK,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,uCAAyC5D,GAGtJsE,iBAAiBC,GACf,OAAOtb,KAAK4H,iBAAiB8B,SAAS1J,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,uCAAwCW,GAG5IC,cAAcC,GACZ,OAAOxb,KAAK4H,iBAAiB2B,UAAUvJ,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,uCAAwCa,GAG7IC,iBAAiBH,GACf,OAAOtb,KAAK4H,iBAAiBgC,YAAY5J,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,wCAA0CW,EAAWjG,kDAzCjJ6F,GAAkBjZ,8CAAlBiZ,EAAkBhZ,QAAlBgZ,EAAkB,YAAlBA,GAAb,GCAaQ,GAAb,MAAM,QAEJ7b,YAAoB+H,EAA4CF,GAA5C1H,wBAA4CA,2BAEhE2b,wBAAwB/E,EAAqB9L,GAE3C,OACS9K,KAAK4H,iBAAiBuC,kBADZ,MAAfyM,GAAoC,MAAb9L,EACsB9K,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,yDAA2D/D,EAAc,cAAgB9L,EAEvJ9K,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,6CAG7GiB,mBAAmBlF,EAAmBG,EAAgBgF,GACpD,GAAiB,MAAbnF,EACF,OAAO1W,KAAK4H,iBAAiBuC,kBAAkBuM,GAGjD,IAAII,EAA2B,GAEjB,IAAVD,GACFC,EAAehU,KAAK,UAAY+T,GAGlB,MAAZgF,IACF/E,EAAehU,KAAK,iBACpBgU,EAAehU,KAAK,aAAe+Y,IAKrC,QAFI9E,EAAwB,GAEnBC,EAAQ,EAAGA,EAAQF,EAAe7T,OAAQ+T,IACjDD,EAAgBA,GAA2B,GAATC,EAAc,IAAM,KAAOF,EAAeE,GAE9E,OAAOhX,KAAK4H,iBAAiBuC,kBAAkBnK,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,4CAA8C5D,GAG3J+E,+BAA+BpF,EAAmBG,EAAgBgF,GAChE,GAAiB,MAAbnF,EACF,OAAO1W,KAAK4H,iBAAiBuC,kBAAkBuM,GAGjD,IAAII,EAA2B,GAEjB,IAAVD,GACFC,EAAehU,KAAK,UAAY+T,GAGlB,MAAZgF,IACF/E,EAAehU,KAAK,iBACpBgU,EAAehU,KAAK,aAAe+Y,IAKrC,QAFI9E,EAAwB,GAEnBC,EAAQ,EAAGA,EAAQF,EAAe7T,OAAQ+T,IACjDD,EAAgBA,GAA2B,GAATC,EAAc,IAAM,KAAOF,EAAeE,GAE9E,OAAOhX,KAAK4H,iBAAiBuC,kBAAkBnK,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,wDAA0D5D,GAGvKgF,sBAAsBC,GACpB,OAAOhc,KAAK4H,iBAAiB8B,SAAS1J,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,4CAA6CqB,GAGjJC,mBAAmBC,GACjB,OAAOlc,KAAK4H,iBAAiB2B,UAAUvJ,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,4CAA6CuB,GAGlJC,sBAAsBH,GACpB,OAAOhc,KAAK4H,iBAAiBgC,YAAY5J,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,6CAA+CqB,EAAuB3G,IAG7K+G,gCAAgCxF,EAAqB9L,EAAmBuR,GAEtE,IAAIvF,EAA2B,GACjB,IAAVuF,GACFvF,EAAehU,KAAK,UAAYuZ,GAIlC,QADItF,EAAwB,GACnBC,EAAQ,EAAGA,EAAQF,EAAe7T,OAAQ+T,IACjDD,EAAgBA,GAA2B,GAATC,EAAc,IAAM,KAAOF,EAAeE,GAG9E,OACShX,KAAK4H,iBAAiBuC,kBADZ,MAAfyM,GAAoC,MAAb9L,EACsB9K,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,kEAAoE/D,EAAc,cAAgB9L,EAEhK9K,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,qDAAuD5D,iDAvFzJ2E,GAA8BzZ,8CAA9ByZ,EAA8BxZ,QAA9BwZ,EAA8B,YAA9BA,GAAb,GCIaY,GAAb,MAAM,QAEFzc,YAAoB+H,EAA4CF,GAA5C1H,wBAA4CA,2BAEhEuc,kBAAkB3F,EAAqB9L,GAEnC,OACW9K,KAAK4H,iBAAiBuC,kBADd,MAAfyM,GAAoC,MAAb9L,EACwB9K,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,iCAAmC/D,EAAc,cAAgB9L,EAEjI9K,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,qBAG/G6B,aAAa9F,EAAmBG,GAC5B,GAAiB,MAAbH,EACA,OAAO1W,KAAK4H,iBAAiBuC,kBAAkBuM,GAGnD,IAAII,EAA2B,GAEjB,IAAVD,GACAC,EAAehU,KAAK,UAAY+T,GAMpC,QAFIE,EAAwB,GAEnBC,EAAQ,EAAGA,EAAQF,EAAe7T,OAAQ+T,IAC/CD,EAAgBA,GAA2B,GAATC,EAAc,IAAM,KAAOF,EAAeE,GAEhF,OAAOhX,KAAK4H,iBAAiBuC,kBAAkBnK,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,oBAAsB5D,GAGrI0F,gBAAgBC,GACZA,SAAUC,iBAAmBD,EAAUC,gBAChC3c,KAAK4H,iBAAiB8B,SAAS1J,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,oBAAqB+B,GAG3HE,aAAaC,GACTA,SAAcF,iBAAmBE,EAAcF,gBACxC3c,KAAK4H,iBAAiB2B,UAAUvJ,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,oBAAqBkC,GAG5HC,YAAYpG,GAER,OACW1W,KAAK4H,iBAAiBwC,YADhB,MAAbsM,EACyCA,EAEJ1W,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,gDAEzGoC,uBAAuBrG,GAEnB,OACW1W,KAAK4H,iBAAiBwC,YADhB,MAAbsM,EACyCA,EAEJ1W,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,2CAEzGqC,uBAAuBtG,GAEnB,OACW1W,KAAK4H,iBAAiBwC,YADhB,MAAbsM,EACyCA,EAEJ1W,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,mCAGzGsC,uBAAuBrG,EAAsB9L,EAAoBoS,GAE7D,OACWld,KAAK4H,iBAAiBuC,kBADd,MAAfyM,GAAoC,MAAb9L,EACwB9K,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,2CAA6C/D,EAAc,cAAgB9L,EAE3I9K,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,2CAA6CuC,GAE5JC,8BAA8BzG,EAAmBG,GAC7C,GAAiB,MAAbH,EACA,OAAO1W,KAAK4H,iBAAiBuC,kBAAkBuM,GAGnD,IAAII,EAA2B,GAEjB,IAAVD,GACAC,EAAehU,KAAK,UAAY+T,GAMpC,QAFIE,EAAwB,GAEnBC,EAAQ,EAAGA,EAAQF,EAAe7T,OAAQ+T,IAC/CD,EAAgBA,GAA2B,GAATC,EAAc,IAAM,KAAOF,EAAeE,GAEhF,OAAOhX,KAAK4H,iBAAiBuC,kBAAkBnK,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,8BAAgC5D,GAE/IqG,8BAA8BC,GAC1B,OAAOrd,KAAK4H,iBAAiB2B,UAAUvJ,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,8BAA+B0C,GAEtIC,2BAA2BD,GACvB,OAAOrd,KAAK4H,iBAAiBgC,YAAY5J,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,+BAAiC0C,EAAoBhI,IAG9JkI,gBAAgB7G,GACZ,OACW1W,KAAK4H,iBAAiBwC,YADhB,MAAbsM,EACyCA,EAEJ1W,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,iCAEzG6C,oBAAoB1N,GAChB,OACW9P,KAAK4H,iBAAiBwC,YADnB,MAAV0F,EACyC9P,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,6CAA+C7K,EAE/G9P,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,qCAEzG8C,0BAA0BC,EAAoC5N,GAC1D,OAAO9P,KAAK4H,iBAAiB2B,UAAUvJ,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,6CAA+C7K,EAAQ4N,GAG9JC,sCAAsC7N,GAClC,OACW9P,KAAK4H,iBAAiBwC,YADnB,MAAV0F,EACyC9P,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,oDAAsD7K,EAEtH9P,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,4CAEzGiD,4CAA4CC,EAAwE/N,GAChH,OAAO9P,KAAK4H,iBAAiB2B,UAAUvJ,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,oDAAsD7K,EAAQ+N,iDAxH5JvB,GAAiBra,8CAAjBqa,EAAiBpa,QAAjBoa,EAAiB,YAAjBA,GAAb,GCJawB,GAAb,MAAM,QAEJje,YAAoB+H,EAA4CF,GAA5C1H,wBAA4CA,2BAEhE+d,iBAAiBnH,EAAqB9L,EAAmBgF,EAAgBkO,EAAqBC,EAAkBC,GAC9G,IAAIpH,EAA2B,GAE/B,GAAc,MAAVhH,GAAiC,MAAfkO,GAAmC,MAAZC,GAA8B,MAAVC,EAAgB,CAC/E,IAAIC,EAA2B,GAEjB,MAAVrO,GACFqO,EAAerb,KAAK,WAAagN,EAAS,KAGzB,MAAfkO,GACFG,EAAerb,KAAK,WAAakb,EAAc,KAGjC,MAAZC,GACFE,EAAerb,KAAK,qBAAuBmb,EAAW,KAG1C,MAAVC,GACFC,EAAerb,KAAK,mBAAqBob,EAAS,KAKpD,QAFIE,EAAwB,GAEnBpH,EAAQ,EAAGA,EAAQmH,EAAelb,OAAQ+T,IACjDoH,EAAgBA,GAA2B,GAATpH,EAAc,GAAK,SAAWmH,EAAenH,GAG5D,IAAjBoH,GACFtH,EAAehU,KAAK,UAAYsb,GAKpC,IAFIrH,EAAwB,GAE5B,IAASC,EAAQ,EAAGA,EAAQF,EAAe7T,OAAQ+T,IACjDD,GAAgCD,EAAeE,GAIjD,OACShX,KAAK4H,iBAAiBuC,kBADZ,MAAfyM,GAAoC,MAAb9L,EACsB9K,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,qCAAuC/D,EAAc,cAAgB9L,EAAY,IAAMiM,EAGrJ/W,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,yBAA2B5D,GAGxIwF,oBACE,OAAOvc,KAAK4H,iBAAiBwC,YAAYpK,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,oFAnD5FmD,GAAqB7b,8CAArB6b,EAAqB5b,QAArB4b,EAAqB,YAArBA,GAAb,GCGaO,GAAb,MAAM,QAEFxe,YAAoB+H,EAA4CF,GAA5C1H,wBAA4CA,2BAEhEse,uBAAuB1H,EAAqB9L,GAExC,OACW9K,KAAK4H,iBAAiBuC,kBADd,MAAfyM,GAAoC,MAAb9L,EACwB9K,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,yDAA2D/D,EAAc,cAAgB9L,EAEzJ9K,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,6CAE/G4D,0BAA0B7H,EAAmBG,GACzC,GAAiB,MAAbH,EACA,OAAO1W,KAAK4H,iBAAiBuC,kBAAkBuM,GAGnD,IAAII,EAA2B,GAEjB,IAAVD,GACAC,EAAehU,KAAK,UAAY+T,GAMpC,QAFIE,EAAwB,GAEnBC,EAAQ,EAAGA,EAAQF,EAAe7T,OAAQ+T,IAC/CD,EAAgBA,GAA2B,GAATC,EAAc,IAAM,KAAOF,EAAeE,GAEhF,OAAOhX,KAAK4H,iBAAiBuC,kBAAkBnK,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,4CAA8C5D,GAE7JyH,iBAAiBC,GACb,OAAOze,KAAK4H,iBAAiB2B,UAAUvJ,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,4CAA6C8D,GAEpJC,oBAAoBC,GAChB,OAAO3e,KAAK4H,iBAAiBgC,YAAY5J,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,6CAA+CgE,EAAetJ,kDAlC9JgJ,GAAsBpc,8CAAtBoc,EAAsBnc,QAAtBmc,EAAsB,YAAtBA,GAAb,GCJaO,EAAb,MAAM,QAEJ/e,YAAoB+H,EAA4CF,GAA5C1H,wBAA4CA,2BAExDA,UAAY,KACZA,qBAAoC,KAE5C6e,0BAA0BnI,EAAmBoI,GAE3C,OACS9e,KAAK4H,iBAAiBwC,YADd,MAAbsM,EACuCA,EAEF1W,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,yCAA2CmE,GAElJ9B,uBAAuBtG,GAErB,OACS1W,KAAK4H,iBAAiBwC,YADd,MAAbsM,EACuCA,EAEF1W,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,mCAGvGoE,oBAAoBC,GAClB,OAAOhf,KAAK4H,iBAAiB2B,UAAUvJ,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,oCAAqCqE,GAG1IC,eAAevT,GACb1L,KAAK0L,KAAOA,EAGdwT,iBACE,OAAOlf,KAAK0L,KAGdyT,uBAAuBC,GACrBpf,KAAKof,gBAAkBA,EAGzBC,yBACE,OAAOrf,KAAKof,gBAGdE,mBAAmBC,GACjB,OAAOvf,KAAK4H,iBAAiBwC,YAAYpK,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,gDAAkD4E,GAGzJC,mBAAmBC,GACjB,OAAOzf,KAAK4H,iBAAiB2B,UAAUvJ,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,oCAAqC8E,GAG1IC,yBAAyB9I,EAAsB9L,EAAoBgU,EAAuBa,EAAkBC,EAAyBC,EAAwBhJ,GAE3J,IAAIC,EAA2B,GAEf,IAAVD,GACDC,EAAehU,KAAK,UAAY+T,GAGrC,IAAIsH,EAA2B,GAEZ,MAAfvH,GACFuH,EAAerb,KAAK,eAAiB8T,GAGtB,MAAb9L,GACFqT,EAAerb,KAAK,aAAegI,GAGjB,MAAhBgU,GACFX,EAAerb,KAAK,gBAAkBgc,GAGzB,MAAXa,GACFxB,EAAerb,KAAK,WAAa6c,GAGb,MAAlBC,GACFzB,EAAerb,KAAK,kBAAoB8c,GAGrB,MAAjBC,GACF1B,EAAerb,KAAK,iBAAmB+c,GAKzC,QAFIzB,EAAwB,GAEnBpH,EAAQ,EAAGA,EAAQmH,EAAelb,OAAQ+T,IACjDoH,EAAgBA,GAA2B,GAATpH,EAAc,GAAK,KAAOmH,EAAenH,GAGxD,IAAjBoH,GACFtH,EAAehU,KAAKsb,GAKtB,IAFIrH,EAAwB,GAE5B,IAASC,EAAQ,EAAGA,EAAQF,EAAe7T,OAAQ+T,IACjDD,EAAgBA,GAA2B,GAATC,EAAc,IAAM,KAAOF,EAAeE,GAG9E,OAAOhX,KAAK4H,iBAAiBuC,kBAAkBnK,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,oCAAsC5D,iDApGxI6H,GAAyB3c,8CAAzB2c,EAAyB1c,QAAzB0c,EAAyB,YAAzBA,GAAb,GCPM,UCQC,IAAMkB,GAAb,MAAM,QAEJjgB,YAAoB+H,EAA4CF,GAA5C1H,wBAA4CA,2BAEhE+f,qBAAqBnJ,EAAqB9L,GAExC,OACS9K,KAAK4H,iBAAiBuC,kBADZ,MAAfyM,GAAoC,MAAb9L,EACsB9K,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,+CAAiD/D,EAAc,cAAgB9L,EAE7I9K,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,mCAG7GqF,iBAAiBtJ,EAAmBG,GAClC,GAAiB,MAAbH,EACF,OAAO1W,KAAK4H,iBAAiBuC,kBAAkBuM,GAGjD,IAAII,EAA2B,GAEjB,IAAVD,GACFC,EAAehU,KAAK,UAAY+T,GAMlC,QAFIE,EAAwB,GAEnBC,EAAQ,EAAGA,EAAQF,EAAe7T,OAAQ+T,IACjDD,EAAgBA,GAA2B,GAATC,EAAc,IAAM,KAAOF,EAAeE,GAE9E,OAAOhX,KAAK4H,iBAAiBuC,kBAAkBnK,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,kCAAoC5D,GAGjJkJ,YAAYnQ,GACV,OAAO9P,KAAK4H,iBAAiB2B,UAAUvJ,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,WAAa7K,EAAS,YAAa,IAGxIoQ,aAAapQ,GACX,OAAO9P,KAAK4H,iBAAiB2B,UAAUvJ,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,WAAa7K,EAAS,qBAAsB,IAGjJqQ,kBACE,IAAIC,EAAsC,IAAIC,GAC9CD,SAAarQ,QAAU/P,KAAK0H,oBAAoBC,YAAY2Y,qBACrDtgB,KAAK4H,iBAAiB2B,UAAUvJ,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,aAAe3a,KAAK0H,oBAAoBC,YAAY4Y,oBAAsB,qCAAsCH,GAGrNI,kBAAkBC,EAA6BlB,EAAoBmB,GAC/D,OAAO1gB,KAAK4H,iBAAiBuB,iBAAiBnJ,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,aAAe3a,KAAK0H,oBAAoBC,YAAY4Y,oBAAsB,aAAeE,EAAsB,IAAMlB,EAAY,GAAImB,GAGnPC,qBAAqBF,EAA6BlB,EAAoBmB,GACpE,OAAO1gB,KAAK4H,iBAAiBuB,iBAAiBnJ,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,aAAe3a,KAAK0H,oBAAoBC,YAAY4Y,oBAAsB,aAAeE,EAAsB,IAAMlB,EAAY,GAAImB,GAGjPE,mBAAmBH,EAA6BlB,EAAoBmB,GAClE,OAAO1gB,KAAK4H,iBAAiBuB,iBAAiBnJ,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,aAAe3a,KAAK0H,oBAAoBC,YAAY4Y,oBAAsB,aAAeE,EAAsB,IAAMlB,EAAa,YAAa,GAAImB,GAG/PG,sBAAsBJ,EAA6BlB,EAAoBmB,GACrE,OAAO1gB,KAAK4H,iBAAiBuB,iBAAiBnJ,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,aAAe3a,KAAK0H,oBAAoBC,YAAY4Y,oBAAsB,aAAeE,EAAsB,IAAMlB,EAAa,YAAa,GAAImB,GAG/PI,oBAAoBL,EAA6BC,GAC/C,OAAO1gB,KAAK4H,iBAAiBuB,iBAAiBnJ,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,aAAe3a,KAAK0H,oBAAoBC,YAAY4Y,oBAAsB,sCAAwCE,EAAsB,GAAIC,GAGxPK,uBAAuBN,EAA6BC,GAClD,OAAO1gB,KAAK4H,iBAAiBuB,iBAAiBnJ,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,aAAe3a,KAAK0H,oBAAoBC,YAAY4Y,oBAAsB,sCAAwCE,EAAsB,GAAIC,iDAnE7OZ,GAAoB7d,8CAApB6d,EAAoB5d,QAApB4d,EAAoB,YAApBA,GAAb,GCCakB,GAAb,MAAM,QAEFnhB,YAAoB+H,EAA4CF,GAA5C1H,wBAA4CA,2BAEhEihB,gBAAgBrK,EAAqB9L,GAEjC,OACW9K,KAAK4H,iBAAiBuC,kBADd,MAAfyM,GAAoC,MAAb9L,EACwB9K,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,kDAAoD/D,EAAc,cAAgB9L,EAElJ9K,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,sCAG/GuG,kBAAkBxK,EAAmBG,GACjC,GAAiB,MAAbH,EACA,OAAO1W,KAAK4H,iBAAiBuC,kBAAkBuM,GAGnD,IAAII,EAA2B,GAEjB,IAAVD,GACAC,EAAehU,KAAK,UAAY+T,GAMpC,QAFIE,EAAwB,GAEnBC,EAAQ,EAAGA,EAAQF,EAAe7T,OAAQ+T,IAC/CD,EAAgBA,GAA2B,GAATC,EAAc,IAAM,KAAOF,EAAeE,GAEhF,OAAOhX,KAAK4H,iBAAiBuC,kBAAkBnK,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,qCAAuC5D,GAGtJoK,WAAWC,GACP,OAAOphB,KAAK4H,iBAAiB2B,UAAUvJ,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,qCAAsCyG,GAG7IC,cAAcC,GACV,OAAOthB,KAAK4H,iBAAiBgC,YAAY5J,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,sCAAwC2G,EAAQjM,IAGzJkI,gBAAgB7G,GACZ,OACW1W,KAAK4H,iBAAiBwC,YADhB,MAAbsM,EACyCA,EAEJ1W,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,iCAGzG4G,cAAc7K,GACV,OACW1W,KAAK4H,iBAAiBwC,YADhB,MAAbsM,EACyCA,EAEJ1W,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,oFAnDhGqG,GAAe/e,8CAAf+e,EAAe9e,QAAf8e,EAAe,YAAfA,GAAb,GCCaQ,GAAb,MAAM,QAEF3hB,YAAoB+H,EAA4CF,GAA5C1H,wBAA4CA,2BAEhEyhB,2BAA2B7K,EAAqB9L,EAAmB+L,EAAgBqG,GAG/E,IAAIpG,EAA2B,GAEjB,IAAVD,GACAC,EAAehU,KAAK,UAAY+T,GAGjB,MAAfD,GACAE,EAAehU,KAAK,eAAiB8T,GAGxB,MAAb9L,GACAgM,EAAehU,KAAK,aAAegI,GAGrB,MAAdoS,GACApG,EAAehU,KAAK,eAAiBoa,GAKzC,QADInG,EAAwB,GACnBC,EAAQ,EAAGA,EAAQF,EAAe7T,OAAQ+T,IAC/CD,EAAgBA,GAA2B,GAATC,EAAc,IAAM,KAAOF,EAAeE,GAGhF,OAAOhX,KAAK4H,iBAAiBuC,kBAAkBnK,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,kCAAoC5D,GAInJ2K,2BAA2BC,GACvB,OAAO3hB,KAAK4H,iBAAiB2B,UAAUvJ,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,kCAAmCgH,GAG1IC,8BAA8BC,GAC1B,OAAO7hB,KAAK4H,iBAAiBgC,YAAY5J,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,mCAAqCkH,EAAKxM,IAGnJyM,cAAcpL,GACV,OACW1W,KAAK4H,iBAAiBwC,YADhB,MAAbsM,EACyCA,EAEJ1W,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,+FA/ChG6G,GAAuBvf,8CAAvBuf,EAAuBtf,QAAvBsf,EAAuB,YAAvBA,GAAb,GCgDaO,GAAb,MAAM,sDAAOA,6DAbE,CACPtH,GACAS,GACAQ,GACAY,GACAwB,GACAO,GACAO,EACAkB,GACAkB,GACAQ,IACH5iB,SAlBQ,CAACC,KAAcgF,KAAasW,GAAeK,OAoB3CuH,GAAb,GClDaC,GAAb,MAAM,QAEJniB,YAAoB+H,EAA4CF,GAA5C1H,wBAA4CA,2BAEhEiiB,cAAcvL,GAEZ,OACS1W,KAAK4H,iBAAiBuC,kBADd,MAAbuM,EAC6CA,EAGF1W,KAAK0H,oBAAoBC,YAAYoK,gBAAkB,iBAExGmQ,UAAUtL,EAAmB9L,EAAkB+L,GAE7C,GAAmB,MAAfD,GAAoC,MAAb9L,EACzB,OAAO9K,KAAK4H,iBAAiBuC,kBAAkBnK,KAAK0H,oBAAoBC,YAAYoK,gBAAkB,6BAA8B6E,EAAa,cAAgB9L,GAGnK,IAAIgM,EAA2B,GAEjB,IAAVD,GACFC,EAAehU,KAAK,UAAY+T,GAMlC,QAFIE,EAAwB,GAEnBC,EAAQ,EAAGA,EAAQF,EAAe7T,OAAQ+T,IACjDD,EAAgBA,GAA2B,GAATC,EAAc,IAAM,KAAOF,EAAeE,GAE9E,OAAOhX,KAAK4H,iBAAiBuC,kBAAkBnK,KAAK0H,oBAAoBC,YAAYoK,gBAAkB,gBAAkBgF,GAE1HoL,aAAazL,GAEX,OACS1W,KAAK4H,iBAAiBwC,YADd,MAAbsM,EACuCA,EAEF1W,KAAK0H,oBAAoBC,YAAYoK,gBAAkB,mBAElGqQ,cAAc1L,GAEZ,OACS1W,KAAK4H,iBAAiBwC,YADd,MAAbsM,EACuCA,EAEF1W,KAAK0H,oBAAoBC,YAAYoK,gBAAkB,oBAElGsQ,iBAAiB3L,GAEf,OACS1W,KAAK4H,iBAAiBwC,YADd,MAAbsM,EACuCA,EAEF1W,KAAK0H,oBAAoBC,YAAYoK,gBAAkB,0BAElGuQ,YAAYC,EAAiBC,GAC3B,OAAOxiB,KAAK4H,iBAAiB8B,SAAS1J,KAAK0H,oBAAoBC,YAAYoK,gBAAkB,iBAAmBwQ,EAASC,GAE3HC,SAASD,GACP,OAAOxiB,KAAK4H,iBAAiB2B,UAAUvJ,KAAK0H,oBAAoBC,YAAYoK,gBAAkB,iBAAkByQ,GAElHE,YAAYxK,GACV,OAAOlY,KAAK4H,iBAAiBgC,YAAY5J,KAAK0H,oBAAoBC,YAAYoK,gBAAkB,iBAAmBmG,EAAM7C,IAE3HsN,aAAajM,GAEX,OACS1W,KAAK4H,iBAAiBwC,YADd,MAAbsM,EACuCA,EAEF1W,KAAK0H,oBAAoBC,YAAYoK,gBAAkB,qBAElG6Q,aAAalM,EAAmBmM,GAC9B,OACS7iB,KAAK4H,iBAAiBuC,kBADd,MAAbuM,EAC6CA,EAEF1W,KAAK0H,oBAAoBC,YAAYoK,gBAAkB,iBAAmB8Q,iDAzEhHb,GAAa/f,8CAAb+f,EAAa9f,QAAb8f,EAAa,YAAbA,GAAb,GCRM,UCEA,SAANniB,cAGSG,qBAAwD,ICL3D,UCAA,UCeC,IAAM8iB,GAAb,MAAM,QAOJjjB,YAAoB+H,EAA4CF,EAAkD0J,GAA9FpR,wBAA4CA,2BAAkDA,qBALlHA,yBAA2C,IAAI+iB,GAC/C/iB,0BAA6C,IAAIgjB,GAEjDhjB,mBAA+B,IAAIgH,GAKnCgN,iBAAiBC,GACf,OAAOjU,KAAKoR,cAAc4C,iBAAiBC,GAASzQ,UAAUmF,GAAS3I,KAAKgH,cAAgB2B,GAG9Fsa,2BAA2BC,GACrBljB,KAAK0H,oBAAoBC,YAAYwb,eAAiB,IAAM,KAC9DlR,OAAOC,SAASkR,KAAOpjB,KAAK0H,oBAAoBC,YAAYoK,gBAAkB,0BAA4B/R,KAAK0H,oBAAoBC,YAAYwb,eAAiB,eAAiBD,GAIrLG,SAAS9P,EAAmBC,EAAkBgB,EAA2B0O,GACvE,IAAII,EAAiC,IAAIC,GACzCD,SAAW1O,UAAYrB,EACvB+P,EAAWpa,SAAWsK,EACtB8P,EAAW9O,kBAAoBA,EAC/B8O,EAAWJ,WAAaA,EAEjBljB,KAAK4H,iBAAiB2B,UAA+BvJ,KAAK0H,oBAAoBC,YAAYoK,gBAAkB,yBAA0BuR,GAAY9f,UAAWuD,IAClK/G,KAAKwjB,oBAAsBzc,EAAEgO,KACe,GAAxC/U,KAAKwjB,oBAAoBC,cAC3BxR,OAAOC,SAASkR,KAAOpjB,KAAKwjB,oBAAoBN,cAKtDQ,UAAUC,GACR,OAAO3jB,KAAK4H,iBAAiB2B,UAAgCvJ,KAAK0H,oBAAoBC,YAAYoK,gBAAkB,oCAAsC4R,EAAW,MAAMngB,UAAWuD,IACpL/G,KAAK4jB,qBAAuB7c,EAAEgO,KACc,MAAxC/U,KAAK4jB,qBAAqBV,aAC5BjR,OAAOC,SAASkR,KAAOpjB,KAAK4jB,qBAAqBV,4DAvC5CJ,GAAa7gB,uDAAb6gB,EAAa5gB,QAAb4gB,EAAa,YAAbA,GAAb,GCTae,GAAb,MAAM,QAEFhkB,YAAoB+H,EAA4CF,GAA5C1H,wBAA4CA,2BAEhE8jB,kBAAkBlN,EAAqB9L,EAAmBuK,EAAY4D,EAAczB,EAAiByG,EAAkBC,GACnH,IAAIpH,EAA2B,GAE/B,GAAU,MAANzB,GAAsB,MAAR4D,GAA4B,MAAZgF,GAA8B,MAAVC,EAAgB,CAClE,IAAIC,EAA2B,GAErB,MAAN9I,GACA8I,EAAerb,KAAK,OAASuS,EAAK,KAG1B,MAAR4D,GACAkF,EAAerb,KAAK,SAAWmW,EAAO,KAG3B,MAAXzB,GACA2G,EAAerb,KAAK,YAAc0U,EAAU,KAGhC,MAAZyG,GACAE,EAAerb,KAAK,uBAAyBmb,EAAW,KAG9C,MAAVC,GACAC,EAAerb,KAAK,qBAAuBob,EAAS,KAKxD,QAFIE,EAAwB,GAEnBpH,EAAQ,EAAGA,EAAQmH,EAAelb,OAAQ+T,IAC/CoH,EAAgBA,GAA2B,GAATpH,EAAc,GAAK,SAAWmH,EAAenH,GAG9D,IAAjBoH,GACAtH,EAAehU,KAAK,UAAYsb,GAKxC,IAFIrH,EAAwB,GAE5B,IAASC,EAAQ,EAAGA,EAAQF,EAAe7T,OAAQ+T,IAC/CD,GAAgCD,EAAeE,GAInD,OACWhX,KAAK4H,iBAAiBuC,kBADd,MAAfyM,GAAoC,MAAb9L,EACwB9K,KAAK0H,oBAAoBC,YAAYoK,gBAAkB,sCAAwC6E,EAAc,cAAgB9L,EAAY,IAAMiM,EAGnJ/W,KAAK0H,oBAAoBC,YAAYoK,gBAAkB,0BAA4BgF,GAItIgN,eAAenN,EAAqB9L,EAAmBuK,EAAY4D,EAAczB,EAAiByG,EAAkBC,GAChH,IAAIpH,EAA2B,GAE/B,GAAU,MAANzB,GAAsB,MAAR4D,GAA4B,MAAZgF,GAA8B,MAAVC,EAAgB,CAClE,IAAIC,EAA2B,GAErB,MAAN9I,GACA8I,EAAerb,KAAK,OAASuS,EAAK,KAG1B,MAAR4D,GACAkF,EAAerb,KAAK,SAAWmW,EAAO,KAG3B,MAAXzB,GACA2G,EAAerb,KAAK,YAAc0U,EAAU,KAGhC,MAAZyG,GACAE,EAAerb,KAAK,oBAAsBmb,EAAW,KAG3C,MAAVC,GACAC,EAAerb,KAAK,kBAAoBob,EAAS,KAKrD,QAFIE,EAAwB,GAEnBpH,EAAQ,EAAGA,EAAQmH,EAAelb,OAAQ+T,IAC/CoH,EAAgBA,GAA2B,GAATpH,EAAc,GAAK,SAAWmH,EAAenH,GAG9D,IAAjBoH,GACAtH,EAAehU,KAAK,UAAYsb,GAKxC,IAFIrH,EAAwB,GAE5B,IAASC,EAAQ,EAAGA,EAAQF,EAAe7T,OAAQ+T,IAC/CD,GAAgCD,EAAeE,GAInD,OACWhX,KAAK4H,iBAAiBuC,kBADd,MAAfyM,GAAoC,MAAb9L,EACwB9K,KAAK0H,oBAAoBC,YAAYoK,gBAAkB,mCAAqC6E,EAAc,cAAgB9L,EAAY,IAAMiM,EAGhJ/W,KAAK0H,oBAAoBC,YAAYoK,gBAAkB,uBAAyBgF,GAInIiN,iBAAiB7U,GACb,OACWnP,KAAK4H,iBAAiBwC,YADrB,IAAR+E,EACyCnP,KAAK0H,oBAAoBC,YAAYoK,gBAAkB,oCAAsC5C,EAEjGnP,KAAK0H,oBAAoBC,YAAYoK,gBAAkB,+BAGpGkS,cAAc9U,GACV,OACWnP,KAAK4H,iBAAiBwC,YADrB,IAAR+E,EACyCnP,KAAK0H,oBAAoBC,YAAYoK,gBAAkB,iCAAmC5C,EAE9FnP,KAAK0H,oBAAoBC,YAAYoK,gBAAkB,0EArH3F8R,GAAsB5hB,8CAAtB4hB,EAAsB3hB,QAAtB2hB,EAAsB,YAAtBA,GAAb,GC2BaK,GAAb,MAAM,sDAAOA,6DAFA,CAAClC,GAAexL,GAAcsM,GAAee,IAAuBjlB,SANtE,CAACC,KAAcgF,KAAasW,OAQ1B+J,GAAb,GCzBaC,GAAb,MAAM,sDAAOA,8BAAYC,oECRzBniB,0DDQakiB,GAAb,sDEJQliB,gBAA8BA,SAAeA,+BAAfA,sGAFpCA,2BAA2CA,yDAASoiB,wBAC9CpiB,sBAAgCA,SAAcA,QAC9CA,uBACNA,gCAHuEA,4CACjCA,mCACnBA,8DAMjBA,gBAA8BA,SAAgBA,+BAAhBA,2GAC9BA,uBACAA,wBAAWA,+BADqEA,mFAHlFA,2BAA0CA,yDAASqiB,wBACjDriB,sBAAgCA,SAAcA,QAC9CA,uBACAA,6BAEJA,gCALwEA,0BACpCA,mCACnBA,mCACFA,wFAIfA,gCAAmKA,6DAAasiB,2BAAuBtiB,8CAAjIA,iBAAjBA,gBAAgB,sBAAhBA,CAAgB,mBAAhBA,CAAgB,wFCJ9D,IAAMuiB,GAAb,MAAM,QASF3kB,YAAmBwR,EAAwBoT,EAAwCC,GAAhE1kB,cAAwBA,sBAAwCA,kBAL1EA,oBAAgB,EAEfA,eAA+B,IAAI2kB,MAK7CC,YAGAC,QAAQC,EAAmBC,GAClBA,IAGiB/kB,KAAK0kB,WAAWM,cAAcC,SAASF,KAE1D/kB,KAAK8B,KAAKnB,MAAO,IAIxBukB,SAASpjB,GACL9B,KAAK8B,KAAKnB,MAAO,EAGrBwkB,aAAarjB,GACT,OAAoB,MAAZA,EAAKsjB,KAAetjB,EAAKsjB,IAAIniB,OAAS,EAGlDoiB,QAAQvjB,GACJ,IAAIujB,GAAU,EACd,OAAiB1Y,MAAb7K,EAAKwjB,MACY,IAAbxjB,EAAKwjB,MAAyB,GAAXxjB,EAAKwjB,OACxBD,GAAU,GAIXA,EAGXE,YAAYzjB,GACRA,EAAKnB,MAAQmB,EAAKnB,KAEdX,KAAKwlB,cAAgBxlB,KAAKmlB,aAAarjB,IACvC9B,KAAKykB,eAAenjB,mBAExBtB,KAAKylB,UAAUC,KAAK5jB,GAGxB6jB,eAAe7jB,GACC,MAARA,KACK9B,KAAKmlB,aAAarjB,KAAUA,EAAKnB,OAClCX,KAAKulB,YAAYvlB,KAAK8B,oDAvDzB0iB,GAAwBviB,4DAAxBuiB,EAAwBJ,uqBDXrCniB,0BAEEA,kCAMAA,kCAOFA,sCAEAA,eAjBcA,gDAAgDA,8DAE5CA,+CAMAA,8CAOqBA,wHCJ1BuiB,GAAwBoB,cAAxBpB,GAAb,4BCTQviB,kEAA+GA,qBAAjEA,gBAAa,sBAAbA,CAAa,8BCK5D,IAAM4jB,GAAb,MAAM,QAMJhmB,cAJSG,eAAoB,EAEpBA,kBAAuB,EAIhC4kB,0DARWiB,8BAAmBzB,0TDPhCniB,+BAAsD,WAE9CA,sCAEJA,iBAFwCA,iFCK/B4jB,GAAb,0FCOO,IAAMC,GAAb,MAAM,QAgBFjmB,YAAoB6kB,EAA+BqB,EACxCtB,EAAwCuB,GAD/BhmB,kBAA+BA,qBACxCA,sBAAwCA,oBAhBnDA,aAAkB,EAETA,iBAAqB,KAG9B6kB,QAAQC,EAAmBC,GAClBA,IAIAkB,KADsBvB,WAAWM,cAAcC,SAASF,KAEzD/kB,KAAKkmB,QAAS,IAOtBtB,WACQ5kB,KAAK+lB,cAAc5P,cACnBnW,KAAKgmB,aAAazO,YAAY,KAAMM,SAAS7X,KAAK+lB,cAAc3P,eAAeoB,UAAUhU,UAAUuU,IAC/F/X,KAAKmmB,YAAoBpO,EAAIhD,KAC7B/U,KAAKmmB,YAAYhX,KAAOnP,KAAKomB,WAAWpmB,KAAKmmB,YAAYvR,aAKrEyR,aACI,OAAOrmB,KAAK+lB,cAAc5S,aAGvBL,QAAU9S,KAAK+lB,cAAcjT,QAE7BE,SAAWhT,KAAK+lB,cAAc/S,SAE7BoT,WAAWjX,GACf,GAAIA,EAAKmX,QAAQ,MAAO,EAAI,CACxB,IAAIC,EAAWpX,EAAKqX,MAAM,KAC1B,OAAOD,EAAS,GAAK,IAAMA,EAAS,GAEpC,OAAOpX,gDAzCN2W,GAAmB7jB,mEAAnB6jB,EAAmB1B,+FAAnBqC,wBAA6B,0hBCd1CxkB,iBAAoC,cACfA,qDACjBA,kBACEA,iBACAA,kBAAuCA,8BAA8CA,QACrFA,sBAA2CA,+BAAmBA,YAIlEA,iBAA6D,WAA7DA,CAA6D,kBAA7DA,CAA6D,mBAA7DA,CAA6D,UAITA,qDAA2BA,oBAAOA,QAC9EA,qBAAwB,eACZA,2BAAcA,YAG5BA,0BAAe,WAC2BA,qDAA2BA,iBAAIA,QACvEA,qBAAwB,eACZA,iBAAIA,YAIlBA,wBAEAA,6BAAeA,gCAAyB,GAAhBwkB,eAAuBA,WAAWA,YACxDxkB,iBAAWA,UAA6CA,QACxDA,qBAAwB,eACZA,UAAmDA,2BA7BAA,gCAAsBA,iCAErEA,6GACmBA,qFAKJA,gCAIpBA,0CAeAA,oDAECA,snDDhBT6jB,GAAb,6BEAY7jB,yBAAwC,UAAxCA,CAAwC,WAAxCA,CAAwC,UAIhCA,kBACAA,aAAGA,SAAgBA,0CAFlBA,wCACIA,uCACFA,4BCPhB,IAAMykB,GAAb,MAAM,QAgBF7mB,YAAoB6kB,EAAgChd,EACxC9H,EAAwC6X,GADhCzX,kBAAgCA,2BACxCA,sBAAwCA,2BAfpDA,UAAc,GACdA,aAAkB,EAGlB6kB,QAAQC,EAAmBC,GAClBA,IAIAkB,KADsBvB,WAAWM,cAAcC,SAASF,KAEzD/kB,KAAKkmB,QAAS,IAOtBtB,WACI5kB,KAAKJ,eAAeM,yBAAyB,6BAA6BsD,UAAWuU,IACjF,IAAI4O,EAAM5O,EAAIjR,KAAKwR,GAAKA,EAAEsO,mBAAqB5mB,KAAK0H,oBAAoBC,YAAYif,kBACzEja,MAAPga,IACA3mB,KAAK6mB,KAAOF,EAAIE,sDAvBnBH,GAAoBzkB,mEAApBykB,EAAoBtC,gGAApBqC,wBAEV,uaDdHxkB,iBAA0C,cAChBA,qDACtBA,kBAAkD,cACtCA,gBAAIA,YAIlBA,iBAA6D,UAA7DA,CAA6D,UAA7DA,CAA6D,QAGnDA,wBAAYA,QAChBA,wBACAA,gCAA8C,sBAE1CA,mCAUFA,yBAvBoEA,gCAMrCA,gCAOEA,08CCF9BykB,GAAb,0BCVIzkB,oBAAoDA,qBAASA,gCAC7DA,oBAAqDA,gBAAIA,SCWtD,IAAM6kB,GAAb,MAAM,QAUFjnB,YAAmB4kB,EAAwChN,EAAkDsP,GAA1F/mB,sBAAwCA,2BAAkDA,0BAL7GA,gBAAkCA,KAAK+mB,mBAAmB/d,QAAQge,eAC7Dve,MACGqP,QAAItS,GAAUA,EAAOyhB,UAK7BC,qBACIlnB,KAAKykB,eAAe1jB,kEAbf+lB,GAAqB7kB,0DAArB6kB,EAAqB1C,kTDdlCniB,yBAAsG,cAC5EA,gCAASwkB,wCAC/BxkB,6BACAA,6BACFA,QACAA,oBACEA,SACFA,QACAA,kBAA4B,kBAA5BA,CAA4B,oBAM5BA,sBAAuBA,gCAASwkB,yBAAsBxkB,sBAASA,iBAZlDA,2DACAA,4DAGXA,mPCQS6kB,GAAb,4CCbI7kB,iBAAiE,YAC+BA,mEAAQklB,mBAAqBllB,sCAA9FA,qCAAiCA,4BCe7D,IAAMmlB,GAAb,MAAM,QAyCFvnB,YAAoB4kB,yBAxCpBzkB,gBAAa,uBAEbA,YAAkB,CACd,CACIqnB,WAAY,SACZC,MAAO,UACPC,QAAQ,EACRC,WAAW,EACXC,UAAU,GAEd,CACIJ,WAAY,SACZC,MAAO,UACPC,QAAQ,EACRC,WAAW,EACXC,UAAU,GAEd,CACIJ,WAAY,QACZC,MAAO,UACPC,QAAQ,EACRC,WAAW,EACXC,UAAU,GAEd,CACIJ,WAAY,QACZC,MAAO,UACPC,QAAQ,EACRC,WAAW,EACXC,UAAU,GAEd,CACIJ,WAAY,MACZC,MAAO,UACPC,QAAQ,EACRC,WAAW,EACXC,UAAU,IAMlB7C,WACI,MAAM8C,EAAa1nB,KAAK2nB,iBACN,MAAdD,EAEA1nB,KAAK4nB,OAAO3P,QAAQ4P,IACO,GAAnBA,EAAML,WACNxnB,KAAK8nB,WAAWD,KAKxB7nB,KAAK8nB,WAAWJ,GAIxBK,cAAcF,GACV,IAAIG,EAAehoB,KAAK2nB,iBAExB3nB,KAAKykB,eAAe1jB,oBAEpBf,KAAKioB,YAAYD,GACjBhoB,KAAK8nB,WAAWD,GAEhB7nB,KAAK0nB,WAAWG,GAGpBC,WAAWD,GACP,IAEI7nB,KAAK4nB,OAAO3P,QAAQiQ,IAEZA,EAAIT,SADJS,EAAIb,YAAcQ,EAAMR,aAQhCc,SAASpT,KAAKqT,UAAUC,IAAIR,EAAMR,kBAE7B/N,KAGb2O,YAAYJ,GACR,IACIM,SAASpT,KAAKqT,UAAUE,OAAOT,EAAMR,kBAChC/N,KAGboO,WAAWG,GACP,IACI5V,OAAOxB,aAAazQ,KAAKuoB,YAActe,KAAKue,UAAUX,SACjDvO,KAGbqO,iBACI,IACI,OAAO1d,KAAKC,MAAM+H,OAAOxB,aAAazQ,KAAKuoB,aAAe,YACrDjP,GACL,OAAO,MAGfmP,oBACI,IACIxW,OAAOxB,aAAaI,WAAW7Q,KAAKuoB,kBAC/BjP,mDA5GJ8N,GAAsBnlB,mCAAtBmlB,EAAsBhD,2NDjBnCniB,iBACIA,wBAGJA,eAH0DA,4TCgB7CmlB,GAAb,6BCMwCnlB,yBAAoE,gBAElBA,gBAAIA,QAC9CA,iBAAY,YACmBA,SAAsBA,UAErDA,kBAA+B,UAChBA,yBACPA,QACAA,iBAAOA,2BACPA,QACAA,iBAAOA,UAEPA,UAERA,wBACRA,kCAZuCA,2BAGhBA,2DAEAA,6DAEAA,gGAevBA,yBAA8DA,sBAC9DA,mCACAA,yBAAoE,iBAEpBA,iBAAKA,QAC7CA,iBAAY,YACmBA,SAAsBA,UAErDA,kBAA+B,UAChBA,yBACPA,QACAA,iBAAOA,2BACPA,QACAA,iBAAOA,UAEPA,UAERA,wBACRA,kCAZuCA,2BAGhBA,2DAEAA,6DAEAA,mGAefA,yBAAqE,iBAEvCA,gBAAIA,QAC1BA,iBAAY,YACmBA,SAAsBA,UAErDA,kBAA+B,UAChBA,yBACPA,QACAA,iBAAOA,2BACPA,QACAA,iBAAOA,UAEPA,UAERA,wBACRA,kCAZuCA,2BAGhBA,2DAEAA,6DAEAA,mGAhB/CA,eAA6B,UACgDA,wBAAYA,QACjFA,uBACAA,+BAA8C,cAE9BA,oCAiBRA,kCAjB6CA,yDCnE9E,IAAMymB,GAAb,MAAM,QAKJ7oB,YAAmB8oB,EAA6CC,GAA7C5oB,yBAA6CA,2BAHhEA,sBAA2B,EAC3BA,WAAgBwG,KAAKC,MAGnBzG,KAAK6oB,eAAiB7oB,KAAK2oB,kBAG7BG,YAEI9oB,KAAK+oB,gBADH/oB,KAAK6oB,eAAe3iB,aAAajD,OAAS,gDAVrCylB,GAAiBzmB,6CAAjBymB,EAAiBtE,geDV9BniB,yBAAe,cAAfA,CAAe,UAE0CA,uBAAWA,QAEpDA,4BAAqC,iBAErCA,iBAAyB,UACwBA,uBAAWA,QACpDA,iBAAiCA,UAA4DA,QAC7FA,kBAAiCA,UAA8DA,QAC/FA,kBAAiCA,UAAwDA,QACzFA,kBAAiCA,UAAsEA,YAIvHA,sBAA6B,SAA7BA,CAA6B,WAGwDA,8BACrEA,QACAA,wBACAA,gCAA8C,eAE9BA,qCAiBRA,UAKRA,iBAAqEA,yBAAYA,QACjFA,wBACAA,gCAA8C,eAE9BA,mCAEAA,qCAiBRA,UAIRA,yBAyBRA,mBAzFyCA,kFACAA,mFACAA,6EACAA,2FAYoBA,uDA0BrBA,8DAEqBA,uDAqB/CA,ySC9DjBymB,GAAb,sECYQzmB,+BCAD,IAAM+mB,GAAb,MAAM,QAgBJnpB,YAAoBopB,EAAuClD,EAAsC4C,EACvFtX,EAAuB6X,EAAsBnC,EAC7CtC,EAAwCmE,GAF9B5oB,sBAAuCA,qBAAsCA,yBACvFA,cAAuBA,aAAsBA,0BAC7CA,sBAAwCA,2BAVlDA,gBAAkCA,KAAK+mB,mBAAmB/d,QAAQge,eAC/Dve,QACCqP,MAAItS,GAAUA,EAAOyhB,UAIzBjnB,mBAAwB,EAMtBA,KAAK+lB,cAAcpU,mBACnBiX,EAAoBjhB,YAAYif,iBAAiBuC,SAAS,WAAanpB,KAAKkpB,MAAME,SAAS,qBAAuBppB,KAAKkpB,MAAME,SAAS,WAGxIxE,WAEE5kB,KAAKykB,eAAevkB,yBAAyB,4BAA4BsD,UAAWuU,IAClF/X,KAAKqpB,SAAWtR,IAElB/X,KAAKipB,eAAeK,YAAY9lB,UAAW+lB,IAEjB,SADFA,EAAOC,aAE3BxpB,KAAKypB,YAAa,KAItBzpB,KAAKykB,eAAexjB,aAAejB,KAAKiB,aACxCjB,KAAKykB,eAAepjB,YAAcrB,KAAKqB,YAGzCynB,YAEEX,SAASpT,KAAK2U,MAAMC,OAAS,UAC7B3pB,KAAS2oB,kBAAkBziB,aAAajD,OAAS,GAC/CjD,KAAK4pB,cAAe,EACpBzB,SAASpT,KAAK2U,MAAMC,OAAS,QAG7B3pB,KAAK4pB,cAAe,EAIxBnC,SAAS/b,GACP,OAAO1L,KAAKqR,OAAOoW,SAASznB,KAAKqR,OAAOwY,cAAcne,IAAO,iDArDpDsd,GAAgB/mB,iHAAhB+mB,EAAgB5E,smBDtB7BniB,mCAAkC,wEAK9BA,iBAAyB,mBAGrBA,eACFA,QAEAA,0BACFA,UAIFA,kCAA8D,0BAA9DA,CAA8D,2BAIxDA,8BAEAA,sCAEAA,iCACEA,0BACFA,cAONA,8BAEEA,wBACFA,iBAjC+DA,6DAA+C,oCAA5GA,4DAQgBA,mCASKA,8CAEEA,yUCAd+mB,GAAb,4BCbO,IAAMc,EAAb,MAAM,QAOJjqB,YAAoB6kB,qBALT1kB,WAAgB,IACfA,WAA8B,IAAI2kB,OAKxBoF,QAAUrF,EAAWM,cAAe,SAASvc,QAAKuhB,MAAahqB,KAAKiqB,QAAQzmB,UAAU0mB,GAASlqB,KAAKwQ,MAAMkV,KAAK1lB,KAAKmqB,aAGxIC,cACIpqB,KAAKmqB,WAAa,iDAZbL,GAAgB7nB,uCAAhB6nB,EAAgB1F,uRCT7BniB,4BAAoC,aACYA,0DAA5CA,QACAA,sBAAoBA,kBAAMA,iBADVA,4CAA2B,4FDQlC6nB,GAAb,0BEeY7nB,iBAAuCA,oBAAOA,mCAC9CA,iBAAwCA,8BAA+BA,kCAA/BA,oEAKxCA,iBAAuCA,kBAAKA,mCAC5CA,iBAAwCA,SAAiBA,kCAAjBA,uDAKxCA,iBAAuCA,+BAAkBA,mCACzDA,iBAAwCA,yBAA2DA,kCAA3DA,qGAKxCA,iBAAuCA,gCAAmBA,mCAC1DA,iBAAuCA,yBAA4DA,kCAA5DA,qGAKvCA,iBAAuCA,yBAAYA,gCAG/CA,uBAAmHA,gBAAIA,gCACvHA,uBAAuGA,wBAAYA,gCACnHA,uBAAsGA,kBAAMA,gCAE5GA,uBAAqHA,gBAAIA,gCACzHA,uBAAyGA,wBAAYA,gCACrHA,uBAAwGA,kBAAMA,mCARlHA,iBAEIA,8BACAA,8BACAA,8BAEAA,8BACAA,8BACAA,8BACJA,kCAPeA,mDACAA,+CACAA,gDAEAA,oDACAA,gDACAA,yEAMfA,iBAA8DA,0BAAaA,kDAC3EA,iBAAuC,WAAvCA,CAAuC,eAEKA,mEAASooB,oBACzCpoB,uBAAiDA,kBAAMA,qCAMvEA,uCACAA,mDC3DD,IAAMqoB,GAAb,MAAM,QAUFzqB,YAAoB0qB,EAAoD9F,GAApDzkB,4BAAoDA,sBARxEA,sBAA6B,CAAC,SAAU,OAAQ,oBAAqB,qBAAsB,SAAU,WACrGA,uBAAoC,GACpCA,6BAAsC,IAAIgK,EAC1ChK,mBAAgC,GAChCA,oBAAiC,GACjCA,aAAkB,EAClBA,cAAmB,EAInB4kB,WACI5kB,KAAKwqB,8BAA8BxqB,KAAKyqB,QAASzqB,KAAK6b,UAG1D2O,8BAA8B3f,EAAcgR,GACxC7b,KAAKyqB,QAAU5f,EACf7K,KAAK6b,SAAWA,EAChB7b,KAAKuqB,qBAAqBxK,qBAAqBlV,EAAMgR,GAAUrY,UAAWuU,IACtE/X,KAAK0qB,kBAAoB3S,EAAIhD,KAAK4V,aAClC3qB,KAAK4qB,wBAA0B7S,EAAIhD,KAAK/K,WACxChK,KAAK6qB,0BAIbC,gCAAgCxR,GAC5BtZ,KAAKwqB,8BAA8BlR,EAAEyR,UAAY,EAAGzR,EAAEuC,UAG1DmP,4BAA4Bxa,GACxBxQ,KAAKuqB,qBAAqBvK,iBAAiB,KAAMxP,GAAOhN,UAAWuU,IAC/D/X,KAAK0qB,kBAAoB3S,EAAIhD,KAAK4V,aAClC3qB,KAAK4qB,wBAA0B7S,EAAIhD,KAAK/K,aAIhDihB,oBAGIjrB,KAAK0qB,kBAAkBzS,QAAQiT,IAC3BA,EAAMC,cAAgB,WAEtBnrB,KAAKuqB,qBAAqBtK,YAAYiL,EAAMpb,QAAQtM,UAC/CuU,IACGmT,EAAMC,cAAgB,OAQtBnrB,KAAKykB,eAAelkB,yBANpB6qB,EAAQrW,KAAKsW,gBAAmBpoB,OAAS,EAC3BioB,EAAM/b,KAAO,yDAA2D4I,EAAIhD,KAAKsW,gBAAmB,GAAGC,SAAc,IAAMvT,EAAIhD,KAAKsW,gBAAmBtT,EAAIhD,KAAKsW,gBAAmBpoB,OAAS,GAAGqoB,SAG/LJ,EAAM/b,KAAO,sBAE2B,QAAS,YAElExG,IACGuiB,EAAMC,cAAgB,QACtBnrB,KAAKykB,eAAelkB,yBAAyB2qB,EAAM/b,KAAO,IAAMxG,EAAMnI,QAAS,QAAS,UAG5F,KACIR,KAAKwqB,8BAA8BxqB,KAAKyqB,QAASzqB,KAAK6b,YAE9D7b,KAAKurB,cAAczoB,KAAKooB,KAIhCM,sBAGIxrB,KAAK0qB,kBAAkBzS,QAAQiT,IAC3BA,EAAMO,eAAiB,WAEvBzrB,KAAKuqB,qBAAqBrK,aAAagL,EAAMpb,QAAQtM,UAChDuU,IACGmT,EAAMO,eAAiB,OAQvBzrB,KAAKykB,eAAelkB,yBANpB6qB,EAAQrW,KAAKsW,gBAAmBpoB,OAAS,EAC3BioB,EAAM/b,KAAO,yDAA2D4I,EAAIhD,KAAKsW,gBAAmB,GAAGC,SAAc,IAAMvT,EAAIhD,KAAKsW,gBAAmBtT,EAAIhD,KAAKsW,gBAAmBpoB,OAAS,GAAGqoB,SAG/LJ,EAAM/b,KAAO,sBAE2B,QAAS,YAElExG,IACGuiB,EAAMO,eAAiB,QACvBzrB,KAAKykB,eAAelkB,yBAAyB2qB,EAAM/b,KAAO,IAAMxG,EAAMnI,QAAS,QAAS,UAG5F,KACIR,KAAKwqB,8BAA8BxqB,KAAKyqB,QAASzqB,KAAK6b,YAE9D7b,KAAK0rB,eAAe5oB,KAAKooB,KAIjCS,SACI3rB,KAAKwqB,8BAA8B,EAAG,GAGlCK,wBAEA7qB,KAAKurB,cAActoB,OAAS,GAC5BjD,KAAK0qB,kBAAkBzS,QAAQ2T,IAC3B,IAAIlrB,EAASV,KAAKurB,cAAczkB,KAAKohB,GAAOA,EAAIpY,QAAU8b,EAAY9b,QACxD,MAAVpP,IACAkrB,EAAYT,cAAgBzqB,EAAOyqB,iBAK3CnrB,KAAK0rB,eAAezoB,OAAS,GAC7BjD,KAAK0qB,kBAAkBzS,QAAQ2T,IAC3B,IAAIlrB,EAASV,KAAK0rB,eAAe5kB,KAAKohB,GAAOA,EAAIpY,QAAU8b,EAAY9b,QACzD,MAAVpP,IACAkrB,EAAYH,eAAiB/qB,EAAO+qB,kBAM5CI,eAAeC,GACnB9rB,KAAKuqB,qBAAqBpK,kBAAkB3c,UAAUuU,IAElD/X,KAAKuqB,qBAAqBzJ,oBAAoBgL,EAAKhc,OADAiI,EAAIhD,KACyBgX,eAAevoB,UAC1FwoB,IACGhsB,KAAKykB,eAAelkB,yBAAyB,oCAAsCurB,EAAK3c,KAAO,UAAW,QAAS,YAEtHxG,IAAY3I,KAAKykB,eAAelkB,yBAAyB,4BAA6B,QAAS,aAIxGP,KAAKuqB,qBAAqBpK,kBAAkB3c,UAAUuU,IAElD/X,KAAKuqB,qBAAqBxJ,uBAAuB+K,EAAKhc,OADHiI,EAAIhD,KAC4BgX,eAAevoB,UAC7FwoB,IACGhsB,KAAKykB,eAAelkB,yBAAyB,oCAAsCurB,EAAK3c,KAAO,UAAW,QAAS,YAEtHxG,IAAY3I,KAAKykB,eAAelkB,yBAAyB,4BAA6B,QAAS,2DA3InG+pB,GAA2BroB,6CAA3BqoB,EAA2BlG,sxDDfxCniB,iBAAwC,gBAAxCA,CAAwC,oBAAxCA,CAAwC,UAGtBA,qCAAyBA,QAC/BA,kBACAA,oBAA6C,gBAC/BA,gCAASwkB,aAAUxkB,mBAAOA,cAMhDA,iBAAoB,SAApBA,CAAoB,2BAE6CA,iCAASwkB,mCAElExkB,YAIRA,oBAGIA,YACIA,wBACAA,wBACJA,QAGAA,aACIA,wBACAA,wBACJA,QAGAA,aACIA,wBACAA,wBACJA,QAGAA,aACIA,wBACAA,wBACJA,QAGAA,aACIA,wBACAA,wBAUJA,QAGAA,aACIA,yBACAA,wBAOJA,QAEAA,yBACAA,yBACJA,QAGAA,6BAAyGA,gCAAQwkB,uCACjHxkB,iBA3DmCA,kDAqDXA,sDACaA,sDAItBA,+DAA8C,aAA9CA,CAA8C,ghBC/DpDqoB,GAAb,GCTa2B,GAAb,MAAM,QAEJpsB,6DAFWosB,8BAAc7H,gECN3BniB,gEDMagqB,GAAb,GEMeC,EAAb,MAAM,QAEJrsB,YACSssB,EACyBzgB,GADzB1L,iBACyBA,YAElCosB,YACEpsB,KAAKmsB,UAAU5qB,sDAPN2qB,GAA4BjqB,kBAI7BoqB,gCAJCH,EAA4B9H,8SCZ3CniB,gBAAqBA,SAAcA,QACnCA,iBAAwB,OACnBA,SAAaA,UAElBA,iBAAwB,cACmBA,gCAASwkB,gBAA6BxkB,cAAEA,QACjFA,oBAAmEA,eAAGA,iBANnDA,6BAEhBA,4BAIsCA,gGDM5BiqB,GAAb,GEVI,SAANrsB,cAGWG,+BAAqD,GACrDA,8BAAmD,ICGvD,IAAMssB,EAAb,MAAM,QAKJzsB,YAAoB6H,EAAkD6kB,GAI7D,aAJWvsB,2BAAkDA,aAH7DA,aAAkB,GAKjBA,KAAKusB,MAAMC,cAGfxsB,KAAKysB,OAASzsB,KAAK0H,oBAAoBC,YAAYgT,qBAAuB,uBAMhF+R,UACEza,OAAOtR,KAAKX,KAAKysB,OAASzsB,KAAK2sB,uDAjBtBL,GAAarqB,gDAAbqqB,EAAalI,mJCT1BniB,oBAAwBA,gCAASwkB,cAC7BxkB,oBAAUA,wBAAYA,qDDQbqqB,GAAb,0BEFgBrqB,iBAAuCA,oBAAOA,mCAC9CA,iBAAwCA,SAAiBA,kCAAjBA,uDAKxCA,iBAAuCA,oBAAOA,gCAE1CA,uBAA2DA,oBAAQA,kDACnEA,2BAAwCA,4EAAU2qB,sBAA2B3qB,mCAFjFA,iBACIA,8BACAA,kCACJA,kCAFeA,kCACIA,0DAGvBA,wCAeIA,iBAAuCA,oBAAOA,mCAC9CA,iBAAwCA,SAAiBA,kCAAjBA,uDAKxCA,iBAAuCA,oBAAOA,kDAI1CA,qBAAkEA,2EAAS4qB,sBAA2B5qB,oBAAUA,eAAGA,oDACnHA,qBAAmEA,2EAAS6qB,uBAAT7qB,CAAqC,oDAAuC8qB,WAAe9qB,oBAAUA,sBAAUA,2CAAzEA,sDAErGA,kDANRA,iBAAuC,eAEIA,mEAAS+qB,qBAA0B/qB,oBAAUA,kBAAMA,UAC1FA,4BACAA,4BACAA,6BACIA,kCACJA,kCAJSA,4CACAA,6CAEUA,wEAI3BA,mDClCL,IAAMgrB,GAAb,MAAM,QA+BFptB,YAAoB6K,6BA7BX1K,yBAA6B,EAC7BA,0BAA8B,EAG9BA,oBAA6B,GAC7BA,8BAAuC,IAAIgK,EAC3ChK,qBAA8B,GAE7BA,2BAAwB,IAAI2kB,MAC5B3kB,wBAAwC,IAAI2kB,MAC5C3kB,qBAAqC,IAAI2kB,MAEzC3kB,kBAAkC,IAAI2kB,MACtC3kB,oBAAoC,IAAI2kB,MACxC3kB,sBAAsC,IAAI2kB,MAE1C3kB,SAAyB,IAAI2kB,MAC7B3kB,YAA4B,IAAI2kB,MAM1C3kB,4BAAqC,GAGrCA,+BAAwC,IAAIgK,EAC5ChK,sBAA6B,CAAC,SAAU,UAIxCktB,cAEIltB,KAAKmtB,eAAelV,QAAQK,IACpBtY,KAAKotB,gBAAgBtmB,KAAKohB,GAAOA,EAAI7S,GAAGgY,qBAAuB/U,EAAEjD,GAAGgY,uBACpE/U,EAAEgV,UAAW,KAGrBttB,KAAKutB,+BAA+B9hB,OAAOzL,KAAKwtB,YAAaxtB,KAAK6b,UAEtE4R,iBAAiB3B,GACb9rB,KAAKmtB,eAAelV,QAAQK,IACpBA,EAAEjD,GAAGgY,qBAAuBvB,EAAKzW,GAAGgY,sBACpC/U,EAAEgV,UAAW,KAIjBttB,KAAKotB,gBAAgBtmB,KAAKwR,GAAKA,EAAEjD,GAAGgY,qBAAuBvB,EAAKzW,GAAGgY,sBAInErtB,KAAKotB,gBAAgBtqB,KAAK,CAAEuS,GAAIyW,EAAKzW,GAAIlG,KAAM2c,EAAK3c,KAAMme,UAAU,EAAOI,SAAS5B,EAAK4B,WAG7F1tB,KAAKutB,+BAA+B9hB,OAAOzL,KAAKwtB,YAAaxtB,KAAK6b,UAElE7b,KAAKqoB,IAAI3C,KAAKoG,GAElB6B,gBAAgB7B,GACZ9rB,KAAKmtB,eAAelV,QAAQK,IACpBA,EAAEjD,GAAGgY,qBAAuBvB,EAAKzW,GAAGgY,sBACpC/U,EAAEgV,UAAW,KAIrBttB,KAAKotB,gBAAkBptB,KAAKotB,gBAAgB3T,OAAOnB,GAAKA,EAAEjD,IAAMyW,EAAKzW,IAErErV,KAAKutB,+BAA+B9hB,OAAOzL,KAAKwtB,YAAaxtB,KAAK6b,UAElE7b,KAAK4tB,sBAAsBlI,KAAK1lB,KAAKotB,iBAErCptB,KAAKsoB,OAAO5C,KAAKoG,GAErB+B,yBAAyB/I,GACrB9kB,KAAK8tB,mBAAmBpI,KAAKZ,GAEjCiJ,wBAAwBzU,GACpBtZ,KAAKwtB,WAAalU,EAAEyR,UAAY,EAChC/qB,KAAK6b,SAAWvC,EAAEuC,SAClB7b,KAAKutB,+BAA+B9hB,OAAOzL,KAAKwtB,YAAaxtB,KAAK6b,UAEtE0R,+BAA+B1iB,EAAeC,GAC1C,IAAIkjB,EAAShuB,KAAK0K,mBAAmBC,gBAAgB3K,KAAKotB,gBAAiBviB,EAAMC,GACjF9K,KAAKiuB,uBAAyBD,EAAOtiB,KACrC1L,KAAKkuB,0BAA4BF,EAAOhkB,WAE5CmkB,yBAAyBC,GACrBpuB,KAAKquB,gBAAgB3I,KAAK0I,GAE9BE,wBAAwBF,GAEP,IAATA,EACApuB,KAAKiuB,uBAAyBjuB,KAAKiuB,uBAAuBxU,OAAOnB,GAAKA,EAAEnJ,KAAKke,oBAAoBlE,SAASiF,EAAMf,sBAGhHrtB,KAAKutB,+BAA+B9hB,OAAOzL,KAAKwtB,YAAaxtB,KAAK6b,UAG1E0S,oBAAoBH,GAChBpuB,KAAKwuB,aAAa9I,KAAK0I,GAE3BK,iBAAiBL,GACbpuB,KAAK0uB,eAAehJ,KAAK0I,GAE7BO,mBAAmBP,GACfpuB,KAAK4uB,iBAAiBlJ,KAAK0I,iDA3GtBnB,GAAmBhrB,oCAAnBgrB,EAAmB7I,0nDDjBhCniB,iBAAyE,UAAzEA,CAAyE,UAEzCA,6BAAiBA,QACzCA,gCAA8DA,iCAASwkB,gCAAmCxkB,QAC1GA,mBAEIA,WACIA,uBACAA,uBACJA,QAGAA,WACIA,wBACAA,wBAIJA,QACAA,wBACJA,QAEAA,6BACgCA,gCAAQwkB,gCACxCxkB,UAGJA,kBAAY,WACgBA,6BAAgBA,QACxCA,kCAA6DA,iCAASwkB,+BAAkCxkB,QACxGA,oBAGIA,YACIA,wBACAA,wBACJA,QAGAA,YACIA,wBACAA,wBASJA,QACAA,wBACJA,QAEAA,6BACgCA,gCAAQwkB,+BACxCxkB,mBApDiBA,8CAeoBA,sDAGtBA,sEAAsD,gDAAtDA,CAAsD,cAAtDA,CAAsD,gCAQpDA,sDAqBoBA,sDAGtBA,uEAAuD,iDAAvDA,CAAuD,cAAvDA,CAAuD,oKCrCjEgrB,GAAb,0BCgBUhrB,iBAA8DA,6BAAgBA,mCAC9EA,iBAAwCA,SAAiBA,kCAAjBA,uDAIxCA,iBAA8DA,qBAAQA,kDACtEA,iBAAuC,WAAvCA,CAAuC,eAECA,2DAASsiB,EAATsK,OAAStK,uBAC3CtiB,uBAA4BA,gBAAIA,UAElCA,qBAAkCA,2DAAS6sB,EAATD,OAASC,yBACzC7sB,uBAA8BA,kBAAMA,qCAM5CA,uCACAA,+FAvCNA,8BAAmE,UAAnEA,CAAmE,cAGhCA,iDAAS8sB,qBACtC9sB,sBAAsCA,eAAGA,YAI7CA,iBAA8B,WAA9BA,CAA8B,QAA9BA,CAA8B,2BAI+BA,kDAAS+sB,yBAChE/sB,YAIJA,oBAEEA,aACEA,yBACAA,yBACFA,QAEAA,aACEA,yBACAA,yBAUFA,QAEAA,yBACAA,yBACFA,QAEAA,6BACEA,iDAAQgtB,mCACVhtB,oCA3BoDA,+CAqB9BA,qDACaA,sDAGpBA,6DAA4C,cAA5CA,CAA4C,uDAW3DA,qBAA2CA,kCAAsBA,kDAJrEA,8BAAoE,uBAGhEA,oBACAA,+BACFA,QAEAA,iBAA+BA,8BAAkBA,QAEjDA,kBAAkC,sBACmCA,+FAA8C,yDAC/BitB,yCADfjtB,CAA8C,sDAE7FktB,qCAF+CltB,CAA8C,0CAE7C4qB,yBAFD5qB,CAA8C,6CAELmtB,6BAC5GntB,UAGFA,iBAA+BA,yBAAaA,QAE5CA,gBAAK,uBAC4DA,2FAA0C,yDAC5B6qB,oCADd7qB,CAA0C,sDAErFotB,gCAF2CptB,CAA0C,0CAE1CqtB,uBAFArtB,CAA0C,6CAEJstB,2BACrGttB,oCAnB8CA,gDAClCA,iDAMUA,6DAA4C,6CAA5CA,CAA4C,2DAS5CA,yDAAwC,yCAAxCA,CAAwC,gGAOlEA,+BAA0D,UAA1DA,CAA0D,eAEbA,iDAAS+qB,mCAChD/qB,oBAAUA,SAAiCA,QAAYA,SAEzDA,QACAA,qBAAyCA,iDAASutB,uBAChDvtB,oBAAUA,kBAAMA,QAAYA,oBAC9BA,oCALYA,4CAA6CA,6ECtExD,IAAMwtB,GAAb,MAAM,QA2BJ5vB,YAAoB4a,EAAgDS,EAAgDuJ,EAAwCiL,EAA2B5P,GAAnK9f,0BAAgDA,0BAAgDA,sBAAwCA,cAA2BA,4BAxBvLA,uBAA4B,GAE5BA,2BAAoC,IAAIgK,EACxChK,kCAA2C,IAAIgK,EAC/ChK,6BAAsC,IAAIgK,EAC1ChK,uBAAyC,GACzCA,yBAAsC,GACtCA,sBAA6B,CAAC,OAAQ,QAItCA,qBAAkB,IAAI2vB,KAAY,GAAI,CAACC,gBAEvC5vB,8BAAuD,GACvDA,+BAAmC,GACnCA,8BAAkC,GAElCA,6BAAqD,GAIrDA,mBAAwB,EACxBA,sBAA2B,EAI3B4kB,WACE5kB,KAAK6vB,2BAA2B,KAAM,MACtC7vB,KAAK8vB,mCAAmC,KAAM,MAC9C9vB,KAAKwqB,8BAA8B,KAAM,MAG3CuF,8BAA8BzW,GAC5BtZ,KAAK6vB,2BAA2BvW,EAAEyR,UAAY,EAAGzR,EAAEuC,UAErDgU,2BAA2BhlB,EAAcgR,GACvC7b,KAAKya,mBAAmBC,mBAAmB7P,EAAMgR,GAAUrY,UAAWuU,IACpE/X,KAAKgwB,gBAAkBjY,EAAIhD,KAAKkb,kBAChCjwB,KAAKkwB,sBAAwBnY,EAAIhD,KAAK/K,aAG1CmmB,qCAAqC7W,GACnCtZ,KAAK8vB,mCAAmCxW,EAAEyR,UAAY,EAAGzR,EAAEuC,UAE7DuU,iCAAiC5f,GAC/BxQ,KAAKkb,mBAAmBE,eAAe,KAAM5K,GAAOhN,UAAWuU,IAC7D/X,KAAKqwB,kBAAoBtY,EAAIhD,KAAKub,kBAClCtwB,KAAKuwB,6BAA+BxY,EAAIhD,KAAK/K,WAC7ChK,KAAKwwB,0BAA4B,GAChCzY,EAAIhD,KAAKub,kBAAsBrY,QAAQiQ,IACtCloB,KAAKwwB,0BAA0B1tB,KAAK,CAAEuS,GAAI6S,EAAI7S,GAAGxP,WAAYsJ,KAAM+Y,EAAI/Y,KAAMme,UAAU,QAI7FwC,mCAAmCjlB,EAAcgR,GAC/C7b,KAAKkb,mBAAmBC,mBAAmBtQ,EAAMgR,GAAUrY,UAAWuU,IACpE/X,KAAKqwB,kBAAoBtY,EAAIhD,KAAKub,kBAClCtwB,KAAKuwB,6BAA+BxY,EAAIhD,KAAK/K,WAC7ChK,KAAKwwB,0BAA4B,GAChCzY,EAAIhD,KAAKub,kBAAsBrY,QAAQiQ,IACtCloB,KAAKwwB,0BAA0B1tB,KAAK,CAAEuS,GAAI6S,EAAI7S,GAAGxP,WAAYsJ,KAAM+Y,EAAI/Y,KAAMme,UAAU,QAK7FmD,uCACEzwB,KAAK0wB,yBAA2B,GAChC1wB,KAAK2wB,yBAAyB1Y,QAAQiQ,IACpCloB,KAAK0wB,yBAAyB5tB,KAAK,CAAEuS,GAAI6S,EAAI0I,UAAU/qB,WAAYsJ,KAAM+Y,EAAIoI,kBAAkBnhB,KAAMme,UAAU,MAGnHuD,qBAAqB/E,GACnB9rB,KAAK2wB,yBAAyB7tB,KAAK,CAAEguB,UAAW9wB,KAAK+wB,cAAed,kBAAmB,KAAMW,UAAW9E,EAAKzW,GAAIib,kBAAmB,OAEtIU,wBAAwBlF,GACtB9rB,KAAK2wB,yBAA2B3wB,KAAK2wB,yBAAyBlX,OAAOnB,GAAKA,EAAEsY,UAAU/qB,aAAeimB,EAAKzW,IAG5GmV,8BAA8B3f,EAAcgR,GAC1C7b,KAAK8f,qBAAqBC,qBAAqBlV,EAAMgR,GAAUrY,UAAWuU,IACxE/X,KAAKixB,oBAAsBlZ,EAAIhD,KAAK4V,aACpC3qB,KAAK4qB,wBAA0B7S,EAAIhD,KAAK/K,WACxChK,KAAKkxB,sBAAwB,GAC5BnZ,EAAIhD,KAAK4V,aAAiB1S,QAAQiQ,IACjCloB,KAAKkxB,sBAAsBpuB,KAAK,CAAEuS,GAAI6S,EAAIpY,OAAOjK,WAAYsJ,KAAM+Y,EAAI/Y,KAAMme,UAAU,QAK7FxC,gCAAgCxR,GAC9BtZ,KAAKwqB,8BAA8BlR,EAAEyR,UAAY,EAAGzR,EAAEuC,UAGxDmP,4BAA4Bxa,GAC1BxQ,KAAK8f,qBAAqBE,iBAAiB,KAAMxP,GAAOhN,UAAWuU,IACjE/X,KAAKixB,oBAAsBlZ,EAAIhD,KAAK4V,aACpC3qB,KAAK4qB,wBAA0B7S,EAAIhD,KAAK/K,WACxChK,KAAKkxB,sBAAwB,GAC5BnZ,EAAIhD,KAAK4V,aAAiB1S,QAAQiQ,IACjCloB,KAAKkxB,sBAAsBpuB,KAAK,CAAEuS,GAAI6S,EAAIpY,OAAOjK,WAAYsJ,KAAM+Y,EAAI/Y,KAAMme,UAAU,QAK7F6D,kCACEnxB,KAAKoxB,qBAAuB,GAC5BpxB,KAAKqxB,wBAAwBpZ,QAAQiQ,IACnCloB,KAAKoxB,qBAAqBtuB,KAAK,CAAEuS,GAAI6S,EAAIoJ,gBAAiBniB,KAAM+Y,EAAIyC,aAAaxb,KAAMme,UAAU,MAIrGiE,mBAAmBzF,GACjB9rB,KAAKqxB,wBAAwBvuB,KAAK,CAAGguB,UAAW9wB,KAAK+wB,cAAed,kBAAmB,KAAMqB,gBAAiBxF,EAAKzW,GAAIsV,aAAc,OAGvI6G,sBAAsB1F,GACpB9rB,KAAKqxB,wBAA0BrxB,KAAKqxB,wBAAwB5X,OAAOnB,GAAKA,EAAEgZ,gBAAgBzrB,aAAeimB,EAAKzW,IAGhHoc,mBAEEzxB,KAAK0xB,kBAAoB,gDACzB1xB,KAAK2xB,iBAAkB,EAGzBC,kBAAkBC,GAEhB7xB,KAAK0xB,kBAAoB,iBAAmBG,EAAoB1iB,KAChEnP,KAAK+wB,cAAgBc,EAAoBxc,GAEzCrV,KAAK8xB,gBAAgBC,SAASF,EAAoB1iB,MAClDnP,KAAK2wB,yBAA2BkB,EAAoBG,0BACpDhyB,KAAKqxB,wBAA0BQ,EAAoBI,yBAEnDjyB,KAAKkyB,cAAe,EACpBlyB,KAAK2xB,iBAAkB,EAEvB3xB,KAAKywB,uCACLzwB,KAAKmxB,kCAGPgB,oBAAoBN,GAEA7xB,KAAK0vB,OAAO/uB,KAAKurB,EAA8B,CAC/DxgB,KAAM,CAAEwd,MAAO,WAAYkJ,KAAM,mCAAqCP,EAAoB1iB,KAAO,OAGzFkjB,cAAc7uB,UAAUgC,IAClB,GAAVA,GAEFxF,KAAKya,mBAAmBQ,iBAAiB4W,GAAqBruB,UAC3DwoB,IAAehsB,KAAKykB,eAAelkB,yBAAyBsxB,EAAoB1iB,KAAO,iCAAkC,QAAS,YAClIxG,IAAY3I,KAAKykB,eAAelkB,yBAAyB,4BAA6B,QAAS,UAChG,KAAQP,KAAKsyB,yBAMrBC,iCAEE,IAAIC,EAAqB,IAAIvC,GAC7BuC,EAAmBnd,GAAKrV,KAAK+wB,cAC7ByB,EAAmBrjB,KAAOnP,KAAK8xB,gBAAgBthB,MAC/CgiB,EAAmBR,0BAA4BhyB,KAAK2wB,yBACpD6B,EAAmBP,yBAA2BjyB,KAAKqxB,wBAGnDrxB,KAAS8xB,gBAAgBW,MAEnBzyB,KAAKkyB,aACPlyB,KAAKya,mBAAmBI,iBAAiB2X,GAAoBhvB,UAC1DwoB,IAAehsB,KAAKykB,eAAelkB,yBAAyB,+CAAgD,QAAS,YACrHoI,IAAY3I,KAAKykB,eAAelkB,yBAAyB,4BAA6B,QAAS,UAChG,KAAQP,KAAKsyB,uBAKftyB,KAAKya,mBAAmBM,cAAcyX,GAAoBhvB,UACvDwoB,IAAehsB,KAAKykB,eAAelkB,yBAAyB,6CAA8C,QAAS,YACnHoI,IAAY3I,KAAKykB,eAAelkB,yBAAyB,4BAA6B,QAAS,UAChG,KAAQP,KAAKsyB,uBAKjBtyB,KAAK8xB,gBAAgBY,gBAKzBJ,qBACEtyB,KAAK6vB,2BAA2B,KAAM,MACtC7vB,KAAK8vB,mCAAmC,KAAM,MAC9C9vB,KAAKwqB,8BAA8B,KAAM,MAEzCxqB,KAAK2xB,iBAAkB,EACvB3xB,KAAKkyB,cAAe,EACpBlyB,KAAK0xB,kBAAoB,GACzB1xB,KAAK+wB,cAAgB,EACrB/wB,KAAK8xB,gBAAgBa,QACrB3yB,KAAK2wB,yBAA2B,GAChC3wB,KAAKwwB,0BAA4B,GACjCxwB,KAAK0wB,yBAA2B,GAChC1wB,KAAKqxB,wBAA0B,GAC/BrxB,KAAKkxB,sBAAwB,GAC7BlxB,KAAKoxB,qBAAuB,iDAlNnB3B,GAAoBxtB,6EAApBwtB,EAAoBrL,q8CDrBjCniB,sBAA2B,sBAA3BA,CAA2B,mBAA3BA,CAA2B,OAA3BA,CAA2B,cAITA,eAAGA,QAAYA,wBAC3BA,UAEFA,0BAAgB,QACVA,SAAqBA,UAE3BA,gCACFA,QAEAA,uCAiDAA,uCA0BAA,uCAWFA,eA3FUA,oCAE0CA,uCAGNA,yCAiDAA,0CA0BVA,mOCnEvBwtB,GAAb,GCpBM,SAAN5vB,cAGWG,4BAA+C,ICFpD,SAANH,cAKWG,kBAA6C,2BC0BpCiC,iBAA8DA,6BAAgBA,mCAC9EA,iBAAwCA,SAAiBA,kCAAjBA,uDAIxCA,iBAA8DA,qBAAQA,kDACtEA,iBAAuC,WAAvCA,CAAuC,eAEKA,2DAASsiB,EAATsK,OAAStK,uBACzCtiB,uBAA4BA,gBAAIA,UAEpCA,qBAAkCA,2DAAS6sB,EAATD,OAASC,yBACvC7sB,uBAA8BA,kBAAMA,qCAMpDA,uCACAA,+FAvCZA,8BAAmE,UAAnEA,CAAmE,cAG5BA,iDAAS8sB,qBACpC9sB,sBAAsCA,eAAGA,YAIjDA,iBAA8B,WAA9BA,CAA8B,QAA9BA,CAA8B,2BAIqCA,kDAAS+sB,yBAChE/sB,YAIRA,oBAEIA,aACIA,yBACAA,yBACJA,QAEAA,aACIA,yBACAA,yBAUJA,QAEAA,yBACAA,yBACJA,QAEAA,6BACIA,iDAAQgtB,mCACZhtB,oCA3BoDA,+CAqB5BA,qDACaA,sDAGtBA,6DAA4C,cAA5CA,CAA4C,uDAW3DA,qBAA2CA,kCAAsBA,+BAenCA,8CAYlBA,iBAA8DA,sBAASA,mCACvEA,iBAAwCA,SAAiBA,kCAAjBA,uDAIxCA,iBAA8DA,qBAAQA,kDACtEA,iBAAuC,WAAvCA,CAAuC,eAEKA,sEAASstB,mCACzCttB,uBAA4BA,gBAAIA,UAEpCA,qBAAkCA,2DAAS2wB,EAAT/D,OAAS+D,uBACvC3wB,uBAA8BA,kBAAMA,qCAMpDA,uCACAA,uCAasBA,gEA/DtCA,8BAAoE,uBAG5DA,oBACAA,+BACJA,QAEAA,4BAA2C,4BACWA,kDAAU4wB,aAAa,KAErE5wB,sCAA4B,qBAEpBA,yBACJA,QACAA,iCACIA,UACJA,UAGJA,kCAEAA,2BACIA,oBACAA,sBAAyCA,yDAAS6wB,8BAC9C7wB,qBAAUA,gBAAGA,QAAYA,sBAC7BA,UAGJA,qBAEIA,aACIA,yBACAA,yBACJA,QAEAA,aACIA,yBACAA,yBAUJA,QAEAA,yBACAA,yBACJA,QAEAA,6BAA4EA,iDAAQ8wB,gCACpF9wB,UAEJA,mCAAkDA,kDAAU+wB,aAAa,KAErE/wB,uCAA4B,sBAEpBA,0BACJA,UAEJA,kCAEAA,8BAAuC,eACIA,kFAAvCA,UAGJA,kBAA+BA,wBAAWA,QAE1CA,gBAAK,uBAC+DA,4FAA2C,yDAC7BgxB,mCADdhxB,CAA2C,sDAErFixB,mCAF0CjxB,CAA2C,0CAEvCkxB,uBAFJlxB,CAA2C,6CAG7FmxB,2BACdnxB,wCAzEsCA,gDAClCA,iDAISA,2CAOTA,yCAa2BA,uDAqBXA,qDACaA,sDAGtBA,6DAA4C,eAG1CA,2CAU0BA,gDAMjBA,0DAAyC,0CAAzCA,CAAyC,+FAU/EA,+BAA0D,UAA1DA,CAA0D,eAETA,iDAASoxB,mCAC9CpxB,oBAAUA,SAAiCA,QAAYA,SAE3DA,QACAA,qBAAyCA,iDAASqxB,uBAC9CrxB,oBAAUA,kBAAMA,QAAYA,oBAChCA,oCALcA,4CAA6CA,6EC7HhE,IAAMsxB,GAAb,MAAM,QA2BJ1zB,YAAoBqb,EAAgDxQ,EAAgD+Z,EACzGiL,EAA0BhU,GADjB1b,0BAAgDA,0BAAgDA,sBACzGA,cAA0BA,sCA1BrCA,uBAA4B,GAC5BA,oBAAyB,GACzBA,uBAA4B,GAE5BA,2BAAoC,IAAIgK,EAExChK,4BAAqC,IAAIgK,EACzChK,sBAA6B,CAAC,OAAQ,QAGtCA,eAAoB,EACpBA,qBAA2C,GAC3CA,gBAAgC,IAAIswB,GACpCtwB,qBAAkB,IAAI2vB,KAAY,GAAI,CAACC,gBACvC5vB,oBAAwC,IAAIwzB,GAC5CxzB,gCAA8D,GAC9DA,6BAAmD,GAEnDA,4BAAgC,GAChCA,2BAA+B,GAG/BA,mBAAwB,EACxBA,sBAA2B,EAK3B4kB,WACE5kB,KAAKyzB,2BAA2B,KAAM,MACtCzzB,KAAK0zB,gCAAgC,KAAM,MAC3C1zB,KAAK2zB,6BAGPC,8BAA8Bta,GAC5BtZ,KAAKyzB,2BAA2Bna,EAAEyR,UAAY,EAAGzR,EAAEuC,UAGrDgY,2BAA2Bva,GACzBtZ,KAAK2zB,2BAA2BloB,OAAO6N,EAAEyR,UAAY,GAAIzR,EAAEuC,UAG7DiY,+BAA+Bxa,GAC7BtZ,KAAK0zB,gCAAgCpa,EAAEyR,UAAY,EAAGzR,EAAEuC,UAG1D4X,2BAA2B5oB,EAAcgR,GACvC7b,KAAKkb,mBAAmBC,mBAAmBtQ,EAAMgR,GAAUrY,UAAWuU,IACpE/X,KAAK+zB,gBAAkBhc,EAAIhD,KAAKub,kBAChCtwB,KAAKg0B,sBAAwBjc,EAAIhD,KAAK/K,aAG1CiqB,+BAA+BzjB,GAC7BxQ,KAAK0b,+BAA+BE,mBAAmB,KAAKpL,EAAM,MAAMhN,UAAWuU,IACjF/X,KAAKk0B,uBAAyBnc,EAAIhD,KAAKiH,uBACvChc,KAAKm0B,uBAAyBpc,EAAIhD,KAAK/K,WACvChK,KAAKo0B,uBAAyB,GAC7Brc,EAAIhD,KAAKiH,uBAA2B/D,QAAQiQ,IAC3CloB,KAAKo0B,uBAAuBtxB,KAAK,CAAEuS,GAAI6S,EAAI7S,GAAGxP,WAAYsJ,KAAM+Y,EAAI/Y,KAAMme,UAAU,QAI1FoG,gCAAgC7oB,EAAcgR,GAC5C7b,KAAK0b,+BAA+BC,wBAAwB9Q,EAAMgR,GAAUrY,UAAWuU,IACrF/X,KAAKk0B,uBAAyBnc,EAAIhD,KAAKiH,uBACvChc,KAAKm0B,uBAAyBpc,EAAIhD,KAAK/K,WACvChK,KAAKo0B,uBAAyB,GAC7Brc,EAAIhD,KAAKiH,uBAA2B/D,QAAQiQ,IAC3CloB,KAAKo0B,uBAAuBtxB,KAAK,CAAEuS,GAAI6S,EAAI7S,GAAGxP,WAAYsJ,KAAM+Y,EAAI/Y,KAAMme,UAAU,QAI1F+G,oCACEr0B,KAAKs0B,sBAAwB,GAC7Bt0B,KAAKu0B,2BAA2Btc,QAAQiQ,IACtCloB,KAAKs0B,sBAAsBxxB,KAAK,CAAEuS,GAAI6S,EAAIsM,eAAe3uB,WAAYsJ,KAAM+Y,EAAIuM,YAAYtlB,KAAMme,UAAU,MAG/GoH,mBAAmB5I,GACjB9rB,KAAKu0B,2BAA2BzxB,KAAK,CAAE6xB,OAAQ30B,KAAK40B,eAAevf,GAAIwf,IAAK,KAAML,gBAAiB1I,EAAKzW,GAAIof,YAAa,OAE3HK,sBAAsBhJ,GACpB9rB,KAAKu0B,2BAA6Bv0B,KAAKu0B,2BAA2B9a,OAAOnB,GAAKA,EAAEkc,eAAe3uB,aAAeimB,EAAKzW,IAGrHse,2BAA2B9oB,EAAeC,GACxC,IAAIkjB,EAAShuB,KAAK0K,mBAAmBC,gBAAgB3K,KAAK+0B,gBAAiBlqB,EAAMC,GACjF9K,KAAKg1B,wBAA0BhH,EAAOtiB,KACtC1L,KAAKi1B,sBAAwBjH,EAAOhkB,WAGtCkrB,oBAAoB1kB,GAClBxQ,KAAKm1B,kBAAoB3kB,EACzBxQ,KAAKkb,mBAAmBE,eAAe,KAAMpb,KAAKm1B,mBAAmB3xB,UAAWuU,IAC9E/X,KAAK+zB,gBAAkBhc,EAAIhD,KAAKub,kBAChCtwB,KAAKg0B,sBAAwBjc,EAAIhD,KAAK/K,aAI1CorB,mBAEEp1B,KAAKq1B,kBAAoB,gDACzBr1B,KAAK2xB,iBAAkB,EAGzB2D,kBAAkBC,GAEhBv1B,KAAKq1B,kBAAoB,iBAAmBE,EAAoBpmB,KAChEnP,KAAKsb,WAAaia,EAClBv1B,KAAKw1B,gBAAgBzD,SAASwD,EAAoBpmB,MAClDnP,KAAK+0B,gBAAkBQ,EAAoBE,uBAE3Cz1B,KAAKkyB,cAAe,EACpBlyB,KAAK2xB,iBAAkB,EAEvB3xB,KAAK2zB,6BACL3zB,KAAK01B,UAAY,EAGnBC,oBAAoBJ,GAEAv1B,KAAK0vB,OAAO/uB,KAAKurB,EAA8B,CAC/DxgB,KAAM,CAAEwd,MAAO,WAAYkJ,KAAM,mCAAqCmD,EAAoBpmB,KAAO,OAGzFkjB,cAAc7uB,UAAUgC,IAClB,GAAVA,GAEFxF,KAAKkb,mBAAmBO,iBAAiB8Z,GAAqB/xB,UAC3DwoB,IAAehsB,KAAKykB,eAAelkB,yBAAyBg1B,EAAoBpmB,KAAO,iCAAkC,QAAS,YAClIxG,IAAY3I,KAAKykB,eAAelkB,yBAAyB,4BAA6B,QAAS,UAChG,KAAQP,KAAK41B,yBAMrBC,iBAEE71B,KAAK81B,eAAiB,yCACtB91B,KAAKu0B,2BAA6B,GAClCv0B,KAAK40B,eAAehE,UAAY5wB,KAAKsb,WAAWjG,GAChDrV,KAAKsb,WAAWma,uBAAuB3yB,KAAK9C,KAAK40B,gBACjD50B,KAAK0zB,gCAAgC,KAAM,MAC3C1zB,KAAK01B,UAAY,EAInBK,kBAAkBC,GAEhBh2B,KAAK81B,eAAiB,iBAAmBE,EAAW7mB,KACpDnP,KAAK40B,eAAiBoB,EACtBh2B,KAAKu0B,2BAA6ByB,EAAWC,aAC7Cj2B,KAAK0zB,gCAAgC,KAAM,MAC3C1zB,KAAKq0B,oCACLr0B,KAAK01B,UAAY,EAGnBQ,kBAAkBF,GAEEh2B,KAAK0vB,OAAO/uB,KAAKurB,EAA8B,CAC/DxgB,KAAM,CAAEwd,MAAO,WAAYkJ,KAAM,mCAAqC4D,EAAW7mB,KAAO,OAGhFkjB,cAAc7uB,UAAUgC,IAClB,GAAVA,IACFxF,KAAK+0B,gBAAkB/0B,KAAKsb,WAAWma,uBAAyBz1B,KAAK+0B,gBAAgBtb,OAAOnB,GAAKA,EAAEjD,IAAM2gB,EAAW3gB,IACpHrV,KAAK2zB,gCAKXwC,iCACMn2B,KAAKw1B,gBAAgB/C,MAEnBzyB,KAAKkyB,aACPlyB,KAAKkb,mBAAmBG,iBAAiBrb,KAAKo2B,6BAA6B5yB,UACxEwoB,IAAehsB,KAAKykB,eAAelkB,yBAAyB,+CAAgD,QAAS,YACrHoI,IAAY3I,KAAKykB,eAAelkB,yBAAyB,4BAA6B,QAAS,UAChG,KAAQP,KAAK41B,uBAKf51B,KAAKkb,mBAAmBK,cAAcvb,KAAKo2B,6BAA6B5yB,UACrEwoB,IAAehsB,KAAKykB,eAAelkB,yBAAyB,6CAA8C,QAAS,YACnHoI,IAAY3I,KAAKykB,eAAelkB,yBAAyB,4BAA6B,QAAS,UAChG,KAAQP,KAAK41B,uBAKjB51B,KAAKw1B,gBAAgB9C,gBAIzB0D,4BAEE,YAAK9a,WAAWnM,KAAOnP,KAAKw1B,gBAAgBhlB,MAES,GAArDxQ,KAASsb,WAAWma,uBAAuBxyB,QACzCjD,KAAK40B,eAAeqB,aAAej2B,KAAKu0B,2BACxCv0B,KAAKsb,WAAWma,uBAAuB3yB,KAAK9C,KAAK40B,iBAGjD50B,KAAKsb,WAAWma,uBAAuBxd,QAAQK,IACzCA,EAAEjD,IAAMrV,KAAK40B,eAAevf,KAC9BiD,EAAEsY,UAAY5wB,KAAK40B,eAAehE,UAClCtY,EAAEjD,GAAKrV,KAAK40B,eAAevf,GAC3BiD,EAAEnJ,KAAOnP,KAAK40B,eAAezlB,KAC7BmJ,EAAE2d,aAAej2B,KAAKu0B,8BAIrBv0B,KAAKsb,WAGd+a,aAAarf,GACXhX,KAAK01B,UAAY1e,EAGnB4e,qBACE51B,KAAKyzB,2BAA2B,KAAM,MACtCzzB,KAAK0zB,gCAAgC,KAAM,MAC3C1zB,KAAK2zB,6BAEL3zB,KAAK2xB,iBAAkB,EACvB3xB,KAAKkyB,cAAe,EACpBlyB,KAAK01B,UAAY,EAEjB11B,KAAKsb,WAAWjG,GAAK,EACrBrV,KAAKsb,WAAWnM,KAAO,GACvBnP,KAAKsb,WAAWma,uBAAyB,GACzCz1B,KAAKw1B,gBAAgB7C,QACrB3yB,KAAK40B,eAAevf,GAAK,EACzBrV,KAAK40B,eAAezlB,KAAO,GAC3BnP,KAAK40B,eAAeqB,aAAe,GAEnCj2B,KAAKq1B,kBAAoB,GACzBr1B,KAAK81B,eAAiB,GAEtB91B,KAAK+0B,gBAAkB,GACvB/0B,KAAKu0B,2BAA6B,GAClCv0B,KAAKg1B,wBAA0B,GAC/Bh1B,KAAKk0B,uBAAyB,GAC9Bl0B,KAAKo0B,uBAAyB,GAC9Bp0B,KAAKs0B,sBAAwB,iDAxPpBf,GAA2BtxB,6EAA3BsxB,EAA2BnP,+rDDtBxCniB,sBAA2B,sBAA3BA,CAA2B,mBAA3BA,CAA2B,OAA3BA,CAA2B,cAIDA,uBAAWA,QAAYA,wBACrCA,UAEJA,0BAAgB,QACRA,SAAqBA,UAE7BA,gCACJA,QAEAA,uCAiDAA,wCAkFAA,uCAWJA,eAnJgBA,oCAEwCA,uCAGRA,yCAiDAA,0CAkFVA,2QC1HzBsxB,GAAb,GCrBM,SAAN1zB,cAIWG,cAA6C,ICFlD,oCCAMiC,wBAAgFA,SAAkBA,kCAAzCA,oBAAuBA,kDAOhFA,wBAAmEA,SAAgBA,kCAArCA,oBAAqBA,kDAOnEA,wBAAuFA,SAAuBA,kCAAnDA,oBAA4BA,kDAOvFA,wBAAoEA,SAAcA,kCAAjCA,oBAAmBA,wBCLzE,IAAMq0B,GAAb,MAAM,QAmCFz2B,YAAoB+e,EAA8DlU,GAA9D1K,iCAA8DA,0BAjCzEA,qBAAyB,GACzBA,2BAAgC,EAChCA,qBAA4C,KAC5CA,gCAAqC,EAGpCA,wBAAwC,IAAI2kB,MAC5C3kB,2BAA2C,IAAI2kB,MAC/C3kB,8BAA8C,IAAI2kB,MAClD3kB,mCAAmD,IAAI2kB,MAIjE3kB,2BAA+B,GAC/BA,yBAAkC,IAAIgK,EACtChK,6BAAoD,GAEpDA,mBAAwB,GACxBA,gBAAqB,EACrBA,cAAmB,EACnBA,wBAAkC,GAElCA,eAAmB,GACnBA,qBAAyB,GACzBA,oBAAwB,GACxBA,kBAAsB,GAEtBA,kBAAuB,GACvBA,wBAAqB,KACrBA,sBAAmB,KACnBA,6BAA0B,KAC1BA,4BAAyB,KAKzB4kB,WAEI5kB,KAAK4e,0BAA0B5B,uBAAuB,MAAMxZ,UAAWuU,IACnE/X,KAAKu2B,mBAAqBxe,EACE,MAAxB/X,KAAKw2B,iBACLx2B,KAAKy2B,kBAAkBz2B,KAAKw2B,mBAIxCE,4BAA4Bpd,GACxBtZ,KAAKwtB,WAAalU,EAAEyR,UAAY,EAChC/qB,KAAK6b,SAAWvC,EAAEuC,SAClB7b,KAAK22B,mCAAmC32B,KAAKwtB,WAAYxtB,KAAK6b,SAAU7b,KAAK42B,eAEjFC,uBAAuBrmB,GACnBxQ,KAAK42B,cAAgBpmB,EACrBxQ,KAAKwtB,WAAa,EAClBxtB,KAAK6b,SAAW,EAChB7b,KAAK22B,mCAAmC32B,KAAKwtB,WAAYxtB,KAAK6b,SAAU7b,KAAK42B,eAEjFD,mCAAmC9rB,EAAcgR,EAAkBQ,GAE/D,IAAI2R,EAAShuB,KAAK0K,mBAAmBC,gBAAgB3K,KAAK82B,aAAard,OAAOnB,GAAKA,EAAEnJ,KAAKke,oBAAoBlE,SAAS9M,EAAOgR,sBAAuBxiB,EAAKhF,WAAYgW,GACtK7b,KAAK+2B,oBAAsB/I,EAAOhkB,WAClChK,KAAKg3B,sBAAwB,GAC7Bh3B,KAAKg3B,sBAAwBhJ,EAAOtiB,KAGxC+qB,kBAAkBQ,GAEsC,MAAhDA,EAAuBC,wBACvBl3B,KAAKu2B,mBAAqBv2B,KAAKu2B,mBAAmB9c,OAAOnB,GAAKA,EAAEjD,IAAMrV,KAAKw2B,gBAAgBU,wBAG3C,MAAhDD,EAAuBE,uBACvBn3B,KAAK4e,0BAA0BC,0BAA0B,KAAMoY,EAAuBE,uBAAuB3zB,UAAWuU,IACpH/X,KAAKo3B,aAAerf,EAAI,GAAGqf,aAC3B,IAAIC,EAAcptB,KAAKC,MAAMlK,KAAKo3B,cAGlCp3B,KAAKs3B,mBAAqBL,EAAuBE,sBAGjDE,EAAYE,UAAYF,EAAYE,UAAU9d,OAAOkG,GACjDA,EAAQxQ,MAAQ8nB,EAAuBO,kBAE3Cx3B,KAAKw3B,iBAAmBH,EAAYE,UAAU,GAAGE,mBAGjDJ,EAAYE,UAAUtf,QAAQ3C,IAC1BA,EAAEoiB,gBAAkBpiB,EAAEoiB,gBAAgBje,OAAOrE,GAAMA,EAAGjG,MAAQ8nB,EAAuBU,2BAEzF33B,KAAK23B,wBAA0BN,EAAYE,UAAU,GAAGG,gBAAgB,GAAGE,0BAG3EP,EAAYE,UAAUtf,QAAQ3C,IAC1BA,EAAEoiB,gBAAgBzf,QAAQ7C,IACtBA,EAAGyiB,eAAiBziB,EAAGyiB,eAAepe,OAAOqe,GAAMA,EAAG3oB,MAAQ8nB,EAAuBc,4BAG7F/3B,KAAK+3B,uBAAyBV,EAAYE,UAAU,GAAGG,gBAAgB,GAAGG,eAAe,GAAGG,yBAE5Fh4B,KAAKw2B,gBAAkB,KACvBx2B,KAAKi4B,wBAAwBZ,KAMzCa,kBAAkBpM,GAEd9rB,KAAK4e,0BAA0BC,0BAA0B,KAAM7e,KAAKs3B,oBAAoB9zB,UAAWuU,IAC/F/X,KAAKo3B,aAAerf,EAAI,GAAGqf,aAC3Bp3B,KAAKi4B,wBAAwBhuB,KAAKC,MAAMlK,KAAKo3B,eAC7Cp3B,KAAKw3B,iBAAmB,KACxBx3B,KAAK23B,wBAA0B,KAC/B33B,KAAK+3B,uBAAyB,OAGtCI,kBAEI,IAAIC,EAAanuB,KAAKC,MAAMlK,KAAKo3B,cAGJ,MAAzBp3B,KAAKw3B,mBACLY,EAAWb,UAAYa,EAAWb,UAAU9d,OAAOkG,GAAWA,EAAQ8X,oBAAsBz3B,KAAKw3B,mBAIrGx3B,KAAK23B,wBAA0B,KAC/B33B,KAAK+3B,uBAAyB,KAC9B/3B,KAAKi4B,wBAAwBG,GAEjCC,wBAEI,IAAID,EAAanuB,KAAKC,MAAMlK,KAAKo3B,cAEJ,MAAzBp3B,KAAKw3B,mBACLY,EAAWb,UAAYa,EAAWb,UAAU9d,OAAOkG,GAAWA,EAAQ8X,oBAAsBz3B,KAAKw3B,mBAGjE,MAAhCx3B,KAAK23B,yBACLS,EAAWb,UAAUtf,QAAQ3C,IACzBA,EAAEoiB,gBAAkBpiB,EAAEoiB,gBAAgBje,OAAOrE,GAAMA,EAAGwiB,2BAA6B53B,KAAK23B,2BAIhG33B,KAAK+3B,uBAAyB,KAE9B/3B,KAAKi4B,wBAAwBG,GAEjCE,uBAEI,IAAIF,EAAanuB,KAAKC,MAAMlK,KAAKo3B,cAGJ,MAAzBp3B,KAAKw3B,mBACLY,EAAWb,UAAYa,EAAWb,UAAU9d,OAAOkG,GAAWA,EAAQ8X,oBAAsBz3B,KAAKw3B,mBAGjE,MAAhCx3B,KAAK23B,yBACLS,EAAWb,UAAUtf,QAAQ3C,IACzBA,EAAEoiB,gBAAkBpiB,EAAEoiB,gBAAgBje,OAAOrE,GAAMA,EAAGwiB,2BAA6B53B,KAAK23B,2BAI7D,MAA/B33B,KAAK+3B,wBACLK,EAAWb,UAAUtf,QAAQ3C,IACzBA,EAAEoiB,gBAAgBzf,QAAQ7C,IACtBA,EAAGyiB,eAAiBziB,EAAGyiB,eAAepe,OAAOqe,GAAMA,EAAGE,0BAA4Bh4B,KAAK+3B,4BAKnG/3B,KAAKi4B,wBAAwBG,GAEjCH,wBAAwBM,GAEpBv4B,KAAKu3B,UAAY,GACjBv3B,KAAK03B,gBAAkB,GACvB13B,KAAK63B,eAAiB,GACtB73B,KAAK82B,aAAe,GAEW7sB,KAAKC,MAAMlK,KAAKo3B,cACpCG,UAAUtf,QAAQ3C,IACrBA,EAAEmiB,oBAAsBz3B,KAAKw3B,kBAC7BliB,EAAEoiB,gBAAgBzf,QAAQ7C,IAClBA,EAAGwiB,2BAA6B53B,KAAK23B,yBACrCviB,EAAGyiB,eAAe5f,QAAQ6f,IAEtB93B,KAAK63B,eAAe/0B,KAAK,CAAEuS,GAAIyiB,EAAGE,yBAA0B7oB,KAAM2oB,EAAG3oB,SAI7EnP,KAAK03B,gBAAgB50B,KAAK,CAAEuS,GAAID,EAAGwiB,0BAA2BzoB,KAAMiG,EAAGjG,SAI/EnP,KAAKu3B,UAAUz0B,KAAK,CAAEuS,GAAIC,EAAEmiB,mBAAoBtoB,KAAMmG,EAAEnG,SAG5DopB,EAAkBhB,UAAUtf,QAAQ0H,IAChCA,EAAQ+X,gBAAgBzf,QAAQ7C,IAC5BA,EAAGyiB,eAAe5f,QAAQ6f,IACtBA,EAAGU,SAASvgB,QAAQwgB,IAEZz4B,KAAK82B,aAAah0B,KAAK,CACnBuS,GAAIojB,EAAKC,mBACTvpB,KAAMspB,EAAKtpB,KACXme,UAAU,EACVI,SAAU,CACNrY,GAAI,KACJyJ,aAAc9e,KAAKs3B,mBACnBqB,UAAW,KACXC,oBAAqBH,EAAKC,mBAC1B/Y,QAASA,EAAQxQ,KACjB0pB,uBAAwBzjB,EAAGjG,KAC3B2pB,qCAAsChB,EAAG3oB,KACzC4pB,6CAA8CN,EAAKtpB,KACnD6pB,UAAU,EACVC,cAAe,KACfC,4BAA6BvZ,EAAQ8X,8BAQjEz3B,KAAK82B,aAAaqC,KAAK,CAACC,EAAGC,IAAMD,EAAEjqB,KAAKmqB,cAAgBD,EAAElqB,KAAKmqB,cAAgB,EAAIF,EAAEjqB,KAAKmqB,gBAAkBD,EAAElqB,KAAKmqB,cAAgB,GAAI,GAEvIt5B,KAAK63B,eAAesB,KAAK,CAACC,EAAGC,IAAMD,EAAEjqB,KAAKmqB,cAAgBD,EAAElqB,KAAKmqB,cAAgB,EAAIF,EAAEjqB,KAAKmqB,gBAAkBD,EAAElqB,KAAKmqB,cAAgB,GAAI,GAEzIt5B,KAAK22B,mCAAmC32B,KAAKwtB,WAAYxtB,KAAK6b,SAAU7b,KAAK42B,eAEjF2C,qBAAqBzN,GACjB9rB,KAAK4e,0BAA0BG,oBAAoB+M,EAAK4B,UAAUlqB,UAAUuU,IACxE/X,KAAKw5B,gBAAoCzhB,EAAIhD,KAC7C/U,KAAKotB,gBAAgBnV,QAAQiQ,IACrBA,EAAI7S,IAAMyW,EAAKzW,KACf6S,EAAI3I,WAAavf,KAAKw5B,gBAAgBnkB,MAG9CrV,KAAKy5B,mBAAmB/T,KAAK1lB,KAAKw5B,mBAG1CE,wBAAwB5N,GACpB9rB,KAAK25B,sBAAsBjU,KAAKoG,GAEpC8N,2BAA2B9N,GACvB9rB,KAAK65B,yBAAyBnU,KAAKoG,GAEvCgO,gCAAgChO,GAC5B9rB,KAAK+5B,8BAA8BrU,KAAKoG,iDA3PnCwK,GAA2Br0B,6CAA3Bq0B,EAA2BlS,4tCDnBxCniB,iBAAoH,qBAApHA,CAAoH,kBAExEA,kEAAgC,qCAAoBwkB,+BACpFxkB,+BACJA,UAGJA,4BAAuB,kBACeA,gEAA8B,oCAAoBwkB,sBAChFxkB,wBAA2BA,gBAAIA,QAC/BA,+BACJA,UAGJA,4BAAuB,mBACuBA,0CAAmBwkB,2BAAnBxkB,CAA2C,iEACjFA,yBAA2BA,iBAAIA,QAC/BA,gCACJA,UAGJA,6BAAuB,mBACqBA,0CAAmBwkB,0BAAnBxkB,CAA0C,gEAC9EA,yBAA2BA,iBAAIA,QAC/BA,gCACJA,YAGRA,gBAAK,sBAC8DA,uEAAqC,wCACzBwkB,kCADZxkB,CAAqC,qCAE9EwkB,6BAFyCxkB,CAAqC,oCAEewkB,iCAFpDxkB,CAAqC,sCAG1BwkB,sCAHXxkB,CAAqC,yBAIzFwkB,2BAJoDxkB,CAAqC,4BAIjDwkB,+BACnDxkB,iBAhCwCA,+CACEA,+CAKJA,6CAClBA,6BACoBA,sCAKkDA,oDACtEA,6BAC2BA,4CAKwCA,mDACnEA,6BACkBA,2CAKhBA,yDAAwC,oCAAxCA,CAAwC,iDAAxCA,CAAwC,4CAAxCA,CAAwC,kDAAxCA,CAAwC,sHCVrDq0B,GAAb,0BCkBoBr0B,iBAA8DA,8BAAiBA,mCAC/EA,iBAAwCA,SAAiBA,kCAAjBA,uDAIxCA,iBAA8DA,qBAAQA,kDACtEA,iBAAuC,WAAvCA,CAAuC,eAEKA,2DAAS6sB,EAATD,OAASC,wBACzC7sB,uBAA4BA,gBAAIA,UAEpCA,qBAAkCA,2DAAS8sB,EAATF,OAASE,0BACvC9sB,uBAA8BA,kBAAMA,qCAMpDA,uCACAA,+FA3CZA,8BAAmE,UAAnEA,CAAmE,cAG5BA,iDAAS+sB,sBACpC/sB,sBAAuCA,eAAGA,YAIlDA,kBAA8B,WAA9BA,CAA8B,QAA9BA,CAA8B,2BAIwEA,kDAAS+3B,0BACzE/3B,UAE9BA,eAAK,4BAC+IA,kDAASg4B,sBAC/Hh4B,YAIlCA,qBAEIA,aACIA,yBACAA,yBACJA,QAEAA,aACIA,yBACAA,yBAUJA,QAEAA,yBACAA,yBACJA,QAEAA,6BAEIA,iDAAQi4B,oCACZj4B,oCArCgEA,kDAI0DA,8CAKtEA,sDAqB5BA,qDACaA,sDAGtBA,kEAAiD,cAAjDA,CAAiD,8BAAjDA,CAAiD,mDAWhEA,qBAA4CA,kCAAsBA,mCAa9DA,yBAA6EA,SAAgBA,kCAArCA,oBAAqBA,+CAEjFA,qBAAsCA,qCAAyBA,kDAnBvEA,8BAAoE,uBAG5DA,oBACAA,+BACJA,QAEAA,iBAA+BA,gCAAoBA,QAEnDA,kBAAkC,0BAEXA,2FAA0C,yDAAuBotB,iBAAjEptB,CAA0C,4DAAsEqtB,oBAAhHrtB,CAA0C,oEACOstB,uBACpEttB,UAEJA,6BAAuC,mBAE/BA,iCACJA,QACAA,gCACJA,8CAjBmDA,iDACnCA,kDAOOA,yDAA0C,+BAA1CA,CAA0C,yBAKnBA,2CACNA,gDAExBA,sFAKpBA,+BAA0D,UAA1DA,CAA0D,eAETA,iDAAS+qB,oCAC9C/qB,oBAAUA,SAAiCA,QAAYA,SAC3DA,QACAA,qBAAyCA,iDAASutB,yBAC9CvtB,oBAAUA,kBAAMA,QAAYA,oBAChCA,oCAJcA,4CAA6CA,wHAWnEA,kBAAwD,qBACpBA,wGAA0DA,wBAAYA,kCAAtEA,uECvFjC,IAAMk4B,GAAb,MAAM,QA0BJt6B,YAAoB6b,EAAwE+I,EAAwCiL,GAAhH1vB,sCAAwEA,sBAAwCA,cAxBpIA,4BAAiC,GAEjCA,gCAAyC,IAAIgK,EAC7ChK,sBAA6B,CAAC,OAAQ,QAGtCA,wBAA6B,GAC7BA,oBAAyB,GAEzBA,sBAAmB,IAAI2vB,KAAY,GAAI,CAACC,gBACxC5vB,gBAAa,IAAI2vB,KAAY,GAAI,CAACC,gBAClC5vB,0BAAyD,GACzDA,kCAA+B,IAAIo6B,GACnCp6B,0BAA8B,GAC9BA,yBAA6B,GAC7BA,eAAoB,EACpBA,cAAmB,EAKnBA,mBAAwB,EACxBA,sBAA2B,EAK3B4kB,WACE5kB,KAAKq6B,4BAA4B,KAAM,MAGzCvG,+BAA+Bxa,GAC7BtZ,KAAK+qB,UAAYzR,EAAEyR,UAAY,EAC/B/qB,KAAK6b,SAAWvC,EAAEuC,SAClB7b,KAAKs6B,uBAGPA,uBACOt6B,KAAK6b,UAAY7b,KAAKu6B,2BAA2BzvB,WACG,MAAtD9K,KAAKu6B,2BAA2B/uB,oBAAgF,MAAlDxL,KAAKu6B,2BAA2BhvB,eAC/FvL,KAAKw6B,sBAKLx6B,KAAKy6B,sBAFmE,MAAtDz6B,KAAKu6B,2BAA2B/uB,mBAA6BxL,KAAKu6B,2BAA2BhvB,eAAiBvL,KAAKu6B,2BAA2B/uB,oBAElIkvB,QAAQ,kBADhB,eAAiB16B,KAAK+qB,UAAY,MAK5D0P,qBAAqBE,GACnB36B,KAAK0b,+BAA+BE,mBAAmB+e,EAAS,KAAM,MAAMn3B,UAAWuU,IACrF/X,KAAKk0B,uBAAyBnc,EAAIhD,KAAKiH,uBACvChc,KAAKu6B,2BAA6BxiB,EAAIhD,KAAK/K,WAC3ChK,KAAK46B,UAAU7P,UAAY/qB,KAAKu6B,2BAA2BvvB,aAAe,EAC1EhL,KAAK46B,UAAU/e,SAAW7b,KAAKu6B,2BAA2BzvB,YAK9D0vB,sBACwC,GAAlCx6B,KAAK66B,mBAAmB53B,QAA6C,GAA9BjD,KAAK86B,eAAe73B,QAC7DjD,KAAKq6B,4BAA4B,EAAGr6B,KAAK6b,UAEvC7b,KAAK66B,mBAAmB53B,OAAS,GACnCjD,KAAK+6B,sBAEH/6B,KAAK86B,eAAe73B,OAAS,GAC/BjD,KAAKg7B,wBAITX,4BAA4BxvB,EAAcgR,GACxC7b,KAAK0b,+BAA+BC,wBAAwB9Q,EAAMgR,GAAUrY,UAAWuU,IACrF/X,KAAKk0B,uBAAyBnc,EAAIhD,KAAKiH,uBACvChc,KAAKu6B,2BAA6BxiB,EAAIhD,KAAK/K,WAC3ChK,KAAK+qB,UAAY/qB,KAAKu6B,2BAA2BvvB,aACjDhL,KAAK6b,SAAW7b,KAAKu6B,2BAA2BzvB,UAChD9K,KAAK46B,UAAU7P,UAAY/qB,KAAKu6B,2BAA2BvvB,aAAe,EAC1EhL,KAAK46B,UAAU/e,SAAW7b,KAAK6b,WAInCkf,sBACE/6B,KAAK0b,+BAA+BE,mBAAmB,KAAM5b,KAAK66B,mBAAoB76B,KAAK6b,UAAUrY,UAAWuU,IAC9G/X,KAAKk0B,uBAAyBnc,EAAIhD,KAAKiH,uBACvChc,KAAKu6B,2BAA6BxiB,EAAIhD,KAAK/K,WAC3ChK,KAAK+qB,UAAY/qB,KAAKu6B,2BAA2BvvB,aACjDhL,KAAK6b,SAAW7b,KAAKu6B,2BAA2BzvB,UAChD9K,KAAK46B,UAAU7P,UAAY/qB,KAAKu6B,2BAA2BvvB,aAAe,EAC1EhL,KAAK46B,UAAU/e,SAAW7b,KAAKu6B,2BAA2BzvB,YAI9DkwB,wBACEh7B,KAAK0b,+BAA+BI,+BAA+B,KAAM9b,KAAK86B,eAAgB96B,KAAK6b,UAAUrY,UAAWuU,IACtH/X,KAAKk0B,uBAAyBnc,EAAIhD,KAAKiH,uBACvChc,KAAKu6B,2BAA6BxiB,EAAIhD,KAAK/K,WAC3ChK,KAAK+qB,UAAY/qB,KAAKu6B,2BAA2BvvB,aACjDhL,KAAK6b,SAAW7b,KAAKu6B,2BAA2BzvB,UAChD9K,KAAK46B,UAAU7P,UAAY/qB,KAAKu6B,2BAA2BvvB,aAAe,EAC1EhL,KAAK46B,UAAU/e,SAAW7b,KAAKu6B,2BAA2BzvB,YAI9DmwB,oBAEEj7B,KAAKk7B,uBAAyB,6CAC9Bl7B,KAAKm7B,qBAAuB,GAC5Bn7B,KAAKo7B,oBAAsB,GAC3Bp7B,KAAKq7B,qBAAuB,GAC5Br7B,KAAK2xB,iBAAkB,EAGzB2J,mBAAmBC,GAEjBv7B,KAAKk7B,uBAAyB,iBAAmBK,EAAqBpsB,KACtEnP,KAAKw0B,eAAiB+G,EAAqBlmB,GAC3CrV,KAAKw7B,iBAAiBzJ,SAASwJ,EAAqBpsB,MAEpDnP,KAAKq7B,qBAAuBE,EAAqB/C,SAGjDx4B,KAAKkyB,cAAe,EACpBlyB,KAAK2xB,iBAAkB,EAEvB3xB,KAAKy7B,6BACLz7B,KAAKuf,WAAWwS,SAASwJ,EAAqBhc,YAGhDmc,qBAAqBH,GAEDv7B,KAAK0vB,OAAO/uB,KAAKurB,EAA8B,CAC/DxgB,KAAM,CAAEwd,MAAO,WAAYkJ,KAAM,mCAAqCmJ,EAAqBpsB,KAAO,OAG1FkjB,cAAc7uB,UAAUgC,IAClB,GAAVA,GAEFxF,KAAK0b,+BAA+BS,sBAAsBof,GAAsB/3B,UAC7EwoB,IAAehsB,KAAKykB,eAAelkB,yBAAyBg7B,EAAqBpsB,KAAO,iCAAkC,QAAS,YACnIxG,IAAY3I,KAAKykB,eAAelkB,yBAAyB,4BAA6B,QAAS,UAChG,KAAQP,KAAK27B,2BAQrBF,6BACEz7B,KAAKm7B,qBAAuB,GAC5Bn7B,KAAKo7B,oBAAsB,GAC3Bp7B,KAAKq7B,qBAAqBpjB,QAAQiQ,IAChCloB,KAAKm7B,qBAAqBr4B,KAAK,CAAEuS,GAAI6S,EAAI0T,QAAQhD,oBAAqBzpB,KAAM+Y,EAAI0T,QAAQ7C,6CAA8CzL,UAAU,EAAM/N,WAAY2I,EAAI3I,WAAYsc,aAAc3T,EAAI2T,eACpM77B,KAAKo7B,oBAAoBt4B,KAAK,CAAEuS,GAAI6S,EAAI0T,QAAQvmB,GAAIlG,KAAM+Y,EAAI0T,QAAQ7C,6CAA8C8C,aAAc3T,EAAI2T,iBAI1IC,aAAahQ,GAEX9rB,KAAKq7B,qBAAqBv4B,KAAK,CAAE0xB,eAAgBx0B,KAAKw0B,eAAgBjV,WAAYuM,EAAKzW,GAAIwmB,aAAc/P,EAAK+P,aAAcpH,YAAa,KAAMmH,QAAS,OACxJ57B,KAAKo7B,oBAAoBt4B,KAAK,CAAEuS,GAAIyW,EAAKzW,GAAIlG,KAAM2c,EAAKiN,+CACjB,GAAnC/4B,KAAKo7B,oBAAoBn4B,QAC3BjD,KAAKuf,WAAWwS,SAASjG,EAAKzW,IAIlC0mB,gBAAgBjQ,GACd9rB,KAAKq7B,qBAAuBr7B,KAAKq7B,qBAAqB5hB,OAAOnB,GAAKA,EAAEiH,YAAcuM,EAAKvM,YACvFvf,KAAKo7B,oBAAsBp7B,KAAKo7B,oBAAoB3hB,OAAOnB,GAAKA,EAAEjD,IAAMyW,EAAKvM,YACzEvf,KAAKuf,WAAW/O,OAASsb,EAAKvM,YAChCvf,KAAKuf,WAAWwS,SAAS,IAI7BiK,kBAAkBlQ,GAChB9rB,KAAKi8B,6BAA+Bj8B,KAAKq7B,qBAAqBv0B,KAAKwR,GAAKA,EAAEiH,YAAcuM,EAAKvM,YAG/F2c,qBAAqB1rB,GACnBxQ,KAAK66B,mBAAqBrqB,EAC1BxQ,KAAK86B,eAAiB,GACtB96B,KAAKw6B,sBAGP2B,iBAAiB3rB,GACfxQ,KAAK86B,eAAiBtqB,EACtBxQ,KAAK66B,mBAAqB,GAC1B76B,KAAKw6B,sBAGP4B,kCAEE,IAAIC,EAAyB,IAAIrgB,GACjCqgB,EAAuBhnB,GAAKrV,KAAKw0B,eACjC6H,EAAuBltB,KAAOnP,KAAKw7B,iBAAiBhrB,MACpD6rB,EAAuB9c,WAAavf,KAAKuf,WAAW/O,MACpD6rB,EAAuB7D,SAAWx4B,KAAKq7B,qBAEvCr7B,KAASw7B,iBAAiB/I,OAASzyB,KAAKuf,WAAWkT,MAE7CzyB,KAAKkyB,aACPlyB,KAAK0b,+BAA+BK,sBAAsBsgB,GAAwB74B,UAC/EwoB,IAAehsB,KAAKykB,eAAelkB,yBAAyB,gDAAiD,QAAS,YACtHoI,IAAY3I,KAAKykB,eAAelkB,yBAAyB,4BAA6B,QAAS,UAChG,KAAQP,KAAK27B,yBAKf37B,KAAK0b,+BAA+BO,mBAAmBogB,GAAwB74B,UAC5EwoB,IAAehsB,KAAKykB,eAAelkB,yBAAyB,8CAA+C,QAAS,YACpHoI,IAAY3I,KAAKykB,eAAelkB,yBAAyB,4BAA6B,QAAS,UAChG,KAAQP,KAAK27B,yBAKjB37B,KAAKw7B,iBAAiB9I,gBAI1BiJ,uBACE37B,KAAKs6B,uBACLt6B,KAAK2xB,iBAAkB,EACvB3xB,KAAKkyB,cAAe,EACpBlyB,KAAKk7B,uBAAyB,GAC9Bl7B,KAAKw0B,eAAiB,EACtBx0B,KAAKw7B,iBAAiB7I,QACtB3yB,KAAKm7B,qBAAuB,GAC5Bn7B,KAAKo7B,oBAAsB,GAC3Bp7B,KAAKq7B,qBAAuB,iDAzOnBlB,GAAgCl4B,yDAAhCk4B,EAAgC/V,4EAmBhCkY,KAAY,45DDrCzBr6B,sBAA2B,sBAA3BA,CAA2B,mBAA3BA,CAA2B,OAA3BA,CAA2B,cAIDA,sBAAUA,QAAYA,yBACpCA,UAEJA,0BAAgB,QACRA,SAA0BA,UAElCA,gCACJA,QAEAA,wCAqDAA,uCAwBAA,uCAUJA,QAGAA,mDA/FgBA,yCAEwCA,wCAGRA,yCAqDAA,0CAwBVA,uhBCxEzBk4B,GAAb,iBCfM,iCCHNl4B,iBACIA,kCACJA,SCOO,IAAMs6B,GAAb,MAAM,QAIF18B,YAAoB8oB,4BAFpB3oB,mBAAwB,EAKxB8oB,YAEQ9oB,KAAK2oB,kBAAkBziB,aAAajD,OAAS,GAC7CjD,KAAK4pB,cAAe,EACpB5pB,KAAK2oB,kBAAkBiB,cAAe,IAGtC5pB,KAAK4pB,cAAe,EACpB5pB,KAAK2oB,kBAAkBiB,cAAe,iDAfrC2S,GAA2Bt6B,oCAA3Bs6B,EAA2BnY,oMDTxCniB,6BAAMA,sWCSOs6B,GAAb,mFCLYt6B,2BAAsEA,+EAA8B,6CACtFu6B,qBAAyBv6B,gCAD+BA,+DAa1EA,yBAC2DA,SAC3DA,4CADIA,+CAD2DA,6BAA4B,WAChCA,+DAG/DA,uBAAiDA,SAAcA,8BAAdA,mECD9C,IAAMw6B,GAAb,MAAM,QA0BF58B,cAzBSG,uBAA4B,YAG5BA,eAAW,EACXA,aAAU,OACVA,WAAQ,KACRA,iBAA2B,IAAI2vB,KAC/B3vB,cAAmB,oBACnBA,mBAAe,EAEfA,eAAW,EAGXA,gBAAqB,EACrBA,gBAA8C,WAE7CA,qBAAqC,IAAI2kB,MAInD3kB,qBAA8B,GAC9BA,mBAA4B,GAC5BA,uBAAmB,EACnBA,mBAAgB,GAIhBktB,cACQltB,KAAKg5B,SACLh5B,KAAK08B,YAAYC,UAEjB38B,KAAK08B,YAAYE,SAErB58B,KAAK68B,gBAAkB78B,KAAKmV,QAC5BnV,KAAS88B,gBACL98B,KAAK+8B,cAAgB/8B,KAAK88B,gBACnB98B,KAAK08B,YAAYlsB,QACxBxQ,KAAK+8B,cAAgB/8B,KAAK08B,YAAYlsB,OAK9CsY,YACS9oB,KAAK+8B,cAAc95B,QACpBjD,KAAKg9B,gBAAgBtX,KAAK1lB,KAAK+8B,eAIvCE,gBAAgBC,GACZ,GAAIA,EAAIC,QAAS,CACb,IAAI33B,EAAS43B,SAAQp9B,KAAK+8B,cAAe/8B,KAAK68B,iBAC9C78B,KAAK+8B,cAAgBK,UAAS53B,EAAQxF,KAAKwQ,WAExC,CACH,MAAM6sB,EAAiBr9B,KAAKs9B,2BAC5Bt9B,KAAK+8B,cAAgBK,SAAQC,EAAgBr9B,KAAK+8B,cAAe/8B,KAAKwQ,OAE1ExQ,KAAKg9B,gBAAgBtX,KAAK1lB,KAAK+8B,eAGnCQ,WAAW/sB,GACPxQ,KAAK68B,gBAAkB78B,KAAKmV,QAAQsE,OAChCqS,GAAQA,EAAK9rB,KAAKw9B,SAASlE,cAAchT,QAAQ9V,EAAM8oB,gBAAiB,GAE5Et5B,KAAKy9B,kBAAmB,EACxBz9B,KAAK68B,gBAAgB5kB,QAAQ6T,IACpB9rB,KAAK+8B,cAAc5T,SAAS2C,EAAK9rB,KAAKwQ,UACvCxQ,KAAKy9B,kBAAmB,KAG3Bz9B,KAAK68B,gBAAgB55B,SACtBjD,KAAKy9B,kBAAmB,GAIhCC,WAAWC,GACP,QAAS39B,KAAK68B,gBAAgBvW,QAAQqX,IAAU,GAGpDL,2BACI,MAAMD,EAAiB,GACvB,YAAKR,gBAAgB5kB,QAAQ0lB,IACzBN,EAAev6B,KAAK66B,KAEjBN,EAGXO,kBAEI,GADA59B,KAAK69B,cAAgB,GACjB79B,KAAK+8B,eAAiB/8B,KAAKmV,QAAS,CACpC,IAAI2oB,EAAgB,GACpB,GAAI99B,KAAK+9B,SAAU,CAEf,QAAS/uB,EAAI,EAAGA,EAAIhP,KAAKg+B,WAAYhvB,IACjC8uB,EAAc9uB,GAAKhP,KAAKmV,QAAQsE,OAC5BkkB,GAAUA,EAAO39B,KAAKwQ,UAAqC7D,MAAzB3M,KAAK+8B,cAAc/tB,GAAkBhP,KAAK+8B,cAAc/tB,GAAKhP,KAAK+8B,cAAc/tB,GAAGhP,KAAKwQ,SAC5H,GAEN,GAAIstB,EAAc76B,OAAQ,CACtB,QAAS+L,EAAI,EAAGA,EAAI8uB,EAAc76B,OAAQ+L,IAClC8uB,EAAc9uB,IAAM8uB,EAAc9uB,GAAGhP,KAAKw9B,WAC1Cx9B,KAAK69B,eAAiBC,EAAc9uB,GAAGhP,KAAKw9B,SAAW,KAG/Dx9B,KAAK69B,cAAgB79B,KAAK69B,cAAczyB,MAAM,GAAG,GAE7CpL,KAAK+8B,cAAc95B,OAAS,GAC5BjD,KAAK+8B,cAAc95B,OAASjD,KAAKg+B,aAEjCh+B,KAAK69B,eAAiB,MAAM79B,KAAK+8B,cAAc95B,OAC3CjD,KAAKg+B,4BAKjBF,EAAgB99B,KAAKmV,QAAQsE,OACzBkkB,GAAUA,EAAO39B,KAAKwQ,SAAWxQ,KAAK+8B,cAAc/8B,KAAKwQ,QAEzDstB,EAAc76B,SACdjD,KAAK69B,cAAgBC,EAAc,GAAG99B,KAAKw9B,UAIvD,OAAOx9B,KAAK69B,cAEhBI,kBAAkBf,GACd,MAAMG,EAAiBr9B,KAAKs9B,2BAC5B,IAAI5uB,EAAQ,EACR1O,KAAK+9B,WACL/9B,KAAK+8B,cAActjB,OAAOqS,IAClBuR,EAAelU,SAAS2C,IACxBpd,MAGR1O,KAAKy9B,iBAAmB/uB,IAAU1O,KAAK68B,gBAAgB55B,QAE3DjD,KAAK+8B,cAAgBG,EAAI1sB,MACzBxQ,KAAKg9B,gBAAgBtX,KAAK1lB,KAAK+8B,eAE5BmB,UAAUlnB,EAAO8U,GACpB,OAAOA,EAEXqS,eAAeC,EAASC,GACpB,OAAOD,GAAMC,EAAMD,EAAG/oB,KAAOgpB,EAAGhpB,IAAM+oB,EAAGZ,UAAYa,EAAGb,QAAWY,IAAOC,gDAhJrE5B,8BAA2BrY,4sCDpBxCniB,4BAAqD,oBACyBA,6DAA2B,qCAC9EwkB,yBACnBxkB,iBACIA,iCAEAA,qBAAkEA,0DAASwkB,wBAA3ExkB,QAEAA,iBAA6BA,mDAASwkB,oBAAW,IAAGnR,QAAsB,KACtErT,oBAA8C,gBACQA,kBAAKA,cAInEA,+BACIA,UACJA,QACAA,iCAGJA,QACAA,+BACJA,cAtBuBA,iCACKA,4CAA2B,sBAA3BA,CAA2B,0BAA3BA,CAA2B,gCAG5BA,kCAEiBA,mDAAiC,mCASjEA,4CAE2BA,oCAAY,4BAIlBA,moBCDpBw6B,GAAb,iDCeoBx6B,iBAA8DA,uBAAUA,mCACxEA,iBAAwCA,SAA2BA,kCAA3BA,iEAIxCA,iBAA8DA,4BAAeA,mCAC7EA,iBAAwCA,SAAiBA,kCAAjBA,uDAIxCA,iBAA8DA,sBAASA,mCACvEA,iBAAwCA,SAAqBA,kCAArBA,2DAIxCA,iBAA8DA,qBAAQA,kDACtEA,iBAAuC,WAAvCA,CAAuC,eAEKA,2DAAS+sB,EAATH,OAASG,sBACzC/sB,uBAA4BA,gBAAIA,qCAMhDA,uCACAA,+FA/CZA,8BAAmE,UAAnEA,CAAmE,cAG5BA,iDAASg4B,oBACpCh4B,sBAAqCA,eAAGA,YAIhDA,iBAA8B,WAA9BA,CAA8B,QAA9BA,CAA8B,2BAIoCA,kDAASitB,wBAE/DjtB,YAIRA,oBAEIA,aACIA,yBACAA,yBACJA,QAEAA,aACIA,yBACAA,yBACJA,QAEAA,aACIA,yBACAA,yBACJA,QAEAA,aACIA,yBACAA,yBAOJA,QAEAA,yBACAA,yBACJA,QAEAA,6BACIA,iDAAQktB,kCACZltB,oCAlCoDA,8CA4B5BA,sDACaA,sDAGtBA,4DAA2C,cAA3CA,CAA2C,uDAsBlDA,qBAAoDA,kCAAsBA,mCAOlEA,mBAEIA,SAEJA,+BAFIA,kQAIRA,yBAAyDA,SAAWA,kCAAxBA,iBAAaA,kDAwBzDA,yBACIA,SACJA,kCAF8CA,oBAC1CA,0DAOJA,yBACIA,SACJA,kCAF8CA,oBAC1CA,0DAiBJA,yBAAwEA,SACxEA,kCADiDA,oBAAuBA,yDASxEA,yBAAmEA,SAAgBA,kCAArCA,oBAAqBA,kDAOnEA,yBACIA,SAAuBA,kCADgCA,oBACvDA,wEAhGxBA,8BAAoE,YAApEA,CAAoE,WAApEA,CAAoE,uBAKpDA,oBACJA,QAEAA,6BACIA,oBACJA,UAGJA,kBAAuF,uBAE/EA,oBACAA,gCACJA,QAEAA,8BAAuB,mBAAvBA,CAAuB,yBAGXA,UACAA,2BAKJA,QACAA,iCACJA,UAGJA,uCAEsCA,4DAAmB+wB,wBACzD/wB,UAGJA,mBAAuF,wBAE/EA,qBACJA,QAEAA,8BACIA,qBACJA,UAGJA,mBAAuF,uBAAvFA,CAAuF,oBAI3EA,iCAGJA,UAGJA,8BAAuB,oBAEfA,iCAGJA,UAEJA,8BACIA,qBAEJA,QACAA,8BACIA,qBACJA,UAGJA,mBAAuF,uBAAvFA,CAAuF,oBAG3EA,oDAAmBq8B,EAAnBzP,MAAmByP,6BACnBr8B,iCAEJA,UAGJA,8BAAuB,oBAEfA,oDAAmBgxB,EAAnBpE,MAAmBoE,2BACnBhxB,0BAA2BA,iBAAIA,QAC/BA,iCACJA,UAGJA,8BAAuB,mBAAvBA,CAAuB,oBAEYA,iBAAIA,QAC/BA,iCAEJA,YAIRA,mBAAuF,aAAvFA,CAAuF,sBAEDA,kCAC9EA,QACAA,4BAA+EA,mCAC/EA,QACAA,4BAA6EA,iCAC7EA,QACAA,4BAAsFA,yCAC5DA,QAC1BA,4BAA2EA,+BAC3EA,QACAA,4BAAqEA,wBAAWA,wCA/GpEA,2CAcAA,0DAIAA,0EAEJA,uMACOA,iJAMgBA,yCAIqCA,wDAAyC,0BAAzCA,CAAyC,2BAAzCA,CAAyC,qCAAzCA,CAAyC,cAAzCA,CAAyC,eAAzCA,CAAyC,mCAoB9EA,2CAQAA,2CAkBOA,uCAQtBA,6BACoBA,sCAMpBA,6BAC2BA,sFAwB3DA,+BAA0D,UAA1DA,CAA0D,eAETA,iDAASixB,kCAC9CjxB,oBAAUA,SAAiCA,QAAYA,SAE3DA,QACAA,qBAAyCA,iDAASmxB,uBAC9CnxB,oBAAUA,kBAAMA,QAAYA,oBAChCA,oCALcA,4CAA6CA,2ECxKhE,IAAMs8B,GAAb,MAAM,QAoCF1+B,YAAoByc,EAA8C1c,EACtDgf,EAA8D4C,GADtDxhB,yBAA8CA,sBACtDA,iCAA8DA,+BAjC1EA,sBAA2B,GAC3BA,iBAAsB,GAItBA,0BAAmC,IAAIgK,EACvChK,kBAA+B,GAC/BA,gBAA0B,GAC1BA,eAAmB,GACnBA,qBAAyB,GACzBA,kBAAuB,GACvBA,sBAA2B,KAC3BA,6BAAkC,KAIlCA,mBAAuB,GACvBA,gBAAY,EACZA,kBAAe,yBAEfA,sBAA6B,CAAC,YAAa,OAAQ,WAAY,QAS/DA,mBAAwB,EACxBA,sBAA2B,EAK3B4kB,WACI5kB,KAAKw+B,+BACLx+B,KAAKy+B,0BAA0B,KAAM,MAGzCC,6BAA6BplB,GACzBtZ,KAAKy+B,0BAA0BnlB,EAAEyR,UAAY,EAAGzR,EAAEuC,UAGtD2iB,+BAEIx+B,KAAKsc,kBAAkBQ,YAAY,MAAMtZ,UAAWuU,IAChD/X,KAAK2+B,iBAAmB5mB,EAAIhI,QAC5B/P,KAAK4+B,gBAAkB7mB,EAAIjI,SAG/B9P,KAAKsc,kBAAkBW,uBAAuB,KAAM,MAAM,GAAMzZ,UAAWuU,IACvE/X,KAAK6+B,eAAiB9mB,EAAIhD,KAAKsI,sBAGnCrd,KAAKsc,kBAAkBiB,gBAAgB,MAAM/Z,UAAUuU,IACnD/X,KAAK2qB,aAA+B5S,IAGxC/X,KAAK4e,0BAA0B5B,uBAAuB,MAAMxZ,UAAWuU,IACnE/X,KAAK8+B,WAA0B/mB,IAGnC/X,KAAKwhB,wBAAwBC,2BAA2B,KAAM,KAAM,IAAI,GAAMje,UAAUuU,IACpF/X,KAAK++B,yBAA2BhnB,EAAIhD,KAAK8M,OAKjD4c,0BAA0B5zB,EAAcgR,GACpC7b,KAAKsc,kBAAkBC,kBAAkB1R,EAAMgR,GAAUrY,UAAWuU,IAChE/X,KAAKg/B,eAAiBjnB,EAAIhD,KAAK2H,UAC/B1c,KAAKi/B,qBAAuBlnB,EAAIhD,KAAK/K,aAI7Ck1B,mBAAmB1uB,GACfxQ,KAAKm/B,YAAc3uB,EACnBxQ,KAAKsc,kBAAkBE,aAAa,KAAMxc,KAAKm/B,aAAa37B,UAAWuU,IACnE/X,KAAKg/B,eAAiBjnB,EAAIhD,KAAK2H,UAC/B1c,KAAKi/B,qBAAuBlnB,EAAIhD,KAAK/K,aAI7Co1B,kBACI,IAAIC,EAAgB,IAAI3iB,GAGxB1c,KAAKs/B,iBAAmB,wCACxBD,EAActvB,QAAU/P,KAAK2+B,iBAC7BU,EAAcvvB,OAAS9P,KAAK4+B,gBAC5B5+B,KAAKw3B,iBAAmB,KACxBx3B,KAAK23B,wBAA0B,KAC/B33B,KAAKu/B,iBAAiBF,GAGtBr/B,KAAK2xB,iBAAkB,EAGrB6N,iBAAiBC,iDAEnBz/B,KAAKs/B,iBAAmB,iBAAmBG,EAAmBtwB,KAC9DnP,KAAKw3B,iBAAmB,KACxBx3B,KAAK23B,wBAA0B,KAE/B33B,KAAKu3B,UAAY,GACjBv3B,KAAK03B,gBAAkB,GAGvB13B,KAAKo3B,oBAA+Bp3B,KAAK4e,0BAA0BC,0BAA0B,KAAM4gB,EAAmB3gB,cAAc4gB,aAAa,GAAGtI,aACpHntB,KAAKC,MAAMlK,KAAKo3B,cACpCG,UAAUtf,QAAQ3C,IAE1BtV,KAAKu3B,UAAUz0B,KAAK,CAAEuS,GAAIpK,OAAOqK,EAAEmiB,oBAAqBtoB,KAAMmG,EAAEnG,OACtB,MAAtCswB,EAAmB9iB,iBAGO,MADDrH,EAAEoiB,gBAAgB5wB,KAAKwR,GAAKA,EAAEsf,2BAA6B6H,EAAmB9iB,gBAAgB9W,cAEnH7F,KAAKw3B,iBAAmBliB,EAAEmiB,mBAC1Bz3B,KAAK23B,wBAA0B8H,EAAmB9iB,gBAClDrH,EAAEoiB,gBAAgBzf,QAAQ7C,IACtBpV,KAAK03B,gBAAgB50B,KAAK,CAAEuS,IAAKD,EAAGwiB,0BAA2BzoB,KAAMiG,EAAGjG,YAMxFswB,EAAmBE,uBAAyB,GAC5C3/B,KAAKsc,kBAAkBkB,oBAAoBiiB,EAAmB3vB,QAAQtM,UAAWuU,IAC7EA,EAAIE,QAAQiQ,IACRloB,KAAK2qB,aAAa1S,QAAQK,IAClBA,EAAExI,QAAUoY,EAAIoJ,iBAChBmO,EAAmBE,uBAAuB78B,KAAKwV,OAI3DtY,KAAKu/B,iBAAiBE,YAIgCz/B,KAAKsc,kBAAkBqB,sCAAsC8hB,EAAmB3vB,QAAQ4vB,aACzIznB,QAAQiQ,IACbloB,KAAK4/B,cAAc98B,KAAK,CAAEuS,GAAI6S,EAAI2X,QAAS1wB,KAAM+Y,EAAIrG,KAAK1S,SAI9DnP,KAAKkyB,cAAe,EACpBlyB,KAAK2xB,iBAAkB,IAG3BmO,gCAEI,GAAI9/B,KAAK+/B,aAAatN,MAEdzyB,KAAKkyB,aACLlyB,KAAKsc,kBAAkBG,gBAAgBzc,KAAK+/B,aAAaC,eAAex8B,UACnEwoB,IAEG,IAAItO,EAAqC,GACzC1d,KAAK+/B,aAAa7qB,SAAS+qB,oBAAuBzvB,MAAMyH,QAAQiQ,IAC5DxK,EAAgB5a,KAAKuT,OAAOC,OAAO,CAAExG,OAAQ9P,KAAK+/B,aAAa7qB,SAASpF,OAAUU,MAAO8gB,gBAAiBpJ,EAAIpY,YAGlH9P,KAAKsc,kBAAkBmB,0BAA0BC,EAAiB1d,KAAK+/B,aAAa7qB,SAASpF,OAAUU,OAAOhN,YAG9G,IAAIqa,EAAyE,GAC7E7d,KAAK4/B,cAAc3nB,QAAQiQ,IACvBrK,EAAkC/a,KAAKuT,OAAOC,OAAO,CAAE4pB,aAAclgC,KAAK+/B,aAAa7qB,SAASpF,OAAUU,MAAOqvB,QAAS3X,EAAI7S,QAGlIrV,KAAKsc,kBAAkBsB,4CAA4CC,EAAmC7d,KAAK+/B,aAAa7qB,SAASpF,OAAUU,OAAOhN,YAElJxD,KAAKJ,eAAeW,yBAAyB,8CAA+C,QAAS,YAExGoI,IAAY3I,KAAKJ,eAAeW,yBAAyB,4BAA6B,QAAS,UAChG,KAAQP,KAAKmgC,uBAKjBngC,KAAKsc,kBAAkBM,aAAa5c,KAAK+/B,aAAaC,eAAex8B,UAChEwoB,IAEG,IAAItO,EAAqC,GACzC1d,KAAK+/B,aAAa7qB,SAAS+qB,oBAAuBzvB,MAAMyH,QAAQiQ,IAC5DxK,EAAgB5a,KAAKuT,OAAOC,OAAO,CAAExG,OAAQ9P,KAAK+/B,aAAa7qB,SAASpF,OAAUU,MAAO8gB,gBAAiBpJ,EAAIpY,YAGlH9P,KAAKsc,kBAAkBmB,0BAA0BC,EAAiB1d,KAAK+/B,aAAa7qB,SAASpF,OAAUU,OAAOhN,YAG9G,IAAIqa,EAAyE,GAC7E7d,KAAK4/B,cAAc3nB,QAAQiQ,IACvBrK,EAAkC/a,KAAKuT,OAAOC,OAAO,CAAE4pB,aAAclgC,KAAK+/B,aAAa7qB,SAASpF,OAAUU,MAAOqvB,QAAS3X,EAAI7S,QAGlIrV,KAAKsc,kBAAkBsB,4CAA4CC,EAAmC7d,KAAK+/B,aAAa7qB,SAASpF,OAAUU,OAAOhN,YAElJxD,KAAKJ,eAAeW,yBAAyB,4CAA6C,QAAS,YAEtGoI,IAAY3I,KAAKJ,eAAeW,yBAAyB,4BAA6B,QAAS,UAChG,KAAQP,KAAKmgC,2BAKpB,CACD,MAAMjrB,EAAWlV,KAAK+/B,aAAa7qB,SACnCmB,OAAO+pB,KAAKlrB,GAAU+C,QAAQooB,GAAenrB,EAASmrB,GAAa3N,kBAI3E6M,iBAAiBe,GACbtgC,KAAK+/B,aAAe,IAAIQ,KAAU,CAC9BzwB,OAAQ,IAAI6f,KAAY,CAAEnf,MAAO8vB,EAAexwB,OAAQkpB,UAAU,IAClEjpB,QAAS,IAAI4f,KAAY,CAAEnf,MAAO8vB,EAAevwB,QAASipB,UAAU,IACpE7pB,KAAM,IAAIwgB,KAAY2Q,EAAenxB,KAAM,CAACygB,gBAC5C4Q,SAAU,IAAI7Q,KAAY2Q,EAAeE,UACzCC,iBAAkB,IAAI9Q,KAAY2Q,EAAeG,kBACjD9jB,gBAAiB,IAAIgT,KAAa3vB,KAAK23B,wBAA0B,CAAC/H,gBAClE9Q,aAAc,IAAI6Q,KAAY2Q,EAAexhB,aAAc,CAAC8Q,gBAC5D8Q,sBAAuB,IAAI/Q,KAAY2Q,EAAeI,uBACtDC,qBAAsB,IAAIhR,KAAmD,MAAvC2Q,EAAeK,sBAAuCL,EAAeK,sBAC3GC,6BAA8B,IAAIjR,KAA2D,MAA/C2Q,EAAeM,8BAA+CN,EAAeM,8BAC3HC,qBAAsB,IAAIlR,KAAY2Q,EAAeO,sBACrDC,kBAAmB,IAAInR,KAAgD,MAApC2Q,EAAeQ,mBAAoCR,EAAeQ,mBACrGC,iBAAkB,IAAIpR,KAAY2Q,EAAeS,kBACjDC,WAAY,IAAIrR,KAAY2Q,EAAeU,YAC3CC,YAAa,IAAItR,KAA0C,MAA9B2Q,EAAeW,aAA8BX,EAAeW,aACzFC,sBAAuB,IAAIvR,KAAoD,MAAxC2Q,EAAeY,uBAAwCZ,EAAeY,uBAC7GC,oBAAqB,IAAIxR,KAAkD,MAAtC2Q,EAAea,qBAAsCb,EAAea,qBACzGC,WAAY,IAAIzR,KAAY1kB,OAAOjL,KAAKw3B,mBACxCyI,oBAAsB,IAAItQ,KAAY2Q,EAAeX,0BAI7DQ,qBACIngC,KAAK2xB,iBAAkB,EACvB3xB,KAAKkyB,cAAe,EACpBlyB,KAAKs/B,iBAAmB,GACxBt/B,KAAKm/B,YAAc,GACnBn/B,KAAK2+B,iBAAmB,GACxB3+B,KAAK4+B,gBAAkB,GACvB5+B,KAAK+/B,aAAapN,QAClB3yB,KAAKw3B,iBAAmB,KACxBx3B,KAAK23B,wBAA0B,KAC/B33B,KAAK4/B,cAAgB,GAErB5/B,KAAKu3B,UAAY,GACjBv3B,KAAK03B,gBAAkB,GAEvB13B,KAAKw+B,+BACLx+B,KAAKy+B,0BAA0B,KAAM,MAGzCvG,kBAAkBpM,GAEd9rB,KAAK4e,0BAA0BC,0BAA0B,KAAMiN,GAAMtoB,UAAWuU,IAC5E/X,KAAKo3B,aAAerf,EAAI,GAAGqf,aAC3B,IAAIC,EAA4BptB,KAAKC,MAAMlK,KAAKo3B,cAGhDp3B,KAAKu3B,UAAY,GACjBv3B,KAAK03B,gBAAkB,GAEvBL,EAAYE,UAAUtf,QAAQ3C,IAE1BtV,KAAKu3B,UAAUz0B,KAAK,CAAEuS,GAAIC,EAAEmiB,mBAAoBtoB,KAAMmG,EAAEnG,SAE5DnP,KAAKw3B,iBAAmB,KACxBx3B,KAAK23B,wBAA0B,OAIvCQ,gBAAgBrM,GACZ,IAAIuL,EAA4BptB,KAAKC,MAAMlK,KAAKo3B,cAGpC,MAARtL,IACA9rB,KAAKw3B,iBAAmB1L,EACxBuL,EAAYE,UAAU9d,OAAOkG,GAAWA,EAAQ8X,oBAAsBz3B,KAAKw3B,mBAI/Ex3B,KAAK03B,gBAAkB,GAGvB13B,KAAK23B,wBAA0B,KAC/BN,EAAYE,UAAUtf,QAAQ3C,IACtBA,EAAEmiB,oBAAsBz3B,KAAKw3B,kBAC7BliB,EAAEoiB,gBAAgBzf,QAAQ7C,IAEtBpV,KAAK03B,gBAAgB50B,KAAK,CAAEuS,IAAKD,EAAGwiB,0BAA2BzoB,KAAMiG,EAAGjG,WAMxFkyB,mBAAmB/T,GACfttB,KAAK4/B,cAAgBtS,gDAhThBiR,GAAmBt8B,gEAAnBs8B,EAAmBna,wmGDxBhCniB,iCACAA,sBAA2B,sBAA3BA,CAA2B,mBAA3BA,CAA2B,OAA3BA,CAA2B,cAIDA,sBAAUA,QAAYA,uBACpCA,UAEJA,0BAAgB,QACRA,UAAoBA,UAE5BA,gCACJA,QAEAA,uCAwDAA,wCAuHAA,uCAYJA,eAhMgBA,oCAEwCA,sCAGRA,yCAwDAA,0CAuHVA,wRCrKzBs8B,GAAb,GCxBM,iCCiBkBt8B,qBAAsDA,kCAAsBA,kDAoBxEA,qBAA8DA,qEAAS+sB,qCACnE/sB,oBAAUA,kBAAMA,QAAYA,mBAAMA,gCAmB9CA,iBAA8DA,kBAAKA,mCACnEA,iBAAuCA,SAAgBA,kCAAhBA,+CAIvCA,iBAA8DA,kBAAKA,mCACnEA,iBAAuCA,SAAgBA,kCAAhBA,+CAIvCA,iBAA8DA,mBAAMA,mCACpEA,iBAAuCA,SAAiBA,kCAAjBA,gDAIvCA,iBAA8DA,qBAAQA,mCACtEA,iBAAuCA,SAAmBA,kCAAnBA,kDAIvCA,iBAA8DA,qBAAQA,mCACtEA,iBAAuCA,SAAmBA,kCAAnBA,kDAIvCA,iBAA8DA,qBAAQA,kDACtEA,iBAAuC,WAAvCA,CAAuC,eAEKA,mEAASmtB,gCACzCntB,uBAA4BA,gBAAIA,UAEpCA,qBAAkCA,mEAAS6qB,kCACvC7qB,uBAA8BA,kBAAMA,qCAMpDA,uCACAA,sDCjFT,IAAMq/B,GAAb,MAAM,QAYFzhC,YAAoB0hC,EAA8CxhC,EAA+B2vB,GAA7E1vB,yBAA8CA,gBAA+BA,cARjGA,iBAAsB,GAEtBA,0BAAmC,IAAIgK,EACvChK,sBAA6B,CAAC,OAAQ,OAAQ,QAAS,UAAW,UAAW,UAG7EA,mBAAwB,EAIxB4kB,WACI5kB,KAAKwhC,oCAAoC,KAAM,MAAM,GACrDxhC,KAAKyhC,gBAAgB,IAAIpkB,IAG7BqkB,uCAAuCpoB,GACnCtZ,KAAKwhC,oCAAoCloB,EAAEyR,UAAY,EAAGzR,EAAEuC,UAEhE2lB,oCAAoC32B,EAAegR,EAAmBqB,GAClEld,KAAKuhC,kBAAkBtkB,uBAAuBpS,EAAMgR,EAAUqB,GAAY1Z,UAAWuU,IACjF/X,KAAK2hC,yBAA2B5pB,EAAIhD,KAAKsI,oBACzCrd,KAAK4hC,qBAAuB7pB,EAAIhD,KAAK/K,aAG7C63B,6BAA6BrxB,GACzBxQ,KAAKm/B,YAAc3uB,EACnBxQ,KAAKuhC,kBAAkBpkB,8BAA8B,KAAMnd,KAAKm/B,aAAa37B,UAAWuU,IACpF/X,KAAK2hC,yBAA2B5pB,EAAIhD,KAAKsI,oBACzCrd,KAAK4hC,qBAAuB7pB,EAAIhD,KAAK/K,aAG7Cy3B,gBAAgBK,GACZ9hC,KAAK+hC,eAAiB,IAAIxB,KAAU,CAChClrB,GAAI,IAAIsa,KAAgC,MAApBmS,EAAczsB,GAAa,EAAIysB,EAAczsB,IACjElG,KAAM,IAAIwgB,KAAYmS,EAAc3yB,KAAM,CAACygB,gBAC3C7gB,KAAM,IAAI4gB,KAAYmS,EAAc/yB,MACpCizB,MAAO,IAAIrS,KAAYmS,EAAcE,OACrCC,QAAS,IAAItS,KAAYmS,EAAcG,SACvCC,QAAS,IAAIvS,KAAYmS,EAAcI,WAG/CC,2BAA2BrW,GACvB9rB,KAAKyhC,gBAAgB3V,GACrB9rB,KAAKkyB,cAAe,EAExBkQ,wCAAwCC,GAEpC,GAAIriC,KAAK+hC,eAAetP,MACpBzyB,KAAKuhC,kBAAkBnkB,8BAA8Bpd,KAAK+hC,eAAe/B,eAAex8B,UACnFwoB,IAEOhsB,KAAKO,yBADLP,KAAKkyB,aACyB,mDAGA,iDAHoD,QAAS,YAMlGvpB,IAAY3I,KAAKO,yBAAyB,4BAA6B,QAAS,UACjF,KAAQP,KAAKsiC,8BAA8BD,SAG9C,CACD,MAAMntB,EAAWlV,KAAK+hC,eAAe7sB,SACrCmB,OAAO+pB,KAAKlrB,GAAU+C,QAAQooB,GAAenrB,EAASmrB,GAAa3N,kBAG3E6P,6BAA6BzW,GACP9rB,KAAK0vB,OAAO/uB,KAAKurB,EAA8B,CAC7DxgB,KAAM,CAAEwd,MAAO,WAAYkJ,KAAM,mCAAqCtG,EAAK3c,KAAO,OAG5EkjB,cAAc7uB,UAAUgC,IAChB,GAAVA,GAEAxF,KAAKuhC,kBAAkBjkB,2BAA2BwO,GAAMtoB,UACnDwoB,IAAehsB,KAAKO,yBAAyBurB,EAAK3c,KAAO,iCAAkC,QAAS,YACpGxG,IAAY3I,KAAKO,yBAAyB,4BAA6B,QAAS,UACjF,KAAQP,KAAKsiC,8BAA8B,UAK3D/hC,yBAAyBC,EAAiBC,EAAgBC,GACxC,WAAVA,EACAF,EAAU,kBAAUA,EAEL,SAAVE,IACLF,EAAU,aAAUA,GAExBR,KAAKD,SAASY,KAAKH,EAASC,EAAQ,CAChCG,SAAU,IACVC,iBAAkB,MAClBC,mBAAoB,WAG5BwhC,8BAA8BD,GAEN,MAAjBA,GACCA,EAAcG,YAElBxiC,KAAK+hC,eAAepP,QACpB3yB,KAAKkyB,cAAe,EACpBlyB,KAAKm/B,YAAc,GAEnBn/B,KAAKwhC,oCAAoC,KAAM,KAAM,oDA5GhDF,GAA6Br/B,6DAA7Bq/B,EAA6Bld,suDDf1CniB,sBAA2B,sBAA3BA,CAA2B,mBAA3BA,CAA2B,OAA3BA,CAA2B,cAIDA,iBAAKA,QAAYA,uBAC/BA,UAEJA,+BACJA,QAEAA,8BAA2C,UAA3CA,CAA2C,cAA3CA,CAA2C,WAA3CA,CAA2C,uBAMvBA,oBACAA,gCACJA,QACAA,6BACIA,qBACJA,QACAA,6BACIA,qBACJA,QACAA,6BACIA,qBACJA,QACAA,6BACIA,qBACJA,QACAA,gBAAK,YAALA,CAAK,gBAE4CA,2DAASwkB,+CAC9CxkB,qBAAUA,UAAiCA,QAAYA,UAE3DA,QACAA,6BAEJA,gBAMhBA,mBAA8B,YAA9BA,CAA8B,SAA9BA,CAA8B,4BAIoCA,iCAASwkB,oCAC/DxkB,YAIRA,qBAEIA,aACIA,yBACAA,yBACJA,QAEAA,aACIA,yBACAA,yBACJA,QAEAA,aACIA,yBACAA,yBACJA,QAEAA,aACIA,yBACAA,yBACJA,QAEAA,aACIA,yBACAA,yBACJA,QAEAA,aACIA,yBACAA,yBAUJA,QAEAA,yBACAA,yBACJA,QAEAA,6BAA2GA,gCAAQwkB,8CACnHxkB,oBA7F4CA,sCAMtCA,6CAIkBA,4DAiBMA,6CAA6CA,0EAGlDA,sCAiB2BA,wDAyC5BA,sDACaA,sDAGtBA,4DAA2C,cAA3CA,CAA2C,oOCpFzDq/B,GAAb,yBCRYr/B,2CAGAA,mBAAgFA,SAAyBA,wCAAzBA,yDAEpFA,sBACIA,8BACJA,kDADqBA,+BAAsB,+KAZ/CA,qBAAkG,eACrFA,mEAASu6B,YAKdv6B,wBACAA,kBAA0BA,SAAiBA,QAC3CA,kBAAgCA,aAACA,QACjCA,yBACJA,QACAA,4BAGJA,8CAd0CA,oDACHA,mEAKzBA,yCACoBA,sBAEnBA,uDAEDA,sDCGX,IAAMwgC,GAAb,MAAM,QALN5iC,cAQaG,eAAW,EAIXA,oBAAgB,EAEzBA,cAAsB,GAEtBktB,cACQltB,KAAK0iC,gBACL1iC,KAAK2iC,SAAW,IAGK,iBAAd3iC,KAAKyK,MACZ4L,OAAO+pB,KAAKpgC,KAAKyK,MAAMwN,QAAQ/H,IAC3BlQ,KAAK2iC,SAAS7/B,KAAK9C,KAAK4iC,cAAc1yB,EAAKlQ,KAAKyK,KAAKyF,OAKjE2yB,aAAaC,GACT,MAAwB,WAAjBA,EAAQ7pB,MAAsC,UAAjB6pB,EAAQ7pB,KAGhD9X,OAAO2hC,GACC9iC,KAAK6iC,aAAaC,KAClBA,EAAQC,UAAYD,EAAQC,UAI5BH,cAAc1yB,EAAUM,GAC5B,MAAMsyB,EAAmB,CACrB5yB,IAAKA,EACLM,MAAOA,EACPyI,UAAMtM,EACNq2B,YAAa,GAAKxyB,EAClBuyB,SAAU/iC,KAAK+iC,UAGnB,cAAeD,EAAQtyB,WACd,SACDsyB,EAAQ7pB,KAAO,SACf,UAEC,UACD6pB,EAAQ7pB,KAAO,UACf,UAEC,WACD6pB,EAAQ7pB,KAAO,WACf,UAEC,SACD6pB,EAAQ7pB,KAAO,SACf6pB,EAAQE,YAAc,IAAMF,EAAQtyB,MAAQ,IAC5C,UAEC,YACDsyB,EAAQ7pB,KAAO,YACf6pB,EAAQE,YAAc,YACtB,UAEC,SAEqB,OAAlBF,EAAQtyB,OACRsyB,EAAQ7pB,KAAO,OACf6pB,EAAQE,YAAc,QACnB5gC,MAAU6gC,QAAQH,EAAQtyB,QAC7BsyB,EAAQ7pB,KAAO,QACf6pB,EAAQE,YAAc,SAAWF,EAAQtyB,MAAMvN,OAAS,KAAOgH,KAAKue,UAAUsa,EAAQtyB,QACnF4a,EAAY5a,iBAAiBhK,KAChCs8B,EAAQ7pB,KAAO,QAEf6pB,EAAQ7pB,KAAO,SACf6pB,EAAQE,YAAc,UAAY/4B,KAAKue,UAAUsa,EAAQtyB,QAMrE,OAAOsyB,gDAnFFL,8BAAqBre,wdDflCniB,qBACIA,6BAeJA,eAfiCA,wECcpBwgC,GAAqB7c,g2HAArB6c,GAAb,GCFaS,GAAb,MAAM,QAMFrjC,YACWssB,EACyBzgB,GADzB1L,iBACyBA,YALpCA,eAAoB,EACpBA,mBAAwB,WAMpBA,KAAKyK,KAAOR,KAAKC,MAAMwB,EAAKy3B,UAGhCC,mBACIpjC,KAAK+iC,UAAY/iC,KAAK+iC,SACtB/iC,KAAKqjC,cAAgBrjC,KAAK+iC,SAAW,WAAa,SAEtD3W,YACIpsB,KAAKmsB,UAAU5qB,sDAlBV2hC,GAA2BjhC,kBAQxBoqB,gCARH6W,EAA2B9e,8SCbxCniB,iBAAsB,UAAtBA,CAAsB,WAEUA,SAAcA,QACtCA,iBAAyB,cACGA,gEAA8B,0BAAUwkB,uBAC5DxkB,oBAAUA,SAA4CA,gBAKtEA,iBACQA,6BAERA,eAXgCA,6BAEIA,6CACVA,uDAMDA,8BAAa,mVDEzBihC,GAAb,GETaI,GAAb,MAAM,QACFC,UAAUC,EAAmBC,GACzB,IAAI31B,EAAY,IAAItH,KAAKg9B,GACrBE,EAAY,IAAIl9B,KAAKi9B,GACrBvB,EAAUx8B,KAAKi+B,OAAOD,EAAQ91B,UAAYE,EAAUF,WAAW,KACnE,OAAOs0B,EAAU,EAAIA,EAAQr8B,WAAa,iDALrCy9B,qDAAoBM,UAApBN,GAAb,6BCaoBrhC,wBAAkEA,SAAaA,kCAAnCA,wBAAsBA,kDAMlEA,wBAAiEA,SAAQA,kCAAvBA,iBAAeA,6CAMjEA,wBAAiEA,SAAQA,kCAAvBA,iBAAeA,0CAgCrEA,iBAA8DA,uBAAUA,mCACxEA,iBAAwCA,SAA2BA,kCAA3BA,iEAIxCA,iBAA8DA,yBAAYA,mCAC1EA,iBAAwCA,yBAAqDA,kCAArDA,8FAIxCA,iBAA8DA,gCAAmBA,mCACjFA,iBAAwCA,mCAExCA,kCAFwCA,yFAMxCA,iBAA8DA,oBAAOA,mCACrEA,iBAAwCA,SAAmBA,kCAAnBA,yDAIxCA,iBAA8DA,qBAAQA,kDACtEA,iBAAuC,WAAvCA,CAAuC,eAEKA,2DAASotB,EAATR,OAASQ,0BACzCptB,uBAA4BA,oBAAQA,qCAMpDA,uCACAA,+FApFRA,8BAAmE,UAAnEA,CAAmE,qBAAnEA,CAAmE,iBAAnEA,CAAmE,kBAMxBA,gBAAIA,QAC/BA,gCACJA,UAGJA,4BAAuB,mBAEfA,gCACJA,UAGJA,6BAAuB,oBAEfA,iCACJA,UAIJA,6BACIA,qBAAmG,8BAAnGA,CAAmG,6BAGvGA,QAEAA,6BACIA,qBAAgG,8BAAhGA,CAAgG,6BAGpGA,UAGJA,mBACiC,SADjCA,CACiC,gBAEgBA,iDAAS+qB,uBAC9C/qB,qBAAUA,wBAAWA,QAAYA,6BACrCA,YAMRA,qBAEIA,aACIA,yBACAA,yBACJA,QAEAA,aACIA,yBACAA,yBACJA,QAEAA,aACIA,yBACAA,yBAGJA,QAEAA,aACIA,yBACAA,yBACJA,QAEAA,aACIA,yBACAA,yBAOJA,QAEAA,yBACAA,yBACJA,QAEAA,6BACoDA,iDAAQutB,sCAC5DvtB,0DApF4CA,+CACpBA,6BACiBA,uCAKKA,oDACLA,6CAKMA,oDACNA,6CAMjBA,kCAAwB,mCACPA,wBAKjBA,kCAAyB,iCACRA,wBAgBWA,kDAmC5BA,sDACaA,sDAGtBA,sEAAsD,gDAAtDA,CAAsD,cAAtDA,CAAsD,0EAMzEA,8BAAoE,WAApEA,CAAoE,sBAKxDA,oBACJA,QAEAA,4BACIA,oBACJA,UAGJA,kBAAuF,sBAG/EA,oBACJA,UAIJA,kBAAuF,uBAE/EA,sCAEJA,QAEAA,6BACIA,sCAEJA,QAEAA,6BACIA,qBACJA,QAEAA,6BACIA,qBACJA,UAIJA,mBAAuF,uBAE/EA,4CAEAA,gBAAK,gBAAyCA,yDAAS+wB,aAAW,cAAaA,+BAA6B/wB,uBAExGA,YAERA,6BACIA,4CAEAA,gBAAK,gBAAyCA,yDAASq8B,aAAW,iBAAgBA,kCAAgCr8B,uBAE9GA,YAGRA,6BACIA,4CAEAA,gBAAK,gBAAyCA,yDAASgxB,aAAW,gBAAeA,iCAA+BhxB,uBAE5GA,YAGRA,6BACIA,4CAEAA,gBAAK,gBAAyCA,yDAASixB,aAAW,0BAAyBA,2CAAyCjxB,uBAEhIA,wCAlE6BA,2CAIIA,+CAOHA,4CAOQA,uFAKEA,yFAKPA,+CAIDA,8CAOmBA,wDAOGA,yDAQDA,0DAQUA,4GAU/EA,+BAA0D,UAA1DA,CAA0D,eAETA,iDAASkxB,eAC9ClxB,oBAAUA,sBAAUA,QAAYA,kBACpCA,aCtKL,IAAM4hC,GAAb,MAAM,QA8BFhkC,YAAoBie,EAAsD4R,GAAtD1vB,6BAAsDA,cA3B1EA,8BAAuC,IAAIgK,EAC3ChK,gBAA0B,GAC1BA,sBAA6B,CAAC,YAAa,cAAe,gBAAiB,SAAU,UACrFA,sBAA6B,CAAC,KAAM,YAAa,gBAAiB,cAAe,YAAa,aAAc,aAC5GA,sBAA6B,CAAC,KAAM,MAAO,OAAQ,SAAU,OAS7DA,oBAAiB,IAAI2vB,KACrB3vB,yBAAsB,IAAI2vB,KAC1B3vB,yBAAsB,IAAI2vB,KAC1B3vB,uBAAoB,IAAI2vB,KACxB3vB,qBAAkB,IAAI2vB,KAOtB3vB,sBAA2B,EAK3B4kB,WAEI5kB,KAAK8jC,oBAAoB/R,SAAS/xB,KAAK+jC,iBAAmB,iBAE1D/jC,KAAK8d,sBAAsBvB,oBAAoB/Y,UAAUuU,IACrD/X,KAAKgkC,WAAajsB,EAAI2E,YAG1B1c,KAAKikC,8BAA8B,KAAM,KAAMjkC,KAAKkkC,YAAalkC,KAAKmkC,iBAAkBnkC,KAAKokC,cAAcpkC,KAAK+jC,kBAAmB/jC,KAAKqkC,cAG5IC,iCAAiChrB,GACF,MAAvBtZ,KAAKukC,iBACLvkC,KAAKukC,eAAiBvkC,KAAKokC,cAAcpkC,KAAK+jC,mBAElD/jC,KAAKikC,8BAA8B3qB,EAAEyR,UAAY,EAAGzR,EAAEuC,SAAU7b,KAAKkkC,YAAalkC,KAAKmkC,iBAAkBnkC,KAAKukC,eAAgBvkC,KAAKqkC,cAGvIJ,8BAA8Bp5B,EAAcgR,EAAkB/L,EAAgBkO,EAAqBC,EAAkBC,GACjHle,KAAK8d,sBAAsBC,iBAAiBlT,EAAMgR,EAAU/L,EAAQkO,EAAaC,EAAUC,GAAQ1a,UAAWuU,IAC1G/X,KAAKwkC,mBAAqBzsB,EAAIhD,KAAK0vB,cACnCzkC,KAAK0kC,yBAA2B3sB,EAAIhD,KAAK/K,aAIjDo6B,cAAcO,GAEV,IAAIC,EAAW,IAAIC,KAAS,SACxBC,EAAQ,IAAIt+B,KAEhB,OAAQm+B,OAEC,YACD,OAAOC,EAASrB,UAAU,IAAI/8B,KAAKs+B,EAAMl3B,UAAa,MAAkB,uBAEvE,gBACD,OAAOg3B,EAASrB,WAAU,IAAI/8B,MAAO6G,QAAQy3B,EAAMh5B,UAAY,GAAI,uBAElE,cACD,OAAO84B,EAASrB,WAAU,IAAI/8B,MAAO6G,QAAQy3B,EAAMh5B,UAAY,GAAI,uBAElE,YACD,OAAO84B,EAASrB,WAAU,IAAI/8B,MAAO6G,QAAQy3B,EAAMh5B,UAAY,GAAI,uBAElE,aACD,OAAO84B,EAASrB,WAAU,IAAI/8B,MAAOu+B,SAASD,EAAM/4B,WAAa,GAAI,uBAEpE,YACD,OAAO64B,EAASrB,WAAU,IAAI/8B,MAAOw+B,YAAYF,EAAM94B,cAAgB,GAAI,2BAG3E,OAAO,MAKnBi5B,qBAEIjlC,KAAKkkC,YAAclkC,KAAKklC,eAAe10B,MACvCxQ,KAAK+jC,iBAAmB/jC,KAAK8jC,oBAAoBtzB,MACjDxQ,KAAKmkC,iBAAmBnkC,KAAKmlC,oBAAoB30B,MACjDxQ,KAAKukC,eAAiB,IAAIM,KAAS,SAAStB,UAAUvjC,KAAKolC,kBAAkB50B,MAAO,cACpFxQ,KAAKqkC,aAAe,IAAIQ,KAAS,SAAStB,UAAUvjC,KAAKqlC,gBAAgB70B,MAAO,cAErD,MAAvBxQ,KAAKukC,iBACLvkC,KAAKukC,eAAiBvkC,KAAKokC,cAAcpkC,KAAK+jC,mBAElD/jC,KAAKikC,8BAA8B,KAAM,KAAMjkC,KAAKkkC,YAAalkC,KAAKmkC,iBAAkBnkC,KAAKukC,eAAgBvkC,KAAKqkC,cAGtHiB,qBAAqB7F,GAGjBz/B,KAAKykC,cAAgBhF,EACrBz/B,KAAKulC,iBAAmBt7B,KAAKC,MAAMlK,KAAKykC,cAAce,aACtDxlC,KAAKylC,mBAAqBx7B,KAAKC,MAAMlK,KAAKykC,cAAciB,eACxD1lC,KAAK2lC,kBAAoB17B,KAAKC,MAAMlK,KAAKykC,cAAcmB,gBACvD5lC,KAAK6lC,2BAA6B57B,KAAKC,MAAMlK,KAAKykC,cAAcqB,yBAGhE9lC,KAAK2xB,iBAAkB,EAE3BoU,aACI/lC,KAAK2xB,iBAAkB,EAG3BqU,WAAWC,EAAqBC,GACX,MAAbA,GACAlmC,KAAK0vB,OAAO/uB,KAAKuiC,GAA6B,CAC1CiD,OAAQ,QACRC,MAAO,QACP16B,KAAM,CACFwd,MAAO+c,EACP9C,SAAU+C,mDA7HjBrC,GAAuB5hC,gDAAvB4hC,EAAuBzf,slFDlBpCniB,sBAA2B,sBAA3BA,CAA2B,mBAA3BA,CAA2B,OAA3BA,CAA2B,cAIDA,iBAAKA,QAAYA,2BAC/BA,UAEJA,+BACJA,QAEAA,uCA6FAA,uCA6EAA,sCAOJA,eApLwDA,kCAGRA,yCA6FAA,0CA6EVA,sRClKzB4hC,GAAb,GChBM,SAANhkC,cAKWG,mBAA4C,GAC5CA,cAAkC,2BCyBzBiC,iBAA8DA,iCAAoBA,mCAClFA,iBAAwCA,SAAiBA,kCAAjBA,uDAIxCA,iBAA8DA,qBAAQA,kDACtEA,iBAAuC,WAAvCA,CAAuC,eAEKA,2DAASsiB,EAATsK,OAAStK,2BACzCtiB,uBAA4BA,gBAAIA,UAEpCA,qBAAkCA,2DAAS6sB,EAATD,OAASC,6BACvC7sB,uBAA8BA,kBAAMA,qCAMpDA,uCACAA,+FAvCZA,8BAAmE,UAAnEA,CAAmE,cAG5BA,iDAAS8sB,yBACpC9sB,sBAA0CA,eAAGA,YAIrDA,iBAA8B,WAA9BA,CAA8B,QAA9BA,CAA8B,2BAIyCA,kDAAS+sB,6BAC1C/sB,YAIlCA,oBAEIA,aACIA,yBACAA,yBACJA,QAEAA,aACIA,yBACAA,yBAUJA,QAEAA,yBACAA,yBACJA,QAEAA,6BACoDA,iDAAQgtB,uCAC5DhtB,oCA3BoDA,mDAqB5BA,qDACaA,sDAGtBA,uEAAuD,iDAAvDA,CAAuD,cAAvDA,CAAuD,sDAYpCA,0DASdA,qBAAuDA,kCAAsBA,gCAU7EA,qBAA6DA,kCAAsBA,+BASrEA,+CAUJA,0CAOAA,qDAoBVA,2BAAoCA,uBAAUA,mCAC9CA,oBAAqCA,yBACrCA,kCADqCA,oFAKrCA,2BAAoCA,qBAAQA,kDAC5CA,oBAAoC,eACIA,2DAASkxB,EAATtE,OAASsE,gCACzClxB,uBAA8BA,kBAAMA,mCAIhDA,gDACAA,yCAOcA,wDAQFA,yBACIA,SACJA,kCAFgDA,qBAC5CA,2DAgBJA,2BAAoCA,+BAAkBA,mCACtDA,oBAAqCA,SAA8BA,kCAA9BA,oEAIrCA,2BAAoCA,qBAAQA,kDAC5CA,oBAAoC,WAApCA,CAAoC,eAEQA,2DAASokC,EAATxX,OAASwX,+BACzCpkC,uBAA8BA,kBAAMA,UAExCA,qBAAoCA,2DAASqkC,EAATzX,OAASyX,mCACzCrkC,uBAAkCA,eAAGA,qCAKrDA,gDACAA,0CAyBQA,2BAAoCA,oBAAOA,mCAC3CA,oBAAqCA,SAAmBA,kCAAnBA,yDAIrCA,2BAAoCA,qBAAQA,kDAC5CA,oBAAoC,eACIA,2DAASskC,EAAT1X,OAAS0X,8BACzCtkC,uBAA8BA,kBAAMA,mCAIhDA,gDACAA,4DAhChBA,eAAsC,WAAtCA,CAAsC,WAAtCA,CAAsC,mBAAtCA,CAAsC,aAINA,SAAgDA,QAChEA,oBAAiEA,8EAAjEA,UAGJA,qBAAyCA,kDAASukC,0BAC9CvkC,oBAAUA,eAAGA,QACbA,yBACJA,YAGRA,mBAAyC,YAAzCA,CAAyC,mBAI7BA,aACIA,sCACAA,+BACJA,QAEAA,aACIA,sCACAA,+BAKJA,QACAA,qCACAA,8BACJA,uCA7BoBA,gGACiDA,2CAW1DA,0CAeUA,qDACaA,gGA7KlEA,8BAAoE,+BAEpBA,4DAAmBwkC,eAE3DxkC,uBAA0C,aAElCA,iCAEAA,oBACAA,kBAAyC,WAAzCA,CAAyC,uBAI7BA,oBACAA,wBAAoBA,sBAASA,QAC7BA,gCACJA,YAGRA,mBAAyC,YAAzCA,CAAyC,wBAI7BA,qBACAA,wBAAoBA,sBAASA,QAC7BA,gCACJA,gBAMhBA,wBAA2C,WAEnCA,kCACAA,6BAAmEA,+FAA8C,yDACjCykC,qCADbzkC,CAA8C,sDAE3F0kC,iCAF6C1kC,CAA8C,0CAE/C2kC,qBAFC3kC,CAA8C,6CAGnG4kC,yBACd5kC,YAIRA,wBACIA,kCACAA,iCAAmBA,2FAA0C,yDAAuB6kC,iBAAjE7kC,CAA0C,4DAChC8kC,oBADV9kC,CAA0C,+DACmD+kC,kCAChH/kC,UAGJA,qBACIA,kCACAA,mBAAyC,YAAzCA,CAAyC,oBAAzCA,CAAyC,eAGYA,4EAAzCA,QACAA,qCAAwE,6BAE5EA,QAEAA,sBAAyCA,iDAASglC,4BAC9ChlC,qBAAUA,gBAAGA,QACbA,4BACJA,YAGRA,mBAAyC,YAAzCA,CAAyC,mBAI7BA,aACIA,sCACAA,+BAEJA,QAEAA,aACIA,sCACAA,+BAKJA,QACAA,qCACAA,8BACJA,cAKZA,qBACIA,kCAEAA,mBAAyE,YAAzEA,CAAyE,YAAzEA,CAAyE,YAAzEA,CAAyE,oBAAzEA,CAAyE,oBAKlBA,8EAC/BA,iCAGJA,UAGJA,sBAAyCA,iDAASilC,2BAC9CjlC,qBAAUA,gBAAGA,QACbA,2BACJA,YAGRA,mBAAyC,YAAzCA,CAAyC,mBAI7BA,aACIA,sCACAA,+BACJA,QAEAA,aACIA,sCACAA,+BAUJA,QACAA,qCACAA,8BACJA,cAIZA,mBACIA,2BAsCJA,oDA/KEA,gDACAA,8CAUsBA,6DAUAA,mEAOtBA,iDAGoBA,6DAA4C,6CAA5CA,CAA4C,uDAQhEA,mDAEaA,yDAA0C,2BAUjCA,kCAAwB,2BACPA,wBAY1BA,6CAgBUA,qDACaA,sDAcaA,4CACEA,uCAc9BA,6CAoBUA,qDACaA,sDAMpCA,0FA+ClBA,qBAA6DA,kDAASklC,mBAClEllC,oBAAUA,2BAAeA,QACzBA,kBACJA,kDACAA,qBAA6DA,kDAASmlC,eAClEnlC,oBAAUA,yBAAaA,QACvBA,kBACJA,kDATRA,+BAA0D,WAElDA,4BAIAA,4BAIAA,qBAAyCA,iDAASolC,uCAC9CplC,oBAAUA,SAAiCA,QAAYA,SAG3DA,QACAA,qBAAyCA,iDAASqlC,2BAC9CrlC,oBAAUA,mBAAMA,QAAYA,qBAChCA,oCAfSA,qCAIAA,qCAKKA,4CAA6CA,qFCzOhE,IAAMslC,GAAb,MAAM,QAiDF1nC,YAAoBwe,EAAwD/B,EAChEmI,EAAwC/I,EAAwE8rB,EAAkC9X,GAD1I1vB,8BAAwDA,yBAChEA,sBAAwCA,sCAAwEA,mBAAkCA,cAhD9JA,sBAA6B,CAAC,OAAQ,QAEtCA,2BAAgC,GAChCA,iBAAsB,GAEtBA,+BAAwC,IAAIgK,EAG5ChK,+BAAmC,GACnCA,8BAAkC,GAClCA,8BAAuC,IAAIgK,EAC3ChK,iCAA6D,GAE7DA,0BAA8B,GAC9BA,6BAAoD,GAIpDA,mBAAgB,IAAIynC,KAEpBznC,gBAAoB,CAAC,CAAE0nC,IAAK,MAAOC,SAAU,sBAC7C,CAAED,IAAK,MAAOC,SAAU,oBACxB,CAAED,IAAK,MAAOC,SAAU,QACxB,CAAED,IAAK,MAAOC,SAAU,mBACxB,CAAED,IAAK,MAAOC,SAAU,cACxB,CAAED,IAAK,MAAOC,SAAU,aACxB,CAAED,IAAK,MAAOC,SAAU,cACxB,CAAED,IAAK,MAAOC,SAAU,uBAExB3nC,mBAAgB,IAAIynC,KAIpBznC,gBAAa,IAAIynC,KAGjBznC,oBAAiC,IAAI2e,GAGrC3e,mBAAwB,EACxBA,sBAA2B,EAC3BA,kBAAuB,EACvBA,kBAAuB,EACvBA,yBAA8B,EAC9BA,2BAAgC,EAMhC4kB,WACI5kB,KAAK4nC,gBAAkB5nC,KAAKwnC,YAAYtvB,MAAM,CAC1C7C,GAAI,GACJlG,KAAM,CAAC,GAAIygB,eACXiY,WAAY,CAAC,GAAIjY,iBAIrB5vB,KAAK8nC,+BAA+B,KAAM,MAC1C9nC,KAAK+nC,wCAAwC,KAAM,MAIvDC,kCAAkC1uB,GAC9BtZ,KAAK8nC,+BAA+BxuB,EAAEyR,UAAY,EAAGzR,EAAEuC,UAE3DisB,+BAA+Bj9B,EAAcgR,GACzC7b,KAAKqe,uBAAuBC,uBAAuBzT,EAAMgR,GAAUrY,UAAWuU,IAC1E/X,KAAKioC,oBAAsBlwB,EAAIhD,KAAK4J,eACpC3e,KAAKkoC,0BAA4BnwB,EAAIhD,KAAK/K,aAGlDm+B,wBAAwB33B,GACpBxQ,KAAKm/B,YAAc3uB,EACnBxQ,KAAKqe,uBAAuBE,0BAA0B,KAAMve,KAAKm/B,aAAa37B,UAAWuU,IACrF/X,KAAKioC,oBAAsBlwB,EAAIhD,KAAK4J,eACpC3e,KAAKkoC,0BAA4BnwB,EAAIhD,KAAK/K,aAGlDo+B,uBAEIpoC,KAAKqoC,sBAAwB,6CAC7BroC,KAAK2xB,iBAAkB,EAE3B2W,sBAAsBC,GAElBvoC,KAAKqoC,sBAAwB,iBAAmBE,EAAwBp5B,KAGxEnP,KAAK4nC,gBAAgBY,WAAW,CAC5BnzB,GAAIkzB,EAAwBlzB,GAC5BlG,KAAMo5B,EAAwBp5B,KAC9B04B,WAAYU,EAAwBV,aAGxC7nC,KAAK2e,eAAiB4pB,EAGtBvoC,KAAKkyB,cAAe,EACpBlyB,KAAK2xB,iBAAkB,EAE3B8W,wBAAwBF,GACFvoC,KAAK0vB,OAAO/uB,KAAKurB,EAA8B,CAC7DxgB,KAAM,CAAEwd,MAAO,WAAYkJ,KAAM,mCAAqCmW,EAAwBp5B,KAAO,OAG/FkjB,cAAc7uB,UAAUgC,IAChB,GAAVA,GAEAxF,KAAKqe,uBAAuBK,oBAAoB6pB,GAAyB/kC,UACpEwoB,IAAehsB,KAAKykB,eAAelkB,yBAAyBgoC,EAAwBp5B,KAAO,iCAAkC,QAAS,YACtIxG,IAAY3I,KAAKykB,eAAelkB,yBAAyB,4BAA6B,QAAS,UAChG,KAAQP,KAAK0oC,6BAQ7BC,iCAAiCrvB,GAC7BtZ,KAAK+nC,wCAAwCzuB,EAAEyR,UAAY,EAAGzR,EAAEuC,UAEpE+sB,6BAA6Bp4B,GACzBxQ,KAAKsc,kBAAkBE,aAAa,KAAMhM,GAAOhN,UAAWuU,IACxD/X,KAAK6oC,yBAA2B9wB,EAAIhD,KAAK/K,WACzChK,KAAK8oC,0BAA4B,GAChC/wB,EAAIhD,KAAK2H,UAAczE,QAAQiQ,IAC5BloB,KAAK8oC,0BAA0BhmC,KAAK,CAAEuS,GAAI6S,EAAIpY,OAAQX,KAAM+Y,EAAI/Y,KAAMme,UAAU,QAI5Fya,wCAAwCl9B,EAAcgR,GAClD7b,KAAKsc,kBAAkBC,kBAAkB1R,EAAMgR,GAAUrY,UAAWuU,IAChE/X,KAAK6oC,yBAA2B9wB,EAAIhD,KAAK/K,WACzChK,KAAK8oC,0BAA4B,GAChC/wB,EAAIhD,KAAK2H,UAAczE,QAAQiQ,IAC5BloB,KAAK8oC,0BAA0BhmC,KAAK,CAAEuS,GAAI6S,EAAIpY,OAAQX,KAAM+Y,EAAI/Y,KAAMme,UAAU,QAI5F6D,kCACInxB,KAAK+oC,yBAA2B,GAChC/oC,KAAK2e,eAAeqqB,cAAc/wB,QAAQiQ,IACtCloB,KAAK+oC,yBAAyBjmC,KAAK,CAAEuS,GAAI6S,EAAIoJ,gBAAiBniB,KAAM+Y,EAAIyC,aAAaxb,KAAMme,UAAU,MAG7G2b,iBAAiBnd,GAEb9rB,KAAK2e,eAAeqqB,cAAclmC,KAAKuT,OAAOC,OAAO,CAAE4yB,kBAA6Cv8B,MAA1B3M,KAAK2e,eAAetJ,GAAkB,KAAOrV,KAAK2e,eAAetJ,GAAIic,gBAAiBxF,EAAKzW,GAAIsV,aADtJ,CAAExb,KAAM2c,EAAK3c,SAGpCg6B,oBAAoBrd,GAChB9rB,KAAK2e,eAAeqqB,cAAgBhpC,KAAK2e,eAAeqqB,cAAcvvB,OAAOnB,GAAKA,EAAEgZ,iBAAmBxF,EAAKzW,IAMhHomB,6BACIz7B,KAAKm7B,qBAAuB,GAC5Bn7B,KAAK2e,eAAe6Z,SAASvgB,QAAQiQ,IACjCloB,KAAKm7B,qBAAqBr4B,KAAK,CAAEuS,GAAI6S,EAAI0T,QAAQhD,oBAAqBzpB,KAAM+Y,EAAI0T,QAAQ7C,6CAA8CzL,UAAU,EAAM/N,WAAY2I,EAAI3I,eAG9Kuc,aAAahQ,GAET9rB,KAAK2e,eAAe6Z,SAAS11B,KAAKuT,OAAOC,OAAO,CAAEiJ,WAAYuM,EAAKzW,GAAI+zB,WAAY,GAAIC,WAAY,GAAIzN,QADzF,CAAEzsB,KAAM2c,EAAKiN,iDAG/BgD,gBAAgBjQ,GACZ9rB,KAAK2e,eAAe6Z,SAAWx4B,KAAK2e,eAAe6Z,SAAS/e,OAAOnB,GAAKA,EAAEiH,YAAcuM,EAAKvM,YAKjG+pB,6BAA6Bxd,GACzB9rB,KAAK47B,QAAU57B,KAAK2e,eAAe6Z,SAAS1xB,KAAKwR,GAAKA,EAAEiH,YAAcuM,EAAKvM,YAE3Evf,KAAKupC,cAAgB,IAAI9B,KAAmBznC,KAAK47B,QAAQwN,YACzDppC,KAAKwpC,cAAgB,IAAI/B,KAAmBznC,KAAK47B,QAAQyN,YAEvB,GAA9BrpC,KAAKypC,QAAQC,gBACb1pC,KAAKypC,QAAQnc,SAASqc,WAAY,EAClC3pC,KAAKypC,QAAQznC,QAIrB4nC,0BACiG,MAAzF5pC,KAAK47B,QAAQwN,WAAWtiC,KAAKwR,GAAKA,EAAEuxB,WAAa7pC,KAAK8pC,cAAcC,mBAAmDp9B,MAAtB3M,KAAK8pC,gBACtG9pC,KAAK47B,QAAQwN,WAAWtmC,KAAK,CAAEuS,GAAI,KAAM20B,0BAA2B,KAAMH,UAAW7pC,KAAK8pC,cAAcG,eAAgBC,uBAAwB,OAChJlqC,KAAKupC,cAAgB,IAAI9B,KAAmBznC,KAAK47B,QAAQwN,aAGjEe,2BAA2Bre,GACvB9rB,KAAK47B,QAAQwN,WAAappC,KAAK47B,QAAQwN,WAAW3vB,OAAOnB,GAAKA,EAAEjD,IAAMyW,EAAKzW,IAC3ErV,KAAKupC,cAAgB,IAAI9B,KAAmBznC,KAAK47B,QAAQwN,YAK7DgB,yBAC0F,MAAlFpqC,KAAK47B,QAAQyN,WAAWviC,KAAKwR,GAAKA,EAAE+xB,mBAAqBrqC,KAAKsqC,kBAAoD39B,MAAxB3M,KAAKsqC,kBAC/FtqC,KAAK47B,QAAQyN,WAAWvmC,KAAKuT,OAAOC,OAAO,CAAEjB,GAAI,KAAM20B,0BAA2B,KAAMK,kBAAmBrqC,KAAKsqC,gBAAiBC,QAAS,MAC1IvqC,KAAKwpC,cAAgB,IAAI/B,KAAmBznC,KAAK47B,QAAQyN,aAG7DrpC,KAAKwqC,iBAAmB,KAG5BC,0BAA0B3e,GACtB9rB,KAAK47B,QAAQyN,WAAarpC,KAAK47B,QAAQyN,WAAW5vB,OAAOnB,GAAKA,EAAE+xB,mBAAqBve,EAAKue,mBAC1FrqC,KAAKwpC,cAAgB,IAAI/B,KAAmBznC,KAAK47B,QAAQyN,YAG7DqB,8BAA8B5e,GAC1B9rB,KAAKwqC,iBAAmB1e,EACxB9rB,KAAK2qC,WAAa,IAAIlD,KAAmBznC,KAAKwqC,iBAAiBD,SAGnEK,wBACI5qC,KAAKwqC,iBAAiBD,QAAQznC,KAAKuT,OAAOC,OAAO,CAAEu0B,OAAQ7qC,KAAK8qC,kBAChE9qC,KAAK2qC,WAAa,IAAIlD,KAAmBznC,KAAKwqC,iBAAiBD,SAEnEQ,yBAAyBjf,GACrB9rB,KAAKwqC,iBAAiBD,QAAUvqC,KAAKwqC,iBAAiBD,QAAQ9wB,OAAOnB,GAAKA,EAAEuyB,QAAU/e,EAAK+e,QAC3F7qC,KAAK2qC,WAAa,IAAIlD,KAAmBznC,KAAKwqC,iBAAiBD,SAKnES,qCACIhrC,KAAK2e,eAAetJ,GAAKrV,KAAK4nC,gBAAgB1yB,SAASG,GAAM7E,MAC7DxQ,KAAK2e,eAAexP,KAAOnP,KAAK4nC,gBAAgB1yB,SAAS/F,KAAQqB,MACjExQ,KAAK2e,eAAekpB,WAAa7nC,KAAK4nC,gBAAgB1yB,SAAS2yB,WAAcr3B,MAE7ExQ,KAAKqe,uBAAuBG,iBAAiBxe,KAAK2e,gBAAgBnb,UAC7DwoB,IAEOhsB,KAAKykB,eAAelkB,yBADpBP,KAAKkyB,aACwC,mDAGA,iDAHoD,QAAS,YAMjHvpB,IAAY3I,KAAKykB,eAAelkB,yBAAyB,4BAA6B,QAAS,UAChG,KAAQP,KAAK0oC,2BAGrBA,yBACI1oC,KAAK2xB,iBAAkB,EACvB3xB,KAAKkyB,cAAe,EACpBlyB,KAAKqoC,sBAAwB,GAC7BroC,KAAKm/B,YAAc,GACnBn/B,KAAKirC,aAAc,EACnBjrC,KAAKkrC,aAAc,EACnBlrC,KAAK2e,eAAiB,KAEtB3e,KAAK4nC,gBAAgBjV,QAErB3yB,KAAK8oC,0BAA4B,GACjC9oC,KAAK+oC,yBAA2B,GAGhC/oC,KAAKm7B,qBAAuB,GAE5Bn7B,KAAK8pC,cAAgB,KACrB9pC,KAAK47B,QAAU,KACf57B,KAAKupC,cAAgB,IAAI9B,KAEzBznC,KAAKsqC,gBAAkB,GACvBtqC,KAAKwpC,cAAgB,IAAI/B,KAEzBznC,KAAK8qC,eAAiB,KACtB9qC,KAAKwqC,iBAAmB,KACxBxqC,KAAK2qC,WAAa,IAAIlD,KAEtBznC,KAAK8nC,+BAA+B,KAAM,MAC1C9nC,KAAK+nC,wCAAwC,KAAM,MAGvDoD,UAAUC,GAEkB,GAApBA,EAAG1B,gBACH1pC,KAAKirC,aAAc,EACnBjrC,KAAKkrC,aAAc,GAGC,GAApBE,EAAG1B,gBACH1pC,KAAKmxB,kCACLnxB,KAAKirC,aAAc,EACnBjrC,KAAKkrC,aAAc,GAGC,GAApBE,EAAG1B,gBACH1pC,KAAKy7B,6BACLz7B,KAAKirC,aAAc,EACnBjrC,KAAKkrC,aAAc,GAEe,GAA9BlrC,KAAKypC,QAAQC,eAAoD,GAA9B1pC,KAAKypC,QAAQC,iBAChD1pC,KAAKypC,QAAQ4B,OAAOC,SAAY,GAAG3B,WAAY,IAI/B,GAApByB,EAAG1B,gBACH1pC,KAAKirC,aAAc,EACnBjrC,KAAKkrC,aAAc,GAGC,GAApBE,EAAG1B,gBACH1pC,KAAKirC,aAAc,EACnBjrC,KAAKkrC,aAAc,GAG3BK,aACIvrC,KAAKypC,QAAQznC,OAEjBwpC,iBACIxrC,KAAKypC,QAAQgC,yDA9TRlE,GAAwBtlC,yFAAxBslC,EAAwBnjB,oEA+CtBsnB,KAAoB,ylFDxEnCzpC,sBAA2B,sBAA3BA,CAA2B,mBAA3BA,CAA2B,OAA3BA,CAA2B,cAIDA,iBAAKA,QAAYA,4BAC/BA,UAEJA,0BAAgB,QACRA,SAAyBA,UAEjCA,gCACJA,QAEAA,uCAgDAA,wCA0LAA,uCAqBJA,eApQgBA,wCAEwCA,2CAGRA,yCAgDAA,0CA0LVA,sUC9NzBslC,GAAb,GClBaoE,GAAb,MAAM,sDAAOA,8BAAwBvnB,miBCPrCniB,iBAAuF,eAAvFA,CAAuF,uBAAvFA,CAAuF,WAIzEA,mBACJA,QACAA,iBACEA,0CACJA,QACEA,iBAAkD,SAC2BA,0BAAcA,0EDHxF0pC,GAAb,GEJM,SAAN9rC,cAUEG,iBAA4B,ICLxB,UAYC,IAAM4rC,GAAb,MAAM,QAKF/rC,YAAoB2W,EAAoCpF,EAAsCxR,GAA1EI,oBAAoCA,qBAAsCA,sBAH9FA,eAAkB,IAAIsX,GACtBtX,aAAmB,IAAI6rC,GAIvBjnB,WACI5kB,KAAK8rC,cAGTA,cACI9rC,KAAKwW,aAAae,YAAY,KAAMM,SAAS7X,KAAKoR,cAAcgF,eAAeoB,UAAUhU,UAAUuU,IAC/F/X,KAAKyU,UAAkBsD,EAAIhD,KAE3B/U,KAAK6rC,QAAQE,UAAY/rC,KAAKyU,UAAUu3B,WACxChsC,KAAK6rC,QAAQI,SAAWjsC,KAAKyU,UAAUy3B,UACvClsC,KAAK6rC,QAAQM,SAAWnsC,KAAKyU,UAAUG,UAEnC5U,KAAK6rC,QAAQO,SADe,MAA5BpsC,KAAKyU,UAAU43B,WAAiD,IAA5BrsC,KAAKyU,UAAU43B,UAC3B,gCAGArsC,KAAKyU,UAAU43B,YAInDC,gBACItsC,KAAKwW,aAAaS,WAAWjX,KAAKyU,UAAUY,GAAIrV,KAAKyU,WAAWjR,UAC3DwoB,IAAehsB,KAAKJ,eAAeW,yBAAyB,4CAA6C,QAAS,YAClHoI,IAAY3I,KAAKJ,eAAeW,yBAAyB,4BAA6B,QAAS,UAChG,KAAQP,KAAK8rC,8DA9BZF,GAAsB3pC,sDAAtB2pC,EAAsBxnB,8qBCpBnCniB,sBAA2B,sBAA3BA,CAA2B,mBAA3BA,CAA2B,OAA3BA,CAA2B,cAIDA,yBAAaA,QAAYA,0BACvCA,YAKRA,8BAA2C,UAA3CA,CAA2C,UAA3CA,CAA2C,gBAA3CA,CAA2C,QAKvBA,kBACJA,QACAA,kBAAgC,YAAhCA,CAAgC,SAEpBA,UAA0CA,QAC9CA,eAAIA,UAAoBA,gBAMxCA,kBAAkB,gBAAlBA,CAAkB,uBAAlBA,CAAkB,oBAAlBA,CAAkB,YAI2BA,8BAAiBA,YAGtDA,+BAA2C,WAA3CA,CAA2C,YAA3CA,CAA2C,uBAA3CA,CAA2C,eAIcA,oEAAzCA,YAGRA,mBAAkB,uBAAlBA,CAAkB,eAE8BA,mEAAxCA,cAIZA,kBAAuF,uBAAvFA,CAAuF,eAEvCA,mEAAxCA,cAKZA,gCAAiC,gBACYA,gCAASwkB,oBAC9CxkB,qBAAUA,iBAAIA,QAAYA,6BAC9BA,kBAUpBA,gCACIA,kBAGJA,iBAvDyBA,oDAIGA,iEACAA,mCAiB6CA,kDAKDA,gDAMJA,stBD5B3D2pC,GAAb,6BEJoB3pC,wBAAgFA,SAAkBA,kCAAzCA,oBAAuBA,kDAOhFA,wBAAmEA,SAAgBA,kCAArCA,oBAAqBA,kDAOnEA,wBAAuFA,SAAuBA,kCAAnDA,oBAA4BA,kDAOvFA,wBAAoEA,SAAcA,kCAAjCA,oBAAmBA,+CAkBxEA,iBAA8DA,0BAAaA,mCAC3EA,iBAAwCA,SAAiBA,kCAAjBA,uDAIxCA,iBAA8DA,qBAAQA,kDACtEA,iBAAuC,WAAvCA,CAAuC,eAEKA,mEAASsqC,oBACzCtqC,uBAAuDA,gBAAIA,UAE/DA,qBAAoCA,mEAASgtB,uBACzChtB,uBAAwDA,uCAA2BA,UAEvFA,qBAAoCA,mEAAS+3B,0BACzC/3B,uBAA2DA,0BAAaA,qCAMxFA,uCACAA,sDCrDL,IAAMuqC,GAAb,MAAM,QA2BF3sC,YAAoB+e,EAA8DlU,EAAgDkP,EAA+BvI,EAAwByO,EAAoDlgB,GAAzNI,iCAA8DA,0BAAgDA,aAA+BA,cAAwBA,4BAAoDA,sBAzB7OA,kBAAuB,GACvBA,wBAAqB,KACrBA,6BAAkC,GAClCA,sBAAmB,KACnBA,6BAA0B,KAC1BA,4BAAyB,KAEzBA,mBAAwB,GACxBA,gBAAqB,EACrBA,cAAmB,EACnBA,wBAAkC,GAElCA,eAAmB,GACnBA,qBAAyB,GACzBA,oBAAwB,GACxBA,kBAAsB,GAEtBA,sBAA6B,CAAC,OAAQ,WACtCA,wBAAiC,IAAIgK,EACrChK,uBAA2B,GAE3BA,uBAAoC,GAEpCA,oBAAyB,GAKzB4kB,WAEI5kB,KAAK4e,0BAA0B5B,uBAAuB,MAAMxZ,UAAWuU,IACnE/X,KAAKu2B,mBAAqBxe,EAC1B,IAAI00B,EAAczsC,KAAK4e,0BAA0BM,iBAC9B,MAAfutB,GACAzsC,KAAKy2B,kBAAkBgW,KAKnCtQ,iBAAiB3rB,GACbxQ,KAAK42B,cAAgBpmB,EACrBxQ,KAAKwtB,WAAa,EAClBxtB,KAAK6b,SAAW,EAChB7b,KAAK22B,mCAAmC32B,KAAKwtB,WAAYxtB,KAAK6b,SAAU7b,KAAK42B,eAIjFH,kBAAkBgW,GACdzsC,KAAK4e,0BAA0BK,eAAe,MAE9Cjf,KAAK4e,0BAA0BC,0BAA0B,KAAM4tB,EAAY3tB,cAActb,UAAWuU,IAChG/X,KAAKo3B,aAAerf,EAAI,GAAGqf,aAC3B,IAAIgB,EAAanuB,KAAKC,MAAMlK,KAAKo3B,cAGjCp3B,KAAKs3B,mBAAqBmV,EAAY3tB,aACtC9e,KAAK0sC,wBAA0BD,EAAY9T,UAG3C34B,KAAKw3B,iBAAmBiV,EAAYrL,WACpChJ,EAAWb,UAAYa,EAAWb,UAAU9d,OAAOkG,GAAWA,EAAQ8X,oBAAsBz3B,KAAKw3B,kBAGjGx3B,KAAK23B,wBAA0B8U,EAAYE,0BAC3CvU,EAAWb,UAAUtf,QAAQ3C,IACzBA,EAAEoiB,gBAAkBpiB,EAAEoiB,gBAAgBje,OAAOrE,GAAMA,EAAGwiB,2BAA6B53B,KAAK23B,2BAG5F33B,KAAK+3B,uBAAyB0U,EAAYG,wCAC1CxU,EAAWb,UAAUtf,QAAQ3C,IACzBA,EAAEoiB,gBAAgBzf,QAAQ7C,IACtBA,EAAGyiB,eAAiBziB,EAAGyiB,eAAepe,OAAOqe,GAAMA,EAAGE,0BAA4Bh4B,KAAK+3B,4BAI/F/3B,KAAKi4B,wBAAwBG,KAMrCF,oBAEIl4B,KAAK0sC,wBAA0B1sC,KAAKu2B,mBAAmBzvB,KAAK+lC,GAAQA,EAAKx3B,IAAMrV,KAAKs3B,oBAAoBnoB,KACxGnP,KAAK4e,0BAA0BC,0BAA0B,KAAM7e,KAAKs3B,oBAAoB9zB,UAAWuU,IAC/F/X,KAAKo3B,aAAerf,EAAI,GAAGqf,aAC3Bp3B,KAAKi4B,wBAAwBhuB,KAAKC,MAAMlK,KAAKo3B,eAC7Cp3B,KAAKw3B,iBAAmB,KACxBx3B,KAAK23B,wBAA0B,KAC/B33B,KAAK+3B,uBAAyB,OAItCI,kBAEI,IAAIC,EAAanuB,KAAKC,MAAMlK,KAAKo3B,cAGJ,MAAzBp3B,KAAKw3B,mBACLY,EAAWb,UAAYa,EAAWb,UAAU9d,OAAOkG,GAAWA,EAAQ8X,oBAAsBz3B,KAAKw3B,mBAIrGx3B,KAAK23B,wBAA0B,KAC/B33B,KAAK+3B,uBAAyB,KAC9B/3B,KAAKi4B,wBAAwBG,GAGjCC,wBAEI,IAAID,EAAanuB,KAAKC,MAAMlK,KAAKo3B,cAEJ,MAAzBp3B,KAAKw3B,mBACLY,EAAWb,UAAYa,EAAWb,UAAU9d,OAAOkG,GAAWA,EAAQ8X,oBAAsBz3B,KAAKw3B,mBAGjE,MAAhCx3B,KAAK23B,yBACLS,EAAWb,UAAUtf,QAAQ3C,IACzBA,EAAEoiB,gBAAkBpiB,EAAEoiB,gBAAgBje,OAAOrE,GAAMA,EAAGwiB,2BAA6B53B,KAAK23B,2BAIhG33B,KAAK+3B,uBAAyB,KAE9B/3B,KAAKi4B,wBAAwBG,GAGjCE,uBAEI,IAAIF,EAAanuB,KAAKC,MAAMlK,KAAKo3B,cAGJ,MAAzBp3B,KAAKw3B,mBACLY,EAAWb,UAAYa,EAAWb,UAAU9d,OAAOkG,GAAWA,EAAQ8X,oBAAsBz3B,KAAKw3B,mBAGjE,MAAhCx3B,KAAK23B,yBACLS,EAAWb,UAAUtf,QAAQ3C,IACzBA,EAAEoiB,gBAAkBpiB,EAAEoiB,gBAAgBje,OAAOrE,GAAMA,EAAGwiB,2BAA6B53B,KAAK23B,2BAI7D,MAA/B33B,KAAK+3B,wBACLK,EAAWb,UAAUtf,QAAQ3C,IACzBA,EAAEoiB,gBAAgBzf,QAAQ7C,IACtBA,EAAGyiB,eAAiBziB,EAAGyiB,eAAepe,OAAOqe,GAAMA,EAAGE,0BAA4Bh4B,KAAK+3B,4BAKnG/3B,KAAKi4B,wBAAwBG,GAGjCH,wBAAwBM,GAEpBv4B,KAAKu3B,UAAY,GACjBv3B,KAAK03B,gBAAkB,GACvB13B,KAAK63B,eAAiB,GACtB73B,KAAK82B,aAAe,GAEW7sB,KAAKC,MAAMlK,KAAKo3B,cACpCG,UAAUtf,QAAQ3C,IACrBA,EAAEmiB,oBAAsBz3B,KAAKw3B,kBAC7BliB,EAAEoiB,gBAAgBzf,QAAQ7C,IAClBA,EAAGwiB,2BAA6B53B,KAAK23B,yBACrCviB,EAAGyiB,eAAe5f,QAAQ6f,IAEhBA,EAAG3oB,KAAKmqB,cAAcwT,WAAW,MACnC9sC,KAAK63B,eAAe/0B,KAAK,CAAEuS,GAAIyiB,EAAGE,yBAA0B7oB,KAAM2oB,EAAG3oB,SAKjFnP,KAAK03B,gBAAgB50B,KAAK,CAAEuS,GAAID,EAAGwiB,0BAA2BzoB,KAAMiG,EAAGjG,SAI/EnP,KAAKu3B,UAAUz0B,KAAK,CAAEuS,GAAIC,EAAEmiB,mBAAoBtoB,KAAMmG,EAAEnG,SAG5DopB,EAAkBhB,UAAUtf,QAAQ0H,IAChCA,EAAQ+X,gBAAgBzf,QAAQ7C,IAC5BA,EAAGyiB,eAAe5f,QAAQ6f,IACtBA,EAAGU,SAASvgB,QAAQwgB,IACVA,EAAKtpB,KAAKmqB,cAAcwT,WAAW,MAErC9sC,KAAK82B,aAAah0B,KAAK,CACnBuS,GAAIojB,EAAKC,mBACTvpB,KAAMspB,EAAKtpB,KACXme,UAAU,EACVI,SAAU,CACNrY,GAAI,KACJyJ,aAAc9e,KAAKs3B,mBACnBqB,UAAW34B,KAAK0sC,wBAChB9T,oBAAqBH,EAAKC,mBAC1B0I,WAAYzhB,EAAQ8X,mBACpB9X,QAASA,EAAQxQ,KACjBw9B,0BAA2Bv3B,EAAGwiB,0BAC9BiB,uBAAwBzjB,EAAGjG,KAC3By9B,wCAAyC9U,EAAGE,yBAC5Cc,qCAAsChB,EAAG3oB,KACzC4pB,6CAA8CN,EAAKtpB,KACnD6pB,UAAU,EACVC,cAAe,KACfC,4BAA6BvZ,EAAQ8X,8BASjEz3B,KAAK82B,aAAaqC,KAAK,CAACC,EAAGC,IAAMD,EAAEjqB,KAAKmqB,cAAgBD,EAAElqB,KAAKmqB,cAAgB,EAAIF,EAAEjqB,KAAKmqB,gBAAkBD,EAAElqB,KAAKmqB,cAAgB,GAAI,GACvIt5B,KAAK63B,eAAesB,KAAK,CAACC,EAAGC,IAAMD,EAAEjqB,KAAKmqB,cAAgBD,EAAElqB,KAAKmqB,cAAgB,EAAIF,EAAEjqB,KAAKmqB,gBAAkBD,EAAElqB,KAAKmqB,cAAgB,GAAI,GAEzIt5B,KAAK22B,mCAAmC32B,KAAKwtB,WAAYxtB,KAAK6b,SAAU7b,KAAK42B,eAGjFD,mCAAmC9rB,EAAcgR,EAAkBQ,GAE/D,IAAI2R,EAAShuB,KAAK0K,mBAAmBC,gBAAgB3K,KAAK82B,aAAard,OAAOnB,GAAKA,EAAEnJ,KAAKke,oBAAoBlE,SAAS9M,EAAOgR,sBAAuBxiB,EAAKhF,WAAYgW,GACtK7b,KAAK+sC,mBAAqB/e,EAAOhkB,WACjChK,KAAKgtC,kBAAoB,GACzBhtC,KAAKgtC,kBAAoBhf,EAAOtiB,KAGpCuhC,2BAA2B3zB,GACvBtZ,KAAKwtB,WAAalU,EAAEyR,UAAY,EAChC/qB,KAAK6b,SAAWvC,EAAEuC,SAClB7b,KAAK22B,mCAAmC32B,KAAKwtB,WAAYxtB,KAAK6b,SAAU7b,KAAK42B,eAGjFsW,eAAephB,GACX,IAAIqhB,EAAyBrhB,EAAK4B,SAASiL,UAC3C7M,EAAK4B,SAASiL,UAAY,KAC1B34B,KAAK4e,0BAA0BO,uBAAuB,MACtDnf,KAAK4e,0BAA0BG,oBAAoB+M,EAAK4B,UAAUlqB,UAAUuU,IACxE,IAAIyhB,EAAoCzhB,EAAIhD,KAC5C+W,EAAK4B,SAASiL,UAAYwU,EAC1BntC,KAAK4e,0BAA0BU,mBAAmBka,EAAgBnkB,IAAI7R,UAAUuU,IAErD,MADiBA,GAEpC/X,KAAK4e,0BAA0BO,uBAFKpH,GAIxC/X,KAAK4e,0BAA0BK,eAAe6M,EAAK4B,UACnD1tB,KAAKqR,OAAOyE,SAAS,CAAC,yBAKlCs3B,kBAAkBthB,GACd9rB,KAAK8f,qBAAqBC,qBAAqB,EAAG,IAAIvc,UAAWuU,IAC7D/X,KAAK0qB,kBAAoB3S,EAAIhD,KAAK4V,aAClCmB,EAAK4B,SAASiL,UAAY,KAC1B34B,KAAK4e,0BAA0BG,oBAAoB+M,EAAK4B,UAAUlqB,UAAUuU,IACxE,IAAIyhB,EAAoCzhB,EAAIhD,KAC5C/U,KAAK0qB,kBAAkBzS,QAAQ0S,IAC3B3qB,KAAK8f,qBAAqBK,kBAAkB3c,UAAUuU,IAElD/X,KAAK8f,qBAAqBc,mBAAmB+J,EAAa7a,OAAQ0pB,EAAgBnkB,GAD/B0C,EAAIhD,KACoDgX,eAAevoB,UACrHwoB,IACGhsB,KAAKJ,eAAeW,yBAAyB,gCAAkCi5B,EAAgBT,6CAA+C,UAAW,QAAS,YAErKpwB,IAAY3I,KAAKJ,eAAeW,yBAAyB,4BAA6B,QAAS,aAGxGP,KAAK8f,qBAAqBK,kBAAkB3c,UAAUuU,IAElD/X,KAAK8f,qBAAqBe,sBAAsB8J,EAAa7a,OAAQ0pB,EAAgBnkB,GADlC0C,EAAIhD,KACuDgX,eAAevoB,UACxHwoB,IACGhsB,KAAKJ,eAAeW,yBAAyB,gCAAkCi5B,EAAgBT,6CAA+C,UAAW,QAAS,YAErKpwB,IAAY3I,KAAKJ,eAAeW,yBAAyB,4BAA6B,QAAS,mBAQxH8sC,qBAAqBvhB,GACjB9rB,KAAK8f,qBAAqBC,qBAAqB,EAAG,IAAIvc,UAAWuU,IAC7D/X,KAAK0qB,kBAAoB3S,EAAIhD,KAAK4V,aAClCmB,EAAK4B,SAASiL,UAAY,KAC1B34B,KAAK4e,0BAA0BG,oBAAoB+M,EAAK4B,UAAUlqB,UAAUuU,IACxE,IAAIyhB,EAAoCzhB,EAAIhD,KAC5C/U,KAAK0qB,kBAAkBzS,QAAQ0S,IAC3B3qB,KAAK8f,qBAAqBK,kBAAkB3c,UAAUuU,IAElD/X,KAAK8f,qBAAqBU,kBAAkBmK,EAAa7a,OAAQ0pB,EAAgBnkB,GAD9B0C,EAAIhD,KACmDgX,eAAevoB,UACpHwoB,IACGhsB,KAAKJ,eAAeW,yBAAyB,mCAAqCi5B,EAAgBT,6CAA+C,UAAW,QAAS,YAExKpwB,IAAY3I,KAAKJ,eAAeW,yBAAyB,4BAA6B,QAAS,aAGxGP,KAAK8f,qBAAqBK,kBAAkB3c,UAAUuU,IAElD/X,KAAK8f,qBAAqBa,qBAAqBgK,EAAa7a,OAAQ0pB,EAAgBnkB,GADjC0C,EAAIhD,KACsDgX,eAAevoB,UACvHwoB,IACGhsB,KAAKJ,eAAeW,yBAAyB,mCAAqCi5B,EAAgBT,6CAA+C,UAAW,QAAS,YAExKpwB,IAAY3I,KAAKJ,eAAeW,yBAAyB,4BAA6B,QAAS,iEAjT/GisC,GAAsBvqC,wFAAtBuqC,EAAsBpoB,k9CDxBnCniB,sBAA2B,sBAA3BA,CAA2B,mBAA3BA,CAA2B,OAA3BA,CAA2B,cAIDA,yBAAaA,QAAYA,qBACvCA,UAEJA,0BAAgB,QACRA,SAAkBA,UAE1BA,gCACJA,QACAA,+BAA2C,WAA3CA,CAA2C,sBAA3CA,CAA2C,mBAGKA,kEAAgC,oCAAoBwkB,wBACpFxkB,gCACJA,UAGJA,6BAAuB,mBACeA,gEAA8B,oCAAoBwkB,sBAChFxkB,yBAA2BA,iBAAIA,QAC/BA,gCACJA,UAGJA,6BAAuB,oBACuBA,0CAAmBwkB,2BAAnBxkB,CAA2C,iEACjFA,yBAA2BA,iBAAIA,QAC/BA,gCACJA,UAGJA,6BAAuB,oBACqBA,0CAAmBwkB,0BAAnBxkB,CAA0C,gEAC9EA,yBAA2BA,iBAAIA,QAC/BA,gCACJA,YAIRA,mBAA8B,YAA9BA,CAA8B,SAA9BA,CAA8B,4BAIkCA,iCAASwkB,wBAC7DxkB,YAKZA,qBAEIA,aACIA,yBACAA,yBACJA,QAEAA,aACIA,yBACAA,0BAaJA,QAEAA,yBACAA,yBACJA,QAEAA,6BACoDA,gCAAQwkB,kCAC5DxkB,qBA1EQA,iCAEwCA,2CAKJA,+CACEA,+CAKJA,6CAClBA,6BACoBA,sCAKkDA,oDACtEA,6BAC2BA,4CAKwCA,mDACnEA,6BACkBA,2CAeUA,iDAwB5BA,qDACaA,sDAGtBA,gEAAgD,0CAAhDA,CAAgD,cAAhDA,CAAgD,4MCxD1DuqC,GAAb,GCxBM,UCwBC,IAAMc,GAAb,MAAM,QAoBFztC,YAAoB+e,EAA8DvN,EAAwBoT,GAAtFzkB,iCAA8DA,cAAwBA,sBAjB1GA,oBAAyB,GAKzBA,aAAU,IAAI2vB,KAAY,CAAEnf,MAAO,GAAIwoB,UAAU,IACjDh5B,4BAAyB,IAAI2vB,KAAY,CAAEnf,MAAO,GAAIwoB,UAAU,IAChEh5B,0CAAuC,IAAI2vB,KAAY,CAAEnf,MAAO,GAAIwoB,UAAU,IAC9Eh5B,yBAAsB,IAAI2vB,KAAY,CAAEnf,MAAO,GAAIwoB,UAAU,IAC7Dh5B,iCAA8B,IAAI2vB,KAAY,CAAEnf,MAAO,GAAIwoB,UAAU,IACrEh5B,oBAAiB,IAAI2vB,KAAY,CAAEnf,MAAO,GAAIwoB,UAAU,IAGxDh5B,0BAA8B,GAC9BA,oBAAwB,GACxBA,4BAAmD,IAAIutC,GAKvD3oB,WACI,IAAIlZ,EAAO1L,KAAK4e,0BAA0BM,iBAC1Clf,KAAKof,gBAAkBpf,KAAK4e,0BAA0BS,yBACtDrf,KAAKwtC,cAAc9hC,GACnB1L,KAAKm7B,qBAAuB,GACA,MAAxBn7B,KAAKof,iBAAuE,MAA5Cpf,KAAKof,gBAAgBquB,sBACrDztC,KAAKm7B,qBAAqBr4B,KAAK,CAC3BuS,GAAIrV,KAAKof,gBAAgBsuB,sBACzBnuB,WAAYvf,KAAKof,gBAAgBquB,oBACjCt+B,KAAMnP,KAAKof,gBAAgBuuB,sBAC3BrgB,UAAU,IAEdttB,KAAK4tC,eAAe9qC,KAAK,CAAEyc,WAAYvf,KAAKof,gBAAgBquB,sBAC5DztC,KAAKi3B,uBAAuBE,sBAAwBn3B,KAAKof,gBAAgByuB,8BACzE7tC,KAAKi3B,uBAAuBO,iBAAmBx3B,KAAKof,gBAAgB0uB,yBACpE9tC,KAAKi3B,uBAAuBU,wBAA0B33B,KAAKof,gBAAgB2uB,gCAC3E/tC,KAAKi3B,uBAAuBc,uBAAyB/3B,KAAKof,gBAAgB4uB,gCAIlFR,cAAc9hC,GACV1L,KAAKiuC,eAAiB,wBAA0BviC,EAAKqtB,6CACrD/4B,KAAKi3B,uBAAuBC,sBAAwBxrB,EAAKoT,aACzD9e,KAAKkuC,eAAenc,SAASrmB,EAAKitB,WAClC34B,KAAK2f,QAAQoS,SAASrmB,EAAKiU,SAC3B3f,KAAK64B,uBAAuB9G,SAASrmB,EAAKmtB,wBAC1C74B,KAAK84B,qCAAqC/G,SAASrmB,EAAKotB,sCACxD94B,KAAK44B,oBAAoB7G,SAASrmB,EAAKktB,qBACvC54B,KAAKk5B,4BAA4BnH,SAASrmB,EAAKwtB,6BAGnDiV,WACInuC,KAAKqR,OAAOyE,SAAS,CAAC,kBAG1Bs4B,eACQpuC,KAAK4tC,eAAe3qC,OAAS,EAC7BjD,KAAKykB,eAAelkB,yBAAyB,6CAA8C,QAAS,UAGpGP,KAAKof,gBAAgBquB,oBADgB,GAA9BztC,KAAK4tC,eAAe3qC,OACgBjD,KAAK4tC,eAAe,GAAGruB,WAEvB,KAE/Cvf,KAAK4e,0BAA0BY,mBAAmBxf,KAAKof,iBAAiB5b,UACnEwoB,IACGhsB,KAAKykB,eAAelkB,yBAAyB,mDAAoD,QAAS,WAC1GP,KAAKqR,OAAOyE,SAAS,CAAC,mBAEzBnN,IAAY3I,KAAKykB,eAAelkB,yBAAyB,4BAA6B,QAAS,YAIxGu7B,aAAahQ,GACT9rB,KAAK4tC,eAAe9qC,KAAK,CAAEyc,WAAYuM,EAAKzW,KACxCrV,KAAK4tC,eAAe3qC,OAAS,GAC7BjD,KAAKykB,eAAelkB,yBAAyB,6CAA8C,QAAS,SAK5Gw7B,gBAAgBjQ,GACZ9rB,KAAK4tC,eAAiB5tC,KAAK4tC,eAAen0B,OAAOnB,GAAKA,EAAEiH,YAAcuM,EAAKvM,0DArFtE+tB,GAAyBrrC,wDAAzBqrC,EAAyBlpB,k4BCxBtCniB,sBAA2B,sBAA3BA,CAA2B,mBAA3BA,CAA2B,OAA3BA,CAA2B,cAIDA,yBAAaA,QAAYA,6BACvCA,QACAA,cACIA,SACJA,UAEJA,+BACJA,QACAA,+BAA2C,WAERA,4BAAeA,QAE9CA,kBAAuF,uBAE/EA,oBACJA,QACAA,6BACIA,oBACJA,QACAA,6BACIA,oBACJA,QACAA,6BACIA,qBACJA,UAEJA,kBAAuF,uBAE/EA,qBACJA,QACAA,6BACIA,qBACJA,UAGJA,iBAA+BA,6BAAgBA,QAE/CA,mBAAkC,2BACXA,4EAA0C,wCAAuBwkB,mBAAjExkB,CAA0C,2CACpCwkB,uBACzBxkB,YAIRA,gCAAiC,WAAjCA,CAAiC,gBAEgBA,gCAASwkB,mBAC9CxkB,qBAAUA,iBAAIA,QAAWA,mCAC7BA,QACAA,sBAAyCA,gCAASwkB,eAC9CxkB,qBAAUA,mBAAMA,QAAYA,qBAChCA,qBAhDIA,yCAGwCA,yCAQAA,+CAGFA,wCAGOA,uDAGDA,qEAKQA,oDAGNA,4DAO/BA,yDAA0C,6JDlB5DqrC,GAAb,6BEXgBrrC,yBAAgFA,SAAkBA,kCAAzCA,oBAAuBA,kDAOhFA,yBAAgEA,SAAWA,kCAA7BA,iBAAkBA,6CAOhEA,yBAAoFA,SAAkBA,kCAA3CA,iBAAyBA,6CAOpFA,yBAAiEA,SAASA,kCAAzBA,iBAAgBA,0CAkBjEA,iBAA8DA,0BAAaA,mCAC3EA,iBAAwCA,SAAyDA,kCAAzDA,+FAIxCA,iBAA8DA,qBAAQA,kDACtEA,iBAAuC,WAAvCA,CAAuC,oBAAvCA,CAAuC,yBAMTA,mDAAUsqC,oBAA0CtqC,0CAAlBA,iDAMpEA,uCACAA,sDCpDL,IAAMosC,GAAb,MAAM,QAwBFxuC,YACWssB,EACyBzgB,EAA0BkT,GADnD5e,iBACyBA,YAA0BA,iCAvB9DA,sBAA0B,GAG1BA,wBAA4B,GAC5BA,eAAmB,GACnBA,qBAAyB,GACzBA,oBAAwB,GAExBA,mBAAwB,GACxBA,sBAA6B,CAAC,OAAQ,QACtCA,wBAAiC,IAAIgK,EACrChK,uBAA2B,GAI3BA,wBAA6B,EAW7B4kB,WAEI5kB,KAAK4e,0BAA0B5B,uBAAuB,MAAMxZ,UAAWuU,IACnE/X,KAAKu2B,mBAAqBxe,IAE9B/X,KAAKsuC,2BAGTpW,kBAAkBpM,GAEd,IAAIyiB,EAAgBvuC,KAAKyZ,OAAOA,OAAO2R,GAAKA,EAAEojB,cAAgBxuC,KAAKs3B,oBACnEt3B,KAAKu3B,UAAY6F,UAASmR,EAAe,WAAWz2B,IAAI22B,GAAcA,EAAEC,SAExE1uC,KAAK6K,KAAO,KACZ7K,KAAK6b,SAAW,KAChB7b,KAAKw3B,iBAAmB,KACxBx3B,KAAK23B,wBAA0B,KAC/B33B,KAAK+3B,uBAAyB,KAC9B/3B,KAAK42B,cAAgB,GAErB52B,KAAKsuC,2BAETnW,kBAEI,IAAIwW,EAAe3uC,KAAKyZ,OAAOA,OAAO2R,GAAKA,EAAEojB,cAAgBxuC,KAAKs3B,oBAAqB7d,OAAO1S,GAAKA,EAAE2nC,SAAW1uC,KAAKw3B,kBACrHx3B,KAAK03B,gBAAkB0F,UAASuR,EAAa,0BAA0B72B,IAAI22B,GAAcA,EAAEG,wBAE3F5uC,KAAK6K,KAAO,KACZ7K,KAAK6b,SAAW,KAChB7b,KAAK23B,wBAA0B,KAC/B33B,KAAK+3B,uBAAyB,KAC9B/3B,KAAK42B,cAAgB,GAErB52B,KAAKsuC,2BAGTjW,wBAEI,IAAIwW,EAAsB7uC,KAAKyZ,OAAOA,OAAO2R,GAAKA,EAAEojB,cAAgBxuC,KAAKs3B,oBAAqB7d,OAAO1S,GAAKA,EAAE2nC,SAAW1uC,KAAKw3B,kBAAmB/d,OAAOq1B,GAAKA,EAAEF,wBAA0B5uC,KAAK23B,yBAC5L33B,KAAK63B,eAAiBuF,UAASyR,EAAmB,wCAAwC/2B,IAAI22B,GAAcA,EAAEM,sCAE9G/uC,KAAK6K,KAAO,KACZ7K,KAAK6b,SAAW,KAChB7b,KAAK+3B,uBAAyB,KAC9B/3B,KAAK42B,cAAgB,GAErB52B,KAAKsuC,2BAGThW,uBAEIt4B,KAAK6K,KAAO,KACZ7K,KAAK6b,SAAW,KAChB7b,KAAK42B,cAAgB,GAErB52B,KAAKsuC,2BAETrB,2BAA2B3zB,GACvBtZ,KAAK6K,KAAOyO,EAAEyR,UAAY,EAC1B/qB,KAAK6b,SAAWvC,EAAEuC,SAClB7b,KAAKsuC,2BAETnS,iBAAiB3rB,GACbxQ,KAAK42B,cAAgBpmB,EACrBxQ,KAAK6K,KAAO,KACZ7K,KAAK6b,SAAW,KAEhB7b,KAAKsuC,2BAGTA,2BAEItuC,KAAK4e,0BAA0Bc,yBAC3B1f,KAAK6K,KACL7K,KAAK6b,SACL7b,KAAKs3B,mBACLt3B,KAAKw3B,iBACLx3B,KAAK23B,wBACL33B,KAAK+3B,uBACL/3B,KAAK42B,eAAepzB,UAAWuU,IAC3B/X,KAAKgtC,kBAAoBj1B,EAAIhD,KAAKi6B,iBAClChvC,KAAK+sC,mBAAqBh1B,EAAIhD,KAAK/K,WACnChK,KAAKyZ,OAASxP,KAAKC,MAAM6N,EAAIhD,KAAK0E,UAG9Cw1B,UACIjvC,KAAKmsB,UAAU5qB,QAGnB2tC,eAAepjB,GACX9rB,KAAKmvC,iBAAmB,GACxBnvC,KAAKmvC,iBAAiBrsC,KAAKgpB,EAAKtb,OAChCxQ,KAAKmsB,UAAU5qB,MAAMvB,KAAKmvC,gEAzHrBd,GAA8BpsC,kBA0B3BoqB,MAAepqB,mCA1BlBosC,EAA8BjqB,oxCDnB3CniB,iBAAsB,UAAtBA,CAAsB,WAEcA,0BAAcA,QACtCA,iBAAyB,cACAA,gCAASwkB,cAC1BxkB,oBAAUA,kBAAMA,gBAKpCA,iBAAoH,qBAApHA,CAAoH,mBAEpEA,kEAAgC,qCAAoBwkB,+BACpFxkB,gCACJA,UAGJA,6BAAuB,mBACeA,gEAA8B,oCAAoBwkB,sBAChFxkB,0BAA2BA,iBAAIA,QAC/BA,gCACJA,UAGJA,6BAAuB,oBACuBA,0CAAmBwkB,2BAAnBxkB,CAA2C,iEACjFA,0BAA2BA,iBAAIA,QAC/BA,gCACJA,UAGJA,6BAAuB,oBACqBA,0CAAmBwkB,0BAAnBxkB,CAA0C,gEAC9EA,0BAA2BA,iBAAIA,QAC/BA,gCACJA,YAIRA,mBAA8B,YAA9BA,CAA8B,SAA9BA,CAA8B,4BAIkCA,iCAASwkB,wBAC7DxkB,YAKRA,qBAEIA,aACIA,yBACAA,yBACJA,QAEAA,aACIA,yBACAA,yBAUJA,QAEAA,yBACAA,yBACJA,QAEAA,6BACoDA,gCAAQwkB,kCAC5DxkB,iBAhEwCA,gDACEA,+CAKJA,6CAClBA,6BACoBA,sCAKkDA,oDACtEA,6BAC2BA,4CAKwCA,mDACnEA,6BACkBA,2CAecA,iDAqB5BA,qDACaA,sDAGtBA,gEAAgD,0CAAhDA,CAAgD,cAAhDA,CAAgD,kMCvD1DosC,GAAb,GChBM,SAANxuC,cAKWG,2BAAgD,kECyBvCiC,iBAA8DA,0BAAaA,mCAC3EA,iBAAwCA,SAAyBA,kCAAzBA,+DAIxCA,iBAA8DA,qBAAQA,kDACtEA,iBAAuC,WAAvCA,CAAuC,eAEKA,2DAASsiB,EAATsK,OAAStK,oBACzCtiB,uBAA4BA,gBAAIA,UAEpCA,qBAAkCA,2DAAS6sB,EAATD,OAASC,sBACvC7sB,uBAA8BA,kBAAMA,qCAMpDA,uCACAA,+FAvCZA,8BAAmE,UAAnEA,CAAmE,cAG5BA,iDAAS8sB,kBACpC9sB,sBAAmCA,eAAGA,YAI9CA,iBAA8B,WAA9BA,CAA8B,QAA9BA,CAA8B,2BAIkCA,kDAAS+sB,sBAC7D/sB,YAIRA,oBAEIA,aACIA,yBACAA,yBACJA,QAEAA,aACIA,yBACAA,yBAUJA,QAEAA,yBACAA,yBACJA,QAEAA,6BACIA,iDAAQgtB,gCACZhtB,oCA3BoDA,4CAqB5BA,qDACaA,sDAGtBA,0DAAyC,cAAzCA,CAAyC,uDAe5CA,uBAAqCA,kBAAMA,kDAF/CA,uBAAwFA,6DAAWooB,EAAXwE,OAAWxE,mBAC/FpoB,SACAA,8BACJA,oCAHiDA,uBAAmB,gBAChEA,uEACyBA,qDAYzBA,gBACIA,SAEJA,+BAFIA,2KAIRA,yBACIA,SACJA,kCAF0CA,iBACtCA,oHA3BpBA,8BAAoE,WAApEA,CAAoE,sBAApEA,CAAoE,cAGbA,mFAA3CA,UAEJA,6BAAuB,2BAEfA,8BAIAA,oBACmCA,iDAAS+qB,eAD5C/qB,UAGJA,qBAAWA,mCAAsBA,UAErCA,8BAAuB,uBACkBA,iFAEjCA,+BACIA,UACAA,2BAIJA,QACAA,iCAGJA,iDA1B2CA,iDAITA,2CAIDA,oCAA4B,qDAA5BA,CAA4B,2BAA5BA,CAA4B,eAMxBA,+CAAgC,+BAG7DA,gHACOA,uFAKgBA,iFAQ3CA,+BAA0D,UAA1DA,CAA0D,eAETA,iDAASutB,gCAC9CvtB,oBAAUA,SAAiCA,QAAYA,SAE3DA,QACAA,qBAAyCA,iDAASmtC,qBAC9CntC,oBAAUA,kBAAMA,QAAYA,oBAChCA,oCALcA,4CAA6CA,uEC7EhE,IAAMotC,GAAb,MAAM,QAoBFxvC,YAAoByvC,EAA0C7qB,EAAwCiL,EAA2B9Q,GAA7G5e,uBAA0CA,sBAAwCA,cAA2BA,iCAlBjIA,oBAAyB,GACzBA,iBAAsB,GACtBA,aAAmB,IAAIshB,GAEvBthB,wBAAiC,IAAIgK,EACrChK,sBAA6B,CAAC,eAAgB,WAC9CA,oBAAwB,GAKxBA,wBAAkC,GAClCA,gBAA0B,GAG1BA,mBAAwB,EACxBA,sBAA2B,EAI3B4kB,WAEI5kB,KAAKuvC,wBAAwB,KAAM,MAIvCC,2BAA2Bl2B,GACvBtZ,KAAKuvC,wBAAwBj2B,EAAEyR,UAAY,EAAGzR,EAAEuC,UAGpD0zB,wBAAwB1kC,EAAcgR,GAElC7b,KAAKsvC,gBAAgBruB,gBAAgBpW,EAAMgR,GAAUrY,UAAWuU,IAC5D/X,KAAKyvC,aAAe13B,EAAIhD,KAAKuM,QAC7BthB,KAAK0vC,mBAAqB33B,EAAIhD,KAAK/K,aAIvChK,KAAKsvC,gBAAgB/tB,cAAc,MAAM/d,UAAUuU,IAC/C/X,KAAKgkC,WAAajsB,EAAI2E,YAI9BizB,iBAAiBn/B,GACbxQ,KAAKm/B,YAAc3uB,EACnBxQ,KAAKsvC,gBAAgBpuB,kBAAkB,KAAMlhB,KAAKm/B,aAAa37B,UAAWuU,IACtE/X,KAAKyvC,aAAe13B,EAAIhD,KAAKuM,QAC7BthB,KAAK0vC,mBAAqB33B,EAAIhD,KAAK/K,aAI3C4lC,gBAEI5vC,KAAK6vC,eAAiB,6CACtB7vC,KAAK2xB,iBAAkB,EAG3Bme,eAAeC,GAEX/vC,KAAK6vC,eAAiB,iBAAmBE,EAAiBC,aAE1DhwC,KAAKshB,QAAUyuB,EAGf/vC,KAAKiwC,eAAentC,KAAK9C,KAAKshB,QAAQsa,SAEtC57B,KAAKsvC,gBAAgBpuB,kBAAkB,KAAM,IAAI1d,UAAU,KAEvDxD,KAAKshB,QAAQ4uB,sBAAsBj4B,QAAQiQ,IACvCloB,KAAKmwC,UAAUh7B,QAAQ8C,QAAQK,IACvBA,EAAE9H,MAAMV,OAAOhK,gBAAkBoiB,EAAIgY,aAAap6B,eAClDwS,EAAE83B,eAOlBpwC,KAAKkyB,cAAe,EACpBlyB,KAAK2xB,iBAAkB,EAE3B0e,iBAAiBN,GAEK/vC,KAAK0vB,OAAO/uB,KAAKurB,EAA8B,CAC7DxgB,KAAM,CAAEwd,MAAO,WAAYkJ,KAAM,mCAAqC2d,EAAiBC,aAAe,OAGhG3d,cAAc7uB,UAAUgC,IAChB,GAAVA,GAEAxF,KAAKsvC,gBAAgBjuB,cAAc0uB,GAAkBvsC,UAChDwoB,IAAehsB,KAAKykB,eAAelkB,yBAAyBwvC,EAAiBC,aAAe,iCAAkC,QAAS,YACvIrnC,IAAY3I,KAAKykB,eAAelkB,yBAAyB,4BAA6B,QAAS,UAChG,KAAQP,KAAKswC,uBAS7BC,aACsBvwC,KAAK0vB,OAAO/uB,KAAK0tC,GAAgC,CAC/DlI,OAAQ,QACRC,MAAO,UAGD/T,cAAc7uB,UAAUgC,IAChBmH,MAAVnH,IACAxF,KAAKiwC,eAAiBzqC,GAE1BxF,KAAKwwC,SAASC,aAAazwC,KAAKiwC,eAAehtC,OAAS,KAIhEytC,cAAc9U,GACV,MAAM5kB,EAAQhX,KAAKiwC,eAAe3pB,QAAQsV,GAEtC5kB,GAAS,GACThX,KAAKiwC,eAAezoC,OAAOwP,EAAO,GAGtChX,KAAKwwC,SAASC,WAA2C,GAA9BzwC,KAAKiwC,eAAehtC,OAMnD0tC,8BACI,GAAI3wC,KAAKiwC,eAAehtC,OAAS,EAAG,CAEhCjD,KAAKshB,QAAQ/B,WAAavf,KAAKiwC,eAAe,GAAG56B,GAEjD,IAAIu7B,EAA2B,GAC/B5wC,KAAKy/B,mBAAmBxnB,QAAQmT,IAC5BwlB,EAAkB9tC,KAAK,CAAE+tC,WAAY7wC,KAAKshB,QAAQjM,GAAI6qB,aAAc9U,EAAEtb,WAE1E9P,KAAKshB,QAAQ4uB,sBAAwBU,EAEjC5wC,KAAKkyB,aACLlyB,KAAKsvC,gBAAgBnuB,WAAWnhB,KAAKshB,SAAS9d,UACzCwoB,IAAehsB,KAAKykB,eAAelkB,yBAAyB,4CAA6C,QAAS,YAClHoI,IAAY3I,KAAKykB,eAAelkB,yBAAyB,4BAA6B,QAAS,UAChG,KAAQP,KAAKswC,qBAIjBtwC,KAAKsvC,gBAAgBnuB,WAAWnhB,KAAKshB,SAAS9d,UACzCwoB,IAAehsB,KAAKykB,eAAelkB,yBAAyB,0CAA2C,QAAS,YAChHoI,IAAY3I,KAAKykB,eAAelkB,yBAAyB,4BAA6B,QAAS,UAChG,KAAQP,KAAKswC,0BAKrBtwC,KAAKwwC,SAASC,YAAa,EAInCH,mBACItwC,KAAK2xB,iBAAkB,EACvB3xB,KAAKkyB,cAAe,EACpBlyB,KAAK6vC,eAAiB,GACtB7vC,KAAKm/B,YAAc,GACnBn/B,KAAKshB,QAAU,IAAIA,GACnBthB,KAAKiwC,eAAiB,GAEtBjwC,KAAKuvC,wBAAwB,KAAM,oDA1K9BF,GAAiBptC,kEAAjBotC,EAAiBjrB,25DDrB9BniB,sBAA2B,sBAA3BA,CAA2B,mBAA3BA,CAA2B,OAA3BA,CAA2B,cAIDA,eAAGA,QAAYA,qBAC7BA,UAEJA,0BAAgB,QACRA,SAAkBA,UAE1BA,gCACJA,QAEAA,uCAgDAA,wCAkCAA,uCAWJA,eAlGgBA,iCAEwCA,oCAGRA,yCAgDAA,0CAkCVA,wQC1EzBotC,GAAb,GChBM,SAANxvC,cAMWG,cAA2B,2BCuBlBiC,iBAA8DA,uBAAUA,mCACxEA,iBAAwCA,SAAiBA,kCAAjBA,uDAIxCA,iBAA8DA,kBAAKA,mCACnEA,iBAAwCA,SAAsBA,kCAAtBA,4DAIxCA,iBAA8DA,qBAAQA,kDACtEA,iBAAuC,WAAvCA,CAAuC,eAEKA,2DAAS2qB,EAATiC,OAASjC,iBACzC3qB,uBAA4BA,gBAAIA,UAEpCA,qBAAkCA,2DAASsqC,EAAT1d,OAAS0d,mBACvCtqC,uBAA8BA,kBAAMA,qCAMpDA,uCACAA,+FA7CZA,8BAAmE,UAAnEA,CAAmE,cAG5BA,iDAASgtB,eACpChtB,sBAAgCA,eAAGA,YAI3CA,iBAA8B,WAA9BA,CAA8B,QAA9BA,CAA8B,2BAI+BA,kDAASg4B,mBAE1Dh4B,YAIRA,oBAEIA,aACIA,yBACAA,yBACJA,QAEAA,aACIA,yBACAA,yBACJA,QAEAA,aACIA,yBACAA,yBAUJA,QAEAA,yBACAA,yBACJA,QAEAA,6BACIA,iDAAQi4B,6BACZj4B,oCAhCoDA,wDA0B5BA,sDACaA,sDAGtBA,uDAAsC,cAAtCA,CAAsC,uDAY7CA,qBAAgDA,kCAAsBA,mCAKlEA,yBAAwEA,SACxEA,kCADiDA,oBAAuBA,sDAG5EA,qBAAmDA,mCAAuBA,kDAd1FA,8BAAoE,YAApEA,CAAoE,WAApEA,CAAoE,uBAKpDA,oBACAA,+BACJA,QAEAA,6BAAuB,mBAEfA,gCAEJA,QACAA,+BACJA,YAIRA,kBAA+BA,0BAAaA,QAE5CA,mBAAkC,2BAEXA,2FAA0C,yDAAuBotB,iBAAjEptB,CAA0C,4DAChCqtB,qBAAyBrtB,oCAtBlCA,uCAIAA,sDAK0BA,uCAG1BA,yDASDA,mGAK3BA,+BAA0D,UAA1DA,CAA0D,eAETA,iDAASstB,6BAC9CttB,oBAAUA,SAAiCA,QAAYA,SAE3DA,QACAA,qBAAyCA,iDAAS2wB,kBAC9C3wB,oBAAUA,kBAAMA,QAAYA,oBAChCA,oCALcA,4CAA6CA,iEC9EhE,IAAM6uC,GAAb,MAAM,QAkBFjxC,YAAoBkxC,EAA0DtsB,EAAwCiL,GAAlG1vB,+BAA0DA,sBAAwCA,cAdtHA,iBAAsB,GACtBA,iBAAsB,GAGtBA,6BAAgC,IAAI6hB,GACpC7hB,mBAAgC,GAChCA,qBAA8B,IAAIgK,EAClChK,0BAA8B,GAC9BA,sBAA6B,CAAC,OAAQ,OAAQ,QAG9CA,mBAAwB,EACxBA,sBAA2B,EAIrB4kB,+DAEI5kB,KAAKgxC,eAAe,KAAM,KAAM,IAEtChxC,KAAKixC,iBAAgCjxC,KAAK+wC,wBAAwBjvB,cAAc,MAAM4d,cAGpFsR,eAAep6B,EAAqB9L,EAAmBuR,iDACzD,IAAI2P,QAAiBhsB,KAAK+wC,wBAAwBtvB,2BAA2B7K,EAAa9L,EAAWuR,EAAQ,MAAMqjB,YACnH1/B,KAAK++B,yBAA2B/S,EAASjX,KAAK8M,KAC9C7hB,KAAKkxC,gBAAkBllB,EAASjX,KAAK/K,aAGnCmnC,wBAAwB73B,uDACpBtZ,KAAKgxC,eAAe13B,EAAEyR,UAAY,EAAGzR,EAAEuC,SAAU7b,KAAKm/B,eAG1DiS,cAAc5gC,iDAChBxQ,KAAKm/B,YAAc3uB,QACbxQ,KAAKgxC,eAAe,KAAM,KAAMhxC,KAAKm/B,eAGzCkS,2DAEFrxC,KAAKsxC,YAAc,qDACnBtxC,KAAK2xB,iBAAkB,QAEjB3xB,KAAKuxC,YAAY,IAAI1vB,MAGzB2vB,YAAY5R,iDAEd5/B,KAAKsxC,YAAc,iBAAmB1R,EAAczwB,KACpDnP,KAAKyxC,wBAA0B7R,EAG/B5/B,KAAKm7B,qBAAuB,GAC5ByE,EAAcpH,SAASvgB,QAAQiQ,IAC3BloB,KAAKm7B,qBAAqBr4B,KAAKuT,OAAO,CAAEhB,GAAI6S,EAAI0T,QAAQhD,oBAAqBzpB,KAAM+Y,EAAI0T,QAAQ7C,6CAA8CzL,UAAU,EAAM/N,WAAY2I,EAAI3I,cAC7Kvf,KAAK0xC,cAAc5uC,KAAKuT,OAAO,CAAEwpB,QAASD,EAAcvqB,GAAIkK,WAAY2I,EAAI3I,sBAG1Evf,KAAKuxC,YAAY3R,GAGvB5/B,KAAKkyB,cAAe,EACpBlyB,KAAK2xB,iBAAkB,IAGrBggB,cAAc/R,iDAEE5/B,KAAK0vB,OAAO/uB,KAAKurB,EAA8B,CAC7DxgB,KAAM,CAAEwd,MAAO,WAAYkJ,KAAM,mCAAqCwN,EAAczwB,KAAO,OAGrFkjB,cAAc7uB,UAAgBgC,IAASosC,uCAC/B,GAAVpsC,UAEMxF,KAAK+wC,wBAAwBnvB,8BAA8Bge,GAAeF,YAC3E1pB,KAAKgW,IAAchsB,KAAKykB,eAAelkB,yBAAyBq/B,EAAczwB,KAAO,iCAAkC,QAAS,aAChI0iC,MAAOlpC,IAAY3I,KAAKykB,eAAelkB,yBAAyB,4BAA6B,QAAS,iBAErGP,KAAK8xC,sBAKjBP,YAAYQ,iDACd/xC,KAAKgyC,SAAW,IAAIzR,KAAU,CAC1BpxB,KAAM,IAAIwgB,KAAYoiB,EAAU5iC,KAAM,CAACygB,gBACvCqiB,QAAS,IAAItiB,KAAYoiB,EAAUE,QAAS,CAACriB,oBAI/CsiB,yEAQF,GANAlyC,KAAKyxC,wBAAwBtiC,KAAOnP,KAAKgyC,SAAS5xC,IAAI,QAAQoQ,MAC9DxQ,KAAKyxC,wBAAwBQ,QAAUjyC,KAAKgyC,SAAS5xC,IAAI,WAAWoQ,MACpExQ,KAAKyxC,wBAAwBU,KAAO,KACpCnyC,KAAKyxC,wBAAwBjZ,SAAWx4B,KAAK0xC,cAGzC1xC,KAAKgyC,SAASvf,YACRzyB,KAAK+wC,wBAAwBrvB,2BAA2B1hB,KAAKyxC,yBAAyB/R,YACvF1pB,KAAKgW,IAAchsB,KAAKykB,eAAelkB,yBAAyB,4DAA6D,QAAS,aACtIsxC,MAAOlpC,IAAY3I,KAAKykB,eAAelkB,yBAAyB,4BAA6B,QAAS,iBAErGP,KAAK8xC,oBAEV,CACD,MAAM58B,EAAWlV,KAAKgyC,SAAS98B,SAC/BmB,OAAO+pB,KAAKlrB,GAAU+C,QAAQooB,GAAenrB,EAASmrB,GAAa3N,oBAIrEoJ,aAAahQ,iDACf9rB,KAAK0xC,cAAc5uC,KAAKuT,OAAO,CAAEkJ,WAAYuM,EAAKzW,QAGhD0mB,gBAAgBjQ,iDAClB9rB,KAAK0xC,cAAgB1xC,KAAK0xC,cAAcj4B,OAAOnB,GAAKA,EAAEiH,YAAcuM,EAAKvM,cAGvEuyB,8DACF9xC,KAAK2xB,iBAAkB,EACvB3xB,KAAKkyB,cAAe,EACpBlyB,KAAKsxC,YAAc,GACnBtxC,KAAKm/B,YAAc,GACnBn/B,KAAKgyC,SAASrf,QACd3yB,KAAK0xC,cAAgB,GACrB1xC,KAAK++B,yBAA2B,GAChC/+B,KAAKyxC,wBAA0B,IAAI5vB,GACnC7hB,KAAKm7B,qBAAuB,SACtBn7B,KAAK4kB,2DArINksB,GAAiC7uC,yDAAjC6uC,EAAiC1sB,mnDDpB9CniB,sBAA2B,sBAA3BA,CAA2B,mBAA3BA,CAA2B,OAA3BA,CAA2B,cAIDA,oBAAQA,QAAYA,kBAClCA,UAEJA,0BAAgB,QACRA,SAAeA,UAEvBA,gCACJA,QAEAA,uCAsDAA,uCA4BAA,uCAYJA,eAnGgBA,8BAEwCA,oDAGRA,yCAsDAA,0CA4BVA,gQC3EzB6uC,GAAb,GCXasB,EAAb,MAAM,QAEJvyC,YAAoB4X,8BAEpBkC,YAAYC,EAA+BC,GACzC,OAAO7Z,KAAKyX,oBAAoBC,0BAA0B,qEALjD06B,GAAyBnwC,sCAAzBmwC,EAAyBlwC,QAAzBkwC,EAAyB,YAAzBA,GAAb,GCeA,MA+EaC,GAAgDvzC,aA/E3C,CAChB,CACEwzC,KAAM,GACNC,UAAWvpB,GACXrP,YAAa,CAACD,IACd84B,SAAU,CACR,CACEF,KAAM,GACNC,UAAWtmB,GACXtS,YAAa,CAACy4B,IAEhB,CACEE,KAAM,aACNC,UAAW9iB,GACX9V,YAAa,CAACy4B,IAEhB,CACEE,KAAM,oBACNC,UAAWhf,GACX5Z,YAAa,CAACy4B,IAEhB,CACEE,KAAM,yBACNC,UAAWpY,GACXxgB,YAAa,CAACy4B,IAEhB,CACEE,KAAM,YACNC,UAAWhU,GACX5kB,YAAa,CAACy4B,IAEhB,CACEE,KAAM,sBACNC,UAAWjR,GACX3nB,YAAa,CAACy4B,IAEhB,CACEE,KAAM,gBACNC,UAAW1O,GACXlqB,YAAa,CAACy4B,IAEhB,CACEE,KAAM,iBACNC,UAAWhL,GACX5tB,YAAa,CAACy4B,IAEhB,CACEE,KAAM,eACNC,UAAW/F,GACX7yB,YAAa,CAACy4B,IAEhB,CACEE,KAAM,kBACNC,UAAWjF,GACX3zB,YAAa,CAACy4B,IAEhB,CACEE,KAAM,UACNC,UAAWlD,GACX11B,YAAa,CAACy4B,IAEhB,CACEE,KAAM,0BACNC,UAAWzB,GACXn3B,YAAa,CAACy4B,IAEhB,CACEE,KAAM,eACNC,UAAW3G,MAIjB,CACE0G,KAAM,KACNC,UAAW5G,KAK8E,CAAE8G,uBAAwB,WClEhH,IAAMC,GAAb,MAAM,QAEJ7yC,YAAoB6H,8BAClB1H,KAAK0H,oBAAoBC,YAAYgrC,WClC3B,MDmCV3yC,KAAK0H,oBAAoBC,YAAYif,iBClCpB,kBDoCjB5mB,KAAK0H,oBAAoBC,YAAY2K,mBChCnB,eDiClBtS,KAAK0H,oBAAoBC,YAAY6K,eClCvB,uDDmCdxS,KAAK0H,oBAAoBC,YAAYoK,gBCpCtB,iDDsCf/R,KAAK0H,oBAAoBC,YAAYgT,qBCjCjB,gDDkCpB3a,KAAK0H,oBAAoBC,YAAY2Y,qBChCjB,2DDiCpBtgB,KAAK0H,oBAAoBC,YAAY4Y,oBClClB,qFDsBVmyB,GAASzwC,mCAATywC,EAASE,WAFRzuB,mCADD,CAAEiuB,GAA0BxzC,SAT9B,CACPyzC,GACAQ,MACA14B,aACA4H,GACAmC,GACA4uB,eACAC,UAKSL,GAAb,GE3BAM,QAAyBC,gBAAgBP,IACtCb,MAAMt8B,GAAOpS,QAAQC,IAAImS","names":["DEFAULT_PERFECT_SCROLLBAR_CONFIG","suppressScrollX","Core_Module","provide","PERFECT_SCROLLBAR_CONFIG","useValue","imports","CommonModule","RouterModule","FlexLayoutModule","PerfectScrollbarModule","SatPopoverModule","MdePopoverModule","MatButtonModule","MatTabsModule","MatListModule","MatDividerModule","MatIconModule","MatMenuModule","MatBadgeModule","MatGridListModule","MatToolbarModule","Helper_Service","constructor","http","snackBar","this","Subject","getDataFromLocalJsonFile","filePath","get","getData","URL","openSnackbarNotification","message","action","status","open","duration","verticalPosition","horizontalPosition","toggleRighSideNav","t","rightSideNav","_a","toggle","toggleLeftSideNav","leftSideNav","closeLeftSideNav","close","showNavMenu","navMenu","show","hideNavMenu","hide","setTmsUrl","menu","menuItemClicked$","next","i0","factory","Snackbar_Service","Array","showNotification","config","messageType","classOverride","MatSnackBarConfig","panelClass","sbMessage","SnackBarMessage","messageQueue","push","isInstanceVisible","showNext","length","shift","console","log","snackBarRef","openFromTemplate","afterDismissed","subscribe","ngOnDestroy","subscription","unsubscribe","Material_Module","FormsModule","ReactiveFormsModule","LayoutModule","MatButtonToggleModule","MatCheckboxModule","MatTableModule","MatSelectModule","MatProgressSpinnerModule","MatRadioModule","MatSidenavModule","MatCardModule","MatPaginatorModule","MatFormFieldModule","MatInputModule","MatSnackBarModule","MatExpansionModule","MatTooltipModule","MatDialogModule","MatStepperModule","MatSlideToggleModule","MatDatepickerModule","MatNativeDateModule","MatChipsModule","MatProgressBarModule","MatAutocompleteModule","Guid_Service","MakeNew","result","j","Math","floor","random","toString","toUpperCase","MakeNew_Plain","Call_Info_Service","guid","active_calls","error_calls","audit_calls","Add_Active_Call","active_call","start_time","Date","now","unshift","Error_Call","error_info","current_call","find","f","error_message","status_code","end_time","Remove_Active_Call","logged_in","Index","findIndex","processing_milliseconds","splice","Currently_Logged_In","Environment_Service","environment","Response_Service","oAuthService","Add_Call_Info","active_call_info","call_url","getResponseInfo","Bearer_Token","call_info","Headers","HttpHeaders","set","Output","headers","pipe","share","error","bearer_header","getAccessToken","soap_header","getResponse_Paged_Info","observe","get_Data_Secure","password","post_Data_Secure","url","input_data","post","post_Data","post_Data_URL_Encoded","Post_Body","put_Data","put","delete_Data","delete","getPagination_Info","Data_Info","pagination","JSON","parse","getResponse_Paged","getResponse","getResponse_Anonymous","get_Soap_Data","handleError","Observable","json","Pagination_Service","Array_Paginator","items","page","page_size","paging","current_page","Number","total_count","paginatedItems","slice","total_pages","ceil","next_page_link","previous_page_link","String","data","Date_Service","is_today","test_date","getDate","getMonth","getFullYear","string_date","string_date_output","padded_date","compare_date","date","input_date","output_date","input_info","substr","full_date","undefined","date_string","day_names","getDay","month_names","remove_time","setHours","previous_monday","from_date","mDifference","setDate","next_month","year","month","month_name_month","month_name_date","utc_time_from_1970","getTime","getReturnDate","startDate","retrunDate","getReturnDateAsLongString","returnDate","Calendar_Service","build_month","start_date","monthIndex","calendar_month_output","calendar_month","weeks","done","count","build_week","current_month","week","calendar_week","days","i","day","calendar_day","name","number","is_current_month","Service_Cryptography","generate_hash","crypto_key","secret","crypto","Service_Security","Service_Date","Service_Guid","app_id","api_key","randomstring","timestamp","key","hash","randomString","chars","LocalStorage_Service","setData","value","localStorage","setItem","getItem","removeData","removeItem","clearData","clear","setAccessToken","token","KEY_ACCESSTOKEN","removeAccessToken","OAuth_Service","router","localStorage_Service","parentModule","tms_internal_user_info","v1_3_identity_claim_options","Error","initialise_OAuth","authConfig","AuthConfig","issuer","identity_server","redirectUri","window","location","protocol","host","clientId","identity_client_id","scope","identity_scope","silentRefreshRedirectUri","origin","configure","setupAutomaticSilentRefresh","loadDiscoveryDocumentAndTryLogin","login","initImplicitFlow","logoff","logOut","getUser_Info","isLoggedIn","getToken","substring","getLogin_Password","User_Name","Password","tokenEndpoint","dummyClientSecret","identity_client_secret","fetchTokenUsingPasswordFlow","setToken","getTokenFromStorage","accessToken","getError_Message","errorId","getUser_Claims","identity_login","identity_server_app_id","cacheUserInfo","User_Info","operator_id","finance_centre_id","user_info","Identity_Request","v1_3_identity_request","user_name","Claim_Response","claim_info","body","certificate","scopes","controls","options","fc","id","c","err","Switch_Certificate","Finance_Centre_ID","Switch_Certificate_Request","v1_3_identity_switch_certificate_request","get_Logout","HttpParams","navigate","loadAndAuthorize","then","hasValidAccessToken","loadUserProfile","isAuthorized","identityClaims","Object","assign","getIdentityClaims","User_Service","getUser_List","paged_url","getUsers","page_number","Search","search_options","search_option","index","updateUser","userId","new_user","addUser","deleteUser","user","getUserByID","user_id","Permissions_Service","checkAuthenticationClaims","claim","hasAccess","parseInt","map","res","user_groups","forEach","group","groups","group_claims","some","x","Broadcast_Service","ngZone","broadcastChannel","BroadcastChannel","broadcastChannelName","onmessage","onMessage","publish","postMessage","messagesOfType","type","zone","source","observer","run","e","complete","runInZone","filter","Auth_Guard","canActivate","route","state","oAuth_Internal_Identity_Guard","identity_server_login_redirect","requireHttps","tokenValidationHandler","JwksValidationHandler","Module_System","static","ngModule","providers","HttpClientModule","HomeWidgetModule","Web_Engine_Service","getWeb_Engine_List","api_internal_gateway","getWeb_Engines","updateWeb_Engine","web_engine","addWeb_Engine","new_web_engine","deleteWeb_Engine","Web_Filter_Service","getWeb_Filter_List","getWeb_Filters","updateWeb_Filter","web_filter","addWeb_Filter","new_web_filter","deleteWeb_Filter","Web_Search_Sales_Group_Service","getWeb_Sales_Group_List","getWeb_Sales_Group","pageSize","getWeb_Sales_Group_For_Product","updateWeb_Sales_Group","web_search_sales_group","addWeb_Sales_Group","new_web_search_sales_group","deleteWeb_Sales_Group","getWeb_Salse_Group_Product_List","search","Affiliate_Service","getAffiliate_List","getAffiliate","updateAffiliate","affiliate","sales_centre_id","addAffiliate","new_affiliate","getApi_info","getFinance_Centre_List","getConnector_Type_List","getAffiliate_Hold_Time","all_result","getAffiliate_Hold_Time_Search","addUpdate_Affiliate_Hold_Time","affiliate_hold_time","delete_Affiliate_Hold_Time","getCache_Server","get_Affiliate_Cache","addUpdate_Affiliate_Cache","affiliate_cache","get_Affiliate_Channel_Management_List","addUpdate_Affiliate_Channel_Management_List","affiliate_channel_management_list","Audit_Booking_Service","getAutid_Booking","http_method","datefrom","dateTo","search_filters","search_filter","Price_Override_Service","getPrice_Override_List","getWPrice_Override_Search","addPriceOverride","new_price_override","deletePriceOverride","price_override","Product_Selection_Service","getConnector_Product_List","connector_id","addProduct_Selected","new_product_selected","setProductData","getProductData","setSupplierProductData","supplierProduct","getSupplierProductData","getSupplierProduct","product_id","addSupplierProduct","supplier_product","getProduct_Selected_List","company","finance_centre","product_group","Cache_Server_Service","getCache_Server_List","getCache_Servers","productSync","capacitySync","getPasswordHash","hash_request","password_hash_request","microservice_api_key","microservice_app_id","singleProductSync","cache_server_app_id","pasword","singleProductSyncV13","singleCapacitySync","singleCapacitySyncV13","singleAffiliateSync","singleAffiliateSyncV13","Mapping_Service","getMapping_List","getMapping_Search","addMapping","new_mapping","deleteMapping","mapping","getAffiliates","List_Management_Service","getChannel_Management_List","addChannel_Management_List","new_list","deleteChannel_Management_List","list","getList_Modes","Module_TMS_Gateway","Group_Service","getGroup_List","getGroups","getOperators","getCurrencies","getSecurityClaim","updateGroup","groupId","new_group","addGroup","deleteGroup","getGroup_All","getGroupByID","group_id","Service_Login","Response_User_Login","Response_User_Logout","getFederated_Service_Login","return_url","identity_realm","href","getLogin","User_Login","Request_User_Login","response_user_login","valid_login","getLogout","logout_id","response_user_logout","Audit_Identity_Service","getAutid_Activity","getAutid_Error","getActivityTypes","getErrorTypes","Module_TMS_Identity_Internal","AppComponent","selectors","ctx_r4","ctx_r8","ctx_r11","Side_Menu_Item_Component","helper_service","elementRef","EventEmitter","ngOnInit","onClick","event","targetElement","nativeElement","contains","openLink","hasChildMenu","sub","hasLink","link","onItemClick","hideOnClick","itemClick","emit","onSubItemClick","styles","Side_Menu_Component","User_Menu_Component","oauth_Service","user_service","clickedInside","isOpen","currentUser","parse_name","isLoggedOn","indexOf","fullName","split","ctx","App_Switch_Component","env","environment_name","apps","Top_Toolbar_Component","breakpointObserver","Breakpoints","matches","onShowRightSideNav","ctx_r2","Theme_Picker_Component","theme_name","color","isDark","isDefault","isActive","storeTheme","getStoredTheme","themes","theme","applyTheme","onChangeTheme","oldThemeName","removeTheme","obj","document","classList","add","remove","storageKey","stringify","clearStorageTheme","Sidebar_Component","call_info_service","environment_service","call_info_data","ngDoCheck","showActiveCalls","GatewayComponent","activatedRoute","title","includes","setTitle","navItems","queryParams","params","legacymode","LegacyMode","style","cursor","showProgress","createUrlTree","MatInputDebounce","fromEvent","debounceTime","delay","input","inputValue","Reset_Value","ctx_r26","Component_External_API_Sync","cache_server_service","getBackend_Data_Cache_Servers","pageNum","cache_server_list","cache_server","pagination_cache_server","updateStatusOnRefresh","onClick_Cache_Server_Pagination","pageIndex","onClick_Cache_Server_Search","onAllProductsSync","cache","productStatus","o","scheduled_Items","queue_id","statusProduct","onAllCapacitiesSync","capacityStatus","statusCapacity","reload","cahceServer","onRefreshLogin","item","password_hash","response","Component_Home","Confirmation_Dialog_Compnent","dialogRef","onNoClick","MAT_DIALOG_DATA","Doc_Component","Title","getTitle","docURL","openDoc","docLink","ctx_r14","ctx_r24","ctx_r27","_r22","ctx_r31","Dual_List_Component","ngOnChanges","availableItems","selectededItems","toLocaleLowerCase","selected","RefreshPaginationSelectedItems","pageNumber","onAvailableItems","dataType","onSelectedItems","selectededItemsChange","onAvailableItemsPaginate","availableItemsPage","onSelectedItemsPaginate","output","displaySelectededItems","selectededItemsPagination","onAvailableOptionsSearch","vlaue","availableSearch","onSelectedOptionsSearch","onAvailableRowClick","availableRow","onSelectedRowAdd","selectedRowAdd","onSelectedSettings","selectedSettings","oxw","ctx_r13","ctx_r15","ctx_r17","ctx_r18","ctx_r22","ctx_r23","ctx_r25","ctx_r28","ctx_r29","ctx_r30","ctx_r33","Component_Web_Engine","dialog","FormControl","Validators","getBackend_Data_Web_Engine","getBackend_Data_Web_Engine_Filters","onClick_Web_Engine_Pagination","web_engine_list","web_search_engine","pagination_web_engine","onClick_Web_Engine_Filter_Pagination","onClick_Web_Engine_Filter_Search","web_filter_result","web_search_filter","pagination_web_engine_filter","availableWebEngineFilters","map_Data_Web_Engine_Filters_Selected","selectedWebEngineFilters","web_search_engine_filter","filter_id","onAddWebEngineFilter","engine_id","web_engine_id","onRemoveWebEngineFilter","cache_server_result","availableCacheServers","map_Data_Cache_Servers_Selected","selectedCacheServers","web_search_engine_cache","cache_server_id","onAdd_Cache_Server","onRemove_Cache_Server","onAdd_Web_Engine","web_engine_header","showSearchBlock","onEdit_Web_Engine","selected_Web_Engine","web_engine_name","setValue","web_search_engine_filters","web_search_engine_caches","updateButton","onDelete_Web_Engine","text","afterClosed","rest_WebEngineForm","onAdd_Update_Web_Engine_Submit","addUpdateWebEngine","valid","markAsTouched","reset","ctx_r32","ctx_r34","ctx_r36","ctx_r37","ctx_r38","ctx_r41","ctx_r42","ctx_r43","ctx_r44","ctx_r45","ctx_r47","Component_Web_Search_Filter","web_search_filter_tag","getBackend_Data_Web_Filter","getBackend_Data_Web_Sales_Group","RefreshPaginationFilterTag","onClick_Web_Filter_Pagination","onClick_Web_Tag_Pagination","onClick_Sales_Group_Pagination","web_filter_list","pagination_web_filter","onClick_Web_Sales_Group_Search","web_sales_group_result","pagination_sales_group","availableWebSalesGroup","map_Data_Web_Sales_Group_Selected","selectedWebSalesGroup","web_filter_tag_sales_group","sales_group_id","sales_group","onAddWebSalesGroup","tag_id","web_filter_tag","tag","onRemoveWebSalesGroup","filter_tag_list","display_filter_tag_list","pagination_filter_tag","onWeb_Filter_Search","web_filter_search","onAdd_Web_Filter","web_filter_header","onEdit_Web_Filter","selected_Web_Filter","web_filter_name","web_search_filter_tags","panelStep","onDelete_Web_Filter","rest_WebFilterForm","onAddFilterTag","web_tag_header","onUpdateFilterTag","selectItem","tag_products","onDeleteFilterTag","onAdd_Update_Web_Filter_Submit","map_Form_Data_For_Backend","setPanelStep","Component_Product_Selection","conector_type_list","selectionFilter","setSearchControls","onClick_Products_Pagination","getBackend_Data_Products_Available","productSearch","onClick_Product_Search","productItems","pagination_products","availableProductItems","productSelectionFilter","excluded_connector_id","selected_connector_id","product_info","productInfo","selected_connector","companies","selected_company","company_identifier","finance_centres","selected_finance_centre","finance_centre_identifier","product_groups","pg","selected_product_group","product_group_identifier","fill_Connector_Products","onConnectorFilter","onCompanyFilter","producInfo","onFinanceCentreFilter","onProductGroupFilter","connector_product","products","prod","product_identifier","connector","external_identifier","company_finance_centre","company_finance_centre_product_group","company_finance_centre_product_group_product","disabled","disabled_date","external_company_identifier","sort","a","b","toLowerCase","onAddProductSelected","productSelected","addProductSelected","onRemoveProductSelected","removeProductSelected","onProductSelectedAddOption","productSelectedOptionAdd","onProductSelectedSettingsOption","productSelectedOptionSettings","ctx_r19","ctx_r20","ctx_r21","Component_Web_Search_Sales_Group","web_search_sales_group_product","getBackend_Data_Sales_Group","salesGroupPagination","pagination_web_sales_group","buildSalesGroupData","navigateSelectedPage","replace","pageURL","paginator","sales_group_search","product_search","searchWebSalesGroup","searchWebSalesProduct","onAdd_Sales_Group","web_sales_group_header","selectedProductItems","defaultProductItems","sales_group_products","onEdit_Sales_Group","selected_Sales_Group","sales_group_name","map_Data_Products_Selected","onDelete_Sales_Group","reset_SalesGroupForm","product","not_for_sale","onAddProduct","onRemoveProduct","onProductSettings","sales_group_product_settings","onSales_Group_Search","onProduct_Search","onAdd_Update_Sales_Group_Submit","addUpdateWebSalesGroup","MatPaginator","Loading_Indicator_Component","ctx_r7","SelectAutocompleteComponent","formControl","disable","enable","filteredOptions","selectedOptions","selectedValue","selectionChange","toggleSelectAll","val","checked","_","filteredValues","getFilteredOptionsValues","filterItem","display","selectAllChecked","hideOption","option","onDisplayString","displayString","displayOption","multiple","labelCount","onSelectionChange","trackByFn","compareObjects","o1","o2","ctx_r40","Component_Affiliate","getBackend_Data_For_Controls","getBackend_Data_Affiliate","onClick_Affiliate_Pagination","affilate_api_key","affilate_app_id","hold_time_list","connectors","channel_management_lists","affiliate_list","pagination_affiliate","onAffiliate_Search","search_text","onAdd_Affiliate","affilate_data","affiliate_header","setAffiliateForm","onEdit_Affiliate","selected_affiliate","toPromise","selected_cache_servers","selected_list","list_id","onAdd_Update_Affiliate_Submit","affilateForm","getRawValue","selectedCacheServer","affiliate_id","rest_AffiliateForm","keys","controlName","affiliateModel","FormGroup","agent_id","agent_contact_id","payment_delay_minutes","allow_price_override","allow_confirmed_cancellation","default_hold_time_id","enable_production","max_hold_time_id","utm_source","white_label","send_itinerary_agency","send_itinerary_only","company_id","getSelectedOptions","Component_Affiliate_Hold_Time","affiliate_service","getBackend_Data_Affiliate_Hold_Time","setHoldTimeForm","onClick_Affiliate_Hold_Time_Pagination","affiliate_hold_time_list","pagination_hold_time","onAffiliate_Hold_Time_Search","holdTimeModel","hold_time_form","hours","minutes","seconds","onEdit_Affiliate_Hold_Time","onAdd_Update_Affiliate_Hold_Time_Submit","formDirective","rest_Affiliate_Hold_Time_Form","onDelete_Affiliate_Hold_Time","resetForm","Json_Viewer_Component","cleanOnChange","segments","parseKeyValue","isExpandable","segment","expanded","description","isArray","Json_Viewer_Dialog_Compnent","jsonData","onExpendUnexpand","expandToolTip","Time_Difference_Pipe","transform","firstDate","secondDate","endDate","round","pure","Component_Audit_Booking","time_period_control","time_period_data","affiliates","getBackend_Data_Audit_Booking","app_id_data","http_method_data","getTimePeriod","date_to_data","onClick_Audit_Booking_Pagination","date_from_data","audit_booking_list","audit_booking","pagination_audit_booking","period","datePipe","DatePipe","today","setMonth","setFullYear","onFilterResultRest","app_id_control","http_method_control","date_from_control","date_to_control","onAudit_Booking_View","upload_data_json","upload_data","response_data_json","response_data","process_data_json","processed_data","response_process_data_json","response_processed_data","onBackPage","onViewJson","dialogTitle","jsonValue","height","width","ctx_r49","ctx_r51","ctx_r61","ctx_r66","ctx_r67","ctx_r70","ctx_r71","ctx_r72","ctx_r73","ctx_r75","ctx_r76","ctx_r77","ctx_r79","ctx_r81","ctx_r84","ctx_r86","ctx_r88","ctx_r90","Component_Price_Override","FormBuilder","MatTableDataSource","iso","currency","detailFormGroup","percentage","getBackend_Data_Price_Override","getBackend_Data_Cache_Servers_Available","onClick_Price_Override_Pagination","price_override_list","pagination_price_override","onPrice_Override_Search","onAdd_Price_Override","price_override_header","onEdit_Price_Override","selected_price_override","patchValue","onDelete_Price_Override","rest_PriceOverrideForm","onClick_Cache_Servers_Pagination","onClick_Cache_Servers_Search","pagination_cache_servers","availableCacheServerItems","selectedCacheServerItems","cache_servers","onAddCacheServer","price_override_id","onRemoveCacheServer","departures","currencies","onProductSelectForDepartures","ds_departures","ds_currencies","stepper","selectedIndex","completed","onAdd_Product_Departure","departure","departureDate","toLocaleString","price_override_product_id","toDateString","price_override_product","onDelete_Product_Departure","onAdd_Product_Currency","iso_currency_code","isoCurrencyCode","amounts","product_currency","onDelete_Product_Currency","onAdd_Product_Currency_Amount","ds_amounts","onAdd_Currency_Amount","amount","currencyAmount","onDelete_Currency_Amount","onAdd_Update_Price_Override_Submit","matNextStep","matBackStep","stepClick","ev","_steps","_results","onStepNext","onStepPrevious","previous","MatHorizontalStepper","Page_Not_Found_Component","Component_User_Profile","profile","getUserData","firstName","first_name","lastName","last_name","userName","photoUrl","photo_url","updateProfile","ctx_r16","Component_Product_List","productData","selected_connector_name","company_finance_centre_id","company_finance_centre_product_group_id","conn","startsWith","pagination_product","pagedProductItems","onClick_Product_Pagination","onEdit_Product","savedConnector","onRefreshCapacity","onRefreshDescription","Component_Product_Details","product_selection_filter","setFormFields","product_supplier_id","supplier_product_code","supplier_product_name","linkedProducts","supplier_product_connector_id","supplier_product_company","supplier_product_finance_centre","supplier_product_product_group","product_header","connector_name","onCancel","onAdd_Update","Select_Product_Dialog_Compnent","getProduct_Selected_Data","connectorData","Connector_ID","m","Company","companyData","Company_Finance_Centre","financeCentreData","p","Company_Finance_Centre_Product_Group","product_selected","onClose","onSingleSelect","selected_product","ctx_r35","Component_Mapping","mapping_service","getBackend_Data_Mapping","onClick_Mapping_Pagination","mapping_list","pagination_mapping","onMapping_Search","onAdd_Mapping","mapping_header","onEdit_Mapping","selected_mapping","mapping_code","select_product","mapping_cache_servers","cacheList","select","onDelete_Mapping","rest_MappingForm","addProduct","chipList","errorState","removeProduct","onAdd_Update_Mapping_Submit","mapping_affiliate","mapping_id","Component_Channel_Management_List","list_management_service","getBackendData","list_modes","pagination_list","onClick_List_Pagination","onList_Search","onAdd_List","list_header","setListForm","onEdit_List","channel_management_list","list_products","onDelete_List","__awaiter","catch","rest_ListForm","listModel","listForm","mode_id","onAdd_Update_List_Submit","mode","Gateway_Maintenance_Guard","AppRouting","path","component","children","relativeLinkResolution","AppModule","production","bootstrap","BrowserModule","OAuthModule","BrowserAnimationsModule","__NgCli_bootstrap_1","bootstrapModule"],"sources":["./modules/material_ui/components/Core/core.module.ts","./modules/material_ui/services/Core/Helper_Service.ts","./modules/material_ui/services/Core/Snackbar_Service.ts","./modules/material_ui/material.module.ts","./modules/system/services/system/Guid_Service.ts","./modules/system/services/Call_Info_Service.ts","./modules/system/objects/environment.ts","./modules/system/services/Environment_Service.ts","./modules/system/objects/active_call.ts","./modules/system/objects/pagination.ts","./modules/system/services/Response_Service.ts","./modules/system/services/Pagination_Service.ts","./modules/system/objects/System/Calendar_Month.ts","./modules/system/objects/System/Calendar_Week.ts","./modules/system/objects/System/Calendar_Day.ts","./modules/system/services/system/Date_Service.ts","./modules/system/services/system/Calendar_Service.ts","./modules/system/services/system/Cryptography_Service.ts","./modules/system/services/system/Security_Service.ts","./modules/system/objects/System/user_info/tms_internal_user_info.ts","./modules/system/objects/identity/v1_3_identity_request.ts","./modules/system/objects/identity/claims/v1_3_identity_claim_options.ts","./modules/system/objects/identity/switch_certificate/v1_3_identity_switch_certificate_request.ts","./modules/system/services/system/LocalStorage_Service.ts","./modules/system/services/system/OAuth_Service.ts","./modules/tms/identity/internal/services/maintenance/User/User.ts","./modules/system/services/Permissions_Service.ts","./modules/system/services/Broadcast_Service.ts","./modules/system/services/RunInZone_Service.ts","./modules/system/guards/Auth_Guard.ts","./modules/system/guards/oAuth_Internal_Identity_Guard.ts","./modules/system/system.module.ts","./modules/tms/gateway/components/home/home-widget/home-widget.module.ts","./modules/tms/gateway/services/Web_Engine/Web_Engine.ts","./modules/tms/gateway/services/Web_Search_Filter/Web_Filter.ts","./modules/tms/gateway/services/Web_Search_Sales_Group/Web_Search_Sales_Group.ts","./modules/tms/gateway/services/Affiliate/Affiliate.ts","./modules/tms/gateway/services/Audit/Audit_Booking.ts","./modules/tms/gateway/services/Channel_Management/Price_Override/Price_Override.ts","./modules/tms/gateway/services/Comman/Product_Selection/Product_Selection.ts","./modules/system/objects/password_hash_request.ts","./modules/tms/gateway/services/Type_Cache_Server/Cache_Server.ts","./modules/tms/gateway/services/Channel_Management/Mapping/Mapping.ts","./modules/tms/gateway/services/Channel_Management/List_Management/List.ts","./modules/tms/gateway/tms_gateway_module.ts","./modules/tms/identity/internal/services/maintenance/Group/Group.ts","./modules/tms/identity/internal/objects/Login/Request_User_Login.ts","./modules/tms/identity/internal/objects/Login/Response_User_Login.ts","./modules/tms/identity/internal/objects/Login/Response_User_Logout.ts","./modules/system/objects/identity/error_message.ts","./modules/tms/identity/internal/services/Login.ts","./modules/tms/identity/internal/services/audit/Audit.ts","./modules/tms/identity/internal/tms_identity_internal_module.ts","./front-end-gateway/app/app.component.ts","./front-end-gateway/app/app.component.html","./modules/material_ui/components/Core/Side_Menu_Item/Side_Menu_Item.html","./modules/material_ui/components/Core/Side_Menu_Item/Side_Menu_Item.ts","./modules/material_ui/components/Core/Side_Menu/Side_Menu.html","./modules/material_ui/components/Core/Side_Menu/Side_Menu.ts","./modules/material_ui/components/Core/User_Menu/User_Menu.ts","./modules/material_ui/components/Core/User_Menu/User_Menu.html","./modules/material_ui/components/Core/App_Switch/App_Switch.html","./modules/material_ui/components/Core/App_Switch/App_Switch.ts","./modules/material_ui/components/Core/Top_Toolbar/Top_Toolbar.html","./modules/material_ui/components/Core/Top_Toolbar/Top_Toolbar.ts","./modules/material_ui/components/Core/Theme_Picker/Theme_Picker.html","./modules/material_ui/components/Core/Theme_Picker/Theme_Picker.ts","./modules/material_ui/components/Core/Sidebar/Sidebar.html","./modules/material_ui/components/Core/Sidebar/Sidebar.ts","./front-end-gateway/app/main/gateway.html","./front-end-gateway/app/main/gateway.ts","./modules/material_ui/components/Input_Debounce/Input_Debounce.ts","./modules/material_ui/components/Input_Debounce/Input_Debounce.html","./modules/tms/gateway/components/home/home-widget/api_server_sync/api_server_sync.html","./modules/tms/gateway/components/home/home-widget/api_server_sync/api_server_sync.ts","./modules/tms/gateway/components/home/home.ts","./modules/tms/gateway/components/home/home.html","./modules/material_ui/components/UI_Dialogs/Confirmation_Dialog/Confirmation_Dialog.ts","./modules/material_ui/components/UI_Dialogs/Confirmation_Dialog/Confirmation_Dialog.html","./modules/tms/gateway/objects/Web_Search/web_search_engine.ts","./modules/material_ui/components/Core/Doc_Component/Doc_Component.ts","./modules/material_ui/components/Core/Doc_Component/Doc_Component.html","./modules/material_ui/components/Dual_List/Dual_List.html","./modules/material_ui/components/Dual_List/Dual_List.ts","./modules/tms/gateway/components/web_search/web_engine/web_engine.html","./modules/tms/gateway/components/web_search/web_engine/web_engine.ts","./modules/tms/gateway/objects/Web_Search/web_search_filter.ts","./modules/tms/gateway/objects/Web_Search/web_search_filter_tag.ts","./modules/tms/gateway/components/web_search/web_search_filter/web_search_filter.html","./modules/tms/gateway/components/web_search/web_search_filter/web_search_filter.ts","./modules/tms/gateway/objects/Web_Search/web_search_sales_group.ts","./modules/tms/gateway/objects/Web_Search/web_search_sales_group_product.ts","./modules/tms/gateway/components/comman/product_selection/product_selection.html","./modules/tms/gateway/components/comman/product_selection/product_selection.ts","./modules/tms/gateway/components/web_search/web_search_sales_group/web_search_sales_group.html","./modules/tms/gateway/components/web_search/web_search_sales_group/web_search_sales_group.ts","./modules/tms/gateway/objects/Affiliate/affiliate.ts","./modules/material_ui/components/Loading_Indicator/Loading_Indicator.html","./modules/material_ui/components/Loading_Indicator/Loading_Indicator.ts","./modules/material_ui/components/Select_Autocomplete/Select_Autocomplete.html","./modules/material_ui/components/Select_Autocomplete/Select_Autocomplete.ts","./modules/tms/gateway/components/affiliate/affiliate/affiliate.html","./modules/tms/gateway/components/affiliate/affiliate/affiliate.ts","./modules/tms/gateway/objects/Affiliate/affiliate_hold_time.ts","./modules/tms/gateway/components/affiliate/hold_time/hold_time.html","./modules/tms/gateway/components/affiliate/hold_time/hold_time.ts","./modules/material_ui/components/Json_Viewer/Json_Viewer.html","./modules/material_ui/components/Json_Viewer/Json_Viewer.ts","./modules/material_ui/components/UI_Dialogs/Json_Viewer_Dialog/Json_Viewer_Dialog.ts","./modules/material_ui/components/UI_Dialogs/Json_Viewer_Dialog/Json_Viewer_Dialog.html","./modules/tms/gateway/pipes/time_difference.ts","./modules/tms/gateway/components/audit/audit_booking.html","./modules/tms/gateway/components/audit/audit_booking.ts","./modules/tms/gateway/objects/Channel_Management/Price_Override/price_override.ts","./modules/tms/gateway/components/channel_management/price_override/price_override.html","./modules/tms/gateway/components/channel_management/price_override/price_override.ts","./modules/system/components/Page_Not_Found.ts","./modules/system/components/Page_Not_Found.html","./modules/tms/identity/internal/objects/maintenance/User/User.ts","./modules/tms/identity/internal/components/User_Profile/User_Profile.ts","./modules/tms/identity/internal/components/User_Profile/User_Profile.html","./modules/tms/gateway/components/channel_management/product/product_list/product_list.html","./modules/tms/gateway/components/channel_management/product/product_list/product_list.ts","./modules/tms/gateway/objects/Common/product_selection_filter.ts","./modules/tms/gateway/components/channel_management/product/product_details/product_details.ts","./modules/tms/gateway/components/channel_management/product/product_details/product_details.html","./modules/tms/gateway/components/comman/ui_dialogs/select_product/select_product.html","./modules/tms/gateway/components/comman/ui_dialogs/select_product/select_product.ts","./modules/tms/gateway/objects/Channel_Management/Mapping/mapping.ts","./modules/tms/gateway/components/channel_management/mapping/mapping.html","./modules/tms/gateway/components/channel_management/mapping/mapping.ts","./modules/tms/gateway/objects/Channel_Management/List_Management/list.ts","./modules/tms/gateway/components/channel_management/list/channel_management_list.html","./modules/tms/gateway/components/channel_management/list/channel_management_list.ts","./front-end-gateway/app/guards/Gateway_Maintenance_Guard.ts","./front-end-gateway/app/app.routing.ts","./front-end-gateway/app/app.module.ts","./front-end-gateway/environments/environment.rtg-bab-staging.ts","./front-end-gateway/main.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RouterModule } from '@angular/router';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { PerfectScrollbarModule } from 'ngx-perfect-scrollbar';\r\nimport { PERFECT_SCROLLBAR_CONFIG } from 'ngx-perfect-scrollbar';\r\nimport { PerfectScrollbarConfigInterface } from 'ngx-perfect-scrollbar';\r\n\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatGridListModule } from '@angular/material/grid-list';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatStepperModule } from '@angular/material/stepper';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatBadgeModule } from '@angular/material/badge';\r\nimport { SatPopoverModule } from '@ncstate/sat-popover';\r\nimport { MdePopoverModule } from '@material-extended/mde';\r\n\r\nimport { Sidebar_Component } from './Sidebar/Sidebar';\r\nimport { Side_Menu_Component } from './Side_Menu/Side_Menu';\r\nimport { Side_Menu_Item_Component } from './Side_Menu_Item/Side_Menu_Item';\r\nimport { User_Menu_Component } from './User_Menu/User_Menu';\r\nimport { Theme_Picker_Component } from './Theme_Picker/Theme_Picker';\r\nimport { Doc_Component } from './Doc_Component/Doc_Component';\r\nimport { App_Switch_Component } from './App_Switch/App_Switch';\r\nimport { Top_Toolbar_Component } from './Top_Toolbar/Top_Toolbar';\r\nimport { FinanceCentre_Header_Component } from './Finance_Centre_Header/Finance_Centre_Header'\r\nimport { NewTab_Header_Component } from './New_Tab_Header/New_Tab_Header'\r\n\r\nimport { Main_Top_Toolbar_Component } from \"./Main_Top_Toolbar/Main_Top_Toolbar\";\r\nimport { Main_NavMenu_Toolbar_Component } from \"./Main_NavMenu_Toolbar/Main_NavMenu_Toolbar\";\r\nimport { Toolbar_Menu_Item_Component } from \"./Toolbar_Menu_Item/Toolbar_Menu_Item\";\r\nimport { Toolbar_Submenu_Component } from \"./Toolbar_Submenu/Toolbar_Submenu\";\r\n\r\nconst DEFAULT_PERFECT_SCROLLBAR_CONFIG: PerfectScrollbarConfigInterface = {\r\n suppressScrollX: true\r\n};\r\n\r\n@NgModule({\r\n\r\n declarations: [\r\n Sidebar_Component,\r\n Side_Menu_Component,\r\n Side_Menu_Item_Component,\r\n User_Menu_Component,\r\n Theme_Picker_Component,\r\n Doc_Component,\r\n App_Switch_Component,\r\n Top_Toolbar_Component,\r\n Main_Top_Toolbar_Component,\r\n Main_NavMenu_Toolbar_Component,\r\n Toolbar_Menu_Item_Component,\r\n Toolbar_Submenu_Component,\r\n FinanceCentre_Header_Component,\r\n NewTab_Header_Component\r\n ],\r\n\r\n imports: [\r\n CommonModule,\r\n RouterModule,\r\n FlexLayoutModule,\r\n PerfectScrollbarModule,\r\n SatPopoverModule,\r\n MdePopoverModule,\r\n\r\n MatButtonModule,\r\n MatTabsModule,\r\n MatListModule,\r\n MatDividerModule,\r\n MatIconModule,\r\n MatMenuModule,\r\n MatBadgeModule,\r\n MatGridListModule,\r\n MatToolbarModule\r\n ],\r\n\r\n exports: [\r\n PerfectScrollbarModule,\r\n SatPopoverModule,\r\n MdePopoverModule,\r\n\r\n Sidebar_Component,\r\n Side_Menu_Component,\r\n Side_Menu_Item_Component,\r\n User_Menu_Component,\r\n Theme_Picker_Component,\r\n Doc_Component,\r\n App_Switch_Component,\r\n Top_Toolbar_Component,\r\n Main_Top_Toolbar_Component,\r\n Main_NavMenu_Toolbar_Component,\r\n Toolbar_Menu_Item_Component,\r\n Toolbar_Submenu_Component,\r\n FinanceCentre_Header_Component,\r\n NewTab_Header_Component\r\n ],\r\n\r\n providers: [\r\n {\r\n provide: PERFECT_SCROLLBAR_CONFIG,\r\n useValue: DEFAULT_PERFECT_SCROLLBAR_CONFIG\r\n }\r\n ]\r\n\r\n})\r\nexport class Core_Module { }\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { Observable, of, BehaviorSubject, Subject } from 'rxjs';\r\n\r\nimport { menu_list_item } from \"../../objects/Menu_List/menu_list_item\";\r\n\r\n@Injectable()\r\nexport class Helper_Service {\r\n public rightSideNav: any;\r\n public leftSideNav: any;\r\n public navMenu: any;\r\n public showProgressBar: boolean = false;\r\n public menuItemClicked$ = new Subject();\r\n\r\n constructor(private http: HttpClient, private snackBar: MatSnackBar) { \r\n }\r\n\r\n getDataFromLocalJsonFile(filePath: string) {\r\n return this.http.get(filePath);\r\n }\r\n\r\n getData(URL: string): Observable {\r\n return this.http.get(URL);\r\n }\r\n\r\n openSnackbarNotification(message: string, action: string, status: string) {\r\n if (status == \"success\") {\r\n message = \"✔️ - \" + message;\r\n }\r\n else if (status == \"error\") {\r\n message = \"❌ - \" + message;\r\n }\r\n this.snackBar.open(message, action, {\r\n duration: 4000,\r\n verticalPosition: 'top',\r\n horizontalPosition: 'center'\r\n });\r\n }\r\n // Right Side Nav Functions\r\n public toggleRighSideNav() {\r\n this.rightSideNav?.toggle();\r\n }\r\n // Left Side Nav Functions\r\n public toggleLeftSideNav() {\r\n this.leftSideNav?.toggle();\r\n }\r\n public closeLeftSideNav() {\r\n this.leftSideNav?.close();\r\n }\r\n public showNavMenu() {\r\n this.navMenu?.show();\r\n }\r\n public hideNavMenu() {\r\n this.navMenu?.hide();\r\n }\r\n\r\n public setTmsUrl(menu: any) {\r\n this.menuItemClicked$.next(menu);\r\n }\r\n\r\n}\r\n","import { Injectable, OnDestroy } from '@angular/core';\r\nimport { MatSnackBar, MatSnackBarConfig, MatSnackBarRef } from '@angular/material/snack-bar';\r\nimport { Subscription } from 'rxjs';\r\n\r\nexport class SnackBarMessage {\r\n message: any;\r\n action: string = null;\r\n config: MatSnackBarConfig = null;\r\n messageType: string;\r\n}\r\n\r\n\r\n@Injectable()\r\nexport class Snackbar_Service implements OnDestroy {\r\n private messageQueue: Array = Array();\r\n private subscription: Subscription;\r\n private snackBarRef: MatSnackBarRef;\r\n private isInstanceVisible = false;\r\n\r\n constructor(private snackBar: MatSnackBar) { }\r\n\r\n showNotification(message: any, action?: string, config?: MatSnackBarConfig, messageType: string = '', classOverride: string = 'blue-snackbar'): void {\r\n\r\n if (!config) {\r\n config = new MatSnackBarConfig();\r\n config.duration = 3000;\r\n config.verticalPosition = 'bottom';\r\n config.horizontalPosition = 'end';\r\n config.panelClass = [classOverride];\r\n }\r\n\r\n const sbMessage = new SnackBarMessage();\r\n sbMessage.message = message;\r\n sbMessage.action = action;\r\n sbMessage.config = config;\r\n sbMessage.messageType = messageType;\r\n\r\n this.messageQueue.push(sbMessage);\r\n\r\n if (!this.isInstanceVisible) {\r\n this.showNext();\r\n }\r\n }\r\n\r\n private showNext() {\r\n if (this.messageQueue.length === 0) {\r\n return;\r\n }\r\n\r\n const message = this.messageQueue.shift();\r\n this.isInstanceVisible = true;\r\n\r\n if (message.messageType == \"TEMPLATE\") {\r\n console.log(\"if\", message);\r\n this.snackBarRef = this.snackBar.openFromTemplate(message.message, message.config);\r\n }\r\n else {\r\n console.log(\"else\", message);\r\n this.snackBarRef = this.snackBar.open(message.message, message.action, message.config);\r\n }\r\n this.snackBarRef.afterDismissed().subscribe(() => {\r\n this.isInstanceVisible = false;\r\n this.showNext();\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n}\r\n\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { LayoutModule } from '@angular/cdk/layout';\r\nimport { RouterModule } from '@angular/router';\r\n\r\nimport { Core_Module } from \"./components/Core/core.module\";\r\n\r\n// Mat Modules\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatGridListModule } from '@angular/material/grid-list';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatStepperModule } from '@angular/material/stepper';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\n\r\n// Custom Components\r\nimport { Header_Component } from './components/Header/Header';\r\nimport { Drop_Down_Component } from './components/Drop_Down/Drop_Down';\r\nimport { Dual_List_Component } from './components/Dual_List/Dual_List';\r\nimport { MatInputDebounce } from './components/Input_Debounce/Input_Debounce';\r\nimport { Confirmation_Dialog_Compnent } from '../../modules/material_ui/components/UI_Dialogs/Confirmation_Dialog/Confirmation_Dialog';\r\nimport { Json_Viewer_Component } from '../../modules/material_ui/components/Json_Viewer/Json_Viewer';\r\nimport { Json_Viewer_Dialog_Compnent } from '../../modules/material_ui/components/UI_Dialogs/Json_Viewer_Dialog/Json_Viewer_Dialog';\r\nimport { Loading_Indicator_Component } from './components/Loading_Indicator/Loading_Indicator';\r\nimport { Loading_Indicator_Overlay_Component } from './components/Loading_Indicator_Overlay/Loading_Indicator_Overlay';\r\n\r\n// Custom Servies\r\nimport { Helper_Service } from './services/Core/Helper_Service';\r\nimport { Snackbar_Service } from './services/Core/Snackbar_Service';\r\nimport { SelectAutocompleteComponent } from './components/Select_Autocomplete/Select_Autocomplete';\r\n\r\n\r\n\r\n@NgModule({\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n CommonModule,\r\n LayoutModule,\r\n RouterModule,\r\n FlexLayoutModule,\r\n Core_Module,\r\n // Mat Modules\r\n MatButtonModule,\r\n MatButtonToggleModule,\r\n MatCheckboxModule,\r\n MatTableModule,\r\n MatToolbarModule,\r\n MatSelectModule,\r\n MatProgressSpinnerModule,\r\n MatRadioModule,\r\n MatSidenavModule,\r\n MatIconModule,\r\n MatListModule,\r\n MatCardModule,\r\n MatMenuModule,\r\n MatDividerModule,\r\n MatPaginatorModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatGridListModule,\r\n MatSnackBarModule,\r\n MatExpansionModule,\r\n MatTooltipModule,\r\n MatDialogModule,\r\n MatStepperModule,\r\n MatSlideToggleModule,\r\n MatDatepickerModule, MatNativeDateModule,\r\n MatChipsModule,\r\n MatTabsModule,\r\n MatProgressBarModule,\r\n MatAutocompleteModule\r\n ],\r\n declarations: [MatInputDebounce,\r\n Header_Component,\r\n Drop_Down_Component,\r\n Dual_List_Component,\r\n Confirmation_Dialog_Compnent,\r\n Json_Viewer_Dialog_Compnent,\r\n Json_Viewer_Component,\r\n Loading_Indicator_Component,\r\n Loading_Indicator_Overlay_Component,\r\n SelectAutocompleteComponent\r\n ],\r\n exports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n LayoutModule,\r\n FlexLayoutModule,\r\n Core_Module,\r\n // Mat Modules\r\n MatButtonModule,\r\n MatButtonToggleModule,\r\n MatCheckboxModule,\r\n MatTableModule,\r\n MatToolbarModule,\r\n MatSelectModule,\r\n MatProgressSpinnerModule,\r\n MatRadioModule,\r\n MatSidenavModule,\r\n MatIconModule,\r\n MatListModule,\r\n MatCardModule,\r\n MatMenuModule,\r\n MatDividerModule,\r\n MatPaginatorModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatGridListModule,\r\n MatSnackBarModule,\r\n MatExpansionModule,\r\n MatTooltipModule,\r\n MatDialogModule,\r\n MatStepperModule,\r\n MatSlideToggleModule,\r\n MatDatepickerModule,\r\n MatNativeDateModule,\r\n MatChipsModule,\r\n MatTabsModule,\r\n MatProgressBarModule,\r\n MatAutocompleteModule,\r\n // Custom Components\r\n MatInputDebounce,\r\n Header_Component,\r\n Drop_Down_Component,\r\n Dual_List_Component,\r\n Json_Viewer_Component,\r\n Loading_Indicator_Component,\r\n Loading_Indicator_Overlay_Component,\r\n SelectAutocompleteComponent\r\n ],\r\n providers: [Helper_Service, Snackbar_Service]\r\n})\r\nexport class Material_Module { }\r\n\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class Guid_Service {\r\n constructor() {\r\n }\r\n\r\n public MakeNew(): string {\r\n var result: string;\r\n var i: string;\r\n var j: number;\r\n\r\n result = \"\";\r\n for (j = 0; j < 32; j++) {\r\n if (j == 8 || j == 12 || j == 16 || j == 20)\r\n result = result + '-';\r\n i = Math.floor(Math.random() * 16).toString(16).toUpperCase();\r\n result = result + i;\r\n }\r\n return result;\r\n }\r\n\r\n public MakeNew_Plain(): string {\r\n var result: string;\r\n var i: string;\r\n var j: number;\r\n\r\n result = \"\";\r\n for (j = 0; j < 32; j++) {\r\n i = Math.floor(Math.random() * 16).toString(16).toUpperCase();\r\n result = result + i;\r\n }\r\n return result;\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\n//import { Response } from '@angular/common/http';\r\n\r\nimport { active_call } from \"../objects/active_call\";\r\n\r\nimport { Guid_Service } from \"./system/Guid_Service\";\r\n\r\n@Injectable()\r\nexport class Call_Info_Service {\r\n\r\n active_calls: active_call[];\r\n error_calls: active_call[];\r\n audit_calls: active_call[];\r\n logged_in: boolean = true;\r\n showProgress : boolean = false;\r\n\r\n constructor(private guid: Guid_Service) {\r\n this.active_calls = [];\r\n this.error_calls = [];\r\n this.audit_calls = [];\r\n }\r\n\r\n Add_Active_Call(active_call: active_call) {\r\n active_call.guid = this.guid.MakeNew();\r\n active_call.start_time = Date.now();\r\n\r\n this.active_calls.unshift(active_call);\r\n\r\n return active_call;\r\n }\r\n\r\n Error_Call(guid: string, error_info: any) {\r\n var current_call = this.active_calls.find(f => f.guid == guid);\r\n current_call.error_message = error_info.toString();\r\n current_call.status_code = error_info.status;\r\n current_call.end_time = Date.now();\r\n\r\n this.error_calls.unshift(current_call);\r\n this.Remove_Active_Call(guid);\r\n\r\n if (error_info.status == 401) {\r\n this.logged_in = false;\r\n }\r\n }\r\n\r\n Remove_Active_Call(guid: string) {\r\n var Index = this.active_calls.findIndex(f => f.guid == guid);\r\n if (Index > -1) {\r\n var current_call = this.active_calls.find(f => f.guid == guid);\r\n current_call.end_time = Date.now();\r\n current_call.processing_milliseconds = current_call.end_time - current_call.start_time;\r\n\r\n this.audit_calls.unshift(current_call);\r\n\r\n this.active_calls.splice(Index, 1);\r\n }\r\n }\r\n\r\n Currently_Logged_In(): boolean {\r\n return this.logged_in;\r\n }\r\n}\r\n","export class environment {\r\n public production: boolean = false;\r\n public environment_name: string;\r\n public identity_scope: string;\r\n public identity_server: string;\r\n public identity_server_app_id: string;\r\n public identity_server_api_key: string;\r\n public identity_server_login_redirect: string;\r\n public identity_client_id: string;\r\n public identity_client_secret: string;\r\n public identity_realm: string;\r\n\r\n public agent_identity_server: string;\r\n \r\n public app_id: string;\r\n public api_key: string;\r\n\r\n public api_internal_sales: string;\r\n public api_internal_cache: string;\r\n public api_internal_maintenance: string;\r\n public tms_orig_baseurl: string;\r\n public api_internal_gateway: string;\r\n public microservice_app_id: string;\r\n public microservice_api_key: string;\r\n\r\n public app_build_version : string;\r\n public app_build_date: string;\r\n public app_build_description: string;\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { environment } from '../objects/environment';\r\n\r\n@Injectable()\r\nexport class Environment_Service {\r\n public environment: environment = new environment();\r\n}\r\n","export class active_call {\r\n public guid: string;\r\n public start_time: number;\r\n public end_time: number;\r\n public call_url: string;\r\n public method: string;\r\n public processing_milliseconds: number;\r\n public error_code: string;\r\n public error_message: string;\r\n public status_code: number;\r\n}\r\n","export class pagination {\r\n public total_count: number;\r\n public page_size: number;\r\n public current_page: number;\r\n public total_pages: number;\r\n public previous_page_link: string;\r\n public next_page_link: string;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpHeaders, HttpParams, HttpResponse } from '@angular/common/http';\r\nimport { OAuthService } from 'angular-oauth2-oidc';\r\nimport { Observable } from 'rxjs';\r\n\r\nimport { active_call } from \"../objects/active_call\";\r\nimport { pagination } from \"../objects/pagination\";\r\n\r\nimport { Call_Info_Service } from \"./Call_Info_Service\";\r\nimport { share } from 'rxjs/operators';\r\n\r\n@Injectable()\r\nexport class Response_Service {\r\n\r\n constructor(private http: HttpClient, private oAuthService: OAuthService, private Call_Info_Service: Call_Info_Service) {\r\n }\r\n\r\n private Add_Call_Info(URL: string) {\r\n var active_call_info = new active_call();\r\n active_call_info.call_url = URL;\r\n\r\n return this.Call_Info_Service.Add_Active_Call(active_call_info);\r\n }\r\n\r\n public getResponseInfo(URL: string, Bearer_Token: string): Observable {\r\n\r\n var call_info = this.Add_Call_Info(URL);\r\n\r\n var Headers = new HttpHeaders().set(\"Authorization\", \"Bearer \" + Bearer_Token);\r\n\r\n var Output = this.http.get(URL, { headers: Headers }).pipe(share());\r\n Output.subscribe(null,\r\n error => this.Call_Info_Service.Error_Call(call_info.guid, error),\r\n () => this.Call_Info_Service.Remove_Active_Call(call_info.guid)\r\n );\r\n\r\n return Output;\r\n }\r\n\r\n private bearer_header() {\r\n var Headers = new HttpHeaders().set(\"Authorization\", \"Bearer \" + this.oAuthService.getAccessToken());\r\n\r\n return Headers;\r\n }\r\n\r\n private soap_header() {\r\n var Headers = new HttpHeaders().set(\"Content-Type\", \"application/soap+xml\");\r\n\r\n return Headers;\r\n }\r\n\r\n private getResponse_Paged_Info(URL: string, Bearer_Token: string) {\r\n\r\n var call_info = this.Add_Call_Info(URL);\r\n\r\n// var Output = this.http.get(URL, this.bearer_header());\r\n var Output = this.http.get(URL, { observe: 'response' }).pipe(share());\r\n Output.subscribe(null,\r\n error => this.Call_Info_Service.Error_Call(call_info.guid, error),\r\n () => this.Call_Info_Service.Remove_Active_Call(call_info.guid));\r\n\r\n// return Output.catch(this.handleError);\r\n return Output;\r\n }\r\n\r\n public get_Data_Secure(URL: string, password: string) {\r\n var call_info = this.Add_Call_Info(URL);\r\n\r\n var Output = this.http.get(URL, { headers: new HttpHeaders().set(\"x-request-tms-call-authentication\", password), observe: \"response\" }).pipe(share());\r\n Output.subscribe(null,\r\n error => this.Call_Info_Service.Error_Call(call_info.guid, error),\r\n () => this.Call_Info_Service.Remove_Active_Call(call_info.guid)\r\n );\r\n\r\n return Output;\r\n }\r\n\r\n public post_Data_Secure(url: string, input_data: any, password: string): Observable> {\r\n var call_info = this.Add_Call_Info(url);\r\n\r\n var Output = this.http.post(url, input_data, { headers: new HttpHeaders().set(\"x-request-tms-call-authentication\", password), observe: \"response\" }).pipe(share());\r\n\r\n Output.subscribe(null,\r\n error => this.Call_Info_Service.Error_Call(call_info.guid, error),\r\n () => this.Call_Info_Service.Remove_Active_Call(call_info.guid));\r\n\r\n return Output;\r\n }\r\n\r\n public post_Data(url: string, input_data: any) {\r\n var call_info = this.Add_Call_Info(url);\r\n\r\n var Output = this.http.post(url, input_data, { headers: this.bearer_header() , observe: \"response\" } ).pipe(share());\r\n\r\n Output.subscribe(null,\r\n error => this.Call_Info_Service.Error_Call(call_info.guid, error),\r\n () => this.Call_Info_Service.Remove_Active_Call(call_info.guid));\r\n\r\n return Output;\r\n }\r\n\r\n public post_Data_URL_Encoded(url: string, Post_Body: HttpParams) {\r\n return this.http.post(url, Post_Body.toString(), { headers: new HttpHeaders().set(\"Content-Type\", \"application/x-www-form-urlencoded\")}).pipe(share());\r\n }\r\n\r\n public put_Data(url: string, input_data: any) {\r\n var call_info = this.Add_Call_Info(url);\r\n\r\n var Output = this.http.put(url, input_data, { headers: this.bearer_header(), observe: \"response\" }).pipe(share());\r\n\r\n Output.subscribe(null,\r\n error => this.Call_Info_Service.Error_Call(call_info.guid, error),\r\n () => this.Call_Info_Service.Remove_Active_Call(call_info.guid));\r\n\r\n return Output;\r\n }\r\n\r\n public delete_Data(url: string) {\r\n var call_info = this.Add_Call_Info(url);\r\n\r\n var Output = this.http.delete(url, { headers: this.bearer_header(), observe: \"response\" }).pipe(share());\r\n Output.subscribe(null,\r\n error => this.Call_Info_Service.Error_Call(call_info.guid, error),\r\n () => this.Call_Info_Service.Remove_Active_Call(call_info.guid));\r\n\r\n return Output;\r\n }\r\n\r\n public getPagination_Info(Data_Info: any) : pagination {\r\n if (Data_Info == null) {\r\n return new pagination;\r\n }\r\n\r\n if (Data_Info.headers == null) {\r\n return new pagination;\r\n }\r\n\r\n return JSON.parse(Data_Info.headers.get('X-Pagination'));\r\n }\r\n\r\n public getResponse_Paged(URL: string) {\r\n return this.getResponse_Paged_Info(URL, this.oAuthService.getAccessToken());\r\n }\r\n\r\n public getResponse(URL: string): Observable {\r\n return this.getResponseInfo(URL, this.oAuthService.getAccessToken());\r\n }\r\n\r\n public getResponse_Anonymous(URL: string) {\r\n var call_info = this.Add_Call_Info(URL);\r\n\r\n var Output = this.http.get(URL).pipe(share());\r\n Output.subscribe(null,\r\n error => this.Call_Info_Service.Error_Call(call_info.guid, error),\r\n () => this.Call_Info_Service.Remove_Active_Call(call_info.guid)\r\n );\r\n\r\n return Output;\r\n\r\n// return Output.map(response => response).catch(this.handleError);\r\n }\r\n\r\n\r\n public get_Soap_Data(url: string, input_data: any) {\r\n var call_info = this.Add_Call_Info(url);\r\n\r\n var Output = this.http.post(url, input_data, { headers: this.soap_header() , observe: \"response\" } ).pipe(share());\r\n\r\n Output.subscribe(null,\r\n error => this.Call_Info_Service.Error_Call(call_info.guid, error),\r\n () => this.Call_Info_Service.Remove_Active_Call(call_info.guid));\r\n\r\n return Output;\r\n }\r\n\r\n private handleError(error: Response) {\r\n console.error(error);\r\n return Observable.throw(error.json() || \"Server Error\");\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { pagination } from \"../../system/objects/pagination\";\r\n\r\n@Injectable()\r\nexport class Pagination_Service {\r\n\r\n constructor() { }\r\n\r\n public Array_Paginator(items, page?: string, page_size?: number) {\r\n\r\n var paging = new pagination;\r\n\r\n paging.current_page = Number(page) || 1;\r\n paging.page_size = page_size || 10;\r\n paging.total_count = items.length;\r\n\r\n var offset = (paging.current_page - 1) * paging.page_size;\r\n var paginatedItems = items.slice(offset).slice(0, paging.page_size);\r\n var total_pages = Math.ceil(items.length / paging.page_size);\r\n var next_page_link = (total_pages > paging.current_page) ? paging.current_page + 1 : null;\r\n var previous_page_link = paging.current_page - 1 ? paging.current_page - 1 : null;\r\n\r\n paging.total_pages = total_pages;\r\n\r\n if (next_page_link != null) {\r\n paging.next_page_link = String(next_page_link);\r\n }\r\n if (previous_page_link != null) {\r\n paging.previous_page_link = String(previous_page_link);\r\n }\r\n return {\r\n pagination: paging,\r\n data: paginatedItems\r\n };\r\n }\r\n\r\n}","import { calendar_week } from \"./Calendar_Week\";\r\n\r\nexport class calendar_month {\r\n public weeks: calendar_week[];\r\n}\r\n","import { calendar_day } from \"./Calendar_Day\";\r\n\r\nexport class calendar_week {\r\n public days: calendar_day[];\r\n}\r\n","export class calendar_day {\r\n public name : string;\r\n public number : number;\r\n public is_current_month : boolean;\r\n public is_today : boolean;\r\n public date : string;\r\n public output_date : string;\r\n public isOnRequest : boolean;\r\n public hasDeparture : boolean = false;\r\n public totalCapacity : number = -1;\r\n public fromPrice : number = -1;\r\n public toPrice : number = -1;\r\n}\r\n","//import { Injectable, SystemJsNgModuleLoader } from '@angular/core';\r\nimport { Injectable } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class Date_Service {\r\n\r\n month_names: string[] = [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"];\r\n day_names: string[] = [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"];\r\n\r\n constructor() {\r\n }\r\n\r\n is_today(test_date: Date): boolean {\r\n return test_date.getDate() == new Date(Date.now()).getDate() && test_date.getMonth() == new Date(Date.now()).getMonth() && test_date.getFullYear() == new Date(Date.now()).getFullYear();\r\n }\r\n\r\n string_date(test_date: Date): string {\r\n return test_date.getFullYear() + \"-\" + (test_date.getMonth() + 1) + \"-\" + (test_date.getDate());\r\n }\r\n\r\n string_date_output(test_date: Date): string {\r\n return test_date.getFullYear() + \"-\" + this.padded_date(test_date.getMonth()) + \"-\" + this.padded_date(test_date.getDate());\r\n }\r\n\r\n compare_date(date: string): string {\r\n var input_date: Date = new Date(date);\r\n \r\n return input_date.getFullYear() + \"-\" + this.padded_date(input_date.getMonth()) + \"-\" + this.padded_date(input_date.getDate());\r\n }\r\n\r\n output_date(date: string): string {\r\n var input_date: Date = new Date(date);\r\n \r\n return input_date.getFullYear() + \"-\" + this.padded_date(input_date.getMonth() + 1) + \"-\" + this.padded_date(input_date.getDate());\r\n }\r\n\r\n padded_date(input_info: number): string {\r\n return (\"0\" + input_info).substr(input_info.toString().length - 1);\r\n }\r\n\r\n full_date(date: string): string {\r\n if (date == undefined) { return \"\"; }\r\n\r\n var date_string = new Date(date);\r\n\r\n return this.day_names[date_string.getDay()] + \" \" + date_string.getDate() + \" \" + this.month_names[date_string.getMonth()] + \" \" + date_string.getFullYear();\r\n }\r\n\r\n remove_time(date: Date) {\r\n return date.setHours(0, 0, 0, 0);\r\n }\r\n\r\n previous_monday(from_date: Date): Date {\r\n\r\n var mDifference = from_date.getDay() - 1;\r\n\r\n if (mDifference < 0) {\r\n mDifference += 7;\r\n }\r\n\r\n from_date.setDate(from_date.getDate() + (mDifference * -1));\r\n\r\n return from_date;\r\n }\r\n\r\n next_month(year: number, month: number): Date {\r\n var Current_Month = new Date(year, month, 1);\r\n\r\n return Current_Month;\r\n }\r\n\r\n month_name_month(month: number): string {\r\n return this.month_names[month - 1];\r\n }\r\n\r\n month_name_date(date: Date): string {\r\n return this.month_names[date.getMonth()];\r\n }\r\n\r\n utc_time_from_1970(): number {\r\n return new Date(Date.now()).getTime() / 1000 | 0;\r\n }\r\n\r\n getReturnDate(startDate: string, duration: number) : string {\r\n if (startDate == undefined || startDate == \"\") return \"\";\r\n\r\n var retrunDate = new Date(startDate);\r\n retrunDate.setDate(retrunDate.getDate() + (duration - 1));\r\n \r\n return this.string_date(retrunDate);\r\n }\r\n\r\n getReturnDateAsLongString(startDate: string, duration: number) : string {\r\n var returnDate : string = this.getReturnDate(startDate, duration);\r\n return this.full_date(returnDate);\r\n }\r\n\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { Date_Service } from \"./Date_Service\";\r\n\r\nimport { calendar_month } from \"../../objects/System/Calendar_Month\";\r\nimport { calendar_week } from \"../../objects/System/Calendar_Week\";\r\nimport { calendar_day } from \"../../objects/System/Calendar_Day\";\r\n\r\n@Injectable()\r\nexport class Calendar_Service {\r\n constructor(private Date_Service: Date_Service) {\r\n }\r\n\r\n build_month(start_date: Date): calendar_month {\r\n\r\n var monthIndex = start_date.getMonth();\r\n\r\n start_date.setDate(start_date.getDate() - (start_date.getDate() - 1));\r\n start_date = this.Date_Service.previous_monday(start_date);\r\n\r\n var calendar_month_output = new calendar_month();\r\n calendar_month_output.weeks = [];\r\n\r\n var done = false, date = start_date, count = 0;\r\n\r\n while (!done) {\r\n calendar_month_output.weeks.push(this.build_week(new Date(date), monthIndex));\r\n date.setDate(date.getDate() + 7);\r\n done = count++ > 2 && monthIndex !== date.getMonth();\r\n monthIndex = date.getMonth();\r\n }\r\n\r\n return calendar_month_output;\r\n };\r\n\r\n build_week(date: Date, current_month: number): calendar_week {\r\n var week: calendar_week = new calendar_week();\r\n week.days = [];\r\n\r\n for (var i = 0; i < 7; i++) {\r\n\r\n var day: calendar_day = new calendar_day();\r\n day.name = date.getDate().toString();\r\n day.number = date.getDate();\r\n day.is_current_month = date.getMonth() === current_month;\r\n day.is_today = this.Date_Service.is_today(date);\r\n day.date = this.Date_Service.string_date(date);\r\n day.output_date = this.Date_Service.string_date_output(date);\r\n\r\n week.days.push(day);\r\n\r\n date.setDate(date.getDate() + 1);\r\n }\r\n return week;\r\n };\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport * as crypto from \"crypto-js\";\r\n\r\n@Injectable()\r\nexport class Service_Cryptography {\r\n constructor() {\r\n }\r\n\r\n generate_hash(crypto_key: string, secret: string): string {\r\n return crypto.HmacSHA256(secret, crypto_key).toString(crypto.enc.Base64);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { Guid_Service } from './Guid_Service';\r\nimport { Date_Service } from './Date_Service';\r\nimport { Service_Cryptography } from './Cryptography_Service';\r\nimport * as crypto from \"crypto-js\";\r\n\r\n@Injectable()\r\nexport class Service_Security {\r\n constructor(public Service_Date: Date_Service, public Service_Guid: Guid_Service, private Service_Cryptography: Service_Cryptography) {\r\n }\r\n\r\n randomString(length : number, chars : string) {\r\n var result = \"\";\r\n for (var i = length; i > 0; --i)\r\n result += chars[Math.floor(Math.random() * chars.length)];\r\n\r\n return result;\r\n }\r\n\r\n generate_hash = (app_id: string, api_key: string) => {\r\n if (app_id == undefined || api_key == undefined || app_id == \"\" || api_key == \"\") {\r\n console.log(\"app_id or api_key undefined or empty!\")\r\n }\r\n \r\n const randomstring = this.Service_Guid.MakeNew_Plain(); //this.randomString(32, \"abcdefghijklmnopqrstuvwxyz\");\r\n const timestamp = Math.ceil(Date.now() / 1000);\r\n const data = app_id + timestamp + randomstring;\r\n const key = crypto.enc.Base64.parse(api_key);\r\n const hash = crypto.HmacSHA256(data, key);\r\n const encoded = crypto.enc.Base64.stringify(hash);\r\n\r\n return encoded + \":\" + randomstring + \":\" + timestamp;\r\n };\r\n \r\n\r\n}\r\n","export class tms_internal_user_info {\r\n public sub: string;\r\n public name: string;\r\n public operator_id: string;\r\n public operator: string;\r\n public finance_centre_id: string;\r\n public finance_centre: string;\r\n public user_id: string;\r\n public user_photo_url: string;\r\n public certificate: string;\r\n}\r\n","export class v1_3_identity_request {\r\n public access_token: string;\r\n public user_name: string;\r\n}\r\n","import { v1_3_identity_claim_options_scope } from \"./v1_3_identity_claim_options_scope\";\r\n\r\nexport class v1_3_identity_claim_options {\r\n public scopes: v1_3_identity_claim_options_scope[];\r\n}\r\n","export class v1_3_identity_switch_certificate_request {\r\n public user_name: string;\r\n public finance_centre_id: number;\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LocalStorage_Service {\r\n\r\n private KEY_ACCESSTOKEN: string = 'AccessToken';\r\n\r\n constructor() { }\r\n\r\n private setData(key: string, value: string) {\r\n localStorage.setItem(key, value);\r\n }\r\n\r\n private getData(key: string) {\r\n return localStorage.getItem(key)\r\n }\r\n private removeData(key: string) {\r\n localStorage.removeItem(key);\r\n }\r\n\r\n public clearData() {\r\n localStorage.clear();\r\n }\r\n\r\n public setAccessToken(token: string) {\r\n this.setData(this.KEY_ACCESSTOKEN, token);\r\n }\r\n\r\n public getAccessToken() : string {\r\n return this.getData(this.KEY_ACCESSTOKEN);\r\n }\r\n\r\n public removeAccessToken() {\r\n this.removeData(this.KEY_ACCESSTOKEN);\r\n }\r\n\r\n}\r\n\r\n","import { Injectable, Optional, SkipSelf } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { HttpParams, HttpResponse } from '@angular/common/http';\r\nimport { Observable, Subject, of } from 'rxjs';\r\n\r\nimport { OAuthService, AuthConfig, JwksValidationHandler } from 'angular-oauth2-oidc';\r\n\r\nimport { Environment_Service } from \"../Environment_Service\";\r\nimport { LocalStorage_Service } from \"../system/LocalStorage_Service\";\r\n\r\nimport { token_login } from \"./../../objects/identity/token_login\";\r\nimport { tms_internal_user_info } from '../../objects/System/user_info/tms_internal_user_info';\r\nimport { error_message } from \"./../../objects/identity/error_message\";\r\n\r\nimport { v1_3_identity_request } from \"../../objects/identity/v1_3_identity_request\";\r\nimport { v1_3_identity_claim_options } from \"../../objects/identity/claims/v1_3_identity_claim_options\";\r\n\r\nimport { v1_3_identity_switch_certificate_request } from \"../../objects/identity/switch_certificate/v1_3_identity_switch_certificate_request\";\r\nimport { v1_3_identity_switch_certificate_response } from \"../../objects/identity/switch_certificate/v1_3_identity_switch_certificate_response\";\r\n\r\nimport { Response_Service } from \"../Response_Service\";\r\nimport { Call_Info_Service } from \"../Call_Info_Service\";\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class OAuth_Service {\r\n\r\n constructor(\r\n private oAuthService: OAuthService,\r\n private Response_Service: Response_Service,\r\n private Call_Info_Service: Call_Info_Service,\r\n private Environment_Service: Environment_Service,\r\n private router: Router,\r\n private localStorage_Service: LocalStorage_Service,\r\n @Optional() @SkipSelf() parentModule?: OAuth_Service) {\r\n // this.initialise_OAuth();\r\n if (parentModule) {\r\n throw new Error(\r\n 'OAuth_Service is already loaded. Import it in the AppModule only');\r\n }\r\n }\r\n //private access_token: string = null;\r\n\r\n public user_info: tms_internal_user_info = new tms_internal_user_info();\r\n claim_info: v1_3_identity_claim_options = new v1_3_identity_claim_options();\r\n\r\n public initialise_OAuth() {\r\n var authConfig: AuthConfig = new AuthConfig();\r\n authConfig.issuer = this.Environment_Service.environment.identity_server;\r\n authConfig.redirectUri = window.location.protocol + \"//\" + window.location.host;\r\n authConfig.clientId = this.Environment_Service.environment.identity_client_id;\r\n authConfig.scope = this.Environment_Service.environment.identity_scope;\r\n authConfig.silentRefreshRedirectUri = window.location.origin + '/assets/silent-refresh.html';\r\n \r\n this.oAuthService.configure(authConfig);\r\n this.oAuthService.setupAutomaticSilentRefresh();\r\n //this.oAuthService.tokenValidationHandler = new JwksValidationHandler();\r\n this.oAuthService.loadDiscoveryDocumentAndTryLogin();\r\n }\r\n\r\n public login() {\r\n this.oAuthService.initImplicitFlow();\r\n }\r\n\r\n public logoff() {\r\n this.localStorage_Service.removeAccessToken();\r\n this.oAuthService.logOut();\r\n }\r\n\r\n public getUser_Info() {\r\n if (this.isLoggedIn() == true) {\r\n var token = this.getToken();\r\n console.log('get userinfo with token: ' + token.substring(token.length - 25));\r\n return this.Response_Service.getResponseInfo(this.Environment_Service.environment.identity_server + \"/connect/userinfo\", token);\r\n }\r\n }\r\n\r\n public getLogin_Password(User_Name: string, Password: string) {\r\n this.oAuthService.tokenEndpoint = this.Environment_Service.environment.identity_server + \"/connect/token\";\r\n this.oAuthService.clientId = this.Environment_Service.environment.identity_client_id;\r\n this.oAuthService.dummyClientSecret = this.Environment_Service.environment.identity_client_secret;\r\n\r\n return this.oAuthService.fetchTokenUsingPasswordFlow(User_Name, Password);\r\n }\r\n\r\n public isLoggedIn(): boolean {\r\n return (this.oAuthService.getAccessToken() != null && this.Call_Info_Service.Currently_Logged_In() == true);\r\n }\r\n\r\n public setToken(token: string) {\r\n console.log('set token: ' + token.substring(token.length - 25));\r\n //this.access_token = token;\r\n this.localStorage_Service.setAccessToken(token);\r\n console.log('token set: ' + this.getTokenFromStorage().substring(this.getTokenFromStorage().length - 25));\r\n }\r\n\r\n public getTokenFromStorage() {\r\n return this.localStorage_Service.getAccessToken();\r\n }\r\n\r\n public getToken(): string {\r\n if (this.Call_Info_Service.Currently_Logged_In() == true) {\r\n if (this.getTokenFromStorage() != null) {\r\n return this.getTokenFromStorage();\r\n }\r\n var accessToken = this.oAuthService.getAccessToken();\r\n this.localStorage_Service.setAccessToken(accessToken);\r\n return accessToken;\r\n }\r\n return \"\";\r\n }\r\n\r\n public getError_Message(errorId: string): Observable {\r\n return this.Response_Service.getResponse(this.Environment_Service.environment.identity_server + \"/api/v1/identity/error?errorId=\" + errorId);\r\n }\r\n\r\n public getUser_Claims(identity_login: v1_3_identity_request): Observable> {\r\n return this.Response_Service.post_Data(this.Environment_Service.environment.identity_server + \"/api/v1.3/\" + this.Environment_Service.environment.identity_server_app_id + \"/identity/login/claims\", identity_login);\r\n }\r\n\r\n public cacheUserInfo() {\r\n this.getUser_Info().subscribe(\r\n User_Info => {\r\n console.log('User Info received: ' + User_Info.operator_id + '-' + User_Info.finance_centre_id);\r\n this.user_info = User_Info;\r\n var Identity_Request: v1_3_identity_request = new v1_3_identity_request();\r\n Identity_Request.user_name = User_Info.name;\r\n\r\n this.getUser_Claims(Identity_Request).subscribe(Claim_Response => {\r\n this.claim_info = Claim_Response.body;\r\n //this.currentUserFinanceCentreId = this.claim_info.scopes[0].controls[0].value;\r\n this.user_info.certificate = this.claim_info.scopes[0].controls[0].options.find(fc => fc.id == this.user_info?.finance_centre_id).name;\r\n });\r\n },\r\n err => {\r\n //issue with getting the userinfo, could be because of expired token, logout.\r\n //would really need a refreshtoken here?\r\n console.log(err);\r\n\r\n //logout\r\n this.user_info = null;\r\n this.localStorage_Service.removeAccessToken();\r\n this.logoff();\r\n\r\n //try to login\r\n this.login();\r\n }\r\n );\r\n }\r\n\r\n public Switch_Certificate(User_Name: string, Finance_Centre_ID: string): Observable> {\r\n var Switch_Certificate_Request: v1_3_identity_switch_certificate_request = new v1_3_identity_switch_certificate_request();\r\n Switch_Certificate_Request.user_name = User_Name;\r\n Switch_Certificate_Request.finance_centre_id = +Finance_Centre_ID;\r\n\r\n return this.Response_Service.post_Data(this.Environment_Service.environment.identity_server + \"/api/v1.3/\" + this.Environment_Service.environment.identity_server_app_id + \"/identity/login/switch_certificate\", Switch_Certificate_Request);\r\n }\r\n\r\n public get_Logout() {\r\n var Post_Body: HttpParams = new HttpParams();\r\n Post_Body.set(\"token\", this.oAuthService.getAccessToken());\r\n Post_Body.set(\"client_id\", this.Environment_Service.environment.identity_client_id);\r\n Post_Body.set(\"client_secret\", this.Environment_Service.environment.identity_client_secret);\r\n\r\n this.Response_Service.post_Data_URL_Encoded(this.Environment_Service.environment.identity_server + \"/connect/revocation\", Post_Body);\r\n\r\n this.localStorage_Service.removeAccessToken();\r\n\r\n this.router.navigate([\"/account/login\"]);\r\n }\r\n\r\n public loadAndAuthorize(): Promise {\r\n return this.oAuthService.loadDiscoveryDocumentAndTryLogin()\r\n .then(() => {\r\n if (!this.oAuthService.hasValidAccessToken()) {\r\n this.oAuthService.initImplicitFlow();\r\n }\r\n else {\r\n return this.oAuthService.loadUserProfile().then(() => {\r\n return this.oAuthService.hasValidAccessToken();\r\n });\r\n }\r\n });\r\n }\r\n\r\n get isAuthorized() {\r\n return this.oAuthService.loadDiscoveryDocumentAndTryLogin().then(() => {\r\n return this.oAuthService.hasValidAccessToken();\r\n });\r\n }\r\n\r\n get identityClaims(): tms_internal_user_info {\r\n return Object.assign(this.oAuthService.getIdentityClaims());\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { user } from \"../../../objects/maintenance/User/User\";\r\n\r\nimport { Environment_Service } from \"../../../../../../system/services/Environment_Service\";\r\nimport { Response_Service } from \"../../../../../../system/services/Response_Service\";\r\n\r\n@Injectable()\r\nexport class User_Service {\r\n\r\n constructor(private Response_Service: Response_Service, private Environment_Service: Environment_Service) { }\r\n\r\n getUser_List(paged_url: string) {\r\n\r\n if (paged_url != null) {\r\n return this.Response_Service.getResponse_Paged(paged_url);\r\n }\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.identity_server + \"/api/v1/user\");\r\n }\r\n getUsers(page_number:number,page_size:number, Search: string) {\r\n\r\n if (page_number != null && page_size != null) {\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.identity_server + \"/api/v1/user?page_number=\"+ page_number +\"&page_size=\" + page_size);\r\n }\r\n\r\n var search_options: string[] = [];\r\n\r\n if (Search != \"\") {\r\n search_options.push(\"search=\" + Search);\r\n }\r\n\r\n\r\n var search_option: string = \"\";\r\n\r\n for (var index = 0; index < search_options.length; index++) {\r\n search_option = search_option + ((index == 0) ? \"?\" : \"&\") + search_options[index];\r\n }\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.identity_server + \"/api/v1/user\" + search_option);\r\n }\r\n\r\n updateUser(userId: number, new_user: user) {\r\n return this.Response_Service.put_Data(this.Environment_Service.environment.identity_server + \"/api/v1/user/\" + userId, new_user);\r\n }\r\n addUser(new_user: user) {\r\n return this.Response_Service.post_Data(this.Environment_Service.environment.identity_server + \"/api/v1/user/\", new_user);\r\n }\r\n deleteUser(user: user) {\r\n return this.Response_Service.delete_Data(this.Environment_Service.environment.identity_server + \"/api/v1/user/\" + user.id);\r\n }\r\n getUserByID(paged_url: string, user_id: number) {\r\n if (paged_url != null) {\r\n return this.Response_Service.getResponse_Paged(paged_url);\r\n }\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.identity_server + \"/api/v1/user/\" + user_id);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { user } from '../../tms/identity/internal/objects/maintenance/User/User';\r\n\r\nimport { User_Service } from '../../tms/identity/internal/services/maintenance/User/User';\r\nimport { OAuth_Service } from './system/OAuth_Service';\r\nimport { Helper_Service } from '../../material_ui/services/Core/Helper_Service';\r\n\r\n@Injectable()\r\nexport class Permissions_Service {\r\n\r\n constructor(private User_Service: User_Service, private OAuth_Service: OAuth_Service, private Helper_Service: Helper_Service) { }\r\n\r\n checkAuthenticationClaims(claim: string): boolean | Observable {\r\n var hasAccess: boolean = false;\r\n if (this.OAuth_Service.isAuthorized) {\r\n return this.User_Service.getUserByID(null, parseInt(this.OAuth_Service.identityClaims.user_id)).pipe(\r\n map((res) => {\r\n (res.body).user_groups.forEach(group => {\r\n if (group.groups.group_claims.some(x => x.claim.name === claim)) {\r\n hasAccess = true;\r\n }\r\n })\r\n if (hasAccess == false) {\r\n this.Helper_Service.openSnackbarNotification(\"You do not have permission to access this link\", \"Close\", \"error\");\r\n }\r\n return hasAccess;\r\n }\r\n ));\r\n }\r\n else {\r\n return hasAccess\r\n }\r\n\r\n }\r\n}","/* https://www.acagroup.be/en/blog/how-to-use-the-broadcastchannel-api-angular/ */\r\n\r\nimport { Injectable, NgZone } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { filter } from 'rxjs/operators';\r\nimport { runInZone } from './RunInZone_Service';\r\n\r\nexport interface BroadcastMessage {\r\n type: string;\r\n payload: any;\r\n}\r\n\r\nexport interface BroadcastMessagePayload {\r\n fcid: string;\r\n token: string;\r\n} \r\n\r\n@Injectable()\r\nexport class Broadcast_Service {\r\n public broadcastChannel: BroadcastChannel;\r\n public onMessage = new Subject();\r\n private broadcastChannelName: string = 'tmsv3';\r\n\r\n public MESSAGETYPE_FINANCENTERSWITCH: string = 'FINANCENTERSWITCH';\r\n\r\n // constructor(broadcastChannelName: string) {\r\n // this.broadcastChannel = new BroadcastChannel(broadcastChannelName);\r\n // this.broadcastChannel.onmessage = (message) => this.onMessage.next(message.data);\r\n // }\r\n\r\n constructor(private ngZone: NgZone) {\r\n this.broadcastChannel = new BroadcastChannel(this.broadcastChannelName);\r\n this.broadcastChannel.onmessage = (message) => this.onMessage.next(message.data);\r\n }\r\n\r\n publish(message: BroadcastMessage): void {\r\n this.broadcastChannel.postMessage(message);\r\n console.log(\"Message broadcasted: \", message);\r\n }\r\n\r\n messagesOfType(type: string): Observable {\r\n return this.onMessage.pipe(\r\n // It is important that we are running in the NgZone. This will make sure that Angular component changes are immediately visible in the browser when they are updated after receiving messages.\r\n runInZone(this.ngZone),\r\n filter(message => message.type === type)\r\n );\r\n }\r\n\r\n}\r\n\r\n// export const DEMO_BROADCAST_SERVICE_TOKEN = new InjectionToken('tmsv3BroadcastService', {\r\n// factory: () => {\r\n// return new Broadcast_Service('tmsv3_fcswitch');\r\n// },\r\n// });","import { Observable, OperatorFunction } from 'rxjs';\r\nimport { NgZone } from '@angular/core';\r\n\r\n/**\r\n * Custom OperatorFunction that makes sure that all lifecycle hooks of an Observable\r\n * are running in the NgZone.\r\n */\r\nexport function runInZone(zone: NgZone): OperatorFunction {\r\n return (source) => {\r\n return new Observable(observer => {\r\n const onNext = (value: T) => zone.run(() => observer.next(value));\r\n const onError = (e: any) => zone.run(() => observer.error(e));\r\n const onComplete = () => zone.run(() => observer.complete());\r\n return source.subscribe(onNext, onError, onComplete);\r\n });\r\n };\r\n}","import { Injectable } from '@angular/core';\r\nimport { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\r\nimport { Observable } from 'rxjs';\r\n\r\nimport { OAuth_Service } from '../services/system/OAuth_Service';\r\n\r\n\r\n@Injectable()\r\nexport class Auth_Guard implements CanActivate {\r\n\r\n constructor(private OAuth_Service: OAuth_Service) {\r\n this.OAuth_Service.initialise_OAuth();\r\n }\r\n\r\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | Observable | Promise {\r\n return this.OAuth_Service.loadAndAuthorize();\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\r\nimport { Observable } from 'rxjs';\r\n\r\nimport { OAuthService, AuthConfig, JwksValidationHandler } from 'angular-oauth2-oidc';\r\nimport { Environment_Service } from \"../../../modules/system/services/Environment_Service\";\r\n\r\n@Injectable()\r\nexport class oAuth_Internal_Identity_Guard implements CanActivate {\r\n\r\n constructor(private oAuthService: OAuthService,private Environment_Service: Environment_Service) {\r\n\r\n var authConfig: AuthConfig = new AuthConfig();\r\n authConfig.issuer = this.Environment_Service.environment.identity_server;\r\n authConfig.redirectUri = this.Environment_Service.environment.identity_server_login_redirect;\r\n authConfig.clientId = this.Environment_Service.environment.identity_client_id;\r\n authConfig.scope = this.Environment_Service.environment.identity_scope;\r\n authConfig.silentRefreshRedirectUri = window.location.origin + '/assets/silent-refresh.html';\r\n authConfig.requireHttps = false;\r\n this.oAuthService.configure(authConfig);\r\n this.oAuthService.tokenValidationHandler = new JwksValidationHandler();\r\n this.oAuthService.loadDiscoveryDocumentAndTryLogin();\r\n this.oAuthService.setupAutomaticSilentRefresh();\r\n }\r\n\r\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | Observable | Promise {\r\n\r\n return this.oAuthService.loadDiscoveryDocumentAndTryLogin()\r\n .then(() => {\r\n if (!this.oAuthService.hasValidAccessToken()) {\r\n this.oAuthService.initImplicitFlow();\r\n }\r\n else {\r\n return this.oAuthService.loadUserProfile().then(() => {\r\n return this.oAuthService.hasValidAccessToken();\r\n });\r\n }\r\n });\r\n }\r\n}","import { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { Material_Module } from \"../material_ui/material.module\";\r\n\r\nimport { Call_Audit_Component } from './components/Call_Audit';\r\nimport { Page_Not_Found_Component } from './components/Page_Not_Found';\r\nimport { Pagination_Component } from './components/Pagination';\r\n\r\nimport { Call_Info_Service } from './services/Call_Info_Service';\r\nimport { Environment_Service } from './services/Environment_Service';\r\nimport { Response_Service } from './services/Response_Service';\r\nimport { Pagination_Service } from \"./services/Pagination_Service\";\r\n\r\nimport { Calendar_Service } from './services/system/Calendar_Service';\r\nimport { Date_Service } from './services/system/Date_Service';\r\nimport { Service_Cryptography } from './services/system/Cryptography_Service';\r\nimport { Service_Security } from './services/system/Security_Service';\r\nimport { Guid_Service } from './services/system/Guid_Service';\r\nimport { OAuth_Service } from './services/system/OAuth_Service';\r\nimport { Permissions_Service } from './services/Permissions_Service';\r\nimport { Broadcast_Service } from './services/Broadcast_Service';\r\nimport { LocalStorage_Service } from './services/system/LocalStorage_Service'\r\n\r\nimport { NgbScrollSpy, NgbScrollTarget } from \"./components/scrollspy/scrollspy\";\r\n\r\nimport { Auth_Guard } from './guards/Auth_Guard';\r\nimport { oAuth_Internal_Identity_Guard } from './guards/oAuth_Internal_Identity_Guard';\r\n\r\n@NgModule({\r\n imports: [CommonModule, FormsModule, HttpClientModule, Material_Module],\r\n\r\n declarations: [Call_Audit_Component, Page_Not_Found_Component, Pagination_Component, NgbScrollSpy, NgbScrollTarget],\r\n\r\n exports: [Call_Audit_Component, Page_Not_Found_Component, Pagination_Component, NgbScrollSpy, NgbScrollTarget, Material_Module]\r\n})\r\nexport class Module_System {\r\n static forRoot(): ModuleWithProviders {\r\n return {\r\n ngModule: Module_System,\r\n providers: [Call_Info_Service, Environment_Service, Response_Service,\r\n Calendar_Service, Date_Service, Guid_Service, OAuth_Service, Pagination_Service,\r\n Service_Cryptography, Service_Security, Permissions_Service, Auth_Guard, oAuth_Internal_Identity_Guard,\r\n Broadcast_Service, LocalStorage_Service]\r\n };\r\n }\r\n}\r\n\r\n","import { NgModule } from '@angular/core';\r\nimport { Module_System } from '../../../../../system/system.module';\r\n\r\nimport { Component_External_API_Sync } from './api_server_sync/api_server_sync';\r\n\r\n@NgModule({\r\n imports: [\r\n Module_System,\r\n ],\r\n declarations: [\r\n Component_External_API_Sync\r\n ],\r\n exports: [\r\n Component_External_API_Sync\r\n ]\r\n})\r\nexport class HomeWidgetModule { }","import { Injectable } from '@angular/core';\r\n\r\nimport { web_search_engine } from \"../../../gateway/objects/Web_Search/web_search_engine\";\r\n\r\nimport { Environment_Service } from \"../../../../system/services/Environment_Service\";\r\nimport { Response_Service } from \"../../../../system/services/Response_Service\";\r\n\r\n@Injectable()\r\nexport class Web_Engine_Service {\r\n\r\n constructor(private Response_Service: Response_Service, private Environment_Service: Environment_Service) { }\r\n\r\n getWeb_Engine_List(page_number:number,page_size:number) {\r\n\r\n if (page_number != null && page_size != null) {\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/web_search/web_search_engine?page_number=\"+ page_number +\"&page_size=\" + page_size);\r\n }\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/web_search/web_search_engine\");\r\n }\r\n\r\n getWeb_Engines(paged_url: string, Search: string) {\r\n if (paged_url != null) {\r\n return this.Response_Service.getResponse_Paged(paged_url);\r\n }\r\n\r\n var search_options: string[] = [];\r\n\r\n if (Search != \"\") {\r\n search_options.push(\"search=\" + Search);\r\n }\r\n \r\n\r\n var search_option: string = \"\";\r\n\r\n for (var index = 0; index < search_options.length; index++) {\r\n search_option = search_option + ((index == 0) ? \"?\" : \"&\") + search_options[index];\r\n }\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/web_search/web_search_engine\" + search_option);\r\n }\r\n\r\n updateWeb_Engine(web_engine: web_search_engine) {\r\n return this.Response_Service.put_Data(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/web_search/web_search_engine\", web_engine);\r\n }\r\n\r\n addWeb_Engine(new_web_engine: web_search_engine) {\r\n return this.Response_Service.post_Data(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/web_search/web_search_engine\", new_web_engine);\r\n }\r\n\r\n deleteWeb_Engine(web_engine: web_search_engine) {\r\n return this.Response_Service.delete_Data(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/web_search/web_search_engine/\" + web_engine.id);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { web_search_filter } from \"../../../gateway/objects/Web_Search/web_search_filter\";\r\n\r\nimport { Environment_Service } from \"../../../../system/services/Environment_Service\";\r\nimport { Response_Service } from \"../../../../system/services/Response_Service\";\r\n\r\n@Injectable()\r\nexport class Web_Filter_Service {\r\n\r\n constructor(private Response_Service: Response_Service, private Environment_Service: Environment_Service) { }\r\n \r\n getWeb_Filter_List(page_number:number,page_size:number) {\r\n\r\n if (page_number != null && page_size != null) {\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/web_search/web_search_filter?page_number=\"+ page_number +\"&page_size=\" + page_size);\r\n }\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/web_search/web_search_filter\");\r\n }\r\n\r\n getWeb_Filters(paged_url: string, Search: string) {\r\n if (paged_url != null) {\r\n return this.Response_Service.getResponse_Paged(paged_url);\r\n }\r\n\r\n var search_options: string[] = [];\r\n\r\n if (Search != \"\") {\r\n search_options.push(\"search=\" + Search);\r\n }\r\n \r\n\r\n var search_option: string = \"\";\r\n\r\n for (var index = 0; index < search_options.length; index++) {\r\n search_option = search_option + ((index == 0) ? \"?\" : \"&\") + search_options[index];\r\n }\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/web_search/web_search_filter\" + search_option);\r\n }\r\n\r\n updateWeb_Filter(web_filter: web_search_filter) {\r\n return this.Response_Service.put_Data(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/web_search/web_search_filter\", web_filter);\r\n }\r\n\r\n addWeb_Filter(new_web_filter: web_search_filter) {\r\n return this.Response_Service.post_Data(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/web_search/web_search_filter\", new_web_filter);\r\n }\r\n\r\n deleteWeb_Filter(web_filter: web_search_filter) {\r\n return this.Response_Service.delete_Data(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/web_search/web_search_filter/\" + web_filter.id);\r\n }\r\n}","import { Injectable } from '@angular/core';\r\n\r\nimport { web_search_sales_group } from \"../../../gateway/objects/Web_Search/web_search_sales_group\";\r\n\r\nimport { Environment_Service } from \"../../../../system/services/Environment_Service\";\r\nimport { Response_Service } from \"../../../../system/services/Response_Service\";\r\n\r\n@Injectable()\r\nexport class Web_Search_Sales_Group_Service {\r\n\r\n constructor(private Response_Service: Response_Service, private Environment_Service: Environment_Service) { }\r\n\r\n getWeb_Sales_Group_List(page_number: number, page_size: number) {\r\n\r\n if (page_number != null && page_size != null) {\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/web_search/web_search_sales_group?page_number=\" + page_number + \"&page_size=\" + page_size);\r\n }\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/web_search/web_search_sales_group\");\r\n }\r\n\r\n getWeb_Sales_Group(paged_url: string, Search: string, pageSize: number) {\r\n if (paged_url != null) {\r\n return this.Response_Service.getResponse_Paged(paged_url);\r\n }\r\n\r\n var search_options: string[] = [];\r\n\r\n if (Search != \"\") {\r\n search_options.push(\"search=\" + Search);\r\n }\r\n\r\n if (pageSize != null) {\r\n search_options.push(\"page_number=1\");\r\n search_options.push(\"page_size=\" + pageSize);\r\n }\r\n\r\n var search_option: string = \"\";\r\n\r\n for (var index = 0; index < search_options.length; index++) {\r\n search_option = search_option + ((index == 0) ? \"?\" : \"&\") + search_options[index];\r\n }\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/web_search/web_search_sales_group\" + search_option);\r\n }\r\n\r\n getWeb_Sales_Group_For_Product(paged_url: string, Search: string, pageSize: number) {\r\n if (paged_url != null) {\r\n return this.Response_Service.getResponse_Paged(paged_url);\r\n }\r\n\r\n var search_options: string[] = [];\r\n\r\n if (Search != \"\") {\r\n search_options.push(\"search=\" + Search);\r\n }\r\n\r\n if (pageSize != null) {\r\n search_options.push(\"page_number=1\");\r\n search_options.push(\"page_size=\" + pageSize);\r\n }\r\n\r\n var search_option: string = \"\";\r\n\r\n for (var index = 0; index < search_options.length; index++) {\r\n search_option = search_option + ((index == 0) ? \"?\" : \"&\") + search_options[index];\r\n }\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/web_search/web_search_sales_group_for_product\" + search_option);\r\n }\r\n\r\n updateWeb_Sales_Group(web_search_sales_group: web_search_sales_group) {\r\n return this.Response_Service.put_Data(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/web_search/web_search_sales_group\", web_search_sales_group);\r\n }\r\n\r\n addWeb_Sales_Group(new_web_search_sales_group: web_search_sales_group) {\r\n return this.Response_Service.post_Data(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/web_search/web_search_sales_group\", new_web_search_sales_group);\r\n }\r\n\r\n deleteWeb_Sales_Group(web_search_sales_group: web_search_sales_group) {\r\n return this.Response_Service.delete_Data(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/web_search/web_search_sales_group/\" + web_search_sales_group.id);\r\n }\r\n\r\n getWeb_Salse_Group_Product_List(page_number: number, page_size: number, search: string) {\r\n\r\n var search_options: string[] = [];\r\n if (search != \"\") {\r\n search_options.push(\"search=\" + search);\r\n }\r\n\r\n var search_option: string = \"\";\r\n for (var index = 0; index < search_options.length; index++) {\r\n search_option = search_option + ((index == 0) ? \"?\" : \"&\") + search_options[index];\r\n }\r\n\r\n if (page_number != null && page_size != null) {\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/web_search/web_search_sales_group_products?page_number=\" + page_number + \"&page_size=\" + page_size);\r\n }\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/web_search/web_search_sales_group_products\" + search_option);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { affiliate } from \"../../../gateway/objects/Affiliate/affiliate\";\r\nimport { affiliate_hold_time } from '../../objects/Affiliate/affiliate_hold_time';\r\nimport { affiliate_cache } from '../../objects/Affiliate/affiliate_cache';\r\nimport { affiliate_channel_management_list } from '../../objects/Affiliate/affiliate_channel_management_list';\r\n\r\nimport { Environment_Service } from \"../../../../system/services/Environment_Service\";\r\nimport { Response_Service } from \"../../../../system/services/Response_Service\";\r\n\r\n\r\n@Injectable()\r\nexport class Affiliate_Service {\r\n\r\n constructor(private Response_Service: Response_Service, private Environment_Service: Environment_Service) { }\r\n\r\n getAffiliate_List(page_number: number, page_size: number) {\r\n\r\n if (page_number != null && page_size != null) {\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/affiliate?page_number=\" + page_number + \"&page_size=\" + page_size);\r\n }\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/affiliate\");\r\n }\r\n\r\n getAffiliate(paged_url: string, Search: string) {\r\n if (paged_url != null) {\r\n return this.Response_Service.getResponse_Paged(paged_url);\r\n }\r\n\r\n var search_options: string[] = [];\r\n\r\n if (Search != \"\") {\r\n search_options.push(\"search=\" + Search);\r\n }\r\n\r\n\r\n var search_option: string = \"\";\r\n\r\n for (var index = 0; index < search_options.length; index++) {\r\n search_option = search_option + ((index == 0) ? \"?\" : \"&\") + search_options[index];\r\n }\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/affiliate\" + search_option);\r\n }\r\n\r\n updateAffiliate(affiliate: affiliate) {\r\n affiliate.sales_centre_id = +affiliate.sales_centre_id;\r\n return this.Response_Service.put_Data(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/affiliate\", affiliate);\r\n }\r\n\r\n addAffiliate(new_affiliate: affiliate) {\r\n new_affiliate.sales_centre_id = +new_affiliate.sales_centre_id;\r\n return this.Response_Service.post_Data(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/affiliate\", new_affiliate);\r\n }\r\n\r\n getApi_info(paged_url: string) {\r\n\r\n if (paged_url != null) {\r\n return this.Response_Service.getResponse(paged_url);\r\n }\r\n return this.Response_Service.getResponse(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/affiliate/security/generate_api_info\");\r\n }\r\n getFinance_Centre_List(paged_url: string) {\r\n\r\n if (paged_url != null) {\r\n return this.Response_Service.getResponse(paged_url);\r\n }\r\n return this.Response_Service.getResponse(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/internal/company_finance_centre\");\r\n }\r\n getConnector_Type_List(paged_url: string) {\r\n\r\n if (paged_url != null) {\r\n return this.Response_Service.getResponse(paged_url);\r\n }\r\n return this.Response_Service.getResponse(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/internal/connector_type\");\r\n }\r\n // Affiliate Hold Time Calls\r\n getAffiliate_Hold_Time(page_number?: number, page_size?: number, all_result?: boolean) {\r\n\r\n if (page_number != null && page_size != null) {\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/affiliate/hold_time?page_number=\" + page_number + \"&page_size=\" + page_size);\r\n }\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/affiliate/hold_time?all_results=\" + all_result);\r\n }\r\n getAffiliate_Hold_Time_Search(paged_url: string, Search: string) {\r\n if (paged_url != null) {\r\n return this.Response_Service.getResponse_Paged(paged_url);\r\n }\r\n\r\n var search_options: string[] = [];\r\n\r\n if (Search != \"\") {\r\n search_options.push(\"search=\" + Search);\r\n }\r\n\r\n\r\n var search_option: string = \"\";\r\n\r\n for (var index = 0; index < search_options.length; index++) {\r\n search_option = search_option + ((index == 0) ? \"?\" : \"&\") + search_options[index];\r\n }\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/affiliate/hold_time\" + search_option);\r\n }\r\n addUpdate_Affiliate_Hold_Time(affiliate_hold_time: affiliate_hold_time) {\r\n return this.Response_Service.post_Data(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/affiliate/hold_time\", affiliate_hold_time);\r\n }\r\n delete_Affiliate_Hold_Time(affiliate_hold_time: affiliate_hold_time) {\r\n return this.Response_Service.delete_Data(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/affiliate/hold_time/\" + affiliate_hold_time.id);\r\n }\r\n // Afflicate Cache\r\n getCache_Server(paged_url: string) {\r\n if (paged_url != null) {\r\n return this.Response_Service.getResponse(paged_url);\r\n }\r\n return this.Response_Service.getResponse(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/internal/cache_server\");\r\n }\r\n get_Affiliate_Cache(app_id: string) {\r\n if (app_id != null) {\r\n return this.Response_Service.getResponse(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/affiliate/affilicate_cache?app_id=\" + app_id);\r\n }\r\n return this.Response_Service.getResponse(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/internal/affilicate_cache\");\r\n }\r\n addUpdate_Affiliate_Cache(affiliate_cache: affiliate_cache[], app_id: string) {\r\n return this.Response_Service.post_Data(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/affiliate/affilicate_cache?App_id=\" + app_id, affiliate_cache);\r\n }\r\n // Channel Management List\r\n get_Affiliate_Channel_Management_List(app_id: string) {\r\n if (app_id != null) {\r\n return this.Response_Service.getResponse(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/affiliate/channel_management_list?app_id=\" + app_id);\r\n }\r\n return this.Response_Service.getResponse(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/internal/channel_management_list\");\r\n }\r\n addUpdate_Affiliate_Channel_Management_List(affiliate_channel_management_list: affiliate_channel_management_list[], app_id: string) {\r\n return this.Response_Service.post_Data(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/affiliate/channel_management_list?App_id=\" + app_id, affiliate_channel_management_list);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { audit_booking } from \"../../../gateway/objects/Audit/audit_booking\";\r\n\r\nimport { Environment_Service } from \"../../../../system/services/Environment_Service\";\r\nimport { Response_Service } from \"../../../../system/services/Response_Service\";\r\n\r\n@Injectable()\r\nexport class Audit_Booking_Service {\r\n\r\n constructor(private Response_Service: Response_Service, private Environment_Service: Environment_Service) { }\r\n\r\n getAutid_Booking(page_number: number, page_size: number, app_id: string, http_method: string, datefrom: string, dateTo: string) {\r\n var search_options: string[] = [];\r\n\r\n if (app_id != null || http_method != null || datefrom != null || dateTo != null) {\r\n var search_filters: string[] = []\r\n\r\n if (app_id != null) {\r\n search_filters.push(\"app_id:(\" + app_id + \")\");\r\n }\r\n\r\n if (http_method != null) {\r\n search_filters.push(\"method:(\" + http_method + \")\");\r\n }\r\n\r\n if (datefrom != null) {\r\n search_filters.push(\"upload_date_from:(\" + datefrom + \")\");\r\n }\r\n\r\n if (dateTo != null) {\r\n search_filters.push(\"upload_date_to:(\" + dateTo + \")\");\r\n }\r\n\r\n var search_filter: string = \"\";\r\n\r\n for (var index = 0; index < search_filters.length; index++) {\r\n search_filter = search_filter + ((index == 0) ? \"\" : \" and \") + search_filters[index];\r\n }\r\n\r\n if (search_filter != \"\") {\r\n search_options.push(\"filter=\" + search_filter);\r\n }\r\n }\r\n var search_option: string = \"\";\r\n\r\n for (var index = 0; index < search_options.length; index++) {\r\n search_option = search_option + search_options[index];\r\n }\r\n\r\n\r\n if (page_number != null && page_size != null) {\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/audit/booking?page_number=\" + page_number + \"&page_size=\" + page_size + \"&\" + search_option);\r\n }\r\n\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/audit/booking?\" + search_option);\r\n\r\n }\r\n getAffiliate_List() {\r\n return this.Response_Service.getResponse(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/affiliate?all_results=true\");\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { price_override } from '../../../objects/Channel_Management/Price_Override/price_override';\r\n\r\nimport { Environment_Service } from \"../../../../../system/services/Environment_Service\";\r\nimport { Response_Service } from \"../../../../../system/services/Response_Service\";\r\n\r\n\r\n\r\n\r\n@Injectable()\r\nexport class Price_Override_Service {\r\n\r\n constructor(private Response_Service: Response_Service, private Environment_Service: Environment_Service) { }\r\n\r\n getPrice_Override_List(page_number: number, page_size: number) {\r\n\r\n if (page_number != null && page_size != null) {\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/channel_management/price_override?page_number=\" + page_number + \"&page_size=\" + page_size);\r\n }\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/channel_management/price_override\");\r\n }\r\n getWPrice_Override_Search(paged_url: string, Search: string) {\r\n if (paged_url != null) {\r\n return this.Response_Service.getResponse_Paged(paged_url);\r\n }\r\n\r\n var search_options: string[] = [];\r\n\r\n if (Search != \"\") {\r\n search_options.push(\"search=\" + Search);\r\n }\r\n\r\n\r\n var search_option: string = \"\";\r\n\r\n for (var index = 0; index < search_options.length; index++) {\r\n search_option = search_option + ((index == 0) ? \"?\" : \"&\") + search_options[index];\r\n }\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/channel_management/price_override\" + search_option);\r\n }\r\n addPriceOverride(new_price_override: price_override) {\r\n return this.Response_Service.post_Data(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/channel_management/price_override\", new_price_override);\r\n }\r\n deletePriceOverride(price_override: price_override) {\r\n return this.Response_Service.delete_Data(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/channel_management/price_override/\" + price_override.id);\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { Environment_Service } from \"../../../../../system/services/Environment_Service\";\r\nimport { Response_Service } from \"../../../../../system/services/Response_Service\";\r\nimport { supplier_product } from '../../../objects/Product/supplier_product';\r\n\r\n@Injectable()\r\nexport class Product_Selection_Service {\r\n\r\n constructor(private Response_Service: Response_Service, private Environment_Service: Environment_Service) { }\r\n\r\n private data: any = null;\r\n private supplierProduct: supplier_product = null;\r\n\r\n getConnector_Product_List(paged_url: string, connector_id?: number) {\r\n\r\n if (paged_url != null) {\r\n return this.Response_Service.getResponse(paged_url);\r\n }\r\n return this.Response_Service.getResponse(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/internal/product?connector_id=\" + connector_id);\r\n }\r\n getConnector_Type_List(paged_url: string) {\r\n\r\n if (paged_url != null) {\r\n return this.Response_Service.getResponse(paged_url);\r\n }\r\n return this.Response_Service.getResponse(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/internal/connector_type\");\r\n }\r\n\r\n addProduct_Selected(new_product_selected: any) {\r\n return this.Response_Service.post_Data(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/internal/product_selected\", new_product_selected);\r\n }\r\n\r\n setProductData(data: any) {\r\n this.data = data;\r\n }\r\n\r\n getProductData() {\r\n return this.data;\r\n }\r\n\r\n setSupplierProductData(supplierProduct: supplier_product) {\r\n this.supplierProduct = supplierProduct;\r\n }\r\n\r\n getSupplierProductData() {\r\n return this.supplierProduct;\r\n }\r\n\r\n getSupplierProduct(product_id: string) {\r\n return this.Response_Service.getResponse(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/internal/supplier_product?product_id=\" + product_id);\r\n }\r\n\r\n addSupplierProduct(supplier_product: any) {\r\n return this.Response_Service.post_Data(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/internal/supplier_product\", supplier_product);\r\n }\r\n\r\n getProduct_Selected_List(page_number?: number, page_size?: number, connector_id?: number, company?: string, finance_centre?: string, product_group?: string, Search?: string) {\r\n\r\n var search_options: string[] = [];\r\n\r\n if (Search != \"\") {\r\n search_options.push(\"search=\" + Search);\r\n } \r\n\r\n var search_filters: string[] = [];\r\n\r\n if (page_number != null) {\r\n search_filters.push(\"page_number=\" + page_number);\r\n }\r\n\r\n if (page_size != null) {\r\n search_filters.push(\"page_size=\" + page_size);\r\n }\r\n\r\n if (connector_id != null) {\r\n search_filters.push(\"connector_id=\" + connector_id);\r\n }\r\n\r\n if (company != null) {\r\n search_filters.push(\"company=\" + company)\r\n }\r\n\r\n if (finance_centre != null) {\r\n search_filters.push(\"finance_centre=\" + finance_centre);\r\n }\r\n\r\n if (product_group != null) {\r\n search_filters.push(\"product_group=\" + product_group);\r\n }\r\n\r\n var search_filter: string = \"\";\r\n\r\n for (var index = 0; index < search_filters.length; index++) {\r\n search_filter = search_filter + ((index == 0) ? \"\" : \"&\") + search_filters[index];\r\n }\r\n\r\n if (search_filter != \"\") {\r\n search_options.push(search_filter);\r\n }\r\n\r\n var search_option: string = \"\";\r\n\r\n for (var index = 0; index < search_options.length; index++) {\r\n search_option = search_option + ((index == 0) ? \"?\" : \"&\") + search_options[index];\r\n }\r\n\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/internal/product_selected\" + search_option);\r\n }\r\n\r\n\r\n\r\n\r\n\r\n\r\n}\r\n","export class password_hash_request {\r\n public api_key: string;\r\n }\r\n ","import { Injectable } from '@angular/core';\r\n\r\nimport { Environment_Service } from \"../../../../system/services/Environment_Service\";\r\nimport { Response_Service } from \"../../../../system/services/Response_Service\";\r\n\r\nimport { password_hash_request } from \"../../../../system/objects/password_hash_request\";\r\n\r\n@Injectable()\r\nexport class Cache_Server_Service {\r\n\r\n constructor(private Response_Service: Response_Service, private Environment_Service: Environment_Service) { }\r\n\r\n getCache_Server_List(page_number: number, page_size: number) {\r\n\r\n if (page_number != null && page_size != null) {\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/web_search/cache_server?page_number=\" + page_number + \"&page_size=\" + page_size);\r\n }\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/web_search/cache_server\");\r\n }\r\n\r\n getCache_Servers(paged_url: string, Search: string) {\r\n if (paged_url != null) {\r\n return this.Response_Service.getResponse_Paged(paged_url);\r\n }\r\n\r\n var search_options: string[] = [];\r\n\r\n if (Search != \"\") {\r\n search_options.push(\"search=\" + Search);\r\n }\r\n\r\n\r\n var search_option: string = \"\";\r\n\r\n for (var index = 0; index < search_options.length; index++) {\r\n search_option = search_option + ((index == 0) ? \"?\" : \"&\") + search_options[index];\r\n }\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/web_search/cache_server\" + search_option);\r\n }\r\n\r\n productSync(app_id: string) {\r\n return this.Response_Service.post_Data(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/\" + app_id + \"/products\", \"\");\r\n }\r\n\r\n capacitySync(app_id: string) {\r\n return this.Response_Service.post_Data(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/\" + app_id + \"/products/capacity\", \"\");\r\n }\r\n\r\n getPasswordHash(){\r\n var hash_request: password_hash_request = new password_hash_request();\r\n hash_request.api_key = this.Environment_Service.environment.microservice_api_key;\r\n return this.Response_Service.post_Data(this.Environment_Service.environment.api_internal_gateway + \"/api/v1.2/\" + this.Environment_Service.environment.microservice_app_id + \"/security/hmac/authentication_hash\", hash_request);\r\n }\r\n\r\n singleProductSync(cache_server_app_id: string, product_id: string, pasword: string) {\r\n return this.Response_Service.post_Data_Secure(this.Environment_Service.environment.api_internal_gateway + \"/api/v1.2/\" + this.Environment_Service.environment.microservice_app_id + \"/products/\" + cache_server_app_id + \"/\" + product_id, \"\", pasword);\r\n }\r\n\r\n singleProductSyncV13(cache_server_app_id: string, product_id: string, pasword: string) {\r\n return this.Response_Service.post_Data_Secure(this.Environment_Service.environment.api_internal_gateway + \"/api/v1.3/\" + this.Environment_Service.environment.microservice_app_id + \"/products/\" + cache_server_app_id + \"/\" + product_id, \"\", pasword);\r\n }\r\n\r\n singleCapacitySync(cache_server_app_id: string, product_id: string, pasword: string) {\r\n return this.Response_Service.post_Data_Secure(this.Environment_Service.environment.api_internal_gateway + \"/api/v1.2/\" + this.Environment_Service.environment.microservice_app_id + \"/products/\" + cache_server_app_id + \"/\" + product_id + \"/capacity\", \"\", pasword);\r\n }\r\n\r\n singleCapacitySyncV13(cache_server_app_id: string, product_id: string, pasword: string) {\r\n return this.Response_Service.post_Data_Secure(this.Environment_Service.environment.api_internal_gateway + \"/api/v1.3/\" + this.Environment_Service.environment.microservice_app_id + \"/products/\" + cache_server_app_id + \"/\" + product_id + \"/capacity\", \"\", pasword);\r\n }\r\n\r\n singleAffiliateSync(cache_server_app_id: string, pasword: string) {\r\n return this.Response_Service.post_Data_Secure(this.Environment_Service.environment.api_internal_gateway + \"/api/v1.2/\" + this.Environment_Service.environment.microservice_app_id + \"/affiliate/external_api_login_sync/\" + cache_server_app_id , \"\", pasword);\r\n }\r\n\r\n singleAffiliateSyncV13(cache_server_app_id: string, pasword: string) {\r\n return this.Response_Service.post_Data_Secure(this.Environment_Service.environment.api_internal_gateway + \"/api/v1.3/\" + this.Environment_Service.environment.microservice_app_id + \"/affiliate/external_api_login_sync/\" + cache_server_app_id , \"\", pasword);\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { mapping } from '../../../objects/Channel_Management/Mapping/mapping';\r\n\r\nimport { Environment_Service } from \"../../../../../system/services/Environment_Service\";\r\nimport { Response_Service } from \"../../../../../system/services/Response_Service\";\r\n\r\n\r\n@Injectable()\r\nexport class Mapping_Service {\r\n\r\n constructor(private Response_Service: Response_Service, private Environment_Service: Environment_Service) { }\r\n\r\n getMapping_List(page_number: number, page_size: number) {\r\n\r\n if (page_number != null && page_size != null) {\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/channel_management/mapping?page_number=\" + page_number + \"&page_size=\" + page_size);\r\n }\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/channel_management/mapping\");\r\n }\r\n\r\n getMapping_Search(paged_url: string, Search: string) {\r\n if (paged_url != null) {\r\n return this.Response_Service.getResponse_Paged(paged_url);\r\n }\r\n\r\n var search_options: string[] = [];\r\n\r\n if (Search != \"\") {\r\n search_options.push(\"search=\" + Search);\r\n }\r\n\r\n\r\n var search_option: string = \"\";\r\n\r\n for (var index = 0; index < search_options.length; index++) {\r\n search_option = search_option + ((index == 0) ? \"?\" : \"&\") + search_options[index];\r\n }\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/channel_management/mapping\" + search_option);\r\n }\r\n\r\n addMapping(new_mapping: mapping) {\r\n return this.Response_Service.post_Data(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/channel_management/mapping\", new_mapping);\r\n }\r\n\r\n deleteMapping(mapping: mapping) {\r\n return this.Response_Service.delete_Data(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/channel_management/mapping/\" + mapping.id);\r\n }\r\n\r\n getCache_Server(paged_url: string) {\r\n if (paged_url != null) {\r\n return this.Response_Service.getResponse(paged_url);\r\n }\r\n return this.Response_Service.getResponse(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/internal/cache_server\");\r\n }\r\n\r\n getAffiliates(paged_url: string) {\r\n if (paged_url != null) {\r\n return this.Response_Service.getResponse(paged_url);\r\n }\r\n return this.Response_Service.getResponse(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/affiliate?all_results=true\");\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { list } from '../../../objects/Channel_Management/List_Management/list';\r\n\r\nimport { Environment_Service } from \"../../../../../system/services/Environment_Service\";\r\nimport { Response_Service } from \"../../../../../system/services/Response_Service\";\r\n\r\n\r\n\r\n@Injectable()\r\nexport class List_Management_Service {\r\n\r\n constructor(private Response_Service: Response_Service, private Environment_Service: Environment_Service) { }\r\n\r\n getChannel_Management_List(page_number: number, page_size: number, Search: string, all_result: boolean) {\r\n\r\n // Add Options from Variable\r\n var search_options: string[] = [];\r\n\r\n if (Search != \"\") {\r\n search_options.push(\"search=\" + Search);\r\n }\r\n\r\n if (page_number != null) {\r\n search_options.push(\"page_number=\" + page_number);\r\n }\r\n\r\n if (page_size != null) {\r\n search_options.push(\"page_size=\" + page_size);\r\n }\r\n\r\n if (all_result != null) {\r\n search_options.push(\"all_results=\" + all_result);\r\n }\r\n\r\n // Create Search Options\r\n var search_option: string = \"\";\r\n for (var index = 0; index < search_options.length; index++) {\r\n search_option = search_option + ((index == 0) ? \"?\" : \"&\") + search_options[index];\r\n }\r\n\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/channel_management/list\" + search_option);\r\n }\r\n\r\n\r\n addChannel_Management_List(new_list: list) {\r\n return this.Response_Service.post_Data(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/channel_management/list\", new_list);\r\n }\r\n\r\n deleteChannel_Management_List(list: list) {\r\n return this.Response_Service.delete_Data(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/channel_management/list/\" + list.id);\r\n }\r\n\r\n getList_Modes(paged_url: string) {\r\n if (paged_url != null) {\r\n return this.Response_Service.getResponse(paged_url);\r\n }\r\n return this.Response_Service.getResponse(this.Environment_Service.environment.api_internal_gateway + \"/api/v1/internal/channel_management_list_mode\");\r\n }\r\n}","import { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { NgModule } from '@angular/core';\r\n\r\nimport { Module_System } from '../../system/system.module';\r\nimport { HomeWidgetModule } from './components/home/home-widget/home-widget.module';\r\n\r\nimport { Component_Home } from './components/home/home';\r\nimport { Component_Web_Engine } from './components/web_search/web_engine/web_engine';\r\nimport { Component_Web_Search_Filter } from './components/web_search/web_search_filter/web_search_filter';\r\nimport { Component_Web_Search_Sales_Group } from './components/web_search/web_search_sales_group/web_search_sales_group';\r\nimport { Component_Affiliate } from './components/affiliate/affiliate/affiliate';\r\nimport { Component_Affiliate_Hold_Time } from './components/affiliate/hold_time/hold_time';\r\nimport { Component_Audit_Booking } from './components/audit/audit_booking';\r\nimport { Component_Price_Override } from './components/channel_management/price_override/price_override';\r\nimport { Component_Product_List } from './components/channel_management/product/product_list/product_list';\r\nimport { Component_Product_Details } from './components/channel_management/product/product_details/product_details';\r\nimport { Component_Product_Selection } from './components/comman/product_selection/product_selection';\r\nimport { Component_Mapping } from './components/channel_management/mapping/mapping';\r\nimport { Component_Channel_Management_List } from './components/channel_management/list/channel_management_list';\r\nimport { Select_Product_Dialog_Compnent } from './components/comman/ui_dialogs/select_product/select_product';\r\n\r\nimport { Web_Engine_Service } from './services/Web_Engine/Web_Engine';\r\nimport { Web_Filter_Service } from './services/Web_Search_Filter/Web_Filter';\r\nimport { Web_Search_Sales_Group_Service } from './services/Web_Search_Sales_Group/Web_Search_Sales_Group';\r\nimport { Affiliate_Service } from './services/Affiliate/Affiliate';\r\nimport { Audit_Booking_Service } from './services/Audit/Audit_Booking';\r\nimport { Price_Override_Service } from './services/Channel_Management/Price_Override/Price_Override';\r\nimport { Product_Selection_Service } from './services/Comman/Product_Selection/Product_Selection';\r\nimport { Cache_Server_Service } from './services/Type_Cache_Server/Cache_Server';\r\nimport { Mapping_Service } from './services/Channel_Management/Mapping/Mapping';\r\nimport { List_Management_Service } from './services/Channel_Management/List_Management/List';\r\n\r\nimport { Time_Difference_Pipe } from './pipes/time_difference';\r\n\r\n\r\n\r\n@NgModule({\r\n imports: [CommonModule, FormsModule, Module_System, HomeWidgetModule],\r\n declarations: [Component_Home, Component_Web_Engine, Component_Web_Search_Filter, Component_Web_Search_Sales_Group, Component_Affiliate,\r\n Component_Affiliate_Hold_Time, Component_Audit_Booking, Component_Price_Override, Component_Product_Selection, Time_Difference_Pipe,\r\n Component_Product_List, Component_Product_Details, Component_Mapping, Component_Channel_Management_List, Select_Product_Dialog_Compnent],\r\n exports: [Component_Home, Component_Web_Engine, Component_Web_Search_Filter, Component_Web_Search_Sales_Group, Component_Affiliate,\r\n Component_Affiliate_Hold_Time, Component_Audit_Booking, Component_Price_Override, Component_Product_Selection,\r\n Component_Product_List, Component_Product_Details, Component_Mapping, Component_Channel_Management_List, Select_Product_Dialog_Compnent],\r\n providers: [\r\n Web_Engine_Service,\r\n Web_Filter_Service,\r\n Web_Search_Sales_Group_Service,\r\n Affiliate_Service,\r\n Audit_Booking_Service,\r\n Price_Override_Service,\r\n Product_Selection_Service,\r\n Cache_Server_Service,\r\n Mapping_Service,\r\n List_Management_Service\r\n ]\r\n})\r\nexport class Module_TMS_Gateway { }\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { group } from \"../../../objects/maintenance/Group/Group\";\r\n\r\nimport { Environment_Service } from \"../../../../../../system/services/Environment_Service\";\r\nimport { Response_Service } from \"../../../../../../system/services/Response_Service\";\r\n\r\n@Injectable()\r\nexport class Group_Service {\r\n\r\n constructor(private Response_Service: Response_Service, private Environment_Service: Environment_Service) { }\r\n\r\n getGroup_List(paged_url: string) {\r\n\r\n if (paged_url != null) {\r\n return this.Response_Service.getResponse_Paged(paged_url);\r\n }\r\n\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.identity_server + \"/api/v1/group\");\r\n }\r\n getGroups(page_number:number,page_size:number, Search: string) {\r\n \r\n if (page_number != null && page_size != null) {\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.identity_server + \"/api/v1/group?page_number=\"+ page_number +\"&page_size=\" + page_size);\r\n }\r\n\r\n var search_options: string[] = [];\r\n\r\n if (Search != \"\") {\r\n search_options.push(\"search=\" + Search);\r\n }\r\n \r\n\r\n var search_option: string = \"\";\r\n\r\n for (var index = 0; index < search_options.length; index++) {\r\n search_option = search_option + ((index == 0) ? \"?\" : \"&\") + search_options[index];\r\n }\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.identity_server + \"/api/v1/group\" + search_option);\r\n }\r\n getOperators(paged_url: string) {\r\n\r\n if (paged_url != null) {\r\n return this.Response_Service.getResponse(paged_url);\r\n }\r\n return this.Response_Service.getResponse(this.Environment_Service.environment.identity_server + \"/api/v1/company\");\r\n }\r\n getCurrencies(paged_url: string) {\r\n\r\n if (paged_url != null) {\r\n return this.Response_Service.getResponse(paged_url);\r\n }\r\n return this.Response_Service.getResponse(this.Environment_Service.environment.identity_server + \"/api/v1/currency\");\r\n }\r\n getSecurityClaim(paged_url: string) {\r\n\r\n if (paged_url != null) {\r\n return this.Response_Service.getResponse(paged_url);\r\n }\r\n return this.Response_Service.getResponse(this.Environment_Service.environment.identity_server + \"/api/v1/security-claim\");\r\n }\r\n updateGroup(groupId: number, new_group: group) {\r\n return this.Response_Service.put_Data(this.Environment_Service.environment.identity_server + \"/api/v1/group/\" + groupId, new_group);\r\n }\r\n addGroup(new_group: group) {\r\n return this.Response_Service.post_Data(this.Environment_Service.environment.identity_server + \"/api/v1/group/\", new_group);\r\n }\r\n deleteGroup(group: group) {\r\n return this.Response_Service.delete_Data(this.Environment_Service.environment.identity_server + \"/api/v1/group/\" + group.id);\r\n }\r\n getGroup_All(paged_url: string) {\r\n\r\n if (paged_url != null) {\r\n return this.Response_Service.getResponse(paged_url);\r\n }\r\n return this.Response_Service.getResponse(this.Environment_Service.environment.identity_server + \"/api/v1/group/all\");\r\n }\r\n getGroupByID(paged_url: string, group_id: number) {\r\n if (paged_url != null) {\r\n return this.Response_Service.getResponse_Paged(paged_url);\r\n }\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.identity_server + \"/api/v1/group/\" + group_id);\r\n }\r\n}\r\n","export class Request_User_Login {\r\n public user_name: string;\r\n public password: string;\r\n public finance_centre_id: number;\r\n public return_url: string;\r\n}\r\n","import { Response_User_Login_Finance_Centre } from \"./Response_User_Login_Finance_Centre\";\r\n\r\nexport class Response_User_Login {\r\n public return_url: string;\r\n public valid_login: boolean;\r\n public finance_centres: Response_User_Login_Finance_Centre[] = [];\r\n public default_finance_centre: number;\r\n public is_error: boolean;\r\n public error_message: string;\r\n}\r\n","export class Response_User_Logout {\r\n public return_url: string;\r\n}\r\n","export class error_message {\r\n public displayMode: string;\r\n public uiLocales: string;\r\n public error: string;\r\n public errorDescription: string;\r\n public requestId: string;\r\n public redirectUri: string;\r\n public responseMode: string;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\n\r\nimport { Request_User_Login } from \"../objects/Login/Request_User_Login\";\r\nimport { Response_User_Login } from \"../objects/Login/Response_User_Login\";\r\nimport { Response_User_Logout } from \"../objects/Login/Response_User_Logout\";\r\n\r\nimport { Environment_Service } from \"../../../../system/services/Environment_Service\";\r\nimport { Response_Service } from \"../../../../system/services/Response_Service\";\r\n\r\nimport { error_message } from \"../../../../system/objects/identity/error_message\";\r\n\r\nimport { OAuth_Service } from \"../../../../system/services/system/OAuth_Service\";\r\n\r\n@Injectable()\r\nexport class Service_Login {\r\n\r\n response_user_login: Response_User_Login = new Response_User_Login();\r\n response_user_logout: Response_User_Logout = new Response_User_Logout();\r\n\r\n error_message: error_message = new error_message();\r\n\r\n constructor(private Response_Service: Response_Service, private Environment_Service: Environment_Service, private OAuth_Service: OAuth_Service) {\r\n }\r\n\r\n getError_Message(errorId: string) {\r\n return this.OAuth_Service.getError_Message(errorId).subscribe(error => this.error_message = error);\r\n }\r\n\r\n getFederated_Service_Login(return_url: string) {\r\n if (this.Environment_Service.environment.identity_realm + '' != '') {\r\n window.location.href = this.Environment_Service.environment.identity_server + \"/api/v1/identity/login/\" + this.Environment_Service.environment.identity_realm + \"?return_url=\" + return_url;\r\n };\r\n }\r\n\r\n getLogin(User_Name: string, Password: string, finance_centre_id: number, return_url: string) {\r\n var User_Login: Request_User_Login = new Request_User_Login();\r\n User_Login.user_name = User_Name;\r\n User_Login.password = Password;\r\n User_Login.finance_centre_id = finance_centre_id;\r\n User_Login.return_url = return_url;\r\n\r\n return this.Response_Service.post_Data(this.Environment_Service.environment.identity_server + \"/api/v1/identity/login\", User_Login).subscribe((f) => {\r\n this.response_user_login = f.body;\r\n if (this.response_user_login.valid_login == true) {\r\n window.location.href = this.response_user_login.return_url;\r\n }\r\n });\r\n }\r\n\r\n getLogout(logout_id: string) {\r\n return this.Response_Service.post_Data(this.Environment_Service.environment.identity_server + \"/api/v1/identity/logout?logoutId=\" + logout_id, null).subscribe((f) => {\r\n this.response_user_logout = f.body;\r\n if (this.response_user_logout.return_url != null) {\r\n window.location.href = this.response_user_logout.return_url;\r\n }\r\n });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { Environment_Service } from \"../../../../../system/services/Environment_Service\";\r\nimport { Response_Service } from \"../../../../../system/services/Response_Service\";\r\n\r\n@Injectable()\r\nexport class Audit_Identity_Service {\r\n\r\n constructor(private Response_Service: Response_Service, private Environment_Service: Environment_Service) { }\r\n\r\n getAutid_Activity(page_number: number, page_size: number, id: string, type: number, user_id: number, datefrom: string, dateTo: string) {\r\n var search_options: string[] = [];\r\n\r\n if (id != null || type != null || datefrom != null || dateTo != null) {\r\n var search_filters: string[] = []\r\n\r\n if (id != null) {\r\n search_filters.push(\"id:(\" + id + \")\");\r\n }\r\n\r\n if (type != null) {\r\n search_filters.push(\"type:(\" + type + \")\");\r\n }\r\n\r\n if (user_id != null) {\r\n search_filters.push(\"user_id:(\" + user_id + \")\");\r\n }\r\n\r\n if (datefrom != null) {\r\n search_filters.push(\"activity_date_from:(\" + datefrom + \")\");\r\n }\r\n\r\n if (dateTo != null) {\r\n search_filters.push(\"activity_date_to:(\" + dateTo + \")\");\r\n }\r\n\r\n var search_filter: string = \"\";\r\n\r\n for (var index = 0; index < search_filters.length; index++) {\r\n search_filter = search_filter + ((index == 0) ? \"\" : \" and \") + search_filters[index];\r\n }\r\n\r\n if (search_filter != \"\") {\r\n search_options.push(\"filter=\" + search_filter);\r\n }\r\n }\r\n var search_option: string = \"\";\r\n\r\n for (var index = 0; index < search_options.length; index++) {\r\n search_option = search_option + search_options[index];\r\n }\r\n\r\n\r\n if (page_number != null && page_size != null) {\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.identity_server + \"/api/v1/audit/activity?page_number=\" + page_number + \"&page_size=\" + page_size + \"&\" + search_option);\r\n }\r\n\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.identity_server + \"/api/v1/audit/activity?\" + search_option);\r\n\r\n }\r\n\r\n getAutid_Error(page_number: number, page_size: number, id: string, type: number, user_id: number, datefrom: string, dateTo: string) {\r\n var search_options: string[] = [];\r\n\r\n if (id != null || type != null || datefrom != null || dateTo != null) {\r\n var search_filters: string[] = []\r\n\r\n if (id != null) {\r\n search_filters.push(\"id:(\" + id + \")\");\r\n }\r\n\r\n if (type != null) {\r\n search_filters.push(\"type:(\" + type + \")\");\r\n }\r\n\r\n if (user_id != null) {\r\n search_filters.push(\"user_id:(\" + user_id + \")\");\r\n }\r\n\r\n if (datefrom != null) {\r\n search_filters.push(\"error_date_from:(\" + datefrom + \")\");\r\n }\r\n\r\n if (dateTo != null) {\r\n search_filters.push(\"error_date_to:(\" + dateTo + \")\");\r\n }\r\n\r\n var search_filter: string = \"\";\r\n\r\n for (var index = 0; index < search_filters.length; index++) {\r\n search_filter = search_filter + ((index == 0) ? \"\" : \" and \") + search_filters[index];\r\n }\r\n\r\n if (search_filter != \"\") {\r\n search_options.push(\"filter=\" + search_filter);\r\n }\r\n }\r\n var search_option: string = \"\";\r\n\r\n for (var index = 0; index < search_options.length; index++) {\r\n search_option = search_option + search_options[index];\r\n }\r\n\r\n\r\n if (page_number != null && page_size != null) {\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.identity_server + \"/api/v1/audit/error?page_number=\" + page_number + \"&page_size=\" + page_size + \"&\" + search_option);\r\n }\r\n\r\n return this.Response_Service.getResponse_Paged(this.Environment_Service.environment.identity_server + \"/api/v1/audit/error?\" + search_option);\r\n\r\n }\r\n\r\n getActivityTypes(name: string) {\r\n if (name != \"\") {\r\n return this.Response_Service.getResponse(this.Environment_Service.environment.identity_server + \"/api/v1/audit/activity_type?name=\" + name);\r\n }\r\n return this.Response_Service.getResponse(this.Environment_Service.environment.identity_server + \"/api/v1/audit/activity_type\");\r\n }\r\n\r\n getErrorTypes(name: string) {\r\n if (name != \"\") {\r\n return this.Response_Service.getResponse(this.Environment_Service.environment.identity_server + \"/api/v1/audit/error_type?name=\" + name);\r\n }\r\n return this.Response_Service.getResponse(this.Environment_Service.environment.identity_server + \"/api/v1/audit/error_type\");\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { NgModule } from '@angular/core';\r\n\r\nimport { Module_System } from '../../../system/system.module';\r\n\r\nimport { Component_Home } from './components/home/home';\r\nimport { Component_Login } from './components/account/login';\r\nimport { Component_Logout } from './components/account/logout';\r\nimport { Component_Error } from './components/home/error';\r\nimport { Component_Group } from './components/maintenance/group/group';\r\nimport { Component_User } from './components/maintenance/user/User';\r\nimport { Component_User_Profile } from './components/User_Profile/User_Profile';\r\nimport { Component_Audit_Activity } from './components/audit/activity/activity';\r\nimport { Component_Audit_Error } from './components/audit/error/error';\r\n\r\n\r\nimport { Group_Service } from './services/maintenance/Group/Group';\r\nimport { User_Service } from './services/maintenance/User/User';\r\n\r\nimport { Service_Login } from './services/Login';\r\nimport { Audit_Identity_Service } from './services/audit/Audit';\r\n\r\n\r\n@NgModule({\r\n imports: [CommonModule, FormsModule, Module_System],\r\n\r\n declarations: [Component_Login, Component_Logout, Component_Error, Component_Home, Component_Group, Component_User, Component_User_Profile, Component_Audit_Activity, Component_Audit_Error],\r\n\r\n exports: [Component_Login, Component_Logout, Component_Error, Component_Home, Component_Group, Component_User, Component_User_Profile, Component_Audit_Activity, Component_Audit_Error],\r\n\r\n providers: [Group_Service, User_Service, Service_Login, Audit_Identity_Service]\r\n})\r\nexport class Module_TMS_Identity_Internal { }\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-root',\r\n templateUrl: './app.component.html',\r\n styleUrls: ['./app.component.sass']\r\n})\r\n\r\nexport class AppComponent { }\r\n","","\r\n \r\n \r\n {{menu.icon}} \r\n

{{ menu.name }}

\r\n
\r\n\r\n \r\n \r\n {{menu.icon}} \r\n

{{ menu.name }}

\r\n \r\n expand_more\r\n
\r\n\r\n \r\n\r\n
\r\n","import { Component, OnInit, Input,HostListener, ElementRef, Output, EventEmitter } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { menu_list_item } from '../../../objects/Menu_List/menu_list_item';\r\n\r\nimport { Helper_Service } from '../../../services/Core/Helper_Service';\r\n\r\n@Component({\r\n selector: 'mat-sidemenu-item',\r\n templateUrl: './Side_Menu_Item.html',\r\n styleUrls: ['./Side_Menu_Item.scss']\r\n})\r\nexport class Side_Menu_Item_Component implements OnInit {\r\n\r\n @Input() menu;\r\n @Input() iconOnly: boolean;\r\n @Input() secondaryMenu = false;\r\n @Input() hideOnClick: boolean;\r\n @Output() itemClick: EventEmitter = new EventEmitter();\r\n //@HostListener('document:click', ['$event', '$event.target']);\r\n\r\n constructor(public router: Router, private helper_service: Helper_Service, private elementRef: ElementRef) { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n onClick(event: MouseEvent, targetElement: HTMLElement) {\r\n if (!targetElement) {\r\n return;\r\n }\r\n const clickedInside = this.elementRef.nativeElement.contains(targetElement);\r\n if (!clickedInside) {\r\n this.menu.open = false;\r\n }\r\n }\r\n \r\n openLink(menu: any) {\r\n this.menu.open = true;\r\n }\r\n\r\n hasChildMenu(menu : any) {\r\n return (menu.sub != null && menu.sub.length > 0) ? true : false;\r\n }\r\n\r\n hasLink(menu: any) : boolean {\r\n var hasLink = false;\r\n if (menu.link != undefined) {\r\n if (menu.link != \"\" && menu.link!=false ) {\r\n hasLink = true;\r\n }\r\n } \r\n\r\n return hasLink;\r\n }\r\n\r\n onItemClick(menu: any) {\r\n menu.open = !menu.open;\r\n // Hide the side panel after item selection\r\n if (this.hideOnClick && !this.hasChildMenu(menu)) {\r\n this.helper_service.closeLeftSideNav();\r\n }\r\n this.itemClick.emit(menu);\r\n }\r\n\r\n onSubItemClick(menu : any) {\r\n if (menu != null) {\r\n if (!this.hasChildMenu(menu) || !menu.open) {\r\n this.onItemClick(this.menu);\r\n }\r\n }\r\n }\r\n \r\n}\r\n","\r\n
\r\n \r\n \r\n
\r\n
","import { Component, OnInit, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'mat-sidemenu',\r\n templateUrl: './Side_Menu.html',\r\n styleUrls: ['./Side_Menu.scss']\r\n})\r\nexport class Side_Menu_Component implements OnInit {\r\n\r\n @Input() iconOnly: boolean = false;\r\n @Input() menus: any;\r\n @Input() hideOnClick: boolean = false;\r\n\r\n constructor() { }\r\n\r\n ngOnInit() { }\r\n\r\n}\r\n","import { Component, OnInit, Input, HostListener, ElementRef } from '@angular/core';\r\n\r\nimport { user } from '../../../../tms/identity/internal/objects/maintenance/User/User';\r\n\r\nimport { OAuth_Service } from '../../../../../modules/system/services/system/OAuth_Service';\r\nimport { Helper_Service } from '../../../services/Core/Helper_Service';\r\nimport { User_Service } from '../../../../tms/identity/internal/services/maintenance/User/User';\r\n\r\n\r\n@Component({\r\n selector: 'mat-user-menu',\r\n templateUrl: './User_Menu.html',\r\n styleUrls: ['./User_Menu.scss']\r\n})\r\nexport class User_Menu_Component implements OnInit {\r\n isOpen: boolean = false;\r\n\r\n @Input() currentUser : user = null;\r\n @HostListener('document:click', ['$event', '$event.target'])\r\n\r\n onClick(event: MouseEvent, targetElement: HTMLElement) {\r\n if (!targetElement) {\r\n return;\r\n }\r\n const clickedInside = this.elementRef.nativeElement.contains(targetElement);\r\n if (!clickedInside) {\r\n this.isOpen = false;\r\n }\r\n }\r\n\r\n constructor(private elementRef: ElementRef, public oauth_Service: OAuth_Service,\r\n public helper_service: Helper_Service, private user_service: User_Service) { }\r\n\r\n ngOnInit() {\r\n if (this.oauth_Service.isAuthorized) {\r\n this.user_service.getUserByID(null, parseInt(this.oauth_Service.identityClaims.user_id)).subscribe(res => {\r\n this.currentUser = res.body;\r\n this.currentUser.name = this.parse_name(this.currentUser.user_name);\r\n });\r\n }\r\n }\r\n\r\n isLoggedOn(): boolean {\r\n return this.oauth_Service.isLoggedIn();\r\n }\r\n\r\n public login() { this.oauth_Service.login(); }\r\n\r\n public logoff() { this.oauth_Service.logoff(); }\r\n\r\n private parse_name(name: string): string {\r\n if (name.indexOf(\".\") > -1) {\r\n var fullName = name.split(\".\");\r\n return fullName[0] + \" \" + fullName[1];\r\n } else {\r\n return name;\r\n }\r\n }\r\n \r\n}","
\r\n \r\n\r\n
\r\n
\r\n \r\n \r\n Profile\r\n \r\n \r\n \r\n Help\r\n \r\n \r\n\r\n \r\n\r\n \r\n {{isLoggedOn() == true ? \"Logout\" : \"Login\"}}\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n","
\r\n \r\n\r\n
\r\n
\r\n
\r\n
Applications
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n","import { Component, ElementRef, HostListener } from '@angular/core';\r\n\r\nimport { Environment_Service } from '../../../../system/services/Environment_Service';\r\nimport { Helper_Service } from '../../../services/Core/Helper_Service';\r\nimport { Permissions_Service } from '../../../../system/services/Permissions_Service';\r\n\r\n\r\n@Component({\r\n selector: 'mat-app-switch',\r\n templateUrl: './App_Switch.html',\r\n styleUrls: ['./App_Switch.scss']\r\n})\r\nexport class App_Switch_Component {\r\n\r\n apps: any[] = [];\r\n isOpen: boolean = false;\r\n @HostListener('document:click', ['$event', '$event.target'])\r\n\r\n onClick(event: MouseEvent, targetElement: HTMLElement) {\r\n if (!targetElement) {\r\n return;\r\n }\r\n const clickedInside = this.elementRef.nativeElement.contains(targetElement);\r\n if (!clickedInside) {\r\n this.isOpen = false;\r\n }\r\n }\r\n\r\n constructor(private elementRef: ElementRef, private Environment_Service: Environment_Service,\r\n private Helper_Service: Helper_Service, private Permissions_Service: Permissions_Service) { }\r\n\r\n ngOnInit() {\r\n this.Helper_Service.getDataFromLocalJsonFile(\"../assets/app_switch.json\").subscribe((res: any[]) => {\r\n var env = res.find(x => x.environment_name === this.Environment_Service.environment.environment_name);\r\n if (env != undefined) {\r\n this.apps = env.apps;\r\n }\r\n });\r\n }\r\n}\r\n","\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n more_vert\r\n\r\n","import { Component, Input } from '@angular/core';\r\nimport { BreakpointObserver, Breakpoints, BreakpointState } from '@angular/cdk/layout';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { Helper_Service } from '../../../services/Core/Helper_Service';\r\nimport { Permissions_Service } from '../../../../system/services/Permissions_Service';\r\n\r\n\r\n@Component({\r\n selector: 'mat-top-toolbar',\r\n templateUrl: './Top_Toolbar.html',\r\n styleUrls: ['./Top_Toolbar.scss']\r\n})\r\nexport class Top_Toolbar_Component {\r\n\r\n @Input() appTitle: string;\r\n\r\n // Detect Screen Size\r\n isHandset$: Observable = this.breakpointObserver.observe(Breakpoints.Handset)\r\n .pipe(\r\n map(result => result.matches)\r\n );\r\n\r\n constructor(public helper_service: Helper_Service, private Permissions_Service: Permissions_Service, private breakpointObserver: BreakpointObserver) { }\r\n\r\n onShowRightSideNav() {\r\n this.helper_service.toggleRighSideNav();\r\n }\r\n}\r\n","
\r\n
\r\n \r\n
\r\n
","import { Component, OnInit } from '@angular/core';\r\n\r\nimport { Helper_Service } from '../../../services/Core/Helper_Service';\r\n\r\nexport interface Theme {\r\n theme_name: string;\r\n color: string;\r\n isDark?: boolean;\r\n isDefault?: boolean;\r\n isActive?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'mat-theme-picker',\r\n templateUrl: './Theme_Picker.html',\r\n styleUrls: ['./Theme_Picker.scss']\r\n})\r\nexport class Theme_Picker_Component implements OnInit {\r\n storageKey = 'current_stored_theme';\r\n\r\n themes: Theme[] = [\r\n {\r\n theme_name: \"indigo\",\r\n color: \"#3f51b5\",\r\n isDark: false,\r\n isDefault: true,\r\n isActive: false\r\n },\r\n {\r\n theme_name: \"orange\",\r\n color: \"#ff9800\",\r\n isDark: false,\r\n isDefault: false,\r\n isActive: false\r\n },\r\n {\r\n theme_name: \"green\",\r\n color: \"#43A047\",\r\n isDark: false,\r\n isDefault: false,\r\n isActive: false\r\n },\r\n {\r\n theme_name: \"brown\",\r\n color: \"#795548\",\r\n isDark: false,\r\n isDefault: false,\r\n isActive: false\r\n },\r\n {\r\n theme_name: \"red\",\r\n color: \"#d50000\",\r\n isDark: false,\r\n isDefault: false,\r\n isActive: false\r\n }\r\n ];\r\n\r\n constructor(private helper_service: Helper_Service) { }\r\n\r\n ngOnInit() {\r\n const storeTheme = this.getStoredTheme();\r\n if (storeTheme == null) {\r\n //Inject Default Theme\r\n this.themes.forEach(theme => {\r\n if (theme.isDefault == true) {\r\n this.applyTheme(theme);\r\n }\r\n });\r\n }\r\n else {\r\n this.applyTheme(storeTheme);\r\n }\r\n }\r\n\r\n onChangeTheme(theme: Theme) {\r\n var oldThemeName = this.getStoredTheme();\r\n // Close SideNav\r\n this.helper_service.toggleRighSideNav();\r\n // Remove Old Theme and Add new\r\n this.removeTheme(oldThemeName);\r\n this.applyTheme(theme);\r\n //Store current theme in local storage\r\n this.storeTheme(theme);\r\n }\r\n\r\n applyTheme(theme: Theme) {\r\n try {\r\n // mark the theme as active\r\n this.themes.forEach(obj => {\r\n if (obj.theme_name == theme.theme_name) {\r\n obj.isActive = true;\r\n }\r\n else {\r\n obj.isActive = false;\r\n }\r\n });\r\n // appy theme\r\n document.body.classList.add(theme.theme_name);\r\n\r\n } catch (e) { }\r\n }\r\n\r\n removeTheme(theme: Theme) {\r\n try {\r\n document.body.classList.remove(theme.theme_name);\r\n } catch (e) { }\r\n }\r\n\r\n storeTheme(theme: Theme) {\r\n try {\r\n window.localStorage[this.storageKey] = JSON.stringify(theme);\r\n } catch (e) { }\r\n }\r\n\r\n getStoredTheme(): Theme {\r\n try {\r\n return JSON.parse(window.localStorage[this.storageKey] || null);\r\n } catch (e) {\r\n return null;\r\n }\r\n }\r\n clearStorageTheme() {\r\n try {\r\n window.localStorage.removeItem(this.storageKey);\r\n } catch (e) { }\r\n }\r\n\r\n}\r\n","\r\n \r\n

Theme Color

\r\n \r\n \r\n \r\n
\r\n

Environment

\r\n
Config: {{environment_service.environment.environment_name}}
\r\n
Version: {{environment_service.environment.app_build_version}}
\r\n
Date: {{environment_service.environment.app_build_date}}
\r\n
Description: {{environment_service.environment.app_build_description}}
\r\n
\r\n
\r\n\r\n \r\n
\r\n\r\n

Successful Calls\r\n

\r\n \r\n \r\n \r\n \r\n\r\n done\r\n

\r\n
{{call_info.call_url}}
\r\n

\r\n
\r\n {{call_info.start_time | date :'hh:mm:ss'}}\r\n \r\n -- {{call_info.end_time | date :'hh:mm:ss'}}\r\n \r\n -- Processing Time:\r\n {{call_info.processing_milliseconds}}ms\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n\r\n\r\n

Failed Calls

\r\n \r\n \r\n \r\n No Errors\r\n \r\n \r\n\r\n close\r\n

\r\n
{{call_info.call_url}}
\r\n

\r\n
\r\n {{call_info.start_time | date :'hh:mm:ss'}}\r\n \r\n -- {{call_info.end_time | date :'hh:mm:ss'}}\r\n \r\n -- Processing Time:\r\n {{call_info.processing_milliseconds}}ms\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n\r\n
\r\n

Active Calls

\r\n \r\n \r\n \r\n \r\n\r\n info\r\n

\r\n
{{call_info.call_url}}
\r\n

\r\n
\r\n {{call_info.start_time | date :'hh:mm:ss'}}\r\n \r\n -- {{call_info.end_time | date :'hh:mm:ss'}}\r\n \r\n -- Processing Time:\r\n {{call_info.processing_milliseconds}}ms\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
","import { Component } from '@angular/core';\r\n\r\nimport { Call_Info_Service } from \"../../../../../modules/system/services/Call_Info_Service\";\r\nimport { Environment_Service } from '../../../../system/services/Environment_Service';\r\n\r\n@Component({\r\n selector: 'mat-sidebar',\r\n templateUrl: './Sidebar.html',\r\n styleUrls: ['./Sidebar.scss']\r\n})\r\nexport class Sidebar_Component {\r\n call_info_data: any;\r\n showActiveCalls: boolean = false;\r\n today: number = Date.now();\r\n\r\n constructor(public call_info_service: Call_Info_Service, public environment_service: Environment_Service) {\r\n this.call_info_data = this.call_info_service;\r\n }\r\n \r\n ngDoCheck() {\r\n if (this.call_info_data.active_calls.length > 0) {\r\n this.showActiveCalls = true;\r\n }\r\n else {\r\n this.showActiveCalls = false;\r\n }\r\n }\r\n}\r\n","\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n
","import { Component, OnInit, ElementRef, ViewChild } from '@angular/core';\r\nimport { Title } from '@angular/platform-browser';\r\nimport { Router, ActivatedRoute, Params } from \"@angular/router\";\r\nimport { BreakpointObserver, Breakpoints, BreakpointState } from '@angular/cdk/layout';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { MatSidenav } from '@angular/material/sidenav';\r\n\r\nimport { menu_list_item } from '../../../modules/material_ui/objects/Menu_List/menu_list_item';\r\n\r\nimport { Call_Info_Service } from \"../../../modules/system/services/Call_Info_Service\";\r\nimport { OAuth_Service } from '../../../modules/system/services/system/OAuth_Service';\r\nimport { Helper_Service } from '../../../modules/material_ui/services/Core/Helper_Service';\r\nimport { Environment_Service } from '../../../modules/system/services/Environment_Service';\r\n\r\n\r\n@Component({\r\n selector: 'app-main',\r\n templateUrl: './gateway.html',\r\n styleUrls: ['./gateway.sass']\r\n})\r\n\r\nexport class GatewayComponent implements OnInit {\r\n\r\n @ViewChild('leftSideNav', { static: true }) leftSideNav: ElementRef;\r\n @ViewChild('rightSideNav', { static: true }) rightSideNav: MatSidenav;\r\n\r\n navItems: menu_list_item[];\r\n\r\n // Detect Screen Size\r\n isHandset$: Observable = this.breakpointObserver.observe(Breakpoints.Handset)\r\n .pipe(\r\n map(result => result.matches)\r\n );\r\n\r\n LegacyMode: boolean;\r\n showProgress: boolean = false;\r\n\r\n constructor(private activatedRoute: ActivatedRoute, public oauth_Service: OAuth_Service, private call_info_service: Call_Info_Service,\r\n private router: Router, public title: Title, private breakpointObserver: BreakpointObserver,\r\n private helper_service: Helper_Service, private environment_service: Environment_Service) {\r\n\r\n this.oauth_Service.initialise_OAuth();\r\n environment_service.environment.environment_name.includes(\"staging\") ? this.title.setTitle(\"Staging - Gateway\") : this.title.setTitle(\"Gateway\");\r\n }\r\n\r\n ngOnInit() {\r\n // Get Side Nav Menus\r\n this.helper_service.getDataFromLocalJsonFile(\"../assets/app-menus.json\").subscribe((res: menu_list_item[]) => {\r\n this.navItems = res;\r\n });\r\n this.activatedRoute.queryParams.subscribe((params: Params) => {\r\n let legacyModeParam = params['legacymode'];\r\n if (legacyModeParam === 'true') {\r\n this.LegacyMode = true;\r\n }\r\n });\r\n\r\n this.helper_service.rightSideNav = this.rightSideNav;\r\n this.helper_service.leftSideNav = this.leftSideNav;\r\n }\r\n\r\n ngDoCheck() {\r\n // Show the progress bar and wait cursor if any call is in queue\r\n document.body.style.cursor = 'default';\r\n if (this.call_info_service.active_calls.length > 0) {\r\n this.showProgress = true;\r\n document.body.style.cursor = 'wait';\r\n }\r\n else {\r\n this.showProgress = false;\r\n }\r\n }\r\n\r\n isActive(data: any[]): boolean {\r\n return this.router.isActive(this.router.createUrlTree(data), true);\r\n }\r\n\r\n}\r\n","import { Component, Input, Output, ElementRef, EventEmitter } from '@angular/core';\r\nimport { Observable, fromEvent } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { debounceTime } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'mat-input-debounce',\r\n templateUrl: './Input_Debounce.html'\r\n})\r\nexport class MatInputDebounce {\r\n @Input() placeholder: string;\r\n @Input() delay: number = 800;\r\n @Output() value: EventEmitter = new EventEmitter();\r\n\r\n @Input() inputValue: string;\r\n\r\n constructor(private elementRef: ElementRef) {\r\n const eventStream = fromEvent(elementRef.nativeElement, 'keyup').pipe(debounceTime(this.delay)).subscribe(input => this.value.emit(this.inputValue));\r\n }\r\n\r\n Reset_Value() {\r\n this.inputValue = \"\";\r\n }\r\n}\r\n","\r\n \r\n search\r\n","
\r\n \r\n \r\n External Server Data Sync\r\n \r\n \r\n \r\n \r\n\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
App ID {{element.app_id | uppercase}} Name {{element.name}} Last Product Sync {{element.last_product_sync | date:'dd/MM/yyyy HH:mm:ss'}} Last Capacity Sync {{element.last_capacity_sync | date:'dd/MM/yyyy HH:mm:ss'}} Sync Status \r\n \r\n sync\r\n check_circle\r\n cancel\r\n \r\n sync\r\n check_circle\r\n cancel\r\n Sync Actions \r\n
\r\n \r\n
\r\n
\r\n\r\n \r\n \r\n \r\n
","import { Component, OnInit } from '@angular/core';\r\n\r\nimport { cache_server } from '../../../../objects/Type/cache_server';\r\nimport { pagination } from '../../../../../../system/objects/pagination';\r\nimport { password_hash_response } from \"../../../../../../system/objects/password_hash_response\";\r\n\r\n\r\nimport { Cache_Server_Service } from '../../../../services/Type_Cache_Server/Cache_Server';\r\nimport { Helper_Service } from '../../../../../../material_ui/services/Core/Helper_Service';\r\n\r\n@Component({\r\n selector: 'external-api-sync',\r\n templateUrl: './api_server_sync.html',\r\n styleUrls: ['api_server_sync.scss'],\r\n})\r\nexport class Component_External_API_Sync implements OnInit {\r\n\r\n displayedColumns: string[] = ['app_id', 'name', 'last_product_sync', 'last_capacity_sync', 'status', 'actions'];\r\n cache_server_list: cache_server[] = [];\r\n pagination_cache_server: pagination = new pagination();\r\n statusProduct: cache_server[] = [];\r\n statusCapacity: cache_server[] = [];\r\n pageNum: number = 1;\r\n pageSize: number = 5;\r\n\r\n constructor(private cache_server_service: Cache_Server_Service, private helper_service: Helper_Service) { }\r\n\r\n ngOnInit() {\r\n this.getBackend_Data_Cache_Servers(this.pageNum, this.pageSize);\r\n }\r\n\r\n getBackend_Data_Cache_Servers(page: number, pageSize: number) {\r\n this.pageNum = page;\r\n this.pageSize = pageSize;\r\n this.cache_server_service.getCache_Server_List(page, pageSize).subscribe((res) => {\r\n this.cache_server_list = res.body['cache_server'];\r\n this.pagination_cache_server = res.body['pagination'];\r\n this.updateStatusOnRefresh();\r\n });\r\n }\r\n\r\n onClick_Cache_Server_Pagination(e: any) {\r\n this.getBackend_Data_Cache_Servers(e.pageIndex + 1, e.pageSize);\r\n }\r\n\r\n onClick_Cache_Server_Search(value: string) {\r\n this.cache_server_service.getCache_Servers(null, value).subscribe((res) => {\r\n this.cache_server_list = res.body['cache_server'];\r\n this.pagination_cache_server = res.body['pagination'];\r\n });\r\n }\r\n\r\n onAllProductsSync() {\r\n var message;\r\n\r\n this.cache_server_list.forEach(cache => {\r\n cache.productStatus = \"progress\";\r\n\r\n this.cache_server_service.productSync(cache.app_id).subscribe(\r\n (res) => {\r\n cache.productStatus = \"done\";\r\n\r\n if (res.body['scheduled_Items'].length > 0) {\r\n message = cache.name + \" has been synced successfully with scheduler job ids: \" + res.body['scheduled_Items'][0]['queue_id'] + \"-\" + res.body['scheduled_Items'][res.body['scheduled_Items'].length - 1]['queue_id']\r\n }\r\n else {\r\n message = cache.name + \" is already synced.\"\r\n }\r\n this.helper_service.openSnackbarNotification(message, \"Close\", \"success\");\r\n },\r\n (error) => {\r\n cache.productStatus = \"error\";\r\n this.helper_service.openSnackbarNotification(cache.name + \" \" + error.message, \"Close\", \"error\");\r\n\r\n },\r\n () => {\r\n this.getBackend_Data_Cache_Servers(this.pageNum, this.pageSize);\r\n });\r\n this.statusProduct.push(cache);\r\n });\r\n }\r\n\r\n onAllCapacitiesSync() {\r\n var message;\r\n\r\n this.cache_server_list.forEach(cache => {\r\n cache.capacityStatus = \"progress\";\r\n\r\n this.cache_server_service.capacitySync(cache.app_id).subscribe(\r\n (res) => {\r\n cache.capacityStatus = \"done\";\r\n\r\n if (res.body['scheduled_Items'].length > 0) {\r\n message = cache.name + \" has been synced successfully with scheduler job ids: \" + res.body['scheduled_Items'][0]['queue_id'] + \"-\" + res.body['scheduled_Items'][res.body['scheduled_Items'].length - 1]['queue_id']\r\n }\r\n else {\r\n message = cache.name + \" is already synced.\"\r\n }\r\n this.helper_service.openSnackbarNotification(message, \"Close\", \"success\");\r\n },\r\n (error) => {\r\n cache.capacityStatus = \"error\";\r\n this.helper_service.openSnackbarNotification(cache.name + \" \" + error.message, \"Close\", \"error\");\r\n\r\n },\r\n () => {\r\n this.getBackend_Data_Cache_Servers(this.pageNum, this.pageSize);\r\n });\r\n this.statusCapacity.push(cache);\r\n });\r\n }\r\n\r\n reload() {\r\n this.getBackend_Data_Cache_Servers(1, 5);\r\n }\r\n\r\n private updateStatusOnRefresh() {\r\n // Update Product status on refresh\r\n if (this.statusProduct.length > 0) {\r\n this.cache_server_list.forEach(cahceServer => {\r\n var status = this.statusProduct.find(obj => obj.app_id == cahceServer.app_id)\r\n if (status != null) {\r\n cahceServer.productStatus = status.productStatus;\r\n }\r\n });\r\n }\r\n // Update Capacity status on refresh\r\n if (this.statusCapacity.length > 0) {\r\n this.cache_server_list.forEach(cahceServer => {\r\n var status = this.statusCapacity.find(obj => obj.app_id == cahceServer.app_id)\r\n if (status != null) {\r\n cahceServer.capacityStatus = status.capacityStatus;\r\n }\r\n });\r\n }\r\n }\r\n\r\n private onRefreshLogin(item: any) {\r\n this.cache_server_service.getPasswordHash().subscribe(res => {\r\n var passwordHashResponse = res.body;\r\n this.cache_server_service.singleAffiliateSync(item.app_id, passwordHashResponse.password_hash).subscribe(\r\n (response) => {\r\n this.helper_service.openSnackbarNotification('v1.2 Affiliate login refresh for ' + item.name + ' queued', 'Close', 'success');\r\n },\r\n (error) => { this.helper_service.openSnackbarNotification('Something has gone wrong!', 'Close', 'error'); }\r\n );\r\n });\r\n\r\n this.cache_server_service.getPasswordHash().subscribe(res => {\r\n var passwordHashResponse = res.body;\r\n this.cache_server_service.singleAffiliateSyncV13(item.app_id, passwordHashResponse.password_hash).subscribe(\r\n (response) => {\r\n this.helper_service.openSnackbarNotification('v1.3 Affiliate login refresh for ' + item.name + ' queued', 'Close', 'success');\r\n },\r\n (error) => { this.helper_service.openSnackbarNotification('Something has gone wrong!', 'Close', 'error'); }\r\n );\r\n });\r\n\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'home',\r\n templateUrl: './home.html'\r\n})\r\nexport class Component_Home {\r\n\r\n constructor() {\r\n }\r\n}\r\n","","import {Component, Inject} from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\r\nexport interface DialogData {\r\n title: string;\r\n text: string;\r\n }\r\n\r\n@Component({\r\n selector: 'confirmation_dialog',\r\n templateUrl: 'Confirmation_Dialog.html',\r\n })\r\n export class Confirmation_Dialog_Compnent {\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: DialogData) {}\r\n \r\n onNoClick(): void {\r\n this.dialogRef.close();\r\n }\r\n \r\n }","

{{data.title}}

\r\n
\r\n

{{data.text}}

\r\n
\r\n
\r\n \r\n \r\n
","import {web_search_engine_filter} from './web_search_engine_filter';\r\nimport {web_search_engine_cache} from './web_search_engine_cache';\r\nexport class web_search_engine {\r\n public id:number;\r\n public name:string;\r\n public web_search_engine_filters:web_search_engine_filter[]=[];\r\n public web_search_engine_caches:web_search_engine_cache[]=[];\r\n}","import { Component, Input } from '@angular/core';\r\nimport { Environment_Service } from '../../../../system/services/Environment_Service';\r\nimport { Title } from '@angular/platform-browser';\r\n\r\n\r\n@Component({\r\n selector: 'mat-doc-component',\r\n templateUrl: './Doc_Component.html'\r\n})\r\nexport class Doc_Component {\r\n\r\n @Input() docLink: string = \"\";\r\n docURL: string;\r\n\r\n constructor(private Environment_Service: Environment_Service, private Title: Title) {\r\n\r\n switch (this.Title.getTitle()) {\r\n\r\n case \"Gateway\":\r\n this.docURL = this.Environment_Service.environment.api_internal_gateway + \"/docs/Gateway.html#\"\r\n break;\r\n\r\n }\r\n }\r\n\r\n openDoc() {\r\n window.open(this.docURL + this.docLink)\r\n }\r\n\r\n}\r\n","","
\r\n
\r\n
Available Options
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n
Option {{element.name}} Status \r\n Selected\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n
Selected Options
\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n
Option {{element.name}} Status \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n","import { Component, Input, Output, EventEmitter, TemplateRef } from '@angular/core';\r\n\r\nimport { pagination } from \"../../../system/objects/pagination\";\r\n\r\nimport { Pagination_Service } from '../../../system/services/Pagination_Service';\r\n\r\nexport interface DualList {\r\n id: string,\r\n name: string;\r\n selected: boolean;\r\n dataType:any;\r\n}\r\n\r\n@Component({\r\n selector: 'mat-dual_list',\r\n templateUrl: './Dual_List.html'\r\n})\r\nexport class Dual_List_Component {\r\n\r\n @Input() selectedRowAddShow:boolean = false;\r\n @Input() selectedRowSettings:boolean = false;\r\n @Input() templateRef:TemplateRef;\r\n\r\n @Input() availableItems: DualList[] = [];\r\n @Input() availableItemsPagination: pagination = new pagination();\r\n @Input() selectededItems: DualList[] = [];\r\n\r\n @Output() selectededItemsChange = new EventEmitter();\r\n @Output() availableItemsPage: EventEmitter = new EventEmitter();\r\n @Output() availableSearch: EventEmitter = new EventEmitter();\r\n\r\n @Output() availableRow: EventEmitter = new EventEmitter();\r\n @Output() selectedRowAdd: EventEmitter = new EventEmitter();\r\n @Output() selectedSettings: EventEmitter = new EventEmitter();\r\n\r\n @Output() add: EventEmitter = new EventEmitter();\r\n @Output() remove: EventEmitter = new EventEmitter();\r\n\r\n\r\n\r\n\r\n\r\n displaySelectededItems: DualList[] = [];\r\n pageNumber: number;\r\n pageSize: number\r\n selectededItemsPagination: pagination = new pagination();\r\n displayedColumns: string[] = ['option', 'status'];\r\n\r\n constructor(private Pagination_Service: Pagination_Service) { }\r\n\r\n ngOnChanges() {\r\n \r\n this.availableItems.forEach(x => {\r\n if (this.selectededItems.find(obj => obj.id.toLocaleLowerCase() == x.id.toLocaleLowerCase())) {\r\n x.selected = true;\r\n }\r\n });\r\n this.RefreshPaginationSelectedItems(String(this.pageNumber), this.pageSize);\r\n }\r\n onAvailableItems(item: DualList) {\r\n this.availableItems.forEach(x => {\r\n if (x.id.toLocaleLowerCase() == item.id.toLocaleLowerCase()) {\r\n x.selected = true;\r\n }\r\n });\r\n\r\n if (this.selectededItems.find(x => x.id.toLocaleLowerCase() == item.id.toLocaleLowerCase())) {\r\n // Do Nothing\r\n }\r\n else {\r\n this.selectededItems.push({ id: item.id, name: item.name, selected: true , dataType:item.dataType });\r\n }\r\n // Refresh Paginiation\r\n this.RefreshPaginationSelectedItems(String(this.pageNumber), this.pageSize);\r\n // Emit changes if Parent component wants to perform some actions against selected item click\r\n this.add.emit(item);\r\n }\r\n onSelectedItems(item: DualList) {\r\n this.availableItems.forEach(x => {\r\n if (x.id.toLocaleLowerCase() == item.id.toLocaleLowerCase()) {\r\n x.selected = false;\r\n }\r\n });\r\n\r\n this.selectededItems = this.selectededItems.filter(x => x.id != item.id);\r\n // Refresh Paginiation\r\n this.RefreshPaginationSelectedItems(String(this.pageNumber), this.pageSize);\r\n // Emit changes to update the ngModel value\r\n this.selectededItemsChange.emit(this.selectededItems);\r\n // Emit changes if Parent component wants to perform some actions against selected item click\r\n this.remove.emit(item);\r\n }\r\n onAvailableItemsPaginate(event: any) {\r\n this.availableItemsPage.emit(event);\r\n }\r\n onSelectedItemsPaginate(e: any) {\r\n this.pageNumber = e.pageIndex + 1;\r\n this.pageSize = e.pageSize;\r\n this.RefreshPaginationSelectedItems(String(this.pageNumber), this.pageSize);\r\n }\r\n RefreshPaginationSelectedItems(page?: string, page_size?: number) {\r\n var output = this.Pagination_Service.Array_Paginator(this.selectededItems, page, page_size);\r\n this.displaySelectededItems = output.data;\r\n this.selectededItemsPagination = output.pagination;\r\n }\r\n onAvailableOptionsSearch(vlaue: string) {\r\n this.availableSearch.emit(vlaue);\r\n }\r\n onSelectedOptionsSearch(vlaue: string) {\r\n\r\n if (vlaue != \"\") {\r\n this.displaySelectededItems = this.displaySelectededItems.filter(x => x.name.toLocaleLowerCase().includes(vlaue.toLocaleLowerCase()));\r\n }\r\n else {\r\n this.RefreshPaginationSelectedItems(String(this.pageNumber), this.pageSize);\r\n }\r\n }\r\n onAvailableRowClick(vlaue:any){\r\n this.availableRow.emit(vlaue);\r\n }\r\n onSelectedRowAdd(vlaue:any){\r\n this.selectedRowAdd.emit(vlaue);\r\n }\r\n onSelectedSettings(vlaue:any){\r\n this.selectedSettings.emit(vlaue);\r\n }\r\n}\r\n","\r\n \r\n \r\n
\r\n web Web Engine\r\n
\r\n
\r\n \r\n
{{web_engine_header}}
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Web Engine Name {{element.name}} Actions \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n You must enter a value\r\n \r\n \r\n

Web Engine Filters

\r\n \r\n
\r\n \r\n \r\n
\r\n \r\n

Cache Servers

\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
","import { Component, OnInit } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { FormControl, Validators } from '@angular/forms';\r\nimport { Confirmation_Dialog_Compnent } from \"../../.././../../material_ui/components/UI_Dialogs/Confirmation_Dialog/Confirmation_Dialog\";\r\n\r\nimport { web_search_engine } from '../../../objects/Web_Search/web_search_engine';\r\nimport { web_search_engine_filter } from '../../../objects/Web_Search/web_search_engine_filter';\r\nimport { web_search_filter } from '../../../objects/Web_Search/web_search_filter';\r\nimport { cache_server } from '../../../objects/Type/cache_server';\r\nimport { web_search_engine_cache } from '../../../objects/Web_Search/web_search_engine_cache';\r\nimport { pagination } from \"../../../../../system/objects/pagination\";\r\n\r\nimport { Web_Engine_Service } from '../../../services/Web_Engine/Web_Engine';\r\nimport { Web_Filter_Service } from '../../../services/Web_Search_Filter/Web_Filter';\r\nimport { Cache_Server_Service } from '../../../services/Type_Cache_Server/Cache_Server';\r\nimport { Helper_Service } from '../../../../../material_ui/services/Core/Helper_Service';\r\n\r\n@Component({\r\n selector: 'web_engine',\r\n templateUrl: './web_engine.html'\r\n})\r\nexport class Component_Web_Engine {\r\n\r\n //Component Vaiables\r\n web_engine_header: string = \"\";\r\n web_engine_list: web_search_engine[];\r\n pagination_web_engine: pagination = new pagination();\r\n pagination_web_engine_filter: pagination = new pagination();\r\n pagination_cache_server: pagination = new pagination();\r\n web_filter_result: web_search_filter[] = [];\r\n cache_server_result: cache_server[] = [];\r\n displayedColumns: string[] = ['name', 'edit'];\r\n\r\n // Form & Controls Variables & Validation\r\n web_engine_id: number;\r\n web_engine_name = new FormControl('', [Validators.required]);\r\n //Web Engine Filter Lists\r\n web_search_engine_filter: web_search_engine_filter[] = [];\r\n availableWebEngineFilters: any[] = [];\r\n selectedWebEngineFilters: any[] = [];\r\n //Cache Server Lists\r\n web_search_engine_cache: web_search_engine_cache[] = []\r\n availableCacheServers: any[];\r\n selectedCacheServers: any[];\r\n // Flags\r\n updateButton: boolean = false;\r\n showSearchBlock: boolean = true;\r\n\r\n constructor(private Web_Engine_Service: Web_Engine_Service, private Web_Filter_Service: Web_Filter_Service, private helper_service: Helper_Service, private dialog: MatDialog, private Cache_Server_Service: Cache_Server_Service) { }\r\n\r\n ngOnInit() {\r\n this.getBackend_Data_Web_Engine(null, null);\r\n this.getBackend_Data_Web_Engine_Filters(null, null);\r\n this.getBackend_Data_Cache_Servers(null, null);\r\n }\r\n\r\n onClick_Web_Engine_Pagination(e: any) {\r\n this.getBackend_Data_Web_Engine(e.pageIndex + 1, e.pageSize);\r\n }\r\n getBackend_Data_Web_Engine(page: number, pageSize: number) {\r\n this.Web_Engine_Service.getWeb_Engine_List(page, pageSize).subscribe((res) => {\r\n this.web_engine_list = res.body['web_search_engine'];\r\n this.pagination_web_engine = res.body['pagination'];\r\n });\r\n }\r\n onClick_Web_Engine_Filter_Pagination(e: any) {\r\n this.getBackend_Data_Web_Engine_Filters(e.pageIndex + 1, e.pageSize);\r\n }\r\n onClick_Web_Engine_Filter_Search(value: string) {\r\n this.Web_Filter_Service.getWeb_Filters(null, value).subscribe((res) => {\r\n this.web_filter_result = res.body['web_search_filter'];\r\n this.pagination_web_engine_filter = res.body['pagination'];\r\n this.availableWebEngineFilters = [];\r\n (res.body[\"web_search_filter\"]).forEach(obj => {\r\n this.availableWebEngineFilters.push({ id: obj.id.toString(), name: obj.name, selected: false });\r\n });\r\n });\r\n }\r\n getBackend_Data_Web_Engine_Filters(page: number, pageSize: number) {\r\n this.Web_Filter_Service.getWeb_Filter_List(page, pageSize).subscribe((res) => {\r\n this.web_filter_result = res.body['web_search_filter'];\r\n this.pagination_web_engine_filter = res.body['pagination'];\r\n this.availableWebEngineFilters = [];\r\n (res.body[\"web_search_filter\"]).forEach(obj => {\r\n this.availableWebEngineFilters.push({ id: obj.id.toString(), name: obj.name, selected: false });\r\n });\r\n });\r\n }\r\n\r\n map_Data_Web_Engine_Filters_Selected() {\r\n this.selectedWebEngineFilters = [];\r\n this.web_search_engine_filter.forEach(obj => {\r\n this.selectedWebEngineFilters.push({ id: obj.filter_id.toString(), name: obj.web_search_filter.name, selected: true })\r\n });\r\n }\r\n onAddWebEngineFilter(item: any) {\r\n this.web_search_engine_filter.push({ engine_id: this.web_engine_id, web_search_engine: null, filter_id: item.id, web_search_filter: null });\r\n }\r\n onRemoveWebEngineFilter(item: any) {\r\n this.web_search_engine_filter = this.web_search_engine_filter.filter(x => x.filter_id.toString() !== item.id);\r\n }\r\n\r\n getBackend_Data_Cache_Servers(page: number, pageSize: number){\r\n this.Cache_Server_Service.getCache_Server_List(page, pageSize).subscribe((res) => {\r\n this.cache_server_result = res.body['cache_server'];\r\n this.pagination_cache_server = res.body['pagination'];\r\n this.availableCacheServers = [];\r\n (res.body[\"cache_server\"]).forEach(obj => {\r\n this.availableCacheServers.push({ id: obj.app_id.toString(), name: obj.name, selected: false });\r\n });\r\n });\r\n }\r\n\r\n onClick_Cache_Server_Pagination(e: any) {\r\n this.getBackend_Data_Cache_Servers(e.pageIndex + 1, e.pageSize);\r\n }\r\n\r\n onClick_Cache_Server_Search(value: string) {\r\n this.Cache_Server_Service.getCache_Servers(null, value).subscribe((res) => {\r\n this.cache_server_result = res.body['cache_server'];\r\n this.pagination_cache_server = res.body['pagination'];\r\n this.availableCacheServers = [];\r\n (res.body[\"cache_server\"]).forEach(obj => {\r\n this.availableCacheServers.push({ id: obj.app_id.toString(), name: obj.name, selected: false });\r\n });\r\n });\r\n }\r\n\r\n map_Data_Cache_Servers_Selected() {\r\n this.selectedCacheServers = [];\r\n this.web_search_engine_cache.forEach(obj => {\r\n this.selectedCacheServers.push({ id: obj.cache_server_id, name: obj.cache_server.name, selected: true })\r\n });\r\n }\r\n\r\n onAdd_Cache_Server(item: any) {\r\n this.web_search_engine_cache.push({ engine_id: this.web_engine_id, web_search_engine: null, cache_server_id: item.id, cache_server: null });\r\n }\r\n\r\n onRemove_Cache_Server(item: any) {\r\n this.web_search_engine_cache = this.web_search_engine_cache.filter(x => x.cache_server_id.toString() !== item.id);\r\n }\r\n\r\n onAdd_Web_Engine() {\r\n // Bind Variables \r\n this.web_engine_header = \"Enter Details To Add a New Web Serach Engine:\"\r\n this.showSearchBlock = false;\r\n }\r\n\r\n onEdit_Web_Engine(selected_Web_Engine: web_search_engine) {\r\n // Bind Variables \r\n this.web_engine_header = \"Edit Details: \" + selected_Web_Engine.name;\r\n this.web_engine_id = selected_Web_Engine.id;\r\n //this.web_engine_name = selected_Web_Engine.name;\r\n this.web_engine_name.setValue(selected_Web_Engine.name);\r\n this.web_search_engine_filter = selected_Web_Engine.web_search_engine_filters;\r\n this.web_search_engine_cache = selected_Web_Engine.web_search_engine_caches;\r\n // Update Flag\r\n this.updateButton = true;\r\n this.showSearchBlock = false;\r\n // Call Local Funtion\r\n this.map_Data_Web_Engine_Filters_Selected();\r\n this.map_Data_Cache_Servers_Selected();\r\n }\r\n\r\n onDelete_Web_Engine(selected_Web_Engine: web_search_engine) {\r\n\r\n const dialogRef = this.dialog.open(Confirmation_Dialog_Compnent, {\r\n data: { title: \"Delete !\", text: \"Are you sure you want to delete \" + selected_Web_Engine.name + \"?\" }\r\n });\r\n\r\n dialogRef.afterClosed().subscribe(result => {\r\n if (result == true) {\r\n // call delete service\r\n this.Web_Engine_Service.deleteWeb_Engine(selected_Web_Engine).subscribe(\r\n (response) => { this.helper_service.openSnackbarNotification(selected_Web_Engine.name + ' has been deleted successfully', 'Close', 'success'); },\r\n (error) => { this.helper_service.openSnackbarNotification('Something has gone wrong!', 'Close', 'error'); },\r\n () => { this.rest_WebEngineForm() }\r\n );\r\n }\r\n });\r\n }\r\n\r\n onAdd_Update_Web_Engine_Submit() {\r\n\r\n var addUpdateWebEngine = new web_search_engine;\r\n addUpdateWebEngine.id = this.web_engine_id;\r\n addUpdateWebEngine.name = this.web_engine_name.value;\r\n addUpdateWebEngine.web_search_engine_filters = this.web_search_engine_filter;\r\n addUpdateWebEngine.web_search_engine_caches = this.web_search_engine_cache;\r\n\r\n\r\n if (this.web_engine_name.valid) {\r\n // Update Web Engine\r\n if (this.updateButton) {\r\n this.Web_Engine_Service.updateWeb_Engine(addUpdateWebEngine).subscribe(\r\n (response) => { this.helper_service.openSnackbarNotification('You have successfully updated the web engine', 'Close', 'success'); },\r\n (error) => { this.helper_service.openSnackbarNotification('Something has gone wrong!', 'Close', 'error'); },\r\n () => { this.rest_WebEngineForm() }\r\n );\r\n }\r\n // Create New Web Engine\r\n else {\r\n this.Web_Engine_Service.addWeb_Engine(addUpdateWebEngine).subscribe(\r\n (response) => { this.helper_service.openSnackbarNotification('You have successfully added the web engine', 'Close', 'success'); },\r\n (error) => { this.helper_service.openSnackbarNotification('Something has gone wrong!', 'Close', 'error'); },\r\n () => { this.rest_WebEngineForm() }\r\n );\r\n }\r\n }\r\n else {\r\n this.web_engine_name.markAsTouched();\r\n }\r\n\r\n\r\n }\r\n rest_WebEngineForm() {\r\n this.getBackend_Data_Web_Engine(null, null);\r\n this.getBackend_Data_Web_Engine_Filters(null, null);\r\n this.getBackend_Data_Cache_Servers(null, null);\r\n\r\n this.showSearchBlock = true;\r\n this.updateButton = false;\r\n this.web_engine_header = \"\";\r\n this.web_engine_id = 0;\r\n this.web_engine_name.reset();\r\n this.web_search_engine_filter = [];\r\n this.availableWebEngineFilters = [];\r\n this.selectedWebEngineFilters = [];\r\n this.web_search_engine_cache = [];\r\n this.availableCacheServers = [];\r\n this.selectedCacheServers = [];\r\n }\r\n\r\n}\r\n","import {web_search_filter_tag} from './web_search_filter_tag';\r\nexport class web_search_filter {\r\n public id:number;\r\n public name:string;\r\n public web_search_filter_tags:web_search_filter_tag[]=[];\r\n}","import {web_search_filter} from './web_search_filter';\r\nimport {web_search_filter_tag_product} from './web_search_filter_tag_product';\r\nexport class web_search_filter_tag {\r\n public id:number;\r\n public name:string;\r\n public filter_id:number;\r\n public web_search_filter:web_search_filter;\r\n public tag_products:web_search_filter_tag_product[]=[];\r\n\r\n}","\r\n \r\n \r\n
\r\n filter_list Web Filter\r\n
\r\n
\r\n \r\n
{{web_filter_header}}
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Web Filter Name {{element.name}} Actions \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n You must enter a value\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Filter Tags\r\n \r\n \r\n {{web_tag_header}}\r\n \r\n \r\n \r\n Filter Tags\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Tag Name {{element.name}} Actions \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n Sales Group\r\n \r\n \r\n Sales Group\r\n \r\n \r\n \r\n \r\n \r\n

Sales Group

\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
","import { Component, OnInit } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { FormControl, Validators } from '@angular/forms';\r\nimport { Confirmation_Dialog_Compnent } from \"../../.././../../material_ui/components/UI_Dialogs/Confirmation_Dialog/Confirmation_Dialog\";\r\n\r\nimport { web_search_filter } from '../../../objects/Web_Search/web_search_filter';\r\nimport { web_search_filter_tag } from '../../../objects/Web_Search/web_search_filter_tag';\r\nimport { web_search_sales_group } from '../../../objects/Web_Search/web_search_sales_group';\r\nimport { web_search_filter_tag_product } from '../../../objects/Web_Search/web_search_filter_tag_product';\r\n\r\nimport { pagination } from \"../../../../../system/objects/pagination\";\r\n\r\nimport { Web_Filter_Service } from '../../../services/Web_Search_Filter/Web_Filter';\r\nimport { Web_Search_Sales_Group_Service } from '../../../services/Web_Search_Sales_Group/Web_Search_Sales_Group';\r\nimport { Pagination_Service } from \"../../../../../system/services/Pagination_Service\";\r\nimport { Helper_Service } from '../../../../../material_ui/services/Core/Helper_Service';\r\n\r\n\r\n@Component({\r\n selector: 'web_search_filter',\r\n templateUrl: './web_search_filter.html'\r\n})\r\nexport class Component_Web_Search_Filter {\r\n\r\n web_filter_header: string = \"\";\r\n web_tag_header: string = \"\";\r\n web_filter_search: string = \"\";\r\n web_filter_list: web_search_filter[];\r\n pagination_web_filter: pagination = new pagination();\r\n pagination_filter_tag: pagination;\r\n pagination_sales_group: pagination = new pagination();\r\n displayedColumns: string[] = ['name', 'edit'];\r\n\r\n // Form & Controls Variables\r\n panelStep: number = 0;\r\n filter_tag_list: web_search_filter_tag[] = [];\r\n web_filter: web_search_filter = new web_search_filter;\r\n web_filter_name = new FormControl('', [Validators.required]);\r\n web_filter_tag: web_search_filter_tag = new web_search_filter_tag;\r\n web_filter_tag_sales_group: web_search_filter_tag_product[] = [];\r\n display_filter_tag_list: web_search_filter_tag[] = [];\r\n web_sales_group_result: web_search_sales_group[];\r\n availableWebSalesGroup: any[] = [];\r\n selectedWebSalesGroup: any[] = [];\r\n\r\n // Flags\r\n updateButton: boolean = false;\r\n showSearchBlock: boolean = true;\r\n\r\n constructor(private Web_Filter_Service: Web_Filter_Service, private Pagination_Service: Pagination_Service, private helper_service: Helper_Service,\r\n private dialog: MatDialog,private Web_Search_Sales_Group_Service:Web_Search_Sales_Group_Service) { }\r\n\r\n ngOnInit() {\r\n this.getBackend_Data_Web_Filter(null, null);\r\n this.getBackend_Data_Web_Sales_Group(null, null);\r\n this.RefreshPaginationFilterTag();\r\n }\r\n\r\n onClick_Web_Filter_Pagination(e: any) {\r\n this.getBackend_Data_Web_Filter(e.pageIndex + 1, e.pageSize);\r\n }\r\n\r\n onClick_Web_Tag_Pagination(e: any) {\r\n this.RefreshPaginationFilterTag(String(e.pageIndex + 1), e.pageSize);\r\n }\r\n\r\n onClick_Sales_Group_Pagination(e: any) {\r\n this.getBackend_Data_Web_Sales_Group(e.pageIndex + 1, e.pageSize);\r\n }\r\n\r\n getBackend_Data_Web_Filter(page: number, pageSize: number) {\r\n this.Web_Filter_Service.getWeb_Filter_List(page, pageSize).subscribe((res) => {\r\n this.web_filter_list = res.body['web_search_filter'];\r\n this.pagination_web_filter = res.body['pagination'];\r\n });\r\n }\r\n onClick_Web_Sales_Group_Search(value: string) {\r\n this.Web_Search_Sales_Group_Service.getWeb_Sales_Group(null,value,null).subscribe((res) => {\r\n this.web_sales_group_result = res.body['web_search_sales_group'];\r\n this.pagination_sales_group = res.body['pagination'];\r\n this.availableWebSalesGroup = [];\r\n (res.body[\"web_search_sales_group\"]).forEach(obj => {\r\n this.availableWebSalesGroup.push({ id: obj.id.toString(), name: obj.name, selected: false });\r\n });\r\n });\r\n }\r\n getBackend_Data_Web_Sales_Group(page: number, pageSize: number) {\r\n this.Web_Search_Sales_Group_Service.getWeb_Sales_Group_List(page, pageSize).subscribe((res) => {\r\n this.web_sales_group_result = res.body['web_search_sales_group'];\r\n this.pagination_sales_group = res.body['pagination'];\r\n this.availableWebSalesGroup = [];\r\n (res.body[\"web_search_sales_group\"]).forEach(obj => {\r\n this.availableWebSalesGroup.push({ id: obj.id.toString(), name: obj.name, selected: false });\r\n });\r\n });\r\n }\r\n map_Data_Web_Sales_Group_Selected() {\r\n this.selectedWebSalesGroup = [];\r\n this.web_filter_tag_sales_group.forEach(obj => {\r\n this.selectedWebSalesGroup.push({ id: obj.sales_group_id.toString(), name: obj.sales_group.name, selected: true })\r\n });\r\n }\r\n onAddWebSalesGroup(item: any) {\r\n this.web_filter_tag_sales_group.push({ tag_id: this.web_filter_tag.id, tag: null, sales_group_id: +item.id, sales_group: null });\r\n }\r\n onRemoveWebSalesGroup(item: any) {\r\n this.web_filter_tag_sales_group = this.web_filter_tag_sales_group.filter(x => x.sales_group_id.toString() !== item.id);\r\n }\r\n\r\n RefreshPaginationFilterTag(page?: string, page_size?: number) {\r\n var output = this.Pagination_Service.Array_Paginator(this.filter_tag_list, page, page_size);\r\n this.display_filter_tag_list = output.data;\r\n this.pagination_filter_tag = output.pagination;\r\n }\r\n\r\n onWeb_Filter_Search(value: string) {\r\n this.web_filter_search = value;\r\n this.Web_Filter_Service.getWeb_Filters(null, this.web_filter_search).subscribe((res) => {\r\n this.web_filter_list = res.body['web_search_filter'];\r\n this.pagination_web_filter = res.body['pagination'];\r\n });\r\n }\r\n\r\n onAdd_Web_Filter() {\r\n // Bind Variables \r\n this.web_filter_header = \"Enter Details To Add a New Web Serach Filter:\"\r\n this.showSearchBlock = false;\r\n }\r\n\r\n onEdit_Web_Filter(selected_Web_Filter: web_search_filter) {\r\n // Bind Variables \r\n this.web_filter_header = \"Edit Details: \" + selected_Web_Filter.name;\r\n this.web_filter = selected_Web_Filter;\r\n this.web_filter_name.setValue(selected_Web_Filter.name);\r\n this.filter_tag_list = selected_Web_Filter.web_search_filter_tags;\r\n // Update Flag\r\n this.updateButton = true;\r\n this.showSearchBlock = false;\r\n // Call Local Funtion\r\n this.RefreshPaginationFilterTag();\r\n this.panelStep = 0;\r\n }\r\n\r\n onDelete_Web_Filter(selected_Web_Filter: web_search_filter) {\r\n\r\n const dialogRef = this.dialog.open(Confirmation_Dialog_Compnent, {\r\n data: { title: \"Delete !\", text: \"Are you sure you want to delete \" + selected_Web_Filter.name + \"?\" }\r\n });\r\n\r\n dialogRef.afterClosed().subscribe(result => {\r\n if (result == true) {\r\n // call delete service\r\n this.Web_Filter_Service.deleteWeb_Filter(selected_Web_Filter).subscribe(\r\n (response) => { this.helper_service.openSnackbarNotification(selected_Web_Filter.name + ' has been deleted successfully', 'Close', 'success'); },\r\n (error) => { this.helper_service.openSnackbarNotification('Something has gone wrong!', 'Close', 'error'); },\r\n () => { this.rest_WebFilterForm() }\r\n );\r\n }\r\n });\r\n }\r\n\r\n onAddFilterTag() {\r\n // Bind Variables \r\n this.web_tag_header = \"Enter Details To Add a New Filter Tag:\"\r\n this.web_filter_tag_sales_group = [];\r\n this.web_filter_tag.filter_id = this.web_filter.id;\r\n this.web_filter.web_search_filter_tags.push(this.web_filter_tag);\r\n this.getBackend_Data_Web_Sales_Group(null, null);\r\n this.panelStep = 1;\r\n\r\n }\r\n\r\n onUpdateFilterTag(selectItem: any) {\r\n // Bind Variables \r\n this.web_tag_header = \"Edit Details: \" + selectItem.name;\r\n this.web_filter_tag = selectItem;\r\n this.web_filter_tag_sales_group = selectItem.tag_products;\r\n this.getBackend_Data_Web_Sales_Group(null, null);\r\n this.map_Data_Web_Sales_Group_Selected();\r\n this.panelStep = 1;\r\n }\r\n\r\n onDeleteFilterTag(selectItem: any) {\r\n\r\n const dialogRef = this.dialog.open(Confirmation_Dialog_Compnent, {\r\n data: { title: \"Delete !\", text: \"Are you sure you want to delete \" + selectItem.name + \"?\" }\r\n });\r\n\r\n dialogRef.afterClosed().subscribe(result => {\r\n if (result == true) {\r\n this.filter_tag_list = this.web_filter.web_search_filter_tags = this.filter_tag_list.filter(x => x.id != selectItem.id);\r\n this.RefreshPaginationFilterTag();\r\n }\r\n });\r\n }\r\n\r\n onAdd_Update_Web_Filter_Submit() {\r\n if (this.web_filter_name.valid) {\r\n // Update Web Engine\r\n if (this.updateButton) {\r\n this.Web_Filter_Service.updateWeb_Filter(this.map_Form_Data_For_Backend()).subscribe(\r\n (response) => { this.helper_service.openSnackbarNotification('You have successfully updated the web filter', 'Close', 'success'); },\r\n (error) => { this.helper_service.openSnackbarNotification('Something has gone wrong!', 'Close', 'error'); },\r\n () => { this.rest_WebFilterForm() }\r\n );\r\n }\r\n // Create New Web Engine\r\n else {\r\n this.Web_Filter_Service.addWeb_Filter(this.map_Form_Data_For_Backend()).subscribe(\r\n (response) => { this.helper_service.openSnackbarNotification('You have successfully added the web filter', 'Close', 'success'); },\r\n (error) => { this.helper_service.openSnackbarNotification('Something has gone wrong!', 'Close', 'error'); },\r\n () => { this.rest_WebFilterForm() }\r\n );\r\n }\r\n }\r\n else {\r\n this.web_filter_name.markAsTouched();\r\n }\r\n }\r\n\r\n map_Form_Data_For_Backend(): web_search_filter {\r\n\r\n this.web_filter.name = this.web_filter_name.value;\r\n\r\n if (this.web_filter.web_search_filter_tags.length == 0) {\r\n this.web_filter_tag.tag_products = this.web_filter_tag_sales_group;\r\n this.web_filter.web_search_filter_tags.push(this.web_filter_tag);\r\n }\r\n else {\r\n this.web_filter.web_search_filter_tags.forEach(x => {\r\n if (x.id == this.web_filter_tag.id) {\r\n x.filter_id = this.web_filter_tag.filter_id;\r\n x.id = this.web_filter_tag.id;\r\n x.name = this.web_filter_tag.name;\r\n x.tag_products = this.web_filter_tag_sales_group;\r\n }\r\n });\r\n }\r\n return this.web_filter;\r\n }\r\n\r\n setPanelStep(index: number) {\r\n this.panelStep = index;\r\n }\r\n\r\n rest_WebFilterForm() {\r\n this.getBackend_Data_Web_Filter(null, null);\r\n this.getBackend_Data_Web_Sales_Group(null, null);\r\n this.RefreshPaginationFilterTag();\r\n\r\n this.showSearchBlock = true;\r\n this.updateButton = false;\r\n this.panelStep = 0;\r\n\r\n this.web_filter.id = 0;\r\n this.web_filter.name = \"\";\r\n this.web_filter.web_search_filter_tags = [];\r\n this.web_filter_name.reset();\r\n this.web_filter_tag.id = 0;\r\n this.web_filter_tag.name = \"\";\r\n this.web_filter_tag.tag_products = [];\r\n\r\n this.web_filter_header = \"\";\r\n this.web_tag_header = \"\";\r\n\r\n this.filter_tag_list = [];\r\n this.web_filter_tag_sales_group = [];\r\n this.display_filter_tag_list = [];\r\n this.web_sales_group_result = [];\r\n this.availableWebSalesGroup = [];\r\n this.selectedWebSalesGroup = [];\r\n }\r\n}\r\n\r\n","import { web_search_sales_group_product } from \"./web_search_sales_group_product\";\r\nexport class web_search_sales_group {\r\n public id: number;\r\n public name: string;\r\n public product_id: string;\r\n public products: web_search_sales_group_product[] = [];\r\n}","import { web_search_sales_group } from \"./web_search_sales_group\";\r\nimport { product_selected} from '../External/product_selected';\r\n\r\nexport class web_search_sales_group_product{\r\n\r\n public sales_group_id:number;\r\n public sales_group:web_search_sales_group;\r\n public product_id:string;\r\n public product:product_selected;\r\n public not_for_sale:boolean;\r\n}","
\r\n \r\n \r\n {{connector.name}}\r\n \r\n \r\n\r\n \r\n \r\n None\r\n {{company.name}}\r\n \r\n \r\n\r\n \r\n \r\n None\r\n {{finance_centre.name}}\r\n \r\n \r\n\r\n \r\n \r\n None\r\n {{group.name}}\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n","import { Component, Output, EventEmitter, Input, TemplateRef } from '@angular/core';\r\n\r\nimport { pagination } from '../../../../../system/objects/pagination';\r\nimport { price_override_product } from '../../../objects/Channel_Management/Price_Override/price_override_product';\r\nimport { connector } from '../../../objects/Type/connector';\r\nimport { product } from '../../../../booking_engine/objects/v1_2/Web_Engine/Product/Product';\r\nimport { product_info } from '../../../objects/External/product_info';\r\nimport { product_selected } from '../../../objects/External/product_selected';\r\nimport { product_selection_filter } from '../../../objects/Common/product_selection_filter';\r\n\r\n\r\nimport { Pagination_Service } from '../../../../../system/services/Pagination_Service';\r\nimport { Product_Selection_Service } from '../../../services/Comman/Product_Selection/Product_Selection';\r\n\r\n\r\n@Component({\r\n selector: 'product-selection',\r\n templateUrl: './product_selection.html'\r\n})\r\nexport class Component_Product_Selection {\r\n\r\n @Input() selectededItems: any[] = [];\r\n @Input() enableSelectedRowAdd: boolean = false;\r\n @Input() selectionFilter: product_selection_filter = null;\r\n @Input() enableSelectedRowSettings: boolean = false;\r\n @Input() settingsTemplateRef: TemplateRef;\r\n\r\n @Output() addProductSelected: EventEmitter = new EventEmitter();\r\n @Output() removeProductSelected: EventEmitter = new EventEmitter();\r\n @Output() productSelectedOptionAdd: EventEmitter = new EventEmitter();\r\n @Output() productSelectedOptionSettings: EventEmitter = new EventEmitter();\r\n\r\n productSelected: product_selected;\r\n\r\n availableProductItems: any[] = [];\r\n pagination_products: pagination = new pagination();\r\n price_override_products: price_override_product[] = [];\r\n\r\n productSearch: string = \"\";\r\n pageNumber: number = 0;\r\n pageSize: number = 0;\r\n conector_type_list: connector[] = [];\r\n\r\n companies: any[] = [];\r\n finance_centres: any[] = [];\r\n product_groups: any[] = [];\r\n productItems: any[] = [];\r\n\r\n product_info: string = \"\";\r\n selected_connector = null;\r\n selected_company = null;\r\n selected_finance_centre = null;\r\n selected_product_group = null;\r\n\r\n constructor(private Product_Selection_Service: Product_Selection_Service, private Pagination_Service: Pagination_Service) {\r\n\r\n }\r\n ngOnInit() {\r\n // Get the list of connector type from backend\r\n this.Product_Selection_Service.getConnector_Type_List(null).subscribe((res: connector[]) => {\r\n this.conector_type_list = res;\r\n if (this.selectionFilter != null) {\r\n this.setSearchControls(this.selectionFilter);\r\n }\r\n });\r\n }\r\n onClick_Products_Pagination(e: any) {\r\n this.pageNumber = e.pageIndex + 1;\r\n this.pageSize = e.pageSize;\r\n this.getBackend_Data_Products_Available(this.pageNumber, this.pageSize, this.productSearch);\r\n }\r\n onClick_Product_Search(value: string) {\r\n this.productSearch = value;\r\n this.pageNumber = 0;\r\n this.pageSize = 0;\r\n this.getBackend_Data_Products_Available(this.pageNumber, this.pageSize, this.productSearch);\r\n }\r\n getBackend_Data_Products_Available(page: number, pageSize: number, search?: string) {\r\n\r\n var output = this.Pagination_Service.Array_Paginator(this.productItems.filter(x => x.name.toLocaleLowerCase().includes(search.toLocaleLowerCase())), page.toString(), pageSize);\r\n this.pagination_products = output.pagination;\r\n this.availableProductItems = [];\r\n this.availableProductItems = output.data;\r\n }\r\n\r\n setSearchControls(productSelectionFilter: product_selection_filter) {\r\n\r\n if (productSelectionFilter.excluded_connector_id != null) {\r\n this.conector_type_list = this.conector_type_list.filter(x => x.id != this.selectionFilter.excluded_connector_id);\r\n }\r\n\r\n if (productSelectionFilter.selected_connector_id != null) {\r\n this.Product_Selection_Service.getConnector_Product_List(null, productSelectionFilter.selected_connector_id).subscribe((res: product) => {\r\n this.product_info = res[0].product_info;\r\n var productInfo = JSON.parse(this.product_info);\r\n\r\n // Filter on connector\r\n this.selected_connector = productSelectionFilter.selected_connector_id;\r\n\r\n // Filter on company\r\n productInfo.companies = productInfo.companies.filter(company =>\r\n company.name == productSelectionFilter.selected_company\r\n );\r\n this.selected_company = productInfo.companies[0].company_identifier;\r\n\r\n // Filter on finance centre\r\n productInfo.companies.forEach(c => {\r\n c.finance_centres = c.finance_centres.filter(fc => fc.name == productSelectionFilter.selected_finance_centre);\r\n });\r\n this.selected_finance_centre = productInfo.companies[0].finance_centres[0].finance_centre_identifier;\r\n\r\n // Filter on product group\r\n productInfo.companies.forEach(c => {\r\n c.finance_centres.forEach(fc => {\r\n fc.product_groups = fc.product_groups.filter(pg => pg.name == productSelectionFilter.selected_product_group);\r\n });\r\n });\r\n this.selected_product_group = productInfo.companies[0].finance_centres[0].product_groups[0].product_group_identifier;\r\n\r\n this.selectionFilter = null;\r\n this.fill_Connector_Products(productInfo);\r\n });\r\n };\r\n }\r\n\r\n\r\n onConnectorFilter(item: any) {\r\n // Get Contector Product Info from Backend\r\n this.Product_Selection_Service.getConnector_Product_List(null, this.selected_connector).subscribe((res: product) => {\r\n this.product_info = res[0].product_info;\r\n this.fill_Connector_Products(JSON.parse(this.product_info));\r\n this.selected_company = null;\r\n this.selected_finance_centre = null;\r\n this.selected_product_group = null;\r\n });\r\n }\r\n onCompanyFilter() {\r\n\r\n var producInfo = JSON.parse(this.product_info);\r\n\r\n // Filter on company\r\n if (this.selected_company != null) {\r\n producInfo.companies = producInfo.companies.filter(company => company.company_identifier == this.selected_company);\r\n }\r\n\r\n //Rest selected filters\r\n this.selected_finance_centre = null;\r\n this.selected_product_group = null;\r\n this.fill_Connector_Products(producInfo);\r\n }\r\n onFinanceCentreFilter() {\r\n\r\n var producInfo = JSON.parse(this.product_info);\r\n // Filter on company\r\n if (this.selected_company != null) {\r\n producInfo.companies = producInfo.companies.filter(company => company.company_identifier == this.selected_company);\r\n }\r\n // Filter on finance centre\r\n if (this.selected_finance_centre != null) {\r\n producInfo.companies.forEach(c => {\r\n c.finance_centres = c.finance_centres.filter(fc => fc.finance_centre_identifier == this.selected_finance_centre);\r\n })\r\n }\r\n //Rest selected filters\r\n this.selected_product_group = null\r\n\r\n this.fill_Connector_Products(producInfo);\r\n }\r\n onProductGroupFilter() {\r\n\r\n var producInfo = JSON.parse(this.product_info);\r\n\r\n // Filter on company\r\n if (this.selected_company != null) {\r\n producInfo.companies = producInfo.companies.filter(company => company.company_identifier == this.selected_company);\r\n }\r\n // Filter on finance centre\r\n if (this.selected_finance_centre != null) {\r\n producInfo.companies.forEach(c => {\r\n c.finance_centres = c.finance_centres.filter(fc => fc.finance_centre_identifier == this.selected_finance_centre);\r\n })\r\n }\r\n // Filter on product group\r\n if (this.selected_product_group != null) {\r\n producInfo.companies.forEach(c => {\r\n c.finance_centres.forEach(fc => {\r\n fc.product_groups = fc.product_groups.filter(pg => pg.product_group_identifier == this.selected_product_group);\r\n });\r\n })\r\n }\r\n\r\n this.fill_Connector_Products(producInfo);\r\n }\r\n fill_Connector_Products(connector_product: product_info) {\r\n // Reset Variables before populating\r\n this.companies = [];\r\n this.finance_centres = [];\r\n this.product_groups = [];\r\n this.productItems = [];\r\n\r\n var producInfo: product_info = JSON.parse(this.product_info);\r\n producInfo.companies.forEach(c => {\r\n if (c.company_identifier == this.selected_company) {\r\n c.finance_centres.forEach(fc => {\r\n if (fc.finance_centre_identifier == this.selected_finance_centre) {\r\n fc.product_groups.forEach(pg => {\r\n //Populate data for Product Group Filter DropDown\r\n this.product_groups.push({ id: pg.product_group_identifier, name: pg.name });\r\n });\r\n }\r\n //Populate data for finiance centre Filter DropDown\r\n this.finance_centres.push({ id: fc.finance_centre_identifier, name: fc.name });\r\n });\r\n }\r\n // Populate data for Company Filter DropDown\r\n this.companies.push({ id: c.company_identifier, name: c.name });\r\n });\r\n\r\n connector_product.companies.forEach(company => {\r\n company.finance_centres.forEach(fc => {\r\n fc.product_groups.forEach(pg => {\r\n pg.products.forEach(prod => {\r\n // Get Data for avaliable list\r\n this.productItems.push({\r\n id: prod.product_identifier,\r\n name: prod.name,\r\n selected: false,\r\n dataType: {\r\n id: null,\r\n connector_id: this.selected_connector,\r\n connector: null,\r\n external_identifier: prod.product_identifier,\r\n company: company.name,\r\n company_finance_centre: fc.name,\r\n company_finance_centre_product_group: pg.name,\r\n company_finance_centre_product_group_product: prod.name,\r\n disabled: false,\r\n disabled_date: null,\r\n external_company_identifier: company.company_identifier\r\n }\r\n });\r\n });\r\n });\r\n });\r\n });\r\n\r\n this.productItems.sort((a, b) => a.name.toLowerCase() > b.name.toLowerCase() ? 1 : a.name.toLowerCase() === b.name.toLowerCase() ? 0 : -1);\r\n\r\n this.product_groups.sort((a, b) => a.name.toLowerCase() > b.name.toLowerCase() ? 1 : a.name.toLowerCase() === b.name.toLowerCase() ? 0 : -1);\r\n\r\n this.getBackend_Data_Products_Available(this.pageNumber, this.pageSize, this.productSearch);\r\n }\r\n onAddProductSelected(item: any) {\r\n this.Product_Selection_Service.addProduct_Selected(item.dataType).subscribe(res => {\r\n this.productSelected = res.body\r\n this.selectededItems.forEach(obj => {\r\n if (obj.id == item.id) {\r\n obj.product_id = this.productSelected.id\r\n }\r\n })\r\n this.addProductSelected.emit(this.productSelected);\r\n });\r\n }\r\n onRemoveProductSelected(item: any) {\r\n this.removeProductSelected.emit(item);\r\n }\r\n onProductSelectedAddOption(item: any) {\r\n this.productSelectedOptionAdd.emit(item);\r\n }\r\n onProductSelectedSettingsOption(item: any) {\r\n this.productSelectedOptionSettings.emit(item);\r\n }\r\n}\r\n","\r\n \r\n \r\n
\r\n group_work Sales Group\r\n
\r\n
\r\n \r\n
{{web_sales_group_header}}
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Sales Group Name {{element.name}} Actions \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n You must enter a value\r\n \r\n \r\n

Sales Group Products

\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n \r\n {{product.name}}\r\n \r\n You must select a product\r\n \r\n\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n\r\n\r\n
\r\n Not For Sale\r\n
\r\n
","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { FormControl, Validators } from '@angular/forms';\r\nimport { Confirmation_Dialog_Compnent } from \"../../.././../../material_ui/components/UI_Dialogs/Confirmation_Dialog/Confirmation_Dialog\";\r\n\r\nimport { web_search_sales_group } from '../../../objects/Web_Search/web_search_sales_group';\r\nimport { web_search_sales_group_product } from '../../../objects/Web_Search/web_search_sales_group_product';\r\nimport { pagination } from \"../../../../../system/objects/pagination\";\r\n\r\nimport { Web_Search_Sales_Group_Service } from '../../../services/Web_Search_Sales_Group/Web_Search_Sales_Group';\r\nimport { Helper_Service } from '../../../../../material_ui/services/Core/Helper_Service';\r\n\r\n@Component({\r\n selector: 'web_search_sales_group',\r\n templateUrl: './web_search_sales_group.html',\r\n styleUrls: ['web_search_sales_group.scss'],\r\n})\r\nexport class Component_Web_Search_Sales_Group {\r\n\r\n web_sales_group_header: string = \"\";\r\n web_sales_group_result: web_search_sales_group[];\r\n pagination_web_sales_group: pagination = new pagination();\r\n displayedColumns: string[] = ['name', 'edit'];\r\n\r\n // Form & Controls Variables\r\n sales_group_search: string = \"\";\r\n product_search: string = \"\";\r\n sales_group_id: number;\r\n sales_group_name = new FormControl('', [Validators.required]);\r\n product_id = new FormControl('', [Validators.required]);\r\n sales_group_products: web_search_sales_group_product[] = [];\r\n sales_group_product_settings = new web_search_sales_group_product;\r\n selectedProductItems: any[] = [];\r\n defaultProductItems: any[] = [];\r\n pageIndex: number = 0;\r\n pageSize: number = 0;\r\n @ViewChild(MatPaginator) paginator: MatPaginator;\r\n\r\n\r\n // Flags\r\n updateButton: boolean = false;\r\n showSearchBlock: boolean = true;\r\n\r\n constructor(private Web_Search_Sales_Group_Service: Web_Search_Sales_Group_Service, private helper_service: Helper_Service, private dialog: MatDialog) { }\r\n\r\n //#region Web Sales Group Main Screen Functions\r\n ngOnInit() {\r\n this.getBackend_Data_Sales_Group(null, null);\r\n }\r\n\r\n onClick_Sales_Group_Pagination(e: any) {\r\n this.pageIndex = e.pageIndex + 1;\r\n this.pageSize = e.pageSize\r\n this.salesGroupPagination();\r\n }\r\n\r\n salesGroupPagination() {\r\n if ((this.pageSize != this.pagination_web_sales_group.page_size) ||\r\n (this.pagination_web_sales_group.previous_page_link == null && this.pagination_web_sales_group.next_page_link == null)) {\r\n this.buildSalesGroupData();\r\n } else {\r\n // Navigate to specific page\r\n var url: string = this.pagination_web_sales_group.previous_page_link == null ? this.pagination_web_sales_group.next_page_link : this.pagination_web_sales_group.previous_page_link;\r\n var newPage: string = \"page_number=\" + this.pageIndex + \"&\";\r\n this.navigateSelectedPage(url.replace(/page_number=.+&/, newPage));\r\n }\r\n }\r\n\r\n navigateSelectedPage(pageURL: string) {\r\n this.Web_Search_Sales_Group_Service.getWeb_Sales_Group(pageURL, null, null).subscribe((res) => {\r\n this.web_sales_group_result = res.body['web_search_sales_group'];\r\n this.pagination_web_sales_group = res.body['pagination'];\r\n this.paginator.pageIndex = this.pagination_web_sales_group.current_page - 1;\r\n this.paginator.pageSize = this.pagination_web_sales_group.page_size;\r\n });\r\n\r\n }\r\n\r\n buildSalesGroupData() {\r\n if (this.sales_group_search.length == 0 && this.product_search.length == 0) {\r\n this.getBackend_Data_Sales_Group(1, this.pageSize);\r\n }\r\n if (this.sales_group_search.length > 0) {\r\n this.searchWebSalesGroup();\r\n }\r\n if (this.product_search.length > 0) {\r\n this.searchWebSalesProduct();\r\n }\r\n }\r\n\r\n getBackend_Data_Sales_Group(page: number, pageSize: number) {\r\n this.Web_Search_Sales_Group_Service.getWeb_Sales_Group_List(page, pageSize).subscribe((res) => {\r\n this.web_sales_group_result = res.body['web_search_sales_group'];\r\n this.pagination_web_sales_group = res.body['pagination'];\r\n this.pageIndex = this.pagination_web_sales_group.current_page;\r\n this.pageSize = this.pagination_web_sales_group.page_size;\r\n this.paginator.pageIndex = this.pagination_web_sales_group.current_page - 1;\r\n this.paginator.pageSize = this.pageSize;\r\n });\r\n }\r\n\r\n searchWebSalesGroup() {\r\n this.Web_Search_Sales_Group_Service.getWeb_Sales_Group(null, this.sales_group_search, this.pageSize).subscribe((res) => {\r\n this.web_sales_group_result = res.body['web_search_sales_group'];\r\n this.pagination_web_sales_group = res.body['pagination'];\r\n this.pageIndex = this.pagination_web_sales_group.current_page;\r\n this.pageSize = this.pagination_web_sales_group.page_size;\r\n this.paginator.pageIndex = this.pagination_web_sales_group.current_page - 1;\r\n this.paginator.pageSize = this.pagination_web_sales_group.page_size;\r\n });\r\n }\r\n\r\n searchWebSalesProduct() {\r\n this.Web_Search_Sales_Group_Service.getWeb_Sales_Group_For_Product(null, this.product_search, this.pageSize).subscribe((res) => {\r\n this.web_sales_group_result = res.body['web_search_sales_group'];\r\n this.pagination_web_sales_group = res.body['pagination'];\r\n this.pageIndex = this.pagination_web_sales_group.current_page;\r\n this.pageSize = this.pagination_web_sales_group.page_size;\r\n this.paginator.pageIndex = this.pagination_web_sales_group.current_page - 1;\r\n this.paginator.pageSize = this.pagination_web_sales_group.page_size;\r\n });\r\n }\r\n\r\n onAdd_Sales_Group() {\r\n // Bind Variables \r\n this.web_sales_group_header = \"Enter Details To Add a New Web Sales Group\"\r\n this.selectedProductItems = [];\r\n this.defaultProductItems = [];\r\n this.sales_group_products = [];\r\n this.showSearchBlock = false;\r\n }\r\n\r\n onEdit_Sales_Group(selected_Sales_Group: web_search_sales_group) {\r\n // Bind Variables \r\n this.web_sales_group_header = \"Edit Details: \" + selected_Sales_Group.name;\r\n this.sales_group_id = selected_Sales_Group.id;\r\n this.sales_group_name.setValue(selected_Sales_Group.name);\r\n\r\n this.sales_group_products = selected_Sales_Group.products;\r\n\r\n // Update Flag\r\n this.updateButton = true;\r\n this.showSearchBlock = false;\r\n // Call Local Funtion\r\n this.map_Data_Products_Selected();\r\n this.product_id.setValue(selected_Sales_Group.product_id);\r\n }\r\n\r\n onDelete_Sales_Group(selected_Sales_Group: web_search_sales_group) {\r\n\r\n const dialogRef = this.dialog.open(Confirmation_Dialog_Compnent, {\r\n data: { title: \"Delete !\", text: \"Are you sure you want to delete \" + selected_Sales_Group.name + \"?\" }\r\n });\r\n\r\n dialogRef.afterClosed().subscribe(result => {\r\n if (result == true) {\r\n // call delete service\r\n this.Web_Search_Sales_Group_Service.deleteWeb_Sales_Group(selected_Sales_Group).subscribe(\r\n (response) => { this.helper_service.openSnackbarNotification(selected_Sales_Group.name + ' has been deleted successfully', 'Close', 'success'); },\r\n (error) => { this.helper_service.openSnackbarNotification('Something has gone wrong!', 'Close', 'error'); },\r\n () => { this.reset_SalesGroupForm() }\r\n );\r\n }\r\n });\r\n }\r\n //#endregion\r\n\r\n //#Web Sales Group Detail Screen Functions\r\n map_Data_Products_Selected() {\r\n this.selectedProductItems = [];\r\n this.defaultProductItems = [];\r\n this.sales_group_products.forEach(obj => {\r\n this.selectedProductItems.push({ id: obj.product.external_identifier, name: obj.product.company_finance_centre_product_group_product, selected: true, product_id: obj.product_id, not_for_sale: obj.not_for_sale });\r\n this.defaultProductItems.push({ id: obj.product.id, name: obj.product.company_finance_centre_product_group_product, not_for_sale: obj.not_for_sale });\r\n });\r\n }\r\n\r\n onAddProduct(item: any) {\r\n var product = { name: item.company_finance_centre_product_group_product };\r\n this.sales_group_products.push({ sales_group_id: this.sales_group_id, product_id: item.id, not_for_sale: item.not_for_sale, sales_group: null, product: null });\r\n this.defaultProductItems.push({ id: item.id, name: item.company_finance_centre_product_group_product });\r\n if (this.defaultProductItems.length == 1) {\r\n this.product_id.setValue(item.id);\r\n }\r\n }\r\n\r\n onRemoveProduct(item: any) {\r\n this.sales_group_products = this.sales_group_products.filter(x => x.product_id != item.product_id);\r\n this.defaultProductItems = this.defaultProductItems.filter(x => x.id != item.product_id);\r\n if (this.product_id.value == item.product_id) {\r\n this.product_id.setValue('');\r\n }\r\n }\r\n\r\n onProductSettings(item: any) {\r\n this.sales_group_product_settings = this.sales_group_products.find(x => x.product_id == item.product_id);\r\n }\r\n\r\n onSales_Group_Search(value: string) {\r\n this.sales_group_search = value;\r\n this.product_search = \"\";\r\n this.buildSalesGroupData();\r\n }\r\n\r\n onProduct_Search(value: string) {\r\n this.product_search = value;\r\n this.sales_group_search = \"\";\r\n this.buildSalesGroupData();\r\n }\r\n\r\n onAdd_Update_Sales_Group_Submit() {\r\n\r\n var addUpdateWebSalesGroup = new web_search_sales_group;\r\n addUpdateWebSalesGroup.id = this.sales_group_id;\r\n addUpdateWebSalesGroup.name = this.sales_group_name.value;\r\n addUpdateWebSalesGroup.product_id = this.product_id.value;\r\n addUpdateWebSalesGroup.products = this.sales_group_products;\r\n\r\n if (this.sales_group_name.valid && this.product_id.valid) {\r\n // Update Web Sales Group\r\n if (this.updateButton) {\r\n this.Web_Search_Sales_Group_Service.updateWeb_Sales_Group(addUpdateWebSalesGroup).subscribe(\r\n (response) => { this.helper_service.openSnackbarNotification('You have successfully updated the sales group', 'Close', 'success'); },\r\n (error) => { this.helper_service.openSnackbarNotification('Something has gone wrong!', 'Close', 'error'); },\r\n () => { this.reset_SalesGroupForm() }\r\n );\r\n }\r\n // Create New Web Sales Group\r\n else {\r\n this.Web_Search_Sales_Group_Service.addWeb_Sales_Group(addUpdateWebSalesGroup).subscribe(\r\n (response) => { this.helper_service.openSnackbarNotification('You have successfully added the sales group', 'Close', 'success'); },\r\n (error) => { this.helper_service.openSnackbarNotification('Something has gone wrong!', 'Close', 'error'); },\r\n () => { this.reset_SalesGroupForm() }\r\n );\r\n }\r\n }\r\n else {\r\n this.sales_group_name.markAsTouched();\r\n }\r\n }\r\n\r\n reset_SalesGroupForm() {\r\n this.salesGroupPagination();\r\n this.showSearchBlock = true;\r\n this.updateButton = false;\r\n this.web_sales_group_header = \"\";\r\n this.sales_group_id = 0;\r\n this.sales_group_name.reset();\r\n this.selectedProductItems = [];\r\n this.defaultProductItems = [];\r\n this.sales_group_products = [];\r\n }\r\n //#endregion\r\n}\r\n\r\n","import { connector } from '../Type/connector';\r\nimport { affiliate_hold_time } from \"./affiliate_hold_time\"\r\nimport { cache_server } from '../Type/cache_server';\r\nexport class affiliate {\r\n public app_id: string;\r\n public api_key: string;\r\n public name: string;\r\n public allow_price_override: boolean;\r\n public payment_delay_minutes?: number;\r\n public connector_id: number\r\n public connector: connector;\r\n public agent_id: string;\r\n public agent_contact_id?: number;\r\n public sales_centre_id?: number;\r\n public allow_confirmed_cancellation: boolean;\r\n public default_hold_time_id: number;\r\n public default_hold_time: affiliate_hold_time;\r\n public max_hold_time_id: number;\r\n public max_hold_time: affiliate_hold_time;\r\n public enable_production: boolean;\r\n public utm_source: string;\r\n public white_label: boolean;\r\n public send_itinerary_only: boolean;\r\n public send_itinerary_agency: boolean;\r\n public selected_cache_servers: cache_server[];\r\n}\r\n","
\r\n \r\n
","import { Component } from '@angular/core';\r\nimport { Call_Info_Service } from '../../../system/services/Call_Info_Service';\r\n\r\n\r\n@Component({\r\n selector: 'mat-loading-indicator',\r\n templateUrl: './Loading_Indicator.html',\r\n styleUrls: ['./Loading_Indicator.scss']\r\n})\r\nexport class Loading_Indicator_Component {\r\n\r\n showProgress: boolean = false;\r\n\r\n constructor(private call_info_service: Call_Info_Service) {\r\n }\r\n\r\n ngDoCheck() {\r\n // Show the progress bar if any call is in queue\r\n if (this.call_info_service.active_calls.length > 0) {\r\n this.showProgress = true;\r\n this.call_info_service.showProgress = true;\r\n }\r\n else {\r\n this.showProgress = false;\r\n this.call_info_service.showProgress = false;\r\n }\r\n }\r\n\r\n}","\r\n \r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n {{ onDisplayString() }}\r\n \r\n {{ option[display] }}\r\n \r\n
\r\n {{ errorMsg }}\r\n
","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n Output,\r\n ViewChild,\r\n DoCheck\r\n} from \"@angular/core\";\r\nimport { FormControl } from \"@angular/forms\";\r\nimport { MatSelect } from '@angular/material/select';\r\nimport * as _ from 'lodash';\r\n\r\n\r\n\r\n@Component({\r\n selector: \"mat-select-autocomplete\",\r\n templateUrl: './Select_Autocomplete.html',\r\n styleUrls: ['./Select_Autocomplete.scss']\r\n})\r\nexport class SelectAutocompleteComponent implements OnChanges, DoCheck {\r\n @Input() selectPlaceholder: string = \"search...\";\r\n @Input() placeholder: string;\r\n @Input() options;\r\n @Input() disabled = true;\r\n @Input() display = \"name\";\r\n @Input() value = \"id\";\r\n @Input() formControl: FormControl = new FormControl();\r\n @Input() errorMsg: string = \"Field is required\";\r\n @Input() showErrorMsg = false;\r\n @Input() selectedOptions;\r\n @Input() multiple = true;\r\n\r\n // New Options\r\n @Input() labelCount: number = 1;\r\n @Input() appearance: \"standard\" | \"fill\" | \"outline\" = \"standard\";\r\n\r\n @Output() selectionChange: EventEmitter = new EventEmitter();\r\n\r\n @ViewChild(\"selectElem\", { static: true }) selectElem: MatSelect;\r\n\r\n filteredOptions: Array = [];\r\n selectedValue: Array = [];\r\n selectAllChecked = false;\r\n displayString = \"\";\r\n\r\n constructor() { }\r\n\r\n ngOnChanges() {\r\n if (this.disabled) {\r\n this.formControl.disable();\r\n } else {\r\n this.formControl.enable();\r\n }\r\n this.filteredOptions = this.options;\r\n if (this.selectedOptions) {\r\n this.selectedValue = this.selectedOptions;\r\n } else if (this.formControl.value) {\r\n this.selectedValue = this.formControl.value;\r\n }\r\n\r\n }\r\n\r\n ngDoCheck() {\r\n if (!this.selectedValue.length) {\r\n this.selectionChange.emit(this.selectedValue);\r\n }\r\n }\r\n\r\n toggleSelectAll(val) {\r\n if (val.checked) {\r\n var result = _.union(this.selectedValue, this.filteredOptions);\r\n this.selectedValue = _.uniqBy(result, this.value);\r\n\r\n } else {\r\n const filteredValues = this.getFilteredOptionsValues();\r\n this.selectedValue = _.xorBy(filteredValues, this.selectedValue, this.value);\r\n }\r\n this.selectionChange.emit(this.selectedValue);\r\n }\r\n\r\n filterItem(value) {\r\n this.filteredOptions = this.options.filter(\r\n item => item[this.display].toLowerCase().indexOf(value.toLowerCase()) > -1\r\n );\r\n this.selectAllChecked = true;\r\n this.filteredOptions.forEach(item => {\r\n if (!this.selectedValue.includes(item[this.value])) {\r\n this.selectAllChecked = false;\r\n }\r\n });\r\n if (!this.filteredOptions.length) {\r\n this.selectAllChecked = false;\r\n }\r\n }\r\n\r\n hideOption(option) {\r\n return !(this.filteredOptions.indexOf(option) > -1);\r\n }\r\n\r\n getFilteredOptionsValues() {\r\n const filteredValues = [];\r\n this.filteredOptions.forEach(option => {\r\n filteredValues.push(option);\r\n });\r\n return filteredValues;\r\n }\r\n\r\n onDisplayString() {\r\n this.displayString = \"\";\r\n if (this.selectedValue && this.options) {\r\n let displayOption = [];\r\n if (this.multiple) {\r\n // Multi select display\r\n for (let i = 0; i < this.labelCount; i++) {\r\n displayOption[i] = this.options.filter(\r\n option => option[this.value] === (this.selectedValue[i] == undefined ? this.selectedValue[i] : this.selectedValue[i][this.value])\r\n )[0];\r\n }\r\n if (displayOption.length) {\r\n for (let i = 0; i < displayOption.length; i++) {\r\n if (displayOption[i] && displayOption[i][this.display]) {\r\n this.displayString += displayOption[i][this.display] + \",\";\r\n }\r\n }\r\n this.displayString = this.displayString.slice(0, -1);\r\n if (\r\n this.selectedValue.length > 1 &&\r\n this.selectedValue.length > this.labelCount\r\n ) {\r\n this.displayString += ` (+${this.selectedValue.length -\r\n this.labelCount} others)`;\r\n }\r\n }\r\n } else {\r\n // Single select display\r\n displayOption = this.options.filter(\r\n option => option[this.value] === this.selectedValue[this.value]\r\n );\r\n if (displayOption.length) {\r\n this.displayString = displayOption[0][this.display];\r\n }\r\n }\r\n }\r\n return this.displayString;\r\n }\r\n onSelectionChange(val) {\r\n const filteredValues = this.getFilteredOptionsValues();\r\n let count = 0;\r\n if (this.multiple) {\r\n this.selectedValue.filter(item => {\r\n if (filteredValues.includes(item)) {\r\n count++;\r\n }\r\n });\r\n this.selectAllChecked = count === this.filteredOptions.length;\r\n }\r\n this.selectedValue = val.value;\r\n this.selectionChange.emit(this.selectedValue);\r\n }\r\n public trackByFn(index, item) {\r\n return item;\r\n }\r\n compareObjects(o1: any, o2: any): boolean {\r\n return o1 && o2 ? (o1.id === o2.id && o1.display === o2.display) : o1 === o2;\r\n }\r\n}","\r\n\r\n \r\n \r\n
\r\n attachment Affiliate\r\n
\r\n
\r\n \r\n
{{affiliate_header}}
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Connector {{element.connector.name}} Affiliate Name {{element.name}} Agent ID {{element.agent_id}} Actions \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n \r\n \r\n You must enter a value\r\n \r\n\r\n \r\n \r\n \r\n {{affilateForm.controls.selectedCacheServer.value ? affilateForm.controls.selectedCacheServer.value[0]?.name : ''}}\r\n 1\"\r\n class=\"example-additional-selection\">\r\n (+{{affilateForm.controls.selectedCacheServer.value.length - 1}}\r\n {{affilateForm.controls.selectedCacheServer.value?.length === 2 ? 'other' : 'others'}})\r\n \r\n \r\n {{cs.name}}\r\n \r\n \r\n\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n\r\n \r\n \r\n \r\n {{ht.name}}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n {{ht.name}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n
\r\n \r\n \r\n {{connector.name}}\r\n \r\n \r\n \r\n\r\n \r\n \r\n None\r\n {{company.name}}\r\n \r\n \r\n\r\n \r\n \r\n None\r\n \r\n {{finance_centre.name}}\r\n \r\n \r\n
\r\n\r\n
\r\n
\r\n Allow Price Override\r\n \r\n Send Itinerary Agency\r\n \r\n Send Itinerary Only\r\n \r\n Allow\r\n Confirmed Cancellation\r\n Enable Production\r\n \r\n White Label\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { FormControl, Validators, FormGroup } from '@angular/forms';\r\nimport { MatSelect } from '@angular/material/select';\r\n\r\nimport { affiliate } from '../../../objects/Affiliate/affiliate';\r\nimport { company_finance_centre } from '../../../objects/External/company_finance_centre';\r\nimport { connector } from '../../../objects/Type/connector';\r\nimport { affiliate_hold_time } from '../../../objects/Affiliate/affiliate_hold_time';\r\nimport { cache_server } from '../../../objects/Type/cache_server';\r\nimport { pagination } from \"../../../../../system/objects/pagination\";\r\nimport { affiliate_cache } from '../../../objects/Affiliate/affiliate_cache';\r\nimport { affiliate_channel_management_list } from '../../../objects/Affiliate/affiliate_channel_management_list';\r\nimport { product } from '../../../../booking_engine/objects/v1_2/Web_Engine/Product/Product';\r\nimport { product_info } from '../../../objects/External/product_info';\r\n\r\nimport { Affiliate_Service } from '../../../services/Affiliate/Affiliate';\r\nimport { Helper_Service } from '../../../../../material_ui/services/Core/Helper_Service';\r\nimport { Product_Selection_Service } from '../../../services/Comman/Product_Selection/Product_Selection';\r\nimport { List_Management_Service } from '../../../services/Channel_Management/List_Management/List';\r\n\r\n@Component({\r\n selector: 'affiliate',\r\n templateUrl: './affiliate.html'\r\n})\r\nexport class Component_Affiliate {\r\n\r\n affilateForm: FormGroup;\r\n\r\n affiliate_header: string = \"\";\r\n search_text: string = \"\";\r\n affiliate_list: affiliate[];\r\n company_finance_centre_list: company_finance_centre[];\r\n hold_time_list: affiliate_hold_time[];\r\n pagination_affiliate: pagination = new pagination();\r\n cache_server: cache_server[] = [];\r\n connectors: connector[] = [];\r\n companies: any[] = [];\r\n finance_centres: any[] = [];\r\n product_info: string = \"\";\r\n selected_company: string = null;\r\n selected_finance_centre: number = null;\r\n //Channel Management Variables\r\n channel_management_lists: any[];\r\n //selected_channel_management_list: any[] = [];\r\n selected_list: any[] = [];\r\n showError = false;\r\n errorMessage = 'You must enter a value';\r\n\r\n displayedColumns: string[] = ['connector', 'name', 'agent_id', 'edit'];\r\n //Affiliate Cache Control\r\n @ViewChild(\"cacheList\") cacheList: MatSelect;\r\n\r\n // Form & Controls Variables\r\n affilate_app_id: string;\r\n affilate_api_key: string;\r\n\r\n // Flags\r\n updateButton: boolean = false;\r\n showSearchBlock: boolean = true;\r\n\r\n constructor(private Affiliate_Service: Affiliate_Service, private Helper_Service: Helper_Service,\r\n private Product_Selection_Service: Product_Selection_Service, private List_Management_Service: List_Management_Service) { }\r\n\r\n ngOnInit() {\r\n this.getBackend_Data_For_Controls();\r\n this.getBackend_Data_Affiliate(null, null);\r\n }\r\n\r\n onClick_Affiliate_Pagination(e: any) {\r\n this.getBackend_Data_Affiliate(e.pageIndex + 1, e.pageSize);\r\n }\r\n\r\n getBackend_Data_For_Controls() {\r\n // Get Api Info\r\n this.Affiliate_Service.getApi_info(null).subscribe((res) => {\r\n this.affilate_api_key = res[\"api_key\"];\r\n this.affilate_app_id = res[\"app_id\"];\r\n });\r\n // Get Affiliate Hold Time List\r\n this.Affiliate_Service.getAffiliate_Hold_Time(null, null, true).subscribe((res) => {\r\n this.hold_time_list = res.body[\"affiliate_hold_time\"];\r\n });\r\n // Get Affiliate Type Cache Server\r\n this.Affiliate_Service.getCache_Server(null).subscribe(res => {\r\n this.cache_server = res;\r\n });\r\n // Get Connector List\r\n this.Product_Selection_Service.getConnector_Type_List(null).subscribe((res: connector[]) => {\r\n this.connectors = res;\r\n });\r\n // Get Channel Management List\r\n this.List_Management_Service.getChannel_Management_List(null, null, \"\", true).subscribe(res => {\r\n this.channel_management_lists = res.body[\"list\"];\r\n });\r\n\r\n }\r\n\r\n getBackend_Data_Affiliate(page: number, pageSize: number) {\r\n this.Affiliate_Service.getAffiliate_List(page, pageSize).subscribe((res) => {\r\n this.affiliate_list = res.body['affiliate'];\r\n this.pagination_affiliate = res.body['pagination'];\r\n });\r\n }\r\n\r\n onAffiliate_Search(value: string) {\r\n this.search_text = value;\r\n this.Affiliate_Service.getAffiliate(null, this.search_text).subscribe((res) => {\r\n this.affiliate_list = res.body['affiliate'];\r\n this.pagination_affiliate = res.body['pagination'];\r\n });\r\n }\r\n\r\n onAdd_Affiliate() {\r\n var affilate_data = new affiliate;\r\n\r\n // Bind Variables \r\n this.affiliate_header = \"Enter Details To Add a New Affiliate:\"\r\n affilate_data.api_key = this.affilate_api_key;\r\n affilate_data.app_id = this.affilate_app_id;\r\n this.selected_company = null;\r\n this.selected_finance_centre = null;\r\n this.setAffiliateForm(affilate_data);\r\n\r\n // Update Flag\r\n this.showSearchBlock = false;\r\n }\r\n\r\n async onEdit_Affiliate(selected_affiliate: affiliate) {\r\n // Bind Variables \r\n this.affiliate_header = \"Edit Details: \" + selected_affiliate.name;\r\n this.selected_company = null;\r\n this.selected_finance_centre = null;\r\n // Reset Variables before populating\r\n this.companies = [];\r\n this.finance_centres = [];\r\n\r\n // Set Company / Finance Centre dropdowns\r\n this.product_info = (await this.Product_Selection_Service.getConnector_Product_List(null, selected_affiliate.connector_id).toPromise())[0].product_info;\r\n var productInfo: product_info = JSON.parse(this.product_info);\r\n productInfo.companies.forEach(c => {\r\n // Populate data for Company Filter DropDown\r\n this.companies.push({ id: Number(c.company_identifier), name: c.name });\r\n if (selected_affiliate.sales_centre_id != null) {\r\n // Find company for sales centre (finance centre)\r\n var foundFinanceCentre = c.finance_centres.find(x => x.finance_centre_identifier == selected_affiliate.sales_centre_id.toString())\r\n if (foundFinanceCentre != null) {\r\n this.selected_company = c.company_identifier;\r\n this.selected_finance_centre = selected_affiliate.sales_centre_id;\r\n c.finance_centres.forEach(fc => {\r\n this.finance_centres.push({ id: +fc.finance_centre_identifier, name: fc.name });\r\n });\r\n }\r\n }\r\n });\r\n\r\n selected_affiliate.selected_cache_servers = [];\r\n this.Affiliate_Service.get_Affiliate_Cache(selected_affiliate.app_id).subscribe((res: affiliate_cache[]) => {\r\n res.forEach(obj => {\r\n this.cache_server.forEach(x => {\r\n if (x.app_id == obj.cache_server_id) {\r\n selected_affiliate.selected_cache_servers.push(x);\r\n }\r\n });\r\n });\r\n this.setAffiliateForm(selected_affiliate);\r\n });\r\n\r\n //Channel Mangement List Get and Select on UI\r\n var res_list = await this.Affiliate_Service.get_Affiliate_Channel_Management_List(selected_affiliate.app_id).toPromise();\r\n res_list.forEach(obj => {\r\n this.selected_list.push({ id: obj.list_id, name: obj.list.name });\r\n });\r\n\r\n // Update Flag\r\n this.updateButton = true;\r\n this.showSearchBlock = false;\r\n }\r\n\r\n onAdd_Update_Affiliate_Submit() {\r\n // Check Form Is Valid\r\n if (this.affilateForm.valid) {\r\n // Update Affiliate\r\n if (this.updateButton) {\r\n this.Affiliate_Service.updateAffiliate(this.affilateForm.getRawValue()).subscribe(\r\n (response) => {\r\n // Add Affiliate Cache Data\r\n var affiliate_cache: affiliate_cache[] = [];\r\n this.affilateForm.controls[\"selectedCacheServer\"].value.forEach(obj => {\r\n affiliate_cache.push(Object.assign({ app_id: this.affilateForm.controls[\"app_id\"].value, cache_server_id: obj.app_id }));\r\n })\r\n // Call to Save Data\r\n this.Affiliate_Service.addUpdate_Affiliate_Cache(affiliate_cache, this.affilateForm.controls[\"app_id\"].value).subscribe();\r\n\r\n // Add Affiliate Channel Management List Data\r\n var affiliate_channel_management_list: affiliate_channel_management_list[] = [];\r\n this.selected_list.forEach(obj => {\r\n affiliate_channel_management_list.push(Object.assign({ affiliate_id: this.affilateForm.controls[\"app_id\"].value, list_id: obj.id }));\r\n });\r\n // Call to Save Data\r\n this.Affiliate_Service.addUpdate_Affiliate_Channel_Management_List(affiliate_channel_management_list, this.affilateForm.controls[\"app_id\"].value).subscribe();\r\n\r\n this.Helper_Service.openSnackbarNotification('You have successfully updated the affiliate', 'Close', 'success');\r\n },\r\n (error) => { this.Helper_Service.openSnackbarNotification('Something has gone wrong!', 'Close', 'error'); },\r\n () => { this.rest_AffiliateForm() }\r\n );\r\n }\r\n // Create New Affiliate\r\n else {\r\n this.Affiliate_Service.addAffiliate(this.affilateForm.getRawValue()).subscribe(\r\n (response) => {\r\n // Add Affiliate Cache Data\r\n var affiliate_cache: affiliate_cache[] = [];\r\n this.affilateForm.controls[\"selectedCacheServer\"].value.forEach(obj => {\r\n affiliate_cache.push(Object.assign({ app_id: this.affilateForm.controls[\"app_id\"].value, cache_server_id: obj.app_id }));\r\n })\r\n // Call to Save Data\r\n this.Affiliate_Service.addUpdate_Affiliate_Cache(affiliate_cache, this.affilateForm.controls[\"app_id\"].value).subscribe();\r\n\r\n // Add Affiliate Channel Management List Data\r\n var affiliate_channel_management_list: affiliate_channel_management_list[] = [];\r\n this.selected_list.forEach(obj => {\r\n affiliate_channel_management_list.push(Object.assign({ affiliate_id: this.affilateForm.controls[\"app_id\"].value, list_id: obj.id }));\r\n });\r\n // Call to Save Data\r\n this.Affiliate_Service.addUpdate_Affiliate_Channel_Management_List(affiliate_channel_management_list, this.affilateForm.controls[\"app_id\"].value).subscribe();\r\n\r\n this.Helper_Service.openSnackbarNotification('You have successfully added the affiliate', 'Close', 'success');\r\n },\r\n (error) => { this.Helper_Service.openSnackbarNotification('Something has gone wrong!', 'Close', 'error'); },\r\n () => { this.rest_AffiliateForm() }\r\n );\r\n }\r\n\r\n }\r\n else {\r\n const controls = this.affilateForm.controls;\r\n Object.keys(controls).forEach(controlName => controls[controlName].markAsTouched());\r\n }\r\n }\r\n\r\n setAffiliateForm(affiliateModel: affiliate) {\r\n this.affilateForm = new FormGroup({\r\n app_id: new FormControl({ value: affiliateModel.app_id, disabled: true }),\r\n api_key: new FormControl({ value: affiliateModel.api_key, disabled: true }),\r\n name: new FormControl(affiliateModel.name, [Validators.required]),\r\n agent_id: new FormControl(affiliateModel.agent_id),\r\n agent_contact_id: new FormControl(affiliateModel.agent_contact_id),\r\n sales_centre_id: new FormControl((this.selected_finance_centre), [Validators.required]),\r\n connector_id: new FormControl(affiliateModel.connector_id, [Validators.required]),\r\n payment_delay_minutes: new FormControl(affiliateModel.payment_delay_minutes),\r\n allow_price_override: new FormControl(affiliateModel.allow_price_override == null ? false : affiliateModel.allow_price_override),\r\n allow_confirmed_cancellation: new FormControl(affiliateModel.allow_confirmed_cancellation == null ? false : affiliateModel.allow_confirmed_cancellation),\r\n default_hold_time_id: new FormControl(affiliateModel.default_hold_time_id),\r\n enable_production: new FormControl(affiliateModel.enable_production == null ? false : affiliateModel.enable_production),\r\n max_hold_time_id: new FormControl(affiliateModel.max_hold_time_id),\r\n utm_source: new FormControl(affiliateModel.utm_source),\r\n white_label: new FormControl(affiliateModel.white_label == null ? false : affiliateModel.white_label),\r\n send_itinerary_agency: new FormControl(affiliateModel.send_itinerary_agency == null ? false : affiliateModel.send_itinerary_agency),\r\n send_itinerary_only: new FormControl(affiliateModel.send_itinerary_only == null ? false : affiliateModel.send_itinerary_only),\r\n company_id: new FormControl(Number(this.selected_company)),\r\n selectedCacheServer: new FormControl(affiliateModel.selected_cache_servers)\r\n });\r\n }\r\n\r\n rest_AffiliateForm() {\r\n this.showSearchBlock = true;\r\n this.updateButton = false;\r\n this.affiliate_header = \"\";\r\n this.search_text = \"\";\r\n this.affilate_api_key = \"\";\r\n this.affilate_app_id = \"\";\r\n this.affilateForm.reset();\r\n this.selected_company = null;\r\n this.selected_finance_centre = null;\r\n this.selected_list = [];\r\n // Reset Variables before populating\r\n this.companies = [];\r\n this.finance_centres = [];\r\n\r\n this.getBackend_Data_For_Controls();\r\n this.getBackend_Data_Affiliate(null, null);\r\n }\r\n\r\n onConnectorFilter(item: any) {\r\n // Get Contector Product Info from Backend\r\n this.Product_Selection_Service.getConnector_Product_List(null, item).subscribe((res: product) => {\r\n this.product_info = res[0].product_info;\r\n var productInfo: product_info = JSON.parse(this.product_info);\r\n\r\n // Reset Variables before populating\r\n this.companies = [];\r\n this.finance_centres = [];\r\n\r\n productInfo.companies.forEach(c => {\r\n // Populate data for Company Filter DropDown\r\n this.companies.push({ id: c.company_identifier, name: c.name });\r\n });\r\n this.selected_company = null;\r\n this.selected_finance_centre = null;\r\n });\r\n }\r\n\r\n onCompanyFilter(item: any) {\r\n var productInfo: product_info = JSON.parse(this.product_info);\r\n\r\n // Filter on company\r\n if (item != null) {\r\n this.selected_company = item;\r\n productInfo.companies.filter(company => company.company_identifier == this.selected_company);\r\n }\r\n\r\n // Reset Variables before populating\r\n this.finance_centres = [];\r\n\r\n //Rest selected filters\r\n this.selected_finance_centre = null;\r\n productInfo.companies.forEach(c => {\r\n if (c.company_identifier == this.selected_company) {\r\n c.finance_centres.forEach(fc => {\r\n //Populate data for finiance centre Filter DropDown\r\n this.finance_centres.push({ id: +fc.finance_centre_identifier, name: fc.name });\r\n });\r\n }\r\n });\r\n }\r\n\r\n getSelectedOptions(selected) {\r\n this.selected_list = selected;\r\n }\r\n}\r\n","export class affiliate_hold_time {\r\n public id: number;\r\n public name: string;\r\n public days: number;\r\n public hours: number;\r\n public minutes: number;\r\n public seconds: number;\r\n}","\r\n \r\n \r\n
\r\n timer Hold Time\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n You must enter a value\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Name {{element.name}} Days {{element.days}} Hours {{element.hours}} Minutes {{element.minutes}} Seconds {{element.seconds}} Actions \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n
","import { Component } from '@angular/core';\r\nimport { FormControl, Validators, FormGroup, FormGroupDirective } from '@angular/forms';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { Confirmation_Dialog_Compnent } from \"../.././../../../material_ui/components/UI_Dialogs/Confirmation_Dialog/Confirmation_Dialog\";\r\n\r\nimport { affiliate_hold_time } from '../../../objects/Affiliate/affiliate_hold_time';\r\nimport { pagination } from \"../../../../../system/objects/pagination\";\r\n\r\nimport { Affiliate_Service } from '../../../services/Affiliate/Affiliate';\r\n\r\n@Component({\r\n selector: 'affiliate_hold_time',\r\n templateUrl: './hold_time.html'\r\n})\r\nexport class Component_Affiliate_Hold_Time {\r\n\r\n hold_time_form: FormGroup;\r\n\r\n search_text: string = \"\";\r\n affiliate_hold_time_list: affiliate_hold_time[];\r\n pagination_hold_time: pagination = new pagination();\r\n displayedColumns: string[] = ['name', 'days', 'hours', 'minutes', 'seconds', 'action'];\r\n\r\n // Flags\r\n updateButton: boolean = false;\r\n\r\n constructor(private affiliate_service: Affiliate_Service, private snackBar: MatSnackBar, private dialog: MatDialog) { }\r\n\r\n ngOnInit() {\r\n this.getBackend_Data_Affiliate_Hold_Time(null, null, false);\r\n this.setHoldTimeForm(new affiliate_hold_time);\r\n }\r\n\r\n onClick_Affiliate_Hold_Time_Pagination(e: any) {\r\n this.getBackend_Data_Affiliate_Hold_Time(e.pageIndex + 1, e.pageSize);\r\n }\r\n getBackend_Data_Affiliate_Hold_Time(page?: number, pageSize?: number, all_result?: boolean) {\r\n this.affiliate_service.getAffiliate_Hold_Time(page, pageSize, all_result).subscribe((res) => {\r\n this.affiliate_hold_time_list = res.body[\"affiliate_hold_time\"];\r\n this.pagination_hold_time = res.body['pagination'];\r\n });\r\n }\r\n onAffiliate_Hold_Time_Search(value: string) {\r\n this.search_text = value;\r\n this.affiliate_service.getAffiliate_Hold_Time_Search(null, this.search_text).subscribe((res) => {\r\n this.affiliate_hold_time_list = res.body[\"affiliate_hold_time\"];\r\n this.pagination_hold_time = res.body['pagination'];\r\n });\r\n }\r\n setHoldTimeForm(holdTimeModel: affiliate_hold_time) {\r\n this.hold_time_form = new FormGroup({\r\n id: new FormControl(holdTimeModel.id == null ? 0 : holdTimeModel.id),\r\n name: new FormControl(holdTimeModel.name, [Validators.required]),\r\n days: new FormControl(holdTimeModel.days),\r\n hours: new FormControl(holdTimeModel.hours),\r\n minutes: new FormControl(holdTimeModel.minutes),\r\n seconds: new FormControl(holdTimeModel.seconds)\r\n });\r\n }\r\n onEdit_Affiliate_Hold_Time(item: affiliate_hold_time) {\r\n this.setHoldTimeForm(item);\r\n this.updateButton = true;\r\n }\r\n onAdd_Update_Affiliate_Hold_Time_Submit(formDirective: FormGroupDirective) {\r\n // Check Form Is Valid\r\n if (this.hold_time_form.valid) {\r\n this.affiliate_service.addUpdate_Affiliate_Hold_Time(this.hold_time_form.getRawValue()).subscribe(\r\n (response) => {\r\n if (this.updateButton) {\r\n this.openSnackbarNotification('You have successfully updated the price override', 'Close', 'success');\r\n }\r\n else {\r\n this.openSnackbarNotification('You have successfully added the price override', 'Close', 'success');\r\n }\r\n },\r\n (error) => { this.openSnackbarNotification('Something has gone wrong!', 'Close', 'error'); },\r\n () => { this.rest_Affiliate_Hold_Time_Form(formDirective) }\r\n );\r\n }\r\n else {\r\n const controls = this.hold_time_form.controls;\r\n Object.keys(controls).forEach(controlName => controls[controlName].markAsTouched());\r\n }\r\n }\r\n onDelete_Affiliate_Hold_Time(item: affiliate_hold_time) {\r\n const dialogRef = this.dialog.open(Confirmation_Dialog_Compnent, {\r\n data: { title: \"Delete !\", text: \"Are you sure you want to delete \" + item.name + \"?\" }\r\n });\r\n\r\n dialogRef.afterClosed().subscribe(result => {\r\n if (result == true) {\r\n // call delete service\r\n this.affiliate_service.delete_Affiliate_Hold_Time(item).subscribe(\r\n (response) => { this.openSnackbarNotification(item.name + ' has been deleted successfully', 'Close', 'success'); },\r\n (error) => { this.openSnackbarNotification('Something has gone wrong!', 'Close', 'error'); },\r\n () => { this.rest_Affiliate_Hold_Time_Form(null) }\r\n );\r\n }\r\n });\r\n }\r\n openSnackbarNotification(message: string, action: string, status: string) {\r\n if (status == \"success\") {\r\n message = \"✔️ - \" + message;\r\n }\r\n else if (status == \"error\") {\r\n message = \"❌ - \" + message;\r\n }\r\n this.snackBar.open(message, action, {\r\n duration: 4000,\r\n verticalPosition: 'top',\r\n horizontalPosition: 'center'\r\n });\r\n }\r\n rest_Affiliate_Hold_Time_Form(formDirective: FormGroupDirective) {\r\n // Rest Form\r\n if(formDirective != null){\r\n formDirective.resetForm();\r\n }\r\n this.hold_time_form.reset();\r\n this.updateButton = false;\r\n this.search_text = \"\";\r\n // Refresh Table\r\n this.getBackend_Data_Affiliate_Hold_Time(null, null, null);\r\n }\r\n}\r\n","
\r\n
\r\n
\r\n
\r\n {{ segment.key }}\r\n :\r\n {{ segment.description }}\r\n
\r\n
\r\n \r\n
\r\n
\r\n
","import { Component, OnChanges, Input } from '@angular/core';\r\n\r\nexport interface Segment {\r\n key: string;\r\n value: any;\r\n type: undefined | string;\r\n description: string;\r\n expanded: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'ngx-json-viewer',\r\n templateUrl: './Json_Viewer.html',\r\n styleUrls: ['./Json_Viewer.scss']\r\n})\r\nexport class Json_Viewer_Component implements OnChanges {\r\n\r\n @Input() json: any;\r\n @Input() expanded = true;\r\n /**\r\n * @deprecated It will be always true and deleted in version 3.0.0\r\n */\r\n @Input() cleanOnChange = true;\r\n\r\n segments: Segment[] = [];\r\n\r\n ngOnChanges() {\r\n if (this.cleanOnChange) {\r\n this.segments = [];\r\n }\r\n\r\n if (typeof this.json === 'object') {\r\n Object.keys(this.json).forEach(key => {\r\n this.segments.push(this.parseKeyValue(key, this.json[key]));\r\n });\r\n }\r\n }\r\n\r\n isExpandable(segment: Segment) {\r\n return segment.type === 'object' || segment.type === 'array';\r\n }\r\n\r\n toggle(segment: Segment) {\r\n if (this.isExpandable(segment)) {\r\n segment.expanded = !segment.expanded;\r\n }\r\n }\r\n\r\n private parseKeyValue(key: any, value: any): Segment {\r\n const segment: Segment = {\r\n key: key,\r\n value: value,\r\n type: undefined,\r\n description: '' + value,\r\n expanded: this.expanded\r\n };\r\n\r\n switch (typeof segment.value) {\r\n case 'number': {\r\n segment.type = 'number';\r\n break;\r\n }\r\n case 'boolean': {\r\n segment.type = 'boolean';\r\n break;\r\n }\r\n case 'function': {\r\n segment.type = 'function';\r\n break;\r\n }\r\n case 'string': {\r\n segment.type = 'string';\r\n segment.description = '\"' + segment.value + '\"';\r\n break;\r\n }\r\n case 'undefined': {\r\n segment.type = 'undefined';\r\n segment.description = 'undefined';\r\n break;\r\n }\r\n case 'object': {\r\n // yea, null is object\r\n if (segment.value === null) {\r\n segment.type = 'null';\r\n segment.description = 'null';\r\n } else if (Array.isArray(segment.value)) {\r\n segment.type = 'array';\r\n segment.description = 'Array[' + segment.value.length + '] ' + JSON.stringify(segment.value);\r\n } else if (segment.value instanceof Date) {\r\n segment.type = 'date';\r\n } else {\r\n segment.type = 'object';\r\n segment.description = 'Object ' + JSON.stringify(segment.value);\r\n }\r\n break;\r\n }\r\n }\r\n\r\n return segment;\r\n }\r\n}","import { Component, Inject} from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\r\nexport interface DialogData {\r\n title: string;\r\n jsonData: any;\r\n}\r\n\r\n@Component({\r\n selector: 'json_viewer_dialog',\r\n templateUrl: 'Json_Viewer_Dialog.html',\r\n styleUrls: ['./Json_Viewer_Dialog.scss']\r\n})\r\nexport class Json_Viewer_Dialog_Compnent {\r\n\r\n json: any;\r\n expanded: boolean = true;\r\n expandToolTip: string = \"Unexpand\";\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: DialogData) {\r\n\r\n this.json = JSON.parse(data.jsonData);\r\n }\r\n\r\n onExpendUnexpand() {\r\n this.expanded = !this.expanded;\r\n this.expandToolTip = this.expanded ? \"Unexpand\" : \"Expand\";\r\n }\r\n onNoClick(): void {\r\n this.dialogRef.close();\r\n }\r\n\r\n}","
\r\n
\r\n
{{data.title}}
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({ name: 'timeDifference' })\r\n\r\nexport class Time_Difference_Pipe implements PipeTransform {\r\n transform(firstDate: string, secondDate: string): string {\r\n var startDate = new Date(firstDate);\r\n var endDate = new Date(secondDate);\r\n var seconds = Math.round((endDate.getTime() - startDate.getTime())/1000);\r\n return seconds > 0 ? seconds.toString() : \"\";\r\n }\r\n}","\r\n \r\n \r\n
\r\n notes Audit Booking\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n\r\n
\r\n\r\n \r\n \r\n None\r\n {{item.name}}\r\n \r\n \r\n\r\n \r\n \r\n {{item}}\r\n \r\n \r\n\r\n \r\n \r\n {{item}}\r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Affiliate {{element.affiliate.name}} Upload Date {{element.upload_date | date: \"yyyy-MM-dd HH:mm:ss\"}} Response Time(sec) {{element.upload_date | timeDifference :\r\n element.response_date}}\r\n Method {{element.method}} Actions \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n\r\n \r\n \r\n \r\n\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
","import { Component, OnInit } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { FormControl } from '@angular/forms';\r\nimport { DatePipe } from '@angular/common';\r\nimport { Json_Viewer_Dialog_Compnent } from \"../.././../../material_ui/components/UI_Dialogs/Json_Viewer_Dialog/Json_Viewer_Dialog\";\r\n\r\nimport { audit_booking } from '../../objects/Audit/audit_booking';\r\nimport { affiliate } from '../../objects/Affiliate/affiliate';\r\nimport { pagination } from \"../../../../system/objects/pagination\";\r\n\r\nimport { Audit_Booking_Service } from '../../services/Audit/Audit_Booking';\r\n\r\n\r\n\r\n@Component({\r\n selector: 'audit_booking',\r\n templateUrl: './audit_booking.html'\r\n})\r\nexport class Component_Audit_Booking implements OnInit {\r\n\r\n audit_booking_list: audit_booking[];\r\n pagination_audit_booking: pagination = new pagination();\r\n affiliates: affiliate[] = [];\r\n displayedColumns: string[] = ['affiliate', 'upload_date', 'response_time', 'method', 'action'];\r\n time_period_list: string[] = [null, 'Last Hour', 'Last 24 Hours', 'Last 3 Days', 'Last Week', 'Last Month', 'Last Year'];\r\n http_method_list: string[] = [null, 'GET', 'POST', 'DELETE', 'PUT'];\r\n\r\n // Form & Controls Variables & Validation\r\n audit_booking: audit_booking;\r\n app_id_data: string;\r\n time_period_data: string;\r\n http_method_data: string;\r\n date_from_data: string;\r\n date_to_data: string;\r\n app_id_control = new FormControl();\r\n time_period_control = new FormControl();\r\n http_method_control = new FormControl();\r\n date_from_control = new FormControl();\r\n date_to_control = new FormControl();\r\n upload_data_json;\r\n response_data_json;\r\n process_data_json;\r\n response_process_data_json;\r\n\r\n // Flags\r\n showSearchBlock: boolean = true;\r\n\r\n\r\n constructor(private Audit_Booking_Service: Audit_Booking_Service, private dialog: MatDialog) { }\r\n\r\n ngOnInit() {\r\n // Set Default Time\r\n this.time_period_control.setValue(this.time_period_data = \"Last 24 Hours\");\r\n // Get Affiliate List\r\n this.Audit_Booking_Service.getAffiliate_List().subscribe(res => {\r\n this.affiliates = res[\"affiliate\"];\r\n })\r\n // Get Audit bookings\r\n this.getBackend_Data_Audit_Booking(null, null, this.app_id_data, this.http_method_data, this.getTimePeriod(this.time_period_data), this.date_to_data);\r\n }\r\n\r\n onClick_Audit_Booking_Pagination(e: any) {\r\n if (this.date_from_data == null) {\r\n this.date_from_data = this.getTimePeriod(this.time_period_data);\r\n }\r\n this.getBackend_Data_Audit_Booking(e.pageIndex + 1, e.pageSize, this.app_id_data, this.http_method_data, this.date_from_data, this.date_to_data);\r\n }\r\n\r\n getBackend_Data_Audit_Booking(page: number, pageSize: number, app_id: string, http_method: string, datefrom: string, dateTo: string) {\r\n this.Audit_Booking_Service.getAutid_Booking(page, pageSize, app_id, http_method, datefrom, dateTo).subscribe((res) => {\r\n this.audit_booking_list = res.body['audit_booking'];\r\n this.pagination_audit_booking = res.body['pagination'];\r\n });\r\n }\r\n\r\n getTimePeriod(period: string) {\r\n\r\n var datePipe = new DatePipe(\"en-gb\");\r\n var today = new Date();\r\n\r\n switch (period) {\r\n\r\n case \"Last Hour\": {\r\n return datePipe.transform(new Date(today.getTime() - (1000 * 60 * 60)), \"yyyy-MM-dd HHmm\");\r\n }\r\n case \"Last 24 Hours\": {\r\n return datePipe.transform(new Date().setDate(today.getDate() - 1), \"yyyy-MM-dd HHmm\");\r\n }\r\n case \"Last 3 Days\": {\r\n return datePipe.transform(new Date().setDate(today.getDate() - 3), \"yyyy-MM-dd HHmm\");\r\n }\r\n case \"Last Week\": {\r\n return datePipe.transform(new Date().setDate(today.getDate() - 7), \"yyyy-MM-dd HHmm\");\r\n }\r\n case \"Last Month\": {\r\n return datePipe.transform(new Date().setMonth(today.getMonth() - 1), \"yyyy-MM-dd HHmm\");\r\n }\r\n case \"Last Year\": {\r\n return datePipe.transform(new Date().setFullYear(today.getFullYear() - 1), \"yyyy-MM-dd HHmm\");\r\n }\r\n default: {\r\n return null;\r\n }\r\n }\r\n }\r\n\r\n onFilterResultRest() {\r\n // Assign form control values to varibales \r\n this.app_id_data = this.app_id_control.value;\r\n this.time_period_data = this.time_period_control.value;\r\n this.http_method_data = this.http_method_control.value;\r\n this.date_from_data = new DatePipe(\"en-gb\").transform(this.date_from_control.value, \"yyyy-MM-dd\")\r\n this.date_to_data = new DatePipe(\"en-gb\").transform(this.date_to_control.value, \"yyyy-MM-dd\")\r\n\r\n if (this.date_from_data == null) {\r\n this.date_from_data = this.getTimePeriod(this.time_period_data);\r\n }\r\n this.getBackend_Data_Audit_Booking(null, null, this.app_id_data, this.http_method_data, this.date_from_data, this.date_to_data);\r\n }\r\n\r\n onAudit_Booking_View(selected_affiliate: audit_booking) {\r\n\r\n // Bind Variables \r\n this.audit_booking = selected_affiliate;\r\n this.upload_data_json = JSON.parse(this.audit_booking.upload_data);\r\n this.response_data_json = JSON.parse(this.audit_booking.response_data);\r\n this.process_data_json = JSON.parse(this.audit_booking.processed_data);\r\n this.response_process_data_json = JSON.parse(this.audit_booking.response_processed_data);\r\n\r\n // Update Flag\r\n this.showSearchBlock = false;\r\n }\r\n onBackPage() {\r\n this.showSearchBlock = true;\r\n }\r\n\r\n onViewJson(dialogTitle: string, jsonValue: string) {\r\n if (jsonValue != null) {\r\n this.dialog.open(Json_Viewer_Dialog_Compnent, {\r\n height: '600px',\r\n width: '600px',\r\n data: {\r\n title: dialogTitle,\r\n jsonData: jsonValue\r\n }\r\n });\r\n\r\n }\r\n }\r\n\r\n\r\n\r\n\r\n\r\n}\r\n","import { price_override_cache_server } from \"./price_override_cache_server\";\r\nimport { price_override_product } from \"./price_override_product\";\r\nexport class price_override{\r\n\r\n public id:string;\r\n public name:string;\r\n public percentage:number;\r\n public cache_servers:price_override_cache_server[]=[];\r\n public products:price_override_product[]=[];\r\n}","\r\n \r\n \r\n
\r\n money Price Override\r\n
\r\n
\r\n \r\n
{{price_override_header}}
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Price Override Name {{element.name}} Actions \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n Price Override Detials \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n mode_edit\r\n You must enter a value\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n mode_edit\r\n You must enter a value\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n Cache Servers\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n Products\r\n \r\n \r\n \r\n \r\n \r\n Product Departures\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n Departure \r\n {{element.departure | date: \"yyyy-MM-dd\"}}\r\n \r\n \r\n \r\n \r\n Actions \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n Product Currencies\r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n {{currency.currency}}\r\n \r\n \r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n ISO Currency Code \r\n {{element.iso_currency_code}} \r\n \r\n \r\n \r\n Actions \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n {{product_currency?.iso_currency_code}} :  \r\n \r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n Amount \r\n {{element.amount}} \r\n \r\n \r\n \r\n Actions \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n
","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatHorizontalStepper } from '@angular/material/stepper';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { FormBuilder, Validators, FormGroup } from '@angular/forms';\r\nimport { Confirmation_Dialog_Compnent } from \"../.././../../../material_ui/components/UI_Dialogs/Confirmation_Dialog/Confirmation_Dialog\";\r\n\r\n\r\nimport { price_override } from '../../../objects/Channel_Management/Price_Override/price_override';\r\nimport { price_override_cache_server } from '../../../objects/Channel_Management/Price_Override/price_override_cache_server';\r\nimport { price_override_product } from '../../../objects/Channel_Management/Price_Override/price_override_product';\r\nimport { price_override_product_departure } from '../../../objects/Channel_Management/Price_Override/price_override_product_departure';\r\nimport { price_override_currency } from '../../../objects/Channel_Management/Price_Override/price_override_currency';\r\n\r\nimport { pagination } from \"../../../../../system/objects/pagination\";\r\n\r\nimport { Price_Override_Service } from '../../../services/Channel_Management/Price_Override/Price_Override';\r\nimport { Affiliate_Service } from '../../../services/Affiliate/Affiliate';\r\nimport { Web_Search_Sales_Group_Service } from '../../../services/Web_Search_Sales_Group/Web_Search_Sales_Group';\r\nimport { Helper_Service } from '../../../../../material_ui/services/Core/Helper_Service';\r\n\r\n@Component({\r\n selector: 'price_override',\r\n templateUrl: './price_override.html'\r\n})\r\nexport class Component_Price_Override implements OnInit {\r\n\r\n displayedColumns: string[] = ['name', 'edit'];\r\n detailFormGroup: FormGroup;\r\n price_override_header: string = \"\";\r\n search_text: string = \"\";\r\n price_override_list: price_override[];\r\n pagination_price_override: pagination = new pagination();\r\n\r\n // Cache Server Screen Variables\r\n availableCacheServerItems: any[] = [];\r\n selectedCacheServerItems: any[] = [];\r\n pagination_cache_servers: pagination = new pagination();\r\n price_override_cache_server: price_override_cache_server[] = [];\r\n // Products Screen Variables\r\n selectedProductItems: any[] = [];\r\n price_override_products: price_override_product[] = [];\r\n // Product Departure Screen Variables\r\n departureDate: Date;\r\n product: price_override_product;\r\n ds_departures = new MatTableDataSource();\r\n // Product Currencies Screen Variables\r\n currencies: any[] = [{ iso: \"AUD\", currency: \"Australian Dollars\" },\r\n { iso: \"CAD\", currency: \"Canadian Dollars\" },\r\n { iso: \"EUR\", currency: \"Euro\" },\r\n { iso: \"GBP\", currency: \"Pounds Sterling\" },\r\n { iso: \"NZD\", currency: \"NZ Dollars\" },\r\n { iso: \"THA\", currency: \"Thai Baht\" },\r\n { iso: \"USD\", currency: \"US Dollars\" },\r\n { iso: \"ZAR\", currency: \"South African Rand\" }];\r\n isoCurrencyCode: string;\r\n ds_currencies = new MatTableDataSource();\r\n // Product Currency Amount Screen Variable\r\n currencyAmount: number;\r\n product_currency: price_override_currency\r\n ds_amounts = new MatTableDataSource();\r\n\r\n //Http Post/Get Value\r\n price_override: price_override = new price_override;\r\n\r\n // Flags\r\n updateButton: boolean = false;\r\n showSearchBlock: boolean = true;\r\n matNextStep: boolean = true;\r\n matBackStep: boolean = false;\r\n cacheStepCompleted: boolean = true;\r\n productStepCompleted: boolean = false;\r\n @ViewChild(MatHorizontalStepper) stepper: MatHorizontalStepper;\r\n\r\n constructor(private Price_Override_Service: Price_Override_Service, private Affiliate_Service: Affiliate_Service,\r\n private helper_service: Helper_Service, private Web_Search_Sales_Group_Service: Web_Search_Sales_Group_Service, private FormBuilder: FormBuilder, private dialog: MatDialog) { }\r\n\r\n ngOnInit() {\r\n this.detailFormGroup = this.FormBuilder.group({\r\n id: [],\r\n name: ['', Validators.required],\r\n percentage: ['', Validators.required]\r\n\r\n });\r\n // call function to get data from backend\r\n this.getBackend_Data_Price_Override(null, null);\r\n this.getBackend_Data_Cache_Servers_Available(null, null);\r\n }\r\n\r\n //#region Price Override Main\r\n onClick_Price_Override_Pagination(e: any) {\r\n this.getBackend_Data_Price_Override(e.pageIndex + 1, e.pageSize);\r\n }\r\n getBackend_Data_Price_Override(page: number, pageSize: number) {\r\n this.Price_Override_Service.getPrice_Override_List(page, pageSize).subscribe((res) => {\r\n this.price_override_list = res.body[\"price_override\"];\r\n this.pagination_price_override = res.body[\"pagination\"];\r\n });\r\n }\r\n onPrice_Override_Search(value: string) {\r\n this.search_text = value;\r\n this.Price_Override_Service.getWPrice_Override_Search(null, this.search_text).subscribe((res) => {\r\n this.price_override_list = res.body[\"price_override\"];\r\n this.pagination_price_override = res.body[\"pagination\"];\r\n });\r\n }\r\n onAdd_Price_Override() {\r\n // Bind Variables \r\n this.price_override_header = \"Enter Details To Add a New Price Override:\"\r\n this.showSearchBlock = false;\r\n }\r\n onEdit_Price_Override(selected_price_override: price_override) {\r\n // Bind Variables \r\n this.price_override_header = \"Edit Details: \" + selected_price_override.name;\r\n\r\n // Details\r\n this.detailFormGroup.patchValue({\r\n id: selected_price_override.id,\r\n name: selected_price_override.name,\r\n percentage: selected_price_override.percentage\r\n });\r\n\r\n this.price_override = selected_price_override;\r\n\r\n // Update Flag\r\n this.updateButton = true;\r\n this.showSearchBlock = false;\r\n }\r\n onDelete_Price_Override(selected_price_override: price_override) {\r\n const dialogRef = this.dialog.open(Confirmation_Dialog_Compnent, {\r\n data: { title: \"Delete !\", text: \"Are you sure you want to delete \" + selected_price_override.name + \"?\" }\r\n });\r\n\r\n dialogRef.afterClosed().subscribe(result => {\r\n if (result == true) {\r\n // call delete service\r\n this.Price_Override_Service.deletePriceOverride(selected_price_override).subscribe(\r\n (response) => { this.helper_service.openSnackbarNotification(selected_price_override.name + ' has been deleted successfully', 'Close', 'success'); },\r\n (error) => { this.helper_service.openSnackbarNotification('Something has gone wrong!', 'Close', 'error'); },\r\n () => { this.rest_PriceOverrideForm() }\r\n );\r\n }\r\n });\r\n }\r\n //#endregion\r\n\r\n //#region Price Override Cache Server\r\n onClick_Cache_Servers_Pagination(e: any) {\r\n this.getBackend_Data_Cache_Servers_Available(e.pageIndex + 1, e.pageSize);\r\n }\r\n onClick_Cache_Servers_Search(value: string) {\r\n this.Affiliate_Service.getAffiliate(null, value).subscribe((res) => {\r\n this.pagination_cache_servers = res.body[\"pagination\"];\r\n this.availableCacheServerItems = [];\r\n (res.body[\"affiliate\"]).forEach(obj => {\r\n this.availableCacheServerItems.push({ id: obj.app_id, name: obj.name, selected: false });\r\n });\r\n });\r\n }\r\n getBackend_Data_Cache_Servers_Available(page: number, pageSize: number) {\r\n this.Affiliate_Service.getAffiliate_List(page, pageSize).subscribe((res) => {\r\n this.pagination_cache_servers = res.body[\"pagination\"];\r\n this.availableCacheServerItems = [];\r\n (res.body[\"affiliate\"]).forEach(obj => {\r\n this.availableCacheServerItems.push({ id: obj.app_id, name: obj.name, selected: false });\r\n });\r\n });\r\n }\r\n map_Data_Cache_Servers_Selected() {\r\n this.selectedCacheServerItems = [];\r\n this.price_override.cache_servers.forEach(obj => {\r\n this.selectedCacheServerItems.push({ id: obj.cache_server_id, name: obj.cache_server.name, selected: true })\r\n });\r\n }\r\n onAddCacheServer(item: any) {\r\n var cache_server = { name: item.name };\r\n this.price_override.cache_servers.push(Object.assign({ price_override_id: this.price_override.id == undefined ? null : this.price_override.id, cache_server_id: item.id, cache_server: cache_server }));\r\n }\r\n onRemoveCacheServer(item: any) {\r\n this.price_override.cache_servers = this.price_override.cache_servers.filter(x => x.cache_server_id != item.id);\r\n }\r\n //#endregion\r\n\r\n //#region Price Override Products\r\n\r\n map_Data_Products_Selected() {\r\n this.selectedProductItems = [];\r\n this.price_override.products.forEach(obj => {\r\n this.selectedProductItems.push({ id: obj.product.external_identifier, name: obj.product.company_finance_centre_product_group_product, selected: true, product_id: obj.product_id })\r\n });\r\n }\r\n onAddProduct(item: any) {\r\n var product = { name: item.company_finance_centre_product_group_product };\r\n this.price_override.products.push(Object.assign({ product_id: item.id, departures: [], currencies: [], product: product }));\r\n }\r\n onRemoveProduct(item: any) {\r\n this.price_override.products = this.price_override.products.filter(x => x.product_id != item.product_id);\r\n }\r\n //#endregion\r\n\r\n //#region Price Override Products Departures\r\n onProductSelectForDepartures(item: any) {\r\n this.product = this.price_override.products.find(x => x.product_id == item.product_id)\r\n // Init data sources for Departue and Curency Screen\r\n this.ds_departures = new MatTableDataSource(this.product.departures)\r\n this.ds_currencies = new MatTableDataSource(this.product.currencies)\r\n // Mark Step Completed\r\n if (this.stepper.selectedIndex == 2) {\r\n this.stepper.selected.completed = true;\r\n this.stepper.next();\r\n }\r\n\r\n }\r\n onAdd_Product_Departure() {\r\n if (this.product.departures.find(x => x.departure == this.departureDate.toLocaleString()) == null && this.departureDate != undefined) {\r\n this.product.departures.push({ id: null, price_override_product_id: null, departure: this.departureDate.toDateString(), price_override_product: null });\r\n this.ds_departures = new MatTableDataSource(this.product.departures);\r\n }\r\n }\r\n onDelete_Product_Departure(item: any) {\r\n this.product.departures = this.product.departures.filter(x => x.id != item.id);\r\n this.ds_departures = new MatTableDataSource(this.product.departures);\r\n }\r\n //#endregion\r\n\r\n //#region Price Override Currencies and Amounts\r\n onAdd_Product_Currency() {\r\n if (this.product.currencies.find(x => x.iso_currency_code == this.isoCurrencyCode) == null && this.isoCurrencyCode != undefined) {\r\n this.product.currencies.push(Object.assign({ id: null, price_override_product_id: null, iso_currency_code: this.isoCurrencyCode, amounts: [] }));\r\n this.ds_currencies = new MatTableDataSource(this.product.currencies);\r\n }\r\n // Hide Amount Screen\r\n this.product_currency = null;\r\n }\r\n\r\n onDelete_Product_Currency(item: any) {\r\n this.product.currencies = this.product.currencies.filter(x => x.iso_currency_code != item.iso_currency_code);\r\n this.ds_currencies = new MatTableDataSource(this.product.currencies);\r\n }\r\n\r\n onAdd_Product_Currency_Amount(item: any) {\r\n this.product_currency = item;\r\n this.ds_amounts = new MatTableDataSource(this.product_currency.amounts);\r\n }\r\n\r\n onAdd_Currency_Amount() {\r\n this.product_currency.amounts.push(Object.assign({ amount: this.currencyAmount }));\r\n this.ds_amounts = new MatTableDataSource(this.product_currency.amounts);\r\n }\r\n onDelete_Currency_Amount(item: any) {\r\n this.product_currency.amounts = this.product_currency.amounts.filter(x => x.amount != item.amount);\r\n this.ds_amounts = new MatTableDataSource(this.product_currency.amounts);\r\n }\r\n //#endregion\r\n\r\n //#region Screen Actions\r\n onAdd_Update_Price_Override_Submit() {\r\n this.price_override.id = this.detailFormGroup.controls[\"id\"].value;\r\n this.price_override.name = this.detailFormGroup.controls[\"name\"].value;\r\n this.price_override.percentage = this.detailFormGroup.controls[\"percentage\"].value;\r\n\r\n this.Price_Override_Service.addPriceOverride(this.price_override).subscribe(\r\n (response) => {\r\n if (this.updateButton) {\r\n this.helper_service.openSnackbarNotification('You have successfully updated the price override', 'Close', 'success');\r\n }\r\n else {\r\n this.helper_service.openSnackbarNotification('You have successfully added the price override', 'Close', 'success');\r\n }\r\n },\r\n (error) => { this.helper_service.openSnackbarNotification('Something has gone wrong!', 'Close', 'error'); },\r\n () => { this.rest_PriceOverrideForm() }\r\n );\r\n }\r\n rest_PriceOverrideForm() {\r\n this.showSearchBlock = true;\r\n this.updateButton = false;\r\n this.price_override_header = \"\";\r\n this.search_text = \"\";\r\n this.matNextStep = true;\r\n this.matBackStep = false;\r\n this.price_override = null\r\n //Reset Detail\r\n this.detailFormGroup.reset();\r\n // Reset Cache Server vars\r\n this.availableCacheServerItems = [];\r\n this.selectedCacheServerItems = [];\r\n // Reset Products Screen vars\r\n //this.availableProductItems = [];\r\n this.selectedProductItems = [];\r\n // Reset Departure var\r\n this.departureDate = null;\r\n this.product = null;\r\n this.ds_departures = new MatTableDataSource();\r\n // Reset Currencies var\r\n this.isoCurrencyCode = \"\";\r\n this.ds_currencies = new MatTableDataSource();\r\n // Reset Amounts var\r\n this.currencyAmount = null;\r\n this.product_currency = null;\r\n this.ds_amounts = new MatTableDataSource();\r\n // Refresh API Call data\r\n this.getBackend_Data_Price_Override(null, null);\r\n this.getBackend_Data_Cache_Servers_Available(null, null);\r\n //this.getBackend_Data_Products_Available(null, null, \"\");\r\n }\r\n stepClick(ev: MatHorizontalStepper) {\r\n // Detail Step\r\n if (ev.selectedIndex == 0) {\r\n this.matNextStep = true;\r\n this.matBackStep = false;\r\n }\r\n // Cache Server Step\r\n if (ev.selectedIndex == 1) {\r\n this.map_Data_Cache_Servers_Selected();\r\n this.matNextStep = true;\r\n this.matBackStep = true;\r\n }\r\n // Product Step\r\n if (ev.selectedIndex == 2) {\r\n this.map_Data_Products_Selected();\r\n this.matNextStep = false;\r\n this.matBackStep = true;\r\n // Mark Steps Un Completed if retrun back\r\n if (this.stepper.selectedIndex == 3 || this.stepper.selectedIndex == 4) {\r\n this.stepper._steps[\"_results\"][2].completed = false;\r\n }\r\n }\r\n // Departure Step\r\n if (ev.selectedIndex == 3) {\r\n this.matNextStep = true;\r\n this.matBackStep = true;\r\n }\r\n // Currencies Step\r\n if (ev.selectedIndex == 4) {\r\n this.matNextStep = true;\r\n this.matBackStep = true;\r\n }\r\n }\r\n onStepNext() {\r\n this.stepper.next();\r\n }\r\n onStepPrevious() {\r\n this.stepper.previous();\r\n }\r\n //#endregion\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n}\r\n","import { Component } from \"@angular/core\";\r\n\r\n@Component({\r\n selector: \"page-not-found\",\r\n templateUrl: \"Page_Not_Found.html\"\r\n})\r\n\r\nexport class Page_Not_Found_Component { }\r\n","
\r\n \r\n \r\n
\r\n OOPS!\r\n
\r\n
\r\n THE PAGE DOESN’T EXISTS \r\n
\r\n
\r\n Go To Homepage\r\n
\r\n
\r\n
\r\n
","//import { stringify } from \"querystring\";\r\nimport { user_group } from \"./User_Group\";\r\n\r\nexport class user {\r\n\r\n id: number;\r\n user_name: string;\r\n first_name: string;\r\n last_name: string;\r\n enabled: boolean;\r\n last_login: string;\r\n photo_url: string;\r\n default_finance_centre: number;\r\n user_groups: user_group[] = [];\r\n\r\n name : string;\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\nimport { user } from '../../objects/maintenance/User/User';\r\n\r\nimport { User_Service } from '../../services/maintenance/User/User';\r\nimport { OAuth_Service } from '../../../../../system/services/system/OAuth_Service';\r\nimport { Helper_Service } from '../../../../../material_ui/services/Core/Helper_Service';\r\n\r\nexport class profile {\r\n firstName: string;\r\n lastName: string;\r\n userName: string;\r\n jobTitle: string;\r\n photoUrl: string;\r\n}\r\n\r\n@Component({\r\n templateUrl: './User_Profile.html',\r\n styleUrls: ['./User_Profile.scss']\r\n})\r\nexport class Component_User_Profile {\r\n\r\n user_info: user = new user;\r\n profile: profile = new profile;\r\n\r\n constructor(private User_Service: User_Service, private OAuth_Service: OAuth_Service, private Helper_Service: Helper_Service) { }\r\n\r\n ngOnInit() {\r\n this.getUserData();\r\n }\r\n \r\n getUserData() {\r\n this.User_Service.getUserByID(null, parseInt(this.OAuth_Service.identityClaims.user_id)).subscribe(res => {\r\n this.user_info = res.body;\r\n\r\n this.profile.firstName = this.user_info.first_name;\r\n this.profile.lastName = this.user_info.last_name;\r\n this.profile.userName = this.user_info.user_name;\r\n if (this.user_info.photo_url == null || this.user_info.photo_url == \"\") {\r\n this.profile.photoUrl = \"../assets/images/noavatar.png\";\r\n }\r\n else {\r\n this.profile.photoUrl = this.user_info.photo_url;\r\n }\r\n });\r\n }\r\n updateProfile() {\r\n this.User_Service.updateUser(this.user_info.id, this.user_info).subscribe(\r\n (response) => { this.Helper_Service.openSnackbarNotification('You have successfully updated the profile', 'Close', 'success'); },\r\n (error) => { this.Helper_Service.openSnackbarNotification('Something has gone wrong!', 'Close', 'error'); },\r\n () => { this.getUserData(); }\r\n );\r\n }\r\n}\r\n\r\n","\r\n \r\n \r\n
\r\n perm_identity User Profile\r\n
\r\n
\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n

{{profile.firstName}} {{profile.lastName}}

\r\n
{{profile.userName}}
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n

Edit User Profile

\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n\r\n\r\n \r\n \r\n
\r\n\r\n
\r\n
\r\n\r\n
","\r\n \r\n \r\n
\r\n shopping_cart Product\r\n
\r\n
\r\n \r\n
{{product_header}}
\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n {{connector.name}}\r\n \r\n \r\n\r\n \r\n \r\n None\r\n {{company.name}}\r\n \r\n \r\n\r\n \r\n \r\n None\r\n {{finance_centre.name}}\r\n \r\n \r\n\r\n \r\n \r\n None\r\n {{group.name}}\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Product Name {{element.name}} Actions \r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { Router, ActivatedRoute } from '@angular/router';\r\n\r\nimport { pagination } from '../../../../../../system/objects/pagination';\r\nimport { connector } from '../../../../objects/Type/connector';\r\nimport { product } from '../../../../../booking_engine/objects/v1_2/Web_Engine/Product/Product';\r\nimport { product_info } from '../../../../objects/External/product_info';\r\nimport { cache_server } from '../../../../objects/Type/cache_server';\r\nimport { password_hash_response } from \"../../../../../../system/objects/password_hash_response\";\r\n\r\nimport { Pagination_Service } from '../../../../../../system/services/Pagination_Service';\r\nimport { Product_Selection_Service } from '../../../../services/Comman/Product_Selection/Product_Selection';\r\nimport { Cache_Server_Service } from '../../../../services/Type_Cache_Server/Cache_Server';\r\nimport { Helper_Service } from '../../../../../../material_ui/services/Core/Helper_Service';\r\n\r\nimport { product_selected } from '../../../../objects/External/product_selected';\r\nimport { supplier_product } from '../../../../objects/Product/supplier_product';\r\n\r\n\r\n@Component({\r\n selector: 'product_list',\r\n templateUrl: './product_list.html'\r\n})\r\n\r\nexport class Component_Product_List implements OnInit {\r\n\r\n product_info: string = \"\";\r\n selected_connector = null;\r\n selected_connector_name: string = \"\";\r\n selected_company = null;\r\n selected_finance_centre = null;\r\n selected_product_group = null;\r\n\r\n productSearch: string = \"\";\r\n pageNumber: number = 0;\r\n pageSize: number = 0;\r\n conector_type_list: connector[] = [];\r\n\r\n companies: any[] = [];\r\n finance_centres: any[] = [];\r\n product_groups: any[] = [];\r\n productItems: any[] = [];\r\n\r\n displayedColumns: string[] = ['name', 'actions'];\r\n pagination_product: pagination = new pagination();\r\n pagedProductItems: any[] = [];\r\n\r\n cache_server_list: cache_server[] = [];\r\n\r\n product_header: string = \"\";\r\n\r\n constructor(private Product_Selection_Service: Product_Selection_Service, private Pagination_Service: Pagination_Service, private route: ActivatedRoute, private router: Router, private Cache_Server_Service: Cache_Server_Service, private Helper_Service: Helper_Service) {\r\n }\r\n\r\n ngOnInit() {\r\n // Get the list of connector type from backend\r\n this.Product_Selection_Service.getConnector_Type_List(null).subscribe((res: connector[]) => {\r\n this.conector_type_list = res;\r\n var productData = this.Product_Selection_Service.getProductData();\r\n if (productData != null) {\r\n this.setSearchControls(productData);\r\n }\r\n });\r\n }\r\n\r\n onProduct_Search(value: string) {\r\n this.productSearch = value;\r\n this.pageNumber = 0;\r\n this.pageSize = 0;\r\n this.getBackend_Data_Products_Available(this.pageNumber, this.pageSize, this.productSearch);\r\n\r\n }\r\n\r\n setSearchControls(productData: any) {\r\n this.Product_Selection_Service.setProductData(null);\r\n\r\n this.Product_Selection_Service.getConnector_Product_List(null, productData.connector_id).subscribe((res: product) => {\r\n this.product_info = res[0].product_info;\r\n var producInfo = JSON.parse(this.product_info);\r\n\r\n // Filter on connector\r\n this.selected_connector = productData.connector_id;\r\n this.selected_connector_name = productData.connector;\r\n\r\n // Filter on company\r\n this.selected_company = productData.company_id;\r\n producInfo.companies = producInfo.companies.filter(company => company.company_identifier == this.selected_company);\r\n\r\n // Filter on finance centre\r\n this.selected_finance_centre = productData.company_finance_centre_id;\r\n producInfo.companies.forEach(c => {\r\n c.finance_centres = c.finance_centres.filter(fc => fc.finance_centre_identifier == this.selected_finance_centre);\r\n });\r\n // Filter on product group\r\n this.selected_product_group = productData.company_finance_centre_product_group_id;\r\n producInfo.companies.forEach(c => {\r\n c.finance_centres.forEach(fc => {\r\n fc.product_groups = fc.product_groups.filter(pg => pg.product_group_identifier == this.selected_product_group);\r\n });\r\n });\r\n\r\n this.fill_Connector_Products(producInfo);\r\n });\r\n\r\n\r\n }\r\n\r\n onConnectorFilter() {\r\n // Get Contector Product Info from Backend\r\n this.selected_connector_name = this.conector_type_list.find(conn => conn.id == this.selected_connector).name;\r\n this.Product_Selection_Service.getConnector_Product_List(null, this.selected_connector).subscribe((res: product) => {\r\n this.product_info = res[0].product_info;\r\n this.fill_Connector_Products(JSON.parse(this.product_info));\r\n this.selected_company = null;\r\n this.selected_finance_centre = null;\r\n this.selected_product_group = null;\r\n });\r\n }\r\n\r\n onCompanyFilter() {\r\n\r\n var producInfo = JSON.parse(this.product_info);\r\n\r\n // Filter on company\r\n if (this.selected_company != null) {\r\n producInfo.companies = producInfo.companies.filter(company => company.company_identifier == this.selected_company);\r\n }\r\n\r\n //Rest selected filters\r\n this.selected_finance_centre = null;\r\n this.selected_product_group = null;\r\n this.fill_Connector_Products(producInfo);\r\n }\r\n\r\n onFinanceCentreFilter() {\r\n\r\n var producInfo = JSON.parse(this.product_info);\r\n // Filter on company\r\n if (this.selected_company != null) {\r\n producInfo.companies = producInfo.companies.filter(company => company.company_identifier == this.selected_company);\r\n }\r\n // Filter on finance centre\r\n if (this.selected_finance_centre != null) {\r\n producInfo.companies.forEach(c => {\r\n c.finance_centres = c.finance_centres.filter(fc => fc.finance_centre_identifier == this.selected_finance_centre);\r\n })\r\n }\r\n //Rest selected filters\r\n this.selected_product_group = null\r\n\r\n this.fill_Connector_Products(producInfo);\r\n }\r\n\r\n onProductGroupFilter() {\r\n\r\n var producInfo = JSON.parse(this.product_info);\r\n\r\n // Filter on company\r\n if (this.selected_company != null) {\r\n producInfo.companies = producInfo.companies.filter(company => company.company_identifier == this.selected_company);\r\n }\r\n // Filter on finance centre\r\n if (this.selected_finance_centre != null) {\r\n producInfo.companies.forEach(c => {\r\n c.finance_centres = c.finance_centres.filter(fc => fc.finance_centre_identifier == this.selected_finance_centre);\r\n })\r\n }\r\n // Filter on product group\r\n if (this.selected_product_group != null) {\r\n producInfo.companies.forEach(c => {\r\n c.finance_centres.forEach(fc => {\r\n fc.product_groups = fc.product_groups.filter(pg => pg.product_group_identifier == this.selected_product_group);\r\n });\r\n })\r\n }\r\n\r\n this.fill_Connector_Products(producInfo);\r\n }\r\n\r\n fill_Connector_Products(connector_product: product_info) {\r\n // Reset Variables before populating\r\n this.companies = [];\r\n this.finance_centres = [];\r\n this.product_groups = [];\r\n this.productItems = [];\r\n\r\n var producInfo: product_info = JSON.parse(this.product_info);\r\n producInfo.companies.forEach(c => {\r\n if (c.company_identifier == this.selected_company) {\r\n c.finance_centres.forEach(fc => {\r\n if (fc.finance_centre_identifier == this.selected_finance_centre) {\r\n fc.product_groups.forEach(pg => {\r\n //Populate data for Product Group Filter DropDown\r\n if (!(pg.name.toLowerCase().startsWith('x'))) {\r\n this.product_groups.push({ id: pg.product_group_identifier, name: pg.name });\r\n }\r\n });\r\n }\r\n //Populate data for finiance centre Filter DropDown\r\n this.finance_centres.push({ id: fc.finance_centre_identifier, name: fc.name });\r\n });\r\n }\r\n // Populate data for Company Filter DropDown\r\n this.companies.push({ id: c.company_identifier, name: c.name });\r\n });\r\n\r\n connector_product.companies.forEach(company => {\r\n company.finance_centres.forEach(fc => {\r\n fc.product_groups.forEach(pg => {\r\n pg.products.forEach(prod => {\r\n if (!(prod.name.toLowerCase().startsWith('x'))) {\r\n // Get Data for avaliable list\r\n this.productItems.push({\r\n id: prod.product_identifier,\r\n name: prod.name,\r\n selected: false,\r\n dataType: {\r\n id: null,\r\n connector_id: this.selected_connector,\r\n connector: this.selected_connector_name,\r\n external_identifier: prod.product_identifier,\r\n company_id: company.company_identifier,\r\n company: company.name,\r\n company_finance_centre_id: fc.finance_centre_identifier,\r\n company_finance_centre: fc.name,\r\n company_finance_centre_product_group_id: pg.product_group_identifier,\r\n company_finance_centre_product_group: pg.name,\r\n company_finance_centre_product_group_product: prod.name,\r\n disabled: false,\r\n disabled_date: null,\r\n external_company_identifier: company.company_identifier\r\n }\r\n });\r\n }\r\n });\r\n });\r\n });\r\n });\r\n\r\n this.productItems.sort((a, b) => a.name.toLowerCase() > b.name.toLowerCase() ? 1 : a.name.toLowerCase() === b.name.toLowerCase() ? 0 : -1);\r\n this.product_groups.sort((a, b) => a.name.toLowerCase() > b.name.toLowerCase() ? 1 : a.name.toLowerCase() === b.name.toLowerCase() ? 0 : -1);\r\n\r\n this.getBackend_Data_Products_Available(this.pageNumber, this.pageSize, this.productSearch);\r\n }\r\n\r\n getBackend_Data_Products_Available(page: number, pageSize: number, search?: string) {\r\n\r\n var output = this.Pagination_Service.Array_Paginator(this.productItems.filter(x => x.name.toLocaleLowerCase().includes(search.toLocaleLowerCase())), page.toString(), pageSize);\r\n this.pagination_product = output.pagination;\r\n this.pagedProductItems = [];\r\n this.pagedProductItems = output.data;\r\n }\r\n\r\n onClick_Product_Pagination(e: any) {\r\n this.pageNumber = e.pageIndex + 1;\r\n this.pageSize = e.pageSize;\r\n this.getBackend_Data_Products_Available(this.pageNumber, this.pageSize, this.productSearch);\r\n }\r\n\r\n onEdit_Product(item: any) {\r\n var savedConnector: string = item.dataType.connector;\r\n item.dataType.connector = null;\r\n this.Product_Selection_Service.setSupplierProductData(null);\r\n this.Product_Selection_Service.addProduct_Selected(item.dataType).subscribe(res => {\r\n var productSelected = res.body;\r\n item.dataType.connector = savedConnector;\r\n this.Product_Selection_Service.getSupplierProduct(productSelected.id).subscribe(res => {\r\n var supplierProduct = res;\r\n if (supplierProduct != null) {\r\n this.Product_Selection_Service.setSupplierProductData(supplierProduct);\r\n }\r\n this.Product_Selection_Service.setProductData(item.dataType);\r\n this.router.navigate(['/product_details']);\r\n });\r\n });\r\n }\r\n\r\n onRefreshCapacity(item: any) {\r\n this.Cache_Server_Service.getCache_Server_List(1, 99).subscribe((res) => {\r\n this.cache_server_list = res.body['cache_server'];\r\n item.dataType.connector = null;\r\n this.Product_Selection_Service.addProduct_Selected(item.dataType).subscribe(res => {\r\n var productSelected = res.body;\r\n this.cache_server_list.forEach(cache_server => {\r\n this.Cache_Server_Service.getPasswordHash().subscribe(res => {\r\n var passwordHashResponse = res.body;\r\n this.Cache_Server_Service.singleCapacitySync(cache_server.app_id, productSelected.id, passwordHashResponse.password_hash).subscribe(\r\n (response) => {\r\n this.Helper_Service.openSnackbarNotification('Product capacity refresh for ' + productSelected.company_finance_centre_product_group_product + ' queued', 'Close', 'success');\r\n },\r\n (error) => { this.Helper_Service.openSnackbarNotification('Something has gone wrong!', 'Close', 'error'); }\r\n );\r\n });\r\n this.Cache_Server_Service.getPasswordHash().subscribe(res => {\r\n var passwordHashResponse = res.body;\r\n this.Cache_Server_Service.singleCapacitySyncV13(cache_server.app_id, productSelected.id, passwordHashResponse.password_hash).subscribe(\r\n (response) => {\r\n this.Helper_Service.openSnackbarNotification('Product capacity refresh for ' + productSelected.company_finance_centre_product_group_product + ' queued', 'Close', 'success');\r\n },\r\n (error) => { this.Helper_Service.openSnackbarNotification('Something has gone wrong!', 'Close', 'error'); }\r\n );\r\n });\r\n });\r\n });\r\n });\r\n }\r\n\r\n onRefreshDescription(item: any) {\r\n this.Cache_Server_Service.getCache_Server_List(1, 99).subscribe((res) => {\r\n this.cache_server_list = res.body['cache_server'];\r\n item.dataType.connector = null;\r\n this.Product_Selection_Service.addProduct_Selected(item.dataType).subscribe(res => {\r\n var productSelected = res.body;\r\n this.cache_server_list.forEach(cache_server => {\r\n this.Cache_Server_Service.getPasswordHash().subscribe(res => {\r\n var passwordHashResponse = res.body;\r\n this.Cache_Server_Service.singleProductSync(cache_server.app_id, productSelected.id, passwordHashResponse.password_hash).subscribe(\r\n (response) => {\r\n this.Helper_Service.openSnackbarNotification('Product description refresh for ' + productSelected.company_finance_centre_product_group_product + ' queued', 'Close', 'success');\r\n },\r\n (error) => { this.Helper_Service.openSnackbarNotification('Something has gone wrong!', 'Close', 'error'); }\r\n );\r\n });\r\n this.Cache_Server_Service.getPasswordHash().subscribe(res => {\r\n var passwordHashResponse = res.body;\r\n this.Cache_Server_Service.singleProductSyncV13(cache_server.app_id, productSelected.id, passwordHashResponse.password_hash).subscribe(\r\n (response) => {\r\n this.Helper_Service.openSnackbarNotification('Product description refresh for ' + productSelected.company_finance_centre_product_group_product + ' queued', 'Close', 'success');\r\n },\r\n (error) => { this.Helper_Service.openSnackbarNotification('Something has gone wrong!', 'Close', 'error'); }\r\n );\r\n });\r\n });\r\n });\r\n });\r\n }\r\n}\r\n","export class product_selection_filter {\r\n public excluded_connector_id: number;\r\n public selected_connector_id: number;\r\n public selected_company: string;\r\n public selected_finance_centre: string;\r\n public selected_product_group: string;\r\n}","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { FormControl, Validators, FormGroup } from '@angular/forms';\r\n\r\nimport { pagination } from '../../../../../../system/objects/pagination';\r\nimport { connector } from '../../../../objects/Type/connector';\r\nimport { product } from '../../../../../booking_engine/objects/v1_2/Web_Engine/Product/Product';\r\nimport { product_info } from '../../../../objects/External/product_info';\r\nimport { product_selected } from '../../../../objects/External/product_selected';\r\nimport { supplier_product } from '../../../../objects/Product/supplier_product';\r\nimport { web_search_sales_group_product } from '../../../../objects/Web_Search/web_search_sales_group_product';\r\nimport { product_selection_filter } from '../../../../objects/Common/product_selection_filter';\r\n\r\nimport { Pagination_Service } from '../../../../../../system/services/Pagination_Service';\r\nimport { Product_Selection_Service } from '../../../../services/Comman/Product_Selection/Product_Selection';\r\nimport { Helper_Service } from '../../../../../../material_ui/services/Core/Helper_Service';\r\n\r\n\r\n\r\n@Component({\r\n selector: 'product_details',\r\n templateUrl: './product_details.html'\r\n})\r\n\r\nexport class Component_Product_Details implements OnInit {\r\n private sub: any;\r\n\r\n product_header: string = \"\";\r\n productSelected: product_selected;\r\n supplierProduct: supplier_product;\r\n\r\n // Form & Controls Variables\r\n company = new FormControl({ value: '', disabled: true });\r\n company_finance_centre = new FormControl({ value: '', disabled: true });\r\n company_finance_centre_product_group = new FormControl({ value: '', disabled: true });\r\n external_identifier = new FormControl({ value: '', disabled: true });\r\n external_company_identifier = new FormControl({ value: '', disabled: true });\r\n connector_name = new FormControl({ value: '', disabled: true });\r\n\r\n // Linked Product Selection\r\n selectedProductItems: any[] = [];\r\n linkedProducts: any[] = [];\r\n productSelectionFilter: product_selection_filter = new product_selection_filter();\r\n\r\n constructor(private Product_Selection_Service: Product_Selection_Service, private router: Router, private helper_service: Helper_Service) {\r\n }\r\n\r\n ngOnInit() {\r\n var data = this.Product_Selection_Service.getProductData();\r\n this.supplierProduct = this.Product_Selection_Service.getSupplierProductData();\r\n this.setFormFields(data);\r\n this.selectedProductItems = [];\r\n if (this.supplierProduct != null && this.supplierProduct.product_supplier_id != null) {\r\n this.selectedProductItems.push({\r\n id: this.supplierProduct.supplier_product_code,\r\n product_id: this.supplierProduct.product_supplier_id,\r\n name: this.supplierProduct.supplier_product_name,\r\n selected: true\r\n });\r\n this.linkedProducts.push({ product_id: this.supplierProduct.product_supplier_id });\r\n this.productSelectionFilter.selected_connector_id = this.supplierProduct.supplier_product_connector_id;\r\n this.productSelectionFilter.selected_company = this.supplierProduct.supplier_product_company;\r\n this.productSelectionFilter.selected_finance_centre = this.supplierProduct.supplier_product_finance_centre;\r\n this.productSelectionFilter.selected_product_group = this.supplierProduct.supplier_product_product_group;\r\n }\r\n }\r\n\r\n setFormFields(data: any) {\r\n this.product_header = \"Edit Linked Product: \" + data.company_finance_centre_product_group_product;\r\n this.productSelectionFilter.excluded_connector_id = data.connector_id;\r\n this.connector_name.setValue(data.connector);\r\n this.company.setValue(data.company);\r\n this.company_finance_centre.setValue(data.company_finance_centre);\r\n this.company_finance_centre_product_group.setValue(data.company_finance_centre_product_group);\r\n this.external_identifier.setValue(data.external_identifier);\r\n this.external_company_identifier.setValue(data.external_company_identifier);\r\n }\r\n\r\n onCancel() {\r\n this.router.navigate(['/product_list']);\r\n }\r\n\r\n onAdd_Update() {\r\n if (this.linkedProducts.length > 1) {\r\n this.helper_service.openSnackbarNotification('Only one supplier product can be selected!', 'Close', 'error');\r\n return;\r\n } else if (this.linkedProducts.length == 1) {\r\n this.supplierProduct.product_supplier_id = this.linkedProducts[0].product_id;\r\n } else {\r\n this.supplierProduct.product_supplier_id = null;\r\n }\r\n this.Product_Selection_Service.addSupplierProduct(this.supplierProduct).subscribe(\r\n (response) => {\r\n this.helper_service.openSnackbarNotification('You have successfully updated the linked product', 'Close', 'success');\r\n this.router.navigate(['/product_list']);\r\n },\r\n (error) => { this.helper_service.openSnackbarNotification('Something has gone wrong!', 'Close', 'error'); }\r\n );\r\n }\r\n\r\n onAddProduct(item: any) {\r\n this.linkedProducts.push({ product_id: item.id });\r\n if (this.linkedProducts.length > 1) {\r\n this.helper_service.openSnackbarNotification('Only one supplier product can be selected!', 'Close', 'error');\r\n }\r\n\r\n }\r\n\r\n onRemoveProduct(item: any) {\r\n this.linkedProducts = this.linkedProducts.filter(x => x.product_id != item.product_id);\r\n }\r\n\r\n}\r\n","\r\n \r\n \r\n
\r\n shopping_cart Product Details\r\n
\r\n
\r\n {{product_header}}\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n
Selling Product
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
Supplier Product
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
","
\r\n
\r\n
Select Product
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {{connector.name}}\r\n \r\n \r\n \r\n \r\n \r\n None\r\n {{company}}\r\n \r\n \r\n \r\n \r\n \r\n None\r\n {{finance_centre}}\r\n \r\n \r\n \r\n \r\n \r\n None\r\n {{group}}\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Product Name {{element.company_finance_centre_product_group_product}} Actions \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
","import { Component, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\r\nimport * as _ from 'lodash';\r\n\r\nimport { pagination } from '../../../../../../system/objects/pagination';\r\n\r\nimport { Product_Selection_Service } from '../../../../services/Comman/Product_Selection/Product_Selection';\r\nimport { Pagination_Service } from '../../../../../../system/services/Pagination_Service';\r\n\r\nexport interface DialogData {\r\n title: string;\r\n text: string;\r\n}\r\n\r\n@Component({\r\n selector: 'select_product',\r\n templateUrl: 'select_product.html',\r\n})\r\nexport class Select_Product_Dialog_Compnent {\r\n\r\n\r\n selected_product: any[] = [];\r\n\r\n filter: any[];\r\n conector_type_list: any[] = [];\r\n companies: any[] = [];\r\n finance_centres: any[] = [];\r\n product_groups: any[] = [];\r\n\r\n productSearch: string = \"\";\r\n displayedColumns: string[] = ['name', 'edit'];\r\n pagination_product: pagination = new pagination();\r\n pagedProductItems: any[] = [];\r\n\r\n page: number;\r\n pageSize: number;\r\n selected_connector: number = 0;\r\n selected_company: string;\r\n selected_finance_centre: string;\r\n selected_product_group: string;\r\n\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: DialogData, private Product_Selection_Service: Product_Selection_Service) { }\r\n\r\n\r\n ngOnInit() {\r\n // Get the list of connector type from backend\r\n this.Product_Selection_Service.getConnector_Type_List(null).subscribe((res: any[]) => {\r\n this.conector_type_list = res;\r\n });\r\n this.getProduct_Selected_Data();\r\n }\r\n\r\n onConnectorFilter(item: any) {\r\n // Filter Connector Data for Dropdown\r\n var connectorData = this.filter.filter(o => o.Connector_ID == this.selected_connector);\r\n this.companies = _.uniqBy(connectorData, 'Company').map(m => { return m.Company });\r\n // rest selection\r\n this.page = null;\r\n this.pageSize = null;\r\n this.selected_company = null;\r\n this.selected_finance_centre = null;\r\n this.selected_product_group = null;\r\n this.productSearch = \"\"\r\n // refresh data\r\n this.getProduct_Selected_Data();\r\n }\r\n onCompanyFilter() {\r\n // Filter Connector Data for Dropdown\r\n var companyData = (this.filter.filter(o => o.Connector_ID == this.selected_connector)).filter(f => f.Company == this.selected_company);\r\n this.finance_centres = _.uniqBy(companyData, 'Company_Finance_Centre').map(m => { return m.Company_Finance_Centre });\r\n //rest selection\r\n this.page = null;\r\n this.pageSize = null;\r\n this.selected_finance_centre = null;\r\n this.selected_product_group = null;\r\n this.productSearch = \"\"\r\n // refresh data\r\n this.getProduct_Selected_Data();\r\n\r\n }\r\n onFinanceCentreFilter() {\r\n // Filter Connector Data for Dropdown\r\n var financeCentreData = ((this.filter.filter(o => o.Connector_ID == this.selected_connector)).filter(f => f.Company == this.selected_company)).filter(p => p.Company_Finance_Centre == this.selected_finance_centre);\r\n this.product_groups = _.uniqBy(financeCentreData, 'Company_Finance_Centre_Product_Group').map(m => { return m.Company_Finance_Centre_Product_Group });\r\n //rest selection\r\n this.page = null;\r\n this.pageSize = null;\r\n this.selected_product_group = null;\r\n this.productSearch = \"\"\r\n // refresh data\r\n this.getProduct_Selected_Data();\r\n\r\n }\r\n onProductGroupFilter() {\r\n //rest selection\r\n this.page = null;\r\n this.pageSize = null;\r\n this.productSearch = \"\"\r\n // refresh data\r\n this.getProduct_Selected_Data();\r\n }\r\n onClick_Product_Pagination(e: any) {\r\n this.page = e.pageIndex + 1;\r\n this.pageSize = e.pageSize;\r\n this.getProduct_Selected_Data();\r\n }\r\n onProduct_Search(value: string) {\r\n this.productSearch = value;\r\n this.page = null;\r\n this.pageSize = null;\r\n // refresh data\r\n this.getProduct_Selected_Data();\r\n\r\n }\r\n getProduct_Selected_Data() {\r\n // Get Contector Product Info from Backend\r\n this.Product_Selection_Service.getProduct_Selected_List(\r\n this.page,\r\n this.pageSize,\r\n this.selected_connector,\r\n this.selected_company,\r\n this.selected_finance_centre,\r\n this.selected_product_group,\r\n this.productSearch).subscribe((res) => {\r\n this.pagedProductItems = res.body['product_selected'];\r\n this.pagination_product = res.body['pagination'];\r\n this.filter = JSON.parse(res.body['filter']);\r\n });\r\n }\r\n onClose(): void {\r\n this.dialogRef.close();\r\n }\r\n\r\n onSingleSelect(item: any) {\r\n this.selected_product = [];\r\n this.selected_product.push(item.value);\r\n this.dialogRef.close(this.selected_product);\r\n }\r\n\r\n}","import { product_selected } from \"../../External/product_selected\";\r\nimport { mapping_cache_server } from \"./mapping_cache_server\";\r\n\r\nexport class mapping {\r\n public id: string;\r\n public mapping_code: string;\r\n public product_id: string;\r\n public product: product_selected;\r\n public mapping_cache_servers: mapping_cache_server[] = [];\r\n}","\r\n \r\n \r\n
\r\n map Mapping\r\n
\r\n
\r\n \r\n
{{mapping_header}}
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Mapping Code {{element.mapping_code}} Actions \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n {{product.company_finance_centre_product_group_product}}\r\n cancel\r\n \r\n \r\n \r\n You must enter a value\r\n \r\n \r\n \r\n \r\n {{selected_affiliate ? selected_affiliate[0]?.name : ''}}\r\n 1\">\r\n (+{{selected_affiliate.length - 1}} {{selected_affiliate?.length === 2 ? 'other'\r\n : 'others'}})\r\n \r\n \r\n \r\n {{cs.name}}\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { Confirmation_Dialog_Compnent } from \"../.././../../../material_ui/components/UI_Dialogs/Confirmation_Dialog/Confirmation_Dialog\";\r\nimport { Select_Product_Dialog_Compnent } from '../../comman/ui_dialogs/select_product/select_product';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatSelect } from '@angular/material/select';\r\n\r\nimport { mapping } from '../../../objects/Channel_Management/Mapping/mapping';\r\nimport { pagination } from \"../../../../../system/objects/pagination\";\r\nimport { cache_server } from '../../../objects/Type/cache_server';\r\nimport { affiliate } from '../../../objects/Affiliate/affiliate';\r\n\r\nimport { Mapping_Service } from '../../../services/Channel_Management/Mapping/Mapping';\r\nimport { Helper_Service } from '../../../../../material_ui/services/Core/Helper_Service';\r\nimport { Product_Selection_Service } from '../../../services/Comman/Product_Selection/Product_Selection';\r\n\r\n\r\n\r\n@Component({\r\n selector: 'mapping',\r\n templateUrl: './mapping.html'\r\n})\r\nexport class Component_Mapping {\r\n\r\n mapping_header: string = \"\";\r\n search_text: string = \"\";\r\n mapping: mapping = new mapping;\r\n mapping_list: mapping[];\r\n pagination_mapping: pagination = new pagination();\r\n displayedColumns: string[] = ['mapping_code', 'actions'];\r\n select_product: any[] = [];\r\n\r\n //Affiliate Cache Control\r\n @ViewChild(\"cacheList\") cacheList: MatSelect;\r\n @ViewChild('chipList') chipList;\r\n selected_affiliate: affiliate[] = [];\r\n affiliates: affiliate[] = [];\r\n\r\n // Flags\r\n updateButton: boolean = false;\r\n showSearchBlock: boolean = true;\r\n\r\n constructor(private mapping_service: Mapping_Service, private helper_service: Helper_Service, private dialog: MatDialog, private Product_Selection_Service: Product_Selection_Service) { }\r\n\r\n ngOnInit() {\r\n //this.getBackend_Data_For_Controls();\r\n this.getBackend_Data_Mapping(null, null);\r\n }\r\n\r\n //#region Mapping Main\r\n onClick_Mapping_Pagination(e: any) {\r\n this.getBackend_Data_Mapping(e.pageIndex + 1, e.pageSize);\r\n }\r\n\r\n getBackend_Data_Mapping(page: number, pageSize: number) {\r\n // Get Mapping Data\r\n this.mapping_service.getMapping_List(page, pageSize).subscribe((res) => {\r\n this.mapping_list = res.body['mapping'];\r\n this.pagination_mapping = res.body['pagination'];\r\n });\r\n\r\n // Get Type Affiliates\r\n this.mapping_service.getAffiliates(null).subscribe(res => {\r\n this.affiliates = res[\"affiliate\"];\r\n });\r\n }\r\n\r\n onMapping_Search(value: string) {\r\n this.search_text = value;\r\n this.mapping_service.getMapping_Search(null, this.search_text).subscribe((res) => {\r\n this.mapping_list = res.body['mapping'];\r\n this.pagination_mapping = res.body['pagination'];\r\n });\r\n }\r\n\r\n onAdd_Mapping() {\r\n // Bind Variables \r\n this.mapping_header = \"Enter Details To Add a New Price Override:\"\r\n this.showSearchBlock = false;\r\n }\r\n\r\n onEdit_Mapping(selected_mapping: mapping) {\r\n // Bind Variables \r\n this.mapping_header = \"Edit Details: \" + selected_mapping.mapping_code;\r\n\r\n this.mapping = selected_mapping;\r\n\r\n // Populate Product Control\r\n this.select_product.push(this.mapping.product);\r\n // Populate Cache Server List\r\n this.mapping_service.getMapping_Search(null, \"\").subscribe(() => {\r\n //Mapping Cache Get and Select on UI\r\n this.mapping.mapping_cache_servers.forEach(obj => {\r\n this.cacheList.options.forEach(x => {\r\n if (x.value.app_id.toUpperCase() === obj.affiliate_id.toUpperCase()) {\r\n x.select();\r\n }\r\n });\r\n });\r\n });\r\n\r\n // Update Flag\r\n this.updateButton = true;\r\n this.showSearchBlock = false;\r\n }\r\n onDelete_Mapping(selected_mapping: mapping) {\r\n\r\n const dialogRef = this.dialog.open(Confirmation_Dialog_Compnent, {\r\n data: { title: \"Delete !\", text: \"Are you sure you want to delete \" + selected_mapping.mapping_code + \"?\" }\r\n });\r\n\r\n dialogRef.afterClosed().subscribe(result => {\r\n if (result == true) {\r\n // call delete service\r\n this.mapping_service.deleteMapping(selected_mapping).subscribe(\r\n (response) => { this.helper_service.openSnackbarNotification(selected_mapping.mapping_code + ' has been deleted successfully', 'Close', 'success'); },\r\n (error) => { this.helper_service.openSnackbarNotification('Something has gone wrong!', 'Close', 'error'); },\r\n () => { this.rest_MappingForm() }\r\n );\r\n }\r\n });\r\n }\r\n //#endregion\r\n\r\n\r\n //#region Mapping Detail\r\n addProduct() {\r\n const dialogRef = this.dialog.open(Select_Product_Dialog_Compnent, {\r\n height: '850px',\r\n width: '920px'\r\n });\r\n\r\n dialogRef.afterClosed().subscribe(result => {\r\n if (result != undefined) {\r\n this.select_product = result;\r\n }\r\n this.chipList.errorState = this.select_product.length > 0 ? false : true;\r\n });\r\n }\r\n\r\n removeProduct(product: any): void {\r\n const index = this.select_product.indexOf(product);\r\n\r\n if (index >= 0) {\r\n this.select_product.splice(index, 1);\r\n }\r\n\r\n this.chipList.errorState = this.select_product.length == 0 ? true : false;\r\n }\r\n //#endregion\r\n\r\n //#region Screen Actions\r\n\r\n onAdd_Update_Mapping_Submit() {\r\n if (this.select_product.length > 0) {\r\n // Add Product Id\r\n this.mapping.product_id = this.select_product[0].id;\r\n // Add Cache Server\r\n var mapping_affiliate: any[] = [];\r\n this.selected_affiliate.forEach(o => {\r\n mapping_affiliate.push({ mapping_id: this.mapping.id, affiliate_id: o.app_id });\r\n });\r\n this.mapping.mapping_cache_servers = mapping_affiliate;\r\n\r\n if (this.updateButton) {\r\n this.mapping_service.addMapping(this.mapping).subscribe(\r\n (response) => { this.helper_service.openSnackbarNotification('You have successfully updated the mapping', 'Close', 'success'); },\r\n (error) => { this.helper_service.openSnackbarNotification('Something has gone wrong!', 'Close', 'error'); },\r\n () => { this.rest_MappingForm() }\r\n );\r\n }\r\n else {\r\n this.mapping_service.addMapping(this.mapping).subscribe(\r\n (response) => { this.helper_service.openSnackbarNotification('You have successfully added the mapping', 'Close', 'success'); },\r\n (error) => { this.helper_service.openSnackbarNotification('Something has gone wrong!', 'Close', 'error'); },\r\n () => { this.rest_MappingForm() }\r\n );\r\n }\r\n }\r\n else {\r\n this.chipList.errorState = true;\r\n }\r\n }\r\n\r\n rest_MappingForm() {\r\n this.showSearchBlock = true;\r\n this.updateButton = false;\r\n this.mapping_header = \"\";\r\n this.search_text = \"\";\r\n this.mapping = new mapping();\r\n this.select_product = [];\r\n // Refresh API Call data\r\n this.getBackend_Data_Mapping(null, null);\r\n }\r\n //#endregion\r\n\r\n}\r\n","import { list_mode } from '../../Type/channel_management_list_mode';\r\nimport { list_product } from './list_product';\r\n\r\n\r\n\r\nexport class list {\r\n\r\n public id: string;\r\n public name: string;\r\n public mode_id: number;\r\n public mode: list_mode;\r\n public products: list_product[] = [];\r\n}","\r\n \r\n \r\n
\r\n list_alt List\r\n
\r\n
\r\n \r\n
{{list_header}}
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
List Name {{element.name}} Mode {{element.mode.name}} Actions \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n You must enter a value\r\n \r\n\r\n \r\n \r\n {{list_mode.name}}\r\n \r\n \r\n You must select a value\r\n \r\n
\r\n
\r\n \r\n

List Products

\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n
","import { Component } from '@angular/core';\r\nimport { FormGroup, FormControl, Validators } from '@angular/forms';\r\nimport { MatDialog } from '@angular/material/dialog';\r\n\r\n\r\nimport { list } from '../../../objects/Channel_Management/List_Management/list';\r\nimport { list_mode } from '../../../objects/Type/channel_management_list_mode';\r\nimport { list_product } from '../../../objects/Channel_Management/List_Management/list_product';\r\nimport { pagination } from '../../../../../system/objects/pagination';\r\n\r\nimport { List_Management_Service } from '../../../services/Channel_Management/List_Management/List';\r\nimport { Helper_Service } from '../../../../../material_ui/services/Core/Helper_Service';\r\nimport { Confirmation_Dialog_Compnent } from '../../../../../material_ui/components/UI_Dialogs/Confirmation_Dialog/Confirmation_Dialog';\r\n\r\n\r\n\r\n@Component({\r\n selector: 'channel-management-list',\r\n templateUrl: './channel_management_list.html'\r\n})\r\nexport class Component_Channel_Management_List {\r\n\r\n listForm: FormGroup;\r\n\r\n list_header: string = \"\";\r\n search_text: string = \"\";\r\n list_modes: list_mode[];\r\n channel_management_lists: list[];\r\n channel_management_list: list = new list;\r\n list_products: list_product[] = [];\r\n pagination_list: pagination = new pagination();\r\n selectedProductItems: any[] = [];\r\n displayedColumns: string[] = ['name', 'mode', 'edit'];\r\n\r\n // Flags\r\n updateButton: boolean = false;\r\n showSearchBlock: boolean = true;\r\n\r\n constructor(private list_management_service: List_Management_Service, private helper_service: Helper_Service, private dialog: MatDialog) { }\r\n\r\n async ngOnInit() {\r\n // Grid data\r\n await this.getBackendData(null, null, \"\");\r\n // Get list mode data\r\n this.list_modes = await this.list_management_service.getList_Modes(null).toPromise();\r\n }\r\n\r\n async getBackendData(page_number: number, page_size: number, search: string) {\r\n var response = await this.list_management_service.getChannel_Management_List(page_number, page_size, search, null).toPromise();\r\n this.channel_management_lists = response.body[\"list\"];\r\n this.pagination_list = response.body['pagination'];\r\n }\r\n\r\n async onClick_List_Pagination(e: any) {\r\n await this.getBackendData(e.pageIndex + 1, e.pageSize, this.search_text);\r\n }\r\n\r\n async onList_Search(value: string) {\r\n this.search_text = value;\r\n await this.getBackendData(null, null, this.search_text);\r\n }\r\n\r\n async onAdd_List() {\r\n // Bind Variables \r\n this.list_header = \"Enter Details To Add a New Channel Managment List:\"\r\n this.showSearchBlock = false;\r\n // Populate Form Control\r\n await this.setListForm(new list);\r\n }\r\n\r\n async onEdit_List(selected_list: list) {\r\n // Bind Variables \r\n this.list_header = \"Edit Details: \" + selected_list.name;\r\n this.channel_management_list = selected_list;\r\n\r\n // Populate Product Control\r\n this.selectedProductItems = [];\r\n selected_list.products.forEach(obj => {\r\n this.selectedProductItems.push(Object({ id: obj.product.external_identifier, name: obj.product.company_finance_centre_product_group_product, selected: true, product_id: obj.product_id }));\r\n this.list_products.push(Object({ list_id: selected_list.id, product_id: obj.product_id }));\r\n });\r\n // Populate Form Control\r\n await this.setListForm(selected_list);\r\n\r\n // Update Flag\r\n this.updateButton = true;\r\n this.showSearchBlock = false;\r\n }\r\n\r\n async onDelete_List(selected_list: list) {\r\n\r\n const dialogRef = this.dialog.open(Confirmation_Dialog_Compnent, {\r\n data: { title: \"Delete !\", text: \"Are you sure you want to delete \" + selected_list.name + \"?\" }\r\n });\r\n\r\n dialogRef.afterClosed().subscribe(async result => {\r\n if (result == true) {\r\n // call delete service\r\n await this.list_management_service.deleteChannel_Management_List(selected_list).toPromise()\r\n .then(response => { this.helper_service.openSnackbarNotification(selected_list.name + ' has been deleted successfully', 'Close', 'success'); })\r\n .catch((error) => { this.helper_service.openSnackbarNotification('Something has gone wrong!', 'Close', 'error'); }\r\n );\r\n await this.rest_ListForm();\r\n }\r\n });\r\n }\r\n\r\n async setListForm(listModel: list) {\r\n this.listForm = new FormGroup({\r\n name: new FormControl(listModel.name, [Validators.required]),\r\n mode_id: new FormControl(listModel.mode_id, [Validators.required]),\r\n });\r\n }\r\n\r\n async onAdd_Update_List_Submit() {\r\n\r\n this.channel_management_list.name = this.listForm.get('name').value;\r\n this.channel_management_list.mode_id = this.listForm.get('mode_id').value;\r\n this.channel_management_list.mode = null;\r\n this.channel_management_list.products = this.list_products;\r\n\r\n // Check Form Is Valid\r\n if (this.listForm.valid) {\r\n await this.list_management_service.addChannel_Management_List(this.channel_management_list).toPromise()\r\n .then(response => { this.helper_service.openSnackbarNotification('You have successfully updated the channel management list', 'Close', 'success'); })\r\n .catch((error) => { this.helper_service.openSnackbarNotification('Something has gone wrong!', 'Close', 'error'); }\r\n );\r\n await this.rest_ListForm();\r\n }\r\n else {\r\n const controls = this.listForm.controls;\r\n Object.keys(controls).forEach(controlName => controls[controlName].markAsTouched());\r\n }\r\n }\r\n\r\n async onAddProduct(item: any) {\r\n this.list_products.push(Object({ product_id: item.id }));\r\n }\r\n\r\n async onRemoveProduct(item: any) {\r\n this.list_products = this.list_products.filter(x => x.product_id != item.product_id);\r\n }\r\n\r\n async rest_ListForm() {\r\n this.showSearchBlock = true;\r\n this.updateButton = false;\r\n this.list_header = \"\";\r\n this.search_text = \"\";\r\n this.listForm.reset();\r\n this.list_products = [];\r\n this.channel_management_lists = [];\r\n this.channel_management_list = new list;\r\n this.selectedProductItems = [];\r\n await this.ngOnInit();\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\r\nimport { Observable } from 'rxjs';\r\n\r\nimport { Permissions_Service } from '../../../modules/system/services/Permissions_Service';\r\n\r\n\r\n\r\n@Injectable()\r\nexport class Gateway_Maintenance_Guard implements CanActivate {\r\n\r\n constructor(private Permissions_Service: Permissions_Service) { }\r\n\r\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | Observable {\r\n return this.Permissions_Service.checkAuthenticationClaims(\"GATEWAY_MAINTENANCE\");\r\n }\r\n}","import { ModuleWithProviders } from \"@angular/core\";\r\nimport { Routes, RouterModule } from \"@angular/router\";\r\n\r\nimport { GatewayComponent } from \"./main/gateway\";\r\nimport { Component_Home } from \"../../modules/tms/gateway/components/home/home\";\r\nimport { Component_Web_Engine } from \"../../modules/tms/gateway/components/web_search/web_engine/web_engine\";\r\nimport { Component_Web_Search_Filter } from '../../modules/tms/gateway/components/web_search/web_search_filter/web_search_filter';\r\nimport { Component_Web_Search_Sales_Group } from '../../modules/tms/gateway/components/web_search/web_search_sales_group/web_search_sales_group';\r\nimport { Component_Affiliate } from '../../modules/tms/gateway/components/affiliate/affiliate/affiliate';\r\nimport { Component_Affiliate_Hold_Time } from '../../modules/tms/gateway/components/affiliate/hold_time/hold_time';\r\nimport { Component_Audit_Booking } from '../../modules/tms/gateway/components/audit/audit_booking';\r\nimport { Component_Price_Override } from '../../modules/tms/gateway/components/channel_management/price_override/price_override';\r\nimport { Page_Not_Found_Component } from \"../../modules/system/components/Page_Not_Found\";\r\nimport { Component_User_Profile } from \"../../modules/tms/identity/internal/components/User_Profile/User_Profile\";\r\nimport { Component_Product_List } from \"../../modules/tms/gateway/components/channel_management/product/product_list/product_list\";\r\nimport { Component_Product_Details } from \"../../modules/tms/gateway/components/channel_management/product/product_details/product_details\";\r\nimport { Component_Mapping } from \"../../modules/tms/gateway/components/channel_management/mapping/mapping\";\r\nimport { Component_Channel_Management_List } from '../../modules/tms/gateway/components/channel_management/list/channel_management_list';\r\n\r\nimport { Auth_Guard } from \"../../modules/system/guards/Auth_Guard\";\r\nimport { Gateway_Maintenance_Guard } from \"./guards/Gateway_Maintenance_Guard\";\r\n\r\n\r\n\r\nconst appRoutes = [\r\n {\r\n path: \"\",\r\n component: GatewayComponent,\r\n canActivate: [Auth_Guard],\r\n children: [\r\n {\r\n path: \"\",\r\n component: Component_Home,\r\n canActivate: [Gateway_Maintenance_Guard]\r\n },\r\n {\r\n path: \"web_engine\",\r\n component: Component_Web_Engine,\r\n canActivate: [Gateway_Maintenance_Guard]\r\n },\r\n {\r\n path: \"web_search_filter\",\r\n component: Component_Web_Search_Filter,\r\n canActivate: [Gateway_Maintenance_Guard]\r\n },\r\n {\r\n path: \"web_search_sales_group\",\r\n component: Component_Web_Search_Sales_Group,\r\n canActivate: [Gateway_Maintenance_Guard]\r\n },\r\n {\r\n path: \"affiliate\",\r\n component: Component_Affiliate,\r\n canActivate: [Gateway_Maintenance_Guard]\r\n },\r\n {\r\n path: \"affiliate_hold_time\",\r\n component: Component_Affiliate_Hold_Time,\r\n canActivate: [Gateway_Maintenance_Guard]\r\n },\r\n {\r\n path: \"audit_booking\",\r\n component: Component_Audit_Booking,\r\n canActivate: [Gateway_Maintenance_Guard]\r\n },\r\n {\r\n path: \"price_override\",\r\n component: Component_Price_Override,\r\n canActivate: [Gateway_Maintenance_Guard]\r\n },\r\n {\r\n path: \"product_list\",\r\n component: Component_Product_List,\r\n canActivate: [Gateway_Maintenance_Guard]\r\n },\r\n {\r\n path: \"product_details\",\r\n component: Component_Product_Details,\r\n canActivate: [Gateway_Maintenance_Guard]\r\n },\r\n {\r\n path: \"mapping\",\r\n component: Component_Mapping,\r\n canActivate: [Gateway_Maintenance_Guard]\r\n },\r\n {\r\n path: \"channel_management_list\",\r\n component: Component_Channel_Management_List,\r\n canActivate: [Gateway_Maintenance_Guard]\r\n },\r\n {\r\n path: \"user_profile\",\r\n component: Component_User_Profile\r\n }\r\n ]\r\n },\r\n {\r\n path: \"**\",\r\n component: Page_Not_Found_Component\r\n }\r\n];\r\n\r\nexport const AppRoutingProviders: any[] = [];\r\nexport const AppRouting: ModuleWithProviders = RouterModule.forRoot(appRoutes, { relativeLinkResolution: 'legacy' });\r\n","import { BrowserModule } from '@angular/platform-browser';\r\nimport { NgModule } from '@angular/core';\r\nimport { OAuthModule } from 'angular-oauth2-oidc';\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\n\r\nimport { Module_System } from '../../modules/system/system.module';\r\nimport { Module_TMS_Gateway } from '../../modules/tms/gateway/tms_gateway_module'\r\nimport { Module_TMS_Identity_Internal } from '../../modules/tms/identity/internal/tms_identity_internal_module';\r\n\r\nimport { AppComponent } from './app.component';\r\nimport { GatewayComponent } from './main/gateway';\r\nimport { AppRouting } from './app.routing';\r\n\r\nimport { Gateway_Maintenance_Guard } from './guards/Gateway_Maintenance_Guard';\r\n\r\nimport { environment } from '../environments/environment';\r\nimport { Environment_Service } from '../../modules/system/services/Environment_Service';\r\n\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n AppComponent,\r\n GatewayComponent\r\n ],\r\n imports: [\r\n AppRouting,\r\n BrowserModule,\r\n Module_System.forRoot(),\r\n Module_TMS_Gateway,\r\n Module_TMS_Identity_Internal,\r\n OAuthModule.forRoot(),\r\n BrowserAnimationsModule,\r\n ],\r\n providers: [ Gateway_Maintenance_Guard],\r\n bootstrap: [AppComponent]\r\n})\r\nexport class AppModule {\r\n\r\n constructor(private Environment_Service: Environment_Service) {\r\n this.Environment_Service.environment.production = environment.production;\r\n this.Environment_Service.environment.environment_name = environment.environment_name;\r\n \r\n this.Environment_Service.environment.identity_client_id = environment.identity_client_id;\r\n this.Environment_Service.environment.identity_scope = environment.identity_scope;\r\n this.Environment_Service.environment.identity_server = environment.identity_server;\r\n\r\n this.Environment_Service.environment.api_internal_gateway = environment.api_internal_gateway;\r\n this.Environment_Service.environment.microservice_api_key = environment.microservice_api_key;\r\n this.Environment_Service.environment.microservice_app_id = environment.microservice_app_id;\r\n\r\n }\r\n}\r\n","// The file contents for the current environment will overwrite these during build.\r\n// The build system defaults to the dev environment which uses `environment.ts`, but if you do\r\n// `ng build --env=prod` then `environment.prod.ts` will be used instead.\r\n// The list of which env maps to which file can be found in `.angular-cli.json`.\r\n\r\nexport const environment = {\r\n production: false,\r\n environment_name : \"rtg-bab-staging\",\r\n\r\n identity_server: \"https://identity.staging.tms.radicaltravel.com\",\r\n identity_scope: \"openid profile offline_access tour_management_system\",\r\n identity_client_id: \"tms.corp.ttc\",\r\n identity_realm: \"travcorp-gateway\",\r\n\r\n api_internal_gateway: \"https://gateway.staging.tms.radicaltravel.com\",\r\n microservice_app_id: \"326caf5e-acb9-4bf1-9c33-8158fe552e20\",\r\n microservice_api_key: \"mrRWV8ac4Ngo38v0oi64/wkUik3CzXdMLpmeWcH+EiCxv6/URHNaLg==\",\r\n};\r\n","import { enableProdMode } from '@angular/core';\r\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\r\n\r\nimport { AppModule } from './app/app.module';\r\nimport { environment } from './environments/environment';\r\n\r\nif (environment.production) {\r\n enableProdMode();\r\n}\r\n\r\nplatformBrowserDynamic().bootstrapModule(AppModule)\r\n .catch(err => console.log(err));\r\n"],"sourceRoot":"webpack:///","file":"main.96ca86f5fe1a998a.js"}