UNPKG

ng-devui

Version:

DevUI components based on Angular

193 lines 29.3 kB
// @dynamic export class DValidators { // eslint-disable-next-line max-len static { this.ScriptPattern = /<+\/?[Ss][Cc][Rr][Ii][Pp][Tt] *.*>*/; } // eslint-disable-next-line max-len static { this.UrlPattern = /^(https?|s?ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((((1?[1-9]?\d)|(10\d)|(2[0-4]\d)|(25[0-5]))\.){3}((1?[1-9]?\d)|(10\d)|(2[0-4]\d)|(25[0-5])))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i; } static { this.Ipv4Pattern = /^(((1?[1-9]?\d)|(10\d)|(2[0-4]\d)|(25[0-5]))\.){3}((1?[1-9]?\d)|(10\d)|(2[0-4]\d)|(25[0-5]))$/i; } // eslint-disable-next-line max-len static { this.Ipv6Pattern = /^(((([\da-f]{1,4}):){7}([\da-f]{1,4}))|(((([\da-f]{1,4}):){1,7}:)|((([\da-f]{1,4}):){6}:([\da-f]{1,4}))|((([\da-f]{1,4}):){5}:(([\da-f]{1,4}):)?([\da-f]{1,4}))|((([\da-f]{1,4}):){4}:(([\da-f]{1,4}):){0,2}([\da-f]{1,4}))|((([\da-f]{1,4}):){3}:(([\da-f]{1,4}):){0,3}([\da-f]{1,4}))|((([\da-f]{1,4}):){2}:(([\da-f]{1,4}):){0,4}([\da-f]{1,4}))|((([\da-f]{1,4}):){1}:(([\da-f]{1,4}):){0,5}([\da-f]{1,4}))|(::(([\da-f]{1,4}):){0,6}([\da-f]{1,4}))|(::([\da-f]{1,4})?))|(((([\da-f]{1,4}):){6}(((1?[1-9]?\d)|(10\d)|(2[0-4]\d)|(25[0-5]))\.){3}((1?[1-9]?\d)|(10\d)|(2[0-4]\d)|(25[0-5])))|((([\da-f]{1,4}):){5}:(((1?[1-9]?\d)|(10\d)|(2[0-4]\d)|(25[0-5]))\.){3}((1?[1-9]?\d)|(10\d)|(2[0-4]\d)|(25[0-5])))|((([\da-f]{1,4}):){4}:(([\da-f]{1,4}):)?(((1?[1-9]?\d)|(10\d)|(2[0-4]\d)|(25[0-5]))\.){3}((1?[1-9]?\d)|(10\d)|(2[0-4]\d)|(25[0-5])))|((([\da-f]{1,4}):){3}:(([\da-f]{1,4}):){0,2}(((1?[1-9]?\d)|(10\d)|(2[0-4]\d)|(25[0-5]))\.){3}((1?[1-9]?\d)|(10\d)|(2[0-4]\d)|(25[0-5])))|((([\da-f]{1,4}):){2}:(([\da-f]{1,4}):){0,3}(((1?[1-9]?\d)|(10\d)|(2[0-4]\d)|(25[0-5]))\.){3}((1?[1-9]?\d)|(10\d)|(2[0-4]\d)|(25[0-5])))|(([\da-f]{1,4})::(([\da-f]{1,4}):){0,4}(((1?[1-9]?\d)|(10\d)|(2[0-4]\d)|(25[0-5]))\.){3}((1?[1-9]?\d)|(10\d)|(2[0-4]\d)|(25[0-5])))|(::(([\da-f]{1,4}):){0,5}(((1?[1-9]?\d)|(10\d)|(2[0-4]\d)|(25[0-5]))\.){3}((1?[1-9]?\d)|(10\d)|(2[0-4]\d)|(25[0-5])))))$/i; } static { this.AlphabetPattern = /^[a-zA-Z]+(\s+[a-zA-Z]+)*$/; } static { this.DigitPattern = /^\d+$/; } static { this.IntegerPattern = /^-?\d+$/; } static { this.NumberPattern = /^(?:-?\d+|[+-]?[\d]+([\.][\d]+)?([Ee][+-]?[\d]+)?|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/; } // 支持科学计数法 static { this.PortRange = [0, 65535]; } static isEmptyInput(value) { return value === null || value.length === 0; } /* Failed if only has whitespace */ static whiteSpace(control) { let res = null; if (typeof control.value === 'string' && control.value.length !== 0 && control.value.trim().length === 0) { res = { whitespace: true }; } return res; } /** * 校验是否包含 * @param contain * @returns */ static contains(contain) { return (control) => { if (DValidators.isEmptyInput(control.value) || DValidators.isEmptyInput(contain)) { return null; } return control.value.indexOf(contain) === -1 ? { contains: { requiredContains: contain, actualValue: control.value } } : null; }; } /** * 校验是否不包含 * @param contain * @returns */ static notContains(contain) { return (control) => { if (DValidators.isEmptyInput(control.value) || DValidators.isEmptyInput(contain)) { return null; } return control.value.indexOf(contain) !== -1 ? { notContains: { requiredNotContains: contain, actualValue: control.value } } : null; }; } /** * 校验是否相等 * @param equal * @returns */ static equal(equal) { return (control) => { if (DValidators.isEmptyInput(control.value) || DValidators.isEmptyInput(equal)) { return null; } return control.value !== equal ? { equal: { requiredEqual: equal, actualValue: control.value } } : null; }; } /** * 校验是否不相等 * @param equal * @returns */ static notEqual(equal) { return (control) => { if (DValidators.isEmptyInput(control.value) || DValidators.isEmptyInput(equal)) { return null; } return control.value === equal ? { notEqual: { requiredNotEqual: equal, actualValue: control.value } } : null; }; } /** * 校验端口号 * @param control * @returns */ static port(control) { if (DValidators.isEmptyInput(control.value)) { return null; } return DValidators.DigitPattern.test(control.value) && control.value >= DValidators.PortRange[0] && control.value <= DValidators.PortRange[1] ? null : { port: { min: DValidators.PortRange[0], max: DValidators.PortRange[1] } }; } /** * 校验日期是否合法 * @param control * @returns */ static date(control) { if (DValidators.isEmptyInput(control.value)) { return null; // don't validate empty values to allow optional controls } return !/Invalid|NaN/.test(new Date(control.value).toString()) ? null : { date: true }; } /** * 校验 url 是否合法 * @param control * @returns */ static url(control) { if (DValidators.isEmptyInput(control.value)) { return null; // don't validate empty values to allow optional controls } return DValidators.UrlPattern.test(control.value) ? null : { url: true }; } /** * 校验整数 * @param control * @returns */ static integer(control) { if (DValidators.isEmptyInput(control.value)) { return null; // don't validate empty values to allow optional controls } return DValidators.IntegerPattern.test(control.value) ? null : { integer: true }; } /** * 校验是否是数字 * @param control * @returns */ static digits(control) { if (DValidators.isEmptyInput(control.value)) { return null; // don't validate empty values to allow optional controls } return DValidators.DigitPattern.test(control.value) ? null : { digits: true }; } /** * 校验数字,支持科学计数法 * @param control * @returns */ static number(control) { if (DValidators.isEmptyInput(control.value)) { return null; // don't validate empty values to allow optional controls } return DValidators.NumberPattern.test(control.value) ? null : { number: true }; } /** * 校验是否是字母 * @param control * @returns */ static alphabet(control) { if (DValidators.isEmptyInput(control.value)) { return null; } return DValidators.AlphabetPattern.test(control.value) ? null : { alphabet: true }; } /** * 校验是 script 标签 * @param control * @returns */ static notScript(control) { if (DValidators.isEmptyInput(control.value)) { return null; } return DValidators.ScriptPattern.test(control.value) ? { notScript: true } : null; } /** * 校验 ipv4 * @param control * @returns */ static ipv4(control) { if (DValidators.isEmptyInput(control.value)) { return null; } return DValidators.Ipv4Pattern.test(control.value) ? null : { ipv4: true }; } /** * 校验 ipv6 * @param control * @returns */ static ipv6(control) { if (DValidators.isEmptyInput(control.value)) { return null; } return DValidators.Ipv6Pattern.test(control.value) ? null : { ipv6: true }; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2RldnVpL2Zvcm0vdmFsaWRhdG9yLWRpcmVjdGl2ZS92YWxpZGF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLFdBQVc7QUFDWCxNQUFNLE9BQU8sV0FBVztJQUN0QixtQ0FBbUM7YUFDWCxrQkFBYSxHQUFHLHFDQUFxQyxDQUFDO0lBQzlFLG1DQUFtQzthQUNYLGVBQVUsR0FBRywrbUNBQSttQyxDQUFDO2FBQzduQyxnQkFBVyxHQUFHLGdHQUFnRyxDQUFDO0lBQ3ZJLG1DQUFtQzthQUNYLGdCQUFXLEdBQUcsMDBDQUEwMEMsQ0FBQzthQUN6MUMsb0JBQWUsR0FBRyw0QkFBNEIsQ0FBQzthQUMvQyxpQkFBWSxHQUFHLE9BQU8sQ0FBQzthQUN2QixtQkFBYyxHQUFHLFNBQVMsQ0FBQzthQUMzQixrQkFBYSxHQUFHLHFGQUFxRixDQUFDLEdBQUMsVUFBVTthQUNqSCxjQUFTLEdBQXFCLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3pELE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBVTtRQUNwQyxPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELG1DQUFtQztJQUM1QixNQUFNLENBQUMsVUFBVSxDQUFDLE9BQXdCO1FBQy9DLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQztRQUNmLElBQUksT0FBTyxPQUFPLENBQUMsS0FBSyxLQUFLLFFBQVEsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekcsR0FBRyxHQUFHLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDO1FBQzdCLENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FB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QUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQzdFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG4vLyBAZHluYW1pY1xuZXhwb3J0IGNsYXNzIERWYWxpZGF0b3JzIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgU2NyaXB0UGF0dGVybiA9IC88K1xcLz9bU3NdW0NjXVtScl1bSWldW1BwXVtUdF0gKi4qPiovO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBVcmxQYXR0ZXJuID0gL14oaHR0cHM/fHM/ZnRwKTpcXC9cXC8oKCgoW2Etel18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KCVbXFxkYS1mXXsyfSl8WyFcXCQmJ1xcKFxcKVxcKlxcKyw7PV18OikqQCk/KCgoKCgxP1sxLTldP1xcZCl8KDEwXFxkKXwoMlswLTRdXFxkKXwoMjVbMC01XSkpXFwuKXszfSgoMT9bMS05XT9cXGQpfCgxMFxcZCl8KDJbMC00XVxcZCl8KDI1WzAtNV0pKSl8KCgoW2Etel18XFxkfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoKFthLXpdfFxcZHxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkoW2Etel18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkqKFthLXpdfFxcZHxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkpKVxcLikrKChbYS16XXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KChbYS16XXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkoW2Etel18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkqKFthLXpdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSkpXFwuPykoOlxcZCopPykoXFwvKCgoW2Etel18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KCVbXFxkYS1mXXsyfSl8WyFcXCQmJ1xcKFxcKVxcKlxcKyw7PV18OnxAKSsoXFwvKChbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoJVtcXGRhLWZdezJ9KXxbIVxcJCYnXFwoXFwpXFwqXFwrLDs9XXw6fEApKikqKT8pPyhcXD8oKChbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoJVtcXGRhLWZdezJ9KXxbIVxcJCYnXFwoXFwpXFwqXFwrLDs9XXw6fEApfFtcXHVFMDAwLVxcdUY4RkZdfFxcL3xcXD8pKik/KCMoKChbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoJVtcXGRhLWZdezJ9KXxbIVxcJCYnXFwoXFwpXFwqXFwrLDs9XXw6fEApfFxcL3xcXD8pKik/JC9pO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBJcHY0UGF0dGVybiA9IC9eKCgoMT9bMS05XT9cXGQpfCgxMFxcZCl8KDJbMC00XVxcZCl8KDI1WzAtNV0pKVxcLil7M30oKDE/WzEtOV0/XFxkKXwoMTBcXGQpfCgyWzAtNF1cXGQpfCgyNVswLTVdKSkkL2k7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IElwdjZQYXR0ZXJuID0gL14oKCgoW1xcZGEtZl17MSw0fSk6KXs3fShbXFxkYS1mXXsxLDR9KSl8KCgoKFtcXGRhLWZdezEsNH0pOil7MSw3fTopfCgoKFtcXGRhLWZdezEsNH0pOil7Nn06KFtcXGRhLWZdezEsNH0pKXwoKChbXFxkYS1mXXsxLDR9KTopezV9OigoW1xcZGEtZl17MSw0fSk6KT8oW1xcZGEtZl17MSw0fSkpfCgoKFtcXGRhLWZdezEsNH0pOil7NH06KChbXFxkYS1mXXsxLDR9KTopezAsMn0oW1xcZGEtZl17MSw0fSkpfCgoKFtcXGRhLWZdezEsNH0pOil7M306KChbXFxkYS1mXXsxLDR9KTopezAsM30oW1xcZGEtZl17MSw0fSkpfCgoKFtcXGRhLWZdezEsNH0pOil7Mn06KChbXFxkYS1mXXsxLDR9KTopezAsNH0oW1xcZGEtZl17MSw0fSkpfCgoKFtcXGRhLWZdezEsNH0pOil7MX06KChbXFxkYS1mXXsxLDR9KTopezAsNX0oW1xcZGEtZl17MSw0fSkpfCg6OigoW1xcZGEtZl17MSw0fSk6KXswLDZ9KFtcXGRhLWZdezEsNH0pKXwoOjooW1xcZGEtZl17MSw0fSk/KSl8KCgoKFtcXGRhLWZdezEsNH0pOil7Nn0oKCgxP1sxLTldP1xcZCl8KDEwXFxkKXwoMlswLTRdXFxkKXwoMjVbMC01XSkpXFwuKXszfSgoMT9bMS05XT9cXGQpfCgxMFxcZCl8KDJbMC00XVxcZCl8KDI1WzAtNV0pKSl8KCgoW1xcZGEtZl17MSw0fSk6KXs1fTooKCgxP1sxLTldP1xcZCl8KDEwXFxkKXwoMlswLTRdXFxkKXwoMjVbMC01XSkpXFwuKXszfSgoMT9bMS05XT9cXGQpfCgxMFxcZCl8KDJbMC00XVxcZCl8KDI1WzAtNV0pKSl8KCgoW1xcZGEtZl17MSw0fSk6KXs0fTooKFtcXGRhLWZdezEsNH0pOik/KCgoMT9bMS05XT9cXGQpfCgxMFxcZCl8KDJbMC00XVxcZCl8KDI1WzAtNV0pKVxcLil7M30oKDE/WzEtOV0/XFxkKXwoMTBcXGQpfCgyWzAtNF1cXGQpfCgyNVswLTVdKSkpfCgoKFtcXGRhLWZdezEsNH0pOil7M306KChbXFxkYS1mXXsxLDR9KTopezAsMn0oKCgxP1sxLTldP1xcZCl8KDEwXFxkKXwoMlswLTRdXFxkKXwoMjVbMC01XSkpXFwuKXszfSgoMT9bMS05XT9cXGQpfCgxMFxcZCl8KDJbMC00XVxcZCl8KDI1WzAtNV0pKSl8KCgoW1xcZGEtZl17MSw0fSk6KXsyfTooKFtcXGRhLWZdezEsNH0pOil7MCwzfSgoKDE/WzEtOV0/XFxkKXwoMTBcXGQpfCgyWzAtNF1cXGQpfCgyNVswLTVdKSlcXC4pezN9KCgxP1sxLTldP1xcZCl8KDEwXFxkKXwoMlswLTRdXFxkKXwoMjVbMC01XSkpKXwoKFtcXGRhLWZdezEsNH0pOjooKFtcXGRhLWZdezEsNH0pOil7MCw0fSgoKDE/WzEtOV0/XFxkKXwoMTBcXGQpfCgyWzAtNF1cXGQpfCgyNVswLTVdKSlcXC4pezN9KCgxP1sxLTldP1xcZCl8KDEwXFxkKXwoMlswLTRdXFxkKXwoMjVbMC01XSkpKXwoOjooKFtcXGRhLWZdezEsNH0pOil7MCw1fSgoKDE/WzEtOV0/XFxkKXwoMTBcXGQpfCgyWzAtNF1cXGQpfCgyNVswLTVdKSlcXC4pezN9KCgxP1sxLTldP1xcZCl8KDEwXFxkKXwoMlswLTRdXFxkKXwoMjVbMC01XSkpKSkpJC9pO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBbHBoYWJldFBhdHRlcm4gPSAvXlthLXpBLVpdKyhcXHMrW2EtekEtWl0rKSokLztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgRGlnaXRQYXR0ZXJuID0gL15cXGQrJC87XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEludGVnZXJQYXR0ZXJuID0gL14tP1xcZCskLztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgTnVtYmVyUGF0dGVybiA9IC9eKD86LT9cXGQrfFsrLV0/W1xcZF0rKFtcXC5dW1xcZF0rKT8oW0VlXVsrLV0/W1xcZF0rKT98LT9cXGR7MSwzfSg/OixcXGR7M30pKyk/KD86XFwuXFxkKyk/JC87IC8vIOaUr+aMgeenkeWtpuiuoeaVsOazlVxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBQb3J0UmFuZ2U6IFtudW1iZXIsIG51bWJlcl0gPSBbMCwgNjU1MzVdO1xuICBwcml2YXRlIHN0YXRpYyBpc0VtcHR5SW5wdXQodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZS5sZW5ndGggPT09IDA7XG4gIH1cblxuICAvKiBGYWlsZWQgaWYgb25seSBoYXMgd2hpdGVzcGFjZSAqL1xuICBwdWJsaWMgc3RhdGljIHdoaXRlU3BhY2UoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGxldCByZXMgPSBudWxsO1xuICAgIGlmICh0eXBlb2YgY29udHJvbC52YWx1ZSA9PT0gJ3N0cmluZycgJiYgY29udHJvbC52YWx1ZS5sZW5ndGggIT09IDAgJiYgY29udHJvbC52YWx1ZS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXMgPSB7IHdoaXRlc3BhY2U6IHRydWUgfTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIC8qKlxuICAgKiDmoKHpqozmmK/lkKbljIXlkKtcbiAgICogQHBhcmFtIGNvbnRhaW5cbiAgICogQHJldHVybnNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGFpbnMoY29udGFpbjogc3RyaW5nIHwgbnVtYmVyKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgaWYgKERWYWxpZGF0b3JzLmlzRW1wdHlJbnB1dChjb250cm9sLnZhbHVlKSB8fCBEVmFsaWRhdG9ycy5pc0VtcHR5SW5wdXQoY29udGFpbikpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250cm9sLnZhbHVlLmluZGV4T2YoY29udGFpbikgPT09IC0xID8geyBjb250YWluczogeyByZXF1aXJlZENvbnRhaW5zOiBjb250YWluLCBhY3R1YWxWYWx1ZTogY29udHJvbC52YWx1ZSB9IH0gOiBudWxsO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICog5qCh6aqM5piv5ZCm5LiN5YyF5ZCrXG4gICAqIEBwYXJhbSBjb250YWluXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG5vdENvbnRhaW5zKGNvbnRhaW46IHN0cmluZyB8IG51bWJlcik6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGlmIChEVmFsaWRhdG9ycy5pc0VtcHR5SW5wdXQoY29udHJvbC52YWx1ZSkgfHwgRFZhbGlkYXRvcnMuaXNFbXB0eUlucHV0KGNvbnRhaW4pKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udHJvbC52YWx1ZS5pbmRleE9mKGNvbnRhaW4pICE9PSAtMSA/IHsgbm90Q29udGFpbnM6IHsgcmVxdWlyZWROb3RDb250YWluczogY29udGFpbiwgYWN0dWFsVmFsdWU6IGNvbnRyb2wudmFsdWUgfSB9IDogbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIOagoemqjOaYr+WQpuebuOetiVxuICAgKiBAcGFyYW0gZXF1YWxcbiAgICogQHJldHVybnNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZXF1YWwoZXF1YWw6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4pOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBpZiAoRFZhbGlkYXRvcnMuaXNFbXB0eUlucHV0KGNvbnRyb2wudmFsdWUpIHx8IERWYWxpZGF0b3JzLmlzRW1wdHlJbnB1dChlcXVhbCkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250cm9sLnZhbHVlICE9PSBlcXVhbCA/IHsgZXF1YWw6IHsgcmVxdWlyZWRFcXVhbDogZXF1YWwsIGFjdHVhbFZhbHVlOiBjb250cm9sLnZhbHVlIH0gfSA6IG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiDmoKHpqozmmK/lkKbkuI3nm7jnrYlcbiAgICogQHBhcmFtIGVxdWFsXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG5vdEVxdWFsKGVxdWFsOiBzdHJpbmcgfCBudW1iZXIpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBpZiAoRFZhbGlkYXRvcnMuaXNFbXB0eUlucHV0KGNvbnRyb2wudmFsdWUpIHx8IERWYWxpZGF0b3JzLmlzRW1wdHlJbnB1dChlcXVhbCkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250cm9sLnZhbHVlID09PSBlcXVhbCA/IHsgbm90RXF1YWw6IHsgcmVxdWlyZWROb3RFcXVhbDogZXF1YWwsIGFjdHVhbFZhbHVlOiBjb250cm9sLnZhbHVlIH0gfSA6IG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiDmoKHpqoznq6/lj6Plj7dcbiAgICogQHBhcmFtIGNvbnRyb2xcbiAgICogQHJldHVybnNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcG9ydChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgaWYgKERWYWxpZGF0b3JzLmlzRW1wdHlJbnB1dChjb250cm9sLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIERWYWxpZGF0b3JzLkRpZ2l0UGF0dGVybi50ZXN0KGNvbnRyb2wudmFsdWUpICYmXG4gICAgICBjb250cm9sLnZhbHVlID49IERWYWxpZGF0b3JzLlBvcnRSYW5nZVswXSAmJlxuICAgICAgY29udHJvbC52YWx1ZSA8PSBEVmFsaWRhdG9ycy5Qb3J0UmFuZ2VbMV1cbiAgICAgID8gbnVsbFxuICAgICAgOiB7IHBvcnQ6IHsgbWluOiBEVmFsaWRhdG9ycy5Qb3J0UmFuZ2VbMF0sIG1heDogRFZhbGlkYXRvcnMuUG9ydFJhbmdlWzFdIH0gfTtcbiAgfVxuXG4gIC8qKlxuICAgKiDmoKHpqozml6XmnJ/mmK/lkKblkIjms5VcbiAgICogQHBhcmFtIGNvbnRyb2xcbiAgICogQHJldHVybnNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgaWYgKERWYWxpZGF0b3JzLmlzRW1wdHlJbnB1dChjb250cm9sLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIG51bGw7IC8vIGRvbid0IHZhbGlkYXRlIGVtcHR5IHZhbHVlcyB0byBhbGxvdyBvcHRpb25hbCBjb250cm9sc1xuICAgIH1cblxuICAgIHJldHVybiAhL0ludmFsaWR8TmFOLy50ZXN0KG5ldyBEYXRlKGNvbnRyb2wudmFsdWUpLnRvU3RyaW5nKCkpID8gbnVsbCA6IHsgZGF0ZTogdHJ1ZSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIOagoemqjCB1cmwg5piv5ZCm5ZCI5rOVXG4gICAqIEBwYXJhbSBjb250cm9sXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHVybChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgaWYgKERWYWxpZGF0b3JzLmlzRW1wdHlJbnB1dChjb250cm9sLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIG51bGw7IC8vIGRvbid0IHZhbGlkYXRlIGVtcHR5IHZhbHVlcyB0byBhbGxvdyBvcHRpb25hbCBjb250cm9sc1xuICAgIH1cblxuICAgIHJldHVybiBEVmFsaWRhdG9ycy5VcmxQYXR0ZXJuLnRlc3QoY29udHJvbC52YWx1ZSkgPyBudWxsIDogeyB1cmw6IHRydWUgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiDmoKHpqozmlbTmlbBcbiAgICogQHBhcmFtIGNvbnRyb2xcbiAgICogQHJldHVybnNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaW50ZWdlcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgaWYgKERWYWxpZGF0b3JzLmlzRW1wdHlJbnB1dChjb250cm9sLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIG51bGw7IC8vIGRvbid0IHZhbGlkYXRlIGVtcHR5IHZhbHVlcyB0byBhbGxvdyBvcHRpb25hbCBjb250cm9sc1xuICAgIH1cblxuICAgIHJldHVybiBEVmFsaWRhdG9ycy5JbnRlZ2VyUGF0dGVybi50ZXN0KGNvbnRyb2wudmFsdWUpID8gbnVsbCA6IHsgaW50ZWdlcjogdHJ1ZSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIOagoemqjOaYr+WQpuaYr+aVsOWtl1xuICAgKiBAcGFyYW0gY29udHJvbFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkaWdpdHMoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGlmIChEVmFsaWRhdG9ycy5pc0VtcHR5SW5wdXQoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiBudWxsOyAvLyBkb24ndCB2YWxpZGF0ZSBlbXB0eSB2YWx1ZXMgdG8gYWxsb3cgb3B0aW9uYWwgY29udHJvbHNcbiAgICB9XG5cbiAgICByZXR1cm4gRFZhbGlkYXRvcnMuRGlnaXRQYXR0ZXJuLnRlc3QoY29udHJvbC52YWx1ZSkgPyBudWxsIDogeyBkaWdpdHM6IHRydWUgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiDmoKHpqozmlbDlrZfvvIzmlK/mjIHnp5HlraborqHmlbDms5VcbiAgICogQHBhcmFtIGNvbnRyb2xcbiAgICogQHJldHVybnNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbnVtYmVyKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBpZiAoRFZhbGlkYXRvcnMuaXNFbXB0eUlucHV0KGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4gbnVsbDsgLy8gZG9uJ3QgdmFsaWRhdGUgZW1wdHkgdmFsdWVzIHRvIGFsbG93IG9wdGlvbmFsIGNvbnRyb2xzXG4gICAgfVxuXG4gICAgcmV0dXJuIERWYWxpZGF0b3JzLk51bWJlclBhdHRlcm4udGVzdChjb250cm9sLnZhbHVlKSA/IG51bGwgOiB7IG51bWJlcjogdHJ1ZSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIOagoemqjOaYr+WQpuaYr+Wtl+avjVxuICAgKiBAcGFyYW0gY29udHJvbFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhbHBoYWJldChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgaWYgKERWYWxpZGF0b3JzLmlzRW1wdHlJbnB1dChjb250cm9sLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIERWYWxpZGF0b3JzLkFscGhhYmV0UGF0dGVybi50ZXN0KGNvbnRyb2wudmFsdWUpID8gbnVsbCA6IHsgYWxwaGFiZXQ6IHRydWUgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiDmoKHpqozmmK8gc2NyaXB0IOagh+etvlxuICAgKiBAcGFyYW0gY29udHJvbFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBub3RTY3JpcHQoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGlmIChEVmFsaWRhdG9ycy5pc0VtcHR5SW5wdXQoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBEVmFsaWRhdG9ycy5TY3JpcHRQYXR0ZXJuLnRlc3QoY29udHJvbC52YWx1ZSkgPyB7IG5vdFNjcmlwdDogdHJ1ZSB9IDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiDmoKHpqowgaXB2NFxuICAgKiBAcGFyYW0gY29udHJvbFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpcHY0KGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBpZiAoRFZhbGlkYXRvcnMuaXNFbXB0eUlucHV0KGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gRFZhbGlkYXRvcnMuSXB2NFBhdHRlcm4udGVzdChjb250cm9sLnZhbHVlKSA/IG51bGwgOiB7IGlwdjQ6IHRydWUgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiDmoKHpqowgaXB2NlxuICAgKiBAcGFyYW0gY29udHJvbFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpcHY2KGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBpZiAoRFZhbGlkYXRvcnMuaXNFbXB0eUlucHV0KGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gRFZhbGlkYXRvcnMuSXB2NlBhdHRlcm4udGVzdChjb250cm9sLnZhbHVlKSA/IG51bGwgOiB7IGlwdjY6IHRydWUgfTtcbiAgfVxufVxuIl19