{"version":3,"file":"362.chunk.js","mappings":"wLAAKA,E,2JCeCC,EAEF,CACFC,KAAM,CACJC,KAAM,OACNC,YAAa,4CACbC,oBAAqB,wEACrBC,QAAS,4CACTC,SAAU,sDACVC,YAAa,iBACbC,sBAAuB,kDACvBC,qBAAsB,4CACtBC,gCAAiC,6BACjCC,UAAW,YAEbC,KAAM,CACJV,KAAM,OACNC,YAAa,+BACbC,oBAAqB,4DACrBC,QAAS,+BACTC,SAAU,0CACVC,YAAa,iBACbC,sBAAuB,kDACvBC,qBAAsB,4CACtBC,gCAAiC,6BACjCC,UAAW,YAEbE,YAAa,CACXX,KAAM,cACNC,YAAa,+BACbC,oBAAqB,4DACrBC,QAAS,wCACTC,SAAU,0CACVC,YAAa,iBACbC,sBAAuB,kDACvBC,qBAAsB,4CACtBC,gCAAiC,6BACjCC,UAAW,UAEbG,KAAM,CACJZ,KAAM,OACNC,YAAa,oCACbC,oBAAqB,iEACrBC,QAAS,oCACTC,SAAU,+CACVC,YAAa,iBACbC,sBAAuB,0DACvBC,qBAAsB,4CACtBC,gCAAiC,6BACjCC,UAAW,UAEbI,YAAa,CACXb,KAAM,cACNC,YAAa,gDACbC,oBAAqB,iEACrBC,QAAS,6CACTC,SAAU,+CACVC,YAAa,iBACbC,sBAAuB,0DACvBC,qBAAsB,4CACtBC,gCAAiC,6BACjCC,UAAW,YAMbK,iBAAkB,CAChBd,KAAM,OACNC,YAAa,oCACbC,oBAAqB,+EACrBC,QAAS,oCACTC,SAAU,+CACVC,YAAa,iBACbC,sBAAuB,0DACvBC,qBAAsB,4CACtBC,gCAAiC,6BACjCC,UAAW,UAEbM,aAAc,CACZf,KAAM,UACNC,YAAa,+BACbC,oBAAqB,4DACrBC,QAAS,4CACTC,SAAU,yDACVC,YAAa,yBACbC,sBAAuB,kDACvBC,qBAAsB,4CACtBC,gCAAiC,6BACjCC,UAAW,UAEbO,aAAc,CACZhB,KAAM,UACNC,YAAa,gDACbC,oBAAqB,8EACrBC,QAAS,iDACTC,SAAU,+CACVC,YAAa,yBACbC,sBAAuB,0DACvBC,qBAAsB,4CACtBC,gCAAiC,6BACjCC,UAAW,UAEbQ,YAAa,CACXjB,KAAM,UACNC,YAAa,+BACbC,oBAAqB,4DACrBC,QAAS,4CACTC,SAAU,yDACVC,YAAa,yBACbC,sBAAuB,kDACvBC,qBAAsB,4CACtBC,gCAAiC,6BACjCC,UAAW,UAEbS,YAAa,CACXlB,KAAM,UACNC,YAAa,gDACbC,oBAAqB,8EACrBC,QAAS,iDACTC,SAAU,2DACVC,YAAa,yBACbC,sBAAuB,0DACvBC,qBAAsB,4CACtBC,gCAAiC,6BACjCC,UAAW,UAGbU,+BAAgC,CAC9BnB,KAAM,iCACNC,YAAa,gDACbC,oBAAqB,8EACrBC,QAAS,iEACTC,SAAU,GACVC,YAAa,GACbC,sBAAuB,GACvBC,qBAAsB,GACtBC,gCAAiC,6BACjCC,UAAW,UAEbW,gCAAiC,CAC/BpB,KAAM,kCACNC,YAAa,gDACbC,oBAAqB,8EACrBC,QAAS,kEACTC,SAAU,GACVC,YAAa,GACbC,sBAAuB,GACvBC,qBAAsB,GACtBC,gCAAiC,6BACjCC,UAAW,UAEbY,kCAAmC,CACjCrB,KAAM,oCACNC,YAAa,+BACbC,oBAAqB,8EACrBC,QAAS,oEACTC,SAAU,GACVC,YAAa,GACbC,sBAAuB,GACvBC,qBAAsB,GACtBC,gCAAiC,6BACjCC,UAAW,UAEba,mCAAoC,CAClCtB,KAAM,qCACNC,YAAa,+BACbC,oBAAqB,8EACrBC,QAAS,qEACTC,SAAU,GACVC,YAAa,GACbC,sBAAuB,GACvBC,qBAAsB,GACtBC,gCAAiC,6BACjCC,UAAW,WAITc,EAAuB,SAACC,GAC5B,OAAQA,EAAO1B,EAAM0B,GAAO1B,EAAMY,MC9L9Be,EAAsB,kCAEtBC,EAAqB,SACMC,EAA8BC,GAC3D,IAAMC,EAAYN,EAAqBI,EAAOH,KAG9C,OAAIG,EAAOH,IAAIM,SAAS,SAGZH,EAAOI,IAFV,UAAGF,EAAU5B,aAAb,OAA2BwB,GAAsBO,QAAQ,SAAUJ,IAN1EF,EAAqB,SAeHC,GAEpB,OADkBJ,EAAqBI,EAAOH,KAC7BtB,qBCrBR+B,EAAuB,SAACC,GACnC,MAAO,CACLA,IAAKA,EACLC,UAAW,CAAE,KAAK,EAAO,KAAK,GAC9BC,YAAa,CAAE,KAAK,EAAO,KAAK,GAChCC,KAAM,GACNC,iBAAaC,EACbC,OAAQ,kBAAMN,GACdO,YAAa,kBAAM,GACnBC,aAAc,kBAAM,KCHXC,EAAmB,SAACC,EAAkCV,EAAaP,GAE9E,IAAMU,GAAyB,OAAfO,QAAe,IAAfA,OAAe,EAAfA,EAAiBP,MAAQO,EAAgBP,KAAO,GAE1DI,EAAcG,EAAgBC,YAAYf,SAAS,WAAac,EAAgBC,YAAYf,SAAS,WAAaO,EAAKS,OAAS,EAEhIJ,EAAeE,EAAgBG,uBAAuBjB,SAAS,WAChEc,EAAgBG,uBAAuBjB,SAAS,UAE/CQ,EAde,SAACD,EAAgBV,EAA8Bc,GAEpE,OAAQJ,EAAKP,SAAS,IAAqB,SAAfH,EAAOH,MAAmBiB,EAAe,OAAS,MAY1DO,CAAeX,EAAMV,EAAQc,GAEjD,MAAO,CACLP,IAAKA,EACLC,UAAW,CACT,IAAOS,EAAgBC,YAAYf,SAAS,UAC5C,IAAOc,EAAgBC,YAAYf,SAAS,WAE9CM,YAAa,CACX,IAAOQ,EAAgBG,uBAAuBjB,SAAS,UACvD,IAAOc,EAAgBG,uBAAuBjB,SAAS,WAEzDO,KAAAA,EACAC,YAAAA,EACAE,OAAQ,kBAAMN,GACdO,YAAa,kBAAMA,GACnBC,aAAc,kBAAMA,KCvBlBO,EAASC,EAAAA,GAAAA,cAA8BC,cAAcnD,EAAMoD,EAAS,kBAEpEC,EAAuB,SAC3B1B,EACAO,GAGA,IAAMoB,EAAc5B,EAAkDC,EAAQO,GACxEqB,EAA2B,CAC/BC,OAAQ,MACRC,SAAS,QACP,OAAU,oBACN9B,EAAOI,KAAO,CAAE,YAAaJ,EAAOI,MAE1C2B,KAAM,OACNC,eAAgB,cAElB,OAAOC,MAAMN,EAAaC,IAGtBM,EAAiB,SAEnBlC,EACAO,GAIA,OAAIP,EAAOH,IAAIM,SAAS,MACfgC,QAAQC,QClCa,SAAC7B,EAAaP,GAC9C,MAAO,CACLO,IAAKA,EACLC,UAAW,CAAE,KAAK,EAAM,KAAK,GAC7BC,YAAa,CAAE,KAAK,EAAM,KAAK,GAC/BC,KAAM,CAAC,EAAG,EAAG,GACbG,OAAQ,kBAAMN,GAEdI,YAAaX,EAAOH,IAAIM,SAAS,QAAU,OAAS,MACpDW,YAAa,kBAAM,GACnBC,aAAc,kBAAM,IDwBsBsB,CAAmB9B,EAAKP,IAI3D0B,EAAqB1B,EAAQO,GACnC+B,MAAK,SAACC,GACL,GAAIA,EAASC,GACX,OAAOD,EAASE,OAElB,MAAM,IAAIC,MAAJ,sDAAyDH,EAASI,YAEvEL,MAAK,SAACG,GACP,OAAMA,EAAKlC,GACFS,EAAiByB,EAAKlC,GAAMA,EAAKP,GAEnCM,EAAqBC,OAvB5B2B,EAAiB,SAkCnBlC,EACAO,GAIA,OAAIP,EAAOH,IAAIM,SAAS,MACfgC,QAAQC,QCpDqB,SAAC7B,EAAaP,GACtD,OAAOO,EAAIqC,MAAM,KAAKC,KAAI,SAACtC,GACzB,MAAO,CACLA,IAAKA,EACLC,UAAW,CAAE,KAAK,EAAM,KAAK,GAC7BC,YAAa,CAAE,KAAK,EAAM,KAAK,GAC/BC,KAAM,CAAC,EAAG,EAAG,GACbG,OAAQ,kBAAMN,GAEdI,YAAaX,EAAOH,IAAIM,SAAS,QAAU,OAAS,MACpDW,YAAa,kBAAM,GACnBC,aAAc,kBAAM,ODyCsB+B,CAA2BvC,EAAKP,IAIrE0B,EAAqB1B,EAAQO,GACnC+B,MAAK,SAACC,GACL,GAAIA,EAASC,GACX,OAAOD,EAASE,OAElB,MAAM,IAAIC,MAAJ,sDAAyDH,EAASI,YAEvEL,MAAK,SAACG,GAEP,IAAMM,EAAOxC,EAAIqC,MAAM,KACjBL,EAA8B,GASpC,OARAQ,EAAKC,SAAQ,SAACzC,GACNkC,EAAKlC,GACTgC,EAASU,KAAKjC,EAAiByB,EAAKlC,GAAMA,EAAKP,IAGjDuC,EAASU,KAAK3C,EAAqBC,OAG9BgC,MA/DPL,EAAiB,SAoEnBlC,GAGA,IAAM2B,EAAc5B,EAAyCC,GAC7D,OAAOiC,MAAMN,GAAaW,MAAK,SAACC,GAC9B,OAAOA,EAASE,UACfH,MAAK,SAACG,GACP,IACE,IAAMS,EAEF,GAKJ,OAHCT,EAAMO,SAAQ,SAACG,GACdD,EAAOC,EAAM9E,MAAQ8E,KAEhBD,EAEP,MAAOE,GACP9B,EAAO+B,MAAMD,GAEf,MAAO,OE/GP9B,EAASC,EAAAA,GAAAA,cAA8BC,cAAcnD,EAAMoD,EAAS,WAEpE6B,EAAU,CACdC,mBADc,SAEZvD,EACAO,GAIA,OADAe,EAAOkC,MAAM,4BAA6BjD,GACnC2B,EAAkClC,EAAQO,IASnDkD,2BAhBc,SAiBZzD,GACiB,2BAAd+C,EAAc,iCAAdA,EAAc,kBAGjB,IAAMW,EAAUX,EAAKY,QAAO,SAACC,EAAUC,GACrC,OAAOA,EAAQ,IAAID,KAIrB,OADAtC,EAAOkC,MAAM,4BAA6BT,GACnCb,EAA0ClC,EAAQ0D,IAU3DI,yBApCc,SAqCZ9D,GAIA,OADAsB,EAAOkC,MAAM,4BACNtB,EAAwClC,MPlDnD,SAAK9B,GACHA,EAAAA,KAAAA,OACAA,EAAAA,YAAAA,cACAA,EAAAA,KAAAA,OACAA,EAAAA,YAAAA,cACAA,EAAAA,iBAAAA,mBACAA,EAAAA,aAAAA,eACAA,EAAAA,aAAAA,eACAA,EAAAA,YAAAA,cACAA,EAAAA,YAAAA,cACAA,EAAAA,KAAAA,OAEAA,EAAAA,+BAAAA,iCACAA,EAAAA,gCAAAA,kCACAA,EAAAA,kCAAAA,oCACAA,EAAAA,mCAAAA,qCAfF,CAAKA,IAAAA,EAAkB,KQGhB,ICHF6F,EDGQC,EAAe,CAC1BC,eAD0B,SACXC,GACb,OAAO,IAAI/B,SAAQ,SAACC,EAAS+B,GAC3B,IAAMC,EAAS,IAAIC,WACnBD,EAAOE,QAAUH,EACjBC,EAAOG,OAAS,WACdnC,EAAQgC,EAAOlB,SAEjBkB,EAAOI,kBAAkBN,OAI7BO,eAZ0B,SAYXC,GACb,OAAOA,EACJC,MAAM,QACNrC,MAAK,SAAC4B,GACL,OAAOF,EAAaY,SAASV,OAInCU,SApB0B,SAoBjBV,GACP,OAAO,IAAI/B,SAAQ,SAACC,EAAS+B,GAC3B,IAAMU,EAAMC,IAAIC,gBAAgBb,GAC1Bc,EAAM,IAAIC,MAChBD,EAAIE,YAAc,IAElBF,EAAIT,OAAS,WACXO,IAAIK,gBAAgBN,GACpBzC,EAAQ4C,IAGVA,EAAIV,QAAU,SAAClB,GACbe,EAAOf,IAGT4B,EAAII,IAAMP,MAIdQ,eAvC0B,SAuCXnB,GACb,OAAO,IAAI/B,SAAQ,SAACC,EAAS+B,GAC3B,IAAMC,EAAS,IAAIC,WACnBD,EAAOE,QAAUH,EACjBC,EAAOG,OAAS,WACdnC,EAAQ,GAAKgC,EAAOlB,SAEtBkB,EAAOkB,cAAcpB,OAIzBqB,cAlD0B,SAkDZhF,EAAaiF,GACzB,OAAOA,EACJb,MAAM,QACNrC,MAAK,SAAC4B,GACL,OAAOF,EAAayB,aAAalF,EAAK2D,OAI5CuB,aA1D0B,SA0DblF,EAAa2D,GACxB,OAAOwB,KAAKzB,eAAeC,GAC1B5B,MAAK,SAACqD,GACL,OAAOxD,QAAQC,QAAQ,CACrB7B,IAAAA,EACAoF,YAAAA,SElEFC,EACC,cADDA,EAEU,WAFVA,EAGI,kBAHJA,EAIK,eAJLA,EAKQ,aALRA,EAMc,gBANdA,EAOG,SAACC,GAAD,sBAAqCA,EAArC,SCFIC,EACG,aADHA,EAEF,WAFEA,EAGJ,KCRHC,EAQF,CACF,iBAAoB,CAClB,aAAgB,aAChB,MAAS,KACT,QAAW,WACX,UAAa,EACb,MAAQ,GAEV,iBAAoB,CAClB,aAAgB,aAChB,MAAS,KACT,QAAW,WACX,UAAa,EACb,MAAQ,GAEV,iBAAoB,CAClB,aAAgB,WAChB,MAAS,KACT,QAAW,WACX,UAAa,EACb,MAAQ,GAEV,iBAAoB,CAClB,aAAgB,aAChB,MAAS,KACT,QAAW,WACX,UAAa,EACb,MAAQ,GAEV,4BAA6B,CAC3B,aAAgB,YAChB,MAAS,KACT,QAAW,OACX,UAAa,EACb,MAAQ,GAEV,2BAA4B,CAC1B,aAAgB,YAChB,MAAS,KACT,QAAW,OACX,UAAa,EACb,MAAQ,GAEV,4BAA+B,CAC7B,aAAgB,YAChB,MAAS,KACT,QAAW,OACX,UAAa,EACb,MAAQ,GAEV,kCAAqC,CACnC,aAAgB,YAChB,MAAS,KACT,QAAW,OACX,UAAa,EACb,MAAQ,GAEV,kCAAqC,CACnC,aAAgB,YAChB,MAAS,KACT,QAAW,OACX,UAAa,EACb,MAAQ,GAEV,4BAA+B,CAC7B,aAAgB,YAChB,MAAS,KACT,QAAW,OACX,UAAa,EACb,MAAQ,GAEV,aAAc,CACZ,aAAgB,YAChB,MAAS,KACT,QAAW,OACX,UAAa,EACb,MAAQ,GAEV,cAAe,CACb,aAAgB,YAChB,MAAS,KACT,QAAW,OACX,UAAa,EACb,MAAQ,GAEV,cAAiB,CACf,aAAgB,YAChB,MAAS,KACT,QAAW,OACX,UAAa,EACb,MAAQ,GAEV,eAAkB,CAChB,aAAgB,YAChB,MAAS,KACT,QAAW,OACX,UAAa,EACb,MAAQ,GAEV,kBAAqB,CACnB,aAAgB,YAChB,MAAS,KACT,QAAW,OACX,UAAa,EACb,MAAQ,GAEV,iBAAoB,CAClB,aAAgB,aAChB,MAAS,KACT,QAAW,WACX,UAAa,EACb,MAAQ,GAEV,kBAAqB,CACnB,aAAgB,aAChB,MAAS,KACT,QAAW,WACX,UAAa,EACb,MAAQ,GAEV,iBAAoB,CAClB,aAAgB,aAChB,MAAS,KACT,QAAW,WACX,UAAa,EACb,MAAQ,GAEV,iBAAoB,CAClB,aAAgB,aAChB,MAAS,KACT,QAAW,WACX,UAAa,EACb,MAAQ,GAEV,qBAAsB,CACpB,aAAgB,aAChB,MAAS,KACT,QAAW,WACX,UAAa,EACb,MAAQ,GAEV,iBAAoB,CAClB,aAAgB,aAChB,MAAS,KACT,QAAW,WACX,UAAa,EACb,MAAQ,GAEV,kBAAqB,CACnB,aAAgB,aAChB,MAAS,KACT,QAAW,WACX,UAAa,EACb,MAAQ,GAEV,iBAAoB,CAClB,aAAgB,aAChB,MAAS,KACT,QAAW,WACX,UAAa,EACb,MAAQ,GAEV,oBAAqB,CACnB,aAAgB,aAChB,MAAS,KACT,QAAW,WACX,UAAa,EACb,MAAQ,GAEV,iBAAoB,CAClB,aAAgB,aAChB,MAAS,KACT,QAAW,WACX,UAAa,EACb,MAAQ,ICtLGC,EAAAA,SAAAA,I,6BAMX,WAAYC,EAAcC,GAAe,6BACrC,wBAASD,EAAT,aAAkBC,KAHNC,cAAyB,EAIrC,EAAKF,KAAOA,EACZ,EAAKC,QAAUA,EACfE,OAAOC,gBAAP,WAA4B,2CAAWC,WAJF,E,sCAOlC,WACH,OAAOZ,KAAKO,S,EAdLD,E,OAAqBtD,QCE9B6D,EAAAA,SAAAA,I,6BACJ,WAAqBhG,GAAW,6BAC9B,cAAM,uBAAN,0BAAiDA,EAAjD,sBADmBA,IAAAA,EAAW,E,iBAD5BgG,CAA6BP,GCA7BQ,EAAAA,SAAAA,I,6BACJ,WAAqBjG,GAAW,6BAC9B,cAAM,gCAAN,kCAAkEA,EAAlE,yBADmBA,IAAAA,EAAW,E,iBAD5BiG,CAAsCR,GCAtCS,EAAAA,SAAAA,I,6BACJ,WAAqBlG,GAAW,6BAC9B,cAAM,uBAAN,kCAAyDA,EAAzD,gBADmBA,IAAAA,EAAW,E,iBAD5BkG,CAA6BT,GCF7BU,EAAqB,SAACnG,GAC1B,OAAOA,EAAIoG,WAAW,URDxB,SAAK5C,GACHA,EAAAA,WAAAA,gBACAA,EAAAA,WAAAA,gBACAA,EAAAA,6BAAAA,wBACAA,EAAAA,6BAAAA,wBACAA,EAAAA,8BAAAA,4BACAA,EAAAA,8BAAAA,4BACAA,EAAAA,sCAAAA,iCACAA,EAAAA,sCAAAA,iCACAA,EAAAA,uCAAAA,qCACAA,EAAAA,uCAAAA,qCAVF,CAAKA,IAAAA,EAAkB,KSWvB,IAAMzC,EAASC,EAAAA,GAAAA,cAA8BC,cAAcnD,EAAMoD,EAAS,oBAEpEmF,EAAe,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,IAE9DC,EAAAA,W,iEAEG,SACLtG,EACAuG,EACAC,EACAC,GAEA,IAAMC,EAAyC,kBAAlBD,EAA8B,CAACA,GAAiBJ,EAE7E,OAAOlB,KAAKwB,aACV3G,EACAuG,EACAG,EACAF,K,0BAGI,SACNxG,EACAuG,EACAG,EACAF,GAA2B,WAErBI,EAAQC,YAAYC,MACtBC,EAAQ,EACNC,EAAQ,IAAIC,KAClB,OAAOD,EAAME,UACTX,GACAxE,MAAK,WAGL,OAFAhB,EAAOkC,MAAM,uCAAwCjD,EAAK6G,YAAYC,MAAQF,GAC9EG,EAAQF,YAAYC,MACb,EAAKK,2BAA2BH,EAAOhH,EAAK0G,MAClD3E,MAAK,SAACqF,GAGP,OAFArG,EAAOkC,MAAM,uCAAwCjD,EAAK6G,YAAYC,MAAQC,GAC9D,EAAKM,sCAAsCrH,EAAKoH,EAAkBZ,EAAYE,Q,wCAK5F,SAA2BM,EAAcM,EAAgBZ,GAC/D,IAAMa,EAAmF,GACnFC,EAA2CF,EDlCxCxH,QAAQ,UAAW,KC+C5B,OAZAyH,EAAS7E,KAAKyC,KAAKsC,WAAWT,EAAOQ,IACrCD,EAAS7E,KACPyC,KAAKuC,YAAYV,EAAOQ,GACxBrC,KAAKwC,cAAcX,EAAOQ,GAC1BrC,KAAKyC,eAAeZ,EAAOQ,GAC3BrC,KAAK0C,qBAAqBb,EAAOQ,GACjCrC,KAAK2C,iBAAiBd,EAAOQ,IAG/BrC,KAAK4C,cAAcf,EAAOQ,EAAYd,GAAcjE,SAAQ,SAACuF,GAC3DT,EAAS7E,KAAKsF,MAETpG,QAAQqG,IAAIV,K,2BAGb,SAAcP,EAAcQ,EAAoBd,GACtD,IAAMa,EAA6C,GAmBnD,OAlBAb,EAAapE,KAAI,SAAC4F,GAChB,IAAMtB,EAAQC,YAAYC,MACpBqB,EAAYnB,EAAMoB,OAAOZ,GAC/B,IAAKW,EACH,MAAM,IAAInC,EAAJ,UAA4BwB,EAA5B,4BAER,IAAMa,EAAOF,EAAUE,KAAKhD,EAAiB6C,IAC7C,IAAKG,EACH,MAAM,IAAIrC,EAAJ,UAA4BX,EAAiB6C,GAA7C,0BAER,IAAMI,EAAe7E,EAAaS,eAAemE,GACjDC,EAAavG,MAAK,SAACa,GACjB,IACM2F,EADQ1B,YAAYC,MACJF,EACtB7F,EAAOkC,MAAM,yDAA0DiF,EAAGK,EAAOf,EAAY5E,EAAMiC,IAAIjE,WAEzG2G,EAAS7E,KAAK4F,MAETf,I,yBAGD,SAAYP,EAAcQ,GAChC,IAAMW,EAAYnB,EAAMoB,OAAOZ,GAC/B,IAAKW,EACH,MAAM,IAAInC,EAAJ,UAA4BwB,EAA5B,4BAER,IAAMa,EAAOF,EAAUE,KAAKhD,GAC5B,IAAKgD,EACH,MAAM,IAAIrC,EAAJ,UAA4BX,EAA5B,0BAER,IAAMmD,EAAc/E,EAAaS,eAAemE,GAC1CzB,EAAQC,YAAYC,MAM1B,OALA0B,EAAYzG,MAAK,SAAC0G,GAChB,IACMF,EADQ1B,YAAYC,MACJF,EACtB7F,EAAOkC,MAAM,mDAAoDsF,EAAOf,EAAYiB,EAAK5D,IAAIjE,WAExF4H,I,2BAGD,SAAcxB,EAAcQ,GAClC,IAAMW,EAAYnB,EAAMoB,OAAOZ,GAC/B,IAAKW,EACH,MAAM,IAAInC,EAAJ,UAA4BwB,EAA5B,4BAER,IAAMa,EAAOF,EAAUE,KAAKhD,GAC5B,IAAKgD,EACH,MAAM,IAAIrC,EAAJ,UAA4BX,EAA5B,0BAER,IAAMqD,EAAgBjF,EAAaS,eAAemE,GAC5CzB,EAAQC,YAAYC,MAM1B,OALA4B,EAAc3G,MAAK,SAAC4G,GAClB,IACMJ,EADQ1B,YAAYC,MACJF,EACtB7F,EAAOkC,MAAM,qDAAsDsF,EAAOf,EAAYmB,EAAO9D,IAAIjE,WAE5F8H,I,4BAID,SAAe1B,EAAcQ,GACnC,IAAMW,EAAYnB,EAAMoB,OAAOZ,GAC/B,IAAKW,EACH,MAAM,IAAInC,EAAJ,UAA4BwB,EAA5B,4BAER,IAAMoB,EAAcT,EAAUE,KAAKhD,GACnC,GAAMuD,EAAa,CACjB,IAAMC,EAAiBpF,EAAaS,eAAe0E,GAC7ChC,EAAQC,YAAYC,MAM1B,OALA+B,EAAe9G,MAAK,SAAC+G,GACnB,IACMP,EADQ1B,YAAYC,MACJF,EACtB7F,EAAOkC,MAAM,uDAAwDsF,EAAOf,EAAYsB,EAAQC,eAE3FF,EAET,OAAOjH,QAAQC,aAAQxB,K,kCAIjB,SAAqB2G,EAAcQ,GACzC,IAAMW,EAAYnB,EAAMoB,OAAOZ,GAC/B,IAAKW,EACH,MAAM,IAAInC,EAAJ,UAA4BwB,EAA5B,4BAER,IAAMwB,EAAiBb,EAAUE,KAAKhD,GACtC,GAAM2D,EAAgB,CACpB,IAAMC,EAAoBxF,EAAauB,cAAcwC,EAAYwB,GAC3DpC,EAAQC,YAAYC,MAM1B,OALAmC,EAAkBlH,MAAK,SAACmH,GACtB,IACMX,EADQ1B,YAAYC,MACJF,EACtB7F,EAAOkC,MAAM,0DAA2DsF,EAAOf,EAAY0B,EAAOH,eAE7FE,EAET,OAAOrH,QAAQC,aAAQxB,K,8BAIjB,SAAiB2G,EAAcQ,GACrC,IAAM2B,EAAgBnC,EAAMoB,OAAOZ,GAAaa,KAAKhD,GACrD,GAAM8D,EAAe,CACnB,IAAMC,EAAmB3F,EAAauB,cAAcwC,EAAY2B,GAC1DvC,EAAQC,YAAYC,MAM1B,OALAsC,EAAiBrH,MAAK,SAACsH,GACrB,IACMd,EADQ1B,YAAYC,MACJF,EACtB7F,EAAOkC,MAAM,wDAAyDsF,EAAOf,EAAY6B,EAAUN,eAE9FK,EAET,OAAOxH,QAAQC,aAAQxB,K,wBAGjB,SAAW2G,EAAcQ,GAC/B,IAAM8B,EAAatC,EAAMoB,OAAOZ,GAAaa,KAAKhD,GAAiBjB,MAAM,eACnEwC,EAAQC,YAAYC,MAM1B,OALAwC,EAAWvH,MAAK,SAACwH,GACf,IACMhB,EADQ1B,YAAYC,MACJF,EACtB7F,EAAOkC,MAAM,oDAAqDsF,EAAOf,EAAY+B,EAAIR,eAEpFO,I,mDAGD,SACNtJ,EAEAoH,EACAZ,EACAgD,GAcA,OAZAzI,EAAOkC,MAAM,oCAAqCmE,EAAiBxG,QACzC,CACxB6I,SAAUrC,EAAiB,GAC3BsC,aAActC,EAAiB,GAC/BuB,OAAQvB,EAAiB,GACzBuC,QAASvC,EAAiB,GAC1BwC,gBAAiBxC,EAAiB,GAClCyC,iBAAkBzC,EAAiB,GACnC0C,SAAU1C,EAAiB2C,MAAM,EAAG,EAAIP,EAAe5I,QACvDZ,IAAAA,EACAwG,WAAAA,O,EA1MAF,GCDAvF,EAASC,EAAAA,GAAAA,cAA8BC,cAAcnD,EAAMoD,EAAS,iBAiEpE8I,EAAAA,WAAN,6BACU,KAAAC,UAAuB,IAAIC,EAAAA,G,oDAU5B,SACLlK,EACAwG,EACAC,EACA9G,GAA4B,WAE5B,OAAO,IAAIiC,SAAQ,SAACC,EAAS+B,GAC3B,EAAKuG,cAAcnK,EAAKwG,EAAY7G,GACjCoC,MAAK,SAAC4B,GACL9B,GAAQ,IAAIyE,GAAmB8D,MAAMpK,EAAK2D,EAAM6C,EAAYC,OAC3D4D,OAAM,SAACxH,GACR9B,EAAO+B,MAAMD,GACbe,EAAO,IAAIoC,EAAqBhG,Y,2BAKhC,SAAcA,EAAawG,EAA6B7G,GAA4B,IAGtF2K,EACAC,EAJsF,OACpF3D,EAAQC,YAAYC,MAKpB0D,EAAyBrE,EAAmBnG,GAC5CyK,EF9GmB,SAACzK,GAE5B,IAAM0K,EAAO1K,EAAIqC,MAAM,KAAKzB,OAAS,EAC/B+J,EAAa3K,EAAIqC,MAAM,KAAKzB,OAAS,EAE3C,OAAO8J,GAAQC,EEyGcC,CAAqB5K,GAE5CwK,GAGFF,EAAanF,KAAK0F,aAAa7K,EAAKL,GACpC4K,EAAiB,CACfhJ,QAAS,CACP,YAAa5B,EAAUtB,wBAO3BiM,EAHSG,EAGItF,KAAK2F,kBAAkB9K,EAAKL,GAI5BwF,KAAK4F,OAAO/K,EAAKwG,EAAY7G,GAG5C,IAAIqL,GAAoB,EAClBC,EAAe,SAAfA,IACJ,OAAOvJ,MAAM4I,EAAYC,GACtBxI,MAAK,SAACC,GACL,GAAIA,EAASC,GAAI,CACflB,EAAOkC,MAAM,gCAAiCjB,EAASsC,KACvD,IACMiE,EADQ1B,YAAYC,MACJF,EAEtB,OADA,EAAKsE,qBAAqBlL,EAAKuI,GACxBvG,EAAS2B,OAEhB5C,EAAO+B,MAAM,sCACXd,EAASsC,IAAKtC,EAASI,OAAQJ,EAASmJ,YAC1C,IACM5C,EADQ1B,YAAYC,MACJF,EAEtB,OADA,EAAKwE,qBAAqBpL,EAAKuI,GACvBvG,EAASI,QACf,KAAK,IACH,MAAM,IAAI6D,EAA8BjG,GAC1C,KAAK,IACH,MAAM,IAAIkG,EAAqBlG,GACjC,QACE,MAAM,IAAIgG,EAAqBhG,OAItCqK,OAAM,SAACgB,GAIN,GAHAtK,EAAO+B,MAAM,+BAAgCwH,EAAYe,GAGrDb,GAA0BQ,EAS5B,OARAA,GAAoB,EAEpBjK,EAAOkC,MAAM,uDACbqH,EAAa,EAAKgB,aAAatL,EAAK,MAAOL,GAG3C4K,EAAiB,GAEVU,IAGP,GAAII,EAAOzF,aACT,MAAMyF,EAER,MAAM,IAAIrF,EAAqBsE,OAKvC,OAAO,IAAI1I,SAAc,SAACC,EAAS+B,GACjCqH,IACGlJ,MAAK,SAAC4B,GACCA,GACJ9B,EAAQ8B,GAEVC,EAAO,IAAIoC,EAAJ,UAA4BhG,EAA5B,6BAERqK,OAAM,SAACgB,GACNtK,EAAO+B,MAAM,+BAAgCwH,EAAYe,GACzDzH,EAAOyH,W,oBAKP,SAAOrL,EAAawG,EAA6B7G,GACvD,MAAO,GAAP,OAAUA,EAAU1B,QAApB,YAA+BuI,EAA/B,YAA6CxG,EAA7C,U,0BAGM,SAAaA,EAAawG,EAA6B7G,GAC7D,MAAO,GAAP,OAAUA,EAAU1B,QAApB,YAA+BuI,EAA/B,YAA6CxG,EAA7C,U,0BAGM,SAAauL,EAAa5L,GAChC,MAAO,GAAP,OAAUA,EAAUvB,uBAApB,OAA4CuB,EAAUrB,iCAAtD,OAAwFiN,K,+BAGlF,SAAkBvL,EAAaL,GACrC,IAAM6L,EF1MkB,SAACxL,GAE3B,OAAOA,EAAIqC,MAAM,KAAK,GEwMHoJ,CAAoBzL,GACrC,MAAO,GAAP,OAAUL,EAAU1B,QAApB,YAA+BuN,EAA/B,YAA2CxL,EAA3C,U,kCAGM,SAAqBA,EAAauI,GACxCpD,KAAK8E,UAAUyB,mBACb,CACEC,WAAYnI,EAAmBoI,WAAapI,EAAmBqI,6BAC/DV,WAAYnL,GACX,CACD2L,WAAYnI,EAAmBoI,WAAapI,EAAmBsI,8BAC/DX,WAAY5C,EAAMwD,e,kCAKhB,SAAqB/L,EAAauI,GACxCpD,KAAK8E,UAAUyB,mBACb,CACEC,WAAYnI,EAAmBwI,WAAaxI,EAAmByI,6BAC/Dd,WAAYnL,GACX,CACD2L,WAAYnI,EAAmBwI,WAAaxI,EAAmB0I,8BAC/Df,WAAY5C,EAAMwD,gB,0BA1JjB,WAIL,OAHK5G,KAAKgH,WACRhH,KAAKgH,SAAW,IAAInC,GAEf7E,KAAKgH,a,EARVnC,GC7DAjJ,GAASC,EAAAA,GAAAA,cAA8BC,cAAcnD,EAAMoD,EAAS,qBAGpEkL,GAAW,SAACzM,EAA8BK,GAC9C,MAAO,CACLqM,UAAW,GAAF,OAAK1M,EAAUzB,SAAf,YAA2B8B,EAA3B,kBAAwCA,EAAxC,oBACTsM,aAAc,GAAF,OAAK3M,EAAUzB,SAAf,YAA2B8B,EAA3B,kBAAwCA,EAAxC,yBAIVuM,GAAAA,WAAN,6BAEU,KAAAtC,UAAuB,IAAIC,EAAAA,G,kDAE5B,SAAoBsC,GASzB,IAAM7M,EAAYN,EAAqBmN,EAAQC,oBACzCC,EAAU,GAAH,OAAM/M,EAAUzB,SAAhB,YAA4BsO,EAAQxM,KAApC,OAA0CL,EAAUxB,aAEjE,OAAOuD,MAAMgL,GAAS3K,MAAK,SAACC,GAC1B,OAAIA,EAASC,GACJD,EAASE,OAETN,QAAQgC,OAAO,IAAIoC,EAAJ,UAA4BwG,EAAQxM,IAApC,cAA6CgC,EAASI,aAE7EL,MAAK,SAACG,GACP,IAAMyK,EAAYzK,EAAKsK,EAAQxM,KAI/B,IAAK2M,EAAUC,OAASD,EAAUE,KAChC,OAAOjL,QAAQgC,OAAO,IAAIoC,EAAJ,UAA4BwG,EAAQxM,IAApC,gCAGxB,IAAM2C,GAAM,gBACV3C,IAAKwM,EAAQxM,IACb8M,YAAa,GACbC,YAAaJ,EAAUI,YACvBC,QAASL,EAAUK,QACnBC,MAAON,EAAUM,SACXN,EAAUO,QAAUV,EAAQW,kBAAoB,CAAED,KAAMP,EAAUO,OAN9D,IAOVE,sBAAuBT,EAAUS,wBAOnC,OAJMT,EAAUU,OAAQ1K,EAAOmK,YAAYQ,MAAnB,UAA+BX,EAAUU,OAC3DV,EAAUC,OAAQjK,EAAOmK,YAAYS,MAAnB,UAA+BZ,EAAUC,OAC3DD,EAAUE,OAAQlK,EAAOmK,YAAYU,MAAnB,UAA+Bb,EAAUE,OAE1DlK,O,mCAKH,SAAsB6J,G,YAKtB7M,EAAYN,EAAqBmN,EAAQC,oBAEzCgB,EAAejI,EAAcgH,EAAQxM,KAAK0N,UAC1CZ,EAA2B,GAsBjC,OApBqB,IAAjBW,EAEFX,EAAYS,KAAO,CACjBb,QAAS,GAAF,OAAK/M,EAAUzB,SAAf,YAA2BsO,EAAQxM,IAAnC,kBAAgDwM,EAAQxM,IAAxD,iBAAoEwM,EAAQxM,IAA5E,SACP2N,SAAU,GAAF,OAAKhO,EAAUzB,SAAf,YAA2BsO,EAAQxM,IAAnC,kBAAgDwM,EAAQxM,IAAxD,iBAAoEwM,EAAQxM,IAA5E,cAGV8M,EAAYS,KAAO,CACjBb,QAAS,GAAF,OAAK/M,EAAUzB,SAAf,YAA2BsO,EAAQxM,IAAnC,kBAAgDwM,EAAQxM,IAAxD,iBAAoEwM,EAAQxM,IAA5E,SACP2N,SAAU,GAAF,OAAKhO,EAAUzB,SAAf,YAA2BsO,EAAQxM,IAAnC,kBAAgDwM,EAAQxM,IAAxD,iBAAoEwM,EAAQxM,IAA5E,aAGNyN,GAAgB,IAClBX,EAAYU,KAAO,CACjBd,QAAS,GAAF,OAAK/M,EAAUzB,SAAf,YAA2BsO,EAAQxM,IAAnC,kBAAgDwM,EAAQxM,IAAxD,iBAAoEwM,EAAQxM,IAA5E,SACP2N,SAAU,GAAF,OAAKhO,EAAUzB,SAAf,YAA2BsO,EAAQxM,IAAnC,kBAAgDwM,EAAQxM,IAAxD,iBAAoEwM,EAAQxM,IAA5E,eAKP,CACLA,IAAKwM,EAAQxM,IACb8M,YAAaA,EACbC,aAA0C,QAA1B,EAAAvH,EAAcgH,EAAQxM,YAAI4N,IAAAA,OAAA,EAAAA,EAAEC,cAAgBrI,EAAcgH,EAAQxM,KAAK6N,aAAetI,EACtGyH,SAAsC,QAA1B,EAAAxH,EAAcgH,EAAQxM,YAAI8N,IAAAA,OAAA,EAAAA,EAAEd,SAAWxH,EAAcgH,EAAQxM,KAAKgN,QAAUzH,EACxF0H,OAAoC,QAA1B,EAAAzH,EAAcgH,EAAQxM,YAAI+N,IAAAA,OAAA,EAAAA,EAAEd,OAASzH,EAAcgH,EAAQxM,KAAKiN,MAAQ1H,EAClF2H,MAAkC,QAA1B,EAAA1H,EAAcgH,EAAQxM,YAAIgO,IAAAA,OAAA,EAAAA,EAAEd,YACL7M,IAA7BmM,EAAQW,kBACRX,EAAQW,iBACRf,GAASzM,EAAW6M,EAAQxM,UAAOK,K,6BAIlC,SAAgBmM,GASrB,IAAM7M,EAAYN,EAAqBmN,EAAQC,oBAE/C,OAAItH,KAAK8I,kBAAkBzB,EAAQxM,IAAKL,GAC/BwF,KAAK+I,sBACV1B,EAAQxM,IACRwM,EAAQhG,WACRgG,EAAQ/F,gBACP+F,EAAQ7C,UACR6C,EAAQ2B,oBACR3B,EAAQ3C,iBACTlK,GAGKwF,KAAKiJ,yBACV5B,EAAQxM,IACRwM,EAAQhG,WACRgG,EAAQ/F,gBACP+F,EAAQ7C,UACR6C,EAAQ2B,oBACR3B,EAAQ3C,iBACTlK,K,+BAKE,SAAkBK,EAAaL,GACrC,OAAOwG,EAAmBnG,IAAgC,WAAxBL,EAAUpB,Y,mCAGtC,SACNyB,GAM4B,IAL5BwG,EAK4B,uDALE,MAC9BC,EAI4B,uCAH5BkD,EAG4B,uCAF5BwE,EAE4B,uCAD5BtE,EAC4B,uCAA5BlK,EAA4B,uCAItB0O,EAAa,GAAH,OAAM1O,EAAU1B,QAAhB,YAA2BuI,EAA3B,YAAyCxG,EAAzC,YAAgDqF,GAC1DiJ,EAAgB,GAAH,OAAM3O,EAAU1B,QAAhB,YAA2BuI,EAA3B,YAAyCxG,EAAzC,YAAgDqF,GAC7DkJ,EAAsB,GAAH,OAAM5O,EAAU1B,QAAhB,YAA2BuI,EAA3B,YAAyCxG,EAAzC,YAAgDqF,GACnEmJ,EAAY,CAAC,cAAe,eAAgB,cAAe,eAAgB,UAAW,WAEtFC,EAASD,EAAU5O,SAASD,EAAU7B,MAG5C,OAAO8D,QAAQqG,IAAI,CACjB+B,EAAc0E,cAAcR,sBAAsBlO,EAAKwG,EAAYC,EAAe9G,GACjFgK,IAAY8E,EAAUtJ,KAAKwJ,iBAAiBN,GAAczM,QAAQC,QAAQ,IAAI+M,MAC9ET,IAAsBM,EAAUtJ,KAAKwJ,iBAAiBL,GAAiB1M,QAAQC,QAAQ,IAAI+M,MAC3F/E,IAAqB4E,EAAUtJ,KAAKwJ,iBAAiBJ,GAAuB3M,QAAQC,QAAQ,IAAI+M,QAChG7M,MAAK,SAAC8M,GAEP,OAAOjN,QAAQqG,IAAI,CACjBrG,QAAQC,QAAQgN,EAAU,IACzBA,EAAU,GAAGC,KAAO,EAAKrL,EAAaY,SAASwK,EAAU,SAAMxO,EAC/DwO,EAAU,GAAGC,KAAO,EAAKrL,EAAayB,aAAalF,EAAK6O,EAAU,SAAMxO,EACxEwO,EAAU,GAAGC,KAAO,EAAKrL,EAAayB,aAAalF,EAAK6O,EAAU,SAAMxO,OAE1E0B,MAAK,SAACgN,GAIP,IAAMC,EAAeD,EAAkB,GAUvC,OARAC,EAAapF,gBAAkBuE,EAAoBa,EAAapF,qBAAkBvJ,EAClF2O,EAAanF,iBAAmBA,EAAmBmF,EAAanF,sBAAmBxJ,EAE9EoO,IACHO,EAAarF,QAAUoF,EAAkB,GACzCC,EAAapF,gBAAkBmF,EAAkB,GACjDC,EAAanF,iBAAmBkF,EAAkB,IAE7CnN,QAAQC,QAAQmN,Q,sCAInB,SACNhP,EACAwG,EACAC,EACAkD,EACAwE,EACAtE,EACAlK,GAA4B,WAKtBsP,EAAS,GAAH,OAAMtP,EAAU1B,QAAhB,YAA2BuI,EAA3B,YAAyCxG,EAAzC,YAAgDqF,GACtD6J,EAAkB,GAAH,OAAMvP,EAAU1B,QAAhB,YAA2BuI,EAA3B,YAAyCxG,EAAzC,YAAgDqF,GAC/D8J,EAAY,GAAH,OAAMxP,EAAU1B,QAAhB,YAA2BuI,EAA3B,YAAyCxG,EAAzC,YAAgDqF,GACzDgJ,EAAa,GAAH,OAAM1O,EAAU1B,QAAhB,YAA2BuI,EAA3B,YAAyCxG,EAAzC,YAAgDqF,GAC1DiJ,EAAgB,GAAH,OAAM3O,EAAU1B,QAAhB,YAA2BuI,EAA3B,YAAyCxG,EAAzC,YAAgDqF,GAC7DkJ,EAAsB,GAAH,OAAM5O,EAAU1B,QAAhB,YAA2BuI,EAA3B,YAAyCxG,EAAzC,YAAgDqF,GAInE+J,QAFoC/O,IAAlBoG,EACtB,CAACA,GAAiB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,KAChCnE,KAAI,SAAC+M,GACtC,MAAO,GAAP,OAAU1P,EAAU1B,QAApB,YAA+BuI,EAA/B,YAA6CxG,EAA7C,YAAoDqF,EAAiBgK,OAGjEzI,EAAQC,YAAYC,MAE1B,OAAOlF,QAAQqG,IAAR,CACL9C,KAAKwJ,iBAAiBM,GACtB9J,KAAKwJ,iBAAiBO,GACtB/J,KAAKwJ,iBAAiBQ,GACrBxF,EAAWxE,KAAKwJ,iBAAiBN,GAAczM,QAAQC,QAAQ,IAAI+M,MACnET,EAAqBhJ,KAAKwJ,iBAAiBL,GAAiB1M,QAAQC,QAAQ,IAAI+M,MAChF/E,EAAoB1E,KAAKwJ,iBAAiBJ,GAAuB3M,QAAQC,QAAQ,IAAI+M,OANjF,eAOFQ,EAAY9M,KAAI,SAACgC,GAAD,OAAS,EAAKqK,iBAAiBrK,SACjDvC,MAAK,SAAC8M,GACP,OAAOjN,QAAQqG,IAAI,CACjBxE,EAAaC,eAAemL,EAAU,IACtCpL,EAAaY,SAASwK,EAAU,IAChCpL,EAAaY,SAASwK,EAAU,IAC/BA,EAAU,GAAGC,KAAO,EAAKrL,EAAaY,SAASwK,EAAU,SAAMxO,EAC/DwO,EAAU,GAAGC,KAAO,EAAKrL,EAAayB,aAAalF,EAAK6O,EAAU,SAAMxO,EACxEwO,EAAU,GAAGC,KAAO,EAAKrL,EAAayB,aAAalF,EAAK6O,EAAU,SAAMxO,EACzEuB,QAAQqG,IAAI4G,EAAU9E,MAAM,EAAG8E,EAAUjO,QAAQ0B,KAAI,SAACgN,GACpD,OAAO7L,EAAaY,SAASiL,YAGhCvN,MAAK,SAACwN,GAEP,OADA,EAAKrE,qBAAqBlL,EAAK6G,YAAYC,MAAQF,GAC5C,CACL5G,IAAKA,EACLyJ,SAAU8F,EAAgB,GAC1B7F,aAAc6F,EAAgB,GAC9B5G,OAAQ4G,EAAgB,GACxB5F,QAAS4F,EAAgB,GACzB3F,gBAAiB2F,EAAgB,GACjC1F,iBAAkB0F,EAAgB,GAClCzF,SAAUyF,EAAgB,GAC1B/I,WAAYA,MAEb6D,OAAM,SAACxH,GAGR,OAFA,EAAKuI,qBAAqBpL,EAAK6G,YAAYC,MAAQF,GACnD7F,GAAO+B,MAAMD,GACNjB,QAAQgC,OAAOf,Q,gCAKlB,SACN7C,EACAwG,EACAC,EACAkD,EACAhK,GAIA,IAAMsP,EAAS,GAAH,OAAMtP,EAAU1B,QAAhB,YAA2BuI,EAA3B,YAAyCxG,EAAzC,YAAgDqF,GACtD6J,EAAkB,GAAH,OAAMvP,EAAU1B,QAAhB,YAA2BuI,EAA3B,YAAyCxG,EAAzC,YAAgDqF,GAC/D8J,EAAY,GAAH,OAAMxP,EAAU1B,QAAhB,YAA2BuI,EAA3B,YAAyCxG,EAAzC,YAAgDqF,GACzDgJ,EAAc1E,EAAD,UAAehK,EAAU1B,QAAzB,YAAoCuI,EAApC,YAAkDxG,EAAlD,YAAyDqF,GAAuB,GAI7F+J,QAFoC/O,IAAlBoG,EACtB,CAACA,GAAiB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,KAChCnE,KAAI,SAAC+M,GACtC,MAAO,GAAP,OAAU1P,EAAU1B,QAApB,YAA+BuI,EAA/B,YAA6CxG,EAA7C,YAAoDqF,EAAiBgK,OAGvE,MAAO,CACLJ,EACAC,EACAC,EACAd,GAJF,eAKKe,M,8BAIC,SAAiBI,GACvB,OAAO9N,MAAM8N,GACZzN,MAAK,SAACC,GACL,GAAIA,EAASC,GACX,OAAOD,EAAS2B,OAIhB,OAFA5C,GAAO+B,MAAM,+BACXd,EAASsC,IAAKtC,EAASI,OAAQJ,EAASmJ,YAClCnJ,EAASI,QACf,KAAK,IACH,OAAOR,QAAQgC,OAAO,IAAIqC,EAA8BuJ,IAC1D,KAAK,IACH,OAAO5N,QAAQgC,OAAO,IAAIsC,EAAqBsJ,IACjD,QACE,OAAO5N,QAAQgC,OAAO,IAAIoC,EAAqBwJ,QAGpDnF,OAAM,SAACxH,GAER,OADA9B,GAAO+B,MAAMD,GACNjB,QAAQgC,OAAO,IAAIoC,EAAqBwJ,S,kCA2B3C,SAAqBxP,EAAauI,GACxCpD,KAAK8E,UAAUyB,mBACb,CACEC,WAAYnI,EAAmBoI,WAAapI,EAAmBqI,6BAC/DV,WAAYnL,GACX,CACD2L,WAAYnI,EAAmBoI,WAAapI,EAAmBsI,8BAC/DX,WAAY5C,EAAMwD,e,kCAKhB,SAAqB/L,EAAauI,GACxCpD,KAAK8E,UAAUyB,mBACb,CACEC,WAAYnI,EAAmBwI,WAAaxI,EAAmByI,6BAC/Dd,WAAYnL,GACX,CACD2L,WAAYnI,EAAmBwI,WAAaxI,EAAmB0I,8BAC/Df,WAAY5C,EAAMwD,iB,EAvVpBQ,I,kBCoBNkD,EAAOC,QA5BS,SAASC,EAAWC,EAAQC,EAAGC,EAAGC,EAAGC,EAAGnN,EAAGoN,GAOzD,IAAKN,EAAW,CACd,IAAI7M,EACJ,QAAezC,IAAXuP,EACF9M,EAAQ,IAAIX,MACV,qIAGG,CACL,IAAI+N,EAAO,CAACL,EAAGC,EAAGC,EAAGC,EAAGnN,EAAGoN,GACvBE,EAAW,GACfrN,EAAQ,IAAIX,MACVyN,EAAO9P,QAAQ,OAAO,WAAa,OAAOoQ,EAAKC,UAE3CrS,KAAO,sBAIf,MADAgF,EAAMsN,YAAc,EACdtN,K,kGC5CV,WAA0BuN,GACxB,OAAiB,OAAVA,GCGM,SAASC,EAAa5K,EAAM6K,EAAgBC,QAClC,IAAnBD,IACFA,EAAiBE,EAAAA,GAGnBC,GAAAA,EAAUC,EAAAA,EAAAA,GAAWJ,IAAmBK,EAAOL,GAAiB,+DAChE,IAAIM,EAAsBD,EAAOL,IAAmBA,IAAmBE,EAAAA,EAAWA,EAAAA,EAAW,SAAUK,GACrG,IAAK,IAAIC,EAAOC,UAAUpQ,OAAQsP,EAAO,IAAIe,MAAMF,EAAO,EAAIA,EAAO,EAAI,GAAIG,EAAO,EAAGA,EAAOH,EAAMG,IAClGhB,EAAKgB,EAAO,GAAKF,UAAUE,GAG7B,OAAOJ,aAAgB3O,MAAQ2O,EAAOP,EAAeY,WAAM,EAAQ,CAACL,GAAMM,OAAOlB,KAE/EmB,GAAUV,EAAAA,EAAAA,GAAWH,GACrBc,EAAa5L,EAAKqG,WAElBwF,EAAgB,WAClB,IAAIC,EAAUX,EAAoBM,WAAM,EAAQH,WAC5CS,EAAS,CACX/L,KAAMA,GAeR,OAZI8L,aAAmBrP,QACrBsP,EAAO3O,OAAQ,QAGDzC,IAAZmR,IACFC,EAAOD,QAAUA,GAGfH,IACFI,EAAOC,KAAOlB,EAAYW,WAAM,EAAQH,YAGnCS,GAOT,OAJAF,EAAcxF,SAAW,WACvB,OAAOuF,GAGFC,I,sDC7CT,iBACE,IAAK,IAAIR,EAAOC,UAAUpQ,OAAQsP,EAAOe,MAAMF,GAAOG,EAAO,EAAGA,EAAOH,EAAMG,IAC3EhB,EAAKgB,GAAQF,UAAUE,GAGzB,IAAIS,EAAgD,oBAA1BzB,EAAKA,EAAKtP,OAAS,IAAqBsP,EAAK0B,MACnEC,EAAW3B,EAEf,GAA4B,qBAAjByB,EACT,MAAM,IAAIG,UAAU,sIAGtB,OAAO,SAAUC,EAAW1B,GAC1B,IAAK,IAAI2B,EAAQhB,UAAUpQ,OAAQsP,EAAOe,MAAMe,EAAQ,EAAIA,EAAQ,EAAI,GAAIC,EAAQ,EAAGA,EAAQD,EAAOC,IACpG/B,EAAK+B,EAAQ,GAAKjB,UAAUiB,GAG9B,IAAIC,EAA4C,qBAAdH,EAC9BI,EAAoC,qBAAV9B,EAE9B,OAAI6B,GAAwBC,GAAoBR,EACvCA,EAGFE,EAASzO,QAAO,SAAUgP,EAAUC,GACzC,OAAOA,EAAQlB,WAAM9Q,EAAW,CAAC+R,EAAU/B,GAAOe,OAAOlB,MACxDgC,IAAyBC,GAAoBR,EAAeA,EAAeI,K,oBC1BlF,WAA0B1B,GACxB,GAAqB,kBAAVA,GAAgC,OAAVA,EAAgB,OAAO,EAGxD,IAFA,IAAIiC,EAAQjC,EAE4B,OAAjCxK,OAAO0M,eAAeD,IAC3BA,EAAQzM,OAAO0M,eAAeD,GAGhC,OAAOzM,OAAO0M,eAAelC,KAAWiC,GCR1C,WAA0BjC,GACxB,MAAsB,qBAARmC,KAAuBnC,aAAiBmC,KCAzC,SAASC,EAAQC,GAC9B,GAAIC,EAAMD,GAQR,OAAOzB,MAAM2B,KAAKF,EAAOG,QAG3B,GAAuB,qBAAZC,SAAsD,oBAApBA,QAAQL,QACnD,OAAOK,QAAQL,QAAQC,GAGzB,IAAIG,EAAOhN,OAAOkN,oBAAoBL,GAMtC,MAJ4C,oBAAjC7M,OAAOmN,wBAChBH,EAAOA,EAAKzB,OAAOvL,OAAOmN,sBAAsBN,KAG3CG,ECvBF,IACII,EAAwB,KCApB,SAASC,EAAIrT,EAAKwP,GAC/B,OAAOsD,EAAMtD,GAAKA,EAAE6D,IAAIrT,GAAOwP,EAAExP,GCCnC,IAA0BsT,ECC1B,GDD0BA,ECCK,SAAUC,GACvC,OAAQC,EAAcD,IAAST,EAAMS,MCJxB,SAA+BE,GAC5C,IAAIT,EAAOJ,EAAQa,GACfC,EAAwBV,EAAKW,OAAM,SAAUC,GAC/C,MAAkB,SAAXA,GAAgC,UAAXA,KAE9B,OAAOZ,EAAKjS,QAAUiS,EAAKjS,QAAU,GAAK2S,EDDMG,CAAsBN,IDD/D,SAASO,EAAQrR,EAAKsR,EAAOC,EAAgBC,GAClD,IAAIC,OAAiB,IAAVH,EAAmB,GAAKA,EAC/BI,EAAiBD,EAAKE,UACtBA,OAA+B,IAAnBD,EFPW,IEOqCA,EAC5DE,EAASH,EAAKG,OA4ClB,YA1CuB,IAAnBL,IACFA,EAAiB,SAGW,IAA1BC,IACFA,EAAwB,IAwB1BrB,EAAQnQ,GAAKG,SAAQ,SAAUiD,GAC7B,IAAIyO,EATN,SAAuBzO,GACrB,OAAIoO,IAA0BI,GAAUA,GAAU,IAAIE,OAAO,IAAMF,EAASD,GAAWI,KAAK3O,GACnFA,EAGF,GAAKwO,EAASD,EAAYvO,EAIb4O,CAtBtB,SAA0B5O,GACxB,IAAI6O,EAEJ,IAAKT,EAAuB,OAAOpO,EACnC,IAAI8O,EAAQ9O,EAAKqG,WAAW1J,MAAM4Q,GAC9BwB,EAAWX,EAAsBzR,MAAM4Q,GAC3C,OAAQsB,EAAQ,IAAInD,OAAOD,MAAMoD,EAAOE,EAASnS,KAAI,SAAUoS,GAC7D,OAAOF,EAAMlS,KAAI,SAAUqS,GACzB,MAAO,GAAKD,EAAIT,EAAYU,SAE5BC,KAAK3B,GAYyB4B,CAAiBnP,IAC/CoP,EAAW5B,EAAIxN,EAAMpD,GAErB6Q,EAAU2B,GACZnB,EAAQmB,EAAU,CAChBb,UAAWA,EACXC,OAAQA,GACPL,EAAgBM,GAEnBN,EAAeM,GAAiBW,KAG7BjB,I,qBGpDX,WAA0BxD,GACxB,OAAOA,EAAMtE,YCOA,SAASgJ,EAAcC,EAAUC,EAAczI,QAC5C,IAAZA,IACFA,EAAU,IAGZkE,GAAAA,CAAU2C,EAAc2B,IAAarC,EAAMqC,GAAW,2CACtD,IAAIE,EAAsBC,EAAkBH,EAAUxI,GAClDqF,EAAWY,EAAQyC,GAAqB5S,KAAI,SAAUoD,GACxD,OCRW,SAAsBA,EAAM2M,EAAS4C,QAClC,IAAZ5C,IACFA,EAAU5B,EAAAA,GAGZ,IAAI+D,EAAQzI,EAASrG,GAAMrD,MAAM4Q,GACjCvC,GAAAA,QCbiBrQ,IDaM4U,GAAe,qCAAuCT,EAAMI,KAAK,MAAQ,sBAChGlE,GAAAA,EAAUC,EAAAA,EAAAA,GAAW0B,IAAYgB,EAAchB,GAAU,4EAEzD,IAAI0B,GAAOpD,EAAAA,EAAAA,GAAW0B,GAAW,CAACA,EAASA,GAAW,CAACA,EAAQ+C,KAAM/C,EAAQgD,OAAO/S,KAAI,SAAUgT,GAChG,OEjBe,QADOjF,EFkBTiF,SEjBoBjV,IAAVgQ,EFiBEI,EAAAA,EAAW6E,EElBxC,IAA0BjF,KFoBpBkF,EAAcxB,EAAK,GACnByB,EAAezB,EAAK,GAExB,OAAO,SAAU0B,EAAOhE,QACR,IAAVgE,IACFA,EAAQR,GAGV,IAAIS,EAAajE,EAAO/L,KAExB,OAAKgQ,IAAuD,IAAzClB,EAAMmB,QAAQ5J,EAAS2J,MAIjB,IAAjBjE,EAAO3O,MAAiB0S,EAAeD,GAAaE,EAAOhE,GAH1DgE,GDfFG,CAAalQ,EAAMwN,EAAIxN,EAAMwP,GAAsBD,MAExD5C,EAAUwD,EAAAA,WAAqB,EAAQhE,EAAST,OAAO,CAAC6D,KAC5D,OAAO,SAAUQ,EAAOhE,GAKtB,YAJc,IAAVgE,IACFA,EAAQR,GAGH5C,EAAQoD,EAAOhE,M,mBIxB1B,aAA0BpB,GACxB,OAAOA,I,oBCDT,aAA0BA,GACxB,MAAwB,oBAAVA","sources":["../node_modules/@luxottica/vm-glasses/src/constants/Environment.ts","../node_modules/@luxottica/vm-glasses/src/config/GlassesApiConfig.ts","../node_modules/@luxottica/vm-glasses/src/config/CatalogueApiConfig.ts","../node_modules/@luxottica/vm-glasses/src/helpers/UpcAvailabilityResponse/NotAvailable.ts","../node_modules/@luxottica/vm-glasses/src/helpers/UpcAvailabilityResponse/Standard.ts","../node_modules/@luxottica/vm-glasses/src/CatalogService.ts","../node_modules/@luxottica/vm-glasses/src/helpers/UpcAvailabilityResponse/QATool.ts","../node_modules/@luxottica/vm-glasses/src/Catalog.ts","../node_modules/@luxottica/vm-glasses/src/AssetDecoder.ts","../node_modules/@luxottica/vm-glasses/src/remotelog/AppViewSessionKeys.ts","../node_modules/@luxottica/vm-glasses/src/constants/AssetNames.ts","../node_modules/@luxottica/vm-glasses/src/constants/GltfDefault.ts","../node_modules/@luxottica/vm-glasses/src/constants/MockAssetData.ts","../node_modules/@luxottica/vm-glasses/src/error/GenericError.ts","../node_modules/@luxottica/vm-glasses/src/error/GlassesDownloadError.ts","../node_modules/@luxottica/vm-glasses/src/error/GlassesDownloadForbiddenError.ts","../node_modules/@luxottica/vm-glasses/src/error/GlassesNotFoundError.ts","../node_modules/@luxottica/vm-glasses/src/helpers/AssetHelper.ts","../node_modules/@luxottica/vm-glasses/src/GlassesExtractor.ts","../node_modules/@luxottica/vm-glasses/src/ZipDownloader.ts","../node_modules/@luxottica/vm-glasses/src/GlassesDownloader.ts","../node_modules/invariant/browser.js","../node_modules/redux-actions/es/utils/isNull.js","../node_modules/redux-actions/es/createAction.js","../node_modules/reduce-reducers/es/index.js","../node_modules/redux-actions/es/utils/isPlainObject.js","../node_modules/redux-actions/es/utils/isMap.js","../node_modules/redux-actions/es/utils/ownKeys.js","../node_modules/redux-actions/es/constants.js","../node_modules/redux-actions/es/utils/get.js","../node_modules/redux-actions/es/utils/flattenWhenNode.js","../node_modules/redux-actions/es/utils/flattenReducerMap.js","../node_modules/redux-actions/es/utils/hasGeneratorInterface.js","../node_modules/redux-actions/es/utils/toString.js","../node_modules/redux-actions/es/handleActions.js","../node_modules/redux-actions/es/handleAction.js","../node_modules/redux-actions/es/utils/isUndefined.js","../node_modules/redux-actions/es/utils/isNil.js","../node_modules/redux-actions/es/utils/identity.js","../node_modules/redux-actions/es/utils/isFunction.js"],"sourcesContent":["enum GlassesEnvironment {\n PROD = 'PROD',\n PROD_LEGACY = 'PROD_LEGACY',\n TEST = 'TEST',\n TEST_LEGACY = 'TEST_LEGACY',\n TEST_TRANSITIONS = 'TEST_TRANSITIONS',\n QA_GLTF_PROD = 'QA_GLTF_PROD',\n QA_GLTF_TEST = 'QA_GLTF_TEST',\n QA_B3D_PROD = 'QA_B3D_PROD',\n QA_B3D_TEST = 'QA_B3D_TEST',\n MOCK = 'MOCK',\n // environments for distributor developments\n DISTRIBUTOR_VALIDATION_STAGING = 'DISTRIBUTOR_VALIDATION_STAGING',\n DISTRIBUTOR_APPROVATION_STAGING = 'DISTRIBUTOR_APPROVATION_STAGING',\n DISTRIBUTOR_VALIDATION_PRODUCTION = 'DISTRIBUTOR_VALIDATION_PRODUCTION',\n DISTRIBUTOR_APPROVATION_PRODUCTION = 'DISTRIBUTOR_APPROVATION_PRODUCTION',\n}\n\nexport {\n GlassesEnvironment\n};\n","import { GlassesEnvironment } from '../constants/Environment';\n\ninterface EnvironmentConfig {\n name: string;\n catalogHost: string;\n transitionsEndpoint: string;\n b3dHost: string;\n gltfHost: string;\n gltfPointer: string;\n customDistributorHost: string;\n customDistributorGetPermutation: string;\n customDistributorKey: string;\n assetType: 'ZIPPED' | 'SEPARATE';\n}\n\nconst hosts: {\n [key in GlassesEnvironment]: EnvironmentConfig;\n} = {\n MOCK: {\n name: 'PROD',\n catalogHost: 'https://vmcore-test.luxottica.com/static/',\n transitionsEndpoint: 'https://vmcore-test.luxottica.com/static/api/transition/v3/vocabulary',\n b3dHost: 'https://vmcore-test.luxottica.com/static/',\n gltfHost: 'https://vmcore-test.luxottica.com/static/api/upc/v1',\n gltfPointer: '/pointers/gltf',\n customDistributorHost: 'https://distributor-distributor.luxdeepblue.com',\n customDistributorKey: 'HnqGNWeO.Px2v1cUrm3ffk6gC0OOdTgJRoaOfxClC',\n customDistributorGetPermutation: '/api/getPermutation?token=',\n assetType: 'SEPARATE'\n },\n PROD: {\n name: 'PROD',\n catalogHost: 'https://vmcore.luxottica.com',\n transitionsEndpoint: 'https://vmcore.luxottica.com/api/transition/v3/vocabulary',\n b3dHost: 'https://vmcore.luxottica.com',\n gltfHost: 'https://vmcore.luxottica.com/api/upc/v1',\n gltfPointer: '/pointers/gltf',\n customDistributorHost: 'https://distributor-distributor.luxdeepblue.com',\n customDistributorKey: 'HnqGNWeO.Px2v1cUrm3ffk6gC0OOdTgJRoaOfxClC',\n customDistributorGetPermutation: '/api/getPermutation?token=',\n assetType: 'SEPARATE'\n },\n PROD_LEGACY: {\n name: 'PROD_LEGACY',\n catalogHost: 'https://vmcore.luxottica.com',\n transitionsEndpoint: 'https://vmcore.luxottica.com/api/transition/v3/vocabulary',\n b3dHost: 'https://vto-3d-assets.luxdeepblue.com',\n gltfHost: 'https://vmcore.luxottica.com/api/upc/v1',\n gltfPointer: '/pointers/gltf',\n customDistributorHost: 'https://distributor-distributor.luxdeepblue.com',\n customDistributorKey: 'HnqGNWeO.Px2v1cUrm3ffk6gC0OOdTgJRoaOfxClC',\n customDistributorGetPermutation: '/api/getPermutation?token=',\n assetType: 'ZIPPED'\n },\n TEST: {\n name: 'TEST',\n catalogHost: 'https://vmcore-test.luxottica.com',\n transitionsEndpoint: 'https://vmcore-test.luxottica.com/api/transition/v3/vocabulary',\n b3dHost: 'https://vmcore-test.luxottica.com',\n gltfHost: 'https://vmcore-test.luxottica.com/api/upc/v1',\n gltfPointer: '/pointers/gltf',\n customDistributorHost: 'https://staging-distributor-distributor.luxdeepblue.com',\n customDistributorKey: 'bMhq6JPO.nLtuIsJU61lazsX3pnj10iH0wv2Dr7KA',\n customDistributorGetPermutation: '/api/getPermutation?token=',\n assetType: 'ZIPPED'\n },\n TEST_LEGACY: {\n name: 'TEST_LEGACY',\n catalogHost: 'https://test-api-vtocatalogue.luxdeepblue.com',\n transitionsEndpoint: 'https://vmcore-test.luxottica.com/api/transition/v3/vocabulary',\n b3dHost: 'https://vto-3d-assets-test.luxdeepblue.com',\n gltfHost: 'https://vmcore-test.luxottica.com/api/upc/v1',\n gltfPointer: '/pointers/gltf',\n customDistributorHost: 'https://staging-distributor-distributor.luxdeepblue.com',\n customDistributorKey: 'bMhq6JPO.nLtuIsJU61lazsX3pnj10iH0wv2Dr7KA',\n customDistributorGetPermutation: '/api/getPermutation?token=',\n assetType: 'SEPARATE'\n },\n\n /* \n * Used to point to a static transitions lenses catalog for easier developments\n */\n TEST_TRANSITIONS: {\n name: 'TEST',\n catalogHost: 'https://vmcore-test.luxottica.com',\n transitionsEndpoint: 'https://luxdeepblue.github.io/vm-test-artifacts/api/transition/v3/vocabulary',\n b3dHost: 'https://vmcore-test.luxottica.com',\n gltfHost: 'https://vmcore-test.luxottica.com/api/upc/v1',\n gltfPointer: '/pointers/gltf',\n customDistributorHost: 'https://staging-distributor-distributor.luxdeepblue.com',\n customDistributorKey: 'bMhq6JPO.nLtuIsJU61lazsX3pnj10iH0wv2Dr7KA',\n customDistributorGetPermutation: '/api/getPermutation?token=',\n assetType: 'ZIPPED'\n },\n QA_GLTF_PROD: {\n name: 'QA_PROD',\n catalogHost: 'https://vmcore.luxottica.com',\n transitionsEndpoint: 'https://vmcore.luxottica.com/api/transition/v3/vocabulary',\n b3dHost: 'https://s3.amazonaws.com/vto-3d-assets-qa',\n gltfHost: 'https://gw-api-vtocatalogue.luxdeepblue.com/api/upc/v1',\n gltfPointer: '/pointers/gltf?qa=true',\n customDistributorHost: 'https://distributor-distributor.luxdeepblue.com',\n customDistributorKey: 'HnqGNWeO.Px2v1cUrm3ffk6gC0OOdTgJRoaOfxClC',\n customDistributorGetPermutation: '/api/getPermutation?token=',\n assetType: 'ZIPPED'\n },\n QA_GLTF_TEST: {\n name: 'QA_TEST',\n catalogHost: 'https://test-api-vtocatalogue.luxdeepblue.com',\n transitionsEndpoint: 'https://qa-gw-api-vtocatalogue.luxdeepblue.com/api/transition/v3/vocabulary',\n b3dHost: 'https://s3.amazonaws.com/vto-3d-assets-qa-test',\n gltfHost: 'https://vmcore-test.luxottica.com/api/upc/v1',\n gltfPointer: '/pointers/gltf?qa=true',\n customDistributorHost: 'https://staging-distributor-distributor.luxdeepblue.com',\n customDistributorKey: 'bMhq6JPO.nLtuIsJU61lazsX3pnj10iH0wv2Dr7KA',\n customDistributorGetPermutation: '/api/getPermutation?token=',\n assetType: 'ZIPPED'\n },\n QA_B3D_PROD: {\n name: 'QA_PROD',\n catalogHost: 'https://vmcore.luxottica.com',\n transitionsEndpoint: 'https://vmcore.luxottica.com/api/transition/v3/vocabulary',\n b3dHost: 'https://s3.amazonaws.com/vto-3d-assets-qa',\n gltfHost: 'https://gw-api-vtocatalogue.luxdeepblue.com/api/upc/v1',\n gltfPointer: '/pointers/gltf?qa=true',\n customDistributorHost: 'https://distributor-distributor.luxdeepblue.com',\n customDistributorKey: 'HnqGNWeO.Px2v1cUrm3ffk6gC0OOdTgJRoaOfxClC',\n customDistributorGetPermutation: '/api/getPermutation?token=',\n assetType: 'ZIPPED'\n },\n QA_B3D_TEST: {\n name: 'QA_TEST',\n catalogHost: 'https://test-api-vtocatalogue.luxdeepblue.com',\n transitionsEndpoint: 'https://qa-gw-api-vtocatalogue.luxdeepblue.com/api/transition/v3/vocabulary',\n b3dHost: 'https://s3.amazonaws.com/vto-3d-assets-qa-test',\n gltfHost: 'https://test-api-vtocatalogue.luxdeepblue.com/api/upc/v1',\n gltfPointer: '/pointers/gltf?qa=true',\n customDistributorHost: 'https://staging-distributor-distributor.luxdeepblue.com',\n customDistributorKey: 'bMhq6JPO.nLtuIsJU61lazsX3pnj10iH0wv2Dr7KA',\n customDistributorGetPermutation: '/api/getPermutation?token=',\n assetType: 'ZIPPED'\n },\n // environments for distributor developments\n DISTRIBUTOR_VALIDATION_STAGING: {\n name: 'DISTRIBUTOR_VALIDATION_STAGING',\n catalogHost: 'https://test-api-vtocatalogue.luxdeepblue.com',\n transitionsEndpoint: 'https://qa-gw-api-vtocatalogue.luxdeepblue.com/api/transition/v3/vocabulary',\n b3dHost: 'https://distributor-assets-staging.s3.amazonaws.com/validation',\n gltfHost: '',\n gltfPointer: '',\n customDistributorHost: '',\n customDistributorKey: '',\n customDistributorGetPermutation: '/api/getPermutation?token=',\n assetType: 'ZIPPED'\n },\n DISTRIBUTOR_APPROVATION_STAGING: {\n name: 'DISTRIBUTOR_APPROVATION_STAGING',\n catalogHost: 'https://test-api-vtocatalogue.luxdeepblue.com',\n transitionsEndpoint: 'https://qa-gw-api-vtocatalogue.luxdeepblue.com/api/transition/v3/vocabulary',\n b3dHost: 'https://distributor-assets-staging.s3.amazonaws.com/approvation',\n gltfHost: '',\n gltfPointer: '',\n customDistributorHost: '',\n customDistributorKey: '',\n customDistributorGetPermutation: '/api/getPermutation?token=',\n assetType: 'ZIPPED'\n },\n DISTRIBUTOR_VALIDATION_PRODUCTION: {\n name: 'DISTRIBUTOR_VALIDATION_PRODUCTION',\n catalogHost: 'https://vmcore.luxottica.com',\n transitionsEndpoint: 'https://qa-gw-api-vtocatalogue.luxdeepblue.com/api/transition/v3/vocabulary',\n b3dHost: 'https://distributor-assets-production.s3.amazonaws.com/validation',\n gltfHost: '',\n gltfPointer: '',\n customDistributorHost: '',\n customDistributorKey: '',\n customDistributorGetPermutation: '/api/getPermutation?token=',\n assetType: 'ZIPPED'\n },\n DISTRIBUTOR_APPROVATION_PRODUCTION: {\n name: 'DISTRIBUTOR_APPROVATION_PRODUCTION',\n catalogHost: 'https://vmcore.luxottica.com',\n transitionsEndpoint: 'https://qa-gw-api-vtocatalogue.luxdeepblue.com/api/transition/v3/vocabulary',\n b3dHost: 'https://distributor-assets-production.s3.amazonaws.com/approvation',\n gltfHost: '',\n gltfPointer: '',\n customDistributorHost: '',\n customDistributorKey: '',\n customDistributorGetPermutation: '/api/getPermutation?token=',\n assetType: 'ZIPPED'\n }\n};\n\nconst getEnvironmentConfig = (env: GlassesEnvironment | undefined): EnvironmentConfig => {\n return (env) ? hosts[env] : hosts.PROD;\n};\n\nexport { getEnvironmentConfig, EnvironmentConfig };\n","import { CatalogConfiguration } from '../interfaces/CatalogConfiguration';\nimport { getEnvironmentConfig } from './GlassesApiConfig';\n\n// const upcsAvailabilityAuthenticatedApi = '/authenticated/upc/{upcs}/availability';\nconst upcsAvailabilityApi = '/api/upc/v3/{upcs}/availability';\n\nconst CatalogueApiConfig = {\n getUpcsAvailabilityApiEndpoint(config: CatalogConfiguration, upcString: string): string {\n const envConfig = getEnvironmentConfig(config.env);\n\n //TODO: remove after prod api is complete\n if (config.env.includes('TEST')) {\n return `${envConfig.catalogHost}${upcsAvailabilityApi}`.replace('{upcs}', upcString);\n } else {\n return (!!config.key) ?\n `${envConfig.catalogHost}${upcsAvailabilityApi}`.replace('{upcs}', upcString)\n :\n `${envConfig.catalogHost}${upcsAvailabilityApi}`.replace('{upcs}', upcString);\n }\n },\n\n getTransitionEndpoint(config: CatalogConfiguration): string {\n const envConfig = getEnvironmentConfig(config.env);\n return envConfig.transitionsEndpoint;\n }\n};\n\nexport { CatalogueApiConfig };\n","import { UpcAvailability } from '../../interfaces/UpcAvailability';\n\nexport const notAvailableResponse = (upc: string): UpcAvailability => {\n return {\n upc: upc,\n available: { 256: false, 512: false },\n transitions: { 256: false, 512: false },\n lods: [],\n glassesType: undefined,\n getUpc: () => upc,\n isAvailable: () => false,\n isTransition: () => false,\n };\n};\n","import { CatalogConfiguration } from '../../interfaces/CatalogConfiguration';\nimport { GlassesType, UpcAvailability } from '../../interfaces/UpcAvailability';\n\nconst getGlassesType = (lods: number[], config: CatalogConfiguration, isAvailable: boolean): GlassesType | undefined => {\n // TODO: remove this. To support MOCK env is necessary to return GLTF as glasses type in case the upc is not supported\n return (lods.includes(1) || config.env === 'MOCK' && !isAvailable) ? 'GLTF' : 'B3D';\n};\n\nexport const standardResponse = (catalogResponse: CatalogResponse, upc: string, config: CatalogConfiguration): UpcAvailability => {\n\n const lods = (!!catalogResponse?.lods) ? catalogResponse.lods : [];\n \n const isAvailable = catalogResponse.resolutions.includes('PX_256') || catalogResponse.resolutions.includes('PX_512') || lods.length > 0;\n\n const isTransition = catalogResponse.transitionsResolutions.includes('PX_256')\n || catalogResponse.transitionsResolutions.includes('PX_512');\n \n const glassesType = getGlassesType(lods, config, isAvailable);\n\n return {\n upc: upc,\n available: {\n '256': catalogResponse.resolutions.includes('PX_256'),\n '512': catalogResponse.resolutions.includes('PX_512')\n },\n transitions: {\n '256': catalogResponse.transitionsResolutions.includes('PX_256'),\n '512': catalogResponse.transitionsResolutions.includes('PX_512'),\n },\n lods,\n glassesType,\n getUpc: () => upc,\n isAvailable: () => isAvailable,\n isTransition: () => isTransition,\n };\n};\n","import { RemoteLogConfig } from '@luxottica/vm-remotelog';\nimport { UpcAvailability } from './interfaces/UpcAvailability';\nimport { name, version } from '../package.json';\nimport { TransitionLens } from './interfaces/TransitionLens';\nimport { CatalogConfiguration } from './interfaces/CatalogConfiguration';\nimport { CatalogueApiConfig } from './config/CatalogueApiConfig';\nimport { notAvailableResponse } from './helpers/UpcAvailabilityResponse/NotAvailable';\nimport { qaToolAvailability, qaToolMultipleAvailability } from './helpers/UpcAvailabilityResponse/QATool';\nimport { standardResponse } from './helpers/UpcAvailabilityResponse/Standard';\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, 'CatalogService');\n\nconst fetchCatalogResponse = (\n config: CatalogConfiguration,\n upc: string\n): Promise => {\n\n const apiEndpoint = CatalogueApiConfig.getUpcsAvailabilityApiEndpoint(config, upc);\n const requestInit: RequestInit = {\n method: 'GET',\n headers: {\n 'Accept': 'application/json',\n ...(config.key && { 'x-api-key': config.key })\n },\n mode: 'cors',\n referrerPolicy: 'unsafe-url',\n };\n return fetch(apiEndpoint, requestInit);\n};\n\nconst CatalogService = {\n getUpcAvailability(\n config: CatalogConfiguration,\n upc: string\n ): Promise {\n\n // inside the QA tool there's no UPC availability API for unpublished assets\n if (config.env.includes('QA')) {\n return Promise.resolve(qaToolAvailability(upc, config));\n }\n\n // otherwise we fetch the answer from remote\n return fetchCatalogResponse(config, upc)\n .then((response)=> {\n if (response.ok) {\n return response.json();\n }\n throw new Error(`catalog failed to respond. Response status: ${response.status}`);\n\n }).then((json: CatalogResponses) => {\n if (!!json[upc]) {\n return standardResponse(json[upc], upc, config);\n }\n return notAvailableResponse(upc);\n });\n },\n\n /**\n * \n * @param config \n * @param upc \n * @returns an array with all the availabilites already extracted from the promise\n */\n getMultipleUpcAvailability(\n config: CatalogConfiguration,\n upc: string\n ): Promise {\n\n // inside the QA tool there's no UPC availability API for unpublished assets\n if (config.env.includes('QA')) {\n return Promise.resolve(qaToolMultipleAvailability(upc, config));\n }\n\n // otherwise we fetch the answer from remote\n return fetchCatalogResponse(config, upc)\n .then((response)=> {\n if (response.ok) {\n return response.json();\n }\n throw new Error(`catalog failed to respond. Response status: ${response.status}`);\n\n }).then((json: CatalogResponses) => {\n\n const upcs = upc.split(',');\n const response: UpcAvailability[] = [];\n upcs.forEach((upc) => {\n if (!!json[upc]) {\n response.push(standardResponse(json[upc], upc, config));\n return;\n }\n response.push(notAvailableResponse(upc));\n });\n\n return response;\n });\n },\n\n downloadTransitionLenses(\n config: CatalogConfiguration,\n ): Promise<{ [name: string]: TransitionLens }> {\n\n const apiEndpoint = CatalogueApiConfig.getTransitionEndpoint(config);\n return fetch(apiEndpoint).then((response) => {\n return response.json();\n }).then((json: (TransitionLens & {name: string})[]) => {\n try {\n const result: {\n [name: string]: TransitionLens\n } = {};\n\n (json).forEach((color) => {\n result[color.name] = color;\n });\n return result;\n\n } catch (e) {\n logger.error(e);\n }\n return {};\n });\n }\n};\n\nexport {\n CatalogService,\n};\n","import { CatalogConfiguration } from '../../interfaces/CatalogConfiguration';\nimport { UpcAvailability } from '../../interfaces/UpcAvailability';\n\n // inside the QA tool every asset is considered fully available\nexport const qaToolAvailability = (upc: string, config: CatalogConfiguration): UpcAvailability => {\n return {\n upc: upc,\n available: { 256: true, 512: true },\n transitions: { 256: true, 512: true },\n lods: [0, 1, 2],\n getUpc: () => upc,\n // we need somehow to split between b3d and gltf files somehow\n glassesType: config.env.includes('GLTF') ? 'GLTF' : 'B3D',\n isAvailable: () => true,\n isTransition: () => true,\n };\n};\n\nexport const qaToolMultipleAvailability = (upc: string, config: CatalogConfiguration): UpcAvailability[] => {\n return upc.split(',').map((upc) => {\n return {\n upc: upc,\n available: { 256: true, 512: true },\n transitions: { 256: true, 512: true },\n lods: [0, 1, 2],\n getUpc: () => upc,\n // we need somehow to split between b3d and gltf files somehow\n glassesType: config.env.includes('GLTF') ? 'GLTF' : 'B3D',\n isAvailable: () => true,\n isTransition: () => true,\n };\n });\n};","import { RemoteLogConfig } from '@luxottica/vm-remotelog';\nimport { UpcAvailability } from './interfaces/UpcAvailability';\nimport { name, version } from '../package.json';\nimport { TransitionLens } from './interfaces/TransitionLens';\nimport { CatalogConfiguration } from './interfaces/CatalogConfiguration';\nimport { CatalogService } from './CatalogService';\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, 'Catalog');\n\nconst Catalog = {\n getUpcAvailability(\n config: CatalogConfiguration,\n upc: string\n ): Promise {\n\n logger.debug('getUpcAvailability for {}', upc);\n return CatalogService.getUpcAvailability(config, upc);\n },\n\n /**\n * This method optimise the network calls\n * @param config { env: GlassesEnvironment; key?: string; } < please always pass your key, it will become mandatory soon\n * @param upcs you can spread out an array of upcs\n * @returns \n */\n getMultipleUpcAvailability(\n config: CatalogConfiguration,\n ...upcs: string[]\n ): Promise {\n\n const upcList = upcs.reduce((previous, current) => {\n return current+','+previous;\n });\n\n logger.debug('getUpcAvailability for {}', upcs);\n return CatalogService.getMultipleUpcAvailability(config, upcList);\n },\n\n // getUpcsAvailability(\n // config: CatalogConfiguration,\n // ...upcs: string[]\n // ): Promise<{ [upc: string]: UpcAvailability }> {\n // return CatalogService.getUpcsAvailability(config, ...upcs);\n // },\n\n downloadTransitionLenses(\n config: CatalogConfiguration\n ): Promise<{ [name: string]: TransitionLens }> {\n\n logger.debug('downloadTransitionLenses');\n return CatalogService.downloadTransitionLenses(config);\n }\n};\n\nexport {\n Catalog,\n};\n","import JSZip from 'jszip';\nimport { BasicGLTFAsset } from './interfaces/BasicGLTFAsset';\n\nexport const AssetDecoder = {\n getArrayBuffer(blob: Blob): Promise {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onerror = reject;\n reader.onload = () => {\n resolve(reader.result as ArrayBuffer);\n };\n reader.readAsArrayBuffer(blob);\n });\n },\n\n getZippedImage(imagePromise: JSZip.JSZipObject): Promise {\n return imagePromise\n .async('blob')\n .then((blob: Blob) => {\n return AssetDecoder.getImage(blob);\n });\n },\n\n getImage(blob: Blob): Promise {\n return new Promise((resolve, reject) => {\n const url = URL.createObjectURL(blob);\n const img = new Image();\n img.crossOrigin = '*';\n\n img.onload = () => {\n URL.revokeObjectURL(url);\n resolve(img);\n };\n\n img.onerror = (e) => {\n reject(e);\n };\n\n img.src = url;\n });\n },\n\n getImageBase64(blob: Blob): Promise {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onerror = reject;\n reader.onload = () => {\n resolve('' + reader.result);\n };\n reader.readAsDataURL(blob);\n });\n },\n\n getZippedGLTF(upc: string, gltfPromise: JSZip.JSZipObject): Promise {\n return gltfPromise\n .async('blob')\n .then((blob: Blob) => {\n return AssetDecoder.getGLTFAsset(upc, blob);\n });\n },\n\n getGLTFAsset(upc: string, blob: Blob): Promise {\n return this.getArrayBuffer(blob)\n .then((arrayBuffer) => {\n return Promise.resolve({\n upc,\n arrayBuffer,\n });\n });\n },\n};\n","enum AppViewSessionKeys {\n GLASSES_OK = 'vm-glasses-ok',\n GLASSES_KO = 'vm-glasses-ko',\n GLASSES_DOWNLOAD_SUCCESS_UPC = '_download_success_upc',\n GLASSES_DOWNLOAD_FAILURE_UPC = '_download_failure_upc',\n GLASSES_DOWNLOAD_SUCCESS_TIME = '_download_success_time_ms',\n GLASSES_DOWNLOAD_FAILURE_TIME = '_download_failure_time_ms',\n GLASSES_DOWNLOAD_FALLBACK_SUCCESS_UPC = '_download_fallback_success_upc',\n GLASSES_DOWNLOAD_FALLBACK_FAILURE_UPC = '_download_fallback_failure_upc',\n GLASSES_DOWNLOAD_FALLBACK_SUCCESS_TIME = '_download_fallback_success_time_ms',\n GLASSES_DOWNLOAD_FALLBACK_FAILURE_TIME = '_download_fallback_failure_time_ms',\n}\n\nexport { AppViewSessionKeys };\n","const assetNames = {\n b3d: 'glasses.b3d',\n transparency: 'mult.jpg',\n shadow: 'shadow-crop.jpg',\n lensMap: 'lens-map.png',\n lensBounds: 'bounds.glb',\n glassesLandmarks: 'landmarks.glb',\n color: (index: string | number) => `color-${index}.jpg`,\n};\n\nexport {\n assetNames,\n};\n","/* \nThis has been written during the mocking phase, during the integration of\nLuxottica's GTLF format. Probably will be useful with third parites glasses.\n*/\n\nexport const gltfDefaults = {\n nosepad_type: 'integrated',\n fitting: 'standard',\n flare: 0.025,\n};\n","const MockAssetData: {\n [key: string]: {\n nosepad_type: string,\n flare: number,\n fitting: string,\n lodNumber: number,\n misc: boolean,\n }\n} = {\n 'RB2140ROSETTA001': {\n 'nosepad_type': 'integrated',\n 'flare': 0.023,\n 'fitting': 'standard',\n 'lodNumber': 2,\n 'misc': false\n },\n 'RB2140ROSETTA002': {\n 'nosepad_type': 'integrated',\n 'flare': 0.023,\n 'fitting': 'standard',\n 'lodNumber': 2,\n 'misc': false\n },\n 'RB3025ROSETTA001': {\n 'nosepad_type': 'floating',\n 'flare': 0.025,\n 'fitting': 'standard',\n 'lodNumber': 2,\n 'misc': true\n },\n 'OO9406ROSETTA001': {\n 'nosepad_type': 'integrated',\n 'flare': 0.024,\n 'fitting': 'standard',\n 'lodNumber': 2,\n 'misc': false\n },\n 'THIRDPARTYROSETTA-NOGROUP': {\n 'nosepad_type': 'undefined',\n 'flare': 0.025,\n 'fitting': 'fast',\n 'lodNumber': 1,\n 'misc': false\n },\n 'THIRDPARTYROSETTA-WGROUP': {\n 'nosepad_type': 'undefined',\n 'flare': 0.025,\n 'fitting': 'fast',\n 'lodNumber': 1,\n 'misc': false\n },\n 'dbyd_dbsu5003_8719154814969': {\n 'nosepad_type': 'undefined',\n 'flare': 0.025,\n 'fitting': 'fast',\n 'lodNumber': 1,\n 'misc': false\n },\n 'unofficial_unsf0146_8719154842764': {\n 'nosepad_type': 'undefined',\n 'flare': 0.025,\n 'fitting': 'fast',\n 'lodNumber': 1,\n 'misc': false\n },\n 'unofficial_unsu0094_8719154843136': {\n 'nosepad_type': 'undefined',\n 'flare': 0.025,\n 'fitting': 'fast',\n 'lodNumber': 1,\n 'misc': false\n },\n 'dbyd_dbsm0029_8719154744198': {\n 'nosepad_type': 'undefined',\n 'flare': 0.025,\n 'fitting': 'fast',\n 'lodNumber': 1,\n 'misc': false\n },\n 'fb-quality': {\n 'nosepad_type': 'undefined',\n 'flare': 0.025,\n 'fitting': 'fast',\n 'lodNumber': 1,\n 'misc': false\n },\n 'fb-standard': {\n 'nosepad_type': 'undefined',\n 'flare': 0.025,\n 'fitting': 'fast',\n 'lodNumber': 1,\n 'misc': false\n },\n 'costa00000001': {\n 'nosepad_type': 'undefined',\n 'flare': 0.025,\n 'fitting': 'fast',\n 'lodNumber': 1,\n 'misc': false\n },\n 'goccia00000001': {\n 'nosepad_type': 'undefined',\n 'flare': 0.025,\n 'fitting': 'fast',\n 'lodNumber': 1,\n 'misc': false\n },\n 'frogskins00000001': {\n 'nosepad_type': 'undefined',\n 'flare': 0.025,\n 'fitting': 'fast',\n 'lodNumber': 1,\n 'misc': false\n },\n 'A03116ROSETTA003': {\n 'nosepad_type': 'integrated',\n 'flare': 0.025,\n 'fitting': 'standard',\n 'lodNumber': 2,\n 'misc': false\n },\n 'DG4315BROSETTA001': {\n 'nosepad_type': 'integrated',\n 'flare': 0.025,\n 'fitting': 'standard',\n 'lodNumber': 2,\n 'misc': false\n },\n 'HC6149ROSETTA001': {\n 'nosepad_type': 'integrated',\n 'flare': 0.025,\n 'fitting': 'standard',\n 'lodNumber': 2,\n 'misc': false\n },\n 'OO9013ROSETTA001': {\n 'nosepad_type': 'integrated',\n 'flare': 0.025,\n 'fitting': 'standard',\n 'lodNumber': 2,\n 'misc': false\n },\n '06A2003VROSETTA001': {\n 'nosepad_type': 'integrated',\n 'flare': 0.025,\n 'fitting': 'standard',\n 'lodNumber': 2,\n 'misc': false\n },\n 'OO9102ROSETTA001': {\n 'nosepad_type': 'integrated',\n 'flare': 0.025,\n 'fitting': 'standard',\n 'lodNumber': 2,\n 'misc': false\n },\n 'PO3210SROSETTA001': {\n 'nosepad_type': 'integrated',\n 'flare': 0.025,\n 'fitting': 'standard',\n 'lodNumber': 2,\n 'misc': false\n },\n 'RB3016ROSETTA001': {\n 'nosepad_type': 'integrated',\n 'flare': 0.025,\n 'fitting': 'standard',\n 'lodNumber': 2,\n 'misc': false\n },\n '06S4010ROSETTA001': {\n 'nosepad_type': 'integrated',\n 'flare': 0.025,\n 'fitting': 'standard',\n 'lodNumber': 2,\n 'misc': false\n },\n 'OO9406ROSETTA002': {\n 'nosepad_type': 'integrated',\n 'flare': 0.025,\n 'fitting': 'standard',\n 'lodNumber': 2,\n 'misc': false\n },\n};\n\nexport {\n MockAssetData,\n};\n","abstract class GenericError extends Error {\n\n private readonly type: string;\n\n public readonly genericError: boolean = true;\n\n constructor(type: string, message: string) {\n super(`${type}: ${message}`);\n this.type = type;\n this.message = message;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n public getType() {\n return this.type;\n }\n\n}\n\nexport { GenericError };\n","import { GenericError } from './GenericError';\n\nclass GlassesDownloadError extends GenericError {\n constructor(readonly upc: string) {\n super('GlassesDownloadError', `glasses for upc ${upc} download failed`);\n }\n}\n\nexport { GlassesDownloadError };\n","import { GenericError } from './GenericError';\n\nclass GlassesDownloadForbiddenError extends GenericError {\n constructor(readonly upc: string) {\n super('GlassesDownloadForbiddenError', `glasses archive for upc ${upc} download forbidden`);\n }\n}\n\nexport { GlassesDownloadForbiddenError };\n","import { GenericError } from './GenericError';\n\nclass GlassesNotFoundError extends GenericError {\n constructor(readonly upc: string) {\n super('GlassesNotFoundError', `glasses archive for upc ${upc} not found`);\n }\n}\n\nexport { GlassesNotFoundError };\n","const isDistributorAsset = (upc: string): boolean => {\n return upc.startsWith('TKN~');\n};\n\nconst isQADistributorAsset = (upc: string): boolean => {\n // sample QA distributor UPC: 0OO9290CP-FRAME_SR005\n const dash = upc.split('-').length > 1;\n const underscore = upc.split('_').length > 1;\n\n return dash && underscore;\n};\n\nconst distributorBasename = (upc: string): string => {\n // sample distributor UPC: 0OO9290CP-FRAME_SR005\n return upc.split('-')[0];\n};\n\n // distributor can use tokens with a / (slash) in the name\n // the / is escaped by VM clients, all the distributor APIs works with the escaped character %2F\n // eg: TKN~0RB4165CP~2RB4165061_601%2F71AB~2AJ1212111_710%2F13AA~NULL~2LSRB4165_1770..AB~NULL~RBCP..55\n // inside the asset zip this slash is replaced with a dash -\nconst distributorFolderName = (upc: string): string => {\n return upc.replace(/(%2F)/gm, '-');\n};\n\nexport { isDistributorAsset, isQADistributorAsset, distributorBasename,\n distributorFolderName\n};\n","import { RemoteLogConfig } from '@luxottica/vm-remotelog';\nimport JSZip from 'jszip';\nimport { name, version } from '../package.json';\nimport { AssetDecoder } from './AssetDecoder';\nimport { AssetResolution } from './interfaces/AssetResolution';\nimport { assetNames } from './constants/AssetNames';\nimport { B3dAsset } from './interfaces/B3dAsset';\nimport { distributorFolderName } from './helpers/AssetHelper';\nimport { BasicGLTFAsset } from './interfaces/BasicGLTFAsset';\nimport { GlassesDownloadError } from './error/GlassesDownloadError';\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, 'GlassesExtractor');\n\nconst ALL_TEXTURES = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14];\n\nclass GlassesExtractor {\n\n public unzip(\n upc: string,\n glassesZip: Blob,\n resolution: AssetResolution,\n singleTexture: number | undefined,\n ): Promise {\n const colorIndexes = (typeof singleTexture === 'number') ? [singleTexture] : ALL_TEXTURES;\n\n return this.unzipGlasses(\n upc,\n glassesZip,\n colorIndexes,\n resolution);\n }\n\n private unzipGlasses(\n upc: string,\n glassesZip: Blob,\n colorIndexes: number[],\n resolution: AssetResolution\n ): Promise {\n const time1 = performance.now();\n let time2 = 0;\n const jszip = new JSZip();\n return jszip.loadAsync(\n glassesZip\n ).then(() => {\n logger.debug('glasses zip [upc={}] loaded in {} ms', upc, performance.now() - time1);\n time2 = performance.now();\n return this.extractFilesFromZipArchive(jszip, upc, colorIndexes);\n }).then((glassesExtracted: Array) => {\n logger.debug('glasses zip [upc={}] opened in {} ms', upc, performance.now() - time2);\n const glasses = this.createGlassesDataFromExtractedArchive(upc, glassesExtracted, resolution, colorIndexes);\n return glasses;\n });\n }\n\n private extractFilesFromZipArchive(jszip: JSZip, zipUpc: string, colorIndexes: number[]): Promise> {\n const promises: Promise[] = [];\n const folderName: string = distributorFolderName(zipUpc);\n promises.push(this.extractB3D(jszip, folderName));\n promises.push(\n this.extractMult(jszip, folderName),\n this.extractShadow(jszip, folderName),\n this.extractLensMap(jszip, folderName),\n this.extractBoundingBoxes(jszip, folderName),\n this.extractLandmarks(jszip, folderName),\n );\n\n this.extractColors(jszip, folderName, colorIndexes).forEach((promise) => {\n promises.push(promise);\n });\n return Promise.all(promises);\n }\n\n private extractColors(jszip: JSZip, folderName: string, colorIndexes: number[]) {\n const promises: Array> = [];\n colorIndexes.map((i) => {\n const time1 = performance.now();\n const zipFolder = jszip.folder(folderName);\n if (!zipFolder) {\n throw new GlassesDownloadError(`${folderName} folder does not exists`);\n }\n const file = zipFolder.file(assetNames.color(i));\n if (!file) {\n throw new GlassesDownloadError(`${assetNames.color(i)} file does not exists`);\n }\n const colorPromise = AssetDecoder.getZippedImage(file);\n colorPromise.then((color) => {\n const time2 = performance.now();\n const ttime = time2 - time1;\n logger.debug('texture {} extracted in {} ms from upc {}: (length={})', i, ttime, folderName, color.src.length);\n });\n promises.push(colorPromise);\n });\n return promises;\n }\n\n private extractMult(jszip: JSZip, folderName: string) {\n const zipFolder = jszip.folder(folderName);\n if (!zipFolder) {\n throw new GlassesDownloadError(`${folderName} folder does not exists`);\n }\n const file = zipFolder.file(assetNames.transparency);\n if (!file) {\n throw new GlassesDownloadError(`${assetNames.transparency} file does not exists`);\n }\n const multPromise = AssetDecoder.getZippedImage(file);\n const time1 = performance.now();\n multPromise.then((mult) => {\n const time2 = performance.now();\n const ttime = time2 - time1;\n logger.debug('mult extracted in {} ms from upc {}: (length={})', ttime, folderName, mult.src.length);\n });\n return multPromise;\n }\n\n private extractShadow(jszip: JSZip, folderName: string) {\n const zipFolder = jszip.folder(folderName);\n if (!zipFolder) {\n throw new GlassesDownloadError(`${folderName} folder does not exists`);\n }\n const file = zipFolder.file(assetNames.shadow);\n if (!file) {\n throw new GlassesDownloadError(`${assetNames.shadow} file does not exists`);\n }\n const shadowPromise = AssetDecoder.getZippedImage(file);\n const time1 = performance.now();\n shadowPromise.then((shadow) => {\n const time2 = performance.now();\n const ttime = time2 - time1;\n logger.debug('shadow extracted in {} ms from upc {}: (length={})', ttime, folderName, shadow.src.length);\n });\n return shadowPromise;\n }\n\n // lensmaps, boundig boxes, and landmarks are optional and are not always present in zip file\n private extractLensMap(jszip: JSZip, folderName: string) {\n const zipFolder = jszip.folder(folderName);\n if (!zipFolder) {\n throw new GlassesDownloadError(`${folderName} folder does not exists`);\n }\n const lensmapFile = zipFolder.file(assetNames.lensMap);\n if (!!lensmapFile) {\n const lensmapPromise = AssetDecoder.getZippedImage(lensmapFile);\n const time1 = performance.now();\n lensmapPromise.then((lensmap: any) => {\n const time2 = performance.now();\n const ttime = time2 - time1;\n logger.debug('lens map extracted in {} ms from upc {}: (length={})', ttime, folderName, lensmap.byteLength);\n });\n return lensmapPromise;\n }\n return Promise.resolve(undefined);\n }\n\n // lensmaps, boundig boxes, and landmarks are optional and are not always present in zip file\n private extractBoundingBoxes(jszip: JSZip, folderName: string) {\n const zipFolder = jszip.folder(folderName);\n if (!zipFolder) {\n throw new GlassesDownloadError(`${folderName} folder does not exists`);\n }\n const lensBoundsFile = zipFolder.file(assetNames.lensBounds);\n if (!!lensBoundsFile) {\n const lensBoundsPromise = AssetDecoder.getZippedGLTF(folderName, lensBoundsFile);\n const time1 = performance.now();\n lensBoundsPromise.then((bounds: any) => {\n const time2 = performance.now();\n const ttime = time2 - time1;\n logger.debug('lens bounds extracted in {} ms from upc {}: (length={})', ttime, folderName, bounds.byteLength);\n });\n return lensBoundsPromise;\n }\n return Promise.resolve(undefined);\n }\n\n // lensmaps, boundig boxes, and landmarks are optional and are not always present in zip file\n private extractLandmarks(jszip: JSZip, folderName: string) {\n const landmarksFile = jszip.folder(folderName)!.file(assetNames.glassesLandmarks);\n if (!!landmarksFile) {\n const landmarksPromise = AssetDecoder.getZippedGLTF(folderName, landmarksFile);\n const time1 = performance.now();\n landmarksPromise.then((landmarks: any) => {\n const time2 = performance.now();\n const ttime = time2 - time1;\n logger.debug('landmarks extracted in {} ms from upc {}: (length={})', ttime, folderName, landmarks.byteLength);\n });\n return landmarksPromise;\n }\n return Promise.resolve(undefined);\n }\n\n private extractB3D(jszip: JSZip, folderName: string) {\n const b3dPromise = jszip.folder(folderName)!.file(assetNames.b3d)!.async('arraybuffer');\n const time1 = performance.now();\n b3dPromise.then((b3d: any) => {\n const time2 = performance.now();\n const ttime = time2 - time1;\n logger.debug('model extracted in {} ms from upc {}: (length={})', ttime, folderName, b3d.byteLength);\n });\n return b3dPromise;\n }\n\n private createGlassesDataFromExtractedArchive(\n upc: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n glassesExtracted: any[],\n resolution: AssetResolution,\n textureIndexes: number[]\n ): B3dAsset {\n logger.debug('creating glasses from {} items...', glassesExtracted.length);\n const glasses: B3dAsset = {\n objModel: glassesExtracted[0],\n transparency: glassesExtracted[1],\n shadow: glassesExtracted[2],\n lensMap: glassesExtracted[3],\n lensBoundingBox: glassesExtracted[4],\n glassesLandmarks: glassesExtracted[5],\n textures: glassesExtracted.slice(6, 6 + textureIndexes.length),\n upc,\n resolution,\n };\n return glasses;\n }\n\n}\n\nexport { GlassesExtractor };\n","import { RemoteLog, RemoteLogConfig } from '@luxottica/vm-remotelog';\nimport { name, version } from '../package.json';\nimport { EnvironmentConfig } from './config/GlassesApiConfig';\nimport { GlassesExtractor } from './GlassesExtractor';\nimport { GlassesDownloadError } from './error/GlassesDownloadError';\nimport { GlassesDownloadForbiddenError } from './error/GlassesDownloadForbiddenError';\nimport { GlassesNotFoundError } from './error/GlassesNotFoundError';\nimport { AssetResolution } from './interfaces/AssetResolution';\nimport { B3dAsset } from './interfaces/B3dAsset';\nimport { AppViewSessionKeys } from './remotelog/AppViewSessionKeys';\nimport { distributorBasename, isDistributorAsset, isQADistributorAsset } from './helpers/AssetHelper';\nimport { GenericError } from './error/GenericError';\n/* import { GlassesAsset } from \"./GlassesAsset\"; */\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, 'ZipDownloader');\n\n/*\n\nSome sample tokens for custom glasses coming from the distributor\n\navailable\nTKN~0RB2140CP~2RB2140P61_902...AA~2AP3031111_954...AA~NULL~1RB00500681_GRIDFK~NULL~50\nTKN~0RB2140CP~2RB2140P61_902...AA~2AP3031111_954...AA~NULL~1RB00500633_GRIDFK~NULL~50\n\nnot available (uses fallback)\nTKN~0RB3592CP~1RB3592061_001...55~NULL~1TE3941A00_A1812.AA~1LSRB3592_2540..AB~NULL~RBCP..55\nTKN~0RB3592CP~1RB3592061_001...50~NULL~1TE3941A00_A1814.AA~1LSRB3592_1766..AA~NULL~RBCP..50\n\nwith slashes (%2F)\nTKN~0RB4165CP~2RB4165061_601%2F71AB~2AJ1212111_710%2F13AA~NULL~2LSRB4165_1770..AB~NULL~RBCP..55\n\nTKN~0RB4165CP~2RB4165061_601%2F71AB~2AJ1212111_710%2F8GAA~NULL~2LSRB4165_1770..AB~NULL~RBCP..55\n\nTKN~0RX6465CP~1RX6465061_2945..51~NULL~1TE4183A00_X523%2FHAA~2064-DE~NULL~RBCP..51~K-MC5~K-RB0\n\n*/\n\n/*\n\nSome sample tokens for custom glasses coming from the distributor\n\navailable\nTKN~0RB2140CP~2RB2140P61_902...AA~2AP3031111_954...AA~NULL~1RB00500681_GRIDFK~NULL~50\nTKN~0RB2140CP~2RB2140P61_902...AA~2AP3031111_954...AA~NULL~1RB00500633_GRIDFK~NULL~50\n\nnot available (uses fallback)\nTKN~0RB3592CP~1RB3592061_001...55~NULL~1TE3941A00_A1812.AA~1LSRB3592_2540..AB~NULL~RBCP..55\nTKN~0RB3592CP~1RB3592061_001...50~NULL~1TE3941A00_A1814.AA~1LSRB3592_1766..AA~NULL~RBCP..50\n\nwith slashes (%2F)\nTKN~0RB4165CP~2RB4165061_601%2F71AB~2AJ1212111_710%2F13AA~NULL~2LSRB4165_1770..AB~NULL~RBCP..55\n\nTKN~0RB4165CP~2RB4165061_601%2F71AB~2AJ1212111_710%2F8GAA~NULL~2LSRB4165_1770..AB~NULL~RBCP..55\n\nTKN~0RX6465CP~1RX6465061_2945..51~NULL~1TE4183A00_X523%2FHAA~2064-DE~NULL~RBCP..51~K-MC5~K-RB0\n\n*/\n\n/*\n\nSome sample tokens for custom glasses coming from the distributor\n\navailable\nTKN~0RB2140CP~2RB2140P61_902...AA~2AP3031111_954...AA~NULL~1RB00500681_GRIDFK~NULL~50\nTKN~0RB2140CP~2RB2140P61_902...AA~2AP3031111_954...AA~NULL~1RB00500633_GRIDFK~NULL~50\n\nnot available (uses fallback)\nTKN~0RB3592CP~1RB3592061_001...55~NULL~1TE3941A00_A1812.AA~1LSRB3592_2540..AB~NULL~RBCP..55\nTKN~0RB3592CP~1RB3592061_001...50~NULL~1TE3941A00_A1814.AA~1LSRB3592_1766..AA~NULL~RBCP..50\n\nwith slashes (%2F)\nTKN~0RB4165CP~2RB4165061_601%2F71AB~2AJ1212111_710%2F13AA~NULL~2LSRB4165_1770..AB~NULL~RBCP..55\n\nTKN~0RB4165CP~2RB4165061_601%2F71AB~2AJ1212111_710%2F8GAA~NULL~2LSRB4165_1770..AB~NULL~RBCP..55\n\nTKN~0RX6465CP~1RX6465061_2945..51~NULL~1TE4183A00_X523%2FHAA~2064-DE~NULL~RBCP..51~K-MC5~K-RB0\n\n*/\n\nclass ZipDownloader {\n private remoteLog: RemoteLog = new RemoteLog();\n private static instance: ZipDownloader;\n\n public static getInstance(): ZipDownloader {\n if (!this.instance) {\n this.instance = new ZipDownloader();\n }\n return this.instance;\n }\n\n public downloadZippedGlasses(\n upc: string,\n resolution: AssetResolution,\n singleTexture: number | undefined,\n envConfig: EnvironmentConfig\n ): Promise {\n return new Promise((resolve, reject) => {\n this.tryToDownload(upc, resolution, envConfig)\n .then((blob) => {\n resolve(new GlassesExtractor().unzip(upc, blob, resolution, singleTexture));\n }).catch((e) => {\n logger.error(e);\n reject(new GlassesDownloadError(upc));\n });\n });\n }\n\n private tryToDownload(upc: string, resolution: AssetResolution, envConfig: EnvironmentConfig) {\n const time1 = performance.now();\n\n let glassesUrl: string;\n let requestOptions: RequestInit;\n\n const customDistributorAsset = isDistributorAsset(upc);\n const qaDistributorAsset = isQADistributorAsset(upc);\n\n if (customDistributorAsset) {\n // custom assets requests requires a token, these asset are distributed through a system\n // that automatically generates combinations of custom assets if not available\n glassesUrl = this.getCustomUrl(upc, envConfig);\n requestOptions = {\n headers: {\n 'x-api-key': envConfig.customDistributorKey\n }\n };\n\n } else if (qaDistributorAsset) {\n // this URL is used locally by people that creates the pieces that\n // are combined by above distributor\n glassesUrl = this.getDistributorUrl(upc, envConfig);\n\n } else {\n // this is the classic b3d asset cdn\n glassesUrl = this.getUrl(upc, resolution, envConfig);\n }\n\n let triedLegacyCustom = true;\n const fetchGlasses = (): Promise => {\n return fetch(glassesUrl, requestOptions)\n .then((response: Response) => {\n if (response.ok) {\n logger.debug('glasses archive {} downloaded', response.url);\n const time2 = performance.now();\n const ttime = time2 - time1;\n this.traceDownloadSuccess(upc, ttime);\n return response.blob();\n } else {\n logger.error('glasses download {} failed: [{} {}]',\n response.url, response.status, response.statusText);\n const time2 = performance.now();\n const ttime = time2 - time1;\n this.traceDownloadFailure(upc, ttime);\n switch (response.status) {\n case 403:\n throw new GlassesDownloadForbiddenError(upc);\n case 404:\n throw new GlassesNotFoundError(upc);\n default:\n throw new GlassesDownloadError(upc);\n }\n }\n })\n .catch((reason: GenericError) => {\n logger.error('glasses download {} error {}', glassesUrl, reason);\n\n // if we are downloading a custom asset (TKN) is worth try to download it from legacy bucket\n if (customDistributorAsset && triedLegacyCustom) {\n triedLegacyCustom = false;\n\n logger.debug('try to download the custom asset from legacy bucket');\n glassesUrl = this.getLegacyUrl(upc, '256', envConfig);\n\n // remove the token from the request because it breaks S3 bucket\n requestOptions = {};\n\n return fetchGlasses();\n } else {\n // is possible that the catched error is already been initialised by above promise\n if (reason.genericError) {\n throw reason;\n }\n throw new GlassesDownloadError(glassesUrl);\n }\n });\n };\n\n return new Promise((resolve, reject) => {\n fetchGlasses()\n .then((blob) => {\n if (!!blob) {\n resolve(blob);\n }\n reject(new GlassesDownloadError(`${upc} returned empty blob`));\n })\n .catch((reason: GenericError) => {\n logger.error('glasses download {} error {}', glassesUrl, reason);\n reject(reason);\n });\n });\n }\n\n private getUrl(upc: string, resolution: AssetResolution, envConfig: EnvironmentConfig): string {\n return `${envConfig.b3dHost}/${resolution}/${upc}.zip`;\n }\n\n private getLegacyUrl(upc: string, resolution: AssetResolution, envConfig: EnvironmentConfig): string {\n return `${envConfig.b3dHost}/${resolution}/${upc}.zip`;\n }\n\n private getCustomUrl(tkn: string, envConfig: EnvironmentConfig): string {\n return `${envConfig.customDistributorHost}${envConfig.customDistributorGetPermutation}${tkn}`;\n }\n\n private getDistributorUrl(upc: string, envConfig: EnvironmentConfig): string {\n const baseName = distributorBasename(upc);\n return `${envConfig.b3dHost}/${baseName}/${upc}.zip`;\n }\n\n private traceDownloadSuccess(upc: string, ttime: number) {\n this.remoteLog.sendAppViewSession(\n {\n statusCode: AppViewSessionKeys.GLASSES_OK + AppViewSessionKeys.GLASSES_DOWNLOAD_SUCCESS_UPC,\n statusText: upc,\n }, {\n statusCode: AppViewSessionKeys.GLASSES_OK + AppViewSessionKeys.GLASSES_DOWNLOAD_SUCCESS_TIME,\n statusText: ttime.toString(),\n },\n );\n }\n\n private traceDownloadFailure(upc: string, ttime: number) {\n this.remoteLog.sendAppViewSession(\n {\n statusCode: AppViewSessionKeys.GLASSES_KO + AppViewSessionKeys.GLASSES_DOWNLOAD_FAILURE_UPC,\n statusText: upc,\n }, {\n statusCode: AppViewSessionKeys.GLASSES_KO + AppViewSessionKeys.GLASSES_DOWNLOAD_FAILURE_TIME,\n statusText: ttime.toString(),\n },\n );\n }\n\n}\n\nexport {\n ZipDownloader,\n};\n","import { RemoteLog, RemoteLogConfig } from '@luxottica/vm-remotelog';\nimport { name, version } from '../package.json';\nimport { AssetDecoder } from './AssetDecoder';\nimport { EnvironmentConfig, getEnvironmentConfig } from './config/GlassesApiConfig';\nimport { assetNames } from './constants/AssetNames';\nimport { GlassesEnvironment } from './constants/Environment';\nimport { gltfDefaults } from './constants/GltfDefault';\nimport { MockAssetData } from './constants/MockAssetData';\nimport { GlassesDownloadError } from './error/GlassesDownloadError';\nimport { GlassesDownloadForbiddenError } from './error/GlassesDownloadForbiddenError';\nimport { GlassesNotFoundError } from './error/GlassesNotFoundError';\nimport { isDistributorAsset } from './helpers/AssetHelper';\nimport { AssetResolution } from './interfaces/AssetResolution';\nimport { B3dAsset } from './interfaces/B3dAsset';\nimport { GltfAssetPointer, GltfLodUrls, GltfResponse, MiscUrl } from './interfaces/GltfAsset';\nimport { AppViewSessionKeys } from './remotelog/AppViewSessionKeys';\nimport { ZipDownloader } from './ZipDownloader';\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, 'GlassesDownloader');\n\n// temporary mock function for GLTF misc/DC assets\nconst miscUrls = (envConfig: EnvironmentConfig, upc: string): MiscUrl => {\n return {\n boundsUrl: `${envConfig.gltfHost}/${upc}/webGL/${upc}_misc/bounds.glb`,\n landmarksUrl: `${envConfig.gltfHost}/${upc}/webGL/${upc}_misc/landmarks.glb`,\n };\n};\n\nclass GlassesDownloader {\n\n private remoteLog: RemoteLog = new RemoteLog();\n\n public downloadGltfGlasses(options: {\n upc: string,\n glassesEnvironment: GlassesEnvironment,\n landmarksAndBBox?: boolean\n }): Promise {\n \n /*if (options.glassesEnvironment === GlassesEnvironment.MOCK) {\n return Promise.resolve(this.getMockGltfGlassesUrl(options));\n } else {*/\n const envConfig = getEnvironmentConfig(options.glassesEnvironment);\n const gltfUrl = `${envConfig.gltfHost}/${options.upc}${envConfig.gltfPointer}`;\n\n return fetch(gltfUrl).then((response) => {\n if (response.ok) {\n return response.json();\n } else {\n return Promise.reject(new GlassesDownloadError(`${options.upc} - ${response.status}`));\n }\n }).then((json: GltfResponse) => {\n const assetData = json[options.upc];\n\n // at the moment this is the only way we can understand if the catalog gave us an empty response\n // TODO: ask backend team to improve the answer\n if (!assetData.LOD1 && !assetData.LOD2) {\n return Promise.reject(new GlassesDownloadError(`${options.upc} - missing fundamental LOD`));\n }\n\n const result: GltfAssetPointer = {\n upc: options.upc,\n gltfLodUrls: {},\n nosepadType: assetData.nosepadType,\n fitting: assetData.fitting,\n flare: assetData.flare,\n ...(!!assetData.misc && !!options.landmarksAndBBox && { misc: assetData.misc }),\n fittingExplicitOffset: assetData.fittingExplicitOffset\n };\n\n if (!!assetData.LOD0) { result.gltfLodUrls.lod0 = { ...assetData.LOD0 }; }\n if (!!assetData.LOD1) { result.gltfLodUrls.lod1 = { ...assetData.LOD1 }; }\n if (!!assetData.LOD2) { result.gltfLodUrls.lod2 = { ...assetData.LOD2 }; }\n\n return result;\n });\n //}\n }\n\n private getMockGltfGlassesUrl(options: {\n upc: string,\n glassesEnvironment: GlassesEnvironment,\n landmarksAndBBox?: boolean\n }): GltfAssetPointer {\n const envConfig = getEnvironmentConfig(options.glassesEnvironment);\n\n const assetNumLods = MockAssetData[options.upc].lodNumber;\n const gltfLodUrls: GltfLodUrls = {};\n \n if (assetNumLods === 1) {\n // asset without lods (third-party)\n gltfLodUrls.lod1 = {\n gltfUrl: `${envConfig.gltfHost}/${options.upc}/webGL/${options.upc}_LOD0/${options.upc}.gltf`,\n upcSiUrl: `${envConfig.gltfHost}/${options.upc}/webGL/${options.upc}_LOD0/${options.upc}_si.json`\n };\n } else {\n gltfLodUrls.lod1 = {\n gltfUrl: `${envConfig.gltfHost}/${options.upc}/webGL/${options.upc}_LOD1/${options.upc}.gltf`,\n upcSiUrl: `${envConfig.gltfHost}/${options.upc}/webGL/${options.upc}_LOD1/${options.upc}_si.json`\n };\n\n if (assetNumLods >= 2) {\n gltfLodUrls.lod2 = {\n gltfUrl: `${envConfig.gltfHost}/${options.upc}/webGL/${options.upc}_LOD2/${options.upc}.gltf`,\n upcSiUrl: `${envConfig.gltfHost}/${options.upc}/webGL/${options.upc}_LOD2/${options.upc}_si.json`\n };\n }\n }\n\n return {\n upc: options.upc,\n gltfLodUrls: gltfLodUrls,\n nosepadType: (!!MockAssetData[options.upc]?.nosepad_type) ? MockAssetData[options.upc].nosepad_type : gltfDefaults.nosepad_type,\n fitting: (!!MockAssetData[options.upc]?.fitting) ? MockAssetData[options.upc].fitting : gltfDefaults.fitting,\n flare: (!!MockAssetData[options.upc]?.flare) ? MockAssetData[options.upc].flare : gltfDefaults.flare,\n misc: !!MockAssetData[options.upc]?.misc &&\n options.landmarksAndBBox !== undefined &&\n options.landmarksAndBBox ?\n miscUrls(envConfig, options.upc) : undefined,\n };\n }\n\n public downloadGlasses(options: {\n upc: string,\n resolution: AssetResolution,\n glassesEnvironment: GlassesEnvironment,\n lensMap?: boolean,\n lensBoundingBoxes?: boolean,\n glassesLandmarks?: boolean,\n singleTexture?: number,\n }): Promise {\n const envConfig = getEnvironmentConfig(options.glassesEnvironment);\n\n if (this.shouldDownloadZip(options.upc, envConfig)) {\n return this.downloadZippedGlasses(\n options.upc,\n options.resolution,\n options.singleTexture,\n (options.lensMap) ? true : false,\n (options.lensBoundingBoxes) ? true : false,\n (options.glassesLandmarks) ? true : false,\n envConfig\n );\n } else {\n return this.downloadSeparatedGlasses(\n options.upc,\n options.resolution,\n options.singleTexture,\n (options.lensMap) ? true : false,\n (options.lensBoundingBoxes) ? true : false,\n (options.glassesLandmarks) ? true : false,\n envConfig\n );\n }\n }\n\n private shouldDownloadZip(upc: string, envConfig: EnvironmentConfig) {\n return isDistributorAsset(upc) || envConfig.assetType === 'ZIPPED';\n }\n\n private downloadZippedGlasses(\n upc: string,\n resolution: AssetResolution = '512',\n singleTexture: number | undefined,\n lensMap: boolean,\n lensBoundingBoxes: boolean,\n glassesLandmarks: boolean,\n envConfig: EnvironmentConfig\n ): Promise {\n\n // prepare lensmap url\n const lensMapUrl = `${envConfig.b3dHost}/${resolution}/${upc}/${assetNames.lensMap}`;\n const lensBoundsUrl = `${envConfig.b3dHost}/${resolution}/${upc}/${assetNames.lensBounds}`;\n const glassesLandmarksUrl = `${envConfig.b3dHost}/${resolution}/${upc}/${assetNames.glassesLandmarks}`;\n const qaToolEnv = ['QA_B3D_PROD', 'QA_GLTF_PROD', 'QA_B3D_TEST', 'QA_GLTF_TEST', 'QA_PROD', 'QA_TEST'];\n\n const qaTool = qaToolEnv.includes(envConfig.name);\n\n // download the zip and lensmap if present\n return Promise.all([\n ZipDownloader.getInstance().downloadZippedGlasses(upc, resolution, singleTexture, envConfig),\n (lensMap && !qaTool) ? this.downloadB3dAsset(lensMapUrl) : Promise.resolve(new Blob()),\n (lensBoundingBoxes && !qaTool) ? this.downloadB3dAsset(lensBoundsUrl) : Promise.resolve(new Blob()),\n (glassesLandmarks && !qaTool) ? this.downloadB3dAsset(glassesLandmarksUrl) : Promise.resolve(new Blob()),\n ]).then((responses) => {\n // load the glasses image\n return Promise.all([\n Promise.resolve(responses[0]),\n (responses[1].size > 0) ? AssetDecoder.getImage(responses[1]) : undefined,\n (responses[2].size > 0) ? AssetDecoder.getGLTFAsset(upc, responses[2]) : undefined,\n (responses[3].size > 0) ? AssetDecoder.getGLTFAsset(upc, responses[3]) : undefined,\n ]);\n }).then((glassesAndLensMap) => {\n // TODO is necessary to track download success?\n\n // compose the asset with lensmaps\n const glassesAsset = glassesAndLensMap[0];\n //if landmarks and bboxes option are false we set relative field undefined\n glassesAsset.lensBoundingBox = lensBoundingBoxes ? glassesAsset.lensBoundingBox : undefined;\n glassesAsset.glassesLandmarks = glassesLandmarks ? glassesAsset.glassesLandmarks : undefined;\n // NOTE: QA tool still uses zipped glasses, if we are outside QA tool new assets must be unzipped\n if (!qaTool) {\n glassesAsset.lensMap = glassesAndLensMap[1];\n glassesAsset.lensBoundingBox = glassesAndLensMap[2];\n glassesAsset.glassesLandmarks = glassesAndLensMap[3];\n }\n return Promise.resolve(glassesAsset);\n });\n }\n\n private downloadSeparatedGlasses(\n upc: string,\n resolution: AssetResolution,\n singleTexture: number | undefined,\n lensMap: boolean,\n lensBoundingBoxes: boolean,\n glassesLandmarks: boolean,\n envConfig: EnvironmentConfig\n ): Promise {\n\n // const normalizedUpc = normalizeSize(normalizeRemix(upc));\n\n const b3dUrl = `${envConfig.b3dHost}/${resolution}/${upc}/${assetNames.b3d}`;\n const transparencyUrl = `${envConfig.b3dHost}/${resolution}/${upc}/${assetNames.transparency}`;\n const shadowUrl = `${envConfig.b3dHost}/${resolution}/${upc}/${assetNames.shadow}`;\n const lensMapUrl = `${envConfig.b3dHost}/${resolution}/${upc}/${assetNames.lensMap}`;\n const lensBoundsUrl = `${envConfig.b3dHost}/${resolution}/${upc}/${assetNames.lensBounds}`;\n const glassesLandmarksUrl = `${envConfig.b3dHost}/${resolution}/${upc}/${assetNames.glassesLandmarks}`;\n\n const textureIndexes = (singleTexture !== undefined) ?\n [singleTexture] : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14];\n const textureUrls = textureIndexes.map((x) => {\n return `${envConfig.b3dHost}/${resolution}/${upc}/${assetNames.color(x)}`;\n });\n\n const time1 = performance.now();\n\n return Promise.all([\n this.downloadB3dAsset(b3dUrl),\n this.downloadB3dAsset(transparencyUrl),\n this.downloadB3dAsset(shadowUrl),\n (lensMap) ? this.downloadB3dAsset(lensMapUrl) : Promise.resolve(new Blob()),\n (lensBoundingBoxes) ? this.downloadB3dAsset(lensBoundsUrl) : Promise.resolve(new Blob()),\n (glassesLandmarks) ? this.downloadB3dAsset(glassesLandmarksUrl) : Promise.resolve(new Blob()),\n ...textureUrls.map((url) => this.downloadB3dAsset(url))\n ]).then((responses) => {\n return Promise.all([\n AssetDecoder.getArrayBuffer(responses[0]),\n AssetDecoder.getImage(responses[1]),\n AssetDecoder.getImage(responses[2]),\n (responses[3].size > 0) ? AssetDecoder.getImage(responses[3]) : undefined,\n (responses[4].size > 0) ? AssetDecoder.getGLTFAsset(upc, responses[4]) : undefined,\n (responses[5].size > 0) ? AssetDecoder.getGLTFAsset(upc, responses[5]) : undefined,\n Promise.all(responses.slice(6, responses.length).map((textureResponse) => {\n return AssetDecoder.getImage(textureResponse);\n }))\n ]);\n }).then((assetsResponses) => {\n this.traceDownloadSuccess(upc, performance.now() - time1);\n return {\n upc: upc,\n objModel: assetsResponses[0],\n transparency: assetsResponses[1],\n shadow: assetsResponses[2],\n lensMap: assetsResponses[3],\n lensBoundingBox: assetsResponses[4],\n glassesLandmarks: assetsResponses[5],\n textures: assetsResponses[6],\n resolution: resolution\n };\n }).catch((e) => {\n this.traceDownloadFailure(upc, performance.now() - time1);\n logger.error(e);\n return Promise.reject(e);\n });\n }\n\n // TODO, is this used anymore?\n private glassesArchiveUrls(\n upc: string,\n resolution: AssetResolution,\n singleTexture: number | undefined,\n lensMap: boolean,\n envConfig: EnvironmentConfig\n ): string[] {\n // const normalizedUpc = normalizeSize(normalizeRemix(upc));\n\n const b3dUrl = `${envConfig.b3dHost}/${resolution}/${upc}/${assetNames.b3d}`;\n const transparencyUrl = `${envConfig.b3dHost}/${resolution}/${upc}/${assetNames.transparency}`;\n const shadowUrl = `${envConfig.b3dHost}/${resolution}/${upc}/${assetNames.shadow}`;\n const lensMapUrl = (lensMap) ? `${envConfig.b3dHost}/${resolution}/${upc}/${assetNames.lensMap}` : '';\n\n const textureIndexes = (singleTexture !== undefined) ?\n [singleTexture] : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14];\n const textureUrls = textureIndexes.map((x) => {\n return `${envConfig.b3dHost}/${resolution}/${upc}/${assetNames.color(x)}`;\n });\n\n return [\n b3dUrl,\n transparencyUrl,\n shadowUrl,\n lensMapUrl,\n ...textureUrls\n ];\n }\n\n private downloadB3dAsset(glassesAssetUrl: string): Promise {\n return fetch(glassesAssetUrl)\n .then((response: Response) => {\n if (response.ok) {\n return response.blob();\n } else {\n logger.error('b3d asset {} failed: [{} {}]',\n response.url, response.status, response.statusText);\n switch (response.status) {\n case 403:\n return Promise.reject(new GlassesDownloadForbiddenError(glassesAssetUrl));\n case 404:\n return Promise.reject(new GlassesNotFoundError(glassesAssetUrl));\n default:\n return Promise.reject(new GlassesDownloadError(glassesAssetUrl));\n }\n }\n }).catch((e) => {\n logger.error(e);\n return Promise.reject(new GlassesDownloadError(glassesAssetUrl));\n });\n }\n\n // private downloadGltfAsset(glassesAssetUrl: string): Promise {\n // return fetch(glassesAssetUrl)\n // .then((response: Response) => {\n // if (response.ok) {\n // return response.arrayBuffer();\n // } else {\n // logger.error('gltf asset {} failed: [{} {}]',\n // response.url, response.status, response.statusText);\n // switch (response.status) {\n // case 403:\n // return Promise.reject(new GlassesDownloadForbiddenError(glassesAssetUrl));\n // case 404:\n // return Promise.reject(new GlassesNotFoundError(glassesAssetUrl));\n // default:\n // return Promise.reject(new GlassesDownloadError(glassesAssetUrl));\n // }\n // }\n // }).catch((e) => {\n // logger.error(e);\n // return Promise.reject(new GlassesDownloadError(glassesAssetUrl));\n // });\n // }\n\n private traceDownloadSuccess(upc: string, ttime: number) {\n this.remoteLog.sendAppViewSession(\n {\n statusCode: AppViewSessionKeys.GLASSES_OK + AppViewSessionKeys.GLASSES_DOWNLOAD_SUCCESS_UPC,\n statusText: upc,\n }, {\n statusCode: AppViewSessionKeys.GLASSES_OK + AppViewSessionKeys.GLASSES_DOWNLOAD_SUCCESS_TIME,\n statusText: ttime.toString(),\n },\n );\n }\n\n private traceDownloadFailure(upc: string, ttime: number) {\n this.remoteLog.sendAppViewSession(\n {\n statusCode: AppViewSessionKeys.GLASSES_KO + AppViewSessionKeys.GLASSES_DOWNLOAD_FAILURE_UPC,\n statusText: upc,\n }, {\n statusCode: AppViewSessionKeys.GLASSES_KO + AppViewSessionKeys.GLASSES_DOWNLOAD_FAILURE_TIME,\n statusText: ttime.toString(),\n },\n );\n }\n}\n\nexport {\n GlassesDownloader\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n if (process.env.NODE_ENV !== 'production') {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error(\n 'Minified exception occurred; use the non-minified dev environment ' +\n 'for the full error message and additional helpful warnings.'\n );\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(\n format.replace(/%s/g, function() { return args[argIndex++]; })\n );\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n};\n\nmodule.exports = invariant;\n","export default (function (value) {\n return value === null;\n});","import invariant from 'invariant';\nimport isFunction from './utils/isFunction';\nimport identity from './utils/identity';\nimport isNull from './utils/isNull';\nexport default function createAction(type, payloadCreator, metaCreator) {\n if (payloadCreator === void 0) {\n payloadCreator = identity;\n }\n\n invariant(isFunction(payloadCreator) || isNull(payloadCreator), 'Expected payloadCreator to be a function, undefined or null');\n var finalPayloadCreator = isNull(payloadCreator) || payloadCreator === identity ? identity : function (head) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return head instanceof Error ? head : payloadCreator.apply(void 0, [head].concat(args));\n };\n var hasMeta = isFunction(metaCreator);\n var typeString = type.toString();\n\n var actionCreator = function actionCreator() {\n var payload = finalPayloadCreator.apply(void 0, arguments);\n var action = {\n type: type\n };\n\n if (payload instanceof Error) {\n action.error = true;\n }\n\n if (payload !== undefined) {\n action.payload = payload;\n }\n\n if (hasMeta) {\n action.meta = metaCreator.apply(void 0, arguments);\n }\n\n return action;\n };\n\n actionCreator.toString = function () {\n return typeString;\n };\n\n return actionCreator;\n}","export default (function () {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var initialState = typeof args[args.length - 1] !== 'function' && args.pop();\n var reducers = args;\n\n if (typeof initialState === 'undefined') {\n throw new TypeError('The initial state may not be undefined. If you do not want to set a value for this reducer, you can use null instead of undefined.');\n }\n\n return function (prevState, value) {\n for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n args[_key2 - 2] = arguments[_key2];\n }\n\n var prevStateIsUndefined = typeof prevState === 'undefined';\n var valueIsUndefined = typeof value === 'undefined';\n\n if (prevStateIsUndefined && valueIsUndefined && initialState) {\n return initialState;\n }\n\n return reducers.reduce(function (newState, reducer) {\n return reducer.apply(undefined, [newState, value].concat(args));\n }, prevStateIsUndefined && !valueIsUndefined && initialState ? initialState : prevState);\n };\n});","export default (function (value) {\n if (typeof value !== 'object' || value === null) return false;\n var proto = value;\n\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n\n return Object.getPrototypeOf(value) === proto;\n});","export default (function (value) {\n return typeof Map !== 'undefined' && value instanceof Map;\n});","import isMap from './isMap';\nexport default function ownKeys(object) {\n if (isMap(object)) {\n // We are using loose transforms in babel. Here we are trying to convert an\n // interable to an array. Loose mode expects everything to already be an\n // array. The problem is that our eslint rules encourage us to prefer\n // spread over Array.from.\n //\n // Instead of disabling loose mode we simply disable the warning.\n // eslint-disable-next-line unicorn/prefer-spread\n return Array.from(object.keys());\n }\n\n if (typeof Reflect !== 'undefined' && typeof Reflect.ownKeys === 'function') {\n return Reflect.ownKeys(object);\n }\n\n var keys = Object.getOwnPropertyNames(object);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n keys = keys.concat(Object.getOwnPropertySymbols(object));\n }\n\n return keys;\n}","export var DEFAULT_NAMESPACE = '/';\nexport var ACTION_TYPE_DELIMITER = '||';","import isMap from './isMap';\nexport default function get(key, x) {\n return isMap(x) ? x.get(key) : x[key];\n}","import { DEFAULT_NAMESPACE, ACTION_TYPE_DELIMITER } from '../constants';\nimport ownKeys from './ownKeys';\nimport get from './get';\nexport default (function (predicate) {\n return function flatten(map, _temp, partialFlatMap, partialFlatActionType) {\n var _ref = _temp === void 0 ? {} : _temp,\n _ref$namespace = _ref.namespace,\n namespace = _ref$namespace === void 0 ? DEFAULT_NAMESPACE : _ref$namespace,\n prefix = _ref.prefix;\n\n if (partialFlatMap === void 0) {\n partialFlatMap = {};\n }\n\n if (partialFlatActionType === void 0) {\n partialFlatActionType = '';\n }\n\n function connectNamespace(type) {\n var _ref2;\n\n if (!partialFlatActionType) return type;\n var types = type.toString().split(ACTION_TYPE_DELIMITER);\n var partials = partialFlatActionType.split(ACTION_TYPE_DELIMITER);\n return (_ref2 = []).concat.apply(_ref2, partials.map(function (p) {\n return types.map(function (t) {\n return \"\" + p + namespace + t;\n });\n })).join(ACTION_TYPE_DELIMITER);\n }\n\n function connectPrefix(type) {\n if (partialFlatActionType || !prefix || prefix && new RegExp(\"^\" + prefix + namespace).test(type)) {\n return type;\n }\n\n return \"\" + prefix + namespace + type;\n }\n\n ownKeys(map).forEach(function (type) {\n var nextNamespace = connectPrefix(connectNamespace(type));\n var mapValue = get(type, map);\n\n if (predicate(mapValue)) {\n flatten(mapValue, {\n namespace: namespace,\n prefix: prefix\n }, partialFlatMap, nextNamespace);\n } else {\n partialFlatMap[nextNamespace] = mapValue;\n }\n });\n return partialFlatMap;\n };\n});","import isPlainObject from './isPlainObject';\nimport isMap from './isMap';\nimport hasGeneratorInterface from './hasGeneratorInterface';\nimport flattenWhenNode from './flattenWhenNode';\nexport default flattenWhenNode(function (node) {\n return (isPlainObject(node) || isMap(node)) && !hasGeneratorInterface(node);\n});","import ownKeys from './ownKeys';\nexport default function hasGeneratorInterface(handler) {\n var keys = ownKeys(handler);\n var hasOnlyInterfaceNames = keys.every(function (ownKey) {\n return ownKey === 'next' || ownKey === 'throw';\n });\n return keys.length && keys.length <= 2 && hasOnlyInterfaceNames;\n}","export default (function (value) {\n return value.toString();\n});","import reduceReducers from 'reduce-reducers';\nimport invariant from 'invariant';\nimport isPlainObject from './utils/isPlainObject';\nimport isMap from './utils/isMap';\nimport ownKeys from './utils/ownKeys';\nimport flattenReducerMap from './utils/flattenReducerMap';\nimport handleAction from './handleAction';\nimport get from './utils/get';\nexport default function handleActions(handlers, defaultState, options) {\n if (options === void 0) {\n options = {};\n }\n\n invariant(isPlainObject(handlers) || isMap(handlers), 'Expected handlers to be a plain object.');\n var flattenedReducerMap = flattenReducerMap(handlers, options);\n var reducers = ownKeys(flattenedReducerMap).map(function (type) {\n return handleAction(type, get(type, flattenedReducerMap), defaultState);\n });\n var reducer = reduceReducers.apply(void 0, reducers.concat([defaultState]));\n return function (state, action) {\n if (state === void 0) {\n state = defaultState;\n }\n\n return reducer(state, action);\n };\n}","import invariant from 'invariant';\nimport isFunction from './utils/isFunction';\nimport isPlainObject from './utils/isPlainObject';\nimport identity from './utils/identity';\nimport isNil from './utils/isNil';\nimport isUndefined from './utils/isUndefined';\nimport toString from './utils/toString';\nimport { ACTION_TYPE_DELIMITER } from './constants';\nexport default function handleAction(type, reducer, defaultState) {\n if (reducer === void 0) {\n reducer = identity;\n }\n\n var types = toString(type).split(ACTION_TYPE_DELIMITER);\n invariant(!isUndefined(defaultState), \"defaultState for reducer handling \" + types.join(', ') + \" should be defined\");\n invariant(isFunction(reducer) || isPlainObject(reducer), 'Expected reducer to be a function or object with next and throw reducers');\n\n var _ref = isFunction(reducer) ? [reducer, reducer] : [reducer.next, reducer.throw].map(function (aReducer) {\n return isNil(aReducer) ? identity : aReducer;\n }),\n nextReducer = _ref[0],\n throwReducer = _ref[1];\n\n return function (state, action) {\n if (state === void 0) {\n state = defaultState;\n }\n\n var actionType = action.type;\n\n if (!actionType || types.indexOf(toString(actionType)) === -1) {\n return state;\n }\n\n return (action.error === true ? throwReducer : nextReducer)(state, action);\n };\n}","export default (function (value) {\n return value === undefined;\n});","export default (function (value) {\n return value === null || value === undefined;\n});","export default (function (value) {\n return value;\n});","export default (function (value) {\n return typeof value === 'function';\n});"],"names":["GlassesEnvironment","hosts","MOCK","name","catalogHost","transitionsEndpoint","b3dHost","gltfHost","gltfPointer","customDistributorHost","customDistributorKey","customDistributorGetPermutation","assetType","PROD","PROD_LEGACY","TEST","TEST_LEGACY","TEST_TRANSITIONS","QA_GLTF_PROD","QA_GLTF_TEST","QA_B3D_PROD","QA_B3D_TEST","DISTRIBUTOR_VALIDATION_STAGING","DISTRIBUTOR_APPROVATION_STAGING","DISTRIBUTOR_VALIDATION_PRODUCTION","DISTRIBUTOR_APPROVATION_PRODUCTION","getEnvironmentConfig","env","upcsAvailabilityApi","CatalogueApiConfig","config","upcString","envConfig","includes","key","replace","notAvailableResponse","upc","available","transitions","lods","glassesType","undefined","getUpc","isAvailable","isTransition","standardResponse","catalogResponse","resolutions","length","transitionsResolutions","getGlassesType","logger","RemoteLogConfig","getLoggerInfo","version","fetchCatalogResponse","apiEndpoint","requestInit","method","headers","mode","referrerPolicy","fetch","CatalogService","Promise","resolve","qaToolAvailability","then","response","ok","json","Error","status","split","map","qaToolMultipleAvailability","upcs","forEach","push","result","color","e","error","Catalog","getUpcAvailability","debug","getMultipleUpcAvailability","upcList","reduce","previous","current","downloadTransitionLenses","AppViewSessionKeys","AssetDecoder","getArrayBuffer","blob","reject","reader","FileReader","onerror","onload","readAsArrayBuffer","getZippedImage","imagePromise","async","getImage","url","URL","createObjectURL","img","Image","crossOrigin","revokeObjectURL","src","getImageBase64","readAsDataURL","getZippedGLTF","gltfPromise","getGLTFAsset","this","arrayBuffer","assetNames","index","gltfDefaults","MockAssetData","GenericError","type","message","genericError","Object","setPrototypeOf","prototype","GlassesDownloadError","GlassesDownloadForbiddenError","GlassesNotFoundError","isDistributorAsset","startsWith","ALL_TEXTURES","GlassesExtractor","glassesZip","resolution","singleTexture","colorIndexes","unzipGlasses","time1","performance","now","time2","jszip","JSZip","loadAsync","extractFilesFromZipArchive","glassesExtracted","createGlassesDataFromExtractedArchive","zipUpc","promises","folderName","extractB3D","extractMult","extractShadow","extractLensMap","extractBoundingBoxes","extractLandmarks","extractColors","promise","all","i","zipFolder","folder","file","colorPromise","ttime","multPromise","mult","shadowPromise","shadow","lensmapFile","lensmapPromise","lensmap","byteLength","lensBoundsFile","lensBoundsPromise","bounds","landmarksFile","landmarksPromise","landmarks","b3dPromise","b3d","textureIndexes","objModel","transparency","lensMap","lensBoundingBox","glassesLandmarks","textures","slice","ZipDownloader","remoteLog","RemoteLog","tryToDownload","unzip","catch","glassesUrl","requestOptions","customDistributorAsset","qaDistributorAsset","dash","underscore","isQADistributorAsset","getCustomUrl","getDistributorUrl","getUrl","triedLegacyCustom","fetchGlasses","traceDownloadSuccess","statusText","traceDownloadFailure","reason","getLegacyUrl","tkn","baseName","distributorBasename","sendAppViewSession","statusCode","GLASSES_OK","GLASSES_DOWNLOAD_SUCCESS_UPC","GLASSES_DOWNLOAD_SUCCESS_TIME","toString","GLASSES_KO","GLASSES_DOWNLOAD_FAILURE_UPC","GLASSES_DOWNLOAD_FAILURE_TIME","instance","miscUrls","boundsUrl","landmarksUrl","GlassesDownloader","options","glassesEnvironment","gltfUrl","assetData","LOD1","LOD2","gltfLodUrls","nosepadType","fitting","flare","misc","landmarksAndBBox","fittingExplicitOffset","LOD0","lod0","lod1","lod2","assetNumLods","lodNumber","upcSiUrl","_a","nosepad_type","_b","_c","_d","shouldDownloadZip","downloadZippedGlasses","lensBoundingBoxes","downloadSeparatedGlasses","lensMapUrl","lensBoundsUrl","glassesLandmarksUrl","qaToolEnv","qaTool","getInstance","downloadB3dAsset","Blob","responses","size","glassesAndLensMap","glassesAsset","b3dUrl","transparencyUrl","shadowUrl","textureUrls","x","textureResponse","assetsResponses","glassesAssetUrl","module","exports","condition","format","a","b","c","d","f","args","argIndex","framesToPop","value","createAction","payloadCreator","metaCreator","identity","invariant","isFunction","isNull","finalPayloadCreator","head","_len","arguments","Array","_key","apply","concat","hasMeta","typeString","actionCreator","payload","action","meta","initialState","pop","reducers","TypeError","prevState","_len2","_key2","prevStateIsUndefined","valueIsUndefined","newState","reducer","proto","getPrototypeOf","Map","ownKeys","object","isMap","from","keys","Reflect","getOwnPropertyNames","getOwnPropertySymbols","ACTION_TYPE_DELIMITER","get","predicate","node","isPlainObject","handler","hasOnlyInterfaceNames","every","ownKey","hasGeneratorInterface","flatten","_temp","partialFlatMap","partialFlatActionType","_ref","_ref$namespace","namespace","prefix","nextNamespace","RegExp","test","connectPrefix","_ref2","types","partials","p","t","join","connectNamespace","mapValue","handleActions","handlers","defaultState","flattenedReducerMap","flattenReducerMap","next","throw","aReducer","nextReducer","throwReducer","state","actionType","indexOf","handleAction","reduceReducers"],"sourceRoot":""}