@angular/common 19.0.0-next.1 → 19.0.0-next.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/fesm2022/common.mjs +183 -170
- package/fesm2022/common.mjs.map +1 -1
- package/fesm2022/http/testing.mjs +8 -8
- package/fesm2022/http/testing.mjs.map +1 -1
- package/fesm2022/http.mjs +56 -49
- package/fesm2022/http.mjs.map +1 -1
- package/fesm2022/testing.mjs +31 -27
- package/fesm2022/testing.mjs.map +1 -1
- package/fesm2022/upgrade.mjs +5 -5
- package/fesm2022/upgrade.mjs.map +1 -1
- package/http/index.d.ts +2 -1
- package/http/testing/index.d.ts +1 -1
- package/index.d.ts +65 -5
- package/locales/af-NA.d.ts +1 -1
- package/locales/af-NA.mjs +2 -2
- package/locales/af.d.ts +1 -1
- package/locales/af.mjs +2 -2
- package/locales/agq.d.ts +1 -1
- package/locales/agq.mjs +2 -2
- package/locales/ak.d.ts +1 -1
- package/locales/ak.mjs +2 -2
- package/locales/am.d.ts +1 -1
- package/locales/am.mjs +2 -2
- package/locales/ar-AE.d.ts +1 -1
- package/locales/ar-AE.mjs +2 -2
- package/locales/ar-BH.d.ts +1 -1
- package/locales/ar-BH.mjs +2 -2
- package/locales/ar-DJ.d.ts +1 -1
- package/locales/ar-DJ.mjs +2 -2
- package/locales/ar-DZ.d.ts +1 -1
- package/locales/ar-DZ.mjs +2 -2
- package/locales/ar-EG.d.ts +1 -1
- package/locales/ar-EG.mjs +2 -2
- package/locales/ar-EH.d.ts +1 -1
- package/locales/ar-EH.mjs +2 -2
- package/locales/ar-ER.d.ts +1 -1
- package/locales/ar-ER.mjs +2 -2
- package/locales/ar-IL.d.ts +1 -1
- package/locales/ar-IL.mjs +2 -2
- package/locales/ar-IQ.d.ts +1 -1
- package/locales/ar-IQ.mjs +2 -2
- package/locales/ar-JO.d.ts +1 -1
- package/locales/ar-JO.mjs +2 -2
- package/locales/ar-KM.d.ts +1 -1
- package/locales/ar-KM.mjs +2 -2
- package/locales/ar-KW.d.ts +1 -1
- package/locales/ar-KW.mjs +2 -2
- package/locales/ar-LB.d.ts +1 -1
- package/locales/ar-LB.mjs +2 -2
- package/locales/ar-LY.d.ts +1 -1
- package/locales/ar-LY.mjs +2 -2
- package/locales/ar-MA.d.ts +1 -1
- package/locales/ar-MA.mjs +2 -2
- package/locales/ar-MR.d.ts +1 -1
- package/locales/ar-MR.mjs +2 -2
- package/locales/ar-OM.d.ts +1 -1
- package/locales/ar-OM.mjs +2 -2
- package/locales/ar-PS.d.ts +1 -1
- package/locales/ar-PS.mjs +2 -2
- package/locales/ar-QA.d.ts +1 -1
- package/locales/ar-QA.mjs +2 -2
- package/locales/ar-SA.d.ts +1 -1
- package/locales/ar-SA.mjs +2 -2
- package/locales/ar-SD.d.ts +1 -1
- package/locales/ar-SD.mjs +2 -2
- package/locales/ar-SO.d.ts +1 -1
- package/locales/ar-SO.mjs +2 -2
- package/locales/ar-SS.d.ts +1 -1
- package/locales/ar-SS.mjs +2 -2
- package/locales/ar-SY.d.ts +1 -1
- package/locales/ar-SY.mjs +2 -2
- package/locales/ar-TD.d.ts +1 -1
- package/locales/ar-TD.mjs +2 -2
- package/locales/ar-TN.d.ts +1 -1
- package/locales/ar-TN.mjs +2 -2
- package/locales/ar-YE.d.ts +1 -1
- package/locales/ar-YE.mjs +2 -2
- package/locales/ar.d.ts +1 -1
- package/locales/ar.mjs +2 -2
- package/locales/as.d.ts +1 -1
- package/locales/as.mjs +2 -2
- package/locales/asa.d.ts +1 -1
- package/locales/asa.mjs +2 -2
- package/locales/ast.d.ts +1 -1
- package/locales/ast.mjs +2 -2
- package/locales/az-Cyrl.d.ts +1 -1
- package/locales/az-Cyrl.mjs +2 -2
- package/locales/az-Latn.d.ts +1 -1
- package/locales/az-Latn.mjs +2 -2
- package/locales/az.d.ts +1 -1
- package/locales/az.mjs +2 -2
- package/locales/bas.d.ts +1 -1
- package/locales/bas.mjs +2 -2
- package/locales/be-tarask.d.ts +1 -1
- package/locales/be-tarask.mjs +2 -2
- package/locales/be.d.ts +1 -1
- package/locales/be.mjs +2 -2
- package/locales/bem.d.ts +1 -1
- package/locales/bem.mjs +2 -2
- package/locales/bez.d.ts +1 -1
- package/locales/bez.mjs +2 -2
- package/locales/bg.d.ts +1 -1
- package/locales/bg.mjs +2 -2
- package/locales/bm.d.ts +1 -1
- package/locales/bm.mjs +2 -2
- package/locales/bn-IN.d.ts +1 -1
- package/locales/bn-IN.mjs +2 -2
- package/locales/bn.d.ts +1 -1
- package/locales/bn.mjs +2 -2
- package/locales/bo-IN.d.ts +1 -1
- package/locales/bo-IN.mjs +2 -2
- package/locales/bo.d.ts +1 -1
- package/locales/bo.mjs +2 -2
- package/locales/br.d.ts +1 -1
- package/locales/br.mjs +2 -2
- package/locales/brx.d.ts +1 -1
- package/locales/brx.mjs +2 -2
- package/locales/bs-Cyrl.d.ts +1 -1
- package/locales/bs-Cyrl.mjs +2 -2
- package/locales/bs-Latn.d.ts +1 -1
- package/locales/bs-Latn.mjs +2 -2
- package/locales/bs.d.ts +1 -1
- package/locales/bs.mjs +2 -2
- package/locales/ca-AD.d.ts +1 -1
- package/locales/ca-AD.mjs +2 -2
- package/locales/ca-ES-valencia.d.ts +1 -1
- package/locales/ca-ES-valencia.mjs +2 -2
- package/locales/ca-FR.d.ts +1 -1
- package/locales/ca-FR.mjs +2 -2
- package/locales/ca-IT.d.ts +1 -1
- package/locales/ca-IT.mjs +2 -2
- package/locales/ca.d.ts +1 -1
- package/locales/ca.mjs +2 -2
- package/locales/ccp-IN.d.ts +1 -1
- package/locales/ccp-IN.mjs +2 -2
- package/locales/ccp.d.ts +1 -1
- package/locales/ccp.mjs +2 -2
- package/locales/ce.d.ts +1 -1
- package/locales/ce.mjs +2 -2
- package/locales/ceb.d.ts +1 -1
- package/locales/ceb.mjs +2 -2
- package/locales/cgg.d.ts +1 -1
- package/locales/cgg.mjs +2 -2
- package/locales/chr.d.ts +1 -1
- package/locales/chr.mjs +2 -2
- package/locales/ckb-IR.d.ts +1 -1
- package/locales/ckb-IR.mjs +2 -2
- package/locales/ckb.d.ts +1 -1
- package/locales/ckb.mjs +2 -2
- package/locales/cs.d.ts +1 -1
- package/locales/cs.mjs +2 -2
- package/locales/cy.d.ts +1 -1
- package/locales/cy.mjs +2 -2
- package/locales/da-GL.d.ts +1 -1
- package/locales/da-GL.mjs +2 -2
- package/locales/da.d.ts +1 -1
- package/locales/da.mjs +2 -2
- package/locales/dav.d.ts +1 -1
- package/locales/dav.mjs +2 -2
- package/locales/de-AT.d.ts +1 -1
- package/locales/de-AT.mjs +2 -2
- package/locales/de-BE.d.ts +1 -1
- package/locales/de-BE.mjs +2 -2
- package/locales/de-CH.d.ts +1 -1
- package/locales/de-CH.mjs +2 -2
- package/locales/de-IT.d.ts +1 -1
- package/locales/de-IT.mjs +2 -2
- package/locales/de-LI.d.ts +1 -1
- package/locales/de-LI.mjs +2 -2
- package/locales/de-LU.d.ts +1 -1
- package/locales/de-LU.mjs +2 -2
- package/locales/de.d.ts +1 -1
- package/locales/de.mjs +2 -2
- package/locales/dje.d.ts +1 -1
- package/locales/dje.mjs +2 -2
- package/locales/doi.d.ts +1 -1
- package/locales/doi.mjs +2 -2
- package/locales/dsb.d.ts +1 -1
- package/locales/dsb.mjs +2 -2
- package/locales/dua.d.ts +1 -1
- package/locales/dua.mjs +2 -2
- package/locales/dyo.d.ts +1 -1
- package/locales/dyo.mjs +2 -2
- package/locales/dz.d.ts +1 -1
- package/locales/dz.mjs +2 -2
- package/locales/ebu.d.ts +1 -1
- package/locales/ebu.mjs +2 -2
- package/locales/ee-TG.d.ts +1 -1
- package/locales/ee-TG.mjs +2 -2
- package/locales/ee.d.ts +1 -1
- package/locales/ee.mjs +2 -2
- package/locales/el-CY.d.ts +1 -1
- package/locales/el-CY.mjs +2 -2
- package/locales/el.d.ts +1 -1
- package/locales/el.mjs +2 -2
- package/locales/en-001.d.ts +1 -1
- package/locales/en-001.mjs +2 -2
- package/locales/en-150.d.ts +1 -1
- package/locales/en-150.mjs +2 -2
- package/locales/en-AE.d.ts +1 -1
- package/locales/en-AE.mjs +2 -2
- package/locales/en-AG.d.ts +1 -1
- package/locales/en-AG.mjs +2 -2
- package/locales/en-AI.d.ts +1 -1
- package/locales/en-AI.mjs +2 -2
- package/locales/en-AS.d.ts +1 -1
- package/locales/en-AS.mjs +2 -2
- package/locales/en-AT.d.ts +1 -1
- package/locales/en-AT.mjs +2 -2
- package/locales/en-AU.d.ts +1 -1
- package/locales/en-AU.mjs +2 -2
- package/locales/en-BB.d.ts +1 -1
- package/locales/en-BB.mjs +2 -2
- package/locales/en-BE.d.ts +1 -1
- package/locales/en-BE.mjs +2 -2
- package/locales/en-BI.d.ts +1 -1
- package/locales/en-BI.mjs +2 -2
- package/locales/en-BM.d.ts +1 -1
- package/locales/en-BM.mjs +2 -2
- package/locales/en-BS.d.ts +1 -1
- package/locales/en-BS.mjs +2 -2
- package/locales/en-BW.d.ts +1 -1
- package/locales/en-BW.mjs +2 -2
- package/locales/en-BZ.d.ts +1 -1
- package/locales/en-BZ.mjs +2 -2
- package/locales/en-CA.d.ts +1 -1
- package/locales/en-CA.mjs +2 -2
- package/locales/en-CC.d.ts +1 -1
- package/locales/en-CC.mjs +2 -2
- package/locales/en-CH.d.ts +1 -1
- package/locales/en-CH.mjs +2 -2
- package/locales/en-CK.d.ts +1 -1
- package/locales/en-CK.mjs +2 -2
- package/locales/en-CM.d.ts +1 -1
- package/locales/en-CM.mjs +2 -2
- package/locales/en-CX.d.ts +1 -1
- package/locales/en-CX.mjs +2 -2
- package/locales/en-CY.d.ts +1 -1
- package/locales/en-CY.mjs +2 -2
- package/locales/en-DE.d.ts +1 -1
- package/locales/en-DE.mjs +2 -2
- package/locales/en-DG.d.ts +1 -1
- package/locales/en-DG.mjs +2 -2
- package/locales/en-DK.d.ts +1 -1
- package/locales/en-DK.mjs +2 -2
- package/locales/en-DM.d.ts +1 -1
- package/locales/en-DM.mjs +2 -2
- package/locales/en-ER.d.ts +1 -1
- package/locales/en-ER.mjs +2 -2
- package/locales/en-FI.d.ts +1 -1
- package/locales/en-FI.mjs +2 -2
- package/locales/en-FJ.d.ts +1 -1
- package/locales/en-FJ.mjs +2 -2
- package/locales/en-FK.d.ts +1 -1
- package/locales/en-FK.mjs +2 -2
- package/locales/en-FM.d.ts +1 -1
- package/locales/en-FM.mjs +2 -2
- package/locales/en-GB.d.ts +1 -1
- package/locales/en-GB.mjs +2 -2
- package/locales/en-GD.d.ts +1 -1
- package/locales/en-GD.mjs +2 -2
- package/locales/en-GG.d.ts +1 -1
- package/locales/en-GG.mjs +2 -2
- package/locales/en-GH.d.ts +1 -1
- package/locales/en-GH.mjs +2 -2
- package/locales/en-GI.d.ts +1 -1
- package/locales/en-GI.mjs +2 -2
- package/locales/en-GM.d.ts +1 -1
- package/locales/en-GM.mjs +2 -2
- package/locales/en-GU.d.ts +1 -1
- package/locales/en-GU.mjs +2 -2
- package/locales/en-GY.d.ts +1 -1
- package/locales/en-GY.mjs +2 -2
- package/locales/en-HK.d.ts +1 -1
- package/locales/en-HK.mjs +2 -2
- package/locales/en-IE.d.ts +1 -1
- package/locales/en-IE.mjs +2 -2
- package/locales/en-IL.d.ts +1 -1
- package/locales/en-IL.mjs +2 -2
- package/locales/en-IM.d.ts +1 -1
- package/locales/en-IM.mjs +2 -2
- package/locales/en-IN.d.ts +1 -1
- package/locales/en-IN.mjs +2 -2
- package/locales/en-IO.d.ts +1 -1
- package/locales/en-IO.mjs +2 -2
- package/locales/en-JE.d.ts +1 -1
- package/locales/en-JE.mjs +2 -2
- package/locales/en-JM.d.ts +1 -1
- package/locales/en-JM.mjs +2 -2
- package/locales/en-KE.d.ts +1 -1
- package/locales/en-KE.mjs +2 -2
- package/locales/en-KI.d.ts +1 -1
- package/locales/en-KI.mjs +2 -2
- package/locales/en-KN.d.ts +1 -1
- package/locales/en-KN.mjs +2 -2
- package/locales/en-KY.d.ts +1 -1
- package/locales/en-KY.mjs +2 -2
- package/locales/en-LC.d.ts +1 -1
- package/locales/en-LC.mjs +2 -2
- package/locales/en-LR.d.ts +1 -1
- package/locales/en-LR.mjs +2 -2
- package/locales/en-LS.d.ts +1 -1
- package/locales/en-LS.mjs +2 -2
- package/locales/en-MG.d.ts +1 -1
- package/locales/en-MG.mjs +2 -2
- package/locales/en-MH.d.ts +1 -1
- package/locales/en-MH.mjs +2 -2
- package/locales/en-MO.d.ts +1 -1
- package/locales/en-MO.mjs +2 -2
- package/locales/en-MP.d.ts +1 -1
- package/locales/en-MP.mjs +2 -2
- package/locales/en-MS.d.ts +1 -1
- package/locales/en-MS.mjs +2 -2
- package/locales/en-MT.d.ts +1 -1
- package/locales/en-MT.mjs +2 -2
- package/locales/en-MU.d.ts +1 -1
- package/locales/en-MU.mjs +2 -2
- package/locales/en-MV.d.ts +1 -1
- package/locales/en-MV.mjs +2 -2
- package/locales/en-MW.d.ts +1 -1
- package/locales/en-MW.mjs +2 -2
- package/locales/en-MY.d.ts +1 -1
- package/locales/en-MY.mjs +2 -2
- package/locales/en-NA.d.ts +1 -1
- package/locales/en-NA.mjs +2 -2
- package/locales/en-NF.d.ts +1 -1
- package/locales/en-NF.mjs +2 -2
- package/locales/en-NG.d.ts +1 -1
- package/locales/en-NG.mjs +2 -2
- package/locales/en-NL.d.ts +1 -1
- package/locales/en-NL.mjs +2 -2
- package/locales/en-NR.d.ts +1 -1
- package/locales/en-NR.mjs +2 -2
- package/locales/en-NU.d.ts +1 -1
- package/locales/en-NU.mjs +2 -2
- package/locales/en-NZ.d.ts +1 -1
- package/locales/en-NZ.mjs +2 -2
- package/locales/en-PG.d.ts +1 -1
- package/locales/en-PG.mjs +2 -2
- package/locales/en-PH.d.ts +1 -1
- package/locales/en-PH.mjs +2 -2
- package/locales/en-PK.d.ts +1 -1
- package/locales/en-PK.mjs +2 -2
- package/locales/en-PN.d.ts +1 -1
- package/locales/en-PN.mjs +2 -2
- package/locales/en-PR.d.ts +1 -1
- package/locales/en-PR.mjs +2 -2
- package/locales/en-PW.d.ts +1 -1
- package/locales/en-PW.mjs +2 -2
- package/locales/en-RW.d.ts +1 -1
- package/locales/en-RW.mjs +2 -2
- package/locales/en-SB.d.ts +1 -1
- package/locales/en-SB.mjs +2 -2
- package/locales/en-SC.d.ts +1 -1
- package/locales/en-SC.mjs +2 -2
- package/locales/en-SD.d.ts +1 -1
- package/locales/en-SD.mjs +2 -2
- package/locales/en-SE.d.ts +1 -1
- package/locales/en-SE.mjs +2 -2
- package/locales/en-SG.d.ts +1 -1
- package/locales/en-SG.mjs +2 -2
- package/locales/en-SH.d.ts +1 -1
- package/locales/en-SH.mjs +2 -2
- package/locales/en-SI.d.ts +1 -1
- package/locales/en-SI.mjs +2 -2
- package/locales/en-SL.d.ts +1 -1
- package/locales/en-SL.mjs +2 -2
- package/locales/en-SS.d.ts +1 -1
- package/locales/en-SS.mjs +2 -2
- package/locales/en-SX.d.ts +1 -1
- package/locales/en-SX.mjs +2 -2
- package/locales/en-SZ.d.ts +1 -1
- package/locales/en-SZ.mjs +2 -2
- package/locales/en-TC.d.ts +1 -1
- package/locales/en-TC.mjs +2 -2
- package/locales/en-TK.d.ts +1 -1
- package/locales/en-TK.mjs +2 -2
- package/locales/en-TO.d.ts +1 -1
- package/locales/en-TO.mjs +2 -2
- package/locales/en-TT.d.ts +1 -1
- package/locales/en-TT.mjs +2 -2
- package/locales/en-TV.d.ts +1 -1
- package/locales/en-TV.mjs +2 -2
- package/locales/en-TZ.d.ts +1 -1
- package/locales/en-TZ.mjs +2 -2
- package/locales/en-UG.d.ts +1 -1
- package/locales/en-UG.mjs +2 -2
- package/locales/en-UM.d.ts +1 -1
- package/locales/en-UM.mjs +2 -2
- package/locales/en-VC.d.ts +1 -1
- package/locales/en-VC.mjs +2 -2
- package/locales/en-VG.d.ts +1 -1
- package/locales/en-VG.mjs +2 -2
- package/locales/en-VI.d.ts +1 -1
- package/locales/en-VI.mjs +2 -2
- package/locales/en-VU.d.ts +1 -1
- package/locales/en-VU.mjs +2 -2
- package/locales/en-WS.d.ts +1 -1
- package/locales/en-WS.mjs +2 -2
- package/locales/en-ZA.d.ts +1 -1
- package/locales/en-ZA.mjs +2 -2
- package/locales/en-ZM.d.ts +1 -1
- package/locales/en-ZM.mjs +2 -2
- package/locales/en-ZW.d.ts +1 -1
- package/locales/en-ZW.mjs +2 -2
- package/locales/en.d.ts +1 -1
- package/locales/en.mjs +2 -2
- package/locales/eo.d.ts +1 -1
- package/locales/eo.mjs +2 -2
- package/locales/es-419.d.ts +1 -1
- package/locales/es-419.mjs +2 -2
- package/locales/es-AR.d.ts +1 -1
- package/locales/es-AR.mjs +2 -2
- package/locales/es-BO.d.ts +1 -1
- package/locales/es-BO.mjs +2 -2
- package/locales/es-BR.d.ts +1 -1
- package/locales/es-BR.mjs +2 -2
- package/locales/es-BZ.d.ts +1 -1
- package/locales/es-BZ.mjs +2 -2
- package/locales/es-CL.d.ts +1 -1
- package/locales/es-CL.mjs +2 -2
- package/locales/es-CO.d.ts +1 -1
- package/locales/es-CO.mjs +2 -2
- package/locales/es-CR.d.ts +1 -1
- package/locales/es-CR.mjs +2 -2
- package/locales/es-CU.d.ts +1 -1
- package/locales/es-CU.mjs +2 -2
- package/locales/es-DO.d.ts +1 -1
- package/locales/es-DO.mjs +2 -2
- package/locales/es-EA.d.ts +1 -1
- package/locales/es-EA.mjs +2 -2
- package/locales/es-EC.d.ts +1 -1
- package/locales/es-EC.mjs +2 -2
- package/locales/es-GQ.d.ts +1 -1
- package/locales/es-GQ.mjs +2 -2
- package/locales/es-GT.d.ts +1 -1
- package/locales/es-GT.mjs +2 -2
- package/locales/es-HN.d.ts +1 -1
- package/locales/es-HN.mjs +2 -2
- package/locales/es-IC.d.ts +1 -1
- package/locales/es-IC.mjs +2 -2
- package/locales/es-MX.d.ts +1 -1
- package/locales/es-MX.mjs +2 -2
- package/locales/es-NI.d.ts +1 -1
- package/locales/es-NI.mjs +2 -2
- package/locales/es-PA.d.ts +1 -1
- package/locales/es-PA.mjs +2 -2
- package/locales/es-PE.d.ts +1 -1
- package/locales/es-PE.mjs +2 -2
- package/locales/es-PH.d.ts +1 -1
- package/locales/es-PH.mjs +2 -2
- package/locales/es-PR.d.ts +1 -1
- package/locales/es-PR.mjs +2 -2
- package/locales/es-PY.d.ts +1 -1
- package/locales/es-PY.mjs +2 -2
- package/locales/es-SV.d.ts +1 -1
- package/locales/es-SV.mjs +2 -2
- package/locales/es-US.d.ts +1 -1
- package/locales/es-US.mjs +2 -2
- package/locales/es-UY.d.ts +1 -1
- package/locales/es-UY.mjs +2 -2
- package/locales/es-VE.d.ts +1 -1
- package/locales/es-VE.mjs +2 -2
- package/locales/es.d.ts +1 -1
- package/locales/es.mjs +2 -2
- package/locales/et.d.ts +1 -1
- package/locales/et.mjs +2 -2
- package/locales/eu.d.ts +1 -1
- package/locales/eu.mjs +2 -2
- package/locales/ewo.d.ts +1 -1
- package/locales/ewo.mjs +2 -2
- package/locales/extra/af-NA.d.ts +1 -1
- package/locales/extra/af-NA.mjs +2 -2
- package/locales/extra/af.d.ts +1 -1
- package/locales/extra/af.mjs +2 -2
- package/locales/extra/agq.d.ts +1 -1
- package/locales/extra/agq.mjs +2 -2
- package/locales/extra/ak.d.ts +1 -1
- package/locales/extra/ak.mjs +2 -2
- package/locales/extra/am.d.ts +1 -1
- package/locales/extra/am.mjs +2 -2
- package/locales/extra/ar-AE.d.ts +1 -1
- package/locales/extra/ar-AE.mjs +2 -2
- package/locales/extra/ar-BH.d.ts +1 -1
- package/locales/extra/ar-BH.mjs +2 -2
- package/locales/extra/ar-DJ.d.ts +1 -1
- package/locales/extra/ar-DJ.mjs +2 -2
- package/locales/extra/ar-DZ.d.ts +1 -1
- package/locales/extra/ar-DZ.mjs +2 -2
- package/locales/extra/ar-EG.d.ts +1 -1
- package/locales/extra/ar-EG.mjs +2 -2
- package/locales/extra/ar-EH.d.ts +1 -1
- package/locales/extra/ar-EH.mjs +2 -2
- package/locales/extra/ar-ER.d.ts +1 -1
- package/locales/extra/ar-ER.mjs +2 -2
- package/locales/extra/ar-IL.d.ts +1 -1
- package/locales/extra/ar-IL.mjs +2 -2
- package/locales/extra/ar-IQ.d.ts +1 -1
- package/locales/extra/ar-IQ.mjs +2 -2
- package/locales/extra/ar-JO.d.ts +1 -1
- package/locales/extra/ar-JO.mjs +2 -2
- package/locales/extra/ar-KM.d.ts +1 -1
- package/locales/extra/ar-KM.mjs +2 -2
- package/locales/extra/ar-KW.d.ts +1 -1
- package/locales/extra/ar-KW.mjs +2 -2
- package/locales/extra/ar-LB.d.ts +1 -1
- package/locales/extra/ar-LB.mjs +2 -2
- package/locales/extra/ar-LY.d.ts +1 -1
- package/locales/extra/ar-LY.mjs +2 -2
- package/locales/extra/ar-MA.d.ts +1 -1
- package/locales/extra/ar-MA.mjs +2 -2
- package/locales/extra/ar-MR.d.ts +1 -1
- package/locales/extra/ar-MR.mjs +2 -2
- package/locales/extra/ar-OM.d.ts +1 -1
- package/locales/extra/ar-OM.mjs +2 -2
- package/locales/extra/ar-PS.d.ts +1 -1
- package/locales/extra/ar-PS.mjs +2 -2
- package/locales/extra/ar-QA.d.ts +1 -1
- package/locales/extra/ar-QA.mjs +2 -2
- package/locales/extra/ar-SA.d.ts +1 -1
- package/locales/extra/ar-SA.mjs +2 -2
- package/locales/extra/ar-SD.d.ts +1 -1
- package/locales/extra/ar-SD.mjs +2 -2
- package/locales/extra/ar-SO.d.ts +1 -1
- package/locales/extra/ar-SO.mjs +2 -2
- package/locales/extra/ar-SS.d.ts +1 -1
- package/locales/extra/ar-SS.mjs +2 -2
- package/locales/extra/ar-SY.d.ts +1 -1
- package/locales/extra/ar-SY.mjs +2 -2
- package/locales/extra/ar-TD.d.ts +1 -1
- package/locales/extra/ar-TD.mjs +2 -2
- package/locales/extra/ar-TN.d.ts +1 -1
- package/locales/extra/ar-TN.mjs +2 -2
- package/locales/extra/ar-YE.d.ts +1 -1
- package/locales/extra/ar-YE.mjs +2 -2
- package/locales/extra/ar.d.ts +1 -1
- package/locales/extra/ar.mjs +2 -2
- package/locales/extra/as.d.ts +1 -1
- package/locales/extra/as.mjs +2 -2
- package/locales/extra/asa.d.ts +1 -1
- package/locales/extra/asa.mjs +2 -2
- package/locales/extra/ast.d.ts +1 -1
- package/locales/extra/ast.mjs +2 -2
- package/locales/extra/az-Cyrl.d.ts +1 -1
- package/locales/extra/az-Cyrl.mjs +2 -2
- package/locales/extra/az-Latn.d.ts +1 -1
- package/locales/extra/az-Latn.mjs +2 -2
- package/locales/extra/az.d.ts +1 -1
- package/locales/extra/az.mjs +2 -2
- package/locales/extra/bas.d.ts +1 -1
- package/locales/extra/bas.mjs +2 -2
- package/locales/extra/be-tarask.d.ts +1 -1
- package/locales/extra/be-tarask.mjs +2 -2
- package/locales/extra/be.d.ts +1 -1
- package/locales/extra/be.mjs +2 -2
- package/locales/extra/bem.d.ts +1 -1
- package/locales/extra/bem.mjs +2 -2
- package/locales/extra/bez.d.ts +1 -1
- package/locales/extra/bez.mjs +2 -2
- package/locales/extra/bg.d.ts +1 -1
- package/locales/extra/bg.mjs +2 -2
- package/locales/extra/bm.d.ts +1 -1
- package/locales/extra/bm.mjs +2 -2
- package/locales/extra/bn-IN.d.ts +1 -1
- package/locales/extra/bn-IN.mjs +2 -2
- package/locales/extra/bn.d.ts +1 -1
- package/locales/extra/bn.mjs +2 -2
- package/locales/extra/bo-IN.d.ts +1 -1
- package/locales/extra/bo-IN.mjs +2 -2
- package/locales/extra/bo.d.ts +1 -1
- package/locales/extra/bo.mjs +2 -2
- package/locales/extra/br.d.ts +1 -1
- package/locales/extra/br.mjs +2 -2
- package/locales/extra/brx.d.ts +1 -1
- package/locales/extra/brx.mjs +2 -2
- package/locales/extra/bs-Cyrl.d.ts +1 -1
- package/locales/extra/bs-Cyrl.mjs +2 -2
- package/locales/extra/bs-Latn.d.ts +1 -1
- package/locales/extra/bs-Latn.mjs +2 -2
- package/locales/extra/bs.d.ts +1 -1
- package/locales/extra/bs.mjs +2 -2
- package/locales/extra/ca-AD.d.ts +1 -1
- package/locales/extra/ca-AD.mjs +2 -2
- package/locales/extra/ca-ES-valencia.d.ts +1 -1
- package/locales/extra/ca-ES-valencia.mjs +2 -2
- package/locales/extra/ca-FR.d.ts +1 -1
- package/locales/extra/ca-FR.mjs +2 -2
- package/locales/extra/ca-IT.d.ts +1 -1
- package/locales/extra/ca-IT.mjs +2 -2
- package/locales/extra/ca.d.ts +1 -1
- package/locales/extra/ca.mjs +2 -2
- package/locales/extra/ccp-IN.d.ts +1 -1
- package/locales/extra/ccp-IN.mjs +2 -2
- package/locales/extra/ccp.d.ts +1 -1
- package/locales/extra/ccp.mjs +2 -2
- package/locales/extra/ce.d.ts +1 -1
- package/locales/extra/ce.mjs +2 -2
- package/locales/extra/ceb.d.ts +1 -1
- package/locales/extra/ceb.mjs +2 -2
- package/locales/extra/cgg.d.ts +1 -1
- package/locales/extra/cgg.mjs +2 -2
- package/locales/extra/chr.d.ts +1 -1
- package/locales/extra/chr.mjs +2 -2
- package/locales/extra/ckb-IR.d.ts +1 -1
- package/locales/extra/ckb-IR.mjs +2 -2
- package/locales/extra/ckb.d.ts +1 -1
- package/locales/extra/ckb.mjs +2 -2
- package/locales/extra/cs.d.ts +1 -1
- package/locales/extra/cs.mjs +2 -2
- package/locales/extra/cy.d.ts +1 -1
- package/locales/extra/cy.mjs +2 -2
- package/locales/extra/da-GL.d.ts +1 -1
- package/locales/extra/da-GL.mjs +2 -2
- package/locales/extra/da.d.ts +1 -1
- package/locales/extra/da.mjs +2 -2
- package/locales/extra/dav.d.ts +1 -1
- package/locales/extra/dav.mjs +2 -2
- package/locales/extra/de-AT.d.ts +1 -1
- package/locales/extra/de-AT.mjs +2 -2
- package/locales/extra/de-BE.d.ts +1 -1
- package/locales/extra/de-BE.mjs +2 -2
- package/locales/extra/de-CH.d.ts +1 -1
- package/locales/extra/de-CH.mjs +2 -2
- package/locales/extra/de-IT.d.ts +1 -1
- package/locales/extra/de-IT.mjs +2 -2
- package/locales/extra/de-LI.d.ts +1 -1
- package/locales/extra/de-LI.mjs +2 -2
- package/locales/extra/de-LU.d.ts +1 -1
- package/locales/extra/de-LU.mjs +2 -2
- package/locales/extra/de.d.ts +1 -1
- package/locales/extra/de.mjs +2 -2
- package/locales/extra/dje.d.ts +1 -1
- package/locales/extra/dje.mjs +2 -2
- package/locales/extra/doi.d.ts +1 -1
- package/locales/extra/doi.mjs +2 -2
- package/locales/extra/dsb.d.ts +1 -1
- package/locales/extra/dsb.mjs +2 -2
- package/locales/extra/dua.d.ts +1 -1
- package/locales/extra/dua.mjs +2 -2
- package/locales/extra/dyo.d.ts +1 -1
- package/locales/extra/dyo.mjs +2 -2
- package/locales/extra/dz.d.ts +1 -1
- package/locales/extra/dz.mjs +2 -2
- package/locales/extra/ebu.d.ts +1 -1
- package/locales/extra/ebu.mjs +2 -2
- package/locales/extra/ee-TG.d.ts +1 -1
- package/locales/extra/ee-TG.mjs +2 -2
- package/locales/extra/ee.d.ts +1 -1
- package/locales/extra/ee.mjs +2 -2
- package/locales/extra/el-CY.d.ts +1 -1
- package/locales/extra/el-CY.mjs +2 -2
- package/locales/extra/el.d.ts +1 -1
- package/locales/extra/el.mjs +2 -2
- package/locales/extra/en-001.d.ts +1 -1
- package/locales/extra/en-001.mjs +2 -2
- package/locales/extra/en-150.d.ts +1 -1
- package/locales/extra/en-150.mjs +2 -2
- package/locales/extra/en-AE.d.ts +1 -1
- package/locales/extra/en-AE.mjs +2 -2
- package/locales/extra/en-AG.d.ts +1 -1
- package/locales/extra/en-AG.mjs +2 -2
- package/locales/extra/en-AI.d.ts +1 -1
- package/locales/extra/en-AI.mjs +2 -2
- package/locales/extra/en-AS.d.ts +1 -1
- package/locales/extra/en-AS.mjs +2 -2
- package/locales/extra/en-AT.d.ts +1 -1
- package/locales/extra/en-AT.mjs +2 -2
- package/locales/extra/en-AU.d.ts +1 -1
- package/locales/extra/en-AU.mjs +2 -2
- package/locales/extra/en-BB.d.ts +1 -1
- package/locales/extra/en-BB.mjs +2 -2
- package/locales/extra/en-BE.d.ts +1 -1
- package/locales/extra/en-BE.mjs +2 -2
- package/locales/extra/en-BI.d.ts +1 -1
- package/locales/extra/en-BI.mjs +2 -2
- package/locales/extra/en-BM.d.ts +1 -1
- package/locales/extra/en-BM.mjs +2 -2
- package/locales/extra/en-BS.d.ts +1 -1
- package/locales/extra/en-BS.mjs +2 -2
- package/locales/extra/en-BW.d.ts +1 -1
- package/locales/extra/en-BW.mjs +2 -2
- package/locales/extra/en-BZ.d.ts +1 -1
- package/locales/extra/en-BZ.mjs +2 -2
- package/locales/extra/en-CA.d.ts +1 -1
- package/locales/extra/en-CA.mjs +2 -2
- package/locales/extra/en-CC.d.ts +1 -1
- package/locales/extra/en-CC.mjs +2 -2
- package/locales/extra/en-CH.d.ts +1 -1
- package/locales/extra/en-CH.mjs +2 -2
- package/locales/extra/en-CK.d.ts +1 -1
- package/locales/extra/en-CK.mjs +2 -2
- package/locales/extra/en-CM.d.ts +1 -1
- package/locales/extra/en-CM.mjs +2 -2
- package/locales/extra/en-CX.d.ts +1 -1
- package/locales/extra/en-CX.mjs +2 -2
- package/locales/extra/en-CY.d.ts +1 -1
- package/locales/extra/en-CY.mjs +2 -2
- package/locales/extra/en-DE.d.ts +1 -1
- package/locales/extra/en-DE.mjs +2 -2
- package/locales/extra/en-DG.d.ts +1 -1
- package/locales/extra/en-DG.mjs +2 -2
- package/locales/extra/en-DK.d.ts +1 -1
- package/locales/extra/en-DK.mjs +2 -2
- package/locales/extra/en-DM.d.ts +1 -1
- package/locales/extra/en-DM.mjs +2 -2
- package/locales/extra/en-ER.d.ts +1 -1
- package/locales/extra/en-ER.mjs +2 -2
- package/locales/extra/en-FI.d.ts +1 -1
- package/locales/extra/en-FI.mjs +2 -2
- package/locales/extra/en-FJ.d.ts +1 -1
- package/locales/extra/en-FJ.mjs +2 -2
- package/locales/extra/en-FK.d.ts +1 -1
- package/locales/extra/en-FK.mjs +2 -2
- package/locales/extra/en-FM.d.ts +1 -1
- package/locales/extra/en-FM.mjs +2 -2
- package/locales/extra/en-GB.d.ts +1 -1
- package/locales/extra/en-GB.mjs +2 -2
- package/locales/extra/en-GD.d.ts +1 -1
- package/locales/extra/en-GD.mjs +2 -2
- package/locales/extra/en-GG.d.ts +1 -1
- package/locales/extra/en-GG.mjs +2 -2
- package/locales/extra/en-GH.d.ts +1 -1
- package/locales/extra/en-GH.mjs +2 -2
- package/locales/extra/en-GI.d.ts +1 -1
- package/locales/extra/en-GI.mjs +2 -2
- package/locales/extra/en-GM.d.ts +1 -1
- package/locales/extra/en-GM.mjs +2 -2
- package/locales/extra/en-GU.d.ts +1 -1
- package/locales/extra/en-GU.mjs +2 -2
- package/locales/extra/en-GY.d.ts +1 -1
- package/locales/extra/en-GY.mjs +2 -2
- package/locales/extra/en-HK.d.ts +1 -1
- package/locales/extra/en-HK.mjs +2 -2
- package/locales/extra/en-IE.d.ts +1 -1
- package/locales/extra/en-IE.mjs +2 -2
- package/locales/extra/en-IL.d.ts +1 -1
- package/locales/extra/en-IL.mjs +2 -2
- package/locales/extra/en-IM.d.ts +1 -1
- package/locales/extra/en-IM.mjs +2 -2
- package/locales/extra/en-IN.d.ts +1 -1
- package/locales/extra/en-IN.mjs +2 -2
- package/locales/extra/en-IO.d.ts +1 -1
- package/locales/extra/en-IO.mjs +2 -2
- package/locales/extra/en-JE.d.ts +1 -1
- package/locales/extra/en-JE.mjs +2 -2
- package/locales/extra/en-JM.d.ts +1 -1
- package/locales/extra/en-JM.mjs +2 -2
- package/locales/extra/en-KE.d.ts +1 -1
- package/locales/extra/en-KE.mjs +2 -2
- package/locales/extra/en-KI.d.ts +1 -1
- package/locales/extra/en-KI.mjs +2 -2
- package/locales/extra/en-KN.d.ts +1 -1
- package/locales/extra/en-KN.mjs +2 -2
- package/locales/extra/en-KY.d.ts +1 -1
- package/locales/extra/en-KY.mjs +2 -2
- package/locales/extra/en-LC.d.ts +1 -1
- package/locales/extra/en-LC.mjs +2 -2
- package/locales/extra/en-LR.d.ts +1 -1
- package/locales/extra/en-LR.mjs +2 -2
- package/locales/extra/en-LS.d.ts +1 -1
- package/locales/extra/en-LS.mjs +2 -2
- package/locales/extra/en-MG.d.ts +1 -1
- package/locales/extra/en-MG.mjs +2 -2
- package/locales/extra/en-MH.d.ts +1 -1
- package/locales/extra/en-MH.mjs +2 -2
- package/locales/extra/en-MO.d.ts +1 -1
- package/locales/extra/en-MO.mjs +2 -2
- package/locales/extra/en-MP.d.ts +1 -1
- package/locales/extra/en-MP.mjs +2 -2
- package/locales/extra/en-MS.d.ts +1 -1
- package/locales/extra/en-MS.mjs +2 -2
- package/locales/extra/en-MT.d.ts +1 -1
- package/locales/extra/en-MT.mjs +2 -2
- package/locales/extra/en-MU.d.ts +1 -1
- package/locales/extra/en-MU.mjs +2 -2
- package/locales/extra/en-MV.d.ts +1 -1
- package/locales/extra/en-MV.mjs +2 -2
- package/locales/extra/en-MW.d.ts +1 -1
- package/locales/extra/en-MW.mjs +2 -2
- package/locales/extra/en-MY.d.ts +1 -1
- package/locales/extra/en-MY.mjs +2 -2
- package/locales/extra/en-NA.d.ts +1 -1
- package/locales/extra/en-NA.mjs +2 -2
- package/locales/extra/en-NF.d.ts +1 -1
- package/locales/extra/en-NF.mjs +2 -2
- package/locales/extra/en-NG.d.ts +1 -1
- package/locales/extra/en-NG.mjs +2 -2
- package/locales/extra/en-NL.d.ts +1 -1
- package/locales/extra/en-NL.mjs +2 -2
- package/locales/extra/en-NR.d.ts +1 -1
- package/locales/extra/en-NR.mjs +2 -2
- package/locales/extra/en-NU.d.ts +1 -1
- package/locales/extra/en-NU.mjs +2 -2
- package/locales/extra/en-NZ.d.ts +1 -1
- package/locales/extra/en-NZ.mjs +2 -2
- package/locales/extra/en-PG.d.ts +1 -1
- package/locales/extra/en-PG.mjs +2 -2
- package/locales/extra/en-PH.d.ts +1 -1
- package/locales/extra/en-PH.mjs +2 -2
- package/locales/extra/en-PK.d.ts +1 -1
- package/locales/extra/en-PK.mjs +2 -2
- package/locales/extra/en-PN.d.ts +1 -1
- package/locales/extra/en-PN.mjs +2 -2
- package/locales/extra/en-PR.d.ts +1 -1
- package/locales/extra/en-PR.mjs +2 -2
- package/locales/extra/en-PW.d.ts +1 -1
- package/locales/extra/en-PW.mjs +2 -2
- package/locales/extra/en-RW.d.ts +1 -1
- package/locales/extra/en-RW.mjs +2 -2
- package/locales/extra/en-SB.d.ts +1 -1
- package/locales/extra/en-SB.mjs +2 -2
- package/locales/extra/en-SC.d.ts +1 -1
- package/locales/extra/en-SC.mjs +2 -2
- package/locales/extra/en-SD.d.ts +1 -1
- package/locales/extra/en-SD.mjs +2 -2
- package/locales/extra/en-SE.d.ts +1 -1
- package/locales/extra/en-SE.mjs +2 -2
- package/locales/extra/en-SG.d.ts +1 -1
- package/locales/extra/en-SG.mjs +2 -2
- package/locales/extra/en-SH.d.ts +1 -1
- package/locales/extra/en-SH.mjs +2 -2
- package/locales/extra/en-SI.d.ts +1 -1
- package/locales/extra/en-SI.mjs +2 -2
- package/locales/extra/en-SL.d.ts +1 -1
- package/locales/extra/en-SL.mjs +2 -2
- package/locales/extra/en-SS.d.ts +1 -1
- package/locales/extra/en-SS.mjs +2 -2
- package/locales/extra/en-SX.d.ts +1 -1
- package/locales/extra/en-SX.mjs +2 -2
- package/locales/extra/en-SZ.d.ts +1 -1
- package/locales/extra/en-SZ.mjs +2 -2
- package/locales/extra/en-TC.d.ts +1 -1
- package/locales/extra/en-TC.mjs +2 -2
- package/locales/extra/en-TK.d.ts +1 -1
- package/locales/extra/en-TK.mjs +2 -2
- package/locales/extra/en-TO.d.ts +1 -1
- package/locales/extra/en-TO.mjs +2 -2
- package/locales/extra/en-TT.d.ts +1 -1
- package/locales/extra/en-TT.mjs +2 -2
- package/locales/extra/en-TV.d.ts +1 -1
- package/locales/extra/en-TV.mjs +2 -2
- package/locales/extra/en-TZ.d.ts +1 -1
- package/locales/extra/en-TZ.mjs +2 -2
- package/locales/extra/en-UG.d.ts +1 -1
- package/locales/extra/en-UG.mjs +2 -2
- package/locales/extra/en-UM.d.ts +1 -1
- package/locales/extra/en-UM.mjs +2 -2
- package/locales/extra/en-VC.d.ts +1 -1
- package/locales/extra/en-VC.mjs +2 -2
- package/locales/extra/en-VG.d.ts +1 -1
- package/locales/extra/en-VG.mjs +2 -2
- package/locales/extra/en-VI.d.ts +1 -1
- package/locales/extra/en-VI.mjs +2 -2
- package/locales/extra/en-VU.d.ts +1 -1
- package/locales/extra/en-VU.mjs +2 -2
- package/locales/extra/en-WS.d.ts +1 -1
- package/locales/extra/en-WS.mjs +2 -2
- package/locales/extra/en-ZA.d.ts +1 -1
- package/locales/extra/en-ZA.mjs +2 -2
- package/locales/extra/en-ZM.d.ts +1 -1
- package/locales/extra/en-ZM.mjs +2 -2
- package/locales/extra/en-ZW.d.ts +1 -1
- package/locales/extra/en-ZW.mjs +2 -2
- package/locales/extra/en.d.ts +1 -1
- package/locales/extra/en.mjs +2 -2
- package/locales/extra/eo.d.ts +1 -1
- package/locales/extra/eo.mjs +2 -2
- package/locales/extra/es-419.d.ts +1 -1
- package/locales/extra/es-419.mjs +2 -2
- package/locales/extra/es-AR.d.ts +1 -1
- package/locales/extra/es-AR.mjs +2 -2
- package/locales/extra/es-BO.d.ts +1 -1
- package/locales/extra/es-BO.mjs +2 -2
- package/locales/extra/es-BR.d.ts +1 -1
- package/locales/extra/es-BR.mjs +2 -2
- package/locales/extra/es-BZ.d.ts +1 -1
- package/locales/extra/es-BZ.mjs +2 -2
- package/locales/extra/es-CL.d.ts +1 -1
- package/locales/extra/es-CL.mjs +2 -2
- package/locales/extra/es-CO.d.ts +1 -1
- package/locales/extra/es-CO.mjs +2 -2
- package/locales/extra/es-CR.d.ts +1 -1
- package/locales/extra/es-CR.mjs +2 -2
- package/locales/extra/es-CU.d.ts +1 -1
- package/locales/extra/es-CU.mjs +2 -2
- package/locales/extra/es-DO.d.ts +1 -1
- package/locales/extra/es-DO.mjs +2 -2
- package/locales/extra/es-EA.d.ts +1 -1
- package/locales/extra/es-EA.mjs +2 -2
- package/locales/extra/es-EC.d.ts +1 -1
- package/locales/extra/es-EC.mjs +2 -2
- package/locales/extra/es-GQ.d.ts +1 -1
- package/locales/extra/es-GQ.mjs +2 -2
- package/locales/extra/es-GT.d.ts +1 -1
- package/locales/extra/es-GT.mjs +2 -2
- package/locales/extra/es-HN.d.ts +1 -1
- package/locales/extra/es-HN.mjs +2 -2
- package/locales/extra/es-IC.d.ts +1 -1
- package/locales/extra/es-IC.mjs +2 -2
- package/locales/extra/es-MX.d.ts +1 -1
- package/locales/extra/es-MX.mjs +2 -2
- package/locales/extra/es-NI.d.ts +1 -1
- package/locales/extra/es-NI.mjs +2 -2
- package/locales/extra/es-PA.d.ts +1 -1
- package/locales/extra/es-PA.mjs +2 -2
- package/locales/extra/es-PE.d.ts +1 -1
- package/locales/extra/es-PE.mjs +2 -2
- package/locales/extra/es-PH.d.ts +1 -1
- package/locales/extra/es-PH.mjs +2 -2
- package/locales/extra/es-PR.d.ts +1 -1
- package/locales/extra/es-PR.mjs +2 -2
- package/locales/extra/es-PY.d.ts +1 -1
- package/locales/extra/es-PY.mjs +2 -2
- package/locales/extra/es-SV.d.ts +1 -1
- package/locales/extra/es-SV.mjs +2 -2
- package/locales/extra/es-US.d.ts +1 -1
- package/locales/extra/es-US.mjs +2 -2
- package/locales/extra/es-UY.d.ts +1 -1
- package/locales/extra/es-UY.mjs +2 -2
- package/locales/extra/es-VE.d.ts +1 -1
- package/locales/extra/es-VE.mjs +2 -2
- package/locales/extra/es.d.ts +1 -1
- package/locales/extra/es.mjs +2 -2
- package/locales/extra/et.d.ts +1 -1
- package/locales/extra/et.mjs +2 -2
- package/locales/extra/eu.d.ts +1 -1
- package/locales/extra/eu.mjs +2 -2
- package/locales/extra/ewo.d.ts +1 -1
- package/locales/extra/ewo.mjs +2 -2
- package/locales/extra/fa-AF.d.ts +1 -1
- package/locales/extra/fa-AF.mjs +2 -2
- package/locales/extra/fa.d.ts +1 -1
- package/locales/extra/fa.mjs +2 -2
- package/locales/extra/ff-Adlm-BF.d.ts +1 -1
- package/locales/extra/ff-Adlm-BF.mjs +2 -2
- package/locales/extra/ff-Adlm-CM.d.ts +1 -1
- package/locales/extra/ff-Adlm-CM.mjs +2 -2
- package/locales/extra/ff-Adlm-GH.d.ts +1 -1
- package/locales/extra/ff-Adlm-GH.mjs +2 -2
- package/locales/extra/ff-Adlm-GM.d.ts +1 -1
- package/locales/extra/ff-Adlm-GM.mjs +2 -2
- package/locales/extra/ff-Adlm-GW.d.ts +1 -1
- package/locales/extra/ff-Adlm-GW.mjs +2 -2
- package/locales/extra/ff-Adlm-LR.d.ts +1 -1
- package/locales/extra/ff-Adlm-LR.mjs +2 -2
- package/locales/extra/ff-Adlm-MR.d.ts +1 -1
- package/locales/extra/ff-Adlm-MR.mjs +2 -2
- package/locales/extra/ff-Adlm-NE.d.ts +1 -1
- package/locales/extra/ff-Adlm-NE.mjs +2 -2
- package/locales/extra/ff-Adlm-NG.d.ts +1 -1
- package/locales/extra/ff-Adlm-NG.mjs +2 -2
- package/locales/extra/ff-Adlm-SL.d.ts +1 -1
- package/locales/extra/ff-Adlm-SL.mjs +2 -2
- package/locales/extra/ff-Adlm-SN.d.ts +1 -1
- package/locales/extra/ff-Adlm-SN.mjs +2 -2
- package/locales/extra/ff-Adlm.d.ts +1 -1
- package/locales/extra/ff-Adlm.mjs +2 -2
- package/locales/extra/ff-CM.d.ts +1 -1
- package/locales/extra/ff-CM.mjs +2 -2
- package/locales/extra/ff-GN.d.ts +1 -1
- package/locales/extra/ff-GN.mjs +2 -2
- package/locales/extra/ff-Latn-BF.d.ts +1 -1
- package/locales/extra/ff-Latn-BF.mjs +2 -2
- package/locales/extra/ff-Latn-CM.d.ts +1 -1
- package/locales/extra/ff-Latn-CM.mjs +2 -2
- package/locales/extra/ff-Latn-GH.d.ts +1 -1
- package/locales/extra/ff-Latn-GH.mjs +2 -2
- package/locales/extra/ff-Latn-GM.d.ts +1 -1
- package/locales/extra/ff-Latn-GM.mjs +2 -2
- package/locales/extra/ff-Latn-GN.d.ts +1 -1
- package/locales/extra/ff-Latn-GN.mjs +2 -2
- package/locales/extra/ff-Latn-GW.d.ts +1 -1
- package/locales/extra/ff-Latn-GW.mjs +2 -2
- package/locales/extra/ff-Latn-LR.d.ts +1 -1
- package/locales/extra/ff-Latn-LR.mjs +2 -2
- package/locales/extra/ff-Latn-MR.d.ts +1 -1
- package/locales/extra/ff-Latn-MR.mjs +2 -2
- package/locales/extra/ff-Latn-NE.d.ts +1 -1
- package/locales/extra/ff-Latn-NE.mjs +2 -2
- package/locales/extra/ff-Latn-NG.d.ts +1 -1
- package/locales/extra/ff-Latn-NG.mjs +2 -2
- package/locales/extra/ff-Latn-SL.d.ts +1 -1
- package/locales/extra/ff-Latn-SL.mjs +2 -2
- package/locales/extra/ff-Latn.d.ts +1 -1
- package/locales/extra/ff-Latn.mjs +2 -2
- package/locales/extra/ff-MR.d.ts +1 -1
- package/locales/extra/ff-MR.mjs +2 -2
- package/locales/extra/ff.d.ts +1 -1
- package/locales/extra/ff.mjs +2 -2
- package/locales/extra/fi.d.ts +1 -1
- package/locales/extra/fi.mjs +2 -2
- package/locales/extra/fil.d.ts +1 -1
- package/locales/extra/fil.mjs +2 -2
- package/locales/extra/fo-DK.d.ts +1 -1
- package/locales/extra/fo-DK.mjs +2 -2
- package/locales/extra/fo.d.ts +1 -1
- package/locales/extra/fo.mjs +2 -2
- package/locales/extra/fr-BE.d.ts +1 -1
- package/locales/extra/fr-BE.mjs +2 -2
- package/locales/extra/fr-BF.d.ts +1 -1
- package/locales/extra/fr-BF.mjs +2 -2
- package/locales/extra/fr-BI.d.ts +1 -1
- package/locales/extra/fr-BI.mjs +2 -2
- package/locales/extra/fr-BJ.d.ts +1 -1
- package/locales/extra/fr-BJ.mjs +2 -2
- package/locales/extra/fr-BL.d.ts +1 -1
- package/locales/extra/fr-BL.mjs +2 -2
- package/locales/extra/fr-CA.d.ts +1 -1
- package/locales/extra/fr-CA.mjs +2 -2
- package/locales/extra/fr-CD.d.ts +1 -1
- package/locales/extra/fr-CD.mjs +2 -2
- package/locales/extra/fr-CF.d.ts +1 -1
- package/locales/extra/fr-CF.mjs +2 -2
- package/locales/extra/fr-CG.d.ts +1 -1
- package/locales/extra/fr-CG.mjs +2 -2
- package/locales/extra/fr-CH.d.ts +1 -1
- package/locales/extra/fr-CH.mjs +2 -2
- package/locales/extra/fr-CI.d.ts +1 -1
- package/locales/extra/fr-CI.mjs +2 -2
- package/locales/extra/fr-CM.d.ts +1 -1
- package/locales/extra/fr-CM.mjs +2 -2
- package/locales/extra/fr-DJ.d.ts +1 -1
- package/locales/extra/fr-DJ.mjs +2 -2
- package/locales/extra/fr-DZ.d.ts +1 -1
- package/locales/extra/fr-DZ.mjs +2 -2
- package/locales/extra/fr-GA.d.ts +1 -1
- package/locales/extra/fr-GA.mjs +2 -2
- package/locales/extra/fr-GF.d.ts +1 -1
- package/locales/extra/fr-GF.mjs +2 -2
- package/locales/extra/fr-GN.d.ts +1 -1
- package/locales/extra/fr-GN.mjs +2 -2
- package/locales/extra/fr-GP.d.ts +1 -1
- package/locales/extra/fr-GP.mjs +2 -2
- package/locales/extra/fr-GQ.d.ts +1 -1
- package/locales/extra/fr-GQ.mjs +2 -2
- package/locales/extra/fr-HT.d.ts +1 -1
- package/locales/extra/fr-HT.mjs +2 -2
- package/locales/extra/fr-KM.d.ts +1 -1
- package/locales/extra/fr-KM.mjs +2 -2
- package/locales/extra/fr-LU.d.ts +1 -1
- package/locales/extra/fr-LU.mjs +2 -2
- package/locales/extra/fr-MA.d.ts +1 -1
- package/locales/extra/fr-MA.mjs +2 -2
- package/locales/extra/fr-MC.d.ts +1 -1
- package/locales/extra/fr-MC.mjs +2 -2
- package/locales/extra/fr-MF.d.ts +1 -1
- package/locales/extra/fr-MF.mjs +2 -2
- package/locales/extra/fr-MG.d.ts +1 -1
- package/locales/extra/fr-MG.mjs +2 -2
- package/locales/extra/fr-ML.d.ts +1 -1
- package/locales/extra/fr-ML.mjs +2 -2
- package/locales/extra/fr-MQ.d.ts +1 -1
- package/locales/extra/fr-MQ.mjs +2 -2
- package/locales/extra/fr-MR.d.ts +1 -1
- package/locales/extra/fr-MR.mjs +2 -2
- package/locales/extra/fr-MU.d.ts +1 -1
- package/locales/extra/fr-MU.mjs +2 -2
- package/locales/extra/fr-NC.d.ts +1 -1
- package/locales/extra/fr-NC.mjs +2 -2
- package/locales/extra/fr-NE.d.ts +1 -1
- package/locales/extra/fr-NE.mjs +2 -2
- package/locales/extra/fr-PF.d.ts +1 -1
- package/locales/extra/fr-PF.mjs +2 -2
- package/locales/extra/fr-PM.d.ts +1 -1
- package/locales/extra/fr-PM.mjs +2 -2
- package/locales/extra/fr-RE.d.ts +1 -1
- package/locales/extra/fr-RE.mjs +2 -2
- package/locales/extra/fr-RW.d.ts +1 -1
- package/locales/extra/fr-RW.mjs +2 -2
- package/locales/extra/fr-SC.d.ts +1 -1
- package/locales/extra/fr-SC.mjs +2 -2
- package/locales/extra/fr-SN.d.ts +1 -1
- package/locales/extra/fr-SN.mjs +2 -2
- package/locales/extra/fr-SY.d.ts +1 -1
- package/locales/extra/fr-SY.mjs +2 -2
- package/locales/extra/fr-TD.d.ts +1 -1
- package/locales/extra/fr-TD.mjs +2 -2
- package/locales/extra/fr-TG.d.ts +1 -1
- package/locales/extra/fr-TG.mjs +2 -2
- package/locales/extra/fr-TN.d.ts +1 -1
- package/locales/extra/fr-TN.mjs +2 -2
- package/locales/extra/fr-VU.d.ts +1 -1
- package/locales/extra/fr-VU.mjs +2 -2
- package/locales/extra/fr-WF.d.ts +1 -1
- package/locales/extra/fr-WF.mjs +2 -2
- package/locales/extra/fr-YT.d.ts +1 -1
- package/locales/extra/fr-YT.mjs +2 -2
- package/locales/extra/fr.d.ts +1 -1
- package/locales/extra/fr.mjs +2 -2
- package/locales/extra/fur.d.ts +1 -1
- package/locales/extra/fur.mjs +2 -2
- package/locales/extra/fy.d.ts +1 -1
- package/locales/extra/fy.mjs +2 -2
- package/locales/extra/ga-GB.d.ts +1 -1
- package/locales/extra/ga-GB.mjs +2 -2
- package/locales/extra/ga.d.ts +1 -1
- package/locales/extra/ga.mjs +2 -2
- package/locales/extra/gd.d.ts +1 -1
- package/locales/extra/gd.mjs +2 -2
- package/locales/extra/gl.d.ts +1 -1
- package/locales/extra/gl.mjs +2 -2
- package/locales/extra/gsw-FR.d.ts +1 -1
- package/locales/extra/gsw-FR.mjs +2 -2
- package/locales/extra/gsw-LI.d.ts +1 -1
- package/locales/extra/gsw-LI.mjs +2 -2
- package/locales/extra/gsw.d.ts +1 -1
- package/locales/extra/gsw.mjs +2 -2
- package/locales/extra/gu.d.ts +1 -1
- package/locales/extra/gu.mjs +2 -2
- package/locales/extra/guz.d.ts +1 -1
- package/locales/extra/guz.mjs +2 -2
- package/locales/extra/gv.d.ts +1 -1
- package/locales/extra/gv.mjs +2 -2
- package/locales/extra/ha-GH.d.ts +1 -1
- package/locales/extra/ha-GH.mjs +2 -2
- package/locales/extra/ha-NE.d.ts +1 -1
- package/locales/extra/ha-NE.mjs +2 -2
- package/locales/extra/ha.d.ts +1 -1
- package/locales/extra/ha.mjs +2 -2
- package/locales/extra/haw.d.ts +1 -1
- package/locales/extra/haw.mjs +2 -2
- package/locales/extra/he.d.ts +1 -1
- package/locales/extra/he.mjs +2 -2
- package/locales/extra/hi-Latn.d.ts +1 -1
- package/locales/extra/hi-Latn.mjs +2 -2
- package/locales/extra/hi.d.ts +1 -1
- package/locales/extra/hi.mjs +2 -2
- package/locales/extra/hr-BA.d.ts +1 -1
- package/locales/extra/hr-BA.mjs +2 -2
- package/locales/extra/hr.d.ts +1 -1
- package/locales/extra/hr.mjs +2 -2
- package/locales/extra/hsb.d.ts +1 -1
- package/locales/extra/hsb.mjs +2 -2
- package/locales/extra/hu.d.ts +1 -1
- package/locales/extra/hu.mjs +2 -2
- package/locales/extra/hy.d.ts +1 -1
- package/locales/extra/hy.mjs +2 -2
- package/locales/extra/ia.d.ts +1 -1
- package/locales/extra/ia.mjs +2 -2
- package/locales/extra/id.d.ts +1 -1
- package/locales/extra/id.mjs +2 -2
- package/locales/extra/ig.d.ts +1 -1
- package/locales/extra/ig.mjs +2 -2
- package/locales/extra/ii.d.ts +1 -1
- package/locales/extra/ii.mjs +2 -2
- package/locales/extra/is.d.ts +1 -1
- package/locales/extra/is.mjs +2 -2
- package/locales/extra/it-CH.d.ts +1 -1
- package/locales/extra/it-CH.mjs +2 -2
- package/locales/extra/it-SM.d.ts +1 -1
- package/locales/extra/it-SM.mjs +2 -2
- package/locales/extra/it-VA.d.ts +1 -1
- package/locales/extra/it-VA.mjs +2 -2
- package/locales/extra/it.d.ts +1 -1
- package/locales/extra/it.mjs +2 -2
- package/locales/extra/ja.d.ts +1 -1
- package/locales/extra/ja.mjs +2 -2
- package/locales/extra/jgo.d.ts +1 -1
- package/locales/extra/jgo.mjs +2 -2
- package/locales/extra/jmc.d.ts +1 -1
- package/locales/extra/jmc.mjs +2 -2
- package/locales/extra/jv.d.ts +1 -1
- package/locales/extra/jv.mjs +2 -2
- package/locales/extra/ka.d.ts +1 -1
- package/locales/extra/ka.mjs +2 -2
- package/locales/extra/kab.d.ts +1 -1
- package/locales/extra/kab.mjs +2 -2
- package/locales/extra/kam.d.ts +1 -1
- package/locales/extra/kam.mjs +2 -2
- package/locales/extra/kde.d.ts +1 -1
- package/locales/extra/kde.mjs +2 -2
- package/locales/extra/kea.d.ts +1 -1
- package/locales/extra/kea.mjs +2 -2
- package/locales/extra/kgp.d.ts +1 -1
- package/locales/extra/kgp.mjs +2 -2
- package/locales/extra/khq.d.ts +1 -1
- package/locales/extra/khq.mjs +2 -2
- package/locales/extra/ki.d.ts +1 -1
- package/locales/extra/ki.mjs +2 -2
- package/locales/extra/kk.d.ts +1 -1
- package/locales/extra/kk.mjs +2 -2
- package/locales/extra/kkj.d.ts +1 -1
- package/locales/extra/kkj.mjs +2 -2
- package/locales/extra/kl.d.ts +1 -1
- package/locales/extra/kl.mjs +2 -2
- package/locales/extra/kln.d.ts +1 -1
- package/locales/extra/kln.mjs +2 -2
- package/locales/extra/km.d.ts +1 -1
- package/locales/extra/km.mjs +2 -2
- package/locales/extra/kn.d.ts +1 -1
- package/locales/extra/kn.mjs +2 -2
- package/locales/extra/ko-KP.d.ts +1 -1
- package/locales/extra/ko-KP.mjs +2 -2
- package/locales/extra/ko.d.ts +1 -1
- package/locales/extra/ko.mjs +2 -2
- package/locales/extra/kok.d.ts +1 -1
- package/locales/extra/kok.mjs +2 -2
- package/locales/extra/ks-Arab.d.ts +1 -1
- package/locales/extra/ks-Arab.mjs +2 -2
- package/locales/extra/ks-Deva.d.ts +1 -1
- package/locales/extra/ks-Deva.mjs +2 -2
- package/locales/extra/ks.d.ts +1 -1
- package/locales/extra/ks.mjs +2 -2
- package/locales/extra/ksb.d.ts +1 -1
- package/locales/extra/ksb.mjs +2 -2
- package/locales/extra/ksf.d.ts +1 -1
- package/locales/extra/ksf.mjs +2 -2
- package/locales/extra/ksh.d.ts +1 -1
- package/locales/extra/ksh.mjs +2 -2
- package/locales/extra/ku.d.ts +1 -1
- package/locales/extra/ku.mjs +2 -2
- package/locales/extra/kw.d.ts +1 -1
- package/locales/extra/kw.mjs +2 -2
- package/locales/extra/ky.d.ts +1 -1
- package/locales/extra/ky.mjs +2 -2
- package/locales/extra/lag.d.ts +1 -1
- package/locales/extra/lag.mjs +2 -2
- package/locales/extra/lb.d.ts +1 -1
- package/locales/extra/lb.mjs +2 -2
- package/locales/extra/lg.d.ts +1 -1
- package/locales/extra/lg.mjs +2 -2
- package/locales/extra/lkt.d.ts +1 -1
- package/locales/extra/lkt.mjs +2 -2
- package/locales/extra/ln-AO.d.ts +1 -1
- package/locales/extra/ln-AO.mjs +2 -2
- package/locales/extra/ln-CF.d.ts +1 -1
- package/locales/extra/ln-CF.mjs +2 -2
- package/locales/extra/ln-CG.d.ts +1 -1
- package/locales/extra/ln-CG.mjs +2 -2
- package/locales/extra/ln.d.ts +1 -1
- package/locales/extra/ln.mjs +2 -2
- package/locales/extra/lo.d.ts +1 -1
- package/locales/extra/lo.mjs +2 -2
- package/locales/extra/lrc-IQ.d.ts +1 -1
- package/locales/extra/lrc-IQ.mjs +2 -2
- package/locales/extra/lrc.d.ts +1 -1
- package/locales/extra/lrc.mjs +2 -2
- package/locales/extra/lt.d.ts +1 -1
- package/locales/extra/lt.mjs +2 -2
- package/locales/extra/lu.d.ts +1 -1
- package/locales/extra/lu.mjs +2 -2
- package/locales/extra/luo.d.ts +1 -1
- package/locales/extra/luo.mjs +2 -2
- package/locales/extra/luy.d.ts +1 -1
- package/locales/extra/luy.mjs +2 -2
- package/locales/extra/lv.d.ts +1 -1
- package/locales/extra/lv.mjs +2 -2
- package/locales/extra/mai.d.ts +1 -1
- package/locales/extra/mai.mjs +2 -2
- package/locales/extra/mas-TZ.d.ts +1 -1
- package/locales/extra/mas-TZ.mjs +2 -2
- package/locales/extra/mas.d.ts +1 -1
- package/locales/extra/mas.mjs +2 -2
- package/locales/extra/mer.d.ts +1 -1
- package/locales/extra/mer.mjs +2 -2
- package/locales/extra/mfe.d.ts +1 -1
- package/locales/extra/mfe.mjs +2 -2
- package/locales/extra/mg.d.ts +1 -1
- package/locales/extra/mg.mjs +2 -2
- package/locales/extra/mgh.d.ts +1 -1
- package/locales/extra/mgh.mjs +2 -2
- package/locales/extra/mgo.d.ts +1 -1
- package/locales/extra/mgo.mjs +2 -2
- package/locales/extra/mi.d.ts +1 -1
- package/locales/extra/mi.mjs +2 -2
- package/locales/extra/mk.d.ts +1 -1
- package/locales/extra/mk.mjs +2 -2
- package/locales/extra/ml.d.ts +1 -1
- package/locales/extra/ml.mjs +2 -2
- package/locales/extra/mn.d.ts +1 -1
- package/locales/extra/mn.mjs +2 -2
- package/locales/extra/mni-Beng.d.ts +1 -1
- package/locales/extra/mni-Beng.mjs +2 -2
- package/locales/extra/mni.d.ts +1 -1
- package/locales/extra/mni.mjs +2 -2
- package/locales/extra/mr.d.ts +1 -1
- package/locales/extra/mr.mjs +2 -2
- package/locales/extra/ms-BN.d.ts +1 -1
- package/locales/extra/ms-BN.mjs +2 -2
- package/locales/extra/ms-ID.d.ts +1 -1
- package/locales/extra/ms-ID.mjs +2 -2
- package/locales/extra/ms-SG.d.ts +1 -1
- package/locales/extra/ms-SG.mjs +2 -2
- package/locales/extra/ms.d.ts +1 -1
- package/locales/extra/ms.mjs +2 -2
- package/locales/extra/mt.d.ts +1 -1
- package/locales/extra/mt.mjs +2 -2
- package/locales/extra/mua.d.ts +1 -1
- package/locales/extra/mua.mjs +2 -2
- package/locales/extra/my.d.ts +1 -1
- package/locales/extra/my.mjs +2 -2
- package/locales/extra/mzn.d.ts +1 -1
- package/locales/extra/mzn.mjs +2 -2
- package/locales/extra/naq.d.ts +1 -1
- package/locales/extra/naq.mjs +2 -2
- package/locales/extra/nb-SJ.d.ts +1 -1
- package/locales/extra/nb-SJ.mjs +2 -2
- package/locales/extra/nb.d.ts +1 -1
- package/locales/extra/nb.mjs +2 -2
- package/locales/extra/nd.d.ts +1 -1
- package/locales/extra/nd.mjs +2 -2
- package/locales/extra/nds-NL.d.ts +1 -1
- package/locales/extra/nds-NL.mjs +2 -2
- package/locales/extra/nds.d.ts +1 -1
- package/locales/extra/nds.mjs +2 -2
- package/locales/extra/ne-IN.d.ts +1 -1
- package/locales/extra/ne-IN.mjs +2 -2
- package/locales/extra/ne.d.ts +1 -1
- package/locales/extra/ne.mjs +2 -2
- package/locales/extra/nl-AW.d.ts +1 -1
- package/locales/extra/nl-AW.mjs +2 -2
- package/locales/extra/nl-BE.d.ts +1 -1
- package/locales/extra/nl-BE.mjs +2 -2
- package/locales/extra/nl-BQ.d.ts +1 -1
- package/locales/extra/nl-BQ.mjs +2 -2
- package/locales/extra/nl-CW.d.ts +1 -1
- package/locales/extra/nl-CW.mjs +2 -2
- package/locales/extra/nl-SR.d.ts +1 -1
- package/locales/extra/nl-SR.mjs +2 -2
- package/locales/extra/nl-SX.d.ts +1 -1
- package/locales/extra/nl-SX.mjs +2 -2
- package/locales/extra/nl.d.ts +1 -1
- package/locales/extra/nl.mjs +2 -2
- package/locales/extra/nmg.d.ts +1 -1
- package/locales/extra/nmg.mjs +2 -2
- package/locales/extra/nn.d.ts +1 -1
- package/locales/extra/nn.mjs +2 -2
- package/locales/extra/nnh.d.ts +1 -1
- package/locales/extra/nnh.mjs +2 -2
- package/locales/extra/no.d.ts +1 -1
- package/locales/extra/no.mjs +2 -2
- package/locales/extra/nus.d.ts +1 -1
- package/locales/extra/nus.mjs +2 -2
- package/locales/extra/nyn.d.ts +1 -1
- package/locales/extra/nyn.mjs +2 -2
- package/locales/extra/om-KE.d.ts +1 -1
- package/locales/extra/om-KE.mjs +2 -2
- package/locales/extra/om.d.ts +1 -1
- package/locales/extra/om.mjs +2 -2
- package/locales/extra/or.d.ts +1 -1
- package/locales/extra/or.mjs +2 -2
- package/locales/extra/os-RU.d.ts +1 -1
- package/locales/extra/os-RU.mjs +2 -2
- package/locales/extra/os.d.ts +1 -1
- package/locales/extra/os.mjs +2 -2
- package/locales/extra/pa-Arab.d.ts +1 -1
- package/locales/extra/pa-Arab.mjs +2 -2
- package/locales/extra/pa-Guru.d.ts +1 -1
- package/locales/extra/pa-Guru.mjs +2 -2
- package/locales/extra/pa.d.ts +1 -1
- package/locales/extra/pa.mjs +2 -2
- package/locales/extra/pcm.d.ts +1 -1
- package/locales/extra/pcm.mjs +2 -2
- package/locales/extra/pl.d.ts +1 -1
- package/locales/extra/pl.mjs +2 -2
- package/locales/extra/ps-PK.d.ts +1 -1
- package/locales/extra/ps-PK.mjs +2 -2
- package/locales/extra/ps.d.ts +1 -1
- package/locales/extra/ps.mjs +2 -2
- package/locales/extra/pt-AO.d.ts +1 -1
- package/locales/extra/pt-AO.mjs +2 -2
- package/locales/extra/pt-CH.d.ts +1 -1
- package/locales/extra/pt-CH.mjs +2 -2
- package/locales/extra/pt-CV.d.ts +1 -1
- package/locales/extra/pt-CV.mjs +2 -2
- package/locales/extra/pt-GQ.d.ts +1 -1
- package/locales/extra/pt-GQ.mjs +2 -2
- package/locales/extra/pt-GW.d.ts +1 -1
- package/locales/extra/pt-GW.mjs +2 -2
- package/locales/extra/pt-LU.d.ts +1 -1
- package/locales/extra/pt-LU.mjs +2 -2
- package/locales/extra/pt-MO.d.ts +1 -1
- package/locales/extra/pt-MO.mjs +2 -2
- package/locales/extra/pt-MZ.d.ts +1 -1
- package/locales/extra/pt-MZ.mjs +2 -2
- package/locales/extra/pt-PT.d.ts +1 -1
- package/locales/extra/pt-PT.mjs +2 -2
- package/locales/extra/pt-ST.d.ts +1 -1
- package/locales/extra/pt-ST.mjs +2 -2
- package/locales/extra/pt-TL.d.ts +1 -1
- package/locales/extra/pt-TL.mjs +2 -2
- package/locales/extra/pt.d.ts +1 -1
- package/locales/extra/pt.mjs +2 -2
- package/locales/extra/qu-BO.d.ts +1 -1
- package/locales/extra/qu-BO.mjs +2 -2
- package/locales/extra/qu-EC.d.ts +1 -1
- package/locales/extra/qu-EC.mjs +2 -2
- package/locales/extra/qu.d.ts +1 -1
- package/locales/extra/qu.mjs +2 -2
- package/locales/extra/rm.d.ts +1 -1
- package/locales/extra/rm.mjs +2 -2
- package/locales/extra/rn.d.ts +1 -1
- package/locales/extra/rn.mjs +2 -2
- package/locales/extra/ro-MD.d.ts +1 -1
- package/locales/extra/ro-MD.mjs +2 -2
- package/locales/extra/ro.d.ts +1 -1
- package/locales/extra/ro.mjs +2 -2
- package/locales/extra/rof.d.ts +1 -1
- package/locales/extra/rof.mjs +2 -2
- package/locales/extra/ru-BY.d.ts +1 -1
- package/locales/extra/ru-BY.mjs +2 -2
- package/locales/extra/ru-KG.d.ts +1 -1
- package/locales/extra/ru-KG.mjs +2 -2
- package/locales/extra/ru-KZ.d.ts +1 -1
- package/locales/extra/ru-KZ.mjs +2 -2
- package/locales/extra/ru-MD.d.ts +1 -1
- package/locales/extra/ru-MD.mjs +2 -2
- package/locales/extra/ru-UA.d.ts +1 -1
- package/locales/extra/ru-UA.mjs +2 -2
- package/locales/extra/ru.d.ts +1 -1
- package/locales/extra/ru.mjs +2 -2
- package/locales/extra/rw.d.ts +1 -1
- package/locales/extra/rw.mjs +2 -2
- package/locales/extra/rwk.d.ts +1 -1
- package/locales/extra/rwk.mjs +2 -2
- package/locales/extra/sa.d.ts +1 -1
- package/locales/extra/sa.mjs +2 -2
- package/locales/extra/sah.d.ts +1 -1
- package/locales/extra/sah.mjs +2 -2
- package/locales/extra/saq.d.ts +1 -1
- package/locales/extra/saq.mjs +2 -2
- package/locales/extra/sat-Olck.d.ts +1 -1
- package/locales/extra/sat-Olck.mjs +2 -2
- package/locales/extra/sat.d.ts +1 -1
- package/locales/extra/sat.mjs +2 -2
- package/locales/extra/sbp.d.ts +1 -1
- package/locales/extra/sbp.mjs +2 -2
- package/locales/extra/sc.d.ts +1 -1
- package/locales/extra/sc.mjs +2 -2
- package/locales/extra/sd-Arab.d.ts +1 -1
- package/locales/extra/sd-Arab.mjs +2 -2
- package/locales/extra/sd-Deva.d.ts +1 -1
- package/locales/extra/sd-Deva.mjs +2 -2
- package/locales/extra/sd.d.ts +1 -1
- package/locales/extra/sd.mjs +2 -2
- package/locales/extra/se-FI.d.ts +1 -1
- package/locales/extra/se-FI.mjs +2 -2
- package/locales/extra/se-SE.d.ts +1 -1
- package/locales/extra/se-SE.mjs +2 -2
- package/locales/extra/se.d.ts +1 -1
- package/locales/extra/se.mjs +2 -2
- package/locales/extra/seh.d.ts +1 -1
- package/locales/extra/seh.mjs +2 -2
- package/locales/extra/ses.d.ts +1 -1
- package/locales/extra/ses.mjs +2 -2
- package/locales/extra/sg.d.ts +1 -1
- package/locales/extra/sg.mjs +2 -2
- package/locales/extra/shi-Latn.d.ts +1 -1
- package/locales/extra/shi-Latn.mjs +2 -2
- package/locales/extra/shi-Tfng.d.ts +1 -1
- package/locales/extra/shi-Tfng.mjs +2 -2
- package/locales/extra/shi.d.ts +1 -1
- package/locales/extra/shi.mjs +2 -2
- package/locales/extra/si.d.ts +1 -1
- package/locales/extra/si.mjs +2 -2
- package/locales/extra/sk.d.ts +1 -1
- package/locales/extra/sk.mjs +2 -2
- package/locales/extra/sl.d.ts +1 -1
- package/locales/extra/sl.mjs +2 -2
- package/locales/extra/smn.d.ts +1 -1
- package/locales/extra/smn.mjs +2 -2
- package/locales/extra/sn.d.ts +1 -1
- package/locales/extra/sn.mjs +2 -2
- package/locales/extra/so-DJ.d.ts +1 -1
- package/locales/extra/so-DJ.mjs +2 -2
- package/locales/extra/so-ET.d.ts +1 -1
- package/locales/extra/so-ET.mjs +2 -2
- package/locales/extra/so-KE.d.ts +1 -1
- package/locales/extra/so-KE.mjs +2 -2
- package/locales/extra/so.d.ts +1 -1
- package/locales/extra/so.mjs +2 -2
- package/locales/extra/sq-MK.d.ts +1 -1
- package/locales/extra/sq-MK.mjs +2 -2
- package/locales/extra/sq-XK.d.ts +1 -1
- package/locales/extra/sq-XK.mjs +2 -2
- package/locales/extra/sq.d.ts +1 -1
- package/locales/extra/sq.mjs +2 -2
- package/locales/extra/sr-Cyrl-BA.d.ts +1 -1
- package/locales/extra/sr-Cyrl-BA.mjs +2 -2
- package/locales/extra/sr-Cyrl-ME.d.ts +1 -1
- package/locales/extra/sr-Cyrl-ME.mjs +2 -2
- package/locales/extra/sr-Cyrl-XK.d.ts +1 -1
- package/locales/extra/sr-Cyrl-XK.mjs +2 -2
- package/locales/extra/sr-Cyrl.d.ts +1 -1
- package/locales/extra/sr-Cyrl.mjs +2 -2
- package/locales/extra/sr-Latn-BA.d.ts +1 -1
- package/locales/extra/sr-Latn-BA.mjs +2 -2
- package/locales/extra/sr-Latn-ME.d.ts +1 -1
- package/locales/extra/sr-Latn-ME.mjs +2 -2
- package/locales/extra/sr-Latn-XK.d.ts +1 -1
- package/locales/extra/sr-Latn-XK.mjs +2 -2
- package/locales/extra/sr-Latn.d.ts +1 -1
- package/locales/extra/sr-Latn.mjs +2 -2
- package/locales/extra/sr.d.ts +1 -1
- package/locales/extra/sr.mjs +2 -2
- package/locales/extra/su-Latn.d.ts +1 -1
- package/locales/extra/su-Latn.mjs +2 -2
- package/locales/extra/su.d.ts +1 -1
- package/locales/extra/su.mjs +2 -2
- package/locales/extra/sv-AX.d.ts +1 -1
- package/locales/extra/sv-AX.mjs +2 -2
- package/locales/extra/sv-FI.d.ts +1 -1
- package/locales/extra/sv-FI.mjs +2 -2
- package/locales/extra/sv.d.ts +1 -1
- package/locales/extra/sv.mjs +2 -2
- package/locales/extra/sw-CD.d.ts +1 -1
- package/locales/extra/sw-CD.mjs +2 -2
- package/locales/extra/sw-KE.d.ts +1 -1
- package/locales/extra/sw-KE.mjs +2 -2
- package/locales/extra/sw-UG.d.ts +1 -1
- package/locales/extra/sw-UG.mjs +2 -2
- package/locales/extra/sw.d.ts +1 -1
- package/locales/extra/sw.mjs +2 -2
- package/locales/extra/ta-LK.d.ts +1 -1
- package/locales/extra/ta-LK.mjs +2 -2
- package/locales/extra/ta-MY.d.ts +1 -1
- package/locales/extra/ta-MY.mjs +2 -2
- package/locales/extra/ta-SG.d.ts +1 -1
- package/locales/extra/ta-SG.mjs +2 -2
- package/locales/extra/ta.d.ts +1 -1
- package/locales/extra/ta.mjs +2 -2
- package/locales/extra/te.d.ts +1 -1
- package/locales/extra/te.mjs +2 -2
- package/locales/extra/teo-KE.d.ts +1 -1
- package/locales/extra/teo-KE.mjs +2 -2
- package/locales/extra/teo.d.ts +1 -1
- package/locales/extra/teo.mjs +2 -2
- package/locales/extra/tg.d.ts +1 -1
- package/locales/extra/tg.mjs +2 -2
- package/locales/extra/th.d.ts +1 -1
- package/locales/extra/th.mjs +2 -2
- package/locales/extra/ti-ER.d.ts +1 -1
- package/locales/extra/ti-ER.mjs +2 -2
- package/locales/extra/ti.d.ts +1 -1
- package/locales/extra/ti.mjs +2 -2
- package/locales/extra/tk.d.ts +1 -1
- package/locales/extra/tk.mjs +2 -2
- package/locales/extra/to.d.ts +1 -1
- package/locales/extra/to.mjs +2 -2
- package/locales/extra/tr-CY.d.ts +1 -1
- package/locales/extra/tr-CY.mjs +2 -2
- package/locales/extra/tr.d.ts +1 -1
- package/locales/extra/tr.mjs +2 -2
- package/locales/extra/tt.d.ts +1 -1
- package/locales/extra/tt.mjs +2 -2
- package/locales/extra/twq.d.ts +1 -1
- package/locales/extra/twq.mjs +2 -2
- package/locales/extra/tzm.d.ts +1 -1
- package/locales/extra/tzm.mjs +2 -2
- package/locales/extra/ug.d.ts +1 -1
- package/locales/extra/ug.mjs +2 -2
- package/locales/extra/uk.d.ts +1 -1
- package/locales/extra/uk.mjs +2 -2
- package/locales/extra/und.d.ts +1 -1
- package/locales/extra/und.mjs +2 -2
- package/locales/extra/ur-IN.d.ts +1 -1
- package/locales/extra/ur-IN.mjs +2 -2
- package/locales/extra/ur.d.ts +1 -1
- package/locales/extra/ur.mjs +2 -2
- package/locales/extra/uz-Arab.d.ts +1 -1
- package/locales/extra/uz-Arab.mjs +2 -2
- package/locales/extra/uz-Cyrl.d.ts +1 -1
- package/locales/extra/uz-Cyrl.mjs +2 -2
- package/locales/extra/uz-Latn.d.ts +1 -1
- package/locales/extra/uz-Latn.mjs +2 -2
- package/locales/extra/uz.d.ts +1 -1
- package/locales/extra/uz.mjs +2 -2
- package/locales/extra/vai-Latn.d.ts +1 -1
- package/locales/extra/vai-Latn.mjs +2 -2
- package/locales/extra/vai-Vaii.d.ts +1 -1
- package/locales/extra/vai-Vaii.mjs +2 -2
- package/locales/extra/vai.d.ts +1 -1
- package/locales/extra/vai.mjs +2 -2
- package/locales/extra/vi.d.ts +1 -1
- package/locales/extra/vi.mjs +2 -2
- package/locales/extra/vun.d.ts +1 -1
- package/locales/extra/vun.mjs +2 -2
- package/locales/extra/wae.d.ts +1 -1
- package/locales/extra/wae.mjs +2 -2
- package/locales/extra/wo.d.ts +1 -1
- package/locales/extra/wo.mjs +2 -2
- package/locales/extra/xh.d.ts +1 -1
- package/locales/extra/xh.mjs +2 -2
- package/locales/extra/xog.d.ts +1 -1
- package/locales/extra/xog.mjs +2 -2
- package/locales/extra/yav.d.ts +1 -1
- package/locales/extra/yav.mjs +2 -2
- package/locales/extra/yi.d.ts +1 -1
- package/locales/extra/yi.mjs +2 -2
- package/locales/extra/yo-BJ.d.ts +1 -1
- package/locales/extra/yo-BJ.mjs +2 -2
- package/locales/extra/yo.d.ts +1 -1
- package/locales/extra/yo.mjs +2 -2
- package/locales/extra/yrl-CO.d.ts +1 -1
- package/locales/extra/yrl-CO.mjs +2 -2
- package/locales/extra/yrl-VE.d.ts +1 -1
- package/locales/extra/yrl-VE.mjs +2 -2
- package/locales/extra/yrl.d.ts +1 -1
- package/locales/extra/yrl.mjs +2 -2
- package/locales/extra/yue-Hans.d.ts +1 -1
- package/locales/extra/yue-Hans.mjs +2 -2
- package/locales/extra/yue-Hant.d.ts +1 -1
- package/locales/extra/yue-Hant.mjs +2 -2
- package/locales/extra/yue.d.ts +1 -1
- package/locales/extra/yue.mjs +2 -2
- package/locales/extra/zgh.d.ts +1 -1
- package/locales/extra/zgh.mjs +2 -2
- package/locales/extra/zh-Hans-HK.d.ts +1 -1
- package/locales/extra/zh-Hans-HK.mjs +2 -2
- package/locales/extra/zh-Hans-MO.d.ts +1 -1
- package/locales/extra/zh-Hans-MO.mjs +2 -2
- package/locales/extra/zh-Hans-SG.d.ts +1 -1
- package/locales/extra/zh-Hans-SG.mjs +2 -2
- package/locales/extra/zh-Hans.d.ts +1 -1
- package/locales/extra/zh-Hans.mjs +2 -2
- package/locales/extra/zh-Hant-HK.d.ts +1 -1
- package/locales/extra/zh-Hant-HK.mjs +2 -2
- package/locales/extra/zh-Hant-MO.d.ts +1 -1
- package/locales/extra/zh-Hant-MO.mjs +2 -2
- package/locales/extra/zh-Hant.d.ts +1 -1
- package/locales/extra/zh-Hant.mjs +2 -2
- package/locales/extra/zh.d.ts +1 -1
- package/locales/extra/zh.mjs +2 -2
- package/locales/extra/zu.d.ts +1 -1
- package/locales/extra/zu.mjs +2 -2
- package/locales/fa-AF.d.ts +1 -1
- package/locales/fa-AF.mjs +2 -2
- package/locales/fa.d.ts +1 -1
- package/locales/fa.mjs +2 -2
- package/locales/ff-Adlm-BF.d.ts +1 -1
- package/locales/ff-Adlm-BF.mjs +2 -2
- package/locales/ff-Adlm-CM.d.ts +1 -1
- package/locales/ff-Adlm-CM.mjs +2 -2
- package/locales/ff-Adlm-GH.d.ts +1 -1
- package/locales/ff-Adlm-GH.mjs +2 -2
- package/locales/ff-Adlm-GM.d.ts +1 -1
- package/locales/ff-Adlm-GM.mjs +2 -2
- package/locales/ff-Adlm-GW.d.ts +1 -1
- package/locales/ff-Adlm-GW.mjs +2 -2
- package/locales/ff-Adlm-LR.d.ts +1 -1
- package/locales/ff-Adlm-LR.mjs +2 -2
- package/locales/ff-Adlm-MR.d.ts +1 -1
- package/locales/ff-Adlm-MR.mjs +2 -2
- package/locales/ff-Adlm-NE.d.ts +1 -1
- package/locales/ff-Adlm-NE.mjs +2 -2
- package/locales/ff-Adlm-NG.d.ts +1 -1
- package/locales/ff-Adlm-NG.mjs +2 -2
- package/locales/ff-Adlm-SL.d.ts +1 -1
- package/locales/ff-Adlm-SL.mjs +2 -2
- package/locales/ff-Adlm-SN.d.ts +1 -1
- package/locales/ff-Adlm-SN.mjs +2 -2
- package/locales/ff-Adlm.d.ts +1 -1
- package/locales/ff-Adlm.mjs +2 -2
- package/locales/ff-CM.d.ts +1 -1
- package/locales/ff-CM.mjs +2 -2
- package/locales/ff-GN.d.ts +1 -1
- package/locales/ff-GN.mjs +2 -2
- package/locales/ff-Latn-BF.d.ts +1 -1
- package/locales/ff-Latn-BF.mjs +2 -2
- package/locales/ff-Latn-CM.d.ts +1 -1
- package/locales/ff-Latn-CM.mjs +2 -2
- package/locales/ff-Latn-GH.d.ts +1 -1
- package/locales/ff-Latn-GH.mjs +2 -2
- package/locales/ff-Latn-GM.d.ts +1 -1
- package/locales/ff-Latn-GM.mjs +2 -2
- package/locales/ff-Latn-GN.d.ts +1 -1
- package/locales/ff-Latn-GN.mjs +2 -2
- package/locales/ff-Latn-GW.d.ts +1 -1
- package/locales/ff-Latn-GW.mjs +2 -2
- package/locales/ff-Latn-LR.d.ts +1 -1
- package/locales/ff-Latn-LR.mjs +2 -2
- package/locales/ff-Latn-MR.d.ts +1 -1
- package/locales/ff-Latn-MR.mjs +2 -2
- package/locales/ff-Latn-NE.d.ts +1 -1
- package/locales/ff-Latn-NE.mjs +2 -2
- package/locales/ff-Latn-NG.d.ts +1 -1
- package/locales/ff-Latn-NG.mjs +2 -2
- package/locales/ff-Latn-SL.d.ts +1 -1
- package/locales/ff-Latn-SL.mjs +2 -2
- package/locales/ff-Latn.d.ts +1 -1
- package/locales/ff-Latn.mjs +2 -2
- package/locales/ff-MR.d.ts +1 -1
- package/locales/ff-MR.mjs +2 -2
- package/locales/ff.d.ts +1 -1
- package/locales/ff.mjs +2 -2
- package/locales/fi.d.ts +1 -1
- package/locales/fi.mjs +2 -2
- package/locales/fil.d.ts +1 -1
- package/locales/fil.mjs +2 -2
- package/locales/fo-DK.d.ts +1 -1
- package/locales/fo-DK.mjs +2 -2
- package/locales/fo.d.ts +1 -1
- package/locales/fo.mjs +2 -2
- package/locales/fr-BE.d.ts +1 -1
- package/locales/fr-BE.mjs +2 -2
- package/locales/fr-BF.d.ts +1 -1
- package/locales/fr-BF.mjs +2 -2
- package/locales/fr-BI.d.ts +1 -1
- package/locales/fr-BI.mjs +2 -2
- package/locales/fr-BJ.d.ts +1 -1
- package/locales/fr-BJ.mjs +2 -2
- package/locales/fr-BL.d.ts +1 -1
- package/locales/fr-BL.mjs +2 -2
- package/locales/fr-CA.d.ts +1 -1
- package/locales/fr-CA.mjs +2 -2
- package/locales/fr-CD.d.ts +1 -1
- package/locales/fr-CD.mjs +2 -2
- package/locales/fr-CF.d.ts +1 -1
- package/locales/fr-CF.mjs +2 -2
- package/locales/fr-CG.d.ts +1 -1
- package/locales/fr-CG.mjs +2 -2
- package/locales/fr-CH.d.ts +1 -1
- package/locales/fr-CH.mjs +2 -2
- package/locales/fr-CI.d.ts +1 -1
- package/locales/fr-CI.mjs +2 -2
- package/locales/fr-CM.d.ts +1 -1
- package/locales/fr-CM.mjs +2 -2
- package/locales/fr-DJ.d.ts +1 -1
- package/locales/fr-DJ.mjs +2 -2
- package/locales/fr-DZ.d.ts +1 -1
- package/locales/fr-DZ.mjs +2 -2
- package/locales/fr-GA.d.ts +1 -1
- package/locales/fr-GA.mjs +2 -2
- package/locales/fr-GF.d.ts +1 -1
- package/locales/fr-GF.mjs +2 -2
- package/locales/fr-GN.d.ts +1 -1
- package/locales/fr-GN.mjs +2 -2
- package/locales/fr-GP.d.ts +1 -1
- package/locales/fr-GP.mjs +2 -2
- package/locales/fr-GQ.d.ts +1 -1
- package/locales/fr-GQ.mjs +2 -2
- package/locales/fr-HT.d.ts +1 -1
- package/locales/fr-HT.mjs +2 -2
- package/locales/fr-KM.d.ts +1 -1
- package/locales/fr-KM.mjs +2 -2
- package/locales/fr-LU.d.ts +1 -1
- package/locales/fr-LU.mjs +2 -2
- package/locales/fr-MA.d.ts +1 -1
- package/locales/fr-MA.mjs +2 -2
- package/locales/fr-MC.d.ts +1 -1
- package/locales/fr-MC.mjs +2 -2
- package/locales/fr-MF.d.ts +1 -1
- package/locales/fr-MF.mjs +2 -2
- package/locales/fr-MG.d.ts +1 -1
- package/locales/fr-MG.mjs +2 -2
- package/locales/fr-ML.d.ts +1 -1
- package/locales/fr-ML.mjs +2 -2
- package/locales/fr-MQ.d.ts +1 -1
- package/locales/fr-MQ.mjs +2 -2
- package/locales/fr-MR.d.ts +1 -1
- package/locales/fr-MR.mjs +2 -2
- package/locales/fr-MU.d.ts +1 -1
- package/locales/fr-MU.mjs +2 -2
- package/locales/fr-NC.d.ts +1 -1
- package/locales/fr-NC.mjs +2 -2
- package/locales/fr-NE.d.ts +1 -1
- package/locales/fr-NE.mjs +2 -2
- package/locales/fr-PF.d.ts +1 -1
- package/locales/fr-PF.mjs +2 -2
- package/locales/fr-PM.d.ts +1 -1
- package/locales/fr-PM.mjs +2 -2
- package/locales/fr-RE.d.ts +1 -1
- package/locales/fr-RE.mjs +2 -2
- package/locales/fr-RW.d.ts +1 -1
- package/locales/fr-RW.mjs +2 -2
- package/locales/fr-SC.d.ts +1 -1
- package/locales/fr-SC.mjs +2 -2
- package/locales/fr-SN.d.ts +1 -1
- package/locales/fr-SN.mjs +2 -2
- package/locales/fr-SY.d.ts +1 -1
- package/locales/fr-SY.mjs +2 -2
- package/locales/fr-TD.d.ts +1 -1
- package/locales/fr-TD.mjs +2 -2
- package/locales/fr-TG.d.ts +1 -1
- package/locales/fr-TG.mjs +2 -2
- package/locales/fr-TN.d.ts +1 -1
- package/locales/fr-TN.mjs +2 -2
- package/locales/fr-VU.d.ts +1 -1
- package/locales/fr-VU.mjs +2 -2
- package/locales/fr-WF.d.ts +1 -1
- package/locales/fr-WF.mjs +2 -2
- package/locales/fr-YT.d.ts +1 -1
- package/locales/fr-YT.mjs +2 -2
- package/locales/fr.d.ts +1 -1
- package/locales/fr.mjs +2 -2
- package/locales/fur.d.ts +1 -1
- package/locales/fur.mjs +2 -2
- package/locales/fy.d.ts +1 -1
- package/locales/fy.mjs +2 -2
- package/locales/ga-GB.d.ts +1 -1
- package/locales/ga-GB.mjs +2 -2
- package/locales/ga.d.ts +1 -1
- package/locales/ga.mjs +2 -2
- package/locales/gd.d.ts +1 -1
- package/locales/gd.mjs +2 -2
- package/locales/gl.d.ts +1 -1
- package/locales/gl.mjs +2 -2
- package/locales/global/af-NA.js +1 -1
- package/locales/global/af.js +1 -1
- package/locales/global/agq.js +1 -1
- package/locales/global/ak.js +1 -1
- package/locales/global/am.js +1 -1
- package/locales/global/ar-AE.js +1 -1
- package/locales/global/ar-BH.js +1 -1
- package/locales/global/ar-DJ.js +1 -1
- package/locales/global/ar-DZ.js +1 -1
- package/locales/global/ar-EG.js +1 -1
- package/locales/global/ar-EH.js +1 -1
- package/locales/global/ar-ER.js +1 -1
- package/locales/global/ar-IL.js +1 -1
- package/locales/global/ar-IQ.js +1 -1
- package/locales/global/ar-JO.js +1 -1
- package/locales/global/ar-KM.js +1 -1
- package/locales/global/ar-KW.js +1 -1
- package/locales/global/ar-LB.js +1 -1
- package/locales/global/ar-LY.js +1 -1
- package/locales/global/ar-MA.js +1 -1
- package/locales/global/ar-MR.js +1 -1
- package/locales/global/ar-OM.js +1 -1
- package/locales/global/ar-PS.js +1 -1
- package/locales/global/ar-QA.js +1 -1
- package/locales/global/ar-SA.js +1 -1
- package/locales/global/ar-SD.js +1 -1
- package/locales/global/ar-SO.js +1 -1
- package/locales/global/ar-SS.js +1 -1
- package/locales/global/ar-SY.js +1 -1
- package/locales/global/ar-TD.js +1 -1
- package/locales/global/ar-TN.js +1 -1
- package/locales/global/ar-YE.js +1 -1
- package/locales/global/ar.js +1 -1
- package/locales/global/as.js +1 -1
- package/locales/global/asa.js +1 -1
- package/locales/global/ast.js +1 -1
- package/locales/global/az-Cyrl.js +1 -1
- package/locales/global/az-Latn.js +1 -1
- package/locales/global/az.js +1 -1
- package/locales/global/bas.js +1 -1
- package/locales/global/be-tarask.js +1 -1
- package/locales/global/be.js +1 -1
- package/locales/global/bem.js +1 -1
- package/locales/global/bez.js +1 -1
- package/locales/global/bg.js +1 -1
- package/locales/global/bm.js +1 -1
- package/locales/global/bn-IN.js +1 -1
- package/locales/global/bn.js +1 -1
- package/locales/global/bo-IN.js +1 -1
- package/locales/global/bo.js +1 -1
- package/locales/global/br.js +1 -1
- package/locales/global/brx.js +1 -1
- package/locales/global/bs-Cyrl.js +1 -1
- package/locales/global/bs-Latn.js +1 -1
- package/locales/global/bs.js +1 -1
- package/locales/global/ca-AD.js +1 -1
- package/locales/global/ca-ES-valencia.js +1 -1
- package/locales/global/ca-FR.js +1 -1
- package/locales/global/ca-IT.js +1 -1
- package/locales/global/ca.js +1 -1
- package/locales/global/ccp-IN.js +1 -1
- package/locales/global/ccp.js +1 -1
- package/locales/global/ce.js +1 -1
- package/locales/global/ceb.js +1 -1
- package/locales/global/cgg.js +1 -1
- package/locales/global/chr.js +1 -1
- package/locales/global/ckb-IR.js +1 -1
- package/locales/global/ckb.js +1 -1
- package/locales/global/cs.js +1 -1
- package/locales/global/cy.js +1 -1
- package/locales/global/da-GL.js +1 -1
- package/locales/global/da.js +1 -1
- package/locales/global/dav.js +1 -1
- package/locales/global/de-AT.js +1 -1
- package/locales/global/de-BE.js +1 -1
- package/locales/global/de-CH.js +1 -1
- package/locales/global/de-IT.js +1 -1
- package/locales/global/de-LI.js +1 -1
- package/locales/global/de-LU.js +1 -1
- package/locales/global/de.js +1 -1
- package/locales/global/dje.js +1 -1
- package/locales/global/doi.js +1 -1
- package/locales/global/dsb.js +1 -1
- package/locales/global/dua.js +1 -1
- package/locales/global/dyo.js +1 -1
- package/locales/global/dz.js +1 -1
- package/locales/global/ebu.js +1 -1
- package/locales/global/ee-TG.js +1 -1
- package/locales/global/ee.js +1 -1
- package/locales/global/el-CY.js +1 -1
- package/locales/global/el.js +1 -1
- package/locales/global/en-001.js +1 -1
- package/locales/global/en-150.js +1 -1
- package/locales/global/en-AE.js +1 -1
- package/locales/global/en-AG.js +1 -1
- package/locales/global/en-AI.js +1 -1
- package/locales/global/en-AS.js +1 -1
- package/locales/global/en-AT.js +1 -1
- package/locales/global/en-AU.js +1 -1
- package/locales/global/en-BB.js +1 -1
- package/locales/global/en-BE.js +1 -1
- package/locales/global/en-BI.js +1 -1
- package/locales/global/en-BM.js +1 -1
- package/locales/global/en-BS.js +1 -1
- package/locales/global/en-BW.js +1 -1
- package/locales/global/en-BZ.js +1 -1
- package/locales/global/en-CA.js +1 -1
- package/locales/global/en-CC.js +1 -1
- package/locales/global/en-CH.js +1 -1
- package/locales/global/en-CK.js +1 -1
- package/locales/global/en-CM.js +1 -1
- package/locales/global/en-CX.js +1 -1
- package/locales/global/en-CY.js +1 -1
- package/locales/global/en-DE.js +1 -1
- package/locales/global/en-DG.js +1 -1
- package/locales/global/en-DK.js +1 -1
- package/locales/global/en-DM.js +1 -1
- package/locales/global/en-ER.js +1 -1
- package/locales/global/en-FI.js +1 -1
- package/locales/global/en-FJ.js +1 -1
- package/locales/global/en-FK.js +1 -1
- package/locales/global/en-FM.js +1 -1
- package/locales/global/en-GB.js +1 -1
- package/locales/global/en-GD.js +1 -1
- package/locales/global/en-GG.js +1 -1
- package/locales/global/en-GH.js +1 -1
- package/locales/global/en-GI.js +1 -1
- package/locales/global/en-GM.js +1 -1
- package/locales/global/en-GU.js +1 -1
- package/locales/global/en-GY.js +1 -1
- package/locales/global/en-HK.js +1 -1
- package/locales/global/en-IE.js +1 -1
- package/locales/global/en-IL.js +1 -1
- package/locales/global/en-IM.js +1 -1
- package/locales/global/en-IN.js +1 -1
- package/locales/global/en-IO.js +1 -1
- package/locales/global/en-JE.js +1 -1
- package/locales/global/en-JM.js +1 -1
- package/locales/global/en-KE.js +1 -1
- package/locales/global/en-KI.js +1 -1
- package/locales/global/en-KN.js +1 -1
- package/locales/global/en-KY.js +1 -1
- package/locales/global/en-LC.js +1 -1
- package/locales/global/en-LR.js +1 -1
- package/locales/global/en-LS.js +1 -1
- package/locales/global/en-MG.js +1 -1
- package/locales/global/en-MH.js +1 -1
- package/locales/global/en-MO.js +1 -1
- package/locales/global/en-MP.js +1 -1
- package/locales/global/en-MS.js +1 -1
- package/locales/global/en-MT.js +1 -1
- package/locales/global/en-MU.js +1 -1
- package/locales/global/en-MV.js +1 -1
- package/locales/global/en-MW.js +1 -1
- package/locales/global/en-MY.js +1 -1
- package/locales/global/en-NA.js +1 -1
- package/locales/global/en-NF.js +1 -1
- package/locales/global/en-NG.js +1 -1
- package/locales/global/en-NL.js +1 -1
- package/locales/global/en-NR.js +1 -1
- package/locales/global/en-NU.js +1 -1
- package/locales/global/en-NZ.js +1 -1
- package/locales/global/en-PG.js +1 -1
- package/locales/global/en-PH.js +1 -1
- package/locales/global/en-PK.js +1 -1
- package/locales/global/en-PN.js +1 -1
- package/locales/global/en-PR.js +1 -1
- package/locales/global/en-PW.js +1 -1
- package/locales/global/en-RW.js +1 -1
- package/locales/global/en-SB.js +1 -1
- package/locales/global/en-SC.js +1 -1
- package/locales/global/en-SD.js +1 -1
- package/locales/global/en-SE.js +1 -1
- package/locales/global/en-SG.js +1 -1
- package/locales/global/en-SH.js +1 -1
- package/locales/global/en-SI.js +1 -1
- package/locales/global/en-SL.js +1 -1
- package/locales/global/en-SS.js +1 -1
- package/locales/global/en-SX.js +1 -1
- package/locales/global/en-SZ.js +1 -1
- package/locales/global/en-TC.js +1 -1
- package/locales/global/en-TK.js +1 -1
- package/locales/global/en-TO.js +1 -1
- package/locales/global/en-TT.js +1 -1
- package/locales/global/en-TV.js +1 -1
- package/locales/global/en-TZ.js +1 -1
- package/locales/global/en-UG.js +1 -1
- package/locales/global/en-UM.js +1 -1
- package/locales/global/en-VC.js +1 -1
- package/locales/global/en-VG.js +1 -1
- package/locales/global/en-VI.js +1 -1
- package/locales/global/en-VU.js +1 -1
- package/locales/global/en-WS.js +1 -1
- package/locales/global/en-ZA.js +1 -1
- package/locales/global/en-ZM.js +1 -1
- package/locales/global/en-ZW.js +1 -1
- package/locales/global/en.js +1 -1
- package/locales/global/eo.js +1 -1
- package/locales/global/es-419.js +1 -1
- package/locales/global/es-AR.js +1 -1
- package/locales/global/es-BO.js +1 -1
- package/locales/global/es-BR.js +1 -1
- package/locales/global/es-BZ.js +1 -1
- package/locales/global/es-CL.js +1 -1
- package/locales/global/es-CO.js +1 -1
- package/locales/global/es-CR.js +1 -1
- package/locales/global/es-CU.js +1 -1
- package/locales/global/es-DO.js +1 -1
- package/locales/global/es-EA.js +1 -1
- package/locales/global/es-EC.js +1 -1
- package/locales/global/es-GQ.js +1 -1
- package/locales/global/es-GT.js +1 -1
- package/locales/global/es-HN.js +1 -1
- package/locales/global/es-IC.js +1 -1
- package/locales/global/es-MX.js +1 -1
- package/locales/global/es-NI.js +1 -1
- package/locales/global/es-PA.js +1 -1
- package/locales/global/es-PE.js +1 -1
- package/locales/global/es-PH.js +1 -1
- package/locales/global/es-PR.js +1 -1
- package/locales/global/es-PY.js +1 -1
- package/locales/global/es-SV.js +1 -1
- package/locales/global/es-US.js +1 -1
- package/locales/global/es-UY.js +1 -1
- package/locales/global/es-VE.js +1 -1
- package/locales/global/es.js +1 -1
- package/locales/global/et.js +1 -1
- package/locales/global/eu.js +1 -1
- package/locales/global/ewo.js +1 -1
- package/locales/global/fa-AF.js +1 -1
- package/locales/global/fa.js +1 -1
- package/locales/global/ff-Adlm-BF.js +1 -1
- package/locales/global/ff-Adlm-CM.js +1 -1
- package/locales/global/ff-Adlm-GH.js +1 -1
- package/locales/global/ff-Adlm-GM.js +1 -1
- package/locales/global/ff-Adlm-GW.js +1 -1
- package/locales/global/ff-Adlm-LR.js +1 -1
- package/locales/global/ff-Adlm-MR.js +1 -1
- package/locales/global/ff-Adlm-NE.js +1 -1
- package/locales/global/ff-Adlm-NG.js +1 -1
- package/locales/global/ff-Adlm-SL.js +1 -1
- package/locales/global/ff-Adlm-SN.js +1 -1
- package/locales/global/ff-Adlm.js +1 -1
- package/locales/global/ff-CM.js +1 -1
- package/locales/global/ff-GN.js +1 -1
- package/locales/global/ff-Latn-BF.js +1 -1
- package/locales/global/ff-Latn-CM.js +1 -1
- package/locales/global/ff-Latn-GH.js +1 -1
- package/locales/global/ff-Latn-GM.js +1 -1
- package/locales/global/ff-Latn-GN.js +1 -1
- package/locales/global/ff-Latn-GW.js +1 -1
- package/locales/global/ff-Latn-LR.js +1 -1
- package/locales/global/ff-Latn-MR.js +1 -1
- package/locales/global/ff-Latn-NE.js +1 -1
- package/locales/global/ff-Latn-NG.js +1 -1
- package/locales/global/ff-Latn-SL.js +1 -1
- package/locales/global/ff-Latn.js +1 -1
- package/locales/global/ff-MR.js +1 -1
- package/locales/global/ff.js +1 -1
- package/locales/global/fi.js +1 -1
- package/locales/global/fil.js +1 -1
- package/locales/global/fo-DK.js +1 -1
- package/locales/global/fo.js +1 -1
- package/locales/global/fr-BE.js +1 -1
- package/locales/global/fr-BF.js +1 -1
- package/locales/global/fr-BI.js +1 -1
- package/locales/global/fr-BJ.js +1 -1
- package/locales/global/fr-BL.js +1 -1
- package/locales/global/fr-CA.js +1 -1
- package/locales/global/fr-CD.js +1 -1
- package/locales/global/fr-CF.js +1 -1
- package/locales/global/fr-CG.js +1 -1
- package/locales/global/fr-CH.js +1 -1
- package/locales/global/fr-CI.js +1 -1
- package/locales/global/fr-CM.js +1 -1
- package/locales/global/fr-DJ.js +1 -1
- package/locales/global/fr-DZ.js +1 -1
- package/locales/global/fr-GA.js +1 -1
- package/locales/global/fr-GF.js +1 -1
- package/locales/global/fr-GN.js +1 -1
- package/locales/global/fr-GP.js +1 -1
- package/locales/global/fr-GQ.js +1 -1
- package/locales/global/fr-HT.js +1 -1
- package/locales/global/fr-KM.js +1 -1
- package/locales/global/fr-LU.js +1 -1
- package/locales/global/fr-MA.js +1 -1
- package/locales/global/fr-MC.js +1 -1
- package/locales/global/fr-MF.js +1 -1
- package/locales/global/fr-MG.js +1 -1
- package/locales/global/fr-ML.js +1 -1
- package/locales/global/fr-MQ.js +1 -1
- package/locales/global/fr-MR.js +1 -1
- package/locales/global/fr-MU.js +1 -1
- package/locales/global/fr-NC.js +1 -1
- package/locales/global/fr-NE.js +1 -1
- package/locales/global/fr-PF.js +1 -1
- package/locales/global/fr-PM.js +1 -1
- package/locales/global/fr-RE.js +1 -1
- package/locales/global/fr-RW.js +1 -1
- package/locales/global/fr-SC.js +1 -1
- package/locales/global/fr-SN.js +1 -1
- package/locales/global/fr-SY.js +1 -1
- package/locales/global/fr-TD.js +1 -1
- package/locales/global/fr-TG.js +1 -1
- package/locales/global/fr-TN.js +1 -1
- package/locales/global/fr-VU.js +1 -1
- package/locales/global/fr-WF.js +1 -1
- package/locales/global/fr-YT.js +1 -1
- package/locales/global/fr.js +1 -1
- package/locales/global/fur.js +1 -1
- package/locales/global/fy.js +1 -1
- package/locales/global/ga-GB.js +1 -1
- package/locales/global/ga.js +1 -1
- package/locales/global/gd.js +1 -1
- package/locales/global/gl.js +1 -1
- package/locales/global/gsw-FR.js +1 -1
- package/locales/global/gsw-LI.js +1 -1
- package/locales/global/gsw.js +1 -1
- package/locales/global/gu.js +1 -1
- package/locales/global/guz.js +1 -1
- package/locales/global/gv.js +1 -1
- package/locales/global/ha-GH.js +1 -1
- package/locales/global/ha-NE.js +1 -1
- package/locales/global/ha.js +1 -1
- package/locales/global/haw.js +1 -1
- package/locales/global/he.js +1 -1
- package/locales/global/hi-Latn.js +1 -1
- package/locales/global/hi.js +1 -1
- package/locales/global/hr-BA.js +1 -1
- package/locales/global/hr.js +1 -1
- package/locales/global/hsb.js +1 -1
- package/locales/global/hu.js +1 -1
- package/locales/global/hy.js +1 -1
- package/locales/global/ia.js +1 -1
- package/locales/global/id.js +1 -1
- package/locales/global/ig.js +1 -1
- package/locales/global/ii.js +1 -1
- package/locales/global/is.js +1 -1
- package/locales/global/it-CH.js +1 -1
- package/locales/global/it-SM.js +1 -1
- package/locales/global/it-VA.js +1 -1
- package/locales/global/it.js +1 -1
- package/locales/global/ja.js +1 -1
- package/locales/global/jgo.js +1 -1
- package/locales/global/jmc.js +1 -1
- package/locales/global/jv.js +1 -1
- package/locales/global/ka.js +1 -1
- package/locales/global/kab.js +1 -1
- package/locales/global/kam.js +1 -1
- package/locales/global/kde.js +1 -1
- package/locales/global/kea.js +1 -1
- package/locales/global/kgp.js +1 -1
- package/locales/global/khq.js +1 -1
- package/locales/global/ki.js +1 -1
- package/locales/global/kk.js +1 -1
- package/locales/global/kkj.js +1 -1
- package/locales/global/kl.js +1 -1
- package/locales/global/kln.js +1 -1
- package/locales/global/km.js +1 -1
- package/locales/global/kn.js +1 -1
- package/locales/global/ko-KP.js +1 -1
- package/locales/global/ko.js +1 -1
- package/locales/global/kok.js +1 -1
- package/locales/global/ks-Arab.js +1 -1
- package/locales/global/ks-Deva.js +1 -1
- package/locales/global/ks.js +1 -1
- package/locales/global/ksb.js +1 -1
- package/locales/global/ksf.js +1 -1
- package/locales/global/ksh.js +1 -1
- package/locales/global/ku.js +1 -1
- package/locales/global/kw.js +1 -1
- package/locales/global/ky.js +1 -1
- package/locales/global/lag.js +1 -1
- package/locales/global/lb.js +1 -1
- package/locales/global/lg.js +1 -1
- package/locales/global/lkt.js +1 -1
- package/locales/global/ln-AO.js +1 -1
- package/locales/global/ln-CF.js +1 -1
- package/locales/global/ln-CG.js +1 -1
- package/locales/global/ln.js +1 -1
- package/locales/global/lo.js +1 -1
- package/locales/global/lrc-IQ.js +1 -1
- package/locales/global/lrc.js +1 -1
- package/locales/global/lt.js +1 -1
- package/locales/global/lu.js +1 -1
- package/locales/global/luo.js +1 -1
- package/locales/global/luy.js +1 -1
- package/locales/global/lv.js +1 -1
- package/locales/global/mai.js +1 -1
- package/locales/global/mas-TZ.js +1 -1
- package/locales/global/mas.js +1 -1
- package/locales/global/mer.js +1 -1
- package/locales/global/mfe.js +1 -1
- package/locales/global/mg.js +1 -1
- package/locales/global/mgh.js +1 -1
- package/locales/global/mgo.js +1 -1
- package/locales/global/mi.js +1 -1
- package/locales/global/mk.js +1 -1
- package/locales/global/ml.js +1 -1
- package/locales/global/mn.js +1 -1
- package/locales/global/mni-Beng.js +1 -1
- package/locales/global/mni.js +1 -1
- package/locales/global/mr.js +1 -1
- package/locales/global/ms-BN.js +1 -1
- package/locales/global/ms-ID.js +1 -1
- package/locales/global/ms-SG.js +1 -1
- package/locales/global/ms.js +1 -1
- package/locales/global/mt.js +1 -1
- package/locales/global/mua.js +1 -1
- package/locales/global/my.js +1 -1
- package/locales/global/mzn.js +1 -1
- package/locales/global/naq.js +1 -1
- package/locales/global/nb-SJ.js +1 -1
- package/locales/global/nb.js +1 -1
- package/locales/global/nd.js +1 -1
- package/locales/global/nds-NL.js +1 -1
- package/locales/global/nds.js +1 -1
- package/locales/global/ne-IN.js +1 -1
- package/locales/global/ne.js +1 -1
- package/locales/global/nl-AW.js +1 -1
- package/locales/global/nl-BE.js +1 -1
- package/locales/global/nl-BQ.js +1 -1
- package/locales/global/nl-CW.js +1 -1
- package/locales/global/nl-SR.js +1 -1
- package/locales/global/nl-SX.js +1 -1
- package/locales/global/nl.js +1 -1
- package/locales/global/nmg.js +1 -1
- package/locales/global/nn.js +1 -1
- package/locales/global/nnh.js +1 -1
- package/locales/global/no.js +1 -1
- package/locales/global/nus.js +1 -1
- package/locales/global/nyn.js +1 -1
- package/locales/global/om-KE.js +1 -1
- package/locales/global/om.js +1 -1
- package/locales/global/or.js +1 -1
- package/locales/global/os-RU.js +1 -1
- package/locales/global/os.js +1 -1
- package/locales/global/pa-Arab.js +1 -1
- package/locales/global/pa-Guru.js +1 -1
- package/locales/global/pa.js +1 -1
- package/locales/global/pcm.js +1 -1
- package/locales/global/pl.js +1 -1
- package/locales/global/ps-PK.js +1 -1
- package/locales/global/ps.js +1 -1
- package/locales/global/pt-AO.js +1 -1
- package/locales/global/pt-CH.js +1 -1
- package/locales/global/pt-CV.js +1 -1
- package/locales/global/pt-GQ.js +1 -1
- package/locales/global/pt-GW.js +1 -1
- package/locales/global/pt-LU.js +1 -1
- package/locales/global/pt-MO.js +1 -1
- package/locales/global/pt-MZ.js +1 -1
- package/locales/global/pt-PT.js +1 -1
- package/locales/global/pt-ST.js +1 -1
- package/locales/global/pt-TL.js +1 -1
- package/locales/global/pt.js +1 -1
- package/locales/global/qu-BO.js +1 -1
- package/locales/global/qu-EC.js +1 -1
- package/locales/global/qu.js +1 -1
- package/locales/global/rm.js +1 -1
- package/locales/global/rn.js +1 -1
- package/locales/global/ro-MD.js +1 -1
- package/locales/global/ro.js +1 -1
- package/locales/global/rof.js +1 -1
- package/locales/global/ru-BY.js +1 -1
- package/locales/global/ru-KG.js +1 -1
- package/locales/global/ru-KZ.js +1 -1
- package/locales/global/ru-MD.js +1 -1
- package/locales/global/ru-UA.js +1 -1
- package/locales/global/ru.js +1 -1
- package/locales/global/rw.js +1 -1
- package/locales/global/rwk.js +1 -1
- package/locales/global/sa.js +1 -1
- package/locales/global/sah.js +1 -1
- package/locales/global/saq.js +1 -1
- package/locales/global/sat-Olck.js +1 -1
- package/locales/global/sat.js +1 -1
- package/locales/global/sbp.js +1 -1
- package/locales/global/sc.js +1 -1
- package/locales/global/sd-Arab.js +1 -1
- package/locales/global/sd-Deva.js +1 -1
- package/locales/global/sd.js +1 -1
- package/locales/global/se-FI.js +1 -1
- package/locales/global/se-SE.js +1 -1
- package/locales/global/se.js +1 -1
- package/locales/global/seh.js +1 -1
- package/locales/global/ses.js +1 -1
- package/locales/global/sg.js +1 -1
- package/locales/global/shi-Latn.js +1 -1
- package/locales/global/shi-Tfng.js +1 -1
- package/locales/global/shi.js +1 -1
- package/locales/global/si.js +1 -1
- package/locales/global/sk.js +1 -1
- package/locales/global/sl.js +1 -1
- package/locales/global/smn.js +1 -1
- package/locales/global/sn.js +1 -1
- package/locales/global/so-DJ.js +1 -1
- package/locales/global/so-ET.js +1 -1
- package/locales/global/so-KE.js +1 -1
- package/locales/global/so.js +1 -1
- package/locales/global/sq-MK.js +1 -1
- package/locales/global/sq-XK.js +1 -1
- package/locales/global/sq.js +1 -1
- package/locales/global/sr-Cyrl-BA.js +1 -1
- package/locales/global/sr-Cyrl-ME.js +1 -1
- package/locales/global/sr-Cyrl-XK.js +1 -1
- package/locales/global/sr-Cyrl.js +1 -1
- package/locales/global/sr-Latn-BA.js +1 -1
- package/locales/global/sr-Latn-ME.js +1 -1
- package/locales/global/sr-Latn-XK.js +1 -1
- package/locales/global/sr-Latn.js +1 -1
- package/locales/global/sr.js +1 -1
- package/locales/global/su-Latn.js +1 -1
- package/locales/global/su.js +1 -1
- package/locales/global/sv-AX.js +1 -1
- package/locales/global/sv-FI.js +1 -1
- package/locales/global/sv.js +1 -1
- package/locales/global/sw-CD.js +1 -1
- package/locales/global/sw-KE.js +1 -1
- package/locales/global/sw-UG.js +1 -1
- package/locales/global/sw.js +1 -1
- package/locales/global/ta-LK.js +1 -1
- package/locales/global/ta-MY.js +1 -1
- package/locales/global/ta-SG.js +1 -1
- package/locales/global/ta.js +1 -1
- package/locales/global/te.js +1 -1
- package/locales/global/teo-KE.js +1 -1
- package/locales/global/teo.js +1 -1
- package/locales/global/tg.js +1 -1
- package/locales/global/th.js +1 -1
- package/locales/global/ti-ER.js +1 -1
- package/locales/global/ti.js +1 -1
- package/locales/global/tk.js +1 -1
- package/locales/global/to.js +1 -1
- package/locales/global/tr-CY.js +1 -1
- package/locales/global/tr.js +1 -1
- package/locales/global/tt.js +1 -1
- package/locales/global/twq.js +1 -1
- package/locales/global/tzm.js +1 -1
- package/locales/global/ug.js +1 -1
- package/locales/global/uk.js +1 -1
- package/locales/global/und.js +1 -1
- package/locales/global/ur-IN.js +1 -1
- package/locales/global/ur.js +1 -1
- package/locales/global/uz-Arab.js +1 -1
- package/locales/global/uz-Cyrl.js +1 -1
- package/locales/global/uz-Latn.js +1 -1
- package/locales/global/uz.js +1 -1
- package/locales/global/vai-Latn.js +1 -1
- package/locales/global/vai-Vaii.js +1 -1
- package/locales/global/vai.js +1 -1
- package/locales/global/vi.js +1 -1
- package/locales/global/vun.js +1 -1
- package/locales/global/wae.js +1 -1
- package/locales/global/wo.js +1 -1
- package/locales/global/xh.js +1 -1
- package/locales/global/xog.js +1 -1
- package/locales/global/yav.js +1 -1
- package/locales/global/yi.js +1 -1
- package/locales/global/yo-BJ.js +1 -1
- package/locales/global/yo.js +1 -1
- package/locales/global/yrl-CO.js +1 -1
- package/locales/global/yrl-VE.js +1 -1
- package/locales/global/yrl.js +1 -1
- package/locales/global/yue-Hans.js +1 -1
- package/locales/global/yue-Hant.js +1 -1
- package/locales/global/yue.js +1 -1
- package/locales/global/zgh.js +1 -1
- package/locales/global/zh-Hans-HK.js +1 -1
- package/locales/global/zh-Hans-MO.js +1 -1
- package/locales/global/zh-Hans-SG.js +1 -1
- package/locales/global/zh-Hans.js +1 -1
- package/locales/global/zh-Hant-HK.js +1 -1
- package/locales/global/zh-Hant-MO.js +1 -1
- package/locales/global/zh-Hant.js +1 -1
- package/locales/global/zh.js +1 -1
- package/locales/global/zu.js +1 -1
- package/locales/gsw-FR.d.ts +1 -1
- package/locales/gsw-FR.mjs +2 -2
- package/locales/gsw-LI.d.ts +1 -1
- package/locales/gsw-LI.mjs +2 -2
- package/locales/gsw.d.ts +1 -1
- package/locales/gsw.mjs +2 -2
- package/locales/gu.d.ts +1 -1
- package/locales/gu.mjs +2 -2
- package/locales/guz.d.ts +1 -1
- package/locales/guz.mjs +2 -2
- package/locales/gv.d.ts +1 -1
- package/locales/gv.mjs +2 -2
- package/locales/ha-GH.d.ts +1 -1
- package/locales/ha-GH.mjs +2 -2
- package/locales/ha-NE.d.ts +1 -1
- package/locales/ha-NE.mjs +2 -2
- package/locales/ha.d.ts +1 -1
- package/locales/ha.mjs +2 -2
- package/locales/haw.d.ts +1 -1
- package/locales/haw.mjs +2 -2
- package/locales/he.d.ts +1 -1
- package/locales/he.mjs +2 -2
- package/locales/hi-Latn.d.ts +1 -1
- package/locales/hi-Latn.mjs +2 -2
- package/locales/hi.d.ts +1 -1
- package/locales/hi.mjs +2 -2
- package/locales/hr-BA.d.ts +1 -1
- package/locales/hr-BA.mjs +2 -2
- package/locales/hr.d.ts +1 -1
- package/locales/hr.mjs +2 -2
- package/locales/hsb.d.ts +1 -1
- package/locales/hsb.mjs +2 -2
- package/locales/hu.d.ts +1 -1
- package/locales/hu.mjs +2 -2
- package/locales/hy.d.ts +1 -1
- package/locales/hy.mjs +2 -2
- package/locales/ia.d.ts +1 -1
- package/locales/ia.mjs +2 -2
- package/locales/id.d.ts +1 -1
- package/locales/id.mjs +2 -2
- package/locales/ig.d.ts +1 -1
- package/locales/ig.mjs +2 -2
- package/locales/ii.d.ts +1 -1
- package/locales/ii.mjs +2 -2
- package/locales/is.d.ts +1 -1
- package/locales/is.mjs +2 -2
- package/locales/it-CH.d.ts +1 -1
- package/locales/it-CH.mjs +2 -2
- package/locales/it-SM.d.ts +1 -1
- package/locales/it-SM.mjs +2 -2
- package/locales/it-VA.d.ts +1 -1
- package/locales/it-VA.mjs +2 -2
- package/locales/it.d.ts +1 -1
- package/locales/it.mjs +2 -2
- package/locales/ja.d.ts +1 -1
- package/locales/ja.mjs +2 -2
- package/locales/jgo.d.ts +1 -1
- package/locales/jgo.mjs +2 -2
- package/locales/jmc.d.ts +1 -1
- package/locales/jmc.mjs +2 -2
- package/locales/jv.d.ts +1 -1
- package/locales/jv.mjs +2 -2
- package/locales/ka.d.ts +1 -1
- package/locales/ka.mjs +2 -2
- package/locales/kab.d.ts +1 -1
- package/locales/kab.mjs +2 -2
- package/locales/kam.d.ts +1 -1
- package/locales/kam.mjs +2 -2
- package/locales/kde.d.ts +1 -1
- package/locales/kde.mjs +2 -2
- package/locales/kea.d.ts +1 -1
- package/locales/kea.mjs +2 -2
- package/locales/kgp.d.ts +1 -1
- package/locales/kgp.mjs +2 -2
- package/locales/khq.d.ts +1 -1
- package/locales/khq.mjs +2 -2
- package/locales/ki.d.ts +1 -1
- package/locales/ki.mjs +2 -2
- package/locales/kk.d.ts +1 -1
- package/locales/kk.mjs +2 -2
- package/locales/kkj.d.ts +1 -1
- package/locales/kkj.mjs +2 -2
- package/locales/kl.d.ts +1 -1
- package/locales/kl.mjs +2 -2
- package/locales/kln.d.ts +1 -1
- package/locales/kln.mjs +2 -2
- package/locales/km.d.ts +1 -1
- package/locales/km.mjs +2 -2
- package/locales/kn.d.ts +1 -1
- package/locales/kn.mjs +2 -2
- package/locales/ko-KP.d.ts +1 -1
- package/locales/ko-KP.mjs +2 -2
- package/locales/ko.d.ts +1 -1
- package/locales/ko.mjs +2 -2
- package/locales/kok.d.ts +1 -1
- package/locales/kok.mjs +2 -2
- package/locales/ks-Arab.d.ts +1 -1
- package/locales/ks-Arab.mjs +2 -2
- package/locales/ks-Deva.d.ts +1 -1
- package/locales/ks-Deva.mjs +2 -2
- package/locales/ks.d.ts +1 -1
- package/locales/ks.mjs +2 -2
- package/locales/ksb.d.ts +1 -1
- package/locales/ksb.mjs +2 -2
- package/locales/ksf.d.ts +1 -1
- package/locales/ksf.mjs +2 -2
- package/locales/ksh.d.ts +1 -1
- package/locales/ksh.mjs +2 -2
- package/locales/ku.d.ts +1 -1
- package/locales/ku.mjs +2 -2
- package/locales/kw.d.ts +1 -1
- package/locales/kw.mjs +2 -2
- package/locales/ky.d.ts +1 -1
- package/locales/ky.mjs +2 -2
- package/locales/lag.d.ts +1 -1
- package/locales/lag.mjs +2 -2
- package/locales/lb.d.ts +1 -1
- package/locales/lb.mjs +2 -2
- package/locales/lg.d.ts +1 -1
- package/locales/lg.mjs +2 -2
- package/locales/lkt.d.ts +1 -1
- package/locales/lkt.mjs +2 -2
- package/locales/ln-AO.d.ts +1 -1
- package/locales/ln-AO.mjs +2 -2
- package/locales/ln-CF.d.ts +1 -1
- package/locales/ln-CF.mjs +2 -2
- package/locales/ln-CG.d.ts +1 -1
- package/locales/ln-CG.mjs +2 -2
- package/locales/ln.d.ts +1 -1
- package/locales/ln.mjs +2 -2
- package/locales/lo.d.ts +1 -1
- package/locales/lo.mjs +2 -2
- package/locales/lrc-IQ.d.ts +1 -1
- package/locales/lrc-IQ.mjs +2 -2
- package/locales/lrc.d.ts +1 -1
- package/locales/lrc.mjs +2 -2
- package/locales/lt.d.ts +1 -1
- package/locales/lt.mjs +2 -2
- package/locales/lu.d.ts +1 -1
- package/locales/lu.mjs +2 -2
- package/locales/luo.d.ts +1 -1
- package/locales/luo.mjs +2 -2
- package/locales/luy.d.ts +1 -1
- package/locales/luy.mjs +2 -2
- package/locales/lv.d.ts +1 -1
- package/locales/lv.mjs +2 -2
- package/locales/mai.d.ts +1 -1
- package/locales/mai.mjs +2 -2
- package/locales/mas-TZ.d.ts +1 -1
- package/locales/mas-TZ.mjs +2 -2
- package/locales/mas.d.ts +1 -1
- package/locales/mas.mjs +2 -2
- package/locales/mer.d.ts +1 -1
- package/locales/mer.mjs +2 -2
- package/locales/mfe.d.ts +1 -1
- package/locales/mfe.mjs +2 -2
- package/locales/mg.d.ts +1 -1
- package/locales/mg.mjs +2 -2
- package/locales/mgh.d.ts +1 -1
- package/locales/mgh.mjs +2 -2
- package/locales/mgo.d.ts +1 -1
- package/locales/mgo.mjs +2 -2
- package/locales/mi.d.ts +1 -1
- package/locales/mi.mjs +2 -2
- package/locales/mk.d.ts +1 -1
- package/locales/mk.mjs +2 -2
- package/locales/ml.d.ts +1 -1
- package/locales/ml.mjs +2 -2
- package/locales/mn.d.ts +1 -1
- package/locales/mn.mjs +2 -2
- package/locales/mni-Beng.d.ts +1 -1
- package/locales/mni-Beng.mjs +2 -2
- package/locales/mni.d.ts +1 -1
- package/locales/mni.mjs +2 -2
- package/locales/mr.d.ts +1 -1
- package/locales/mr.mjs +2 -2
- package/locales/ms-BN.d.ts +1 -1
- package/locales/ms-BN.mjs +2 -2
- package/locales/ms-ID.d.ts +1 -1
- package/locales/ms-ID.mjs +2 -2
- package/locales/ms-SG.d.ts +1 -1
- package/locales/ms-SG.mjs +2 -2
- package/locales/ms.d.ts +1 -1
- package/locales/ms.mjs +2 -2
- package/locales/mt.d.ts +1 -1
- package/locales/mt.mjs +2 -2
- package/locales/mua.d.ts +1 -1
- package/locales/mua.mjs +2 -2
- package/locales/my.d.ts +1 -1
- package/locales/my.mjs +2 -2
- package/locales/mzn.d.ts +1 -1
- package/locales/mzn.mjs +2 -2
- package/locales/naq.d.ts +1 -1
- package/locales/naq.mjs +2 -2
- package/locales/nb-SJ.d.ts +1 -1
- package/locales/nb-SJ.mjs +2 -2
- package/locales/nb.d.ts +1 -1
- package/locales/nb.mjs +2 -2
- package/locales/nd.d.ts +1 -1
- package/locales/nd.mjs +2 -2
- package/locales/nds-NL.d.ts +1 -1
- package/locales/nds-NL.mjs +2 -2
- package/locales/nds.d.ts +1 -1
- package/locales/nds.mjs +2 -2
- package/locales/ne-IN.d.ts +1 -1
- package/locales/ne-IN.mjs +2 -2
- package/locales/ne.d.ts +1 -1
- package/locales/ne.mjs +2 -2
- package/locales/nl-AW.d.ts +1 -1
- package/locales/nl-AW.mjs +2 -2
- package/locales/nl-BE.d.ts +1 -1
- package/locales/nl-BE.mjs +2 -2
- package/locales/nl-BQ.d.ts +1 -1
- package/locales/nl-BQ.mjs +2 -2
- package/locales/nl-CW.d.ts +1 -1
- package/locales/nl-CW.mjs +2 -2
- package/locales/nl-SR.d.ts +1 -1
- package/locales/nl-SR.mjs +2 -2
- package/locales/nl-SX.d.ts +1 -1
- package/locales/nl-SX.mjs +2 -2
- package/locales/nl.d.ts +1 -1
- package/locales/nl.mjs +2 -2
- package/locales/nmg.d.ts +1 -1
- package/locales/nmg.mjs +2 -2
- package/locales/nn.d.ts +1 -1
- package/locales/nn.mjs +2 -2
- package/locales/nnh.d.ts +1 -1
- package/locales/nnh.mjs +2 -2
- package/locales/no.d.ts +1 -1
- package/locales/no.mjs +2 -2
- package/locales/nus.d.ts +1 -1
- package/locales/nus.mjs +2 -2
- package/locales/nyn.d.ts +1 -1
- package/locales/nyn.mjs +2 -2
- package/locales/om-KE.d.ts +1 -1
- package/locales/om-KE.mjs +2 -2
- package/locales/om.d.ts +1 -1
- package/locales/om.mjs +2 -2
- package/locales/or.d.ts +1 -1
- package/locales/or.mjs +2 -2
- package/locales/os-RU.d.ts +1 -1
- package/locales/os-RU.mjs +2 -2
- package/locales/os.d.ts +1 -1
- package/locales/os.mjs +2 -2
- package/locales/pa-Arab.d.ts +1 -1
- package/locales/pa-Arab.mjs +2 -2
- package/locales/pa-Guru.d.ts +1 -1
- package/locales/pa-Guru.mjs +2 -2
- package/locales/pa.d.ts +1 -1
- package/locales/pa.mjs +2 -2
- package/locales/pcm.d.ts +1 -1
- package/locales/pcm.mjs +2 -2
- package/locales/pl.d.ts +1 -1
- package/locales/pl.mjs +2 -2
- package/locales/ps-PK.d.ts +1 -1
- package/locales/ps-PK.mjs +2 -2
- package/locales/ps.d.ts +1 -1
- package/locales/ps.mjs +2 -2
- package/locales/pt-AO.d.ts +1 -1
- package/locales/pt-AO.mjs +2 -2
- package/locales/pt-CH.d.ts +1 -1
- package/locales/pt-CH.mjs +2 -2
- package/locales/pt-CV.d.ts +1 -1
- package/locales/pt-CV.mjs +2 -2
- package/locales/pt-GQ.d.ts +1 -1
- package/locales/pt-GQ.mjs +2 -2
- package/locales/pt-GW.d.ts +1 -1
- package/locales/pt-GW.mjs +2 -2
- package/locales/pt-LU.d.ts +1 -1
- package/locales/pt-LU.mjs +2 -2
- package/locales/pt-MO.d.ts +1 -1
- package/locales/pt-MO.mjs +2 -2
- package/locales/pt-MZ.d.ts +1 -1
- package/locales/pt-MZ.mjs +2 -2
- package/locales/pt-PT.d.ts +1 -1
- package/locales/pt-PT.mjs +2 -2
- package/locales/pt-ST.d.ts +1 -1
- package/locales/pt-ST.mjs +2 -2
- package/locales/pt-TL.d.ts +1 -1
- package/locales/pt-TL.mjs +2 -2
- package/locales/pt.d.ts +1 -1
- package/locales/pt.mjs +2 -2
- package/locales/qu-BO.d.ts +1 -1
- package/locales/qu-BO.mjs +2 -2
- package/locales/qu-EC.d.ts +1 -1
- package/locales/qu-EC.mjs +2 -2
- package/locales/qu.d.ts +1 -1
- package/locales/qu.mjs +2 -2
- package/locales/rm.d.ts +1 -1
- package/locales/rm.mjs +2 -2
- package/locales/rn.d.ts +1 -1
- package/locales/rn.mjs +2 -2
- package/locales/ro-MD.d.ts +1 -1
- package/locales/ro-MD.mjs +2 -2
- package/locales/ro.d.ts +1 -1
- package/locales/ro.mjs +2 -2
- package/locales/rof.d.ts +1 -1
- package/locales/rof.mjs +2 -2
- package/locales/ru-BY.d.ts +1 -1
- package/locales/ru-BY.mjs +2 -2
- package/locales/ru-KG.d.ts +1 -1
- package/locales/ru-KG.mjs +2 -2
- package/locales/ru-KZ.d.ts +1 -1
- package/locales/ru-KZ.mjs +2 -2
- package/locales/ru-MD.d.ts +1 -1
- package/locales/ru-MD.mjs +2 -2
- package/locales/ru-UA.d.ts +1 -1
- package/locales/ru-UA.mjs +2 -2
- package/locales/ru.d.ts +1 -1
- package/locales/ru.mjs +2 -2
- package/locales/rw.d.ts +1 -1
- package/locales/rw.mjs +2 -2
- package/locales/rwk.d.ts +1 -1
- package/locales/rwk.mjs +2 -2
- package/locales/sa.d.ts +1 -1
- package/locales/sa.mjs +2 -2
- package/locales/sah.d.ts +1 -1
- package/locales/sah.mjs +2 -2
- package/locales/saq.d.ts +1 -1
- package/locales/saq.mjs +2 -2
- package/locales/sat-Olck.d.ts +1 -1
- package/locales/sat-Olck.mjs +2 -2
- package/locales/sat.d.ts +1 -1
- package/locales/sat.mjs +2 -2
- package/locales/sbp.d.ts +1 -1
- package/locales/sbp.mjs +2 -2
- package/locales/sc.d.ts +1 -1
- package/locales/sc.mjs +2 -2
- package/locales/sd-Arab.d.ts +1 -1
- package/locales/sd-Arab.mjs +2 -2
- package/locales/sd-Deva.d.ts +1 -1
- package/locales/sd-Deva.mjs +2 -2
- package/locales/sd.d.ts +1 -1
- package/locales/sd.mjs +2 -2
- package/locales/se-FI.d.ts +1 -1
- package/locales/se-FI.mjs +2 -2
- package/locales/se-SE.d.ts +1 -1
- package/locales/se-SE.mjs +2 -2
- package/locales/se.d.ts +1 -1
- package/locales/se.mjs +2 -2
- package/locales/seh.d.ts +1 -1
- package/locales/seh.mjs +2 -2
- package/locales/ses.d.ts +1 -1
- package/locales/ses.mjs +2 -2
- package/locales/sg.d.ts +1 -1
- package/locales/sg.mjs +2 -2
- package/locales/shi-Latn.d.ts +1 -1
- package/locales/shi-Latn.mjs +2 -2
- package/locales/shi-Tfng.d.ts +1 -1
- package/locales/shi-Tfng.mjs +2 -2
- package/locales/shi.d.ts +1 -1
- package/locales/shi.mjs +2 -2
- package/locales/si.d.ts +1 -1
- package/locales/si.mjs +2 -2
- package/locales/sk.d.ts +1 -1
- package/locales/sk.mjs +2 -2
- package/locales/sl.d.ts +1 -1
- package/locales/sl.mjs +2 -2
- package/locales/smn.d.ts +1 -1
- package/locales/smn.mjs +2 -2
- package/locales/sn.d.ts +1 -1
- package/locales/sn.mjs +2 -2
- package/locales/so-DJ.d.ts +1 -1
- package/locales/so-DJ.mjs +2 -2
- package/locales/so-ET.d.ts +1 -1
- package/locales/so-ET.mjs +2 -2
- package/locales/so-KE.d.ts +1 -1
- package/locales/so-KE.mjs +2 -2
- package/locales/so.d.ts +1 -1
- package/locales/so.mjs +2 -2
- package/locales/sq-MK.d.ts +1 -1
- package/locales/sq-MK.mjs +2 -2
- package/locales/sq-XK.d.ts +1 -1
- package/locales/sq-XK.mjs +2 -2
- package/locales/sq.d.ts +1 -1
- package/locales/sq.mjs +2 -2
- package/locales/sr-Cyrl-BA.d.ts +1 -1
- package/locales/sr-Cyrl-BA.mjs +2 -2
- package/locales/sr-Cyrl-ME.d.ts +1 -1
- package/locales/sr-Cyrl-ME.mjs +2 -2
- package/locales/sr-Cyrl-XK.d.ts +1 -1
- package/locales/sr-Cyrl-XK.mjs +2 -2
- package/locales/sr-Cyrl.d.ts +1 -1
- package/locales/sr-Cyrl.mjs +2 -2
- package/locales/sr-Latn-BA.d.ts +1 -1
- package/locales/sr-Latn-BA.mjs +2 -2
- package/locales/sr-Latn-ME.d.ts +1 -1
- package/locales/sr-Latn-ME.mjs +2 -2
- package/locales/sr-Latn-XK.d.ts +1 -1
- package/locales/sr-Latn-XK.mjs +2 -2
- package/locales/sr-Latn.d.ts +1 -1
- package/locales/sr-Latn.mjs +2 -2
- package/locales/sr.d.ts +1 -1
- package/locales/sr.mjs +2 -2
- package/locales/su-Latn.d.ts +1 -1
- package/locales/su-Latn.mjs +2 -2
- package/locales/su.d.ts +1 -1
- package/locales/su.mjs +2 -2
- package/locales/sv-AX.d.ts +1 -1
- package/locales/sv-AX.mjs +2 -2
- package/locales/sv-FI.d.ts +1 -1
- package/locales/sv-FI.mjs +2 -2
- package/locales/sv.d.ts +1 -1
- package/locales/sv.mjs +2 -2
- package/locales/sw-CD.d.ts +1 -1
- package/locales/sw-CD.mjs +2 -2
- package/locales/sw-KE.d.ts +1 -1
- package/locales/sw-KE.mjs +2 -2
- package/locales/sw-UG.d.ts +1 -1
- package/locales/sw-UG.mjs +2 -2
- package/locales/sw.d.ts +1 -1
- package/locales/sw.mjs +2 -2
- package/locales/ta-LK.d.ts +1 -1
- package/locales/ta-LK.mjs +2 -2
- package/locales/ta-MY.d.ts +1 -1
- package/locales/ta-MY.mjs +2 -2
- package/locales/ta-SG.d.ts +1 -1
- package/locales/ta-SG.mjs +2 -2
- package/locales/ta.d.ts +1 -1
- package/locales/ta.mjs +2 -2
- package/locales/te.d.ts +1 -1
- package/locales/te.mjs +2 -2
- package/locales/teo-KE.d.ts +1 -1
- package/locales/teo-KE.mjs +2 -2
- package/locales/teo.d.ts +1 -1
- package/locales/teo.mjs +2 -2
- package/locales/tg.d.ts +1 -1
- package/locales/tg.mjs +2 -2
- package/locales/th.d.ts +1 -1
- package/locales/th.mjs +2 -2
- package/locales/ti-ER.d.ts +1 -1
- package/locales/ti-ER.mjs +2 -2
- package/locales/ti.d.ts +1 -1
- package/locales/ti.mjs +2 -2
- package/locales/tk.d.ts +1 -1
- package/locales/tk.mjs +2 -2
- package/locales/to.d.ts +1 -1
- package/locales/to.mjs +2 -2
- package/locales/tr-CY.d.ts +1 -1
- package/locales/tr-CY.mjs +2 -2
- package/locales/tr.d.ts +1 -1
- package/locales/tr.mjs +2 -2
- package/locales/tt.d.ts +1 -1
- package/locales/tt.mjs +2 -2
- package/locales/twq.d.ts +1 -1
- package/locales/twq.mjs +2 -2
- package/locales/tzm.d.ts +1 -1
- package/locales/tzm.mjs +2 -2
- package/locales/ug.d.ts +1 -1
- package/locales/ug.mjs +2 -2
- package/locales/uk.d.ts +1 -1
- package/locales/uk.mjs +2 -2
- package/locales/und.d.ts +1 -1
- package/locales/und.mjs +2 -2
- package/locales/ur-IN.d.ts +1 -1
- package/locales/ur-IN.mjs +2 -2
- package/locales/ur.d.ts +1 -1
- package/locales/ur.mjs +2 -2
- package/locales/uz-Arab.d.ts +1 -1
- package/locales/uz-Arab.mjs +2 -2
- package/locales/uz-Cyrl.d.ts +1 -1
- package/locales/uz-Cyrl.mjs +2 -2
- package/locales/uz-Latn.d.ts +1 -1
- package/locales/uz-Latn.mjs +2 -2
- package/locales/uz.d.ts +1 -1
- package/locales/uz.mjs +2 -2
- package/locales/vai-Latn.d.ts +1 -1
- package/locales/vai-Latn.mjs +2 -2
- package/locales/vai-Vaii.d.ts +1 -1
- package/locales/vai-Vaii.mjs +2 -2
- package/locales/vai.d.ts +1 -1
- package/locales/vai.mjs +2 -2
- package/locales/vi.d.ts +1 -1
- package/locales/vi.mjs +2 -2
- package/locales/vun.d.ts +1 -1
- package/locales/vun.mjs +2 -2
- package/locales/wae.d.ts +1 -1
- package/locales/wae.mjs +2 -2
- package/locales/wo.d.ts +1 -1
- package/locales/wo.mjs +2 -2
- package/locales/xh.d.ts +1 -1
- package/locales/xh.mjs +2 -2
- package/locales/xog.d.ts +1 -1
- package/locales/xog.mjs +2 -2
- package/locales/yav.d.ts +1 -1
- package/locales/yav.mjs +2 -2
- package/locales/yi.d.ts +1 -1
- package/locales/yi.mjs +2 -2
- package/locales/yo-BJ.d.ts +1 -1
- package/locales/yo-BJ.mjs +2 -2
- package/locales/yo.d.ts +1 -1
- package/locales/yo.mjs +2 -2
- package/locales/yrl-CO.d.ts +1 -1
- package/locales/yrl-CO.mjs +2 -2
- package/locales/yrl-VE.d.ts +1 -1
- package/locales/yrl-VE.mjs +2 -2
- package/locales/yrl.d.ts +1 -1
- package/locales/yrl.mjs +2 -2
- package/locales/yue-Hans.d.ts +1 -1
- package/locales/yue-Hans.mjs +2 -2
- package/locales/yue-Hant.d.ts +1 -1
- package/locales/yue-Hant.mjs +2 -2
- package/locales/yue.d.ts +1 -1
- package/locales/yue.mjs +2 -2
- package/locales/zgh.d.ts +1 -1
- package/locales/zgh.mjs +2 -2
- package/locales/zh-Hans-HK.d.ts +1 -1
- package/locales/zh-Hans-HK.mjs +2 -2
- package/locales/zh-Hans-MO.d.ts +1 -1
- package/locales/zh-Hans-MO.mjs +2 -2
- package/locales/zh-Hans-SG.d.ts +1 -1
- package/locales/zh-Hans-SG.mjs +2 -2
- package/locales/zh-Hans.d.ts +1 -1
- package/locales/zh-Hans.mjs +2 -2
- package/locales/zh-Hant-HK.d.ts +1 -1
- package/locales/zh-Hant-HK.mjs +2 -2
- package/locales/zh-Hant-MO.d.ts +1 -1
- package/locales/zh-Hant-MO.mjs +2 -2
- package/locales/zh-Hant.d.ts +1 -1
- package/locales/zh-Hant.mjs +2 -2
- package/locales/zh.d.ts +1 -1
- package/locales/zh.mjs +2 -2
- package/locales/zu.d.ts +1 -1
- package/locales/zu.mjs +2 -2
- package/package.json +2 -12
- package/testing/index.d.ts +1 -1
- package/upgrade/index.d.ts +1 -1
- package/esm2022/common.mjs +0 -5
- package/esm2022/http/http.mjs +0 -5
- package/esm2022/http/index.mjs +0 -13
- package/esm2022/http/public_api.mjs +0 -25
- package/esm2022/http/src/backend.mjs +0 -34
- package/esm2022/http/src/client.mjs +0 -325
- package/esm2022/http/src/context.mjs +0 -108
- package/esm2022/http/src/errors.mjs +0 -9
- package/esm2022/http/src/fetch.mjs +0 -241
- package/esm2022/http/src/headers.mjs +0 -247
- package/esm2022/http/src/interceptor.mjs +0 -136
- package/esm2022/http/src/jsonp.mjs +0 -254
- package/esm2022/http/src/module.mjs +0 -124
- package/esm2022/http/src/params.mjs +0 -276
- package/esm2022/http/src/private_export.mjs +0 -9
- package/esm2022/http/src/provider.mjs +0 -238
- package/esm2022/http/src/request.mjs +0 -286
- package/esm2022/http/src/response.mjs +0 -237
- package/esm2022/http/src/transfer_cache.mjs +0 -280
- package/esm2022/http/src/xhr.mjs +0 -298
- package/esm2022/http/src/xsrf.mjs +0 -108
- package/esm2022/http/testing/index.mjs +0 -9
- package/esm2022/http/testing/public_api.mjs +0 -12
- package/esm2022/http/testing/src/api.mjs +0 -16
- package/esm2022/http/testing/src/backend.mjs +0 -148
- package/esm2022/http/testing/src/module.mjs +0 -33
- package/esm2022/http/testing/src/provider.mjs +0 -19
- package/esm2022/http/testing/src/request.mjs +0 -177
- package/esm2022/http/testing/testing.mjs +0 -5
- package/esm2022/index.mjs +0 -13
- package/esm2022/public_api.mjs +0 -15
- package/esm2022/src/common.mjs +0 -31
- package/esm2022/src/common_module.mjs +0 -51
- package/esm2022/src/cookie.mjs +0 -19
- package/esm2022/src/directives/index.mjs +0 -34
- package/esm2022/src/directives/ng_class.mjs +0 -163
- package/esm2022/src/directives/ng_component_outlet.mjs +0 -190
- package/esm2022/src/directives/ng_for_of.mjs +0 -291
- package/esm2022/src/directives/ng_if.mjs +0 -244
- package/esm2022/src/directives/ng_optimized_image/asserts.mjs +0 -20
- package/esm2022/src/directives/ng_optimized_image/error_helper.mjs +0 -15
- package/esm2022/src/directives/ng_optimized_image/image_loaders/cloudflare_loader.mjs +0 -35
- package/esm2022/src/directives/ng_optimized_image/image_loaders/cloudinary_loader.mjs +0 -56
- package/esm2022/src/directives/ng_optimized_image/image_loaders/constants.mjs +0 -12
- package/esm2022/src/directives/ng_optimized_image/image_loaders/image_loader.mjs +0 -74
- package/esm2022/src/directives/ng_optimized_image/image_loaders/imagekit_loader.mjs +0 -52
- package/esm2022/src/directives/ng_optimized_image/image_loaders/imgix_loader.mjs +0 -47
- package/esm2022/src/directives/ng_optimized_image/image_loaders/netlify_loader.mjs +0 -89
- package/esm2022/src/directives/ng_optimized_image/index.mjs +0 -18
- package/esm2022/src/directives/ng_optimized_image/lcp_image_observer.mjs +0 -128
- package/esm2022/src/directives/ng_optimized_image/ng_optimized_image.mjs +0 -1035
- package/esm2022/src/directives/ng_optimized_image/preconnect_link_checker.mjs +0 -136
- package/esm2022/src/directives/ng_optimized_image/preload-link-creator.mjs +0 -75
- package/esm2022/src/directives/ng_optimized_image/tokens.mjs +0 -27
- package/esm2022/src/directives/ng_optimized_image/url.mjs +0 -42
- package/esm2022/src/directives/ng_plural.mjs +0 -124
- package/esm2022/src/directives/ng_style.mjs +0 -96
- package/esm2022/src/directives/ng_switch.mjs +0 -261
- package/esm2022/src/directives/ng_template_outlet.mjs +0 -116
- package/esm2022/src/dom_adapter.mjs +0 -24
- package/esm2022/src/dom_tokens.mjs +0 -17
- package/esm2022/src/errors.mjs +0 -9
- package/esm2022/src/i18n/currencies.mjs +0 -10
- package/esm2022/src/i18n/format_date.mjs +0 -764
- package/esm2022/src/i18n/format_number.mjs +0 -396
- package/esm2022/src/i18n/locale_data.mjs +0 -21
- package/esm2022/src/i18n/locale_data_api.mjs +0 -722
- package/esm2022/src/i18n/localization.mjs +0 -81
- package/esm2022/src/location/hash_location_strategy.mjs +0 -101
- package/esm2022/src/location/index.mjs +0 -12
- package/esm2022/src/location/location.mjs +0 -291
- package/esm2022/src/location/location_strategy.mjs +0 -160
- package/esm2022/src/location/platform_location.mjs +0 -131
- package/esm2022/src/location/util.mjs +0 -64
- package/esm2022/src/navigation/navigation_types.mjs +0 -9
- package/esm2022/src/navigation/platform_navigation.mjs +0 -22
- package/esm2022/src/pipes/async_pipe.mjs +0 -154
- package/esm2022/src/pipes/case_conversion_pipes.mjs +0 -117
- package/esm2022/src/pipes/date_pipe.mjs +0 -251
- package/esm2022/src/pipes/date_pipe_config.mjs +0 -13
- package/esm2022/src/pipes/i18n_plural_pipe.mjs +0 -58
- package/esm2022/src/pipes/i18n_select_pipe.mjs +0 -58
- package/esm2022/src/pipes/index.mjs +0 -41
- package/esm2022/src/pipes/invalid_pipe_argument_error.mjs +0 -12
- package/esm2022/src/pipes/json_pipe.mjs +0 -43
- package/esm2022/src/pipes/keyvalue_pipe.mjs +0 -100
- package/esm2022/src/pipes/number_pipe.mjs +0 -295
- package/esm2022/src/pipes/slice_pipe.mjs +0 -69
- package/esm2022/src/platform_id.mjs +0 -24
- package/esm2022/src/private_export.mjs +0 -10
- package/esm2022/src/version.mjs +0 -18
- package/esm2022/src/viewport_scroller.mjs +0 -163
- package/esm2022/src/xhr.mjs +0 -15
- package/esm2022/testing/index.mjs +0 -13
- package/esm2022/testing/public_api.mjs +0 -15
- package/esm2022/testing/src/location_mock.mjs +0 -176
- package/esm2022/testing/src/mock_location_strategy.mjs +0 -92
- package/esm2022/testing/src/mock_platform_location.mjs +0 -299
- package/esm2022/testing/src/navigation/fake_navigation.mjs +0 -667
- package/esm2022/testing/src/navigation/navigation_types.mjs +0 -9
- package/esm2022/testing/src/navigation/provide_fake_platform_navigation.mjs +0 -29
- package/esm2022/testing/src/private_export.mjs +0 -9
- package/esm2022/testing/src/provide_location_mocks.mjs +0 -23
- package/esm2022/testing/src/testing.mjs +0 -18
- package/esm2022/testing/testing.mjs +0 -5
- package/esm2022/upgrade/index.mjs +0 -13
- package/esm2022/upgrade/public_api.mjs +0 -15
- package/esm2022/upgrade/src/index.mjs +0 -11
- package/esm2022/upgrade/src/location_shim.mjs +0 -561
- package/esm2022/upgrade/src/location_upgrade_module.mjs +0 -84
- package/esm2022/upgrade/src/params.mjs +0 -221
- package/esm2022/upgrade/src/utils.mjs +0 -33
- package/esm2022/upgrade/upgrade.mjs +0 -5
|
@@ -1,1035 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
import { booleanAttribute, Directive, ElementRef, inject, Injector, Input, NgZone, numberAttribute, PLATFORM_ID, Renderer2, ɵformatRuntimeError as formatRuntimeError, ɵIMAGE_CONFIG as IMAGE_CONFIG, ɵIMAGE_CONFIG_DEFAULTS as IMAGE_CONFIG_DEFAULTS, ɵperformanceMarkFeature as performanceMarkFeature, ɵRuntimeError as RuntimeError, ɵunwrapSafeValue as unwrapSafeValue, ChangeDetectorRef, ApplicationRef, ɵwhenStable as whenStable, } from '@angular/core';
|
|
9
|
-
import { isPlatformServer } from '../../platform_id';
|
|
10
|
-
import { imgDirectiveDetails } from './error_helper';
|
|
11
|
-
import { cloudinaryLoaderInfo } from './image_loaders/cloudinary_loader';
|
|
12
|
-
import { IMAGE_LOADER, noopImageLoader, } from './image_loaders/image_loader';
|
|
13
|
-
import { imageKitLoaderInfo } from './image_loaders/imagekit_loader';
|
|
14
|
-
import { imgixLoaderInfo } from './image_loaders/imgix_loader';
|
|
15
|
-
import { netlifyLoaderInfo } from './image_loaders/netlify_loader';
|
|
16
|
-
import { LCPImageObserver } from './lcp_image_observer';
|
|
17
|
-
import { PreconnectLinkChecker } from './preconnect_link_checker';
|
|
18
|
-
import { PreloadLinkCreator } from './preload-link-creator';
|
|
19
|
-
import * as i0 from "@angular/core";
|
|
20
|
-
/**
|
|
21
|
-
* When a Base64-encoded image is passed as an input to the `NgOptimizedImage` directive,
|
|
22
|
-
* an error is thrown. The image content (as a string) might be very long, thus making
|
|
23
|
-
* it hard to read an error message if the entire string is included. This const defines
|
|
24
|
-
* the number of characters that should be included into the error message. The rest
|
|
25
|
-
* of the content is truncated.
|
|
26
|
-
*/
|
|
27
|
-
const BASE64_IMG_MAX_LENGTH_IN_ERROR = 50;
|
|
28
|
-
/**
|
|
29
|
-
* RegExpr to determine whether a src in a srcset is using width descriptors.
|
|
30
|
-
* Should match something like: "100w, 200w".
|
|
31
|
-
*/
|
|
32
|
-
const VALID_WIDTH_DESCRIPTOR_SRCSET = /^((\s*\d+w\s*(,|$)){1,})$/;
|
|
33
|
-
/**
|
|
34
|
-
* RegExpr to determine whether a src in a srcset is using density descriptors.
|
|
35
|
-
* Should match something like: "1x, 2x, 50x". Also supports decimals like "1.5x, 1.50x".
|
|
36
|
-
*/
|
|
37
|
-
const VALID_DENSITY_DESCRIPTOR_SRCSET = /^((\s*\d+(\.\d+)?x\s*(,|$)){1,})$/;
|
|
38
|
-
/**
|
|
39
|
-
* Srcset values with a density descriptor higher than this value will actively
|
|
40
|
-
* throw an error. Such densities are not permitted as they cause image sizes
|
|
41
|
-
* to be unreasonably large and slow down LCP.
|
|
42
|
-
*/
|
|
43
|
-
export const ABSOLUTE_SRCSET_DENSITY_CAP = 3;
|
|
44
|
-
/**
|
|
45
|
-
* Used only in error message text to communicate best practices, as we will
|
|
46
|
-
* only throw based on the slightly more conservative ABSOLUTE_SRCSET_DENSITY_CAP.
|
|
47
|
-
*/
|
|
48
|
-
export const RECOMMENDED_SRCSET_DENSITY_CAP = 2;
|
|
49
|
-
/**
|
|
50
|
-
* Used in generating automatic density-based srcsets
|
|
51
|
-
*/
|
|
52
|
-
const DENSITY_SRCSET_MULTIPLIERS = [1, 2];
|
|
53
|
-
/**
|
|
54
|
-
* Used to determine which breakpoints to use on full-width images
|
|
55
|
-
*/
|
|
56
|
-
const VIEWPORT_BREAKPOINT_CUTOFF = 640;
|
|
57
|
-
/**
|
|
58
|
-
* Used to determine whether two aspect ratios are similar in value.
|
|
59
|
-
*/
|
|
60
|
-
const ASPECT_RATIO_TOLERANCE = 0.1;
|
|
61
|
-
/**
|
|
62
|
-
* Used to determine whether the image has been requested at an overly
|
|
63
|
-
* large size compared to the actual rendered image size (after taking
|
|
64
|
-
* into account a typical device pixel ratio). In pixels.
|
|
65
|
-
*/
|
|
66
|
-
const OVERSIZED_IMAGE_TOLERANCE = 1000;
|
|
67
|
-
/**
|
|
68
|
-
* Used to limit automatic srcset generation of very large sources for
|
|
69
|
-
* fixed-size images. In pixels.
|
|
70
|
-
*/
|
|
71
|
-
const FIXED_SRCSET_WIDTH_LIMIT = 1920;
|
|
72
|
-
const FIXED_SRCSET_HEIGHT_LIMIT = 1080;
|
|
73
|
-
/**
|
|
74
|
-
* Default blur radius of the CSS filter used on placeholder images, in pixels
|
|
75
|
-
*/
|
|
76
|
-
export const PLACEHOLDER_BLUR_AMOUNT = 15;
|
|
77
|
-
/**
|
|
78
|
-
* Placeholder dimension (height or width) limit in pixels. Angular produces a warning
|
|
79
|
-
* when this limit is crossed.
|
|
80
|
-
*/
|
|
81
|
-
const PLACEHOLDER_DIMENSION_LIMIT = 1000;
|
|
82
|
-
/**
|
|
83
|
-
* Used to warn or error when the user provides an overly large dataURL for the placeholder
|
|
84
|
-
* attribute.
|
|
85
|
-
* Character count of Base64 images is 1 character per byte, and base64 encoding is approximately
|
|
86
|
-
* 33% larger than base images, so 4000 characters is around 3KB on disk and 10000 characters is
|
|
87
|
-
* around 7.7KB. Experimentally, 4000 characters is about 20x20px in PNG or medium-quality JPEG
|
|
88
|
-
* format, and 10,000 is around 50x50px, but there's quite a bit of variation depending on how the
|
|
89
|
-
* image is saved.
|
|
90
|
-
*/
|
|
91
|
-
export const DATA_URL_WARN_LIMIT = 4000;
|
|
92
|
-
export const DATA_URL_ERROR_LIMIT = 10000;
|
|
93
|
-
/** Info about built-in loaders we can test for. */
|
|
94
|
-
export const BUILT_IN_LOADERS = [
|
|
95
|
-
imgixLoaderInfo,
|
|
96
|
-
imageKitLoaderInfo,
|
|
97
|
-
cloudinaryLoaderInfo,
|
|
98
|
-
netlifyLoaderInfo,
|
|
99
|
-
];
|
|
100
|
-
/**
|
|
101
|
-
* Threshold for the PRIORITY_TRUE_COUNT
|
|
102
|
-
*/
|
|
103
|
-
const PRIORITY_COUNT_THRESHOLD = 10;
|
|
104
|
-
/**
|
|
105
|
-
* This count is used to log a devMode warning
|
|
106
|
-
* when the count of directive instances with priority=true
|
|
107
|
-
* exceeds the threshold PRIORITY_COUNT_THRESHOLD
|
|
108
|
-
*/
|
|
109
|
-
let IMGS_WITH_PRIORITY_ATTR_COUNT = 0;
|
|
110
|
-
/**
|
|
111
|
-
* This function is for testing purpose.
|
|
112
|
-
*/
|
|
113
|
-
export function resetImagePriorityCount() {
|
|
114
|
-
IMGS_WITH_PRIORITY_ATTR_COUNT = 0;
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Directive that improves image loading performance by enforcing best practices.
|
|
118
|
-
*
|
|
119
|
-
* `NgOptimizedImage` ensures that the loading of the Largest Contentful Paint (LCP) image is
|
|
120
|
-
* prioritized by:
|
|
121
|
-
* - Automatically setting the `fetchpriority` attribute on the `<img>` tag
|
|
122
|
-
* - Lazy loading non-priority images by default
|
|
123
|
-
* - Automatically generating a preconnect link tag in the document head
|
|
124
|
-
*
|
|
125
|
-
* In addition, the directive:
|
|
126
|
-
* - Generates appropriate asset URLs if a corresponding `ImageLoader` function is provided
|
|
127
|
-
* - Automatically generates a srcset
|
|
128
|
-
* - Requires that `width` and `height` are set
|
|
129
|
-
* - Warns if `width` or `height` have been set incorrectly
|
|
130
|
-
* - Warns if the image will be visually distorted when rendered
|
|
131
|
-
*
|
|
132
|
-
* @usageNotes
|
|
133
|
-
* The `NgOptimizedImage` directive is marked as [standalone](guide/components/importing) and can
|
|
134
|
-
* be imported directly.
|
|
135
|
-
*
|
|
136
|
-
* Follow the steps below to enable and use the directive:
|
|
137
|
-
* 1. Import it into the necessary NgModule or a standalone Component.
|
|
138
|
-
* 2. Optionally provide an `ImageLoader` if you use an image hosting service.
|
|
139
|
-
* 3. Update the necessary `<img>` tags in templates and replace `src` attributes with `ngSrc`.
|
|
140
|
-
* Using a `ngSrc` allows the directive to control when the `src` gets set, which triggers an image
|
|
141
|
-
* download.
|
|
142
|
-
*
|
|
143
|
-
* Step 1: import the `NgOptimizedImage` directive.
|
|
144
|
-
*
|
|
145
|
-
* ```typescript
|
|
146
|
-
* import { NgOptimizedImage } from '@angular/common';
|
|
147
|
-
*
|
|
148
|
-
* // Include it into the necessary NgModule
|
|
149
|
-
* @NgModule({
|
|
150
|
-
* imports: [NgOptimizedImage],
|
|
151
|
-
* })
|
|
152
|
-
* class AppModule {}
|
|
153
|
-
*
|
|
154
|
-
* // ... or a standalone Component
|
|
155
|
-
* @Component({
|
|
156
|
-
* standalone: true
|
|
157
|
-
* imports: [NgOptimizedImage],
|
|
158
|
-
* })
|
|
159
|
-
* class MyStandaloneComponent {}
|
|
160
|
-
* ```
|
|
161
|
-
*
|
|
162
|
-
* Step 2: configure a loader.
|
|
163
|
-
*
|
|
164
|
-
* To use the **default loader**: no additional code changes are necessary. The URL returned by the
|
|
165
|
-
* generic loader will always match the value of "src". In other words, this loader applies no
|
|
166
|
-
* transformations to the resource URL and the value of the `ngSrc` attribute will be used as is.
|
|
167
|
-
*
|
|
168
|
-
* To use an existing loader for a **third-party image service**: add the provider factory for your
|
|
169
|
-
* chosen service to the `providers` array. In the example below, the Imgix loader is used:
|
|
170
|
-
*
|
|
171
|
-
* ```typescript
|
|
172
|
-
* import {provideImgixLoader} from '@angular/common';
|
|
173
|
-
*
|
|
174
|
-
* // Call the function and add the result to the `providers` array:
|
|
175
|
-
* providers: [
|
|
176
|
-
* provideImgixLoader("https://my.base.url/"),
|
|
177
|
-
* ],
|
|
178
|
-
* ```
|
|
179
|
-
*
|
|
180
|
-
* The `NgOptimizedImage` directive provides the following functions:
|
|
181
|
-
* - `provideCloudflareLoader`
|
|
182
|
-
* - `provideCloudinaryLoader`
|
|
183
|
-
* - `provideImageKitLoader`
|
|
184
|
-
* - `provideImgixLoader`
|
|
185
|
-
*
|
|
186
|
-
* If you use a different image provider, you can create a custom loader function as described
|
|
187
|
-
* below.
|
|
188
|
-
*
|
|
189
|
-
* To use a **custom loader**: provide your loader function as a value for the `IMAGE_LOADER` DI
|
|
190
|
-
* token.
|
|
191
|
-
*
|
|
192
|
-
* ```typescript
|
|
193
|
-
* import {IMAGE_LOADER, ImageLoaderConfig} from '@angular/common';
|
|
194
|
-
*
|
|
195
|
-
* // Configure the loader using the `IMAGE_LOADER` token.
|
|
196
|
-
* providers: [
|
|
197
|
-
* {
|
|
198
|
-
* provide: IMAGE_LOADER,
|
|
199
|
-
* useValue: (config: ImageLoaderConfig) => {
|
|
200
|
-
* return `https://example.com/${config.src}-${config.width}.jpg}`;
|
|
201
|
-
* }
|
|
202
|
-
* },
|
|
203
|
-
* ],
|
|
204
|
-
* ```
|
|
205
|
-
*
|
|
206
|
-
* Step 3: update `<img>` tags in templates to use `ngSrc` instead of `src`.
|
|
207
|
-
*
|
|
208
|
-
* ```
|
|
209
|
-
* <img ngSrc="logo.png" width="200" height="100">
|
|
210
|
-
* ```
|
|
211
|
-
*
|
|
212
|
-
* @publicApi
|
|
213
|
-
*/
|
|
214
|
-
export class NgOptimizedImage {
|
|
215
|
-
constructor() {
|
|
216
|
-
this.imageLoader = inject(IMAGE_LOADER);
|
|
217
|
-
this.config = processConfig(inject(IMAGE_CONFIG));
|
|
218
|
-
this.renderer = inject(Renderer2);
|
|
219
|
-
this.imgElement = inject(ElementRef).nativeElement;
|
|
220
|
-
this.injector = inject(Injector);
|
|
221
|
-
this.isServer = isPlatformServer(inject(PLATFORM_ID));
|
|
222
|
-
this.preloadLinkCreator = inject(PreloadLinkCreator);
|
|
223
|
-
// a LCP image observer - should be injected only in the dev mode
|
|
224
|
-
this.lcpObserver = ngDevMode ? this.injector.get(LCPImageObserver) : null;
|
|
225
|
-
/**
|
|
226
|
-
* Calculate the rewritten `src` once and store it.
|
|
227
|
-
* This is needed to avoid repetitive calculations and make sure the directive cleanup in the
|
|
228
|
-
* `ngOnDestroy` does not rely on the `IMAGE_LOADER` logic (which in turn can rely on some other
|
|
229
|
-
* instance that might be already destroyed).
|
|
230
|
-
*/
|
|
231
|
-
this._renderedSrc = null;
|
|
232
|
-
/**
|
|
233
|
-
* Indicates whether this image should have a high priority.
|
|
234
|
-
*/
|
|
235
|
-
this.priority = false;
|
|
236
|
-
/**
|
|
237
|
-
* Disables automatic srcset generation for this image.
|
|
238
|
-
*/
|
|
239
|
-
this.disableOptimizedSrcset = false;
|
|
240
|
-
/**
|
|
241
|
-
* Sets the image to "fill mode", which eliminates the height/width requirement and adds
|
|
242
|
-
* styles such that the image fills its containing element.
|
|
243
|
-
*/
|
|
244
|
-
this.fill = false;
|
|
245
|
-
}
|
|
246
|
-
/** @nodoc */
|
|
247
|
-
ngOnInit() {
|
|
248
|
-
performanceMarkFeature('NgOptimizedImage');
|
|
249
|
-
if (ngDevMode) {
|
|
250
|
-
const ngZone = this.injector.get(NgZone);
|
|
251
|
-
assertNonEmptyInput(this, 'ngSrc', this.ngSrc);
|
|
252
|
-
assertValidNgSrcset(this, this.ngSrcset);
|
|
253
|
-
assertNoConflictingSrc(this);
|
|
254
|
-
if (this.ngSrcset) {
|
|
255
|
-
assertNoConflictingSrcset(this);
|
|
256
|
-
}
|
|
257
|
-
assertNotBase64Image(this);
|
|
258
|
-
assertNotBlobUrl(this);
|
|
259
|
-
if (this.fill) {
|
|
260
|
-
assertEmptyWidthAndHeight(this);
|
|
261
|
-
// This leaves the Angular zone to avoid triggering unnecessary change detection cycles when
|
|
262
|
-
// `load` tasks are invoked on images.
|
|
263
|
-
ngZone.runOutsideAngular(() => assertNonZeroRenderedHeight(this, this.imgElement, this.renderer));
|
|
264
|
-
}
|
|
265
|
-
else {
|
|
266
|
-
assertNonEmptyWidthAndHeight(this);
|
|
267
|
-
if (this.height !== undefined) {
|
|
268
|
-
assertGreaterThanZero(this, this.height, 'height');
|
|
269
|
-
}
|
|
270
|
-
if (this.width !== undefined) {
|
|
271
|
-
assertGreaterThanZero(this, this.width, 'width');
|
|
272
|
-
}
|
|
273
|
-
// Only check for distorted images when not in fill mode, where
|
|
274
|
-
// images may be intentionally stretched, cropped or letterboxed.
|
|
275
|
-
ngZone.runOutsideAngular(() => assertNoImageDistortion(this, this.imgElement, this.renderer));
|
|
276
|
-
}
|
|
277
|
-
assertValidLoadingInput(this);
|
|
278
|
-
if (!this.ngSrcset) {
|
|
279
|
-
assertNoComplexSizes(this);
|
|
280
|
-
}
|
|
281
|
-
assertValidPlaceholder(this, this.imageLoader);
|
|
282
|
-
assertNotMissingBuiltInLoader(this.ngSrc, this.imageLoader);
|
|
283
|
-
assertNoNgSrcsetWithoutLoader(this, this.imageLoader);
|
|
284
|
-
assertNoLoaderParamsWithoutLoader(this, this.imageLoader);
|
|
285
|
-
if (this.lcpObserver !== null) {
|
|
286
|
-
const ngZone = this.injector.get(NgZone);
|
|
287
|
-
ngZone.runOutsideAngular(() => {
|
|
288
|
-
this.lcpObserver.registerImage(this.getRewrittenSrc(), this.ngSrc, this.priority);
|
|
289
|
-
});
|
|
290
|
-
}
|
|
291
|
-
if (this.priority) {
|
|
292
|
-
const checker = this.injector.get(PreconnectLinkChecker);
|
|
293
|
-
checker.assertPreconnect(this.getRewrittenSrc(), this.ngSrc);
|
|
294
|
-
if (!this.isServer) {
|
|
295
|
-
const applicationRef = this.injector.get(ApplicationRef);
|
|
296
|
-
assetPriorityCountBelowThreshold(applicationRef);
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
if (this.placeholder) {
|
|
301
|
-
this.removePlaceholderOnLoad(this.imgElement);
|
|
302
|
-
}
|
|
303
|
-
this.setHostAttributes();
|
|
304
|
-
}
|
|
305
|
-
setHostAttributes() {
|
|
306
|
-
// Must set width/height explicitly in case they are bound (in which case they will
|
|
307
|
-
// only be reflected and not found by the browser)
|
|
308
|
-
if (this.fill) {
|
|
309
|
-
this.sizes ||= '100vw';
|
|
310
|
-
}
|
|
311
|
-
else {
|
|
312
|
-
this.setHostAttribute('width', this.width.toString());
|
|
313
|
-
this.setHostAttribute('height', this.height.toString());
|
|
314
|
-
}
|
|
315
|
-
this.setHostAttribute('loading', this.getLoadingBehavior());
|
|
316
|
-
this.setHostAttribute('fetchpriority', this.getFetchPriority());
|
|
317
|
-
// The `data-ng-img` attribute flags an image as using the directive, to allow
|
|
318
|
-
// for analysis of the directive's performance.
|
|
319
|
-
this.setHostAttribute('ng-img', 'true');
|
|
320
|
-
// The `src` and `srcset` attributes should be set last since other attributes
|
|
321
|
-
// could affect the image's loading behavior.
|
|
322
|
-
const rewrittenSrcset = this.updateSrcAndSrcset();
|
|
323
|
-
if (this.sizes) {
|
|
324
|
-
this.setHostAttribute('sizes', this.sizes);
|
|
325
|
-
}
|
|
326
|
-
if (this.isServer && this.priority) {
|
|
327
|
-
this.preloadLinkCreator.createPreloadLinkTag(this.renderer, this.getRewrittenSrc(), rewrittenSrcset, this.sizes);
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
/** @nodoc */
|
|
331
|
-
ngOnChanges(changes) {
|
|
332
|
-
if (ngDevMode) {
|
|
333
|
-
assertNoPostInitInputChange(this, changes, [
|
|
334
|
-
'ngSrcset',
|
|
335
|
-
'width',
|
|
336
|
-
'height',
|
|
337
|
-
'priority',
|
|
338
|
-
'fill',
|
|
339
|
-
'loading',
|
|
340
|
-
'sizes',
|
|
341
|
-
'loaderParams',
|
|
342
|
-
'disableOptimizedSrcset',
|
|
343
|
-
]);
|
|
344
|
-
}
|
|
345
|
-
if (changes['ngSrc'] && !changes['ngSrc'].isFirstChange()) {
|
|
346
|
-
const oldSrc = this._renderedSrc;
|
|
347
|
-
this.updateSrcAndSrcset(true);
|
|
348
|
-
const newSrc = this._renderedSrc;
|
|
349
|
-
if (this.lcpObserver !== null && oldSrc && newSrc && oldSrc !== newSrc) {
|
|
350
|
-
const ngZone = this.injector.get(NgZone);
|
|
351
|
-
ngZone.runOutsideAngular(() => {
|
|
352
|
-
this.lcpObserver?.updateImage(oldSrc, newSrc);
|
|
353
|
-
});
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
if (ngDevMode && changes['placeholder']?.currentValue && !this.isServer) {
|
|
357
|
-
assertPlaceholderDimensions(this, this.imgElement);
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
callImageLoader(configWithoutCustomParams) {
|
|
361
|
-
let augmentedConfig = configWithoutCustomParams;
|
|
362
|
-
if (this.loaderParams) {
|
|
363
|
-
augmentedConfig.loaderParams = this.loaderParams;
|
|
364
|
-
}
|
|
365
|
-
return this.imageLoader(augmentedConfig);
|
|
366
|
-
}
|
|
367
|
-
getLoadingBehavior() {
|
|
368
|
-
if (!this.priority && this.loading !== undefined) {
|
|
369
|
-
return this.loading;
|
|
370
|
-
}
|
|
371
|
-
return this.priority ? 'eager' : 'lazy';
|
|
372
|
-
}
|
|
373
|
-
getFetchPriority() {
|
|
374
|
-
return this.priority ? 'high' : 'auto';
|
|
375
|
-
}
|
|
376
|
-
getRewrittenSrc() {
|
|
377
|
-
// ImageLoaderConfig supports setting a width property. However, we're not setting width here
|
|
378
|
-
// because if the developer uses rendered width instead of intrinsic width in the HTML width
|
|
379
|
-
// attribute, the image requested may be too small for 2x+ screens.
|
|
380
|
-
if (!this._renderedSrc) {
|
|
381
|
-
const imgConfig = { src: this.ngSrc };
|
|
382
|
-
// Cache calculated image src to reuse it later in the code.
|
|
383
|
-
this._renderedSrc = this.callImageLoader(imgConfig);
|
|
384
|
-
}
|
|
385
|
-
return this._renderedSrc;
|
|
386
|
-
}
|
|
387
|
-
getRewrittenSrcset() {
|
|
388
|
-
const widthSrcSet = VALID_WIDTH_DESCRIPTOR_SRCSET.test(this.ngSrcset);
|
|
389
|
-
const finalSrcs = this.ngSrcset
|
|
390
|
-
.split(',')
|
|
391
|
-
.filter((src) => src !== '')
|
|
392
|
-
.map((srcStr) => {
|
|
393
|
-
srcStr = srcStr.trim();
|
|
394
|
-
const width = widthSrcSet ? parseFloat(srcStr) : parseFloat(srcStr) * this.width;
|
|
395
|
-
return `${this.callImageLoader({ src: this.ngSrc, width })} ${srcStr}`;
|
|
396
|
-
});
|
|
397
|
-
return finalSrcs.join(', ');
|
|
398
|
-
}
|
|
399
|
-
getAutomaticSrcset() {
|
|
400
|
-
if (this.sizes) {
|
|
401
|
-
return this.getResponsiveSrcset();
|
|
402
|
-
}
|
|
403
|
-
else {
|
|
404
|
-
return this.getFixedSrcset();
|
|
405
|
-
}
|
|
406
|
-
}
|
|
407
|
-
getResponsiveSrcset() {
|
|
408
|
-
const { breakpoints } = this.config;
|
|
409
|
-
let filteredBreakpoints = breakpoints;
|
|
410
|
-
if (this.sizes?.trim() === '100vw') {
|
|
411
|
-
// Since this is a full-screen-width image, our srcset only needs to include
|
|
412
|
-
// breakpoints with full viewport widths.
|
|
413
|
-
filteredBreakpoints = breakpoints.filter((bp) => bp >= VIEWPORT_BREAKPOINT_CUTOFF);
|
|
414
|
-
}
|
|
415
|
-
const finalSrcs = filteredBreakpoints.map((bp) => `${this.callImageLoader({ src: this.ngSrc, width: bp })} ${bp}w`);
|
|
416
|
-
return finalSrcs.join(', ');
|
|
417
|
-
}
|
|
418
|
-
updateSrcAndSrcset(forceSrcRecalc = false) {
|
|
419
|
-
if (forceSrcRecalc) {
|
|
420
|
-
// Reset cached value, so that the followup `getRewrittenSrc()` call
|
|
421
|
-
// will recalculate it and update the cache.
|
|
422
|
-
this._renderedSrc = null;
|
|
423
|
-
}
|
|
424
|
-
const rewrittenSrc = this.getRewrittenSrc();
|
|
425
|
-
this.setHostAttribute('src', rewrittenSrc);
|
|
426
|
-
let rewrittenSrcset = undefined;
|
|
427
|
-
if (this.ngSrcset) {
|
|
428
|
-
rewrittenSrcset = this.getRewrittenSrcset();
|
|
429
|
-
}
|
|
430
|
-
else if (this.shouldGenerateAutomaticSrcset()) {
|
|
431
|
-
rewrittenSrcset = this.getAutomaticSrcset();
|
|
432
|
-
}
|
|
433
|
-
if (rewrittenSrcset) {
|
|
434
|
-
this.setHostAttribute('srcset', rewrittenSrcset);
|
|
435
|
-
}
|
|
436
|
-
return rewrittenSrcset;
|
|
437
|
-
}
|
|
438
|
-
getFixedSrcset() {
|
|
439
|
-
const finalSrcs = DENSITY_SRCSET_MULTIPLIERS.map((multiplier) => `${this.callImageLoader({
|
|
440
|
-
src: this.ngSrc,
|
|
441
|
-
width: this.width * multiplier,
|
|
442
|
-
})} ${multiplier}x`);
|
|
443
|
-
return finalSrcs.join(', ');
|
|
444
|
-
}
|
|
445
|
-
shouldGenerateAutomaticSrcset() {
|
|
446
|
-
let oversizedImage = false;
|
|
447
|
-
if (!this.sizes) {
|
|
448
|
-
oversizedImage =
|
|
449
|
-
this.width > FIXED_SRCSET_WIDTH_LIMIT || this.height > FIXED_SRCSET_HEIGHT_LIMIT;
|
|
450
|
-
}
|
|
451
|
-
return (!this.disableOptimizedSrcset &&
|
|
452
|
-
!this.srcset &&
|
|
453
|
-
this.imageLoader !== noopImageLoader &&
|
|
454
|
-
!oversizedImage);
|
|
455
|
-
}
|
|
456
|
-
/**
|
|
457
|
-
* Returns an image url formatted for use with the CSS background-image property. Expects one of:
|
|
458
|
-
* * A base64 encoded image, which is wrapped and passed through.
|
|
459
|
-
* * A boolean. If true, calls the image loader to generate a small placeholder url.
|
|
460
|
-
*/
|
|
461
|
-
generatePlaceholder(placeholderInput) {
|
|
462
|
-
const { placeholderResolution } = this.config;
|
|
463
|
-
if (placeholderInput === true) {
|
|
464
|
-
return `url(${this.callImageLoader({
|
|
465
|
-
src: this.ngSrc,
|
|
466
|
-
width: placeholderResolution,
|
|
467
|
-
isPlaceholder: true,
|
|
468
|
-
})})`;
|
|
469
|
-
}
|
|
470
|
-
else if (typeof placeholderInput === 'string') {
|
|
471
|
-
return `url(${placeholderInput})`;
|
|
472
|
-
}
|
|
473
|
-
return null;
|
|
474
|
-
}
|
|
475
|
-
/**
|
|
476
|
-
* Determines if blur should be applied, based on an optional boolean
|
|
477
|
-
* property `blur` within the optional configuration object `placeholderConfig`.
|
|
478
|
-
*/
|
|
479
|
-
shouldBlurPlaceholder(placeholderConfig) {
|
|
480
|
-
if (!placeholderConfig || !placeholderConfig.hasOwnProperty('blur')) {
|
|
481
|
-
return true;
|
|
482
|
-
}
|
|
483
|
-
return Boolean(placeholderConfig.blur);
|
|
484
|
-
}
|
|
485
|
-
removePlaceholderOnLoad(img) {
|
|
486
|
-
const callback = () => {
|
|
487
|
-
const changeDetectorRef = this.injector.get(ChangeDetectorRef);
|
|
488
|
-
removeLoadListenerFn();
|
|
489
|
-
removeErrorListenerFn();
|
|
490
|
-
this.placeholder = false;
|
|
491
|
-
changeDetectorRef.markForCheck();
|
|
492
|
-
};
|
|
493
|
-
const removeLoadListenerFn = this.renderer.listen(img, 'load', callback);
|
|
494
|
-
const removeErrorListenerFn = this.renderer.listen(img, 'error', callback);
|
|
495
|
-
}
|
|
496
|
-
/** @nodoc */
|
|
497
|
-
ngOnDestroy() {
|
|
498
|
-
if (ngDevMode) {
|
|
499
|
-
if (!this.priority && this._renderedSrc !== null && this.lcpObserver !== null) {
|
|
500
|
-
this.lcpObserver.unregisterImage(this._renderedSrc);
|
|
501
|
-
}
|
|
502
|
-
}
|
|
503
|
-
}
|
|
504
|
-
setHostAttribute(name, value) {
|
|
505
|
-
this.renderer.setAttribute(this.imgElement, name, value);
|
|
506
|
-
}
|
|
507
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.1", ngImport: i0, type: NgOptimizedImage, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
508
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "19.0.0-next.1", type: NgOptimizedImage, isStandalone: true, selector: "img[ngSrc]", inputs: { ngSrc: ["ngSrc", "ngSrc", unwrapSafeUrl], ngSrcset: "ngSrcset", sizes: "sizes", width: ["width", "width", numberAttribute], height: ["height", "height", numberAttribute], loading: "loading", priority: ["priority", "priority", booleanAttribute], loaderParams: "loaderParams", disableOptimizedSrcset: ["disableOptimizedSrcset", "disableOptimizedSrcset", booleanAttribute], fill: ["fill", "fill", booleanAttribute], placeholder: ["placeholder", "placeholder", booleanOrUrlAttribute], placeholderConfig: "placeholderConfig", src: "src", srcset: "srcset" }, host: { properties: { "style.position": "fill ? \"absolute\" : null", "style.width": "fill ? \"100%\" : null", "style.height": "fill ? \"100%\" : null", "style.inset": "fill ? \"0\" : null", "style.background-size": "placeholder ? \"cover\" : null", "style.background-position": "placeholder ? \"50% 50%\" : null", "style.background-repeat": "placeholder ? \"no-repeat\" : null", "style.background-image": "placeholder ? generatePlaceholder(placeholder) : null", "style.filter": "placeholder && shouldBlurPlaceholder(placeholderConfig) ? \"blur(15px)\" : null" } }, usesOnChanges: true, ngImport: i0 }); }
|
|
509
|
-
}
|
|
510
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.1", ngImport: i0, type: NgOptimizedImage, decorators: [{
|
|
511
|
-
type: Directive,
|
|
512
|
-
args: [{
|
|
513
|
-
standalone: true,
|
|
514
|
-
selector: 'img[ngSrc]',
|
|
515
|
-
host: {
|
|
516
|
-
'[style.position]': 'fill ? "absolute" : null',
|
|
517
|
-
'[style.width]': 'fill ? "100%" : null',
|
|
518
|
-
'[style.height]': 'fill ? "100%" : null',
|
|
519
|
-
'[style.inset]': 'fill ? "0" : null',
|
|
520
|
-
'[style.background-size]': 'placeholder ? "cover" : null',
|
|
521
|
-
'[style.background-position]': 'placeholder ? "50% 50%" : null',
|
|
522
|
-
'[style.background-repeat]': 'placeholder ? "no-repeat" : null',
|
|
523
|
-
'[style.background-image]': 'placeholder ? generatePlaceholder(placeholder) : null',
|
|
524
|
-
'[style.filter]': `placeholder && shouldBlurPlaceholder(placeholderConfig) ? "blur(${PLACEHOLDER_BLUR_AMOUNT}px)" : null`,
|
|
525
|
-
},
|
|
526
|
-
}]
|
|
527
|
-
}], propDecorators: { ngSrc: [{
|
|
528
|
-
type: Input,
|
|
529
|
-
args: [{ required: true, transform: unwrapSafeUrl }]
|
|
530
|
-
}], ngSrcset: [{
|
|
531
|
-
type: Input
|
|
532
|
-
}], sizes: [{
|
|
533
|
-
type: Input
|
|
534
|
-
}], width: [{
|
|
535
|
-
type: Input,
|
|
536
|
-
args: [{ transform: numberAttribute }]
|
|
537
|
-
}], height: [{
|
|
538
|
-
type: Input,
|
|
539
|
-
args: [{ transform: numberAttribute }]
|
|
540
|
-
}], loading: [{
|
|
541
|
-
type: Input
|
|
542
|
-
}], priority: [{
|
|
543
|
-
type: Input,
|
|
544
|
-
args: [{ transform: booleanAttribute }]
|
|
545
|
-
}], loaderParams: [{
|
|
546
|
-
type: Input
|
|
547
|
-
}], disableOptimizedSrcset: [{
|
|
548
|
-
type: Input,
|
|
549
|
-
args: [{ transform: booleanAttribute }]
|
|
550
|
-
}], fill: [{
|
|
551
|
-
type: Input,
|
|
552
|
-
args: [{ transform: booleanAttribute }]
|
|
553
|
-
}], placeholder: [{
|
|
554
|
-
type: Input,
|
|
555
|
-
args: [{ transform: booleanOrUrlAttribute }]
|
|
556
|
-
}], placeholderConfig: [{
|
|
557
|
-
type: Input
|
|
558
|
-
}], src: [{
|
|
559
|
-
type: Input
|
|
560
|
-
}], srcset: [{
|
|
561
|
-
type: Input
|
|
562
|
-
}] } });
|
|
563
|
-
/***** Helpers *****/
|
|
564
|
-
/**
|
|
565
|
-
* Sorts provided config breakpoints and uses defaults.
|
|
566
|
-
*/
|
|
567
|
-
function processConfig(config) {
|
|
568
|
-
let sortedBreakpoints = {};
|
|
569
|
-
if (config.breakpoints) {
|
|
570
|
-
sortedBreakpoints.breakpoints = config.breakpoints.sort((a, b) => a - b);
|
|
571
|
-
}
|
|
572
|
-
return Object.assign({}, IMAGE_CONFIG_DEFAULTS, config, sortedBreakpoints);
|
|
573
|
-
}
|
|
574
|
-
/***** Assert functions *****/
|
|
575
|
-
/**
|
|
576
|
-
* Verifies that there is no `src` set on a host element.
|
|
577
|
-
*/
|
|
578
|
-
function assertNoConflictingSrc(dir) {
|
|
579
|
-
if (dir.src) {
|
|
580
|
-
throw new RuntimeError(2950 /* RuntimeErrorCode.UNEXPECTED_SRC_ATTR */, `${imgDirectiveDetails(dir.ngSrc)} both \`src\` and \`ngSrc\` have been set. ` +
|
|
581
|
-
`Supplying both of these attributes breaks lazy loading. ` +
|
|
582
|
-
`The NgOptimizedImage directive sets \`src\` itself based on the value of \`ngSrc\`. ` +
|
|
583
|
-
`To fix this, please remove the \`src\` attribute.`);
|
|
584
|
-
}
|
|
585
|
-
}
|
|
586
|
-
/**
|
|
587
|
-
* Verifies that there is no `srcset` set on a host element.
|
|
588
|
-
*/
|
|
589
|
-
function assertNoConflictingSrcset(dir) {
|
|
590
|
-
if (dir.srcset) {
|
|
591
|
-
throw new RuntimeError(2951 /* RuntimeErrorCode.UNEXPECTED_SRCSET_ATTR */, `${imgDirectiveDetails(dir.ngSrc)} both \`srcset\` and \`ngSrcset\` have been set. ` +
|
|
592
|
-
`Supplying both of these attributes breaks lazy loading. ` +
|
|
593
|
-
`The NgOptimizedImage directive sets \`srcset\` itself based on the value of ` +
|
|
594
|
-
`\`ngSrcset\`. To fix this, please remove the \`srcset\` attribute.`);
|
|
595
|
-
}
|
|
596
|
-
}
|
|
597
|
-
/**
|
|
598
|
-
* Verifies that the `ngSrc` is not a Base64-encoded image.
|
|
599
|
-
*/
|
|
600
|
-
function assertNotBase64Image(dir) {
|
|
601
|
-
let ngSrc = dir.ngSrc.trim();
|
|
602
|
-
if (ngSrc.startsWith('data:')) {
|
|
603
|
-
if (ngSrc.length > BASE64_IMG_MAX_LENGTH_IN_ERROR) {
|
|
604
|
-
ngSrc = ngSrc.substring(0, BASE64_IMG_MAX_LENGTH_IN_ERROR) + '...';
|
|
605
|
-
}
|
|
606
|
-
throw new RuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc, false)} \`ngSrc\` is a Base64-encoded string ` +
|
|
607
|
-
`(${ngSrc}). NgOptimizedImage does not support Base64-encoded strings. ` +
|
|
608
|
-
`To fix this, disable the NgOptimizedImage directive for this element ` +
|
|
609
|
-
`by removing \`ngSrc\` and using a standard \`src\` attribute instead.`);
|
|
610
|
-
}
|
|
611
|
-
}
|
|
612
|
-
/**
|
|
613
|
-
* Verifies that the 'sizes' only includes responsive values.
|
|
614
|
-
*/
|
|
615
|
-
function assertNoComplexSizes(dir) {
|
|
616
|
-
let sizes = dir.sizes;
|
|
617
|
-
if (sizes?.match(/((\)|,)\s|^)\d+px/)) {
|
|
618
|
-
throw new RuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc, false)} \`sizes\` was set to a string including ` +
|
|
619
|
-
`pixel values. For automatic \`srcset\` generation, \`sizes\` must only include responsive ` +
|
|
620
|
-
`values, such as \`sizes="50vw"\` or \`sizes="(min-width: 768px) 50vw, 100vw"\`. ` +
|
|
621
|
-
`To fix this, modify the \`sizes\` attribute, or provide your own \`ngSrcset\` value directly.`);
|
|
622
|
-
}
|
|
623
|
-
}
|
|
624
|
-
function assertValidPlaceholder(dir, imageLoader) {
|
|
625
|
-
assertNoPlaceholderConfigWithoutPlaceholder(dir);
|
|
626
|
-
assertNoRelativePlaceholderWithoutLoader(dir, imageLoader);
|
|
627
|
-
assertNoOversizedDataUrl(dir);
|
|
628
|
-
}
|
|
629
|
-
/**
|
|
630
|
-
* Verifies that placeholderConfig isn't being used without placeholder
|
|
631
|
-
*/
|
|
632
|
-
function assertNoPlaceholderConfigWithoutPlaceholder(dir) {
|
|
633
|
-
if (dir.placeholderConfig && !dir.placeholder) {
|
|
634
|
-
throw new RuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc, false)} \`placeholderConfig\` options were provided for an ` +
|
|
635
|
-
`image that does not use the \`placeholder\` attribute, and will have no effect.`);
|
|
636
|
-
}
|
|
637
|
-
}
|
|
638
|
-
/**
|
|
639
|
-
* Warns if a relative URL placeholder is specified, but no loader is present to provide the small
|
|
640
|
-
* image.
|
|
641
|
-
*/
|
|
642
|
-
function assertNoRelativePlaceholderWithoutLoader(dir, imageLoader) {
|
|
643
|
-
if (dir.placeholder === true && imageLoader === noopImageLoader) {
|
|
644
|
-
throw new RuntimeError(2963 /* RuntimeErrorCode.MISSING_NECESSARY_LOADER */, `${imgDirectiveDetails(dir.ngSrc)} the \`placeholder\` attribute is set to true but ` +
|
|
645
|
-
`no image loader is configured (i.e. the default one is being used), ` +
|
|
646
|
-
`which would result in the same image being used for the primary image and its placeholder. ` +
|
|
647
|
-
`To fix this, provide a loader or remove the \`placeholder\` attribute from the image.`);
|
|
648
|
-
}
|
|
649
|
-
}
|
|
650
|
-
/**
|
|
651
|
-
* Warns or throws an error if an oversized dataURL placeholder is provided.
|
|
652
|
-
*/
|
|
653
|
-
function assertNoOversizedDataUrl(dir) {
|
|
654
|
-
if (dir.placeholder &&
|
|
655
|
-
typeof dir.placeholder === 'string' &&
|
|
656
|
-
dir.placeholder.startsWith('data:')) {
|
|
657
|
-
if (dir.placeholder.length > DATA_URL_ERROR_LIMIT) {
|
|
658
|
-
throw new RuntimeError(2965 /* RuntimeErrorCode.OVERSIZED_PLACEHOLDER */, `${imgDirectiveDetails(dir.ngSrc)} the \`placeholder\` attribute is set to a data URL which is longer ` +
|
|
659
|
-
`than ${DATA_URL_ERROR_LIMIT} characters. This is strongly discouraged, as large inline placeholders ` +
|
|
660
|
-
`directly increase the bundle size of Angular and hurt page load performance. To fix this, generate ` +
|
|
661
|
-
`a smaller data URL placeholder.`);
|
|
662
|
-
}
|
|
663
|
-
if (dir.placeholder.length > DATA_URL_WARN_LIMIT) {
|
|
664
|
-
console.warn(formatRuntimeError(2965 /* RuntimeErrorCode.OVERSIZED_PLACEHOLDER */, `${imgDirectiveDetails(dir.ngSrc)} the \`placeholder\` attribute is set to a data URL which is longer ` +
|
|
665
|
-
`than ${DATA_URL_WARN_LIMIT} characters. This is discouraged, as large inline placeholders ` +
|
|
666
|
-
`directly increase the bundle size of Angular and hurt page load performance. For better loading performance, ` +
|
|
667
|
-
`generate a smaller data URL placeholder.`));
|
|
668
|
-
}
|
|
669
|
-
}
|
|
670
|
-
}
|
|
671
|
-
/**
|
|
672
|
-
* Verifies that the `ngSrc` is not a Blob URL.
|
|
673
|
-
*/
|
|
674
|
-
function assertNotBlobUrl(dir) {
|
|
675
|
-
const ngSrc = dir.ngSrc.trim();
|
|
676
|
-
if (ngSrc.startsWith('blob:')) {
|
|
677
|
-
throw new RuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} \`ngSrc\` was set to a blob URL (${ngSrc}). ` +
|
|
678
|
-
`Blob URLs are not supported by the NgOptimizedImage directive. ` +
|
|
679
|
-
`To fix this, disable the NgOptimizedImage directive for this element ` +
|
|
680
|
-
`by removing \`ngSrc\` and using a regular \`src\` attribute instead.`);
|
|
681
|
-
}
|
|
682
|
-
}
|
|
683
|
-
/**
|
|
684
|
-
* Verifies that the input is set to a non-empty string.
|
|
685
|
-
*/
|
|
686
|
-
function assertNonEmptyInput(dir, name, value) {
|
|
687
|
-
const isString = typeof value === 'string';
|
|
688
|
-
const isEmptyString = isString && value.trim() === '';
|
|
689
|
-
if (!isString || isEmptyString) {
|
|
690
|
-
throw new RuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} \`${name}\` has an invalid value ` +
|
|
691
|
-
`(\`${value}\`). To fix this, change the value to a non-empty string.`);
|
|
692
|
-
}
|
|
693
|
-
}
|
|
694
|
-
/**
|
|
695
|
-
* Verifies that the `ngSrcset` is in a valid format, e.g. "100w, 200w" or "1x, 2x".
|
|
696
|
-
*/
|
|
697
|
-
export function assertValidNgSrcset(dir, value) {
|
|
698
|
-
if (value == null)
|
|
699
|
-
return;
|
|
700
|
-
assertNonEmptyInput(dir, 'ngSrcset', value);
|
|
701
|
-
const stringVal = value;
|
|
702
|
-
const isValidWidthDescriptor = VALID_WIDTH_DESCRIPTOR_SRCSET.test(stringVal);
|
|
703
|
-
const isValidDensityDescriptor = VALID_DENSITY_DESCRIPTOR_SRCSET.test(stringVal);
|
|
704
|
-
if (isValidDensityDescriptor) {
|
|
705
|
-
assertUnderDensityCap(dir, stringVal);
|
|
706
|
-
}
|
|
707
|
-
const isValidSrcset = isValidWidthDescriptor || isValidDensityDescriptor;
|
|
708
|
-
if (!isValidSrcset) {
|
|
709
|
-
throw new RuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} \`ngSrcset\` has an invalid value (\`${value}\`). ` +
|
|
710
|
-
`To fix this, supply \`ngSrcset\` using a comma-separated list of one or more width ` +
|
|
711
|
-
`descriptors (e.g. "100w, 200w") or density descriptors (e.g. "1x, 2x").`);
|
|
712
|
-
}
|
|
713
|
-
}
|
|
714
|
-
function assertUnderDensityCap(dir, value) {
|
|
715
|
-
const underDensityCap = value
|
|
716
|
-
.split(',')
|
|
717
|
-
.every((num) => num === '' || parseFloat(num) <= ABSOLUTE_SRCSET_DENSITY_CAP);
|
|
718
|
-
if (!underDensityCap) {
|
|
719
|
-
throw new RuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} the \`ngSrcset\` contains an unsupported image density:` +
|
|
720
|
-
`\`${value}\`. NgOptimizedImage generally recommends a max image density of ` +
|
|
721
|
-
`${RECOMMENDED_SRCSET_DENSITY_CAP}x but supports image densities up to ` +
|
|
722
|
-
`${ABSOLUTE_SRCSET_DENSITY_CAP}x. The human eye cannot distinguish between image densities ` +
|
|
723
|
-
`greater than ${RECOMMENDED_SRCSET_DENSITY_CAP}x - which makes them unnecessary for ` +
|
|
724
|
-
`most use cases. Images that will be pinch-zoomed are typically the primary use case for ` +
|
|
725
|
-
`${ABSOLUTE_SRCSET_DENSITY_CAP}x images. Please remove the high density descriptor and try again.`);
|
|
726
|
-
}
|
|
727
|
-
}
|
|
728
|
-
/**
|
|
729
|
-
* Creates a `RuntimeError` instance to represent a situation when an input is set after
|
|
730
|
-
* the directive has initialized.
|
|
731
|
-
*/
|
|
732
|
-
function postInitInputChangeError(dir, inputName) {
|
|
733
|
-
let reason;
|
|
734
|
-
if (inputName === 'width' || inputName === 'height') {
|
|
735
|
-
reason =
|
|
736
|
-
`Changing \`${inputName}\` may result in different attribute value ` +
|
|
737
|
-
`applied to the underlying image element and cause layout shifts on a page.`;
|
|
738
|
-
}
|
|
739
|
-
else {
|
|
740
|
-
reason =
|
|
741
|
-
`Changing the \`${inputName}\` would have no effect on the underlying ` +
|
|
742
|
-
`image element, because the resource loading has already occurred.`;
|
|
743
|
-
}
|
|
744
|
-
return new RuntimeError(2953 /* RuntimeErrorCode.UNEXPECTED_INPUT_CHANGE */, `${imgDirectiveDetails(dir.ngSrc)} \`${inputName}\` was updated after initialization. ` +
|
|
745
|
-
`The NgOptimizedImage directive will not react to this input change. ${reason} ` +
|
|
746
|
-
`To fix this, either switch \`${inputName}\` to a static value ` +
|
|
747
|
-
`or wrap the image element in an *ngIf that is gated on the necessary value.`);
|
|
748
|
-
}
|
|
749
|
-
/**
|
|
750
|
-
* Verify that none of the listed inputs has changed.
|
|
751
|
-
*/
|
|
752
|
-
function assertNoPostInitInputChange(dir, changes, inputs) {
|
|
753
|
-
inputs.forEach((input) => {
|
|
754
|
-
const isUpdated = changes.hasOwnProperty(input);
|
|
755
|
-
if (isUpdated && !changes[input].isFirstChange()) {
|
|
756
|
-
if (input === 'ngSrc') {
|
|
757
|
-
// When the `ngSrc` input changes, we detect that only in the
|
|
758
|
-
// `ngOnChanges` hook, thus the `ngSrc` is already set. We use
|
|
759
|
-
// `ngSrc` in the error message, so we use a previous value, but
|
|
760
|
-
// not the updated one in it.
|
|
761
|
-
dir = { ngSrc: changes[input].previousValue };
|
|
762
|
-
}
|
|
763
|
-
throw postInitInputChangeError(dir, input);
|
|
764
|
-
}
|
|
765
|
-
});
|
|
766
|
-
}
|
|
767
|
-
/**
|
|
768
|
-
* Verifies that a specified input is a number greater than 0.
|
|
769
|
-
*/
|
|
770
|
-
function assertGreaterThanZero(dir, inputValue, inputName) {
|
|
771
|
-
const validNumber = typeof inputValue === 'number' && inputValue > 0;
|
|
772
|
-
const validString = typeof inputValue === 'string' && /^\d+$/.test(inputValue.trim()) && parseInt(inputValue) > 0;
|
|
773
|
-
if (!validNumber && !validString) {
|
|
774
|
-
throw new RuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} \`${inputName}\` has an invalid value. ` +
|
|
775
|
-
`To fix this, provide \`${inputName}\` as a number greater than 0.`);
|
|
776
|
-
}
|
|
777
|
-
}
|
|
778
|
-
/**
|
|
779
|
-
* Verifies that the rendered image is not visually distorted. Effectively this is checking:
|
|
780
|
-
* - Whether the "width" and "height" attributes reflect the actual dimensions of the image.
|
|
781
|
-
* - Whether image styling is "correct" (see below for a longer explanation).
|
|
782
|
-
*/
|
|
783
|
-
function assertNoImageDistortion(dir, img, renderer) {
|
|
784
|
-
const removeLoadListenerFn = renderer.listen(img, 'load', () => {
|
|
785
|
-
removeLoadListenerFn();
|
|
786
|
-
removeErrorListenerFn();
|
|
787
|
-
const computedStyle = window.getComputedStyle(img);
|
|
788
|
-
let renderedWidth = parseFloat(computedStyle.getPropertyValue('width'));
|
|
789
|
-
let renderedHeight = parseFloat(computedStyle.getPropertyValue('height'));
|
|
790
|
-
const boxSizing = computedStyle.getPropertyValue('box-sizing');
|
|
791
|
-
if (boxSizing === 'border-box') {
|
|
792
|
-
const paddingTop = computedStyle.getPropertyValue('padding-top');
|
|
793
|
-
const paddingRight = computedStyle.getPropertyValue('padding-right');
|
|
794
|
-
const paddingBottom = computedStyle.getPropertyValue('padding-bottom');
|
|
795
|
-
const paddingLeft = computedStyle.getPropertyValue('padding-left');
|
|
796
|
-
renderedWidth -= parseFloat(paddingRight) + parseFloat(paddingLeft);
|
|
797
|
-
renderedHeight -= parseFloat(paddingTop) + parseFloat(paddingBottom);
|
|
798
|
-
}
|
|
799
|
-
const renderedAspectRatio = renderedWidth / renderedHeight;
|
|
800
|
-
const nonZeroRenderedDimensions = renderedWidth !== 0 && renderedHeight !== 0;
|
|
801
|
-
const intrinsicWidth = img.naturalWidth;
|
|
802
|
-
const intrinsicHeight = img.naturalHeight;
|
|
803
|
-
const intrinsicAspectRatio = intrinsicWidth / intrinsicHeight;
|
|
804
|
-
const suppliedWidth = dir.width;
|
|
805
|
-
const suppliedHeight = dir.height;
|
|
806
|
-
const suppliedAspectRatio = suppliedWidth / suppliedHeight;
|
|
807
|
-
// Tolerance is used to account for the impact of subpixel rendering.
|
|
808
|
-
// Due to subpixel rendering, the rendered, intrinsic, and supplied
|
|
809
|
-
// aspect ratios of a correctly configured image may not exactly match.
|
|
810
|
-
// For example, a `width=4030 height=3020` image might have a rendered
|
|
811
|
-
// size of "1062w, 796.48h". (An aspect ratio of 1.334... vs. 1.333...)
|
|
812
|
-
const inaccurateDimensions = Math.abs(suppliedAspectRatio - intrinsicAspectRatio) > ASPECT_RATIO_TOLERANCE;
|
|
813
|
-
const stylingDistortion = nonZeroRenderedDimensions &&
|
|
814
|
-
Math.abs(intrinsicAspectRatio - renderedAspectRatio) > ASPECT_RATIO_TOLERANCE;
|
|
815
|
-
if (inaccurateDimensions) {
|
|
816
|
-
console.warn(formatRuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} the aspect ratio of the image does not match ` +
|
|
817
|
-
`the aspect ratio indicated by the width and height attributes. ` +
|
|
818
|
-
`\nIntrinsic image size: ${intrinsicWidth}w x ${intrinsicHeight}h ` +
|
|
819
|
-
`(aspect-ratio: ${round(intrinsicAspectRatio)}). \nSupplied width and height attributes: ` +
|
|
820
|
-
`${suppliedWidth}w x ${suppliedHeight}h (aspect-ratio: ${round(suppliedAspectRatio)}). ` +
|
|
821
|
-
`\nTo fix this, update the width and height attributes.`));
|
|
822
|
-
}
|
|
823
|
-
else if (stylingDistortion) {
|
|
824
|
-
console.warn(formatRuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} the aspect ratio of the rendered image ` +
|
|
825
|
-
`does not match the image's intrinsic aspect ratio. ` +
|
|
826
|
-
`\nIntrinsic image size: ${intrinsicWidth}w x ${intrinsicHeight}h ` +
|
|
827
|
-
`(aspect-ratio: ${round(intrinsicAspectRatio)}). \nRendered image size: ` +
|
|
828
|
-
`${renderedWidth}w x ${renderedHeight}h (aspect-ratio: ` +
|
|
829
|
-
`${round(renderedAspectRatio)}). \nThis issue can occur if "width" and "height" ` +
|
|
830
|
-
`attributes are added to an image without updating the corresponding ` +
|
|
831
|
-
`image styling. To fix this, adjust image styling. In most cases, ` +
|
|
832
|
-
`adding "height: auto" or "width: auto" to the image styling will fix ` +
|
|
833
|
-
`this issue.`));
|
|
834
|
-
}
|
|
835
|
-
else if (!dir.ngSrcset && nonZeroRenderedDimensions) {
|
|
836
|
-
// If `ngSrcset` hasn't been set, sanity check the intrinsic size.
|
|
837
|
-
const recommendedWidth = RECOMMENDED_SRCSET_DENSITY_CAP * renderedWidth;
|
|
838
|
-
const recommendedHeight = RECOMMENDED_SRCSET_DENSITY_CAP * renderedHeight;
|
|
839
|
-
const oversizedWidth = intrinsicWidth - recommendedWidth >= OVERSIZED_IMAGE_TOLERANCE;
|
|
840
|
-
const oversizedHeight = intrinsicHeight - recommendedHeight >= OVERSIZED_IMAGE_TOLERANCE;
|
|
841
|
-
if (oversizedWidth || oversizedHeight) {
|
|
842
|
-
console.warn(formatRuntimeError(2960 /* RuntimeErrorCode.OVERSIZED_IMAGE */, `${imgDirectiveDetails(dir.ngSrc)} the intrinsic image is significantly ` +
|
|
843
|
-
`larger than necessary. ` +
|
|
844
|
-
`\nRendered image size: ${renderedWidth}w x ${renderedHeight}h. ` +
|
|
845
|
-
`\nIntrinsic image size: ${intrinsicWidth}w x ${intrinsicHeight}h. ` +
|
|
846
|
-
`\nRecommended intrinsic image size: ${recommendedWidth}w x ${recommendedHeight}h. ` +
|
|
847
|
-
`\nNote: Recommended intrinsic image size is calculated assuming a maximum DPR of ` +
|
|
848
|
-
`${RECOMMENDED_SRCSET_DENSITY_CAP}. To improve loading time, resize the image ` +
|
|
849
|
-
`or consider using the "ngSrcset" and "sizes" attributes.`));
|
|
850
|
-
}
|
|
851
|
-
}
|
|
852
|
-
});
|
|
853
|
-
// We only listen to the `error` event to remove the `load` event listener because it will not be
|
|
854
|
-
// fired if the image fails to load. This is done to prevent memory leaks in development mode
|
|
855
|
-
// because image elements aren't garbage-collected properly. It happens because zone.js stores the
|
|
856
|
-
// event listener directly on the element and closures capture `dir`.
|
|
857
|
-
const removeErrorListenerFn = renderer.listen(img, 'error', () => {
|
|
858
|
-
removeLoadListenerFn();
|
|
859
|
-
removeErrorListenerFn();
|
|
860
|
-
});
|
|
861
|
-
}
|
|
862
|
-
/**
|
|
863
|
-
* Verifies that a specified input is set.
|
|
864
|
-
*/
|
|
865
|
-
function assertNonEmptyWidthAndHeight(dir) {
|
|
866
|
-
let missingAttributes = [];
|
|
867
|
-
if (dir.width === undefined)
|
|
868
|
-
missingAttributes.push('width');
|
|
869
|
-
if (dir.height === undefined)
|
|
870
|
-
missingAttributes.push('height');
|
|
871
|
-
if (missingAttributes.length > 0) {
|
|
872
|
-
throw new RuntimeError(2954 /* RuntimeErrorCode.REQUIRED_INPUT_MISSING */, `${imgDirectiveDetails(dir.ngSrc)} these required attributes ` +
|
|
873
|
-
`are missing: ${missingAttributes.map((attr) => `"${attr}"`).join(', ')}. ` +
|
|
874
|
-
`Including "width" and "height" attributes will prevent image-related layout shifts. ` +
|
|
875
|
-
`To fix this, include "width" and "height" attributes on the image tag or turn on ` +
|
|
876
|
-
`"fill" mode with the \`fill\` attribute.`);
|
|
877
|
-
}
|
|
878
|
-
}
|
|
879
|
-
/**
|
|
880
|
-
* Verifies that width and height are not set. Used in fill mode, where those attributes don't make
|
|
881
|
-
* sense.
|
|
882
|
-
*/
|
|
883
|
-
function assertEmptyWidthAndHeight(dir) {
|
|
884
|
-
if (dir.width || dir.height) {
|
|
885
|
-
throw new RuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} the attributes \`height\` and/or \`width\` are present ` +
|
|
886
|
-
`along with the \`fill\` attribute. Because \`fill\` mode causes an image to fill its containing ` +
|
|
887
|
-
`element, the size attributes have no effect and should be removed.`);
|
|
888
|
-
}
|
|
889
|
-
}
|
|
890
|
-
/**
|
|
891
|
-
* Verifies that the rendered image has a nonzero height. If the image is in fill mode, provides
|
|
892
|
-
* guidance that this can be caused by the containing element's CSS position property.
|
|
893
|
-
*/
|
|
894
|
-
function assertNonZeroRenderedHeight(dir, img, renderer) {
|
|
895
|
-
const removeLoadListenerFn = renderer.listen(img, 'load', () => {
|
|
896
|
-
removeLoadListenerFn();
|
|
897
|
-
removeErrorListenerFn();
|
|
898
|
-
const renderedHeight = img.clientHeight;
|
|
899
|
-
if (dir.fill && renderedHeight === 0) {
|
|
900
|
-
console.warn(formatRuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} the height of the fill-mode image is zero. ` +
|
|
901
|
-
`This is likely because the containing element does not have the CSS 'position' ` +
|
|
902
|
-
`property set to one of the following: "relative", "fixed", or "absolute". ` +
|
|
903
|
-
`To fix this problem, make sure the container element has the CSS 'position' ` +
|
|
904
|
-
`property defined and the height of the element is not zero.`));
|
|
905
|
-
}
|
|
906
|
-
});
|
|
907
|
-
// See comments in the `assertNoImageDistortion`.
|
|
908
|
-
const removeErrorListenerFn = renderer.listen(img, 'error', () => {
|
|
909
|
-
removeLoadListenerFn();
|
|
910
|
-
removeErrorListenerFn();
|
|
911
|
-
});
|
|
912
|
-
}
|
|
913
|
-
/**
|
|
914
|
-
* Verifies that the `loading` attribute is set to a valid input &
|
|
915
|
-
* is not used on priority images.
|
|
916
|
-
*/
|
|
917
|
-
function assertValidLoadingInput(dir) {
|
|
918
|
-
if (dir.loading && dir.priority) {
|
|
919
|
-
throw new RuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} the \`loading\` attribute ` +
|
|
920
|
-
`was used on an image that was marked "priority". ` +
|
|
921
|
-
`Setting \`loading\` on priority images is not allowed ` +
|
|
922
|
-
`because these images will always be eagerly loaded. ` +
|
|
923
|
-
`To fix this, remove the “loading” attribute from the priority image.`);
|
|
924
|
-
}
|
|
925
|
-
const validInputs = ['auto', 'eager', 'lazy'];
|
|
926
|
-
if (typeof dir.loading === 'string' && !validInputs.includes(dir.loading)) {
|
|
927
|
-
throw new RuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} the \`loading\` attribute ` +
|
|
928
|
-
`has an invalid value (\`${dir.loading}\`). ` +
|
|
929
|
-
`To fix this, provide a valid value ("lazy", "eager", or "auto").`);
|
|
930
|
-
}
|
|
931
|
-
}
|
|
932
|
-
/**
|
|
933
|
-
* Warns if NOT using a loader (falling back to the generic loader) and
|
|
934
|
-
* the image appears to be hosted on one of the image CDNs for which
|
|
935
|
-
* we do have a built-in image loader. Suggests switching to the
|
|
936
|
-
* built-in loader.
|
|
937
|
-
*
|
|
938
|
-
* @param ngSrc Value of the ngSrc attribute
|
|
939
|
-
* @param imageLoader ImageLoader provided
|
|
940
|
-
*/
|
|
941
|
-
function assertNotMissingBuiltInLoader(ngSrc, imageLoader) {
|
|
942
|
-
if (imageLoader === noopImageLoader) {
|
|
943
|
-
let builtInLoaderName = '';
|
|
944
|
-
for (const loader of BUILT_IN_LOADERS) {
|
|
945
|
-
if (loader.testUrl(ngSrc)) {
|
|
946
|
-
builtInLoaderName = loader.name;
|
|
947
|
-
break;
|
|
948
|
-
}
|
|
949
|
-
}
|
|
950
|
-
if (builtInLoaderName) {
|
|
951
|
-
console.warn(formatRuntimeError(2962 /* RuntimeErrorCode.MISSING_BUILTIN_LOADER */, `NgOptimizedImage: It looks like your images may be hosted on the ` +
|
|
952
|
-
`${builtInLoaderName} CDN, but your app is not using Angular's ` +
|
|
953
|
-
`built-in loader for that CDN. We recommend switching to use ` +
|
|
954
|
-
`the built-in by calling \`provide${builtInLoaderName}Loader()\` ` +
|
|
955
|
-
`in your \`providers\` and passing it your instance's base URL. ` +
|
|
956
|
-
`If you don't want to use the built-in loader, define a custom ` +
|
|
957
|
-
`loader function using IMAGE_LOADER to silence this warning.`));
|
|
958
|
-
}
|
|
959
|
-
}
|
|
960
|
-
}
|
|
961
|
-
/**
|
|
962
|
-
* Warns if ngSrcset is present and no loader is configured (i.e. the default one is being used).
|
|
963
|
-
*/
|
|
964
|
-
function assertNoNgSrcsetWithoutLoader(dir, imageLoader) {
|
|
965
|
-
if (dir.ngSrcset && imageLoader === noopImageLoader) {
|
|
966
|
-
console.warn(formatRuntimeError(2963 /* RuntimeErrorCode.MISSING_NECESSARY_LOADER */, `${imgDirectiveDetails(dir.ngSrc)} the \`ngSrcset\` attribute is present but ` +
|
|
967
|
-
`no image loader is configured (i.e. the default one is being used), ` +
|
|
968
|
-
`which would result in the same image being used for all configured sizes. ` +
|
|
969
|
-
`To fix this, provide a loader or remove the \`ngSrcset\` attribute from the image.`));
|
|
970
|
-
}
|
|
971
|
-
}
|
|
972
|
-
/**
|
|
973
|
-
* Warns if loaderParams is present and no loader is configured (i.e. the default one is being
|
|
974
|
-
* used).
|
|
975
|
-
*/
|
|
976
|
-
function assertNoLoaderParamsWithoutLoader(dir, imageLoader) {
|
|
977
|
-
if (dir.loaderParams && imageLoader === noopImageLoader) {
|
|
978
|
-
console.warn(formatRuntimeError(2963 /* RuntimeErrorCode.MISSING_NECESSARY_LOADER */, `${imgDirectiveDetails(dir.ngSrc)} the \`loaderParams\` attribute is present but ` +
|
|
979
|
-
`no image loader is configured (i.e. the default one is being used), ` +
|
|
980
|
-
`which means that the loaderParams data will not be consumed and will not affect the URL. ` +
|
|
981
|
-
`To fix this, provide a custom loader or remove the \`loaderParams\` attribute from the image.`));
|
|
982
|
-
}
|
|
983
|
-
}
|
|
984
|
-
/**
|
|
985
|
-
* Warns if the priority attribute is used too often on page load
|
|
986
|
-
*/
|
|
987
|
-
async function assetPriorityCountBelowThreshold(appRef) {
|
|
988
|
-
if (IMGS_WITH_PRIORITY_ATTR_COUNT === 0) {
|
|
989
|
-
IMGS_WITH_PRIORITY_ATTR_COUNT++;
|
|
990
|
-
await whenStable(appRef);
|
|
991
|
-
if (IMGS_WITH_PRIORITY_ATTR_COUNT > PRIORITY_COUNT_THRESHOLD) {
|
|
992
|
-
console.warn(formatRuntimeError(2966 /* RuntimeErrorCode.TOO_MANY_PRIORITY_ATTRIBUTES */, `NgOptimizedImage: The "priority" attribute is set to true more than ${PRIORITY_COUNT_THRESHOLD} times (${IMGS_WITH_PRIORITY_ATTR_COUNT} times). ` +
|
|
993
|
-
`Marking too many images as "high" priority can hurt your application's LCP (https://web.dev/lcp). ` +
|
|
994
|
-
`"Priority" should only be set on the image expected to be the page's LCP element.`));
|
|
995
|
-
}
|
|
996
|
-
}
|
|
997
|
-
else {
|
|
998
|
-
IMGS_WITH_PRIORITY_ATTR_COUNT++;
|
|
999
|
-
}
|
|
1000
|
-
}
|
|
1001
|
-
/**
|
|
1002
|
-
* Warns if placeholder's dimension are over a threshold.
|
|
1003
|
-
*
|
|
1004
|
-
* This assert function is meant to only run on the browser.
|
|
1005
|
-
*/
|
|
1006
|
-
function assertPlaceholderDimensions(dir, imgElement) {
|
|
1007
|
-
const computedStyle = window.getComputedStyle(imgElement);
|
|
1008
|
-
let renderedWidth = parseFloat(computedStyle.getPropertyValue('width'));
|
|
1009
|
-
let renderedHeight = parseFloat(computedStyle.getPropertyValue('height'));
|
|
1010
|
-
if (renderedWidth > PLACEHOLDER_DIMENSION_LIMIT || renderedHeight > PLACEHOLDER_DIMENSION_LIMIT) {
|
|
1011
|
-
console.warn(formatRuntimeError(2967 /* RuntimeErrorCode.PLACEHOLDER_DIMENSION_LIMIT_EXCEEDED */, `${imgDirectiveDetails(dir.ngSrc)} it uses a placeholder image, but at least one ` +
|
|
1012
|
-
`of the dimensions attribute (height or width) exceeds the limit of ${PLACEHOLDER_DIMENSION_LIMIT}px. ` +
|
|
1013
|
-
`To fix this, use a smaller image as a placeholder.`));
|
|
1014
|
-
}
|
|
1015
|
-
}
|
|
1016
|
-
function round(input) {
|
|
1017
|
-
return Number.isInteger(input) ? input : input.toFixed(2);
|
|
1018
|
-
}
|
|
1019
|
-
// Transform function to handle SafeValue input for ngSrc. This doesn't do any sanitization,
|
|
1020
|
-
// as that is not needed for img.src and img.srcset. This transform is purely for compatibility.
|
|
1021
|
-
function unwrapSafeUrl(value) {
|
|
1022
|
-
if (typeof value === 'string') {
|
|
1023
|
-
return value;
|
|
1024
|
-
}
|
|
1025
|
-
return unwrapSafeValue(value);
|
|
1026
|
-
}
|
|
1027
|
-
// Transform function to handle inputs which may be booleans, strings, or string representations
|
|
1028
|
-
// of boolean values. Used for the placeholder attribute.
|
|
1029
|
-
export function booleanOrUrlAttribute(value) {
|
|
1030
|
-
if (typeof value === 'string' && value !== 'true' && value !== 'false' && value !== '') {
|
|
1031
|
-
return value;
|
|
1032
|
-
}
|
|
1033
|
-
return booleanAttribute(value);
|
|
1034
|
-
}
|
|
1035
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdfb3B0aW1pemVkX2ltYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9kaXJlY3RpdmVzL25nX29wdGltaXplZF9pbWFnZS9uZ19vcHRpbWl6ZWRfaW1hZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUNMLE1BQU0sRUFDTixlQUFlLEVBSWYsV0FBVyxFQUNYLFNBQVMsRUFFVCxtQkFBbUIsSUFBSSxrQkFBa0IsRUFDekMsYUFBYSxJQUFJLFlBQVksRUFDN0Isc0JBQXNCLElBQUkscUJBQXFCLEVBRS9DLHVCQUF1QixJQUFJLHNCQUFzQixFQUNqRCxhQUFhLElBQUksWUFBWSxFQUU3QixnQkFBZ0IsSUFBSSxlQUFlLEVBQ25DLGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsV0FBVyxJQUFJLFVBQVUsR0FDMUIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFbkQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDdkUsT0FBTyxFQUNMLFlBQVksRUFHWixlQUFlLEdBQ2hCLE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9B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S0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzlCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELE9BQU8sZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hDLENBQUM7QUFFRCxnR0FBZ0c7QUFDaEcseURBQXlEO0FBQ3pELE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxLQUF1QjtJQUMzRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssTUFBTSxJQUFJLEtBQUssS0FBSyxPQUFPLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ3ZGLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELE9BQU8sZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge1xuICBib29sZWFuQXR0cmlidXRlLFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIGluamVjdCxcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIG51bWJlckF0dHJpYnV0ZSxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgUExBVEZPUk1fSUQsXG4gIFJlbmRlcmVyMixcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgybVmb3JtYXRSdW50aW1lRXJyb3IgYXMgZm9ybWF0UnVudGltZUVycm9yLFxuICDJtUlNQUdFX0NPTkZJRyBhcyBJTUFHRV9DT05GSUcsXG4gIMm1SU1BR0VfQ09ORklHX0RFRkFVTFRTIGFzIElNQUdFX0NPTkZJR19ERUZBVUxUUyxcbiAgybVJbWFnZUNvbmZpZyBhcyBJbWFnZUNvbmZpZyxcbiAgybVwZXJmb3JtYW5jZU1hcmtGZWF0dXJlIGFzIHBlcmZvcm1hbmNlTWFya0ZlYXR1cmUsXG4gIMm1UnVudGltZUVycm9yIGFzIFJ1bnRpbWVFcnJvcixcbiAgybVTYWZlVmFsdWUgYXMgU2FmZVZhbHVlLFxuICDJtXVud3JhcFNhZmVWYWx1ZSBhcyB1bndyYXBTYWZlVmFsdWUsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBBcHBsaWNhdGlvblJlZixcbiAgybV3aGVuU3RhYmxlIGFzIHdoZW5TdGFibGUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1J1bnRpbWVFcnJvckNvZGV9IGZyb20gJy4uLy4uL2Vycm9ycyc7XG5pbXBvcnQge2lzUGxhdGZvcm1TZXJ2ZXJ9IGZyb20gJy4uLy4uL3BsYXRmb3JtX2lkJztcblxuaW1wb3J0IHtpbWdEaXJlY3RpdmVEZXRhaWxzfSBmcm9tICcuL2Vycm9yX2hlbHBlcic7XG5pbXBvcnQge2Nsb3VkaW5hcnlMb2FkZXJJbmZvfSBmcm9tICcuL2ltYWdlX2xvYWRlcnMvY2xvdWRpbmFyeV9sb2FkZXInO1xuaW1wb3J0IHtcbiAgSU1BR0VfTE9BREVSLFxuICBJbWFnZUxvYWRlcixcbiAgSW1hZ2VMb2FkZXJDb25maWcsXG4gIG5vb3BJbWFnZUxvYWRlcixcbn0gZnJvbSAnLi9pbWFnZV9sb2FkZXJzL2ltYWdlX2xvYWRlcic7XG5pbXBvcnQge2ltYWdlS2l0TG9hZGVySW5mb30gZnJvbSAnLi9pbWFnZV9sb2FkZXJzL2ltYWdla2l0X2xvYWRlcic7XG5pbXBvcnQge2ltZ2l4TG9hZGVySW5mb30gZnJvbSAnLi9pbWFnZV9sb2FkZXJzL2ltZ2l4X2xvYWRlcic7XG5pbXBvcnQge25ldGxpZnlMb2FkZXJJbmZvfSBmcm9tICcuL2ltYWdlX2xvYWRlcnMvbmV0bGlmeV9sb2FkZXInO1xuaW1wb3J0IHtMQ1BJbWFnZU9ic2VydmVyfSBmcm9tICcuL2xjcF9pbWFnZV9vYnNlcnZlcic7XG5pbXBvcnQge1ByZWNvbm5lY3RMaW5rQ2hlY2tlcn0gZnJvbSAnLi9wcmVjb25uZWN0X2xpbmtfY2hlY2tlcic7XG5pbXBvcnQge1ByZWxvYWRMaW5rQ3JlYXRvcn0gZnJvbSAnLi9wcmVsb2FkLWxpbmstY3JlYXRvcic7XG5cbi8qKlxuICogV2hlbiBhIEJhc2U2NC1lbmNvZGVkIGltYWdlIGlzIHBhc3NlZCBhcyBhbiBpbnB1dCB0byB0aGUgYE5nT3B0aW1pemVkSW1hZ2VgIGRpcmVjdGl2ZSxcbiAqIGFuIGVycm9yIGlzIHRocm93bi4gVGhlIGltYWdlIGNvbnRlbnQgKGFzIGEgc3RyaW5nKSBtaWdodCBiZSB2ZXJ5IGxvbmcsIHRodXMgbWFraW5nXG4gKiBpdCBoYXJkIHRvIHJlYWQgYW4gZXJyb3IgbWVzc2FnZSBpZiB0aGUgZW50aXJlIHN0cmluZyBpcyBpbmNsdWRlZC4gVGhpcyBjb25zdCBkZWZpbmVzXG4gKiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgaW50byB0aGUgZXJyb3IgbWVzc2FnZS4gVGhlIHJlc3RcbiAqIG9mIHRoZSBjb250ZW50IGlzIHRydW5jYXRlZC5cbiAqL1xuY29uc3QgQkFTRTY0X0lNR19NQVhfTEVOR1RIX0lOX0VSUk9SID0gNTA7XG5cbi8qKlxuICogUmVnRXhwciB0byBkZXRlcm1pbmUgd2hldGhlciBhIHNyYyBpbiBhIHNyY3NldCBpcyB1c2luZyB3aWR0aCBkZXNjcmlwdG9ycy5cbiAqIFNob3VsZCBtYXRjaCBzb21ldGhpbmcgbGlrZTogXCIxMDB3LCAyMDB3XCIuXG4gKi9cbmNvbnN0IFZBTElEX1dJRFRIX0RFU0NSSVBUT1JfU1JDU0VUID0gL14oKFxccypcXGQrd1xccyooLHwkKSl7MSx9KSQvO1xuXG4vKipcbiAqIFJlZ0V4cHIgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBzcmMgaW4gYSBzcmNzZXQgaXMgdXNpbmcgZGVuc2l0eSBkZXNjcmlwdG9ycy5cbiAqIFNob3VsZCBtYXRjaCBzb21ldGhpbmcgbGlrZTogXCIxeCwgMngsIDUweFwiLiBBbHNvIHN1cHBvcnRzIGRlY2ltYWxzIGxpa2UgXCIxLjV4LCAxLjUweFwiLlxuICovXG5jb25zdCBWQUxJRF9ERU5TSVRZX0RFU0NSSVBUT1JfU1JDU0VUID0gL14oKFxccypcXGQrKFxcLlxcZCspP3hcXHMqKCx8JCkpezEsfSkkLztcblxuLyoqXG4gKiBTcmNzZXQgdmFsdWVzIHdpdGggYSBkZW5zaXR5IGRlc2NyaXB0b3IgaGlnaGVyIHRoYW4gdGhpcyB2YWx1ZSB3aWxsIGFjdGl2ZWx5XG4gKiB0aHJvdyBhbiBlcnJvci4gU3VjaCBkZW5zaXRpZXMgYXJlIG5vdCBwZXJtaXR0ZWQgYXMgdGhleSBjYXVzZSBpbWFnZSBzaXplc1xuICogdG8gYmUgdW5yZWFzb25hYmx5IGxhcmdlIGFuZCBzbG93IGRvd24gTENQLlxuICovXG5leHBvcnQgY29uc3QgQUJTT0xVVEVfU1JDU0VUX0RFTlNJVFlfQ0FQID0gMztcblxuLyoqXG4gKiBVc2VkIG9ubHkgaW4gZXJyb3IgbWVzc2FnZSB0ZXh0IHRvIGNvbW11bmljYXRlIGJlc3QgcHJhY3RpY2VzLCBhcyB3ZSB3aWxsXG4gKiBvbmx5IHRocm93IGJhc2VkIG9uIHRoZSBzbGlnaHRseSBtb3JlIGNvbnNlcnZhdGl2ZSBBQlNPTFVURV9TUkNTRVRfREVOU0lUWV9DQVAuXG4gKi9cbmV4cG9ydCBjb25zdCBSRUNPTU1FTkRFRF9TUkNTRVRfREVOU0lUWV9DQVAgPSAyO1xuXG4vKipcbiAqIFVzZWQgaW4gZ2VuZXJhdGluZyBhdXRvbWF0aWMgZGVuc2l0eS1iYXNlZCBzcmNzZXRzXG4gKi9cbmNvbnN0IERFTlNJVFlfU1JDU0VUX01VTFRJUExJRVJTID0gWzEsIDJdO1xuXG4vKipcbiAqIFVzZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGJyZWFrcG9pbnRzIHRvIHVzZSBvbiBmdWxsLXdpZHRoIGltYWdlc1xuICovXG5jb25zdCBWSUVXUE9SVF9CUkVBS1BPSU5UX0NVVE9GRiA9IDY0MDtcbi8qKlxuICogVXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0d28gYXNwZWN0IHJhdGlvcyBhcmUgc2ltaWxhciBpbiB2YWx1ZS5cbiAqL1xuY29uc3QgQVNQRUNUX1JBVElPX1RPTEVSQU5DRSA9IDAuMTtcblxuLyoqXG4gKiBVc2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBpbWFnZSBoYXMgYmVlbiByZXF1ZXN0ZWQgYXQgYW4gb3Zlcmx5XG4gKiBsYXJnZSBzaXplIGNvbXBhcmVkIHRvIHRoZSBhY3R1YWwgcmVuZGVyZWQgaW1hZ2Ugc2l6ZSAoYWZ0ZXIgdGFraW5nXG4gKiBpbnRvIGFjY291bnQgYSB0eXBpY2FsIGRldmljZSBwaXhlbCByYXRpbykuIEluIHBpeGVscy5cbiAqL1xuY29uc3QgT1ZFUlNJWkVEX0lNQUdFX1RPTEVSQU5DRSA9IDEwMDA7XG5cbi8qKlxuICogVXNlZCB0byBsaW1pdCBhdXRvbWF0aWMgc3Jjc2V0IGdlbmVyYXRpb24gb2YgdmVyeSBsYXJnZSBzb3VyY2VzIGZvclxuICogZml4ZWQtc2l6ZSBpbWFnZXMuIEluIHBpeGVscy5cbiAqL1xuY29uc3QgRklYRURfU1JDU0VUX1dJRFRIX0xJTUlUID0gMTkyMDtcbmNvbnN0IEZJWEVEX1NSQ1NFVF9IRUlHSFRfTElNSVQgPSAxMDgwO1xuXG4vKipcbiAqIERlZmF1bHQgYmx1ciByYWRpdXMgb2YgdGhlIENTUyBmaWx0ZXIgdXNlZCBvbiBwbGFjZWhvbGRlciBpbWFnZXMsIGluIHBpeGVsc1xuICovXG5leHBvcnQgY29uc3QgUExBQ0VIT0xERVJfQkxVUl9BTU9VTlQgPSAxNTtcblxuLyoqXG4gKiBQbGFjZWhvbGRlciBkaW1lbnNpb24gKGhlaWdodCBvciB3aWR0aCkgbGltaXQgaW4gcGl4ZWxzLiBBbmd1bGFyIHByb2R1Y2VzIGEgd2FybmluZ1xuICogd2hlbiB0aGlzIGxpbWl0IGlzIGNyb3NzZWQuXG4gKi9cbmNvbnN0IFBMQUNFSE9MREVSX0RJTUVOU0lPTl9MSU1JVCA9IDEwMDA7XG5cbi8qKlxuICogVXNlZCB0byB3YXJuIG9yIGVycm9yIHdoZW4gdGhlIHVzZXIgcHJvdmlkZXMgYW4gb3Zlcmx5IGxhcmdlIGRhdGFVUkwgZm9yIHRoZSBwbGFjZWhvbGRlclxuICogYXR0cmlidXRlLlxuICogQ2hhcmFjdGVyIGNvdW50IG9mIEJhc2U2NCBpbWFnZXMgaXMgMSBjaGFyYWN0ZXIgcGVyIGJ5dGUsIGFuZCBiYXNlNjQgZW5jb2RpbmcgaXMgYXBwcm94aW1hdGVseVxuICogMzMlIGxhcmdlciB0aGFuIGJhc2UgaW1hZ2VzLCBzbyA0MDAwIGNoYXJhY3RlcnMgaXMgYXJvdW5kIDNLQiBvbiBkaXNrIGFuZCAxMDAwMCBjaGFyYWN0ZXJzIGlzXG4gKiBhcm91bmQgNy43S0IuIEV4cGVyaW1lbnRhbGx5LCA0MDAwIGNoYXJhY3RlcnMgaXMgYWJvdXQgMjB4MjBweCBpbiBQTkcgb3IgbWVkaXVtLXF1YWxpdHkgSlBFR1xuICogZm9ybWF0LCBhbmQgMTAsMDAwIGlzIGFyb3VuZCA1MHg1MHB4LCBidXQgdGhlcmUncyBxdWl0ZSBhIGJpdCBvZiB2YXJpYXRpb24gZGVwZW5kaW5nIG9uIGhvdyB0aGVcbiAqIGltYWdlIGlzIHNhdmVkLlxuICovXG5leHBvcnQgY29uc3QgREFUQV9VUkxfV0FSTl9MSU1JVCA9IDQwMDA7XG5leHBvcnQgY29uc3QgREFUQV9VUkxfRVJST1JfTElNSVQgPSAxMDAwMDtcblxuLyoqIEluZm8gYWJvdXQgYnVpbHQtaW4gbG9hZGVycyB3ZSBjYW4gdGVzdCBmb3IuICovXG5leHBvcnQgY29uc3QgQlVJTFRfSU5fTE9BREVSUyA9IFtcbiAgaW1naXhMb2FkZXJJbmZvLFxuICBpbWFnZUtpdExvYWRlckluZm8sXG4gIGNsb3VkaW5hcnlMb2FkZXJJbmZvLFxuICBuZXRsaWZ5TG9hZGVySW5mbyxcbl07XG5cbi8qKlxuICogVGhyZXNob2xkIGZvciB0aGUgUFJJT1JJVFlfVFJVRV9DT1VOVFxuICovXG5jb25zdCBQUklPUklUWV9DT1VOVF9USFJFU0hPTEQgPSAxMDtcblxuLyoqXG4gKiBUaGlzIGNvdW50IGlzIHVzZWQgdG8gbG9nIGEgZGV2TW9kZSB3YXJuaW5nXG4gKiB3aGVuIHRoZSBjb3VudCBvZiBkaXJlY3RpdmUgaW5zdGFuY2VzIHdpdGggcHJpb3JpdHk9dHJ1ZVxuICogZXhjZWVkcyB0aGUgdGhyZXNob2xkIFBSSU9SSVRZX0NPVU5UX1RIUkVTSE9MRFxuICovXG5sZXQgSU1HU19XSVRIX1BSSU9SSVRZX0FUVFJfQ09VTlQgPSAwO1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgZm9yIHRlc3RpbmcgcHVycG9zZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0SW1hZ2VQcmlvcml0eUNvdW50KCkge1xuICBJTUdTX1dJVEhfUFJJT1JJVFlfQVRUUl9DT1VOVCA9IDA7XG59XG5cbi8qKlxuICogQ29uZmlnIG9wdGlvbnMgdXNlZCBpbiByZW5kZXJpbmcgcGxhY2Vob2xkZXIgaW1hZ2VzLlxuICpcbiAqIEBzZWUge0BsaW5rIE5nT3B0aW1pemVkSW1hZ2V9XG4gKiBAcHVibGljQXBpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW1hZ2VQbGFjZWhvbGRlckNvbmZpZyB7XG4gIGJsdXI/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIERpcmVjdGl2ZSB0aGF0IGltcHJvdmVzIGltYWdlIGxvYWRpbmcgcGVyZm9ybWFuY2UgYnkgZW5mb3JjaW5nIGJlc3QgcHJhY3RpY2VzLlxuICpcbiAqIGBOZ09wdGltaXplZEltYWdlYCBlbnN1cmVzIHRoYXQgdGhlIGxvYWRpbmcgb2YgdGhlIExhcmdlc3QgQ29udGVudGZ1bCBQYWludCAoTENQKSBpbWFnZSBpc1xuICogcHJpb3JpdGl6ZWQgYnk6XG4gKiAtIEF1dG9tYXRpY2FsbHkgc2V0dGluZyB0aGUgYGZldGNocHJpb3JpdHlgIGF0dHJpYnV0ZSBvbiB0aGUgYDxpbWc+YCB0YWdcbiAqIC0gTGF6eSBsb2FkaW5nIG5vbi1wcmlvcml0eSBpbWFnZXMgYnkgZGVmYXVsdFxuICogLSBBdXRvbWF0aWNhbGx5IGdlbmVyYXRpbmcgYSBwcmVjb25uZWN0IGxpbmsgdGFnIGluIHRoZSBkb2N1bWVudCBoZWFkXG4gKlxuICogSW4gYWRkaXRpb24sIHRoZSBkaXJlY3RpdmU6XG4gKiAtIEdlbmVyYXRlcyBhcHByb3ByaWF0ZSBhc3NldCBVUkxzIGlmIGEgY29ycmVzcG9uZGluZyBgSW1hZ2VMb2FkZXJgIGZ1bmN0aW9uIGlzIHByb3ZpZGVkXG4gKiAtIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVzIGEgc3Jjc2V0XG4gKiAtIFJlcXVpcmVzIHRoYXQgYHdpZHRoYCBhbmQgYGhlaWdodGAgYXJlIHNldFxuICogLSBXYXJucyBpZiBgd2lkdGhgIG9yIGBoZWlnaHRgIGhhdmUgYmVlbiBzZXQgaW5jb3JyZWN0bHlcbiAqIC0gV2FybnMgaWYgdGhlIGltYWdlIHdpbGwgYmUgdmlzdWFsbHkgZGlzdG9ydGVkIHdoZW4gcmVuZGVyZWRcbiAqXG4gKiBAdXNhZ2VOb3Rlc1xuICogVGhlIGBOZ09wdGltaXplZEltYWdlYCBkaXJlY3RpdmUgaXMgbWFya2VkIGFzIFtzdGFuZGFsb25lXShndWlkZS9jb21wb25lbnRzL2ltcG9ydGluZykgYW5kIGNhblxuICogYmUgaW1wb3J0ZWQgZGlyZWN0bHkuXG4gKlxuICogRm9sbG93IHRoZSBzdGVwcyBiZWxvdyB0byBlbmFibGUgYW5kIHVzZSB0aGUgZGlyZWN0aXZlOlxuICogMS4gSW1wb3J0IGl0IGludG8gdGhlIG5lY2Vzc2FyeSBOZ01vZHVsZSBvciBhIHN0YW5kYWxvbmUgQ29tcG9uZW50LlxuICogMi4gT3B0aW9uYWxseSBwcm92aWRlIGFuIGBJbWFnZUxvYWRlcmAgaWYgeW91IHVzZSBhbiBpbWFnZSBob3N0aW5nIHNlcnZpY2UuXG4gKiAzLiBVcGRhdGUgdGhlIG5lY2Vzc2FyeSBgPGltZz5gIHRhZ3MgaW4gdGVtcGxhdGVzIGFuZCByZXBsYWNlIGBzcmNgIGF0dHJpYnV0ZXMgd2l0aCBgbmdTcmNgLlxuICogVXNpbmcgYSBgbmdTcmNgIGFsbG93cyB0aGUgZGlyZWN0aXZlIHRvIGNvbnRyb2wgd2hlbiB0aGUgYHNyY2AgZ2V0cyBzZXQsIHdoaWNoIHRyaWdnZXJzIGFuIGltYWdlXG4gKiBkb3dubG9hZC5cbiAqXG4gKiBTdGVwIDE6IGltcG9ydCB0aGUgYE5nT3B0aW1pemVkSW1hZ2VgIGRpcmVjdGl2ZS5cbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBOZ09wdGltaXplZEltYWdlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbiAqXG4gKiAvLyBJbmNsdWRlIGl0IGludG8gdGhlIG5lY2Vzc2FyeSBOZ01vZHVsZVxuICogQE5nTW9kdWxlKHtcbiAqICAgaW1wb3J0czogW05nT3B0aW1pemVkSW1hZ2VdLFxuICogfSlcbiAqIGNsYXNzIEFwcE1vZHVsZSB7fVxuICpcbiAqIC8vIC4uLiBvciBhIHN0YW5kYWxvbmUgQ29tcG9uZW50XG4gKiBAQ29tcG9uZW50KHtcbiAqICAgc3RhbmRhbG9uZTogdHJ1ZVxuICogICBpbXBvcnRzOiBbTmdPcHRpbWl6ZWRJbWFnZV0sXG4gKiB9KVxuICogY2xhc3MgTXlTdGFuZGFsb25lQ29tcG9uZW50IHt9XG4gKiBgYGBcbiAqXG4gKiBTdGVwIDI6IGNvbmZpZ3VyZSBhIGxvYWRlci5cbiAqXG4gKiBUbyB1c2UgdGhlICoqZGVmYXVsdCBsb2FkZXIqKjogbm8gYWRkaXRpb25hbCBjb2RlIGNoYW5nZXMgYXJlIG5lY2Vzc2FyeS4gVGhlIFVSTCByZXR1cm5lZCBieSB0aGVcbiAqIGdlbmVyaWMgbG9hZGVyIHdpbGwgYWx3YXlzIG1hdGNoIHRoZSB2YWx1ZSBvZiBcInNyY1wiLiBJbiBvdGhlciB3b3JkcywgdGhpcyBsb2FkZXIgYXBwbGllcyBub1xuICogdHJhbnNmb3JtYXRpb25zIHRvIHRoZSByZXNvdXJjZSBVUkwgYW5kIHRoZSB2YWx1ZSBvZiB0aGUgYG5nU3JjYCBhdHRyaWJ1dGUgd2lsbCBiZSB1c2VkIGFzIGlzLlxuICpcbiAqIFRvIHVzZSBhbiBleGlzdGluZyBsb2FkZXIgZm9yIGEgKip0aGlyZC1wYXJ0eSBpbWFnZSBzZXJ2aWNlKio6IGFkZCB0aGUgcHJvdmlkZXIgZmFjdG9yeSBmb3IgeW91clxuICogY2hvc2VuIHNlcnZpY2UgdG8gdGhlIGBwcm92aWRlcnNgIGFycmF5LiBJbiB0aGUgZXhhbXBsZSBiZWxvdywgdGhlIEltZ2l4IGxvYWRlciBpcyB1c2VkOlxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7cHJvdmlkZUltZ2l4TG9hZGVyfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuICpcbiAqIC8vIENhbGwgdGhlIGZ1bmN0aW9uIGFuZCBhZGQgdGhlIHJlc3VsdCB0byB0aGUgYHByb3ZpZGVyc2AgYXJyYXk6XG4gKiBwcm92aWRlcnM6IFtcbiAqICAgcHJvdmlkZUltZ2l4TG9hZGVyKFwiaHR0cHM6Ly9teS5iYXNlLnVybC9cIiksXG4gKiBdLFxuICogYGBgXG4gKlxuICogVGhlIGBOZ09wdGltaXplZEltYWdlYCBkaXJlY3RpdmUgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6XG4gKiAtIGBwcm92aWRlQ2xvdWRmbGFyZUxvYWRlcmBcbiAqIC0gYHByb3ZpZGVDbG91ZGluYXJ5TG9hZGVyYFxuICogLSBgcHJvdmlkZUltYWdlS2l0TG9hZGVyYFxuICogLSBgcHJvdmlkZUltZ2l4TG9hZGVyYFxuICpcbiAqIElmIHlvdSB1c2UgYSBkaWZmZXJlbnQgaW1hZ2UgcHJvdmlkZXIsIHlvdSBjYW4gY3JlYXRlIGEgY3VzdG9tIGxvYWRlciBmdW5jdGlvbiBhcyBkZXNjcmliZWRcbiAqIGJlbG93LlxuICpcbiAqIFRvIHVzZSBhICoqY3VzdG9tIGxvYWRlcioqOiBwcm92aWRlIHlvdXIgbG9hZGVyIGZ1bmN0aW9uIGFzIGEgdmFsdWUgZm9yIHRoZSBgSU1BR0VfTE9BREVSYCBESVxuICogdG9rZW4uXG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHtJTUFHRV9MT0FERVIsIEltYWdlTG9hZGVyQ29uZmlnfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuICpcbiAqIC8vIENvbmZpZ3VyZSB0aGUgbG9hZGVyIHVzaW5nIHRoZSBgSU1BR0VfTE9BREVSYCB0b2tlbi5cbiAqIHByb3ZpZGVyczogW1xuICogICB7XG4gKiAgICAgIHByb3ZpZGU6IElNQUdFX0xPQURFUixcbiAqICAgICAgdXNlVmFsdWU6IChjb25maWc6IEltYWdlTG9hZGVyQ29uZmlnKSA9PiB7XG4gKiAgICAgICAgcmV0dXJuIGBodHRwczovL2V4YW1wbGUuY29tLyR7Y29uZmlnLnNyY30tJHtjb25maWcud2lkdGh9LmpwZ31gO1xuICogICAgICB9XG4gKiAgIH0sXG4gKiBdLFxuICogYGBgXG4gKlxuICogU3RlcCAzOiB1cGRhdGUgYDxpbWc+YCB0YWdzIGluIHRlbXBsYXRlcyB0byB1c2UgYG5nU3JjYCBpbnN0ZWFkIG9mIGBzcmNgLlxuICpcbiAqIGBgYFxuICogPGltZyBuZ1NyYz1cImxvZ28ucG5nXCIgd2lkdGg9XCIyMDBcIiBoZWlnaHQ9XCIxMDBcIj5cbiAqIGBgYFxuICpcbiAqIEBwdWJsaWNBcGlcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnaW1nW25nU3JjXScsXG4gIGhvc3Q6IHtcbiAgICAnW3N0eWxlLnBvc2l0aW9uXSc6ICdmaWxsID8gXCJhYnNvbHV0ZVwiIDogbnVsbCcsXG4gICAgJ1tzdHlsZS53aWR0aF0nOiAnZmlsbCA/IFwiMTAwJVwiIDogbnVsbCcsXG4gICAgJ1tzdHlsZS5oZWlnaHRdJzogJ2ZpbGwgPyBcIjEwMCVcIiA6IG51bGwnLFxuICAgICdbc3R5bGUuaW5zZXRdJzogJ2ZpbGwgPyBcIjBcIiA6IG51bGwnLFxuICAgICdbc3R5bGUuYmFja2dyb3VuZC1zaXplXSc6ICdwbGFjZWhvbGRlciA/IFwiY292ZXJcIiA6IG51bGwnLFxuICAgICdbc3R5bGUuYmFja2dyb3VuZC1wb3NpdGlvbl0nOiAncGxhY2Vob2xkZXIgPyBcIjUwJSA1MCVcIiA6IG51bGwnLFxuICAgICdbc3R5bGUuYmFja2dyb3VuZC1yZXBlYXRdJzogJ3BsYWNlaG9sZGVyID8gXCJuby1yZXBlYXRcIiA6IG51bGwnLFxuICAgICdbc3R5bGUuYmFja2dyb3VuZC1pbWFnZV0nOiAncGxhY2Vob2xkZXIgPyBnZW5lcmF0ZVBsYWNlaG9sZGVyKHBsYWNlaG9sZGVyKSA6IG51bGwnLFxuICAgICdbc3R5bGUuZmlsdGVyXSc6IGBwbGFjZWhvbGRlciAmJiBzaG91bGRCbHVyUGxhY2Vob2xkZXIocGxhY2Vob2xkZXJDb25maWcpID8gXCJibHVyKCR7UExBQ0VIT0xERVJfQkxVUl9BTU9VTlR9cHgpXCIgOiBudWxsYCxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgTmdPcHRpbWl6ZWRJbWFnZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIGltYWdlTG9hZGVyID0gaW5qZWN0KElNQUdFX0xPQURFUik7XG4gIHByaXZhdGUgY29uZmlnOiBJbWFnZUNvbmZpZyA9IHByb2Nlc3NDb25maWcoaW5qZWN0KElNQUdFX0NPTkZJRykpO1xuICBwcml2YXRlIHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XG4gIHByaXZhdGUgaW1nRWxlbWVudDogSFRNTEltYWdlRWxlbWVudCA9IGluamVjdChFbGVtZW50UmVmKS5uYXRpdmVFbGVtZW50O1xuICBwcml2YXRlIGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpc1NlcnZlciA9IGlzUGxhdGZvcm1TZXJ2ZXIoaW5qZWN0KFBMQVRGT1JNX0lEKSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJlbG9hZExpbmtDcmVhdG9yID0gaW5qZWN0KFByZWxvYWRMaW5rQ3JlYXRvcik7XG5cbiAgLy8gYSBMQ1AgaW1hZ2Ugb2JzZXJ2ZXIgLSBzaG91bGQgYmUgaW5qZWN0ZWQgb25seSBpbiB0aGUgZGV2IG1vZGVcbiAgcHJpdmF0ZSBsY3BPYnNlcnZlciA9IG5nRGV2TW9kZSA/IHRoaXMuaW5qZWN0b3IuZ2V0KExDUEltYWdlT2JzZXJ2ZXIpIDogbnVsbDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSByZXdyaXR0ZW4gYHNyY2Agb25jZSBhbmQgc3RvcmUgaXQuXG4gICAqIFRoaXMgaXMgbmVlZGVkIHRvIGF2b2lkIHJlcGV0aXRpdmUgY2FsY3VsYXRpb25zIGFuZCBtYWtlIHN1cmUgdGhlIGRpcmVjdGl2ZSBjbGVhbnVwIGluIHRoZVxuICAgKiBgbmdPbkRlc3Ryb3lgIGRvZXMgbm90IHJlbHkgb24gdGhlIGBJTUFHRV9MT0FERVJgIGxvZ2ljICh3aGljaCBpbiB0dXJuIGNhbiByZWx5IG9uIHNvbWUgb3RoZXJcbiAgICogaW5zdGFuY2UgdGhhdCBtaWdodCBiZSBhbHJlYWR5IGRlc3Ryb3llZCkuXG4gICAqL1xuICBwcml2YXRlIF9yZW5kZXJlZFNyYzogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHNvdXJjZSBpbWFnZS5cbiAgICogSW1hZ2UgbmFtZSB3aWxsIGJlIHByb2Nlc3NlZCBieSB0aGUgaW1hZ2UgbG9hZGVyIGFuZCB0aGUgZmluYWwgVVJMIHdpbGwgYmUgYXBwbGllZCBhcyB0aGUgYHNyY2BcbiAgICogcHJvcGVydHkgb2YgdGhlIGltYWdlLlxuICAgKi9cbiAgQElucHV0KHtyZXF1aXJlZDogdHJ1ZSwgdHJhbnNmb3JtOiB1bndyYXBTYWZlVXJsfSkgbmdTcmMhOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2Ygd2lkdGggb3IgZGVuc2l0eSBkZXNjcmlwdG9ycy5cbiAgICogVGhlIGltYWdlIG5hbWUgd2lsbCBiZSB0YWtlbiBmcm9tIGBuZ1NyY2AgYW5kIGNvbWJpbmVkIHdpdGggdGhlIGxpc3Qgb2Ygd2lkdGggb3IgZGVuc2l0eVxuICAgKiBkZXNjcmlwdG9ycyB0byBnZW5lcmF0ZSB0aGUgZmluYWwgYHNyY3NldGAgcHJvcGVydHkgb2YgdGhlIGltYWdlLlxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKiBgYGBcbiAgICogPGltZyBuZ1NyYz1cImhlbGxvLmpwZ1wiIG5nU3Jjc2V0PVwiMTAwdywgMjAwd1wiIC8+ICA9PlxuICAgKiA8aW1nIHNyYz1cInBhdGgvaGVsbG8uanBnXCIgc3Jjc2V0PVwicGF0aC9oZWxsby5qcGc/dz0xMDAgMTAwdywgcGF0aC9oZWxsby5qcGc/dz0yMDAgMjAwd1wiIC8+XG4gICAqIGBgYFxuICAgKi9cbiAgQElucHV0KCkgbmdTcmNzZXQhOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGBzaXplc2AgYXR0cmlidXRlIHBhc3NlZCB0aHJvdWdoIHRvIHRoZSBgPGltZz5gIGVsZW1lbnQuXG4gICAqIFByb3ZpZGluZyBzaXplcyBjYXVzZXMgdGhlIGltYWdlIHRvIGNyZWF0ZSBhbiBhdXRvbWF0aWMgcmVzcG9uc2l2ZSBzcmNzZXQuXG4gICAqL1xuICBASW5wdXQoKSBzaXplcz86IHN0cmluZztcblxuICAvKipcbiAgICogRm9yIHJlc3BvbnNpdmUgaW1hZ2VzOiB0aGUgaW50cmluc2ljIHdpZHRoIG9mIHRoZSBpbWFnZSBpbiBwaXhlbHMuXG4gICAqIEZvciBmaXhlZCBzaXplIGltYWdlczogdGhlIGRlc2lyZWQgcmVuZGVyZWQgd2lkdGggb2YgdGhlIGltYWdlIGluIHBpeGVscy5cbiAgICovXG4gIEBJbnB1dCh7dHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGV9KSB3aWR0aDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBGb3IgcmVzcG9uc2l2ZSBpbWFnZXM6IHRoZSBpbnRyaW5zaWMgaGVpZ2h0IG9mIHRoZSBpbWFnZSBpbiBwaXhlbHMuXG4gICAqIEZvciBmaXhlZCBzaXplIGltYWdlczogdGhlIGRlc2lyZWQgcmVuZGVyZWQgaGVpZ2h0IG9mIHRoZSBpbWFnZSBpbiBwaXhlbHMuXG4gICAqL1xuICBASW5wdXQoe3RyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlfSkgaGVpZ2h0OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNpcmVkIGxvYWRpbmcgYmVoYXZpb3IgKGxhenksIGVhZ2VyLCBvciBhdXRvKS4gRGVmYXVsdHMgdG8gYGxhenlgLFxuICAgKiB3aGljaCBpcyByZWNvbW1lbmRlZCBmb3IgbW9zdCBpbWFnZXMuXG4gICAqXG4gICAqIFdhcm5pbmc6IFNldHRpbmcgaW1hZ2VzIGFzIGxvYWRpbmc9XCJlYWdlclwiIG9yIGxvYWRpbmc9XCJhdXRvXCIgbWFya3MgdGhlbVxuICAgKiBhcyBub24tcHJpb3JpdHkgaW1hZ2VzIGFuZCBjYW4gaHVydCBsb2FkaW5nIHBlcmZvcm1hbmNlLiBGb3IgaW1hZ2VzIHdoaWNoXG4gICAqIG1heSBiZSB0aGUgTENQIGVsZW1lbnQsIHVzZSB0aGUgYHByaW9yaXR5YCBhdHRyaWJ1dGUgaW5zdGVhZCBvZiBgbG9hZGluZ2AuXG4gICAqL1xuICBASW5wdXQoKSBsb2FkaW5nPzogJ2xhenknIHwgJ2VhZ2VyJyB8ICdhdXRvJztcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBpbWFnZSBzaG91bGQgaGF2ZSBhIGhpZ2ggcHJpb3JpdHkuXG4gICAqL1xuICBASW5wdXQoe3RyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZX0pIHByaW9yaXR5ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERhdGEgdG8gcGFzcyB0aHJvdWdoIHRvIGN1c3RvbSBsb2FkZXJzLlxuICAgKi9cbiAgQElucHV0KCkgbG9hZGVyUGFyYW1zPzoge1trZXk6IHN0cmluZ106IGFueX07XG5cbiAgLyoqXG4gICAqIERpc2FibGVzIGF1dG9tYXRpYyBzcmNzZXQgZ2VuZXJhdGlvbiBmb3IgdGhpcyBpbWFnZS5cbiAgICovXG4gIEBJbnB1dCh7dHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlfSkgZGlzYWJsZU9wdGltaXplZFNyY3NldCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBpbWFnZSB0byBcImZpbGwgbW9kZVwiLCB3aGljaCBlbGltaW5hdGVzIHRoZSBoZWlnaHQvd2lkdGggcmVxdWlyZW1lbnQgYW5kIGFkZHNcbiAgICogc3R5bGVzIHN1Y2ggdGhhdCB0aGUgaW1hZ2UgZmlsbHMgaXRzIGNvbnRhaW5pbmcgZWxlbWVudC5cbiAgICovXG4gIEBJbnB1dCh7dHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlfSkgZmlsbCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBBIFVSTCBvciBkYXRhIFVSTCBmb3IgYW4gaW1hZ2UgdG8gYmUgdXNlZCBhcyBhIHBsYWNlaG9sZGVyIHdoaWxlIHRoaXMgaW1hZ2UgbG9hZHMuXG4gICAqL1xuICBASW5wdXQoe3RyYW5zZm9ybTogYm9vbGVhbk9yVXJsQXR0cmlidXRlfSkgcGxhY2Vob2xkZXI/OiBzdHJpbmcgfCBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIG9iamVjdCBmb3IgcGxhY2Vob2xkZXIgc2V0dGluZ3MuIE9wdGlvbnM6XG4gICAqICAgKiBibHVyOiBTZXR0aW5nIHRoaXMgdG8gZmFsc2UgZGlzYWJsZXMgdGhlIGF1dG9tYXRpYyBDU1MgYmx1ci5cbiAgICovXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyQ29uZmlnPzogSW1hZ2VQbGFjZWhvbGRlckNvbmZpZztcblxuICAvKipcbiAgICogVmFsdWUgb2YgdGhlIGBzcmNgIGF0dHJpYnV0ZSBpZiBzZXQgb24gdGhlIGhvc3QgYDxpbWc+YCBlbGVtZW50LlxuICAgKiBUaGlzIGlucHV0IGlzIGV4Y2x1c2l2ZWx5IHJlYWQgdG8gYXNzZXJ0IHRoYXQgYHNyY2AgaXMgbm90IHNldCBpbiBjb25mbGljdFxuICAgKiB3aXRoIGBuZ1NyY2AgYW5kIHRoYXQgaW1hZ2VzIGRvbid0IHN0YXJ0IHRvIGxvYWQgdW50aWwgYSBsYXp5IGxvYWRpbmcgc3RyYXRlZ3kgaXMgc2V0LlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIEBJbnB1dCgpIHNyYz86IHN0cmluZztcblxuICAvKipcbiAgICogVmFsdWUgb2YgdGhlIGBzcmNzZXRgIGF0dHJpYnV0ZSBpZiBzZXQgb24gdGhlIGhvc3QgYDxpbWc+YCBlbGVtZW50LlxuICAgKiBUaGlzIGlucHV0IGlzIGV4Y2x1c2l2ZWx5IHJlYWQgdG8gYXNzZXJ0IHRoYXQgYHNyY3NldGAgaXMgbm90IHNldCBpbiBjb25mbGljdFxuICAgKiB3aXRoIGBuZ1NyY3NldGAgYW5kIHRoYXQgaW1hZ2VzIGRvbid0IHN0YXJ0IHRvIGxvYWQgdW50aWwgYSBsYXp5IGxvYWRpbmcgc3RyYXRlZ3kgaXMgc2V0LlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIEBJbnB1dCgpIHNyY3NldD86IHN0cmluZztcblxuICAvKiogQG5vZG9jICovXG4gIG5nT25Jbml0KCkge1xuICAgIHBlcmZvcm1hbmNlTWFya0ZlYXR1cmUoJ05nT3B0aW1pemVkSW1hZ2UnKTtcblxuICAgIGlmIChuZ0Rldk1vZGUpIHtcbiAgICAgIGNvbnN0IG5nWm9uZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nWm9uZSk7XG4gICAgICBhc3NlcnROb25FbXB0eUlucHV0KHRoaXMsICduZ1NyYycsIHRoaXMubmdTcmMpO1xuICAgICAgYXNzZXJ0VmFsaWROZ1NyY3NldCh0aGlzLCB0aGlzLm5nU3Jjc2V0KTtcbiAgICAgIGFzc2VydE5vQ29uZmxpY3RpbmdTcmModGhpcyk7XG4gICAgICBpZiAodGhpcy5uZ1NyY3NldCkge1xuICAgICAgICBhc3NlcnROb0NvbmZsaWN0aW5nU3Jjc2V0KHRoaXMpO1xuICAgICAgfVxuICAgICAgYXNzZXJ0Tm90QmFzZTY0SW1hZ2UodGhpcyk7XG4gICAgICBhc3NlcnROb3RCbG9iVXJsKHRoaXMpO1xuICAgICAgaWYgKHRoaXMuZmlsbCkge1xuICAgICAgICBhc3NlcnRFbXB0eVdpZHRoQW5kSGVpZ2h0KHRoaXMpO1xuICAgICAgICAvLyBUaGlzIGxlYXZlcyB0aGUgQW5ndWxhciB6b25lIHRvIGF2b2lkIHRyaWdnZXJpbmcgdW5uZWNlc3NhcnkgY2hhbmdlIGRldGVjdGlvbiBjeWNsZXMgd2hlblxuICAgICAgICAvLyBgbG9hZGAgdGFza3MgYXJlIGludm9rZWQgb24gaW1hZ2VzLlxuICAgICAgICBuZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT5cbiAgICAgICAgICBhc3NlcnROb25aZXJvUmVuZGVyZWRIZWlnaHQodGhpcywgdGhpcy5pbWdFbGVtZW50LCB0aGlzLnJlbmRlcmVyKSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFzc2VydE5vbkVtcHR5V2lkdGhBbmRIZWlnaHQodGhpcyk7XG4gICAgICAgIGlmICh0aGlzLmhlaWdodCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYXNzZXJ0R3JlYXRlclRoYW5aZXJvKHRoaXMsIHRoaXMuaGVpZ2h0LCAnaGVpZ2h0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMud2lkdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFzc2VydEdyZWF0ZXJUaGFuWmVybyh0aGlzLCB0aGlzLndpZHRoLCAnd2lkdGgnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBPbmx5IGNoZWNrIGZvciBkaXN0b3J0ZWQgaW1hZ2VzIHdoZW4gbm90IGluIGZpbGwgbW9kZSwgd2hlcmVcbiAgICAgICAgLy8gaW1hZ2VzIG1heSBiZSBpbnRlbnRpb25hbGx5IHN0cmV0Y2hlZCwgY3JvcHBlZCBvciBsZXR0ZXJib3hlZC5cbiAgICAgICAgbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+XG4gICAgICAgICAgYXNzZXJ0Tm9JbWFnZURpc3RvcnRpb24odGhpcywgdGhpcy5pbWdFbGVtZW50LCB0aGlzLnJlbmRlcmVyKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGFzc2VydFZhbGlkTG9hZGluZ0lucHV0KHRoaXMpO1xuICAgICAgaWYgKCF0aGlzLm5nU3Jjc2V0KSB7XG4gICAgICAgIGFzc2VydE5vQ29tcGxleFNpemVzKHRoaXMpO1xuICAgICAgfVxuICAgICAgYXNzZXJ0VmFsaWRQbGFjZWhvbGRlcih0aGlzLCB0aGlzLmltYWdlTG9hZGVyKTtcbiAgICAgIGFzc2VydE5vdE1pc3NpbmdCdWlsdEluTG9hZGVyKHRoaXMubmdTcmMsIHRoaXMuaW1hZ2VMb2FkZXIpO1xuICAgICAgYXNzZXJ0Tm9OZ1NyY3NldFdpdGhvdXRMb2FkZXIodGhpcywgdGhpcy5pbWFnZUxvYWRlcik7XG4gICAgICBhc3NlcnROb0xvYWRlclBhcmFtc1dpdGhvdXRMb2FkZXIodGhpcywgdGhpcy5pbWFnZUxvYWRlcik7XG5cbiAgICAgIGlmICh0aGlzLmxjcE9ic2VydmVyICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG5nWm9uZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nWm9uZSk7XG4gICAgICAgIG5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sY3BPYnNlcnZlciEucmVnaXN0ZXJJbWFnZSh0aGlzLmdldFJld3JpdHRlblNyYygpLCB0aGlzLm5nU3JjLCB0aGlzLnByaW9yaXR5KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnByaW9yaXR5KSB7XG4gICAgICAgIGNvbnN0IGNoZWNrZXIgPSB0aGlzLmluamVjdG9yLmdldChQcmVjb25uZWN0TGlua0NoZWNrZXIpO1xuICAgICAgICBjaGVja2VyLmFzc2VydFByZWNvbm5lY3QodGhpcy5nZXRSZXdyaXR0ZW5TcmMoKSwgdGhpcy5uZ1NyYyk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzU2VydmVyKSB7XG4gICAgICAgICAgY29uc3QgYXBwbGljYXRpb25SZWYgPSB0aGlzLmluamVjdG9yLmdldChBcHBsaWNhdGlvblJlZik7XG4gICAgICAgICAgYXNzZXRQcmlvcml0eUNvdW50QmVsb3dUaHJlc2hvbGQoYXBwbGljYXRpb25SZWYpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyKSB7XG4gICAgICB0aGlzLnJlbW92ZVBsYWNlaG9sZGVyT25Mb2FkKHRoaXMuaW1nRWxlbWVudCk7XG4gICAgfVxuICAgIHRoaXMuc2V0SG9zdEF0dHJpYnV0ZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0SG9zdEF0dHJpYnV0ZXMoKSB7XG4gICAgLy8gTXVzdCBzZXQgd2lkdGgvaGVpZ2h0IGV4cGxpY2l0bHkgaW4gY2FzZSB0aGV5IGFyZSBib3VuZCAoaW4gd2hpY2ggY2FzZSB0aGV5IHdpbGxcbiAgICAvLyBvbmx5IGJlIHJlZmxlY3RlZCBhbmQgbm90IGZvdW5kIGJ5IHRoZSBicm93c2VyKVxuICAgIGlmICh0aGlzLmZpbGwpIHtcbiAgICAgIHRoaXMuc2l6ZXMgfHw9ICcxMDB2dyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0SG9zdEF0dHJpYnV0ZSgnd2lkdGgnLCB0aGlzLndpZHRoIS50b1N0cmluZygpKTtcbiAgICAgIHRoaXMuc2V0SG9zdEF0dHJpYnV0ZSgnaGVpZ2h0JywgdGhpcy5oZWlnaHQhLnRvU3RyaW5nKCkpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0SG9zdEF0dHJpYnV0ZSgnbG9hZGluZycsIHRoaXMuZ2V0TG9hZGluZ0JlaGF2aW9yKCkpO1xuICAgIHRoaXMuc2V0SG9zdEF0dHJpYnV0ZSgnZmV0Y2hwcmlvcml0eScsIHRoaXMuZ2V0RmV0Y2hQcmlvcml0eSgpKTtcblxuICAgIC8vIFRoZSBgZGF0YS1uZy1pbWdgIGF0dHJpYnV0ZSBmbGFncyBhbiBpbWFnZSBhcyB1c2luZyB0aGUgZGlyZWN0aXZlLCB0byBhbGxvd1xuICAgIC8vIGZvciBhbmFseXNpcyBvZiB0aGUgZGlyZWN0aXZlJ3MgcGVyZm9ybWFuY2UuXG4gICAgdGhpcy5zZXRIb3N0QXR0cmlidXRlKCduZy1pbWcnLCAndHJ1ZScpO1xuXG4gICAgLy8gVGhlIGBzcmNgIGFuZCBgc3Jjc2V0YCBhdHRyaWJ1dGVzIHNob3VsZCBiZSBzZXQgbGFzdCBzaW5jZSBvdGhlciBhdHRyaWJ1dGVzXG4gICAgLy8gY291bGQgYWZmZWN0IHRoZSBpbWFnZSdzIGxvYWRpbmcgYmVoYXZpb3IuXG4gICAgY29uc3QgcmV3cml0dGVuU3Jjc2V0ID0gdGhpcy51cGRhdGVTcmNBbmRTcmNzZXQoKTtcblxuICAgIGlmICh0aGlzLnNpemVzKSB7XG4gICAgICB0aGlzLnNldEhvc3RBdHRyaWJ1dGUoJ3NpemVzJywgdGhpcy5zaXplcyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzU2VydmVyICYmIHRoaXMucHJpb3JpdHkpIHtcbiAgICAgIHRoaXMucHJlbG9hZExpbmtDcmVhdG9yLmNyZWF0ZVByZWxvYWRMaW5rVGFnKFxuICAgICAgICB0aGlzLnJlbmRlcmVyLFxuICAgICAgICB0aGlzLmdldFJld3JpdHRlblNyYygpLFxuICAgICAgICByZXdyaXR0ZW5TcmNzZXQsXG4gICAgICAgIHRoaXMuc2l6ZXMsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAbm9kb2MgKi9cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChuZ0Rldk1vZGUpIHtcbiAgICAgIGFzc2VydE5vUG9zdEluaXRJbnB1dENoYW5nZSh0aGlzLCBjaGFuZ2VzLCBbXG4gICAgICAgICduZ1NyY3NldCcsXG4gICAgICAgICd3aWR0aCcsXG4gICAgICAgICdoZWlnaHQnLFxuICAgICAgICAncHJpb3JpdHknLFxuICAgICAgICAnZmlsbCcsXG4gICAgICAgICdsb2FkaW5nJyxcbiAgICAgICAgJ3NpemVzJyxcbiAgICAgICAgJ2xvYWRlclBhcmFtcycsXG4gICAgICAgICdkaXNhYmxlT3B0aW1pemVkU3Jjc2V0JyxcbiAgICAgIF0pO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snbmdTcmMnXSAmJiAhY2hhbmdlc1snbmdTcmMnXS5pc0ZpcnN0Q2hhbmdlKCkpIHtcbiAgICAgIGNvbnN0IG9sZFNyYyA9IHRoaXMuX3JlbmRlcmVkU3JjO1xuICAgICAgdGhpcy51cGRhdGVTcmNBbmRTcmNzZXQodHJ1ZSk7XG4gICAgICBjb25zdCBuZXdTcmMgPSB0aGlzLl9yZW5kZXJlZFNyYztcbiAgICAgIGlmICh0aGlzLmxjcE9ic2VydmVyICE9PSBudWxsICYmIG9sZFNyYyAmJiBuZXdTcmMgJiYgb2xkU3JjICE9PSBuZXdTcmMpIHtcbiAgICAgICAgY29uc3Qgbmdab25lID0gdGhpcy5pbmplY3Rvci5nZXQoTmdab25lKTtcbiAgICAgICAgbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmxjcE9ic2VydmVyPy51cGRhdGVJbWFnZShvbGRTcmMsIG5ld1NyYyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuZ0Rldk1vZGUgJiYgY2hhbmdlc1sncGxhY2Vob2xkZXInXT8uY3VycmVudFZhbHVlICYmICF0aGlzLmlzU2VydmVyKSB7XG4gICAgICBhc3NlcnRQbGFjZWhvbGRlckRpbWVuc2lvbnModGhpcywgdGhpcy5pbWdFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNhbGxJbWFnZUxvYWRlcihcbiAgICBjb25maWdXaXRob3V0Q3VzdG9tUGFyYW1zOiBPbWl0PEltYWdlTG9hZGVyQ29uZmlnLCAnbG9hZGVyUGFyYW1zJz4sXG4gICk6IHN0cmluZyB7XG4gICAgbGV0IGF1Z21lbnRlZENvbmZpZzogSW1hZ2VMb2FkZXJDb25maWcgPSBjb25maWdXaXRob3V0Q3VzdG9tUGFyYW1zO1xuICAgIGlmICh0aGlzLmxvYWRlclBhcmFtcykge1xuICAgICAgYXVnbWVudGVkQ29uZmlnLmxvYWRlclBhcmFtcyA9IHRoaXMubG9hZGVyUGFyYW1zO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5pbWFnZUxvYWRlcihhdWdtZW50ZWRDb25maWcpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMb2FkaW5nQmVoYXZpb3IoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMucHJpb3JpdHkgJiYgdGhpcy5sb2FkaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWRpbmc7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnByaW9yaXR5ID8gJ2VhZ2VyJyA6ICdsYXp5JztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmV0Y2hQcmlvcml0eSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByaW9yaXR5ID8gJ2hpZ2gnIDogJ2F1dG8nO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZXdyaXR0ZW5TcmMoKTogc3RyaW5nIHtcbiAgICAvLyBJbWFnZUxvYWRlckNvbmZpZyBzdXBwb3J0cyBzZXR0aW5nIGEgd2lkdGggcHJvcGVydHkuIEhvd2V2ZXIsIHdlJ3JlIG5vdCBzZXR0aW5nIHdpZHRoIGhlcmVcbiAgICAvLyBiZWNhdXNlIGlmIHRoZSBkZXZlbG9wZXIgdXNlcyByZW5kZXJlZCB3aWR0aCBpbnN0ZWFkIG9mIGludHJpbnNpYyB3aWR0aCBpbiB0aGUgSFRNTCB3aWR0aFxuICAgIC8vIGF0dHJpYnV0ZSwgdGhlIGltYWdlIHJlcXVlc3RlZCBtYXkgYmUgdG9vIHNtYWxsIGZvciAyeCsgc2NyZWVucy5cbiAgICBpZiAoIXRoaXMuX3JlbmRlcmVkU3JjKSB7XG4gICAgICBjb25zdCBpbWdDb25maWcgPSB7c3JjOiB0aGlzLm5nU3JjfTtcbiAgICAgIC8vIENhY2hlIGNhbGN1bGF0ZWQgaW1hZ2Ugc3JjIHRvIHJldXNlIGl0IGxhdGVyIGluIHRoZSBjb2RlLlxuICAgICAgdGhpcy5fcmVuZGVyZWRTcmMgPSB0aGlzLmNhbGxJbWFnZUxvYWRlcihpbWdDb25maWcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcmVuZGVyZWRTcmM7XG4gIH1cblxuICBwcml2YXRlIGdldFJld3JpdHRlblNyY3NldCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHdpZHRoU3JjU2V0ID0gVkFMSURfV0lEVEhfREVTQ1JJUFRPUl9TUkNTRVQudGVzdCh0aGlzLm5nU3Jjc2V0KTtcbiAgICBjb25zdCBmaW5hbFNyY3MgPSB0aGlzLm5nU3Jjc2V0XG4gICAgICAuc3BsaXQoJywnKVxuICAgICAgLmZpbHRlcigoc3JjKSA9PiBzcmMgIT09ICcnKVxuICAgICAgLm1hcCgoc3JjU3RyKSA9PiB7XG4gICAgICAgIHNyY1N0ciA9IHNyY1N0ci50cmltKCk7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gd2lkdGhTcmNTZXQgPyBwYXJzZUZsb2F0KHNyY1N0cikgOiBwYXJzZUZsb2F0KHNyY1N0cikgKiB0aGlzLndpZHRoITtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY2FsbEltYWdlTG9hZGVyKHtzcmM6IHRoaXMubmdTcmMsIHdpZHRofSl9ICR7c3JjU3RyfWA7XG4gICAgICB9KTtcbiAgICByZXR1cm4gZmluYWxTcmNzLmpvaW4oJywgJyk7XG4gIH1cblxuICBwcml2YXRlIGdldEF1dG9tYXRpY1NyY3NldCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnNpemVzKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXNwb25zaXZlU3Jjc2V0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEZpeGVkU3Jjc2V0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZXNwb25zaXZlU3Jjc2V0KCk6IHN0cmluZyB7XG4gICAgY29uc3Qge2JyZWFrcG9pbnRzfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgbGV0IGZpbHRlcmVkQnJlYWtwb2ludHMgPSBicmVha3BvaW50cyE7XG4gICAgaWYgKHRoaXMuc2l6ZXM/LnRyaW0oKSA9PT0gJzEwMHZ3Jykge1xuICAgICAgLy8gU2luY2UgdGhpcyBpcyBhIGZ1bGwtc2NyZWVuLXdpZHRoIGltYWdlLCBvdXIgc3Jjc2V0IG9ubHkgbmVlZHMgdG8gaW5jbHVkZVxuICAgICAgLy8gYnJlYWtwb2ludHMgd2l0aCBmdWxsIHZpZXdwb3J0IHdpZHRocy5cbiAgICAgIGZpbHRlcmVkQnJlYWtwb2ludHMgPSBicmVha3BvaW50cyEuZmlsdGVyKChicCkgPT4gYnAgPj0gVklFV1BPUlRfQlJFQUtQT0lOVF9DVVRPRkYpO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmFsU3JjcyA9IGZpbHRlcmVkQnJlYWtwb2ludHMubWFwKFxuICAgICAgKGJwKSA9PiBgJHt0aGlzLmNhbGxJbWFnZUxvYWRlcih7c3JjOiB0aGlzLm5nU3JjLCB3aWR0aDogYnB9KX0gJHticH13YCxcbiAgICApO1xuICAgIHJldHVybiBmaW5hbFNyY3Muam9pbignLCAnKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU3JjQW5kU3Jjc2V0KGZvcmNlU3JjUmVjYWxjID0gZmFsc2UpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmIChmb3JjZVNyY1JlY2FsYykge1xuICAgICAgLy8gUmVzZXQgY2FjaGVkIHZhbHVlLCBzbyB0aGF0IHRoZSBmb2xsb3d1cCBgZ2V0UmV3cml0dGVuU3JjKClgIGNhbGxcbiAgICAgIC8vIHdpbGwgcmVjYWxjdWxhdGUgaXQgYW5kIHVwZGF0ZSB0aGUgY2FjaGUuXG4gICAgICB0aGlzLl9yZW5kZXJlZFNyYyA9IG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmV3cml0dGVuU3JjID0gdGhpcy5nZXRSZXdyaXR0ZW5TcmMoKTtcbiAgICB0aGlzLnNldEhvc3RBdHRyaWJ1dGUoJ3NyYycsIHJld3JpdHRlblNyYyk7XG5cbiAgICBsZXQgcmV3cml0dGVuU3Jjc2V0OiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHRoaXMubmdTcmNzZXQpIHtcbiAgICAgIHJld3JpdHRlblNyY3NldCA9IHRoaXMuZ2V0UmV3cml0dGVuU3Jjc2V0KCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNob3VsZEdlbmVyYXRlQXV0b21hdGljU3Jjc2V0KCkpIHtcbiAgICAgIHJld3JpdHRlblNyY3NldCA9IHRoaXMuZ2V0QXV0b21hdGljU3Jjc2V0KCk7XG4gICAgfVxuXG4gICAgaWYgKHJld3JpdHRlblNyY3NldCkge1xuICAgICAgdGhpcy5zZXRIb3N0QXR0cmlidXRlKCdzcmNzZXQnLCByZXdyaXR0ZW5TcmNzZXQpO1xuICAgIH1cbiAgICByZXR1cm4gcmV3cml0dGVuU3Jjc2V0O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGaXhlZFNyY3NldCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGZpbmFsU3JjcyA9IERFTlNJVFlfU1JDU0VUX01VTFRJUExJRVJTLm1hcChcbiAgICAgIChtdWx0aXBsaWVyKSA9PlxuICAgICAgICBgJHt0aGlzLmNhbGxJbWFnZUxvYWRlcih7XG4gICAgICAgICAgc3JjOiB0aGlzLm5nU3JjLFxuICAgICAgICAgIHdpZHRoOiB0aGlzLndpZHRoISAqIG11bHRpcGxpZXIsXG4gICAgICAgIH0pfSAke211bHRpcGxpZXJ9eGAsXG4gICAgKTtcbiAgICByZXR1cm4gZmluYWxTcmNzLmpvaW4oJywgJyk7XG4gIH1cblxuICBwcml2YXRlIHNob3VsZEdlbmVyYXRlQXV0b21hdGljU3Jjc2V0KCk6IGJvb2xlYW4ge1xuICAgIGxldCBvdmVyc2l6ZWRJbWFnZSA9IGZhbHNlO1xuICAgIGlmICghdGhpcy5zaXplcykge1xuICAgICAgb3ZlcnNpemVkSW1hZ2UgPVxuICAgICAgICB0aGlzLndpZHRoISA+IEZJWEVEX1NSQ1NFVF9XSURUSF9MSU1JVCB8fCB0aGlzLmhlaWdodCEgPiBGSVhFRF9TUkNTRVRfSEVJR0hUX0xJTUlUO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgIXRoaXMuZGlzYWJsZU9wdGltaXplZFNyY3NldCAmJlxuICAgICAgIXRoaXMuc3Jjc2V0ICYmXG4gICAgICB0aGlzLmltYWdlTG9hZGVyICE9PSBub29wSW1hZ2VMb2FkZXIgJiZcbiAgICAgICFvdmVyc2l6ZWRJbWFnZVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBpbWFnZSB1cmwgZm9ybWF0dGVkIGZvciB1c2Ugd2l0aCB0aGUgQ1NTIGJhY2tncm91bmQtaW1hZ2UgcHJvcGVydHkuIEV4cGVjdHMgb25lIG9mOlxuICAgKiAqIEEgYmFzZTY0IGVuY29kZWQgaW1hZ2UsIHdoaWNoIGlzIHdyYXBwZWQgYW5kIHBhc3NlZCB0aHJvdWdoLlxuICAgKiAqIEEgYm9vbGVhbi4gSWYgdHJ1ZSwgY2FsbHMgdGhlIGltYWdlIGxvYWRlciB0byBnZW5lcmF0ZSBhIHNtYWxsIHBsYWNlaG9sZGVyIHVybC5cbiAgICovXG4gIHByaXZhdGUgZ2VuZXJhdGVQbGFjZWhvbGRlcihwbGFjZWhvbGRlcklucHV0OiBzdHJpbmcgfCBib29sZWFuKTogc3RyaW5nIHwgYm9vbGVhbiB8IG51bGwge1xuICAgIGNvbnN0IHtwbGFjZWhvbGRlclJlc29sdXRpb259ID0gdGhpcy5jb25maWc7XG4gICAgaWYgKHBsYWNlaG9sZGVySW5wdXQgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiBgdXJsKCR7dGhpcy5jYWxsSW1hZ2VMb2FkZXIoe1xuICAgICAgICBzcmM6IHRoaXMubmdTcmMsXG4gICAgICAgIHdpZHRoOiBwbGFjZWhvbGRlclJlc29sdXRpb24sXG4gICAgICAgIGlzUGxhY2Vob2xkZXI6IHRydWUsXG4gICAgICB9KX0pYDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBwbGFjZWhvbGRlcklucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGB1cmwoJHtwbGFjZWhvbGRlcklucHV0fSlgO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIGJsdXIgc2hvdWxkIGJlIGFwcGxpZWQsIGJhc2VkIG9uIGFuIG9wdGlvbmFsIGJvb2xlYW5cbiAgICogcHJvcGVydHkgYGJsdXJgIHdpdGhpbiB0aGUgb3B0aW9uYWwgY29uZmlndXJhdGlvbiBvYmplY3QgYHBsYWNlaG9sZGVyQ29uZmlnYC5cbiAgICovXG4gIHByaXZhdGUgc2hvdWxkQmx1clBsYWNlaG9sZGVyKHBsYWNlaG9sZGVyQ29uZmlnPzogSW1hZ2VQbGFjZWhvbGRlckNvbmZpZyk6IGJvb2xlYW4ge1xuICAgIGlmICghcGxhY2Vob2xkZXJDb25maWcgfHwgIXBsYWNlaG9sZGVyQ29uZmlnLmhhc093blByb3BlcnR5KCdibHVyJykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gQm9vbGVhbihwbGFjZWhvbGRlckNvbmZpZy5ibHVyKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlUGxhY2Vob2xkZXJPbkxvYWQoaW1nOiBIVE1MSW1hZ2VFbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3QgY2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICBjb25zdCBjaGFuZ2VEZXRlY3RvclJlZiA9IHRoaXMuaW5qZWN0b3IuZ2V0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgICAgIHJlbW92ZUxvYWRMaXN0ZW5lckZuKCk7XG4gICAgICByZW1vdmVFcnJvckxpc3RlbmVyRm4oKTtcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSBmYWxzZTtcbiAgICAgIGNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH07XG5cbiAgICBjb25zdCByZW1vdmVMb2FkTGlzdGVuZXJGbiA9IHRoaXMucmVuZGVyZXIubGlzdGVuKGltZywgJ2xvYWQnLCBjYWxsYmFjayk7XG4gICAgY29uc3QgcmVtb3ZlRXJyb3JMaXN0ZW5lckZuID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oaW1nLCAnZXJyb3InLCBjYWxsYmFjayk7XG4gIH1cblxuICAvKiogQG5vZG9jICovXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmIChuZ0Rldk1vZGUpIHtcbiAgICAgIGlmICghdGhpcy5wcmlvcml0eSAmJiB0aGlzLl9yZW5kZXJlZFNyYyAhPT0gbnVsbCAmJiB0aGlzLmxjcE9ic2VydmVyICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMubGNwT2JzZXJ2ZXIudW5yZWdpc3RlckltYWdlKHRoaXMuX3JlbmRlcmVkU3JjKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEhvc3RBdHRyaWJ1dGUobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5pbWdFbGVtZW50LCBuYW1lLCB2YWx1ZSk7XG4gIH1cbn1cblxuLyoqKioqIEhlbHBlcnMgKioqKiovXG5cbi8qKlxuICogU29ydHMgcHJvdmlkZWQgY29uZmlnIGJyZWFrcG9pbnRzIGFuZCB1c2VzIGRlZmF1bHRzLlxuICovXG5mdW5jdGlvbiBwcm9jZXNzQ29uZmlnKGNvbmZpZzogSW1hZ2VDb25maWcpOiBJbWFnZUNvbmZpZyB7XG4gIGxldCBzb3J0ZWRCcmVha3BvaW50czoge2JyZWFrcG9pbnRzPzogbnVtYmVyW119ID0ge307XG4gIGlmIChjb25maWcuYnJlYWtwb2ludHMpIHtcbiAgICBzb3J0ZWRCcmVha3BvaW50cy5icmVha3BvaW50cyA9IGNvbmZpZy5icmVha3BvaW50cy5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIElNQUdFX0NPTkZJR19ERUZBVUxUUywgY29uZmlnLCBzb3J0ZWRCcmVha3BvaW50cyk7XG59XG5cbi8qKioqKiBBc3NlcnQgZnVuY3Rpb25zICoqKioqL1xuXG4vKipcbiAqIFZlcmlmaWVzIHRoYXQgdGhlcmUgaXMgbm8gYHNyY2Agc2V0IG9uIGEgaG9zdCBlbGVtZW50LlxuICovXG5mdW5jdGlvbiBhc3NlcnROb0NvbmZsaWN0aW5nU3JjKGRpcjogTmdPcHRpbWl6ZWRJbWFnZSkge1xuICBpZiAoZGlyLnNyYykge1xuICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoXG4gICAgICBSdW50aW1lRXJyb3JDb2RlLlVORVhQRUNURURfU1JDX0FUVFIsXG4gICAgICBgJHtpbWdEaXJlY3RpdmVEZXRhaWxzKGRpci5uZ1NyYyl9IGJvdGggXFxgc3JjXFxgIGFuZCBcXGBuZ1NyY1xcYCBoYXZlIGJlZW4gc2V0LiBgICtcbiAgICAgICAgYFN1cHBseWluZyBib3RoIG9mIHRoZXNlIGF0dHJpYnV0ZXMgYnJlYWtzIGxhenkgbG9hZGluZy4gYCArXG4gICAgICAgIGBUaGUgTmdPcHRpbWl6ZWRJbWFnZSBkaXJlY3RpdmUgc2V0cyBcXGBzcmNcXGAgaXRzZWxmIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiBcXGBuZ1NyY1xcYC4gYCArXG4gICAgICAgIGBUbyBmaXggdGhpcywgcGxlYXNlIHJlbW92ZSB0aGUgXFxgc3JjXFxgIGF0dHJpYnV0ZS5gLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBWZXJpZmllcyB0aGF0IHRoZXJlIGlzIG5vIGBzcmNzZXRgIHNldCBvbiBhIGhvc3QgZWxlbWVudC5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0Tm9Db25mbGljdGluZ1NyY3NldChkaXI6IE5nT3B0aW1pemVkSW1hZ2UpIHtcbiAgaWYgKGRpci5zcmNzZXQpIHtcbiAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKFxuICAgICAgUnVudGltZUVycm9yQ29kZS5VTkVYUEVDVEVEX1NSQ1NFVF9BVFRSLFxuICAgICAgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMpfSBib3RoIFxcYHNyY3NldFxcYCBhbmQgXFxgbmdTcmNzZXRcXGAgaGF2ZSBiZWVuIHNldC4gYCArXG4gICAgICAgIGBTdXBwbHlpbmcgYm90aCBvZiB0aGVzZSBhdHRyaWJ1dGVzIGJyZWFrcyBsYXp5IGxvYWRpbmcuIGAgK1xuICAgICAgICBgVGhlIE5nT3B0aW1pemVkSW1hZ2UgZGlyZWN0aXZlIHNldHMgXFxgc3Jjc2V0XFxgIGl0c2VsZiBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgYCArXG4gICAgICAgIGBcXGBuZ1NyY3NldFxcYC4gVG8gZml4IHRoaXMsIHBsZWFzZSByZW1vdmUgdGhlIFxcYHNyY3NldFxcYCBhdHRyaWJ1dGUuYCxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogVmVyaWZpZXMgdGhhdCB0aGUgYG5nU3JjYCBpcyBub3QgYSBCYXNlNjQtZW5jb2RlZCBpbWFnZS5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0Tm90QmFzZTY0SW1hZ2UoZGlyOiBOZ09wdGltaXplZEltYWdlKSB7XG4gIGxldCBuZ1NyYyA9IGRpci5uZ1NyYy50cmltKCk7XG4gIGlmIChuZ1NyYy5zdGFydHNXaXRoKCdkYXRhOicpKSB7XG4gICAgaWYgKG5nU3JjLmxlbmd0aCA+IEJBU0U2NF9JTUdfTUFYX0xFTkdUSF9JTl9FUlJPUikge1xuICAgICAgbmdTcmMgPSBuZ1NyYy5zdWJzdHJpbmcoMCwgQkFTRTY0X0lNR19NQVhfTEVOR1RIX0lOX0VSUk9SKSArICcuLi4nO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKFxuICAgICAgUnVudGltZUVycm9yQ29kZS5JTlZBTElEX0lOUFVULFxuICAgICAgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMsIGZhbHNlKX0gXFxgbmdTcmNcXGAgaXMgYSBCYXNlNjQtZW5jb2RlZCBzdHJpbmcgYCArXG4gICAgICAgIGAoJHtuZ1NyY30pLiBOZ09wdGltaXplZEltYWdlIGRvZXMgbm90IHN1cHBvcnQgQmFzZTY0LWVuY29kZWQgc3RyaW5ncy4gYCArXG4gICAgICAgIGBUbyBmaXggdGhpcywgZGlzYWJsZSB0aGUgTmdPcHRpbWl6ZWRJbWFnZSBkaXJlY3RpdmUgZm9yIHRoaXMgZWxlbWVudCBgICtcbiAgICAgICAgYGJ5IHJlbW92aW5nIFxcYG5nU3JjXFxgIGFuZCB1c2luZyBhIHN0YW5kYXJkIFxcYHNyY1xcYCBhdHRyaWJ1dGUgaW5zdGVhZC5gLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBWZXJpZmllcyB0aGF0IHRoZSAnc2l6ZXMnIG9ubHkgaW5jbHVkZXMgcmVzcG9uc2l2ZSB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vQ29tcGxleFNpemVzKGRpcjogTmdPcHRpbWl6ZWRJbWFnZSkge1xuICBsZXQgc2l6ZXMgPSBkaXIuc2l6ZXM7XG4gIGlmIChzaXplcz8ubWF0Y2goLygoXFwpfCwpXFxzfF4pXFxkK3B4LykpIHtcbiAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKFxuICAgICAgUnVudGltZUVycm9yQ29kZS5JTlZBTElEX0lOUFVULFxuICAgICAgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMsIGZhbHNlKX0gXFxgc2l6ZXNcXGAgd2FzIHNldCB0byBhIHN0cmluZyBpbmNsdWRpbmcgYCArXG4gICAgICAgIGBwaXhlbCB2YWx1ZXMuIEZvciBhdXRvbWF0aWMgXFxgc3Jjc2V0XFxgIGdlbmVyYXRpb24sIFxcYHNpemVzXFxgIG11c3Qgb25seSBpbmNsdWRlIHJlc3BvbnNpdmUgYCArXG4gICAgICAgIGB2YWx1ZXMsIHN1Y2ggYXMgXFxgc2l6ZXM9XCI1MHZ3XCJcXGAgb3IgXFxgc2l6ZXM9XCIobWluLXdpZHRoOiA3NjhweCkgNTB2dywgMTAwdndcIlxcYC4gYCArXG4gICAgICAgIGBUbyBmaXggdGhpcywgbW9kaWZ5IHRoZSBcXGBzaXplc1xcYCBhdHRyaWJ1dGUsIG9yIHByb3ZpZGUgeW91ciBvd24gXFxgbmdTcmNzZXRcXGAgdmFsdWUgZGlyZWN0bHkuYCxcbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFZhbGlkUGxhY2Vob2xkZXIoZGlyOiBOZ09wdGltaXplZEltYWdlLCBpbWFnZUxvYWRlcjogSW1hZ2VMb2FkZXIpIHtcbiAgYXNzZXJ0Tm9QbGFjZWhvbGRlckNvbmZpZ1dpdGhvdXRQbGFjZWhvbGRlcihkaXIpO1xuICBhc3NlcnROb1JlbGF0aXZlUGxhY2Vob2xkZXJXaXRob3V0TG9hZGVyKGRpciwgaW1hZ2VMb2FkZXIpO1xuICBhc3NlcnROb092ZXJzaXplZERhdGFVcmwoZGlyKTtcbn1cblxuLyoqXG4gKiBWZXJpZmllcyB0aGF0IHBsYWNlaG9sZGVyQ29uZmlnIGlzbid0IGJlaW5nIHVzZWQgd2l0aG91dCBwbGFjZWhvbGRlclxuICovXG5mdW5jdGlvbiBhc3NlcnROb1BsYWNlaG9sZGVyQ29uZmlnV2l0aG91dFBsYWNlaG9sZGVyKGRpcjogTmdPcHRpbWl6ZWRJbWFnZSkge1xuICBpZiAoZGlyLnBsYWNlaG9sZGVyQ29uZmlnICYmICFkaXIucGxhY2Vob2xkZXIpIHtcbiAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKFxuICAgICAgUnVudGltZUVycm9yQ29kZS5JTlZBTElEX0lOUFVULFxuICAgICAgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhcbiAgICAgICAgZGlyLm5nU3JjLFxuICAgICAgICBmYWxzZSxcbiAgICAgICl9IFxcYHBsYWNlaG9sZGVyQ29uZmlnXFxgIG9wdGlvbnMgd2VyZSBwcm92aWRlZCBmb3IgYW4gYCArXG4gICAgICAgIGBpbWFnZSB0aGF0IGRvZXMgbm90IHVzZSB0aGUgXFxgcGxhY2Vob2xkZXJcXGAgYXR0cmlidXRlLCBhbmQgd2lsbCBoYXZlIG5vIGVmZmVjdC5gLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBXYXJucyBpZiBhIHJlbGF0aXZlIFVSTCBwbGFjZWhvbGRlciBpcyBzcGVjaWZpZWQsIGJ1dCBubyBsb2FkZXIgaXMgcHJlc2VudCB0byBwcm92aWRlIHRoZSBzbWFsbFxuICogaW1hZ2UuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vUmVsYXRpdmVQbGFjZWhvbGRlcldpdGhvdXRMb2FkZXIoZGlyOiBOZ09wdGltaXplZEltYWdlLCBpbWFnZUxvYWRlcjogSW1hZ2VMb2FkZXIpIHtcbiAgaWYgKGRpci5wbGFjZWhvbGRlciA9PT0gdHJ1ZSAmJiBpbWFnZUxvYWRlciA9PT0gbm9vcEltYWdlTG9hZGVyKSB7XG4gICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihcbiAgICAgIFJ1bnRpbWVFcnJvckNvZGUuTUlTU0lOR19ORUNFU1NBUllfTE9BREVSLFxuICAgICAgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMpfSB0aGUgXFxgcGxhY2Vob2xkZXJcXGAgYXR0cmlidXRlIGlzIHNldCB0byB0cnVlIGJ1dCBgICtcbiAgICAgICAgYG5vIGltYWdlIGxvYWRlciBpcyBjb25maWd1cmVkIChpLmUuIHRoZSBkZWZhdWx0IG9uZSBpcyBiZWluZyB1c2VkKSwgYCArXG4gICAgICAgIGB3aGljaCB3b3VsZCByZXN1bHQgaW4gdGhlIHNhbWUgaW1hZ2UgYmVpbmcgdXNlZCBmb3IgdGhlIHByaW1hcnkgaW1hZ2UgYW5kIGl0cyBwbGFjZWhvbGRlci4gYCArXG4gICAgICAgIGBUbyBmaXggdGhpcywgcHJvdmlkZSBhIGxvYWRlciBvciByZW1vdmUgdGhlIFxcYHBsYWNlaG9sZGVyXFxgIGF0dHJpYnV0ZSBmcm9tIHRoZSBpbWFnZS5gLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBXYXJucyBvciB0aHJvd3MgYW4gZXJyb3IgaWYgYW4gb3ZlcnNpemVkIGRhdGFVUkwgcGxhY2Vob2xkZXIgaXMgcHJvdmlkZWQuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vT3ZlcnNpemVkRGF0YVVybChkaXI6IE5nT3B0aW1pemVkSW1hZ2UpIHtcbiAgaWYgKFxuICAgIGRpci5wbGFjZWhvbGRlciAmJlxuICAgIHR5cGVvZiBkaXIucGxhY2Vob2xkZXIgPT09ICdzdHJpbmcnICYmXG4gICAgZGlyLnBsYWNlaG9sZGVyLnN0YXJ0c1dpdGgoJ2RhdGE6JylcbiAgKSB7XG4gICAgaWYgKGRpci5wbGFjZWhvbGRlci5sZW5ndGggPiBEQVRBX1VSTF9FUlJPUl9MSU1JVCkge1xuICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihcbiAgICAgICAgUnVudGltZUVycm9yQ29kZS5PVkVSU0laRURfUExBQ0VIT0xERVIsXG4gICAgICAgIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoXG4gICAgICAgICAgZGlyLm5nU3JjLFxuICAgICAgICApfSB0aGUgXFxgcGxhY2Vob2xkZXJcXGAgYXR0cmlidXRlIGlzIHNldCB0byBhIGRhdGEgVVJMIHdoaWNoIGlzIGxvbmdlciBgICtcbiAgICAgICAgICBgdGhhbiAke0RBVEFfVVJMX0VSUk9SX0xJTUlUfSBjaGFyYWN0ZXJzLiBUaGlzIGlzIHN0cm9uZ2x5IGRpc2NvdXJhZ2VkLCBhcyBsYXJnZSBpbmxpbmUgcGxhY2Vob2xkZXJzIGAgK1xuICAgICAgICAgIGBkaXJlY3RseSBpbmNyZWFzZSB0aGUgYnVuZGxlIHNpemUgb2YgQW5ndWxhciBhbmQgaHVydCBwYWdlIGxvYWQgcGVyZm9ybWFuY2UuIFRvIGZpeCB0aGlzLCBnZW5lcmF0ZSBgICtcbiAgICAgICAgICBgYSBzbWFsbGVyIGRhdGEgVVJMIHBsYWNlaG9sZGVyLmAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoZGlyLnBsYWNlaG9sZGVyLmxlbmd0aCA+IERBVEFfVVJMX1dBUk5fTElNSVQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgZm9ybWF0UnVudGltZUVycm9yKFxuICAgICAgICAgIFJ1bnRpbWVFcnJvckNvZGUuT1ZFUlNJWkVEX1BMQUNFSE9MREVSLFxuICAgICAgICAgIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoXG4gICAgICAgICAgICBkaXIubmdTcmMsXG4gICAgICAgICAgKX0gdGhlIFxcYHBsYWNlaG9sZGVyXFxgIGF0dHJpYnV0ZSBpcyBzZXQgdG8gYSBkYXRhIFVSTCB3aGljaCBpcyBsb25nZXIgYCArXG4gICAgICAgICAgICBgdGhhbiAke0RBVEFfVVJMX1dBUk5fTElNSVR9IGNoYXJhY3RlcnMuIFRoaXMgaXMgZGlzY291cmFnZWQsIGFzIGxhcmdlIGlubGluZSBwbGFjZWhvbGRlcnMgYCArXG4gICAgICAgICAgICBgZGlyZWN0bHkgaW5jcmVhc2UgdGhlIGJ1bmRsZSBzaXplIG9mIEFuZ3VsYXIgYW5kIGh1cnQgcGFnZSBsb2FkIHBlcmZvcm1hbmNlLiBGb3IgYmV0dGVyIGxvYWRpbmcgcGVyZm9ybWFuY2UsIGAgK1xuICAgICAgICAgICAgYGdlbmVyYXRlIGEgc21hbGxlciBkYXRhIFVSTCBwbGFjZWhvbGRlci5gLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBWZXJpZmllcyB0aGF0IHRoZSBgbmdTcmNgIGlzIG5vdCBhIEJsb2IgVVJMLlxuICovXG5mdW5jdGlvbiBhc3NlcnROb3RCbG9iVXJsKGRpcjogTmdPcHRpbWl6ZWRJbWFnZSkge1xuICBjb25zdCBuZ1NyYyA9IGRpci5uZ1NyYy50cmltKCk7XG4gIGlmIChuZ1NyYy5zdGFydHNXaXRoKCdibG9iOicpKSB7XG4gICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihcbiAgICAgIFJ1bnRpbWVFcnJvckNvZGUuSU5WQUxJRF9JTlBVVCxcbiAgICAgIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoZGlyLm5nU3JjKX0gXFxgbmdTcmNcXGAgd2FzIHNldCB0byBhIGJsb2IgVVJMICgke25nU3JjfSkuIGAgK1xuICAgICAgICBgQmxvYiBVUkxzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBOZ09wdGltaXplZEltYWdlIGRpcmVjdGl2ZS4gYCArXG4gICAgICAgIGBUbyBmaXggdGhpcywgZGlzYWJsZSB0aGUgTmdPcHRpbWl6ZWRJbWFnZSBkaXJlY3RpdmUgZm9yIHRoaXMgZWxlbWVudCBgICtcbiAgICAgICAgYGJ5IHJlbW92aW5nIFxcYG5nU3JjXFxgIGFuZCB1c2luZyBhIHJlZ3VsYXIgXFxgc3JjXFxgIGF0dHJpYnV0ZSBpbnN0ZWFkLmAsXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIFZlcmlmaWVzIHRoYXQgdGhlIGlucHV0IGlzIHNldCB0byBhIG5vbi1lbXB0eSBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vbkVtcHR5SW5wdXQoZGlyOiBOZ09wdGltaXplZEltYWdlLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSB7XG4gIGNvbnN0IGlzU3RyaW5nID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJztcbiAgY29uc3QgaXNFbXB0eVN0cmluZyA9IGlzU3RyaW5nICYmIHZhbHVlLnRyaW0oKSA9PT0gJyc7XG4gIGlmICghaXNTdHJpbmcgfHwgaXNFbXB0eVN0cmluZykge1xuICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoXG4gICAgICBSdW50aW1lRXJyb3JDb2RlLklOVkFMSURfSU5QVVQsXG4gICAgICBgJHtpbWdEaXJlY3RpdmVEZXRhaWxzKGRpci5uZ1NyYyl9IFxcYCR7bmFtZX1cXGAgaGFzIGFuIGludmFsaWQgdmFsdWUgYCArXG4gICAgICAgIGAoXFxgJHt2YWx1ZX1cXGApLiBUbyBmaXggdGhpcywgY2hhbmdlIHRoZSB2YWx1ZSB0byBhIG5vbi1lbXB0eSBzdHJpbmcuYCxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogVmVyaWZpZXMgdGhhdCB0aGUgYG5nU3Jjc2V0YCBpcyBpbiBhIHZhbGlkIGZvcm1hdCwgZS5nLiBcIjEwMHcsIDIwMHdcIiBvciBcIjF4LCAyeFwiLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0VmFsaWROZ1NyY3NldChkaXI6IE5nT3B0aW1pemVkSW1hZ2UsIHZhbHVlOiB1bmtub3duKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm47XG4gIGFzc2VydE5vbkVtcHR5SW5wdXQoZGlyLCAnbmdTcmNzZXQnLCB2YWx1ZSk7XG4gIGNvbnN0IHN0cmluZ1ZhbCA9IHZhbHVlIGFzIHN0cmluZztcbiAgY29uc3QgaXNWYWxpZFdpZHRoRGVzY3JpcHRvciA9IFZBTElEX1dJRFRIX0RFU0NSSVBUT1JfU1JDU0VULnRlc3Qoc3RyaW5nVmFsKTtcbiAgY29uc3QgaXNWYWxpZERlbnNpdHlEZXNjcmlwdG9yID0gVkFMSURfREVOU0lUWV9ERVNDUklQVE9SX1NSQ1NFVC50ZXN0KHN0cmluZ1ZhbCk7XG5cbiAgaWYgKGlzVmFsaWREZW5zaXR5RGVzY3JpcHRvcikge1xuICAgIGFzc2VydFVuZGVyRGVuc2l0eUNhcChkaXIsIHN0cmluZ1ZhbCk7XG4gIH1cblxuICBjb25zdCBpc1ZhbGlkU3Jjc2V0ID0gaXNWYWxpZFdpZHRoRGVzY3JpcHRvciB8fCBpc1ZhbGlkRGVuc2l0eURlc2NyaXB0b3I7XG4gIGlmICghaXNWYWxpZFNyY3NldCkge1xuICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoXG4gICAgICBSdW50aW1lRXJyb3JDb2RlLklOVkFMSURfSU5QVVQsXG4gICAgICBgJHtpbWdEaXJlY3RpdmVEZXRhaWxzKGRpci5uZ1NyYyl9IFxcYG5nU3Jjc2V0XFxgIGhhcyBhbiBpbnZhbGlkIHZhbHVlIChcXGAke3ZhbHVlfVxcYCkuIGAgK1xuICAgICAgICBgVG8gZml4IHRoaXMsIHN1cHBseSBcXGBuZ1NyY3NldFxcYCB1c2luZyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIG9uZSBvciBtb3JlIHdpZHRoIGAgK1xuICAgICAgICBgZGVzY3JpcHRvcnMgKGUuZy4gXCIxMDB3LCAyMDB3XCIpIG9yIGRlbnNpdHkgZGVzY3JpcHRvcnMgKGUuZy4gXCIxeCwgMnhcIikuYCxcbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFVuZGVyRGVuc2l0eUNhcChkaXI6IE5nT3B0aW1pemVkSW1hZ2UsIHZhbHVlOiBzdHJpbmcpIHtcbiAgY29uc3QgdW5kZXJEZW5zaXR5Q2FwID0gdmFsdWVcbiAgICAuc3BsaXQoJywnKVxuICAgIC5ldmVyeSgobnVtKSA9PiBudW0gPT09ICcnIHx8IHBhcnNlRmxvYXQobnVtKSA8PSBBQlNPTFVURV9TUkNTRVRfREVOU0lUWV9DQVApO1xuICBpZiAoIXVuZGVyRGVuc2l0eUNhcCkge1xuICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoXG4gICAgICBSdW50aW1lRXJyb3JDb2RlLklOVkFMSURfSU5QVVQsXG4gICAgICBgJHtpbWdEaXJlY3RpdmVEZXRhaWxzKGRpci5uZ1NyYyl9IHRoZSBcXGBuZ1NyY3NldFxcYCBjb250YWlucyBhbiB1bnN1cHBvcnRlZCBpbWFnZSBkZW5zaXR5OmAgK1xuICAgICAgICBgXFxgJHt2YWx1ZX1cXGAuIE5nT3B0aW1pemVkSW1hZ2UgZ2VuZXJhbGx5IHJlY29tbWVuZHMgYSBtYXggaW1hZ2UgZGVuc2l0eSBvZiBgICtcbiAgICAgICAgYCR7UkVDT01NRU5ERURfU1JDU0VUX0RFTlNJVFlfQ0FQfXggYnV0IHN1cHBvcnRzIGltYWdlIGRlbnNpdGllcyB1cCB0byBgICtcbiAgICAgICAgYCR7QUJTT0xVVEVfU1JDU0VUX0RFTlNJVFlfQ0FQfXguIFRoZSBodW1hbiBleWUgY2Fubm90IGRpc3Rpbmd1aXNoIGJldHdlZW4gaW1hZ2UgZGVuc2l0aWVzIGAgK1xuICAgICAgICBgZ3JlYXRlciB0aGFuICR7UkVDT01NRU5ERURfU1JDU0VUX0RFTlNJVFlfQ0FQfXggLSB3aGljaCBtYWtlcyB0aGVtIHVubmVjZXNzYXJ5IGZvciBgICtcbiAgICAgICAgYG1vc3QgdXNlIGNhc2VzLiBJbWFnZXMgdGhhdCB3aWxsIGJlIHBpbmNoLXpvb21lZCBhcmUgdHlwaWNhbGx5IHRoZSBwcmltYXJ5IHVzZSBjYXNlIGZvciBgICtcbiAgICAgICAgYCR7QUJTT0xVVEVfU1JDU0VUX0RFTlNJVFlfQ0FQfXggaW1hZ2VzLiBQbGVhc2UgcmVtb3ZlIHRoZSBoaWdoIGRlbnNpdHkgZGVzY3JpcHRvciBhbmQgdHJ5IGFnYWluLmAsXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBgUnVudGltZUVycm9yYCBpbnN0YW5jZSB0byByZXByZXNlbnQgYSBzaXR1YXRpb24gd2hlbiBhbiBpbnB1dCBpcyBzZXQgYWZ0ZXJcbiAqIHRoZSBkaXJlY3RpdmUgaGFzIGluaXRpYWxpemVkLlxuICovXG5mdW5jdGlvbiBwb3N0SW5pdElucHV0Q2hhbmdlRXJyb3IoZGlyOiBOZ09wdGltaXplZEltYWdlLCBpbnB1dE5hbWU6IHN0cmluZyk6IHt9IHtcbiAgbGV0IHJlYXNvbiE6IHN0cmluZztcbiAgaWYgKGlucHV0TmFtZSA9PT0gJ3dpZHRoJyB8fCBpbnB1dE5hbWUgPT09ICdoZWlnaHQnKSB7XG4gICAgcmVhc29uID1cbiAgICAgIGBDaGFuZ2luZyBcXGAke2lucHV0TmFtZX1cXGAgbWF5IHJlc3VsdCBpbiBkaWZmZXJlbnQgYXR0cmlidXRlIHZhbHVlIGAgK1xuICAgICAgYGFwcGxpZWQgdG8gdGhlIHVuZGVybHlpbmcgaW1hZ2UgZWxlbWVudCBhbmQgY2F1c2UgbGF5b3V0IHNoaWZ0cyBvbiBhIHBhZ2UuYDtcbiAgfSBlbHNlIHtcbiAgICByZWFzb24gPVxuICAgICAgYENoYW5naW5nIHRoZSBcXGAke2lucHV0TmFtZX1cXGAgd291bGQgaGF2ZSBubyBlZmZlY3Qgb24gdGhlIHVuZGVybHlpbmcgYCArXG4gICAgICBgaW1hZ2UgZWxlbWVudCwgYmVjYXVzZSB0aGUgcmVzb3VyY2UgbG9hZGluZyBoYXMgYWxyZWFkeSBvY2N1cnJlZC5gO1xuICB9XG4gIHJldHVybiBuZXcgUnVudGltZUVycm9yKFxuICAgIFJ1bnRpbWVFcnJvckNvZGUuVU5FWFBFQ1RFRF9JTlBVVF9DSEFOR0UsXG4gICAgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMpfSBcXGAke2lucHV0TmFtZX1cXGAgd2FzIHVwZGF0ZWQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uIGAgK1xuICAgICAgYFRoZSBOZ09wdGltaXplZEltYWdlIGRpcmVjdGl2ZSB3aWxsIG5vdCByZWFjdCB0byB0aGlzIGlucHV0IGNoYW5nZS4gJHtyZWFzb259IGAgK1xuICAgICAgYFRvIGZpeCB0aGlzLCBlaXRoZXIgc3dpdGNoIFxcYCR7aW5wdXROYW1lfVxcYCB0byBhIHN0YXRpYyB2YWx1ZSBgICtcbiAgICAgIGBvciB3cmFwIHRoZSBpbWFnZSBlbGVtZW50IGluIGFuICpuZ0lmIHRoYXQgaXMgZ2F0ZWQgb24gdGhlIG5lY2Vzc2FyeSB2YWx1ZS5gLFxuICApO1xufVxuXG4vKipcbiAqIFZlcmlmeSB0aGF0IG5vbmUgb2YgdGhlIGxpc3RlZCBpbnB1dHMgaGFzIGNoYW5nZWQuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vUG9zdEluaXRJbnB1dENoYW5nZShcbiAgZGlyOiBOZ09wdGltaXplZEltYWdlLFxuICBjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzLFxuICBpbnB1dHM6IHN0cmluZ1tdLFxuKSB7XG4gIGlucHV0cy5mb3JFYWNoKChpbnB1dCkgPT4ge1xuICAgIGNvbnN0IGlzVXBkYXRlZCA9IGNoYW5nZXMuaGFzT3duUHJvcGVydHkoaW5wdXQpO1xuICAgIGlmIChpc1VwZGF0ZWQgJiYgIWNoYW5nZXNbaW5wdXRdLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgaWYgKGlucHV0ID09PSAnbmdTcmMnKSB7XG4gICAgICAgIC8vIFdoZW4gdGhlIGBuZ1NyY2AgaW5wdXQgY2hhbmdlcywgd2UgZGV0ZWN0IHRoYXQgb25seSBpbiB0aGVcbiAgICAgICAgLy8gYG5nT25DaGFuZ2VzYCBob29rLCB0aHVzIHRoZSBgbmdTcmNgIGlzIGFscmVhZHkgc2V0LiBXZSB1c2VcbiAgICAgICAgLy8gYG5nU3JjYCBpbiB0aGUgZXJyb3IgbWVzc2FnZSwgc28gd2UgdXNlIGEgcHJldmlvdXMgdmFsdWUsIGJ1dFxuICAgICAgICAvLyBub3QgdGhlIHVwZGF0ZWQgb25lIGluIGl0LlxuICAgICAgICBkaXIgPSB7bmdTcmM6IGNoYW5nZXNbaW5wdXRdLnByZXZpb3VzVmFsdWV9IGFzIE5nT3B0aW1pemVkSW1hZ2U7XG4gICAgICB9XG4gICAgICB0aHJvdyBwb3N0SW5pdElucHV0Q2hhbmdlRXJyb3IoZGlyLCBpbnB1dCk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBWZXJpZmllcyB0aGF0IGEgc3BlY2lmaWVkIGlucHV0IGlzIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiAwLlxuICovXG5mdW5jdGlvbiBhc3NlcnRHcmVhdGVyVGhhblplcm8oZGlyOiBOZ09wdGltaXplZEltYWdlLCBpbnB1dFZhbHVlOiB1bmtub3duLCBpbnB1dE5hbWU6IHN0cmluZykge1xuICBjb25zdCB2YWxpZE51bWJlciA9IHR5cGVvZiBpbnB1dFZhbHVlID09PSAnbnVtYmVyJyAmJiBpbnB1dFZhbHVlID4gMDtcbiAgY29uc3QgdmFsaWRTdHJpbmcgPVxuICAgIHR5cGVvZiBpbnB1dFZhbHVlID09PSAnc3RyaW5nJyAmJiAvXlxcZCskLy50ZXN0KGlucHV0VmFsdWUudHJpbSgpKSAmJiBwYXJzZUludChpbnB1dFZhbHVlKSA+IDA7XG4gIGlmICghdmFsaWROdW1iZXIgJiYgIXZhbGlkU3RyaW5nKSB7XG4gICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihcbiAgICAgIFJ1bnRpbWVFcnJvckNvZGUuSU5WQUxJRF9JTlBVVCxcbiAgICAgIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoZGlyLm5nU3JjKX0gXFxgJHtpbnB1dE5hbWV9XFxgIGhhcyBhbiBpbnZhbGlkIHZhbHVlLiBgICtcbiAgICAgICAgYFRvIGZpeCB0aGlzLCBwcm92aWRlIFxcYCR7aW5wdXROYW1lfVxcYCBhcyBhIG51bWJlciBncmVhdGVyIHRoYW4gMC5gLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBWZXJpZmllcyB0aGF0IHRoZSByZW5kZXJlZCBpbWFnZSBpcyBub3QgdmlzdWFsbHkgZGlzdG9ydGVkLiBFZmZlY3RpdmVseSB0aGlzIGlzIGNoZWNraW5nOlxuICogLSBXaGV0aGVyIHRoZSBcIndpZHRoXCIgYW5kIFwiaGVpZ2h0XCIgYXR0cmlidXRlcyByZWZsZWN0IHRoZSBhY3R1YWwgZGltZW5zaW9ucyBvZiB0aGUgaW1hZ2UuXG4gKiAtIFdoZXRoZXIgaW1hZ2Ugc3R5bGluZyBpcyBcImNvcnJlY3RcIiAoc2VlIGJlbG93IGZvciBhIGxvbmdlciBleHBsYW5hdGlvbikuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vSW1hZ2VEaXN0b3J0aW9uKFxuICBkaXI6IE5nT3B0aW1pemVkSW1hZ2UsXG4gIGltZzogSFRNTEltYWdlRWxlbWVudCxcbiAgcmVuZGVyZXI6IFJlbmRlcmVyMixcbikge1xuICBjb25zdCByZW1vdmVMb2FkTGlzdGVuZXJGbiA9IHJlbmRlcmVyLmxpc3RlbihpbWcsICdsb2FkJywgKCkgPT4ge1xuICAgIHJlbW92ZUxvYWRMaXN0ZW5lckZuKCk7XG4gICAgcmVtb3ZlRXJyb3JMaXN0ZW5lckZuKCk7XG4gICAgY29uc3QgY29tcHV0ZWRTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGltZyk7XG4gICAgbGV0IHJlbmRlcmVkV2lkdGggPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnd2lkdGgnKSk7XG4gICAgbGV0IHJlbmRlcmVkSGVpZ2h0ID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2hlaWdodCcpKTtcbiAgICBjb25zdCBib3hTaXppbmcgPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2JveC1zaXppbmcnKTtcblxuICAgIGlmIChib3hTaXppbmcgPT09ICdib3JkZXItYm94Jykge1xuICAgICAgY29uc3QgcGFkZGluZ1RvcCA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy10b3AnKTtcbiAgICAgIGNvbnN0IHBhZGRpbmdSaWdodCA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy1yaWdodCcpO1xuICAgICAgY29uc3QgcGFkZGluZ0JvdHRvbSA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy1ib3R0b20nKTtcbiAgICAgIGNvbnN0IHBhZGRpbmdMZWZ0ID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdwYWRkaW5nLWxlZnQnKTtcbiAgICAgIHJlbmRlcmVkV2lkdGggLT0gcGFyc2VGbG9hdChwYWRkaW5nUmlnaHQpICsgcGFyc2VGbG9hdChwYWRkaW5nTGVmdCk7XG4gICAgICByZW5kZXJlZEhlaWdodCAtPSBwYXJzZUZsb2F0KHBhZGRpbmdUb3ApICsgcGFyc2VGbG9hdChwYWRkaW5nQm90dG9tKTtcbiAgICB9XG5cbiAgICBjb25zdCByZW5kZXJlZEFzcGVjdFJhdGlvID0gcmVuZGVyZWRXaWR0aCAvIHJlbmRlcmVkSGVpZ2h0O1xuICAgIGNvbnN0IG5vblplcm9SZW5kZXJlZERpbWVuc2lvbnMgPSByZW5kZXJlZFdpZHRoICE9PSAwICYmIHJlbmRlcmVkSGVpZ2h0ICE9PSAwO1xuXG4gICAgY29uc3QgaW50cmluc2ljV2lkdGggPSBpbWcubmF0dXJhbFdpZHRoO1xuICAgIGNvbnN0IGludHJpbnNpY0hlaWdodCA9IGltZy5uYXR1cmFsSGVpZ2h0O1xuICAgIGNvbnN0IGludHJpbnNpY0FzcGVjdFJhdGlvID0gaW50cmluc2ljV2lkdGggLyBpbnRyaW5zaWNIZWlnaHQ7XG5cbiAgICBjb25zdCBzdXBwbGllZFdpZHRoID0gZGlyLndpZHRoITtcbiAgICBjb25zdCBzdXBwbGllZEhlaWdodCA9IGRpci5oZWlnaHQhO1xuICAgIGNvbnN0IHN1cHBsaWVkQXNwZWN0UmF0aW8gPSBzdXBwbGllZFdpZHRoIC8gc3VwcGxpZWRIZWlnaHQ7XG5cbiAgICAvLyBUb2xlcmFuY2UgaXMgdXNlZCB0byBhY2NvdW50IGZvciB0aGUgaW1wYWN0IG9mIHN1YnBpeGVsIHJlbmRlcmluZy5cbiAgICAvLyBEdWUgdG8gc3VicGl4ZWwgcmVuZGVyaW5nLCB0aGUgcmVuZGVyZWQsIGludHJpbnNpYywgYW5kIHN1cHBsaWVkXG4gICAgLy8gYXNwZWN0IHJhdGlvcyBvZiBhIGNvcnJlY3RseSBjb25maWd1cmVkIGltYWdlIG1heSBub3QgZXhhY3RseSBtYXRjaC5cbiAgICAvLyBGb3IgZXhhbXBsZSwgYSBgd2lkdGg9NDAzMCBoZWlnaHQ9MzAyMGAgaW1hZ2UgbWlnaHQgaGF2ZSBhIHJlbmRlcmVkXG4gICAgLy8gc2l6ZSBvZiBcIjEwNjJ3LCA3OTYuNDhoXCIuIChBbiBhc3BlY3QgcmF0aW8gb2YgMS4zMzQuLi4gdnMuIDEuMzMzLi4uKVxuICAgIGNvbnN0IGluYWNjdXJhdGVEaW1lbnNpb25zID1cbiAgICAgIE1hdGguYWJzKHN1cHBsaWVkQXNwZWN0UmF0aW8gLSBpbnRyaW5zaWNBc3BlY3RSYXRpbykgPiBBU1BFQ1RfUkFUSU9fVE9MRVJBTkNFO1xuICAgIGNvbnN0IHN0eWxpbmdEaXN0b3J0aW9uID1cbiAgICAgIG5vblplcm9SZW5kZXJlZERpbWVuc2lvbnMgJiZcbiAgICAgIE1hdGguYWJzKGludHJpbnNpY0FzcGVjdFJhdGlvIC0gcmVuZGVyZWRBc3BlY3RSYXRpbykgPiBBU1BFQ1RfUkFUSU9fVE9MRVJBTkNFO1xuXG4gICAgaWYgKGluYWNjdXJhdGVEaW1lbnNpb25zKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGZvcm1hdFJ1bnRpbWVFcnJvcihcbiAgICAgICAgICBSdW50aW1lRXJyb3JDb2RlLklOVkFMSURfSU5QVVQsXG4gICAgICAgICAgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMpfSB0aGUgYXNwZWN0IHJhdGlvIG9mIHRoZSBpbWFnZSBkb2VzIG5vdCBtYXRjaCBgICtcbiAgICAgICAgICAgIGB0aGUgYXNwZWN0IHJhdGlvIGluZGljYXRlZCBieSB0aGUgd2lkdGggYW5kIGhlaWdodCBhdHRyaWJ1dGVzLiBgICtcbiAgICAgICAgICAgIGBcXG5JbnRyaW5zaWMgaW1hZ2Ugc2l6ZTogJHtpbnRyaW5zaWNXaWR0aH13IHggJHtpbnRyaW5zaWNIZWlnaHR9aCBgICtcbiAgICAgICAgICAgIGAoYXNwZWN0LXJhdGlvOiAke3JvdW5kKFxuICAgICAgICAgICAgICBpbnRyaW5zaWNBc3BlY3RSYXRpbyxcbiAgICAgICAgICAgICl9KS4gXFxuU3VwcGxpZWQgd2lkdGggYW5kIGhlaWdodCBhdHRyaWJ1dGVzOiBgICtcbiAgICAgICAgICAgIGAke3N1cHBsaWVkV2lkdGh9dyB4ICR7c3VwcGxpZWRIZWlnaHR9aCAoYXNwZWN0LXJhdGlvOiAke3JvdW5kKFxuICAgICAgICAgICAgICBzdXBwbGllZEFzcGVjdFJhdGlvLFxuICAgICAgICAgICAgKX0pLiBgICtcbiAgICAgICAgICAgIGBcXG5UbyBmaXggdGhpcywgdXBkYXRlIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGF0dHJpYnV0ZXMuYCxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChzdHlsaW5nRGlzdG9ydGlvbikge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBmb3JtYXRSdW50aW1lRXJyb3IoXG4gICAgICAgICAgUnVudGltZUVycm9yQ29kZS5JTlZBTElEX0lOUFVULFxuICAgICAgICAgIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoZGlyLm5nU3JjKX0gdGhlIGFzcGVjdCByYXRpbyBvZiB0aGUgcmVuZGVyZWQgaW1hZ2UgYCArXG4gICAgICAgICAgICBgZG9lcyBub3QgbWF0Y2ggdGhlIGltYWdlJ3MgaW50cmluc2ljIGFzcGVjdCByYXRpby4gYCArXG4gICAgICAgICAgICBgXFxuSW50cmluc2ljIGltYWdlIHNpemU6ICR7aW50cmluc2ljV2lkdGh9dyB4ICR7aW50cmluc2ljSGVpZ2h0fWggYCArXG4gICAgICAgICAgICBgKGFzcGVjdC1yYXRpbzogJHtyb3VuZChpbnRyaW5zaWNBc3BlY3RSYXRpbyl9KS4gXFxuUmVuZGVyZWQgaW1hZ2Ugc2l6ZTogYCArXG4gICAgICAgICAgICBgJHtyZW5kZXJlZFdpZHRofXcgeCAke3JlbmRlcmVkSGVpZ2h0fWggKGFzcGVjdC1yYXRpbzogYCArXG4gICAgICAgICAgICBgJHtyb3VuZChyZW5kZXJlZEFzcGVjdFJhdGlvKX0pLiBcXG5UaGlzIGlzc3VlIGNhbiBvY2N1ciBpZiBcIndpZHRoXCIgYW5kIFwiaGVpZ2h0XCIgYCArXG4gICAgICAgICAgICBgYXR0cmlidXRlcyBhcmUgYWRkZWQgdG8gYW4gaW1hZ2Ugd2l0aG91dCB1cGRhdGluZyB0aGUgY29ycmVzcG9uZGluZyBgICtcbiAgICAgICAgICAgIGBpbWFnZSBzdHlsaW5nLiBUbyBmaXggdGhpcywgYWRqdXN0IGltYWdlIHN0eWxpbmcuIEluIG1vc3QgY2FzZXMsIGAgK1xuICAgICAgICAgICAgYGFkZGluZyBcImhlaWdodDogYXV0b1wiIG9yIFwid2lkdGg6IGF1dG9cIiB0byB0aGUgaW1hZ2Ugc3R5bGluZyB3aWxsIGZpeCBgICtcbiAgICAgICAgICAgIGB0aGlzIGlzc3VlLmAsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoIWRpci5uZ1NyY3NldCAmJiBub25aZXJvUmVuZGVyZWREaW1lbnNpb25zKSB7XG4gICAgICAvLyBJZiBgbmdTcmNzZXRgIGhhc24ndCBiZWVuIHNldCwgc2FuaXR5IGNoZWNrIHRoZSBpbnRyaW5zaWMgc2l6ZS5cbiAgICAgIGNvbnN0IHJlY29tbWVuZGVkV2lkdGggPSBSRUNPTU1FTkRFRF9TUkNTRVRfREVOU0lUWV9DQVAgKiByZW5kZXJlZFdpZHRoO1xuICAgICAgY29uc3QgcmVjb21tZW5kZWRIZWlnaHQgPSBSRUNPTU1FTkRFRF9TUkNTRVRfREVOU0lUWV9DQVAgKiByZW5kZXJlZEhlaWdodDtcbiAgICAgIGNvbnN0IG92ZXJzaXplZFdpZHRoID0gaW50cmluc2ljV2lkdGggLSByZWNvbW1lbmRlZFdpZHRoID49IE9WRVJTSVpFRF9JTUFHRV9UT0xFUkFOQ0U7XG4gICAgICBjb25zdCBvdmVyc2l6ZWRIZWlnaHQgPSBpbnRyaW5zaWNIZWlnaHQgLSByZWNvbW1lbmRlZEhlaWdodCA+PSBPVkVSU0laRURfSU1BR0VfVE9MRVJBTkNFO1xuICAgICAgaWYgKG92ZXJzaXplZFdpZHRoIHx8IG92ZXJzaXplZEhlaWdodCkge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgZm9ybWF0UnVudGltZUVycm9yKFxuICAgICAgICAgICAgUnVudGltZUVycm9yQ29kZS5PVkVSU0laRURfSU1BR0UsXG4gICAgICAgICAgICBgJHtpbWdEaXJlY3RpdmVEZXRhaWxzKGRpci5uZ1NyYyl9IHRoZSBpbnRyaW5zaWMgaW1hZ2UgaXMgc2lnbmlmaWNhbnRseSBgICtcbiAgICAgICAgICAgICAgYGxhcmdlciB0aGFuIG5lY2Vzc2FyeS4gYCArXG4gICAgICAgICAgICAgIGBcXG5SZW5kZXJlZCBpbWFnZSBzaXplOiAke3JlbmRlcmVkV2lkdGh9dyB4ICR7cmVuZGVyZWRIZWlnaHR9aC4gYCArXG4gICAgICAgICAgICAgIGBcXG5JbnRyaW5zaWMgaW1hZ2Ugc2l6ZTogJHtpbnRyaW5zaWNXaWR0aH13IHggJHtpbnRyaW5zaWNIZWlnaHR9aC4gYCArXG4gICAgICAgICAgICAgIGBcXG5SZWNvbW1lbmRlZCBpbnRyaW5zaWMgaW1hZ2Ugc2l6ZTogJHtyZWNvbW1lbmRlZFdpZHRofXcgeCAke3JlY29tbWVuZGVkSGVpZ2h0fWguIGAgK1xuICAgICAgICAgICAgICBgXFxuTm90ZTogUmVjb21tZW5kZWQgaW50cmluc2ljIGltYWdlIHNpemUgaXMgY2FsY3VsYXRlZCBhc3N1bWluZyBhIG1heGltdW0gRFBSIG9mIGAgK1xuICAgICAgICAgICAgICBgJHtSRUNPTU1FTkRFRF9TUkNTRVRfREVOU0lUWV9DQVB9LiBUbyBpbXByb3ZlIGxvYWRpbmcgdGltZSwgcmVzaXplIHRoZSBpbWFnZSBgICtcbiAgICAgICAgICAgICAgYG9yIGNvbnNpZGVyIHVzaW5nIHRoZSBcIm5nU3Jjc2V0XCIgYW5kIFwic2l6ZXNcIiBhdHRyaWJ1dGVzLmAsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIC8vIFdlIG9ubHkgbGlzdGVuIHRvIHRoZSBgZXJyb3JgIGV2ZW50IHRvIHJlbW92ZSB0aGUgYGxvYWRgIGV2ZW50IGxpc3RlbmVyIGJlY2F1c2UgaXQgd2lsbCBub3QgYmVcbiAgLy8gZmlyZWQgaWYgdGhlIGltYWdlIGZhaWxzIHRvIGxvYWQuIFRoaXMgaXMgZG9uZSB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcyBpbiBkZXZlbG9wbWVudCBtb2RlXG4gIC8vIGJlY2F1c2UgaW1hZ2UgZWxlbWVudHMgYXJlbid0IGdhcmJhZ2UtY29sbGVjdGVkIHByb3Blcmx5LiBJdCBoYXBwZW5zIGJlY2F1c2Ugem9uZS5qcyBzdG9yZXMgdGhlXG4gIC8vIGV2ZW50IGxpc3RlbmVyIGRpcmVjdGx5IG9uIHRoZSBlbGVtZW50IGFuZCBjbG9zdXJlcyBjYXB0dXJlIGBkaXJgLlxuICBjb25zdCByZW1vdmVFcnJvckxpc3RlbmVyRm4gPSByZW5kZXJlci5saXN0ZW4oaW1nLCAnZXJyb3InLCAoKSA9PiB7XG4gICAgcmVtb3ZlTG9hZExpc3RlbmVyRm4oKTtcbiAgICByZW1vdmVFcnJvckxpc3RlbmVyRm4oKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVmVyaWZpZXMgdGhhdCBhIHNwZWNpZmllZCBpbnB1dCBpcyBzZXQuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vbkVtcHR5V2lkdGhBbmRIZWlnaHQoZGlyOiBOZ09wdGltaXplZEltYWdlKSB7XG4gIGxldCBtaXNzaW5nQXR0cmlidXRlcyA9IFtdO1xuICBpZiAoZGlyLndpZHRoID09PSB1bmRlZmluZWQpIG1pc3NpbmdBdHRyaWJ1dGVzLnB1c2goJ3dpZHRoJyk7XG4gIGlmIChkaXIuaGVpZ2h0ID09PSB1bmRlZmluZWQpIG1pc3NpbmdBdHRyaWJ1dGVzLnB1c2goJ2hlaWdodCcpO1xuICBpZiAobWlzc2luZ0F0dHJpYnV0ZXMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoXG4gICAgICBSdW50aW1lRXJyb3JDb2RlLlJFUVVJUkVEX0lOUFVUX01JU1NJTkcsXG4gICAgICBgJHtpbWdEaXJlY3RpdmVEZXRhaWxzKGRpci5uZ1NyYyl9IHRoZXNlIHJlcXVpcmVkIGF0dHJpYnV0ZXMgYCArXG4gICAgICAgIGBhcmUgbWlzc2luZzogJHttaXNzaW5nQXR0cmlidXRlcy5tYXAoKGF0dHIpID0+IGBcIiR7YXR0cn1cImApLmpvaW4oJywgJyl9LiBgICtcbiAgICAgICAgYEluY2x1ZGluZyBcIndpZHRoXCIgYW5kIFwiaGVpZ2h0XCIgYXR0cmlidXRlcyB3aWxsIHByZXZlbnQgaW1hZ2UtcmVsYXRlZCBsYXlvdXQgc2hpZnRzLiBgICtcbiAgICAgICAgYFRvIGZpeCB0aGlzLCBpbmNsdWRlIFwid2lkdGhcIiBhbmQgXCJoZWlnaHRcIiBhdHRyaWJ1dGVzIG9uIHRoZSBpbWFnZSB0YWcgb3IgdHVybiBvbiBgICtcbiAgICAgICAgYFwiZmlsbFwiIG1vZGUgd2l0aCB0aGUgXFxgZmlsbFxcYCBhdHRyaWJ1dGUuYCxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogVmVyaWZpZXMgdGhhdCB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBub3Qgc2V0LiBVc2VkIGluIGZpbGwgbW9kZSwgd2hlcmUgdGhvc2UgYXR0cmlidXRlcyBkb24ndCBtYWtlXG4gKiBzZW5zZS5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0RW1wdHlXaWR0aEFuZEhlaWdodChkaXI6IE5nT3B0aW1pemVkSW1hZ2UpIHtcbiAgaWYgKGRpci53aWR0aCB8fCBkaXIuaGVpZ2h0KSB7XG4gICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihcbiAgICAgIFJ1bnRpbWVFcnJvckNvZGUuSU5WQUxJRF9JTlBVVCxcbiAgICAgIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoZGlyLm5nU3JjKX0gdGhlIGF0dHJpYnV0ZXMgXFxgaGVpZ2h0XFxgIGFuZC9vciBcXGB3aWR0aFxcYCBhcmUgcHJlc2VudCBgICtcbiAgICAgICAgYGFsb25nIHdpdGggdGhlIFxcYGZpbGxcXGAgYXR0cmlidXRlLiBCZWNhdXNlIFxcYGZpbGxcXGAgbW9kZSBjYXVzZXMgYW4gaW1hZ2UgdG8gZmlsbCBpdHMgY29udGFpbmluZyBgICtcbiAgICAgICAgYGVsZW1lbnQsIHRoZSBzaXplIGF0dHJpYnV0ZXMgaGF2ZSBubyBlZmZlY3QgYW5kIHNob3VsZCBiZSByZW1vdmVkLmAsXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIFZlcmlmaWVzIHRoYXQgdGhlIHJlbmRlcmVkIGltYWdlIGhhcyBhIG5vbnplcm8gaGVpZ2h0LiBJZiB0aGUgaW1hZ2UgaXMgaW4gZmlsbCBtb2RlLCBwcm92aWRlc1xuICogZ3VpZGFuY2UgdGhhdCB0aGlzIGNhbiBiZSBjYXVzZWQgYnkgdGhlIGNvbnRhaW5pbmcgZWxlbWVudCdzIENTUyBwb3NpdGlvbiBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0Tm9uWmVyb1JlbmRlcmVkSGVpZ2h0KFxuICBkaXI6IE5nT3B0aW1pemVkSW1hZ2UsXG4gIGltZzogSFRNTEltYWdlRWxlbWVudCxcbiAgcmVuZGVyZXI6IFJlbmRlcmVyMixcbikge1xuICBjb25zdCByZW1vdmVMb2FkTGlzdGVuZXJGbiA9IHJlbmRlcmVyLmxpc3RlbihpbWcsICdsb2FkJywgKCkgPT4ge1xuICAgIHJlbW92ZUxvYWRMaXN0ZW5lckZuKCk7XG4gICAgcmVtb3ZlRXJyb3JMaXN0ZW5lckZuKCk7XG4gICAgY29uc3QgcmVuZGVyZWRIZWlnaHQgPSBpbWcuY2xpZW50SGVpZ2h0O1xuICAgIGlmIChkaXIuZmlsbCAmJiByZW5kZXJlZEhlaWdodCA9PT0gMCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBmb3JtYXRSdW50aW1lRXJyb3IoXG4gICAgICAgICAgUnVudGltZUVycm9yQ29kZS5JTlZBTElEX0lOUFVULFxuICAgICAgICAgIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoZGlyLm5nU3JjKX0gdGhlIGhlaWdodCBvZiB0aGUgZmlsbC1tb2RlIGltYWdlIGlzIHplcm8uIGAgK1xuICAgICAgICAgICAgYFRoaXMgaXMgbGlrZWx5IGJlY2F1c2UgdGhlIGNvbnRhaW5pbmcgZWxlbWVudCBkb2VzIG5vdCBoYXZlIHRoZSBDU1MgJ3Bvc2l0aW9uJyBgICtcbiAgICAgICAgICAgIGBwcm9wZXJ0eSBzZXQgdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6IFwicmVsYXRpdmVcIiwgXCJmaXhlZFwiLCBvciBcImFic29sdXRlXCIuIGAgK1xuICAgICAgICAgICAgYFRvIGZpeCB0aGlzIHByb2JsZW0sIG1ha2Ugc3VyZSB0aGUgY29udGFpbmVyIGVsZW1lbnQgaGFzIHRoZSBDU1MgJ3Bvc2l0aW9uJyBgICtcbiAgICAgICAgICAgIGBwcm9wZXJ0eSBkZWZpbmVkIGFuZCB0aGUgaGVpZ2h0IG9mIHRoZSBlbGVtZW50IGlzIG5vdCB6ZXJvLmAsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gU2VlIGNvbW1lbnRzIGluIHRoZSBgYXNzZXJ0Tm9JbWFnZURpc3RvcnRpb25gLlxuICBjb25zdCByZW1vdmVFcnJvckxpc3RlbmVyRm4gPSByZW5kZXJlci5saXN0ZW4oaW1nLCAnZXJyb3InLCAoKSA9PiB7XG4gICAgcmVtb3ZlTG9hZExpc3RlbmVyRm4oKTtcbiAgICByZW1vdmVFcnJvckxpc3RlbmVyRm4oKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVmVyaWZpZXMgdGhhdCB0aGUgYGxvYWRpbmdgIGF0dHJpYnV0ZSBpcyBzZXQgdG8gYSB2YWxpZCBpbnB1dCAmXG4gKiBpcyBub3QgdXNlZCBvbiBwcmlvcml0eSBpbWFnZXMuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydFZhbGlkTG9hZGluZ0lucHV0KGRpcjogTmdPcHRpbWl6ZWRJbWFnZSkge1xuICBpZiAoZGlyLmxvYWRpbmcgJiYgZGlyLnByaW9yaXR5KSB7XG4gICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihcbiAgICAgIFJ1bnRpbWVFcnJvckNvZGUuSU5WQUxJRF9JTlBVVCxcbiAgICAgIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoZGlyLm5nU3JjKX0gdGhlIFxcYGxvYWRpbmdcXGAgYXR0cmlidXRlIGAgK1xuICAgICAgICBgd2FzIHVzZWQgb24gYW4gaW1hZ2UgdGhhdCB3YXMgbWFya2VkIFwicHJpb3JpdHlcIi4gYCArXG4gICAgICAgIGBTZXR0aW5nIFxcYGxvYWRpbmdcXGAgb24gcHJpb3JpdHkgaW1hZ2VzIGlzIG5vdCBhbGxvd2VkIGAgK1xuICAgICAgICBgYmVjYXVzZSB0aGVzZSBpbWFnZXMgd2lsbCBhbHdheXMgYmUgZWFnZXJseSBsb2FkZWQuIGAgK1xuICAgICAgICBgVG8gZml4IHRoaXMsIHJlbW92ZSB0aGUg4oCcbG9hZGluZ+KAnSBhdHRyaWJ1dGUgZnJvbSB0aGUgcHJpb3JpdHkgaW1hZ2UuYCxcbiAgICApO1xuICB9XG4gIGNvbnN0IHZhbGlkSW5wdXRzID0gWydhdXRvJywgJ2VhZ2VyJywgJ2xhenknXTtcbiAgaWYgKHR5cGVvZiBkaXIubG9hZGluZyA9PT0gJ3N0cmluZycgJiYgIXZhbGlkSW5wdXRzLmluY2x1ZGVzKGRpci5sb2FkaW5nKSkge1xuICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoXG4gICAgICBSdW50aW1lRXJyb3JDb2RlLklOVkFMSURfSU5QVVQsXG4gICAgICBgJHtpbWdEaXJlY3RpdmVEZXRhaWxzKGRpci5uZ1NyYyl9IHRoZSBcXGBsb2FkaW5nXFxgIGF0dHJpYnV0ZSBgICtcbiAgICAgICAgYGhhcyBhbiBpbnZhbGlkIHZhbHVlIChcXGAke2Rpci5sb2FkaW5nfVxcYCkuIGAgK1xuICAgICAgICBgVG8gZml4IHRoaXMsIHByb3ZpZGUgYSB2YWxpZCB2YWx1ZSAoXCJsYXp5XCIsIFwiZWFnZXJcIiwgb3IgXCJhdXRvXCIpLmAsXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIFdhcm5zIGlmIE5PVCB1c2luZyBhIGxvYWRlciAoZmFsbGluZyBiYWNrIHRvIHRoZSBnZW5lcmljIGxvYWRlcikgYW5kXG4gKiB0aGUgaW1hZ2UgYXBwZWFycyB0byBiZSBob3N0ZWQgb24gb25lIG9mIHRoZSBpbWFnZSBDRE5zIGZvciB3aGljaFxuICogd2UgZG8gaGF2ZSBhIGJ1aWx0LWluIGltYWdlIGxvYWRlci4gU3VnZ2VzdHMgc3dpdGNoaW5nIHRvIHRoZVxuICogYnVpbHQtaW4gbG9hZGVyLlxuICpcbiAqIEBwYXJhbSBuZ1NyYyBWYWx1ZSBvZiB0aGUgbmdTcmMgYXR0cmlidXRlXG4gKiBAcGFyYW0gaW1hZ2VMb2FkZXIgSW1hZ2VMb2FkZXIgcHJvdmlkZWRcbiAqL1xuZnVuY3Rpb24gYXNzZXJ0Tm90TWlzc2luZ0J1aWx0SW5Mb2FkZXIobmdTcmM6IHN0cmluZywgaW1hZ2VMb2FkZXI6IEltYWdlTG9hZGVyKSB7XG4gIGlmIChpbWFnZUxvYWRlciA9PT0gbm9vcEltYWdlTG9hZGVyKSB7XG4gICAgbGV0IGJ1aWx0SW5Mb2FkZXJOYW1lID0gJyc7XG4gICAgZm9yIChjb25zdCBsb2FkZXIgb2YgQlVJTFRfSU5fTE9BREVSUykge1xuICAgICAgaWYgKGxvYWRlci50ZXN0VXJsKG5nU3JjKSkge1xuICAgICAgICBidWlsdEluTG9hZGVyTmFtZSA9IGxvYWRlci5uYW1lO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGJ1aWx0SW5Mb2FkZXJOYW1lKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGZvcm1hdFJ1bnRpbWVFcnJvcihcbiAgICAgICAgICBSdW50aW1lRXJyb3JDb2RlLk1JU1NJTkdfQlVJTFRJTl9MT0FERVIsXG4gICAgICAgICAgYE5nT3B0aW1pemVkSW1hZ2U6IEl0IGxvb2tzIGxpa2UgeW91ciBpbWFnZXMgbWF5IGJlIGhvc3RlZCBvbiB0aGUgYCArXG4gICAgICAgICAgICBgJHtidWlsdEluTG9hZGVyTmFtZX0gQ0ROLCBidXQgeW91ciBhcHAgaXMgbm90IHVzaW5nIEFuZ3VsYXIncyBgICtcbiAgICAgICAgICAgIGBidWlsdC1pbiBsb2FkZXIgZm9yIHRoYXQgQ0ROLiBXZSByZWNvbW1lbmQgc3dpdGNoaW5nIHRvIHVzZSBgICtcbiAgICAgICAgICAgIGB0aGUgYnVpbHQtaW4gYnkgY2FsbGluZyBcXGBwcm92aWRlJHtidWlsdEluTG9hZGVyTmFtZX1Mb2FkZXIoKVxcYCBgICtcbiAgICAgICAgICAgIGBpbiB5b3VyIFxcYHByb3ZpZGVyc1xcYCBhbmQgcGFzc2luZyBpdCB5b3VyIGluc3RhbmNlJ3MgYmFzZSBVUkwuIGAgK1xuICAgICAgICAgICAgYElmIHlvdSBkb24ndCB3YW50IHRvIHVzZSB0aGUgYnVpbHQtaW4gbG9hZGVyLCBkZWZpbmUgYSBjdXN0b20gYCArXG4gICAgICAgICAgICBgbG9hZGVyIGZ1bmN0aW9uIHVzaW5nIElNQUdFX0xPQURFUiB0byBzaWxlbmNlIHRoaXMgd2FybmluZy5gLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBXYXJucyBpZiBuZ1NyY3NldCBpcyBwcmVzZW50IGFuZCBubyBsb2FkZXIgaXMgY29uZmlndXJlZCAoaS5lLiB0aGUgZGVmYXVsdCBvbmUgaXMgYmVpbmcgdXNlZCkuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vTmdTcmNzZXRXaXRob3V0TG9hZGVyKGRpcjogTmdPcHRpbWl6ZWRJbWFnZSwgaW1hZ2VMb2FkZXI6IEltYWdlTG9hZGVyKSB7XG4gIGlmIChkaXIubmdTcmNzZXQgJiYgaW1hZ2VMb2FkZXIgPT09IG5vb3BJbWFnZUxvYWRlcikge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIGZvcm1hdFJ1bnRpbWVFcnJvcihcbiAgICAgICAgUnVudGltZUVycm9yQ29kZS5NSVNTSU5HX05FQ0VTU0FSWV9MT0FERVIsXG4gICAgICAgIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoZGlyLm5nU3JjKX0gdGhlIFxcYG5nU3Jjc2V0XFxgIGF0dHJpYnV0ZSBpcyBwcmVzZW50IGJ1dCBgICtcbiAgICAgICAgICBgbm8gaW1hZ2UgbG9hZGVyIGlzIGNvbmZpZ3VyZWQgKGkuZS4gdGhlIGRlZmF1bHQgb25lIGlzIGJlaW5nIHVzZWQpLCBgICtcbiAgICAgICAgICBgd2hpY2ggd291bGQgcmVzdWx0IGluIHRoZSBzYW1lIGltYWdlIGJlaW5nIHVzZWQgZm9yIGFsbCBjb25maWd1cmVkIHNpemVzLiBgICtcbiAgICAgICAgICBgVG8gZml4IHRoaXMsIHByb3ZpZGUgYSBsb2FkZXIgb3IgcmVtb3ZlIHRoZSBcXGBuZ1NyY3NldFxcYCBhdHRyaWJ1dGUgZnJvbSB0aGUgaW1hZ2UuYCxcbiAgICAgICksXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIFdhcm5zIGlmIGxvYWRlclBhcmFtcyBpcyBwcmVzZW50IGFuZCBubyBsb2FkZXIgaXMgY29uZmlndXJlZCAoaS5lLiB0aGUgZGVmYXVsdCBvbmUgaXMgYmVpbmdcbiAqIHVzZWQpLlxuICovXG5mdW5jdGlvbiBhc3NlcnROb0xvYWRlclBhcmFtc1dpdGhvdXRMb2FkZXIoZGlyOiBOZ09wdGltaXplZEltYWdlLCBpbWFnZUxvYWRlcjogSW1hZ2VMb2FkZXIpIHtcbiAgaWYgKGRpci5sb2FkZXJQYXJhbXMgJiYgaW1hZ2VMb2FkZXIgPT09IG5vb3BJbWFnZUxvYWRlcikge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIGZvcm1hdFJ1bnRpbWVFcnJvcihcbiAgICAgICAgUnVudGltZUVycm9yQ29kZS5NSVNTSU5HX05FQ0VTU0FSWV9MT0FERVIsXG4gICAgICAgIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoZGlyLm5nU3JjKX0gdGhlIFxcYGxvYWRlclBhcmFtc1xcYCBhdHRyaWJ1dGUgaXMgcHJlc2VudCBidXQgYCArXG4gICAgICAgICAgYG5vIGltYWdlIGxvYWRlciBpcyBjb25maWd1cmVkIChpLmUuIHRoZSBkZWZhdWx0IG9uZSBpcyBiZWluZyB1c2VkKSwgYCArXG4gICAgICAgICAgYHdoaWNoIG1lYW5zIHRoYXQgdGhlIGxvYWRlclBhcmFtcyBkYXRhIHdpbGwgbm90IGJlIGNvbnN1bWVkIGFuZCB3aWxsIG5vdCBhZmZlY3QgdGhlIFVSTC4gYCArXG4gICAgICAgICAgYFRvIGZpeCB0aGlzLCBwcm92aWRlIGEgY3VzdG9tIGxvYWRlciBvciByZW1vdmUgdGhlIFxcYGxvYWRlclBhcmFtc1xcYCBhdHRyaWJ1dGUgZnJvbSB0aGUgaW1hZ2UuYCxcbiAgICAgICksXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIFdhcm5zIGlmIHRoZSBwcmlvcml0eSBhdHRyaWJ1dGUgaXMgdXNlZCB0b28gb2Z0ZW4gb24gcGFnZSBsb2FkXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGFzc2V0UHJpb3JpdHlDb3VudEJlbG93VGhyZXNob2xkKGFwcFJlZjogQXBwbGljYXRpb25SZWYpIHtcbiAgaWYgKElNR1NfV0lUSF9QUklPUklUWV9BVFRSX0NPVU5UID09PSAwKSB7XG4gICAgSU1HU19XSVRIX1BSSU9SSVRZX0FUVFJfQ09VTlQrKztcbiAgICBhd2FpdCB3aGVuU3RhYmxlKGFwcFJlZik7XG4gICAgaWYgKElNR1NfV0lUSF9QUklPUklUWV9BVFRSX0NPVU5UID4gUFJJT1JJVFlfQ09VTlRfVEhSRVNIT0xEKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGZvcm1hdFJ1bnRpbWVFcnJvcihcbiAgICAgICAgICBSdW50aW1lRXJyb3JDb2RlLlRPT19NQU5ZX1BSSU9SSVRZX0FUVFJJQlVURVMsXG4gICAgICAgICAgYE5nT3B0aW1pemVkSW1hZ2U6IFRoZSBcInByaW9yaXR5XCIgYXR0cmlidXRlIGlzIHNldCB0byB0cnVlIG1vcmUgdGhhbiAke1BSSU9SSVRZX0NPVU5UX1RIUkVTSE9MRH0gdGltZXMgKCR7SU1HU19XSVRIX1BSSU9SSVRZX0FUVFJfQ09VTlR9IHRpbWVzKS4gYCArXG4gICAgICAgICAgICBgTWFya2luZyB0b28gbWFueSBpbWFnZXMgYXMgXCJoaWdoXCIgcHJpb3JpdHkgY2FuIGh1cnQgeW91ciBhcHBsaWNhdGlvbidzIExDUCAoaHR0cHM6Ly93ZWIuZGV2L2xjcCkuIGAgK1xuICAgICAgICAgICAgYFwiUHJpb3JpdHlcIiBzaG91bGQgb25seSBiZSBzZXQgb24gdGhlIGltYWdlIGV4cGVjdGVkIHRvIGJlIHRoZSBwYWdlJ3MgTENQIGVsZW1lbnQuYCxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIElNR1NfV0lUSF9QUklPUklUWV9BVFRSX0NPVU5UKys7XG4gIH1cbn1cblxuLyoqXG4gKiBXYXJucyBpZiBwbGFjZWhvbGRlcidzIGRpbWVuc2lvbiBhcmUgb3ZlciBhIHRocmVzaG9sZC5cbiAqXG4gKiBUaGlzIGFzc2VydCBmdW5jdGlvbiBpcyBtZWFudCB0byBvbmx5IHJ1biBvbiB0aGUgYnJvd3Nlci5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0UGxhY2Vob2xkZXJEaW1lbnNpb25zKGRpcjogTmdPcHRpbWl6ZWRJbWFnZSwgaW1nRWxlbWVudDogSFRNTEltYWdlRWxlbWVudCkge1xuICBjb25zdCBjb21wdXRlZFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoaW1nRWxlbWVudCk7XG4gIGxldCByZW5kZXJlZFdpZHRoID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3dpZHRoJykpO1xuICBsZXQgcmVuZGVyZWRIZWlnaHQgPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnaGVpZ2h0JykpO1xuXG4gIGlmIChyZW5kZXJlZFdpZHRoID4gUExBQ0VIT0xERVJfRElNRU5TSU9OX0xJTUlUIHx8IHJlbmRlcmVkSGVpZ2h0ID4gUExBQ0VIT0xERVJfRElNRU5TSU9OX0xJTUlUKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgZm9ybWF0UnVudGltZUVycm9yKFxuICAgICAgICBSdW50aW1lRXJyb3JDb2RlLlBMQUNFSE9MREVSX0RJTUVOU0lPTl9MSU1JVF9FWENFRURFRCxcbiAgICAgICAgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMpfSBpdCB1c2VzIGEgcGxhY2Vob2xkZXIgaW1hZ2UsIGJ1dCBhdCBsZWFzdCBvbmUgYCArXG4gICAgICAgICAgYG9mIHRoZSBkaW1lbnNpb25zIGF0dHJpYnV0ZSAoaGVpZ2h0IG9yIHdpZHRoKSBleGNlZWRzIHRoZSBsaW1pdCBvZiAke1BMQUNFSE9MREVSX0RJTUVOU0lPTl9MSU1JVH1weC4gYCArXG4gICAgICAgICAgYFRvIGZpeCB0aGlzLCB1c2UgYSBzbWFsbGVyIGltYWdlIGFzIGEgcGxhY2Vob2xkZXIuYCxcbiAgICAgICksXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByb3VuZChpbnB1dDogbnVtYmVyKTogbnVtYmVyIHwgc3RyaW5nIHtcbiAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIoaW5wdXQpID8gaW5wdXQgOiBpbnB1dC50b0ZpeGVkKDIpO1xufVxuXG4vLyBUcmFuc2Zvcm0gZnVuY3Rpb24gdG8gaGFuZGxlIFNhZmVWYWx1ZSBpbnB1dCBmb3IgbmdTcmMuIFRoaXMgZG9lc24ndCBkbyBhbnkgc2FuaXRpemF0aW9uLFxuLy8gYXMgdGhhdCBpcyBub3QgbmVlZGVkIGZvciBpbWcuc3JjIGFuZCBpbWcuc3Jjc2V0LiBUaGlzIHRyYW5zZm9ybSBpcyBwdXJlbHkgZm9yIGNvbXBhdGliaWxpdHkuXG5mdW5jdGlvbiB1bndyYXBTYWZlVXJsKHZhbHVlOiBzdHJpbmcgfCBTYWZlVmFsdWUpOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gdW53cmFwU2FmZVZhbHVlKHZhbHVlKTtcbn1cblxuLy8gVHJhbnNmb3JtIGZ1bmN0aW9uIHRvIGhhbmRsZSBpbnB1dHMgd2hpY2ggbWF5IGJlIGJvb2xlYW5zLCBzdHJpbmdzLCBvciBzdHJpbmcgcmVwcmVzZW50YXRpb25zXG4vLyBvZiBib29sZWFuIHZhbHVlcy4gVXNlZCBmb3IgdGhlIHBsYWNlaG9sZGVyIGF0dHJpYnV0ZS5cbmV4cG9ydCBmdW5jdGlvbiBib29sZWFuT3JVcmxBdHRyaWJ1dGUodmFsdWU6IGJvb2xlYW4gfCBzdHJpbmcpOiBib29sZWFuIHwgc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUgIT09ICd0cnVlJyAmJiB2YWx1ZSAhPT0gJ2ZhbHNlJyAmJiB2YWx1ZSAhPT0gJycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGJvb2xlYW5BdHRyaWJ1dGUodmFsdWUpO1xufVxuIl19
|