@senior-agronegocio/angular-components 0.0.71-origination → 0.0.73-origination
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/bundles/senior-agronegocio-angular-components.umd.js +19 -5
- package/bundles/senior-agronegocio-angular-components.umd.js.map +1 -1
- package/bundles/senior-agronegocio-angular-components.umd.min.js +1 -1
- package/bundles/senior-agronegocio-angular-components.umd.min.js.map +1 -1
- package/common/agro-cookie-utils.class.d.ts +2 -1
- package/esm2015/common/agro-cookie-utils.class.js +14 -2
- package/esm2015/form-validator/agro-form-validator.js +7 -5
- package/esm5/common/agro-cookie-utils.class.js +14 -2
- package/esm5/form-validator/agro-form-validator.js +7 -5
- package/fesm2015/senior-agronegocio-angular-components.js +19 -5
- package/fesm2015/senior-agronegocio-angular-components.js.map +1 -1
- package/fesm5/senior-agronegocio-angular-components.js +19 -5
- package/fesm5/senior-agronegocio-angular-components.js.map +1 -1
- package/form-validator/agro-form-validator.d.ts +2 -2
- package/package.json +1 -1
|
@@ -4,5 +4,6 @@ export declare class AgroCookieUtils {
|
|
|
4
4
|
static parseCookieToObject(cookieString: string, parseURIString?: boolean): {
|
|
5
5
|
[key: string]: string;
|
|
6
6
|
};
|
|
7
|
-
|
|
7
|
+
static isStringAnObject(str: string): boolean;
|
|
8
|
+
static setCookie(name: string, value: string, days: number): void;
|
|
8
9
|
}
|
|
@@ -15,17 +15,29 @@ export class AgroCookieUtils {
|
|
|
15
15
|
if (parseURIString) {
|
|
16
16
|
cookieString = decodeURIComponent(cookieString);
|
|
17
17
|
}
|
|
18
|
+
if (AgroCookieUtils.isStringAnObject(cookieString)) {
|
|
19
|
+
return JSON.parse(cookieString);
|
|
20
|
+
}
|
|
18
21
|
cookieString.split(';').forEach(cookie => {
|
|
19
22
|
const [key, value] = cookie.split('=').map(c => c.trim());
|
|
20
23
|
cookieObject[key] = value;
|
|
21
24
|
});
|
|
22
25
|
return cookieObject;
|
|
23
26
|
}
|
|
24
|
-
|
|
27
|
+
static isStringAnObject(str) {
|
|
28
|
+
try {
|
|
29
|
+
const parsed = JSON.parse(str);
|
|
30
|
+
return typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed);
|
|
31
|
+
}
|
|
32
|
+
catch (e) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
static setCookie(name, value, days) {
|
|
25
37
|
const date = new Date();
|
|
26
38
|
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
|
|
27
39
|
const expires = 'expires=' + date.toUTCString();
|
|
28
40
|
document.cookie = name + '=' + value + ';' + expires + ';path=/';
|
|
29
41
|
}
|
|
30
42
|
}
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdyby1jb29raWUtdXRpbHMuY2xhc3MuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yLWFncm9uZWdvY2lvL2FuZ3VsYXItY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImNvbW1vbi9hZ3JvLWNvb2tpZS11dGlscy5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZUFBZSxJQUFJLEdBQUcsRUFBRSxlQUFlLElBQUksV0FBVyxFQUFFLENBQUM7QUFFbEUsTUFBTSxPQUFPLGVBQWU7SUFFakIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFZLEVBQUUsYUFBYSxHQUFHLEtBQUs7UUFDdkQsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO2FBQ3pDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDN0MsSUFBSSxNQUFNLEdBQUcsV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFeEMsSUFBSSxhQUFhLElBQUksTUFBTSxFQUFFO1lBQ3pCLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN2QztRQUNELE9BQU8sTUFBTSxDQUFDO0lBRWxCLENBQUM7SUFFTSxNQUFNLENBQUMsbUJBQW1CLENBQUMsWUFBb0IsRUFBRSxjQUFjLEdBQUcsS0FBSztRQUMxRSxNQUFNLFlBQVksR0FBOEIsRUFBRSxDQUFDO1FBQ25ELElBQUksY0FBYyxFQUFFO1lBQ2hCLFlBQVksR0FBRyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUNuRDtRQUNELElBQUksZUFBZSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQ2hELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUNuQztRQUNELFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3JDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUMxRCxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxZQUFZLENBQUM7SUFDeEIsQ0FBQztJQUVNLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFXO1FBQ3RDLElBQUk7WUFDQSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQy9CLE9BQU8sT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2xGO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDUixPQUFPLEtBQUssQ0FBQztTQUNoQjtJQUNMLENBQUM7SUFFTSxNQUFNLENBQUMsU0FBUyxDQUFDLElBQVksRUFBRSxLQUFhLEVBQUUsSUFBWTtRQUM3RCxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDNUQsTUFBTSxPQUFPLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNoRCxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxPQUFPLEdBQUcsU0FBUyxDQUFDO0lBQ3JFLENBQUM7Q0FHSiIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5leHBvcnQgeyBBZ3JvQ29va2llVXRpbHMgYXMgQUNVLCBBZ3JvQ29va2llVXRpbHMgYXMgQ29va2llVXRpbHMgfTtcclxuXHJcbmV4cG9ydCBjbGFzcyBBZ3JvQ29va2llVXRpbHMge1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0Q29va2llKG5hbWU6IHN0cmluZywgcGFyc2VVUklWYWx1ZSA9IGZhbHNlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICBjb25zdCBjb29raWVWYWx1ZSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpXHJcbiAgICAgICAgICAgIC5tYXAoY29va2llID0+IGNvb2tpZS50cmltKCkpXHJcbiAgICAgICAgICAgIC5maW5kKGNvb2tpZSA9PiBjb29raWUuc3RhcnRzV2l0aChuYW1lKSk7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGNvb2tpZVZhbHVlPy5zcGxpdCgnPScpWzFdO1xyXG5cclxuICAgICAgICBpZiAocGFyc2VVUklWYWx1ZSAmJiByZXN1bHQpIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gZGVjb2RlVVJJQ29tcG9uZW50KHJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgcGFyc2VDb29raWVUb09iamVjdChjb29raWVTdHJpbmc6IHN0cmluZywgcGFyc2VVUklTdHJpbmcgPSBmYWxzZSk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xyXG4gICAgICAgIGNvbnN0IGNvb2tpZU9iamVjdDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xyXG4gICAgICAgIGlmIChwYXJzZVVSSVN0cmluZykge1xyXG4gICAgICAgICAgICBjb29raWVTdHJpbmcgPSBkZWNvZGVVUklDb21wb25lbnQoY29va2llU3RyaW5nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKEFncm9Db29raWVVdGlscy5pc1N0cmluZ0FuT2JqZWN0KGNvb2tpZVN0cmluZykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoY29va2llU3RyaW5nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29va2llU3RyaW5nLnNwbGl0KCc7JykuZm9yRWFjaChjb29raWUgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBjb29raWUuc3BsaXQoJz0nKS5tYXAoYyA9PiBjLnRyaW0oKSk7XHJcbiAgICAgICAgICAgIGNvb2tpZU9iamVjdFtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGNvb2tpZU9iamVjdDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGlzU3RyaW5nQW5PYmplY3Qoc3RyOiBzdHJpbmcpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHN0cik7XHJcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgcGFyc2VkID09PSAnb2JqZWN0JyAmJiBwYXJzZWQgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkocGFyc2VkKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBzZXRDb29raWUobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBkYXlzOiBudW1iZXIpIHtcclxuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICBkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkgKyAoZGF5cyAqIDI0ICogNjAgKiA2MCAqIDEwMDApKTtcclxuICAgICAgICBjb25zdCBleHBpcmVzID0gJ2V4cGlyZXM9JyArIGRhdGUudG9VVENTdHJpbmcoKTtcclxuICAgICAgICBkb2N1bWVudC5jb29raWUgPSBuYW1lICsgJz0nICsgdmFsdWUgKyAnOycgKyBleHBpcmVzICsgJztwYXRoPS8nO1xyXG4gICAgfVxyXG5cclxuXHJcbn1cclxuIl19
|
|
@@ -265,8 +265,8 @@ export class AgroFormValidator {
|
|
|
265
265
|
* Validator de CNPJ (Cadastro Nacional da Pessoa Jurídica).
|
|
266
266
|
* @returns
|
|
267
267
|
*/
|
|
268
|
-
CNPJValidator() {
|
|
269
|
-
|
|
268
|
+
static CNPJValidator() {
|
|
269
|
+
const cnpjVal = (control) => {
|
|
270
270
|
var _a;
|
|
271
271
|
const value = (_a = control.value) === null || _a === void 0 ? void 0 : _a.replace(/\D/g, '');
|
|
272
272
|
if (!value || value.length !== 14) {
|
|
@@ -297,13 +297,14 @@ export class AgroFormValidator {
|
|
|
297
297
|
}
|
|
298
298
|
return null; // válido
|
|
299
299
|
};
|
|
300
|
+
return cnpjVal;
|
|
300
301
|
}
|
|
301
302
|
/**
|
|
302
303
|
* Valida se a placa do veículo é válida.
|
|
303
304
|
* @returns
|
|
304
305
|
*/
|
|
305
|
-
licensePlateValidator() {
|
|
306
|
-
|
|
306
|
+
static licensePlateValidator() {
|
|
307
|
+
const licensePlateVal = (control) => {
|
|
307
308
|
const value = (control.value || '').toUpperCase().trim().replace(/-/g, '');
|
|
308
309
|
if (!value) {
|
|
309
310
|
return null; // Campo vazio não é responsabilidade desse validador
|
|
@@ -312,6 +313,7 @@ export class AgroFormValidator {
|
|
|
312
313
|
AGRO_REGEX.isOldLicensePlate.test(value);
|
|
313
314
|
return isValid ? null : { licensePlateInvalid: true };
|
|
314
315
|
};
|
|
316
|
+
return licensePlateVal;
|
|
315
317
|
}
|
|
316
318
|
}
|
|
317
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdyby1mb3JtLXZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3ItYWdyb25lZ29jaW8vYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiZm9ybS12YWxpZGF0b3IvYWdyby1mb3JtLXZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDNUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRWhFLE1BQU0sT0FBTyxpQkFBaUI7SUFFMUI7Ozs7Ozs7OztPQVNHO0lBQ0ksTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUF3QjtRQUNqRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDMUQsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLE9BQU8sRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDbkM7UUFDRCxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFHRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDSSxNQUFNLENBQUMsb0JBQW9CLENBQUMsY0FBa0M7UUFDakUsTUFBTSxXQUFXLEdBQUcsQ0FBQyxPQUF3QixFQUFpQyxFQUFFO1lBQzVFLE1BQU0sVUFBVSxHQUFHLHFCQUFxQixDQUFDO1lBQ3pDLE1BQU0sWUFBWSxHQUFTLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuRCxNQUFN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SUoiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IERhdGVDb21wYXJpc29uVHlwZSB9IGZyb20gJy4uL2VudW1zL2RhdGUtY29tcGFyaXNvbi10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBBR1JPX1JFR0VYIH0gZnJvbSAnLi4vY29tbW9uL2Fncm8tcmVnZXguY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBOdW1iZXJDb21wYXJpc29uVHlwZSB9IGZyb20gJy4uL2VudW1zL251bWJlci1jb21wYXJpc29uLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IE9iamVjdFV0aWxzIH0gZnJvbSAnLi4vY29tbW9uL2Fncm8tb2JqZWN0LXV0aWxzLmNsYXNzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBBZ3JvRm9ybVZhbGlkYXRvciB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGF0b3IgcGFyYSBjaGVjYXIgc2UgbyBjYW1wbyDDqSB1bSBlLW1haWxcclxuICAgICAqXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogdGhpcy5teUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAqICAgICBFTUFJTF9GSUVMRDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgQWdyb0Zvcm1WYWxpZGF0b3IuZW1haWxWYWxpZGF0b3JdXVxyXG4gICAgICogfSk7XHJcbiAgICAgKiBAcGFyYW0gY29udHJvbFxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBlbWFpbFZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgbnVsbCB7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUgJiYgIUFHUk9fUkVHRVguaXNFbWFpbC50ZXN0KGNvbnRyb2wudmFsdWUpKSB7XHJcbiAgICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKHsgZW1haWxWYWxpZGF0b3I6IHRydWUgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGVtYWlsVmFsaWRhdG9yOiB0cnVlIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwbGlxdWUgZXNzZSB2YWxpZGFkb3IgZW0gdW0gY2FtcG8gZG8gdGlwbyBEYXRlLCBwYXJhIHZlcmlmaWNhciBzZSBhIGRhdGEgc2VsZWNpb25hZGEgw6kgbWFpb3Igb3UgbWVub3IgcXVlIGEgZGF0YSBhdHVhbC5cclxuICAgICAqXHJcbiAgICAgKiBVdGlsaXplIG8gcGFyw6JtZXRybyBjb21wYXJpc29uVHlwZSBwYXJhIGRlZmluaXIgc2UgYSBkYXRhIHNlbGVjaW9uYWRhIGRldmUgc2VyIG1haW9yIG91IG1lbm9yIHF1ZSBhIGRhdGEgYXR1YWwuXHJcbiAgICAgKiBBIHZhbGlkYcOnw6NvIHNlcsOhIGF0cmF2w6lzIGRvIGVudW0gRGF0ZUNvbXBhcmlzb25UeXBlLlxyXG4gICAgICpcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiB0aGlzLm15Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICogICAgIE5PTUVfQ0FNUE86IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIEFncm9Gb3JtVmFsaWRhdG9yLmNvbXBhcmVEYXRlV2l0aFRvZGF5KERhdGVDb21wYXJpc29uVHlwZS5ncmVhdGhlclRoYW4pXV1cclxuICAgICAqIH0pO1xyXG4gICAgICogQHBhcmFtIGNvbXBhcmlzb25UeXBlXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGNvbXBhcmVEYXRlV2l0aFRvZGF5KGNvbXBhcmlzb25UeXBlOiBEYXRlQ29tcGFyaXNvblR5cGUpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgY29uc3QgY29tcGFyZURhdGUgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gJ2RhdGVDb21wYXJpc29uVG9kYXknO1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZERhdGU6IERhdGUgPSBuZXcgRGF0ZShjb250cm9sLnZhbHVlKTtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudERhdGU6IERhdGUgPSBuZXcgRGF0ZSgpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgY29uZGl0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIFtEYXRlQ29tcGFyaXNvblR5cGUuZ3JlYXRoZXJUaGFuXTogc2VsZWN0ZWREYXRlIDw9IGN1cnJlbnREYXRlLFxyXG4gICAgICAgICAgICAgICAgW0RhdGVDb21wYXJpc29uVHlwZS5sZXNzVGhhbl06IHNlbGVjdGVkRGF0ZSA+PSBjdXJyZW50RGF0ZVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvbmRpdGlvbnNbY29tcGFyaXNvblR5cGVdKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBbbWV0aG9kTmFtZV06IHsgdmFsdWU6IGNvbnRyb2wudmFsdWUgfSB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBjb21wYXJlRGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbXBhcmEgZG9pcyBjYW1wb3MgZG8gdGlwbyBEYXRlLCB2ZXJpZmljYW5kbyBzZSBvIGNhbXBvIEEgw6kgbWFpb3IgcXVlIG8gY2FtcG8gQi4gU2UgQSBmb3IgbWFpb3IgcXVlIEIsIGVudMOjb1xyXG4gICAgICogbyBjYW1wbyBBIMOpIGludmFsaWRhZG8uIENhc28gY29udHLDoXJpbywgbyBjYW1wbyBBIMOpIHZhbGlkYWRvLlxyXG4gICAgICpcclxuICAgICAqIEFwbGlxdWUgZXNzZSBjYW1wbyBubyBGb3JtR3JvdXAsIHBhc3NhbmRvIG9zIG5vbWVzIGRvcyBjYW1wb3MgcXVlIGRlc2VqYSBjb21wYXJhci5cclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiB0aGlzLm15Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICAgICAgICBOT01FX0NBTVBPX2RhdGVBOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgICBOT01FX0NBTVBPX2RhdGVCOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdXHJcbiAgICAgICAgfSwgeyB2YWxpZGF0b3I6IEFncm9Gb3JtVmFsaWRhdG9yLmRhdGVDb21wYXJpc29uVmFsaWRhdG9yKCdOT01FX0NBTVBPX2RhdGVBJywgJ05PTUVfQ0FNUE9fZGF0ZUInKSB9KTtcclxuICAgICAqIEBwYXJhbSBjb250cm9sTmFtZUFcclxuICAgICAqIEBwYXJhbSBjb250cm9sTmFtZUJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgY29tcGFyZURhdGVXaXRoT3RoZXJEYXRlRmllbGQoY29udHJvbE5hbWVBOiBzdHJpbmcsIGNvbnRyb2xOYW1lQjogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGNvbXBhcmVEYXRlID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBudWxsID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZm9ybUdyb3VwID0gY29udHJvbCBhcyBGb3JtR3JvdXA7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGVBID0gZm9ybUdyb3VwLmdldChjb250cm9sTmFtZUEpPy52YWx1ZTtcclxuICAgICAgICAgICAgY29uc3QgZGF0ZUIgPSBmb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lQik/LnZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gJ2NvbXBhcmVEYXRlV2l0aE90aGVyRGF0ZUZpZWxkJztcclxuICAgICAgICAgICAgaWYgKGRhdGVBICYmIGRhdGVCKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlQU9iaiA9IG5ldyBEYXRlKGRhdGVBKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVCT2JqID0gbmV3IERhdGUoZGF0ZUIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGVBT2JqIDwgZGF0ZUJPYmopIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lQSk/LnNldEVycm9ycyh7IFttZXRob2ROYW1lXTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBbbWV0aG9kTmFtZV06IHRydWUgfTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybUdyb3VwLmdldChjb250cm9sTmFtZUEpPy5oYXNFcnJvcihtZXRob2ROYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWVBKT8uc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVEYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhdG9yIHBhcmEgY2hlY2FyIHNlIG8gY2FtcG8gw6kgdW0gbsO6bWVybyBkZSB0ZWxlZm9uZSBkZSBhY29yZG8gY29tIHVtYSBtw6FzY2FyYSBpbmZvcm1hZGEuXHJcbiAgICAgKlxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHRoaXMubXlGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgKiAgICAgVEVMRUZPTkVfRklFTEQ6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIEFncm9Gb3JtVmFsaWRhdG9yLnBob25lVmFsaWRhdG9yKCcoOTkpIDk5OTktOTk5OScpXV1cclxuICAgICAqIH0pO1xyXG4gICAgICogQHBhcmFtIG1hc2tcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgcGhvbmVWYWxpZGF0b3IobWFzazogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IHBob25lQ29udHJvbFZhbGlkYXRpb24gPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gJ3Bob25lVmFsaWRhdG9yJztcclxuICAgICAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGBeJHttYXNrLnJlcGxhY2UoLzkvZywgJ1xcXFxkJykucmVwbGFjZSgvXFwoL2csICdcXFxcKCcpLnJlcGxhY2UoL1xcKS9nLCAnXFxcXCknKS5yZXBsYWNlKC8tL2csICdcXFxcLScpfSRgKTtcclxuICAgICAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUgJiYgIXJlZ2V4LnRlc3QoY29udHJvbC52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKHsgW21ldGhvZE5hbWVdOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgW21ldGhvZE5hbWVdOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29udHJvbC5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHBob25lQ29udHJvbFZhbGlkYXRpb247XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGF0b3IgcGFyYSBjaGVjYXIgc2UgdW0gY2FtcG8gZGUgbsO6bWVyb3Mgw6kgbWFpb3Igb3UgbWVub3IgcXVlIG91dHJvIGNhbXBvLlxyXG4gICAgICpcclxuICAgICAqIEFwbGlxdWUgZXNzZSB2YWxpZGF0b3Igbm8gRm9ybUdyb3VwLCBwYXNzYW5kbyBvcyBub21lcyBkb3MgY2FtcG9zIHF1ZSBkZXNlamEgY29tcGFyYXIuXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogdGhpcy5teUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAqICAgICBOVU1FUk9fQTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAqICAgICBOVU1FUk9fQjogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXVxyXG4gICAgICogfSwgeyB2YWxpZGF0b3I6IEFncm9Gb3JtVmFsaWRhdG9yLmNvbXBhcmVOdW1iZXJGaWVsZHMoJ05VTUVST19BJywgJ05VTUVST19CJywgTnVtYmVyQ29tcGFyaXNvblR5cGUuRVFVQUxTKSB9KTtcclxuICAgICAqXHJcbiAgICAgKiBOZXN0ZSBjYXNvLCBhIHZlcmlmaWNhw6fDo28gc2Vyw6Egc2UgbyBOVU1FUk9fQSDDqSBpZ3VhbCBhbyBOVU1FUkJfQi5cclxuICAgICAqIEBwYXJhbSBjb250cm9sTmFtZUFcclxuICAgICAqIEBwYXJhbSBjb250cm9sTmFtZUJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgY29tcGFyZU51bWJlckZpZWxkcyhjb250cm9sTmFtZUE6IHN0cmluZywgY29udHJvbE5hbWVCOiBzdHJpbmcsIGNvbXBhcmlzb25NZXRob2Q6IE51bWJlckNvbXBhcmlzb25UeXBlKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGNvbXBhcmVOdW1iZXIgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBmb3JtR3JvdXAgPSBjb250cm9sIGFzIEZvcm1Hcm91cDtcclxuICAgICAgICAgICAgY29uc3QgbnVtYmVyQSA9IGZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWVBKT8udmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnN0IG51bWJlckIgPSBmb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lQik/LnZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gJ2NvbXBhcmVOdW1iZXJGaWVsZHMnO1xyXG4gICAgICAgICAgICBpZiAobnVtYmVyQSAmJiBudW1iZXJCKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvclR5cGUgPSBOdW1iZXJDb21wYXJpc29uVHlwZVtjb21wYXJpc29uTWV0aG9kXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yQ29uZGl0aW9uID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIFtOdW1iZXJDb21wYXJpc29uVHlwZS5FUVVBTFNdOiBudW1iZXJBICE9PSBudW1iZXJCLFxyXG4gICAgICAgICAgICAgICAgICAgIFtOdW1iZXJDb21wYXJpc29uVHlwZS5HUkVBVEVSX1RIQU5dOiBudW1iZXJBIDw9IG51bWJlckIsXHJcbiAgICAgICAgICAgICAgICAgICAgW051bWJlckNvbXBhcmlzb25UeXBlLkxFU1NfVEhBTl06IG51bWJlckEgPj0gbnVtYmVyQixcclxuICAgICAgICAgICAgICAgICAgICBbTnVtYmVyQ29tcGFyaXNvblR5cGUuR1JFQVRFUl9USEFOX09SX0VRVUFMXTogbnVtYmVyQSA8IG51bWJlckIsXHJcbiAgICAgICAgICAgICAgICAgICAgW051bWJlckNvbXBhcmlzb25UeXBlLkxFU1NfVEhBTl9PUl9FUVVBTF06IG51bWJlckEgPiBudW1iZXJCLFxyXG4gICAgICAgICAgICAgICAgICAgIFtOdW1iZXJDb21wYXJpc29uVHlwZS5OT1RfRVFVQUxTXTogbnVtYmVyQSA9PT0gbnVtYmVyQlxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3JDb25kaXRpb25bY29tcGFyaXNvbk1ldGhvZF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sQSA9IGZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWVBKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbEEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbEEuc2V0RXJyb3JzKHsgW21ldGhvZE5hbWVdOiBjb21wYXJpc29uTWV0aG9kIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBbbWV0aG9kTmFtZV06IGVycm9yVHlwZSB9O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lQSk/Lmhhc0Vycm9yKG1ldGhvZE5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udHJvbEEgPSBmb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lQSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xBKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xBLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gY29tcGFyZU51bWJlcjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYXRvciBwYXJhIGNoZWNhciBzZSB1bSB2YWxvciBlc3TDoSBlbnRyZSBvcyBkZW1haXMgdmFsb3JlcyBkZSB0csOqcyBmb3JtQ29udHJvbHMuXHJcbiAgICAgKlxyXG4gICAgICogQXBsaXF1ZSBlc3NlIHZhbGlkYXRvciBubyBGb3JtR3JvdXAsIHBhc3NhbmRvIG9zIG5vbWVzIGRvcyB0csOqcyBmb3JtQ29udHJvbHMgcXVlIGRlc2VqYSBjb21wYXJhci5cclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiB0aGlzLm15Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICogICAgIG1pbm9yRm9ybUNvbnRyb2w6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgKiAgICAgdGFyZ2V0Rm9ybUNvbnRyb2w6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgKiAgICAgbWFqb3JGb3JtQ29udHJvbDogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXVxyXG4gICAgICogfSwgeyB2YWxpZGF0b3I6IEFncm9Gb3JtVmFsaWRhdG9yLmNoZWNrVmFsdWVCZXR3ZWVuKCdtaW5vckZvcm1Db250cm9sJywgJ3RhcmdldEZvcm1Db250cm9sJywgJ21ham9yRm9ybUNvbnRyb2wnKSB9KTtcclxuICAgICAqXHJcbiAgICAgKiBOZXN0ZSBjYXNvLCBhIHZlcmlmaWNhw6fDo28gc2Vyw6Egc2UgbyB0YXJnZXRGb3JtQ29udHJvbCBlc3TDoSBlbnRyZSBvIG1pbm9yRm9ybUNvbnRyb2wgZSBvIG1ham9yRm9ybUNvbnRyb2wuXHJcbiAgICAgKiBAcGFyYW0gbWlub3JGb3JtQ29udHJvbFxyXG4gICAgICogQHBhcmFtIHRhcmdldEZvcm1Db250cm9sXHJcbiAgICAgKiBAcGFyYW0gbWFqb3JGb3JtQ29udHJvbFxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBjaGVja1ZhbHVlQmV0d2VlbihtaW5vckZvcm1Db250cm9sOiBzdHJpbmcsIHRhcmdldEZvcm1Db250cm9sOiBzdHJpbmcsIG1ham9yRm9ybUNvbnRyb2w6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcclxuICAgICAgICBjb25zdCBjaGVja1ZhbHVlID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBudWxsID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZm9ybUdyb3VwID0gY29udHJvbCBhcyBGb3JtR3JvdXA7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlQSA9IGZvcm1Hcm91cC5nZXQobWlub3JGb3JtQ29udHJvbCk/LnZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZUIgPSBmb3JtR3JvdXAuZ2V0KHRhcmdldEZvcm1Db250cm9sKT8udmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlQyA9IGZvcm1Hcm91cC5nZXQobWFqb3JGb3JtQ29udHJvbCk/LnZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gJ2NoZWNrVmFsdWVCZXR3ZWVuJztcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGFyZU51bWJlcnMgPSBbdmFsdWVBLCB2YWx1ZUIsIHZhbHVlQ10uZXZlcnkodiA9PiB2ICE9PSBudWxsICYmIHYgIT09IHVuZGVmaW5lZCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoYXJlTnVtYmVycykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlQiA8IHZhbHVlQSB8fCB2YWx1ZUIgPiB2YWx1ZUMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRDb250cm9sID0gZm9ybUdyb3VwLmdldCh0YXJnZXRGb3JtQ29udHJvbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldENvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Q29udHJvbC5zZXRFcnJvcnMoeyBbbWV0aG9kTmFtZV06IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IFttZXRob2ROYW1lXTogdHJ1ZSB9O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRDb250cm9sID0gZm9ybUdyb3VwLmdldCh0YXJnZXRGb3JtQ29udHJvbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldENvbnRyb2w/Lmhhc0Vycm9yKG1ldGhvZE5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IHsgLi4udGFyZ2V0Q29udHJvbC5lcnJvcnMgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGVycm9yc1ttZXRob2ROYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Q29udHJvbC5zZXRFcnJvcnMoT2JqZWN0LmtleXMoZXJyb3JzKS5sZW5ndGggPyBlcnJvcnMgOiBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gY2hlY2tWYWx1ZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGF0b3IgcGFyYSBjaGVjYXIgc2UgbyBjYW1wbyDDqSB1bSBvYmpldG8gZSBzZSBwb3NzdWkgdW1hIHByb3ByaWVkYWRlIGVzcGVjw61maWNhLlxyXG4gICAgICpcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiB0aGlzLm15Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICogICAgIE9CSkVUT19GSUVMRDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgQWdyb0Zvcm1WYWxpZGF0b3Iub2JqZWN0UHJvcGVydHlWYWxpZGF0b3IoJ3Byb3ByaWVkYWRlJyldXVxyXG4gICAgICogfSk7XHJcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIG9iamVjdFByb3BlcnR5VmFsaWRhdG9yKHByb3BlcnR5TmFtZTogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IG9iamVjdFByb3BlcnR5ID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBudWxsID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbWV0aG9kTmFtZSA9ICdvYmplY3RQcm9wZXJ0eSc7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3RVdGlscy5pc09iamVjdChjb250cm9sLnZhbHVlKSAmJiBPYmplY3RVdGlscy5jb250YWluc1Byb3BlcnR5KGNvbnRyb2wudmFsdWUsIHByb3BlcnR5TmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29udHJvbC5zZXRFcnJvcnMoeyBbbWV0aG9kTmFtZV06IHRydWUgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiB7IFttZXRob2ROYW1lXTogdHJ1ZSB9O1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdFByb3BlcnR5O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhIHNlIG8gY2FtcG8gw6kgdW0gQ1BGIChDYWRhc3RybyBkZSBQZXNzb2EgRsOtc2ljYSkgdsOhbGlkby5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBDUEZWYWxpZGF0b3IoKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGNwZlZhbCA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNwZiA9IChjb250cm9sLnZhbHVlIHx8ICcnKS5yZXBsYWNlKC9bXlxcZF0vZywgJycpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFjcGYpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsOyAvLyBOw6NvIHZhbGlkYSBjYW1wbyB2YXppbywgdXNlIFZhbGlkYXRvcnMucmVxdWlyZWQganVudG8gc2UgcXVpc2VyIG9icmlnYXRvcmllZGFkZVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY3BmLmxlbmd0aCAhPT0gMTEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGNwZlZhbGlkYXRvcjogdHJ1ZSB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBWZXJpZmljYSBzZSB0b2RvcyBvcyBkw61naXRvcyBzw6NvIGlndWFpcyAoZXguOiAxMTExMTExMTExMSlcclxuICAgICAgICAgICAgaWYgKC9eKFxcZClcXDF7MTB9JC8udGVzdChjcGYpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBjcGZWYWxpZGF0b3I6IHRydWUgfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gVmFsaWRhw6fDo28gZG9zIGTDrWdpdG9zIHZlcmlmaWNhZG9yZXNcclxuICAgICAgICAgICAgY29uc3QgY2FsY0NoZWNrRGlnaXQgPSAoY3BmU2xpY2U6IHN0cmluZywgZmFjdG9yOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCB0b3RhbCA9IDA7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGRpZ2l0IG9mIGNwZlNsaWNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gcGFyc2VJbnQoZGlnaXQsIDEwKSAqIGZhY3Rvci0tO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVtYWluZGVyID0gdG90YWwgJSAxMTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZW1haW5kZXIgPCAyID8gMCA6IDExIC0gcmVtYWluZGVyO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGlnaXQxID0gY2FsY0NoZWNrRGlnaXQoY3BmLnN1YnN0cmluZygwLCA5KSwgMTApO1xyXG4gICAgICAgICAgICBjb25zdCBkaWdpdDIgPSBjYWxjQ2hlY2tEaWdpdChjcGYuc3Vic3RyaW5nKDAsIDkpICsgZGlnaXQxLCAxMSk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBpc1ZhbGlkID0gZGlnaXQxID09PSBwYXJzZUludChjcGYuY2hhckF0KDkpLCAxMCkgJiZcclxuICAgICAgICAgICAgICAgIGRpZ2l0MiA9PT0gcGFyc2VJbnQoY3BmLmNoYXJBdCgxMCksIDEwKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkID8gbnVsbCA6IHsgY3BmVmFsaWRhdG9yOiB0cnVlIH07XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gY3BmVmFsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhdG9yIGRlIENOUEogKENhZGFzdHJvIE5hY2lvbmFsIGRhIFBlc3NvYSBKdXLDrWRpY2EpLlxyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIENOUEpWYWxpZGF0b3IoKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU/LnJlcGxhY2UoL1xcRC9nLCAnJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXZhbHVlIHx8IHZhbHVlLmxlbmd0aCAhPT0gMTQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGNucGpWYWxpZGF0b3I6IHRydWUgfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gVmVyaWZpY2EgQ05QSnMgY29tIHRvZG9zIG9zIGTDrWdpdG9zIGlndWFpcyAoaW52w6FsaWRvcylcclxuICAgICAgICAgICAgaWYgKC9eKFxcZClcXDF7MTN9JC8udGVzdCh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGNucGpWYWxpZGF0b3I6IHRydWUgfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVDaGVja0RpZ2l0ID0gKGNucGo6IHN0cmluZywgbGVuZ3RoOiBudW1iZXIpOiBudW1iZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgd2VpZ2h0cyA9IGxlbmd0aCA9PT0gMTJcclxuICAgICAgICAgICAgICAgICAgICA/IFs1LCA0LCAzLCAyLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyXVxyXG4gICAgICAgICAgICAgICAgICAgIDogWzYsIDUsIDQsIDMsIDIsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDJdO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHN1bSA9IGNucGpcclxuICAgICAgICAgICAgICAgICAgICAuc2xpY2UoMCwgbGVuZ3RoKVxyXG4gICAgICAgICAgICAgICAgICAgIC5zcGxpdCgnJylcclxuICAgICAgICAgICAgICAgICAgICAucmVkdWNlKChhY2MsIGRpZ2l0LCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWNjICsgcGFyc2VJbnQoZGlnaXQsIDEwKSAqIHdlaWdodHNbaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIDApO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlbWFpbmRlciA9IHN1bSAlIDExO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlbWFpbmRlciA8IDIgPyAwIDogMTEgLSByZW1haW5kZXI7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaXJzdENoZWNrRGlnaXQgPSB2YWxpZGF0ZUNoZWNrRGlnaXQodmFsdWUsIDEyKTtcclxuICAgICAgICAgICAgY29uc3Qgc2Vjb25kQ2hlY2tEaWdpdCA9IHZhbGlkYXRlQ2hlY2tEaWdpdCh2YWx1ZSwgMTMpO1xyXG5cclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgZmlyc3RDaGVja0RpZ2l0ICE9PSBwYXJzZUludCh2YWx1ZS5jaGFyQXQoMTIpLCAxMCkgfHxcclxuICAgICAgICAgICAgICAgIHNlY29uZENoZWNrRGlnaXQgIT09IHBhcnNlSW50KHZhbHVlLmNoYXJBdCgxMyksIDEwKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGNucGpWYWxpZGF0b3I6IHRydWUgfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7IC8vIHbDoWxpZG9cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYSBzZSBhIHBsYWNhIGRvIHZlw61jdWxvIMOpIHbDoWxpZGEuXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgbGljZW5zZVBsYXRlVmFsaWRhdG9yKCk6IFZhbGlkYXRvckZuIHtcclxuICAgICAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSAoY29udHJvbC52YWx1ZSB8fCAnJykudG9VcHBlckNhc2UoKS50cmltKCkucmVwbGFjZSgvLS9nLCAnJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsgLy8gQ2FtcG8gdmF6aW8gbsOjbyDDqSByZXNwb25zYWJpbGlkYWRlIGRlc3NlIHZhbGlkYWRvclxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBpc1ZhbGlkID0gQUdST19SRUdFWC5pc01lcmNvc3VsTGljZW5zZVBsYXRlLnRlc3QodmFsdWUpIHx8XHJcbiAgICAgICAgICAgICAgICBBR1JPX1JFR0VYLmlzT2xkTGljZW5zZVBsYXRlLnRlc3QodmFsdWUpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWQgPyBudWxsIDogeyBsaWNlbnNlUGxhdGVJbnZhbGlkOiB0cnVlIH07XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcblxyXG5cclxufSJdfQ==
|
|
319
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdyby1mb3JtLXZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3ItYWdyb25lZ29jaW8vYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiZm9ybS12YWxpZGF0b3IvYWdyby1mb3JtLXZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDNUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRWhFLE1BQU0sT0FBTyxpQkFBaUI7SUFFMUI7Ozs7Ozs7OztPQVNHO0lBQ0ksTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUF3QjtRQUNqRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDMUQsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLE9BQU8sRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDbkM7UUFDRCxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFHRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDSSxNQUFNLENBQUMsb0JBQW9CLENBQUMsY0FBa0M7UUFDakUsTUFBTSxXQUFXLEdBQUcsQ0FBQyxPQUF3QixFQUFpQyxFQUFFO1lBQzVFLE1BQU0sVUFBVSxHQUFHLHFCQUFxQixDQUFDO1lBQ3pDLE1BQU0sWUFBWSxHQUFTLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuRCxNQUFN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QyxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRSxDQUFDO1FBQzFELENBQUMsQ0FBQztRQUNGLE9BQU8sZUFBZSxDQUFDO0lBQzNCLENBQUM7Q0FJSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRGF0ZUNvbXBhcmlzb25UeXBlIH0gZnJvbSAnLi4vZW51bXMvZGF0ZS1jb21wYXJpc29uLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IEFHUk9fUkVHRVggfSBmcm9tICcuLi9jb21tb24vYWdyby1yZWdleC5jb25zdGFudCc7XHJcbmltcG9ydCB7IE51bWJlckNvbXBhcmlzb25UeXBlIH0gZnJvbSAnLi4vZW51bXMvbnVtYmVyLWNvbXBhcmlzb24tdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgT2JqZWN0VXRpbHMgfSBmcm9tICcuLi9jb21tb24vYWdyby1vYmplY3QtdXRpbHMuY2xhc3MnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFncm9Gb3JtVmFsaWRhdG9yIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYXRvciBwYXJhIGNoZWNhciBzZSBvIGNhbXBvIMOpIHVtIGUtbWFpbFxyXG4gICAgICpcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiB0aGlzLm15Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICogICAgIEVNQUlMX0ZJRUxEOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBBZ3JvRm9ybVZhbGlkYXRvci5lbWFpbFZhbGlkYXRvcl1dXHJcbiAgICAgKiB9KTtcclxuICAgICAqIEBwYXJhbSBjb250cm9sXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGVtYWlsVmFsaWRhdG9yKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBudWxsIHtcclxuICAgICAgICBpZiAoY29udHJvbC52YWx1ZSAmJiAhQUdST19SRUdFWC5pc0VtYWlsLnRlc3QoY29udHJvbC52YWx1ZSkpIHtcclxuICAgICAgICAgICAgY29udHJvbC5zZXRFcnJvcnMoeyBlbWFpbFZhbGlkYXRvcjogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHsgZW1haWxWYWxpZGF0b3I6IHRydWUgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29udHJvbC5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBsaXF1ZSBlc3NlIHZhbGlkYWRvciBlbSB1bSBjYW1wbyBkbyB0aXBvIERhdGUsIHBhcmEgdmVyaWZpY2FyIHNlIGEgZGF0YSBzZWxlY2lvbmFkYSDDqSBtYWlvciBvdSBtZW5vciBxdWUgYSBkYXRhIGF0dWFsLlxyXG4gICAgICpcclxuICAgICAqIFV0aWxpemUgbyBwYXLDom1ldHJvIGNvbXBhcmlzb25UeXBlIHBhcmEgZGVmaW5pciBzZSBhIGRhdGEgc2VsZWNpb25hZGEgZGV2ZSBzZXIgbWFpb3Igb3UgbWVub3IgcXVlIGEgZGF0YSBhdHVhbC5cclxuICAgICAqIEEgdmFsaWRhw6fDo28gc2Vyw6EgYXRyYXbDqXMgZG8gZW51bSBEYXRlQ29tcGFyaXNvblR5cGUuXHJcbiAgICAgKlxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHRoaXMubXlGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgKiAgICAgTk9NRV9DQU1QTzogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgQWdyb0Zvcm1WYWxpZGF0b3IuY29tcGFyZURhdGVXaXRoVG9kYXkoRGF0ZUNvbXBhcmlzb25UeXBlLmdyZWF0aGVyVGhhbildXVxyXG4gICAgICogfSk7XHJcbiAgICAgKiBAcGFyYW0gY29tcGFyaXNvblR5cGVcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgY29tcGFyZURhdGVXaXRoVG9kYXkoY29tcGFyaXNvblR5cGU6IERhdGVDb21wYXJpc29uVHlwZSk6IFZhbGlkYXRvckZuIHtcclxuICAgICAgICBjb25zdCBjb21wYXJlRGF0ZSA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgbnVsbCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1ldGhvZE5hbWUgPSAnZGF0ZUNvbXBhcmlzb25Ub2RheSc7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkRGF0ZTogRGF0ZSA9IG5ldyBEYXRlKGNvbnRyb2wudmFsdWUpO1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50RGF0ZTogRGF0ZSA9IG5ldyBEYXRlKCk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjb25kaXRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgW0RhdGVDb21wYXJpc29uVHlwZS5ncmVhdGhlclRoYW5dOiBzZWxlY3RlZERhdGUgPD0gY3VycmVudERhdGUsXHJcbiAgICAgICAgICAgICAgICBbRGF0ZUNvbXBhcmlzb25UeXBlLmxlc3NUaGFuXTogc2VsZWN0ZWREYXRlID49IGN1cnJlbnREYXRlXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBpZiAoY29uZGl0aW9uc1tjb21wYXJpc29uVHlwZV0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IFttZXRob2ROYW1lXTogeyB2YWx1ZTogY29udHJvbC52YWx1ZSB9IH07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVEYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29tcGFyYSBkb2lzIGNhbXBvcyBkbyB0aXBvIERhdGUsIHZlcmlmaWNhbmRvIHNlIG8gY2FtcG8gQSDDqSBtYWlvciBxdWUgbyBjYW1wbyBCLiBTZSBBIGZvciBtYWlvciBxdWUgQiwgZW50w6NvXHJcbiAgICAgKiBvIGNhbXBvIEEgw6kgaW52YWxpZGFkby4gQ2FzbyBjb250csOhcmlvLCBvIGNhbXBvIEEgw6kgdmFsaWRhZG8uXHJcbiAgICAgKlxyXG4gICAgICogQXBsaXF1ZSBlc3NlIGNhbXBvIG5vIEZvcm1Hcm91cCwgcGFzc2FuZG8gb3Mgbm9tZXMgZG9zIGNhbXBvcyBxdWUgZGVzZWphIGNvbXBhcmFyLlxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHRoaXMubXlGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgICAgICAgIE5PTUVfQ0FNUE9fZGF0ZUE6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICAgIE5PTUVfQ0FNUE9fZGF0ZUI6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF1cclxuICAgICAgICB9LCB7IHZhbGlkYXRvcjogQWdyb0Zvcm1WYWxpZGF0b3IuZGF0ZUNvbXBhcmlzb25WYWxpZGF0b3IoJ05PTUVfQ0FNUE9fZGF0ZUEnLCAnTk9NRV9DQU1QT19kYXRlQicpIH0pO1xyXG4gICAgICogQHBhcmFtIGNvbnRyb2xOYW1lQVxyXG4gICAgICogQHBhcmFtIGNvbnRyb2xOYW1lQlxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBjb21wYXJlRGF0ZVdpdGhPdGhlckRhdGVGaWVsZChjb250cm9sTmFtZUE6IHN0cmluZywgY29udHJvbE5hbWVCOiBzdHJpbmcpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgY29uc3QgY29tcGFyZURhdGUgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBmb3JtR3JvdXAgPSBjb250cm9sIGFzIEZvcm1Hcm91cDtcclxuICAgICAgICAgICAgY29uc3QgZGF0ZUEgPSBmb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lQSk/LnZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRlQiA9IGZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWVCKT8udmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnN0IG1ldGhvZE5hbWUgPSAnY29tcGFyZURhdGVXaXRoT3RoZXJEYXRlRmllbGQnO1xyXG4gICAgICAgICAgICBpZiAoZGF0ZUEgJiYgZGF0ZUIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVBT2JqID0gbmV3IERhdGUoZGF0ZUEpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZUJPYmogPSBuZXcgRGF0ZShkYXRlQik7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0ZUFPYmogPCBkYXRlQk9iaikge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWVBKT8uc2V0RXJyb3JzKHsgW21ldGhvZE5hbWVdOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IFttZXRob2ROYW1lXTogdHJ1ZSB9O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lQSk/Lmhhc0Vycm9yKG1ldGhvZE5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldChjb250cm9sTmFtZUEpPy5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gY29tcGFyZURhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGF0b3IgcGFyYSBjaGVjYXIgc2UgbyBjYW1wbyDDqSB1bSBuw7ptZXJvIGRlIHRlbGVmb25lIGRlIGFjb3JkbyBjb20gdW1hIG3DoXNjYXJhIGluZm9ybWFkYS5cclxuICAgICAqXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogdGhpcy5teUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAqICAgICBURUxFRk9ORV9GSUVMRDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgQWdyb0Zvcm1WYWxpZGF0b3IucGhvbmVWYWxpZGF0b3IoJyg5OSkgOTk5OS05OTk5JyldXVxyXG4gICAgICogfSk7XHJcbiAgICAgKiBAcGFyYW0gbWFza1xyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBwaG9uZVZhbGlkYXRvcihtYXNrOiBzdHJpbmcpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgY29uc3QgcGhvbmVDb250cm9sVmFsaWRhdGlvbiA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgbnVsbCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1ldGhvZE5hbWUgPSAncGhvbmVWYWxpZGF0b3InO1xyXG4gICAgICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoYF4ke21hc2sucmVwbGFjZSgvOS9nLCAnXFxcXGQnKS5yZXBsYWNlKC9cXCgvZywgJ1xcXFwoJykucmVwbGFjZSgvXFwpL2csICdcXFxcKScpLnJlcGxhY2UoLy0vZywgJ1xcXFwtJyl9JGApO1xyXG4gICAgICAgICAgICBpZiAoY29udHJvbC52YWx1ZSAmJiAhcmVnZXgudGVzdChjb250cm9sLnZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgY29udHJvbC5zZXRFcnJvcnMoeyBbbWV0aG9kTmFtZV06IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBbbWV0aG9kTmFtZV06IHRydWUgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb250cm9sLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gcGhvbmVDb250cm9sVmFsaWRhdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYXRvciBwYXJhIGNoZWNhciBzZSB1bSBjYW1wbyBkZSBuw7ptZXJvcyDDqSBtYWlvciBvdSBtZW5vciBxdWUgb3V0cm8gY2FtcG8uXHJcbiAgICAgKlxyXG4gICAgICogQXBsaXF1ZSBlc3NlIHZhbGlkYXRvciBubyBGb3JtR3JvdXAsIHBhc3NhbmRvIG9zIG5vbWVzIGRvcyBjYW1wb3MgcXVlIGRlc2VqYSBjb21wYXJhci5cclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiB0aGlzLm15Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICogICAgIE5VTUVST19BOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICogICAgIE5VTUVST19COiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdXHJcbiAgICAgKiB9LCB7IHZhbGlkYXRvcjogQWdyb0Zvcm1WYWxpZGF0b3IuY29tcGFyZU51bWJlckZpZWxkcygnTlVNRVJPX0EnLCAnTlVNRVJPX0InLCBOdW1iZXJDb21wYXJpc29uVHlwZS5FUVVBTFMpIH0pO1xyXG4gICAgICpcclxuICAgICAqIE5lc3RlIGNhc28sIGEgdmVyaWZpY2HDp8OjbyBzZXLDoSBzZSBvIE5VTUVST19BIMOpIGlndWFsIGFvIE5VTUVSQl9CLlxyXG4gICAgICogQHBhcmFtIGNvbnRyb2xOYW1lQVxyXG4gICAgICogQHBhcmFtIGNvbnRyb2xOYW1lQlxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBjb21wYXJlTnVtYmVyRmllbGRzKGNvbnRyb2xOYW1lQTogc3RyaW5nLCBjb250cm9sTmFtZUI6IHN0cmluZywgY29tcGFyaXNvbk1ldGhvZDogTnVtYmVyQ29tcGFyaXNvblR5cGUpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgY29uc3QgY29tcGFyZU51bWJlciA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgbnVsbCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IGNvbnRyb2wgYXMgRm9ybUdyb3VwO1xyXG4gICAgICAgICAgICBjb25zdCBudW1iZXJBID0gZm9ybUdyb3VwLmdldChjb250cm9sTmFtZUEpPy52YWx1ZTtcclxuICAgICAgICAgICAgY29uc3QgbnVtYmVyQiA9IGZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWVCKT8udmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnN0IG1ldGhvZE5hbWUgPSAnY29tcGFyZU51bWJlckZpZWxkcyc7XHJcbiAgICAgICAgICAgIGlmIChudW1iZXJBICYmIG51bWJlckIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yVHlwZSA9IE51bWJlckNvbXBhcmlzb25UeXBlW2NvbXBhcmlzb25NZXRob2RdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3JDb25kaXRpb24gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgW051bWJlckNvbXBhcmlzb25UeXBlLkVRVUFMU106IG51bWJlckEgIT09IG51bWJlckIsXHJcbiAgICAgICAgICAgICAgICAgICAgW051bWJlckNvbXBhcmlzb25UeXBlLkdSRUFURVJfVEhBTl06IG51bWJlckEgPD0gbnVtYmVyQixcclxuICAgICAgICAgICAgICAgICAgICBbTnVtYmVyQ29tcGFyaXNvblR5cGUuTEVTU19USEFOXTogbnVtYmVyQSA+PSBudW1iZXJCLFxyXG4gICAgICAgICAgICAgICAgICAgIFtOdW1iZXJDb21wYXJpc29uVHlwZS5HUkVBVEVSX1RIQU5fT1JfRVFVQUxdOiBudW1iZXJBIDwgbnVtYmVyQixcclxuICAgICAgICAgICAgICAgICAgICBbTnVtYmVyQ29tcGFyaXNvblR5cGUuTEVTU19USEFOX09SX0VRVUFMXTogbnVtYmVyQSA+IG51bWJlckIsXHJcbiAgICAgICAgICAgICAgICAgICAgW051bWJlckNvbXBhcmlzb25UeXBlLk5PVF9FUVVBTFNdOiBudW1iZXJBID09PSBudW1iZXJCXHJcbiAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChlcnJvckNvbmRpdGlvbltjb21wYXJpc29uTWV0aG9kXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2xBID0gZm9ybUdyb3VwLmdldChjb250cm9sTmFtZUEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sQSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sQS5zZXRFcnJvcnMoeyBbbWV0aG9kTmFtZV06IGNvbXBhcmlzb25NZXRob2QgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IFttZXRob2ROYW1lXTogZXJyb3JUeXBlIH07XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWVBKT8uaGFzRXJyb3IobWV0aG9kTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sQSA9IGZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWVBKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbEEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbEEuc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBjb21wYXJlTnVtYmVyO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhdG9yIHBhcmEgY2hlY2FyIHNlIHVtIHZhbG9yIGVzdMOhIGVudHJlIG9zIGRlbWFpcyB2YWxvcmVzIGRlIHRyw6pzIGZvcm1Db250cm9scy5cclxuICAgICAqXHJcbiAgICAgKiBBcGxpcXVlIGVzc2UgdmFsaWRhdG9yIG5vIEZvcm1Hcm91cCwgcGFzc2FuZG8gb3Mgbm9tZXMgZG9zIHRyw6pzIGZvcm1Db250cm9scyBxdWUgZGVzZWphIGNvbXBhcmFyLlxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHRoaXMubXlGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgKiAgICAgbWlub3JGb3JtQ29udHJvbDogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAqICAgICB0YXJnZXRGb3JtQ29udHJvbDogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAqICAgICBtYWpvckZvcm1Db250cm9sOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdXHJcbiAgICAgKiB9LCB7IHZhbGlkYXRvcjogQWdyb0Zvcm1WYWxpZGF0b3IuY2hlY2tWYWx1ZUJldHdlZW4oJ21pbm9yRm9ybUNvbnRyb2wnLCAndGFyZ2V0Rm9ybUNvbnRyb2wnLCAnbWFqb3JGb3JtQ29udHJvbCcpIH0pO1xyXG4gICAgICpcclxuICAgICAqIE5lc3RlIGNhc28sIGEgdmVyaWZpY2HDp8OjbyBzZXLDoSBzZSBvIHRhcmdldEZvcm1Db250cm9sIGVzdMOhIGVudHJlIG8gbWlub3JGb3JtQ29udHJvbCBlIG8gbWFqb3JGb3JtQ29udHJvbC5cclxuICAgICAqIEBwYXJhbSBtaW5vckZvcm1Db250cm9sXHJcbiAgICAgKiBAcGFyYW0gdGFyZ2V0Rm9ybUNvbnRyb2xcclxuICAgICAqIEBwYXJhbSBtYWpvckZvcm1Db250cm9sXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGNoZWNrVmFsdWVCZXR3ZWVuKG1pbm9yRm9ybUNvbnRyb2w6IHN0cmluZywgdGFyZ2V0Rm9ybUNvbnRyb2w6IHN0cmluZywgbWFqb3JGb3JtQ29udHJvbDogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGNoZWNrVmFsdWUgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBmb3JtR3JvdXAgPSBjb250cm9sIGFzIEZvcm1Hcm91cDtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVBID0gZm9ybUdyb3VwLmdldChtaW5vckZvcm1Db250cm9sKT8udmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlQiA9IGZvcm1Hcm91cC5nZXQodGFyZ2V0Rm9ybUNvbnRyb2wpPy52YWx1ZTtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVDID0gZm9ybUdyb3VwLmdldChtYWpvckZvcm1Db250cm9sKT8udmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnN0IG1ldGhvZE5hbWUgPSAnY2hlY2tWYWx1ZUJldHdlZW4nO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgYXJlTnVtYmVycyA9IFt2YWx1ZUEsIHZhbHVlQiwgdmFsdWVDXS5ldmVyeSh2ID0+IHYgIT09IG51bGwgJiYgdiAhPT0gdW5kZWZpbmVkKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChhcmVOdW1iZXJzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWVCIDwgdmFsdWVBIHx8IHZhbHVlQiA+IHZhbHVlQykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldENvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KHRhcmdldEZvcm1Db250cm9sKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0Q29udHJvbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRDb250cm9sLnNldEVycm9ycyh7IFttZXRob2ROYW1lXTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgW21ldGhvZE5hbWVdOiB0cnVlIH07XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldENvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KHRhcmdldEZvcm1Db250cm9sKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0Q29udHJvbD8uaGFzRXJyb3IobWV0aG9kTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3JzID0geyAuLi50YXJnZXRDb250cm9sLmVycm9ycyB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgZXJyb3JzW21ldGhvZE5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRDb250cm9sLnNldEVycm9ycyhPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCA/IGVycm9ycyA6IG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBjaGVja1ZhbHVlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYXRvciBwYXJhIGNoZWNhciBzZSBvIGNhbXBvIMOpIHVtIG9iamV0byBlIHNlIHBvc3N1aSB1bWEgcHJvcHJpZWRhZGUgZXNwZWPDrWZpY2EuXHJcbiAgICAgKlxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHRoaXMubXlGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgKiAgICAgT0JKRVRPX0ZJRUxEOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBBZ3JvRm9ybVZhbGlkYXRvci5vYmplY3RQcm9wZXJ0eVZhbGlkYXRvcigncHJvcHJpZWRhZGUnKV1dXHJcbiAgICAgKiB9KTtcclxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWVcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgb2JqZWN0UHJvcGVydHlWYWxpZGF0b3IocHJvcGVydHlOYW1lOiBzdHJpbmcpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgY29uc3Qgb2JqZWN0UHJvcGVydHkgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gJ29iamVjdFByb3BlcnR5JztcclxuICAgICAgICAgICAgaWYgKE9iamVjdFV0aWxzLmlzT2JqZWN0KGNvbnRyb2wudmFsdWUpICYmIE9iamVjdFV0aWxzLmNvbnRhaW5zUHJvcGVydHkoY29udHJvbC52YWx1ZSwgcHJvcGVydHlOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgY29udHJvbC5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb250cm9sLnNldEVycm9ycyh7IFttZXRob2ROYW1lXTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHsgW21ldGhvZE5hbWVdOiB0cnVlIH07XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gb2JqZWN0UHJvcGVydHk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGEgc2UgbyBjYW1wbyDDqSB1bSBDUEYgKENhZGFzdHJvIGRlIFBlc3NvYSBGw61zaWNhKSB2w6FsaWRvLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIENQRlZhbGlkYXRvcigpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgY29uc3QgY3BmVmFsID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY3BmID0gKGNvbnRyb2wudmFsdWUgfHwgJycpLnJlcGxhY2UoL1teXFxkXS9nLCAnJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWNwZikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7IC8vIE7Do28gdmFsaWRhIGNhbXBvIHZhemlvLCB1c2UgVmFsaWRhdG9ycy5yZXF1aXJlZCBqdW50byBzZSBxdWlzZXIgb2JyaWdhdG9yaWVkYWRlXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjcGYubGVuZ3RoICE9PSAxMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgY3BmVmFsaWRhdG9yOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFZlcmlmaWNhIHNlIHRvZG9zIG9zIGTDrWdpdG9zIHPDo28gaWd1YWlzIChleC46IDExMTExMTExMTExKVxyXG4gICAgICAgICAgICBpZiAoL14oXFxkKVxcMXsxMH0kLy50ZXN0KGNwZikpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGNwZlZhbGlkYXRvcjogdHJ1ZSB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBWYWxpZGHDp8OjbyBkb3MgZMOtZ2l0b3MgdmVyaWZpY2Fkb3Jlc1xyXG4gICAgICAgICAgICBjb25zdCBjYWxjQ2hlY2tEaWdpdCA9IChjcGZTbGljZTogc3RyaW5nLCBmYWN0b3I6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHRvdGFsID0gMDtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZGlnaXQgb2YgY3BmU2xpY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBwYXJzZUludChkaWdpdCwgMTApICogZmFjdG9yLS07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZW1haW5kZXIgPSB0b3RhbCAlIDExO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlbWFpbmRlciA8IDIgPyAwIDogMTEgLSByZW1haW5kZXI7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBkaWdpdDEgPSBjYWxjQ2hlY2tEaWdpdChjcGYuc3Vic3RyaW5nKDAsIDkpLCAxMCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpZ2l0MiA9IGNhbGNDaGVja0RpZ2l0KGNwZi5zdWJzdHJpbmcoMCwgOSkgKyBkaWdpdDEsIDExKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGlzVmFsaWQgPSBkaWdpdDEgPT09IHBhcnNlSW50KGNwZi5jaGFyQXQoOSksIDEwKSAmJlxyXG4gICAgICAgICAgICAgICAgZGlnaXQyID09PSBwYXJzZUludChjcGYuY2hhckF0KDEwKSwgMTApO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWQgPyBudWxsIDogeyBjcGZWYWxpZGF0b3I6IHRydWUgfTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBjcGZWYWw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGF0b3IgZGUgQ05QSiAoQ2FkYXN0cm8gTmFjaW9uYWwgZGEgUGVzc29hIEp1csOtZGljYSkuXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBDTlBKVmFsaWRhdG9yKCk6IFZhbGlkYXRvckZuIHtcclxuICAgICAgICBjb25zdCBjbnBqVmFsID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjb250cm9sLnZhbHVlPy5yZXBsYWNlKC9cXEQvZywgJycpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF2YWx1ZSB8fCB2YWx1ZS5sZW5ndGggIT09IDE0KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBjbnBqVmFsaWRhdG9yOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFZlcmlmaWNhIENOUEpzIGNvbSB0b2RvcyBvcyBkw61naXRvcyBpZ3VhaXMgKGludsOhbGlkb3MpXHJcbiAgICAgICAgICAgIGlmICgvXihcXGQpXFwxezEzfSQvLnRlc3QodmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBjbnBqVmFsaWRhdG9yOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlQ2hlY2tEaWdpdCA9IChjbnBqOiBzdHJpbmcsIGxlbmd0aDogbnVtYmVyKTogbnVtYmVyID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHdlaWdodHMgPSBsZW5ndGggPT09IDEyXHJcbiAgICAgICAgICAgICAgICAgICAgPyBbNSwgNCwgMywgMiwgOSwgOCwgNywgNiwgNSwgNCwgMywgMl1cclxuICAgICAgICAgICAgICAgICAgICA6IFs2LCA1LCA0LCAzLCAyLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyXTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdW0gPSBjbnBqXHJcbiAgICAgICAgICAgICAgICAgICAgLnNsaWNlKDAsIGxlbmd0aClcclxuICAgICAgICAgICAgICAgICAgICAuc3BsaXQoJycpXHJcbiAgICAgICAgICAgICAgICAgICAgLnJlZHVjZSgoYWNjLCBkaWdpdCwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjYyArIHBhcnNlSW50KGRpZ2l0LCAxMCkgKiB3ZWlnaHRzW2luZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICB9LCAwKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCByZW1haW5kZXIgPSBzdW0gJSAxMTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZW1haW5kZXIgPCAyID8gMCA6IDExIC0gcmVtYWluZGVyO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZmlyc3RDaGVja0RpZ2l0ID0gdmFsaWRhdGVDaGVja0RpZ2l0KHZhbHVlLCAxMik7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZENoZWNrRGlnaXQgPSB2YWxpZGF0ZUNoZWNrRGlnaXQodmFsdWUsIDEzKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIGZpcnN0Q2hlY2tEaWdpdCAhPT0gcGFyc2VJbnQodmFsdWUuY2hhckF0KDEyKSwgMTApIHx8XHJcbiAgICAgICAgICAgICAgICBzZWNvbmRDaGVja0RpZ2l0ICE9PSBwYXJzZUludCh2YWx1ZS5jaGFyQXQoMTMpLCAxMClcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBjbnBqVmFsaWRhdG9yOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBudWxsOyAvLyB2w6FsaWRvXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gY25walZhbDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGEgc2UgYSBwbGFjYSBkbyB2ZcOtY3VsbyDDqSB2w6FsaWRhLlxyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgbGljZW5zZVBsYXRlVmFsaWRhdG9yKCk6IFZhbGlkYXRvckZuIHtcclxuICAgICAgICBjb25zdCBsaWNlbnNlUGxhdGVWYWwgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IChjb250cm9sLnZhbHVlIHx8ICcnKS50b1VwcGVyQ2FzZSgpLnRyaW0oKS5yZXBsYWNlKC8tL2csICcnKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsOyAvLyBDYW1wbyB2YXppbyBuw6NvIMOpIHJlc3BvbnNhYmlsaWRhZGUgZGVzc2UgdmFsaWRhZG9yXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGlzVmFsaWQgPSBBR1JPX1JFR0VYLmlzTWVyY29zdWxMaWNlbnNlUGxhdGUudGVzdCh2YWx1ZSkgfHxcclxuICAgICAgICAgICAgICAgIEFHUk9fUkVHRVguaXNPbGRMaWNlbnNlUGxhdGUudGVzdCh2YWx1ZSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gaXNWYWxpZCA/IG51bGwgOiB7IGxpY2Vuc2VQbGF0ZUludmFsaWQ6IHRydWUgfTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBsaWNlbnNlUGxhdGVWYWw7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbn0iXX0=
|
|
@@ -20,13 +20,25 @@ var AgroCookieUtils = /** @class */ (function () {
|
|
|
20
20
|
if (parseURIString) {
|
|
21
21
|
cookieString = decodeURIComponent(cookieString);
|
|
22
22
|
}
|
|
23
|
+
if (AgroCookieUtils.isStringAnObject(cookieString)) {
|
|
24
|
+
return JSON.parse(cookieString);
|
|
25
|
+
}
|
|
23
26
|
cookieString.split(';').forEach(function (cookie) {
|
|
24
27
|
var _a = __read(cookie.split('=').map(function (c) { return c.trim(); }), 2), key = _a[0], value = _a[1];
|
|
25
28
|
cookieObject[key] = value;
|
|
26
29
|
});
|
|
27
30
|
return cookieObject;
|
|
28
31
|
};
|
|
29
|
-
AgroCookieUtils.
|
|
32
|
+
AgroCookieUtils.isStringAnObject = function (str) {
|
|
33
|
+
try {
|
|
34
|
+
var parsed = JSON.parse(str);
|
|
35
|
+
return typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed);
|
|
36
|
+
}
|
|
37
|
+
catch (e) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
AgroCookieUtils.setCookie = function (name, value, days) {
|
|
30
42
|
var date = new Date();
|
|
31
43
|
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
|
|
32
44
|
var expires = 'expires=' + date.toUTCString();
|
|
@@ -35,4 +47,4 @@ var AgroCookieUtils = /** @class */ (function () {
|
|
|
35
47
|
return AgroCookieUtils;
|
|
36
48
|
}());
|
|
37
49
|
export { AgroCookieUtils };
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdyby1jb29raWUtdXRpbHMuY2xhc3MuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yLWFncm9uZWdvY2lvL2FuZ3VsYXItY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImNvbW1vbi9hZ3JvLWNvb2tpZS11dGlscy5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFFLGVBQWUsSUFBSSxHQUFHLEVBQUUsZUFBZSxJQUFJLFdBQVcsRUFBRSxDQUFDO0FBRWxFO0lBQUE7SUErQ0EsQ0FBQztJQTdDaUIseUJBQVMsR0FBdkIsVUFBd0IsSUFBWSxFQUFFLGFBQXFCO1FBQXJCLDhCQUFBLEVBQUEscUJBQXFCO1FBQ3ZELElBQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQzthQUN6QyxHQUFHLENBQUMsVUFBQSxNQUFNLElBQUksT0FBQSxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQWIsQ0FBYSxDQUFDO2FBQzVCLElBQUksQ0FBQyxVQUFBLE1BQU0sSUFBSSxPQUFBLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQXZCLENBQXVCLENBQUMsQ0FBQztRQUM3QyxJQUFJLE1BQU0sR0FBRyxXQUFXLGFBQVgsV0FBVyx1QkFBWCxXQUFXLENBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUV4QyxJQUFJLGFBQWEsSUFBSSxNQUFNLEVBQUU7WUFDekIsTUFBTSxHQUFHLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3ZDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFFbEIsQ0FBQztJQUVhLG1DQUFtQixHQUFqQyxVQUFrQyxZQUFvQixFQUFFLGNBQXNCO1FBQXRCLCtCQUFBLEVBQUEsc0JBQXNCO1FBQzFFLElBQU0sWUFBWSxHQUE4QixFQUFFLENBQUM7UUFDbkQsSUFBSSxjQUFjLEVBQUU7WUFDaEIsWUFBWSxHQUFHLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ25EO1FBQ0QsSUFBSSxlQUFlLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDaEQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ25DO1FBQ0QsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxNQUFNO1lBQzVCLElBQUEsd0VBQW1ELEVBQWxELFdBQUcsRUFBRSxhQUE2QyxDQUFDO1lBQzFELFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFlBQVksQ0FBQztJQUN4QixDQUFDO0lBRWEsZ0NBQWdCLEdBQTlCLFVBQStCLEdBQVc7UUFDdEMsSUFBSTtZQUNBLElBQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDL0IsT0FBTyxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDbEY7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNSLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO0lBQ0wsQ0FBQztJQUVhLHlCQUFTLEdBQXZCLFVBQXdCLElBQVksRUFBRSxLQUFhLEVBQUUsSUFBWTtRQUM3RCxJQUFNLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDNUQsSUFBTSxPQUFPLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNoRCxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxPQUFPLEdBQUcsU0FBUyxDQUFDO0lBQ3JFLENBQUM7SUFHTCxzQkFBQztBQUFELENBQUMsQUEvQ0QsSUErQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuZXhwb3J0IHsgQWdyb0Nvb2tpZVV0aWxzIGFzIEFDVSwgQWdyb0Nvb2tpZVV0aWxzIGFzIENvb2tpZVV0aWxzIH07XHJcblxyXG5leHBvcnQgY2xhc3MgQWdyb0Nvb2tpZVV0aWxzIHtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldENvb2tpZShuYW1lOiBzdHJpbmcsIHBhcnNlVVJJVmFsdWUgPSBmYWxzZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgY29uc3QgY29va2llVmFsdWUgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKVxyXG4gICAgICAgICAgICAubWFwKGNvb2tpZSA9PiBjb29raWUudHJpbSgpKVxyXG4gICAgICAgICAgICAuZmluZChjb29raWUgPT4gY29va2llLnN0YXJ0c1dpdGgobmFtZSkpO1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBjb29raWVWYWx1ZT8uc3BsaXQoJz0nKVsxXTtcclxuXHJcbiAgICAgICAgaWYgKHBhcnNlVVJJVmFsdWUgJiYgcmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IGRlY29kZVVSSUNvbXBvbmVudChyZXN1bHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIHBhcnNlQ29va2llVG9PYmplY3QoY29va2llU3RyaW5nOiBzdHJpbmcsIHBhcnNlVVJJU3RyaW5nID0gZmFsc2UpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcclxuICAgICAgICBjb25zdCBjb29raWVPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcclxuICAgICAgICBpZiAocGFyc2VVUklTdHJpbmcpIHtcclxuICAgICAgICAgICAgY29va2llU3RyaW5nID0gZGVjb2RlVVJJQ29tcG9uZW50KGNvb2tpZVN0cmluZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChBZ3JvQ29va2llVXRpbHMuaXNTdHJpbmdBbk9iamVjdChjb29raWVTdHJpbmcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGNvb2tpZVN0cmluZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvb2tpZVN0cmluZy5zcGxpdCgnOycpLmZvckVhY2goY29va2llID0+IHtcclxuICAgICAgICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gY29va2llLnNwbGl0KCc9JykubWFwKGMgPT4gYy50cmltKCkpO1xyXG4gICAgICAgICAgICBjb29raWVPYmplY3Rba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBjb29raWVPYmplY3Q7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBpc1N0cmluZ0FuT2JqZWN0KHN0cjogc3RyaW5nKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShzdHIpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHBhcnNlZCA9PT0gJ29iamVjdCcgJiYgcGFyc2VkICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHBhcnNlZCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgc2V0Q29va2llKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZywgZGF5czogbnVtYmVyKSB7XHJcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgZGF0ZS5zZXRUaW1lKGRhdGUuZ2V0VGltZSgpICsgKGRheXMgKiAyNCAqIDYwICogNjAgKiAxMDAwKSk7XHJcbiAgICAgICAgY29uc3QgZXhwaXJlcyA9ICdleHBpcmVzPScgKyBkYXRlLnRvVVRDU3RyaW5nKCk7XHJcbiAgICAgICAgZG9jdW1lbnQuY29va2llID0gbmFtZSArICc9JyArIHZhbHVlICsgJzsnICsgZXhwaXJlcyArICc7cGF0aD0vJztcclxuICAgIH1cclxuXHJcblxyXG59XHJcbiJdfQ==
|
|
@@ -285,8 +285,8 @@ var AgroFormValidator = /** @class */ (function () {
|
|
|
285
285
|
* Validator de CNPJ (Cadastro Nacional da Pessoa Jurídica).
|
|
286
286
|
* @returns
|
|
287
287
|
*/
|
|
288
|
-
AgroFormValidator.
|
|
289
|
-
|
|
288
|
+
AgroFormValidator.CNPJValidator = function () {
|
|
289
|
+
var cnpjVal = function (control) {
|
|
290
290
|
var _a;
|
|
291
291
|
var value = (_a = control.value) === null || _a === void 0 ? void 0 : _a.replace(/\D/g, '');
|
|
292
292
|
if (!value || value.length !== 14) {
|
|
@@ -317,13 +317,14 @@ var AgroFormValidator = /** @class */ (function () {
|
|
|
317
317
|
}
|
|
318
318
|
return null; // válido
|
|
319
319
|
};
|
|
320
|
+
return cnpjVal;
|
|
320
321
|
};
|
|
321
322
|
/**
|
|
322
323
|
* Valida se a placa do veículo é válida.
|
|
323
324
|
* @returns
|
|
324
325
|
*/
|
|
325
|
-
AgroFormValidator.
|
|
326
|
-
|
|
326
|
+
AgroFormValidator.licensePlateValidator = function () {
|
|
327
|
+
var licensePlateVal = function (control) {
|
|
327
328
|
var value = (control.value || '').toUpperCase().trim().replace(/-/g, '');
|
|
328
329
|
if (!value) {
|
|
329
330
|
return null; // Campo vazio não é responsabilidade desse validador
|
|
@@ -332,8 +333,9 @@ var AgroFormValidator = /** @class */ (function () {
|
|
|
332
333
|
AGRO_REGEX.isOldLicensePlate.test(value);
|
|
333
334
|
return isValid ? null : { licensePlateInvalid: true };
|
|
334
335
|
};
|
|
336
|
+
return licensePlateVal;
|
|
335
337
|
};
|
|
336
338
|
return AgroFormValidator;
|
|
337
339
|
}());
|
|
338
340
|
export { AgroFormValidator };
|
|
339
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdyby1mb3JtLXZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3ItYWdyb25lZ29jaW8vYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiZm9ybS12YWxpZGF0b3IvYWdyby1mb3JtLXZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDeEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzNELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUVoRTtJQUFBO0lBMFZBLENBQUM7SUF4Vkc7Ozs7Ozs7OztPQVNHO0lBQ1csZ0NBQWMsR0FBNUIsVUFBNkIsT0FBd0I7UUFDakQsSUFBSSxPQUFPLENBQUMsS0FBSyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzFELE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUM1QyxPQUFPLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxDQUFDO1NBQ25DO1FBQ0QsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBR0Q7Ozs7Ozs7Ozs7OztPQVlHO0lBQ1csc0NBQW9CLEdBQWxDLFVBQW1DLGNBQWtDO1FBQ2pFLElBQU0sV0FBVyxHQUFHLFVBQUMsT0FBd0I7O1lBQ3pDLElBQU0sVUFBVSxHQUFHLHFCQUFxQixDQUFDO1lBQ3pDLElBQU0sWUFBWSxHQUFTLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuRCxJQUFNLFdBQVcsR0FBUyxJQUFJ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LE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFDckQ7Z0JBQ0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUNsQztZQUVELE9BQU8sSUFBSSxDQUFDLENBQUMsU0FBUztRQUMxQixDQUFDLENBQUM7SUFDTixDQUFDO0lBR0Q7OztPQUdHO0lBQ0gsaURBQXFCLEdBQXJCO1FBQ0ksT0FBTyxVQUFDLE9BQXdCO1lBQzVCLElBQU0sS0FBSyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRTNFLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ1IsT0FBTyxJQUFJLENBQUMsQ0FBQyxxREFBcUQ7YUFDckU7WUFFRCxJQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFDekQsVUFBVSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUU3QyxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRSxDQUFDO1FBQzFELENBQUMsQ0FBQztJQUNOLENBQUM7SUFJTCx3QkFBQztBQUFELENBQUMsQUExVkQsSUEwVkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IERhdGVDb21wYXJpc29uVHlwZSB9IGZyb20gJy4uL2VudW1zL2RhdGUtY29tcGFyaXNvbi10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBBR1JPX1JFR0VYIH0gZnJvbSAnLi4vY29tbW9uL2Fncm8tcmVnZXguY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBOdW1iZXJDb21wYXJpc29uVHlwZSB9IGZyb20gJy4uL2VudW1zL251bWJlci1jb21wYXJpc29uLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IE9iamVjdFV0aWxzIH0gZnJvbSAnLi4vY29tbW9uL2Fncm8tb2JqZWN0LXV0aWxzLmNsYXNzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBBZ3JvRm9ybVZhbGlkYXRvciB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGF0b3IgcGFyYSBjaGVjYXIgc2UgbyBjYW1wbyDDqSB1bSBlLW1haWxcclxuICAgICAqXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogdGhpcy5teUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAqICAgICBFTUFJTF9GSUVMRDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgQWdyb0Zvcm1WYWxpZGF0b3IuZW1haWxWYWxpZGF0b3JdXVxyXG4gICAgICogfSk7XHJcbiAgICAgKiBAcGFyYW0gY29udHJvbFxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBlbWFpbFZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgbnVsbCB7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUgJiYgIUFHUk9fUkVHRVguaXNFbWFpbC50ZXN0KGNvbnRyb2wudmFsdWUpKSB7XHJcbiAgICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKHsgZW1haWxWYWxpZGF0b3I6IHRydWUgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGVtYWlsVmFsaWRhdG9yOiB0cnVlIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwbGlxdWUgZXNzZSB2YWxpZGFkb3IgZW0gdW0gY2FtcG8gZG8gdGlwbyBEYXRlLCBwYXJhIHZlcmlmaWNhciBzZSBhIGRhdGEgc2VsZWNpb25hZGEgw6kgbWFpb3Igb3UgbWVub3IgcXVlIGEgZGF0YSBhdHVhbC5cclxuICAgICAqXHJcbiAgICAgKiBVdGlsaXplIG8gcGFyw6JtZXRybyBjb21wYXJpc29uVHlwZSBwYXJhIGRlZmluaXIgc2UgYSBkYXRhIHNlbGVjaW9uYWRhIGRldmUgc2VyIG1haW9yIG91IG1lbm9yIHF1ZSBhIGRhdGEgYXR1YWwuXHJcbiAgICAgKiBBIHZhbGlkYcOnw6NvIHNlcsOhIGF0cmF2w6lzIGRvIGVudW0gRGF0ZUNvbXBhcmlzb25UeXBlLlxyXG4gICAgICpcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiB0aGlzLm15Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICogICAgIE5PTUVfQ0FNUE86IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIEFncm9Gb3JtVmFsaWRhdG9yLmNvbXBhcmVEYXRlV2l0aFRvZGF5KERhdGVDb21wYXJpc29uVHlwZS5ncmVhdGhlclRoYW4pXV1cclxuICAgICAqIH0pO1xyXG4gICAgICogQHBhcmFtIGNvbXBhcmlzb25UeXBlXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGNvbXBhcmVEYXRlV2l0aFRvZGF5KGNvbXBhcmlzb25UeXBlOiBEYXRlQ29tcGFyaXNvblR5cGUpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgY29uc3QgY29tcGFyZURhdGUgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gJ2RhdGVDb21wYXJpc29uVG9kYXknO1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZERhdGU6IERhdGUgPSBuZXcgRGF0ZShjb250cm9sLnZhbHVlKTtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudERhdGU6IERhdGUgPSBuZXcgRGF0ZSgpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgY29uZGl0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIFtEYXRlQ29tcGFyaXNvblR5cGUuZ3JlYXRoZXJUaGFuXTogc2VsZWN0ZWREYXRlIDw9IGN1cnJlbnREYXRlLFxyXG4gICAgICAgICAgICAgICAgW0RhdGVDb21wYXJpc29uVHlwZS5sZXNzVGhhbl06IHNlbGVjdGVkRGF0ZSA+PSBjdXJyZW50RGF0ZVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvbmRpdGlvbnNbY29tcGFyaXNvblR5cGVdKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBbbWV0aG9kTmFtZV06IHsgdmFsdWU6IGNvbnRyb2wudmFsdWUgfSB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBjb21wYXJlRGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbXBhcmEgZG9pcyBjYW1wb3MgZG8gdGlwbyBEYXRlLCB2ZXJpZmljYW5kbyBzZSBvIGNhbXBvIEEgw6kgbWFpb3IgcXVlIG8gY2FtcG8gQi4gU2UgQSBmb3IgbWFpb3IgcXVlIEIsIGVudMOjb1xyXG4gICAgICogbyBjYW1wbyBBIMOpIGludmFsaWRhZG8uIENhc28gY29udHLDoXJpbywgbyBjYW1wbyBBIMOpIHZhbGlkYWRvLlxyXG4gICAgICpcclxuICAgICAqIEFwbGlxdWUgZXNzZSBjYW1wbyBubyBGb3JtR3JvdXAsIHBhc3NhbmRvIG9zIG5vbWVzIGRvcyBjYW1wb3MgcXVlIGRlc2VqYSBjb21wYXJhci5cclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiB0aGlzLm15Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICAgICAgICBOT01FX0NBTVBPX2RhdGVBOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgICBOT01FX0NBTVBPX2RhdGVCOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdXHJcbiAgICAgICAgfSwgeyB2YWxpZGF0b3I6IEFncm9Gb3JtVmFsaWRhdG9yLmRhdGVDb21wYXJpc29uVmFsaWRhdG9yKCdOT01FX0NBTVBPX2RhdGVBJywgJ05PTUVfQ0FNUE9fZGF0ZUInKSB9KTtcclxuICAgICAqIEBwYXJhbSBjb250cm9sTmFtZUFcclxuICAgICAqIEBwYXJhbSBjb250cm9sTmFtZUJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgY29tcGFyZURhdGVXaXRoT3RoZXJEYXRlRmllbGQoY29udHJvbE5hbWVBOiBzdHJpbmcsIGNvbnRyb2xOYW1lQjogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGNvbXBhcmVEYXRlID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBudWxsID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZm9ybUdyb3VwID0gY29udHJvbCBhcyBGb3JtR3JvdXA7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGVBID0gZm9ybUdyb3VwLmdldChjb250cm9sTmFtZUEpPy52YWx1ZTtcclxuICAgICAgICAgICAgY29uc3QgZGF0ZUIgPSBmb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lQik/LnZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gJ2NvbXBhcmVEYXRlV2l0aE90aGVyRGF0ZUZpZWxkJztcclxuICAgICAgICAgICAgaWYgKGRhdGVBICYmIGRhdGVCKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlQU9iaiA9IG5ldyBEYXRlKGRhdGVBKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVCT2JqID0gbmV3IERhdGUoZGF0ZUIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGVBT2JqIDwgZGF0ZUJPYmopIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lQSk/LnNldEVycm9ycyh7IFttZXRob2ROYW1lXTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBbbWV0aG9kTmFtZV06IHRydWUgfTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybUdyb3VwLmdldChjb250cm9sTmFtZUEpPy5oYXNFcnJvcihtZXRob2ROYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWVBKT8uc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVEYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhdG9yIHBhcmEgY2hlY2FyIHNlIG8gY2FtcG8gw6kgdW0gbsO6bWVybyBkZSB0ZWxlZm9uZSBkZSBhY29yZG8gY29tIHVtYSBtw6FzY2FyYSBpbmZvcm1hZGEuXHJcbiAgICAgKlxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHRoaXMubXlGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgKiAgICAgVEVMRUZPTkVfRklFTEQ6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIEFncm9Gb3JtVmFsaWRhdG9yLnBob25lVmFsaWRhdG9yKCcoOTkpIDk5OTktOTk5OScpXV1cclxuICAgICAqIH0pO1xyXG4gICAgICogQHBhcmFtIG1hc2tcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgcGhvbmVWYWxpZGF0b3IobWFzazogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IHBob25lQ29udHJvbFZhbGlkYXRpb24gPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gJ3Bob25lVmFsaWRhdG9yJztcclxuICAgICAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGBeJHttYXNrLnJlcGxhY2UoLzkvZywgJ1xcXFxkJykucmVwbGFjZSgvXFwoL2csICdcXFxcKCcpLnJlcGxhY2UoL1xcKS9nLCAnXFxcXCknKS5yZXBsYWNlKC8tL2csICdcXFxcLScpfSRgKTtcclxuICAgICAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUgJiYgIXJlZ2V4LnRlc3QoY29udHJvbC52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKHsgW21ldGhvZE5hbWVdOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgW21ldGhvZE5hbWVdOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29udHJvbC5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHBob25lQ29udHJvbFZhbGlkYXRpb247XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGF0b3IgcGFyYSBjaGVjYXIgc2UgdW0gY2FtcG8gZGUgbsO6bWVyb3Mgw6kgbWFpb3Igb3UgbWVub3IgcXVlIG91dHJvIGNhbXBvLlxyXG4gICAgICpcclxuICAgICAqIEFwbGlxdWUgZXNzZSB2YWxpZGF0b3Igbm8gRm9ybUdyb3VwLCBwYXNzYW5kbyBvcyBub21lcyBkb3MgY2FtcG9zIHF1ZSBkZXNlamEgY29tcGFyYXIuXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogdGhpcy5teUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAqICAgICBOVU1FUk9fQTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAqICAgICBOVU1FUk9fQjogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXVxyXG4gICAgICogfSwgeyB2YWxpZGF0b3I6IEFncm9Gb3JtVmFsaWRhdG9yLmNvbXBhcmVOdW1iZXJGaWVsZHMoJ05VTUVST19BJywgJ05VTUVST19CJywgTnVtYmVyQ29tcGFyaXNvblR5cGUuRVFVQUxTKSB9KTtcclxuICAgICAqXHJcbiAgICAgKiBOZXN0ZSBjYXNvLCBhIHZlcmlmaWNhw6fDo28gc2Vyw6Egc2UgbyBOVU1FUk9fQSDDqSBpZ3VhbCBhbyBOVU1FUkJfQi5cclxuICAgICAqIEBwYXJhbSBjb250cm9sTmFtZUFcclxuICAgICAqIEBwYXJhbSBjb250cm9sTmFtZUJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgY29tcGFyZU51bWJlckZpZWxkcyhjb250cm9sTmFtZUE6IHN0cmluZywgY29udHJvbE5hbWVCOiBzdHJpbmcsIGNvbXBhcmlzb25NZXRob2Q6IE51bWJlckNvbXBhcmlzb25UeXBlKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGNvbXBhcmVOdW1iZXIgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBmb3JtR3JvdXAgPSBjb250cm9sIGFzIEZvcm1Hcm91cDtcclxuICAgICAgICAgICAgY29uc3QgbnVtYmVyQSA9IGZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWVBKT8udmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnN0IG51bWJlckIgPSBmb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lQik/LnZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gJ2NvbXBhcmVOdW1iZXJGaWVsZHMnO1xyXG4gICAgICAgICAgICBpZiAobnVtYmVyQSAmJiBudW1iZXJCKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvclR5cGUgPSBOdW1iZXJDb21wYXJpc29uVHlwZVtjb21wYXJpc29uTWV0aG9kXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yQ29uZGl0aW9uID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIFtOdW1iZXJDb21wYXJpc29uVHlwZS5FUVVBTFNdOiBudW1iZXJBICE9PSBudW1iZXJCLFxyXG4gICAgICAgICAgICAgICAgICAgIFtOdW1iZXJDb21wYXJpc29uVHlwZS5HUkVBVEVSX1RIQU5dOiBudW1iZXJBIDw9IG51bWJlckIsXHJcbiAgICAgICAgICAgICAgICAgICAgW051bWJlckNvbXBhcmlzb25UeXBlLkxFU1NfVEhBTl06IG51bWJlckEgPj0gbnVtYmVyQixcclxuICAgICAgICAgICAgICAgICAgICBbTnVtYmVyQ29tcGFyaXNvblR5cGUuR1JFQVRFUl9USEFOX09SX0VRVUFMXTogbnVtYmVyQSA8IG51bWJlckIsXHJcbiAgICAgICAgICAgICAgICAgICAgW051bWJlckNvbXBhcmlzb25UeXBlLkxFU1NfVEhBTl9PUl9FUVVBTF06IG51bWJlckEgPiBudW1iZXJCLFxyXG4gICAgICAgICAgICAgICAgICAgIFtOdW1iZXJDb21wYXJpc29uVHlwZS5OT1RfRVFVQUxTXTogbnVtYmVyQSA9PT0gbnVtYmVyQlxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3JDb25kaXRpb25bY29tcGFyaXNvbk1ldGhvZF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sQSA9IGZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWVBKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbEEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbEEuc2V0RXJyb3JzKHsgW21ldGhvZE5hbWVdOiBjb21wYXJpc29uTWV0aG9kIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBbbWV0aG9kTmFtZV06IGVycm9yVHlwZSB9O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lQSk/Lmhhc0Vycm9yKG1ldGhvZE5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udHJvbEEgPSBmb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lQSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xBKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xBLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gY29tcGFyZU51bWJlcjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYXRvciBwYXJhIGNoZWNhciBzZSB1bSB2YWxvciBlc3TDoSBlbnRyZSBvcyBkZW1haXMgdmFsb3JlcyBkZSB0csOqcyBmb3JtQ29udHJvbHMuXHJcbiAgICAgKlxyXG4gICAgICogQXBsaXF1ZSBlc3NlIHZhbGlkYXRvciBubyBGb3JtR3JvdXAsIHBhc3NhbmRvIG9zIG5vbWVzIGRvcyB0csOqcyBmb3JtQ29udHJvbHMgcXVlIGRlc2VqYSBjb21wYXJhci5cclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiB0aGlzLm15Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICogICAgIG1pbm9yRm9ybUNvbnRyb2w6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgKiAgICAgdGFyZ2V0Rm9ybUNvbnRyb2w6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgKiAgICAgbWFqb3JGb3JtQ29udHJvbDogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXVxyXG4gICAgICogfSwgeyB2YWxpZGF0b3I6IEFncm9Gb3JtVmFsaWRhdG9yLmNoZWNrVmFsdWVCZXR3ZWVuKCdtaW5vckZvcm1Db250cm9sJywgJ3RhcmdldEZvcm1Db250cm9sJywgJ21ham9yRm9ybUNvbnRyb2wnKSB9KTtcclxuICAgICAqXHJcbiAgICAgKiBOZXN0ZSBjYXNvLCBhIHZlcmlmaWNhw6fDo28gc2Vyw6Egc2UgbyB0YXJnZXRGb3JtQ29udHJvbCBlc3TDoSBlbnRyZSBvIG1pbm9yRm9ybUNvbnRyb2wgZSBvIG1ham9yRm9ybUNvbnRyb2wuXHJcbiAgICAgKiBAcGFyYW0gbWlub3JGb3JtQ29udHJvbFxyXG4gICAgICogQHBhcmFtIHRhcmdldEZvcm1Db250cm9sXHJcbiAgICAgKiBAcGFyYW0gbWFqb3JGb3JtQ29udHJvbFxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBjaGVja1ZhbHVlQmV0d2VlbihtaW5vckZvcm1Db250cm9sOiBzdHJpbmcsIHRhcmdldEZvcm1Db250cm9sOiBzdHJpbmcsIG1ham9yRm9ybUNvbnRyb2w6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcclxuICAgICAgICBjb25zdCBjaGVja1ZhbHVlID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBudWxsID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZm9ybUdyb3VwID0gY29udHJvbCBhcyBGb3JtR3JvdXA7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlQSA9IGZvcm1Hcm91cC5nZXQobWlub3JGb3JtQ29udHJvbCk/LnZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZUIgPSBmb3JtR3JvdXAuZ2V0KHRhcmdldEZvcm1Db250cm9sKT8udmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlQyA9IGZvcm1Hcm91cC5nZXQobWFqb3JGb3JtQ29udHJvbCk/LnZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gJ2NoZWNrVmFsdWVCZXR3ZWVuJztcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGFyZU51bWJlcnMgPSBbdmFsdWVBLCB2YWx1ZUIsIHZhbHVlQ10uZXZlcnkodiA9PiB2ICE9PSBudWxsICYmIHYgIT09IHVuZGVmaW5lZCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoYXJlTnVtYmVycykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlQiA8IHZhbHVlQSB8fCB2YWx1ZUIgPiB2YWx1ZUMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRDb250cm9sID0gZm9ybUdyb3VwLmdldCh0YXJnZXRGb3JtQ29udHJvbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldENvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Q29udHJvbC5zZXRFcnJvcnMoeyBbbWV0aG9kTmFtZV06IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IFttZXRob2ROYW1lXTogdHJ1ZSB9O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRDb250cm9sID0gZm9ybUdyb3VwLmdldCh0YXJnZXRGb3JtQ29udHJvbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldENvbnRyb2w/Lmhhc0Vycm9yKG1ldGhvZE5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IHsgLi4udGFyZ2V0Q29udHJvbC5lcnJvcnMgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGVycm9yc1ttZXRob2ROYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Q29udHJvbC5zZXRFcnJvcnMoT2JqZWN0LmtleXMoZXJyb3JzKS5sZW5ndGggPyBlcnJvcnMgOiBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gY2hlY2tWYWx1ZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGF0b3IgcGFyYSBjaGVjYXIgc2UgbyBjYW1wbyDDqSB1bSBvYmpldG8gZSBzZSBwb3NzdWkgdW1hIHByb3ByaWVkYWRlIGVzcGVjw61maWNhLlxyXG4gICAgICpcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiB0aGlzLm15Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICogICAgIE9CSkVUT19GSUVMRDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgQWdyb0Zvcm1WYWxpZGF0b3Iub2JqZWN0UHJvcGVydHlWYWxpZGF0b3IoJ3Byb3ByaWVkYWRlJyldXVxyXG4gICAgICogfSk7XHJcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIG9iamVjdFByb3BlcnR5VmFsaWRhdG9yKHByb3BlcnR5TmFtZTogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IG9iamVjdFByb3BlcnR5ID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBudWxsID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbWV0aG9kTmFtZSA9ICdvYmplY3RQcm9wZXJ0eSc7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3RVdGlscy5pc09iamVjdChjb250cm9sLnZhbHVlKSAmJiBPYmplY3RVdGlscy5jb250YWluc1Byb3BlcnR5KGNvbnRyb2wudmFsdWUsIHByb3BlcnR5TmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29udHJvbC5zZXRFcnJvcnMoeyBbbWV0aG9kTmFtZV06IHRydWUgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiB7IFttZXRob2ROYW1lXTogdHJ1ZSB9O1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdFByb3BlcnR5O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhIHNlIG8gY2FtcG8gw6kgdW0gQ1BGIChDYWRhc3RybyBkZSBQZXNzb2EgRsOtc2ljYSkgdsOhbGlkby5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBDUEZWYWxpZGF0b3IoKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGNwZlZhbCA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNwZiA9IChjb250cm9sLnZhbHVlIHx8ICcnKS5yZXBsYWNlKC9bXlxcZF0vZywgJycpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFjcGYpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsOyAvLyBOw6NvIHZhbGlkYSBjYW1wbyB2YXppbywgdXNlIFZhbGlkYXRvcnMucmVxdWlyZWQganVudG8gc2UgcXVpc2VyIG9icmlnYXRvcmllZGFkZVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY3BmLmxlbmd0aCAhPT0gMTEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGNwZlZhbGlkYXRvcjogdHJ1ZSB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBWZXJpZmljYSBzZSB0b2RvcyBvcyBkw61naXRvcyBzw6NvIGlndWFpcyAoZXguOiAxMTExMTExMTExMSlcclxuICAgICAgICAgICAgaWYgKC9eKFxcZClcXDF7MTB9JC8udGVzdChjcGYpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBjcGZWYWxpZGF0b3I6IHRydWUgfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gVmFsaWRhw6fDo28gZG9zIGTDrWdpdG9zIHZlcmlmaWNhZG9yZXNcclxuICAgICAgICAgICAgY29uc3QgY2FsY0NoZWNrRGlnaXQgPSAoY3BmU2xpY2U6IHN0cmluZywgZmFjdG9yOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCB0b3RhbCA9IDA7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGRpZ2l0IG9mIGNwZlNsaWNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gcGFyc2VJbnQoZGlnaXQsIDEwKSAqIGZhY3Rvci0tO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVtYWluZGVyID0gdG90YWwgJSAxMTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZW1haW5kZXIgPCAyID8gMCA6IDExIC0gcmVtYWluZGVyO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGlnaXQxID0gY2FsY0NoZWNrRGlnaXQoY3BmLnN1YnN0cmluZygwLCA5KSwgMTApO1xyXG4gICAgICAgICAgICBjb25zdCBkaWdpdDIgPSBjYWxjQ2hlY2tEaWdpdChjcGYuc3Vic3RyaW5nKDAsIDkpICsgZGlnaXQxLCAxMSk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBpc1ZhbGlkID0gZGlnaXQxID09PSBwYXJzZUludChjcGYuY2hhckF0KDkpLCAxMCkgJiZcclxuICAgICAgICAgICAgICAgIGRpZ2l0MiA9PT0gcGFyc2VJbnQoY3BmLmNoYXJBdCgxMCksIDEwKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkID8gbnVsbCA6IHsgY3BmVmFsaWRhdG9yOiB0cnVlIH07XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gY3BmVmFsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhdG9yIGRlIENOUEogKENhZGFzdHJvIE5hY2lvbmFsIGRhIFBlc3NvYSBKdXLDrWRpY2EpLlxyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIENOUEpWYWxpZGF0b3IoKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU/LnJlcGxhY2UoL1xcRC9nLCAnJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXZhbHVlIHx8IHZhbHVlLmxlbmd0aCAhPT0gMTQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGNucGpWYWxpZGF0b3I6IHRydWUgfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gVmVyaWZpY2EgQ05QSnMgY29tIHRvZG9zIG9zIGTDrWdpdG9zIGlndWFpcyAoaW52w6FsaWRvcylcclxuICAgICAgICAgICAgaWYgKC9eKFxcZClcXDF7MTN9JC8udGVzdCh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGNucGpWYWxpZGF0b3I6IHRydWUgfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVDaGVja0RpZ2l0ID0gKGNucGo6IHN0cmluZywgbGVuZ3RoOiBudW1iZXIpOiBudW1iZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgd2VpZ2h0cyA9IGxlbmd0aCA9PT0gMTJcclxuICAgICAgICAgICAgICAgICAgICA/IFs1LCA0LCAzLCAyLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyXVxyXG4gICAgICAgICAgICAgICAgICAgIDogWzYsIDUsIDQsIDMsIDIsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDJdO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHN1bSA9IGNucGpcclxuICAgICAgICAgICAgICAgICAgICAuc2xpY2UoMCwgbGVuZ3RoKVxyXG4gICAgICAgICAgICAgICAgICAgIC5zcGxpdCgnJylcclxuICAgICAgICAgICAgICAgICAgICAucmVkdWNlKChhY2MsIGRpZ2l0LCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWNjICsgcGFyc2VJbnQoZGlnaXQsIDEwKSAqIHdlaWdodHNbaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIDApO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlbWFpbmRlciA9IHN1bSAlIDExO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlbWFpbmRlciA8IDIgPyAwIDogMTEgLSByZW1haW5kZXI7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaXJzdENoZWNrRGlnaXQgPSB2YWxpZGF0ZUNoZWNrRGlnaXQodmFsdWUsIDEyKTtcclxuICAgICAgICAgICAgY29uc3Qgc2Vjb25kQ2hlY2tEaWdpdCA9IHZhbGlkYXRlQ2hlY2tEaWdpdCh2YWx1ZSwgMTMpO1xyXG5cclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgZmlyc3RDaGVja0RpZ2l0ICE9PSBwYXJzZUludCh2YWx1ZS5jaGFyQXQoMTIpLCAxMCkgfHxcclxuICAgICAgICAgICAgICAgIHNlY29uZENoZWNrRGlnaXQgIT09IHBhcnNlSW50KHZhbHVlLmNoYXJBdCgxMyksIDEwKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGNucGpWYWxpZGF0b3I6IHRydWUgfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7IC8vIHbDoWxpZG9cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYSBzZSBhIHBsYWNhIGRvIHZlw61jdWxvIMOpIHbDoWxpZGEuXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgbGljZW5zZVBsYXRlVmFsaWRhdG9yKCk6IFZhbGlkYXRvckZuIHtcclxuICAgICAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSAoY29udHJvbC52YWx1ZSB8fCAnJykudG9VcHBlckNhc2UoKS50cmltKCkucmVwbGFjZSgvLS9nLCAnJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsgLy8gQ2FtcG8gdmF6aW8gbsOjbyDDqSByZXNwb25zYWJpbGlkYWRlIGRlc3NlIHZhbGlkYWRvclxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBpc1ZhbGlkID0gQUdST19SRUdFWC5pc01lcmNvc3VsTGljZW5zZVBsYXRlLnRlc3QodmFsdWUpIHx8XHJcbiAgICAgICAgICAgICAgICBBR1JPX1JFR0VYLmlzT2xkTGljZW5zZVBsYXRlLnRlc3QodmFsdWUpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWQgPyBudWxsIDogeyBsaWNlbnNlUGxhdGVJbnZhbGlkOiB0cnVlIH07XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcblxyXG5cclxufSJdfQ==
|
|
341
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdyby1mb3JtLXZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3ItYWdyb25lZ29jaW8vYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiZm9ybS12YWxpZGF0b3IvYWdyby1mb3JtLXZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDeEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzNELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUVoRTtJQUFBO0lBNFZBLENBQUM7SUExVkc7Ozs7Ozs7OztPQVNHO0lBQ1csZ0NBQWMsR0FBNUIsVUFBNkIsT0FBd0I7UUFDakQsSUFBSSxPQUFPLENBQUMsS0FBSyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzFELE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUM1QyxPQUFPLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxDQUFDO1NBQ25DO1FBQ0QsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBR0Q7Ozs7Ozs7Ozs7OztPQVlHO0lBQ1csc0NBQW9CLEdBQWxDLFVBQW1DLGNBQWtDO1FBQ2pFLElBQU0sV0FBVyxHQUFHLFVBQUMsT0FBd0I7O1lBQ3pDLElBQU0sVUFBVSxHQUFHLHFCQUFxQixDQUFDO1lBQ3pDLElBQU0sWUFBWSxHQUFTLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuRCxJQUFNLFdBQVcsR0FBUyxJQUFJ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QyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUNyRDtnQkFDRSxPQUFPLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDO2FBQ2xDO1lBRUQsT0FBTyxJQUFJLENBQUMsQ0FBQyxTQUFTO1FBQzFCLENBQUMsQ0FBQztRQUNGLE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFHRDs7O09BR0c7SUFDVyx1Q0FBcUIsR0FBbkM7UUFDSSxJQUFNLGVBQWUsR0FBRyxVQUFDLE9BQXdCO1lBQzdDLElBQU0sS0FBSyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRTNFLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ1IsT0FBTyxJQUFJLENBQUMsQ0FBQyxxREFBcUQ7YUFDckU7WUFFRCxJQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFDekQsVUFBVSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUU3QyxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRSxDQUFDO1FBQzFELENBQUMsQ0FBQztRQUNGLE9BQU8sZUFBZSxDQUFDO0lBQzNCLENBQUM7SUFJTCx3QkFBQztBQUFELENBQUMsQUE1VkQsSUE0VkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IERhdGVDb21wYXJpc29uVHlwZSB9IGZyb20gJy4uL2VudW1zL2RhdGUtY29tcGFyaXNvbi10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBBR1JPX1JFR0VYIH0gZnJvbSAnLi4vY29tbW9uL2Fncm8tcmVnZXguY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBOdW1iZXJDb21wYXJpc29uVHlwZSB9IGZyb20gJy4uL2VudW1zL251bWJlci1jb21wYXJpc29uLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IE9iamVjdFV0aWxzIH0gZnJvbSAnLi4vY29tbW9uL2Fncm8tb2JqZWN0LXV0aWxzLmNsYXNzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBBZ3JvRm9ybVZhbGlkYXRvciB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGF0b3IgcGFyYSBjaGVjYXIgc2UgbyBjYW1wbyDDqSB1bSBlLW1haWxcclxuICAgICAqXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogdGhpcy5teUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAqICAgICBFTUFJTF9GSUVMRDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgQWdyb0Zvcm1WYWxpZGF0b3IuZW1haWxWYWxpZGF0b3JdXVxyXG4gICAgICogfSk7XHJcbiAgICAgKiBAcGFyYW0gY29udHJvbFxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBlbWFpbFZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgbnVsbCB7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUgJiYgIUFHUk9fUkVHRVguaXNFbWFpbC50ZXN0KGNvbnRyb2wudmFsdWUpKSB7XHJcbiAgICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKHsgZW1haWxWYWxpZGF0b3I6IHRydWUgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGVtYWlsVmFsaWRhdG9yOiB0cnVlIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwbGlxdWUgZXNzZSB2YWxpZGFkb3IgZW0gdW0gY2FtcG8gZG8gdGlwbyBEYXRlLCBwYXJhIHZlcmlmaWNhciBzZSBhIGRhdGEgc2VsZWNpb25hZGEgw6kgbWFpb3Igb3UgbWVub3IgcXVlIGEgZGF0YSBhdHVhbC5cclxuICAgICAqXHJcbiAgICAgKiBVdGlsaXplIG8gcGFyw6JtZXRybyBjb21wYXJpc29uVHlwZSBwYXJhIGRlZmluaXIgc2UgYSBkYXRhIHNlbGVjaW9uYWRhIGRldmUgc2VyIG1haW9yIG91IG1lbm9yIHF1ZSBhIGRhdGEgYXR1YWwuXHJcbiAgICAgKiBBIHZhbGlkYcOnw6NvIHNlcsOhIGF0cmF2w6lzIGRvIGVudW0gRGF0ZUNvbXBhcmlzb25UeXBlLlxyXG4gICAgICpcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiB0aGlzLm15Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICogICAgIE5PTUVfQ0FNUE86IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIEFncm9Gb3JtVmFsaWRhdG9yLmNvbXBhcmVEYXRlV2l0aFRvZGF5KERhdGVDb21wYXJpc29uVHlwZS5ncmVhdGhlclRoYW4pXV1cclxuICAgICAqIH0pO1xyXG4gICAgICogQHBhcmFtIGNvbXBhcmlzb25UeXBlXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGNvbXBhcmVEYXRlV2l0aFRvZGF5KGNvbXBhcmlzb25UeXBlOiBEYXRlQ29tcGFyaXNvblR5cGUpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgY29uc3QgY29tcGFyZURhdGUgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gJ2RhdGVDb21wYXJpc29uVG9kYXknO1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZERhdGU6IERhdGUgPSBuZXcgRGF0ZShjb250cm9sLnZhbHVlKTtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudERhdGU6IERhdGUgPSBuZXcgRGF0ZSgpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgY29uZGl0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIFtEYXRlQ29tcGFyaXNvblR5cGUuZ3JlYXRoZXJUaGFuXTogc2VsZWN0ZWREYXRlIDw9IGN1cnJlbnREYXRlLFxyXG4gICAgICAgICAgICAgICAgW0RhdGVDb21wYXJpc29uVHlwZS5sZXNzVGhhbl06IHNlbGVjdGVkRGF0ZSA+PSBjdXJyZW50RGF0ZVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvbmRpdGlvbnNbY29tcGFyaXNvblR5cGVdKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBbbWV0aG9kTmFtZV06IHsgdmFsdWU6IGNvbnRyb2wudmFsdWUgfSB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBjb21wYXJlRGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbXBhcmEgZG9pcyBjYW1wb3MgZG8gdGlwbyBEYXRlLCB2ZXJpZmljYW5kbyBzZSBvIGNhbXBvIEEgw6kgbWFpb3IgcXVlIG8gY2FtcG8gQi4gU2UgQSBmb3IgbWFpb3IgcXVlIEIsIGVudMOjb1xyXG4gICAgICogbyBjYW1wbyBBIMOpIGludmFsaWRhZG8uIENhc28gY29udHLDoXJpbywgbyBjYW1wbyBBIMOpIHZhbGlkYWRvLlxyXG4gICAgICpcclxuICAgICAqIEFwbGlxdWUgZXNzZSBjYW1wbyBubyBGb3JtR3JvdXAsIHBhc3NhbmRvIG9zIG5vbWVzIGRvcyBjYW1wb3MgcXVlIGRlc2VqYSBjb21wYXJhci5cclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiB0aGlzLm15Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICAgICAgICBOT01FX0NBTVBPX2RhdGVBOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgICBOT01FX0NBTVBPX2RhdGVCOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdXHJcbiAgICAgICAgfSwgeyB2YWxpZGF0b3I6IEFncm9Gb3JtVmFsaWRhdG9yLmRhdGVDb21wYXJpc29uVmFsaWRhdG9yKCdOT01FX0NBTVBPX2RhdGVBJywgJ05PTUVfQ0FNUE9fZGF0ZUInKSB9KTtcclxuICAgICAqIEBwYXJhbSBjb250cm9sTmFtZUFcclxuICAgICAqIEBwYXJhbSBjb250cm9sTmFtZUJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgY29tcGFyZURhdGVXaXRoT3RoZXJEYXRlRmllbGQoY29udHJvbE5hbWVBOiBzdHJpbmcsIGNvbnRyb2xOYW1lQjogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGNvbXBhcmVEYXRlID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBudWxsID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZm9ybUdyb3VwID0gY29udHJvbCBhcyBGb3JtR3JvdXA7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGVBID0gZm9ybUdyb3VwLmdldChjb250cm9sTmFtZUEpPy52YWx1ZTtcclxuICAgICAgICAgICAgY29uc3QgZGF0ZUIgPSBmb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lQik/LnZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gJ2NvbXBhcmVEYXRlV2l0aE90aGVyRGF0ZUZpZWxkJztcclxuICAgICAgICAgICAgaWYgKGRhdGVBICYmIGRhdGVCKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlQU9iaiA9IG5ldyBEYXRlKGRhdGVBKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVCT2JqID0gbmV3IERhdGUoZGF0ZUIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGVBT2JqIDwgZGF0ZUJPYmopIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lQSk/LnNldEVycm9ycyh7IFttZXRob2ROYW1lXTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBbbWV0aG9kTmFtZV06IHRydWUgfTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybUdyb3VwLmdldChjb250cm9sTmFtZUEpPy5oYXNFcnJvcihtZXRob2ROYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWVBKT8uc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVEYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhdG9yIHBhcmEgY2hlY2FyIHNlIG8gY2FtcG8gw6kgdW0gbsO6bWVybyBkZSB0ZWxlZm9uZSBkZSBhY29yZG8gY29tIHVtYSBtw6FzY2FyYSBpbmZvcm1hZGEuXHJcbiAgICAgKlxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHRoaXMubXlGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgKiAgICAgVEVMRUZPTkVfRklFTEQ6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIEFncm9Gb3JtVmFsaWRhdG9yLnBob25lVmFsaWRhdG9yKCcoOTkpIDk5OTktOTk5OScpXV1cclxuICAgICAqIH0pO1xyXG4gICAgICogQHBhcmFtIG1hc2tcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgcGhvbmVWYWxpZGF0b3IobWFzazogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IHBob25lQ29udHJvbFZhbGlkYXRpb24gPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gJ3Bob25lVmFsaWRhdG9yJztcclxuICAgICAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGBeJHttYXNrLnJlcGxhY2UoLzkvZywgJ1xcXFxkJykucmVwbGFjZSgvXFwoL2csICdcXFxcKCcpLnJlcGxhY2UoL1xcKS9nLCAnXFxcXCknKS5yZXBsYWNlKC8tL2csICdcXFxcLScpfSRgKTtcclxuICAgICAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUgJiYgIXJlZ2V4LnRlc3QoY29udHJvbC52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKHsgW21ldGhvZE5hbWVdOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgW21ldGhvZE5hbWVdOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29udHJvbC5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHBob25lQ29udHJvbFZhbGlkYXRpb247XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGF0b3IgcGFyYSBjaGVjYXIgc2UgdW0gY2FtcG8gZGUgbsO6bWVyb3Mgw6kgbWFpb3Igb3UgbWVub3IgcXVlIG91dHJvIGNhbXBvLlxyXG4gICAgICpcclxuICAgICAqIEFwbGlxdWUgZXNzZSB2YWxpZGF0b3Igbm8gRm9ybUdyb3VwLCBwYXNzYW5kbyBvcyBub21lcyBkb3MgY2FtcG9zIHF1ZSBkZXNlamEgY29tcGFyYXIuXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogdGhpcy5teUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAqICAgICBOVU1FUk9fQTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAqICAgICBOVU1FUk9fQjogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXVxyXG4gICAgICogfSwgeyB2YWxpZGF0b3I6IEFncm9Gb3JtVmFsaWRhdG9yLmNvbXBhcmVOdW1iZXJGaWVsZHMoJ05VTUVST19BJywgJ05VTUVST19CJywgTnVtYmVyQ29tcGFyaXNvblR5cGUuRVFVQUxTKSB9KTtcclxuICAgICAqXHJcbiAgICAgKiBOZXN0ZSBjYXNvLCBhIHZlcmlmaWNhw6fDo28gc2Vyw6Egc2UgbyBOVU1FUk9fQSDDqSBpZ3VhbCBhbyBOVU1FUkJfQi5cclxuICAgICAqIEBwYXJhbSBjb250cm9sTmFtZUFcclxuICAgICAqIEBwYXJhbSBjb250cm9sTmFtZUJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgY29tcGFyZU51bWJlckZpZWxkcyhjb250cm9sTmFtZUE6IHN0cmluZywgY29udHJvbE5hbWVCOiBzdHJpbmcsIGNvbXBhcmlzb25NZXRob2Q6IE51bWJlckNvbXBhcmlzb25UeXBlKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGNvbXBhcmVOdW1iZXIgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBmb3JtR3JvdXAgPSBjb250cm9sIGFzIEZvcm1Hcm91cDtcclxuICAgICAgICAgICAgY29uc3QgbnVtYmVyQSA9IGZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWVBKT8udmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnN0IG51bWJlckIgPSBmb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lQik/LnZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gJ2NvbXBhcmVOdW1iZXJGaWVsZHMnO1xyXG4gICAgICAgICAgICBpZiAobnVtYmVyQSAmJiBudW1iZXJCKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvclR5cGUgPSBOdW1iZXJDb21wYXJpc29uVHlwZVtjb21wYXJpc29uTWV0aG9kXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yQ29uZGl0aW9uID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIFtOdW1iZXJDb21wYXJpc29uVHlwZS5FUVVBTFNdOiBudW1iZXJBICE9PSBudW1iZXJCLFxyXG4gICAgICAgICAgICAgICAgICAgIFtOdW1iZXJDb21wYXJpc29uVHlwZS5HUkVBVEVSX1RIQU5dOiBudW1iZXJBIDw9IG51bWJlckIsXHJcbiAgICAgICAgICAgICAgICAgICAgW051bWJlckNvbXBhcmlzb25UeXBlLkxFU1NfVEhBTl06IG51bWJlckEgPj0gbnVtYmVyQixcclxuICAgICAgICAgICAgICAgICAgICBbTnVtYmVyQ29tcGFyaXNvblR5cGUuR1JFQVRFUl9USEFOX09SX0VRVUFMXTogbnVtYmVyQSA8IG51bWJlckIsXHJcbiAgICAgICAgICAgICAgICAgICAgW051bWJlckNvbXBhcmlzb25UeXBlLkxFU1NfVEhBTl9PUl9FUVVBTF06IG51bWJlckEgPiBudW1iZXJCLFxyXG4gICAgICAgICAgICAgICAgICAgIFtOdW1iZXJDb21wYXJpc29uVHlwZS5OT1RfRVFVQUxTXTogbnVtYmVyQSA9PT0gbnVtYmVyQlxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3JDb25kaXRpb25bY29tcGFyaXNvbk1ldGhvZF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sQSA9IGZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWVBKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbEEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbEEuc2V0RXJyb3JzKHsgW21ldGhvZE5hbWVdOiBjb21wYXJpc29uTWV0aG9kIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBbbWV0aG9kTmFtZV06IGVycm9yVHlwZSB9O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lQSk/Lmhhc0Vycm9yKG1ldGhvZE5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udHJvbEEgPSBmb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lQSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xBKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xBLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gY29tcGFyZU51bWJlcjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYXRvciBwYXJhIGNoZWNhciBzZSB1bSB2YWxvciBlc3TDoSBlbnRyZSBvcyBkZW1haXMgdmFsb3JlcyBkZSB0csOqcyBmb3JtQ29udHJvbHMuXHJcbiAgICAgKlxyXG4gICAgICogQXBsaXF1ZSBlc3NlIHZhbGlkYXRvciBubyBGb3JtR3JvdXAsIHBhc3NhbmRvIG9zIG5vbWVzIGRvcyB0csOqcyBmb3JtQ29udHJvbHMgcXVlIGRlc2VqYSBjb21wYXJhci5cclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiB0aGlzLm15Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICogICAgIG1pbm9yRm9ybUNvbnRyb2w6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgKiAgICAgdGFyZ2V0Rm9ybUNvbnRyb2w6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgKiAgICAgbWFqb3JGb3JtQ29udHJvbDogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXVxyXG4gICAgICogfSwgeyB2YWxpZGF0b3I6IEFncm9Gb3JtVmFsaWRhdG9yLmNoZWNrVmFsdWVCZXR3ZWVuKCdtaW5vckZvcm1Db250cm9sJywgJ3RhcmdldEZvcm1Db250cm9sJywgJ21ham9yRm9ybUNvbnRyb2wnKSB9KTtcclxuICAgICAqXHJcbiAgICAgKiBOZXN0ZSBjYXNvLCBhIHZlcmlmaWNhw6fDo28gc2Vyw6Egc2UgbyB0YXJnZXRGb3JtQ29udHJvbCBlc3TDoSBlbnRyZSBvIG1pbm9yRm9ybUNvbnRyb2wgZSBvIG1ham9yRm9ybUNvbnRyb2wuXHJcbiAgICAgKiBAcGFyYW0gbWlub3JGb3JtQ29udHJvbFxyXG4gICAgICogQHBhcmFtIHRhcmdldEZvcm1Db250cm9sXHJcbiAgICAgKiBAcGFyYW0gbWFqb3JGb3JtQ29udHJvbFxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBjaGVja1ZhbHVlQmV0d2VlbihtaW5vckZvcm1Db250cm9sOiBzdHJpbmcsIHRhcmdldEZvcm1Db250cm9sOiBzdHJpbmcsIG1ham9yRm9ybUNvbnRyb2w6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcclxuICAgICAgICBjb25zdCBjaGVja1ZhbHVlID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBudWxsID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZm9ybUdyb3VwID0gY29udHJvbCBhcyBGb3JtR3JvdXA7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlQSA9IGZvcm1Hcm91cC5nZXQobWlub3JGb3JtQ29udHJvbCk/LnZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZUIgPSBmb3JtR3JvdXAuZ2V0KHRhcmdldEZvcm1Db250cm9sKT8udmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlQyA9IGZvcm1Hcm91cC5nZXQobWFqb3JGb3JtQ29udHJvbCk/LnZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gJ2NoZWNrVmFsdWVCZXR3ZWVuJztcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGFyZU51bWJlcnMgPSBbdmFsdWVBLCB2YWx1ZUIsIHZhbHVlQ10uZXZlcnkodiA9PiB2ICE9PSBudWxsICYmIHYgIT09IHVuZGVmaW5lZCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoYXJlTnVtYmVycykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlQiA8IHZhbHVlQSB8fCB2YWx1ZUIgPiB2YWx1ZUMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRDb250cm9sID0gZm9ybUdyb3VwLmdldCh0YXJnZXRGb3JtQ29udHJvbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldENvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Q29udHJvbC5zZXRFcnJvcnMoeyBbbWV0aG9kTmFtZV06IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IFttZXRob2ROYW1lXTogdHJ1ZSB9O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRDb250cm9sID0gZm9ybUdyb3VwLmdldCh0YXJnZXRGb3JtQ29udHJvbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldENvbnRyb2w/Lmhhc0Vycm9yKG1ldGhvZE5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IHsgLi4udGFyZ2V0Q29udHJvbC5lcnJvcnMgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGVycm9yc1ttZXRob2ROYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Q29udHJvbC5zZXRFcnJvcnMoT2JqZWN0LmtleXMoZXJyb3JzKS5sZW5ndGggPyBlcnJvcnMgOiBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gY2hlY2tWYWx1ZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGF0b3IgcGFyYSBjaGVjYXIgc2UgbyBjYW1wbyDDqSB1bSBvYmpldG8gZSBzZSBwb3NzdWkgdW1hIHByb3ByaWVkYWRlIGVzcGVjw61maWNhLlxyXG4gICAgICpcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiB0aGlzLm15Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICogICAgIE9CSkVUT19GSUVMRDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgQWdyb0Zvcm1WYWxpZGF0b3Iub2JqZWN0UHJvcGVydHlWYWxpZGF0b3IoJ3Byb3ByaWVkYWRlJyldXVxyXG4gICAgICogfSk7XHJcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIG9iamVjdFByb3BlcnR5VmFsaWRhdG9yKHByb3BlcnR5TmFtZTogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IG9iamVjdFByb3BlcnR5ID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBudWxsID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbWV0aG9kTmFtZSA9ICdvYmplY3RQcm9wZXJ0eSc7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3RVdGlscy5pc09iamVjdChjb250cm9sLnZhbHVlKSAmJiBPYmplY3RVdGlscy5jb250YWluc1Byb3BlcnR5KGNvbnRyb2wudmFsdWUsIHByb3BlcnR5TmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29udHJvbC5zZXRFcnJvcnMoeyBbbWV0aG9kTmFtZV06IHRydWUgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiB7IFttZXRob2ROYW1lXTogdHJ1ZSB9O1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdFByb3BlcnR5O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhIHNlIG8gY2FtcG8gw6kgdW0gQ1BGIChDYWRhc3RybyBkZSBQZXNzb2EgRsOtc2ljYSkgdsOhbGlkby5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBDUEZWYWxpZGF0b3IoKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGNwZlZhbCA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNwZiA9IChjb250cm9sLnZhbHVlIHx8ICcnKS5yZXBsYWNlKC9bXlxcZF0vZywgJycpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFjcGYpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsOyAvLyBOw6NvIHZhbGlkYSBjYW1wbyB2YXppbywgdXNlIFZhbGlkYXRvcnMucmVxdWlyZWQganVudG8gc2UgcXVpc2VyIG9icmlnYXRvcmllZGFkZVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY3BmLmxlbmd0aCAhPT0gMTEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGNwZlZhbGlkYXRvcjogdHJ1ZSB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBWZXJpZmljYSBzZSB0b2RvcyBvcyBkw61naXRvcyBzw6NvIGlndWFpcyAoZXguOiAxMTExMTExMTExMSlcclxuICAgICAgICAgICAgaWYgKC9eKFxcZClcXDF7MTB9JC8udGVzdChjcGYpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBjcGZWYWxpZGF0b3I6IHRydWUgfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gVmFsaWRhw6fDo28gZG9zIGTDrWdpdG9zIHZlcmlmaWNhZG9yZXNcclxuICAgICAgICAgICAgY29uc3QgY2FsY0NoZWNrRGlnaXQgPSAoY3BmU2xpY2U6IHN0cmluZywgZmFjdG9yOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCB0b3RhbCA9IDA7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGRpZ2l0IG9mIGNwZlNsaWNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gcGFyc2VJbnQoZGlnaXQsIDEwKSAqIGZhY3Rvci0tO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVtYWluZGVyID0gdG90YWwgJSAxMTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZW1haW5kZXIgPCAyID8gMCA6IDExIC0gcmVtYWluZGVyO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGlnaXQxID0gY2FsY0NoZWNrRGlnaXQoY3BmLnN1YnN0cmluZygwLCA5KSwgMTApO1xyXG4gICAgICAgICAgICBjb25zdCBkaWdpdDIgPSBjYWxjQ2hlY2tEaWdpdChjcGYuc3Vic3RyaW5nKDAsIDkpICsgZGlnaXQxLCAxMSk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBpc1ZhbGlkID0gZGlnaXQxID09PSBwYXJzZUludChjcGYuY2hhckF0KDkpLCAxMCkgJiZcclxuICAgICAgICAgICAgICAgIGRpZ2l0MiA9PT0gcGFyc2VJbnQoY3BmLmNoYXJBdCgxMCksIDEwKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkID8gbnVsbCA6IHsgY3BmVmFsaWRhdG9yOiB0cnVlIH07XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gY3BmVmFsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhdG9yIGRlIENOUEogKENhZGFzdHJvIE5hY2lvbmFsIGRhIFBlc3NvYSBKdXLDrWRpY2EpLlxyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgQ05QSlZhbGlkYXRvcigpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgY29uc3QgY25walZhbCA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZT8ucmVwbGFjZSgvXFxEL2csICcnKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghdmFsdWUgfHwgdmFsdWUubGVuZ3RoICE9PSAxNCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgY25walZhbGlkYXRvcjogdHJ1ZSB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBWZXJpZmljYSBDTlBKcyBjb20gdG9kb3Mgb3MgZMOtZ2l0b3MgaWd1YWlzIChpbnbDoWxpZG9zKVxyXG4gICAgICAgICAgICBpZiAoL14oXFxkKVxcMXsxM30kLy50ZXN0KHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgY25walZhbGlkYXRvcjogdHJ1ZSB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0ZUNoZWNrRGlnaXQgPSAoY25wajogc3RyaW5nLCBsZW5ndGg6IG51bWJlcik6IG51bWJlciA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB3ZWlnaHRzID0gbGVuZ3RoID09PSAxMlxyXG4gICAgICAgICAgICAgICAgICAgID8gWzUsIDQsIDMsIDIsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDJdXHJcbiAgICAgICAgICAgICAgICAgICAgOiBbNiwgNSwgNCwgMywgMiwgOSwgOCwgNywgNiwgNSwgNCwgMywgMl07XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3VtID0gY25walxyXG4gICAgICAgICAgICAgICAgICAgIC5zbGljZSgwLCBsZW5ndGgpXHJcbiAgICAgICAgICAgICAgICAgICAgLnNwbGl0KCcnKVxyXG4gICAgICAgICAgICAgICAgICAgIC5yZWR1Y2UoKGFjYywgZGlnaXQsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhY2MgKyBwYXJzZUludChkaWdpdCwgMTApICogd2VpZ2h0c1tpbmRleF07XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgMCk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVtYWluZGVyID0gc3VtICUgMTE7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVtYWluZGVyIDwgMiA/IDAgOiAxMSAtIHJlbWFpbmRlcjtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0Q2hlY2tEaWdpdCA9IHZhbGlkYXRlQ2hlY2tEaWdpdCh2YWx1ZSwgMTIpO1xyXG4gICAgICAgICAgICBjb25zdCBzZWNvbmRDaGVja0RpZ2l0ID0gdmFsaWRhdGVDaGVja0RpZ2l0KHZhbHVlLCAxMyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICBmaXJzdENoZWNrRGlnaXQgIT09IHBhcnNlSW50KHZhbHVlLmNoYXJBdCgxMiksIDEwKSB8fFxyXG4gICAgICAgICAgICAgICAgc2Vjb25kQ2hlY2tEaWdpdCAhPT0gcGFyc2VJbnQodmFsdWUuY2hhckF0KDEzKSwgMTApXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgY25walZhbGlkYXRvcjogdHJ1ZSB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDsgLy8gdsOhbGlkb1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGNucGpWYWw7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhIHNlIGEgcGxhY2EgZG8gdmXDrWN1bG8gw6kgdsOhbGlkYS5cclxuICAgICAqIEByZXR1cm5zIFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGxpY2Vuc2VQbGF0ZVZhbGlkYXRvcigpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgY29uc3QgbGljZW5zZVBsYXRlVmFsID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSAoY29udHJvbC52YWx1ZSB8fCAnJykudG9VcHBlckNhc2UoKS50cmltKCkucmVwbGFjZSgvLS9nLCAnJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsgLy8gQ2FtcG8gdmF6aW8gbsOjbyDDqSByZXNwb25zYWJpbGlkYWRlIGRlc3NlIHZhbGlkYWRvclxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBpc1ZhbGlkID0gQUdST19SRUdFWC5pc01lcmNvc3VsTGljZW5zZVBsYXRlLnRlc3QodmFsdWUpIHx8XHJcbiAgICAgICAgICAgICAgICBBR1JPX1JFR0VYLmlzT2xkTGljZW5zZVBsYXRlLnRlc3QodmFsdWUpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWQgPyBudWxsIDogeyBsaWNlbnNlUGxhdGVJbnZhbGlkOiB0cnVlIH07XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gbGljZW5zZVBsYXRlVmFsO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG59Il19
|
|
@@ -1795,8 +1795,8 @@ class AgroFormValidator {
|
|
|
1795
1795
|
* Validator de CNPJ (Cadastro Nacional da Pessoa Jurídica).
|
|
1796
1796
|
* @returns
|
|
1797
1797
|
*/
|
|
1798
|
-
CNPJValidator() {
|
|
1799
|
-
|
|
1798
|
+
static CNPJValidator() {
|
|
1799
|
+
const cnpjVal = (control) => {
|
|
1800
1800
|
var _a;
|
|
1801
1801
|
const value = (_a = control.value) === null || _a === void 0 ? void 0 : _a.replace(/\D/g, '');
|
|
1802
1802
|
if (!value || value.length !== 14) {
|
|
@@ -1827,13 +1827,14 @@ class AgroFormValidator {
|
|
|
1827
1827
|
}
|
|
1828
1828
|
return null; // válido
|
|
1829
1829
|
};
|
|
1830
|
+
return cnpjVal;
|
|
1830
1831
|
}
|
|
1831
1832
|
/**
|
|
1832
1833
|
* Valida se a placa do veículo é válida.
|
|
1833
1834
|
* @returns
|
|
1834
1835
|
*/
|
|
1835
|
-
licensePlateValidator() {
|
|
1836
|
-
|
|
1836
|
+
static licensePlateValidator() {
|
|
1837
|
+
const licensePlateVal = (control) => {
|
|
1837
1838
|
const value = (control.value || '').toUpperCase().trim().replace(/-/g, '');
|
|
1838
1839
|
if (!value) {
|
|
1839
1840
|
return null; // Campo vazio não é responsabilidade desse validador
|
|
@@ -1842,6 +1843,7 @@ class AgroFormValidator {
|
|
|
1842
1843
|
AGRO_REGEX.isOldLicensePlate.test(value);
|
|
1843
1844
|
return isValid ? null : { licensePlateInvalid: true };
|
|
1844
1845
|
};
|
|
1846
|
+
return licensePlateVal;
|
|
1845
1847
|
}
|
|
1846
1848
|
}
|
|
1847
1849
|
|
|
@@ -1861,13 +1863,25 @@ class AgroCookieUtils {
|
|
|
1861
1863
|
if (parseURIString) {
|
|
1862
1864
|
cookieString = decodeURIComponent(cookieString);
|
|
1863
1865
|
}
|
|
1866
|
+
if (AgroCookieUtils.isStringAnObject(cookieString)) {
|
|
1867
|
+
return JSON.parse(cookieString);
|
|
1868
|
+
}
|
|
1864
1869
|
cookieString.split(';').forEach(cookie => {
|
|
1865
1870
|
const [key, value] = cookie.split('=').map(c => c.trim());
|
|
1866
1871
|
cookieObject[key] = value;
|
|
1867
1872
|
});
|
|
1868
1873
|
return cookieObject;
|
|
1869
1874
|
}
|
|
1870
|
-
|
|
1875
|
+
static isStringAnObject(str) {
|
|
1876
|
+
try {
|
|
1877
|
+
const parsed = JSON.parse(str);
|
|
1878
|
+
return typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed);
|
|
1879
|
+
}
|
|
1880
|
+
catch (e) {
|
|
1881
|
+
return false;
|
|
1882
|
+
}
|
|
1883
|
+
}
|
|
1884
|
+
static setCookie(name, value, days) {
|
|
1871
1885
|
const date = new Date();
|
|
1872
1886
|
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
|
|
1873
1887
|
const expires = 'expires=' + date.toUTCString();
|