bry-biometric-collector 2.2.0-RC02 → 2.2.1
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/dist/CameraBtn_ea347e01_2.2.1.js +506 -0
- package/dist/DocumentCollector_0785fdfe_2.2.1.js +1053 -0
- package/dist/FaceCollector_cb1adcc0_2.2.1.js +1702 -0
- package/dist/bry-biometric-collector-main.js +1 -2
- package/dist/{en-us_46223587_2.2.0-RC02.js → en-us_35a3a8da_2.2.1.js} +12 -19
- package/dist/face_api_0e3ce8c8_2.2.1.js +36288 -0
- package/dist/fingersApi_13cd25ba_2.2.1.js +146 -0
- package/dist/index-no-detector_acb82d83_2.2.1.js +10395 -0
- package/dist/index.js +1 -2
- package/dist/main_452d4a3b_2.2.1.js +23663 -0
- package/dist/{pt-br_7b1f22cd_2.2.0-RC02.js → pt-br_1a694022_2.2.1.js} +2 -9
- package/dist/style.css +1 -1
- package/package.json +1 -1
- package/dist/CameraBtn_cf55ed47_2.2.0-RC02.js +0 -643
- package/dist/DocumentCollector_e8c9f640_2.2.0-RC02.js +0 -1427
- package/dist/FaceCollector_aea262f0_2.2.0-RC02.js +0 -2168
- package/dist/face_api_0e3ce8c8_2.2.0-RC02.js +0 -36289
- package/dist/fingersApi_a130549b_2.2.0-RC02.js +0 -147
- package/dist/index-no-detector_acb82d83_2.2.0-RC02.js +0 -10396
- package/dist/main_a9bb653b_2.2.0-RC02.js +0 -25589
@@ -1,147 +0,0 @@
|
|
1
|
-
import { u as D, $ as C, n as y, g, i as b, a as M, s as l, b as h, c as U, F, d as x, e as c, v, f as P, A as B, h as S, j as E, k as W, l as k, m as X, o as w, p as $, q as G } from "./main_a9bb653b_2.2.0-RC02.js";
|
2
|
-
const d = D(C);
|
3
|
-
var V = /* @__PURE__ */ ((n) => (n.EXTENSION_MISSING = "EXTENSION_MISSING", n.USER_CANCELLED = "USER_CANCELLED", n.UNAUTHORIZED_EXTENSION = "UNAUTHORIZED_EXTENSION", n.SCANNER_NOT_FOUND = "SCANNER_NOT_FOUND", n.EXTENSION_MODULE_NOT_INSTALLED = "EXTENSION_MODULE_NOT_INSTALLED", n.FINGER_NOT_REMOVED = "FINGER_NOT_REMOVED", n.UNKNOWN_ERROR = "UNKNOWN_ERROR", n.EVALUATE_BIOMETRICS_TIMEOUT = "EVALUATE_BIOMETRICS_TIMEOUT", n.EVALUATE_BIOMETRICS_NETWORK_ISSUE = "EVALUATE_BIOMETRICS_NETWORK_ISSUE", n))(V || {});
|
4
|
-
class s extends Error {
|
5
|
-
constructor(a, T) {
|
6
|
-
super(a), this.status = T;
|
7
|
-
}
|
8
|
-
}
|
9
|
-
async function K(n, a) {
|
10
|
-
const T = y([n])[0], I = g();
|
11
|
-
if (b(I))
|
12
|
-
throw new s(
|
13
|
-
"Attempting to capture finger but the extension apparently hasn't been properly injected. Received: " + I,
|
14
|
-
"EXTENSION_MISSING"
|
15
|
-
/* EXTENSION_MISSING */
|
16
|
-
);
|
17
|
-
if (g()) {
|
18
|
-
if ("isExtensionInstalled" in g() && !await g().isExtensionInstalled())
|
19
|
-
throw console.error("The extension isn't installed!"), new s(
|
20
|
-
"The extension isn't installed!",
|
21
|
-
"EXTENSION_MISSING"
|
22
|
-
/* EXTENSION_MISSING */
|
23
|
-
);
|
24
|
-
M() || await g().installComponents?.([{ type: "fingerPrint" }]);
|
25
|
-
} else
|
26
|
-
throw new s(
|
27
|
-
`The extension variable received is empty: ${g()}!`,
|
28
|
-
"EXTENSION_MISSING"
|
29
|
-
/* EXTENSION_MISSING */
|
30
|
-
);
|
31
|
-
if (l(!0), h())
|
32
|
-
throw l(!1), U(!1), new s(
|
33
|
-
"User cancelled",
|
34
|
-
"USER_CANCELLED"
|
35
|
-
/* USER_CANCELLED */
|
36
|
-
);
|
37
|
-
let N = null;
|
38
|
-
try {
|
39
|
-
N = await I.getFingerprint(
|
40
|
-
// @ts-ignore TODO: Alex has to fix this functions signature to accept pojo
|
41
|
-
JSON.stringify(
|
42
|
-
a ?? { outputFormat: "BASE64", imageFormat: "BMP", nonce: "webCollector", timeout: 3 }
|
43
|
-
)
|
44
|
-
);
|
45
|
-
} catch (e) {
|
46
|
-
console.error(e);
|
47
|
-
const t = e;
|
48
|
-
throw l(!1), t.key === "fingerprint.scanner.timeout" ? new s(
|
49
|
-
"Fingerprint scan timed out (didn't read a finger.)",
|
50
|
-
"USER_CANCELLED"
|
51
|
-
/* USER_CANCELLED */
|
52
|
-
) : t.key === "extension.authorization.canceled" ? new s(
|
53
|
-
"Extension wasn't given authorization.",
|
54
|
-
"UNAUTHORIZED_EXTENSION"
|
55
|
-
/* UNAUTHORIZED_EXTENSION */
|
56
|
-
) : t.key === "fingerprint.scanner.not.found" ? new s(
|
57
|
-
"Couldn't find fingerprint scanner.",
|
58
|
-
"SCANNER_NOT_FOUND"
|
59
|
-
/* SCANNER_NOT_FOUND */
|
60
|
-
) : t.key === "signer.not.installed" ? new s(
|
61
|
-
"The extension module isn't installed.",
|
62
|
-
"EXTENSION_MODULE_NOT_INSTALLED"
|
63
|
-
/* EXTENSION_MODULE_NOT_INSTALLED */
|
64
|
-
) : new s(
|
65
|
-
"Unknown error while capturing fingerprint.",
|
66
|
-
"UNKNOWN_ERROR"
|
67
|
-
/* UNKNOWN_ERROR */
|
68
|
-
);
|
69
|
-
}
|
70
|
-
if (h())
|
71
|
-
throw l(!1), U(!1), new s(
|
72
|
-
"User cancelled",
|
73
|
-
"USER_CANCELLED"
|
74
|
-
/* USER_CANCELLED */
|
75
|
-
);
|
76
|
-
const i = q(T);
|
77
|
-
i.image = N?.content.image?.data, i.base64WSQ = N?.content.fingerprint.data, i.nfiqRating = (N?.content.score || 0) + 98, i.status = F.AVAILABLE;
|
78
|
-
const L = x(c());
|
79
|
-
let r, _ = !1;
|
80
|
-
try {
|
81
|
-
r = await v(L, i);
|
82
|
-
} catch (e) {
|
83
|
-
if (i.nfiqRating = -1, i.base64WSQ = "", i.image = "", console.log("caught while validating fingerprint: ", e), P(e) && "message" in e && e.message === "error.template.extraction")
|
84
|
-
_ = !0;
|
85
|
-
else if (e instanceof XMLHttpRequest) {
|
86
|
-
const t = e;
|
87
|
-
"response" in t && "data" in t.response.data && t.response.data.message === "error.template.extraction" && (_ = !0);
|
88
|
-
} else
|
89
|
-
throw e instanceof B ? e.code === "ECONNABORTED" ? (console.log("The evaluate biometrics request took too long to answer!"), new s(
|
90
|
-
"Evaluate biometrics took too long to reply",
|
91
|
-
"EVALUATE_BIOMETRICS_TIMEOUT"
|
92
|
-
/* EVALUATE_BIOMETRICS_TIMEOUT */
|
93
|
-
)) : (console.error("Error evaluating biometrics!", e), S(c()), l(!1), new s(
|
94
|
-
"Network issue while validating biometrics, check logs",
|
95
|
-
"EVALUATE_BIOMETRICS_NETWORK_ISSUE"
|
96
|
-
/* EVALUATE_BIOMETRICS_NETWORK_ISSUE */
|
97
|
-
)) : (S(c()), l(!1), new s(
|
98
|
-
"Network issue while validating biometrics, check logs",
|
99
|
-
"EVALUATE_BIOMETRICS_NETWORK_ISSUE"
|
100
|
-
/* EVALUATE_BIOMETRICS_NETWORK_ISSUE */
|
101
|
-
));
|
102
|
-
}
|
103
|
-
let R, f, O, A, u, o = E.LOW_QUALITY;
|
104
|
-
if (r) {
|
105
|
-
const e = r.bodyParts.find(
|
106
|
-
(t) => t.bodyPart === i.bodyPart
|
107
|
-
);
|
108
|
-
i.nfiqRating = e.quality, (e.quality > W() || e.status === "LOW_QUALITY") && (R = !0, o = E.LOW_QUALITY), r.bodyParts.find((t) => t.status === "DUPLICATE") && (f = !0, o = E.DUPLICATE), r.bodyParts.find((t) => t.status === "FORBIDDEN") && (O = !0, o = E.FORBIDDEN), r.bodyParts.find((t) => t.status === "AGR") && (A = !0, o = E.AGR_DETECTED), r.bodyParts.find((t) => t.status === "AGR_NOT_MATCH") && (u = !0, o = E.AGR_NO_MATCH);
|
109
|
-
}
|
110
|
-
if (f || R || O || u || A || _) {
|
111
|
-
i.nfiqRating = -1, i.base64WSQ = "", i.image = "", i.status = F.AVAILABLE;
|
112
|
-
let e = "badFingerQualitySwal";
|
113
|
-
f ? e = "unknownDuplicateFingerSwal" : O ? e = "forbiddenFingerSwal" : A ? e = "agrFinger" : u && (e = "agrFingerNotMatched");
|
114
|
-
let t = d(`${e}.text`);
|
115
|
-
if (k(X) && f) {
|
116
|
-
e = "duplicateFingerSwal", t = d(`${e}.text`, {
|
117
|
-
values: {
|
118
|
-
finger1: d(`${e}.${r.matchingFingers?.[0]}`),
|
119
|
-
finger2: d(`${e}.${r.matchingFingers?.[1]}`)
|
120
|
-
}
|
121
|
-
});
|
122
|
-
const m = w();
|
123
|
-
return {
|
124
|
-
returnCode: o,
|
125
|
-
bodyParts: m,
|
126
|
-
matchingFingers: r.matchingFingers,
|
127
|
-
message: t
|
128
|
-
};
|
129
|
-
}
|
130
|
-
const p = w();
|
131
|
-
return { returnCode: o, bodyParts: p, message: t };
|
132
|
-
}
|
133
|
-
return S(c()), l(!1), $(), { returnCode: E.CAPTURED, bodyParts: w() };
|
134
|
-
}
|
135
|
-
function q(n) {
|
136
|
-
G();
|
137
|
-
for (const a of c())
|
138
|
-
if (a.index === n)
|
139
|
-
return a.selected = !0, a;
|
140
|
-
throw new Error(`Finger ${n} not found`);
|
141
|
-
}
|
142
|
-
export {
|
143
|
-
s as CaptureApiError,
|
144
|
-
V as CaptureErrorStatusEnum,
|
145
|
-
K as captureSingleFinger
|
146
|
-
};
|
147
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZ2Vyc0FwaV9hMTMwNTQ5Yl8yLjIuMC1SQzAyLmpzIiwic291cmNlcyI6WyIuLi9zcmMvYXBpL2ZpbmdlcnNBcGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXhpb3NFcnJvciB9IGZyb20gJ2F4aW9zJztcbmltcG9ydCB0eXBlIHsgQ2FwdHVyZVBhcmFtcywgRmluZ2VycHJpbnRTY2FuIH0gZnJvbSAnLi4vaW5jbHVkZS9FeHRlbnNpb24nO1xuaW1wb3J0IHsgaXNDYW5jZWxsaW5nLCBzZXRDYW5jZWxsaW5nLCBzZXRDYXB0dXJpbmcgfSBmcm9tICcuLi9saWIvZmluZ2Vyc1RhYi9idXR0b25zL2NhcHR1cmUvY2FwdHVyZVN0b3JlJztcbmltcG9ydCB7IGdldEV4dGVuc2lvbiwgaGFzRmluZ2VyT25BbmRPZmYsIGlzRXZlcnl0aGluZ0luc3RhbGxlZCB9IGZyb20gJy4uL2xpYi9maW5nZXJzVGFiL2V4dGVuc2lvbi9leHRlbnNpb24nO1xuaW1wb3J0IHtcbiAgQm9keVBhcnROYW1lcyxcbiAgRmluZ2VyLFxuICBnZXRTZWxlY3RlZEZpbmdlcixcbiAgbm9ybWFsaXplRmluZ2VyTmFtZXNBbmRJbmRleGVzVG9JbmRleGVzLFxuICB0eXBlIEZpbmdlckluZGV4LFxuICBnZXRGaW5nZXJzLFxuICBzZWxlY3ROb3RoaW5nLFxuICBGaW5nZXJTdGF0dXMsXG4gIGdldENvbGxlY3RlZEZpbmdlcnMsXG4gIHNldEZpbmdlcnMsXG4gIGdldE1pbk5maXFBY2NlcHRhYmxlLFxufSBmcm9tICcuLi9saWIvZmluZ2Vyc1RhYi9oYW5kL2hhbmRQYXJ0cy9maW5nZXJzU3RvcmUnO1xuaW1wb3J0IHsgaXNPYmplY3QsIGlzT2JqZWN0RW1wdHkgfSBmcm9tICcuLi9saWIvdXRpbC91dGlsJztcbmltcG9ydCB7XG4gIHZhbGlkYXRlRmluZ2VyQmlvbWV0cmljcyxcbiAgdHlwZSBCb2R5UGFydFJldHVyblR5cGUsXG4gIHVzZVdhc20sXG4gIHR5cGUgQm9keVBhcnQsXG59IGZyb20gJy4uL2xpYi92YWxpZGF0b3JzL2Jpb21ldHJpY3NWYWxpZGF0b3InO1xuaW1wb3J0IHtcbiAgY29sbGVjdEZpbmdlcnMsXG4gIGhhbmRsZUNhcHR1cmVSZXR1cm5TdGF0dXMsXG4gIG5vdGlmeUZpbmdlckNvbGxlY3RlZCxcbn0gZnJvbSAnLi4vbGliL2ZpbmdlcnNUYWIvYnV0dG9ucy9idXR0b25IYW5kbGVycyc7XG5pbXBvcnQgeyBmb3JtYXQsIHVud3JhcEZ1bmN0aW9uU3RvcmUgfSBmcm9tICdzdmVsdGUtaTE4bic7XG5pbXBvcnQgeyBnZXQgfSBmcm9tICdzdmVsdGUvc3RvcmUnO1xuY29uc3QgJGZvcm1hdCA9IHVud3JhcEZ1bmN0aW9uU3RvcmUoZm9ybWF0KTtcblxuZXhwb3J0IHsgY2FwdHVyZVNpbmdsZUZpbmdlciB9O1xuXG5leHBvcnQgY29uc3QgZW51bSBDYXB0dXJlRXJyb3JTdGF0dXNFbnVtIHtcbiAgRVhURU5TSU9OX01JU1NJTkcgPSAnRVhURU5TSU9OX01JU1NJTkcnLFxuICBVU0VSX0NBTkNFTExFRCA9ICdVU0VSX0NBTkNFTExFRCcsXG4gIFVOQVVUSE9SSVpFRF9FWFRFTlNJT04gPSAnVU5BVVRIT1JJWkVEX0VYVEVOU0lPTicsXG4gIFNDQU5ORVJfTk9UX0ZPVU5EID0gJ1NDQU5ORVJfTk9UX0ZPVU5EJyxcbiAgRVhURU5TSU9OX01PRFVMRV9OT1RfSU5TVEFMTEVEID0gJ0VYVEVOU0lPTl9NT0RVTEVfTk9UX0lOU1RBTExFRCcsXG4gIEZJTkdFUl9OT1RfUkVNT1ZFRCA9ICdGSU5HRVJfTk9UX1JFTU9WRUQnLFxuICBVTktOT1dOX0VSUk9SID0gJ1VOS05PV05fRVJST1InLFxuICBFVkFMVUFURV9CSU9NRVRSSUNTX1RJTUVPVVQgPSAnRVZBTFVBVEVfQklPTUVUUklDU19USU1FT1VUJyxcbiAgRVZBTFVBVEVfQklPTUVUUklDU19ORVRXT1JLX0lTU1VFID0gJ0VWQUxVQVRFX0JJT01FVFJJQ1NfTkVUV09SS19JU1NVRScsXG59XG5cbmV4cG9ydCBjbGFzcyBDYXB0dXJlQXBpRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgcHVibGljIHN0YXR1czogQ2FwdHVyZUVycm9yU3RhdHVzRW51bSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICB9XG59XG5cbi8qKlxuICogUHJvZ3JhbW1hdGljYWxseSBjYXB0dXJlIHNpbmdsZSBmaW5nZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY2FwdHVyZVNpbmdsZUZpbmdlcihcbiAgZmluZ2VyTmFtZU9ySW5kZXg6IG51bWJlciB8IEJvZHlQYXJ0TmFtZXMsXG4gIGdldEZpbmdlcnByaW50UGFyYW1zOiBDYXB0dXJlUGFyYW1zXG4pOiBQcm9taXNlPHtcbiAgcmV0dXJuQ29kZTogaGFuZGxlQ2FwdHVyZVJldHVyblN0YXR1cztcbiAgYm9keVBhcnRzOiBCb2R5UGFydFtdO1xuICBtYXRjaGluZ0ZpbmdlcnM/OiBCb2R5UGFydE5hbWVzW107XG4gIG1lc3NhZ2U/OiBzdHJpbmc7XG59PiB7XG4gIGNvbnN0IGZpbmdlckluZGV4ID0gbm9ybWFsaXplRmluZ2VyTmFtZXNBbmRJbmRleGVzVG9JbmRleGVzKFtmaW5nZXJOYW1lT3JJbmRleF0pWzBdO1xuICAvLyB0cnkge1xuICBjb25zdCBleHRlbnNpb24gPSBnZXRFeHRlbnNpb24oKTtcbiAgLy8gY2hlY2sgdGhhdCB0aGUgZXh0ZW5zaW9uIGlzIGF2YWlsYWJsZVxuICBpZiAoaXNPYmplY3RFbXB0eShleHRlbnNpb24pKSB7XG4gICAgdGhyb3cgbmV3IENhcHR1cmVBcGlFcnJvcihcbiAgICAgIFwiQXR0ZW1wdGluZyB0byBjYXB0dXJlIGZpbmdlciBidXQgdGhlIGV4dGVuc2lvbiBhcHBhcmVudGx5IGhhc24ndCBiZWVuIHByb3Blcmx5IGluamVjdGVkLiBSZWNlaXZlZDogXCIgKyBleHRlbnNpb24sXG4gICAgICBDYXB0dXJlRXJyb3JTdGF0dXNFbnVtLkVYVEVOU0lPTl9NSVNTSU5HXG4gICAgKTtcbiAgfVxuXG4gIC8vIGNoZWNrIHRoYXQgdGhlIGV4dGVuc2lvbiBpcyBpbnN0YWxsZWRcbiAgaWYgKGdldEV4dGVuc2lvbigpKSB7XG4gICAgaWYgKCdpc0V4dGVuc2lvbkluc3RhbGxlZCcgaW4gZ2V0RXh0ZW5zaW9uKCkgJiYgIShhd2FpdCBnZXRFeHRlbnNpb24oKS5pc0V4dGVuc2lvbkluc3RhbGxlZCgpKSkge1xuICAgICAgY29uc29sZS5lcnJvcihgVGhlIGV4dGVuc2lvbiBpc24ndCBpbnN0YWxsZWQhYCk7XG4gICAgICB0aHJvdyBuZXcgQ2FwdHVyZUFwaUVycm9yKFwiVGhlIGV4dGVuc2lvbiBpc24ndCBpbnN0YWxsZWQhXCIsIENhcHR1cmVFcnJvclN0YXR1c0VudW0uRVhURU5TSU9OX01JU1NJTkcpO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIHRoYXQgdGhlIG1vZHVsZSBhbmQgY29tcGxlbWVudCBhcmUgYWxsIGluc3RhbGxlZFxuICAgIGlmICghaXNFdmVyeXRoaW5nSW5zdGFsbGVkKCkpIHtcbiAgICAgIGF3YWl0IGdldEV4dGVuc2lvbigpLmluc3RhbGxDb21wb25lbnRzPy4oW3sgdHlwZTogJ2ZpbmdlclByaW50JyB9XSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBDYXB0dXJlQXBpRXJyb3IoXG4gICAgICBgVGhlIGV4dGVuc2lvbiB2YXJpYWJsZSByZWNlaXZlZCBpcyBlbXB0eTogJHtnZXRFeHRlbnNpb24oKX0hYCxcbiAgICAgIENhcHR1cmVFcnJvclN0YXR1c0VudW0uRVhURU5TSU9OX01JU1NJTkdcbiAgICApO1xuICB9XG5cbiAgc2V0Q2FwdHVyaW5nKHRydWUpO1xuXG4gIC8vIGlmIHNvbWVob3cgdGhleSBtYW5hZ2VkIHRvIGFzayBmb3IgY2FuY2VsbGF0aW9uIHJpZ2h0IGJlZm9yZSB0aGUgc2NhbiwgdGhpcyBjYXRjaGVzIHRoYXRcbiAgaWYgKGlzQ2FuY2VsbGluZygpKSB7XG4gICAgc2V0Q2FwdHVyaW5nKGZhbHNlKTtcbiAgICBzZXRDYW5jZWxsaW5nKGZhbHNlKTtcbiAgICB0aHJvdyBuZXcgQ2FwdHVyZUFwaUVycm9yKCdVc2VyIGNhbmNlbGxlZCcsIENhcHR1cmVFcnJvclN0YXR1c0VudW0uVVNFUl9DQU5DRUxMRUQpO1xuICB9XG5cbiAgLy8gcHJvbXB0IHVzZXIgdG8gY29sbGVjdCB0aGUgZmluZ2VyXG4gIGxldCBjYXB0dXJlOiBGaW5nZXJwcmludFNjYW4gfCBudWxsID0gbnVsbDtcbiAgdHJ5IHtcbiAgICAvLyBjYXB0dXJlIHRoZSBmaW5nZXJcbiAgICAvLyAqaW1wbGVtZW50YXRpb24gY29uc2lkZXJpbmcgd2Ugb25seSBoYXZlIHRoZSBnZXRGaW5nZXJwcmludCBtZXRob2QgYXZhaWxhYmxlXG4gICAgY2FwdHVyZSA9IGF3YWl0IGV4dGVuc2lvbi5nZXRGaW5nZXJwcmludChcbiAgICAgIC8vIEB0cy1pZ25vcmUgVE9ETzogQWxleCBoYXMgdG8gZml4IHRoaXMgZnVuY3Rpb25zIHNpZ25hdHVyZSB0byBhY2NlcHQgcG9qb1xuICAgICAgSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIGdldEZpbmdlcnByaW50UGFyYW1zID8/IHsgb3V0cHV0Rm9ybWF0OiAnQkFTRTY0JywgaW1hZ2VGb3JtYXQ6ICdCTVAnLCBub25jZTogJ3dlYkNvbGxlY3RvcicsIHRpbWVvdXQ6IDMgfVxuICAgICAgKVxuICAgICk7XG5cbiAgICAvLyAvLyBpZiB3ZSBoYXZlIHRoaXMgZnVuY3Rpb25hbGl0eSBhdmFpbGFibGUsIGFzayB0aGUgdXNlciB0byByZW1vdmUgaGlzIGZpbmdlciBmcm9tIHRoZSBzY2FubmVyXG4gICAgLy8gY29uc29sZS5sb2coJ2hhc0Zpbmdlck9uQW5kT2ZmJywgaGFzRmluZ2VyT25BbmRPZmYoKSk7XG4gICAgLy8gaWYgKGhhc0Zpbmdlck9uQW5kT2ZmKCkpIHtcbiAgICAvLyAgIC8vIHByb21wdCB1c2VyIHRvIHJlbW92ZSBoaXMgZmluZ2VyXG4gICAgLy8gICAvLyBpbml0aWF0ZSB0aW1lciwgaWYgYWZ0ZXIgc29tZSB0aW1lIHRoZSBmaW5nZXIgc3RpbGwgaGFzbid0IGJlZW4gbGlmdGVkLCBhc2sgdGhlIHVzZXIgdG8gY2xlYW4gdGhlIHNjYW5uZXJcbiAgICAvLyAgIGxldCBzY2FubmVyRGlydHkgPSBmYWxzZTtcbiAgICAvLyAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICBzY2FubmVyRGlydHkgPSB0cnVlO1xuICAgIC8vICAgfSwgODAwMCk7XG4gICAgLy8gICB3aGlsZSAodHJ1ZSkge1xuICAgIC8vICAgICBpZiAoKGF3YWl0IGV4dGVuc2lvbi5pc0Zpbmdlck9mZj8uKCkpPy5pc0Zpbmdlck9mZiB8fCBzY2FubmVyRGlydHkgfHwgaXNDYW5jZWxsaW5nKCkpIHtcbiAgICAvLyAgICAgICBicmVhaztcbiAgICAvLyAgICAgfVxuICAgIC8vICAgfVxuICAgIC8vICAgLy8gaW5mb3JtIHVzZXIgdGhleSBzaG91bGQgY2xlYW4gdGhlIHNjYW5uZXJcbiAgICAvLyAgICAgICBpZiAoc2Nhbm5lckRpcnR5KSB7XG5cbiAgICAvLyAgICAgICB9XG4gICAgLy8gfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgY29uc3QgZSA9IGVyciBhcyB7IGtleTogc3RyaW5nOyBkZXNjcmlwdGlvbjogc3RyaW5nIH07XG4gICAgc2V0Q2FwdHVyaW5nKGZhbHNlKTtcbiAgICAvLyBUT0RPOiB0eXBlIHRoaXMgYW5kIGNyZWF0ZSBlbnVtIGZvciBlcnJvcnNcbiAgICBpZiAoZS5rZXkgPT09ICdmaW5nZXJwcmludC5zY2FubmVyLnRpbWVvdXQnKSB7XG4gICAgICAvLyBpZiB0aW1lZG91dCBqdXN0IHRyeSBhZ2FpbiwgdW5sZXNzIHRyeWluZyB0byBjYW5jZWxcbiAgICAgIC8vIFRPRE86IG1heWJlIHN0b3AgYWZ0ZXIgc28gbWFueSB0cmllc1xuICAgICAgdGhyb3cgbmV3IENhcHR1cmVBcGlFcnJvcihcbiAgICAgICAgXCJGaW5nZXJwcmludCBzY2FuIHRpbWVkIG91dCAoZGlkbid0IHJlYWQgYSBmaW5nZXIuKVwiLFxuICAgICAgICBDYXB0dXJlRXJyb3JTdGF0dXNFbnVtLlVTRVJfQ0FOQ0VMTEVEXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09ICdleHRlbnNpb24uYXV0aG9yaXphdGlvbi5jYW5jZWxlZCcpIHtcbiAgICAgIC8vIHVzZXIgZGlkbid0IGF1dGhvcml6ZSB0aGUgZG9tYWluLCB0aGVyZSBpcyBub3RoaW5nIHdlIGNhbiBkbyBzbyBzdG9wLlxuICAgICAgdGhyb3cgbmV3IENhcHR1cmVBcGlFcnJvcihcIkV4dGVuc2lvbiB3YXNuJ3QgZ2l2ZW4gYXV0aG9yaXphdGlvbi5cIiwgQ2FwdHVyZUVycm9yU3RhdHVzRW51bS5VTkFVVEhPUklaRURfRVhURU5TSU9OKTtcbiAgICB9IGVsc2UgaWYgKGUua2V5ID09PSAnZmluZ2VycHJpbnQuc2Nhbm5lci5ub3QuZm91bmQnKSB7XG4gICAgICAvLyB1c2VyIGRvZXNuJ3QgaGF2ZSBhIHNjYW5uZXIgY29ubmVjdGVkLCB0aGVyZSBpcyBub3RoaW5nIHdlIGNhbiBkbyBzbyBzdG9wLlxuICAgICAgdGhyb3cgbmV3IENhcHR1cmVBcGlFcnJvcihcIkNvdWxkbid0IGZpbmQgZmluZ2VycHJpbnQgc2Nhbm5lci5cIiwgQ2FwdHVyZUVycm9yU3RhdHVzRW51bS5TQ0FOTkVSX05PVF9GT1VORCk7XG4gICAgfSBlbHNlIGlmIChlLmtleSA9PT0gJ3NpZ25lci5ub3QuaW5zdGFsbGVkJykge1xuICAgICAgdGhyb3cgbmV3IENhcHR1cmVBcGlFcnJvcihcbiAgICAgICAgXCJUaGUgZXh0ZW5zaW9uIG1vZHVsZSBpc24ndCBpbnN0YWxsZWQuXCIsXG4gICAgICAgIENhcHR1cmVFcnJvclN0YXR1c0VudW0uRVhURU5TSU9OX01PRFVMRV9OT1RfSU5TVEFMTEVEXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgQ2FwdHVyZUFwaUVycm9yKCdVbmtub3duIGVycm9yIHdoaWxlIGNhcHR1cmluZyBmaW5nZXJwcmludC4nLCBDYXB0dXJlRXJyb3JTdGF0dXNFbnVtLlVOS05PV05fRVJST1IpO1xuICAgIH1cbiAgfVxuICAvLyBpZiBzb21laG93IHRoZXkgbWFuYWdlZCB0byBhc2sgZm9yIGNhbmNlbGxhdGlvbiByaWdodCBiZWZvcmUgdGhlIHNjYW4sIHRoaXMgY2F0Y2hlcyB0aGF0XG4gIGlmIChpc0NhbmNlbGxpbmcoKSkge1xuICAgIHNldENhcHR1cmluZyhmYWxzZSk7XG4gICAgc2V0Q2FuY2VsbGluZyhmYWxzZSk7XG4gICAgdGhyb3cgbmV3IENhcHR1cmVBcGlFcnJvcignVXNlciBjYW5jZWxsZWQnLCBDYXB0dXJlRXJyb3JTdGF0dXNFbnVtLlVTRVJfQ0FOQ0VMTEVEKTtcbiAgfVxuXG4gIC8vIHNlbGVjdCBhbmQgZ2V0IGZpbmdlclxuICBjb25zdCBmaW5nZXIgPSBzZWxlY3RGaW5nZXJBcGkoZmluZ2VySW5kZXgpO1xuICAvLyBzZXQgdGhpcyBmaW5nZXJzIGF0dHJpYnV0ZXMgdG8gdGhlIHJlY2VudGx5IGNvbGxlY3RlZCBmaW5nZXJcbiAgZmluZ2VyLmltYWdlID0gY2FwdHVyZT8uY29udGVudC5pbWFnZT8uZGF0YSBhcyBzdHJpbmc7XG4gIGZpbmdlci5iYXNlNjRXU1EgPSBjYXB0dXJlPy5jb250ZW50LmZpbmdlcnByaW50LmRhdGEgYXMgc3RyaW5nO1xuICBmaW5nZXIubmZpcVJhdGluZyA9IChjYXB0dXJlPy5jb250ZW50LnNjb3JlIHx8IDApICsgOTg7XG4gIGZpbmdlci5zdGF0dXMgPSBGaW5nZXJTdGF0dXMuQVZBSUxBQkxFO1xuICAvLyBHZXQgQUxMIHRoZSBjb2xsZWN0ZWQgZmluZ2Vyc1xuICBjb25zdCBjb2xsZWN0ZWRGaW5nZXJzID0gZ2V0Q29sbGVjdGVkRmluZ2VycyhnZXRGaW5nZXJzKCkpO1xuXG4gIC8vIHNlbmQgdG8gcmVtb3RlXG4gIGxldCByZXNwb25zZSxcbiAgICBlcnJvclRlbXBsYXRlRXh0cmFjdGlvbiA9IGZhbHNlO1xuICB0cnkge1xuICAgIHJlc3BvbnNlID0gYXdhaXQgdmFsaWRhdGVGaW5nZXJCaW9tZXRyaWNzKGNvbGxlY3RlZEZpbmdlcnMsIGZpbmdlcik7XG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAvLyBjbGVhciB0aGUgZmluZ2VyXG4gICAgZmluZ2VyLm5maXFSYXRpbmcgPSAtMTtcbiAgICBmaW5nZXIuYmFzZTY0V1NRID0gJyc7XG4gICAgZmluZ2VyLmltYWdlID0gJyc7XG4gICAgLy8gd2FybiBlcnJvclxuICAgIGNvbnNvbGUubG9nKCdjYXVnaHQgd2hpbGUgdmFsaWRhdGluZyBmaW5nZXJwcmludDogJywgZXJyb3IpO1xuICAgIC8vIGVycm9yIHdoaWxlIGV4dHJhY3RpbmcsIHNob3cgYSBsb3cgcXVhbGl0eSBzd2FsXG4gICAgaWYgKGlzT2JqZWN0KGVycm9yKSAmJiAnbWVzc2FnZScgaW4gZXJyb3IgJiYgZXJyb3IubWVzc2FnZSA9PT0gJ2Vycm9yLnRlbXBsYXRlLmV4dHJhY3Rpb24nKSB7XG4gICAgICBlcnJvclRlbXBsYXRlRXh0cmFjdGlvbiA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChlcnJvciBpbnN0YW5jZW9mIFhNTEh0dHBSZXF1ZXN0KSB7XG4gICAgICBjb25zdCBlID0gZXJyb3I7XG4gICAgICBpZiAoJ3Jlc3BvbnNlJyBpbiBlICYmICdkYXRhJyBpbiBlLnJlc3BvbnNlLmRhdGEgJiYgZS5yZXNwb25zZS5kYXRhLm1lc3NhZ2UgPT09ICdlcnJvci50ZW1wbGF0ZS5leHRyYWN0aW9uJykge1xuICAgICAgICBlcnJvclRlbXBsYXRlRXh0cmFjdGlvbiA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlcnJvciBpbnN0YW5jZW9mIEF4aW9zRXJyb3IpIHtcbiAgICAgIGlmIChlcnJvci5jb2RlID09PSAnRUNPTk5BQk9SVEVEJykge1xuICAgICAgICBjb25zb2xlLmxvZygnVGhlIGV2YWx1YXRlIGJpb21ldHJpY3MgcmVxdWVzdCB0b29rIHRvbyBsb25nIHRvIGFuc3dlciEnKTtcbiAgICAgICAgdGhyb3cgbmV3IENhcHR1cmVBcGlFcnJvcihcbiAgICAgICAgICAnRXZhbHVhdGUgYmlvbWV0cmljcyB0b29rIHRvbyBsb25nIHRvIHJlcGx5JyxcbiAgICAgICAgICBDYXB0dXJlRXJyb3JTdGF0dXNFbnVtLkVWQUxVQVRFX0JJT01FVFJJQ1NfVElNRU9VVFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZXZhbHVhdGluZyBiaW9tZXRyaWNzIScsIGVycm9yKTtcbiAgICAgIH1cbiAgICAgIC8vIHRoaXMgdXBkYXRlcyB0aGUgc3RhdXMgaW4gY2FzZSB0aGUgZmluZ2VyIGhhZCBhIHN0YXR1c1xuICAgICAgc2V0RmluZ2VycyhnZXRGaW5nZXJzKCkpO1xuICAgICAgLy8gbm8gbG9uZ2VyIGNhcHR1cmluZ1xuICAgICAgc2V0Q2FwdHVyaW5nKGZhbHNlKTtcbiAgICAgIHRocm93IG5ldyBDYXB0dXJlQXBpRXJyb3IoXG4gICAgICAgICdOZXR3b3JrIGlzc3VlIHdoaWxlIHZhbGlkYXRpbmcgYmlvbWV0cmljcywgY2hlY2sgbG9ncycsXG4gICAgICAgIENhcHR1cmVFcnJvclN0YXR1c0VudW0uRVZBTFVBVEVfQklPTUVUUklDU19ORVRXT1JLX0lTU1VFXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0aGlzIGNoYW5nZXMgdXBkYXRlcyB0aGUgc3RhdXMgaW4gY2FzZSB0aGUgZmluZ2VyIGhhZCBhIHN0YXR1c1xuICAgICAgc2V0RmluZ2VycyhnZXRGaW5nZXJzKCkpO1xuICAgICAgLy8gbm8gbG9uZ2VyIGNhcHR1cmluZ1xuICAgICAgc2V0Q2FwdHVyaW5nKGZhbHNlKTtcbiAgICAgIHRocm93IG5ldyBDYXB0dXJlQXBpRXJyb3IoXG4gICAgICAgICdOZXR3b3JrIGlzc3VlIHdoaWxlIHZhbGlkYXRpbmcgYmlvbWV0cmljcywgY2hlY2sgbG9ncycsXG4gICAgICAgIENhcHR1cmVFcnJvclN0YXR1c0VudW0uRVZBTFVBVEVfQklPTUVUUklDU19ORVRXT1JLX0lTU1VFXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBsZXQgaXNGaW5nZXJMb3dRdWFsaXR5LFxuICAgIGlzRHVwbGljYXRlRmluZ2VyLFxuICAgIGlzRm9yYmlkZGVuRmluZ2VyLFxuICAgIGlzQWdyRmluZ2VyRGV0ZWN0ZWQsXG4gICAgaXNBZ3JOb3RNYXRjaGVkRmluZ2VyLFxuICAgIHJldHVybkNvZGUgPSBoYW5kbGVDYXB0dXJlUmV0dXJuU3RhdHVzLkxPV19RVUFMSVRZO1xuICBpZiAocmVzcG9uc2UpIHtcbiAgICAvLyBnZXQgdGhlIGN1cnJlbnQgZmluZ2VyIGZyb20gdGhlIHJldHVybiBsaXN0XG4gICAgY29uc3QgdmFsaWRhdGVkRmluZ2VyID0gcmVzcG9uc2UuYm9keVBhcnRzLmZpbmQoXG4gICAgICAodmFsaWRhdGVkRmluZ2VyKSA9PiB2YWxpZGF0ZWRGaW5nZXIuYm9keVBhcnQgPT09IGZpbmdlci5ib2R5UGFydFxuICAgICkgYXMgQm9keVBhcnRSZXR1cm5UeXBlO1xuICAgIC8vIHNldCB0aGlzIGZpbmdlcidzIHF1YWxpdHkgYW5kIGltYWdlXG4gICAgZmluZ2VyLm5maXFSYXRpbmcgPSB2YWxpZGF0ZWRGaW5nZXIucXVhbGl0eTtcbiAgICAvLyBjaGVjayBmb3IgZHVwbGljYXRlIGFuZCBsb3cgcXVhbGl0eVxuICAgIGlmICh2YWxpZGF0ZWRGaW5nZXIucXVhbGl0eSA+IGdldE1pbk5maXFBY2NlcHRhYmxlKCkgfHwgdmFsaWRhdGVkRmluZ2VyLnN0YXR1cyA9PT0gJ0xPV19RVUFMSVRZJykge1xuICAgICAgaXNGaW5nZXJMb3dRdWFsaXR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybkNvZGUgPSBoYW5kbGVDYXB0dXJlUmV0dXJuU3RhdHVzLkxPV19RVUFMSVRZO1xuICAgIH1cbiAgICBpZiAocmVzcG9uc2UuYm9keVBhcnRzLmZpbmQoKHZhbGlkYXRlZEZpbmdlcikgPT4gdmFsaWRhdGVkRmluZ2VyLnN0YXR1cyA9PT0gJ0RVUExJQ0FURScpKSB7XG4gICAgICBpc0R1cGxpY2F0ZUZpbmdlciA9IHRydWU7XG4gICAgICByZXR1cm5Db2RlID0gaGFuZGxlQ2FwdHVyZVJldHVyblN0YXR1cy5EVVBMSUNBVEU7XG4gICAgfVxuICAgIGlmIChyZXNwb25zZS5ib2R5UGFydHMuZmluZCgodmFsaWRhdGVkRmluZ2VyKSA9PiB2YWxpZGF0ZWRGaW5nZXIuc3RhdHVzID09PSAnRk9SQklEREVOJykpIHtcbiAgICAgIGlzRm9yYmlkZGVuRmluZ2VyID0gdHJ1ZTtcbiAgICAgIHJldHVybkNvZGUgPSBoYW5kbGVDYXB0dXJlUmV0dXJuU3RhdHVzLkZPUkJJRERFTjtcbiAgICB9XG4gICAgaWYgKHJlc3BvbnNlLmJvZHlQYXJ0cy5maW5kKCh2YWxpZGF0ZWRGaW5nZXIpID0+IHZhbGlkYXRlZEZpbmdlci5zdGF0dXMgPT09ICdBR1InKSkge1xuICAgICAgaXNBZ3JGaW5nZXJEZXRlY3RlZCA9IHRydWU7XG4gICAgICByZXR1cm5Db2RlID0gaGFuZGxlQ2FwdHVyZVJldHVyblN0YXR1cy5BR1JfREVURUNURUQ7XG4gICAgfVxuICAgIGlmIChyZXNwb25zZS5ib2R5UGFydHMuZmluZCgodmFsaWRhdGVkRmluZ2VyKSA9PiB2YWxpZGF0ZWRGaW5nZXIuc3RhdHVzID09PSAnQUdSX05PVF9NQVRDSCcpKSB7XG4gICAgICBpc0Fnck5vdE1hdGNoZWRGaW5nZXIgPSB0cnVlO1xuICAgICAgcmV0dXJuQ29kZSA9IGhhbmRsZUNhcHR1cmVSZXR1cm5TdGF0dXMuQUdSX05PX01BVENIO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoaXMgZmluZ2VyIGlzIGxvdyBxdWFsaXR5IG9yIGR1cGxpY2F0ZVxuICAvLyAoaWYgdGhlcmUgaXMgYSBkdXBsaWNhdGUsIGl0IGhhcyB0byBiZSB0aGlzIGZpbmdlcilcbiAgaWYgKFxuICAgIGlzRHVwbGljYXRlRmluZ2VyIHx8XG4gICAgaXNGaW5nZXJMb3dRdWFsaXR5IHx8XG4gICAgaXNGb3JiaWRkZW5GaW5nZXIgfHxcbiAgICBpc0Fnck5vdE1hdGNoZWRGaW5nZXIgfHxcbiAgICBpc0FnckZpbmdlckRldGVjdGVkIHx8XG4gICAgZXJyb3JUZW1wbGF0ZUV4dHJhY3Rpb25cbiAgKSB7XG4gICAgLy8gY2xlYXIgdGhpcyBmaW5nZXJcbiAgICBmaW5nZXIubmZpcVJhdGluZyA9IC0xO1xuICAgIGZpbmdlci5iYXNlNjRXU1EgPSAnJztcbiAgICBmaW5nZXIuaW1hZ2UgPSAnJztcbiAgICBmaW5nZXIuc3RhdHVzID0gRmluZ2VyU3RhdHVzLkFWQUlMQUJMRTtcbiAgICAvLyBzZXQgdGhlIGFwcHJvcHJpYXRlIHN3YWwgcHJlZml4XG4gICAgbGV0IHN3YWxUcmFuc2xhdGVQcmVmaXggPSAnYmFkRmluZ2VyUXVhbGl0eVN3YWwnO1xuICAgIGlmIChpc0R1cGxpY2F0ZUZpbmdlcikge1xuICAgICAgc3dhbFRyYW5zbGF0ZVByZWZpeCA9ICd1bmtub3duRHVwbGljYXRlRmluZ2VyU3dhbCc7XG4gICAgfSBlbHNlIGlmIChpc0ZvcmJpZGRlbkZpbmdlcikge1xuICAgICAgc3dhbFRyYW5zbGF0ZVByZWZpeCA9ICdmb3JiaWRkZW5GaW5nZXJTd2FsJztcbiAgICB9IGVsc2UgaWYgKGlzQWdyRmluZ2VyRGV0ZWN0ZWQpIHtcbiAgICAgIHN3YWxUcmFuc2xhdGVQcmVmaXggPSAnYWdyRmluZ2VyJztcbiAgICB9IGVsc2UgaWYgKGlzQWdyTm90TWF0Y2hlZEZpbmdlcikge1xuICAgICAgc3dhbFRyYW5zbGF0ZVByZWZpeCA9ICdhZ3JGaW5nZXJOb3RNYXRjaGVkJztcbiAgICB9XG4gICAgbGV0IGh0bWwgPSAkZm9ybWF0KGAke3N3YWxUcmFuc2xhdGVQcmVmaXh9LnRleHRgKTtcbiAgICAvLyBpZiB3ZSBhcmUgdXNpbmcgd2FzbSwgd2Uga25vdyBleGFjdGx5IHdoaWNoIGZpbmdlcnMgd2VyZSB0aGUgaXNzdWVcbiAgICBpZiAoZ2V0KHVzZVdhc20pICYmIGlzRHVwbGljYXRlRmluZ2VyKSB7XG4gICAgICBzd2FsVHJhbnNsYXRlUHJlZml4ID0gJ2R1cGxpY2F0ZUZpbmdlclN3YWwnO1xuICAgICAgaHRtbCA9ICRmb3JtYXQoYCR7c3dhbFRyYW5zbGF0ZVByZWZpeH0udGV4dGAsIHtcbiAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgZmluZ2VyMTogJGZvcm1hdChgJHtzd2FsVHJhbnNsYXRlUHJlZml4fS4keyhyZXNwb25zZSBhcyBhbnkpLm1hdGNoaW5nRmluZ2Vycz8uWzBdfWApLFxuICAgICAgICAgIGZpbmdlcjI6ICRmb3JtYXQoYCR7c3dhbFRyYW5zbGF0ZVByZWZpeH0uJHsocmVzcG9uc2UgYXMgYW55KS5tYXRjaGluZ0ZpbmdlcnM/LlsxXX1gKSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgb3V0cHV0ID0gY29sbGVjdEZpbmdlcnMoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJldHVybkNvZGUsXG4gICAgICAgIGJvZHlQYXJ0czogb3V0cHV0LFxuICAgICAgICBtYXRjaGluZ0ZpbmdlcnM6IChyZXNwb25zZSBhcyBhbnkpLm1hdGNoaW5nRmluZ2VycyBhcyBCb2R5UGFydE5hbWVzW10sXG4gICAgICAgIG1lc3NhZ2U6IGh0bWwsXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBvdXRwdXQgPSBjb2xsZWN0RmluZ2VycygpO1xuICAgIHJldHVybiB7IHJldHVybkNvZGUsIGJvZHlQYXJ0czogb3V0cHV0LCBtZXNzYWdlOiBodG1sIH07XG4gICAgLy8gLy8gZmlyZSBhIHN3YWwgdG8gd2FybiB1c2VyIGFuZCBnZXQgY2hvaWNlXG4gICAgLy8gY29uc3QgY2hvaWNlID0gYXdhaXQgbXlTd2FsLmZpcmUoe1xuICAgIC8vICAgdGl0bGU6ICRmb3JtYXQoYCR7c3dhbFRyYW5zbGF0ZVByZWZpeH0udGl0bGVgKSxcbiAgICAvLyAgIGh0bWwsXG4gICAgLy8gICBjb25maXJtQnV0dG9uVGV4dDogJGZvcm1hdChgJHtzd2FsVHJhbnNsYXRlUHJlZml4fS5yZXRyeWApLFxuICAgIC8vICAgY2FuY2VsQnV0dG9uVGV4dDogJGZvcm1hdChgJHtzd2FsVHJhbnNsYXRlUHJlZml4fS5jYW5jZWxgKSxcbiAgICAvLyAgIC8vIGlmIHRoZSBmaW5nZXIgaXMgbG93IHF1YWxpdHksIHNob3cgYWxzbyBkZW55IGJ1dHRvblxuICAgIC8vICAgLi4uKGlzRmluZ2VyTG93UXVhbGl0eSAmJiB7IHNob3dEZW55QnV0dG9uOiB0cnVlLCBkZW55QnV0dG9uVGV4dDogJGZvcm1hdChgJHtzd2FsVHJhbnNsYXRlUHJlZml4fS5kZW55YCkgfSksXG4gICAgLy8gICBzaG93Q2FuY2VsQnV0dG9uOiB0cnVlLFxuICAgIC8vICAgaWNvbjogJ2Vycm9yJyxcbiAgICAvLyB9KTtcblxuICAgIC8vIGlmIHRoZSB1c2VyIGNob3NlIHRvIHRyeSBhbm90aGVyIGZpbmdlciwgdGhpcyBmaW5nZXIgd2lsbCBiZSBzZXQgYXMgdW5hdmFpbGFibGVcbiAgICAvLyBpZiAoY2hvaWNlLmlzRGVuaWVkKSB7XG4gICAgLy8gICB1cGRhdGVDdXJyZW50RGlzcGxheShGaW5nZXJEaXNwbGF5QXJlYVR5cGUudW5jb2xsZWN0ZWRGaW5nZXIpO1xuICAgIC8vICAgYXdhaXQgaGFuZGxlTWlzc2luZ09yVW5hdmFpbGFibGUoRmluZ2VyU3RhdHVzLlVOQVZBSUxBQkxFKTtcbiAgICAvLyAgIC8vIHRoaXMgY2hhbmdlcyB1cGRhdGVzIHRoZSBzdGF0dXMgaW4gY2FzZSB0aGUgZmluZ2VyIGhhZCBhIHN0YXR1c1xuICAgIC8vICAgc2V0RmluZ2VycyhnZXRGaW5nZXJzKCkpO1xuICAgIC8vICAgLy8gbm8gbG9uZ2VyIGNhcHR1cmluZ1xuICAgIC8vICAgaWYgKCFpc0F1dG9tYXRpYykgc2V0Q2FwdHVyaW5nKGZhbHNlKTtcbiAgICAvLyAgIHJldHVybiBoYW5kbGVDYXB0dXJlUmV0dXJuU3RhdHVzLlRSWUlOR19PVEhFUl9GSU5HRVI7XG4gICAgLy8gfVxuICAgIC8vIC8vIGlmIHRoZSB1c2VyIGNhbmNlbGxlZCwganVzdCByZXR1cm5cbiAgICAvLyBpZiAoY2hvaWNlLmlzRGlzbWlzc2VkKSB7XG4gICAgLy8gICB1cGRhdGVDdXJyZW50RGlzcGxheShGaW5nZXJEaXNwbGF5QXJlYVR5cGUudW5jb2xsZWN0ZWRGaW5nZXIpO1xuICAgIC8vICAgLy8gdGhpcyBjaGFuZ2VzIHVwZGF0ZXMgdGhlIHN0YXR1cyBpbiBjYXNlIHRoZSBmaW5nZXIgaGFkIGEgc3RhdHVzXG4gICAgLy8gICBzZXRGaW5nZXJzKGdldEZpbmdlcnMoKSk7XG4gICAgLy8gICAvLyBubyBsb25nZXIgY2FwdHVyaW5nXG4gICAgLy8gICBzZXRDYXB0dXJpbmcoZmFsc2UpO1xuICAgIC8vICAgcmV0dXJuIHJldHVybkNvZGU7XG4gICAgLy8gfVxuICAgIC8vIC8vIGlmIHRoZSB1c2VyIHdhbnRzIHRvIHRyeSBhZ2FpbiwgdGhlIGZpbmdlcnMgd2lsbCBnZXQgdXBkYXRlZCBvbmx5IHdoZW4gYSBnb29kIGZpbmdlciBpcyBjYXB0dXJlZFxuICAgIC8vIC8vIG9yIHdoZW4gdGhlIHVzZXIgZ2V0cyB0aXJlZCBvZiB0cnlpbmdcbiAgICAvLyBpZiAoY2hvaWNlLmlzQ29uZmlybWVkKSB7XG4gICAgLy8gICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVDYXB0dXJlKGlzQXV0b21hdGljKTtcbiAgICAvLyAgIGlmIChyZXN1bHQgIT09IGhhbmRsZUNhcHR1cmVSZXR1cm5TdGF0dXMuQ0FQVFVSRUQpIHtcbiAgICAvLyAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAvLyAgIH1cbiAgICAvLyB9XG4gIH1cbiAgLy8gc2hvdyB0aGUgY29sbGVjdGVkIGZpbmdlclxuICBzZXRGaW5nZXJzKGdldEZpbmdlcnMoKSk7XG5cbiAgc2V0Q2FwdHVyaW5nKGZhbHNlKTtcbiAgLy8gc2VuZCBjb2xsZWN0ZWQgZmluZ2VyIG1lc3NhZ2VcbiAgbm90aWZ5RmluZ2VyQ29sbGVjdGVkKCk7XG5cbiAgcmV0dXJuIHsgcmV0dXJuQ29kZTogaGFuZGxlQ2FwdHVyZVJldHVyblN0YXR1cy5DQVBUVVJFRCwgYm9keVBhcnRzOiBjb2xsZWN0RmluZ2VycygpIH07XG59XG5cbi8qKlxuICogU2VsZWN0IGZpbmdlciBwcm9ncmFtbWF0aWNhbGx5ICh3aXRob3V0IHVzZXIgY2xpY2spXG4gKi9cbmZ1bmN0aW9uIHNlbGVjdEZpbmdlckFwaShpbmRleDogRmluZ2VySW5kZXgpOiBGaW5nZXIge1xuICAvLyB1bnNlbGVjdCBldmVyeXRoaW5nXG4gIHNlbGVjdE5vdGhpbmcoKTtcbiAgZm9yIChjb25zdCBmaW5nZXIgb2YgZ2V0RmluZ2VycygpKSB7XG4gICAgaWYgKGZpbmdlci5pbmRleCA9PT0gaW5kZXgpIHtcbiAgICAgIGZpbmdlci5zZWxlY3RlZCA9IHRydWU7XG4gICAgICByZXR1cm4gZmluZ2VyO1xuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYEZpbmdlciAke2luZGV4fSBub3QgZm91bmRgKTtcbn1cbiJdLCJuYW1lcyI6WyIkZm9ybWF0IiwidW53cmFwRnVuY3Rpb25TdG9yZSIsImZvcm1hdCIsIkNhcHR1cmVFcnJvclN0YXR1c0VudW0iLCJDYXB0dXJlQXBpRXJyb3IiLCJtZXNzYWdlIiwic3RhdHVzIiwiY2FwdHVyZVNpbmdsZUZpbmdlciIsImZpbmdlck5hbWVPckluZGV4IiwiZ2V0RmluZ2VycHJpbnRQYXJhbXMiLCJmaW5nZXJJbmRleCIsIm5vcm1hbGl6ZUZpbmdlck5hbWVzQW5kSW5kZXhlc1RvSW5kZXhlcyIsImV4dGVuc2lvbiIsImdldEV4dGVuc2lvbiIsImlzT2JqZWN0RW1wdHkiLCJpc0V2ZXJ5dGhpbmdJbnN0YWxsZWQiLCJzZXRDYXB0dXJpbmciLCJpc0NhbmNlbGxpbmciLCJzZXRDYW5jZWxsaW5nIiwiY2FwdHVyZSIsImVyciIsImUiLCJmaW5nZXIiLCJzZWxlY3RGaW5nZXJBcGkiLCJGaW5nZXJTdGF0dXMiLCJjb2xsZWN0ZWRGaW5nZXJzIiwiZ2V0Q29sbGVjdGVkRmluZ2VycyIsImdldEZpbmdlcnMiLCJyZXNwb25zZSIsImVycm9yVGVtcGxhdGVFeHRyYWN0aW9uIiwidmFsaWRhdGVGaW5nZXJCaW9tZXRyaWNzIiwiZXJyb3IiLCJpc09iamVjdCIsIkF4aW9zRXJyb3IiLCJzZXRGaW5nZXJzIiwiaXNGaW5nZXJMb3dRdWFsaXR5IiwiaXNEdXBsaWNhdGVGaW5nZXIiLCJpc0ZvcmJpZGRlbkZpbmdlciIsImlzQWdyRmluZ2VyRGV0ZWN0ZWQiLCJpc0Fnck5vdE1hdGNoZWRGaW5nZXIiLCJyZXR1cm5Db2RlIiwiaGFuZGxlQ2FwdHVyZVJldHVyblN0YXR1cyIsInZhbGlkYXRlZEZpbmdlciIsImdldE1pbk5maXFBY2NlcHRhYmxlIiwic3dhbFRyYW5zbGF0ZVByZWZpeCIsImh0bWwiLCJnZXQiLCJ1c2VXYXNtIiwib3V0cHV0IiwiY29sbGVjdEZpbmdlcnMiLCJub3RpZnlGaW5nZXJDb2xsZWN0ZWQiLCJpbmRleCIsInNlbGVjdE5vdGhpbmciXSwibWFwcGluZ3MiOiI7QUErQkEsTUFBTUEsSUFBVUMsRUFBb0JDLENBQU07QUFJeEIsSUFBQUMsc0JBQUFBLE9BQ2hCQSxFQUFBLG9CQUFvQixxQkFDcEJBLEVBQUEsaUJBQWlCLGtCQUNqQkEsRUFBQSx5QkFBeUIsMEJBQ3pCQSxFQUFBLG9CQUFvQixxQkFDcEJBLEVBQUEsaUNBQWlDLGtDQUNqQ0EsRUFBQSxxQkFBcUIsc0JBQ3JCQSxFQUFBLGdCQUFnQixpQkFDaEJBLEVBQUEsOEJBQThCLCtCQUM5QkEsRUFBQSxvQ0FBb0MscUNBVHBCQSxJQUFBQSxLQUFBLENBQUEsQ0FBQTtBQVlYLE1BQU1DLFVBQXdCLE1BQU07QUFBQSxFQUN6QyxZQUFZQyxHQUF3QkMsR0FBZ0M7QUFDbEUsVUFBTUQsQ0FBTyxHQURxQixLQUFBLFNBQUFDO0FBQUEsRUFFcEM7QUFDRjtBQUtBLGVBQWVDLEVBQ2JDLEdBQ0FDLEdBTUM7QUFDRCxRQUFNQyxJQUFjQyxFQUF3QyxDQUFDSCxDQUFpQixDQUFDLEVBQUUsQ0FBQyxHQUU1RUksSUFBWUM7QUFFZCxNQUFBQyxFQUFjRixDQUFTO0FBQ3pCLFVBQU0sSUFBSVI7QUFBQSxNQUNSLHdHQUF3R1E7QUFBQSxNQUN4RztBQUFBO0FBQUEsSUFBQTtBQUtKLE1B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
|