UNPKG

ngx-phone-validators

Version:

An implementation of angular validators for Angular 2 and higher

330 lines 25.7 kB
import { Util } from "./../util"; import { PhoneNumberUtil } from "google-libphonenumber"; export const regionsCode = { // Region code for global networks (e.g. +800 numbers). UN001: "001", AD: "AD", AE: "AE", AF: "AF", AG: "AG", AI: "AI", AL: "AL", AM: "AM", AN: "AN", AO: "AO", AQ: "AQ", AR: "AR", AS: "AS", AT: "AT", AU: "AU", AW: "AW", AX: "AX", AZ: "AZ", BA: "BA", BB: "BB", BD: "BD", BE: "BE", BF: "BF", BG: "BG", BH: "BH", BI: "BI", BJ: "BJ", BL: "BL", BM: "BM", BN: "BN", BO: "BO", BR: "BR", BS: "BS", BT: "BT", BV: "BV", BW: "BW", BY: "BY", BZ: "BZ", CA: "CA", CC: "CC", CD: "CD", CF: "CF", CG: "CG", CH: "CH", CI: "CI", CK: "CK", CL: "CL", CM: "CM", CN: "CN", CO: "CO", CR: "CR", CU: "CU", CV: "CV", CX: "CX", CY: "CY", CZ: "CZ", DE: "DE", DJ: "DJ", DK: "DK", DM: "DM", DO: "DO", DZ: "DZ", EC: "EC", EE: "EE", EG: "EG", EH: "EH", ER: "ER", ES: "ES", ET: "ET", FI: "FI", FJ: "FJ", FK: "FK", FM: "FM", FO: "FO", FR: "FR", GA: "GA", GB: "GB", GD: "GD", GE: "GE", GF: "GF", GG: "GG", GH: "GH", GI: "GI", GL: "GL", GM: "GM", GN: "GN", GP: "GP", GQ: "GQ", GR: "GR", GS: "GS", GT: "GT", GU: "GU", GW: "GW", GY: "GY", HK: "HK", HM: "HM", HN: "HN", HR: "HR", HT: "HT", HU: "HU", ID: "ID", IE: "IE", IL: "IL", IM: "IM", IN: "IN", IO: "IO", IQ: "IQ", IR: "IR", IS: "IS", IT: "IT", JE: "JE", JM: "JM", JO: "JO", JP: "JP", KE: "KE", KG: "KG", KH: "KH", KI: "KI", KM: "KM", KN: "KN", KP: "KP", KR: "KR", KW: "KW", KY: "KY", KZ: "KZ", LA: "LA", LB: "LB", LC: "LC", LI: "LI", LK: "LK", LR: "LR", LS: "LS", LT: "LT", LU: "LU", LV: "LV", LY: "LY", MA: "MA", MC: "MC", MD: "MD", ME: "ME", MF: "MF", MG: "MG", MH: "MH", MK: "MK", ML: "ML", MM: "MM", MN: "MN", MO: "MO", MP: "MP", MQ: "MQ", MR: "MR", MS: "MS", MT: "MT", MU: "MU", MV: "MV", MW: "MW", MX: "MX", MY: "MY", MZ: "MZ", NA: "NA", NC: "NC", NE: "NE", NF: "NF", NG: "NG", NI: "NI", NL: "NL", NO: "NO", NP: "NP", NR: "NR", NU: "NU", NZ: "NZ", OM: "OM", PA: "PA", PE: "PE", PF: "PF", PG: "PG", PH: "PH", PK: "PK", PL: "PL", PM: "PM", PN: "PN", PR: "PR", PS: "PS", PT: "PT", PW: "PW", PY: "PY", QA: "QA", RE: "RE", RO: "RO", RS: "RS", RU: "RU", RW: "RW", SA: "SA", SB: "SB", SC: "SC", SD: "SD", SE: "SE", SG: "SG", SH: "SH", SI: "SI", SJ: "SJ", SK: "SK", SL: "SL", SM: "SM", SN: "SN", SO: "SO", SR: "SR", ST: "ST", SV: "SV", SY: "SY", SZ: "SZ", TC: "TC", TD: "TD", TF: "TF", TG: "TG", TH: "TH", TJ: "TJ", TK: "TK", TL: "TL", TM: "TM", TN: "TN", TO: "TO", TR: "TR", TT: "TT", TV: "TV", TW: "TW", TZ: "TZ", UA: "UA", UG: "UG", UM: "UM", US: "US", UY: "UY", UZ: "UZ", VA: "VA", VC: "VC", VE: "VE", VG: "VG", VI: "VI", VN: "VN", VU: "VU", WF: "WF", WS: "WS", YE: "YE", YT: "YT", ZA: "ZA", ZM: "ZM", ZW: "ZW", // Official code for the unknown region. ZZ: "ZZ", }; export class PhoneValidators { static checkRegionCode(local) { return !(regionsCode[local] === undefined); } static isValidRegionCode(control) { if (Util.isNotPresent(control)) { return undefined; } if (!PhoneValidators.checkRegionCode(control.value)) { return { noValidRegionCode: true }; } return undefined; } static isPhoneNumber(local) { const validator = (control) => { if (Util.isNotPresent(control)) { return undefined; } if (!PhoneValidators.checkRegionCode(local)) { return { noValidRegionCode: true }; } const phoneParser = PhoneNumberUtil.getInstance(); let error = { noPhoneNumber: true }; try { const phoneNumber = phoneParser.parse(control.value, local); if (phoneParser.isValidNumber(phoneNumber)) { error = undefined; } } catch (err) { error = { noPhoneNumber: true }; } return error; }; return validator; } static isPossibleNumberWithReason(local) { const validator = (control) => { if (Util.isNotPresent(control)) { return undefined; } if (!PhoneValidators.checkRegionCode(local)) { return { noValidRegionCode: true }; } const phoneParser = PhoneNumberUtil.getInstance(); let error = { noPhoneNumber: true }; try { const phoneNumber = phoneParser.parse(control.value, local); const reason = phoneParser.isPossibleNumberWithReason(phoneNumber); switch (reason) { case PhoneNumberUtil.ValidationResult.IS_POSSIBLE: error = undefined; break; case PhoneNumberUtil.ValidationResult.TOO_LONG: error = { phoneNumberTooLong: true }; break; case PhoneNumberUtil.ValidationResult.TOO_SHORT: error = { phoneNumberTooShort: true }; break; case PhoneNumberUtil.ValidationResult.INVALID_COUNTRY_CODE: error = { phoneNumberInvalidCountryCode: true }; break; default: error = { noPhoneNumber: true }; break; } } catch (err) { error = { noPhoneNumber: true }; } return error; }; return validator; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvbmUtdmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3Bob25lL3Bob25lLXZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHeEQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUE4QjtJQUNwRCx1REFBdUQ7SUFDdkQsS0FBSyxFQUFFLEtBQUs7SUFDWixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLElBQUk7SUFD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LEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDO3dCQUNoQyxNQUFNO2lCQUNUO2FBQ0Y7WUFBQyxPQUFPLEdBQUcsRUFBRTtnQkFDWixLQUFLLEdBQUcsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUM7YUFDakM7WUFFRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQztRQUNGLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVmFsaWRhdG9yRm4sIFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IFV0aWwgfSBmcm9tIFwiLi8uLi91dGlsXCI7XG5pbXBvcnQgeyBQaG9uZU51bWJlclV0aWwgfSBmcm9tIFwiZ29vZ2xlLWxpYnBob25lbnVtYmVyXCI7XG5pbXBvcnQgKiBhcyBsaWJQaG9uZU51bWJlciBmcm9tIFwiZ29vZ2xlLWxpYnBob25lbnVtYmVyXCI7XG5cbmV4cG9ydCBjb25zdCByZWdpb25zQ29kZTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgLy8gUmVnaW9uIGNvZGUgZm9yIGdsb2JhbCBuZXR3b3JrcyAoZS5nLiArODAwIG51bWJlcnMpLlxuICBVTjAwMTogXCIwMDFcIixcbiAgQUQ6IFwiQURcIixcbiAgQUU6IFwiQUVcIixcbiAgQUY6IFwiQUZcIixcbiAgQUc6IFwiQUdcIixcbiAgQUk6IFwiQUlcIixcbiAgQUw6IFwiQUxcIixcbiAgQU06IFwiQU1cIixcbiAgQU46IFwiQU5cIixcbiAgQU86IFwiQU9cIixcbiAgQVE6IFwiQVFcIixcbiAgQVI6IFwiQVJcIixcbiAgQVM6IFwiQVNcIixcbiAgQVQ6IFwiQVRcIixcbiAgQVU6IFwiQVVcIixcbiAgQVc6IFwiQVdcIixcbiAgQVg6IFwiQVhcIixcbiAgQVo6IFwiQVpcIixcbiAgQkE6IFwiQkFcIixcbiAgQkI6IFwiQkJcIixcbiAgQkQ6IFwiQkRcIixcbiAgQkU6IFwiQkVcIixcbiAgQkY6IFwiQkZcIixcbiAgQkc6IFwiQkdcIixcbiAgQkg6IFwiQkhcIixcbiAgQkk6IFwiQklcIixcbiAgQko6IFwiQkpcIixcbiAgQkw6IFwiQkxcIixcbiAgQk06IFwiQk1cIixcbiAgQk46IFwiQk5cIixcbiAgQk86IFwiQk9cIixcbiAgQlI6IFwiQlJcIixcbiAgQlM6IFwiQlNcIixcbiAgQlQ6IFwiQlRcIixcbiAgQlY6IFwiQlZcIixcbiAgQlc6IFwiQldcIixcbiAgQlk6IFwiQllcIixcbiAgQlo6IFwiQlpcIixcbiAgQ0E6IFwiQ0FcIixcbiAgQ0M6IFwiQ0NcIixcbiAgQ0Q6IFwiQ0RcIixcbiAgQ0Y6IFwiQ0ZcIixcbiAgQ0c6IFwiQ0dcIixcbiAgQ0g6IFwiQ0hcIixcbiAgQ0k6IFwiQ0lcIixcbiAgQ0s6IFwiQ0tcIixcbiAgQ0w6IFwiQ0xcIixcbiAgQ006IFwiQ01cIixcbiAgQ046IFwiQ05cIixcbiAgQ086IFwiQ09cIixcbiAgQ1I6IFwiQ1JcIixcbiAgQ1U6IFwiQ1VcIixcbiAgQ1Y6IFwiQ1ZcIixcbiAgQ1g6IFwiQ1hcIixcbiAgQ1k6IFwiQ1lcIixcbiAgQ1o6IFwiQ1pcIixcbiAgREU6IFwiREVcIixcbiAgREo6IFwiREpcIixcbiAgREs6IFwiREtcIixcbiAgRE06IFwiRE1cIixcbiAgRE86IFwiRE9cIixcbiAgRFo6IFwiRFpcIixcbiAgRUM6IFwiRUNcIixcbiAgRUU6IFwiRUVcIixcbiAgRUc6IFwiRUdcIixcbiAgRUg6IFwiRUhcIixcbiAgRVI6IFwiRVJcIixcbiAgRVM6IFwiRVNcIixcbiAgRVQ6IFwiRVRcIixcbiAgRkk6IFwiRklcIixcbiAgRko6IFwiRkpcIixcbiAgRks6IFwiRktcIixcbiAgRk06IFwiRk1cIixcbiAgRk86IFwiRk9cIixcbiAgRlI6IFwiRlJcIixcbiAgR0E6IFwiR0FcIixcbiAgR0I6IFwiR0JcIixcbiAgR0Q6IFwiR0RcIixcbiAgR0U6IFwiR0VcIixcbiAgR0Y6IFwiR0ZcIixcbiAgR0c6IFwiR0dcIixcbiAgR0g6IFwiR0hcIixcbiAgR0k6IFwiR0lcIixcbiAgR0w6IFwiR0xcIixcbiAgR006IFwiR01cIixcbiAgR046IFwiR05cIixcbiAgR1A6IFwiR1BcIixcbiAgR1E6IFwiR1FcIixcbiAgR1I6IFwiR1JcIixcbiAgR1M6IFwiR1NcIixcbiAgR1Q6IFwiR1RcIixcbiAgR1U6IFwiR1VcIixcbiAgR1c6IFwiR1dcIixcbiAgR1k6IFwiR1lcIixcbiAgSEs6IFwiSEtcIixcbiAgSE06IFwiSE1cIixcbiAgSE46IFwiSE5cIixcbiAgSFI6IFwiSFJcIixcbiAgSFQ6IFwiSFRcIixcbiAgSFU6IFwiSFVcIixcbiAgSUQ6IFwiSURcIixcbiAgSUU6IFwiSUVcIixcbiAgSUw6IFwiSUxcIixcbiAgSU06IFwiSU1cIixcbiAgSU46IFwiSU5cIixcbiAgSU86IFwiSU9cIixcbiAgSVE6IFwiSVFcIixcbiAgSVI6IFwiSVJcIixcbiAgSVM6IFwiSVNcIixcbiAgSVQ6IFwiSVRcIixcbiAgSkU6IFwiSkVcIixcbiAgSk06IFwiSk1cIixcbiAgSk86IFwiSk9cIixcbiAgSlA6IFwiSlBcIixcbiAgS0U6IFwiS0VcIixcbiAgS0c6IFwiS0dcIixcbiAgS0g6IFwiS0hcIixcbiAgS0k6IFwiS0lcIixcbiAgS006IFwiS01cIixcbiAgS046IFwiS05cIixcbiAgS1A6IFwiS1BcIixcbiAgS1I6IFwiS1JcIixcbiAgS1c6IFwiS1dcIixcbiAgS1k6IFwiS1lcIixcbiAgS1o6IFwiS1pcIixcbiAgTEE6IFwiTEFcIixcbiAgTEI6IFwiTEJcIixcbiAgTEM6IFwiTENcIixcbiAgTEk6IFwiTElcIixcbiAgTEs6IFwiTEtcIixcbiAgTFI6IFwiTFJcIixcbiAgTFM6IFwiTFNcIixcbiAgTFQ6IFwiTFRcIixcbiAgTFU6IFwiTFVcIixcbiAgTFY6IFwiTFZcIixcbiAgTFk6IFwiTFlcIixcbiAgTUE6IFwiTUFcIixcbiAgTUM6IFwiTUNcIixcbiAgTUQ6IFwiTURcIixcbiAgTUU6IFwiTUVcIixcbiAgTUY6IFwiTUZcIixcbiAgTUc6IFwiTUdcIixcbiAgTUg6IFwiTUhcIixcbiAgTUs6IFwiTUtcIixcbiAgTUw6IFwiTUxcIixcbiAgTU06IFwiTU1cIixcbiAgTU46IFwiTU5cIixcbiAgTU86IFwiTU9cIixcbiAgTVA6IFwiTVBcIixcbiAgTVE6IFwiTVFcIixcbiAgTVI6IFwiTVJcIixcbiAgTVM6IFwiTVNcIixcbiAgTVQ6IFwiTVRcIixcbiAgTVU6IFwiTVVcIixcbiAgTVY6IFwiTVZcIixcbiAgTVc6IFwiTVdcIixcbiAgTVg6IFwiTVhcIixcbiAgTVk6IFwiTVlcIixcbiAgTVo6IFwiTVpcIixcbiAgTkE6IFwiTkFcIixcbiAgTkM6IFwiTkNcIixcbiAgTkU6IFwiTkVcIixcbiAgTkY6IFwiTkZcIixcbiAgTkc6IFwiTkdcIixcbiAgTkk6IFwiTklcIixcbiAgTkw6IFwiTkxcIixcbiAgTk86IFwiTk9cIixcbiAgTlA6IFwiTlBcIixcbiAgTlI6IFwiTlJcIixcbiAgTlU6IFwiTlVcIixcbiAgTlo6IFwiTlpcIixcbiAgT006IFwiT01cIixcbiAgUEE6IFwiUEFcIixcbiAgUEU6IFwiUEVcIixcbiAgUEY6IFwiUEZcIixcbiAgUEc6IFwiUEdcIixcbiAgUEg6IFwiUEhcIixcbiAgUEs6IFwiUEtcIixcbiAgUEw6IFwiUExcIixcbiAgUE06IFwiUE1cIixcbiAgUE46IFwiUE5cIixcbiAgUFI6IFwiUFJcIixcbiAgUFM6IFwiUFNcIixcbiAgUFQ6IFwiUFRcIixcbiAgUFc6IFwiUFdcIixcbiAgUFk6IFwiUFlcIixcbiAgUUE6IFwiUUFcIixcbiAgUkU6IFwiUkVcIixcbiAgUk86IFwiUk9cIixcbiAgUlM6IFwiUlNcIixcbiAgUlU6IFwiUlVcIixcbiAgUlc6IFwiUldcIixcbiAgU0E6IFwiU0FcIixcbiAgU0I6IFwiU0JcIixcbiAgU0M6IFwiU0NcIixcbiAgU0Q6IFwiU0RcIixcbiAgU0U6IFwiU0VcIixcbiAgU0c6IFwiU0dcIixcbiAgU0g6IFwiU0hcIixcbiAgU0k6IFwiU0lcIixcbiAgU0o6IFwiU0pcIixcbiAgU0s6IFwiU0tcIixcbiAgU0w6IFwiU0xcIixcbiAgU006IFwiU01cIixcbiAgU046IFwiU05cIixcbiAgU086IFwiU09cIixcbiAgU1I6IFwiU1JcIixcbiAgU1Q6IFwiU1RcIixcbiAgU1Y6IFwiU1ZcIixcbiAgU1k6IFwiU1lcIixcbiAgU1o6IFwiU1pcIixcbiAgVEM6IFwiVENcIixcbiAgVEQ6IFwiVERcIixcbiAgVEY6IFwiVEZcIixcbiAgVEc6IFwiVEdcIixcbiAgVEg6IFwiVEhcIixcbiAgVEo6IFwiVEpcIixcbiAgVEs6IFwiVEtcIixcbiAgVEw6IFwiVExcIixcbiAgVE06IFwiVE1cIixcbiAgVE46IFwiVE5cIixcbiAgVE86IFwiVE9cIixcbiAgVFI6IFwiVFJcIixcbiAgVFQ6IFwiVFRcIixcbiAgVFY6IFwiVFZcIixcbiAgVFc6IFwiVFdcIixcbiAgVFo6IFwiVFpcIixcbiAgVUE6IFwiVUFcIixcbiAgVUc6IFwiVUdcIixcbiAgVU06IFwiVU1cIixcbiAgVVM6IFwiVVNcIixcbiAgVVk6IFwiVVlcIixcbiAgVVo6IFwiVVpcIixcbiAgVkE6IFwiVkFcIixcbiAgVkM6IFwiVkNcIixcbiAgVkU6IFwiVkVcIixcbiAgVkc6IFwiVkdcIixcbiAgVkk6IFwiVklcIixcbiAgVk46IFwiVk5cIixcbiAgVlU6IFwiVlVcIixcbiAgV0Y6IFwiV0ZcIixcbiAgV1M6IFwiV1NcIixcbiAgWUU6IFwiWUVcIixcbiAgWVQ6IFwiWVRcIixcbiAgWkE6IFwiWkFcIixcbiAgWk06IFwiWk1cIixcbiAgWlc6IFwiWldcIixcbiAgLy8gT2ZmaWNpYWwgY29kZSBmb3IgdGhlIHVua25vd24gcmVnaW9uLlxuICBaWjogXCJaWlwiLFxufTtcbmV4cG9ydCBjbGFzcyBQaG9uZVZhbGlkYXRvcnMge1xuICBzdGF0aWMgY2hlY2tSZWdpb25Db2RlKGxvY2FsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIShyZWdpb25zQ29kZVtsb2NhbF0gPT09IHVuZGVmaW5lZCk7XG4gIH1cblxuICBzdGF0aWMgaXNWYWxpZFJlZ2lvbkNvZGUoXG4gICAgY29udHJvbDogQWJzdHJhY3RDb250cm9sXG4gICk6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9IHtcbiAgICBpZiAoVXRpbC5pc05vdFByZXNlbnQoY29udHJvbCkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKCFQaG9uZVZhbGlkYXRvcnMuY2hlY2tSZWdpb25Db2RlKGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4geyBub1ZhbGlkUmVnaW9uQ29kZTogdHJ1ZSB9O1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBpc1Bob25lTnVtYmVyKGxvY2FsOiBzdHJpbmcpOiBWYWxpZGF0b3JGbiB7XG4gICAgY29uc3QgdmFsaWRhdG9yID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgPT4ge1xuICAgICAgaWYgKFV0aWwuaXNOb3RQcmVzZW50KGNvbnRyb2wpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICghUGhvbmVWYWxpZGF0b3JzLmNoZWNrUmVnaW9uQ29kZShsb2NhbCkpIHtcbiAgICAgICAgcmV0dXJuIHsgbm9WYWxpZFJlZ2lvbkNvZGU6IHRydWUgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGhvbmVQYXJzZXI6IFBob25lTnVtYmVyVXRpbCA9IFBob25lTnVtYmVyVXRpbC5nZXRJbnN0YW5jZSgpO1xuXG4gICAgICBsZXQgZXJyb3IgPSB7IG5vUGhvbmVOdW1iZXI6IHRydWUgfTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBob25lTnVtYmVyOiBsaWJQaG9uZU51bWJlci5QaG9uZU51bWJlciA9IHBob25lUGFyc2VyLnBhcnNlKFxuICAgICAgICAgIGNvbnRyb2wudmFsdWUsXG4gICAgICAgICAgbG9jYWxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHBob25lUGFyc2VyLmlzVmFsaWROdW1iZXIocGhvbmVOdW1iZXIpKSB7XG4gICAgICAgICAgZXJyb3IgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlcnJvciA9IHsgbm9QaG9uZU51bWJlcjogdHJ1ZSB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZXJyb3I7XG4gICAgfTtcbiAgICByZXR1cm4gdmFsaWRhdG9yO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBpc1Bvc3NpYmxlTnVtYmVyV2l0aFJlYXNvbihsb2NhbDogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xuICAgIGNvbnN0IHZhbGlkYXRvciA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzID0+IHtcbiAgICAgIGlmIChVdGlsLmlzTm90UHJlc2VudChjb250cm9sKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoIVBob25lVmFsaWRhdG9ycy5jaGVja1JlZ2lvbkNvZGUobG9jYWwpKSB7XG4gICAgICAgIHJldHVybiB7IG5vVmFsaWRSZWdpb25Db2RlOiB0cnVlIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBob25lUGFyc2VyOiBQaG9uZU51bWJlclV0aWwgPSBQaG9uZU51bWJlclV0aWwuZ2V0SW5zdGFuY2UoKTtcblxuICAgICAgbGV0IGVycm9yOiBWYWxpZGF0aW9uRXJyb3JzID0geyBub1Bob25lTnVtYmVyOiB0cnVlIH07XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwaG9uZU51bWJlcjogbGliUGhvbmVOdW1iZXIuUGhvbmVOdW1iZXIgPSBwaG9uZVBhcnNlci5wYXJzZShcbiAgICAgICAgICBjb250cm9sLnZhbHVlLFxuICAgICAgICAgIGxvY2FsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHJlYXNvbjogUGhvbmVOdW1iZXJVdGlsLlZhbGlkYXRpb25SZXN1bHQgPSBwaG9uZVBhcnNlci5pc1Bvc3NpYmxlTnVtYmVyV2l0aFJlYXNvbihcbiAgICAgICAgICBwaG9uZU51bWJlclxuICAgICAgICApO1xuICAgICAgICBzd2l0Y2ggKHJlYXNvbikge1xuICAgICAgICAgIGNhc2UgUGhvbmVOdW1iZXJVdGlsLlZhbGlkYXRpb25SZXN1bHQuSVNfUE9TU0lCTEU6XG4gICAgICAgICAgICBlcnJvciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgUGhvbmVOdW1iZXJVdGlsLlZhbGlkYXRpb25SZXN1bHQuVE9PX0xPTkc6XG4gICAgICAgICAgICBlcnJvciA9IHsgcGhvbmVOdW1iZXJUb29Mb25nOiB0cnVlIH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFBob25lTnVtYmVyVXRpbC5WYWxpZGF0aW9uUmVzdWx0LlRPT19TSE9SVDpcbiAgICAgICAgICAgIGVycm9yID0geyBwaG9uZU51bWJlclRvb1Nob3J0OiB0cnVlIH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFBob25lTnVtYmVyVXRpbC5WYWxpZGF0aW9uUmVzdWx0LklOVkFMSURfQ09VTlRSWV9DT0RFOlxuICAgICAgICAgICAgZXJyb3IgPSB7IHBob25lTnVtYmVySW52YWxpZENvdW50cnlDb2RlOiB0cnVlIH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgZXJyb3IgPSB7IG5vUGhvbmVOdW1iZXI6IHRydWUgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZXJyb3IgPSB7IG5vUGhvbmVOdW1iZXI6IHRydWUgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH07XG4gICAgcmV0dXJuIHZhbGlkYXRvcjtcbiAgfVxufVxuIl19