UNPKG

@crediblefinance/credible-ui

Version:

Credible's standard UI library

195 lines 23.4 kB
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