@crediblefinance/credible-ui
Version:
Credible's standard UI library
195 lines • 23.4 kB
JavaScript
import { Injectable } from '@angular/core';
import * as i0 from "@angular/core";
export class UtilityFunctions {
constructor() { }
/** Validate the text passed */
validateText(str, length, maxLength) {
str = str ? str.toString() : '';
if (str) {
if (!str.trim() || str.trim() === '' || (length && str.length < length) || (maxLength && str.length > maxLength))
return false;
return true;
}
return false;
}
// Required validator function
requiredValidator(errorMessage) {
return (control) => {
const value = control.value;
if (!value || !this.validateText(value)) {
if (errorMessage) {
return {
required: errorMessage
};
}
else {
return {
required: 'This field is required'
};
}
}
return null;
};
}
// Required validator function
maxlengthValidator(fieldName = '', length, input_type = 'string') {
return (control) => {
const value = control.value;
if (value && !this.validateText(value, null, length)) {
if (fieldName) {
return {
maxlength: `${fieldName} can't be greater than ${length} ${input_type === 'string' ? 'characters' : 'digits'}`
};
}
else {
return {
maxlength: `Value can't be greater than ${length} ${input_type === 'string' ? 'characters' : 'digits'}`
};
}
}
return null;
};
}
// Required validator function
minlengthValidator(fieldName = '', length, input_type = 'string') {
return (control) => {
const value = control.value;
if (value && !this.validateText(value, length)) {
if (fieldName) {
return {
minlength: `${fieldName} can't be lesser than ${length} ${input_type === 'string' ? 'characters' : 'digits'}`
};
}
else {
return {
minlength: `Value can't be lesser than ${length} ${input_type === 'string' ? 'characters' : 'digits'}`
};
}
}
return null;
};
}
// Email form control validator function
emailValidator = function (control) {
const email = control.value;
const regExp = /^([A-Za-z0-9_\-\.]+)@[A-Za-z0-9-]+(\.[A-Za-z0-9-]+)*(\.[A-Za-z]{2,3})$/;
if (email && !regExp.test(email)) {
return {
email: 'Please enter a valid email address'
};
}
return null;
};
// Only numeric validator
onlyNumber(errorMessage) {
return (control) => {
const value = control.value;
const regExp = new RegExp('^[0-9]*$');
if (value && !regExp.test(value)) {
if (errorMessage) {
return {
onlyNumber: errorMessage
};
}
else {
return {
onlyNumber: 'Please enter a valid number. Only numbers are allowed.'
};
}
}
return null;
};
}
// Only alpha numeric hyphen validator
password(errorMessage) {
return (control) => {
const regExp = new RegExp('^(?=.*[0-9])(?=.*[!@#\$%\^&\*])(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9!@#\$%\^&\*]{8,}$');
const value = control.value;
if (value && !regExp.test(value)) {
if (errorMessage) {
return {
password: errorMessage
};
}
else {
return {
password: 'Password must contain minimum 8 and maximum 50 characters, at least one uppercase letter, one lowercase letter, one number and one special character'
};
}
}
return null;
};
}
//minimum value validation
minValueValidator(fieldName, value) {
return (control) => {
const inputValue = control.value;
if (inputValue && (Number(inputValue) < Number(value))) {
if (fieldName) {
return {
minvalue: `${fieldName} can't be lesser than ${value}`
};
}
else {
return {
minvalue: `Value can't be lesser than ${value}`
};
}
}
return null;
};
}
//maximum value validation
maxValueValidator(fieldName, value) {
return (control) => {
const inputValue = control.value;
if (inputValue && (Number(inputValue) > Number(value))) {
if (fieldName) {
return {
maxvalue: `${fieldName} can't be greater than ${value}`
};
}
else {
return {
maxvalue: `Value can't be greater than ${value}`
};
}
}
return null;
};
}
//patern validator
patternValidator(regex, fieldName, errorMessage) {
return (control) => {
const regExp = new RegExp(regex);
const value = control.value;
if (value && !regExp.test(value)) {
if (errorMessage) {
return {
pattern: errorMessage
};
}
else if (fieldName) {
return {
pattern: `Please enter valid ${fieldName}`
};
}
else {
return {
pattern: 'Please enter valid pattern'
};
}
}
return null;
};
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: UtilityFunctions, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: UtilityFunctions, providedIn: 'root' });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: UtilityFunctions, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: () => [] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0eUZ1bmN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NyZWRpYmxlLXVpL3NyYy9saWIvdXRpbGl0eS91dGlsaXR5RnVuY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBUTNDLE1BQU0sT0FBTyxnQkFBZ0I7SUFDekIsZ0JBQWdCLENBQUM7SUFFakIsK0JBQStCO0lBQy9CLFlBQVksQ0FBQyxHQUFXLEVBQUUsTUFBa0MsRUFBRSxTQUE4QjtRQUN4RixHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUVoQyxJQUFJLEdBQUcsRUFBRTtZQUNMLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO2dCQUM1RyxPQUFPLEtBQUssQ0FBQztZQUVqQixPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELDhCQUE4QjtJQUN2QixpQkFBaUIsQ0FBQyxZQUFxQjtRQUMxQyxPQUFPLENBQUMsT0FBd0IsRUFBMkIsRUFBRTtZQUN6RCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBRTVCLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNyQyxJQUFJLFlBQVksRUFBRTtvQkFDZCxPQUFPO3dCQUNILFFBQVEsRUFBRSxZQUFZO3FCQUN6QixDQUFDO2lC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QUFDO0lBQ04sQ0FBQzt1R0F0TlEsZ0JBQWdCOzJHQUFoQixnQkFBZ0IsY0FGYixNQUFNOzsyRkFFVCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvckZuIFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgVXRpbGl0eUZ1bmN0aW9ucyB7XG4gICAgY29uc3RydWN0b3IoKSB7IH1cblxuICAgIC8qKiBWYWxpZGF0ZSB0aGUgdGV4dCBwYXNzZWQgKi9cbiAgICB2YWxpZGF0ZVRleHQoc3RyOiBzdHJpbmcsIGxlbmd0aD86IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsIG1heExlbmd0aD86IG51bWJlciB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgICAgICBzdHIgPSBzdHIgPyBzdHIudG9TdHJpbmcoKSA6ICcnO1xuXG4gICAgICAgIGlmIChzdHIpIHtcbiAgICAgICAgICAgIGlmICghc3RyLnRyaW0oKSB8fCBzdHIudHJpbSgpID09PSAnJyB8fCAobGVuZ3RoICYmIHN0ci5sZW5ndGggPCBsZW5ndGgpIHx8IChtYXhMZW5ndGggJiYgc3RyLmxlbmd0aCA+IG1heExlbmd0aCkpIFxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gUmVxdWlyZWQgdmFsaWRhdG9yIGZ1bmN0aW9uXG4gICAgcHVibGljIHJlcXVpcmVkVmFsaWRhdG9yKGVycm9yTWVzc2FnZT86IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcbiAgICAgICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICghdmFsdWUgfHwgIXRoaXMudmFsaWRhdGVUZXh0KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBlcnJvck1lc3NhZ2UgXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICdUaGlzIGZpZWxkIGlzIHJlcXVpcmVkJyBcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIFJlcXVpcmVkIHZhbGlkYXRvciBmdW5jdGlvblxuICAgIHB1YmxpYyBtYXhsZW5ndGhWYWxpZGF0b3IoZmllbGROYW1lOiBzdHJpbmcgPSAnJywgbGVuZ3RoOiBudW1iZXIsIGlucHV0X3R5cGU6IHN0cmluZyB8IG51bWJlciA9ICdzdHJpbmcnKTogVmFsaWRhdG9yRm4ge1xuICAgICAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHZhbHVlICYmICF0aGlzLnZhbGlkYXRlVGV4dCh2YWx1ZSwgbnVsbCwgbGVuZ3RoKSkge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heGxlbmd0aDogYCR7ZmllbGROYW1lfSBjYW4ndCBiZSBncmVhdGVyIHRoYW4gJHtsZW5ndGh9ICR7aW5wdXRfdHlwZSA9PT0gJ3N0cmluZycgPyAnY2hhcmFjdGVycycgOiAnZGlnaXRzJ31gXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoOiBgVmFsdWUgY2FuJ3QgYmUgZ3JlYXRlciB0aGFuICR7bGVuZ3RofSAke2lucHV0X3R5cGUgPT09ICdzdHJpbmcnID8gJ2NoYXJhY3RlcnMnIDogJ2RpZ2l0cyd9YFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gUmVxdWlyZWQgdmFsaWRhdG9yIGZ1bmN0aW9uXG4gICAgcHVibGljIG1pbmxlbmd0aFZhbGlkYXRvcihmaWVsZE5hbWU6IHN0cmluZyA9ICcnLCBsZW5ndGg6IG51bWJlciwgaW5wdXRfdHlwZTogc3RyaW5nIHwgbnVtYmVyID0gJ3N0cmluZycpOiBWYWxpZGF0b3JGbiB7XG4gICAgICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjb250cm9sLnZhbHVlO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAodmFsdWUgJiYgIXRoaXMudmFsaWRhdGVUZXh0KHZhbHVlLCBsZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWlubGVuZ3RoOiBgJHtmaWVsZE5hbWV9IGNhbid0IGJlIGxlc3NlciB0aGFuICR7bGVuZ3RofSAke2lucHV0X3R5cGUgPT09ICdzdHJpbmcnID8gJ2NoYXJhY3RlcnMnIDogJ2RpZ2l0cyd9YFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbmxlbmd0aDogYFZhbHVlIGNhbid0IGJlIGxlc3NlciB0aGFuICR7bGVuZ3RofSAke2lucHV0X3R5cGUgPT09ICdzdHJpbmcnID8gJ2NoYXJhY3RlcnMnIDogJ2RpZ2l0cyd9YFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gRW1haWwgZm9ybSBjb250cm9sIHZhbGlkYXRvciBmdW5jdGlvblxuICAgIHB1YmxpYyBlbWFpbFZhbGlkYXRvciA9IGZ1bmN0aW9uIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpIHtcbiAgICAgICAgY29uc3QgZW1haWwgPSBjb250cm9sLnZhbHVlO1xuICAgICAgICBjb25zdCByZWdFeHAgPSAvXihbQS1aYS16MC05X1xcLVxcLl0rKUBbQS1aYS16MC05LV0rKFxcLltBLVphLXowLTktXSspKihcXC5bQS1aYS16XXsyLDN9KSQvO1xuICAgICAgICBcbiAgICAgICAgaWYgKGVtYWlsICYmICFyZWdFeHAudGVzdChlbWFpbCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZW1haWw6ICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICAvLyBPbmx5IG51bWVyaWMgdmFsaWRhdG9yXG4gICAgcHVibGljIG9ubHlOdW1iZXIoZXJyb3JNZXNzYWdlPzogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xuICAgICAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IHJlZ0V4cDogUmVnRXhwID0gbmV3IFJlZ0V4cCgnXlswLTldKiQnKTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlICYmICFyZWdFeHAudGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbmx5TnVtYmVyOiBlcnJvck1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbmx5TnVtYmVyOiAnUGxlYXNlIGVudGVyIGEgdmFsaWQgbnVtYmVyLiBPbmx5IG51bWJlcnMgYXJlIGFsbG93ZWQuJ1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gT25seSBhbHBoYSBudW1lcmljIGh5cGhlbiB2YWxpZGF0b3JcbiAgICBwdWJsaWMgcGFzc3dvcmQoZXJyb3JNZXNzYWdlPzogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xuICAgICAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlZ0V4cDogUmVnRXhwID0gbmV3IFJlZ0V4cCgnXig/PS4qWzAtOV0pKD89LipbIUAjXFwkJVxcXiZcXCpdKSg/PS4qW2Etel0pKD89LipbQS1aXSlbYS16QS1aMC05IUAjXFwkJVxcXiZcXCpdezgsfSQnKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlICYmICFyZWdFeHAudGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZDogZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQ6ICdQYXNzd29yZCBtdXN0IGNvbnRhaW4gbWluaW11bSA4IGFuZCBtYXhpbXVtIDUwIGNoYXJhY3RlcnMsIGF0IGxlYXN0IG9uZSB1cHBlcmNhc2UgbGV0dGVyLCBvbmUgbG93ZXJjYXNlIGxldHRlciwgb25lIG51bWJlciBhbmQgb25lIHNwZWNpYWwgY2hhcmFjdGVyJ1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy9taW5pbXVtIHZhbHVlIHZhbGlkYXRpb25cbiAgICBwdWJsaWMgbWluVmFsdWVWYWxpZGF0b3IoZmllbGROYW1lOiBzdHJpbmcsIHZhbHVlOiBudW1iZXIgfCBzdHJpbmcpOiBWYWxpZGF0b3JGbiB7XG4gICAgICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5wdXRWYWx1ZSA9IGNvbnRyb2wudmFsdWU7XG5cbiAgICAgICAgICAgIGlmIChpbnB1dFZhbHVlICYmIChOdW1iZXIoaW5wdXRWYWx1ZSkgPCBOdW1iZXIodmFsdWUpKSkge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbnZhbHVlOiBgJHtmaWVsZE5hbWV9IGNhbid0IGJlIGxlc3NlciB0aGFuICR7dmFsdWV9YFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbnZhbHVlOiBgVmFsdWUgY2FuJ3QgYmUgbGVzc2VyIHRoYW4gJHt2YWx1ZX1gXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvL21heGltdW0gdmFsdWUgdmFsaWRhdGlvblxuICAgIHB1YmxpYyBtYXhWYWx1ZVZhbGlkYXRvcihmaWVsZE5hbWU6IHN0cmluZywgdmFsdWU6IG51bWJlciB8IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcbiAgICAgICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dFZhbHVlID0gY29udHJvbC52YWx1ZTtcblxuICAgICAgICAgICAgaWYgKGlucHV0VmFsdWUgJiYgKE51bWJlcihpbnB1dFZhbHVlKSA+IE51bWJlcih2YWx1ZSkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF4dmFsdWU6IGAke2ZpZWxkTmFtZX0gY2FuJ3QgYmUgZ3JlYXRlciB0aGFuICR7dmFsdWV9YFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF4dmFsdWU6IGBWYWx1ZSBjYW4ndCBiZSBncmVhdGVyIHRoYW4gJHt2YWx1ZX1gXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvL3BhdGVybiB2YWxpZGF0b3JcbiAgICBwdWJsaWMgcGF0dGVyblZhbGlkYXRvcihyZWdleDogc3RyaW5nLCBmaWVsZE5hbWU/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLCBlcnJvck1lc3NhZ2U/OiBzdHJpbmcpOiBWYWxpZGF0b3JGbiB7XG4gICAgICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVnRXhwOiBSZWdFeHAgPSBuZXcgUmVnRXhwKHJlZ2V4KTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlICYmICFyZWdFeHAudGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuOiBlcnJvck1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZmllbGROYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuOiBgUGxlYXNlIGVudGVyIHZhbGlkICR7ZmllbGROYW1lfWBcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuOiAnUGxlYXNlIGVudGVyIHZhbGlkIHBhdHRlcm4nXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG59Il19